pax_global_header00006660000000000000000000000064133676656250014535gustar00rootroot0000000000000052 comment=f8c90fa36859ca41c766efcf0c476d58913a7767 Validation-1.1.29/000077500000000000000000000000001336766562500137215ustar00rootroot00000000000000Validation-1.1.29/.gitignore000066400000000000000000000000661336766562500157130ustar00rootroot00000000000000.couscous/ composer.lock Makefile phpunit.xml vendor/ Validation-1.1.29/.php_cs000066400000000000000000000020771336766562500152040ustar00rootroot00000000000000files() ->name('*.php') ->name('*.phpt') ->in('library') ->in('tests'); return Symfony\CS\Config\Config::create() ->level(\Symfony\CS\FixerInterface::PSR2_LEVEL) ->fixers(array( // All items of the @param, @throws, @return, @var, and @type phpdoc // tags must be aligned vertically. 'phpdoc_params', // Convert double quotes to single quotes for simple strings. 'single_quote', // Group and seperate @phpdocs with empty lines. 'phpdoc_separation', // An empty line feed should precede a return statement. 'return', // PHP arrays should use the PHP 5.4 short-syntax. 'short_array_syntax', // Remove trailing whitespace at the end of blank lines. 'whitespacy_lines', // Removes extra empty lines. 'extra_empty_lines', // Unused use statements must be removed. 'unused_use', // Ordering use statements. 'ordered_use', )) ->finder($finder); Validation-1.1.29/.scrutinizer.yml000066400000000000000000000005441336766562500171060ustar00rootroot00000000000000filter: excluded_paths: - tests/* checks: php: code_rating: true tools: external_code_coverage: true php_analyzer: true php_changetracking: true php_code_sniffer: config: standard: "PSR2" php_cpd: true php_mess_detector: true php_pdepend: true sensiolabs_security_checker: true Validation-1.1.29/.travis.yml000066400000000000000000000011161336766562500160310ustar00rootroot00000000000000sudo: false language: php php: - 5.4 - 5.5 - 5.6 - 7.0 - 7.1 - hhvm before_script: - composer self-update - composer install --no-interaction --prefer-source script: - vendor/bin/phpunit --configuration phpunit.xml.dist --colors --coverage-clover=coverage.clover after_script: - test "5.6" == "${TRAVIS_PHP_VERSION}" && wget https://scrutinizer-ci.com/ocular.phar - test -f ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover notifications: irc: channels: - "irc.freenode.org#php-respect" use_notice: true Validation-1.1.29/CHANGELOG.md000066400000000000000000000073101336766562500155330ustar00rootroot00000000000000# Changes in Respect\Validation 1.0 All notable changes of the Respect\Validation releases are documented in this file. ## 1.1.0 - 2016-04-24 ### Added - Create "Fibonacci" rule (#637) - Create "IdentityCard" rule (#632) - Create "Image" rule (#621) - Create "LanguageCode" rule (#597) - Create "Pesel" rule (#616) - Create "PhpLabel" rule (#652) ### Changed - Allow the define brands for credit card validation (#661) - Define names for the child of Not rule (#641) - Ensure namespace separator on appended prefixes (#666) - Length gets length of integers (#643) - Set template for the only rule in the chain (#663) - Throw an exception when age is not an integer (#667) - Use "{less/greater} than or equal to" phrasing (#604) ## 1.0.0 - 2015-10-24 ### Added - Add "alpha-3" and "numeric" formats for "CountryCode" rule (#530) - Add support for PHP 7 (#426) - Create "BoolVal" rule (#583) - Create "Bsn" rule (#450) - Create "CallableType" rule (#397) - Create "Countable" rule (#566) - Create "CurrencyCode" rule (#567) - Create "Extension" rule (#360) - Create "Factor" rule (#405) - Create "Finite" rule (#397) - Create "FloatType" rule (#565) - Create "Identical" rule (#442) - Create "Imei" rule (#590) - Create "Infinite" rule (#397) - Create "IntType" rule (#451) - Create "Iterable" rule (#570) - Create "KeyNested" rule (#429) - Create "KeySet" rule (#374) - Create "KeyValue" rule (#441) - Create "Mimetype" rule (#361) - Create "NotBlank" rule (#443) - Create "NotOptional" rule (#448) - Create "Optional" rule (#423) - Create "ResourceType" rule (#397) - Create "ScalarVal" rule (#397) - Create "Size" rule (#359) - Create "SubdivisionCode" rule for 252 countries (#411) - Create "VideoUrl" rule (#410) - Create method `getMessages()` for nested exceptions (#406) ### Changed - Add country code to the message of "PostalCode" exception rule (#413) - Make "ArrayVal" validate only if the input can be used as an array (#574) - Make "Between" rule inclusive (#445) - Make "Max" rule inclusive (#445) - Make "Min" rule inclusive (#445) - New generic top-level domains (#368) - On `AbstractRelated` (`Attribute`, `Call` and `Key`) define names for child rules (#365) - On exceptions, convert `Array` to string (#387) - On exceptions, convert `Exception` to string (#399) - On exceptions, convert `Traversable` to string (#399) - On exceptions, convert resources to string (#399) - On exceptions, do not display parent message then rule has only one child (#407) - On exceptions, improve `Object` conversion to string (#399) - On exceptions, improve conversion of all values by using JSON (#399) - On exceptions, nested messages are displayed in a Markdown list (#588) - Rename exception class "AbstractGroupedException" to "GroupedValidationException" (#591) - Rename exception class "AbstractNestedException" to "NestedValidationException" (#591) - Rename rule "Arr" to "ArrayVal" - Rename rule "Bool" to "BoolType" (#426) - Rename rule "False" to "FalseVal" (#426) - Rename rule "Float" to "FloatVal" (#426) - Rename rule "Int" to "IntVal" (#426) - Rename rule "NullValue" to "NullType" - Rename rule "Object" to "ObjectType" - Rename rule "String" to "StringType" (#426) - Rename rule "True" to "TrueVal" (#426) - Use `filter_var()` on "TrueVal" and "FalseVal" rules (#409) ### Removed - Drop support for PHP 5.3 (#466) - Remove `addOr()` shortcut (#444) - Remove `NestedValidationExceptionInterface` interface (#591) - Remove `not()` shortcut (#444) - Remove `ValidationExceptionInterface` interface (#591) - Remove identical checking from "Equals" rule (#442) - Removed Deprecated Rules (#277) - Validation rules do not accept an empty string by default (#422) *** See also: - [README](README.md) - [Contributing](CONTRIBUTING.md) - [License](LICENSE.md) Validation-1.1.29/CONTRIBUTING.md000066400000000000000000000171071336766562500161600ustar00rootroot00000000000000# Contributing Contributions to Respect\Validation are always welcome. You make our lives easier by sending us your contributions through [pull requests][]. Pull requests for bug fixes must be based on the oldest supported version's branch (see [Release Cycle and Support][]) whereas pull requests for new features must be based on the `master` branch. Due to time constraints, we are not always able to respond as quickly as we would like. Please do not take delays personal and feel free to remind us here, on IRC, or on Gitter if you feel that we forgot to respond. Please see the [project documentation][] before proceeding. You should also know about [PHP-FIG][]'s standards and basic unit testing, but we're sure you can learn that just by looking at other rules. Pick the simple ones like `ArrayType` to begin. Before writing anything, feature or bug fix: - Check if there is already an issue related to it (opened or closed) and if someone is already working on that; - If there is not, [open an issue][] and notify everybody that you're going to work on that; - If there is, create a comment to notify everybody that you're going to work on that. - Make sure that what you need is not done yet ## Adding a new validator A common validator (rule) on Respect\Validation is composed of three classes: * `library/Rules/YourRuleName.php`: the rule itself * `library/Exceptions/YourRuleNameException.php`: the exception thrown by the rule * `tests/unit/Rules/YourRuleNameTest.php`: tests for the rule The classes are pretty straightforward. In the sample below, we're going to create a validator that validates if a string is equal to "Hello World". ### Creating the rule The rule itself needs to implement the `Validatable` interface but, it is convenient to just extend the `AbstractRule` class. Doing that, you'll only need to declare one method: `validate($input)`. This method must return `true` or `false`. If your validator class is `HelloWorld`, it will be available as `v::helloWorld()` and will natively have support for chaining and everything else. ```php * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class HelloWorld extends AbstractRule { public function validate($input) { return $input === 'Hello World'; } } ``` Docblocks with `@param`, `@return`, `{@inheritdoc}`, `@author` and other annotations for classes and methods are encouraged but not required. ### Creating the rule exception Just that and we're done with the rule code. The Exception requires you to declare messages used by `assert()` and `check()`. Messages are declared in affirmative and negative moods, so if anyone calls `v::not(v::helloWorld())` the library will show the appropriate message. ```php * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class HelloWorldException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a Hello World', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a Hello World', ] ]; } ``` ### Creating unit tests Finally, we need to test if everything is running smooth. We have `RuleTestCase` that allows us to make easier to test rules, but you fell free to use the `PHPUnit_Framework_TestCase` if you want or you need it's necessary. The `RuleTestCase` extends PHPUnit's `PHPUnit_Framework_TestCase` class, so you are able to use any methods of it. By extending `RuleTestCase` you should implement two methods that should return a [data provider][] with the rule as first item of the arrays: - `providerForValidInput`: Will test when `validate()` should return `true` - `providerForInvalidInput`: Will test when `validate()` should return `false` ```php * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\HelloWorld */ class HelloWorldTest extends RuleTestCase { public function providerForValidInput() { $rule = new HelloWorld(); return [ [$rule, 'Hello World'], ]; } public function providerForInvalidInput() { $rule = new HelloWorld(); return [ [$rule, 'Not a hello'], [$rule, 'Hello darkness, my old friend'], [$rule, 'Hello is it me you\'re looking for?'], ]; } } ``` If the constructor of your rule accepts arguments you may create specific tests for it other than what is covered by `RuleTestCase`. ### Helping us a little bit more You rule will be accepted only with these 3 files (rule, exception and unit test), but if you really want to help us, you can follow the example of [ArrayType][] by: - Adding your new rule on the `Validator`'s class docblock; - Writing a documentation for your new rule; - Creating integration tests with PHPT. As we already said, none of them are required but you will help us a lot. ## Documentation Our docs at http://respect.github.io/Validation are generated from our Markdown files using [Read the Docs][]. Add your brand new rule there and everything will be updated automatically. ## Running Tests After run `composer install` on the library's root directory you must run PHPUnit. ### Linux You can test the project using the commands: ```sh $ vendor/bin/phpunit ``` or ```sh $ composer test ``` ### Windows You can test the project using the commands: ```sh > vendor\bin\phpunit ``` or ```sh > composer test ``` No test should fail. You can tweak the PHPUnit's settings by copying `phpunit.xml.dist` to `phpunit.xml` and changing it according to your needs. ## Coding style and standards We follow the [PSR-2][] coding style and [PSR-4][] autoloading standard. There are some preferences regarding code style which you can easily adhere to by using [php-cs-fixer][]. This will format all PHP files consistently using the preferences of this project. ```sh $ vendor/bin/php-cs-fixer fix ``` *** See also: - [README](README.md) - [License](LICENSE.md) - [Changelog](CHANGELOG.md) [ArrayType]: https://github.com/Respect/Validation/commit/f08a1fa [Read the Docs]: https://readthedocs.org/ "Read the Docs" [data provider]: https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers "PHPUnit Data Providers" [open an issue]: http://github.com/Respect/Validation/issues [php-cs-fixer]: https://github.com/FriendsOfPHP/PHP-CS-Fixer "PHP Coding Standard Fixer" [PHP-FIG]: http://www.php-fig.org "PHP Framework Interop Group" [project documentation]: http://respect.github.io/Validation "Respect\Validation documentation" [PSR-2]: http://www.php-fig.org/psr/psr-2 "PHP Standard Recommendation: Coding Style Guide" [PSR-4]: http://www.php-fig.org/psr/psr-4 "PHP Standard Recommendation: Autoloader" [pull requests]: http://help.github.com/pull-requests "GitHub pull requests" [Release Cycle and Support]: https://github.com/Respect/Validation/wiki/Release-Cycle-and-Support Validation-1.1.29/LICENSE.md000066400000000000000000000031641336766562500153310ustar00rootroot00000000000000# License Copyright (c) 2009-2015, [Alexandre Gomes Gaigalas](http://github.com/alganet). 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. * Neither the name of Alexandre Gomes Gaigalas nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 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. *** See also: - [README](README.md) - [Contributing](CONTRIBUTING.md) - [Changelog](CHANGELOG.md) Validation-1.1.29/README.md000066400000000000000000000030141336766562500151760ustar00rootroot00000000000000# Respect\Validation [![Build Status](https://img.shields.io/travis/Respect/Validation/master.svg?style=flat-square)](http://travis-ci.org/Respect/Validation) [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/Respect/Validation/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/Respect/Validation/?branch=master) [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/Respect/Validation/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/Respect/Validation/?branch=master) [![Latest Stable Version](https://img.shields.io/packagist/v/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [![Total Downloads](https://img.shields.io/packagist/dt/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [![License](https://img.shields.io/packagist/l/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [The most awesome validation engine ever created for PHP.](http://bit.ly/1a1oeQv) - Complex rules made simple: `v::numeric()->positive()->between(1, 255)->validate($input)`. - Granularity control for advanced reporting. - More than 100 (fully tested) validators. - A concrete API for non fluent usage. - Works on PHP 5.4+ or HHVM 3.3+ ## Documentation Documentation can be found in https://respect-validation.readthedocs.io and also in the [docs/](docs/index.md) folder. ## Table of contents - [Contributing](CONTRIBUTING.md) - [License](LICENSE.md) - [Changelog](CHANGELOG.md) Validation-1.1.29/composer.json000066400000000000000000000031461336766562500164470ustar00rootroot00000000000000{ "name": "respect/validation", "description": "The most awesome validation engine ever created for PHP", "keywords": ["respect", "validation", "validator"], "type": "library", "homepage": "http://respect.github.io/Validation/", "license": "BSD-3-Clause", "authors": [ { "name": "Respect/Validation Contributors", "homepage": "https://github.com/Respect/Validation/graphs/contributors" } ], "require": { "php": ">=5.4", "symfony/polyfill-mbstring": "^1.2" }, "require-dev": { "egulias/email-validator": "~1.2 || ~2.1", "mikey179/vfsStream": "^1.5", "phpunit/phpunit": "~4.0", "symfony/validator": "~2.6.9", "zendframework/zend-validator": "~2.3" }, "suggest": { "ext-bcmath": "Arbitrary Precision Mathematics", "ext-mbstring": "Multibyte String Functions", "egulias/email-validator": "Strict (RFC compliant) email validation", "symfony/validator": "Use Symfony validator through Respect\\Validation", "zendframework/zend-validator": "Use Zend Framework validator through Respect\\Validation", "friendsofphp/php-cs-fixer": "Fix PSR2 and other coding style issues" }, "autoload": { "psr-4": { "Respect\\Validation\\": "library/" } }, "autoload-dev": { "psr-4": { "Respect\\Validation\\": "tests/library/" } }, "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "scripts": { "test": "./vendor/bin/phpunit" } } Validation-1.1.29/couscous.yml000066400000000000000000000020271336766562500163100ustar00rootroot00000000000000template: url: https://github.com/Respect/RespectCouscous exclude: - library - tests - vendor baseUrl: http://respect.github.io/Validation github: user: Respect repo: Validation title: Respect\Validation subTitle: The most awesome validation engine ever created for PHP gaTrackingId: UA-59839366-1 menu: sections: main: items: home: text: Home relativeUrl: / contributing: text: Contributing relativeUrl: /contributing.html featureguide: text: Feature Guide relativeUrl: /docs/ installation: text: Installation relativeUrl: /docs/install.html license: text: License relativeUrl: /license.html validators: text: Validators relativeUrl: /docs/validators.html Validation-1.1.29/docs/000077500000000000000000000000001336766562500146515ustar00rootroot00000000000000Validation-1.1.29/docs/concrete-api.md000066400000000000000000000045671336766562500175600ustar00rootroot00000000000000# Concrete API There are many micro-frameworks that rely on magic methods. We don't. In this document we're gonna explore the Respect\Validation API without fluent interfaces or magic methods. We'll use a traditional dependency injection approach. ```php use Respect\Validation\Validator as v; $usernameValidator = v::alnum()->noWhitespace()->length(1,15); $usernameValidator->validate('alganet'); // true ``` If you `var_dump($usernameValidator)`, you'll see a composite of objects with `Respect\Validation\Rules\Alnum`, `Respect\Validation\Rules\NoWhitespace` and `Respect\Validation\Rules\Length`. There is a specific object for each rule, and the chain only builds the structure. You can build it by yourself: ```php use Respect\Validation\Rules; $usernameValidator = new Rules\AllOf( new Rules\Alnum(), new Rules\NoWhitespace(), new Rules\Length(1, 15) ); $usernameValidator->validate('alganet'); // true ``` This is still a very lean API. You can use it in any dependency injection container or test it in the way you want. Nesting is still possible: ```php use Respect\Validation\Rules; $usernameValidator = new Rules\AllOf( new Rules\Alnum(), new Rules\NoWhitespace(), new Rules\Length(1, 15) ); $userValidator = new Rules\Key('name', $usernameValidator); $userValidator->validate(['name' => 'alganet']); // true ``` ## How It Works? The Respect\Validation chain is an [internal DSL](http://martinfowler.com/bliki/InternalDslStyle.html). It acts in the creational realm of objects (where Abstract Factories and Builders live), and it's only job is to make rule construction terse and fluent. ## FAQ > Is `v` in `v::something` a class name? No! The class is `Respect\Validation\Validator`, we suggest `v` as a very short alias. > Is `v::something()` a static call? Yes. Just like the default `DateTime::createFromFormat()` or `Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration()`. It builds something complex and returns for you. > I really don't like static calls, can I avoid it? Yes. Just use `$validator = new Validator();` each time you want a new validator, and continue from there. > Do you have a static method for each rule? No. We use `__callStatic()`. > Magic methods are slow! Why do you use them? They're optional. If you use the `new` interface, they won't be called. (still, do some benchmarks, you'd be surprised with our implementation). Validation-1.1.29/docs/feature-guide.md000066400000000000000000000205671336766562500177330ustar00rootroot00000000000000# Feature Guide ## Namespace import Respect\Validation is namespaced, but you can make your life easier by importing a single class into your context: ```php use Respect\Validation\Validator as v; ``` ## Simple validation The Hello World validator is something like this: ```php $number = 123; v::numeric()->validate($number); // true ``` ## Chained validation It is possible to use validators in a chain. Sample below validates a string containing numbers and letters, no whitespace and length between 1 and 15. ```php $usernameValidator = v::alnum()->noWhitespace()->length(1, 15); $usernameValidator->validate('alganet'); // true ``` ## Validating object attributes Given this simple object: ```php $user = new stdClass; $user->name = 'Alexandre'; $user->birthdate = '1987-07-01'; ``` Is possible to validate its attributes in a single chain: ```php $userValidator = v::attribute('name', v::stringType()->length(1,32)) ->attribute('birthdate', v::date()->age(18)); $userValidator->validate($user); // true ``` Validating array keys is also possible using `v::key()` Note that we used `v::stringType()` and `v::date()` in the beginning of the validator. Although is not mandatory, it is a good practice to use the type of the validated object as the first node in the chain. ## Input optional On oldest versions of Respect\Validation all validators treat input as optional and accept an empty string input as valid. Even though a useful feature that caused a lot of troubles for our team and neither was an obvious behavior. Also there was some people who likes to accept `null` as optional value, not only an empty string. For that reason all rules are mandatory now but if you want to treat a value as optional you can use `v::optional()` rule: ```php v::alpha()->validate(''); // false input required v::alpha()->validate(null); // false input required v::optional(v::alpha())->validate(''); // true v::optional(v::alpha())->validate(null); // true ``` By _optional_ we consider `null` or an empty string (`''`). See more on [Optional](rules/Optional.md). ## Negating rules You can use the `v::not()` to negate any rule: ```php v::not(v::intVal())->validate(10); // false, input must not be integer ``` ## Validator reuse Once created, you can reuse your validator anywhere. Remember `$usernameValidator`? ```php $usernameValidator->validate('respect'); //true $usernameValidator->validate('alexandre gaigalas'); // false $usernameValidator->validate('#$%'); //false ``` ## Exception types * `Respect\Validation\Exceptions\ExceptionInterface`: * All exceptions implement this interface; * `Respect\Validation\Exceptions\ValidationException`: * Implements the `Respect\Validation\Exceptions\ExceptionInterface` interface * Thrown when the `check()` fails * All validation exceptions extend this class * Available methods: * `getMainMessage()`; * `setMode($mode)`; * `setName($name)`; * `setParam($name, $value)`; * `setTemplate($template)`; * more... * `Respect\Validation\Exceptions\NestedValidationException`: * Extends the `Respect\Validation\Exceptions\ValidationException` class * Usually thrown when the `assert()` fails * Available methods: * `findMessages()`; * `getFullMessage()`; * `getMessages()`; * more... ## Informative exceptions When something goes wrong, Validation can tell you exactly what's going on. For this, we use the `assert()` method instead of `validate()`: ```php use Respect\Validation\Exceptions\NestedValidationException; try { $usernameValidator->assert('really messed up screen#name'); } catch(NestedValidationException $exception) { echo $exception->getFullMessage(); } ``` The printed message is exactly this, as a nested Markdown list: ```no-highlight - All of the required rules must pass for "really messed up screen#name" - "really messed up screen#name" must contain only letters (a-z) and digits (0-9) - "really messed up screen#name" must not contain whitespace - "really messed up screen#name" must have a length between 1 and 15 ``` ## Getting all messages as an array The Markdown list is fine, but unusable on a HTML form or something more custom. For that you can use `getMessages()`. It will return all messages from the rules that did not pass the validation. ```php try { $usernameValidator->assert('really messed up screen#name'); } catch(NestedValidationException $exception) { print_r($exception->getMessages()); } ``` The code above may display something like: ```no-highlight Array ( [0] => "really messed up screen#name" must contain only letters (a-z) and digits (0-9) [1] => "really messed up screen#name" must not contain whitespace [2] => "really messed up screen#name" must have a length between 1 and 15 ) ``` ## Getting messages as an array by name If you want to get specific message by name you can use `findMessages()` passing the names of the rules you want: ```php try { $usernameValidator->assert('really messed up screen#name'); } catch(NestedValidationException $exception) { print_r($exception->findMessages(['alnum', 'noWhitespace'])); } ``` The `findMessages()` returns an array with messages from the requested validators, like this: ```no-highlight Array ( [alnum] => "really messed up screen#name" must contain only letters (a-z) and digits (0-9) [noWhitespace] => "really messed up screen#name" must not contain whitespace ) ``` ## Custom messages Getting messages as an array is fine, but sometimes you need to customize them in order to present them to the user. This is possible using the `findMessages()` method as well: ```php $errors = $exception->findMessages([ 'alnum' => '{{name}} must contain only letters and digits', 'length' => '{{name}} must not have more than 15 chars', 'noWhitespace' => '{{name}} cannot contain spaces' ]); ``` For all messages, the `{{name}}` variable is available for templates. If you do not define a name it uses the input to replace this placeholder. ## Message localization You're also able to translate your message to another language with Validation. The only thing one must do is to define the param `translator` as a callable that will handle the translation: ```php $exception->setParam('translator', 'gettext'); ``` The example above uses `gettext()` but you can use any other callable value, like `[$translator, 'trans']` or `you_custom_function()`. After that, if you call `getMainMessage()` or `getFullMessage()` (for nested), the message will be translated. Note that `getMessage()` will keep the original message. ## Custom rules You also can use your own rules: ```php namespace My\Validation\Rules; use Respect\Validation\Rules\AbstractRule; class MyRule extends AbstractRule { public function validate($input) { // Do something here with the $input and return a boolean value } } ``` If you do want Validation to execute you rule (or rules) in the chain, you must use `v::with()` passing your rule's namespace as an argument: ```php v::with('My\\Validation\\Rules\\'); v::myRule(); // Try to load "My\Validation\Rules\MyRule" if any ``` By default `with()` appends the given prefix, but you can change this behavior in order to overwrite default rules: ```php v::with('My\\Validation\\Rules', true); v::alnum(); // Try to use "My\Validation\Rules\Alnum" if any ``` ## Validator name On `v::attribute()` and `v::key()`, `{{name}}` is the attribute/key name. For others, is the same as the input. You can customize a validator name using: ```php v::date('Y-m-d')->between('1980-02-02', 'now')->setName('Member Since'); ``` ## Zend/Symfony validators It is also possible to reuse validators from other frameworks if they are installed: ```php $hostnameValidator = v::zend('Hostname')->assert('google.com'); $timeValidator = v::sf('Time')->assert('22:00:01'); ``` ## Validation methods We've seen `validate()` that returns true or false and `assert()` that throws a complete validation report. There is also a `check()` method that returns an Exception only with the first error found: ```php use Respect\Validation\Exceptions\ValidationException; try { $usernameValidator->check('really messed up screen#name'); } catch(ValidationException $exception) { echo $exception->getMainMessage(); } ``` Message: ```no-highlight "really messed up screen#name" must contain only letters (a-z) and digits (0-9) ``` Validation-1.1.29/docs/index.md000066400000000000000000000025051336766562500163040ustar00rootroot00000000000000# Overview [![Build Status](https://img.shields.io/travis/Respect/Validation/master.svg?style=flat-square)](http://travis-ci.org/Respect/Validation) [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/Respect/Validation/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/Respect/Validation/?branch=master) [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/Respect/Validation/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/Respect/Validation/?branch=master) [![Latest Stable Version](https://img.shields.io/packagist/v/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [![Total Downloads](https://img.shields.io/packagist/dt/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [![License](https://img.shields.io/packagist/l/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation) [The most awesome validation engine ever created for PHP.](http://bit.ly/1a1oeQv) - Complex rules made simple: `v::numeric()->positive()->between(1, 255)->validate($input)`. - [Granularity control](feature-guide.md#validation-methods) for advanced reporting. - More than 100 (fully tested) validators. - [A concrete API](concrete-api.md) for non fluent usage. - Works on PHP 5.4+ or HHVM 3.3+ Validation-1.1.29/docs/installation.md000066400000000000000000000004411336766562500176730ustar00rootroot00000000000000# Installation Package is available on [Packagist](http://packagist.org/packages/respect/validation), you can install it using [Composer](http://getcomposer.org). ```shell composer require respect/validation ``` [PHP](https://php.net) 5.4+ or [HHVM](http://hhvm.com) 3.3+ are required. Validation-1.1.29/docs/license.md000066400000000000000000000030201336766562500166100ustar00rootroot00000000000000# License Copyright (c) 2009-2015, [Alexandre Gomes Gaigalas](http://github.com/alganet). 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. * Neither the name of Alexandre Gomes Gaigalas nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 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. Validation-1.1.29/docs/list-of-rules.md000066400000000000000000000221271336766562500177040ustar00rootroot00000000000000# List of rules ## Types * [ArrayVal](rules/ArrayVal.md) * [ArrayType](rules/ArrayType.md) * [BoolVal](rules/BoolVal.md) * [BoolType](rules/BoolType.md) * [CallableType](rules/CallableType.md) * [Countable](rules/Countable.md) * [Date](rules/Date.md) * [FalseVal](rules/FalseVal.md) * [FloatVal](rules/FloatVal.md) * [FloatType](rules/FloatType.md) * [Instance](rules/Instance.md) * [IntVal](rules/IntVal.md) * [IntType](rules/IntType.md) * [IterableType](rules/IterableType.md) * [NullType](rules/NullType.md) * [Numeric](rules/Numeric.md) * [ObjectType](rules/ObjectType.md) * [ResourceType](rules/ResourceType.md) * [ScalarVal](rules/ScalarVal.md) * [StringType](rules/StringType.md) * [TrueVal](rules/TrueVal.md) * [Type](rules/Type.md) * [Xdigit](rules/Xdigit.md) ## Generics * [AlwaysInvalid](rules/AlwaysInvalid.md) * [AlwaysValid](rules/AlwaysValid.md) * [Call](rules/Call.md) * [Callback](rules/Callback.md) * [FilterVar](rules/FilterVar.md) * [Not](rules/Not.md) * [Optional](rules/Optional.md) * [Type](rules/Type.md) * [When](rules/When.md) ## Comparing Values * [Age](rules/Age.md) * [Between](rules/Between.md) * [Equals](rules/Equals.md) * [Identical](rules/Identical.md) * [Max](rules/Max.md) * [Min](rules/Min.md) ## Numeric * [Between](rules/Between.md) * [BoolType](rules/BoolType.md) * [Even](rules/Even.md) * [Factor](rules/Factor.md) * [Fibonacci](rules/Fibonacci.md) * [Finite](rules/Finite.md) * [FloatVal](rules/FloatVal.md) * [FloatType](rules/FloatType.md) * [Infinite](rules/Infinite.md) * [IntVal](rules/IntVal.md) * [IntType](rules/IntType.md) * [Multiple](rules/Multiple.md) * [Negative](rules/Negative.md) * [NotEmpty](rules/NotEmpty.md) * [Numeric](rules/Numeric.md) * [Odd](rules/Odd.md) * [PerfectSquare](rules/PerfectSquare.md) * [Positive](rules/Positive.md) * [PrimeNumber](rules/PrimeNumber.md) * [Roman](rules/Roman.md) * [Xdigit](rules/Xdigit.md) ## String * [Alnum](rules/Alnum.md) * [Alpha](rules/Alpha.md) * [Between](rules/Between.md) * [Charset](rules/Charset.md) * [Cntrl](rules/Cntrl.md) * [Consonant](rules/Consonant.md) * [Contains](rules/Contains.md) * [Digit](rules/Digit.md) * [EndsWith](rules/EndsWith.md) * [Graph](rules/Graph.md) * [In](rules/In.md) * [Length](rules/Length.md) * [Lowercase](rules/Lowercase.md) * [NotEmpty](rules/NotEmpty.md) * [NoWhitespace](rules/NoWhitespace.md) * [PhpLabel](rules/PhpLabel.md) * [Prnt](rules/Prnt.md) * [Punct](rules/Punct.md) * [Regex](rules/Regex.md) * [ResourceType](rules/ResourceType.md) * [Slug](rules/Slug.md) * [Space](rules/Space.md) * [StartsWith](rules/StartsWith.md) * [Uppercase](rules/Uppercase.md) * [Version](rules/Version.md) * [Vowel](rules/Vowel.md) * [Xdigit](rules/Xdigit.md) ## Arrays * [ArrayVal](rules/ArrayVal.md) * [ArrayType](rules/ArrayType.md) * [Contains](rules/Contains.md) * [Each](rules/Each.md) * [EndsWith](rules/EndsWith.md) * [In](rules/In.md) * [Key](rules/Key.md) * [KeyNested](rules/KeyNested.md) * [KeySet](rules/KeySet.md) * [KeyValue](rules/KeyValue.md) * [Length](rules/Length.md) * [NotEmpty](rules/NotEmpty.md) * [StartsWith](rules/StartsWith.md) ## Objects * [Attribute](rules/Attribute.md) * [Instance](rules/Instance.md) * [Length](rules/Length.md) ## Date and Time * [Age](rules/Age.md) * [Between](rules/Between.md) * [Date](rules/Date.md) * [LeapDate](rules/LeapDate.md) * [LeapYear](rules/LeapYear.md) * [MinimumAge](rules/MinimumAge.md) ## Group Validators * [AllOf](rules/AllOf.md) * [NoneOf](rules/NoneOf.md) * [OneOf](rules/OneOf.md) ## Regional * [CountryCode](rules/CountryCode.md) * [CurrencyCode](rules/CurrencyCode.md) * [IdentityCard](rules/IdentityCard.md) * [LanguageCode](rules/LanguageCode.md) * [PostalCode](rules/PostalCode.md) * [SubdivisionCode](rules/SubdivisionCode.md) * [Tld](rules/Tld.md) ## Files * [Directory](rules/Directory.md) * [Executable](rules/Executable.md) * [Exists](rules/Exists.md) * [Extension](rules/Extension.md) * [File](rules/File.md) * [Image](rules/Image.md) * [Mimetype](rules/Mimetype.md) * [Readable](rules/Readable.md) * [Size](rules/Size.md) * [SymbolicLink](rules/SymbolicLink.md) * [Uploaded](rules/Uploaded.md) * [Writable](rules/Writable.md) ## Banking * [Bank](rules/Bank.md) * [BankAccount](rules/BankAccount.md) * [Bic](rules/Bic.md) ## Other * [Bsn](rules/Bsn.md) * [Cnh](rules/Cnh.md) * [Cnpj](rules/Cnpj.md) * [Cpf](rules/Cpf.md) * [Domain](rules/Domain.md) * [Email](rules/Email.md) * [HexRgbColor](rules/HexRgbColor.md) * [Imei](rules/Imei.md) * [Ip](rules/Ip.md) * [Json](rules/Json.md) * [MacAddress](rules/MacAddress.md) * [NfeAccessKey](rules/NfeAccessKey.md) * [NotBlank](rules/NotBlank.md) * [NotOptional](rules/NotOptional.md) * [Pesel](rules/Pesel.md) * [Phone](rules/Phone.md) * [Sf](rules/Sf.md) * [Url](rules/Url.md) * [VideoUrl](rules/VideoUrl.md) * [Zend](rules/Zend.md) ## Yes/No * [No](rules/No.md) * [Yes](rules/Yes.md) ## Alphabetically * [Age](rules/Age.md) * [AllOf](rules/AllOf.md) * [Alnum](rules/Alnum.md) * [Alpha](rules/Alpha.md) * [AlwaysInvalid](rules/AlwaysInvalid.md) * [AlwaysValid](rules/AlwaysValid.md) * [ArrayVal](rules/ArrayVal.md) * [ArrayType](rules/ArrayType.md) * [Attribute](rules/Attribute.md) * [Bank](rules/Bank.md) * [BankAccount](rules/BankAccount.md) * [Between](rules/Between.md) * [Bic](rules/Bic.md) * [BoolType](rules/BoolType.md) * [Bsn](rules/Bsn.md) * [Call](rules/Call.md) * [CallableType](rules/CallableType.md) * [Callback](rules/Callback.md) * [Charset](rules/Charset.md) * [Cnh](rules/Cnh.md) * [Cnpj](rules/Cnpj.md) * [Cntrl](rules/Cntrl.md) * [Consonant](rules/Consonant.md) * [Contains](rules/Contains.md) * [Countable](rules/Countable.md) * [CountryCode](rules/CountryCode.md) * [Cpf](rules/Cpf.md) * [CreditCard](rules/CreditCard.md) * [Date](rules/Date.md) * [Digit](rules/Digit.md) * [Directory](rules/Directory.md) * [Domain](rules/Domain.md) * [Each](rules/Each.md) * [Email](rules/Email.md) * [EndsWith](rules/EndsWith.md) * [Equals](rules/Equals.md) * [Even](rules/Even.md) * [Executable](rules/Executable.md) * [Exists](rules/Exists.md) * [Extension](rules/Extension.md) * [Factor](rules/Factor.md) * [FalseVal](rules/FalseVal.md) * [Fibonacci](rules/Fibonacci.md) * [File](rules/File.md) * [FilterVar](rules/FilterVar.md) * [Finite](rules/Finite.md) * [FloatVal](rules/FloatVal.md) * [FloatType](rules/FloatType.md) * [Graph](rules/Graph.md) * [HexRgbColor](rules/HexRgbColor.md) * [Identical](rules/Identical.md) * [IdentityCard](rules/IdentityCard.md) * [Image](rules/Image.md) * [Imei](rules/Imei.md) * [In](rules/In.md) * [Infinite](rules/Infinite.md) * [Instance](rules/Instance.md) * [IntVal](rules/IntVal.md) * [IntType](rules/IntType.md) * [Ip](rules/Ip.md) * [IterableType](rules/IterableType.md) * [Json](rules/Json.md) * [Key](rules/Key.md) * [KeyNested](rules/KeyNested.md) * [KeySet](rules/KeySet.md) * [KeyValue](rules/KeyValue.md) * [LanguageCode](rules/LanguageCode.md) * [LeapDate](rules/LeapDate.md) * [LeapYear](rules/LeapYear.md) * [Length](rules/Length.md) * [Lowercase](rules/Lowercase.md) * [MacAddress](rules/MacAddress.md) * [Max](rules/Max.md) * [Mimetype](rules/Mimetype.md) * [Min](rules/Min.md) * [MinimumAge](rules/MinimumAge.md) * [Multiple](rules/Multiple.md) * [Negative](rules/Negative.md) * [NfeAccessKey](rules/NfeAccessKey.md) * [No](rules/No.md) * [NoWhitespace](rules/NoWhitespace.md) * [NoneOf](rules/NoneOf.md) * [Not](rules/Not.md) * [NotBlank](rules/NotBlank.md) * [NotEmpty](rules/NotEmpty.md) * [NotOptional](rules/NotOptional.md) * [NullType](rules/NullType.md) * [Numeric](rules/Numeric.md) * [ObjectType](rules/ObjectType.md) * [Odd](rules/Odd.md) * [OneOf](rules/OneOf.md) * [Optional](rules/Optional.md) * [PerfectSquare](rules/PerfectSquare.md) * [Pesel](rules/Pesel.md) * [Phone](rules/Phone.md) * [PhpLabel](rules/PhpLabel.md) * [Positive](rules/Positive.md) * [PostalCode](rules/PostalCode.md) * [PrimeNumber](rules/PrimeNumber.md) * [Prnt](rules/Prnt.md) * [Punct](rules/Punct.md) * [Readable](rules/Readable.md) * [Regex](rules/Regex.md) * [ResourceType](rules/ResourceType.md) * [Roman](rules/Roman.md) * [ScalarVal](rules/ScalarVal.md) * [Sf](rules/Sf.md) * [Size](rules/Size.md) * [Slug](rules/Slug.md) * [Space](rules/Space.md) * [StartsWith](rules/StartsWith.md) * [StringType](rules/StringType.md) * [SubdivisionCode](rules/SubdivisionCode.md) * [SymbolicLink](rules/SymbolicLink.md) * [Tld](rules/Tld.md) * [TrueVal](rules/TrueVal.md) * [Type](rules/Type.md) * [Uploaded](rules/Uploaded.md) * [Uppercase](rules/Uppercase.md) * [Url](rules/Url.md) * [Version](rules/Version.md) * [VideoUrl](rules/VideoUrl.md) * [Vowel](rules/Vowel.md) * [When](rules/When.md) * [Writable](rules/Writable.md) * [Xdigit](rules/Xdigit.md) * [Yes](rules/Yes.md) * [Zend](rules/Zend.md) Validation-1.1.29/docs/rules/000077500000000000000000000000001336766562500160035ustar00rootroot00000000000000Validation-1.1.29/docs/rules/Age.md000066400000000000000000000025761336766562500170330ustar00rootroot00000000000000# Age - `v::age(int $minAge)` - `v::age(int $minAge, int $maxAge)` - `v::age(null, int $maxAge)` Validates ranges of years. The validated values can be any date value; internally they will be transformed into [DateTime](http://php.net/manual/en/class.datetime.php) objects according to the defined locale settings. The examples below validate if the given dates are lower or equal to 18 years ago: ```php v::age(18)->validate('17 years ago'); // false v::age(18)->validate('18 years ago'); // true v::age(18)->validate('19 years ago'); // true v::age(18)->validate('1970-01-01'); // true v::age(18)->validate('today'); // false ``` The examples below validate if the given dates are between 10 and 50 years ago: ```php v::age(10, 50)->validate('9 years ago'); // false v::age(10, 50)->validate('10 years ago'); // true v::age(10, 50)->validate('30 years ago'); // true v::age(10, 50)->validate('50 years ago'); // true v::age(10, 50)->validate('51 years ago'); // false ``` The examples below validate if the given dates are greater than or equal to 70 years ago: ```php v::age(null, 70)->validate('today'); // true v::age(null, 70)->validate('70 years ago'); // true v::age(null, 70)->validate('71 years ago'); // false ``` Message template for this validator includes `{{minAge}}` and `{{maxAge}}`. *** See also: * [Between](Between.md) * [Date](Date.md) * [Max](Max.md) * [Min](Min.md) Validation-1.1.29/docs/rules/AllOf.md000066400000000000000000000010461336766562500173230ustar00rootroot00000000000000# AllOf - `v::allOf(v $v1, v $v2, v $v3...)` Will validate if all inner validators validates. ```php v::allOf( v::intVal(), v::positive() )->validate(15); // true ``` This is similar to the chain (which is an allOf already), but its syntax allows you to set custom names for every node: ```php v::allOf( v::intVal()->setName('Account Number'), v::positive()->setName('Higher Than Zero') )->setName('Positive integer') ->validate(15); // true ``` *** See also: * [OneOf](OneOf.md) * [NoneOf](NoneOf.md) * [When](When.md) Validation-1.1.29/docs/rules/Alnum.md000066400000000000000000000017261336766562500174070ustar00rootroot00000000000000# Alnum - `v::alnum()` - `v::alnum(string $additionalChars)` Validates alphanumeric characters from a-Z and 0-9. ```php v::alnum()->validate('foo 123'); // true v::alnum()->validate('number 100%'); // false v::alnum('%')->validate('number 100%'); // true ``` Because this rule allows whitespaces by default, you can separate additional characters with a whitespace: ```php v::alnum('- ! :')->validate('foo :- 123 !'); // true ``` This validator allows whitespace, if you want to remove them add `->noWhitespace()` to the chain: ```php v::alnum()->noWhitespace()->validate('foo 123'); // false ``` You can restrict case using the `->lowercase()` and `->uppercase()` validators: ```php v::alnum()->uppercase()->validate('aaa'); // false ``` Message template for this validator includes `{{additionalChars}}` as the string of extra chars passed as the parameter. *** See also: * [Alpha](Alpha.md) * [Digit](Digit.md) * [Consonant](Consonant.md) * [Vowel](Vowel.md) Validation-1.1.29/docs/rules/Alpha.md000066400000000000000000000003561336766562500173560ustar00rootroot00000000000000# Alpha - `v::alpha()` - `v::alpha(string $additionalChars)` This is similar to `v::alnum()`, but it doesn't allow numbers. *** See also: * [Alnum](Alnum.md) * [Digit](Digit.md) * [Consonant](Consonant.md) * [Vowel](Vowel.md) Validation-1.1.29/docs/rules/AlwaysInvalid.md000066400000000000000000000002561336766562500210770ustar00rootroot00000000000000# AlwaysInvalid - `v::alwaysInvalid()` Always return false. ```php v::alwaysInvalid()->validate($whatever); // false ``` *** See also: * [AlwaysValid](AlwaysValid.md) Validation-1.1.29/docs/rules/AlwaysValid.md000066400000000000000000000002531336766562500205450ustar00rootroot00000000000000# AlwaysValid - `v::alwaysValid()` Always returns true. ```php v::alwaysValid()->validate($whatever); // true ``` *** See also: * [AlwaysInvalid](AlwaysInvalid.md) Validation-1.1.29/docs/rules/ArrayType.md000066400000000000000000000011411336766562500202420ustar00rootroot00000000000000# ArrayType - `v::arrayType()` Validates whether the type of an input is array. ```php v::arrayType()->validate([]); // true v::arrayType()->validate([1, 2, 3]); // true v::arrayType()->validate(new ArrayObject()); // false ``` *** See also: * [ArrayVal](ArrayVal.md) * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [Countable](Countable.md) * [FloatType](FloatType.md) * [IntType](IntType.md) * [IterableType](IterableType.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/ArrayVal.md000066400000000000000000000006641336766562500200540ustar00rootroot00000000000000# ArrayVal - `v::arrayVal()` Validates if the input is an array or if the input can be used as an array (instance of `ArrayAccess`). ```php v::arrayVal()->validate([]); // true v::arrayVal()->validate(new ArrayObject); // true ``` *** See also: * [ArrayType](ArrayType.md) * [Countable](Countable.md) * [Each](Each.md) * [IterableType](IterableType.md) * [Key](Key.md) * [KeySet](KeySet.md) * [KeyValue](KeyValue.md) Validation-1.1.29/docs/rules/Attribute.md000066400000000000000000000012201336766562500202630ustar00rootroot00000000000000# Attribute - `v::attribute(string $name)` - `v::attribute(string $name, v $validator)` - `v::attribute(string $name, v $validator, boolean $mandatory = true)` Validates an object attribute. ```php $obj = new stdClass; $obj->foo = 'bar'; v::attribute('foo')->validate($obj); // true ``` You can also validate the attribute itself: ```php v::attribute('foo', v::equals('bar'))->validate($obj); // true ``` Third parameter makes the attribute presence optional: ```php v::attribute('lorem', v::stringType(), false)->validate($obj); // true ``` The name of this validator is automatically set to the attribute name. *** See also: * [Key](Key.md) Validation-1.1.29/docs/rules/Bank.md000066400000000000000000000005651336766562500172060ustar00rootroot00000000000000# Bank - `v::bank(string $countryCode)` Validates a bank. ```php v::bank("de")->validate("70169464"); // true v::bank("de")->validate("12345"); // false ``` These country codes are supported: * "de" (Germany) - You must add `"malkusch/bav": "~1.0"` to your `require` property on composer.json file. *** See also: * [BankAccount](BankAccount.md) * [Bic](Bic.md) Validation-1.1.29/docs/rules/BankAccount.md000066400000000000000000000006751336766562500205250ustar00rootroot00000000000000# BankAccount - `v::bankAccount(string $countryCode, string $bank)` Validates a bank account for a given bank. ```php v::bankAccount("de", "70169464")->validate("1112"); // true v::bankAccount("de", "70169464")->validate("1234"); // false ``` These country codes are supported: * "de" (Germany) - You must add `"malkusch/bav": "~1.0"` to your `require` property on composer.json file. *** See also: * [Bank](Bank.md) * [Bic](Bic.md) Validation-1.1.29/docs/rules/Between.md000066400000000000000000000016501336766562500177200ustar00rootroot00000000000000# Between - `v::between(mixed $start, mixed $end)` - `v::between(mixed $start, mixed $end, boolean $inclusive = true)` Validates ranges. Most simple example: ```php v::intVal()->between(10, 20)->validate(15); // true ``` The type as the first validator in a chain is a good practice, since between accepts many types: ```php v::stringType()->between('a', 'f')->validate('c'); // true ``` Also very powerful with dates: ```php v::date()->between('2009-01-01', '2013-01-01')->validate('2010-01-01'); // true ``` Date ranges accept strtotime values: ```php v::date()->between('yesterday', 'tomorrow')->validate('now'); // true ``` A third parameter may be passed to validate the passed values inclusive: ```php v::date()->between(10, 20, true)->validate(20); // true ``` Message template for this validator includes `{{minValue}}` and `{{maxValue}}`. *** See also: * [Length](Length.md) * [Min](Min.md) * [Max](Max.md) Validation-1.1.29/docs/rules/Bic.md000066400000000000000000000006431336766562500170250ustar00rootroot00000000000000# Bic - `v::bic(string $countryCode)` Validates a BIC (Bank Identifier Code) for a given country. ```php v::bic("de")->validate("VZVDDED1XXX"); // true v::bic("de")->validate("VZVDDED1"); // true ``` Theses country codes are supported: * "de" (Germany) - You must add `"malkusch/bav": "~1.0"` to your `require` property on composer.json file. *** See also: * [Bank](Bank.md) * [BankAccount](BankAccount.md) Validation-1.1.29/docs/rules/BoolType.md000066400000000000000000000010331336766562500200570ustar00rootroot00000000000000# BoolType - `v::boolType()` Validates if the input is a boolean value: ```php v::boolType()->validate(true); // true v::boolType()->validate(false); // true ``` *** See also: * [ArrayType](ArrayType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [FloatVal](FloatVal.md) * [IntType](IntType.md) * [No](No.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [TrueVal](TrueVal.md) * [Type](Type.md) * [Yes](Yes.md) Validation-1.1.29/docs/rules/BoolVal.md000066400000000000000000000012601336766562500176620ustar00rootroot00000000000000# BoolVal - `v::boolVal()` Validates if the input results in a boolean value: ```php v::boolVal()->validate('on'); // true v::boolVal()->validate('off'); // true v::boolVal()->validate('yes'); // true v::boolVal()->validate('no'); // true v::boolVal()->validate(1); // true v::boolVal()->validate(0); // true ``` *** See also: * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [FloatVal](FloatVal.md) * [IntType](IntType.md) * [No](No.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [TrueVal](TrueVal.md) * [Type](Type.md) * [Yes](Yes.md) Validation-1.1.29/docs/rules/Bsn.md000066400000000000000000000003671336766562500170550ustar00rootroot00000000000000# Bsn - `v::bsn()` Validates a Dutch citizen service number ([BSN](https://nl.wikipedia.org/wiki/Burgerservicenummer)). ```php v::bsn()->validate('612890053'); // true ``` *** See also: * [Cnh](Cnh.md) * [Cnpj](Cnpj.md) * [Cpf](Cpf.md) Validation-1.1.29/docs/rules/Call.md000066400000000000000000000023151336766562500172010ustar00rootroot00000000000000# Call - `v::call(callable $callback)` This is a very low level validator. It calls a function, method or closure for the input and then validates it. Consider the following variable: ```php $url = 'http://www.google.com/search?q=respect.github.com' ``` To validate every part of this URL we could use the native `parse_url` function to break its parts: ```php $parts = parse_url($url); ``` This function returns an array containing `scheme`, `host`, `path` and `query`. We can validate them this way: ```php v::arrayVal()->key('scheme', v::startsWith('http')) ->key('host', v::domain()) ->key('path', v::stringType()) ->key('query', v::notEmpty()); ``` Using `v::call()` you can do this in a single chain: ```php v::call( 'parse_url', v::arrayVal()->key('scheme', v::startsWith('http')) ->key('host', v::domain()) ->key('path', v::stringType()) ->key('query', v::notEmpty()) )->validate($url); ``` It is possible to call methods and closures as the first parameter: ```php v::call([$myObj, 'methodName'], v::intVal())->validate($myInput); v::call(function($input) {}, v::intVal())->validate($myInput); ``` *** See also: * [Callback](Callback.md) Validation-1.1.29/docs/rules/CallableType.md000066400000000000000000000010701336766562500206640ustar00rootroot00000000000000# CallableType - `v::callableType()` Validates if the input is a callable value. ```php v::callableType()->validate(function () {}); // true v::callableType()->validate('trim'); // true v::callableType()->validate([new ObjectType, 'methodName']); // true ``` *** See also: * [ArrayType](ArrayType.md) * [BoolType](BoolType.md) * [Callback](Callback.md) * [FloatType](FloatType.md) * [IntType](IntType.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/Callback.md000066400000000000000000000006761336766562500200320ustar00rootroot00000000000000# Callback - `v::callback(callable $callback)` This is a wildcard validator, it uses a function name, method or closure to validate something: ```php v::callback('is_int')->validate(10); // true ``` (Please note that this is a sample, the `v::intVal()` validator is much better). As in `v::call()`, you can pass a method or closure to it. *** See also: * [Call](Call.md) * [CallableType](CallableType.md) * [FilterVar](FilterVar.md) Validation-1.1.29/docs/rules/Charset.md000066400000000000000000000005661336766562500177250ustar00rootroot00000000000000# Charset - `v::charset(mixed $charset)` Validates if a string is in a specific charset. ```php v::charset('ASCII')->validate('açúcar'); // false v::charset('ASCII')->validate('sugar'); //true v::charset(['ISO-8859-1', 'EUC-JP'])->validate('日本国'); // true ``` The array format is a logic OR, not AND. *** See also: * [Alnum](Alnum.md) * [Alpha](Alpha.md) Validation-1.1.29/docs/rules/Cnh.md000066400000000000000000000002531336766562500170350ustar00rootroot00000000000000# Cnh - `v::cnh()` Validates a Brazillian driver's license. ```php v::cnh()->validate('02650306461'); // true ``` *** See also: * [Cnpj](Cnpj.md) * [Cpf](Cpf.md) Validation-1.1.29/docs/rules/Cnpj.md000066400000000000000000000002501336766562500172140ustar00rootroot00000000000000# Cnpj - `v::cnpj()` Validates the Brazillian CNPJ number. Ignores non-digit chars, so use `->digit()` if needed. *** See also: * [Cpf](Cpf.md) * [Cnh](Cnh.md) Validation-1.1.29/docs/rules/Cntrl.md000066400000000000000000000004111336766562500174030ustar00rootroot00000000000000# Cntrl - `v::cntrl()` - `v::cntrl(string $additionalChars)` This is similar to `v::alnum()`, but only accepts control characters: ```php v::cntrl()->validate("\n\r\t"); // true ``` *** See also: * [Alnum](Alnum.md) * [Prnt](Prnt.md) * [Space](Space.md) Validation-1.1.29/docs/rules/Consonant.md000066400000000000000000000004621336766562500202710ustar00rootroot00000000000000# Consonant - `v::consonant()` - `v::consonant(string $additionalChars)` Similar to `v::alnum()`. Validates strings that contain only consonants: ```php v::consonant()->validate('xkcd'); // true ``` *** See also: * [Alnum](Alnum.md) * [Digit](Digit.md) * [Alpha](Alpha.md) * [Vowel](Vowel.md) Validation-1.1.29/docs/rules/Contains.md000066400000000000000000000010011336766562500200730ustar00rootroot00000000000000# Contains - `v::contains(mixed $value)` - `v::contains(mixed $value, boolean $identical = false)` For strings: ```php v::contains('ipsum')->validate('lorem ipsum'); // true ``` For arrays: ```php v::contains('ipsum')->validate(['ipsum', 'lorem']); // true ``` A second parameter may be passed for identical comparison instead of equal comparison. Message template for this validator includes `{{containsValue}}`. *** See also: * [StartsWith](StartsWith.md) * [EndsWith](EndsWith.md) * [In](In.md) Validation-1.1.29/docs/rules/Countable.md000066400000000000000000000006371336766562500202470ustar00rootroot00000000000000# Countable - `v::countable()` Validates if the input is countable, in other words, if you're allowed to use [count()](http://php.net/count) function on it. ```php v::countable()->validate([]); // true v::countable()->validate(new ArrayObject()); // true v::countable()->validate('string'); // false ``` *** See also: * [ArrayVal](ArrayVal.md) * [Instance](Instance.md) * [IterableType](IterableType.md) Validation-1.1.29/docs/rules/CountryCode.md000066400000000000000000000002521336766562500205620ustar00rootroot00000000000000# CountryCode - `v::countryCode()` Validates an ISO country code like US or BR. ```php v::countryCode()->validate('BR'); // true ``` *** See also: * [Tld](Tld.md) Validation-1.1.29/docs/rules/Cpf.md000066400000000000000000000006031336766562500170340ustar00rootroot00000000000000# Cpf - `v::cpf()` Validates a Brazillian CPF number. ```php v::cpf()->validate('44455566820'); // true ``` It ignores any non-digit char: ```php v::cpf()->validate('444.555.668-20'); // true ``` If you need to validate digits only, add `->digit()` to the chain: ```php v::digit()->cpf()->validate('44455566820'); // true ``` *** See also: * [Cnpj](Cnpj.md) * [Cnh](Cnh.md) Validation-1.1.29/docs/rules/CreditCard.md000066400000000000000000000016021336766562500203300ustar00rootroot00000000000000# CreditCard - `v::creditCard()` - `v::creditCard(string $brand)` Validates a credit card number. ```php v::creditCard()->validate('5376 7473 9720 8720'); // true v::creditCard('American Express')->validate('340316193809364'); // true v::creditCard('Diners Club')->validate('30351042633884'); // true v::creditCard('Discover')->validate('6011000990139424'); // true v::creditCard('JCB')->validate('3566002020360505'); // true v::creditCard('Master')->validate('5376747397208720'); // true v::creditCard('Visa')->validate('4024007153361885'); // true ``` The current supported brands are: - American Express - Diners Club - Discover - JCB - MasterCard - Visa It ignores any non-digit chars, so use `->digit()` when appropriate. ```php v::digit()->creditCard()->validate('5376747397208720'); // true ``` *** See also: * [Bank](Bank.md) * [BankAccount](BankAccount.md) * [Bic](Bic.md) Validation-1.1.29/docs/rules/CurrencyCode.md000066400000000000000000000004311336766562500207100ustar00rootroot00000000000000# CurrencyCode - `v::currencyCode()` Validates an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code like GBP or EUR. ```php v::currencyCode()->validate('GBP'); // true ``` *** See also: * [CountryCode](CountryCode.md) * [SubdivisionCode](SubdivisionCode.md) Validation-1.1.29/docs/rules/Date.md000066400000000000000000000012171336766562500172030ustar00rootroot00000000000000# Date - `v::date()` - `v::date(string $format)` Validates if input is a date: ```php v::date()->validate('2009-01-01'); // true ``` Also accepts strtotime values: ```php v::date()->validate('now'); // true ``` And DateTime instances: ```php v::date()->validate(new DateTime); // true ``` You can pass a format when validating strings: ```php v::date('Y-m-d')->validate('01-01-2009'); // false ``` Format has no effect when validating DateTime instances. Message template for this validator includes `{{format}}`. *** See also: * [Between](Between.md) * [MinimumAge](MinimumAge.md) * [LeapDate](LeapDate.md) * [LeapYear](LeapYear.md) Validation-1.1.29/docs/rules/Digit.md000066400000000000000000000003041336766562500173620ustar00rootroot00000000000000# Digit - `v::digit()` This is similar to `v::alnum()`, but it doesn't allow a-Z. *** See also: * [Alnum](Alnum.md) * [Alpha](Alpha.md) * [Vowel](Vowel.md) * [Consonant](Consonant.md) Validation-1.1.29/docs/rules/Directory.md000066400000000000000000000011251336766562500202700ustar00rootroot00000000000000# Directory - `v::directory()` Validates directories. ```php v::directory()->validate(__DIR__); // true v::directory()->validate(__FILE__); // false ``` This validator will consider SplFileInfo instances, so you can do something like: ```php v::directory()->validate(new \SplFileInfo($directory)); ``` *** See also: * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Domain.md000066400000000000000000000021541336766562500175360ustar00rootroot00000000000000# Domain - `v::domain()` - `v::domain(boolean $tldCheck = true)` Validates domain names. ```php v::domain()->validate('google.com'); ``` You can skip *top level domain* (TLD) checks to validate internal domain names: ```php v::domain(false)->validate('dev.machine.local'); ``` This is a composite validator, it validates several rules internally: * If input is an IP address, it fails. * If input contains whitespace, it fails. * If input does not contain any dots, it fails. * If input has less than two parts, it fails. * Input must end with a top-level-domain to pass (if not skipped). * Each part must be alphanumeric and not start with an hyphen. * [PunnyCode][] is accepted for [Internationalizing Domain Names in Applications][IDNA]. Messages for this validator will reflect rules above. *** See also: * [Ip](Ip.md) * [MacAddress](MacAddress.md) * [Tld](Tld.md) [PunnyCode]: http://en.wikipedia.org/wiki/Punycode "Wikipedia: Punnycode" [IDNA]: http://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications "Wikipedia: Internationalized domain name" Validation-1.1.29/docs/rules/Each.md000066400000000000000000000011661336766562500171710ustar00rootroot00000000000000# Each - `v::each(v $validatorForValue)` - `v::each(null, v $validatorForKey)` - `v::each(v $validatorForValue, v $validatorForKey)` Iterates over an array or Iterator and validates the value or key of each entry: ```php $releaseDates = [ 'validation' => '2010-01-01', 'template' => '2011-01-01', 'relational' => '2011-02-05', ]; v::arrayVal()->each(v::date())->validate($releaseDates); // true v::arrayVal()->each(v::date(), v::stringType()->lowercase())->validate($releaseDates); // true ``` Using `arrayVal()` before `each()` is a best practice. *** See also: * [Key](Key.md) * [ArrayVal](ArrayVal.md) Validation-1.1.29/docs/rules/Email.md000066400000000000000000000003151336766562500173530ustar00rootroot00000000000000# Email - `v::email()` Validates an email address. ```php v::email()->validate('alexandre@gaigalas.net'); // true ``` *** See also: * [Phone](Phone.md) * [Url](Url.md) * [VideoUrl](VideoUrl.md) Validation-1.1.29/docs/rules/EndsWith.md000066400000000000000000000011471336766562500200550ustar00rootroot00000000000000# EndsWith - `v::endsWith(mixed $value)` - `v::endsWith(mixed $value, boolean $identical = false)` This validator is similar to `v::contains()`, but validates only if the value is at the end of the input. For strings: ```php v::endsWith('ipsum')->validate('lorem ipsum'); // true ``` For arrays: ```php v::endsWith('ipsum')->validate(['lorem', 'ipsum']); // true ``` A second parameter may be passed for identical comparison instead of equal comparison. Message template for this validator includes `{{endValue}}`. *** See also: * [StartsWith](StartsWith.md) * [Contains](Contains.md) * [In](In.md) Validation-1.1.29/docs/rules/Equals.md000066400000000000000000000004361336766562500175620ustar00rootroot00000000000000# Equals - `v::equals(mixed $value)` Validates if the input is equal to some value. ```php v::equals('alganet')->validate('alganet'); // true ``` Message template for this validator includes `{{compareTo}}`. *** See also: * [Contains](Contains.md) * [Identical](Identical.md) Validation-1.1.29/docs/rules/Even.md000066400000000000000000000003301336766562500172160ustar00rootroot00000000000000# Even - `v::even()` Validates an even number. ```php v::intVal()->even()->validate(2); // true ``` Using `int()` before `even()` is a best practice. *** See also: * [Odd](Odd.md) * [Multiple](Multiple.md) Validation-1.1.29/docs/rules/Executable.md000066400000000000000000000006421336766562500204100ustar00rootroot00000000000000# Executable - `v::executable()` Validates if a file is an executable. ```php v::email()->executable('script.sh'); // true ``` *** See also: * [Directory](Directory.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Exists.md000066400000000000000000000011171336766562500176040ustar00rootroot00000000000000# Exists - `v::exists()` Validates files or directories. ```php v::exists()->validate(__FILE__); // true v::exists()->validate(__DIR__); // true ``` This validator will consider SplFileInfo instances, so you can do something like: ```php v::exists()->validate(new \SplFileInfo($file)); ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Extension.md000066400000000000000000000007541336766562500203070ustar00rootroot00000000000000# Extension - `v::extension(string $extension)` Validates if the file extension matches the expected one: ```php v::extension('png')->validate('image.png'); // true ``` This rule is case-sensitive. *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Factor.md000066400000000000000000000005161336766562500175450ustar00rootroot00000000000000# Factor - `v::factor(int $dividend)` Validates if the input is a factor of the defined dividend. ```php v::factor(0)->validate(5); // true v::factor(4)->validate(2); // true v::factor(4)->validate(3); // false ``` *** See also: * [Digit](Digit.md) * [Finite](Finite.md) * [Infinite](Infinite.md) * [Numeric](Numeric.md) Validation-1.1.29/docs/rules/FalseVal.md000066400000000000000000000006771336766562500200340ustar00rootroot00000000000000# FalseVal - `v::falseVal()` Validates if a value is considered as `false`. ```php v::falseVal()->validate(false); // true v::falseVal()->validate(0); // true v::falseVal()->validate('0'); // true v::falseVal()->validate('false'); // true v::falseVal()->validate('off'); // true v::falseVal()->validate('no'); // true v::falseVal()->validate('0.5'); // false v::falseVal()->validate('2'); // false ``` *** See also: * [TrueVal](TrueVal.md) Validation-1.1.29/docs/rules/Fibonacci.md000066400000000000000000000004741336766562500202070ustar00rootroot00000000000000# Fibonacci - `v::fibonacci()` Validates whether the input follows the Fibonacci integer sequence. ```php v::fibonacci()->validate(1); // true v::fibonacci()->validate('34'); // true v::fibonacci()->validate(6); // false ``` *** See also: * [PrimeNumber](PrimeNumber.md) * [PerfectSquare](PerfectSquare.md)Validation-1.1.29/docs/rules/File.md000066400000000000000000000010731336766562500172050ustar00rootroot00000000000000# File - `v::file()` Validates files. ```php v::file()->validate(__FILE__); // true v::file()->validate(__DIR__); // false ``` This validator will consider SplFileInfo instances, so you can do something like: ```php v::file()->validate(new \SplFileInfo($file)); ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/FilterVar.md000066400000000000000000000011011336766562500202140ustar00rootroot00000000000000# FilterVar - `v::filterVar(int $filter)` - `v::filterVar(int $filter, mixed $options)` A wrapper for PHP's [filter_var()](http://php.net/filter_var) function. ```php v::filterVar(FILTER_VALIDATE_EMAIL)->validate('bob@example.com'); // true v::filterVar(FILTER_VALIDATE_URL)->validate('http://example.com'); // true v::filterVar(FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)->validate('http://example.com'); // false v::filterVar(FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)->validate('http://example.com/path'); // true ``` *** See also: * [Callback](Callback.md) Validation-1.1.29/docs/rules/Finite.md000066400000000000000000000004161336766562500175440ustar00rootroot00000000000000# Finite - `v::finite()` Validates if the input is a finite number. ```php v::finite()->validate('10'); // true v::finite()->validate(10); // true ``` *** See also: * [Digit](Digit.md) * [Infinite](Infinite.md) * [IntVal](IntVal.md) * [Numeric](Numeric.md) Validation-1.1.29/docs/rules/FloatType.md000066400000000000000000000010071336766562500202320ustar00rootroot00000000000000# FloatType - `v::floatType()` Validates whether the type of a value is float. ```php v::floatType()->validate(1.5); // true v::floatType()->validate('1.5'); // false v::floatType()->validate(0e5); // true ``` *** See also: * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatVal](FloatVal.md) * [IntType](IntType.md) * [IntVal](IntVal.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/FloatVal.md000066400000000000000000000003741336766562500200410ustar00rootroot00000000000000# FloatVal - `v::floatVal()` Validates a floating point number. ```php v::floatVal()->validate(1.5); // true v::floatVal()->validate('1e5'); // true ``` *** See also: * [FloatType](FloatType.md) * [IntType](IntType.md) * [IntVal](IntVal.md) Validation-1.1.29/docs/rules/Graph.md000066400000000000000000000003251336766562500173660ustar00rootroot00000000000000# Graph - `v::graph()` - `v::graph(string $additionalChars)` Validates all characters that are graphically represented. ```php v::graph()->validate('LKM@#$%4;'); // true ``` *** See also: * [Prnt](Prnt.md) Validation-1.1.29/docs/rules/HexRgbColor.md000066400000000000000000000003751336766562500205100ustar00rootroot00000000000000# HexRgbColor - `v::hexRgbColor()` Validates a hex RGB color ```php v::hexRgbColor()->validate('#FFFAAA'); // true v::hexRgbColor()->validate('123123'); // true v::hexRgbColor()->validate('FCD'); // true ``` *** See also: * [Vxdigit](Vxdigit.md) Validation-1.1.29/docs/rules/Identical.md000066400000000000000000000005021336766562500202160ustar00rootroot00000000000000# Identical - `v::identical(mixed $value)` Validates if the input is identical to some value. ```php v::identical(42)->validate(42); // true v::identical(42)->validate('42'); // false ``` Message template for this validator includes `{{compareTo}}`. *** See also: * [Contains](Contains.md) * [Equals](Equals.md) Validation-1.1.29/docs/rules/IdentityCard.md000066400000000000000000000010271336766562500207100ustar00rootroot00000000000000# IdentityCard - `v::identityCard(string $countryCode)` Validates Identity Card numbers according to the defined country. ```php v::identityCard('PL')->validate('AYW036733'); // true v::identityCard('PL')->validate('APH505567'); // true v::identityCard('PL')->validate('APH 505567'); // false v::identityCard('PL')->validate('AYW036731'); // false ``` For now this rule only accepts Polish Identity Card numbers (Dowód Osobisty). *** See also: * [Bank](Bank.md) * [Pesel](Pesel.md) * [SubdivisionCode](SubdivisionCode.md) Validation-1.1.29/docs/rules/Image.md000066400000000000000000000014241336766562500173500ustar00rootroot00000000000000# Image - `v::image()` - `v::image(finfo $fileInfo)` Validates if the file is a valid image by checking its MIME type. ```php v::image()->validate('image.gif'); // true v::image()->validate('image.jpg'); // true v::image()->validate('image.png'); // true ``` All the validations above must return `false` if the input is not a valid file or of the MIME doesn't match with the file extension. This rule relies on [fileinfo](http://php.net/fileinfo) PHP extension. *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Imei.md000066400000000000000000000006251336766562500172130ustar00rootroot00000000000000# Imei - `v::imei()` Validates is the input is a valid [IMEI][]. ```php v::imei()->validate('35-209900-176148-1'); // true v::imei()->validate('490154203237518'); // true ``` *** See also: * [Bsn](Bsn.md) * [Cnh](Cnh.md) * [Cnpj](Cnpj.md) * [Cpf](Cpf.md) [IMEI]: https://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity "International Mobile Station Equipment Identity" Validation-1.1.29/docs/rules/In.md000066400000000000000000000010551336766562500166740ustar00rootroot00000000000000# In - `v::in(mixed $haystack)` - `v::in(mixed $haystack, boolean $identical = false)` Validates if the input is contained in a specific haystack. For strings: ```php v::in('lorem ipsum')->validate('ipsum'); // true ``` For arrays: ```php v::in(['lorem', 'ipsum'])->validate('lorem'); // true ``` A second parameter may be passed for identical comparison instead of equal comparison. Message template for this validator includes `{{haystack}}`. *** See also: * [StartsWith](StartsWith.md) * [EndsWith](EndsWith.md) * [Contains](Contains.md) Validation-1.1.29/docs/rules/Infinite.md000066400000000000000000000003571336766562500200770ustar00rootroot00000000000000# Infinite - `v::infinite()` Validates if the input is an infinite number. ```php v::infinite()->validate(INF); // true ``` *** See also: * [Digit](Digit.md) * [Finite](Finite.md) * [IntVal](IntVal.md) * [Numeric](Numeric.md) Validation-1.1.29/docs/rules/Instance.md000066400000000000000000000005601336766562500200720ustar00rootroot00000000000000# Instance - `v::instance(string $instanceName)` Validates if the input is an instance of the given class or interface. ```php v::instance('DateTime')->validate(new DateTime); // true v::instance('Traversable')->validate(new ArrayObject); // true ``` Message template for this validator includes `{{instanceName}}`. *** See also: * [ObjectType](ObjectType.md) Validation-1.1.29/docs/rules/IntType.md000066400000000000000000000010441336766562500177200ustar00rootroot00000000000000# IntType - `v::intType()` Validates whether the type of a value is integer. ```php v::intType()->validate(42); // true v::intType()->validate('10'); // false ``` *** See also: * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [Digit](Digit.md) * [Finite](Finite.md) * [FloatType](FloatType.md) * [Infinite](Infinite.md) * [IntVal](IntVal.md) * [NullType](NullType.md) * [Numeric](Numeric.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/IntVal.md000066400000000000000000000004111336766562500175160ustar00rootroot00000000000000# IntVal - `v::intVal()` Validates if the input is an integer. ```php v::intVal()->validate('10'); // true v::intVal()->validate(10); // true ``` *** See also: * [Digit](Digit.md) * [Finite](Finite.md) * [Infinite](Infinite.md) * [Numeric](Numeric.md) Validation-1.1.29/docs/rules/Ip.md000066400000000000000000000006151336766562500166770ustar00rootroot00000000000000# Ip - `v::ip()` - `v::ip(mixed $options)` Validates IP Addresses. This validator uses the native filter_var() PHP function. ```php v::ip()->validate('192.168.0.1'); ``` You can pass a parameter with filter_var flags for IP. ```php v::ip(FILTER_FLAG_NO_PRIV_RANGE)->validate('127.0.0.1'); // false ``` *** See also: * [Domain](Domain.md) * [MacAddress](MacAddress.md) * [Tld](Tld.md) Validation-1.1.29/docs/rules/Iterable.md000066400000000000000000000001341336766562500200520ustar00rootroot00000000000000# Iterable - `v::iterable()` **Deprecated**: Use [IterableType](IterableType.md) instead. Validation-1.1.29/docs/rules/IterableType.md000066400000000000000000000007601336766562500207210ustar00rootroot00000000000000# IterableType - `v::iterableType()` Validates if the input is iterable, in other words, if you're able to iterate over it with [foreach](http://php.net/foreach) language construct. ```php v::iterableType()->validate([]); // true v::iterableType()->validate(new ArrayObject()); // true v::iterableType()->validate(new stdClass()); // true v::iterableType()->validate('string'); // false ``` *** See also: * [ArrayVal](ArrayVal.md) * [Countable](Countable.md) * [Instance](Instance.md) Validation-1.1.29/docs/rules/Json.md000066400000000000000000000004151336766562500172360ustar00rootroot00000000000000# Json - `v::json()` Validates if the given input is a valid JSON. ```php v::json()->validate('{"foo":"bar"}'); // true ``` *** See also: * [Domain](Domain.md) * [Email](Email.md) * [FilterVar](FilterVar.md) * [Phone](Phone.md) * [VideoUrl](VideoUrl.md) Validation-1.1.29/docs/rules/Key.md000066400000000000000000000011321336766562500170520ustar00rootroot00000000000000# Key - `v::key(string $name)` - `v::key(string $name, v $validator)` - `v::key(string $name, v $validator, boolean $mandatory = true)` Validates an array key. ```php $dict = [ 'foo' => 'bar' ]; v::key('foo')->validate($dict); // true ``` You can also validate the key value itself: ```php v::key('foo', v::equals('bar'))->validate($dict); // true ``` Third parameter makes the key presence optional: ```php v::key('lorem', v::stringType(), false)->validate($dict); // true ``` The name of this validator is automatically set to the key name. *** See also: * [Attribute](Attribute.md) Validation-1.1.29/docs/rules/KeyNested.md000066400000000000000000000015041336766562500202200ustar00rootroot00000000000000# KeyNested - `v::keyNested(string $name)` - `v::keyNested(string $name, v $validator)` - `v::keyNested(string $name, v $validator, boolean $mandatory = true)` Validates an array key or an object property using `.` to represent nested data. Validating keys from arrays or `ArrayAccess` instances: ```php $array = [ 'foo' => [ 'bar' => 123, ], ]; v::keyNested('foo.bar')->validate($array); // true ``` Validating object properties: ```php $object = new stdClass(); $object->foo = new stdClass(); $object->foo->bar = 42; v::keyNested('foo.bar')->validate($object); // true ``` This rule was inspired by [Yii2 ArrayHelper][]. *** See also: * [Attribute](Attribute.md) * [Key](Key.md) [Yii2 ArrayHelper]: https://github.com/yiisoft/yii2/blob/68c30c1/framework/helpers/BaseArrayHelper.php "Yii2 ArrayHelper" Validation-1.1.29/docs/rules/KeySet.md000066400000000000000000000016101336766562500175270ustar00rootroot00000000000000# KeySet - `v::keySet(Key $rule...)` Validates a keys in a defined structure. ```php $dict = ['foo' => 42]; v::keySet( v::key('foo', v::intVal()) )->validate($dict); // true ``` Extra keys are not allowed: ```php $dict = ['foo' => 42, 'bar' => 'String']; v::keySet( v::key('foo', v::intVal()) )->validate($dict); // false ``` Missing required keys are not allowed: ```php $dict = ['foo' => 42, 'bar' => 'String']; v::keySet( v::key('foo', v::intVal()), v::key('bar', v::stringType()), v::key('baz', v::boolType()) )->validate($dict); // false ``` Missing non-required keys are allowed: ```php $dict = ['foo' => 42, 'bar' => 'String']; v::keySet( v::key('foo', v::intVal()), v::key('bar', v::stringType()), v::key('baz', v::boolType(), false) )->validate($dict); // true ``` The keys' order is not considered in the validation. *** See also: * [Key](Key.md) Validation-1.1.29/docs/rules/KeyValue.md000066400000000000000000000035661336766562500200640ustar00rootroot00000000000000# KeyValue - `keyValue(string $comparedKey, string $ruleName, string $baseKey)` Performs validation of `$comparedKey` using the rule named on `$ruleName` with `$baseKey` as base. Sometimes, when validating arrays, the validation of a key value depends on another key value and that may cause some ugly code since you need the input before the validation, making some checking manually: ```php v::key('password')->check($_POST); v::key('password_confirmation', v::equals($_POST['password']))->check($_POST); ``` The problem with the above code is because you do not know if `password` is a valid key, so you must check it manually before performing the validation on `password_confirmation`. The `keyValue()` rule makes this job easier by creating a rule named on `$ruleName` passing `$baseKey` as the first argument of this rule, see an example: ```php v::keyValue('password_confirmation', 'equals', 'password')->validate($_POST); ``` The above code will result on `true` if _`$_POST['password_confirmation']` is [equals](Equals.md) to `$_POST['password']`_, it's the same of: See another example: ```php v::keyValue('state', 'subdivisionCode', 'country')->validate($_POST); ``` The above code will result on `true` if _`$_POST['state']` is a [subdivision code](SubdivisionCode.md) of `$_POST['country']`_: This rule will invalidate the input if `$comparedKey` or `$baseKey` don't exist, or if the rule named on `$ruleName` could not be created (or don't exist). When using `assert()` or `check()` methods and the rule do not pass, it overwrites all values in the validation exceptions with `$baseKey` and `$comparedKey`. ```php v::keyValue('password_confirmation', 'equals', 'password')->check($input); ``` The above code may generate the message: ``` password_confirmation must be equals "password" ``` *** See also: * [Key](Key.md) * [KeyNested](KeyNested.md) * [KeySet](KeySet.md) Validation-1.1.29/docs/rules/LanguageCode.md000066400000000000000000000007031336766562500206430ustar00rootroot00000000000000# LanguageCode - `v::languageCode()` Validates a language code based on ISO 639: ```php v::languageCode()->validate('pt'); // true v::languageCode()->validate('en'); // true v::languageCode()->validate('it'); // true v::languageCode('alpha-3')->validate('ita'); // true v::languageCode('alpha-3')->validate('eng'); // true ``` You can choose between alpha-2 and alpha-3, alpha-2 is set by default. *** See also: * [CountryCode](CountryCode.md)Validation-1.1.29/docs/rules/LeapDate.md000066400000000000000000000004441336766562500200060ustar00rootroot00000000000000# LeapDate - `v::leapDate(string $format)` Validates if a date is leap. ```php v::leapDate('Y-m-d')->validate('1988-02-29'); // true ``` This validator accepts DateTime instances as well. The $format parameter is mandatory. *** See also: * [Date](Date.md) * [LeapYear](LeapYear.md) Validation-1.1.29/docs/rules/LeapYear.md000066400000000000000000000003451336766562500200310ustar00rootroot00000000000000# LeapYear - `v::leapYear()` Validates if a year is leap. ```php v::leapYear()->validate('1988'); // true ``` This validator accepts DateTime instances as well. *** See also: * [Date](Date.md) * [LeapDate](LeapDate.md) Validation-1.1.29/docs/rules/Length.md000066400000000000000000000016361336766562500175540ustar00rootroot00000000000000# Length - `v::length(int $min, int $max)` - `v::length(int $min, null)` - `v::length(null, int $max)` - `v::length(int $min, int $max, boolean $inclusive = true)` Validates lengths. Most simple example: ```php v::stringType()->length(1, 5)->validate('abc'); // true ``` You can also validate only minimum length: ```php v::stringType()->length(5, null)->validate('abcdef'); // true ``` Only maximum length: ```php v::stringType()->length(null, 5)->validate('abc'); // true ``` The type as the first validator in a chain is a good practice, since length accepts many types: ```php v::arrayVal()->length(1, 5)->validate(['foo', 'bar']); // true ``` A third parameter may be passed to validate the passed values inclusive: ```php v::stringType()->length(1, 5, true)->validate('a'); // true ``` Message template for this validator includes `{{minValue}}` and `{{maxValue}}`. *** See also: * [Between](Between.md) Validation-1.1.29/docs/rules/Lowercase.md000066400000000000000000000003161336766562500202510ustar00rootroot00000000000000# Lowercase - `v::lowercase()` Validates if string characters are lowercase in the input: ```php v::stringType()->lowercase()->validate('xkcd'); // true ``` *** See also: * [Uppercase](Uppercase.md) Validation-1.1.29/docs/rules/MacAddress.md000066400000000000000000000004021336766562500203270ustar00rootroot00000000000000# MacAddress - `v::macAddress()` Validates a Mac Address. ```php v::macAddress()->validate('00:11:22:33:44:55'); // true v::macAddress()->validate('af-AA-22-33-44-55'); // true ``` *** See also: * [Domain](Domain.md) * [Ip](Ip.md) * [Tld](Tld.md) Validation-1.1.29/docs/rules/Max.md000066400000000000000000000013331336766562500170520ustar00rootroot00000000000000# Max - `v::max(mixed $maxValue)` - `v::max(mixed $maxValue, boolean $inclusive = true)` Validates if the input doesn't exceed the maximum value. ```php v::intVal()->max(15)->validate(20); // false v::intVal()->max(20)->validate(20); // false v::intVal()->max(20, true)->validate(20); // true ``` Also accepts dates: ```php v::date()->max('2012-01-01')->validate('2010-01-01'); // true ``` Also date intervals: ```php // Same of minimum age validation v::date()->max('-18 years')->validate('1988-09-09'); // true ``` `true` may be passed as a parameter to indicate that inclusive values must be used. Message template for this validator includes `{{maxValue}}`. *** See also: * [Min](Min.md) * [Between](Between.md) Validation-1.1.29/docs/rules/Mimetype.md000066400000000000000000000010561336766562500201200ustar00rootroot00000000000000# Mimetype - `v::mimetype(string $mimetype)` Validates if the file mimetype matches the expected one: ```php v::mimetype('image/png')->validate('image.png'); // true ``` This rule is case-sensitive and requires [fileinfo](http://php.net/fileinfo) PHP extension. *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Min.md000066400000000000000000000011261336766562500170500ustar00rootroot00000000000000# Min - `v::min(mixed $minValue)` - `v::min(mixed $minValue, boolean $inclusive = true)` Validates if the input is greater than the minimum value. ```php v::intVal()->min(15)->validate(5); // false v::intVal()->min(5)->validate(5); // false v::intVal()->min(5, true)->validate(5); // true ``` Also accepts dates: ```php v::date()->min('2012-01-01')->validate('2015-01-01'); // true ``` `true` may be passed as a parameter to indicate that inclusive values must be used. Message template for this validator includes `{{minValue}}`. *** See also: * [Max](Max.md) * [Between](Between.md) Validation-1.1.29/docs/rules/MinimumAge.md000066400000000000000000000007311336766562500203560ustar00rootroot00000000000000# MinimumAge This is going to be deprecated, please use [Age](Age.md) instead. - `v::minimumAge(int $age)` - `v::minimumAge(int $age, string $format)` Validates a minimum age for a given date. ```php v::minimumAge(18)->validate('1987-01-01'); // true v::minimumAge(18, 'd/m/Y')->validate('01/01/1987'); // true ``` Using `date()` before is a best-practice. Message template for this validator includes `{{age}}`. *** See also: * [Age](Age.md) * [Date](Date.md) Validation-1.1.29/docs/rules/Multiple.md000066400000000000000000000003271336766562500201220ustar00rootroot00000000000000# Multiple - `v::multiple(int $multipleOf)` Validates if the input is a multiple of the given parameter ```php v::intVal()->multiple(3)->validate(9); // true ``` *** See also: * [PrimeNumber](PrimeNumber.md) Validation-1.1.29/docs/rules/Negative.md000066400000000000000000000002611336766562500200660ustar00rootroot00000000000000# Negative - `v::negative()` Validates if a number is lower than zero ```php v::numeric()->negative()->validate(-15); // true ``` *** See also: * [Positive](Positive.md) Validation-1.1.29/docs/rules/NfeAccessKey.md000066400000000000000000000004451336766562500206330ustar00rootroot00000000000000# NfeAccessKey - `v::nfeAccessKey(string $accessKey)` Validates the access key of the Brazilian electronic invoice (NFe). ```php v::nfeAccessKey()->validate('31841136830118868211870485416765268625116906'); // true ``` *** See also: * [Cnh](Cnh.md) * [Cnpj](Cnpj.md) * [Cpf](Cpf.md) Validation-1.1.29/docs/rules/No.md000066400000000000000000000007351336766562500167060ustar00rootroot00000000000000# No - `v::no()` - `v::no(boolean $locale)` Validates if value is considered as "No". ```php v::no()->validate('N'); // true v::no()->validate('Nay'); // true v::no()->validate('Nix'); // true v::no()->validate('No'); // true v::no()->validate('Nope'); // true v::no()->validate('Not'); // true ``` This rule is case insensitive. If `$locale` is TRUE, uses the value of [nl_langinfo()](http://php.net/nl_langinfo) with `NOEXPR` constant. *** See also: * [Yes](Yes.md) Validation-1.1.29/docs/rules/NoWhitespace.md000066400000000000000000000007071336766562500207220ustar00rootroot00000000000000# NoWhitespace - `v::noWhitespace()` Validates if a string contains no whitespace (spaces, tabs and line breaks); ```php v::noWhitespace()->validate('foo bar'); //false v::noWhitespace()->validate("foo\nbar"); // false ``` This is most useful when chaining with other validators such as `v::alnum()` *** See also: * [Alnum](Alnum.md) * [Alpha](Alpha.md) * [NotBlank](NotBlank.md) * [NotEmpty](NotEmpty.md) * [NotOptional](NotOptional.md) Validation-1.1.29/docs/rules/NoneOf.md000066400000000000000000000005321336766562500175110ustar00rootroot00000000000000# NoneOf - `v::noneOf(v $v1, v $v2, v $v3...)` Validates if NONE of the given validators validate: ```php v::noneOf( v::intVal(), v::floatVal() )->validate('foo'); // true ``` In the sample above, 'foo' isn't a integer nor a float, so noneOf returns true. *** See also: * [Not](Not.md) * [AllOf](AllOf.md) * [OneOf](OneOf.md) Validation-1.1.29/docs/rules/Not.md000066400000000000000000000006531336766562500170710ustar00rootroot00000000000000# Not - `v::not(v $negatedValidator)` Negates any rule. ```php v::not(v::ip())->validate('foo'); // true ``` In the sample above, validator returns true because 'foo' isn't an IP Address. You can negate complex, grouped or chained validators as well: ```php v::not(v::intVal()->positive())->validate(-1.5); // true ``` Each other validation has custom messages for negated rules. *** See also: * [NoneOf](NoneOf.md) Validation-1.1.29/docs/rules/NotBlank.md000066400000000000000000000017241336766562500200410ustar00rootroot00000000000000# NotBlank - `v::notBlank()` Validates if the given input is not a blank value (`null`, zeros, empty strings or empty arrays, recursively). ```php v::notBlank()->validate(null); // false v::notBlank()->validate(''); // false v::notBlank()->validate([]); // false v::notBlank()->validate(' '); // false v::notBlank()->validate(0); // false v::notBlank()->validate('0'); // false v::notBlank()->validate(0); // false v::notBlank()->validate('0.0'); // false v::notBlank()->validate(false); // false v::notBlank()->validate(['']); // false v::notBlank()->validate([' ']); // false v::notBlank()->validate([0]); // false v::notBlank()->validate(['0']); // false v::notBlank()->validate([false]); // false v::notBlank()->validate([[''], [0]]); // false v::notBlank()->validate(new stdClass()); // false ``` It's similar to [NotEmpty](NotEmpty.md) but it's way more strict. *** See also: * [NoWhitespace](NoWhitespace.md) * [NotEmpty](NotEmpty.md) * [NullType](NullType.md) Validation-1.1.29/docs/rules/NotEmpty.md000066400000000000000000000014241336766562500201050ustar00rootroot00000000000000# NotEmpty - `v::notEmpty()` Validates if the given input is not empty or in other words is input mandatory and required. This function also takes whitespace into account, use `noWhitespace()` if no spaces or linebreaks and other whitespace anywhere in the input is desired. ```php v::stringType()->notEmpty()->validate(''); // false ``` Null values are empty: ```php v::notEmpty()->validate(null); // false ``` Numbers: ```php v::intVal()->notEmpty()->validate(0); // false ``` Empty arrays: ```php v::arrayVal()->notEmpty()->validate([]); // false ``` Whitespace: ```php v::stringType()->notEmpty()->validate(' '); //false v::stringType()->notEmpty()->validate("\t \n \r"); //false ``` *** See also: * [NoWhitespace](NoWhitespace.md) * [NullType](NullType.md) Validation-1.1.29/docs/rules/NotOptional.md000066400000000000000000000020071336766562500205720ustar00rootroot00000000000000# NotOptional - `v::notOptional()` Validates if the given input is not optional. By _optional_ we consider `null` or an empty string (`''`). ```php v::notOptional()->validate(''); // false v::notOptional()->validate(null); // false ``` Other values: ```php v::notOptional()->validate([]); // true v::notOptional()->validate(' '); // true v::notOptional()->validate(0); // true v::notOptional()->validate('0'); // true v::notOptional()->validate(0); // true v::notOptional()->validate('0.0'); // true v::notOptional()->validate(false); // true v::notOptional()->validate(['']); // true v::notOptional()->validate([' ']); // true v::notOptional()->validate([0]); // true v::notOptional()->validate(['0']); // true v::notOptional()->validate([false]); // true v::notOptional()->validate([[''), [0]]); // true v::notOptional()->validate(new stdClass()); // true ``` *** See also: * [NoWhitespace](NoWhitespace.md) * [NotBlank](NotBlank.md) * [NotEmpty](NotEmpty.md) * [NullType](NullType.md) * [Optional](Optional.md) Validation-1.1.29/docs/rules/NullType.md000066400000000000000000000007501336766562500201030ustar00rootroot00000000000000# NullType - `v::nullType()` Validates if the input is null. ```php v::nullType()->validate(null); // true ``` *** See also: * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [IntType](IntType.md) * [NotBlank](NotBlank.md) * [NotEmpty](NotEmpty.md) * [NotOptional](NotOptional.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/Numeric.md000066400000000000000000000004111336766562500177230ustar00rootroot00000000000000# Numeric - `v::numeric()` Validates on any numeric value. ```php v::numeric()->validate(-12); // true v::numeric()->validate('135.0'); // true ``` *** See also: * [Digit](Digit.md) * [Finite](Finite.md) * [Infinite](Infinite.md) * [IntVal](IntVal.md) Validation-1.1.29/docs/rules/ObjectType.md000066400000000000000000000007331336766562500204000ustar00rootroot00000000000000# ObjectType - `v::objectType()` Validates if the input is an object. ```php v::objectType()->validate(new stdClass); // true ``` *** See also: * [Attribute](Attribute.md) * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [Instance](Instance.md) * [IntType](IntType.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/Odd.md000066400000000000000000000003251336766562500170330ustar00rootroot00000000000000# Odd - `v::odd()` Validates an odd number. ```php v::intVal()->odd()->validate(3); // true ``` Using `int()` before `odd()` is a best practice. *** See also: * [Even](Even.md) * [Multiple](Multiple.md) Validation-1.1.29/docs/rules/OneOf.md000066400000000000000000000006721336766562500173400ustar00rootroot00000000000000# OneOf - `v::oneOf(v $v1, v $v2, v $v3...)` This is a group validator that acts as an OR operator. ```php v::oneOf( v::intVal(), v::floatVal() )->validate(15.5); // true ``` In the sample above, `v::intVal()` doesn't validates, but `v::floatVal()` validates, so oneOf returns true. `v::oneOf` returns true if at least one inner validator passes. *** See also: * [AllOf](AllOf.md) * [NoneOf](NoneOf.md) * [When](When.md) Validation-1.1.29/docs/rules/Optional.md000066400000000000000000000006521336766562500201150ustar00rootroot00000000000000# Optional - `v::optional(v $rule)` Validates if the given input is optional or not. By _optional_ we consider `null` or an empty string (`''`). ```php v::optional(v::alpha())->validate(''); // true v::optional(v::digit())->validate(null); // true ``` *** See also: * [NoWhitespace](NoWhitespace.md) * [NotBlank](NotBlank.md) * [NotEmpty](NotEmpty.md) * [NotOptional](NotOptional.md) * [NullType](NullType.md) Validation-1.1.29/docs/rules/PerfectSquare.md000066400000000000000000000003721336766562500211000ustar00rootroot00000000000000# PerfectSquare - `v::perfectSquare()` Validates a perfect square. ```php v::perfectSquare()->validate(25); // true (5*5) v::perfectSquare()->validate(9); // true (3*3) ``` *** See also: * [Factor](Factor.md) * [PrimeNumber](PrimeNumber.md) Validation-1.1.29/docs/rules/Pesel.md000066400000000000000000000004211336766562500173720ustar00rootroot00000000000000# Pesel - `v::pesel()` Validates PESEL (Polish human identification number). ```php v::pesel()->validate('21120209256'); // true v::pesel()->validate('97072704800'); // true v::pesel()->validate('97072704801'); // false v::pesel()->validate('PESEL123456'); // false ``` Validation-1.1.29/docs/rules/Phone.md000066400000000000000000000006651336766562500174050ustar00rootroot00000000000000# Phone - `v::phone()` Validates a valid 7, 10, 11 digit phone number (North America, Europe and most Asian and Middle East countries), supporting country and area codes (in dot, space or dashed notations) such as: (555)555-5555 555 555 5555 +5(555)555.5555 33(1)22 22 22 22 +33(1)22 22 22 22 +33(020)7777 7777 03-6106666 *** See also: * [Email](Email.md) * [Url](Url.md) * [VideoUrl](VideoUrl.md) Validation-1.1.29/docs/rules/PhpLabel.md000066400000000000000000000007541336766562500200220ustar00rootroot00000000000000# PhpLabel - `v::phpLabel()` Validates if a value is considered a valid PHP Label, so that it can be used as a *variable*, *function* or *class* name, for example. Reference: http://php.net/manual/en/language.variables.basics.php ```php v::phpLabel()->validate('person'); //true v::phpLabel()->validate('foo'); //true v::phpLabel()->validate('4ccess'); //false ``` *** See also: * [Regex](Regex.md) * [ResourceType](ResourceType.md) * [Slug](Slug.md) * [Charset](Charset.md) Validation-1.1.29/docs/rules/Positive.md000066400000000000000000000002631336766562500201300ustar00rootroot00000000000000# Positive - `v::positive()` Validates if a number is higher than zero ```php v::numeric()->positive()->validate(-15); // false ``` *** See also: * [Negative](Negative.md) Validation-1.1.29/docs/rules/PostalCode.md000066400000000000000000000010451336766562500203620ustar00rootroot00000000000000# PostalCode - `v::postalCode(string $countryCode)` Validates a postal code according to the given country code. ```php v::postalCode('BR')->validate('02179000'); // true v::postalCode('BR')->validate('02179-000'); // true v::postalCode('US')->validate('02179-000'); // false v::postalCode('US')->validate('55372'); // true v::postalCode('PL')->validate('99-300'); // true ``` Message template for this validator includes `{{countryCode}}`. Extracted from [GeoNames](http://www.geonames.org/). *** See also: * [CountryCode](CountryCode.md) Validation-1.1.29/docs/rules/PrimeNumber.md000066400000000000000000000003411336766562500205500ustar00rootroot00000000000000# PrimeNumber - `v::primeNumber()` Validates a prime number ```php v::primeNumber()->validate(7); // true ``` *** See also: * [Factor](Factor.md) * [PerfectSquare](PerfectSquare.md) * [PrimeNumber](PrimeNumber.md) Validation-1.1.29/docs/rules/Prnt.md000066400000000000000000000003111336766562500172430ustar00rootroot00000000000000# Prnt - `v::prnt()` - `v::prnt(string $additionalChars)` Similar to `v::graph` but accepts whitespace. ```php v::prnt()->validate('LMKA0$% _123'); // true ``` *** See also: * [Graph](Graph.md) Validation-1.1.29/docs/rules/Punct.md000066400000000000000000000003501336766562500174140ustar00rootroot00000000000000# Punct - `v::punct()` - `v::punct(string $additionalChars)` Accepts only punctuation characters: ```php v::punct()->validate('&,.;[]'); // true ``` *** See also: * [Cntrl](Cntrl.md) * [Graph](Graph.md) * [Prnt](Prnt.md) Validation-1.1.29/docs/rules/Readable.md000066400000000000000000000007121336766562500200240ustar00rootroot00000000000000# Readable - `v::readable()` Validates if the given data is a file exists and is readable. ```php v::readable()->validate('/path/of/a/readable/file'); // true ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Regex.md000066400000000000000000000005721336766562500174030ustar00rootroot00000000000000# Regex - `v::regex(string $regex)` Evaluates a regex on the input and validates if matches ```php v::regex('/[a-z]/')->validate('a'); // true ``` Message template for this validator includes `{{regex}}` *** See also: * [Alnum](Alnum.md) * [Alpha](Alpha.md) * [Contains](Contains.md) * [Digit](Digit.md) * [EndsWith](EndsWith.md) * [StartsWith](StartsWith.md) Validation-1.1.29/docs/rules/ResourceType.md000066400000000000000000000006271336766562500207630ustar00rootroot00000000000000# ResourceType - `v::resourceType()` Validates if the input is a resource. ```php v::resourceType()->validate(fopen('/path/to/file.txt', 'w')); // true ``` *** See also: * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [IntType](IntType.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/Roman.md000066400000000000000000000002651336766562500174040ustar00rootroot00000000000000# Roman - `v::roman()` Validates roman numbers ```php v::roman()->validate('IV'); // true ``` *** See also: * [In](In.md) * [Regex](Regex.md) * [Uppercase](Uppercase.md) Validation-1.1.29/docs/rules/ScalarVal.md000066400000000000000000000003131336766562500201720ustar00rootroot00000000000000# ScalarVal - `v::scalarVal()` Validates if the input is a scalar value. ```php v::scalarVal()->validate([]); // false v::scalarVal()->validate(135.0); // true ``` *** See also: * [Type](Type.md) Validation-1.1.29/docs/rules/Sf.md000066400000000000000000000004511336766562500166750ustar00rootroot00000000000000# Sf - `v::sf(string $validator)` Use Symfony2 validators inside Respect\Validation flow. Messages are preserved. ```php v::sf('Time')->validate('15:00:00'); ``` You must add `"symfony/validator": "~2.6"` to your `require` property on composer.json file. *** See also: * [Zend](Zend.md) Validation-1.1.29/docs/rules/Size.md000066400000000000000000000020261336766562500172370ustar00rootroot00000000000000# Size - `v::size(string $minSize)` - `v::size(string $minSize, string $maxSize)` - `v::size(null, string $maxSize)` Validates file sizes: ```php v::size('1KB')->validate($filename); // Must have at least 1KB size v::size('1MB', '2MB')->validate($filename); // Must have the size between 1MB and 2MB v::size(null, '1GB')->validate($filename); // Must not be greater than 1GB ``` Sizes are not case-sensitive and the accepted values are: - B - KB - MB - GB - TB - PB - EB - ZB - YB This validator will consider `SplFileInfo` instances, like: ```php $fileInfo = new SplFileInfo($filename); v::size('1.5mb')->validate($fileInfo); // Will return true or false ``` Message template for this validator includes `{{minSize}}` and `{{maxSize}}`. *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Slug.md000066400000000000000000000004331336766562500172370ustar00rootroot00000000000000# Slug - `v::slug()` Validates slug-like strings: ```php v::slug()->validate('my-wordpress-title'); // true v::slug()->validate('my-wordpress--title'); // false v::slug()->validate('my-wordpress-title-'); // false ``` *** See also: * [Url](Url.md) * [VideoUrl](VideoUrl.md) Validation-1.1.29/docs/rules/Space.md000066400000000000000000000002601336766562500173560ustar00rootroot00000000000000# Space - `v::space()` - `v::space(string $additionalChars)` Accepts only whitespace: ```php v::space()->validate(' '); // true ``` *** See also: * [Cntrl](Cntrl.md) Validation-1.1.29/docs/rules/StartsWith.md000066400000000000000000000011651336766562500204440ustar00rootroot00000000000000# StartsWith - `v::startsWith(mixed $value)` - `v::startsWith(mixed $value, boolean $identical = false)` This validator is similar to `v::contains()`, but validates only if the value is at the beginning of the input. For strings: ```php v::startsWith('lorem')->validate('lorem ipsum'); // true ``` For arrays: ```php v::startsWith('lorem')->validate(['lorem', 'ipsum']); // true ``` `true` may be passed as a parameter to indicate identical comparison instead of equal. Message template for this validator includes `{{startValue}}`. *** See also: * [EndsWith](EndsWith.md) * [Contains](Contains.md) * [In](In.md) Validation-1.1.29/docs/rules/StringType.md000066400000000000000000000005761336766562500204450ustar00rootroot00000000000000# StringType - `v::stringType()` Validates a string. ```php v::stringType()->validate('hi'); // true ``` *** See also: * [Alnum](Alnum.md) * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [FloatType](FloatType.md) * [IntType](IntType.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/SubdivisionCode.md000066400000000000000000000127621336766562500214260ustar00rootroot00000000000000# SubdivisionCode - `v::subdivisionCode(string $countryCode)` Validates subdivision country codes according to [ISO 3166-2][]. The `$countryCode` must be a country in [ISO 3166-1 alpha-2][] format. ```php v::subdivisionCode('BR')->validate('SP'); // true v::subdivisionCode('US')->validate('CA'); // true ``` This rule is case sensitive. ## Available country codes - `AD`: Andorra - `AE`: United Arab Emirates - `AF`: Afghanistan - `AG`: Antigua and Barbuda - `AI`: Anguilla - `AL`: Albania - `AM`: Armenia - `AN`: AN.html - `AO`: Angola - `AQ`: Antarctica - `AR`: Argentina - `AS`: American Samoa - `AT`: Austria - `AU`: Australia - `AW`: Aruba - `AX`: Åland - `AZ`: Azerbaijan - `BA`: Bosnia and Herzegovina - `BB`: Barbados - `BD`: Bangladesh - `BE`: Belgium - `BF`: Burkina Faso - `BG`: Bulgaria - `BH`: Bahrain - `BI`: Burundi - `BJ`: Benin - `BL`: Saint Barthélemy - `BM`: Bermuda - `BN`: Brunei - `BO`: Bolivia - `BQ`: Bonaire - `BR`: Brazil - `BS`: Bahamas - `BT`: Bhutan - `BV`: Bouvet Island - `BW`: Botswana - `BY`: Belarus - `BZ`: Belize - `CA`: Canada - `CC`: Cocos [Keeling] Islands - `CD`: Democratic Republic of the Congo - `CF`: Central African Republic - `CG`: Republic of the Congo - `CH`: Switzerland - `CI`: Ivory Coast - `CK`: Cook Islands - `CL`: Chile - `CM`: Cameroon - `CN`: China - `CO`: Colombia - `CR`: Costa Rica - `CS`: CS.html - `CU`: Cuba - `CV`: Cape Verde - `CW`: Curacao - `CX`: Christmas Island - `CY`: Cyprus - `CZ`: Czech Republic - `DE`: Germany - `DJ`: Djibouti - `DK`: Denmark - `DM`: Dominica - `DO`: Dominican Republic - `DZ`: Algeria - `EC`: Ecuador - `EE`: Estonia - `EG`: Egypt - `EH`: Western Sahara - `ER`: Eritrea - `ES`: Spain - `ET`: Ethiopia - `FI`: Finland - `FJ`: Fiji - `FK`: Falkland Islands - `FM`: Micronesia - `FO`: Faroe Islands - `FR`: France - `GA`: Gabon - `GB`: United Kingdom - `GD`: Grenada - `GE`: Georgia - `GF`: French Guiana - `GG`: Guernsey - `GH`: Ghana - `GI`: Gibraltar - `GL`: Greenland - `GM`: Gambia - `GN`: Guinea - `GP`: Guadeloupe - `GQ`: Equatorial Guinea - `GR`: Greece - `GS`: South Georgia and the South Sandwich Islands - `GT`: Guatemala - `GU`: Guam - `GW`: Guinea-Bissau - `GY`: Guyana - `HK`: Hong Kong - `HM`: Heard Island and McDonald Islands - `HN`: Honduras - `HR`: Croatia - `HT`: Haiti - `HU`: Hungary - `ID`: Indonesia - `IE`: Ireland - `IL`: Israel - `IM`: Isle of Man - `IN`: India - `IO`: British Indian Ocean Territory - `IQ`: Iraq - `IR`: Iran - `IS`: Iceland - `IT`: Italy - `JE`: Jersey - `JM`: Jamaica - `JO`: Jordan - `JP`: Japan - `KE`: Kenya - `KG`: Kyrgyzstan - `KH`: Cambodia - `KI`: Kiribati - `KM`: Comoros - `KN`: Saint Kitts and Nevis - `KP`: North Korea - `KR`: South Korea - `KW`: Kuwait - `KY`: Cayman Islands - `KZ`: Kazakhstan - `LA`: Laos - `LB`: Lebanon - `LC`: Saint Lucia - `LI`: Liechtenstein - `LK`: Sri Lanka - `LR`: Liberia - `LS`: Lesotho - `LT`: Lithuania - `LU`: Luxembourg - `LV`: Latvia - `LY`: Libya - `MA`: Morocco - `MC`: Monaco - `MD`: Moldova - `ME`: Montenegro - `MF`: Saint Martin - `MG`: Madagascar - `MH`: Marshall Islands - `MK`: Macedonia - `ML`: Mali - `MM`: Myanmar [Burma] - `MN`: Mongolia - `MO`: Macao - `MP`: Northern Mariana Islands - `MQ`: Martinique - `MR`: Mauritania - `MS`: Montserrat - `MT`: Malta - `MU`: Mauritius - `MV`: Maldives - `MW`: Malawi - `MX`: Mexico - `MY`: Malaysia - `MZ`: Mozambique - `NA`: Namibia - `NC`: New Caledonia - `NE`: Niger - `NF`: Norfolk Island - `NG`: Nigeria - `NI`: Nicaragua - `NL`: Netherlands - `NO`: Norway - `NP`: Nepal - `NR`: Nauru - `NU`: Niue - `NZ`: New Zealand - `OM`: Oman - `PA`: Panama - `PE`: Peru - `PF`: French Polynesia - `PG`: Papua New Guinea - `PH`: Philippines - `PK`: Pakistan - `PL`: Poland - `PM`: Saint Pierre and Miquelon - `PN`: Pitcairn Islands - `PR`: Puerto Rico - `PS`: Palestine - `PT`: Portugal - `PW`: Palau - `PY`: Paraguay - `QA`: Qatar - `RE`: Réunion - `RO`: Romania - `RS`: Serbia - `RU`: Russia - `RW`: Rwanda - `SA`: Saudi Arabia - `SB`: Solomon Islands - `SC`: Seychelles - `SD`: Sudan - `SE`: Sweden - `SG`: Singapore - `SH`: Saint Helena - `SI`: Slovenia - `SJ`: Svalbard and Jan Mayen - `SK`: Slovakia - `SL`: Sierra Leone - `SM`: San Marino - `SN`: Senegal - `SO`: Somalia - `SR`: Suriname - `SS`: South Sudan - `ST`: São Tomé and Príncipe - `SV`: El Salvador - `SX`: Sint Maarten - `SY`: Syria - `SZ`: Swaziland - `TC`: Turks and Caicos Islands - `TD`: Chad - `TF`: French Southern Territories - `TG`: Togo - `TH`: Thailand - `TJ`: Tajikistan - `TK`: Tokelau - `TL`: East Timor - `TM`: Turkmenistan - `TN`: Tunisia - `TO`: Tonga - `TR`: Turkey - `TT`: Trinidad and Tobago - `TV`: Tuvalu - `TW`: Taiwan - `TZ`: Tanzania - `UA`: Ukraine - `UG`: Uganda - `UM`: U.S. Minor Outlying Islands - `US`: United States - `UY`: Uruguay - `UZ`: Uzbekistan - `VA`: Vatican City - `VC`: Saint Vincent and the Grenadines - `VE`: Venezuela - `VG`: British Virgin Islands - `VI`: U.S. Virgin Islands - `VN`: Vietnam - `VU`: Vanuatu - `WF`: Wallis and Futuna - `WS`: Samoa - `XK`: Kosovo - `YE`: Yemen - `YT`: Mayotte - `ZA`: South Africa - `ZM`: Zambia - `ZW`: Zimbabwe All data was extrated from [GeoNames][] which is licensed under a [Creative Commons Attribution 3.0 License][]. *** See also: * [CountryCode](CountryCode.md) * [Tld](Tld.md) [Creative Commons Attribution 3.0 License]: http://creativecommons.org/licenses/by/3.0 "Creative Commons Attribution 3.0 License" [GeoNames]: http://www.geonames.org "GetNames" [ISO 3166-1 alpha-2]: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 "ISO 3166-1 alpha-2" [ISO 3166-2]: http://en.wikipedia.org/wiki/ISO_3166-2 "ISO 3166-2" Validation-1.1.29/docs/rules/SymbolicLink.md000066400000000000000000000007241336766562500207270ustar00rootroot00000000000000# SymbolicLink - `v::symbolicLink()` Validates if the given data is a path of a valid symbolic link. ```php v::symbolicLink()->validate('/path/of/valid/symbolic/link'); // true ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [Uploaded](Uploaded.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Tld.md000066400000000000000000000003561336766562500170540ustar00rootroot00000000000000# Tld - `v::tld()` Validates a top-level domain ```php v::tld()->validate('com'); // true v::tld()->validate('ly'); // true v::tld()->validate('org'); // true ``` *** See also: * [Domain](Domain.md) * [CountryCode](CountryCode.md) Validation-1.1.29/docs/rules/TrueVal.md000066400000000000000000000006641336766562500177150ustar00rootroot00000000000000# TrueVal - `v::trueVal()` Validates if a value is considered as `true`. ```php v::trueVal()->validate(true); // true v::trueVal()->validate(1); // true v::trueVal()->validate('1'); // true v::trueVal()->validate('true'); // true v::trueVal()->validate('on'); // true v::trueVal()->validate('yes'); // true v::trueVal()->validate('0.5'); // false v::trueVal()->validate('2'); // false ``` *** See also: * [FalseVal](FalseVal.md) Validation-1.1.29/docs/rules/Type.md000066400000000000000000000012721336766562500172500ustar00rootroot00000000000000# Type - `v::type(string $type)` Validates the type of input. ```php v::type('bool')->validate(true); // true v::type('callable')->validate(function (){}); // true v::type('object')->validate(new stdClass()); // true ``` *** See also: * [ArrayVal](ArrayVal.md) * [BoolType](BoolType.md) * [CallableType](CallableType.md) * [Finite](Finite.md) * [FloatType](FloatType.md) * [FloatVal](FloatVal.md) * [Infinite](Infinite.md) * [Instance](Instance.md) * [IntType](IntType.md) * [IntVal](IntVal.md) * [NullType](NullType.md) * [ObjectType](ObjectType.md) * [ResourceType](ResourceType.md) * [ScalarVal](ScalarVal.md) * [StringType](StringType.md) * [Type](Type.md) Validation-1.1.29/docs/rules/Uploaded.md000066400000000000000000000007241336766562500200650ustar00rootroot00000000000000# Uploaded - `v::uploaded()` Validates if the given data is a file that was uploaded via HTTP POST. ```php v::uploaded()->validate('/path/of/an/uploaded/file'); // true ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Writable](Writable.md) Validation-1.1.29/docs/rules/Uppercase.md000066400000000000000000000003151336766562500202530ustar00rootroot00000000000000# Uppercase - `v::uppercase()` Validates if string characters are uppercase in the input: ```php v::stringType()->uppercase()->validate('W3C'); // true ``` *** See also: * [Lowercase](Lowercase.md) Validation-1.1.29/docs/rules/Url.md000066400000000000000000000010171336766562500170660ustar00rootroot00000000000000# Url - `v::url()` Validates if input is an URL: ```php v::url()->validate('http://example.com'); // true v::url()->validate('https://www.youtube.com/watch?v=6FOUqQt3Kg0'); // true v::url()->validate('ldap://[::1]'); // true v::url()->validate('mailto:john.doe@example.com'); // true v::url()->validate('news:new.example.com'); // true ``` This rule uses [FilterVar](FilterVar.md) *** See also: * [Domain](Domain.md) * [Email](Email.md) * [FilterVar](FilterVar.md) * [Phone](Phone.md) * [VideoUrl](VideoUrl.md) Validation-1.1.29/docs/rules/Version.md000066400000000000000000000003231336766562500177500ustar00rootroot00000000000000# Version - `v::version()` Validates version numbers using Semantic Versioning. ```php v::version()->validate('1.0.0'); ``` *** See also: * [Equals](Equals.md) * [Regex](Regex.md) * [Roman](Roman.md) Validation-1.1.29/docs/rules/VideoUrl.md000066400000000000000000000017021336766562500200560ustar00rootroot00000000000000# VideoUrl - `v::videoUrl()` - `v::videoUrl(string $service)` Validates if the input is a video URL value: ```php v::videoUrl()->validate('https://player.vimeo.com/video/71787467'); // true v::videoUrl()->validate('https://vimeo.com/71787467'); // true v::videoUrl()->validate('https://www.youtube.com/embed/netHLn9TScY'); // true v::videoUrl()->validate('https://www.youtube.com/watch?v=netHLn9TScY'); // true v::videoUrl()->validate('https://youtu.be/netHLn9TScY'); // true v::videoUrl('youtube')->validate('https://www.youtube.com/watch?v=netHLn9TScY'); // true v::videoUrl('vimeo')->validate('https://vimeo.com/71787467'); // true v::videoUrl()->validate('https://youtube.com'); // false v::videoUrl('youtube')->validate('https://vimeo.com/71787467'); // false ``` The services accepted are: - YouTube - Vimeo The `$service` value is not case-sensitive. Message template for this validator includes `{{service}}`. *** See also: * [Url](Url.md) Validation-1.1.29/docs/rules/Vowel.md000066400000000000000000000004001336766562500174130ustar00rootroot00000000000000# Vowel - `v::vowel()` Similar to `v::alnum()`. Validates strings that contains only vowels: ```php v::vowel()->validate('aei'); // true ``` *** See also: * [Alnum](Alnum.md) * [Digit](Digit.md) * [Alpha](Alpha.md) * [Consonant](Consonant.md) Validation-1.1.29/docs/rules/When.md000066400000000000000000000011621336766562500172260ustar00rootroot00000000000000# When - `v::when(v $if, v $then, v $else)` - `v::when(v $if, v $then)` A ternary validator that accepts three parameters. When the `$if` validates, returns validation for `$then`. When the `$if` doesn't validate, returns validation for `$else`, if defined. ```php v::when(v::intVal(), v::positive(), v::notEmpty())->validate($input); ``` In the sample above, if `$input` is an integer, then it must be positive. If `$input` is not an integer, then it must not me empty. When `$else` is not defined use [AlwaysInvalid](AlwaysInvalid.md) *** See also: * [AllOf](AllOf.md) * [OneOf](OneOf.md) * [NoneOf](NoneOf.md) Validation-1.1.29/docs/rules/Writable.md000066400000000000000000000006731336766562500201040ustar00rootroot00000000000000# Writable - `v::writable()` Validates if the given input is writable file. ```php v::writable()->validate('/path/of/a/writable/file'); // true ``` *** See also: * [Directory](Directory.md) * [Executable](Executable.md) * [Exists](Exists.md) * [Extension](Extension.md) * [File](File.md) * [Mimetype](Mimetype.md) * [Readable](Readable.md) * [Size](Size.md) * [SymbolicLink](SymbolicLink.md) * [Uploaded](Uploaded.md) Validation-1.1.29/docs/rules/Xdigit.md000066400000000000000000000005041336766562500175540ustar00rootroot00000000000000# Xdigit - `v::xdigit()` Accepts an hexadecimal number: ```php v::xdigit()->validate('abc123'); // true ``` Notice, however, that it doesn't accept strings starting with 0x: ```php v::xdigit()->validate('0x1f'); // false ``` *** See also: * [Digit](Digit.md) * [Alnum](Alnum.md) * [HexRgbColor](HexRgbColor.md) Validation-1.1.29/docs/rules/Yes.md000066400000000000000000000007041336766562500170660ustar00rootroot00000000000000# Yes - `v::yes()` - `v::yes(boolean $locale)` Validates if value is considered as "Yes". ```php v::yes()->validate('Y'); // true v::yes()->validate('Yea'); // true v::yes()->validate('Yeah'); // true v::yes()->validate('Yep'); // true v::yes()->validate('Yes'); // true ``` This rule is case insensitive. If `$locale` is TRUE, uses the value of [nl_langinfo()](http://php.net/nl_langinfo) with `YESEXPR` constant. *** See also: * [No](No.md) Validation-1.1.29/docs/rules/Zend.md000066400000000000000000000004651336766562500172320ustar00rootroot00000000000000# Zend - `v::zend(mixed $validator)` Use Zend validators inside Respect\Validation flow. Messages are preserved. ```php v::zend('Hostname')->validate('google.com'); ``` You must add `"zendframework/zend-validator": "~2.3"` to your `require` property on composer.json file. *** See also: * [Sf](Sf.md) Validation-1.1.29/library/000077500000000000000000000000001336766562500153655ustar00rootroot00000000000000Validation-1.1.29/library/Exceptions/000077500000000000000000000000001336766562500175065ustar00rootroot00000000000000Validation-1.1.29/library/Exceptions/AgeException.php000066400000000000000000000024531336766562500225760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AgeException extends NestedValidationException { const BOTH = 0; const LOWER = 1; const GREATER = 2; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::BOTH => '{{name}} must be between {{minAge}} and {{maxAge}} years ago', self::LOWER => '{{name}} must be lower than {{minAge}} years ago', self::GREATER => '{{name}} must be greater than {{maxAge}} years ago', ], self::MODE_NEGATIVE => [ self::BOTH => '{{name}} must not be between {{minAge}} and {{maxAge}} years ago', self::LOWER => '{{name}} must not be lower than {{minAge}} years ago', self::GREATER => '{{name}} must not be greater than {{maxAge}} years ago', ], ]; public function chooseTemplate() { if (!$this->getParam('minAge')) { return static::GREATER; } if (!$this->getParam('maxAge')) { return static::LOWER; } return static::BOTH; } } Validation-1.1.29/library/Exceptions/AllOfException.php000066400000000000000000000014041336766562500230720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AllOfException extends GroupedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NONE => 'All of the required rules must pass for {{name}}', self::SOME => 'These rules must pass for {{name}}', ], self::MODE_NEGATIVE => [ self::NONE => 'None of these rules must pass for {{name}}', self::SOME => 'These rules must not pass for {{name}}', ], ]; } Validation-1.1.29/library/Exceptions/AlnumException.php000066400000000000000000000015521336766562500231550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AlnumException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only letters (a-z) and digits (0-9)', self::EXTRA => '{{name}} must contain only letters (a-z), digits (0-9) and {{additionalChars}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain letters (a-z) or digits (0-9)', self::EXTRA => '{{name}} must not contain letters (a-z), digits (0-9) or {{additionalChars}}', ], ]; } Validation-1.1.29/library/Exceptions/AlphaException.php000066400000000000000000000017241336766562500231270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AlphaException extends ValidationException { const EXTRA = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only letters (a-z)', self::EXTRA => '{{name}} must contain only letters (a-z) and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain letters (a-z)', self::EXTRA => '{{name}} must not contain letters (a-z) or "{{additionalChars}}"', ], ]; public function chooseTemplate() { return $this->getParam('additionalChars') ? static::EXTRA : static::STANDARD; } } Validation-1.1.29/library/Exceptions/AlwaysInvalidException.php000066400000000000000000000013361336766562500246500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AlwaysInvalidException extends ValidationException { const SIMPLE = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is always invalid', self::SIMPLE => '{{name}} is not valid', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is always valid', self::SIMPLE => '{{name}} is valid', ], ]; } Validation-1.1.29/library/Exceptions/AlwaysValidException.php000066400000000000000000000011371336766562500243200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AlwaysValidException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is always valid', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is always invalid', ], ]; } Validation-1.1.29/library/Exceptions/ArrayTypeException.php000066400000000000000000000011631336766562500240170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ArrayTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be of the type array', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be of the type array', ], ]; } Validation-1.1.29/library/Exceptions/ArrayValException.php000066400000000000000000000011401336766562500236130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ArrayValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an array', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an array', ], ]; } Validation-1.1.29/library/Exceptions/AtLeastException.php000066400000000000000000000017161336766562500234400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AtLeastException extends GroupedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NONE => 'At least {{howMany}} of the {{failed}} required rules must pass for {{name}}', self::SOME => 'At least {{howMany}} of the {{failed}} required rules must pass for {{name}}, only {{passed}} passed.', ], self::MODE_NEGATIVE => [ self::NONE => 'At least {{howMany}} of the {{failed}} required rules must not pass for {{name}}', self::SOME => 'At least {{howMany}} of the {{failed}} required rules must not pass for {{name}}, only {{passed}} passed.', ], ]; } Validation-1.1.29/library/Exceptions/AttributeException.php000066400000000000000000000017011336766562500240400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class AttributeException extends NestedValidationException { const NOT_PRESENT = 0; const INVALID = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NOT_PRESENT => 'Attribute {{name}} must be present', self::INVALID => 'Attribute {{name}} must be valid', ], self::MODE_NEGATIVE => [ self::NOT_PRESENT => 'Attribute {{name}} must not be present', self::INVALID => 'Attribute {{name}} must not validate', ], ]; public function chooseTemplate() { return $this->getParam('hasReference') ? static::INVALID : static::NOT_PRESENT; } } Validation-1.1.29/library/Exceptions/BankAccountException.php000066400000000000000000000011571336766562500242720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BankAccountException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a bank account', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a bank account', ], ]; } Validation-1.1.29/library/Exceptions/BankException.php000066400000000000000000000011301336766562500227440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BankException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a bank', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a bank', ], ]; } Validation-1.1.29/library/Exceptions/BaseException.php000066400000000000000000000005341336766562500227520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BaseException extends ValidationException { } Validation-1.1.29/library/Exceptions/BetweenException.php000066400000000000000000000024301336766562500234660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BetweenException extends NestedValidationException { const BOTH = 0; const LOWER = 1; const GREATER = 2; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::BOTH => '{{name}} must be between {{minValue}} and {{maxValue}}', self::LOWER => '{{name}} must be greater than {{minValue}}', self::GREATER => '{{name}} must be lower than {{maxValue}}', ], self::MODE_NEGATIVE => [ self::BOTH => '{{name}} must not be between {{minValue}} and {{maxValue}}', self::LOWER => '{{name}} must not be greater than {{minValue}}', self::GREATER => '{{name}} must not be lower than {{maxValue}}', ], ]; public function chooseTemplate() { if (!$this->getParam('minValue')) { return static::GREATER; } elseif (!$this->getParam('maxValue')) { return static::LOWER; } else { return static::BOTH; } } } Validation-1.1.29/library/Exceptions/BicException.php000066400000000000000000000011251336766562500225720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BicException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a BIC', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a BIC', ], ]; } Validation-1.1.29/library/Exceptions/BoolTypeException.php000066400000000000000000000011421336766562500236310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BoolTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a boolean', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a boolean', ], ]; } Validation-1.1.29/library/Exceptions/BoolValException.php000066400000000000000000000011541336766562500234350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class BoolValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a boolean value', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a boolean value', ], ]; } Validation-1.1.29/library/Exceptions/BsnException.php000066400000000000000000000012611336766562500226200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Ronald Drenth */ class BsnException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a BSN', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a BSN', ], ]; } Validation-1.1.29/library/Exceptions/CallException.php000066400000000000000000000005431336766562500227530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CallException extends GroupedValidationException { } Validation-1.1.29/library/Exceptions/CallableTypeException.php000066400000000000000000000013061336766562500244370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Henrique Moody */ class CallableTypeException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a callable', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a callable', ], ]; } Validation-1.1.29/library/Exceptions/CallbackException.php000066400000000000000000000011401336766562500235660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CallbackException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be valid', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be valid', ], ]; } Validation-1.1.29/library/Exceptions/CharsetException.php000066400000000000000000000012031336766562500234630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CharsetException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be in the {{charset}} charset', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be in the {{charset}} charset', ], ]; } Validation-1.1.29/library/Exceptions/CnhException.php000066400000000000000000000011571336766562500226120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CnhException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid CNH number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid CNH number', ], ]; } Validation-1.1.29/library/Exceptions/CnpjException.php000066400000000000000000000011621336766562500227700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CnpjException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid CNPJ number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid CNPJ number', ], ]; } Validation-1.1.29/library/Exceptions/CntrlException.php000066400000000000000000000015051336766562500231610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CntrlException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only control characters', self::EXTRA => '{{name}} must contain only control characters and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain control characters', self::EXTRA => '{{name}} must not contain control characters or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/ComponentException.php000066400000000000000000000006051336766562500240410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use Exception; class ComponentException extends Exception implements ExceptionInterface { } Validation-1.1.29/library/Exceptions/ConsonantException.php000066400000000000000000000014511336766562500240410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ConsonantException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only consonants', self::EXTRA => '{{name}} must contain only consonants and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain consonants', self::EXTRA => '{{name}} must not contain consonants or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/ContainsException.php000066400000000000000000000012241336766562500236530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ContainsException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain the value "{{containsValue}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain the value "{{containsValue}}"', ], ]; } Validation-1.1.29/library/Exceptions/CountableException.php000066400000000000000000000011431336766562500240110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CountableException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be countable', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be countable', ], ]; } Validation-1.1.29/library/Exceptions/CountryCodeException.php000066400000000000000000000011611336766562500243330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CountryCodeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid country', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid country', ], ]; } Validation-1.1.29/library/Exceptions/CpfException.php000066400000000000000000000011571336766562500226120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CpfException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid CPF number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid CPF number', ], ]; } Validation-1.1.29/library/Exceptions/CreditCardException.php000066400000000000000000000017711336766562500241100ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CreditCardException extends ValidationException { const BRANDED = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid Credit Card number', self::BRANDED => '{{name}} must be a valid {{brand}} Credit Card number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid Credit Card number', self::BRANDED => '{{name}} must not be a valid {{brand}} Credit Card number', ], ]; public function chooseTemplate() { if (!$this->getParam('brand')) { return static::STANDARD; } return static::BRANDED; } } Validation-1.1.29/library/Exceptions/CurrencyCodeException.php000066400000000000000000000011641336766562500244650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class CurrencyCodeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid currency', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid currency', ], ]; } Validation-1.1.29/library/Exceptions/DateException.php000066400000000000000000000022371336766562500227570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class DateException extends ValidationException { const FORMAT = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid date', self::FORMAT => '{{name}} must be a valid date. Sample format: {{format}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid date', self::FORMAT => '{{name}} must not be a valid date in the format {{format}}', ], ]; public function configure($name, array $params = []) { $params['format'] = date( $params['format'], strtotime('2005-12-30 01:02:03') ); return parent::configure($name, $params); } public function chooseTemplate() { return $this->getParam('format') ? static::FORMAT : static::STANDARD; } } Validation-1.1.29/library/Exceptions/DigitException.php000066400000000000000000000014551336766562500231430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class DigitException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only digits (0-9)', self::EXTRA => '{{name}} must contain only digits (0-9) and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain digits (0-9)', self::EXTRA => '{{name}} must not contain digits (0-9) or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/DirectoryException.php000066400000000000000000000011471336766562500240450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class DirectoryException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a directory', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a directory', ], ]; } Validation-1.1.29/library/Exceptions/DomainException.php000066400000000000000000000011601336766562500233030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class DomainException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid domain', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid domain', ], ]; } Validation-1.1.29/library/Exceptions/EachException.php000066400000000000000000000011661336766562500227420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class EachException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'Each item in {{name}} must be valid', ], self::MODE_NEGATIVE => [ self::STANDARD => 'Each item in {{name}} must not validate', ], ]; } Validation-1.1.29/library/Exceptions/EmailException.php000066400000000000000000000011401336766562500231210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class EmailException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be valid email', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an email', ], ]; } Validation-1.1.29/library/Exceptions/EndsWithException.php000066400000000000000000000011701336766562500236220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class EndsWithException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must end with ({{endValue}})', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not end with ({{endValue}})', ], ]; } Validation-1.1.29/library/Exceptions/EqualsException.php000066400000000000000000000011661336766562500233340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class EqualsException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be equals {{compareTo}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be equals {{compareTo}}', ], ]; } Validation-1.1.29/library/Exceptions/EvenException.php000066400000000000000000000011501336766562500227700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class EvenException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an even number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an even number', ], ]; } Validation-1.1.29/library/Exceptions/ExceptionInterface.php000066400000000000000000000005111336766562500237730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; interface ExceptionInterface { } Validation-1.1.29/library/Exceptions/ExecutableException.php000066400000000000000000000011661336766562500241630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ExecutableException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an executable file', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an executable file', ], ]; } Validation-1.1.29/library/Exceptions/ExistsException.php000066400000000000000000000011241336766562500233530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ExistsException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must exists', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not exists', ], ]; } Validation-1.1.29/library/Exceptions/ExtensionException.php000066400000000000000000000014131336766562500240510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * Exception class for Extension rule. * * @author Henrique Moody */ class ExtensionException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must have {{extension}} extension', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not have {{extension}} extension', ], ]; } Validation-1.1.29/library/Exceptions/FactorException.php000066400000000000000000000012731336766562500233170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author David Meister */ class FactorException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a factor of {{dividend}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a factor of {{dividend}}', ], ]; } Validation-1.1.29/library/Exceptions/FalseValException.php000066400000000000000000000011601336766562500235710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FalseValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is not considered as "False"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is considered as "False"', ], ]; } Validation-1.1.29/library/Exceptions/FibonacciException.php000066400000000000000000000012011336766562500237450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FibonacciException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid Fibonacci number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid Fibonacci number', ], ]; } Validation-1.1.29/library/Exceptions/FileException.php000066400000000000000000000011301336766562500227500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FileException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a file', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a file', ], ]; } Validation-1.1.29/library/Exceptions/FilterVarException.php000066400000000000000000000011331336766562500237720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FilterVarException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be valid', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be valid', ], ]; } Validation-1.1.29/library/Exceptions/FiniteException.php000066400000000000000000000013121336766562500233110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Henrique Moody */ class FiniteException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a finite number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a finite number', ], ]; } Validation-1.1.29/library/Exceptions/FloatTypeException.php000066400000000000000000000011631336766562500240060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FloatTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be of the type float', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be of the type float', ], ]; } Validation-1.1.29/library/Exceptions/FloatValException.php000066400000000000000000000011541336766562500236070ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class FloatValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a float number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a float number', ], ]; } Validation-1.1.29/library/Exceptions/GraphException.php000066400000000000000000000015151336766562500231410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class GraphException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only graphical characters', self::EXTRA => '{{name}} must contain only graphical characters and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain graphical characters', self::EXTRA => '{{name}} must not contain graphical characters or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/GroupedValidationException.php000066400000000000000000000020241336766562500255140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class GroupedValidationException extends NestedValidationException { const NONE = 0; const SOME = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NONE => 'All of the required rules must pass for {{name}}', self::SOME => 'These rules must pass for {{name}}', ], self::MODE_NEGATIVE => [ self::NONE => 'None of there rules must pass for {{name}}', self::SOME => 'These rules must not pass for {{name}}', ], ]; public function chooseTemplate() { $numRules = $this->getParam('passed'); $numFailed = $this->getRelated()->count(); return $numRules === $numFailed ? static::NONE : static::SOME; } } Validation-1.1.29/library/Exceptions/HexRgbColorException.php000066400000000000000000000011611336766562500242530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class HexRgbColorException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a hex RGB color', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a hex RGB color', ], ]; } Validation-1.1.29/library/Exceptions/IdenticalException.php000066400000000000000000000012051336766562500237700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IdenticalException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be identical as {{compareTo}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be identical as {{compareTo}}', ], ]; } Validation-1.1.29/library/Exceptions/IdentityCardException.php000066400000000000000000000013261336766562500244630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IdentityCardException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid Identity Card number for {{countryCode}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid Identity Card number for {{countryCode}}', ], ]; } Validation-1.1.29/library/Exceptions/ImageException.php000066400000000000000000000011471336766562500231230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ImageException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid image', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid image', ], ]; } Validation-1.1.29/library/Exceptions/ImeiException.php000066400000000000000000000011441336766562500227610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ImeiException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid IMEI', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid IMEI', ], ]; } Validation-1.1.29/library/Exceptions/InException.php000066400000000000000000000011501336766562500224410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class InException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be in {{haystack}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be in {{haystack}}', ], ]; } Validation-1.1.29/library/Exceptions/InfiniteException.php000066400000000000000000000013221336766562500236410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Henrique Moody */ class InfiniteException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an infinite number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an infinite number', ], ]; } Validation-1.1.29/library/Exceptions/InstanceException.php000066400000000000000000000012161336766562500236420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class InstanceException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an instance of {{instanceName}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an instance of {{instanceName}}', ], ]; } Validation-1.1.29/library/Exceptions/IntTypeException.php000066400000000000000000000011651336766562500234750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IntTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be of the type integer', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be of the type integer', ], ]; } Validation-1.1.29/library/Exceptions/IntValException.php000066400000000000000000000011601336766562500232710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IntValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an integer number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an integer number', ], ]; } Validation-1.1.29/library/Exceptions/IpException.php000066400000000000000000000031001336766562500224400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IpException extends ValidationException { const STANDARD = 0; const NETWORK_RANGE = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an IP address', self::NETWORK_RANGE => '{{name}} must be an IP address in the {{range}} range', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an IP address', self::NETWORK_RANGE => '{{name}} must not be an IP address in the {{range}} range', ], ]; public function configure($name, array $params = []) { $params += ['networkRange' => null, 'min' => null]; if ($params['networkRange']) { $range = $params['networkRange']; $message = $range['min']; if (isset($range['max'])) { $message .= '-'.$range['max']; } else { $message .= '/'.long2ip((int) $range['mask']); } $params['range'] = $message; } return parent::configure($name, $params); } public function chooseTemplate() { if (!$this->getParam('networkRange')) { return static::STANDARD; } else { return static::NETWORK_RANGE; } } } Validation-1.1.29/library/Exceptions/IterableException.php000066400000000000000000000005411336766562500236250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IterableException extends IterableTypeException {} Validation-1.1.29/library/Exceptions/IterableTypeException.php000066400000000000000000000011441336766562500244670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class IterableTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be iterable', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be iterable', ], ]; } Validation-1.1.29/library/Exceptions/JsonException.php000066400000000000000000000011621336766562500230070ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class JsonException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid JSON string', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid JSON string', ], ]; } Validation-1.1.29/library/Exceptions/KeyException.php000066400000000000000000000013401336766562500226240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class KeyException extends AttributeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NOT_PRESENT => 'Key {{name}} must be present', self::INVALID => 'Key {{name}} must be valid', ], self::MODE_NEGATIVE => [ self::NOT_PRESENT => 'Key {{name}} must not be present', self::INVALID => 'Key {{name}} must not be valid', ], ]; } Validation-1.1.29/library/Exceptions/KeyNestedException.php000066400000000000000000000014171336766562500237740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class KeyNestedException extends AttributeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NOT_PRESENT => 'No items were found for key chain {{name}}', self::INVALID => 'Key chain {{name}} is not valid', ], self::MODE_NEGATIVE => [ self::NOT_PRESENT => 'Items for key chain {{name}} must not be present', self::INVALID => 'Key chain {{name}} must not be valid', ], ]; } Validation-1.1.29/library/Exceptions/KeySetException.php000066400000000000000000000022211336766562500232770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class KeySetException extends GroupedValidationException { const STRUCTURE = 2; /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::NONE => 'All of the required rules must pass for {{name}}', self::SOME => 'These rules must pass for {{name}}', self::STRUCTURE => 'Must have keys {{keys}}', ], self::MODE_NEGATIVE => [ self::NONE => 'None of these rules must pass for {{name}}', self::SOME => 'These rules must not pass for {{name}}', self::STRUCTURE => 'Must not have keys {{keys}}', ], ]; /** * {@inheritdoc} */ public function chooseTemplate() { if ($this->getParam('keys')) { return static::STRUCTURE; } return parent::chooseTemplate(); } } Validation-1.1.29/library/Exceptions/KeyValueException.php000066400000000000000000000016721336766562500236310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class KeyValueException extends ValidationException { const COMPONENT = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'Key {{name}} must be present', self::COMPONENT => '{{baseKey}} must be valid to validate {{comparedKey}}', ], self::MODE_NEGATIVE => [ self::STANDARD => 'Key {{name}} must not be present', self::COMPONENT => '{{baseKey}} must not be valid to validate {{comparedKey}}', ], ]; public function chooseTemplate() { return $this->getParam('component') ? static::COMPONENT : static::STANDARD; } } Validation-1.1.29/library/Exceptions/LanguageCodeException.php000066400000000000000000000011631336766562500244150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class LanguageCodeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid language', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid language', ] ]; } Validation-1.1.29/library/Exceptions/LeapDateException.php000066400000000000000000000005401336766562500235540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class LeapDateException extends ValidationException { } Validation-1.1.29/library/Exceptions/LeapYearException.php000066400000000000000000000005401336766562500235770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class LeapYearException extends ValidationException { } Validation-1.1.29/library/Exceptions/LengthException.php000066400000000000000000000025211336766562500233170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class LengthException extends ValidationException { const BOTH = 0; const LOWER = 1; const GREATER = 2; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::BOTH => '{{name}} must have a length between {{minValue}} and {{maxValue}}', self::LOWER => '{{name}} must have a length greater than {{minValue}}', self::GREATER => '{{name}} must have a length lower than {{maxValue}}', ], self::MODE_NEGATIVE => [ self::BOTH => '{{name}} must not have a length between {{minValue}} and {{maxValue}}', self::LOWER => '{{name}} must not have a length greater than {{minValue}}', self::GREATER => '{{name}} must not have a length lower than {{maxValue}}', ], ]; public function chooseTemplate() { if (!$this->getParam('minValue')) { return static::GREATER; } elseif (!$this->getParam('maxValue')) { return static::LOWER; } else { return static::BOTH; } } } Validation-1.1.29/library/Exceptions/Locale/000077500000000000000000000000001336766562500207055ustar00rootroot00000000000000Validation-1.1.29/library/Exceptions/Locale/GermanBankAccountException.php000066400000000000000000000013041336766562500266150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\Locale; use Respect\Validation\Exceptions\BankAccountException; class GermanBankAccountException extends BankAccountException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a german bank account', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a german bank account', ], ]; } Validation-1.1.29/library/Exceptions/Locale/GermanBankException.php000066400000000000000000000012371336766562500253050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\Locale; use Respect\Validation\Exceptions\BankException; class GermanBankException extends BankException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a german bank', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a german bank', ], ]; } Validation-1.1.29/library/Exceptions/Locale/GermanBicException.php000066400000000000000000000012321336766562500251220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\Locale; use Respect\Validation\Exceptions\BicException; class GermanBicException extends BicException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a german BIC', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a german BIC', ], ]; } Validation-1.1.29/library/Exceptions/Locale/PlIdentityCardException.php000066400000000000000000000013751336766562500261620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\Locale; use Respect\Validation\Exceptions\ValidationException; class PlIdentityCardException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid Polish Identity Card number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid Polish Identity Card number', ], ]; } Validation-1.1.29/library/Exceptions/LowercaseException.php000066400000000000000000000011431336766562500240210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class LowercaseException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be lowercase', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be lowercase', ], ]; } Validation-1.1.29/library/Exceptions/MacAddressException.php000066400000000000000000000011701336766562500241030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MacAddressException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid mac address', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid mac address', ], ]; } Validation-1.1.29/library/Exceptions/MaxException.php000066400000000000000000000017071336766562500226300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MaxException extends ValidationException { const INCLUSIVE = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be less than {{interval}}', self::INCLUSIVE => '{{name}} must be less than or equal to {{interval}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be less than {{interval}}', self::INCLUSIVE => '{{name}} must not be less than or equal to {{interval}}', ], ]; public function chooseTemplate() { return $this->getParam('inclusive') ? static::INCLUSIVE : static::STANDARD; } } Validation-1.1.29/library/Exceptions/MimetypeException.php000066400000000000000000000014051336766562500236670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * Exception class for Mimetype rule. * * @author Henrique Moody */ class MimetypeException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must have {{mimetype}} mimetype', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not have {{mimetype}} mimetype', ], ]; } Validation-1.1.29/library/Exceptions/MinException.php000066400000000000000000000017231336766562500226240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MinException extends ValidationException { const INCLUSIVE = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be greater than {{interval}}', self::INCLUSIVE => '{{name}} must be greater than or equal to {{interval}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be greater than {{interval}}', self::INCLUSIVE => '{{name}} must not be greater than or equal to {{interval}}', ], ]; public function chooseTemplate() { return $this->getParam('inclusive') ? static::INCLUSIVE : static::STANDARD; } } Validation-1.1.29/library/Exceptions/MinimumAgeException.php000066400000000000000000000011741336766562500241310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MinimumAgeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'The age must be {{age}} years or more.', ], self::MODE_NEGATIVE => [ self::STANDARD => 'The age must not be {{age}} years or more.', ], ]; } Validation-1.1.29/library/Exceptions/MostOfException.php000066400000000000000000000005331336766562500233060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MostOfException extends AtLeastException { } Validation-1.1.29/library/Exceptions/MultipleException.php000066400000000000000000000012041336766562500236660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class MultipleException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be multiple of {{multipleOf}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be multiple of {{multipleOf}}', ], ]; } Validation-1.1.29/library/Exceptions/NegativeException.php000066400000000000000000000011401336766562500236340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NegativeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be negative', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be negative', ], ]; } Validation-1.1.29/library/Exceptions/NestedValidationException.php000066400000000000000000000165331336766562500253430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use IteratorAggregate; use RecursiveIteratorIterator; use SplObjectStorage; class NestedValidationException extends ValidationException implements IteratorAggregate { /** * @var SplObjectStorage */ private $exceptions = []; /** * @param ValidationException $exception * * @return self */ public function addRelated(ValidationException $exception) { $this->getRelated()->attach($exception); return $this; } /** * @param string $path * @param ValidationException $exception * * @return ValidationException */ private function getExceptionForPath($path, ValidationException $exception) { if ($path === $exception->guessId()) { return $exception; } if (!$exception instanceof self) { return $exception; } foreach ($exception as $subException) { return $subException; } return $exception; } /** * @param array $paths * * @return array */ public function findMessages(array $paths) { $messages = []; foreach ($paths as $key => $value) { $numericKey = is_numeric($key); $path = $numericKey ? $value : $key; if (!($exception = $this->getRelatedByName($path))) { $exception = $this->findRelated($path); } $path = str_replace('.', '_', $path); if (!$exception) { $messages[$path] = ''; continue; } $exception = $this->getExceptionForPath($path, $exception); if (!$numericKey) { $exception->setTemplate($value); } $messages[$path] = $exception->getMainMessage(); } return $messages; } /** * @return Exception */ public function findRelated($path) { $target = $this; $pieces = explode('.', $path); while (!empty($pieces) && $target) { $piece = array_shift($pieces); $target = $target->getRelatedByName($piece); } return $target; } /** * @return RecursiveIteratorIterator */ private function getRecursiveIterator() { $exceptionIterator = new RecursiveExceptionIterator($this); $recursiveIteratorIterator = new RecursiveIteratorIterator( $exceptionIterator, RecursiveIteratorIterator::SELF_FIRST ); return $recursiveIteratorIterator; } private function isSkippable(ValidationException $exception) { if (!$exception instanceof self) { return false; } if (1 !== $exception->getRelated()->count()) { return false; } if (!$exception->hasCustomTemplate()) { return true; } return $this->hasChildTemplate($exception); } private function hasChildTemplate(self $exception) { $exception->getRelated()->rewind(); $childException = $exception->getRelated()->current(); return $childException->getMessage() === $exception->getMessage(); } /** * @return SplObjectStorage */ public function getIterator() { $childrenExceptions = new SplObjectStorage(); $recursiveIteratorIterator = $this->getRecursiveIterator(); $exceptionIterator = $recursiveIteratorIterator->getInnerIterator(); $lastDepth = 0; $lastDepthOriginal = 0; $knownDepths = []; foreach ($recursiveIteratorIterator as $childException) { if ($this->isSkippable($childException)) { continue; } $currentDepth = $lastDepth; $currentDepthOriginal = $recursiveIteratorIterator->getDepth() + 1; if (isset($knownDepths[$currentDepthOriginal])) { $currentDepth = $knownDepths[$currentDepthOriginal]; } elseif ($currentDepthOriginal > $lastDepthOriginal) { ++$currentDepth; } if (!isset($knownDepths[$currentDepthOriginal])) { $knownDepths[$currentDepthOriginal] = $currentDepth; } $lastDepth = $currentDepth; $lastDepthOriginal = $currentDepthOriginal; $childrenExceptions->attach( $childException, [ 'depth' => $currentDepth, 'depth_original' => $currentDepthOriginal, 'previous_depth' => $lastDepth, 'previous_depth_original' => $lastDepthOriginal, ] ); } return $childrenExceptions; } /** * @return array */ public function getMessages() { $messages = [$this->getMessage()]; foreach ($this as $exception) { $messages[] = $exception->getMessage(); } if (count($messages) > 1) { array_shift($messages); } return $messages; } /** * @return string */ public function getFullMessage() { $messages = []; $leveler = 1; if (!$this->isSkippable($this)) { $leveler = 0; $messages[] = sprintf('- %s', $this->getMessage()); } $exceptions = $this->getIterator(); foreach ($exceptions as $exception) { $messages[] = sprintf( '%s- %s', str_repeat(' ', ($exceptions[$exception]['depth'] - $leveler) * 2), $exception->getMessage() ); } return implode(PHP_EOL, $messages); } /** * @return SplObjectStorage */ public function getRelated() { if (!$this->exceptions instanceof SplObjectStorage) { $this->exceptions = new SplObjectStorage(); } return $this->exceptions; } /** * @param string $name * @param mixed $value * * @return self */ public function setParam($name, $value) { if ('translator' === $name) { foreach ($this->getRelated() as $exception) { $exception->setParam($name, $value); } } parent::setParam($name, $value); return $this; } /** * @return bool */ private function isRelated($name, ValidationException $exception) { return ($exception->getId() === $name || $exception->getName() === $name); } /** * @return ValidationException */ public function getRelatedByName($name) { if ($this->isRelated($name, $this)) { return $this; } foreach ($this->getRecursiveIterator() as $exception) { if ($this->isRelated($name, $exception)) { return $exception; } } } /** * @param array $exceptions * * @return self */ public function setRelated(array $exceptions) { foreach ($exceptions as $exception) { $this->addRelated($exception); } return $this; } } Validation-1.1.29/library/Exceptions/NfeAccessKeyException.php000066400000000000000000000012001336766562500243720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NfeAccessKeyException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid NFe access key', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid NFe access key', ], ]; } Validation-1.1.29/library/Exceptions/NoException.php000066400000000000000000000011441336766562500224520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NoException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is not considered as "No"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is considered as "No"', ], ]; } Validation-1.1.29/library/Exceptions/NoWhitespaceException.php000066400000000000000000000011721336766562500244700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NoWhitespaceException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must not contain whitespace', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not not contain whitespace', ], ]; } Validation-1.1.29/library/Exceptions/NoneOfException.php000066400000000000000000000012011336766562500232540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NoneOfException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'None of these rules must pass for {{name}}', ], self::MODE_NEGATIVE => [ self::STANDARD => 'All of these rules must pass for {{name}}', ], ]; } Validation-1.1.29/library/Exceptions/NotBlankException.php000066400000000000000000000015641336766562500236140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NotBlankException extends ValidationException { const STANDARD = 0; const NAMED = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'The value must not be blank', self::NAMED => '{{name}} must not be blank', ], self::MODE_NEGATIVE => [ self::STANDARD => 'The value must be blank', self::NAMED => '{{name}} must be blank', ], ]; public function chooseTemplate() { return $this->getName() == '' ? static::STANDARD : static::NAMED; } } Validation-1.1.29/library/Exceptions/NotEmptyException.php000066400000000000000000000015631336766562500236620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NotEmptyException extends ValidationException { const STANDARD = 0; const NAMED = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'The value must not be empty', self::NAMED => '{{name}} must not be empty', ], self::MODE_NEGATIVE => [ self::STANDARD => 'The value must be empty', self::NAMED => '{{name}} must be empty', ], ]; public function chooseTemplate() { return $this->getName() == '' ? static::STANDARD : static::NAMED; } } Validation-1.1.29/library/Exceptions/NotException.php000066400000000000000000000005421336766562500226370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NotException extends GroupedValidationException { } Validation-1.1.29/library/Exceptions/NotOptionalException.php000066400000000000000000000016031336766562500243440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NotOptionalException extends ValidationException { const STANDARD = 0; const NAMED = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'The value must not be optional', self::NAMED => '{{name}} must not be optional', ], self::MODE_NEGATIVE => [ self::STANDARD => 'The value must be optional', self::NAMED => '{{name}} must be optional', ], ]; public function chooseTemplate() { return $this->getName() == '' ? static::STANDARD : static::NAMED; } } Validation-1.1.29/library/Exceptions/NullTypeException.php000066400000000000000000000011301336766562500236450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NullTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be null', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be null', ], ]; } Validation-1.1.29/library/Exceptions/NumericException.php000066400000000000000000000011351336766562500235000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class NumericException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be numeric', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be numeric', ], ]; } Validation-1.1.29/library/Exceptions/ObjectTypeException.php000066400000000000000000000011441336766562500241460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ObjectTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an object', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an object', ], ]; } Validation-1.1.29/library/Exceptions/OddException.php000066400000000000000000000011451336766562500226050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class OddException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an odd number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an odd number', ], ]; } Validation-1.1.29/library/Exceptions/OneOfException.php000066400000000000000000000012251336766562500231040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class OneOfException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'At least one of these rules must pass for {{name}}', ], self::MODE_NEGATIVE => [ self::STANDARD => 'At least one of these rules must not pass for {{name}}', ], ]; } Validation-1.1.29/library/Exceptions/OptionalException.php000066400000000000000000000016001336766562500236600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class OptionalException extends ValidationException { const STANDARD = 0; const NAMED = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'The value must be optional', self::NAMED => '{{name}} must be optional', ], self::MODE_NEGATIVE => [ self::STANDARD => 'The value must not be optional', self::NAMED => '{{name}} must not be optional', ], ]; public function chooseTemplate() { return $this->getName() == '' ? static::STANDARD : static::NAMED; } } Validation-1.1.29/library/Exceptions/PerfectSquareException.php000066400000000000000000000012011336766562500246410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PerfectSquareException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid perfect square', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid perfect square', ], ]; } Validation-1.1.29/library/Exceptions/PeselException.php000066400000000000000000000012111336766562500231410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PeselException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid PESEL', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid PESEL', ], ]; } Validation-1.1.29/library/Exceptions/PhoneException.php000066400000000000000000000011751336766562500231530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PhoneException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid telephone number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid telephone number', ], ]; } Validation-1.1.29/library/Exceptions/PhpLabelException.php000066400000000000000000000011621336766562500235650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PhpLabelException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid PHP label', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid PHP label', ], ]; } Validation-1.1.29/library/Exceptions/PositiveException.php000066400000000000000000000011401336766562500236740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PositiveException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be positive', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be positive', ], ]; } Validation-1.1.29/library/Exceptions/PostalCodeException.php000066400000000000000000000012361336766562500241350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PostalCodeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid postal code on {{countryCode}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid postal code on {{countryCode}}', ], ]; } Validation-1.1.29/library/Exceptions/PrimeNumberException.php000066400000000000000000000011731336766562500243250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PrimeNumberException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid prime number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid prime number', ], ]; } Validation-1.1.29/library/Exceptions/PrntException.php000066400000000000000000000015141336766562500230220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PrntException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only printable characters', self::EXTRA => '{{name}} must contain only printable characters and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain printable characters', self::EXTRA => '{{name}} must not contain printable characters or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/PunctException.php000066400000000000000000000015251336766562500231720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class PunctException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only punctuation characters', self::EXTRA => '{{name}} must contain only punctuation characters and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain punctuation characters', self::EXTRA => '{{name}} must not contain punctuation characters or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/ReadableException.php000066400000000000000000000011401336766562500235710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ReadableException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be readable', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be readable', ], ]; } Validation-1.1.29/library/Exceptions/RecursiveExceptionIterator.php000066400000000000000000000024711336766562500255630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use Countable; use RecursiveIterator; class RecursiveExceptionIterator implements RecursiveIterator, Countable { private $exceptions; public function __construct(NestedValidationException $parent) { $this->exceptions = $parent->getRelated(); } public function count() { return $this->exceptions->count(); } public function hasChildren() { if (!$this->valid()) { return false; } return ($this->current() instanceof NestedValidationException); } public function getChildren() { return new static($this->current()); } public function current() { return $this->exceptions->current(); } public function key() { return $this->exceptions->key(); } public function next() { $this->exceptions->next(); } public function rewind() { $this->exceptions->rewind(); } public function valid() { return $this->exceptions->valid(); } } Validation-1.1.29/library/Exceptions/RegexException.php000066400000000000000000000011731336766562500231520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class RegexException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must validate against {{regex}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not validate against {{regex}}', ], ]; } Validation-1.1.29/library/Exceptions/ResourceTypeException.php000066400000000000000000000013061336766562500245270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Henrique Moody */ class ResourceTypeException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a resource', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a resource', ], ]; } Validation-1.1.29/library/Exceptions/RomanException.php000066400000000000000000000011651336766562500231550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class RomanException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid roman number', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid roman number', ], ]; } Validation-1.1.29/library/Exceptions/ScalarValException.php000066400000000000000000000013131336766562500237440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * @author Henrique Moody */ class ScalarValException extends ValidationException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a scalar value', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a scalar value', ], ]; } Validation-1.1.29/library/Exceptions/SfException.php000066400000000000000000000010641336766562500224470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class SfException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}}', ], ]; } Validation-1.1.29/library/Exceptions/SizeException.php000066400000000000000000000020621336766562500230100ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * Exception class for Size rule. * * @author Henrique Moody */ class SizeException extends BetweenException { /** * @var array */ public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::BOTH => '{{name}} must be between {{minSize}} and {{maxSize}}', self::LOWER => '{{name}} must be greater than {{minSize}}', self::GREATER => '{{name}} must be lower than {{maxSize}}', ], self::MODE_NEGATIVE => [ self::BOTH => '{{name}} must not be between {{minSize}} and {{maxSize}}', self::LOWER => '{{name}} must not be greater than {{minSize}}', self::GREATER => '{{name}} must not be lower than {{maxSize}}', ], ]; } Validation-1.1.29/library/Exceptions/SlugException.php000066400000000000000000000011441336766562500230100ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class SlugException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid slug', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid slug', ], ]; } Validation-1.1.29/library/Exceptions/SpaceException.php000066400000000000000000000014751336766562500231400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class SpaceException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only space characters', self::EXTRA => '{{name}} must contain only space characters and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain space characters', self::EXTRA => '{{name}} must not contain space characters or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/StartsWithException.php000066400000000000000000000012021336766562500242050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class StartsWithException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must start with ({{startValue}})', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not start with ({{startValue}})', ], ]; } Validation-1.1.29/library/Exceptions/StringTypeException.php000066400000000000000000000011401336766562500242020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class StringTypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a string', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be string', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/000077500000000000000000000000001336766562500225775ustar00rootroot00000000000000Validation-1.1.29/library/Exceptions/SubdivisionCode/AdSubdivisionCodeException.php000066400000000000000000000014731336766562500305320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Andorra subdivision code. * * ISO 3166-1 alpha-2: AD */ class AdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Andorra', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Andorra', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AeSubdivisionCodeException.php000066400000000000000000000015421336766562500305300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for United Arab Emirates subdivision code. * * ISO 3166-1 alpha-2: AE */ class AeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of United Arab Emirates', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of United Arab Emirates', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AfSubdivisionCodeException.php000066400000000000000000000015071336766562500305320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Afghanistan subdivision code. * * ISO 3166-1 alpha-2: AF */ class AfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Afghanistan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Afghanistan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AgSubdivisionCodeException.php000066400000000000000000000015371336766562500305360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Antigua and Barbuda subdivision code. * * ISO 3166-1 alpha-2: AG */ class AgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Antigua and Barbuda', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Antigua and Barbuda', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AiSubdivisionCodeException.php000066400000000000000000000014761336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Anguilla subdivision code. * * ISO 3166-1 alpha-2: AI */ class AiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Anguilla', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Anguilla', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AlSubdivisionCodeException.php000066400000000000000000000014731336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Albania subdivision code. * * ISO 3166-1 alpha-2: AL */ class AlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Albania', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Albania', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AmSubdivisionCodeException.php000066400000000000000000000014731336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Armenia subdivision code. * * ISO 3166-1 alpha-2: AM */ class AmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Armenia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Armenia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AnSubdivisionCodeException.php000066400000000000000000000015421336766562500305410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Netherlands Antilles subdivision code. * * ISO 3166-1 alpha-2: AN */ class AnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Netherlands Antilles', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Netherlands Antilles', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AoSubdivisionCodeException.php000066400000000000000000000014701336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Angola subdivision code. * * ISO 3166-1 alpha-2: AO */ class AoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Angola', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Angola', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AqSubdivisionCodeException.php000066400000000000000000000015041336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Antarctica subdivision code. * * ISO 3166-1 alpha-2: AQ */ class AqSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Antarctica', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Antarctica', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ArSubdivisionCodeException.php000066400000000000000000000015011336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Argentina subdivision code. * * ISO 3166-1 alpha-2: AR */ class ArSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Argentina', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Argentina', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AsSubdivisionCodeException.php000066400000000000000000000015201336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for American Samoa subdivision code. * * ISO 3166-1 alpha-2: AS */ class AsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of American Samoa', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of American Samoa', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AtSubdivisionCodeException.php000066400000000000000000000014731336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Austria subdivision code. * * ISO 3166-1 alpha-2: AT */ class AtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Austria', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Austria', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AuSubdivisionCodeException.php000066400000000000000000000015011336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Australia subdivision code. * * ISO 3166-1 alpha-2: AU */ class AuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Australia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Australia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AwSubdivisionCodeException.php000066400000000000000000000014651336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Aruba subdivision code. * * ISO 3166-1 alpha-2: AW */ class AwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Aruba', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Aruba', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AxSubdivisionCodeException.php000066400000000000000000000014701336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Åland subdivision code. * * ISO 3166-1 alpha-2: AX */ class AxSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Åland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Åland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/AzSubdivisionCodeException.php000066400000000000000000000015041336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Azerbaijan subdivision code. * * ISO 3166-1 alpha-2: AZ */ class AzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Azerbaijan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Azerbaijan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BaSubdivisionCodeException.php000066400000000000000000000015501336766562500305240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bosnia and Herzegovina subdivision code. * * ISO 3166-1 alpha-2: BA */ class BaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bosnia and Herzegovina', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bosnia and Herzegovina', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BbSubdivisionCodeException.php000066400000000000000000000014761336766562500305340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Barbados subdivision code. * * ISO 3166-1 alpha-2: BB */ class BbSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Barbados', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Barbados', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BdSubdivisionCodeException.php000066400000000000000000000015041336766562500305260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bangladesh subdivision code. * * ISO 3166-1 alpha-2: BD */ class BdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bangladesh', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bangladesh', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BeSubdivisionCodeException.php000066400000000000000000000014731336766562500305340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Belgium subdivision code. * * ISO 3166-1 alpha-2: BE */ class BeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Belgium', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Belgium', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BfSubdivisionCodeException.php000066400000000000000000000015121336766562500305270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Burkina Faso subdivision code. * * ISO 3166-1 alpha-2: BF */ class BfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Burkina Faso', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Burkina Faso', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BgSubdivisionCodeException.php000066400000000000000000000014761336766562500305410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bulgaria subdivision code. * * ISO 3166-1 alpha-2: BG */ class BgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bulgaria', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bulgaria', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BhSubdivisionCodeException.php000066400000000000000000000014731336766562500305370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bahrain subdivision code. * * ISO 3166-1 alpha-2: BH */ class BhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bahrain', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bahrain', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BiSubdivisionCodeException.php000066400000000000000000000014731336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Burundi subdivision code. * * ISO 3166-1 alpha-2: BI */ class BiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Burundi', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Burundi', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BjSubdivisionCodeException.php000066400000000000000000000014651336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Benin subdivision code. * * ISO 3166-1 alpha-2: BJ */ class BjSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Benin', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Benin', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BlSubdivisionCodeException.php000066400000000000000000000015311336766562500305360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Barthélemy subdivision code. * * ISO 3166-1 alpha-2: BL */ class BlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Barthélemy', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Barthélemy', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BmSubdivisionCodeException.php000066400000000000000000000014731336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bermuda subdivision code. * * ISO 3166-1 alpha-2: BM */ class BmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bermuda', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bermuda', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BnSubdivisionCodeException.php000066400000000000000000000014701336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Brunei subdivision code. * * ISO 3166-1 alpha-2: BN */ class BnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Brunei', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Brunei', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BoSubdivisionCodeException.php000066400000000000000000000014731336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bolivia subdivision code. * * ISO 3166-1 alpha-2: BO */ class BoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bolivia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bolivia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BqSubdivisionCodeException.php000066400000000000000000000014731336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bonaire subdivision code. * * ISO 3166-1 alpha-2: BQ */ class BqSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bonaire', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bonaire', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BrSubdivisionCodeException.php000066400000000000000000000014701336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Brazil subdivision code. * * ISO 3166-1 alpha-2: BR */ class BrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Brazil', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Brazil', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BsSubdivisionCodeException.php000066400000000000000000000014731336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bahamas subdivision code. * * ISO 3166-1 alpha-2: BS */ class BsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bahamas', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bahamas', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BtSubdivisionCodeException.php000066400000000000000000000014701336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bhutan subdivision code. * * ISO 3166-1 alpha-2: BT */ class BtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bhutan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bhutan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BvSubdivisionCodeException.php000066400000000000000000000015151336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Bouvet Island subdivision code. * * ISO 3166-1 alpha-2: BV */ class BvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Bouvet Island', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Bouvet Island', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BwSubdivisionCodeException.php000066400000000000000000000014761336766562500305610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Botswana subdivision code. * * ISO 3166-1 alpha-2: BW */ class BwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Botswana', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Botswana', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BySubdivisionCodeException.php000066400000000000000000000014731336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Belarus subdivision code. * * ISO 3166-1 alpha-2: BY */ class BySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Belarus', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Belarus', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/BzSubdivisionCodeException.php000066400000000000000000000014701336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Belize subdivision code. * * ISO 3166-1 alpha-2: BZ */ class BzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Belize', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Belize', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CaSubdivisionCodeException.php000066400000000000000000000014701336766562500305260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Canada subdivision code. * * ISO 3166-1 alpha-2: CA */ class CaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Canada', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Canada', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CcSubdivisionCodeException.php000066400000000000000000000015531336766562500305320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cocos [Keeling] Islands subdivision code. * * ISO 3166-1 alpha-2: CC */ class CcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cocos [Keeling] Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cocos [Keeling] Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CdSubdivisionCodeException.php000066400000000000000000000016061336766562500305320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Democratic Republic of the Congo subdivision code. * * ISO 3166-1 alpha-2: CD */ class CdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Democratic Republic of the Congo', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Democratic Republic of the Congo', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CfSubdivisionCodeException.php000066400000000000000000000015561336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Central African Republic subdivision code. * * ISO 3166-1 alpha-2: CF */ class CfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Central African Republic', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Central African Republic', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CgSubdivisionCodeException.php000066400000000000000000000015451336766562500305370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Republic of the Congo subdivision code. * * ISO 3166-1 alpha-2: CG */ class CgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Republic of the Congo', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Republic of the Congo', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ChSubdivisionCodeException.php000066400000000000000000000015071336766562500305360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Switzerland subdivision code. * * ISO 3166-1 alpha-2: CH */ class ChSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Switzerland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Switzerland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CiSubdivisionCodeException.php000066400000000000000000000015071336766562500305370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ivory Coast subdivision code. * * ISO 3166-1 alpha-2: CI */ class CiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ivory Coast', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ivory Coast', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CkSubdivisionCodeException.php000066400000000000000000000015121336766562500305350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cook Islands subdivision code. * * ISO 3166-1 alpha-2: CK */ class CkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cook Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cook Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ClSubdivisionCodeException.php000066400000000000000000000014651336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Chile subdivision code. * * ISO 3166-1 alpha-2: CL */ class ClSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Chile', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Chile', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CmSubdivisionCodeException.php000066400000000000000000000014761336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cameroon subdivision code. * * ISO 3166-1 alpha-2: CM */ class CmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cameroon', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cameroon', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CnSubdivisionCodeException.php000066400000000000000000000014651336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for China subdivision code. * * ISO 3166-1 alpha-2: CN */ class CnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of China', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of China', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CoSubdivisionCodeException.php000066400000000000000000000014761336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Colombia subdivision code. * * ISO 3166-1 alpha-2: CO */ class CoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Colombia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Colombia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CrSubdivisionCodeException.php000066400000000000000000000015041336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Costa Rica subdivision code. * * ISO 3166-1 alpha-2: CR */ class CrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Costa Rica', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Costa Rica', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CsSubdivisionCodeException.php000066400000000000000000000015451336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Serbia And Montenegro subdivision code. * * ISO 3166-1 alpha-2: CS */ class CsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Serbia And Montenegro', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Serbia And Montenegro', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CuSubdivisionCodeException.php000066400000000000000000000014621336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cuba subdivision code. * * ISO 3166-1 alpha-2: CU */ class CuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cuba', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cuba', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CvSubdivisionCodeException.php000066400000000000000000000015041336766562500305510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cape Verde subdivision code. * * ISO 3166-1 alpha-2: CV */ class CvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cape Verde', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cape Verde', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CwSubdivisionCodeException.php000066400000000000000000000014731336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Curacao subdivision code. * * ISO 3166-1 alpha-2: CW */ class CwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Curacao', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Curacao', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CxSubdivisionCodeException.php000066400000000000000000000015261336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Christmas Island subdivision code. * * ISO 3166-1 alpha-2: CX */ class CxSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Christmas Island', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Christmas Island', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CySubdivisionCodeException.php000066400000000000000000000014701336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cyprus subdivision code. * * ISO 3166-1 alpha-2: CY */ class CySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cyprus', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cyprus', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/CzSubdivisionCodeException.php000066400000000000000000000015201336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Czech Republic subdivision code. * * ISO 3166-1 alpha-2: CZ */ class CzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Czech Republic', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Czech Republic', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DeSubdivisionCodeException.php000066400000000000000000000014731336766562500305360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Germany subdivision code. * * ISO 3166-1 alpha-2: DE */ class DeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Germany', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Germany', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DjSubdivisionCodeException.php000066400000000000000000000014761336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Djibouti subdivision code. * * ISO 3166-1 alpha-2: DJ */ class DjSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Djibouti', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Djibouti', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DkSubdivisionCodeException.php000066400000000000000000000014731336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Denmark subdivision code. * * ISO 3166-1 alpha-2: DK */ class DkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Denmark', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Denmark', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DmSubdivisionCodeException.php000066400000000000000000000014761336766562500305510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Dominica subdivision code. * * ISO 3166-1 alpha-2: DM */ class DmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Dominica', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Dominica', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DoSubdivisionCodeException.php000066400000000000000000000015341336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Dominican Republic subdivision code. * * ISO 3166-1 alpha-2: DO */ class DoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Dominican Republic', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Dominican Republic', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/DzSubdivisionCodeException.php000066400000000000000000000014731336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Algeria subdivision code. * * ISO 3166-1 alpha-2: DZ */ class DzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Algeria', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Algeria', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EcSubdivisionCodeException.php000066400000000000000000000014731336766562500305350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ecuador subdivision code. * * ISO 3166-1 alpha-2: EC */ class EcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ecuador', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ecuador', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EeSubdivisionCodeException.php000066400000000000000000000014731336766562500305370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Estonia subdivision code. * * ISO 3166-1 alpha-2: EE */ class EeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Estonia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Estonia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EgSubdivisionCodeException.php000066400000000000000000000014651336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Egypt subdivision code. * * ISO 3166-1 alpha-2: EG */ class EgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Egypt', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Egypt', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EhSubdivisionCodeException.php000066400000000000000000000015201336766562500305330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Western Sahara subdivision code. * * ISO 3166-1 alpha-2: EH */ class EhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Western Sahara', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Western Sahara', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ErSubdivisionCodeException.php000066400000000000000000000014731336766562500305540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Eritrea subdivision code. * * ISO 3166-1 alpha-2: ER */ class ErSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Eritrea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Eritrea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EsSubdivisionCodeException.php000066400000000000000000000014651336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Spain subdivision code. * * ISO 3166-1 alpha-2: ES */ class EsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Spain', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Spain', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/EtSubdivisionCodeException.php000066400000000000000000000014761336766562500305610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ethiopia subdivision code. * * ISO 3166-1 alpha-2: ET */ class EtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ethiopia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ethiopia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FiSubdivisionCodeException.php000066400000000000000000000014731336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Finland subdivision code. * * ISO 3166-1 alpha-2: FI */ class FiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Finland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Finland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FjSubdivisionCodeException.php000066400000000000000000000014621336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Fiji subdivision code. * * ISO 3166-1 alpha-2: FJ */ class FjSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Fiji', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Fiji', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FkSubdivisionCodeException.php000066400000000000000000000015261336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Falkland Islands subdivision code. * * ISO 3166-1 alpha-2: FK */ class FkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Falkland Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Falkland Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FmSubdivisionCodeException.php000066400000000000000000000015041336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Micronesia subdivision code. * * ISO 3166-1 alpha-2: FM */ class FmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Micronesia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Micronesia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FoSubdivisionCodeException.php000066400000000000000000000015151336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Faroe Islands subdivision code. * * ISO 3166-1 alpha-2: FO */ class FoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Faroe Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Faroe Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/FrSubdivisionCodeException.php000066400000000000000000000014701336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for France subdivision code. * * ISO 3166-1 alpha-2: FR */ class FrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of France', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of France', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GaSubdivisionCodeException.php000066400000000000000000000014651336766562500305360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Gabon subdivision code. * * ISO 3166-1 alpha-2: GA */ class GaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Gabon', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Gabon', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GbSubdivisionCodeException.php000066400000000000000000000015201336766562500305270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for United Kingdom subdivision code. * * ISO 3166-1 alpha-2: GB */ class GbSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of United Kingdom', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of United Kingdom', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GdSubdivisionCodeException.php000066400000000000000000000014731336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Grenada subdivision code. * * ISO 3166-1 alpha-2: GD */ class GdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Grenada', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Grenada', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GeSubdivisionCodeException.php000066400000000000000000000014731336766562500305410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Georgia subdivision code. * * ISO 3166-1 alpha-2: GE */ class GeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Georgia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Georgia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GfSubdivisionCodeException.php000066400000000000000000000015151336766562500305370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for French Guiana subdivision code. * * ISO 3166-1 alpha-2: GF */ class GfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of French Guiana', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of French Guiana', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GgSubdivisionCodeException.php000066400000000000000000000014761336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guernsey subdivision code. * * ISO 3166-1 alpha-2: GG */ class GgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guernsey', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guernsey', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GhSubdivisionCodeException.php000066400000000000000000000014651336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ghana subdivision code. * * ISO 3166-1 alpha-2: GH */ class GhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ghana', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ghana', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GiSubdivisionCodeException.php000066400000000000000000000015011336766562500305350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Gibraltar subdivision code. * * ISO 3166-1 alpha-2: GI */ class GiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Gibraltar', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Gibraltar', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GlSubdivisionCodeException.php000066400000000000000000000015011336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Greenland subdivision code. * * ISO 3166-1 alpha-2: GL */ class GlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Greenland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Greenland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GmSubdivisionCodeException.php000066400000000000000000000014701336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Gambia subdivision code. * * ISO 3166-1 alpha-2: GM */ class GmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Gambia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Gambia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GnSubdivisionCodeException.php000066400000000000000000000014701336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guinea subdivision code. * * ISO 3166-1 alpha-2: GN */ class GnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guinea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guinea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GpSubdivisionCodeException.php000066400000000000000000000015041336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guadeloupe subdivision code. * * ISO 3166-1 alpha-2: GP */ class GpSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guadeloupe', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guadeloupe', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GqSubdivisionCodeException.php000066400000000000000000000015311336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Equatorial Guinea subdivision code. * * ISO 3166-1 alpha-2: GQ */ class GqSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Equatorial Guinea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Equatorial Guinea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GrSubdivisionCodeException.php000066400000000000000000000014701336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Greece subdivision code. * * ISO 3166-1 alpha-2: GR */ class GrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Greece', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Greece', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GsSubdivisionCodeException.php000066400000000000000000000016521336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for South Georgia and the South Sandwich Islands subdivision code. * * ISO 3166-1 alpha-2: GS */ class GsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of South Georgia and the South Sandwich Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of South Georgia and the South Sandwich Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GtSubdivisionCodeException.php000066400000000000000000000015011336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guatemala subdivision code. * * ISO 3166-1 alpha-2: GT */ class GtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guatemala', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guatemala', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GuSubdivisionCodeException.php000066400000000000000000000014621336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guam subdivision code. * * ISO 3166-1 alpha-2: GU */ class GuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guam', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guam', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GwSubdivisionCodeException.php000066400000000000000000000015151336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guinea-Bissau subdivision code. * * ISO 3166-1 alpha-2: GW */ class GwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guinea-Bissau', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guinea-Bissau', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/GySubdivisionCodeException.php000066400000000000000000000014701336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Guyana subdivision code. * * ISO 3166-1 alpha-2: GY */ class GySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Guyana', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Guyana', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HkSubdivisionCodeException.php000066400000000000000000000015011336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Hong Kong subdivision code. * * ISO 3166-1 alpha-2: HK */ class HkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Hong Kong', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Hong Kong', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HmSubdivisionCodeException.php000066400000000000000000000016111336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Heard Island and McDonald Islands subdivision code. * * ISO 3166-1 alpha-2: HM */ class HmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Heard Island and McDonald Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Heard Island and McDonald Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HnSubdivisionCodeException.php000066400000000000000000000014761336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Honduras subdivision code. * * ISO 3166-1 alpha-2: HN */ class HnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Honduras', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Honduras', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HrSubdivisionCodeException.php000066400000000000000000000014731336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Croatia subdivision code. * * ISO 3166-1 alpha-2: HR */ class HrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Croatia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Croatia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HtSubdivisionCodeException.php000066400000000000000000000014651336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Haiti subdivision code. * * ISO 3166-1 alpha-2: HT */ class HtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Haiti', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Haiti', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/HuSubdivisionCodeException.php000066400000000000000000000014731336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Hungary subdivision code. * * ISO 3166-1 alpha-2: HU */ class HuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Hungary', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Hungary', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IdSubdivisionCodeException.php000066400000000000000000000015011336766562500305320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Indonesia subdivision code. * * ISO 3166-1 alpha-2: ID */ class IdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Indonesia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Indonesia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IeSubdivisionCodeException.php000066400000000000000000000014731336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ireland subdivision code. * * ISO 3166-1 alpha-2: IE */ class IeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ireland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ireland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IlSubdivisionCodeException.php000066400000000000000000000014701336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Israel subdivision code. * * ISO 3166-1 alpha-2: IL */ class IlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Israel', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Israel', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ImSubdivisionCodeException.php000066400000000000000000000015071336766562500305510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Isle of Man subdivision code. * * ISO 3166-1 alpha-2: IM */ class ImSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Isle of Man', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Isle of Man', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/InSubdivisionCodeException.php000066400000000000000000000014651336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for India subdivision code. * * ISO 3166-1 alpha-2: IN */ class InSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of India', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of India', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IoSubdivisionCodeException.php000066400000000000000000000016001336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for British Indian Ocean Territory subdivision code. * * ISO 3166-1 alpha-2: IO */ class IoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of British Indian Ocean Territory', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of British Indian Ocean Territory', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IqSubdivisionCodeException.php000066400000000000000000000014621336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Iraq subdivision code. * * ISO 3166-1 alpha-2: IQ */ class IqSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Iraq', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Iraq', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IrSubdivisionCodeException.php000066400000000000000000000014621336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Iran subdivision code. * * ISO 3166-1 alpha-2: IR */ class IrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Iran', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Iran', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/IsSubdivisionCodeException.php000066400000000000000000000014731336766562500305610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Iceland subdivision code. * * ISO 3166-1 alpha-2: IS */ class IsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Iceland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Iceland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ItSubdivisionCodeException.php000066400000000000000000000014651336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Italy subdivision code. * * ISO 3166-1 alpha-2: IT */ class ItSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Italy', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Italy', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/JeSubdivisionCodeException.php000066400000000000000000000014701336766562500305410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Jersey subdivision code. * * ISO 3166-1 alpha-2: JE */ class JeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Jersey', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Jersey', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/JmSubdivisionCodeException.php000066400000000000000000000014731336766562500305540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Jamaica subdivision code. * * ISO 3166-1 alpha-2: JM */ class JmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Jamaica', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Jamaica', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/JoSubdivisionCodeException.php000066400000000000000000000014701336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Jordan subdivision code. * * ISO 3166-1 alpha-2: JO */ class JoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Jordan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Jordan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/JpSubdivisionCodeException.php000066400000000000000000000014651336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Japan subdivision code. * * ISO 3166-1 alpha-2: JP */ class JpSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Japan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Japan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KeSubdivisionCodeException.php000066400000000000000000000014651336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kenya subdivision code. * * ISO 3166-1 alpha-2: KE */ class KeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kenya', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kenya', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KgSubdivisionCodeException.php000066400000000000000000000015041336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kyrgyzstan subdivision code. * * ISO 3166-1 alpha-2: KG */ class KgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kyrgyzstan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kyrgyzstan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KhSubdivisionCodeException.php000066400000000000000000000014761336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cambodia subdivision code. * * ISO 3166-1 alpha-2: KH */ class KhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cambodia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cambodia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KiSubdivisionCodeException.php000066400000000000000000000014761336766562500305540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kiribati subdivision code. * * ISO 3166-1 alpha-2: KI */ class KiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kiribati', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kiribati', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KmSubdivisionCodeException.php000066400000000000000000000014731336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Comoros subdivision code. * * ISO 3166-1 alpha-2: KM */ class KmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Comoros', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Comoros', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KnSubdivisionCodeException.php000066400000000000000000000015451336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Kitts and Nevis subdivision code. * * ISO 3166-1 alpha-2: KN */ class KnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Kitts and Nevis', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Kitts and Nevis', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KpSubdivisionCodeException.php000066400000000000000000000015071336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for North Korea subdivision code. * * ISO 3166-1 alpha-2: KP */ class KpSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of North Korea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of North Korea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KrSubdivisionCodeException.php000066400000000000000000000015071336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for South Korea subdivision code. * * ISO 3166-1 alpha-2: KR */ class KrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of South Korea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of South Korea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KwSubdivisionCodeException.php000066400000000000000000000014701336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kuwait subdivision code. * * ISO 3166-1 alpha-2: KW */ class KwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kuwait', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kuwait', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KySubdivisionCodeException.php000066400000000000000000000015201336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Cayman Islands subdivision code. * * ISO 3166-1 alpha-2: KY */ class KySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Cayman Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Cayman Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/KzSubdivisionCodeException.php000066400000000000000000000015041336766562500305650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kazakhstan subdivision code. * * ISO 3166-1 alpha-2: KZ */ class KzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kazakhstan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kazakhstan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LaSubdivisionCodeException.php000066400000000000000000000014621336766562500305400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Laos subdivision code. * * ISO 3166-1 alpha-2: LA */ class LaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Laos', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Laos', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LbSubdivisionCodeException.php000066400000000000000000000014731336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Lebanon subdivision code. * * ISO 3166-1 alpha-2: LB */ class LbSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Lebanon', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Lebanon', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LcSubdivisionCodeException.php000066400000000000000000000015071336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Lucia subdivision code. * * ISO 3166-1 alpha-2: LC */ class LcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Lucia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Lucia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LiSubdivisionCodeException.php000066400000000000000000000015151336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Liechtenstein subdivision code. * * ISO 3166-1 alpha-2: LI */ class LiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Liechtenstein', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Liechtenstein', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LkSubdivisionCodeException.php000066400000000000000000000015011336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Sri Lanka subdivision code. * * ISO 3166-1 alpha-2: LK */ class LkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Sri Lanka', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Sri Lanka', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LrSubdivisionCodeException.php000066400000000000000000000014731336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Liberia subdivision code. * * ISO 3166-1 alpha-2: LR */ class LrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Liberia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Liberia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LsSubdivisionCodeException.php000066400000000000000000000014731336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Lesotho subdivision code. * * ISO 3166-1 alpha-2: LS */ class LsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Lesotho', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Lesotho', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LtSubdivisionCodeException.php000066400000000000000000000015011336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Lithuania subdivision code. * * ISO 3166-1 alpha-2: LT */ class LtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Lithuania', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Lithuania', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LuSubdivisionCodeException.php000066400000000000000000000015041336766562500305610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Luxembourg subdivision code. * * ISO 3166-1 alpha-2: LU */ class LuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Luxembourg', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Luxembourg', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LvSubdivisionCodeException.php000066400000000000000000000014701336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Latvia subdivision code. * * ISO 3166-1 alpha-2: LV */ class LvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Latvia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Latvia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/LySubdivisionCodeException.php000066400000000000000000000014651336766562500305730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Libya subdivision code. * * ISO 3166-1 alpha-2: LY */ class LySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Libya', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Libya', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MaSubdivisionCodeException.php000066400000000000000000000014731336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Morocco subdivision code. * * ISO 3166-1 alpha-2: MA */ class MaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Morocco', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Morocco', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/McSubdivisionCodeException.php000066400000000000000000000014701336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Monaco subdivision code. * * ISO 3166-1 alpha-2: MC */ class McSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Monaco', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Monaco', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MdSubdivisionCodeException.php000066400000000000000000000014731336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Moldova subdivision code. * * ISO 3166-1 alpha-2: MD */ class MdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Moldova', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Moldova', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MeSubdivisionCodeException.php000066400000000000000000000015041336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Montenegro subdivision code. * * ISO 3166-1 alpha-2: ME */ class MeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Montenegro', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Montenegro', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MfSubdivisionCodeException.php000066400000000000000000000015121336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Martin subdivision code. * * ISO 3166-1 alpha-2: MF */ class MfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Martin', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Martin', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MgSubdivisionCodeException.php000066400000000000000000000015041336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Madagascar subdivision code. * * ISO 3166-1 alpha-2: MG */ class MgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Madagascar', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Madagascar', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MhSubdivisionCodeException.php000066400000000000000000000015261336766562500305510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Marshall Islands subdivision code. * * ISO 3166-1 alpha-2: MH */ class MhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Marshall Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Marshall Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MkSubdivisionCodeException.php000066400000000000000000000015011336766562500305450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Macedonia subdivision code. * * ISO 3166-1 alpha-2: MK */ class MkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Macedonia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Macedonia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MlSubdivisionCodeException.php000066400000000000000000000014621336766562500305540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mali subdivision code. * * ISO 3166-1 alpha-2: ML */ class MlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mali', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mali', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MmSubdivisionCodeException.php000066400000000000000000000015231336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Myanmar [Burma] subdivision code. * * ISO 3166-1 alpha-2: MM */ class MmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Myanmar [Burma]', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Myanmar [Burma]', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MnSubdivisionCodeException.php000066400000000000000000000014761336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mongolia subdivision code. * * ISO 3166-1 alpha-2: MN */ class MnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mongolia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mongolia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MoSubdivisionCodeException.php000066400000000000000000000014651336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Macao subdivision code. * * ISO 3166-1 alpha-2: MO */ class MoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Macao', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Macao', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MpSubdivisionCodeException.php000066400000000000000000000015561336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Northern Mariana Islands subdivision code. * * ISO 3166-1 alpha-2: MP */ class MpSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Northern Mariana Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Northern Mariana Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MqSubdivisionCodeException.php000066400000000000000000000015041336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Martinique subdivision code. * * ISO 3166-1 alpha-2: MQ */ class MqSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Martinique', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Martinique', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MrSubdivisionCodeException.php000066400000000000000000000015041336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mauritania subdivision code. * * ISO 3166-1 alpha-2: MR */ class MrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mauritania', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mauritania', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MsSubdivisionCodeException.php000066400000000000000000000015041336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Montserrat subdivision code. * * ISO 3166-1 alpha-2: MS */ class MsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Montserrat', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Montserrat', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MtSubdivisionCodeException.php000066400000000000000000000014651336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Malta subdivision code. * * ISO 3166-1 alpha-2: MT */ class MtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Malta', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Malta', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MuSubdivisionCodeException.php000066400000000000000000000015011336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mauritius subdivision code. * * ISO 3166-1 alpha-2: MU */ class MuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mauritius', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mauritius', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MvSubdivisionCodeException.php000066400000000000000000000014761336766562500305730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Maldives subdivision code. * * ISO 3166-1 alpha-2: MV */ class MvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Maldives', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Maldives', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MwSubdivisionCodeException.php000066400000000000000000000014701336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Malawi subdivision code. * * ISO 3166-1 alpha-2: MW */ class MwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Malawi', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Malawi', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MxSubdivisionCodeException.php000066400000000000000000000014701336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mexico subdivision code. * * ISO 3166-1 alpha-2: MX */ class MxSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mexico', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mexico', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MySubdivisionCodeException.php000066400000000000000000000014761336766562500305760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Malaysia subdivision code. * * ISO 3166-1 alpha-2: MY */ class MySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Malaysia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Malaysia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/MzSubdivisionCodeException.php000066400000000000000000000015041336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mozambique subdivision code. * * ISO 3166-1 alpha-2: MZ */ class MzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mozambique', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mozambique', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NaSubdivisionCodeException.php000066400000000000000000000014731336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Namibia subdivision code. * * ISO 3166-1 alpha-2: NA */ class NaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Namibia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Namibia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NcSubdivisionCodeException.php000066400000000000000000000015151336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for New Caledonia subdivision code. * * ISO 3166-1 alpha-2: NC */ class NcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of New Caledonia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of New Caledonia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NeSubdivisionCodeException.php000066400000000000000000000014651336766562500305510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Niger subdivision code. * * ISO 3166-1 alpha-2: NE */ class NeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Niger', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Niger', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NfSubdivisionCodeException.php000066400000000000000000000015201336766562500305420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Norfolk Island subdivision code. * * ISO 3166-1 alpha-2: NF */ class NfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Norfolk Island', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Norfolk Island', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NgSubdivisionCodeException.php000066400000000000000000000014731336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Nigeria subdivision code. * * ISO 3166-1 alpha-2: NG */ class NgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Nigeria', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Nigeria', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NiSubdivisionCodeException.php000066400000000000000000000015011336766562500305440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Nicaragua subdivision code. * * ISO 3166-1 alpha-2: NI */ class NiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Nicaragua', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Nicaragua', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NlSubdivisionCodeException.php000066400000000000000000000015071336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Netherlands subdivision code. * * ISO 3166-1 alpha-2: NL */ class NlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Netherlands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Netherlands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NoSubdivisionCodeException.php000066400000000000000000000014701336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Norway subdivision code. * * ISO 3166-1 alpha-2: NO */ class NoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Norway', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Norway', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NpSubdivisionCodeException.php000066400000000000000000000014651336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Nepal subdivision code. * * ISO 3166-1 alpha-2: NP */ class NpSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Nepal', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Nepal', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NrSubdivisionCodeException.php000066400000000000000000000014651336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Nauru subdivision code. * * ISO 3166-1 alpha-2: NR */ class NrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Nauru', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Nauru', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NuSubdivisionCodeException.php000066400000000000000000000014621336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Niue subdivision code. * * ISO 3166-1 alpha-2: NU */ class NuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Niue', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Niue', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/NzSubdivisionCodeException.php000066400000000000000000000015071336766562500305730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for New Zealand subdivision code. * * ISO 3166-1 alpha-2: NZ */ class NzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of New Zealand', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of New Zealand', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/OmSubdivisionCodeException.php000066400000000000000000000014621336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Oman subdivision code. * * ISO 3166-1 alpha-2: OM */ class OmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Oman', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Oman', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PaSubdivisionCodeException.php000066400000000000000000000014701336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Panama subdivision code. * * ISO 3166-1 alpha-2: PA */ class PaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Panama', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Panama', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PeSubdivisionCodeException.php000066400000000000000000000014621336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Peru subdivision code. * * ISO 3166-1 alpha-2: PE */ class PeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Peru', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Peru', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PfSubdivisionCodeException.php000066400000000000000000000015261336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for French Polynesia subdivision code. * * ISO 3166-1 alpha-2: PF */ class PfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of French Polynesia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of French Polynesia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PgSubdivisionCodeException.php000066400000000000000000000015261336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Papua New Guinea subdivision code. * * ISO 3166-1 alpha-2: PG */ class PgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Papua New Guinea', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Papua New Guinea', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PhSubdivisionCodeException.php000066400000000000000000000015071336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Philippines subdivision code. * * ISO 3166-1 alpha-2: PH */ class PhSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Philippines', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Philippines', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PkSubdivisionCodeException.php000066400000000000000000000014761336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Pakistan subdivision code. * * ISO 3166-1 alpha-2: PK */ class PkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Pakistan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Pakistan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PlSubdivisionCodeException.php000066400000000000000000000014701336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Poland subdivision code. * * ISO 3166-1 alpha-2: PL */ class PlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Poland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Poland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PmSubdivisionCodeException.php000066400000000000000000000015611336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Pierre and Miquelon subdivision code. * * ISO 3166-1 alpha-2: PM */ class PmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Pierre and Miquelon', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Pierre and Miquelon', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PnSubdivisionCodeException.php000066400000000000000000000015261336766562500305620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Pitcairn Islands subdivision code. * * ISO 3166-1 alpha-2: PN */ class PnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Pitcairn Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Pitcairn Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PrSubdivisionCodeException.php000066400000000000000000000015071336766562500305650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Puerto Rico subdivision code. * * ISO 3166-1 alpha-2: PR */ class PrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Puerto Rico', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Puerto Rico', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PsSubdivisionCodeException.php000066400000000000000000000015011336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Palestine subdivision code. * * ISO 3166-1 alpha-2: PS */ class PsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Palestine', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Palestine', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PtSubdivisionCodeException.php000066400000000000000000000014761336766562500305740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Portugal subdivision code. * * ISO 3166-1 alpha-2: PT */ class PtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Portugal', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Portugal', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PwSubdivisionCodeException.php000066400000000000000000000014651336766562500305750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Palau subdivision code. * * ISO 3166-1 alpha-2: PW */ class PwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Palau', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Palau', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/PySubdivisionCodeException.php000066400000000000000000000014761336766562500306010ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Paraguay subdivision code. * * ISO 3166-1 alpha-2: PY */ class PySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Paraguay', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Paraguay', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/QaSubdivisionCodeException.php000066400000000000000000000014651336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Qatar subdivision code. * * ISO 3166-1 alpha-2: QA */ class QaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Qatar', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Qatar', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ReSubdivisionCodeException.php000066400000000000000000000014761336766562500305570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Réunion subdivision code. * * ISO 3166-1 alpha-2: RE */ class ReSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Réunion', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Réunion', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/RoSubdivisionCodeException.php000066400000000000000000000014731336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Romania subdivision code. * * ISO 3166-1 alpha-2: RO */ class RoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Romania', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Romania', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/RsSubdivisionCodeException.php000066400000000000000000000014701336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Serbia subdivision code. * * ISO 3166-1 alpha-2: RS */ class RsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Serbia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Serbia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/RuSubdivisionCodeException.php000066400000000000000000000014701336766562500305710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Russia subdivision code. * * ISO 3166-1 alpha-2: RU */ class RuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Russia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Russia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/RwSubdivisionCodeException.php000066400000000000000000000014701336766562500305730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Rwanda subdivision code. * * ISO 3166-1 alpha-2: RW */ class RwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Rwanda', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Rwanda', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SaSubdivisionCodeException.php000066400000000000000000000015121336766562500305430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saudi Arabia subdivision code. * * ISO 3166-1 alpha-2: SA */ class SaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saudi Arabia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saudi Arabia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SbSubdivisionCodeException.php000066400000000000000000000015231336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Solomon Islands subdivision code. * * ISO 3166-1 alpha-2: SB */ class SbSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Solomon Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Solomon Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ScSubdivisionCodeException.php000066400000000000000000000015041336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Seychelles subdivision code. * * ISO 3166-1 alpha-2: SC */ class ScSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Seychelles', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Seychelles', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SdSubdivisionCodeException.php000066400000000000000000000014651336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Sudan subdivision code. * * ISO 3166-1 alpha-2: SD */ class SdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Sudan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Sudan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SeSubdivisionCodeException.php000066400000000000000000000014701336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Sweden subdivision code. * * ISO 3166-1 alpha-2: SE */ class SeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Sweden', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Sweden', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SgSubdivisionCodeException.php000066400000000000000000000015011336766562500305470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Singapore subdivision code. * * ISO 3166-1 alpha-2: SG */ class SgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Singapore', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Singapore', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ShSubdivisionCodeException.php000066400000000000000000000015121336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Helena subdivision code. * * ISO 3166-1 alpha-2: SH */ class ShSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Helena', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Helena', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SiSubdivisionCodeException.php000066400000000000000000000014761336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Slovenia subdivision code. * * ISO 3166-1 alpha-2: SI */ class SiSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Slovenia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Slovenia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SjSubdivisionCodeException.php000066400000000000000000000015501336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Svalbard and Jan Mayen subdivision code. * * ISO 3166-1 alpha-2: SJ */ class SjSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Svalbard and Jan Mayen', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Svalbard and Jan Mayen', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SkSubdivisionCodeException.php000066400000000000000000000014761336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Slovakia subdivision code. * * ISO 3166-1 alpha-2: SK */ class SkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Slovakia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Slovakia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SlSubdivisionCodeException.php000066400000000000000000000015121336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Sierra Leone subdivision code. * * ISO 3166-1 alpha-2: SL */ class SlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Sierra Leone', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Sierra Leone', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SmSubdivisionCodeException.php000066400000000000000000000015041336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for San Marino subdivision code. * * ISO 3166-1 alpha-2: SM */ class SmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of San Marino', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of San Marino', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SnSubdivisionCodeException.php000066400000000000000000000014731336766562500305660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Senegal subdivision code. * * ISO 3166-1 alpha-2: SN */ class SnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Senegal', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Senegal', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SoSubdivisionCodeException.php000066400000000000000000000014731336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Somalia subdivision code. * * ISO 3166-1 alpha-2: SO */ class SoSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Somalia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Somalia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SrSubdivisionCodeException.php000066400000000000000000000014761336766562500305750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Suriname subdivision code. * * ISO 3166-1 alpha-2: SR */ class SrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Suriname', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Suriname', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SsSubdivisionCodeException.php000066400000000000000000000015071336766562500305710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for South Sudan subdivision code. * * ISO 3166-1 alpha-2: SS */ class SsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of South Sudan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of South Sudan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/StSubdivisionCodeException.php000066400000000000000000000015561336766562500305760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for São Tomé and Príncipe subdivision code. * * ISO 3166-1 alpha-2: ST */ class StSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of São Tomé and Príncipe', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of São Tomé and Príncipe', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SvSubdivisionCodeException.php000066400000000000000000000015071336766562500305740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for El Salvador subdivision code. * * ISO 3166-1 alpha-2: SV */ class SvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of El Salvador', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of El Salvador', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SxSubdivisionCodeException.php000066400000000000000000000015121336766562500305720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Sint Maarten subdivision code. * * ISO 3166-1 alpha-2: SX */ class SxSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Sint Maarten', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Sint Maarten', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SySubdivisionCodeException.php000066400000000000000000000014651336766562500306020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Syria subdivision code. * * ISO 3166-1 alpha-2: SY */ class SySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Syria', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Syria', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/SzSubdivisionCodeException.php000066400000000000000000000015011336766562500305720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Swaziland subdivision code. * * ISO 3166-1 alpha-2: SZ */ class SzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Swaziland', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Swaziland', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TcSubdivisionCodeException.php000066400000000000000000000015561336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Turks and Caicos Islands subdivision code. * * ISO 3166-1 alpha-2: TC */ class TcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Turks and Caicos Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Turks and Caicos Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TdSubdivisionCodeException.php000066400000000000000000000014621336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Chad subdivision code. * * ISO 3166-1 alpha-2: TD */ class TdSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Chad', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Chad', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TfSubdivisionCodeException.php000066400000000000000000000015671336766562500305630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for French Southern Territories subdivision code. * * ISO 3166-1 alpha-2: TF */ class TfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of French Southern Territories', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of French Southern Territories', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TgSubdivisionCodeException.php000066400000000000000000000014621336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Togo subdivision code. * * ISO 3166-1 alpha-2: TG */ class TgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Togo', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Togo', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ThSubdivisionCodeException.php000066400000000000000000000014761336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Thailand subdivision code. * * ISO 3166-1 alpha-2: TH */ class ThSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Thailand', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Thailand', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TjSubdivisionCodeException.php000066400000000000000000000015041336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tajikistan subdivision code. * * ISO 3166-1 alpha-2: TJ */ class TjSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tajikistan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tajikistan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TkSubdivisionCodeException.php000066400000000000000000000014731336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tokelau subdivision code. * * ISO 3166-1 alpha-2: TK */ class TkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tokelau', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tokelau', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TlSubdivisionCodeException.php000066400000000000000000000015041336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for East Timor subdivision code. * * ISO 3166-1 alpha-2: TL */ class TlSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of East Timor', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of East Timor', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TmSubdivisionCodeException.php000066400000000000000000000015121336766562500305600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Turkmenistan subdivision code. * * ISO 3166-1 alpha-2: TM */ class TmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Turkmenistan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Turkmenistan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TnSubdivisionCodeException.php000066400000000000000000000014731336766562500305670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tunisia subdivision code. * * ISO 3166-1 alpha-2: TN */ class TnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tunisia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tunisia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ToSubdivisionCodeException.php000066400000000000000000000014651336766562500305710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tonga subdivision code. * * ISO 3166-1 alpha-2: TO */ class ToSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tonga', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tonga', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TrSubdivisionCodeException.php000066400000000000000000000014701336766562500305700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Turkey subdivision code. * * ISO 3166-1 alpha-2: TR */ class TrSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Turkey', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Turkey', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TtSubdivisionCodeException.php000066400000000000000000000015371336766562500305760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Trinidad and Tobago subdivision code. * * ISO 3166-1 alpha-2: TT */ class TtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Trinidad and Tobago', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Trinidad and Tobago', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TvSubdivisionCodeException.php000066400000000000000000000014701336766562500305740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tuvalu subdivision code. * * ISO 3166-1 alpha-2: TV */ class TvSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tuvalu', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tuvalu', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TwSubdivisionCodeException.php000066400000000000000000000014701336766562500305750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Taiwan subdivision code. * * ISO 3166-1 alpha-2: TW */ class TwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Taiwan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Taiwan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/TzSubdivisionCodeException.php000066400000000000000000000014761336766562500306060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Tanzania subdivision code. * * ISO 3166-1 alpha-2: TZ */ class TzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Tanzania', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Tanzania', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UaSubdivisionCodeException.php000066400000000000000000000014731336766562500305530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Ukraine subdivision code. * * ISO 3166-1 alpha-2: UA */ class UaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Ukraine', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Ukraine', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UgSubdivisionCodeException.php000066400000000000000000000014701336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Uganda subdivision code. * * ISO 3166-1 alpha-2: UG */ class UgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Uganda', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Uganda', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UmSubdivisionCodeException.php000066400000000000000000000015671336766562500305730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for U.S. Minor Outlying Islands subdivision code. * * ISO 3166-1 alpha-2: UM */ class UmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of U.S. Minor Outlying Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of U.S. Minor Outlying Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UsSubdivisionCodeException.php000066400000000000000000000015151336766562500305720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for United States subdivision code. * * ISO 3166-1 alpha-2: US */ class UsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of United States', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of United States', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UySubdivisionCodeException.php000066400000000000000000000014731336766562500306030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Uruguay subdivision code. * * ISO 3166-1 alpha-2: UY */ class UySubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Uruguay', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Uruguay', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/UzSubdivisionCodeException.php000066400000000000000000000015041336766562500305770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Uzbekistan subdivision code. * * ISO 3166-1 alpha-2: UZ */ class UzSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Uzbekistan', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Uzbekistan', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VaSubdivisionCodeException.php000066400000000000000000000015121336766562500305460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Vatican City subdivision code. * * ISO 3166-1 alpha-2: VA */ class VaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Vatican City', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Vatican City', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VcSubdivisionCodeException.php000066400000000000000000000016061336766562500305540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Saint Vincent and the Grenadines subdivision code. * * ISO 3166-1 alpha-2: VC */ class VcSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Saint Vincent and the Grenadines', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Saint Vincent and the Grenadines', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VeSubdivisionCodeException.php000066400000000000000000000015011336766562500305500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Venezuela subdivision code. * * ISO 3166-1 alpha-2: VE */ class VeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Venezuela', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Venezuela', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VgSubdivisionCodeException.php000066400000000000000000000015501336766562500305560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for British Virgin Islands subdivision code. * * ISO 3166-1 alpha-2: VG */ class VgSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of British Virgin Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of British Virgin Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ViSubdivisionCodeException.php000066400000000000000000000015371336766562500305650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for U.S. Virgin Islands subdivision code. * * ISO 3166-1 alpha-2: VI */ class ViSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of U.S. Virgin Islands', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of U.S. Virgin Islands', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VnSubdivisionCodeException.php000066400000000000000000000014731336766562500305710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Vietnam subdivision code. * * ISO 3166-1 alpha-2: VN */ class VnSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Vietnam', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Vietnam', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/VuSubdivisionCodeException.php000066400000000000000000000014731336766562500306000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Vanuatu subdivision code. * * ISO 3166-1 alpha-2: VU */ class VuSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Vanuatu', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Vanuatu', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/WfSubdivisionCodeException.php000066400000000000000000000015311336766562500305550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Wallis and Futuna subdivision code. * * ISO 3166-1 alpha-2: WF */ class WfSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Wallis and Futuna', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Wallis and Futuna', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/WsSubdivisionCodeException.php000066400000000000000000000014651336766562500306000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Samoa subdivision code. * * ISO 3166-1 alpha-2: WS */ class WsSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Samoa', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Samoa', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/XkSubdivisionCodeException.php000066400000000000000000000014701336766562500305650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Kosovo subdivision code. * * ISO 3166-1 alpha-2: XK */ class XkSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Kosovo', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Kosovo', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/YeSubdivisionCodeException.php000066400000000000000000000014651336766562500305640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Yemen subdivision code. * * ISO 3166-1 alpha-2: YE */ class YeSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Yemen', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Yemen', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/YtSubdivisionCodeException.php000066400000000000000000000014731336766562500306020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Mayotte subdivision code. * * ISO 3166-1 alpha-2: YT */ class YtSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Mayotte', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Mayotte', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ZaSubdivisionCodeException.php000066400000000000000000000015121336766562500305520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for South Africa subdivision code. * * ISO 3166-1 alpha-2: ZA */ class ZaSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of South Africa', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of South Africa', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ZmSubdivisionCodeException.php000066400000000000000000000014701336766562500305710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Zambia subdivision code. * * ISO 3166-1 alpha-2: ZM */ class ZmSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Zambia', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Zambia', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCode/ZwSubdivisionCodeException.php000066400000000000000000000014761336766562500306110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions\SubdivisionCode; use Respect\Validation\Exceptions\SubdivisionCodeException; /** * Exception class for Zimbabwe subdivision code. * * ISO 3166-1 alpha-2: ZW */ class ZwSubdivisionCodeException extends SubdivisionCodeException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a subdivision code of Zimbabwe', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a subdivision code of Zimbabwe', ], ]; } Validation-1.1.29/library/Exceptions/SubdivisionCodeException.php000066400000000000000000000012571336766562500251740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class SubdivisionCodeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid subdivision code for {{countryCode}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid subdivision code for {{countryCode}}', ], ]; } Validation-1.1.29/library/Exceptions/SymbolicLinkException.php000066400000000000000000000011621336766562500244750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class SymbolicLinkException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a symbolic link', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a symbolic link', ], ]; } Validation-1.1.29/library/Exceptions/TldException.php000066400000000000000000000012051336766562500226170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class TldException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid top-level domain name', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid top-level domain name', ], ]; } Validation-1.1.29/library/Exceptions/TrueValException.php000066400000000000000000000011551336766562500234620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class TrueValException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is not considered as "True"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is considered as "True"', ], ]; } Validation-1.1.29/library/Exceptions/TypeException.php000066400000000000000000000011341336766562500230160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class TypeException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be {{type}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be {{type}}', ], ]; } Validation-1.1.29/library/Exceptions/UploadedException.php000066400000000000000000000011601336766562500236310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class UploadedException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be an uploaded file', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be an uploaded file', ], ]; } Validation-1.1.29/library/Exceptions/UppercaseException.php000066400000000000000000000011431336766562500240240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class UppercaseException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be uppercase', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be uppercase', ], ]; } Validation-1.1.29/library/Exceptions/UrlException.php000066400000000000000000000011251336766562500226370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class UrlException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a URL', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a URL', ], ]; } Validation-1.1.29/library/Exceptions/ValidationException.php000066400000000000000000000201041336766562500241650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use DateTime; use Exception; use InvalidArgumentException; use Traversable; class ValidationException extends InvalidArgumentException implements ExceptionInterface { const MODE_DEFAULT = 1; const MODE_NEGATIVE = 2; const STANDARD = 0; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'Data validation failed for %s', ], self::MODE_NEGATIVE => [ self::STANDARD => 'Data validation failed for %s', ], ]; /** * @var int */ private static $maxDepthStringify = 5; /** * @var int */ private static $maxCountStringify = 10; /** * @var string */ private static $maxReplacementStringify = '...'; protected $id = 'validation'; protected $mode = self::MODE_DEFAULT; protected $name = ''; protected $template = ''; protected $params = []; private $customTemplate = false; public static function format($template, array $vars = []) { return preg_replace_callback( '/{{(\w+)}}/', function ($match) use ($vars) { if (!isset($vars[$match[1]])) { return $match[0]; } $value = $vars[$match[1]]; if ('name' == $match[1] && is_string($value)) { return $value; } return ValidationException::stringify($value); }, $template ); } /** * @param mixed $value * @param int $depth * * @return string */ public static function stringify($value, $depth = 1) { if ($depth >= self::$maxDepthStringify) { return self::$maxReplacementStringify; } if (is_array($value)) { return static::stringifyArray($value, $depth); } if (is_object($value)) { return static::stringifyObject($value, $depth); } if (is_resource($value)) { return sprintf('`[resource] (%s)`', get_resource_type($value)); } if (is_float($value)) { if (is_infinite($value)) { return ($value > 0 ? '' : '-').'INF'; } if (is_nan($value)) { return 'NaN'; } } return (@json_encode($value, (JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)) ?: $value); } /** * @param array $value * @param int $depth * * @return string */ public static function stringifyArray(array $value, $depth = 1) { $nextDepth = ($depth + 1); if ($nextDepth >= self::$maxDepthStringify) { return self::$maxReplacementStringify; } if (empty($value)) { return '{ }'; } $total = count($value); $string = ''; $current = 0; foreach ($value as $childKey => $childValue) { if ($current++ >= self::$maxCountStringify) { $string .= self::$maxReplacementStringify; break; } if (!is_int($childKey)) { $string .= sprintf('%s: ', static::stringify($childKey, $nextDepth)); } $string .= static::stringify($childValue, $nextDepth); if ($current !== $total) { $string .= ', '; } } return sprintf('{ %s }', $string); } /** * @param mixed $value * @param int $depth * * @return string */ public static function stringifyObject($value, $depth = 2) { $nextDepth = $depth + 1; if ($value instanceof DateTime) { return sprintf('"%s"', $value->format('Y-m-d H:i:s')); } $class = get_class($value); if ($value instanceof Traversable) { return sprintf('`[traversable] (%s: %s)`', $class, static::stringify(iterator_to_array($value), $nextDepth)); } if ($value instanceof Exception) { $properties = [ 'message' => $value->getMessage(), 'code' => $value->getCode(), 'file' => $value->getFile().':'.$value->getLine(), ]; return sprintf('`[exception] (%s: %s)`', $class, static::stringify($properties, $nextDepth)); } if (method_exists($value, '__toString')) { return static::stringify($value->__toString(), $nextDepth); } $properties = static::stringify(get_object_vars($value), $nextDepth); return sprintf('`[object] (%s: %s)`', $class, str_replace('`', '', $properties)); } public function __toString() { return $this->getMainMessage(); } public function chooseTemplate() { return key(static::$defaultTemplates[$this->mode]); } public function configure($name, array $params = []) { $this->setName($name); $this->setId($this->guessId()); $this->setParams($params); return $this; } public function getName() { return $this->name; } public function getId() { return $this->id; } public function getMainMessage() { $vars = $this->getParams(); $vars['name'] = $this->getName(); $template = $this->getTemplate(); if (isset($vars['translator']) && is_callable($vars['translator'])) { $template = call_user_func($vars['translator'], $template); } return static::format($template, $vars); } public function getParam($name) { return $this->hasParam($name) ? $this->params[$name] : false; } public function getParams() { return $this->params; } public function getTemplate() { if (!empty($this->template)) { return $this->template; } else { return $this->template = $this->buildTemplate(); } } public function hasParam($name) { return isset($this->params[$name]); } public function setId($id) { $this->id = $id; return $this; } public function setName($name) { $this->name = $name; return $this; } public function setMode($mode) { $this->mode = $mode; $this->template = $this->buildTemplate(); $this->buildMessage(); return $this; } public function setParam($key, $value) { $this->params[$key] = $value; $this->buildMessage(); return $this; } public function setParams(array $params) { foreach ($params as $key => $value) { $this->params[$key] = $value; } $this->buildMessage(); return $this; } public function hasCustomTemplate() { return (true === $this->customTemplate); } public function setTemplate($template) { $this->customTemplate = true; if (isset(static::$defaultTemplates[$this->mode][$template])) { $template = static::$defaultTemplates[$this->mode][$template]; } $this->template = $template; $this->buildMessage(); return $this; } private function buildMessage() { $this->message = $this->getMainMessage(); } protected function buildTemplate() { $templateKey = $this->chooseTemplate(); return static::$defaultTemplates[$this->mode][$templateKey]; } public function guessId() { if (!empty($this->id) && $this->id != 'validation') { return $this->id; } $pieces = explode('\\', get_called_class()); $exceptionClassShortName = end($pieces); $ruleClassShortName = str_replace('Exception', '', $exceptionClassShortName); $ruleName = lcfirst($ruleClassShortName); return $ruleName; } } Validation-1.1.29/library/Exceptions/VersionException.php000066400000000000000000000011411336766562500235200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class VersionException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a version', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a version', ], ]; } Validation-1.1.29/library/Exceptions/VideoUrlException.php000066400000000000000000000020051336766562500236240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class VideoUrlException extends ValidationException { const SERVICE = 1; public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be a valid video URL', self::SERVICE => '{{name}} must be a valid {{service}} video URL', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be a valid video URL', self::SERVICE => '{{name}} must not be a valid {{service}} video URL', ], ]; /** * {@inheritdoc} */ public function chooseTemplate() { if (false !== $this->getParam('service')) { return self::SERVICE; } return static::STANDARD; } } Validation-1.1.29/library/Exceptions/VowelException.php000066400000000000000000000014251336766562500231740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class VowelException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must contain only vowels', self::EXTRA => '{{name}} must contain only vowels and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain vowels', self::EXTRA => '{{name}} must not contain vowels or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/WhenException.php000066400000000000000000000011541336766562500230000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class WhenException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => 'Data validation failed for {{name}}', ], self::MODE_NEGATIVE => [ self::STANDARD => 'Data validation failed for {{name}}', ], ]; } Validation-1.1.29/library/Exceptions/WritableException.php000066400000000000000000000011401336766562500236430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class WritableException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} must be writable', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not be writable', ], ]; } Validation-1.1.29/library/Exceptions/XdigitException.php000066400000000000000000000014741336766562500233340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class XdigitException extends AlphaException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} contain only hexadecimal digits', self::EXTRA => '{{name}} contain only hexadecimal digits and "{{additionalChars}}"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} must not contain hexadecimal digits', self::EXTRA => '{{name}} must not contain hexadecimal digits or "{{additionalChars}}"', ], ]; } Validation-1.1.29/library/Exceptions/YesException.php000066400000000000000000000011471336766562500226410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class YesException extends ValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}} is not considered as "Yes"', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}} is considered as "Yes"', ], ]; } Validation-1.1.29/library/Exceptions/ZendException.php000066400000000000000000000010741336766562500230000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; class ZendException extends NestedValidationException { public static $defaultTemplates = [ self::MODE_DEFAULT => [ self::STANDARD => '{{name}}', ], self::MODE_NEGATIVE => [ self::STANDARD => '{{name}}', ], ]; } Validation-1.1.29/library/Factory.php000066400000000000000000000034201336766562500175040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation; use ReflectionClass; use Respect\Validation\Exceptions\ComponentException; class Factory { protected $rulePrefixes = ['Respect\\Validation\\Rules\\']; public function getRulePrefixes() { return $this->rulePrefixes; } private function filterRulePrefix($rulePrefix) { $namespaceSeparator = '\\'; $rulePrefix = rtrim($rulePrefix, $namespaceSeparator); return $rulePrefix.$namespaceSeparator; } public function appendRulePrefix($rulePrefix) { array_push($this->rulePrefixes, $this->filterRulePrefix($rulePrefix)); } public function prependRulePrefix($rulePrefix) { array_unshift($this->rulePrefixes, $this->filterRulePrefix($rulePrefix)); } public function rule($ruleName, array $arguments = []) { if ($ruleName instanceof Validatable) { return $ruleName; } foreach ($this->getRulePrefixes() as $prefix) { $className = $prefix.ucfirst($ruleName); if (!class_exists($className)) { continue; } $reflection = new ReflectionClass($className); if (!$reflection->isSubclassOf('Respect\\Validation\\Validatable')) { throw new ComponentException(sprintf('"%s" is not a valid respect rule', $className)); } return $reflection->newInstanceArgs($arguments); } throw new ComponentException(sprintf('"%s" is not a valid rule name', $ruleName)); } } Validation-1.1.29/library/Rules/000077500000000000000000000000001336766562500164575ustar00rootroot00000000000000Validation-1.1.29/library/Rules/AbstractComposite.php000066400000000000000000000067661336766562500226350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\NestedValidationException; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; use Respect\Validation\Validator; abstract class AbstractComposite extends AbstractRule { protected $rules = []; public function __construct() { $this->addRules(func_get_args()); } public function setName($name) { $parentName = $this->getName(); foreach ($this->rules as $rule) { $ruleName = $rule->getName(); if ($ruleName && $parentName !== $ruleName) { continue; } $rule->setName($name); } return parent::setName($name); } public function addRule($validator, $arguments = []) { if (!$validator instanceof Validatable) { $this->appendRule(Validator::buildRule($validator, $arguments)); } else { $this->appendRule($validator); } return $this; } public function removeRules() { $this->rules = []; } public function addRules(array $validators) { foreach ($validators as $key => $spec) { if ($spec instanceof Validatable) { $this->appendRule($spec); } elseif (is_numeric($key) && is_array($spec)) { $this->addRules($spec); } elseif (is_array($spec)) { $this->addRule($key, $spec); } else { $this->addRule($spec); } } return $this; } public function getRules() { return $this->rules; } public function hasRule($validator) { if (empty($this->rules)) { return false; } if ($validator instanceof Validatable) { return isset($this->rules[spl_object_hash($validator)]); } if (is_string($validator)) { foreach ($this->rules as $rule) { if (get_class($rule) == __NAMESPACE__.'\\'.$validator) { return true; } } } return false; } protected function appendRule(Validatable $validator) { if (!$validator->getName() && $this->getName()) { $validator->setName($this->getName()); } $this->rules[spl_object_hash($validator)] = $validator; } protected function validateRules($input) { $exceptions = []; foreach ($this->getRules() as $rule) { try { $rule->assert($input); } catch (ValidationException $exception) { $exceptions[] = $exception; $this->setExceptionTemplate($exception); } } return $exceptions; } private function setExceptionTemplate(ValidationException $exception) { if (null === $this->template || $exception->hasCustomTemplate()) { return; } $exception->setTemplate($this->template); if (!$exception instanceof NestedValidationException) { return; } foreach ($exception->getRelated() as $relatedException) { $this->setExceptionTemplate($relatedException); } } } Validation-1.1.29/library/Rules/AbstractCtypeRule.php000066400000000000000000000013741336766562500225750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; abstract class AbstractCtypeRule extends AbstractFilterRule { abstract protected function ctypeFunction($input); protected function filterWhiteSpaceOption($input) { if (!empty($this->additionalChars)) { $input = str_replace(str_split($this->additionalChars), '', $input); } return preg_replace('/\s/', '', $input); } public function validateClean($input) { return $this->ctypeFunction($input); } } Validation-1.1.29/library/Rules/AbstractFilterRule.php000066400000000000000000000023411336766562500227310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; abstract class AbstractFilterRule extends AbstractRule { public $additionalChars = ''; abstract protected function validateClean($input); public function __construct($additionalChars = '') { if (!is_string($additionalChars)) { throw new ComponentException('Invalid list of additional characters to be loaded'); } $this->additionalChars .= $additionalChars; } protected function filter($input) { return str_replace(str_split($this->additionalChars), '', $input); } public function validate($input) { if (!is_scalar($input)) { return false; } $stringInput = (string) $input; if ('' === $stringInput) { return false; } $cleanInput = $this->filter($stringInput); return $cleanInput === '' || $this->validateClean($cleanInput); } } Validation-1.1.29/library/Rules/AbstractInterval.php000066400000000000000000000021261336766562500224410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; use Exception; abstract class AbstractInterval extends AbstractRule { public $interval; public $inclusive; public function __construct($interval, $inclusive = true) { $this->interval = $interval; $this->inclusive = $inclusive; } protected function isAbleToCompareValues($left, $right) { return is_scalar($left) === is_scalar($right); } protected function filterInterval($value) { if (!is_string($value) || is_numeric($value) || empty($value)) { return $value; } if (strlen($value) == 1) { return $value; } try { return new DateTime($value); } catch (Exception $e) { // Pokémon Exception Handling } return $value; } } Validation-1.1.29/library/Rules/AbstractRegexRule.php000066400000000000000000000010061336766562500225530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; abstract class AbstractRegexRule extends AbstractFilterRule { abstract protected function getPregFormat(); public function validateClean($input) { return preg_match($this->getPregFormat(), $input); } } Validation-1.1.29/library/Rules/AbstractRelated.php000066400000000000000000000047251336766562500222440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; abstract class AbstractRelated extends AbstractRule { public $mandatory = true; public $reference = ''; public $validator; abstract public function hasReference($input); abstract public function getReferenceValue($input); public function __construct($reference, Validatable $validator = null, $mandatory = true) { $this->setName($reference); if ($validator && !$validator->getName()) { $validator->setName($reference); } $this->reference = $reference; $this->validator = $validator; $this->mandatory = $mandatory; } public function setName($name) { parent::setName($name); if ($this->validator instanceof Validatable) { $this->validator->setName($name); } return $this; } private function decision($type, $hasReference, $input) { return (!$this->mandatory && !$hasReference) || (is_null($this->validator) || $this->validator->$type($this->getReferenceValue($input))); } public function assert($input) { $hasReference = $this->hasReference($input); if ($this->mandatory && !$hasReference) { throw $this->reportError($input, ['hasReference' => false]); } try { return $this->decision('assert', $hasReference, $input); } catch (ValidationException $e) { throw $this ->reportError($this->reference, ['hasReference' => true]) ->addRelated($e); } } public function check($input) { $hasReference = $this->hasReference($input); if ($this->mandatory && !$hasReference) { throw $this->reportError($input, ['hasReference' => false]); } return $this->decision('check', $hasReference, $input); } public function validate($input) { $hasReference = $this->hasReference($input); if ($this->mandatory && !$hasReference) { return false; } return $this->decision('validate', $hasReference, $input); } } Validation-1.1.29/library/Rules/AbstractRule.php000066400000000000000000000035661336766562500215750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; abstract class AbstractRule implements Validatable { protected $name; protected $template; public function __invoke($input) { return $this->validate($input); } public function assert($input) { if ($this->validate($input)) { return true; } throw $this->reportError($input); } public function check($input) { return $this->assert($input); } public function getName() { return $this->name; } public function reportError($input, array $extraParams = []) { $exception = $this->createException(); $name = $this->name ?: ValidationException::stringify($input); $params = array_merge( get_class_vars(__CLASS__), get_object_vars($this), $extraParams, compact('input') ); $exception->configure($name, $params); if (!is_null($this->template)) { $exception->setTemplate($this->template); } return $exception; } public function setName($name) { $this->name = $name; return $this; } public function setTemplate($template) { $this->template = $template; return $this; } protected function createException() { $currentFqn = get_called_class(); $exceptionFqn = str_replace('\\Rules\\', '\\Exceptions\\', $currentFqn); $exceptionFqn .= 'Exception'; return new $exceptionFqn(); } } Validation-1.1.29/library/Rules/AbstractSearcher.php000066400000000000000000000024761336766562500224210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; abstract class AbstractSearcher extends AbstractRule { public $haystack; public $compareIdentical; protected function validateEquals($input) { if (is_array($this->haystack)) { return in_array($input, $this->haystack); } if ($input === null || $input === '') { return ($input == $this->haystack); } return (false !== mb_stripos($this->haystack, $input, 0, mb_detect_encoding($input))); } protected function validateIdentical($input) { if (is_array($this->haystack)) { return in_array($input, $this->haystack, true); } if ($input === null || $input === '') { return ($input === $this->haystack); } return (false !== mb_strpos($this->haystack, $input, 0, mb_detect_encoding($input))); } public function validate($input) { if ($this->compareIdentical) { return $this->validateIdentical($input); } return $this->validateEquals($input); } } Validation-1.1.29/library/Rules/AbstractWrapper.php000066400000000000000000000021741336766562500223000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Validatable; abstract class AbstractWrapper extends AbstractRule { protected $validatable; public function getValidatable() { if (!$this->validatable instanceof Validatable) { throw new ComponentException('There is no defined validatable'); } return $this->validatable; } public function assert($input) { return $this->getValidatable()->assert($input); } public function check($input) { return $this->getValidatable()->check($input); } public function validate($input) { return $this->getValidatable()->validate($input); } public function setName($name) { $this->getValidatable()->setName($name); return parent::setName($name); } } Validation-1.1.29/library/Rules/Age.php000066400000000000000000000032651336766562500176720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; use Respect\Validation\Exceptions\ComponentException; class Age extends AllOf { public $minAge; public $maxAge; public function __construct($minAge = null, $maxAge = null) { if (null === $minAge && null === $maxAge) { throw new ComponentException('An age interval must be provided'); } if (null !== $minAge && null !== $maxAge && $maxAge <= $minAge) { throw new ComponentException(sprintf('%d cannot be greater than or equals to %d', $minAge, $maxAge)); } $this->setMinAge($minAge); $this->setMaxAge($maxAge); } private function createDateTimeFromAge($age) { $interval = sprintf('-%d years', $age); return new DateTime($interval); } private function setMaxAge($maxAge) { $this->maxAge = $maxAge; if (null === $maxAge) { return; } $minDate = $this->createDateTimeFromAge($maxAge); $minDate->setTime(0, 0, 0); $minRule = new Min($minDate, true); $this->addRule($minRule); } private function setMinAge($minAge) { $this->minAge = $minAge; if (null === $minAge) { return; } $maxDate = $this->createDateTimeFromAge($minAge); $maxDate->setTime(23, 59, 59); $maxRule = new Max($maxDate, true); $this->addRule($maxRule); } } Validation-1.1.29/library/Rules/AllOf.php000066400000000000000000000022611336766562500201660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AllOf extends AbstractComposite { public function assert($input) { $exceptions = $this->validateRules($input); $numRules = count($this->rules); $numExceptions = count($exceptions); $summary = [ 'total' => $numRules, 'failed' => $numExceptions, 'passed' => $numRules - $numExceptions, ]; if (!empty($exceptions)) { throw $this->reportError($input, $summary)->setRelated($exceptions); } return true; } public function check($input) { foreach ($this->getRules() as $rule) { $rule->check($input); } return true; } public function validate($input) { foreach ($this->getRules() as $rule) { if (!$rule->validate($input)) { return false; } } return true; } } Validation-1.1.29/library/Rules/Alnum.php000066400000000000000000000010231336766562500202400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Alnum extends AbstractCtypeRule { protected function filter($input) { return $this->filterWhiteSpaceOption($input); } protected function ctypeFunction($input) { return ctype_alnum($input); } } Validation-1.1.29/library/Rules/Alpha.php000066400000000000000000000010231336766562500202110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Alpha extends AbstractCtypeRule { protected function filter($input) { return $this->filterWhiteSpaceOption($input); } protected function ctypeFunction($input) { return ctype_alpha($input); } } Validation-1.1.29/library/Rules/AlwaysInvalid.php000066400000000000000000000006271336766562500217440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AlwaysInvalid extends AbstractRule { public function validate($input) { return false; } } Validation-1.1.29/library/Rules/AlwaysValid.php000066400000000000000000000006241336766562500214120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AlwaysValid extends AbstractRule { public function validate($input) { return true; } } Validation-1.1.29/library/Rules/ArrayType.php000066400000000000000000000006361336766562500211150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class ArrayType extends AbstractRule { public function validate($input) { return is_array($input); } } Validation-1.1.29/library/Rules/ArrayVal.php000066400000000000000000000006771336766562500207230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class ArrayVal extends AbstractRule { public function validate($input) { return is_array($input) || $input instanceof \ArrayAccess; } } Validation-1.1.29/library/Rules/Attribute.php000066400000000000000000000021551336766562500211360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ReflectionProperty; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Validatable; class Attribute extends AbstractRelated { public function __construct($reference, Validatable $validator = null, $mandatory = true) { if (!is_string($reference) || empty($reference)) { throw new ComponentException('Invalid attribute/property name'); } parent::__construct($reference, $validator, $mandatory); } public function getReferenceValue($input) { $propertyMirror = new ReflectionProperty($input, $this->reference); $propertyMirror->setAccessible(true); return $propertyMirror->getValue($input); } public function hasReference($input) { return is_object($input) && property_exists($input, $this->reference); } } Validation-1.1.29/library/Rules/Bank.php000066400000000000000000000014441336766562500200460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Rules\Locale\Factory; class Bank extends AbstractWrapper { /** * Defines the country code. * * The country code is not case sensitive. * * @param string $countryCode The ISO 639-1 country code. * @param Factory $factory */ public function __construct($countryCode, Factory $factory = null) { if (null === $factory) { $factory = new Factory(); } $this->validatable = $factory->bank($countryCode); } } Validation-1.1.29/library/Rules/BankAccount.php000066400000000000000000000015661336766562500213700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Rules\Locale\Factory; class BankAccount extends AbstractWrapper { /** * Defines the country code and bank. * * The country code is not case sensitive. * * @param string $countryCode The ISO 639-1 country code. * @param string $bank The bank. * @param Factory $factory */ public function __construct($countryCode, $bank, Factory $factory = null) { if (null === $factory) { $factory = new Factory(); } $this->validatable = $factory->bankAccount($countryCode, $bank); } } Validation-1.1.29/library/Rules/Base.php000066400000000000000000000020031336766562500200350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\BaseException; class Base extends AbstractRule { public $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; public $base; public function __construct($base = null, $chars = null) { if (!is_null($chars)) { $this->chars = $chars; } $max = strlen($this->chars); if (!is_numeric($base) || $base > $max) { throw new BaseException(sprintf('a base between 1 and %s is required', $max)); } $this->base = $base; } public function validate($input) { $valid = substr($this->chars, 0, $this->base); return (boolean) preg_match("@^[$valid]+$@", (string) $input); } } Validation-1.1.29/library/Rules/Between.php000066400000000000000000000016651336766562500205710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Between extends AllOf { public $minValue; public $maxValue; public function __construct($min = null, $max = null, $inclusive = true) { $this->minValue = $min; $this->maxValue = $max; if (!is_null($min) && !is_null($max) && $min > $max) { throw new ComponentException(sprintf('%s cannot be less than %s for validation', $min, $max)); } if (!is_null($min)) { $this->addRule(new Min($min, $inclusive)); } if (!is_null($max)) { $this->addRule(new Max($max, $inclusive)); } } } Validation-1.1.29/library/Rules/Bic.php000066400000000000000000000014421336766562500176660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Rules\Locale\Factory; class Bic extends AbstractWrapper { /** * Defines the country code. * * The country code is not case sensitive. * * @param string $countryCode The ISO 639-1 country code. * @param Factory $factory */ public function __construct($countryCode, Factory $factory = null) { if (null === $factory) { $factory = new Factory(); } $this->validatable = $factory->bic($countryCode); } } Validation-1.1.29/library/Rules/BoolType.php000066400000000000000000000006341336766562500207300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class BoolType extends AbstractRule { public function validate($input) { return is_bool($input); } } Validation-1.1.29/library/Rules/BoolVal.php000066400000000000000000000007271336766562500205340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class BoolVal extends AbstractRule { public function validate($input) { return is_bool(filter_var($input, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); } } Validation-1.1.29/library/Rules/Bsn.php000066400000000000000000000016011336766562500177100ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * Validates a Dutch citizen service number (BSN). * * @author Ronald Drenth * * @see https://nl.wikipedia.org/wiki/Burgerservicenummer */ class Bsn extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { if (!ctype_digit($input)) { return false; } if (strlen($input) !== 9) { return false; } $sum = -1 * $input[8]; for ($i = 9; $i > 1; --$i) { $sum += $i * $input[9 - $i]; } return $sum !== 0 && $sum % 11 === 0; } } Validation-1.1.29/library/Rules/Call.php000066400000000000000000000010521336766562500200410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Call extends AbstractRelated { public function getReferenceValue($input) { return call_user_func_array($this->reference, [&$input]); } public function hasReference($input) { return is_callable($this->reference); } } Validation-1.1.29/library/Rules/CallableType.php000066400000000000000000000010051336766562500215250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Henrique Moody */ class CallableType extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { return is_callable($input); } } Validation-1.1.29/library/Rules/Callback.php000066400000000000000000000016601336766562500206670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Callback extends AbstractRule { public $callback; public $arguments; public function __construct($callback) { if (!is_callable($callback)) { throw new ComponentException('Invalid callback'); } $arguments = func_get_args(); array_shift($arguments); $this->callback = $callback; $this->arguments = $arguments; } public function validate($input) { $params = $this->arguments; array_unshift($params, $input); return (bool) call_user_func_array($this->callback, $params); } } Validation-1.1.29/library/Rules/Charset.php000066400000000000000000000020541336766562500205620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Charset extends AbstractRule { public $charset = null; public function __construct($charset) { $available = mb_list_encodings(); $charset = is_array($charset) ? $charset : [$charset]; $charset = array_filter($charset, function ($c) use ($available) { return in_array($c, $available, true); }); if (!$charset) { throw new ComponentException( 'Invalid charset' ); } $this->charset = $charset; } public function validate($input) { $detectedEncoding = mb_detect_encoding($input, $this->charset, true); return in_array($detectedEncoding, $this->charset, true); } } Validation-1.1.29/library/Rules/Cnh.php000066400000000000000000000022651336766562500177050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Cnh extends AbstractRule { public function validate($input) { if (!is_scalar($input)) { return false; } // Canonicalize input $input = preg_replace('{\D}', '', (string) $input); // Validate length and invalid numbers if ((strlen($input) != 11) || (intval($input) == 0)) { return false; } // Validate check digits using a modulus 11 algorithm for ($c = $s1 = $s2 = 0, $p = 9; $c < 9; $c++, $p--) { $s1 += intval($input[$c]) * $p; $s2 += intval($input[$c]) * (10 - $p); } if ($input[9] != (($dv1 = $s1 % 11) > 9) ? 0 : $dv1) { return false; } if ($input[10] != (((($dv2 = ($s2 % 11) - (($dv1 > 9) ? 2 : 0)) < 0) ? $dv2 + 11 : $dv2) > 9) ? 0 : $dv2) { return false; } return true; } } Validation-1.1.29/library/Rules/Cnpj.php000066400000000000000000000021501336766562500200600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Cnpj extends AbstractRule { public function validate($input) { if (!is_scalar($input)) { return false; } // Code ported from jsfromhell.com $cleanInput = preg_replace('/\D/', '', $input); $b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]; if ($cleanInput < 1) { return false; } if (mb_strlen($cleanInput) != 14) { return false; } for ($i = 0, $n = 0; $i < 12; $n += $cleanInput[$i] * $b[++$i]); if ($cleanInput[12] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { return false; } for ($i = 0, $n = 0; $i <= 12; $n += $cleanInput[$i] * $b[$i++]); if ($cleanInput[13] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { return false; } return true; } } Validation-1.1.29/library/Rules/Cntrl.php000066400000000000000000000006521336766562500202550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Cntrl extends AbstractCtypeRule { protected function ctypeFunction($input) { return ctype_cntrl($input); } } Validation-1.1.29/library/Rules/Consonant.php000066400000000000000000000007011336766562500211300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Consonant extends AbstractRegexRule { protected function getPregFormat() { return '/^(\s|[b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z])*$/'; } } Validation-1.1.29/library/Rules/Contains.php000066400000000000000000000023621336766562500207510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Contains extends AbstractRule { public $containsValue; public $identical; public function __construct($containsValue, $identical = false) { $this->containsValue = $containsValue; $this->identical = $identical; } public function validate($input) { if ($this->identical) { return $this->validateIdentical($input); } return $this->validateEquals($input); } protected function validateEquals($input) { if (is_array($input)) { return in_array($this->containsValue, $input); } return false !== mb_stripos($input, $this->containsValue, 0, mb_detect_encoding($input)); } protected function validateIdentical($input) { if (is_array($input)) { return in_array($this->containsValue, $input, true); } return false !== mb_strpos($input, $this->containsValue, 0, mb_detect_encoding($input)); } } Validation-1.1.29/library/Rules/Countable.php000066400000000000000000000006761336766562500211150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Countable extends AbstractRule { public function validate($input) { return is_array($input) || $input instanceof \Countable; } } Validation-1.1.29/library/Rules/CountryCode.php000066400000000000000000000306541336766562500214360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; /** * Validates countries in ISO 3166-1. */ class CountryCode extends AbstractRule { const ALPHA2 = 'alpha-2'; const ALPHA3 = 'alpha-3'; const NUMERIC = 'numeric'; /** * @link http://download.geonames.org/export/dump/countryInfo.txt * * @var array */ protected $countryCodeList = [ ['AD', 'AND', '020'], // Andorra ['AE', 'ARE', '784'], // United Arab Emirates ['AF', 'AFG', '004'], // Afghanistan ['AG', 'ATG', '028'], // Antigua and Barbuda ['AI', 'AIA', '660'], // Anguilla ['AL', 'ALB', '008'], // Albania ['AM', 'ARM', '051'], // Armenia ['AN', 'ANT', '530'], // Netherlands Antilles ['AO', 'AGO', '024'], // Angola ['AQ', 'ATA', '010'], // Antarctica ['AR', 'ARG', '032'], // Argentina ['AS', 'ASM', '016'], // American Samoa ['AT', 'AUT', '040'], // Austria ['AU', 'AUS', '036'], // Australia ['AW', 'ABW', '533'], // Aruba ['AX', 'ALA', '248'], // Aland Islands ['AZ', 'AZE', '031'], // Azerbaijan ['BA', 'BIH', '070'], // Bosnia and Herzegovina ['BB', 'BRB', '052'], // Barbados ['BD', 'BGD', '050'], // Bangladesh ['BE', 'BEL', '056'], // Belgium ['BF', 'BFA', '854'], // Burkina Faso ['BG', 'BGR', '100'], // Bulgaria ['BH', 'BHR', '048'], // Bahrain ['BI', 'BDI', '108'], // Burundi ['BJ', 'BEN', '204'], // Benin ['BL', 'BLM', '652'], // Saint Barthelemy ['BM', 'BMU', '060'], // Bermuda ['BN', 'BRN', '096'], // Brunei ['BO', 'BOL', '068'], // Bolivia ['BQ', 'BES', '535'], // Bonaire, Saint Eustatius and Saba ['BR', 'BRA', '076'], // Brazil ['BS', 'BHS', '044'], // Bahamas ['BT', 'BTN', '064'], // Bhutan ['BV', 'BVT', '074'], // Bouvet Island ['BW', 'BWA', '072'], // Botswana ['BY', 'BLR', '112'], // Belarus ['BZ', 'BLZ', '084'], // Belize ['CA', 'CAN', '124'], // Canada ['CC', 'CCK', '166'], // Cocos Islands ['CD', 'COD', '180'], // Democratic Republic of the Congo ['CF', 'CAF', '140'], // Central African Republic ['CG', 'COG', '178'], // Republic of the Congo ['CH', 'CHE', '756'], // Switzerland ['CI', 'CIV', '384'], // Ivory Coast ['CK', 'COK', '184'], // Cook Islands ['CL', 'CHL', '152'], // Chile ['CM', 'CMR', '120'], // Cameroon ['CN', 'CHN', '156'], // China ['CO', 'COL', '170'], // Colombia ['CR', 'CRI', '188'], // Costa Rica ['CS', 'SCG', '891'], // Serbia and Montenegro ['CU', 'CUB', '192'], // Cuba ['CV', 'CPV', '132'], // Cape Verde ['CW', 'CUW', '531'], // Curacao ['CX', 'CXR', '162'], // Christmas Island ['CY', 'CYP', '196'], // Cyprus ['CZ', 'CZE', '203'], // Czech Republic ['DE', 'DEU', '276'], // Germany ['DJ', 'DJI', '262'], // Djibouti ['DK', 'DNK', '208'], // Denmark ['DM', 'DMA', '212'], // Dominica ['DO', 'DOM', '214'], // Dominican Republic ['DZ', 'DZA', '012'], // Algeria ['EC', 'ECU', '218'], // Ecuador ['EE', 'EST', '233'], // Estonia ['EG', 'EGY', '818'], // Egypt ['EH', 'ESH', '732'], // Western Sahara ['ER', 'ERI', '232'], // Eritrea ['ES', 'ESP', '724'], // Spain ['ET', 'ETH', '231'], // Ethiopia ['FI', 'FIN', '246'], // Finland ['FJ', 'FJI', '242'], // Fiji ['FK', 'FLK', '238'], // Falkland Islands ['FM', 'FSM', '583'], // Micronesia ['FO', 'FRO', '234'], // Faroe Islands ['FR', 'FRA', '250'], // France ['GA', 'GAB', '266'], // Gabon ['GB', 'GBR', '826'], // United Kingdom ['GD', 'GRD', '308'], // Grenada ['GE', 'GEO', '268'], // Georgia ['GF', 'GUF', '254'], // French Guiana ['GG', 'GGY', '831'], // Guernsey ['GH', 'GHA', '288'], // Ghana ['GI', 'GIB', '292'], // Gibraltar ['GL', 'GRL', '304'], // Greenland ['GM', 'GMB', '270'], // Gambia ['GN', 'GIN', '324'], // Guinea ['GP', 'GLP', '312'], // Guadeloupe ['GQ', 'GNQ', '226'], // Equatorial Guinea ['GR', 'GRC', '300'], // Greece ['GS', 'SGS', '239'], // South Georgia and the South Sandwich Islands ['GT', 'GTM', '320'], // Guatemala ['GU', 'GUM', '316'], // Guam ['GW', 'GNB', '624'], // Guinea-Bissau ['GY', 'GUY', '328'], // Guyana ['HK', 'HKG', '344'], // Hong Kong ['HM', 'HMD', '334'], // Heard Island and McDonald Islands ['HN', 'HND', '340'], // Honduras ['HR', 'HRV', '191'], // Croatia ['HT', 'HTI', '332'], // Haiti ['HU', 'HUN', '348'], // Hungary ['ID', 'IDN', '360'], // Indonesia ['IE', 'IRL', '372'], // Ireland ['IL', 'ISR', '376'], // Israel ['IM', 'IMN', '833'], // Isle of Man ['IN', 'IND', '356'], // India ['IO', 'IOT', '086'], // British Indian Ocean Territory ['IQ', 'IRQ', '368'], // Iraq ['IR', 'IRN', '364'], // Iran ['IS', 'ISL', '352'], // Iceland ['IT', 'ITA', '380'], // Italy ['JE', 'JEY', '832'], // Jersey ['JM', 'JAM', '388'], // Jamaica ['JO', 'JOR', '400'], // Jordan ['JP', 'JPN', '392'], // Japan ['KE', 'KEN', '404'], // Kenya ['KG', 'KGZ', '417'], // Kyrgyzstan ['KH', 'KHM', '116'], // Cambodia ['KI', 'KIR', '296'], // Kiribati ['KM', 'COM', '174'], // Comoros ['KN', 'KNA', '659'], // Saint Kitts and Nevis ['KP', 'PRK', '408'], // North Korea ['KR', 'KOR', '410'], // South Korea ['KW', 'KWT', '414'], // Kuwait ['KY', 'CYM', '136'], // Cayman Islands ['KZ', 'KAZ', '398'], // Kazakhstan ['LA', 'LAO', '418'], // Laos ['LB', 'LBN', '422'], // Lebanon ['LC', 'LCA', '662'], // Saint Lucia ['LI', 'LIE', '438'], // Liechtenstein ['LK', 'LKA', '144'], // Sri Lanka ['LR', 'LBR', '430'], // Liberia ['LS', 'LSO', '426'], // Lesotho ['LT', 'LTU', '440'], // Lithuania ['LU', 'LUX', '442'], // Luxembourg ['LV', 'LVA', '428'], // Latvia ['LY', 'LBY', '434'], // Libya ['MA', 'MAR', '504'], // Morocco ['MC', 'MCO', '492'], // Monaco ['MD', 'MDA', '498'], // Moldova ['ME', 'MNE', '499'], // Montenegro ['MF', 'MAF', '663'], // Saint Martin ['MG', 'MDG', '450'], // Madagascar ['MH', 'MHL', '584'], // Marshall Islands ['MK', 'MKD', '807'], // Macedonia ['ML', 'MLI', '466'], // Mali ['MM', 'MMR', '104'], // Myanmar ['MN', 'MNG', '496'], // Mongolia ['MO', 'MAC', '446'], // Macao ['MP', 'MNP', '580'], // Northern Mariana Islands ['MQ', 'MTQ', '474'], // Martinique ['MR', 'MRT', '478'], // Mauritania ['MS', 'MSR', '500'], // Montserrat ['MT', 'MLT', '470'], // Malta ['MU', 'MUS', '480'], // Mauritius ['MV', 'MDV', '462'], // Maldives ['MW', 'MWI', '454'], // Malawi ['MX', 'MEX', '484'], // Mexico ['MY', 'MYS', '458'], // Malaysia ['MZ', 'MOZ', '508'], // Mozambique ['NA', 'NAM', '516'], // Namibia ['NC', 'NCL', '540'], // New Caledonia ['NE', 'NER', '562'], // Niger ['NF', 'NFK', '574'], // Norfolk Island ['NG', 'NGA', '566'], // Nigeria ['NI', 'NIC', '558'], // Nicaragua ['NL', 'NLD', '528'], // Netherlands ['NO', 'NOR', '578'], // Norway ['NP', 'NPL', '524'], // Nepal ['NR', 'NRU', '520'], // Nauru ['NU', 'NIU', '570'], // Niue ['NZ', 'NZL', '554'], // New Zealand ['OM', 'OMN', '512'], // Oman ['PA', 'PAN', '591'], // Panama ['PE', 'PER', '604'], // Peru ['PF', 'PYF', '258'], // French Polynesia ['PG', 'PNG', '598'], // Papua New Guinea ['PH', 'PHL', '608'], // Philippines ['PK', 'PAK', '586'], // Pakistan ['PL', 'POL', '616'], // Poland ['PM', 'SPM', '666'], // Saint Pierre and Miquelon ['PN', 'PCN', '612'], // Pitcairn ['PR', 'PRI', '630'], // Puerto Rico ['PS', 'PSE', '275'], // Palestinian Territory ['PT', 'PRT', '620'], // Portugal ['PW', 'PLW', '585'], // Palau ['PY', 'PRY', '600'], // Paraguay ['QA', 'QAT', '634'], // Qatar ['RE', 'REU', '638'], // Reunion ['RO', 'ROU', '642'], // Romania ['RS', 'SRB', '688'], // Serbia ['RU', 'RUS', '643'], // Russia ['RW', 'RWA', '646'], // Rwanda ['SA', 'SAU', '682'], // Saudi Arabia ['SB', 'SLB', '090'], // Solomon Islands ['SC', 'SYC', '690'], // Seychelles ['SD', 'SDN', '729'], // Sudan ['SE', 'SWE', '752'], // Sweden ['SG', 'SGP', '702'], // Singapore ['SH', 'SHN', '654'], // Saint Helena ['SI', 'SVN', '705'], // Slovenia ['SJ', 'SJM', '744'], // Svalbard and Jan Mayen ['SK', 'SVK', '703'], // Slovakia ['SL', 'SLE', '694'], // Sierra Leone ['SM', 'SMR', '674'], // San Marino ['SN', 'SEN', '686'], // Senegal ['SO', 'SOM', '706'], // Somalia ['SR', 'SUR', '740'], // Suriname ['SS', 'SSD', '728'], // South Sudan ['ST', 'STP', '678'], // Sao Tome and Principe ['SV', 'SLV', '222'], // El Salvador ['SX', 'SXM', '534'], // Sint Maarten ['SY', 'SYR', '760'], // Syria ['SZ', 'SWZ', '748'], // Swaziland ['TC', 'TCA', '796'], // Turks and Caicos Islands ['TD', 'TCD', '148'], // Chad ['TF', 'ATF', '260'], // French Southern Territories ['TG', 'TGO', '768'], // Togo ['TH', 'THA', '764'], // Thailand ['TJ', 'TJK', '762'], // Tajikistan ['TK', 'TKL', '772'], // Tokelau ['TL', 'TLS', '626'], // East Timor ['TM', 'TKM', '795'], // Turkmenistan ['TN', 'TUN', '788'], // Tunisia ['TO', 'TON', '776'], // Tonga ['TR', 'TUR', '792'], // Turkey ['TT', 'TTO', '780'], // Trinidad and Tobago ['TV', 'TUV', '798'], // Tuvalu ['TW', 'TWN', '158'], // Taiwan ['TZ', 'TZA', '834'], // Tanzania ['UA', 'UKR', '804'], // Ukraine ['UG', 'UGA', '800'], // Uganda ['UM', 'UMI', '581'], // United States Minor Outlying Islands ['US', 'USA', '840'], // United States ['UY', 'URY', '858'], // Uruguay ['UZ', 'UZB', '860'], // Uzbekistan ['VA', 'VAT', '336'], // Vatican ['VC', 'VCT', '670'], // Saint Vincent and the Grenadines ['VE', 'VEN', '862'], // Venezuela ['VG', 'VGB', '092'], // British Virgin Islands ['VI', 'VIR', '850'], // U.S. Virgin Islands ['VN', 'VNM', '704'], // Vietnam ['VU', 'VUT', '548'], // Vanuatu ['WF', 'WLF', '876'], // Wallis and Futuna ['WS', 'WSM', '882'], // Samoa ['XK', 'XKX', '0'], // Kosovo ['YE', 'YEM', '887'], // Yemen ['YT', 'MYT', '175'], // Mayotte ['ZA', 'ZAF', '710'], // South Africa ['ZM', 'ZMB', '894'], // Zambia ['ZW', 'ZWE', '716'], // Zimbabwe ]; public $set; public $index; public function __construct($set = self::ALPHA2) { $index = array_search($set, self::getAvailableSets(), true); if (false === $index) { throw new ComponentException(sprintf('"%s" is not a valid country set for ISO 3166-1', $set)); } $this->set = $set; $this->index = $index; } public static function getAvailableSets() { return [ self::ALPHA2, self::ALPHA3, self::NUMERIC, ]; } private function getCountryCodeList($index) { $countryList = []; foreach ($this->countryCodeList as $country) { $countryList[] = $country[$index]; } return $countryList; } public function validate($input) { return in_array( strtoupper($input), $this->getCountryCodeList($this->index), true ); } } Validation-1.1.29/library/Rules/Cpf.php000066400000000000000000000016361336766562500177060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Cpf extends AbstractRule { public function validate($input) { // Code ported from jsfromhell.com $c = preg_replace('/\D/', '', $input); if (strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) { return false; } for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--); if ($c[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { return false; } for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--); if ($c[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { return false; } return true; } } Validation-1.1.29/library/Rules/CreditCard.php000066400000000000000000000055651336766562500212070ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class CreditCard extends AbstractRule { const AMERICAN_EXPRESS = 'American Express'; const DINERS_CLUB = 'Diners Club'; const DISCOVER = 'Discover'; const JCB = 'JCB'; const MASTERCARD = 'MasterCard'; const VISA = 'Visa'; /** * @var string */ public $brand; /** * @var array */ private $brands = [ self::AMERICAN_EXPRESS => '/^3[47]\d{13}$/', self::DINERS_CLUB => '/^3(?:0[0-5]|[68]\d)\d{11}$/', self::DISCOVER => '/^6(?:011|5\d{2})\d{12}$/', self::JCB => '/^(?:2131|1800|35\d{3})\d{11}$/', self::MASTERCARD => '/^5[1-5]\d{14}$/', self::VISA => '/^4\d{12}(?:\d{3})?$/', ]; /** * @param string $brand Optional credit card brand. */ public function __construct($brand = null) { if (null !== $brand && !isset($this->brands[$brand])) { $brands = implode(', ', array_keys($this->brands)); $message = sprintf('"%s" is not a valid credit card brand (Available: %s).', $brand, $brands); throw new ComponentException($message); } $this->brand = $brand; } /** * {@inheritdoc} */ public function validate($input) { $input = preg_replace('([^0-9])', '', $input); if (empty($input)) { return false; } if (!$this->verifyMod10($input)) { return false; } return $this->verifyBrand($input); } /** * Returns whether the input matches the Luhn algorithm or not. * * @param string $input * * @return bool */ private function verifyMod10($input) { $sum = 0; $input = strrev($input); for ($i = 0; $i < strlen($input); ++$i) { $current = substr($input, $i, 1); if ($i % 2 == 1) { $current *= 2; if ($current > 9) { $firstDigit = $current % 10; $secondDigit = ($current - $firstDigit) / 10; $current = $firstDigit + $secondDigit; } } $sum += $current; } return $sum % 10 == 0; } /** * Returns whether the input matches the defined credit card brand or not. * * @param string $input * * @return bool */ private function verifyBrand($input) { if (null === $this->brand) { return true; } $pattern = $this->brands[$this->brand]; return preg_match($pattern, $input) > 0; } } Validation-1.1.29/library/Rules/CurrencyCode.php000066400000000000000000000144451336766562500215650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * Validates currency codes in ISO 4217. */ class CurrencyCode extends AbstractRule { /** * @link http://www.currency-iso.org/en/home/tables/table-a1.html * * @var array */ private $currencyCodes = [ 'AED', // UAE Dirham 'AFN', // Afghani 'ALL', // Lek 'AMD', // Armenian Dram 'ANG', // Netherlands Antillean Guilder 'AOA', // Kwanza 'ARS', // Argentine Peso 'AUD', // Australian Dollar 'AWG', // Aruban Florin 'AZN', // Azerbaijanian Manat 'BAM', // Convertible Mark 'BBD', // Barbados Dollar 'BDT', // Taka 'BGN', // Bulgarian Lev 'BHD', // Bahraini Dinar 'BIF', // Burundi Franc 'BMD', // Bermudian Dollar 'BND', // Brunei Dollar 'BOB', // Boliviano 'BOV', // Mvdol 'BRL', // Brazilian Real 'BSD', // Bahamian Dollar 'BTN', // Ngultrum 'BWP', // Pula 'BYN', // Belarussian Ruble 'BZD', // Belize Dollar 'CAD', // Canadian Dollar 'CDF', // Congolese Franc 'CHE', // WIR Euro 'CHF', // Swiss Franc 'CHW', // WIR Franc 'CLF', // Unidad de Fomento 'CLP', // Chilean Peso 'CNY', // Yuan Renminbi 'COP', // Colombian Peso 'COU', // Unidad de Valor Real 'CRC', // Costa Rican Colon 'CUC', // Peso Convertible 'CUP', // Cuban Peso 'CVE', // Cabo Verde Escudo 'CZK', // Czech Koruna 'DJF', // Djibouti Franc 'DKK', // Danish Krone 'DOP', // Dominican Peso 'DZD', // Algerian Dinar 'EGP', // Egyptian Pound 'ERN', // Nakfa 'ETB', // Ethiopian Birr 'EUR', // Euro 'FJD', // Fiji Dollar 'FKP', // Falkland Islands Pound 'GBP', // Pound Sterling 'GEL', // Lari 'GHS', // Ghana Cedi 'GIP', // Gibraltar Pound 'GMD', // Dalasi 'GNF', // Guinea Franc 'GTQ', // Quetzal 'GYD', // Guyana Dollar 'HKD', // Hong Kong Dollar 'HNL', // Lempira 'HRK', // Kuna 'HTG', // Gourde 'HUF', // Forint 'IDR', // Rupiah 'ILS', // New Israeli Sheqel 'INR', // Indian Rupee 'IQD', // Iraqi Dinar 'IRR', // Iranian Rial 'ISK', // Iceland Krona 'JMD', // Jamaican Dollar 'JOD', // Jordanian Dinar 'JPY', // Yen 'KES', // Kenyan Shilling 'KGS', // Som 'KHR', // Riel 'KMF', // Comoro Franc 'KPW', // North Korean Won 'KRW', // Won 'KWD', // Kuwaiti Dinar 'KYD', // Cayman Islands Dollar 'KZT', // Tenge 'LAK', // Kip 'LBP', // Lebanese Pound 'LKR', // Sri Lanka Rupee 'LRD', // Liberian Dollar 'LSL', // Loti 'LYD', // Libyan Dinar 'MAD', // Moroccan Dirham 'MDL', // Moldovan Leu 'MGA', // Malagasy Ariary 'MKD', // Denar 'MMK', // Kyat 'MNT', // Tugrik 'MOP', // Pataca 'MRO', // Ouguiya 'MUR', // Mauritius Rupee 'MVR', // Rufiyaa 'MWK', // Kwacha 'MXN', // Mexican Peso 'MXV', // Mexican Unidad de Inversion (UDI) 'MYR', // Malaysian Ringgit 'MZN', // Mozambique Metical 'NAD', // Namibia Dollar 'NGN', // Naira 'NIO', // Cordoba Oro 'NOK', // Norwegian Krone 'NPR', // Nepalese Rupee 'NZD', // New Zealand Dollar 'OMR', // Rial Omani 'PAB', // Balboa 'PEN', // Nuevo Sol 'PGK', // Kina 'PHP', // Philippine Peso 'PKR', // Pakistan Rupee 'PLN', // Zloty 'PYG', // Guarani 'QAR', // Qatari Rial 'RON', // Romanian Leu 'RSD', // Serbian Dinar 'RUB', // Russian Ruble 'RWF', // Rwanda Franc 'SAR', // Saudi Riyal 'SBD', // Solomon Islands Dollar 'SCR', // Seychelles Rupee 'SDG', // Sudanese Pound 'SEK', // Swedish Krona 'SGD', // Singapore Dollar 'SHP', // Saint Helena Pound 'SLL', // Leone 'SOS', // Somali Shilling 'SRD', // Surinam Dollar 'SSP', // South Sudanese Pound 'STD', // Dobra 'SVC', // El Salvador Colon 'SYP', // Syrian Pound 'SZL', // Lilangeni 'THB', // Baht 'TJS', // Somoni 'TMT', // Turkmenistan New Manat 'TND', // Tunisian Dinar 'TOP', // Pa’anga 'TRY', // Turkish Lira 'TTD', // Trinidad and Tobago Dollar 'TWD', // New Taiwan Dollar 'TZS', // Tanzanian Shilling 'UAH', // Hryvnia 'UGX', // Uganda Shilling 'USD', // US Dollar 'USN', // US Dollar (Next day) 'UYI', // Uruguay Peso en Unidades Indexadas (URUIURUI) 'UYU', // Peso Uruguayo 'UZS', // Uzbekistan Sum 'VEF', // Bolivar 'VND', // Dong 'VUV', // Vatu 'WST', // Tala 'XAF', // CFA Franc BEAC 'XAG', // Silver 'XAU', // Gold 'XBA', // Bond Markets Unit European Composite Unit (EURCO) 'XBB', // Bond Markets Unit European Monetary Unit (E.M.U.-6) 'XBC', // Bond Markets Unit European Unit of Account 9 (E.U.A.-9) 'XBD', // Bond Markets Unit European Unit of Account 17 (E.U.A.-17) 'XCD', // East Caribbean Dollar 'XDR', // SDR (Special Drawing Right) 'XOF', // CFA Franc BCEAO 'XPD', // Palladium 'XPF', // CFP Franc 'XPT', // Platinum 'XSU', // Sucre 'XTS', // Codes specifically reserved for testing purposes 'XUA', // ADB Unit of Account 'XXX', // The codes assigned for transactions where no currency is involved 'YER', // Yemeni Rial 'ZAR', // Rand 'ZMW', // Zambian Kwacha 'ZWL', // Zimbabwe Dollar ]; public function validate($input) { return in_array(strtoupper($input), $this->currencyCodes, true); } } Validation-1.1.29/library/Rules/Date.php000066400000000000000000000037771336766562500200630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; use DateTimeInterface; class Date extends AbstractRule { public $format = null; public function __construct($format = null) { $this->format = $format; } public function validate($input) { if ($input instanceof DateTimeInterface || $input instanceof DateTime) { return true; } if (!is_scalar($input)) { return false; } $inputString = (string) $input; if (is_null($this->format)) { return false !== strtotime($inputString); } $exceptionalFormats = [ 'c' => 'Y-m-d\TH:i:sP', 'r' => 'D, d M Y H:i:s O', ]; if (in_array($this->format, array_keys($exceptionalFormats))) { $this->format = $exceptionalFormats[$this->format]; } return $this->isValidForFormatProvided($input); } private function isValidForFormatProvided($input) { $info = date_parse_from_format($this->format, $input); if (!$this->isParsable($info)) { return false; } if ($this->hasDateFormat()) { return $this->hasValidDate($info); } return true; } private function isParsable(array $info) { return ($info['error_count'] === 0 && $info['warning_count'] === 0); } private function hasDateFormat() { return preg_match('/[djSFmMnYy]/', $this->format) > 0; } private function hasValidDate(array $info) { if ($info['day']) { return checkdate((int) $info['month'], $info['day'], (int) $info['year']); } return checkdate($info['month'] ?: 1, $info['day'] ?: 1, $info['year'] ?: 1); } } Validation-1.1.29/library/Rules/Digit.php000066400000000000000000000010231336766562500202240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Digit extends AbstractCtypeRule { protected function filter($input) { return $this->filterWhiteSpaceOption($input); } protected function ctypeFunction($input) { return ctype_digit($input); } } Validation-1.1.29/library/Rules/Directory.php000066400000000000000000000010201336766562500211250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Directory extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isDir(); } return (is_string($input) && is_dir($input)); } } Validation-1.1.29/library/Rules/Domain.php000066400000000000000000000060221336766562500203770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; class Domain extends AbstractComposite { protected $tld; protected $checks = []; protected $otherParts; public function __construct($tldCheck = true) { $this->checks[] = new NoWhitespace(); $this->checks[] = new Contains('.'); $this->checks[] = new Length(3, null); $this->tldCheck($tldCheck); $this->otherParts = new AllOf( new Alnum('-'), new Not(new StartsWith('-')), new OneOf( new Not(new Contains('--')), new Callback(function ($str) { return substr_count($str, '--') == 1; }) ), new Not(new EndsWith('-')) ); } public function tldCheck($do = true) { if ($do === true) { $this->tld = new Tld(); } else { $this->tld = new AllOf( new Not( new StartsWith('-') ), new NoWhitespace(), new Length(2, null) ); } return true; } public function validate($input) { foreach ($this->checks as $chk) { if (!$chk->validate($input)) { return false; } } if (count($parts = explode('.', $input)) < 2 || !$this->tld->validate(array_pop($parts))) { return false; } foreach ($parts as $p) { if (!$this->otherParts->validate($p)) { return false; } } return true; } public function assert($input) { $e = []; foreach ($this->checks as $chk) { $this->collectAssertException($e, $chk, $input); } if (count($parts = explode('.', $input)) >= 2) { $this->collectAssertException($e, $this->tld, array_pop($parts)); } foreach ($parts as $p) { $this->collectAssertException($e, $this->otherParts, $p); } if (count($e)) { throw $this->reportError($input)->setRelated($e); } return true; } protected function collectAssertException(&$exceptions, $validator, $input) { try { $validator->assert($input); } catch (ValidationException $e) { $exceptions[] = $e; } } public function check($input) { foreach ($this->checks as $chk) { $chk->check($input); } if (count($parts = explode('.', $input)) >= 2) { $this->tld->check(array_pop($parts)); } foreach ($parts as $p) { $this->otherParts->check($p); } return true; } } Validation-1.1.29/library/Rules/Each.php000066400000000000000000000046251336766562500200370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; class Each extends IterableType { public $itemValidator; public $keyValidator; public function __construct(Validatable $itemValidator = null, Validatable $keyValidator = null) { $this->itemValidator = $itemValidator; $this->keyValidator = $keyValidator; } public function assert($input) { $exceptions = []; if (!parent::validate($input)) { throw $this->reportError($input); } foreach ($input as $key => $item) { if (isset($this->itemValidator)) { try { $this->itemValidator->assert($item); } catch (ValidationException $e) { $exceptions[] = $e; } } if (isset($this->keyValidator)) { try { $this->keyValidator->assert($key); } catch (ValidationException $e) { $exceptions[] = $e; } } } if (!empty($exceptions)) { throw $this->reportError($input)->setRelated($exceptions); } return true; } public function check($input) { if (!parent::validate($input)) { throw $this->reportError($input); } foreach ($input as $key => $item) { if (isset($this->itemValidator)) { $this->itemValidator->check($item); } if (isset($this->keyValidator)) { $this->keyValidator->check($key); } } return true; } public function validate($input) { if (!parent::validate($input)) { return false; } foreach ($input as $key => $item) { if (isset($this->itemValidator) && !$this->itemValidator->validate($item)) { return false; } if (isset($this->keyValidator) && !$this->keyValidator->validate($key)) { return false; } } return true; } } Validation-1.1.29/library/Rules/Email.php000066400000000000000000000025461336766562500202260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\Validation\RFCValidation; class Email extends AbstractRule { public function __construct(EmailValidator $emailValidator = null) { $this->emailValidator = $emailValidator; } public function getEmailValidator() { if (!$this->emailValidator instanceof EmailValidator && class_exists('Egulias\\EmailValidator\\EmailValidator')) { $this->emailValidator = new EmailValidator(); } return $this->emailValidator; } public function validate($input) { if (!is_string($input)) { return false; } $emailValidator = $this->getEmailValidator(); if (!$emailValidator instanceof EmailValidator) { return (bool) filter_var($input, FILTER_VALIDATE_EMAIL); } if (!class_exists('Egulias\\EmailValidator\\Validation\\RFCValidation')) { return $emailValidator->isValid($input); } return $emailValidator->isValid($input, new RFCValidation()); } } Validation-1.1.29/library/Rules/EndsWith.php000066400000000000000000000025221336766562500207160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class EndsWith extends AbstractRule { public $endValue; public $identical; public function __construct($endValue, $identical = false) { $this->endValue = $endValue; $this->identical = $identical; } public function validate($input) { if ($this->identical) { return $this->validateIdentical($input); } return $this->validateEquals($input); } protected function validateEquals($input) { if (is_array($input)) { return end($input) == $this->endValue; } return mb_strripos($input, $this->endValue, -1, $enc = mb_detect_encoding($input)) === mb_strlen($input, $enc) - mb_strlen($this->endValue, $enc); } protected function validateIdentical($input) { if (is_array($input)) { return end($input) === $this->endValue; } return mb_strrpos($input, $this->endValue, 0, $enc = mb_detect_encoding($input)) === mb_strlen($input, $enc) - mb_strlen($this->endValue, $enc); } } Validation-1.1.29/library/Rules/Equals.php000066400000000000000000000010351336766562500204210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Equals extends AbstractRule { public $compareTo; public function __construct($compareTo) { $this->compareTo = $compareTo; } public function validate($input) { return $input == $this->compareTo; } } Validation-1.1.29/library/Rules/Even.php000066400000000000000000000006411336766562500200660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Even extends AbstractRule { public function validate($input) { return ((int) $input % 2 === 0); } } Validation-1.1.29/library/Rules/Executable.php000066400000000000000000000010371336766562500212520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Executable extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isExecutable(); } return (is_string($input) && is_executable($input)); } } Validation-1.1.29/library/Rules/Exists.php000066400000000000000000000010321336766562500204430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Exists extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { $input = $input->getPathname(); } return (is_string($input) && file_exists($input)); } } Validation-1.1.29/library/Rules/Extension.php000066400000000000000000000017461336766562500211540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use SplFileInfo; /** * Validate file extensions. * * @author Henrique Moody */ class Extension extends AbstractRule { /** * @var string */ public $extension; /** * @param string $extension */ public function __construct($extension) { $this->extension = $extension; } /** * {@inheritdoc} */ public function validate($input) { if ($input instanceof SplFileInfo) { return ($input->getExtension() == $this->extension); } if (!is_string($input)) { return false; } return (pathinfo($input, PATHINFO_EXTENSION) == $this->extension); } } Validation-1.1.29/library/Rules/Factor.php000066400000000000000000000027511336766562500204130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Exceptions\ValidationException; /** * @author David Meister */ class Factor extends AbstractRule { public $dividend; public function __construct($dividend) { if (!is_numeric($dividend) || (int) $dividend != $dividend) { $message = 'Dividend %s must be an integer'; throw new ComponentException(sprintf($message, ValidationException::stringify($dividend))); } $this->dividend = (int) $dividend; } public function validate($input) { // Every integer is a factor of zero, and zero is the only integer that // has zero for a factor. if ($this->dividend === 0) { return true; } // Factors must be integers that are not zero. if (!is_numeric($input) || (int) $input != $input || $input == 0) { return false; } $input = (int) abs($input); $dividend = (int) abs($this->dividend); // The dividend divided by the input must be an integer if input is a // factor of the dividend. return is_integer($dividend / $input); } } Validation-1.1.29/library/Rules/FalseVal.php000066400000000000000000000010661336766562500206700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class FalseVal extends AbstractRule { public function validate($input) { if (false === $input) { // PHP 5.3 workaround return true; } return (false === filter_var($input, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); } } Validation-1.1.29/library/Rules/Fibonacci.php000066400000000000000000000015021336766562500210430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Samuel Heinzmann */ class Fibonacci extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { if (!is_numeric($input)) { return false; } $sequence = [0, 1]; $position = 1; while ($input > $sequence[$position]) { ++$position; $sequence[$position] = $sequence[$position - 1] + $sequence[$position - 2]; } return $sequence[$position] === (int) $input; } } Validation-1.1.29/library/Rules/File.php000066400000000000000000000010151336766562500200440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class File extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isFile(); } return (is_string($input) && is_file($input)); } } Validation-1.1.29/library/Rules/FilterVar.php000066400000000000000000000023111336766562500210630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class FilterVar extends Callback { public function __construct() { $arguments = func_get_args(); if (!isset($arguments[0])) { throw new ComponentException('Cannot validate without filter flag'); } if (!$this->isValidFilter($arguments[0])) { throw new ComponentException('Cannot accept the given filter'); } $this->callback = 'filter_var'; $this->arguments = $arguments; } private function isValidFilter($filter) { return in_array( $filter, [ FILTER_VALIDATE_BOOLEAN, FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_FLOAT, FILTER_VALIDATE_INT, FILTER_VALIDATE_IP, FILTER_VALIDATE_REGEXP, FILTER_VALIDATE_URL, ] ); } } Validation-1.1.29/library/Rules/Finite.php000066400000000000000000000010231336766562500204020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Henrique Moody */ class Finite extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { return is_numeric($input) && is_finite($input); } } Validation-1.1.29/library/Rules/FloatType.php000066400000000000000000000006361336766562500211040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class FloatType extends AbstractRule { public function validate($input) { return is_float($input); } } Validation-1.1.29/library/Rules/FloatVal.php000066400000000000000000000007001336766562500206750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class FloatVal extends AbstractRule { public function validate($input) { return is_float(filter_var($input, FILTER_VALIDATE_FLOAT)); } } Validation-1.1.29/library/Rules/Graph.php000066400000000000000000000006521336766562500202340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Graph extends AbstractCtypeRule { protected function ctypeFunction($input) { return ctype_graph($input); } } Validation-1.1.29/library/Rules/HexRgbColor.php000066400000000000000000000012701336766562500213460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class HexRgbColor extends Xdigit { public function validate($input) { if (!is_string($input)) { return false; } if (0 === strpos($input, '#')) { $input = substr($input, 1); } $length = strlen($input); if ($length != 3 && $length != 6) { return false; } return parent::validate($input); } } Validation-1.1.29/library/Rules/Identical.php000066400000000000000000000010411336766562500210600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Identical extends AbstractRule { public $compareTo; public function __construct($compareTo) { $this->compareTo = $compareTo; } public function validate($input) { return $input === $this->compareTo; } } Validation-1.1.29/library/Rules/IdentityCard.php000066400000000000000000000015431336766562500215560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class IdentityCard extends AbstractWrapper { public $countryCode; public function __construct($countryCode) { $shortName = ucfirst(strtolower($countryCode)).'IdentityCard'; $className = __NAMESPACE__.'\\Locale\\'.$shortName; if (!class_exists($className)) { throw new ComponentException(sprintf('There is no support for identity cards from "%s"', $countryCode)); } $this->countryCode = $countryCode; $this->validatable = new $className(); } } Validation-1.1.29/library/Rules/Image.php000066400000000000000000000015601336766562500202140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use finfo; use SplFileInfo; class Image extends AbstractRule { public $fileInfo; public function __construct(finfo $fileInfo = null) { $this->fileInfo = $fileInfo ?: new finfo(FILEINFO_MIME_TYPE); } public function validate($input) { if ($input instanceof SplFileInfo) { $input = $input->getPathname(); } if (!is_string($input)) { return false; } if (!is_file($input)) { return false; } return (0 === strpos($this->fileInfo->file($input), 'image/')); } } Validation-1.1.29/library/Rules/Imei.php000066400000000000000000000020701336766562500200520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Imei extends AbstractRule { const IMEI_SIZE = 15; /** * @see https://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity * * @param string $input * * @return bool */ public function validate($input) { if (!is_scalar($input)) { return false; } $numbers = preg_replace('/\D/', '', $input); if (strlen($numbers) != self::IMEI_SIZE) { return false; } $sum = 0; for ($position = 0; $position < (self::IMEI_SIZE - 1); ++$position) { $number = $numbers[$position] * (($position % 2) + 1); $sum += ($number % 10) + intval($number / 10); } return ((ceil($sum / 10) * 10) - $sum == $numbers[14]); } } Validation-1.1.29/library/Rules/In.php000066400000000000000000000010521336766562500175340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class In extends AbstractSearcher { public $haystack; public $compareIdentical; public function __construct($haystack, $compareIdentical = false) { $this->haystack = $haystack; $this->compareIdentical = $compareIdentical; } } Validation-1.1.29/library/Rules/Infinite.php000066400000000000000000000010271336766562500207350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Henrique Moody */ class Infinite extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { return is_numeric($input) && is_infinite($input); } } Validation-1.1.29/library/Rules/Instance.php000066400000000000000000000012761336766562500207420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Instance extends AbstractRule { public $instanceName; public function __construct($instanceName) { $this->instanceName = $instanceName; } public function reportError($input, array $extraParams = []) { return parent::reportError($input, $extraParams); } public function validate($input) { return $input instanceof $this->instanceName; } } Validation-1.1.29/library/Rules/IntType.php000066400000000000000000000006321336766562500205650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class IntType extends AbstractRule { public function validate($input) { return is_int($input); } } Validation-1.1.29/library/Rules/IntVal.php000066400000000000000000000010551336766562500203660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class IntVal extends AbstractRule { public function validate($input) { if (is_float($input) || is_bool($input)) { return false; } return false !== filter_var($input, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_OCTAL); } } Validation-1.1.29/library/Rules/Ip.php000066400000000000000000000073631336766562500175510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Ip extends AbstractRule { public $ipOptions; public $networkRange; public function __construct($ipOptions = null) { if (is_int($ipOptions)) { $this->ipOptions = $ipOptions; return; } $this->networkRange = $this->parseRange($ipOptions); } protected function parseRange($input) { if ($input === null || $input == '*' || $input == '*.*.*.*' || $input == '0.0.0.0-255.255.255.255') { return; } $range = ['min' => null, 'max' => null, 'mask' => null]; if (strpos($input, '-') !== false) { list($range['min'], $range['max']) = explode('-', $input); } elseif (strpos($input, '*') !== false) { $this->parseRangeUsingWildcards($input, $range); } elseif (strpos($input, '/') !== false) { $this->parseRangeUsingCidr($input, $range); } else { throw new ComponentException('Invalid network range'); } if (!$this->verifyAddress($range['min'])) { throw new ComponentException('Invalid network range'); } if (isset($range['max']) && !$this->verifyAddress($range['max'])) { throw new ComponentException('Invalid network range'); } return $range; } protected function fillAddress(&$input, $char = '*') { while (substr_count($input, '.') < 3) { $input .= '.'.$char; } } protected function parseRangeUsingWildcards($input, &$range) { $this->fillAddress($input); $range['min'] = strtr($input, '*', '0'); $range['max'] = str_replace('*', '255', $input); } protected function parseRangeUsingCidr($input, &$range) { $input = explode('/', $input); $this->fillAddress($input[0], '0'); $range['min'] = $input[0]; $isAddressMask = strpos($input[1], '.') !== false; if ($isAddressMask && $this->verifyAddress($input[1])) { $range['mask'] = sprintf('%032b', ip2long($input[1])); return; } if ($isAddressMask || $input[1] < 8 || $input[1] > 30) { throw new ComponentException('Invalid network mask'); } $range['mask'] = sprintf('%032b', ip2long(long2ip(~(pow(2, (32 - $input[1])) - 1)))); } public function validate($input) { return $this->verifyAddress($input) && $this->verifyNetwork($input); } protected function verifyAddress($address) { return (boolean) filter_var( $address, FILTER_VALIDATE_IP, [ 'flags' => $this->ipOptions, ] ); } protected function verifyNetwork($input) { if ($this->networkRange === null) { return true; } if (isset($this->networkRange['mask'])) { return $this->belongsToSubnet($input); } $input = sprintf('%u', ip2long($input)); return bccomp($input, sprintf('%u', ip2long($this->networkRange['min']))) >= 0 && bccomp($input, sprintf('%u', ip2long($this->networkRange['max']))) <= 0; } protected function belongsToSubnet($input) { $range = $this->networkRange; $min = sprintf('%032b', ip2long($range['min'])); $input = sprintf('%032b', ip2long($input)); return ($input & $range['mask']) === ($min & $range['mask']); } } Validation-1.1.29/library/Rules/Iterable.php000066400000000000000000000006101336766562500207140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ if (version_compare(PHP_VERSION, '7.1', '<')) { eval('namespace Respect\Validation\Rules; class Iterable extends IterableType {}'); } Validation-1.1.29/library/Rules/IterableType.php000066400000000000000000000007721336766562500215670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class IterableType extends AbstractRule { public function validate($input) { return is_array($input) || $input instanceof \stdClass || $input instanceof \Traversable; } } Validation-1.1.29/library/Rules/Json.php000066400000000000000000000010461336766562500201020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Json extends AbstractRule { public function validate($input) { if (!is_string($input) || '' === $input) { return false; } json_decode($input); return (json_last_error() === JSON_ERROR_NONE); } } Validation-1.1.29/library/Rules/Key.php000066400000000000000000000017231336766562500177230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Validatable; class Key extends AbstractRelated { public function __construct($reference, Validatable $referenceValidator = null, $mandatory = true) { if (!is_scalar($reference) || '' === $reference) { throw new ComponentException('Invalid array key name'); } parent::__construct($reference, $referenceValidator, $mandatory); } public function getReferenceValue($input) { return $input[$this->reference]; } public function hasReference($input) { return is_array($input) && array_key_exists($this->reference, $input); } } Validation-1.1.29/library/Rules/KeyNested.php000066400000000000000000000043621336766562500210700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ArrayAccess; use Respect\Validation\Exceptions\ComponentException; class KeyNested extends AbstractRelated { public function hasReference($input) { try { $this->getReferenceValue($input); } catch (ComponentException $cex) { return false; } return true; } private function getReferencePieces() { return explode('.', rtrim($this->reference, '.')); } private function getValueFromArray($array, $key) { if (!array_key_exists($key, $array)) { $message = sprintf('Cannot select the key %s from the given array', $this->reference); throw new ComponentException($message); } return $array[$key]; } private function getValueFromObject($object, $property) { if (empty($property) || !property_exists($object, $property)) { $message = sprintf('Cannot select the property %s from the given object', $this->reference); throw new ComponentException($message); } return $object->{$property}; } private function getValue($value, $key) { if (is_array($value) || $value instanceof ArrayAccess) { return $this->getValueFromArray($value, $key); } if (is_object($value)) { return $this->getValueFromObject($value, $key); } $message = sprintf('Cannot select the property %s from the given data', $this->reference); throw new ComponentException($message); } public function getReferenceValue($input) { if (is_scalar($input)) { $message = sprintf('Cannot select the %s in the given data', $this->reference); throw new ComponentException($message); } $keys = $this->getReferencePieces(); $value = $input; while (!is_null($key = array_shift($keys))) { $value = $this->getValue($value, $key); } return $value; } } Validation-1.1.29/library/Rules/KeySet.php000066400000000000000000000057151336766562500204040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Exceptions\KeySetException; use Respect\Validation\Validatable; /** * Validates a keys in a defined structure. * * @author Henrique Moody */ class KeySet extends AllOf { /** * @param AllOf $rule * * @return Validatable */ private function filterAllOf(AllOf $rule) { $rules = $rule->getRules(); if (count($rules) != 1) { throw new ComponentException('AllOf rule must have only one Key rule'); } return current($rules); } /** * {@inheritdoc} */ public function addRule($rule, $arguments = []) { if ($rule instanceof AllOf) { $rule = $this->filterAllOf($rule); } if (!$rule instanceof Key) { throw new ComponentException('KeySet rule accepts only Key rules'); } $this->appendRule($rule); return $this; } /** * {@inheritdoc} */ public function addRules(array $rules) { foreach ($rules as $rule) { $this->addRule($rule); } return $this; } /** * @return array */ public function getKeys() { $keys = []; foreach ($this->getRules() as $keyRule) { $keys[] = $keyRule->reference; } return $keys; } /** * @param array $input * * @return bool */ private function hasValidStructure($input) { if (!is_array($input)) { return false; } foreach ($this->getRules() as $keyRule) { if (!array_key_exists($keyRule->reference, $input) && $keyRule->mandatory) { return false; } unset($input[$keyRule->reference]); } return (count($input) == 0); } /** * @throws KeySetException */ private function checkKeys($input) { if (!$this->hasValidStructure($input)) { $params = ['keys' => $this->getKeys()]; $exception = $this->reportError($input, $params); throw $exception; } } /** * {@inheritdoc} */ public function assert($input) { $this->checkKeys($input); return parent::assert($input); } /** * {@inheritdoc} */ public function check($input) { $this->checkKeys($input); return parent::check($input); } /** * {@inheritdoc} */ public function validate($input) { if (!$this->hasValidStructure($input)) { return false; } return parent::validate($input); } } Validation-1.1.29/library/Rules/KeyValue.php000066400000000000000000000050431336766562500207170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validator; class KeyValue extends AbstractRule { public $comparedKey; public $ruleName; public $baseKey; public function __construct($comparedKey, $ruleName, $baseKey) { $this->comparedKey = $comparedKey; $this->ruleName = $ruleName; $this->baseKey = $baseKey; } private function getRule($input) { if (!isset($input[$this->comparedKey])) { throw $this->reportError($this->comparedKey); } if (!isset($input[$this->baseKey])) { throw $this->reportError($this->baseKey); } try { $rule = Validator::__callStatic($this->ruleName, [$input[$this->baseKey]]); $rule->setName($this->comparedKey); } catch (ComponentException $exception) { throw $this->reportError($input, ['component' => true]); } return $rule; } private function overwriteExceptionParams(ValidationException $exception) { $params = []; foreach ($exception->getParams() as $key => $value) { if (in_array($key, ['template', 'translator'])) { continue; } $params[$key] = $this->baseKey; } $exception->configure($this->comparedKey, $params); return $exception; } public function assert($input) { $rule = $this->getRule($input); try { $rule->assert($input[$this->comparedKey]); } catch (ValidationException $exception) { throw $this->overwriteExceptionParams($exception); } return true; } public function check($input) { $rule = $this->getRule($input); try { $rule->check($input[$this->comparedKey]); } catch (ValidationException $exception) { throw $this->overwriteExceptionParams($exception); } return true; } public function validate($input) { try { $rule = $this->getRule($input); } catch (ValidationException $e) { return false; } return $rule->validate($input[$this->comparedKey]); } } Validation-1.1.29/library/Rules/LanguageCode.php000066400000000000000000000466201336766562500215160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; /** * Validates languages in ISO 639. */ class LanguageCode extends AbstractRule { const ALPHA2 = 'alpha-2'; const ALPHA3 = 'alpha-3'; /** * @link http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt * * @var array */ protected $languageCodeList = [ ['AA', 'AAR'], // AFAR ['AB', 'ABK'], // ABKHAZIAN ['', 'ACE'], // ACHINESE ['', 'ACH'], // ACOLI ['', 'ADA'], // ADANGME ['', 'ADY'], // ADYGHE; ADYGEI ['', 'AFA'], // AFRO-ASIATIC LANGUAGES ['', 'AFH'], // AFRIHILI ['AF', 'AFR'], // AFRIKAANS ['', 'AIN'], // AINU ['AK', 'AKA'], // AKAN ['', 'AKK'], // AKKADIAN ['SQ', 'ALB'], // ALBANIAN ['', 'ALE'], // ALEUT ['', 'ALG'], // ALGONQUIAN LANGUAGES ['', 'ALT'], // SOUTHERN ALTAI ['AM', 'AMH'], // AMHARIC ['', 'ANG'], // ENGLISH, OLD (CA.450-1100) ['', 'ANP'], // ANGIKA ['', 'APA'], // APACHE LANGUAGES ['AR', 'ARA'], // ARABIC ['', 'ARC'], // OFFICIAL ARAMAIC (700-300 BCE); IMPERIAL ARAMAIC (700-300 BCE) ['AN', 'ARG'], // ARAGONESE ['HY', 'ARM'], // ARMENIAN ['', 'ARN'], // MAPUDUNGUN; MAPUCHE ['', 'ARP'], // ARAPAHO ['', 'ART'], // ARTIFICIAL LANGUAGES ['', 'ARW'], // ARAWAK ['AS', 'ASM'], // ASSAMESE ['', 'AST'], // ASTURIAN; BABLE; LEONESE; ASTURLEONESE ['', 'ATH'], // ATHAPASCAN LANGUAGES ['', 'AUS'], // AUSTRALIAN LANGUAGES ['AV', 'AVA'], // AVARIC ['AE', 'AVE'], // AVESTAN ['', 'AWA'], // AWADHI ['AY', 'AYM'], // AYMARA ['AZ', 'AZE'], // AZERBAIJANI ['', 'BAD'], // BANDA LANGUAGES ['', 'BAI'], // BAMILEKE LANGUAGES ['BA', 'BAK'], // BASHKIR ['', 'BAL'], // BALUCHI ['BM', 'BAM'], // BAMBARA ['', 'BAN'], // BALINESE ['EU', 'BAQ'], // BASQUE ['', 'BAS'], // BASA ['', 'BAT'], // BALTIC LANGUAGES ['', 'BEJ'], // BEJA; BEDAWIYET ['BE', 'BEL'], // BELARUSIAN ['', 'BEM'], // BEMBA ['BN', 'BEN'], // BENGALI ['', 'BER'], // BERBER LANGUAGES ['', 'BHO'], // BHOJPURI ['BH', 'BIH'], // BIHARI LANGUAGES ['', 'BIK'], // BIKOL ['', 'BIN'], // BINI; EDO ['BI', 'BIS'], // BISLAMA ['', 'BLA'], // SIKSIKA ['', 'BNT'], // BANTU (OTHER) ['BS', 'BOS'], // BOSNIAN ['', 'BRA'], // BRAJ ['BR', 'BRE'], // BRETON ['', 'BTK'], // BATAK LANGUAGES ['', 'BUA'], // BURIAT ['', 'BUG'], // BUGINESE ['BG', 'BUL'], // BULGARIAN ['MY', 'BUR'], // BURMESE ['', 'BYN'], // BLIN; BILIN ['', 'CAD'], // CADDO ['', 'CAI'], // CENTRAL AMERICAN INDIAN LANGUAGES ['', 'CAR'], // GALIBI CARIB ['CA', 'CAT'], // CATALAN; VALENCIAN ['', 'CAU'], // CAUCASIAN LANGUAGES ['', 'CEB'], // CEBUANO ['', 'CEL'], // CELTIC LANGUAGES ['CH', 'CHA'], // CHAMORRO ['', 'CHB'], // CHIBCHA ['CE', 'CHE'], // CHECHEN ['', 'CHG'], // CHAGATAI ['ZH', 'CHI'], // CHINESE ['', 'CHK'], // CHUUKESE ['', 'CHM'], // MARI ['', 'CHN'], // CHINOOK JARGON ['', 'CHO'], // CHOCTAW ['', 'CHP'], // CHIPEWYAN; DENE SULINE ['', 'CHR'], // CHEROKEE ['CU', 'CHU'], // CHURCH SLAVIC; OLD SLAVONIC; CHURCH SLAVONIC; OLD BULGARIAN; OLD CHURCH SLAVONIC ['CV', 'CHV'], // CHUVASH ['', 'CHY'], // CHEYENNE ['', 'CMC'], // CHAMIC LANGUAGES ['', 'COP'], // COPTIC ['KW', 'COR'], // CORNISH ['CO', 'COS'], // CORSICAN ['', 'CPE'], // CREOLES AND PIDGINS, ENGLISH BASED ['', 'CPF'], // CREOLES AND PIDGINS, FRENCH-BASED ['', 'CPP'], // CREOLES AND PIDGINS, PORTUGUESE-BASED ['CR', 'CRE'], // CREE ['', 'CRH'], // CRIMEAN TATAR; CRIMEAN TURKISH ['', 'CRP'], // CREOLES AND PIDGINS ['', 'CSB'], // KASHUBIAN ['', 'CUS'], // CUSHITIC LANGUAGES ['CS', 'CZE'], // CZECH ['', 'DAK'], // DAKOTA ['DA', 'DAN'], // DANISH ['', 'DAR'], // DARGWA ['', 'DAY'], // LAND DAYAK LANGUAGES ['', 'DEL'], // DELAWARE ['', 'DEN'], // SLAVE (ATHAPASCAN) ['', 'DGR'], // DOGRIB ['', 'DIN'], // DINKA ['DV', 'DIV'], // DIVEHI; DHIVEHI; MALDIVIAN ['', 'DOI'], // DOGRI ['', 'DRA'], // DRAVIDIAN LANGUAGES ['', 'DSB'], // LOWER SORBIAN ['', 'DUA'], // DUALA ['', 'DUM'], // DUTCH, MIDDLE (CA.1050-1350) ['NL', 'DUT'], // DUTCH; FLEMISH ['', 'DYU'], // DYULA ['DZ', 'DZO'], // DZONGKHA ['', 'EFI'], // EFIK ['', 'EGY'], // EGYPTIAN (ANCIENT) ['', 'EKA'], // EKAJUK ['', 'ELX'], // ELAMITE ['EN', 'ENG'], // ENGLISH ['', 'ENM'], // ENGLISH, MIDDLE (1100-1500) ['EO', 'EPO'], // ESPERANTO ['ET', 'EST'], // ESTONIAN ['EE', 'EWE'], // EWE ['', 'EWO'], // EWONDO ['', 'FAN'], // FANG ['FO', 'FAO'], // FAROESE ['', 'FAT'], // FANTI ['FJ', 'FIJ'], // FIJIAN ['', 'FIL'], // FILIPINO; PILIPINO ['FI', 'FIN'], // FINNISH ['', 'FIU'], // FINNO-UGRIAN LANGUAGES ['', 'FON'], // FON ['FR', 'FRE'], // FRENCH ['', 'FRM'], // FRENCH, MIDDLE (CA.1400-1600) ['', 'FRO'], // FRENCH, OLD (842-CA.1400) ['', 'FRR'], // NORTHERN FRISIAN ['', 'FRS'], // EASTERN FRISIAN ['FY', 'FRY'], // WESTERN FRISIAN ['FF', 'FUL'], // FULAH ['', 'FUR'], // FRIULIAN ['', 'GAA'], // GA ['', 'GAY'], // GAYO ['', 'GBA'], // GBAYA ['', 'GEM'], // GERMANIC LANGUAGES ['KA', 'GEO'], // GEORGIAN ['DE', 'GER'], // GERMAN ['', 'GEZ'], // GEEZ ['', 'GIL'], // GILBERTESE ['GD', 'GLA'], // GAELIC; SCOTTISH GAELIC ['GA', 'GLE'], // IRISH ['GL', 'GLG'], // GALICIAN ['GV', 'GLV'], // MANX ['', 'GMH'], // GERMAN, MIDDLE HIGH (CA.1050-1500) ['', 'GOH'], // GERMAN, OLD HIGH (CA.750-1050) ['', 'GON'], // GONDI ['', 'GOR'], // GORONTALO ['', 'GOT'], // GOTHIC ['', 'GRB'], // GREBO ['', 'GRC'], // GREEK, ANCIENT (TO 1453) ['EL', 'GRE'], // GREEK, MODERN (1453-) ['GN', 'GRN'], // GUARANI ['', 'GSW'], // SWISS GERMAN; ALEMANNIC; ALSATIAN ['GU', 'GUJ'], // GUJARATI ['', 'GWI'], // GWICH'IN ['', 'HAI'], // HAIDA ['HT', 'HAT'], // HAITIAN; HAITIAN CREOLE ['HA', 'HAU'], // HAUSA ['', 'HAW'], // HAWAIIAN ['HE', 'HEB'], // HEBREW ['HZ', 'HER'], // HERERO ['', 'HIL'], // HILIGAYNON ['', 'HIM'], // HIMACHALI LANGUAGES; WESTERN PAHARI LANGUAGES ['HI', 'HIN'], // HINDI ['', 'HIT'], // HITTITE ['', 'HMN'], // HMONG; MONG ['HO', 'HMO'], // HIRI MOTU ['HR', 'HRV'], // CROATIAN ['', 'HSB'], // UPPER SORBIAN ['HU', 'HUN'], // HUNGARIAN ['', 'HUP'], // HUPA ['', 'IBA'], // IBAN ['IG', 'IBO'], // IGBO ['IS', 'ICE'], // ICELANDIC ['IO', 'IDO'], // IDO ['II', 'III'], // SICHUAN YI; NUOSU ['', 'IJO'], // IJO LANGUAGES ['IU', 'IKU'], // INUKTITUT ['IE', 'ILE'], // INTERLINGUE; OCCIDENTAL ['', 'ILO'], // ILOKO ['IA', 'INA'], // INTERLINGUA (INTERNATIONAL AUXILIARY LANGUAGE ASSOCIATION) ['', 'INC'], // INDIC LANGUAGES ['ID', 'IND'], // INDONESIAN ['', 'INE'], // INDO-EUROPEAN LANGUAGES ['', 'INH'], // INGUSH ['IK', 'IPK'], // INUPIAQ ['', 'IRA'], // IRANIAN LANGUAGES ['', 'IRO'], // IROQUOIAN LANGUAGES ['IT', 'ITA'], // ITALIAN ['JV', 'JAV'], // JAVANESE ['', 'JBO'], // LOJBAN ['JA', 'JPN'], // JAPANESE ['', 'JPR'], // JUDEO-PERSIAN ['', 'JRB'], // JUDEO-ARABIC ['', 'KAA'], // KARA-KALPAK ['', 'KAB'], // KABYLE ['', 'KAC'], // KACHIN; JINGPHO ['KL', 'KAL'], // KALAALLISUT; GREENLANDIC ['', 'KAM'], // KAMBA ['KN', 'KAN'], // KANNADA ['', 'KAR'], // KAREN LANGUAGES ['KS', 'KAS'], // KASHMIRI ['KR', 'KAU'], // KANURI ['', 'KAW'], // KAWI ['KK', 'KAZ'], // KAZAKH ['', 'KBD'], // KABARDIAN ['', 'KHA'], // KHASI ['', 'KHI'], // KHOISAN LANGUAGES ['KM', 'KHM'], // CENTRAL KHMER ['', 'KHO'], // KHOTANESE; SAKAN ['KI', 'KIK'], // KIKUYU; GIKUYU ['RW', 'KIN'], // KINYARWANDA ['KY', 'KIR'], // KIRGHIZ; KYRGYZ ['', 'KMB'], // KIMBUNDU ['', 'KOK'], // KONKANI ['KV', 'KOM'], // KOMI ['KG', 'KON'], // KONGO ['KO', 'KOR'], // KOREAN ['', 'KOS'], // KOSRAEAN ['', 'KPE'], // KPELLE ['', 'KRC'], // KARACHAY-BALKAR ['', 'KRL'], // KARELIAN ['', 'KRO'], // KRU LANGUAGES ['', 'KRU'], // KURUKH ['KJ', 'KUA'], // KUANYAMA; KWANYAMA ['', 'KUM'], // KUMYK ['KU', 'KUR'], // KURDISH ['', 'KUT'], // KUTENAI ['', 'LAD'], // LADINO ['', 'LAH'], // LAHNDA ['', 'LAM'], // LAMBA ['LO', 'LAO'], // LAO ['LA', 'LAT'], // LATIN ['LV', 'LAV'], // LATVIAN ['', 'LEZ'], // LEZGHIAN ['LI', 'LIM'], // LIMBURGAN; LIMBURGER; LIMBURGISH ['LN', 'LIN'], // LINGALA ['LT', 'LIT'], // LITHUANIAN ['', 'LOL'], // MONGO ['', 'LOZ'], // LOZI ['LB', 'LTZ'], // LUXEMBOURGISH; LETZEBURGESCH ['', 'LUA'], // LUBA-LULUA ['LU', 'LUB'], // LUBA-KATANGA ['LG', 'LUG'], // GANDA ['', 'LUI'], // LUISENO ['', 'LUN'], // LUNDA ['', 'LUO'], // LUO (KENYA AND TANZANIA) ['', 'LUS'], // LUSHAI ['MK', 'MAC'], // MACEDONIAN ['', 'MAD'], // MADURESE ['', 'MAG'], // MAGAHI ['MH', 'MAH'], // MARSHALLESE ['', 'MAI'], // MAITHILI ['', 'MAK'], // MAKASAR ['ML', 'MAL'], // MALAYALAM ['', 'MAN'], // MANDINGO ['MI', 'MAO'], // MAORI ['', 'MAP'], // AUSTRONESIAN LANGUAGES ['MR', 'MAR'], // MARATHI ['', 'MAS'], // MASAI ['MS', 'MAY'], // MALAY ['', 'MDF'], // MOKSHA ['', 'MDR'], // MANDAR ['', 'MEN'], // MENDE ['', 'MGA'], // IRISH, MIDDLE (900-1200) ['', 'MIC'], // MI'KMAQ; MICMAC ['', 'MIN'], // MINANGKABAU ['', 'MIS'], // UNCODED LANGUAGES ['', 'MKH'], // MON-KHMER LANGUAGES ['MG', 'MLG'], // MALAGASY ['MT', 'MLT'], // MALTESE ['', 'MNC'], // MANCHU ['', 'MNI'], // MANIPURI ['', 'MNO'], // MANOBO LANGUAGES ['', 'MOH'], // MOHAWK ['MN', 'MON'], // MONGOLIAN ['', 'MOS'], // MOSSI ['', 'MUL'], // MULTIPLE LANGUAGES ['', 'MUN'], // MUNDA LANGUAGES ['', 'MUS'], // CREEK ['', 'MWL'], // MIRANDESE ['', 'MWR'], // MARWARI ['', 'MYN'], // MAYAN LANGUAGES ['', 'MYV'], // ERZYA ['', 'NAH'], // NAHUATL LANGUAGES ['', 'NAI'], // NORTH AMERICAN INDIAN LANGUAGES ['', 'NAP'], // NEAPOLITAN ['NA', 'NAU'], // NAURU ['NV', 'NAV'], // NAVAJO; NAVAHO ['NR', 'NBL'], // NDEBELE, SOUTH; SOUTH NDEBELE ['ND', 'NDE'], // NDEBELE, NORTH; NORTH NDEBELE ['NG', 'NDO'], // NDONGA ['', 'NDS'], // LOW GERMAN; LOW SAXON; GERMAN, LOW; SAXON, LOW ['NE', 'NEP'], // NEPALI ['', 'NEW'], // NEPAL BHASA; NEWARI ['', 'NIA'], // NIAS ['', 'NIC'], // NIGER-KORDOFANIAN LANGUAGES ['', 'NIU'], // NIUEAN ['NN', 'NNO'], // NORWEGIAN NYNORSK; NYNORSK, NORWEGIAN ['NB', 'NOB'], // BOKMÅL, NORWEGIAN; NORWEGIAN BOKMÅL ['', 'NOG'], // NOGAI ['', 'NON'], // NORSE, OLD ['NO', 'NOR'], // NORWEGIAN ['', 'NQO'], // N'KO ['', 'NSO'], // PEDI; SEPEDI; NORTHERN SOTHO ['', 'NUB'], // NUBIAN LANGUAGES ['', 'NWC'], // CLASSICAL NEWARI; OLD NEWARI; CLASSICAL NEPAL BHASA ['NY', 'NYA'], // CHICHEWA; CHEWA; NYANJA ['', 'NYM'], // NYAMWEZI ['', 'NYN'], // NYANKOLE ['', 'NYO'], // NYORO ['', 'NZI'], // NZIMA ['OC', 'OCI'], // OCCITAN (POST 1500); PROVENÇAL ['OJ', 'OJI'], // OJIBWA ['OR', 'ORI'], // ORIYA ['OM', 'ORM'], // OROMO ['', 'OSA'], // OSAGE ['OS', 'OSS'], // OSSETIAN; OSSETIC ['', 'OTA'], // TURKISH, OTTOMAN (1500-1928) ['', 'OTO'], // OTOMIAN LANGUAGES ['', 'PAA'], // PAPUAN LANGUAGES ['', 'PAG'], // PANGASINAN ['', 'PAL'], // PAHLAVI ['', 'PAM'], // PAMPANGA; KAPAMPANGAN ['PA', 'PAN'], // PANJABI; PUNJABI ['', 'PAP'], // PAPIAMENTO ['', 'PAU'], // PALAUAN ['', 'PEO'], // PERSIAN, OLD (CA.600-400 B.C.) ['FA', 'PER'], // PERSIAN ['', 'PHI'], // PHILIPPINE LANGUAGES ['', 'PHN'], // PHOENICIAN ['PI', 'PLI'], // PALI ['PL', 'POL'], // POLISH ['', 'PON'], // POHNPEIAN ['PT', 'POR'], // PORTUGUESE ['', 'PRA'], // PRAKRIT LANGUAGES ['', 'PRO'], // PROVENÇAL, OLD (TO 1500) ['PS', 'PUS'], // PUSHTO; PASHTO ['', 'QAA-QTZ'], // RESERVED FOR LOCAL USE ['QU', 'QUE'], // QUECHUA ['', 'RAJ'], // RAJASTHANI ['', 'RAP'], // RAPANUI ['', 'RAR'], // RAROTONGAN; COOK ISLANDS MAORI ['', 'ROA'], // ROMANCE LANGUAGES ['RM', 'ROH'], // ROMANSH ['', 'ROM'], // ROMANY ['RO', 'RUM'], // ROMANIAN; MOLDAVIAN; MOLDOVAN ['RN', 'RUN'], // RUNDI ['', 'RUP'], // AROMANIAN; ARUMANIAN; MACEDO-ROMANIAN ['RU', 'RUS'], // RUSSIAN ['', 'SAD'], // SANDAWE ['SG', 'SAG'], // SANGO ['', 'SAH'], // YAKUT ['', 'SAI'], // SOUTH AMERICAN INDIAN (OTHER) ['', 'SAL'], // SALISHAN LANGUAGES ['', 'SAM'], // SAMARITAN ARAMAIC ['SA', 'SAN'], // SANSKRIT ['', 'SAS'], // SASAK ['', 'SAT'], // SANTALI ['', 'SCN'], // SICILIAN ['', 'SCO'], // SCOTS ['', 'SEL'], // SELKUP ['', 'SEM'], // SEMITIC LANGUAGES ['', 'SGA'], // IRISH, OLD (TO 900) ['', 'SGN'], // SIGN LANGUAGES ['', 'SHN'], // SHAN ['', 'SID'], // SIDAMO ['SI', 'SIN'], // SINHALA; SINHALESE ['', 'SIO'], // SIOUAN LANGUAGES ['', 'SIT'], // SINO-TIBETAN LANGUAGES ['', 'SLA'], // SLAVIC LANGUAGES ['SK', 'SLO'], // SLOVAK ['SL', 'SLV'], // SLOVENIAN ['', 'SMA'], // SOUTHERN SAMI ['SE', 'SME'], // NORTHERN SAMI ['', 'SMI'], // SAMI LANGUAGES ['', 'SMJ'], // LULE SAMI ['', 'SMN'], // INARI SAMI ['SM', 'SMO'], // SAMOAN ['', 'SMS'], // SKOLT SAMI ['SN', 'SNA'], // SHONA ['SD', 'SND'], // SINDHI ['', 'SNK'], // SONINKE ['', 'SOG'], // SOGDIAN ['SO', 'SOM'], // SOMALI ['', 'SON'], // SONGHAI LANGUAGES ['ST', 'SOT'], // SOTHO, SOUTHERN ['ES', 'SPA'], // SPANISH; CASTILIAN ['SC', 'SRD'], // SARDINIAN ['', 'SRN'], // SRANAN TONGO ['SR', 'SRP'], // SERBIAN ['', 'SRR'], // SERER ['', 'SSA'], // NILO-SAHARAN LANGUAGES ['SS', 'SSW'], // SWATI ['', 'SUK'], // SUKUMA ['SU', 'SUN'], // SUNDANESE ['', 'SUS'], // SUSU ['', 'SUX'], // SUMERIAN ['SW', 'SWA'], // SWAHILI ['SV', 'SWE'], // SWEDISH ['', 'SYC'], // CLASSICAL SYRIAC ['', 'SYR'], // SYRIAC ['TY', 'TAH'], // TAHITIAN ['', 'TAI'], // TAI LANGUAGES ['TA', 'TAM'], // TAMIL ['TT', 'TAT'], // TATAR ['TE', 'TEL'], // TELUGU ['', 'TEM'], // TIMNE ['', 'TER'], // TERENO ['', 'TET'], // TETUM ['TG', 'TGK'], // TAJIK ['TL', 'TGL'], // TAGALOG ['TH', 'THA'], // THAI ['BO', 'TIB'], // TIBETAN ['', 'TIG'], // TIGRE ['TI', 'TIR'], // TIGRINYA ['', 'TIV'], // TIV ['', 'TKL'], // TOKELAU ['', 'TLH'], // KLINGON; TLHINGAN-HOL ['', 'TLI'], // TLINGIT ['', 'TMH'], // TAMASHEK ['', 'TOG'], // TONGA (NYASA) ['TO', 'TON'], // TONGA (TONGA ISLANDS) ['', 'TPI'], // TOK PISIN ['', 'TSI'], // TSIMSHIAN ['TN', 'TSN'], // TSWANA ['TS', 'TSO'], // TSONGA ['TK', 'TUK'], // TURKMEN ['', 'TUM'], // TUMBUKA ['', 'TUP'], // TUPI LANGUAGES ['TR', 'TUR'], // TURKISH ['', 'TUT'], // ALTAIC LANGUAGES ['', 'TVL'], // TUVALU ['TW', 'TWI'], // TWI ['', 'TYV'], // TUVINIAN ['', 'UDM'], // UDMURT ['', 'UGA'], // UGARITIC ['UG', 'UIG'], // UIGHUR; UYGHUR ['UK', 'UKR'], // UKRAINIAN ['', 'UMB'], // UMBUNDU ['', 'UND'], // UNDETERMINED ['UR', 'URD'], // URDU ['UZ', 'UZB'], // UZBEK ['', 'VAI'], // VAI ['VE', 'VEN'], // VENDA ['VI', 'VIE'], // VIETNAMESE ['VO', 'VOL'], // VOLAPÜK ['', 'VOT'], // VOTIC ['', 'WAK'], // WAKASHAN LANGUAGES ['', 'WAL'], // WALAMO ['', 'WAR'], // WARAY ['', 'WAS'], // WASHO ['CY', 'WEL'], // WELSH ['', 'WEN'], // SORBIAN LANGUAGES ['WA', 'WLN'], // WALLOON ['WO', 'WOL'], // WOLOF ['', 'XAL'], // KALMYK; OIRAT ['XH', 'XHO'], // XHOSA ['', 'YAO'], // YAO ['', 'YAP'], // YAPESE ['YI', 'YID'], // YIDDISH ['YO', 'YOR'], // YORUBA ['', 'YPK'], // YUPIK LANGUAGES ['', 'ZAP'], // ZAPOTEC ['', 'ZBL'], // BLISSYMBOLS; BLISSYMBOLICS; BLISS ['', 'ZEN'], // ZENAGA ['', 'ZGH'], // STANDARD MOROCCAN TAMAZIGHT ['ZA', 'ZHA'], // ZHUANG; CHUANG ['', 'ZND'], // ZANDE LANGUAGES ['ZU', 'ZUL'], // ZULU ['', 'ZUN'], // ZUNI ['', 'ZXX'], // NO LINGUISTIC CONTENT; NOT APPLICABLE ['', 'ZZA'], // ZAZA; DIMILI; DIMLI; KIRDKI; KIRMANJKI; ZAZAKI ]; public $set; public $index; public function __construct($set = self::ALPHA2) { $index = array_search($set, self::getAvailableSets(), true); if (false === $index) { throw new ComponentException(sprintf('"%s" is not a valid language set for ISO 639', $set)); } $this->set = $set; $this->index = $index; } public static function getAvailableSets() { return [ self::ALPHA2, self::ALPHA3, ]; } private function getLanguageCodeList($index) { $languageList = []; foreach ($this->languageCodeList as $language) { $languageList[] = $language[$index]; } return $languageList; } public function validate($input) { if (!is_string($input) || '' === $input) { return false; } return in_array( strtoupper($input), $this->getLanguageCodeList($this->index), true ); } } Validation-1.1.29/library/Rules/LeapDate.php000066400000000000000000000015201336766562500206450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; class LeapDate extends AbstractRule { public $format = null; public function __construct($format) { $this->format = $format; } public function validate($input) { if (is_string($input)) { $date = DateTime::createFromFormat($this->format, $input); } elseif ($input instanceof DateTime) { $date = $input; } else { return false; } // Dates that aren't leap will aways be rounded return $date->format('m-d') == '02-29'; } } Validation-1.1.29/library/Rules/LeapYear.php000066400000000000000000000014341336766562500206740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; class LeapYear extends AbstractRule { public function validate($year) { if (is_numeric($year)) { $year = (int) $year; } elseif (is_string($year)) { $year = (int) date('Y', strtotime($year)); } elseif ($year instanceof DateTime) { $year = (int) $year->format('Y'); } else { return false; } $date = strtotime(sprintf('%d-02-29', $year)); return (bool) date('L', $date); } } Validation-1.1.29/library/Rules/Length.php000066400000000000000000000046441336766562500204210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Length extends AbstractRule { public $minValue; public $maxValue; public $inclusive; public function __construct($min = null, $max = null, $inclusive = true) { $this->minValue = $min; $this->maxValue = $max; $this->inclusive = $inclusive; $paramValidator = new OneOf(new Numeric(), new NullType()); if (!$paramValidator->validate($min)) { throw new ComponentException( sprintf('%s is not a valid numeric length', $min) ); } if (!$paramValidator->validate($max)) { throw new ComponentException( sprintf('%s is not a valid numeric length', $max) ); } if (!is_null($min) && !is_null($max) && $min > $max) { throw new ComponentException( sprintf('%s cannot be less than %s for validation', $min, $max) ); } } public function validate($input) { $length = $this->extractLength($input); return $this->validateMin($length) && $this->validateMax($length); } protected function extractLength($input) { if (is_string($input)) { return mb_strlen($input, mb_detect_encoding($input)); } if (is_array($input) || $input instanceof \Countable) { return count($input); } if (is_object($input)) { return count(get_object_vars($input)); } if (is_int($input)) { return strlen((string)$input); } return false; } protected function validateMin($length) { if (is_null($this->minValue)) { return true; } if ($this->inclusive) { return $length >= $this->minValue; } return $length > $this->minValue; } protected function validateMax($length) { if (is_null($this->maxValue)) { return true; } if ($this->inclusive) { return $length <= $this->maxValue; } return $length < $this->maxValue; } } Validation-1.1.29/library/Rules/Locale/000077500000000000000000000000001336766562500176565ustar00rootroot00000000000000Validation-1.1.29/library/Rules/Locale/Factory.php000066400000000000000000000037561336766562500220110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Validatable; class Factory { /** * @return Validatable */ public function bic($countryCode) { $filteredCountryCode = strtoupper($countryCode); switch ($filteredCountryCode) { case 'DE': return new GermanBic(); default: throw new ComponentException( sprintf( 'Cannot provide BIC validation for country "%s"', $countryCode ) ); } } /** * @return Validatable */ public function bank($countryCode) { $filteredCountryCode = strtoupper($countryCode); switch ($filteredCountryCode) { case 'DE': return new GermanBank(); default: throw new ComponentException( sprintf( 'Cannot provide bank validation for country "%s"', $countryCode ) ); } } /** * @return Validatable */ public function bankAccount($countryCode, $bank) { $filteredCountryCode = strtoupper($countryCode); switch ($filteredCountryCode) { case 'DE': return new GermanBankAccount($bank); default: throw new ComponentException( sprintf( 'Cannot provide bank account validation for country "%s" and bank "%s"', $countryCode, $bank ) ); } } } Validation-1.1.29/library/Rules/Locale/GermanBank.php000066400000000000000000000017171336766562500224020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use malkusch\bav\BAV; use Respect\Validation\Rules\AbstractRule; /** * Validates a german bank. * * This validator depends on the composer package "malkusch/bav". * * @author Markus Malkusch * * @see BAV::isValidBank() */ class GermanBank extends AbstractRule { /** * @var BAV */ public $bav; /** * @param BAV $bav */ public function __construct(BAV $bav = null) { if (null === $bav) { $bav = new BAV(); } $this->bav = $bav; } /** * @return bool */ public function validate($input) { return $this->bav->isValidBank($input); } } Validation-1.1.29/library/Rules/Locale/GermanBankAccount.php000066400000000000000000000021231336766562500237070ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use malkusch\bav\BAV; use Respect\Validation\Rules\AbstractRule; /** * Validates a german bank account. * * This validator depends on the composer package "malkusch/bav". * * @author Markus Malkusch * * @see BAV::isValidBankAccount() */ class GermanBankAccount extends AbstractRule { /** * @var string */ public $bank; /** * @var BAV */ public $bav; /** * @param BAV $bav */ public function __construct($bank, BAV $bav = null) { if (null === $bav) { $bav = new BAV(); } $this->bav = $bav; $this->bank = $bank; } /** * @return bool */ public function validate($input) { return $this->bav->isValidBankAccount($this->bank, $input); } } Validation-1.1.29/library/Rules/Locale/GermanBic.php000066400000000000000000000024701336766562500222210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use malkusch\bav\BAV; use Respect\Validation\Rules\AbstractRule; /** * Validates a german BIC (Bank Identifier Code). * * This validator depends on the composer package "malkusch/bav". * * Note: It is not recommended to use this validator with BAV's default * configuration. Use a configuration with one of the following * DataBackendContainer implementations: * PDODataBackendContainer or DoctrineBackendContainer. * * @author Markus Malkusch * * @see BAV::isValidBIC() * @see \malkusch\bav\Configuration * @see \malkusch\bav\ConfigurationRegistry::setConfiguration() */ class GermanBic extends AbstractRule { /** * @var BAV */ public $bav; /** * @param BAV $bav */ public function __construct(BAV $bav = null) { if (null === $bav) { $bav = new BAV(); } $this->bav = $bav; } /** * @return bool */ public function validate($input) { return $this->bav->isValidBIC($input); } } Validation-1.1.29/library/Rules/Locale/PlIdentityCard.php000066400000000000000000000022221336766562500232440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use Respect\Validation\Rules\AbstractRule; /** * Validator for Polish identity card. * * @link https://en.wikipedia.org/wiki/Polish_identity_card */ class PlIdentityCard extends AbstractRule { public function validate($input) { if (!preg_match('/^[A-Z0-9]{9}$/', $input)) { return false; } $weights = [7, 3, 1, 0, 7, 3, 1, 7, 3]; $weightedSum = 0; for ($i = 0; $i < 9; ++$i) { $code = ord($input[$i]); if ($i < 3 && $code <= 57) { // 57 is "9" return false; } if ($i > 2 && $code >= 65) { // 65 is "A" return false; } $difference = $code <= 57 ? 48 : 55; // 48 is "0" $weightedSum += ($code - $difference) * $weights[$i]; } return $weightedSum % 10 == $input[3]; } } Validation-1.1.29/library/Rules/Lowercase.php000066400000000000000000000007121336766562500211140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Lowercase extends AbstractRule { public function validate($input) { return $input === mb_strtolower($input, mb_detect_encoding($input)); } } Validation-1.1.29/library/Rules/MacAddress.php000066400000000000000000000007641336766562500212050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class MacAddress extends AbstractRule { public function validate($input) { return !empty($input) && preg_match('/^(([0-9a-fA-F]{2}-){5}|([0-9a-fA-F]{2}:){5})[0-9a-fA-F]{2}$/', $input); } } Validation-1.1.29/library/Rules/Max.php000066400000000000000000000014031336766562500177130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Max extends AbstractInterval { public function validate($input) { $filteredInput = $this->filterInterval($input); $filteredInterval = $this->filterInterval($this->interval); if (!$this->isAbleToCompareValues($filteredInput, $filteredInterval)) { return false; } if ($this->inclusive) { return $filteredInput <= $filteredInterval; } return $filteredInput < $filteredInterval; } } Validation-1.1.29/library/Rules/Mimetype.php000066400000000000000000000023111336766562500207560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use finfo; use SplFileInfo; /** * Validate file mimetypes. * * @author Henrique Moody */ class Mimetype extends AbstractRule { /** * @var string */ public $mimetype; /** * @var finfo */ private $fileInfo; /** * @param string $mimetype * @param finfo $fileInfo */ public function __construct($mimetype, finfo $fileInfo = null) { $this->mimetype = $mimetype; $this->fileInfo = $fileInfo ?: new finfo(FILEINFO_MIME_TYPE); } /** * {@inheritdoc} */ public function validate($input) { if ($input instanceof SplFileInfo) { $input = $input->getPathname(); } if (!is_string($input)) { return false; } if (!is_file($input)) { return false; } return ($this->fileInfo->file($input) == $this->mimetype); } } Validation-1.1.29/library/Rules/Min.php000066400000000000000000000014031336766562500177110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Min extends AbstractInterval { public function validate($input) { $filteredInput = $this->filterInterval($input); $filteredInterval = $this->filterInterval($this->interval); if (!$this->isAbleToCompareValues($filteredInput, $filteredInterval)) { return false; } if ($this->inclusive) { return $filteredInput >= $filteredInterval; } return $filteredInput > $filteredInterval; } } Validation-1.1.29/library/Rules/MinimumAge.php000066400000000000000000000022251336766562500212210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; use Respect\Validation\Exceptions\ComponentException; class MinimumAge extends AbstractRule { public $age = null; public $format = null; public function __construct($age, $format = null) { if (!filter_var($age, FILTER_VALIDATE_INT)) { throw new ComponentException('The age must be a integer value.'); } $this->age = $age; $this->format = $format; } public function validate($input) { if ($input instanceof DateTime) { $birthday = new \DateTime('now - '.$this->age.' year'); return $birthday > $input; } if (!is_string($input) || (is_null($this->format) && false === strtotime($input))) { return false; } $age = ((date('Ymd') - date('Ymd', strtotime($input))) / 10000); return $age >= $this->age; } } Validation-1.1.29/library/Rules/Multiple.php000066400000000000000000000011751336766562500207670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Multiple extends AbstractRule { public $multipleOf; public function __construct($multipleOf) { $this->multipleOf = $multipleOf; } public function validate($input) { if ($this->multipleOf == 0) { return ($input == 0); } return ($input % $this->multipleOf == 0); } } Validation-1.1.29/library/Rules/Negative.php000066400000000000000000000006271336766562500207370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Negative extends AbstractRule { public function validate($input) { return $input < 0; } } Validation-1.1.29/library/Rules/NfeAccessKey.php000066400000000000000000000022061336766562500214730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * Rule restrict to Brasil. * * Valida chave de acesso de NFe. * Mais especificamente, relacionada ao DANFE. */ class NfeAccessKey extends AbstractRule { /** * @see Manual de Integração do Contribuinte v4.0.1 (http://www.nfe.fazenda.gov.br) * * @param string $aK access key * * @return bool */ public function validate($aK) { if (strlen($aK) !== 44) { return false; } $w = []; for ($i = 0, $z = 5, $m = 43; $i <= $m; ++$i) { $z = ($i < $m) ? ($z - 1) == 1 ? 9 : ($z - 1) : 0; $w[] = $z; } for ($i = 0, $s = 0, $k = 44; $i < $k; ++$i) { $s += $aK{ $i } * $w[ $i ]; } $s -= (11 * floor($s / 11)); $v = ($s == 0 || $s == 1) ? 0 : (11 - $s); return $v == $aK{ 43 }; } } Validation-1.1.29/library/Rules/No.php000066400000000000000000000010771336766562500175510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class No extends Regex { public function __construct($useLocale = false) { $pattern = '^n(o(t|pe)?|ix|ay)?$'; if ($useLocale && defined('NOEXPR')) { $pattern = nl_langinfo(NOEXPR); } parent::__construct('/'.$pattern.'/i'); } } Validation-1.1.29/library/Rules/NoWhitespace.php000066400000000000000000000010771336766562500215660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class NoWhitespace extends AbstractRule { public function validate($input) { if (is_null($input)) { return true; } if (false === is_scalar($input)) { return false; } return !preg_match('#\s#', $input); } } Validation-1.1.29/library/Rules/NoneOf.php000066400000000000000000000015671336766562500203650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class NoneOf extends AbstractComposite { public function assert($input) { $exceptions = $this->validateRules($input); $numRules = count($this->getRules()); $numExceptions = count($exceptions); if ($numRules !== $numExceptions) { throw $this->reportError($input)->setRelated($exceptions); } return true; } public function validate($input) { foreach ($this->getRules() as $rule) { if ($rule->validate($input)) { return false; } } return true; } } Validation-1.1.29/library/Rules/Not.php000066400000000000000000000030241336766562500177270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; class Not extends AbstractRule { public $rule; public function __construct(Validatable $rule) { $this->rule = $rule; } public function setName($name) { $this->rule->setName($name); return parent::setName($name); } public function validate($input) { return (false == $this->rule->validate($input)); } public function assert($input) { if ($this->validate($input)) { return true; } $rule = $this->rule; if ($rule instanceof AllOf) { $rule = $this->absorbAllOf($rule, $input); } throw $rule ->reportError($input) ->setMode(ValidationException::MODE_NEGATIVE); } private function absorbAllOf(AllOf $rule, $input) { $rules = $rule->getRules(); while (($current = array_shift($rules))) { $rule = $current; if (!$rule instanceof AllOf) { continue; } if (!$rule->validate($input)) { continue; } $rules = $rule->getRules(); } return $rule; } } Validation-1.1.29/library/Rules/NotBlank.php000066400000000000000000000014021336766562500206750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; class NotBlank extends AbstractRule { public function validate($input) { if (is_numeric($input)) { return $input != 0; } if (is_string($input)) { $input = trim($input); } if ($input instanceof stdClass) { $input = (array) $input; } if (is_array($input)) { $input = array_filter($input, __METHOD__); } return !empty($input); } } Validation-1.1.29/library/Rules/NotEmpty.php000066400000000000000000000007521336766562500207530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class NotEmpty extends AbstractRule { public function validate($input) { if (is_string($input)) { $input = trim($input); } return !empty($input); } } Validation-1.1.29/library/Rules/NotOptional.php000066400000000000000000000006761336766562500214470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class NotOptional extends AbstractRule { public function validate($input) { return (false === in_array($input, [null, ''], true)); } } Validation-1.1.29/library/Rules/NullType.php000066400000000000000000000006301336766562500207430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class NullType extends NotEmpty { public function validate($input) { return is_null($input); } } Validation-1.1.29/library/Rules/Numeric.php000066400000000000000000000006361336766562500205770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Numeric extends AbstractRule { public function validate($input) { return is_numeric($input); } } Validation-1.1.29/library/Rules/ObjectType.php000066400000000000000000000006401336766562500212400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class ObjectType extends AbstractRule { public function validate($input) { return is_object($input); } } Validation-1.1.29/library/Rules/Odd.php000066400000000000000000000006401336766562500176760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Odd extends AbstractRule { public function validate($input) { return ((int) $input % 2 !== 0); } } Validation-1.1.29/library/Rules/OneOf.php000066400000000000000000000026611336766562500202030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; class OneOf extends AbstractComposite { public function assert($input) { $validators = $this->getRules(); $exceptions = $this->validateRules($input); $numRules = count($validators); $numExceptions = count($exceptions); if ($numExceptions === $numRules) { throw $this->reportError($input)->setRelated($exceptions); } return true; } public function validate($input) { foreach ($this->getRules() as $v) { if ($v->validate($input)) { return true; } } return false; } public function check($input) { foreach ($this->getRules() as $v) { try { if ($v->check($input)) { return true; } } catch (ValidationException $e) { if (!isset($firstException)) { $firstException = $e; } } } if (isset($firstException)) { throw $firstException; } return false; } } Validation-1.1.29/library/Rules/Optional.php000066400000000000000000000020541336766562500207560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Validatable; class Optional extends AbstractWrapper { public function __construct(Validatable $rule) { $this->validatable = $rule; } private function isOptional($input) { return in_array($input, [null, ''], true); } public function assert($input) { if ($this->isOptional($input)) { return true; } return parent::assert($input); } public function check($input) { if ($this->isOptional($input)) { return true; } return parent::check($input); } public function validate($input) { if ($this->isOptional($input)) { return true; } return parent::validate($input); } } Validation-1.1.29/library/Rules/PerfectSquare.php000066400000000000000000000007131336766562500217420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class PerfectSquare extends AbstractRule { public function validate($input) { return is_numeric($input) && floor(sqrt($input)) == sqrt($input); } } Validation-1.1.29/library/Rules/Pesel.php000066400000000000000000000015241336766562500202420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Pesel extends AbstractRule { public function validate($input) { if (!preg_match('/^\d{11}$/', $input)) { return false; } $weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]; $targetControlNumber = $input[10]; $calculateControlNumber = 0; for ($i = 0; $i < 10; $i++) { $calculateControlNumber += $input[$i] * $weights[$i]; } $calculateControlNumber = (10 - $calculateControlNumber % 10) % 10; return $targetControlNumber == $calculateControlNumber; } } Validation-1.1.29/library/Rules/Phone.php000066400000000000000000000016721336766562500202470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Phone extends AbstractRegexRule { protected function getPregFormat() { return $this->replaceParams( '/^\+?({part1})? ?(?(?=\()(\({part2}\) ?{part3})|([. -]?({part2}[. -]*)?{part3}))$/', [ 'part1' => '\d{0,3}', 'part2' => '\d{1,3}', 'part3' => '((\d{3,5})[. -]?(\d{4})|(\d{2}[. -]?){4})', ] ); } private function replaceParams($format, array $params) { $string = $format; foreach ($params as $name => $value) { $string = str_replace('{'.$name.'}', $value, $string); } return $string; } } Validation-1.1.29/library/Rules/PhpLabel.php000066400000000000000000000007441336766562500206640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class PhpLabel extends AbstractRule { public function validate($input) { return is_string($input) && preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $input); } } Validation-1.1.29/library/Rules/Positive.php000066400000000000000000000006271336766562500207770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Positive extends AbstractRule { public function validate($input) { return $input > 0; } } Validation-1.1.29/library/Rules/PostalCode.php000066400000000000000000000156241336766562500212350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class PostalCode extends Regex { const DEFAULT_PATTERN = '/^$/'; /** * @link http://download.geonames.org/export/dump/countryInfo.txt */ public $postalCodes = [ 'AD' => '/^(?:AD)*(\d{3})$/', 'AL' => '/^(\d{4})$/', 'AM' => '/^(\d{6})$/', 'AR' => '/^[A-Z]?\d{4}[A-Z]{0,3}$/', 'AS' => '/96799/', 'AT' => '/^(\d{4})$/', 'AU' => '/^(\d{4})$/', 'AX' => '/^(?:FI)*(\d{5})$/', 'AZ' => '/^(?:AZ)*(\d{4})$/', 'BA' => '/^(\d{5})$/', 'BB' => '/^(?:BB)*(\d{5})$/', 'BD' => '/^(\d{4})$/', 'BE' => '/^(\d{4})$/', 'BG' => '/^(\d{4})$/', 'BH' => '/^(\d{3}\d?)$/', 'BL' => '/^(\d{5})$/', 'BM' => '/^([A-Z]{2}\d{2})$/', 'BN' => '/^([A-Z]{2}\d{4})$/', 'BR' => '/^\d{5}-?\d{3}$/', 'BY' => '/^(\d{6})$/', 'CA' => '/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]) ?(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/', 'CH' => '/^(\d{4})$/', 'CL' => '/^(\d{7})$/', 'CN' => '/^(\d{6})$/', 'CO' => '/^(\d{6})$/', 'CR' => '/^(\d{5})$/', 'CS' => '/^(\d{5})$/', 'CU' => '/^(?:CP)*(\d{5})$/', 'CV' => '/^(\d{4})$/', 'CX' => '/^(\d{4})$/', 'CY' => '/^(\d{4})$/', 'CZ' => '/^\d{3}\s?\d{2}$/', 'DE' => '/^(\d{5})$/', 'DK' => '/^(\d{4})$/', 'DO' => '/^(\d{5})$/', 'DZ' => '/^(\d{5})$/', 'EC' => '/^([a-zA-Z]\d{4}[a-zA-Z])$/', 'EE' => '/^(\d{5})$/', 'EG' => '/^(\d{5})$/', 'ES' => '/^(\d{5})$/', 'ET' => '/^(\d{4})$/', 'FI' => '/^(?:FI)*(\d{5})$/', 'FM' => '/^(\d{5})$/', 'FO' => '/^(?:FO)*(\d{3})$/', 'FR' => '/^(\d{5})$/', 'GB' => '/^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/', 'GE' => '/^(\d{4})$/', 'GF' => '/^((97|98)3\d{2})$/', 'GG' => '/^((?:(?:[A-PR-UWYZ][A-HK-Y]\d[ABEHMNPRV-Y0-9]|[A-PR-UWYZ]\d[A-HJKPS-UW0-9])\s\d[ABD-HJLNP-UW-Z]{2})|GIR\s?0AA)$/', 'GL' => '/^(\d{4})$/', 'GP' => '/^((97|98)\d{3})$/', 'GR' => '/^(\d{5})$/', 'GT' => '/^(\d{5})$/', 'GU' => '/^(969\d{2})$/', 'GW' => '/^(\d{4})$/', 'HN' => '/^([A-Z]{2}\d{4})$/', 'HR' => '/^(?:HR)*(\d{5})$/', 'HT' => '/^(?:HT)*(\d{4})$/', 'HU' => '/^(\d{4})$/', 'ID' => '/^(\d{5})$/', 'IE' => '/^[A-Z]\d{2}$|^[A-Z]{3}[A-Z]{4}$/', 'IL' => '/^(\d{5})$/', 'IM' => '/^((?:(?:[A-PR-UWYZ][A-HK-Y]\d[ABEHMNPRV-Y0-9]|[A-PR-UWYZ]\d[A-HJKPS-UW0-9])\s\d[ABD-HJLNP-UW-Z]{2})|GIR\s?0AA)$/', 'IN' => '/^(\d{6})$/', 'IQ' => '/^(\d{5})$/', 'IR' => '/^(\d{10})$/', 'IS' => '/^(\d{3})$/', 'IT' => '/^(\d{5})$/', 'JE' => '/^((?:(?:[A-PR-UWYZ][A-HK-Y]\d[ABEHMNPRV-Y0-9]|[A-PR-UWYZ]\d[A-HJKPS-UW0-9])\s\d[ABD-HJLNP-UW-Z]{2})|GIR\s?0AA)$/', 'JO' => '/^(\d{5})$/', 'JP' => '/^\d{3}-\d{4}$/', 'KE' => '/^(\d{5})$/', 'KG' => '/^(\d{6})$/', 'KH' => '/^(\d{5})$/', 'KP' => '/^(\d{6})$/', 'KR' => '/^(\d{5})$/', 'KW' => '/^(\d{5})$/', 'KZ' => '/^(\d{6})$/', 'LA' => '/^(\d{5})$/', 'LB' => '/^(\d{4}(\d{4})?)$/', 'LI' => '/^(\d{4})$/', 'LK' => '/^(\d{5})$/', 'LR' => '/^(\d{4})$/', 'LS' => '/^(\d{3})$/', 'LT' => '/^(?:LT)*(\d{5})$/', 'LU' => '/^(?:L-)?\d{4}$/', 'LV' => '/^(?:LV)*(\d{4})$/', 'MA' => '/^(\d{5})$/', 'MC' => '/^(\d{5})$/', 'MD' => '/^MD-\d{4}$/', 'ME' => '/^(\d{5})$/', 'MF' => '/^(\d{5})$/', 'MG' => '/^(\d{3})$/', 'MH' => '/^969\d{2}(-\d{4})$/', 'MK' => '/^(\d{4})$/', 'MM' => '/^(\d{5})$/', 'MN' => '/^(\d{6})$/', 'MP' => '/^9695\d{1}$/', 'MQ' => '/^(\d{5})$/', 'MT' => '/^[A-Z]{3}\s?\d{4}$/', 'MV' => '/^(\d{5})$/', 'MX' => '/^(\d{5})$/', 'MY' => '/^(\d{5})$/', 'MZ' => '/^(\d{4})$/', 'NC' => '/^(\d{5})$/', 'NE' => '/^(\d{4})$/', 'NF' => '/^(\d{4})$/', 'NG' => '/^(\d{6})$/', 'NI' => '/^(\d{7})$/', 'NL' => '/^(\d{4} ?[A-Z]{2})$/', 'NO' => '/^(\d{4})$/', 'NP' => '/^(\d{5})$/', 'NZ' => '/^(\d{4})$/', 'OM' => '/^(\d{3})$/', 'PF' => '/^((97|98)7\d{2})$/', 'PG' => '/^(\d{3})$/', 'PH' => '/^(\d{4})$/', 'PK' => '/^(\d{5})$/', 'PL' => '/^\d{2}-\d{3}$/', 'PM' => '/^(97500)$/', 'PR' => '/^00[679]\d{2}(?:-\d{4})?$/', 'PT' => '/^\d{4}-?\d{3}$/', 'PW' => '/^(96940)$/', 'PY' => '/^(\d{4})$/', 'RE' => '/^((97|98)(4|7|8)\d{2})$/', 'RO' => '/^(\d{6})$/', 'RS' => '/^(\d{6})$/', 'RU' => '/^(\d{6})$/', 'SA' => '/^(\d{5})$/', 'SD' => '/^(\d{5})$/', 'SE' => '/^(?:SE)?\d{3}\s\d{2}$/', 'SG' => '/^(\d{6})$/', 'SH' => '/^(STHL1ZZ)$/', 'SI' => '/^(?:SI)*(\d{4})$/', 'SJ' => '/^(\d{4})$/', 'SK' => '/^\d{3}\s?\d{2}$/', 'SM' => '/^(4789\d)$/', 'SN' => '/^(\d{5})$/', 'SO' => '/^([A-Z]{2}\d{5})$/', 'SV' => '/^(?:CP)*(\d{4})$/', 'SZ' => '/^([A-Z]\d{3})$/', 'TC' => '/^(TKCA 1ZZ)$/', 'TH' => '/^(\d{5})$/', 'TJ' => '/^(\d{6})$/', 'TM' => '/^(\d{6})$/', 'TN' => '/^(\d{4})$/', 'TR' => '/^(\d{5})$/', 'TW' => '/^(\d{5})$/', 'UA' => '/^(\d{5})$/', 'US' => '/^\d{5}(-\d{4})?$/', 'UY' => '/^(\d{5})$/', 'UZ' => '/^(\d{6})$/', 'VA' => '/^(\d{5})$/', 'VE' => '/^(\d{4})$/', 'VI' => '/^008\d{2}(?:-\d{4})?$/', 'VN' => '/^(\d{6})$/', 'WF' => '/^(986\d{2})$/', 'YT' => '/^(\d{5})$/', 'ZA' => '/^(\d{4})$/', 'ZM' => '/^(\d{5})$/', ]; public $countryCode; public function __construct($countryCode, CountryCode $countryCodeRule = null) { $countryCodeRule = $countryCodeRule ?: new CountryCode(); if (!$countryCodeRule->validate($countryCode)) { throw new ComponentException(sprintf('Cannot validate postal code from "%s" country', $countryCode)); } $regex = self::DEFAULT_PATTERN; $upperCountryCode = strtoupper($countryCode); if (isset($this->postalCodes[$upperCountryCode])) { $regex = $this->postalCodes[$upperCountryCode]; } $this->countryCode = $countryCode; parent::__construct($regex); } } Validation-1.1.29/library/Rules/PrimeNumber.php000066400000000000000000000013301336766562500214120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class PrimeNumber extends AbstractRule { public function validate($input) { if (!is_numeric($input) || $input <= 1) { return false; } if ($input != 2 && ($input % 2) == 0) { return false; } for ($i = 3; $i <= ceil(sqrt($input)); $i += 2) { if (($input % $i) == 0) { return false; } } return true; } } Validation-1.1.29/library/Rules/Prnt.php000066400000000000000000000006511336766562500201150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Prnt extends AbstractCtypeRule { protected function ctypeFunction($input) { return ctype_print($input); } } Validation-1.1.29/library/Rules/Punct.php000066400000000000000000000006521336766562500202640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Punct extends AbstractCtypeRule { protected function ctypeFunction($input) { return ctype_punct($input); } } Validation-1.1.29/library/Rules/Readable.php000066400000000000000000000010311336766562500206620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Readable extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isReadable(); } return (is_string($input) && is_readable($input)); } } Validation-1.1.29/library/Rules/Regex.php000066400000000000000000000011401336766562500202360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Regex extends AbstractRule { public $regex; public function __construct($regex) { $this->regex = $regex; } public function validate($input) { if (!is_scalar($input)) { return false; } return (bool) preg_match($this->regex, $input); } } Validation-1.1.29/library/Rules/ResourceType.php000066400000000000000000000010051336766562500216150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Henrique Moody */ class ResourceType extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { return is_resource($input); } } Validation-1.1.29/library/Rules/Roman.php000066400000000000000000000007551336766562500202530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Roman extends Regex { public function __construct() { $pattern = '^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'; parent::__construct('/'.$pattern.'/'); } } Validation-1.1.29/library/Rules/ScalarVal.php000066400000000000000000000010001336766562500210270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @author Henrique Moody */ class ScalarVal extends AbstractRule { /** * {@inheritdoc} */ public function validate($input) { return is_scalar($input); } } Validation-1.1.29/library/Rules/Sf.php000066400000000000000000000046121336766562500175430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ReflectionClass; use ReflectionException; use Respect\Validation\Exceptions\ComponentException; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Validation; class Sf extends AbstractRule { const SYMFONY_CONSTRAINT_NAMESPACE = 'Symfony\Component\Validator\Constraints\%s'; public $name; private $constraint; public function __construct($name, $params = []) { $this->name = ucfirst($name); $this->constraint = $this->createSymfonyConstraint($this->name, $params); } private function createSymfonyConstraint($constraintName, $constraintConstructorParameters = []) { $fullClassName = sprintf(self::SYMFONY_CONSTRAINT_NAMESPACE, $constraintName); try { $constraintReflection = new ReflectionClass($fullClassName); } catch (ReflectionException $previousException) { $baseExceptionMessage = 'Symfony/Validator constraint "%s" does not exist.'; $exceptionMessage = sprintf($baseExceptionMessage, $constraintName); throw new ComponentException($exceptionMessage, 0, $previousException); } if ($constraintReflection->hasMethod('__construct')) { return $constraintReflection->newInstanceArgs($constraintConstructorParameters); } return $constraintReflection->newInstance(); } private function returnViolationsForConstraint($valueToValidate, Constraint $symfonyConstraint) { $validator = Validation::createValidator(); // You gotta love those Symfony namings return $validator->validateValue($valueToValidate, $symfonyConstraint); } public function assert($input) { $violations = $this->returnViolationsForConstraint($input, $this->constraint); if (count($violations) == 0) { return true; } throw $this->reportError((string) $violations); } public function validate($input) { $violations = $this->returnViolationsForConstraint($input, $this->constraint); if (count($violations)) { return false; } return true; } } Validation-1.1.29/library/Rules/Size.php000066400000000000000000000046621336766562500201120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; use SplFileInfo; /** * Validate file size. * * @author Henrique Moody */ class Size extends AbstractRule { /** * @var string */ public $minSize; /** * @var int */ public $minValue; /** * @var string */ public $maxSize; /** * @var int */ public $maxValue; /** * @param string $minSize * @param string $maxSize */ public function __construct($minSize = null, $maxSize = null) { $this->minSize = $minSize; $this->minValue = $minSize ? $this->toBytes($minSize) : null; $this->maxSize = $maxSize; $this->maxValue = $maxSize ? $this->toBytes($maxSize) : null; } /** * @todo Move it to a trait * * @param mixed $size * * @return int */ private function toBytes($size) { $value = $size; $units = ['b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb']; foreach ($units as $exponent => $unit) { if (!preg_match("/^(\d+(.\d+)?){$unit}$/i", $size, $matches)) { continue; } $value = $matches[1] * pow(1024, $exponent); break; } if (!is_numeric($value)) { throw new ComponentException(sprintf('"%s" is not a recognized file size.', $size)); } return $value; } /** * @param int $size * * @return bool */ private function isValidSize($size) { if (null !== $this->minValue && null !== $this->maxValue) { return ($size >= $this->minValue && $size <= $this->maxValue); } if (null !== $this->minValue) { return ($size >= $this->minValue); } return ($size <= $this->maxValue); } /** * {@inheritdoc} */ public function validate($input) { if ($input instanceof SplFileInfo) { return $this->isValidSize($input->getSize()); } if (is_string($input)) { return $this->isValidSize(filesize($input)); } return false; } } Validation-1.1.29/library/Rules/Slug.php000066400000000000000000000012031336766562500200760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Slug extends AbstractRule { public function validate($input) { if (strstr($input, '--')) { return false; } if (!preg_match('@^[0-9a-z\-]+$@', $input)) { return false; } if (preg_match('@^-|-$@', $input)) { return false; } return true; } } Validation-1.1.29/library/Rules/Space.php000066400000000000000000000006521336766562500202260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Space extends AbstractCtypeRule { protected function ctypeFunction($input) { return ctype_space($input); } } Validation-1.1.29/library/Rules/StartsWith.php000066400000000000000000000023151336766562500213050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class StartsWith extends AbstractRule { public $startValue; public $identical; public function __construct($startValue, $identical = false) { $this->startValue = $startValue; $this->identical = $identical; } public function validate($input) { if ($this->identical) { return $this->validateIdentical($input); } return $this->validateEquals($input); } protected function validateEquals($input) { if (is_array($input)) { return reset($input) == $this->startValue; } return 0 === mb_stripos($input, $this->startValue, 0, mb_detect_encoding($input)); } protected function validateIdentical($input) { if (is_array($input)) { return reset($input) === $this->startValue; } return 0 === mb_strpos($input, $this->startValue, 0, mb_detect_encoding($input)); } } Validation-1.1.29/library/Rules/StringType.php000066400000000000000000000006401336766562500213000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class StringType extends AbstractRule { public function validate($input) { return is_string($input); } } Validation-1.1.29/library/Rules/SubdivisionCode.php000066400000000000000000000020301336766562500222540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; /** * Validates country subdivision codes according to ISO 3166-2. * * @link http://en.wikipedia.org/wiki/ISO_3166-2 * @link http://www.geonames.org/countries/ */ class SubdivisionCode extends AbstractWrapper { public $countryCode; public function __construct($countryCode) { $shortName = ucfirst(strtolower($countryCode)).'SubdivisionCode'; $className = __NAMESPACE__.'\\SubdivisionCode\\'.$shortName; if (!class_exists($className)) { throw new ComponentException(sprintf('"%s" is not a valid country code in ISO 3166-2', $countryCode)); } $this->countryCode = $countryCode; $this->validatable = new $className(); } } Validation-1.1.29/library/Rules/SubdivisionCode/000077500000000000000000000000001336766562500215505ustar00rootroot00000000000000Validation-1.1.29/library/Rules/SubdivisionCode/AdSubdivisionCode.php000066400000000000000000000015131336766562500256170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Andorra subdivision code. * * ISO 3166-1 alpha-2: AD * * @link http://www.geonames.org/AD/administrative-division-andorra.html */ class AdSubdivisionCode extends AbstractSearcher { public $haystack = [ '02', // Canillo '03', // Encamp '04', // La Massana '05', // Ordino '06', // Sant Julia de Lòria '07', // Andorra la Vella '08', // Escaldes-Engordany ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AeSubdivisionCode.php000066400000000000000000000015321336766562500256210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for United Arab Emirates subdivision code. * * ISO 3166-1 alpha-2: AE * * @link http://www.geonames.org/AE/administrative-division-united-arab-emirates.html */ class AeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AJ', // 'Ajman 'AZ', // Abu Zaby 'DU', // Dubayy 'FU', // Al Fujayrah 'RK', // R'as al Khaymah 'SH', // Ash Shariqah 'UQ', // Umm al Qaywayn ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AfSubdivisionCode.php000066400000000000000000000034111336766562500256200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Afghanistan subdivision code. * * ISO 3166-1 alpha-2: AF * * @link http://www.geonames.org/AF/administrative-division-afghanistan.html */ class AfSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BAL', // Balkh province 'BAM', // Bamian province 'BDG', // Badghis province 'BDS', // Badakhshan province 'BGL', // Baghlan province 'DAY', // Dāykundī 'FRA', // Farah province 'FYB', // Faryab province 'GHA', // Ghazni province 'GHO', // Ghowr province 'HEL', // Helmand province 'HER', // Herat province 'JOW', // Jowzjan province 'KAB', // Kabul province 'KAN', // Kandahar province 'KAP', // Kapisa province 'KDZ', // Kondoz province 'KHO', // Khost province 'KNR', // Konar province 'LAG', // Laghman province 'LOW', // Lowgar province 'NAN', // Nangrahar province 'NIM', // Nimruz province 'NUR', // Nurestan province 'ORU', // Oruzgan province 'PAN', // Panjshir 'PAR', // Parwan province 'PIA', // Paktia province 'PKA', // Paktika province 'SAM', // Samangan province 'SAR', // Sar-e Pol province 'TAK', // Takhar province 'WAR', // Wardak province 'ZAB', // Zabol province ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AgSubdivisionCode.php000066400000000000000000000015611336766562500256250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Antigua and Barbuda subdivision code. * * ISO 3166-1 alpha-2: AG * * @link http://www.geonames.org/AG/administrative-division-antigua-and-barbuda.html */ class AgSubdivisionCode extends AbstractSearcher { public $haystack = [ '03', // Saint George '04', // Saint John '05', // Saint Mary '06', // Saint Paul '07', // Saint Peter '08', // Saint Philip '10', // Barbuda '11', // Redonda ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AiSubdivisionCode.php000066400000000000000000000011771336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Anguilla subdivision code. * * ISO 3166-1 alpha-2: AI * * @link http://www.geonames.org/AI/administrative-division-anguilla.html */ class AiSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AlSubdivisionCode.php000066400000000000000000000034111336766562500256260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Albania subdivision code. * * ISO 3166-1 alpha-2: AL * * @link http://www.geonames.org/AL/administrative-division-albania.html */ class AlSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Berat '02', // Durres '03', // Elbasan '04', // Fier '05', // Gjirokaster '06', // Korce '07', // Kukes '08', // Lezhe '09', // Diber '10', // Shkoder '11', // Tirane '12', // Vlore 'BR', // Berat 'BU', // Bulqize 'DI', // Diber 'DL', // Delvine 'DR', // Durres 'DV', // Devoll 'EL', // Elbasan 'ER', // Kolonje 'FR', // Fier 'GJ', // Gjirokaster 'GR', // Gramsh 'HA', // Has 'KA', // Kavaje 'KB', // Kurbin 'KC', // Kucove 'KO', // Korce 'KR', // Kruje 'KU', // Kukes 'LB', // Librazhd 'LE', // Lezhe 'LU', // Lushnje 'MK', // Mallakaster 'MM', // Malesi e Madhe 'MR', // Mirdite 'MT', // Mat 'PG', // Pogradec 'PQ', // Peqin 'PR', // Permet 'PU', // Puke 'SH', // Shkoder 'SK', // Skrapar 'SR', // Sarande 'TE', // Tepelene 'TP', // Tropoje 'TR', // Tirane 'VL', // Vlore ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AmSubdivisionCode.php000066400000000000000000000016261336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Armenia subdivision code. * * ISO 3166-1 alpha-2: AM * * @link http://www.geonames.org/AM/administrative-division-armenia.html */ class AmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AG', // Aragatsotn 'AR', // Ararat 'AV', // Armavir 'ER', // Yerevan 'GR', // Geghark'unik' 'KT', // Kotayk' 'LO', // Lorri 'SH', // Shirak 'SU', // Syunik' 'TV', // Tavush 'VD', // Vayots' Dzor ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AnSubdivisionCode.php000066400000000000000000000012271336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Netherlands Antilles subdivision code. * * ISO 3166-1 alpha-2: AN * * @link http://www.geonames.org/AN/administrative-division-netherlands-antilles.html */ class AnSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AoSubdivisionCode.php000066400000000000000000000021531336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Angola subdivision code. * * ISO 3166-1 alpha-2: AO * * @link http://www.geonames.org/AO/administrative-division-angola.html */ class AoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BGO', // Bengo 'BGU', // Benguela province 'BIE', // Bie 'CAB', // Cabinda 'CCU', // Cuando-Cubango 'CNN', // Cunene 'CNO', // Cuanza Norte 'CUS', // Cuanza Sul 'HUA', // Huambo province 'HUI', // Huila province 'LNO', // Lunda Norte 'LSU', // Lunda Sul 'LUA', // Luanda 'MAL', // Malange 'MOX', // Moxico 'NAM', // Namibe 'UIG', // Uige 'ZAI', // Zaire ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AqSubdivisionCode.php000066400000000000000000000012031336766562500256300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Antarctica subdivision code. * * ISO 3166-1 alpha-2: AQ * * @link http://www.geonames.org/AQ/administrative-division-antarctica.html */ class AqSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ArSubdivisionCode.php000066400000000000000000000024061336766562500256370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Argentina subdivision code. * * ISO 3166-1 alpha-2: AR * * @link http://www.geonames.org/AR/administrative-division-argentina.html */ class ArSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Salta 'B', // Buenos Aires Province 'C', // Ciudad Autónoma de Buenos Aires 'D', // San Luis 'E', // Entre Rios 'F', // La Rioja 'G', // Santiago del Estero 'H', // Chaco 'J', // San Juan 'K', // Catamarca 'L', // La Pampa 'M', // Mendoza 'N', // Misiones 'P', // Formosa 'Q', // Neuquen 'R', // Rio Negro 'S', // Santa Fe 'T', // Tucuman 'U', // Chubut 'V', // Tierra del Fuego 'W', // Corrientes 'X', // Cordoba 'Y', // Jujuy 'Z', // Santa Cruz ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AsSubdivisionCode.php000066400000000000000000000014111336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for American Samoa subdivision code. * * ISO 3166-1 alpha-2: AS * * @link http://www.geonames.org/AS/administrative-division-american-samoa.html */ class AsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'E', // Eastern 'M', // Manu'a 'R', // Rose Island 'S', // Swains Island 'W', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AtSubdivisionCode.php000066400000000000000000000015471336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Austria subdivision code. * * ISO 3166-1 alpha-2: AT * * @link http://www.geonames.org/AT/administrative-division-austria.html */ class AtSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Burgenland '2', // Karnten '3', // Niederosterreich '4', // Oberosterreich '5', // Salzburg '6', // Steiermark '7', // Tirol '8', // Vorarlberg '9', // Wien ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AuSubdivisionCode.php000066400000000000000000000016121336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Australia subdivision code. * * ISO 3166-1 alpha-2: AU * * @link http://www.geonames.org/AU/administrative-division-australia.html */ class AuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'ACT', // Australian Capital Territory 'NSW', // New South Wales 'NT', // Northern Territory 'QLD', // Queensland 'SA', // South Australia 'TAS', // Tasmania 'VIC', // Victoria 'WA', // Western Australia ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AwSubdivisionCode.php000066400000000000000000000011711336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Aruba subdivision code. * * ISO 3166-1 alpha-2: AW * * @link http://www.geonames.org/AW/administrative-division-aruba.html */ class AwSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AxSubdivisionCode.php000066400000000000000000000011721336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Åland subdivision code. * * ISO 3166-1 alpha-2: AX * * @link http://www.geonames.org/AX/administrative-division-aland.html */ class AxSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/AzSubdivisionCode.php000066400000000000000000000051611336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Azerbaijan subdivision code. * * ISO 3166-1 alpha-2: AZ * * @link http://www.geonames.org/AZ/administrative-division-azerbaijan.html */ class AzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Şirvan 'ABS', // Abseron 'AGA', // Agstafa 'AGC', // AgcabAdi 'AGM', // Agdam 'AGS', // Agdas 'AGU', // Agsu 'AST', // Astara 'BA', // Baki 'BAL', // BalakAn 'BAR', // Barda 'BEY', // Beylaqan 'BIL', // Bilasuvar 'CAB', // Cabrayil 'CAL', // Calilabab 'DAS', // Daskasan 'DAV', // Şabran 'FUZ', // Fuzuli 'GA', // Ganca 'GAD', // Gadabay 'GOR', // Goranboy 'GOY', // Goycay 'HAC', // Haciqabul 'IMI', // Imisli 'ISM', // Ismayilli 'KAL', // Kalbacar 'KAN', // Kəngərli 'KUR', // Kurdamir 'LA', // Lankaran 'LAC', // Lacin 'LAN', // Lankaran Sahari 'LER', // Lerik 'MAS', // Masalli 'MI', // Mingəçevir 'NA', // Naftalan 'NEF', // Neftcala 'NV', // Naxçivan 'NX', // Naxcivan 'OGU', // Oguz 'QAB', // Qabala 'QAX', // Qax 'QAZ', // Qazax 'QBA', // Quba 'QBI', // Qubadli 'QOB', // Qobustan 'QUS', // Qusar 'SA', // Saki 'SAB', // Sabirabad 'SAK', // Saki Sahari 'SAL', // Salyan 'SAT', // Saatli 'SIY', // Siyazan 'SKR', // Samkir 'SM', // Sumqayit 'SMI', // Samaxi 'SMX', // Samux 'SS', // Susa 'SUS', // Susa Sahari 'TAR', // Tartar 'TOV', // Tovuz 'UCA', // Ucar 'XA', // Xankandi 'XAC', // Xacmaz 'XAN', // Göygöl 'XCI', // Xocali 'XIZ', // Xizi 'XVD', // Xocavand 'YAR', // Yardimli 'YE', // Yevlax Sahari 'YEV', // Yevlax 'ZAN', // Zangilan 'ZAQ', // Zaqatala 'ZAR', // Zardab 'BAB', // Babek 'CUL', // Culfa 'ORD', // Ordubad 'SAD', // Sadarak 'SAH', // Sahbuz 'SAR', // Sarur ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BaSubdivisionCode.php000066400000000000000000000022461336766562500256210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bosnia and Herzegovina subdivision code. * * ISO 3166-1 alpha-2: BA * * @link http://www.geonames.org/BA/administrative-division-bosnia-and-herzegovina.html */ class BaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BIH', // Federacija Bosna i Hercegovina 'BRC', // Brcko District 'SRP', // Republika Srpska '01', // Unsko-sanski kanton '02', // Posavski kanton '03', // Tuzlanski kanton '04', // Zeničko-dobojski kanton '05', // Bosansko-podrinjski kanton '06', // Srednjobosanski kantonn '07', // Hercegovačko-neretvanski kanton '08', // Zapadnohercegovački kanton '09', // Kanton Sarajevo '10', // Kanton br. 10 (Livanjski kanton) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BbSubdivisionCode.php000066400000000000000000000017021336766562500256160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Barbados subdivision code. * * ISO 3166-1 alpha-2: BB * * @link http://www.geonames.org/BB/administrative-division-barbados.html */ class BbSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Christ Church '02', // Saint Andrew '03', // Saint George '04', // Saint James '05', // Saint John '06', // Saint Joseph '07', // Saint Lucy '08', // Saint Michael '09', // Saint Peter '10', // Saint Philip '11', // Saint Thomas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BdSubdivisionCode.php000066400000000000000000000053721336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bangladesh subdivision code. * * ISO 3166-1 alpha-2: BD * * @link http://www.geonames.org/BD/administrative-division-bangladesh.html */ class BdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Barisal 'B', // Chittagong 'C', // Dhaka 'D', // Khulna 'E', // Rajshahi 'F', // Rangpur 'G', // Sylhet '01', // Bandarban zila '02', // Barguna zila '03', // Bogra zila '04', // Brahmanbaria zila '05', // Bagerhat zila '06', // Barisal zila '07', // Bhola zila '08', // Comilla zila '09', // Chandpur zila '10', // Chittagong zila '11', // Cox's Bazar zila '12', // Chuadanga zila '13', // Dhaka zila '14', // Dinajpur zila '15', // Faridpur zila '16', // Feni zila '17', // Gopalganj zila '18', // Gazipur zila '19', // Gaibandha zila '20', // Habiganj zila '21', // Jamalpur zila '22', // Jessore zila '23', // Jhenaidah zila '24', // Jaipurhat zila '25', // Jhalakati zila '26', // Kishoreganj zila '27', // Khulna zila '28', // Kurigram zila '29', // Khagrachari zila '30', // Kushtia zila '31', // Lakshmipur zila '32', // Lalmonirhat zila '33', // Manikganj zila '34', // Mymensingh zila '35', // Munshiganj zila '36', // Madaripur zila '37', // Magura zila '38', // Moulvibazar zila '39', // Meherpur zila '40', // Narayanganj zila '41', // Netrakona zila '42', // Narsingdi zila '43', // Narail zila '44', // Natore zila '45', // Nawabganj zila '46', // Nilphamari zila '47', // Noakhali zila '48', // Naogaon zila '49', // Pabna zila '50', // Pirojpur zila '51', // Patuakhali zila '52', // Panchagarh zila '53', // Rajbari zila '54', // Rajshahi zila '55', // Rangpur zila '56', // Rangamati zila '57', // Sherpur zila '58', // Satkhira zila '59', // Sirajganj zila '60', // Sylhet zila '61', // Sunamganj zila '62', // Shariatpur zila '63', // Tangail zila '64', // Thakurgaon zila ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BeSubdivisionCode.php000066400000000000000000000020111336766562500256130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Belgium subdivision code. * * ISO 3166-1 alpha-2: BE * * @link http://www.geonames.org/BE/administrative-division-belgium.html */ class BeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BRU', // Brussels 'VLG', // Flanders 'WAL', // Wallonia 'BRU', // Brussels 'VAN', // Antwerpen 'VBR', // Vlaams Brabant 'VLI', // Limburg 'VOV', // Oost-Vlaanderen 'VWV', // West-Vlaanderen 'WBR', // Brabant Wallon 'WHT', // Hainaut 'WLG', // Liege 'WLX', // Luxembourg 'WNA', // Namur ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BfSubdivisionCode.php000066400000000000000000000041641336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Burkina Faso subdivision code. * * ISO 3166-1 alpha-2: BF * * @link http://www.geonames.org/BF/administrative-division-burkina-faso.html */ class BfSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Boucle du Mouhoun '02', // Cascades '03', // Centre '04', // Centre-Est '05', // Centre-Nord '06', // Centre-Ouest '07', // Centre-Sud '08', // Est '09', // Hauts-Bassins '10', // Nord '11', // Plateau-Central '12', // Sahel '13', // Sud-Ouest 'BAL', // Bale 'BAM', // Bam 'BAN', // Banwa 'BAZ', // Bazega 'BGR', // Bougouriba 'BLG', // Boulgou 'BLK', // Boulkiemde 'COM', // Comoe 'GAN', // Ganzourgou 'GNA', // Gnagna 'GOU', // Gourma 'HOU', // Houet 'IOB', // Ioba 'KAD', // Kadiogo 'KEN', // Kenedougou 'KMD', // Komondjari 'KMP', // Kompienga 'KOP', // Koulpelogo 'KOS', // Kossi 'KOT', // Kouritenga 'KOW', // Kourweogo 'LER', // Leraba 'LOR', // Loroum 'MOU', // Mouhoun 'NAM', // Namentenga 'NAO', // Nahouri 'NAY', // Nayala 'NOU', // Noumbiel 'OUB', // Oubritenga 'OUD', // Oudalan 'PAS', // Passore 'PON', // Poni 'SEN', // Seno 'SIS', // Sissili 'SMT', // Sanmatenga 'SNG', // Sanguie 'SOM', // Soum 'SOR', // Sourou 'TAP', // Tapoa 'TUI', // Tuy 'YAG', // Yagha 'YAT', // Yatenga 'ZIR', // Ziro 'ZON', // Zondoma 'ZOU', // Zoundweogo ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BgSubdivisionCode.php000066400000000000000000000025121336766562500256230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bulgaria subdivision code. * * ISO 3166-1 alpha-2: BG * * @link http://www.geonames.org/BG/administrative-division-bulgaria.html */ class BgSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Blagoevgrad '02', // Burgas '03', // Varna '04', // Veliko Turnovo '05', // Vidin '06', // Vratsa '07', // Gabrovo '08', // Dobrich '09', // Kurdzhali '10', // Kyustendil '11', // Lovech '12', // Montana '13', // Pazardzhik '14', // Pernik '15', // Pleven '16', // Plovdiv '17', // Razgrad '18', // Ruse '19', // Silistra '20', // Sliven '21', // Smolyan '22', // Sofia Region '23', // Sofia '24', // Stara Zagora '25', // Turgovishte '26', // Khaskovo '27', // Shumen '28', // Yambol ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BhSubdivisionCode.php000066400000000000000000000013721336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bahrain subdivision code. * * ISO 3166-1 alpha-2: BH * * @link http://www.geonames.org/BH/administrative-division-bahrain.html */ class BhSubdivisionCode extends AbstractSearcher { public $haystack = [ '13', // Capital '14', // Southern '15', // Muharraq '16', // Central '17', // Northern ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BiSubdivisionCode.php000066400000000000000000000020551336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Burundi subdivision code. * * ISO 3166-1 alpha-2: BI * * @link http://www.geonames.org/BI/administrative-division-burundi.html */ class BiSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BB', // Bubanza 'BL', // Bujumbura Rural 'BM', // Bujumbura Mairie 'BR', // Bururi 'CA', // Cankuzo 'CI', // Cibitoke 'GI', // Gitega 'KI', // Kirundo 'KR', // Karuzi 'KY', // Kayanza 'MA', // Makamba 'MU', // Muramvya 'MW', // Mwaro 'MY', // Muyinga 'NG', // Ngozi 'RT', // Rutana 'RY', // Ruyigi ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BjSubdivisionCode.php000066400000000000000000000016321336766562500256300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Benin subdivision code. * * ISO 3166-1 alpha-2: BJ * * @link http://www.geonames.org/BJ/administrative-division-benin.html */ class BjSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AK', // Atakora 'AL', // Alibori 'AQ', // Atlantique 'BO', // Borgou 'CO', // Collines 'DO', // Donga 'KO', // Kouffo 'LI', // Littoral 'MO', // Mono 'OU', // Oueme 'PL', // Plateau 'ZO', // Zou ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BlSubdivisionCode.php000066400000000000000000000012201336766562500256230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Barthélemy subdivision code. * * ISO 3166-1 alpha-2: BL * * @link http://www.geonames.org/BL/administrative-division-saint-barthelemy.html */ class BlSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BmSubdivisionCode.php000066400000000000000000000016451336766562500256370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bermuda subdivision code. * * ISO 3166-1 alpha-2: BM * * @link http://www.geonames.org/BM/administrative-division-bermuda.html */ class BmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DS', // Devonshire 'GC', // Saint George 'HA', // Hamilton 'HC', // Hamilton City 'PB', // Pembroke 'PG', // Paget 'SA', // Sandys 'SG', // Saint George's 'SH', // Southampton 'SM', // Smith's 'WA', // Warwick ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BnSubdivisionCode.php000066400000000000000000000013451336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Brunei subdivision code. * * ISO 3166-1 alpha-2: BN * * @link http://www.geonames.org/BN/administrative-division-brunei.html */ class BnSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BE', // Belait 'BM', // Brunei and Muara 'TE', // Temburong 'TU', // Tutong ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BoSubdivisionCode.php000066400000000000000000000016751336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bolivia subdivision code. * * ISO 3166-1 alpha-2: BO * * @link http://www.geonames.org/BO/administrative-division-bolivia.html */ class BoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'B', // Departmento Beni 'C', // Departmento Cochabamba 'H', // Departmento Chuquisaca 'L', // Departmento La Paz 'N', // Departmento Pando 'O', // Departmento Oruro 'P', // Departmento Potosi 'S', // Departmento Santa Cruz 'T', // Departmento Tarija ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BqSubdivisionCode.php000066400000000000000000000013111336766562500256310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bonaire subdivision code. * * ISO 3166-1 alpha-2: BQ * * @link http://www.geonames.org/BQ/administrative-division-bonaire.html */ class BqSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BO', // Bonaire 'SA', // Saba 'SE', // Sint Eustatius ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BrSubdivisionCode.php000066400000000000000000000025341336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Brazil subdivision code. * * ISO 3166-1 alpha-2: BR * * @link http://www.geonames.org/BR/administrative-division-brazil.html */ class BrSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AC', // Acre 'AL', // Alagoas 'AM', // Amazonas 'AP', // Amapa 'BA', // Bahia 'CE', // Ceara 'DF', // Distrito Federal 'ES', // Espirito Santo 'GO', // Goias 'MA', // Maranhao 'MG', // Minas Gerais 'MS', // Mato Grosso do Sul 'MT', // Mato Grosso 'PA', // Para 'PB', // Paraiba 'PE', // Pernambuco 'PI', // Piaui 'PR', // Parana 'RJ', // Rio de Janeiro 'RN', // Rio Grande do Norte 'RO', // Rondonia 'RR', // Roraima 'RS', // Rio Grande do Sul 'SC', // Santa Catarina 'SE', // Sergipe 'SP', // Sao Paulo 'TO', // Tocantins ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BsSubdivisionCode.php000066400000000000000000000035441336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bahamas subdivision code. * * ISO 3166-1 alpha-2: BS * * @link http://www.geonames.org/BS/administrative-division-bahamas.html */ class BsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AK', // Acklins Islands 'BI', // Bimini and Cat Cay 'BP', // Black Point 'BY', // Berry Islands 'CE', // Central Eleuthera 'CI', // Cat Island 'CK', // Crooked Island and Long Cay 'CO', // Central Abaco 'CS', // Central Andros 'EG', // East Grand Bahama 'EX', // Exuma 'FP', // City of Freeport 'GC', // Grand Cay 'HI', // Harbour Island 'HT', // Hope Town 'IN', // Inagua 'LI', // Long Island 'MC', // Mangrove Cay 'MG', // Mayaguana 'MI', // Moore's Island 'NE', // North Eleuthera 'NO', // North Abaco 'NP', // New Providence 'NS', // North Andros 'RC', // Rum Cay 'RI', // Ragged Island 'SA', // South Andros 'SE', // South Eleuthera 'SO', // South Abaco 'SS', // San Salvador 'SW', // Spanish Wells 'WG', // West Grand Bahama 'CO', // Governor’s Harbour 'FC', // Fresh Creek 'GT', // Green Turtle Cay 'HR', // High Rock District 'KE', // Kemps Bay District 'MH', // Marsh Harbour District 'RS', // Rock Sound 'SP', // Sandy Point ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BtSubdivisionCode.php000066400000000000000000000022001336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bhutan subdivision code. * * ISO 3166-1 alpha-2: BT * * @link http://www.geonames.org/BT/administrative-division-bhutan.html */ class BtSubdivisionCode extends AbstractSearcher { public $haystack = [ '11', // Paro '12', // Chukha '13', // Haa '14', // Samtse '15', // Thimphu '21', // Tsirang '22', // Dagana '23', // Punakha '24', // Wangdue Phodrang '31', // Sarpang '32', // Trongsa '33', // Bumthang '34', // Zhemgang '41', // Trashigang '42', // Mongar '43', // Pemagatshel '44', // Lhuntse '45', // Samdrup Jongkhar 'GA', // Gasa 'TY', // Trashi Yangste ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BvSubdivisionCode.php000066400000000000000000000012111336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Bouvet Island subdivision code. * * ISO 3166-1 alpha-2: BV * * @link http://www.geonames.org/BV/administrative-division-bouvet-island.html */ class BvSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BwSubdivisionCode.php000066400000000000000000000015511336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Botswana subdivision code. * * ISO 3166-1 alpha-2: BW * * @link http://www.geonames.org/BW/administrative-division-botswana.html */ class BwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CE', // Central 'GH', // Ghanzi 'KG', // Kgalagadi 'KL', // Kgatleng 'KW', // Kweneng 'NE', // North East 'NW', // North West 'SE', // South East 'SO', // Southern ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BySubdivisionCode.php000066400000000000000000000015311336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Belarus subdivision code. * * ISO 3166-1 alpha-2: BY * * @link http://www.geonames.org/BY/administrative-division-belarus.html */ class BySubdivisionCode extends AbstractSearcher { public $haystack = [ 'BR', // Brest voblast 'HM', // Horad Minsk 'HO', // Homyel voblast 'HR', // Hrodna voblast 'MA', // Mahilyow voblast 'MI', // Minsk voblast 'VI', // Vitsebsk voblast ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/BzSubdivisionCode.php000066400000000000000000000015111336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Belize subdivision code. * * ISO 3166-1 alpha-2: BZ * * @link http://www.geonames.org/BZ/administrative-division-belize.html */ class BzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BZ', // Belize District 'CY', // Cayo District 'CZL', // Corozal District 'OW', // Orange Walk District 'SC', // Stann Creek District 'TOL', // Toledo District ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CaSubdivisionCode.php000066400000000000000000000020121336766562500256110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Canada subdivision code. * * ISO 3166-1 alpha-2: CA * * @link http://www.geonames.org/CA/administrative-division-canada.html */ class CaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Alberta 'BC', // British Columbia 'MB', // Manitoba 'NB', // New Brunswick 'NL', // Newfoundland and Labrador 'NS', // Nova Scotia 'NT', // Northwest Territories 'NU', // Nunavut 'ON', // Ontario 'PE', // Prince Edward Island 'QC', // Quebec 'SK', // Saskatchewan 'YT', // Yukon Territory ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CcSubdivisionCode.php000066400000000000000000000014471336766562500256260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cocos [Keeling] Islands subdivision code. * * ISO 3166-1 alpha-2: CC * * @link http://www.geonames.org/CC/administrative-division-cocos-islands.html */ class CcSubdivisionCode extends AbstractSearcher { public $haystack = [ 'D', // Direction Island 'H', // Home Island 'O', // Horsburgh Island 'S', // South Island 'W', // West Island ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CdSubdivisionCode.php000066400000000000000000000017311336766562500256230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Democratic Republic of the Congo subdivision code. * * ISO 3166-1 alpha-2: CD * * @link http://www.geonames.org/CD/administrative-division-democratic-republic-of-the-congo.html */ class CdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BC', // Bas-Congo 'BN', // Bandundu 'EQ', // Equateur 'KA', // Katanga 'KE', // Kasai-Oriental 'KN', // Kinshasa 'KW', // Kasai-Occidental 'MA', // Maniema 'NK', // Nord-Kivu 'OR', // Orientale 'SK', // Sud-Kivu ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CfSubdivisionCode.php000066400000000000000000000021631336766562500256250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Central African Republic subdivision code. * * ISO 3166-1 alpha-2: CF * * @link http://www.geonames.org/CF/administrative-division-central-african-republic.html */ class CfSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AC', // Ouham 'BB', // Bamingui-Bangoran 'BGF', // Bangui 'BK', // Basse-Kotto 'HK', // Haute-Kotto 'HM', // Haut-Mbomou 'HS', // Mambere-Kadeï 'KB', // Nana-Grebizi 'KG', // Kemo 'LB', // Lobaye 'MB', // Mbomou 'MP', // Ombella-M'Poko 'NM', // Nana-Mambere 'OP', // Ouham-Pende 'SE', // Sangha-Mbaere 'UK', // Ouaka 'VK', // Vakaga ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CgSubdivisionCode.php000066400000000000000000000017121336766562500256250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Republic of the Congo subdivision code. * * ISO 3166-1 alpha-2: CG * * @link http://www.geonames.org/CG/administrative-division-republic-of-the-congo.html */ class CgSubdivisionCode extends AbstractSearcher { public $haystack = [ '11', // Bouenza '12', // Pool '13', // Sangha '14', // Plateaux '15', // Cuvette-Ouest '16', // Pointe-Noire '2', // Lekoumou '5', // Kouilou '7', // Likouala '8', // Cuvette '9', // Niari 'BZV', // Brazzaville ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ChSubdivisionCode.php000066400000000000000000000024611336766562500256300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Switzerland subdivision code. * * ISO 3166-1 alpha-2: CH * * @link http://www.geonames.org/CH/administrative-division-switzerland.html */ class ChSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AG', // Aargau 'AI', // Appenzell Innerhoden 'AR', // Appenzell Ausserrhoden 'BE', // Bern 'BL', // Basel-Landschaft 'BS', // Basel-Stadt 'FR', // Fribourg 'GE', // Geneva 'GL', // Glarus 'GR', // Graubunden 'JU', // Jura 'LU', // Lucerne 'NE', // Neuchâtel 'NW', // Nidwalden 'OW', // Obwalden 'SG', // St. Gallen 'SH', // Schaffhausen 'SO', // Solothurn 'SZ', // Schwyz 'TG', // Thurgau 'TI', // Ticino 'UR', // Uri 'VD', // Vaud 'VS', // Valais 'ZG', // Zug 'ZH', // Zurich ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CiSubdivisionCode.php000066400000000000000000000026241336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ivory Coast subdivision code. * * ISO 3166-1 alpha-2: CI * * @link http://www.geonames.org/CI/administrative-division-ivory-coast.html */ class CiSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Lagunes (Région des) '02', // Haut-Sassandra (Région du) '03', // Savanes (Région des) '04', // Vallée du Bandama (Région de la) '05', // Moyen-Comoé (Région du) '06', // 18 Montagnes (Région des) '07', // Lacs (Région des) '08', // Zanzan (Région du) '09', // Bas-Sassandra (Région du) '10', // Denguélé (Région du) '11', // Nzi-Comoé (Région) '12', // Marahoué (Région de la) '13', // Sud-Comoé (Région du) '14', // Worodougou (Région du) '15', // Sud-Bandama (Région du) '16', // Agnébi (Région de l') '17', // Bafing (Région du) '18', // Fromager (Région du) '19', // Moyen-Cavally (Région du) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CkSubdivisionCode.php000066400000000000000000000020071336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cook Islands subdivision code. * * ISO 3166-1 alpha-2: CK * * @link http://www.geonames.org/CK/administrative-division-cook-islands.html */ class CkSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AI', // Aitutaki 'AT', // Atiu 'MA', // Manuae 'MG', // Mangaia 'MK', // Manihiki 'MT', // Mitiaro 'MU', // Mauke 'NI', // Nassau Island 'PA', // Palmerston 'PE', // Penrhyn 'PU', // Pukapuka 'RK', // Rakahanga 'RR', // Rarotonga 'SU', // Surwarrow 'TA', // Takutea ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ClSubdivisionCode.php000066400000000000000000000022301336766562500256260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Chile subdivision code. * * ISO 3166-1 alpha-2: CL * * @link http://www.geonames.org/CL/administrative-division-chile.html */ class ClSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AI', // Aisen del General Carlos Ibanez del Campo (XI) 'AN', // Antofagasta (II) 'AP', // Arica y Parinacota 'AR', // Araucania (IX) 'AT', // Atacama (III) 'BI', // Bio-Bio (VIII) 'CO', // Coquimbo (IV) 'LI', // Libertador General Bernardo O'Higgins (VI) 'LL', // Los Lagos (X) 'LR', // Los Ríos 'MA', // Magallanes (XII) 'ML', // Maule (VII) 'RM', // Region Metropolitana (RM) 'TA', // Tarapaca (I) 'VS', // Valparaiso (V) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CmSubdivisionCode.php000066400000000000000000000020401336766562500256260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cameroon subdivision code. * * ISO 3166-1 alpha-2: CM * * @link http://www.geonames.org/CM/administrative-division-cameroon.html */ class CmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AD', // Adamawa Province (Adamaoua) 'CE', // Centre Province 'EN', // Extreme North Province (Extrême-Nord) 'ES', // East Province (Est) 'LT', // Littoral Province 'NO', // North Province (Nord) 'NW', // Northwest Province (Nord-Ouest) 'OU', // West Province (Ouest) 'SU', // South Province (Sud) 'SW', // Southwest Province (Sud-Ouest). ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CnSubdivisionCode.php000066400000000000000000000027301336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for China subdivision code. * * ISO 3166-1 alpha-2: CN * * @link http://www.geonames.org/CN/administrative-division-china.html */ class CnSubdivisionCode extends AbstractSearcher { public $haystack = [ '11', // Beijing '12', // Tianjin '13', // Hebei '14', // Shanxi '15', // Nei Mongol '21', // Liaoning '22', // Jilin '23', // Heilongjiang '31', // Shanghai '32', // Jiangsu '33', // Zhejiang '34', // Anhui '35', // Fujian '36', // Jiangxi '37', // Shandong '41', // Henan '42', // Hubei '43', // Hunan '44', // Guangdong '45', // Guangxi '46', // Hainan '50', // Chongqìng '51', // Sichuan '52', // Guizhou '53', // Yunnan '54', // Xizang Zìzhìqu (Tibet) '61', // Shaanxi '62', // Gansu '63', // Qinghai '64', // Ningxia '65', // Xinjiang '71', // Taiwan '91', // Xianggang '92', // Aomen ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CoSubdivisionCode.php000066400000000000000000000030001336766562500256250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Colombia subdivision code. * * ISO 3166-1 alpha-2: CO * * @link http://www.geonames.org/CO/administrative-division-colombia.html */ class CoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AMA', // Amazonas 'ANT', // Antioquia 'ARA', // Arauca 'ATL', // Atlantico 'BOL', // Bolivar 'BOY', // Boyaca 'CAL', // Caldas 'CAQ', // Caqueta 'CAS', // Casanare 'CAU', // Cauca 'CES', // Cesar 'CHO', // Choco 'COR', // Cordoba 'CUN', // Cundinamarca 'DC', // Bogota D.C. 'GUA', // Guainia 'GUV', // Guaviare 'HUI', // Huila 'LAG', // La Guajira 'MAG', // Magdalena 'MET', // Meta 'NAR', // Narino 'NSA', // Norte de Santander 'PUT', // Putumayo 'QUI', // Quindio 'RIS', // Risaralda 'SAN', // Santander 'SAP', // San Andres y Providencia 'SUC', // Sucre 'TOL', // Tolima 'VAC', // Valle del Cauca 'VAU', // Vaupes 'VID', // Vichada ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CrSubdivisionCode.php000066400000000000000000000014571336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Costa Rica subdivision code. * * ISO 3166-1 alpha-2: CR * * @link http://www.geonames.org/CR/administrative-division-costa-rica.html */ class CrSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Alajuela 'C', // Cartago 'G', // Guanacaste 'H', // Heredia 'L', // Limon 'P', // Puntarenas 'SJ', // San Jose ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CsSubdivisionCode.php000066400000000000000000000014011336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Serbia And Montenegro subdivision code. * * ISO 3166-1 alpha-2: CS * * @link http://www.geonames.org/CS/administrative-division-serbia-and-montenegro.html */ class CsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'KOS', // Kosovo 'MON', // Montenegro 'SER', // Serbia 'VOJ', // Vojvodina ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CuSubdivisionCode.php000066400000000000000000000021001336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cuba subdivision code. * * ISO 3166-1 alpha-2: CU * * @link http://www.geonames.org/CU/administrative-division-cuba.html */ class CuSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Pinar del Rio '03', // La Habana '04', // Matanzas '05', // Villa Clara '06', // Cienfuegos '07', // Sancti Spiritus '08', // Ciego de Avila '09', // Camaguey '10', // Las Tunas '11', // Holguin '12', // Granma '13', // Santiago de Cuba '14', // Guantanamo '15', // Artemisa '16', // Mayabeque '99', // Isla de la Juventud ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CvSubdivisionCode.php000066400000000000000000000025441336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cape Verde subdivision code. * * ISO 3166-1 alpha-2: CV * * @link http://www.geonames.org/CV/administrative-division-cape-verde.html */ class CvSubdivisionCode extends AbstractSearcher { public $haystack = [ 'B', // Ilhas de Barlavento 'S', // Ilhas de Sotavento 'BR', // Brava 'BV', // Boa Vista 'CA', // Santa Catarina 'CF', // Santa Catarina do Fogo 'CR', // Santa Cruz 'MA', // Maio 'MO', // Mosteiros 'PA', // Paul 'PN', // Porto Novo 'PR', // Praia 'RB', // Ribeira Brava 'RG', // Ribeira Grande 'RS', // Ribeira Grande de Santiago 'SD', // Sao Domingos 'SF', // Sao Filipe 'SL', // Sal 'SL*', // São Lourenço dos Orgãos 'SM', // São Miguel 'SS', // São Salvador do Mundo 'SV', // Sao Vicente 'TA', // Tarrafal 'TS', // Tarrafal de São Nicolau ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CwSubdivisionCode.php000066400000000000000000000011751336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Curacao subdivision code. * * ISO 3166-1 alpha-2: CW * * @link http://www.geonames.org/CW/administrative-division-curacao.html */ class CwSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CxSubdivisionCode.php000066400000000000000000000012171336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Christmas Island subdivision code. * * ISO 3166-1 alpha-2: CX * * @link http://www.geonames.org/CX/administrative-division-christmas-island.html */ class CxSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CySubdivisionCode.php000066400000000000000000000014301336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cyprus subdivision code. * * ISO 3166-1 alpha-2: CY * * @link http://www.geonames.org/CY/administrative-division-cyprus.html */ class CySubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Lefkosía '02', // Lemesós '03', // Lárnaka '04', // Ammóchostos '05', // Páfos '06', // Kerýneia ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/CzSubdivisionCode.php000066400000000000000000000076471336766562500256650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Czech Republic subdivision code. * * ISO 3166-1 alpha-2: CZ * * @link http://www.geonames.org/CZ/administrative-division-czech-republic.html */ class CzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'JC', // South Bohemian Region (Jihocesky kraj) 'JM', // South Moravian Region (Jihomoravsky kraj) 'KA', // Carlsbad Region (Karlovarsky kraj) 'KR', // Hradec Kralove Region (Kralovehradecky kraj) 'LI', // Liberec Region (Liberecky kraj) 'MO', // Moravian-Silesian Region (Moravskoslezsky kraj) 'OL', // Olomouc Region (Olomoucky kraj) 'PA', // Pardubice Region (Pardubicky kraj) 'PL', // Plzen( Region Plzensky kraj) 'PR', // Prague - the Capital (Praha - hlavni mesto) 'ST', // Central Bohemian Region (Stredocesky kraj) 'US', // Usti nad Labem Region (Ustecky kraj) 'VY', // Vysocina Region (kraj Vysocina) 'ZL', // Zlin Region (Zlinsky kraj) '101', // Praha 1 '102', // Praha 2 '103', // Praha 3 '104', // Praha 4 '105', // Praha 5 '106', // Praha 6 '107', // Praha 7 '108', // Praha 8 '109', // Praha 9 '10A', // Praha 10 '10B', // Praha 11 '10C', // Praha 12 '10D', // Praha 13 '10E', // Praha 14 '10F', // Praha 15 '201', // Benešov '202', // Beroun '203', // Kladno '204', // Kolín '205', // Kutná Hora '206', // Mělník '207', // Mladá Boleslav '208', // Nymburk '209', // Praha-východ '20A', // Praha-západ '20B', // Příbram '20C', // Rakovník '311', // České Budějovice '312', // Český Krumlov '313', // Jindřichův Hradec '314', // Písek '315', // Prachatice '316', // Strakonice '317', // Tábor '321', // Domažlice '322', // Klatovy '323', // Plzeň-město '324', // Plzeň-jih '325', // Plzeň-sever '326', // Rokycany '327', // Tachov '411', // Cheb '412', // Karlovy Vary '413', // Sokolov '421', // Děčín '422', // Chomutov '423', // Litoměřice '424', // Louny '425', // Most '426', // Teplice '427', // Ústí nad Labem '511', // Česká Lípa '512', // Jablonec nad Nisou '513', // Liberec '514', // Semily '521', // Hradec Králové '522', // Jičín '523', // Náchod '524', // Rychnov nad Kněžnou '525', // Trutnov '531', // Chrudim '532', // Pardubice '533', // Svitavy '534', // Ústí nad Orlicí '611', // Havlíčkův Brod '612', // Jihlava '613', // Pelhřimov '614', // Třebíč '615', // Žd’ár nad Sázavou '621', // Blansko '622', // Brno-město '623', // Brno-venkov '624', // Břeclav '625', // Hodonín '626', // Vyškov '627', // Znojmo '711', // Jeseník '712', // Olomouc '713', // Prostĕjov '714', // Přerov '715', // Šumperk '721', // Kromĕříž '722', // Uherské Hradištĕ '723', // Vsetín '724', // Zlín '801', // Bruntál '802', // Frýdek - Místek '803', // Karviná '804', // Nový Jičín '805', // Opava '806', // Ostrava - město ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DeSubdivisionCode.php000066400000000000000000000021241336766562500256220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Germany subdivision code. * * ISO 3166-1 alpha-2: DE * * @link http://www.geonames.org/DE/administrative-division-germany.html */ class DeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BB', // Brandenburg 'BE', // Berlin 'BW', // Baden-Württemberg 'BY', // Bayern 'HB', // Bremen 'HE', // Hessen 'HH', // Hamburg 'MV', // Mecklenburg-Vorpommern 'NI', // Niedersachsen 'NW', // Nordrhein-Westfalen 'RP', // Rheinland-Pfalz 'SH', // Schleswig-Holstein 'SL', // Saarland 'SN', // Sachsen 'ST', // Sachsen-Anhalt 'TH', // Thüringen ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DjSubdivisionCode.php000066400000000000000000000014211336766562500256260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Djibouti subdivision code. * * ISO 3166-1 alpha-2: DJ * * @link http://www.geonames.org/DJ/administrative-division-djibouti.html */ class DjSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AR', // Arta 'AS', // 'Ali Sabih 'DI', // Dikhil 'DJ', // Djibouti 'OB', // Obock 'TA', // Tadjoura ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DkSubdivisionCode.php000066400000000000000000000014521336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Denmark subdivision code. * * ISO 3166-1 alpha-2: DK * * @link http://www.geonames.org/DK/administrative-division-denmark.html */ class DkSubdivisionCode extends AbstractSearcher { public $haystack = [ '81', // Region Nordjylland '82', // Region Midtjylland '83', // Region Syddanmark '84', // Region Hovedstaden '85', // Region Sjæland ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DmSubdivisionCode.php000066400000000000000000000017451336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Dominica subdivision code. * * ISO 3166-1 alpha-2: DM * * @link http://www.geonames.org/DM/administrative-division-dominica.html */ class DmSubdivisionCode extends AbstractSearcher { public $haystack = [ '02', // Saint Andrew Parish '03', // Saint David Parish '04', // Saint George Parish '05', // Saint John Parish '06', // Saint Joseph Parish '07', // Saint Luke Parish '08', // Saint Mark Parish '09', // Saint Patrick Parish '10', // Saint Paul Parish '11', // Saint Peter Parish ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DoSubdivisionCode.php000066400000000000000000000027621336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Dominican Republic subdivision code. * * ISO 3166-1 alpha-2: DO * * @link http://www.geonames.org/DO/administrative-division-dominican-republic.html */ class DoSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Distrito Nacional '02', // Azua '03', // Baoruco '04', // Barahona '05', // Dajabon '06', // Duarte '07', // Elias Pina '08', // El Seybo '09', // Espaillat '10', // Independencia '11', // La Altagracia '12', // La Romana '13', // La Vega '14', // Maria Trinidad Sanchez '15', // Monte Cristi '16', // Pedernales '17', // Peravia (Bani) '18', // Puerto Plata '19', // Salcedo '20', // Samana '21', // San Cristobal '22', // San Juan '23', // San Pedro de Macoris '24', // Sanchez Ramirez '25', // Santiago '26', // Santiago Rodriguez '27', // Valverde '28', // Monsenor Nouel '29', // Monte Plata '30', // Hato Mayor ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/DzSubdivisionCode.php000066400000000000000000000035041336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Algeria subdivision code. * * ISO 3166-1 alpha-2: DZ * * @link http://www.geonames.org/DZ/administrative-division-algeria.html */ class DzSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Adrar '02', // Chlef '03', // Laghouat '04', // Oum el-Bouaghi '05', // Batna '06', // Bejaia '07', // Biskra '08', // Bechar '09', // Blida '10', // Bouira '11', // Tamanghasset '12', // Tebessa '13', // Tlemcen '14', // Tiaret '15', // Tizi Ouzou '16', // Alger '17', // Djelfa '18', // Jijel '19', // Setif '20', // Saida '21', // Skikda '22', // Sidi Bel Abbes '23', // Annaba '24', // Guelma '25', // Constantine '26', // Medea '27', // Mostaganem '28', // M'Sila '29', // Muaskar '30', // Ouargla '31', // Oran '32', // El Bayadh '33', // Illizi '34', // Bordj Bou Arreridj '35', // Boumerdes '36', // El Tarf '37', // Tindouf '38', // Tissemsilt '39', // El Oued '40', // Khenchela '41', // Souk Ahras '42', // Tipaza '43', // Mila '44', // Ain Defla '45', // Naama '46', // Ain Temouchent '47', // Ghardaia '48', // Relizane ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EcSubdivisionCode.php000066400000000000000000000023561336766562500256300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ecuador subdivision code. * * ISO 3166-1 alpha-2: EC * * @link http://www.geonames.org/EC/administrative-division-ecuador.html */ class EcSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Azuay 'B', // Bolivar 'C', // Carchi 'D', // Orellana 'E', // Esmeraldas 'F', // Canar 'G', // Guayas 'H', // Chimborazo 'I', // Imbabura 'L', // Loja 'M', // Manabi 'N', // Napo 'O', // El Oro 'P', // Pichincha 'R', // Los Rios 'S', // Morona-Santiago 'SD', // Santo Domingo de los Tsáchilas 'SE', // Santa Elena 'T', // Tungurahua 'U', // Sucumbios 'W', // Galapagos 'X', // Cotopaxi 'Y', // Pastaza 'Z', // Zamora-Chinchipe ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EeSubdivisionCode.php000066400000000000000000000021171336766562500256250ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Estonia subdivision code. * * ISO 3166-1 alpha-2: EE * * @link http://www.geonames.org/EE/administrative-division-estonia.html */ class EeSubdivisionCode extends AbstractSearcher { public $haystack = [ '37', // Harju County '39', // Hiiu County '44', // Ida-Viru County '49', // Jõgeva County '51', // Järva County '57', // Lääne County '59', // Lääne-Viru County '65', // Põlva County '67', // Pärnu County '70', // Rapla County '74', // Saare County '78', // Tartu County '82', // Valga County '84', // Viljandi County '86', // Võru County ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EgSubdivisionCode.php000066400000000000000000000026751336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Egypt subdivision code. * * ISO 3166-1 alpha-2: EG * * @link http://www.geonames.org/EG/administrative-division-egypt.html */ class EgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'ALX', // Al Iskandariyah 'ASN', // Aswan 'AST', // Asyut 'BA', // Al Bahr al Ahmar 'BH', // Al Buhayrah 'BNS', // Bani Suwayf 'C', // Al Qahirah 'DK', // Ad Daqahliyah 'DT', // Dumyat 'FYM', // Al Fayyum 'GH', // Al Gharbiyah 'GZ', // Al Jizah 'IS', // Al Isma'iliyah 'JS', // Janub Sina' 'KB', // Al Qalyubiyah 'KFS', // Kafr ash Shaykh 'KN', // Qina 'LX', // Al Uqşur 'MN', // Al Minya 'MNF', // Al Minufiyah 'MT', // Matruh 'PTS', // Bur Sa'id 'SHG', // Suhaj 'SHR', // Ash Sharqiyah 'SIN', // Shamal Sina' 'SUZ', // As Suways 'WAD', // Al Wadi al Jadid 'HU', // Helwan 'SU', // As Sādis min Uktūbar ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EhSubdivisionCode.php000066400000000000000000000012131336766562500256240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Western Sahara subdivision code. * * ISO 3166-1 alpha-2: EH * * @link http://www.geonames.org/EH/administrative-division-western-sahara.html */ class EhSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ErSubdivisionCode.php000066400000000000000000000015571336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Eritrea subdivision code. * * ISO 3166-1 alpha-2: ER * * @link http://www.geonames.org/ER/administrative-division-eritrea.html */ class ErSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Anseba (Keren) 'DK', // Southern Red Sea (Debub-Keih-Bahri) 'DU', // Southern (Debub) 'GB', // Gash-Barka (Barentu) 'MA', // Central (Maekel) 'SK', // Northern Red Sea (Semien-Keih-Bahri) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EsSubdivisionCode.php000066400000000000000000000053441336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Spain subdivision code. * * ISO 3166-1 alpha-2: ES * * @link http://www.geonames.org/ES/administrative-division-spain.html */ class EsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Comunidad Autónoma de Andalucía 'AR', // Comunidad Autónoma de Aragón 'AS', // Comunidad Autónoma del Principado de Asturias 'CB', // Comunidad Autónoma de Cantabria 'CE', // Ceuta 'CL', // Comunidad Autónoma de Castilla y León 'CM', // Comunidad Autónoma de Castilla-La Mancha 'CN', // Comunidad Autónoma de Canarias 'CT', // Catalunya 'EX', // Comunidad Autónoma de Extremadura 'GA', // Comunidad Autónoma de Galicia 'IB', // Comunidad Autónoma de las Islas Baleares 'MC', // Comunidad Autónoma de la Región de Murcia 'MD', // Comunidad de Madrid 'ML', // Melilla 'NC', // Comunidad Foral de Navarra 'PV', // Euskal Autonomia Erkidegoa 'RI', // Comunidad Autónoma de La Rioja 'VC', // Comunidad Valenciana 'A', // Alicante 'AB', // Albacete 'AL', // Almería 'AV', // Ávila 'B', // Barcelona 'BA', // Badajoz 'BI', // Vizcaya 'BU', // Burgos 'C', // A Coruña 'CA', // Cádiz 'CC', // Cáceres 'CO', // Córdoba 'CR', // Ciudad Real 'CS', // Castellón 'CU', // Cuenca 'GC', // Las Palmas 'GI', // Girona 'GR', // Granada 'GU', // Guadalajara 'H', // Huelva 'HU', // Huesca 'J', // Jaén 'L', // Lleida 'LE', // León 'LO', // La Rioja 'LU', // Lugo 'M', // Madrid 'MA', // Málaga 'MU', // Murcia 'NA', // Navarra 'O', // Asturias 'OR', // Ourense 'P', // Palencia 'PM', // Baleares 'PO', // Pontevedra 'S', // Cantabria 'SA', // Salamanca 'SE', // Sevilla 'SG', // Segovia 'SO', // Soria 'SS', // Guipúzcoa 'T', // Tarragona 'TE', // Teruel 'TF', // Santa Cruz de Tenerife 'TO', // Toledo 'V', // Valencia 'VA', // Valladolid 'VI', // Álava 'Z', // Zaragoza 'ZA', // Zamora ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/EtSubdivisionCode.php000066400000000000000000000017031336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ethiopia subdivision code. * * ISO 3166-1 alpha-2: ET * * @link http://www.geonames.org/ET/administrative-division-ethiopia.html */ class EtSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AA', // Addis Ababa 'AF', // Afar 'AM', // Amhara 'BE', // Benishangul-Gumaz 'DD', // Dire Dawa 'GA', // Gambela 'HA', // Hariai 'OR', // Oromia 'SN', // Southern Nations - Nationalities and Peoples Region 'SO', // Somali 'TI', // Tigray ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FiSubdivisionCode.php000066400000000000000000000040371336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Finland subdivision code. * * ISO 3166-1 alpha-2: FI * * @link http://www.geonames.org/FI/administrative-division-finland.html */ class FiSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Ahvenanmaa [Finnish] / Åland [Swedish] '02', // Etelä-Karjala [Finnish] / Södra Karelen [Swedish] '03', // Etelä-Pohjanmaa [Finnish] / Södra Österbotten [Swedish] '04', // Etelä-Savo [Finnish] / Södra Savolax [Swedish] '05', // Kainuu [Finnish] / Kajanaland [Swedish] '06', // Kanta-Häme [Finnish] / Egentliga Tavastland [Swedish] '07', // Keski-Pohjanmaa [Finnish] / Mellersta Österbotten [Swedish] '08', // Keski-Suomi [Finnish] / Mellersta Finland [Swedish] '09', // Kymenlaakso [Finnish] / Kymmenedalen [Swedish] '10', // Lappi [Finnish] / Lappland [Swedish] '11', // Pirkanmaa [Finnish] / Birkaland [Swedish] '12', // Pohjanmaa [Finnish] / Österbotten [Swedish] '13', // Pohjois-Karjala [Finnish] / Norra Karelen [Swedish] '14', // Pohjois-Pohjanmaa [Finnish] / Norra Österbotten [Swedish] '15', // Pohjois-Savo [Finnish] / Norra Savolax [Swedish] '16', // Päijät-Häme [Finnish] / Päijänne-Tavastland [Swedish] '17', // Satakunta [Finnish and Swedish] '18', // Uusimaa [Finnish] / Nyland [Swedish] '19', // Varsinais-Suomi [Finnish] / Egentliga Finland [Swedish] 'AL', // Ahvenanmaan laani 'ES', // Etela-Suomen laani 'IS', // Ita-Suomen laani 'LL', // Lapin laani 'LS', // Lansi-Suomen laani 'OL', // Oulun laani ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FjSubdivisionCode.php000066400000000000000000000014201336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Fiji subdivision code. * * ISO 3166-1 alpha-2: FJ * * @link http://www.geonames.org/FJ/administrative-division-fiji.html */ class FjSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Central Division 'E', // Eastern Division 'N', // Northern Division 'R', // Rotuma 'W', // Western Division ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FkSubdivisionCode.php000066400000000000000000000012171336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Falkland Islands subdivision code. * * ISO 3166-1 alpha-2: FK * * @link http://www.geonames.org/FK/administrative-division-falkland-islands.html */ class FkSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FmSubdivisionCode.php000066400000000000000000000013411336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Micronesia subdivision code. * * ISO 3166-1 alpha-2: FM * * @link http://www.geonames.org/FM/administrative-division-micronesia.html */ class FmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'KSA', // Kosrae 'PNI', // Pohnpei 'TRK', // Chuuk 'YAP', // Yap ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FoSubdivisionCode.php000066400000000000000000000012111336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Faroe Islands subdivision code. * * ISO 3166-1 alpha-2: FO * * @link http://www.geonames.org/FO/administrative-division-faroe-islands.html */ class FoSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/FrSubdivisionCode.php000066400000000000000000000113411336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for France subdivision code. * * ISO 3166-1 alpha-2: FR * * @link http://www.geonames.org/FR/administrative-division-france.html * @link https://www.iso.org/obp/ui/en/#iso:code:3166:FR */ class FrSubdivisionCode extends AbstractSearcher { public $haystack = [ 'ARA', // Auvergne-Rhône-Alpes 'BFC', // Bourgogne-Franche-Comté 'BRE', // Bretagne 'CVL', // Centre-Val de Loire 'COR', // Corse 'GES', // Grand Est 'GUA', // Guadeloupe 'HDF', // Hauts-de-France 'IDF', // Île-de-France 'MAY', // Mayotte 'NOR', // Normandie 'NAQ', // Nouvelle-Aquitaine 'OCC', // Occitanie 'PDL', // Pays de la Loire 'PAC', // Provence-Alpes-Côte d'Azur 'LRE', // La Réunion '01', // Ain '02', // Aisne '03', // Allier '04', // Alpes-de-Haute-Provence '05', // Hautes-Alpes '06', // Alpes-Maritimes '07', // Ardèche '08', // Ardennes '09', // Ariège '10', // Aube '11', // Aude '12', // Aveyron '13', // Bouches-du-Rhône '14', // Calvados '15', // Cantal '16', // Charente '17', // Charente-Maritime '18', // Cher '19', // Corrèze '21', // Côte-d'Or '22', // Côtes-d'Armor '23', // Creuse '24', // Dordogne '25', // Doubs '26', // Drôme '27', // Eure '28', // Eure-et-Loir '29', // Finistère '2A', // Corse-du-Sud '2B', // Haute-Corse '30', // Gard '31', // Haute-Garonne '32', // Gers '33', // Gironde '34', // Hérault '35', // Ille-et-Vilaine '36', // Indre '37', // Indre-et-Loire '38', // Isère '39', // Jura '40', // Landes '41', // Loir-et-Cher '42', // Loire '43', // Haute-Loire '44', // Loire-Atlantique '45', // Loiret '46', // Lot '47', // Lot-et-Garonne '48', // Lozère '49', // Maine-et-Loire '50', // Manche '51', // Marne '52', // Haute-Marne '53', // Mayenne '54', // Meurthe-et-Moselle '55', // Meuse '56', // Morbihan '57', // Moselle '58', // Nièvre '59', // Nord '60', // Oise '61', // Orne '62', // Pas-de-Calais '63', // Puy-de-Dôme '64', // Pyrénées-Atlantiques '65', // Hautes-Pyrénées '66', // Pyrénées-Orientales '67', // Bas-Rhin '68', // Haut-Rhin '69', // Rhône '70', // Haute-Saône '71', // Saône-et-Loire '72', // Sarthe '73', // Savoie '74', // Haute-Savoie '75', // Paris '76', // Seine-Maritime '77', // Seine-et-Marne '78', // Yvelines '79', // Deux-Sèvres '80', // Somme '81', // Tarn '82', // Tarn-et-Garonne '83', // Var '84', // Vaucluse '85', // Vendée '86', // Vienne '87', // Haute-Vienne '88', // Vosges '89', // Yonne '90', // Territoire de Belfort '91', // Essonne '92', // Hauts-de-Seine '93', // Seine-Saint-Denis '94', // Val-de-Marne '95', // Val-d'Oise 'BL', // Saint Barthélemy (see also separate ISO 3166-1 entry under BL) 'CP', // Clipperton 'GF', // Guyane (française) (see also separate country code entry under GF) 'GP', // Guadeloupe (see also separate country code entry under GP) 'MF', // Saint Martin (see also separate ISO 3166-1 entry under MF) 'MQ', // Martinique (see also separate country code entry under MQ) 'NC', // Nouvelle-Calédonie (see also separate ISO 3166-1 entry under NC) 'PF', // Polynésie française (see also separate ISO 3166-1 entry under PF) 'PM', // Saint-Pierre-et-Miquelon (see also separate ISO 3166-1 entry under PM) 'RE', // La Réunion (see also separate country code entry under RE) 'TF', // Terres Australes Françaises (see also separate ISO 3166-1 entry under TF) 'WF', // Wallis et Futuna (see also separate ISO 3166-1 entry under WF) 'YT', // Mayotte (see also separate ISO 3166-1 entry under YT) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GaSubdivisionCode.php000066400000000000000000000015541336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Gabon subdivision code. * * ISO 3166-1 alpha-2: GA * * @link http://www.geonames.org/GA/administrative-division-gabon.html */ class GaSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Estuaire '2', // Haut-Ogooue '3', // Moyen-Ogooue '4', // Ngounie '5', // Nyanga '6', // Ogooue-Ivindo '7', // Ogooue-Lolo '8', // Ogooue-Maritime '9', // Woleu-Ntem ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GbSubdivisionCode.php000066400000000000000000000171231336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for United Kingdom subdivision code. * * ISO 3166-1 alpha-2: GB * * @link http://www.geonames.org/GB/administrative-division-united-kingdom.html */ class GbSubdivisionCode extends AbstractSearcher { public $haystack = [ 'ENG', // England 'NIR', // Northern Ireland 'SCT', // Scotland 'WLS', // Wales 'ABD', // Aberdeenshire 'ABE', // Aberdeen 'AGB', // Argyll and Bute 'AGY', // Isle of Anglesey 'ANS', // Angus 'ANT', // Antrim 'ARD', // Ards 'ARM', // Armagh 'BAS', // Bath and North East Somerset 'BBD', // Blackburn with Darwen 'BDF', // Bedford 'BDG', // Barking and Dagenham 'BEN', // Brent 'BEX', // Bexley 'BFS', // Belfast 'BGE', // Bridgend 'BGW', // Blaenau Gwent 'BIR', // Birmingham 'BKM', // Buckinghamshire 'BLA', // Ballymena 'BLY', // Ballymoney 'BMH', // Bournemouth 'BNB', // Banbridge 'BNE', // Barnet 'BNH', // Brighton and Hove 'BNS', // Barnsley 'BOL', // Bolton 'BPL', // Blackpool 'BRC', // Bracknell Forest 'BRD', // Bradford 'BRY', // Bromley 'BST', // Bristol City of 'BUR', // Bury 'CAM', // Cambridgeshire 'CAY', // Caerphilly 'CBF', // Central Bedfordshire 'CGN', // Ceredigion 'CGV', // Craigavon 'CHE', // Cheshire East 'CHW', // Cheshire West and Chester 'CKF', // Carrickfergus 'CKT', // Cookstown 'CLD', // Calderdale 'CLK', // Clackmannanshire 'CLR', // Coleraine 'CMA', // Cumbria 'CMD', // Camden 'CMN', // Carmarthenshire 'CON', // Cornwall 'COV', // Coventry (West Midlands district) 'CRF', // Cardiff 'CRY', // Croydon 'CSR', // Castlereagh 'CWY', // Conwy 'DAL', // Darlington 'DBY', // Derbyshire 'DEN', // Denbighshire 'DER', // Derby 'DEV', // Devon 'DGN', // Dungannon and South Tyrone 'DGY', // Dumfries and Galloway 'DNC', // Doncaster 'DND', // Dundee 'DOR', // Dorset 'DOW', // Down 'DRY', // Derry 'DUD', // Dudley (West Midlands district) 'DUR', // Durham 'EAL', // Ealing 'EAY', // East Ayrshire 'EDH', // Edinburgh 'EDU', // East Dunbartonshire 'ELN', // East Lothian 'ELS', // Eilean Siar 'ENF', // Enfield 'ERW', // East Renfrewshire 'ERY', // East Riding of Yorkshire 'ESS', // Essex 'ESX', // East Sussex 'FAL', // Falkirk 'FER', // Fermanagh 'FIF', // Fife 'FLN', // Flintshire 'GAT', // Gateshead (Tyne 'GLG', // Glasgow 'GLS', // Gloucestershire 'GRE', // Greenwich 'GWN', // Gwynedd 'HAL', // Halton 'HAM', // Hampshire 'HAV', // Havering 'HCK', // Hackney 'HEF', // Herefordshire County of 'HIL', // Hillingdon 'HLD', // Highland 'HMF', // Hammersmith and Fulham 'HNS', // Hounslow 'HPL', // Hartlepool 'HRT', // Hertfordshire 'HRW', // Harrow 'HRY', // Haringey 'IOW', // Isle of Wight 'ISL', // Islington 'IVC', // Inverclyde 'KEC', // Kensington and Chelsea 'KEN', // Kent 'KHL', // Kingston upon Hull City of 'KIR', // Kirklees 'KTT', // Kingston upon Thames 'KWL', // Knowsley 'LAN', // Lancashire 'LBH', // Lambeth 'LCE', // Leicester 'LDS', // Leeds 'LEC', // Leicestershire 'LEW', // Lewisham 'LIN', // Lincolnshire 'LIV', // Liverpool 'LMV', // Limavady 'LND', // London City of 'LRN', // Larne 'LSB', // Lisburn 'LUT', // Luton 'MAN', // Manchester 'MDB', // Middlesbrough 'MDW', // Medway 'MFT', // Magherafelt 'MIK', // Milton Keynes 'MLN', // Midlothian 'MON', // Monmouthshire 'MRT', // Merton 'MRY', // Moray 'MTY', // Merthyr Tydfil 'MYL', // Moyle 'NAY', // North Ayrshire 'NBL', // Northumberland 'NDN', // North Down 'NEL', // North East Lincolnshire 'NET', // Newcastle upon Tyne 'NFK', // Norfolk 'NGM', // Nottingham 'NLK', // North Lanarkshire 'NLN', // North Lincolnshire 'NSM', // North Somerset 'NTA', // Newtownabbey 'NTH', // Northamptonshire 'NTL', // Neath Port Talbot 'NTT', // Nottinghamshire 'NTY', // North Tyneside 'NWM', // Newham 'NWP', // Newport 'NYK', // North Yorkshire 'NYM', // Newry and Mourne 'OLD', // Oldham 'OMH', // Omagh 'ORK', // Orkney Islands 'OXF', // Oxfordshire 'PEM', // Pembrokeshire 'PKN', // Perth and Kinross 'PLY', // Plymouth 'POL', // Poole 'POR', // Portsmouth 'POW', // Powys 'PTE', // Peterborough 'RCC', // Redcar and Cleveland 'RCH', // Rochdale 'RCT', // Rhondda Cynon Taf 'RDB', // Redbridge 'RDG', // Reading 'RFW', // Renfrewshire 'RIC', // Richmond upon Thames 'ROT', // Rotherham 'RUT', // Rutland 'SAW', // Sandwell 'SAY', // South Ayrshire 'SCB', // Scottish Borders The 'SFK', // Suffolk 'SFT', // Sefton 'SGC', // South Gloucestershire 'SHF', // Sheffield 'SHN', // St Helens 'SHR', // Shropshire 'SKP', // Stockport 'SLF', // Salford 'SLG', // Slough 'SLK', // South Lanarkshire 'SND', // Sunderland 'SOL', // Solihull 'SOM', // Somerset 'SOS', // Southend-on-Sea 'SRY', // Surrey 'STB', // Strabane 'STE', // Stoke-on-Trent 'STG', // Stirling 'STH', // Southampton 'STN', // Sutton 'STS', // Staffordshire 'STT', // Stockton-on-Tees 'STY', // South Tyneside 'SWA', // Swansea 'SWD', // Swindon 'SWK', // Southwark 'TAM', // Tameside 'TFW', // Telford and Wrekin 'THR', // Thurrock 'TOB', // Torbay 'TOF', // Torfaen 'TRF', // Trafford 'TWH', // Tower Hamlets 'VGL', // Vale of Glamorgan 'WAR', // Warwickshire 'WBK', // West Berkshire 'WDU', // West Dunbartonshire 'WFT', // Waltham Forest 'WGN', // Wigan 'WIL', // Wiltshire 'WKF', // Wakefield 'WLL', // Walsall 'WLN', // West Lothian 'WLV', // Wolverhampton 'WND', // Wandsworth 'WNM', // Windsor and Maidenhead 'WOK', // Wokingham 'WOR', // Worcestershire 'WRL', // Wirral 'WRT', // Warrington 'WRX', // Wrexham 'WSM', // Westminster 'WSX', // West Sussex 'YOR', // York 'ZET', // Shetland Islands 'BDF', // Bedfordshire 'CHS', // Cheshire ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GdSubdivisionCode.php000066400000000000000000000015261336766562500256310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Grenada subdivision code. * * ISO 3166-1 alpha-2: GD * * @link http://www.geonames.org/GD/administrative-division-grenada.html */ class GdSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Saint Andrew '02', // Saint David '03', // Saint George '04', // Saint John '05', // Saint Mark '06', // Saint Patrick '10', // Southern Grenadine Islands ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GeSubdivisionCode.php000066400000000000000000000017541336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Georgia subdivision code. * * ISO 3166-1 alpha-2: GE * * @link http://www.geonames.org/GE/administrative-division-georgia.html */ class GeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Abkhazia 'AJ', // Ajaria 'GU', // Guria 'IM', // Imereti 'KA', // Kakheti 'KK', // Kvemo Kartli 'MM', // Mtskheta-Mtianeti 'RL', // Racha Lechkhumi and Kvemo Svaneti 'SJ', // Samtskhe-Javakheti 'SK', // Shida Kartli 'SZ', // Samegrelo-Zemo Svaneti 'TB', // Tbilisi ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GfSubdivisionCode.php000066400000000000000000000012111336766562500256220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for French Guiana subdivision code. * * ISO 3166-1 alpha-2: GF * * @link http://www.geonames.org/GF/administrative-division-french-guiana.html */ class GfSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GgSubdivisionCode.php000066400000000000000000000011771336766562500256360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guernsey subdivision code. * * ISO 3166-1 alpha-2: GG * * @link http://www.geonames.org/GG/administrative-division-guernsey.html */ class GgSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GhSubdivisionCode.php000066400000000000000000000017051336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ghana subdivision code. * * ISO 3166-1 alpha-2: GH * * @link http://www.geonames.org/GH/administrative-division-ghana.html */ class GhSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AA', // Greater Accra Region 'AH', // Ashanti Region 'BA', // Brong-Ahafo Region 'CP', // Central Region 'EP', // Eastern Region 'NP', // Northern Region 'TV', // Volta Region 'UE', // Upper East Region 'UW', // Upper West Region 'WP', // Western Region ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GiSubdivisionCode.php000066400000000000000000000012011336766562500256240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Gibraltar subdivision code. * * ISO 3166-1 alpha-2: GI * * @link http://www.geonames.org/GI/administrative-division-gibraltar.html */ class GiSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GlSubdivisionCode.php000066400000000000000000000013511336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Greenland subdivision code. * * ISO 3166-1 alpha-2: GL * * @link http://www.geonames.org/GL/administrative-division-greenland.html */ class GlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'KU', // Kujalleq 'QA', // Qaasuitsup 'QE', // Qeqqata 'SM', // Sermersooq ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GmSubdivisionCode.php000066400000000000000000000014301336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Gambia subdivision code. * * ISO 3166-1 alpha-2: GM * * @link http://www.geonames.org/GM/administrative-division-gambia.html */ class GmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'B', // Banjul 'L', // Lower River 'M', // Central River 'N', // North Bank 'U', // Upper River 'W', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GnSubdivisionCode.php000066400000000000000000000031371336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guinea subdivision code. * * ISO 3166-1 alpha-2: GN * * @link http://www.geonames.org/GN/administrative-division-guinea.html */ class GnSubdivisionCode extends AbstractSearcher { public $haystack = [ 'B', // Boké 'C', // Conakry 'D', // Kindia 'F', // Faranah 'K', // Kankan 'L', // Labé 'M', // Mamou 'N', // Nzérékoré 'BE', // Beyla 'BF', // Boffa 'BK', // Boke 'CO', // Coyah 'DB', // Dabola 'DI', // Dinguiraye 'DL', // Dalaba 'DU', // Dubreka 'FA', // Faranah 'FO', // Forecariah 'FR', // Fria 'GA', // Gaoual 'GU', // Gueckedou 'KA', // Kankan 'KB', // Koubia 'KD', // Kindia 'KE', // Kerouane 'KN', // Koundara 'KO', // Kouroussa 'KS', // Kissidougou 'LA', // Labe 'LE', // Lelouma 'LO', // Lola 'MC', // Macenta 'MD', // Mandiana 'ML', // Mali 'MM', // Mamou 'NZ', // Nzerekore 'PI', // Pita 'SI', // Siguiri 'TE', // Telimele 'TO', // Tougue 'YO', // Yomou ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GpSubdivisionCode.php000066400000000000000000000012031336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guadeloupe subdivision code. * * ISO 3166-1 alpha-2: GP * * @link http://www.geonames.org/GP/administrative-division-guadeloupe.html */ class GpSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GqSubdivisionCode.php000066400000000000000000000017231336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Equatorial Guinea subdivision code. * * ISO 3166-1 alpha-2: GQ * * @link http://www.geonames.org/GQ/administrative-division-equatorial-guinea.html */ class GqSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Región Continental 'I', // Región Insular 'AN', // Provincia Annobon 'BN', // Provincia Bioko Norte 'BS', // Provincia Bioko Sur 'CS', // Provincia Centro Sur 'KN', // Provincia Kie-Ntem 'LI', // Provincia Litoral 'WN', // Provincia Wele-Nzas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GrSubdivisionCode.php000066400000000000000000000053531336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Greece subdivision code. * * ISO 3166-1 alpha-2: GR * * @link http://www.geonames.org/GR/administrative-division-greece.html */ class GrSubdivisionCode extends AbstractSearcher { public $haystack = [ '69', // Agio Oros 'A', // Anatoliki Makedonia kai Thraki 'B', // Kentriki Makedonia 'C', // Dytiki Makedonia 'D', // Ipeiros 'E', // Thessalia 'F', // Ionia Nisia 'G', // Dytiki Ellada 'H', // Sterea Ellada 'I', // Attiki 'J', // Peloponnisos 'K', // Voreio Aigaio 'L', // Notio Aigaio 'M', // Kriti '01', // Nomós Aitolías kai Akarnanías '03', // Nomós Voiotías '04', // Nomós Evvoías '05', // Nomós Evrytanías '06', // Nomós Fthiótidos '07', // Nomós Fokídos '11', // Nomós Argolídos '12', // Nomós Arkadías '13', // Nomós Achaḯas '14', // Nomós Ileías '15', // Nomós Korinthías '16', // Nomós Lakonías '17', // Nomós Messinías '21', // Nomós Zakýnthou '22', // Nomós Kerkýras '23', // Nomós Kefallinías '24', // Nomós Lefkádas '31', // Nomós Ártis '32', // Nomós Thesprotías '33', // Nomós Ioannínon '34', // Nomós Prevézis '41', // Nomós Kardhítsas '42', // Nomós Larísis '43', // Nomós Magnisías '44', // Nomós Trikálon '51', // Nomós Grevenón '52', // Nomós Drámas '53', // Nomós Imathías '54', // Nomós Thessaloníkis '55', // Nomós Kaválas '56', // Nomós Kastoriás '57', // Nomós Kilkís '58', // Nomós Kozánis '59', // Nomós Péllis '61', // Nomós Pierías '62', // Nomós Serrón '63', // Nomós Florínis '64', // Nomós Chalkidikís '71', // Nomós Évrou '72', // Nomós Xánthis '73', // Nomós Rodópis '81', // Nomós Dodekanísou '82', // Nomós Kykládon '83', // Nomós Lésvou '84', // Nomós Sámou '85', // Nomós Chíou '91', // Nomós Irakleíou '92', // Nomós Lasithíou '93', // Nomós Rethýmnis '94', // Nomós Chaniás 'A1', // Nomós Attikís ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GsSubdivisionCode.php000066400000000000000000000013071336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for South Georgia and the South Sandwich Islands subdivision code. * * ISO 3166-1 alpha-2: GS * * @link http://www.geonames.org/GS/administrative-division-south-georgia-and-the-south-sandwich-islands.html */ class GsSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GtSubdivisionCode.php000066400000000000000000000023431336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guatemala subdivision code. * * ISO 3166-1 alpha-2: GT * * @link http://www.geonames.org/GT/administrative-division-guatemala.html */ class GtSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AV', // Alta Verapaz 'BV', // Baja Verapaz 'CM', // Chimaltenango 'CQ', // Chiquimula 'ES', // Escuintla 'GU', // Guatemala 'HU', // Huehuetenango 'IZ', // Izabal 'JA', // Jalapa 'JU', // Jutiapa 'PE', // El Peten 'PR', // El Progreso 'QC', // El Quiche 'QZ', // Quetzaltenango 'RE', // Retalhuleu 'SA', // Sacatepequez 'SM', // San Marcos 'SO', // Solola 'SR', // Santa Rosa 'SU', // Suchitepequez 'TO', // Totonicapan 'ZA', // Zacapa ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GuSubdivisionCode.php000066400000000000000000000011671336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guam subdivision code. * * ISO 3166-1 alpha-2: GU * * @link http://www.geonames.org/GU/administrative-division-guam.html */ class GuSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GwSubdivisionCode.php000066400000000000000000000017321336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guinea-Bissau subdivision code. * * ISO 3166-1 alpha-2: GW * * @link http://www.geonames.org/GW/administrative-division-guinea-bissau.html */ class GwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'L', // Leste 'N', // Norte 'S', // Sul 'BA', // Bafata Region 'BL', // Bolama Region 'BM', // Biombo Region 'BS', // Bissau Region 'CA', // Cacheu Region 'GA', // Gabu Region 'OI', // Oio Region 'QU', // Quinara Region 'TO', // Tombali Region ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/GySubdivisionCode.php000066400000000000000000000017551336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Guyana subdivision code. * * ISO 3166-1 alpha-2: GY * * @link http://www.geonames.org/GY/administrative-division-guyana.html */ class GySubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Barima-Waini 'CU', // Cuyuni-Mazaruni 'DE', // Demerara-Mahaica 'EB', // East Berbice-Corentyne 'ES', // Essequibo Islands-West Demerara 'MA', // Mahaica-Berbice 'PM', // Pomeroon-Supenaam 'PT', // Potaro-Siparuni 'UD', // Upper Demerara-Berbice 'UT', // Upper Takutu-Upper Essequibo ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HkSubdivisionCode.php000066400000000000000000000025711336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Hong Kong subdivision code. * * ISO 3166-1 alpha-2: HK * * @link http://www.geonames.org/HK/administrative-division-hong-kong.html */ class HkSubdivisionCode extends AbstractSearcher { public $haystack = [ 'HCW', // Central and Western Hong Kong Island 'HEA', // Eastern Hong Kong Island 'HSO', // Southern Hong Kong Island 'HWC', // Wan Chai Hong Kong Island 'KKC', // Kowloon City Kowloon 'KKT', // Kwun Tong Kowloon 'KSS', // Sham Shui Po Kowloon 'KWT', // Wong Tai Sin Kowloon 'KYT', // Yau Tsim Mong Kowloon 'NIS', // Islands New Territories 'NKT', // Kwai Tsing New Territories 'NNO', // North New Territories 'NSK', // Sai Kung New Territories 'NST', // Sha Tin New Territories 'NTM', // Tuen Mun New Territories 'NTP', // Tai Po New Territories 'NTW', // Tsuen Wan New Territories 'NYL', // Yuen Long New Territories ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HmSubdivisionCode.php000066400000000000000000000014431336766562500256410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Heard Island and McDonald Islands subdivision code. * * ISO 3166-1 alpha-2: HM * * @link http://www.geonames.org/HM/administrative-division-heard-island-and-mcdonald-islands.html */ class HmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'F', // Flat Island 'H', // Heard Island 'M', // McDonald Island 'S', // Shag Island ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HnSubdivisionCode.php000066400000000000000000000021571336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Honduras subdivision code. * * ISO 3166-1 alpha-2: HN * * @link http://www.geonames.org/HN/administrative-division-honduras.html */ class HnSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AT', // Atlantida 'CH', // Choluteca 'CL', // Colon 'CM', // Comayagua 'CP', // Copan 'CR', // Cortes 'EP', // El Paraiso 'FM', // Francisco Morazan 'GD', // Gracias a Dios 'IB', // Islas de la Bahia (Bay Islands) 'IN', // Intibuca 'LE', // Lempira 'LP', // La Paz 'OC', // Ocotepeque 'OL', // Olancho 'SB', // Santa Barbara 'VA', // Valle 'YO', // Yoro ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HrSubdivisionCode.php000066400000000000000000000026171336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Croatia subdivision code. * * ISO 3166-1 alpha-2: HR * * @link http://www.geonames.org/HR/administrative-division-croatia.html */ class HrSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Zagreb county '02', // Krapina-Zagorje county '03', // Sisak-Moslavina county '04', // Karlovac county '05', // Varazdin county '06', // Koprivnica-Krizevci county '07', // Bjelovar-Bilogora county '08', // Primorje-Gorski Kotar county '09', // Lika-Senj county '10', // Virovitica-Podravina county '11', // Pozega-Slavonia county '12', // Brod-Posavina county '13', // Zadar county '14', // Osijek-Baranja county '15', // Sibenik-Knin county '16', // Vukovar-Srijem county '17', // Split-Dalmatia county '18', // Istria county '19', // Dubrovnik-Neretva county '20', // Medjimurje county '21', // Zagreb (city) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HtSubdivisionCode.php000066400000000000000000000015271336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Haiti subdivision code. * * ISO 3166-1 alpha-2: HT * * @link http://www.geonames.org/HT/administrative-division-haiti.html */ class HtSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AR', // Artibonite 'CE', // Centre 'GA', // Grand'Anse 'ND', // Nord 'NE', // Nord-Est 'NO', // Nord-Ouest 'OU', // Ouest 'SD', // Sud 'SE', // Sud-Est ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/HuSubdivisionCode.php000066400000000000000000000036501336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Hungary subdivision code. * * ISO 3166-1 alpha-2: HU * * @link http://www.geonames.org/HU/administrative-division-hungary.html */ class HuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Baranya megye 'BC', // Békéscsaba 'BE', // Békés megye 'BK', // Bács-Kiskun megye 'BU', // Budapest főváros 'BZ', // Borsod-Abaúj-Zemplén megye 'CS', // Csongrád megye 'DE', // Debrecen 'DU', // Dunaújváros 'EG', // Erd 'ER', // Eger 'FE', // Fejér megye 'GS', // Győr-Moson-Sopron megye 'GY', // Győr 'HB', // Hajdú-Bihar megye 'HE', // Heves megye 'HV', // Hódmezővásárhely 'JN', // Jász-Nagykun-Szolnok megye 'KE', // Komárom-Esztergom megye 'KM', // Kecskemét 'KV', // Kaposvár 'MI', // Miskolc 'NK', // Nagykanizsa 'NO', // Nógrád megye 'NY', // Nyíregyháza 'PE', // Pest megye 'PS', // Pécs 'SD', // Szeged 'SF', // Székesfehérvár 'SH', // Szombathely 'SK', // Szolnok 'SN', // Sopron 'SO', // Somogy megye 'SS', // Szekszárd 'ST', // Salgótarján 'SZ', // Szabolcs-Szatmár-Bereg megye 'TB', // Tatabánya 'TO', // Tolna megye 'VA', // Vas megye 'VE', // Veszprém megye 'VM', // Veszprém 'ZA', // Zala megye 'ZE', // Zalaegerszeg ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IdSubdivisionCode.php000066400000000000000000000034521336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Indonesia subdivision code. * * ISO 3166-1 alpha-2: ID * * @link http://www.geonames.org/ID/administrative-division-indonesia.html */ class IdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'IJ', // Papua 'JW', // Java 'KA', // Kalimantan 'MA', // Maluku 'NU', // Nusa Tenggara 'SL', // Sulawesi 'SM', // Sumatera 'AC', // Aceh 'BA', // Bali 'BB', // Bangka-Belitung 'BE', // Bengkulu 'BT', // Banten 'GO', // Gorontalo 'JA', // Jambi 'JB', // Jawa Barat 'JI', // Jawa Timur 'JK', // Jakarta Raya 'JT', // Jawa Tengah 'KB', // Kalimantan Barat 'KI', // Kalimantan Timur 'KI', // Kalimantan Utara 'KR', // Kepulauan Riau 'KS', // Kalimantan Selatan 'KT', // Kalimantan Tengah 'LA', // Lampung 'MA', // Maluku 'MU', // Maluku Utara 'NB', // Nusa Tenggara Barat 'NT', // Nusa Tenggara Timur 'PA', // Papua 'PB', // Papua Barat 'RI', // Riau 'SA', // Sulawesi Utara 'SB', // Sumatera Barat 'SG', // Sulawesi Tenggara 'SN', // Sulawesi Selatan 'SR', // Sulawesi Barat 'SS', // Sumatera Selatan 'ST', // Sulawesi Tengah 'SU', // Sumatera Utara 'YO', // Yogyakarta ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IeSubdivisionCode.php000066400000000000000000000025271336766562500256360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ireland subdivision code. * * ISO 3166-1 alpha-2: IE * * @link http://www.geonames.org/IE/administrative-division-ireland.html */ class IeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Connaught 'L', // Leinster 'M', // Munster 'U', // Ulster 'C', // Cork 'CE', // Clare 'CN', // Cavan 'CW', // Carlow 'D', // Dublin 'DL', // Donegal 'G', // Galway 'KE', // Kildare 'KK', // Kilkenny 'KY', // Kerry 'LD', // Longford 'LH', // Louth 'LK', // Limerick 'LM', // Leitrim 'LS', // Laois 'MH', // Meath 'MN', // Monaghan 'MO', // Mayo 'OY', // Offaly 'RN', // Roscommon 'SO', // Sligo 'TA', // Tipperary 'WD', // Waterford 'WH', // Westmeath 'WW', // Wicklow 'WX', // Wexford ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IlSubdivisionCode.php000066400000000000000000000014161336766562500256410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Israel subdivision code. * * ISO 3166-1 alpha-2: IL * * @link http://www.geonames.org/IL/administrative-division-israel.html */ class IlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'D', // Southern 'HA', // Haifa 'JM', // Jerusalem 'M', // Central 'TA', // Tel Aviv 'Z', // Northern ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ImSubdivisionCode.php000066400000000000000000000012051336766562500256360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Isle of Man subdivision code. * * ISO 3166-1 alpha-2: IM * * @link http://www.geonames.org/IM/administrative-division-isle-of-man.html */ class ImSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/InSubdivisionCode.php000066400000000000000000000031251336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for India subdivision code. * * ISO 3166-1 alpha-2: IN * * @link http://www.geonames.org/IN/administrative-division-india.html */ class InSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Andaman and Nicobar Islands 'AP', // Andhra Pradesh 'AR', // Arunachal Pradesh 'AS', // Assam 'BR', // Bihar 'CH', // Chandigarh 'CT', // Chhattisgarh 'DD', // Daman and Diu 'DL', // Delhi 'DN', // Dadra and Nagar Haveli 'GA', // Goa 'GJ', // Gujarat 'HP', // Himachal Pradesh 'HR', // Haryana 'JH', // Jharkhand 'JK', // Jammu and Kashmir 'KA', // Karnataka 'KL', // Kerala 'LD', // Lakshadweep 'MH', // Maharashtra 'ML', // Meghalaya 'MN', // Manipur 'MP', // Madhya Pradesh 'MZ', // Mizoram 'NL', // Nagaland 'OR', // Orissa 'PB', // Punjab 'PY', // Pondicherry 'RJ', // Rajasthan 'SK', // Sikkim 'TN', // Tamil Nadu 'TR', // Tripura 'UL', // Uttaranchal 'UP', // Uttar Pradesh 'WB', // West Bengal ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IoSubdivisionCode.php000066400000000000000000000016431336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for British Indian Ocean Territory subdivision code. * * ISO 3166-1 alpha-2: IO * * @link http://www.geonames.org/IO/administrative-division-british-indian-ocean-territory.html */ class IoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DG', // Diego Garcia 'DI', // Danger Island 'EA', // Eagle Islands 'EG', // Egmont Islands 'NI', // Nelsons Island 'PB', // Peros Banhos 'SI', // Salomon Islands 'TB', // Three Brothers ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IqSubdivisionCode.php000066400000000000000000000021131336766562500256410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Iraq subdivision code. * * ISO 3166-1 alpha-2: IQ * * @link http://www.geonames.org/IQ/administrative-division-iraq.html */ class IqSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Al Anbar 'AR', // Arbīl 'BA', // Al Basrah 'BB', // Babil 'BG', // Baghdad 'DA', // Dahūk 'DI', // Diyala 'DQ', // Dhi Qar 'KA', // Al Karbala 'MA', // Maysan 'MU', // Al Muthanna 'NA', // An Najaf 'NI', // Ninawa 'QA', // Al Qadisyah 'SD', // Salah ad Din 'SU', // As Sulaymānīyah 'TS', // Kirkūk 'WA', // Wasit ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IrSubdivisionCode.php000066400000000000000000000027241336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Iran subdivision code. * * ISO 3166-1 alpha-2: IR * * @link http://www.geonames.org/IR/administrative-division-iran.html */ class IrSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // East Azarbaijan '02', // West Azarbaijan '03', // Ardabil '04', // Esfahan '05', // Ilam '06', // Bushehr '07', // Tehran '08', // Chahar Mahaal and Bakhtiari '10', // Khuzestan '11', // Zanjan '12', // Semnan '13', // Sistan and Baluchistan '14', // Fars '15', // Kerman '16', // Kurdistan '17', // Kermanshah '18', // Kohkiluyeh and Buyer Ahmad '19', // Gilan '20', // Lorestan '21', // Mazandaran '22', // Markazi '23', // Hormozgan '24', // Hamadan '25', // Yazd '26', // Qom '27', // Golestan '28', // Qazvin '29', // South Khorasan '30', // Razavi Khorasan '31', // North Khorasan '09', // Khorāsān ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/IsSubdivisionCode.php000066400000000000000000000015541336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Iceland subdivision code. * * ISO 3166-1 alpha-2: IS * * @link http://www.geonames.org/IS/administrative-division-iceland.html */ class IsSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Höfuðborgarsvæði '2', // Suðurnes '3', // Vesturland '4', // Vestfirðir '5', // Norðurland Vestra '6', // Norðurland Eystra '7', // Austurland '8', // Suðurland ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ItSubdivisionCode.php000066400000000000000000000101271336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Italy subdivision code. * * ISO 3166-1 alpha-2: IT * * @link http://www.geonames.org/IT/administrative-division-italy.html */ class ItSubdivisionCode extends AbstractSearcher { public $haystack = [ '21', // Piedmont '23', // Regione Autonoma Valle d'Aosta '25', // Lombardy '32', // Regione Autonoma Trentino-Alto Adige '34', // Regione del Veneto '36', // Regione Autonoma Friuli-Venezia Giulia '42', // Regione Liguria '45', // Regione Emilia-Romagna '52', // Tuscany '55', // Regione Umbria '57', // Regione Marche '62', // Regione Lazio '65', // Regione Abruzzo '67', // Regione Molise '72', // Regione Campania '75', // Regione Puglia '77', // Regione Basilicata '78', // Regione Calabria '82', // Regione Autonoma Siciliana '88', // Regione Autonoma della Sardegna 'AG', // Agrigento 'AL', // Alessandria 'AN', // Ancona 'AO', // Aosta 'AP', // Ascoli Piceno 'AQ', // L'Aquila 'AR', // Arezzo 'AT', // Asti 'AV', // Avellino 'BA', // Bari 'BG', // Bergamo 'BI', // Biella 'BL', // Belluno 'BN', // Benevento 'BO', // Bologna 'BR', // Brindisi 'BS', // Brescia 'BT', // Barletta-Andria-Trani 'BZ', // Bolzano 'CA', // Cagliari 'CB', // Campobasso 'CE', // Caserta 'CH', // Chieti 'CI', // Carbonia-Iglesias 'CL', // Caltanissetta 'CN', // Cuneo 'CO', // Como 'CR', // Cremona 'CS', // Cosenza 'CT', // Catania 'CZ', // Catanzaro 'EN', // Enna 'FC', // Forlì-Cesena 'FE', // Ferrara 'FG', // Foggia 'FI', // Firenze 'FM', // Fermo 'FR', // Frosinone 'GE', // Genova 'GO', // Gorizia 'GR', // Grosseto 'IM', // Imperia 'IS', // Isernia 'KR', // Crotone 'LC', // Lecco 'LE', // Lecce 'LI', // Livorno 'LO', // Lodi 'LT', // Latina 'LU', // Lucca 'MB', // Monza e Brianza 'MC', // Macerata 'ME', // Messina 'MI', // Milano 'MN', // Mantova 'MO', // Modena 'MS', // Massa-Carrara 'MT', // Matera 'NA', // Napoli 'NO', // Novara 'NU', // Nuoro 'OG', // Ogliastra 'OR', // Oristano 'OT', // Olbia-Tempio 'PA', // Palermo 'PC', // Piacenza 'PD', // Padova 'PE', // Pescara 'PG', // Perugia 'PI', // Pisa 'PN', // Pordenone 'PO', // Prato 'PR', // Parma 'PT', // Pistoia 'PU', // Pesaro e Urbino 'PV', // Pavia 'PZ', // Potenza 'RA', // Ravenna 'RC', // Reggio Calabria 'RE', // Reggio Emilia 'RG', // Ragusa 'RI', // Rieti 'RM', // Roma 'RN', // Rimini 'RO', // Rovigo 'SA', // Salerno 'SI', // Siena 'SO', // Sondrio 'SP', // La Spezia 'SR', // Siracusa 'SS', // Sassari 'SV', // Savona 'TA', // Taranto 'TE', // Teramo 'TN', // Trento 'TO', // Torino 'TP', // Trapani 'TR', // Terni 'TS', // Trieste 'TV', // Treviso 'UD', // Udine 'VA', // Varese 'VB', // Verbano-Cusio-Ossola 'VC', // Vercelli 'VE', // Venezia 'VI', // Vicenza 'VR', // Verona 'VS', // Medio Campidano 'VT', // Viterbo 'VV', // Vibo Valentia ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/JeSubdivisionCode.php000066400000000000000000000011731336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Jersey subdivision code. * * ISO 3166-1 alpha-2: JE * * @link http://www.geonames.org/JE/administrative-division-jersey.html */ class JeSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/JmSubdivisionCode.php000066400000000000000000000021521336766562500256410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Jamaica subdivision code. * * ISO 3166-1 alpha-2: JM * * @link http://www.geonames.org/JM/administrative-division-jamaica.html */ class JmSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Kingston Parish '02', // Saint Andrew Parish '03', // Saint Thomas Parish '04', // Portland Parish '05', // Saint Mary Parish '06', // Saint Ann Parish '07', // Trelawny Parish '08', // Saint James Parish '09', // Hanover Parish '10', // Westmoreland Parish '11', // Saint Elizabeth Parish '12', // Manchester Parish '13', // Clarendon Parish '14', // Saint Catherine Parish ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/JoSubdivisionCode.php000066400000000000000000000016501336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Jordan subdivision code. * * ISO 3166-1 alpha-2: JO * * @link http://www.geonames.org/JO/administrative-division-jordan.html */ class JoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AJ', // Ajlun 'AM', // 'Amman 'AQ', // Al 'Aqabah 'AT', // At Tafilah 'AZ', // Az Zarqa' 'BA', // Al Balqa' 'IR', // Irbid 'JA', // Jarash 'KA', // Al Karak 'MA', // Al Mafraq 'MD', // Madaba 'MN', // Ma'an ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/JpSubdivisionCode.php000066400000000000000000000036221336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Japan subdivision code. * * ISO 3166-1 alpha-2: JP * * @link http://www.geonames.org/JP/administrative-division-japan.html */ class JpSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Hokkaidō '02', // Aomori '03', // Iwate '04', // Miyagi '05', // Akita '06', // Yamagata '07', // Hukusima (Fukushima) '08', // Ibaraki '09', // Totigi (Tochigi) '10', // Gunma '11', // Saitama '12', // Tiba (Chiba) '13', // Tokyo '14', // Kanagawa '15', // Niigata '16', // Toyama '17', // Isikawa (Ishikawa) '18', // Hukui (Fukui) '19', // Yamanasi (Yamanashi) '20', // Nagano '21', // Gihu (Gifu) '22', // Sizuoka (Shizuoka) '23', // Aiti (Aichi) '24', // Mie '25', // Siga (Shiga) '26', // Kyoto '27', // Osaka '28', // Hyogo '29', // Nara '30', // Wakayama '31', // Tottori '32', // Simane (Shimane) '33', // Okayama '34', // Hirosima (Hiroshima) '35', // Yamaguti (Yamaguchi) '36', // Tokusima (Tokushima) '37', // Kagawa '38', // Ehime '39', // Koti (Kochi) '40', // Hukuoka (Fukuoka) '41', // Saga '42', // Nagasaki '43', // Kumamoto '44', // Oita '45', // Miyazaki '46', // Kagosima (Kagoshima) '47', // Okinawa ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KeSubdivisionCode.php000066400000000000000000000015221336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kenya subdivision code. * * ISO 3166-1 alpha-2: KE * * @link http://www.geonames.org/KE/administrative-division-kenya.html */ class KeSubdivisionCode extends AbstractSearcher { public $haystack = [ '110', // Nairobi Area '200', // Central '300', // Coast '400', // Eastern '500', // North Eastern '600', // Nyanza '700', // Rift Valley '800', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KgSubdivisionCode.php000066400000000000000000000015221336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kyrgyzstan subdivision code. * * ISO 3166-1 alpha-2: KG * * @link http://www.geonames.org/KG/administrative-division-kyrgyzstan.html */ class KgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'B', // Batken 'C', // Chu 'GB', // Bishkek 'GO', // Osh City 'J', // Jalal-Abad 'N', // Naryn 'O', // Osh 'T', // Talas 'Y', // Ysyk-Kol ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KhSubdivisionCode.php000066400000000000000000000024611336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cambodia subdivision code. * * ISO 3166-1 alpha-2: KH * * @link http://www.geonames.org/KH/administrative-division-cambodia.html */ class KhSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Banteay Mean Choay '10', // Kratie '11', // Mondul Kiri '12', // Phnom Penh '13', // Preah Vihear '14', // Prey Veng '15', // Pursat '16', // Rôtânôkiri '17', // Siemreap '18', // Preah Seihanu (Kompong Som or Sihanoukville) '19', // Stung Treng '2', // Battambang '20', // Svay Rieng '21', // Takeo '22', // Otdar Mean Choay '23', // Keb '24', // Pailin '3', // Kampong Cham '4', // Kampong Chhnang '5', // Kampong Speu '6', // Kampong Thom '7', // Kampot '8', // Kandal '9', // Kaoh Kong ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KiSubdivisionCode.php000066400000000000000000000013311336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kiribati subdivision code. * * ISO 3166-1 alpha-2: KI * * @link http://www.geonames.org/KI/administrative-division-kiribati.html */ class KiSubdivisionCode extends AbstractSearcher { public $haystack = [ 'G', // Gilbert Islands 'L', // Line Islands 'P', // Phoenix Islands ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KmSubdivisionCode.php000066400000000000000000000013071336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Comoros subdivision code. * * ISO 3166-1 alpha-2: KM * * @link http://www.geonames.org/KM/administrative-division-comoros.html */ class KmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Anjouan 'G', // Grande Comore 'M', // Moheli ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KnSubdivisionCode.php000066400000000000000000000023621336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Kitts and Nevis subdivision code. * * ISO 3166-1 alpha-2: KN * * @link http://www.geonames.org/KN/administrative-division-saint-kitts-and-nevis.html */ class KnSubdivisionCode extends AbstractSearcher { public $haystack = [ 'K', // Saint Kitts 'N', // Nevis '01', // Christ Church Nichola Town '02', // Saint Anne Sandy Point '03', // Saint George Basseterre '04', // Saint George Gingerland '05', // Saint James Windward '06', // Saint John Capesterre '07', // Saint John Figtree '08', // Saint Mary Cayon '09', // Saint Paul Capesterre '10', // Saint Paul Charlestown '11', // Saint Peter Basseterre '12', // Saint Thomas Lowland '13', // Saint Thomas Middle Island '15', // Trinity Palmetto Point ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KpSubdivisionCode.php000066400000000000000000000017701336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for North Korea subdivision code. * * ISO 3166-1 alpha-2: KP * * @link http://www.geonames.org/KP/administrative-division-north-korea.html */ class KpSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // P'yongyang Special City '02', // P'yongan-namdo '03', // P'yongan-bukto '04', // Chagang-do '05', // Hwanghae-namdo '06', // Hwanghae-bukto '07', // Kangwon-do '08', // Hamgyong-namdo '09', // Hamgyong-bukto '10', // Ryanggang-do (Yanggang-do) '13', // Nasŏn (Najin-Sŏnbong) ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KrSubdivisionCode.php000066400000000000000000000022721336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for South Korea subdivision code. * * ISO 3166-1 alpha-2: KR * * @link http://www.geonames.org/KR/administrative-division-south-korea.html */ class KrSubdivisionCode extends AbstractSearcher { public $haystack = [ '11', // Seoul Special City '26', // Busan Metropolitan City '27', // Daegu Metropolitan City '28', // Incheon Metropolitan City '29', // Gwangju Metropolitan City '30', // Daejeon Metropolitan City '31', // Ulsan Metropolitan City '41', // Gyeonggi-do '42', // Gangwon-do '43', // Chungcheongbuk-do '44', // Chungcheongnam-do '45', // Jeollabuk-do '46', // Jeollanam-do '47', // Gyeongsangbuk-do '48', // Gyeongsangnam-do '49', // Jeju-do ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KwSubdivisionCode.php000066400000000000000000000014441336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kuwait subdivision code. * * ISO 3166-1 alpha-2: KW * * @link http://www.geonames.org/KW/administrative-division-kuwait.html */ class KwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AH', // Al Ahmadi 'FA', // Al Farwaniyah 'HA', // Hawalli 'JA', // Al Jahra 'KU', // Al Asimah 'MU', // Mubārak al Kabīr ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KySubdivisionCode.php000066400000000000000000000015251336766562500256610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Cayman Islands subdivision code. * * ISO 3166-1 alpha-2: KY * * @link http://www.geonames.org/KY/administrative-division-cayman-islands.html */ class KySubdivisionCode extends AbstractSearcher { public $haystack = [ 'CR', // Creek 'EA', // Eastern 'ML', // Midland 'SK', // Stake Bay 'SP', // Spot Bay 'ST', // South Town 'WD', // West End 'WN', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/KzSubdivisionCode.php000066400000000000000000000021511336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kazakhstan subdivision code. * * ISO 3166-1 alpha-2: KZ * * @link http://www.geonames.org/KZ/administrative-division-kazakhstan.html */ class KzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AKM', // Aqmola 'AKT', // Aqtobe 'ALA', // Almaty 'ALM', // Almaty 'AST', // Astana 'ATY', // Atyrau 'BAY', // Baykonyr 'KAR', // Qaraghandy 'KUS', // Qustanay 'KZY', // Qyzylorda 'MAN', // Mangghystau 'PAV', // Paylodar 'SEV', // Soltustik Qazaqstan 'VOS', // Shyghys Qazaqstan 'YUZ', // Ongtustik Qazaqstan 'ZAP', // Baty Qazaqstan 'ZHA', // Zhambyl ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LaSubdivisionCode.php000066400000000000000000000021351336766562500256300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Laos subdivision code. * * ISO 3166-1 alpha-2: LA * * @link http://www.geonames.org/LA/administrative-division-laos.html */ class LaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AT', // Attapu 'BK', // Bokeo 'BL', // Bolikhamxai 'CH', // Champasak 'HO', // Houaphan 'KH', // Khammouan 'LM', // Louang Namtha 'LP', // Louangphabang 'OU', // Oudomxai 'PH', // Phongsali 'SL', // Salavan 'SV', // Savannakhet 'VI', // Vientiane 'VT', // Vientiane 'XA', // Xaignabouli 'XE', // Xekong 'XI', // Xiangkhoang 'XN', // Xaisomboun ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LbSubdivisionCode.php000066400000000000000000000015241336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Lebanon subdivision code. * * ISO 3166-1 alpha-2: LB * * @link http://www.geonames.org/LB/administrative-division-lebanon.html */ class LbSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AK', // Aakkâr 'AS', // Liban-Nord 'BA', // Beyrouth 'BH', // Baalbek-Hermel 'BI', // Béqaa 'JA', // Liban-Sud 'JL', // Mont-Liban 'NA', // Nabatîyé ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LcSubdivisionCode.php000066400000000000000000000016431336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Lucia subdivision code. * * ISO 3166-1 alpha-2: LC * * @link http://www.geonames.org/LC/administrative-division-saint-lucia.html */ class LcSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AR', // Anse-la-Raye 'CA', // Castries 'CH', // Choiseul 'DA', // Dauphin 'DE', // Dennery 'GI', // Gros-Islet 'LA', // Laborie 'MI', // Micoud 'PR', // Praslin 'SO', // Soufriere 'VF', // Vieux-Fort ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LiSubdivisionCode.php000066400000000000000000000016351336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Liechtenstein subdivision code. * * ISO 3166-1 alpha-2: LI * * @link http://www.geonames.org/LI/administrative-division-liechtenstein.html */ class LiSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Balzers '02', // Eschen '03', // Gamprin '04', // Mauren '05', // Planken '06', // Ruggell '07', // Schaan '08', // Schellenberg '09', // Triesen '10', // Triesenberg '11', // Vaduz ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LkSubdivisionCode.php000066400000000000000000000030501336766562500256370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Sri Lanka subdivision code. * * ISO 3166-1 alpha-2: LK * * @link http://www.geonames.org/LK/administrative-division-sri-lanka.html */ class LkSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Western '2', // Central '3', // Southern '4', // Northern '5', // Eastern '6', // North Western '7', // North Central '8', // Uva '9', // Sabaragamuwa '11', // Kŏḷamba '12', // Gampaha '13', // Kaḷutara '21', // Mahanuvara '22', // Mātale '23', // Nuvara Ĕliya '31', // Gālla '32', // Mātara '33', // Hambantŏṭa '41', // Yāpanaya '42', // Kilinŏchchi '43', // Mannārama '44', // Vavuniyāva '45', // Mulativ '51', // Maḍakalapuva '52', // Ampāra '53', // Trikuṇāmalaya '61', // Kuruṇægala '62', // Puttalama '71', // Anurādhapura '72', // Pŏḷŏnnaruva '81', // Badulla '82', // Mŏṇarāgala '91', // Ratnapura '92', // Kægalla ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LrSubdivisionCode.php000066400000000000000000000017151336766562500256540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Liberia subdivision code. * * ISO 3166-1 alpha-2: LR * * @link http://www.geonames.org/LR/administrative-division-liberia.html */ class LrSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BG', // Bong 'BM', // Bomi 'CM', // Grand Cape Mount 'GB', // Grand Bassa 'GG', // Grand Gedeh 'GK', // Grand Kru 'LO', // Lofa 'MG', // Margibi 'MO', // Montserrado 'MY', // Maryland 'NI', // Nimba 'RI', // River Cess 'SI', // Sinoe ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LsSubdivisionCode.php000066400000000000000000000015741336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Lesotho subdivision code. * * ISO 3166-1 alpha-2: LS * * @link http://www.geonames.org/LS/administrative-division-lesotho.html */ class LsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Maseru 'B', // Butha-Buthe 'C', // Leribe 'D', // Berea 'E', // Mafeteng 'F', // Mohale's Hoek 'G', // Quthing 'H', // Qacha's Nek 'J', // Mokhotlong 'K', // Thaba-Tseka ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LtSubdivisionCode.php000066400000000000000000000015741336766562500256610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Lithuania subdivision code. * * ISO 3166-1 alpha-2: LT * * @link http://www.geonames.org/LT/administrative-division-lithuania.html */ class LtSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AL', // Alytus 'KL', // Klaipeda 'KU', // Kaunas 'MR', // Marijampole 'PN', // Panevezys 'SA', // Siauliai 'TA', // Taurage 'TE', // Telsiai 'UT', // Utena 'VL', // Vilnius ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LuSubdivisionCode.php000066400000000000000000000013211336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Luxembourg subdivision code. * * ISO 3166-1 alpha-2: LU * * @link http://www.geonames.org/LU/administrative-division-luxembourg.html */ class LuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'D', // Diekirch 'G', // Grevenmacher 'L', // Luxembourg ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LvSubdivisionCode.php000066400000000000000000000110251336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Latvia subdivision code. * * ISO 3166-1 alpha-2: LV * * @link http://www.geonames.org/LV/administrative-division-latvia.html */ class LvSubdivisionCode extends AbstractSearcher { public $haystack = [ '001', // Aglonas Novads '002', // Aizkraukles Novads '003', // Aizputes Novads '004', // Aknīstes Novads '005', // Alojas Novads '006', // Alsungas Novads '007', // Alūksnes Novads '008', // Amatas Novads '009', // Apes Novads '010', // Auces Novads '011', // Ādažu Novads '012', // Babītes Novads '013', // Baldones Novads '014', // Baltinavas Novads '015', // Balvu Novads '016', // Bauskas Novads '017', // Beverīnas Novads '018', // Brocēnu Novads '019', // Burtnieku Novads '020', // Carnikavas Novads '021', // Cesvaines Novads '022', // Cēsu Novads '023', // Ciblas Novads '024', // Dagdas Novads '025', // Daugavpils Novads '026', // Dobeles Novads '027', // Dundagas Novads '028', // Durbes Novads '029', // Engures Novads '030', // Ērgļu Novads '031', // Garkalnes Novads '032', // Grobiņas Novads '033', // Gulbenes Novads '034', // Iecavas Novads '035', // Ikšķiles Novads '036', // Ilūkstes Novads '037', // Inčukalna Novads '038', // Jaunjelgavas Novads '039', // Jaunpiebalgas Novads '040', // Jaunpils Novads '041', // Jelgavas Novads '042', // Jēkabpils Novads '043', // Kandavas Novads '044', // Kārsavas Novads '045', // Kocēnu Novads '046', // Kokneses Novads '047', // Krāslavas Novads '048', // Krimuldas Novads '049', // Krustpils Novads '050', // Kuldīgas Novads '051', // Ķeguma Novads '052', // Ķekavas Novads '053', // Lielvārdes Novads '054', // Limbažu Novads '055', // Līgatnes Novads '056', // Līvānu Novads '057', // Lubānas Novads '058', // Ludzas Novads '059', // Madonas Novads '060', // Mazsalacas Novads '061', // Mālpils Novads '062', // Mārupes Novads '063', // Mērsraga novads '064', // Naukšēnu Novads '065', // Neretas Novads '066', // Nīcas Novads '067', // Ogres Novads '068', // Olaines Novads '069', // Ozolnieku Novads '070', // Pārgaujas Novads '071', // Pāvilostas Novads '072', // Pļaviņu Novads '073', // Preiļu Novads '074', // Priekules Novads '075', // Priekuļu Novads '076', // Raunas Novads '077', // Rēzeknes Novads '078', // Riebiņu Novads '079', // Rojas Novads '080', // Ropažu Novads '081', // Rucavas Novads '082', // Rugāju Novads '083', // Rundāles Novads '084', // Rūjienas Novads '085', // Salas Novads '086', // Salacgrīvas Novads '087', // Salaspils Novads '088', // Saldus Novads '089', // Saulkrastu Novads '090', // Sējas Novads '091', // Siguldas Novads '092', // Skrīveru Novads '093', // Skrundas Novads '094', // Smiltenes Novads '095', // Stopiņu Novads '096', // Strenču Novads '097', // Talsu Novads '098', // Tērvetes Novads '099', // Tukuma Novads '100', // Vaiņodes Novads '101', // Valkas Novads '102', // Varakļānu Novads '103', // Vārkavas Novads '104', // Vecpiebalgas Novads '105', // Vecumnieku Novads '106', // Ventspils Novads '107', // Viesītes Novads '108', // Viļakas Novads '109', // Viļānu Novads '110', // Zilupes Novads 'DGV', // Daugavpils 'JEL', // Jelgava 'JKB', // Jēkabpils 'JUR', // Jurmala 'LPX', // Liepaja 'REZ', // Rezekne 'RIX', // Riga 'VEN', // Ventspils 'VMR', // Valmiera ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/LySubdivisionCode.php000066400000000000000000000023511336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Libya subdivision code. * * ISO 3166-1 alpha-2: LY * * @link http://www.geonames.org/LY/administrative-division-libya.html */ class LySubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Banghazi 'BU', // Al Buţnān 'DR', // Darnah 'GT', // Ghāt 'JA', // Al Jabal al Akhdar 'JG', // Al Jabal al Gharbī 'JI', // Al Jifārah 'JU', // Al Jufrah 'KF', // Al Kufrah 'MB', // Al Marqab 'MI', // Misratah 'MJ', // Al Maraj 'MQ', // Murzuq 'NL', // Nālūt 'NQ', // An Nuqat al Khams 'SB', // Sabha 'SR', // Surt 'TB', // Ţarābulus 'WA', // Al Wāḩāt 'WD', // Wādī al Ḩayāt 'WS', // Wādī ash Shāţi´ 'ZA', // Az Zawiyah ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MaSubdivisionCode.php000066400000000000000000000057631336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Morocco subdivision code. * * ISO 3166-1 alpha-2: MA * * @link http://www.geonames.org/MA/administrative-division-morocco.html */ class MaSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Tanger-Tétouan '02', // Gharb-Chrarda-Beni Hssen '03', // Taza-Al Hoceima-Taounate '04', // Oriental '05', // Fès-Boulemane '06', // Meknès-Tafilalet '07', // Rabat-Salé-Zemmour-Zaër '08', // Grand Casablanca '09', // Chaouia-Ouardigha '10', // Doukkala-Abda '11', // Marrakech-Tensift-Al Haouz '12', // Tadla-Azilal '13', // Souss-Massa-Drâa '14', // Guelmim-Es Smara '15', // Laâyoune-Boujdour-Sakia El Hamra '16', // Oued ed Dahab-Lagouira 'AGD', // Agadir-Ida-Outanane 'AOU', // Aousserd (EH) 'ASZ', // Assa-Zag 'AZI', // Azilal 'BEM', // Beni Mellal 'BER', // Berkane 'BES', // Ben Slimane 'BOD', // Boujdour (EH) 'BOM', // Boulemane 'CAS', // Casablanca [Dar el Beïda] 'CHE', // Chefchaouen 'CHI', // Chichaoua 'CHT', // Chtouka-Ait Baha 'ERR', // Errachidia 'ESI', // Essaouira 'ESM', // Es Smara (EH) 'FAH', // Fahs-Beni Makada 'FES', // Fès-Dar-Dbibegh 'FIG', // Figuig 'GUE', // Guelmim 'HAJ', // El Hajeb 'HAO', // Al Haouz 'HOC', // Al Hoceïma 'IFR', // Ifrane 'INE', // Inezgane-Ait Melloul 'JDI', // El Jadida 'JRA', // Jrada 'KEN', // Kénitra 'KES', // Kelaat es Sraghna 'KHE', // Khémisset 'KHN', // Khénifra 'KHO', // Khouribga 'LAA', // Laâyoune 'LAR', // Larache 'MED', // Médiouna 'MEK', // Meknès 'MMD', // Marrakech-Medina 'MMN', // Marrakech-Menara 'MOH', // Mohammadia 'MOU', // Moulay Yacoub 'NAD', // Nador 'NOU', // Nouaceur 'OUA', // Ouarzazate 'OUD', // Oued ed Dahab (EH) 'OUJ', // Oujda-Angad 'RAB', // Rabat 'SAF', // Safi 'SAL', // Salé 'SEF', // Sefrou 'SET', // Settat 'SIK', // Sidi Kacem 'SKH', // Skhirate-Témara 'SYB', // Sidi Youssef Ben Ali 'TAI', // Taourirt 'TAO', // Taounate 'TAR', // Taroudant 'TAT', // Tata 'TAZ', // Taza 'TET', // Tétouan 'TIZ', // Tiznit 'TNG', // Tanger-Assilah 'TNT', // Tan-Tan 'ZAG', // Zagora ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/McSubdivisionCode.php000066400000000000000000000021451336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Monaco subdivision code. * * ISO 3166-1 alpha-2: MC * * @link http://www.geonames.org/MC/administrative-division-monaco.html */ class McSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CL', // La Colle 'CO', // La Condamine 'FO', // Fontvieille 'GA', // La Gare 'JE', // Jardin Exotique 'LA', // Larvotto 'MA', // Malbousquet 'MC', // Monte-Carlo 'MG', // Moneghetti 'MO', // Monaco-Ville 'MU', // Moulins 'PH', // Port-Hercule 'SD', // Sainte-Dévote 'SO', // La Source 'SP', // Spélugues 'SR', // Saint-Roman 'VR', // Vallon de la Rousse ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MdSubdivisionCode.php000066400000000000000000000034041336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Moldova subdivision code. * * ISO 3166-1 alpha-2: MD * * @link http://www.geonames.org/MD/administrative-division-moldova.html */ class MdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Raionul Anenii Noi 'BA', // Municipiul Bălţi 'BD', // Tighina 'BR', // Raionul Briceni 'BS', // Raionul Basarabeasca 'CA', // Cahul 'CL', // Raionul Călăraşi 'CM', // Raionul Cimişlia 'CR', // Raionul Criuleni 'CS', // Raionul Căuşeni 'CT', // Raionul Cantemir 'CU', // Municipiul Chişinău 'DO', // Donduşeni 'DR', // Raionul Drochia 'DU', // Dubăsari 'ED', // Raionul Edineţ 'FA', // Făleşti 'FL', // Floreşti 'GA', // U.T.A. Găgăuzia 'GL', // Raionul Glodeni 'HI', // Hînceşti 'IA', // Ialoveni 'LE', // Leova 'NI', // Nisporeni 'OC', // Raionul Ocniţa 'OR', // Raionul Orhei 'RE', // Rezina 'RI', // Rîşcani 'SD', // Raionul Şoldăneşti 'SI', // Sîngerei 'SN', // Stînga Nistrului 'SO', // Soroca 'ST', // Raionul Străşeni 'SV', // Raionul Ştefan Vodă 'TA', // Raionul Taraclia 'TE', // Teleneşti 'UN', // Raionul Ungheni ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MeSubdivisionCode.php000066400000000000000000000025241336766562500256370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Montenegro subdivision code. * * ISO 3166-1 alpha-2: ME * * @link http://www.geonames.org/ME/administrative-division-montenegro.html */ class MeSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Opština Andrijevica '02', // Opština Bar '03', // Opština Berane '04', // Opština Bijelo Polje '05', // Opština Budva '06', // Opština Cetinje '07', // Opština Danilovgrad '08', // Opština Herceg-Novi '09', // Opština Kolašin '10', // Opština Kotor '11', // Opština Mojkovac '12', // Opština Nikšić '13', // Opština Plav '14', // Opština Pljevlja '15', // Opština Plužine '16', // Opština Podgorica '17', // Opština Rožaje '18', // Opština Šavnik '19', // Opština Tivat '20', // Opština Ulcinj '21', // Opština Žabljak ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MfSubdivisionCode.php000066400000000000000000000012071336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Martin subdivision code. * * ISO 3166-1 alpha-2: MF * * @link http://www.geonames.org/MF/administrative-division-saint-martin.html */ class MfSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MgSubdivisionCode.php000066400000000000000000000015301336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Madagascar subdivision code. * * ISO 3166-1 alpha-2: MG * * @link http://www.geonames.org/MG/administrative-division-madagascar.html */ class MgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Toamasina province 'D', // Antsiranana province 'F', // Fianarantsoa province 'M', // Mahajanga province 'T', // Antananarivo province 'U', // Toliara province ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MhSubdivisionCode.php000066400000000000000000000024221336766562500256370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Marshall Islands subdivision code. * * ISO 3166-1 alpha-2: MH * * @link http://www.geonames.org/MH/administrative-division-marshall-islands.html */ class MhSubdivisionCode extends AbstractSearcher { public $haystack = [ 'L', // Ralik chain 'T', // Ratak chain 'ALK', // Ailuk 'ALL', // Ailinglaplap 'ARN', // Arno 'AUR', // Aur 'EBO', // Ebon 'ENI', // Enewetak 'JAB', // Jabat 'JAL', // Jaluit 'KIL', // Kili 'KWA', // Kwajalein 'LAE', // Lae 'LIB', // Lib 'LIK', // Likiep 'MAJ', // Majuro 'MAL', // Maloelap 'MEJ', // Mejit 'MIL', // Mili 'NMK', // Namorik 'NMU', // Namu 'RON', // Rongelap 'UJA', // Ujae 'UTI', // Utirik 'WTH', // Wotho 'WTJ', // Wotje ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MkSubdivisionCode.php000066400000000000000000000055411336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Macedonia subdivision code. * * ISO 3166-1 alpha-2: MK * * @link http://www.geonames.org/MK/administrative-division-macedonia.html */ class MkSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Aerodrom † '02', // Aračinovo '03', // Berovo '04', // Bitola '05', // Bogdanci '06', // Bogovinje '07', // Bosilovo '077', // Centar † '08', // Brvenica '09', // Butel † '10', // Valandovo '11', // Vasilevo '12', // Vevčani '13', // Veles '14', // Vinica '15', // Vraneštica '16', // Vrapčište '17', // Gazi Baba † '18', // Gevgelija '19', // Gostivar '20', // Gradsko '21', // Debar '22', // Debarca '23', // Delčevo '24', // Demir Kapija '25', // Demir Hisar '26', // Dojran '27', // Dolneni '28', // Drugovo '29', // Gjorče Petrov † '30', // Želino '31', // Zajas '32', // Zelenikovo '33', // Zrnovci '34', // Ilinden '35', // Jegunovce '36', // Kavadarci '37', // Karbinci '38', // Karpoš † '39', // Kisela Voda † '40', // Kičevo '41', // Konče '42', // Kočani '43', // Kratovo '44', // Kriva Palanka '45', // Krivogaštani '46', // Kruševo '47', // Kumanovo '48', // Lipkovo '49', // Lozovo '50', // Mavrovo-i-Rostuša '51', // Makedonska Kamenica '52', // Makedonski Brod '53', // Mogila '54', // Negotino '55', // Novaci '56', // Novo Selo '57', // Oslomej '58', // Ohrid '59', // Petrovec '60', // Pehčevo '61', // Plasnica '62', // Prilep '63', // Probištip '64', // Radoviš '65', // Rankovce '66', // Resen '67', // Rosoman '68', // Saraj † '69', // Sveti Nikole '70', // Štip '71', // Struga '72', // Strumica '73', // Studeničani '74', // Šuto Orizari † '75', // Tearce '76', // Tetovo '78', // Centar Župa '79', // Čair † '80', // Čaška '81', // Češinovo-Obleševo '82', // Čučer Sandevo '83', // Sopište '84', // Staro Nagoričane ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MlSubdivisionCode.php000066400000000000000000000015271336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mali subdivision code. * * ISO 3166-1 alpha-2: ML * * @link http://www.geonames.org/ML/administrative-division-mali.html */ class MlSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Kayes '2', // Koulikoro '3', // Sikasso '4', // Segou '5', // Mopti '6', // Tombouctou '7', // Gao '8', // Kidal 'BKO', // Bamako Capital District ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MmSubdivisionCode.php000066400000000000000000000017761336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Myanmar [Burma] subdivision code. * * ISO 3166-1 alpha-2: MM * * @link http://www.geonames.org/MM/administrative-division-myanmar.html */ class MmSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Sagaing '02', // Bago '03', // Magway '04', // Mandalay '05', // Tanintharyi '06', // Yangon '07', // Ayeyarwady '11', // Kachin State '12', // Kayah State '13', // Kayin State '14', // Chin State '15', // Mon State '16', // Rakhine State '17', // Shan State ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MnSubdivisionCode.php000066400000000000000000000023041336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mongolia subdivision code. * * ISO 3166-1 alpha-2: MN * * @link http://www.geonames.org/MN/administrative-division-mongolia.html */ class MnSubdivisionCode extends AbstractSearcher { public $haystack = [ '035', // Orhon '037', // Darhan uul '039', // Hentiy '041', // Hovsgol '043', // Hovd '046', // Uvs '047', // Tov '049', // Selenge '051', // Suhbaatar '053', // Omnogovi '055', // Ovorhangay '057', // Dzavhan '059', // DundgovL '061', // Dornod '063', // Dornogov '064', // Govi-Sumber '065', // Govi-Altay '067', // Bulgan '069', // Bayanhongor '071', // Bayan-Olgiy '073', // Arhangay '1', // Ulanbaatar ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MoSubdivisionCode.php000066400000000000000000000011711336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Macao subdivision code. * * ISO 3166-1 alpha-2: MO * * @link http://www.geonames.org/MO/administrative-division-macao.html */ class MoSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MpSubdivisionCode.php000066400000000000000000000014001336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Northern Mariana Islands subdivision code. * * ISO 3166-1 alpha-2: MP * * @link http://www.geonames.org/MP/administrative-division-northern-mariana-islands.html */ class MpSubdivisionCode extends AbstractSearcher { public $haystack = [ 'N', // Northern Islands 'R', // Rota 'S', // Saipan 'T', // Tinian ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MqSubdivisionCode.php000066400000000000000000000012031336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Martinique subdivision code. * * ISO 3166-1 alpha-2: MQ * * @link http://www.geonames.org/MQ/administrative-division-martinique.html */ class MqSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MrSubdivisionCode.php000066400000000000000000000017451336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mauritania subdivision code. * * ISO 3166-1 alpha-2: MR * * @link http://www.geonames.org/MR/administrative-division-mauritania.html */ class MrSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Hodh Ech Chargui '02', // Hodh El Gharbi '03', // Assaba '04', // Gorgol '05', // Brakna '06', // Trarza '07', // Adrar '08', // Dakhlet Nouadhibou '09', // Tagant '10', // Guidimaka '11', // Tiris Zemmour '12', // Inchiri 'NKC', // Nouakchott ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MsSubdivisionCode.php000066400000000000000000000012031336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Montserrat subdivision code. * * ISO 3166-1 alpha-2: MS * * @link http://www.geonames.org/MS/administrative-division-montserrat.html */ class MsSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MtSubdivisionCode.php000066400000000000000000000044431336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Malta subdivision code. * * ISO 3166-1 alpha-2: MT * * @link http://www.geonames.org/MT/administrative-division-malta.html */ class MtSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Attard '02', // Balzan '03', // Birgu '04', // Birkirkara '05', // Birzebbuga '06', // Bormla '07', // Dingli '08', // Fgura '09', // Floriana '10', // Fontana '11', // Gudja '12', // Gzira '13', // Ghajnsielem '14', // Gharb '15', // Gargur '16', // Ghasri '17', // Gaxaq '18', // Hamrun '19', // Iklin '20', // Isla '21', // Kalkara '22', // Kercem '23', // Kirkop '24', // Lija '25', // Luqa '26', // Marsa '27', // Marsaskala '28', // Marsaxlokk '29', // Mdina '30', // Melliea '31', // Mgarr '32', // Mosta '33', // Mqabba '34', // Msida '35', // Mtarfa '36', // Munxar '37', // Nadur '38', // Naxxar '39', // Paola '40', // Pembroke '41', // Pieta '42', // Qala '43', // Qormi '44', // Qrendi '45', // Rabat Għawdex '46', // Rabat Malta '47', // Safi '48', // San Giljan '49', // San Gwann '50', // San Lawrenz '51', // San Pawl il-Bahar '52', // Sannat '53', // Santa Lucija '54', // Santa Venera '55', // Siggiewi '56', // Sliema '57', // Swieqi '58', // Tarxien '59', // Ta Xbiex '60', // Valletta '61', // Xagra '62', // Xewkija '63', // Xgajra '64', // Zabbar '65', // Żebbuġ Għawdex '66', // Żebbuġ Malta '67', // Zejtun '68', // Zurrieq ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MuSubdivisionCode.php000066400000000000000000000022261336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mauritius subdivision code. * * ISO 3166-1 alpha-2: MU * * @link http://www.geonames.org/MU/administrative-division-mauritius.html */ class MuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AG', // Agalega Islands 'BL', // Black River 'BR', // Beau Bassin-Rose Hill 'CC', // Cargados Carajos Shoals (Saint Brandon Islands) 'CU', // Curepipe 'FL', // Flacq 'GP', // Grand Port 'MO', // Moka 'PA', // Pamplemousses 'PL', // Port Louis 'PU', // Port Louis 'PW', // Plaines Wilhems 'QB', // Quatre Bornes 'RO', // Rodrigues 'RR', // Riviere du Rempart 'SA', // Savanne 'VP', // Vacoas-Phoenix ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MvSubdivisionCode.php000066400000000000000000000034351336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Maldives subdivision code. * * ISO 3166-1 alpha-2: MV * * @link http://www.geonames.org/MV/administrative-division-maldives.html */ class MvSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CE', // Medhu 'MLE', // Male 'NC', // Medhu Uthuru 'NO', // Uthuru 'SC', // Medhu Dhekunu 'SU', // Dhekunu 'UN', // Mathi Uthuru 'US', // Mathi Dhekunu '00', // Alifu Dhaalu / Ari Atholhu Dhekunuburi '01', // Seenu / Addu Atholhu '02', // Alifu Alifu / Ari Atholhu Uthuruburi '03', // Lhaviyani / Faadhippolhu '04', // Vaavu / Felidhu Atholhu '05', // Laamu / Haddhdhunmathi '07', // Haa Alifu / Thiladhunmathee Uthuruburi '08', // Thaa / Kolhumadulu '12', // Meemu / Mulakatholhu '13', // Raa / Maalhosmadulu Uthuruburi '14', // Faafu / Nilandhe Atholhu Uthuruburi '17', // Dhaalu / Nilandhe Atholhu Dhekunuburi '20', // Baa / Maalhosmadulu Dhekunuburi '23', // Haa Dhaalu / Thiladhunmathee Dhekunuburi '24', // Shaviyani / Miladhunmadulu Uthuruburi '25', // Noonu / Miladhunmadulu Dhekunuburi '26', // Kaafu / Maale Atholhu '27', // Gaafu Alifu / Huvadhu Atholhu Uthuruburi '28', // Gaafu Dhaalu / Huvadhu Atholhu Dhekunuburi '29', // Gnaviyani / Fuvammulah ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MwSubdivisionCode.php000066400000000000000000000025721336766562500256640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Malawi subdivision code. * * ISO 3166-1 alpha-2: MW * * @link http://www.geonames.org/MW/administrative-division-malawi.html */ class MwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Central 'N', // Northern 'S', // Southern 'BA', // Balaka 'BL', // Blantyre 'CK', // Chikwawa 'CR', // Chiradzulu 'CT', // Chitipa 'DE', // Dedza 'DO', // Dowa 'KR', // Karonga 'KS', // Kasungu 'LI', // Lilongwe 'LK', // Likoma 'MC', // Mchinji 'MG', // Mangochi 'MH', // Machinga 'MU', // Mulanje 'MW', // Mwanza 'MZ', // Mzimba 'NB', // Nkhata Bay 'NE', // Neno 'NI', // Ntchisi 'NK', // Nkhotakota 'NS', // Nsanje 'NU', // Ntcheu 'PH', // Phalombe 'RU', // Rumphi 'SA', // Salima 'TH', // Thyolo 'ZO', // Zomba ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MxSubdivisionCode.php000066400000000000000000000027721336766562500256670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mexico subdivision code. * * ISO 3166-1 alpha-2: MX * * @link http://www.geonames.org/MX/administrative-division-mexico.html */ class MxSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AGU', // Aguascalientes 'BCN', // Baja California 'BCS', // Baja California Sur 'CAM', // Campeche 'CHH', // Chihuahua 'CHP', // Chiapas 'COA', // Coahuila 'COL', // Colima 'DIF', // Distrito Federal 'DUR', // Durango 'GRO', // Guerrero 'GUA', // Guanajuato 'HID', // Hidalgo 'JAL', // Jalisco 'MEX', // Mexico 'MIC', // Michoacan 'MOR', // Morelos 'NAY', // Nayarit 'NLE', // Nuevo Leon 'OAX', // Oaxaca 'PUE', // Puebla 'QUE', // Queretaro 'ROO', // Quintana Roo 'SIN', // Sinaloa 'SLP', // San Luis Potosi 'SON', // Sonora 'TAB', // Tabasco 'TAM', // Tamaulipas 'TLA', // Tlaxcala 'VER', // Veracruz 'YUC', // Yucatan 'ZAC', // Zacatecas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MySubdivisionCode.php000066400000000000000000000020231336766562500256550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Malaysia subdivision code. * * ISO 3166-1 alpha-2: MY * * @link http://www.geonames.org/MY/administrative-division-malaysia.html */ class MySubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Johor '02', // Kedah '03', // Kelantan '04', // Melaka '05', // Negeri Sembilan '06', // Pahang '07', // Pinang '08', // Perak '09', // Perlis '10', // Selangor '11', // Terengganu '12', // Sabah '13', // Sarawak '14', // Kuala Lumpur '15', // Labuan '16', // Putrajaya ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/MzSubdivisionCode.php000066400000000000000000000016161336766562500256650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mozambique subdivision code. * * ISO 3166-1 alpha-2: MZ * * @link http://www.geonames.org/MZ/administrative-division-mozambique.html */ class MzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Niassa 'B', // Manica 'G', // Gaza 'I', // Inhambane 'L', // Maputo 'MPM', // Maputo (city) 'N', // Nampula 'P', // Cabo Delgado 'Q', // Zambezia 'S', // Sofala 'T', // Tete ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NaSubdivisionCode.php000066400000000000000000000017001336766562500256270ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Namibia subdivision code. * * ISO 3166-1 alpha-2: NA * * @link http://www.geonames.org/NA/administrative-division-namibia.html */ class NaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CA', // Caprivi 'ER', // Erongo 'HA', // Hardap 'KA', // Karas 'KH', // Khomas 'KU', // Kunene 'OD', // Otjozondjupa 'OH', // Omaheke 'ON', // Oshana 'OS', // Omusati 'OT', // Oshikoto 'OW', // Ohangwena 'OK', // Kavango ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NcSubdivisionCode.php000066400000000000000000000013141336766562500256320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for New Caledonia subdivision code. * * ISO 3166-1 alpha-2: NC * * @link http://www.geonames.org/NC/administrative-division-new-caledonia.html */ class NcSubdivisionCode extends AbstractSearcher { public $haystack = [ 'L', // Iles Loyaute 'N', // Nord 'S', // Sud ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NeSubdivisionCode.php000066400000000000000000000014601336766562500256360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Niger subdivision code. * * ISO 3166-1 alpha-2: NE * * @link http://www.geonames.org/NE/administrative-division-niger.html */ class NeSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Agadez '2', // Diffa '3', // Dosso '4', // Maradi '5', // Tahoua '6', // Tillabéri '7', // Zinder '8', // Niamey ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NfSubdivisionCode.php000066400000000000000000000012131336766562500256330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Norfolk Island subdivision code. * * ISO 3166-1 alpha-2: NF * * @link http://www.geonames.org/NF/administrative-division-norfolk-island.html */ class NfSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NgSubdivisionCode.php000066400000000000000000000027651336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Nigeria subdivision code. * * ISO 3166-1 alpha-2: NG * * @link http://www.geonames.org/NG/administrative-division-nigeria.html */ class NgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Abia 'AD', // Adamawa 'AK', // Akwa Ibom 'AN', // Anambra 'BA', // Bauchi 'BE', // Benue 'BO', // Borno 'BY', // Bayelsa 'CR', // Cross River 'DE', // Delta 'EB', // Ebonyi 'ED', // Edo 'EK', // Ekiti 'EN', // Enugu 'FC', // Federal Capital Territory 'GO', // Gombe 'IM', // Imo 'JI', // Jigawa 'KD', // Kaduna 'KE', // Kebbi 'KN', // Kano 'KO', // Kogi 'KT', // Katsina 'KW', // Kwara 'LA', // Lagos 'NA', // Nassarawa 'NI', // Niger 'OG', // Ogun 'ON', // Ondo 'OS', // Osun 'OY', // Oyo 'PL', // Plateau 'RI', // Rivers 'SO', // Sokoto 'TA', // Taraba 'YO', // Yobe 'ZA', // Zamfara ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NiSubdivisionCode.php000066400000000000000000000021451336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Nicaragua subdivision code. * * ISO 3166-1 alpha-2: NI * * @link http://www.geonames.org/NI/administrative-division-nicaragua.html */ class NiSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Region Autonoma del Atlantico Norte 'AS', // Region Autonoma del Atlantico Sur 'BO', // Boaco 'CA', // Carazo 'CI', // Chinandega 'CO', // Chontales 'ES', // Esteli 'GR', // Granada 'JI', // Jinotega 'LE', // Leon 'MD', // Madriz 'MN', // Managua 'MS', // Masaya 'MT', // Matagalpa 'NS', // Nueva Segovia 'RI', // Rivas 'SJ', // Rio San Juan ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NlSubdivisionCode.php000066400000000000000000000017131336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Netherlands subdivision code. * * ISO 3166-1 alpha-2: NL * * @link http://www.geonames.org/NL/administrative-division-netherlands.html */ class NlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DR', // Drenthe 'FL', // Flevoland 'FR', // Friesland 'GE', // Gelderland 'GR', // Groningen 'LI', // Limburg 'NB', // Noord Brabant 'NH', // Noord Holland 'OV', // Overijssel 'UT', // Utrecht 'ZE', // Zeeland 'ZH', // Zuid Holland ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NoSubdivisionCode.php000066400000000000000000000022571336766562500256550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Norway subdivision code. * * ISO 3166-1 alpha-2: NO * * @link http://www.geonames.org/NO/administrative-division-norway.html */ class NoSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Ostfold '02', // Akershus '03', // Oslo '04', // Hedmark '05', // Oppland '06', // Buskerud '07', // Vestfold '08', // Telemark '09', // Aust-Agder '10', // Vest-Agder '11', // Rogaland '12', // Hordaland '14', // Sogn og Fjordane '15', // More og Romdal '16', // Sor-Trondelag '17', // Nord-Trondelag '18', // Nordland '19', // Troms '20', // Finnmark '21', // Svalbard '22', // Jan Mayen ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NpSubdivisionCode.php000066400000000000000000000021651336766562500256540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Nepal subdivision code. * * ISO 3166-1 alpha-2: NP * * @link http://www.geonames.org/NP/administrative-division-nepal.html */ class NpSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Madhyamanchal '2', // Madhya Pashchimanchal '3', // Pashchimanchal '4', // Purwanchal '5', // Sudur Pashchimanchal 'BA', // Bagmati 'BH', // Bheri 'DH', // Dhawalagiri 'GA', // Gandaki 'JA', // Janakpur 'KA', // Karnali 'KO', // Kosi 'LU', // Lumbini 'MA', // Mahakali 'ME', // Mechi 'NA', // Narayani 'RA', // Rapti 'SA', // Sagarmatha 'SE', // Seti ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NrSubdivisionCode.php000066400000000000000000000016741336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Nauru subdivision code. * * ISO 3166-1 alpha-2: NR * * @link http://www.geonames.org/NR/administrative-division-nauru.html */ class NrSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Aiwo '02', // Anabar '03', // Anetan '04', // Anibare '05', // Baiti '06', // Boe '07', // Buada '08', // Denigomodu '09', // Ewa '10', // Ijuw '11', // Meneng '12', // Nibok '13', // Uaboe '14', // Yaren ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NuSubdivisionCode.php000066400000000000000000000011671336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Niue subdivision code. * * ISO 3166-1 alpha-2: NU * * @link http://www.geonames.org/NU/administrative-division-niue.html */ class NuSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/NzSubdivisionCode.php000066400000000000000000000022421336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for New Zealand subdivision code. * * ISO 3166-1 alpha-2: NZ * * @link http://www.geonames.org/NZ/administrative-division-new-zealand.html */ class NzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'N', // North Island 'S', // South Island 'AUK', // Auckland 'BOP', // Bay of Plenty 'CAN', // Canterbury 'CIT', // Chatham Islands 'GIS', // Gisborne 'HKB', // Hawke's Bay 'MBH', // Marlborough 'MWT', // Manawatu-Wanganui 'NSN', // Nelson 'NTL', // Northland 'OTA', // Otago 'STL', // Southland 'TAS', // Tasman 'TKI', // Taranaki 'WGN', // Wellington 'WKO', // Waikato 'WTC', // West Coast ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/OmSubdivisionCode.php000066400000000000000000000015661336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Oman subdivision code. * * ISO 3166-1 alpha-2: OM * * @link http://www.geonames.org/OM/administrative-division-oman.html */ class OmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Al Batinah South 'BU', // Al Buraymī 'DA', // Ad Dakhiliyah 'MA', // Masqat 'MU', // Musandam 'SH', // Ash Sharqiyah South 'WU', // Al Wusta 'ZA', // Az Zahirah 'ZU', // Zufar ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PaSubdivisionCode.php000066400000000000000000000017041336766562500256350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Panama subdivision code. * * ISO 3166-1 alpha-2: PA * * @link http://www.geonames.org/PA/administrative-division-panama.html */ class PaSubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Bocas del Toro '2', // Cocle '3', // Colon '4', // Chiriqui '5', // Darien '6', // Herrera '7', // Los Santos '8', // Panama '9', // Veraguas 'EM', // Comarca Emberá-Wounaan 'KY', // Comarca de Kuna Yala 'NB', // Ngöbe-Buglé ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PeSubdivisionCode.php000066400000000000000000000024701336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Peru subdivision code. * * ISO 3166-1 alpha-2: PE * * @link http://www.geonames.org/PE/administrative-division-peru.html */ class PeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AMA', // Amazonas 'ANC', // Ancash 'APU', // Apurimac 'ARE', // Arequipa 'AYA', // Ayacucho 'CAJ', // Cajamarca 'CAL', // Callao 'CUS', // Cusco 'HUC', // Huanuco 'HUV', // Huancavelica 'ICA', // Ica 'JUN', // Junin 'LAL', // La Libertad 'LAM', // Lambayeque 'LIM', // Lima 'LMA', // Municipalidad Metropolitana de Lima 'LOR', // Loreto 'MDD', // Madre de Dios 'MOQ', // Moquegua 'PAS', // Pasco 'PIU', // Piura 'PUN', // Puno 'SAM', // San Martin 'TAC', // Tacna 'TUM', // Tumbes 'UCA', // Ucayali ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PfSubdivisionCode.php000066400000000000000000000014551336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for French Polynesia subdivision code. * * ISO 3166-1 alpha-2: PF * * @link http://www.geonames.org/PF/administrative-division-french-polynesia.html */ class PfSubdivisionCode extends AbstractSearcher { public $haystack = [ 'I', // Austral Islands 'M', // Marquesas Islands 'S', // Iles Sous-le-Vent 'T', // Tuamotu-Gambier 'V', // Iles du Vent ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PgSubdivisionCode.php000066400000000000000000000023221336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Papua New Guinea subdivision code. * * ISO 3166-1 alpha-2: PG * * @link http://www.geonames.org/PG/administrative-division-papua-new-guinea.html */ class PgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CPK', // Chimbu 'CPM', // Central 'EBR', // East New Britain 'EHG', // Eastern Highlands 'EPW', // Enga 'ESW', // East Sepik 'GPK', // Gulf 'MBA', // Milne Bay 'MPL', // Morobe 'MPM', // Madang 'MRL', // Manus 'NCD', // National Capital 'NIK', // New Ireland 'NPP', // Northern 'NSA', // Bougainville 'SAN', // Sandaun 'SHM', // Southern Highlands 'WBK', // West New Britain 'WHM', // Western Highlands 'WPD', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PhSubdivisionCode.php000066400000000000000000000067261336766562500256550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Philippines subdivision code. * * ISO 3166-1 alpha-2: PH * * @link http://www.geonames.org/PH/administrative-division-philippines.html */ class PhSubdivisionCode extends AbstractSearcher { public $haystack = [ '00', // National Capital Region '01', // Ilocos '02', // Cagayan Valley '03', // Central Luzon '05', // Bicol '06', // Western Visayas '07', // Central Visayas '08', // Eastern Visayas '09', // Zamboanga Peninsula '10', // Northern Mindanao '11', // Davao '12', // Soccsksargen '13', // Caraga '14', // Autonomous Region in Muslim Mindanao '15', // Cordillera Administrative Region '40', // Calabarzon '41', // Mimaropa 'ABR', // Abra 'AGN', // Agusan del Norte 'AGS', // Agusan del Sur 'AKL', // Aklan 'ALB', // Albay 'ANT', // Antique 'APA', // Apayao 'AUR', // Aurora 'BAN', // Bataan 'BAS', // Basilan 'BEN', // Benguet 'BIL', // Biliran 'BOH', // Bohol 'BTG', // Batangas 'BTN', // Batanes 'BUK', // Bukidnon 'BUL', // Bulacan 'CAG', // Cagayan 'CAM', // Camiguin 'CAN', // Camarines Norte 'CAP', // Capiz 'CAS', // Camarines Sur 'CAT', // Catanduanes 'CAV', // Cavite 'CEB', // Cebu 'COM', // Compostela Valley 'DAO', // Davao Oriental 'DAS', // Davao del Sur 'DAV', // Davao del Norte 'DIN', // Dinagat Islands 'EAS', // Eastern Samar 'GUI', // Guimaras 'IFU', // Ifugao 'ILI', // Iloilo 'ILN', // Ilocos Norte 'ILS', // Ilocos Sur 'ISA', // Isabela 'KAL', // Kalinga 'LAG', // Laguna 'LAN', // Lanao del Norte 'LAS', // Lanao del Sur 'LEY', // Leyte 'LUN', // La Union 'MAD', // Marinduque 'MAG', // Maguindanao 'MAS', // Masbate 'MDC', // Mindoro Occidental 'MDR', // Mindoro Oriental 'MOU', // Mountain Province 'MSC', // Misamis Occidental 'MSR', // Misamis Oriental 'NCO', // North Cotabato 'NEC', // Negros Occidental 'NER', // Negros Oriental 'NSA', // Northern Samar 'NUE', // Nueva Ecija 'NUV', // Nueva Vizcaya 'PAM', // Pampanga 'PAN', // Pangasinan 'PLW', // Palawan 'QUE', // Quezon 'QUI', // Quirino 'RIZ', // Rizal 'ROM', // Romblon 'SAR', // Sarangani 'SCO', // South Cotabato 'SIG', // Siquijor 'SLE', // Southern Leyte 'SLU', // Sulu 'SOR', // Sorsogon 'SUK', // Sultan Kudarat 'SUN', // Surigao del Norte 'SUR', // Surigao del Sur 'TAR', // Tarlac 'TAW', // Tawi-Tawi 'WSA', // Western Samar 'ZAN', // Zamboanga del Norte 'ZAS', // Zamboanga del Sur 'ZMB', // Zambales 'ZSI', // Zamboanga Sibugay ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PkSubdivisionCode.php000066400000000000000000000016161336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Pakistan subdivision code. * * ISO 3166-1 alpha-2: PK * * @link http://www.geonames.org/PK/administrative-division-pakistan.html */ class PkSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Balochistan 'IS', // Islamabad Capital Territory 'JK', // Azad Kashmir 'NA', // Gilgit-Baltistan 'NW', // Khyber Pakhtunkhwa 'PB', // Punjab 'SD', // Sindh 'TA', // Federally Administered Tribal Areas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PlSubdivisionCode.php000066400000000000000000000021211336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Poland subdivision code. * * ISO 3166-1 alpha-2: PL * * @link http://www.geonames.org/PL/administrative-division-poland.html */ class PlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DS', // Dolnoslaskie 'KP', // Kujawsko-Pomorskie 'LB', // Lubuskie 'LD', // Lodzkie 'LU', // Lubelskie 'MA', // Malopolskie 'MZ', // Mazowieckie 'OP', // Opolskie 'PD', // Podlaskie 'PK', // Podkarpackie 'PM', // Pomorskie 'SK', // Swietokrzyskie 'SL', // Slaskie 'WN', // Warminsko-Mazurskie 'WP', // Wielkopolskie 'ZP', // Zachodniopomorskie ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PmSubdivisionCode.php000066400000000000000000000013241336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Pierre and Miquelon subdivision code. * * ISO 3166-1 alpha-2: PM * * @link http://www.geonames.org/PM/administrative-division-saint-pierre-and-miquelon.html */ class PmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'M', // Miquelon 'P', // Saint Pierre ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PnSubdivisionCode.php000066400000000000000000000012171336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Pitcairn Islands subdivision code. * * ISO 3166-1 alpha-2: PN * * @link http://www.geonames.org/PN/administrative-division-pitcairn-islands.html */ class PnSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PrSubdivisionCode.php000066400000000000000000000012051336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Puerto Rico subdivision code. * * ISO 3166-1 alpha-2: PR * * @link http://www.geonames.org/PR/administrative-division-puerto-rico.html */ class PrSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PsSubdivisionCode.php000066400000000000000000000032101336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Palestine subdivision code. * * ISO 3166-1 alpha-2: PS * * @link http://www.geonames.org/PS/administrative-division-palestine.html */ class PsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DEB', // Bethlehem [conventional] / Bayt Laḩm [Arabic] 'DEB', // Deir El Balah [conventional] /Dayr al Balaḩ[Arabic] 'GZA', // Gaza [conventional] / Ghazzah[Arabic] 'HBN', // Hebron [conventional] / Al Khalīl [Arabic] 'JEM', // Jerusalem [conventional] / Al Quds [Arabic] 'JEN', // Jenin [conventional] / Janīn [Arabic] 'JRH', // Jericho [conventional] / Arīḩā wal Aghwār [Arabic] 'KYS', // Khan Yunis [conventional] / Khān Yūnis[Arabic] 'NBS', // Nablus [conventional] / Nāblus [Arabic] 'NGZ', // North Gaza [conventional] / Shamāl Ghazzah[Arabic] 'QQA', // Qalqiyah [conventional] / Qalqīlyah [Arabic] 'RBH', // Ramallah and Al Birah [conventional] / Rām Allāh wal Bīrah [Arabic] 'RFH', // Rafah [conventional] / Rafaḩ[Arabic] 'SLT', // Salfit [conventional] / Salfīt [Arabic] 'TBS', // Tubas [conventional] / Ţūbās [Arabic] 'TKM', // Tulkarm [conventional] /Ţūlkarm [Arabic] ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PtSubdivisionCode.php000066400000000000000000000021751336766562500256630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Portugal subdivision code. * * ISO 3166-1 alpha-2: PT * * @link http://www.geonames.org/PT/administrative-division-portugal.html */ class PtSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Aveiro '02', // Beja '03', // Braga '04', // Braganca '05', // Castelo Branco '06', // Coimbra '07', // Evora '08', // Faro '09', // Guarda '10', // Leiria '11', // Lisboa '12', // Portalegre '13', // Porto '14', // Santarem '15', // Setubal '16', // Viana do Castelo '17', // Vila Real '18', // Viseu '20', // Acores (Azores) '30', // Madeira ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PwSubdivisionCode.php000066400000000000000000000020431336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Palau subdivision code. * * ISO 3166-1 alpha-2: PW * * @link http://www.geonames.org/PW/administrative-division-palau.html */ class PwSubdivisionCode extends AbstractSearcher { public $haystack = [ '002', // Aimeliik '004', // Airai '010', // Angaur '050', // Hatohobei '100', // Kayangel '150', // Koror '212', // Melekeok '214', // Ngaraard '218', // Ngarchelong '222', // Ngardmau '224', // Ngatpang '226', // Ngchesar '227', // Ngeremlengui '228', // Ngiwal '350', // Peleliu '370', // Sonsorol ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/PySubdivisionCode.php000066400000000000000000000021301336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Paraguay subdivision code. * * ISO 3166-1 alpha-2: PY * * @link http://www.geonames.org/PY/administrative-division-paraguay.html */ class PySubdivisionCode extends AbstractSearcher { public $haystack = [ '1', // Concepcion '10', // Alto Parana '11', // Central '12', // Neembucu '13', // Amambay '14', // Canindeyu '15', // Presidente Hayes '16', // Alto Paraguay '19', // Boqueron '2', // San Pedro '3', // Cordillera '4', // Guaira '5', // Caaguazu '6', // Caazapa '7', // Itapua '8', // Misiones '9', // Paraguari 'ASU', // Asuncion ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/QaSubdivisionCode.php000066400000000000000000000015131336766562500256340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Qatar subdivision code. * * ISO 3166-1 alpha-2: QA * * @link http://www.geonames.org/QA/administrative-division-qatar.html */ class QaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DA', // Ad Dawhah 'KH', // Al Khawr wa adh Dhakhīrah 'MS', // Ash Shamāl 'RA', // Ar Rayyan 'US', // Umm Salal 'WA', // Al Wakrah 'ZA', // Az Z a‘āyin ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ReSubdivisionCode.php000066400000000000000000000011761336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Réunion subdivision code. * * ISO 3166-1 alpha-2: RE * * @link http://www.geonames.org/RE/administrative-division-reunion.html */ class ReSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/RoSubdivisionCode.php000066400000000000000000000032051336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Romania subdivision code. * * ISO 3166-1 alpha-2: RO * * @link http://www.geonames.org/RO/administrative-division-romania.html */ class RoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Alba 'AG', // Arges 'AR', // Arad 'B', // Bucuresti 'BC', // Bacau 'BH', // Bihor 'BN', // Bistrita-Nasaud 'BR', // Braila 'BT', // Botosani 'BV', // Brasov 'BZ', // Buzau 'CJ', // Cluj 'CL', // Calarasi 'CS', // Caras-Severin 'CT', // Constanta 'CV', // Covasna 'DB', // Dimbovita 'DJ', // Dolj 'GJ', // Gorj 'GL', // Galati 'GR', // Giurgiu 'HD', // Hunedoara 'HR', // Harghita 'IF', // Ilfov 'IL', // Ialomita 'IS', // Iasi 'MH', // Mehedinti 'MM', // Maramures 'MS', // Mures 'NT', // Neamt 'OT', // Olt 'PH', // Prahova 'SB', // Sibiu 'SJ', // Salaj 'SM', // Satu Mare 'SV', // Suceava 'TL', // Tulcea 'TM', // Timis 'TR', // Teleorman 'VL', // Vilcea 'VN', // Vrancea 'VS', // Vaslui ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/RsSubdivisionCode.php000066400000000000000000000032131336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Serbia subdivision code. * * ISO 3166-1 alpha-2: RS * * @link http://www.geonames.org/RS/administrative-division-serbia.html */ class RsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'KM', // Kosovo 'VO', // Vojvodina '00', // Beograd '01', // Severnobački okrug '02', // Srednjebanatski okrug '03', // Severnobanatski okrug '04', // Južnobanatski okrug '05', // Zapadno-Bački Okrug '06', // Južnobački okrug '07', // Srem '08', // Mačvanski okrug '09', // Kolubarski okrug '10', // Podunavski okrug '11', // Braničevski okrug '12', // Šumadija '13', // Pomoravski okrug '14', // Borski okrug '15', // Zaječar '16', // Zlatibor '17', // Moravički okrug '18', // Raški okrug '19', // Rasinski okrug '20', // Nišavski okrug '21', // Toplica '22', // Pirotski okrug '23', // Jablanički okrug '24', // Pčinjski okrug '25', // Kosovski okrug '26', // Pećki okrug '27', // Prizrenski okrug '28', // Kosovsko-Mitrovački okrug '29', // Kosovsko-Pomoravski okrug ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/RuSubdivisionCode.php000066400000000000000000000055211336766562500256640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Russia subdivision code. * * ISO 3166-1 alpha-2: RU * * @link http://www.geonames.org/RU/administrative-division-russia.html */ class RuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AD', // Adygeya 'AL', // Altai Republic 'ALT', // Altai Krai 'AMU', // Amur 'ARK', // Arkhangelsk 'AST', // Astrakhan 'BA', // Bashkortostan 'BEL', // Belgorod 'BRY', // Bryansk 'BU', // Buryatia 'CE', // Chechnya 'CHE', // Chelyabinsk 'CHU', // Chukotka 'CU', // Chuvashia 'DA', // Dagestan 'IN', // Ingushetia 'IRK', // Irkutsk 'IVA', // Ivanovo 'KAM', // Kamchatka 'KB', // Kabardino-Balkaria 'KC', // Karachay-Cherkessia 'KDA', // Krasnodar 'KEM', // Kemerovo 'KGD', // Kaliningrad 'KGN', // Kurgan 'KHA', // Khabarovsk 'KHM', // Khantia-Mansia 'KIR', // Kirov 'KK', // Khakassia 'KL', // Kalmykia 'KLU', // Kaluga 'KO', // Komi 'KOS', // Kostroma 'KR', // Karelia 'KRS', // Kursk 'KYA', // Krasnoyarsk 'LEN', // Leningrad 'LIP', // Lipetsk 'MAG', // Magadan 'ME', // Mari El 'MO', // Mordovia 'MOS', // Moscow (Province) 'MOW', // Moscow (City) 'MUR', // Murmansk 'NEN', // Nenetsia 'NGR', // Novgorod 'NIZ', // Nizhny Novgorod 'NVS', // Novosibirsk 'OMS', // Omsk 'ORE', // Orenburg 'ORL', // Oryol 'PER', // Perm 'PNZ', // Penza 'PRI', // Primorsky 'PSK', // Pskov 'ROS', // Rostov 'RYA', // Ryazan 'SA', // Sakha 'SAK', // Sakhalin 'SAM', // Samara 'SAR', // Saratov 'SE', // North Ossetia 'SMO', // Smolensk 'SPE', // St. Petersburg 'STA', // Stavropol 'SVE', // Sverdlovsk 'TA', // Tatarstan 'TAM', // Tambov 'TOM', // Tomsk 'TUL', // Tula 'TVE', // Tver 'TY', // Tuva 'TYU', // Tyumen 'UD', // Udmurtia 'ULY', // Ulynovsk 'VGG', // Volgograd 'VLA', // Vladimir 'VLG', // Vologda 'VOR', // Voronezh 'YAN', // Yamalia 'YAR', // Yaroslavl 'YEV', // Jewish Oblast 'ZAB', // Zabaykal'skiy kray ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/RwSubdivisionCode.php000066400000000000000000000013471336766562500256700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Rwanda subdivision code. * * ISO 3166-1 alpha-2: RW * * @link http://www.geonames.org/RW/administrative-division-rwanda.html */ class RwSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Kigali '02', // Est '03', // Nord '04', // Ouest '05', // Sud ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SaSubdivisionCode.php000066400000000000000000000017561336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saudi Arabia subdivision code. * * ISO 3166-1 alpha-2: SA * * @link http://www.geonames.org/SA/administrative-division-saudi-arabia.html */ class SaSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Ar Riyad '02', // Makkah '03', // Al Madinah '04', // Ash Sharqiyah (Eastern Province) '05', // Al Qasim '06', // Ha'il '07', // Tabuk '08', // Al Hudud ash Shamaliyah '09', // Jizan '10', // Najran '11', // Al Bahah '12', // Al Jawf '14', // 'Asir ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SbSubdivisionCode.php000066400000000000000000000016341336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Solomon Islands subdivision code. * * ISO 3166-1 alpha-2: SB * * @link http://www.geonames.org/SB/administrative-division-solomon-islands.html */ class SbSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CE', // Central 'CH', // Choiseul 'CT', // Capital Territory 'GU', // Guadalcanal 'IS', // Isabel 'MK', // Makira 'ML', // Malaita 'RB', // Rennell and Bellona 'TE', // Temotu 'WE', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ScSubdivisionCode.php000066400000000000000000000025501336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Seychelles subdivision code. * * ISO 3166-1 alpha-2: SC * * @link http://www.geonames.org/SC/administrative-division-seychelles.html */ class ScSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Anse aux Pins '02', // Anse Boileau '03', // Anse Etoile '04', // Anse Louis '05', // Anse Royale '06', // Baie Lazare '07', // Baie Sainte Anne '08', // Beau Vallon '09', // Bel Air '10', // Bel Ombre '11', // Cascade '12', // Glacis '13', // Grand' Anse (on Mahe) '14', // Grand' Anse (on Praslin) '15', // La Digue '16', // La Riviere Anglaise '17', // Mont Buxton '18', // Mont Fleuri '19', // Plaisance '20', // Pointe La Rue '21', // Port Glaud '22', // Saint Louis '23', // Takamaka '24', // Les Mamelles '25', // Roche Caïman ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SdSubdivisionCode.php000066400000000000000000000022231336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Sudan subdivision code. * * ISO 3166-1 alpha-2: SD * * @link http://www.geonames.org/SD/administrative-division-sudan.html */ class SdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DC', // Wasaţ Dārfūr 'DE', // Sharq Dārfūr 'DN', // Shamāl Dārfūr 'DS', // Janūb Dārfūr 'DW', // Gharb Dārfūr 'GD', // Al Qaḑārif 'GZ', // Al Jazīrah 'KA', // Kassalā 'KH', // Al Kharţūm 'KN', // Shamāl Kurdufān 'KS', // Janūb Kurdufān 'NB', // An Nīl al Azraq 'NO', // Ash Shamālīyah 'NR', // An Nīl 'NW', // An Nīl al Abyaḑ 'RS', // Al Baḩr al Aḩmar 'SI', // Sinnār ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SeSubdivisionCode.php000066400000000000000000000022601336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Sweden subdivision code. * * ISO 3166-1 alpha-2: SE * * @link http://www.geonames.org/SE/administrative-division-sweden.html */ class SeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Stockholms 'AC', // Vasterbottens 'BD', // Norrbottens 'C', // Uppsala 'D', // Sodermanlands 'E', // Ostergotlands 'F', // Jonkopings 'G', // Kronobergs 'H', // Kalmar 'I', // Gotlands 'K', // Blekinge 'M', // Skåne 'N', // Hallands 'O', // Västra Götaland 'S', // Varmlands 'T', // Orebro 'U', // Vastmanlands 'W', // Dalarna 'X', // Gavleborgs 'Y', // Vasternorrlands 'Z', // Jamtlands ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SgSubdivisionCode.php000066400000000000000000000014211336766562500256420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Singapore subdivision code. * * ISO 3166-1 alpha-2: SG * * @link http://www.geonames.org/SG/administrative-division-singapore.html */ class SgSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Central Singapore '02', // North East '03', // North West '04', // South East '05', // South West ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ShSubdivisionCode.php000066400000000000000000000013371336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Helena subdivision code. * * ISO 3166-1 alpha-2: SH * * @link http://www.geonames.org/SH/administrative-division-saint-helena.html */ class ShSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AC', // Ascension 'HL', // Saint Helena 'TA', // Tristan da Cunha ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SiSubdivisionCode.php000066400000000000000000000150571336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Slovenia subdivision code. * * ISO 3166-1 alpha-2: SI * * @link http://www.geonames.org/SI/administrative-division-slovenia.html */ class SiSubdivisionCode extends AbstractSearcher { public $haystack = [ '001', // Ajdovščina '002', // Beltinci '003', // Bled '004', // Bohinj '005', // Borovnica '006', // Bovec '007', // Brda '008', // Brezovica '009', // Brežice '010', // Tišina '011', // Celje '012', // Cerklje na Gorenjskem '013', // Cerknica '014', // Cerkno '015', // Črenšovci '016', // Črna na Koroškem '017', // Črnomelj '018', // Destrnik '019', // Divača '020', // Dobrepolje '021', // Dobrova-Polhov Gradec '022', // Dol pri Ljubljani '023', // Domžale '024', // Dornava '025', // Dravograd '026', // Duplek '027', // Gorenja Vas-Poljane '028', // Gorišnica '029', // Gornja Radgona '030', // Gornji Grad '031', // Gornji Petrovci '032', // Grosuplje '033', // Šalovci '034', // Hrastnik '035', // Hrpelje-Kozina '036', // Idrija '037', // Ig '038', // Ilirska Bistrica '039', // Ivančna Gorica '040', // Izola/Isola '041', // Jesenice '042', // Juršinci '043', // Kamnik '044', // Kanal '045', // Kidričevo '046', // Kobarid '047', // Kobilje '048', // Kočevje '049', // Komen '050', // Koper/Capodistria '051', // Kozje '052', // Kranj '053', // Kranjska Gora '054', // Krško '055', // Kungota '056', // Kuzma '057', // Laško '058', // Lenart '059', // Lendava/Lendva '060', // Litija '061', // Ljubljana '062', // Ljubno '063', // Ljutomer '064', // Logatec '065', // Loška Dolina '066', // Loški Potok '067', // Luče '068', // Lukovica '069', // Majšperk '070', // Maribor '071', // Medvode '072', // Mengeš '073', // Metlika '074', // Mežica '075', // Miren-Kostanjevica '076', // Mislinja '077', // Moravče '078', // Moravske Toplice '079', // Mozirje '080', // Murska Sobota '081', // Muta '082', // Naklo '083', // Nazarje '084', // Nova Gorica '085', // Novo Mesto '086', // Odranci '087', // Ormož '088', // Osilnica '089', // Pesnica '090', // Piran/Pirano '091', // Pivka '092', // Podčetrtek '093', // Podvelka '094', // Postojna '095', // Preddvor '096', // Ptuj '097', // Puconci '098', // Rače-Fram '099', // Radeče '100', // Radenci '101', // Radlje ob Dravi '102', // Radovljica '103', // Ravne na Koroškem '104', // Ribnica '105', // Rogašovci '106', // Rogaška Slatina '107', // Rogatec '108', // Ruše '109', // Semič '110', // Sevnica '111', // Sežana '112', // Slovenj Gradec '113', // Slovenska Bistrica '114', // Slovenske Konjice '116', // Sveti Jurij '117', // Šenčur '118', // Šentilj '119', // Šentjernej '120', // Šentjur '121', // Škocjan '122', // Škofja Loka '123', // Škofljica '124', // Šmarje pri Jelšah '125', // Šmartno ob Paki '126', // Šoštanj '127', // Štore '128', // Tolmin '129', // Trbovlje '130', // Trebnje '131', // Tržič '132', // Turnišče '133', // Velenje '134', // Velike Lašče '135', // Videm '136', // Vipava '137', // Vitanje '138', // Vodice '139', // Vojnik '140', // Vrhnika '141', // Vuzenica '142', // Zagorje ob Savi '143', // Zavrč '144', // Zreče '146', // Železniki '147', // Žiri '148', // Benedikt '149', // Bistrica ob Sotli '150', // Bloke '151', // Braslovče '152', // Cankova '153', // Cerkvenjak '154', // Dobje '155', // Dobrna '156', // Dobrovnik-Dobronak '157', // Dolenjske Toplice '158', // Grad '159', // Hajdina '160', // Hoče-Slivnica '161', // Hodoš/Hodos '162', // Horjul '163', // Jezersko '164', // Komenda '165', // Kostel '166', // Križevci '167', // Lovrenc na Pohorju '168', // Markovci '169', // Miklavž na Dravskem polju '170', // Mirna Peč '171', // Oplotnica '172', // Podlehnik '173', // Polzela '174', // Prebold '175', // Prevalje '176', // Razkrižje '177', // Ribnica na Pohorju '178', // Selnica ob Dravi '179', // Sodražica '180', // Solčava '181', // Sveta Ana '182', // Sveti Andraž v Slovenskih goricah '183', // Šempeter-Vrtojba '184', // Tabor '185', // Trnovska vas '186', // Trzin '187', // Velika Polana '188', // Veržej '189', // Vransko '190', // Žalec '191', // Žetale '192', // Žirovnica '193', // Žužemberk '194', // Šmartno pri Litiji '195', // Apače '196', // Cirkulane '197', // Kosanjevica na Krki '198', // Makole '199', // Mokronog-Trebelno '200', // Poljčane '201', // Renče-Vogrsko '202', // Središče ob Dravi '203', // Straža '204', // Sveta Trojica v Slovenskih Goricah '205', // Sveti Tomaž '206', // Šmarješke Toplice '207', // Gorje '208', // Log-Dragomer '209', // Rečica ob Savinji '210', // Sveti Jurij v Slovenskih Goricah '211', // Šentrupert '215', // Starše ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SjSubdivisionCode.php000066400000000000000000000013151336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Svalbard and Jan Mayen subdivision code. * * ISO 3166-1 alpha-2: SJ * * @link http://www.geonames.org/SJ/administrative-division-svalbard-and-jan-mayen.html */ class SjSubdivisionCode extends AbstractSearcher { public $haystack = [ '21', // Svalbard '22', // Jan Mayen ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SkSubdivisionCode.php000066400000000000000000000015341336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Slovakia subdivision code. * * ISO 3166-1 alpha-2: SK * * @link http://www.geonames.org/SK/administrative-division-slovakia.html */ class SkSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BC', // Banskobystricky 'BL', // Bratislavsky 'KI', // Kosicky 'NI', // Nitriansky 'PV', // Presovsky 'TA', // Trnavsky 'TC', // Trenciansky 'ZI', // Zilinsky ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SlSubdivisionCode.php000066400000000000000000000013461336766562500256550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Sierra Leone subdivision code. * * ISO 3166-1 alpha-2: SL * * @link http://www.geonames.org/SL/administrative-division-sierra-leone.html */ class SlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'E', // Eastern 'N', // Northern 'S', // Southern 'W', // Western ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SmSubdivisionCode.php000066400000000000000000000016101336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for San Marino subdivision code. * * ISO 3166-1 alpha-2: SM * * @link http://www.geonames.org/SM/administrative-division-san-marino.html */ class SmSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Acquaviva '02', // Chiesanuova '03', // Domagnano '04', // Faetano '05', // Fiorentino '06', // Borgo Maggiore '07', // Citta di San Marino '08', // Montegiardino '09', // Serravalle ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SnSubdivisionCode.php000066400000000000000000000017351336766562500256610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Senegal subdivision code. * * ISO 3166-1 alpha-2: SN * * @link http://www.geonames.org/SN/administrative-division-senegal.html */ class SnSubdivisionCode extends AbstractSearcher { public $haystack = [ 'DB', // Diourbel 'DK', // Dakar 'FK', // Fatick 'KA', // Kaffrine 'KD', // Kolda 'KE', // Kédougou 'KL', // Kaolack 'LG', // Louga 'MT', // Matam 'SE', // Sédhiou 'SL', // Saint-Louis 'TC', // Tambacounda 'TH', // Thies 'ZG', // Ziguinchor ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SoSubdivisionCode.php000066400000000000000000000021241336766562500256530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Somalia subdivision code. * * ISO 3166-1 alpha-2: SO * * @link http://www.geonames.org/SO/administrative-division-somalia.html */ class SoSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AW', // Awdal 'BK', // Bakool 'BN', // Banaadir 'BR', // Bari 'BY', // Bay 'GA', // Galguduud 'GE', // Gedo 'HI', // Hiiraan 'JD', // Jubbada Dhexe 'JH', // Jubbada Hoose 'MU', // Mudug 'NU', // Nugaal 'SA', // Sanaag 'SD', // Shabeellaha Dhexe 'SH', // Shabeellaha Hoose 'SO', // Sool 'TO', // Togdheer 'WO', // Woqooyi Galbeed ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SrSubdivisionCode.php000066400000000000000000000016031336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Suriname subdivision code. * * ISO 3166-1 alpha-2: SR * * @link http://www.geonames.org/SR/administrative-division-suriname.html */ class SrSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BR', // Brokopondo 'CM', // Commewijne 'CR', // Coronie 'MA', // Marowijne 'NI', // Nickerie 'PM', // Paramaribo 'PR', // Para 'SA', // Saramacca 'SI', // Sipaliwini 'WA', // Wanica ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SsSubdivisionCode.php000066400000000000000000000016671336766562500256720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for South Sudan subdivision code. * * ISO 3166-1 alpha-2: SS * * @link http://www.geonames.org/SS/administrative-division-south-sudan.html */ class SsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BN', // Northern Bahr el Ghazal 'BW', // Western Bahr el Ghazal 'EC', // Central Equatoria 'EE', // Eastern Equatoria 'EW', // Western Equatoria 'JG', // Jonglei 'LK', // Lakes 'NU', // Upper Nile 'UY', // Unity 'WR', // Warrap ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/StSubdivisionCode.php000066400000000000000000000013131336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for São Tomé and Príncipe subdivision code. * * ISO 3166-1 alpha-2: ST * * @link http://www.geonames.org/ST/administrative-division-sao-tome-and-principe.html */ class StSubdivisionCode extends AbstractSearcher { public $haystack = [ 'P', // Principe 'S', // Sao Tome ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SvSubdivisionCode.php000066400000000000000000000017771336766562500256770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for El Salvador subdivision code. * * ISO 3166-1 alpha-2: SV * * @link http://www.geonames.org/SV/administrative-division-el-salvador.html */ class SvSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AH', // Ahuachapan 'CA', // Cabanas 'CH', // Chalatenango 'CU', // Cuscatlan 'LI', // La Libertad 'MO', // Morazan 'PA', // La Paz 'SA', // Santa Ana 'SM', // San Miguel 'SO', // Sonsonate 'SS', // San Salvador 'SV', // San Vicente 'UN', // La Union 'US', // Usulutan ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SxSubdivisionCode.php000066400000000000000000000012071336766562500256650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Sint Maarten subdivision code. * * ISO 3166-1 alpha-2: SX * * @link http://www.geonames.org/SX/administrative-division-sint-maarten.html */ class SxSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SySubdivisionCode.php000066400000000000000000000017441336766562500256740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Syria subdivision code. * * ISO 3166-1 alpha-2: SY * * @link http://www.geonames.org/SY/administrative-division-syria.html */ class SySubdivisionCode extends AbstractSearcher { public $haystack = [ 'DI', // Dimashq 'DR', // Dara 'DY', // Dayr az Zawr 'HA', // Al Hasakah 'HI', // Hims 'HL', // Halab 'HM', // Hamah 'ID', // Idlib 'LA', // Al Ladhiqiyah 'QU', // Al Qunaytirah 'RA', // Ar Raqqah 'RD', // Rif Dimashq 'SU', // As Suwayda 'TA', // Tartus ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/SzSubdivisionCode.php000066400000000000000000000013451336766562500256720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Swaziland subdivision code. * * ISO 3166-1 alpha-2: SZ * * @link http://www.geonames.org/SZ/administrative-division-swaziland.html */ class SzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'HH', // Hhohho 'LU', // Lubombo 'MA', // Manzini 'SH', // Shishelweni ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TcSubdivisionCode.php000066400000000000000000000020671336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Turks and Caicos Islands subdivision code. * * ISO 3166-1 alpha-2: TC * * @link http://www.geonames.org/TC/administrative-division-turks-and-caicos-islands.html */ class TcSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AC', // Ambergris Cays 'DC', // Dellis Cay 'EC', // East Caicos 'FC', // French Cay 'GT', // Grand Turk 'LW', // Little Water Cay 'MC', // Middle Caicos 'NC', // North Caicos 'PN', // Pine Cay 'PR', // Providenciales 'RC', // Parrot Cay 'SC', // South Caicos 'SL', // Salt Cay 'WC', // West Caicos ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TdSubdivisionCode.php000066400000000000000000000024161336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Chad subdivision code. * * ISO 3166-1 alpha-2: TD * * @link http://www.geonames.org/TD/administrative-division-chad.html */ class TdSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BA', // Batha 'BG', // Barh el Ghazel 'BO', // Borkou 'CB', // Chari-Baguirmi 'EN', // Ennedi Est 'EN', // Ennedi Quest 'GR', // Guéra 'HL', // Hadjer-Lamis 'KA', // Kanem 'LC', // Lac 'LO', // Logone Occidental 'LR', // Logone Oriental 'MA', // Mandoul 'MC', // Moyen-Chari 'ME', // Mayo-Kebbi Est 'MO', // Mayo-Kebbi Ouest 'ND', // Ville de N'Djamena 'OD', // Ouaddaï 'SA', // Salamat 'SI', // Sila 'TA', // Tandjile 'TI', // Tibesti 'WF', // Wadi Fira 'EN', // Ennedi ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TfSubdivisionCode.php000066400000000000000000000012451336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for French Southern Territories subdivision code. * * ISO 3166-1 alpha-2: TF * * @link http://www.geonames.org/TF/administrative-division-french-southern-territories.html */ class TfSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TgSubdivisionCode.php000066400000000000000000000013541336766562500256500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Togo subdivision code. * * ISO 3166-1 alpha-2: TG * * @link http://www.geonames.org/TG/administrative-division-togo.html */ class TgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Centrale 'K', // Kara 'M', // Maritime 'P', // Plateaux 'S', // Savanes ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ThSubdivisionCode.php000066400000000000000000000053141336766562500256510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Thailand subdivision code. * * ISO 3166-1 alpha-2: TH * * @link http://www.geonames.org/TH/administrative-division-thailand.html */ class ThSubdivisionCode extends AbstractSearcher { public $haystack = [ '10', // Bangkok '11', // Samut Prakan '12', // Nonthaburi '13', // Pathum Thani '14', // Phra Nakhon Si Ayutthaya '15', // Ang Thong '16', // Lop Buri '17', // Sing Buri '18', // Chai Nat '19', // Saraburi '20', // Chon Buri '21', // Rayong '22', // Chanthaburi '23', // Trat '24', // Chachoengsao '25', // Prachin Buri '26', // Nakhon Nayok '27', // Sa Kaeo '30', // Nakhon Ratchasima '31', // Buri Ram '32', // Surin '33', // Si Sa Ket '34', // Ubon Ratchathani '35', // Yasothon '36', // Chaiyaphum '37', // Amnat Charoen '38', // Bueng Kan '39', // Nong Bua Lam Phu '40', // Khon Kaen '41', // Udon Thani '42', // Loei '43', // Nong Khai '44', // Maha Sarakham '45', // Roi Et '46', // Kalasin '47', // Sakon Nakhon '48', // Nakhon Phanom '49', // Mukdahan '50', // Chiang Mai '51', // Lamphun '52', // Lampang '53', // Uttaradit '54', // Phrae '55', // Nan '56', // Phayao '57', // Chiang Rai '58', // Mae Hong Son '60', // Nakhon Sawan '61', // Uthai Thani '62', // Kamphaeng Phet '63', // Tak '64', // Sukhothai '65', // Phitsanulok '66', // Phichit '67', // Phetchabun '70', // Ratchaburi '71', // Kanchanaburi '72', // Suphanburi '73', // Nakhon Pathom '74', // Samut Sakhon '75', // Samut Songkhram '76', // Phetchaburi '77', // Prachuap Khiri Khan '80', // Nakhon Si Thammarat '81', // Krabi '82', // Phang Nga '83', // Phuket '84', // Surat Thani '85', // Ranong '86', // Chumpon '90', // Songkhla '91', // Satun '92', // Trang '93', // Phattalung '94', // Pattani '95', // Yala '96', // Narathiwat ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TjSubdivisionCode.php000066400000000000000000000013221336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tajikistan subdivision code. * * ISO 3166-1 alpha-2: TJ * * @link http://www.geonames.org/TJ/administrative-division-tajikistan.html */ class TjSubdivisionCode extends AbstractSearcher { public $haystack = [ 'GB', // Gorno-Badakhstan 'KT', // Khatlon 'SU', // Sughd ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TkSubdivisionCode.php000066400000000000000000000013011336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tokelau subdivision code. * * ISO 3166-1 alpha-2: TK * * @link http://www.geonames.org/TK/administrative-division-tokelau.html */ class TkSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Atafu 'F', // Fakaofo 'N', // Nukunonu ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TlSubdivisionCode.php000066400000000000000000000017021336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for East Timor subdivision code. * * ISO 3166-1 alpha-2: TL * * @link http://www.geonames.org/TL/administrative-division-east-timor.html */ class TlSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AL', // Aileu 'AN', // Ainaro 'BA', // Baucau 'BO', // Bobonaro 'CO', // Cova Lima 'DI', // Dili 'ER', // Ermera 'LA', // Lautem 'LI', // Liquica 'MF', // Manufahi 'MT', // Manatuto 'OE', // Oecussi 'VI', // Viqueque ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TmSubdivisionCode.php000066400000000000000000000014731336766562500256600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Turkmenistan subdivision code. * * ISO 3166-1 alpha-2: TM * * @link http://www.geonames.org/TM/administrative-division-turkmenistan.html */ class TmSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Ahal Welayaty 'B', // Balkan Welayaty 'D', // Dashhowuz Welayaty 'L', // Lebap Welayaty 'M', // Mary Welayaty 'S', // Aşgabat ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TnSubdivisionCode.php000066400000000000000000000023251336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tunisia subdivision code. * * ISO 3166-1 alpha-2: TN * * @link http://www.geonames.org/TN/administrative-division-tunisia.html */ class TnSubdivisionCode extends AbstractSearcher { public $haystack = [ '11', // Tunis '12', // L'Ariana '13', // Ben Arous '14', // La Manouba '21', // Nabeul '22', // Zaghouan '23', // Bizerte '31', // Béja '32', // Jendouba '33', // Le Kef '34', // Siliana '41', // Kairouan '42', // Kasserine '43', // Sidi Bouzid '51', // Sousse '52', // Monastir '53', // Mahdia '61', // Sfax '71', // Gafsa '72', // Tozeur '73', // Kebili '81', // Gabès '82', // Medenine '83', // Tataouine ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ToSubdivisionCode.php000066400000000000000000000013561336766562500256620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tonga subdivision code. * * ISO 3166-1 alpha-2: TO * * @link http://www.geonames.org/TO/administrative-division-tonga.html */ class ToSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Eua '02', // Ha'apai '03', // Niuas '04', // Tongatapu '05', // Vava'u ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TrSubdivisionCode.php000066400000000000000000000051021336766562500256560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Turkey subdivision code. * * ISO 3166-1 alpha-2: TR * * @link http://www.geonames.org/TR/administrative-division-turkey.html */ class TrSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Adana '02', // Adiyaman '03', // Afyonkarahisar '04', // Agri '05', // Amasya '06', // Ankara '07', // Antalya '08', // Artvin '09', // Aydin '10', // Balikesir '11', // Bilecik '12', // Bingol '13', // Bitlis '14', // Bolu '15', // Burdur '16', // Bursa '17', // Canakkale '18', // Cankiri '19', // Corum '20', // Denizli '21', // Diyarbakir '22', // Edirne '23', // Elazig '24', // Erzincan '25', // Erzurum '26', // Eskisehir '27', // Gaziantep '28', // Giresun '29', // Gumushane '30', // Hakkari '31', // Hatay '32', // Isparta '33', // Mersin '34', // Istanbul '35', // Izmir '36', // Kars '37', // Kastamonu '38', // Kayseri '39', // Kirklareli '40', // Kirsehir '41', // Kocaeli '42', // Konya '43', // Kutahya '44', // Malatya '45', // Manisa '46', // Kahramanmaras '47', // Mardin '48', // Mugla '49', // Mus '50', // Nevsehir '51', // Nigde '52', // Ordu '53', // Rize '54', // Sakarya '55', // Samsun '56', // Siirt '57', // Sinop '58', // Sivas '59', // Tekirdag '60', // Tokat '61', // Trabzon '62', // Tunceli '63', // Sanliurfa '64', // Usak '65', // Van '66', // Yozgat '67', // Zonguldak '68', // Aksaray '69', // Bayburt '70', // Karaman '71', // Kirikkale '72', // Batman '73', // Sirnak '74', // Bartin '75', // Ardahan '76', // Igdir '77', // Yalova '78', // Karabuk '79', // Kilis '80', // Osmaniye '81', // Duzce ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TtSubdivisionCode.php000066400000000000000000000022101336766562500256550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Trinidad and Tobago subdivision code. * * ISO 3166-1 alpha-2: TT * * @link http://www.geonames.org/TT/administrative-division-trinidad-and-tobago.html */ class TtSubdivisionCode extends AbstractSearcher { public $haystack = [ 'ARI', // Arima 'CHA', // Chaguanas 'CTT', // Couva/Tabaquite/Talparo 'DMN', // Diego Martin 'ETO', // Eastern Tobago 'PED', // Penal/Debe 'POS', // Port of Spain 'PRT', // Princes Town 'PTF', // Point Fortin 'RCM', // Mayaro/Rio Claro 'SFO', // San Fernando 'SGE', // Sangre Grande 'SIP', // Siparia 'SJL', // San Juan/Laventille 'TUP', // Tunapuna/Piarco 'WTO', // Tobago ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TvSubdivisionCode.php000066400000000000000000000015131336766562500256640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tuvalu subdivision code. * * ISO 3166-1 alpha-2: TV * * @link http://www.geonames.org/TV/administrative-division-tuvalu.html */ class TvSubdivisionCode extends AbstractSearcher { public $haystack = [ 'FUN', // Funafuti 'NIT', // Niutao 'NKF', // Nukufetau 'NKL', // Nukulaelae 'NMA', // Nanumea 'NMG', // Nanumanga 'NUI', // Nui 'VAI', // Vaitupu ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TwSubdivisionCode.php000066400000000000000000000022371336766562500256710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Taiwan subdivision code. * * ISO 3166-1 alpha-2: TW * * @link http://www.geonames.org/TW/administrative-division-taiwan.html */ class TwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'CHA', // Changhua 'CYI', // Chiayi 'CYQ', // Chiayi 'HSQ', // Hsinchu 'HSZ', // Hsinchu 'HUA', // Hualien 'ILA', // Ilan 'KEE', // Keelung 'KHH', // Kaohsiung 'MIA', // Miaoli 'NAN', // Nantou 'PEN', // Penghu 'PIF', // Pingtung 'TAO', // Taoyuan 'TNN', // Tainan 'TPE', // Taipei 'TPQ', // New Taipei 'TTT', // Taitung 'TXG', // Taichung 'YUN', // Yunlin 'TXQ', // Taichung County ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/TzSubdivisionCode.php000066400000000000000000000024471336766562500256770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Tanzania subdivision code. * * ISO 3166-1 alpha-2: TZ * * @link http://www.geonames.org/TZ/administrative-division-tanzania.html */ class TzSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Arusha '02', // Dar es Salaam '03', // Dodoma '04', // Iringa '05', // Kagera '06', // Pemba North '07', // Zanzibar North '08', // Kigoma '09', // Kilimanjaro '10', // Pemba South '11', // Zanzibar Central/South '12', // Lindi '13', // Mara '14', // Mbeya '15', // Zanzibar Urban/West '16', // Morogoro '17', // Mtwara '18', // Mwanza '19', // Pwani '20', // Rukwa '21', // Ruvuma '22', // Shinyanga '23', // Singida '24', // Tabora '25', // Tanga '26', // Manyara ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UaSubdivisionCode.php000066400000000000000000000025031336766562500256400ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Ukraine subdivision code. * * ISO 3166-1 alpha-2: UA * * @link http://www.geonames.org/UA/administrative-division-ukraine.html */ class UaSubdivisionCode extends AbstractSearcher { public $haystack = [ '05', // Vinnytsya '07', // Volyn' '09', // Luhans'k '12', // Dnipropetrovs'k '14', // Donets'k '18', // Zhytomyr '21', // Zakarpattya '23', // Zaporizhzhya '26', // Ivano-Frankivs'k '30', // Kyyiv '32', // Kiev '35', // Kirovohrad '40', // Sevastopol '43', // Crimea '46', // L'viv '48', // Mykolayiv '51', // Odesa '53', // Poltava '56', // Rivne '59', // Sumy '61', // Ternopil' '63', // Kharkiv '65', // Kherson '68', // Khmel'nyts'kyy '71', // Cherkasy '74', // Chernihiv '77', // Chernivtsi ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UgSubdivisionCode.php000066400000000000000000000053331336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Uganda subdivision code. * * ISO 3166-1 alpha-2: UG * * @link http://www.geonames.org/UG/administrative-division-uganda.html */ class UgSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Central 'E', // Eastern 'N', // Northern 'W', // Western '101', // Kalangala '102', // Kampala '103', // Kiboga '104', // Luwero '105', // Masaka '106', // Mpigi '107', // Mubende '108', // Mukono '109', // Nakasongola '110', // Rakai '111', // Sembabule '112', // Kayunga '113', // Wakiso '114', // Mityana '115', // Nakaseke '116', // Lyantonde '201', // Bugiri '202', // Busia '203', // Iganga '204', // Jinja '205', // Kamuli '206', // Kapchorwa '207', // Katakwi '208', // Kumi '209', // Mbale '210', // Pallisa '211', // Soroti '212', // Tororo '213', // Kaberamaido '214', // Mayuge '215', // Sironko '216', // Amuria '217', // Budaka '218', // Bukwa '219', // Butaleja '220', // Kaliro '221', // Manafwa '222', // Namutumba '223', // Bududa '224', // Bukedea '301', // Adjumani '302', // Apac '303', // Arua '304', // Gulu '305', // Kitgum '306', // Kotido '307', // Lira '308', // Moroto '309', // Moyo '310', // Nebbi '311', // Nakapiripirit '312', // Pader '313', // Yumbe '314', // Amolatar '315', // Kaabong '316', // Koboko '317', // Abim '318', // Dokolo '319', // Amuru '320', // Maracha '321', // Oyam '401', // Bundibugyo '402', // Bushenyi '403', // Hoima '404', // Kabale '405', // Kabarole '406', // Kasese '407', // Kibaale '408', // Kisoro '409', // Masindi '410', // Mbarara '411', // Ntungamo '412', // Rukungiri '413', // Kamwenge '414', // Kanungu '415', // Kyenjojo '416', // Ibanda '417', // Isingiro '418', // Kiruhura '419', // Buliisa ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UmSubdivisionCode.php000066400000000000000000000017001336766562500256520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for U.S. Minor Outlying Islands subdivision code. * * ISO 3166-1 alpha-2: UM * * @link http://www.geonames.org/UM/administrative-division-united-states-minor-outlying-islands.html */ class UmSubdivisionCode extends AbstractSearcher { public $haystack = [ '67', // Johnston Atoll '71', // Midway Atoll '76', // Navassa Island '79', // Wake Island '81', // Baker Island '84', // Howland Island '86', // Jarvis Island '89', // Kingman Reef '95', // Palmyra Atoll ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UsSubdivisionCode.php000066400000000000000000000042541336766562500256670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for United States subdivision code. * * ISO 3166-1 alpha-2: US * * @link http://www.geonames.org/US/administrative-division-united-states.html */ class UsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AK', // Alaska 'AL', // Alabama 'AR', // Arkansas 'AS', // American Samoa 'AZ', // Arizona 'CA', // California 'CO', // Colorado 'CT', // Connecticut 'DC', // District of Columbia 'DE', // Delaware 'FL', // Florida 'GA', // Georgia 'GU', // Guam 'HI', // Hawaii 'IA', // Iowa 'ID', // Idaho 'IL', // Illinois 'IN', // Indiana 'KS', // Kansas 'KY', // Kentucky 'LA', // Louisiana 'MA', // Massachusetts 'MD', // Maryland 'ME', // Maine 'MI', // Michigan 'MN', // Minnesota 'MO', // Missouri 'MP', // Northern Mariana Islands 'MS', // Mississippi 'MT', // Montana 'NC', // North Carolina 'ND', // North Dakota 'NE', // Nebraska 'NH', // New Hampshire 'NJ', // New Jersey 'NM', // New Mexico 'NV', // Nevada 'NY', // New York 'OH', // Ohio 'OK', // Oklahoma 'OR', // Oregon 'PA', // Pennsylvania 'PR', // Puerto Rico 'RI', // Rhode Island 'SC', // South Carolina 'SD', // South Dakota 'TN', // Tennessee 'TX', // Texas 'UM', // U.S. Minor Outlying Islands 'UT', // Utah 'VA', // Virginia 'VI', // Virgin Islands of the U.S. 'VT', // Vermont 'WA', // Washington 'WI', // Wisconsin 'WV', // West Virginia 'WY', // Wyoming ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UySubdivisionCode.php000066400000000000000000000021531336766562500256710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Uruguay subdivision code. * * ISO 3166-1 alpha-2: UY * * @link http://www.geonames.org/UY/administrative-division-uruguay.html */ class UySubdivisionCode extends AbstractSearcher { public $haystack = [ 'AR', // Artigas 'CA', // Canelones 'CL', // Cerro Largo 'CO', // Colonia 'DU', // Durazno 'FD', // Florida 'FS', // Flores 'LA', // Lavalleja 'MA', // Maldonado 'MO', // Montevideo 'PA', // Paysandu 'RN', // Rio Negro 'RO', // Rocha 'RV', // Rivera 'SA', // Salto 'SJ', // San Jose 'SO', // Soriano 'TA', // Tacuarembó 'TT', // Treinta y Tres ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/UzSubdivisionCode.php000066400000000000000000000020121336766562500256640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Uzbekistan subdivision code. * * ISO 3166-1 alpha-2: UZ * * @link http://www.geonames.org/UZ/administrative-division-uzbekistan.html */ class UzSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AN', // Andijon 'BU', // Buxoro 'FA', // Farg'ona 'JI', // Jizzax 'NG', // Namangan 'NW', // Navoiy 'QA', // Qashqadaryo 'QR', // Qoraqalpog'iston Republikasi 'SA', // Samarqand 'SI', // Sirdaryo 'SU', // Surxondaryo 'TK', // Toshkent city 'TO', // Toshkent region 'XO', // Xorazm ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VaSubdivisionCode.php000066400000000000000000000012071336766562500256410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Vatican City subdivision code. * * ISO 3166-1 alpha-2: VA * * @link http://www.geonames.org/VA/administrative-division-vatican-city.html */ class VaSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VcSubdivisionCode.php000066400000000000000000000015331336766562500256450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Saint Vincent and the Grenadines subdivision code. * * ISO 3166-1 alpha-2: VC * * @link http://www.geonames.org/VC/administrative-division-saint-vincent-and-the-grenadines.html */ class VcSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Charlotte '02', // Saint Andrew '03', // Saint David '04', // Saint George '05', // Saint Patrick '06', // Grenadines ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VeSubdivisionCode.php000066400000000000000000000023611336766562500256470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Venezuela subdivision code. * * ISO 3166-1 alpha-2: VE * * @link http://www.geonames.org/VE/administrative-division-venezuela.html */ class VeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Federal Capital 'B', // Anzoategui 'C', // Apure 'D', // Aragua 'E', // Barinas 'F', // Bolivar 'G', // Carabobo 'H', // Cojedes 'I', // Falcon 'J', // Guarico 'K', // Lara 'L', // Merida 'M', // Miranda 'N', // Monagas 'O', // Nueva Esparta 'P', // Portuguesa 'R', // Sucre 'S', // Tachira 'T', // Trujillo 'U', // Yaracuy 'V', // Zulia 'W', // Federal Dependency 'X', // Vargas 'Y', // Delta Amacuro 'Z', // Amazonas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VgSubdivisionCode.php000066400000000000000000000012331336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for British Virgin Islands subdivision code. * * ISO 3166-1 alpha-2: VG * * @link http://www.geonames.org/VG/administrative-division-british-virgin-islands.html */ class VgSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ViSubdivisionCode.php000066400000000000000000000013451336766562500256540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for U.S. Virgin Islands subdivision code. * * ISO 3166-1 alpha-2: VI * * @link http://www.geonames.org/VI/administrative-division-u-s-virgin-islands.html */ class ViSubdivisionCode extends AbstractSearcher { public $haystack = [ 'C', // Saint Croix 'J', // Saint John 'T', // Saint Thomas ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VnSubdivisionCode.php000066400000000000000000000044321336766562500256610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Vietnam subdivision code. * * ISO 3166-1 alpha-2: VN * * @link http://www.geonames.org/VN/administrative-division-vietnam.html */ class VnSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Lai Chau '02', // Lao Cai '03', // Ha Giang '04', // Cao Bang '05', // Son La '06', // Yen Bai '07', // Tuyen Quang '09', // Lang Son '13', // Quang Ninh '14', // Hoa Binh '18', // Ninh Binh '20', // Thai Binh '21', // Thanh Hoa '22', // Nghe An '23', // Ha Tinh '24', // Quang Binh '25', // Quang Tri '26', // Thua Thien-Hue '27', // Quang Nam '28', // Kon Tum '29', // Quang Ngai '30', // Gia Lai '31', // Binh Dinh '32', // Phu Yen '33', // Dak Lak '34', // Khanh Hoa '35', // Lam Dong '36', // Ninh Thuan '37', // Tay Ninh '39', // Dong Nai '40', // Binh Thuan '41', // Long An '43', // Ba Ria-Vung Tau '44', // An Giang '45', // Dong Thap '46', // Tien Giang '47', // Kien Giang '48', // Can Tho '49', // Vinh Long '50', // Ben Tre '51', // Tra Vinh '52', // Soc Trang '53', // Bac Can '54', // Bac Giang '55', // Bac Lieu '56', // Bac Ninh '57', // Binh Duong '58', // Binh Phuoc '59', // Ca Mau '60', // Da Nang '61', // Hai Duong '62', // Hai Phong '63', // Ha Nam '64', // Ha Noi '65', // Ho Chi Minh '66', // Hung Yen '67', // Nam Dinh '68', // Phu Tho '69', // Thai Nguyen '70', // Vinh Phuc '71', // Dien Bien '72', // Dak Nong '73', // Hau Giang '15', // Ha Tay ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/VuSubdivisionCode.php000066400000000000000000000014151336766562500256660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Vanuatu subdivision code. * * ISO 3166-1 alpha-2: VU * * @link http://www.geonames.org/VU/administrative-division-vanuatu.html */ class VuSubdivisionCode extends AbstractSearcher { public $haystack = [ 'MAP', // Malampa 'PAM', // Penama 'SAM', // Sanma 'SEE', // Shefa 'TAE', // Tafea 'TOB', // Torba ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/WfSubdivisionCode.php000066400000000000000000000013201336766562500256430ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Wallis and Futuna subdivision code. * * ISO 3166-1 alpha-2: WF * * @link http://www.geonames.org/WF/administrative-division-wallis-and-futuna.html */ class WfSubdivisionCode extends AbstractSearcher { public $haystack = [ 'A', // Alo 'S', // Sigave 'W', // ʻUvea ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/WsSubdivisionCode.php000066400000000000000000000016471336766562500256740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Samoa subdivision code. * * ISO 3166-1 alpha-2: WS * * @link http://www.geonames.org/WS/administrative-division-samoa.html */ class WsSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AA', // A'ana 'AL', // Aiga-i-le-Tai 'AT', // Atua 'FA', // Fa'asaleleaga 'GE', // Gaga'emauga 'GI', // Gagaifomauga 'PA', // Palauli 'SA', // Satupa'itea 'TU', // Tuamasaga 'VF', // Va'a-o-Fonoti 'VS', // Vaisigano ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/XkSubdivisionCode.php000066400000000000000000000011731336766562500256570ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Kosovo subdivision code. * * ISO 3166-1 alpha-2: XK * * @link http://www.geonames.org/XK/administrative-division-kosovo.html */ class XkSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/YeSubdivisionCode.php000066400000000000000000000022021336766562500256440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Yemen subdivision code. * * ISO 3166-1 alpha-2: YE * * @link http://www.geonames.org/YE/administrative-division-yemen.html */ class YeSubdivisionCode extends AbstractSearcher { public $haystack = [ 'AB', // Abyan 'AD', // Adan 'AM', // Amran 'BA', // Al Bayda 'DA', // Ad Dali 'DH', // Dhamar 'HD', // Hadramawt 'HJ', // Hajjah 'HU', // Al Hudaydah 'IB', // Ibb 'JA', // Al Jawf 'LA', // Lahij 'MA', // Ma'rib 'MR', // Al Mahrah 'MW', // Al Mahwit 'RA', // Raymah 'SA', // Amanat Al Asimah 'SD', // Sa'dah 'SH', // Shabwah 'SN', // San'a 'TA', // Ta'izz ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/YtSubdivisionCode.php000066400000000000000000000011751336766562500256730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Mayotte subdivision code. * * ISO 3166-1 alpha-2: YT * * @link http://www.geonames.org/YT/administrative-division-mayotte.html */ class YtSubdivisionCode extends AbstractSearcher { public $haystack = [null, '']; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ZaSubdivisionCode.php000066400000000000000000000016041336766562500256460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for South Africa subdivision code. * * ISO 3166-1 alpha-2: ZA * * @link http://www.geonames.org/ZA/administrative-division-south-africa.html */ class ZaSubdivisionCode extends AbstractSearcher { public $haystack = [ 'EC', // Eastern Cape 'FS', // Free State 'GP', // Gauteng 'LP', // Limpopo 'MP', // Mpumalanga 'NC', // Northern Cape 'NW', // North West 'WC', // Western Cape 'ZN', // KwaZulu-Natal ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ZmSubdivisionCode.php000066400000000000000000000016641336766562500256700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Zambia subdivision code. * * ISO 3166-1 alpha-2: ZM * * @link http://www.geonames.org/ZM/administrative-division-zambia.html */ class ZmSubdivisionCode extends AbstractSearcher { public $haystack = [ '01', // Western Province '02', // Central Province '03', // Eastern Province '04', // Luapula Province '05', // Northern Province '06', // North-Western Province '07', // Southern Province '08', // Copperbelt Province '09', // Lusaka Province ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SubdivisionCode/ZwSubdivisionCode.php000066400000000000000000000016751336766562500257040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\SubdivisionCode; use Respect\Validation\Rules\AbstractSearcher; /** * Validator for Zimbabwe subdivision code. * * ISO 3166-1 alpha-2: ZW * * @link http://www.geonames.org/ZW/administrative-division-zimbabwe.html */ class ZwSubdivisionCode extends AbstractSearcher { public $haystack = [ 'BU', // Bulawayo (city) 'HA', // Harare (city) 'MA', // Manicaland 'MC', // Mashonaland Central 'ME', // Mashonaland East 'MI', // Midlands 'MN', // Matabeleland North 'MS', // Matabeleland South 'MV', // Masvingo 'MW', // Mashonaland West ]; public $compareIdentical = true; } Validation-1.1.29/library/Rules/SymbolicLink.php000066400000000000000000000010251336766562500215650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class SymbolicLink extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isLink(); } return (is_string($input) && is_link($input)); } } Validation-1.1.29/library/Rules/Tld.php000066400000000000000000000415701336766562500177220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Tld extends AbstractRule { protected $tldList = [ // https://data.iana.org/TLD/tlds-alpha-by-domain.txt // Version 2018100800, Last Updated Mon Oct 8 07:07:01 2018 UTC 'aaa', 'aarp', 'abarth', 'abb', 'abbott', 'abbvie', 'abc', 'able', 'abogado', 'abudhabi', 'ac', 'academy', 'accenture', 'accountant', 'accountants', 'aco', 'active', 'actor', 'ad', 'adac', 'ads', 'adult', 'ae', 'aeg', 'aero', 'aetna', 'af', 'afamilycompany', 'afl', 'africa', 'ag', 'agakhan', 'agency', 'ai', 'aig', 'aigo', 'airbus', 'airforce', 'airtel', 'akdn', 'al', 'alfaromeo', 'alibaba', 'alipay', 'allfinanz', 'allstate', 'ally', 'alsace', 'alstom', 'am', 'americanexpress', 'americanfamily', 'amex', 'amfam', 'amica', 'amsterdam', 'analytics', 'android', 'anquan', 'anz', 'ao', 'aol', 'apartments', 'app', 'apple', 'aq', 'aquarelle', 'ar', 'arab', 'aramco', 'archi', 'army', 'arpa', 'art', 'arte', 'as', 'asda', 'asia', 'associates', 'at', 'athleta', 'attorney', 'au', 'auction', 'audi', 'audible', 'audio', 'auspost', 'author', 'auto', 'autos', 'avianca', 'aw', 'aws', 'ax', 'axa', 'az', 'azure', 'ba', 'baby', 'baidu', 'banamex', 'bananarepublic', 'band', 'bank', 'bar', 'barcelona', 'barclaycard', 'barclays', 'barefoot', 'bargains', 'baseball', 'basketball', 'bauhaus', 'bayern', 'bb', 'bbc', 'bbt', 'bbva', 'bcg', 'bcn', 'bd', 'be', 'beats', 'beauty', 'beer', 'bentley', 'berlin', 'best', 'bestbuy', 'bet', 'bf', 'bg', 'bh', 'bharti', 'bi', 'bible', 'bid', 'bike', 'bing', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'blanco', 'blockbuster', 'blog', 'bloomberg', 'blue', 'bm', 'bms', 'bmw', 'bn', 'bnl', 'bnpparibas', 'bo', 'boats', 'boehringer', 'bofa', 'bom', 'bond', 'boo', 'book', 'booking', 'bosch', 'bostik', 'boston', 'bot', 'boutique', 'box', 'br', 'bradesco', 'bridgestone', 'broadway', 'broker', 'brother', 'brussels', 'bs', 'bt', 'budapest', 'bugatti', 'build', 'builders', 'business', 'buy', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cafe', 'cal', 'call', 'calvinklein', 'cam', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'capitalone', 'car', 'caravan', 'cards', 'care', 'career', 'careers', 'cars', 'cartier', 'casa', 'case', 'caseih', 'cash', 'casino', 'cat', 'catering', 'catholic', 'cba', 'cbn', 'cbre', 'cbs', 'cc', 'cd', 'ceb', 'center', 'ceo', 'cern', 'cf', 'cfa', 'cfd', 'cg', 'ch', 'chanel', 'channel', 'charity', 'chase', 'chat', 'cheap', 'chintai', 'christmas', 'chrome', 'chrysler', 'church', 'ci', 'cipriani', 'circle', 'cisco', 'citadel', 'citi', 'citic', 'city', 'cityeats', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clinique', 'clothing', 'cloud', 'club', 'clubmed', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'comcast', 'commbank', 'community', 'company', 'compare', 'computer', 'comsec', 'condos', 'construction', 'consulting', 'contact', 'contractors', 'cooking', 'cookingchannel', 'cool', 'coop', 'corsica', 'country', 'coupon', 'coupons', 'courses', 'cr', 'credit', 'creditcard', 'creditunion', 'cricket', 'crown', 'crs', 'cruise', 'cruises', 'csc', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cyou', 'cz', 'dabur', 'dad', 'dance', 'data', 'date', 'dating', 'datsun', 'day', 'dclk', 'dds', 'de', 'deal', 'dealer', 'deals', 'degree', 'delivery', 'dell', 'deloitte', 'delta', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'dhl', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'discover', 'dish', 'diy', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'doctor', 'dodge', 'dog', 'doha', 'domains', 'dot', 'download', 'drive', 'dtv', 'dubai', 'duck', 'dunlop', 'duns', 'dupont', 'durban', 'dvag', 'dvr', 'dz', 'earth', 'eat', 'ec', 'eco', 'edeka', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'epost', 'epson', 'equipment', 'er', 'ericsson', 'erni', 'es', 'esq', 'estate', 'esurance', 'et', 'etisalat', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'express', 'extraspace', 'fage', 'fail', 'fairwinds', 'faith', 'family', 'fan', 'fans', 'farm', 'farmers', 'fashion', 'fast', 'fedex', 'feedback', 'ferrari', 'ferrero', 'fi', 'fiat', 'fidelity', 'fido', 'film', 'final', 'finance', 'financial', 'fire', 'firestone', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flickr', 'flights', 'flir', 'florist', 'flowers', 'fly', 'fm', 'fo', 'foo', 'food', 'foodnetwork', 'football', 'ford', 'forex', 'forsale', 'forum', 'foundation', 'fox', 'fr', 'free', 'fresenius', 'frl', 'frogans', 'frontdoor', 'frontier', 'ftr', 'fujitsu', 'fujixerox', 'fun', 'fund', 'furniture', 'futbol', 'fyi', 'ga', 'gal', 'gallery', 'gallo', 'gallup', 'game', 'games', 'gap', 'garden', 'gb', 'gbiz', 'gd', 'gdn', 'ge', 'gea', 'gent', 'genting', 'george', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'giving', 'gl', 'glade', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmbh', 'gmo', 'gmx', 'gn', 'godaddy', 'gold', 'goldpoint', 'golf', 'goo', 'goodyear', 'goog', 'google', 'gop', 'got', 'gov', 'gp', 'gq', 'gr', 'grainger', 'graphics', 'gratis', 'green', 'gripe', 'grocery', 'group', 'gs', 'gt', 'gu', 'guardian', 'gucci', 'guge', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hair', 'hamburg', 'hangout', 'haus', 'hbo', 'hdfc', 'hdfcbank', 'health', 'healthcare', 'help', 'helsinki', 'here', 'hermes', 'hgtv', 'hiphop', 'hisamitsu', 'hitachi', 'hiv', 'hk', 'hkt', 'hm', 'hn', 'hockey', 'holdings', 'holiday', 'homedepot', 'homegoods', 'homes', 'homesense', 'honda', 'honeywell', 'horse', 'hospital', 'host', 'hosting', 'hot', 'hoteles', 'hotels', 'hotmail', 'house', 'how', 'hr', 'hsbc', 'ht', 'hu', 'hughes', 'hyatt', 'hyundai', 'ibm', 'icbc', 'ice', 'icu', 'id', 'ie', 'ieee', 'ifm', 'ikano', 'il', 'im', 'imamat', 'imdb', 'immo', 'immobilien', 'in', 'inc', 'industries', 'infiniti', 'info', 'ing', 'ink', 'institute', 'insurance', 'insure', 'int', 'intel', 'international', 'intuit', 'investments', 'io', 'ipiranga', 'iq', 'ir', 'irish', 'is', 'iselect', 'ismaili', 'ist', 'istanbul', 'it', 'itau', 'itv', 'iveco', 'jaguar', 'java', 'jcb', 'jcp', 'je', 'jeep', 'jetzt', 'jewelry', 'jio', 'jll', 'jm', 'jmp', 'jnj', 'jo', 'jobs', 'joburg', 'jot', 'joy', 'jp', 'jpmorgan', 'jprs', 'juegos', 'juniper', 'kaufen', 'kddi', 'ke', 'kerryhotels', 'kerrylogistics', 'kerryproperties', 'kfh', 'kg', 'kh', 'ki', 'kia', 'kim', 'kinder', 'kindle', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'komatsu', 'kosher', 'kp', 'kpmg', 'kpn', 'kr', 'krd', 'kred', 'kuokgroup', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'ladbrokes', 'lamborghini', 'lamer', 'lancaster', 'lancia', 'lancome', 'land', 'landrover', 'lanxess', 'lasalle', 'lat', 'latino', 'latrobe', 'law', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'leclerc', 'lefrak', 'legal', 'lego', 'lexus', 'lgbt', 'li', 'liaison', 'lidl', 'life', 'lifeinsurance', 'lifestyle', 'lighting', 'like', 'lilly', 'limited', 'limo', 'lincoln', 'linde', 'link', 'lipsy', 'live', 'living', 'lixil', 'lk', 'llc', 'loan', 'loans', 'locker', 'locus', 'loft', 'lol', 'london', 'lotte', 'lotto', 'love', 'lpl', 'lplfinancial', 'lr', 'ls', 'lt', 'ltd', 'ltda', 'lu', 'lundbeck', 'lupin', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'macys', 'madrid', 'maif', 'maison', 'makeup', 'man', 'management', 'mango', 'map', 'market', 'marketing', 'markets', 'marriott', 'marshalls', 'maserati', 'mattel', 'mba', 'mc', 'mckinsey', 'md', 'me', 'med', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'men', 'menu', 'merckmsd', 'metlife', 'mg', 'mh', 'miami', 'microsoft', 'mil', 'mini', 'mint', 'mit', 'mitsubishi', 'mk', 'ml', 'mlb', 'mls', 'mm', 'mma', 'mn', 'mo', 'mobi', 'mobile', 'mobily', 'moda', 'moe', 'moi', 'mom', 'monash', 'money', 'monster', 'mopar', 'mormon', 'mortgage', 'moscow', 'moto', 'motorcycles', 'mov', 'movie', 'movistar', 'mp', 'mq', 'mr', 'ms', 'msd', 'mt', 'mtn', 'mtr', 'mu', 'museum', 'mutual', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nab', 'nadex', 'nagoya', 'name', 'nationwide', 'natura', 'navy', 'nba', 'nc', 'ne', 'nec', 'net', 'netbank', 'netflix', 'network', 'neustar', 'new', 'newholland', 'news', 'next', 'nextdirect', 'nexus', 'nf', 'nfl', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'nike', 'nikon', 'ninja', 'nissan', 'nissay', 'nl', 'no', 'nokia', 'northwesternmutual', 'norton', 'now', 'nowruz', 'nowtv', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'obi', 'observer', 'off', 'office', 'okinawa', 'olayan', 'olayangroup', 'oldnavy', 'ollo', 'om', 'omega', 'one', 'ong', 'onl', 'online', 'onyourside', 'ooo', 'open', 'oracle', 'orange', 'org', 'organic', 'origins', 'osaka', 'otsuka', 'ott', 'ovh', 'pa', 'page', 'panasonic', 'paris', 'pars', 'partners', 'parts', 'party', 'passagens', 'pay', 'pccw', 'pe', 'pet', 'pf', 'pfizer', 'pg', 'ph', 'pharmacy', 'phd', 'philips', 'phone', 'photo', 'photography', 'photos', 'physio', 'piaget', 'pics', 'pictet', 'pictures', 'pid', 'pin', 'ping', 'pink', 'pioneer', 'pizza', 'pk', 'pl', 'place', 'play', 'playstation', 'plumbing', 'plus', 'pm', 'pn', 'pnc', 'pohl', 'poker', 'politie', 'porn', 'post', 'pr', 'pramerica', 'praxi', 'press', 'prime', 'pro', 'prod', 'productions', 'prof', 'progressive', 'promo', 'properties', 'property', 'protection', 'pru', 'prudential', 'ps', 'pt', 'pub', 'pw', 'pwc', 'py', 'qa', 'qpon', 'quebec', 'quest', 'qvc', 'racing', 'radio', 'raid', 're', 'read', 'realestate', 'realtor', 'realty', 'recipes', 'red', 'redstone', 'redumbrella', 'rehab', 'reise', 'reisen', 'reit', 'reliance', 'ren', 'rent', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'review', 'reviews', 'rexroth', 'rich', 'richardli', 'ricoh', 'rightathome', 'ril', 'rio', 'rip', 'rmit', 'ro', 'rocher', 'rocks', 'rodeo', 'rogers', 'room', 'rs', 'rsvp', 'ru', 'rugby', 'ruhr', 'run', 'rw', 'rwe', 'ryukyu', 'sa', 'saarland', 'safe', 'safety', 'sakura', 'sale', 'salon', 'samsclub', 'samsung', 'sandvik', 'sandvikcoromant', 'sanofi', 'sap', 'sarl', 'sas', 'save', 'saxo', 'sb', 'sbi', 'sbs', 'sc', 'sca', 'scb', 'schaeffler', 'schmidt', 'scholarships', 'school', 'schule', 'schwarz', 'science', 'scjohnson', 'scor', 'scot', 'sd', 'se', 'search', 'seat', 'secure', 'security', 'seek', 'select', 'sener', 'services', 'ses', 'seven', 'sew', 'sex', 'sexy', 'sfr', 'sg', 'sh', 'shangrila', 'sharp', 'shaw', 'shell', 'shia', 'shiksha', 'shoes', 'shop', 'shopping', 'shouji', 'show', 'showtime', 'shriram', 'si', 'silk', 'sina', 'singles', 'site', 'sj', 'sk', 'ski', 'skin', 'sky', 'skype', 'sl', 'sling', 'sm', 'smart', 'smile', 'sn', 'sncf', 'so', 'soccer', 'social', 'softbank', 'software', 'sohu', 'solar', 'solutions', 'song', 'sony', 'soy', 'space', 'spiegel', 'sport', 'spot', 'spreadbetting', 'sr', 'srl', 'srt', 'st', 'stada', 'staples', 'star', 'starhub', 'statebank', 'statefarm', 'stc', 'stcgroup', 'stockholm', 'storage', 'store', 'stream', 'studio', 'study', 'style', 'su', 'sucks', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'swatch', 'swiftcover', 'swiss', 'sx', 'sy', 'sydney', 'symantec', 'systems', 'sz', 'tab', 'taipei', 'talk', 'taobao', 'target', 'tatamotors', 'tatar', 'tattoo', 'tax', 'taxi', 'tc', 'tci', 'td', 'tdk', 'team', 'tech', 'technology', 'tel', 'telefonica', 'temasek', 'tennis', 'teva', 'tf', 'tg', 'th', 'thd', 'theater', 'theatre', 'tiaa', 'tickets', 'tienda', 'tiffany', 'tips', 'tires', 'tirol', 'tj', 'tjmaxx', 'tjx', 'tk', 'tkmaxx', 'tl', 'tm', 'tmall', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toray', 'toshiba', 'total', 'tours', 'town', 'toyota', 'toys', 'tr', 'trade', 'trading', 'training', 'travel', 'travelchannel', 'travelers', 'travelersinsurance', 'trust', 'trv', 'tt', 'tube', 'tui', 'tunes', 'tushu', 'tv', 'tvs', 'tw', 'tz', 'ua', 'ubank', 'ubs', 'uconnect', 'ug', 'uk', 'unicom', 'university', 'uno', 'uol', 'ups', 'us', 'uy', 'uz', 'va', 'vacations', 'vana', 'vanguard', 'vc', 've', 'vegas', 'ventures', 'verisign', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'vig', 'viking', 'villas', 'vin', 'vip', 'virgin', 'visa', 'vision', 'vistaprint', 'viva', 'vivo', 'vlaanderen', 'vn', 'vodka', 'volkswagen', 'volvo', 'vote', 'voting', 'voto', 'voyage', 'vu', 'vuelos', 'wales', 'walmart', 'walter', 'wang', 'wanggou', 'warman', 'watch', 'watches', 'weather', 'weatherchannel', 'webcam', 'weber', 'website', 'wed', 'wedding', 'weibo', 'weir', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'win', 'windows', 'wine', 'winners', 'wme', 'wolterskluwer', 'woodside', 'work', 'works', 'world', 'wow', 'ws', 'wtc', 'wtf', 'xbox', 'xerox', 'xfinity', 'xihuan', 'xin', 'xn--11b4c3d', 'xn--1ck2e1b', 'xn--1qqw23a', 'xn--2scrj9c', 'xn--30rr7y', 'xn--3bst00m', 'xn--3ds443g', 'xn--3e0b707e', 'xn--3hcrj9c', 'xn--3oq18vl8pn36a', 'xn--3pxu8k', 'xn--42c2d9a', 'xn--45br5cyl', 'xn--45brj9c', 'xn--45q11c', 'xn--4gbrim', 'xn--54b7fta0cc', 'xn--55qw42g', 'xn--55qx5d', 'xn--5su34j936bgsg', 'xn--5tzm5g', 'xn--6frz82g', 'xn--6qq986b3xl', 'xn--80adxhks', 'xn--80ao21a', 'xn--80aqecdr1a', 'xn--80asehdb', 'xn--80aswg', 'xn--8y0a063a', 'xn--90a3ac', 'xn--90ae', 'xn--90ais', 'xn--9dbq2a', 'xn--9et52u', 'xn--9krt00a', 'xn--b4w605ferd', 'xn--bck1b9a5dre4c', 'xn--c1avg', 'xn--c2br7g', 'xn--cck2b3b', 'xn--cg4bki', 'xn--clchc0ea0b2g2a9gcd', 'xn--czr694b', 'xn--czrs0t', 'xn--czru2d', 'xn--d1acj3b', 'xn--d1alf', 'xn--e1a4c', 'xn--eckvdtc9d', 'xn--efvy88h', 'xn--estv75g', 'xn--fct429k', 'xn--fhbei', 'xn--fiq228c5hs', 'xn--fiq64b', 'xn--fiqs8s', 'xn--fiqz9s', 'xn--fjq720a', 'xn--flw351e', 'xn--fpcrj9c3d', 'xn--fzc2c9e2c', 'xn--fzys8d69uvgm', 'xn--g2xx48c', 'xn--gckr3f0f', 'xn--gecrj9c', 'xn--gk3at1e', 'xn--h2breg3eve', 'xn--h2brj9c', 'xn--h2brj9c8c', 'xn--hxt814e', 'xn--i1b6b1a6a2e', 'xn--imr513n', 'xn--io0a7i', 'xn--j1aef', 'xn--j1amh', 'xn--j6w193g', 'xn--jlq61u9w7b', 'xn--jvr189m', 'xn--kcrx77d1x4a', 'xn--kprw13d', 'xn--kpry57d', 'xn--kpu716f', 'xn--kput3i', 'xn--l1acc', 'xn--lgbbat1ad8j', 'xn--mgb9awbf', 'xn--mgba3a3ejt', 'xn--mgba3a4f16a', 'xn--mgba7c0bbn0a', 'xn--mgbaakc7dvf', 'xn--mgbaam7a8h', 'xn--mgbab2bd', 'xn--mgbai9azgqp6j', 'xn--mgbayh7gpa', 'xn--mgbb9fbpob', 'xn--mgbbh1a', 'xn--mgbbh1a71e', 'xn--mgbc0a9azcg', 'xn--mgbca7dzdo', 'xn--mgberp4a5d4ar', 'xn--mgbgu82a', 'xn--mgbi4ecexp', 'xn--mgbpl2fh', 'xn--mgbt3dhd', 'xn--mgbtx2b', 'xn--mgbx4cd0ab', 'xn--mix891f', 'xn--mk1bu44c', 'xn--mxtq1m', 'xn--ngbc5azd', 'xn--ngbe9e0a', 'xn--ngbrx', 'xn--node', 'xn--nqv7f', 'xn--nqv7fs00ema', 'xn--nyqy26a', 'xn--o3cw4h', 'xn--ogbpf8fl', 'xn--otu796d', 'xn--p1acf', 'xn--p1ai', 'xn--pbt977c', 'xn--pgbs0dh', 'xn--pssy2u', 'xn--q9jyb4c', 'xn--qcka1pmc', 'xn--qxam', 'xn--rhqv96g', 'xn--rovu88b', 'xn--rvc1e0am3e', 'xn--s9brj9c', 'xn--ses554g', 'xn--t60b56a', 'xn--tckwe', 'xn--tiq49xqyj', 'xn--unup4y', 'xn--vermgensberater-ctb', 'xn--vermgensberatung-pwb', 'xn--vhquv', 'xn--vuq861b', 'xn--w4r85el8fhu5dnra', 'xn--w4rs40l', 'xn--wgbh1c', 'xn--wgbl6a', 'xn--xhq521b', 'xn--xkc2al3hye2a', 'xn--xkc2dl3a5ee0h', 'xn--y9a3aq', 'xn--yfro4i67o', 'xn--ygbi2ammx', 'xn--zfr164b', 'xxx', 'xyz', 'yachts', 'yahoo', 'yamaxun', 'yandex', 'ye', 'yodobashi', 'yoga', 'yokohama', 'you', 'youtube', 'yt', 'yun', 'za', 'zappos', 'zara', 'zero', 'zip', 'zippo', 'zm', 'zone', 'zuerich', 'zw', ]; public function validate($input) { return in_array(strtolower($input), $this->tldList); } } Validation-1.1.29/library/Rules/TrueVal.php000066400000000000000000000007321336766562500205540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class TrueVal extends AbstractRule { public function validate($input) { return (true === filter_var($input, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); } } Validation-1.1.29/library/Rules/Type.php000066400000000000000000000025061336766562500201140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class Type extends AbstractRule { public $type; public $availableTypes = [ 'array' => 'array', 'bool' => 'boolean', 'boolean' => 'boolean', 'callable' => 'callable', 'double' => 'double', 'float' => 'double', 'int' => 'integer', 'integer' => 'integer', 'null' => 'NULL', 'object' => 'object', 'resource' => 'resource', 'string' => 'string', ]; public function __construct($type) { $lowerType = strtolower($type); if (!isset($this->availableTypes[$lowerType])) { throw new ComponentException(sprintf('"%s" is not a valid type', print_r($type, true))); } $this->type = $type; } public function validate($input) { $lowerType = strtolower($this->type); if ('callable' === $lowerType) { return is_callable($input); } return ($this->availableTypes[$lowerType] === gettype($input)); } } Validation-1.1.29/library/Rules/Uploaded.php000066400000000000000000000010411336766562500207210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Uploaded extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { $input = $input->getPathname(); } return (is_string($input) && is_uploaded_file($input)); } } Validation-1.1.29/library/Rules/Uppercase.php000066400000000000000000000007121336766562500211170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Uppercase extends AbstractRule { public function validate($input) { return $input === mb_strtoupper($input, mb_detect_encoding($input)); } } Validation-1.1.29/library/Rules/Url.php000066400000000000000000000006431336766562500177350ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Url extends FilterVar { public function __construct() { parent::__construct(FILTER_VALIDATE_URL); } } Validation-1.1.29/library/Rules/Version.php000066400000000000000000000010371336766562500206160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @link http://semver.org/ */ class Version extends AbstractRule { public function validate($input) { $pattern = '/^[0-9]+\.[0-9]+\.[0-9]+([+-][^+-][0-9A-Za-z-.]*)?$/'; return (bool) preg_match($pattern, $input); } } Validation-1.1.29/library/Rules/VideoUrl.php000066400000000000000000000033111336766562500207170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; class VideoUrl extends AbstractRule { /** * @var string */ public $service; /** * @var string */ private $serviceKey; /** * @var array */ private $services = [ 'youtube' => '@^https?://(www\.)?(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^\"&?/]{11})@i', 'vimeo' => '@^https?://(www\.)?(player\.)?(vimeo\.com/)((channels/[A-z]+/)|(groups/[A-z]+/videos/)|(video/))?([0-9]+)@i', ]; /** * Create a new instance VideoUrl. * * @param string $service */ public function __construct($service = null) { $serviceKey = strtolower($service); if (null !== $service && !isset($this->services[$serviceKey])) { throw new ComponentException(sprintf('"%s" is not a recognized video service.', $service)); } $this->service = $service; $this->serviceKey = strtolower($service); } /** * {@inheritdoc} */ public function validate($input) { if (isset($this->services[$this->serviceKey])) { return (preg_match($this->services[$this->serviceKey], $input) > 0); } foreach ($this->services as $pattern) { if (0 === preg_match($pattern, $input)) { continue; } return true; } return false; } } Validation-1.1.29/library/Rules/Vowel.php000066400000000000000000000006511336766562500202660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Vowel extends AbstractRegexRule { protected function getPregFormat() { return '/^(\s|[aeiouAEIOU])*$/'; } } Validation-1.1.29/library/Rules/When.php000066400000000000000000000026011336766562500200700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\AlwaysInvalidException; use Respect\Validation\Validatable; class When extends AbstractRule { public $when; public $then; public $else; public function __construct(Validatable $when, Validatable $then, Validatable $else = null) { $this->when = $when; $this->then = $then; if (null === $else) { $else = new AlwaysInvalid(); $else->setTemplate(AlwaysInvalidException::SIMPLE); } $this->else = $else; } public function validate($input) { if ($this->when->validate($input)) { return $this->then->validate($input); } return $this->else->validate($input); } public function assert($input) { if ($this->when->validate($input)) { return $this->then->assert($input); } return $this->else->assert($input); } public function check($input) { if ($this->when->validate($input)) { return $this->then->check($input); } return $this->else->check($input); } } Validation-1.1.29/library/Rules/Writable.php000066400000000000000000000010311336766562500207340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Writable extends AbstractRule { public function validate($input) { if ($input instanceof \SplFileInfo) { return $input->isWritable(); } return (is_string($input) && is_writable($input)); } } Validation-1.1.29/library/Rules/Xdigit.php000066400000000000000000000006511336766562500204220ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Xdigit extends AbstractCtypeRule { public function ctypeFunction($input) { return ctype_xdigit($input); } } Validation-1.1.29/library/Rules/Yes.php000066400000000000000000000010761336766562500177340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class Yes extends Regex { public function __construct($useLocale = false) { $pattern = '^y(eah?|ep|es)?$'; if ($useLocale && defined('YESEXPR')) { $pattern = nl_langinfo(YESEXPR); } parent::__construct('/'.$pattern.'/i'); } } Validation-1.1.29/library/Rules/Zend.php000066400000000000000000000033461336766562500200760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ReflectionClass; use Respect\Validation\Exceptions\ComponentException; class Zend extends AbstractRule { protected $messages = []; protected $zendValidator; public function __construct($validator, $params = []) { if (is_object($validator)) { return $this->zendValidator = $validator; } if (!is_string($validator)) { throw new ComponentException('Invalid Validator Construct'); } if (false === stripos($validator, 'Zend')) { $validator = "Zend\\Validator\\{$validator}"; } else { $validator = "\\{$validator}"; } $zendMirror = new ReflectionClass($validator); if ($zendMirror->hasMethod('__construct')) { $this->zendValidator = $zendMirror->newInstanceArgs($params); } else { $this->zendValidator = $zendMirror->newInstance(); } } public function assert($input) { $validator = clone $this->zendValidator; if ($validator->isValid($input)) { return true; } $exceptions = []; foreach ($validator->getMessages() as $m) { $exceptions[] = $this->reportError($m, get_object_vars($this)); } throw $this->reportError($input)->setRelated($exceptions); } public function validate($input) { $validator = clone $this->zendValidator; return $validator->isValid($input); } } Validation-1.1.29/library/Validatable.php000066400000000000000000000012071336766562500203060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation; /** Interface for validation rules */ interface Validatable { public function assert($input); public function check($input); public function getName(); public function reportError($input, array $relatedExceptions = []); public function setName($name); public function setTemplate($template); public function validate($input); } Validation-1.1.29/library/Validator.php000066400000000000000000000227511336766562500200320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation; use finfo; use ReflectionClass; use Respect\Validation\Exceptions\AllOfException; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Rules\AllOf; use Respect\Validation\Rules\Key; /** * @method static Validator age(int $minAge = null, int $maxAge = null) * @method static Validator allOf(Validatable ...$rule) * @method static Validator alnum(string $additionalChars = null) * @method static Validator alpha(string $additionalChars = null) * @method static Validator alwaysInvalid() * @method static Validator alwaysValid() * @method static Validator arrayVal() * @method static Validator arrayType() * @method static Validator attribute(string $reference, Validatable $validator = null, bool $mandatory = true) * @method static Validator bank(string $countryCode) * @method static Validator bankAccount(string $countryCode) * @method static Validator base() * @method static Validator between($min = null, $max = null, bool $inclusive = true) * @method static Validator bic(string $countryCode) * @method static Validator boolType() * @method static Validator boolVal() * @method static Validator bsn() * @method static Validator call() * @method static Validator callableType() * @method static Validator callback(callable $callback) * @method static Validator charset($charset) * @method static Validator cnh() * @method static Validator cnpj() * @method static Validator consonant(string $additionalChars = null) * @method static Validator contains($containsValue, bool $identical = false) * @method static Validator countable() * @method static Validator countryCode() * @method static Validator currencyCode() * @method static Validator cpf() * @method static Validator creditCard(string $brand = null) * @method static Validator date(string $format = null) * @method static Validator digit(string $additionalChars = null) * @method static Validator directory() * @method static Validator domain(bool $tldCheck = true) * @method static Validator each(Validatable $itemValidator = null, Validatable $keyValidator = null) * @method static Validator email() * @method static Validator endsWith($endValue, bool $identical = false) * @method static Validator equals($compareTo) * @method static Validator even() * @method static Validator executable() * @method static Validator exists() * @method static Validator extension(string $extension) * @method static Validator factor(int $dividend) * @method static Validator falseVal() * @method static Validator fibonacci() * @method static Validator file() * @method static Validator filterVar(int $filter, $options = null) * @method static Validator finite() * @method static Validator floatVal() * @method static Validator floatType() * @method static Validator graph(string $additionalChars = null) * @method static Validator hexRgbColor() * @method static Validator identical($value) * @method static Validator identityCard(string $countryCode) * @method static Validator image(finfo $fileInfo = null) * @method static Validator imei() * @method static Validator in($haystack, bool $compareIdentical = false) * @method static Validator infinite() * @method static Validator instance(string $instanceName) * @method static Validator intVal() * @method static Validator intType() * @method static Validator ip($ipOptions = null) * @method static Validator iterableType() * @method static Validator json() * @method static Validator key(string $reference, Validatable $referenceValidator = null, bool $mandatory = true) * @method static Validator keyNested(string $reference, Validatable $referenceValidator = null, bool $mandatory = true) * @method static Validator keySet(Key ...$rule) * @method static Validator keyValue(string $comparedKey, string $ruleName, string $baseKey) * @method static Validator languageCode(string $set) * @method static Validator leapDate(string $format) * @method static Validator leapYear() * @method static Validator length(int $min = null, int $max = null, bool $inclusive = true) * @method static Validator lowercase() * @method static Validator macAddress() * @method static Validator max($maxValue, bool $inclusive = true) * @method static Validator mimetype(string $mimetype) * @method static Validator min($minValue, bool $inclusive = true) * @method static Validator minimumAge(int $age) * @method static Validator multiple(int $multipleOf) * @method static Validator negative() * @method static Validator no($useLocale = false) * @method static Validator noneOf(Validatable ...$rule) * @method static Validator not(Validatable $rule) * @method static Validator notBlank() * @method static Validator notEmpty() * @method static Validator notOptional() * @method static Validator noWhitespace() * @method static Validator nullType() * @method static Validator numeric() * @method static Validator objectType() * @method static Validator odd() * @method static Validator oneOf(Validatable ...$rule) * @method static Validator optional(Validatable $rule) * @method static Validator perfectSquare() * @method static Validator pesel() * @method static Validator phone() * @method static Validator phpLabel() * @method static Validator positive() * @method static Validator postalCode(string $countryCode) * @method static Validator primeNumber() * @method static Validator prnt(string $additionalChars = null) * @method static Validator punct(string $additionalChars = null) * @method static Validator readable() * @method static Validator regex(string $regex) * @method static Validator resourceType() * @method static Validator roman() * @method static Validator scalarVal() * @method static Validator sf(string $name, array $params = null) * @method static Validator size(string $minSize = null, string $maxSize = null) * @method static Validator slug() * @method static Validator space(string $additionalChars = null) * @method static Validator startsWith($startValue, bool $identical = false) * @method static Validator stringType() * @method static Validator subdivisionCode(string $countryCode) * @method static Validator symbolicLink() * @method static Validator tld() * @method static Validator trueVal() * @method static Validator type(string $type) * @method static Validator uploaded() * @method static Validator uppercase() * @method static Validator url() * @method static Validator version() * @method static Validator videoUrl(string $service = null) * @method static Validator vowel() * @method static Validator when(Validatable $if, Validatable $then, Validatable $when = null) * @method static Validator writable() * @method static Validator xdigit(string $additionalChars = null) * @method static Validator yes($useLocale = false) * @method static Validator zend($validator, array $params = null) */ class Validator extends AllOf { protected static $factory; /** * @return Factory */ protected static function getFactory() { if (!static::$factory instanceof Factory) { static::$factory = new Factory(); } return static::$factory; } /** * @param Factory $factory */ public static function setFactory($factory) { static::$factory = $factory; } /** * @param string $rulePrefix * @param bool $prepend */ public static function with($rulePrefix, $prepend = false) { if (false === $prepend) { self::getFactory()->appendRulePrefix($rulePrefix); } else { self::getFactory()->prependRulePrefix($rulePrefix); } } public function check($input) { try { return parent::check($input); } catch (ValidationException $exception) { if (count($this->getRules()) == 1 && $this->template) { $exception->setTemplate($this->template); } throw $exception; } } /** * @param string $ruleName * @param array $arguments * * @return Validator */ public static function __callStatic($ruleName, $arguments) { if ('allOf' === $ruleName) { return static::buildRule($ruleName, $arguments); } $validator = new static(); return $validator->__call($ruleName, $arguments); } /** * @param mixed $ruleSpec * @param array $arguments * * @return Validatable */ public static function buildRule($ruleSpec, $arguments = []) { try { return static::getFactory()->rule($ruleSpec, $arguments); } catch (\Exception $exception) { throw new ComponentException($exception->getMessage(), $exception->getCode(), $exception); } } /** * @param string $method * @param array $arguments * * @return self */ public function __call($method, $arguments) { return $this->addRule(static::buildRule($method, $arguments)); } protected function createException() { return new AllOfException(); } /** * Create instance validator. * * @return Validator */ public static function create() { $ref = new ReflectionClass(__CLASS__); return $ref->newInstanceArgs(func_get_args()); } } Validation-1.1.29/phpunit.xml.dist000066400000000000000000000020351336766562500170740ustar00rootroot00000000000000 tests/unit/ tests/integration/ library/ library/Exceptions/SubdivisionCode library/Rules/SubdivisionCode Validation-1.1.29/tests/000077500000000000000000000000001336766562500150635ustar00rootroot00000000000000Validation-1.1.29/tests/fixtures/000077500000000000000000000000001336766562500167345ustar00rootroot00000000000000Validation-1.1.29/tests/fixtures/invalid-image.png000066400000000000000000001767301336766562500221660ustar00rootroot00000000000000˫nVPQ&JHBp;BpI;Lpw@4޾^b}Ͻ|n},y-lm@n.h7>>>!!^TD?|DDDDEEDy{zYx]qwqvu\\j :65nshXG ~֤_㎯g?gZ:,ܜl@6^^ ^6v66JΞ,_Jhh.^.6hnN^||E͟ yyyJZyxl-=m<\]l\@@+޼BB>҂đOKe;K}yk-jdc''of#JLT_N@GPI^GH\IGNLTG_A0ҔlO>jƿ(?|Eh)aSax* @>`bg^dF1*A|LnOIɗ<\)nЇX8# ᆅ}z(HHs7toz zTNzdTXz7(Wk/#/'ck71Jźh?7_]N(⨫+]ԝug4.8zVfkZ3]SE1w}ᡶ֋]x@\4(cDWb8oW $vnj S[]˷K멧{$v' | m>w> &,[s)s+]Lu EO+?ڏ޴kEeUphf樔g\]>,f.MZSI:v; ơ'Ez/&۳2 )كG ݲ[f2EZrDZ ujl"s gj7leX q.ȫ̾KHPW6{ coZٶU&hZN&°Waa׻2р`I %[^tC!49Ѭ%Xa"!I g<'=`PxLK{0)YQJE?auQ<8<<_-Xir^lvWSSD!&TB&Ows"]0@UK:LtIQYmo&x9ϟD*MwzkXV47,j`#ڣs3c&.Wwfggo=?i?5h1my* qǬ@{,?Sb~Qj!STTTgkItiܕDh0߭2Ǔ$R~}d M">guo1g GH~J%ݎ 7uD;6%D)?r믏 o1nZ],lȉHy)߂88^zKWd W6)r-!R (l^zR=Ze> [ z4(]Б.3☍;1qEhzGauXRSSn~ tx=[{a oU{W۶}s Є24HXiv[5OXqi[mm{wE@{E<(CYʅmkF8Y3z|ژ'PM H|##X :P*wT3lnuBZV᡻H=4Xg3Bɘ5`|_ZV _#z\\_ W4FGt :-{%_vԂ_0Jq1vM5ZY1~"uFG@tӽ2٦H&?_p+ZmBO3W5^UFLfMdߢm" pWYsyFzcQf$hso7S^S*LM<zeIfE{PʧךNƧ+$ nG/ P83lr^voRU,+]z/aQR$YfO!B/ Ig Pz@ oK.ES,IQ^ue7+l $r# NԻJ"ȊCS*v+#*\`4I4_olgZ ~jc-Z[9ݗ[-jdfZxA;.ӎ4 g`$;S.Tk;_쌷唐j=|Np`Ӯ,>R.hVY9 9>V8qڜobpBݗc DZ{ ⢙#;֯##r ^x rrwG~/NG:Qe=@X&b]_ALCCC K/ə{'< 8݀cqm N!{?u0\%9c^y~Ru^M\\&~ZOZ|hkȕ +.P24LaVN@b;hc{xvurRHt߫eq)+'g}3%Huy k#r[%V49ncJRPr1E w";ͫswZ@  )??Q#:1q3%K4nMGr9`ICsUK3QL=[~2bv~Q ~Y8.HHI a0Zy*nME#{?:r2 )Lv<;| Ԏk5' e"OIP W%ۘRWW[s))mM+\)"I2͜U%[kn6>Cn9+ xN|ͰGTz*.#\ xAҖe/7Pa5rfLENIEm ')Q>]^P&cꫤpXO:=0| {З|bz 8Q= ejxaF(sǑPı Ù:DnibX1W{9_L+/%C2NPeUAh^"(R{3MsvAr1r ys3 dnZ6'h TS&[#cƻ;:=YuFE-2p5<UoB(s4`Na|46B@MpPp^8 Жy_(48b$e:ń2gF8걁0áV"/at1545%;T%ckCz|:lJy!L! 6MVݻ+}/Ֆ} #ş ='?Qzsjφ8O6pi}dŠO|A)uQ[⥣2} L9̚D9 ) E3o9.Kd6hK)"fkFIֲ>S*3kxdsF;o"d'.zFAH$ ߠ&q~:I&@* ,*j$MB@ڨ0}! (YzT,AqνSgE8m1pn [̨3 ~ոEb{ko>ӌ:k# 3q`0dG 6x!aQk}UPa4-6z1@PѮá&a f?+P Ki1iyKQ*\sxEؙ v_^ƹ9 APY/T+Az`MǐKWqG9CSFAd<7 L,lmL-|y;TYfhVN#M+7 4 Pd%tRKV'!O J_"Ewg[r j+=Crx8_9LOJ3::zJ8@uDmE ƫVAIjZƑJM9AF+NJ۠j6b{ٶTS]d<~zvP[<[v`c R޳%,%⺖K2{5p哐ffŎ:m< qZQDkbLds6k%i 潰jZTXTN['=;\YjU/Щ~N"\NKuV i`}UsyH&EX!a^6'k8+?'1#&>M&rU!l??v}O tƲšw4ط]Y0ek &*qKZgy|џ &` /.J0T:J #@1 K(9a*}G+Vu+^Ն3 Dݻ+Dk ( Ek=w'J=Π>˧+$aKiAp[""O:^hUFIQQqh\˜b UmԷJU.%c2/paV v@e wSYiEҤſFFFn{S5ES(P,lr>4{ido:T%u./{[kĖ˲AQo Hdz)k>wD(ܺf%?IsN l]Q]W@:Jm.er||ު5cY~_g Lt}BG3#.oIa! k':Z}ׯ_qJuq"85iۣꮻ4\[of%*m '=^\ؓu\ + ݂PjpJ˾alu.ԁIiFVeH4S<-FQEѾfMN {wMUhuFA䗙M.ss'4l,ƒʯJKKd_ag@4ܿPQ|>J(?ݮ;~~n(J+"c~Ej%ٵG\v/"|>ZgMR¨='tFpy;t@it vSTb3cZ ySk['vI5i-crx9^`q6!.(^ іqDQ:*kLW6ZJwvz ŷU[, =p>AZW2EIN*|>'A#D/nx(PfS̗  $D{$o%q!w5sR!p 71W-[6)ݜzlS UJ 1_`3&eIuw\5/cxSʊkxʋsSt?2\ ]s?WAeo*\"#ݖQ.&~Jttm{"M2gMk{gNkʈ]h~H>@ʥ@۝#+M l: +Z־)|.Ct@zu_LMu NR")z狧X8dC n.{h:a Ґ*L^)*>`q%C&9Ddt A7ȟf|ckᄣ0يl70`B-_0'JM!5߉)E0'6*{oIFW8Qcfј\?Vts!MO &J !p8ܴ>}[Pkƻn,dBZxL'^)æZ:}C,Xz:Vu0F #C~@LWnamJf䄮NHZKVg(E"MQkӃ)K:OGS>L=[XsB0[[ou7f@}\7qGhd <;_LmCfQE}dKXyljjBq^Fɗ v<T. .M5d7@a ~{^,v? "E~5Ȫ[N&~&Z׫8;%N76?Ov>470A QF1Lsl\!A)-=r2kVd"cW]㵯gȵ"neSOKmSͪ'H7o?}s><+ @wzF ǩǼ RfBsR餭+q"k^x ;vZ=X:tWp XyIϝ<9{^ݡ_R]Jo&䰉f N55KĐGVKdLHޱP02O}kYe+Byǂf ~Q zZ-p(Hl I17uX<]jwmT.nп({3#pJ.O^Z 3$*_c+#XŘ+:UiM_T}KyqC/r-~P gBi .ϙAصmdh|މ.䚉8fg+H"g:JJ$Vַ"eH݋P(Ui.c"E;KRۼbA Bnq+3D0bJG|roh8`!H`2RY;tv+c&fOհp(h+F@r;A"YEf tՐ1r \̑sDA}].)8ѝgl'y wibS: IFяZC pnR" pBo}M<(X >N`B`V9^h]o;<6F-Ա.$"E:Jɀ::g\RLٍ ~U5KJ1\$Lolty~_f4MFu]K[ W"GڍP =O/9u]VHئL%jfYj.qs8Bh@F6 yR7NzEÏ*kԞ6Afq]*hCqڳ}Ju ܫE~ ='~_,VQ ᒝXW922?LqdByDz:V_%A><Crxz޾gc4q١x`!62T9S8!>nTjљV)+MVB ) ɛ4(vτN0 _NFZ=g' 6(Pej;;9M()Sh>JMKGO(j}kc{zSsxHzNNcU+j'OxBț t\d$޳Ju8=S)j$7+k~TEǮ>(͐Z&me.wKz,qNܣ\G/O:;SL}W}8O k8'54u<9Dk`zeH;.H7J44J6|'3" #NZ bǀؚpmK@b(&hZ, ʚܸ'Zz~W7s_ƽMLʷ{$ tT;> +eVJkl|)@ɮw{I@z#KF̢Gԡx!?NhdM{~E(洤nc/=,dZciϩ;y*WQ`hgK k-^M׊+޽.R'݇ cwE:m ؟D.%J,;riXj6s3(N3T[KXճYȢ)8 ~.M 0Đ}= mRE#ф\3맲KF}PI߃Y,b63-϶DTΫ }Tɰ.hEjMU6(, FS*״gh:>²ikle `ek:}< iCĻVLǵ>֌&h9}]D+]Ч`v~'ړԻn5v#~?^p̜`O<%cؖ\&Ͽ)/9'5_3Ԁ[`P${r+S9vG!ɪqLᯋ 85 퀃(`O_"Sob*=w' p(0ŭ c 2mvE2ZOQF\NmT`k[~B A̙J®^0 W(ʫyӋg_}_eZLn.DŽf0,U8 ]D;{gRUMmy37z>p.dω\9%Zr~aC81\ ?k ӿ$q)5-. n%s[¸;mR<=[,x$8ki]ٵk$q+JrG9S;l11ɽ,D9;/էYttV(Oe wpN=0}:,z{Њ soݞtͭur ۍ$O8$GH9&.}|lt(1,؂yboti>2J.n$hmx3a󭞻)xa*q|*Wϗlt٩ԅW8O+]:Εnxg1hc#a=MG+kk~JwDxxD vBy%c+0~5g`GVF[$$^YOtSZFIPi/i3YIv-ۧtgr^kXjXz_ 2K05}`T! oMJ!:`Ia׾`E,9#y85ǮL60Zu0&&-$\BC 4_zii Bwȴ sa[^g9[3D; 2W"HyEϒqAШ di,lz4,Lv:5qY'ϯG&D揺- ͓_nW%6yHmN@NBmur}u:po3ΐk *"G$\Er zug^=,'ЙDcm5<ր๥t|y(L@m`nCDpmL+\PlzOG5[=1(U3%ؓ3@l.ۂ]f)ћ8U8:\.bn $UMxϦM >lٟȫV Q؟-ٿק?~0f70`~,n K孙hf׵Ȭ uo>(aqJP>y鰀gYtOòn}j5){FO}7cea DjL ϡcEQ2R={UDWdŹã= @ї/SScwL@%gx yFR`(-PbԲGl緹J}5[dJ؍Wq#8<ô 555=;60,b>!֛kEđ Hu Ok@ԗcvrS-PIoPݵB=8<53KHOOs2@'$O d㸫;Z[[t`bsSCҨ%1g<oUYsK&As]sJՕ6ŶAyfT8r }eJ{n%{I۳PLb#0]7p) > 0|!"466a~q~no>dno+{S_O!ԢׂO} nLʄc6C'9~7M,m?_JR-R?z2R̩*Z*< %q93F=7Pj' z44Q Ϩ:{s2% c@2R'y҄Rట)ۈv\,)5:M= =mQ,?#~nhUp^TV.b +m(67\ 4 rI kж]w14l (LĝNGDyv"GBRIb{(+40I "=q\PcgdDms-t0$|{]Zᐽ@ӟafpu)XUHO#]saG pb%?Q8 (wهUfp{9W'tU-K^dT1kg/gmF)p+tꭩƤ* 7%~9z6%=%I˸暎ZY'2mjY6s666~@bʕFjhUZ_{?yM=֊LDe+D2Irvq1tuu2|5k~rwcj8bHd%ozP/>nt'V='bSKCҧ#wT\*l.fuy g%x!Txi%IC6,оm\08{W2Xx `86BnbBƠOΪ&(rB墹txZ>X#9шi홤I=&e<,1Iwt&^񺖉 # 1pA?iҤb^ki=M(:>ŏw6]E4qBD#Ȗۄ'W軰jl2 !%{`tigܵdQqWP&7iE^Ȕ?#;ubSxEFw3zIuqwt)Q1j<nj897?[=ٯOVcy HC(Pr`Lk3Jiѥ*CH妷 FJ^a3jiwv*%͌ƂBL[P/m'>-w4B;Սo EMM`_kj1?7Iyy[/~Lqjnuf2_zTgbp4`pLw@,˺PoR8aKu2OcYl[s5ccc;Qn/FQ.. OϤ}l Yҗm{@) 2l|73qTo1u}O\7Gd l/xV+ MႢx ތ6s8΃q _/|Z)2vhDKVMLb wM%HH !a;h :ȃYs[׵̃*=i;-^nVM8 Fv\9v:?|vE[k0V w[Kf͠p[oF<,fY@)d:j'D#ƹ )$3%-A.t"!Ͷ$iF +xDcsMY)i Ji1VnK}* d #;R&T~ʒ%S 1x[p'`bgV76=81_Gcw^јcA?`nyenI!TЇelgBl&&z#.9ٰIɖȱP Vk7K~Ξ)~R9ax`+W< nƟ 5A>&kvioHe.N׽/TTZY"oHX6bCkLf^yFy 3-#JyM~ZSɦȢZ3҇ȳ:[E-ݢ֓{%o  b<({"j']Ixn,ylvQIbLwō%CfƬgfdE?kxHrۑ^~u;i=Z.'IRXgUt 4Lٶj4QG/b&Wə@qT(ǰfL&t3TޚBGZԸē(E Amm{0?oO2y "yFݜyk%4eA)+ECxHy7苖.?3BcHsZBqo}t!s?c 63^>E-̳ ckϷ_ O4`2Y?Klj z7J]'Om~IyZeK> #QeQ70&QVR`=31aTsqU>Q+^f7j~;'HtJ{Ķb9D/9Mh9~\yn+͝ i&|S@N`q9iQNM(V1\]SG+H_qz1OHUd)9b,P̅4O(j ,_߰q$wjyL0=#Idzì'}S;6YNp^J^~ڇ..l {F_܄ь,{_W,5ǔ)7%g{~̊ͅ Q&5~- BMQLP1dK&=S DΙ *,rG_jckz7tbeˍ8]B$F]U4k %WƃG)IЁf3h2*.zE\;ז;/@%0H*:GG50[G<@׉{xr-z+q< oؕs)B臯d"|7 MoU}ttwJ ݨH#"942CwwIHtt?.낙9k׺5D?EM 7w5bUGUԫn6mD@[]<~T au}/r3&纲{W' o]w]HT,Eirn#ޏTqoY2&IJ+x''^Je94Q(&F/(k(!ZqP|WG@'ƒlb|baok2H5G=7)NTO˰%n2ꂖ2?AiP :EAϬurvC+Jq 4*1 ί E5S=׏sC:"oOj'kKN(O:#%[krB-{:k:lF;gk|Do L7;Z3Ɲơr:5,>/?T %7ul6g2L쏢 p?K.5DQh˄#শVL:](Ƚ)Q20d0/˨8X}!B͋M%O+)Wrͭw;ЄyVNnRZr-$"D(.̗Z]'!FFSLJCD2O8zqC=:1,-:c?] .|CюprBh2(x f.fmtTpJPw08^Υ6 & \2CiC洁qc?_["1՘9^ ;%~q1 1sDع{{:`(%Uw`YV5aI{ ots|ڞH(U|,ZIw- rz7seY4Fgvl8q,((X-tr!;=9% ~Pl|eڊiG01]+,]W bzmDӓ/##fş0Xhݫ&Ns+ڎNlKO%uWaN\fCcWd&/,ven@]dQy ,'Zn+M0wF/TZ_ydEm}=- Z PE-""rz0{S Tq٠xIo4 xGiX8BX3|>C?7!zSr:!O *as5vjA{JfݾʹO>eYf.٫+%ooFcG'' Zyxo/> Ta' 0\~iGa0zNuM=&bErIٲB\Z?/RT/6;;w)lz >N^a3& %1e\ߗLVI khx'O ;9Zx#ɹh6؍3~px|$L@DD+&(Z?A+tH/"j3 c%ٯ~s ~ GkS : ;*0]=#A)`OC#b_:BBΰNˀ頾/T`4(XGEiPgکUA#{HI53=5 R0v|jS"+k47N. N^Ll%^Ɔ%zp%xx Hvsz*:3 ]fff~>B5?XȈ[|x/0Gs$b?Jq55۰7 X<^R٥ϻ9qރ?P<53?Lzėƌ V_+?q )>z2꬇/0":tS83Kb{Oq3WgYF\\ݺgU"TIIess5rxߚpyRoƼZwbc߾=Y:`ZV`ur}@79HIsWJFyz@OA\fnߎ;p2K9^]](wFX:ǡٷř|>9^Q"GRHO:I;4N?Ct];QPZ"7Đ,z+-6 UjdTt[[[AkT$\8y;.Ԫ2I,1W*@Br^tKbڨ˷4;Ov)TX2%$dųqo񑇇GtQ0u]QW\ca`;f im.WVCuXd(18Ǻ8%)g&N1htY@NopNe7iV@'Hw B.K]gM8CXcoJw6~h:*a\ p=M[ADм8Pz,Q./lpXx K(wHI*Z𣕎%R3z`A~CKX0>(ATˁ ޚ5K61{P`neGͭNI3.%(唚w_꛻PñU<>[n $[~j/G\ [TRBP}'|2lʴ]D>M2tt1V2ԍ2_A錃\>߉۔31*k=֎毥ͪڍ-S< 61==='V3jRylLjG@vL-;q4ˑxv3T/1 e1pE;Qx/~is%(t kn1ȸ쌤'FQ`,H>ay-yI!U[*bdLO/0'`1vWO&W?Ɩyą?%|klɭÁV7gڳ~H$~f"/Ck`х?XVKkq/L)whQS~cM*H=ߪZiP͖PsH;]w lVRjtlX,P2f~a/>s/;|rWa n5H H o)2> 8ξ${zJ]kL~pmIކ~k cOK3h|_SP(mwmH }bteV;{K5cX}-wa=A/++`bU3fմ?MQ0L)Jsv\9!]\g..y6osPޛnpBǹ_k4adrK6`]>RIXLH}G96%x9D0$['urR I|:::y'*s/B9}iAiD}"8Kh4toIpڹ8M?8r8O:VH*$^Af{9F"c,q`];OOouu)݈\{NMFe4 6-ʒKoqG1@|9b~X4@`|Wgf"ޫp&%w4^UN2ْG˦W  |BHH 8m+j N +6|l2@$һ)I{,K(bKȎ?W3p R=rSeq]BOv.c4 czOwZZ1ρz<\r@0INH$/8S/ 4 |Ϩ\wAt|@kn&нtHH﷤ N]\g430nIY0aE_zՕIGxT;Wl+j5?Gcq4:_Qnw'{{ g4.{0WI@ `t@z89y5PFi&m/;[|{8iA~5H`a7]ýUjb0Űw:L%pS$j] Ni9 ^{L$/MM".{I{=,qdX~˙^O*=PBt 9ծ˜}|Bhc{R+VJ7)@rANfp{&n;ʣcj~@U_h?{uW)&𨺮A~ qjХD4w7& Q?ңl]'پ?HS {I"  mWSmB q:-E&v/BjҩbŎt'k>49Z {)(wl`aXbb'5[agLr C؝]Yy݅N /lnR[)[v45 ǓU>abOfXuP@BbX:3;kyPf-*ƃ9,0(O<47O=d>68^N4m Iv|nI)pBpJuDdTsrZO}ѵI;3M73zf}eH'ۗ=6̏XjԘ51kZYp=@ɴޕy ˌ3]-\}W9ѹllXZ*dRPؠIBNo?lb;ы퇦ny9'q Nrq6/gnYYYp eTw-H)w0MGW#܊W a!iE,^&!v-'W]=%<+e /7j5Sc;J)WޥT=B$(v.H<KwzI0z T_:D}Q%~ _CMp8UUy磥#!,6F}v;^۴t SqbP.J}C8>/s뻉Jς V,՚WmZPv^lC!:N57Ҳ 󩞻G=T潤kەU% Gc\ 6m):^&SPQê0 h">_S(e,kBZP_E(>uWHmq}ŽKgOJ[`SNųw' X1B}g|g;2!_ii RD%`D_Os [n2!+Z?j% x~4 @sڇfHG(X$sƉIޱ ^s{(J*zje ͙h:Ov.TJh 9z,gfHof Uz 7yͧCc"q0K dxc# eҨ@rT?#') 7҉O36H۫* 4dيxRy_WO:͆~SINI Y 5c*5Ng*BR^CNZ)E |#s|mG =N7~x{ܪ"q cWwii4@oG枯LDw@6Fd`zEgr&`޽z2řp Y'5 \ni[yDr4`{ƒW ٥o/WaFwIb6Em`%- k-:t_1YJi*_QWoW;#y?HlH1Ռv]*8;!.k'`XA BflRȐo7M.ڝ% JD6c5ӵ{M6"/IdB Լ'k``ЭC1:A%|{l<-+cO>MH]7ZDbP:O/-2d0Қ6,:2{0楏#,Z\nOr$x%,{H[/wG g0i`ah´WS E`_V2~4QpMUԠt7ܩ@ږ5ަMŭة-,qgP2j =IPk| $" drR5{G6 4#9*SS($Sұ :vʃo׫zE pEEm8|`uߟfo"T1K*gdŏbe^gl0D5\5?əIJVSf%hI]uv$tR?T:]rIy+b_rC@ EdqF %Xo 04ƾO3WKO,1Ɣl- ;;׋nYaP*,"iONalS6P yV( Z/ZZgB=*E,7bpb@͖$kw:%o>ߴi~UϛدޕKvl!%ƨEM bh|1A 'Z6 :1BaC]!rH4ao&P,$F-VuPK H+i}r>:%bn]e<-rM"|cP2~5gfa,LL(18{u9/:UOaU$/H uԾuo {]XZ kڼ> \й2czĺ~2' c"W0=DvD+\PJhLPEK,a\ݸekw .Jt\Ǣ+BлɮÐ>+MO cMK9!Y$7g3ITO$p5UnLxAo.2Cz.<ʲ\IxW߫ '|}%c֢Frr9㹃f'JsdǏC_I=F$H Y3fRe6% /u+%{\d^ deI3a4C*P9QCOX-21i`uM 1mz<1갓zL`PwGו>eoD)?zYldR}STyCz %$&T}PHR_ !d\{]ooo/M̗L$Y@'""e*`>kePR^V+: ~܂r15 Cb1na_i$!'ȗ:BX"}o35G:;8x_Ѿ˛hJb~0i,걆C70Bo+NrbN-|75559oz3+q> )$uыT>ߋ[IjPYu~TPU%*HI|MwU٧"F+1 _>~ZGc-rdqYM="с@ǘVOS'Ut9:5_FNܱ_Kh|_|I5͋+eepw1@BU]LVs/7f_|ѕ<'qfP&1N IQY?/3#v 5{qy8<҇W=uتL;_I@d6ޓ)6G S*lЗc jApa_#;סI"\ڌ EZ6*4)Rh YRTOM7fCſkǟYוҪ|x[q'Mʪh97DZGv[S UV `]dkqfYAwِ2Dz,l /:[v*c\|ɧ?>9Gd;t-cL8SB:(ol0P)7gH.āe)BN1I>aaz$?.L 8:y/V!}2[_dvObK'0kNMNXկ*(5^jMS/Q|Nu 5JH,;/&+tΝ'eh9Oˉ !d'\U y醬(tIm&ri'1Ȋ^9E f1}#ps(V,CraՑRY8s}l>%Xl{GQ5)#/.Y(I]6!rlr# %HH}qqk\T"Lӭl5]֑k ly6 ք;yT͝@Q] y{Dhn͆H4Z,-t`wƎ Ĺȋh;?,q^Հ.O1~EŸN/\l-BSBڪQY/tDrd{wVA5m,9g\ۗ.o,V䕗sfاuHbrn7qMaQU3c]?ix=mBS{/ns>[HRTRXzܰ׌=Ԍ|Է-:^znUb [oL~gۋ'heW-62vâG7H/R~^'Ow(bbW.Pa h1i@ɱɋXicc eF|љ f DرրAV~ '̾HS\v@ECYen*աfH\]XXDZ0{/"P+I)J"rv#Oo,jWV krdSS 99_ڃ@>:* TD<|5 {ķm`I\ y{4x&m.TI7|R\;!ˊᤋU0;pR,~}XKj@*{%49fmo>h;_7fg~u::ᓓSj>:t?'=RU@g/H>'3#'D(kǃgr!lpVYѵ%"_3#@CFIbTԴWarq1/Z  Xdi}ԴiPm~ʖn"i}&Ġ!z[;K?j 1kӧO;'ޝh8kdKrFe&E0AIil.۰Oxo ?|{ϞO 3|/ˡ.f);ȣ zUz jn9h6;>q$Yċ+U hc7rk wk1ƤNJMc҃RfEM1[|RH ̏㳮" [cF;B$Ep/&N8Oq-dPQL|{:=/o# Cώ%JG䠂7r2b@Gb8{'AǶ"!!.i,^`{d}S]_vu0Y^yd໘E`$sqMgxT@8=L2c)kMdsss@u[dFb^tR /dd5?%'p(IK6KҦPZ )JY;;J5i/gv2h& X}Iv5̤hP,Ҁ#RF5I5EAIqqyFe))y li W?sD# "0/d)W{;{gI(y͓\"|g>8yEkc222y7 C`^-ҩ[ņ2]8f}#'*`kgrAiȈKMɕ{W(sK0Գ[eه)=z;A2ff.ESO 2gOz>E`ܗ,M߬W0d7eɶ8|w6"J4DQ6 $#چx&4ڗBTDG&(sg?!Ix)q@|  ݬ,DUEc9>eׁuh(a^J w9z, nQ>}mGI|#8rϕS wؑ_c3zZ,tPA8YIBeo”B:KD5?]ɩ %P{Ė0I_zD*F,a힪'`{VZ B<,"}|*#Ľu]CqGP-xTAOVhj+Zb=E1YgۂڵVHP1jRif *۱c=ra#2Q`Ɏnp^sg䝔Te*8vNr[SB/$A0Fd+FirU|">.x*>k'inc)`^٦q 3ޗ@.&F>kZuL9Z!٭W~-g4?Xn$Mh+0xб)Z  L7kauGlXlB0jTB \t/eXlXk9U'dl lnMi r?IcR:Y}/~}o`tdƜ~q!Rc]7i8PU>3:<ߞuۋcz1dC^;Aw C~[ 惜206>-`/yI.ϽLP+Q{-$QE4$McA7}"D6Kw wY>`ڼ:rճY;wpWXsSNߓкBpRq고1$+.ņ6aMP:w58lFjCb{|GGIxHiR ȥ{b%xI 5+6#5xБ2Q>(>0 zACHKɿ< ߼Gѭ33t7?Pxdu=$X6_ n=!94wt}bkHoZWCG 1_ZN;O]8Mh=dT~9eF!!X%~-r"B"6yn#z5,?'Z"fUaNWibRRa ѭ2,?/Xjo ܩDZmmYLwX5esox ZSjl6p/۳QO\y<Pu 씀Zt>;< R@*T=ZmkUAF⟨ :n2@ 8͂?K{z&&%O*gtLh-ޱxeslyZcH;x;$cB2mҡ)7W/L흝{'Jƾ8}$ =>녺RDL]T8j7n`|{~{60鑭 V PZwp.7zh"1qϼ2Yڲq{ReW!m~5oDb dVYo)GtdBN{en$kȓ-qoQJPdxwA N[%TZG@ڑ,nG%{BDڊoSȺ.$ogk9ܛt[oV%->(/֞'.zBfq0<2ֶJGMަ_ b˅y,= Vx KJJ *qpfSQa}-Scпv1KHGdǁakh2E[eHsemxVR.%ΠGW@Uu]  JwHt#J HA$Dn[[@KD@:~r=ךs\¸v }D| )~J6?6^dž%I]m_`2Q6{;&h<BY3D|T@Ik{x_ Z&X"T@GDg=#˙`L  ҉icpP"RWN2>rnyJWÌa˦? rD]f7))!;fJ"J2 ή|nm3aQ6aRHJySt>lֱ muaUus%!eJSU~0GRܴ(q"q{u)ڈC+&1z9R=̕'Ydc$u!0֛׼PQŏq"^uj.Ye׎dF5b"e.pb4tt Ȗ + 1r;_zZqMr)e昧wvt~:H|%gxD!_X/&8:==])qHtHK߅=9:Dr=YC1Rmu8CW ^߄d?~;ݏ&T;^ /fTT# OaD{AwHQQQ ez1^]q QV*K yI>sZa /L!YH{"6#:b/`2Bj[@.\Y,`gH9I:n܏r|&Xa@bV6-mĎ&*}Frca|Ĥ yw2<&Ԁx 5)ժlZ /I8F֬hLREo~Ҭ4틠6:\WMiz]ۖ5ݜni?%-<&=!\hy&q{@YۡLIW`[$E({1'avI޳^:%I.EXwBLw^JJC~|.O^<Њ$b ,ߴە^\δMKKq@ͫ-z+m4#3/7"w(?b$:#cUZZoeW:la?+*"Ok[V*Pl" ~JPSPmf_tRk%a;M ?&QZ QXrR/F˸`, ~''tj/jS{Z}S϶濛>W͡W1UHHHW!/yFX: /LGDD|).GKScyC Я_uQi}>8h;:1' RXH다LKZCý( ;Y3ǎqU(QуRz t4=MQ;p ͙-ynr^ ڻ`9 Di.ebj;Rzzݟ0Gݶi] J[jjmFьt N_q ?kfdlc~Li~qb6ktLuYVyK]P|;fITFÿ=g@u }-w:ijrȦƅn!\\ϭhrzx9()H*2XNz|x/Sy>n 3wRްK/^]+,,wtl-.eK(sݣĝk^c# ; Y}O[ybiֺ'/L6M p]_0ՙ-z})+":1 C*Bnԯ ٢HŎsr ^n{N"DA5|V(Sl(w-$QQr0M>ؼ>!d>pnPwvp1&鎡q&=FE2/"n(h U{GI]Rܪo/7?4q9U*+ًS5ƏkU5֊¿h[,1'("&&^ nm]Ϟz"ߚ8W݂'6peG-! [p)YW-;.DUTj;>B>UMpt_ڠ9_.9 q%$oV $~3!n੮y1aÕv}Iel˔Q׊|%䑹6+ƿ!2Pf} O^8,NuSht:8/S q$sGct10 kaaq>;0o߄1 jh$#ZTO8onp-W%4ܒJcǞ1HEt*}b %Sx 2Y &c v*7z0Ɯ4[ C7JIX >f!Z;-ojmc0=v}#dO^M󑿕վYWACZ! FP|) |dbn-m9ޞ"Y/ˆ,A!k\)VܷRܕK;^Tq5$|[8G˗{cG[_DW$v蜡98kez_~OO>STFDLCot^xzѨ'&PI22Bw &.bNLs:Fet->@4DHS w*0|ƖRRdIpq@+TPŰCcmNl(^ Z>zFO/T)凳ΰ3>3;JlGC^~dб`"Cr+UԂwQ5Hks m96hk?\ɧi1 T!I\4џ,6T:{ Y(z\FPllLX䌀Q|t TVKQQȗ~9aWfM&(.n?%G_==6ģoA ~J>Z)Y+-d]*E [ܾY/!]<a;?M+7~B 8} ,>OweϟRqUXv޵ӄ?Msu{ 'S `7>X~LU:aY@mZ7PW=ZfU-"j %R210n\ޭ M$:8̀b=:zfh؅T01ۣ֪ˁa0M+iB9*JNf­rUc7S ߳~߭e1܀k5"muuقria01\\lx^cbAchwO0=VȠZ!G-{ׅzu`MKǮ===p6iu  UϪ2z1ҿR~pCF^N `;h W;j*Î3~;oc|=\gF@kYMY6Vrےj.6-Q#FF4(5c23lYmc6FR>Ǝw7(ӎH̒$2ޯN/NRB9f.ugŁVYm2l H=7DShCF+2*4 DL.[j_Lܸ [`XY E_v$\Ya~C1\ɟEO{<f[5V#P{M]ʺ[Z:&++0 kO 7eN ;}txx8.KjOߨ&9ӬVP*0 kQnn;QHwG||踸p(ڕ2Y{Zې"bT*s*;:u6#:C彽Ċ,j#sQT(B*}'SvOfẉрuE0'JNаȘɈȪf~-nQ,+d-\>L,hH>1ycT#%7}Q'r@zm?a=/*^^)MT̾FBb ދt<#G|W@?y^XNOus-2@/!1 ~x7 \Akk#G^t36tބ?+zq7؉C vmB'2}kyP2^%lG'щL'30d } X7Ibhskyą"?ZLa]l2/2/AKh3h>vxv݀^l$KH enLh schg.غO0 &g= ῌ4['+'ccc‹644|&[+0 NpVeQ? f'o1EZ~8-(.[kClߴ'$v4_8:* S\Ք 6^˲$g:ţWcbاsz.%ڶ|{\м˭OuWݟ/ ةe24Z{@v*y3kv?qe֣=kI &>|1DaFUҀn[-KO pk LNM\=9=3dVYF[S:/6j߹q0_QS}@JP^̣5s *慠-Dz(#qd 0"TZdV:-M[+Z'm4Å1sa^|949En@Sf[}wifB[+E>( ⲫ̇ S\erssDmbjxh!^gK4\Ng'[#HwsJ[1gA9eĿ7Gh5פ%6u9~x<_>OӚc,*?gDV \lֆpvڣ(]Ÿ?bO jrl}7=^|B[鶣4g:ӑ qpyvQ+RPV&Zս ڊyIk"[4g ѵvy,* W#P&ʮq-/ae|χUIBo,N< FL|'u5 0WM- (7:L2MҥbP@sij4`1q՟CG_`.*d$3ैqδd~[Z*`hEpG4gbQE|Y3 Sf'Mkc z$@dY~Wp&G-Z@'axعu Ǟb;+waY z3QɻmwbABJIKuuVO0i%.us@_y{}#&dyO=;3pW'VbB+"@QyxnUan P7}e4.Ce-·U`KYM< Ժo*&;,]OuT4?5M04%; hzWsORxC |Lz8hH 0& 4*jXvtMe jYIn> kʁi&;M,ƍDubxg7pǴk>mN>oYTaLN3Y|mEB,ŭm%=AJPP\~'? vCE "޲e&򅵲3<qorrx_GZ.K΍wTkR*-_y [0\0o@~]녒ዢ9AOX Fkd2F_Y#R`!MgׁxR̯:&{LTZ,/ZGz=z,UM̸Vf`[vV-i+ **rNz?NUs6ܴIiN~t A$9^N Hh>_g"(Ǘerrrg]W0'UIu+&lxѱTyy온`"҃jVTȯ6C[u۸Z4gI344S#Zw#4`d(0N* XkGRNNOgWT?ȎC'M>c5mb急Jd3@ҭ0F!J4^p (e,:-Bֱ"5逴46REZwM p>E< .c``zͦvJמR3ǀHzkoYlP}fg}S *.gn~ެ益f,ϳ2ufwB.~ $,J^܅%0y}~H&`yfםRaduc)d~Oߢbx !X`zE,J}1󸦫qJ "km+n5Any`F`_ηg^ʜIKC_?dx"Kb!0OLܵ8zXTKE$ |r N `󳳇<~*3.aݪ+ƿ5 ,BeiD.,,TPU(,Ap@pS/vIc>veccȖ̘/y쓈߫-~^V5 !AnE-9"-`3]lf7hwqCL۰`k=/$3;V#LgYrE|сK3%"#fZXiFo CeMY #g)]b%XQ#J##;=r\"3`ǢaS'R;8 pI敔[17g$XOBUgȃ s>rh>[3l~4po:\ /1߮Fc֓bXEO.hZ4\OP*7%+(+5+gd}AsܤW7Rv2[!Y8mi/ҶO).jo: ²fb;EFՅp[@.q TMk :Z9emqqmwPgM|1~P܉o[ -h"7HZ;|pudP־1sA}х=`M9)j̎@K8r2rszAط IIg,pklU/'{on ōApgqܐR~]V`:Ay9K2Qc)aǮ2)9i(yo*&e]cX~T+ƂGIT]>LR43I3Ϣ[nY?Τf7lx(n|mAI'Nǡx^&َsA +4ߨ&'>87x_qΉG>wh^pvCGQOgM~|F۾}O._Lچ5 /3߶$4-`tLX&5u/{~ْv }J)WᵯZW\5euDIn~4 l%T G .5;UR!F; nkL} `dR,E˜ݗ3NI<欻?P&@S`Fo+]{fffzL ?o\^0 r.固roWs<'Iw׻ʂ_PSȱbquU饤x*2 ̃Rm9u|w; ~ P/N)1?{q^U<AIR+@hwP\_af\Ƀwl ;?K#&b#=#Qq)wq#:*[G$6靃pFJBXG䚝gwyYzVŤ)S?Ln ԏ^7s^Mlŭ=Ǧ5 ʾO?{ٌ53#DY Z.*etFsۜwJyfVJ ~(ʨê%vPbvwB6b63섒ynVp{ݔxΜ D c7bFN@b zIiY9Ėm^:nr=c:l%&L9G{:GHD=ۈS^eNe| qҨziNZ6e+Sza5Um>kcbiWy[qI+2}*f6d4ӼĮϟ,"e GPͥ!ds9vY+ ,/1Պ.)lNj:z:qD'Md^>g.v ~tIQF4wW+*h(y?7םAy xQ9NOVFirƯblsmt>^VV*՜X07on2/}fNci 6Y%O$2Q e=y 1k%Ļal,eNBTqSOFID ~3wlZIJF[#=(WFyzKxk&^ 63Ħϕrkj5هh#i BFl,*mNx֙E]xҀ{l`VS.N,l^m%yj_AѦјC3E2Vf8Ah͖H+*VR"*D\-1y#|cb_a'n^<3FIhPk--iаY(fa7aʛr/2|AhYuv{rYi,EDj M0%>wA2|+{_##J'WѬ9Ef.HqXW/5Cɼ#"޳BPAb#Ft+;7/B3{Mci?,defSh i<ʵ=\qh7A`(r9AGE0V#ɝjijo:n!I;%67.L/49=.o|rx~~n?ViQ_#9-c,Uk>3B*& (δ999aʊw̟>E鰘aaVVS&==|@Eޮ()+?{ܯQ7;vOL6D IxcZNe嵐H !iכq 4o666肿~ 4 M, zd 9*24TS **P|;xb*5wbDpaNCy7u8|0R:t1aG *8 n/6bw\ &d .P~/;vL5ʇdIf4[$jqenϣ𘏉b%^m)29~2/qyXxv"w&XhX<10Ib[[vMB=~zݔs<"G4bd3F9aM۵އ;'Q5.3 E _gJj5X5|mis߶-$3N+Znr䑛EyZ8?q]粷g B&*855yyNFu LA ^XyM\lt􎛍}ltؓS`_ɡ]t(Xxsgs)P &&&8%xhMe &򻳳)`S ,1rg;6"%paZE#ˬSv9Xdp;w8?0]Y-}66l+h7[/js6VX#p,)*02Jmp~q +BЕ-85rDV&lbLZ]5`o 0@d}cg;L-ܧ-7?jRm]W!JMx  =5$mVqo_7 ܀|` ٵ3S w[Za酧. lnd)'ҞK_@Xxmℵ N#Ptr[ׯ?a?X8hq C.RCژ& H(f)>B3| . O ' 0>ھciXU S go6g*QKٵC]Fϧ1ۆ}]+]mo9{of7WX.C/qHч;_c,}?2c\jؤ]5~_7Ϡ/7Q+eƦR<_ة~"ƨ{Bw;8 Ed򹦬,[ڪS=V=+DL\Rntz:pcfro/kU4 4濫]潹+Ox of Ǯa_ov˟dC|/E`&2lyI!LDKK}_-C+us 2 XbU^/n6#w`s˒n0M@:ٝAu^&#]n:L}~$?T5+KSPvcpuVΎS@rKIﷄx ^jV'Pŗ]BX'y{1"⴩]Oyc҉bni9 < m]V.c1nƎ.umu9$xZ,^'z#] q>pD֍88lɇ%I+b`4F Jnb4`* dwY`t^KfdU &=:ͺEmؙp,UV=',$$$H\ᰇ/_[>lAK3's(R/$B^rEl,5?0] =<eS+~,wy @ڟD/1QFiLϚٕnmWt4{x; EZ\|a%3:7`D-a0xb7xAvP7@-X#[zzOJ3mvM|~- cÙ gThkLpmGNU[UDCWrHZzJrcFÃQLd}Fî*-T<~ L|bc~9jX@T<\R  5mR 횯D8 v$gnh & g'~#} i"1?x%ץg×,cj8s<)1h+C^#SI*[d4OX+b4)?[(F2#?˔˻ 9:95,kA]3h#L[K {" ϼI'w 5SVZ::Ǐ) ޓ68`KA{Ĵ |ivKod7V9"`=<@i_cˎH7ȃ8΁ lO@w1=trrj̽C5}ÌHi >䋹|x|{bԑ I8;8N)&hEqB4Si ksZtFٳJOt1ڵ+3Ogv`p۟-d PkF N;o}ִ-O# w7g$O@u}qLGVVVxxrs 7B.0ޢb%CYV)tp`%+)\q? f;Q+RU'pQdc%5-ދє"%0i˝gG=%bT'8c~P΢ϟ?+߹D$ @VNP=fzBӍϞ{ &ncw4X>4DHxt vBBj=et3 )͹$=FJ@z?B$(XWgg84l-w @r_K;\,gPTPUyve899y`ϵ d鳒]]anP*0TYY9)㐲=y=i&:!uYl!08綎goPNY.wq [5C:snKIyHvRͧaDojixɿ$\HFxظFgy[`\zsI7[`?6;A ;d/q>uw[Vg}J2Վ_HW=C{rp62Zg\)T)Xͩb Qo2^px€T$.(+qTzHt{b6݄;Bb|(O/F|^ڮ#l%%%"Bjfi";qq}}3tsj{|%dLa*$.͕hv?VRQFp "4>oeO|Chnaabj&; { $5ǧlLFڴ$I9usf| *+y'gffmxrҥ =Ҋ{Qi;i~9!r?q7'nbL0UWWG|Y?„RN3YcqcaNe^3jHϡ&2rQ>Ⱦw"h%dٿ|Y(/x= NN&4B(r `; {JdᘻU(Xg4I33dddOV K} ⩐pJa }}o=DYc)D#U|fѱy[nwfb<<Y^Cԗ:>S,hT3\o%5k)mZi1>X͞X4wCCUv|d .vZqS Szܘ ȷ-^Bf4̦I`ش"7,Bxu`񢜎61\ ̺b@^C oB=0=nR$MU^n㈝Kvænb:؋LXO`666xN1|{:J?u!ED*n84CN~QףSwRODG6b]%C'?Ewn;LV6ӫ_p;T!((*es:(O&X(yaQ%EƏ$mEGɛ6d0m|bpJI]|zm:#ӹl8mQfYkQw؄?}37Oȱ1$4B)Vӣf 8̾vR] XNhƯ_oNp=֤{E^tˇ)q8ܵweecIս?P)zV}\ÖJ_|S#=3 '%yjqsi2| k;IѼ_FJσ,bᴲ kBO!ߩS棿 ز3O\BmfeS9 :\HBS>o)6&fN+Ӽ+T-*+AM|^K 4o 6iW;z{: >M Z,,O|' O[|n x;7SYU[p'󝊌xI|sZ45T$n(.~,&u qml 1:;N$Wg:wt>2{4|R_ֿI?F6aTX8xiva_OO?MOwk'mu߫2l0:n\ղɍ MB5u˶t]Dvn1 Px]qcڑ&b}P6Nؘ?GtttwY>sLW2TWӲx?mp/@6N *a jFy| apu|;DNKF?~ֆ"\X`'NJz1q쐀^-Q2|O%=lwLFG'g|ѕ $CCnV~PI=[}2o|q } dڈ%ͅ=K UO47 f 1n.\,,LCrV Gcy20-"{1]\@݇oI9H4x3?`RB9/yT3x r(>&kMUbݳk@|`U/t3WȰ*mm nPCrowHkFneP ќFpޫΔhbl7ѻ"}Q J>EIPnJD\ZXZZR}Mp FtN–E1D/ {1\^Gl\ݏ hy.Meԗn $hTȂ^`%TT}3SA4j#[Y|JD"!YY/Sջ/otff&t .>V"2~@)]߆˚g>Xd1ѥBBg߾}3FkX_RBU(Lsw1^edj1yC?L$kɻM刡Lin!9Z:µ;?v7%]AA3^ILH)~%`m}]<TA!v<5 <ΔjN#Ȟziț&H"5ݭUA1y" !:q޻wfXK.F6eHА|=$!ť`Zgg=}-hyyB՞ [*Ca8Xr 2 8@EO<=+eX45I>͛\b bmujN_K  s:7TύDpخ0(3amhLJMPV UPgr}D~ DVvmkkB߽ȗxVsew20ʆj_QC _r4jֈh䆣&QeسyyyWfqII׈nZ,&Gڰ**b2H c?~lTdB]] ݻqqScr++ =.^^lLnfDӚ=C= ԙ3mawG&*ĝ2SGqGE+|wS%Ŝ]РazhN MӑH9xstcdQ=8kl LY`x.+ :>EQ0g)V-x AOQl;XCGVZT‚07!n]mȉT}y'nC]]]〭"Hˤ@*mdىcc?+Cq\ŒֶDZ o(몏Z7R鯘Μ9?1ӕ"1;ӊlX$Ihɐe%tX<mՏvv,zMgv'L'}\$GVr=_% Lkzz }gBс'% S36Y ]\~noOO}JxOBSDN*\8^-\5fkWELJ#?Z --R2|kUcϕ!eP]HB<̆ѱDPuk|Wq5ן~II17\L87??OjG+;;0v8:T$]LW޺hu,bj23S:Mh8&'M1rTA) ! g04^J@p|4n^2}qël,R˟h6QHXu\:9{mՖUطwã ɵ.x ÇR~I&#ḮaHk@=AI>EQ23[H:4CwoaKԟD\ :MLN6p+Ll \Uچ׷- 6yoy96ݯJ=p6RQv|W^.A388qiH {ܕ;4{hűC sKl̲3M4{=Lztj}Ǐӽ؍"L\z@"xRڏĤPB!J<&cٓ3#2 -{FE JLX7X\Exw5Kaeww(t1_Z"Z)8\ؤ o);8ەm9,h9T_\}!plU2IL*0RZ4pJePͰ4D`5tH+ϏJz^Oa uq3L#I02bgh(r'&DLCFxt0/J[ ?`P,d!!M@'{1OfA3\2;TѶCfkw9Y{~ [=0;&&al[E7߾ju0@4a, \G؄?09AƌXQ1y`$gjkS4/IAJ0yXI){ RRR$ymx2i@5eeet.\`HR( h /ER~^uS;ՎЅ_fR$Q䱼$O@82{?w*® +9dRƩ ]58/˨]N3a]G`ZHNOH Xh=xx/\`456NKcY-c| Tכ!0]Y4Jw͖ d0PV@?~NLIg욞S|ҠYa?@"ٳ62B RW>^.I`.,Ɉ-Ȅc){~q~,兔.c&նOfA 6F22r[ϾiW޽Й/vK ۀ OK[W|6:D-#*_w{h_Q B=GlAJ KsߘxP䗦VXXTF C٤@7iWӯTNgS2$B}ڤ^O) h?}-Tt9cow7 Ul|s 'U4wٺ3477BX|{VkUt;w+ڀ#"S KCMхP6Έ.+ }NNy9}HHtP P0P-{)pxTR70? '5Jgoڀg(—ٍ/;MrͮrjX~H'lBWI臣4+} Ή>YYYx2C[ta._:U82tѱ? 93G[9toRwi;{{+e~wIT=4-^A>{dw]%ZpNdcխzuQ OO{"5Ɗ';0DbXDSt:(7-޽eZؽ=/T$M6IN!{ٱGGGq[ 2!޿cQ94 u0^@^>V^q@KQ2\\BG[;$Z_ukdz J^ᥤU~8H7:ǼS`2NӃ u敏4/_WRĻcb?}dqH]&R$A';4|9BVs.2Knb.6Ї:{J.'Fwے[jccPe{x!oDJ7#Ӥܹoֳ|~Vf>uAބwS Rj+p%*wdje.%I4 EG\}zElUky)dItX$UPw)嶊F.y%'3~jw\/}ƆYׇ8_U^KZ.ϟ 1SVD"ߙN~Oy9JD>1J(t{Ypnsv3~2Lߺeezd{Oۂtif3XhzKEfJv8NG -St''2eDHFBG>u+0 ^{aG:**Z~뿂~>t-3\B3;4;ޫ訂{QfZD`B(3\)ܵkcouQ"&w'k-Dv AS52v!ѩ>o,gsb'_h{4^]Zn{ry210B@Qso7kS N<$f)9rϪkDb/IfR"Ho(q9e"vJ'4̗ә|?H$_qibjSe5 vyh>SYj\]pː^L;ӹ·o{2MEV,cB5dln[ x^^Woa^4Am-#ٹU}q/ȹh^*V(xEH΂+uϗz]d/1 vRٗ;g9e Lߓ_fl1˚F Q> E`UG,*:J^O+K=XB֞0ߔ 2V/Bx]oV2 [TjH}{B(mV[=؆䭈d&A1xB σSo p.W.gюJ|tY+IM|Zs>F%ʿ4,XNF0c#Wņ-`i֜+ֱ&|aG^e *#K$"G:X8Cޠ0#ͼ"!IM{Q.rMFࢆ1d* ť9L&pOGmQ9mV!bt2u_3gNiIx^_7SPZSŭL cf۳N4kT3k?db}![vx/V,FSuRH47Gf~cJcu ڿ'YhꐐGq<<* xkQYrD 6$'z&dJ]B$LHI5mҘz9Ɠ #,{6U0Dhb-iz$YHkS &o[o[Validation-1.1.29/tests/fixtures/valid-image.gif000066400000000000000000020436541336766562500216200ustar00rootroot00000000000000GIF89a. ?  B +OO^^/#@#"$$"%%Q%c)c)@*'P+&.++e,&-,+e,%u-v3*v3*B3!i3!i4 145P4 f6/8.38;;>;;v<(g=3>:x>8C=}4-͓t^/XeC-vֽLK2D!̆4"FgСYQNX(0# R&pè˟O}>fX$` 0 wIp`%GZpt(ZŠr\B6%0")hMbGb`V!b5c4܇^" # ns |#=F͈BnmL 8\fǝq-2"J$(8xuyJD51Xv詏ߨ} *|jadEG(VؠR DXqs!{42rI("&b6H`)hbG2vKc(,V9$EbhtX $M~HjCM .&֦yzgvQ` bKdžRȊ:zɢi2)фa੫{GͪW3gŠ@Ҍ4+02a%-#e"w6M-ޒ4&oP1\("+pmɓ l 505IFJؗ1z.r.{ d$l2(rNC3{t\!{JtF#DK+ݴ^228d,]va@q *Yol6qKCHPR_G(d1%'bʂ\`f1`ؖFb=hY݂"pW8`@dfվDQy.c! .·Q10Ys!efst3 RH -eW'p@H0 蚁Ii&!3( 4AaaE-`trpl1ΤL(d'.-}$lZwN$#F"yDNHMj)Vͦh4R&VHAR@7T';۳PS0j@8Atp姜f%!:C"ҡxkі^D#MdA'=q`G۬F!dL*SBAm4D+ iTkÛ,$ O{ڄ`ERqޢjVta4Juj2&ě(VpFg%p&,=q o)5ﮚ^JWFiMHOtba k%+=+@'a iRD?̝`X/NȰm2Yk 6 ܠ ͦ6Z!2@t5>XLpXTo}mO1!'Ho,+aW"G=Xk_lB !RthMٸ̫Fi7,7aCMbWLiRU/.Z_0lϑ sݯXY>F54da]~#@/Ac^5;0fj)0YN]X dGlYs6|0wc"۞+?[t9Sf;VM4!Dfz*Vypfӟn sGmCbQ!N ebxggMkh׺pԇ5(l 2@ZwiTKX c7ьn,9mۦ`ԎţIx3-SnкiuBl X¼w =TjSU/0!60qCt2]cwCru]nLW bĭy) cK:w !jf`fD,./}{{) .tur@P-iQhOϜtq:7&#N{\U#1 BMdpRf0}``y#p}N{G[R#VdENeG^%'Yu)yg'n)P^"U"p8cf?G0Q:  (t7aGCZCuݤ-%,[,7*[.6=7v .dU=Xw@HN0$VE,"Wӵ]NH~Gvvw6rv )7>bn͢ GRs H0p.^DzxtB:ZG}uohM,c)ƈ텂3+]Єisw:(Q<>dPw!jdGV&"0`@jqwe(a#+;@q)1"s cF\$SGzcm sHGzz8Zט3Zy"HXx)&xL}f<3eT9'#Hb$!f;teB3紂7'9b y]h#?V9/c^.b-%@ 2C㒳A9cb 4'VJI@Hnr!n##U{S g"vD~DsT)֎ФT.xv8354Xpo)Xu*w3kUUqrv@04}bjD0c Se#z$&(PdY%,IK %vh `=?9XzW jT2:Ś 6> iz2 oQI蛫‚3YBmIˆ W!QӗNXUp>Н%[ӅlY4)2)#g;pDTb G>P"g0 &@wqX\WXs-"O1"b@CvI*;0h$'5Mo0ȂL%voǞtDI`x>Z1%dkYk'@6JZaMȋVh۩w}k*'DG\G.2$YgsAl% %fsjY`e7bpWpQeRQWf#̢\EK=Ũ!|Y@~ƎLN*E3 Pi*Rv5PLkڵtuk@V@YBǔ0#Y~uMc\gWƊ/BaiB F/  uQ00'íag R 5$X@@Oخc~$q΢ʵ:aXgN pS +[XZW£)j&53"4N|#pDү?] *>P)6 +1y9Gidž0B `ٳ?kj6И@ ᴲ H pX+qQZ7`ӨmtMivwK5H4Jvѷ\PrZ<d##I*%B+@J6pW۶ P^(?{t#8c6@!Z6<íT&봟2WM ˭c4^1$1Be )p6.j1|W:=[ƩOU[ p H)`_^xy3 u*vrM]nw)-wIPŐ|l1b#s2_s5i8yXp:tܪ"Զ0*iG ༰5YvH#@0'Vđ2zr#E`WP̢ttkY<2&ˑbO&ĐV œxߖT;J0c>%|qmHq$@+SiQvV3)_PHZ}bȊއ "㗠&ҭ`&"ra@^AP@gU'a(IMC5Ur+ Q8ӣ]ξ1 CŐq虫箵}3O#7N%}LU ,NF!Dp^!軨]ВϤ@$rb @k-vsH f*!!޹0?q[!!~r. "='.ߺu|X)qpƩ둘Rv'W]KL !3]I]5O: Lxx^Ap necspX"8 z+aF[2?¿EWA͹[d U8@v!)`?2iزE&0O&}/hȓ\Q${?̰@f>X}E?kIJ?MҩH?V -wWDkX<1mD,R]gfy,2"b&0.¢ A mn^iV0)@$8 <C D B8pd@ -`!5-#R$1jԖCǓ!"! 5wXfN8pGPE2BTRM2Kl1>@~SNkXi-> ^1bĎ5a)`… +F=FlϲbX5V`8qb&b,_Rv,ElA$-;d]ca4->rD 9}4B .lB )+081D.2MiևbB9j Mu$75X|@0pa  (2d VJ:IX%dl '0 '"(N\ġPT+l0e+ǰ(Sm50k-elad 0vЋ/-V;L:1,'T;m6R`425l(G b0r7478XE9s49&r8ذ&+XpG',=?`"2(kBABrp$TWV.0# mO$ӱYVdQ*W<*)FcBK(gw,p "S#R҆ Z7(Jì\̊ RrrMF#a|Q38؂ĸN;1b 8渄VUI[eĐ&,l.5ê9SMG@ R@!dU$p_ [4δ̉q21jتed$cdXvwzv%Mrj->Β7M5_|>0ꊫ&LK&6 (8 '8xY+vP5Gd lK5!:"&-χ8z)kN 2"$jU^t^cldS-QɊIxӛ#jÃFK2’d#XydC8ʩ } @tHg&p/X.E))/8l%4Iheb Z:= j1YOv3,Q Xϩw#`ayVΰ֐-#;d/#m%'Z$d; SŠm#j!fu%b+UA) 8B%M`4!v=h MuvO$̰2bCޠ8D,A_H,44)03@+NDʒD%}('["c1bsgAhb|ީ@>]td$U2kZDO2Be*h*ZOdIX.qdtҗ$/e7 ?A` *MqBT.˨C\MoP: rHr^(Hy`x> }ĊM?Ɖ2 ,^gF= \$ʜM7ڋѐ:4N|@@PY+@"6ͤE^%,l i\ՔE%ՙNYk T%/.0/XЈj+Yc-As`j1V12HynsɮbZdAD$Na3O5QAlX0nɇ4 XLhF֤} "ǣ&CĢ<TJSvjի#!kU#ˊc WbN 6PSBu n:{҃#Vil0?lqOHĜybi8i+[t߹|K)_ t|*Y`iK@[rS $_$#>WNx#z_E{H\}u8K(#D/9dy8}C!%2;C1ю<:~Pr/ z"IQ0L)L_J=]0P:+`:,2@hh9I1@`99,MK Y;#c.1I6aJ ,#H7!70@"Gmĺ`?x@"0  P-rʅ 18 h.٧8(ǒ G&P{J 9 KSK##I:y dL!|bk6FR``SC(:= <Gr)X@w+ AO||LHщ$n/|#E$U%>` 4tX"ȸ$Xr@9]Hwc9r04[tSZ`F`b E SSO`O:ʸ`!R@V48F@P 䀣YƸPfK:Ti4##`Gwd+LD[B| Mwq"uV"mMeH"=M#e%V.no}^q%rWͬs98RX9#"`lx6yPN8KcPSy?6}7]8C[ХKȋ-S,,It %Y6 C .Ao5h46΀8|:gC @10޸KR81@CqvbRZYU4ot8(89hQLb-2Dž/{L+DMgEmBVsۼY۾[^h[腁$ we!;r8jK 8'j |\j8d?|HdcoT[)V)Aʁ@(rhZ?hYψHuډ v# uF[7Tc6>)̃TgDVO>eBr \{\f]MmdABWDFd'[ 䀃&>ÁЅ 9&NF tcw&?Sx0e]9wDwev [.H(/ &p 'bY}&.I݉bؒ8yB P;8k&bf -օ.Sc<_| %CznV~V4a}׻kݾf6aEV}ߴ׬B6^TPx$ 4 UQC)|B`,8FYX16@~ ^ݫЎe5bD8~<ۄ g={lVgn@r]^ HwIwqG . GV|PծIO7ix[<^(.C+2x$,Xt4dZTG@meC_7s!WSwHi]wLnp^ ݂F08S(,n x(~ 8l1KMAFsmޫae-V@B ?`S8?S[S7&rGt"Wust+4pMmPoTmfEls5x$ VžZouuSkoquvwqd8sQvSw =+.8?<^rb K66k^srH0xZrn.w 5sYd1=Yb bCv{kV~6Ӵ[+putxևy׷}Y}'.kWQ҃tvX]HCO8Ap7Gp=QGagtq]LxW҄^A8rOz=038iG`n9C4]2ǐ& Դ&`hb0b4±cOX0'H0Fƌ;FDLG8s脳υeZ>k.jjK.T !3g= bJ*t;,ڴj:k댗[^rΪkܳΝի,S&|“1nȓ’'l2w7۝4nFVVfvXTHq AB#Gz H3g}7rQO( 1$Vm83H`)y= >hP8PM%^rPC"1#}@D)@VbLxO>)e' l MphE;pAPXXS,S]:رS*A{$^}X ZЭŖ[W/ify=g~uKf8b&m٦'aٙ\hq#8֚kD|C 5? wp\4Ëf$:Lz.fA7jtN# hȼ"xds3-y):PB .蠄z}J1\HCBCDDVA!1 "h$9DV`<H(#M. IF{$90C̓SN[piiӅa9ٛ%|2kN2-`tR)͒Wh;sa1|}8zGpk z 9AB 2Ȝ'Zj塢\aJZ3'X#7<+% 'pn`ѵAuGD48 NpH҉?yNز%X _oe/P̨h3mV/,!'a2d)[=% )22uDu>>C'F z<\,S , fOԎ%*82qV)h =@MjKH5%a4a$`d'9`$sW|/D%&:h%n-zƆ7a .{#w^ܢԑzL&?6"n2$c G(, HI:|D\ie1*Lq|(%5tA G'zcb0, (EgvZu9`jt]I>x8o3*gCF|CpD>5?|psDw Fs\d.+`ҩR91G(,,j,o~#5pH>TX"GβҒ$D _5J&TY%sS<\ӃsV#r7\0!k gģrjb?O~.򳇢i.w8 14n *$C"k0v;n VEӴ]w"aPhV@H 97TI#sr\4œΝ{: &Mh,JX+HJK3y ipZhŒLG#kߡԨ;kO6FT.*W / CH,7BU x} nWb yxTΌ3ms[趟A p܉@P q7V#oy;c AՈ9l 5dH4;9^Lr!Ӛ}m\8惂bPً_Tꌰyh~G THns#*ܝɱKXBtv~tC/8N/p,) {4i$TX'Ы i@@ a7]w~5s50ŋ#tmpS>q1 \ H.(K@pRV!G/{{}Ƃp `B d0 ``p0>//"(BA2Y )V5,aaqWwĈNiPln6@oΫa I؞9ᜑA5Y@~%pѕRy,W#=%˜#p}'h,q p]ytկX8* Ρ)HZ}8HGuT^9,Uì@d$ -Ap^,\8 8 M 8L\XܓmS8!]_!`4)DUi؂H}__C&n5pa]5\BkqH49!Ƒ]ZqCC- QjX8E#xN|eA1ƎttX-dCGW'fC:9P+4Ad$ -ge@"O&YeM NviYAY V}B(<((ڂd ҥj28RDm_Pc\V?c D=(C.dZTPLT.d1\J^*@xS= FE]Rcʜ$H)NAqdf<# |L'GkN\MbmBJmd 8&oʃQ A5M4u 9v,0 wZigzЭa\q%D:.4ES(xy?áL (jX]ă mVC$Ĵ8kPTH%܎9I(jYXԡDǬX|y9ء%|Cm&Jdb6%l8UH]ҽLr|`dDFKGHF}MNԖn֫4,CԎ"8jn?C.qtd05; 0pq䦐pAIE܏qAP˞/8 :l(Ӡw)^.D#hBQD> pt@G68! ʩP7C,\WL"Z/ ]*@ d a^ܰxs0 H'x>ݡ :@<#T^1R:E,8nE PQ "N^FK`<߇RtqoLuP'ug:4ju284Jzs.N:;jz79;Q-2,Yp0q9"ԽDRė)˲(&pՙXio\rʀ,u05a\QQ&8&,y4=KWL5)$ !@MƁ4+7kgӄKь; ':#Y Uae6H](>7o繞YC)DE8ߊГhHr4<1{t:Cw:2F80EP8?߃Q,q.g,7V(~*} TUgA \uͦiWot;@ X*- l1ּ&!^nYB< ةlNY%Xp̀ U x9FzvH 8j (j^ 6 <럀9Y9/.@fT+XK8\Y~+PlsEAFOF0t{E:u܃0B:a_ /x}8 .C(JgJTw:XO1QpB:&{Ͷc`r; K*FYCM,4¼$B(v'@F6؁PL*\C|_Xh輔 ဠgB\9P@Z9w j-܊gܬ_-ӹy"S`"Σ.C$`h X1GF@Xg 1kQPґ#.e- ;yޥ߻wŲP >lqL2U|G.IŲbDf٨!gȐ Q ='O=2Ѥ1c<1.8pD޻V|Xq ,t$2)Ttmc.Ҕ.jE LE\R}5YKSs'OoˀźgF6kK#lj8|ذ!#8(JAa ?^"ERq6`Ȁ@`=(pTMVd#tEB cPBi&\K1 "h jEeEZJG1:Yj"іQBl"ǫAҹ MBKb̉r';&`*Z #\$4I*j$'$I!g=N9%!(50Bp LFM, `t!BbX!E씧ЬĊ"HACX1R"Wa`l)͐iE78|U[9qqȀ fA f 8#SГ@Fa(nO 9MWհ!B 3ܘP6[M8>QNd hyƆ@dDCeXCG0Q`Ip㈕ eȩ$GDrDMj8bJe0숥 ϙh$1)w4&u ɪKǔr`~vZcq,0s"dpH!=H a%+S@R }.am(‡|HR=!D5!A 11 m K32E'SZFh ^dfkb M$cC"pJ6')`Č 3Md%#iE"!.1B "@(LFMw ݼ⓸ՐqˢWBE0 'DjR.h A IAg`1:@AzИU*21oMD-+$lXNg`I$+Jh.aHG#@X2h'8P \/qPp Ȁ /:Btlp0r> P& 7/?`)Bn3+LFlle0!7%qF %hFDmo V0!z0' )Hb )c #Zd5ZPmm'Cxf&4)QMnɧI`iRBwľ`GObҘ$ OcT"5TS7G̪ s+C] Xy}n,C)E,&֚'-qp(G\ҡ`3мR @ @`b= \,`V_3Ue3 Єeq,d;Z>c+>(8'H=̶<2Bb"J"V2B`dF 1.j6|QVe0UB!Dx!ɒ TAj\"R*5b׀MFȃE@ DQ:Q JuT ;ܿAf52۝"g3]P<1]'.Ϊbf,4 򐽥 >s_])K8\Ay #)^1eP;~ Cy^ဌd+ ;uІp[Ғ Gb4aQjKN,3hА"{b%9R* &9%,tCVA4i_ (>AMX*Uh280\l?{ і+)`'!u܇7@u [ȓ2I#&1 U3"fDz ŗ[n^fL6=v>U Y@ nvc*˃P5/">e £D*Z @eI@i:&C.),j!)C&CId$~&%Lp)hB#Bhh$(Na&$DkiAjE% ٞ- /@ڶ rb΃|L]tJLxz1!` t @\@A4ě4FhK0fϵf~eFEndvD `*EƁx!RvO;-](ɶ Jx1YV  ur FLDWi")RG::< #cS Pf!;Q &`AP(c2d6C 'g~D*opDg bMMvF!KgƉ&dA)&Km6#բb"DPbNo"f72/$ʤNrJCXCR&jȄ*1g‘ 1!;Mv ڶ7II<~ƸjHiM" ~ 7Ġ e:앂yn 9:$9' HfH҂PzaQo!<` P 0N(,Ffd`CB$!OT Gԃeک7EE(| JՒ.ct$BJNN8$xbIƛhRZ#n1?$A&na.sf! .H -145IJ=zV> !4$CsB7 xxe"+t8;rN'H$˕H`]6%P  @n _H0 J(aBZdC`Df$D)5T4GMX +"5 ZФL@2m .aHئoH*lB'葌ÂDk$lLm nGaQ"HB̀H0_5_c d`` vaJc2#t!k,T"4bيt!!Rт <~.E.!#X!,Ih\6uȮi}.:8ywו3?2c$ ҅CP=rLAtf` c8^Q0f`SyyxEɞBd V4*Drb/L֠JՑlJhjC$oDBJ +,k"il5"D"\ O-aA@g m6 H~z~` 5?,ta C5vh^Íwgw4`MD#9 fy;:}`Y:Cv4{gHH4@f/sQ !..a'l!a 8.('6iNNY+(OZpFb hv*"*z t5D7z¶c f@\_ VtPAyEJEZm?ƈ EPD9L :N[)[N? c@ 0:G~PuBZ :iF<MPDe@B 6V~!΋G$B zO&nAm,U)@Itcm&YXOFD)LBb$B7ȭ e"Ƀ.UUtQ @R IS ;CtC4Ɖ@>!w\) !"ǥϵ;8>f 3~ O7TJtH!`SPHzj_>{}g|nk$MmkF>y1(yFD6XndE.$P>kHYYMXOeLlz&Rm  p G!&aɡ؟GhV $ `r u%` |VAJ3~CDlL ޖ͓ !}\w9\In"# 72?>+c=>$@fH |m{'v !a PFJRF4(…΁`W KM(Gl rHrꨎ}¦JNe6al1،uDB.׊o9h&37 Lx5 p"!ɗmVx@E_ & [ Vx'vu0xp#D>>pd`c7 :rϺaad[#fvd鐧|]>"ɹ@:K`BFf|MŽ> d`>:5vֈcJ+)2E.# +bĬ N5li"xIFF0Z.ݿ# 20F-[wekwA }wСҁ%jtԨ#޻lWɕ2`lY5[ȁ+!rX}#vK#iN4)ؤ1c:'3\ɣCLI2$.\̹= MƜX[n8b"eR-Xhb2bĀv)>dA 8F2d_F P e ՗H  3@B ,$Z@b$bC Jp %@B8!dBݸ - PCE.$!%Yg +%eGʓ%5a-;=X2vXa,c&{e8A)W:bK\u=PkeSԚZ`;PTg|.ߠr#]F$™b)Apl71EJAd`4r t!Ԉ!p,K!s 0pם@ " ~Ǟ8~'_7ʐx #Hp(z%.r:8j%T@BAB 9vȼA)C|cK].H&tMDB7AYB-CY+Jc~SgYdC-J 0 9P[q.Vq9 %#8fC]bq:Xua5jqCcǠ2XYqY q3 m\HkJ d|DGV )f )% w}g>8l C zހ xp.~2AA ,dB Q*kh(gȏztLgEYKZ"MD&bV}XF04DN>K GC4V%.J 5BQ'` u4m`Zei4JL( cʚȂEL*,ZrWp,.S#Yh#h[Kp)aCH0" p ܎0#؂!tBjh 5Е\\q1w R^A|#!G?˗}wyH{Z QHR6TO+@)l, -ԑLaČ$HDf7EVH&]b; F!cjl4\-}ځ`` X*xb؃6t\bv0J>l\єblci+4-F".P#A5qq#Q)rRp3q`6Cn l1!(H+H-C4b Zd#by:1~\.su/z)Q4/"k s B0V5+{; NQzXeL`$8PUӦD BW̛9әClۆf>Y6)R1big(b8X܈D:ēy~ڼ 0AaVhL\DLK ؀C6̤e؄owŰ0Oo=Vȣ:)`,bO0SpW醠L x6ț ~t۽7ȝZVY8=r_8#䱁l`{ "PP*KBXO$e K3a csTְ&8w$֛АthْI{p%*H>30&9Aq&Xaޱ5XV`Y~"vEI )F ,04+ēf­XEH1p Xmy\Ǡ,<FvDa.?ҽQ7E&R)rQpa^Ŷ(=E:`FcF@O`Wza7 Isy D{ s dC>.VKI Ar v80P=.)`e=TeE/>wI/gfV %1St Pf0:$ph dg[sAI$KD^_"OI5w4b7Վ#7CRT6+%xMpCAV``4} `pp'PH(%vV&CPAC\qxI ]Qŕ)"R`@Aa*B/O p7 :+ BF ȣJ)<@2 /"c;J_b `t W08@)c іdn) !۳0=r60he,}L%@SڤI3ɀ24g[?BX:RQ7av@%򱝼k133&Vhy2Ox`> !l. p<觢"O5z175O'@FRi`p ـ6U:`PT(RJa ɉWgPmDUa* z9 ܐjJ` U ?WIDzT١z"WD0 r ^K3k QKz0ӣx)|'#( : @0k, $4h4C[s*3=#4hf*iwMc?t]V_;A(ai`R2hr/q'#fx$7x}UB@(te iA CxPx"q  6P_}A&ҴJH7)yeaC7>8KГpmYO7 nWp Ԡ p @ Z*J $(X@0> 8`A- y"Fd!N`^ >0V6 #= !Te2`v0WvKQBj@fg1!$c1vf@![tNFB$^Bi`$BV6)6&9bi"xѩ5]~4sB7}y1M A#P&h7iqD@eL pDA 1ћ6@3$dP_Aq'Jq`)p p0 kDz9FP|2\ kWdu<ʓ{ !@) R`yb'2C 6`eq=4k Kdf SfE=Df+,Kj1|$Zk NHtDޘ\#bk 5t 8A$i`hj%B2 .e&W* ~&ODPr R`rMp'Rb0pD2 s0;v#`#^h>q&O4E'n )  Kg8 YB`:070sGf dv>ƕ@咕q DGl0>09 v6ǹ;0 ceoqVk6dKg "=gU(0L `0Z-3p13M2 4J>P5pP]H%N[)aR3i$ =!u)' `@7Mu ia4!ifD"57 *V`'1^d }0Px 0j'QuO}q_&?ff ) Fk?JU::\ #=dtA(]WdcWo =en80|N K [*R=LpBw3Z@o+P P%{,tt3F4˳65f3D\BB'4^h31'4u 'VIA9 2'JQ Zz'Pxp0'CXBb51fR_"pU6 gTal /iI0 ܐ-I p `ɡnI9tCIӘ7=`rwԺW5ZEz)=d~n0\[ c! 1p֧u7\g aw FAGiQ_uNJ'@AĜ#/]:]{zb`'O- }v &aRw ^ %R]t}0+; v ;7q'ۼ a90zc0z6p7݁P,^ #mWqu-dI4a߹`~ \Y`|L >H!;v6q~XՉ~( `g s4TBPC`=Ɓ4JR,A4u5|4}i$u7']r!5ax&a-,qc%RHip` 1& 3 pWa0 9!z2 n0ԏTBTz:V1`-F-o!C#Y;)I$.ɔ}ӥc3%tߎ(P@ )cڔ<80 Y3HaÂeUSHz6qr"1JP *|Ŋ7nc1b֬c5+dzgF2BM9FK-#4)c>a%w `B&q Ml!'!g9C`!dI d Byx"` n&~X!tC[("'lDҤtH c2tq|z %y$ @`β)ys. ,J 3Q 2؀B@3+b s`!: H3b$lUV>Κ8"Cn#W␻ `}Ï8Ĩ 4lϻP$BЖleKM vXÎ%\Ê|Pʲ5`,8fۡ ;.iYFBc;pIgј]?TtGfTrpY1 &!\ƌ0dRJbJFriuM4IYb984QS,4Rkt @+tnCe Ѳ:+F* @@a8-! 80! !V&2. 4,Kmxͷ\Շ8ݚ Fr0Ko/,󖱅l:`Kl8EN->lX&&R0Ά8|G`ruj' 'c^ 2 B<ߤ1ig4 4ıC(3P;%pI|3#p,.5Aj'pLF`#@37 +6ȝ&zYa0Gac^$z H( A >!Bg 1$ܠ p-XxP]hԘaKC6m-h9A@hbmtJQ| )؂$Ri?#XҒ(0M-TR#!:B )qQ*812zlauUZ g{AR^$mWV̂0#9Y)2X/0\e rc;!{AZ E:a Ml 4 + x5t`l` [F: [P h@@3nAb0"Dq,O)0YBL+D( 1VJ#z ?z^VXG`dk@ bE6%G/]v> HM%G.̀lcpt QS oTeիqU ^i5b-Gv$ j(saD@d{㉌lXCu=)JqW2V,y V@gzk܇,@b .݁&c2GGsڌe6g&O$p uSdWkX`5P\᠉9]F|pCO9lF5;HA.!]g,MWX*pd.`h vК!&lԫ3 .(x AB'P. \G.=Ҵᴅj(PáښVC9AhW@d( <6Ȁ+;"Ê I0ECh@T KP (3h I"q|69<̐@% Q1+VQ1yq10(i*=CRB5 ѥ,æe%#/9&X,,>-䐘 &^[҄pzᘎ0ElBg@;10ɂ ,Op@0ĹSW`OC""WӅ%$A5)%ZApcHdR6K V`]8BzF<n3 "(pQs+XɪԨ W߻ҫ=QhP$l$8htH a241 jyȆ q%PEV >|3rtpM\!Hhm,æҙS&,b30 ɂ IȁSI@ TxT Vx3!: D`o9QxgF8RPG(҅IM`3 9,,hhkHH(`Ѕ9GTXqxw^x=0 ĩe<(s樎x-moc3K[Ê,a|j.0O8ՅXt̅r( w8AWxa)LKM0}MF٤Zs2,ijc@=$L, \p=.H(AԼ#3 ِHB(2I yQbi|2@OF[= k&$Є k)%uY&T``,MOUV _[Qm% IK&逬KЅgЃG0ZQe`HȂI %Qу*RiL:Y*  h-m w# 0 Â9 ~%„B8 2:u[@=ȃ@ +[iRɀ+X3V[UfY,[2D3\}'^4'X1x (_ -]T^Xe͒ЅzݰtX|208# 8V ]H@ %&EGhR'w^N p!x+M.H ^ 8I܊e:|THB + X pyw٣ҡ`:,ZPBIպ[iHc uuȲEhP3^|I8yh,pÙ0-BRHL* O#,p$*S0u jH69Q#؃4(&=~5"*%`<3=pB kFNAjs`d BbGm$dyl"U.eTx\ޞ3[1XLc`q liVVꈞ`JVjefҐ!Vlz3S QMM%t\\|4mx1%GhCRh+vh0҈F!wP؋9uԅ ;H`@}] 5.8$f^iFd S=@jFjOUɏ6 4KGA3{SjGI`P[&O2נ:\mfj뾺18ӫ [ 3|a!bBw# 6I h3ȃ)G~o R/ ܎YR0s%pȓ4WG|  Cc8(g8n 3G0t;WG`H0(E/t6p OxtN N* Hۘ^oi p`H+AesWF5e>Ȳ,U |S XyÌпra'h?,Sp a. -M{bW!rh8ڕAWKP3ftRJ> vGxG?5iS@oiBG3xf/It8^ beJe"HR HNUc9_d$Z+XY&!#1VĈadGMvA +M|pb>vRl.%)0T,`b %c+X DϏO0$KY"4Kc$$ !JLFHEˊUX޾% 1bǨml~ L.t#N19 y2ʖ+oΞ?gΞR…@qHm=fčW84H@PHNk.P2 էO`7i/]"Ydv%Yц 22~Ĉ 'Ndp'Fl0 )H`_@4RI NhgDٱH,$ `Pa 6h$041 5s- 0bwpqIAD=ͱG .1FOD/TZf1UcZ2Xs:\1V{4rIZ\qU]y}C`-;V(>(pJf7g} *g@3(#̖lM0Y\ @qp\P*uBtawzuŖgDk8DgC>@` p }#0 ڞ'|x >찃z Juv$Fv BDʰ `IV;6F)2Pk-$0GEaX4D I\TqIHF!bl &Xf_'sQy9~ 7Q#(`1Jcemh&gvk;ԐD $z`?[`li x Z``"K?U. @0%`a'i k.'>"õTb[(61Dv /Lq)V`^@((Laѭqopȳ*c`.L=y,% APtLFց$k5r !‹ąHohce'd_dk  -''K 6 &0)<(X6T@:`A 0afZ~zrMz ? t/3 `怀p0[ݰ]wOM*x.o7*P تVKYg:2/_5O?!e.1Dr}ڳ-"AJW>t+8=D,+Y[e%Â|pƠf8Ox@ۂ@ Y@\ty x]>иc?L-FCT3La0Y1- i8ibmU LVu>_\Ny11K.^ ε?m l!È|h:_~1bϴf ;NepX,-n;kJR J* ɑwu󖑺õ$LKF׷p4Ed hp)&Xt# B-Y\H.}LѶKW9ȵGH R(}eP-4eTp@UqǬHN ( ``,A6^B )JD``Q]Gm]L  }3B+9̸ ъD˂4QAIHˊDR=} 0 dDGЈdA@ElU,KRI]D@Hq֕<$d t d=]4 A x ('I`AJ)\˵KdLR17h$0 ` >%rFPj7AU@ _R6 pЊLNp4\V:dHw.\؄M,C.PQmȆ aZO@<ʇ="T O}XL+}tfd ,)#8`#ۇ83_ 2T]~` Gૌ4[xGV^]I Xe 'Zif@E ,hQ | lsn,1 e E"ƥfv >4s }% Jx.ՠYZi`K}˻}H|ۂ=lKOYO Ihn 3 Hd؀J2)b~p@t ei %ED')a jv .#"Z$d( E@M"dg<8 p9WTAE(pd"0)\xHDX](ܑe9_#  ۀhLa΋@DaևA$ 4D_`AiDK"X8O^ ^D¦n ueAn |CTj nAR  Y, yq 1At!@0@DY,@*h1@yFPrLo{)@*@#WFpWjᮂ*D[χLV0]2" ݷP Yt(, bz< 2 DK GD^xa+Ȼ\s j|REQ dLt*lF/Pb1ujf/%}[P @@ 8Ԝ\'\@`-3O~r(#-P>VTmr/4H/TrbԲ:D&h!jTPMhX]Ÿ~d$[,یRFt[FK-=\OzE!ґ@P`5X-] a$0PCXAx ,\ d ̧_#tTR|r@X A hl| Քdu 4?b!lKj)qL8)Ȁ@зrāPB/3ůR'7p (Gā+s8pÃK3āU:_́ypA0)h]ZcxHa,HG0NK5fˑj)4#eNJr#fE8Σ:އ*Edhս遫GďxhϋS,HDH&x'fgզfWC6 '(OAr&Ftytut]`v4J2>,\xe 8A Y|ע xālL-?h{Pk8i8CxT+P=ͤF0)^*bߘVLV 5 iEmIwrSs<PZ4p 3?˳4xx_ P K^B\E,#s*-k?C;Ƀb88833Kĕ={ ]" c2+[# uc(M8^bp!igM5bĀqiDvʈ)NH 6|AdО;|4qj*&4 Κ&0i;ʀaCeaS FAHXx+}>^C >k\]+L ` .g!⃑SFr !s6!Ct@as [)b 90bˉs|sVo(9rmI|xHe  ((JpQd)I rWnA[zYo&qGwǝo&Ipg88+ee{("`&%4HK6>BH,X#+ 0,j".Rp̆J)"΂!֒ l,&ڊ1FVj&vᬤ ;`JzZ b(M+PB%8I(Ș 3@LIl1Zh :xPk\aP".Nkna;S]j$CpBĻ< ( JA>ڦB=K<TdilRȑgF =T>i% %hbe\`bph@qȘU2ɤ5k%F)2-R+x:avxJ1jP 4L&/:)+M̲+.}B !b)"|ء 2M 3Bɡ,&A-^kU]k~!]pV{3dW5 MbM/cc:]Hd2! [ `OJX(A!Wnqy蓗oct-8aXA=t}gzёA*B+2&c:N93ߠRL#;(!gkE,VHenVQR|.|JLjjZŘiIAU`D9,[k\jH͜)R88.3LZ 9i^иJIM`'P8\R2\#ȯ;twXWh'pvCr@@@ `Ф nǑ2? H*fJ̤5.C` PLBaF5h͜6(C4p0t%?dLJP"D+Z9(A+e03Id!36052rʱ 2iI98ǁKGE)YvK4bN \\),PP!,>9 4 (e X0?r.A0@!"O#A 7faW R|6B*"nzsVF $5s*jք6 hTT p@R1y)=ִvIe'I$Ѣxd d,3B \c8 0Ҵ}fت! A0lA1cpX`x$jSӬ,$( x$I .@W xkZ nb om&-P`:WHsLGcXb C20%, pHagiGWZR#ќ 3DH`6[LI՝SJ1JbI3фvH.ܤzL``NOԍ'Zjtj R2ĀYh <ᤪ:)Jco ' X`g3*g'l!8yր+8LRbHz0/`!o\`bhco-%bA$f`!on (^qhD%AfO c)V<`j9> \#zTg j FW7r{\O۬jSSS-Ju:i"& m( ò'fa BpU1*r UbL?,X[Y &ݴXmk;8% m9ۇ_j$??♒!LNYW f܁Gp9$$"6AsP"W/,foSiN瘙0@2Ԑj j5L[ژtNӅJ`\)F@).BB0CB$k$&n6`i2o&A:(UHZzȈ8` IxjsDgè"B*o@ zPF. "I )\@  *j *B z0@rG>#cH \bb`OF.bH@A @^ORKF%(Nbj%ɺbmMMJ℠fM2 .,nIN(ԆҦƢFvʅ&FÎ f t* 5F0^ T`caYTZ UH,U,FeȀ hhs附*†Q9(,HaG:2O&&R X6@&# ݣ`J ^t*2+5魼0x&P PDc 䔀6t bgv ? Aa2L! a nn$ڏEGhS%X"ю1I jF0% OdibL`(/ɢ2,V^KH2А)h%qƫ'⼮ .Xpx5n`:3f4(3hHJڢcuY 7 R& prH.J$=܃ \ [D630(`2RR%sG"bR&g&M&7NP"xg(/ȸzcL!)y@ L@Ib:~LA?%zNIIZ(41(1  A,f.F$j3/$Pq0Ol@ګJqP*NU$SH07V3Y@ B4I=5YVS9-vdÊ@&rSf+pPP3" E"+ @:PD@;=NlsR2  f~R{R>6rxR{Ү~/qz~? UY^">#̏*#HB{_ ,î"XOIFH78 jC+0(lZU<ܜ`ȴV.P%E>Ga'a\p!JhS3,J/_K8 ).QܮdVb6>f F): O#E)dtx  N6OS HR#=M&SfX`D Q\\` ,|VVk HaȠ~DW/VR%OXZmBPj#fH>s@P"Z0N  < @^|f+N@(p`g3T6cT ' \p~;{MJZ6>`RVlj X$obsm mۜ6(xSǜ^6 +H0 ;E:;;-i q[` RhV>V~)hVJ`iY~*~K`}!a@U6Vg *mnCBE1fvp,$jՆ+ Y"ȅFf2 @wajƋ(`'XŽSN! ~PT4- B4lvsrLM7TLBnfN0(@J@`!'+;G`xDR$Ѱ9{L"j 0;GvNwU<|=R{r.9iu@V@ D)egʼnxVA`  `GlfmBaP#ȅD)OB [@apv'h c"zT.VN!a &' 5,3U_ې =7'v<#|wvD(޹r (| ={Ox`3CzmB03PeaV,x|P`R)&S;Y9BFY5r? qٖm n ^v?!*^f$H%\KB#n,9-0FE^"f60+L &2@ݸʜnx6{FdI( o"2~Mu-1ڰ,=(2Ѫ8i4-7bdY &^ XL1Ώv{GZP5/,(O2*"[BMA`; d9_F&$.2` 9. 0`q< PWZ2o %{Q@Ѹu{s;vWhFh(d"sp 3b ZNdhZʅ`vzW;T9G\R]J ֯zp.mCΠ?kǠ15^Z^?`nz3%ڽ"p\ƉH&|* C) 1M^aȇa .`"̊ `crx˧__*p <(`N |` *Fާ~7 + DZ(T& `ygdvEɐX`1*3* 1c)qh:GZci-5y::`[wfo阎Scge}%Uq5 >Vi}Wt%C0R"1I6 %0cLh`)LNz^a H@}띐4pe `]y wo&5_7C+wb :eey|ESQIt t2d`X" 84h,(4Hc(I2 PE)Sɒ䇐?r#I,@i&g$ 5ڳg>P1vf`Z!2I";"Æ[;!6-"`|{)d2smKlËo#VȰD#dY -Ltp !m0 9LЁI@ $P@ '[8:{#>pX:(H`@"J%@@ 8P B !H"l†$XP `"G AP,`pd4H7R`A;P 5dABVR$zHPғ']gHLfUSN;tSOŅOS1#@wPAuVWyFXsA_ueMdhq{ٰ '`]t^d`dM&9A C!K30\ WAzpC[m6 -,~z0 IGݵ `EvVq7SNQeG_G8Ÿ :(h V`A 7!0B`I"iыQAH!y%1HFd2,@ I$E*w$S&AyA"ą#1鑥O8t7T\pqqSkaV]rv'\]%`Ff}J[;ېeEfVe9 Nl` 2snd . wl8Cm!3F:0 Ƕ, 0xmu؀U;G疻ȧ{ DS$qo(6,. Ȃ S P I| B &k2e$2H6BX ,(`I@B-D^A~B,O˃#24k؊67OC ` KL 嗷, )R!#ӡp AIp@ @Vέ:`$a J'0_&3 v:d8)>S9#ow;;k0.xɃ(<D10&| 蕬q*/$ȁ A` 1 D nQ IH0͈KLK+XAn2 > hV1`fLB p( 5=!K4% iM{ g84sC@9kZi+@ C`Q'KZނ`,Zt+Aa36HAhȯVlM& +~u!@~#ȱnpH} xDDLH%c@ )C>"BӮ  b@W6 w 4 2fap/!K~H@2`7#THZ/~3H|H <:Gpw*8*@fGBN'ğl08PmP ˵9͢B X4DϥCa1K`:WbLEVڀ#> 5 (H ax~%B~TIr:d Z8YC@=qUDyk 3A~0p $46`A aBaB؆,P$pHH -DA.F ѕS[#P %&`۲̶u P+J[EA$hBRѼ$ ED :Z,|Ej %IY.o%2q$s#`@gx<,j8@C+`I PC) YTu@&4`@ @ `8f@lxk5c\&1H0)X&3 =KHD g`C 2Ć@}Br#GGPD&2-M+pm=8e`b`.m1#fOBRo!&%{3́ BКh]|`,>p[IG/q9@: 茺ޫ-j`R 4@typ f Ls@5Ur~" 7c)x[3eޓx'2ק**4ˊĢ*m`BeVVID2i7w# `wz@11hth,bo2L'$!yV1"{,#YWiZu`g;c75Phv6vGvF&5wqww?wgCQ(xw%)mx%eR'|t8Cs(5DtspNч8S,@qp3 d ~ ?|x ` S|36FIdH9%8'Au[VP!F+-@TG3]3pK`n3@ 0SY pfP%#pN22@zm!}Cd}aW)BIJ@R9*b tH  Ƞ!nvr# +P"H"\sxf14#M1p S $Xt!*"Q$8s%p pQ7i B? 6XIp:0?O78@pGg=Xw`[@8/'p#GfkvY`S1<|0%ehI[Saq#rԁ I k@' YVb%fzq.po7]C=JuWwW} }o#P˙_Mm#_˙)}Z)6p5Qgb`0u:שwOp Ytz %crl@:r48GPZd(cnQs}ss.AW$3@,%2@T+W!!!K|c!f" r $$G‹#v8\C`CARa2+XtUaA!N2C1v[יa  6yd#v\J0B1O0!v4 ypr r%x{%Pς_AcѸkp1Dޱ|dX2*F2Ӯzrlf>H3jɄ$H"Zs P?rl Jgo!dƋ[0B  `Wc8۽*3 8I{J-țuwC! kLNG$`z } SIPD˧9`x&1 FO ɚ2]S EpTx^s#xʨ 6D+)xlbZHDUSPRhBtP` \Py &"?@n9˳`}I,/87Y CtZ, lc($ZL#%LdsTgՔM(J!rюٰlLmh"!(S19`ڋyZs:&OɾY0?@+A qGJM7~QZ8u ttxttLRu%F7L6Ė}K1=Slyj4wlS  E-'dlթDK 7xo(wms&`*D-OnK+֗mYmcB q-fDdPw\!NJ%'SX:;pG`# lVkE~ҭ@0C  "`\cfbt8o*NA/$2 #(K/aYۤK$б\>m1#)W6\q\cBJc2s޷00p dpw-煷6xSʍ0``iii8%`&Y r0 .p . ar) 3W@{piS &U}@V`didu)0**U%0Le9!%g0#FcMTu(i mfM$B0MhFv~ d5S1сN#11\Q"Lz`D* ,e @sG\P& < 0M1zۀ1߾%n \pIi~|=z=řgG^b:#8fZ9Š&( %a60C"vІ E16 /`%H#`J0#1ȡ: '!Z !h %2С̘6 *9 @">_S"PR D9*(;C S .0%LHRIP\ aUiVDW*,8,#0易6X.VڧZq 6NFh}3̲ #*X4PB"V$*ZG'}x=}7ѴV0aPvec[}7vw"2d.q-e GL7_}ǝxGC8@ ,0…)^ ?Ab-!f$ d  aG9xA:`eAcp@ &1$`[Xv3A +: L:H@0 Z+qPph9   5Jtp, xKd$Cpq :U*ׁq9 p*З+BPq.+:7M,MBZʐ+8\gNMƢ]풣ܭw#5arw,){[p( - iz [@#A Kp !1")- /Ex q6@ @ P@ŽLԃ>IYXc+H8di]c. 3 A[$R2*!&$ဏ6}EnOp,C D8S")b`8YL/z A%i h !$YB(AWE٩  X@`INltpHDwRkGh%iyR̠A=y0ПGTj'ξ `Pǚ+_6ɃZE'p t#$! YHBt!@<'qI$7vo H;CL :.qk3 0PL!m|jT XLdINⶔ^&v"pFiNZ1T?Z-q@k ^>ge+*Jŭfn%@ !5N5ԦR$yʝ$e^uV @\}k`ϰY 7Z! i Is}'VpX2q gIA[ܶ E,ͭݞϝZi j06% 3 =jbD  I&ݖ;upG K YZt1  2k@J~1}ذ]nb$6IhFGbFr!ؔUd r8p zoծ۫႞rgJC0f, ! ؓ~!&m B 1r#DTGQ$Tv'gm![SR m?ŸoH(t - iAK1@/F'@ 0с `Ni k͏b_\S_`3 K7WkTMTaܘ,;iH濌4]bD1jB>CNN޸wuFo Y]@C ( _҃0e*K7YXH |dZ[%E6,4 Apۉ9D"Y[ҁ@5X1+ /4Yq X PqC/YC"#@0OIщ< "@ X# 8rgsHۧj; mY)] 7_O @1=g;PyHj18K+X  H;S0x@'B3ݒþG%.8D&$: nr9sFpF1-2B;p'HX4򣴙3.dс <8 gaU  pAL)QA58 xAŸ4AZ$ !E* XEQ 6 \G N+rilᦦT !8A7KS@18)i'yCA82h!QAɩ@ G%X02@+,! ! (2A RA=B!ȐAG'h#܌@:ذ@M)H`i4YH + (ChH,KCj`'ȫ$ #ɫ=A42pIIT'#2ݒ>2JSx8XN8@pΧP$0 j1yi@D;r#Y{̡HcKBe+$ڰ.JLcIgK)A?/9`N+۟ʢR8JQK=G dq=ʈp!¨YyRd!;E =0[,W*/E6 tO<'Xn!%iSFb}eMN1^167m+T!$䳭pOZ)G㸀-}#;;@ ȃxY`w@,mA(ЃhI!Yt8Ձ z8N9`~zu,6bGѩA, $;d۵W6s 1W=7F,, #H<5mC +FSjЄUgj"m3$L=(SY 4[xOH>v-p$ɂ)[mO8`AVNk]$Pۺ80B:6ES"2P!^ӧ"(:kG)M#Fo-ʥ ڀ@7bO $y%(4)׫ G`.B1SC##8+ aC/v^0rXp`8hf9dQ7XO,M {򞈛.d=Oȃ)X p՘@b*@i5ַc 8i8} H"*qy "FS:^gl ňLI#F*s(MT9u]# x <$EVdqR}"L]9=tյl+e+`VV^ y穱"NiXVr+ G v1q2"у$ΘG8Li#Y !"3 NZ'[ZF0s<$ :# k0Y8\`11mR[ jl<넨a[B(\g,R !%^e@  vzjIm&o1Ӽ  ! a+=^%nXL5G0 K F#GNRG ,e>DB`#$qcf6>0N~L Y#Hn M^H.)+9g䨡65x/vsADwaŽ%@ i#]D)6ǎ糨qv-1^gpG^-@HT3J">PCIЦTRw'm!n!ufh>")c@*s9EB`D~ ot@i tN PŢ>#k! R@pm'5 fUCaKPLQ)mհ1C癊 s+iбqnqָd=uw+ނ5#+(h0h޶k]FKf&m_;$nrWqa'Is 'm 6VY# 2H$)%vQHB}s l^e(4nDL2.xD GQVm%=M(F[~(} h!ć!8p! (PpcK**@Ȑ C$R!>lÊ1]IB*4(@@@c 5k88}j0aD DsRXXb+Dv81D]`U "6d5eh :Jp [$B~=g z3z ј,FZ0aBd.A Hy ~:(C&Zc&tp 3I~7\BA$ Bpa'AWApAGsQDD 8S@ T1THEđAp3BG$B+*LEt&QSOp8kaV`q )}qAap0rV(\ˆ!%Xe 64UX .F `_ $A %Wu,@upK.$GSa z3wY|ւ ExtAG 0yulCO$q:qCIYc{q 0U!@&z1P t_ (\ цGD&# R@C`A؀uT-HxD.㠂 q̑# &;cJR+yr;-侏A)TSd\ 1`'XmW`ɀYgZs^ z|`M UJh 8p BjPe$kK0'``Cd q8,]چ02lC6@a ?PGIj OhD\hp>N> 'P1C!rI@  & ɬ$"[,P!$|w}3ta`G;:UO33Hǒү~%x5` }0d!?@8AXld.c yEְlN~Ce/fhcDYg,,M%AU @ p Z0U*#긕ܑ#HL D`\Cy&& ! ޻sx'>ы@gJUB( ! X`@]G9K+ ԅ&`G@$-1d"5#VĈ)t RB6׆@&a9*ȂV%'}A#jEW=a;F|&xm\`yYMBd@?~@7[nV=v1d5R'$+Vx X8q%tS(z;HK!u`e}ɐDD)c"'))p  VYWjV]aI̳1HP/P;;(7 lm3/Vj-c|C-oB Jn#5S q?z/@ӊ@ce91RLsA 80=KNLr!$ITP"A+CoH#ĨLN`Iq@+CdaOZ W$PLb\i$&105&>ZlHO,4rq0#'9ɳLD` #7Plv@G뭼G@uLhk=Z pA3` 6Y$I$AM b d8nx9+)IFkbReKBK1\bhMPDeaq݀M)ovvj ̏Pј u E @@ tHRl`DKE@Ad9C faY+zYA  BD-5@I$@A8CY_j WlV`Eǚ  d__ I!]#ߡS xa?V0ح T i)nooA͒O`NA8 _@avLI |*@1RMގD dy4 y` iAI|B߄Jށ!cu^5؂^a%Vfy`%4ey̚L(T5B]נa  ӳiThJMT lJJ|FH(kV( iyv%Wa@c&^)ġBz x$x2$^Z&jLp  |4iM]BtrD ( #/B,AF6&fBL)D-(A )sgB)g@u?"&aemXh vMT@ 8!q瘖1XC8 XCd& @$<3"X*,: d6O 8ʴ% pDe@Th'\dP)v CҢVZH@M^&s+t+ATu R۵!8+_ Kp#)h3QJQ0Aivo%:.rIve 0Be\EUn* {y<њ0 XXގtH쨐ix9O nOZ9RPs6X#́}8h!XT%Xu_Na%5X{'ۅyřr \L ۄjqvhGjmo$j @0i@NxpԄĂZq5qvLAξ4 A $P;.waD*0r ko`] *'MUZ5rBA v[-؁4ف JX@tDru@a|C3>d( sX}+ڢ3g<«KjݾB!4[Y^eD5z倄瀐WEa4. *@Hb0-.4173@B҂dLIHN N $q PS\ PqP\B,0V"?t9P7 Ve5Sǒq̂@p`ѕ sLB0[T8ڪQp:f:"X $JA3D@G{Q ;t8ιZ'ZҺ\) U.yN BO}p/}:yDjF AE sK|X93X 診]cE|# k1џVXᆏ^ !>BiBr6!}b,\#N ĨEX0HtG2Ê"cXG HAe ]br1"*tH Hx6քs39++33̈3Hc@6*MQF R :,M9TBŎ&2]y @l2/FU>u  l3JevkBrx %̂M)UvmqQzA'[+|LOGa CH!V `y!C!-{tž!#Oz#5sS?h a$d..r,n)FA.F 8F15.a8` $"; N6e CdpTM_mUU" oFBrnq֚K(0FI>I\j R(+@zV$sʣ. (a8XrB 2@|@ WPqO3PhSdeB,`te(9}o6D[X`0} |eB N'f`߫Ɔ=iծƫP@ :Tv (NNTk+tfLPf-0eLo]@#"V),Cf*G9-’kA֜``?}Fx nq@bP0255Mttf>&=挏|MRN`" 6pGKF1u8`5X!2kH,_G@\>pQʰj=j1Kֶ\ 4ƑqD]]P2%d- 1[ꪄL/A oäJR QkCwV؁ a{ʠ@6HQ> ܢz1OA2H,ZQ: y#3U`twrқkl G.#sຏfiAX=0H[2V8wg=nթ *̻Y`^eWCT!kyZ&RtZ!@WT.FTDvCZFPŬ1#(Pr*!- p|%EN@8+T. 9y]sY94S}l@M\@@!,H*\ȰÇ#JHŋ3jȱD_R R:,qBl'_2d)Ǜ8sfIfBJEuv$*Υ,)"̊6B{}I5` _Xm 5ؕ'x%T)8p71@R AT-p1U,(& J7A:(#[%5(#J2X!iA_edqћ"5`.T3v]S(9dDOQmB' #N> @Ug埻i9qm(Z0"r4Z@iA\ip )B'@N~!MF}TJd):^VtjAN({ɱHRUcEjtw>D^}%) {>eQ˚+jJ*Z-+~o`I߾`R 9G&k6 @֯i%׾;k鈯r&9Ñ: q"fKаZ4Y\d ,-:iy1W]s,5;BW/f5oLE.l`'gSߜVՂ-P 0WD*Y5-JwE[ r ?䷑~X WRöϬxJJq׭%R7+H[C$贓lN̏UIC(]J7=.PvwAH@C 'а 0Ԅ@dmn64vzjZ *"b8syBԗED;tp  ADi! $p[ #!"c ^Ԗ0KrA3HrÂD"),O6Š !OI$* 0?!8ޏ C '."A&IBZ'։QE) |(KV$(islbEw,Xմ6"P,!$.Q}HvXV3$E4WWkFɚ+z=JNd5F``pG hZ*E8T R13͓IBdGL `FOjZӏĥCS&)p$C%02Ast 0Dt\  Hv:v 9;!pHi'BogCz0$>$ʖ D@#M䐠Qb 2aqID'`;-SM<>h,Xq(>$H՛ "S `dQx@ga >>d()DhʃO^ԱVe w%p}D(4VHJ Z)t!*%>e)Yڰ!^ K1SV)SZDPrQ]dJv2g2dg$ hЄ&bXj?PWRK t >Y˺T &s6AI$5 hf*8>c{I8X(-6&Z?9 +Sbt+@"0#f;Pb5dA voO HYL_tLaGۂ/1hL-{<=AjLP#bWg%%q烜R *\|v!LeL"h ZsH`5^o"஀)^q.Z(fE@ۚ eD.P@Z6`+7Z.$YbV,#=!U.xN@t:^{}<㹚.6qEA 1Q9X l)f׸ܜop97A!|7 HBߑ~%_Jb\бepWSCڰ@~Z{B,kЄ[p9fH}JΕ1y*I) <XH ߺV8 M.=Hf]"#<Frǚ;)4?ݐ"nS#B:K/`@J8|34a1#aO kXG>@1}XzMeWJ^{~<ߗɀa6*@6P4qb$ $9xez m ȦRݤ}1}Dlyw&zzX?zqezx DDos`ws ]MAu!2Wa| xdVRS0?O$@a@p`  &7D"6c#eY'yBXe-X^Tz; F5d`QC/186{~CH(GG(Ha|g*v :Jpwt kx"2$gGt@Ae|WW~6mTdhC6V<~QSMA`:}!@bJ1GbbbhlZ7+9f!( "PHpa rH iF%qnSIHDu!d%$"IM5PU1F\BTsDII;IYAVjE"pY!6A2 KI8 `OA Sե#qK2h6)FgqMr s=6ewgЖa :ȒNu)xw9A )V   )8  0)ThH .P#pruĕqG0$) Vlh`Ԗ9%64aDHA .Р@tHAE  UHTj [(gG7I'dMp Tr2p)Xp k NPJǁ ԰`*AY%@ 4)it V?Yx4P+Bp3ْO<GB@8 /PZz @O_jP@c DP0 0'^P$TuGb/֖8Uw"ʛ#G  BRHä8aZ $'EJz s *e`hgG 0 sqP Q'N@lrBU׈:2QB%Hp  Jj\Tx.28 { g Ck o{^$9`Y\t!kHK\:T* 쁏Z3*({.0{@ɀn*}@ sP +Qz :h Ȑ y@Ԡ j QbRM.d} f롂G%Cʛtgpz T ɼڼ awk7@0j$Đ k侔Kp @{ tگ`Ȁ p) K + Y95*|VܵRv@d { M_djBA0һ{  A 3@=о @;bZ pCd &yFPlk-jbRo4)j*‘˒Qm=h! yz q ȕ˷! a3 u$1 ̾ a00r 8pMq$=< >2N:@`'L G4;\΍|\ OÒuɀ \*8z,zfpq iQL (L11Y zqbҞvp4'9<8*<<10, AcN@\ {`Bz` lSI y  1𿯐sgJq30L a,~ g @Qcbk%Wr۠K  Ɍ-971| {!=(ԢX zC@:WM;߰ {`ɵX$, g0o\Hwն#]s{0 z1ٲ4!;X@ Ƭfj fI0@蘰=': A$ +*z q\`ļ:lqREL *8Ky |L  4>콊mY;!ɠ  p7ƭ,gP]M CC{zpJ J;x0zdUHC%w l8* (/ pɋ>Q h O@ϟ@ P J aPHoy 1yNU;F CȤ{# 9[ᲇͲܤN!z}Y<<PN3PPԊ { bRNjN=&HW& @ dYZef\@ q!l<*-J ,P+Q kT-I (lfz.:6vKJH ̽({L*_ DKC4!{ /q/"N3\ +AvD i aPC۝Ğu124%aa:B&ңH ѸZ| z&s\?5^y@z/? :O3T3獐z !aQ3vp0|aC{Hhٳ=~"'Bn$E*Y\I&]"52dK=IJu+Z4R\M,d,xQ6Nit8`"X:h+R5]rK/[X)c#1kmČJ oBp8ɭ31 PJ@)R4$OR M 7:6V ]Ҥ9l }-Ak;|F| MVK"0|b|eʓXYc ;r#>Ɋ=[!I:RiEd j *!p%t8t#9t!uQ p+:ҙoĐ3ŏ3E13-&2(XE]lN[4ױG‡/CC +05bĠJTD.@322;=DlH(fD-5^\DkNYh Nͅ]? B(ApTԓ;‰-.<]*r#&\bj(* QJ(,"8 ͅ{L̇h+CO>0N*4$\[Є,8 B . Œ= TDubRmlTB5 b-#Y5!ұF ,5n`8]n!Fjr"pbFCt[F\%fJj)3DBhX-4T(3 ŃҗM1HaR8 0܊Y١ѢLtDjFȞbƔS`ho`i* cuosFFXхaCqxA[b^d䶺)%u`t=EJ8@TPBN6VHB, #">||ЄM !&kB^t2*Y#Jƞ`JS# R0[A29ף5ڦ Q/WyjP F V{x_G v%$@.[Fg<0a}`5X,2|+d@c@E+ZIg:t;R!:+ͼ,(sH~ӑ :~ǫ`)bx[$nB dJli"†u!D_Ă8?1 , VK$KA>^*i2*"1@idMF|TaX@g> @<QbhxV]XB!dgDPR&K51I(ke8\1H 0R,)/| YNV!!5?R0sX; , >@'2)xa0Tϻu Y @\= >P$?HvŁ9 C  sj$|!P,(İeOsMAFP>#ck6Pe {`B[a|Ha8U2j# `< %9w <Ag}/1Dp\领`w CCbj8w aTV~)bGxG3y>Z&@}`ŸG(DA2MH2aG>҆SO}1ւA{ReÃTa`DE204ʁ'B2䃿c:WDԃ}VN!.uh&I BX8eb׭'AiHǘY `201RZi(6ǃ 6tnnT~ʼn/YnQąb]dX ?#kuϏ: GpU; AS:A[Ju$a#-A0 2Ƭ y=5Eȿ~E ̴[m~kB p>X)[Ɗ4)oF9~Y׹Q! C'9~)}ٕH G>j"O6֝K4α ׺dOx'!9B aef*-rDIHp;:2zʈrhp)ڟC1@p;Ȃ,0>CcBZ냌s62({5\[*%C00>h;%`DkĽ%/Aƣ<<U{qr @t[q@W-M9 K8Kz{IDdXq|@X3H8;80?9@=j X䨞h 1["?bÀ<>΄<?L,,4 A1ĭܔ:xyM\Աb<$ Yˇ@Q,P)%h>΃|gLo6mkR 嘃$WZo*UłJ |ͼ< ̓Ҏ&.DKb(*R\@}D@ H +#\@ ^`^ QbL)Pbg-[J3YO4,XF9&&p%OO`X+5jH;JAsLt$3E [PBsg@i8i@ [ABM.8;p%TT+8K%9( YRp8`%)d10XJ"'H ^̮>PMB sL^^JI"x"x*y=ŦX1ڰ <ЃbDQP+ +%p`0QCWR𳟠,ENqij'@ R'  ^]*Q9!X Y۵Mج-[- ݔmI;#;_4 =V1+򨟮+1 _i089D{cVL꒽+ .>e8S<%PAp@"Љqf]H j(MXu)> ; vRiFspNU3aPg͟¸E@yMXEB=нKT; jHJS[% 83`!8!0D6%y_Q8X Te BF4#<(=s ((Ga AK<UH@_g+b|H'KKJ@ (Ňt1}E ؀ i3V9ȉ 36n/v6˖f]!e9$j[]R&γ֗eoL-[J$MJ~Ph1᫾::'&司cuCacCOVen@`Nd<L0W P Tm nfnt0>.ȼ|Q8̮l Dʉ*p?s25'MhS 8ܴ| H ꜄m nXU!6hD%x Cqb*bhQѱ> Piט  G GVdjj7wEv;OG@ްaN 4Ov8Π6 [!A[S4Sog $9"9|' XR%u=aC M>xx8r]%L>]z¶eVwbp7^v7'$FB7r'^|sAwz<,zvL`wFDŽy!`1М|=B/= W3K%фzlNe(!0e/0Բ- ~m7'j'Yv0rc "#,f K)6O<ȑ@:y#3Os#y0%3%+ -]IEHGA@FT$`feY?b ՈERZN*_tJԯNZ[u!F\V(DmD~|1FaMtaa垇tXCDxw9pЌ1Ef\L1Em p(pPlL2\qD!MwKM:ɣRߑ `q̑A#އtYUS"MAvZ`WVXh] Z{DZ``{vAv:K)9%2X:X;aV5i )$ckKE"QU3PpAو Ĝ)AKDJ:;&Ki70 HN29JoNy h`u)(6L`V Mq)5#:C**ʪ6 pNy4Ɍ PZiI`ͅGĀo 1M2LdvƑK Hs X`aٚ.h<89@@\rf䬑0JLG5ׁ^p 0I2hb(hAlGb4%vXAC ;p:a -/Ui+UV+=j3`)&1)H4AS hɄvP#$ H$1L4]#7䰘Dx&`6| F) RF zD;*1a9!80%b{ i;Tv@әb ܈lP@4 h'hNN0*H&! #d (A0g0)!o`|R{eK Ep? @[ 7? '<sB/`ep7 dF#Vȃ:H Hs),1ap9H 'МvK /KY:B"&PVDwR 1A| @HD``gY$Z  SHA܂e/|6m\L$hsp0br8(Em [A @:&#?Lz$'=V:j9"T>HB-(f5Xa i&LJ0<\2` =3B  b)O0Bx` gBN1 b6QOrЕ+Vd#cə|@?(@Mb k"[3Qc8PrDT/, R$w ba/5:&.ܥ&HkP0l*-Gxh@x#F 7Q\@C/zF BRGAAp .1LMjRE`(HAll}8Te"%)heyBK/2f >Dݝ,eɓV[ n@'`e*[D!$a A @+*w&^o]L͔ˬW,W=&3(^^6,t"q<2`b8@"%)]$0I*L~m+@%^hfCD.c<u q3cKL> a E{Q ? g!x2ЌI-^-^oú d9 XHNE , πYHP[\[FQ.'h %Rl8sRqU.e2IOyDY%b!F*֛Y#\Dw]p }^zw Z ܂U.|#]),!B ,gusH:" u;%/>&ѥ4љ9q4KR)jbD^>6c<ayQ@_qaX ωRb9J)BU҇sn%g1bWUȩPWF3JʱK=-AW dq3w[]s/o81 n 9H"JTAȻ@v)HWQHš8NÍ%/5D @hDh+%I/Z GޝB(Mp)ED G79dAW Ak@/h![!p %I}M9ՙ'8CLD)lRN[6%DRuD"\NU8aN8φMĨiEZ-I\bQJS FBQ%0MgUbM- ƵH=B$$ DKBA0 d$U -l!ZYҁ!fٛ)ԺxĘLDaiă3|Ca%N1 lڼA& ""J`L(ë\Tdn  m"~@1Z ERM\&uڜ `h[^, 8, '8\L`LNﴙD,ňl $/dAӡE-$W󱕹8ND9&D %QݐTD<a_D:lDA@ d.+ߜF]*)b޹$. t ACΈI}"IIGHDIRS*HUb$yD(0%05O &c@a0 \A x6jA*Dhp^A34BBBg&IU{zz=E (i,av$8*E?b/6&Fip&6U*Y]A.8MR?u$h-|qN K 78pπ( B$8B“C0<ù;̛PhH-\_S"?KaSx[lU`s\(O֥8XE(ӐjN($Ah^DSf$(WTwg?{ fR{D28AtKrI4{Ds+t<PTu:'<*|7I/meJQvcKT5 @0p` ҠAaC;F8bED 3X Ķ 005qK#I)RF{32Fp3>}h cGpFY ;`CX)=@,\v}41ZC2bd#M!-~ L?L cL 8 DRj(!zjpt H]֑石*'liKdy+f!G(  る<AO, X hKl6 Ц 0\C֎ "`dn62dh6O"Z8" N b;[Ii&N'^ 1hψT@0Ȃ¡!]|e@a*ADp! 1!X,A(V.P+F( XA+Gd+ c=CIM(L+CӒҵ㊨mشN :Nׅ#N6NbB jؗPS'~yQ^x $&r B(`(Hm(?}eV |jdMVi:[#lhK`! C< VuI&2f@ e()tpa3sd1%% %/19 1.h .a!+HLm+Sr>=uT#t oMzfZȄH!f-ՠWe@Ozn&)lX CPy:"|i$ HGZ;`2%H Ho)1`We#V(gp9i^! i*|@ 04Fn`@z:F|pB+Y;0GbXgHQr֐5Y8Er4 vpAA408#PFl`O{ ^C0F M>D}b@8'e O< =!H P֎>0&p )0*]X2q3j%>\"A JDܫ4CȚה0 2 ΩZX^SC88~C82%vAŠ^]A;`6!!N!'&V d @b3hoIf 577} [ 59}/Sx"cȂ`I )n?A.PVU䒘d9` BRqDT|5> @tGA$ 01NZ'LgvErJ!&@0FE` NNЄ*|j ?؆HO[P#C`R|`fi@t<zc"A$bE$Ո>m W(N; Pԯ J( #uJHW:kCםw)~wv!2B8LʽoCت")l+X<[0 u厒]> SqH rЁ \!p y8 s)Xb ֐dl6F ӑ0a6z#"nVlUtɡcF bh`YJ?Mzΐŗ   %4cV)w ~FdAÈ`jZG%yHfP42t-0A=a`SHB0% aA0]'X)L씰B8An)ME.3 b*)%op2|Vw0p_ YC:֬A+=+cq 0ٝķ6*RW4&/ACj@#*ޡK1d-Pܸ#Q!X Y,Ś`0! PD85xM´ps-ˊKX4NRT/9!SxNTcxU+?Zr0+Oy );ld!GBn6eB"[d b}́m)D=eWv| = >rqpI;)L}8AQ (1%d\Dq&ek?Y 0a@D(% ]YnFPܟ@z @r`90,#HVRT!&O 7R4*|DNJ.JnP #DdjFJ@[ԅ-i RPj" %h `> :Jx*T^^edJM?t De s&` "]!{1Dka  t*I}!Z\ ,a2(JJX``e,;L4I\b 8fJŦ! $N5$vF 6qM~bĠc~r &ңS h"/ b "2Ne O%|#K"+"A`\0.6/+"k$ʇa Z86Mq҉XÏ!~!N(]l ìJ(@@LAx3PA:d 58al@)vNd:;ć$LS\;G@ӹ̘MM,dbAMޑ'ZFvgR. fQ Q',P,U2r!S'"F d%iUI \11`FcTAj+4$-F=! t\B>xtFRkpZ tI[ }#ˇƄڪͅ`ܞ+v]vS" = `CΠ^H-2 S4܃ra"\juq "Vb'8r!Oc'!@T@"[f"USP#!f:`nTnFJ@ !J 3V4PE.i!!bj3:5+#7̖8d̅^ٔ"а=/r%| 6'!@w\!>πl rz#r/"nF92.> tրXGKon\]WA*V|axn<xEQ'y2"A|/)JD2[˥|mH [ɝ P6K JB#Qst,ڸ}3dL@J~(%Ma5Qm>S4S(bv ^ =(ۄ Y%)f"$ MRaACC0@0E{a]8E6eXpxQaah{a]QŔƔVXzR剣xIc!J c (kO^x!"X9}&d6ʸ,6rN,/WMqGT\.Ҝ:TQs`VN P FN0/i)p@T%i#t@37Vd@@@XZc<mN0%1^##YoYkBao|:EHπ `әsMH"i(!hIP _2(>4^Ֆ0/xa$W}T+JŎ |8ˀa­Ϻ8B ’TvL%KN,➢ybAC M"j0$ yrLL֊T^wzVfFnTbSʀ`%I^,Ɩ5K"(B}!BBTV5םb}%3Oʌn P@W/ vg',#P,#wo9{"4V@4yss \ZZ!"R I`lt6j@xa Be vdXviucTBҡ+juwvnA1ad^.bDw "QDaS=F'LڴM~+̐qD\SA6HPH]R$s.ܷˊᄇbCh@pV!z޾^@PywFP^ !: ۄ.|%-"v"\@C !)А 0D p3([P"ć 2!왳dJBSA{rʐ^9'dL 5#H-HE==\c#8}I 7ܹtҠ@k4  $@ ):9"㊁&!P-t*EN`2j۾[WX4ijݻSa…("8A $,t$0u,`!!J3(Ξ+2 @~9KWEO>qC, \ȗR WRqwY<38#"A[4Xd7}U/pk:^a`b\dXa8ї_A #A :XBiX@!|f9Q\p (1Ѝnp[Z݆Um(Vĉ\w#\ ppdA\u@A4ЀCq1 (@@%܄SZ\D uŬbG@̰^\ \X-obn\U5^> !$\I%@CupDCZ\H `u&Y) & P@Wc%l𹱟2) 4ZN8A{GA6W@xPQ\EؕѥWG,J@JPX\H#!PC WAON {^AB,x)LKP/ċ)vXd12IY}xC`e\Fb.; xq  @ $. t\iQQiaH` 1OoY|(t`@@e?%>AFSā  ! B1DPNJRϱ!A2 l3үf6[ K\D )8bg @'<Oe+wD\8tEyù.kBB# ]N@ Aa h1nG69+ЁT@xKb R7wbQv=$,j ½`A_s)"G4z 4!`N߬55hW$~ŞeIn$9֡ F>b.@"HJM" c̸]Sà Y`P% p pGY@fЂ͜i4 a t<%y%C[pBCfYNW DRAtF밉E _9w \@p2h ?8I#V2l"0uH`) cJ `3 `i\2j ` a"P+`,X2,c@pBL` 4aii+lD a!s8 B <qE@(`XggpBR.Ԋ (]( !سNU'$T+{Ӣ=(IQ=¥ZZdniu+1 Ce@< ;@LN/lgטr,H#"`l 猋bd cwOC,n [p|p4@9|pa8ǟ sSSt=- *Qƅ)HYޕ\$,%H S]ݦCEb8䨱DX`^4[c/z) @]1m#,\F0 慭,51+䐅Lڝr Ā Nj`vQ "bs4M3 i)=3Gyx(T3 `+H9 J}ku[LE0"SvLWȃ#a`H@߻ !ْiYWe *J}rd+bv`/`CZ:嚪R~ 2 Ky*K/hz X0A J/`vG a?Z<AOm8ķlP8q i)*gNuWi,t`fj,(PKӖ{*Ayd9g՞Y"P@$5ϿZ`` u0_s_ emԢ|槉SH^F7nٗq@H!pg?ig B_Ӛ4@p-Idww7CeAtK7DfB7p Ww SA+OU#Fn^0Cqsl0%xX@=c`cmFBpeG,@cNȇX2BX2*3}GGpYG}ZZHB+`Pb4=d}uaqW|md#h>!`XRa#K8؁x&[I!&;LehE/Wzz@ CpY407VX Myǂ=Ѓj#b6B$Olڗ1EC+Ў.bFH`F3fcj8!:VfG6#,@ fBJft~tX@SSz@gW/#o[I;pXA'V#C#>tG'簋Wzthi6#@)!tD tnrmi) /PChiaB/3Ake77`ޗ=qD` }a3rMZ!S+攏s(!%0PTՁ#9[X,BbzIWC{8gzCn<)02P%#V(&pS8[pde5 g Xa#4 '3V>Fsi. l0E%f.'n5Z>?A$ *9CeD QT0x6s!@5g1jxŁg7h8pY)WK៦A7 nQ@::m IW#T.K 8ѡ1p;B@vH v(>UcfqHuǡ)eWlqڢaS2=4t640I!W'WH{2sgt*_Ȕm5&r4;CsYȰh MYG#&P  H.vYo9$FxoFEb & ` w|ČAgj:(zZ5 @uS&zG0:R%yBǣxefpr]eOU|="s!cі!wirQVyFp:uWI ZS. `7v:,ut2cQ+ow15u1ia1%paCZfhݳP}+롱B"{Y ai\ YI~JfK dT9i.…X1reZ$7b1:0 .qpz᝿gW.`].6PQaf|Jew96ʋ!; (Q=KUk0"+@e *;| .W"đ)0I@j*j'5X^f{F'tA*);;9EpCc&{Y IpM1Ƥf!GwM渵J>4t@{:Ap l{gWShB@f=l0PRdGVGIk+ڈ'`#s:g[*j<ǒ=qA't "l`#q!i]IaeMBp cCBF \x2@PF*C4 !@+iapVIՑ,P~\&$ˁ wZ%2GX qzJD7@XCbi.h0dp0/h/c`%{g0V ;a!3IzqA'#,Sç kj HtQVZP`6kxEQT+ҿulX|kxapsf#5v>;l.Y(,piSė-4Vi:\sfگꯩθ:Ra۬u0pP(jnCniqTIpI{rA!ZVU)#^%,XôcBNNʴH>N +> Xcl{4+`w|#iqLCf1$`+Lxt=.p:oK΀ K z]-k<NqZ{] pTǑ;ctX"3w0 0X7Y NNt8;P%fqX E Q*p3 "π l#Ub.MEK* 0PĎ & Y!$&|e.m<.$Iґ"$dQ$ a.39Z$W:KJ4a ,\Q 9LM8TWc"M.i$ ,DUXIT2ea.$aޘX,Ҝ=11fm:>Krn `|(IJ" )fK xJK.I1I@prHUSbǙJ|UZ]k#=!2&>do[9xލ҃^ !\A% a,F 9>8%8E,A=[V,(:8j$Z;" JЎ )KKꪫʴjLBP3cH-$)9F/ 0 ,O 3LyK!{qyy&3#…bB Lh  Rr$ͩ6S|F=$P4 )k:y3Ou|z=I%Vh Q^HC!S^Pq$!s;8YK4A٥,! "vLh=ϑs$9ش:XEK݊ 8 \]$WW4!P.B5~ #f2#`CKb\$ Pȥ_ZlU$%+ ]2T@<96 z~G fCDQ*D, -[$b\;@MD  $!+IX1dÄI3;c̪G$H%5DhCC13r0B.Oy GZ|ip;%(:hi|h]3*_6¥(DіvHhlL. 6XAcv>Z$T2p(1֨wC,RWx IuUlB,؋Nȩ%$18hd4"e`ή^)\ZZn1Ȓ5 &6Z~ѩRW!fBLT ܺ.\i&$Ĭ'ׯ +l1mkd% x-xӳ&`ӪWLn'.ǪGI(\a@f0dL bIJdB҄5 ~vyN<7f #Kxv&Ⲗ%2 @00 nH9]eA. G4I7^ӎW! .,9pE^')SyNԓfm%aC]Ps"Ĭgy%1EG$ap!&i fvMjɘ!x{8{ŏ BYKԐ2grdwSFJe\'}}h0 (T#Xť-U"k:C[IJ\Z'O%uz$dC7薏vpcM . hrvNq$rxBYu,uourr&+&c I(pʦRHH7GS7(+[$ "d 7*  pJH ͫ .x) QK0@J⣿Sˑ%5V2Q ڱB xa,RYU˘1$Ғ?B;BQպ*L\,eAz00*$`/8|J, b @|"[K uky #0y`,=rs$hDIhʱ20!F{ { P n$HCAŌńp:ƜX?  EHy lL>'zȘH0ӢԲs̉#5" wD@4 hF p3RK:a% ȌQp?$  i8(hkHBuu97#"GDﱛJ А,R.aӀ 1tȮ'; !-T,0{iJITHJj C ,x??v"LO;K\9Ʌ p $in[;M,4j̠ [ek2IP&p"I$L >BT|;(̘ )TBBk L$ω(l-bdj 9H$L\;̩h;L@O1F[zO4QT7sLNЩ2]`XTCؔ?I QK߫F{2U{> p1yKLO A҅O0- ># (M%τ }.Q7K!fWĤhʧI)ԤH"-30!0xʉ91ȁ: $Tʢ0SY@?mTOP5H-U2J+Shx7M]?,1Lຄ?O> W+c*^؈y+ c-̣fUH[;%m#O:=أŒ,{IKs"\V jV:HPTEPm-A`!U%!lx֒@s@\;(6W=U[RMԻB]J*x#ؓEY>K.+ H#xB3cP%tVб/Si%5_ڴ[f TQ+W9:H֘Yj=)!XsQ>R9Ωӣuuh+< Ds)xmD˝݂ԥ\\M]|ܶܒ]ʥ]S܎11•"dքXڅ,^й Ƥ])'&ڮ7u'eYթI_DO`KaΝ\J ֧"iJ Q?M*(ܩj`e ԙѦQ_"aE1ϭξD | NV,5h`, J [295VW0'5Z] ߌiݘCfMą`VʅHc?:GuT,-SuC#^_+ mcFV<aI9bapQd 欹J1+-@+}@SIh%뗢ljc,lM^ IؒY3.ڨƕf,S4dTsA}L'i&vidgMjiHh5Zp3zv 3IH-{;fE#c(A'0,/W@ML_ TA;b-3Q ;He7Q@G@IZJuҰl6[ikwȡri=ޙd-~}Kз4LL Ը:Aũ "+ҜvdΨ3^Rna[nlWđXXӡ& +YAǷ*er@'I=+2H$. J|}|RpbO#C /WbBo*PO %,_$Ş) H@5 i*` Ҋ ؽzQ|^: BDj'i.rF%"e` uX*CE7B0\UD,bvcV(("a' J vhE1D$_7+:FA;LHoi`:;a$Ah1 ʇb"IRԯyd7I ST&M_ (1ʜҔD++H%[ (ֶ8L~IN]&q)hG&șK $fg0oN2`9>#C8&(@wU.o/-ExvtGwI1 Twa"'IۧhR@ 8-L?7?C'b -.Yf:-є| APG4 DF4Dw|4BkK$^U f%X` iI;ց cHKP6^eru V $aRA76V8*A#]>7FIߦh >q`*B~ǬޥZײ=P nn~5{&>|iP `P]rƄ{'J"ܬ˺*vMqTV(,I⑦_}@`^N܇@EM B6OL9 %74}&R7\88tmC#ٗS_9t>wg3 #)I1nQ MF1iLt\Z:vw#}_Ӌ1olܚck9Ŕm;4ժ 4șZbQ#+N.u:aЛQ  б"i4^]!O=9W9.7*dx0u(`j{jTͽ t¤! ?^#20 -X$7a ˹[c\GG(Dvh:NaNʹKE٭rdl#{>iГ'/K {LEDiecIILs3 8.3 pvh&V̍ɶ|ܷz,VRf4MvXVC wx:* ұ([fS c }BzDgD98J)8jۻn34i뻴3aݸ =®\IE nzy @0b7sS>]@$V<=cA2j;(w ޿'v2*F8|+`TV@\MtW# 6QRG̈́ld#AE:R&7(Uw~e=_ֵpMw7gq[:fr$F0Ņӗ%>p?`QZYAR Kfy={]&OufZg؃h qa7>B8D$1CbCw~8}gqeE^P…^Qp2؆GCU+gZ9hrKagBXkT{e@p`p*hiu%sTx&FojQf_BCj艻5Xe&'9r4W_~g^@"F*g~aXҋNp(MXO Ǩьo3AwPGSJd^Tr=sOCNH:ho3C'xeS**NtMp< yPYM!\<uag?rp$vf kAB@9ZG9\\P%sdK2aHPp%ч PE ˼,L()mk`Ϭ:o'>4QaSf\d ** EoLǘ#y+j?V ǐՙ\]~K\x/ ]ulڠ cqJ,VK"7DL   PL%}k.'FV5m#f_9=fA4wFY<,ŦG2<;Um3P%[ p ّΐ-o=1A pTCa0 \MUT:ؕC;D - ECKR1JW$c8%EËsl,p B?5"ہ`Zp42,}(p\]== ~1,N6~M:^4^p]#%'R3(EDư4p1i!<,VrAp7:ko[W&D'awQ.4.y,W7A3e?3QⅱA1!:N87.om-Q~kj!kxlـap>P 5$ Qtk*xQj4 DyLzQivuL}Kw;*`*K&B5e򒛺 E2A 2N]ύ{?~C pZV )  4 02@ +N1DҜcV'o!o.ή"m%}G@ZYepp7B wjKp FKA ƭ ,N0>*;m3.^~`ɍ0NO! E~"4GO~ O0_ 2+d$EhnojC[ o'( 8 C>%YБq?{ypV0:So.7Q` e@\ő Z5lp kpY j1 (p7V-)e+.J*f@@GB8eyH@; @͜>}*b%HAvReƔ ՘ 3m],SP= TRM :TT:`t`ƁV jj)#՜:f5*r_<ΥrF+ ALV& M(CC 9^Ц8MZ`PJ3n41K#M\Vl"X2KaZQ u? WthRԨ>kxT)lR45jx:;FjԬR_g! pb0Y-1$,Ҁ*Cи*o 4l! GȎ2 J C>J7pIl,\ Ǿɺ4j'Ԏ ڒJ|R{ɀtn*'xgz :kyRA& *a77 Ҍ?,RN 2nb 82pX8d>BEƅj$x V:A%ch: NIrr,d٠TKf<"%y1t8i&WOyh9^AƜW 80dchԠ̩T TѺ:Xe"hcbiq$w@HnbIHEemIIgfwRN s2psp$T"7O^S y:QHb|@@]99PtbPa@lӋxP"Sf308 v+ي9޵hT0I>JY) e/V/MhЂܬNO\ʑA ;r(Z@D `9nAd/BN+?Tc.X "6 "c?4hF%6[q *t9!మYt"uNapG,ZC]!cPoې>9"3 1N^:MgĽA 1zƔ uH% 47NŇSH?p iMh`4"UqmJtb7ɮ.t@ /$)It#$R(k|0!gQA= \P R:%+>  2xHAp'SQ < L@!xFa} J?NL "E eC:&j4C2I?VixHJ+02"S0(AVx: )XS2v03L!y0>MJ6"(`9a#%`A d(bD#RRMlPR*;LHN%Cjped'Q%42r] K/?ų}vGJi+*&ԮZAN@i"PP(aJhыTKRL@0L-.hR м6#\[Qh™9aJ̪XI2HG`C.ph} b¸6ukvglI rL;3|"覰m8'b«gXʻ 1"@ֺcg%Sɔq)fpۑ- $`WiA($@C.:X@.ʬV?f[$=8B9Obނq@DSw6q<3f`_v*2yɣH/pWM #"d6? S VAtKrRuJ(2*CV3d x.(BI$SjT DխnQYM]Mӡ(J*(@ m t`` j4Ve f+d҉ܗO9k"}\A;lIr^KxZi,©(l- 7]Dըi@N=Zi2]ę "nFT@O`)&[9hE\VNa%u@E'rCBSQgi,OAȄވwGH>#Y`d܈]}=nqY/ hO{8wl)Ο#PQ݁AT M}2iY0 `)7޳5;1J2QGYT9D@ ,T0 R 8P= i =yтS! i$Dr9pE*x :c?c5(rA$ A[88O'c> >K0sc R(C dA" :ChAǠڲH$ZÓ?2ڃ@:ě @Y!C0P, B1!X(3:hh$'Erj1lA`C`2T FiB088C-1#h/.xpL+*L/d@6+-%؃|T`Hh?4y 46!l jm{[ʉƁEt rF [  DA,,hDÏX aݸY 1P2GZ !jpК)`q#" +(ak@0%PXg{/Zh90=,؈Z5t*0ij^i c'wD%šBBDp(GbXJ<E Ȑ9`CTFz -k拟,9CtuHH%3!at0/7 DX[.Jc`18 14@ YJ 6j`JCr$PsR oRH=+LXȆt[r`H:Xt^H` .P-x ZȆc5(һdQ aS(3 ( Ѓ@0/BT:^),HH'HtLa|J`X҆@:H@+1BuS# T)%0>؃lt1tDO!D&5 y#6Uɀȉrdԉa< qG8 ԆJ ;τI0p X p(:i<Za2Ђl=ǐ 4[X՗;ç`ԭ+c8R ATVrZ I@ɸ ԠAZ߁.~E\BԘDp86Z gXjhWM'N3d"LUʧ7,脛07 {B-V]! W0%JxϘ&t<94ȈP)bH a:NHۭ P*@ 36).Ӳ(984J`5! E [VЂX0bᕡʂ5p- ,VgU'K@+mk5lEĉwbG!ȸTx-h X7H9'B X[1 wr\*чZv;]}(89ڋ0:t sSF/Y`F[MǠ6Q-W5STE(׼daȲ-hmPVFF^;4"uVаԓ0nFk֎؃N]%]Td2糪d* D ֌E=I*O2TV۫^ ql AOE f53)6-+ " p44BBptx$=28<hV(" Ki@ #aYDkapᔸ`M](^:'9e\:YVWQ[޽|=~ǐlaf*a xȘ< Bfbګ@)O NO_0X8ȓ,o9û861P# ScSUQUF*Fp^VXψ<f`ȵ-cf!\^bit'^>* !Ce "! %2. +ԁ .gk9yh {`" 'ȰJͱJ⨏l0 t" LHUئxR Il F1FlF8U?3mjK[ծ\g]d큈 wҘ6** \ce\m>jBp f FQ| Po--64:{f p0XVӭ( \BP[j _gǢ7].bOfnn&. -v P28Q,93y`"բJpFpA-v4eD)̈#w#Ml&Xս-E WP;%HxS8FH t2^̀`#$>_ߴPqv'*qv"n_f^PxPr  P/ȩ @5Np/r]{{t]s\^2H&^ځyIaQ_IMnMH~ڣ vӳ?:۪ˍ;%Tt/cF['nGwhin[huh%KXH86 c(_^54A՚F)suG`mIǥgw*y \tˀmRטJ2qjtzOHu'iıEEӇ f r'm c eލq%.򩰎]u!dbLVXlT:5(L@clwfTLhHJ-i_SVifƲ0,h4` #FJ-d>D* `dʤ+:ys.hPm7ffXW5PZ9[HWgJV!Ay)6چeVGaeUv`ei[eLkaUxhRZj[Zn5JlVq֌Ufe4NV MAPaDڕ] yDG2QIIB˝D"1BsOSPh8W[yUu#[pc=o@T!N`^[S!Vj`Le#aG:XcNTjqԎ&Ul g 5Ukq&BY(m*qIqJ(kQ=m}r{/CAd"䡼S  CEHĕ_Tl4TY쳬ѬR)olާ}*\rD$0 67,<UQIœPco%r ,i2Ke6VKH?.Ot!ĥHUeYT%rYc&[G) G_D d @ 'Y \Ѐ`\„R0W?-X|iYLqWn @8 b= u6c 4ą G\܈TWق= 8<#RO(hIA8c&Ag~r  C&`(h !ylNiTN21 AC:t Ȁ Ѐ̊zE+Wx,-ދ*Hq#@(B0%A|*YY  !%aDl|ZkM_ YplYA@> kSb>cr9F%?j ODdE^\^;!-0K1U^hi6hMG\=B~NHr"AD*J@xG 8&M(I̽f$B:@H PZ6*Dn֐YŽ 'nv쮐H\X>- #:kr%4[LSJsa\TD6AȀiDnHrAP}P00ीn&qV4mFTWۈE솋B_qyF;rdtu- J-p@@Y["1Am96\2C<5^G1xU @h@ tlGdŔgIx%D6% XɪLƪijV%!eZȜ SY0A\gdF䑭@./ARJlɺ&xIٔ|n09 ZF8Y1mA/xI[3+a$Bw]sH @AM:D9CO0@byzd;LAH-k)ɂ9&A$,rTxS(@teMUrknA.[f4HXPE`X87k#B^3D|ye@%|՘8ysT@9kC[~1hP&a0H5N|OT̀{!GX6=>%p"ru)EA svT0V%W؊itz7Um]Fyj:X85bg\@4I@mƂNl-#JtqFjYDC#DNL|3㷧Qd?C|hjAvsD9pz{DbmN.2l?H gX\< ^70 Yb4lϟݓ0]"m`FvqO\dU9r*dvNϣhA_w8f/=A|B?Gf1~1B2鬃x/JA>D?WB mAbA e:iATw <^яDMA*hH:tIъMz)F1 &WB .7`0M@Y4PbHStYZH*a @u$r%"JIsʼ!" gD@Yt Id?Qn$2I Be R ^$6s|0V:aBĖ?Ƴ9i(fJ6 ͬ,#$") 5X*0ˢDv9#D*+JWq-:i?4([;0S!餍t :(d8I( dѤPу Cpʈ2(3_,~rRG N(f( <2DNѡ`sݲ!#mȟ U!H-UVI]C'J0O Hg!@j)F{ރh"~H@HJ\BR<%Q؆ⵁ=0] N%&".S 5n#$,! 56apD2HZ6"$2EBOXM.R*l@Dh3^8F_q|1ja|XW( 8A6r@}@{BNV!E*&_AyL" E"Vr!'?LD`9RUF2Z'cFXd~GJ{KL=)Hů{j*oyhSyԠF,gXG927`'TyGzvˇbb҉sF`(OJF>Z 2L2F NPδzJP ~U~" B+8f0'}E'@B+)# :AWH" z@t`.9 F Ea`cB8]ѦephR6 ,H %, D%$|:[+ < b%Η~#<줡Hb2p&%6M"'g(笴,bC 'd b/.@'d- >!ց(//r0fd!bAGf_4_6!%T"7l # Bh#\:β\Ad v*CI B |6!<t1Y|28j833+R2|jMͰ ` :; `}Mj'lRT (*`L.H456C^ 2 ДD+-q:6DI%Lm( s1C"fNr8'%!Z"POgE+5&u?椯>GrG*G+qmh:;B~ b Ϩ FB(lfH`L1JrLZtA(`52 :#Kv6"kq2OC"Q6@`@5|(*P\GE_4G34 4UR.&_ e(T(S1g5vScH@ Mj4D<%TQu*xD9+D p@|1ʧ1d j'A1 !4" J80@F>/6X4 n*R"vH OOS1MLhhHuU %hrv~b$Xa;&a)f:lA8'?(!n h+@)Ac98?vD0dGmp[d(Y vVd]}W܁Z4Ijh3zXѪD36IU?Gਖ&3[3N.PP\!W%#-8Ҷ` @ bg~M(L%X"*T=s]ב/U^ɖ<_c*hAቔ9סVA zfxA?i\}{wΗv͝LJVtE/;ʔ-hL_(2%42#Ulz]E[ZJ27n)B# Fb 7xa D8 lԩBa;r4f@j$i˖ʒٴi+3̙0]V.<{Ѷ.-23OzsSY^0„P0@ xm *ԭ m`8T2 )ć. Y +XiB$4a0 ' 9'2 +&luOٰQ 8A Jevm0TMrE UC\S똎ab*i4#c"YdV$9pLA) Znh* Y'eZ' A 0t6h=%p4c8pKP0@&dwv >d.TJ)EZ4FlzDMO,zߨ.m!L԰Jk33 3v1FSс|9@ "v`7Uo5PIr(RLʼn a9et v FpOS[: ncW`,olZ > *\OL.`a=Lr#U50I:aeB'44Tj$S VC A*a"!Ȋ+$YWt 2 x!0r'SmT:)9%r1"1 S AR HK[TCiLc]HC28@DVN[BQT. rό#lJd)1hNU lC Z$&E+J򐇐ꏤ']tIpp`o ة J@8hMko*n!-C!rN͌ k_XD&f`u_-XYuلTGcc<\œ͖"@B ΁s(.R)KzHSICtt,Bc I,;5t| L(Z )53 $IV Bmg$@#&xeōV(B9-+J0\ l(CXw!ﺌ:7df:m黷)4;d! ]fA`p`bыΙ`){lϦJ*Ya044,KVPnD&_=뿞韰:Su5 :%Ns+ g0e7%P[2kkdqAqc8CJXW\ }~3V^]vKa>BDfb9a~CMw0sLi0r802xGPh(a?rAA =OHyndq a0ZPEr@W 1w gb{Â!pdA78v{eTRq6)b[Ih"J0V a}\\!n#QRD4a.~9DV^3g&lao wLcg@43DE fT!q7"FYpq'LhYKp s&abF ҂C+SqZ3%JU.mz Z46I?v+`@R%Bi- p Of ׌}n@4tfg8;EWq'`R&nba(&#? CFE)ؔi y9vtq# 0kLa0 pAq76QB / 0S09Z:_4sBwl.0-=(śl%v@lA9A O^\VheU p ~A(&D֎jd*g./xtH(S0$QV`3` 3)U)0r( y pz! +6w Y,0Z0sc.G'Wp439,b"(2-7S֌  aMSK:2A'ٝvzG\_e&a'hl pwx2ɦ0z "x1{*.1#ZX3.  H016t78[[3+P r 2?〴Lk`Q @V;$fB䂧.fq7;3Vc蛾#3oIEo3Oe) *`X3Y *  @--zA!*+  ɧyqbtUR8JA$ B@lHK  R ! {PO69$.*vDTKdFekxMi/^Chkb4o Xw"K`Ԯѿ! jD9)U\*U2`( l%š X ), kZ |J 2pgNA Elju.P"hADKHH䴠 P Ã~EB;*giv:0;1E@ߚƨ/ yrE!c;Q`3fP} ɐpJEpfNs<%Rj{ 3вL=" -6 @I̓gWN2x+*T "@0]-iզg1 {ZSZeTC[8A<'.}g |d@N0 CM,(rNo Q,bڤ+ڇk XjR5QN0>-1sQcv"`-o,I) / * G܃@7MŦMIE;-M+`+Ҡ j=` UljeCLheaZo LC ߣce,R, yʧ#N}pN#B4aN`ڗ0-l98M|.xgdO>A qHԻp˶3*?F8@)[ =*tI l Kͼp\sW?Vag`o m~emd:gA A0rQ|q+'vPRᯬT|yn1 1 !;ӨpƞsC7^I [S2)02}}{go3tP~l:S S~ Hذ3ɔ)LYLb&#G $ܳQCF8 @ZpޤϞ  RPht4z`jUXzh"! %</^M=+$ 6ᜄh2j/"1ӧN ʼn3g![R'Ι3\2%  7(!H`B0!Q'bF.y$!c BB~ i$pO^k):䉩Pqær Pmʜ +!6 sE@+:`j ,K/ :21 CpP3!L+'&!H(Nn !D t7θ˰A398mdA˴=#TO<${O X 6X͡("z1@drpY =1 ǚI8j\;7ţ8s]+HHu(^0 ")fP2F~-@rDJ2P#/ sc15mH/,(vMNv]AEC0na$n@ؐE$VpA(-E!u:A UN9&T@%TP.K"hb]Z-J "#ʁ=Cwh>MHrppܩ:u7$[hބh 2C>T RNh!8ld 49 h``!@!: @x `,GkC#6 j;xf,ȗf 8$f:P8 V2ωO X[֨)|bڂc6!%sF]kRĂŷ34nZ AՔ΀1ɷ! ш,9YAۀT} bVPtIË@b;8d@C3=yhB΄w`2L,ڐ2A 4.jp>`!@m ېB@ p{qq_f)6R2*xZ@,KPs̆ A `"DrA-U @rkrQL$s p N  stE2O\l,+HhP z6`=Q!4P K6$GNpyT XBi*jE1|&4%`d5I6! T: ԧs斐!$McjS?&*(`ApmU1s [lgrIÏ'$IB] LGȤ 3'uIJjIf(OXHNAÅH7>h(rNc4$]l_<lxG `GDQm=І SlŸ-GR*@\[! Ht2N.9Q(H8kH+IΧ!\ ARG鴥WJXݬ;U l a`,EԖ(rP"kCR+pu *VC t~V`W!]700.Lhm]׃٨Òh;y7y3-y8-ؑ, 73 S"d鑆XSX8СKa5j{L!Ac(ӟJй9SPQ>X%틕`-p* PP2P PO0)Цi0lqtP+ 8@wc͊;Ԃ78IS8  @ #i1 zuvs}Cܺ0aCk2h&$=L@ E/Rݸ5 -\*<:50H4ڕs; `y56 8"i0l(Y?kl99PA$@!2ȈwE! psq@W:!E px# Zjrd 4@`B„ycD!DYBhF%41.xB )0 Sy5VѾ؈  wGKzxcS@H@Ѓ;=H A(3BBا+͔, r~ \},.b[!I+6zrwyl3> Ek6`@Y0L$Oհ%|ƪ I) Ӿظ +󎡫>]!8Gػ)X]K {h>5yDPE. G˂iAމLJ"˚ҢDv 47,jQ~ 3M%h#jh53اHd8<,4J Fm%鉣=PK9LO2 s\B;T P00Gq224 `]KHxc`2wyC  qÄP =!dKȔ.1ēH"q+"H$uўRl(& pX;D8֋8# HX$ S+C i"DHO R]Hx%[4 1 8Z`Ȣ i=EkwNzh"6P"P&bN3%T\x)SJ  = W33US@cJI굛`xfPJ`>P+ ԢP78Z7+HNMXy (CȊ[803Uu %̘m}¨u9<͞@2 0hV%*)" cKri]ݥ tX$0&J*Pjk*8%$dZXu[#W /*]Z[u۶[KsR^fXPj2`P PC܆8y gK򛔨'hC ;|amk8)` n[ކ͑$!C]݆pm#.`QT-ޞٱ(26 *TZNX. %A٤L`4w^xfHۥH^B`͠x ND! >8˾dDjrMȂ$hR^ ^x^9p8 M!]A"D! ]/x=aP^iN't @NZpr [Jw qqѩu/l:k uD&(뙞0L`vha&ۮj%HZh5hւBlDxuR, hg Yآj Kn jfΉuj+ ƞx/$5ը ȏࡀVqhv70}&IL2 € 6*{Uw~Q}?!6aw`U]TqAXmo*quP #}&AYvW%[DFj/ S(R`+k-E<=?xF&@D?4 6B41.)`r0k@O`1H4Ĥbo6hM74-|g&qGn@&d`DSdP2>Q:A `2`+]#EJ /i9(SJ"-=DPS@ !}uȭ@yqQf5ES 0 P8ǯ@R\H./[rl_!+.\$Hc) d)( 0,f `9 v8@2m(V"Ɇe+O .!U@>&"t*ȑHE * #"hFȎـ7$;(*f)z!$ưF-x>=0!?B%,$}[ F*a3)d+ 7=3,F /SRbQe9J.RnjTLt l 38^9' vp/t#ޫ-ÁاKA]F+=x(AX 0r V|9v'P ݅a8$ 7= 3ki$c צg%KԥB45~,k㎪#s R:DfȆWaJ p+@: l8b.8BxݗM!iHUa,҂J W„A%?FFO pnN-A{ri0]T}W\dBusb͹TVvr.:,lM)EqeX  a[d)"DV PFx/H)\l؆ "'āpMʱYyT-LQxXE}A$') l @NEv5F kP]DPYDΝxE! ESڱE@](WDC95Ji }u Ϣ`MDJ8L^]$T%dAލ `YtA(O wHX$ T@(,"kX DqpxUNWtS&)F1A[_D83AExXxŁYJI ALZq7#Θ/ ":$ƬhyTM  00fܑF 袝L/.HWlNdHvIUٕ2Y0$R,~ DGW4SD deG<:SJ X"daAX(ALIOD@5^J &hWz~b9$!TDj*cGJY\kқAi_:`kGIϰSHSA%] 9E dx%Xƫ'QRiEE@*A#j)YHhT+DhDTA0I-C(݁XAp W @ XG`0A 9tI px$AyY=ɅFbMHOLd'FB@GD0gW ~AWpzllFh\4C(؞ u [>S(-0+hÂxj@J14!S(IO =,^ `RWt 4YjO*m&L '36„EfIfa2IȪ)AlenZA״Ƃ0!4 &X tA#0BPA# KHfMřuGAX\!hS)ZbРb@cݤNƗF:6گie/YT*[aDuBzEjSun QY051I4@P!U/: $YRA>5 Q]^ w}@,YTDs'11eiоz[NJ"A-B@:`)XZe001+B'8DO]T)!Ւ$f;|EDpG2A,U0uȡQz/f2Z yG1 An WA-q8Z%Eha J78Aɀ?a1R|BE QRp rDQiGH 6/Jos_ts'w@d3tB$D'B9P 2ʊt-ò aQ6Y'^UԊ-p2V(er2Q !ci+f3^7DaÍ8\AO?BW(%>j# 4Z&*AaH3GěL@fā3C9xY:F{l"i{FR'{,/JE<{AF}IFE% տ˶,vv5\(C* 690v$W6w'8޷ 9t͈%.j}q೦)CbQaL<݀–#Y$s0.A@''Xs"1,y>~![@GB#_Hcf0/ t8PCVh"B=xQ-:$ Yp"˓h ! 1Z.AuDŚ5; \%A\B`"FUIKamARI`D\X 8haĚOu(0)4m  |@̖V3~9 |e\P Sٳ1 d"4/ 4LPee)f]}o fPg#8qP"Uʁ78r cտHXw?gy .--1Ya@+P3̈8 *t#7HCH BF2dB RL!Ͼ8ᥗXI.D (7zòX#Bb6ѡXB8h֡F Z$iiBp1.B$2 PH~9Gr@%4U(H >C`NTcs;BA,"]ȵƵ!@7N3kHaP@60=DR4@N.j='2 JdbrF< |?򁋰鐰&-e(BEH/Yf}{+@Ȏv#B2X+iPh&IT 4Ak]NbDE@L1|TO!1A 1@p&aC@QC%>0VfЖ,A&YÑE$ɞKՂhMR qFU,j yMAHJ TVGЏLb$-A[yfIJv[ l6h'@QrQ3ʥ ڞh=$jΘ g4+'8qJWЋ^RSdreLU,iIATcbZaUT l%w*DcʾQq&2!H%!,H(08p`BGHHQ$pbGGL9r㈍+ ĨK'AʜI`Eg0gB I(њ2*]ʴSH,:@ ^"ƋX{2(&Θ& d0@قR灩5hi&_ː.kwY >H̗L}#x1l\%ԊÊM6b0'hA˻oaqZZs/}З''Msu.O6V2NK 6m]Wr dg j]uۆ–j)vTmމ(bMĵ(*eYDEA7]hH'\әx^ywFR}!W~ew#'_}zY+QLq29a}NXe᝱mߞ# AY ⠄Jb.F%)w"GhȩאEGʦG"{(IדEДg%ߖޗyؙeyAFJqУA IYhav⹡ߌ$fk(!EX7dĂg3YLi+v%qA{!5!,h.hqhJkd]K!+6BgEvJab&_w1 jف1 x7ݹC]g>9zD'Ic {J[їX"BJ8ȧY h+xv ce2-M,oYL·ZSe4,wo)$5`]It *-Nltsn+S*\8*BF$q 1=hZɍmAbuisM7ĊZh_v7_#4ImXR!]{r5_o/NaX)wIR|$ܣclg6 +Ro7S^rLy t2d' x!{QxP7sԒ8IOkB9&/r Qx4Պf0/[r`77 .:/p M ™$ hCfss.$܀1PK|ә?&,DW 2E`İ L4NX)z)((zG2dQ Ϩ#}D Ն$Vt^ FSMLΦ6+ćDyTqd/6h3P-P7֖IxǾ=YM[٭&L1" ;2B`'Yyй+yv aV~Z``5g[i3l>Ь*T8<# C'9D. knִg5:.ь_ƃVq0$^:@@rSqye,ZSw듪\1an<\B'8*k#v99ri5 }5U!AܴHY DyjOv)'k靧@~?3ך3 VبM[ & (M&sgj;9fX?O&TXdzXgxCANt_5t.pcќ$;#Ƣ&tIA *S]ńHaAGLMU S&[b ,$_8bZy'[jsbMRKa@;<4AKβpd3g`CaQ>G"jЋBJ15Q1 {@ {(@Mb46w̗'s7}(oo ڷ* wgO)3a.~~6dFi Q2)W?s8TB SE4>|@?BIKQ1C57kg^dRb$RQO†|ȦڔWrx Qa-bǃJs} dw5GZ0}"D&lGIO .8x"LwI"DN5h<.]<lÆ|CVg˃^.C>qCn?HVpj06/ $v+G 7qwaP8=,p&sl?p1t8)l2 jHb烙{NpX v*^Ϙ AaH2eq~"9#y4%eHwy(Twu|fSu"yBjHX"&nY$Gu0Cn8a ao#x~/$9c)Kbaq6!b.U?UV>d7_|@W`~X|Z@1B !XH[9AlAt"c7[e`68hZB)Q!+ZIeaqR9 w7 'EATA g(wrYl&Cyp6r18#l@XP;6h͹wzѩW2IcA,3{.W H#$I3a(19!^')׸o:Q8'yK6Z!ܢ;/Y%#щ5!G 0"+b3 8tHai營5R]ybA 3Cvш!fHq'1@L)dT*/R$OL:ePVc>A  rmaAŁP~a4W{q1T6rglqvs=zZGm418,H F-SfӁ ps7{QXRƮG箸$(EjsטzNҪsm:r?`4Pm 們bˢwxR䘱"m@&'"r,(yFI| qQ瘠$x=f25GT\x9hs@~D2.3:5M;?0s S' s G/4vZUZW*ϊ~#0Tl5~"$K'%>g!!IA!i*U%A=؇U'A4~`{j`"kCɋ)K˫o?os# T~!jF1s)k^:l{B&s,B-w}awFDˀ: +U2ګ;n۸n5#q'p&bk((lAc[pea XW4dO?EH#X@q bب8pJ"dx'A0Ƿ~ !(-1 Zuݻm N@I*]ӣ ρ *8C8 Xs Al`M0g%u8C+bKzH&CuލT- 1#kzm,C06_ʮ`pȪIPԐ> @͘1T m0DNaQ=;PЦЦ D$UP\n46x~p~{ZEؐ;3!}:bOXo~)R'b*[>0Zĩ#Վ՛P!&OD0N^ъ6Х˗Am >QbV.]ڔRD|,Ð %22vڨ )&_4HQ΃1BPhXG *D=tVqۮW\ś7o݇L;T >"NΖ  y@i l؈PLJ₉ _<[wllZ^jpHƌ!7t) |8b#q3pU .3O[ChjVCJW\!#+ Z3 "+4/Ю'` /zqf=@  }.rFC9h}t9Vm4)ȝv{mx9dՀM_FVb9_PUȹ좓4 "0;HJ.kE~=jŖ..!%Z " 8!!, '4g* CM7eÂ*DwbF15Q {biCjt1 m[!H|f+Hdbcy.!3,Oh5ӒK;B6 R4k r3%eO1mLЃr'AP]p-LF8KhS/ECVG{ Ug;ܩSe}HVlD(-3N W"(h-FE5w,mh Z r.DoOb0λdjӼ7ӻtJwKo!ljFW Vmf/2+ o wy!Fh12lFŝ6Z) *|,.g&oy^W^!!dÀa>ӑ~n釜ȡ.2 4Mr9ž꞊c(]9fw*`EZVI+kR#=RKf&E\ is0"#C,m.毄T 0_@ HПbe%!.My5xJ~سi[a 7_A{X^!Na>o.@' D*{%( ‚L^Ƕ}HX ^p ]m{ս*@EG|A,.!N-Y:XPQoK3rK3(4Ի&XA=P7ڛ{B0JٽrxA2 .pc()[F+yc;ֈaƒ{K{z{H>H0 AzB@ ˆB8|)u=#A@ALM+>SpK);;Ȃ,XA>P "FF@Q IӴӆc‡.л!1BXZ5 /t> Y+8 4H88Cك@pAB@{ԉFx(}F (D{>Plg !J$y 98”/\< Ɨ$22_X p0B Z,득xz@h{s,tLS0AY'{ÚDC"1CpFZR+ St<>j HHRF #E a ,\ D ɐ FDA>pp'ed-kB;#K'p9II "xIAX|K# Ճ,GLG=D(+Txĵ˵Ё!`(GI]6p'% [jX@"eL [1'9"65ϋHb{E/̐"[jIwcQx Z< ȤML氏 w*0kaFKS.ϳ1 =ܴSNGOSx.*D:YLj@FCH"Hϸi8p ,9 !춢 xPa LX Q,>Ɉ@ PUQʸ @  )9|C:tGSGHhX!ЃY8&5!rP#>zGp<7Sz+x[јȨPœuE(:UMXu'Qr4# ٟt80‡p˔sמ|)3 +H-`$W3HѸ X] C íAM3(U'MVUR PM !҈]8Mg$l[ r:̇17] ぎSt]-=xv}P(xFH`Q(t63Lk!Ȍ2,]jǻF3؈4p]̝بPiڊN:0U x]黁K703,,F˕KbྶQɗiX&|=@Bu/0xS0_F>؃˓ޞ LeцeF@+!".'])>ak>T"e913Qٟґ^Ҁ$|!1I)a-B+="}u]XU.5jEb#PR d{ӌ)+7̨@#nE퐈` a ˒ߠ< >Vؒͺoj#``2hf҂L(M F06ХZ TμK!墍= lp{E^aT(L+SI|ԕzUe fغ3pO@Yd$8jP^Ҵr~d _XtH(Q> Xap*Sc gU ۥ8B؃ジ];݉\Q5k+@t"-ÓL.,C(lT)(4iP \"iSc%|8\qMp#]~:݇af#KgXP2'XOeP\[;g0C3S -(P"lNt9@0)وm"ān&& (03ۻ!^ TLp`(|53a\S)^zm臈t UB2 {\) SS+|jk4g K i56%C EZZ-Uppkp*[>>u)=iњtS^\Cn0޶l8Q>-Bdr{UcZLicܮW)2 iґ޶m& Ro( 4`0j>- GN< b$jv P l6HKл4/X4y舓Sq(横00p`c2l;p afւ&т\d0𠴊d\zQ{Uw`=@{)Zmie@)V{U0q32#x# NYph3歃3v.y4xG "X)QScp̈@IR {}g׏(Ǭ9K"peG Mɢ%̰xp"l6ض0Uz\8 }8b<( v{% lb[(2Vx(bu^3vJ3uP*݂xJx{vx-( Nv5,HJ K;G3Ҩjw, Zkd.QPoP x o=?z-ltΓE5&>2s6-p6 -ɴXW)؆t pp5XZ/\W3[(ZqUT)i5@,>ۺ'{#hɇh',w:n8rQՑL{)f2x$H G@xpā #&`6riSeVWdyIMiS6}Nƃ.Y"6\ 8|MKIlO.;+yvM'M˨9J[׸ܴe(Rzۃ]^Ksp@s\CopB3)RP"4Cw۫mO.!Q"a 1p/z,vt@A/iCWP9syʴ胩Xc2>I*(9El\A6Gf fp` `FR:Hd0 *ܗZԐg41t:&paX9Br4bh&!CHCbcPs-DS"SS2cb4M`-:"(fI!iRY@DI~e0u7y gi Y㣿8[qAd2,E SlPq%( @- 05X.a$8p٘8@l8E>D݋dNX2T.r,.^*Q *x'RMllX #Ґ-A)|C=gZ!A% +Dj=K0aBh#`r lf0S $0IA Ȁ%|I aJ87aG (1c= TChw˜LJa^R[Zŕlz5<*Ԥ@%L'/UJi62jAP@SZNE+)`H..~!W(6 TBC ƚ<ҨbAN#4KZ kSq ,(W='phCUQwC\B b0IdfBV$jEz5b)WȆS'jI#7elП*R@-UAN%8;"ltß^2`-2#)nq#IrT!ApA SAZ,4ەzlLDxJDM R N;)*3R zn^~ (^^`D5-0tsH(3ty\DRe@Ke&¸7 1"hW.rJ| ;Hm ĝik_tNtc _ f'wLn"#x"M\! 0W3{LGPSRxUŋ q&Ϣ_>\2(aRb,1Q#mۺLk \Wו D->K` ӗ`C/-li;YH"V W8bIAP`jXhI pÐLeZ `dDt QQWCODMA!E⭄pyXM Mh2MCl MT ]A+%BL\<!cXIlL;ИŐH0_:5' t' 8/۾[d  E9p\ĀP#4G@U9B+@`؉]E`X4׽5`J"Q0 FABBu0\AA(QʢU!a4PDDLp\Ce-iYb EZĭMZHf}Deޘ&]3#A8(z8<;\D)A<,`0@N S( MMP!, AAVA&R"IINb@&A;K:z\[DzQ=_)M!偏:q &GۼdH ]0, )hIV:UE^BmNV:W UTe!G[69 3H())A!ph!%hA娐 Cc(S~ĕ\)QØI8GD#H* I$HbbHboVX':+!qadzyQ'FM$\ x U(nBh-Ɠ!PK?G؍ "G-F!x-04"7#tQ&޼Qs $lX DQT.1 (?h\D9rATSpl". 'r,B$<#8]M03+ȁp@'zHT}'G7' 8pb%Q/ CX"^{kCu$~LⱻJ\w 2UM$tDyLDTE n @-^BK,8tHXX5AT.C9 L#\X'/;|ٌvn!:n.rcK<8LN N2y D V\R[tQqzAL¬I ^#( `[ 6Xq2 O/O$ N0tFˎl%F aTfefեok,PHdK0bvjkn(DaxO p n4/?;;7AblB ӕ& (+~ר\j 8AHWee1R6Bqզ@ժB3RE Aȗp6EرCT8MPO 22Plxt8&op% "myjDH2J ~ 6A<Ѿ/0BWZNN0)ة~'F.I#c8R@ÊXFoa2yUC+BY5I@t4%U#)-F9lDӀ8@XDoJ:aGq-v .vuJQQ=^Mx~Đk BS؁EDT>P=PõE2M0![5 EBTmK{ .1Q#\/(A"+8 @9׻UP,`H@.5\'<CL;&fA٪/6]1q B\bʟў tw"Dd7QQX`C&D>u*m$!ހdvX2d5؈T|Vn4`PE+0FMPP |_DK {d#H<69U#Ϛ@""TJCs.mju"ӸFw9 E9IHFrK6aqsNisK^ΰi 7dNe@mͭ6Z&jTemZe`e+^^Z M.]%5¶C6A^ D 6Fm\Z7#v9ٗ\ņ rIh,. fMI@$٧/ 3ǎSO $ !È4Rطw.h#, c<hxI iХ%ó㪛j;fK MpjÊ\\%Ȉ*MJ4F0x&2 /;alk5[x3TY`Ž("kĆl"OϥHnI⇗Ƙ¦\rƥr`mIj9,R8*WR7M@" Y& $' 7P4IJ񭮮J6 Eץ2&0׫v AԢʗKpTe_Ө0K;TI|hcM(G\Ɩ6"Ėrv-͛pd"v30U6ʹ6 LB 5,t ^b&Br) i|6#Gz);%j"9"$ԇTKuU> _Iyԇ]7U52o"[)ٝ` +YjšBCr|*;Bpϲ *w7CEe[ \B6|!K%~7FȐ#&wN[8av@Q.jİI:&,kSEk2j-*l.9X+s9  Ѡ]b&9$[XzNuhCkԸM ]lB >Ȁ⣠M|!7w#@ ᛍ` J `p$&Pt¡X (CP-.rQXdD9$\U! T#vQ*VD(0#( %{DXf_XX,&F&0l=hTt2"|K\2E+JdG H!^fL. ȄK"sE$\2 %h?`Nu %A=ymh&d1t R\bjX3ö޼nIt H%y k $KaQuhU;@chE[\}2bFUMvϫse2 o>h h.i܊Jfu}hEDF0E:@й1;Ќ/20M{q iXE 0m,Pr-\A%6Ku4.qDT%*T[d=1 #r,\\ T 3HAh h1hp Lh`{ h&5,"T (~Rn8 !1M>)#ӒLЮYEY60S"a{L 29l.&6X*}`|g p/V_84FG[EC}@Q|XFk$eQiE |``| !a Hp=%T<0\ #Hj2@m#ԠA;I1.g ΡN@ Qٚ)--M(#0Lcj]$q+T|@ĵVpr M›d* ]ė+tw&FDd4;q>%6W, N hd2KK Ä8JK$ z=$hz@YF]e4M8(rnAy+M{X<`샴$TH1h1YY,:ֿ/Bcd&N,oբ \+$Z6 -]hKF23MPQy3y*I/'6`Ԡȏ;/&4Hr c_BxdBd&()cܚ%(>$#+[8K*Ş^ɢl+p޲̞1Y"1p`j`\Ƽ`Ctڥef0\BEXg0|0)ZarY,  j"L6*Xf.'"6H\"7⫴T>Ad3@.6P) ơ7Bl֮| >9mT:3Ƃ`IK)J<=<[%H=L?i. E]@/Y^"N>v+E+B5y(-90=%'"\`.^cEP#SZTh`FW0` oFΔ%xLpvdi$"Ud34ky>&@Ώ|*,nLhXEcP?T,WT%Bآ 9Q1;?Vlc l*~϶B4& #&PS=F*2e+b]~J:4$e,H0Jb/4˽d{P#2 d$"|a*eY`aRʂ#C- FR&HuazPBPC0f/ i~9(-9,6y}XJYNDfl?; x% 2|_&/ZtUGS -r,%/zsΔE,&H, -8, fJ#/Jx#M|JJd`e Cxa"XFF܋y@lPx~P&Ax@5)@5_AXIXg%7%pSHmmtYApka S[ua ;@ N!8(&BH^%J1*lFdoc 1*ep-B-`Hu.n]bE#zg풙KMvb'ϫ K 2EӲ1AO0UiMB#4,&'%88n @PhӚp-'3Nlک @8lHb_%p޷~!7*(8a*xvq%\= T,{z J%jH1u Q+`bf=@cnB&"cǗ.$z-[x 98ht~: 8yf9jx6&¨%?;b!\ö&) \&FbS5oBB\bT/Gl,"H*^rpDHb(b"lNyʀ(B0={:v-v=QE0.V.VK@oF Z VFK`hs!Ia6kmH%/y WPjm ][ R[S}$ \#)``6+0ZFўbD,^kDiXC]R#$3e($d =eK\@)VDV4`)AKX漸$e VmbB5A%8g,@H!GQaݙ-|؝}ˆ׶][Ib ]&2`)\,@rZ_b`"vZ`˥*oj˛^Bu fgs#'3ZQQ]$/\ExbP&/,*]#B Q~զJ~aQ[6`m a= pGBc@S'5Dt)  ‚`Р;2T'᥉Z]jqaB 6i&!0R Bc&@ 140a&#`Mm.mJx&^lhKp2W/z)k+U˶TdW_nRe2jԖhim9` $dAg D ̤ty왘h7Hw[~ ur;n4  HZB NmYg}61ׇiZlbCkf;[@<ͩ<,\ 8 r8`!.j*މH85P`vF)YJՆC9{@D>@(ݷ0SQ za08AB rd%-q w2/QW0EX9)BQ&8'rd)HY#!X$?0 ԫe\BDJ$>p-& yzh, hmA04,}5%x^hN9:ŝ%b94MXO~j "1><%HȒpFyJ"`VفNSr@] _d(vTepa7PkB I1IH[g t ` 0@2qx"__dLK6f5y jъ,MVk:cb33n8& qAhaXa[G&`U}Y 'dNx^hJ'7gBK.^LIB>"KRte*¨ ,|2c*9D zP%FhZ  ^WW ž0/mX¤:aCX w^/!ٓS:VLg);;?dQFA {"b /U'8P q ,7w/V'PEC"iSYnlDZ# 2,;Hy%/mbyܽ%P `8Z|^1Ҙ7W]ocuo.X\QyI^,bj (d rƘQgu,G;.0m/cbXjN&Fj;Hث @x{#cG`iZ`VN1Eja|ć|(carEЗGPt'Y) Kp  0 4 `7 `?~Nu\'7m QX#)w)S<.(1A+J01!#QIA#TeV?#S$29,AK(T . yʂ!j0V&qV/pVY0L%{{U `/g16|\8'&G`1V =f҇X!st) AWp 0v(5 wI r"4 a) agZhZ,R_!H LVRRv+|p3,6(px(So w).@!y6#0#DK2Mǃ"/@DCV3hGXWrUx蔅Ȏ|dsr Z`A'f}Sqp`9`7 7p>8`Q57 0QY'lHPpSCZQ׋ pdN`&*1 mt9An zCvC6A6xYe#@{xk4x,TKSVײ ag@z4=Ag&O-`Cc1W01{/BV@d]YEx@> P$gǀ π9y`pc$!g>05Q~dNA"y-1*[ d6d A[r.IHn\ө.Mf҉<̕5 ɕh&Uw?a!`WeW KVF0~="qq!J0C8 6Xs`FbVe%^N^r 14k=Π  !琨w-0QMC @Jg"T] aꊛ$UR)Hx1.[ZSwTSFtAmpJgV$Q@8q e3SM`6 )b2"A ~.Еq=zFQ.c>2"Zuٱ優EaqjĀ }&p&WE= 0 Iw ِGiKEZC~U 3md*Yp_dQJfsI0"1|LY7SgTZ(x/A8F.T29m%eB[q*  Bo _za;,q9 iFAAh#u2XN/1XxvpajitpPg* z.0Ϛ9r#א:*5ךۊ (""*wx!*VCUS>6z*e7!^D15x3U--Í'5@^QRq>pg 3'Z!C9`rK2:^m/³@^踗+jڛ%Npɳ }* p !$c _1#!,ڋ <6jm*ɜՆeLUwoW6? u nzDm?ag  Deq+$q0[uS7 c[q3/!$ JƁ/[,caƱzXh1 1bo&spYL&s` }# jKGZS@N!Q8#* ,Bn̩*2 [-5F7r6 R^/1K) a70@U3̓Q u @@rq@zK̫7h>L _ qQ'2n=8c1G%%lzmСE #,.; &eRsrۨ )<$ }DN -N'Q _.(<8^T[L}hx+Iw+)'2dŅ'fM.nDЈ%ma9G0u[m"_M/VAC[=1>PH28,~ 15Y⑺w3GEq t! ttb2r@بNLz @n}S#ɪ^B-r-A[Uy@ez+'09*V1 q@*rO!2,1a6>WPmaIE"zcϜ;I10IE>}nsMʗ NXV L? S@)!W$O"Щ~D!+@4%HbS-A?/8eW]2UN[=\?SOx>(Eo1DͩCOv w/(:%{?&0 QFq3 c?QOzS #H A .dx A]Zm5n+q"ҥ똶gA}1eç ,XѡCϟ!,8 ZIWJB DРAU&zJ&i7]bۖ-vڴ98wnvV OHA#Ѐ`D4Qb`6 evn8bĉ^ʛ.]#82g ? 41Lʁ09L 3ZRfNBCئ%՝%,Рj;n$@%"?6Dsbx% f8,0@^80bevJHȉAA F.RZYTF}4*}tiK$1$4U fxOHr\uU@yIXp!Z ':( )?'$E mJW.Uۀ7aoIƓMCC ߨe|0C -4n!3;q ]Xn gȖ=`sQ P ܁3L(c( e8;2k}w)b` 1[&:eAexz TPҳC,wȇ"|Y¬k}"`D3FŸg@ l`Mf",wc@7 pBB 5*X@ )PK T8 D#>a;Qʠָ!]]frgΉLd10:bB%$>nLcT%1> ClVe/h1!4 B69"s#HR<$Hqbluk&|k$W!B)?[H*% ,}`%0!]~YB/Le9E*`j(p XAC:wh@H$jfSsPrĈsP͜J 3c1u!KlÕ%d_$ X  Jt9)8?han0dž!KМhH R%-$E>EF;kJdnJK*BA~"Q@8# U+]r:P.-Z5T p(.`XL@!e;H q` aA͎/9JH¸#*l!L%HX.! ;Hr䜍#H/QBuJeplasf` ]vgE}rI d N :(GٽĆtpUg;hvG5$!.l(0m҄v#QB硫|Rq9)˦ :uxv%>*qB%%^ȼ*WO_G+Q1Y18,Ї6uV鄔/KfsvfD0GDnSc!Pl# ?34) 8߃\';=Y#s(DQy.HD,7t)I'8L, 8q5VxbC]K]3\(q7BţU4{BLGD$ig\rшL<[bV_ 5Zã bP< "0VB`#Ҍw szj0hrƈ7"B}r 1!( z1SЊBK ( X+8SC o ) i$r[ C`# ' +25avs*P  `PY!^Ю T^ qqpiPA[Vk頫H.h(=/y]ȴ3А$ 5R1aM'PKJ,s8d'(x*ѱ; =)hPÅ Q+PYC*sD?0nBGBs ˊG1p:@@3SЃ@,)xغ}=P!?:-DIHƤ35>Шһ@.>4s.@X++ EKV!.@ ;;t T+I)TDm~r"5- OʂEL@Wυ@98t Y -h0:XԃE]s0XfkEX`= s>s> ig$4skveE.VJ90^q1hwO XY EC޳[ x P✸Үҝap<8< i4=JfbB%l]ܙebjh7 ȤfXy8Aڄjj mx<2ܠi˜hՅ Ԋs]l^%3ȃ<%XRgYiGcF*"%l|[Ѓ)<xDVjqr3M6#8vx^,0SGd!d!Ԍ'`^\XrNdaѓXx[x,^U2(;Ɓ(HX1ɣE^$o0 68/s@!h6zFY@L؆s09x`! ^ ^p!P]Cl6ʋ#xeRag5aHNx)>o ( x3l -/ dYc@L`Hz^gM}sT9H@`)XQ.wpO*XrO_%A\W D o_A 9VO&/r$)"((vLx>À YׄuP25I.+oh`  4 .8`"ŊA :Bp1F,C $@XC $aCA >t6!ʙs-w@dQ"A 3*'OfMv-Zyf=GϙZsO9)ϑ P0$81b f!2I:-zte"GiA` #| < ;N08  Ѽd+_y  < #X@)`HOp@"˔}M3ZAgxfAur09"9 7'< r\ 3q'όZUZf㎊3z@]|ј_ ^)6PIJ #X65i4Qe3s\4Q0 0BqS f`q, 6 u fGxLp 6|"vA}pC +|B $H ̂s΁3N”'|rS#<PDZiG(ZaM4AXy57⌯+ث34 r+tq h-nt+"z.tk\Ic 4PMZ@ lb$H9uQ{d* d{c,uYJ&BРBAY@ 9Lg#@(`O4?9ɥ*SՈ "qܧ@!`DNUq Y'`z`JT!|8'”mj[AI# w 4@``DL4`|!b>`l N( ISX =t8)48='3N>3 x%Ak @53S+1?Iӄ.aF!:9AVF~J0 =pa)pS> 9 3hi-w_<7 >(9q9 3`ժ)fk*6AK$ 0fIC Di&쀈X@\cX0Od@q yEB}&Dme<0L5#*Z Uв  ԄB3YxBT7f7͓bO*1B\e;Z$ewKN9@I`+gqDP JNҙ s@3jMD %V(ѣߗ( 0@ p2` NB%E@Yn|34^ kXݙx%Bh;-s&+eh'1 .bn1Cn4!Br8ӇKA6'pH`.&p@C>BQmA\0Ӂ(; 3$=FKdla⃓ LW .> cY%x,SxBc{O1(3 lxE~WpA Wns \B<bnw3π%8I*Ss `@K@. #!NV Hq$"A ]BDF?8=6T!{ H Z[ _X@@ƔSa]K]h;h\ ͥ@d5M@`Ay`E,~X @$G N<=GL n@4Ep!PUATHb BA!!`( LESHk1P@3@KI9аC՟J+ @]]ltJb!TNh&@FDJē0d@80QeD.T;BUuHॴ3р- ƴ A M#ItD \$AĩAtA<,b4uq1.*艶A,]eaΩt  \ؘ!E1 SCFA͟3_ j$$b"\qPNČp!b| A@:Jl&VS6GJEpAdHj@@hć mwPTA0P]QHA0WAۙJKG qd-AA $|7H J!5I |Yj@o@6_4@7@Ptݧ3*4B8$FZRY Weyх&m FEbeȝhbj̚TePbI.(g:Ǎ7uU) 0*e`y\@` $@L#,lhGa'P*(va4Dp'`lDj^.PlFY'E@X@_] J.V`NbHƛs2|UƵ& mUZ#bfoDT 4J8kLKކF đDTS^=Yr.@ pRƆ Dψ_$ux%K'čNoVO뢄IzmkP`e:N hgx&4d~|pRuFUK1Fee Wn h0D凜@@ L4|F !LXꜤB:hYܑ1*J$L^_K予a,0"p.'+hEP QA"UMy&n]*J/g0JAlB)pE`%5d;"*g8-JX4%u-VƜ Nr :L7#Tq!Hâ<^\J*ݬ úo1blsOgD]9߸F*a9S-'^t ,6G*>d|@'C/*ǙpJrAHNjDK+smrh@le}9UNWU CFc"mdmtboAdAT @|B0t$aSPR$W @ 4 e,46PC_oU7O @0#l-&-&j14g4JYVFBNĻ:@Xjt!3g@r"5A`y@b|(OiT q%!'1JEgLʷ󂎆4W߰8#BJT3Eş%bGB A Pvn+&NmV6E{wnI{-%8X`9m^ygl A%ApMBd/N 1QS s dN u$+@l\EH@f쫥E c.]#8襐 YԃȌ\I_yH=&xNt@G8JPY8g0(,E9Ȓxמl8@PfdtAՍwƗv 2ƸbMGa47BUjhZ} ߕΌlpYsax$aOs@rC/ ,( D@% _NohDwF }H\B,`uC iُ$7_/@md 1Grp@ INI`/~7B $BUn"g|F75Oc`y6=*H,b 7; #fl6I@{ĀǜbR|@@rj2F ;J11gh\&ܔ0z#'dVFzX 7'; :2Iȋ< yl&C4{ZNQ3Ip_} 1̸FT;v|7%&@ d'}g3_ج>_A@ \R_ `_tD;xqh Ko)Z`C+Ah@F?AZ'U\ɾ$@TĔ1QaA. @)`` `J3#s'OZBMr 4Б3qLӅ 5  F(h3j |uk%q խ[Ƶu̙3sӠ+Kf!A (L,tԞ0e:vFx`Aw(HL>㙣ѣ0%6Ci" @` Yz, ;*1$q"b)@~L# I7 |BfU5k–zJ$ 7@6( @ 0'fB+ 2tb=>g'.z&+S@ *d#,̅l$ zݐM.ym@{ - " J^ÌΌ<%Pp@ȇFȌ) rt^B~-"t#f *7mHT,+ Q.đAq,đvQ&考B5'"L\RJ4l!5nh؁0Mh1 ,@ޝ7(G`ѡ0`xώbGJ=JL!7I$$[' i8{)!fpU-<`Ȁ; (MN * B ڕzŀs qigő8+H0fXbhrlB`,Q@ f$`݂rq*mMTA&!ı@g2%34h8.@>LKǠ9! c (Hf'%vrQq vViC*ar0 V.h~GhWĦ>pqR6e\";H 7o~1`J^҆6!b&\dQIdEM A F8: *(r x \ 'zn琡`O @]<Z)gqHj||̐O !6B70f=)h+eƎx"&?dr`\!d+rK`F`JF@ B"-v!&'>D/8ft`ʒg `c!n ("`ll! #I=nb( Vеrqb,PF,xP*TDC>ٚ p AjAl% b b :@" gƘ) !p0bx3$ "h "dGY:B<6"n6rp#[F'LirN"!H Rx+[x"!!2! h!c;"0gѓj!gP4og&pbG.춐ɮ M 1p !^<.(;¸@fq솤FT8z- nAPA -Ht!p|B&n1',x># ^gӖ)@fjҀ0 #\@HS Bbv ,` >@/L)I%c? L'k `tAHRu@ ڋVp!Ek1Eܲ-gwz"2 $"(PФ(!Pe BsEC`w'b'I4SB>fJ/g#pP8* l?P"P MA !`Gh,&`?!,e9'?19r$;-pA 'f4$*g&`B3P2!o,` N4[*\8B98 !HA 2,`81nF CҜ$.  D+Q.oU(=CAh^q=1 b!& 2nyP{X%@@!\5-B"#G.` "a Kha83N"[!'@)TS O[2?Lyz"y Հv$65ef!T0^+c:H5SjI9E?CQBI`&HH8rdGPA G&5$TWˮ'V6:*ʁrU E%:h`P)>r*!_ Dp*H (Է: (Uq'20o bUWC M SHA x)m1"'2 O/! #UcuQb! c |R[b313"GQfac Is q lTQ&ԨM.`0@`AҪ#7P֦M1/BPC J@"bIq:l.Bm Ó ` bҼw3" >. puHnjhSt$":#PT@utA+dbۤ]uVoZ!8oM a(ˡl 4qww;,qL 20gv&#t!:^K3ŕ 6r Q e<[t6plM4*'hK0nĔt ` |.֦`/U bQp.D#ز>`vQ;Dc4FYIhb `o ^Qq2>{2!?8*8(tFy*H/g4][<\ֈZlpPa^}/y-8kW]$q17.(^oUcƜloT+µ#'btwS #`z>:C6Y4&@qPi&,aL b^Ydm$|nzyTD ;D[xgtVY_Vmh}ng#Κ;\Na Ѳ(G$-p<,:1/`(B. ,tf jECovQ"Qm7!**ioJ,"E gpZSp!'c'F03? YH+. 7ϴO~w2# HA  @2@> GH XŀyKb9ڃ3xopj9hAb'rˑRAfX?0H?i3sR 2@2A*D@揌` " 8zU>"X6" 6.[.x,*4~W3-&G!WVep~a# Z%nz"$2  @ t_!;la`fJ:!QZfV{̔'d^t#-✩\h`xѸuuz3(}DIi֡У hŝVku 0! @dP"֖ B-"-YXTB! Ö!zUUgyۂ.FQU}g3Z JShe#`&]Qmg |PC ڄbGNW&>?nR)q"Qb4B&꫹(0%O[^߲oܑWH dz= L|grpRlKFp`vf2M|hF "!na c+M}{|9` 82lr0@f6N>o^?'<]Ϳȯ[C'_+U;C\-p4wv ZA #q$Ч';@ @fH4;=>Fh%B]^,!<)+g{F' 9BJԭa;м\vZ\& Ҋa0h)SX]L5 a`eˈMX6r6mpXTH[N>}&6ԗs_ĢK7HIg=eЪpGE8Ц 7(ۏϨHR!!D7B}1Ae(Xc0&I(rh#PF0 +jJ,*.(f$EPD&#@)}gxZBjؒ$=sE!}Ib=AF=\K(H9c>|6Y6fgtADžxy.- ڢA,SYwMBeJL,4zmG|`!X|*+tj뭷%bYQH(]jomCq}FAcfɉ¦0BN& rֆ+fr_'PYOP/B*Ij2&Ii$s/@f |DG{hhMJi.h0)z1ǂ  k_)s|$4BFms U#ҚAtGㆋJp6;4e˫eb jr@pJ!t7d޵{d|m,hdC! 2gխ|AdK=D% }4I7?|RwAkP)N7qfz9A)Ņc#$-cO W曕ZhOħ c҆g4.d/*G0 8F5A,:UIU6e;9\J w+֪IXEx^(Ez۞wr=UMl$1NvƀWBbI@ZȊ$G ZeQXr܉R!HA=MHOȦ=)qHDdhQK#lQj +!O Γ+%'StN=gld"ɀmr$6Jй2T&,ZcT{ly˿wf0+:̐VDLJA?Q9EhfMd)g.mQo  ;_OXpff6=\ 251۸즆:ޗ8rݍG3bg{*Ԙz 3 .㣲<5h y)7qѻ&d!4Ta5 Y m(*ϯZϢOS`VdCN0J̙hE!,(ى+:ݠnf3 3 ցuأNHTHP$ Efe\,gaZ}ҡ>ezSg i}k÷X)3}*[/ D_ZbW*F"rs05]vEHfpI8+g' {Q}60;X0'I|;];錂vD A6f`+ڸW%k٨;1XjW_90RP2_ xN6Tjwrᡪ{QYvi$e$X? p4g,=x}`lp} "{,C#HzN8ID1.5f#Nh *X5﮳mKqd>t/A:.V:|=ヷ|!b&v96fpߴo'AZpAycd6CcBVs4bF9e#pHoX`/nv!@)r8[s#$s)zvmH6SQS"u{_MLtAa$EhuW[~"!no$gwvQ@lOopUds3 T,_4at3f""j&*G #yw.Y8n$ad+%xRqt8XWtOyw<`3u+Mt!MM<6[[ԂX"0f3Z'./xf\}|47jP`S7WSC7s3F/c‧We@e(DL]86` Qpyf0:6'n;"Dm07׆ЇE~+%x81"aNEbH=qv4P6~|@?>ASJhaR6Q耪Qd0"2&ZҋߠQqWg,8WBq8$#)rV)X D%aBWT=6Pb$!Uɤ,Qk5^'n'X">a<%2.A[DDWsXZE`C<b"+~tIq/ k. 'f-w t]UdC"@s`5`uU=5nHTH OU%b+ nVR>˔{Ry2_7MȱuxQ E"2o_7v9s#"S-3-/c x2*Bp cPgu"t!>;8#Ys5"ҙ7CKn5uєaMÕ}o EGT>P$1x.蟁BaCM~R$4 (%nԢIMa߸bm)YՄ1PM6L8!Y$Qe$q}8EN~19! {`'IVI3$q 6^ `ZcZA! dd  AbKV/RtKvI|6*L5A MTnZHQ4ҳEMTਹg^Hi-ʊ1,*U4E+b_NX4@q<>VH}w<9P <אBs&"#ŦyiFRR:Z#?TYĜ3T)w2"Ƃ[ %ݵ5NGMZ=Qa4Cp,R&tEDElˁ.ʳ0Y/DH$8 km࣐񍡢) d, I0e@ c?r*<ds0@56gRَLG#h*d> p[(%et\A6vMDMMLPW>PdMIm;$ZpX+kQ1L/+\㥒 q躮 };`t?_]ؖ_VS)aĻ+zvx+M =,i?&)*ڧ|{A9?MbSERI!վ].e1`O$ $Gp{!׀j.c0NVdӊ"VNdk  >@&2teBx$Ym Dõt{GIT3d+J5ijd`85FCGK P&%!EX&ueO8&5wNaeX0q+9vLJEm6kkqX{|ac]ȌAs$(pȲm0h2.m`DhH})VzKPuhc/ cל jP@Izhԇ  ۪0^B"K1Ezq Ю)P%h]Ј3RnQE&(SJdOf}Lߘ|%s$'V?z@B%'w@`mm4Ob$Kdx@B" }37 S&A# A E@aPLA11>zQ8[2#>qP)Θ=tJh447TɣZ6e[$F;d4P,mR]ұ{q̬H!Nңl^~Bх c "nB:4-b yB ="*$%Q/A`%n$;nfMG ,MJ( ތۊ1re =EPq;ǡ` m5 iE`?HK@C3#bbi, F?5NmBzw1҇D#V"ABQ~eUQq[9W,hVRuAe=DnƁ!nz6kEɂS_!6>i{ksuzLtA>V Z a,b\~q( Il0v `:C 4VVr0AThm` ^f*0[/ꆎi; TN O+%ڛO5gƱ'=j(bSYHH0q0Vh@6 iR  SaX} RRx /_|pic&Ile#ɻ6EPHca(B' :R 0428p@X 0U Sm˗/[fk (€rJERExbREpXZ.l`[7A8 fxɍU!լ1Fҵ}rǗg`[65OR(8&o`1W8.ezRҘyS OAkC6p{lg)ԟPS[tLh28( l+68b:`@ 7hb `LKG{!F7Npl:~+A]!9B\I3Nz})5uj/hHB ';G5pZD+a^]R^fL9# +CML¤ɴ= Q]Z6lAbDg2LzbNXF|{XA> ӓHd-}IdJBQ24.rr@ oml3 Xd! HH, +T"F"1[̸I7edė 3gC֋p Q4S3$QE8$$;A畷KD,j1:Ӥ4yŠ@;`1w"=]6ɞؽy}tR*N:VG H`IP$,rSz%tӝ4U"8DzsT)d^| DN 8$ӆ5dr)ZЇ>xX!: ;WD&@e\TCAyԈqStDA휀'NGN0AC۔d G7uԂ26Şq@-yDMu~ *!Ru·Av(P-,8RRFG;mK*tݝB${LEoS'jLR u@6beCWj cZ).aeA[<9NXr-!8TCYy1vwQˬ8FP:Oͦ-FzpeBfV4Bd_t Ħ8#HF<;m. 2`XX$MhBN뀰~B}݉:``p( aDR-]v4PN͛wjt|jlA(H)2E^)LQHz< E/ D,81^^p3o|7‡>-c߮v__kP1//P(L/.$tti!-0BuȺ*RØ)!ڙ 0xpI <0,+@"ХCz ȣn3)3ɚ=B9 ̈t[2 .#4; :.  ( P% ++\qXrrq8&014B4\>3t3B8/#Xt#?:t(@Lh}2{ЇXФ>ȆIby #@6'Pj㠈xQ `*!D{] ( 8Ȅ|c胾[upz!r"pC+SLBuN#xlyK\{kp}BPht (QH2 hԊ+#hEE90MJØA1E9 -iAnjgT/eP%냨x$k$'H4= wtHps}C7l>ɴ0n0Kt;$ I}X(++R; t`Ir胾Ї9V@u{HT}LN ؀ D -ۢ,0˲W I6 `L2 "0XO IBH-P rƐ P (!-XLD%H^XH04È4… uCiiL؅UeuQm/LQ " ?@N//ЇLho'ч|ЩI_(aY T ڰvYꨉ&xi RX$ BϘ 8!>| j QP""H3?K=سc-P},>(CU`>>Q|Ze^Umg8ECN$5 ӂlBV/_p|a´"bHҽxs8} 8b:@Sy2O"cRq낉q-V-H)>"BS=O>0PSmPU*d/CL=Ճ<Z5Ȫq}XXEPN^ڗ|aeRyXL+`m 9P;| KXȭ}002˺˻}+"8*̒ J&h$4 R*<K# Am(DXN^YCLY.$䋾],G a.-tCB̞u5'g8E+¯>ȄÉjZ=l9"%Du9d@s~ _^ u@hXư1Ju.;*@#jL#uA* w*EOFB($'TTԥPרP UH& R C DR4ݵćb6f|I Q̼ YXbr@cXc r30rPzX z)y.p B3Fbo@2 "D& 3gӅ=0"乙C1`䶈EP`aJn x9!`mR5@*RNeHI]FI8Ӆ^؛PU>L_fd^acjw_F'NeqXU}#>c8:N>+>8{T=2acևuax9 =^FP#A{.w&+iB""}2,x܊B P0#=a 1F6Tl2`scؘؚX99gpmXW}n }Cungx\}nnQИMnU~[kٹrGd:|sbH{LGxO^PiMNf|X2P(9Zd2hk}lApOHԅ0Rҙ搫c;豐Fq&h9Kb<Ȋd Qv؍P/|>/wU~% S86P8whs[0<ὅ>6&tLPć>^02ApgHqxA"22VuᨣH;q:8+0x9 e.QdvX.@BF25 sgXQU5s08W'x^8w=8sJYn pjyxo >8{>kA8e׃T33c]p[oar"$]^}I@@igr8VX9woTjl^اP ` B  |4i[(&}yTƮw_bq\ ̗>gQxxO|OX7UnGҤ7k@=GH}H8zouS@.%X?k(k8]G]_yd 8.qσ8y %^y8FɉH1H`:sz џǧ $63p6BG5e$h$54Tq@]Ǯ}+i$Ȕvl%]VƄ9S'П<>ҔNNt))7q'ܷud0ct}A>J`gL9䊒8^8v J+l:g΁ԧ/u,@ Tv$g$ RAӦfTA 0|Ѥ n۔)#qc&X(AtL:)$Q0H0[6}&^i 9( }#g,iU. u Q) 4 KDVD`\ $uV[䑇h I0 ^_V}>[=H>䐸G#V EA@IGt ۚE@G!w}d0]҉e`Gh22{Z1{⋈ x>=3j1r@w !+PB>H$ 7$1| +H;i9R-J4Fx3Du+_$eeEnec.pE]\ԕA1osd4i19Pp<ۛq vl0ɳ=s)gqt0"̒VH&PK*҉|`AϜ .FJ+$kM"@P8MC:FP @HA=@f M7Qn4vO}@jl"Uv.Lk#zfx:L C% }ϝ ČD8 do':4s\F((ʐrAiQܱMh[̼L1s l ˺%n6yzV#~Zt`k<#1UmUr "( Ҁ5N@,^Y<9Вl)nr[('o _nA2E*VFZ@[J7, YS0s.pA6b bIuQt@51k7=nEf@TԙI+K1v*AZ4y' V(ЄY}N8HRI8N1R9 7m$!XTD׀V`.Xg.EHi q8 T^A#AM { 0jD9u2D,#Bkh!d ml@|s#: D H, %J pGwB8%EUAq.\Gy H dDƈ4⠎L0 T9#m԰ X| D9J#t#(+b p,}Nn "ejhA*4]/3M&2ZS+(8AǝusAr3 W8a̸-,axS%:"8qT=HF7Cʍ= ~6p #I<zPL/@ GT"%yA.Z\(GӰN$"ca- :ЁI\"0p ؈ l&L 'XV ip&'ZH'i݈Fʐe!j(ħxLule@I\SL$d1iwԙ!3YAf)S$5 I.RqzN mhP»ѶnNx[\ KAuA0@!$.7Q0S%h,(@WHd#r֞l@C!jCҧ @K .`w"j@f9\S GH,=A)PNASU2A ):TD<0)h,FLR<@ ֑vM:XA&ia*zl0qD[Jr&=ڃpM/y42-7 8Vv7| !}fB OSBr? -sh`Q "xW@ V;orW|aN{:1$AP9C5ΡyX)hJSq|cOdNI;Iµ>ocoCJ jey_F?]<1~d##*, . kܴTLh u7G`>HڈUH?gj Pcfbd?HF6jOd63(A:"' HTh@L'xB*1t)]u.|C<24@45zP)ÉHAhY |Q,^H8mDVEL:A9Gh&Y*qJ'zQy]PΖh4,JuPZǥxEdBt׽O:d_ć6FĀ Q]AuĩH~7P吂D܀܂ɓ ~ FUEyNY@EE34(9`:.19ুEiCJ|È  |a45ǜϳ 0"I!FiUh҂y9iX)\{؂EĞE@|9!H6؂$ЁF`@XPk0BȒ¹#a hpi3i/[OExԕ/ˆ$A @1 @@BdBQ)YONхAWzNL bs\^ $'lf/_H h 1.X,ڑ8],-~/]S \, lȡDž@ 0UJ(  l@7nXPD5܏M&@ +^yJ{DU\y9|B(hA8#1 AЌiO(p+5[ޅy R| a b}ID`c{-}-fFZIeeE5a ,ʯԊXMDqPW܀ <͢h@Lթ[&` pFօb_Z P}^!b2F+GD] &5|($oFHYXj. JdSe@70rSqt#Z*iğgAAjyF(Ԓ|J "V[gF #4LF!hAjƑXIȒGC,A$UhOIV]D"B62A "z)I9, $(hKd 9,)X,x 4QvN EV,ݹbe8QV|t8H2VD,(/4#x.8$G6N1T&+ `` ( @hKj@^\d 0 .i)ᬥGُE$j<*u[L&TI@ԉ4XAE)Tta) @/,.0 :^Eaz%28Ձ.i$<]Hdcϒ9H 0BD $#j&Ar ڸH`g@#@olOwk 2]Yg&/c\D'#J%Yj $5o nFn$D2:XE  ?D IM@pͰγcC609pD¯}C:7C*ԙT"$ABaKs]uf`ݎ`PEEVz1`JpI:DBf 9ˏ |{AF@2*@&u,.ĥďO{`g/)3$Dh[ąp[ħbtt v(D,C>:5bM? LJ/8L< `|d3sAhC`>2&NBC3γf"2n/LPJ4BeAxI@|sAbx@Ȥ`it}>t6C&l$/OƂ-XFb*)XW R[m$]SB'˩{ f*4m,H]D0I*i%Ysb[sJ`?ʰ$E 1D}=D$ҫD(DUB3D`p # ҄|K Ao #e{iR&+`i(A6LZĿB~ۏyB{k0'k`o$яdex&e|Ώ@B|CD 韭?5VWy;Ã9#`'y5tV@0: ;3;0x2@#%t(s$ 0 ): py9{ TRLXE -b\%1BF}i0ؐB,-)6ܒehXHt$"ee]̦ΞС[ E[2ܵ"KzqPiז)b%͐Vcu =|8uٲ#@:suN\AT +\E7ty.qL2Ry]8kl m.GB}Yo f6!Lb#PX 0¡#2H&@@%L`.@! Fʋ$` .Br *.bɾjΪKpˠc.rL :j$ :0( %p5"!5۬5A el"@ ZQ$Q͖̲Z+_.:RJ@BcͪlkΞ:[BGv&h,"?$A w$+L"f`eH8lLGI|2AIHp) ZѪ2)$+` 5@u9a BBhZEِlv*WjUX#2Ї!Hkxg3d!Dd mm5&2{ax+ȪQ.iD,|ql4hW5ฆpm&r:%!)`5$E 8 ՋG@"0u[ j&ea:m s$5e!->mc Nb`ܬ0N|qDc^"R pEi^"$3jњbvh _cyL{/b(j@, ᡐ*KGH1<pvk=EudPCT@VVtyq^2ш4% :*bxcTEA/{#0 O  # HS"R/xHEnȾJ j;Nʹ OQ궅aIo+b`\"M;U+Ga]iX\/a߽ ^ecëSe2bef6U=hG/l##;dGU`n1| y+RN4,<[:L MEJ\^d ^f2a$ JA! SdQ gbHEp%`<2Vr7 F;96JV q0#gPjͬ$#֢_ةRGeJc,A<`WH+|u~9$# 49r,2Ȉ$@J4v4{JcA;-vŐ&"_ y@@t Њ(H sB/P \#!~  'p|xv:B`JvP$ PĂlbk,n-h#bp#7E0fP0~ik0b5XP|ꈋcu 3C;%fSFR_1!88+j*L4$5~N;AAAjbvƠ#` tn=fK H m *bBaPЕ1j/x" b` gIr"(O w#APA> H"h*N)Di#ڂID"b.:"nE XO$ "#DVB#V$!.Bt%T%TR #3E:ԮC C9:V0ڠoNŤBeCSJ aLA ڼ)wE>~'@OX hgZe6pI>(} 9,gƐn' BI>(!.B< D >,D!MBl.B K}jTH)K"Ђ0tc }PTXaf0(#B1 E:no Roц*AuVG3\2j515#8C"/BNA)v ) $`) @>3$祓. a^1ݚGCJDW E"F}`vl aL{ o7P x0Tf.2AAn /%G/<ىM,ĦPd,tl )s."- }f*R| 4j7$QҹB0l.6CWtX3:cXRlIUYԮ9U:XYwtt1@va"lG[( d`I ;Q@@ JaF ez 0_LDR4!Ŵb!RJ8Bt$>"i#/bFvl$ z\3$B5uQAHXv Jeca =ćh&Fj/Oz2Ɨ'B @0 .-,&Uc"l}R2#4a"B#j-Î"Ȁ RؑK@ވ0 Vz`|#܇a-b#l&wQx̴wS$'#"xW; ` "u >]M͐hn>jFf/770Y!ٯS} &b-^@"VB1Anl 4~ql ؖ='S!nbA ˪k:tO"s>4Yf/ ҉ |@+B!'Z:B2\#̀pXJ@:b5]/W)4bA`S; Ƞ&Ŭ |AڀJ\b.7 'zwiM/F3J2+J%i"4>+ PDk@ — d(f0CB , N(O~Ve+W9T9Cnr $a<8Nz%Ym1%c0 _44%$JdXAaƒd{W6 |'3Y` >AB %@ JL| CmA:K6'зK"4:p"ذtpw }0qMC ⣺]`xGJ 0:хX@.B/b E>Oh䩼uKQ0@NޢPXU C# 1Zʻj)jNZu$DtVRܖz\.A:Tž6D e%8):Xn ƎW$.vv`4 7 i \=.Bc @X`>aLx'9"6LsװHn G JI$s)R4X`^C{µJ .Hբ={idž=j2]kXXTꊾ)fr)3{ S2AuڢRC-*j#vNાd)nI$ :uCkYXH:pC'Zlȑk@PRK$8p&g<LɐO8Pݺ׮kV0BO8@3G$($l1SNt0A6$͔.;&ЗaO^) p@q، 4"jͩv   @,XPB4" Sh cP;v:mړE +e耧H(BZCEC" {! Š@'9] < 41 C-":9 $OB=ڂOIJ8 8 dOO=NCeORR9%9|C#g PcHYVfUZlƝ>]`I &P ZQH_b@MXKs C 4РgCi 80fBΊZ 4Bmd @,Pp7TOd o@Av~uxڞ^z}_[eXQamXƁ@(kH}f#߄f8%(qBˀ \+0$R҆-6)O2b :\'5ꀳ O M(% 2)LUśf"'ZM1'ILg&l`@( b'sE( @v4X& .5K\^ߨ18h Cj[q) i%iB  i0 4S%#}nS|k@ppy! Id.B5QDyZ_(_vM2oi:BaX@e/F=p$e:*ό2Zj"ҔS*>F"O@apqlܠ{B #wp =yIG>ծiK mPc {~cYA_Ey0 6BWPDbaE6hZ2HB @B|MĚ%ԇ"[%9[q!Y6i%Ȑ$>YGRC Ly@n HubX6I lS؂xipBoNPC—H\A0F z4js:UM.6QEܬW`R޼oq@S'!A JI';$'9ɭGqx(=< eXk{#. d@wwg~ y"+P(v#B&T l@!A6䱌?-XLP$EM#`(d!oz0!Ғn{0D=zDC1 =T͆ę3H Y% QHh H%@TVlv &?9S'LFd"X VC,50d"[jqV>bمc$Kih@9oAEș`W xC>ҡzE<4m21'P9npH. *4֑ Q G/P¿U'"SaQa\$#TENB'օu%7d>A.)ġ>U1 }CP:",#oɄ;"2W|x߀ȃ@>%ޟɗyvհEK,uf 'nze'[.2p0)">% t@r? ed()٠/Ms30"G#ߐ M@C?<?bgqo%00r U8 sz1_ #@EN@m $W% +!E8Qa#) Sz1sDuzHH{( A(9le $> 8A0"0!0R!@5(% d - d.Vq0xq&V1jV18cc ΐ jHr [ht >TMh0хS2yr\p VD?m)VdHFzч#z'a(6 `CY;Cpd3aV('uRʧ0n(p> ^Qzq`)Rzf..e pX N28 `pm"(d }/Ҁ)"8 W~1Mt {iEA!?# t5\ MZsubB&?]9`9$4(\` 0|0{ C%ǹ%,t#)L8 O=^腎fsTP4CXi(G#7NJ4pgG>k#7|D_AUxc,3pe&Y3VUTY=ʷVB#p͓!9n•0" 2ndQ2U#LhZ^ @~730`<ZZtLAנ,L 4߱73@|W5!@A`3 $Z #! pvZ1v9 u&1 mRDp {p  :#q E ELxi߀@49%7 P?M*G|nmfT7mB_9fPnA($ ;_C@6g:@p.H7<ƓcM<c.03pȔ!~.!YIWs!ژ/` @Phg E.g6NeZ} !0:?8CQR! Π%TS5cQkogC;% 0Djp \i&%\bi qOґ\}M [Yy 7xsm!):c  fQ`c%RM ed==iwI+!!b/sf' A 7E\fMQNUF?0B+"@filȱmz܋#v |i0Y]ve+3p 1]"![bZ[&%+%]`:!ZvEBQ#ַ1YR:C_xw#K;l+f-?PpcISI~q >!! e ?RVp#!m"@!A#ڨ/{`v!6lqZj  #82KR |"Rh p$@  @54Qrg4TdֵcUp :]xחv'y\C  pNO?aEnn.'1T9zd8^) `;aH@؊O, M<: p2u/.>rN8LuRB- Ȱ*Nٱ:e a˙{(-l:I4 Bs`c:’jZ>)!+oxRy\БbYeq7@7pBV@r0R{=>`B={Ӡ"Mp 2!T<@"!'*9 +mS 2'R"Re!#7M vgiU/&#Q VQ2|f)N.a$@s@J7l!y~VP?!t6Mu?"_1X,VCRwxLIW( 2/!]\Ky!H- –tg!!d*2/t9Q h!J& E=}lFVp!M :"N #W0g!8< CFptSRB :|r!1@صktCObĈ(>F#ڈVЗԪ=|a0V* XSpAdɦ=i`܋ŨaVp$(S̘fܧϗA P$1ơ"ZG" h:M5`28a"D̡2h4:X ]0K9+c2D2谅#Ekc WsuYFp2I O20kN`Hp6 EOea%sCGuSN92r(,n Vt[ni<򥛮fɂzz'$(/r+ #/)(q"ϸ^Op󮫡vh«3'P tРsc$8R@SγD崵Q= 8~mM7j7|`UR`A,TXۍl|azeg{LIl&@ `[B9a 2dS, 2VlVC'kF c&j! E#`ȡ,AS3X@!e.3%-i'>tV-)HG<щN ^Pwk\c@0i^C^)s$R3 }ft))&̂ʐMKpSnjsc)u;V(4D:I!_“ש\1KDShb*%Qr0 a>(-4B$%4TM%]ه 98A2A)C I9}p@?4hdk䃄382 2р 8(͈N!͛";30pLsk&RI@I=V-RX^0 uzSB9*0 9>cH@:zb]G(PAj\;αl,Qi+v/Z1GX0j[^3~c HBД^j:hWIűA*ۘ#6`(aM90FCc‶kxi1hbzȁX (2280LtiND,m 0mZNȭ"o@ [\J@AЂBs_ F[fr&e i pB!5j\AXgFGcNF0JLذp@H Q H*j#YYvǿPD_>ʞe:> +L +@ x#HA2L0Y]<3LAɂ> #1h? prgWĠD20+l3t(UԚ*F? @@Ž k^+HpG [u<( 5 0\Q̌OI*Q$ I)- /hU%(zـ} @P3)9YH;\YQR  V7u~cLHN>I FSaQ0SB(ߛS P҇J3>p˘$)=NRϺ%.kϢϓk| Ut]Xx:%[T@(?- ]%T`JDg8H%A0.X@ k%Qeʀ=.b ѓ͞#ߩ+f>"#h@ȁ1 It)Ȃ<BQOHrO՛ ՓÂX̀P'LV]ȕPkɑի[e]x 0nds< XqbrI>x#s(.8sģb0;9}%bK<I ҝ#3?ӺGs^ugp @%Hp=.kj[V$5߻FNiQ@G" 3ۀG8yMA:Ȁ~G`[KMX͙RY)B6Ab]`YLHd/8a, ^X e\]"P,T,ޜ龞u PhF`L˺j h$&59_ rS%=b>܊ @? 5b _݃%@X[AB=P([fjtVaq[V%3j(&A)1~ڀ%©۰R1ȱKrU&h09 DH+Rۍ۵J0;>W&_P682%?bNb2ɠ>jh-U+x= FIMژd1dͪXoO]` (!bDT8[*;A },(q)flfgVf;hfD>΂@㋳ # `@5FiH.iLO&-]Z9c^H@u+s=naf`cv>Amfm?p:O8D\y5&RYIɀ2}U=&Ͱ݄E0%S5Blqڤ)O])=<< 2%H 0Ai@8ʁhX;`hf(di>Jk"5x:k&J2Z&opf aGho+;S;GVHM7fH-5\5-XRwRY\)yT R :)uhgז =2P^/QSPgzW|2v Zk9 yh}3 -@ [b>#wBƈh1?GX%xBHGvFK6զ,09 jUb&9Z-GfpPG[H%%A-X(Lov[jB)jAfqXG#z!BƍhڐL'9 vQqgzZ{,)ԔZ8FM:x2h2$05C|̧'űݠ#[0cH db[.@",ɋS,~I R ^ X+8n5Wn7JqxLXSB vxTӄ k }0^4l ,H 'DG-I #$P( \"A+H0-|9O)F@@4Ђ |3$X1Go \]wX}駠[@&f)d:sMONp!5@|@ \)A4q c% p@,+ 806H;bxSDKFIz+D6@$V |-$xBW 2 [ '`@H!u{VC"4a%)@mbGPW $`be A!є1%1U|@84D0p$ f&3(bx!F|VlPa <*32E d#i ~Հ ,ILL19WbEhAgL>,2gHȇ!r`:H O &-OtHy:5fucp8aH+c#;Vrck9+ZP(}Fp r 0&d a YB4rhDl3T&cC(!l2 ¨sCt(CP=70--Z6AĹ6n  jwЁB*Gym[y]}`t3u R؎ECFAaX*# " GP@p$pK"HmSc W2p TZ`˒9Qb˘ƂP4d%S˦mfRZnpcC`R"&C8Ķq]b8L.2૬Yο2F:וׂ$x! ,vH FpTX30gdx&@HBL!͈SF8J(w%ϼ%IB!jNz^ 5Ak[Yf=l-[C+_L%d8K3qeNu{/BӊLY"QYq 6zi`3,Z iG%3@4@!La~ +$98Ǹt3A$< . #Y잠?FRX{-z7/Z %"#PZ1CRx#NDGh 0 ,IJB2s:t<Ċ@!J K @ i8ͶaxokP/6od B%[Ry@``̢6耾d@V Á9(zD1/2I8sZI$R$Ԥ"a}0t/\# D! ྎuFE}dǤC7OEM(<1ZI0-B (HQ (I SLB@II!0@, ݴ)Mhd.ԉ]-5B!H@_<ۡ>| LA|@ h 4LaA@ '\naX吇UM\γhL)5_NGJA~~5 PYtMpsHBOB D!l#u\%B_ |9C]C,AHR-E ؕ@@IE N0@R jM @ hA5~YA Dщl`1!< ]+p dڬC* 3 AaXϤNd@HoFB"/`XJNxXrQHݔsq _P{]ȄLUM,MVXA! smdHIÈdDXKÈ$B4MG(O@#NƖO@00ňU c3.2Ie^N[6@7X]c}[,ƝCC:Z;٬C I<=# r Mr,ǽ@Xхh h@ $Qo \Vl]1̄KHMQs %Oԅh݉(LKR,*ghgM0ĺKNX PIl@K*F#H}eQٔ$`Ly`ȑAd@ Q$c-`4"p}Q,VAXS Z 8nP(b2/`xd+;Z^fӡc  f@faQm#pܓfBOExT#\jG쟀va_ g| vjBtN (HpN@MpHOd@IU{qZ1Etu\8EN@hcQLBh<UϜ]\E@ @8_mpl[|.ޅ8anSdЊh4MP9[L_XfH(rtV%~|lhm \ VeF ɿ' L KBdJTRD$E|T$Wm~y$pZuz:)RGB̈wHłd%9LT`/ |m[*@2j Rb-O(V ]( !\+ؠd3!e4J@+1]i+*mn44Q@oD&%BIiB{ OdQ Dnm|xF]TȿHȩa DբDDHANy6bu@D@ @ m0H$FI G$9^ޯeB `VfmU ^hLH[t  `"rke'k+@rǝ`BQ P[+xnΉy(/DSU׸4E<5 엀H͆L0AXD!6hQ@i']\$EgF鵴`܀Fɸ PzLBRd~6B$G4ׂam8f&"pZZLZ:MgIB+VLiS nPN8GlRj)B3HGMB\ey)7*DDCĤYr"bۆׁq]Pti 5j #"(YuII<xLBtٹ"E WE<2q.%`Z&ՅHDHB,=0 A'4=^`[,s '@8PcU`\mYAMQ ToL59 V-39K)l5 MxA'}d|ZCȵZEΌ ͡33)Q)qj.|8GTTI0I\D`/\@T kR0~@/DOZ@ ԝ*"1 V41]rd ɶbڅVhLP+؜2d@$t@2|4l@ArCuwr&)XqxYzTή!or.5 tlYGKMhݱyvs4D/U _Hv@0^oGǂ׶N?y/DXDҡAxdGL]xggŸ- A3*S4G/EZy#aa}#o0pVC,\NQ5D)Cpd\`A#t$B/uETf' 0swkw&Y I{09.o Ik)wO5+K%@Wr]>H];jM򔒇p`w䟒8zTz_}vZA(&#T\Vn@L gR`DI$T4 @ 4@2]i5J{ Bu>4 θ@FW@@ЀXP'18+3c0g!7x `0O\h 'ѡ#UFz A^1{X+؉RB ⡉6"HD} 0+./"b7Jp ctURɄ,N!IRzrxłKz X`!+¨!,)b($I ;2&2"pP +#@/4rKPݮoa1=#듲sx , M Z4: `#Qj H>q52SUp ZI -rкZ bh ZVYk02": 1 X(B*(ЩNy(0ψ! Rjd|z>~{Z2("5d*d?Jw'C @ ڶ$hKЄV0vc4TFjLf< {IPT@lk4b$`6D8LRq[@A3L n`8ZgvNC+!IS$dY v⻁L >ց`-q #xc1nH!"$+DhS4 ,IWM{)Q&bH$-pX!\(! #EcD2xlIS!D\P# Nl -Egq'~g87 A .<*Zc&lYV @r 9EP@3")]GL' 84b3-Utj+e h~,H ²PӁ"J㻇`\ A cK-yJ݀_1ANxF2ײ | V- fJ`t@RLyXĢ*$Ub e`D#@Z" @"'̌ \K 5u˴Mk"p g8-'lj >O P%$'IHrp" mH@ s ~%ȿNG8H)Di"xƳѺ"":C[|p9te>bD-% gC}c@VjnU"$ԳdKPCp"m$0@F-0t(5@cŘ)31R+W-κP4%,TCS=}H+nd3 (V"2Hxzԧ Rm3@u(DPf܆H`L G#IP ܅X>0@!ë*B&w9d elZBbY*V3p-`n"<0 \ ( < {QH$iݼ^N CARaZ[@Œ7# 1O>Z=/A P@ Mr3Ѐ5VpeOGf&Yz4oF} 7 H@LBH`AcĆ!4PzXMܙ$gaN|6E/>1G2:Bʼ B P[h4@VR!A`hiz:`$>> Z6.F )ڈĎ8:! 9ܔP>R d[HBxf~`7J% ΰL+ x10ᐯJiAJ‰4D5I&m).d0$+`; ` " DUG)蚋r;4j"02!+ $xԬ#W"¥ c &`,1+^A=jA| 5`,_j ndm&&! @*y:@23Q1Ŵ`n wc󑬜al- r/KH$j f /9m/k&l :2$ .30#3@ E3R"6N& l6 &"7># fN(?` ^d"`_D$n/+ j 6d-<;=C!ƚ./ L!+́Rj$`d&^37ND &΁Ea3fD)_VL+ n*/R`(\!5 A`,,A @*XpY ff@c<_4==eA,iЦ9af 1i"c 00ɲFGILֳȦh li>>Bf(r_1"`nZ- tD^'C !ju&rмL=$`"`g ́ELaF3 ^h~0XNj &GjUM`4_T$*!0%Q @ Bj\mѠV|jЮda\@@υS8ezP' h. `:A RA fSDhbs=UB@ΐ `6 bUV!-.V΄(@@It \U+;l*?$ "W0DxԦ(`^A@\B+=6uR4j@e$D{m2a2`~_J> 5NDɁ2NQLQLbk H.} u" p@eY X"Iu@em̱  VQ0؄,>Y *H(14 V^_ `B"UI Єm"Khm"..C|!4 >^EzI"*Y&+oƒ$ˤ&=x!RjALBNg2+$~\KH_J e6`` .@v^Fq{\Gww2`֍ >@QJ@%<?@%0bIy)V0֡ƣ HbMDBx DEa)38.4qxWhwSdG ԅH"h#)S:ု,PP1 X`TO'Q CH4r-6J#*6(cWw ? n9*VBq,C6*躈K Ba uSD4∏"-"u&Bn+y8 ^G'0jF nR/_ hhb>` "R>ZFh+@`['yM싾 .`(Mעf. JHBIHb&H1t7a ,,+^YMfL+.3na\LN/oO5f"kFؚgx 澩Wi_ronNcpѴY rQ xXux؈Dvtj=W+Μ @mPޔ03`-p@ Zi{@an @6VV`%Zw$(H/$q*Hxld)¤cb*v"ho _J5XFWY _! W,hdh@ pBSnA@vPP59+(eIc0+06@.@{.f ~F4_M)&9jy:T;~VHJw ""=ֈ,rId)"zIbI.  Rp{TFBkJIҙ z_}L\WwOWV @[ P $F=ح\Ǧp>{ע8 Ȧ?w+x L`P߆$X4AHAnI@ "`M:كȡIzy5kkG+ll3(.v~.9yI) Ws`m? !|N)hpIr0d[NǤd͋ ZN=Gx,[e=͋ NW+1汦tZgv3ϱe t @@_' UV@@ymkV@NN;1EQj:+;Rb]^=Hex7E-k@W9 h/҄*`իaad 9c@ Ge2RA>! ^5DkFuτ6%$h X Zx f+[W|L%+\@ S֦Z? [Nǵo,"ھz"AQk"B}-#a1)kD1QC"e Dk`M? VB@*H4㈓-p@ @2%ɏ-V| 4,p$ V`Yx&-X`>ř@_!,m:|m[|։s6+(́!x &b"3 f֌7n@$kY=Zb3"V4F4x <GExDrM,G^">|m0x@d œ!!1ΜP9;taŊ@(\D#X %ƒCP &|0-<2Z\%@@Cv#GÉE8Vȑ(D4ŀ K8Lw@8@ &X0&H  -g[88IB Z|U%@E^!dIc_!$B1p@aFi AvP|| H\tɭ 'W4Xr,]lqRBN @eC  A1Cp_N Y d!A 1`IC` Y. }aAk  DGX@lit( ( ,DJ-kF m# PH<9%r@pc:4BxmZ#ZKzLa IӠ0$( a\:c߄~P `0:@ z|h4i$_j!**pµ!]`w'gt!F/{G, P0^kɝ'h @TA T0 !N0$'$G@O_t'f=*QFdE+,d:ҧ! A&OM*P$XOPB TI(O"ZT.=π7`e3Β8uk_Ҩ@d XA90:A( ` 9$aBE-naี&\b*d!1C#-x:{0F>. wաs VbB4 iEb2 t &7k] `R.)rЂ`RB cA$) 3CDW`0y@q+H@2Xa"JHDłE=^ dJHh; Ol-v/Il#m iQ d'ȅ*CL!lhM.*0QqX"kd"DDi 3BjUi.4@xd y@DGZ93PG:Ċj ]gvY!@eǪmh!:P$\ ʰ͔!`) 򠄾*:p}n DKCaC*R\Kȑǰȃlw I4 .D @)0JHBG6JDA8kЃ*[&iD4 LEU6`RP!zQ"@Y %+ Q<Ք8X KhԿ@BWTT';H 2p) wzNT5/$֋`a9@y0+_ `Ar(|s/7g G:89 g(/DS0j09B*5$-Qђl7HB6a@3&YQ'$'lx[\) 0OxaҴP04:LtVh =Ct|[;DmQAyr#`rN bt< `AQKFN^J |j`@XGius'w sxnxlX9$0ZG7T RbR:8>-md9>ADمĆd tI4~B%[!"3cb@)X tbA\}ɡfFYhHE6r\n.A\GTPq;HBpFD=QR[`Dkɩ9S<9hZpSс ~4X 3:t2L,e)u`W%ֳ8!5].C| \R 0 pA B#%5) .܂3 cLc.b^f5'[aM] Gc. xv8RB ̜ؖ 4 JpAp\Jphc ' 4&u@T ' \c`QgLW% ˀl m^4-A/* px0u/g* _Ea١,Q5al+`ضU).X/iLRJRJ3p*,qp§Ȱ>AWWR.(A#!A#ab1Z`/}s~ UJR$~jApre! C "Prc/1p tP \5 8rq( ΰ !LhS?qp>gQ05jtЎeu4R%'`F8Sk/Spㄾ ja!Dס-@+Җa;VB`)7Kpx=Pi6f WWJXdS`O:J A`2),RfM1j :A>aJ,v~%P5 0R gH)$0u|u$\\f! 5K36hF'H`('p PiIPȍ(A/B0jY:⎦mhuw 1 PU@k@g e#iM1ǖ`!Hȑy,V=#7S@WY 3000\Ycc>W=u?ΠKc7tTNsW>;x*b`?#f3AZ0 Xg<sPf+vcLr `v9 5 U'faE'acX IuLtSX&A"TmQ"A2k)@hIf@f9/?Jyp4 PEE;<m T_Hy a;Ƕ+9=!FnhdfYp9 Y Op0{uC >b#z!J o3>s82N +cCXRp36BR]~8 lwSrS7\`h iQ'ȈC~4Zp\f; ٣ o# nuDJ uIdRI+"q"6U^ZEc;*g`\cz*z5X93z%Ps YR:aM,&|$mJ;  !6HKFjp_Nr0 +VDSK9gX6A.K TP(`EVRӓ zs~!!5/k%1Nt<# rD'Z&x&J@  'z @uXj |, oRkj!6-KF/R ěț#k#`"R?@b)  uu,g G G0o'4l@˅6"@asF['@1j`O -P$~v$7 b &*3a#S($R0=7`v+$1UpPĕ[ yϸ5^6(86{ p >c"@iZWL)g oaB1PL V= v)%P8D.g#{y 'p {_` P4W 9{0v2y$H)'0=Hn~G>P\ 0F$p=u  z&~>@d7p1)m)7$F)-4\iW' 4 T}Q:v`QjAR) QHKNP?10d:/fi7p z=_iSܡK{,.0JA%`zQ1@u?b8xAN1/;u6$("7G:yt ^ Xx ,@"@dQ/Ra3aQn>$20~V>Mn,)a"7q"NP8q ̅r! )\, pqpj~"w$e$6<0N=qmL;1T.r2/&P!9.[{B~QAo0Cy8W01. VbQ7ifLB7\DHARۋJڮ۹pܢ fzBr Y-]+mS bKt(GA;M/ȩzE&1"+8p#y| XF+S!['T{@K`M0bzq# Q)iFb)EcTFoRS:ؿ!ʧ.8qbL\@!VYTeza~7 *8NQbA`'<#MXnT )dtދֹ- ΀ [r Ё5f]/~d Hj}z#6EE,_YM8/|` `7)9cʽ{* h/"G;q山8=.G0@+<:9B_*1DL,94JK0d}a}./.{StCr=q/2=a(I[KlďBl 0׸=x5̸[Ɵ3@`rg(eۅQ6D6t|S%q ȓ'L!H:Zߡ!C5H $ZT -ZYB ?N.9R'H&h xD@?0)#S1C 3gND$hHG(,kJȥHi:`@rI `0'ZhA&D4#S2sJp`h/<H `; X `Jak h^0A(:j10 pa3d,С4SN*EQɘsT 4 D e/1) YVP(3@ %([Pgnſ5Xou=#6 L1AX6Xә+Gvk nU `DIGyaŊ]ʨ;! Dp2'2(hb vM*$nK!>:Ol zQF@+́ v / P;a3d78jpN,Ĭ0Oi@Ԁ|4-1 @nO #%*Nqs:2@-B(-g81fͬZT9ryȂDY( ,:JVuRR`^#0xOVF" { d*b`@c3LbKz(J0(MDH)% I LLJ%׼ jPP)A(RI2?,LBDԗ%p*HYW%hJ4(v4;'Pv1@jhx0Y/ FÂ+!8H' OFrW8(`HTuKֱ3Tuκ FTk2$@݅B`IVDf#rd=I\B_nf α|S0Êз"=a 9Zpa c .2FҊ@'\5IJABP(19$:%N@>Ų8A!]BC0`R(B#~ɹ=!S)`EOA*RPE\09#r 7K֜6;rxԱ xP%TըG=RcEuR pXm& PXhS{VVd2A* '!s.AaY2␎#OG剉,6wL@@K!Y<`BHC&0@X,`$xZ5-Np !׹,[h@puhژAJEDNJ(Pg*VL^t xӜS tAц_/dmGY  @ YB!$ {(^#U):,4\G8 0SBa n#K;BAʉ33ҫ^6P, 94"- p<< u"8P‰~2A ::3v6n] ܂7A:brSZ̢8 BhoL8+bKN(,L(EKHCYzFGȵBlkd{U:PQG6bha= ՑM>ƕˊ O8 O <8nPaB6rtB. P@?`0HI $hj/ /DH/+p<'h !с ѝ;32X  zR X `)JӺ4KÕ78X(T r;Ûh#prn- 2Ȼ"hX@bSt>@6Ȟ692 %ЃY8=8 8qZ wRG#"za0 9h"yC|qv2'hNjqD{:; 8˵  I(wo Y.:BkŎkŐW@F3X.G0g`@ ; h(fiCRe+j1ӦT (1A:O(89)P؛Z$1rʴb`O8+5˟ee;g9 EhhL|˓@ht 2 2P`IJ"0};HEw {RӁ@lU9uB)y=8 :+W);x= 5Tl-Y;!gJ9i 5 %=(2҅.ghM[Ùm$[;Bf@BV4$] & _ӂ\+9pt \pasWV`P24,~!ɼ& MO՗`*7kD.]2+<eZH8$"į' DIK (T)ZPRs0~=7l9ѷi1L ȷрm ]c8[}/g QС@5d/Th-QL"^`ahasaH!vԂ>wXe! q= ":bC phg,]/R؜) ^]8w(9\33(Q p 0?A:(Ǖ GÖs4|ТI`(J ![pFHh՘[I[[ mHeKiQ# #6GhXKjƑxq pPX`PXPh6ۼ"6&_|vg 09UǸ`!,x6d0 ҔE9cUhdȝG̺˫&?M99"fZ.D<4!8%X%j]꘺Lg_M dPV7Û #b-qƂgTVt <8 @pLIFsa-03i'PnonHǨiSO IȂJhp7BE-O@բat Disɀ+} Xt 9Z;Zhn1 s,8Pc੊ %4%o_ogNC @*TCdtKbB€ dc䎊Ai(h0@O4 V:wXs%3SuK0@i^/JsgKկfֺhI;y݂'펈` ,2p'8b-$ړHZ_Q,:[]`NF5v;9Lm/q H&sx:@DSvg a!hĜn "4C8gȲ~MQĚc+^ D?V?2`P=@To]Pr4 hu (GbKy=$pɘ%h!Y2'( kh^<uz_z>p-;'L9ֶ"𨡉 .\pÅ2P"C!2Ň,a-1&?X@ @< 88 =0`Q/2 檅( KDXҌO+A (CG<`=zB05L" lBRo HDN4F䏱cq 1$EaA0`$/3ȑ V AV/D b&U@JA+j̓.\ ,%+yIv4L赝 5Xц׹*{rqx*d ?eF2p!=H=V:f8N!TJhDZJe8%{nXA$U,eڻ% ZD.l6`uI71^Kް~uEˀ i+4qC=?$*ڵ`^@0+hAv{H@E*b=A.Uk ) :hgQvЊvRp+ Լ9\Oi=nkZR  #;J~P{T.Ԧ(ө()%gŭ9,o脍~yA;PVc\8À :xRZ9AdkԪ-%);z(6`E i+ӞEmɚzB>JT1CR#@KZSA|;wT Ɣ)PN`t9 ,;.0kC B' q2dk:[I7КCüC$e&(L j] V3^1O[dQx`P@ qf0' V)ZFՒ{! W;A2 eF)'HN M뢋9@@bVwwɘm6JP<#h$Up8[xr,A$[D|XYl@>UA[VdmіH{He @t J̉LzOTCJD$qtBpJ pQPɌKIZLș ,AE*AjRhWiFM5AAHUMA'k$ B; n\jQl@Ph 9S@-Tpj'&EhJ=HѴ͡@ | E-1،F8Q݊T HH ؒXH ]1A#^Op2e5#4a(A ClπGA5,+<\!# ⚬OlM%a# GTL<D0l^'LMp؇!İMJ !GGl xv 0FUxtH LVU݌ dzX6ie͑ YoA!N6D$A_#hLI0$aXQ@R@ h/,e=TʴN̩JyJKJ!In LUJ%pnFIu,O{ hF<$8:X%\YVؕH:cHI[i (e6 DgZXpHfBFD\e 8!eR&>ŔrUrA b0 :ɕ \KԞI|D" m#}D0 xFFTw0ƵI@$H,łƂ|@ 3*Q@tI(tB/35$ =Y! eVh~ƥa %DIq0-\ZA*U|$# P&$N r@A})f-)KnJJxD }؜C(OerVfIrme P8e 5b@{ $<Í|C*77A=WqV]_A{ZEHh< + * |@i U,^&D@VQTdGShPX@d$@\MTj>GRj GDl lj0 RCPkNpe0N TEoD`o\OT@TU y=AlU>zyI8-@ȕhԑ[l eܛ 4bǺBDNXAUX„6BrelhM@#qA(ZxyU!Ch@DIl ϒ܋ 7I)kv@MZUgB S' X9iEt7$A O SϺW vFPUp+0*DȩAMAdZH,B(ZU| .@։O,\Ayv# m ή [J!! QD-ѾYqBp Ё8AP0{07.A9e/D'/A B/'x!ܢmnZZ}_%.@1"[*"?lSYqBCU1Q@(ADMD,{JAG l nJ|H@thkS6Yߊ[ AW-(1·@64O]kĀ3%ЙYeݟ W Z@2چnI@_YĨl@tZPT4 @f^e@ n$*%'4!\ԤD| lJ+m KDJ>2~'D(*wM6rAՏqc@B4z93|8Zg:_^a3WB UcjFq\ד վY@K0C;UAh#g$`A}"nd4Af$jQ1N VTωlBDCڰf$J f11+Ɨن43q\QU ЁA㶁8f@l|-]:{|`q;sfȒHFحfTI璌\KآE rt2Hj#t5 HuDMD `sE?M9e* |U *6ͥќf@GGxhCD&h-Q{6Zpd$Zhu@:纡) @*p\-Q@bܨ3 @@J j1,܎$B@!if8U.i?*vjl:LϖJo(J|8>e4[@4A!lH_E  rɠ]gAU9C/\A \QK77?Wxdu _5pBS+ 9CJoAkenOԆZm]df8Uan75iW"@4ܝT6EHh1h^S}|۽( [%sq5aǔ[I!pu aw]^mG}Qx^DE꽦{xi m} >Dy>(WQh(-C`5dZ1圇"Uw&Rt~h{MUCbW-4G=F*(wHnPPr)Tj9Yqyإ!Vi P>)8IU, j%^XBɞ^ot eZ^ѐnml&)}qw%C-bB/vgZʥzN6(j<./z+I(V"YRvdܳ :dVvfDd&]wm[)jN\zh vD}liv,K@O"DCVh{%4%=,0I< [H_PޘЖUCQ|rm92tbX'fY$VAbpagorۚl-I>|^xD:-aի9ie=_Lq)QБԇIZrB 7e ְw_SRi(] ٬롇 u˩wԚ.ƟSβauYք 2p]ƒW,b>)+yC3pGNe)c GR nbغ̓l'naeyڲU,-umz'jH 0- OU-$ b!<SpHȘzu8R?u)TA*ڊykE٠Br8gCHL]B,CQÄ6:`=|(#N62by$5"s/XE1"&cE,$*|0ACH,hF( I<̥ZzG[*3?!0xGi+ qbsIK^Z';Kf-I R _+VJdDf١+я.}C0&zzJ;dMh \2ɈǙ{4s.i,6AHQg9!'R9>p*Sлa9.ujb(-#q;69j}i$ir}͈]ꪁ _2!̕ $"IԥӅIc=HQ葝Μ 2ט,0WW{BƲ% mIW2E+s!u樸a39"InX;g. QS*s |D2H!Ky:,>A)N®]Ĉ$!GHCN,HI&!~_Ueku3~ D_ oNHBiЧQDh">o )N`1AVh}pV_Pm!7aur$X?:N춿=NbS\,sK6 p,h"s%?m,KhLY2A7aI!:'ַ4I+e )_d6(x|"hFG\iGIK;qMyM"uH 9XɱPA_tDlj;a.˜-H9_+[Xd+Tyto:Z"Ct 8*.M:ƖbU9ÐI͂0P&\ixjBlUԊ9Gd3#we ¯cXg`: #+ɒ%pb\]!PJMv3`DllJ _K{ۘfpu=S9|r||9 y#f Jiy75T8%)#1=EH~CR~2%w6X!qe hXBxa+t5+#5@r"7FzoA!EekVy2Z[__ C7$Qiajlb=,iCx}2Ah%HqKutR-/Zav7vl8 kxӆ$ŀoH1E[bu9mxEE!)mAdj/Y q:72+UA _@܃f1uSlez(mr(u,յ,bUR9yFUx?(V' j!{0mzW3ܢ(L!sq1 b=uQ.82x<q1K0mtb$7ԇhQ[3='+w_Y l)h>B3wp'ā!ajN=ntsT pYc84{=_Py' "%2,CCu[R]ȍ8A2$Q:`F{AsgZq8"q1ƈM=iepgy=˸w O9PUـ'$cӁQ8_)561[Utd|`D8~[QqpTA&'`y@]1N;_X4~cmO" i xeĚ咘^y}0qjNS}`1Y6[(` !y xw%rIi(xV\QjGȌ eAcTO2bhEIKAPA=Sc) 21"*b)VQ)!Y4}~$dșE!hhwQ1u:tm޳u ΈUQfGEq7},MF/ w= J$fHTjQ1Ky%@( Vi nZÒ'l3$H{`MȪi2@}iX 0 GUJGqjLŧ+~zX@9ɀJ.T iN_7]BUISz!lsrtUY}>拧B)7qA A20u=Z@)p@ GiMJ tIŇSw7T#ptPjIBӆpt ˱q7A*CN7T#=քce,4K !gKD́I@ #Q00p( 1itu ,k4P*kz's!z}P~4{4;bu.dj~G>[5h綒u+yJ˔ȡ0$6Rp` q {Ucz4"y&:20d;  26ss84FT@D B߰ 1p*;5[XjPVeP:<]Jw5CQT"6 5Yr,8G!R'j+1tW96r'#t3Ԡ!P NL$دt~0x a-RT>poQ-4T(iɶJbi;(E˩0g1t04-y)O1m gptFC}:eP`Mۦ9ZA v|V?xk3 ' >Q @$l ఞ tp2T*K"vJIK=%")QTLidr1F Ťŀ]l(\+Ix"V< Ỽ$sw Ҝ @lҜ0 #ulZya vfـ@ Pj!!M{=QTsҰ%|tnCeGvŧt_5 xgA\L=h@QA d0 A[QEF0|ͩ[8 'NL@)#J)<ue"L@Y⺬  }{0Ğ98 $Bl* 1g}|1\PhG0% jq }^]k+[# ԺP8r@*zq j TBMQK E7;zaJNI9֌aeYnBb }OA ";11(m&!AغaӐ!t}bX>m(ye0Np2!`  a>tEae2iѣ%iw] 42@3[t Or{ CLXh.S37K O@&g3..}1 &@ &!E ՛ pޓDNm( GP/.pSy-V}dГʯ3&sۧ6}$-ጀ^ljѳU-tslsK2 ԝǁ-ݷ01CS Cq0EGNޝNlF@ 4Ѱ]'^ڂڇ0MbMbB⤻^/$Yw^xc̎sBl/0㇞81D@BH!ɣ )0GvUSn̓KV )$[v筂[ Qߐa.E?ЫP AH0~:එ4i9tD`XiΣz4 (X*'l еoXL['0~ڦwQͳPL )A wK nKt.X;uݧ6.T.`C/.9MA_%,pL,KUrκn pC@9ꩰ> aP6$%y4ED  "EPBɜ1qo-ʳQBy=b@G%޺0ʄK'G ЕuFT(sm3 € [^zx,M  Q 5i"IcBD5 `KpΜh *@ZF/ÄY "l02ے(?{FY3g=%af)#px!2StTGL;gu&{e99.d{ tIWFp1Q* ƹ%0vz2h8q+Rdd+E004@$q6bd&&sTmO (ڭg2b 6AsJ+θ1[Kj!"c!"h>ZRF !rM@-R$#!b-[h8$CI!H92 Fƍ%Th1/Β@H8>H,lkTh2 L0 O?+cȲ.w]ȓ*"ڞЇ9. D8bB§ Xw $ׅ0HS~d *;8AۗT[X+VlX/8,)fA!RIiH@ e6M*u)2ahoO^(޲Khk" -I9Rl(j*8k0 j j$3yb !2Hy%'L7y!e0A9$}if.0L@ZW+ ȯ[TA}'W!+z _k㏙?ewu ] cAgFDrts:'F쁸В/8K8U84ԣ#>=-8H4嵖$n\.wZ]400"F6VR,#X+hO (NxE2 %$X.p,P07$HG |Î0e-Yѐ>aKVg}:XjsY<9> ڹ 0 Lޝ|4SP@/02^67=Dp HFf6rxca*%^!-1s$D2-^hX&W”dÍXgkSBBD#s $> M}ä'% 9qrq X[n3,E*'CAFe>2-h ޳ZjJwK+]I5[ <3yWfD 5>t!k- VpA$AQIB.t =>X. G6b ` ( FE*D٩ q<aIhDjQUL1DYvb%ڪ .YĠ=972ɭqDW`pxy2 R49GM.ּ AVx A-%ߙ@E<aW νD%j>ψDMVYA*u S HP9G"[2Һ$m\nfmIBW{i}#40Gl M_v $"cTҵh/II Oh"q=IKpu&pb!cn֒fz'Ԡ5̡S5QX@Z.,ahHtp3Є$LˈY$|![$g .{y v=XG }xNpi[+b@ld$%\:>/dA-A|2"*s+F12t7chX]5$|l:'PHd+]D>XMFfdA "SiDY .Ѳ}72$ڷ`.A(lќ!s(^ GYOsUӵ4x[r R,BÑz;Db%HeeP)Zd! @(@Wy@.  nN|olه`ѱxNÄųx7Hg 5A@E?Ћs):4W9hĥlE>󅦙zm-ZI~6Onܖ"+K"VQDo$$+ <% c,x2$Pkε <2M ep 1 0><;<;9,_κ(b66VRz52v(}R.:kI@@p>.p'GH$*j(4MXX4$"_Xo(0l *s@C>d@d(,añ>&/4'Y_="S>M)Y> 壕`.@7X( 8OH$&] I#'8b b@ 3F뿍MBlY:фk܏\3. Í5(YSHs&zRkDH*Կg:52h*:5YRA%̋h]qEhT,"zZ F!+ y ]-(W,!XÈ[/#,$ Dcir#˼*"KzJyp:]@ q*:-7x#AG$OQ}1亏 h2 IHB0I %1ka RXbC h>`8=:6Mh-ŁP)sH DžXǥ$IG|VrGcUstT3`җ2h)uͺ@Jo#EKhΈN3 #ﳷЙ =Eal̠x,HX"ӄFP)VP5\o-M(ʠ<0HbPѫЌڴ=P)FhUC,= zP3F胳t*0H<RDM3TK BYcOH #y$| #-!_XA8hcR8e=ݳľ^!K  Csdʪt@׌9ш-UK*M&j"4QUтPU"`*>QTn d ܈ZLO%@XfJ$"ސϞlчRaz F jQ4|Y'X R<]<3@-Q~j{CzĔtLID$H0P}#ASaTWChSK"501-v(p\U荞(摑 PlIfտM}k4p,-  r|r])yџhJ5+HFL4)Ԭ =ҷ .צ[ dRdPX<؁h:yNUW5Qx ,   uX<- Xh(8(k_ p -Ͷ}.m,YC"bS=ۂLu1TSFFI)01 1U.ɉ&NZY* $2H"ދ1%  095 YBB P f]@Ġh:ӤR)  ?5-G/6={T5 -(K-*b"I]˹8[#ża* ^ ^aX[#@_܈(_,_%b\ˆO1Z3.`kb-h`<]uT >C٤cte3zvMxG`:-䫅EN * M㵈R2"}E! W#bUX4KV a $ $XP RP¥_Ydl@-զ8(cpg!22͵uPn9=U{|QECVWZ F3:ۼp*~AKL<[R*Wm[SmX&ghD&hKI(^u!#08p DV@gUdKD>[F浜!y޺l TTY赈% 5p󎈿+?3{ cBY pbe=pӆp7(j~;5q*Y3ĐTp|t( 2ѥx!䆈(+1괆dFeшӆ X`xfyX1wἅp xrAߠM9(i3'ڟ]K\Nۣ0/5_eHjぐ2ihGb錐:GXa:ʢ6>NW}B^LKX7{ѡ>UgvPX$3$}sh~KVg'_oP@Z P\O$K+\6O35jXVNsx iwsvԽ I!ϐ0,M݌@JQ}>yQX,3L ~ASHWrv]1_UwqwOX -i.,P%\ cj9@W[ז||9 G .Lor/wѠAui*eשPЯ!m=[}r^7-ȌT G:n80,w;N)x P %B(`V!:"M|G:8.SVɠ$$1@‡t>죆"FpR -Ah҄H8K:U|(Sj('Р[)tQFܩl=Cs>4o_ [|s/ rCXA|p b3Yt jb6H2d> peg2f@+o%Cѐ -ip`ЇD IZZP\B7Hm#K3LpȞPvr=(>!إ!['u !p=4bP hǪ.RAuɐDLpFc{a(H@D2p49tg+[JgȭT("a i;QPI$ *HtP=-NG{ěf|g"ʉF,9D` ! iH5dq9$' Q$+o|Ba0  3S;avLdIˀ&5Cr]31 D4\P&8\D(`pת$,tHq ulP4GĈW]=@[<?} 1!!) ) HI@Rb`EsR@,PrhIFz3f1UZ8%,"<f|ZDdE:Ң%h" $՛NܵIZ#\W.LJP\#mF8+otY`C1ԥ@(C5R܆te]Q\|eO*3 dp@)tWB$>0L6>pICBrOR&`޲kdZR5Q"O Ef7O誀])"pP.E ұF]ʉI ]e`R%]-{x4 8msD%͈YMijs$'VAWo;YQ"^q~\4W:^`QBw"L! W.E+@@ {2u9CʆԻY=5NU!QIrTͭsjQКrT0%\BRONF񤍊rTq7 n^6đ"c4̰] ,d  dȁ C H! 1H1f tu#*DE.u:A,}@ | tB Ph”"Fs䬣EkE=zVB4-,Cee iRF h^-@ Fі@FCpS!qOݣkhhRDt4Jͺ0ݡk_8)HBpF8-@@y }܇Eu0C(@ V`a7CiPH)\#Vlh4F,097DpՙIU7لhq4ᆦѦ5FG)K(|݉\Ϧ E+=eD(ؔ 387D@]C 87|ܢAAeY ,J!@-:/ \\EL D`:C>OH`crLm mh x>ĕ_IDs@Pnux@"U734e3gS&AlsH.L٬Cy'؃5)F$A#Eٵe g|>^|Q0H) PpAҌ hQhhRyO"HTdڙ6 S*wPչvaCEt3BS¡UTPEj(]є ِvXCbw'C DNCdĥi{%Wlk9DJ۳Ň1ox}rU^ԁwd@OIb<mJCEP&[ F` WjbNbhH,5C+P:dXÑ֜<tFPCT嗎iF :Ĺ1i=˹RMoF5II/ƕ!`Jlh]zN,bN P߀nLbTCݨ=D hSRNPCW6WCVD*TǾljxC֜-L\Cgw$m~GEQ tBΠHI̐-hSJ*tHKG΄ F!$t5 @l4NP)6TaTVǞӯNP!*+ƥ"! iiə򥵚., 2)$9Ժ&0VT2έo@h "ԙGO]shP-uPdkh@ `D/ܰ:DbWrC\它1:<kg$!OIiH/H:e s+_嵂1F_8ĞMSөiE$ PI* sTו׀bm]n]E\Ib7#L2RL^jPUpbc9Dɤ :~!C<=&*>N!pEtl=b:PCTqid@R>.ʘqm|3E1P1Q`I#gՠƕruppaǼ$ى0j q jV򹼄)R(lǍ.lB( zRD)?ar*/:,;39̲:kwI(0Kf9ՎZFiѪƶ:.tiXCK`YoDOe34/afbhepi5DRkXf4&Z(E,UCK,CtD/$fnG/i{A(l.є3UKw۴}⠆e"(q!_DfɌbj+LL])FĴI9MifmFdMsP)v>,+gZC2(X6xhL{,ot Izˉ%G0nV#*60rBwȄHJ8۽9y0!PćWp@=2)nCC3G?DDqsc>C4?U54bi E}>$s}rjטGJcˈWYqjd@b%jxBqD:$C#+,˲CZ{V Cx>`Iߡ'tMĄ`DoƒN 0hBض6IF֡ƫ|ݴMTQ!m $w0EgNyJ_զP:%4R7+GxB5•DS=&Ah rk6U>@퐋\HDEGt]&Jɩ/@z]qq͵D@+t!utXͼӠp V $QUmUF46!zT9NQXQ19{%ʕ~FQCH+;PC(ӯ<D ȁR9G+P0Myúʠ@ϼ'=\FX/5CGD$DQhBYo$(eD/7!IЌoT;wǒDn:|i#*Nfr\0ug1V? JXOŪb ><$8 `A2pS.xJPO7Y  JkQ4 ;B&EX@ҍE'%ѺDsOI @Ȁ!0 "M(@&2Dh(D"‘(b†$ܸHLRRH 1\!Q%]4sLDjgQ&W0QT#%7@SF|[7#a8` H<}DA F 1fH`'a}*lDO&D`))p`4 $:tfԇ—Q )"|1 Ҥ&W4YJP$FCbl鲨J*Ysccf4bNKJmjUYט1 r 2(}¢/3 Ϥ,l4L"8@4@#4MZQNXӌ#l;a# 7rNƢ.O(#qȓ$",b7dɥz:HJ'.)4o$r=(`lO"ro$ZNJ8,܈dл4)2 I RcbN5< z3"\3bRʙ6zJ7kcMb%[QѢl$H%5۴Ϫ(j3?rmGH0t$6"̨dY,_ w/C$ˈԈ(LWk1&dW!2!nS]WB%y%zRDS'=o~;8s#R]6Bl)6o%j+ ]TP)4ё.0)^9€̤*5CvH051ˈ‡^r"U'[Ȣt :퓋"%洋% _ M󜣍h)~0 hR HA舐:o1whW;bP9@@A"g]otgfm:< vQ2CY jTGHUT^dyy$"~W8`y" F&Q t3B !-8@bba-CkSVpW5v@v;|h!" p!@2H;W6a(yÙZ |f3ԧT dnǁp b gUv49Q33J2:bˈl! M֢5ژ*0"FF>Jgp=Hbt@k 8Qw THb1R@d /W5q!wY)Yi!A dt&osbzdJ(=H Fh$ F~##/"Q##lePl%u2;dDY'*ADt.!h$dL:Zp]OѝX民O>P JK;tQ\TKRD1u 1m*jf$jT$4";QQ"Cd6)8$S3Ё)F'{O) v#GpI/g ~A"E`:&B<i )krѰl0'Poz÷z8Uf2FJ2iT$H"F@B-28 [Rk*(' "+cud@)zVJNuk EwF2ROIphԻ(6r؍R!c#RTǑ˼i6{Ʒ&h&F;g`Ý˱J$dE}64B%E+Ms dz\P UCX[5F4oCjѝ<ց^8#_ pGD=-,~#iJ#fLaa,Df8ZU6YQU|HK{ yKx$lƧc>1ŵ-|kfDM;P/X  ɮI1( cirDo$#XBDzOڅ9+QɶEc*os"g|8{TV &,Z16UH?Ąs%&ĥ+bSF)Iz{#UzadP(1zkzVڪy$5f7/"x72 "F^lq@f@P紎7:F~V v $AA}hZj"n'4)ȎJR>0NL*Q4)lBΡApM"N _ƆJ&DAID 4ti6BE ,Se N" Q|L?U\d<5.¨6,,d4%b^LpY^`#"R+$` Ċ!^ ^m1# OhG s #=6"PB|AAQTyҬ3ay&&`.R 0bo,K)ľ( np7ds4(<+n45qH#EN6)u`"ZC* u1x%*Bүg_t-2L֤ap$L.&'oB$9hZ\|hc6xFO­6%rG$>#n!s6IZϲ0OnF6%$!n(jr'g/ =/2/>ך>R1%0SStS"ցNqMg!jtE"L/BlI|`4`8o`OMRpe"lX LĪ.2J$@7R t$^@.@;Mp / <@-ZuI1ZS"tJ"DK1j!%ZKS2FA,AJ n@Ls1RL>3-AU"(Zu5JJz4cb 0Oc$IUX""J:{<t^#Z` :F%<CTq)Wv$!/PaBsn )8x5lT%en(J/]Zxi4]hm#*?d dDk9bDwh__$^PaeeW`_M0"zL/p"` @-BD D`M6c7 ˏJo1dwxu$`l3"JHH[?UX?5 t@[.Rx&"DMf R& T&`Du65Il205FD(ѠD\%дpod{:*p|ncH`ddNR$Um(0(Wq4p,WGY(dZ | j R5@,a@&:u#Bն5" u5Rg`w1t^/b` v".>o%bp`{8yGyEmHsf&K|%GR"/pn@t` "p@(W0S}կW%W@ |AqS\ f>tC[3JiE:iEl)4+@\B\$ԑ&y;ŠK^iksHl+#oѶ0› 낅;Juw$V@`X1@|1P &VX}8uwtC$.p(vp`R)xMĥ?,@J`B@3Æ2Q 7mv$'&42CvP) ^wGGLp+HBFd;J+8+#jIl_$Rd:dp;Ln bn%6thcm:?V}MVf( dY9Ss =@\Z + x"$&EJbNUÈvo]sTȕ6|-BUP((z 鸣~G&3ڪx:Zwa&:8#Gڕq.Cgf $%dGkA{%v/>Q `b *蚝aL?y,UD3CZxjd$kX@dC>$4kcĺU^uT8C[kP+;4Œlk@Ren%THV3#q՗JICS /p  oaᶿY˂4@2RQ"DٰtAmƈmnT'"aB {p<|895qEG`6l[{o+7MmM(P-I'Mt9gRt-BJܼdֺbLGN6{#>Z5+YHAD$9Saܶ|XAAn }$EudNPgIR`KPb!+w.C$Z^"E}o^ *W}_a i1ڮCm-#'ׂqe#ļ(cGp̸}#"|K@40 !?4EL"%ݹZ&щ|F۬]z3!ZW\"p;, "Rq _ׇli. oX"`.e=p@ח-s&)jVs$tG"F<ƋB6D" ڜf``Rh4f7?} r7j$Sh""2"* 3bR8LK55!j<ȫ8+](Dia\H@C"-Ȋ&+0V$(Q (") P:p{C\}ҕYo<ɭS>'T:q$B`(X xjAZ#HIc6geXNڶeF-|6!"&+IE P#dmpܒ[A.蠃X|Fn)p/ @s&٘ D@(]&*) z,EM9%9tQC: M3(T- PnP<WHD8j,ɗ[Pvav^Ru+uիm& ^WK!0zvp))&cp뢋-Y{믧 X D2L @0EO}85 7|:RXǓ10,#J9+J{h] r:DlnH԰W[D)_.&F@^_RpU A8o=Vnb.B>WnHS&pGq@ a剙 dAR F9 ӏRs΀50f B,@fyn1%YjC,EH.$Q!| 0tMXĭ cB2 ^@''@ , "0N`,  ! b c!@Ads3>4gbJ(0P!Q*#rÝ 5#&#Dd{IQPB҈FojbᐅOiǙHHZXuPʆ%I`dDs[P'R8(D2R @Kq)H( {A`4:$Sb*EI&xf^ƓHadQ LcڍȔx U( bT%Kqp⨉՜(_ r/2SWT6(Z+00?q)QnE#R|LWqCYJ`l"8I$h""MS+靕#"e }! c8Q}b08^dUT!%t뒉z UjDXV "ZDTu@>` +@26@J#LYí#8XG.lCx{X3T pVVM8gߡ@ts欨H^\"5o ҊpD8gd }EdldvPn$j\g,!SN=FUvQ* PBUh~l " @@eq8gR2)aJ) p@a@`l$; e>!Q[KoA$QrSDqC\{@|AgC4He2uȗ$'Ai2R}udI 4Qp"Aw[hH o 1֘Gpq`2e3 Z &@BvB08W<]zR"AVS6v,+e4d] 6؅St!aeDXe-s-MpaW$D}hn4Ti&&ZDZȅl@gUX`@10-D6A0 IZ11?1a1Ҏ200~xq04؇qpS? 24RcfRA5\H$QF/!  @}ҡ݆X&JԄQ6P7%, CMB,x ZI!qxatϹ&Ȁ@H&3uyi[d—!"A.gdiMP͵,W$I(|ЉP)(w]q")#&2kkO V%aH w37#o y0dP1J0 Z99 sͩ1UCemjHDGq>OaC?-СvVb'{Sr   PN5 [ɩ< 9IJ ' &:BکMZQr)ߊf@1WbѦaDe6a@Y 3םޓ26MOd[dCivV!u Y 2C  d]NK` &h$0IH ; kZ\D&6b\: -[L4&ք 7wABaI UrZZ!/qb5mzqȸ_Y^ąu3,`] T0: @Q(A(ΰ ԫ| %!x+!|$COuGXbG:W+Z?LD߻oć2ut ;pf(+/-AMhggX;$C X{&w(' Z( Kϐ Ϋ 6l(\`KPc:s]5\{C=1Wĵc=uQKޣ H E DSIqb8`k&g7x ZȂ PEW)%`%LkKn)˶6|ýhjKX1K԰>d\0a$&(_ZJlTR92Uw$:LPHKGxŭ9,&*U83״HSLQ`(5qK0ΞZ_ɚh p%P!!4 ԃZg=uz6i Zs{Xl$!t bg$/fQa{쉫b+ `(Ap йhwϩp Ȁ ӟ zp@R)!*+dʾD̷xѶˁcX:=0HHn-tu0dZ\4*C * ,6Ӂ08],pŸ @|K yIPvb,!5VCS5ϔUUR$t{ɋ:gmt9ClUqJn,=&:0x'T!  ҴB"V07؉L|Wx)lɑ SC"L="Bb>~AUremւcGv&t\͚ty-K3ԡ j@S~vlqs;K r9) P3-IC6{ S :1tb}?c7c"#RfbKLESU4Θ _k{ ❡NvƬW\_G]ȗ-ȸ{w)ڸ%@@ мջ=+%}>:K봾sC >*A\D#KuWLzʓac q>T|9ޖ,QwE+ B:,9TE:!\:<7ꞣ&M!]^[–zy152x/[Z1.*KhT-EO6B=_ ]A{0r ]Q>7,$ٍӃMJxH`9}( :΀ lp]Ce^M +w-i-*O+h#s_z&GICVlai>5q W!]U^; w~c4`4K(h9ApBźa}:Bw{z;1]1FE^]q\Q4 S0$H,36A qwC@ .9B"X RVd߾ 9dlab4fر4Xnj=dAK,_z @ 8eٓjG%'5`# 4& 6 -k2˾(DD# !l2`<32@<6b>*8k &d9'@' G%[s<{9Z) o,LK4|Zλ,?!l>  3L HV,( ۬JTtx1gXaŵB$i#~[8\O3;03;҆ PNj OM.d"-<#ˢ+&5 :i9}5B>S ю.lD.eɀ, 8в:5@SNU %"=l<(^qdAf \]U! 4v8({ig(L&,׃Vgm5%U6JvM.܎j6k\}ϲ%8& Z^rlnHjKuPZ*~#~ SXh0I#άTLWԠJhq bnEWR![C$, W(ff=Yd<vڊۥ)X6Y⇥"JaޫwPyǪqM=PX)4 .bA p3]-\a$d5HF>AA "DP9A_2%d[IxXM"`O`7 hM]d[+栤1i>IS`-h&A XlxA?=hXz[6x1[dևL) 8 @/Jf+.=!3Ct@wF(O Ĥjx%lWrlG;󠧅GRXTËHZiRzBXD|xe 0)RDbH0@ÀD* m H {̃G!d.E"'K脧# NuBL)dOZYC55K;FR<#lJӒ/%-!@K6z$,s!{epQL.T/LR,o#-a2MٗG"j#xJZZ,tT`d$-XU=OK-uD@YV&}up)O~z @L:@L@6#3m4eQ,ae*lI7MQ`ͤJ*#Uйv1rp-xYHL`'Y9S+Sd9-^GlPn'Ѧ6r>'>v4h,C1f'ςiu< C lʪ5G7Qq+÷sa; >R&XIN/Q-ylIe%#ɰ),aAϋ.]? AJ3nR6X!djȴ I8 94Q",_{2lT&gr־N,<͎ж˻vDpֈ'sY<9w}☤ Oӓ@ Oo˥/|Z_[? h)MQ 8:)ɚڍ!X!_3>#:"Q9ڱ3n K88? <12h33L0(7hYblRɨ ̠) 9) #8#+(H8<ph81bC?,p2`k 33#\S+A9f kSP+(7 k;(c 1Ј+ c#+Ѕ!P7#Ϲ`ܓc ,F,$tڊXG҄jV3d뉫@j!+Y"$лVQ 0(5[%!LF3<X+Hg% H^# ;ȈNLld*,Gvj҈ n"P{DN3GB@Ah뾘DEdi?T;?($ػ39{x,(` EKeb!͈poTHӈ$Tʨ93j2s4G2hDޚ sGJ" k!z -IG 4?dE@x CCIQi#Ti hK  e`) T&ɹ]X<ŌÖI /ƦrL JG"`{8A%KMJ.i{M wj+3cl.BI  @I9xx@UAE_$&P^N<ۋgHgk<RLI$ITR.F &G0U,RZvI1x-̗ h?'ll; !PЖ @t ;>ݼ;E h?( %d12H< @2g+HG%d\LSJF`jDUL]"=qi PӖ@SfijPt+o}YSE&% %%{LCKIp]&8[^P{EHVX0IX]9c3Pz9r}̎lЕ6F(Ԝ%4@%;%>iN!K=_dL!@XT؃=8pgѫ58TUmLyҟEu˒B!P%[9[%4Q_+ ^ȡ8%n ȀJk툚XZ^=*O!\ B ,@ 5H idZ$RUuݑP+Kb|RJ]C4'M`(ʗ| Yl; Q'R-j =->f*\'BXζ jW@!>'扥ַR`6jlU9o2&E/ٌH̴c81jmgE{pX Yorrc<&Ak@ ]-賕:HHLocЈe\ֈor! n!]5͡1mr `T^E^> Y*&_2]pRZ]pn R9V\UDok.'?Mk^bajΎ0[o> ro8Bn(".FR.كE3j v&ǚM_%U9!` cnʦj-~nR V>_ #Sm @[DЄdvX"8gj9lӮx/o۸[XowDՁہ  E^=lf16 8c}O=@dȆQ>H@NIf">LIi/vdGxX%)"Nېv yeϰT|P{: ڔsŐ,C!UN_ uHW> =d҆G Dj?A_N]i%yE1B؀VjİbD=]X"Ɂd(f ꈒ+>ҳcHlaMk($jbS&S! `buy}B48wg >T^Ap]l.!P4Ʊ\KFQ@e]ZqgHpW[#FE%$C7LLt$ h]i8H/}(DP"`D z6bi>Uiʹh}GUvL6` y[+C/@ZA] 0 fd<(P:('P3 Bil6DxD}h۟Dj/WhKDhL0QDA EЭz`C}lZF=5jrF b0@i)q:SJ횫I@ EYC>IyFi{H@(*Ied\o! CQRF6؀@@0<{deXf  @e"NI'(/E5ݔӆr>%@Q4'hYSaS7/WF ^J CZ1,4Pi*EWGA$@1@2Ju˩@Mh E!,HA&B 6d!aʼnbpŊ+f8QB RƗ0793KYɳϟ@i(N0qSDޜx6j@k`ÊqYT]Qĕ3,ۘņ-l"8iCX.È+J1X$ChW+F,jus269gf`6$eW5 Mߘcuυ4&M8У7CuZlkdEq(_zj{|lذ3vmp G_40nE(abUX]v SV<pm6| ab]AEU!N !Z 1 i2^!l 6o;hׁecVf%LvZ@gE ]F+""FqcV``#F<2Di$}> ]\B CxV! [&zsyF] zrxeb<@=ѐwz-%HL,iKœ 8/eU>*"-J\1Ye&vuaj!U @pnbΙAnM$QPJVjBJ@ |6˖_%nFsG-L1&W妫Iv~ )Vګ.xdfYryo*#0C$ )Ў0AWZ|'q?m #[ab(2pSGŬf||(٭Yڈ#I=JңXG$?Y]l'܂)؂dǦ8knvܬiu!G u~  Fne\D綡I,H)ШFL d9]b_`{]~馇j{w!+NE@ee(x.y0Z'H.zReeQ†xL|}"ߦ.-V*}(c_ܲs/&cPG?*IڬS;CUeC`@/Ei=@05{6+@ƢuPfKμPwBPbaZx(1bn(ʘH&bC\ .!\)L8BHof KVB嬍Yx@ٓ.h1s惡0bt1U{L3=VY[0ȩmnw.tWe%TpL',&On*p4oy_I;HI'd8ҚbjYD|"k27ksw#U=S_IZ{݇;Oԕ=2k[O!(h+~6l7d*eY3l"ήJ*m=L #}PDHnFN@⥳<޸StllqK7vm>c%8)VڹuўbzvE{Ҡ'RQORO;7k=e?#'bUrt*I;DI<;rWYL =j~5 gɧg˗?27cXy5}B%=DtdE9S>Vs=5FHbV,lqF;T(t"oWq0I2uER}>hPwAN53&QkGWW(R'Fc/J4?ᄈFnsBAGAte7Qbxyめ7e%h2o(z!bGGU%@<vPYsfN  |)x %4}@q8!.:HP25k&ц!U"ǰ^G&6mtk;Ys6.貒'K?cMo` A+Am0>{0`"tG %HζM)M7Twڂ11h٘3uÕ i\aɉG+tIh@R.CYsiCt6?CD&N/"H F";q;tg%hE:g&}_Tҕ4`EV'7j@u5sq$vG4@@$3)Tt((pc8"EqU|yvRy u6'gMي,Yc F BQS,f#[Bs)j5Y$Z>E,7oa< ,d2(h/˸rqTpI"TI(M#S3quW25of#NzUpqT@Ij 70ʁ2JFxe8&2<` X0:z7CL8NO\rNE`^WI,2hRSTi1ʥ@Ld$z[Gs0-Z'qGjR5Qlgex!"h?(wJE9§7+LdGjs3  0ex qM S1y]7>eDQ(PaMʚj=>B<v=qfdwJ`Qzt%.5);J4 ]41 򭗅x` mrLAL.R)gZA7-C rT~ԁ0:1s9i|mg2d\_B1 qs0R}Es ZZ~e7xXP4m$2x>1: J J5!RBqEW uE$>ʴuwP;|/wBM|;G6Em aՅ*)"_GUg6 Nf" T["4LEj×A sKaf{+j`f6Ibmj6!/< =n,wgDZ@h9v:g7ۑ&)gۋXDUj16«/i[ǫD3j3 G ĺ*!p Y B| ߛHpX6۔׵ĦEΩ '*|2 8p+ @Oo@paddg? 0GlT@9*L{;eP.|+/  g7L P'CDWQ6!@A4` ʯ| ` X\'JH4K,GeBa6"UN U|dNs>Гw=4 ${L \{ ]Pš Z ĐL N6 "c=壽j7|C_ְ[{"H\ 1;1%͋A5I#iP @,up @ţ"=` vŔRM$=cCUc#{j`}=hMQ 1]M[ԍ)p)16 jpPq } `E M `03=WU=J3'~zxw.) m]3 Χū3$0}f!KU @&} K}߀ @ dA :㔾 # ߪ~JI6}瞩8c*\`җr N AdqgH@b`3 > @ ɀzUHP@{ ϠM)ċԑ>^0ذ0-뽍t02x,炨8%]Q&;6LdZ q T1Q `>)ɞ< II÷@Lx4_FGL "N5# \:M Un je@/Ý 6!spgro?6s%F%깁%RG[2;wve5Uqx DhpVB B^ĘQc p .G>rv u@A}!Y ӇQ5IjԜ9s堣H)*6%5`BM#TT#*813>#+l\䉔- =d@Za8 l$tYnw 2Dw_+\:)!%RTM9eUyAU0u N_M*^($ ՠ[az-S/)c֠Kkhj\M( VqE^墮m *f~3*k6-؆V*(KH8Ә蛪GT% y p5c)*j f+H!ץYKjb[,Ď>~oŠ9= ʺ [n@~٦T{SšcHI,V B^X#}n*']Y2CAHgM"ΪgA E#]jw`XrWaNP#5%=g4ra^{ uOid44> #j r %`r'Pp*:A02qxHE F| :h,K])ȭՑ'V /ELEBF نB .3k?xbHX7*1QB2Ej즚|M$ Fa܊@e `b c<{' |$!LX,iJwYe%Cf] H>R $ 4b$Rӗ+2*bgJ {!hud Epe` U"E+1R2GAJAnC>@#SCsJC@d.{ B E0z΂B`'5$``!҅2z9"J I 6G (%H'4vyT2X4v8,HmF@C`$Ѐ!gS$Vj Rf5S*S@G QI`K>W&2Դ!o@ՅV"mr'`o #pHRyD$:щM>XHif~EI j= Q-ch3.gC&pJEzN&m RII {I)i`Sȳd VlMUن@A"D!5 n -tn-,M\ۼh'%ȧeAB8شxiuLdz0kiҡ+qm FZ}83j"F?]mGw=7.F!=iAT*D >[N)r#tUʗ6;ч<̛a^ $ |E XxJжHu65\g:2xz|hDh#r F \H;sg0@kj$cU>= XONyM5+5b5ѮDj ЃX#%$|O|" ƻ$l :j.ڂ 7H}H2ƃ6B:'(H  {ر=\ shny01g3`iAm*cq!$ʇLO)ĭ\.` DBjR#0 lND f_=%Sħ[P:hluDoš?5@S4 p*0' BZ -45p+% MI`WV&u- xr [Pϧ IZJjMwk86Hc;#|aor;I?۬+D;qpP.=FQEۊH1$ /]a[TصN%p,p>SohrPCXepXAP`1>5::p 8s.`:ЄX,6Q1F-!B+fAi H¿1s2D7q[DE. "^ 』3+H%x9bK"'h _ȁ7e /pȈhMD@> SD) x>k+WL4>*'zbF#('Ӛf4 a!ʌ=W1LAgFhJpD3T[5<\Vw싾8!A,p5~TĚ84_8kP|oCD棨`N4!8#IlƘ 4"Z43IhTIdI >+9QkD4D@g @2q9<+w b 5h,38˾V9zrpD_ȨÄZT;jBR ɜH,c+4‹4;l o P >㴊6Mې݄gdQۼa|cj1hh*x;dcH9pPMRD7b LڪR+RF(RXM|?: hBKLúCOtSIV1 |ЄEr Ń6IM@ bt=¢6 7iR\TxJߤM\ʆ C##)̮ +"!RpԳ9Ԣ7K\O*:xQeu2[Err@SӃ ĺ@LRl}+1FItb,01u0bj UH8{Hfʄ=KQ xXs<XM XFғkUdU=۠c-[4,(VhCa)pNABrLƌغq ӭ0vSe񎻸84 $|1CJh{I=e+4l VbLQ1TU%HبY|Py!=!(!FȖ#(V N95tIoLf 6`:+:θ#pT#~ETT*0#Bcm36ݬhdHуEP[όX.'[% v4<"ķ_k`*YlXh5 @28Rh*Zb|cnJijЄ !mbL N@X:M,aeF>FEiZNZd?t'+$P b͡UK,ebKo\u&%V_| kLB"S^#t5 @bb>L[̂CIK sBΈrَ]D?Ce|eFę-[HvA5QH9J$%( ,e*R4Ha",UIV 28:f3e):;]cqlQA9 X8 u5(L>EX|~a] @h>JU L榥Jݤ0A-؄ng5!=0H%@b%^':,`߂ ,ch>p#胣XXV) :ެ-[(0lfv`pgP؎wg j L Q?$h&TB5U3h2q\'.f;\`"923+=lPC1#d2*ƬcCn#㌠qE>HKVu'[<3$$ҼF*+h|ζku5% [ ,T$$ <Y +YT ff<$;>>? P5D*[8m>ºpgKF$w -Wqqm ڶaPrQIq1{#!H"h<ne,YF+(O“\v&txo~,&ao~ 2-ȪCQ.4 !ق@dum@ -P6II1,;bOi>D[2MJFO}y=9A\gXiC@,X ֕V 6(vi)N*UDckO$#I/7s lH1 FTb، QFϺLMaV t@ S{nflPN:nq lX8i8,xT&,n& h% XP[c9l/cvDe7s1:ll+ cE1ukZx1'!n?w>K0HO8ecHZIAx%Uz'Ȃ>+`UɀZedx79ct,v6wymf/]fJ|h[1cw{4ɎNזu{uEaУ)|zϕ1ÄE:אMK^@Y(H؃,8{7Zk8SOc AwrcA)$ yv=}q 9$F($MiJ6/>`؉X0bHX)RbAli3AlyΛv,8@PH z4iQ>8SJYJ` ,̐53%K$f$)ؖm0`O NE" IRB4u 7t'#6l h! ҠiWҮ%6mFZ7.hK Q*0JD%FRC z~hQ|̒v΋$iRy,>L=:sS} U) !bXeESAmPGp^?1$ˉ`rXb5v5Ce7f gH$jŭdi 0diIBTf'\Mg-Rr"fT}&LuvmAo著J4JɄ|'_|OǙQ9RJբ9GgxM6(l D]I%6!y{0@">PR=FTāq"E00' EP"SR,:)aQ?GZLGɠ&ILf8Y$)q=v XI,? @ HE$02 EOPER4FXitS4a-0>8c+|8H_à>& &RB[# Oa BHDoB Ilxҙ8`ܱS'#Xx m)𥉌"!ie@6`*'.'\@T'q MHw.S`SI*T|,O*11i .ZQ,ЧAb '6KiP< DO?dڣA"JQȍ^,,L@T`%M@V!|hSā"6uL9S[D(52(6.w¤RWF0lGgcT;38q =aRY؆98m}^J_  aBHkDdF @i @/ce+{>&( ئ$ʾ lTyXL9HHeN&mD^6m'c0d2W4(×V<kmq|r8鰝OQe„03 r Bu,l CD`D` PśDЁcց I!\ qFf5ȁ }Ma\P;RX~ `jZIR,~n'Yh8\HRֵ~&Д;VCL[t4<-C/L bl~K*S+ӝ3=0b # fqr ~1ֱ84 7@/arH~mRp$v.5•XXvcV'oqCT][?dP{B#.uAX$# "+8 g SGK 3ⴄbIq2n -H4ŲmnVZ B2 lh{L fY V8!F7!rzxp\"6!4}4(iPp;\3qXX&'FjS6kA^7D=7]܎o+[Ƕ 9k2ߊLi]s}ʹaic=GqN78A3eIUAc "PA@NtB[a(EЁN+p:97HA6(P8A@F V@4[Z5cɏxbDDzj x(⩩\xN%#pM$Kj jiO2eSTKIpEm\cyDrG3JAMd66ycVx7ăA:"_HB`Aޣ㕑|Az}A~nc>&cAng„D,DVzVtmUhD}DA@G4MI1]J[./ 2y zD0 E8PE@A،ȎwJWp  #&2[y#.[%-> <ÚKCi?FQޤBFpdq|H*r芕Ԝ$k]PwAXAwttAXbF!_fIDgAvnĤDRb{jhiqͨ4sU,xxB|1A (^@d)8EO`d<#AǙ"QA&oX5\>k?@a@4Hn͇Eҏkp(Duj:iIv`(„x@$H|h -LD<@,8G0DmtH \RDNE`b}G UQU^ 聑Zۅ#|1ĀA C:R\:$8]@b,bS+1`ABc[AD#@&F0\ Iɓ( nA+ (up(p!ԭT*MmD.pjDsd DIHyoPVDxl+)gN\:D$:L`xXLW%7§-m#3|rca݂]O~-cGDZz: ?ID'pD)G*+JK21#(.NIlƶGSG2@EDcɺE%s x<-S 0 @Ap@ P3811 \?qsAL }qi;cc *WTD8 ws!m|1l:?!!p;GV7S8 ^M`3q"<0Xg$;OM[?L"Zsϱyb-LL\bN%#L&\( #l''M2]D,o xc^t,MAx$!˴LtAZpLq-ۍ|@KˍT0"9Bf9`< A$Я9o@ĄW,<)=/A,xۤ+* tZBGitp7iDD.ckaĬ"HwGh [.NP4HxAA @ xLp HAIĀǴHv},dn7cC17>4u:Cq?؅OĂ w/YQ{tkA AĆ2.泚>&ôDhL2Vh̆G |&di줻E0)p2_KQLrA8L4̂`SiO \z8A[AhMdpMxs@'`Dщzsx7 yKw<[2p&o愞5L)?/}kKthtP(VKH@0*PpEbH83 ۪Sg$8rEV$L xi@)B/?{`O:CA2sѬĚMC @?Pcym} _t2|=]qh=mh TD?A0Lm0| @q8c/З/8@7ﶸ>@s9C`<|,8 :}G @fXF&I~,,v󠤞41 FK+=XPE XӎΜA<6j•9դkr_J2*iAcԋ۵;\9tpGxEST5.bY"vصkؾ C/'OŅg[奄 8<K % Q'Yბ0D֦0M]3AF4ʉ-Y0ª*1K ![k!Nrùi-dp! L/erC\;Ȉ1~0 nBXbTVIf۾@7!g 9qBdA8@V<:##)$+YZi%K"L!,Q-2q"F SFl20C$aK**hVt/!8N:* jo"\\IDe N9ǃ1On@O|6ڦ+.%huh^^dHo =h$sb#`A+i%BFJQQt4,#cK @ʰ?Il2K zXZP.˽p]M*/}p.Fm!3N@=$D[HE\\M%u3Z3LR2;hKM HC\3Xz!hBʦ5#+l>M "Y@M4'f3 vjuB{+bănzك y[k^H'bϙ(dBz2?'n,n 83ET~RiclLo]'ם򄂒 r  .œv( @0bK&9˄ hkACd5,lFh=)K~C-*z^<10Z\rbE"{ w`M-b@:;.}sA6` zZni_kb$_PJ$n %L08#Mvb>Ptɀc4H 0 s!=98 s`:!ڰRYO䓴 Zh 5  v#UY0Z_6d}H-TMQŊz4ma (5 &!I $Bv@] rq Rt}x3$6@)k.{J&bicP0Jm!@FH0Re$U8*yɦ .؂+x  Bl @NZi 3VF & H` N,:abc/2`L#$ a21~#ȭġ,RVj( D`* gKb)B$$d X80#, fv #^JDT /k KDCqW+xƢ .ʊX` GB Z``QJ ,#"  "`h1DQMO2Z!LOBL,į{Ffآv~+xv| c+xRO!N& |j-p#3$yrQ/TGjBC ,$2 i*jG x `Z3 &a dw.&dς `_2K.˩qZ8%o AA(" ~o?@hxXC$J3O$2rTX2'^-f'xJ.0EF$+"03r"a @F.b/-R&R΅z$8 XJN"(1a n/2;R$#z2C*/|KBN`4j!h,4"URvAB hgXd/B⩶T("רn.,"Cz( $u$"$acZ~%%B%OZM"hyt,*jf4 E$JxT/E-krZ GG".@o A"t5ڲ|I\!n d8< "S0QN=K>(R&,"v8M?9'&$O'Td! B'P7dXPiRCC[Tn'=\ @"~Z LF‹3C.41H"< `!b!X_uViVn1TvW]$!fUJf `3fA   ZB$!SH?/v!z?Ovx'\NaOtL{ Xi,CO U*^e*h Erf(C6kTB 2*~r L[ ~(0G/`b00"NlHΏ@6dk=JҬ1l :eG8G@%7E€Ez Ij:DK2PN Z!Vs#bU# aA{` l7%PXdb[⇢vnNa{QXrB'ĸVx)=T% $$"1\!jvҸjŧ'm֨Z3n^@FZ0 #d]uUda62뚽[7D:oRal; ;\6z!2! cd'(.[_g UgA 95A5ʨGO{&ĵD bAju P`>x&o ~ Օm@f`xܝ| DcZ!!Ibz4bԻbA2p#7<+Ln"zE@B@>( J`$ySPby[hkm*$#ûGj'&Kj0z!&bj.$ $  $1(Xl>d}wT" RR}UHn١AV-c`` a9!e_VAR?aZ\ܝ`C%b-Y-TH''/g@y)DTa \fP\P sSBDsAvڙXd- X6~;+': &a1BǡzY~ bQ H -R~˅!c՟S 2`|Jj jcʯ[: @t" !pƍ!7\xiH4j"2c'eK+-SZeHH*@6Fa4ڌV22v0Z@XgC+`'rCF/ F,a W'`QZs4!ٳxصܼ{_ <5lؾ ?6E>8. Pκ;#]>}%H JLq!⡅Y$I2C"aJ&0"QW]'VZ0DC[T1C ;pD~]O]ՔQC*^C8DXuђEXL)+H0fYf=efP$ >8aieTIsEvnp.Dآ0>E!A\,AF$1}C73:=Tɣ:sFJ\G\(+$EI Ef(  IF@YhZK~ŃJ6BN0F $ubR֨-iVLTFCE0M0=TonE%n=}08, q×)@ d&/dbΰE5Wڞ$Is0) 2(.>(5&wdO)XX@W4"-O*x q8ǯ!D:A-Q, &8J]ܶ*9U/5Vg FZ8CUxpp-XEpx֋Y)*ycU@]a#RNM@А&Ht$Y 98fXX< g(im@Zd$s+@Q6dz̎)2( p5!0 Rq 8#lbk!u;ϸ#$A(Ɛ$ KD(HB#PJȕ +h0hB[ERWxT%uMbQ/;EoRrd'%+ # T5t !c``[E>p",A b# s% IL}VhaH,`P P @WWPY03 ^36ů<pOo!T`cyЃ3y¼P †6|CH Zh X$D)-RRy_mʓ$h.#0ѕHDH Q$aJ%!bc,ӂSؓ~@$y@ S_!SFJY,ba ڈz(m# cJY>S A67xF[0]$MS$"́Gc&# ^6*MD$`4{P;Y~zsX}ԌϴtRŽd'! ^*0m [ .P,XNpU b!F"7E3z \B U"D dD'҈BOd-[qE9u[Ҏ*Vs9D[}5 gh!baf.d9Ls`?!hX,Ђ>W3*@I[Z&@O9J值Q l:T>$4O`ו|h՜B)$:*gKRJlMW3pSRb$18y3`Ip8w    -Bq!'vwoXlxW#r#OSFEb/EpnPfy4F*BQn&b7سp2%O X?{5SA|gA Ƈ  @S|ㆳCU sJv1_%,` PS0 `@ P~U^JK `d *r G 8WG {(VLzB7_-d` h !b pj{0!$Q$qe328Ebx5evZ#Zq"#ZEyTDd[xvm%r<Au/`/0 -`@ApCzOk(@UXՅ_XrƐKSAC' rg+xMp`}wJtzCeP'!@3nKF(1X=SЋ bIyB~!Bp   UiVxc3%wy|3ee'QZ72nFaaA:8|p=& fGس2ԎHaHP$A IAWHIsSI q1(7cqmԅ`1P5b.0ziV0iC[r`@ s @A`[J9(|hvX$p,x  Sc>l&QD@0R /F#K!=b<yVa!וj/cwr|g?bX=@2%4AJA]x!B^R$8^/80 iQ KMzЛqBh.i9>Xw7勋U讫yo2$σ pp `QWzi;z sZ5s(<_`etH8]*x87K#! -mҏY~w+o#3;\/ iUς dY7CRZS]jX'dRD/~L؃WFyu"K-07-9kwKE@f\+\\xaݡ ~D>=(sLnˋS"b틃5hm/.x# ",ʷ \~Q"4j +(2.aB#- m|_hf'F`H` GHps犮ˤ5ES@ئ8@KJI>RA,aZϣ+$vZXF 4R@?A ;'3DCLʐ$^G, W|89’"`£=(X\$a| .Sm RqJX([hfpA,1WO9ǜJ`.Dv,@ -R , č&d(#" lZ,LjXh$9,*ꪲfLעR z2=c3WI&AJW5J0 ̺x<1 34:Ì.ȬF$H5:[(B6EdYżMɐA" $ 0n\YnDth]SQxeu:B etg(PkI 3E1QD&X!12&NA-< V8ebL>l H`@?f<3X Mf;]:D,~}`g"ޓ1< Sdk!le$*R̥"r,Ta b4\3g01DHg 0 'FD ]D RTQ3XAibH3@BknGqeыlfA":#DMZi; j &Wx-w☦q1S8O Ȑ~Y a-1h@E*8O 26dH g[Ģ2 DW[R@ !gI: Y77kZIL-"UwRh!S##-KzВ԰,Scqʠ7J0 gsoPF+<NSTSZ`4DNLB-D 04o:+{ L\%vtA01Q Dߦ-YP BXAZ0*6NeK{۲GYl8Do@&@ ,`3ykVW=;qx; L h6cM be>PfeHm &z IA epqڝ]28"2 hd . ޮgnD e/&?BFj'Kc&(ey2` {UD` z؅p)A4HCZ֜њS!RW5++| fH D>e35wXj@bI²tfꓬ暅 eGh \Ș"M00GZ ߳aPBD @"@Q i1®!GSaFwDdYPx;Wŕ^%mqOC,6m K(,H"Pp` cbDW!=+DeθX)P }{ 9A29r?7 hTqyR=qVĐ pL/Iq.YLp?5 UK ɘ;/FȨiX15$>Vhឡ4I8`h Gl-9@xcipyO 9;0V;;qmjQ+0벥p% *X$<6H3=z<pqR{" !Ё֣< =+ Ȧ$cFÊ3: ҃t2= e92QBqC]h_ ( 0K2 `8 %p"11Ȃ@x'8[?šk t?Ђ<9=ȸѣ%X *Ik` p $LA7˶0l+4J4`Yٻ2"T`0 %6 %piB1- Z1ܘ-tG)i# P M1,@X?U3RIDy ȃ[Z,%X<!+p ȰO? p47[As 2EŰk`)d󍈚 EL-1o[vjʅp(P1ơ €1_Y#lt  O䎦I`ȁ3P}8(.DZa* B5! `46xm`$ K*+*ЯXiA@9p3lI6ꚮhAYDmU(I Gʝؐۈࣅ3=ZelpO=P -i̧({ހ38CS"{S%xP}3 ,жACˈkZЖA2  0$X99&JDqQw,L!y>$`9@ H ];M J3l5͔ڍ#8:(ʈv +ޛعOG V>I-X=(?y2-0,؎@ъكxPK;3MɈڸ LX; ( YG Z KL|*չHEK4Y@ R Z[5(hA(M_ ),A$u5\x@q.WGr0_0Ɲ#q 6Z, .HKa$;o8I,805d(X 4„9?7s{ t56p1]^=xڦ)!Zee<_)gc4 yp \> 29[ۉ R2iXi3G(YnWP@Xl "c,ML%.;3$61`0IxbXąȂXv3(tV bʝx3$t<׽0M_tpV*P&Y7Vg5ҁc4ͤ?^L`-S\`@y]ByXy}(i6ei@JUbXrF\r2T|Xp#M(ɜ.ЗP0@ ]Ve:z4ȑi4K R(^*D z ^`H4)]š/މhK(8eRcG됾9 MV64;ΠgEҳ@]mɁ) `HOΆ  qA@\^udݑRx=2'&]ip#uBU6Pwp 4(I:#R 11Mq-6bxؑO{hW- LVe4lH[hvl($ sX2F^1 -PtHZ3!4@1%H~x V#+((Oio ڌ@Qn˂I<&7̔= Pb3g| -D*d^E&/ x&^AFkG+>ܩ[Nh+BFG -@:([OeAXb ]c 8]/9֌Yx`a a4A*3O!HvrCx0a$ܔg殅^rhKTx G 2T^<_% ĶƎ\zn ̞ KONS2- =M^v͘ޡX"GL݅ B}XA*Zfs)IU[yKh gig;ܹ-ߙJ!`b_; Rw ^@b㸊KF oc RVZ$ձXZ]hs< .2:fD0Ļx+J7 WS`x]3H'I@ x2GG$ Or*'t 0G vt.[-ͨQr0)^h123ho)_o9blp@N4S]h~?%er4ߎrCR(AuKJc3Pux?B `pàA= K5T @p3x Nd@J(S`)|% hFN0f ՂUr`ukn k5 J@ -  F exՠ2,P@ R0UĊ,$K!b(4el0ba3g +p!D`ꚡxf ;8/^+|lVy[ 3 ӈ zti0 %J|aE7fAOXc*zA(B :dUeq &$fA p`C&VVbC:D5AI,iV-`^E^{q_ Q aVfYBc5OYM&ai+|КkqpW!0DA`B!ءVieqaG<[K5)Y'C j+HJjɏ~S؈A*a`VrAJf2kK˘!Ax0DNxڤHT )I$BJsvӖm u(CP 21I.ɐ-0Fy^ERV ˱,g{^/ p&WO+4O+Wd (N=x 0F=* wԤfP4 ͷ;B !u~p.4`d\vRPpu"QJ4g"T 8C Q,tIv'ZJx(s<@ nLB![ Ч`[f54B #B8 <(i%+ǒXWC8o[Gtk||ˠ`{5ES+WkN#ehRtMy&INaA4Ao+hJ 4P阻#yh,;K`" nRAfH/%^!~g:bJ֧1Lmͻ_)RR\lnt0gC*R$`JSJ>VKMc'H!̫'ۦ|XvRlb`$$c3pd!uJ'CpSA8iTL)5PV}WnA0ō+d _9jlgf+3ê%Z LH!+P^r ՜0ҖgERiO TFRΙsU؎9)`CpP #J:si2sD*+ :CX֡;:N;z{ɾpVM1k(]~w^FɑK 2`kxEV >/bDatҕ 8Έ)@5v.jw% p2:k?r vX/u ǚuwQ$?r;X|JVSӐ(VD f(͈))t 3H0\apK#ʸN]x ɍiEY^8_i, Ơ[(maa[eշۺ$V` @mE*xTZg1`had٠&]IMC'V( XLTX4_G#8.BQ1\JyWEk0vLV^͓WsGKE5ar =eqU XD F$LF )NFb}8 L uX pތKגAx) MBvtE, ^9 sDi$0N!\#qKEn ^E("Cc0bH$EVcuUbpGݝaNDC\VD8 ABLBE0=fEN EF\|E9 婉}jjnnH'VocYPPag,T  uy, ^v̑APƣܥY1I,HYC\ÀMhKQ{KV 32IJD}IirdhEbaWK'7oLSqpsv֨d~i]ԅ e i㊮,/! TQn`*pZO ''GV^t6Zؘh141́%k8o?_c=ʪ_ r_cE]NE82y;/MgtwAN 9hC+w{N?7A D2$/7v8'^,88n_p裇L1x"QÔ`t,fP"D@@0lww<LbFp'Az5 kt $<9$7/C(6 TMcE{9_A0> oY,%U YQqy32),PXۻg[LM9$PJ*|$$Hꃗ: Klo4=_;<!hrCp lPScQj3{$ҼoE]"1r& we n8+d29/63@ J[@χrjq/=3cluOggXt[vMHޚkʜ|wQ]KfwBm>5,KoVPz{p&UmV'[ηaBjH"6EeeDrx`̇6AaĆ $`0$6$@c"`$Im0l!d2B F( G~ƌ(K.MERVjNKY0j*  i8 mא0Mk(6H х [|@@s A@hD?pH IЀfz={`X3-"׾唷Y (p!P+dMu![a7l 2Q0`{%283|_h/c޲, zfH"ڰ ,8|:KJB9,hEZN6k,ؾ$:!ێk>za/~I|[qEM̴K"cB-hp9( :#Θ ĎNTJ)k1=!;A"Oa"2$N "2&*8M0:hZX2J@#b:Rp8R( IxP }((FLDB#lАhFDwlhӳ<.!/M+u"e;1 b kdkYɼk}l59ɴD|o;#QV^& 0;Oӟ6JXbκLTfgՠ6B€z'+'@́}t Tu~@,]F9 nZ*FM&ց-dLNl 7tir@W. :ѝoأ=**ҎYf%ZK⦌ `OwNM. bps x@0do(b=OEʮDkfA%ݾVAln㖻VE1nf.;QND+G% r˧U>X ˖V]L¹b&Ʉ53)55.IȐ:Dt%(a*;tF&b ,'Ⲗޛ\) #tؕ nG*{_"]du#j[ \+wjp3 PeVp`,)Z'uX%NFdv32L3P;h'խrp[a%EgjβS2 +ZTbkl~ZWjSF0ﮊO⟶&4L D-AJu0)N f!^ ixQ犆ܠIp|0 K3.#⩆ΰ@%uG1#;,in1+Qqխȼ$2jLu"]gxƫ]kA.}H{&ڄC{'#k<")o Ls&a,m< (>Ʃ|0ق!JRf+t)fzٸC,-޺Z@KIq^ix}/ZkSDlE574zuC!vug2le0J[z4/OF0~'b2wlcF_u)q`kL%ݡfwn[eR]O1g"lAmW|2D-~b>,*{v8.vE^A-'4h4s(Aw)WZA"t1uA~@\mƁq,(--6Ut{YhYݶN]Iaxp#HZD(PPBaffphqAXUOqe@m"\dW!rQY3j7XX+g}?UD0OQn-p_XVSC‚%<# #>@?\r'VXWx⋸vA!)ˆk`X;Nw5Ths'؅pSV;QdZ8fbFjeE#~ Pj0598/z4:!i qi5vx~*U؏BI"n7i]4"h27Bf#WwqmlܘEs;^t}&e@y. 2 1Q;RXT|Tl=i:a%X"Q’n9'u`0VRX >Go_#EGjڴ1cY sniy=!Uv.S5p;D h297zDBRU1@D""ـ9K{bS)4XYve6cIRa e/"U')h,E2sofy}їlI*!k3vr蒂*>aɝb5!9 !35 6HDׄEucԚ@wID&7&Y#%sZ@8 j"!uX%[Cb6<0k}D4a8yRJ:Ѣ'QM%2<09.6|1|?斝HD v`)z#NcQUڊ '!2sqYjf P/  vj%)\ZCR/]ek?e\92dpїg&yHkqf`O[(l`Tx  @ }PZ: %n`3zOD pFQ1UZtpJAz'%>EG e)Ѧa 0 / * v 2J}@Sf'ccYMx!9/ p`αѱ|yJ8aGZ؈30Rs6$ U耴(`  :WQIYb}'4+5ɀLN+tYTf St ({ XeɫŴW*5aaX`< P bTWV@A6z☺诳 'Tu.ĄAp[# m1q J,t_೩u90hsZKyKrì ?89*?pQ{_H =5c q{"IAI@PXaVr5kbkk?c~[PqD|䑢?C@j} (^L.&v ]J4.IS `pC@ 8 ZNgAQ%!F>枂$oe:q.ZplJXPN  (%A-ǐ % q9av Ȁ 01`0!dNh9E8ekn0|D՞\KY>.0O2?8Ph=gIp =/p NL0 0pP_0W00_dN1  qⷄWT8)/s/u|O߭x\Q . .,3pۺ0ԋ<~p΀_ Woq .ZOs4aN2, j`%s$]dN Х+H$e+3X&R&T M$yӔ͝2uTPE, dBHR"ed.J0C'^pKX'ٙ XBe<|~t@z:ur:2ZP Aj$P!1nd2dFA,}qӦg%S27ݐSJoF tr]!3H0uKx7gѢ4չxѵ+Ԟfn$*H .sA& +5L# ^ 2sAKG&HDI&)j8^LR.n)t)ካT;r>a.ɞ- K" ib*9F d iAK*C  J(B"l0 [5tq$8 gcD(LB\ҡfLMGVB" mHIGɄI/!)og$t!9@  0KŠ5mXl$iS"M8T@Ȁ9%T2J%$45wU3 ԈbQ9T鰮hiѠ( b$ ![MV]A2_Ϻ,8w=LRMESj2% !;; -T&xШf$QT64HrwK.mw,Aw,)uA =RYULA䩕${R*d`@'eoS2d sZi脲=0d`"xgGà3k*W]i߶VތI^"B)Eb[Ow Nu1!$pO:L)y5d~oɤBD قkl$%8.!j  4}+! IZ#Ilh^Q!ti >o&ZJB^2J;a( ڂ(Ep#$$^B\){@74bhYs8?Ed:!pX/X Vr3!T(L)`cu.!*C-4PWI j-4B4 l%T) td5@[qb?d#2pM3^IBP@HBt%5yadb#ĸƑBXga kĂJrd*cIr6@#qLAʱy႒gl R(0(hDkRHz,I@I)q/.(=aҭ$VqG5+nadba }ÌC`$߀-$ b|c%#τ!zEM%U`*Cᵩ)A 4EHg֙t+H FRBHKBĩL*YbB7<=M9B,+bԏ#Elc lx\BN b%fV3(' ȠhuL_MSkChܻ ,IH@A^3 ) UJdEQ #l3 h%,`aOs L$YEkqX@(d3Pr%D2LHP\V>4 kue,ClZgRRµBY!ִנmDKF^(^. [, 3ffU)8 ư7UC!@{$;EŻx302}*:daG1r36 rk±Q5aӨeMxyK"kиՏY%D bH彷L}X~y}S.9$It HZ~@0Vը yriL 02/wB;5CZ!3"2I9UY#'Iϓ!!G\-g9$ʎJJ pH! wSIAN5;%X`- _VSL`YCWgZ#gR>T$5dTƅW|))Ae&5W&ݙ@ ʰGb&/`Hv]P , hSBe$2I'$OxN }P) IF.% kZc3. g'Ց82]QVB!ӥe‡Ar^bSt$:,1lf/:< 89h^@ٛ#lʚ`2p#[h4xKϡz" ?@8[S'I>+? 8 Uһ^4sK; -ۚR` Y@H6KH  jW1# -mК,p8BP07-ࣲ)hA@>șH E: .U;w3lY!G⵺Œ$$,<ݚ 5#/%V#\Nҕ,O) %!`62 8C퐇3 c, `c`B9 * 6P! I4>58F,԰w[EVCR2Lj+S (˸C a3+} {CH 2 ` P04 u&ʦjloF5H H(plؒPDH#k鴠@@ǔ؃Q# 7F! F#0˭88  ETA#$$#L'3/|6kyr x Mr~|;!8x\չǀ$G#8=BR 9\? !"D?NVٕ'dOiHdc̔F3c/I #pC*h$Xhےr X=_bЎ: ށ-b«DBJ(BS# \ #c>(H7K җ \T S ̿HCO|Ti3PRƄ-% kg:\)L1uK7R* fGe~ę͂# ;Nн|T\ :a]r" 0 5i W0 K!IGBX"<0 I %XIpN QiK䣾!S e {(%|'HD&Pjzt1ba=cvۻG_`8*lPE'$U5΅, .(I5  ۧ=-H:f݁湆PH,%E^t]>Hz$iK/R,GW9[E5cslNQe&9V#uXݕsr ^cm/Y?8 Hs"N>s2'+sZ*JH hZE'7'vdk(qKN5*NeAUqn n ,EHrTW6S?c%6|* ~U$]b!`ȃA8ɔ ^S Ihk(#31, :/Ʉ:h|O~֒-ioǙ' VW:‚ N.Ƙ'OvEjBvx,l*֗!WAmΦqgnI+X2lyM}2ю2"G3#0(K(ScBI]D &M80 Ū&L6-^͚&2q)ҤRRE$Y wWz<ɹ̠=sb0%,f>}:1" 8]CXؗ/}dEF>HQY>p`lÆiD9f U f]8 Zqcn:XQɂ4.O3(ʢ 3iR'O=^/I Ծ:%4Sj S  @(pAg8JQHAt2OC5`v2.,C>IX >f)VP $CQ}VIВ5CTE[C}[AFʉTZ$C%T(ԡCAGHTCّ&vz"HyJGc~~z̒}I  1ǁo1b4"]r7ȃ9xx  1 :)&n%jcitC ZCM&$rC&_MYF(YwcGfZQI9w9oCNTSu]QRU"DO,Z7$1<Cl $) ,@&2@P]+:\ F b׬#,Ch8t$}`$f8GM[Y;P = y+L[RIoTfFK&df+ĝwtot/4/B?DT-J=j^MGPJP"1 ]=C ̡Oa?r4U)P׺uM4y}i%Bv䒙D9u`O?=wE&/59SMxl rKTBSH#\vQ(s2ూ $:jH ;юvҐ.|ѫِy`VЂ }GDSHaVh`Jm0oK5b!~vʘLEʎxdq# f8 F(,$C"b@؀WB F&Rຂ;,oJW^bNЅ>, ' $#kǐ; i4T'@i .,qKntw%n-9gtA!l IGH"(daRld(KQ AAYix% z䓄$xe?ǐ@$t?&9ZNC!f Vu-KӜ$TCT16 7*ZM:CQgE![ܦ̈́!}8WnI>$~䥜 BY X J`\KhH:I*Lc^R FrhŚ(Sc<.l:]` 9 9.O|ŘoԔU!:t-)b,JeZaHjvO,u6uv\#9P3]"0֒'.%' -2фڒ5ϪH¯d@yQq,zP::SL!x7^N C+\*B S1 P]Xa[KMoai "H@kϳZ EIC:EP|ZwNTD\WoJ>ܤ a[LSkZD&h+Y#4*{ٙ8֠}{MvX$V@*9B!1aADvыa s<,+&TH8!8H!P3 AGB&b^CDіѨG3 L%{[͚6ߨmLVqL2EJlPa?)C(lb)NS%-ӟTH9sA"$JQ7p ]4"# :s8Yf>8! p9H;a-nv r=i `!,3c(6@r٘{⏫]omYWPF-\LNv~M8Z#98] #cNG5yZ~`:) 3 p4 jD#[#⬘x TH`bC$mb|.3@ 9.P Y2T26:k'˱;qM2eZKH]nCa\^)vք&3''a?3_1g\^]< h$OeV(CO.^Q!PFAd@,H91%ZyHSR $ڠZQU(W8ߛPu]S;]_CQQhQ uK\ѕړ ma JWBB8L5@ 1HyHa$|C~KBijXxK^>D\ ]D :=yKCXDAUTMDhHGAɻ$K I֌xNʽ؎N]%qD# |@m X_AATBa"DT^( 1!B ZCC @X odTGК$#JH ,F0A&DVA%=̢;SYwiQO,LIE2 K_1N!c6m6z82 9.62D|1Ĩ!LhdCAcCC ,4UK#uT]bC,$,dhI=AGC@OɑK`P!F@!P۳PUƸM@ y%yB ,ҠaNdaIO$#B :fl\kdJ.Dm%@=@$R&J`BAAeB[CKYlDwuB"KDw^>2@]VXpG^+>gĔAH&kh@Q͸%Ŕ E :%qDJC| p@;Bd #sv 9UoQX Nĥ 50nXJi bOK :ыNXdUJ,CT UcnM%D,_U_`!@C$=ߟ^/f-!ąfC^T#C"+4.|CD,="e$9휬hBHM~UUI ]SOߕ F8YV*u il#v:?+՜Π&D|rnX 3BTR搅fBi5ƃŃD!7*X\,RhA@$XN~L7o`OD_a$~hHW:IIDgM\0_؂Eb, teQ)QF ERu`cRXa2jaB CX@ R.o΅2OB`kCD->C2"DT&,'F`0 +iA菪4A(UUE̥^gVy-@.2t(m`r)*DӶSgFakVFi󼓟D-BX|MEq@*-BݰIJ/V<">8C'4B'6jK vVJi+1X@#mA nA)ԆD$(B|4*աbqoDr GFEIQDVhpubƱi-APp(!>t̉LDHLP(L) @g"Dg@@|BApBfhR&BX9AA2$)>C!@3XHM$^KkĪ( y!D*, >C3uB8CGN!B~\9.sZA톆I/ U$r6; ܋@LPٝxv4t@Wzapo*dTdX٢Ds05@x1j5<PF,Ꚑ P14@'` 8<*|#4#UoKWefa GX<4K\OCVњV׸<{wU\8L$4.d`h45%,=ԊPd!lF?Jxk-jͭVҭքL.xA`]ABQ7DC_%D̸6B sp@h dO1M m% Yu V䓛)5JO*wt6XŸf[@~'|M~ !DްKehBkO9hwhO1M0@ zBm@?D xC#H#K'@Ï0wÁa)+r Dj ؀exɖtUQ"5:M^qHI#/P :|J D,LnuDZԎ+B)HqD)c;pkLjNZp: [ 9|eCrD^dh8H7¼W,3iGXAf6S|)dUS|TϬIl.KI)i]C`zU[nSխbXWڡe(JyC<|'.Q,d1$eׄjNŠ܆#sR4jksZHAV_OEtP@gl$@ H ^;+vvO!w9K\]@Dz @ ƈ6dAaNCbD ;j#%Q_,(3P$jYة䓉d,F&&I ` Hv0-]W';0҅ekJt¢󕢬Hv!̔+ñCL&6h6p8PlG( Q6J%;$yɑ2M@P'Lkq&.}GB*aJ }x`I,.4}UX%ʦĚn:'\hDbhHGI ÔgE%("P,> f  (HBp ,LBٌ:c4tr2("5Pa6.jlҫV跥3#I4 "Dr!F`[2bAI @>B [Ȉ3hd?V8唪lTmKt!DaÅJX(yW=iYg 0`FGhHnB $(,ʅL +D KP Kv򲷉ZH̍v=`W3pgM6\1J"=##DÉ>r&c5-Y]`hNa{m^z*848,_m'n! ;fV$ZrK 3Uf\r`*y! uS7UX,rp8\i3 OƔ[ze{O +A.ēGxlC-D+"=1MIex0wMlʰyx)9c|8R2 \T@5,HJ>9l%Hsq\ J.%3% q]1 J!X\@TB2QMN@ٜzͅ|h:|S >2B$d+ cc/O(a@J<#.l%$Js--!C%Ԕ* tR LnPnvjkӜS. $Hґ ibHnPdQjIJp1N UAMkbӫZֲ5Q,_ ӝHQxI+.!BTbDJ }XMfыNt^J25<Aw{-#F,"i`hczO]\M7K;q*bqI\%9Os|#HӤij&%Ȭ$'B@ Y *V OHόYrV \iJ.E `rtO]X*%ԬʠD'Tr#pd|uD ($NG ԏPwj-f A %!L`8oJQl*q9/f` >AR6P/njdlJL-mB4iR``!T,7ΦCׂp)`^c*H㕨`d d!`~袹\@R("Q* o0C/y{"щ.n!h /a * ` 3Qi6BaRjRV1e>!Tfn%|b"&$3#Xr^R"ڼX p`&w.bń_2$D!,Հn$:7jpK`꺐#QBr^~` c(e1l292S̫Aћ>B/ʋ$ahĬ-,< @9-3,`z2 n2-2V&?@3 DB4rdb3H ZPJ$j:4j 6SN,6n8}rf2&FrK"Jb &!L ;'O&RBl nPm="y  >D7"OB"@'B!OzAH!A T @0 $B3:A(P @ R1lSAH$8 2f0%Xc_tE2Ljq8{TVCjPA|"JTJAF\@}R @``2etLmfK&F6%dM`+e!b" ma!0Gt lgt!*" b IS QL!2SS(TGAFFI~p0XdKN! \$HIWp>GW+Cnn!ZtZԆt #WPѶ$ZqK,۳O@LûrB[\A,G7=tC!/?n!Ox!H, D@V$.  *"uP *62@ &2-6_BacmET%"Fe,5r!yeq^'yFF,t N wVgp!\$~+?'m;/f`d@j} b*HT5LrfTL4, ;r#@-;n?#+ol\`pW@1&p``u! .C怚a Sb CԬJTY4ZMƨegΕpe?Ia6 sBLhhC vRL׉`l_SByK":ykz#X`@ &j**X 5`$/w7%}?2h-@p`⠨ޖ!jέ oBO_ upo"`P Xah6 &I F@ (vH#5YFPv5h B"F`ǤLbw˜1!~ӂtfO8Qlڪ!"/`{9*sE" /?Sx"\e bC3#&o PiEwn ',!5`Gy 2Y`` YA aFs y @ _fyIXE\Zm2r+]`$KnfMIbmˑJB$q+|ϩ!/WR Hb2$=eOBx>4:Jw.Sr @ p@ `I`&a/z],!Uy$pC b@@@ .a;‚AP4Q@ ` D:iSY4\0`JJN72xLv+Y)[l op"(k tY`yQd) Z  WX|H7XѸm Tb>z:!;5(Q`e +@3e(5N:^rXaoχt@Q@ R|G$aK CZڕF 9H hz_tNՃ 0 N!Zb-zwfyN;oJs6"hw,ut" ec p`NT`*=b[AȶMBm |"Je4/(%Zq!^2hvӹt ȣQ1se@ mW%A i;%?8%>2$P`HGx1gp%h52ǐ|p$c|!Ԁ⪙,ka2M23%w*hݒ.oVA$F P  E`iBQo/t4ËE>A!CWQ_|~EzUbL!hs!rJRr_#wLt"ZL7VgjB+ ۀd#^ XX`a55}2в30摾OTR$də!ԶBBXve@)4K47OXe; !ub5bk`v&W`g\Fiz 5k~!$cI:Lo;j1?f/9+NJ֯K `:pJ40A^j)xM2qXJ|00 \--1AA+KI\qİ{|Z`qApG5} A)FKԃ~-2LZ2@ll a} 2 D 9A!y] 1^w Ie|hI XJ@ )p0 @t 8 ((^8ā K`paY2kGFE 3)v! n0!&H@9ɏSG8j_kUM rh+^'0JX۴:0OօA-00 a@׸ǁfr8RV,'%59dG+(0H4 K^2v ʼn" \@ JwT N%$1Fڽg{0 ISȠ.vq6.5*ȘSQS!(VFaP&[$bP Pł-\z`iD (:gЌjMdkԬ i+ĀAXQ+S"RN P`T̊lB@ I0jl?0DF<BHA Wb(8"~5'nы^ kŒ G:B  oM%0(k* A[dې2ARL+-%7YraLhsXURh'E2WV"ê .ױbMȆK5)b\RquꬫAR x ;,A~l,O.@6 sP1,V0!ypD8{pDHWkGhNbj{a iDj2WۛJ,PiF a2D \+-D݊V!D0 78s 4 8@ ш"<7UibS^DdQ̥1w\1%Xa:Z1A΁hL&$FZ|K 6lZ$@61Ɍ =f\Pj yt1r x&zk30zAJB)ΛAt8` ?)N DѧD 1[+yX- 6&n-l$o!.}浸 ZI[֤ZQa'Z8uY#0t4j 6U Hyj7H qO-PDr}Czg1A1[<~1$I Dq.a aAO`v`#1,$ IkK׊Lq*jeU&XEo*ח)n1W!]Wsxu{AA|o- C 8XgLcp)b!υy^k;r+b%Aa&b-,%FTN`uaatO-W(w|6F r$`Lh:"S @aHaVYq3 PU}ޗ~}&dbQS\Wych#!O `3T nŕ G!tg``&AIF kxbBmp[_Qgg9V7TN!r_XzVGi ]0"PK'E$F2Wt;GsPxbT!`,0J" hN@`CW}o1z߂g`cBflqf9fY&f0R"mPVv eni7 M!MeAA&4fYaT5%Aj6~vfd p:)l0qA\eUEVZqT()8W` 0xB yn8xZy&SVG@(2@pXA1@}:`a%BWv)i; Y}?o&0?}l25 PpsnQS6*STV_]! Y\V`64Vv 5!i.YA-fD7W`ԓ>pX*'y5r'Nhg5\iN }H`2yʢ]igXr{{h}: a яA!N_q`ޔtv}}׉tX'gb٢Śp#C Aan7 pD& 5 ,bo{^%yQOT!J, Pɝ9N@IWt @&:Af `nYF!PIiZ3AF;C,W{ɄC}7p Ӡs0_(zA )RSPakfsUu!e0b\GfEMU n5Qo1j>:вDJ]5- VQNGX5q R +eq[*!Z@+6y5aC:.#Iҷ%y *xЯ(AcDA%0aۨ,jqyOE }f,ڠ JNx X$2}}|"0Ǚcu_[[+ٔ@;w_ahbӫo7@q J5!hKT2y_6`P1LU1XhjkCjg_jJ}?NN 4TZi@FWܸNﴱX|;Y%# |qWj  sS01zq5alBZAk"?SQZMC 2jc6_AY@01W`AѷIAtT$0yZE8s +nGp2+Y"}jA}cg [DE/шY:X:z~ DI &EdʘN `2 ;5kllYeP]dTlfL[QKKjKĨHZx!ti:8TXXYa#C;2b1Zq>M)q1yD]0@^L 9X2aHZ5j@ y2Ba"; W8 ` J0AF\S } #G"AdfLpƘ,%HnAqg5YgL1p yJҐ% pFVlGZJ Y[AvH K+ z5!0W_ah FfGV2t a%P˶%` 0q[5&Z!͛5sUl aKc!iD,@-ݧ3K/ A97-\ UWyA2=+(..j"'@pHwgY! ӈT f,'=YiNtN}*(8ItH0n1% {dXȜypݷ ?Ͱ5Ni0+ZMsaD /4f`ȢqXl%  pM nŔM0jAQ]yٜ]di]ړ :-e2b%/݈#L-0iT J+-Ϩ(:zUR$(PEpa`pA i;} $"j6i\cL"cS9i.n #lAPr0AW N8 6%N$0QC.Xhaǁ8tK(9x nND!kXF|T*gd IXDq&jX #d,h-[o9"DoDOz"ÈĠ >p001OU%0Cwh2eDL ءA4`;EV)@  D?怒eu!:wo7sLӞ=|IHR0ElHx9 3zn0.$b ,ȇܢ ' 9.>8%xd< [j Tʛp3KRB: -(5tN 8i 8.9HӠ|*@8Jn,-Z.,`=]OPr,*@,yhL"5Ȏ2O"n"*=|⪬8X<#= C2H2LFøFW6ɠ\ i~ 3H"Ts"P" +'j3LiS3f0h--[ɒV'Ml]RWB(6ec^@M5 RMP@M< `?Y TA`,$CV2Bԇ8)^@,0Zh, JB\B+.G z +7C4W.\D~8e:PAj&p"S ["Ʌ p-|8]u9D , {k"/ N(3i'HaL0sV$p%V8PhM ٢&pBI2 +ʀN‡lfX8y.j+`SALy=Pr }5_-H`I3ljnΰ o(ב$3/\D#?T` H "(!" _l)Vdz)c{IcliʹBs.E08< w6Hp@$WC :BhB*$ A~z\z|H~3'}n0ŘC jsTi"8BZV"o08![}Iuq@ I_5"fL!u3\k$P# b6 EB$h"@46@\F,eg1PB$,l{ gg naص\B I }҂`!KfF 0X mbچ"%G@pvA -dA(PzN")d1ʔn ұ l*q$lQiuLi;T$vjUCzUK)BRf)A,!GLa{<FOyof|徉.!DNĠ&) `$AE7 MgIA kV7 H/ v'@,1O_ @Gt$r2,# DM]`" B]UW€L@ r+b mM!O?#L dq$IexcX-Υ"L=#Xbdb RbqP. L@u 1%v 9WDeP :uUz3 15  #`&8]Ѧn!_ $ek Ir$UKa*\4ǰU(fhĚ#$# $4).6XN@ 2x5eltỸ1^%}DD\; xs8g8u Hԇ8v G vH$ Eh>EG WυwIR"uq++ p),AnKD7&yk @y68wHB l&O$|䧥ZC#8CjmP恵TRB% 3fA &S#N1Yu>L һAzi5Z0 Z㜕GMj:SHTr4MH 2a -GW47 u(0X&ɍ4.SИ?Fۦ3>;.hGS0H`z@+x&$K,,\B12P)P6!)̻<7=PApZ!( 3 ^8 )3*mJKany|3=0ъ񃖀0= >|3K-*6X\X Ȗ  =[nh(2`)W5Dh YU DIX6BxM,jETL⮐*#: 6mG* IH1% e1\qF3>p p5$I ̐c!5A:x =1F,A|4HA\ȏÇ _{PpF hTd3讫ʴYIjMy$ #=pw4D,A8%ɢLq1|Y   II5<Q'L܌1X%2(%p9 )  @s“4 =3X`B)oD{F_Dk$D:[=" HC9I@h_0qNnh#G sš.9  . ]݊|)=Z.CZJfd>B5K;\ TMN^@LpT3 m*PK`'b!ȔD#5'fсA0 p ,AjPÒ(4 hL!uX@`qhtM\ZH|T)TڌnX=aQڏ{A~ Q Ո4.#&KLЈ?*jUڽ]ˀ')cò'F3SF3&`1@#䏞]}I0 !xd2W +[X FXPcfU=F 1Q0<՘ղ7 ,(PF+pR*+"@ L3/x=dB |N>~ pK ` ݈"4]=DyZR$_8[F-+11ո P6BhiXK)܉0CFY>82_-q*I - `#!˩5Hk|o>_NŀI=\ *au!9 a1p:nmۮh"0  V2Ђ wfXlƉzD}Go5<@Ȃ<ڒU;.΢,2uZщ(E ߵڍrH +ٖjC׶ ng8hOqpnȄq )nVaL@UQYfF, &Fe ll h %S5rHAk gxR[Xמ"`+22 ^)p9G@ݲMGOX0(+8 &}e @%<=6ĕGY ūخo1=p  yfz8)P6ec~NJ-Ng'k /]دc vV Ң>q (arGp(⻘UI1FIHh`MMC>v_srI;HՌۮ'kI3V ؃c0艈lo|_1[_>` 8`N ELdr€ Cp(qH$KؠA(?$#GL'k0B@ lH`ρ h(E 0OV@qe !p1Y)`o>}T`Aڽw/N] ,b #<-EqBPFOK#Kf$%om擓/{De=@ QEB8p+Kr&P`梿dp<FȈoc ,sfKXơZJ4t``PI1z5v(K, %@Gāru)Z807gqAs(~^$ ^2X)$X ޵|LUjFDM $Dh%6E9a  eAP4 $DЉf1 QR*3AYyR`GG&dbT RPe9p I\քw#&) l`A,1P (hHP eUA3 f$pQł5Eyc{D^鞦 §ky0jÖj`)Xk=igDv (0 3@-]Xp@ _!CJvASmLyL2XJԩmȀ&k20N2HR/0%G R )Wk%{/SR`GhS!u(AvT`\2%IaR~e@$J$AK(h{Mw8_=KܩV&~z(l@=Wyw1(m2gPF2%M4_ 5Ô$xY e@x`i K x'FK[ _w"(m&,&(p%;{88P(Nx64&# :Atp xQMIRS |hIJ3:A".fRw>ێ.qQ {"ԯc"NH*UDq )͹]F0R4;@ jhax<  ā(LI/n/=~pcRU>ƄS *k Fw$ 1A$dI$ @ 1R1BlG Fr@B ([$H)Hz2dˊ d͡(6b]duHs",.$?~{ %)Pd)I դ3*)ɴ8S{R6cϒTbd =0"K} rȎ >J o :I@qRX:;@r,H -L(Aҽ~n"&QB>@g)|̣!?E)-IF] @[X5eؚHH$y(T^5AY^#˶HA|P Vu/p뢼83 A\p6U_bLJY3AWڋ8S,ɱu'W]"&s$AwSۓ{42Z$ (g2Pw){$I )@XO@0y %V%Lm$kQĘ-tijR `(X7t]HUPRQ:T0@@f7 F)d`&D:>j^ Ԕ#ALU4N HL@@U5c!PV^Ҳ܋ae2HE31̗C v[Dv<Y0$H?Ɖ@2XA #^.QWuK#D 4medZ. J'__\0HZ3! C7ʗ,I ;Pq'*(, z4VQlSObSBZP䱇TTh^Aa3ȗ5뮞3aR(euSm`}EKtyDQ^wFV ʁr)yz $G$*&AV˒٥-Զ>q2z7 z0Q`>V=zU/H(I}} |0` T كD#Q \0 bR+}/dfe=Iz&Z:L&} # &I˞U\/jjRX8 tB{P,I)VNW3]&O~[Mm|$ 1&~M݀6@B Fa p_m0'I]5y(EGB #wz׆#]vȢ^6^d#XQkB]eCFyg@WByexЎ>}0BG_t*cGLΧ]R^})\>fǠ Tۑ=* SUV6'vVz`x]Zd)cvфJUDYC܇U8\~BR6  *GR4Є{VCM:He!`Jn2xвYSMQ\o,wDvtDқ.X *h1Ehkߪgha(DpdCV<1G L,CIPTa#:#h%I _>[ә7VkxXF^^[K qOv~?ծCf75~A6u쭢7BʽM3v_gT͈ gmKAĵy >x  )\; }x/!X=o4iTf8׾7ԩ(:c! B^V H"|\jlVF*ZA`B C a 9 ?Ta%\Pa%(b i6B+- Ƿ{} !LڌI IH' 'QrdC樑#5 Qm ;2E)FX1 nF&̞dž`!FaxR !XG ThsK9 e-G8["hP hzLH3|D@YjFCHt`Њ loxDk"15ht  9;Tdr;# 9 KbMH↜2@P0* F3; Wҁ4x %҆65O _!ՆJԛ4~/F2kgu@ZeSB:D&bP%ײjZBt%@0u3ڜ@M ;Xհ :X iȒQ q!B0P)i   ĖpPwH\ɚL5Y(oiJ(gYʅH j.n 2QmEYiDHe/yZEg 姵Ef+B Fej۴(N$3^YG7Mr'u!C)~ͦ*KNH 9i'88AرELSĖU[̐#ϖM#Fd@DhfD E#\&b O 4WS rf@FQ6IVɃX%RJ2C=w<I0 -t_tY">)W$Z\egnnF{Ũ4j #d ¿+dZ3#w6d/ry6̬u=xXZaOG `M !&-L~r "o5G a1J*mApAS- L#a06s@P+n'8/4U[,c)VaP `I(N1JLcB%"fC7 ?6ڷڨ#qAek^yȑ#c{!]8=DJgBRA١1AG#]QyoG1ɘ1ahxE%+i[Px&@`ǚg0>~\{0zdca#YʫBf`,@t_eGڄ1Es5]@ _6qY,('qQ+:+֣G" "Ԁȍ0 )s Ax6e'0CNjw1(華J)iDz `8P]@y( a ҁxKj E@(/>p4XO^7-Ra+c85-Dwl)Drt1hQHac V ˠo\@Pz09a@ H! EV[T$rO@V8-| NZsy} !P>%1pi5du=)C ߐш <#M>!n/4>7?Wj'h iIUWSw iUouȞ  GqEE-7hڨ\rqu'{xoF#ThȖf8멢,2 > aa77x$Ǡy^hx@JhhY Noo cJ! I  0EAѩ&A 4Dh ;Zx!@ cPYd]@"ʊo]ܩlѡtAp pfJ@ S4A`Va뀧x z XУz GK JQ.X4xsUZ 4Qق_RWmF``CG j AJe`zry: EwIĐ y F*xzH 1J#%|~ },k/oϴ\8)ʢ ߀i3MzO ;r@z cp.ȘQRl:W$fS_ 6 ʬqMa ΋rC P@ Ȉ x r Ȱ10 zJp a*cӎX,M0R0KmVPhsLKY<ļ3#*z | `yT, :J㋹0$r 䀮t{RI!6lS}*}j =[WaũtD' p x\2 1@L" r0 8 z g0y o. DrRw-ELU9kfGp dyTn3/M\Ý:iFK-N>~S^!0s pj$ "v鍰 {y`Jy0-׻=شVCaA<x쪱*qT^ q4.@!1N%#0}2|Np A @``@h1TgOȶg,Ms:ˀ8]#zC?ثEZfNTn.Pt<,<:}c1lr 8P`s~3z(5'jNr {5Rt* ѩ΂R. :`J ݽ, nCJ K>Jp_XWy![&LJGLPAH r~Y,v@@̀/ƫ }gp O蠇 /o 0K9}io&zlϕ ^MQbT, LMI.3 ,mjle;w#N:БFH1j'*mH#kA2 seΜ=$5r U/P;dJ lȭ71=XDLj b5j013_aUcE+xx)=ьJ1ҙ:#$?&R_խS-(|cIq -Åq ==X4{^`}˞젵:=id/!]lѥ Z uᵇ2,\ov@%ʃ5PLo(BtWPycA<'@ 'Zj.%& FD*1hB(_-BF+d)$&>o΂HDUs3E q* 38FI # 4\@Ws]@HaB2 ⒤XH𘝲!缜BDNBerEQ85ŵRN<>X*kPl):iT9C B<0 pRJ,a8U11nY\Q" wTElt g+]o&j3% XXg:bڐ_*r9Ê;ٝkwD<|b}  ᰍ&(`-",U /ʧB=/ZiO1S4oX@  ..B^@balb$U_:h) m v2Hj(?yzw qnNlP겿w hÊ:" #, _D^9E fE0G d5ĭĬe quZE`2;;!G,|` 6_ B}e O}>i3|Ml굫 3b.Z V0B]ben@MoLlU"L lZiHEĪ| g @舡nKY/2ш9m`E'EIG( b8D=D%g8'kzBP,[x=[Ԓ@Dh &s0Eo4혩R͔c* a#< @9% $#H|<҃9ʙxxE[5Hy ae qs+jk_?Mh X3 0r Ad %$#0QB` jE6ዞ (!LB4 =;HD?A 0 $DLw'x7bifBČ3%3^iGM} V pA1Sc@)L7Eًa,?;O{dݳu9*C_cJ@QTD/HE~$J0Rq 6(pe MA6$M )0.;qs"P& Ip 4=2qGDu㭟^ѣ,Jk) ڐl~̩d(_O+Qg8=6B9 )! IJ$($:^H,)a+~7Wvғ( -7AJ6G+ H1ƫ҂ff@ L`,59Ĉļ_3MJ)Q4| @C}A0Y ʽ[4 ]Uo>㜀EyPxRX gGC_bI/{&jDz&d'Z|83ڨ)P$HKCd(X 1+SɤTT(247Ꭲ: h)¶1µ2ي@@)");I+b20Ђ!&0 y靖yC4՘(FH@ HXXEQ]q=ꎌ ,{A61356t@R S+ Ai6h{3雹6Û?A#<A"`"`Qd%(5:kL-גS ?G G@O4$8@/'lŘPO @oBcI`F:>XPC0CbF,{@ ΰ-48>%h)E*,>񛃘30oJūGr@D8+#9PJ  ؎ܟ\2 kԂ-K z/c<߫fDIɽ;(P j' 0J&(Aj6(DuG؂n*,;kF<<X19$avȤLlvlǂ:hYPHX -'8ˑ<\ra ΃=<='b)/s> GY62*#L73P,q#&X'p:4@ ˇJ:R@,Z OHQID<<>=TPĊ9P3@? P):@MH<Eg#( w VH %(F++;Kd1O!z̞\cDAŤ6$a}A=+|GpØ` Ti4L=:|- ,Q H+ix5H5`$eUY j8UҼòkÙPhJ-!Q LnT4ħ1aX[ ,mxTT˃ްW9SC%X5p8Qe'pP' ؉c9P:Y!k#- VQ[S"bξ,3kAo:OPGyP8uu[4 VSd̍L08g4G 3xJ(J#H PPT'`M]BN1g!8K;\YY2,;]S5Qx7Hfňh%e#?I$ p$eejoe'3] nY001EeFȦE:527Ѓ$$@%ȃHOˀFy89X]u5H[p!S_h[-`(35Y89c xHnEL/UJQFX҂8O<5E/c5 3qvLl8B %$8;I%$4A!,Nc6`P^Y^c$&֒V(Zv)6ües2,9iZnT&+p> iш̹-2!%\TxƇp4O@8s@FTIDn(T B$09@`(dT~87ב8>@y,hPF B41E6p$AG9dɔ)4SA;Ф)`}vƤQF2㳌C+J1L`$UZn%+V2k#dU -I[^ p!8ůS^B6$;vXHJQr V6"`Ld"'P= ``  B0  :b%,lSML$m$TW-VyֵYā^4RN0uwOAuvh6N )DixHBP[&hKcUq}5Q734 UAL[AK01Ȓw(@u*g: SJlBH`p Z$'(27+(+F'l, ";l*H~Wc7rrr.-sF D2PQ=b RH9IcSccPDrKn40-`B/\, INVj@AYBoIDD4P BK'Y/Ier"SLd(PT&9L4K"tX㜞FuahAoJ6[z{jM3mŝpˉ$758yS8$R?:+WLWD uh!DH\$d2]>Q'+ @ LJ'c^R"%u8#)4WS3Th@@3 lJCI, x:dn1I'b2 iXo&GɑdC^#Ba - YiZFI8[L tT5/l $N/4u&X9["j3$)֨0 Yb7 lIjS\D:) ` ~`V7!4.RH6t #VƼ%I* 5qaѶr``Xh,AA0щF-I$3M"W$I&Bqަ۸ܖ&zQz+Q%qCI0&6&道.t3(3Np- zBg,\+Kr%r7*>^iVL,#06A9"qkz"`0OZL7sbT 7Iz<# ͱqq2MR rS)IK*'y='N1O|.l$:6!fM Ll](A 2AQW UDg.-* jLq5kR4O+O _,Jrm~т9r#n8=^ 2o(@#SN$b}`%vRwwnEYZ2GM), PJ$dA@ĸ}E[*|A,]CۺpEP Yu1X-EAIuM $VK LLW1lEȞ WDHإ!YA}JAp *ȹ A.@Ș9%:+Wر10 ] ÝJ@Ȧ@T0"5jDwqRsDxL]IӜdE#JH L̈́HXA*^NjsxR4](*a/_H\AR'B'B41fmVCэ0@L:5 ue@@ :D^䛣M$M܄@!F@`Z:Ą-B@"W!#$ GJ8L,_.a ( |V2ka:|@ MAb^7 iD&@̐]A@  AH`JTVtA")EAɏsODTA@pގ]xN!|r5#[]HL@A8A]B85`fe_[AH@&$Dg@n@ p#WFJ\XBԈ(. Ǟ}tIQAe*J]I9iLZP(Y*92DwbJ V@p# +0eDdYi!˝1` @ 4B<65@D @ğV4mfA@(] uX 4 *_Dt8 WzXIPZ*R\BF洅I`zBmd, !刦댄 /VUF`aA_Ciό$}EYԬ9CJC#cAL@6%I| ĢZ` 0e* \T8 7-x#cReAwZY]>aI $)F\e h DZ}[B4|ŗ*=aEĂbieěJaLBT}MMPD8¦Vn(j ,jF(AlȆ@獄J@@pVr8|4p@>҉y$jJpG"H{TRp`L HhŽ˿_eqH|ƅp=H`c +A`0(WhD6,]pdDCRrŅJBlf1@, gj]TD'7ȃ4At:t|eMХ#ҋUT hHdEdU|٥ĸ4.%X-EzDVDg#@fU-`!.dd}HةACIE) V@(Ph* `$)*H׎M`X@:@ިJwSH.ܡNQx7z$c͠B`@ PЭ=4(A 4K@@XZ-2N= < Љ1Dzo0yD.:HiCfIi) 7c_w E{)x_0 p+7l7 \+_݈):YA![IOFA@ Fָ#]LG@4RD 2A[0èa4 6B8%-@"1I1,fNLB Ǩdу߾!Lj҃jQ O>UC&A85˓=fᏃ+ydF#=y`@$N@ %tI TDF}6m0[rP&>Fm'jHqp$T "DLO>4U.oD,ȘYɢ2P(j ZVzSfu+9FgđO 3`$prđG 03 "$X2K*[eKDK13[5+24A"v 880b錚EѢ~S9QfM; - Ԩ# (BJ"  "i&zXD0f bKג9>PjA=jQS6GDpsPw ,L 3uup2X>kC !N9zejCOPO 3N[vr<ŢӃ.7|\8-w?j0Ŗz(:Bpנ P9,}H>X4b@^%țn``@ _TV F"il@j A։& >x@|č)X35 i#@ ! 5#d9KsM Aa $#$!HI04A4T2TSuiB(I`t&EQMO"$M@ƃ"eW2{"Gcp,Ghj'y(D1JQK(=!F8'"&߶OP@hB^T[ ^uS(AK5ahPlFx\JiUnIݔ)+C.rvW6LwPFL e!z).! Oc0YC~x"3 IpS 0@ dHCeA>$V?J0!x->q<(a&\p+-q"'&e&%hVNm07%' f/;Hpp!SmKDџX\|UNQ>}r@c2i5v-rؔر*@pAe0ǂ+ B5 L!ffY%%IDˆI FA'tA \ ISЁ 2x`. 0. pJt ;/`H>G.!WJfD'#3x nС Sua<cQ:22ӰX'9sH(xY +RVly-I"/j@ P 8Aۭ} :Cp@SCvO|A fP@AwA %3%\D&ԅ q,E4Li^o0ݜ5AETAM!bGfsMBFpج<,Ʃ=@Kpv@"$X(:082 sþICs dg@]pQ,{ܚJ'D1R> {Pdk[;.D@( A d `2! ";4ONdc~MblX!) Q %; N 4NmNP\rb hFB  &R"VDl`nAkӆ屬o @Paj Yotm!X1>`P^aP nnf@^b$(P8܍5ʤ$DF>|z#2;8cRx@k8bÿ`dPǝ@p|eXkt6O>Jf` @Xd K @ OtxX ԂO(pֈ*`hpB TLv- oa .1f^`q Pakr`Me pΪi9X(V1vwR0d`:!vc7NOP:BfTyQ)3 3&fP,nS" p .  @)2O/ *@bIlcB6$A p@P  d8)=\b  r0 1b `گ+"@"Q,B$;؋9|k& # neF0j0 5;d; 2'C|t t#q` !rJ!(*Bo t"N| ."fv6I!G+%|e " 3 1o @ "24t (n3燴*u"r;668dMu PJ*n%'C7(ݤhgX:N}rz 'j2:_@s;;7%EvMZԅP B! T T&054S7C!BS&3H2fJ6'6Ωc6465/Zf&YP=Ww߃ht=;hC)J!JU0e~B*cL@.*+ FPlM,ڲARL:<X@I@  sD||!` @S%:A9 rTDH$oUy8ül4YLfsHKwMh sUXX d@X$ Y$KvZ;Y@i*C' m$(DlM,Jf@o)Nk^omFJZ!R/`iQAA` `b>a@T?x9JgSʻFShFUud;nԩF/9pT>=yw`ch?' Z)$ǡx!b!:c1.LI,0|^N0a?=m_LXuX tH ftxbVU0n!q5ua< !dcutr+7O5㫺iff$MHPtJd6u[SVW"ܣXCB:(: ! :4>!'(Ck*)(XA 4w<( b(C /:HG7^ߑ<+UBnMn}/  IJXSUA C 3p`cs)X .JlfLZ5ZuY_Uc9(f5hgm0I[$.H@vUhv&Ljxk*+iȔ \U !z(ޮ_8 {CO]ġ{ oZ#z@ S <| "W+$da$ܚ yّyue0BX ѰUbglV #ljr=:A(J56F0X;|9_ϏLX٤w   Z[e6c:Z7uyBA@ZQY:8DJ(7: 7ʌ:9LJTP&+Plc 愋)Z0!أj|>ک <;!XAx|jȥ$(EH 82noaЁ֎B[Ʌ{Uy9t}'x\Ճtv!3c[/Px:\@7e" ST B۱=wwlX c~r@Jd" ,7̲(Vqؔ4H T B@,z(UkLw@i: JWURS\bEv dIlKBUb4ԛ\G3 K Nu7hfN J"p#> s} &<:CDc h@!6t<̲4!]0J%2@3{(@񀾡6S1z%b+Vb׸mݿSG:CձbXt؝;Aڕޡc06t$`أIVt=. $%F|Wŗ[?%TpIv̰=)`G X !A,&$3r߾=sثO܃e#IZJb F(TfL^l A{@d1R6M'#OnZ56[r]UװbmQYXyX ANBd|8J#/'H-`cL![`4J0<jl)The҅Z/]N()!"J!x)R{p0^@ |ޠ@ !X@`IS@֭cz (q4zﳥKov'KHƹD UX9T aBBZeVREY*@B$%+I^`r!E%t`` kI'$$+$dakev88hׇPip 8T\$eQcvyK%.ܢ IEEgPM{x}@$_K8Jp)> 8J*`5n![ZK@E&& 9~i' "FFU7&$\ÏB&G/R)H! 1[B86o5XtX[g"\rt @iKőhdpqs4:KIJWធf:W(1* #ZSjBg,VWJ/}aVI{%I0RZCR}9 R&$E$EZp䨕 GBXشTDґRmymIY! l+|HT7@frG ,מzs1/^#%g:}7ʗPLJ}EBUTJM1E M ?qP=!WӅ;>1Е*ZԵE+T@<9n!2,"6)D#6h%{^R\-h.3p FB@Y QJ n7v ' W@T4CDPvD^Գ%Kw%\c@ N) SVO"AKH؀$`}gAǖ2$6}WGG"2RqY &@ lhd,&vYТ">&`@ڦ'7KSrӀeL"ELDH%[T`h3%qPCh.D>D04'f )@G4Af) 8RO{s$Yv5$p MH)Ef%kKVHj%XYeV8fE  I'䎝U!KJBu$$E PLH&_A xc‡| :X_Bx"j%mRP1 I,#,"T)N`\*(.?ԁ$jH$aVhȯ*!b 2aYČ"f:V]W,M$KXIfK7pVV,9l D@?c;%_G/I!|KaCl?CPP'C\G]An:ZvbL%p^ׄzOvڕ{vw?CIИnFU_X$$ e81!g[HU'qQP5'aX1la{t5Ǝ8ƇȏJ1dE\RihXcu^"*1}C 6h9fXB |?8}D} JtB\ '!X+PxǸnUv.p?+]7B Eve^wQt@> ,<hw-I!JqzH!2UP{qY!) YJZy֏ Hs/$t$`jX9X ?\WTrbL@p))=BT~%@,Є:Ku7,0W+0I4ˈtJxen% Xeytz 2`zrn( b鎇c`04 QQd@>`8;Yw *$`9u!CDKuT$Y fx +׈)$!?"@dݥDC  9b!bXC@@J483ecf ,h*{" uZVPj) h7XQKX P#BzI5jka+NjSI39T )S"03X}:`!b+רڨME,FxYKA`$e#0t4D#Oz`h?6)f/ ><=>,B[Rzap)"H[!4S?Cg|n$ ѦbHKP7S0We @c=ASAPy1(i6iIqZY-WbH_2l !B!TSC m2סJYIC|)&L{؄J2/ۆ'H'*Ic%ea>ni+@Ap㘱 gvx(&,<`Kci: a >*!zA4XIg'd ?LtӺ rQWWf`k'X8I5ʯQQL a PA>fj(WWszY!iKZ_:?YA!}8+6<>C7Hi.k26L!i /6F!k!p{m 0%&bby_,3Q`t37tT?[xzNId4 _2ld2!CF9,\f0)k9g6BLƻQYfeeշe!׫3ҕO mhcAz 4w϶ubQ,u+bK6IH5rʼY2gL axmJAYa*TKY!sIŵaK]2G5j f3~>zddKa=|zJQ+jKNPi) 0åHSռAt+2 ڏGq X?0jA>$}Sl20CfTwdL!\ނYJcD5RWwOKm"%=#֗qtc ⦁$Ԁs`6tI!Y ӑ1 {ֹqtt(kC-eO]lj"ZB$Y 0_\o=?,K!,:s# 0ڹX1 ȏ0 Y# !mPJk51ĮJ`l JAbTYaZ6bꠝ=l6TJU]Jqܥ\*atlf`4  ik+̼AaͬTF0,=Yx3Y`-`J}XەXሚYw2Y ϘП!0XUش4(QrGܪOc Y!1(;#k ϰ=2& w]F5{,Zq-{.6,!ƺy=T8ξ, s&&H`,HhQY&Q1l8  `QNzw ` z_   !D܏v1ۜX!C7laL0&J!1T9۬QzYl&hRmlBY\}Z=rqv}ƾ \g - 7a 4e"eB!]ۏ6;r[KYz,sf8/ibS,Q6hRcR}iù«b f 0 QA&=\M!=,՞ʲҐʝ+7sOS`:D[la]CKd.IA0[kI+ԐR< Y!bQ&xr}Sp `h\` rH+I4/ybqE!^ c& {e98ܛep2 !)$~ $Xa $8xA4x  *d 3y`jAS̑cɁb)8"%0N0')͂8 @]ܘIJV,rpDPil@u &XpnՆH /!F|*㺑ZLM!VɓW&Daŋ;fdGdm33I 7BJDD<Тk8V]P!Hh^p?z|? A` GLB~+0326u5ȸ2h "^ *`8錂)()~A&Lqq ̣CN!H!:8("Btɵk >"̭ZBXO? Zrɬt(16 C ʬ@' ZX BB HB b"I,-cb$0cG=N*.jr)r,vK6D ׎tSM8% J@СO?@L>X! z6)ZB6>ج5-9 ` ,d sxDDmǁ#1 VnHG T"hՠ3(Ӏ j )T"H,A誋*%)tȮnt: *$[h 2Ԡ䨞(5DZ2}dGL*'6¦ hȀÁt;#IN6] WçןؠZw5Pf)"t>'.hj?t_c d2XFHBr#PŚ[;^ߞ2k.խJx;(5>bȄre b"X ]WbAC 23b 0@ 7v 3|+1C|R I`}'bn6Ȑ ZUd8fX2&r~s)⒲+7o-q&йfuSDBniTh6R/4do B\.dj VhL!XG!E\BPE}maҔ,oOY@\@!P`> e47f`]bONyyD5#8Re\3K#Vkb$ĥX)"-ZEmWp]L䉮P HnZq$k | bi?*z)"#)j Z3۶_eelY`$L A t(CI{ oV ŗa@h2 71$a [ *Rb5E m,LK 28$9?a:‰ `*.s p`@tfmc&]Ѭk2 0x+2aE+ 1бF l)ɭmLɒi2Ҝ:dHZ@$Lj=lF x/%pRJ>w?en#< i'h`D! 3"D0M WaKBh1,hWRIXDTP f|u,~\KD&3otWc R)!@-~4,&  JX!b,K23?j0L$],X+{"X%dP*;K R9 > pr H+нQ+]pY5 ZӺs[7y7PW5;A`р%%x@!21Y23=%: AAA2 ۾I?i@G@+ံ 0$5=', BG1[|BX.T J\?X&!C*|5"T q9*ƈ5pA] %@%A3C3`'IDBxZ!?[LDdԞ\s79 aaA)C0T\0a4(# .4BAc61LF4"  GRj뛰k X!$"/p\:0ˎsj?zLy6&94 idBlK -- ?T">CT [+B/Ѳ8Ǐy4)4yQ p4RFX{8qH 3B;)E, B XʎBؤh3v WxNؙ޲@P[DK΄ L@OA37ZڏWFST,)K]̵E[ HL'JM @=Zq|>~FO{ HK[%;Mh'!G>kHͪZ' @JΟ0N `O'Y&h̬ @F{A<8A3h43Oy -SϨ|h'3<鷾 ZO#H/tt{zG ͊1 -OJ?O X|(48ΔyBܽyѴPP(TDBoU N9(8?)H8LP!Ѭ(b,R/@u./] BOȆ! T  T=$%бc BR+tI A ʟy?D;42-tBէ8  A4W;> C8<79b՞YբCE+p3PU1ؘ1 7:_ ^Ȇ=BM%t̊m5[MTs:IMIu(H0ϵ[Ї9LU9@"0|j`^5S؀) HY GYb D|-̠%OEM \}ĴH&, J<fOɈMk& -!`[YU.ퟟk3WDa͎k\ (0pIq2]x X{A@HdЫݞ܁*4}I>pFٹ} hٹy B](ݰX2(AEn2e^()ZN[bWX>'>胧׺Mj 5ל4)_ +׏)E4\`  в\>+ `A [` Ȕ[=ߤ. 2;`59[Nx5߂CfBɫvB +.)_tKEȀ!,H̐AÇ#JHŋ3jȱGZB,C0`P@X&f͂6?ɳϟFU`QGq* (A0`Jr`Ύ^E(tB *LԩXhӪx&MgGmkPݻx߂MR@0ZJ@բt@>Lrœ+[ -$a_Z(䈩zg̖s<*KY 2*U,]Lhb >*Π^wCTu;H 4W`m]mh`n\[W_A`ȦAǟQ$`A6ہ,XY1`Ab砄QaI"],YI!u8 dV.VieG0Z7JT#S ]阐vzM LZQAof&xe[Ԟf7ٛ^f&Ħ@43'9*M?W}٥r1J"G<RErij 8ai^ WNΈdD7M ny>w5 %X낮y@_fG-{#B@Y’a$Q*A Z;c1bŦ.q#5~kVADCZq;}LuIkm)WvqU5Fػ<mr6㽡nhj@PyUlx\mwB58$&e@M4JJ_SSwGІ^pBNPʯ,:+Ax*=lї]ڭyއqE ixX:'iJ2|!~^F -6[f<;~QCBe,So}D|n9e[9\ZT40>h &+ȅ2b&  qخlE&F8FH<*iZ| }(IMQ4 "dBҴ #T3HD01RiZ+X O=`VH`lDXsI/2mhHG㌦2"BTC!~{_oDrڠoQmPP+`a}РGh Tc`ɆGX`a `D.RUnKr7E'H4 |'j' H+?Ah) $8nC&l;\RL1G5F"Ҫ-€z=MeBF&'ÌCG%4 I;m*.AKHQ }X$h "Q &"&P#ِIYH @F;'qo;&䐅B1SHC&G.UXH/yZ2ӗ(mAG6cj`ٱJXዣ(4A T+m^Ql@z՚7E7浏F N`!) B -s`Ba>P-#,H )؀=ςdf H=v+,yv#ي1d>e 7٢&2UN#ZC, v} l$Hrvm" ", @`ڙ>D uzVPe@)HqaI0AbE 4@?Y>$ΈM'eR≟k; mq|ƨr F-j,<"~x(p,bdr )l Re-@Dk ` pOd}2' ap:2(s@̫phEVmQr_iJ3@Cr|g!F%-rP 2Jpyđld Sٺي4BwI0G£"Nxv #(ꎵ9`Y#$ 5l:+zJ$ g>>-]4W$"NpB Fd-y2!PPk]=[hF4clHL"ssSe|pA/ _;v!؅H?u+BȽ]~o^|`! klf?-apM(vGCVe4}̅2`[QIi HJJ/+(!-8B"5h ҉\!(x yopVAdD.' "llz51wC>|t|h`a" ߉oIs0̕H\=$p#4z!H*0tE:`+p d.@O.`s8 0s8h |'Rmp@jE}Y)weA_Qmquf#~a%Frjq ~= B(q!WTG{MB vV p 8 A]Vnd$H&A4hqexx-xf)A;4XDDd@C8 zQ mA` `7IcTV#O|wf~v#<+.˅z  WzgXҸhDX # ဣ V PjG8ĠB )@1 v<,E b0`uzqI*q88u.fW"DtZmg x 4 8`=j  4xp'p&)gu0xh4+h(1I7~Sq Zpm@W"I`pVA4r$ 1MXwhn3T}">!HMIY 4DuU,6()ȕ1eT0 7A Pߐ j@c;)$:0m&Ts/l_)xM5/YDh A4oks Ԡ ⨚ZHv9 IAYFz ! Lj`ASu3JaK`D8AF~4'k+$gpj) >jsB E?B/ ɹ#Yr@e>j밄[G멞 T@  F`zMP۷OQV;'o)QX&n8@0&G 8 Pd' 0I5EP G(C1)Z 5VJ?pJzHQX~&}@ @+`11l0YT  qY# / a|W86a.39 ꩰj G Y `7Ψê$dQ0 r0() ͘ 7-j1ǁP?7H BH0  DŅq o Bد0DK( ʨ0 A XH35X kC,K#ᣋь) <۲/KwvEb08 1 a ~0D;KCL  { -VQ@ZбXeA-mjAz. .[bQczΘax0DqЌr ; d ݙ {@dp\`yKAe ѵ;KᰪKc:;gK ۍB+ м Jmx\@{UgչL BEfik ;`M격+D1SW0 ; : ϫ(0kE̍z+3Z5JT0`nsXTQc @qsAAPzK @Ap80~ @%E۞9PQ,g_Xt+aˣ\l xX@ಝ@H*?PF|kwL ~ *o! q`,gϢEP@cN )|-r  0)w ,Xi 4xe>SGo!կN/$ނ,k=@ 1l  >D +ZPPr4qa$0Antg^r>)rڕoqB~:W-~g1mΏ0 q a NTc@> {,2 ` m5!@1)d=dn  , m !lpp^E0|aSgЩ(`i|J 0 B 4,HѤ_fjVmJڊd&1~!Z4Tp-du-W? dęQ) P. Iրn(Z_H{iT%V#0N?1VՍJ @[+Ėx6GW;~ Nl%:0(U*]}[o:5Ċ.jݷdXi*eNbF-:]N 15m S&l8}Pr3OE99{5hԩ 3kΝ2c"65)5@mʀTQ[śh8 ԕP,`f?utWt%@N>}6LV1[o32jN,4h%II*tsnKMzezsTRJpd}&I}x&G)Lehaq˽;sf '\@nPO2jL|2Zo& 7JI!$!;_ VX>t8+ hq=jJk9넕dE;|*kBj=+@ҳ +`>-O JmrrM7>b3 *է9Id %֛&-- cPýaMgSYlڹV)+[@ H j4r!"t%Tzl@&RToKu^ȝ$+%qj'K{F&^XZ6Z|>lNtxL./A u3E,#y^] )C KQ pZ+`Ty. @(&%N㷧Ե^S,>ud> 3˅J๦ hfX"NCu/tC9k}왚j|Qi4r,t_ǧW3u[#x$sjl!(IpnM]>K\6CO" Am%tG/P?Qe٤/3''sPM\ ''Ll#JP. 2'Od= (-M0$aBQ\ꇴxB)Y<4?كub r@[n*8/ THB_z5QRһ=zPB|E{ ]Ge"^h(IL&?(JhR6  \`0LƊ$ĨJБPuTSO2F(P.fƼ\a$$qv$)"|O\Aėk WB6Fq^!kHq*?M8|0R@M2|K$B萢ت8D5/v|/) M2*-`E'wi_Ȓ&sYaY}Ҭ4}&!3Ӽdw5IYPȲM(ߛO'd &T ք[@@R2 JWB(D#:Q?j|S 4ErDT(8->I6z5*qŠ(‚%=$Tj;.iV[j2'']ًrߌSoǫuG,f8P%xxR+G _bM8m8h8-a4HseM6’>LbI7eޤY݌i}S32iZv9:h W>@Qo<6S@Q`DVHRMd]+'R&Y.ZdB-,:J!r'w` [ 1,'_zĖ2xgJUvuМӣY=H6wO6 $r38 AM8i,pH0'\5i0) @~ SPINH"I"+šm gƄѵ mxQnDǗD1je~}wvwz 5RLƓJkP^ m|\Hj VXV-ifeפ}I_ۈњ5/YMRޤ, !)mӗ p >M` X6Cx*! A|LP4$L~M9%I4e/7(z1bLZ>VkdAr+Q,XYɊEF,bXRidҌ!*|n7(W|&} Tt0(@79~rG$n4gG)2Gtl' %¦e!vXꥮp!/F俕8ڙ x{O/ntEEO0[ SBgVL(b`HW26HM TFeF@D&0YFdTvU=r*y\į=`P}wB|{jEӝM2&/ @PȀ#3˘ hBW") \F(C B  9AyKksh>{ x,"q<{[#r˿?/7Hы Ȁd5rhp )dBP9иIH AF A)Ad#t.j#  ;<@ , 3?f1APBLB'ED= €,Paʀ63dX V`# i66c<Ƅ9D>,(E ;Fno,<@/y,3QйK{7hH+ ;у@ Ҥ鋃=P F\c"XI$|oX'`/̆K_X(iCpc 9Dk#`,"ʕ42DdM#$jbQ( @ | b)E-Ƣ-Pf ʆCރ'ǀ]"A*LaD2:K xFID븛 Jnd0iv 2p7+hߴ΢#)?NJ0뿧K0GhH@&I TB` hxW=%b蒀pě0#P,;P$9nzJ]π H,[I&z:"+IǻODÿ[O 2(;"  I=;X( X0DEcTbl >j[F*YI* 0 T`,n SR2]Z˚khkX* [렦f@Q(6ȵ(@Cؐ+-P] ۅB:M90\ $PW`9SY!,?+pXX ]MJ!}hZHNdhR$][>`00A, Դ.i('O*&Є68fךj$[(z %Ki6) uP(6-}*Nĉ+'G 92W@}_$fLjX߃|)呕E]ȝAF`Fم~&$ȓM lhQfV3hO0XJƒ,W/{ ;hF.?}tXQ&; b_*\<I(q #0`H>~G8d!@jdK_@b\khB'Fp8@Z#` l،l8g8P a6YPlFlFal@J.qhFxlp+And[ƽ:[SqB [ jygm-Mg_`g(FM\Ki"OeZ-(҂d3+jyb"gGgȝ {]{L h =l4lGf,na^lQ_(BhA+)eP#ЉRMrX(eqd ՖPP8I<nx.*$Wp yg AōH g8VȀ}( 0Cآ@.4TV{>hS lP?ۅ%q\O"ϖ*+&h[-p Ipj;H̉ as'՟q^Sqg^ dj^gxVI4_%O Z !"`D\Fч > 3n:D\\ily'+`A*[A'Imh6F3xDO@:ʆQxe# C*Y u˻Lڙ@Wvڔ@vibT Iї_V*59<1đ3AN"FY̴ϨQ}j%)(;M6Uy YH 6 Cܸw @l٨)rҧlɕg#U!+4"ttfSҥ]) )P mk *TTAE\qEX3uZPYYUa MCx`hc15FUYRV1c!CES.@.PM C 1-GrQ':}Cui5`C'<`w@ Ȥ:G0QuVCPdESb55#CgδZbqj/4QD~5'VYzƩ`NdLib`K,+bv(fE և$^E"+ՒO2mP#@B2df3:mz^7't&R{>=E#8 G#˔R(^[T!@UL/_R a2؉C띯RJ8KȿqE,=+0H T#_)`@ dBQ"蔑IՋZ&0+`55@Apx jLYXpHB*tJYBB43]ؘ *q=b0D|qu̗ĵo+Oftbjx8؃Zh\$5E(+T0A,L$ PoqKdV,,ef39cUޒ3e X,)Ƶ IZ bJ`")pc2+^{uf>Cr>XM')(4)ưDձ)~ pGA DY0/r O+f>! ș}d s4!ҙ̜QuԦ)wLRZ-g$3ftPCA,=g*2 9fje[\ILBT֔G+C@gHE/tņzWÇL:YɍSp⩧C(ߴjp` S$dĒtЂ#Z@:bV0&O 0Z@,Hc@*#D)pLt@^Z~"E2tźw|t~R'+)O$ >aHNzF͎JR$/ ʧaNaC8r _*:%E8?("Iv$.Aƚ`d[L2g(YO|mʻ/f:553KFt ^ZbEyvnJŊP073SpsPa՞[:c޶ycvF3 S(e-j̇ܧ8@ x<%OA5bȋ-BַfoSvyFDZ6e%2 2=OKFb(y`!s0L:Lf '9hзPgJGr9P)80@q1gCK+EF4@ T@|@@NV<ƅ]M^4MM΀'a\STI\UʡeuȽݝrcO `Ě.ȚAb8VJ)DO~:|LU4EET4AE!\1DpLFZS`A*3̄xd ƫtV\s!_Q YHXkҌTqRJ B% ԜJdH "F0#8Y+ǭ5EED|LѲ͇O:PCE@N5߹@.ȮS̀@ ""eT $@si]P?]PQB\*SbS= p1B6`ƉdKJ vI$pDNe/PL 4EBE LDdTpK1c:Rϰ[h`Sx]M8ЀS2 uN(ϯy#<$ Ba,Ԉ1BJxtC]LBD"Tbى2]GT~H-$.aJJvUVl88#LUp@N!M,%=[pU_H% ql΄Pn~"XOPndNIZJ$t˜2Č@vU$%Tp{˚ 7)">62DDE/@$N2}2Ep#xBdC$C`bih>_\ c)wq% 80 8挚h>Z]k^hdD$,Mh`Õ=Ld(a Fb}gSK\g. ,^T,t(u CCid8)f8pLp=C* L `# )BS'4*%LB cQ Z D=_l )lr͕b;ˈ8‘B($,a~: +EFkBd5ʂ|=7`$B8E*`at2Dܑ.CP6''ShSNTY=ųn9kIЯJY- vF_T$!zBQ`JS(qmr%Ha*F&|d8ANF2(\JBWDtp+Q$S*nր2EPXXSҭV?A::( ̈́/Hh.Ǭ% ΁FӪ𞋽*:X ,yΜ\@iDٓ'*$Af,x4Rzf,C@l`gʯaV#/=)C:%QilQ獤22Ȇ>c#2?rMeS\H1պ O L@G'tk0@D78HR ~C*ARVN$1,ڔ*¶Dt$d4*.2hZq \\l1sӱLJ$AM,%Qdl,!2 HK*CH. ` Ƃ% s|ezƼc-S.\@g:̇b7T!!G+ $'B0ؘM L | @Fo.wS.#biևɀ [WAY[8e3;POGn]F,!d7) D@Aнhl5v*A@ MTE!$\ =^$<%Tަ3.5]dݔ44k`&G}JL`5iS7E*^5$ pd0$ЍHTP&`A @xE)8a[v@ dpp8,C|o6&|R0!vȟEC#iNvJ@_(8/0-Q7Gy8c#Aj=FW8{8Ou$y%,})~B +=B WF XwF'7CltoosJ1//W93PHvIOT (]9SxsTAR@pa?:מK2GqoMAxC raN0̰S8A `A2phE)<`w |T-7jH?6,`hV,o|a< \" @ \dLZ6z63*j{ @8:hpϫ.vV.} ^2G*xd@JTC#!ns@o @|<.|.c".co2l+QƼ/\Ԏӽ-"?-j#C53@Bd շ[,ŰB$_3X?=/74/H$dćBW4#-8@ t8:`{nw/ȷR`x kll7@Mba<A1fԸcGlA}@xq[bY"#`beO.8P@ (|9 6ԉL]"v1Y2jecWb{&ЕXB|j[6r'O_ߍvf*O=TpŊ+B|РA!*,М3g(H@@(d OiSF@e.ؤHJ0Npĸϡs82bDtPQXz-ZzN.2%GXBj׮j ;k@+tAl!tZG|G#qD<$ZX ^,Z[2Kh(ʹ8=n(( ;8 (!,|H<55)"h /Mλ2h5ϋn +@ +*X +j@4=K- 5 "b(C C]i & oh,̅Tб(-!5@,L e2|ae27;lKބ#<ʮ8`Ha$` *` :́ &P/?-b^X , M! PTQ) DhK-"I9@W蛓З\)ߋ$(,kdGn &$[̅1k-BXdG 84tP ΖΖcIad6 p  (*b:OI `@2( 2B?^PC]=hd,, ,M/2ҥ:%*X|%X`WVzZ`rl9cڴ޾3%dqk){h cLy' P&}A t#Hl#<<-&sbaA7mP:0Fx & H<)ֵSbYFeX #8 <VJWWCz!01^:Y5 aDS`<-6*1nW ^4S1 C6T!`%u+p88́Sҧ(u[QE:dʅc 0ߥwg GDjYA dL \mG]%s16BIh%7yY X7=) 2恍" G,gCWKX%q ,pBKZ,}2D!dXzP2% h'jik"oNX#ZJ@q4*h* ytlG}dU2vha~2v%R)OʎΙ9Ѣ$0TBN(8npPV-=1[!ʐaLh $ 0H me|#uG=wz:OYVVlf$t Ab7-҆XA,bH'sa3f{d},<}Y:Pd# "5%G!8 hZeA$OAPb=:H8/=)J1p_Y) hiy| m;U@3 ;0/f`:#@/>°:@"4(k?JhOhuN(,` #^2 L LkXxk(M`8@"ێ` l ?4=?0,b$>"h ^ F"B O1" `WJ@ @ A1/A\2.z 3(NC|(@@^0R!,bF"n׌m, P sqq"Q#&"BMkP@Kq/`"@tdG @ `Y yn! \nj抒f*NG @ E2 Dt#ȁARa( 1bPgK`ۑ`B1:#1&c+YodQ7M K؎K-" 2//`/-""֯ 0Ft$-/r `8F\`Xj. O3@z V@t.Bt!>Ab#D*r`a't`"&2Dt @#hoB "#>,*"b9P.km"cY$b#$jCD! JK{58`F"3olH34W2 Rz"~LrC$#O"M#RBj0 4 1#p*)z5#N%. JE:"+XLV,?KwtUclz,#4IY/tYz{4HL+1( V3:Cn [43j&#N5o2z 0ad6ks`,6 *!`^?tu&E#@b)DOf.'m#4E99 UqU'%VMfF=K/dULaժ2 &cY4cMƫ(`&Q\`\o#ؕ L0a]%(t27"U/7@tq"R˽@ʌ Sa6#"cTɠb-cTu\v%D<[*'>,#v{(#t@鹴& 6[UU0nA zZk2PC{^lD@4 `@\+4v##<.6Ϭ1nmds'RD&U;  9"`#̀װ #|KbT*R/r'Ewc fH.P."v/603P4^" nAYy.nL`<iĹj%] 5Jxl ~?!z`z BD. 0lo:TJB,}kՐ{K#J| BN#qc#& >/bBet .&cX93&0@&# V"H(P4ot? ǀ=If#sbbs`o/C>a g55vDxhD2zKj-6#9` ) (}6 å6 ڀ &E""a 89",zQEL :dmCnf"dƄ Hӣ 43Qz |!9>/,&QtYz&@zyYt{""vazO ٙ9) }$n-AB*3#`}9B26B1`C  mxm4-Ih,Sl=RVB1BXE#J-o5: d]4"#P@934&Bζ>A /2j4l8@ `*#&4bk"z"{1(Bɼ7x,oK m  #"S@4bg|Qy)kßS/s} DP4‘ V]ya@xM4vb@ MsbU)[i@13V@|#|X""( j0 {#z@"|Oަ{p7"78 vɁj;"">`CAu>:iO+*7|u @8LK`cSt/B5VZ`D [zUkJf@^]s>GXqu]nי&wW3]zdZV`_"Ē@jqn` Yp{; i՜ "A73BR#.#"! G#"66hR Tzt ۬Fv!N-9'#2Ρ FV@AVW<6"& `bzbkv3Nui~35ƈ|=1OVd9uiZ8W-;`  v $ #297 D#@|@,`@,jXhqFjxp@>Dt2Њ,hI@ *Tp!0́V$@YC8Z%\Dɕ+\r(IWlЭ/ر'NZ0OyBH lֵ7޽{6_01KI1g. ,Y0>--EHbF`D۾{!#9LnB,p0hy ae e*Q+NPdYIz(X^(dM8;_᳃m?B!@:@\{+pE:`EVY򬃖Z`6u^'ŢM@ A-C\08 muK{Sj Za,T ė LM#M CQTr|`JK-  >8ىXT@>TRRK,4L;$ ,*I  S@GqP.| 9_q>f}NpZr0^,u_ (#0Qb1@> gI tKFŎ z:hN;mp݈`* \8#98hSp@/$qq*ߞF3,O<4C ݠWP0;p'흂!0@4/$@ajEEffTA Y뛃I8P XTǑ<ԊVH.bCa#Ar|jVAK'pcQ]SH)X€=ak L"i/ SЌf7\D `h9ĥ!6;B2 g fG7RMU`C`f8Xl8%楄z M{Ds OPى (%gAHZ*z5_jygYpA6imQfDGBd[ B\.D9 &b'& 7MhB%C \ȡp3/i&2b 9Qг2>T.)(?0H h2hP7kIPNn#@x#! '@+mZdxDL5@Q lruKl"f{y-MYRp@7 _ 0 f$GH6H?5Ő Q9D * Yt`jb `"~bs-@| @ qȚVX At|Z2\[b; d/SFQ](ЀG64#@ct0=t72@5#a xfU#dI7WFOkd*"~Cp6/`M#. Ljo>1uk_x';Ɨ%6 \-/=4>`}@87. {!7f7@/"AG&y xp ^1x l@B`6w446AYc %` >Hs%4`O@ 0?@oK l]uu||\ +I CGv-6~) 7 aDR]@r o{"Sp>?IB/O2W(Āaq^A'd+Vu|e>47*0,{  r0vsp %yu| Lx 3q Th{(OAei\J#` p,Q%g]G.C_SCfg'4 ^ W,ш_!O:$`\` Au%aH"eids J=GRvx) (L `/ 8D5S;y}ji2H$j,9"=Pv2 (B&'.pCf^}8 rDpY_!`1f <p pAqG PBsq= X$ "+yCX5 `/0ЙX8Q8@@鑝"ea=6$<=)A'`GR8JpϠ sPaіoI_8S_a+'Wfr,1 |>! GHP42aWKt} ,0T i 9h.2I^yԚ F̢E,!XF7$1V# 0{>x9q@p^n&S`  [D0hbb,A 5s0$:P"8;-Q:1avJO: a*S2q?8  >:+ 0F"G+ O}s*s:40!а;*#2.z6z UQ\p F*` Q'i A-qH6 ᫶!x fz` 3 6&s,zK#Pu|:K#'y0H8)zUq?0J^:G~C34* &>X8 ; hodp0 )$Du8L $&0V^KNp;[$,``7ѬaP)X^XQ~AbvadzYYHaB rFQEbt?EY#7`5.0z 栐!r ͸{+{} %Q>aqPU۸1%4 )4 1akKo 3@5x㱫c(v{ a } xJ)8p4 *4X>Ys!\v?575Gq KLJS kfzġ{,kWb \K&%4 K! $J/y &>4e`@9_u Sd`C/~BYy zN|աb\! et R G f,sz I=G8`Vd\Bce|g̚/a'KcAT. [Kd{F򜢗+@08ػAoy,U) -ӨѨP~0 Vk СaO#V%mnڛA{ 2y(;}Cw{ScGFI`TɅ0"D>Y-{ G0]Mz҈2C-a$8x9"vD -ax9| *b^p ir#@p֓'-/\ ٥7ķx#.'ځz O!7Ժm'֚vNej%}%<{{+TO(ڀ a>=4 qwgׇa嘡)1֗!ysZ'jۘ# ٗlkRv4Iࠥj8J 2 f  S +]'x^Ƭ'P 09AD` }  aTE7 'g& [~-0t^q͖vnhfP`k4r*yx=%:ֳ5Ձba*+>l$ /\0&5Q%6 &Yp铮cyjjF^!-!خ0GtM F:` V`Tǫp+:0D֔:. ]o6#cфb2 S`7?IOzC%j@΍Hj Mte zpҚe;!Pg\!} ۷[K^i,vb-m` 7 7mBYpGB.TEi]TB]D/.?yl< ~zP& 6Bt- zQfqU >E Ƞ۷Eۘ)_?k~M `@I#HBh)!$Hp <,hzd̓7NK$Z")\ 4(``%$v I.әDz 7)),p?DIj@1sAr1{sZ6Y#z@XcXH"*A1hHjD 6ssjI]a@Xf ҄1E`8 $i2idG$< A`/s pL l p9 Ki}@ =a)OBO A}-[rT+H13 d6ǃbCt6#^C$e*9A  ~cc/CP@>$Hȹ%Q{c$#;2)JCݼ!C#V4ч88,-$,?"r 0XpC]ꖗAt3)OMnP2. `It@݌ A}EL6 %{lNw%YU[&uvH_ $(A-&9`W Ћ &c)WI$.XRF,ڑp")A@ mK91 OXp|i^EZA݄S#'+ 0^aU4у#hS;q$EJ6`n3`+q\`[$W` E/u@5`"fF$I4 ɑ&F1Xh ch9Z : ?ohr@WA.B\!0XZ*T݆(.`J )J;Wt U`! P TbXZ p!u}&;%/Dp#v/ L`(F!І&0< f| *J%i#ǡI}I 'cyd`2#AKt\&0Z.^j[[V\Eb c:W@H `[r/%vZJ6i^Cڲ@W6HbNHGl(aH'4@ JR.rQY$! Y@nu aVnSFy BAgh| s_R8h. g\v͝.=!KٽX!9o` @D nQаQ0Xa9 VtڠA ;2+*jt#Vp=B )Y~M'`S|l3fȈ: r(` W{:| THN|O9Y93Ū>P B qf ,N'ⰘX!#H11%dS+Ѵxn2TF Wn V,+ n1|Ii H5RАFbFꯘ@@Ji,8œ laOP a52@| l q4М@HI8#rxN '# ҉pJ#t;@4K@B㟁ু(I!8>tdԃh%Mxp! DŽu?<o# $ '9c+XW۠6ΰ7̷"dS( E  ꥥA6%w ȂIp N` h+}gP[?"5WAYbڢxc]_g9ZОhP- ޠ%X-j)\^ ٜ "#ki͙Գh"4 `9uƤk&x& &3 7 H!Ea "EٓiMh!fCS8rrit^ڨb`b(S X0Q btVZblOg<@UgT^|;`U?-I).0~`E&ͷɎwܪr݋ඔ(oƠ.`FOV ֻnx%PBxݦ,W4D曃rs.OУ)%]"W qr|c+ͷ KrT*/qhNIf1 퓓6=71&\sRa6rp"]Ɉ>PR~a"g-g׆+d(H-  mTTpL #o2^ >'WTr)И"V2UAt-Jd/c*dH7]` %tEWYgu<'V3NahjMR8ǞDc!M۷nt%[Hpzj eb4+XVօ%cvHH"9 j#hXEW(Gtd7yt(lleVrHY~"cowWIM(Ȁ!,(afPx  #JHbD1ZȱD AzIɓaȗRԘPI( @-eڴ) D[][ʴ5:T`W=f1+J&ZٳhӪUk۷msXKݻj׈Q[yQpkB%̸,CT(e-{=4תIzY{E>O5ڙsVM+TY m_+_μQA@J:hm*oOI'-0dhy|-jUR)_a!J{#r@xY2cJ hE6M(y+2[?Kpo&gZÊ%qZI-0Uf.AO4zBU[Z]m76 閩 C FmXQD`l 5,˛*Ú>9QmOnĘEhH BAR lH[pCc”tr.%d4P]< n*@ JdDulԞ3 oMHtrujGDHqh*Q4%e xf %IʩxE!ElDEXFg$C |9ZHІQMzB_o!ewŢZfJڐT6f}(-sRܠYʨ"1cw4BPCA ZU '.AVM,%+~Bjf,㉨jҪV$v֍Ы <U[cڐZEgWa (A6*dD,B%LjV˩\0P3Hq %24Rzٓ/h89 D05bZN5f--\-%{f"JÖp</;X.aX0 тU ,0 zKw*Lg䪳le`t3\4HBc6`G'<^Iw"@H|R@h@"b-7hDרyrlacN'fE˄̾(۝ ])k3=ɝ@,8C^CsrB$b54]q9Ls΋Mù0(G#i}}z?vW~e/7twF0WNwA"Qaـw7Fdgʗ&"#@)H/e'('ass@"(+B w@lkTąPUpm&OPQZ+6HsA|7uWd`BfGaB*MmY @~)1{=^`ewCU0 + Q%`' 1=E d&;C'f& 8Ȉyqwcg4p !x|wYU%1dsGU E;B%HQ`J@Wu9v#gILClHw}(eAw!~Jx 1;B#6c2+Mq'! pm$B qMq҇S(hPZӎA*\ݥ?A [ }0(8`yO89hx@w"Ѩ/rU9-50)3(\8+p5m' ^$mKv;}@C.R(b3{xLBSoҀDA> IP=fCiOy#N`&% ה`׀rbf$)ʜ ҡ>7Z0mDQG# h95+X^U:w,X`.`Zp i$AŦqݔ< b 8 J#` m>BQB5(k?:G*﨩" 評1 >f.G9fֈQG 'TY TmQrKyV 20pLRi  ZpFwy0c#'7C_p~S^LJ1T^!Vp4o)baz ǰZh TkmF1 hq)^(!)j Q'@*/@|$7ۀt4e`}[Zsm0h/zmV0T3@{$ .9>BΩOOavx*z0`@0xkFp)_.x JGq$2tt p-[LǑя!# P[[+B2'Zٚ `> b ) z 谔P 0Ml Qxu7+h2#(Z *֨{i UeA+!q˺PTJ 0@` # e A pt pl) ˜qOw1#"H.Chk'Iz:A(tmãјK0ʣŦ;SVK2'zp 4  a)nPļ(+p Z8$L Ye}eMb=R2eFQԯUB @|Yq[A ]{^ m'`zI >8$ū(p*q&') ǐe'\F*/En vTױ(esR=?lL1!Va1[Rb]dz{A$Bs" 0@QʚA#<Çk{#(ǰBIXkʧֲ-^K N^Rl߶  kpo Na [ܤ,0ϭ C01,( @8^* q&q`d9wv<5:|u\?iOA-nСĢLʷ=a]~#q ps> ĠY[ , PgJ n  K9 Ȁ r08q\K&(t: c]Qaf ޅEZ-5dA+ ќ< fnQ3ʭKsNCm@ X . 7m`?, sl`p 0乊_q֜2dEYM^7"m}P?PQf6n@m N~(`+쨀_ n : qE~ @PKP$ ${^%~f*_ X :c\obt@.;  a# )&n~o.\4tdz zyq A0)z KC dp\p0\=cc"v-#9!4 ioqnsߵQ {주'oY`ϐX?f0VzW`YWΝ> >tO7H|zx!*H9"C#MF.o*BGnAKtA=ҝcq%fؑсH _(A*:)WC4\R[ՕhZS _!{H0ɭ! TQH4!rTB\ c5(/HTGMz*F2l h)ɒ82@ ~sO,.$ Cu 7g˱! h01HDUmwl~3"#h4mR4B.|bI..+H0>! .8tސ~8JKXpT[L2Hш AЈ}.Y"ӓ02. G2 @ BՐr6YSQu.b5toȑ@&Q#B҇=d|$LZfqeo` ö=rdB4}! qРP6[C b DCNR@"~|QCƆP$ :hT9Bt`EZ~g )6RRVෘt!WhڂPU&qE" a =~X`Q,8._C\JV¿9PJCJocI6dQt;8x&@mMKOA^BE9F p̷pj(w@zB pbH O$d SLƋ^42;} @Z f="zjBU we:z bI6(&{i(lՂU dtGΰeՐĆ|XRɔ%LQIY?⸦(}9S6C+2 :1+ӱx>LHLga mkekRC`BzYr~|4(1z!V qS@tpAQB,G lA*D1CXt4 6MmݷeK$#y`2@3]e(2: ^wCӖӚ<0m{[#s!{X(ޓzXzu%[*X!I!M (=q҄鈌#r p!7.:= A$y@PP>[¤ంhF"h"8sF!;rHc;$Tqpب(+ H@:kHI/gti:_q d37cV=B#$މAu-y +w k+; —(ӹCų O+ Bq(2k0t la xy@l+8+dcC510@|A\D3D1yL! Dwi7FɾN34pAAySPxx'?r\)%%ʫq ު .RoPbp7yȹH;H\:F@!"; 0Xh~)CGL ruD+"GL,C9;"щC!Ŷ0BHpl乞[&Y380] ,H7;J,IԚLG# XE~d J޴;`ut IŽ!`] t1dȹ 8@66I =)9sH1xn̗=5ykʆ݁-҄>*-D,+w) {#;0.M@G%Hq-Mp, PIc˂UdHX,Gs\ds&ΚCYJzS &dl#P _blr5 J>T* P2-\NhUx3o%Yڑ)d,P̐9Ыf=¶ ~SEo҄Ħ(C9YDB{Da>GݬbC|1Mbe? ijPq@ %bwl0 cȀ#bQkb,`Fj$ %zM;0h[r1 bo6 u 0IdL-P;UH XXVgaЋ"D>M˩GД4'MvUr&P(##l@XPޣ;{=|5 .`t~XKxДP{6l#9EH٬GX8 }6A";ť꬘8r \< (]  @5 1J5CH3kт>ؓ qm.o4i~䤼onB$}&Mh0$iv1sfra>(&>pouuӊE&9"]3XF5,hzY) k] `~j$ =q+ȀlAkjl!JdFDg6LYi PYxv.B#{i}?~ >j[_f2l%Ȃ c?vȊΞHf5(v 'πDFo`wj颴-T g_҉gu>uRP|3ФvMq3\/6(^ ZlсA8@F,]pb,kkCpFQ}VF nCr[22eOhƌ; 荾D1ŗ8_=}F ? ]tnalQЁ%19H^>8 SނCdo/4t(m'7Lcxp|RX75GIPʦSgȾԜbz=APl„ "t!Ĉ & 5!j.CBp $'THIS  $I4ojuy|KWBb }QuA +XC @`(MA&PvMx.^ iFM2!i$!,@bZ-dl1Vv,tiDʕ\ر E{LI2!䊎+qHڊ yBɦ$4i%BCK FpչLJ2{>3NwCޅ} ᅩ }!d fb] Z+wÐeƚ& eቇ !!AsDJ,ChUp5Hr,WT,1t< :h0GCp^_e5\w%A%_|O`ZBZ0Z( !e`KgP[nB1h#sEl4G&%B*[MOahH£MFSFTLXVqP˜eyM{e n] sBМr f:BG%6dIcT@ c Tv&#=&W4#`@H(@H!2O )X8jU1 e6C# w) & Kx3/CIUpYy1}-}<B}@s!z`Vs[aQrxA,QdTcfO9I;xdFDrPr`؀ ǜ$VPCvIх$>ɣX(²R7"P !E x@T ]K[ )^B0D v2Є2l1ɳH6/Id1R`Bi p\$"SB(rf-mKb b!"HKq%+^a &dVF"h EPC#Hq,'s>4ΝL)`1Ԁ% XLCP9r9ÑHRwa@^\CD!P"sY^ԓo%DN`0<;%2Y2E,cPH"lY'R,gF9?0 0Y ,,! ` Hg$F)": (BHM0W Ĥ$b2y&G Ro S!$2F tU19DG?!*C`11g d({Qe, ItFlTD"C;|*2Ը㑇G8c#쪃3C~pg,(@TD6$toH3!cPx Xؤ&@ M(.$ⵄCY4aV`>PDr$pd#Gyh""VXDv(+QW?)pjlg O ,!6<# 2a +^Hg|P+1n5\@Nޟ X<ءSndLUh 8Y`ÑMnr8n.M^("?vXo ʧ.Yx(d2 Zf]Q"r(NfZ; TЮ1h NB`M  bI;FSq[ޙ$y"\#B,&EOj)  &:Fdq@Ȑ="T(h ^r}X4s)|L$q6n'6z<)A˸F699&!F#M5!$p;a!r!$azX ^4ҕf S*lhpwraՠ; +qH' 1 _o !1yHB&4osAw)vSVX$pXB,ӌn%tnYLA"ԍ!wW;E;7yEoߔ kE0ݏ@(Z R暐w>-AJy`a! h!fB'JL!Fk, !<8 8D]R|cNe@(qV|h!ƌ #C NA+ d"焰 xƢPM) 9<P|0M_Ϫ縘Z`AI5SČ-EIB䖇UIDe_(5Ņqy%Fh@;j0LCS4@\8HI5ׁ@HImDb< Ab\FB[\/m/" M-UBd^~C8 HZu BJo q]OED\\K 6N}thABDD Nh!KvTn@%z|@v`Hɇ͇O5&8PÈ aJ*T߁88\!\$aX-BӼ[F$6ׁP 6gT!Aܯ+=z)CF&@xmBd|fNd\jيBp}E 1kd /Y%* GҠ˴Lqd]e:)Y>@A؂1F (UXKt($/,B,s ܀' p* ሌf%#j#'oL.hP`H0RFv~Y:,`fbgiF8j# eDuFF3X>tBl,C.C|@ J6j ĩw#9筍<CS9;\CWbdV"dG_`GĔdB J2 d\:UӚuB ' u}ۻf~_5OcXSwk0p [B A Vb2C6TjZE]BP3@@ &%G'nd9?h0V,t%y7_|y JK>uȀ 1"(`+6rAT Kp AٱR2oy%KB ua> hQ )F0lOP{pP*<ݒC93+<4:nCBܲeF[jc)TC4E <`"~vhȒ'Q~C@gpoI=>R`s|s h3:㨲 K-+HH0P54j/KD; j 0iR`x 1| Hq5<Q3MK<< ;,9I 9T(P(՞03@;JP"J($|A PDba:49 $B7"묄*Э{)q;WI4 3hi'r1EhؑG̞ R!% VU$9^U#.j˶,((Ŗ,ѤD5lT  2,EInp"%#4(σ$R$A1~ a>$ク@| AFL}R@u,*9!n>(CX-D X*paX,F$kt, 2Ȁ[ji V|O aK С{' S"@ >JB0GpAwfh4^۾e[|JZ+0K4(!nƽ%4c ^@$\Ӌ(!xX4/{"D8pL $!+xDz.  ] I4FQ8|" HTe* 9E ;Ob@" 4( `t'V!f,Y-l C R4fn_@!(28,0簇FsʠON! G c&H" `SB2)8# j;bxqJ?gK[b&f' hMy\gM!Ov+wi2Ãdi 7`:P0{>w"9V}$` %4=NR bzS$$>٨>"^mATE0,%VG,f~[ hmJhXBk0XXMmud8o'+g+0A #I {@0;h3ik']dfQwqӕ܆w"EIy0*-V< 1R@@aQ6<zP:H|?wm (hX A]Z\q1H%DoN IO3V4 ho*r?2YL \p<\CԒlH:P FEBkLEPMUdHZH+2(:+0.%X &}{Nӱld}rc)7N$hW:!2T r*|ф$2lϣ ]c=QKZ8l VSl$~F:ʮf ?&g/5x5Qh~^*ߐ"Lw41SkdBjNf.@$aI*GN cIARL-Vc@1ࠌBP!\j;>B bwb4$$H佸'MyP d Ef[ B*$ lp5'ZRb g֦gZ!M " h -6JL:iNC$B@!#OuC`qBҢٚ0|1N cܒ{F6 fDz*/H[4LlrBt  FuD% G; -Ft2ёZ /``2r1J|#ՠk.d/ UdXjR-%F@$h*edzr5Q83<~>bSx9N)b Б* @CD^r7(`Kr%ntZ>$!8 V , Ƣ/yM!&Z .d`nEPByy-lAf>BzrL>s33.Hи.)J - 6t71!~sO0(,8s~؁..QB )9V`Fwk\`83-)-I2-s u> `@f# !C`Td0LPd &bȜCRbt9t5b8+svN=BGcx  RP > V^d1DŽF#H˽$L!*DΖ(!M43)HBr !\BTVG.`wzqY>'Lf/ S| 1|Bw`3q "r L& vQ"C B= .\QpSeIVbBnvRC@:u:g1K|%6 =sV0jB11`T0P#X ~t0eS$Re Br`YޏnLrz nUh0 |gPBڲWE0 D^åW}QH@Lƀq.'nr' p) / ZQ.[MpRO%F\&$RFRj(%Fo`="3F rtT(Jy C%m-~$vgX`z(6VR$j5 `Ts*\z6BY !L!NqVSr"PM.o6B8ܥ i2S+' |m7(+$S՞c@\RyXBv8nhRjn+}Y1։zeW)6% I"}%&b%-ϋ?m])!uZ` y_is*@YM0o2iQ,,' PX2)4E#Qa nGQNZ(%^P4f9V2GMF u\Иv_>!Ew\Z-:#X 6K@Hƀ~rQBM|x#UN[rP!` 9][bx%B/: x$ Snn]| .9!D"-Wh~ EC{yN&UJGwَ "BLq.)^ 'Q a4lnb\«.kA&` !$z#@P@] u (RӉW9Gi;dlQpj!JeBq/ u`<Pf! #;0͸)|AB0# r%}f `ane @}baVl"b, zkAe` Bȿ&R+~MزBWc"*^ vI0ڸAoXA!D 0`> AYu jq\Tv:G|5#JbJPnm;\!r`-DV:C'$""Q* ^&31dyJ7$ wb&_j*s B7%G +9T^a@ u I f9[?r,R G-: Qb "PG#NC!(VV1O9| D,9}j !)RZJ1ĉY<XV 55 G0 EX2HX@Ǖ<>p(9MԇO_BvT9[TȚpJD9+Q-hY/$btڽ{ICEL¸ C$,0&<+D?CԄ/E>B\pƬp-V9 i  2!Hp3`Pr&B'1)>|DybE_:H"wR-qE%ߑCvbiQm-` N ]u 3ܖj@D! 9C.KFQ(n N$4pC (AQq5]5s p8bJB<RFq >WWW_!E͙|7g~1GB}d(WDzsAeINJiVB RaP}!Jht*1,-x"xc ?QdD(' r6`{S*3 UTJ9v W4](MY.yHD~De/Ч`-`颅hUiy) A,Ш bB @CpHmh#閣m6p:GPΔ M)@`el DemRa4yP0nV @tU+/D̃J)Z[ $$TUP._UC4DSOOWS-R܍wE }}D= +LAG LP'9-j7]ҥ8Y"CBZ\.\I8D`#1ΑeDl1:RtiNB34&"1D~`@w9Oب̈́Ia [@yQ+ ;D1I(ȃrU. 97q@ D4vDÖp|+aD'?L`}IІC@v!JVaHDBDD:гfC4 !$;YF(q$эJp@Oe8ӁΆ7V@! /HS@sp%DB|7~˩#z1S/c5@bT` bQdm盎 ,A"0|7´a.ȟF ;JaO>G?J@`q !!BD M| Yj$%#\J\'rCp҄\{ n 6 Z!D,NOt g$@uFg "(S4 MZMԅQ`MI?%{`BT&"\H|FN"!\v,v'D0v,l8D114"f.&( @ 5HE?kQ C M'W6XXL  :>p y,hÄ Z9t|CqX `,cQ9PJpOhp{&km+6A`ګ~z$x"bj8."m .@@$l]%"ix"z#Eh NBhn1șR| B}U*еj l Fp1lJ( $D;T] L&B;xbXnb졮vsg/H㓄 "M`+<Ep21x!7Q A )P3F Z0TC?qBf܀! ] $`}LhcW. aAĸF61&uH7p%e( CME$\1U͕@%`uƚʴ&\wǹAln/}/L[Faq%g%L*0 ZP\Gg DH %əIg0!$DɌ 5U`@p Aeǁ 2*q"llۖB'q ".̬ms% 3&F܆iBd"ݻ>| Aу;XR`T`QyЉ@Cq4gȀnI Ɓ vlF 0!%) S&! CfUL]* x94dW(}'Lr,M'bC/!zA9T!!bvJ!0 md!Z 2Qs!z #``bA@R,n-0o5h8GS + 8 B;IJS;5\mA `D7&,P@@}Rru\')I ?fpgp1g6$(WGu;Y &Ay ) ǀ%cba"1@Y:rjWSKX@7@!Hp{w_ak !L28GflW ΰ`5J R}UuL(6[nQfYQ PKRd7g{QgwzQfpX(X~Y1f% 9}ypY3AQSb(HR7SSP`Cuc lp`B:2bEF6kg NfА=@KHS [;' A4hJ 1;KQ. k}kH0+\5N5 L=J$=.I@@U}UE}[Ɍ,llIY'  Y0C{9X`CI#$r Y!:;w+kDILWXzJLHDFt M}='IDZV5Ǜ^YO{*An3pYxid^en 0 .t"p7vDklJ{hXʉB=-'; mJ*  f M5x6}î 6sVS$酓|ž%?J)AB3 A$ձ)X9Rq) 874јj/()o=H] *p ѭ<˃!@@K zX^u +!Ab5֘IcۛA7+RtY_af6Mng [E BjAp\DFpC`P=0,'SPp/+>&e4sSp WLުt~KC+ H[èK*p;!VqVKm_k9jY  I SrZ! iIx K I Y!Ykl ʘ7SH`++ 9ߦg ΐ|F-F4υ"`'7]KA, 3 ukxq#Y1O5,6qZ ĵA#Aa)E:'[A!鑦+x;yvm i Yg,05;ǹƿǻ ǤK.LT3!""Wt1W0f/Y@{j123Ɂ5lХ  +aX&@fj>'1P)J0q@;#F  !`l  : z5 B  l 00 ` 0'M\| Ȝ(q-`AT+_gil} zpV#~v:SpOL"'lU74[<% , *{rp-5 0 SrcFC LmSp.M$\)< a rԫE ><Wwۺ 0π6&^C }QhrzvpPR[u C+ J`= u(um2И9,EyV_;'=4P0 4]-5O { jA%Ǐ0.`}Oq!.Ѵ014A- 災0Lrq~4m}0,-p ʘm^=JzpЦXQ9Qs7n#9hsC\A{&R^ ,` 0["E˹ \ ,  yy.蚊,Ɏ q3~D 0; `t}p#^ej% i0 r qQ9_>0=ye))/ խĆ9 ㇆:7~B``'` S΂%5=͹\DE AU-p CpQXٕ .^o?ӈF/{[> VXBA =hu&,L 0X #  [%0.D4K4)\vdA4@cKcKA KLZ,TA Ppʏ\?[)g Kjqg0N [2+2zG0ap 7PY0 1L u01,  R1"E308E: `8` `BE `9BIG Ӡ ",E;r}c/xⓧWvߜ; &rVP !Υ]C@Nj.V+SHx 4Hw\,nW,&]<0=`4q3i-b g&#B@:th FLnoB y9q!klw@"C(KXr)gꛨzB=b%Lب@$ .8,32$P"NF"aB`T>Ͷt6 |n4bTc #\(2$HHf 0r&9ZB*ɁjS1 *<+"b@ PCcc^9Fd)SjЙ`AFBDLPCXC`>k/$_-@"+̢^k# T(F0C[r@J˄$`/ .4!ZҢN#LH I'Ԯ(fuAhDdd22dS9!SiU6\)Ve#D\ l#ILb$Xf@87`vsaCˋ\4@s"@0@6 f+ {Ub  %Ѓ`X5=O,ݫ a k+14S.#+8e88_胷;Py Sty ؑ ˖aIx` R%YgF`DϿ!̰L},H>mT`W]UelZ_]]u-s]Tc>42e[h0+@zĭT ( SJr FhIHRHхN v Dc@' Z  ӬڪY8P&'J[_ۥ!Ze`-<[0ѼI OiYtq bX9+pDʿh$-Zʽ9I"  Ϳ`Q,`hE$ iUt5 k% L;HX,'F\X``(t  $]Rh Y]Pp_D|t蛂Tb0NM6H".e`Z#b) "i#@gq@9 oa8{dLɍ` ؋Ձ!H'f̳&[nU偈B#ňP"{^Xx~m`qNH]؃YgЄ xъ ܽߌpxHvuP.Ee]U& 1iCg)R hR%?IUcPMbRFaP Pԋ<Ȃ3&A8k9+gޥ#9cui.yދzMiH`~>LY 3x0vg!9f=" cij(gם`1rQ힪6~pکg*> b^簪t_*Z=ШJ |p9sEq']PZّ(f30t/)^=cOa56Bh5ۤ#r1!Tŀx=ؔ_c iG<ܡ]Zb8

89so*! r@kDɼQ>ȣptPмVt]!Wv\9 @1 y4&W&꟎XP͋A253xh55@2uTUbfkZv FXtMHetxz@&0Lje]ڟ}qoGER_5>_@#JLu_ϼ8@> I_ft8\ph\NT$b" 3:o x:5X{u y}'\ ')Odזym2G#tѧhhLs&epAYw1zqY %EzؽĀay ' buNpN6.?l.w]0yK8 9;1rG; PF)tԷԿ2}g)x{syͣ{EH` :X   $@ dC3 QQul$@* X1-™5f]c !tdI+\!@;guF[.U1TkQe:svZ C|)./]P@EH[ꗐ| WL%vXmEԝS< 9쌃 (X*iY鄃.{ *\Q z +5)k`j&bZ8a!}h[{@ gDD^ϥj`sD. @`Q"Rph;P+׌l_f}V[7zWve@El}n <.H`M>u*QrǛ88DUo\W'Dsŧ`y^VطIZѺEI9VL 1Π"dp3`aPHp̢&]J-{~MO/0. Tm,v`pUяBXf\Ac !,H@3d0ȰÇ#JHŋ3jȱǏ !F K9M([Ci搦@X(3dE  (>*]gŞ`9VԩL"e| XQ{ZQW„XnъX67߿I%Cbeݑ@D+yw':L=m%X[v :ޭ2/p}T}T7ŭޅ'k,ݴZ+U9P1ؐZE4G%{߀  u=$E=d UnA~Aq7WVd؍!icnb]u~4fˌNDft\:P))!~ueGp:GSP[ntC)Gfik b8yڎynqVC栠"*1~CMPzA6'E[ZᦨeyYj fjxǦn*NdG[V_= K* h0s = EU+ ]xfaKubr@.:ҡы]Wd-ADk,8KxaǨQඛ`ZܫqrqM:tlA 2Zf|E+KۦI+iJ朒`dsN_t:(U>3 :YPWEZD˶Aݮ]M.6J/[vv>Gu ,M1fTT>vaIEwS:V.*ǩ\Kg+EP=ً}c{AP><-}@tu/=X*e=D!:ȋa #YҰH0t IA0{ˍ.e:<@?Mn{XՄ8ugD`x$ @"qX!픒찄$l E ie dX1F @dʰ2VQ?0>z"o$F1XdS#& č$:f'\@ 40+i`zd$'āq^d'AX7j\'|X,@A&9EԊ dV++gIGnf*F!&C=Y>(h_n A 6X0Q 6&mz\ 8i!jD-1ƦEL *p%Y,d2yr PxCi҈LVne+j+KV8U$2'F?(Z>͛PTyD6{%OJ!Le1/ҊEXKN#F@4H^ب> *H'b}cR+btdq|8;V1m̭H `Lh0#dXX52M)EQtai$v5 %fXa4-HԚeE1g-9:kX2mB:ϼP>f<|ݶ6uQSF$vh*dO 8w˨n uNI Z;E˨!< Xb ɤ6$ kYΠ{)2 #דV X]g-, Ha: ̬@HHi%'oM$iu@ޠHՖ )0e<2,qe@k Yόa)l 1aaNUk6 LR` >9 P+ml\ 4No }q tC@9Ё bRl̓ް6I']ׁmA e8xJhHeGf7J*VDM>p ?$tL %e96 %硁)w83/CV+1]=?܈:SY;t$n` ,jf| GPso1z4]V]VHWlytUCcWI "2gG+ G# 1 ` u&` oX@.EC@"#P$*qbZ3y#/WcK@) zx|}h8);#98QaP@<@ TTX*T%YZw/D]2hU|f!:sUsP5%'p Ψp XpcW/ pq v#@wːK|K `ta~?08bqKPy Ehs>VP~tg{D5"Haz z$) sjGmmQ0Q gؓ E0P d QD/2e.Ril YM"0ȕv5|hi%"APqW @DĠm) u`== 9 s 4p *х A]ffSWFgl9fU5YwhŕR QfHq,p P6 `밓 j&q/ǐ?xf>\s0ƖJuWcFG FUy7XH|7 $0pI4IQ+Rنǰiz Ap e\ ZpoهeLpX@Cb6M'Dgq b 2 ]W2FZ{Hx i@v!-Wig 䐖i>`"@ Ϡo+)Mm0vv0]5x:QSxs7 ylکNi*wXj9z@У tW Π@ cؓ :0)AI P`Jxѧ Qp( o$P䋍::ǐ SکHf)gIےn(ʪma<2 p Z 1~l  9뀫6IW6MQj`:}&> dC^矕ږwXگ8q+@ zu ` 001+9(zI .xcitBa` 7ar%>eL+E˖ 𹠻:);%=AP `{ mwx d ȓ Dwq\GUpHT}61 ?dҪ¹ppD˴k'7g\pb ;ʻp A@1  ; slL:Gx>b7jp8c  7uN ֱb;Q(C!ǰHzf@WPA0ߙmJx` H;zБ=#\߁?H-ɓ g0ɒTLиr*B,tQkk ڠ==ᡇ[j1S. 3@kl& 7m|X>܈wi ՘ s!_gE4 ~}HO0zF*B2کڧ"+PQ%0۷RA cG:i(:0 p\AݦdK9]HdCL5f`{&Ͱ{+(;Z Q" !֙ۤP䑃ذwmtz7;@`)`_z ygN8hh͜;#!ϋeQpb4Qq^_) @DB>5$āS(C`cGQBIOn:vo’" 5|Ey#˗.X|]m(taFbjB"+Ev✃lz0@_AK@[X4*H(-Z -p "#SK, =Űjv[RBXف#6w2vG o;mC5( -ӷ>}(7PA-:QVQBSf҅ALM" J8U ؃u v{(Ӥ#h("z;4ܻz!NH_Jw܁H'I9" 0z0{Mn {L`*atj,oq a@sD<"P_+*b,(d0:9MB Fp[3)S ŁPkx'!;2SH7\֞>sPEaK0Oآpa!e Q!*-;#b77Hn9̿'>0p J$"5 ma9@g孃{ ,@!VLEFwE &dB q!Cd 0kޢaB8vP0` E 6-* ½(f@SDX(l U cC8-kC3F+E UP5oJ  3x gHUYPq9}CZ R(E*49M IN6`I@pBҊNVe*Ӂ""@UmBC]H1)̎n7032j7 g8`Hr֜!J@0r0 WrHL h"lzj7r,R*fRQh'ȜpkL@XJt4X|Ӝ SȮ?E.D|[HVY0uo9pq@`@C\9@ 5y3^H8!<rRS2;)05>yJ-D)j` Vj)"G 7\( &\ȪtS% USH 7 HBC8Ukt0uȀ pAFJ q2.sΌ Id4ErR{ha >8Z(|ZW.´tB=H%׼F*mE\JZx2ޝZ;3*Ĉ|2d協C;*>FRrJg`wgfa ӒM($ܣdptsۤԆ9HQeؘk@Vhsi"Ȅf2"BR3~C,3܅AN=d Xºg5[UyJ͋SB){쎊zB*ҥ rvSjC&~-A=L͗V˙3ihu!2U",DR!qHC kItEL!/Ԩ Hܕ gn;.Mj/6DHl .+A8]X]pK$PCh|Øy$K@ KU x8 ?2+$f@ \Nh˛<@|U407}^i.|G5([pZ2e/bCdGw_&ucq"JZ@2)~,'h2@`#T@M u Se!K=J#<0YҰo+!ɩ_97 u-J=K(d2HŐA!H<0P3>@#!=I %񫪘 ;b)MLh3±0?@0=vѰ{BhUl*-lBDB4!DRh _01+Á1=TI2P=阘]P2@_蠎vXCDL<4)XL0)v!:S:cE}CI+F(Quuh 岅PmƐn1S)PF M4냃 !#qPpX/_ò^[!džYOD*{OdŮ!2) Kl?D  eE@1E◨+7\. I ; JV谯~ ,P×?$JÆͱ"TK€9v ˁ)XIA L¬\4뭕h@rMi+ ,n9uHh ]  bx89XX>ph0?0Р Ad7UZKP΃UdE"B l= >Q"Ld=n"LN9eKN;%p+7hW? Q9W@E N3GȽ!@j`3Hma/IR8I8 `ԉ#@r-]_=y(YY AGX%9{P # 5`EY@<4Þ/)]0kǰ Vϥ"|SӒZ.T ZOc.pXh32 H9,S^h(h@0X(U ,6d2ȝo"›? m?#'J)kTTebCIL /[庈ұ a`в$LaP2 I8Ն88)<~eQl&p[ f$gde(:t ;E\{0b`9Qc勨"CJ ܅P1@;nt_A)@GrnV(ްÝiyN 5bQ^H|lUgc'l(qv˃4dk4i,jM6``9CC@m;H5yC.C-q \&<}D lOd?^{! VڪܒB+Ƞ.h P4Ɖ!J1U i04YiȀ(PCUЅ>UZ>qf- iHa2\koR^ˀ xVLe4*m8IɐpvG8gf`hLpd'YoKtTK#hi!,(6 XY/5/ɀ>qCr~wBq+nVb ԇ߇,̆!.G=K* {P%;uL߉@`sfOO A"<;Z@F㉭YC:2[[*$ Ki 2I|1N^ 뼳-dðDjy -*!x=-0ȿ.yKȱ@d1%pnhIkg} k"AH6`IRS$b{OĔ )w40'R-j(ҢCJ,@Q%!aƉ}ӧ(QJJ:Vىi'  XDmedb@E1]Zc4p\)vP-}HyAQobjQ u44n' ANtbb˔w'nJ`(d _JV}]VHbbFфkzZHR{ -~ pO82RNF"cZRA:p-pA6# Lg1HFux9ur$x+VC&(,s @a E!r` fl!Іh*~QL*˰&lP䡤"4L "G;@ D ߸lqah-E) Mh]4*M% R Y/nGH]$.%DFΑA$@*F's3;b8 \[5p c" 1h-떶e.ȞJt0b64~pHe"\rgXU2מeg@F_.MB#z`{&lDH Y >:p!<2٤^Gf5(I WhD#PF\LꪎrD c6n2{),`!yՋ$%4iXId12D&5īwңj8u8!bc5> ,X  #RofF?bYXxM-D-`f^H* NC*UEͽM8,]e%YDш$c%s&!I;MJ=RdV_W$؉=UlDa؈um!9[BL!`#&'qC".slZBQб`O#Sd22n{O&ɉcO /M%(܇D16tm5dpF'å^DSpQE!cHk#3u $E0[^xj1|r 9ghBK]^,%Q'RecmuW\߀E#^ጓ%($K$ʔgP'⃍]wJM( o;ըFQ"2p&~7it lhp`xm|:x&h^x8c<ɚF@_yM hr|ޞ#X@}q:*_0HIsR%%&Jak:*x*`;R$v?dE(`֡Fb12qHkK?,a'!-Kw=+K/{i@<5 οe~s[ٿG.Q; PEAH'DPEd 4BU@IIDIH!- qJ͛ ! \JمI6-DĈ-Qdi\8/MHpiaRX>yRP @ 8.K. ,!^ V@^ JD" tH78`J}+}!OJMWK5 ޚQ82,`{Py%@r>  `!Q!>7ăB́pX44#)<\c዇C8Uۀ"&WAܔE+9M~CЀŤ j-L*YM&!A6*aҀHD ̡R:͌Q#QXaAE6fw :!,:R WNQeE("U4|"?H>R=A(B(%ά}ZEEEJDPVdG,p I![xPR%> < Wr@QHIRAT@IAD! ̀㒁lnmDr\slxzjJ 7\b >4<D+Cov.I,xю,C 6@<$N#EbֺGFK>>N6 0@ *miBi坊,`>dňJEd=;஌fhU 8tr.Q(2#uaHqM,&0.Qp>D]\y5T\O`AH + -KE%TXlm<4Xe~2@R)@l D@<́N\Dd#Abwc.X 96ꖉb^Gf3HD<fGUDeчQJ alO.pXTEB6@,B+|Am(@JJTe)\ @8_XB%Qn;o | <rDl5"M7aF[CM(I A6vcOQXY‚-{L}؁Dx K l1jQ#LJDQ܀AZ^o g\8?D!NDJV Ty2ftDDZ@[C4)xQhn-]r^wn71y{֎vC)H. xRSS͘wf- QdPH@P 5u05͚Uu'J' A  4.?curc[kދLMwB̻]ot^-BJnw fcMÝɫú*pbQL},Om%as*!rP&\h\_/gE L ! 4 ]wE?ϸb}&:q@7ٝ}8:S}sON̔cƟ@K;M 8 ~C|pE@\X2\vC:*R@ wcA/:@@)X$TcEpĈH5׾du+Pn J)B ?L"PGKZ`5 .,c(Mt HHĉ. wUh:vaصE 6mRJK\)B chqԈB!+8踢 1p) KB,X)IS+ u-lxŋ]󍴣Cb1Kp SfI}ןggL,?!AFjɸ ևׄ^Gd`'(*K*0z<T !& 0г$i18c,3b'0B!˄L! P!pJ2Ho6pv"Ψ;$ 9/~HE, É%``|4ZlHUH[ iH+@ a\y\:}Yg \pa*PN]9!;8D>V=R`sЇ7O!,!>K*O `p+ZEʮ0zU!So#k+$@0gpX;3"pVG_K+(!hz(ꋪ&頃 %$8Nʠcoyl/ aBꖐo IQb'NR G)> "e< ;( 0HAY|ˆaJu 9X22/eޣ!!Rp )2 \` KA vװG!szd3P$v'm{ ŇrAI` _O!_HrqC`H e!A$CXBכ81 g>XWd79%L ` `”,J*&@(p9FYe kd)a.dՋb<8AX)j@9tIxE$tIT[u0S-!@S862!Ӎ1,~JWzVB> D(t[`7㑹uxѢ]?i!5{XdV`sK Qs'Eۯ`XZQE]l~ҽj!4P@K]bdl S/`dqv`$ pA@5vUM!1\nx&{ Jy- C] ͟"UN6f=s $wB`'X#4M(o,=7+WmF P D,A /S`$;IG{DL*`@?|y(RDfsNWJzDFL/ Ƞ) ~Ԝ.`6< @ @t n &j]($n@f"JHb 1B&Ook`/ p JJ=,vBfWX<+ez^E(h(. !>:0!D00X Ȯo&&mΏ "Ra`)=L̢,PU4dnAZ+jDp!Iڐp8"n g9)>M4 L^&zm]A#lo)/!zA DM00!”k*BBM+l/h<f{H"3p!p!"Jo9P CPsպɦ~|fa E!#61N %!!`0"_= Yq)(Y0B"CA,QNBVh&ZlZN!N^i90@Հ Qi01Pr"Q0":3("1i1"XL>'5"~F±1N%4$\S8B*))B+r&)rU1N%r!̃@qx $;ll o!fb0_#H POӊź $qc*pN!lLh` q D A/@0C0!( 4>>HPq3!L! l J6*IGUpA^gC!RҤ0/ )d(% I1"/@$> ( W;SҜnB1'ؤq0z(By (<:Pf 5KDW ]|υ~)G)0t"q:I6.6lÎTʲ8$S=_ f"Lgn"I(f=čK (5p@1(<-Ҏ 0bꎢPAu3c4\pM\J"`^D6\\y0S@L`S@!4`I"$sNHu:G;n!@f?@BZ#1g2yVq_O٨i-)wASsXO)*``v(J . P^m!4GЀFB}v8)nf<+ǃI"0lUUAB=\g+Z/Q"Lv=aS 7!0`Ew,/H _,UpR֋"VLj!!)$(:$BS JCZsVu[=4`rx4"o .{0DN@I `ЁlO t`) Xm"Eco 4C",0D= LB3,,I3#Ŗ:Y<6N+>o;ֶ(O4݆u'(-j_C1&cx$. b K2˱FJ$Y(c [!-/B@BJwԘ,L)Cs(x  ip;5#+ NKF8j#DB4G}5qI&:ׁo *̰|ts2)(WIBgjSd'fK={J%b$YCLh"145#TInTvf LV!, @bPG960hzbY~({B_KYS"=-, t2J BV!T0qës:6F[!]@}P`4`q~ H*\Aa`zOҳ^(V!"z_!?/ o5,d#ƃ9!^lXd @!^A"Jn~%Љ"Q(|՝*<9 t;ɐ5摠4 Y+0 " %* P![w0,.:if"D*iCʡDLp@`)S((EtpWQr26m") RtHUKp  0-Z` R{00!80/J(4 ju'N8P8(ȏ!7nXCt<! "H6A""S*.W,yF^ȡ,ڒ%>y0q96%QNTPBAPХL8a)mVfZpFy ZA 0042ZOHf)94)[J;6Tyu5 pA"j^fn8T`8GwAm$BP D'I*(z3AIDI2Ǎ4̢ PBJ]DUPl19 6AVb2=m܊Q'[sn)pV=ƑA UEz`jBEliP(@BoD!ׁPiA¾yPe,MRP0L3|2$IR꒥1q27,TA>mZZnIl#Zs@EJjZj47K0TWI$v :W4ݺJA6A@tjAkN)ׁ>lut  $`9 :p'ܢ17Τ3܂3t}Ofi0LSV`caqG{?ͼ+[4}CzCy >AykxvTPeAkTEn84HNՁ rr t9^Q'|ĸO)C3L:Ĥu"{LqÄ+ ~y**~hu-CXfn\MJ *Ek ya=.c(R01ʅ+@qb>~D&XH S5.;A& v#%`bCr;鸱:ֵRILȁbeHxg0/cAZ!6JMA"WxVŤdj\2X8+WdB=!`;5I-,PQ56pNO,e5Z6-3[c 谋9d$ JqН a#PMd bIJޢ +[ĕ2$ea Od 8wHI5s f(70t0x[sP̡1nG,WJbV\k8^)j( QdP_ bd99H4 6q!DKA5b$⑌bI@o-^ZWv Q:bV )j# 欌RX]Vm`:ГI`G2֢8Հ)YU_0926Mmi6 Z(C>@ k n&P@ FN*A.~$[p  .c٪(4YxCЁ@9f=q;;!UvM5VH@Y3HƊlYֱ|-%a0!ei) d1$XdziJOH("0P,9nȨQJPq , X7f+xH+g]Cc0U=~$xMB$_s+TAq@@Ed5eh`!}U 0E&13iDe=m @)@0W357WeE!07DAՑlTgriq jj @,zAJG:+ U1; \/d0y?t: ^n)A}iG"YC,+zp& ?? ? .Ez` *#NP,#0>Dw(#Gg0k l@U!y^sNց9v$pB$  YC=13bp ]œ%)Cipt\QgAetKأjIPCu8*Er7-  xIQA&Ccy omir0\pc d\[x r0+;A1l}Sv<(UYEA.Z9"y` q4 F15T9+9X,wzf EtfP\J'D~a> o0P>5P\@H/36znɝ؁t@ByR%@1 U#FSQQ4,Ŕe4CCE1 vQ<ɓE3 ^ ~jћi6Ti@˙sa708TA-@'Ar3p!;W1Ǡ YB RPQU 4w<0!9bt7hP5ZN,/МEI)aiwb99r`)2`;s(9 q73¥$I"G?AyQ.c CZ a0Y24T(0J+vTz \q`q i##x\lB (l2B*md:0z`A21+J) )$1l f#cBSj!<r7 B}f01Jn1`gE&!^ -(jaDA iÒ\Q? .҉CKq2IHj tPX7z`1+J{1qpC ri&W$5#rm53`) ya $r3P BDE6X0IRJ&k#5c95 fQZ J49[s :N"mr$$u$H}EsՇ#c%qㄹrR 5|DDn&a)!~E;(pkP,5T1*ۖ|A: W:9 k25[[15 &ˁSX# ";CQ)0=c.Fwvf!lj*i#f>%)KijnS%UBGupED&}-#YCx?ԛ,0 ?'pe;SU#zA"l=`ɐaXW\ѡ$Wa|yͣz0Abs.224J#bzื{+=m,U1;+7F!m-0pBAe\ߺM -[+X|2iLՁZ3}] {`m] P}^zo D^#ݠǣMIq0s#sJ3s |Yb|@9Yj!b3-"<0 pEbCmS.Dr~g% G^d#r%<Gh7):Z*N-m}Sx"!EQ̣ ̝{ۢSqB#ؤ4J%Sz0CIG}W~]*yD5S Y<2x#9^ޱ=K" ރ`]^<I%˚ SB1RL(lt3 Я^zΣ-9q(,8k Yt\ &]X#Pqs>a> ,q lf0?dBv|.Bl)R,ڿW)\c ,NÆyq0 :߀['4P;kOV)$͹j/QDmp ׫+,)UV )c%*MDQoJ:#sKAl10 8F^k7zD@DhX@$G_b?kNS lFqQ?e`=n!#P`ѥ%Q%G) 6%DF^1<"Lj-˳6tH0B )4HP1A 4jq#NJX Qa)U:p1g|[R9gʐIr`t!?LÊYWeW F,!$i*T(ExB΂1/ ( KBBX `Pc6gb@P†+ \X1#jlxaC W :J~b Htt[z(O2*U ;leD)lꅚௌ>$ Xí( @2,=*XjO2$3^0D0@ HX[ײ:.!H $ IC(PI %tpSɁ "⠄r`CR>yzn^*/$n =*@>Ю0 ǿA  KT+*JԊL|AH;a  3 5a[((  xrf# J'y`8PX&ΩyR!<lO3X[GW5JҖ +yø0Oq@WjFi2>p!Obw+3K$y lh68QƭKh@" ~A#tшv΀ɂ%$փrմ1*|+ôۘ`ќ{?ٖ⽯L A`6 ϸՌt` KPC!FfXl3  53u@CX!2e~lP8+P48Fцi͊6ٸ{JMYp$ ADNRA IH*0pZlNBBNR^M,SC[ 詅p,AF%DHW2RA֓.@]iy b_-:HB00qA Vnb{ZAthp/|E&aBM Fcƀբ`JčjDJRpĠ. q K Ȅ$YfrOt;P7bhL5qVnބdHV!.g9T" b!jR^ a,E'~|yiO۰ERv0۫3?}' (\( 5`D#b90eӞL:eC< q>=[(g<àӔ  6zWa&&=%=5Pi8軗 \6[b>?3 >+ Ì뼉Ù Xs™c ;B_ .ScЇk,p8#4݃>AC>'B[B)̊DMĦ_* <Z/ ZaP KJSà)U*J(2RuXg)ߠg<.>9 !q 2‘DqD36dt %6܀YKClߏ<ӦuS4sFnQ >vH%QRzBytFW0Δ@W,&i @+Lɦ=UnuwpwЁ%:;ڠc3XJ+ B^ϓIǩ;&\k繢P6@ !Й$[R?$lK]/}ܪӽB8| I.#fi@@Y@@/nuKRbIDѕ‡Q^_Fk8!hi@1#|PQIk^ep\9HcB=UtP~KMFZ.8^Tl"4#EҠ9$tȫ>lQ=>f?/ O0Dz8*; &v!0H"ElI+谁WfRJL"*b w9Z/"4ɋNS oD8B\@_/@?1C˰1Y@.7"ލ m[S³,35}Yn1ɇf>3FE8_"dvAp}6ޤ}K>ofȪ+R Z;w}9peқD3dXWjd.=q0󮐝kČ;;ϰr ؠFlh}/:Z*$!feH{-ɸfVR`%YQH 1YжƖ<ݡT[6pYZOvtD2ϧ/a[ @EYQjTKcL!y4wZ+)e)ײSV nWQtZa|DQd%|޲x|GB|0y 7&lOҁ(.bwK}nwS-R 1'h/HCvpn3?0xQ4Rbvg A18ҁ۵(I0?K.EE2TA1q  (` pE]hmbvduLfiF)qqv\X_VC'x$zT_As@%q'A7q X 1SGB_Q$ G$g pEZZxn pE镐VFhOq@Csnj ""'ۣz{W#BjE\UyKeVG'wwp 0@5 !rQ5&ؓx/2" SE pp:x:r8f @ }#pfslf a.+f~ϕ2!,|)#bwv!}`L$ E Cevh7P7J11?>0H 0`&6@ Џ1P_`@ eSF&'FR!|m4!'e] Ĵ/I;? .I| ! pm  1Q@  (f @@  )[` /wmWW1 *`@ N}c# ǀ ࠪ 1 ! D TjZFR)|>YAh~R2VY6h Q'4$x9M 6=?ژaAUm` G`؎' 0Sp 1 `j@ :f̈?uh&_GᭉjHe$K @ 606(yj ؠ 910٧D+!8 q #.)0\;a' Yb 8"$q&Ej%+`B#X00Q@ZzEYJAI9݁]vAb}bwpijҢ1Yű.J1ɓdkaPǐgxG7y F+@耯 `= 1J!)jsIeqޣj'~~肾+=ʶ1mf=,y0 @ +ࢾ]΋E[ϰq1>&Vx!UcM}}!T7VB5}@eY=bO/dLS%?0۾,=9 1+^=Z(ṅTn!GҡI (r{`[[/LrXZ3)%{7,S%:dl6KN.C7E\H_V R(6uXz u?1S? -$ LI#JTb;&%1ׅXSh ,1ԁ G>eZu1 PRtF>Rks@Lj|1qSAs!6q(,ȘNl 1*1X_(=$,mÈ|T J; D]` Z#R FV\,q!]m^xW~[(X 9eH>J٫,b#CX<3!&찗!/ocy5"cV ֕%YZXKLHIQ!r҃հR<1'(9 98XMUcqf[1*!2h^bASb@: Rp[-yɗ|awf}tzV)iLCK IWst%:!+VM㈂r>7d/H澷f%c-p."ʉ]",Ih3ju9R#E rg!qG PL!H1jB`ITE({,oRţ^5Ml(~o'O92zm!i L3F/c&*P( &i T`ADւXPY AMMĘ@ ,h,!]P) x8bPԀ,Cb.Xƣ8c.@+@XœF),5Y %{eDMCj !"iQ<˯"4VCָƢ˨4 SJ7 *mR ĜY&OMQ@̧[ԇ>ŇB A 9-I!*LǘOIA%t/5XmKhX28P4Lƨux!"[rܕWW$*UA'KW<3rSi@n 09˹.CF4L<I yjyL Z1T4Q5D"QE,Cʬ, ^HYg "m@L1J :Ae#@D-F1Cf8t'b + tPNSLI5! b.]mHዲh$䰅}ѩy$OSgɕٖkVp9$񛃝ɀ!OH-Eڠċv2rt36AUl,@JD.`=j,! B*xmLFZIpsA} jvG| _,S"Rb $~QGf8ѴJ$q MȵD-dx; .mF+莦SaxCv@i@PՓN%8Y\ELT[b&!]t/qv}Uf8<)dxKJB[q6ABY'/H`Jxhr#4l$"+]M_cHBqn tr Bcm Vh2r P8RG>[P )-3AI?x6#,˂bS Ƴ]6_‚CA%ۭ4&m@=h4+{`),s y X P!sx3p$4q+ZPAC <1.Կ X,#a1$2WB@UJ@અHl.H,p CB@Dcl0HJK!pqSP"3,+}4"h? bI KEbIBES1[,[Cwi`7,r( 4  D2T@-AA4 lIh >l`izi &(0}!D9 H0z&KxBʥ+LڜX-A۳2:z%kpbK+Z %@ݻ@ P69FLDh[³4&h< /JJu\%N<0'<d’Dž7o 3<7򿆤!!2ܑKD5g7#`,bTFH 9 وF`p8&!Y] &;L,;!PQM(= zd"{Ո͈6n*̭1* +4A3#kuƅSpp<$ wy@.KO @Oj1Pڎsm-+i2(L Ia42PX2 'T ʡhmCEҭ1-B&"n4:1ԑ唪=1u 8g0 3Fcq 鈈tAȀ%؃8$9@X>8mUO1R:5(AiY5MY.%=]a _}qMkjʼ LK/@4V3 Q*\EУ^R 304O+ 9 ((WOU;K UMUBXt4XՇiX/ QM e *9TlVg/&=;JK\S9]{Nn- 5d 6 SXXOIRYUZjG/ض4K Ƞ ^[P8Hʀ\kXChIexAvܗfZ*[M .6 AۜUSt-l-;ȶlㄦƙ0 e4ŕa ?bNZnK%c@$x鈀`X'.H !Xj." RH ` rn RɂڋNELHp,78yv#Ȁ"`IV3EZ $a] !Hn\R"ebWWF#u0k*plxSfx^,< 4ck] v q l^4#]ad09P0"Ffmyp|'|hCH,pji q@dY&f%1nJ2{pkRl %2_(հz;B;jZl]HO. ءnHQ6؋!0Y6Rc؂1(İb>.n;_h'H .F'"~L 'د\EMt-p6ܢ9euV9lj[H8\Y/钸.#p`x03GPL`yGhIc0n7 Ȁ4 mXSP hdts+y Nȁ zHxz했Zket ! Tmr'O9LtF{(X 1+wueW74]פ(_$ x:FȬyK: G! GFi8rujNonՉU3^ʇޠ }ugwGh CEy8{EE A:j0=4bζAڧn:UmYdaGŖCqC>ĠRgQ69N(~:h^cG\Sf?y 14P6ܗeo@qB 1|4TA* WiVʕVni  _2#eK˄IDaK)xC`1#83J k8s75PK Nlq姾mTr(MJk{JK #5b0A4 '1D-:!'qErɵ7Zɗa`|UՄҀe3_I l7Wv=R{8q2@pal6H/ҋ3@ @ vCJ̇*1&EhoX&i983=N% >D822@ ER-䫤 CXFN%%09QEwG9~peMUA= U[&Eft_QͫʼnJq#R{HAP=aS }" O|‑1!Qjd|IQ*^x R  D9i2K#I! C +H! PXN-[ K-["@7D,nb\>U9TW\(e+cb); R.և\n|SRh.j³Pq` GC$|hJA;$HiH`E7,jB1 IbR ŔGѴ -@uqxtcvd@IuREU Рry$VTt8MЃi,y,() upO"Gv3Rтh38cJ1I RG?d03X,bDLguD%)M>цtm)0V2!;C:ޔ<̌jU]ZDTQ`|Ť-5wWZ=BmtJ|4|A`~έݤi`VJ A%CZPkFKp5Q`?6iI4't>!RRXQ֡ s; OA8{PdIvȖ$O5Uk\%zBLKR T+~Λt*#R!HgԓZ!#58@+ p[zCp[2 iU 4,&eh U/d4i^zRD|̡.pIBD:؂l5%I&`TCHPTSCxCaAɈJ1!tTYWAAL  4G f[YTS|EmٚM -<E  ,-B C(CL- DTF!\G|CkQPH:hǫh)`A)EVL}dI CWP Fz1HVmW99JᅯR܂R"R@pC Cװ Co)ƥKUJ1TGJ"E2FĎqEP%ATHCGAlUZE4}N'#%0i[MHb$ A?ڍCC*EP=D l# +^ABXY"|É>e<89La4Y%513PpQeRS6:D}BA/$'D4ILiHc%74IJ<`j-Q4h%4%d*PC%R g@:We0 ̭㬤 \Q <ѡ Q!znW &:O8јaHҹS]AVdr&32gE.:D^k9t)8%\cw!(KBD(S$J|68!QJ(̊%P.ZhQR)FXC VnU^%jRϪlR|@(*">ĉbojP.HI4bH}0#RPJzd҄zGufT>fACALT8uib@nJZS\hD:yV ʡ>QC(#ml8R(8GP/%5|'>|M8vPSn j{0I̠S& GW` R  b$"+~`̞%'(E-ht9+A ʼn*'&E#Gs`CP_T}Ck3@AG"> ܄Ctmz1h{CzDU1-އНR`RX nO^ "$vJ.լahx V|zuBij0Y%~:DB:kS6,4B`!B{4D>,؂-CS.S\Msh^5DR8l.GolRX&-SYSH ۢL8#8Uv|$Lxou[?$Wo)6ќLլ@ʦ*QoRRIGcR -tLU.N!)Jr:6,AozfSTg{\iA&L44]u%ELKѩ[\&qSh Y)A<82 ;W!%܊|--#3 `hR<q)F:AưĢdɧ C tE d d SXAum5*p:TRbEb+_B{.R Z?p0;__ޫR0cJ?;GA k?k 3ڇ%$쬜I?̙@yR @ 9ll3iDWnڂ6důQzjفA{ļ@m)to*F/&)_Izh_@>` Q`Ad謅5+т2E(!d)Mـ-QD2O[=(yMSvrR-&%6S@|S^9'WWJ5D0)!SL.sg ))R'JDzb3)٨d0ʉX&LZB3|8Apb`BNƺeAC$g4GJL`C6EA^KJcn\r !;Ou4l!Txt@L e-P<_Ӭ1nx`76I{SsCO>eMkoZVC;EƦC#bxBs|X03%KCӎhGtGURC|#Y|#~, L ,v>^Srl GC*4 %9م reE~ժ#3VQ\y4)Nb({\~GG9D:hMg @i5$rYÏA? )wێEnAдy$63 Mb6FH$JP ϗf%JE,/7DZaO)YkyV 5]7W]imrgCf3@CO@o@I_r hv׸ !{`gzE&KQyEQ'k9( CmY%7+lS0 Ph6_Æ)@X/|B0vD(CbEBDQ,?JQ⇈3,F$%cZƔܷ̈͜-l0th blSo]NRXpc1EfeF"C@&MYbК-KV +o4)RJPioEZZIkD6ӈ9 ſKJ}`!;d#J @([%bSH#ȔLFAkЗSҬbΖ4ӕxEC3h/R}PqUCV#+ͳh @j+_[sڷRGĽ8Alb-@J3llЦ"/4P14_Zi%IB9-*rIX"Zt`;$Z,."]Z&"&Q($M֑)9襢 /4%޴"k,K//"ʋ0DR2ܪ®kA)0(OL˼ҰĠLLQPZȉ͈:(%#:@ЁUb%%҈dHఱ%o(8*l:⚝唪$"$t+,B23T4\+N ?pN<mЭ40AP?! RH)h 0DR(Z8+sS/\&Vp!#F25M$eW_NWtflv&vNnf["O0C<["3fs?K3j .ˌȚXRHa?H0++K~^zv 0;+|HN<56 Qi`$qT"Xe# >b6WiL~53/,t(AukRq =a*ߑђfUe[KY`7qQ!ڐi}!` m-Re*2LAJ aq3c%J>)UsCP uVR2O&09RE@ft p l| XZ0rcAOH$B(O"T$7saXa,c g.<-3&\qYdb -Ҟa(t HPQX 4JKt iJ+4"'2BLبldJp< 0%HjH! $5:FrRs>d@|I@m<6ia Oè!,b!a Ax.# Jk0 2PDȀOٯ)PSk/D͗ܬ'6t)2ө)9舘lcݠ.DbT8 X8jť{rjdDHHW{%1@  @sCJzhKY7܀FmnԁQZDi)M@[ W7:/˓| 1` DsC$V]ƥ$bx?e%`9PT稲Qm< P c p@FS𛮎X+5 hl)jU )>:= Gp :P `6"(4IL2ƞ"!{ڮ^˫ N>/DbDv+>-Jo{*@ am S.% m4.GWXP+:J ]J{Ih"-|9wIE$_LIdoP9r"b\Ё V01a+DL;4uV&R™x <\/# Pm HQn>EsmiߒHmҊrY 1IErP@eQ?j 9p sD] *Xb"W8cr #s'd@0"lJ l8#R(]"z/yӵS"#/Wj`V4&Z]nĎH[@dB3>si2XAY cOl;"3^" fR}w0gX@tYD%X.4P jKDаVB0񬈽}HJ Y/,1Py6nlhŚFuD@%&$rۑZnz*ܛO"H f7>y+>a_s(Lfg#Bu]hMg @#ʓ@eƆ3 LЀ'4B 7><0RB:=@!0`J^/$ F%XE,~~Klz#zN`0" ZtUxw"b:."('ܺO&nskIlb"ΑC@`ߎOO!.a> Ƅd"mb $0&BN"FMzꅧNyR@P0+"P_/)j`"_N0 Xo"dI *rK":Jd$!Z8 /&| Qp  pHߜQ(JJ)`AV@UB`aRct?R.2h0 nzn/֎2"بQ9O#Zbq4%"p%",a E$Ir%@ `Fcf 0  8oKкrv ( *@F ;;Ybl:EP 4\E#E冇4>}=[.^0c&̷Ī7\cbb2C{iC["rE EFl z"ZTEc4"H`7f @ nGϰ 0ALJ@0L0;I":JϓPK!꣨{u{>t}J2h2%\$%) ˪,t$b %b5"Za H/[-g$SS7wE;uSu0 a%u v8{GHVG:sJ;{"/+"WS!ez15`bP UBj3Aؓ_3]-M91zM[E#B0JA%T3%][# rܪ*BF5%H(3 @ Va5UG.St0 X`zAF Pac+.:a:\<ȤreJИBP! A=@^:=0KsN6Q[̉1ǎihw,?Nq1z"C0I"^\@fE%VC%Q5R/e@(y2@n#`"6" Sw "` TUq'J LHona XS&V(&4wF X!%!"P o=`,"1b"hTw9iAcOs2#sDQyK,lsz+6Լre @x$BFon7 " ib Wc'zUc7" OU76+" 8`/In`pPwtA\_&"z=E"\mAҢ"^@1,2qh)6R+Hk` Hlm"g |{#@f4"K' #onWoQt` 267w xu>A 78_I+a#P !oNX ɎɅlz|`_zPaéA*N|踪9%x"f ܪP-CBr' `~R"*1"X|#@08" `)1X #H` RG:Hns P{#c5ItnaA؝`""6X u\+OOq=!lb>(⦘ 'ܢ 51x $1%%>•]F*h\@가$+=("xW%ܖڞ]cFc ψ(7 |mzVy#YX@TөjsauPa:A Uŀ8":%0W"ܺ"Pn,b*x4">y|&AC֤PcjjϢxEwPK 숺aba">"DLm4PBw `@M) #H{T"++On @W5  L"hOZ#"ٛ7)"JWգPz{-Z#A<8{&Z0+/D7O"^6:t%| [Bhd[R[byb+d$"AGvL܋ST<w}e| :oQ=+LA!0|](ƚ$bKHJ(" HLyYC'0l-vuq-vV5%$631L&@"E]+LF3U:clE*\R{UÚ`,%HVL%,tz'_< }K b !qqaClHO:o;[bmb8e{ "Ol#-˧x #_z?#[LP`Dc `W*+. d-BM{Xd~2#+biK[VB@vUٷQ5b  NdmV#W(I%mB.)Z#5>"^/v&y0'6$[BX &#.H_%"N$6_#(+7nL(Ko9mQ^D(?%VQXCc%%"Io#`c~%" 8ŕ9J@>m9 k@nòI E9U+f|Y4b*+Z1i(&FVHw("܄"Ğ`‰s#$ HxΫ~Ȕ #e\hh6p9jVm3R,v„ Ҽ M1dQFx_xFxb44aӘB*r*@A9ZVЀhj>@PC#p^{7} ]0TIֱgg{zwR:d! ?E1CAUp]a/sS^AD|rPC0rNX`(#qxZg{ppE\d Q6ezhÂ_u""H>0P6^@3f!4HSCpeU ]4fIMg(g2E@H^D=R*YC4;"i1,`5, KNd=3g!S}!|"O wAbPC`hH M78v f6KC  6@( y` PefC-P-d pgP,mVoi.qY=N%8Cv=-d.3E8!bv5@0"&~!{k"" H)4R8'.ʷsW$GNR}<ŕHltM e S<9 @ p+`P6VebAC13 AFej`;(ߕ9MUC5I5SL6R hy)ZYq(2XGk*Tg=qQ|cQIq9Ba+AIIC34=W7SD!eQrt ϰJ p e ej S:@=79@qj )' ~tb'W;d#x7`dPXcVw.Pfבa2ACw"it8ʒ5fy+w*RkF"0ȷI$nwkZ՚:zyts p w[cf:7kGip 3oV!AWPet >4CJ6T' V R(0ʩzV:զ)w|G 5+:"7 %rHѣ^jVK&Pt"-fQ@WD$@0 \8b;e `u(=ѶAE+` ffQ20^#ԵeC:гIp {Y2Dlt\*c1#D\F\aC5h ~">>XP " "^wub9&p%}e2#H&|R.3%IC p 0% p XlpxQpUqhM/^.iMq <`gIȤRe3   d\!Ô39uu&JjǗĬuuARf7(u.+fuDIlƶ})kJXmwI1i)Ֆ0p( jyИQ,P8zN-|B3=ۨI:yg8Ǔgd43YajUY0)Y"0&NK`A6ժbO+1Kq3I$55FP C~\0JXB .^#֓G_M0 e)X=2cYSҐ`8KdjC4L=qh_Hws)Up m#XmgQƵr#RQ$`&DF6n ve#kySͺIb,ql@|H ܚҕjj \SP.*%3岍`'0[m]$m=z(hDj!:҅pijrMpPꃣhɛ"<1C6TAZ:=ѳ76%\1|47عRDjF()!$Вs@ cb!PI4Ir ^b /S7WhNai[='YYX _~ {jA)l# , A wSztmB]\fZTz0c\cp8 mQZٝ~NFRg,Rn4,@#N>BPp68./˝#:IEJa+7txMoPvѨ & `q Vg0w&1gC|БqgQ)B э#vl:@'V4In+夎Ւvou肥-hòz7Pb .4e`S{1˓YpthЕ b88 @9F L748# $0HP %f !q<=pP߾M*)pcˍj\)'ˋNj(sJhb  !eGdD$8",\>-##0C pB$A;%tPJ)9b`&+%SQsVR馃利XpU@HjKarAٸ0ZGU;3-,]an^$cݑG;$p_ p,Io2)7W7=( tGNI ~t@J/}l@Ks-HҨ@K" `SLɃHd7UiR5Vε5kvX 6,#j@mp R \F(^` ug#xЯtzXhpBMf3pDT7ZĮ7F:?mD9je [F59'#?p K!YXBxf>zOgA`#?h _T3j'sط u _P: џiM,*O#:`&0p€s CJ9Btɖ e|=d!YAL!%{zɀPE2 N8Xm\0!ΰHڈ@ qD}435s)ˆVPI(D+ 3$YF>ˑd ~ @^d`~:"| ;qd@Lɸd0 p G(uC`F(N+21 9@ATOp6qv9|.P dBӏlj_(`U\#J6g#IB01'l2J0ШɬWP!t74sgfe :A<) H㰴k)pS #La y~`$ӌ\)1! 8bJ s,rr.9ҡ5=Z: Zh͔qIIژXʐFlH),PPHA}&La YxdZ!E6ik[9|p.t7b!lp7{Rcpz0$Eٸ0zEi_zȑGZN~İuNVrRA(Ӹ:#o#^Wz)#}[,7FmX2 B٘`v?: Ƶ 5!?`A6cqg<Ԇ#M?sprd9A "S ]`3eM7b%+i,3̀ ,<&L B wIakunޓR 'f5q75.DtʬA \-E@ROU|(1Jn򪝸{+S>,9Jukq-NY:%lyH)I 0'W9"nKMR SzAAFSr)ࢪ0S㹾f fL;qN<ͅ J'<˲t"B$䔽݈cN%{1_/_W5HUD#t(},~bV]oưUvp5:=i .2RހS"; -c{:Ӄ^:9ni>;Sh6!Ǡ#%x@h>2zB @PR}1h%P% 9"9ӌӒȉ]!08PCC qǢ>G>C:ۚh( /"r+;!n:Zk4C- ʩ<$ǩ=),1%AԌ8%ȃG0AHp 2وq3P=YΉQ5Q!p!zr+ ݘ'H[`I #: >V!  [C0>*XK1h,${Ërސrr+2H/GqcoHEPAx=b@AO$A৘95 }:{ tE9{*Cȿ`8h ( >VIɊ 03>W,5-9p% 8C[pǹ("R1/3 Iy4;K$2H9Ӌ:C1H \`A)៶ HcPQ @';4<%һ8$|$#3-q :P4:( $сxʍȚ)<$9 VI c@j8q9򤰃P)2 IpCق:!;)&ɍ` o;+Ɍu*Pԋԝ$0*ӌLPAU񜅹Ә:I0&1 ɃŃJ$(+H".P䔚9[C>@ W8RxF0,05KڜIrύ4 dMR"K+;GܼG0\x;)傷 Εϓ@'6%.H *"HG z MaHؔOIn*QAΕ Ж)@R *>B>Έx;jXH P,0UӶiߠCS ,zTЄ6 :@D\PAp #sd|4A3ʓ,h1čP `&>Q #X2Q $nnt\N+2R@V)NҰhRAu8IR0Հ4Oq,H@$͝Ϸ˗ҋVV'h간h9892s1qХ ۓjЏߠ) Xx $I+컀x+ m8-=Tcl/G100v,4 LB{:j85=l;1?&6bރ b U/v:QLRMXrl!j\Bi-hS*)B=|A XnBAQS5 >-=nR#]Ca@ r- ,[Ve %Ӌq3I_lmR͆+T}Ռ`1x&h  8$H %N=+ "f  @Fc:[F\˂Z"BO"n u24CcW7]$֌%nb' +;yJ"?ŏ9Q,+ŚXJQ3x1,k:0Yԋ`%p=,`ߐ%@Ƴ4V(hZV "Ee~+PԒZX6`b]XL*':1zC`&m ʡS'3:#h'̕ }S1P8x(8))0'0OVˈҢIU%Ѕ9h-XH8ޫRS8" rt LpM-ӍFc,Xj XX}bC>6ՋF&g\ʗYJC,]0%`}V'P, >qy iQF;*,SflR&/unkH!:CAluyndWplƦc()8jrzOs&$iRoKx< sV 2's6 ,%2׎]  q܍ l836%0n:Pq /@ =Dcl\f`Ɲ]9]T*b0,OV!H2 Tv̘x Y CϔsA JrP5Γ&2uIJt E+rE=1>hQ1iHnBX6C+ %,IJs9?oJRc8ouESNI sqc5Uv PPPe`"Pu!ۖnA$DvHBc' gtPZ!#8j{1%fEze ! ` @gkHI;s2Ӂ +O5fȳ"⃠u{6@k {wҥ9@r"c=ARrg oyԌhr+]rἏ3/o(0$EQ|ɧ0Ӎn|G{Rz!jOρmz_*һH `<@p!Æ HA H`hH A@%/8".]ߜPSRA1PBG\ah rѨtPM2"&+VB5MHt,ٲfTV-m%b`cmqF/%Ș1=1b7Gne_ 2pbA <q G6}j$rΜ( 1gX@@x$N 5DICL4^@,lB֮ 6. -zI5+]A#"e$Ђ @CEe)T(6PPr7WxV8խw<֓@N{rە@h'0tWŒX H+& )G}0uxW x)yRF!e l0@(e Ġ91u n6PKl!y.d!1`>,t *he =#|֐ӑ:Sn&gw tSxk @p|E<`ޙ8 l xAmQv4 P)p : C fbNaj8,ft0^%BIe jd"uAd9A;a&`'H"Sr`Q'8&%`(M1Bp6Ar|c >؈0=3r>t iNgaeIU࢐ Vpw#}<2(B3w!c#(/1RL<XCO#~,m@ `a*ց _U[F)JPG:Ka. ]LܠagP %#h|)"d @>p1$ 5"&FtIFy(a!lG焮KzNC`%t &~ɫ==I]w,$;!pwBdІ"x}A\ "R$hDTya"Jط ۋl Iz0s2#.}3Z[HD.N=rTc `Z>n0ǏfJT(ȧ,)[cYKtE*+ D_&IJ+O&dg0 Y؏T:w1ԜJe1 ̪ x ՟8/PPdi; * f(,"u `$HSYi6~nDDڏp(.Ƃ(9'n$3O\Fxyn!yS бQ4_(54fآLր3~"b xy&2HBH:K6H5 k#3H]h5$(ʐ@"4 HÀ0 |B!+]_Ee#UD̶r("M+,u!b3TJِPV eP hc6ehvȪȘ72XC# Gt! eQCk"10 XEW0ox꺯'] @xarK7&}{?A9A{)]գ|3Y0h̟|k0%I {.}dK+|'8o{+PTR'蝃l = p2#G1ƺBPU_}|$ )iHc)ܼp׮pYlj$D' 'd6ǜ1z|Ih]W#K$jJ,[,RƄ^JsCѳc3 L  YmGl1dB$z\Y*u^RJIƄA0(hIH %IG&O4H#FW\ݗޙuTIv;"Ça,WL7Uqh2J` 힆!"+j]MB? G5/YR{MKa9W @A͊}QiT, `8<86%n"&%'.O6$PF~jWppN#lvMGP]|H'#x(<;EA$p!ЍU j? w+1Sr)U@1+'%}_6RƿKm'ƍ[Rș8C(FZPg$IfB aaw5&1"Y 4xiQg~WtGrfT2{gFc*E'7VWҕhmp|@Z0I2VvP?hA=bNA~zeGX0_urN=wF1%/(jm]5&ml2!]0E>Mna!uw2IH=l !V8ZBQagK~52$SdXl)>;[$q7@޲1@&> qV>wVzS)z1*3A5]ؑoXȁw9a7h,>.v8mKp0&"WCyDE!a{>%KZLb1r(&f0*0\b/Q%q yoq㗅>T\pT`(GSvpG`=24Kn1d"Gܖ\Q9"jp|"p*\YR#Ay DŽXJ)ZFf9D($SbdEDp9tFVЇMc'eFA[Iie!`au`e9QȗxqY H Svp!xhzw[1>W;B9斗T9R)ƍR/i^GFW)oA v5T$JhqiHE7Iuaљmo'fDDyADS+y` hS|QEHRe6-C{:wEq)"\>Ke` a#[/tX f^_vx0Ȥc?Y"Tt30F=X%Os蠖T5 I&-2`V*F=/4]Ag )[y u: AP֤B̑x+^fj܁w Z?|ACF55E1 3Oa |n|2`Y ҦsXX V1X)qYlT4cHB5rrUVy1!oxzg |1t) NiImЦ3&*m$_5M).)AArS`ܚRd ѰDEOvA fx2$w&$0Q~dj '(fe`UND[B%r3)`z+[dq_a@!4r90V=E ;r(*!iEm1;{U' ZjA6 l| 5 # pePdEVt)VKQQ%(d0dtj!֟ ~a8K=(I,i0i 8$cj ` Kٰ дXauW;Jrq-?`$7"nf1q>#Ñx S[Vor] b.0{. cl @wZ^a ӫO@` v`Bh7>cUԒG҆X[)B)AFjPĞys\b1|Cje,I91 jeaA u ` `D± M{eH{qTDA]U#NfĠ#rAħQI|M?qVںYL1p VAKԀ@  E 4AV{,f?|7Ipr,KE<ͩz2\1ɬ6V iŨ 24\-*,E f4+ gܤ@ Q.ۆcqX4CsM$ O,m i$h֠p@14 " ٫* Z +=$n X@԰2 0"66fUF`%wϬ݌ 1Fᔮ^ .>BY nꥮv 2 p $@0Z@!g0W\P-4rUf29>lNj]$tT袬,. Ұz`?7@ q{ @ C0r @ 1Q4>}!p)-NEؾн$^鋁- `S?: K*^2d C  qQN%*_bvPSuYBEq$]t?QFx!SP qS>.^AApF @Q/C0s !_@-ڈ)!Q];W6@[@QNXb ŐD]dQF=j0G%=D#,Y3I*ZK.VP :q%d/jϾ}#: @@+W搽CJ}z]xT&+Zʔ"mF1ilmM5%)nK 9>K&*Μe~Zh54 u>5((.JܺuPR]@%̫sɂ,˰WҝΉ2'nLaCjk\L0>*s~p)@<0"-V`([tm7* q|Rҧu>:#.2;?K#6 ̰SF%aF$ф!E:RRFHR#9L4r1,m7| 4Р(8Cbv(Z1] dΡ4+gPN2ґ/JHRKT!]Җ!]R2pcY#?R Hrдf%7Jp`!nB#Q2xUtinA5 t‰vHOY/m'I^~/ oJH{t*-!^J=rHгd5Trd$RH-.%.hb F2G4 J!DG[Є"6b!Y13 \o#`B3o"awwC(i$IĎ ެ2JRZ{9,WV0#vrǥqr 9Lb$CСs_R| u*B b@8@}$JH]cdDhdC#>Wz$lGZTIbs!Dr]%o<,Y}8:A E G,eHI/td7zhG:8jpJȨpKH!)Miz,-ZOJWE:=gU'2ZP's~ղUa M$3<a`x4g\X )gh"x.tlIkw\ǨHLX]U&rUhF*'%g`WD/]@⊍Zf}"2P&LwV0}ioꑝV#%Ghs,N^ o5hSѠc¼V-X |K^^A<̲3F,b %mw \ѫCmï Q`W7:V*\ُU%138"0c1Vݎ` [xxEl5z{DAg{܄4A)B\[PVeXd LcϒId  z#ZJ3  [3e AB ܴA -~߰Y ;d'_@f(F}Dqgl0޾:) 1C:IpYuΫM8_AXw:NI2{?;#Fp<+s&h%"93l!]!шNĂo-e繻^,14 tRMey:\1qR#އdvr1R8 FmpG#dĹ,p98 ɆAba$cÕCK؈Б&j# .( 381̘y.{h&I88Zd @ \9.L @*<[ 6_=a#3_aѸsIHۈ )X|hKX4%o2ݚ,zS9-)8-4̈IƝC=@ۙpˈzo&8#hN$%eЂ>ɰC9)4&C( c-XC4 q4*(U+8\ĘA JA_53E4kD?D9NܑЁ$!pVH8QXIa|@)T7V9( IF`9`eP [()fL)A8ȋ&M P$@dT#Ђ,|5 :%[0Y5?[Gj0X @˷~xH($) x%(ȌZr c6 HЄc?&|i" 8R1ۈ 7oM\?JK̷590 @0289 QPN  KL+O#Ȩ!/Ӂ!$Т# UʭuӅ2&V8>E1 uP-2 @ ?J8 2`Qj?ñxQdtKHL4 u-U B@T˽63#5ÂGGHT]$V, ;ɈC );}4w+;*T2UL1dF CcTQ?m@J09Ԉf ؋1NQWEGv:2K=%]R!8+pOKT\'#HR8 OT44V@9*EC>`Cq% &)܈H+ :[-B'*1NʈU"Ʊ@TQ9LYmK%YAD|~MY5&Mʈ1qO\TMs]Q5Bi>xb%M 1T54"d>@G NU HEM'i!!| tA.#V|=c-$̹.m @SYuQ)kkP[i b)EbQ Ʉ@p @..FÓ M OyH؍d- NO؍DXa|D&U I#9z: D)0gSH:fP @ @6AB !LL]X{١:V*l`c.,a2a)"=g90ݚHJ7܈Gvt耎US148ZPdL^e=Fȁ\$8+`#iq L[oR`草IZoZj~!Nۭ'U|OhytmG[=RԈFk'GRPOֈA1b1`$,<7IP P=3Pc)?9(f R2Sm+pqf8ᩦ&=u^j݈S@S&a;VkaVÕ|HǕnKhyB!ea=eS@#0.o.0.Ȃ)hd) +'Pɮ"pMp(mx#pB!Z o6ᔈm Jd8}葬DXcqtKnfz[Kv'4b@eh5%a3Qi.%H )P%h8= 0,х>8FPN(c,SӅ;8s>pK^xuGp qʈIhJNǼ uNbX9Yq0č豢hB.A7)`_T2*Ѣ#1m u¸!Ù^_+`@#7uFw'M^kJz'*<dW ?8mR' |2VD R'=_nzzw Bg`_O#,,D#Yl' 㵘V: b8!&prFi,:91 QP dX:7C2Hx{GhY"5aS=܈,of,h%tff&PjNp(\e@IajU4p! ቇ%jtx A>Y#!Sl KMr(eG;(iӦ'OuaVdiY9ԂӡTT: [pĖ2[pЎ+؎l;0n[:dy5 'OMrš@0 O:5, ntJcߎŠX6jt꤉-[bZ6e|qb%-$ `X!CF9"!o[ZaO?)_^2ۀmoƊԥY(5m]zŅWW}wUjJ6\EFYLCfቅ,c+ 7 *H҈VdU hљg}C  І.|3#5JvHCt/PṔDy4pi\G5q0Dwt=K*!C]5_TFFGE5T`9C3M}W%eYx^Z-e]j9i)Oipq%'|.HGj:AsGJh"Ch1>K'PqM4\ a.WEu+]4po"PFх_"'(Q|Oڙ{<ቔUqVWŠF;UR, Cn:)Sh+ 3D\t&~)p44+#"7,4s!I,p &/Ѐ E1ѷV$QFəݜc 'IƝ wGXrxoӛZXx;_JɔTenYyJ D`-_[cC>dJ 7;2{F܊4ZϽʳ`dĐPѳgŊ)4mpqmQYĭVK6t'<й&Ϳ8$YQ&'A C'! בi_b\( @AR(r\*ԽuO0KB67"юJ;d@r F#Fpp,Ȥ39r4Af5+Ih5AVa֪|yθ*(K{J0im(4`7 8f c*j4r hA&M1ȱrdGyAs6sHpպJ46n.ӿ `< OiˁAr&!^ӛCA$rDI"p)-5X$uKnaQaK#8_p$bu!oPrO]\?2$HˊQOYoII!@D +Db~bZі*uI,U 46v)᧻t3zalv Xf`MXH ԞL#>B mt#8'8(`Iky$Xi؎XfG? LMl=l &0X#`@& n,+'IVP-1 *ìuOPc.S<$ `g8rQEY8`@s ,$1^eF lt%@+asDOl`ܥ$gݯF:`$1`rpqZbѨD!VhWUӞ~bκQ mHe2OAZq9X46>u\Cr@`; zEbSeW  !̒21p<o(^g'"EY(7̕u`!F$[4.)4Wp#xȦrKR ^)]\3 LFc[EZ/Ws+[I[(,@fݒufp0 =5-O!$ #H Fx;z3O`EsQ7J1^}!% "u`>dK[޿kgXJ{r`$= $p/;Zxi=qF\cPsEJP^R1ju$Є6+F _\ A @ НF-nO>xT0CX暱Ѕ&\bd.W1( x?贑sNCזޱС1Nd5ԝ4V`'e CB(@pZVDDRNؚC+T%GPqTUDRL^$XEJXAFAv<A0tJD'C%eM<=(bNڅ&H/E6Tj).BUnH̄/EtdFN]ތ}QMN h $(  `th d' ܂6Caz=z}&XdG^ϐz: (j@vQ+5Ѐ((TOv&)vthiUKfݬ&9%!$)J婜@ iHe`dUz ZYױ.Dȴ.}@w8@ h% ZCF)W:|f\#hB,dÌ:~:ZN!5ad@ÀUtɢ$%CĨF<"̈́R ).ҝq-F[!l~L!ȴX,Cv$ F@A8C-C (>ᆴruP +5Xf1XIٹXKœ@!Jfxd-nwT*o9-I2 5@|w3Ycy19zJ%Dq!TDd 7cĸUobwԊi*@( XSo mRU ˉ]hZjAv&Ce7lnZ=ؤ.)@d`q؟ƥPlC'Vğ45@NI,ORѕ&~$F dA 4Q@ |ˆ<Y5J$vk:a6>,Z:BNʃ lqKdUGhlǢBP5JnUGmg80Y(M5hLwq}1mD@rZ,^IF L T@p'0:89J6+a/v2C'3 (Ab 8/J:(7CtE{0E4jXB($Q U`6,ƥIH'.8'  `n H r]8z[;yj AѴ S%9z2p1@B#Pt۾j>Üu}0:SD>D}HCFCtǝ"]0Q$ęl8dRT\zG*J!YPƔ'}:vGlA2JowDadNB)Ԇ|B /9CNx:><`Aq2>><7 L'tHziKEz@|ċN܄% zA*DMPRʚUȁiN`ŤoNN{!L Mw)#ʬXD{{wB gq$'t EMaH4ZiFZŭW ~h@ )[pٲSXNŇ1'ead)yJ+ UWFV}+O"gy_ƒ`2, TdkA^p(̙ܤDVVja `I-73AQ)(JSU 2-ȣ kWZ=ANN܊!4APВ2i"28~0D,@8 2&2+h3mt0h; utY""'B .2'3ȒCL2xN6p |04[baEFj9&qщ‡ $ $ ge=*̳ ;@$ %B\qn+„̧~4YKL1 *z> VMêo"lɦ+J5l Kt*Ce 2 $ B,ȣ Uc``UV`EZ3"t֙#ǫn<2?'2mDsVl*YZ)h8 1λ תMX6m8+ÙRb҄eⲥcr{"o3,rR$ H ĢJA扨Y"H ch3oJ2 ".-r2=[bV$s'00_.*Š|h 6 1>h* 7HlQV%ġ ryÎxLs_c"+A {@AApTqA߸urAvB;rȣ xr{eD Sȑ `^F$mkiC$ Z;ƒՏo:{~r7@NQ6o*ٗs<_aC![0i!BjTBd!,dU>0'O:Hb؈N0fArx2j`!njȑ~JA6zī FA@ΐH{07 q"c?4Ȓ >iSGo( JP&ο=_MAOV6dv4L݊|fd FSGSQm SCA t$V3##>\BY bVدMh xM^i[SĒS@:6k`󼮕mI0Hj@sl 0 >Ťn#".p @ôqjH@6h"+.#vhVD3ЁԯAtaAC @0 @&BCHq [VBJ `Cn()L9OLBH_@^f[,G@* %2 3bt "ZAC..t@A |&20/Md zA4#!v g8bgAa BA{X 2.$I @$"ҢŒpJ |MЫ'Ϭ~o /̭Ю9J2=J<* $/ b?d#H`C^0N!/HFX"bq#XqF`z ."!w h"t@ WDl ^h " DM$ƩC@ +|˦k`"[}~`'ώ|`;* n܌NJ,m`jmh)+"q r`J6&Jr  OfR""EpG1; amǰoLe2 %ig"d #l6˒2:֧&ѥj¼]" Ƞ |f*2 G$B,  $!в2np&8@.  0Ah!3vT1q6Uo2"!\`J2@t`h •4L}@ B fۮʬ#R]X(b<^{I (HM켎2 [0I@,BpS:O!E&$t`@4 j \ S" vDb@B!;afFA)Bfaz. P3tf`@{d,HT"+o4_z1KF/;g(LH: ֯N xծvW=/5q$*B9 ? q }_ F "E6d N( B<"vO2 ɲuPhrK!| Xz\K2>JB44`$t0{ 5&d29YfӍ7]^rt()qӣBϰn58(x6y&> }R T=MLA\` bbN F $c!R Z "^ 0!E^3@` yo^6Cp'0DI( ڢ"@& q8hgȇ&c ܈,MC;ܦ(Ҥm5#e *݃*  ,/fV,D-ˬMP"Z¤jQ6  \qjJY n^P5hDtHu2#"y~Ut`p$CCau  @(S5[*.3BS c)@FE(2@_%m w+ L D])0oG"$#ش @sIf \yѕ lC umD^O-D0f-E8 :0$!̀B`$Jg\B(n@<@ B{0BXG"l (O Ȋ,)mmR%(sIE)F) j2y`7k#6 jL%B(f $R ȕisx &Մ2nVN!;0bj.`M|t  4a2 to }3LA4Ջ1 t4X La ' X Jq J(ڮ<3"@'ƏLggˤ]6@# leð>2H19yD $[wJb` P k `6bg7*㴼yy@MNָ,,E^Nxp%|@@ ֵ(4!,2.`6#X!)%.3 1 v %`P6vHD{wZ6PVwX*e7@ )b@$Ԡ)ZWFz!"iw Jp5d v{ٝAT{XY>( ~nAvQZM"|"V1$`tU mfP|mjZڼ) "dXP (P6@zSS;ik !4:f R Rd1~H|QY@)et`<7כ*f #hsىJʫM|NH;2H. bWY1 ?nxUj:kq@`K  TBᜮa?[l_X rk=C)B]$x03=,I =%SX +5~{?%a#Ec.n JI$OBG9o#f`XW^ ɡn4ZE!ܹq@Cn`e; =#|+c[>[Z('rClcގ6܌Ec2N2~+%"^`" ~ h`K‡,j̙СF6Ԥ+Vl@.ǐ$KX# '2|r)da 79{>ON1,&t F{4_`Gv/ `.A dQ/GNohgsI-ptJ2&1Ā@X`Qlq1مdr'04T|2G_H4,f A\Óa2`%I(p!%@AaOtÊdGGPǚ,#1HF.`D4!k䒀+&x0^(BHo> s-NAʃ m@Iƚ[!HCH ΒBR.X "<`a*eƘ)-aKd0]$!Is: !Dɮc H>LIV8J9ii> pH\h, *;F;\x: 2 rЈ8W 5ATj<(!ـ 8y}Ӫ8BQa+m0z$FIL*iRg6&1}`25% \IDt&cAC#}jꑥb;L%Y2 V"r%HXR`z7# O;;3tщ䀐8 HA怊:$: T\m 堇f l@BPT($,F ؀ݛܴ4n/jHw XRcS`D2J \7$=`p4pδ@յJvt2dI"DX~#&H(P ? 2! ЉЅ@@@3 $7 ,(Y)#K00BQaan߂"g* fښI6HZ $i [w&rC!G4e\w"Hv@5xYi1"\-Q P$ hF"{#7t+@Z8~A h!$1k>a$ tuH򠪮dy{1s&;^/[Ǧx# ;e\N3 ]T .@P(8”1BZL ⺺cnK/=w#o[p*Q)D@~ A#Ё ,<1s|d:{(`#@A~:f 6d ƈBb 'vZ`ϗ.;D1DK%7i)ɀQ=pnU 0љ[!ɾ3`7w5MwF\o`K_#YDWyy q P(p z:tVCOq z>S + # @8mB6@:FZit<|2=}Ihb.5du4}\r uu&f gH/$@ly~G`c1f2$11E]%4xNf*vF4uMv+`fE$o"dEFgyՁDFD{"b$wr{4{_@sy<2+f>|!9&&Y@$1ZawDd` 9#}"S1!'sFfjq c~o&|G31V&C{E4k$1:3f$\ÀM6^σgxpበ84  ?VrW@_> 3-:">3 hCHDgPeM$#!8UdlMdx0f3!"l{@E=!yUqCW30'7i532<B58HV4b`3UjGpe>@SaP>r4jd`(>*?3* 5A@QmEY7 Aov.O …gn~qюf!*>u#AT mVv:80:YsVd `17F SD#v;Sp0=dqP¢!),IOprq@g!hS@ "3. h319ȗ|.Vd7$ ED@%lI~C ppjx#iM\jPXYf !>0:81'poےV-|H 4oq"bg,&pjGd4G?G!X{a@a9kU>:I-2œN!$m 9JnB. 43-J\Dd$2+cM%wA1R Tz007TdX2ѭ\b*Κ7 f1BcKŧeA MtAlNo `Y37>s`vrjp !=-%#T22sZ:J9Nk5kZ5$ ]A")hv0 3A4?43V;{$Vi]W sȕD%I&g=uu{ *i"6o@C ;Yz;k(Gae:p,,P.㱔27 'aq 0sRshZI'! verT(F3NUfeUi{bC::0W0eSa/?6*,Sbsr%pVй.# 3w٪ 7Y<&$&uJ6JV)2lênҬd40kUz]KI K!<#Ի! "U AsE[+,{?! ?Hz9k{q6C }2z%e }.Yu%IpDl R0ڂ0uFr+pE`=&M)x!1aY K.  j#"ieʂ5FΣoCxo,g?cn|R?dPRvd3|+ʢ/gL`.  ::'I$r›n,qd)ɼ!)Tdc JZ-` SpÁw@H]u)2-I% @"`B`[!"EP,yг,+:USvdG裿Cxh\)D lȮJ ڞI㧳sb%Zw@deJ:c%c=J輲l\VEwaӟ!p[u& `e/"hԭPMK6U-,\OWYČՂ (0P(c֬*SI6Zc:@$h0@ڙ!}"HذY@g CZ@UNC\*SLFg +t$Ofc*f0R@E'xBd@Hg@Tw}}f߾>z'5{rF hQĉZ(' ᤼ !&Z(L,Db㱿H=k IfB $#&NxCxBrx&3=+s)*e"i@:=rK( 3+;֢ @ ,p`>RH & 1IHKn LX\ZiQFM)¡)0 HB)"P= +D:8 %E*R,R;I S>D@ L[ R Ўe u!*6daYpVi|D*Ƞ^_36"b7R H8"|pИе̘MK ,Xk󮻴CMyE`.>r*k9Nax3&ElҪϓL &mT-Y)E@ZL–_`i4q B$}$a"0P3Ww]l'3Ľt9i;ݎw3驵c7&^-a2DIb)&S'& jb1`aO@g@(yLL!e@B ;ho:; \N@0V (@ ? <)"Sd 'H 8@}LM$P d8kV^>}P' SH=m&$G8*'"MR?P@$% ř@@; hIEJ&UI rdQ 1Њ1N Yb3Xpe3.Ax% PP"qNt"L%>IT"#&@,}4J Ѥ(P|W86! *m&"=jL!K譓H&9IU&))}&I:𙓀0-P hѡR&Hr=11L+Zg2B]t%]1k‚h  <Ь %}Ri 98ġjp&X ֊I&@Xj;r?8{z?4Qtͺ(S@0P AZXT \* CP8# V|6c )#`,h4 PN%Dif-)̥I']hGME8THHڨ&JSGf`W<t^H+%,X{JQA#oi#T (bh(Q@T@>0\AgqړV0#zm,zt'Y&:Y) *%&)Va^xg9HU!6 $ X($*bD.\9r[,mae.Mg6S)F#,Yc2I4EA@}0U2o j)Z|K7xd_pD5!D!$-g c> 01F@ #VKviLG8& kV$U>Im5P[C2ysc= \#o YN+Z| {}tWȔ 3u<PJA`sTa2Ie*{TtW\Tj"OU*A)p_n^Y<]43|$Ȅ"ptD ؔN?4 #F36I [ !& {)*ih :"嫔z$J4ƞ#JnLUC 8T4w HP;.鈻Q4kV@^Kn$XHDhO~57 >O2 J|6K߇j~[$ )>L嘿hR9ZC9 5T2]֫ R[)Sڱi$AIL ;Z6Hq) 鸣iӨӃ>Ti0` lI'172r3:#0#/K)Ъa$7Q+j7<@0ũU; 1ʎ S9d+7#*4<H@ 1PcƐċ2ȵyX09E I"d\apŘ # 0HB< Vp82 Pk*{ XpG%`r6c+46x>10(1Iȁh$0@73xѯQs$x(9|TA3 "M!3kҸjp;",B Ȍ TxOD$<129![:C8J/D(XȆ `'L'.,+; RKʣDJ,7GKCLBjr"5: K5P%С b٣P'6F͓(h $䨍 ψR'K K Sx<>Ka:SIDSkXT 0X3;3+M穉-y C#PhAPhJ"`'PpkC RDR388";`$ h ˈD=L|RǨpҫA:Ƚx44OO̐# Fn+E8T6h68*2«͉G0H\" &*љDC:P? 50Fɯ/E4*#%5POeA pPS5L2%,(6-T.K9S}:|@/X"(>Єe@ X ,W(P1c+J*ImܒȂl l쉞83Sx-&hj$x1,4P0< mG!U>yӁTI;lY{Rb=4UkOx$[,20UDdmxșxJNXjᛴVp͚P c3#`WqpW`G kp)x;{ۣDBHaa}ꈁM-ד I.̽K[|I$RUK1I!@ =YϦۥ،bg8 pQki- :M]3YZǘY00Si7QKSm qQC{G uW׻RK܍ XJJdp`Ӱ]e-(z(%I/3[rFҌ WhB] 3{{ 0`)xJ8'0w܋ᦷے\'"2n;ga (6OD01 0 xAŭifә! OZIg[ݢܮc$:< bC>mڙ`4 g/Ap )' L1uwh"s;B,GHkРc>i)N_&D `GTo0a<#S`cf3܉)UKU xV qZ'^m<0?Cޠ0}\{剅ʙ7ш~rIZǦQQh̓) r1A3N`HfX٣čAݙP,OP L2yT m>p !+9d@;6["Mޠ@0θa{Yk`e@V>Lb0 Cd3ǒʓ.G58Gݩ BJÑ! DI!YTNFC0vNp Wx njs&8>XoYu4J1;]y K㞘/ENcӨ?h>!f)@4hx)":f҅oI\L(ꓰarKh YrIL}u gl⋪+wcqY@"X %4 8t(`-.l hU:r~f])6hhU^%m-hFZ=shw:)93 ";9UdX2nF 5/]q$fT4I_#*x `$X?ž 2g.u7E? Oԙv?: FUClݭpXejcS:ۋT? ۷ xޮkPTwʻ XpNй@ LacFЅNcxxuhӡu!3U)9 7 u Zw5R{^XyVo :S"x,ʧf^XGUQJ#촏Dƣl9 >=Sy ݷ1ϙm ykW 6SjV$$[] 틗f.eIl}g+hN+.S p`@  E`BB(>QC!!G0DÎ$Ir,0$.()rRFvxB 8t)ӎIRmD)3p'4\`P`LkHM2f.I+P%"n׆Mz%=1ݎ#]5b]E=氤1m&Չ@(24baF#𺝵2 hgR;N 9{ ]4e)gTZ |%Mz܁$)%)P|::!5fYd8 }Js d@8 9xQlpRh@d,` m %Jx)Os*>B-L[M4S,:c7fRwH!;KP.)&JA1r)Q#;bY4!]T!Iav bLjЋt((&D0`d*dD4:AhBPpfl%Π|ӣtVBMr쓟l""J.aU%I$駀D fAB|pb2KhN@MFFAI {>͍<ZL*ݰ5fe <9p@RɚS8A h|+:g S *$B*(M/+r4QvHjU`p\ 1(HLaHd'*U4o>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?2^SvDgɈ^OM2Ip+p/ p0ئoNYz6nN?G@%8瞋MI8?gPGaM9n?,`> 7"(q@ՒFldz}=)~F!BIm V? ksZЈh1D:?ԅGRGsHO')\ t"eW ҳP@,od `4h;InL$M8\':|%Jdbfa0Afsю9Ǧh)yleH$rIy$Ą+ v=Ո❃D_1FaI+\)5 n`&e_Q:Q)Vs ]Ƿ"4- Dˏ7nj)2gO.^/,s!ݟxt4ȸ#Z)e9=*%nz(/ܵt)4̗J'5FH!rOӷҮK#= oBu0GYDuw(]^2*0CqU.PPvz+ɦz0Z=ͥ @*9'X- nYA vlNO;/u_~Y[W ܝݩ[ҢX,B$rc9劻nfTI ԫm  p19y%}dBfq„Zr㝉R&LJ de%~ ?G'crMa4rv7obybma$TciXJɴVC);rfg1G7HTn}A}?ʞgmJg=YQ+22u:2'ۦ-WPzvO-6((Y6s5,\(-V(N_ҫE Ȝ1 G)Y" ];aKg'$]0L0W<50,8"YR:z45Zg!BNA8jⴲ(,Xn2O8A7ǷbOnaF Ec(RX?$9mOOh]m&nʐ݇Q+JCգ>hz@Iio=7KM!pGƛyu%;Q_jo!S0]3cWܦߙYq'ӯҝ&YI"6~rk%/c9U׊JfqGָc48^VXh7Ԯ}AnJ?m̷3䎬NsxBY"N1sұIlz1審$']ԡsm<4Kk[j+K2;]7\vA<TQpqԯІًCZwkjSmw' 'm5qx;9jx>Ёhl} S7.uvC9 f9Ҷmf0aW$`oW5cv~#F" Hd\ϊضwM{;ոlE^c+w2YFu,3ۜU;r:bylQYvQ #['I,\<+>퟈,.:iјk[+ukYGn@@m }Q[!ÿwYzu-X+ndyI βg"`Hk80>(yYOR6Lm2BFu8灚4 x. -8\O,B[c9hz~4)+DyxSp< 3]8Rpr+{*VV巾 s.I??2}COo42! skNq㊭%N,3k.0kTxuM[k۬Z,8d}*ƀݓ8nMz[`nI,N\΍g%2*Y9 ZV4`$\}jm6 b.9LdcO&OݡF&HcZ:eΟ 0LdDpꎇ 4'n lĉAU3W ާk-GZTnkA!t昑*n5$g&UmAH^+0T=Q 9}RB=d*-G29bs]T)]"i/sƘ2)s#lтq`L[njoo&dMjw@r0qfֺe=)Hȁ76t gbDnL\GbIl'6֗P9ӓB?+$FLdOb=UKS*N7>5T`VwsҕMyXRzS14LqȤH;dbQݔ4h# +?d}kRYjs*wSLĖPa$0.@UVg0 Tmf(=tVguLqYzo Z0)Xn!՘@X/}AIV獎oaR/)dSbVhqYEb?&dq^zd3R$0F^MuBvxk=ŭ==ZɛhL֬\P5}FƞE'*^fi޿%*F>Ju$`ʹA4+"B)zpG)eGd8/lʌZѐҳ[P`0|AȩV@>l{W<ڽ;ĘVfV68+VGP1z֬'eb#}4yXωnX ƛ sfyNjۡ;k9|)CkPlSLdRUCxX9]ۺ渟M9 =VoA*s-%PDT*EݣP^{&ԗMG]kc͛ ]{: 4=i#ѭy⦑D85T:B\mY$L\*s޺[7nĎsWUhZ*{!&RG+Yy`\ ޤqS/ Dx^ݏrdbau +0ILՕ!'NVN8Ϧ(Оig\"=I.W"t7ri@ +T3pS'l)ӊcOP?( V+MRNcbqb30Fy"bT;ڐ46/ \%`>h_SN[]ۅ;C?*r=ʯۜp}!q zsIHJy>0WS ~~LU]g#wPnj=|jP1"gۼdZǽSg%63w71+&G TmtO CF8+r<<<ˆ"bVuǣ(L|8\1J9 l UI?vGc#oB'ԆYHC\sNa r{N&H uTNQظFUȻo=3ږMb,*&fwr{Sd]-֞ ӞzHf!Mams^.FED+#).=~<1"|0?q $}sۊ@Ѹ9C'&sQ:@$icrPFg.cgut\0;RF ;\*cЏҐQE"Yxn1AOI=@sTVUl ײ|&q\[S2'7aUȐ1G )H(2Tp3qZn8q֞Y<`G9:#z&1mÞ2sV#sdg)J#O|iXh0RCqQX xJ/0t$qPF899hw*6j Nv0+@!e ѱTeTcÃR6N,IS."Dgd}j1ŀ^AlW2W)ܠ'bX!LinVʓ֪H 2NsOSեtC$OCYMaS֗hE93…g.󠾣 .*Έl9F9/qtTتL[TNp̊j7:ywpxˤo7p栺ťb) `n  ;eG4鋋жcߣnH3e~oM|>Fꖸ2i:UJ"څR4˶T6M".<\*gR7gjG1PS`H*#k8Fss3ga۶mطoJJJ܌\ 4W\q͛#G[n$UH UP".;7Dȭ͙O9ftmo ME}oo׾޽{5y-wOlf<é E% èի?EEEBFu xK:tkLen|8x L6 ~%=u׼>-k V>ʯԄ5kCB%ǨQR-Zr9dr쩨׼fH0ݺSw- oߎgy۷oOڗ/_n ݻwf`$2Oľ$Cy͓0DmJn$]& ȑ#x$ؽ{7Hl4*.9er<<\f.}TMrԜq8;RgN\K.ŲeH[$ʕ+QSSC¥mJ2Gj-:MR**3ltpٸ P.Xo&9U݆*Y{T`QeGƙېXMl[j [(Dp1,Y6l@[4Ŷm0sty\#?CR>.3 'mC gJ•W24tTTT`ҥx7b-[#%1dx=#cި{mht†h*Rs뻪i m29 Z+Llz۠m=:W2Lcc#֬Yŋ6eb? ^"'*>bS`+[it|qNcG*pզ)r!\:H$}_ƱcRJ-QSS]va̘1%dODbSڄw+5&cΤگp8ܮy)W6qH]ʕZ C~KWZpҗVQQ~ׯOKm͸馛L8M`qnDuhAeLJREsΑ ~T5G4×>pcC'uk*SqڊZTUU… hhh@cc#Z[[^p!''A.]еkWt ={DAA~K P9ήi+ %w3زe x $ܶmлworsRUUzR/ShJ Qf(FWtʘBܝx1}Я_? 2GƨQ0h FnnKC\dZgF%:-rpMF|eeeJ5MB.p}/6eYF[؆]I=ڝd{=vY|Xz5}]&4|lȐ!qc?~0!˘w< 35ڹsSO7M!?[>}a\ve)5rkllocҥ8tPR|1o(/_ˬ,u.YӜԀS]B9y)yLM8wQ 8x VZtlؼy3N@ ƭcK41Wʝ-.AнK=\qJO˓'O_/ӧOغu+؈o]t鰸Tu3QL .9*sUTwUU-[W_}5e[ ؿ?~_GSSSe;.7n pTaH+98H$2\܊P^^=z(KlId_Kťyĉ8԰*ʻNޙ_zE Q1\մ 2gڪ mܸ1m9?عsg`:5-j5|)2oD2E577c3 mܸJ¤"T|r>:݁qNݧ#2[!z&VO1UaElKq|rTVV"ZKK mۆ~ϟh\j%LY' ŴrBU]~]gTVI.VYY> M[YY|֭HGk _|:RՏOEL8[c}JN7W[[5Fcc#v܉<<+WԆpB_[{!2'[vvv913E, ڝ455u8NٳXj~2)޸}g`dkk8uΞ=#աSN#mP=.5pݣ>LRAsa ʪ%墉w^Ҷl a(++4͡,ϫӬnLU&$!5ŻWUFM[ȨϹkb[]]N>yMJשKչ k>+PU!$QʩjcNwp}Μ9E!*1h,t^v{S_]˄ rճi(ujTPWW煓hHTK3KVMbkhkk+/^G(,,$m\MO<lUq0|lu\[[ĸZft9qI{b P\J)pJT"";BΝ;P4Eyy9^|E<ц|#D7(f; T}:qɽ볲>wCU^!SPU:xCUr 'a} o*qN%EOSiO?J樐R9RԺu`%T%WFᣨMD=" "bSel^5E"444x'HКtRinE*)4M!SrT&DCNdQE4?2Y 8 IDAT!%v-'2'.kkkqIUK@|G!)PKGx)ܱvʹIvr~25k k.:tHK(ҥS,$U8}毕-YҥQ|Qnjh\uηn܌gϢ;QSS%ĞUdK]8t]֔XLD^\EˌkkV|RNda  |EaIPLK|NbVgH*<ss$_-D]:;/PʁND꼚6+.)Et5*VUUѣeTĥ!S tҔ#}H}Rk.,Nʜ91m{S lHg*"&rvInоJOE6;{Z:=*Wԥ.ӥId$Z[>/N0DR:FQ^.)ǵKQbgl}okF.\(Qn݌&U"Jr3^Jn mřdUUUСC[kk+Ο?:t-pID-28[J7qTܡ9r}C׮]#|ƌO=³)F̓T+ݘxDػwwh… (++ĉS nMBn.Jkݻ*{SC0ǏoPc8E:q.vs2؂- f&!\n+azDa8ƥssӡ9Vqh٥aSP̲6Q?~zN`޼ydƋʕR 's)r EDvd)LKZzsٯEWpΝñcǼCh(++K)\RO,Ɩ )fee;9kݺus-4u ]NޤsIǔqFpCT *!q}'N@(.`JKgGJnzR$S) k @޽#h]vwm2A) dS5} 8]~9sȪJE)&N4ݬ$hALakhh@yy9 ޸t;/Eےun<(Drr~Pw{'ٌ?<~?DYY&M'O7 DEu URe25-~= tg,򃛳MI&3xY]H$i [cc#*++S&g&R/2Mee!~^^ƍNAA~_k%g0cz6ugMnJ(G ldɜ*PaK9oMMMJ\ǶnTLŋRQ$ T]Rub mSN4iR>4=zwߍO+1rr`xdpCU pƦ0-njr)RЩS' nk%8U}TN3vLZ^^&Oݻ… t wy'{1Wx1SqŚŖӐm-i:K#Z&oܹG\D&m#SSS.TㆳiG6m֯_ߡKq7 IJ* {ވWXSF<LjXN*oe.YE u.UL%gRSPGӞ={oXlL6 ?8~ӟ"//OUCIU^L%jP= [iߏ}b3h~K6.ݞ32Ȟf1(UTL%L)D. 5\.,DN`O­ފv(>51%5{: 'I]3g/dz% qA0@sΜ-'T>s9&{18 ݺuM7݄ÇO)<+?q2B"!,$s:[~pW`ٲe^&ԩ~lNo!*ɏCv?˔ tMx뭷P\\z+~_VL+rU3nD4y&{VlqYw'o߾8}G -//ƥ/ RqMmmck}{NkفƏ~#%[a!mZ,=K{nª܆$Ih}f{:t(fϞ7|ӣֹsѩKY[C)},U8e}QV'K5M(k֭nFp |iyƎz?QXXxeUN' ,ۿ 88>g2qW{Y-??O9\{GR2 &yQ%UlJTHi;h ?H;'χӧ|At] 'J؆[ ÉR}*T>bS"QΔ~TUEtUH<ªܵkWL6 'O(!`)K-(L\^N*}"2}jNNn*9M@tNNϟ_׿.]ᡪg]԰Ϩ<_E 3(@Es-3:}3T&ʝԨQҗd[^0rȔĥ\h#QY_~X*Hv]X!_JD+_ 'į|+x'`KekI>DE',RIt$LUӏjGOJ A{Sٖi(j*W_}'eZ^^zC`*D8u҈c]ΥJ]۷/^444W^ٳgSnӏ1r ~9=K*n8pT:nͳ0%nƹ}7n8?#!R]}bԩ9dS\Ӊ:iMtAQ\ ҩ(I C={C IpUW?1_cƌ'×:PpIG5>uΪگ2rsƣa3{E7Umqٳ':| _Ȩ8TmꪫR::|7@@uؔUq18 Wr,> |x嗱o߾GW_}5.\y]b7^ խV%uXF ɽb /rq8x JJJc2J;N 8:^8FDDT-{_,5)t%Alѣ1n8塡UUUD" Qx㍸q]waȐ!i8=T73wTp"GveU1p\M GʒVޥpb s!IDb|DG(++ѣG3֩S'\s5/YMU\R5.Fu(ުL(1Cwd̄W\Ç㪫;#m۶ѣqb{iӦn7ߌÇ#;;H*IĹTk$!Nl٢BHǬ舦 )EU*f +CՎ>;i$,\gΜAQQG- >v%~R"FttuBM$j. ej]R*bݻwo|_Ō3i&lڴ ۷oR/++  )S0g,XǏoM8eYܪPPԁç(YS.SݙT)}y0ɢs{Ņ pȑM,{n ,H;\RxV#$q/p8sΡصk8'NL${QFa6mfΜcz Xx1}YvHgggcܹx'1}\c;dq:ҢUe1uސq>+sjǎþ}p̙3BMMMP @.]н{w1vX?}'9Pd GS:u0C){D;s:3*ն3UNg>sJeLeeexh":uCKχ1cGwqC:RvdE"+>9O< QQQA" @~~Y&S`xZzcǎaѢEx;9`<]f:&E0H2҇CH2nD5'0epP!-WE:p/T Oe$UHP sq2AB-X'uUN&Bv(Rs2+Xx1>IJwwׯ_R~$*)ިTRޱC<ذa3X{/.\aÆe4.ۿLA}mI,E\z˂A+}P/d CpDc৪)ru(*kqPp\<U'ޙ @^69knii]tRX"#3 .ߎv\Kn.#҄8;Q7l΋19q=]ݪ {7Rܸg稯mLL(n4 ̍ ɓXn|Ml޼555iI,;u{_ݻw(\^c˱'^-:[([[dw {tnԛpI:<g(mմ566bXv-V\;v㨓~?F}k1}tdggw8\Z +4~XԼ _3gRy!7jjjglܸ֭Cqq1.\sBaa!n&|_̙3S}\rlHӏ0Dlr60xhmi4lfLO6DK񀙭͆" Bqq1lق-[ԩSI-|>/~k0}t=>CRh449CsT2c\,Iݳ"C):߈EC&1&=ՙ0 ՙJ%mS׭ìer~ಱ8x >Slݺv… ҥ MYfa̙4iڞRK6y!qlaLumKhn$Za[ ݍ 0Ο?`߾}عs'݋ӧOǭf~0fL6 ӦMȑ#1|p۷]pI ɼupEd!m/5e1q_ĻI" [eLbǡPUUU8}4Μ93gΠGɓ'q9={d)1tP9#F@aa! ~ IG05z4+`0TVVCMM y@(((@~~>vnݺ[n(((@Ϟ=ѥK{QVd Ax5jx-Ԝ,$JDH[[[/7++ZCnn.rssХL¥'a&{OdJ&5$gk..ap8fk,ӌUɔuyáKqsr !! &@tkF-ݬW5]37s .m_l)tcٞKq<\'.ʆja$Eeo2Iwإ3.S 3J:]gT' va뛮*Ey^OtU#VHYM;7MMt7pscSasS3O9w%fH̹m;3N%VqKm#c}g2Z-$r^<\>xw'+Y<\."HQҡnNiDsՍ (^C}dFN4=SS8% 7ɪX2pa%LOHDsUu<\%.Y]:^${3w_z-Kq""#++K[Z*_9 S 9@"ҿ .ߨp֍M7p͇KU#&4!&\\R9Cn֬隨RϸˎKLL6d8p@xms![g1lt D`Tҷ*|\ UVOǠp6# Q׭\cam $cfU U\Ԫ=νtgZUQpɐU]^xN ђ]ܢ)=gENQdf!ƊrU6QJQ;Tρ7墤\D/p$ wEs;%ɴGR;e2y)RWl;8sw3.׀L]&ME@*yV׏ ".B 't]"QHf]?TɸJ*N9UI XJzUee~q6u$#qwC<\f&.})YDN<"[fFL5GNQbda(%G P9OΕ̠GwQT5LdTgMetTŪsdp!DYL>Sx$Ύ2pPQl(xNoWvDyyɈC3"%*ۥTsi'u*e E tZf3b۔4v%sTU-|{L=\dV%STPg(\ijKTCuh!M %lILl,өXTU9?^S8p0ks#[K_fN"Ie2 #ng2bj3E@^\2S՛\\FUslnq)vN M>Ue[uAv5.$הZ}"TDÄ{Lo\fE"`*wim2W[HF?2L>S^Z&yE&Nu۲QDx č+t+UmS&IԸ\+o利](_797<7qwPUDQsSBQMr.ܒU5W^UQ)Undw4lD-7Y.I!lt62:M.C2pVzkT^ZW|=Ixp^Y\3190s%ɸlx{Lm\f9]xkgoO%a&BB%bRΆ` n y{ζojR *!=Sl񂋉vef]´)peRI[Y9ljx5nKc/s.=8{D29TJn*N=-c Vna$oI^[$Ass3 Ν;#$]kaצ"޶Tj&ki+.\ Dp&D[$A}}=*++Q^^Fnn.FiӦaȑݻ7rssY*!kt0誘xa" "!''999IasNqe2Q26T!*)y(VFiPuuupjkkQQQSN---ԩAO>ٳ'w{k cm"$$.PRWEJe=E7/Sg8󡖲q1YۺGlkhhg}+W_Ƒ#GH5 =NK;TLXw4EKK q1|'ؼy3vڅӧO# ]^Ν1vX\0n8";;:Lה(\&/qOu4\&5$DZUe΃\qjS:u k׮ş'ڵ!C=tڕonL).)s è'|KGEEϾ}[nw܁S[n)'لY2QCd3Fhnnݻxbhjj2oʔ)/|޾#V:t/^~e9sUǏ<[n)k^KGsP~6$h~ ik׮/~ 8~GN&Y3/ a߾}^xAh'涊 |G6lwf^]; PSSp8|]2নgtles=~lgcnC8cpFի#  8b\V檃m< J“'O믿Ymo444ѣْ{&lm6/j B8wcTUUaРA={6.r#p hzRԥHWoF믿ܵ Ξ=^B0mxϺe,455ax7˶܌{aÆ]O/x  \&cǎ+-ZJرcv 3CURUVmf1zuA(Ylei{m&%VX<LK1u&⳴|A;ZZZϣw'܃ܽcm!_? `p8}'D(w]t9#pS! в2NS?P @h3j:/̖ڱ>~_ŅXq---P$WUK Q⦬ |I%:/{gzTű٫:^TTH=tR,455aƍxg/"/Ɩ-[.4ǥ{1iFbQ&@!SšM)L(>Z$M_eeeqrrr [\V1rs/uQP(3gΠ4!3ggEQQ Y1d .Us'.UpC/*jkkٷo,Ye@5YU [:w8ɤ75qN21S3rX*\P%-xp%%%xq^>~_L~dRm6|g(sWO5&u2)XM𥂓}ոmOcqw⛺L32Y79`0F$%E#zu8})pɹe´ǎCUU Ǐǚ5kP[[ p#\}m}\rLe򙫢۷/Ə 6$`={˗/ɓ1p@kx(ݘ3ܘ_l|>_{3UUU,q飨j[np!:wi;."QOU"᫢=4H<ˡC"7779T~tj Z^iazcZ+lV\{熟qI>L.9QLsuu5N8H$Dq(Eͥz%GT؈Ǐȑ#n(^2H5'K A!tk8 5,+p+WΝ;^O>=z6kHIPe3q+qDQt#GF0Ϝ9+WJ Iy/ '5^I$.ekݹ2o\g`566̙3O[\TvG&C(E/$5Ά{SSn݊>%%%B۷/&N뮻RIaM2<%_ WΟ?^x!% 0&LfFRe)'تT1*Rf6lfΜcǎ%hZ wy'z^DuQUt V?*8';Z^Lv/|># 3ΝC~~~Z2dV(!N՗Z]]W_}:oC AQQnL:$0N[Ǩޓ[QPTcڵسgOBm#Gİaä1g*fs*&QK\3f`ٲehnnN ,))~cǢGBEr,U;D/\2 ݓ"<++X___ʋ4@K._3%%84W$VFR6=?[nXWsx_۷o(^Mȱ lIZ(jlU0>VKX-_~|8f͚E^n-*ۢ3DOVcSdѣ1wܤsߵk>S455]&vKjvԡ0i( )MdiKJ]2 -xdʤFٿ"nO>O?$wR%"eN7hTݽn5]?sxА [n2e2PIfle*njYwT1*gc֬YwNdkcL$cpE}|W: %:&ZFxw 3`+.}2)1VDEy&ҽT\ZSSgy$gXt),Yr;NfBgۖ\,#2Q X ^:)СC1oD)񌶑drn^yZbŗx̚H*78iڼh4&lٲ%sԨQ;PXXȖ(f`83dԘ^zaΜ98qbfii)B.G٧n~SPdҔ8RB"sX:gR/? W_ѣGk Xf ?ZңܸQԁ@v8q"^z_"fΜ"u&ХSXnF,˼ ++ SNMDj*דz.euH)xP0t+R``.\ULAtl\EEEXnjkkrqiR9jnBjcw>m۶z~L07ѥK6)t*]~,S]2rÚ5k駟&h[ի+핮LNT]]L)m Hq6$? GѼk8vdx7@K4)8"cc6`~7n+[$g[ygϞ>wn݊aÆK. G?Dw46q飨KfSN܆LclڴɺtF8%ur_(WqrHwNK.?>nV6 V}YλO-3nW˪{]Bqٳ{BeWLE\;:cq|nK_nHq1o$nk׮VY&JuuDƮ*/G… krT(p&r\h%ݻ>W\qڤ2lقSN)S9Pee8U[5R=J3M8pHsÑ:޽{qFk %* ~ݛ0e߾}o|3fV{I,!0sL|[B^^^J4sS+7}Θ1^{mRlh+V]wݕC*Tǥ-aզMZl2`񄣂g[Ƈ~:֢C CC{V&Ç'`20hРK:Qgx}ú%%%ѣfJLlj$B+A2pHu4d6{G%rӂ կ~ PI6(7:w?͛G+6$+jC2 IDATz&wL`cǎŽ^ϰY5vӱ(S)4)++ ={ļyn:'{ٛR!4V?TP(dF^^pdҗHd.xׯ_$,! >CSSi]Eprq_UUŮ)m}]w݅1c&0 =#cZfΜs";;;ٳ8tljMKg& LɒKJVލAu>s &qCCN81cƐ4\(ÐI 'lEEE\˼<̚5 _cleq{!}2׶JzyaÆ صkWBVSSV^+>zur2H .}~nmm5SNM*¥O눥.v+:T`""vލ{]*=*pj^JQa*eftܹsq@߿?>ՋpZRnܦpqA9GwEg9++ gƬYD+^-{mX[Z3Tzq)pkk+Μ9`RTĥJe9 u%D}ʂkYOtk׮EYYYUp &[57 2nfΝ1w\̝;ŭSQR,dKlµǖ*,,Ĝ9s0rȄÇcϞ=BJٖPN&.UpT{ ξ`.&øV% @Rf*uR+Ȟy98ڵ+t֍}`T4MBAlxDS/yyy>}:Fpt64DgCCM\r`fee$>QMv[*#맾6mJ9@ QJ`opM)#MYǂ X%(!&&s, : :XȞS+ǏO9۞9_j`R JWR});/8|1b3֕Ŗ"E;gcH%~Dw؁#G$,|>ݛTQv:xI)&۹sg3++ }iwq[MRNRs00-ggph4Aaر򻚴p8^z `PYٹu>:.Ru_]6ٹIe\LUM*܍N:qD}Q3ԓ]vvNS#Z~a„ $ڂrum^)bpƎ!C` Uڵ }+Uu-pI{uU( 77:K$Lŧp':GȸYFܹI%ٸ˥IT0Sŝ:CnLZD3 OE,>wn`N4.IJ#"FMvV.qmT\ձ*ºtѣG0筶K.me,›,o/7y jMU\l4EMMkջKVS>/:=dD!9Nbhnnۍs"Ivγ g *MT%:FU.|j}8~?O0k,cv W^yYQ>CK.ӔPZS\Ly;/SLYi- [nE8&12B*.e۶mksiwE2p$>oB%-H+;(:OIUHEC)>TsѣG6go&ŃR)6R=}uP8\s+HE}oٳ,ߗLMaΧ.E{8k׮"Xdgg 퓦<KUǮPpB(:V|)clS%֫Tާl,;N\1/"&L&yyy3g&L2&PaBDU 2oy6 }ĉq=` 'mSeK~~#;p췵wFIILB .}"Dڒ5f>|IMV X#K0L{LSR,JGj~ʔ)Xd F8 p= .dV}J.uN*J;O&!o= 6,g}sTp6lr]d2p^RfDsT9ߵkWғn|!22O$z(JSD *+`ޮ+{]Wݻ(kW`tBBd&}y9gLWsyO|,)DW]&]ϪH{QWW bϳf5sL46;`9r$~3C=_p|yixiSY&nں):k5Ӊ%K/1cloo5yk]՚#Ü>}gΜLyH¥1ؤb(zjӧq&]8yCҀx'qwcӦMXt) ٌ''ĬYft:ҴYmYBV@ oYgBB}Q=_sNv iԕ2H%aʕΟVNN\JO+z.IlGDO0xZC>XQ1I'e(_x;w.|>#999 mzٜ"ZPeX$:fS pRp/'@^}`Ŋ Kd!C=$II…, #$֭ju 4\/\EhuPɓ'{Qiu-ˤH3 MJfa2(`2nXmIk~t,\Dix){.Y?o$^ǐ!C}nkZ.)],OД0W$o8pp8m6MktcK= 9Qy+8^EEE:ѾIC"֜<jԇTBo6@"tӞ.t\Q:c͛;A-ao駟b̙ѤkEbb"^|E [rhB;XYMx*vE:.%IBKK .](=R'" za^"4OIگ*R*9XOVv,"Z'TƬf3fϞOpcHNN鐑{ӧOGYNH9̢ފYKǃbctttE[F%9E<^#jʊɛγ^LQ?~p:X,1&pbK0՜ ʷVH" PKV#pi\yJiHc.&I#!ɁEEEץl".nFmIDٸZ_,_%cӠ;HIV~HB:;;Ǚc4+h< "*NC[[jcW r"U!\y%rbڈ.뢦5Jũ1Srjj Amm-a٥lFZZӑ}Frr2f3 ٌ3Y_Ip8t:r I C`<pHZkV>9998p rrrзo_ 4GUFCj8!@$:q())9Ze"F^/+_Gy-EܹsQa9s^H<>,p''ўME佞c%wfCaa!vڅ͛7Pr_UUUwZZ郔OBBv;|>|>, 쇸83W_}5nv7C *EDbxpIF|QUiUGzv x7k."F4h yN^H0`ZD[3^|VFx].Μ9uoAAAAXz޵Yn(((5k7 &L'Ji6x*Tb/Z?ș.}.,FZD-PDbEɆrpܹ v1c$-"$Jqjj}G."Kz(..[oo&,'X,|G$ _(JRD;yIx, ,-VUJIĿm+5zX~=,Xq8qhkB92%MJł*ѣGe5<y,6/͓WI'ZLIFX˖-u2rJy$W6[递X^HK$U X)rm_ >?#^{%m!'܋Oe7dž2L9d+ &y) KrM0Ht4~y{ʊq1=*h>"K{Fc31"\=,!Ck\[)sNN:JSĉ}% 7M4:vvhFK4ހ 1 SLY^q_ٳ멸H{,Py,+)e ChtM7Y/b#, Ed_*egg'/^o&bӫzW4#ҵQ0'O <,%iyx1`0`xꩧ0nܸgW]u^z%<%i|&M^h{fdiN47O/CyoI4SUԏ'˂,X_B4q'1EVr=)_ 7F#x<:u ;v`jqfZX^WNZZ'i\9?' ъ0unk#Ǝ^x &Nϐm!E%.iM$@ш=cj4z#5:P/EpYQQz v: xsъK#4Mс(N3.[ r k)ZƉeP[LI|yx}:sAVV>Sl߾="aƌx0k,kJSO+het(zfQԺÃ˦&,\k׮H6S577GU9p:8t݋3g5v\{)W"TRNUoDNN 5k֠4bh$''sx\uU]"a#A+PZ ?ebb9˨p[iY|/Tɬ fonnh/^hllҥKqwy"M$Ok ڵGVWvL& dggcȑX|98p^rN &w܁wIޥu!Ⴗ7;@4ָu-quV{(//J>bKMZt"zIO1qDdff KhQu^X6hZ\+t u}H1uT <cǎŲepС C='xcƌh&Ii4&"jZ5O3r9cb<ܷoyDUP%qi䩔2DZY&i۱g[=Z֍* ?"mx鄧m>|8z!9K.ŦMV:=z4~_{"tX" yt/h˒":"V /\EL ZI 7dЀ%Kù][^FcbIԤӧcРA5j.]Df_wuxgp뭷"%%E_FdH8dUB, G)ѹjs+ $$,2W;'0LF#ƌ,\|Xx1vڥt-^u]x ]̨b"+JLxyu^SK @-.{aʕf Fi U|xkZ[[rЛfaժU?~4*(y*5̱֫t:~|Gӟ$[gWTǺF?FӴQtG^ǘ1csh4⫯R4 ^xӦM֟Sɚi!ѫei`Ţ3%dZE}J,>aCC.\ŋWYz3)Q*%9BhkkZ[[n:|̾u"8Jp>_表h:ÇO?;)Ԅd¼ypM7l63+Ҵ0^\KLm7 Fp\ \644>~^, sR4Ҵ1z;Ô$)~Kr3DzA9 >=i&3f9sƽGx:Ln4\҈z()aJƪ… gה -4*1) 8z;׋|HOOٳ {f=&Yո46 K^iuvv2x^bʕ(++?+ўH hV4-G&Z1X'2/JAuCy}((Wke5Ey.TYδj4$8{,+XgΜ-&hťEoNn_%c߾}c„ ]Oh*.vBSSHhD+.<&&YjpIVD[^^ٳqcذa&mQ"ڊo&6`Iϼ^/ߏZlقs"++PyMP<㪍U|߱j\=A/ƍQQQqA[hHe &| K* 5ÔA^kk+>rlݺvfϞ#FRPH:Zjǜj*.,FDq۷Z?JJJ?* )$l BX~dxրǭZ?"j*,[ 'N@KK$?gG.1F^3K{QRw$K ł}ɓ1i$vm:ujJ4tJDry0^---Xd nرeee~n W_}5?r?~@mm- f>PxQci]J(H{~SSlقe˖᧟~BSS/A?рKkJڜE0x`XԄRl۶ u]ٳg/Gbbj\Z/,Y<*R9g=:::cÆ \N%%%Ś5k#GbȑoHJJbd3LR$3< \Ggr~ Bee%ك;wbAgg'\.e#ÅKp/bS8/~ cƌAjjj_%KKWu$Ë )G'/#onnƾ}{n(--nP1&6\hU\iF#tʒyy8|ggg,f;v Xh~W\L%~^Z @jGFFYft?ߏ`MD+ `0`ј9s&O f TEd)CD .y7T;qݨB^^prr|a0fj\*@Z bVo>c=>v555믱zj\s5xq- --K7vFh͊cu=W=QF{BCCJKKq)>}:b"#YIz=z4FI&aҤIF||(m^$?9}"j"~ޱ h+O6]J顸۷o͛q@D10%3Ҙ"<{DA4fvx{oǯk7f&oPZ<ڭHݎCaƍؾ};JJJd WaǏǖL 6к %b|ʕ+i&vmxgq#>>^6V7.Y VYuky%X˙Bǔ !΂zzс}aƍC]]]@EFCw4zLi9ȍxu8ŪD'n`ٲeXjn6<3꫑@,@b$ZMђy*]WH`tt" |< Gl6ܹ[lA^^Vk \q0-1/ZO+ŧ xL*n\.͛VxޘKLV~4C2gt%˒EW|N{ሥD9t\om6L>o1y.'Bc,4':i<װ'JϔǪٺc[{A[[[ fpY=9x5By4CǼknǦMuVL2 Jt8yk0+il2o4m9ͯ"biƴ5IVI;i,0p8w^6axZ d 028!Bۜf}^{]w݅ӧ_ 3N9WXzؓhS7ʲrBYSCkhhݻbϞ=l1s HKK?"Xw|#b?Ni]ݎXhx/8;::alݺ?cҤIHJJ e1fŀ6oeʣ!FivnjbϞ=Xz5v (LIIb qrɲt5ȫO˘9Ɔ }v~xg0~x$''8I?̡3kDȻx<8ȑ= IDAT#X~=n݊X 㑚/ޘ%1 FW}hψ\8O!Z|9֯_sgȑ#0N?ɕ|D,Mt_ mg^(..ƦMӱ1a2yS /HuoXυ Xx1֬YG}O>$ djZTR1yQ<-*{˜쟗D{{;*++}v^17TIK`"Hj\X[2X$fa^`;`ʕxꩧpHJJ"%/)aJ$Q9UZnݍn\x"ˍr[IIṅ`mԩSx嗱l2̛77t}HN*>-Ӟ3R?Ҝq!^X,1⌁wK):4B).݉дDϕlvxP)S) (୷_ ӦMCVVw(I~ Wg'ӉzaڵذajjjbDkU~D){xMh{/ܜtpc5bi%1PN;wę3g#{Űad H%H4f*ZVW:֢WƦM#I+CZZa 0LZ v.+Fa1PX`vލGy7p (W6hk8E$nǎêUuV477%= fiii\ Հҽ"2Q$$*; j={`„ ׯhWʫ*w*ىJ=zVB^^c0333 kQKT+Sii'wvv6u 4^?fΜYfa8p`R{%yH˵,ߊF}}=qq[},& t:+rRvJ`>Liǯh uuu/qF\pc̄`ථIMDAcc#PZZݻwcǎ8ydk "L&eRIiج&1ASSV^<?7x#J > i@,6kq9TVVСCطo:Ct " ѧOUשx)"y|8~3 ֆ={`Ϟ=0`&O)S`0`뇌@ ]@DrP. MMMX,ٳgq(((!5 f}&Xd=HĿ#1l zjkkj*Y999?~<&N1c`D>},ۋOO IMMMhnnƹspI1sk R 01OGV$;mNFѢ<ŧdcpܹs8wlٌA/ȑ#1biiiHNNFJJ #>>IW$x^|>\.8@eVb8uc\c 3++;B?WDׅ"v 洖(4 60c)`qi>}6m$%%o߾ׯ>} ==HMMEJJ L&S@ 5|zp:xtttLR1A bKh4"--Mqk/*bj Ȋ#[]N Uс'Fe1A b 11\P^"_$1>VE-&i_ͳPЇF'wGGb C-kHPPhÇ.և>(ɑZr^xZ'A b rӑ ܐ\(# 'I }N,ux}0cĠi}%Z)Iކr xyēI2Ec 31Ao ["..z}Whv^h$I>^^7P@$|.\ru+>t{bc }, ɯPz3PM !ekM&S~6wcrd]@3j-r `}~aObrڈB 3`{ 1qz/V!i,LtC\ID%kǚ |.\|>&V]G|H 3T+= 3TkP!" O vf1m|CKK ؈&444 >>܇M^f(--Eee%jjj`ZaɄ$%%l6O>4hAaடu:lVhiiA[[:::u:f3␔, ''C Avvvм [ؿZ\[[[qhhh@GGG^`@bb"郾}_~>|8FAzj WhR MMM())Ayy9jkkQ[[&tttth`0 !!0 A0d 2HKK֏6\)hZfԩS8}4***P__6v8N\.\.x<. tC||< !C`ĈE].RN$8;v wQSS͆6tttn$`7L399ѣ1uT\s5߿ƼM 2c͆wƉ'PWWVNNKw7v6GRRRl9GƘ1c0bk"In444eeejjjBKK v;G4vMttz=FcofIII8p ƎckENN " VhY}}=~Gĉhhh@sssC5IMMEZZ'bڴi+${Ŕ_s.))A~~>=2455 z`Z7晔d$%%!==Çe]K/EZZS'>_I<>;u֮]555׬P(~RSSlff&Fk\s F܂?xh5lK7-++þ}p{%_׋իW㣏>±ct^p$IR@°a`6͹9⋀etF8qVZ[n?}&L7:hjjҥK5K/ŴiӘx)\ޯoylZ5n裏v¥/|>X,,X+WDUUUn.?477csa„ <^77|iiC =P].jkkQZZH&؈2c=-TK-Ĵ~ؽ{7,K؅>8wmۆ'Odz>t^5N‡~7漟KÇGrrr[KX%|B+\]||>#IYrׄ~vÇo]?۶m\.}=t!n222"fu]']Vy$IyI999N( 6Le鴢B7o^X`(=SREEqY(Y4`٤>L4i1둝-͝;W^,ʝ[Lnm:::7JӦM"'ڵ˻|>W^#~'O,;vKp.Cg G駟_}pI555B %޽[?~˥e˖IdX~Ž8f @4i/;heBϴiӤ;v}?644H ,* [ ,zҙ3gQ XVޓ.bh4FԻ|҉'9R_/K mPHZȍ-pE!55K^/6mڄgyǏ(Xy"XxΩ?>V^ G̲E#c߾}կ~͛7,Ymm->C먬q,vl߾O?4JKKX|b|?8sLĸ0adffRHɄT*ͱX).y 5XkBìpz\ve~op׋(@_0\WbH%$$`Ȑ!HJ-4G x<^eˈuwkdXW_C]]]DMӉ| hiiy^}@}}}ĽNѱ *iGMt:1iHCdtˡt IDATEW*++#YϹ?pAΝ=D322pw)!g$éSgrrm6/_7|Q. yyy/˾?^n^nnnŋojFb 6HNN[ .CBV{CP4EH?rcFSw`aϣ(4={`8{,NQTTqPs1cd CYY^z%>|koۍo&j-N'-[UVu,:::~zl]vEFX|A_;%c Dz]f%]òUG3!!\rI N$\.8x`D3AdرD\ZVlذ!ⵎL5mL/2VѣG2*עΝ;͟Z˅#,KDW\_FYj2UDb]=zzjE4%ű#..vxǃ5k`Ŋ/ V_}N8A4A޽gϞyDGvv6rssn7@MdU%c&&U"^~]Q}J{b޽w ͧc4ѿ :\r >}tIt恴4\|ŁN$ Xt)Lį]}WQ-5%Kɓu=4m6.\}EPuEa0\'4LZEcux dKu4g$i֌,XmI"FGZ(9.ɴ_o6JKK5d}Ŵi0~x ++ & C~j \.\'OUW];׋GRE ..\r |A\y>|8L&S?v gΜSPRRcǎ^ 2331v.8 gPF#fsSGO᭷´iӺ֤_~HN83^{-." ===QRR{رchkkl]bѢE]M ۍÇc…asqqqHKKCzz:vEG[a׳xZf<ߑHCa5#ᔊQeFVVVYYYӧOԩS(**Bmmm7e]8H |p8mAᩧ½ދ}d2Ar%Iٳg_㫯,@DAAƍ`f_q}!55&K&߿?&L ݎgb߾}صk łt5JUd2e M\HKKCrrr9mUU9|ܹS3#4{a[wzA{{;~l߾]SԩS1ovSr8<z%+y<vK.Kr8RGG*l6ɓҊ+?̙3#FHv^d)))ܹsBnw+%~^Wjoo[nEw}ɓ':xteh4J?#3K`>x$!IUUUի?Xjnne?R]]t:Ж\-ӧ4p@ӧOu9"͘1Cgt:iСo!UWWGp)Iv%*Rnnf]rDڲʕ+8MqH>tE큹zt.YV駟~|MiƌRKXNJ?AK[n<ҟ<@I0$-$p III]QHIIap뭷v 33WZƕ;зo_$;|bb":$$$`0`ӦM瓟*5*VM '&&Fbb[N3 0 Gbb"nV|)'|~)Ok4a20l0Yxpiٳ3f̠DZw^M=tPK;w.RRRdh4"==O>$kzXr%ni`tgiAcnĆr'& 0zh<8w %<\E333\sssh'ig|24.oIY^zah"M+p7㭷BZZ^n:& 'OƋ/NܹS՜jkkq1\y啁J"v]utNC~E|,Re{<]Vu4NÈ#+t<B^5\{999קKIB=:::Ir)-XW"i ܻ}{P\}/`y,  !!^ɖ@BQ$Ku,KVHܤM؎6خGM;č'm6Jx(QKvl˶H `y? G~rϹ{v2gv=|ߟ$IHMMw]+vqEK#tvvӆg6w^ڵ DpJ~֟ɟ`Æ 5=}܇ 0l6/*$'0Fb8jfSoժ}G[gVKJ P¯x5!^#dY6o333ip8{nE Omf۶m38,дH5=7߾}BI?ccc@CC,^VBZZP(2Պ7 q͐gOOO KMݫ߭gnxX#q{-!U4zzzfxa&%%vOB/(pJvu*:CA{gׯcrrq-4&]ksq#(.\0/n4RPźٰaAjD˼tRHF梮Ne\HhIc4ȫHk#oZ HJ,AE4tdhTGwMt"77p;::RI& hz{466va3h"H>pzټcvqڵY{qll BƝ%KPjHYVVfx~477QܸqC.]M6n>io4?(-yw <"%oh)ݤ1E++Z%~И|͹s G )) ˖-#x^ox<0HNN6lBSĠZA4ꫯ ;wÇݍYZarCe$-vncΝL,fK.zؘRtYYYHNNV]ÁCt P_FC!l6aʕ>KXʣX q>gaL`I4IAH,4kfxYGگl{{adbc"Я_boxx7n܈L$y^a޽(**B\\,º9XI0K#mܸ69==J/ۍn㎏Gww7~ͫdzzz9z֦T]]wsvyĒ.i}B{>7$|5)N8IB_~`gga'(XZF7r`8[lAsssĊ@GG^{5ؼy3{1*Z6hX1h,k, !Q^. ~?$qv(~Kp'1|r놔 "ε_H}1!: \MֻW%fiřL&JOYi,O~Y;_\jĜx'@ z/iZo͌'Zfk7ݧ-sˢEOOg"333*i'$3go~/_VM=bVo߾-aJ%$4 ~!p#|>nb"Z+,(9󩱔: tC{L D}fk8 CX|A^x[NSXAdރDkSԳ&&&1`f-5Qw94栥̧ V`jj4JH=7WH f#g ϖ3i.Zbb", 5_,|?9G}.\ѣG{.+p կr9δ04I* 111U9..-2xݻw5`d2 VގJH8԰RHɒPXJR@X}t\UFKKk|,~_@~Yh)phK,~.R!aMԟFURR"$e||̾MhS"IIIxGSO=ꈘemQX3Y_mdzg ׸lٲY}JHHҥKoww7"Ig];,!-4łb!tASSS od4 v\n7k1333 NN% cXi)K9Xh0`2iPx7PVV&awA НV)˜]C/|$Iӟ=\DT9 yӂ3;#=..ޟ!c|2\Z`W䚦-{ٌ!khllQPl5,"8qbb"q܉dhC!u())D aF4ZɄŋ mooG}}4zQQs5338!Si)zК$ΡYQIM|]~~>/^lUG?N&ij1":9xHB+EiךfXBX,\r/z31-22/B~?N>!R-YһyAIL[_M~pq%Hۻw/M5Ǿ-'… BX/8==X8YE$iy ZZZHNNVModdGA{{;<I&ڽSSS8~8 =܃]vjbttOٳg ?t"''! O o&===Boł5kSO|D&0_v 7oT܄f /Goo/qI|Xz*P8y0lww7Z[[)ˈp~0ZZZf+e\Ç&''bŊsToYs锅HBYtxzM$M"&|śoi8;x6gTTT`ҥVi il>cccBOOZZZpY|'Gzz:TM9ZZZꫯbxxk׮źuPVVK^ ]ss3pƍA\.kKٌB|3{GG:cǎa{t$''n|x,Y[B2L(((@CCna|_O>$,YlA3\ʘYx'Wכ"HE4M旌&; {`Ylxo+) "ٌt9)NfӘ$ߏh]]]EBBBȸizUM[[pvyyyDZZb˅Y,XVHϧ}zz####GKJJBvv6"٦q%\tIZ4n7044.LMME/v`B|ŕ+W jmhhop:Xx1222XaffFYn:Wi&A$* /|/0G{{; CVVRSSqOLL`ttCCC訪ƍ OUZZ8!tWLLL`ǎ())AvvvHMpfVJeǢ,z[5e K{E V$IXf vڅÇ IIy===[j֭[ a,4hii2 \p.\9333h"$&&*x&?99 ˅N:iii \ɥԣ].Y穸ǎ#ڿI 1f l6{šC"VE[ Gf1xWF||<8tQ]]4ed`ag||>QcQhJ2GRڴ O Ƭ7Aկ21p#~٘<쳸x"U1W$Ѿ܂ĄUs:(++zf#+@ssC=-ڵkDA\mIIIҗ>/^7c$I իnaBիWqUhbb"v;L&b%MəxPSSåQУ-_ N `j4)g}׬X<,|eq677clll^2Ywc3Xj/jZZٳGՄ6_kgQ~+--œO>9(z{{CXyL騬 1Lގ˗/ŋv100׫]Oc7Zi^ZMgHja,*+ICPtn^6ؽ{78(h5˅i4x׮] sɒ%زe jvk>J SJMc=͛7 V+ UAbdv;z!|W8,<ݻwϩ`6C QˏU  YR^fQ_'i]j\eIGڤ Z'&&_:z!!sn7\.`pfff3_˪*lܸ1k.-11Ǯ]0`Rb& xꩧp}۹b󑑑}k7C{{{H Txׯ_+W C3mVIIILޤᵙYiI!$YehµFZ)I!&R߹7|pʷnR0x*$b5ZM$`޽ʺ}6 {WUjqھǦM} vN`L&/_˿ĶmӔؒpXl*cݣυDrܽ{7^xR%l-I9|o?ڈDaWMaaٰ~zػw|ZFFFB p駟ˣe&ka5fcRj4> H̨ 6-$G+ZļHIVZ CgYfl$ZwM&Ϣo&~_I";O Q9Ng={(^Zg ~۷˗/ֳnGMM N'q?^XEHVLOO+P40ҙaZQVV((([o?"hHFZ{{;&''\5}addw"LL&v⚢ !իCK=ºwfaɪihX|,GRd-^M6nسgPUU~~a D,)x^ozXzHzz:{n|h)))زe ۇ۷֡$IBaa!/c8z(}]477߱~mI011T:111p:xDZrJѣGNH" HKK#p'@ Cp֭2zo=d#ךi~R6q$b ,]8uN<3g`ttt7lF^^VZkb͚5v)KfGNN؈9g444… vZ `ppCCCQl6l6C$#!! |ȵUױ^MEt W$y샃Ɣxa6a ł88EkTffМ@ W8<Ν;+W Ƌ/z?Z9RxZvn^;8o#Io,,\l6EjV@߾}Jh21͈ElllȁY},gŋ+}K]SSSV1L&CbbR`TG˷m!,TuX,Y=R~ ׋IeOLL*KժeYJHHUCk_|:_$}Y 4صF{E,c`dRL333JzJ$3{ gp8!<ѝFK3 NˁI5hi,אlz,}gaBc"c5_JQ ;,-u"L[ { 4j2>>Xx}q7ҬWK2RH<*(S EB&#}u.4;$j zGc5D[DGDZ޹ƹHqH6pwX$Dy{ ސp=o$*OQ0M #ڡ Pu'6_-ofY%&(N;"Qj~" `^IITԘ5`t4L-IX޾CcDEo0J##VZ.RnL0վc;dZ'ڑY I)#V<1/ vGb#ƴ#Yc$"mFtЏFRZ@O-%VnV䓦}V+]^E3`A^s1DцyN+Z@?qVx-"eQ i,BKZ_ZNDuTk5!o .7Y OmX !EFϞ)hM- hz_,r~ҬȢ59jUO0:ږIeh ?1/ҏYs:;V&9F#*FXX׌Q= L M`)IEF=Ҵ!DĂ "5 ul=~^0zZ?C? zQFхVЃC14QhVl]R7yֿރwM#?6o@˻f=FaAgiȿ1uXx*\ܧ5.-zi=I"Œ&Gl@Z',Α3־I ^,%sVd<з/r~Ҭj&\ ϔ,OolRx5i;Ztj$-5H$9jT eqycښшvhE#B8hyҬőII~H{{ Y4LB-p8BYk;kmWo4-fóYhdBJJ rss 3Ǥ$H|h}VCrP…/XjвzRrY hfXSLZZ(Vu M2IJZZ&6Zyy$jVGk|>qm 399 $d-,sMAI4Eh/Z h9h3s 0IDATY/ }B[hƚYKd5i٭Y$l͈Ee h>&P=!<6}-: <ɪ%Ej-YhkǢ2HkXϙU*h~kquj չ@˻$@&5p'~{R+Hf`-@uH &I1뵞jN7 "V-%Ym]5iъF75z'Ϸr /.-XCZKBzDkhГ$)1"I%R-D;嗑uI_8ghR KP jגGHk͝[key( 'mysql', v::create() ->key('host', v::stringType(), true) ->key('user', v::stringType(), true) ->key('password', v::stringType(), true) ->key('schema', v::stringType(), true), true ) ->key( 'postgresql', v::create() ->key('host', v::stringType(), true) ->key('user', v::stringType(), true) ->key('password', v::stringType(), true) ->key('schema', v::stringType(), true), true ) ->setName('the given data') ->assert([ 'mysql' => [ 'host' => 42, 'schema' => 42, ], 'postgresql' => [ 'user' => 42, 'password' => 42, ], ]); } catch (NestedValidationException $exception) { echo $exception->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - All of the required rules must pass for the given data - All of the required rules must pass for mysql - host must be a string - Key user must be present - Key password must be present - schema must be a string - All of the required rules must pass for postgresql - Key host must be present - user must be a string - password must be a string - Key schema must be present Validation-1.1.29/tests/integration/bsn_1.phpt000066400000000000000000000002051336766562500213020ustar00rootroot00000000000000--FILE-- check('612890053'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/bsn_2.phpt000066400000000000000000000004121336766562500213030ustar00rootroot00000000000000--FILE-- check('acb'); } catch (BsnException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "acb" must be a BSN Validation-1.1.29/tests/integration/bsn_3.phpt000066400000000000000000000004101336766562500213020ustar00rootroot00000000000000--FILE-- check(null); } catch (BsnException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- null must be a BSN do_not_rely_on_nested_validation_exception_interface_for_check.phpt000066400000000000000000000012341336766562500351120ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- Do not rely on nested validation exception interface for check --FILE-- length(1, 15)->noWhitespace(); try { $usernameValidator->check('really messed up screen#name'); } catch (NestedValidationException $e) { echo 'Check used NestedValidationException'; } catch (ValidationException $e) { echo $e->getMessage(); } ?> --EXPECTF-- "really messed up screen#name" must contain only letters (a-z), digits (0-9) and "_" Validation-1.1.29/tests/integration/exception_update.phpt000066400000000000000000000006351336766562500236470ustar00rootroot00000000000000--FILE-- check('abc123'); } catch (Exception $exception) { $exception->setParam('translator', function () { return '{{name}} não deve conter letras (a-z) ou dígitos (0-9)'; }); echo $exception->getMessage(); } ?> --EXPECTF-- "abc123" não deve conter letras (a-z) ou dígitos (0-9) Validation-1.1.29/tests/integration/find_messages_should_apply_templates_to_flattened_messages.phpt000066400000000000000000000033701336766562500343750ustar00rootroot00000000000000--TEST-- findMessages() should apply templates to flattened messages --FILE-- length(5, 256); $alnumDot = v::alnum('.'); $stringMin8 = v::stringType()->length(8, null); $validator = v::allOf( v::attribute('first_name', $stringMax256)->setName('First Name'), v::attribute('last_name', $stringMax256)->setName('Last Name'), v::attribute('desired_login', $alnumDot)->setName('Desired Login'), v::attribute('password', $stringMin8)->setName('Password'), v::attribute('password_confirmation', $stringMin8)->setName('Password Confirmation'), v::attribute('stay_signedin', v::notEmpty())->setName('Stay signed in'), v::attribute('enable_webhistory', v::notEmpty())->setName('Enabled Web History'), v::attribute('security_question', $stringMax256)->setName('Security Question') )->setName('Validation Form'); try { $validator->assert( (object) [ 'first_name' => 'fiif', 'last_name' => null, 'desired_login' => null, 'password' => null, 'password_confirmation' => null, 'stay_signedin' => null, 'enable_webhistory' => null, 'security_question' => null, ] ); } catch (NestedValidationException $e) { $messages = $e->findMessages( [ 'allOf' => 'Invalid {{name}}', 'first_name.length' => 'Invalid length for {{name}} {{input}}', ] ); print_r($messages); } ?> --EXPECTF-- Array ( [allOf] => Invalid Validation Form [first_name_length] => Invalid length for first_name "fiif" ) find_messages_should_return_composite_validation_messages_flattened.phpt000066400000000000000000000031731336766562500362250ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- findMessages() should return composite validation messages flattened --FILE-- length(5, 256); $alnumDot = v::alnum('.'); $stringMin8 = v::stringType()->length(8, null); $validator = v::allOf( v::attribute('first_name', $stringMax256)->setName('First Name'), v::attribute('last_name', $stringMax256)->setName('Last Name'), v::attribute('desired_login', $alnumDot)->setName('Desired Login'), v::attribute('password', $stringMin8)->setName('Password'), v::attribute('password_confirmation', $stringMin8)->setName('Password Confirmation'), v::attribute('stay_signedin', v::notEmpty())->setName('Stay signed in'), v::attribute('enable_webhistory', v::notEmpty())->setName('Enabled Web History'), v::attribute('security_question', $stringMax256)->setName('Security Question') )->setName('Validation Form'); try { $validator->assert( (object) [ 'first_name' => 'fiif', 'last_name' => null, 'desired_login' => null, 'password' => null, 'password_confirmation' => null, 'stay_signedin' => null, 'enable_webhistory' => null, 'security_question' => null, ] ); } catch (NestedValidationException $e) { print_r($e->findMessages(['allOf', 'first_name.length'])); } ?> --EXPECTF-- Array ( [allOf] => All of the required rules must pass for Validation Form [first_name_length] => first_name must have a length between 5 and 256 ) get_full_message_should_include_all_validation_messages_in_a_chain.phpt000066400000000000000000000007361336766562500357010ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- getFullMessage() should include all validation messages in a chain --FILE-- length(2, 15)->assert(0); } catch (NestedValidationException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - All of the required rules must pass for 0 - 0 must be a string - 0 must have a length between 2 and 15 get_messages_should_include_all_validation_messages_in_a_chain.phpt000066400000000000000000000015651336766562500350430ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- getMessages() should include all validation messages in a chain --FILE-- 'u', 'birthdate' => 'Not a date', 'password' => '', ]; Validator::key('username', Validator::length(2, 32)) ->key('birthdate', Validator::date()) ->key('password', Validator::notEmpty()) ->key('email', Validator::email()) ->assert($input); } catch (NestedValidationException $e) { print_r($e->getMessages()); } ?> --EXPECTF-- Array ( [0] => username must have a length between 2 and 32 [1] => birthdate must be a valid date [2] => password must not be empty [3] => Key email must be present ) Validation-1.1.29/tests/integration/issue-1033.phpt000066400000000000000000000011661336766562500220230ustar00rootroot00000000000000--DESCRIPTION-- The previous output was: - All of the required rules must pass for `{ "A", "B", "B" }` - Each item in `{ "A", "B", "B" }` must be valid - "A" must equal 1 - "B" must equal 1 - "B" must equal 1 --FILE-- assert(['A', 'B', 'B']); } catch (AllOfException $exception) { echo $exception->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - Each item in { "A", "B", "B" } must be valid - "A" must be equals 1 - "B" must be equals 1 - "B" must be equals 1 Validation-1.1.29/tests/integration/issue-179.phpt000066400000000000000000000011431336766562500217500ustar00rootroot00000000000000--FILE-- 'my_host', 'password' => 'my_password', 'schema' => 'my_schema', ]; $validator = v::arrayType() ->setName('Settings') ->key('host', v::stringType()) ->key('user', v::stringType()) ->key('password', v::stringType()) ->key('schema', v::stringType()); try { $validator->assert($config); } catch (AllOfException $exception) { echo $exception->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - Key user must be present Validation-1.1.29/tests/integration/issue-425.phpt000066400000000000000000000011511336766562500217410ustar00rootroot00000000000000--FILE-- key('age', v::intType()->notEmpty()->noneOf(v::stringType())) ->key('reference', v::stringType()->notEmpty()->length(1, 50)); try { $validator->assert(['age' => 1]); } catch (AllOfException $e) { echo $e->getFullMessage(); } echo PHP_EOL; try { $validator->assert(['reference' => 'QSF1234']); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - Key reference must be present - Key age must be present Validation-1.1.29/tests/integration/issue-446.phpt000066400000000000000000000007501336766562500217500ustar00rootroot00000000000000--FILE-- 'w', 'email' => 'hello@hello.com', ]; try { v::create() ->key('name', v::length(2, 32)) ->key('email', v::email()) ->assert($arr); } catch (NestedValidationException $e) { print_r($e->getMessages()); } ?> --EXPECTF-- Array ( [0] => name must have a length between 2 and 32 ) Validation-1.1.29/tests/integration/issue-619.phpt000066400000000000000000000005321336766562500217500ustar00rootroot00000000000000--FILE-- setTemplate('invalid object')->assert('test'); } catch (ValidationException $exception) { print_r($exception->getMainMessage()); } ?> --EXPECTF-- invalid object Validation-1.1.29/tests/integration/issue-620.phpt000066400000000000000000000015411336766562500217410ustar00rootroot00000000000000--FILE-- email = 'Not an email'; $object->password = 'Ale xandre'; try { v::create() ->attribute('email', v::email()->setName('Email Field')) ->attribute('password', v::noWhitespace()->setName('Password Field')) ->assert($object); } catch (NestedValidationException $exception) { print_r($exception->getMessages()); print_r($exception->findMessages([ 'email' => 'Error: {{name}}', 'noWhitespace' => 'Error: {{name}}' ])); } ?> --EXPECTF-- Array ( [0] => Email Field must be valid email [1] => Password Field must not contain whitespace ) Array ( [email] => Error: Email Field [noWhitespace] => Error: Password Field ) Validation-1.1.29/tests/integration/issue-689.phpt000066400000000000000000000032231336766562500217570ustar00rootroot00000000000000--FILE-- [ 'name' => 'N', 'address' => 'A', ], 'contact' => [ 'name' => 'wd', 'email' => 'ffesfewf2232313123212', 'password' => ' ', 'position' => 'wdwdwf', 'number' => '£"!@£;21#£:"!:£~!":£\'21;', ], ]; try { v::create() ->key( 'organization', v::create() ->key('name', v::length(2, 50)->notEmpty()) ->key('address', v::length(2, 50)->notEmpty()) ) ->keyNested('contact.name', v::length(1, 50)->notEmpty()) ->keyNested('contact.email', v::email()->notEmpty()) ->keyNested('contact.password', v::length(3, 100)->notEmpty()) ->keyNested('contact.position', v::length(1, 100)->notEmpty()) ->keyNested('contact.number', v::phone()->notEmpty()) ->assert($input); } catch (NestedValidationException $exception) { print_r(array_filter($exception->findMessages([ 'organization.name' => 'Center name', 'organization.address' => 'Center address', 'contact.name' => 'Contact name', 'contact.password' => 'Contact name', 'contact.position' => 'Contact name', 'contact.number' => 'Contact name', 'contact.email' => 'Contact name', ]))); } ?> --EXPECTF-- Array ( [organization_name] => Center name [organization_address] => Center address [contact_password] => Contact name [contact_number] => Contact name [contact_email] => Contact name ) Validation-1.1.29/tests/integration/issue-690.phpt000066400000000000000000000030761336766562500217550ustar00rootroot00000000000000--FILE-- [ 'daymark' => 'ffesfewf2232313123212', 'building' => [ 'enable' => 'd', 'blank' => 'ffesfewf2232313123212', 'powerdown' => '5', 'powerup' => 'wdwdwf', ], ], 'contact2' => [ 'name' => 'wd', 'daymark' => 'ffesfewf2232313123212', 'building' => [ 'enable' => '1', 'blank' => '1', 'powerdown' => '1', 'powerup' => '1', ], ], ]; try { v::create() ->each( v::create() ->key('name', v::length(1, 50)) ->key('daymark', v::length(1, 50)) ->key( 'building', v::create() ->key('enable', v::length(2, 50)) ->key('time', v::length(2, 50)) ->key('powerdown', v::length(2, 50)) ->key('powerup', v::length(2, 50)) ) ) ->assert($input); } catch (NestedValidationException $exception) { print_r(array_filter($exception->findMessages([ 'each.name' => 'Center name', 'each.building.enable' => 'Center time', 'each.building.powerdown' => 'Center time', ]))); } ?> --EXPECTF-- Array ( [each_name] => Center name [each_building_enable] => Center time [each_building_powerdown] => Center time ) Validation-1.1.29/tests/integration/issue-719.phpt000066400000000000000000000015051336766562500217520ustar00rootroot00000000000000--FILE-- 'MyName111', 'user_surname' => 'MySurname111', 'user_tel' => 'asd123' ]; $rules = [ v::key('user_name', v::numeric())->setName('First Name'), v::key('user_surname', v::numeric())->setName('Second Name'), v::key('user_tel', v::phone())->setName('Phone number'), ]; try{ v::allOf($rules)->setName('Validation Form')->assert($input); } catch (NestedValidationException $exception) { print_r($exception->findMessages(array_keys($input))); } ?> --EXPECTF-- Array ( [user_name] => user_name must be numeric [user_surname] => user_surname must be numeric [user_tel] => user_tel must be a valid telephone number ) Validation-1.1.29/tests/integration/issue-727.phpt000066400000000000000000000022111336766562500217440ustar00rootroot00000000000000--FILE-- number = "+61.(03) 4546 5498"; $work->countryCode = 61; $work->primary = true; $personal = new stdClass(); $personal->number = "+61.0406 464 890"; $personal->country = 61; $personal->primary = false; $phoneNumbers = new stdClass(); $phoneNumbers->personal = $personal; $phoneNumbers->work = $work; $validateThis = ['phoneNumbers' => $phoneNumbers]; try { v::create() ->keyNested('phoneNumbers.personal.country', v::intType(), false) ->keyNested('phoneNumbers.personal.number', v::phone(), false) ->keyNested('phoneNumbers.personal.primary', v::boolType(), false) ->keyNested('phoneNumbers.work.country', v::intType(), false) ->keyNested('phoneNumbers.work.number', v::phone(), false) ->keyNested('phoneNumbers.work.primary', v::boolType(), false) ->check($validateThis); } catch (PhoneException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- phoneNumbers.personal.number must be a valid telephone number Validation-1.1.29/tests/integration/issue-739.phpt000066400000000000000000000005131336766562500217520ustar00rootroot00000000000000--FILE-- check('foo'); } catch (ValidationException $exception) { echo $exception->getMainMessage(); } ?> --EXPECT-- "foo" is not valid Validation-1.1.29/tests/integration/issue-799.phpt000066400000000000000000000020571336766562500217650ustar00rootroot00000000000000--FILE-- call( [new MyClass(), 'parse'], v::arrayVal()->key('scheme', v::startsWith('https')) ) ->assert($input); } catch (AllOfException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::create() ->call( function($url) { return parse_url($url); }, v::arrayVal()->key('scheme', v::startsWith('https')) ) ->assert($input); } catch (AllOfException $exception) { echo $exception->getMainMessage().PHP_EOL; } ?> --EXPECTF-- All of the required rules must pass for "http://www.google.com/search?q=respect.github.com" All of the required rules must pass for "http://www.google.com/search?q=respect.github.com" Validation-1.1.29/tests/integration/issue-805.phpt000066400000000000000000000006131336766562500217450ustar00rootroot00000000000000--FILE-- setTemplate('WRONG EMAIL!!!!!!'))->assert(['email' => 'qwe']); } catch (NestedValidationException $exception) { print_r($exception->getMessages()); } ?> --EXPECTF-- Array ( [0] => WRONG EMAIL!!!!!! ) issue_85_find_messages_should_not_trigger_catchable_fatal_error.phpt000066400000000000000000000013741336766562500351130ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- Issue #85: findMessages() should not trigger catchable fatal error --FILE-- length(1, 15)->noWhitespace(); try { $usernameValidator->assert('really messed up screen#name'); } catch (NestedValidationException $e) { print_r($e->findMessages(['alnum', 'length', 'noWhitespace'])); } ?> --EXPECTF-- Array ( [alnum] => "really messed up screen#name" must contain only letters (a-z), digits (0-9) and "_" [length] => "really messed up screen#name" must have a length between 1 and 15 [noWhitespace] => "really messed up screen#name" must not contain whitespace ) Validation-1.1.29/tests/integration/keys_as_validator_names.phpt000066400000000000000000000012541336766562500251730ustar00rootroot00000000000000--TEST-- keys as validator names --FILE-- key('birthdate', Validator::date()) ->setName('User Subscription Form') ->assert(['username' => '0', 'birthdate' => 'Whatever']); } catch (NestedValidationException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - All of the required rules must pass for User Subscription Form - username must have a length between 2 and 32 - birthdate must be a valid date Validation-1.1.29/tests/integration/not_should_work_by_builder.phpt000066400000000000000000000003201336766562500257160ustar00rootroot00000000000000--TEST-- not() should work by builder --FILE-- validate(10)); ?> --EXPECTF-- bool(false) Validation-1.1.29/tests/integration/not_with_recursion.phpt000066400000000000000000000012361336766562500242310ustar00rootroot00000000000000--TEST-- not() with recursion should update mode from related rules --FILE-- positive() ) ) ) ) ); $validator->check(2); } catch (NestedValidationException $exception) { echo $exception->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - These rules must not pass for 2 Validation-1.1.29/tests/integration/not_without_recursion.phpt000066400000000000000000000006771336766562500247710ustar00rootroot00000000000000--TEST-- not() with recursion should update mode from related rules --FILE-- positive() ); $validator->check(2); } catch (ValidationException $exception) { echo $exception->getMainMessage().PHP_EOL; } ?> --EXPECTF-- 2 must not be positive Validation-1.1.29/tests/integration/readme/000077500000000000000000000000001336766562500206435ustar00rootroot00000000000000Validation-1.1.29/tests/integration/readme/example_1.phpt000066400000000000000000000006051336766562500234140ustar00rootroot00000000000000--FILE-- name = 'Alexandre'; $user->birthdate = '1987-07-01'; $userValidator = v::attribute('name', v::stringType()->length(1, 32)) ->attribute('birthdate', v::date()->age(18)); $userValidator->assert($user); ?> --EXPECTF-- Validation-1.1.29/tests/integration/readme/example_2.phpt000066400000000000000000000012461336766562500234170ustar00rootroot00000000000000--FILE-- noWhitespace()->length(1, 15); try { $usernameValidator->assert('really messed up screen#name'); } catch (NestedValidationException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - All of the required rules must pass for "really messed up screen#name" - "really messed up screen#name" must contain only letters (a-z) and digits (0-9) - "really messed up screen#name" must not contain whitespace - "really messed up screen#name" must have a length between 1 and 15 Validation-1.1.29/tests/integration/readme/example_3.phpt000066400000000000000000000011301336766562500234100ustar00rootroot00000000000000--FILE-- noWhitespace()->length(1, 15); try { $usernameValidator->assert('really messed up screen#name'); } catch (NestedValidationException $exception) { print_r($exception->findMessages(['alnum', 'noWhitespace'])); } ?> --EXPECTF-- Array ( [alnum] => "really messed up screen#name" must contain only letters (a-z) and digits (0-9) [noWhitespace] => "really messed up screen#name" must not contain whitespace ) Validation-1.1.29/tests/integration/readme/example_4.phpt000066400000000000000000000011751336766562500234220ustar00rootroot00000000000000--FILE-- noWhitespace()->length(1, 15); try { $usernameValidator->assert('really messed up screen#name'); } catch (NestedValidationException $exception) { print_r($exception->getMessages()); } ?> --EXPECTF-- Array ( [0] => "really messed up screen#name" must contain only letters (a-z) and digits (0-9) [1] => "really messed up screen#name" must not contain whitespace [2] => "really messed up screen#name" must have a length between 1 and 15 ) Validation-1.1.29/tests/integration/rules/000077500000000000000000000000001336766562500205405ustar00rootroot00000000000000Validation-1.1.29/tests/integration/rules/age_1.phpt000066400000000000000000000002561336766562500224140ustar00rootroot00000000000000--FILE-- assert('18 years ago'); v::age(18)->check('18 years ago'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/age_2.phpt000066400000000000000000000005031336766562500224100ustar00rootroot00000000000000--FILE-- check('17 years ago'); } catch (MaxException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "17 years ago" must be less than or equal to "%d-%d-%d %d:%d:%d" Validation-1.1.29/tests/integration/rules/age_3.phpt000066400000000000000000000005121336766562500224110ustar00rootroot00000000000000--FILE-- assert('17 years ago'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "17 years ago" must be less than or equal to "%d-%d-%d %d:%d:%d" Validation-1.1.29/tests/integration/rules/age_4.phpt000066400000000000000000000005141336766562500224140ustar00rootroot00000000000000--FILE-- assert('9 years ago'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "9 years ago" must be less than or equal to "%d-%d-%d %d:%d:%d" Validation-1.1.29/tests/integration/rules/allOf_1.phpt000066400000000000000000000006441336766562500227160ustar00rootroot00000000000000--FILE-- assert(42); v::allOf(v::intVal(), v::negative())->check(-42); v::not(v::allOf(v::date(), v::between('2014-12-01', '2014-12-12')))->assert('2012-01-01'); v::not(v::allOf(v::stringType(), v::consonant()))->check('I am Jack\'s smirking revenge'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/allOf_2.phpt000066400000000000000000000005501336766562500227130ustar00rootroot00000000000000--FILE-- check('Luke i\'m your father'); } catch (ConsonantException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "Luke i'm your father" must contain only consonants Validation-1.1.29/tests/integration/rules/allOf_3.phpt000066400000000000000000000006011336766562500227110ustar00rootroot00000000000000--FILE-- assert(42); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - All of the required rules must pass for 42 - 42 must be a string - 42 must contain only consonants Validation-1.1.29/tests/integration/rules/allOf_4.phpt000066400000000000000000000005021336766562500227120ustar00rootroot00000000000000--FILE-- check(42); } catch (IntTypeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- 42 must not be of the type integer Validation-1.1.29/tests/integration/rules/allOf_5.phpt000066400000000000000000000005471336766562500227240ustar00rootroot00000000000000--FILE-- assert('Frank Zappa is fantastic'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "Frank Zappa is fantastic" must not be string Validation-1.1.29/tests/integration/rules/alnum_1.phpt000066400000000000000000000002441336766562500227710ustar00rootroot00000000000000--FILE-- assert('Bla 123'); v::alnum()->check('Bla 123'); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/alnum_2.phpt000066400000000000000000000005161336766562500227740ustar00rootroot00000000000000--FILE-- check('Bla %123'); } catch (AlnumException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "Bla %123" must contain only letters (a-z) and digits (0-9)Validation-1.1.29/tests/integration/rules/alnum_3.phpt000066400000000000000000000007161336766562500227770ustar00rootroot00000000000000--FILE-- noWhitespace()->assert('Bla %1#%&23'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - All of the required rules must pass for "Bla %1#%&23" - "Bla %1#%&23" must contain only letters (a-z) and digits (0-9) - "Bla %1#%&23" must not contain whitespace Validation-1.1.29/tests/integration/rules/alnum_4.phpt000066400000000000000000000005311336766562500227730ustar00rootroot00000000000000--FILE-- check('adsfASDF123'); } catch (AlnumException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "adsfASDF123" must not contain letters (a-z) or digits (0-9)Validation-1.1.29/tests/integration/rules/alnum_5.phpt000066400000000000000000000005251336766562500227770ustar00rootroot00000000000000--FILE-- assert('asd124SF'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "asd124SF" must not contain letters (a-z) or digits (0-9) Validation-1.1.29/tests/integration/rules/alnum_6_expected_char.phpt000066400000000000000000000002441336766562500256540ustar00rootroot00000000000000--FILE-- validate('bla - bla')) { echo 'ok'; } ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/alnum_7_not_empty.phpt000066400000000000000000000002461336766562500250770ustar00rootroot00000000000000--FILE-- notEmpty()->validate('')) { echo 'error'; } ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/alnum_8_uppercase.phpt000066400000000000000000000002511336766562500250450ustar00rootroot00000000000000--FILE-- uppercase()->validate('ASDF')) { echo 'ok'; } ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/alpha_1.phpt000066400000000000000000000002331336766562500227400ustar00rootroot00000000000000--FILE-- assert('abc'); v::alpha()->check('abc'); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/alpha_2.phpt000066400000000000000000000007401336766562500227440ustar00rootroot00000000000000--FILE-- check(1); } catch (AlphaException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::alpha()->assert(2); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- 1 must contain only letters (a-z) - 2 must contain only letters (a-z) Validation-1.1.29/tests/integration/rules/alpha_3.phpt000066400000000000000000000010201336766562500227350ustar00rootroot00000000000000--FILE-- setName('Field')->check(null); } catch (AlphaException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::alpha()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must contain only letters (a-z) - Field must contain only letters (a-z) Validation-1.1.29/tests/integration/rules/alpha_4.phpt000066400000000000000000000007661336766562500227560ustar00rootroot00000000000000--FILE-- check('a'); } catch (AlphaException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::alpha())->assert('b'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "a" must not contain letters (a-z) - "b" must not contain letters (a-z) Validation-1.1.29/tests/integration/rules/alwaysInvalid_1.phpt000066400000000000000000000005211336766562500244620ustar00rootroot00000000000000--TEST-- alwaysInvalid() --FILE-- check('whatever'); } catch (AlwaysInvalidException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "whatever" is always invalid Validation-1.1.29/tests/integration/rules/alwaysInvalid_2.phpt000066400000000000000000000004641336766562500244710ustar00rootroot00000000000000--TEST-- alwaysInvalid() --FILE-- assert(''); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "" is always invalid Validation-1.1.29/tests/integration/rules/alwaysValid_1.phpt000066400000000000000000000004121336766562500241320ustar00rootroot00000000000000--TEST-- alwaysValid() --FILE-- check(true); v::alwaysValid()->check(false); v::alwaysValid()->assert('string'); v::alwaysValid()->assert(new stdClass()); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/arrayType_1.phpt000066400000000000000000000002441336766562500236350ustar00rootroot00000000000000--FILE-- assert([]); v::arrayType()->check([1, 2, 3]); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/arrayType_2.phpt000066400000000000000000000004731336766562500236420ustar00rootroot00000000000000--FILE-- check('teste'); } catch (ArrayTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "teste" must be of the type array Validation-1.1.29/tests/integration/rules/arrayType_3.phpt000066400000000000000000000005331336766562500236400ustar00rootroot00000000000000--FILE-- assert(new ArrayObject()); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - `[traversable] (ArrayObject: { })` must be of the type array Validation-1.1.29/tests/integration/rules/arrayType_4.phpt000066400000000000000000000004761336766562500236470ustar00rootroot00000000000000--FILE-- check([]); } catch (ArrayTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- { } must not be of the type array Validation-1.1.29/tests/integration/rules/arrayType_5.phpt000066400000000000000000000005101336766562500236350ustar00rootroot00000000000000--FILE-- assert([1, 2, 3]); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - { 1, 2, 3 } must not be of the type array Validation-1.1.29/tests/integration/rules/arrayVal_1.phpt000066400000000000000000000002771336766562500234440ustar00rootroot00000000000000--FILE-- assert(['asdf', 'lkjh']); v::arrayVal()->check(new ArrayObject([2, 3])); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/arrayVal_2.phpt000066400000000000000000000004661336766562500234450ustar00rootroot00000000000000--FILE-- check('Bla %123'); } catch (ArrayValException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "Bla %123" must be an array Validation-1.1.29/tests/integration/rules/arrayVal_3.phpt000066400000000000000000000005071336766562500234420ustar00rootroot00000000000000--FILE-- assert(new stdClass()); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - `[object] (stdClass: { })` must be an array Validation-1.1.29/tests/integration/rules/arrayVal_4.phpt000066400000000000000000000004701336766562500234420ustar00rootroot00000000000000--FILE-- check([42]); } catch (ArrayValException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- { 42 } must not be an array Validation-1.1.29/tests/integration/rules/arrayVal_5.phpt000066400000000000000000000005511336766562500234430ustar00rootroot00000000000000--FILE-- assert(new ArrayObject([2, 3])); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - `[traversable] (ArrayObject: { 2, 3 })` must not be an array Validation-1.1.29/tests/integration/rules/beetwen_1.phpt000066400000000000000000000005371336766562500233130ustar00rootroot00000000000000--FILE-- between(1, 42)->check(2); v::intType()->between(1, 2)->assert(2); v::date()->between('1989-12-20', 'tomorrow', false)->assert(new DateTime()); v::stringType()->between('a', 'e', false)->assert('d'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/beetwen_2.phpt000066400000000000000000000004551336766562500233130ustar00rootroot00000000000000--FILE-- between(1, 2)->check(42); } catch (MaxException $e) { echo $e->getMainMessage().PHP_EOL; } --EXPECTF-- 42 must be less than or equal to 2 Validation-1.1.29/tests/integration/rules/beetwen_3.phpt000066400000000000000000000004621336766562500233120ustar00rootroot00000000000000--FILE-- between(1, 2)->check(-42); } catch (MinException $e) { echo $e->getMainMessage().PHP_EOL; } --EXPECTF-- -42 must be greater than or equal to 1 Validation-1.1.29/tests/integration/rules/beetwen_4.phpt000066400000000000000000000004511336766562500233110ustar00rootroot00000000000000--FILE-- assert('c'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "c" must be less than or equal to "b" Validation-1.1.29/tests/integration/rules/beetwen_5.phpt000066400000000000000000000004651336766562500233170ustar00rootroot00000000000000--FILE-- assert('a'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "a" must not be less than or equal to "b" Validation-1.1.29/tests/integration/rules/beetwen_6.phpt000066400000000000000000000004721336766562500233160ustar00rootroot00000000000000--FILE-- between(1, 42))->assert(41); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - 41 must not be less than or equal to 42 Validation-1.1.29/tests/integration/rules/boolType_1.phpt000066400000000000000000000002411336766562500234470ustar00rootroot00000000000000--FILE-- check(false); v::boolType()->assert(true); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/boolType_2.phpt000066400000000000000000000004411336766562500234520ustar00rootroot00000000000000--FILE-- check('12345'); } catch (BoolTypeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "12345" must be a booleanValidation-1.1.29/tests/integration/rules/boolType_3.phpt000066400000000000000000000004361336766562500234570ustar00rootroot00000000000000--FILE-- assert('12345'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "12345" must be a boolean Validation-1.1.29/tests/integration/rules/boolType_4.phpt000066400000000000000000000004471336766562500234620ustar00rootroot00000000000000--FILE-- check(true); } catch (BoolTypeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- true must not be a booleanValidation-1.1.29/tests/integration/rules/boolType_5.phpt000066400000000000000000000004441336766562500234600ustar00rootroot00000000000000--FILE-- assert(true); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - true must not be a boolean Validation-1.1.29/tests/integration/rules/boolval_1.phpt000066400000000000000000000007501336766562500233150ustar00rootroot00000000000000--FILE-- assert(1); v::boolVal()->assert('on'); v::boolVal()->assert('off'); v::boolVal()->assert('yes'); v::boolVal()->assert('no'); v::boolVal()->assert(true); v::boolVal()->assert(false); v::boolVal()->check(1); v::boolVal()->check('on'); v::boolVal()->check('off'); v::boolVal()->check('yes'); v::boolVal()->check('no'); v::boolVal()->check(true); v::boolVal()->check(false); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/boolval_2.phpt000066400000000000000000000014311336766562500233130ustar00rootroot00000000000000--FILE-- check('ok'); } catch (BoolValException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::boolVal())->check('yes'); } catch (BoolValException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::boolVal()->assert('yep'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } try { v::not(v::boolVal())->assert('on'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "ok" must be a boolean value "yes" must not be a boolean value - "yep" must be a boolean value - "on" must not be a boolean value Validation-1.1.29/tests/integration/rules/bsn_1.phpt000066400000000000000000000002051336766562500224340ustar00rootroot00000000000000--FILE-- check('612890053'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/bsn_2.phpt000066400000000000000000000004121336766562500224350ustar00rootroot00000000000000--FILE-- check('acb'); } catch (BsnException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "acb" must be a BSN Validation-1.1.29/tests/integration/rules/bsn_3.phpt000066400000000000000000000004211336766562500224360ustar00rootroot00000000000000--FILE-- assert('abc'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "abc" must be a BSN Validation-1.1.29/tests/integration/rules/callableType_1.phpt000066400000000000000000000003641336766562500242610ustar00rootroot00000000000000--FILE-- validate(function () {}); v::callableType()->validate('trim'); v::callableType()->validate(v::callableType(), 'validate'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/callableType_2.phpt000066400000000000000000000017401336766562500242610ustar00rootroot00000000000000--FILE-- check([]); } catch (CallableTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::callableType()->check('oneInexistentFunction'); } catch (CallableTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::callableType()->check(100); } catch (CallableTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::callableType()->check(null); } catch (CallableTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::callableType()->check(''); } catch (CallableTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } ?> --EXPECTF-- { } must be a callable "oneInexistentFunction" must be a callable 100 must be a callable null must be a callable "" must be a callableValidation-1.1.29/tests/integration/rules/callableType_3.phpt000066400000000000000000000015301336766562500242570ustar00rootroot00000000000000--FILE-- check([]); } catch (CallableTypeException $exception) { echo $exception->getFullMessage(); } try { v::not(v::callableType())->check('oneInexistentFunction'); } catch (CallableTypeException $exception) { echo $exception->getFullMessage(); } try { v::not(v::callableType())->check(100); } catch (CallableTypeException $exception) { echo $exception->getFullMessage(); } try { v::not(v::callableType())->check(null); } catch (CallableTypeException $exception) { echo $exception->getFullMessage(); } try { v::not(v::callableType())->check(''); } catch (CallableTypeException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/callableType_4.phpt000066400000000000000000000015501336766562500242620ustar00rootroot00000000000000--SKIPIF-- --FILE-- check($x); } catch (CallableTypeException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::callableType())->check('trim'); } catch (CallableTypeException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::callableType())->check(v::callableType(), 'validate'); } catch (CallableTypeException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- `[object] (Closure: { })` must not be a callable "trim" must not be a callable `[object] (Respect\Validation\Validator: { })` must not be a callableValidation-1.1.29/tests/integration/rules/cnpj_1.phpt000066400000000000000000000002631336766562500226100ustar00rootroot00000000000000--FILE-- check('53969447000130'); v::cnpj()->assert('53969447000130'); --EXPECTF--;Validation-1.1.29/tests/integration/rules/cnpj_2.phpt000066400000000000000000000004441336766562500226120ustar00rootroot00000000000000--FILE-- check('não cnpj'); } catch (CnpjException $e) { echo $e->getMainMessage(); } --EXPECTF--; "não cnpj" must be a valid CNPJ numberValidation-1.1.29/tests/integration/rules/cnpj_3.phpt000066400000000000000000000004351336766562500226130ustar00rootroot00000000000000--FILE-- assert('test'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "test" must be a valid CNPJ numberValidation-1.1.29/tests/integration/rules/cnpj_4.phpt000066400000000000000000000005011336766562500226060ustar00rootroot00000000000000--FILE-- check('65.150.175/0001-20'); } catch (CnpjException $e) { echo $e->getMainMessage(); } --EXPECTF-- "65.150.175/0001-20" must not be a valid CNPJ numberValidation-1.1.29/tests/integration/rules/cnpj_5.phpt000066400000000000000000000004761336766562500226220ustar00rootroot00000000000000--FILE-- assert('65150175000120'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "65150175000120" must not be a valid CNPJ numberValidation-1.1.29/tests/integration/rules/cnpj_6.phpt000066400000000000000000000005061336766562500226150ustar00rootroot00000000000000--FILE-- digit()->assert('65.150.175/0001-20'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "65.150.175/0001-20" must contain only digits (0-9)Validation-1.1.29/tests/integration/rules/consonant_1.phpt000066400000000000000000000003571336766562500236640ustar00rootroot00000000000000--FILE-- check('bcd'); v::consonant()->assert('ddd'); v::not(v::consonant())->check('uou'); v::not(v::consonant())->assert('aaaaa'); --EXPECTF-- Validation-1.1.29/tests/integration/rules/consonant_2.phpt000066400000000000000000000005011336766562500236540ustar00rootroot00000000000000--FILE-- check('top nos falsetes'); } catch (ConsonantException $e) { echo $e->getMainMessage(); } --EXPECTF-- "top nos falsetes" must contain only consonants Validation-1.1.29/tests/integration/rules/consonant_3.phpt000066400000000000000000000004561336766562500236660ustar00rootroot00000000000000--FILE-- check('ddd'); } catch (ConsonantException $e) { echo $e->getMainMessage(); } --EXPECTF-- "ddd" must not contain consonants Validation-1.1.29/tests/integration/rules/consonant_4.phpt000066400000000000000000000004521336766562500236630ustar00rootroot00000000000000--FILE-- assert('Jaspion'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "Jaspion" must contain only consonants Validation-1.1.29/tests/integration/rules/consonant_5.phpt000066400000000000000000000004471336766562500236700ustar00rootroot00000000000000--FILE-- assert('bb'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "bb" must not contain consonants Validation-1.1.29/tests/integration/rules/countable_1.phpt000066400000000000000000000002561336766562500236340ustar00rootroot00000000000000--FILE-- assert([]); v::countable()->check(new ArrayIterator()); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/countable_3.phpt000066400000000000000000000004611336766562500236340ustar00rootroot00000000000000--FILE-- assert('Not countable!'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "Not countable!" must be countable Validation-1.1.29/tests/integration/rules/countable_4.phpt000066400000000000000000000004471336766562500236410ustar00rootroot00000000000000--FILE-- check([]); } catch (CountableException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- { } must not be countable Validation-1.1.29/tests/integration/rules/countable_5.phpt000066400000000000000000000005201336766562500236320ustar00rootroot00000000000000--FILE-- assert(new ArrayObject()); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - `[traversable] (ArrayObject: { })` must not be countable Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_1.phpt000066400000000000000000000002671336766562500254640ustar00rootroot00000000000000--TEST-- countryCode() --FILE-- validate('BR')); ?> --EXPECTF-- bool(true) Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_2.phpt000066400000000000000000000003441336766562500254610ustar00rootroot00000000000000--FILE-- assert('BR'); v::countryCode()->assert('DE'); v::countryCode()->check('BR'); v::countryCode()->check('DE'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_3.phpt000066400000000000000000000004671336766562500254700ustar00rootroot00000000000000--FILE-- check('1'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "1" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_4.phpt000066400000000000000000000004561336766562500254670ustar00rootroot00000000000000--FILE-- assert('1'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "1" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_5.phpt000066400000000000000000000005051336766562500254630ustar00rootroot00000000000000--FILE-- check('BR'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "BR" must not be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-2_6.phpt000066400000000000000000000004741336766562500254710ustar00rootroot00000000000000--FILE-- assert('BR'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "BR" must not be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_1.phpt000066400000000000000000000003651336766562500254640ustar00rootroot00000000000000--TEST-- countryCode() --FILE-- validate('BRA')); ?> --EXPECTF-- bool(true) Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_2.phpt000066400000000000000000000005361336766562500254650ustar00rootroot00000000000000--FILE-- assert('BRA'); v::countryCode(CountryCode::ALPHA3)->assert('DEU'); v::countryCode(CountryCode::ALPHA3)->check('BRA'); v::countryCode(CountryCode::ALPHA3)->check('DEU'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_3.phpt000066400000000000000000000005641336766562500254670ustar00rootroot00000000000000--FILE-- check('1'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "1" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_4.phpt000066400000000000000000000005531336766562500254660ustar00rootroot00000000000000--FILE-- assert('1'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "1" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_5.phpt000066400000000000000000000006041336766562500254640ustar00rootroot00000000000000--FILE-- check('BRA'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "BRA" must not be a valid country Validation-1.1.29/tests/integration/rules/countryCode_alpha-3_6.phpt000066400000000000000000000005731336766562500254720ustar00rootroot00000000000000--FILE-- assert('BRA'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "BRA" must not be a valid country Validation-1.1.29/tests/integration/rules/countryCode_number_1.phpt000066400000000000000000000003661336766562500255300ustar00rootroot00000000000000--TEST-- countryCode() --FILE-- validate('076')); ?> --EXPECTF-- bool(true) Validation-1.1.29/tests/integration/rules/countryCode_number_2.phpt000066400000000000000000000005421336766562500255250ustar00rootroot00000000000000--FILE-- assert('076'); v::countryCode(CountryCode::NUMERIC)->assert('276'); v::countryCode(CountryCode::NUMERIC)->check('076'); v::countryCode(CountryCode::NUMERIC)->check('276'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/countryCode_number_3.phpt000066400000000000000000000005711336766562500255300ustar00rootroot00000000000000--FILE-- check('BRA'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "BRA" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_number_4.phpt000066400000000000000000000005601336766562500255270ustar00rootroot00000000000000--FILE-- assert('BRA'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "BRA" must be a valid country Validation-1.1.29/tests/integration/rules/countryCode_number_5.phpt000066400000000000000000000006051336766562500255300ustar00rootroot00000000000000--FILE-- check('076'); } catch (CountryCodeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "076" must not be a valid country Validation-1.1.29/tests/integration/rules/countryCode_number_6.phpt000066400000000000000000000005741336766562500255360ustar00rootroot00000000000000--FILE-- assert('076'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "076" must not be a valid country Validation-1.1.29/tests/integration/rules/cpf_1.phpt000066400000000000000000000002531336766562500224250ustar00rootroot00000000000000--FILE-- check('68786265440'); v::cpf()->assert('485.764.121-60'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/cpf_2.phpt000066400000000000000000000004461336766562500224320ustar00rootroot00000000000000--FILE-- check('this thing'); } catch (CpfException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "this thing" must be a valid CPF number Validation-1.1.29/tests/integration/rules/cpf_3.phpt000066400000000000000000000004561336766562500224340ustar00rootroot00000000000000--FILE-- assert('your mother'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "your mother" must be a valid CPF number Validation-1.1.29/tests/integration/rules/cpf_4.phpt000066400000000000000000000004711336766562500224320ustar00rootroot00000000000000--FILE-- check('276.865.775-11'); } catch (CpfException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "276.865.775-11" must not be a valid CPF number Validation-1.1.29/tests/integration/rules/cpf_5.phpt000066400000000000000000000005101336766562500224250ustar00rootroot00000000000000--FILE-- assert('368.928.062-10'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - "368.928.062-10" must not be a valid CPF number Validation-1.1.29/tests/integration/rules/creditCard_1.phpt000066400000000000000000000003061336766562500237200ustar00rootroot00000000000000--FILE-- assert('5555 4444 3333 1111'); v::creditCard()->check('4111 1111 1111 1111'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/creditCard_2.phpt000066400000000000000000000004631336766562500237250ustar00rootroot00000000000000--FILE-- check(0); } catch (CreditCardException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- 0 must be a valid Credit Card numberValidation-1.1.29/tests/integration/rules/creditCard_3.phpt000066400000000000000000000005351336766562500237260ustar00rootroot00000000000000--FILE-- check(5555444433331111); } catch (CreditCardException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- 5555444433331111 must not be a valid Credit Card numberValidation-1.1.29/tests/integration/rules/creditCard_4.phpt000066400000000000000000000005371336766562500237310ustar00rootroot00000000000000--FILE-- check(3566002020360505); } catch (CreditCardException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- 3566002020360505 must be a valid "Visa" Credit Card number Validation-1.1.29/tests/integration/rules/currencyCode_1.phpt000066400000000000000000000002511336766562500243000ustar00rootroot00000000000000--FILE-- assert('usd'); v::currencyCode()->check('BRL'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/currencyCode_2.phpt000066400000000000000000000004651336766562500243100ustar00rootroot00000000000000--FILE-- check('batman'); } catch (CurrencyCodeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "batman" must be a valid currency Validation-1.1.29/tests/integration/rules/currencyCode_3.phpt000066400000000000000000000004441336766562500243060ustar00rootroot00000000000000--FILE-- assert('ppz'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "ppz" must be a valid currency Validation-1.1.29/tests/integration/rules/currencyCode_4.phpt000066400000000000000000000004731336766562500243110ustar00rootroot00000000000000--FILE-- check('BRL'); } catch (CurrencyCodeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "BRL" must not be a valid currency Validation-1.1.29/tests/integration/rules/currencyCode_5.phpt000066400000000000000000000004601336766562500243060ustar00rootroot00000000000000--FILE-- assert('GBP'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "GBP" must not be a valid currency Validation-1.1.29/tests/integration/rules/digit_1.phpt000066400000000000000000000002211336766562500227500ustar00rootroot00000000000000--FILE-- assert(1); v::digit()->check(1); --EXPECTF-- Validation-1.1.29/tests/integration/rules/digit_2.phpt000066400000000000000000000004231336766562500227550ustar00rootroot00000000000000--FILE-- check('a'); } catch(DigitException $e) { echo $e->getMainMessage(); } --EXPECTF-- "a" must contain only digits (0-9) Validation-1.1.29/tests/integration/rules/digit_3.phpt000066400000000000000000000004261336766562500227610ustar00rootroot00000000000000--FILE-- assert('a'); } catch(AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "a" must contain only digits (0-9) Validation-1.1.29/tests/integration/rules/digit_4.phpt000066400000000000000000000004261336766562500227620ustar00rootroot00000000000000--FILE-- check(1); } catch(DigitException $e) { echo $e->getMainMessage(); } --EXPECTF-- 1 must not contain digits (0-9) Validation-1.1.29/tests/integration/rules/digit_5.phpt000066400000000000000000000004311336766562500227570ustar00rootroot00000000000000--FILE-- assert(1); } catch(AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - 1 must not contain digits (0-9) Validation-1.1.29/tests/integration/rules/email_1.phpt000066400000000000000000000002771336766562500227520ustar00rootroot00000000000000--FILE-- assert('batman@gothancity.com'); v::email()->check('jocker@gothancity.com'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/email_2.phpt000066400000000000000000000004331336766562500227450ustar00rootroot00000000000000--FILE-- check('batman'); } catch (EmailException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "batman" must be valid email Validation-1.1.29/tests/integration/rules/email_3.phpt000066400000000000000000000004471336766562500227530ustar00rootroot00000000000000--FILE-- assert('bruce wayne'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "bruce wayne" must be valid emailValidation-1.1.29/tests/integration/rules/email_4.phpt000066400000000000000000000005131336766562500227460ustar00rootroot00000000000000--FILE-- check('bruce.wayne@gothancity.com'); } catch (EmailException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "bruce.wayne@gothancity.com" must not be an emailValidation-1.1.29/tests/integration/rules/email_5.phpt000066400000000000000000000005131336766562500227470ustar00rootroot00000000000000--FILE-- assert('iambatman@gothancity.com'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "iambatman@gothancity.com" must not be an email Validation-1.1.29/tests/integration/rules/email_6.phpt000066400000000000000000000005011336766562500227450ustar00rootroot00000000000000--FILE-- check('iambatman@gothancity..com'); } catch (EmailException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "iambatman@gothancity..com" must be valid email Validation-1.1.29/tests/integration/rules/equals_1.phpt000066400000000000000000000002731336766562500231510ustar00rootroot00000000000000--FILE-- assert('test 123'); v::equals('test 123')->check('test 123'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/equals_2.phpt000066400000000000000000000004641336766562500231540ustar00rootroot00000000000000--FILE-- check('test 1234'); } catch (EqualsException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "test 1234" must be equals "test 123" Validation-1.1.29/tests/integration/rules/equals_3.phpt000066400000000000000000000004651336766562500231560ustar00rootroot00000000000000--FILE-- assert('test 1234'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "test 1234" must be equals "test 123" Validation-1.1.29/tests/integration/rules/equals_4.phpt000066400000000000000000000004761336766562500231610ustar00rootroot00000000000000--FILE-- check('test 123'); } catch (EqualsException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "test 123" must not be equals "test 123" Validation-1.1.29/tests/integration/rules/equals_5.phpt000066400000000000000000000004771336766562500231630ustar00rootroot00000000000000--FILE-- assert('test 123'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "test 123" must not be equals "test 123" Validation-1.1.29/tests/integration/rules/exists_1.phpt000066400000000000000000000006351336766562500232000ustar00rootroot00000000000000--FILE-- withContent(LargeFileContent::withKilobytes(2))->at($root); v::exists()->check($file->url()); $splFile = new SplFileInfo($file->url()); v::exists()->assert($splFile); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/exists_2.phpt000066400000000000000000000005031336766562500231730ustar00rootroot00000000000000--FILE-- check('/path/of/a/non-existent/file'); } catch (ExistsException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "/path/of/a/non-existent/file" must exists Validation-1.1.29/tests/integration/rules/floatType_1.phpt000066400000000000000000000002451336766562500236250ustar00rootroot00000000000000--FILE-- assert(42.23); v::floatType()->check(1984.23); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/floatType_2.phpt000066400000000000000000000004731336766562500236310ustar00rootroot00000000000000--FILE-- check('42.33'); } catch (FloatTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "42.33" must be of the type float Validation-1.1.29/tests/integration/rules/floatType_3.phpt000066400000000000000000000004741336766562500236330ustar00rootroot00000000000000--FILE-- assert('1984.233'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "1984.233" must be of the type float Validation-1.1.29/tests/integration/rules/floatType_4.phpt000066400000000000000000000005031336766562500236250ustar00rootroot00000000000000--FILE-- check(42.33); } catch (FloatTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- 42.33 must not be of the type float Validation-1.1.29/tests/integration/rules/floatType_5.phpt000066400000000000000000000005041336766562500236270ustar00rootroot00000000000000--FILE-- assert(1984.434); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - 1984.434 must not be of the type float Validation-1.1.29/tests/integration/rules/identityCard_1.phpt000066400000000000000000000003031336766562500242740ustar00rootroot00000000000000--FILE-- check('AYE205410'); v::identityCard('PL')->assert('AYE205410'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/identityCard_2.phpt000066400000000000000000000005431336766562500243030ustar00rootroot00000000000000--FILE-- check('AYE205411'); } catch (PlIdentityCardException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "AYE205411" must be a valid Polish Identity Card number Validation-1.1.29/tests/integration/rules/identityCard_3.phpt000066400000000000000000000005041336766562500243010ustar00rootroot00000000000000--FILE-- assert('AYE205411'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "AYE205411" must be a valid Polish Identity Card number Validation-1.1.29/tests/integration/rules/identityCard_4.phpt000066400000000000000000000005461336766562500243100ustar00rootroot00000000000000--FILE-- check('AYE205410'); } catch (IdentityCardException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "AYE205410" must not be a valid Identity Card number for "PL" Validation-1.1.29/tests/integration/rules/identityCard_5.phpt000066400000000000000000000005331336766562500243050ustar00rootroot00000000000000--FILE-- assert('AYE205410'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "AYE205410" must not be a valid Identity Card number for "PL" Validation-1.1.29/tests/integration/rules/image_1.phpt000066400000000000000000000003421336766562500227360ustar00rootroot00000000000000--FILE-- assert('tests/fixtures/valid-image.png'); v::image()->check(new SplFileInfo('tests/fixtures/valid-image.gif')); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/image_2.phpt000066400000000000000000000005421336766562500227410ustar00rootroot00000000000000--FILE-- check('tests/fixtures/invalid-image.png'); } catch (ImageException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "tests/fixtures/invalid-image.png" must be a valid image Validation-1.1.29/tests/integration/rules/image_3.phpt000066400000000000000000000005371336766562500227460ustar00rootroot00000000000000--FILE-- assert(new stdClass()); } catch (NestedValidationException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - `[object] (stdClass: { })` must be a valid image Validation-1.1.29/tests/integration/rules/image_4.phpt000066400000000000000000000005521336766562500227440ustar00rootroot00000000000000--FILE-- check('tests/fixtures/valid-image.png'); } catch (ImageException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "tests/fixtures/valid-image.png" must not be a valid image Validation-1.1.29/tests/integration/rules/image_5.phpt000066400000000000000000000006031336766562500227420ustar00rootroot00000000000000--FILE-- assert('tests/fixtures/valid-image.gif'); } catch (NestedValidationException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "tests/fixtures/valid-image.gif" must not be a valid image Validation-1.1.29/tests/integration/rules/imei_1.phpt000066400000000000000000000002611336766562500225770ustar00rootroot00000000000000--FILE-- check('490154203237518'); v::imei()->assert('356938035643809'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/imei_2.phpt000066400000000000000000000007511336766562500226040ustar00rootroot00000000000000--FILE-- check('497511659092062'); } catch (ImeiException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::imei()->assert([]); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "497511659092062" must be a valid IMEI - { } must be a valid IMEI Validation-1.1.29/tests/integration/rules/imei_3.phpt000066400000000000000000000010441336766562500226010ustar00rootroot00000000000000--FILE-- check('35-007752-323751-3'); } catch (ImeiException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::imei())->assert('350077523237513'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "35-007752-323751-3" must not be a valid IMEI - "350077523237513" must not be a valid IMEI Validation-1.1.29/tests/integration/rules/intType_1.phpt000066400000000000000000000002331336766562500233070ustar00rootroot00000000000000--FILE-- assert(42); v::intType()->check(1984); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/intType_2.phpt000066400000000000000000000004611336766562500233130ustar00rootroot00000000000000--FILE-- check('42'); } catch (IntTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "42" must be of the type integer Validation-1.1.29/tests/integration/rules/intType_3.phpt000066400000000000000000000004641336766562500233170ustar00rootroot00000000000000--FILE-- assert('1984'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "1984" must be of the type integer Validation-1.1.29/tests/integration/rules/intType_4.phpt000066400000000000000000000004711336766562500233160ustar00rootroot00000000000000--FILE-- check(42); } catch (IntTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- 42 must not be of the type integer Validation-1.1.29/tests/integration/rules/intType_5.phpt000066400000000000000000000004741336766562500233220ustar00rootroot00000000000000--FILE-- assert(1984); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - 1984 must not be of the type integer Validation-1.1.29/tests/integration/rules/ip_1.phpt000066400000000000000000000005171336766562500222700ustar00rootroot00000000000000--FILE-- validate('10.0.0.1'), $ip->validate('192.168.1.150'), $ip->assert('127.0.0.1'), $ip->validate('10,0.0.1'), $ip->validate(null) ); ?> --EXPECTF-- bool(true) bool(true) bool(true) bool(false) bool(false)Validation-1.1.29/tests/integration/rules/ip_2.phpt000066400000000000000000000003401336766562500222630ustar00rootroot00000000000000--FILE-- assert('192.168.1.150'); v::ip()->check('10.0.0.1'); v::ip('192.168.0.0-192.168.255.255')->check('192.168.2.6'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/ip_3.phpt000066400000000000000000000007171336766562500222740ustar00rootroot00000000000000--FILE-- check('foo'); } catch (IpException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::ip()->assert('foo'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "foo" must be an IP address - "foo" must be an IP addressValidation-1.1.29/tests/integration/rules/ip_4.phpt000066400000000000000000000007731336766562500222770ustar00rootroot00000000000000--FILE-- check('10.0.0.1'); } catch (IpException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::ip())->assert('10.0.0.1'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "10.0.0.1" must not be an IP address - "10.0.0.1" must not be an IP addressValidation-1.1.29/tests/integration/rules/ip_5.phpt000066400000000000000000000011071336766562500222700ustar00rootroot00000000000000--FILE-- check('127.0.0.1'); } catch (IpException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::ip('127.0.1.*')->assert('127.0.0.1'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "127.0.0.1" must be an IP address in the "127.0.1.0-127.0.1.255" range - "127.0.0.1" must be an IP address in the "127.0.1.0-127.0.1.255" rangeValidation-1.1.29/tests/integration/rules/ip_6.phpt000066400000000000000000000004151336766562500222720ustar00rootroot00000000000000--FILE-- getMessage(); } ?> --EXPECTF-- Invalid network rangeValidation-1.1.29/tests/integration/rules/iterableType_1.phpt000066400000000000000000000002721336766562500243070ustar00rootroot00000000000000--FILE-- assert([1, 2, 3]); v::iterableType()->check(new ArrayObject()); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/iterableType_2.phpt000066400000000000000000000004601336766562500243070ustar00rootroot00000000000000--FILE-- check(3); } catch (IterableTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- 3 must be iterable Validation-1.1.29/tests/integration/rules/iterableType_3.phpt000066400000000000000000000005101336766562500243040ustar00rootroot00000000000000--FILE-- check([2, 3]); } catch (IterableTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- { 2, 3 } must not be iterable Validation-1.1.29/tests/integration/rules/iterableType_4.phpt000066400000000000000000000004631336766562500243140ustar00rootroot00000000000000--FILE-- assert('String'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "String" must be iterable Validation-1.1.29/tests/integration/rules/iterableType_5.phpt000066400000000000000000000005271336766562500243160ustar00rootroot00000000000000--FILE-- assert(new stdClass()); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - `[object] (stdClass: { })` must not be iterable Validation-1.1.29/tests/integration/rules/keyNested_1.phpt000066400000000000000000000014571336766562500236170ustar00rootroot00000000000000--TEST-- keyNested() --FILE-- [ 'bar' => 123, ], ]; $object = new stdClass(); $object->foo = new stdClass(); $object->foo->bar = 42; var_dump(v::keyNested('foo.bar.baz')->validate(['foo.bar.baz' => false])); var_dump(v::keyNested('foo.bar')->validate($array)); var_dump(v::keyNested('foo.bar')->validate(new ArrayObject($array))); var_dump(v::keyNested('foo.bar', v::negative())->validate($array)); var_dump(v::keyNested('foo.bar')->validate($object)); var_dump(v::keyNested('foo.bar', v::stringType())->validate($object)); var_dump(v::keyNested('foo.bar.baz', v::notEmpty(), false)->validate($object)); ?> --EXPECTF-- bool(false) bool(true) bool(true) bool(false) bool(true) bool(false) bool(true) Validation-1.1.29/tests/integration/rules/keyValue_1.phpt000066400000000000000000000005771336766562500234530ustar00rootroot00000000000000--FILE-- 'shuberry', 'password_confirmation' => 'shuberry', 'valid_passwords' => ['shuberry', 'monty-python'], ]; v::keyValue('password', 'equals', 'password_confirmation')->check($data); v::keyValue('password', 'in', 'valid_passwords')->assert($data); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/keyValue_2.phpt000066400000000000000000000006661336766562500234530ustar00rootroot00000000000000--FILE-- 'shuberry', 'password_confirmation' => '_shuberry_', ]; try { v::keyValue('password', 'equals', 'password_confirmation')->check($data); } catch (EqualsException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- password must be equals "password_confirmation" Validation-1.1.29/tests/integration/rules/keyValue_3.phpt000066400000000000000000000007271336766562500234520ustar00rootroot00000000000000--FILE-- 'shazam', 'password_confirmation' => 'batman' ); try { v::keyValue('password', 'equals', 'password_confirmation')->assert($data); } catch (AllOfException $e) { echo $e->getMainMessage(); } --EXPECTF-- All of the required rules must pass for { "password": "shazam", "password_confirmation": "batman" }Validation-1.1.29/tests/integration/rules/keyValue_4.phpt000066400000000000000000000007211336766562500234450ustar00rootroot00000000000000--FILE-- '123', 'invalid_passwords' => array('123', 'secreta') ); try { v::not(v::keyValue('password', 'in', 'invalid_passwords'))->check($data); } catch (Exception $e) { echo $e->getMainMessage(); } --EXPECTF-- Key { "password": "123", "invalid_passwords": { "123", "secreta" } } must not be present Validation-1.1.29/tests/integration/rules/keyValue_5.phpt000066400000000000000000000007271336766562500234540ustar00rootroot00000000000000--FILE-- '123', 'invalid_passwords' => array('123', 'secreta') ); try { v::not(v::keyValue('password', 'in', 'invalid_passwords'))->assert($data); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - Key { "password": "123", "invalid_passwords": { "123", "secreta" } } must not be present Validation-1.1.29/tests/integration/rules/languagecode_1.phpt000066400000000000000000000011261336766562500242730ustar00rootroot00000000000000--FILE-- assert('pt'); v::languageCode()->assert('en'); v::languageCode()->assert('it'); v::languageCode()->check('pt'); v::languageCode()->check('en'); v::languageCode()->check('it'); v::languageCode('alpha-3')->assert('por'); v::languageCode('alpha-3')->assert('eng'); v::languageCode('alpha-3')->assert('ita'); v::languageCode('alpha-3')->check('por'); v::languageCode('alpha-3')->check('eng'); v::languageCode('alpha-3')->check('ita'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/languagecode_2.phpt000066400000000000000000000015201336766562500242720ustar00rootroot00000000000000--FILE-- check('pt'); } catch (LanguageCodeException $e) { echo $e->getMainMessage() . PHP_EOL; } try { v::languageCode()->assert('eng'); } catch (AllOfException $e) { echo $e->getFullMessage() . PHP_EOL; } try { v::not(v::languageCode())->assert('en'); } catch (AllOfException $e) { echo $e->getFullMessage() . PHP_EOL; } try { v::not(v::languageCode())->check('pt'); } catch (LanguageCodeException $e) { echo $e->getMainMessage() . PHP_EOL; } ?> --EXPECTF-- "pt" must be a valid language - "eng" must be a valid language - "en" must not be a valid language "pt" must not be a valid language Validation-1.1.29/tests/integration/rules/length_1.phpt000066400000000000000000000004201336766562500231320ustar00rootroot00000000000000--FILE-- validate('phpsp'); v::not($validator)->validate('phpsp'); $validator->assert('nickolas'); $validator->check('nawarian'); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/length_2.phpt000066400000000000000000000012541336766562500231410ustar00rootroot00000000000000--FILE-- check('nawarian'); } catch (LengthException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::length(13, null)->check('phpsp.org.br'); } catch (LengthException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::length(5, 20))->check('phpsp.org.br'); } catch (LengthException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- "nawarian" must have a length lower than 5 "phpsp.org.br" must have a length greater than 13 "phpsp.org.br" must not have a length between 5 and 20Validation-1.1.29/tests/integration/rules/length_3.phpt000066400000000000000000000005031336766562500231360ustar00rootroot00000000000000--FILE-- assert('phpsp.org.br'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "phpsp.org.br" must have a length between 3 and 5Validation-1.1.29/tests/integration/rules/minimumAge_1.phpt000066400000000000000000000003671336766562500237530ustar00rootroot00000000000000--FILE-- assert(new DateTime('1999-10-12')); v::MinimumAge(12)->check(new DateTime('1999-10-12')); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/minimumAge_2.phpt000066400000000000000000000005671336766562500237560ustar00rootroot00000000000000--FILE-- check(new DateTime('2010-10-12')); } catch (MinimumAgeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- The age must be 12 years or more. Validation-1.1.29/tests/integration/rules/minimumAge_3.phpt000066400000000000000000000002731336766562500237510ustar00rootroot00000000000000--FILE-- check('12/10/1999'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/minimumAge_4.phpt000066400000000000000000000005531336766562500237530ustar00rootroot00000000000000--FILE-- assert('12/10/2010'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - The age must be 12 years or more. Validation-1.1.29/tests/integration/rules/notBlank_1.phpt000066400000000000000000000011671336766562500234320ustar00rootroot00000000000000--FILE-- assert($value); v::notBlank()->check($value); } //Check the value inside an array foreach ($notBlankValues as $value) { v::notBlank()->assert([$value]); v::notBlank()->check([$value]); } //Check the value inside an object foreach ($notBlankValues as $value) { $obj = new stdClass(); $obj->testProp = $value; v::notBlank()->assert($obj); v::notBlank()->check($obj); } ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/notBlank_2.phpt000066400000000000000000000007301336766562500234260ustar00rootroot00000000000000--FILE-- check(null); } catch (NotBlankException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notBlank()->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- null must not be blank - "" must not be blank Validation-1.1.29/tests/integration/rules/notBlank_3.phpt000066400000000000000000000010001336766562500234160ustar00rootroot00000000000000--FILE-- setName('Field')->check(null); } catch (NotBlankException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notBlank()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must not be blank - Field must not be blank Validation-1.1.29/tests/integration/rules/notBlank_4.phpt000066400000000000000000000007361336766562500234360ustar00rootroot00000000000000--FILE-- check(1); } catch (NotBlankException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::notBlank())->assert([1]); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- 1 must be blank - { 1 } must be blank Validation-1.1.29/tests/integration/rules/notEmpty_1.phpt000066400000000000000000000005571336766562500235030ustar00rootroot00000000000000--FILE-- assert($value); v::notEmpty()->check($value); } //Check a not empty array v::notEmpty()->assert([1]); v::notEmpty()->check([1]); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/notEmpty_2.phpt000066400000000000000000000007301336766562500234750ustar00rootroot00000000000000--FILE-- check(null); } catch (NotEmptyException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notEmpty()->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- null must not be empty - "" must not be empty Validation-1.1.29/tests/integration/rules/notEmpty_3.phpt000066400000000000000000000010001336766562500234650ustar00rootroot00000000000000--FILE-- setName('Field')->check(null); } catch (NotEmptyException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notEmpty()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must not be empty - Field must not be empty Validation-1.1.29/tests/integration/rules/notEmpty_4.phpt000066400000000000000000000007361336766562500235050ustar00rootroot00000000000000--FILE-- check(1); } catch (NotEmptyException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::notEmpty())->assert([1]); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- 1 must be empty - { 1 } must be empty Validation-1.1.29/tests/integration/rules/notOptional_1.phpt000066400000000000000000000004011336766562500241560ustar00rootroot00000000000000--FILE-- check(0); v::notOptional()->assert(false); v::notOptional()->assert([]); v::notOptional()->check(true); v::notOptional()->check(PHP_EOL); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/notOptional_2.phpt000066400000000000000000000007521336766562500241700ustar00rootroot00000000000000--FILE-- check(null); } catch (NotOptionalException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notOptional()->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- null must not be optional - "" must not be optional Validation-1.1.29/tests/integration/rules/notOptional_3.phpt000066400000000000000000000010221336766562500241600ustar00rootroot00000000000000--FILE-- setName('Field')->check(null); } catch (NotOptionalException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::notOptional()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must not be optional - Field must not be optional Validation-1.1.29/tests/integration/rules/notOptional_4.phpt000066400000000000000000000012301336766562500241620ustar00rootroot00000000000000--FILE-- check(0); } catch (NotOptionalException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::notOptional())->assert([]); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } try { v::not(v::notOptional()->setName('Field'))->assert([]); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- The value must be optional - { } must be optional - Field must be optional Validation-1.1.29/tests/integration/rules/nullType_1.phpt000066400000000000000000000002371336766562500234730ustar00rootroot00000000000000--FILE-- assert(null); v::nullType()->check(null); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/nullType_2.phpt000066400000000000000000000007101336766562500234700ustar00rootroot00000000000000--FILE-- check(1); } catch (NullTypeException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::nullType()->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- 1 must be null - "" must be null Validation-1.1.29/tests/integration/rules/nullType_3.phpt000066400000000000000000000007641336766562500235020ustar00rootroot00000000000000--FILE-- setName('Field')->check(''); } catch (NullTypeException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::nullType()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must be null - Field must be null Validation-1.1.29/tests/integration/rules/nullType_4.phpt000066400000000000000000000007521336766562500235000ustar00rootroot00000000000000--FILE-- check(null); } catch (NullTypeException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::nullType())->assert(null); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- null must not be null - null must not be null Validation-1.1.29/tests/integration/rules/numeric_1.phpt000066400000000000000000000002331336766562500233150ustar00rootroot00000000000000--FILE-- assert(123); v::numeric()->check(123); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/numeric_2.phpt000066400000000000000000000007201336766562500233170ustar00rootroot00000000000000--FILE-- check('a'); } catch (NumericException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::numeric()->assert('a'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "a" must be numeric - "a" must be numeric Validation-1.1.29/tests/integration/rules/numeric_3.phpt000066400000000000000000000007701336766562500233250ustar00rootroot00000000000000--FILE-- setName('Field')->check(null); } catch (NumericException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::numeric()->setName('Field')->assert(''); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- Field must be numeric - Field must be numeric Validation-1.1.29/tests/integration/rules/numeric_4.phpt000066400000000000000000000007471336766562500233320ustar00rootroot00000000000000--FILE-- check('1'); } catch (NumericException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::numeric())->assert('1'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- "1" must not be numeric - "1" must not be numericValidation-1.1.29/tests/integration/rules/objectType_1.phpt000066400000000000000000000002671336766562500237720ustar00rootroot00000000000000--FILE-- assert(new stdClass()); v::objectType()->check(new stdClass()); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/objectType_2.phpt000066400000000000000000000011461336766562500237700ustar00rootroot00000000000000--FILE-- check(''); } catch (ObjectTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::objectType()->check(true); } catch (ObjectTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::objectType()->check(0); } catch (ObjectTypeException $exception) { echo $exception->getMainMessage().PHP_EOL; } ?> --EXPECTF-- "" must be an object true must be an object 0 must be an object Validation-1.1.29/tests/integration/rules/objectType_3.phpt000066400000000000000000000010151336766562500237640ustar00rootroot00000000000000--FILE-- assert(new stdClass); v::objectType()->check(new stdClass); ?> --EXPECTF-- --FILE-- check(new stdClass); } catch (ObjectTypeException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- `[object] (stdClass: { })` must not be an objectValidation-1.1.29/tests/integration/rules/objectType_4.phpt000066400000000000000000000003221336766562500237650ustar00rootroot00000000000000--FILE-- check(''); v::not(v::objectType())->check(true); v::not(v::objectType())->check(0); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/optional-assert.phpt000066400000000000000000000003111336766562500245540ustar00rootroot00000000000000--FILE-- assert(''); v::optional(v::alpha())->assert(null); ?> ===DONE=== --EXPECTF-- ===DONE=== Validation-1.1.29/tests/integration/rules/optional-check.phpt000066400000000000000000000003071336766562500243350ustar00rootroot00000000000000--FILE-- check(''); v::optional(v::alpha())->check(null); ?> ===DONE=== --EXPECTF-- ===DONE=== Validation-1.1.29/tests/integration/rules/optional-validate.phpt000066400000000000000000000005041336766562500250500ustar00rootroot00000000000000--FILE-- validate('')); var_dump(v::alpha()->validate(null)); var_dump(v::optional(v::alpha())->validate('')); var_dump(v::optional(v::alpha())->validate(null)); ?> --EXPECTF-- bool(false) bool(false) bool(true) bool(true) Validation-1.1.29/tests/integration/rules/optional_1.phpt000066400000000000000000000004661336766562500235100ustar00rootroot00000000000000--FILE-- validate(''), v::alpha()->validate(null), v::optional(v::alpha())->validate(''), v::optional(v::alpha())->validate(null) ); ?> --EXPECTF-- bool(false) bool(false) bool(true) bool(true) Validation-1.1.29/tests/integration/rules/optional_2.phpt000066400000000000000000000004751336766562500235110ustar00rootroot00000000000000--FILE-- check(null); } catch (OptionalException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- null must not be optional Validation-1.1.29/tests/integration/rules/optional_3.phpt000066400000000000000000000005261336766562500235070ustar00rootroot00000000000000--FILE-- setName('My field'))->check(null); } catch (OptionalException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- My field must not be optional Validation-1.1.29/tests/integration/rules/optional_4.phpt000066400000000000000000000002661336766562500235110ustar00rootroot00000000000000--FILE-- validate(''); v::optional(v::alpha())->validate(null); ?> --EXPECTF--Validation-1.1.29/tests/integration/rules/pesel_1.phpt000066400000000000000000000002571336766562500227710ustar00rootroot00000000000000--FILE-- check('21120209256'); v::pesel()->assert('21120209256'); --EXPECTF--;Validation-1.1.29/tests/integration/rules/pesel_2.phpt000066400000000000000000000004451336766562500227710ustar00rootroot00000000000000--FILE-- check('21120209251'); } catch (PeselException $e) { echo $e->getMainMessage(); } --EXPECTF--; "21120209251" must be a valid PESELValidation-1.1.29/tests/integration/rules/pesel_3.phpt000066400000000000000000000004461336766562500227730ustar00rootroot00000000000000--FILE-- assert('21120209251'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "21120209251" must be a valid PESELValidation-1.1.29/tests/integration/rules/pesel_4.phpt000066400000000000000000000004601336766562500227700ustar00rootroot00000000000000--FILE-- check('21120209256'); } catch (PeselException $e) { echo $e->getMainMessage(); } --EXPECTF-- "21120209256" must not be a valid PESELValidation-1.1.29/tests/integration/rules/pesel_5.phpt000066400000000000000000000004631336766562500227740ustar00rootroot00000000000000--FILE-- assert('21120209256'); } catch (AllOfException $e) { echo $e->getFullMessage(); } --EXPECTF-- - "21120209256" must not be a valid PESELValidation-1.1.29/tests/integration/rules/phplabel.phpt000066400000000000000000000005561336766562500232320ustar00rootroot00000000000000--TEST-- PhpLabel rule exception should not be thrown for valid inputs --FILE-- check('topic01'); v::phpLabel()->assert('access'); } catch (AllOfException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/phplabel_2.phpt000066400000000000000000000010401336766562500234400ustar00rootroot00000000000000--TEST-- PhpLabel rule exception should be thrown by check() method --FILE-- check('f o o'); } catch (PhpLabelException $e) { echo $e->getMainMessage().PHP_EOL; } try { v::not(v::phpLabel())->check('correctOne'); } catch (PhpLabelException $e) { echo $e->getMainMessage().PHP_EOL; } ?> --EXPECTF-- "f o o" must be a valid PHP label "correctOne" must not be a valid PHP label Validation-1.1.29/tests/integration/rules/phplabel_3.phpt000066400000000000000000000010301336766562500234400ustar00rootroot00000000000000--TEST-- PhpLabel rule exception should be thrown by assert() method --FILE-- assert('0wner'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } try { v::not(v::phpLabel())->assert('Respect'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - "0wner" must be a valid PHP label - "Respect" must not be a valid PHP label Validation-1.1.29/tests/integration/rules/slug_1.phpt000066400000000000000000000003111336766562500226220ustar00rootroot00000000000000--FILE-- check('getting-started-to-respect-validation'); v::slug()->assert('welcome-to-php-7'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/slug_2.phpt000066400000000000000000000004421336766562500226300ustar00rootroot00000000000000--FILE-- check('wrong slug'); } catch (SlugException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "wrong slug" must be a valid slugValidation-1.1.29/tests/integration/rules/slug_3.phpt000066400000000000000000000004471336766562500226360ustar00rootroot00000000000000--FILE-- assert('wrong slug'); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "wrong slug" must be a valid slug Validation-1.1.29/tests/integration/rules/slug_4.phpt000066400000000000000000000005001336766562500226250ustar00rootroot00000000000000--FILE-- check('good-and-valid-slug'); } catch (SlugException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "good-and-valid-slug" must not be a valid slug Validation-1.1.29/tests/integration/rules/slug_5.phpt000066400000000000000000000005151336766562500226340ustar00rootroot00000000000000--FILE-- assert('good-and-valid-slug'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - "good-and-valid-slug" must not be a valid slug Validation-1.1.29/tests/integration/rules/stringType_1.phpt000066400000000000000000000002701336766562500240240ustar00rootroot00000000000000--FILE-- assert('hello world'); v::stringType()->check('welcome to PHP'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/stringType_2.phpt000066400000000000000000000004351336766562500240300ustar00rootroot00000000000000--FILE-- check(42); } catch (StringTypeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- 42 must be a string Validation-1.1.29/tests/integration/rules/stringType_3.phpt000066400000000000000000000004251336766562500240300ustar00rootroot00000000000000--FILE-- assert(42); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - 42 must be a string Validation-1.1.29/tests/integration/rules/stringType_4.phpt000066400000000000000000000004741336766562500240350ustar00rootroot00000000000000--FILE-- check('hello world'); } catch (StringTypeException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "hello world" must not be string Validation-1.1.29/tests/integration/rules/stringType_5.phpt000066400000000000000000000004751336766562500240370ustar00rootroot00000000000000--FILE-- assert('hello world'); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - "hello world" must not be string Validation-1.1.29/tests/integration/rules/tld_1.phpt000066400000000000000000000002261336766562500224400ustar00rootroot00000000000000--FILE-- assert('com'); v::tld()->check('br'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/tld_2.phpt000066400000000000000000000004571336766562500224470ustar00rootroot00000000000000--FILE-- check('42'); } catch (TldException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "42" must be a valid top-level domain name Validation-1.1.29/tests/integration/rules/tld_3.phpt000066400000000000000000000004721336766562500224450ustar00rootroot00000000000000--FILE-- assert('1984'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "1984" must be a valid top-level domain name Validation-1.1.29/tests/integration/rules/tld_4.phpt000066400000000000000000000004751336766562500224510ustar00rootroot00000000000000--FILE-- check('com'); } catch (TldException $exception) { echo $exception->getMainMessage(); } ?> --EXPECTF-- "com" must not be a valid top-level domain name Validation-1.1.29/tests/integration/rules/tld_5.phpt000066400000000000000000000005041336766562500224430ustar00rootroot00000000000000--FILE-- assert('com'); } catch (AllOfException $exception) { echo $exception->getFullMessage(); } ?> --EXPECTF-- - "com" must not be a valid top-level domain name Validation-1.1.29/tests/integration/rules/when_1.phpt000066400000000000000000000011731336766562500226200ustar00rootroot00000000000000--FILE-- validate(3), v::when(new IntVal(), new Between(1, 5), new NotEmpty())->validate('aaa'), v::when(new IntVal(), new Between(1, 5))->validate(3), v::when(new IntVal(), new Between(1, 5), new NotEmpty())->validate(''), v::when(new IntVal(), new Between(1, 5))->validate(15) ); ?> --EXPECTF-- bool(true) bool(true) bool(true) bool(false) bool(false)Validation-1.1.29/tests/integration/rules/when_2.phpt000066400000000000000000000007101336766562500226150ustar00rootroot00000000000000--FILE-- assert(3); } catch (AllOfException $e) { echo $e->getFullMessage().PHP_EOL; } ?> --EXPECTF-- - Data validation failed for 3 Validation-1.1.29/tests/integration/rules/yes_1.phpt000066400000000000000000000001771336766562500224620ustar00rootroot00000000000000--FILE-- check('Yes'); ?> --EXPECTF-- Validation-1.1.29/tests/integration/rules/yes_2.phpt000066400000000000000000000004251336766562500224570ustar00rootroot00000000000000--FILE-- check('si'); } catch (YesException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "si" is not considered as "Yes" Validation-1.1.29/tests/integration/rules/yes_3.phpt000066400000000000000000000004341336766562500224600ustar00rootroot00000000000000--FILE-- assert(null); } catch (AllOfException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - null is not considered as "Yes" set_template_with_multiple_validators_should_use_template_as_full_message.phpt000066400000000000000000000007151336766562500374510ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- setTemplate() with multiple validators should use template as full message --FILE-- between(1, 2)->setTemplate('{{name}} is not tasty')->assert('something'); } catch (NestedValidationException $e) { echo $e->getFullMessage(); } ?> --EXPECTF-- - "something" is not tasty set_template_with_multiple_validators_should_use_template_as_main_message.phpt000066400000000000000000000007101336766562500374260ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- setTemplate() with multiple validators should use template as main message --FILE-- between(1, 2)->setTemplate('{{name}} is not tasty')->assert('something'); } catch (NestedValidationException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "something" is not tasty set_template_with_single_validator_should_use_template_as_main_message.phpt000066400000000000000000000012041336766562500366700ustar00rootroot00000000000000Validation-1.1.29/tests/integration--TEST-- setTemplate() with single validator should use template as main message --FILE-- setTemplate('{{name}} is not tasty'); try { $rule->assert('something'); } catch (NestedValidationException $e) { echo $e->getMainMessage(); } echo PHP_EOL; try { $rule->check('something'); } catch (NestedValidationException $e) { echo $e->getMainMessage(); } ?> --EXPECTF-- "something" is not tasty "something" is not tasty Validation-1.1.29/tests/integration/should_not_overwrite_defined_names.phpt000066400000000000000000000016201336766562500274270ustar00rootroot00000000000000--FILE-- 'not an email']; try { v::key('email', v::email()->setName('Email'))->setName('Foo')->check($input); } catch (ValidationException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { // This is a trick thing: the call to `setName()` here seems to be the one // from the `Key` rule but it's actually from the `Validator`. v::key('email', v::email())->setName('Email')->check($input); } catch (ValidationException $exception) { echo $exception->getMainMessage().PHP_EOL; } try { v::key('email', v::email())->check($input); } catch (ValidationException $exception) { echo $exception->getMainMessage().PHP_EOL; } ?> --EXPECTF-- Email must be valid email email must be valid email email must be valid email Validation-1.1.29/tests/integration/translator-assert.phpt000066400000000000000000000016341336766562500237770ustar00rootroot00000000000000--FILE-- 'Todas as regras requeridas devem passar para {{name}}', '{{name}} must be a string' => '{{name}} deve ser uma string', '{{name}} must have a length between {{minValue}} and {{maxValue}}' => '{{name}} deve possuir de {{minValue}} a {{maxValue}} caracteres', ]; return $messages[$message]; } try { Validator::stringType()->length(2, 15)->assert(0); } catch (NestedValidationException $exception) { $exception->setParam('translator', 'translatorCallback'); echo $exception->getFullMessage(); } ?> --EXPECTF-- - Todas as regras requeridas devem passar para 0 - 0 deve ser uma string - 0 deve possuir de 2 a 15 caracteres Validation-1.1.29/tests/integration/translator-check.phpt000066400000000000000000000010511336766562500235440ustar00rootroot00000000000000--FILE-- '{{name}} deve ser uma string', ]; return $messages[$message]; } try { Validator::stringType()->length(2, 15)->check(0); } catch (ValidationException $exception) { $exception->setParam('translator', 'translatorCallback'); echo $exception->getMainMessage(); } ?> --EXPECTF-- 0 deve ser uma string Validation-1.1.29/tests/library/000077500000000000000000000000001336766562500165275ustar00rootroot00000000000000Validation-1.1.29/tests/library/Rules/000077500000000000000000000000001336766562500176215ustar00rootroot00000000000000Validation-1.1.29/tests/library/Rules/RuleTestCase.php000066400000000000000000000055121336766562500227000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Validatable; abstract class RuleTestCase extends \PHPUnit_Framework_TestCase { /** * It is to provide constructor arguments and. * * @return array */ abstract public function providerForValidInput(); /** * @return array */ abstract public function providerForInvalidInput(); /** * @param bool $expectedResult * @param string[optional] $mockClassName * * @return \Respect\Validation\Validatable */ public function getRuleMock($expectedResult, $mockClassName = '') { $ruleMocked = $this->getMockBuilder('Respect\Validation\Validatable') ->disableOriginalConstructor() ->setMethods( [ 'assert', 'check', 'getName', 'reportError', 'setName', 'setTemplate', 'validate', ] ) ->setMockClassName($mockClassName) ->getMock(); $ruleMocked ->expects($this->any()) ->method('validate') ->willReturn($expectedResult) ; if ($expectedResult) { $ruleMocked ->expects($this->any()) ->method('check') ->willReturn($expectedResult) ; $ruleMocked ->expects($this->any()) ->method('assert') ->willReturn($expectedResult) ; } else { $ruleMocked ->expects($this->any()) ->method('check') ->willThrowException(new ValidationException('Exception for '.$mockClassName.':check() method')) ; $ruleMocked ->expects($this->any()) ->method('assert') ->willThrowException(new ValidationException('Exception for '.$mockClassName.':assert() method')) ; } return $ruleMocked; } /** * @dataProvider providerForValidInput * * @param Validatable $validator * @param mixed $input */ public function testShouldValidateValidInput(Validatable $validator, $input) { $this->assertTrue($validator->validate($input)); } /** * @dataProvider providerForInvalidInput * * @param Validatable $validator * @param mixed $input */ public function testShouldValidateInvalidInput(Validatable $validator, $input) { $this->assertFalse($validator->validate($input)); } } Validation-1.1.29/tests/unit/000077500000000000000000000000001336766562500160425ustar00rootroot00000000000000Validation-1.1.29/tests/unit/Exceptions/000077500000000000000000000000001336766562500201635ustar00rootroot00000000000000Validation-1.1.29/tests/unit/Exceptions/CheckExceptionsTest.php000066400000000000000000000044211336766562500246140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use DirectoryIterator; use ReflectionClass; class CheckExceptionsTest extends \PHPUnit_Framework_TestCase { protected $deprecateds = ['Iterable']; public function provideListOfRuleNames() { $rulesDirectory = 'library/Rules'; $rulesDirectoryIterator = new DirectoryIterator($rulesDirectory); $ruleNames = []; foreach ($rulesDirectoryIterator as $fileInfo) { if ($fileInfo->isDir()) { continue; } $ruleName = substr($fileInfo->getBasename(), 0, -4); $ruleIsDeprecated = in_array($ruleName, $this->deprecateds); $isRuleClassFile = (bool) ($fileInfo->getExtension() !== 'php'); if ($ruleIsDeprecated || $isRuleClassFile) { continue; } $className = 'Respect\\Validation\\Rules\\'.$ruleName; $reflectionClass = new ReflectionClass($className); if ($reflectionClass->isAbstract() || $reflectionClass->isInterface()) { continue; } $ruleNames[] = [$ruleName]; } return $ruleNames; } /** * @dataProvider provideListOfRuleNames */ public function testRuleHasAnExceptionWhichHasValidApi($ruleName) { $exceptionClass = 'Respect\\Validation\\Exceptions\\'.$ruleName.'Exception'; $this->assertTrue( class_exists($exceptionClass), sprintf('Expected exception class to exist: %s.', $ruleName) ); $expectedMessage = 'Test exception message.'; $exceptionObject = new $exceptionClass($expectedMessage); $this->assertInstanceOf( 'Exception', $exceptionObject, 'Every exception should extend an Exception class.' ); $this->assertInstanceOf( 'Respect\Validation\Exceptions\ValidationException', $exceptionObject, 'Every Respect/Validation exception must extend ValidationException.' ); } } Validation-1.1.29/tests/unit/Exceptions/NestedValidationExceptionTest.php000066400000000000000000000043171336766562500266550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; /** * phpunit has an issue with mocking exceptions when in HHVM: * https://github.com/sebastianbergmann/phpunit-mock-objects/issues/207. */ class PrivateNestedValidationException extends NestedValidationException { } class NestedValidationExceptionTest extends \PHPUnit_Framework_TestCase { public function testGetRelatedShouldReturnExceptionAddedByAddRelated() { $composite = new AttributeException(); $node = new IntValException(); $composite->addRelated($node); $this->assertEquals(1, count($composite->getRelated(true))); $this->assertContainsOnly($node, $composite->getRelated()); } public function testAddingTheSameInstanceShouldAddJustASingleReference() { $composite = new AttributeException(); $node = new IntValException(); $composite->addRelated($node); $composite->addRelated($node); $composite->addRelated($node); $this->assertEquals(1, count($composite->getRelated(true))); $this->assertContainsOnly($node, $composite->getRelated()); } public function testFindRelatedShouldFindCompositeExceptions() { $foo = new AttributeException(); $bar = new AttributeException(); $baz = new AttributeException(); $bat = new AttributeException(); $foo->configure('foo'); $bar->configure('bar'); $baz->configure('baz'); $bat->configure('bat'); $foo->addRelated($bar); $bar->addRelated($baz); $baz->addRelated($bat); $this->assertSame($bar, $foo->findRelated('bar')); $this->assertSame($baz, $foo->findRelated('baz')); $this->assertSame($baz, $foo->findRelated('bar.baz')); $this->assertSame($baz, $foo->findRelated('baz')); $this->assertSame($bat, $foo->findRelated('bar.bat')); $this->assertNull($foo->findRelated('none')); $this->assertNull($foo->findRelated('bar.none')); } } Validation-1.1.29/tests/unit/Exceptions/ValidationExceptionTest.php000066400000000000000000000125151336766562500255110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Exceptions; use ArrayIterator; use DateTime; use Exception; use SplFileInfo; use stdClass; class ValidationExceptionTest extends \PHPUnit_Framework_TestCase { public function testItImplementsExceptionInterface() { $validationException = new ValidationException(); $this->assertInstanceOf('Respect\Validation\Exceptions\ExceptionInterface', $validationException); } /** * @dataProvider providerForFormat */ public function testFormatShouldReplacePlaceholdersProperly($template, $result, $vars) { $this->assertEquals( $result, ValidationException::format($template, $vars) ); } /** * @dataProvider providerForStringify */ public function testStringifyShouldConvertStringsProperly($input, $result) { $this->assertStringMatchesFormat( $result, ValidationException::stringify($input) ); } public function testGetMainMessageShouldApplyTemplatePlaceholders() { $sampleValidationException = new ValidationException(); $sampleValidationException->configure('foo', ['bar' => 1, 'baz' => 2]); $sampleValidationException->setTemplate('{{name}} {{bar}} {{baz}}'); $this->assertEquals( 'foo 1 2', $sampleValidationException->getMainMessage() ); } public function testSettingTemplates() { $x = new ValidationException(); $x->configure('bar'); $x->setTemplate('foo'); $this->assertEquals('foo', $x->getTemplate()); } public function providerForStringify() { $object1 = new SplFileInfo('stringify.phpt'); // __toString() $object2 = new DateTime('1988-09-09 23:59:59'); $object3 = new stdClass(); $object4 = new stdClass(); $object4->foo = 1; $object4->bar = false; $object5 = new stdClass(); $objectRecursive = $object5; for ($i = 0; $i < 10; ++$i) { $objectRecursive->name = new stdClass(); $objectRecursive = $objectRecursive->name; } $exception = new Exception('My message'); $iterator1 = new ArrayIterator([1, 2, 3]); $iterator2 = new ArrayIterator(['a' => 1, 'b' => 2, 'c' => 3]); return [ ['', '""'], ['foo', '"foo"'], [INF, 'INF'], [-INF, '-INF'], [acos(4), 'NaN'], [123, '123'], [123.456, '123.456'], [[], '{ }'], [[false], '{ false }'], [[1,2,3,4,5,6,7,8,9,10], '{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }'], [range(1, 80), '{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... }'], [ ['foo' => true, 'bar' => ['baz' => 123, 'qux' => [1, 2, 3]]], '{ "foo": true, "bar": { "baz": 123, "qux": { 1, 2, 3 } } }', ], [ ['foo' => true, 'bar' => ['baz' => 123, 'qux' => ['norf' => [1,2,3]]]], '{ "foo": true, "bar": { "baz": 123, "qux": { "norf": ... } } }', ], [[[], 'foo'], '{ { }, "foo" }'], [[[1], 'foo'], '{ { 1 }, "foo" }'], [[1, [2, [3]]], '{ 1, { 2, { 3 } } }'], [[1, [2, [3, [4]]]], '{ 1, { 2, { 3, ... } } }'], [[1, [2, [3, [4, [5]]]]], '{ 1, { 2, { 3, ... } } }'], [['foo', 'bar'], '{ "foo", "bar" }'], [['foo', -1], '{ "foo", -1 }'], [$object1, '"stringify.phpt"'], [$object2, sprintf('"%s"', $object2->format('Y-m-d H:i:s'))], [$object3, '`[object] (stdClass: { })`'], [$object4, '`[object] (stdClass: { "foo": 1, "bar": false })`'], [$object5, '`[object] (stdClass: { "name": [object] (stdClass: ...) })`'], [ $exception, '`[exception] (Exception: { "message": "My message", "code": 0, "file": "%s:%d" })`', ], [$iterator1, '`[traversable] (ArrayIterator: { 1, 2, 3 })`'], [$iterator2, '`[traversable] (ArrayIterator: { "a": 1, "b": 2, "c": 3 })`'], [stream_context_create(), '`[resource] (stream-context)`'], [tmpfile(), '`[resource] (stream)`'], [xml_parser_create(), '`[resource] (xml)`'], [ [$object4, [42, 43], true, null, tmpfile()], '{ `[object] (stdClass: { "foo": 1, "bar": false })`, { 42, 43 }, true, null, `[resource] (stream)` }', ], ]; } public function providerForFormat() { return [ [ '{{foo}} {{bar}} {{baz}}', '"hello" "world" "respect"', ['foo' => 'hello', 'bar' => 'world', 'baz' => 'respect'], ], [ '{{foo}} {{bar}} {{baz}}', '"hello" {{bar}} "respect"', ['foo' => 'hello', 'baz' => 'respect'], ], [ '{{foo}} {{bar}} {{baz}}', '"hello" {{bar}} "respect"', ['foo' => 'hello', 'bot' => 111, 'baz' => 'respect'], ], ]; } } Validation-1.1.29/tests/unit/FactoryTest.php000066400000000000000000000070761336766562500210340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation; /** * @covers Respect\Validation\Factory */ class FactoryTest extends \PHPUnit_Framework_TestCase { public function testShouldHaveRulePrefixesByDefault() { $factory = new Factory(); $this->assertEquals(['Respect\\Validation\\Rules\\'], $factory->getRulePrefixes()); } /** * @dataProvider provideRulePrefixes */ public function testShouldBeAbleToAppendANewPrefix($namespace, $expectedNamespace) { $factory = new Factory(); $factory->appendRulePrefix($namespace); $currentRulePrefixes = $factory->getRulePrefixes(); $this->assertSame( $expectedNamespace, array_pop($currentRulePrefixes), 'Appended namespace rule was not found as expected into the prefix list.' . PHP_EOL . sprintf( 'Appended "%s", current list is ' . PHP_EOL . '%s', $namespace, implode(PHP_EOL, $factory->getRulePrefixes()) ) ); } /** * @dataProvider provideRulePrefixes */ public function testShouldBeAbleToPrependANewRulePrefix($namespace, $expectedNamespace) { $factory = new Factory(); $factory->prependRulePrefix($namespace); $currentRulePrefixes = $factory->getRulePrefixes(); $this->assertContains( $expectedNamespace, array_shift($currentRulePrefixes), 'Prepended namespace rule was not found as expected into the prefix list.' . PHP_EOL . sprintf( 'Prepended "%s", current list is ' . PHP_EOL . '%s', $namespace, implode(PHP_EOL, $factory->getRulePrefixes()) ) ); } public function provideRulePrefixes() { return [ 'Namespace with trailing separator' => [ 'namespace' => 'My\\Validation\\Rules\\', 'expected' => 'My\\Validation\\Rules\\' ], 'Namespace without trailing separator' => [ 'namespace' => 'My\\Validation\\Rules', 'expected' => 'My\\Validation\\Rules\\' ] ]; } public function testShouldCreateARuleByName() { $factory = new Factory(); $this->assertInstanceOf('Respect\\Validation\\Rules\\Uppercase', $factory->rule('uppercase')); } public function testShouldDefineConstructorArgumentsWhenCreatingARule() { $factory = new Factory(); $rule = $factory->rule('date', ['Y-m-d']); $this->assertEquals('Y-m-d', $rule->format); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "uterere" is not a valid rule name */ public function testShouldThrowsAnExceptionWhenRuleNameIsNotValid() { $factory = new Factory(); $factory->rule('uterere'); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "Respect\Validation\Exceptions\AgeException" is not a valid respect rule */ public function testShouldThrowsAnExceptionWhenRuleIsNotInstanceOfRuleInterface() { $factory = new Factory(); $factory->appendRulePrefix('Respect\\Validation\\Exceptions\\'); $factory->rule('AgeException'); } } Validation-1.1.29/tests/unit/Rules/000077500000000000000000000000001336766562500171345ustar00rootroot00000000000000Validation-1.1.29/tests/unit/Rules/AbstractCompositeTest.php000066400000000000000000000177641336766562500241520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AbstractCompositeTest extends \PHPUnit_Framework_TestCase { public function testShouldDefineNameForInternalWhenAppendRuleToCompositeRule() { $ruleName = 'something'; $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->once()) ->method('getName') ->will($this->returnValue(null)); $simpleRuleMock ->expects($this->once()) ->method('setName') ->with($ruleName); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->setName($ruleName); $compositeRuleMock->addRule($simpleRuleMock); } public function testShouldUpdateInternalRuleNameWhenNameIsUpdated() { $ruleName1 = 'something'; $ruleName2 = 'something else'; $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->at(0)) ->method('getName') ->will($this->returnValue(null)); $simpleRuleMock ->expects($this->at(2)) ->method('getName') ->will($this->returnValue($ruleName1)); $simpleRuleMock ->expects($this->at(1)) ->method('setName') ->with($ruleName1); $simpleRuleMock ->expects($this->at(3)) ->method('setName') ->with($ruleName2); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->setName($ruleName1); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->setName($ruleName2); } public function testShouldNotUpdateInternalRuleAlreadyHasAName() { $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->any()) ->method('getName') ->will($this->returnValue('something')); $simpleRuleMock ->expects($this->never()) ->method('setName'); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->setName('Whatever'); } public function testShouldUpdateInternalRuleWhenItsNameIsNull() { $ruleName = 'something'; $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->any()) ->method('getName') ->will($this->returnValue(null)); $simpleRuleMock ->expects($this->once()) ->method('setName') ->with($ruleName); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->setName($ruleName); } public function testShouldDefineNameForInternalRulesWhenItHasNotAName() { $ruleName = 'something'; $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->any()) ->method('getName') ->will($this->returnValue(null)); $simpleRuleMock ->expects($this->once()) ->method('setName') ->with($ruleName); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->setName($ruleName); } public function testShouldNotDefineNameForInternalRulesWhenItHasAName() { $ruleName = 'something'; $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $simpleRuleMock ->expects($this->any()) ->method('getName') ->will($this->returnValue($ruleName)); $simpleRuleMock ->expects($this->never()) ->method('setName'); $compositeRuleMock = $this ->getMockBuilder('Respect\\Validation\\Rules\\AbstractComposite') ->setMethods(['validate']) ->getMockForAbstractClass(); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->setName($ruleName); } public function testRemoveRulesShouldRemoveAllTheAddedRules() { $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $compositeRuleMock->addRule($simpleRuleMock); $compositeRuleMock->removeRules(); $this->assertEmpty($compositeRuleMock->getRules()); } public function testShouldReturnTheAmountOfAddedRules() { $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $compositeRuleMock->addRule($this->getMock('Respect\\Validation\\Validatable')); $compositeRuleMock->addRule($this->getMock('Respect\\Validation\\Validatable')); $compositeRuleMock->addRule($this->getMock('Respect\\Validation\\Validatable')); $this->assertCount(3, $compositeRuleMock->getRules()); } public function testHasRuleShouldReturnFalseWhenThereIsNoRuleAppended() { $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $this->assertFalse($compositeRuleMock->hasRule('')); } public function testHasRuleShouldReturnFalseWhenRuleIsNotFound() { $oneSimpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $compositeRuleMock->addRule($oneSimpleRuleMock); $anotherSimpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $this->assertFalse($compositeRuleMock->hasRule($anotherSimpleRuleMock)); } public function testHasRuleShouldReturnFalseWhenRulePassedAsStringIsNotFound() { $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $compositeRuleMock->addRule($simpleRuleMock); $this->assertFalse($compositeRuleMock->hasRule('SomeRule')); } public function testHasRuleShouldReturnTrueWhenRuleIsFound() { $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite'); $compositeRuleMock->addRule($simpleRuleMock); $this->assertTrue($compositeRuleMock->hasRule($simpleRuleMock)); } public function testShouldAddRulesByPassingThroughConstructor() { $simpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $anotherSimpleRuleMock = $this->getMock('Respect\\Validation\\Validatable'); $compositeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractComposite', [ $simpleRuleMock, $anotherSimpleRuleMock ]); $this->assertCount(2, $compositeRuleMock->getRules()); } } Validation-1.1.29/tests/unit/Rules/AbstractCtypeRuleTest.php000066400000000000000000000022241336766562500241050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AbstractCtypeRuleTest extends \PHPUnit_Framework_TestCase { public function testValidateCleanShouldReturnTrueWhenCtypeFunctionReturnsTrue() { $ctypeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractCtypeRule'); $ctypeRuleMock->expects($this->once()) ->method('ctypeFunction') ->will($this->returnValue(true)); $this->assertTrue($ctypeRuleMock->validateClean('anything')); } public function testValidateCleanShouldReturnFalseWhenCtypeFunctionReturnsFalse() { $ctypeRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractCtypeRule'); $ctypeRuleMock->expects($this->once()) ->method('ctypeFunction') ->will($this->returnValue(false)); $this->assertFalse($ctypeRuleMock->validateClean('anything')); } } Validation-1.1.29/tests/unit/Rules/AbstractFilterRuleTest.php000066400000000000000000000030061336766562500242450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AbstractFilterRuleTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage Invalid list of additional characters to be loaded */ public function testConstructorShouldThrowExceptionIfParamIsNotString() { $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractFilterRule', [1]); } public function testValidateShouldReturnTrueForValidArguments() { $filterRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractFilterRule'); $filterRuleMock->expects($this->any()) ->method('validateClean') ->will($this->returnValue(true)); $this->assertTrue($filterRuleMock->validate('hey')); } public function testValidateShouldReturnFalseForInvalidArguments() { $filterRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractFilterRule'); $filterRuleMock->expects($this->any()) ->method('validateClean') ->will($this->returnValue(true)); $this->assertFalse($filterRuleMock->validate('')); $this->assertFalse($filterRuleMock->validate([])); } } Validation-1.1.29/tests/unit/Rules/AbstractRegexRuleTest.php000066400000000000000000000022271336766562500240760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AbstractRegexRuleTest extends \PHPUnit_Framework_TestCase { public function testValidateCleanShouldReturnOneIfPatternIsFound() { $regexRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractRegexRule'); $regexRuleMock->expects($this->once()) ->method('getPregFormat') ->will($this->returnValue('/^Respect$/')); $this->assertEquals(1, $regexRuleMock->validateClean('Respect')); } public function testValidateCleanShouldReturnZeroIfPatternIsNotFound() { $regexRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractRegexRule'); $regexRuleMock->expects($this->once()) ->method('getPregFormat') ->will($this->returnValue('/^Respect$/')); $this->assertEquals(0, $regexRuleMock->validateClean('Validation')); } } Validation-1.1.29/tests/unit/Rules/AbstractRelatedTest.php000066400000000000000000000127441336766562500235610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; final class AbstractRelatedTest extends \PHPUnit_Framework_TestCase { const NAME = 'Respect\\Validation\\Rules\\AbstractRelated'; public function providerForOperations() { return [ ['validate'], ['check'], ['assert'], ]; } public function testConstructionOfAbstractRelatedClass() { $validatableMock = $this->getMock('Respect\\Validation\\Validatable'); $relatedRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractRelated', ['foo', $validatableMock]); $this->assertEquals('foo', $relatedRuleMock->getName()); $this->assertEquals('foo', $relatedRuleMock->reference); $this->assertTrue($relatedRuleMock->mandatory); $this->assertInstanceOf('Respect\\Validation\\Validatable', $relatedRuleMock->validator); } /** * @dataProvider providerForOperations */ public function testOperationsShouldReturnTrueWhenReferenceValidatesItsValue($method) { $validatableMock = $this->getMock('Respect\\Validation\\Validatable'); $validatableMock->expects($this->any()) ->method($method) ->will($this->returnValue(true)); $relatedRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractRelated', ['foo', $validatableMock]); $relatedRuleMock->expects($this->any()) ->method('hasReference') ->will($this->returnValue(true)); $this->assertTrue($relatedRuleMock->$method('foo')); } public function testValidateShouldReturnFalseWhenIsMandatoryAndThereIsNoReference() { $relatedRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractRelated', ['foo']); $relatedRuleMock->expects($this->any()) ->method('hasReference') ->will($this->returnValue(false)); $this->assertFalse($relatedRuleMock->validate('foo')); } public function testShouldAcceptReferenceOnConstructor() { $reference = 'something'; $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs([$reference]) ->getMock(); $this->assertSame($reference, $abstractMock->reference); } public function testShouldBeMandatoryByDefault() { $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something']) ->getMock(); $this->assertTrue($abstractMock->mandatory); } public function testShouldAcceptReferenceAndRuleOnConstructor() { $ruleMock = $this->getMock('Respect\\Validation\\Validatable'); $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something', $ruleMock]) ->getMock(); $this->assertSame($ruleMock, $abstractMock->validator); } public function testShouldDefineRuleNameAsReferenceWhenRuleDoesNotHaveAName() { $reference = 'something'; $ruleMock = $this->getMock('Respect\\Validation\\Validatable'); $ruleMock ->expects($this->at(0)) ->method('getName') ->will($this->returnValue(null)); $ruleMock ->expects($this->at(1)) ->method('setName') ->with($reference); $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something', $ruleMock]) ->getMock(); $this->assertSame($ruleMock, $abstractMock->validator); } public function testShouldNotDefineRuleNameAsReferenceWhenRuleDoesHaveAName() { $reference = 'something'; $ruleMock = $this->getMock('Respect\\Validation\\Validatable'); $ruleMock ->expects($this->at(0)) ->method('getName') ->will($this->returnValue('something else')); $ruleMock ->expects($this->never()) ->method('setName'); $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something', $ruleMock]) ->getMock(); $this->assertSame($ruleMock, $abstractMock->validator); } public function testShouldAcceptMandatoryFlagOnConstructor() { $mandatory = false; $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something', $this->getMock('Respect\\Validation\\Validatable'), $mandatory]) ->getMock(); $this->assertSame($mandatory, $abstractMock->mandatory); } public function testShouldDefineChildNameWhenDefiningTheNameOfTheParent() { $name = 'My new name'; $reference = 'something'; $ruleMock = $this->getMock('Respect\\Validation\\Validatable'); $ruleMock ->expects($this->at(0)) ->method('getName') ->will($this->returnValue('something else')); $ruleMock ->expects($this->at(1)) ->method('setName') ->with($name); $abstractMock = $this ->getMockBuilder(self::NAME) ->setConstructorArgs(['something', $ruleMock]) ->getMock(); $ruleMock->setName($name); } } Validation-1.1.29/tests/unit/Rules/AbstractRuleTest.php000066400000000000000000000152471336766562500231110ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; class AbstractRuleTest extends \PHPUnit_Framework_TestCase { public function providerForTrueAndFalse() { return [ [true], [false], ]; } /** * @dataProvider providerForTrueAndFalse * @covers Respect\Validation\Rules\AbstractRule::__invoke */ public function testMagicMethodInvokeCallsValidateWithInput($booleanResult) { $input = 'something'; $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMethods(['validate']) ->getMockForAbstractClass(); $abstractRuleMock ->expects($this->once()) ->method('validate') ->with($input) ->will($this->returnValue($booleanResult)); $this->assertEquals( $booleanResult, // Invoking it to trigger __invoke $abstractRuleMock($input), 'When invoking an instance of AbstractRule, the method validate should be called with the same input and return the same result.' ); } /** * @covers Respect\Validation\Rules\AbstractRule::assert */ public function testAssertInvokesValidateOnSuccess() { $input = 'something'; $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMethods(['validate']) ->getMockForAbstractClass(); $abstractRuleMock ->expects($this->once()) ->method('validate') ->with($input) ->will($this->returnValue(true)); $abstractRuleMock ->expects($this->never()) ->method('reportError'); $abstractRuleMock->assert($input); } /** * @covers Respect\Validation\Rules\AbstractRule::assert * @expectedException Respect\Validation\Exceptions\ValidationException */ public function testAssertInvokesValidateAndReportErrorOnFailure() { $input = 'something'; $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMethods(['validate', 'reportError']) ->getMockForAbstractClass(); $abstractRuleMock ->expects($this->once()) ->method('validate') ->with($input) ->will($this->returnValue(false)); $abstractRuleMock ->expects($this->once()) ->method('reportError') ->with($input) ->will($this->throwException(new ValidationException())); $abstractRuleMock->assert($input); } /** * @covers Respect\Validation\Rules\AbstractRule::check */ public function testCheckInvokesAssertToPerformTheValidationByDefault() { $input = 'something'; $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMethods(['assert']) ->getMockForAbstractClass(); $abstractRuleMock ->expects($this->once()) ->method('assert') ->with($input); $abstractRuleMock->check($input); } /** * @covers Respect\Validation\Rules\AbstractRule::reportError * @covers Respect\Validation\Rules\AbstractRule::createException */ public function testShouldCreateExceptionBasedOnTheCurrentClassName() { if (defined('HHVM_VERSION')) { return $this->markTestSkipped('If you are a HHVM user, and you are in the mood, please fix it'); } $exceptionMock = $this ->getMockBuilder('Respect\Validation\Exceptions\ValidationException') ->setMockClassName('MockRule1Exception') ->getMock(); $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMockClassName('MockRule1') ->getMockForAbstractClass(); $exception = $abstractRuleMock->reportError('something'); $this->assertInstanceOf(get_class($exceptionMock), $exception); } /** * @covers Respect\Validation\Rules\AbstractRule::reportError * @covers Respect\Validation\Rules\AbstractRule::setTemplate */ public function testShouldUseDefinedTemplateOnCreatedException() { $template = 'This is my template'; $exceptionMock = $this ->getMockBuilder('Respect\Validation\Exceptions\ValidationException') ->setMethods(['setTemplate']) ->getMock(); $exceptionMock ->expects($this->once()) ->method('setTemplate') ->with($template); $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->setMethods(['createException']) ->getMockForAbstractClass(); $abstractRuleMock ->expects($this->once()) ->method('createException') ->will($this->returnValue($exceptionMock)); $abstractRuleMock->setTemplate($template); $abstractRuleMock->reportError('something'); } /** * @covers Respect\Validation\Rules\AbstractRule::setTemplate */ public function testShouldReturnTheCurrentObjectWhenDefinigTemplate() { $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->getMockForAbstractClass(); $this->assertSame($abstractRuleMock, $abstractRuleMock->setTemplate('whatever')); } /** * @covers Respect\Validation\Rules\AbstractRule::setName */ public function testShouldReturnTheCurrentObjectWhenDefinigName() { $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->getMockForAbstractClass(); $this->assertSame($abstractRuleMock, $abstractRuleMock->setName('whatever')); } /** * @covers Respect\Validation\Rules\AbstractRule::setName * @covers Respect\Validation\Rules\AbstractRule::getName */ public function testShouldBeAbleToDefineAndRetrivedRuleName() { $abstractRuleMock = $this ->getMockBuilder('Respect\Validation\Rules\AbstractRule') ->getMockForAbstractClass(); $name = 'something'; $abstractRuleMock->setName($name); $this->assertSame($name, $abstractRuleMock->getName()); } } Validation-1.1.29/tests/unit/Rules/AbstractSearcherTest.php000066400000000000000000000067461336766562500237420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class AbstractSearcherTest extends \PHPUnit_Framework_TestCase { protected $searcherRuleMock; protected function setUp() { $this->searcherRuleMock = $this->getMockForAbstractClass('Respect\\Validation\\Rules\\AbstractSearcher'); } public function testValidateShouldReturnTrueWhenEqualValueIsFoundInHaystack() { $this->searcherRuleMock->haystack = [1, 2, 3, 4]; $this->assertTrue($this->searcherRuleMock->validate('1')); $this->assertTrue($this->searcherRuleMock->validate(1)); } public function testValidateShouldReturnFalseWhenEqualValueIsNotFoundInHaystack() { $this->searcherRuleMock->haystack = [1, 2, 3, 4]; $this->assertFalse($this->searcherRuleMock->validate(5)); } public function testValidateShouldReturnTrueWhenIdenticalValueIsFoundInHaystack() { $this->searcherRuleMock->haystack = [1, 2, 3, 4]; $this->searcherRuleMock->compareIdentical = true; $this->assertTrue($this->searcherRuleMock->validate(1)); $this->assertTrue($this->searcherRuleMock->validate(4)); } public function testValidateShouldReturnFalseWhenIdenticalValueIsNotFoundInHaystack() { $this->searcherRuleMock->haystack = [1, 2, 3, 4]; $this->searcherRuleMock->compareIdentical = true; $this->assertFalse($this->searcherRuleMock->validate('1')); $this->assertFalse($this->searcherRuleMock->validate('4')); $this->assertFalse($this->searcherRuleMock->validate(5)); } public function testValidateShouldReturnTrueWhenInputIsEmptyOrNullAndIdenticalToHaystack() { $this->searcherRuleMock->compareIdentical = true; $this->assertTrue($this->searcherRuleMock->validate(null)); $this->searcherRuleMock->haystack = ''; $this->assertTrue($this->searcherRuleMock->validate('')); } public function testValidateShouldReturnFalseWhenInputIsEmptyOrNullAndNotIdenticalToHaystack() { $this->searcherRuleMock->compareIdentical = true; $this->assertFalse($this->searcherRuleMock->validate('')); $this->searcherRuleMock->haystack = ''; $this->assertFalse($this->searcherRuleMock->validate(null)); } public function testValidateShouldReturnTrueWhenInputIsEmptyOrNullAndEqualsHaystack() { $this->assertTrue($this->searcherRuleMock->validate('')); $this->assertTrue($this->searcherRuleMock->validate(null)); } public function testValidateShouldReturnFalseWhenInputIsEmptyOrNullAndNotEqualsHaystack() { $this->searcherRuleMock->haystack = 'Respect'; $this->assertFalse($this->searcherRuleMock->validate('')); $this->assertFalse($this->searcherRuleMock->validate(null)); } public function testValidateWhenHaystackIsNotArrayAndInputIsPartOfHaystack() { $this->searcherRuleMock->haystack = 'Respect'; $this->assertTrue($this->searcherRuleMock->validate('Res')); $this->assertTrue($this->searcherRuleMock->validate('RES')); $this->searcherRuleMock->compareIdentical = true; $this->assertFalse($this->searcherRuleMock->validate('RES')); $this->assertTrue($this->searcherRuleMock->validate('Res')); } } Validation-1.1.29/tests/unit/Rules/AbstractWrapperTest.php000066400000000000000000000070351336766562500236160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ReflectionObject; class AbstractWrapperTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage There is no defined validatable */ public function testShouldThrowsAnExceptionWhenWrappedValidatableIsNotDefined() { $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $wrapper->getValidatable(); } private function bindValidatable($wrapper, $validatable) { $reflectionObject = new ReflectionObject($wrapper); $reflectionProperty = $reflectionObject->getProperty('validatable'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($wrapper, $validatable); } public function testShouldReturnDefinedValidatable() { $validatable = $this->getMock('Respect\Validation\Validatable'); $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $this->bindValidatable($wrapper, $validatable); $this->assertSame($validatable, $wrapper->getValidatable()); } public function testShouldUseWrappedToValidate() { $input = 'Whatever'; $validatable = $this->getMock('Respect\Validation\Validatable'); $validatable ->expects($this->once()) ->method('validate') ->with($input) ->will($this->returnValue(true)); $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $this->bindValidatable($wrapper, $validatable); $this->assertTrue($wrapper->validate($input)); } public function testShouldUseWrappedToAssert() { $input = 'Whatever'; $validatable = $this->getMock('Respect\Validation\Validatable'); $validatable ->expects($this->once()) ->method('assert') ->with($input) ->will($this->returnValue(true)); $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $this->bindValidatable($wrapper, $validatable); $this->assertTrue($wrapper->assert($input)); } public function testShouldUseWrappedToCheck() { $input = 'Whatever'; $validatable = $this->getMock('Respect\Validation\Validatable'); $validatable ->expects($this->once()) ->method('check') ->with($input) ->will($this->returnValue(true)); $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $this->bindValidatable($wrapper, $validatable); $this->assertTrue($wrapper->check($input)); } public function testShouldPassNameOnToWrapped() { $name = 'Whatever'; $validatable = $this->getMock('Respect\Validation\Validatable'); $validatable ->expects($this->once()) ->method('setName') ->with($name) ->will($this->returnValue($validatable)); $wrapper = $this->getMockForAbstractClass('Respect\Validation\Rules\AbstractWrapper'); $this->bindValidatable($wrapper, $validatable); $this->assertSame($wrapper, $wrapper->setName($name)); } } Validation-1.1.29/tests/unit/Rules/AgeTest.php000066400000000000000000000101401336766562500211750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\Age * @covers Respect\Validation\Exceptions\AgeException */ class AgeTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage An age interval must be provided */ public function testShouldThrowsExceptionWhenThereIsNoArgumentsOnConstructor() { new Age(); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage 20 cannot be greater than or equals to 10 */ public function testShouldThrowsExceptionWhenMinimumAgeIsLessThenMaximumAge() { new Age(20, 10); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage 20 cannot be greater than or equals to 20 */ public function testShouldThrowsExceptionWhenMinimumAgeIsEqualsToMaximumAge() { new Age(20, 20); } public function providerForValidAge() { return [ [18, null, date('Y-m-d', strtotime('-18 years'))], [18, null, date('Y-m-d', strtotime('-19 years'))], [18, null, new DateTime('-18 years')], [18, null, new DateTime('-19 years')], [18, 50, date('Y-m-d', strtotime('-18 years'))], [18, 50, date('Y-m-d', strtotime('-50 years'))], [18, 50, new DateTime('-18 years')], [18, 50, new DateTime('-50 years')], [null, 50, date('Y-m-d', strtotime('-49 years'))], [null, 50, date('Y-m-d', strtotime('-50 years'))], [null, 50, new DateTime('-49 years')], [null, 50, new DateTime('-50 years')], ]; } /** * @dataProvider providerForValidAge */ public function testShouldValidateValidAge($minAge, $maxAge, $input) { $rule = new Age($minAge, $maxAge); $this->assertTrue($rule->validate($input)); } public function providerForInvalidAge() { return [ [18, null, date('Y-m-d', strtotime('-17 years'))], [18, null, new DateTime('-17 years')], [18, 50, date('Y-m-d', strtotime('-17 years'))], [18, 50, date('Y-m-d', strtotime('-51 years'))], [18, 50, new DateTime('-17 years')], [18, 50, new DateTime('-51 years')], [null, 50, date('Y-m-d', strtotime('-51 years'))], [null, 50, new DateTime('-51 years')], ]; } /** * @dataProvider providerForInvalidAge */ public function testShouldValidateInvalidAge($minAge, $maxAge, $input) { $rule = new Age($minAge, $maxAge); $this->assertFalse($rule->validate($input)); } /** * @depends testShouldValidateInvalidAge * * @expectedException Respect\Validation\Exceptions\AgeException * @expectedExceptionMessage "today" must be lower than 18 years ago */ public function testShouldThrowsExceptionWhenMinimumAgeFails() { $rule = new Age(18); $rule->assert('today'); } /** * @depends testShouldValidateInvalidAge * * @expectedException Respect\Validation\Exceptions\AgeException * @expectedExceptionMessage "51 years ago" must be greater than 50 years ago */ public function testShouldThrowsExceptionWhenMaximunAgeFails() { $rule = new Age(null, 50); $rule->assert('51 years ago'); } /** * @depends testShouldValidateInvalidAge * * @expectedException Respect\Validation\Exceptions\AgeException * @expectedExceptionMessage "today" must be between 18 and 50 years ago */ public function testShouldThrowsExceptionWhenMinimunAndMaximunAgeFails() { $rule = new Age(18, 50); $rule->assert('today'); } } Validation-1.1.29/tests/unit/Rules/AllOfTest.php000066400000000000000000000073541336766562500215130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\AllOf * @covers Respect\Validation\Exceptions\AllOfException */ class AllOfTest extends \PHPUnit_Framework_TestCase { public function testRemoveRulesShouldRemoveAllRules() { $o = new AllOf(new IntVal(), new Positive()); $o->removeRules(); $this->assertEquals(0, count($o->getRules())); } public function testAddRulesUsingArrayOfRules() { $o = new AllOf(); $o->addRules( [ [$x = new IntVal(), new Positive()], ] ); $this->assertTrue($o->hasRule($x)); $this->assertTrue($o->hasRule('Positive')); } public function testAddRulesUsingSpecificationArray() { $o = new AllOf(); $o->addRules(['Between' => [1, 2]]); $this->assertTrue($o->hasRule('Between')); } public function testValidationShouldWorkIfAllRulesReturnTrue() { $valid1 = new Callback(function () { return true; }); $valid2 = new Callback(function () { return true; }); $valid3 = new Callback(function () { return true; }); $o = new AllOf($valid1, $valid2, $valid3); $this->assertTrue($o->__invoke('any')); $this->assertTrue($o->check('any')); $this->assertTrue($o->assert('any')); $this->assertTrue($o->__invoke('')); $this->assertTrue($o->check('')); $this->assertTrue($o->assert('')); } /** * @dataProvider providerStaticDummyRules * @expectedException Respect\Validation\Exceptions\AllOfException */ public function testValidationAssertShouldFailIfAnyRuleFailsAndReturnAllExceptionsFailed($v1, $v2, $v3) { $o = new AllOf($v1, $v2, $v3); $this->assertFalse($o->__invoke('any')); $this->assertFalse($o->assert('any')); } /** * @dataProvider providerStaticDummyRules * @expectedException Respect\Validation\Exceptions\CallbackException */ public function testValidationCheckShouldFailIfAnyRuleFailsAndThrowTheFirstExceptionOnly($v1, $v2, $v3) { $o = new AllOf($v1, $v2, $v3); $this->assertFalse($o->__invoke('any')); $this->assertFalse($o->check('any')); } /** * @dataProvider providerStaticDummyRules * @expectedException Respect\Validation\Exceptions\ValidationException */ public function testValidationCheckShouldFailOnEmptyInput($v1, $v2, $v3) { $o = new AllOf($v1, $v2, $v3); $this->assertTrue($o->check('')); } /** * @dataProvider providerStaticDummyRules */ public function testValidationShouldFailIfAnyRuleFails($v1, $v2, $v3) { $o = new AllOf($v1, $v2, $v3); $this->assertFalse($o->__invoke('any')); } public function providerStaticDummyRules() { $theInvalidOne = new Callback(function () { return false; }); $valid1 = new Callback(function () { return true; }); $valid2 = new Callback(function () { return true; }); return [ [$theInvalidOne, $valid1, $valid2], [$valid2, $valid1, $theInvalidOne], [$valid2, $theInvalidOne, $valid1], [$valid1, $valid2, $theInvalidOne], [$valid1, $theInvalidOne, $valid2], ]; } } Validation-1.1.29/tests/unit/Rules/AlnumTest.php000066400000000000000000000056421336766562500215700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Alnum * @covers Respect\Validation\Exceptions\AlnumException */ class AlnumTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidAlnum */ public function testValidAlnumCharsShouldReturnTrue($validAlnum, $additional) { $validator = new Alnum($additional); $this->assertTrue($validator->validate($validAlnum)); } /** * @dataProvider providerForInvalidAlnum * @expectedException Respect\Validation\Exceptions\AlnumException */ public function testInvalidAlnumCharsShouldThrowAlnumExceptionAndReturnFalse($invalidAlnum, $additional) { $validator = new Alnum($additional); $this->assertFalse($validator->validate($invalidAlnum)); $this->assertFalse($validator->assert($invalidAlnum)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Alnum($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Alnum($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} abc 123'], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n abc 123"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidAlnum() { return [ ['alganet', ''], ['foo :- 123 !', '- ! :'], ['number 100%', '%'], ['0alg-anet0', '0-9'], ['1', ''], ["\t", ''], ["\n", ''], ['a', ''], ['foobar', ''], ['rubinho_', '_'], ['google.com', '.'], ['alganet alganet', ''], ["\nabc", ''], ["\tdef", ''], ["\nabc \t", ''], [0, ''], ]; } public function providerForInvalidAlnum() { return [ ['', ''], ['number 100%', ''], ['@#$', ''], ['_', ''], ['dgç', ''], [1e21, ''], //evaluates to "1.0E+21" [null, ''], [new \stdClass(), ''], [[], ''], ]; } } Validation-1.1.29/tests/unit/Rules/AlphaTest.php000066400000000000000000000057271336766562500215450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Alpha * @covers Respect\Validation\Exceptions\AlphaException */ class AlphaTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidAlpha */ public function testValidAlphanumericCharsShouldReturnTrue($validAlpha, $additional) { $validator = new Alpha($additional); $this->assertTrue($validator->validate($validAlpha)); $this->assertTrue($validator->check($validAlpha)); $this->assertTrue($validator->assert($validAlpha)); } /** * @dataProvider providerForInvalidAlpha * @expectedException Respect\Validation\Exceptions\AlphaException */ public function testInvalidAlphanumericCharsShouldThrowAlphaException($invalidAlpha, $additional) { $validator = new Alpha($additional); $this->assertFalse($validator->validate($invalidAlpha)); $this->assertFalse($validator->assert($invalidAlpha)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentException($additional) { $validator = new Alpha($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Alpha($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} abc'], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n abc"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidAlpha() { return [ ['alganet', ''], ['alganet', 'alganet'], ['0alg-anet0', '0-9'], ['a', ''], ["\t", ''], ["\n", ''], ['foobar', ''], ['rubinho_', '_'], ['google.com', '.'], ['alganet alganet', ''], ["\nabc", ''], ["\tdef", ''], ["\nabc \t", ''], ]; } public function providerForInvalidAlpha() { return [ ['', ''], ['@#$', ''], ['_', ''], ['dgç', ''], ['122al', ''], ['122', ''], [11123, ''], [1e21, ''], [0, ''], [null, ''], [new \stdClass(), ''], [[], ''], ]; } } Validation-1.1.29/tests/unit/Rules/AlwaysInvalidTest.php000066400000000000000000000016741336766562500232640ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\AlwaysInvalid */ class AlwaysInvalidTest extends \PHPUnit_Framework_TestCase { public function providerForValidAlwaysInvalid() { return [ [0], [1], ['string'], [true], [false], [null], [''], [[]], [['array_full']], ]; } /** * @dataProvider providerForValidAlwaysInvalid */ public function testShouldValidateInputWhenItIsAValidAlwaysInvalid($input) { $rule = new AlwaysInvalid(); $this->assertFalse($rule->validate($input)); } } Validation-1.1.29/tests/unit/Rules/AlwaysValidTest.php000066400000000000000000000016571336766562500227360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\AlwaysValid */ class AlwaysValidTest extends \PHPUnit_Framework_TestCase { public function providerForValidAlwaysValid() { return [ [0], [1], ['string'], [true], [false], [null], [''], [[]], [['array_full']], ]; } /** * @dataProvider providerForValidAlwaysValid */ public function testShouldValidateInputWhenItIsAValidAlwaysValid($input) { $rule = new AlwaysValid(); $this->assertTrue($rule->validate($input)); } } Validation-1.1.29/tests/unit/Rules/ArrayTypeTest.php000066400000000000000000000015741336766562500224340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\ArrayType */ class ArrayTypeTest extends RuleTestCase { public function providerForValidInput() { $rule = new ArrayType(); return [ [$rule, []], [$rule, [1, 2, 3]], ]; } public function providerForInvalidInput() { $rule = new ArrayType(); return [ [$rule, 'test'], [$rule, 1], [$rule, 1.0], [$rule, true], [$rule, new \ArrayObject()], [$rule, new \ArrayIterator()], ]; } } Validation-1.1.29/tests/unit/Rules/ArrayValTest.php000066400000000000000000000016171336766562500222330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\ArrayVal */ class ArrayValTest extends RuleTestCase { public function providerForValidInput() { $rule = new ArrayVal(); return [ [$rule, []], [$rule, [1, 2, 3]], [$rule, new \ArrayObject()], ]; } public function providerForInvalidInput() { $rule = new ArrayVal(); return [ [$rule, ''], [$rule, null], [$rule, 121], [$rule, new \stdClass()], [$rule, false], [$rule, 'aaa'], ]; } } Validation-1.1.29/tests/unit/Rules/AttributeTest.php000066400000000000000000000122111336766562500224450ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; class PrivClass { private $bar = 'foo'; } /** * @group rule * @covers Respect\Validation\Rules\Attribute * @covers Respect\Validation\Exceptions\AttributeException */ class AttributeTest extends \PHPUnit_Framework_TestCase { public function testAttributeWithNoExtraValidationShouldCheckItsPresence() { $validator = new Attribute('bar'); $obj = new \stdClass(); $obj->bar = 'foo'; $this->assertTrue($validator->check($obj)); $this->assertTrue($validator->__invoke($obj)); $this->assertTrue($validator->assert($obj)); } /** * @expectedException Respect\Validation\Exceptions\AttributeException */ public function testAbsentAttributeShouldRaiseAttributeException() { $validator = new Attribute('bar'); $obj = new \stdClass(); $obj->baraaaaa = 'foo'; $this->assertFalse($validator->__invoke($obj)); $this->assertFalse($validator->assert($obj)); } /** * @expectedException Respect\Validation\Exceptions\ValidationException */ public function testAbsentAttributeShouldRaiseAttributeException_on_check() { $validator = new Attribute('bar'); $obj = new \stdClass(); $obj->baraaaaa = 'foo'; $this->assertFalse($validator->__invoke($obj)); $this->assertFalse($validator->check($obj)); } /** * @dataProvider providerForInvalidAttributeNames * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorArgumentsShouldThrowComponentException($attributeName) { $validator = new Attribute($attributeName); } public function providerForInvalidAttributeNames() { return [ [new \stdClass()], [123], [''], ]; } public function testExtraValidatorRulesForAttribute() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new \stdClass(); $obj->bar = 'foo'; $this->assertTrue($validator->__invoke($obj)); $this->assertTrue($validator->assert($obj)); $this->assertTrue($validator->check($obj)); } /** * @expectedException Respect\Validation\Exceptions\AttributeException */ public function testShouldNotValidateEmptyString() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new \stdClass(); $obj->bar = 'foo'; $this->assertFalse($validator->__invoke('')); $validator->assert(''); } public function testExtraValidatorRulesForAttribute_should_fail_if_invalid() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new \stdClass(); $obj->bar = 'foo hey this has more than 3 chars'; $this->assertFalse($validator->__invoke($obj)); } /** * @expectedException Respect\Validation\Exceptions\LengthException */ public function testExtraValidatorRulesForAttribute_should_raise_extra_validator_exception_on_check() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new \stdClass(); $obj->bar = 'foo hey this has more than 3 chars'; $this->assertFalse($validator->check($obj)); } /** * @expectedException Respect\Validation\Exceptions\AttributeException */ public function testExtraValidatorRulesForAttribute_should_raise_AttributeException_on_assert() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new \stdClass(); $obj->bar = 'foo hey this has more than 3 chars'; $this->assertFalse($validator->assert($obj)); } public function testNotMandatoryAttributeShouldNotFailWhenAttributeIsAbsent() { $validator = new Attribute('bar', null, false); $obj = new \stdClass(); $this->assertTrue($validator->__invoke($obj)); } public function testNotMandatoryAttributeShouldNotFailWhenAttributeIsAbsent_with_extra_validator() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator, false); $obj = new \stdClass(); $this->assertTrue($validator->__invoke($obj)); } public function testPrivateAttributeShouldAlsoBeChecked() { $subValidator = new Length(1, 3); $validator = new Attribute('bar', $subValidator); $obj = new PrivClass(); $this->assertTrue($validator->assert($obj)); } public function testPrivateAttributeShouldFailIfNotValid() { $subValidator = new Length(33333, 888888); $validator = new Attribute('bar', $subValidator); $obj = new PrivClass(); $this->assertFalse($validator->__invoke($obj)); } } Validation-1.1.29/tests/unit/Rules/BaseTest.php000066400000000000000000000054111336766562500213600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Base * @covers Respect\Validation\Exceptions\BaseException */ class BaseTest extends \PHPUnit_Framework_TestCase { protected $object; /** * @dataProvider providerForBase */ public function testBase($base, $input) { $object = new Base($base); $this->assertTrue($object->__invoke($input)); $this->assertTrue($object->check($input)); $this->assertTrue($object->assert($input)); } /** * @dataProvider providerForInvalidBase */ public function testInvalidBase($base, $input) { $object = new Base($base); $this->assertFalse($object->__invoke($input)); } /** * @dataProvider providerForExceptionBase * @expectedException Respect\Validation\Exceptions\BaseException */ public function testExceptionBase($base, $input) { $object = new Base($base); $this->assertTrue($object->__invoke($input)); $this->assertTrue($object->assert($input)); } /** * @dataProvider providerForCustomBase */ public function testCustomBase($base, $custom, $input) { $object = new Base($base, $custom); $this->assertTrue($object->__invoke($input)); $this->assertTrue($object->check($input)); $this->assertTrue($object->assert($input)); } public function providerForBase() { return [ [2, '011010001'], [3, '0120122001'], [8, '01234567520'], [16, '012a34f5675c20d'], [20, '012ah34f5675hic20dj'], [50, '012ah34f56A75FGhic20dj'], [62, 'Z01xSsg5675hic20dj'], ]; } public function providerForInvalidBase() { return [ [2, ''], [3, ''], [8, ''], [16, ''], [20, ''], [50, ''], [62, ''], [2, '01210103001'], [3, '0120125f2001'], [8, '01234dfZ567520'], [16, '012aXS34f5675c20d'], [20, '012ahZX34f5675hic20dj'], [50, '012ahGZ34f56A75FGhic20dj'], [61, 'Z01xSsg5675hic20dj'], ]; } public function providerForCustomBase() { return [ [2, 'xy', 'xyyxyxxy'], [3, 'pfg', 'gfpffp'], ]; } public function providerForExceptionBase() { return [ [63, '01210103001'], [125, '0120125f2001'], ]; } } Validation-1.1.29/tests/unit/Rules/BetweenTest.php000066400000000000000000000046511336766562500221040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\Between * @covers Respect\Validation\Exceptions\BetweenException */ class BetweenTest extends \PHPUnit_Framework_TestCase { public function providerValid() { return [ [0, 1, true, 0], [0, 1, true, 1], [10, 20, false, 15], [10, 20, true, 20], [-10, 20, false, -5], [-10, 20, false, 0], ['a', 'z', false, 'j'], [ new DateTime('yesterday'), new DateTime('tomorrow'), false, new DateTime('now'), ], ]; } public function providerInvalid() { return [ [10, 20, false, ''], [10, 20, true, ''], [0, 1, false, 0], [0, 1, false, 1], [0, 1, false, 2], [0, 1, false, -1], [10, 20, false, 999], [10, 20, false, 20], [-10, 20, false, -11], ['a', 'j', false, 'z'], [ new DateTime('yesterday'), new DateTime('now'), false, new DateTime('tomorrow'), ], ]; } /** * @dataProvider providerValid */ public function testValuesBetweenBoundsShouldPass($min, $max, $inclusive, $input) { $o = new Between($min, $max, $inclusive); $this->assertTrue($o->__invoke($input)); $this->assertTrue($o->assert($input)); $this->assertTrue($o->check($input)); } /** * @dataProvider providerInvalid * @expectedException Respect\Validation\Exceptions\BetweenException */ public function testValuesOutBoundsShouldRaiseException($min, $max, $inclusive, $input) { $o = new Between($min, $max, $inclusive); $this->assertFalse($o->__invoke($input)); $this->assertFalse($o->assert($input)); } /** * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructionParamsShouldRaiseException() { $o = new Between(10, 5); } } Validation-1.1.29/tests/unit/Rules/BoolTypeTest.php000066400000000000000000000033031336766562500222410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\BoolType * @covers Respect\Validation\Exceptions\BoolTypeException */ class BoolTypeTest extends \PHPUnit_Framework_TestCase { public function testBooleanValuesONLYShouldReturnTrue() { $validator = new BoolType(); $this->assertTrue($validator->__invoke(true)); $this->assertTrue($validator->__invoke(false)); $this->assertTrue($validator->assert(true)); $this->assertTrue($validator->assert(false)); $this->assertTrue($validator->check(true)); $this->assertTrue($validator->check(false)); } /** * @expectedException Respect\Validation\Exceptions\BoolTypeException */ public function testInvalidBooleanShouldRaiseException() { $validator = new BoolType(); $this->assertFalse($validator->check('foo')); } public function testInvalidBooleanValuesShouldReturnFalse() { $validator = new BoolType(); $this->assertFalse($validator->__invoke('')); $this->assertFalse($validator->__invoke('foo')); $this->assertFalse($validator->__invoke(123123)); $this->assertFalse($validator->__invoke(new \stdClass())); $this->assertFalse($validator->__invoke([])); $this->assertFalse($validator->__invoke(1)); $this->assertFalse($validator->__invoke(0)); $this->assertFalse($validator->__invoke(null)); } } Validation-1.1.29/tests/unit/Rules/BoolValTest.php000066400000000000000000000016731336766562500220520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\BoolVal */ class BoolValTest extends RuleTestCase { public function providerForValidInput() { $rule = new BoolVal(); return [ [$rule, true], [$rule, 1], [$rule, 'on'], [$rule, 'yes'], [$rule, 0], [$rule, false], [$rule, 'off'], [$rule, 'no '], [$rule, ''], ]; } public function providerForInvalidInput() { $rule = new BoolVal(); return [ [$rule, 'ok'], [$rule, 'yep'], [$rule, 10], ]; } } Validation-1.1.29/tests/unit/Rules/BsnTest.php000066400000000000000000000036321336766562500212330ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; /** * @group rule * @covers Respect\Validation\Rules\Bsn * @covers Respect\Validation\Exceptions\BsnException */ class BsnTest extends PHPUnit_Framework_TestCase { /** * @var Bsn */ private $rule; /** * {@inheritdoc} */ protected function setUp() { $this->rule = new Bsn(); } /** * @dataProvider providerForBsn * * @param string $input */ public function testShouldValidateBsn($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForInvalidBsn * * @param string $input */ public function testShouldNotValidateBsn($input) { $this->assertFalse($this->rule->validate($input)); } /** * @return array */ public function providerForBsn() { return [ ['612890053'], ['087880532'], ['386625918'], ['601608021'], ['254650703'], ['478063441'], ['478063441'], ['187368429'], ['541777348'], ['254283883'], ]; } /** * @return array */ public function providerForInvalidBsn() { return [ ['1234567890'], ['0987654321'], ['13579024'], ['612890054'], ['854650703'], ['283958721'], ['231859081'], ['189023323'], ['238150912'], ['382409678'], ['38240.678'], ['38240a678'], ['abcdefghi'], ]; } } Validation-1.1.29/tests/unit/Rules/CallTest.php000066400000000000000000000032341336766562500213620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Call * @covers Respect\Validation\Exceptions\CallException */ class CallTest extends \PHPUnit_Framework_TestCase { public function thisIsASampleCallbackUsedInsideThisTest() { return []; } public function testCallbackValidatorShouldAcceptEmptyString() { $v = new Call('str_split', new ArrayVal()); $this->assertTrue($v->assert('')); } public function testCallbackValidatorShouldAcceptStringWithFunctionName() { $v = new Call('str_split', new ArrayVal()); $this->assertTrue($v->assert('test')); } public function testCallbackValidatorShouldAcceptArrayCallbackDefinition() { $v = new Call([$this, 'thisIsASampleCallbackUsedInsideThisTest'], new ArrayVal()); $this->assertTrue($v->assert('test')); } public function testCallbackValidatorShouldAcceptClosures() { $v = new Call(function () { return []; }, new ArrayVal()); $this->assertTrue($v->assert('test')); } /** * @expectedException Respect\Validation\Exceptions\CallException */ public function testCallbackFailedShouldThrowCallException() { $v = new Call('strrev', new ArrayVal()); $this->assertFalse($v->validate('test')); $this->assertFalse($v->assert('test')); } } Validation-1.1.29/tests/unit/Rules/CallableTypeTest.php000066400000000000000000000032551336766562500230530ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\CallableType * @covers Respect\Validation\Exceptions\CallableTypeException */ class CallableTypeTest extends \PHPUnit_Framework_TestCase { protected $rule; protected function setUp() { $this->rule = new CallableType(); } /** * @dataProvider providerForCallable */ public function testShouldValidateCallableTypeNumbers($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForNonCallable */ public function testShouldNotValidateNonCallableTypeNumbers($input) { $this->assertFalse($this->rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\CallableTypeException * @expectedExceptionMessage "testShouldThrowCallableTypeExceptionWhenChecking" must be a callable */ public function testShouldThrowCallableTypeExceptionWhenChecking() { $this->rule->check(__FUNCTION__); } public function providerForCallable() { return [ [function () {}], ['trim'], [__METHOD__], [[$this, __FUNCTION__]], ]; } public function providerForNonCallable() { return [ [' '], [INF], [[]], [new \stdClass()], [null], ]; } } Validation-1.1.29/tests/unit/Rules/CallbackTest.php000066400000000000000000000044131336766562500222030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Callback * @covers Respect\Validation\Exceptions\CallbackException */ class CallbackTest extends \PHPUnit_Framework_TestCase { private $truthy, $falsy; public function setUp() { $this->truthy = new Callback(function () { return true; }); $this->falsy = new Callback(function () { return false; }); } public function thisIsASampleCallbackUsedInsideThisTest() { return true; } public function testShouldBeAbleToDefineLatestArgumentsOnConstructor() { $rule = new Callback('is_a', 'stdClass'); $this->assertTrue($rule->validate(new \stdClass())); } /** * @expectedException Respect\Validation\Exceptions\CallbackException */ public function testCallbackValidatorShouldReturnFalseForEmptyString() { $this->falsy->assert(''); } public function testCallbackValidatorShouldReturnTrueIfCallbackReturnsTrue() { $this->assertTrue($this->truthy->assert('wpoiur')); } /** * @expectedException Respect\Validation\Exceptions\CallbackException */ public function testCallbackValidatorShouldReturnFalseIfCallbackReturnsFalse() { $this->assertTrue($this->falsy->assert('w poiur')); } public function testCallbackValidatorShouldAcceptArrayCallbackDefinitions() { $v = new Callback([$this, 'thisIsASampleCallbackUsedInsideThisTest']); $this->assertTrue($v->assert('test')); } public function testCallbackValidatorShouldAcceptFunctionNamesAsString() { $v = new Callback('is_string'); $this->assertTrue($v->assert('test')); } /** * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidCallbacksShouldRaiseComponentExceptionUponInstantiation() { $v = new Callback(new \stdClass()); $this->assertTrue($v->assert('w poiur')); } } Validation-1.1.29/tests/unit/Rules/CharsetTest.php000066400000000000000000000044261336766562500221040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Charset * @covers Respect\Validation\Exceptions\CharsetException */ class CharsetTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidCharset */ public function testValidDataWithCharsetShouldReturnTrue($charset, $input) { $validator = new Charset($charset); $this->assertTrue($validator->__invoke($input)); } /** * @dataProvider providerForInvalidCharset * @expectedException Respect\Validation\Exceptions\CharsetException */ public function testInvalidCharsetShouldFailAndThrowCharsetException($charset, $input) { $validator = new Charset($charset); $this->assertFalse($validator->__invoke($input)); $this->assertFalse($validator->assert($input)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($charset) { $validator = new Charset($charset); } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [null], ['16'], ['aeiou'], ['a'], ['Foo'], ['basic'], [10], ]; } public function providerForValidCharset() { return [ ['UTF-8', ''], ['ISO-8859-1', mb_convert_encoding('açaí', 'ISO-8859-1')], [['UTF-8', 'ASCII'], 'strawberry'], ['ASCII', mb_convert_encoding('strawberry', 'ASCII')], ['UTF-8', '日本国'], [['ISO-8859-1', 'EUC-JP'], '日本国'], ['UTF-8', 'açaí'], ['ISO-8859-1', 'açaí'], ]; } public function providerForInvalidCharset() { return [ ['ASCII', '日本国'], ['ASCII', 'açaí'], ]; } } Validation-1.1.29/tests/unit/Rules/CnhTest.php000066400000000000000000000122251336766562500212170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Cnh * @covers Respect\Validation\Exceptions\CnhException */ class CnhTest extends \PHPUnit_Framework_TestCase { protected $cnhValidator; protected function setUp() { $this->cnhValidator = new Cnh(); } /** * @dataProvider validCnhProvider */ public function testValidCnh($cnh) { $this->assertTrue($this->cnhValidator->assert($cnh)); $this->assertTrue($this->cnhValidator->__invoke($cnh)); $this->assertTrue($this->cnhValidator->check($cnh)); } /** * @dataProvider invalidCnhProvider * @expectedException Respect\Validation\Exceptions\CnhException */ public function testInvalidCnh($cnh) { $expectedInvalid = $this->cnhValidator->assert($cnh); $this->assertFalse($expectedInvalid); } /** * @dataProvider notIntegerCnhProvider * @expectedException Respect\Validation\Exceptions\CnhException */ public function testNotIntegerCnh($cnh) { $expectedInvalid = $this->cnhValidator->assert($cnh); $this->assertFalse($expectedInvalid); } /** * @dataProvider invalidCnhLengthProvider * @expectedException Respect\Validation\Exceptions\CnhException */ public function testInvalidLengthCnh($cnh) { $expectedInvalid = $this->cnhValidator->assert($cnh); $this->assertFalse($expectedInvalid); } public function validCnhProvider() { return [ ['02650306461'], ['04397322870'], ['04375701302'], ['02996843266'], ['04375700501'], ['02605113410'], ['03247061306'], ['01258750259'], ['00739751580'], ['03375637504'], ['02542551342'], ['01708111400'], ['00836510948'], ['04365445978'], ['04324384302'], ['04339482949'], ['01036520050'], ['01612581027'], ['00603454740'], ['04129251992'], ['03401740201'], ['03417248301'], ['00670431345'], ['03292694405'], ]; } public function invalidCnhProvider() { return [ [[]], [new \stdClass()], ['0265131640'], ['0439732280'], ['0437571130'], ['0299684320'], ['0437571150'], ['0261511340'], ['0324716130'], ['0125875120'], ['0173975150'], ['0337563750'], ['0254255130'], ['0171811140'], ['0183651190'], ['0436544590'], ['0432438430'], ['0433948290'], ['0113652110'], ['0161258110'], ['0161345470'], ['0412925190'], ['0341174120'], ['0341724830'], ['0167143130'], ['0329269440'], ]; } public function notIntegerCnhProvider() { return [ [''], ['F265F3F6461'], ['F439732287F'], ['F43757F13F2'], ['F2996843266'], ['F43757FF5F1'], ['F26F511341F'], ['F3247F613F6'], ['F125875F259'], ['FF73975158F'], ['F33756375F4'], ['F2542551342'], ['F17F81114FF'], ['FF83651F948'], ['F4365445978'], ['F43243843F2'], ['F4339482949'], ['F1F3652FF5F'], ['F1612581F27'], ['FF6F345474F'], ['F4129251992'], ['F34F174F2F1'], ['F34172483F1'], ['FF67F431345'], ['F32926944F5'], ]; } public function invalidCnhLengthProvider() { return [ ['00265003006461'], ['0043973228700'], ['00437570013002'], ['002996843266'], ['004375700005001'], ['00260051134100'], ['00324700613006'], ['0012587500259'], ['00007397515800'], ['0033756375004'], ['002542551342'], ['001700811140000'], ['00008365100948'], ['004365445978'], ['0043243843002'], ['004339482949'], ['0010036520000500'], ['0016125810027'], ['000060034547400'], ['004129251992'], ['003400174002001'], ['0034172483001'], ['00006700431345'], ['0032926944005'], ]; } } Validation-1.1.29/tests/unit/Rules/CnpjTest.php000066400000000000000000000061371336766562500214060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Cnpj * @covers Respect\Validation\Exceptions\CnpjException */ class CnpjTest extends \PHPUnit_Framework_TestCase { protected $cnpjValidator; protected function setUp() { $this->cnpjValidator = new Cnpj(); } /** * @dataProvider providerValidFormattedCnpj */ public function testFormattedCnpjsShouldValidate($input) { $this->assertTrue($this->cnpjValidator->validate($input)); } /** * @dataProvider providerValidUnformattedCnpj */ public function testUnformattedCnpjsShouldValidate($input) { $this->assertTrue($this->cnpjValidator->validate($input)); } /** * @dataProvider providerInvalidFormattedCnpj */ public function testFormattedCnpjsShouldNotValidate($input) { $this->assertFalse($this->cnpjValidator->validate($input)); } /** * @dataProvider providerInvalidUnformattedCnpj */ public function testUnformattedCnpjsShouldNotValidate($input) { $this->assertFalse($this->cnpjValidator->validate($input)); } /** * @dataProvider providerInvalidFormattedAndUnformattedCnpjLength */ public function testFormattedAndUnformattedCnpjsShouldNotValidate($input) { $this->assertFalse($this->cnpjValidator->validate($input)); } public function providerValidFormattedCnpj() { return [ ['32.063.364/0001-07'], ['24.663.454/0001-00'], ['57.535.083/0001-30'], ['24.760.428/0001-09'], ['27.355.204/0001-00'], ['36.310.327/0001-07'], ]; } public function providerValidUnformattedCnpj() { return [ ['38175021000110'], ['37550610000179'], ['12774546000189'], ['77456211000168'], ['02023077000102'], ]; } public function providerInvalidFormattedCnpj() { return [ ['12.345.678/9012-34'], ['11.111.111/1111-11'], ]; } public function providerInvalidUnformattedCnpj() { return [ ['00000000000000'], ['11111111111111'], ['22222222222222'], ['33333333333333'], ['44444444444444'], ['55555555555555'], ['66666666666666'], ['77777777777777'], ['88888888888888'], ['99999999999999'], ['12345678900123'], ['99299929384987'], ['84434895894444'], ['44242340000000'], ]; } public function providerInvalidFormattedAndUnformattedCnpjLength() { return [ ['1'], ['22'], ['123'], ['992999999999929384'], ['99-010-0.'], ]; } } Validation-1.1.29/tests/unit/Rules/CntrlTest.php000066400000000000000000000050051336766562500215670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Cntrl * @covers Respect\Validation\Exceptions\CntrlException */ class CntrlTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidCntrl */ public function testValidDataWithCntrlShouldReturnTrue($validCntrl, $additional = '') { $validator = new Cntrl($additional); $this->assertTrue($validator->validate($validCntrl)); } /** * @dataProvider providerForInvalidCntrl * @expectedException Respect\Validation\Exceptions\CntrlException */ public function testInvalidCntrlShouldFailAndThrowCntrlException($invalidCntrl, $additional = '') { $validator = new Cntrl($additional); $this->assertFalse($validator->validate($invalidCntrl)); $this->assertFalse($validator->assert($invalidCntrl)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Cntrl($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Cntrl($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){} ', '!@#$%^&*(){} '], ['[]?+=/\\-_|"\',<>. ', "[]?+=/\\-_|\"',<>. \t \n"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidCntrl() { return [ ["\n"], ["\r"], ["\t"], ["\n\r\t"], // array("\n \n", ' '), TODO Verify this ]; } public function providerForInvalidCntrl() { return [ [''], ['16-50'], ['a'], [' '], ['Foo'], ['12.1'], ['-12'], [-12], ['alganet'], ]; } } Validation-1.1.29/tests/unit/Rules/ConsonantTest.php000066400000000000000000000053041336766562500224510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Consonant * @covers Respect\Validation\Exceptions\ConsonantException */ class ConsonantTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidConsonants */ public function testValidDataWithConsonantsShouldReturnTrue($validConsonants, $additional = '') { $validator = new Consonant($additional); $this->assertTrue($validator->validate($validConsonants)); } /** * @dataProvider providerForInvalidConsonants * @expectedException Respect\Validation\Exceptions\ConsonantException */ public function testInvalidConsonantsShouldFailAndThrowConsonantException($invalidConsonants, $additional = '') { $validator = new Consonant($additional); $this->assertFalse($validator->validate($invalidConsonants)); $this->assertFalse($validator->assert($invalidConsonants)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Consonant($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Consonant($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} bc dfg'], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n bc dfg"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidConsonants() { return [ ['b'], ['c'], ['d'], ['w'], ['y'], ['y',''], ['bcdfghklmnp'], ['bcdfghklm np'], ['qrst'], ["\nz\t"], ['zbcxwyrspq'], ]; } public function providerForInvalidConsonants() { return [ [''], [null], ['16'], ['aeiou'], ['a'], ['Foo'], [-50], ['basic'], ]; } } Validation-1.1.29/tests/unit/Rules/ContainsTest.php000066400000000000000000000050031336766562500222610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Contains * @covers Respect\Validation\Exceptions\ContainsException */ class ContainsTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForContainsIdentical */ public function testStringsContainingExpectedIdenticalValueShouldPass($start, $input) { $v = new Contains($start, true); $this->assertTrue($v->validate($input)); } /** * @dataProvider providerForContains */ public function testStringsContainingExpectedValueShouldPass($start, $input) { $v = new Contains($start, false); $this->assertTrue($v->validate($input)); } /** * @dataProvider providerForNotContainsIdentical */ public function testStringsNotContainsExpectedIdenticalValueShouldNotPass($start, $input) { $v = new Contains($start, true); $this->assertFalse($v->validate($input)); } /** * @dataProvider providerForNotContains */ public function testStringsNotContainsExpectedValueShouldNotPass($start, $input) { $v = new Contains($start, false); $this->assertFalse($v->validate($input)); } public function providerForContains() { return [ ['foo', ['bar', 'foo']], ['foo', 'barbazFOO'], ['foo', 'barbazfoo'], ['foo', 'foobazfoO'], ['1', [2, 3, 1]], ['1', [2, 3, '1']], ]; } public function providerForContainsIdentical() { return [ ['foo', ['fool', 'foo']], ['foo', 'barbazfoo'], ['foo', 'foobazfoo'], ['1', [2, 3, (string) 1]], ['1', [2, 3, '1']], ]; } public function providerForNotContains() { return [ ['foo', ''], ['bat', ['bar', 'foo']], ['foo', 'barfaabaz'], ['foo', 'faabarbaz'], ]; } public function providerForNotContainsIdentical() { return [ ['foo', ''], ['bat', ['BAT', 'foo']], ['bat', ['BaT', 'Batata']], ['foo', 'barfaabaz'], ['foo', 'barbazFOO'], ['foo', 'faabarbaz'], ]; } } Validation-1.1.29/tests/unit/Rules/CountableTest.php000066400000000000000000000016111336766562500224200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Countable */ class CountableTest extends RuleTestCase { public function providerForValidInput() { $rule = new Countable(); return [ [$rule, []], [$rule, new \ArrayObject()], [$rule, new \ArrayIterator()], ]; } public function providerForInvalidInput() { $rule = new Countable(); return [ [$rule, '1'], [$rule, 1.0], [$rule, new \stdClass()], [$rule, PHP_INT_MAX], [$rule, true], ]; } } Validation-1.1.29/tests/unit/Rules/CountryCodeTest.php000066400000000000000000000043071336766562500227470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\CountryCode */ class CountryCodeTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "whatever" is not a valid country set */ public function testShouldThrowsExceptionWhenInvalidFormat() { new CountryCode('whatever'); } public function testShouldUseISO3166Alpha2ByDefault() { $country = new CountryCode(); $this->assertEquals(CountryCode::ALPHA2, $country->set); } public function testShouldDefineACountryFormatOnConstructor() { $country = new CountryCode(CountryCode::NUMERIC); $this->assertEquals(CountryCode::NUMERIC, $country->set); } public function providerForValidCountryCode() { return [ [CountryCode::ALPHA2, 'BR'], [CountryCode::ALPHA3, 'BRA'], [CountryCode::NUMERIC, '076'], [CountryCode::ALPHA2, 'DE'], [CountryCode::ALPHA3, 'DEU'], [CountryCode::NUMERIC, '276'], [CountryCode::ALPHA2, 'US'], [CountryCode::ALPHA3, 'USA'], [CountryCode::NUMERIC, '840'], ]; } public function providerForInvalidCountryCode() { return [ [CountryCode::ALPHA2, 'USA'], [CountryCode::ALPHA3, 'US'], [CountryCode::NUMERIC, '000'], ]; } /** * @dataProvider providerForValidCountryCode */ public function testValidContryCodes($format, $input) { $rule = new CountryCode($format); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForInvalidCountryCode */ public function testInvalidContryCodes($format, $input) { $rule = new CountryCode($format); $this->assertFalse($rule->validate($input)); } } Validation-1.1.29/tests/unit/Rules/CpfTest.php000066400000000000000000000060471336766562500212240ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Cpf * @covers Respect\Validation\Exceptions\CpfException */ class CpfTest extends \PHPUnit_Framework_TestCase { protected $cpfValidator; protected function setUp() { $this->cpfValidator = new Cpf(); } /** * @dataProvider providerValidFormattedCpf */ public function testFormattedCpfsShouldValidate($input) { $this->assertTrue($this->cpfValidator->assert($input)); } /** * @dataProvider providerValidUnformattedCpf */ public function testUnformattedCpfsShouldValidates($input) { $this->assertTrue($this->cpfValidator->assert($input)); } /** * @dataProvider providerInvalidFormattedCpf * @expectedException Respect\Validation\Exceptions\CpfException */ public function testInvalidCpfShouldFailWhenFormatted($input) { $this->assertFalse($this->cpfValidator->assert($input)); } /** * @dataProvider providerInvalidUnformattedCpf * @expectedException Respect\Validation\Exceptions\CpfException */ public function testInvalidCpfShouldFailWhenNotFormatted($input) { $this->assertFalse($this->cpfValidator->assert($input)); } /** * @dataProvider providerInvalidFormattedAndUnformattedCpfLength * @expectedException Respect\Validation\Exceptions\CpfException */ public function testCpfsWithIncorrectLengthShouldFail($input) { $this->assertFalse($this->cpfValidator->assert($input)); } public function providerValidFormattedCpf() { return [ ['342.444.198-88'], ['342.444.198.88'], ['350.45261819'], ['693-319-118-40'], ['3.6.8.8.9.2.5.5.4.8.8'], ]; } public function providerValidUnformattedCpf() { return [ ['11598647644'], ['86734718697'], ['86223423284'], ['24845408333'], ['95574461102'], ]; } public function providerInvalidFormattedCpf() { return [ [''], ['000.000.000-00'], ['111.222.444-05'], ['999999999.99'], ['8.8.8.8.8.8.8.8.8.8.8'], ['693-319-110-40'], ['698.111-111.00'], ]; } public function providerInvalidUnformattedCpf() { return [ ['11111111111'], ['22222222222'], ['12345678900'], ['99299929384'], ['84434895894'], ['44242340000'], ]; } public function providerInvalidFormattedAndUnformattedCpfLength() { return [ ['1'], ['22'], ['123'], ['992999999999929384'], ]; } } Validation-1.1.29/tests/unit/Rules/CreditCardTest.php000066400000000000000000000064601336766562500225170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\CreditCard */ class CreditCardTest extends RuleTestCase { public function testShouldHaveNoCreditCardBrandByDefault() { $rule = new CreditCard(); $this->assertNull($rule->brand); } public function testShouldAcceptCreditCardBrandOnConstructor() { $rule = new CreditCard(CreditCard::VISA); $this->assertSame(CreditCard::VISA, $rule->brand); } public function testShouldThrowExceptionWhenCreditCardBrandIsNotValid() { $class = 'Respect\Validation\Exceptions\ComponentException'; $message = '"RespectCard" is not a valid credit card brand'; $message .= ' (Available: American Express, Diners Club, Discover, JCB, MasterCard, Visa).'; $this->setExpectedException($class, $message); new CreditCard('RespectCard'); } public function providerForValidInput() { $general = new CreditCard(); $amex = new CreditCard(CreditCard::AMERICAN_EXPRESS); $diners = new CreditCard(CreditCard::DINERS_CLUB); $discover = new CreditCard(CreditCard::DISCOVER); $jcb = new CreditCard(CreditCard::JCB); $master = new CreditCard(CreditCard::MASTERCARD); $visa = new CreditCard(CreditCard::VISA); return [ [$general, '5376 7473 9720 8720'], // MasterCard [$master, '5376 7473 9720 8720'], [$general, '4024.0071.5336.1885'], // Visa 16 [$visa, '4024.0071.5336.1885'], [$general, '4024 007 193 879'], // Visa 13 [$visa, '4024 007 193 879'], [$general, '340-3161-9380-9364'], // American Express [$amex, '340-3161-9380-9364'], [$general, '30351042633884'], // Diners Club [$diners, '30351042633884'], [$general, '6011000990139424'], // Discover [$discover, '6011000990139424'], [$general, '3566002020360505'], // JBC [$jcb, '3566002020360505'], ]; } public function providerForInvalidInput() { $general = new CreditCard(); $amex = new CreditCard(CreditCard::AMERICAN_EXPRESS); $diners = new CreditCard(CreditCard::DINERS_CLUB); $discover = new CreditCard(CreditCard::DISCOVER); $jcb = new CreditCard(CreditCard::JCB); $master = new CreditCard(CreditCard::MASTERCARD); $visa = new CreditCard(CreditCard::VISA); return [ [$general, ''], [$general, null], [$general, 'it isnt my credit card number'], [$general, '&stR@ng3|) (|-|@r$'], [$general, '1234 1234 1234 1234'], [$general, '1234.1234.1234.1234'], [$master, '6011111111111117'], // Discover [$visa, '3530111333300000'], // JCB [$amex, '5555555555554444'], // MasterCard [$diners, '4012888888881881'], // Visa [$discover, '371449635398431'], // American Express [$jcb, '38520000023237'], // Diners Club ]; } } Validation-1.1.29/tests/unit/Rules/CurrencyCodeTest.php000066400000000000000000000015611336766562500230750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\CurrencyCode */ class CurrencyCodeTest extends RuleTestCase { public function providerForValidInput() { $rule = new CurrencyCode(); return [ [$rule, 'EUR'], [$rule, 'GBP'], [$rule, 'XAU'], [$rule, 'xba'], [$rule, 'xxx'], ]; } public function providerForInvalidInput() { $rule = new CurrencyCode(); return [ [$rule, 'BTC'], [$rule, 'GGP'], [$rule, 'USA'], ]; } } Validation-1.1.29/tests/unit/Rules/DateTest.php000066400000000000000000000143521336766562500213670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; use DateTimeImmutable; /** * @group rule * @covers Respect\Validation\Rules\Date * @covers Respect\Validation\Exceptions\DateException */ class DateTest extends RuleTestCase { protected $dateValidator; protected function setUp() { $this->dateValidator = new Date(); } public function testDateEmptyShouldNotValidate() { $this->assertFalse($this->dateValidator->__invoke('')); } /** * @expectedException Respect\Validation\Exceptions\DateException */ public function testDateEmptyShouldNotCheck() { $this->dateValidator->check(''); } /** * @expectedException Respect\Validation\Exceptions\DateException */ public function testDateEmptyShouldNotAssert() { $this->dateValidator->assert(''); } public function testDateWithoutFormatShouldValidate() { $this->assertTrue($this->dateValidator->__invoke('today')); } public function testDateTimeInstancesShouldAlwaysValidate() { $this->assertTrue($this->dateValidator->__invoke(new DateTime('today'))); } public function testDateTimeImmutableInterfaceInstancesShouldAlwaysValidate() { if (!class_exists('DateTimeImmutable')) { return $this->markTestSkipped('DateTimeImmutable does not exist'); } $this->assertTrue($this->dateValidator->validate(new DateTimeImmutable('today'))); } public function testInvalidDateShouldFail() { $this->assertFalse($this->dateValidator->__invoke('aids')); } public function testInvalidDateShouldFail_on_invalid_conversions() { $this->dateValidator->format = 'Y-m-d'; $this->assertFalse($this->dateValidator->__invoke('2009-12-00')); } public function testAnyObjectExceptDateTimeInstancesShouldFail() { $this->assertFalse($this->dateValidator->__invoke(new \stdClass())); } public function testFormatsShouldValidateDateStrings() { $this->dateValidator = new Date('Y-m-d'); $this->assertTrue($this->dateValidator->assert('2009-09-09')); } public function testFormatsShouldValidateDateStrings_with_any_formats() { $this->dateValidator = new Date('d/m/Y'); $this->assertTrue($this->dateValidator->assert('23/05/1987')); } /** * @expectedException Respect\Validation\Exceptions\DateException */ public function testFormatsShouldValidateDateStrings_and_throw_DateException_on_failure() { $this->dateValidator = new Date('y-m-d'); $this->assertFalse($this->dateValidator->assert('2009-09-09')); } public function testDateTimeExceptionalFormatsThatShouldBeValid() { $this->dateValidator = new Date('c'); $this->assertTrue($this->dateValidator->assert('2004-02-12T15:19:21+00:00')); $this->dateValidator = new Date('r'); $this->assertTrue($this->dateValidator->assert('Thu, 29 Dec 2005 01:02:03 +0000')); } /** * Test that datetime strings with timezone information are valid independent on the system's timezone setting. * * @param string $systemTimezone * @param string $input * @dataProvider providerForDateTimeTimezoneStrings */ public function testDateTimeSystemTimezoneIndependent($systemTimezone, $format, $input) { date_default_timezone_set($systemTimezone); $this->dateValidator = new Date($format); $this->assertTrue($this->dateValidator->assert($input)); } /** * @return array */ public function providerForDateTimeTimezoneStrings() { return [ ['UTC', 'Ym', '202302'], ['UTC', 'Ym', '202304'], ['UTC', 'Ym', '202306'], ['UTC', 'Ym', '202309'], ['UTC', 'Ym', '202311'], ['UTC', 'c', '2005-12-30T01:02:03+01:00'], ['UTC', 'c', '2004-02-12T15:19:21+00:00'], ['UTC', 'r', 'Thu, 29 Dec 2005 01:02:03 +0000'], ['Europe/Amsterdam', 'c', '2005-12-30T01:02:03+01:00'], ['Europe/Amsterdam', 'c', '2004-02-12T15:19:21+00:00'], ['Europe/Amsterdam', 'r', 'Thu, 29 Dec 2005 01:02:03 +0000'], ['UTC', 'U', 1464658596], ['UTC', 'U', 1464399539], ['UTC', 'g', 0], ['UTC', 'h', 6], ['UTC', 'z', 320], ]; } /** * {@inheritdoc} */ public function providerForValidInput() { return [ [new Date(), 'now'], [new Date(), 'today'], [new Date(), 'tomorrow'], [new Date(), 'yesterday'], [new Date(), '+1 day'], [new Date(), 'next Thursday'], [new Date(), '+1 week 2 days 4 hours 2 seconds'], [new Date(), 2018], [new Date(), new DateTime()], [new Date('Y-m-d'), '2009-09-09'], [new Date('d/m/Y'), '23/05/1987'], [new Date('c'), '2004-02-12T15:19:21+00:00'], [new Date('r'), 'Thu, 29 Dec 2005 01:02:03 +0000'], [new Date('U'), 1464658596], [new Date('h'), 6], [new Date('z'), 320], [new Date('Ym'), 202302], [new Date('m'), 12], [new Date('Y'), 2000], ]; } /** * {@inheritdoc} */ public function providerForInvalidInput() { return [ [new Date(), 'not-a-date'], [new Date(), []], [new Date(), true], [new Date(), false], [new Date(), null], [new Date(), ''], [new Date('Y-m-d'), '2009-12-00'], [new Date('Y-m-d'), '2018-02-29'], [new Date('h'), 24], [new Date(), '2014-99'], [new Date('d'), 1], [new Date('Y-m'), '2014-99'], [new Date('m'), '99'], [new Date('H'), '24'], [new Date('i'), '60'], [new Date('s'), '60'], ]; } } Validation-1.1.29/tests/unit/Rules/DigitTest.php000066400000000000000000000051211336766562500215440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Digit * @covers Respect\Validation\Exceptions\DigitException */ class DigitTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidDigits */ public function testValidDataWithDigitsShouldReturnTrue($validDigits, $additional = '') { $validator = new Digit($additional); $this->assertTrue($validator->validate($validDigits)); } /** * @dataProvider providerForInvalidDigits * @expectedException Respect\Validation\Exceptions\DigitException */ public function testInvalidDigitsShouldFailAndThrowDigitException($invalidDigits, $additional = '') { $validator = new Digit($additional); $this->assertFalse($validator->validate($invalidDigits)); $this->assertFalse($validator->assert($invalidDigits)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Digit($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Digit($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} 123'], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n 123"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidDigits() { return [ ["\n\t"], [' '], [165], [1650], ['01650'], ['165'], ['1650'], ['16 50'], ["\n5\t"], ['16-50', '-'], ]; } public function providerForInvalidDigits() { return [ [''], [null], ['16-50'], ['a'], ['Foo'], ['12.1'], ['-12'], [-12], ]; } } Validation-1.1.29/tests/unit/Rules/DirectoryTest.php000066400000000000000000000055611336766562500224600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Directory * @covers Respect\Validation\Exceptions\DirectoryException */ class DirectoryTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidDirectory */ public function testValidDirectoryShouldReturnTrue($input) { $rule = new Directory(); $this->assertTrue($rule->__invoke($input)); $this->assertTrue($rule->assert($input)); $this->assertTrue($rule->check($input)); } /** * @dataProvider providerForInvalidDirectory * @expectedException Respect\Validation\Exceptions\DirectoryException */ public function testInvalidDirectoryShouldThrowException($input) { $rule = new Directory(); $this->assertFalse($rule->__invoke($input)); $this->assertFalse($rule->assert($input)); $this->assertFalse($rule->check($input)); } /** * @dataProvider providerForDirectoryObjects */ public function testDirectoryWithObjects($object, $valid) { $rule = new Directory(); $this->assertEquals($valid, $rule->validate($object)); } public function providerForDirectoryObjects() { return [ [new \SplFileInfo(__DIR__), true], [new \SplFileInfo(__FILE__), false], /* * PHP 5.4 does not allows to use SplFileObject with directories. * array(new \SplFileObject(__DIR__), true), */ [new \SplFileObject(__FILE__), false], ]; } public function providerForValidDirectory() { $directories = [ sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-1', sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-2', sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-3', sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-4', sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-5', ]; return array_map( function ($directory) { if (!is_dir($directory)) { mkdir($directory, 0766, true); } return [realpath($directory)]; }, $directories ); } public function providerForInvalidDirectory() { return array_chunk( [ '', __FILE__, __DIR__.'/../../../../../README.md', __DIR__.'/../../../../../composer.json', new \stdClass(), [__DIR__], ], 1 ); } } Validation-1.1.29/tests/unit/Rules/DomainTest.php000066400000000000000000000052261336766562500217210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Validator as v; /** * @group rule * @covers Respect\Validation\Rules\Domain * @covers Respect\Validation\Exceptions\DomainException */ class DomainTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new Domain(); } /** * @dataProvider providerForDomain */ public function testValidDomainsShouldReturnTrue($input, $tldcheck = true) { $this->object->tldCheck($tldcheck); $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->assert($input)); $this->assertTrue($this->object->check($input)); } /** * @dataProvider providerForNotDomain * @expectedException Respect\Validation\Exceptions\ValidationException */ public function testNotDomain($input, $tldcheck = true) { $this->object->tldCheck($tldcheck); $this->assertFalse($this->object->check($input)); } /** * @dataProvider providerForNotDomain * @expectedException Respect\Validation\Exceptions\DomainException */ public function testNotDomainCheck($input, $tldcheck = true) { $this->object->tldCheck($tldcheck); $this->assertFalse($this->object->assert($input)); } public function providerForDomain() { return [ ['111111111111domain.local', false], ['111111111111.domain.local', false], ['example.com'], ['xn--bcher-kva.ch'], ['mail.xn--bcher-kva.ch'], ['example-hyphen.com'], ['example--valid.com'], ['std--a.com'], ['r--w.com'], ]; } public function providerForNotDomain() { return [ [null], [''], ['2222222domain.local'], ['-example-invalid.com'], ['example.invalid.-com'], ['xn--bcher--kva.ch'], ['example.invalid-.com'], ['1.2.3.256'], ['1.2.3.4'], ]; } /** * @dataProvider providerForDomain */ public function testBuilder($validDomain, $checkTLD = true) { $this->assertTrue( v::domain($checkTLD)->validate($validDomain), sprintf('Domain "%s" should be valid. (Check TLD: %s)', $validDomain, var_export($checkTLD, true)) ); } } Validation-1.1.29/tests/unit/Rules/EachTest.php000066400000000000000000000071151336766562500213510ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Each * @covers Respect\Validation\Exceptions\EachException */ class EachTest extends RuleTestCase { public function providerForValidInput() { $ruleNotEmpty = new Each($this->getRuleMock(true)); $ruleAlphaItemIntKey = new Each($this->getRuleMock(true), $this->getRuleMock(true)); $ruleOnlyKeyValidation = new Each(null, $this->getRuleMock(true)); $intStack = new \SplStack(); $intStack->push(1); $intStack->push(2); $intStack->push(3); $intStack->push(4); $intStack->push(5); $stdClass = new \stdClass; $stdClass->name = 'Emmerson'; $stdClass->age = 22; return [ [$ruleNotEmpty, [1, 2, 3, 4, 5]], [$ruleNotEmpty, $intStack], [$ruleNotEmpty, $stdClass], [$ruleAlphaItemIntKey, ['a', 'b', 'c', 'd', 'e']], [$ruleOnlyKeyValidation, ['a', 'b', 'c', 'd', 'e']], ]; } public function providerForInvalidInput() { $rule = new Each($this->getRuleMock(false)); $ruleOnlyKeyValidation = new Each(null, $this->getRuleMock(false)); return [ [$rule, 123], [$rule, ''], [$rule, null], [$rule, false], [$rule, ['', 2, 3, 4, 5]], [$ruleOnlyKeyValidation, ['age' => 22]], ]; } public function testValidatorShouldPassIfEveryArrayItemPass() { $v = new Each($this->getRuleMock(true)); $result = $v->check([1, 2, 3, 4, 5]); $this->assertTrue($result); $result = $v->assert([1, 2, 3, 4, 5]); $this->assertTrue($result); } public function testValidatorShouldPassIfEveryArrayItemAndKeyPass() { $v = new Each($this->getRuleMock(true), $this->getRuleMock(true)); $result = $v->check(['a', 'b', 'c', 'd', 'e']); $this->assertTrue($result); $result = $v->assert(['a', 'b', 'c', 'd', 'e']); $this->assertTrue($result); } public function testValidatorShouldPassWithOnlyKeyValidation() { $v = new Each(null, $this->getRuleMock(true)); $result = $v->check(['a', 'b', 'c', 'd', 'e']); $this->assertTrue($result); $result = $v->assert(['a', 'b', 'c', 'd', 'e']); $this->assertTrue($result); } /** * @expectedException Respect\Validation\Exceptions\EachException */ public function testValidatorShouldNotPassWithOnlyKeyValidation() { $v = new Each(null, $this->getRuleMock(false)); $v->assert(['a', 'b', 'c', 'd', 'e']); } /** * @expectedException Respect\Validation\Exceptions\EachException */ public function testAssertShouldFailOnInvalidItem() { $v = new Each($this->getRuleMock(false)); $v->assert(['a', 2, 3, 4, 5]); } /** * @expectedException Respect\Validation\Exceptions\EachException */ public function testAssertShouldFailWithNonIterableInput() { $v = new Each($this->getRuleMock(false)); $v->assert('a'); } /** * @expectedException Respect\Validation\Exceptions\EachException */ public function testCheckShouldFailWithNonIterableInput() { $v = new Each($this->getRuleMock(false)); $v->check(null); } } Validation-1.1.29/tests/unit/Rules/EmailTest.php000066400000000000000000000074361336766562500215460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; function class_exists($className) { if (isset($GLOBALS['class_exists'][$className])) { return $GLOBALS['class_exists'][$className]; } return \class_exists($className); } /** * @group rule * @covers Respect\Validation\Rules\Email * @covers Respect\Validation\Exceptions\EmailException */ class EmailTest extends \PHPUnit_Framework_TestCase { private function setEmailValidatorExists($value) { $GLOBALS['class_exists']['Egulias\EmailValidator\EmailValidator'] = (bool) $value; } private function resetClassExists() { unset($GLOBALS['class_exists']); } private function getEmailValidatorMock() { $emailValidatorMock = $this ->getMockBuilder('Egulias\\EmailValidator\\EmailValidator') ->disableOriginalConstructor() ->getMock(); return $emailValidatorMock; } protected function setUp() { $this->setEmailValidatorExists(false); } protected function tearDown() { $this->resetClassExists(); } public function testShouldAcceptInstanceOfEmailValidatorOnConstructor() { $this->resetClassExists(); $emailValidator = $this->getEmailValidatorMock(); $rule = new Email($emailValidator); $this->assertSame($emailValidator, $rule->getEmailValidator()); } public function testShouldHaveADefaultInstanceOfEmailValidator() { $this->resetClassExists(); $rule = new Email(); $this->assertInstanceOf('Egulias\\EmailValidator\\EmailValidator', $rule->getEmailValidator()); } public function testShouldUseEmailValidatorWhenDefined() { $this->resetClassExists(); $input = 'example@example.com'; $emailValidator = $this->getEmailValidatorMock(); $emailValidator ->expects($this->once()) ->method('isValid') ->with($input) ->will($this->returnValue(true)); $rule = new Email($emailValidator); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForValidEmail */ public function testValidEmailShouldPass($validEmail) { $validator = new Email(); $this->assertTrue($validator->__invoke($validEmail)); $this->assertTrue($validator->check($validEmail)); $this->assertTrue($validator->assert($validEmail)); } /** * @dataProvider providerForInvalidEmail * @expectedException Respect\Validation\Exceptions\EmailException */ public function testInvalidEmailsShouldFailValidation($invalidEmail) { $validator = new Email(); $this->assertFalse($validator->__invoke($invalidEmail)); $this->assertFalse($validator->assert($invalidEmail)); } public function providerForValidEmail() { return [ ['test@test.com'], ['mail+mail@gmail.com'], ['mail.email@e.test.com'], ['a@a.a'], ]; } public function providerForInvalidEmail() { return [ [''], ['test@test'], ['test'], ['test@тест.рф'], ['@test.com'], ['mail@test@test.com'], ['test.test@'], ['test.@test.com'], ['test@.test.com'], ['test@test..com'], ['test@test.com.'], ['.test@test.com'], [[]], [new stdClass()], [null], [tmpfile()], ]; } } Validation-1.1.29/tests/unit/Rules/EndsWithTest.php000066400000000000000000000035101336766562500222310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\EndsWith * @covers Respect\Validation\Exceptions\EndsWithException */ class EndsWithTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForEndsWith */ public function testStringsEndingWithExpectedValueShouldPass($start, $input) { $v = new EndsWith($start); $this->assertTrue($v->__invoke($input)); $this->assertTrue($v->check($input)); $this->assertTrue($v->assert($input)); } /** * @dataProvider providerForNotEndsWith * @expectedException Respect\Validation\Exceptions\EndsWithException */ public function testStringsNotEndingWithExpectedValueShouldNotPass($start, $input, $caseSensitive = false) { $v = new EndsWith($start, $caseSensitive); $this->assertFalse($v->__invoke($input)); $this->assertFalse($v->assert($input)); } public function providerForEndsWith() { return [ ['foo', ['bar', 'foo']], ['foo', 'barbazFOO'], ['foo', 'barbazfoo'], ['foo', 'foobazfoo'], ['1', [2, 3, 1]], ['1', [2, 3, '1'], true], ]; } public function providerForNotEndsWith() { return [ ['foo', ''], ['bat', ['bar', 'foo']], ['foo', 'barfaabaz'], ['foo', 'barbazFOO', true], ['foo', 'faabarbaz'], ['foo', 'baabazfaa'], ['foo', 'baafoofaa'], ['1', [1, '1', 3], true], ]; } } Validation-1.1.29/tests/unit/Rules/EqualsTest.php000066400000000000000000000030771336766562500217460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\Equals * @covers Respect\Validation\Exceptions\EqualsException */ class EqualsTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForEquals */ public function testInputEqualsToExpectedValueShouldPass($compareTo, $input) { $rule = new Equals($compareTo); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForNotEquals */ public function testInputNotEqualsToExpectedValueShouldPass($compareTo, $input) { $rule = new Equals($compareTo); $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\EqualsException * @expectedExceptionMessage "24" must be equals 42 */ public function testShouldThrowTheProperExceptionWhenFailure() { $rule = new Equals(42); $rule->check('24'); } public function providerForEquals() { return [ ['foo', 'foo'], [[], []], [new stdClass(), new stdClass()], [10, '10'], ]; } public function providerForNotEquals() { return [ ['foo', ''], ['foo', 'bar'], ]; } } Validation-1.1.29/tests/unit/Rules/EvenTest.php000066400000000000000000000030161336766562500214020ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Even * @covers Respect\Validation\Exceptions\EvenException */ class EvenTest extends \PHPUnit_Framework_TestCase { protected $evenValidator; protected function setUp() { $this->evenValidator = new Even(); } /** * @dataProvider providerForEven */ public function testEvenNumbersShouldPass($input) { $this->assertTrue($this->evenValidator->validate($input)); $this->assertTrue($this->evenValidator->check($input)); $this->assertTrue($this->evenValidator->assert($input)); } /** * @dataProvider providerForNotEven * @expectedException Respect\Validation\Exceptions\EvenException */ public function testNotEvenNumbersShouldFail($input) { $this->assertFalse($this->evenValidator->validate($input)); $this->assertFalse($this->evenValidator->assert($input)); } public function providerForEven() { return [ [''], [-2], [-0], [0], [32], ]; } public function providerForNotEven() { return [ [-5], [-1], [1], [13], ]; } } Validation-1.1.29/tests/unit/Rules/ExecutableTest.php000066400000000000000000000032261336766562500225710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_executable'] = null; function is_executable($executable) { $return = \is_executable($executable); // Running the real function if (null !== $GLOBALS['is_executable']) { $return = $GLOBALS['is_executable']; $GLOBALS['is_executable'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\Executable * @covers Respect\Validation\Exceptions\ExecutableException */ class ExecutableTest extends \PHPUnit_Framework_TestCase { public function testValidExecutableFileShouldReturnTrue() { $GLOBALS['is_executable'] = true; $rule = new Executable(); $input = '/path/of/a/valid/executable/file.txt'; $this->assertTrue($rule->validate($input)); } public function testInvalidExecutableFileShouldReturnFalse() { $GLOBALS['is_executable'] = false; $rule = new Executable(); $input = '/path/of/an/invalid/executable/file.txt'; $this->assertFalse($rule->validate($input)); } public function testShouldValidateObjects() { $rule = new Executable(); $object = $this->getMock('SplFileInfo', ['isExecutable'], ['somefile.txt']); $object->expects($this->once()) ->method('isExecutable') ->will($this->returnValue(true)); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/ExistsTest.php000066400000000000000000000031741336766562500217710ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use org\bovigo\vfs\content\LargeFileContent; use org\bovigo\vfs\vfsStream; use PHPUnit_Framework_TestCase; use SplFileInfo; /** * @group rule * @covers Respect\Validation\Rules\Exists * @covers Respect\Validation\Exceptions\ExistsException */ class ExistsTest extends PHPUnit_Framework_TestCase { /** * @dataProvider fileProvider * @covers Respect\Validation\Rules\Exists::validate */ public function testExistentFileShouldReturnTrue($file) { $rule = new Exists(); $this->assertTrue($rule->validate($file->url())); } /** * @covers Respect\Validation\Rules\Exists::validate */ public function testNonExistentFileShouldReturnFalse() { $rule = new Exists(); $this->assertFalse($rule->validate('/path/of/a/non-existent/file')); } /** * @dataProvider fileProvider * @covers Respect\Validation\Rules\Exists::validate */ public function testShouldValidateObjects($file) { $rule = new Exists(); $object = new SplFileInfo($file->url()); $this->assertTrue($rule->validate($object)); } public function fileProvider() { $root = vfsStream::setup(); $file = vfsStream::newFile('2kb.txt')->withContent(LargeFileContent::withKilobytes(2))->at($root); return [ [$file] ]; } } Validation-1.1.29/tests/unit/Rules/ExtensionTest.php000066400000000000000000000034201336766562500224600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; use SplFileInfo; /** * @author Henrique Moody * @group rule * @covers Respect\Validation\Rules\Extension * @covers Respect\Validation\Exceptions\ExtensionException */ class ExtensionTest extends PHPUnit_Framework_TestCase { public function providerValidExtension() { return [ ['filename.txt', 'txt'], ['filename.jpg', 'jpg'], ['filename.inc.php', 'php'], ['filename.foo.bar.bz2', 'bz2'], ]; } /** * @dataProvider providerValidExtension */ public function testShouldValidateExtension($filename, $extension) { $rule = new Extension($extension); $this->assertTrue($rule->validate($filename)); } public function testShouldAcceptSplFileInfo() { $fileInfo = new SplFileInfo(__FILE__); $rule = new Extension('php'); $this->assertTrue($rule->validate($fileInfo)); } public function testShouldInvalidWhenNotStringNorSplFileInfo() { $nonFile = [__FILE__]; $rule = new Extension('php'); $this->assertFalse($rule->validate($nonFile)); } /** * @expectedException Respect\Validation\Exceptions\ExtensionException * @expectedExceptionMessage "filename.jpg" must have "png" extension */ public function testShouldThrowExtensionExceptionWhenCheckingValue() { $rule = new Extension('png'); $rule->check('filename.jpg'); } } Validation-1.1.29/tests/unit/Rules/FactorTest.php000066400000000000000000000133011336766562500217210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ValidationException; /** * @group rule * @covers Respect\Validation\Rules\Factor * @covers Respect\Validation\Exceptions\FactorException * * @author David Meister */ class FactorTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidFactor */ public function testValidFactorShouldReturnTrue($dividend, $input) { $min = new Factor($dividend); $this->assertTrue($min->__invoke($input)); $this->assertTrue($min->check($input)); $this->assertTrue($min->assert($input)); } /** * @dataProvider providerForInvalidFactor */ public function testInvalidFactorShouldThrowFactorException($dividend, $input) { $this->setExpectedException( 'Respect\\Validation\\Exceptions\\FactorException', ValidationException::stringify($input).' must be a factor of '.$dividend ); $min = new Factor($dividend); $this->assertFalse($min->__invoke($input)); $this->assertFalse($min->assert($input)); } /** * @dataProvider providerForInvalidFactorDividend */ public function testInvalidDividentShouldThrowComponentException($dividend, $input) { $this->setExpectedException( 'Respect\\Validation\\Exceptions\\ComponentException', 'Dividend '.ValidationException::stringify($dividend).' must be an integer' ); // It is enough to simply create a new Factor to trigger the dividend // exceptions in __construct. new Factor($dividend); } public function providerForValidFactor() { $tests = [ // Run through the first few integers. [1, 1], [2, 1], [2, 2], [3, 1], [3, 3], [4, 1], [4, 2], [4, 4], [5, 1], [5, 5], [6, 1], [6, 2], [6, 3], [6, 6], // Zero as a dividend is always a pass. [0, 0], [0, 1], [0, mt_rand()], ]; $tests = $this->generateNegativeCombinations($tests); $tests = $this->generateStringAndFloatCombinations($tests); return $tests; } public function providerForInvalidFactor() { $tests = [ // Run through the first few integers. [3, 2], [4, 3], [5, 2], [5, 3], [5, 4], // Zeros. [1, 0], [2, 0], ]; $tests = $this->generateNegativeCombinations($tests); $tests = $this->generateStringAndFloatCombinations($tests); // Valid (but random) dividends, invalid inputs. $extra_tests = array_map( function ($test) { return [mt_rand(), $test]; }, $this->thingsThatAreNotIntegers() ); $tests = array_merge($tests, $extra_tests); return $tests; } public function providerForInvalidFactorDividend() { // Invalid dividends, valid (but random) inputs. $tests = array_map( function ($test) { return [$test, mt_rand()]; }, $this->thingsThatAreNotIntegers() ); // Also check for an empty dividend string. $tests[] = ['', mt_rand()]; return $tests; } private function thingsThatAreNotIntegers() { return [ 0.5, 1.5, -0.5, -1.5, PHP_INT_MAX + 1, // Non integer values. $this->randomFloatBeweenZeroAndOne(), -$this->randomFloatBeweenZeroAndOne(), 'a', 'foo', // Randomish string. uniqid('a'), // Non-scalars. [], new \StdClass(), new \DateTime(), null, true, false, ]; } private function randomFloatBeweenZeroAndOne() { return mt_rand(1, mt_getrandmax() - 1) / mt_getrandmax(); } private function generateNegativeCombinations($tests) { // Negate all the dividends. $tests = array_merge( $tests, array_map( function ($test) { return [-$test[0], $test[1]]; }, $tests ) ); // Negate all the inputs. $tests = array_merge( $tests, array_map( function ($test) { return [$test[0], -$test[1]]; }, $tests ) ); return $tests; } private function generateStringAndFloatCombinations($tests) { $base_tests = $tests; // Test everything again as a string. $tests = array_merge( $tests, array_map( function ($test) { return [(string) $test[0], (string) $test[1]]; }, $base_tests ) ); // Test everything again as a float. $tests = array_merge( $tests, array_map( function ($test) { return [(float) $test[0], (float) $test[1]]; }, $base_tests ) ); return $tests; } } Validation-1.1.29/tests/unit/Rules/FalseValTest.php000066400000000000000000000030151336766562500222010ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\FalseVal * @covers Respect\Validation\Exceptions\FalseValException */ class FalseValTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider validFalseProvider */ public function testShouldValidatePatternAccordingToTheDefinedLocale($input) { $rule = new FalseVal(); $this->assertTrue($rule->validate($input)); } public function validFalseProvider() { return [ [false], [0], ['0'], ['false'], ['off'], ['no'], ['FALSE'], ['OFF'], ['NO'], ['False'], ['Off'], ['No'], ]; } /** * @dataProvider invalidFalseProvider */ public function testShouldNotValidatePatternAccordingToTheDefinedLocale($input) { $rule = new FalseVal(); $this->assertFalse($rule->validate($input)); } public function invalidFalseProvider() { return [ [true], [1], ['1'], [0.5], [2], ['true'], ['on'], ['yes'], ['anything'], ]; } } Validation-1.1.29/tests/unit/Rules/FibonacciTest.php000066400000000000000000000024341336766562500223650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Fibonacci */ class FibonacciTest extends RuleTestCase { public function providerForValidInput() { $rule = new Fibonacci(); return [ [$rule, 1], [$rule, 2], [$rule, 3], [$rule, 5], [$rule, 8.0], [$rule, '3'], [$rule, 21], [$rule, 21.0], [$rule, '21.0'], [$rule, 34], [$rule, '34'], [$rule, 1346269], [$rule, 10610209857723], ]; } public function providerForInvalidInput() { $rule = new Fibonacci(); return [ [$rule, 0], [$rule, 1346268], [$rule, ''], [$rule, null], [$rule, 7], [$rule, -1], [$rule, 5.2], [$rule, '-1'], [$rule, 'a'], [$rule, ' '], [$rule, false], [$rule, true], ]; } } Validation-1.1.29/tests/unit/Rules/FileTest.php000066400000000000000000000033251336766562500213670ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_file'] = null; function is_file($file) { $return = \is_file($file); // Running the real function if (null !== $GLOBALS['is_file']) { $return = $GLOBALS['is_file']; $GLOBALS['is_file'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\File * @covers Respect\Validation\Exceptions\FileException */ class FileTest extends \PHPUnit_Framework_TestCase { /** * @covers Respect\Validation\Rules\File::validate */ public function testValidFileShouldReturnTrue() { $GLOBALS['is_file'] = true; $rule = new File(); $input = '/path/of/a/valid/file.txt'; $this->assertTrue($rule->validate($input)); } /** * @covers Respect\Validation\Rules\File::validate */ public function testInvalidFileShouldReturnFalse() { $GLOBALS['is_file'] = false; $rule = new File(); $input = '/path/of/an/invalid/file.txt'; $this->assertFalse($rule->validate($input)); } /** * @covers Respect\Validation\Rules\File::validate */ public function testShouldValidateObjects() { $rule = new File(); $object = $this->getMock('SplFileInfo', ['isFile'], ['somefile.txt']); $object->expects($this->once()) ->method('isFile') ->will($this->returnValue(true)); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/FilterVarTest.php000066400000000000000000000041101336766562500223770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\FilterVar * @covers Respect\Validation\Exceptions\FilterVarException */ class FilterVarTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage Cannot validate without filter flag */ public function testShouldThrowsExceptionWhenFilterIsNotDefined() { new FilterVar(); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage Cannot accept the given filter */ public function testShouldThrowsExceptionWhenFilterIsNotValid() { new FilterVar(FILTER_SANITIZE_EMAIL); } public function testShouldDefineFilterOnConstructor() { $rule = new FilterVar(FILTER_VALIDATE_REGEXP); $actualArguments = $rule->arguments; $expectedArguments = [FILTER_VALIDATE_REGEXP]; $this->assertEquals($expectedArguments, $actualArguments); } public function testShouldDefineFilterOptionsOnConstructor() { $rule = new FilterVar(FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED); $actualArguments = $rule->arguments; $expectedArguments = [FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED]; $this->assertEquals($expectedArguments, $actualArguments); } public function testShouldUseDefineFilterToValidate() { $rule = new FilterVar(FILTER_VALIDATE_EMAIL); $this->assertTrue($rule->validate('henriquemoody@users.noreply.github.com')); } public function testShouldUseDefineFilterOptionsToValidate() { $rule = new FilterVar(FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED); $this->assertTrue($rule->validate('http://example.com?foo=bar')); } } Validation-1.1.29/tests/unit/Rules/FiniteTest.php000066400000000000000000000031101336766562500217160ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Finite * @covers Respect\Validation\Exceptions\FiniteException */ class FiniteTest extends \PHPUnit_Framework_TestCase { protected $rule; protected function setUp() { $this->rule = new Finite(); } /** * @dataProvider providerForFinite */ public function testShouldValidateFiniteNumbers($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForNonFinite */ public function testShouldNotValidateNonFiniteNumbers($input) { $this->assertFalse($this->rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\FiniteException * @expectedExceptionMessage INF must be a finite number */ public function testShouldThrowFiniteExceptionWhenChecking() { $this->rule->check(INF); } public function providerForFinite() { return [ ['123456'], [-9], [0], [16], [2], [PHP_INT_MAX], ]; } public function providerForNonFinite() { return [ [' '], [INF], [[]], [new \stdClass()], [null], ]; } } Validation-1.1.29/tests/unit/Rules/FloatTypeTest.php000066400000000000000000000017571336766562500224260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\FloatType */ class FloatTypeTest extends RuleTestCase { public function providerForValidInput() { $rule = new FloatType(); return [ [$rule, 165.23], [$rule, 1.3e3], [$rule, 7E-10], [$rule, 0.0], [$rule, -2.44], [$rule, 10 / 33.33], [$rule, PHP_INT_MAX + 1], ]; } public function providerForInvalidInput() { $rule = new FloatType(); return [ [$rule, '1'], [$rule, '1.0'], [$rule, '7E-10'], [$rule, 111111], [$rule, PHP_INT_MAX * -1], ]; } } Validation-1.1.29/tests/unit/Rules/FloatValTest.php000066400000000000000000000032451336766562500222210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\FloatVal * @covers Respect\Validation\Exceptions\FloatValException */ class FloatValTest extends \PHPUnit_Framework_TestCase { protected $floatValidator; protected function setUp() { $this->floatValidator = new FloatVal(); } /** * @dataProvider providerForFloat */ public function testFloatNumbersShouldPass($input) { $this->assertTrue($this->floatValidator->assert($input)); $this->assertTrue($this->floatValidator->__invoke($input)); $this->assertTrue($this->floatValidator->check($input)); } /** * @dataProvider providerForNotFloat * @expectedException Respect\Validation\Exceptions\FloatValException */ public function testNotFloatNumbersShouldFail($input) { $this->assertFalse($this->floatValidator->__invoke($input)); $this->assertFalse($this->floatValidator->assert($input)); } public function providerForFloat() { return [ [165], [1], [0], [0.0], ['1'], ['19347e12'], [165.0], ['165.7'], [1e12], ]; } public function providerForNotFloat() { return [ [''], [null], ['a'], [' '], ['Foo'], ]; } } Validation-1.1.29/tests/unit/Rules/GraphTest.php000066400000000000000000000046711336766562500215560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Graph * @covers Respect\Validation\Exceptions\GraphException */ class GraphTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidGraph */ public function testValidDataWithGraphCharsShouldReturnTrue($validGraph, $additional = '') { $validator = new Graph($additional); $this->assertTrue($validator->validate($validGraph)); } /** * @dataProvider providerForInvalidGraph * @expectedException Respect\Validation\Exceptions\GraphException */ public function testInvalidGraphShouldFailAndThrowGraphException($invalidGraph, $additional = '') { $validator = new Graph($additional); $this->assertFalse($validator->validate($invalidGraph)); $this->assertFalse($validator->assert($invalidGraph)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Graph($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Graph($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ [' ', '!@#$%^&*(){} abc 123'], [" \t\n", "[]?+=/\\-_|\"',<>. \t \n abc 123"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidGraph() { return [ ['LKA#@%.54'], ['foobar'], ['16-50'], ['123'], ['#$%&*_'], ]; } public function providerForInvalidGraph() { return [ [''], [null], ["foo\nbar"], ["foo\tbar"], ['foo bar'], [' '], ]; } } Validation-1.1.29/tests/unit/Rules/HexRgbColorTest.php000066400000000000000000000032531336766562500226660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\HexRgbColor * @covers Respect\Validation\Exceptions\HexRgbColorException */ class HexRgbColorTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidHexRgbColor */ public function testHexRgbColorValuesONLYShouldReturnTrue($validHexRgbColor) { $validator = new HexRgbColor(); $this->assertTrue($validator->validate($validHexRgbColor)); } /** * @dataProvider providerForInvalidHexRgbColor */ public function testInvalidHexRgbColorValuesShouldReturnFalse($invalidHexRgbColor) { $validator = new HexRgbColor(); $this->assertFalse($validator->validate($invalidHexRgbColor)); } public function providerForValidHexRgbColor() { return [ ['#000'], ['#00000F'], ['#123'], ['#123456'], ['#FFFFFF'], ['123123'], ['FFFFFF'], ]; } public function providerForInvalidHexRgbColor() { return [ ['#0'], ['#0000G0'], ['#0FG'], ['#1234'], ['#AAAAAA1'], ['#S'], ['1234'], ['foo'], [0x39F], [05], [1], [443], [[]], [new \stdClass()], [null], ]; } } Validation-1.1.29/tests/unit/Rules/IdenticalTest.php000066400000000000000000000033031336766562500224000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\Identical * @covers Respect\Validation\Exceptions\IdenticalException */ class IdenticalTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForIdentical */ public function testInputIdenticalToExpectedValueShouldPass($compareTo, $input) { $rule = new Identical($compareTo); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForNotIdentical */ public function testInputNotIdenticalToExpectedValueShouldPass($compareTo, $input) { $rule = new Identical($compareTo); $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\IdenticalException * @expectedExceptionMessage "42" must be identical as 42 */ public function testShouldThrowTheProperExceptionWhenFailure() { $rule = new Identical(42); $rule->check('42'); } public function providerForIdentical() { $object = new stdClass(); return [ ['foo', 'foo'], [[], []], [$object, $object], [10, 10], ]; } public function providerForNotIdentical() { return [ [42, '42'], ['foo', 'bar'], [[1], []], [new stdClass(), new stdClass()], ]; } } Validation-1.1.29/tests/unit/Rules/ImageTest.php000066400000000000000000000033241336766562500215310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use finfo; use SplFileInfo; use SplFileObject; /** * @group rule * @covers Respect\Validation\Rules\Image */ class ImageTest extends RuleTestCase { public function testShouldAcceptAnInstanceOfFinfoOnConstructor() { $finfo = new finfo(FILEINFO_MIME_TYPE); $rule = new Image($finfo); $this->assertSame($rule->fileInfo, $finfo); } public function testShouldHaveAnInstanceOfFinfoByDefault() { $rule = new Image(); $this->assertInstanceOf('finfo', $rule->fileInfo); } public function providerForValidInput() { $rule = new Image(); $fixturesDirectory = realpath(__DIR__.'/../../fixtures/'); return [ [$rule, $fixturesDirectory.'/valid-image.gif'], [$rule, $fixturesDirectory.'/valid-image.jpg'], [$rule, $fixturesDirectory.'/valid-image.png'], [$rule, new SplFileInfo($fixturesDirectory.'/valid-image.gif')], [$rule, new SplFileInfo($fixturesDirectory.'/valid-image.jpg')], [$rule, new SplFileObject($fixturesDirectory.'/valid-image.png')], ]; } public function providerForInvalidInput() { $rule = new Image(); $fixturesDirectory = realpath(__DIR__.'/../../fixtures/'); return [ [$rule, $fixturesDirectory.'/invalid-image.png'], [$rule, 'asdf'], [$rule, 1], [$rule, true], ]; } } Validation-1.1.29/tests/unit/Rules/ImeiTest.php000066400000000000000000000022711336766562500213720ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Imei */ class ImeiTest extends RuleTestCase { public function providerForValidInput() { $rule = new Imei(); return [ [$rule, '35-007752-323751-3'], [$rule, '35-209900-176148-1'], [$rule, '350077523237513'], [$rule, '356938035643809'], [$rule, '490154203237518'], [$rule, 350077523237513], [$rule, 356938035643809], [$rule, 490154203237518], ]; } public function providerForInvalidInput() { $rule = new Imei(); return [ [$rule, ''], [$rule, null], [$rule, 1.0], [$rule, new \stdClass()], [$rule, '490154203237512'], [$rule, '4901542032375125'], [$rule, 'Whateveeeeeerrr'], [$rule, true], ]; } } Validation-1.1.29/tests/unit/Rules/InTest.php000066400000000000000000000043671336766562500210650ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\In * @covers Respect\Validation\Exceptions\InException */ class InTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForIn */ public function testSuccessInValidatorCases($input, $options = null) { $v = new In($options); $this->assertTrue($v->__invoke($input)); $this->assertTrue($v->check($input)); $this->assertTrue($v->assert($input)); } /** * @dataProvider providerForNotIn * @expectedException Respect\Validation\Exceptions\InException */ public function testInvalidInChecksShouldThrowInException($input, $options, $strict = false) { $v = new In($options, $strict); $this->assertFalse($v->__invoke($input)); $this->assertFalse($v->assert($input)); } /** * @expectedException Respect\Validation\Exceptions\InException * @expectedExceptionMessage "x" must be in { "foo", "bar" } */ public function testInCheckExceptionMessageWithArray() { $v = new In(['foo', 'bar']); $v->assert('x'); } public function providerForIn() { return [ ['', ['']], [null, [null]], ['0', ['0']], [0, [0]], ['foo', ['foo', 'bar']], ['foo', 'barfoobaz'], ['foo', 'foobarbaz'], ['foo', 'barbazfoo'], ['1', [1, 2, 3]], ['1', ['1', 2, 3], true], ]; } public function providerForNotIn() { return [ [null, '0'], [null, 0, true], [null, '', true], [null, []], ['', 'barfoobaz'], [null, 'barfoobaz'], [0, 'barfoobaz'], ['0', 'barfoobaz'], ['bat', ['foo', 'bar']], ['foo', 'barfaabaz'], ['foo', 'faabarbaz'], ['foo', 'baabazfaa'], ['1', [1, 2, 3], true], ]; } } Validation-1.1.29/tests/unit/Rules/InfiniteTest.php000066400000000000000000000032011336766562500222460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Infinite * @covers Respect\Validation\Exceptions\InfiniteException */ class InfiniteTest extends \PHPUnit_Framework_TestCase { protected $rule; protected function setUp() { $this->rule = new Infinite(); } /** * @dataProvider providerForInfinite */ public function testShouldValidateInfiniteNumbers($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForNonInfinite */ public function testShouldNotValidateNonInfiniteNumbers($input) { $this->assertFalse($this->rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\InfiniteException * @expectedExceptionMessage 123456 must be an infinite number */ public function testShouldThrowInfiniteExceptionWhenChecking() { $this->rule->check(123456); } public function providerForInfinite() { return [ [INF], [INF * -1], ]; } public function providerForNonInfinite() { return [ [' '], [[]], [new \stdClass()], [null], ['123456'], [-9], [0], [16], [2], [PHP_INT_MAX], ]; } } Validation-1.1.29/tests/unit/Rules/InstanceTest.php000066400000000000000000000035121336766562500222520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Instance * @covers Respect\Validation\Exceptions\InstanceException */ class InstanceTest extends \PHPUnit_Framework_TestCase { protected $instanceValidator; protected function setUp() { $this->instanceValidator = new Instance('ArrayObject'); } public function testInstanceValidationShouldReturnFalseForEmpty() { $this->assertFalse($this->instanceValidator->__invoke('')); } /** * @expectedException Respect\Validation\Exceptions\InstanceException */ public function testInstanceValidationShouldNotAssertEmpty() { $this->instanceValidator->assert(''); } /** * @expectedException Respect\Validation\Exceptions\InstanceException */ public function testInstanceValidationShouldNotCheckEmpty() { $this->instanceValidator->check(''); } public function testInstanceValidationShouldReturnTrueForValidInstances() { $this->assertTrue($this->instanceValidator->__invoke(new \ArrayObject())); $this->assertTrue($this->instanceValidator->assert(new \ArrayObject())); $this->assertTrue($this->instanceValidator->check(new \ArrayObject())); } /** * @expectedException Respect\Validation\Exceptions\InstanceException */ public function testInvalidInstancesShouldThrowInstanceException() { $this->assertFalse($this->instanceValidator->validate(new \stdClass())); $this->assertFalse($this->instanceValidator->assert(new \stdClass())); } } Validation-1.1.29/tests/unit/Rules/IntTypeTest.php000066400000000000000000000023411336766562500221010ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\IntType */ class IntTypeTest extends \PHPUnit_Framework_TestCase { public function providerForValidIntType() { return [ [0], [123456], [PHP_INT_MAX], [PHP_INT_MAX * -1], ]; } /** * @dataProvider providerForValidIntType */ public function testShouldValidateInputWhenItIsAValidIntType($input) { $rule = new IntType(); $this->assertTrue($rule->validate($input)); } public function providerForInvalidIntType() { return [ ['1'], [1.0], [PHP_INT_MAX + 1], [true], ]; } /** * @dataProvider providerForInvalidIntType */ public function testShouldInvalidateInputWhenItIsNotAValidIntType($input) { $rule = new IntType(); $this->assertFalse($rule->validate($input)); } } Validation-1.1.29/tests/unit/Rules/IntValTest.php000066400000000000000000000033351336766562500217060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\IntVal * @covers Respect\Validation\Exceptions\IntValException */ class IntValTest extends \PHPUnit_Framework_TestCase { protected $intValidator; protected function setUp() { $this->intValidator = new IntVal(); } /** * @dataProvider providerForInt */ public function testValidIntegersShouldReturnTrue($input) { $this->assertTrue($this->intValidator->__invoke($input)); $this->assertTrue($this->intValidator->check($input)); $this->assertTrue($this->intValidator->assert($input)); } /** * @dataProvider providerForNotInt * @expectedException Respect\Validation\Exceptions\IntValException */ public function testInvalidIntegersShouldThrowIntException($input) { $this->assertFalse($this->intValidator->__invoke($input)); $this->assertFalse($this->intValidator->assert($input)); } public function providerForInt() { return [ [16], ['165'], [123456], [PHP_INT_MAX], ['06'], ['0'] ]; } public function providerForNotInt() { return [ [''], [null], ['a'], ['1.0'], [1.0], [' '], [true], [false], ['Foo'], ['1.44'], [1e-5], ]; } } Validation-1.1.29/tests/unit/Rules/IpTest.php000066400000000000000000000103001336766562500210470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Ip * @covers Respect\Validation\Exceptions\IpException */ class IpTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForIp */ public function testValidIpsShouldReturnTrue($input, $options = null) { $ipValidator = new Ip($options); $this->assertTrue($ipValidator->__invoke($input)); $this->assertTrue($ipValidator->assert($input)); $this->assertTrue($ipValidator->check($input)); } /** * @dataProvider providerForIpBetweenRange */ public function testIpsBetweenRangeShouldReturnTrue($input, $networkRange) { $ipValidator = new Ip($networkRange); $this->assertTrue($ipValidator->__invoke($input)); $this->assertTrue($ipValidator->assert($input)); $this->assertTrue($ipValidator->check($input)); } /** * @dataProvider providerForNotIp * @expectedException Respect\Validation\Exceptions\IpException */ public function testInvalidIpsShouldThrowIpException($input, $options = null) { $ipValidator = new Ip($options); $this->assertFalse($ipValidator->__invoke($input)); $this->assertFalse($ipValidator->assert($input)); } /** * @dataProvider providerForIpOutsideRange * @expectedException Respect\Validation\Exceptions\IpException */ public function testIpsOutsideRangeShouldReturnFalse($input, $networkRange) { $ipValidator = new Ip($networkRange); $this->assertFalse($ipValidator->__invoke($input)); $this->assertFalse($ipValidator->assert($input)); } public function providerForIp() { return [ ['127.0.0.1'], ]; } public function providerForIpBetweenRange() { return [ ['127.0.0.1', '127.*'], ['127.0.0.1', '127.0.*'], ['127.0.0.1', '127.0.0.*'], ['192.168.2.6', '192.168.*.6'], ['192.168.2.6', '192.*.2.6'], ['10.168.2.6', '*.168.2.6'], ['192.168.2.6', '192.168.*.*'], ['192.10.2.6', '192.*.*.*'], ['192.168.255.156', '*'], ['192.168.255.156', '*.*.*.*'], ['127.0.0.1', '127.0.0.0-127.0.0.255'], ['192.168.2.6', '192.168.0.0-192.168.255.255'], ['192.10.2.6', '192.0.0.0-192.255.255.255'], ['192.168.255.156', '0.0.0.0-255.255.255.255'], ['220.78.173.2', '220.78.168/21'], ['220.78.173.2', '220.78.168.0/21'], ['220.78.173.2', '220.78.168.0/255.255.248.0'], ]; } public function providerForNotIp() { return [ [''], [null], ['j'], [' '], ['Foo'], ['192.168.0.1', FILTER_FLAG_NO_PRIV_RANGE], ]; } public function providerForIpOutsideRange() { return [ ['127.0.0.1', '127.0.1.*'], ['192.168.2.6', '192.163.*.*'], ['192.10.2.6', '193.*.*.*'], ['127.0.0.1', '127.0.1.0-127.0.1.255'], ['192.168.2.6', '192.163.0.0-192.163.255.255'], ['192.10.2.6', '193.168.0.0-193.255.255.255'], ['220.78.176.1', '220.78.168/21'], ['220.78.176.2', '220.78.168.0/21'], ['220.78.176.3', '220.78.168.0/255.255.248.0'], ]; } /** * @dataProvider providerForInvalidRanges * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidRangeShouldRaiseException($range) { $o = new Ip($range); } public function providerForInvalidRanges() { return [ ['192.168'], ['asd'], ['192.168.0.0-192.168.0.256'], ['192.168.0.0-192.168.0.1/4'], ['192.168.0/1'], ['192.168.2.0/256.256.256.256'], ['192.168.2.0/8.256.256.256'], ]; } } Validation-1.1.29/tests/unit/Rules/IterableTypeTest.php000066400000000000000000000016041336766562500230770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\IterableType */ class IterableTest extends RuleTestCase { public function providerForValidInput() { $rule = new IterableType(); return [ [$rule, [1, 2, 3]], [$rule, new \stdClass()], [$rule, new \ArrayIterator()], ]; } public function providerForInvalidInput() { $rule = new IterableType(); return [ [$rule, 3], [$rule, 'asdf'], [$rule, 9.85], [$rule, null], [$rule, true], ]; } } Validation-1.1.29/tests/unit/Rules/JsonTest.php000066400000000000000000000023111336766562500214130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Json * @covers Respect\Validation\Exceptions\JsonException */ class JsonTest extends RuleTestCase { public function providerForValidInput() { $json = new Json(); return [ [$json, '2'], [$json, '"abc"'], [$json, '[1,2,3]'], [$json, '["foo", "bar", "number", 1]'], [$json, '{"foo": "bar", "number":1}'], [$json, '[]'], [$json, '{}'], [$json, 'false'], [$json, 'null'], ]; } public function providerForInvalidInput() { $json = new Json(); return [ [$json, false], [$json, new \stdClass()], [$json, []], [$json, ''], [$json, 'a'], [$json, 'xx'], [$json, '{foo: bar}'], [$json, '{foo: "baz"}'], ]; } } Validation-1.1.29/tests/unit/Rules/KeyNestedTest.php000066400000000000000000000112251336766562500224010ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use ArrayObject; /** * @group rule * @covers Respect\Validation\Rules\KeyNested * @covers Respect\Validation\Exceptions\KeyNestedException */ class KeyNestedTest extends \PHPUnit_Framework_TestCase { public function testArrayWithPresentKeysWillReturnTrueForFullPathValidator() { $array = [ 'bar' => [ 'foo' => [ 'baz' => 'hello world!', ], 'foooo' => [ 'boooo' => 321, ], ], ]; $rule = new KeyNested('bar.foo.baz'); $this->assertTrue($rule->validate($array)); } public function testArrayWithNumericKeysWillReturnTrueForFullPathValidator() { $array = [ 0 => 'Zero, the hero!', ]; $rule = new KeyNested(0, new Equals('Zero, the hero!')); $this->assertTrue($rule->check($array)); } public function testArrayWithPresentKeysWillReturnTrueForHalfPathValidator() { $array = [ 'bar' => [ 'foo' => [ 'baz' => 'hello world!', ], 'foooo' => [ 'boooo' => 321, ], ], ]; $rule = new KeyNested('bar.foo'); $this->assertTrue($rule->validate($array)); } public function testObjectWithPresentPropertiesWillReturnTrueForDirtyPathValidator() { $object = (object) [ 'bar' => (object) [ 'foo' => (object) [ 'baz' => 'hello world!', ], 'foooo' => (object) [ 'boooo' => 321, ], ], ]; $rule = new KeyNested('bar.foooo.'); $this->assertTrue($rule->validate($object)); } public function testEmptyInputMustReturnFalse() { $rule = new KeyNested('bar.foo.baz'); $this->assertFalse($rule->validate('')); } /** * @expectedException Respect\Validation\Exceptions\KeyNestedException */ public function testEmptyInputMustNotAssert() { $rule = new KeyNested('bar.foo.baz'); $rule->assert(''); } /** * @expectedException Respect\Validation\Exceptions\KeyNestedException */ public function testEmptyInputMustNotCheck() { $rule = new KeyNested('bar.foo.baz'); $rule->check(''); } public function testArrayWithEmptyKeyShouldReturnTrue() { $rule = new KeyNested('emptyKey'); $input = ['emptyKey' => '']; $this->assertTrue($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\KeyNestedException */ public function testArrayWithAbsentKeyShouldThrowNestedKeyException() { $validator = new KeyNested('bar.bar'); $object = [ 'baraaaaaa' => [ 'bar' => 'foo', ], ]; $this->assertTrue($validator->assert($object)); } /** * @expectedException Respect\Validation\Exceptions\KeyNestedException */ public function testNotArrayShouldThrowKeyException() { $validator = new KeyNested('baz.bar'); $object = 123; $this->assertFalse($validator->assert($object)); } public function testExtraValidatorShouldValidateKey() { $subValidator = new Length(3, 7); $validator = new KeyNested('bar.foo.baz', $subValidator); $object = [ 'bar' => [ 'foo' => [ 'baz' => 'example', ], ], ]; $this->assertTrue($validator->assert($object)); } public function testNotMandatoryExtraValidatorShouldPassWithAbsentKey() { $subValidator = new Length(1, 3); $validator = new KeyNested('bar.rab', $subValidator, false); $object = new \stdClass(); $this->assertTrue($validator->validate($object)); } public function testArrayAccessWithPresentKeysWillReturnTrue() { $arrayAccess = new ArrayObject([ 'bar' => [ 'foo' => [ 'baz' => 'hello world!', ], 'foooo' => [ 'boooo' => 321, ], ], ]); $rule = new KeyNested('bar.foo.baz'); $this->assertTrue($rule->validate($arrayAccess)); } } Validation-1.1.29/tests/unit/Rules/KeySetTest.php000066400000000000000000000121631336766562500217140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; /** * @group rule * @covers Respect\Validation\Rules\KeySet * @covers Respect\Validation\Exceptions\KeySetException */ class KeySetTest extends PHPUnit_Framework_TestCase { public function testShouldAcceptKeyRule() { $key = new Key('foo', new AlwaysValid(), false); $keySet = new KeySet($key); $rules = $keySet->getRules(); $this->assertSame(current($rules), $key); } public function testShouldAcceptAllOfWithOneKeyRule() { $key = new Key('foo', new AlwaysValid(), false); $allOf = new AllOf($key); $keySet = new KeySet($allOf); $rules = $keySet->getRules(); $this->assertSame(current($rules), $key); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage AllOf rule must have only one Key rule */ public function testShouldNotAcceptAllOfWithMoreThanOneKeyRule() { $key1 = new Key('foo', new AlwaysValid(), false); $key2 = new Key('bar', new AlwaysValid(), false); $allOf = new AllOf($key1, $key2); new KeySet($allOf); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage KeySet rule accepts only Key rules */ public function testShouldNotAcceptAllOfWithANonKeyRule() { $alwaysValid = new AlwaysValid(); $allOf = new AllOf($alwaysValid); new KeySet($allOf); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage KeySet rule accepts only Key rules */ public function testShouldNotAcceptANonKeyRule() { $alwaysValid = new AlwaysValid(); new KeySet($alwaysValid); } public function testShouldReturnKeys() { $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), false); $keySet = new KeySet($key1, $key2); $this->assertEquals(['foo', 'bar'], $keySet->getKeys()); } public function testShouldValidateKeysWhenThereAreMissingRequiredKeys() { $input = [ 'foo' => 42, ]; $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), true); $keySet = new KeySet($key1, $key2); $this->assertFalse($keySet->validate($input)); } public function testShouldValidateKeysWhenThereAreMissingNonRequiredKeys() { $input = [ 'foo' => 42, ]; $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), false); $keySet = new KeySet($key1, $key2); $this->assertTrue($keySet->validate($input)); } public function testShouldValidateKeysWhenThereAreMoreKeys() { $input = [ 'foo' => 42, 'bar' => 'String', 'baz' => false, ]; $key1 = new Key('foo', new AlwaysValid(), false); $key2 = new Key('bar', new AlwaysValid(), false); $keySet = new KeySet($key1, $key2); $this->assertFalse($keySet->validate($input)); } public function testShouldValidateKeysWhenEmpty() { $input = []; $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), true); $keySet = new KeySet($key1, $key2); $this->assertFalse($keySet->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\KeySetException * @expectedExceptionMessage Must have keys { "foo", "bar" } */ public function testShouldCheckKeys() { $input = []; $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), true); $keySet = new KeySet($key1, $key2); $keySet->check($input); } /** * @expectedException Respect\Validation\Exceptions\KeySetException * @expectedExceptionMessage Must have keys { "foo", "bar" } */ public function testShouldAssertKeys() { $input = []; $key1 = new Key('foo', new AlwaysValid(), true); $key2 = new Key('bar', new AlwaysValid(), true); $keySet = new KeySet($key1, $key2); $keySet->assert($input); } /** * @expectedException Respect\Validation\Exceptions\KeySetException * @expectedExceptionMessage Must have keys { "name" } * @dataProvider providerForInvalidArguments */ public function testShouldThrowExceptionInCaseArgumentIsAnythingOtherThanArray($input) { $keySet = new KeySet(new Key('name')); $keySet->assert($input); } public function providerForInvalidArguments() { return [ [''], [null], [0], [new \stdClass()] ]; } } Validation-1.1.29/tests/unit/Rules/KeyTest.php000066400000000000000000000072301336766562500212370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Key * @covers Respect\Validation\Exceptions\KeyException */ class KeyTest extends \PHPUnit_Framework_TestCase { public function testArrayWithPresentKeyShouldReturnTrue() { $validator = new Key('bar'); $someArray = []; $someArray['bar'] = 'foo'; $this->assertTrue($validator->validate($someArray)); } public function testArrayWithNumericKeyShouldReturnTrue() { $validator = new Key(0); $someArray = []; $someArray[0] = 'foo'; $this->assertTrue($validator->validate($someArray)); } public function testEmptyInputMustReturnFalse() { $validator = new Key('someEmptyKey'); $input = ''; $this->assertFalse($validator->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\KeyException */ public function testEmptyInputMustNotAssert() { $validator = new Key('someEmptyKey'); $validator->assert(''); } /** * @expectedException Respect\Validation\Exceptions\KeyException */ public function testEmptyInputMustNotCheck() { $validator = new Key('someEmptyKey'); $validator->check(''); } public function testArrayWithEmptyKeyShouldReturnTrue() { $validator = new Key('someEmptyKey'); $input = []; $input['someEmptyKey'] = ''; $this->assertTrue($validator->validate($input)); } public function testShouldHaveTheSameReturnValueForAllValidators() { $rule = new Key('key', new NotEmpty()); $input = ['key' => '']; try { $rule->assert($input); $this->fail('`assert()` must throws exception'); } catch (\Exception $e) { } try { $rule->check($input); $this->fail('`check()` must throws exception'); } catch (\Exception $e) { } $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\KeyException */ public function testArrayWithAbsentKeyShouldThrowKeyException() { $validator = new Key('bar'); $someArray = []; $someArray['baraaaaaa'] = 'foo'; $this->assertTrue($validator->assert($someArray)); } /** * @expectedException Respect\Validation\Exceptions\KeyException */ public function testNotArrayShouldThrowKeyException() { $validator = new Key('bar'); $someArray = 123; $this->assertFalse($validator->assert($someArray)); } /** * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParametersShouldThrowComponentExceptionUponInstantiation() { $validator = new Key(['invalid']); } public function testExtraValidatorShouldValidateKey() { $subValidator = new Length(1, 3); $validator = new Key('bar', $subValidator); $someArray = []; $someArray['bar'] = 'foo'; $this->assertTrue($validator->assert($someArray)); } public function testNotMandatoryExtraValidatorShouldPassWithAbsentKey() { $subValidator = new Length(1, 3); $validator = new Key('bar', $subValidator, false); $someArray = []; $this->assertTrue($validator->validate($someArray)); } } Validation-1.1.29/tests/unit/Rules/KeyValueTest.php000066400000000000000000000064351336766562500222420ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; /** * @group rule * @covers Respect\Validation\Rules\KeyValue * @covers Respect\Validation\Exceptions\KeyValueException */ class KeyValueTest extends PHPUnit_Framework_TestCase { public function testShouldDefineValuesOnConstructor() { $comparedKey = 'foo'; $ruleName = 'equals'; $baseKey = 'bar'; $rule = new KeyValue($comparedKey, $ruleName, $baseKey); $this->assertSame($comparedKey, $rule->comparedKey); $this->assertSame($ruleName, $rule->ruleName); $this->assertSame($baseKey, $rule->baseKey); } public function testShouldNotValidateWhenComparedKeyDoesNotExist() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertFalse($rule->validate(['bar' => 42])); } public function testShouldNotValidateWhenBaseKeyDoesNotExist() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertFalse($rule->validate(['foo' => true])); } public function testShouldNotValidateRuleIsNotValid() { $rule = new KeyValue('foo', 'probably_not_a_rule', 'bar'); $this->assertFalse($rule->validate(['foo' => true, 'bar' => false])); } public function testShouldValidateWhenDefinedValuesMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertTrue($rule->validate(['foo' => 42, 'bar' => 42])); } public function testShouldValidateWhenDefinedValuesDoesNotMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertFalse($rule->validate(['foo' => 43, 'bar' => 42])); } public function testShouldAssertWhenDefinedValuesMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertTrue($rule->assert(['foo' => 42, 'bar' => 42])); } /** * @expectedException Respect\Validation\Exceptions\AllOfException * @expectedExceptionMessage All of the required rules must pass for foo */ public function testShouldAssertWhenDefinedValuesDoesNotMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $rule->assert(['foo' => 43, 'bar' => 42]); } /** * @expectedException Respect\Validation\Exceptions\KeyValueException * @expectedExceptionMessage "bar" must be valid to validate "foo" */ public function testShouldNotAssertWhenRuleIsNotValid() { $rule = new KeyValue('foo', 'probably_not_a_rule', 'bar'); $rule->assert(['foo' => 43, 'bar' => 42]); } public function testShouldCheckWhenDefinedValuesMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $this->assertTrue($rule->check(['foo' => 42, 'bar' => 42])); } /** * @expectedException Respect\Validation\Exceptions\EqualsException * @expectedExceptionMessage foo must be equals "bar" */ public function testShouldCheckWhenDefinedValuesDoesNotMatch() { $rule = new KeyValue('foo', 'equals', 'bar'); $rule->check(['foo' => 43, 'bar' => 42]); } } Validation-1.1.29/tests/unit/Rules/LanguageCodeTest.php000066400000000000000000000023231336766562500230230ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\LanguageCode */ class LanguageCodeTest extends RuleTestCase { public function providerForValidInput() { $ruleAlpha2 = new LanguageCode(); $ruleAlpha3 = new LanguageCode('alpha-3'); return [ [$ruleAlpha2, 'pt'], [$ruleAlpha3, 'por'], [$ruleAlpha2, 'en'], [$ruleAlpha3, 'eng'], [$ruleAlpha2, 'it'], [$ruleAlpha3, 'ita'], [$ruleAlpha2, 'la'], [$ruleAlpha3, 'lat'], ]; } public function providerForInvalidInput() { $ruleAlpha2 = new LanguageCode(); $ruleAlpha3 = new LanguageCode('alpha-3'); return [ [$ruleAlpha2, 'por'], [$ruleAlpha2, ''], [$ruleAlpha2, null], [$ruleAlpha2, false], [$ruleAlpha2, []], [$ruleAlpha3, 'pt'], ]; } } Validation-1.1.29/tests/unit/Rules/LeapDateTest.php000066400000000000000000000025571336766562500221750ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\LeapDate * @covers Respect\Validation\Exceptions\LeapDateException */ class LeapDateTest extends \PHPUnit_Framework_TestCase { protected $leapDateValidator; protected function setUp() { $this->leapDateValidator = new LeapDate('Y-m-d'); } public function testValidLeapDate_with_string() { $this->assertTrue($this->leapDateValidator->validate('1988-02-29')); } public function testValidLeapDate_with_date_time() { $this->assertTrue($this->leapDateValidator->validate( new DateTime('1988-02-29'))); } public function testInvalidLeapDate_with_string() { $this->assertFalse($this->leapDateValidator->validate('1989-02-29')); } public function testInvalidLeapDate_with_date_time() { $this->assertFalse($this->leapDateValidator->validate( new DateTime('1989-02-29'))); } public function testInvalidLeapDate_input() { $this->assertFalse($this->leapDateValidator->validate([])); } } Validation-1.1.29/tests/unit/Rules/LeapYearTest.php000066400000000000000000000027501336766562500222130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\LeapYear * @covers Respect\Validation\Exceptions\LeapYearException */ class LeapYearTest extends \PHPUnit_Framework_TestCase { protected $leapYearValidator; protected function setUp() { $this->leapYearValidator = new LeapYear(); } public function testValidLeapDate() { $this->assertTrue($this->leapYearValidator->__invoke('2008')); $this->assertTrue($this->leapYearValidator->__invoke('2008-02-29')); $this->assertTrue($this->leapYearValidator->__invoke(2008)); $this->assertTrue($this->leapYearValidator->__invoke( new DateTime('2008-02-29'))); } public function testInvalidLeapDate() { $this->assertFalse($this->leapYearValidator->__invoke('')); $this->assertFalse($this->leapYearValidator->__invoke('2009')); $this->assertFalse($this->leapYearValidator->__invoke('2009-02-29')); $this->assertFalse($this->leapYearValidator->__invoke(2009)); $this->assertFalse($this->leapYearValidator->__invoke( new DateTime('2009-02-29'))); $this->assertFalse($this->leapYearValidator->__invoke([])); } } Validation-1.1.29/tests/unit/Rules/LengthTest.php000066400000000000000000000066721336766562500217410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Length * @covers Respect\Validation\Exceptions\LengthException */ class LengthTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidLengthInclusive */ public function testLengthInsideBoundsForInclusiveCasesReturnTrue($string, $min, $max) { $validator = new Length($min, $max, true); $this->assertTrue($validator->validate($string)); } /** * @dataProvider providerForValidLengthNonInclusive */ public function testLengthInsideBoundsForNonInclusiveCasesShouldReturnTrue($string, $min, $max) { $validator = new Length($min, $max, false); $this->assertTrue($validator->validate($string)); } /** * @dataProvider providerForInvalidLengthInclusive */ public function testLengthOutsideBoundsForInclusiveCasesReturnFalse($string, $min, $max) { $validator = new Length($min, $max, true); $this->assertfalse($validator->validate($string)); } /** * @dataProvider providerForInvalidLengthNonInclusive */ public function testLengthOutsideBoundsForNonInclusiveCasesReturnFalse($string, $min, $max) { $validator = new Length($min, $max, false); $this->assertfalse($validator->validate($string)); } /** * @dataProvider providerForComponentException * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testComponentExceptionsForInvalidParameters($min, $max) { $buggyValidator = new Length($min, $max); } public function providerForValidLengthInclusive() { return [ ['alganet', 1, 15], ['ççççç', 4, 6], [range(1, 20), 1, 30], [(object) ['foo' => 'bar', 'bar' => 'baz'], 0, 2], ['alganet', 1, null], //null is a valid max length, means "no maximum", ['alganet', null, 15], //null is a valid min length, means "no minimum" ]; } public function providerForValidLengthNonInclusive() { return [ ['alganet', 1, 15], ['ççççç', 4, 6], [range(1, 20), 1, 30], [(object) ['foo' => 'bar', 'bar' => 'baz'], 1, 3], ['alganet', 1, null], //null is a valid max length, means "no maximum", ['alganet', null, 15], //null is a valid min length, means "no minimum" ]; } public function providerForInvalidLengthInclusive() { return [ ['', 1, 15], ['alganet', 1, 6], [range(1, 20), 1, 19], ['alganet', 8, null], //null is a valid max length, means "no maximum", ['alganet', null, 6], //null is a valid min length, means "no minimum" ]; } public function providerForInvalidLengthNonInclusive() { return [ ['alganet', 1, 7], [(object) ['foo' => 'bar', 'bar' => 'baz'], 3, 5], [range(1, 50), 1, 30], ]; } public function providerForComponentException() { return [ ['a', 15], [1, 'abc d'], [10, 1], ]; } } Validation-1.1.29/tests/unit/Rules/Locale/000077500000000000000000000000001336766562500203335ustar00rootroot00000000000000Validation-1.1.29/tests/unit/Rules/Locale/PlIdentityCardTest.php000066400000000000000000000017021336766562500245630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules\Locale; use Respect\Validation\Rules\RuleTestCase; /** * @group rule * @covers Respect\Validation\Rules\Locale\PlIdentityCard */ class PlIdentityCardTest extends RuleTestCase { public function providerForValidInput() { $rule = new PlIdentityCard(); return [ [$rule, 'APH505567'], [$rule, 'AYE205410'], [$rule, 'AYW036733'], ]; } public function providerForInvalidInput() { $rule = new PlIdentityCard(); return [ [$rule, 'AAAAAAAAA'], [$rule, 'APH 505567'], [$rule, 'AYE205411'], [$rule, 'AYW036731'], ]; } } Validation-1.1.29/tests/unit/Rules/LowercaseTest.php000066400000000000000000000036151336766562500224360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Lowercase * @covers Respect\Validation\Exceptions\LowercaseException */ class LowercaseTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidLowercase */ public function testValidLowercaseShouldReturnTrue($input) { $lowercase = new Lowercase(); $this->assertTrue($lowercase->__invoke($input)); $this->assertTrue($lowercase->assert($input)); $this->assertTrue($lowercase->check($input)); } /** * @dataProvider providerForInvalidLowercase * @expectedException Respect\Validation\Exceptions\LowercaseException */ public function testInvalidLowercaseShouldThrowException($input) { $lowercase = new Lowercase(); $this->assertFalse($lowercase->__invoke($input)); $this->assertFalse($lowercase->assert($input)); } public function providerForValidLowercase() { return [ [''], ['lowercase'], ['lowercase-with-dashes'], ['lowercase with spaces'], ['lowercase with numbers 123'], ['lowercase with specials characters like ã ç ê'], ['with specials characters like # $ % & * +'], ['τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός'], ]; } public function providerForInvalidLowercase() { return [ ['UPPERCASE'], ['CamelCase'], ['First Character Uppercase'], ['With Numbers 1 2 3'], ]; } } Validation-1.1.29/tests/unit/Rules/MacAddressTest.php000066400000000000000000000034301336766562500225130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\MacAddress * @covers Respect\Validation\Exceptions\MacAddressException */ class MacAddressTest extends \PHPUnit_Framework_TestCase { protected $macaddressValidator; protected function setUp() { $this->macaddressValidator = new MacAddress(); } /** * @dataProvider providerForMacAddress */ public function testValidMacaddressesShouldReturnTrue($input) { $this->assertTrue($this->macaddressValidator->__invoke($input)); $this->assertTrue($this->macaddressValidator->assert($input)); $this->assertTrue($this->macaddressValidator->check($input)); } /** * @dataProvider providerForNotMacAddress * @expectedException Respect\Validation\Exceptions\MacAddressException */ public function testInvalidMacaddressShouldThrowMacAddressException($input) { $this->assertFalse($this->macaddressValidator->__invoke($input)); $this->assertFalse($this->macaddressValidator->assert($input)); } public function providerForMacAddress() { return [ ['00:11:22:33:44:55'], ['66-77-88-99-aa-bb'], ['AF:0F:bd:12:44:ba'], ['90-bc-d3-1a-dd-cc'], ]; } public function providerForNotMacAddress() { return [ [''], ['00-1122:33:44:55'], ['66-77--99-jj-bb'], ['HH:0F-bd:12:44:ba'], ['90-bc-nk:1a-dd-cc'], ]; } } Validation-1.1.29/tests/unit/Rules/MaxTest.php000066400000000000000000000035201336766562500212320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Max * @covers Respect\Validation\Exceptions\MaxException */ class MaxTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidMax */ public function testValidMaxInputShouldReturnTrue($maxValue, $inclusive, $input) { $max = new Max($maxValue, $inclusive); $this->assertTrue($max->validate($input)); $this->assertTrue($max->check($input)); $this->assertTrue($max->assert($input)); } /** * @dataProvider providerForInvalidMax * @expectedException Respect\Validation\Exceptions\MaxException */ public function testInvalidMaxValueShouldThrowMaxException($maxValue, $inclusive, $input) { $max = new Max($maxValue, $inclusive); $this->assertFalse($max->validate($input)); $this->assertFalse($max->assert($input)); } public function providerForValidMax() { return [ [200, false, ''], [200, false, 165.0], [200, false, -200], [200, true, 200], [200, false, 0], ['-18 years', true, '1988-09-09'], ['z', true, 'z'], ['z', false, 'y'], ['tomorrow', true, 'now'], ]; } public function providerForInvalidMax() { return [ [200, false, 300], [200, false, 250], [200, false, 1500], [200, false, 200], [1900, false, '2018-01-25'], [10.5, false, '2018-01-25'], ]; } } Validation-1.1.29/tests/unit/Rules/MimetypeTest.php000066400000000000000000000056011336766562500223000ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; use SplFileInfo; /** * @author Henrique Moody * @group rule * @covers Respect\Validation\Rules\Mimetype * @covers Respect\Validation\Exceptions\MimetypeException */ class MimetypeTest extends PHPUnit_Framework_TestCase { private $filename; protected function setUp() { if (defined('HHVM_VERSION')) { return $this->markTestSkipped('If you are a HHVM user, and you are in the mood, please fix it'); } $this->filename = sprintf('%s/validation.txt', sys_get_temp_dir()); file_put_contents($this->filename, 'File content'); } protected function tearDown() { unlink($this->filename); } public function testShouldValidateMimetype() { $mimetype = 'plain/text'; $fileInfoMock = $this ->getMockBuilder('finfo') ->disableOriginalConstructor() ->setMethods(['file']) ->getMock(); $fileInfoMock ->expects($this->once()) ->method('file') ->with($this->filename) ->will($this->returnValue($mimetype)); $rule = new Mimetype($mimetype, $fileInfoMock); $rule->validate($this->filename); } public function testShouldValidateSplFileInfoMimetype() { $fileInfo = new SplFileInfo($this->filename); $mimetype = 'plain/text'; $fileInfoMock = $this ->getMockBuilder('finfo') ->disableOriginalConstructor() ->setMethods(['file']) ->getMock(); $fileInfoMock ->expects($this->once()) ->method('file') ->with($fileInfo->getPathname()) ->will($this->returnValue($mimetype)); $rule = new Mimetype($mimetype, $fileInfoMock); $this->assertTrue($rule->validate($fileInfo)); } public function testShouldInvalidateWhenNotStringNorSplFileInfo() { $rule = new Mimetype('application/octet-stream'); $this->assertFalse($rule->validate([__FILE__])); } public function testShouldInvalidateWhenItIsNotAValidFile() { $rule = new Mimetype('application/octet-stream'); $this->assertFalse($rule->validate(__DIR__)); } /** * @expectedException Respect\Validation\Exceptions\MimetypeException * @expectedExceptionMessageRegExp #".+MimetypeTest.php" must have "application.?/json" mimetype# */ public function testShouldThrowMimetypeExceptionWhenCheckingValue() { $rule = new Mimetype('application/json'); $rule->check(__FILE__); } } Validation-1.1.29/tests/unit/Rules/MinTest.php000066400000000000000000000042171336766562500212340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\Min * @covers Respect\Validation\Exceptions\MinException */ class MinTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidMin */ public function testValidMinShouldReturnTrue($minValue, $inclusive, $input) { $min = new Min($minValue, $inclusive); $this->assertTrue($min->__invoke($input)); $this->assertTrue($min->check($input)); $this->assertTrue($min->assert($input)); } /** * @dataProvider providerForInvalidMin * @expectedException Respect\Validation\Exceptions\MinException */ public function testInvalidMinShouldThrowMinException($minValue, $inclusive, $input) { $min = new Min($minValue, $inclusive); $this->assertFalse($min->__invoke($input)); $this->assertFalse($min->assert($input)); } public function providerForValidMin() { return [ [100, false, 165.0], [-100, false, 200], [200, true, 200], [200, false, 300], ['a', true, 'a'], ['a', true, 'c'], ['yesterday', true, 'now'], // Samples from issue #178 ['13-05-2014 03:16', true, '20-05-2014 03:16'], [new DateTime('13-05-2014 03:16'), true, new DateTime('20-05-2014 03:16')], ['13-05-2014 03:16', true, new DateTime('20-05-2014 03:16')], [new DateTime('13-05-2014 03:16'), true, '20-05-2014 03:16'], ]; } public function providerForInvalidMin() { return [ [100, true, ''], [100, false, ''], [500, false, 300], [0, false, -250], [0, false, -50], [50, false, 50], [2040, false, '2018-01-25'], [10.5, false, '2018-01-25'], ]; } } Validation-1.1.29/tests/unit/Rules/MininumAgeTest.php000066400000000000000000000053321336766562500225410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\MinimumAge * @covers Respect\Validation\Exceptions\MinimumAgeException */ class MininumAgeTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidDateValidMinimumAge */ public function testValidMinimumAgeInsideBoundsShouldPass($age, $format, $input) { $minimumAge = new MinimumAge($age, $format); $this->assertTrue($minimumAge->__invoke($input)); $this->assertTrue($minimumAge->assert($input)); $this->assertTrue($minimumAge->check($input)); } /** * @dataProvider providerForValidDateInvalidMinimumAge * @expectedException Respect\Validation\Exceptions\MinimumAgeException */ public function testInvalidMinimumAgeShouldThrowException($age, $format, $input) { $minimumAge = new MinimumAge($age, $format); $this->assertFalse($minimumAge->__invoke($input)); $this->assertFalse($minimumAge->assert($input)); } /** * @dataProvider providerForInvalidDate * @expectedException Respect\Validation\Exceptions\MinimumAgeException */ public function testInvalidDateShouldNotPass($age, $format, $input) { $minimumAge = new MinimumAge($age, $format); $this->assertFalse($minimumAge->__invoke($input)); $this->assertFalse($minimumAge->assert($input)); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage The age must be a integer value */ public function testShouldNotAcceptNonIntegerAgeOnConstructor() { new MinimumAge('L12'); } public function providerForValidDateValidMinimumAge() { return [ [18, 'Y-m-d', ''], [18, 'Y-m-d', '1969-07-20'], [18, null, new \DateTime('1969-07-20')], [18, 'Y-m-d', new \DateTime('1969-07-20')], ['18', 'Y-m-d', '1969-07-20'], [18.0, 'Y-m-d', '1969-07-20'], ]; } public function providerForValidDateInvalidMinimumAge() { return [ [18, 'Y-m-d', '2002-06-30'], [18, null, new \DateTime('2002-06-30')], [18, 'Y-m-d', new \DateTime('2002-06-30')], ]; } public function providerForInvalidDate() { return [ [18, null, 'invalid-input'], [18, null, new \stdClass()], [18, 'y-m-d', '2002-06-30'], ]; } } Validation-1.1.29/tests/unit/Rules/MultipleTest.php000066400000000000000000000034151336766562500223030ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Multiple * @covers Respect\Validation\Exceptions\MultipleException */ class MultipleTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForMultiple */ public function testValidNumberMultipleOf($multipleOf, $input) { $multiple = new Multiple($multipleOf); $this->assertTrue($multiple->validate($input)); $this->assertTrue($multiple->assert($input)); $this->assertTrue($multiple->check($input)); } /** * @dataProvider providerForNotMultiple * @expectedException Respect\Validation\Exceptions\MultipleException */ public function testNotMultipleShouldThrowMultipleException($multipleOf, $input) { $multiple = new Multiple($multipleOf); $this->assertFalse($multiple->validate($input)); $this->assertFalse($multiple->assert($input)); } public function providerForMultiple() { return [ ['', ''], [5, 20], [5, 5], [5, 0], [5, -500], [1, 0], [1, 1], [1, 2], [1, 3], [0, 0], // Only 0 is multiple of 0 ]; } public function providerForNotMultiple() { return [ [5, 11], [5, 3], [5, -1], [3, 4], [10, -8], [10, 57], [10, 21], [0, 1], [0, 2], ]; } } Validation-1.1.29/tests/unit/Rules/NegativeTest.php000066400000000000000000000033251336766562500222520ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Negative * @covers Respect\Validation\Exceptions\NegativeException */ class NegativeTest extends \PHPUnit_Framework_TestCase { protected $negativeValidator; protected function setUp() { $this->negativeValidator = new Negative(); } /** * @dataProvider providerForNegative */ public function testNegativeShouldPass($input) { $this->assertTrue($this->negativeValidator->assert($input)); $this->assertTrue($this->negativeValidator->__invoke($input)); $this->assertTrue($this->negativeValidator->check($input)); } /** * @dataProvider providerForNotNegative * @expectedException Respect\Validation\Exceptions\NegativeException */ public function testNotNegativeNumbersShouldThrowNegativeException($input) { $this->assertFalse($this->negativeValidator->__invoke($input)); $this->assertFalse($this->negativeValidator->assert($input)); } public function providerForNegative() { return [ ['-1.44'], [-1e-5], [-10], ]; } public function providerForNotNegative() { return [ [''], [0], [-0], [null], ['a'], [' '], ['Foo'], [16], ['165'], [123456], [1e10], ]; } } Validation-1.1.29/tests/unit/Rules/NfeAccessKeyTest.php000066400000000000000000000053361336766562500230170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\NfeAccessKey * @covers Respect\Validation\Exceptions\NfeAccessKeyException */ class NfeAccessKeyTest extends \PHPUnit_Framework_TestCase { protected $nfeValidator; protected function setUp() { $this->nfeValidator = new NfeAccessKey(); } /** * @dataProvider validAccessKeyProvider */ public function testValidAccessKey($aK) { $this->assertTrue($this->nfeValidator->assert($aK)); $this->assertTrue($this->nfeValidator->__invoke($aK)); $this->assertTrue($this->nfeValidator->check($aK)); } /** * @dataProvider invalidAccessKeyProvider * @expectedException Respect\Validation\Exceptions\NfeAccessKeyException */ public function testInvalidAccessKey($aK) { $this->assertFalse($this->nfeValidator->assert($aK)); } /** * @dataProvider invalidAccessKeyLengthProvider * @expectedException Respect\Validation\Exceptions\NfeAccessKeyException */ public function testInvalidLengthCnh($aK) { $this->assertFalse($this->nfeValidator->assert($aK)); } public function validAccessKeyProvider() { return [ ['52060433009911002506550120000007800267301615'], ]; } public function invalidAccessKeyProvider() { return [ ['31841136830118868211870485416765268625116906'], ['21470801245862435081451225624565260861852679'], ['45644318091447671194616059650873352394885852'], ['17214281716057582143671174314277906696193888'], ['56017280182977836779696364362142515138726654'], ['90157126614010548506235171976891004177042525'], ['78457064241662300187501877048374851128754067'], ['39950148079977322431982386613620895568235903'], ['90820939577654114875253907311677136672761216'], ]; } public function invalidAccessKeyLengthProvider() { return [ ['11145573386990252067204852181837301'], ['6209433147444876'], ['00745996227609395385255721262102'], ['58215798856653'], ['24149625439084262707824706699374326'], ['163907274335'], ['67229454773008929675906894698'], ['5858836670181917762140106857095788313119136'], ['6098412281885524361833754087461339281130'], ['9025299113310221'], ]; } } Validation-1.1.29/tests/unit/Rules/NoTest.php000066400000000000000000000036741336766562500210730ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\No * @covers Respect\Validation\Exceptions\NoException */ class NoTest extends \PHPUnit_Framework_TestCase { public function testShouldUseDefaultPattern() { $rule = new No(); $actualPattern = $rule->regex; $expectedPattern = '/^n(o(t|pe)?|ix|ay)?$/i'; $this->assertEquals($expectedPattern, $actualPattern); } public function testShouldUseLocalPatternForNoExpressionWhenDefined() { if (!defined('NOEXPR')) { $this->markTestSkipped('Constant NOEXPR is not defined'); return; } $rule = new No(true); $actualPattern = $rule->regex; $expectedPattern = '/'.nl_langinfo(NOEXPR).'/i'; $this->assertEquals($expectedPattern, $actualPattern); } /** * @dataProvider validNoProvider */ public function testShouldValidatePatternAccordingToTheDefinedLocale($input) { $rule = new No(); $this->assertTrue($rule->validate($input)); } public function validNoProvider() { return [ ['N'], ['Nay'], ['Nix'], ['No'], ['Nope'], ['Not'], ]; } /** * @dataProvider invalidNoProvider */ public function testShouldNotValidatePatternAccordingToTheDefinedLocale($input) { $rule = new No(); $this->assertFalse($rule->validate($input)); } public function invalidNoProvider() { return [ ['Donnot'], ['Never'], ['Niet'], ['Noooooooo'], ['Não'], ]; } } Validation-1.1.29/tests/unit/Rules/NoWhitespaceTest.php000066400000000000000000000043311336766562500230770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\NoWhitespace * @covers Respect\Validation\Exceptions\NoWhitespaceException */ class NoWhitespaceTest extends \PHPUnit_Framework_TestCase { protected $noWhitespaceValidator; protected function setUp() { $this->noWhitespaceValidator = new NoWhitespace(); } /** * @dataProvider providerForPass */ public function testStringWithNoWhitespaceShouldPass($input) { $this->assertTrue($this->noWhitespaceValidator->__invoke($input)); $this->assertTrue($this->noWhitespaceValidator->check($input)); $this->assertTrue($this->noWhitespaceValidator->assert($input)); } /** * @dataProvider providerForFail * @expectedException Respect\Validation\Exceptions\NoWhitespaceException */ public function testStringWithWhitespaceShouldFail($input) { $this->assertFalse($this->noWhitespaceValidator->__invoke($input)); $this->assertFalse($this->noWhitespaceValidator->assert($input)); } /** * @expectedException Respect\Validation\Exceptions\NoWhitespaceException */ public function testStringWithLineBreaksShouldFail() { $this->assertFalse($this->noWhitespaceValidator->__invoke("w\npoiur")); $this->assertFalse($this->noWhitespaceValidator->assert("w\npoiur")); } public function providerForPass() { return [ [''], [null], [0], ['wpoiur'], ['Foo'], ]; } public function providerForFail() { return [ [' '], ['w poiur'], [' '], ["Foo\nBar"], ["Foo\tBar"], ]; } /** * @issue 346 * @expectedException Respect\Validation\Exceptions\NoWhitespaceException */ public function testArrayDoesNotThrowAWarning() { $this->noWhitespaceValidator->assert([]); } } Validation-1.1.29/tests/unit/Rules/NoneOfTest.php000066400000000000000000000030571336766562500216760ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\NoneOf * @covers Respect\Validation\Exceptions\NoneOfException */ class NoneOfTest extends \PHPUnit_Framework_TestCase { public function testValid() { $valid1 = new Callback(function () { return false; }); $valid2 = new Callback(function () { return false; }); $valid3 = new Callback(function () { return false; }); $o = new NoneOf($valid1, $valid2, $valid3); $this->assertTrue($o->validate('any')); $this->assertTrue($o->assert('any')); $this->assertTrue($o->check('any')); } /** * @expectedException Respect\Validation\Exceptions\NoneOfException */ public function testInvalid() { $valid1 = new Callback(function () { return false; }); $valid2 = new Callback(function () { return false; }); $valid3 = new Callback(function () { return true; }); $o = new NoneOf($valid1, $valid2, $valid3); $this->assertFalse($o->validate('any')); $this->assertFalse($o->assert('any')); } } Validation-1.1.29/tests/unit/Rules/NotBlankTest.php000066400000000000000000000042101336766562500222120ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\NotBlank * @covers Respect\Validation\Exceptions\NotBlankException */ class NotBlankTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForNotBlank */ public function testShouldValidateWhenNotBlank($input) { $rule = new NotBlank(); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForBlank */ public function testShouldNotValidateWhenBlank($input) { $rule = new NotBlank(); $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\NotBlankException * @expectedExceptionMessage The value must not be blank */ public function testShouldThrowExceptionWhenFailure() { $rule = new NotBlank(); $rule->check(0); } /** * @expectedException Respect\Validation\Exceptions\NotBlankException * @expectedExceptionMessage whatever must not be blank */ public function testShouldThrowExceptionWhenFailureAndDoesHaveAName() { $rule = new NotBlank(); $rule->setName('whatever'); $rule->check(0); } public function providerForNotBlank() { $object = new stdClass(); $object->foo = true; return [ [1], [' oi'], [[5]], [[1]], [$object], ]; } public function providerForBlank() { return [ [null], [''], [[]], [' '], [0], ['0'], [0], ['0.0'], [false], [['']], [[' ']], [[0]], [['0']], [[false]], [[[''], [0]]], [new stdClass()], ]; } } Validation-1.1.29/tests/unit/Rules/NotEmptyTest.php000066400000000000000000000025611336766562500222700ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\NotEmpty * @covers Respect\Validation\Exceptions\NotEmptyException */ class NotEmptyTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new NotEmpty(); } /** * @dataProvider providerForNotEmpty */ public function testStringNotEmpty($input) { $this->assertTrue($this->object->assert($input)); } /** * @dataProvider providerForEmpty * @expectedException Respect\Validation\Exceptions\NotEmptyException */ public function testStringEmpty($input) { $this->assertFalse($this->object->assert($input)); } public function providerForNotEmpty() { return [ [1], [' oi'], [[5]], [[0]], [new \stdClass()], ]; } public function providerForEmpty() { return [ [''], [' '], ["\n"], [false], [null], [[]], ]; } } Validation-1.1.29/tests/unit/Rules/NotOptionalTest.php000066400000000000000000000025471336766562500227630ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\NotOptional */ class NotOptionalTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForNotOptional */ public function testShouldValidateWhenNotOptional($input) { $rule = new NotOptional(); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForOptional */ public function testShouldNotValidateWhenOptional($input) { $rule = new NotOptional(); $this->assertFalse($rule->validate($input)); } public function providerForNotOptional() { return [ [[]], [' '], [0], ['0'], [0], ['0.0'], [false], [['']], [[' ']], [[0]], [['0']], [[false]], [[[''], [0]]], [new stdClass()], ]; } public function providerForOptional() { return [ [null], [''], ]; } } Validation-1.1.29/tests/unit/Rules/NotTest.php000066400000000000000000000046521336766562500212540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Validator; /** * @group rule * @covers Respect\Validation\Rules\Not * @covers Respect\Validation\Exceptions\NotException */ class NotTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidNot */ public function testNot($v, $input) { $not = new Not($v); $this->assertTrue($not->assert($input)); } /** * @dataProvider providerForInvalidNot * @expectedException Respect\Validation\Exceptions\ValidationException */ public function testNotNotHaha($v, $input) { $not = new Not($v); $this->assertFalse($not->assert($input)); } /** * @dataProvider providerForSetName */ public function testNotSetName($v) { $not = new Not($v); $not->setName('Foo'); $this->assertEquals('Foo', $not->getName()); $this->assertEquals('Foo', $v->getName()); } public function providerForValidNot() { return [ [new IntVal(), ''], [new IntVal(), 'aaa'], [new AllOf(new NoWhitespace(), new Digit()), 'as df'], [new AllOf(new NoWhitespace(), new Digit()), '12 34'], [new AllOf(new AllOf(new NoWhitespace(), new Digit())), '12 34'], [new AllOf(new NoneOf(new Numeric(), new IntVal())), 13.37], [new NoneOf(new Numeric(), new IntVal()), 13.37], [Validator::noneOf(Validator::numeric(), Validator::intVal()), 13.37], ]; } public function providerForInvalidNot() { return [ [new IntVal(), 123], [new AllOf(new OneOf(new Numeric(), new IntVal())), 13.37], [new OneOf(new Numeric(), new IntVal()), 13.37], [Validator::oneOf(Validator::numeric(), Validator::intVal()), 13.37], ]; } public function providerForSetName() { return [ [new IntVal()], [new AllOf(new Numeric, new IntVal)], [new Not(new Not(new IntVal()))], [Validator::intVal()->setName('Bar')], [Validator::noneOf(Validator::numeric(), Validator::intVal())], ]; } } Validation-1.1.29/tests/unit/Rules/NullTypeTest.php000066400000000000000000000024101336766562500222560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\NullType * @covers Respect\Validation\Exceptions\NullTypeException */ class NullTypeTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new NullType(); } public function testNullValue() { $this->assertTrue($this->object->assert(null)); $this->assertTrue($this->object->__invoke(null)); $this->assertTrue($this->object->check(null)); } /** * @dataProvider providerForNotNull * @expectedException Respect\Validation\Exceptions\NullTypeException */ public function testNotNull($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForNotNull() { return [ [''], [0], ['w poiur'], [' '], ['Foo'], ]; } } Validation-1.1.29/tests/unit/Rules/NumericTest.php000066400000000000000000000030351336766562500221100ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Numeric * @covers Respect\Validation\Exceptions\NumericException */ class NumericTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new Numeric(); } /** * @dataProvider providerForNumeric */ public function testNumeric($input) { $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->check($input)); $this->assertTrue($this->object->assert($input)); } /** * @dataProvider providerForNotNumeric * @expectedException Respect\Validation\Exceptions\NumericException */ public function testNotNumeric($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForNumeric() { return [ [165], [165.0], [-165], ['165'], ['165.0'], ['+165.0'], ]; } public function providerForNotNumeric() { return [ [''], [null], ['a'], [' '], ['Foo'], ]; } } Validation-1.1.29/tests/unit/Rules/ObjectTypeTest.php000066400000000000000000000027731336766562500225660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\ObjectType * @covers Respect\Validation\Exceptions\ObjectTypeException */ class ObjectTypeTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new ObjectType(); } /** * @dataProvider providerForObject */ public function testObject($input) { $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->assert($input)); $this->assertTrue($this->object->check($input)); } /** * @dataProvider providerForNotObject * @expectedException Respect\Validation\Exceptions\ObjectTypeException */ public function testNotObject($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForObject() { return [ [new \stdClass()], [new \ArrayObject()], ]; } public function providerForNotObject() { return [ [''], [null], [121], [[]], ['Foo'], [false], ]; } } Validation-1.1.29/tests/unit/Rules/OddTest.php000066400000000000000000000026601336766562500212170ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Odd * @covers Respect\Validation\Exceptions\OddException */ class OddTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new Odd(); } /** * @dataProvider providerForOdd */ public function testOdd($input) { $this->assertTrue($this->object->assert($input)); $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->check($input)); } /** * @dataProvider providerForNotOdd * @expectedException Respect\Validation\Exceptions\OddException */ public function testNotOdd($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForOdd() { return [ [-5], [-1], [1], [13], ]; } public function providerForNotOdd() { return [ [''], [-2], [-0], [0], [32], ]; } } Validation-1.1.29/tests/unit/Rules/OneOfTest.php000066400000000000000000000035031336766562500215140ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\OneOf * @covers Respect\Validation\Exceptions\OneOfException */ class OneOfTest extends \PHPUnit_Framework_TestCase { public function testValid() { $valid1 = new Callback(function () { return false; }); $valid2 = new Callback(function () { return true; }); $valid3 = new Callback(function () { return false; }); $o = new OneOf($valid1, $valid2, $valid3); $this->assertTrue($o->validate('any')); $this->assertTrue($o->assert('any')); $this->assertTrue($o->check('any')); } /** * @expectedException Respect\Validation\Exceptions\OneOfException */ public function testInvalid() { $valid1 = new Callback(function () { return false; }); $valid2 = new Callback(function () { return false; }); $valid3 = new Callback(function () { return false; }); $o = new OneOf($valid1, $valid2, $valid3); $this->assertFalse($o->validate('any')); $this->assertFalse($o->assert('any')); } /** * @expectedException Respect\Validation\Exceptions\XdigitException */ public function testInvalidCheck() { $o = new OneOf(new Xdigit(), new Alnum()); $this->assertFalse($o->validate(-10)); $this->assertFalse($o->check(-10)); } } Validation-1.1.29/tests/unit/Rules/OptionalTest.php000066400000000000000000000071041336766562500222740ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\Optional */ class OptionalTest extends \PHPUnit_Framework_TestCase { public function providerForOptional() { return [ [null], [''], ]; } public function providerForNotOptional() { return [ [1], [[]], [' '], [0], ['0'], [0], ['0.0'], [false], [['']], [[' ']], [[0]], [['0']], [[false]], [[[''], [0]]], [new stdClass()], ]; } public function testShouldAcceptInstanceOfValidatobleOnConstructor() { $validatable = $this->getMock('Respect\\Validation\\Validatable'); $rule = new Optional($validatable); $this->assertSame($validatable, $rule->getValidatable()); } /** * @dataProvider providerForOptional */ public function testShouldNotValidateRuleWhenInputIsOptional($input) { $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->never()) ->method('validate'); $rule = new Optional($validatable); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForNotOptional */ public function testShouldValidateRuleWhenInputIsNotOptional($input) { $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->once()) ->method('validate') ->with($input) ->will($this->returnValue(true)); $rule = new Optional($validatable); $this->assertTrue($rule->validate($input)); } public function testShouldNotAssertRuleWhenInputIsOptional() { $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->never()) ->method('assert'); $rule = new Optional($validatable); $this->assertTrue($rule->assert('')); } public function testShouldAssertRuleWhenInputIsNotOptional() { $input = 'foo'; $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->once()) ->method('assert') ->with($input) ->will($this->returnValue(true)); $rule = new Optional($validatable); $this->assertTrue($rule->assert($input)); } public function testShouldNotCheckRuleWhenInputIsOptional() { $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->never()) ->method('check'); $rule = new Optional($validatable); $this->assertTrue($rule->check('')); } public function testShouldCheckRuleWhenInputIsNotOptional() { $input = 'foo'; $validatable = $this->getMock('Respect\\Validation\\Validatable'); $validatable ->expects($this->once()) ->method('check') ->with($input) ->will($this->returnValue(true)); $rule = new Optional($validatable); $this->assertTrue($rule->check($input)); } } Validation-1.1.29/tests/unit/Rules/PerfectSquareTest.php000066400000000000000000000034051336766562500232600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\PerfectSquare * @covers Respect\Validation\Exceptions\PerfectSquareException */ class PerfectSquareTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new PerfectSquare(); } /** * @dataProvider providerForPerfectSquare */ public function testPerfectSquare($input) { $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->check($input)); $this->assertTrue($this->object->assert($input)); } /** * @dataProvider providerForNotPerfectSquare * @expectedException Respect\Validation\Exceptions\PerfectSquareException */ public function testNotPerfectSquare($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForPerfectSquare() { return [ [1], [9], [25], ['25'], [400], ['400'], ['0'], [81], [0], [2500], ]; } public function providerForNotPerfectSquare() { return [ [250], [''], [null], [7], [-1], [6], [2], ['-1'], ['a'], [' '], ['Foo'], ]; } } Validation-1.1.29/tests/unit/Rules/PeselTest.php000066400000000000000000000023311336766562500215540ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Pesel */ class PeselTest extends RuleTestCase { public function providerForValidInput() { $rule = new Pesel(); return [ [$rule, 0x4EADCD168], // 0x4EADCD168 === 21120209256 [$rule, 49040501580], [$rule, '49040501580'], [$rule, '39012110375'], [$rule, '50083014540'], [$rule, '69090515504'], [$rule, '21120209256'], [$rule, '01320613891'] ]; } public function providerForInvalidInput() { $rule = new Pesel(); return [ [$rule, '1'], [$rule, '22'], [$rule, 'PESEL'], [$rule, '0x4EADCD168'], [$rule, 'PESEL123456'], [$rule, '690905155.4'], [$rule, '21120209251'], [$rule, '21120209250'], [$rule, '01320613890'] ]; } } Validation-1.1.29/tests/unit/Rules/PhoneTest.php000066400000000000000000000071421336766562500215620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Phone * @covers Respect\Validation\Exceptions\PhoneException */ class PhoneTest extends \PHPUnit_Framework_TestCase { protected $phoneValidator; protected function setUp() { $this->phoneValidator = new Phone(); } /** * @dataProvider providerForPhone */ public function testValidPhoneShouldReturnTrue($input) { $this->assertTrue($this->phoneValidator->__invoke($input)); $this->assertTrue($this->phoneValidator->assert($input)); $this->assertTrue($this->phoneValidator->check($input)); } /** * @dataProvider providerForNotPhone * @expectedException Respect\Validation\Exceptions\PhoneException */ public function testInvalidPhoneShouldThrowPhoneException($input) { $this->assertFalse($this->phoneValidator->__invoke($input)); $this->assertFalse($this->phoneValidator->assert($input)); } public function providerForPhone() { return [ ['+5-555-555-5555'], ['+5 555 555 5555'], ['+5.555.555.5555'], ['5-555-555-5555'], ['5.555.555.5555'], ['5 555 555 5555'], ['555.555.5555'], ['555 555 5555'], ['555-555-5555'], ['555-5555555'], ['5(555)555.5555'], ['+5(555)555.5555'], ['+5(555)555 5555'], ['+5(555)555-5555'], ['+5(555)5555555'], ['(555)5555555'], ['(555)555.5555'], ['(555)555-5555'], ['(555) 555 5555'], ['55555555555'], ['5555555555'], ['+33(1)2222222'], ['+33(1)222 2222'], ['+33(1)222.2222'], ['+33(1)22 22 22 22'], ['33(1)2222222'], ['33(1)22222222'], ['33(1)22 22 22 22'], ['(020) 7476 4026'], ['33(020) 7777 7777'], ['33(020)7777 7777'], ['+33(020) 7777 7777'], ['+33(020)7777 7777'], ['03-6106666'], ['036106666'], ['+33(11) 97777 7777'], ['+3311977777777'], ['11977777777'], ['11 97777 7777'], ['(11) 97777 7777'], ['(11) 97777-7777'], ['555-5555'], ['5555555'], ['555.5555'], ['555 5555'], ['+1 (555) 555 5555'], ]; } public function providerForNotPhone() { return [ [''], ['123'], ['(11- 97777-7777'], ['-11) 97777-7777'], ['s555-5555'], ['555-555'], ['555555'], ['555+5555'], ['(555)555555'], ['(555)55555'], ['+(555)555 555'], ['+5(555)555 555'], ['+5(555)555 555 555'], ['555)555 555'], ['+5(555)5555 555'], ['(555)55 555'], ['(555)5555 555'], ['+5(555)555555'], ['5(555)55 55555'], ['(5)555555'], ['+55(5)55 5 55 55'], ['+55(5)55 55 55 5'], ['+55(5)55 55 55'], ['+55(5)5555 555'], ['+55()555 5555'], ['03610666-5'], ['text'], ["555\n5555"], ]; } } Validation-1.1.29/tests/unit/Rules/PhpLabelTest.php000066400000000000000000000027311336766562500221770ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\PhpLabel * @covers Respect\Validation\Exceptions\PhpLabelException */ class PhpLabelTest extends RuleTestCase { public function providerForValidInput() { $rule = new PhpLabel(); return [ [$rule, '_'], [$rule, 'foo'], [$rule, 'f00'], [$rule, uniqid('_')], [$rule, uniqid('a')], [$rule, strtoupper(uniqid('_'))], [$rule, strtoupper(uniqid('a'))], ]; } public function providerForInvalidInput() { $rule = new PhpLabel(); return [ [$rule, '%'], [$rule, '*'], [$rule, '-'], [$rule, 'f-o-o-'], [$rule, "\n"], [$rule, "\r"], [$rule, "\t"], [$rule, ' '], [$rule, 'f o o'], [$rule, '0ne'], [$rule, '0_ne'], [$rule, uniqid(mt_rand(0, 9))], [$rule, null], [$rule, mt_rand()], [$rule, 0], [$rule, 1], [$rule, []], [$rule, new \StdClass()], [$rule, new \DateTime()], ]; } } Validation-1.1.29/tests/unit/Rules/PositiveTest.php000066400000000000000000000031331336766562500223070ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Positive * @covers Respect\Validation\Exceptions\PositiveException */ class PositiveTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new Positive(); } /** * @dataProvider providerForPositive */ public function testPositive($input) { $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->check($input)); $this->assertTrue($this->object->assert($input)); } /** * @dataProvider providerForNotPositive * @expectedException Respect\Validation\Exceptions\PositiveException */ public function testNotPositive($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForPositive() { return [ [16], ['165'], [123456], [1e10], ]; } public function providerForNotPositive() { return [ [''], [null], ['a'], [' '], ['Foo'], ['-1.44'], [-1e-5], [0], [-0], [-10], ]; } } Validation-1.1.29/tests/unit/Rules/PostalCodeTest.php000066400000000000000000000074041336766562500225470ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\PostalCode * @covers Respect\Validation\Exceptions\PostalCodeException */ class PostalCodeTest extends \PHPUnit_Framework_TestCase { public function testShouldUsePatternAccordingToCountryCode() { $countryCode = 'BR'; $rule = new PostalCode($countryCode); $actualPattern = $rule->regex; $expectedPattern = $rule->postalCodes[$countryCode]; $this->assertEquals($expectedPattern, $actualPattern); } public function testShouldNotBeCaseSensitiveWhenChoosingPatternAccordingToCountryCode() { $rule1 = new PostalCode('BR'); $rule2 = new PostalCode('br'); $this->assertEquals($rule1->regex, $rule2->regex); } public function testShouldUseDefaultPatternWhenCountryCodeDoesNotHavePostalCode() { $rule = new PostalCode('ZW'); $actualPattern = $rule->regex; $expectedPattern = PostalCode::DEFAULT_PATTERN; $this->assertEquals($expectedPattern, $actualPattern); } public function testShouldValidateEmptyStringsWhenUsingDefaultPattern() { $rule = new PostalCode('ZW'); $this->assertTrue($rule->validate('')); } public function testShouldNotValidateNonEmptyStringsWhenUsingDefaultPattern() { $rule = new PostalCode('ZW'); $this->assertFalse($rule->validate(' ')); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage Cannot validate postal code from "Whatever" country */ public function testShouldThrowsExceptionWhenCountryCodeIsNotValid() { new PostalCode('Whatever'); } /** * @dataProvider validPostalCodesProvider */ public function testShouldValidatePatternAccordingToTheDefinedCountryCode($countryCode, $postalCode) { $rule = new PostalCode($countryCode); $this->assertTrue($rule->validate($postalCode)); } public function validPostalCodesProvider() { return [ ['BR', '02179-000'], ['BR', '02179000'], ['CA', 'A1A 2B2'], ['GB', 'GIR 0AA'], ['GB', 'PR1 9LY'], ['US', '02179'], ['YE', ''], ['PL', '99-300'], ['NL', '1012 GX'], ['NL', '1012GX'], ['PT', '3660-606'], ['PT', '3660606'], ['CO', '110231'], ['KR', '03187'], ]; } /** * @dataProvider invalidPostalCodesProvider */ public function testShouldNotValidatePatternAccordingToTheDefinedCountryCode($countryCode, $postalCode) { $rule = new PostalCode($countryCode); $this->assertFalse($rule->validate($postalCode)); } /** * @expectedException Respect\Validation\Exceptions\PostalCodeException * @expectedExceptionMessage "02179-000" must be a valid postal code on "US" */ public function testShouldThrowsPostalCodeExceptionWhenValidationFails() { $rule = new PostalCode('US'); $rule->check('02179-000'); } public function invalidPostalCodesProvider() { return [ ['BR', '02179'], ['BR', '02179.000'], ['CA', '1A1B2B'], ['GB', 'GIR 00A'], ['GB', 'GIR0AA'], ['GB', 'PR19LY'], ['US', '021 79'], ['YE', '02179'], ['PL', '99300'], ['KR', '548940'], ['KR', '548-940'], ]; } } Validation-1.1.29/tests/unit/Rules/PrimeNumberTest.php000066400000000000000000000033121336766562500227310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\PrimeNumber * @covers Respect\Validation\Exceptions\PrimeNumberException */ class PrimeNumberTest extends \PHPUnit_Framework_TestCase { protected $object; protected function setUp() { $this->object = new PrimeNumber(); } /** * @dataProvider providerForPrimeNumber */ public function testPrimeNumber($input) { $this->assertTrue($this->object->__invoke($input)); $this->assertTrue($this->object->check($input)); $this->assertTrue($this->object->assert($input)); } /** * @dataProvider providerForNotPrimeNumber * @expectedException Respect\Validation\Exceptions\PrimeNumberException */ public function testNotPrimeNumber($input) { $this->assertFalse($this->object->__invoke($input)); $this->assertFalse($this->object->assert($input)); } public function providerForPrimeNumber() { return [ [3], [5], [7], ['3'], ['5'], ['+7'], ]; } public function providerForNotPrimeNumber() { return [ [''], [null], [0], [10], [25], [36], [-1], ['-1'], ['25'], ['0'], ['a'], [' '], ['Foo'], ]; } } Validation-1.1.29/tests/unit/Rules/PrntTest.php000066400000000000000000000046311336766562500214340ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Prnt * @covers Respect\Validation\Exceptions\PrntException */ class PrntTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidPrint */ public function testValidDataWithPrintCharsShouldReturnTrue($validPrint, $additional = '') { $validator = new Prnt($additional); $this->assertTrue($validator->validate($validPrint)); } /** * @dataProvider providerForInvalidPrint * @expectedException Respect\Validation\Exceptions\PrntException */ public function testInvalidPrintShouldFailAndThrowPrntException($invalidPrint, $additional = '') { $validator = new Prnt($additional); $this->assertFalse($validator->validate($invalidPrint)); $this->assertFalse($validator->assert($invalidPrint)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Prnt($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Prnt($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ["\t\n", "\t\n "], ["\v\r", "\v\r "], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidPrint() { return [ [' '], ['LKA#@%.54'], ['foobar'], ['16-50'], ['123'], ['foo bar'], ['#$%&*_'], ]; } public function providerForInvalidPrint() { return [ [''], [null], ['foo'.chr(7).'bar'], ['foo'.chr(10).'bar'], ]; } } Validation-1.1.29/tests/unit/Rules/PunctTest.php000066400000000000000000000047241336766562500216050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Punct * @covers Respect\Validation\Exceptions\PunctException */ class PunctTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidPunct */ public function testValidDataWithPunctShouldReturnTrue($validPunct, $additional = '') { $validator = new Punct($additional); $this->assertTrue($validator->validate($validPunct)); } /** * @dataProvider providerForInvalidPunct * @expectedException Respect\Validation\Exceptions\PunctException */ public function testInvalidPunctShouldFailAndThrowPunctException($invalidPunct, $additional = '') { $validator = new Punct($additional); $this->assertFalse($validator->validate($invalidPunct)); $this->assertFalse($validator->assert($invalidPunct)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Punct($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Punct($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['abc123 ', '!@#$%^&*(){} abc 123'], ["abc123 \t\n", "[]?+=/\\-_|\"',<>. \t \n abc 123"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidPunct() { return [ ['.'], [',;:'], ['-@#$*'], ['()[]{}'], ]; } public function providerForInvalidPunct() { return [ [''], ['16-50'], ['a'], [' '], ['Foo'], ['12.1'], ['-12'], [-12], ['( )_{}'], ]; } } Validation-1.1.29/tests/unit/Rules/ReadableTest.php000066400000000000000000000035131336766562500222060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_readable'] = null; function is_readable($readable) { $return = \is_readable($readable); // Running the real function if (null !== $GLOBALS['is_readable']) { $return = $GLOBALS['is_readable']; $GLOBALS['is_readable'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\Readable * @covers Respect\Validation\Exceptions\ReadableException */ class ReadableTest extends \PHPUnit_Framework_TestCase { /** * @covers Respect\Validation\Rules\Readable::validate */ public function testValidReadableFileShouldReturnTrue() { $GLOBALS['is_readable'] = true; $rule = new Readable(); $input = '/path/of/a/valid/readable/file.txt'; $this->assertTrue($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Readable::validate */ public function testInvalidReadableFileShouldReturnFalse() { $GLOBALS['is_readable'] = false; $rule = new Readable(); $input = '/path/of/an/invalid/readable/file.txt'; $this->assertFalse($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Readable::validate */ public function testShouldValidateObjects() { $rule = new Readable(); $object = $this->getMock('SplFileInfo', ['isReadable'], ['somefile.txt']); $object->expects($this->once()) ->method('isReadable') ->will($this->returnValue(true)); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/RegexTest.php000066400000000000000000000016411336766562500215610ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Regex */ final class RegexTest extends RuleTestCase { /** * {@inheritdoc} */ public function providerForValidInput() { return [ [new Regex('/^[a-z]+$/'), 'wpoiur'], [new Regex('/^[a-z]+$/i'), 'wPoiur'], [new Regex('/^[0-9]+$/i'), 42], ]; } /** * {@inheritdoc} */ public function providerForInvalidInput() { return [ [new Regex('/^w+$/'), 'w poiur'], [new Regex('/^w+$/'), new \stdClass()], [new Regex('/^w+$/'), []], ]; } } Validation-1.1.29/tests/unit/Rules/ResourceTypeTest.php000066400000000000000000000032141336766562500231360ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\ResourceType * @covers Respect\Validation\Exceptions\ResourceTypeException */ class ResourceTypeTest extends \PHPUnit_Framework_TestCase { protected $rule; protected function setUp() { $this->rule = new ResourceType(); } /** * @dataProvider providerForResource */ public function testShouldValidateResourceNumbers($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForNonResource */ public function testShouldNotValidateNonResourceNumbers($input) { $this->assertFalse($this->rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\ResourceTypeException * @expectedExceptionMessage "Something" must be a resource */ public function testShouldThrowResourceExceptionWhenChecking() { $this->rule->check('Something'); } public function providerForResource() { return [ [stream_context_create()], [tmpfile()], [xml_parser_create()], ]; } public function providerForNonResource() { return [ ['String'], [123], [[]], [function () {}], [new \stdClass()], [null], ]; } } Validation-1.1.29/tests/unit/Rules/RomanTest.php000066400000000000000000000035301336766562500215620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Roman * @covers Respect\Validation\Exceptions\RomanException */ class RomanTest extends \PHPUnit_Framework_TestCase { protected $romanValidator; protected function setUp() { $this->romanValidator = new Roman(); } /** * @dataProvider providerForRoman */ public function testValidRomansShouldReturnTrue($input) { $this->assertTrue($this->romanValidator->__invoke($input)); $this->assertTrue($this->romanValidator->assert($input)); $this->assertTrue($this->romanValidator->check($input)); } /** * @dataProvider providerForNotRoman * @expectedException Respect\Validation\Exceptions\RomanException */ public function testInvalidRomansShouldThrowRomanException($input) { $this->assertFalse($this->romanValidator->__invoke($input)); $this->assertFalse($this->romanValidator->assert($input)); } public function providerForRoman() { return [ [''], ['III'], ['IV'], ['VI'], ['XIX'], ['XLII'], ['LXII'], ['CXLIX'], ['CLIII'], ['MCCXXXIV'], ['MMXXIV'], ['MCMLXXV'], ['MMMMCMXCIX'], ]; } public function providerForNotRoman() { return [ [' '], ['IIII'], ['IVVVX'], ['CCDC'], // ['MXM'], ['XIIIIIIII'], ['MIMIMI'], ]; } } Validation-1.1.29/tests/unit/Rules/ScalarValTest.php000066400000000000000000000031511336766562500223550ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\ScalarVal * @covers Respect\Validation\Exceptions\ScalarValException */ class ScalarValTest extends \PHPUnit_Framework_TestCase { protected $rule; protected function setUp() { $this->rule = new ScalarVal(); } /** * @dataProvider providerForScalar */ public function testShouldValidateScalarNumbers($input) { $this->assertTrue($this->rule->validate($input)); } /** * @dataProvider providerForNonScalar */ public function testShouldNotValidateNonScalarNumbers($input) { $this->assertFalse($this->rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\ScalarValException * @expectedExceptionMessage null must be a scalar value */ public function testShouldThrowScalarExceptionWhenChecking() { $this->rule->check(null); } public function providerForScalar() { return [ ['6'], ['String'], [1.0], [42], [false], [true], ]; } public function providerForNonScalar() { return [ [[]], [function () {}], [new \stdClass()], [null], [tmpfile()], ]; } } Validation-1.1.29/tests/unit/Rules/SfTest.php000066400000000000000000000054221336766562500210600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use Respect\Validation\Validator as v; /** * @group rule * @covers Respect\Validation\Rules\Sf * @covers Respect\Validation\Exceptions\SfException */ class SfTest extends \PHPUnit_Framework_TestCase { public function testValidationWithAnExistingValidationConstraint() { $constraintName = 'Time'; $validConstraintValue = '04:20:00'; $invalidConstraintValue = 'yada'; $this->assertTrue( v::sf($constraintName)->validate($validConstraintValue), sprintf('"%s" should be valid under "%s" constraint.', $validConstraintValue, $constraintName) ); $this->assertFalse( v::sf($constraintName)->validate($invalidConstraintValue), sprintf('"%s" should be invalid under "%s" constraint.', $invalidConstraintValue, $constraintName) ); } /** * @depends testValidationWithAnExistingValidationConstraint */ public function testAssertionWithAnExistingValidationConstraint() { $constraintName = 'Time'; $validConstraintValue = '04:20:00'; $this->assertTrue( v::sf($constraintName)->assert($validConstraintValue), sprintf('"%s" should be valid under "%s" constraint.', $validConstraintValue, $constraintName) ); } /** * @depends testAssertionWithAnExistingValidationConstraint */ public function testAssertionMessageWithAnExistingValidationConstraint() { $constraintName = 'Time'; $invalidConstraintValue = '34:90:70'; try { v::sf($constraintName)->assert($invalidConstraintValue); } catch (\Respect\Validation\Exceptions\AllOfException $exception) { $fullValidationMessage = $exception->getFullMessage(); $expectedValidationException = <<assertEquals( $expectedValidationException, $fullValidationMessage, 'Exception message is different from the one expected.' ); } $this->fail('Validation exception expected to compare message.'); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage Symfony/Validator constraint "FluxCapacitor" does not exist. */ public function testValidationWithNonExistingConstraint() { $fantasyConstraintName = 'FluxCapacitor'; $fantasyValue = '8GW'; v::sf($fantasyConstraintName)->validate($fantasyValue); } } Validation-1.1.29/tests/unit/Rules/SizeTest.php000066400000000000000000000075621336766562500214310ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use org\bovigo\vfs\content\LargeFileContent; use org\bovigo\vfs\vfsStream; use PHPUnit_Framework_TestCase; use SplFileInfo; /** * @author Henrique Moody * @group rule * @covers Respect\Validation\Rules\Size * @covers Respect\Validation\Exceptions\SizeException */ class SizeTest extends PHPUnit_Framework_TestCase { public function validSizeProvider() { return [ [42, 42], ['1b', 1], ['1kb', 1024], ['1mb', 1048576], ['1gb', 1073741824], ['1tb', 1099511627776], ['1pb', 1125899906842624], ['1eb', 1152921504606846976], ['1zb', 1.1805916207174113E+21], ['1yb', 1.2089258196146292E+24], ]; } public function validFileProvider() { $root = vfsStream::setup(); $file2Kb = vfsStream::newFile('2kb.txt')->withContent(LargeFileContent::withKilobytes(2))->at($root); $file2Mb = vfsStream::newFile('2mb.txt')->withContent(LargeFileContent::withMegabytes(2))->at($root); return [ // Valid data [$file2Kb->url(), '1kb', null, true], [$file2Kb->url(), '2kb', null, true], [$file2Kb->url(), null, '2kb', true], [$file2Kb->url(), null, '3kb', true], [$file2Kb->url(), '1kb', '3kb', true], [$file2Mb->url(), '1mb', null, true], [$file2Mb->url(), '2mb', null, true], [$file2Mb->url(), null, '2mb', true], [$file2Mb->url(), null, '3mb', true], [$file2Mb->url(), '1mb', '3mb', true], // Invalid data [$file2Kb->url(), '3kb', null, false], [$file2Kb->url(), null, '1kb', false], [$file2Kb->url(), '1kb', '1.5kb', false], [$file2Mb->url(), '2.5mb', null, false], [$file2Mb->url(), '3gb', null, false], [$file2Mb->url(), null, '1b', false], [$file2Mb->url(), '1pb', '3pb', false], ]; } /** * @dataProvider validSizeProvider */ public function testShouldConvertUnitonConstructor($size, $bytes) { $rule = new Size($size); $this->assertEquals($bytes, $rule->minValue); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "42jb" is not a recognized file size */ public function testShouldThrowsAnExceptionWhenSizeIsNotValid() { new Size('42jb'); } /** * @dataProvider validFileProvider */ public function testShouldValidateFile($filename, $minSize, $maxSize, $expectedValidation) { $rule = new Size($minSize, $maxSize); $this->assertEquals($expectedValidation, $rule->validate($filename)); } public function testShouldValidateSplFileInfo() { $root = vfsStream::setup(); $file1Gb = vfsStream::newFile('1gb.txt')->withContent(LargeFileContent::withGigabytes(1))->at($root); $file1GbObject = new SplFileInfo($file1Gb->url()); $rule = new Size('1MB', '2GB'); $this->assertTrue($rule->validate($file1GbObject)); } /** * @expectedException Respect\Validation\Exceptions\SizeException * @expectedExceptionMessageRegExp #"vfs:.?/.?/root.?/1gb.txt" must be greater than "2pb"# */ public function testShouldThrowsSizeExceptionWhenAsserting() { $root = vfsStream::setup(); $file1Gb = vfsStream::newFile('1gb.txt')->withContent(LargeFileContent::withGigabytes(1))->at($root); $rule = new Size('2pb'); $rule->assert($file1Gb->url()); } } Validation-1.1.29/tests/unit/Rules/SlugTest.php000066400000000000000000000026301336766562500214200ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Slug */ class SlugTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerValidSlug */ public function testValidSlug($input) { $rule = new Slug(); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerInvalidSlug */ public function testInvalidSlug($input) { $rule = new Slug(); $this->assertFalse($rule->validate($input)); } public function providerValidSlug() { return [ ['o-rato-roeu-o-rei-de-roma'], ['o-alganet-e-um-feio'], ['a-e-i-o-u'], ['anticonstitucionalissimamente'], ]; } public function providerInvalidSlug() { return [ [''], ['o-alganet-é-um-feio'], ['á-é-í-ó-ú'], ['-assim-nao-pode'], ['assim-tambem-nao-'], ['nem--assim'], ['--nem-assim'], ['Nem mesmo Assim'], ['Ou-ate-assim'], ['-Se juntar-tudo-Então-'], ]; } } Validation-1.1.29/tests/unit/Rules/SpaceTest.php000066400000000000000000000047071336766562500215500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Space * @covers Respect\Validation\Exceptions\SpaceException */ class SpaceTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidSpace */ public function testValidDataWithSpaceShouldReturnTrue($validSpace, $additional = '') { $validator = new Space($additional); $this->assertTrue($validator->validate($validSpace)); } /** * @dataProvider providerForInvalidSpace * @expectedException Respect\Validation\Exceptions\SpaceException */ public function testInvalidSpaceShouldFailAndThrowSpaceException($invalidSpace, $additional = '') { $validator = new Space($additional); $this->assertFalse($validator->validate($invalidSpace)); $this->assertFalse($validator->assert($invalidSpace)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Space($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Space($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} '], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n "], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidSpace() { return [ ["\n"], [' '], [' '], ["\t"], [' '], ]; } public function providerForInvalidSpace() { return [ [''], ['16-50'], ['a'], ['Foo'], ['12.1'], ['-12'], [-12], ['_'], ]; } } Validation-1.1.29/tests/unit/Rules/StartsWithTest.php000066400000000000000000000034351336766562500226260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\StartsWith * @covers Respect\Validation\Exceptions\StartsWithException */ class StartsWithTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForStartsWith */ public function testStartsWith($start, $input) { $v = new StartsWith($start); $this->assertTrue($v->__invoke($input)); $this->assertTrue($v->check($input)); $this->assertTrue($v->assert($input)); } /** * @dataProvider providerForNotStartsWith * @expectedException Respect\Validation\Exceptions\StartsWithException */ public function testNotStartsWith($start, $input, $caseSensitive = false) { $v = new StartsWith($start, $caseSensitive); $this->assertFalse($v->__invoke($input)); $this->assertFalse($v->assert($input)); } public function providerForStartsWith() { return [ ['foo', ['foo', 'bar']], ['foo', 'FOObarbaz'], ['foo', 'foobarbaz'], ['foo', 'foobazfoo'], ['1', [1, 2, 3]], ['1', ['1', 2, 3], true], ]; } public function providerForNotStartsWith() { return [ ['foo', ''], ['bat', ['foo', 'bar']], ['foo', 'barfaabaz'], ['foo', 'FOObarbaz', true], ['foo', 'faabarbaz'], ['foo', 'baabazfaa'], ['foo', 'baafoofaa'], ['1', [1, '1', 3], true], ]; } } Validation-1.1.29/tests/unit/Rules/StringTypeTest.php000066400000000000000000000022241336766562500226150ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\StringType * @covers Respect\Validation\Exceptions\StringTypeException */ class StringTypeTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForString */ public function testString($input) { $rule = new StringType(); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForNotString */ public function testNotString($input) { $rule = new StringType(); $this->assertFalse($rule->validate($input)); } public function providerForString() { return [ [''], ['165.7'], ]; } public function providerForNotString() { return [ [null], [[]], [new \stdClass()], [150], ]; } } Validation-1.1.29/tests/unit/Rules/SubdivisionCodeTest.php000066400000000000000000000052651336766562500236060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use PHPUnit_Framework_TestCase; /** * @covers Respect\Validation\Rules\SubdivisionCode * @covers Respect\Validation\Exceptions\SubdivisionCodeException */ class SubdivisionCodeTest extends PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "whatever" is not a valid country code in ISO 3166-2 */ public function testShouldThrowsExceptionWhenInvalidFormat() { new SubdivisionCode('whatever'); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "JK" is not a valid country code in ISO 3166-2 */ public function testShouldNotAcceptWrongNamesOnConstructor() { new SubdivisionCode('JK'); } public function testShouldDefineASubdivisionCodeFormatOnConstructor() { $countrySubdivision = new SubdivisionCode('US'); $this->assertEquals('US', $countrySubdivision->countryCode); } public function providerForValidSubdivisionCodeInformation() { return [ ['AQ', null], ['BR', 'SP'], ['MV', '00'], ['US', 'CA'], ['YT', ''], ]; } /** * @dataProvider providerForValidSubdivisionCodeInformation */ public function testShouldValidateValidSubdivisionCodeInformation($countryCode, $input) { $countrySubdivision = new SubdivisionCode($countryCode); $this->assertTrue($countrySubdivision->validate($input)); } public function providerForInvalidSubdivisionCodeInformation() { return [ ['BR', 'CA'], ['MV', 0], ['US', 'CE'], ]; } /** * @dataProvider providerForInvalidSubdivisionCodeInformation */ public function testShouldNotValidateInvalidSubdivisionCodeInformation($countryCode, $input) { $countrySubdivision = new SubdivisionCode($countryCode); $this->assertFalse($countrySubdivision->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\SubdivisionCode\BrSubdivisionCodeException * @expectedExceptionMessage "CA" must be a subdivision code of Brazil */ public function testShouldThrowsSubdivisionCodeException() { $countrySubdivision = new SubdivisionCode('BR'); $countrySubdivision->assert('CA'); } } Validation-1.1.29/tests/unit/Rules/SymbolicLinkTest.php000066400000000000000000000034231336766562500231060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_link'] = null; function is_link($link) { $return = \is_link($link); if (null !== $GLOBALS['is_link']) { $return = $GLOBALS['is_link']; $GLOBALS['is_link'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\SymbolicLink * @covers Respect\Validation\Exceptions\SymbolicLinkException */ class SymbolicLinkTest extends \PHPUnit_Framework_TestCase { /** * @covers Respect\Validation\Rules\SymbolicLink::validate */ public function testValidSymbolicLinkShouldReturnTrue() { $GLOBALS['is_link'] = true; $rule = new SymbolicLink(); $input = '/path/of/a/valid/link.lnk'; $this->assertTrue($rule->validate($input)); } /** * @covers Respect\Validation\Rules\SymbolicLink::validate */ public function testInvalidSymbolicLinkShouldThrowException() { $GLOBALS['is_link'] = false; $rule = new SymbolicLink(); $input = '/path/of/an/invalid/link.lnk'; $this->assertFalse($rule->validate($input)); } /** * @covers Respect\Validation\Rules\SymbolicLink::validate */ public function testShouldValidateObjects() { $rule = new SymbolicLink(); $object = $this->getMock('SplFileInfo', ['isLink'], ['somelink.lnk']); $object->expects($this->once()) ->method('isLink') ->will($this->returnValue(true)); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/TldTest.php000066400000000000000000000023231336766562500212300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Tld */ class TldTest extends \PHPUnit_Framework_TestCase { public function providerForValidTld() { return [ ['com'], ['cafe'], ['democrat'], ['br'], ['us'], ['eu'], ]; } /** * @dataProvider providerForValidTld */ public function testShouldValidateInputWhenItIsAValidTld($input) { $rule = new Tld(); $this->assertTrue($rule->validate($input)); } public function providerForInvalidTld() { return [ ['1'], [1.0], ['wrongtld'], [true], ]; } /** * @dataProvider providerForInvalidTld */ public function testShouldInvalidateInputWhenItIsNotAValidTld($input) { $rule = new Tld(); $this->assertFalse($rule->validate($input)); } } Validation-1.1.29/tests/unit/Rules/TrueValTest.php000066400000000000000000000027771336766562500221040ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\TrueVal * @covers Respect\Validation\Exceptions\TrueValException */ class TrueValTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider validTrueProvider */ public function testShouldValidatePatternAccordingToTheDefinedLocale($input) { $rule = new TrueVal(); $this->assertTrue($rule->validate($input)); } public function validTrueProvider() { return [ [true], [1], ['1'], ['true'], ['on'], ['yes'], ['TRUE'], ['ON'], ['YES'], ['True'], ['On'], ['Yes'], ]; } /** * @dataProvider invalidTrueProvider */ public function testShouldNotValidatePatternAccordingToTheDefinedLocale($input) { $rule = new TrueVal(); $this->assertFalse($rule->validate($input)); } public function invalidTrueProvider() { return [ [false], [0], [0.5], [2], ['0'], ['false'], ['off'], ['no'], ['truth'], ]; } } Validation-1.1.29/tests/unit/Rules/TypeTest.php000066400000000000000000000046001336766562500214260ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use stdClass; /** * @group rule * @covers Respect\Validation\Rules\Type * @covers Respect\Validation\Exceptions\TypeException */ class TypeTest extends \PHPUnit_Framework_TestCase { public function testShouldDefineTypeOnConstructor() { $type = 'int'; $rule = new Type($type); $this->assertSame($type, $rule->type); } public function testShouldNotBeCaseSensitive() { $rule = new Type('InTeGeR'); $this->assertTrue($rule->validate(42)); } /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "whatever" is not a valid type */ public function testShouldThrowExceptionWhenTypeIsNotValid() { new Type('whatever'); } /** * @dataProvider providerForValidType */ public function testShouldValidateValidTypes($type, $input) { $rule = new Type($type); $this->assertTrue($rule->validate($input)); } /** * @dataProvider providerForInvalidType */ public function testShouldNotValidateInvalidTypes($type, $input) { $rule = new Type($type); $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\TypeException * @expectedExceptionMessage "Something" must be "integer" */ public function testShouldThrowTypeExceptionWhenCheckingAnInvalidInput() { $rule = new Type('integer'); $rule->check('Something'); } public function providerForValidType() { return [ ['array', []], ['bool', true], ['boolean', false], ['callable', function () {}], ['double', 0.8], ['float', 1.0], ['int', 42], ['integer', 13], ['null', null], ['object', new stdClass()], ['resource', tmpfile()], ['string', 'Something'], ]; } public function providerForInvalidType() { return [ ['int', '1'], ['bool', '1'], ]; } } Validation-1.1.29/tests/unit/Rules/UploadedTest.php000066400000000000000000000034161336766562500222460ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_uploaded_file'] = null; function is_uploaded_file($uploaded) { $return = \is_uploaded_file($uploaded); // Running the real function if (null !== $GLOBALS['is_uploaded_file']) { $return = $GLOBALS['is_uploaded_file']; $GLOBALS['is_uploaded_file'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\Uploaded * @covers Respect\Validation\Exceptions\UploadedException */ class UploadedTest extends \PHPUnit_Framework_TestCase { /** * @covers Respect\Validation\Rules\Uploaded::validate */ public function testValidUploadedFileShouldReturnTrue() { $GLOBALS['is_uploaded_file'] = true; $rule = new Uploaded(); $input = '/path/of/a/valid/uploaded/file.txt'; $this->assertTrue($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Uploaded::validate */ public function testInvalidUploadedFileShouldReturnFalse() { $GLOBALS['is_uploaded_file'] = false; $rule = new Uploaded(); $input = '/path/of/an/invalid/uploaded/file.txt'; $this->assertFalse($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Uploaded::validate */ public function testShouldValidateObjects() { $GLOBALS['is_uploaded_file'] = true; $rule = new Uploaded(); $object = new \SplFileInfo('/path/of/an/uploaded/file'); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/UppercaseTest.php000066400000000000000000000036151336766562500224410ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Uppercase * @covers Respect\Validation\Exceptions\UppercaseException */ class UppercaseTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidUppercase */ public function testValidUppercaseShouldReturnTrue($input) { $uppercase = new Uppercase(); $this->assertTrue($uppercase->validate($input)); $this->assertTrue($uppercase->assert($input)); $this->assertTrue($uppercase->check($input)); } /** * @dataProvider providerForInvalidUppercase * @expectedException Respect\Validation\Exceptions\UppercaseException */ public function testInvalidUppercaseShouldThrowException($input) { $lowercase = new Uppercase(); $this->assertFalse($lowercase->validate($input)); $this->assertFalse($lowercase->assert($input)); } public function providerForValidUppercase() { return [ [''], ['UPPERCASE'], ['UPPERCASE-WITH-DASHES'], ['UPPERCASE WITH SPACES'], ['UPPERCASE WITH NUMBERS 123'], ['UPPERCASE WITH SPECIALS CHARACTERS LIKE Ã Ç Ê'], ['WITH SPECIALS CHARACTERS LIKE # $ % & * +'], ['ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ'], ]; } public function providerForInvalidUppercase() { return [ ['lowercase'], ['CamelCase'], ['First Character Uppercase'], ['With Numbers 1 2 3'], ]; } } Validation-1.1.29/tests/unit/Rules/UrlTest.php000066400000000000000000000036661336766562500212620ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Url * @covers Respect\Validation\Exceptions\UrlException */ class UrlTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidUrl */ public function testShouldValidateValidUrls($validUrl) { $validator = new Url(); $this->assertTrue($validator->validate($validUrl)); } /** * @dataProvider providerForInvalidUrl */ public function testShouldNotValidateInvalidUrls($invalidUrl) { $validator = new Url(); $this->assertFalse($validator->validate($invalidUrl)); } public function providerForValidUrl() { return [ ['ftp://ftp.is.co.za.example.org/rfc/rfc1808.txt'], ['gopher://spinaltap.micro.umn.example.edu/00/Weather/California/Los%20Angeles'], ['http://www.ietf.org/rfc/rfc2396.txt'], ['http://www.math.uio.no.example.net/faq/compression-faq/part1.html'], ['https://www.youtube.com/watch?v=6FOUqQt3Kg0'], ['ldap://[2001:db8::7]/c=GB?objectClass?one'], ['mailto:John.Doe@example.com'], ['mailto:mduerst@ifi.unizh.example.gov'], ['news:comp.infosystems.www.servers.unix'], ['news:comp.infosystems.www.servers.unix'], ['telnet://192.0.2.16:80/'], ['telnet://melvyl.ucop.example.edu/'], ]; } public function providerForInvalidUrl() { return [ ['example.com'], ['http:/example.com/'], ['tel:+1-816-555-1212'], ['urn:oasis:names:specification:docbook:dtd:xml:4.1.2'], ]; } } Validation-1.1.29/tests/unit/Rules/VersionTest.php000066400000000000000000000032371336766562500221370ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Version * @covers Respect\Validation\Exceptions\VersionException */ class VersionTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidVersion */ public function testValidVersionShouldReturnTrue($input) { $rule = new Version(); $this->assertTrue($rule->__invoke($input)); $this->assertTrue($rule->assert($input)); $this->assertTrue($rule->check($input)); } /** * @dataProvider providerForInvalidVersion * @expectedException Respect\Validation\Exceptions\VersionException */ public function testInvalidVersionShouldThrowException($input) { $rule = new Version(); $this->assertFalse($rule->__invoke($input)); $this->assertFalse($rule->assert($input)); } public function providerForValidVersion() { return [ ['1.0.0'], ['1.0.0-alpha'], ['1.0.0-alpha.1'], ['1.0.0-0.3.7'], ['1.0.0-x.7.z.92'], ['1.3.7+build.2.b8f12d7'], ['1.3.7-rc.1'], ]; } public function providerForInvalidVersion() { return [ [''], ['1.3.7--'], ['1.3.7++'], ['foo'], ['1.2.3.4'], ['1.2.3.4-beta'], ['beta'], ]; } } Validation-1.1.29/tests/unit/Rules/VideoUrlTest.php000066400000000000000000000061721336766562500222440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\VideoUrl * @covers Respect\Validation\Exceptions\VideoUrlException */ class VideoUrlTest extends \PHPUnit_Framework_TestCase { /** * @expectedException Respect\Validation\Exceptions\ComponentException * @expectedExceptionMessage "teste" is not a recognized video service. */ public function testShouldThrowsAnExceptionWhenProviderIsNotValid() { new VideoUrl('teste'); } public function validVideoUrlProvider() { return [ ['vimeo', 'https://player.vimeo.com/video/71787467'], ['vimeo', 'https://vimeo.com/71787467'], ['youtube', 'https://www.youtube.com/embed/netHLn9TScY'], ['youtube', 'https://www.youtube.com/watch?v=netHLn9TScY'], ['youtube', 'https://youtu.be/netHLn9TScY'], [null, 'https://player.vimeo.com/video/71787467'], [null, 'https://vimeo.com/71787467'], [null, 'https://www.youtube.com/embed/netHLn9TScY'], [null, 'https://www.youtube.com/watch?v=netHLn9TScY'], [null, 'https://youtu.be/netHLn9TScY'], ]; } public function invalidVideoUrlProvider() { return [ ['vimeo', 'https://www.youtube.com/watch?v=netHLn9TScY'], ['youtube', 'https://vimeo.com/71787467'], [null, 'example.com'], [null, 'ftp://youtu.be/netHLn9TScY'], [null, 'https:/example.com/'], [null, 'https:/youtube.com/'], [null, 'https://vimeo'], [null, 'https://vimeo.com71787467'], [null, 'https://www.google.com'], [null, 'tel:+1-816-555-1212'], [null, 'text'], ]; } /** * @dataProvider validVideoUrlProvider */ public function testShouldValidateVideoUrl($service, $input) { $rule = new VideoUrl($service); $this->assertTrue($rule->validate($input)); } /** * @dataProvider invalidVideoUrlProvider */ public function testShouldInvalidateNonVideoUrl($service, $input) { $rule = new VideoUrl($service); $this->assertFalse($rule->validate($input)); } /** * @expectedException Respect\Validation\Exceptions\VideoUrlException * @expectedExceptionMessage "exemplo.com" must be a valid video URL */ public function testUseAProperExceptionMessageWhenVideoUrlIsNotValid() { $rule = new VideoUrl(); $rule->check('exemplo.com'); } /** * @expectedException Respect\Validation\Exceptions\VideoUrlException * @expectedExceptionMessage "exemplo.com" must be a valid "YouTube" video URL */ public function testUseAProperExceptionMessageWhenVideoUrlIsNotValidForTheDefinedProvider() { $rule = new VideoUrl('YouTube'); $rule->check('exemplo.com'); } } Validation-1.1.29/tests/unit/Rules/VowelTest.php000066400000000000000000000050631336766562500216050ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Vowel * @covers Respect\Validation\Exceptions\VowelException */ class VowelTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider providerForValidVowels */ public function testValidDataWithVowelsShouldReturnTrue($validVowels, $additional = '') { $validator = new Vowel($additional); $this->assertTrue($validator->validate($validVowels)); } /** * @dataProvider providerForInvalidVowels * @expectedException Respect\Validation\Exceptions\VowelException */ public function testInvalidVowelsShouldFailAndThrowVowelException($invalidVowels, $additional = '') { $validator = new Vowel($additional); $this->assertFalse($validator->validate($invalidVowels)); $this->assertFalse($validator->assert($invalidVowels)); } /** * @dataProvider providerForInvalidParams * @expectedException Respect\Validation\Exceptions\ComponentException */ public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional) { $validator = new Vowel($additional); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Vowel($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){}', '!@#$%^&*(){} aeo iu'], ['[]?+=/\\-_|"\',<>.', "[]?+=/\\-_|\"',<>. \t \n aeo iu"], ]; } public function providerForInvalidParams() { return [ [new \stdClass()], [[]], [0x2], ]; } public function providerForValidVowels() { return [ ['a'], ['e'], ['i'], ['o'], ['u'], ['aeiou'], ['aei ou'], ["\na\t"], ['uoiea'], ]; } public function providerForInvalidVowels() { return [ [''], [null], ['16'], ['F'], ['g'], ['Foo'], [-50], ['basic'], ]; } } Validation-1.1.29/tests/unit/Rules/WhenTest.php000066400000000000000000000117601336766562500214130ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\When */ class WhenTest extends RuleTestCase { public function testShouldConstructAnObjectWithoutElseRule() { $rule = new When($this->getRuleMock(true), $this->getRuleMock(true)); $this->assertInstanceOf('\Respect\Validation\Rules\AlwaysInvalid', $rule->else); } public function testShouldConstructAnObjectWithElseRule() { $rule = new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)); $this->assertNotNull($rule->else); } /** * @expectedException Respect\Validation\Exceptions\ValidationException * @expectedExceptionMessage Exception for ThenNotValid:assert() method */ public function testShouldThrowExceptionForTheThenRuleWhenTheIfRuleIsValidAndTheThenRuleIsNotOnAssertMethod() { $if = $this->getRuleMock(true); $then = $this->getRuleMock(false, 'ThenNotValid'); $else = $this->getRuleMock(true); $rule = new When($if, $then, $else); $rule->assert(''); } /** * @expectedException Respect\Validation\Exceptions\ValidationException * @expectedExceptionMessage Exception for ThenNotValid:check() method */ public function testShouldThrowExceptionForTheThenRuleWhenTheIfRuleIsValidAndTheThenRuleIsNotOnCheckMethod() { $if = $this->getRuleMock(true); $then = $this->getRuleMock(false, 'ThenNotValid'); $else = $this->getRuleMock(true); $rule = new When($if, $then, $else); $rule->check(''); } /** * @expectedException Respect\Validation\Exceptions\ValidationException * @expectedExceptionMessage Exception for ElseNotValid:assert() method */ public function testShouldThrowExceptionForTheElseRuleWhenTheIfRuleIsNotValidAndTheElseRuleIsNotOnAssertMethod() { $if = $this->getRuleMock(false); $then = $this->getRuleMock(false); $else = $this->getRuleMock(false, 'ElseNotValid'); $rule = new When($if, $then, $else); $rule->assert(''); } /** * @expectedException Respect\Validation\Exceptions\ValidationException * @expectedExceptionMessage Exception for ElseNotValid:check() method */ public function testShouldThrowExceptionForTheElseRuleWhenTheIfRuleIsNotValidAndTheElseRuleIsNotOnCheckMethod() { $if = $this->getRuleMock(false); $then = $this->getRuleMock(false); $else = $this->getRuleMock(false, 'ElseNotValid'); $rule = new When($if, $then, $else); $rule->check(''); } /** * It is to provide constructor arguments and. * * @return array */ public function providerForValidInput() { return [ 'int (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), 42, ], 'bool (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), true, ], 'empty (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), '', ], 'object (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), new \stdClass(), ], 'empty array (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), [], ], 'not empty array (all true)' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(true)), ['test'], ], 'when = true, then = false, else = true' => [ new When($this->getRuleMock(true), $this->getRuleMock(true), $this->getRuleMock(false)), false, ], ]; } /** * @return array */ public function providerForInvalidInput() { return [ 'when = true, then = false, else = false' => [ new When($this->getRuleMock(true), $this->getRuleMock(false), $this->getRuleMock(false)), false, ], 'when = true, then = false, else = true' => [ new When($this->getRuleMock(true), $this->getRuleMock(false), $this->getRuleMock(true)), false, ], 'when = false, then = false, else = false' => [ new When($this->getRuleMock(false), $this->getRuleMock(false), $this->getRuleMock(false)), false, ], ]; } } Validation-1.1.29/tests/unit/Rules/WritableTest.php000066400000000000000000000035131336766562500222600ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; $GLOBALS['is_writable'] = null; function is_writable($writable) { $return = \is_writable($writable); // Running the real function if (null !== $GLOBALS['is_writable']) { $return = $GLOBALS['is_writable']; $GLOBALS['is_writable'] = null; } return $return; } /** * @group rule * @covers Respect\Validation\Rules\Writable * @covers Respect\Validation\Exceptions\WritableException */ class WritableTest extends \PHPUnit_Framework_TestCase { /** * @covers Respect\Validation\Rules\Writable::validate */ public function testValidWritableFileShouldReturnTrue() { $GLOBALS['is_writable'] = true; $rule = new Writable(); $input = '/path/of/a/valid/writable/file.txt'; $this->assertTrue($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Writable::validate */ public function testInvalidWritableFileShouldReturnFalse() { $GLOBALS['is_writable'] = false; $rule = new Writable(); $input = '/path/of/an/invalid/writable/file.txt'; $this->assertFalse($rule->validate($input)); } /** * @covers Respect\Validation\Rules\Writable::validate */ public function testShouldValidateObjects() { $rule = new Writable(); $object = $this->getMock('SplFileInfo', ['isWritable'], ['somefile.txt']); $object->expects($this->once()) ->method('isWritable') ->will($this->returnValue(true)); $this->assertTrue($rule->validate($object)); } } Validation-1.1.29/tests/unit/Rules/XdigitTest.php000066400000000000000000000042011336766562500217320ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Xdigit * @covers Respect\Validation\Exceptions\XdigitException */ class XdigitTest extends \PHPUnit_Framework_TestCase { protected $xdigitsValidator; protected function setUp() { $this->xdigitsValidator = new Xdigit(); } /** * @dataProvider providerForXdigit */ public function testValidateValidHexasdecimalDigits($input) { $this->assertTrue($this->xdigitsValidator->assert($input)); $this->assertTrue($this->xdigitsValidator->check($input)); $this->assertTrue($this->xdigitsValidator->validate($input)); } /** * @dataProvider providerForNotXdigit * @expectedException Respect\Validation\Exceptions\XdigitException */ public function testInvalidHexadecimalDigitsShouldThrowXdigitException($input) { $this->assertFalse($this->xdigitsValidator->validate($input)); $this->assertFalse($this->xdigitsValidator->assert($input)); } /** * @dataProvider providerAdditionalChars */ public function testAdditionalCharsShouldBeRespected($additional, $query) { $validator = new Xdigit($additional); $this->assertTrue($validator->validate($query)); } public function providerAdditionalChars() { return [ ['!@#$%^&*(){} ', '!@#$%^&*(){} abc 123'], ["[]?+=/\\-_|\"',<>. \t\n", "[]?+=/\\-_|\"',<>. \t \n abc 123"], ]; } public function providerForXdigit() { return [ ['FFF'], ['15'], ['DE12FA'], ['1234567890abcdef'], [0x123], ]; } public function providerForNotXdigit() { return [ [''], [null], ['j'], [' '], ['Foo'], ['1.5'], ]; } } Validation-1.1.29/tests/unit/Rules/YesTest.php000066400000000000000000000036461336766562500212560ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; /** * @group rule * @covers Respect\Validation\Rules\Yes * @covers Respect\Validation\Exceptions\YesException */ class YesTest extends \PHPUnit_Framework_TestCase { public function testShouldUseDefaultPattern() { $rule = new Yes(); $actualPattern = $rule->regex; $expectedPattern = '/^y(eah?|ep|es)?$/i'; $this->assertEquals($expectedPattern, $actualPattern); } public function testShouldUseLocalPatternForYesExpressionWhenDefined() { if (!defined('YESEXPR')) { $this->markTestSkipped('Constant YESEXPR is not defined'); return; } $rule = new Yes(true); $actualPattern = $rule->regex; $expectedPattern = '/'.nl_langinfo(YESEXPR).'/i'; $this->assertEquals($expectedPattern, $actualPattern); } /** * @dataProvider validYesProvider */ public function testShouldValidatePatternAccordingToTheDefinedLocale($input) { $rule = new Yes(); $this->assertTrue($rule->validate($input)); } public function validYesProvider() { return [ ['Y'], ['Yea'], ['Yeah'], ['Yep'], ['Yes'], ]; } /** * @dataProvider invalidYesProvider */ public function testShouldNotValidatePatternAccordingToTheDefinedLocale($input) { $rule = new Yes(); $this->assertFalse($rule->validate($input)); } public function invalidYesProvider() { return [ ['Si'], ['Sim'], ['Yoo'], ['Young'], ['Yy'], ]; } } Validation-1.1.29/tests/unit/Rules/ZendTest.php000066400000000000000000000077441336766562500214210ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation\Rules; use DateTime; /** * @group rule * @covers Respect\Validation\Rules\Zend * @covers Respect\Validation\Exceptions\ZendException */ class ZendTest extends \PHPUnit_Framework_TestCase { public function testConstructorWithValidatorName() { $v = new Zend('Date'); $this->assertAttributeInstanceOf( $instanceOf = 'Zend\Validator\ValidatorInterface', $attribute = 'zendValidator', $instance = $v ); } /** * @depends testConstructorWithValidatorName */ public function testConstructorWithValidatorClassName() { $v = new Zend('Zend\Validator\Date'); $this->assertAttributeInstanceOf( $instanceOf = 'Zend\Validator\ValidatorInterface', $attribute = 'zendValidator', $instance = $v ); } public function testConstructorWithZendValidatorInstance() { $zendInstance = new \Zend\Validator\Date(); $v = new Zend($zendInstance); $this->assertAttributeSame( $expected = $zendInstance, $attribute = 'zendValidator', $instance = $v ); } /** * @depends testConstructorWithZendValidatorInstance */ public function testUserlandValidatorExtendingZendInterface() { $v = new Zend(new MyValidator()); $this->assertAttributeInstanceOf( $instanceOf = 'Zend\Validator\ValidatorInterface', $attribute = 'zendValidator', $instance = $v ); } public function testConstructorWithZendValidatorPartialNamespace() { $v = new Zend('Sitemap\Lastmod'); $this->assertAttributeInstanceOf( $instanceOf = 'Zend\Validator\ValidatorInterface', $attribute = 'zendValidator', $instance = $v ); } /** * @depends testConstructorWithValidatorName * @depends testConstructorWithZendValidatorPartialNamespace */ public function testConstructorWithValidatorName_and_params() { $zendValidatorName = 'StringLength'; $zendValidatorParams = ['min' => 10, 'max' => 25]; $v = new Zend($zendValidatorName, $zendValidatorParams); $this->assertTrue( $v->validate('12345678901'), 'The value should be valid for Zend\'s validator' ); } /** * @depends testConstructorWithValidatorName */ public function testZendDateValidatorWithRespectMethods() { $v = new Zend('Date'); $date = new DateTime(); $this->assertTrue($v->validate($date)); $this->assertTrue($v->assert($date)); } /** * @depends testConstructorWithValidatorName * @depends testZendDateValidatorWithRespectMethods * @expectedException Respect\Validation\Exceptions\ZendException */ public function testRespectExceptionForFailedValidation() { $v = new Zend('Date'); $notValid = 'a'; $this->assertFalse( $v->validate($notValid), 'The validator returned true for an invalid value, this won\'t cause an exception later on.' ); $this->assertFalse( $v->assert($notValid) ); } /** * @depends testConstructorWithValidatorName * @depends testConstructorWithValidatorName_and_params * @depends testZendDateValidatorWithRespectMethods * @expectedException Respect\Validation\Exceptions\ZendException */ public function testParamsNot() { $v = new Zend('StringLength', ['min' => 10, 'max' => 25]); $this->assertFalse($v->assert('aw')); } } // Stubs if (class_exists('\Zend\Validator\Date')) { class MyValidator extends \Zend\Validator\Date { } } Validation-1.1.29/tests/unit/ValidatorTest.php000066400000000000000000000017551336766562500213500ustar00rootroot00000000000000 * * For the full copyright and license information, please view the "LICENSE.md" * file that was distributed with this source code. */ namespace Respect\Validation; class ValidatorTest extends \PHPUnit_Framework_TestCase { public function testStaticCreateShouldReturnNewValidator() { $this->assertInstanceOf('Respect\Validation\Validator', Validator::create()); } public function testInvalidRuleClassShouldThrowComponentException() { $this->setExpectedException('Respect\Validation\Exceptions\ComponentException'); Validator::iDoNotExistSoIShouldThrowException(); } /** * Regression test #174. */ public function testShouldReturnValidatorInstanceWhenTheNotRuleIsCalledWithArguments() { $validator = new Validator(); $this->assertSame($validator, $validator->not($validator->notEmpty())); } }