Version Notes
ING PSP-Magento Extension
====================
# Changelog #
## Changes in version 1.0.0
+ Initial version based upon Ginger Payments version
## Changes in version 1.0.1
+ Updated the README.md
## Changes in version 1.0.2
+ Handle banktransfer correctly
## Changes in version 1.0.3
+ Added version to the webhook
+ Added cash on delivery
## Changes in version 1.1.0
+ Added Bancontact
+ Added product selection
## Changes in version 1.1.1
+ Renamed bcmc to bancontact
## Changes in version 1.1.3
+ Small fixes
+ Version synchronization
## Changes in version 1.1.4
+ Fixed missing library folder
Download this release
Release Info
Developer | ING |
Extension | ing_psp |
Version | 1.1.4 |
Comparing to | |
See all releases |
Code changes from version 1.1.3 to 1.1.4
- lib/Ing/Services/ing-php/LICENSE +22 -0
- lib/Ing/Services/ing-php/README.md +26 -0
- lib/Ing/Services/ing-php/assets/cacert.pem +4036 -0
- lib/Ing/Services/ing-php/composer.json +46 -0
- lib/Ing/Services/ing-php/composer.lock +2037 -0
- lib/Ing/Services/ing-php/phpunit.xml.dist +29 -0
- lib/Ing/Services/ing-php/src/Client.php +544 -0
- lib/Ing/Services/ing-php/src/Client/ClientException.php +7 -0
- lib/Ing/Services/ing-php/src/Client/OrderNotFoundException.php +7 -0
- lib/Ing/Services/ing-php/src/Common/ArrayFunctions.php +29 -0
- lib/Ing/Services/ing-php/src/Common/ChoiceBasedValueObject.php +25 -0
- lib/Ing/Services/ing-php/src/Common/ISO3166.php +25 -0
- lib/Ing/Services/ing-php/src/Common/StringBasedValueObject.php +46 -0
- lib/Ing/Services/ing-php/src/Currency.php +23 -0
- lib/Ing/Services/ing-php/src/Fallback.php +32 -0
- lib/Ing/Services/ing-php/src/Ginger.php +108 -0
- lib/Ing/Services/ing-php/src/Iban.php +25 -0
- lib/Ing/Services/ing-php/src/Ideal/Issuer.php +91 -0
- lib/Ing/Services/ing-php/src/Ideal/Issuer/ListType.php +21 -0
- lib/Ing/Services/ing-php/src/Ideal/Issuer/Name.php +21 -0
- lib/Ing/Services/ing-php/src/Ideal/Issuers.php +95 -0
- lib/Ing/Services/ing-php/src/Order.php +828 -0
- lib/Ing/Services/ing-php/src/Order/Amount.php +40 -0
- lib/Ing/Services/ing-php/src/Order/Customer.php +243 -0
- lib/Ing/Services/ing-php/src/Order/Customer/Address.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/AddressType.php +53 -0
- lib/Ing/Services/ing-php/src/Order/Customer/Country.php +25 -0
- lib/Ing/Services/ing-php/src/Order/Customer/EmailAddress.php +23 -0
- lib/Ing/Services/ing-php/src/Order/Customer/FirstName.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/Housenumber.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/LastName.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/Locale.php +23 -0
- lib/Ing/Services/ing-php/src/Order/Customer/MerchantCustomerId.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/PhoneNumber.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Customer/PhoneNumbers.php +95 -0
- lib/Ing/Services/ing-php/src/Order/Customer/PostalCode.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Description.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Extra.php +44 -0
- lib/Ing/Services/ing-php/src/Order/MerchantOrderId.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Status.php +93 -0
- lib/Ing/Services/ing-php/src/Order/Transaction.php +425 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Amount.php +40 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Balance.php +53 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Description.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethod.php +83 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails.php +17 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/BancontactPaymentMethodDetails.php +90 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/BancontactPaymentMethodDetails/SetupToken.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/BancontactPaymentMethodDetails/VaultToken.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/CashOnDeliveryPaymentMethodDetails.php +109 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/ConsumerName.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/CreditCardPaymentMethodDetails.php +25 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails.php +213 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/ConsumerAddress.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/ConsumerCity.php +18 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/ConsumerCountry.php +25 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/Status.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/TransactionId.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/PaymentMethodDetailsFactory.php +37 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/SepaPaymentMethodDetails.php +173 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/SofortPaymentMethodDetails.php +109 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/PaymentMethodDetails/SofortPaymentMethodDetails/TransactionId.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Reason.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Reference.php +21 -0
- lib/Ing/Services/ing-php/src/Order/Transaction/Status.php +93 -0
- lib/Ing/Services/ing-php/src/Order/Transactions.php +105 -0
- lib/Ing/Services/ing-php/src/SwiftBic.php +25 -0
- lib/Ing/Services/ing-php/src/Url.php +21 -0
- lib/Ing/Services/ing-php/tests/ClientTest.php +568 -0
- lib/Ing/Services/ing-php/tests/Common/ArrayFunctionsTest.php +43 -0
- lib/Ing/Services/ing-php/tests/Common/ChoiceBasedValueObjectTest.php +31 -0
- lib/Ing/Services/ing-php/tests/Common/ISO3166Test.php +17 -0
- lib/Ing/Services/ing-php/tests/Common/StringBasedValueObjectTest.php +45 -0
- lib/Ing/Services/ing-php/tests/CurrencyTest.php +28 -0
- lib/Ing/Services/ing-php/tests/FallbackTest.php +14 -0
- lib/Ing/Services/ing-php/tests/GingerTest.php +58 -0
- lib/Ing/Services/ing-php/tests/IbanTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Ideal/Issuer/ListTypeTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Ideal/Issuer/NameTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Ideal/IssuerTest.php +75 -0
- lib/Ing/Services/ing-php/tests/Ideal/IssuersTest.php +86 -0
- lib/Ing/Services/ing-php/tests/Mock/FakeChoiceBasedValueObject.php +20 -0
- lib/Ing/Services/ing-php/tests/Mock/FakeStringBasedValueObject.php +10 -0
- lib/Ing/Services/ing-php/tests/Order/AmountTest.php +36 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/AddressTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/AddressTypeTest.php +47 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/CountryTest.php +36 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/EmailAddressTest.php +36 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/FirstNameTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/HouseNumberTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/LastNameTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/LocaleTest.php +47 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/MerchantCustomerIdTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/PhoneNumberTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/PhoneNumbersTest.php +75 -0
- lib/Ing/Services/ing-php/tests/Order/Customer/PostalCodeTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/CustomerTest.php +90 -0
- lib/Ing/Services/ing-php/tests/Order/DescriptionTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/ExtraTest.php +34 -0
- lib/Ing/Services/ing-php/tests/Order/MerchantOrderIdTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/StatusTest.php +120 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/AmountTest.php +36 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/BalanceTest.php +44 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/DescriptionTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/BancontactPaymentMethodDetails/SetupTokenTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/BancontactPaymentMethodDetails/VaultTokenTest.php +27 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/ConsumerNameTest.php +19 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/CreditCardPaymentMethodDetailsTest.php +30 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/ConsumerCityTest.php +19 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/StatusTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetails/TransactionIdTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/IdealPaymentMethodDetailsTest.php +88 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/PaymentMethodDetailsFactoryTest.php +81 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/SepaPaymentMethodDetailsTest.php +38 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/SofortPaymentMethodDetails/TransactionIdTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodDetails/SofortPaymentMethodDetailsTest.php +64 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/PaymentMethodTest.php +44 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/ReasonTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/ReferenceTest.php +28 -0
- lib/Ing/Services/ing-php/tests/Order/Transaction/StatusTest.php +120 -0
- lib/Ing/Services/ing-php/tests/Order/TransactionTest.php +115 -0
- lib/Ing/Services/ing-php/tests/Order/TransactionsTest.php +95 -0
- lib/Ing/Services/ing-php/tests/OrderTest.php +453 -0
- lib/Ing/Services/ing-php/tests/SwiftBicTest.php +28 -0
- lib/Ing/Services/ing-php/tests/UrlTest.php +28 -0
- lib/Ing/Services/ing-php/vendor/alcohol/iso3166/ISO3166.php +1878 -0
- lib/Ing/Services/ing-php/vendor/alcohol/iso3166/ISO3166Test.php +201 -0
- lib/Ing/Services/ing-php/vendor/alcohol/iso3166/LICENSE +19 -0
- lib/Ing/Services/ing-php/vendor/alcohol/iso3166/composer.json +37 -0
- lib/Ing/Services/ing-php/vendor/alcohol/iso3166/phpunit.xml.dist +22 -0
- lib/Ing/Services/ing-php/vendor/autoload.php +7 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/.php_cs +17 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/composer.json +43 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/Assertion.php +2184 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/AssertionChain.php +196 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php +21 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php +64 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/LazyAssertion.php +138 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php +50 -0
- lib/Ing/Services/ing-php/vendor/beberlei/assert/lib/Assert/functions.php +85 -0
- lib/Ing/Services/ing-php/vendor/bin/phpcbf +23 -0
- lib/Ing/Services/ing-php/vendor/bin/phpcs +25 -0
- lib/Ing/Services/ing-php/vendor/bin/phpunit +47 -0
- lib/Ing/Services/ing-php/vendor/bin/uuid +57 -0
- lib/Ing/Services/ing-php/vendor/composer/ClassLoader.php +415 -0
- lib/Ing/Services/ing-php/vendor/composer/LICENSE +21 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_classmap.php +763 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_files.php +15 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_namespaces.php +14 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_psr4.php +24 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_real.php +70 -0
- lib/Ing/Services/ing-php/vendor/composer/autoload_static.php +930 -0
- lib/Ing/Services/ing-php/vendor/composer/installed.json +1375 -0
lib/Ing/Services/ing-php/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
The MIT License (MIT)
|
2 |
+
|
3 |
+
Copyright (c) 2015 Ginger Payments
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
22 |
+
|
lib/Ing/Services/ing-php/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Requirements
|
2 |
+
|
3 |
+
* PHP 5.4 or later.
|
4 |
+
|
5 |
+
## Installation
|
6 |
+
|
7 |
+
```php
|
8 |
+
include_once 'ing-php/vendor/autoload.php';
|
9 |
+
```
|
10 |
+
|
11 |
+
## Getting started
|
12 |
+
|
13 |
+
First create a new API client with your API key and ING product:
|
14 |
+
|
15 |
+
```php
|
16 |
+
use \GingerPayments\Payment\Ginger;
|
17 |
+
|
18 |
+
$client = Ginger::createClient('ing-api-key', 'ing_product');
|
19 |
+
```
|
20 |
+
|
21 |
+
## Main differences with ginger-php
|
22 |
+
...
|
23 |
+
|
24 |
+
|
25 |
+
## Full documentation
|
26 |
+
https://github.com/gingerpayments/ginger-php
|
lib/Ing/Services/ing-php/assets/cacert.pem
ADDED
@@ -0,0 +1,4036 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|