Version Notes
Feature Release
Download this release
Release Info
Developer | Sebastian Ertner |
Extension | hermes_pps |
Version | 15.04.29 |
Comparing to | |
See all releases |
Version 15.04.29
- app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Grid/Renderer/Icon.php +78 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Exception.php +35 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Hermes.php +190 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit.php +78 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit/Form.php +155 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Notice.php +27 -0
- app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Products.php +35 -0
- app/code/community/Netresearch/Hermes/Helper/Data.php +53 -0
- app/code/community/Netresearch/Hermes/Helper/Order.php +272 -0
- app/code/community/Netresearch/Hermes/Helper/Validate/Order.php +173 -0
- app/code/community/Netresearch/Hermes/Model/Client.php +650 -0
- app/code/community/Netresearch/Hermes/Model/Client/Exception.php +70 -0
- app/code/community/Netresearch/Hermes/Model/Client/Response.php +33 -0
- app/code/community/Netresearch/Hermes/Model/Client/Soap.php +47 -0
- app/code/community/Netresearch/Hermes/Model/Config.php +495 -0
- app/code/community/Netresearch/Hermes/Model/Config/Exception.php +1 -0
- app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel.php +39 -0
- app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel/Collection.php +38 -0
- app/code/community/Netresearch/Hermes/Model/Observer.php +452 -0
- app/code/community/Netresearch/Hermes/Model/Parcel.php +527 -0
- app/code/community/Netresearch/Hermes/Model/Shipping/Carrier/Hermes.php +116 -0
- app/code/community/Netresearch/Hermes/Model/System/Config/Source/Payment/Methods.php +54 -0
- app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelFileFormatOptions.php +65 -0
- app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelPlacements.php +49 -0
- app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/Methods.php +71 -0
- app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest.php +88 -0
- app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest/fixtures/.gitkeep +0 -0
- app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest.php +386 -0
- app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/expectations/productClasses.yaml +5 -0
- app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/fixtures/.gitkeep +0 -0
- app/code/community/Netresearch/Hermes/Test/Controller/AbstractControllerTest.php +78 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ConfigControllerTest.php +80 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest.php +384 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/.gitkeep +1 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/parcels.yaml +58 -0
- app/code/community/Netresearch/Hermes/Test/Controller/PermissionsDeniedControllerTest.php +34 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest.php +221 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/.gitkeep +0 -0
- app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/dummy +0 -0
- app/code/community/Netresearch/Hermes/Test/Helper/DataTest.php +9 -0
- app/code/community/Netresearch/Hermes/Test/Helper/OrderTest.php +326 -0
- app/code/community/Netresearch/Hermes/Test/Helper/OrderTest/fixtures/.gitkeep +0 -0
- app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest.php +119 -0
- app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest/fixtures/.gitkeep +0 -0
- app/code/community/Netresearch/Hermes/Test/Model/ClientTest.php +464 -0
- app/code/community/Netresearch/Hermes/Test/Model/ClientTest/expectations/productInformation.yaml +1 -0
- app/code/community/Netresearch/Hermes/Test/Model/ConfigTest.php +480 -0
- app/code/community/Netresearch/Hermes/Test/Model/ConfigTest/expectations/config.yaml +5 -0
- app/code/community/Netresearch/Hermes/Test/Model/ObserverTest.php +550 -0
- app/code/community/Netresearch/Hermes/Test/Model/ObserverTest/fixtures/.gitkeep +1 -0
- app/code/community/Netresearch/Hermes/Test/Model/OrderTest.php +526 -0
- app/code/community/Netresearch/Hermes/Test/Model/OrderTest/expectations/orderList.yaml +2 -0
- app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/orderList.yaml +13 -0
- app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/parcels.yaml +43 -0
- app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/shipments.yaml +37 -0
- app/code/community/Netresearch/Hermes/Test/Model/ParcelTest.php +593 -0
- app/code/community/Netresearch/Hermes/Test/Model/ParcelTest/fixtures/shipments.yaml +37 -0
- app/code/community/Netresearch/Hermes/Test/Model/Shipping/Carrier/HermesTest.php +135 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Payment/Methods.php +62 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest.php +65 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest/expectations/testToOptionArray.yaml +6 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/Methods.php +57 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest.php +77 -0
- app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest/expectations/testToOptionArray.yaml +3 -0
- app/code/community/Netresearch/Hermes/Test/var/fixtures/orderList1.yaml +306 -0
- app/code/community/Netresearch/Hermes/Test/var/fixtures/parcels.yaml +68 -0
- app/code/community/Netresearch/Hermes/Test/var/fixtures/shipments.yaml +34 -0
- app/code/community/Netresearch/Hermes/controllers/ConfigController.php +38 -0
- app/code/community/Netresearch/Hermes/controllers/ParcelController.php +241 -0
- app/code/community/Netresearch/Hermes/controllers/ShipmentController.php +94 -0
- app/code/community/Netresearch/Hermes/etc/adminhtml.xml +57 -0
- app/code/community/Netresearch/Hermes/etc/config.xml +253 -0
- app/code/community/Netresearch/Hermes/etc/system.xml +234 -0
- app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php +72 -0
- app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl +1379 -0
- app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl +1379 -0
- app/design/adminhtml/default/default/layout/hermes.xml +47 -0
- app/design/adminhtml/default/default/template/hermes/sales/order/shipment/create/hermes.phtml +81 -0
- app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/comments.phtml +77 -0
- app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/hermes.phtml +155 -0
- app/design/adminhtml/default/default/template/hermes/system/config/notice.phtml +45 -0
- app/design/adminhtml/default/default/template/hermes/system/config/products.phtml +108 -0
- app/design/frontend/default/default/template/email/order/shipment/track.phtml +50 -0
- app/etc/modules/Netresearch_Hermes.xml +9 -0
- app/locale/de_DE/Netresearch_Hermes.csv +145 -0
- doc/Netresearch_Hermes/Benutzerdokumentation.pdf +927 -0
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Grid/Renderer/Icon.php
ADDED
@@ -0,0 +1,78 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
29 |
+
*/
|
30 |
+
class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
|
31 |
+
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
32 |
+
{
|
33 |
+
public function getHermesStatusOutput($row)
|
34 |
+
{
|
35 |
+
$status = array(
|
36 |
+
'queued' => 0,
|
37 |
+
'failed' => 0,
|
38 |
+
'canceled' => 0,
|
39 |
+
'sent' => 0
|
40 |
+
);
|
41 |
+
/** @var Mage_Sales_Model_Order_Shipment $shipment */
|
42 |
+
foreach ($row->getShipmentsCollection() as $shipment) {
|
43 |
+
/* @var $parcel Netresearch_Hermes_Model_Shipment */
|
44 |
+
$parcel = Mage::getModel('hermes/parcel')->load($shipment->getId(), 'shipment_id');
|
45 |
+
if ($parcel && $parcel->getId()) {
|
46 |
+
if ($parcel->isFailed() || $parcel->isCancelFailed()) {
|
47 |
+
$status['failed']++;
|
48 |
+
} elseif ($parcel->isProcessed() || $parcel->isClosed()) {
|
49 |
+
$status['sent']++;
|
50 |
+
} elseif ($parcel->isCanceled() || $parcel->isQueuedToCancel()) {
|
51 |
+
$status['canceled']++;
|
52 |
+
} else {
|
53 |
+
$status['queued']++;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
if (0 < $status['failed']) {
|
58 |
+
$longMessage = Mage::helper('hermes')->__('%d parcels could not be transmitted to Hermes', $status['failed']);
|
59 |
+
$image = 'logo_small_failed.png';
|
60 |
+
} elseif (0 < $status['sent']) {
|
61 |
+
$longMessage = Mage::helper('hermes')->__('%d parcels were transmitted to Hermes', $status['sent']);
|
62 |
+
$image = 'logo_small.png';
|
63 |
+
} elseif (0 < $status['queued']) {
|
64 |
+
$longMessage = Mage::helper('hermes')->__('%d parcels are queued for transmission to Hermes', $status['queued']);
|
65 |
+
$image = 'logo_small_grey.png';
|
66 |
+
} else {
|
67 |
+
return '';
|
68 |
+
}
|
69 |
+
return ' <div class="hermes_status"><img src="' . $this->getSkinUrl('images/hermes/'.$image) . '" alt="Hermes" title="' . $longMessage . '" />'
|
70 |
+
. '</div>';
|
71 |
+
}
|
72 |
+
|
73 |
+
public function render(Varien_Object $row)
|
74 |
+
{
|
75 |
+
return parent::render($row) . $this->getHermesStatusOutput($row);
|
76 |
+
}
|
77 |
+
}
|
78 |
+
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Exception.php
ADDED
@@ -0,0 +1,35 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes Block Order Shipment Exception
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception
|
32 |
+
extends Mage_Core_Exception
|
33 |
+
{
|
34 |
+
//put your code here
|
35 |
+
}
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Hermes.php
ADDED
@@ -0,0 +1,190 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Sales Order Shipment Create Hermes Block
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes extends Mage_Adminhtml_Block_Template
|
32 |
+
{
|
33 |
+
|
34 |
+
/**
|
35 |
+
*
|
36 |
+
* @var Mage_Sales_Model_Shipment
|
37 |
+
*/
|
38 |
+
protected $shipment = null;
|
39 |
+
|
40 |
+
/**
|
41 |
+
*
|
42 |
+
* @var Netresearch_Hermes_Helper_Validate_Order
|
43 |
+
*/
|
44 |
+
protected $hermes_validate_order = null;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Get Magento shipment
|
48 |
+
*
|
49 |
+
* @return Mage_Sales_Model_Order_Shipment
|
50 |
+
*/
|
51 |
+
public function getMageShipment()
|
52 |
+
{
|
53 |
+
return Mage::registry('current_shipment');
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Check if shipping method is allowed
|
58 |
+
*
|
59 |
+
* @return boolean
|
60 |
+
*/
|
61 |
+
public function isAllowedShippingMethod()
|
62 |
+
{
|
63 |
+
return Mage::getModel('hermes/config')
|
64 |
+
->isAllowedShippingMethod($this->getMageShipment()->getOrder()->getShippingMethod());
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get validate order helper
|
69 |
+
*
|
70 |
+
* @return Netresearch_Hermes_Helper_Validate_Order
|
71 |
+
*/
|
72 |
+
public function getValidateOrderHelper()
|
73 |
+
{
|
74 |
+
if (null == $this->hermes_validate_order) {
|
75 |
+
$this->hermes_validate_order = Mage::helper("hermes/validate_order");
|
76 |
+
}
|
77 |
+
return $this->hermes_validate_order;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Check if it is a valid hermes shipment
|
82 |
+
*
|
83 |
+
* @return boolean
|
84 |
+
*/
|
85 |
+
public function isValidHermesShipment()
|
86 |
+
{
|
87 |
+
return $this->getValidateOrderHelper()
|
88 |
+
->setOrder($this->getMageShipment()->getOrder())
|
89 |
+
->isValidHermesShipment();
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Get validation errors
|
94 |
+
*
|
95 |
+
* @return array
|
96 |
+
*/
|
97 |
+
public function getValidationErrors()
|
98 |
+
{
|
99 |
+
return $this->getValidateOrderHelper()->getValidationErrors();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* checks if the merchand is a tiered price merchand
|
104 |
+
*
|
105 |
+
* @return boolean
|
106 |
+
*/
|
107 |
+
public function isTieredPriceMerchand()
|
108 |
+
{
|
109 |
+
return Mage::getModel('hermes/config')
|
110 |
+
->isTieredPriceMerchant();
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* retrieves all possible Hermes product classes
|
115 |
+
* for the destination country
|
116 |
+
*
|
117 |
+
* @return array the product classes or empty array
|
118 |
+
* if shipment is not supported by hermes
|
119 |
+
* @throws Exception in case the destination country code
|
120 |
+
* is not found in Hermes product list or
|
121 |
+
* the product_classes node is missing for the country
|
122 |
+
*/
|
123 |
+
public function getParcelClassesForCountry()
|
124 |
+
{
|
125 |
+
$parcelClasses = array();
|
126 |
+
if ($this->isValidHermesShipment()) {
|
127 |
+
$productsList = Mage::getModel('hermes/config')
|
128 |
+
->getListOfProductsProducts();
|
129 |
+
$destinationCountryCode = Mage::helper('hermes')
|
130 |
+
->getIso3CodeByIso2Code(
|
131 |
+
$this->getMageShipment()
|
132 |
+
->getOrder()
|
133 |
+
->getShippingAddress()
|
134 |
+
->getCountryId());
|
135 |
+
if (!array_key_exists($destinationCountryCode, $productsList))
|
136 |
+
throw new Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception(
|
137 |
+
sprintf('destination country %s is not found in Hermes Product List', $destinationCountryCode));
|
138 |
+
if (!array_key_exists('product_classes', $productsList[$destinationCountryCode]))
|
139 |
+
throw new Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception(
|
140 |
+
sprintf('product_classes not found for %s in Hermes Product List', $destinationCountryCode));
|
141 |
+
|
142 |
+
$parcelClasses[''] = 'Standard';
|
143 |
+
|
144 |
+
if (array_key_exists('all', $productsList[$destinationCountryCode]['product_classes'])) {
|
145 |
+
unset($productsList[$destinationCountryCode]['product_classes']['all']);
|
146 |
+
$defaultProductClasses = array_values(Mage::getModel('hermes/config')->getAllProductClasses());
|
147 |
+
foreach ($defaultProductClasses as $defaultProductClass) {
|
148 |
+
$productsList[$destinationCountryCode]['product_classes'][$defaultProductClass] = $defaultProductClass;
|
149 |
+
}
|
150 |
+
}
|
151 |
+
foreach (array_keys($productsList[$destinationCountryCode]['product_classes']) as $value) {
|
152 |
+
$parcelClasses[$value] = $value;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
return $parcelClasses;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Get the Hermes parcel associated with the current shipment.
|
160 |
+
*
|
161 |
+
* @return Netresearch_Hermes_Model_Parcel
|
162 |
+
*/
|
163 |
+
public function getParcel()
|
164 |
+
{
|
165 |
+
return Mage::getModel('hermes/parcel')->load(
|
166 |
+
$this->getMageShipment()->getEntityId(), 'shipment_id'
|
167 |
+
);
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
*
|
172 |
+
* @return boolean
|
173 |
+
*/
|
174 |
+
public function isPdfEnabled()
|
175 |
+
{
|
176 |
+
return Mage::getModel('hermes/config')
|
177 |
+
->isPdfEnabled();
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
*
|
182 |
+
* @return boolean
|
183 |
+
*/
|
184 |
+
public function isJpegEnabled()
|
185 |
+
{
|
186 |
+
return Mage::getModel('hermes/config')
|
187 |
+
->isJpegEnabled();
|
188 |
+
}
|
189 |
+
|
190 |
+
}
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit.php
ADDED
@@ -0,0 +1,78 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Christoph Aßmann <christoph.assmann@netresearch.de>
|
29 |
+
*/
|
30 |
+
class Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit
|
31 |
+
extends Mage_Adminhtml_Block_Widget_Form_Container
|
32 |
+
{
|
33 |
+
public function __construct()
|
34 |
+
{
|
35 |
+
$this->_headerText = $this->helper('hermes')->__('Edit Receiver Data');
|
36 |
+
parent::__construct();
|
37 |
+
|
38 |
+
$this->_removeButton('delete');
|
39 |
+
|
40 |
+
$parcel = Mage::getModel('hermes/parcel')->load(
|
41 |
+
$this->getRequest()->getParam('id')
|
42 |
+
);
|
43 |
+
/* @var $parcel Netresearch_Hermes_Model_Parcel */
|
44 |
+
if ($parcel->canBeResumed()) {
|
45 |
+
$this->_addButton('saveandresume', array(
|
46 |
+
'label' => Mage::helper('hermes')->__('Save parcel and resume'),
|
47 |
+
'onclick' => '$(\'parcel_save_and_resume\').setValue(1); editForm.submit();',
|
48 |
+
'class' => 'save',
|
49 |
+
), 2);
|
50 |
+
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
protected function _prepareLayout()
|
55 |
+
{
|
56 |
+
$block = $this->getLayout()->createBlock(
|
57 |
+
'hermes/adminhtml_sales_parcel_edit_form'
|
58 |
+
);
|
59 |
+
|
60 |
+
/* @var $block Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit_Form */
|
61 |
+
$this->setChild('form', $block);
|
62 |
+
|
63 |
+
/* avoid rendering of non-existing child block */
|
64 |
+
$this->_blockGroup = null;
|
65 |
+
|
66 |
+
return parent::_prepareLayout();
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getBackUrl()
|
70 |
+
{
|
71 |
+
$parcel = Mage::getModel('hermes/parcel')->load(
|
72 |
+
$this->getRequest()->getParam('id')
|
73 |
+
);
|
74 |
+
return $this->getUrl('adminhtml/sales_shipment/view', array(
|
75 |
+
'shipment_id' => $parcel->getShipmentId()
|
76 |
+
));
|
77 |
+
}
|
78 |
+
}
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit/Form.php
ADDED
@@ -0,0 +1,155 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit_Form
|
4 |
+
extends Mage_Adminhtml_Block_Widget_Form
|
5 |
+
{
|
6 |
+
protected $parcel;
|
7 |
+
|
8 |
+
public function __construct()
|
9 |
+
{
|
10 |
+
parent::__construct();
|
11 |
+
$this->setId('parcel_form');
|
12 |
+
$this->setTitle(Mage::helper('hermes')->__('Parcel Information'));
|
13 |
+
|
14 |
+
$this->parcel = Mage::getModel('hermes/parcel')->load(
|
15 |
+
$this->getRequest()->getParam('id')
|
16 |
+
);
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _prepareForm()
|
20 |
+
{
|
21 |
+
$parcelClasses = Mage::getModel('hermes/config')->getAllProductClassesasKeyValue();
|
22 |
+
array_unshift($parcelClasses, array('value' => '', 'label' => Mage::helper('hermes')->__('use default')));
|
23 |
+
|
24 |
+
$form = new Varien_Data_Form(array(
|
25 |
+
'id' => 'edit_form',
|
26 |
+
'action' => $this->getUrl('*/parcel/save'),
|
27 |
+
'method' => 'post'
|
28 |
+
));
|
29 |
+
|
30 |
+
$form->setHtmlIdPrefix('parcel_');
|
31 |
+
|
32 |
+
$fieldset = $form->addFieldset('receiver_data', array(
|
33 |
+
'legend' => Mage::helper('hermes')->__('Receiver Data')
|
34 |
+
));
|
35 |
+
|
36 |
+
$fieldset->addField('id', 'hidden', array(
|
37 |
+
'name' => 'parcel_id'
|
38 |
+
));
|
39 |
+
|
40 |
+
$fieldset->addField('save_and_resume', 'hidden', array(
|
41 |
+
'name' => 'save_and_resume'
|
42 |
+
));
|
43 |
+
|
44 |
+
$fieldset->addField('receiver_firstname', 'text', array(
|
45 |
+
'name' => 'receiver[firstname]',
|
46 |
+
'label' => Mage::helper('hermes')->__('First Name'),
|
47 |
+
'title' => Mage::helper('hermes')->__('First Name'),
|
48 |
+
'note' => Mage::helper('hermes')->__('Leave empty if receiver is a company'),
|
49 |
+
'required' => false
|
50 |
+
));
|
51 |
+
|
52 |
+
$fieldset->addField('receiver_lastname', 'text', array(
|
53 |
+
'name' => 'receiver[lastname]',
|
54 |
+
'label' => Mage::helper('hermes')->__('Last Name/Company'),
|
55 |
+
'title' => Mage::helper('hermes')->__('Last Name/Company'),
|
56 |
+
'note' => Mage::helper('hermes')->__(
|
57 |
+
'If you enter a company name, you could submit the c/o in field <em>%s</em>',
|
58 |
+
Mage::helper('hermes')->__('Additional Address Data')
|
59 |
+
),
|
60 |
+
'required' => true
|
61 |
+
));
|
62 |
+
|
63 |
+
$fieldset->addField('receiver_address_add', 'text', array(
|
64 |
+
'name' => 'receiver[address_add]',
|
65 |
+
'label' => Mage::helper('hermes')->__('Additional Address Data'),
|
66 |
+
'title' => Mage::helper('hermes')->__('Additional Address Data'),
|
67 |
+
'required' => false
|
68 |
+
));
|
69 |
+
|
70 |
+
$fieldset->addField('receiver_street', 'text', array(
|
71 |
+
'name' => 'receiver[street]',
|
72 |
+
'label' => Mage::helper('hermes')->__('Street Address'),
|
73 |
+
'title' => Mage::helper('hermes')->__('Street Address'),
|
74 |
+
'note' => Mage::helper('hermes')->__('May contain house number'),
|
75 |
+
'required' => true,
|
76 |
+
));
|
77 |
+
|
78 |
+
$fieldset->addField('receiver_house_number', 'text', array(
|
79 |
+
'name' => 'receiver[house_number]',
|
80 |
+
'label' => Mage::helper('hermes')->__('House Number'),
|
81 |
+
'title' => Mage::helper('hermes')->__('House Number'),
|
82 |
+
'required' => false
|
83 |
+
));
|
84 |
+
|
85 |
+
$fieldset->addField('receiver_postcode', 'text', array(
|
86 |
+
'name' => 'receiver[postcode]',
|
87 |
+
'label' => Mage::helper('hermes')->__('Zip/Postal Code'),
|
88 |
+
'title' => Mage::helper('hermes')->__('Zip/Postal Code'),
|
89 |
+
'required' => true
|
90 |
+
));
|
91 |
+
|
92 |
+
$fieldset->addField('receiver_city', 'text', array(
|
93 |
+
'name' => 'receiver[city]',
|
94 |
+
'label' => Mage::helper('hermes')->__('City'),
|
95 |
+
'title' => Mage::helper('hermes')->__('City'),
|
96 |
+
'required' => true
|
97 |
+
));
|
98 |
+
|
99 |
+
// only display field if country is IRL!
|
100 |
+
if ($this->parcel->getReceiverCountryCode() === 'IRL') {
|
101 |
+
$fieldset->addField('receiver_district', 'text', array(
|
102 |
+
'name' => 'receiver[district]',
|
103 |
+
'label' => Mage::helper('hermes')->__('District'),
|
104 |
+
'title' => Mage::helper('hermes')->__('District'),
|
105 |
+
'required' => true
|
106 |
+
));
|
107 |
+
}
|
108 |
+
|
109 |
+
// display readonly!
|
110 |
+
$fieldset->addField('receiver_country_code', 'text', array(
|
111 |
+
'name' => 'receiver[country_code]',
|
112 |
+
'label' => Mage::helper('hermes')->__('Country Code'),
|
113 |
+
'title' => Mage::helper('hermes')->__('Country Code'),
|
114 |
+
'required' => true
|
115 |
+
))->setReadonly(true);
|
116 |
+
|
117 |
+
$fieldset->addField('receiver_email', 'text', array(
|
118 |
+
'name' => 'receiver[email]',
|
119 |
+
'label' => Mage::helper('hermes')->__('Email'),
|
120 |
+
'title' => Mage::helper('hermes')->__('Email'),
|
121 |
+
'note' => Mage::helper('hermes')->__('Let Hermes send an email containing the tracking link'),
|
122 |
+
'required' => false
|
123 |
+
));
|
124 |
+
|
125 |
+
$fieldset->addField('receiver_telephone_number', 'text', array(
|
126 |
+
'name' => 'receiver[telephone_number]',
|
127 |
+
'label' => Mage::helper('hermes')->__('Telephone'),
|
128 |
+
'title' => Mage::helper('hermes')->__('Telephone'),
|
129 |
+
'required' => false
|
130 |
+
));
|
131 |
+
|
132 |
+
$fieldset->addField('receiver_telephone_prefix', 'text', array(
|
133 |
+
'name' => 'receiver[telephone_prefix]',
|
134 |
+
'label' => Mage::helper('hermes')->__('Telephone Prefix'),
|
135 |
+
'title' => Mage::helper('hermes')->__('Telephone Prefix'),
|
136 |
+
'required' => false
|
137 |
+
));
|
138 |
+
|
139 |
+
if (Mage::getModel('hermes/config')->isTieredPriceMerchant()) {
|
140 |
+
$fieldset->addField('parcel_class', 'select', array(
|
141 |
+
'name' => 'parcel_class',
|
142 |
+
'label' => Mage::helper('hermes')->__('Parcel class'),
|
143 |
+
'title' => Mage::helper('hermes')->__('Parcel class'),
|
144 |
+
'values' => $parcelClasses
|
145 |
+
));
|
146 |
+
}
|
147 |
+
|
148 |
+
$form->setValues($this->parcel->getData());
|
149 |
+
$form->getElement('save_and_resume')->setValue('0');
|
150 |
+
$this->setForm($form);
|
151 |
+
$form->setUseContainer(true);
|
152 |
+
|
153 |
+
return parent::_prepareForm();
|
154 |
+
}
|
155 |
+
}
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Notice.php
ADDED
@@ -0,0 +1,27 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Block_Adminhtml_System_Config_Notice extends Mage_Adminhtml_Block_Abstract
|
4 |
+
implements Varien_Data_Form_Element_Renderer_Interface
|
5 |
+
{
|
6 |
+
protected $_template = 'hermes/system/config/notice.phtml';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Render fieldset html
|
10 |
+
*
|
11 |
+
* @param Varien_Data_Form_Element_Abstract $fieldset
|
12 |
+
* @return string
|
13 |
+
*/
|
14 |
+
public function render(Varien_Data_Form_Element_Abstract $fieldset)
|
15 |
+
{
|
16 |
+
$originalData = $fieldset->getOriginalData();
|
17 |
+
$this->addData(array(
|
18 |
+
'fieldset_label' => $fieldset->getLegend(),
|
19 |
+
));
|
20 |
+
return $this->toHtml();
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getVersion()
|
24 |
+
{
|
25 |
+
return (string) Mage::getConfig()->getNode('modules')->children()->Netresearch_Hermes->version;
|
26 |
+
}
|
27 |
+
}
|
app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Products.php
ADDED
@@ -0,0 +1,35 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Block_Adminhtml_System_Config_Products extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
|
4 |
+
implements Varien_Data_Form_Element_Renderer_Interface
|
5 |
+
{
|
6 |
+
protected $_template = 'hermes/system/config/products.phtml';
|
7 |
+
|
8 |
+
public function render(Varien_Data_Form_Element_Abstract $fieldset)
|
9 |
+
{
|
10 |
+
$config = Mage::getModel('hermes/config');
|
11 |
+
/* @var $config Netresearch_Hermes_Model_Config */
|
12 |
+
|
13 |
+
$products = $config->getListOfProductsProducts();
|
14 |
+
ksort($products);
|
15 |
+
|
16 |
+
$this->addData(array(
|
17 |
+
'fieldset_label' => $fieldset->getLegend(),
|
18 |
+
'list_of_products_dated' => $config->getListOfProductsData('dated'),
|
19 |
+
'list_of_products_products' => $products
|
20 |
+
));
|
21 |
+
|
22 |
+
$html = $this->_getHeaderHtml($fieldset);
|
23 |
+
$html.= $this->toHtml();
|
24 |
+
$html .= $this->_getFooterHtml($fieldset);
|
25 |
+
|
26 |
+
return $html;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getCountryName($code)
|
30 |
+
{
|
31 |
+
$country = Mage::getModel('directory/country');
|
32 |
+
Mage::getResourceModel('directory/country')->loadByCode($country, $code);
|
33 |
+
return $country->getName();
|
34 |
+
}
|
35 |
+
}
|
app/code/community/Netresearch/Hermes/Helper/Data.php
ADDED
@@ -0,0 +1,53 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Data Helper for Hermes module
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Helper_Data extends Mage_Core_Helper_Data
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* log to a separate log file
|
35 |
+
*
|
36 |
+
* @param string $message
|
37 |
+
* @param int $level
|
38 |
+
* @param bool $force
|
39 |
+
* @return Netresearch_Hermes_Helper_Data
|
40 |
+
*/
|
41 |
+
public function log($message, $level=null, $force=false)
|
42 |
+
{
|
43 |
+
if ($force || Mage::getModel('hermes/config')->isLoggingEnabled()) {
|
44 |
+
Mage::log($message, $level, 'hermes.log', $force);
|
45 |
+
}
|
46 |
+
return $this;
|
47 |
+
}
|
48 |
+
|
49 |
+
public function getIso3CodeByIso2Code($iso2Code)
|
50 |
+
{
|
51 |
+
return Mage::getModel('directory/country')->load($iso2Code)->getIso3Code();
|
52 |
+
}
|
53 |
+
}
|
app/code/community/Netresearch/Hermes/Helper/Order.php
ADDED
@@ -0,0 +1,272 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Order Helper for Hermes module
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Helper_Order extends Mage_Core_Helper_Data
|
32 |
+
{
|
33 |
+
|
34 |
+
protected $parcelValidator = null;
|
35 |
+
|
36 |
+
|
37 |
+
/**
|
38 |
+
* create shipments and parcels for orders in the given collection
|
39 |
+
*
|
40 |
+
* @param Mage_Sales_Model_Mysql4_Order_Collection $orders
|
41 |
+
* @param string $parcelClass
|
42 |
+
* @param boolean $notifyCustomer
|
43 |
+
*
|
44 |
+
* @return array List of error/success messages
|
45 |
+
*/
|
46 |
+
public function shipOrders($orders, $parcelClass=null, $notifyCustomer = false)
|
47 |
+
{
|
48 |
+
$result = array(
|
49 |
+
'success' => array(),
|
50 |
+
'errors' => array()
|
51 |
+
);
|
52 |
+
foreach ($orders as $order) {
|
53 |
+
if ($this->orderCanBeShipped($order)) {
|
54 |
+
$messages = $this->shipOrder($order, $parcelClass, $notifyCustomer);
|
55 |
+
// array_merge didn't worked here, do it manually
|
56 |
+
if (array_key_exists('success', $messages)) {
|
57 |
+
$result['success'][$order->getIncrementId()] = $messages['success'];
|
58 |
+
}
|
59 |
+
if (array_key_exists('errors', $messages)) {
|
60 |
+
$result['errors'][$order->getIncrementId()] = $messages['errors'];
|
61 |
+
}
|
62 |
+
} else {
|
63 |
+
$result['errors'][$order->getIncrementId()] = Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.');
|
64 |
+
}
|
65 |
+
}
|
66 |
+
return $result;
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
/**
|
71 |
+
* create shipment and parcel for a given order
|
72 |
+
*
|
73 |
+
* @param Mage_Sales_Model_Order $order
|
74 |
+
* @param string $parcelClass
|
75 |
+
* @param boolean $notifyCustomer
|
76 |
+
*
|
77 |
+
* @return array List of error/success messages
|
78 |
+
*/
|
79 |
+
protected function shipOrder(Mage_Sales_Model_Order $order, $parcelClass, $notifyCustomer)
|
80 |
+
{
|
81 |
+
$messages = array();
|
82 |
+
$parcelValidator = $this->getOrderValidator();
|
83 |
+
$parcelValidator->setOrder($order);
|
84 |
+
$success = false;
|
85 |
+
$message = null;
|
86 |
+
if ($parcelValidator->isValidHermesShipment()) {
|
87 |
+
try {
|
88 |
+
$shipment = $this->createShipment($order);
|
89 |
+
/** @var $shipment Mage_Sales_Model_Order_Shipment */
|
90 |
+
$parcel = $this->createParcel($shipment, $parcelClass);
|
91 |
+
|
92 |
+
if ($parcel && $parcel->getId()) {
|
93 |
+
$success = true;
|
94 |
+
$shipment->sendEmail($notifyCustomer);
|
95 |
+
|
96 |
+
} else {
|
97 |
+
$message = Mage::helper('hermes')->__('Could not generate Hermes parcel.') . var_export($parcel->getId(), true);
|
98 |
+
}
|
99 |
+
} catch (Exception $e) {
|
100 |
+
$message = $e->getMessage();
|
101 |
+
}
|
102 |
+
} else {
|
103 |
+
$message = Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.');
|
104 |
+
}
|
105 |
+
$messages[$success ? 'success' : 'errors'] = $message;
|
106 |
+
return $messages;
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
/**
|
111 |
+
* gets the order validation helper
|
112 |
+
*
|
113 |
+
* @return Netresearch_Hermes_Helper_Validate_Order
|
114 |
+
*/
|
115 |
+
protected function getOrderValidator()
|
116 |
+
{
|
117 |
+
if (is_null($this->parcelValidator)) {
|
118 |
+
$this->parcelValidator = Mage::helper("hermes/validate_order");
|
119 |
+
}
|
120 |
+
return $this->parcelValidator;
|
121 |
+
}
|
122 |
+
|
123 |
+
|
124 |
+
/**
|
125 |
+
* create parcel for a shipment
|
126 |
+
*
|
127 |
+
* @param Mage_Sales_Model_Order_Shipment $shipment
|
128 |
+
* @param string $parcelClass
|
129 |
+
*
|
130 |
+
* @return Netresearch_Hermes_Model_Parcel
|
131 |
+
*/
|
132 |
+
public function createParcel($shipment, $parcelClass=null)
|
133 |
+
{
|
134 |
+
/** @var $parcel Netresearch_Hermes_Model_Parcel */
|
135 |
+
$parcel = Mage::getModel('hermes/parcel')
|
136 |
+
->setShipment($shipment)
|
137 |
+
->setParcelClass($parcelClass)
|
138 |
+
->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
|
139 |
+
$parcelValidator = Mage::helper("hermes/validate_order");
|
140 |
+
/* @var $parcelValidator Netresearch_Hermes_Helper_Validate_Order */
|
141 |
+
if ($parcelValidator->setOrder($shipment->getOrder())->isShippedAsCod()) {
|
142 |
+
$parcel->setIncludeCashOnDelivery('1');
|
143 |
+
$grandTotalEurocent = 100 * $shipment->getOrder()->getGrandTotal();
|
144 |
+
$parcel->setAmountCashOnDeliveryEurocent((int) $grandTotalEurocent);
|
145 |
+
}
|
146 |
+
return $parcel->save();
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Create shipment.
|
151 |
+
*
|
152 |
+
* @param Mage_Sales_Model_Order $order
|
153 |
+
* @return Mage_Sales_Model_Order_Shipment $shipment
|
154 |
+
*/
|
155 |
+
public function createShipment(Mage_Sales_Model_Order $order)
|
156 |
+
{
|
157 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
158 |
+
$shipment = Mage::getModel('sales/service_order', $order)
|
159 |
+
->prepareShipment($this->getQtys($order));
|
160 |
+
$shipment->register();
|
161 |
+
$shipment->save();
|
162 |
+
$order->save();
|
163 |
+
return $shipment;
|
164 |
+
}
|
165 |
+
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Get order quantities.
|
169 |
+
*
|
170 |
+
* @param Mage_Sales_Model_Order $order
|
171 |
+
* @return array $qtys
|
172 |
+
*/
|
173 |
+
public function getQtys(Mage_Sales_Model_Order $order)
|
174 |
+
{
|
175 |
+
$qtys = array();
|
176 |
+
foreach ($order->getAllItems() as $item) {
|
177 |
+
$qtys[$item->getId()] = $item->getQtyToShip();
|
178 |
+
}
|
179 |
+
return $qtys;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Checks if an order can be shipped
|
184 |
+
*
|
185 |
+
* @param Mage_Sales_Model_Order $order
|
186 |
+
* @return boolean - true if the order can be shipped, false otherwise
|
187 |
+
*/
|
188 |
+
protected function orderCanBeShipped($order)
|
189 |
+
{
|
190 |
+
$currentPaymentMethod =$order->getPayment()->getMethod();
|
191 |
+
$paymentMethodsForAutoMode = Mage::getModel('hermes/config')->getAutocreatePaymentMethods();
|
192 |
+
if (!in_array($currentPaymentMethod, $paymentMethodsForAutoMode)) {
|
193 |
+
return false;
|
194 |
+
}
|
195 |
+
if (0 < $order->getShipmentsCollection()->count()) {
|
196 |
+
return false;
|
197 |
+
}
|
198 |
+
foreach ($order->getItemsCollection() as $item) {
|
199 |
+
if ($item->getIsVirtual()) {
|
200 |
+
return false;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
|
204 |
+
return true;
|
205 |
+
}
|
206 |
+
|
207 |
+
|
208 |
+
|
209 |
+
/**
|
210 |
+
* retrieves orders
|
211 |
+
*
|
212 |
+
* @return Mage_Sales_Model_Mysql4_Order_Collection
|
213 |
+
*/
|
214 |
+
public function getOrderCollection()
|
215 |
+
{
|
216 |
+
$config = Mage::getModel('hermes/config');
|
217 |
+
$automaticOrderStatus = $config->getAutocreateOrderStatuses();
|
218 |
+
$installationDate = $config->getInstallationDate();
|
219 |
+
$maxDaysInPast = $config->getMaxDaysInPast();
|
220 |
+
$maxOrderDaysInPastExpression = new Zend_Db_Expr(
|
221 |
+
'DATE_SUB(CURRENT_DATE, INTERVAL ' . $maxDaysInPast . ' DAY)'
|
222 |
+
);
|
223 |
+
$collection = Mage::getModel('sales/order')
|
224 |
+
->getCollection()
|
225 |
+
->addAttributeToFilter('status', array('in' => $automaticOrderStatus))
|
226 |
+
->addAttributeToFilter('created_at', array('gteq' => $maxOrderDaysInPastExpression))
|
227 |
+
->addAttributeToFilter('created_at', array('gteq' => $installationDate))
|
228 |
+
->setOrder('entity_id', 'ASC');
|
229 |
+
return $collection;
|
230 |
+
}
|
231 |
+
|
232 |
+
|
233 |
+
/**
|
234 |
+
* checks if the order is shipped partially
|
235 |
+
* @return boolean
|
236 |
+
*/
|
237 |
+
public function isPartialShipment($shipment)
|
238 |
+
{
|
239 |
+
$order = $shipment->getOrder();
|
240 |
+
//Check if it is a cod order
|
241 |
+
$orderHelper = Mage::helper('hermes/validate_order');
|
242 |
+
$orderHelper->setOrder($order);
|
243 |
+
if (false === $orderHelper->isShippedAsCod()) {
|
244 |
+
return false;
|
245 |
+
}
|
246 |
+
//Build shipment item array
|
247 |
+
$shipment_items = array();
|
248 |
+
foreach ($shipment->getItemsCollection()->getItems() as $shipment_item) {
|
249 |
+
|
250 |
+
//Ignore doublette simple/configurable shipment items
|
251 |
+
if ((float) $shipment_item->getPrice()==0) {
|
252 |
+
continue;
|
253 |
+
}
|
254 |
+
$shipment_items[$shipment_item->getSku()] = $shipment_item->getQty();
|
255 |
+
}
|
256 |
+
|
257 |
+
//Loop through every order item and look if it is existing in the shipment too
|
258 |
+
foreach ($order->getAllItems() as $order_item) {
|
259 |
+
//Ignore doublette simple/configurable order items
|
260 |
+
if ((float) $order_item->getPrice()==0 || '' !=$order_item->getParentItemId() || $order_item->getIsVirtual()) {
|
261 |
+
continue;
|
262 |
+
}
|
263 |
+
if (false === isset($shipment_items[$order_item->getSku()])) {
|
264 |
+
return true;
|
265 |
+
}
|
266 |
+
if ($shipment_items[$order_item->getSku()] != (int) $order_item->getQtyOrdered()) {
|
267 |
+
return true;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
return false;
|
271 |
+
}
|
272 |
+
}
|
app/code/community/Netresearch/Hermes/Helper/Validate/Order.php
ADDED
@@ -0,0 +1,173 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Order Validate Helper for Hermes module
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Helper_Validate_Order extends Mage_Core_Helper_Data
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
*
|
35 |
+
* @var Mage_Sales_Model_Order
|
36 |
+
*/
|
37 |
+
protected $order;
|
38 |
+
|
39 |
+
/**
|
40 |
+
*
|
41 |
+
* @var array
|
42 |
+
*/
|
43 |
+
protected $validation_errors = array();
|
44 |
+
|
45 |
+
/**
|
46 |
+
* set order
|
47 |
+
*
|
48 |
+
* @param Mage_Sales_Model_Order $order
|
49 |
+
*
|
50 |
+
* @return Netresearch_Hermes_Helper_Validate_Order
|
51 |
+
*/
|
52 |
+
public function setOrder($order)
|
53 |
+
{
|
54 |
+
$this->validation_errors = array();
|
55 |
+
$this->order = $order;
|
56 |
+
return $this;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* get order
|
61 |
+
*
|
62 |
+
* @return Mage_Sales_Model_Order
|
63 |
+
*/
|
64 |
+
public function getOrder()
|
65 |
+
{
|
66 |
+
return $this->order;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* check if order is valid to be shipped with hermes
|
71 |
+
*
|
72 |
+
* @return boolean
|
73 |
+
*/
|
74 |
+
public function isValidHermesShipment()
|
75 |
+
{
|
76 |
+
$check = true;
|
77 |
+
|
78 |
+
//Check if the order is a COD-Order and Amount is greater than 2.500€
|
79 |
+
if ($this->isShippedAsCod() && $this->getOrder()->getGrandTotal() > 2500) {
|
80 |
+
$check = false;
|
81 |
+
$this->validation_errors[] = $this->__('Hermes COD shipments are not allowed for grand totals greater than 2.500€.');
|
82 |
+
}
|
83 |
+
|
84 |
+
//Check if the order is a COD-Order and target country is an allowed COD country
|
85 |
+
if ($this->isShippedAsCod() && false === $this->isAllowedCodCountry()) {
|
86 |
+
$check = false;
|
87 |
+
$this->validation_errors[] = $this->__('Hermes COD shipments are not allowed to %s.',
|
88 |
+
$this->getOrder()->getShippingAddress()->getCountryModel()->getName()
|
89 |
+
);
|
90 |
+
}
|
91 |
+
|
92 |
+
//check if country is in available countries list
|
93 |
+
if (false === $this->isAllowedCountry()) {
|
94 |
+
$check = false;
|
95 |
+
$this->validation_errors[] = $this->__('"%s" is not supported by Hermes.',
|
96 |
+
$this->getOrder()->getShippingAddress()->getCountryModel()->getName()
|
97 |
+
);
|
98 |
+
}
|
99 |
+
|
100 |
+
return $check;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* check if order is shipped by COD
|
105 |
+
*
|
106 |
+
* @return boolean
|
107 |
+
*/
|
108 |
+
public function isShippedAsCod()
|
109 |
+
{
|
110 |
+
return Mage::getModel("hermes/config")
|
111 |
+
->isPaymentMethodForCod($this->getOrder()->getPayment()->getMethod(), $this->getOrder()->getStoreId());
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* check if order is shipped to an allowed country
|
116 |
+
*
|
117 |
+
* @return boolean
|
118 |
+
*/
|
119 |
+
public function isAllowedCountry()
|
120 |
+
{
|
121 |
+
$receiverIso3CountryCode = Mage::helper('hermes')->getIso3CodeByIso2Code(
|
122 |
+
$this->getOrder()->getShippingAddress()->getCountryId()
|
123 |
+
);
|
124 |
+
|
125 |
+
if (false === Mage::getModel("hermes/config")->isAllowedCountry($receiverIso3CountryCode))
|
126 |
+
return false;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* check if order is shipped to an allowed cod country
|
131 |
+
*
|
132 |
+
* @return boolean
|
133 |
+
*/
|
134 |
+
public function isAllowedCodCountry()
|
135 |
+
{
|
136 |
+
$receiverIso3CountryCode = Mage::helper('hermes')->getIso3CodeByIso2Code(
|
137 |
+
$this->getOrder()->getShippingAddress()->getCountryId()
|
138 |
+
);
|
139 |
+
|
140 |
+
if (false === Mage::getModel("hermes/config")->isAllowedCodCountry($receiverIso3CountryCode))
|
141 |
+
return false;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* get validation errors
|
146 |
+
*/
|
147 |
+
public function getValidationErrors()
|
148 |
+
{
|
149 |
+
return $this->validation_errors;
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* reset validation errors
|
154 |
+
*/
|
155 |
+
public function resetValidationErrors()
|
156 |
+
{
|
157 |
+
$this->validation_errors = array();
|
158 |
+
return $this;
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* check if order was created after Hermes installation
|
163 |
+
*
|
164 |
+
* @param Mage_Sales_Model_Order $order
|
165 |
+
* @return boolean
|
166 |
+
*/
|
167 |
+
public function isCreatedAfterHermesInstallation()
|
168 |
+
{
|
169 |
+
$installDate = Mage::getModel("hermes/config")->getInstallationDate();
|
170 |
+
$orderDate = strtotime($this->getOrder()->getCreatedAtDate());
|
171 |
+
return ($installDate <= $orderDate);
|
172 |
+
}
|
173 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Client.php
ADDED
@@ -0,0 +1,650 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
20 |
+
* @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
* @link http://www.netresearch.de/magento/
|
23 |
+
*/
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Hermes API client
|
28 |
+
*
|
29 |
+
* @category Netresearch
|
30 |
+
* @package Netresearch_Hermes
|
31 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
32 |
+
* @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
33 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
34 |
+
* @link http://www.netresearch.de/magento/
|
35 |
+
*/
|
36 |
+
class Netresearch_Hermes_Model_Client
|
37 |
+
{
|
38 |
+
/**
|
39 |
+
*
|
40 |
+
* @var Netresearch_Hermes_Model_Client_Soap
|
41 |
+
*/
|
42 |
+
protected $soapClient;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var string
|
46 |
+
*/
|
47 |
+
protected $userToken;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @var string
|
51 |
+
*/
|
52 |
+
protected $partnerToken;
|
53 |
+
|
54 |
+
/* property namespace */
|
55 |
+
const PROPERTY_NS = 'http://props.hermes_api.service.hlg.de';
|
56 |
+
|
57 |
+
/* maximum count of orders being accepted by soap method propsImportOrders */
|
58 |
+
const IMPORT_ORDERS_MAX_COUNT = 500;
|
59 |
+
|
60 |
+
/* label positioning */
|
61 |
+
const PRINT_POSITION_UPPER_LEFT = 1;
|
62 |
+
const PRINT_POSITION_UPPER_RIGHT = 2;
|
63 |
+
const PRINT_POSITION_LOWER_LEFT = 3;
|
64 |
+
const PRINT_POSITION_LOWER_RIGHT = 4;
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Restructure single items of the soap response
|
68 |
+
*
|
69 |
+
* @param array $config The array to hold the restructured data
|
70 |
+
* @param stdClass $parcelFormat Information regarding package size and weight
|
71 |
+
* @param stdClass $destination Information regarding allowed shipping destinations
|
72 |
+
* @param string $price The shipping costs for the current format/destination combination
|
73 |
+
*/
|
74 |
+
protected function setProductConfig(array &$config, stdClass $parcelFormat, stdClass $destination, $price)
|
75 |
+
{
|
76 |
+
if (!isset($config[$destination->countryCode])) {
|
77 |
+
$config[$destination->countryCode] = array('product_classes' => array());
|
78 |
+
}
|
79 |
+
|
80 |
+
$parcelClass = $parcelFormat->parcelClass;
|
81 |
+
if (!$parcelClass) {
|
82 |
+
$parcelClass = 'all';
|
83 |
+
}
|
84 |
+
|
85 |
+
if (!isset($config[$destination->countryCode]['product_classes'][$parcelClass])) {
|
86 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass] = array(
|
87 |
+
'weightMinKg' => null,
|
88 |
+
'weigthMaxKg' => null,
|
89 |
+
'shortestPlusLongestEdgeCmMin' => null,
|
90 |
+
'shortestPlusLongestEdgeCmMax' => null,
|
91 |
+
'thridEdgeCmMax' => null,
|
92 |
+
'exclusions' => null,
|
93 |
+
'netPriceEurcent' => $price
|
94 |
+
);
|
95 |
+
}
|
96 |
+
|
97 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['weightMinKg'] =
|
98 |
+
$parcelFormat->weightMinKg;
|
99 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['weigthMaxKg'] =
|
100 |
+
$parcelFormat->weigthMaxKg;
|
101 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['shortestPlusLongestEdgeCmMin'] =
|
102 |
+
$parcelFormat->shortestPlusLongestEdgeCmMin;
|
103 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['shortestPlusLongestEdgeCmMax'] =
|
104 |
+
$parcelFormat->shortestPlusLongestEdgeCmMax;
|
105 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['thridEdgeCmMax'] =
|
106 |
+
$parcelFormat->thridEdgeCmMax;
|
107 |
+
$config[$destination->countryCode]['product_classes'][$parcelClass]['exclusions'] =
|
108 |
+
$destination->exclusions;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Iterate through soap response in order to prepare data for storage
|
113 |
+
*
|
114 |
+
* @param array $productInformation The soap response
|
115 |
+
* @return array The restructured product information
|
116 |
+
*/
|
117 |
+
protected function iterateUserProducts(array $productInformation)
|
118 |
+
{
|
119 |
+
$userProducts = array();
|
120 |
+
|
121 |
+
foreach ($productInformation as $product) {
|
122 |
+
// $destinations = $product->productInfo->deliveryDestinations->DeliveryDestination;
|
123 |
+
// if (!is_array($destinations)) {
|
124 |
+
// $this->setProductConfig($userProducts, $product->productInfo->parcelFormat, $destinations, $product->netPriceEurcent);
|
125 |
+
// continue;
|
126 |
+
// }
|
127 |
+
|
128 |
+
foreach ($product->productInfo->deliveryDestinations->DeliveryDestination as $destination) {
|
129 |
+
$this->setProductConfig($userProducts, $product->productInfo->parcelFormat, $destination, $product->netPriceEurcent);
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
return $userProducts;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Store the user's available products to config
|
138 |
+
*
|
139 |
+
* @param array $productInformation The products as given in soap response
|
140 |
+
*/
|
141 |
+
protected function storeListOfProducts(stdClass $productInformation)
|
142 |
+
{
|
143 |
+
// restructure products
|
144 |
+
$userProducts = $this->iterateUserProducts(
|
145 |
+
$productInformation->products->ProductWithPrice
|
146 |
+
);
|
147 |
+
$this->getConfig()->setListOfProductsProducts($userProducts);
|
148 |
+
|
149 |
+
// store other information
|
150 |
+
$this->getConfig()->setListOfProductsData(
|
151 |
+
'number_of_products',
|
152 |
+
$productInformation->numberOfProducts
|
153 |
+
);
|
154 |
+
$this->getConfig()->setListOfProductsData(
|
155 |
+
'dated',
|
156 |
+
$productInformation->dated
|
157 |
+
);
|
158 |
+
$this->getConfig()->setListOfProductsData(
|
159 |
+
'label_acceptance_terms_and_conditions',
|
160 |
+
$productInformation->labelAcceptanceTermsAndConditions
|
161 |
+
);
|
162 |
+
$this->getConfig()->setListOfProductsData(
|
163 |
+
'label_acceptance_liability_limit',
|
164 |
+
$productInformation->labelAcceptanceLiabilityLimit
|
165 |
+
);
|
166 |
+
$this->getConfig()->setListOfProductsData(
|
167 |
+
'url_terms_and_conditions',
|
168 |
+
$productInformation->urlTermsAndConditions
|
169 |
+
);
|
170 |
+
$this->getConfig()->setListOfProductsData(
|
171 |
+
'net_price_cash_on_delivery_eurocent',
|
172 |
+
$productInformation->netPriceCashOnDeliveryEurocent
|
173 |
+
);
|
174 |
+
$this->getConfig()->setListOfProductsData(
|
175 |
+
'settlement_type',
|
176 |
+
$productInformation->settlementType
|
177 |
+
);
|
178 |
+
$this->getConfig()->setListOfProductsData(
|
179 |
+
'url_hermes_logogram',
|
180 |
+
$productInformation->urlHermesLogogram
|
181 |
+
);
|
182 |
+
$this->getConfig()->setListOfProductsData(
|
183 |
+
'url_liability_informations',
|
184 |
+
$productInformation->urlLiabilityInformations
|
185 |
+
);
|
186 |
+
$this->getConfig()->setListOfProductsData(
|
187 |
+
'url_packaging_guidelines',
|
188 |
+
$productInformation->urlPackagingGuidelines
|
189 |
+
);
|
190 |
+
$this->getConfig()->setListOfProductsData(
|
191 |
+
'url_portal_b2c',
|
192 |
+
$productInformation->urlPortalB2C
|
193 |
+
);
|
194 |
+
$this->getConfig()->setListOfProductsData(
|
195 |
+
'vat_info',
|
196 |
+
$productInformation->vatInfo
|
197 |
+
);
|
198 |
+
Mage::getModel('core/config')->removeCache();
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* get module configuration object
|
203 |
+
*
|
204 |
+
* @return Netresearch_Hermes_Model_Config
|
205 |
+
*/
|
206 |
+
public function getConfig()
|
207 |
+
{
|
208 |
+
return Mage::getModel('hermes/config');
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* get Hermes api
|
213 |
+
*
|
214 |
+
* @param string $userToken
|
215 |
+
* @param string $partnerToken
|
216 |
+
* @return Netresearch_Hermes_Model_Client_Soap
|
217 |
+
*/
|
218 |
+
public function getSoapClient($userToken = null, $partnerToken = null)
|
219 |
+
{
|
220 |
+
if (is_null($this->soapClient)) {
|
221 |
+
$this->soapClient = Mage::getModel('hermes/client_soap');
|
222 |
+
$this->soapClient->addSoapInputHeader(
|
223 |
+
new SoapHeader(
|
224 |
+
self::PROPERTY_NS, 'PartnerId', $this->getConfig()->getPartnerId()
|
225 |
+
), $permanent = true
|
226 |
+
);
|
227 |
+
$this->soapClient->addSoapInputHeader(
|
228 |
+
new SoapHeader(
|
229 |
+
self::PROPERTY_NS, 'PartnerPwd', $this->getConfig()->getPartnerPwd()
|
230 |
+
), $permanent = true
|
231 |
+
);
|
232 |
+
}
|
233 |
+
|
234 |
+
if (null !== $userToken) {
|
235 |
+
$this->soapClient->addSoapInputHeader(
|
236 |
+
new SoapHeader(
|
237 |
+
self::PROPERTY_NS, 'UserToken', $userToken
|
238 |
+
), $permanent = true
|
239 |
+
);
|
240 |
+
}
|
241 |
+
|
242 |
+
if (null !== $partnerToken) {
|
243 |
+
$this->soapClient->addSoapInputHeader(
|
244 |
+
new SoapHeader(
|
245 |
+
self::PROPERTY_NS, 'PartnerToken', $partnerToken
|
246 |
+
), $permanent = true
|
247 |
+
);
|
248 |
+
}
|
249 |
+
|
250 |
+
return $this->soapClient;
|
251 |
+
}
|
252 |
+
|
253 |
+
public function getLastResponse()
|
254 |
+
{
|
255 |
+
return $this->getSoapClient()->getLastResponse();
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Service propsCheckAvailability
|
260 |
+
*
|
261 |
+
* checks availability of all required API components
|
262 |
+
* and returns the api version in case of success and an error message otherwise
|
263 |
+
*
|
264 |
+
* @throws Netresearch_Hermes_Model_Client_Exception if api is not available
|
265 |
+
* @return string API version
|
266 |
+
*/
|
267 |
+
public function getApiVersion()
|
268 |
+
{
|
269 |
+
try {
|
270 |
+
$soapClient = $this->getSoapClient();
|
271 |
+
return $soapClient
|
272 |
+
->propsCheckAvailability()
|
273 |
+
->propsCheckAvailabilityReturn;
|
274 |
+
} catch (SoapFault $e) {
|
275 |
+
$this->logCommunication('GET API VERSION', Zend_Log::ERR);
|
276 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
/**
|
281 |
+
* check if web service is available
|
282 |
+
*
|
283 |
+
* @return boolean
|
284 |
+
*/
|
285 |
+
public function isAvailable()
|
286 |
+
{
|
287 |
+
try {
|
288 |
+
/**
|
289 |
+
* the service returns the current api version, otherwise it is not available
|
290 |
+
*/
|
291 |
+
return 0 < preg_match('/\d+(\.\d+)*/', $this->getApiVersion());
|
292 |
+
} catch (Netresearch_Hermes_Model_Client_Exception $e) {
|
293 |
+
return false;
|
294 |
+
}
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Query all Hermes products
|
299 |
+
*
|
300 |
+
* @throws Netresearch_Hermes_Model_Client_Exception if api is not available
|
301 |
+
* @return stdClass
|
302 |
+
*/
|
303 |
+
public function getProductInformation()
|
304 |
+
{
|
305 |
+
try {
|
306 |
+
$soapClient = $this->getSoapClient();
|
307 |
+
return $soapClient
|
308 |
+
->propsProductlnformation()
|
309 |
+
->propsProductlnformationReturn;
|
310 |
+
} catch (SoapFault $e) {
|
311 |
+
$this->logCommunication('LOAD PRODUCTS', Zend_Log::ERR, true);
|
312 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
313 |
+
}
|
314 |
+
$this->logCommunication('LOAD PRODUCTS');
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Query the Hermes user's available products and update config
|
319 |
+
*
|
320 |
+
* @throws Netresearch_Hermes_Model_Client_Exception if api is not available
|
321 |
+
* @return stdClass
|
322 |
+
*/
|
323 |
+
public function updateListOfProducts()
|
324 |
+
{
|
325 |
+
try {
|
326 |
+
$this->login();
|
327 |
+
|
328 |
+
$soapClient = $this->getSoapClient($this->userToken);
|
329 |
+
$userProducts = $soapClient
|
330 |
+
->propsListOfProductsATG()
|
331 |
+
->propsListOfProductsATGReturn;
|
332 |
+
|
333 |
+
$this->logCommunication('UPDATE CUSTOMERS PRODUCT LIST');
|
334 |
+
$this->storeListOfProducts($userProducts);
|
335 |
+
|
336 |
+
return $userProducts;
|
337 |
+
} catch (SoapFault $e) {
|
338 |
+
$this->logCommunication('UPDATE CUSTOMERS PRODUCT LIST', Zend_Log::ERR, true);
|
339 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
340 |
+
}
|
341 |
+
}
|
342 |
+
|
343 |
+
/**
|
344 |
+
* get user token of Hermes web service
|
345 |
+
*
|
346 |
+
* @return string
|
347 |
+
*/
|
348 |
+
public function getUserToken()
|
349 |
+
{
|
350 |
+
return $this->userToken;
|
351 |
+
}
|
352 |
+
|
353 |
+
/**
|
354 |
+
* get partner token of Hermes web service
|
355 |
+
*
|
356 |
+
* @return string
|
357 |
+
*/
|
358 |
+
public function getPartnerToken()
|
359 |
+
{
|
360 |
+
return $this->partnerToken;
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Authenticate Hermes user if not authenticated yet and set the
|
365 |
+
* properties userToken and partnerToken
|
366 |
+
*
|
367 |
+
* @throws Netresearch_Hermes_Model_Client_Exception if credentials are missing or wrong
|
368 |
+
* @return string User Token
|
369 |
+
*/
|
370 |
+
public function login()
|
371 |
+
{
|
372 |
+
if (false == $this->isAvailable()) {
|
373 |
+
throw new Netresearch_Hermes_Model_Client_Exception('Hermes API is currently not available. Please try again later.');
|
374 |
+
}
|
375 |
+
if (!$this->userToken) {
|
376 |
+
$soapClient = $this->getSoapClient();
|
377 |
+
try {
|
378 |
+
$response = $soapClient->propsUserLogin(array(
|
379 |
+
'login' => array(
|
380 |
+
'benutzername' => $this->getConfig()->getUsername(),
|
381 |
+
'kennwort' => $this->getConfig()->getPassword()
|
382 |
+
)
|
383 |
+
));
|
384 |
+
} catch (SoapFault $e) {
|
385 |
+
$this->logCommunication('LOGIN', Zend_Log::ERR, true);
|
386 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
387 |
+
}
|
388 |
+
$this->logCommunication('LOGIN');
|
389 |
+
|
390 |
+
$this->userToken = $response->propsUserLoginReturn;
|
391 |
+
|
392 |
+
$headers = $soapClient->getLastSoapOutputHeaderObjects();
|
393 |
+
if (is_array($headers) && array_key_exists('PartnerToken', $headers)) {
|
394 |
+
$this->partnerToken = $headers['PartnerToken'];
|
395 |
+
}
|
396 |
+
}
|
397 |
+
|
398 |
+
return $this->userToken;
|
399 |
+
}
|
400 |
+
|
401 |
+
public function logCommunication($prefix, $level=3, $force=false)
|
402 |
+
{
|
403 |
+
Mage::helper('hermes')->log(
|
404 |
+
$prefix . ':' . PHP_EOL . '== REQUEST ==' . PHP_EOL
|
405 |
+
. $this->getSoapClient()->getLastRequest()
|
406 |
+
. '== RESPONSE ==' . PHP_EOL
|
407 |
+
. $this->getSoapClient()->getLastResponse()
|
408 |
+
. PHP_EOL,
|
409 |
+
$level, $force
|
410 |
+
);
|
411 |
+
}
|
412 |
+
|
413 |
+
/**
|
414 |
+
* set parcels status "in transmission" to avoid duplicate transmission if sendParcels is called by different
|
415 |
+
* processes in parallel
|
416 |
+
*
|
417 |
+
* @param array $parcelIds Ids of parcels to be transmitted
|
418 |
+
* @return void
|
419 |
+
*/
|
420 |
+
protected function _setParcelsStatusInTransmission($parcelCollection)
|
421 |
+
{
|
422 |
+
$resource = Mage::getModel('hermes/parcel')->getResource();
|
423 |
+
$resource->beginTransaction();
|
424 |
+
$parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION)->save();
|
425 |
+
$resource->commit();
|
426 |
+
}
|
427 |
+
|
428 |
+
/**
|
429 |
+
* send up to 500 parcels to Hermes
|
430 |
+
*
|
431 |
+
* @param array $parcels
|
432 |
+
* @return stdClass SOAP response
|
433 |
+
*/
|
434 |
+
public function sendParcels(array $parcelIds)
|
435 |
+
{
|
436 |
+
if (self::IMPORT_ORDERS_MAX_COUNT < count($parcelIds)) {
|
437 |
+
throw new Netresearch_Hermes_Model_Client_Exception(sprintf(
|
438 |
+
'Exceeded maximum order limit: SOAP method propsImportOrders does accept up to %d orders per call (you tried to send %d)',
|
439 |
+
self::IMPORT_ORDERS_MAX_COUNT,
|
440 |
+
count($parcelIds)
|
441 |
+
));
|
442 |
+
}
|
443 |
+
$parcelCollection = Mage::getModel('hermes/parcel')->getCollection()
|
444 |
+
->addFieldToFilter('id', array('in' => $parcelIds))
|
445 |
+
->addFieldToFilter('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
|
446 |
+
|
447 |
+
$parcelData = $this->getConvertedParcelData($parcelIds);
|
448 |
+
if (0 == count($parcelData)) {
|
449 |
+
$parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED)->save();
|
450 |
+
throw new Netresearch_Hermes_Model_Client_Exception(
|
451 |
+
'None of the given parcels could be sent to Hermes'
|
452 |
+
);
|
453 |
+
}
|
454 |
+
try {
|
455 |
+
$this->login();
|
456 |
+
$this->_setParcelsStatusInTransmission($parcelCollection);
|
457 |
+
$response = $this->getSoapClient($this->userToken, $this->partnerToken)->propsImportOrders(
|
458 |
+
array(
|
459 |
+
'requestedOrders' => array(
|
460 |
+
'propsOrders' => $parcelData
|
461 |
+
)
|
462 |
+
)
|
463 |
+
);
|
464 |
+
|
465 |
+
} catch (SoapFault $e) {
|
466 |
+
$parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED)->save();
|
467 |
+
$this->logCommunication('IMPORT ORDERS', 3, true);
|
468 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
469 |
+
}
|
470 |
+
$this->logCommunication('IMPORT ORDERS');
|
471 |
+
return $response;
|
472 |
+
}
|
473 |
+
|
474 |
+
/**
|
475 |
+
* convert parcels into Hermes data structure and return that
|
476 |
+
*
|
477 |
+
* @param array $parcelIds
|
478 |
+
* @return array
|
479 |
+
*/
|
480 |
+
public function getConvertedParcelData($parcelIds)
|
481 |
+
{
|
482 |
+
$parcel = Mage::getModel('hermes/parcel');
|
483 |
+
$parcelData = array();
|
484 |
+
foreach ($parcelIds as $parcelId) {
|
485 |
+
$parcel->load($parcelId);
|
486 |
+
if (!$parcel->getId()) {
|
487 |
+
/* skip non-persistent parcels */
|
488 |
+
continue;
|
489 |
+
}
|
490 |
+
$parcelData[] = array(
|
491 |
+
'orderNo' => $parcel->getHermesOrderNo(),
|
492 |
+
'receiver' => $this->getReceiverData($parcel),
|
493 |
+
'clientReferenceNumber' => $parcel->getShipment()->getIncrementId(),
|
494 |
+
'parcelClass' => $parcel->getParcelClass(),
|
495 |
+
'amountCashOnDeliveryEurocent' => $parcel->getAmountCashOnDeliveryEurocent(),
|
496 |
+
'includeCashOnDelivery' => 1 == $parcel->getIncludeCashOnDelivery(),
|
497 |
+
'withBulkGoods' => false
|
498 |
+
);
|
499 |
+
}
|
500 |
+
return $parcelData;
|
501 |
+
}
|
502 |
+
|
503 |
+
/**
|
504 |
+
* get parcel receiver data to be sent to Hermes in order to save a new parcel
|
505 |
+
*
|
506 |
+
* @param Netresearch_Hermes_Model_Parcel $parcel
|
507 |
+
* @return array
|
508 |
+
*/
|
509 |
+
protected function getReceiverData($parcel)
|
510 |
+
{
|
511 |
+
$address = array(
|
512 |
+
'firstname' => $parcel->getReceiverFirstname(),
|
513 |
+
'lastname' => $parcel->getReceiverLastname(),
|
514 |
+
'street' => $parcel->getReceiverStreet(),
|
515 |
+
'houseNumber' => $parcel->getReceiverHouseNumber(),
|
516 |
+
'postcode' => $parcel->getReceiverPostcode(),
|
517 |
+
'city' => $parcel->getReceiverCity(),
|
518 |
+
'countryCode' => $parcel->getReceiverCountryCode(),
|
519 |
+
);
|
520 |
+
if (false == is_null($parcel->getReceiverAddressAdd())){
|
521 |
+
$address['addressAdd'] = $parcel->getReceiverAddressAdd();
|
522 |
+
}
|
523 |
+
if (false == is_null($parcel->getReceiverEmail())){
|
524 |
+
$address['email'] = $parcel->getReceiverEmail();
|
525 |
+
}
|
526 |
+
// houseNumber is not set explicitly, use empty string for transmission
|
527 |
+
if (is_null($address['houseNumber'])) {
|
528 |
+
$address['houseNumber'] = '';
|
529 |
+
}
|
530 |
+
return $address;
|
531 |
+
}
|
532 |
+
|
533 |
+
/**
|
534 |
+
* get jpeg label for given parcel
|
535 |
+
*
|
536 |
+
* @param Netresearch_Hermes_Model_Parcel $parcel
|
537 |
+
*
|
538 |
+
* @throws Netresearch_Hermes_Model_Client_Exception
|
539 |
+
* @return Netresearch_Hermes_Model_Client_Response
|
540 |
+
*/
|
541 |
+
public function getLabelJpeg(Netresearch_Hermes_Model_Parcel $parcel)
|
542 |
+
{
|
543 |
+
$this->login();
|
544 |
+
try {
|
545 |
+
$result = $this->getSoapClient($this->userToken, $this->partnerToken)
|
546 |
+
->propsOrderPrintLabelJpeg(array('orderNo' => $parcel->getHermesOrderNo()));
|
547 |
+
$this->logCommunication('PRINT JPEG');
|
548 |
+
// if (false === $parcel->isClosed()) {
|
549 |
+
// $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
550 |
+
// $parcel->save();
|
551 |
+
// }
|
552 |
+
return Mage::getModel('hermes/client_response')
|
553 |
+
->setResult($result->propsOrderPrintLabelJpegReturn->jpegData);
|
554 |
+
} catch (SoapFault $e) {
|
555 |
+
$this->logCommunication('PRINT JPEG', 3, true);
|
556 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
557 |
+
}
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* get pdf label for given parcel
|
562 |
+
*
|
563 |
+
* @param Netresearch_Hermes_Model_Parcel $parcel
|
564 |
+
* @param int $position
|
565 |
+
*
|
566 |
+
* @throws Netresearch_Hermes_Model_Client_Exception
|
567 |
+
* @return Netresearch_Hermes_Model_Client_Response
|
568 |
+
*/
|
569 |
+
public function getLabelPdf(Netresearch_Hermes_Model_Parcel $parcel, $position)
|
570 |
+
{
|
571 |
+
$this->login();
|
572 |
+
try {
|
573 |
+
$result = $this->getSoapClient($this->userToken, $this->partnerToken)
|
574 |
+
->propsOrderPrintLabelPdf(array(
|
575 |
+
'orderNo' => $parcel->getHermesOrderNo(),
|
576 |
+
'printPosition' => $position
|
577 |
+
));
|
578 |
+
$this->logCommunication('PRINT SINGLE PDF');
|
579 |
+
// if (false === $parcel->isClosed()) {
|
580 |
+
// $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
581 |
+
// $parcel->save();
|
582 |
+
// }
|
583 |
+
return Mage::getModel('hermes/client_response')
|
584 |
+
->setResult($result->propsOrderPrintLabelPdfReturn->pdfData);
|
585 |
+
|
586 |
+
} catch (SoapFault $e) {
|
587 |
+
$this->logCommunication('PRINT SINGLE PDF', 3, true);
|
588 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
589 |
+
}
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* get pdf labels for given parcel
|
594 |
+
*
|
595 |
+
* @param string $hermesParcelId
|
596 |
+
* @return Netresearch_Hermes_Model_Client_Response
|
597 |
+
*/
|
598 |
+
public function getLabelsPdf($hermesParcelId)
|
599 |
+
{
|
600 |
+
$this->login();
|
601 |
+
try {
|
602 |
+
$result = $this->getSoapClient($this->userToken, $this->partnerToken)
|
603 |
+
->propsOrdersPrintLabelsPdf(array('orderNo' => $hermesParcelId));
|
604 |
+
$this->logCommunication('PRINT SINGLE PDF');
|
605 |
+
$failedItems = array();
|
606 |
+
$successItems = array();
|
607 |
+
$exceptions = array();
|
608 |
+
foreach ($result->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->orderRes as $orderRes) {
|
609 |
+
if (property_exists($orderRes, 'exceptionItems') && count($orderRes->exceptionItems)) {
|
610 |
+
$failedItems[] = $orderRes->orderNo;
|
611 |
+
$exceptions[$orderRes->orderNo] = $orderRes->exceptionItems;
|
612 |
+
} else {
|
613 |
+
$successItems[] = $orderRes->orderNo;
|
614 |
+
}
|
615 |
+
}
|
616 |
+
return Mage::getModel('hermes/client_response')
|
617 |
+
->setResult($result->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->pdfData)
|
618 |
+
->setSuccessCount(count($successItems))
|
619 |
+
->setSuccessItems($successItems)
|
620 |
+
->setErrorCount(count($failedItems))
|
621 |
+
->setFailedItems($failedItems)
|
622 |
+
->setExceptions($exceptions);
|
623 |
+
} catch (SoapFault $e) {
|
624 |
+
$this->logCommunication('PRINT SINGLE PDF', 3, true);
|
625 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
626 |
+
}
|
627 |
+
}
|
628 |
+
|
629 |
+
/**
|
630 |
+
* cancel parcel
|
631 |
+
*
|
632 |
+
* @param Netresearch_Hermes_Model_Parcel $parcel
|
633 |
+
*
|
634 |
+
* @throws Netresearch_Hermes_Model_Client_Exception
|
635 |
+
* @return boolean Cancellation success
|
636 |
+
*/
|
637 |
+
public function cancel(Netresearch_Hermes_Model_Parcel $parcel)
|
638 |
+
{
|
639 |
+
$this->login();
|
640 |
+
try {
|
641 |
+
$result = $this->getSoapClient($this->userToken, $this->partnerToken)
|
642 |
+
->propsOrderDelete(array('orderNo' => $parcel->getHermesOrderNo()));
|
643 |
+
$this->logCommunication('CANCEL');
|
644 |
+
return $result->propsOrderDeleteReturn;
|
645 |
+
} catch (SoapFault $e) {
|
646 |
+
$this->logCommunication('CANCEL', 3, true);
|
647 |
+
throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
|
648 |
+
}
|
649 |
+
}
|
650 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Client/Exception.php
ADDED
@@ -0,0 +1,70 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes API client exception
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Client_Exception extends Mage_Core_Exception
|
32 |
+
{
|
33 |
+
public static function soapFault(SoapFault $e)
|
34 |
+
{
|
35 |
+
if (isset($e->detail)
|
36 |
+
&& isset($e->detail->ServiceException)
|
37 |
+
&& isset($e->detail->ServiceException->exceptionItems)
|
38 |
+
&& isset($e->detail->ServiceException->exceptionItems->ExceptionItem)
|
39 |
+
&& isset($e->detail->ServiceException->exceptionItems->ExceptionItem->errorCode)
|
40 |
+
&& isset($e->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage)
|
41 |
+
) {
|
42 |
+
return new self(
|
43 |
+
$e->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage,
|
44 |
+
$e->detail->ServiceException->exceptionItems->ExceptionItem->errorCode
|
45 |
+
);
|
46 |
+
}
|
47 |
+
return new self('Unexpected SoapFault (maybe an empty response?)');
|
48 |
+
}
|
49 |
+
|
50 |
+
public static function createSoapFault($errorMessage, $errorCode)
|
51 |
+
{
|
52 |
+
return new NetresearchSoapFault($errorMessage, $errorCode);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
class NetresearchSoapFault extends SoapFault
|
57 |
+
{
|
58 |
+
public $detail;
|
59 |
+
|
60 |
+
public function __construct($errorMessage, $errorCode, $faultcode = 'dummycode', $faultstring = 'dummystring')
|
61 |
+
{
|
62 |
+
parent::__construct($faultcode, $faultstring);
|
63 |
+
$this->detail = new stdClass();
|
64 |
+
$this->detail->ServiceException = new stdClass();
|
65 |
+
$this->detail->ServiceException->exceptionItems = new stdClass();
|
66 |
+
$this->detail->ServiceException->exceptionItems->ExceptionItem = new stdClass();
|
67 |
+
$this->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage = $errorMessage;
|
68 |
+
$this->detail->ServiceException->exceptionItems->ExceptionItem->errorCode = $errorCode;
|
69 |
+
}
|
70 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Client/Response.php
ADDED
@@ -0,0 +1,33 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes client response
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Client_Response extends Mage_Core_Model_Abstract
|
32 |
+
{
|
33 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Client/Soap.php
ADDED
@@ -0,0 +1,47 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes SOAP client
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Client_Soap extends Zend_Soap_Client
|
32 |
+
{
|
33 |
+
protected $response;
|
34 |
+
|
35 |
+
public function __construct()
|
36 |
+
{
|
37 |
+
$config = Mage::getModel('hermes/config');
|
38 |
+
/* @var $config Netresearch_Hermes_Model_Config */
|
39 |
+
|
40 |
+
parent::__construct($config->getWsdl(), array(
|
41 |
+
'encoding' => 'UTF-8',
|
42 |
+
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE,
|
43 |
+
'soap_version' => SOAP_1_1,
|
44 |
+
'features' => SOAP_SINGLE_ELEMENT_ARRAYS
|
45 |
+
));
|
46 |
+
}
|
47 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Config.php
ADDED
@@ -0,0 +1,495 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Configuration for Hermes module
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Config
|
32 |
+
{
|
33 |
+
/*
|
34 |
+
* Product classes
|
35 |
+
*/
|
36 |
+
const PRODUCT_CLASS_EXTRA_SMALL = 'XS';
|
37 |
+
const PRODUCT_CLASS_SMALL = 'S';
|
38 |
+
const PRODUCT_CLASS_MEDIUM = 'M';
|
39 |
+
const PRODUCT_CLASS_LARGE = 'L';
|
40 |
+
const PRODUCT_CLASS_EXTRA_LARGE = 'XL';
|
41 |
+
|
42 |
+
const ORDER_MAX_DAYS_IN_PAST = 90;
|
43 |
+
|
44 |
+
protected $store = null;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @return Mage_Core_Model_Store
|
48 |
+
*/
|
49 |
+
protected function getDefaultStore()
|
50 |
+
{
|
51 |
+
if (null === $this->store) {
|
52 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
53 |
+
}
|
54 |
+
|
55 |
+
return $this->store;
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* if Hermes is enabled at all
|
61 |
+
*
|
62 |
+
* @return boolean
|
63 |
+
*/
|
64 |
+
public function isEnabled()
|
65 |
+
{
|
66 |
+
return (1 == Mage::getStoreConfig('hermes/general/active'));
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* if logging of requests and responses is enabled
|
71 |
+
*
|
72 |
+
* @return boolean
|
73 |
+
*/
|
74 |
+
public function isLoggingEnabled()
|
75 |
+
{
|
76 |
+
return (1 == Mage::getStoreConfig('hermes/general/logging_enabled'));
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* if we are in production mode
|
81 |
+
*
|
82 |
+
* @return boolean
|
83 |
+
*/
|
84 |
+
public function isProductionMode()
|
85 |
+
{
|
86 |
+
return (false === $this->isTestMode());
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* if we are in sandbox mode
|
91 |
+
*
|
92 |
+
* @return boolean
|
93 |
+
*/
|
94 |
+
public function isTestMode()
|
95 |
+
{
|
96 |
+
return (1 == Mage::getStoreConfig('hermes/general/testmode'));
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* get Hermes partner id
|
101 |
+
*
|
102 |
+
* @return string
|
103 |
+
*/
|
104 |
+
public function getPartnerId()
|
105 |
+
{
|
106 |
+
return Mage::getStoreConfig('hermes/account/partner_id');
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* get Hermes partner password
|
111 |
+
*
|
112 |
+
* @return string
|
113 |
+
*/
|
114 |
+
public function getPartnerPwd()
|
115 |
+
{
|
116 |
+
return Mage::getStoreConfig('hermes/account/api_pwd');
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* get Hermes user name
|
121 |
+
*
|
122 |
+
* @return string
|
123 |
+
*/
|
124 |
+
public function getUsername()
|
125 |
+
{
|
126 |
+
return Mage::getStoreConfig('hermes/account/username');
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* get Hermes user password
|
131 |
+
*
|
132 |
+
* @return string
|
133 |
+
*/
|
134 |
+
public function getPassword()
|
135 |
+
{
|
136 |
+
return Mage::getStoreConfig('hermes/account/password');
|
137 |
+
}
|
138 |
+
|
139 |
+
|
140 |
+
/**
|
141 |
+
* get wsdl for API requests
|
142 |
+
*
|
143 |
+
* @return string wsdl path
|
144 |
+
*/
|
145 |
+
public function getWsdl()
|
146 |
+
{
|
147 |
+
return Mage::getBaseDir('base') . '/' . Mage::getStoreConfig(
|
148 |
+
$this->isTestMode() ? 'hermes/test/wsdl' : 'hermes/prod/wsdl'
|
149 |
+
);
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* get disabled shipping methods
|
154 |
+
*
|
155 |
+
* @param int $storeId
|
156 |
+
*
|
157 |
+
* @return string
|
158 |
+
*/
|
159 |
+
public function getDisabledShippingMethods($storeId = 0)
|
160 |
+
{
|
161 |
+
return Mage::getStoreConfig('hermes/shipment_options/disabled_shipping_methods', $storeId);
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* get payment methods for COD
|
166 |
+
*
|
167 |
+
* @param int $storeId
|
168 |
+
*
|
169 |
+
* @return string
|
170 |
+
*/
|
171 |
+
public function getPaymentMethodsForCod($storeId = 0)
|
172 |
+
{
|
173 |
+
return Mage::getStoreConfig('hermes/shipment_options/cod_payment_methods', $storeId);
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Get the user's products as stored in config
|
178 |
+
* @return array
|
179 |
+
*/
|
180 |
+
public function getListOfProductsProducts()
|
181 |
+
{
|
182 |
+
return Zend_Json::decode(Mage::getStoreConfig('hermes/api_data/props_list_of_products_atg/products'));
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Get additional data (other than products) as stored in config
|
187 |
+
* @param string $key
|
188 |
+
*/
|
189 |
+
public function getListOfProductsData($key)
|
190 |
+
{
|
191 |
+
$known_keys = array(
|
192 |
+
'number_of_products','dated','label_acceptance_terms_and_conditions',
|
193 |
+
'label_acceptance_liability_limit','url_terms_and_conditions',
|
194 |
+
'net_price_cash_on_delivery_eurocent','settlement_type',
|
195 |
+
'url_hermes_logogram','url_liability_informations',
|
196 |
+
'url_packaging_guidelines','url_portal_b2c','vat_info'
|
197 |
+
);
|
198 |
+
|
199 |
+
if (!in_array($key, $known_keys)) {
|
200 |
+
throw new InvalidArgumentException("'$key' is not a known config key");
|
201 |
+
}
|
202 |
+
|
203 |
+
return Mage::getStoreConfig("hermes/api_data/props_list_of_products_atg/$key");
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Store the user products as queried from api
|
208 |
+
* @param array $userProducts
|
209 |
+
*/
|
210 |
+
public function setListOfProductsProducts(array $userProducts)
|
211 |
+
{
|
212 |
+
$path = 'hermes/api_data/props_list_of_products_atg/products';
|
213 |
+
$value = Zend_Json::encode($userProducts);
|
214 |
+
$this->getDefaultStore()->setConfig($path, $value);
|
215 |
+
Mage::getConfig()->saveConfig($path, $value);
|
216 |
+
return $this;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Set additional data (other than products) as queried from api
|
221 |
+
* @param string $key
|
222 |
+
* @param string $value
|
223 |
+
*/
|
224 |
+
public function setListOfProductsData($key, $value)
|
225 |
+
{
|
226 |
+
$known_keys = array(
|
227 |
+
'number_of_products','dated','label_acceptance_terms_and_conditions',
|
228 |
+
'label_acceptance_liability_limit','url_terms_and_conditions',
|
229 |
+
'net_price_cash_on_delivery_eurocent','settlement_type',
|
230 |
+
'url_hermes_logogram','url_liability_informations',
|
231 |
+
'url_packaging_guidelines','url_portal_b2c','vat_info'
|
232 |
+
);
|
233 |
+
|
234 |
+
if (!in_array($key, $known_keys)) {
|
235 |
+
throw new InvalidArgumentException("'$key' is not a known config key");
|
236 |
+
}
|
237 |
+
|
238 |
+
if (false == is_null($value)) {
|
239 |
+
$path = 'hermes/api_data/props_list_of_products_atg/' . $key;
|
240 |
+
$this->getDefaultStore()->setConfig($path, $value);
|
241 |
+
Mage::getConfig()->saveConfig($path, $value);
|
242 |
+
}
|
243 |
+
return $this;
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Check if shipping method is disabled
|
248 |
+
*
|
249 |
+
* @param string $shippingCode
|
250 |
+
* @return boolean
|
251 |
+
*/
|
252 |
+
public function isAllowedShippingMethod($shippingCode, $storeId = 0)
|
253 |
+
{
|
254 |
+
$disabledShippingMethods = explode(",", $this->getDisabledShippingMethods($storeId));
|
255 |
+
return !in_array(
|
256 |
+
$shippingCode,
|
257 |
+
$disabledShippingMethods);
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Check if it a payment method for COD
|
262 |
+
*
|
263 |
+
* @param string $paymentMethodCode
|
264 |
+
* @return boolean
|
265 |
+
*/
|
266 |
+
public function isPaymentMethodForCod($paymentMethodCode, $storeId = 0)
|
267 |
+
{
|
268 |
+
$codPaymentMethods = explode(",", $this->getPaymentMethodsForCod($storeId));
|
269 |
+
return in_array(
|
270 |
+
$paymentMethodCode,
|
271 |
+
$codPaymentMethods);
|
272 |
+
}
|
273 |
+
|
274 |
+
/**
|
275 |
+
* get all available product classes
|
276 |
+
*
|
277 |
+
* @return array
|
278 |
+
*/
|
279 |
+
public function getAllProductClasses()
|
280 |
+
{
|
281 |
+
return array(
|
282 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
|
283 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
|
284 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
|
285 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
|
286 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
|
287 |
+
);
|
288 |
+
}
|
289 |
+
|
290 |
+
|
291 |
+
/**
|
292 |
+
* return key => $value array of product classes
|
293 |
+
* @return array
|
294 |
+
*/
|
295 |
+
public function getAllProductClassesasKeyValue()
|
296 |
+
{
|
297 |
+
$productClasses = array();
|
298 |
+
foreach ($this->getAllProductClasses() as $productClass) {
|
299 |
+
$productClasses[$productClass] = $productClass;
|
300 |
+
}
|
301 |
+
return $productClasses;
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* get all allowed shipping countries
|
306 |
+
*
|
307 |
+
* @return array
|
308 |
+
*/
|
309 |
+
public function getAllowedCountries()
|
310 |
+
{
|
311 |
+
return explode(",", Mage::getStoreConfig("hermes/general/allowed_countries"));
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* get all allowed shipping countries for COD
|
316 |
+
*
|
317 |
+
* @return array
|
318 |
+
*/
|
319 |
+
public function getAllowedCodCountries()
|
320 |
+
{
|
321 |
+
return explode(",", Mage::getStoreConfig("hermes/general/allowed_cod_countries"));
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Check if it is an allowed country
|
326 |
+
*
|
327 |
+
* @param string $paymentMethodCode
|
328 |
+
* @return boolean
|
329 |
+
*/
|
330 |
+
public function isAllowedCountry($iso3CountryCode)
|
331 |
+
{
|
332 |
+
return in_array(
|
333 |
+
$iso3CountryCode,
|
334 |
+
$this->getAllowedCountries());
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Check if it is an allowed country for COD
|
339 |
+
*
|
340 |
+
* @param string $paymentMethodCode
|
341 |
+
* @return boolean
|
342 |
+
*/
|
343 |
+
public function isAllowedCodCountry($iso3CountryCode)
|
344 |
+
{
|
345 |
+
return in_array(
|
346 |
+
$iso3CountryCode,
|
347 |
+
$this->getAllowedCodCountries());
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Check if merchant is accounted by "Staffelpreis" / "Tiered prices"
|
352 |
+
*
|
353 |
+
* @return boolean
|
354 |
+
*/
|
355 |
+
public function isTieredPriceMerchant()
|
356 |
+
{
|
357 |
+
return ("Abrechnung zum Staffelpreis"
|
358 |
+
== $this->getListOfProductsData("settlement_type"));
|
359 |
+
}
|
360 |
+
|
361 |
+
/**
|
362 |
+
* Check if merchant is accounted by "Durchschnittspreis" / "Flatrate"
|
363 |
+
*
|
364 |
+
* @return boolean
|
365 |
+
*/
|
366 |
+
public function isFlatrateMerchant()
|
367 |
+
{
|
368 |
+
return (false === $this->isTieredPriceMerchant());
|
369 |
+
}
|
370 |
+
|
371 |
+
/**
|
372 |
+
*
|
373 |
+
* @return boolean
|
374 |
+
*/
|
375 |
+
public function isHermesMailEnabled()
|
376 |
+
{
|
377 |
+
return (1 == Mage::getStoreConfig('hermes/shipment_options/hermes_mail'));
|
378 |
+
}
|
379 |
+
|
380 |
+
/**
|
381 |
+
*
|
382 |
+
* @return boolean
|
383 |
+
*/
|
384 |
+
public function isPdfEnabled()
|
385 |
+
{
|
386 |
+
$labelOptions = explode(',',Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option'));
|
387 |
+
return (!in_array('', $labelOptions) && in_array('pdf', $labelOptions));
|
388 |
+
}
|
389 |
+
|
390 |
+
/**
|
391 |
+
*
|
392 |
+
* @return boolean
|
393 |
+
*/
|
394 |
+
public function isJpegEnabled()
|
395 |
+
{
|
396 |
+
$labelOptions = explode(',',Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option'));
|
397 |
+
return (!in_array('', $labelOptions) && in_array('jpeg', $labelOptions));
|
398 |
+
}
|
399 |
+
|
400 |
+
/**
|
401 |
+
*
|
402 |
+
* @return boolean
|
403 |
+
*/
|
404 |
+
public function getPdfLabelPosition()
|
405 |
+
{
|
406 |
+
return Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option_pdf');
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* get tracking link (pattern or for given parcel
|
411 |
+
*
|
412 |
+
* @param Netresearch_Hermes_Model_Parcel|string $parcel_or_orderNo Parcel or hermesOrderNo
|
413 |
+
* @return string|null Tracking Url, NULL if hermesOrderNo of given parcel is empty
|
414 |
+
*/
|
415 |
+
public function getTrackingUrl($parcel_or_orderNo=null)
|
416 |
+
{
|
417 |
+
$link = Mage::getStoreConfig('hermes/tracking/url');
|
418 |
+
if ($parcel_or_orderNo instanceof Netresearch_Hermes_Model_Parcel) {
|
419 |
+
if (0 < strlen($parcel_or_orderNo->getHermesOrderNo())) {
|
420 |
+
$parcel_or_orderNo = $parcel_or_orderNo->getHermesOrderNo();
|
421 |
+
} else {
|
422 |
+
return null;
|
423 |
+
}
|
424 |
+
}
|
425 |
+
if (is_string($parcel_or_orderNo) && 0 < strlen($parcel_or_orderNo)) {
|
426 |
+
$link = str_replace('%orderNo%', $parcel_or_orderNo, $link);
|
427 |
+
}
|
428 |
+
return $link;
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* if an email should be sent after tracking link creation
|
433 |
+
*
|
434 |
+
* @return boolean
|
435 |
+
*/
|
436 |
+
public function isTrackingLinkMailEnabled()
|
437 |
+
{
|
438 |
+
return 1 == Mage::getStoreConfig('hermes/email_options/send_email_tracking_link');
|
439 |
+
}
|
440 |
+
|
441 |
+
/**
|
442 |
+
* get support mail address
|
443 |
+
*
|
444 |
+
* @return string
|
445 |
+
*/
|
446 |
+
public function getSupportMail()
|
447 |
+
{
|
448 |
+
return Mage::getStoreConfig('hermes/info/support_mail');
|
449 |
+
}
|
450 |
+
|
451 |
+
/**
|
452 |
+
* if autocreation mode is active
|
453 |
+
*
|
454 |
+
* @return array
|
455 |
+
*/
|
456 |
+
public function isAutocreateEnabled()
|
457 |
+
{
|
458 |
+
return 1 == Mage::getStoreConfig('hermes/autocreate/enabled');
|
459 |
+
}
|
460 |
+
|
461 |
+
/**
|
462 |
+
* get order statuses being enabled for automatic shipment creation and Hermes parcel transmission
|
463 |
+
*
|
464 |
+
* @return array
|
465 |
+
*/
|
466 |
+
public function getAutocreateOrderStatuses()
|
467 |
+
{
|
468 |
+
return explode(',', Mage::getStoreConfig('hermes/autocreate/order_status'));
|
469 |
+
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* get payment methods being enabled for automatic shipment creation and Hermes parcel transmission
|
473 |
+
*
|
474 |
+
* @return array
|
475 |
+
*/
|
476 |
+
public function getAutocreatePaymentMethods()
|
477 |
+
{
|
478 |
+
return explode(',', Mage::getStoreConfig('hermes/autocreate/payment_methods'));
|
479 |
+
}
|
480 |
+
|
481 |
+
public function getInstallationDate()
|
482 |
+
{
|
483 |
+
return Mage::getStoreConfig('hermes/general/installation_date');
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
* get the maximum allowed days in past for created at in the past
|
488 |
+
*
|
489 |
+
* @return int
|
490 |
+
*/
|
491 |
+
public function getMaxDaysInPast()
|
492 |
+
{
|
493 |
+
return self::ORDER_MAX_DAYS_IN_PAST;
|
494 |
+
}
|
495 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Config/Exception.php
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
<?php
|
app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel.php
ADDED
@@ -0,0 +1,39 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Netresearch_Hermes_Model_Mysql4_Parcel
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Mysql4_Parcel extends Mage_Core_Model_Mysql4_Abstract
|
32 |
+
{
|
33 |
+
protected function _construct()
|
34 |
+
{
|
35 |
+
$this->_init('hermes/parcel', 'id');
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel/Collection.php
ADDED
@@ -0,0 +1,38 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Netresearch_Hermes_Model_Mysql4_Parcel_Collection
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Mysql4_Parcel_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
32 |
+
{
|
33 |
+
protected function _construct()
|
34 |
+
{
|
35 |
+
$this->_init('hermes/parcel');
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Observer.php
ADDED
@@ -0,0 +1,452 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Model_Observer
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Netresearch_Hermes_Model_Config
|
7 |
+
*/
|
8 |
+
protected $config;
|
9 |
+
|
10 |
+
public function __construct()
|
11 |
+
{
|
12 |
+
$this->config = Mage::getModel('hermes/config');
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Perform automatic mode
|
17 |
+
*
|
18 |
+
* @param Varien_Event_Observer $observer
|
19 |
+
*
|
20 |
+
* @return null
|
21 |
+
*/
|
22 |
+
protected function saveHermesShipmentDataAutoMode($observer)
|
23 |
+
{
|
24 |
+
return null;
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Perform manual mode
|
29 |
+
*
|
30 |
+
* @param Varien_Event_Observer $observer
|
31 |
+
* @param array $data request data
|
32 |
+
*
|
33 |
+
* @return Netresearch_Hermes_Model_Parcel The parcel object or false if hermes shipping is not applicable
|
34 |
+
*/
|
35 |
+
protected function saveHermesShipmentDataManualMode($observer, array $data)
|
36 |
+
{
|
37 |
+
if (false === array_key_exists('ship_with_hermes', $data) || '0' === $data['ship_with_hermes']) {
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
|
41 |
+
$shipment = $observer->getShipment();
|
42 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
43 |
+
$order = $shipment->getOrder();
|
44 |
+
|
45 |
+
$parcelClass = null;
|
46 |
+
if (isset($data['parcel_class']) &&
|
47 |
+
in_array($data['parcel_class'], $this->config->getAllProductClasses())
|
48 |
+
) {
|
49 |
+
$parcelClass = $data['parcel_class'];
|
50 |
+
}
|
51 |
+
|
52 |
+
/** @var Netresearch_Hermes_Model_Parcel $parcel */
|
53 |
+
$parcel = Mage::getModel('hermes/parcel')->load($shipment->getId(), 'shipment_id');
|
54 |
+
|
55 |
+
if (!$parcel || !$parcel->getId()) {
|
56 |
+
return Mage::helper('hermes/order')->createParcel($shipment, $parcelClass);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Update list of products as scheduled in cron
|
62 |
+
*
|
63 |
+
* @param Varien_Event_Observer $observer
|
64 |
+
*
|
65 |
+
* @return Netresearch_Hermes_Model_Client
|
66 |
+
*/
|
67 |
+
public function updateListOfProducts($observer)
|
68 |
+
{
|
69 |
+
$client = Mage::getModel('hermes/client');
|
70 |
+
/* @var $client Netresearch_Hermes_Model_Client */
|
71 |
+
|
72 |
+
return $client->updateListOfProducts();
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Read data stored with shipment and persist hermes specific data
|
77 |
+
*
|
78 |
+
* @event sales_order_shipment_save_after
|
79 |
+
*
|
80 |
+
* @param Varien_Event_Observer $observer
|
81 |
+
*
|
82 |
+
* @return Netresearch_Hermes_Model_Parcel if save is successful, false otherwise
|
83 |
+
*/
|
84 |
+
public function saveHermesShipmentData($observer)
|
85 |
+
{
|
86 |
+
if (!$this->config->isEnabled()) {
|
87 |
+
return false;
|
88 |
+
}
|
89 |
+
|
90 |
+
if (!$this->config->isAllowedShippingMethod($observer->getShipment()->getOrder()->getShippingMethod())) {
|
91 |
+
return false;
|
92 |
+
}
|
93 |
+
|
94 |
+
$data = Mage::app()->getRequest()->getPost();
|
95 |
+
if (empty($data)) {
|
96 |
+
return $this->saveHermesShipmentDataAutoMode($observer);
|
97 |
+
} else {
|
98 |
+
return $this->saveHermesShipmentDataManualMode($observer, $data);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* get ids of parcels to be submitted
|
104 |
+
*
|
105 |
+
* @return array
|
106 |
+
*/
|
107 |
+
public function getParcelIdsToSubmit()
|
108 |
+
{
|
109 |
+
return array_merge(
|
110 |
+
Mage::getModel('hermes/parcel')->getCollection()
|
111 |
+
->addFieldToFilter('status_code', 0)
|
112 |
+
->getAllIds(),
|
113 |
+
Mage::getModel('hermes/parcel')->getCollection()
|
114 |
+
->addFieldToFilter('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED)
|
115 |
+
->getAllIds(),
|
116 |
+
Mage::getModel('hermes/parcel')->getCollection()
|
117 |
+
->addFieldToFilter('status_code', array('null' => true))
|
118 |
+
->getAllIds()
|
119 |
+
);
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* transmit parcels to Hermes
|
124 |
+
*
|
125 |
+
* @param Varien_Event_Observer $observer
|
126 |
+
*
|
127 |
+
* @return array Result of parcel transmission
|
128 |
+
* @throws Netresearch_Hermes_Model_Client_Exception
|
129 |
+
*/
|
130 |
+
public function transmitParcels($observer)
|
131 |
+
{
|
132 |
+
$parcelIds = $this->getParcelIdsToSubmit();
|
133 |
+
$chunkedParcelIds = array_chunk($parcelIds, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT);
|
134 |
+
$errorCount = 0;
|
135 |
+
|
136 |
+
foreach ($chunkedParcelIds as $currentParcelIds) {
|
137 |
+
$results = Mage::getModel('hermes/client')->sendParcels($currentParcelIds);
|
138 |
+
|
139 |
+
if (!$results
|
140 |
+
|| !$results->propsImportOrdersReturn
|
141 |
+
|| !$results->propsImportOrdersReturn->orderResponses
|
142 |
+
|| !$results->propsImportOrdersReturn->orderResponses->OrderResponse
|
143 |
+
|| count($currentParcelIds) != count($results->propsImportOrdersReturn->orderResponses->OrderResponse)
|
144 |
+
) {
|
145 |
+
throw new Netresearch_Hermes_Model_Client_Exception('Got invalid response from Hermes web service');
|
146 |
+
}
|
147 |
+
$results = $results->propsImportOrdersReturn->orderResponses->OrderResponse;
|
148 |
+
foreach ($currentParcelIds as $offset => $parcelId) {
|
149 |
+
/** @var Netresearch_Hermes_Model_Parcel $parcel */
|
150 |
+
$parcel = Mage::getModel('hermes/parcel')->load($parcelId);
|
151 |
+
$result = $results[$offset];
|
152 |
+
$parcel->setHermesOrderNo($result->orderNo);
|
153 |
+
$parcel->setErrorCode(null);
|
154 |
+
$parcel->setErrorMessage(null);
|
155 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
156 |
+
$comment = Mage::helper('hermes')->__('Successfully transmitted to Hermes') . ' [' . $result->orderNo . ']';
|
157 |
+
if (property_exists($result, 'exceptionItems')
|
158 |
+
&& is_object($result->exceptionItems)
|
159 |
+
&& property_exists($result->exceptionItems, 'ExceptionItem')
|
160 |
+
) {
|
161 |
+
$errorCodes = array();
|
162 |
+
$errorMessages = array();
|
163 |
+
foreach ($result->exceptionItems->ExceptionItem as $exception) {
|
164 |
+
$errorCodes[] = $exception->errorCode;
|
165 |
+
$errorMessages[] = $exception->errorMessage;
|
166 |
+
}
|
167 |
+
if (count($errorCodes) || count($errorMessages)) {
|
168 |
+
$parcel->setErrorCodes($errorCodes);
|
169 |
+
$parcel->setErrorMessages($errorMessages);
|
170 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
|
171 |
+
$errorCount++;
|
172 |
+
$comment = Mage::helper('hermes')->__(
|
173 |
+
1 == count($errorMessages)
|
174 |
+
? 'An error occured during transmission to Hermes' : 'Some errors occured during transmission to Hermes'
|
175 |
+
);
|
176 |
+
$comment = '<span class="error">' . $comment . ':</span><br />' . implode('<br />', $errorMessages);
|
177 |
+
}
|
178 |
+
}
|
179 |
+
$parcel->save();
|
180 |
+
|
181 |
+
$parcel->addTrack();
|
182 |
+
|
183 |
+
$parcel->getShipment()->addComment('HERMES::' . $comment);
|
184 |
+
$parcel->getShipment()->getCommentsCollection()->save();
|
185 |
+
}
|
186 |
+
}
|
187 |
+
return array('parcels' => count($parcelIds), 'errors' => $errorCount);
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* fetching orders and creating shipments and hermes parcels
|
192 |
+
*
|
193 |
+
* @return array
|
194 |
+
*/
|
195 |
+
public function createParcelsForHermes($observer)
|
196 |
+
{
|
197 |
+
$result = array();
|
198 |
+
if (Mage::getModel('hermes/config')->isAutocreateEnabled()) {
|
199 |
+
$orderHelper = Mage::helper('hermes/order');
|
200 |
+
$orders = $orderHelper->getOrderCollection();
|
201 |
+
$result = $orderHelper->shipOrders($orders);
|
202 |
+
}
|
203 |
+
return $result;
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Throws exception if enterted data was not valid
|
208 |
+
*
|
209 |
+
* @event sales_order_shipment_save_before
|
210 |
+
*
|
211 |
+
* @param Varien_Event_Observer $observer
|
212 |
+
*/
|
213 |
+
public function checkShipment($observer)
|
214 |
+
{
|
215 |
+
$data = Mage::app()->getRequest()->getPost();
|
216 |
+
$shipment = $observer->getShipment();
|
217 |
+
//Check if shipping method is disabled
|
218 |
+
if (array_key_exists('ship_with_hermes', $data) && $data['ship_with_hermes'] == 1) {
|
219 |
+
if (false === Mage::getModel('hermes/config')->isAllowedShippingMethod(
|
220 |
+
$shipment->getOrder()->getShippingMethod())
|
221 |
+
) {
|
222 |
+
return;
|
223 |
+
}
|
224 |
+
// Return false if payment method is COD and partial shipment
|
225 |
+
if (true === Mage::getModel('hermes/config')->isEnabled() &&
|
226 |
+
true === Mage::helper('hermes/order')->isPartialShipment($shipment)
|
227 |
+
) {
|
228 |
+
$this->_setValidationFailure(Mage::helper('hermes')->__(
|
229 |
+
'Partial shipment is not allowed for cash on delivery shipments which should be shipped with Hermes.'));
|
230 |
+
}
|
231 |
+
}
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
*
|
236 |
+
*
|
237 |
+
* @param string $errorMessage
|
238 |
+
*/
|
239 |
+
protected function _setValidationFailure($errorMessage)
|
240 |
+
{
|
241 |
+
$this->_validationFails = true;
|
242 |
+
/* @var $messageCollection Mage_Core_Model_Message_Collection */
|
243 |
+
$messageCollection = Mage::getSingleton('adminhtml/session')
|
244 |
+
->getMessages();
|
245 |
+
$messages = $messageCollection->getItemsByType(Mage_Core_Model_Message::SUCCESS);
|
246 |
+
/* @var $message Mage_Core_Model_Message_Abstract */
|
247 |
+
foreach ($messages as $message) {
|
248 |
+
$messageCollection->deleteMessageByIdentifier($message->getIdentifier());
|
249 |
+
}
|
250 |
+
Mage::throwException($errorMessage);
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* Adds the Hermes parcel form to shipment creation
|
255 |
+
*
|
256 |
+
* @event core_block_abstract_to_html_after
|
257 |
+
*
|
258 |
+
* @param Varien_Event_Observer $observer
|
259 |
+
*
|
260 |
+
* @return Netresearch_Hermes_Model_Observer
|
261 |
+
*/
|
262 |
+
public function addShipmentCreationForm(Varien_Event_Observer $observer)
|
263 |
+
{
|
264 |
+
/** @var Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking $block */
|
265 |
+
$block = $observer->getBlock();
|
266 |
+
/** @var Varien_Object $transport */
|
267 |
+
$transport = $observer->getTransport();
|
268 |
+
|
269 |
+
if ($this->config->isEnabled()
|
270 |
+
&& $block instanceof Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking
|
271 |
+
) {
|
272 |
+
/** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes $hermesForm */
|
273 |
+
$hermesForm = $block->getLayout()->createBlock(
|
274 |
+
'hermes/adminhtml_sales_order_shipment_create_hermes',
|
275 |
+
'hermes_form', array('template' => 'hermes/sales/order/shipment/create/hermes.phtml'));
|
276 |
+
$formHtml = $hermesForm->renderView();
|
277 |
+
|
278 |
+
$html = $transport->getHtml() . $formHtml;
|
279 |
+
$transport->setHtml($html);
|
280 |
+
}
|
281 |
+
|
282 |
+
return $this;
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Adds the Hermes parcel form to shipment view
|
287 |
+
*
|
288 |
+
* @event core_block_abstract_to_html_after
|
289 |
+
*
|
290 |
+
* @param Varien_Event_Observer $observer
|
291 |
+
*
|
292 |
+
* @return Netresearch_Hermes_Model_Observer
|
293 |
+
*/
|
294 |
+
public function addShipmentViewInfo(Varien_Event_Observer $observer)
|
295 |
+
{
|
296 |
+
/** @var Mage_Adminhtml_Block_Sales_Order_Shipment_View_Tracking $block */
|
297 |
+
$block = $observer->getBlock();
|
298 |
+
/** @var Varien_Object $transport */
|
299 |
+
$transport = $observer->getTransport();
|
300 |
+
|
301 |
+
if ($this->config->isEnabled()
|
302 |
+
&& $block instanceof Mage_Adminhtml_Block_Sales_Order_Shipment_View_Tracking
|
303 |
+
) {
|
304 |
+
/** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes $hermesForm */
|
305 |
+
$hermesForm = $block->getLayout()->createBlock(
|
306 |
+
'hermes/adminhtml_sales_order_shipment_create_hermes',
|
307 |
+
'hermes_view', array('template' => 'hermes/sales/order/shipment/view/hermes.phtml'));
|
308 |
+
$formHtml = $hermesForm->renderView();
|
309 |
+
|
310 |
+
$html = $transport->getHtml() . $formHtml;
|
311 |
+
$transport->setHtml($html);
|
312 |
+
}
|
313 |
+
|
314 |
+
return $this;
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Adds the Hermes mass action to the sales order grid
|
319 |
+
*
|
320 |
+
* @event adminhtml_block_html_before
|
321 |
+
*
|
322 |
+
* @param Varien_Event_Observer $observer
|
323 |
+
*
|
324 |
+
* @return Netresearch_Hermes_Model_Observer
|
325 |
+
*/
|
326 |
+
public function addOrderGridMassActionAndIcon(Varien_Event_Observer $observer)
|
327 |
+
{
|
328 |
+
/** @var Mage_Adminhtml_Block_Sales_Order_Grid $block */
|
329 |
+
$block = $observer->getBlock();
|
330 |
+
if ($this->config->isEnabled()
|
331 |
+
&& $block instanceof Mage_Adminhtml_Block_Sales_Order_Grid
|
332 |
+
&& Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments')
|
333 |
+
) {
|
334 |
+
/* provide parcel class selection for tier price merchants */
|
335 |
+
if ($this->config->isTieredPriceMerchant()) {
|
336 |
+
$parcelClasses = $this->config->getAllProductClassesasKeyValue();
|
337 |
+
array_unshift($parcelClasses, array('value' => '', 'label' => Mage::helper('hermes')->__('use default')));
|
338 |
+
$additionalOptions = array(
|
339 |
+
'parcelClass' => array(
|
340 |
+
'name' => 'parcelClass',
|
341 |
+
'type' => 'select',
|
342 |
+
'label' => Mage::helper('hermes')->__('Parcel class'),
|
343 |
+
'values' => $parcelClasses
|
344 |
+
)
|
345 |
+
);
|
346 |
+
} else {
|
347 |
+
$additionalOptions = array();
|
348 |
+
}
|
349 |
+
/* add checkbox to notify customer */
|
350 |
+
$additionalOptions['notifyCustomer'] = array(
|
351 |
+
'name' => 'notifyCustomer',
|
352 |
+
'type' => 'checkbox',
|
353 |
+
'label' => Mage::helper('hermes')->__('Notify Customer by Email'),
|
354 |
+
);
|
355 |
+
|
356 |
+
$block->getMassactionBlock()->addItem('create_hermes_shipments', array(
|
357 |
+
'label' => Mage::helper('hermes')->__('Create shipment(s) for Hermes'),
|
358 |
+
'url' => $block->getUrl('adminhtml/shipment/createShipments'),
|
359 |
+
'additional' => $additionalOptions
|
360 |
+
));
|
361 |
+
|
362 |
+
/* Add frame callback to column, so we can add our icon html rather unobstrusive */
|
363 |
+
$column = $block->getColumn('real_order_id');
|
364 |
+
$column->setFrameCallback(array($this, 'renderHermesIcon'));
|
365 |
+
$block->addColumn('real_order_id', $column->toArray());
|
366 |
+
}
|
367 |
+
|
368 |
+
return $this;
|
369 |
+
}
|
370 |
+
|
371 |
+
/**
|
372 |
+
* Frame callback added to the real_order_id column in the sales_order_grid
|
373 |
+
*
|
374 |
+
* @param string $renderedValue
|
375 |
+
* @param Mage_Sales_Model_Order $row
|
376 |
+
* @param Mage_Adminhtml_Block_Widget_Grid_Column $column
|
377 |
+
* @param boolean $isExport
|
378 |
+
*
|
379 |
+
* @return string
|
380 |
+
*/
|
381 |
+
public function renderHermesIcon($renderedValue, $row, $column, $isExport)
|
382 |
+
{
|
383 |
+
if ($isExport === false
|
384 |
+
&& $column->getId() === 'real_order_id'
|
385 |
+
) {
|
386 |
+
/** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon $renderer */
|
387 |
+
$renderer = Mage::getBlockSingleton('hermes/adminhtml_sales_order_grid_renderer_icon');
|
388 |
+
$renderedValue = $renderedValue . $renderer->getHermesStatusOutput($row);
|
389 |
+
}
|
390 |
+
return $renderedValue;
|
391 |
+
}
|
392 |
+
|
393 |
+
/**
|
394 |
+
* Adds the Hermes mass action to the sales shipment grid
|
395 |
+
*
|
396 |
+
* @event adminhtml_block_html_before
|
397 |
+
*
|
398 |
+
* @param Varien_Event_Observer $observer
|
399 |
+
*
|
400 |
+
* @return Netresearch_Hermes_Model_Observer $this
|
401 |
+
*/
|
402 |
+
public function addShipmentGridMassActionAndColumns(Varien_Event_Observer $observer)
|
403 |
+
{
|
404 |
+
/** @var Mage_Adminhtml_Block_Sales_Shipment_Grid $block */
|
405 |
+
$block = $observer->getBlock();
|
406 |
+
if ($this->config->isEnabled()
|
407 |
+
&& $block instanceof Mage_Adminhtml_Block_Sales_Shipment_Grid
|
408 |
+
&& Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments')
|
409 |
+
) {
|
410 |
+
$block->getMassactionBlock()->addItem('cancelHermesParcels', array(
|
411 |
+
'label' => Mage::helper('hermes')->__('Cancel Hermes shipments'),
|
412 |
+
'url' => $block->getUrl('adminhtml/parcel/massCancel'),
|
413 |
+
)
|
414 |
+
);
|
415 |
+
|
416 |
+
$logo = '<img src="' . $block->getSkinUrl('images/hermes/logo_small.png') .
|
417 |
+
'" alt="Hermes" title="Hermes" height="12" align="top" id="hermes_logo_small" />';
|
418 |
+
|
419 |
+
$block->addColumn('status_code', array(
|
420 |
+
'header' => $logo . Mage::helper('hermes')->__('Hermes Status'),
|
421 |
+
'index' => 'status_code',
|
422 |
+
'type' => 'options',
|
423 |
+
'options' => Mage::getSingleton('hermes/parcel')->getStatusCodes(),
|
424 |
+
'sortable' => true,
|
425 |
+
'is_system' => false,
|
426 |
+
));
|
427 |
+
|
428 |
+
}
|
429 |
+
return $this;
|
430 |
+
}
|
431 |
+
|
432 |
+
/**
|
433 |
+
* Adds join for the hermes parcel table to the shipment grid collection,
|
434 |
+
* so the data is available for the custom columns
|
435 |
+
*
|
436 |
+
* @event sales_order_shipment_grid_collection_load_before
|
437 |
+
*
|
438 |
+
* @param Varien_Event_Observer $observer
|
439 |
+
*
|
440 |
+
* @return Netresearch_Hermes_Model_Observer $this
|
441 |
+
*/
|
442 |
+
public function addParcelsToShipmentGridCollection(Varien_Event_Observer $observer)
|
443 |
+
{
|
444 |
+
/** @var Mage_Sales_Model_Resource_Order_Shipment_Grid_Collection $collection */
|
445 |
+
$collection = $observer->getOrderShipmentGridCollection();
|
446 |
+
$collection->getSelect()->joinLeft(
|
447 |
+
array('hermes' => $collection->getTable('hermes/parcel')),
|
448 |
+
'entity_id=hermes.shipment_id'
|
449 |
+
);
|
450 |
+
return $this;
|
451 |
+
}
|
452 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Parcel.php
ADDED
@@ -0,0 +1,527 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Netresearch_Hermes_Model_Parcel
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
29 |
+
* @author Christoph Aßmann <christoph.assmann@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_Parcel extends Mage_Core_Model_Abstract
|
32 |
+
{
|
33 |
+
/** @var integer Parcel in queue. The code means marked as new. */
|
34 |
+
const STATUS_QUEUED = 1;
|
35 |
+
|
36 |
+
/** @var integer Parcel successfully created */
|
37 |
+
const STATUS_PROCESSED = 2;
|
38 |
+
|
39 |
+
/** @var integer Parcel in queue to be canceled */
|
40 |
+
const STATUS_CANCEL_QUEUED = 3;
|
41 |
+
|
42 |
+
/** @var integer Parcel canceled */
|
43 |
+
const STATUS_CANCELED = 4;
|
44 |
+
|
45 |
+
/** @var integer Parcel creation failed on Hermes web service */
|
46 |
+
const STATUS_NEW_FAILED = -2;
|
47 |
+
|
48 |
+
/** @var integer Parcel cancellation failed */
|
49 |
+
const STATUS_CANCEL_FAILED = -4;
|
50 |
+
|
51 |
+
/** @var integer Parcel transmission is done and can't be changed anymore (because label was printed) */
|
52 |
+
const STATUS_CLOSED = 5;
|
53 |
+
|
54 |
+
/** @var integer Parcel currenctly transmitted */
|
55 |
+
const STATUS_IN_TRANSMISSION = 20;
|
56 |
+
|
57 |
+
protected $shipment;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Constructor
|
61 |
+
*
|
62 |
+
* @see lib/Varien/Varien_Object#_construct()
|
63 |
+
* @return Netresearch_Hermes_Model_Parcel
|
64 |
+
*/
|
65 |
+
protected function _construct()
|
66 |
+
{
|
67 |
+
$this->_init('hermes/parcel');
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* get associated shipment
|
72 |
+
*
|
73 |
+
* @return Mage_Sales_Model_Shipment
|
74 |
+
*/
|
75 |
+
public function getShipment()
|
76 |
+
{
|
77 |
+
|
78 |
+
|
79 |
+
if (is_null($this->shipment) || $this->shipment->getId() != $this->getShipmentId()) {
|
80 |
+
$this->setShipment(Mage::getModel('sales/order_shipment')->load($this->getShipmentId()));
|
81 |
+
}
|
82 |
+
return $this->shipment;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* set shipment this parcel is based on
|
87 |
+
*
|
88 |
+
* @throw Netresearch_Hermes_Model_Client_Exception if transformation is not possible due to some reason
|
89 |
+
*
|
90 |
+
* @param Mage_Sales_Model_Order_Shipment $shipment
|
91 |
+
* @return Netresearch_Hermes_Model_Parcel
|
92 |
+
*/
|
93 |
+
public function setShipment(Mage_Sales_Model_Order_Shipment $shipment)
|
94 |
+
{
|
95 |
+
$this->shipment = $shipment;
|
96 |
+
$this->setShipmentId($shipment->getId());
|
97 |
+
$this->setShipmentIncrementId($shipment->getIncrementId());
|
98 |
+
$shippingAddress = $shipment->getShippingAddress();
|
99 |
+
$this->convertReceiverLastname()
|
100 |
+
->convertReceiverStreet()
|
101 |
+
->convertDistrict()
|
102 |
+
->convertCountryCode()
|
103 |
+
->convertEmail()
|
104 |
+
->setReceiverCity($shippingAddress->getCity())
|
105 |
+
->setReceiverFirstname($shippingAddress->getFirstname())
|
106 |
+
->setReceiverTelephoneNumber($shippingAddress->getTelephone())
|
107 |
+
->setReceiverTelephonePrefix()
|
108 |
+
->setReceiverPostcode($shippingAddress->getPostcode())
|
109 |
+
->setClientReferenceNumber($shipment->getIncrementId())
|
110 |
+
->convertCompany($shipment->getCompany());
|
111 |
+
$this->validate();
|
112 |
+
|
113 |
+
return $this;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* set concatenation of middlename and lastname as receiver lastname
|
118 |
+
*
|
119 |
+
* @return Netresearch_Hermes_Model_Parcel
|
120 |
+
*/
|
121 |
+
public function convertReceiverLastname()
|
122 |
+
{
|
123 |
+
$this->setReceiverLastname(trim($this->getShipment()->getShippingAddress()->getMiddlename()
|
124 |
+
. ' ' . $this->getShipment()->getShippingAddress()->getLastname()
|
125 |
+
));
|
126 |
+
return $this;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* set shipping address street (including house number) and address_add
|
131 |
+
*
|
132 |
+
* @return Netresearch_Hermes_Model_Parcel
|
133 |
+
*/
|
134 |
+
public function convertReceiverStreet()
|
135 |
+
{
|
136 |
+
$this->setReceiverStreet(
|
137 |
+
$this->getShipment()->getShippingAddress()->getStreet1()
|
138 |
+
);
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Magento returns street lines as follows:
|
142 |
+
* -1 = concatenated by \n
|
143 |
+
* 0 or null = as array
|
144 |
+
* > 0 = single line with given number
|
145 |
+
*/
|
146 |
+
$street = $this->getShipment()->getShippingAddress()->getStreet(0);
|
147 |
+
/* strip street itself */
|
148 |
+
unset($street[0]);
|
149 |
+
$addressAdd = trim(implode(' ', $street));
|
150 |
+
$this->setReceiverAddressAdd(strlen($addressAdd) ? $addressAdd : null);
|
151 |
+
|
152 |
+
return $this;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* set district for parcels to Ireland
|
157 |
+
*
|
158 |
+
* @return Netresearch_Hermes_Model_Parcel
|
159 |
+
*/
|
160 |
+
public function convertDistrict()
|
161 |
+
{
|
162 |
+
$address = $this->getShipment()->getShippingAddress();
|
163 |
+
if ('IE' == $address->getCountryId()) {
|
164 |
+
$this->setReceiverDistrict($address->getRegion());
|
165 |
+
}
|
166 |
+
return $this;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* set 3-letter country code
|
171 |
+
*
|
172 |
+
* @return Netresearch_Hermes_Model_Parcel
|
173 |
+
*/
|
174 |
+
public function convertCountryCode()
|
175 |
+
{
|
176 |
+
$countryId = $this->getShipment()->getShippingAddress()->getCountryId();
|
177 |
+
$this->setReceiverCountryCode(
|
178 |
+
Mage::helper('hermes')->getIso3CodeByIso2Code($countryId)
|
179 |
+
);
|
180 |
+
return $this;
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* if hermes should send a mail containing tracking information, we have to submit customer's email
|
185 |
+
*
|
186 |
+
* @return Netresearch_Hermes_Model_Parcel
|
187 |
+
*/
|
188 |
+
public function convertEmail()
|
189 |
+
{
|
190 |
+
if (Mage::getModel('hermes/config')->isHermesMailEnabled()) {
|
191 |
+
$this->setReceiverEmail(
|
192 |
+
$this->getShipment()->getOrder()->getCustomerEmail()
|
193 |
+
);
|
194 |
+
}
|
195 |
+
return $this;
|
196 |
+
}
|
197 |
+
|
198 |
+
public function convertCompany()
|
199 |
+
{
|
200 |
+
$company = $this->getShipment()->getShippingAddress()->getCompany();
|
201 |
+
if (strlen($company)) {
|
202 |
+
if (0 == strlen(trim($this->getReceiverAddressAdd()))) {
|
203 |
+
$this->setReceiverAddressAdd(
|
204 |
+
trim($this->getReceiverFirstname() . ' ' . $this->getReceiverLastname())
|
205 |
+
);
|
206 |
+
}
|
207 |
+
$this->setReceiverFirstname(null);
|
208 |
+
$this->setReceiverLastname($company);
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* validate according to Hermes API requirements
|
214 |
+
*
|
215 |
+
* @return void
|
216 |
+
*/
|
217 |
+
public function validate()
|
218 |
+
{
|
219 |
+
if (25 < strlen(trim($this->getReceiverLastname()))) {
|
220 |
+
throw new Netresearch_Hermes_Model_Client_Exception('Field receiver_lastname must not be longer than 25 characters');
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* parcel transmission is queued
|
226 |
+
*
|
227 |
+
* @return boolean
|
228 |
+
*/
|
229 |
+
public function isQueued()
|
230 |
+
{
|
231 |
+
return self::STATUS_QUEUED == $this->getStatusCode();
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* parcel transmission is processed
|
236 |
+
*
|
237 |
+
* @return boolean
|
238 |
+
*/
|
239 |
+
public function isProcessed()
|
240 |
+
{
|
241 |
+
return self::STATUS_PROCESSED == $this->getStatusCode();
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* parcel is queued to be canceled
|
246 |
+
*
|
247 |
+
* @return boolean
|
248 |
+
*/
|
249 |
+
public function isQueuedToCancel()
|
250 |
+
{
|
251 |
+
return self::STATUS_CANCEL_QUEUED == $this->getStatusCode();
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* parcel is queued to be canceled
|
256 |
+
*
|
257 |
+
* @return boolean
|
258 |
+
*/
|
259 |
+
public function isCanceled()
|
260 |
+
{
|
261 |
+
return self::STATUS_CANCELED == $this->getStatusCode();
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Returns all statuses an there translated labels
|
266 |
+
*
|
267 |
+
* @return array
|
268 |
+
*/
|
269 |
+
public function getStatusCodes()
|
270 |
+
{
|
271 |
+
return array(
|
272 |
+
self::STATUS_QUEUED => Mage::helper('hermes')->__('new (queued)'),
|
273 |
+
self::STATUS_NEW_FAILED => Mage::helper('hermes')->__('new (failed)'),
|
274 |
+
self::STATUS_PROCESSED => Mage::helper('hermes')->__('processed'),
|
275 |
+
self::STATUS_CANCEL_QUEUED => Mage::helper('hermes')->__('cancel (queued)'),
|
276 |
+
self::STATUS_CANCEL_FAILED => Mage::helper('hermes')->__('cancel (failed)'),
|
277 |
+
self::STATUS_CANCELED => Mage::helper('hermes')->__('canceled'),
|
278 |
+
self::STATUS_IN_TRANSMISSION => Mage::helper('hermes')->__('in transmission'),
|
279 |
+
self::STATUS_CLOSED => Mage::helper('hermes')->__('closed'),
|
280 |
+
);
|
281 |
+
}
|
282 |
+
|
283 |
+
/**
|
284 |
+
* Returns status caption.
|
285 |
+
*
|
286 |
+
* @return string
|
287 |
+
*/
|
288 |
+
public function getStatusText()
|
289 |
+
{
|
290 |
+
$statuses = $this->getStatusCodes();
|
291 |
+
if (!array_key_exists($this->getStatusCode(), $statuses)) {
|
292 |
+
return $this->getStatusCode();
|
293 |
+
}
|
294 |
+
return $statuses[$this->getStatusCode()];
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* parcel transmission is failed
|
299 |
+
*
|
300 |
+
* @return boolean
|
301 |
+
*/
|
302 |
+
public function isFailed()
|
303 |
+
{
|
304 |
+
return self::STATUS_NEW_FAILED == $this->getStatusCode();
|
305 |
+
}
|
306 |
+
|
307 |
+
/**
|
308 |
+
* parcel transmission is failed
|
309 |
+
*
|
310 |
+
* @return boolean
|
311 |
+
*/
|
312 |
+
public function isCancelFailed()
|
313 |
+
{
|
314 |
+
return self::STATUS_CANCEL_FAILED == $this->getStatusCode();
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* if parcel transmission can be resumed or repeated
|
319 |
+
*
|
320 |
+
* @return boolean
|
321 |
+
*/
|
322 |
+
public function canBeResumed()
|
323 |
+
{
|
324 |
+
return in_array(
|
325 |
+
$this->getStatusCode(),
|
326 |
+
array(
|
327 |
+
self::STATUS_PROCESSED,
|
328 |
+
self::STATUS_CANCEL_QUEUED,
|
329 |
+
self::STATUS_CANCELED,
|
330 |
+
self::STATUS_NEW_FAILED
|
331 |
+
)
|
332 |
+
);
|
333 |
+
}
|
334 |
+
|
335 |
+
/**
|
336 |
+
* repeat parcel transmission
|
337 |
+
*
|
338 |
+
* @return Netresearch_Hermes_Model_Parcel
|
339 |
+
*/
|
340 |
+
public function repeatTransmission()
|
341 |
+
{
|
342 |
+
if (!in_array($this->getStatusCode(), array(self::STATUS_CLOSED, self::STATUS_IN_TRANSMISSION))) {
|
343 |
+
$this->setStatusCode(self::STATUS_QUEUED);
|
344 |
+
}
|
345 |
+
return $this;
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* parcel in transmission
|
350 |
+
*
|
351 |
+
* @return boolean
|
352 |
+
*/
|
353 |
+
public function isInTransmission()
|
354 |
+
{
|
355 |
+
return self::STATUS_IN_TRANSMISSION == $this->getStatusCode();
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* is parcel is closed (when label was printed
|
360 |
+
*
|
361 |
+
* @return boolean
|
362 |
+
*/
|
363 |
+
public function isClosed()
|
364 |
+
{
|
365 |
+
return self::STATUS_CLOSED == $this->getStatusCode();
|
366 |
+
}
|
367 |
+
|
368 |
+
public function setErrorCodes($codes)
|
369 |
+
{
|
370 |
+
$this->setErrorCode(json_encode($codes));
|
371 |
+
return $this;
|
372 |
+
}
|
373 |
+
|
374 |
+
public function getErrorCodes()
|
375 |
+
{
|
376 |
+
return json_decode($this->getErrorCode());
|
377 |
+
}
|
378 |
+
|
379 |
+
public function setErrorMessages($messages)
|
380 |
+
{
|
381 |
+
$this->setErrorMessage(json_encode($messages));
|
382 |
+
return $this;
|
383 |
+
}
|
384 |
+
|
385 |
+
public function getErrorMessages()
|
386 |
+
{
|
387 |
+
return json_decode($this->getErrorMessage());
|
388 |
+
}
|
389 |
+
|
390 |
+
public function getTrackingUrl()
|
391 |
+
{
|
392 |
+
return Mage::getModel('hermes/config')->getTrackingUrl($this);
|
393 |
+
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* gets the label of parcel and sets the state to closed (if neccessary)
|
397 |
+
*
|
398 |
+
* @param type $format the fileformat of the label
|
399 |
+
* @return string the label
|
400 |
+
* @throws Exception
|
401 |
+
*/
|
402 |
+
public function getLabel($format, $labelPosition = null)
|
403 |
+
{
|
404 |
+
$label = null;
|
405 |
+
$format = strtolower(trim($format));
|
406 |
+
try {
|
407 |
+
switch ($format) {
|
408 |
+
case Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF: {
|
409 |
+
if (is_null($labelPosition)) {
|
410 |
+
$labelPosition = Mage::getModel('hermes/config')->getPdfLabelPosition();
|
411 |
+
}
|
412 |
+
$label = Mage::getModel('hermes/client')->getLabelPdf($this, $labelPosition)->getResult();
|
413 |
+
break;
|
414 |
+
}
|
415 |
+
case Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG: {
|
416 |
+
$label = Mage::getModel('hermes/client')->getLabelJpeg($this)->getResult();
|
417 |
+
break;
|
418 |
+
}
|
419 |
+
}
|
420 |
+
if (!is_null($label) && !$this->isClosed()) {
|
421 |
+
$this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
422 |
+
$this->save();
|
423 |
+
}
|
424 |
+
}
|
425 |
+
catch (Exception $e) {
|
426 |
+
Mage::logException($e);
|
427 |
+
throw $e;
|
428 |
+
}
|
429 |
+
return $label;
|
430 |
+
}
|
431 |
+
|
432 |
+
/**
|
433 |
+
* add track (to provide tracking url)
|
434 |
+
*
|
435 |
+
* @return Netresearch_Hermes_Model_Parcel
|
436 |
+
*/
|
437 |
+
public function addTrack()
|
438 |
+
{
|
439 |
+
if (0 < strlen($this->getHermesOrderNo())) {
|
440 |
+
$shipment = $this->getShipment();
|
441 |
+
$recentTrack = $shipment->getTracksCollection()->getLastItem();
|
442 |
+
if (!$recentTrack || $recentTrack->getNumber() != $this->getHermesOrderNo()) {
|
443 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
444 |
+
$track = Mage::getModel('sales/order_shipment_track')
|
445 |
+
->setNumber($this->getHermesOrderNo())
|
446 |
+
->setCarrierCode(Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE)
|
447 |
+
->setTitle($carrier->getConfigData('title'));
|
448 |
+
$shipment->addTrack($track)
|
449 |
+
->save();
|
450 |
+
$this->notifyCustomer();
|
451 |
+
}
|
452 |
+
}
|
453 |
+
return $this;
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
*
|
458 |
+
* removes tracks
|
459 |
+
*
|
460 |
+
* @return \Netresearch_Hermes_Model_Parcel
|
461 |
+
*/
|
462 |
+
public function removeTrack()
|
463 |
+
{
|
464 |
+
if (0 < strlen($this->getHermesOrderNo())) {
|
465 |
+
$tracks = Mage::getModel('sales/order_shipment_track')
|
466 |
+
->getCollection()
|
467 |
+
->addFieldToFilter('carrier_code', Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE)
|
468 |
+
->addFieldToFilter('order_id', $this->getShipment()->getOrderId())
|
469 |
+
->load();
|
470 |
+
foreach ($tracks as $track) {
|
471 |
+
if ($track->getNumber() == $this->getHermesOrderNo()) {
|
472 |
+
$track->delete();
|
473 |
+
}
|
474 |
+
}
|
475 |
+
}
|
476 |
+
return $this;
|
477 |
+
}
|
478 |
+
|
479 |
+
/**
|
480 |
+
* send tracking information to the customer
|
481 |
+
*
|
482 |
+
* @return Netresearch_Hermes_Model_Parcel
|
483 |
+
*/
|
484 |
+
public function notifyCustomer()
|
485 |
+
{
|
486 |
+
if (Mage::getModel('hermes/config')->isTrackingLinkMailEnabled()) {
|
487 |
+
$this->getShipment()
|
488 |
+
->sendEmail(true)
|
489 |
+
->setEmailSent(true)
|
490 |
+
->save();
|
491 |
+
}
|
492 |
+
return $this;
|
493 |
+
}
|
494 |
+
|
495 |
+
public function cancel()
|
496 |
+
{
|
497 |
+
$cancellationComment = 'HERMES::' . Mage::helper('hermes')->__('Hermes parcel cancellation succeeded');
|
498 |
+
|
499 |
+
if (is_null($this->getHermesOrderNo())) {
|
500 |
+
/* simply set parcel to state canceled, if it was not transmitted to Hermes, yet */
|
501 |
+
|
502 |
+
$this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
|
503 |
+
$this->save();
|
504 |
+
|
505 |
+
/* add shipment comment */
|
506 |
+
$this->getShipment()->addComment($cancellationComment);
|
507 |
+
$this->getShipment()->getCommentsCollection()->save();
|
508 |
+
} else {
|
509 |
+
/* send cancellation request to Hermes */
|
510 |
+
|
511 |
+
$this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
|
512 |
+
if (Mage::getModel('hermes/client')->cancel($this)) {
|
513 |
+
$cancellationComment .= ' [' . $this->getHermesOrderNo() . ']';
|
514 |
+
$this->removeTrack();
|
515 |
+
$this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
|
516 |
+
$this->setHermesOrderNo(null);
|
517 |
+
$this->save();
|
518 |
+
|
519 |
+
/* add shipment comment */
|
520 |
+
$this->getShipment()->addComment($cancellationComment);
|
521 |
+
$this->getShipment()->getCommentsCollection()->save();
|
522 |
+
} else {
|
523 |
+
throw new Exception('Parcel cancellation failed');
|
524 |
+
}
|
525 |
+
}
|
526 |
+
}
|
527 |
+
}
|
app/code/community/Netresearch/Hermes/Model/Shipping/Carrier/Hermes.php
ADDED
@@ -0,0 +1,116 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
20 |
+
* @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
* @link http://www.netresearch.de/magento/
|
23 |
+
*/
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Netresearch_Hermes_Model_Shipping_Carrier_Hermes
|
28 |
+
*
|
29 |
+
* @category Netresearch
|
30 |
+
* @package Netresearch_Hermes
|
31 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
32 |
+
* @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
33 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
34 |
+
* @link http://www.netresearch.de/magento/
|
35 |
+
*/
|
36 |
+
class Netresearch_Hermes_Model_Shipping_Carrier_Hermes extends Mage_Shipping_Model_Carrier_Abstract
|
37 |
+
{
|
38 |
+
const CODE = 'hermes';
|
39 |
+
|
40 |
+
protected $_code = self::CODE;
|
41 |
+
|
42 |
+
public function getAllowedMethods()
|
43 |
+
{
|
44 |
+
return array($this->_code => 'Hermes');
|
45 |
+
}
|
46 |
+
|
47 |
+
public function isActive()
|
48 |
+
{
|
49 |
+
return true;
|
50 |
+
}
|
51 |
+
|
52 |
+
public function isTrackingAvailable()
|
53 |
+
{
|
54 |
+
return true;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* we won't use this carrier for shipping rates collection,
|
59 |
+
* so we just return an empty result
|
60 |
+
*
|
61 |
+
* @see Mage_Shipping_Model_Carrier_Abstract::collectRates()
|
62 |
+
*
|
63 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
64 |
+
* @return void
|
65 |
+
*/
|
66 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
67 |
+
{
|
68 |
+
return Mage::getModel('shipping/rate_result');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* get tracking information
|
73 |
+
*
|
74 |
+
* @see Mage_Usa_Model_Shipping_Carrier_Abstract::getTrackingInfo()
|
75 |
+
* @return Mage_Shipping_Model_Tracking_Result|false
|
76 |
+
*/
|
77 |
+
public function getTrackingInfo($tracking)
|
78 |
+
{
|
79 |
+
$result = $this->getTracking($tracking);
|
80 |
+
|
81 |
+
if ($result instanceof Mage_Shipping_Model_Tracking_Result) {
|
82 |
+
if ($trackings = $result->getAllTrackings()) {
|
83 |
+
return $trackings[0];
|
84 |
+
}
|
85 |
+
} elseif (is_string($result) && 0 < strlen($result)) {
|
86 |
+
return $result;
|
87 |
+
}
|
88 |
+
|
89 |
+
return false;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @see Mage_Usa_Model_Shipping_Carrier_Dhl::getTracking()
|
94 |
+
* @return Mage_Shipping_Model_Tracking_Result
|
95 |
+
*/
|
96 |
+
public function getTracking($trackings)
|
97 |
+
{
|
98 |
+
if (!is_array($trackings)) {
|
99 |
+
$trackings = array($trackings);
|
100 |
+
}
|
101 |
+
|
102 |
+
$result = Mage::getModel('shipping/tracking_result');
|
103 |
+
foreach ($trackings as $trackingNumber) {
|
104 |
+
$status = Mage::getModel('shipping/tracking_result_status');
|
105 |
+
$status->setCarrierTitle('Hermes');
|
106 |
+
$status->setCarrier('hermes');
|
107 |
+
$status->setTracking($trackingNumber);
|
108 |
+
$status->setPopup(true);
|
109 |
+
$status->setUrl(Mage::getModel('hermes/config')->getTrackingUrl($trackingNumber));
|
110 |
+
$result->append($status);
|
111 |
+
}
|
112 |
+
|
113 |
+
return $result;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Payment/Methods.php
ADDED
@@ -0,0 +1,54 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Payment Methods Source
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_System_Config_Source_Payment_Methods
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get payment methods.
|
35 |
+
*
|
36 |
+
* @return array $methods
|
37 |
+
*/
|
38 |
+
public function toOptionArray()
|
39 |
+
{
|
40 |
+
$methods = array(array('value' => '', 'label' => ''));
|
41 |
+
foreach (Mage::getStoreConfig('payment') as $code => $payment):
|
42 |
+
$payment = new ArrayObject($payment);
|
43 |
+
if (!$payment->offsetExists('title') ||
|
44 |
+
!$payment->offsetExists('active') ||
|
45 |
+
(int) $payment->offsetGet('active') !== 1):
|
46 |
+
continue;
|
47 |
+
endif;
|
48 |
+
$methods[$code] = array(
|
49 |
+
'label' => Mage::helper('payment')->__($payment->offsetGet('title')),
|
50 |
+
'value' => $code);
|
51 |
+
endforeach;
|
52 |
+
return $methods;
|
53 |
+
}
|
54 |
+
}
|
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelFileFormatOptions.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch _Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Shipment Label file format Source
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions
|
32 |
+
{
|
33 |
+
|
34 |
+
const PDF = 'pdf';
|
35 |
+
|
36 |
+
const JPEG = 'jpeg';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Get possible label formats e.g. pdf, jpeg as value => label array
|
40 |
+
*
|
41 |
+
* @return array $formats
|
42 |
+
*/
|
43 |
+
public function toOptionArray()
|
44 |
+
{
|
45 |
+
$formatOptions = array(
|
46 |
+
array('value' => self::PDF, 'label' => 'PDF'),
|
47 |
+
);
|
48 |
+
|
49 |
+
return $formatOptions;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* gets all label file formats
|
54 |
+
*
|
55 |
+
* @return array the fileformats
|
56 |
+
*/
|
57 |
+
static public function getLabelFileFormats()
|
58 |
+
{
|
59 |
+
return array(
|
60 |
+
self::PDF,
|
61 |
+
self::JPEG
|
62 |
+
);
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelPlacements.php
ADDED
@@ -0,0 +1,49 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch _Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes API client unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements
|
32 |
+
{
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get label placement options as value => label array
|
36 |
+
*
|
37 |
+
* @return array $methods
|
38 |
+
*/
|
39 |
+
public function toOptionArray()
|
40 |
+
{
|
41 |
+
$placementOptions = array(
|
42 |
+
array('value' => 1, 'label' => Mage::helper('hermes')->__('top left')),
|
43 |
+
array('value' => 2, 'label' => Mage::helper('hermes')->__('top right')),
|
44 |
+
array('value' => 3, 'label' => Mage::helper('hermes')->__('bottom left')),
|
45 |
+
array('value' => 4, 'label' => Mage::helper('hermes')->__('bottom right'))
|
46 |
+
);
|
47 |
+
return $placementOptions;
|
48 |
+
}
|
49 |
+
}
|
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/Methods.php
ADDED
@@ -0,0 +1,71 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Shipment Methods Source
|
26 |
+
*
|
27 |
+
* @deprecated
|
28 |
+
* @category Netresearch
|
29 |
+
* @package Netresearch_Hermes
|
30 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
31 |
+
*/
|
32 |
+
class Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods
|
33 |
+
extends Mage_Adminhtml_Model_System_Config_Source_Shipping_Allmethods
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* Get shipping methods.
|
37 |
+
*
|
38 |
+
* @return array $methods
|
39 |
+
*/
|
40 |
+
public function toOptionArray($isActiveOnlyFlag = false)
|
41 |
+
{
|
42 |
+
$methods = array(array('value' => '', 'label' => ''));
|
43 |
+
|
44 |
+
$carriers = new Mage_Shipping_Model_Config();
|
45 |
+
$carriers = $carriers->getAllCarriers();
|
46 |
+
|
47 |
+
foreach ($carriers as $carrier)
|
48 |
+
{
|
49 |
+
try {
|
50 |
+
$className = Mage::getStoreConfig('carriers/'.$carrier->getId().'/model');
|
51 |
+
if ($className)
|
52 |
+
{
|
53 |
+
$obj = Mage::getModel($className);
|
54 |
+
foreach ($obj->getAllowedMethods() as $key=>$method)
|
55 |
+
{
|
56 |
+
$code = $carrier->getId()."_".$key;
|
57 |
+
$title = $method." (".$carrier->getId().")";
|
58 |
+
$methods[$code] = array(
|
59 |
+
'label' => $title,
|
60 |
+
'value' => $code);
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
catch (Exception $e) {
|
65 |
+
//Some carries seem to be fake carrier and have no valid methods (f.e. M2E)
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
return $methods;
|
70 |
+
}
|
71 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest.php
ADDED
@@ -0,0 +1,88 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Test for Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Block_Adminhtml_Sales_Order_Grid_Renderer_IconTest extends EcomDev_PHPUnit_Test_Case
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes
|
35 |
+
*/
|
36 |
+
protected $block;
|
37 |
+
|
38 |
+
public function setUp()
|
39 |
+
{
|
40 |
+
$this->block = Mage::getSingleton('core/layout')
|
41 |
+
->createBlock('hermes/adminhtml_sales_order_grid_renderer_icon');
|
42 |
+
parent::setUp();
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @test
|
47 |
+
* @loadFixture ../../../../../../../../var/fixtures/parcels
|
48 |
+
*/
|
49 |
+
public function testRender()
|
50 |
+
{
|
51 |
+
$this->assertInstanceOf('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon', $this->block);
|
52 |
+
$row = new Varien_Object();
|
53 |
+
$row->setShipmentsCollection(array());
|
54 |
+
$this->assertEmpty($this->block->getHermesStatusOutput($row));
|
55 |
+
|
56 |
+
$row->setShipmentsCollection(array(
|
57 |
+
new Varien_Object(array('id' => 1)), // no parcel
|
58 |
+
new Varien_Object(array('id' => 2)), // empty (STATUS_QUEUED)
|
59 |
+
new Varien_Object(array('id' => 3)), // STATUS_QUEUED
|
60 |
+
new Varien_Object(array('id' => 4)), // STATUS_PROCESSED
|
61 |
+
));
|
62 |
+
|
63 |
+
$pattern = ' <div class="hermes_status"><img src="%s" alt="Hermes" title="%s" /></div>';
|
64 |
+
$imagePath = $this->block->getSkinUrl('images/hermes/logo_small.png');
|
65 |
+
$message = Mage::helper('hermes')->__('%d parcels were transmitted to Hermes', 1);
|
66 |
+
|
67 |
+
$this->assertEquals(
|
68 |
+
sprintf($pattern, $imagePath, $message),
|
69 |
+
$this->block->getHermesStatusOutput($row)
|
70 |
+
);
|
71 |
+
|
72 |
+
$row->setShipmentsCollection(array(
|
73 |
+
new Varien_Object(array('id' => 1)), // no parcel
|
74 |
+
new Varien_Object(array('id' => 2)), // empty (STATUS_QUEUED)
|
75 |
+
new Varien_Object(array('id' => 3)), // STATUS_QUEUED
|
76 |
+
new Varien_Object(array('id' => 4)), // STATUS_PROCESSED
|
77 |
+
new Varien_Object(array('id' => 7)), // STATUS_NEW_FAILED
|
78 |
+
new Varien_Object(array('id' => 16)), // STATUS_CANCELED
|
79 |
+
));
|
80 |
+
|
81 |
+
$message = Mage::helper('hermes')->__('%d parcels could not be transmitted to Hermes', 1);
|
82 |
+
$imagePath = $this->block->getSkinUrl('images/hermes/logo_small_failed.png');
|
83 |
+
$this->assertEquals(
|
84 |
+
sprintf($pattern, $imagePath, $message),
|
85 |
+
$this->block->getHermesStatusOutput($row)
|
86 |
+
);
|
87 |
+
}
|
88 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest.php
ADDED
@@ -0,0 +1,386 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes Sales Order Shipment Create Hermes Block unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Block_Adminhtml_Sales_Order_Shipment_Create_HermesTest extends EcomDev_PHPUnit_Test_Case
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var Netresearch_Hermes_Helper_Validate_Order
|
35 |
+
*/
|
36 |
+
protected $helper;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var Netresearch_Hermes_Model_Config
|
40 |
+
*/
|
41 |
+
protected $config;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes
|
45 |
+
*/
|
46 |
+
protected $block;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @var Mage_Core_Model_Store
|
50 |
+
*/
|
51 |
+
protected $store;
|
52 |
+
|
53 |
+
public function setUp()
|
54 |
+
{
|
55 |
+
$this->helper = Mage::helper('hermes/validate_order');
|
56 |
+
$this->config = Mage::getModel('hermes/config');
|
57 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
58 |
+
$this->block = Mage::getSingleton('core/layout')
|
59 |
+
->createBlock('hermes/adminhtml_sales_order_shipment_create_hermes');
|
60 |
+
$this->block->getValidateOrderHelper()->resetValidationErrors();
|
61 |
+
parent::setUp();
|
62 |
+
}
|
63 |
+
|
64 |
+
public function testBlockExists()
|
65 |
+
{
|
66 |
+
$this->assertTrue('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes'
|
67 |
+
== get_class($this->block));
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @test
|
72 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
73 |
+
*/
|
74 |
+
public function testIsAllowedShippingMethod()
|
75 |
+
{
|
76 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
77 |
+
Mage::register("current_shipment", $shipment);
|
78 |
+
$this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
|
79 |
+
$this->assertTrue($this->block->isAllowedShippingMethod());
|
80 |
+
|
81 |
+
$this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', 'flatrate_flatrate');
|
82 |
+
$this->assertFalse($this->block->isAllowedShippingMethod());
|
83 |
+
|
84 |
+
$this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @test
|
89 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
90 |
+
*/
|
91 |
+
public function testIsValidHermesShipmentValid()
|
92 |
+
{
|
93 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
94 |
+
Mage::unregister("current_shipment");
|
95 |
+
Mage::register("current_shipment", $shipment);
|
96 |
+
$this->assertTrue($this->block->isValidHermesShipment());
|
97 |
+
$this->assertEmpty($this->block->getValidationErrors());
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* @test
|
102 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
103 |
+
*/
|
104 |
+
public function testIsValidHermesShipmentValidCod()
|
105 |
+
{
|
106 |
+
//set checkmo to cod and amount < 2500
|
107 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
108 |
+
Mage::unregister("current_shipment");
|
109 |
+
Mage::register("current_shipment", $shipment);
|
110 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
111 |
+
$this->assertTrue($this->block->isValidHermesShipment());
|
112 |
+
$this->assertEmpty($this->block->getValidationErrors());
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* @test
|
117 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
118 |
+
*/
|
119 |
+
public function testIsValidHermesShipmentInvalidCod()
|
120 |
+
{
|
121 |
+
//set checkmo to cod and an amount > 2500
|
122 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
123 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(4);
|
124 |
+
Mage::unregister("current_shipment");
|
125 |
+
Mage::register("current_shipment", $shipment);
|
126 |
+
$this->assertFalse($this->block->isValidHermesShipment());
|
127 |
+
$this->assertNotEmpty($this->block->getValidationErrors());
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* @test
|
132 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
133 |
+
*/
|
134 |
+
public function testIsValidHermesShipmentInvalidUsa()
|
135 |
+
{
|
136 |
+
//check usa customer
|
137 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
138 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(3);
|
139 |
+
Mage::unregister("current_shipment");
|
140 |
+
Mage::register("current_shipment", $shipment);
|
141 |
+
$this->assertFalse($this->block->isValidHermesShipment());
|
142 |
+
$this->assertNotEmpty($this->block->getValidationErrors());
|
143 |
+
|
144 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* @test
|
149 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
150 |
+
*/
|
151 |
+
public function testIsValidHermesShipmentValidUk()
|
152 |
+
{
|
153 |
+
//check usa customer
|
154 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
155 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(5);
|
156 |
+
Mage::unregister("current_shipment");
|
157 |
+
Mage::register("current_shipment", $shipment);
|
158 |
+
$valid = $this->block->isValidHermesShipment();
|
159 |
+
$this->assertEquals(array(), $this->block->getValidationErrors());
|
160 |
+
$this->assertTrue($valid);
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* checks if the merchand is tiered price merchand
|
165 |
+
*/
|
166 |
+
public function testIsTieredPriceMerchant()
|
167 |
+
{
|
168 |
+
$this->assertTrue(is_bool($this->block->isTieredPriceMerchand()));
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* special case: germany -> the product classes contains 'all' as value
|
173 |
+
* @test
|
174 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
175 |
+
* @loadExpectation productClasses
|
176 |
+
*/
|
177 |
+
public function testGetParcelClassesForCountryDeu()
|
178 |
+
{
|
179 |
+
$this->loadAndRegisterShipment(2);
|
180 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
181 |
+
$mock->expects($this->any())
|
182 |
+
->method('getListOfProductsProducts')
|
183 |
+
->will($this->returnValue(array(
|
184 |
+
'DEU' => array(
|
185 |
+
'product_classes' => array(
|
186 |
+
'all' => array('all')
|
187 |
+
)
|
188 |
+
)
|
189 |
+
)));
|
190 |
+
$mock->expects($this->any())
|
191 |
+
->method('getAllProductClasses')
|
192 |
+
->will($this->returnValue(array(
|
193 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
|
194 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
|
195 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
|
196 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
|
197 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
|
198 |
+
)));
|
199 |
+
|
200 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
201 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
202 |
+
$this->assertTrue(is_array($parcelClasses));
|
203 |
+
$this->assertTrue(sizeof($parcelClasses) > 0);
|
204 |
+
$expectedParcelClasses = $this->expected('DEU')->getProductClasses();
|
205 |
+
$this->assertEquals(sizeof($expectedParcelClasses), sizeof($parcelClasses));
|
206 |
+
// special case: all in case of germany
|
207 |
+
foreach (array_keys($parcelClasses) as $parcelClass) {
|
208 |
+
$this->assertTrue(in_array($parcelClass, $expectedParcelClasses));
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* @test
|
214 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
215 |
+
* @loadExpectation productClasses
|
216 |
+
*
|
217 |
+
*/
|
218 |
+
public function testGetParcelClassesForCountryGBR()
|
219 |
+
{
|
220 |
+
$this->loadAndRegisterShipment(5);
|
221 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
222 |
+
$mock->expects($this->any())
|
223 |
+
->method('getListOfProductsProducts')
|
224 |
+
->will($this->returnValue(array(
|
225 |
+
'GBR' => array(
|
226 |
+
'product_classes' => array(
|
227 |
+
'XS' => array('XS'),
|
228 |
+
'S' => array('S'),
|
229 |
+
'M' => array('M'),
|
230 |
+
'L' => array('L')
|
231 |
+
)
|
232 |
+
)
|
233 |
+
)));
|
234 |
+
|
235 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
236 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
237 |
+
$this->assertTrue(is_array($parcelClasses));
|
238 |
+
$expectedParcelClasses = $this->expected('GBR')->getProductClasses();
|
239 |
+
$this->assertEquals(sizeof($expectedParcelClasses), sizeof($parcelClasses));
|
240 |
+
foreach (array_keys($parcelClasses) as $parcelClass) {
|
241 |
+
$this->assertTrue(in_array($parcelClass, $expectedParcelClasses));
|
242 |
+
}
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* special case: country is not supported by hermes -> possible products
|
247 |
+
* should be empty
|
248 |
+
*
|
249 |
+
* @test
|
250 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
251 |
+
*/
|
252 |
+
public function testGetParcelClassesForCountryUSA()
|
253 |
+
{
|
254 |
+
$this->loadAndRegisterShipment(3);
|
255 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
256 |
+
$mock->expects($this->any())
|
257 |
+
->method('isAllowedCountry')
|
258 |
+
->will($this->returnValue(false));
|
259 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
260 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
261 |
+
$this->assertTrue(is_array($parcelClasses));
|
262 |
+
$this->assertTrue(sizeof($parcelClasses) === 0);
|
263 |
+
$this->assertFalse(array_key_exists('', $parcelClasses));
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* special case: if the cod is greater than > 2500€, the shipment is not
|
268 |
+
* a valid hermes shipment -> product classes should be empty in this case
|
269 |
+
*
|
270 |
+
* @test
|
271 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
272 |
+
*/
|
273 |
+
public function testGetParcelClassesForCountryIsEmptyDueToInvalidCod()
|
274 |
+
{
|
275 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
276 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
277 |
+
$mock->expects($this->any())
|
278 |
+
->method('getListOfProductsProducts')
|
279 |
+
->will($this->returnValue(array(
|
280 |
+
'DEU' => array(
|
281 |
+
'product_classes' => array(
|
282 |
+
'all' => array('all')
|
283 |
+
)
|
284 |
+
)
|
285 |
+
)));
|
286 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
287 |
+
$mock->expects($this->any())
|
288 |
+
->method('isPaymentMethodForCod')
|
289 |
+
->will($this->returnValue(true));
|
290 |
+
$this->loadAndRegisterShipment(4);
|
291 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
292 |
+
$this->assertTrue(is_array($parcelClasses));
|
293 |
+
$this->assertTrue(sizeof($parcelClasses) === 0);
|
294 |
+
$this->assertFalse(array_key_exists('', $parcelClasses));
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* special case: country is not supported by hermes -> possible products
|
299 |
+
* should be empty
|
300 |
+
*
|
301 |
+
* @test
|
302 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
303 |
+
*/
|
304 |
+
public function testGetParcelClassesThrowsExceptionIfDestinationNotFound()
|
305 |
+
{
|
306 |
+
$this->loadAndRegisterShipment(3);
|
307 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
308 |
+
$mock->expects($this->any())
|
309 |
+
->method('getListOfProductsProducts')
|
310 |
+
->will($this->returnValue(array()));
|
311 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
312 |
+
$this->setExpectedException('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception');
|
313 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
314 |
+
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* special case: country is not supported by hermes -> possible products
|
319 |
+
* should be empty
|
320 |
+
*
|
321 |
+
* @test
|
322 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
323 |
+
*/
|
324 |
+
public function testGetParcelClassesThrowsExceptionIfProductClassesNotFound()
|
325 |
+
{
|
326 |
+
$this->loadAndRegisterShipment(2);
|
327 |
+
$mock = $this->getMock('Netresearch_Hermes_Model_Config');
|
328 |
+
$mock->expects($this->any())
|
329 |
+
->method('getListOfProductsProducts')
|
330 |
+
->will($this->returnValue(array('DEU' => array())));
|
331 |
+
$this->replaceByMock('model', 'hermes/config', $mock);
|
332 |
+
$this->setExpectedException('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception');
|
333 |
+
$parcelClasses = $this->block->getParcelClassesForCountry();
|
334 |
+
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* @loadFixture ../../../../../../../../var/fixtures/orderList1
|
339 |
+
* @loadFixture ../../../../../../../../var/fixtures/parcels
|
340 |
+
*/
|
341 |
+
public function testGetParcel()
|
342 |
+
{
|
343 |
+
$shipment_id = 2;
|
344 |
+
$this->loadAndRegisterShipment($shipment_id);
|
345 |
+
$parcel = $this->block->getParcel();
|
346 |
+
|
347 |
+
$this->assertInstanceOf(
|
348 |
+
'Netresearch_Hermes_Model_Parcel',
|
349 |
+
$parcel
|
350 |
+
);
|
351 |
+
|
352 |
+
$this->assertEquals(
|
353 |
+
$shipment_id,
|
354 |
+
$parcel->getData('shipment_id')
|
355 |
+
);
|
356 |
+
}
|
357 |
+
|
358 |
+
public function testIsPdfEnabled()
|
359 |
+
{
|
360 |
+
$this->assertEquals(Mage::getModel('hermes/config')
|
361 |
+
->isPdfEnabled(), $this->block->isPdfEnabled());
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
*
|
366 |
+
* @return boolean
|
367 |
+
*/
|
368 |
+
public function testIsJpegEnabled()
|
369 |
+
{
|
370 |
+
$this->assertEquals(Mage::getModel('hermes/config')
|
371 |
+
->isJpegEnabled(), $this->block->isJpegEnabled());
|
372 |
+
}
|
373 |
+
|
374 |
+
|
375 |
+
|
376 |
+
/**
|
377 |
+
* load and register a shipment identified by it's id
|
378 |
+
* @param integer $shipmentId
|
379 |
+
*/
|
380 |
+
protected function loadAndRegisterShipment($shipmentId)
|
381 |
+
{
|
382 |
+
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
|
383 |
+
Mage::unregister("current_shipment");
|
384 |
+
Mage::register("current_shipment", $shipment);
|
385 |
+
}
|
386 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/expectations/productClasses.yaml
ADDED
@@ -0,0 +1,5 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
DEU:
|
2 |
+
product_classes: ["", 'XS', 'S', 'M', 'L', 'XL']
|
3 |
+
|
4 |
+
GBR:
|
5 |
+
product_classes: ["", 'XS', 'S', 'M', 'L']
|
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Controller/AbstractControllerTest.php
ADDED
@@ -0,0 +1,78 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class Netresearch_Hermes_Test_Controller_AbstractControllerTest
|
4 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
5 |
+
{
|
6 |
+
const FAKE_USER_ID = 999999999;
|
7 |
+
|
8 |
+
public function tearDown()
|
9 |
+
{
|
10 |
+
$adminSession = Mage::getSingleton('admin/session');
|
11 |
+
$adminSession->unsetAll();
|
12 |
+
if ($adminSession->getCookie()) {
|
13 |
+
$adminSession->getCookie()->delete($adminSession->getSessionName());
|
14 |
+
}
|
15 |
+
parent::tearDown();
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* _workaroundAdminMenuIssue
|
20 |
+
*
|
21 |
+
* @see https://github.com/IvanChepurnyi/EcomDev_PHPUnit/issues/26
|
22 |
+
* @return void
|
23 |
+
*/
|
24 |
+
protected function _workaroundAdminMenuIssue()
|
25 |
+
{
|
26 |
+
$menuBlock = $this->getBlockMock('adminhtml/page_menu', array('_toHtml'));
|
27 |
+
$menuBlock->expects($this->any())
|
28 |
+
->method('_toHtml')
|
29 |
+
->will($this->returnCallback(array($this, 'getAdminhtmlPageMenuTemplate')));
|
30 |
+
$this->replaceByMock('block', 'adminhtml/page_menu', $menuBlock);
|
31 |
+
}
|
32 |
+
|
33 |
+
public static function getAdminhtmlPageMenuTemplate()
|
34 |
+
{
|
35 |
+
if (function_exists('drawMenuLevel')) {
|
36 |
+
return '';
|
37 |
+
}
|
38 |
+
return Mage::getBlockSingleton('adminhtml/page_menu')->renderView();
|
39 |
+
}
|
40 |
+
|
41 |
+
protected function _fakeLogin()
|
42 |
+
{
|
43 |
+
$this->_workaroundAdminMenuIssue();
|
44 |
+
$this->_registerUserMock();
|
45 |
+
$this->_allowGlobalAccess();
|
46 |
+
Mage::getSingleton('adminhtml/url')->turnOffSecretKey();
|
47 |
+
$session = Mage::getSingleton('admin/session');
|
48 |
+
|
49 |
+
// segmentation fault when trying to delete old session id:
|
50 |
+
// Mage_Core_Model_Session_Abstract_Varien::regenerateSessionId()
|
51 |
+
// workaround: use <session_save><![CDATA[db]]></session_save>
|
52 |
+
Mage::getConfig()->setNode(Mage_Core_Model_Session::XML_NODE_SESSION_SAVE, 'db');
|
53 |
+
|
54 |
+
$user = $session->login('fakeuser', 'fakeuser_pass');
|
55 |
+
}
|
56 |
+
|
57 |
+
protected function _allowGlobalAccess()
|
58 |
+
{
|
59 |
+
$session = $this->getModelMock('admin/session', array('isAllowed'));
|
60 |
+
$session->expects($this->any())
|
61 |
+
->method('isAllowed')
|
62 |
+
->will($this->returnValue(true));
|
63 |
+
$this->replaceByMock('singleton', 'admin/session', $session);
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Creates a mock object for admin/user Magento Model
|
68 |
+
*
|
69 |
+
* @return My_Module_Test_Controller_Adminhtml_Controller
|
70 |
+
*/
|
71 |
+
protected function _registerUserMock()
|
72 |
+
{
|
73 |
+
$user = $this->getModelMock('admin/user');
|
74 |
+
$user->expects($this->any())->method('getId')->will($this->returnValue(self::FAKE_USER_ID));
|
75 |
+
$this->replaceByMock('model', 'admin/user', $user);
|
76 |
+
return $this;
|
77 |
+
}
|
78 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Controller/ConfigControllerTest.php
ADDED
@@ -0,0 +1,80 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Hermes ConfigController unittest
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
29 |
+
*/
|
30 |
+
class Netresearch_Hermes_Test_Controller_ConfigControllerTest
|
31 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
32 |
+
{
|
33 |
+
protected function setUp()
|
34 |
+
{
|
35 |
+
parent::setUp();
|
36 |
+
$this->mockAdminUserSession();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Logged in to Magento with fake user to test an adminhtml controllers
|
41 |
+
*/
|
42 |
+
/**
|
43 |
+
* Test whether fake user successfully logged in
|
44 |
+
*/
|
45 |
+
public function testLoggedIn()
|
46 |
+
{
|
47 |
+
$this->assertTrue(Mage::getSingleton('admin/session')->isLoggedIn());
|
48 |
+
}
|
49 |
+
|
50 |
+
public function testUpdateListOfProducts()
|
51 |
+
{
|
52 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
53 |
+
$client = $this->getModelMock('hermes/client', array('updateListOfProducts'));
|
54 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
55 |
+
|
56 |
+
// client does nothing
|
57 |
+
$this->dispatch('adminhtml/config/updateListOfProducts');
|
58 |
+
$this->assertRequestRoute('adminhtml/config/updateListOfProducts');
|
59 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
60 |
+
$this->assertEquals('error: The list of products could not be updated.', $error);
|
61 |
+
|
62 |
+
// client pretends to have updated product list
|
63 |
+
$client->expects($this->any())
|
64 |
+
->method('updateListOfProducts')
|
65 |
+
->will($this->returnValue(true));
|
66 |
+
|
67 |
+
$this->dispatch('adminhtml/config/updateListOfProducts');
|
68 |
+
$success = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
69 |
+
$this->assertEquals('success: The list of products was successfully updated.', $success);
|
70 |
+
|
71 |
+
$message = 'Login failed';
|
72 |
+
$client->expects($this->any())
|
73 |
+
->method('updateListOfProducts')
|
74 |
+
->will($this->throwException(new Netresearch_Hermes_Model_Client_Exception($message)));
|
75 |
+
|
76 |
+
$this->dispatch('adminhtml/config/updateListOfProducts');
|
77 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
78 |
+
$this->assertEquals("error: $message", $error);
|
79 |
+
}
|
80 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest.php
ADDED
@@ -0,0 +1,384 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Test_Controller_ParcelControllerTest
|
4 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
5 |
+
{
|
6 |
+
protected function setUp()
|
7 |
+
{
|
8 |
+
parent::setUp();
|
9 |
+
$this->mockAdminUserSession();
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @loadFixture ../../../var/fixtures/parcels
|
14 |
+
*/
|
15 |
+
public function testEditAction()
|
16 |
+
{
|
17 |
+
$parcel_id = '6';
|
18 |
+
$this->getRequest()->setQuery('id', $parcel_id);
|
19 |
+
$this->dispatch('adminhtml/parcel/edit');
|
20 |
+
$this->assertRequestRoute('adminhtml/parcel/edit');
|
21 |
+
$this->assertLayoutBlockCreated('parcel_edit');
|
22 |
+
}
|
23 |
+
|
24 |
+
public function testSaveActionException()
|
25 |
+
{
|
26 |
+
// mock parcel so it will not be saved
|
27 |
+
$mockParcel = $this->getMock('Netresearch_Hermes_Model_Parcel', array('save'));
|
28 |
+
// define response of save method
|
29 |
+
$mockParcel->expects($this->any())
|
30 |
+
->method('save')
|
31 |
+
->will($this->throwException(new Zend_Db_Adapter_Exception()));
|
32 |
+
$this->replaceByMock('model', 'hermes/parcel', $mockParcel);
|
33 |
+
|
34 |
+
// dispatch request
|
35 |
+
$this->dispatch('adminhtml/parcel/save');
|
36 |
+
$this->assertRequestRoute('adminhtml/parcel/save');
|
37 |
+
|
38 |
+
// assert that error message gets displayed on failure
|
39 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
40 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('Receiver data could not be updated.'), $error);
|
41 |
+
}
|
42 |
+
|
43 |
+
public function testTransmitHermesParcelsActionWhenDisabled()
|
44 |
+
{
|
45 |
+
$this->markTestIncomplete('Incomplete - acl mock missing');
|
46 |
+
Mage::app()->getStore(0)->load(0)->setConfig('hermes/general/active', 0);
|
47 |
+
|
48 |
+
$uri = 'adminhtml/parcel/transmitHermesParcels';
|
49 |
+
$this->dispatch($uri);
|
50 |
+
$this->assertRequestRoute($uri);
|
51 |
+
$this->assertRequestControllerName('parcel');
|
52 |
+
$this->assertRequestActionName('transmitHermesParcels');
|
53 |
+
$this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
|
54 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
55 |
+
$this->assertEquals(
|
56 |
+
'error: '. Mage::helper('hermes')->__('Hermes is disabled in configuration. Please enable it before trying to submit parcels.'),
|
57 |
+
$error
|
58 |
+
);
|
59 |
+
}
|
60 |
+
|
61 |
+
public function testTransmitHermesParcelsActionWhenEnabled()
|
62 |
+
{
|
63 |
+
$this->markTestIncomplete('Incomplete - acl mock missing');
|
64 |
+
Mage::app()->getStore(0)->load(0)->setConfig('hermes/general/active', 1);
|
65 |
+
|
66 |
+
$this->assertEquals(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
|
67 |
+
|
68 |
+
$observer = $this->getModelMock('hermes/observer', array('transmitParcels'));
|
69 |
+
$observer->expects($this->any())
|
70 |
+
->method('transmitParcels')
|
71 |
+
->will($this->returnValue(true));
|
72 |
+
$this->replaceByMock('model', 'hermes/observer', $observer);
|
73 |
+
|
74 |
+
$uri = 'adminhtml/parcel/transmitHermesParcels';
|
75 |
+
$url = Mage::getSingleton('adminhtml/url')->getUrl($uri);
|
76 |
+
$this->dispatch($uri);
|
77 |
+
$this->assertRequestRoute($uri);
|
78 |
+
$this->assertRequestControllerName('parcel');
|
79 |
+
$this->assertRequestActionName('transmitHermesParcels');
|
80 |
+
$this->assertEquals(1, Mage::getSingleton('adminhtml/session')->getMessages()->count());
|
81 |
+
$warning = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
82 |
+
$this->assertEquals('warning: ' . sprintf(Mage::helper('hermes')->__('No parcels were transfered to Hermes.'),0), $warning);
|
83 |
+
$this->reset();
|
84 |
+
|
85 |
+
$observer->expects($this->any())
|
86 |
+
->method('transmitParcels')
|
87 |
+
->will($this->throwException(new Netresearch_Hermes_Model_Client_Exception('foo')));
|
88 |
+
$this->replaceByMock('model', 'hermes/observer', $observer);
|
89 |
+
|
90 |
+
$this->dispatch($uri);
|
91 |
+
$this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
|
92 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
93 |
+
$this->assertEquals('error: foo', $error);
|
94 |
+
$this->reset();
|
95 |
+
|
96 |
+
$observer = $this->getModelMock('hermes/observer', array('transmitParcels'));
|
97 |
+
$observer->expects($this->once())
|
98 |
+
->method('transmitParcels')
|
99 |
+
->will($this->returnValue(array('parcels' => 10, 'errors' => 2)));
|
100 |
+
$this->replaceByMock('model', 'hermes/observer', $observer);
|
101 |
+
|
102 |
+
$this->dispatch($uri);
|
103 |
+
$this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
|
104 |
+
$error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
|
105 |
+
$this->assertEquals('error: '. sprintf(Mage::helper('hermes')->__('Tried to transfer %d parcels to Hermes, but %d of them raised an error.'), 10, 2), $error);
|
106 |
+
$this->reset();
|
107 |
+
}
|
108 |
+
|
109 |
+
public function testGetLabelIsRedirectedIfParcelIdIsNotPresent()
|
110 |
+
{
|
111 |
+
$uri = 'adminhtml/parcel/getLabel/parcelId/fvbhb';
|
112 |
+
$this->dispatch($uri);
|
113 |
+
$this->assertResponseHttpCode(302);
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @loadFixture ../../../var/fixtures/parcels
|
118 |
+
*/
|
119 |
+
public function testGetLabel()
|
120 |
+
{
|
121 |
+
|
122 |
+
$uri = 'adminhtml/parcel/getLabel/parcelId/7/format/pdf';
|
123 |
+
$expected = base64_encode('Should be a pdf');
|
124 |
+
$parcelMock = $this->getModelMock('hermes/parcel', array('getLabel'));
|
125 |
+
$parcelMock->expects($this->any())
|
126 |
+
->method('getLabel')
|
127 |
+
->will($this->returnValue($expected));
|
128 |
+
|
129 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcelMock);
|
130 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcelMock);
|
131 |
+
$this->dispatch($uri);
|
132 |
+
|
133 |
+
$this->assertRequestRoute('adminhtml/parcel/getLabel');
|
134 |
+
$this->assertRequestControllerName('parcel');
|
135 |
+
$this->assertRequestActionName('getLabel');
|
136 |
+
$this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
|
137 |
+
$this->assertNotRedirect();
|
138 |
+
$this->getResponse()->getOutputBody();
|
139 |
+
$this->assertEquals($this->getResponse()->getOutputBody(), $expected);
|
140 |
+
|
141 |
+
$uri = 'adminhtml/parcel/getLabel/parcelId/7/format/jpeg';
|
142 |
+
$expected = base64_encode('Should be a pdf');
|
143 |
+
$parcelMock = $this->getModelMock('hermes/parcel', array('getLabel'));
|
144 |
+
$parcelMock->expects($this->any())
|
145 |
+
->method('getLabel')
|
146 |
+
->will($this->returnValue($expected));
|
147 |
+
|
148 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcelMock);
|
149 |
+
$this->dispatch($uri);
|
150 |
+
|
151 |
+
$this->assertRequestRoute('adminhtml/parcel/getLabel');
|
152 |
+
$this->assertRequestControllerName('parcel');
|
153 |
+
$this->assertRequestActionName('getLabel');
|
154 |
+
$this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
|
155 |
+
$this->assertNotRedirect();
|
156 |
+
$this->getResponse()->getOutputBody();
|
157 |
+
$this->assertEquals($this->getResponse()->getOutputBody(), $expected);
|
158 |
+
|
159 |
+
|
160 |
+
$parcelMock->expects($this->any())
|
161 |
+
->method('getLabel')
|
162 |
+
->will($this->throwException(new Exception('dummy exception')));
|
163 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcelMock);
|
164 |
+
$this->dispatch($uri);
|
165 |
+
$this->assertGreaterThan(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
|
166 |
+
}
|
167 |
+
|
168 |
+
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
/**
|
173 |
+
* @loadFixture ../../../var/fixtures/parcels
|
174 |
+
*/
|
175 |
+
public function testRepeatParcelTransmission()
|
176 |
+
{
|
177 |
+
/* cleanup messages */
|
178 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
179 |
+
|
180 |
+
$uri = 'adminhtml/parcel/repeatTransmission/parcelId/6';
|
181 |
+
|
182 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipmentId', 'save'));
|
183 |
+
$parcel->expects($this->once())
|
184 |
+
->method('save');
|
185 |
+
$parcel->expects($this->any())
|
186 |
+
->method('getShipmentId')
|
187 |
+
->will($this->returnValue(3));
|
188 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcel);
|
189 |
+
|
190 |
+
$this->dispatch($uri);
|
191 |
+
|
192 |
+
$this->assertRequestRoute('adminhtml/parcel/repeatTransmission');
|
193 |
+
$this->assertRequestControllerName('parcel');
|
194 |
+
$this->assertRequestActionName('repeatTransmission');
|
195 |
+
$this->assertEquals(6, $this->getRequest()->getParam('parcelId'));
|
196 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
|
197 |
+
|
198 |
+
$messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
|
199 |
+
|
200 |
+
$success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
|
201 |
+
$expectedSuccess = Mage::helper('hermes')->__('Parcel transmission was resumed');
|
202 |
+
$this->assertEquals(1, count($success));
|
203 |
+
$this->assertEquals($expectedSuccess, $success[0]->getText());
|
204 |
+
|
205 |
+
$warnings = $messages->getItemsByType(Mage_Core_Model_Message::WARNING);
|
206 |
+
$this->assertEquals(1, count($warnings));
|
207 |
+
$expectedWarning = Mage::helper('hermes')->__(
|
208 |
+
'Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
|
209 |
+
Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
|
210 |
+
);
|
211 |
+
$this->assertEquals($expectedWarning, $warnings[0]->getText());
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* @loadFixture parcels
|
216 |
+
*/
|
217 |
+
public function testCancel()
|
218 |
+
{
|
219 |
+
$uri = 'adminhtml/parcel/cancel/parcelId/8';
|
220 |
+
|
221 |
+
$client = $this->getModelMock('hermes/client', array('cancel'));
|
222 |
+
$client->expects($this->once())
|
223 |
+
->method('cancel')
|
224 |
+
->will($this->returnValue(true));
|
225 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
226 |
+
|
227 |
+
$this->dispatch($uri);
|
228 |
+
|
229 |
+
$this->assertRequestRoute('adminhtml/parcel/cancel');
|
230 |
+
$this->assertRequestControllerName('parcel');
|
231 |
+
$this->assertRequestActionName('cancel');
|
232 |
+
$this->assertEquals(8, $this->getRequest()->getParam('parcelId'));
|
233 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* @loadFixture parcels
|
238 |
+
*/
|
239 |
+
public function testCancelCatchException()
|
240 |
+
{
|
241 |
+
$uri = 'adminhtml/parcel/cancel/parcelId/7';
|
242 |
+
|
243 |
+
$client = $this->getModelMock('hermes/client', array('cancel'));
|
244 |
+
$client->expects($this->any())
|
245 |
+
->method('cancel')
|
246 |
+
->will($this->throwException(new Exception('dummy exception')));
|
247 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
248 |
+
$this->dispatch($uri);
|
249 |
+
$this->assertGreaterThan(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
|
250 |
+
}
|
251 |
+
|
252 |
+
|
253 |
+
/**
|
254 |
+
* @loadFixture ../../../var/fixtures/parcels
|
255 |
+
*/
|
256 |
+
public function testCancelNotSucceeded()
|
257 |
+
{
|
258 |
+
$uri = 'adminhtml/parcel/cancel/parcelId/7';
|
259 |
+
|
260 |
+
$client = $this->getModelMock('hermes/client', array('cancel'));
|
261 |
+
$client->expects($this->once())
|
262 |
+
->method('cancel')
|
263 |
+
->will($this->returnValue(false));
|
264 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
265 |
+
|
266 |
+
$this->dispatch($uri);
|
267 |
+
|
268 |
+
$this->assertRequestRoute('adminhtml/parcel/cancel');
|
269 |
+
$this->assertRequestControllerName('parcel');
|
270 |
+
$this->assertRequestActionName('cancel');
|
271 |
+
$this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
|
272 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/14');
|
273 |
+
}
|
274 |
+
|
275 |
+
|
276 |
+
/**
|
277 |
+
* @loadFixture parcels
|
278 |
+
*/
|
279 |
+
public function testCancelOfParcelWithoutHermesOrderNo()
|
280 |
+
{
|
281 |
+
$uri = 'adminhtml/parcel/cancel/parcelId/8';
|
282 |
+
$this->dispatch($uri);
|
283 |
+
|
284 |
+
$this->assertRequestRoute('adminhtml/parcel/cancel');
|
285 |
+
$this->assertRequestControllerName('parcel');
|
286 |
+
$this->assertRequestActionName('cancel');
|
287 |
+
$this->assertEquals(8, $this->getRequest()->getParam('parcelId'));
|
288 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* @loadFixture ../../../var/fixtures/parcels
|
293 |
+
* @loadFixture ../../../var/fixtures/shipments
|
294 |
+
*/
|
295 |
+
public function testMassCancelActionFails()
|
296 |
+
{
|
297 |
+
$uri = 'adminhtml/parcel/massCancel';
|
298 |
+
|
299 |
+
/* try to cancel not existing shipments */
|
300 |
+
$invalidParams = array(
|
301 |
+
array(
|
302 |
+
'shipmentIds' => array(),
|
303 |
+
'expectedMessages' => array(Mage::helper('hermes')->__('Please select at least one shipment')),
|
304 |
+
),
|
305 |
+
array(
|
306 |
+
'shipmentIds' => 22,
|
307 |
+
'expectedMessages' => array(Mage::helper('hermes')->__('Please select at least one shipment')),
|
308 |
+
),
|
309 |
+
array(
|
310 |
+
'shipmentIds' => array(22),
|
311 |
+
'expectedMessages' => array(Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', 1)),
|
312 |
+
),
|
313 |
+
array(
|
314 |
+
'shipmentIds' => array(10),
|
315 |
+
'expectedMessages' => array(
|
316 |
+
Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', 1),
|
317 |
+
)
|
318 |
+
),
|
319 |
+
);
|
320 |
+
foreach ($invalidParams as $invalidCall) {
|
321 |
+
$shipmentIds = $invalidCall['shipmentIds'];
|
322 |
+
$expectedMessages = $invalidCall['expectedMessages'];
|
323 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
324 |
+
$this->getRequest()->setPost('shipment_ids', $shipmentIds);
|
325 |
+
$this->dispatch($uri);
|
326 |
+
|
327 |
+
$this->assertRequestRoute('adminhtml/parcel/massCancel');
|
328 |
+
$this->assertRequestControllerName('parcel');
|
329 |
+
$this->assertRequestActionName('massCancel');
|
330 |
+
$this->assertEquals($shipmentIds, $this->getRequest()->getParam('shipment_ids'));
|
331 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/index');
|
332 |
+
|
333 |
+
$messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
|
334 |
+
$success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
|
335 |
+
$error = $messages->getItemsByType(Mage_Core_Model_Message::ERROR);
|
336 |
+
$this->assertEquals(count($expectedMessages), count($error), var_export($shipmentIds, true));
|
337 |
+
foreach ($expectedMessages as $expectedMessage) {
|
338 |
+
$this->assertEquals(
|
339 |
+
'error: ' . $expectedMessage,
|
340 |
+
current($error)->toString()
|
341 |
+
);
|
342 |
+
next($error);
|
343 |
+
}
|
344 |
+
$this->assertEquals(array(), $success);
|
345 |
+
}
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* @loadFixture parcels
|
350 |
+
*/
|
351 |
+
public function testMassCancelActionSuccess()
|
352 |
+
{
|
353 |
+
$this->markTestSkipped('skipped due to errors');
|
354 |
+
$uri = 'adminhtml/parcel/massCancel';
|
355 |
+
|
356 |
+
$commentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
|
357 |
+
$commentsCollection->expects($this->any())
|
358 |
+
->method('save')
|
359 |
+
->will($this->returnSelf());
|
360 |
+
$this->replaceByMock('resource_model', 'sales/order_shipment_comment_collection', $commentsCollection);
|
361 |
+
|
362 |
+
/* cancel shipment */
|
363 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
364 |
+
$this->getRequest()->setPost('shipment_ids', array(3));
|
365 |
+
$this->dispatch($uri);
|
366 |
+
|
367 |
+
$this->assertRequestRoute('adminhtml/parcel/massCancel');
|
368 |
+
$this->assertRequestControllerName('parcel');
|
369 |
+
$this->assertRequestActionName('massCancel');
|
370 |
+
$this->assertEquals(array(3), $this->getRequest()->getParam('shipment_ids'));
|
371 |
+
$this->assertRedirectTo('adminhtml/sales_shipment/index');
|
372 |
+
|
373 |
+
$messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
|
374 |
+
$success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
|
375 |
+
$error = $messages->getItemsByType(Mage_Core_Model_Message::ERROR);
|
376 |
+
|
377 |
+
$this->assertEquals(0, count($error));
|
378 |
+
$this->assertEquals(1, count($success));
|
379 |
+
$this->assertEquals(
|
380 |
+
'success: ' . Mage::helper('hermes')->__('Canceled %s Hermes shipments', 1),
|
381 |
+
current($success)->toString()
|
382 |
+
);
|
383 |
+
}
|
384 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/.gitkeep
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
directory is mandatory for shared fixtures…
|
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/parcels.yaml
ADDED
@@ -0,0 +1,58 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 46
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: EUR
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
|
12 |
+
sales/shipment:
|
13 |
+
- entity_id: 2
|
14 |
+
increment_id: 1000000001
|
15 |
+
order_id: 31
|
16 |
+
shipping_address_id: 46
|
17 |
+
|
18 |
+
- entity_id: 3
|
19 |
+
increment_id: 1000000002
|
20 |
+
order_id: 31
|
21 |
+
shipping_address_id: 46
|
22 |
+
|
23 |
+
hermes/parcel:
|
24 |
+
- id: 7
|
25 |
+
shipment_id: 2
|
26 |
+
shipping_method: 'flatrate_flatrate'
|
27 |
+
receiver_firstname: 'Hubertus'
|
28 |
+
receiver_postcode: '04229'
|
29 |
+
receiver_lastname: 'von Fürstenberg'
|
30 |
+
receiver_address_add: '21. Etage'
|
31 |
+
receiver_street: 'An der Tabaksmühle 3a'
|
32 |
+
receiver_city: 'Leipzig'
|
33 |
+
receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
34 |
+
receiver_country_code: 'DEU'
|
35 |
+
parcel_class: 'M'
|
36 |
+
includeCashOnDelivery: false
|
37 |
+
status_code: 2 # STATUS_PROCESSED
|
38 |
+
|
39 |
+
- id: 8
|
40 |
+
shipment_id: 3
|
41 |
+
hermes_order_no: 8
|
42 |
+
status_code: 2 # STATUS_PROCESSED
|
43 |
+
|
44 |
+
sales/order_address:
|
45 |
+
- entity_id: 45
|
46 |
+
parent_id: 31
|
47 |
+
address_type: 'shipping'
|
48 |
+
firstname: 'Hubertus'
|
49 |
+
postcode: '04229'
|
50 |
+
lastname: 'Fürstenberg'
|
51 |
+
street: 'An der Tabaksmühle 3a'
|
52 |
+
city: 'Leipzig'
|
53 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
54 |
+
country_id: 'DE'
|
55 |
+
prefix: 'Prof. Dr.'
|
56 |
+
middlename: 'von'
|
57 |
+
suffix: 'MdL'
|
58 |
+
company: 'Verein zur Abschaffung'
|
app/code/community/Netresearch/Hermes/Test/Controller/PermissionsDeniedControllerTest.php
ADDED
@@ -0,0 +1,34 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_Test_Controller_PermissionsDeniedControllerTest
|
4 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
5 |
+
{
|
6 |
+
protected function setUp()
|
7 |
+
{
|
8 |
+
parent::setUp();
|
9 |
+
$this->mockAdminUserSession();
|
10 |
+
}
|
11 |
+
|
12 |
+
protected function _allowGlobalAccess()
|
13 |
+
{
|
14 |
+
$session = $this->getModelMock('admin/session', array('isAllowed'));
|
15 |
+
$session->expects($this->any())
|
16 |
+
->method('isAllowed')
|
17 |
+
->will($this->returnCallback(array($this, 'fakePermission')));
|
18 |
+
$this->replaceByMock('singleton', 'admin/session', $session);
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function fakePermission($path)
|
22 |
+
{
|
23 |
+
return 'sales/shipment' === $path;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function testCheckSectionAllowed()
|
27 |
+
{
|
28 |
+
$this->dispatch('adminhtml/parcel/transmitHermesParcels');
|
29 |
+
$this->assertRedirect();
|
30 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
31 |
+
}
|
32 |
+
|
33 |
+
|
34 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest.php
ADDED
@@ -0,0 +1,221 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes Shipment Controller Test
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Controller_ShipmentControllerTest
|
32 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
33 |
+
{
|
34 |
+
protected function setUp()
|
35 |
+
{
|
36 |
+
parent::setUp();
|
37 |
+
$this->mockAdminUserSession();
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @test
|
42 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
43 |
+
*/
|
44 |
+
public function createShipmentActionFailsDueToWrongParameters()
|
45 |
+
{
|
46 |
+
// mock parcel so it will not be saved
|
47 |
+
$mockOrderHelper = $this->getMock(
|
48 |
+
'Netresearch_Hermes_Helper_Order',
|
49 |
+
array('shipOrders')
|
50 |
+
);
|
51 |
+
$mockOrderHelper->expects($this->any())
|
52 |
+
->method('shipOrders')
|
53 |
+
->will($this->returnValue(array('success' => array(),
|
54 |
+
'errors' => array('foo')
|
55 |
+
)));
|
56 |
+
|
57 |
+
$this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
|
58 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
59 |
+
|
60 |
+
// test for errors if no order_ids passed to massAction
|
61 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
62 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('error');
|
63 |
+
$this->assertGreaterThan(0, count($errorMessages));
|
64 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('No order was selected!'), current($errorMessages)->toString());
|
65 |
+
$this->getRequest()->setPost('order_ids', array());
|
66 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
67 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
|
68 |
+
$successMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
|
69 |
+
$this->assertGreaterThan(0, count($errorMessages));
|
70 |
+
$this->assertEquals(0, count($successMessages));
|
71 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('No order was selected!'), current($errorMessages)->toString());
|
72 |
+
|
73 |
+
// test for errors if invalid order_ids were passed to mass action
|
74 |
+
$invalidOrderIds = array(1,2,3,4);
|
75 |
+
$this->getRequest()->setPost('order_ids', $invalidOrderIds);
|
76 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
77 |
+
$this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
|
78 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
|
79 |
+
$successMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
|
80 |
+
$this->assertEquals(0, count($successMessages));
|
81 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', sizeof($invalidOrderIds)),
|
82 |
+
current($errorMessages)->toString());
|
83 |
+
|
84 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
85 |
+
$messages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('error');
|
86 |
+
$this->assertGreaterThan(0, count($messages));
|
87 |
+
}
|
88 |
+
|
89 |
+
|
90 |
+
/**
|
91 |
+
*
|
92 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
93 |
+
*/
|
94 |
+
public function testCreateShipmentActionSucceeded()
|
95 |
+
{
|
96 |
+
|
97 |
+
// mock parcel so it will not be saved
|
98 |
+
$mockOrderHelper = $this->getMock(
|
99 |
+
'Netresearch_Hermes_Helper_Order',
|
100 |
+
array('shipOrders')
|
101 |
+
);
|
102 |
+
|
103 |
+
// test for success messages if valid order_id (and order) is passed to mass action
|
104 |
+
$mockOrderHelper->expects($this->any())
|
105 |
+
->method('shipOrders')
|
106 |
+
->will($this->returnValue(array(
|
107 |
+
'success' => array('foo'),
|
108 |
+
'errors' => array()
|
109 |
+
)));
|
110 |
+
|
111 |
+
$this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
|
112 |
+
|
113 |
+
$this->getRequest()->setPost('order_ids', array(36));
|
114 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
115 |
+
$successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
|
116 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
|
117 |
+
$this->assertEquals(0, count($errorMessages));
|
118 |
+
$this->assertGreaterThan(0, count($successMessages));
|
119 |
+
$this->assertEquals('success: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) created', 1),
|
120 |
+
current($successMessages)->toString());
|
121 |
+
|
122 |
+
$warningMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('warning');
|
123 |
+
$this->assertEquals(
|
124 |
+
'warning: ' . Mage::helper('hermes')->__(
|
125 |
+
'Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
|
126 |
+
Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
|
127 |
+
), current($warningMessages)->toString()
|
128 |
+
);
|
129 |
+
|
130 |
+
$this->assertRedirect();
|
131 |
+
}
|
132 |
+
|
133 |
+
|
134 |
+
/**
|
135 |
+
*
|
136 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
137 |
+
*/
|
138 |
+
public function testCreateShipmentActionFailedDueToInvalidParcel()
|
139 |
+
{
|
140 |
+
$this->markTestIncomplete('Incomplete - acl mock missing');
|
141 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
142 |
+
|
143 |
+
$mockOrderHelper = $this->getMock(
|
144 |
+
'Netresearch_Hermes_Helper_Order',
|
145 |
+
array('shipOrders')
|
146 |
+
);
|
147 |
+
|
148 |
+
$mockOrderHelper->expects($this->any())
|
149 |
+
->method('shipOrders')
|
150 |
+
->will($this->returnValue(array('success' => array(),
|
151 |
+
'errors' => array('foo')
|
152 |
+
)));
|
153 |
+
|
154 |
+
$this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
|
155 |
+
|
156 |
+
$this->getRequest()->setPost('order_ids', array(37));
|
157 |
+
Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
|
158 |
+
|
159 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
160 |
+
|
161 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
|
162 |
+
$successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
|
163 |
+
$this->assertEquals(2, count($errorMessages));
|
164 |
+
$this->assertEquals(0, count($successMessages));
|
165 |
+
reset($errorMessages);
|
166 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('Order 0 threw error:', 1) . ' foo',
|
167 |
+
current($errorMessages)->toString());
|
168 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', 1),
|
169 |
+
next($errorMessages)->toString());
|
170 |
+
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
*
|
175 |
+
* tests with one valid order and one invalid order
|
176 |
+
*
|
177 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
178 |
+
*/
|
179 |
+
public function testMassActionPartiallySucceeded()
|
180 |
+
{
|
181 |
+
$this->markTestIncomplete('Incomplete - acl mock missing');
|
182 |
+
$mockOrderHelper = $this->getMock(
|
183 |
+
'Netresearch_Hermes_Helper_Order',
|
184 |
+
array('shipOrders')
|
185 |
+
);
|
186 |
+
|
187 |
+
$mockOrderHelper->expects($this->any())
|
188 |
+
->method('shipOrders')
|
189 |
+
->will($this->returnValue(array('success' => array('foo'),
|
190 |
+
'errors' => array('foo')
|
191 |
+
)));
|
192 |
+
|
193 |
+
$this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
|
194 |
+
|
195 |
+
$this->getRequest()->setPost('order_ids', array(36, 37));
|
196 |
+
Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
|
197 |
+
|
198 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
199 |
+
$messages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
|
200 |
+
|
201 |
+
$this->assertGreaterThan(0, count($messages));
|
202 |
+
|
203 |
+
$this->getRequest()->setPost('order_ids', array(37));
|
204 |
+
Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
|
205 |
+
$this->dispatch('adminhtml/shipment/createShipments');
|
206 |
+
|
207 |
+
$errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
|
208 |
+
$this->assertEquals(2, count($errorMessages));
|
209 |
+
reset($errorMessages);
|
210 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('Order 0 threw error:', 1) . ' foo',
|
211 |
+
current($errorMessages)->toString());
|
212 |
+
$this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', 1),
|
213 |
+
next($errorMessages)->toString());
|
214 |
+
|
215 |
+
$successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
|
216 |
+
$this->assertEquals(1, count($successMessages));
|
217 |
+
$this->assertEquals('success: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) created', 1),
|
218 |
+
current($successMessages)->toString());
|
219 |
+
}
|
220 |
+
|
221 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/dummy
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Helper/DataTest.php
ADDED
@@ -0,0 +1,9 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
class Netresearch_Hermes_Test_Helper_DataTest extends EcomDev_PHPUnit_Test_Case
|
3 |
+
{
|
4 |
+
public function testTrue()
|
5 |
+
{
|
6 |
+
$this->assertTrue(true);
|
7 |
+
}
|
8 |
+
}
|
9 |
+
|
app/code/community/Netresearch/Hermes/Test/Helper/OrderTest.php
ADDED
@@ -0,0 +1,326 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
class Netresearch_Hermes_Test_Helper_OrderTest extends EcomDev_PHPUnit_Test_Case
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* @test
|
6 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
7 |
+
*/
|
8 |
+
public function shipOrders()
|
9 |
+
{
|
10 |
+
$parcel = Mage::getModel('hermes/parcel');
|
11 |
+
$parcel->setId(777);
|
12 |
+
|
13 |
+
$shipment = Mage::getModel('sales/order_shipment');
|
14 |
+
$shipment->setId(7777);
|
15 |
+
|
16 |
+
$orders = Mage::getModel('sales/order')->getCollection();
|
17 |
+
|
18 |
+
|
19 |
+
$helperMock = $this->getHelperMock('hermes/order', array('createShipment', 'createParcel', 'orderCanBeShipped'));
|
20 |
+
$helperMock->expects($this->atLeastOnce())
|
21 |
+
->method('createShipment')
|
22 |
+
->with($this->isInstanceOf('Mage_Sales_Model_Order'))
|
23 |
+
->will($this->returnValue($shipment));
|
24 |
+
$helperMock->expects($this->atLeastOnce())
|
25 |
+
->method('createParcel')
|
26 |
+
->will($this->returnValue($parcel));
|
27 |
+
$helperMock->expects($this->any())
|
28 |
+
->method('orderCanBeShipped')
|
29 |
+
->will($this->returnValue(true));
|
30 |
+
|
31 |
+
$this->replaceByMock('helper', 'hermes/order', $helperMock);
|
32 |
+
|
33 |
+
$shipmentMock = $this->getModelMock('sales/order_shipment', array('sendEmail'));
|
34 |
+
$shipmentMock->expects($this->any())
|
35 |
+
->method('sendEmail')
|
36 |
+
->will($this->returnValue(true));
|
37 |
+
$this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
|
38 |
+
|
39 |
+
$helper = Mage::helper('hermes/order');
|
40 |
+
$result = $helper->shipOrders($orders);
|
41 |
+
$this->assertEquals(array(
|
42 |
+
'success' => array(
|
43 |
+
100000055 => null,
|
44 |
+
100000057 => null,
|
45 |
+
100000058 => null,
|
46 |
+
100000059 => null,
|
47 |
+
100000060 => null,
|
48 |
+
100000061 => null,
|
49 |
+
100000062 => null,
|
50 |
+
100000063 => null
|
51 |
+
),
|
52 |
+
'errors' => array(100000056 => Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.'))
|
53 |
+
), $result);
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @test
|
59 |
+
*/
|
60 |
+
public function createParcel()
|
61 |
+
{
|
62 |
+
$this->markTestIncomplete("Not a single assertion here.");
|
63 |
+
|
64 |
+
/** @var Netresearch_Hermes_Helper_Validate_Order */
|
65 |
+
$validationHelper = $this->getHelperMock('hermes/validate_order', array(
|
66 |
+
'setOrder',
|
67 |
+
'isShippedAsCod',
|
68 |
+
'isValidHermesShipment'
|
69 |
+
));
|
70 |
+
|
71 |
+
$validationHelper->expects($this->any())
|
72 |
+
->method('isShippedAsCod')
|
73 |
+
->will($this->returnValue(true));
|
74 |
+
|
75 |
+
|
76 |
+
/** @var Mage_Sales_Model_Order */
|
77 |
+
$order = $this->getModelMock('sales/order', array('getGrandTotal'));
|
78 |
+
$order->expects($this->any())->method('getGrandTotal')->will($this->returnValue(33));
|
79 |
+
$this->replaceByMock('model', 'sales/order', $order);
|
80 |
+
|
81 |
+
/** @var Mage_Sales_Model_Order_Shipment */
|
82 |
+
$shipment = $this->getModelMock('sales/order_shipment', array('getOrder'));
|
83 |
+
$shipment->expects($this->any())->method('getOrder')->will($this->returnValue($order));
|
84 |
+
$this->replaceByMock('model', 'sales/order_shipment', $shipment);
|
85 |
+
|
86 |
+
$validationHelper->expects($this->any())
|
87 |
+
->method('setOrder')
|
88 |
+
->with($this->equalTo($order))
|
89 |
+
->will($this->returnSelf());
|
90 |
+
|
91 |
+
$this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
|
92 |
+
|
93 |
+
/** @var Netresearch_Hermes_Model_Parcel */
|
94 |
+
$parcel = $this->getModelMock('hermes/parcel', array(
|
95 |
+
'setShipment',
|
96 |
+
'setParcelClass',
|
97 |
+
'setStatusCode',
|
98 |
+
'setIncludeCashOnDelivery',
|
99 |
+
'setAmountCashOnDeliveryEurocent',
|
100 |
+
'save'
|
101 |
+
));
|
102 |
+
$parcel->expects($this->any())
|
103 |
+
->method('setShipment')
|
104 |
+
->will($this->returnSelf());
|
105 |
+
$parcel->expects($this->any())
|
106 |
+
->method('setParcelClass')
|
107 |
+
->with('XXXXL')
|
108 |
+
->will($this->returnSelf());
|
109 |
+
$parcel->expects($this->any())
|
110 |
+
->method('setStatusCode')
|
111 |
+
->will($this->returnSelf());
|
112 |
+
$parcel->expects($this->any())
|
113 |
+
->method('setIncludeCashOnDelivery')
|
114 |
+
->will($this->returnSelf());
|
115 |
+
$parcel->expects($this->any())
|
116 |
+
->method('setAmountCashOnDeliveryEurocent')
|
117 |
+
->will($this->returnSelf());
|
118 |
+
$parcel->expects($this->any())
|
119 |
+
->method('save')
|
120 |
+
->will($this->returnSelf());
|
121 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcel);
|
122 |
+
|
123 |
+
Mage::helper('hermes/order')->createParcel($shipment, 'XXXXL');
|
124 |
+
|
125 |
+
/** @var Netresearch_Hermes_Helper_Validate_Order */
|
126 |
+
$validationHelper = $this->getHelperMock('hermes/validate_order', array(
|
127 |
+
'setOrder',
|
128 |
+
'isShippedAsCod'
|
129 |
+
));
|
130 |
+
$validationHelper->expects($this->any())
|
131 |
+
->method('setOrder')
|
132 |
+
->with($this->equalTo($order))
|
133 |
+
->will($this->returnSelf());
|
134 |
+
$validationHelper->expects($this->any())
|
135 |
+
->method('isShippedAsCod')
|
136 |
+
->will($this->returnValue(false));
|
137 |
+
$this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
|
138 |
+
|
139 |
+
/** @var Netresearch_Hermes_Model_Parcel */
|
140 |
+
$parcel = $this->getModelMock('hermes/parcel', array(
|
141 |
+
'setShipment',
|
142 |
+
'setParcelClass',
|
143 |
+
'setStatusCode',
|
144 |
+
'setIncludeCashOnDelivery',
|
145 |
+
'setAmountCashOnDeliveryEurocent',
|
146 |
+
'save'
|
147 |
+
));
|
148 |
+
$parcel->expects($this->any())
|
149 |
+
->method('setShipment')
|
150 |
+
->will($this->returnSelf());
|
151 |
+
$parcel->expects($this->any())
|
152 |
+
->method('setParcelClass')
|
153 |
+
->with(null)
|
154 |
+
->will($this->returnSelf());
|
155 |
+
$parcel->expects($this->any())
|
156 |
+
->method('setStatusCode')
|
157 |
+
->will($this->returnSelf());
|
158 |
+
$parcel->expects($this->any())
|
159 |
+
->method('save')
|
160 |
+
->will($this->returnSelf());
|
161 |
+
$parcel->expects($this->never())
|
162 |
+
->method('setIncludeCashOnDelivery');
|
163 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcel);
|
164 |
+
|
165 |
+
$parcel = Mage::helper('hermes/order')->createParcel($shipment);
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* @test
|
170 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
171 |
+
*/
|
172 |
+
public function testGetOrderCollection()
|
173 |
+
{
|
174 |
+
$config = $this->getModelMock('hermes/config', array(
|
175 |
+
'getAutocreateOrderStatuses',
|
176 |
+
'getInstallationDate',
|
177 |
+
'getMaxDaysInPast'
|
178 |
+
));
|
179 |
+
$config->expects($this->any())
|
180 |
+
->method('getAutocreateOrderStatuses')
|
181 |
+
->will($this->returnValue(array('processed', 'pending')));
|
182 |
+
$config->expects($this->any())
|
183 |
+
->method('getInstallationDate')
|
184 |
+
->will($this->returnValue('2011-01-01'));
|
185 |
+
|
186 |
+
// calculation of difference from current date to one to the fixtures (order_id: 38)
|
187 |
+
$oldDate = strtotime('2011-01-02') ;
|
188 |
+
$currentDate = strtotime(date('Y-m-d')) ;
|
189 |
+
|
190 |
+
$daysDiff = ($currentDate - $oldDate) / 86400;
|
191 |
+
$config->expects($this->any())
|
192 |
+
->method('getMaxDaysInPast')
|
193 |
+
->will($this->returnValue($daysDiff));
|
194 |
+
|
195 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
196 |
+
|
197 |
+
$orderHelper = Mage::helper('hermes/order');
|
198 |
+
$collection = $orderHelper->getOrderCollection();
|
199 |
+
$this->assertEquals(1, $collection->count());
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* @test
|
204 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
205 |
+
*/
|
206 |
+
public function testCollectionIsEmptyIfAutocreateStatesAreMisconfigured()
|
207 |
+
{
|
208 |
+
$config = $this->getModelMock('hermes/config', array(
|
209 |
+
'getAutocreateOrderStatuses',
|
210 |
+
'getInstallationDate',
|
211 |
+
));
|
212 |
+
|
213 |
+
$config->expects($this->any())
|
214 |
+
->method('getAutocreateOrderStatuses')
|
215 |
+
->will($this->returnValue(array()));
|
216 |
+
|
217 |
+
$config->expects($this->any())
|
218 |
+
->method('getInstallationDate')
|
219 |
+
->will($this->returnValue('2011-01-01'));
|
220 |
+
|
221 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
222 |
+
|
223 |
+
$orderHelper = Mage::helper('hermes/order');
|
224 |
+
$collection = $orderHelper->getOrderCollection();
|
225 |
+
$this->assertEquals(0, $collection->count());
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* @test
|
230 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
231 |
+
*/
|
232 |
+
public function testCollectionIsEmptyIfOrdersWereBeforeInstallationDate()
|
233 |
+
{
|
234 |
+
$config = $this->getModelMock('hermes/config', array(
|
235 |
+
'getAutocreateOrderStatuses',
|
236 |
+
'getInstallationDate',
|
237 |
+
));
|
238 |
+
|
239 |
+
$config->expects($this->any())
|
240 |
+
->method('getAutocreateOrderStatuses')
|
241 |
+
->will($this->returnValue(array('processed', 'pending')));
|
242 |
+
|
243 |
+
$config->expects($this->any())
|
244 |
+
->method('getInstallationDate')
|
245 |
+
->will($this->returnValue('2020-01-01'));
|
246 |
+
|
247 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
248 |
+
|
249 |
+
$orderHelper = Mage::helper('hermes/order');
|
250 |
+
$collection = $orderHelper->getOrderCollection();
|
251 |
+
$this->assertEquals(0, $collection->count());
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* @test
|
256 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
257 |
+
*/
|
258 |
+
public function testGetQtys()
|
259 |
+
{
|
260 |
+
$orderHelper = Mage::helper('hermes/order');
|
261 |
+
$order = Mage::getModel('sales/order')->load(38);
|
262 |
+
$this->assertEquals(0, count($orderHelper->getQtys($order)));
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* @test
|
267 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
268 |
+
*/
|
269 |
+
public function testIsPartialShipment()
|
270 |
+
{
|
271 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
272 |
+
$helper = Mage::helper('hermes/order');
|
273 |
+
$this->assertFalse($helper->isPartialShipment($shipment));
|
274 |
+
|
275 |
+
|
276 |
+
$validationHelper = $this->getHelperMock('hermes/validate_order', array('isShippedAsCod'));
|
277 |
+
$validationHelper->expects($this->any())
|
278 |
+
->method('isShippedAsCod')
|
279 |
+
->will($this->returnValue(true));
|
280 |
+
$this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
|
281 |
+
|
282 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(9);
|
283 |
+
$this->assertFalse($helper->isPartialShipment($shipment));
|
284 |
+
|
285 |
+
|
286 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
287 |
+
$order = $shipment->getOrder();
|
288 |
+
|
289 |
+
$item1 = new Mage_Sales_Model_Order_Item();
|
290 |
+
$item1->setSku('0815');
|
291 |
+
$item1->setParentItemId('');
|
292 |
+
$item1->setPrice(100);
|
293 |
+
$item1->setQtyOrdered(1);
|
294 |
+
$item1->setIsVirtual(0);
|
295 |
+
$item2 = new Mage_Sales_Model_Order_Item();
|
296 |
+
$item2->setSku('4711');
|
297 |
+
$item2->setParentItemId('');
|
298 |
+
$item2->setPrice(200);
|
299 |
+
$item2->setQtyOrdered(10);
|
300 |
+
$item2->setIsVirtual(0);
|
301 |
+
|
302 |
+
$order
|
303 |
+
->addItem($item1)
|
304 |
+
->addItem($item2);
|
305 |
+
|
306 |
+
$shipmentItem1 = new Mage_Sales_Model_Order_Shipment_Item();
|
307 |
+
$shipmentItem1->setSku('0815');
|
308 |
+
$shipmentItem1->setPrice(100);
|
309 |
+
$shipmentItem1->setOrderItem($item1);
|
310 |
+
$shipmentItem1->getOrderItem()->setQtyShipped(1);
|
311 |
+
$shipmentItem2 = new Mage_Sales_Model_Order_Shipment_Item();
|
312 |
+
$shipmentItem2->setSku('4711');
|
313 |
+
$shipmentItem2->setPrice(100);
|
314 |
+
$shipmentItem2->setOrderItem($item2);
|
315 |
+
|
316 |
+
$shipment
|
317 |
+
->addItem($shipmentItem1)
|
318 |
+
->addItem($shipmentItem2);
|
319 |
+
|
320 |
+
$shipment->setOrder($order);
|
321 |
+
|
322 |
+
$this->assertTrue($helper->isPartialShipment($shipment));
|
323 |
+
}
|
324 |
+
|
325 |
+
}
|
326 |
+
|
app/code/community/Netresearch/Hermes/Test/Helper/OrderTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest.php
ADDED
@@ -0,0 +1,119 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
class Netresearch_Hermes_Test_Helper_Validate_OrderTest extends EcomDev_PHPUnit_Test_Case
|
3 |
+
{
|
4 |
+
protected $helper;
|
5 |
+
protected $config;
|
6 |
+
protected $store;
|
7 |
+
|
8 |
+
protected function setUp()
|
9 |
+
{
|
10 |
+
parent::setUp();
|
11 |
+
$this->helper = Mage::helper('hermes/validate_order');
|
12 |
+
$this->config = Mage::getModel('hermes/config');
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @test
|
18 |
+
* @loadFixture ../../../../var/fixtures/orderList1
|
19 |
+
*/
|
20 |
+
public function testGetOrder()
|
21 |
+
{
|
22 |
+
$order = Mage::getModel('sales/order')->load(31);
|
23 |
+
$this->helper->setOrder($order);
|
24 |
+
$this->assertEquals(100000055, $this->helper->getOrder()->getIncrementId());
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @test
|
29 |
+
* @loadFixture ../../../../var/fixtures/orderList1
|
30 |
+
*/
|
31 |
+
public function testIsShippedAsCod()
|
32 |
+
{
|
33 |
+
$order = Mage::getModel('sales/order')->load(31);
|
34 |
+
$this->helper->setOrder($order);
|
35 |
+
$this->assertFalse($this->helper->isShippedAsCod());
|
36 |
+
|
37 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
38 |
+
$this->assertTrue($this->helper->isShippedAsCod());
|
39 |
+
|
40 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @test
|
45 |
+
* @loadFixture ../../../../var/fixtures/orderList1
|
46 |
+
*/
|
47 |
+
public function testIsValidHermesShipment()
|
48 |
+
{
|
49 |
+
$order = Mage::getModel('sales/order')->load(31);
|
50 |
+
$this->helper->setOrder($order);
|
51 |
+
$this->assertTrue($this->helper->isValidHermesShipment());
|
52 |
+
$this->assertEquals(0, count($this->helper->getValidationErrors()), "An validation error was encountered");
|
53 |
+
$this->helper->resetValidationErrors();
|
54 |
+
|
55 |
+
//set checkmo to cod and amount < 2500
|
56 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
57 |
+
$this->assertTrue($this->helper->isValidHermesShipment());
|
58 |
+
$this->assertEquals(0, count($this->helper->getValidationErrors()), "An validation error was encountered");
|
59 |
+
$this->helper->resetValidationErrors();
|
60 |
+
|
61 |
+
//set checkmo to cod and an amount > 2500
|
62 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
63 |
+
$order->setGrandTotal(2501);
|
64 |
+
$this->helper->setOrder($order);
|
65 |
+
$this->assertFalse($this->helper->isValidHermesShipment());
|
66 |
+
$this->assertEquals(1, count($this->helper->getValidationErrors()), "More/less then one validation error was encountered");
|
67 |
+
$this->helper->resetValidationErrors();
|
68 |
+
|
69 |
+
//check usa customer
|
70 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
71 |
+
$order = Mage::getModel('sales/order')->load(32);
|
72 |
+
$this->helper->setOrder($order);
|
73 |
+
$this->assertFalse($this->helper->isValidHermesShipment());
|
74 |
+
$this->assertEquals(1, count($this->helper->getValidationErrors()), "More/less then one validation error was encountered");
|
75 |
+
$this->helper->resetValidationErrors();
|
76 |
+
|
77 |
+
//check usa customer with cod
|
78 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
79 |
+
$this->assertFalse($this->helper->isValidHermesShipment());
|
80 |
+
$this->assertEquals(2, count($this->helper->getValidationErrors()), "More/less then two validation error was encountered");
|
81 |
+
$this->helper->resetValidationErrors();
|
82 |
+
|
83 |
+
//check usa customer with cod and amount < 2500
|
84 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
|
85 |
+
$order->setGrandTotal(2501);
|
86 |
+
$this->helper->setOrder($order);
|
87 |
+
$this->assertFalse($this->helper->isValidHermesShipment());
|
88 |
+
$this->assertEquals(3, count($this->helper->getValidationErrors()), "More/less then three validation error was encountered");
|
89 |
+
$this->helper->resetValidationErrors();
|
90 |
+
|
91 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* @test
|
96 |
+
*/
|
97 |
+
public function isCreatedAfterHermesInstallation()
|
98 |
+
{
|
99 |
+
$order = Mage::getModel('sales/order');
|
100 |
+
$order->setCreatedAt('2012-04-01');
|
101 |
+
$this->helper->setOrder($order);
|
102 |
+
|
103 |
+
$config = $this->getModelMock('hermes/config', array('getInstallationDate'));
|
104 |
+
$config->expects($this->any())
|
105 |
+
->method('getInstallationDate')
|
106 |
+
->will($this->returnValue(strtotime('2. April 2012')));
|
107 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
108 |
+
|
109 |
+
$this->assertFalse($this->helper->isCreatedAfterHermesInstallation());
|
110 |
+
|
111 |
+
$order->setCreatedAt('2012-04-03');
|
112 |
+
$this->helper->setOrder($order);
|
113 |
+
|
114 |
+
|
115 |
+
|
116 |
+
$this->assertTrue($this->helper->isCreatedAfterHermesInstallation());
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Netresearch/Hermes/Test/Model/ClientTest.php
ADDED
@@ -0,0 +1,464 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes API client unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_ClientTest extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var Mage_Core_Model_Store
|
35 |
+
*/
|
36 |
+
protected $store;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var Netresearch_Hermes_Model_Client
|
40 |
+
*/
|
41 |
+
protected $client;
|
42 |
+
protected $mockClient;
|
43 |
+
|
44 |
+
public function setUp()
|
45 |
+
{
|
46 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
47 |
+
$this->client = Mage::getModel('hermes/client');
|
48 |
+
/* mock soap client */
|
49 |
+
$this->mockClient = $this->getMock(
|
50 |
+
'Netresearch_Hermes_Model_Client_Soap',
|
51 |
+
array('propsCheckAvailability', 'propsUserLogin', 'getLastSoapOutputHeaderObjects', 'getLastResponse', 'propsProductlnformation', 'propsListOfProductsATG'),
|
52 |
+
array(),
|
53 |
+
'SoapClient' . md5(time().rand()),
|
54 |
+
true
|
55 |
+
);
|
56 |
+
|
57 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable'));
|
58 |
+
$client->expects($this->any())
|
59 |
+
->method('isAvailable')
|
60 |
+
->will($this->returnValue(true));
|
61 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
62 |
+
$this->availableClient = Mage::getModel('hermes/client');
|
63 |
+
}
|
64 |
+
|
65 |
+
public function testGetSoapClient()
|
66 |
+
{
|
67 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
68 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
69 |
+
|
70 |
+
$client = Mage::getModel('hermes/client');
|
71 |
+
$soapClient = $client->getSoapClient('userToken', 'partnerToken');
|
72 |
+
/* @var $soapClient Netresearch_Hermes_Model_Client_Soap */
|
73 |
+
|
74 |
+
// check if we get back a soap client
|
75 |
+
$this->assertInstanceOf(
|
76 |
+
'Netresearch_Hermes_Model_Client_Soap',
|
77 |
+
$soapClient
|
78 |
+
);
|
79 |
+
|
80 |
+
// check if soap headers are set accordingly
|
81 |
+
// -> currently not possible as soap headers are, once set, not readable
|
82 |
+
}
|
83 |
+
|
84 |
+
public function testClientAlias()
|
85 |
+
{
|
86 |
+
$this->assertModelAlias('hermes/client', 'Netresearch_Hermes_Model_Client');
|
87 |
+
$this->assertNotEmpty(Mage::getModel('hermes/client'), 'Client not available');
|
88 |
+
}
|
89 |
+
|
90 |
+
public function testWsdlLoading()
|
91 |
+
{
|
92 |
+
$this->store->setConfig('hermes/general/testmode', 0);
|
93 |
+
$prodWsdl = Mage::getModel('hermes/config')->getWsdl();
|
94 |
+
$this->assertFileExists(Mage::getModel('hermes/config')->getWsdl());
|
95 |
+
|
96 |
+
$this->store->setConfig('hermes/general/testmode', 1);
|
97 |
+
$testWsdl = Mage::getModel('hermes/config')->getWsdl();
|
98 |
+
$this->assertFileExists(Mage::getModel('hermes/config')->getWsdl());
|
99 |
+
|
100 |
+
$this->assertNotEquals($testWsdl, $prodWsdl, 'expected to find differing wsdl files for prod and test');
|
101 |
+
return;
|
102 |
+
$this->markTestIncomplete(
|
103 |
+
'This test has not been implemented yet.'
|
104 |
+
);
|
105 |
+
return;
|
106 |
+
|
107 |
+
$this->assertFileExists(Mage::getModel('hermes/config')->getTestWsdl());
|
108 |
+
}
|
109 |
+
|
110 |
+
public function testApiIsAvailable()
|
111 |
+
{
|
112 |
+
$soapClient = $this->mockClient;
|
113 |
+
$soapClient->expects($this->any())
|
114 |
+
->method('addSoapInputHeader')
|
115 |
+
->will($this->returnValue($soapClient));
|
116 |
+
|
117 |
+
/* simulate valid response */
|
118 |
+
$response = new StdClass();
|
119 |
+
$response->propsCheckAvailabilityReturn = '1.0.0.0001';
|
120 |
+
|
121 |
+
$soapClient->expects($this->any())
|
122 |
+
->method('propsCheckAvailability')
|
123 |
+
->will($this->returnValue($response));
|
124 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
125 |
+
$this->assertTrue($this->client->isAvailable(), 'expected the web service to be available');
|
126 |
+
}
|
127 |
+
|
128 |
+
public function testApiIsNotAvailable()
|
129 |
+
{
|
130 |
+
$soapClient = $this->mockClient;
|
131 |
+
$soapClient->expects($this->any())
|
132 |
+
->method('addSoapInputHeader')
|
133 |
+
->will($this->returnValue($soapClient));
|
134 |
+
|
135 |
+
/* simulate wrong response */
|
136 |
+
$response = new StdClass();
|
137 |
+
$response->propsCheckAvailabilityReturn = '...';
|
138 |
+
|
139 |
+
$soapClient->expects($this->any())
|
140 |
+
->method('propsCheckAvailability')
|
141 |
+
->will($this->returnValue($response));
|
142 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
143 |
+
$this->assertFalse($this->client->isAvailable(), 'expected the web service to be not available');
|
144 |
+
|
145 |
+
$soapClient->expects($this->any())
|
146 |
+
->method('propsCheckAvailability')
|
147 |
+
->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
|
148 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
149 |
+
$this->assertFalse($this->client->isAvailable(), 'expected the web service to be not available');
|
150 |
+
}
|
151 |
+
|
152 |
+
public function testGetProductInformation()
|
153 |
+
{
|
154 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
155 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
156 |
+
|
157 |
+
// prepare propsListOfProductsATG mock response
|
158 |
+
$response = new StdClass();
|
159 |
+
$response->propsProductlnformationReturn = new StdClass();
|
160 |
+
$response->propsProductlnformationReturn->numberOfProducts = 5;
|
161 |
+
$response->propsProductlnformationReturn->products = new StdClass();
|
162 |
+
$response->propsProductlnformationReturn->productInfoList = array();
|
163 |
+
|
164 |
+
$soapClient = $this->mockClient;
|
165 |
+
$soapClient->expects($this->any())
|
166 |
+
->method('propsProductlnformation')
|
167 |
+
->will($this->returnValue($response));
|
168 |
+
|
169 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
170 |
+
|
171 |
+
$this->assertObjectHasAttribute(
|
172 |
+
'productInfoList',
|
173 |
+
$this->availableClient->getProductInformation()
|
174 |
+
);
|
175 |
+
}
|
176 |
+
|
177 |
+
public function testGetProductInformationException()
|
178 |
+
{
|
179 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
180 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
181 |
+
|
182 |
+
$soapClient = $this->mockClient;
|
183 |
+
|
184 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
|
185 |
+
$soapClient->expects($this->any())
|
186 |
+
->method('propsProductlnformation')
|
187 |
+
->will($this->throwException($soapFault));
|
188 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
189 |
+
|
190 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
|
191 |
+
|
192 |
+
$this->availableClient->getProductInformation();
|
193 |
+
}
|
194 |
+
|
195 |
+
public function testUpdateListOfProducts()
|
196 |
+
{
|
197 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
198 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
199 |
+
|
200 |
+
$this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
|
201 |
+
$this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
|
202 |
+
|
203 |
+
// mock soap client
|
204 |
+
$soapClient = $this->mockClient;
|
205 |
+
|
206 |
+
// prepare propsUserLogin mock response
|
207 |
+
$loginResponse = new StdClass();
|
208 |
+
$loginResponse->propsUserLoginReturn = 'userToken';
|
209 |
+
$soapClient->expects($this->any())
|
210 |
+
->method('propsUserLogin')
|
211 |
+
->will($this->returnValue($loginResponse));
|
212 |
+
|
213 |
+
// prepare propsListOfProductsATG mock response
|
214 |
+
|
215 |
+
$response = new StdClass();
|
216 |
+
$response->propsListOfProductsATGReturn = new StdClass();
|
217 |
+
$response->propsListOfProductsATGReturn->numberOfProducts = 5;
|
218 |
+
$response->propsListOfProductsATGReturn->products = new StdClass();
|
219 |
+
|
220 |
+
$productInfo = new StdClass();
|
221 |
+
$productInfo->netPriceEurcent = 1102;
|
222 |
+
$productInfo->productInfo = new StdClass();
|
223 |
+
$productInfo->productInfo->parcelFormat = new stdClass();
|
224 |
+
$productInfo->productInfo->parcelFormat->parcelClass = "";
|
225 |
+
$productInfo->productInfo->parcelFormat->shortestPlusLongestEdgeCmMin = '0';
|
226 |
+
$productInfo->productInfo->parcelFormat->shortestPlusLongestEdgeCmMax = '30';
|
227 |
+
$productInfo->productInfo->parcelFormat->thridEdgeCmMax = null;
|
228 |
+
$productInfo->productInfo->parcelFormat->weightMinKg = '0.000';
|
229 |
+
$productInfo->productInfo->parcelFormat->weigthMaxKg = '25.000';
|
230 |
+
|
231 |
+
$productInfo->productInfo->deliveryDestinations = new StdClass();
|
232 |
+
$productInfo->productInfo->deliveryDestinations->DeliveryDestination = array(new StdClass());
|
233 |
+
$productInfo->productInfo->deliveryDestinations->DeliveryDestination[0]->exclusions = '';
|
234 |
+
$productInfo->productInfo->deliveryDestinations->DeliveryDestination[0]->countryCode = 'DEU';
|
235 |
+
$response->propsListOfProductsATGReturn->products->ProductWithPrice = array($productInfo);
|
236 |
+
|
237 |
+
$response->propsListOfProductsATGReturn->dated = '2012-04-13T08:34:53+00:00';
|
238 |
+
$response->propsListOfProductsATGReturn->labelAcceptanceTermsAndConditions =
|
239 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/label_acceptance_terms_and_conditions');
|
240 |
+
$response->propsListOfProductsATGReturn->labelAcceptanceLiabilityLimit =
|
241 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/label_acceptance_liability_limit');
|
242 |
+
$response->propsListOfProductsATGReturn->urlTermsAndConditions =
|
243 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_terms_and_conditions');
|
244 |
+
$response->propsListOfProductsATGReturn->netPriceCashOnDeliveryEurocent =
|
245 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/net_price_cash_on_delivery_eurocent');
|
246 |
+
$response->propsListOfProductsATGReturn->settlementType =
|
247 |
+
'Abrechnung zum Durchschnittspreis';
|
248 |
+
$response->propsListOfProductsATGReturn->urlHermesLogogram =
|
249 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_hermes_logogram');
|
250 |
+
$response->propsListOfProductsATGReturn->urlLiabilityInformations =
|
251 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_liability_informations');
|
252 |
+
$response->propsListOfProductsATGReturn->urlPackagingGuidelines =
|
253 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_packaging_guidelines');
|
254 |
+
$response->propsListOfProductsATGReturn->urlPortalB2C =
|
255 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_portal_b2c');
|
256 |
+
$response->propsListOfProductsATGReturn->vatInfo =
|
257 |
+
Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/vat_info');
|
258 |
+
|
259 |
+
$soapClient->expects($this->any())
|
260 |
+
->method('propsListOfProductsATG')
|
261 |
+
->will($this->returnValue($response));
|
262 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
263 |
+
|
264 |
+
$mageConfig = $this->getMock(
|
265 |
+
'Mage_Core_Model_Config',
|
266 |
+
array('saveConfig'),
|
267 |
+
array(),
|
268 |
+
'Config' . md5(time().rand()),
|
269 |
+
true
|
270 |
+
);
|
271 |
+
$this->replaceByMock('model', 'core/config', $mageConfig);
|
272 |
+
|
273 |
+
// check for response in general
|
274 |
+
$listOfProducts = $this->availableClient->updateListOfProducts();
|
275 |
+
$this->assertObjectHasAttribute(
|
276 |
+
'numberOfProducts',
|
277 |
+
$listOfProducts
|
278 |
+
);
|
279 |
+
|
280 |
+
// check that product data have been stored correctly
|
281 |
+
$config = Mage::getModel('hermes/config');
|
282 |
+
/* @var $config Netresearch_Hermes_Model_Config */
|
283 |
+
|
284 |
+
$products = $config->getListOfProductsProducts();
|
285 |
+
$this->assertEquals(
|
286 |
+
'1102',
|
287 |
+
$products['DEU']['product_classes']['all']['netPriceEurcent']
|
288 |
+
);
|
289 |
+
|
290 |
+
// check that general data have been stored correctly (especially new timestamp)
|
291 |
+
$this->assertEquals(
|
292 |
+
$listOfProducts->dated,
|
293 |
+
$config->getListOfProductsData('dated')
|
294 |
+
);
|
295 |
+
|
296 |
+
$this->assertEquals(
|
297 |
+
'Abrechnung zum Durchschnittspreis',
|
298 |
+
$listOfProducts->settlementType
|
299 |
+
);
|
300 |
+
}
|
301 |
+
|
302 |
+
public function testFailingRequestUpdateListOfProducts()
|
303 |
+
{
|
304 |
+
$soapClient = $this->mockClient;
|
305 |
+
|
306 |
+
$response = new stdClass();
|
307 |
+
$response->propsUserLoginReturn = 'UserToken';
|
308 |
+
$soapClient->expects($this->any())
|
309 |
+
->method('propsUserLogin')
|
310 |
+
->will($this->returnValue($response));
|
311 |
+
|
312 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
|
313 |
+
$soapClient->expects($this->any())
|
314 |
+
->method('propsListOfProductsATG')
|
315 |
+
->will($this->throwException($soapFault));
|
316 |
+
|
317 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
318 |
+
|
319 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'bar');
|
320 |
+
|
321 |
+
$this->availableClient->updateListOfProducts();
|
322 |
+
}
|
323 |
+
|
324 |
+
public function testUpdateListOfProductsException()
|
325 |
+
{
|
326 |
+
// check for exception handling
|
327 |
+
$soapClient = $this->mockClient;
|
328 |
+
|
329 |
+
$response = new stdClass();
|
330 |
+
$response->propsUserLoginReturn = 'UserToken';
|
331 |
+
$soapClient->expects($this->any())
|
332 |
+
->method('propsUserLogin')
|
333 |
+
->will($this->returnValue($response));
|
334 |
+
|
335 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
|
336 |
+
$soapClient->expects($this->any())
|
337 |
+
->method('propsListOfProductsATG')
|
338 |
+
->will($this->throwException($soapFault));
|
339 |
+
|
340 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
341 |
+
|
342 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
|
343 |
+
|
344 |
+
$this->availableClient->updateListOfProducts();
|
345 |
+
}
|
346 |
+
|
347 |
+
public function testGetResponse()
|
348 |
+
{
|
349 |
+
$soapClient = $this->mockClient;
|
350 |
+
$soapClient->expects($this->any())
|
351 |
+
->method('getLastResponse')
|
352 |
+
->will($this->returnValue(42));
|
353 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
354 |
+
$this->assertEquals(42, $this->client->getLastResponse());
|
355 |
+
}
|
356 |
+
|
357 |
+
public function testLogin()
|
358 |
+
{
|
359 |
+
/* simulate success response header */
|
360 |
+
$responseHeader = array('PartnerToken' => 'partnerToken');
|
361 |
+
|
362 |
+
/* simulate success response */
|
363 |
+
$response = new StdClass();
|
364 |
+
$response->propsUserLoginReturn = 'userToken';
|
365 |
+
|
366 |
+
try {
|
367 |
+
$soapClient = $this->mockClient;
|
368 |
+
$soapClient->expects($this->any())
|
369 |
+
->method('getLastSoapOutputHeaderObjects')
|
370 |
+
->will($this->returnValue($responseHeader));
|
371 |
+
$soapClient->expects($this->any())
|
372 |
+
->method('propsUserLogin')
|
373 |
+
->will($this->returnValue($response));
|
374 |
+
|
375 |
+
// all subsequent calls to Mage::getModel('hermes/client_soap')
|
376 |
+
// will return the mockClient
|
377 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
378 |
+
|
379 |
+
// assert that login return user token
|
380 |
+
$this->assertEquals(
|
381 |
+
$response->propsUserLoginReturn,
|
382 |
+
$this->availableClient->login(),
|
383 |
+
'got wrong (or no) user token'
|
384 |
+
);
|
385 |
+
|
386 |
+
// assert that user token property was set in client
|
387 |
+
$this->assertEquals(
|
388 |
+
$response->propsUserLoginReturn,
|
389 |
+
$this->availableClient->getUserToken(),
|
390 |
+
'got wrong (or no) user token'
|
391 |
+
);
|
392 |
+
|
393 |
+
// assert that partner token property was set in client
|
394 |
+
$this->assertSame(
|
395 |
+
$responseHeader['PartnerToken'],
|
396 |
+
$this->availableClient->getPartnerToken(),
|
397 |
+
'got wrong (or no) partner token'
|
398 |
+
);
|
399 |
+
} catch (SoapFault $e) {
|
400 |
+
$this->fail('failed to login');
|
401 |
+
}
|
402 |
+
|
403 |
+
// assert that an exception is thrown when propsUserLogin is called
|
404 |
+
$this->setUp();
|
405 |
+
|
406 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
|
407 |
+
$soapClient->expects($this->any())
|
408 |
+
->method('propsUserLogin')
|
409 |
+
->will($this->throwException($soapFault));
|
410 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
411 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'bar');
|
412 |
+
$this->availableClient->login();
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* test login when API is not available
|
417 |
+
*
|
418 |
+
* @test
|
419 |
+
*/
|
420 |
+
public function testLoginWithApiNotAvailable()
|
421 |
+
{
|
422 |
+
$soapClient = $this->mockClient;
|
423 |
+
|
424 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
|
425 |
+
$soapClient->expects($this->any())
|
426 |
+
->method('propsCheckAvailability')
|
427 |
+
->will($this->throwException($soapFault));
|
428 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
429 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'Hermes API is currently not available. Please try again later.');
|
430 |
+
$this->client->login();
|
431 |
+
}
|
432 |
+
|
433 |
+
/**
|
434 |
+
* temporary test method for doing HRMA-20 QA, actually querying soap api.
|
435 |
+
* to include in phpunit, use annotation "test" and run
|
436 |
+
* $ phpunit --colors --filter qaApiIsAvailable UnitTests.php
|
437 |
+
*/
|
438 |
+
public function qaApiIsAvailable()
|
439 |
+
{
|
440 |
+
$this->store->setConfig('hermes/general/testmode', 1);
|
441 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
442 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
443 |
+
|
444 |
+
$this->assertTrue($this->client->isAvailable());
|
445 |
+
}
|
446 |
+
/**
|
447 |
+
* temporary test method for doing HRMA-19 QA, actually querying soap api.
|
448 |
+
* to include in phpunit, use annotation "test" and run
|
449 |
+
* $ phpunit --colors --filter qaApiLogin UnitTests.php
|
450 |
+
*/
|
451 |
+
public function qaApiLogin()
|
452 |
+
{
|
453 |
+
$this->store->setConfig('hermes/general/testmode', 1);
|
454 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
455 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
456 |
+
|
457 |
+
$this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
|
458 |
+
$this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
|
459 |
+
|
460 |
+
$this->availableClient->login();
|
461 |
+
$this->assertNotNull($this->availableClient->getUserToken());
|
462 |
+
}
|
463 |
+
}
|
464 |
+
|
app/code/community/Netresearch/Hermes/Test/Model/ClientTest/expectations/productInformation.yaml
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
productInfoList: 5
|
app/code/community/Netresearch/Hermes/Test/Model/ConfigTest.php
ADDED
@@ -0,0 +1,480 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes API client unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_ConfigTest extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var Mage_Core_Model_Store
|
35 |
+
*/
|
36 |
+
protected $store;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var Netresearch_Hermes_Model_Config
|
40 |
+
*/
|
41 |
+
protected $config;
|
42 |
+
|
43 |
+
public function setUp()
|
44 |
+
{
|
45 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
46 |
+
$this->config = Mage::getModel('hermes/config');
|
47 |
+
}
|
48 |
+
|
49 |
+
protected function setConfig($storeId = 0)
|
50 |
+
{
|
51 |
+
$this->store = Mage::app()->getStore($storeId)->load($storeId);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function testConfigNodesPresent()
|
55 |
+
{
|
56 |
+
// $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'active');
|
57 |
+
// $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'testmode');
|
58 |
+
// $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'logging_enabled');
|
59 |
+
// $this->assertConfigNodeHasChild('default/netresearch_hermes/account', 'partner_id');
|
60 |
+
// $this->assertConfigNodeHasChild('default/netresearch_hermes/account', 'api_pwd');
|
61 |
+
}
|
62 |
+
|
63 |
+
public function testIsEnabled()
|
64 |
+
{
|
65 |
+
$path = 'hermes/general/active';
|
66 |
+
|
67 |
+
//Check if module is initially disabled
|
68 |
+
$this->store->resetConfig();
|
69 |
+
$this->assertFalse($this->config->isEnabled());
|
70 |
+
|
71 |
+
$this->store->setConfig($path, 1);
|
72 |
+
$this->assertTrue($this->config->isEnabled());
|
73 |
+
|
74 |
+
$this->store->setConfig($path, 0);
|
75 |
+
$this->assertFalse($this->config->isEnabled());
|
76 |
+
}
|
77 |
+
|
78 |
+
public function testIsLoggingEnabled()
|
79 |
+
{
|
80 |
+
$path = 'hermes/general/logging_enabled';
|
81 |
+
|
82 |
+
//Check if logging is initially enabled
|
83 |
+
$this->assertTrue($this->config->isLoggingEnabled());
|
84 |
+
|
85 |
+
$this->store->setConfig($path, 1);
|
86 |
+
$this->assertTrue($this->config->isLoggingEnabled());
|
87 |
+
|
88 |
+
$this->store->setConfig($path, 0);
|
89 |
+
$this->assertFalse($this->config->isLoggingEnabled());
|
90 |
+
}
|
91 |
+
|
92 |
+
public function testIsProductionMode()
|
93 |
+
{
|
94 |
+
$path = 'hermes/general/testmode';
|
95 |
+
|
96 |
+
//Check if testmode is initially enabled
|
97 |
+
$this->assertTrue($this->config->isTestMode());
|
98 |
+
|
99 |
+
$this->store->setConfig($path, 0);
|
100 |
+
$this->assertFalse($this->config->isTestMode());
|
101 |
+
$this->assertTrue($this->config->isProductionMode());
|
102 |
+
|
103 |
+
$this->store->setConfig($path, 1);
|
104 |
+
$this->assertFalse($this->config->isProductionMode());
|
105 |
+
$this->assertTrue($this->config->isTestMode());
|
106 |
+
}
|
107 |
+
|
108 |
+
public function testGetPartnerId()
|
109 |
+
{
|
110 |
+
$path = 'hermes/account/partner_id';
|
111 |
+
$previousValue = Mage::getStoreConfig($path);
|
112 |
+
$this->assertEquals($previousValue, $this->config->getPartnerId());
|
113 |
+
$testValue = 'humbug_' . rand(0, 1000);
|
114 |
+
$this->store->setConfig($path, $testValue);
|
115 |
+
$this->assertEquals($testValue, $this->config->getPartnerId());
|
116 |
+
$this->store->setConfig($path, $previousValue);
|
117 |
+
}
|
118 |
+
|
119 |
+
public function testGetPartnerPwd()
|
120 |
+
{
|
121 |
+
$path = 'hermes/account/api_pwd';
|
122 |
+
$previousValue = Mage::getStoreConfig($path);
|
123 |
+
$this->assertEquals($previousValue, $this->config->getPartnerPwd());
|
124 |
+
$testValue = 'humbug_' . rand(0, 1000);
|
125 |
+
$this->store->setConfig($path, $testValue);
|
126 |
+
$this->assertEquals($testValue, $this->config->getPartnerPwd());
|
127 |
+
$this->store->setConfig($path, $previousValue);
|
128 |
+
}
|
129 |
+
|
130 |
+
public function testGetUsername()
|
131 |
+
{
|
132 |
+
$path = 'hermes/account/username';
|
133 |
+
$previousValue = Mage::getStoreConfig($path);
|
134 |
+
$this->assertEquals($previousValue, $this->config->getUsername());
|
135 |
+
$testValue = 'humbug_' . rand(0, 1000);
|
136 |
+
$this->store->setConfig($path, $testValue);
|
137 |
+
$this->assertEquals($testValue, $this->config->getUsername());
|
138 |
+
$this->store->setConfig($path, $previousValue);
|
139 |
+
}
|
140 |
+
|
141 |
+
public function testGetPassword()
|
142 |
+
{
|
143 |
+
$path = 'hermes/account/password';
|
144 |
+
$previousValue = Mage::getStoreConfig($path);
|
145 |
+
$this->assertEquals($previousValue, $this->config->getPassword());
|
146 |
+
$testValue = 'humbug_' . rand(0, 1000);
|
147 |
+
$this->store->setConfig($path, $testValue);
|
148 |
+
$this->assertEquals($testValue, $this->config->getPassword());
|
149 |
+
$this->store->setConfig($path, $previousValue);
|
150 |
+
}
|
151 |
+
|
152 |
+
public function testGetDisabledShippingMethods()
|
153 |
+
{
|
154 |
+
$this->assertEquals('', Mage::getStoreConfig('hermes/shipment_options/disabled_shipping_methods'), "Disabled Shipping Methods are not empty by default");
|
155 |
+
}
|
156 |
+
|
157 |
+
public function testCodOrders()
|
158 |
+
{
|
159 |
+
$this->assertEquals('', Mage::getStoreConfig('hermes/shipment_options/cod_payment_methods'), "Payment Methods for COD Orders are not empty by default");
|
160 |
+
}
|
161 |
+
|
162 |
+
public function testIsAllowedShippingMethod()
|
163 |
+
{
|
164 |
+
$path = 'hermes/shipment_options/disabled_shipping_methods';
|
165 |
+
|
166 |
+
//Test if unexisting "custom_shipping_method" is allowed
|
167 |
+
$this->assertTrue($this->config->isAllowedShippingMethod('custom_shipping_method'));
|
168 |
+
|
169 |
+
//Set "flatrate_flatrate" to now allowed and test if it is not allowed
|
170 |
+
$this->store->setConfig($path, 'flatrate_flatrate');
|
171 |
+
$this->assertFalse($this->config->isAllowedShippingMethod('flatrate_flatrate'),
|
172 |
+
"Expected 'flatrate_flatrate' shipping method to be disabled"
|
173 |
+
);
|
174 |
+
|
175 |
+
//Reset not allowed shipping methods and test if "flatrate_flatrate" is allowed now
|
176 |
+
$this->store->setConfig($path, '');
|
177 |
+
$this->assertTrue($this->config->isAllowedShippingMethod('flatrate_flatrate'),
|
178 |
+
"Expected 'flatrate_flatrate' shipping method was not disabled"
|
179 |
+
);
|
180 |
+
|
181 |
+
//Check multistore compatibility
|
182 |
+
$this->setConfig(1);
|
183 |
+
$this->store->setConfig($path, 'flatrate_flatrate');
|
184 |
+
$this->assertTrue($this->config->isAllowedShippingMethod('flatrate_flatrate', 0));
|
185 |
+
$this->assertFalse($this->config->isAllowedShippingMethod('flatrate_flatrate', 1));
|
186 |
+
$this->store->setConfig($path, '');
|
187 |
+
$this->setConfig(0);
|
188 |
+
}
|
189 |
+
|
190 |
+
public function testIsPaymentMethodForCod()
|
191 |
+
{
|
192 |
+
$path = 'hermes/shipment_options/cod_payment_methods';
|
193 |
+
|
194 |
+
//Test if unexisting "custom_payment_method" is allowed
|
195 |
+
$this->assertFalse($this->config->isPaymentMethodForCod('custom_payment_method'));
|
196 |
+
|
197 |
+
//Set "checkmo" to cod payment method
|
198 |
+
$this->store->setConfig($path, 'checkmo');
|
199 |
+
$this->assertTrue($this->config->isPaymentMethodForCod('checkmo'),
|
200 |
+
"Expected 'checkmo' payment method is not detected as COD order"
|
201 |
+
);
|
202 |
+
|
203 |
+
//Reset cod payment methods and test if "checkmo" is not detected as cod order anymore
|
204 |
+
$this->store->setConfig($path, '');
|
205 |
+
$this->assertFalse($this->config->isPaymentMethodForCod('checkmo'),
|
206 |
+
"Expected 'checkmo' payment method is detected as COD order"
|
207 |
+
);
|
208 |
+
|
209 |
+
//Check multistore compatibility
|
210 |
+
$this->setConfig(1);
|
211 |
+
$this->store->setConfig($path, 'checkmo');
|
212 |
+
$this->assertFalse($this->config->isPaymentMethodForCod('checkmo', 0));
|
213 |
+
$this->assertTrue($this->config->isPaymentMethodForCod('checkmo', 1));
|
214 |
+
$this->store->setConfig($path, '');
|
215 |
+
$this->setConfig(0);
|
216 |
+
}
|
217 |
+
|
218 |
+
public function testGetAllProductClasses()
|
219 |
+
{
|
220 |
+
$this->assertTrue(true === is_array($this->config->getAllProductClasses()));
|
221 |
+
$this->assertEquals(
|
222 |
+
array(
|
223 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
|
224 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
|
225 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
|
226 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
|
227 |
+
Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
|
228 |
+
),
|
229 |
+
$this->config->getAllProductClasses(),
|
230 |
+
'Not all product classes were returned'
|
231 |
+
);
|
232 |
+
}
|
233 |
+
|
234 |
+
public function testGetAllowedCountries()
|
235 |
+
{
|
236 |
+
$this->assertTrue(true === is_array($this->config->getAllowedCountries()));
|
237 |
+
$this->assertEquals(
|
238 |
+
explode(",", "BEL,DNK,DEU,EST,FIN,FRA,IRL,ITA,LVA,LIE,LTU,LUX,MCO,NLD,POL,AUT,PRT,SWE,CHE,SVK,SVN,ESP,CZE,HUN,GBR"),
|
239 |
+
$this->config->getAllowedCountries(),
|
240 |
+
'Array of Hermes countries doesn\'t correspond to exptected countries'
|
241 |
+
);
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* @loadExpectation config
|
246 |
+
*/
|
247 |
+
public function testGetAllowedCodCountries()
|
248 |
+
{
|
249 |
+
$this->assertTrue(true === is_array($this->config->getAllowedCodCountries()));
|
250 |
+
$this->assertEquals(
|
251 |
+
$this->expected('allowed_cod_countries')->getCountryCodes(),
|
252 |
+
$this->config->getAllowedCodCountries(),
|
253 |
+
'Array of Hermes COD countries doesn\'t correspond to exptected countries'
|
254 |
+
);
|
255 |
+
}
|
256 |
+
|
257 |
+
public function testGetListOfProductsDataException()
|
258 |
+
{
|
259 |
+
$this->setExpectedException(
|
260 |
+
'InvalidArgumentException',
|
261 |
+
'\'netresearch\' is not a known config key'
|
262 |
+
);
|
263 |
+
|
264 |
+
$this->config->getListOfProductsData('netresearch');
|
265 |
+
}
|
266 |
+
|
267 |
+
public function testSetListOfProductsDataException()
|
268 |
+
{
|
269 |
+
$this->setExpectedException(
|
270 |
+
'InvalidArgumentException',
|
271 |
+
'\'netresearch\' is not a known config key'
|
272 |
+
);
|
273 |
+
|
274 |
+
$this->config->setListOfProductsData('netresearch', 'netresearch');
|
275 |
+
}
|
276 |
+
|
277 |
+
public function testIsTieredPriceMerchant()
|
278 |
+
{
|
279 |
+
$path = 'hermes/api_data/props_list_of_products_atg/settlement_type';
|
280 |
+
|
281 |
+
$this->store->setConfig($path, 'Abrechnung zum Staffelpreis');
|
282 |
+
$this->assertTrue(true === $this->config->isTieredPriceMerchant());
|
283 |
+
|
284 |
+
$this->store->setConfig($path, 'Abrechnung zum Durchschnittspreis');
|
285 |
+
$this->assertFalse(true === $this->config->isTieredPriceMerchant());
|
286 |
+
}
|
287 |
+
|
288 |
+
public function testIsFlatrateMerchant()
|
289 |
+
{
|
290 |
+
$path = 'hermes/api_data/props_list_of_products_atg/settlement_type';
|
291 |
+
|
292 |
+
$this->store->setConfig($path, 'Abrechnung zum Durchschnittspreis');
|
293 |
+
$this->assertTrue(true === $this->config->isFlatrateMerchant());
|
294 |
+
|
295 |
+
$this->store->setConfig($path, 'Abrechnung zum Staffelpreis');
|
296 |
+
$this->assertFalse(true === $this->config->isFlatrateMerchant());
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* @loadExpectation config
|
301 |
+
*/
|
302 |
+
public function testIsAllowedCodCountry()
|
303 |
+
{
|
304 |
+
$path = 'hermes/general/allowed_cod_countries';
|
305 |
+
$expectedAllowedCodCountries = $this->expected('allowed_cod_countries')->getCountryCodes();
|
306 |
+
$expectedNotAllowedCodCountries = $this->expected('not_allowed_cod_countries')->getCountryCodes();
|
307 |
+
|
308 |
+
foreach ($expectedAllowedCodCountries as $codCountryCode) {
|
309 |
+
$this->assertTrue(true === $this->config->isAllowedCodCountry($codCountryCode));
|
310 |
+
}
|
311 |
+
|
312 |
+
foreach ($expectedNotAllowedCodCountries as $codCountryCode) {
|
313 |
+
$this->assertFalse(true === $this->config->isAllowedCodCountry($codCountryCode));
|
314 |
+
}
|
315 |
+
}
|
316 |
+
|
317 |
+
public function testIsPdfEnabled()
|
318 |
+
{
|
319 |
+
$path = 'hermes/shipment_label_options/shipment_label_option';
|
320 |
+
|
321 |
+
$this->store->setConfig($path, 'pdf');
|
322 |
+
$this->assertTrue(true === $this->config->isPdfEnabled());
|
323 |
+
|
324 |
+
// $this->store->setConfig($path, "jpeg,pdf");
|
325 |
+
// $this->assertTrue(true === $this->config->isPdfEnabled());
|
326 |
+
//
|
327 |
+
// $this->store->setConfig($path, 'jpeg');
|
328 |
+
// $this->assertFalse(false === $this->config->isPdfEnabled());
|
329 |
+
}
|
330 |
+
|
331 |
+
public function testIsJpegEnabled()
|
332 |
+
{
|
333 |
+
$path = 'hermes/shipment_label_options/shipment_label_option';
|
334 |
+
|
335 |
+
$this->store->setConfig($path, 'jpeg');
|
336 |
+
$this->assertTrue(true === $this->config->isJpegEnabled());
|
337 |
+
|
338 |
+
// $this->store->setConfig($path, 'jpeg,pdf');
|
339 |
+
// $this->assertTrue(true === $this->config->isJpegEnabled());
|
340 |
+
//
|
341 |
+
// $this->store->setConfig($path, 'pdf');
|
342 |
+
// $this->assertFalse(false === $this->config->isJpegEnabled());
|
343 |
+
|
344 |
+
}
|
345 |
+
|
346 |
+
public function testGetTrackingUrl()
|
347 |
+
{
|
348 |
+
$expected = 'https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=%orderNo%';
|
349 |
+
$this->assertSame($expected, $this->config->getTrackingUrl());
|
350 |
+
$parcel = Mage::getModel('hermes/parcel');
|
351 |
+
$this->assertNull($this->config->getTrackingUrl($parcel));
|
352 |
+
$this->assertNull($parcel->getTrackingUrl());
|
353 |
+
$parcel->setHermesOrderNo('1234567890');
|
354 |
+
$expected = 'https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=1234567890';
|
355 |
+
$this->assertSame($expected, $this->config->getTrackingUrl($parcel));
|
356 |
+
$this->assertSame($expected, $parcel->getTrackingUrl());
|
357 |
+
}
|
358 |
+
|
359 |
+
public function testIsTrackingLinkMailEnabled()
|
360 |
+
{
|
361 |
+
$path = 'hermes/email_options/send_email_tracking_link';
|
362 |
+
|
363 |
+
$this->store->resetConfig();
|
364 |
+
|
365 |
+
$this->store->setConfig($path, 1);
|
366 |
+
$this->assertTrue($this->config->isTrackingLinkMailEnabled());
|
367 |
+
|
368 |
+
$this->store->setConfig($path, 0);
|
369 |
+
$this->assertFalse($this->config->isTrackingLinkMailEnabled());
|
370 |
+
}
|
371 |
+
|
372 |
+
public function testGetSupportMail()
|
373 |
+
{
|
374 |
+
$path = 'hermes/info/support_mail';
|
375 |
+
|
376 |
+
$this->store->resetConfig();
|
377 |
+
$previousValue = Mage::getStoreConfig($path);
|
378 |
+
|
379 |
+
$this->store->setConfig($path, 'hermes@trash-mail.com');
|
380 |
+
$this->assertSame('hermes@trash-mail.com', $this->config->getSupportMail());
|
381 |
+
|
382 |
+
$this->store->setConfig($path, 'hermes1@trash-mail.com');
|
383 |
+
$this->assertSame('hermes1@trash-mail.com', $this->config->getSupportMail());
|
384 |
+
|
385 |
+
$this->store->setConfig($path, $previousValue);
|
386 |
+
$this->assertEquals($previousValue, $this->config->getSupportMail());
|
387 |
+
}
|
388 |
+
|
389 |
+
/**
|
390 |
+
* test isAutocreateEnabled
|
391 |
+
*
|
392 |
+
* @test
|
393 |
+
*/
|
394 |
+
public function isAutocreateEnabled()
|
395 |
+
{
|
396 |
+
$path = 'hermes/autocreate/enabled';
|
397 |
+
|
398 |
+
//Check if auto creation is initially disabled
|
399 |
+
$this->store->resetConfig();
|
400 |
+
$this->assertFalse($this->config->isAutocreateEnabled());
|
401 |
+
|
402 |
+
$this->store->setConfig($path, 1);
|
403 |
+
$this->assertTrue($this->config->isAutocreateEnabled());
|
404 |
+
|
405 |
+
$this->store->setConfig($path, 0);
|
406 |
+
$this->assertFalse($this->config->isAutocreateEnabled());
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* test getAutocreateOrderStatuses
|
411 |
+
*
|
412 |
+
* @test
|
413 |
+
*/
|
414 |
+
public function getAutocreateOrderStatuses()
|
415 |
+
{
|
416 |
+
$path = 'hermes/autocreate/order_status';
|
417 |
+
|
418 |
+
$this->store->resetConfig();
|
419 |
+
$previousValue = Mage::getStoreConfig($path);
|
420 |
+
|
421 |
+
$this->store->setConfig($path, 'processing,pending');
|
422 |
+
$this->assertSame(array('processing', 'pending'), $this->config->getAutocreateOrderStatuses());
|
423 |
+
|
424 |
+
$this->store->setConfig($path, 'processing');
|
425 |
+
$this->assertSame(array('processing'), $this->config->getAutocreateOrderStatuses());
|
426 |
+
|
427 |
+
$this->store->setConfig($path, $previousValue);
|
428 |
+
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* test getAutocreatePaymentMethods
|
432 |
+
*
|
433 |
+
* @test
|
434 |
+
*/
|
435 |
+
public function getAutocreatePaymentMethods()
|
436 |
+
{
|
437 |
+
$path = 'hermes/autocreate/payment_methods';
|
438 |
+
|
439 |
+
$this->store->resetConfig();
|
440 |
+
$previousValue = Mage::getStoreConfig($path);
|
441 |
+
|
442 |
+
$this->store->setConfig($path, 'checkmo,ccsave');
|
443 |
+
$this->assertSame(array('checkmo', 'ccsave'), $this->config->getAutocreatePaymentMethods());
|
444 |
+
|
445 |
+
$this->store->setConfig($path, 'checkmo');
|
446 |
+
$this->assertSame(array('checkmo'), $this->config->getAutocreatePaymentMethods());
|
447 |
+
|
448 |
+
$this->store->setConfig($path, $previousValue);
|
449 |
+
}
|
450 |
+
|
451 |
+
/**
|
452 |
+
* @test
|
453 |
+
*/
|
454 |
+
public function getInstallationDate()
|
455 |
+
{
|
456 |
+
$path = 'hermes/general/installation_date';
|
457 |
+
|
458 |
+
$this->store->resetConfig();
|
459 |
+
$previousValue = Mage::getStoreConfig($path);
|
460 |
+
|
461 |
+
$this->store->setConfig($path, 'gestern');
|
462 |
+
$this->assertSame('gestern', $this->config->getInstallationDate());
|
463 |
+
|
464 |
+
$this->store->setConfig($path, 'vorgestern');
|
465 |
+
$this->assertSame('vorgestern', $this->config->getInstallationDate());
|
466 |
+
|
467 |
+
$this->store->setConfig($path, $previousValue);
|
468 |
+
}
|
469 |
+
|
470 |
+
/**
|
471 |
+
*@test
|
472 |
+
*/
|
473 |
+
public function getMaxDaysInPast()
|
474 |
+
{
|
475 |
+
$maxDaysInPast = $this->config->getMaxDaysInPast();
|
476 |
+
$this->assertTrue(is_numeric($maxDaysInPast));
|
477 |
+
$this->assertGreaterThan(0, $maxDaysInPast);
|
478 |
+
|
479 |
+
}
|
480 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/ConfigTest/expectations/config.yaml
ADDED
@@ -0,0 +1,5 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
allowed_cod_countries:
|
2 |
+
country_codes: ['DEU']
|
3 |
+
|
4 |
+
not_allowed_cod_countries:
|
5 |
+
country_codes: ['USA', 'MEX']
|
app/code/community/Netresearch/Hermes/Test/Model/ObserverTest.php
ADDED
@@ -0,0 +1,550 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes observer unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_ObserverTest extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
protected $codPaymentMethods;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @var Mage_Core_Model_Store
|
37 |
+
*/
|
38 |
+
protected $store;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var Netresearch_Hermes_Model_Config
|
42 |
+
*/
|
43 |
+
protected $config;
|
44 |
+
|
45 |
+
protected $mockClient;
|
46 |
+
|
47 |
+
protected $mockParcel;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Set shipment to event object
|
51 |
+
*
|
52 |
+
* @param Mage_Sales_Model_Order_Shipment $shipment
|
53 |
+
* @return Varien_Event_Observer
|
54 |
+
*/
|
55 |
+
protected function prepareEvent(Mage_Sales_Model_Order_Shipment $shipment)
|
56 |
+
{
|
57 |
+
$event = new Varien_Event_Observer();
|
58 |
+
$event->setData('shipment', $shipment);
|
59 |
+
|
60 |
+
return $event;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function setUp()
|
64 |
+
{
|
65 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
66 |
+
$this->store->setConfig('hermes/general/active', '1');
|
67 |
+
|
68 |
+
$this->config = Mage::getModel('hermes/config');
|
69 |
+
|
70 |
+
$this->codPaymentMethods = $this->store->getConfig('hermes/shipment_options/cod_payment_methods');
|
71 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
|
72 |
+
|
73 |
+
/* mock soap client */
|
74 |
+
$this->mockClient = $this->getMock(
|
75 |
+
'Netresearch_Hermes_Model_Client_Soap',
|
76 |
+
array('propsUserLogin', 'propsListOfProductsATG', 'getLastSoapOutputHeaderObjects'),
|
77 |
+
array(),
|
78 |
+
'SoapClient' . md5(time().rand()),
|
79 |
+
true
|
80 |
+
);
|
81 |
+
|
82 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable'));
|
83 |
+
$client->expects($this->any())
|
84 |
+
->method('isAvailable')
|
85 |
+
->will($this->returnValue(true));
|
86 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
87 |
+
|
88 |
+
parent::setUp();
|
89 |
+
}
|
90 |
+
|
91 |
+
public function tearDown()
|
92 |
+
{
|
93 |
+
$this->store->setConfig('hermes/shipment_options/cod_payment_methods', $this->codPaymentMethods);
|
94 |
+
}
|
95 |
+
|
96 |
+
public function testUpdateProductList()
|
97 |
+
{
|
98 |
+
$observer = Mage::getModel('hermes/observer');
|
99 |
+
|
100 |
+
$client = $this->getModelMock('hermes/client', array('updateListOfProducts'));
|
101 |
+
|
102 |
+
$response = new stdClass();
|
103 |
+
$response->dated = '1999-02-01';
|
104 |
+
|
105 |
+
$client->expects($this->any())
|
106 |
+
->method('updateListOfProducts')
|
107 |
+
->will($this->returnValue($response));
|
108 |
+
|
109 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
110 |
+
|
111 |
+
// run observer method
|
112 |
+
/* @var $observer Netresearch_Hermes_Model_Observer */
|
113 |
+
$updatedList = $observer->updateListOfProducts(new Varien_Event_Observer());
|
114 |
+
$this->assertEquals($response->dated, $updatedList->dated);
|
115 |
+
}
|
116 |
+
|
117 |
+
public function testSaveHermesShipmentDataObserverDefined()
|
118 |
+
{
|
119 |
+
$this->assertEventObserverDefined(
|
120 |
+
'adminhtml',
|
121 |
+
'sales_order_shipment_save_after',
|
122 |
+
'hermes/observer',
|
123 |
+
'saveHermesShipmentData'
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
129 |
+
*/
|
130 |
+
public function testNotSaveHermesShipmentData()
|
131 |
+
{
|
132 |
+
$observer = Mage::getModel('hermes/observer');
|
133 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
134 |
+
$event = $this->prepareEvent($shipment);
|
135 |
+
|
136 |
+
// simulate POST data
|
137 |
+
$data = array(
|
138 |
+
'form_key' => '5PebJQbzONhCGGRI',
|
139 |
+
'comment_text' => '',
|
140 |
+
'shipment' => array(
|
141 |
+
'items' => array('99' => '2') // item #99, qty 2
|
142 |
+
)
|
143 |
+
);
|
144 |
+
Mage::app()->getRequest()->setPost($data);
|
145 |
+
|
146 |
+
// (1) check behaviour when we don't know anything about Hermes shipping
|
147 |
+
$this->assertFalse($observer->saveHermesShipmentData($event));
|
148 |
+
|
149 |
+
// simulate POST data
|
150 |
+
$data = array(
|
151 |
+
'form_key' => '5PebJQbzONhCGGRI',
|
152 |
+
'ship_with_hermes' => '0',
|
153 |
+
'parcel_class' => 'standard',
|
154 |
+
'comment_text' => '',
|
155 |
+
'shipment' => array(
|
156 |
+
'items' => array('99' => '2') // item #99, qty 2
|
157 |
+
)
|
158 |
+
);
|
159 |
+
|
160 |
+
// (1) check behaviour when shipping should not be done with hermes
|
161 |
+
Mage::app()->getRequest()->setPost($data);
|
162 |
+
$this->assertFalse($observer->saveHermesShipmentData($event));
|
163 |
+
|
164 |
+
// (2) check behaviour when shipping method is amongst disabled methods
|
165 |
+
$this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', 'flatrate_flatrate');
|
166 |
+
$data['ship_with_hermes'] = '1';
|
167 |
+
Mage::app()->getRequest()->setPost($data);
|
168 |
+
$this->assertFalse($observer->saveHermesShipmentData($event));
|
169 |
+
$this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
|
170 |
+
|
171 |
+
// (3) check behaviour when extension is disabled
|
172 |
+
$this->store->setConfig('hermes/general/active', '0');
|
173 |
+
Mage::app()->getRequest()->setPost($data);
|
174 |
+
$this->assertFalse($observer->saveHermesShipmentData($event));
|
175 |
+
$this->store->setConfig('hermes/general/active', '1');
|
176 |
+
}
|
177 |
+
|
178 |
+
|
179 |
+
/**
|
180 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
181 |
+
*/
|
182 |
+
public function testSaveHermesShipmentData()
|
183 |
+
{
|
184 |
+
$observer = Mage::getModel('hermes/observer');
|
185 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
186 |
+
$event = $this->prepareEvent($shipment);
|
187 |
+
|
188 |
+
$this->assertNotEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
|
189 |
+
|
190 |
+
// mock parcel so it will not be saved
|
191 |
+
$mockParcel = $this->getModelMock('hermes/parcel', array('save'));
|
192 |
+
|
193 |
+
// define response of save method
|
194 |
+
$mockParcel->expects($this->any())
|
195 |
+
->method('save')
|
196 |
+
->will($this->returnSelf());
|
197 |
+
|
198 |
+
// all subsequent calls to Mage::getModel('hermes/parcel')
|
199 |
+
// will return the mockParcel
|
200 |
+
$this->replaceByMock('model', 'hermes/parcel', $mockParcel);
|
201 |
+
|
202 |
+
// simulate POST data
|
203 |
+
$data = array(
|
204 |
+
'form_key' => '5PebJQbzONhCGGRI',
|
205 |
+
'ship_with_hermes' => '1',
|
206 |
+
'parcel_class' => 'S',
|
207 |
+
'shipment' => array(
|
208 |
+
'items' => array('99' => '2')
|
209 |
+
),
|
210 |
+
'comment_text' => ''
|
211 |
+
);
|
212 |
+
|
213 |
+
// simulate normal save
|
214 |
+
Mage::app()->getRequest()->setPost($data);
|
215 |
+
$parcel = $observer->saveHermesShipmentData($event);
|
216 |
+
$this->assertInstanceOf(
|
217 |
+
'Netresearch_Hermes_Model_Parcel',
|
218 |
+
$parcel
|
219 |
+
);
|
220 |
+
$this->assertEquals($data['parcel_class'], $parcel->getParcelClass());
|
221 |
+
$this->assertNull($parcel->getIncludeCashOnDelivery());
|
222 |
+
$this->assertNull($parcel->getAmountCashOnDeliveryEurocent());
|
223 |
+
|
224 |
+
// simulate save with invalid parcel class
|
225 |
+
// -> parcel should be saved with empty parcel_class
|
226 |
+
$data['parcel_class'] = 'humbug';
|
227 |
+
|
228 |
+
Mage::app()->getRequest()->setPost($data);
|
229 |
+
$parcel = $observer->saveHermesShipmentData($event);
|
230 |
+
$this->assertInstanceOf(
|
231 |
+
'Netresearch_Hermes_Model_Parcel',
|
232 |
+
$parcel
|
233 |
+
);
|
234 |
+
$this->assertNull($parcel->getParcelClass());
|
235 |
+
|
236 |
+
|
237 |
+
// simulate save by third party that does not provide hermes information
|
238 |
+
// -> parcel should not be generated
|
239 |
+
unset($data['ship_with_hermes']);
|
240 |
+
unset($data['parcel_class']);
|
241 |
+
unset($data['shipment']);
|
242 |
+
|
243 |
+
Mage::app()->getRequest()->setPost($data);
|
244 |
+
$this->assertFalse($observer->saveHermesShipmentData($event));
|
245 |
+
}
|
246 |
+
|
247 |
+
/**
|
248 |
+
* In auto mode, no post data are given.
|
249 |
+
* TODO: expand test in future sprints
|
250 |
+
*
|
251 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
252 |
+
*/
|
253 |
+
public function testSaveHermesShipmentDataAutoMode()
|
254 |
+
{
|
255 |
+
$observer = Mage::getModel('hermes/observer');
|
256 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
257 |
+
$event = $this->prepareEvent($shipment);
|
258 |
+
|
259 |
+
$this->assertNotEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
|
260 |
+
|
261 |
+
$parcel = $observer->saveHermesShipmentData($event);
|
262 |
+
$this->assertNull($parcel);
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
267 |
+
*/
|
268 |
+
public function testSaveHermesShipmentDataCod()
|
269 |
+
{
|
270 |
+
$observer = Mage::getModel('hermes/observer');
|
271 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(6);
|
272 |
+
$event = $this->prepareEvent($shipment);
|
273 |
+
|
274 |
+
$this->assertEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
|
275 |
+
|
276 |
+
// mock parcel so it will not be saved
|
277 |
+
$mockParcel = $this->getModelMock('hermes/parcel', array('save'));
|
278 |
+
|
279 |
+
// define response of save method
|
280 |
+
$mockParcel->expects($this->any())
|
281 |
+
->method('save')
|
282 |
+
->will($this->returnSelf());
|
283 |
+
|
284 |
+
// all subsequent calls to Mage::getModel('hermes/parcel')
|
285 |
+
// will return the mockParcel
|
286 |
+
$this->replaceByMock('model', 'hermes/parcel', $mockParcel);
|
287 |
+
|
288 |
+
// simulate POST data
|
289 |
+
$data = array(
|
290 |
+
'form_key' => '5PebJQbzONhCGGRI',
|
291 |
+
'ship_with_hermes' => '1',
|
292 |
+
'parcel_class' => 'XL',
|
293 |
+
'shipment' => array(
|
294 |
+
'items' => array('99' => '2')
|
295 |
+
),
|
296 |
+
'comment_text' => ''
|
297 |
+
);
|
298 |
+
|
299 |
+
// simulate normal save
|
300 |
+
Mage::app()->getRequest()->setPost($data);
|
301 |
+
$parcel = $observer->saveHermesShipmentData($event);
|
302 |
+
$this->assertInstanceOf(
|
303 |
+
'Netresearch_Hermes_Model_Parcel',
|
304 |
+
$parcel
|
305 |
+
);
|
306 |
+
$grandTotalEurocent = 100 * $event->getShipment()->getOrder()->getGrandTotal();
|
307 |
+
$this->assertEquals('1', $parcel->getIncludeCashOnDelivery());
|
308 |
+
$this->assertEquals((int)$grandTotalEurocent, $parcel->getAmountCashOnDeliveryEurocent());
|
309 |
+
}
|
310 |
+
|
311 |
+
/**
|
312 |
+
* test getter for list of ids of parcels to submit
|
313 |
+
*
|
314 |
+
* @loadFixture ../../../var/fixtures/parcels
|
315 |
+
*/
|
316 |
+
public function testGetParcelIdsToSubmit()
|
317 |
+
{
|
318 |
+
$this->assertEquals(
|
319 |
+
array(1, 2),
|
320 |
+
Mage::getModel('hermes/observer')->getParcelIdsToSubmit()
|
321 |
+
);
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* _mockClientForImportOrders
|
326 |
+
*
|
327 |
+
* @return void
|
328 |
+
*/
|
329 |
+
protected function _mockClientForImportOrders($orders)
|
330 |
+
{
|
331 |
+
$result = new StdClass();
|
332 |
+
$result->propsImportOrdersReturn = new StdClass();
|
333 |
+
$result->propsImportOrdersReturn->orderResponses = new StdClass();
|
334 |
+
$result->propsImportOrdersReturn->orderResponses->OrderResponse = $orders;
|
335 |
+
|
336 |
+
$client = $this->getModelMock('hermes/client', array('sendParcels'));
|
337 |
+
$client->expects($this->once())
|
338 |
+
->method('sendParcels')
|
339 |
+
->will($this->returnValue($result));
|
340 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
341 |
+
}
|
342 |
+
|
343 |
+
/**
|
344 |
+
* test parcel submission
|
345 |
+
*
|
346 |
+
* @test
|
347 |
+
* @loadFixture ../../../var/fixtures/parcels
|
348 |
+
*/
|
349 |
+
public function transmitParcelsSuccessfully()
|
350 |
+
{
|
351 |
+
$orders = array(new StdClass(), new StdClass());
|
352 |
+
$orders[0]->orderNo = '22';
|
353 |
+
$orders[1]->orderNo = '23';
|
354 |
+
$this->_mockClientForImportOrders($orders);
|
355 |
+
|
356 |
+
/* avoid saving shipment comments */
|
357 |
+
$shipmentCommentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
|
358 |
+
$this->replaceByMock('resource', 'sales/order_shipment_comment_collection', $shipmentCommentsCollection);
|
359 |
+
|
360 |
+
|
361 |
+
$shipmentMock = $this->getModelMock('sales/order_shipment', array('getCommentsCollection', 'addComment'));
|
362 |
+
$shipmentMock->expects($this->any())
|
363 |
+
->method('getCommentsCollection')
|
364 |
+
->will($this->returnValue($shipmentCommentsCollection));
|
365 |
+
$this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
|
366 |
+
|
367 |
+
/* execute test subject */
|
368 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'addTrack'));
|
369 |
+
$parcel->expects($this->any())
|
370 |
+
->method('getShipment')
|
371 |
+
->will($this->returnValue($shipmentMock));
|
372 |
+
|
373 |
+
$parcel->expects($this->any())
|
374 |
+
->method('addTrack')
|
375 |
+
->will($this->returnValue($parcel));
|
376 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcel);
|
377 |
+
|
378 |
+
|
379 |
+
$this->assertEquals(
|
380 |
+
array('parcels' => 2, 'errors' => 0),
|
381 |
+
Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer())
|
382 |
+
);
|
383 |
+
|
384 |
+
/* check results for the first parcel */
|
385 |
+
$this->assertEquals('2', $parcel->getId());
|
386 |
+
$this->assertEquals('23', $parcel->getHermesOrderNo());
|
387 |
+
$this->assertEquals(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED, $parcel->getStatusCode());
|
388 |
+
$this->assertEmpty($parcel->getErrorCode());
|
389 |
+
}
|
390 |
+
|
391 |
+
/**
|
392 |
+
* test parcel submission
|
393 |
+
*
|
394 |
+
* @test
|
395 |
+
* @loadFixture ../../../var/fixtures/parcels
|
396 |
+
*/
|
397 |
+
public function transmitParcelsWithError()
|
398 |
+
{
|
399 |
+
$orders = array(new stdClass(), new stdClass());
|
400 |
+
$orders[0]->orderNo = '24';
|
401 |
+
|
402 |
+
$orders[1]->orderNo = '22';
|
403 |
+
$orders[1]->exceptionItems = new StdClass();
|
404 |
+
$orders[1]->exceptionItems->ExceptionItem = array(new StdClass(), new StdClass());
|
405 |
+
$orders[1]->exceptionItems->ExceptionItem[0] = new StdClass();
|
406 |
+
$orders[1]->exceptionItems->ExceptionItem[0]->errorCode = 123;
|
407 |
+
$orders[1]->exceptionItems->ExceptionItem[0]->errorMessage = 'Foobar';
|
408 |
+
$orders[1]->exceptionItems->ExceptionItem[1] = new StdClass();
|
409 |
+
$orders[1]->exceptionItems->ExceptionItem[1]->errorCode = 256;
|
410 |
+
$orders[1]->exceptionItems->ExceptionItem[1]->errorMessage = 'xyz';
|
411 |
+
$this->_mockClientForImportOrders($orders);
|
412 |
+
|
413 |
+
/* expect shipments comments to be set */
|
414 |
+
/*
|
415 |
+
$shipment = $this->getModelMock('sales/order_shipment', array('addComment'));
|
416 |
+
$shipment->expects($this->any())
|
417 |
+
->method('addComment')
|
418 |
+
->with($this->equalTo(
|
419 |
+
'HERMES::<span class="error">Some errors occured during transmission to Hermes:</span><br />Foobar<br />xyz'
|
420 |
+
));
|
421 |
+
$this->replaceByMock('model', 'sales/order_shipment', $shipment);
|
422 |
+
*/
|
423 |
+
|
424 |
+
/* avoid saving shipment comments */
|
425 |
+
$shipmentCommentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
|
426 |
+
$this->replaceByMock('resource', 'sales/order_shipment_comment_collection', $shipmentCommentsCollection);
|
427 |
+
|
428 |
+
$shipmentMock = $this->getModelMock('sales/order_shipment', array('getCommentsCollection', 'addComment'));
|
429 |
+
$shipmentMock->expects($this->any())
|
430 |
+
->method('getCommentsCollection')
|
431 |
+
->will($this->returnValue($shipmentCommentsCollection));
|
432 |
+
$this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
|
433 |
+
|
434 |
+
/* execute test subject */
|
435 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'addTrack'));
|
436 |
+
$parcel->expects($this->any())
|
437 |
+
->method('getShipment')
|
438 |
+
->will($this->returnValue($shipmentMock));
|
439 |
+
|
440 |
+
$parcel->expects($this->any())
|
441 |
+
->method('addTrack')
|
442 |
+
->will($this->returnValue($parcel));
|
443 |
+
$this->replaceByMock('model', 'hermes/parcel', $parcel);
|
444 |
+
|
445 |
+
/* execute test subject */
|
446 |
+
$parcel = Mage::getModel('hermes/parcel')->load(2);
|
447 |
+
$this->assertEquals(
|
448 |
+
array('parcels' => 2, 'errors' => 1),
|
449 |
+
Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer())
|
450 |
+
);
|
451 |
+
|
452 |
+
/* check results for the second parcel */
|
453 |
+
$this->assertEquals('2', $parcel->getId());
|
454 |
+
$this->assertEquals('22', $parcel->getHermesOrderNo());
|
455 |
+
$this->assertEquals(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED, $parcel->getStatusCode());
|
456 |
+
$this->assertNotEmpty($parcel->getErrorCode());
|
457 |
+
$this->assertEquals(array(123, 256), $parcel->getErrorCodes());
|
458 |
+
|
459 |
+
}
|
460 |
+
|
461 |
+
/**
|
462 |
+
* @test
|
463 |
+
* @loadFixture ../../../var/fixtures/parcels
|
464 |
+
*/
|
465 |
+
public function testFailedRequest()
|
466 |
+
{
|
467 |
+
$client = $this->getModelMock('hermes/client', array('sendParcels'));
|
468 |
+
$client->expects($this->once())
|
469 |
+
->method('sendParcels')
|
470 |
+
->will($this->returnValue(false));
|
471 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
472 |
+
|
473 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
|
474 |
+
Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer());
|
475 |
+
}
|
476 |
+
|
477 |
+
/**
|
478 |
+
* test
|
479 |
+
*
|
480 |
+
* @test
|
481 |
+
* @loadFixture ../../../var/fixtures/orderList1
|
482 |
+
*/
|
483 |
+
public function createParcelsForHermes()
|
484 |
+
{
|
485 |
+
|
486 |
+
$config = $this->getModelMock('hermes/config',
|
487 |
+
array('isAutocreateEnabled',
|
488 |
+
'getAutocreateOrderStatuses',
|
489 |
+
'getInstallationDate',
|
490 |
+
'isPaymentMethodForCod'
|
491 |
+
));
|
492 |
+
$config->expects($this->any())
|
493 |
+
->method('isAutocreateEnabled')
|
494 |
+
->will($this->returnValue(true));
|
495 |
+
$config->expects($this->any())
|
496 |
+
->method('getAutocreateOrderStatuses')
|
497 |
+
->will($this->returnValue(array('processed', 'pending')));
|
498 |
+
$config->expects($this->any())
|
499 |
+
->method('getInstallationDate')
|
500 |
+
->will($this->returnValue(strtotime('2011-01-01')));
|
501 |
+
$config->expects($this->any())
|
502 |
+
->method('isPaymentMethodForCod')
|
503 |
+
->will($this->returnValue(strtotime(false)));
|
504 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
505 |
+
|
506 |
+
$parcel = Mage::getModel('hermes/parcel');
|
507 |
+
$parcel->setId(777);
|
508 |
+
|
509 |
+
$shipment = Mage::getModel('sales/order_shipment');
|
510 |
+
$shipment->setId(7777);
|
511 |
+
|
512 |
+
$helper = $this->getHelperMock('hermes/order', array('createShipment', 'createParcel'));
|
513 |
+
$helper->expects($this->any())
|
514 |
+
->method('createShipment')
|
515 |
+
->with($this->isInstanceOf('Mage_Sales_Model_Order'))
|
516 |
+
->will($this->returnValue($shipment));
|
517 |
+
$helper->expects($this->any())
|
518 |
+
->method('createParcel')
|
519 |
+
->will($this->returnValue($parcel));
|
520 |
+
|
521 |
+
$this->replaceByMock('helper', 'hermes/order', $helper);
|
522 |
+
$store = Mage::app()->getStore(0)->load(0);
|
523 |
+
//Check if auto creation is initially disabled
|
524 |
+
$store->resetConfig();
|
525 |
+
|
526 |
+
|
527 |
+
$path = 'hermes/autocreate/order_status';
|
528 |
+
$store->setConfig($path, 'processing,pending');
|
529 |
+
|
530 |
+
$store->setConfig($path, 1);
|
531 |
+
$result = Mage::getModel('hermes/observer')->createParcelsForHermes(new Varien_Event_Observer());
|
532 |
+
$this->assertTrue(is_array($result));
|
533 |
+
$this->assertGreaterThan(0, count($result));
|
534 |
+
|
535 |
+
}
|
536 |
+
|
537 |
+
public function testCreateHermesParcelsIsEmptyIfAutocreateIsDisabled()
|
538 |
+
{
|
539 |
+
$config = $this->getModelMock('hermes/config',
|
540 |
+
array('isAutocreateEnabled'));
|
541 |
+
$config->expects($this->any())
|
542 |
+
->method('isAutocreateEnabled')
|
543 |
+
->will($this->returnValue(false));
|
544 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
545 |
+
$result = Mage::getModel('hermes/observer')->createParcelsForHermes(new Varien_Event_Observer());
|
546 |
+
$this->assertTrue(is_array($result));
|
547 |
+
$this->assertEquals(0, count($result));
|
548 |
+
}
|
549 |
+
|
550 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/ObserverTest/fixtures/.gitkeep
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
directory is mandatory for shared fixtures…
|
app/code/community/Netresearch/Hermes/Test/Model/OrderTest.php
ADDED
@@ -0,0 +1,526 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes API client unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_OrderTest extends EcomDev_PHPUnit_Test_Case
|
32 |
+
{
|
33 |
+
protected $store;
|
34 |
+
protected $client;
|
35 |
+
|
36 |
+
public function setUp()
|
37 |
+
{
|
38 |
+
parent::setUp();
|
39 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
40 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable'));
|
41 |
+
$client->expects($this->any())
|
42 |
+
->method('isAvailable')
|
43 |
+
->will($this->returnValue(true));
|
44 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
45 |
+
$this->client = Mage::getModel('hermes/client');
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Retrieves list of order ids for some purpose
|
50 |
+
*
|
51 |
+
* this test case is just a test implementation to show how fixtures and expectations work
|
52 |
+
*
|
53 |
+
* @test
|
54 |
+
* @loadFixture orderList
|
55 |
+
* @loadExpectation
|
56 |
+
*/
|
57 |
+
public function orderList()
|
58 |
+
{
|
59 |
+
$collection = Mage::getModel('sales/order')->getCollection();
|
60 |
+
// Check that number of items the same as expected value
|
61 |
+
$this->assertEquals(
|
62 |
+
$this->_getExpectations()->getCount(),
|
63 |
+
$collection->count()
|
64 |
+
);
|
65 |
+
$order = Mage::getModel('sales/order')->load(1);
|
66 |
+
$this->assertEquals('1000000001', $order->getIncrementId());
|
67 |
+
$this->assertEquals('1', $order->getBillingAddressId());
|
68 |
+
$this->assertTrue(is_object($order->getBillingAddress()), 'Adresse sollte ein Objekt sein');
|
69 |
+
$this->assertEquals(42, $order->getBillingAddress()->getId());
|
70 |
+
$this->assertEquals('Hubertus', $order->getBillingAddress()->getFirstname());
|
71 |
+
$this->assertEquals('Hubertus ', $order->getBillingAddress()->getName());
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* test limits of parcel count (should be 500 max.)
|
76 |
+
*
|
77 |
+
* @test
|
78 |
+
*/
|
79 |
+
public function testImportOrdersBelowCountLimit()
|
80 |
+
{
|
81 |
+
$parcelIds = range(101, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT+100);
|
82 |
+
$client = Mage::getModel('hermes/client');
|
83 |
+
$this->setExpectedException(
|
84 |
+
'Netresearch_Hermes_Model_Client_Exception',
|
85 |
+
'None of the given parcels could be sent to Hermes'
|
86 |
+
);
|
87 |
+
$client->sendParcels($parcelIds);
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* test limits of parcel count (should be 500 max.)
|
92 |
+
*
|
93 |
+
* @test
|
94 |
+
*/
|
95 |
+
public function testImportOrdersOverCountLimit()
|
96 |
+
{
|
97 |
+
$parcelIds = range(1, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT + 1);
|
98 |
+
$client = Mage::getModel('hermes/client');
|
99 |
+
$this->setExpectedException(
|
100 |
+
'Netresearch_Hermes_Model_Client_Exception',
|
101 |
+
sprintf(
|
102 |
+
'Exceeded maximum order limit: SOAP method propsImportOrders does accept up to %d orders per call (you tried to send %d)',
|
103 |
+
Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT,
|
104 |
+
count($parcelIds)
|
105 |
+
)
|
106 |
+
);
|
107 |
+
$client->sendParcels($parcelIds);
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* test transformation of parcels into Hermes orders
|
112 |
+
*
|
113 |
+
* @test
|
114 |
+
* @loadFixture parcels
|
115 |
+
*/
|
116 |
+
public function testParcelDataTransformation()
|
117 |
+
{
|
118 |
+
$this->markTestSkipped('skipped due to bug');
|
119 |
+
$expected = array(
|
120 |
+
array(
|
121 |
+
'orderNo' => null,
|
122 |
+
'receiver' => array(
|
123 |
+
'firstname' => 'Hubertus',
|
124 |
+
'lastname' => 'von Fürstenberg',
|
125 |
+
'street' => 'An der Tabaksmühle 3a',
|
126 |
+
'houseNumber' => '',
|
127 |
+
'postcode' => '04229',
|
128 |
+
'addressAdd' => '21. Etage',
|
129 |
+
'city' => 'Leipzig',
|
130 |
+
'countryCode' => 'DEU',
|
131 |
+
'email' => 'hubertus.von.fuerstenberg@trash-mail.com'
|
132 |
+
),
|
133 |
+
'clientReferenceNumber' => '1000000001',
|
134 |
+
'parcelClass' => 'M',
|
135 |
+
'amountCashOnDeliveryEurocent' => '0',
|
136 |
+
'includeCashOnDelivery' => false,
|
137 |
+
'withBulkGoods' => false
|
138 |
+
)
|
139 |
+
);
|
140 |
+
$this->assertEquals($expected, Mage::getModel('hermes/client')->getConvertedParcelData(array(1)));
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* propsImportOrders LIVE mode
|
145 |
+
*
|
146 |
+
* this test calls the real Hermes API
|
147 |
+
* therefor it should not be executed regularly
|
148 |
+
*
|
149 |
+
* @loadFixture parcels
|
150 |
+
*/
|
151 |
+
public function propsImportOrdersLIVE()
|
152 |
+
{
|
153 |
+
$this->store->setConfig('hermes/account/partner_id', 'EXT000159');
|
154 |
+
$this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
|
155 |
+
|
156 |
+
$this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
|
157 |
+
$this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
|
158 |
+
|
159 |
+
$this->store->setConfig('hermes/general/testmode', 1);
|
160 |
+
$response = Mage::getModel('hermes/client')->sendParcels(array(1));
|
161 |
+
die(var_dump(__FILE__ . ' on line ' . __LINE__ . ':', $response));
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* test import orders
|
166 |
+
*
|
167 |
+
* @test
|
168 |
+
* @loadFixture parcels
|
169 |
+
*/
|
170 |
+
public function propsImportOrders()
|
171 |
+
{
|
172 |
+
/* mock client */
|
173 |
+
$client = $this->getMock(
|
174 |
+
'Netresearch_Hermes_Model_Client',
|
175 |
+
array('login', 'getConvertedParcelData'),
|
176 |
+
array(),
|
177 |
+
'Client' . md5(time().rand()),
|
178 |
+
true
|
179 |
+
);
|
180 |
+
$client->expects($this->once())
|
181 |
+
->method('login')
|
182 |
+
->will($this->returnValue(true));
|
183 |
+
$client->expects($this->once())
|
184 |
+
->method('getConvertedParcelData')
|
185 |
+
->will($this->returnValue(array('foo' => 'bar')));
|
186 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
187 |
+
|
188 |
+
/* mock soap client */
|
189 |
+
$soapClient = $this->getMock(
|
190 |
+
'Netresearch_Hermes_Model_Client_Soap',
|
191 |
+
array('propsImportOrders'),
|
192 |
+
array(),
|
193 |
+
'SoapClient' . md5(time().rand()),
|
194 |
+
true
|
195 |
+
);
|
196 |
+
$soapClient->expects($this->once())
|
197 |
+
->method('propsImportOrders')
|
198 |
+
->with($this->equalTo(array('requestedOrders' => array('propsOrders' => array('foo' => 'bar')))));
|
199 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
200 |
+
|
201 |
+
$client = Mage::getModel('hermes/client');
|
202 |
+
try {
|
203 |
+
$client->sendParcels(array(1));
|
204 |
+
} catch (SoapFault $e) {
|
205 |
+
$this->fail();
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* test failing order import
|
211 |
+
*
|
212 |
+
* @test
|
213 |
+
* @loadFixture parcels
|
214 |
+
*/
|
215 |
+
public function testFailingOrderImport()
|
216 |
+
{
|
217 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array('propsImportOrders', 'propsUserLogin', 'getLastSoapOutputHeaderObjects'));
|
218 |
+
|
219 |
+
// mock propsImportOrders method
|
220 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
|
221 |
+
$soapClient->expects($this->any())
|
222 |
+
->method('propsImportOrders')
|
223 |
+
->will($this->throwException($soapFault));
|
224 |
+
|
225 |
+
// mock propsUserLogin method
|
226 |
+
$response = new stdClass();
|
227 |
+
$response->propsUserLoginReturn = 'UserToken';
|
228 |
+
|
229 |
+
$soapClient->expects($this->any())
|
230 |
+
->method('propsUserLogin')
|
231 |
+
->will($this->returnValue($response));
|
232 |
+
|
233 |
+
$response = array('PartnerToken' => 'PartnerToken');
|
234 |
+
$soapClient->expects($this->any())
|
235 |
+
->method('getLastSoapOutputHeaderObjects')
|
236 |
+
->will($this->returnValue($response));
|
237 |
+
|
238 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
239 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', ' receiver_lastname');
|
240 |
+
Mage::getModel('hermes/client')->sendParcels(array(1));
|
241 |
+
}
|
242 |
+
|
243 |
+
public function testGetSingleJpeg()
|
244 |
+
{
|
245 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array('propsOrderPrintLabelJpeg', 'propsUserLogin', 'getLastSoapOutputHeaderObjects'));
|
246 |
+
|
247 |
+
/* simulate response (propsOrderPrintLabelJpeg) */
|
248 |
+
$expectedJpeg = 'ThisShouldBeAJpegLabel';
|
249 |
+
$expected = new StdClass();
|
250 |
+
|
251 |
+
$expected->propsOrderPrintLabelJpegReturn = new StdClass();
|
252 |
+
$expected->propsOrderPrintLabelJpegReturn->jpegData = $expectedJpeg;
|
253 |
+
$soapClient->expects($this->any())
|
254 |
+
->method('propsOrderPrintLabelJpeg')
|
255 |
+
->will($this->returnValue($expected));
|
256 |
+
|
257 |
+
// mock login
|
258 |
+
$response = new stdClass();
|
259 |
+
$response->propsUserLoginReturn = 'UserToken';
|
260 |
+
|
261 |
+
$soapClient->expects($this->any())
|
262 |
+
->method('propsUserLogin')
|
263 |
+
->will($this->returnValue($response));
|
264 |
+
|
265 |
+
$response = array('PartnerToken' => 'PartnerToken');
|
266 |
+
$soapClient->expects($this->any())
|
267 |
+
->method('getLastSoapOutputHeaderObjects')
|
268 |
+
->will($this->returnValue($response));
|
269 |
+
|
270 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
271 |
+
|
272 |
+
/* expect parcel to be closed */
|
273 |
+
$parcel = $this->getModelMock('hermes/parcel', array('load', 'setStatusCode', 'save'));
|
274 |
+
// $parcel->expects($this->once())
|
275 |
+
// ->method('setStatusCode')
|
276 |
+
// ->with(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
277 |
+
// $this->replaceByMock('model', 'hermes/parcel', $parcel);
|
278 |
+
// $parcel->setHermesOrderNo(1)->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
|
279 |
+
|
280 |
+
/* execute test subject */
|
281 |
+
$response = $this->client->getLabelJpeg($parcel);
|
282 |
+
$this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
|
283 |
+
$this->assertEquals($expectedJpeg, $response->getResult());
|
284 |
+
|
285 |
+
/**
|
286 |
+
* test exception handling
|
287 |
+
*/
|
288 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
|
289 |
+
$soapClient->expects($this->any())
|
290 |
+
->method('propsOrderPrintLabelJpeg')
|
291 |
+
->will($this->throwException($soapFault));
|
292 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
293 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'foo');
|
294 |
+
$this->client->getLabelJpeg($parcel);
|
295 |
+
}
|
296 |
+
|
297 |
+
public function testGetSinglePdf()
|
298 |
+
{
|
299 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array(
|
300 |
+
'propsOrderPrintLabelPdf',
|
301 |
+
'propsUserLogin',
|
302 |
+
'getLastSoapOutputHeaderObjects'
|
303 |
+
));
|
304 |
+
|
305 |
+
/* simulate response */
|
306 |
+
$expectedPdf = 'ThisShouldBeAPdfLabel';
|
307 |
+
$expected = new StdClass();
|
308 |
+
$expected->propsOrderPrintLabelPdfReturn = new StdClass();
|
309 |
+
$expected->propsOrderPrintLabelPdfReturn->pdfData = $expectedPdf;
|
310 |
+
$soapClient->expects($this->any())
|
311 |
+
->method('propsOrderPrintLabelPdf')
|
312 |
+
->will($this->returnValue($expected));
|
313 |
+
|
314 |
+
// mock login
|
315 |
+
$response = new stdClass();
|
316 |
+
$response->propsUserLoginReturn = 'UserToken';
|
317 |
+
$soapClient->expects($this->any())
|
318 |
+
->method('propsUserLogin')
|
319 |
+
->will($this->returnValue($response));
|
320 |
+
|
321 |
+
$response = array('PartnerToken' => 'PartnerToken');
|
322 |
+
$soapClient->expects($this->any())
|
323 |
+
->method('getLastSoapOutputHeaderObjects')
|
324 |
+
->will($this->returnValue($response));
|
325 |
+
|
326 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
327 |
+
|
328 |
+
/* expect parcel to be closed */
|
329 |
+
$parcel = $this->getModelMock('hermes/parcel', array('load', 'setStatusCode', 'save'));
|
330 |
+
// $parcel->expects($this->once())
|
331 |
+
// ->method('setStatusCode')
|
332 |
+
// ->with(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
333 |
+
// $this->replaceByMock('model', 'hermes/parcel', $parcel);
|
334 |
+
// $parcel->setHermesOrderNo(1)->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
|
335 |
+
|
336 |
+
/* execute test subject */
|
337 |
+
$response = $this->client->getLabelPdf(
|
338 |
+
$parcel,
|
339 |
+
Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT
|
340 |
+
);
|
341 |
+
$this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
|
342 |
+
$this->assertEquals($expectedPdf, $response->getResult());
|
343 |
+
|
344 |
+
/**
|
345 |
+
* test exception handling
|
346 |
+
*/
|
347 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
|
348 |
+
$soapClient->expects($this->any())
|
349 |
+
->method('propsOrderPrintLabelPdf')
|
350 |
+
->will($this->throwException($soapFault));
|
351 |
+
|
352 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
353 |
+
|
354 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'foo');
|
355 |
+
|
356 |
+
$client = Mage::getModel('hermes/client');
|
357 |
+
$client->getLabelPdf($parcel, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
|
358 |
+
}
|
359 |
+
|
360 |
+
public function testGetMergedPdf()
|
361 |
+
{
|
362 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array(
|
363 |
+
'propsOrdersPrintLabelsPdf',
|
364 |
+
'propsUserLogin',
|
365 |
+
'getLastSoapOutputHeaderObjects'
|
366 |
+
));
|
367 |
+
|
368 |
+
/* simulate response */
|
369 |
+
$expectedPdf = 'ThisShouldBeAPdfLabel';
|
370 |
+
$expected = new StdClass();
|
371 |
+
$expected->propsOrdersPrintLabelsPdfResponse = new StdClass();
|
372 |
+
$expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn = new StdClass();
|
373 |
+
$expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->pdfData = $expectedPdf;
|
374 |
+
$expectedOrderResponses = array(new StdClass(), new StdClass());
|
375 |
+
$expectedOrderResponses[0]->orderNo = '1';
|
376 |
+
$expectedOrderResponses[1]->orderNo = '2';
|
377 |
+
$expectedOrderResponses[1]->exceptionItems = array(new StdClass());
|
378 |
+
$expectedOrderResponses[1]->exceptionItems[0]->errorCode = 123;
|
379 |
+
$expectedOrderResponses[1]->exceptionItems[0]->errorMessage = 'Some error message';
|
380 |
+
$expectedOrderResponses[1]->exceptionItems[0]->errorType = 'U';
|
381 |
+
$expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->orderRes = $expectedOrderResponses;
|
382 |
+
$soapClient->expects($this->any())
|
383 |
+
->method('propsOrdersPrintLabelsPdf')
|
384 |
+
->will($this->returnValue($expected));
|
385 |
+
|
386 |
+
// mock login
|
387 |
+
$response = new stdClass();
|
388 |
+
$response->propsUserLoginReturn = 'UserToken';
|
389 |
+
|
390 |
+
$soapClient->expects($this->any())
|
391 |
+
->method('propsUserLogin')
|
392 |
+
->will($this->returnValue($response));
|
393 |
+
|
394 |
+
$response = array('PartnerToken' => 'PartnerToken');
|
395 |
+
$soapClient->expects($this->any())
|
396 |
+
->method('getLastSoapOutputHeaderObjects')
|
397 |
+
->will($this->returnValue($response));
|
398 |
+
|
399 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
400 |
+
|
401 |
+
$response = $this->client->getLabelsPdf(array(1, 2));
|
402 |
+
$this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
|
403 |
+
$this->assertEquals(1, $response->getSuccessCount());
|
404 |
+
$this->assertEquals(array(1), $response->getSuccessItems());
|
405 |
+
$this->assertEquals(1, $response->getErrorCount());
|
406 |
+
$this->assertEquals(array(2), $response->getFailedItems());
|
407 |
+
$this->assertEquals($expectedPdf, $response->getResult());
|
408 |
+
|
409 |
+
$soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
|
410 |
+
$soapClient->expects($this->any())
|
411 |
+
->method('propsOrdersPrintLabelsPdf')
|
412 |
+
->will($this->throwException($soapFault));
|
413 |
+
|
414 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
415 |
+
$this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
|
416 |
+
$this->client->getLabelsPdf(1);
|
417 |
+
}
|
418 |
+
|
419 |
+
/**
|
420 |
+
* should cancel transmitted parcel
|
421 |
+
*
|
422 |
+
* @test
|
423 |
+
*/
|
424 |
+
public function shouldCancelParcel()
|
425 |
+
{
|
426 |
+
/* fake response */
|
427 |
+
$response = new stdClass();
|
428 |
+
$response->propsOrderDeleteReturn = true;
|
429 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array(
|
430 |
+
'propsOrderDelete',
|
431 |
+
));
|
432 |
+
$soapClient->expects($this->once())
|
433 |
+
->method('propsOrderDelete')
|
434 |
+
->with(array('orderNo' => '123'))
|
435 |
+
->will($this->returnValue($response));
|
436 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
437 |
+
|
438 |
+
/* fake availability and login */
|
439 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
|
440 |
+
$client->expects($this->once())
|
441 |
+
->method('login');
|
442 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
443 |
+
|
444 |
+
/* expect parcel to be canceled */
|
445 |
+
$parcel = Mage::getModel('hermes/parcel');
|
446 |
+
$parcel->setHermesOrderNo(123);
|
447 |
+
$parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
448 |
+
|
449 |
+
/* execute test subject */
|
450 |
+
$this->assertTrue($client->cancel($parcel));
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* should fail to cancel transmitted parcel
|
455 |
+
*
|
456 |
+
* @test
|
457 |
+
*/
|
458 |
+
public function shouldFailCancelParcel()
|
459 |
+
{
|
460 |
+
/* fake response */
|
461 |
+
$response = new stdClass();
|
462 |
+
$response->propsOrderDeleteReturn = false;
|
463 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array(
|
464 |
+
'propsOrderDelete',
|
465 |
+
));
|
466 |
+
$soapClient->expects($this->once())
|
467 |
+
->method('propsOrderDelete')
|
468 |
+
->with(array('orderNo' => '123'))
|
469 |
+
->will($this->returnValue($response));
|
470 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
471 |
+
|
472 |
+
/* fake availability and login */
|
473 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
|
474 |
+
$client->expects($this->once())
|
475 |
+
->method('login');
|
476 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
477 |
+
|
478 |
+
/* expect parcel to be canceled */
|
479 |
+
$parcel = Mage::getModel('hermes/parcel');
|
480 |
+
$parcel->setHermesOrderNo(123);
|
481 |
+
$parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
482 |
+
|
483 |
+
/* execute test subject */
|
484 |
+
$this->assertFalse($client->cancel($parcel));
|
485 |
+
}
|
486 |
+
|
487 |
+
/**
|
488 |
+
* cancellation should throw Netresearch_Hermes_Model_Client_Exception
|
489 |
+
*
|
490 |
+
* @test
|
491 |
+
*/
|
492 |
+
public function shouldThrowCancellationException()
|
493 |
+
{
|
494 |
+
/* fake response */
|
495 |
+
$response = new stdClass();
|
496 |
+
$response->propsOrderDeleteReturn = false;
|
497 |
+
$soapClient = $this->getModelMock('hermes/client_soap', array(
|
498 |
+
'propsOrderDelete',
|
499 |
+
));
|
500 |
+
$soapClient->expects($this->any())
|
501 |
+
->method('propsOrderDelete')
|
502 |
+
->will($this->throwException(
|
503 |
+
Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0)
|
504 |
+
));
|
505 |
+
$this->replaceByMock('model', 'hermes/client_soap', $soapClient);
|
506 |
+
|
507 |
+
/* fake availability and login */
|
508 |
+
$client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
|
509 |
+
$client->expects($this->once())
|
510 |
+
->method('login');
|
511 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
512 |
+
|
513 |
+
/* expect parcel to be canceled */
|
514 |
+
$parcel = Mage::getModel('hermes/parcel');
|
515 |
+
$parcel->setHermesOrderNo(123);
|
516 |
+
$parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
517 |
+
|
518 |
+
$this->setExpectedException(
|
519 |
+
'Netresearch_Hermes_Model_Client_Exception',
|
520 |
+
'foo'
|
521 |
+
);
|
522 |
+
|
523 |
+
/* execute test subject */
|
524 |
+
$client->cancel($parcel);
|
525 |
+
}
|
526 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/expectations/orderList.yaml
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
count: 3
|
2 |
+
order_ids: [1, 2, 3]
|
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/orderList.yaml
ADDED
@@ -0,0 +1,13 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 1
|
4 |
+
increment_id: 1000000001
|
5 |
+
billing_address_id: 1
|
6 |
+
- entity_id: 2
|
7 |
+
- entity_id: 3
|
8 |
+
|
9 |
+
sales/order_address:
|
10 |
+
- entity_id: 42
|
11 |
+
parent_id: 1
|
12 |
+
address_type: 'billing'
|
13 |
+
firstname: 'Hubertus'
|
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/parcels.yaml
ADDED
@@ -0,0 +1,43 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 45
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: EUR
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
|
12 |
+
|
13 |
+
sales/shipment:
|
14 |
+
- entity_id: 2
|
15 |
+
increment_id: 1000000001
|
16 |
+
order_id: 31
|
17 |
+
shipping_address_id: 45
|
18 |
+
|
19 |
+
|
20 |
+
hermes/parcel:
|
21 |
+
- id: 1
|
22 |
+
shipment_id: 2
|
23 |
+
shipping_method: 'flatrate_flatrate'
|
24 |
+
parcel_class: 'M'
|
25 |
+
includeCashOnDelivery: false
|
26 |
+
|
27 |
+
|
28 |
+
sales/order_address:
|
29 |
+
- entity_id: 45
|
30 |
+
parent_id: 31
|
31 |
+
address_type: 'shipping'
|
32 |
+
firstname: 'Hubertus'
|
33 |
+
postcode: '04229'
|
34 |
+
lastname: 'Fürstenberg'
|
35 |
+
street: 'An der Tabaksmühle 3a'
|
36 |
+
city: 'Leipzig'
|
37 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
38 |
+
country_id: 'DE'
|
39 |
+
prefix: 'Prof. Dr.'
|
40 |
+
middlename: 'von'
|
41 |
+
suffix: 'MdL'
|
42 |
+
company: 'Verein zur Abschaffung der Beseitigung'
|
43 |
+
|
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/shipments.yaml
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 42
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: EUR
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
|
12 |
+
sales/shipment:
|
13 |
+
- entity_id: 2
|
14 |
+
increment_id: 100000077
|
15 |
+
order_id: 31
|
16 |
+
shipping_address_id: 45
|
17 |
+
|
18 |
+
sales/order_address:
|
19 |
+
- entity_id: 45
|
20 |
+
parent_id: 31
|
21 |
+
address_type: 'shipping'
|
22 |
+
firstname: 'Hubertus'
|
23 |
+
postcode: '04229'
|
24 |
+
lastname: 'Fürstenberg'
|
25 |
+
street: 'An der Tabaksmühle 3a'
|
26 |
+
city: 'Leipzig'
|
27 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
28 |
+
country_id: 'DE'
|
29 |
+
prefix: 'Prof. Dr.'
|
30 |
+
middlename: 'von'
|
31 |
+
suffix: 'MdL'
|
32 |
+
company: 'Verein zur Abschaffung der Beseitigung'
|
33 |
+
|
34 |
+
sales/order_payment:
|
35 |
+
- entity_id: 23
|
36 |
+
parent_id: 31
|
37 |
+
method: 'checkmo'
|
app/code/community/Netresearch/Hermes/Test/Model/ParcelTest.php
ADDED
@@ -0,0 +1,593 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes parcel unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_ParcelTest extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* test if shipment address is set in parcel.
|
35 |
+
* street, district and email are excluded as they have their own test methods
|
36 |
+
* @see testStreetConcatenation()
|
37 |
+
* @see testIrelandDistrict()
|
38 |
+
* @see testEmail()
|
39 |
+
* @loadFixture shipments
|
40 |
+
*/
|
41 |
+
public function testTransformation()
|
42 |
+
{
|
43 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
44 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
45 |
+
$shippingAddress = $shipment->getShippingAddress();
|
46 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
47 |
+
|
48 |
+
$lastname = $shippingAddress->getMiddlename() ?
|
49 |
+
$shippingAddress->getMiddlename() . ' ' . $shippingAddress->getLastname() :
|
50 |
+
$shippingAddress->getLastname();
|
51 |
+
|
52 |
+
$this->assertEquals($shipment->getId(), $parcel->getShipmentId());
|
53 |
+
$this->assertEquals($shippingAddress->getFirstname(), $parcel->getReceiverFirstname());
|
54 |
+
$this->assertEquals($lastname, $parcel->getReceiverLastname());
|
55 |
+
// $parcel->getReceiverStreet(); $parcel->getReceiverAddressAdd();
|
56 |
+
$this->assertEquals($shippingAddress->getPostcode(), $parcel->getReceiverPostcode());
|
57 |
+
$this->assertEquals($shippingAddress->getCity(), $parcel->getReceiverCity());
|
58 |
+
// $parcel->getDistrict();
|
59 |
+
$this->assertEquals($shippingAddress->getCountryModel()->getIso3Code(), $parcel->getReceiverCountryCode());
|
60 |
+
// $parcel->getReceiverEmail();
|
61 |
+
$this->assertEquals($shippingAddress->getTelephone(), $parcel->getReceiverTelephoneNumber());
|
62 |
+
$this->assertNull($parcel->getReceiverTelephonePrefix());
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* test if shipment address is set in parcel if address contains a company name.
|
67 |
+
*
|
68 |
+
* @loadFixture shipments
|
69 |
+
*/
|
70 |
+
public function testTransformationWithCompanyName()
|
71 |
+
{
|
72 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
73 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
74 |
+
$shippingAddress = $shipment->getShippingAddress();
|
75 |
+
$shippingAddress->setFirstname('Apu')
|
76 |
+
->setMiddlename(null)
|
77 |
+
->setLastname('Nahasapeemapetilon')
|
78 |
+
->setCompany('Kwik-E-Mart');
|
79 |
+
|
80 |
+
$shipment->getShippingAddress()->setStreet(array(
|
81 |
+
'line1',
|
82 |
+
'line2',
|
83 |
+
'line3'
|
84 |
+
));
|
85 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
86 |
+
$this->assertEquals('', $parcel->getReceiverFirstname());
|
87 |
+
$this->assertEquals($shippingAddress->getCompany(), $parcel->getReceiverLastname());
|
88 |
+
$this->assertEquals('line1', $parcel->getReceiverStreet());
|
89 |
+
$this->assertEquals('line2 line3', $parcel->getReceiverAddressAdd());
|
90 |
+
|
91 |
+
$shipment->getShippingAddress()->setStreet(array('street'));
|
92 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
93 |
+
$this->assertEquals('', $parcel->getReceiverFirstname());
|
94 |
+
$this->assertEquals($shippingAddress->getCompany(), $parcel->getReceiverLastname());
|
95 |
+
$this->assertEquals('street', $parcel->getReceiverStreet());
|
96 |
+
$this->assertEquals('Apu Nahasapeemapetilon', $parcel->getReceiverAddressAdd());
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* test if shipments of parcels are loaded correctly
|
101 |
+
*
|
102 |
+
* @loadFixture shipments
|
103 |
+
*/
|
104 |
+
public function testShipmentLoading()
|
105 |
+
{
|
106 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipmentId(2);
|
107 |
+
$this->assertEquals('Fürstenberg', $parcel->getShipment()->getShippingAddress()->getLastname());
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* test if exception is thrown for lastnames with more than 25 characters
|
112 |
+
*
|
113 |
+
* @loadFixture shipments
|
114 |
+
*/
|
115 |
+
public function testLastnameOverflow()
|
116 |
+
{
|
117 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
118 |
+
$this->assertEquals('Fürstenberg', $shipment->getShippingAddress()->getLastname());
|
119 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
120 |
+
$this->assertEquals('von Fürstenberg', $parcel->getReceiverLastname());
|
121 |
+
|
122 |
+
$shipment->getShippingAddress()->setMiddlename('Leipzig');
|
123 |
+
$mediumLengthLastName = 'an der Weißen Elster';
|
124 |
+
$shipment->getShippingAddress()->setLastname($mediumLengthLastName);
|
125 |
+
$this->assertEquals($mediumLengthLastName, $shipment->getShippingAddress()->getLastname());
|
126 |
+
$this->setExpectedException(
|
127 |
+
'Netresearch_Hermes_Model_Client_Exception',
|
128 |
+
'Field receiver_lastname must not be longer than 25 characters'
|
129 |
+
);
|
130 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* test if exception is thrown for middle and lastnames with more than 25 characters
|
135 |
+
*
|
136 |
+
* @loadFixture shipments
|
137 |
+
*/
|
138 |
+
public function testMiddleAndLastnameOverflow()
|
139 |
+
{
|
140 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
141 |
+
$overlongName = 'Leipzig an der Weißen Elster';
|
142 |
+
$shipment->getShippingAddress()->setLastname($overlongName);
|
143 |
+
$this->assertEquals($overlongName, $shipment->getShippingAddress()->getLastname());
|
144 |
+
$this->setExpectedException(
|
145 |
+
'Netresearch_Hermes_Model_Client_Exception',
|
146 |
+
'Field receiver_lastname must not be longer than 25 characters'
|
147 |
+
);
|
148 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* test if street is concatenated correctly
|
153 |
+
*
|
154 |
+
* @loadFixture shipments
|
155 |
+
*/
|
156 |
+
public function testStreetConcatenation()
|
157 |
+
{
|
158 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
159 |
+
$shipment->getShippingAddress()->setStreet(array(
|
160 |
+
'line1',
|
161 |
+
'line2',
|
162 |
+
'line3'
|
163 |
+
));
|
164 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
165 |
+
$this->assertEquals('line1', $parcel->getReceiverStreet());
|
166 |
+
$this->assertEquals('line2 line3', $parcel->getReceiverAddressAdd());
|
167 |
+
|
168 |
+
$shipment->getShippingAddress()->setStreet(array(
|
169 |
+
'line1',
|
170 |
+
'line2',
|
171 |
+
));
|
172 |
+
$parcel->setShipment($shipment);
|
173 |
+
$this->assertEquals('line1', $parcel->getReceiverStreet());
|
174 |
+
$this->assertEquals('line2', $parcel->getReceiverAddressAdd());
|
175 |
+
|
176 |
+
$shipment->getShippingAddress()->setStreet(array(
|
177 |
+
'line1'
|
178 |
+
));
|
179 |
+
$parcel->setShipment($shipment);
|
180 |
+
$this->assertEquals('line1', $parcel->getReceiverStreet());
|
181 |
+
$this->assertNull($parcel->getReceiverAddressAdd());
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* test if district is set for ireland shipments
|
186 |
+
*
|
187 |
+
* @loadFixture shipments
|
188 |
+
*/
|
189 |
+
public function testIrelandDistrict()
|
190 |
+
{
|
191 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
192 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
193 |
+
|
194 |
+
$shipment->getShippingAddress()->setRegion('Kilkenny');
|
195 |
+
$shipment->getShippingAddress()->setCountryId('DE');
|
196 |
+
$parcel->setShipment($shipment);
|
197 |
+
$this->assertNull($parcel->getReceiverDistrict());
|
198 |
+
|
199 |
+
$shipment->getShippingAddress()->setCountryId('IE');
|
200 |
+
$parcel->setShipment($shipment);
|
201 |
+
$this->assertEquals('Kilkenny', $parcel->getReceiverDistrict());
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* test if country codes are converted correctly
|
206 |
+
*
|
207 |
+
* @loadFixture shipments
|
208 |
+
*/
|
209 |
+
public function testCountryCodes()
|
210 |
+
{
|
211 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
212 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
213 |
+
|
214 |
+
$shipment->getShippingAddress()->setCountryId('AT');
|
215 |
+
$parcel->setShipment($shipment);
|
216 |
+
$this->assertEquals('AUT', $parcel->getReceiverCountryCode());
|
217 |
+
|
218 |
+
$shipment->getShippingAddress()->setCountryId('BE');
|
219 |
+
$parcel->setShipment($shipment);
|
220 |
+
$this->assertEquals('BEL', $parcel->getReceiverCountryCode());
|
221 |
+
|
222 |
+
$shipment->getShippingAddress()->setCountryId('DE');
|
223 |
+
$parcel->setShipment($shipment);
|
224 |
+
$this->assertEquals('DEU', $parcel->getReceiverCountryCode());
|
225 |
+
|
226 |
+
$shipment->getShippingAddress()->setCountryId('DK');
|
227 |
+
$parcel->setShipment($shipment);
|
228 |
+
$this->assertEquals('DNK', $parcel->getReceiverCountryCode());
|
229 |
+
|
230 |
+
$shipment->getShippingAddress()->setCountryId('IE');
|
231 |
+
$parcel->setShipment($shipment);
|
232 |
+
$this->assertEquals('IRL', $parcel->getReceiverCountryCode());
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* test if email is set according to mail sending option
|
237 |
+
*
|
238 |
+
* @loadFixture shipments
|
239 |
+
*/
|
240 |
+
public function testEmail()
|
241 |
+
{
|
242 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
243 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
244 |
+
$store = Mage::app()->getStore(0)->load(0);
|
245 |
+
|
246 |
+
$path = 'hermes/shipment_options/hermes_mail';
|
247 |
+
$previousValue = Mage::getStoreConfig($path);
|
248 |
+
$store->setConfig($path, 0);
|
249 |
+
$parcel->setShipment($shipment);
|
250 |
+
$this->assertNull($parcel->getReceiverEmail());
|
251 |
+
|
252 |
+
$store->setConfig($path, 1);
|
253 |
+
$parcel->setShipment($shipment);
|
254 |
+
$this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $parcel->getReceiverEmail());
|
255 |
+
|
256 |
+
$store->setConfig($path, $previousValue);
|
257 |
+
}
|
258 |
+
|
259 |
+
public function testStatusGetter()
|
260 |
+
{
|
261 |
+
$parcel = Mage::getModel('hermes/parcel');
|
262 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
|
263 |
+
$this->assertTrue($parcel->isQueued(), 'parcel should be queued');
|
264 |
+
$this->assertFalse($parcel->isClosed(), 'parcel should not be closed');
|
265 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
266 |
+
|
267 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
268 |
+
$this->assertTrue($parcel->isProcessed(), 'parcel should be processed');
|
269 |
+
$this->assertFalse($parcel->isClosed(), 'parcel should not be closed');
|
270 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
271 |
+
|
272 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
|
273 |
+
$this->assertTrue($parcel->isQueuedToCancel(), 'parcel should be queued to be canceled');
|
274 |
+
$this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
|
275 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
276 |
+
|
277 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
|
278 |
+
$this->assertTrue($parcel->isCanceled(), 'parcel should be canceled');
|
279 |
+
$this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
|
280 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
281 |
+
|
282 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_FAILED);
|
283 |
+
$this->assertTrue($parcel->isCancelFailed(), 'parcel cancellation should have failed');
|
284 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
285 |
+
|
286 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
|
287 |
+
$this->assertTrue($parcel->isFailed(), 'parcel transmission should have failed');
|
288 |
+
$this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
|
289 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
290 |
+
|
291 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
|
292 |
+
$this->assertTrue($parcel->isInTransmission(), 'parcel should be in transmission');
|
293 |
+
$this->assertFalse($parcel->canBeResumed(), 'parcel should NOT be resumable');
|
294 |
+
|
295 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
|
296 |
+
$this->assertTrue($parcel->isClosed(), 'parcel should be closed');
|
297 |
+
$this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
|
298 |
+
$this->assertFalse($parcel->canBeResumed(), 'parcel should NOT be resumable');
|
299 |
+
|
300 |
+
$this->assertEquals(8, count($parcel->getStatusCodes()));
|
301 |
+
}
|
302 |
+
|
303 |
+
public function testErrors()
|
304 |
+
{
|
305 |
+
$parcel = Mage::getModel('hermes/parcel');
|
306 |
+
$parcel->setErrorCode(499);
|
307 |
+
$this->assertEquals(499, $parcel->getErrorCode());
|
308 |
+
|
309 |
+
$parcel->setErrorCodes(array(499, 501));
|
310 |
+
$this->assertEquals(array(499, 501), $parcel->getErrorCodes());
|
311 |
+
|
312 |
+
$parcel->setErrorMessages(array('foo', 'bar'));
|
313 |
+
$this->assertEquals(array('foo', 'bar'), $parcel->getErrorMessages());
|
314 |
+
|
315 |
+
$parcel->setErrorCode(json_encode(array('1', '2')));
|
316 |
+
$this->assertEquals(array('1', '2'), $parcel->getErrorCodes());
|
317 |
+
|
318 |
+
$parcel->setErrorMessage(json_encode(array('foo', 'bar')));
|
319 |
+
$this->assertEquals(array('foo', 'bar'), $parcel->getErrorMessages());
|
320 |
+
}
|
321 |
+
|
322 |
+
public function testGetStatusCodes()
|
323 |
+
{
|
324 |
+
$parcel = Mage::getModel('hermes/parcel');
|
325 |
+
$this->assertTrue(is_array($parcel->getStatusCodes()));
|
326 |
+
$this->assertTrue(count($parcel->getStatusCodes()) > 0);
|
327 |
+
}
|
328 |
+
|
329 |
+
public function testGetStatusText()
|
330 |
+
{
|
331 |
+
$parcel = Mage::getModel('hermes/parcel');
|
332 |
+
|
333 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
|
334 |
+
$this->assertEquals("new (queued)", $parcel->getStatusText());
|
335 |
+
|
336 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
|
337 |
+
$this->assertEquals("processed", $parcel->getStatusText());
|
338 |
+
|
339 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
|
340 |
+
$this->assertEquals("cancel (queued)", $parcel->getStatusText());
|
341 |
+
|
342 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
|
343 |
+
$this->assertEquals("canceled", $parcel->getStatusText());
|
344 |
+
|
345 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_FAILED);
|
346 |
+
$this->assertEquals("cancel (failed)", $parcel->getStatusText());
|
347 |
+
|
348 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
|
349 |
+
$this->assertEquals("new (failed)", $parcel->getStatusText());
|
350 |
+
|
351 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
|
352 |
+
$this->assertEquals("in transmission", $parcel->getStatusText());
|
353 |
+
|
354 |
+
$parcel->setStatusCode('foo');
|
355 |
+
$this->assertEquals('foo', $parcel->getStatusText());
|
356 |
+
}
|
357 |
+
|
358 |
+
public function testRepeatTransmission()
|
359 |
+
{
|
360 |
+
$parcel = Mage::getModel('hermes/parcel');
|
361 |
+
foreach (array(
|
362 |
+
Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED,
|
363 |
+
Netresearch_Hermes_Model_Parcel::STATUS_CANCELED,
|
364 |
+
Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED,
|
365 |
+
) as $sourceState) {
|
366 |
+
$parcel->setStatusCode($sourceState);
|
367 |
+
$parcel->repeatTransmission();
|
368 |
+
$this->assertEquals(
|
369 |
+
Netresearch_Hermes_Model_Parcel::STATUS_QUEUED,
|
370 |
+
$parcel->getStatusCode()
|
371 |
+
);
|
372 |
+
}
|
373 |
+
|
374 |
+
/* if state is in_transmission or closed the state shouldn't be reverted
|
375 |
+
* to new_queued
|
376 |
+
*
|
377 |
+
*/
|
378 |
+
foreach (array(
|
379 |
+
Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION,
|
380 |
+
Netresearch_Hermes_Model_Parcel::STATUS_CLOSED
|
381 |
+
) as $sourceState) {
|
382 |
+
$parcel->setStatusCode($sourceState);
|
383 |
+
$parcel->repeatTransmission();
|
384 |
+
$this->assertEquals(
|
385 |
+
$sourceState,
|
386 |
+
$parcel->getStatusCode()
|
387 |
+
);
|
388 |
+
}
|
389 |
+
|
390 |
+
|
391 |
+
}
|
392 |
+
|
393 |
+
/**
|
394 |
+
*
|
395 |
+
* @loadFixture ../../../var/fixtures//parcels.yaml
|
396 |
+
*/
|
397 |
+
public function testGetHermesOrderNo()
|
398 |
+
{
|
399 |
+
$parcel = Mage::getModel('hermes/parcel')->load(7);
|
400 |
+
$this->assertEquals(8, $parcel->getHermesOrderNo());
|
401 |
+
$parcel = Mage::getModel('hermes/parcel')->load(8);
|
402 |
+
$this->assertNull($parcel->getHermesOrderNo());
|
403 |
+
}
|
404 |
+
|
405 |
+
/**
|
406 |
+
*
|
407 |
+
* @loadFixture ../../../var/fixtures/parcels.yaml
|
408 |
+
*/
|
409 |
+
public function testGetTrackingUrl()
|
410 |
+
{
|
411 |
+
$parcel = Mage::getModel('hermes/parcel')->load(7);
|
412 |
+
$this->assertEquals(Mage::getModel('hermes/config')->getTrackingUrl($parcel),
|
413 |
+
$parcel->getTrackingUrl()
|
414 |
+
);
|
415 |
+
}
|
416 |
+
|
417 |
+
/**
|
418 |
+
*
|
419 |
+
* @loadFixture ../../../var/fixtures/parcels.yaml
|
420 |
+
*/
|
421 |
+
public function testGetLabel()
|
422 |
+
{
|
423 |
+
|
424 |
+
/* simulate response */
|
425 |
+
$expectedPdf = 'ThisShouldBeALabel';
|
426 |
+
$expected = new Netresearch_Hermes_Model_Client_Response();
|
427 |
+
|
428 |
+
$expected->setResult($expectedPdf);
|
429 |
+
|
430 |
+
$client = $this->getModelMock('hermes/client', array('getLabelJpeg', 'getLabelPdf'));
|
431 |
+
$client->expects($this->any())
|
432 |
+
->method('getLabelJpeg')
|
433 |
+
->will($this->returnValue($expected));
|
434 |
+
$client->expects($this->any())
|
435 |
+
->method('getLabelPdf')
|
436 |
+
->will($this->returnValue($expected));
|
437 |
+
$this->replaceByMock('model', 'hermes/client', $client);
|
438 |
+
$parcel = Mage::getModel('hermes/parcel')->load(7);
|
439 |
+
|
440 |
+
$this->assertTrue(is_string($parcel->getLabel('jpeg')));
|
441 |
+
$this->assertEquals(Mage::getModel('hermes/client')->getLabelJpeg($parcel)->getResult(), $parcel->getLabel('jpeg'));
|
442 |
+
$path = 'hermes/shipment_label_options/hermes/shipment_label_options/shipment_label_option_pdf';
|
443 |
+
Mage::app()->getStore(0)->load(0)->setConfig($path, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
|
444 |
+
$this->assertEquals(Mage::getModel('hermes/client')
|
445 |
+
->getLabelPdf($parcel, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT)->getResult(), $parcel->getLabel('pdf'));
|
446 |
+
$this->assertTrue($parcel->isClosed());
|
447 |
+
|
448 |
+
|
449 |
+
$client->expects($this->any())
|
450 |
+
->method('getLabelJpeg')
|
451 |
+
->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
|
452 |
+
$client->expects($this->any())
|
453 |
+
->method('getLabelPdf')
|
454 |
+
->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
|
455 |
+
$this->replaceByMock('model', 'hermes/client_soap', $client);
|
456 |
+
$this->setExpectedException('NetresearchSoapFault');
|
457 |
+
$parcel->getLabel('jpeg');
|
458 |
+
$parcel->getLabel('pdf', Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
|
459 |
+
}
|
460 |
+
|
461 |
+
public function testAddTrack()
|
462 |
+
{
|
463 |
+
$hermesOrderNo = '987234';
|
464 |
+
|
465 |
+
$config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
|
466 |
+
$config->expects($this->any())
|
467 |
+
->method('isTrackingLinkMailEnabled')
|
468 |
+
->will($this->returnValue(true));
|
469 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
470 |
+
|
471 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'notifyCustomer'));
|
472 |
+
$parcel->setHermesOrderNo($hermesOrderNo);
|
473 |
+
|
474 |
+
$shipment = $this->getModelMock('sales/order_shipment', array('addTrack', 'save'));
|
475 |
+
|
476 |
+
$parcel->expects($this->once())
|
477 |
+
->method('notifyCustomer')
|
478 |
+
->will($this->returnSelf());
|
479 |
+
$parcel->expects($this->once())
|
480 |
+
->method('getShipment')
|
481 |
+
->will($this->returnValue($shipment));
|
482 |
+
|
483 |
+
$track = $this->getModelMock('sales/order_shipment_track', array('setNumber', 'setCarrierCode', 'setTitle'));
|
484 |
+
$track->expects($this->once())
|
485 |
+
->method('setNumber')
|
486 |
+
->with($this->equalTo($hermesOrderNo))
|
487 |
+
->will($this->returnSelf());
|
488 |
+
$track->expects($this->once())
|
489 |
+
->method('setCarrierCode')
|
490 |
+
->with($this->equalTo('hermes'))
|
491 |
+
->will($this->returnSelf());
|
492 |
+
$track->expects($this->once())
|
493 |
+
->method('setTitle')
|
494 |
+
->with($this->equalTo('Hermes'))
|
495 |
+
->will($this->returnSelf());
|
496 |
+
$this->replaceByMock('model', 'sales/order_shipment_track', $track);
|
497 |
+
|
498 |
+
$shipment->expects($this->once())
|
499 |
+
->method('addTrack')
|
500 |
+
->with($track)
|
501 |
+
->will($this->returnSelf());
|
502 |
+
|
503 |
+
$parcel->addTrack();
|
504 |
+
}
|
505 |
+
|
506 |
+
|
507 |
+
/**
|
508 |
+
*
|
509 |
+
* @loadFixture shipments
|
510 |
+
*/
|
511 |
+
public function testRemoveTrack()
|
512 |
+
{
|
513 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
514 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
515 |
+
$shippingAddress = $shipment->getShippingAddress();
|
516 |
+
$shippingAddress->setFirstname('Apu')
|
517 |
+
->setMiddlename(null)
|
518 |
+
->setLastname('Nahasapeemapetilon')
|
519 |
+
->setCompany('Kwik-E-Mart');
|
520 |
+
$shipment->getShippingAddress()->setStreet(array(
|
521 |
+
'line1',
|
522 |
+
'line2',
|
523 |
+
'line3'
|
524 |
+
));
|
525 |
+
$parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
|
526 |
+
$parcel->setHermesOrderNo('4711');
|
527 |
+
$tracks = $shipment->getAllTracks();
|
528 |
+
$parcel->addTrack();
|
529 |
+
$this->assertTrue((sizeof($parcel->getShipment()->getAllTracks()) > sizeof($tracks)));
|
530 |
+
$parcel->removeTrack();
|
531 |
+
$shipment = Mage::getModel('sales/order_shipment')->load(2);
|
532 |
+
$this->assertEquals(sizeof($tracks), sizeof($shipment->getAllTracks()));
|
533 |
+
}
|
534 |
+
|
535 |
+
public function testNotAddTrack()
|
536 |
+
{
|
537 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'notifyCustomer'));
|
538 |
+
$parcel->setHermesOrderNo(null);
|
539 |
+
$shipment = $this->getModelMock('sales/order_shipment', array('addTrack'));
|
540 |
+
$shipment->expects($this->never())
|
541 |
+
->method('addTrack')
|
542 |
+
->will($this->returnSelf());
|
543 |
+
|
544 |
+
$parcel->addTrack();
|
545 |
+
}
|
546 |
+
|
547 |
+
public function testNotNotifyCustomer()
|
548 |
+
{
|
549 |
+
/**
|
550 |
+
* nothing should happen if tracking mail is disabled
|
551 |
+
*/
|
552 |
+
$config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
|
553 |
+
$config->expects($this->any())
|
554 |
+
->method('isTrackingLinkMailEnabled')
|
555 |
+
->will($this->returnValue(false));
|
556 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
557 |
+
|
558 |
+
Mage::getModel('hermes/parcel')->notifyCustomer();
|
559 |
+
}
|
560 |
+
|
561 |
+
public function testNotifyCustomer()
|
562 |
+
{
|
563 |
+
$parcel = $this->getModelMock('hermes/parcel', array('getShipment'));
|
564 |
+
$parcel->setHermesOrderNo('1234567890');
|
565 |
+
|
566 |
+
$config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
|
567 |
+
|
568 |
+
/**
|
569 |
+
* customer should be notified if tracking mail is enabled
|
570 |
+
*/
|
571 |
+
$config->expects($this->any())
|
572 |
+
->method('isTrackingLinkMailEnabled')
|
573 |
+
->will($this->returnValue(true));
|
574 |
+
$this->replaceByMock('model', 'hermes/config', $config);
|
575 |
+
|
576 |
+
$shipment = $this->getModelMock('sales/order_shipment', array('sendEmail', 'setEmailSent', 'save'));
|
577 |
+
$shipment->expects($this->once())
|
578 |
+
->method('sendEmail')
|
579 |
+
->with($this->equalTo(true))
|
580 |
+
->will($this->returnSelf());
|
581 |
+
$shipment->expects($this->once())
|
582 |
+
->method('setEmailSent')
|
583 |
+
->with($this->equalTo(true))
|
584 |
+
->will($this->returnSelf());
|
585 |
+
|
586 |
+
$parcel->expects($this->once())
|
587 |
+
->method('getShipment')
|
588 |
+
->will($this->returnValue($shipment));
|
589 |
+
|
590 |
+
$parcel->notifyCustomer();
|
591 |
+
}
|
592 |
+
}
|
593 |
+
|
app/code/community/Netresearch/Hermes/Test/Model/ParcelTest/fixtures/shipments.yaml
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 42
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: 'EUR'
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
12 |
+
|
13 |
+
sales/shipment:
|
14 |
+
- entity_id: 2
|
15 |
+
increment_id: 100000077
|
16 |
+
order_id: 31
|
17 |
+
shipping_address_id: 45
|
18 |
+
|
19 |
+
sales/order_address:
|
20 |
+
- entity_id: 45
|
21 |
+
parent_id: 31
|
22 |
+
address_type: 'shipping'
|
23 |
+
firstname: 'Hubertus'
|
24 |
+
postcode: '04229'
|
25 |
+
lastname: 'Fürstenberg'
|
26 |
+
street: 'An der Tabaksmühle 3a'
|
27 |
+
city: 'Leipzig'
|
28 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
29 |
+
country_id: 'DE'
|
30 |
+
prefix: 'Prof. Dr.'
|
31 |
+
middlename: 'von'
|
32 |
+
suffix: 'MdL'
|
33 |
+
|
34 |
+
sales/order_payment:
|
35 |
+
- entity_id: 23
|
36 |
+
parent_id: 31
|
37 |
+
method: 'checkmo'
|
app/code/community/Netresearch/Hermes/Test/Model/Shipping/Carrier/HermesTest.php
ADDED
@@ -0,0 +1,135 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes carrier unittest
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_Shipping_Carrier_HermesTest extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
public function testIsActive()
|
34 |
+
{
|
35 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
36 |
+
$this->assertTrue($carrier->isActive());
|
37 |
+
}
|
38 |
+
|
39 |
+
public function testIsTrackingAvailable()
|
40 |
+
{
|
41 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
42 |
+
$this->assertTrue($carrier->isTrackingAvailable());
|
43 |
+
}
|
44 |
+
|
45 |
+
public function testCollectRates()
|
46 |
+
{
|
47 |
+
$request = Mage::getModel('shipping/rate_request');
|
48 |
+
$result = Mage::getModel('shipping/rate_result');
|
49 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
50 |
+
$this->assertEquals($result, $carrier->collectRates($request));
|
51 |
+
}
|
52 |
+
|
53 |
+
public function testGetTrackingInfo()
|
54 |
+
{
|
55 |
+
$trackingResult = $this->getModelMock('shipping/tracking_result', array('getAllTrackings'));
|
56 |
+
$trackingResult->expects($this->any())
|
57 |
+
->method('getAllTrackings')
|
58 |
+
->will($this->returnValue(array('bar')));
|
59 |
+
|
60 |
+
$carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
|
61 |
+
$carrier->expects($this->any())
|
62 |
+
->method('getTracking')
|
63 |
+
->will($this->returnValue($trackingResult));
|
64 |
+
$this->assertEquals('bar', $carrier->getTrackingInfo('foo'));
|
65 |
+
|
66 |
+
$trackingResult = 'xyz';
|
67 |
+
$carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
|
68 |
+
$carrier->expects($this->any())
|
69 |
+
->method('getTracking')
|
70 |
+
->will($this->returnValue($trackingResult));
|
71 |
+
$this->assertEquals('xyz', $carrier->getTrackingInfo('abc'));
|
72 |
+
|
73 |
+
$trackingResult = '';
|
74 |
+
$carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
|
75 |
+
$carrier->expects($this->any())
|
76 |
+
->method('getTracking')
|
77 |
+
->will($this->returnValue($trackingResult));
|
78 |
+
$this->assertFalse($carrier->getTrackingInfo('abc'));
|
79 |
+
}
|
80 |
+
|
81 |
+
public function testGetHermesTracking()
|
82 |
+
{
|
83 |
+
$trackings = array('123', 'abc');
|
84 |
+
|
85 |
+
$status = $this->getModelMock('shipping/tracking_result_status', array(
|
86 |
+
'setCarrierTitle',
|
87 |
+
'setCarrier',
|
88 |
+
'setPopup'
|
89 |
+
));
|
90 |
+
$status->expects($this->exactly(2))
|
91 |
+
->method('setCarrierTitle')
|
92 |
+
->with($this->equalTo('Hermes'))
|
93 |
+
->will($this->returnSelf());
|
94 |
+
$status->expects($this->exactly(2))
|
95 |
+
->method('setCarrier')
|
96 |
+
->with($this->equalTo('hermes'))
|
97 |
+
->will($this->returnSelf());
|
98 |
+
$status->expects($this->exactly(2))
|
99 |
+
->method('setPopup')
|
100 |
+
->with($this->equalTo(true))
|
101 |
+
->will($this->returnSelf());
|
102 |
+
$this->replaceByMock('model', 'shipping/tracking_result_status', $status);
|
103 |
+
|
104 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
105 |
+
$result = $carrier->getTracking($trackings);
|
106 |
+
|
107 |
+
$this->assertInstanceOf('Mage_Shipping_Model_Tracking_Result', $result);
|
108 |
+
$tracks = $result->getAllTrackings();
|
109 |
+
|
110 |
+
$this->assertEquals(2, count($tracks));
|
111 |
+
$this->assertEquals('abc', $tracks[1]->getTracking());
|
112 |
+
$this->assertEquals(
|
113 |
+
Mage::getModel('hermes/config')->getTrackingUrl('abc'),
|
114 |
+
$tracks[1]->getUrl()
|
115 |
+
);
|
116 |
+
}
|
117 |
+
|
118 |
+
public function testGetSingleHermesTracking()
|
119 |
+
{
|
120 |
+
$trackings = 'wrgl';
|
121 |
+
|
122 |
+
$carrier = Mage::getModel('hermes/shipping_carrier_hermes');
|
123 |
+
$result = $carrier->getTracking($trackings);
|
124 |
+
|
125 |
+
$this->assertInstanceOf('Mage_Shipping_Model_Tracking_Result', $result);
|
126 |
+
$tracks = $result->getAllTrackings();
|
127 |
+
|
128 |
+
$this->assertEquals(1, count($tracks));
|
129 |
+
$this->assertEquals('wrgl', $tracks[0]->getTracking());
|
130 |
+
$this->assertEquals(
|
131 |
+
Mage::getModel('hermes/config')->getTrackingUrl('wrgl'),
|
132 |
+
$tracks[0]->getUrl()
|
133 |
+
);
|
134 |
+
}
|
135 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Payment/Methods.php
ADDED
@@ -0,0 +1,62 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Payment Methods Source Test
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_System_Config_Source_Payment_Methods extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
public function testSourceClassExists()
|
34 |
+
{
|
35 |
+
$this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Payment_Methods'));
|
36 |
+
return new Netresearch_Hermes_Model_System_Config_Source_Payment_Methods();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @depends testSourceClassExists
|
41 |
+
*/
|
42 |
+
public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Payment_Methods $sourcePaymentMethods)
|
43 |
+
{
|
44 |
+
$this->assertTrue(method_exists($sourcePaymentMethods, "toOptionArray"));
|
45 |
+
$this->assertTrue(is_array($sourcePaymentMethods->toOptionArray()));
|
46 |
+
|
47 |
+
$options = $sourcePaymentMethods->toOptionArray();
|
48 |
+
$this->assertNotEmpty($options);
|
49 |
+
$this->assertTrue(
|
50 |
+
count($options) > 0,
|
51 |
+
sprintf(
|
52 |
+
"Payment methods calculated (%s) num is not bigger 0",
|
53 |
+
count($options)
|
54 |
+
)
|
55 |
+
);
|
56 |
+
}
|
57 |
+
|
58 |
+
protected function _getPaymentProviders()
|
59 |
+
{
|
60 |
+
return Mage::getStoreConfig('payment');
|
61 |
+
}
|
62 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch_Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Shipment LabelPlacements Options Source Test
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_LabelPlacementsTest
|
32 |
+
extends EcomDev_PHPUnit_Test_Case_Config
|
33 |
+
{
|
34 |
+
|
35 |
+
/**
|
36 |
+
* tests if the the source class (Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions)
|
37 |
+
* is present
|
38 |
+
* @return Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements()
|
39 |
+
*/
|
40 |
+
public function testSourceClassExists()
|
41 |
+
{
|
42 |
+
$this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements'));
|
43 |
+
return new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements();
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @depends testSourceClassExists
|
48 |
+
* @loadExpectation
|
49 |
+
*/
|
50 |
+
public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements $sourceLabelPlacementOptions)
|
51 |
+
{
|
52 |
+
$this->assertTrue(method_exists($sourceLabelPlacementOptions, "toOptionArray"));
|
53 |
+
$this->assertTrue(is_array($sourceLabelPlacementOptions->toOptionArray()));
|
54 |
+
$options = $sourceLabelPlacementOptions->toOptionArray();
|
55 |
+
$this->assertNotEmpty($options);
|
56 |
+
$this->assertEquals($this->expected()->getCount(), count($options), "label options are smaller than expected");
|
57 |
+
$labelPlacementOptions = $this->expected()->getLabelValues();
|
58 |
+
foreach ($options as $option) {
|
59 |
+
$this->assertTrue(in_array($option['value'],
|
60 |
+
array_keys($labelPlacementOptions)),
|
61 |
+
"Shipment label options are smaller than expected");
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest/expectations/testToOptionArray.yaml
ADDED
@@ -0,0 +1,6 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
count: 4
|
2 |
+
label_values:
|
3 |
+
1 : 'top left'
|
4 |
+
2 : 'top right'
|
5 |
+
3 : 'bottom left'
|
6 |
+
4 : 'bottom right'
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/Methods.php
ADDED
@@ -0,0 +1,57 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes System Config Shipment Methods Source Test
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_Methods extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
public function testSourceClassExists()
|
34 |
+
{
|
35 |
+
$this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods'));
|
36 |
+
return new Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @depends testSourceClassExists
|
41 |
+
*/
|
42 |
+
public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods $sourceShipmentOptions)
|
43 |
+
{
|
44 |
+
$this->assertTrue(method_exists($sourceShipmentOptions, "toOptionArray"));
|
45 |
+
$this->assertTrue(is_array($sourceShipmentOptions->toOptionArray()));
|
46 |
+
|
47 |
+
$options = $sourceShipmentOptions->toOptionArray();
|
48 |
+
$this->assertNotEmpty($options);
|
49 |
+
$this->assertTrue(count($options) >= count($this->_getCarriers()), "Shipping methods were smaller then Magento Shipping Carriers");
|
50 |
+
}
|
51 |
+
|
52 |
+
protected function _getCarriers()
|
53 |
+
{
|
54 |
+
$carriers = new Mage_Shipping_Model_Config();
|
55 |
+
return $carriers->getAllCarriers();
|
56 |
+
}
|
57 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest.php
ADDED
@@ -0,0 +1,77 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch_Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Hermes System Config Shipment Label Options Source Test
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
29 |
+
*/
|
30 |
+
class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_ShipmentLabelFormatTest
|
31 |
+
extends EcomDev_PHPUnit_Test_Case_Config
|
32 |
+
{
|
33 |
+
|
34 |
+
/**
|
35 |
+
* tests if the the source class (Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions)
|
36 |
+
* is present
|
37 |
+
* @return Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods
|
38 |
+
*/
|
39 |
+
public function testSourceClassExists()
|
40 |
+
{
|
41 |
+
$this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions'));
|
42 |
+
return new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions();
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @depends testSourceClassExists
|
47 |
+
* @loadExpectation
|
48 |
+
*/
|
49 |
+
public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions $sourceLabelFormatOptions)
|
50 |
+
{
|
51 |
+
$this->assertTrue(method_exists($sourceLabelFormatOptions, "toOptionArray"));
|
52 |
+
$this->assertTrue(is_array($sourceLabelFormatOptions->toOptionArray()));
|
53 |
+
$options = $sourceLabelFormatOptions->toOptionArray();
|
54 |
+
$this->assertNotEmpty($options);
|
55 |
+
$this->assertEquals($this->expected()->getCount(), count($options), "Shipment label options are smaller than expected");
|
56 |
+
$expectedLabelValues = $this->expected()->getLabelValues();
|
57 |
+
foreach ($options as $option) {
|
58 |
+
$this->assertTrue(in_array($option['value'],
|
59 |
+
array_keys($expectedLabelValues)),
|
60 |
+
"Shipment label options are smaller than expected");
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @depends testSourceClassExists
|
66 |
+
*
|
67 |
+
*/
|
68 |
+
public function testGetLabelFileFormats()
|
69 |
+
{
|
70 |
+
$fileFormats = Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::getLabelFileFormats();
|
71 |
+
$this->assertTrue(is_array($fileFormats));
|
72 |
+
$this->assertGreaterThan(0, sizeof($fileFormats));
|
73 |
+
$this->assertContains(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF, $fileFormats);
|
74 |
+
$this->assertContains(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG, $fileFormats);
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest/expectations/testToOptionArray.yaml
ADDED
@@ -0,0 +1,3 @@
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
count: 1
|
2 |
+
label_values:
|
3 |
+
'pdf': 'pdf'
|
app/code/community/Netresearch/Hermes/Test/var/fixtures/orderList1.yaml
ADDED
@@ -0,0 +1,306 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 42
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: 'EUR'
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
12 |
+
|
13 |
+
- entity_id: 32
|
14 |
+
increment_id: 100000056
|
15 |
+
shipping_address_id: 43
|
16 |
+
base_grand_total: 177.55
|
17 |
+
grand_total: 177.55
|
18 |
+
currency: 'EUR'
|
19 |
+
customer_gender: 1
|
20 |
+
shipping_method: 'flatrate_flatrate'
|
21 |
+
customer_email: 'willi.usa.customer@trash-mail.com'
|
22 |
+
|
23 |
+
- entity_id: 33
|
24 |
+
increment_id: 100000057
|
25 |
+
shipping_address_id: 43
|
26 |
+
base_grand_total: 2500.01
|
27 |
+
grand_total: 2500.01
|
28 |
+
currency: 'EUR'
|
29 |
+
customer_gender: 1
|
30 |
+
shipping_method: 'flatrate_flatrate'
|
31 |
+
customer_email: 'willi.usa.customer@trash-mail.com'
|
32 |
+
|
33 |
+
- entity_id: 34
|
34 |
+
increment_id: 100000058
|
35 |
+
shipping_address_id: 48
|
36 |
+
base_grand_total: 150.77
|
37 |
+
grand_total: 150.77
|
38 |
+
currency: 'EUR'
|
39 |
+
customer_gender: 1
|
40 |
+
shipping_method: 'flatrate_flatrate'
|
41 |
+
customer_email: 'trinity@trash-mail.com'
|
42 |
+
|
43 |
+
- entity_id: 35
|
44 |
+
increment_id: 100000059
|
45 |
+
shipping_address_id: 49
|
46 |
+
base_grand_total: 303.77
|
47 |
+
grand_total: 303.77
|
48 |
+
currency: 'EUR'
|
49 |
+
customer_gender: 1
|
50 |
+
shipping_method: 'flatrate_flatrate'
|
51 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
52 |
+
|
53 |
+
- entity_id: 36
|
54 |
+
increment_id: 100000060
|
55 |
+
shipping_address_id: 49
|
56 |
+
base_grand_total: 303.77
|
57 |
+
grand_total: 303.77
|
58 |
+
currency: 'EUR'
|
59 |
+
customer_gender: 1
|
60 |
+
shipping_method: 'flatrate_flatrate'
|
61 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
62 |
+
|
63 |
+
- entity_id: 37
|
64 |
+
increment_id: 100000061
|
65 |
+
shipping_address_id: 49
|
66 |
+
base_grand_total: 3501.00
|
67 |
+
grand_total: 3501.00
|
68 |
+
currency: 'EUR'
|
69 |
+
customer_gender: 1
|
70 |
+
shipping_method: 'flatrate_flatrate'
|
71 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
72 |
+
|
73 |
+
- entity_id: 38
|
74 |
+
status: 'processed'
|
75 |
+
increment_id: 100000062
|
76 |
+
shipping_address_id: 49
|
77 |
+
base_grand_total: 501.00
|
78 |
+
grand_total: 501.00
|
79 |
+
currency: 'EUR'
|
80 |
+
customer_gender: 1
|
81 |
+
shipping_method: 'flatrate_flatrate'
|
82 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
83 |
+
created_at: '2012-05-02'
|
84 |
+
|
85 |
+
- entity_id: 39
|
86 |
+
status: 'pending'
|
87 |
+
increment_id: 100000063
|
88 |
+
shipping_address_id: 49
|
89 |
+
base_grand_total: 501.00
|
90 |
+
grand_total: 501.00
|
91 |
+
currency: 'EUR'
|
92 |
+
customer_gender: 1
|
93 |
+
shipping_method: 'flatrate_flatrate'
|
94 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
95 |
+
created_at: '2011-01-01'
|
96 |
+
|
97 |
+
sales/shipment:
|
98 |
+
- entity_id: 2
|
99 |
+
increment_id: 100000077
|
100 |
+
order_id: 31
|
101 |
+
shipping_address_id: 45
|
102 |
+
|
103 |
+
- entity_id: 3
|
104 |
+
increment_id: 100000078
|
105 |
+
order_id: 32
|
106 |
+
shipping_address_id: 46
|
107 |
+
|
108 |
+
- entity_id: 4
|
109 |
+
increment_id: 100000079
|
110 |
+
order_id: 33
|
111 |
+
shipping_address_id: 47
|
112 |
+
|
113 |
+
- entity_id: 5
|
114 |
+
increment_id: 100000080
|
115 |
+
order_id: 34
|
116 |
+
shipping_address_id: 48
|
117 |
+
|
118 |
+
- entity_id: 6
|
119 |
+
increment_id: 100000081
|
120 |
+
order_id: 35
|
121 |
+
shipping_address_id: 49
|
122 |
+
|
123 |
+
- entity_id: 7
|
124 |
+
increment_id: 100000082
|
125 |
+
order_id: 36
|
126 |
+
shipping_address_id: 49
|
127 |
+
|
128 |
+
- entity_id: 8
|
129 |
+
increment_id: 100000083
|
130 |
+
order_id: 38
|
131 |
+
shipping_address_id: 49
|
132 |
+
|
133 |
+
- entity_id: 9
|
134 |
+
increment_id: 100000084
|
135 |
+
order_id: 37
|
136 |
+
shipping_address_id: 49
|
137 |
+
|
138 |
+
sales/order_address:
|
139 |
+
- entity_id: 45
|
140 |
+
parent_id: 31
|
141 |
+
address_type: 'shipping'
|
142 |
+
firstname: 'Hubertus'
|
143 |
+
postcode: '04229'
|
144 |
+
lastname: 'Fürstenberg'
|
145 |
+
street: 'An der Tabaksmühle 3a'
|
146 |
+
city: 'Leipzig'
|
147 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
148 |
+
country_id: 'DE'
|
149 |
+
prefix: 'Prof. Dr.'
|
150 |
+
middlename: 'von'
|
151 |
+
suffix: 'MdL'
|
152 |
+
company: ''
|
153 |
+
|
154 |
+
- entity_id: 46
|
155 |
+
parent_id: 32
|
156 |
+
address_type: 'shipping'
|
157 |
+
firstname: 'Willi'
|
158 |
+
postcode: '12345'
|
159 |
+
lastname: 'Usa'
|
160 |
+
street: 'Washington Street 11'
|
161 |
+
city: 'New York'
|
162 |
+
email: 'willi.usa.customer@trash-mail.com'
|
163 |
+
country_id: 'US'
|
164 |
+
prefix: 'Master'
|
165 |
+
middlename: ''
|
166 |
+
suffix: ''
|
167 |
+
company: ''
|
168 |
+
|
169 |
+
- entity_id: 47
|
170 |
+
parent_id: 33
|
171 |
+
address_type: 'shipping'
|
172 |
+
firstname: 'Hubertus'
|
173 |
+
postcode: '04229'
|
174 |
+
lastname: 'Fürstenberg'
|
175 |
+
street: 'An der Tabaksmühle 3a'
|
176 |
+
city: 'Leipzig'
|
177 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
178 |
+
country_id: 'DE'
|
179 |
+
prefix: 'Prof. Dr.'
|
180 |
+
middlename: 'von'
|
181 |
+
suffix: 'MdL'
|
182 |
+
company: ''
|
183 |
+
|
184 |
+
- entity_id: 48
|
185 |
+
parent_id: 34
|
186 |
+
address_type: 'shipping'
|
187 |
+
firstname: 'James'
|
188 |
+
postcode: '11 ftN'
|
189 |
+
lastname: 'Covington'
|
190 |
+
street: '77 Minory'
|
191 |
+
city: 'London'
|
192 |
+
email: 'trinity@trash-mail.com'
|
193 |
+
country_id: 'GB'
|
194 |
+
|
195 |
+
- entity_id: 49
|
196 |
+
parent_id: 35
|
197 |
+
address_type: 'shipping'
|
198 |
+
firstname: 'Hubertus'
|
199 |
+
postcode: '04229'
|
200 |
+
lastname: 'Fürstenberg'
|
201 |
+
street: 'An der Tabaksmühle 3a'
|
202 |
+
city: 'Leipzig'
|
203 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
204 |
+
country_id: 'DE'
|
205 |
+
prefix: 'Prof. Dr.'
|
206 |
+
middlename: 'von'
|
207 |
+
suffix: 'MdL'
|
208 |
+
company: ''
|
209 |
+
|
210 |
+
- entity_id: 50
|
211 |
+
parent_id: 36
|
212 |
+
address_type: 'shipping'
|
213 |
+
firstname: 'Hubertus'
|
214 |
+
postcode: '04229'
|
215 |
+
lastname: 'Fürstenberg'
|
216 |
+
street: 'An der Tabaksmühle 3a'
|
217 |
+
city: 'Leipzig'
|
218 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
219 |
+
country_id: 'DE'
|
220 |
+
prefix: 'Prof. Dr.'
|
221 |
+
middlename: 'von'
|
222 |
+
suffix: 'MdL'
|
223 |
+
company: ''
|
224 |
+
|
225 |
+
- entity_id: 51
|
226 |
+
parent_id: 37
|
227 |
+
address_type: 'shipping'
|
228 |
+
firstname: 'Hubertus'
|
229 |
+
postcode: '04229'
|
230 |
+
lastname: 'Fürstenberg'
|
231 |
+
street: 'An der Tabaksmühle 3a'
|
232 |
+
city: 'Leipzig'
|
233 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
234 |
+
country_id: 'DE'
|
235 |
+
prefix: 'Prof. Dr.'
|
236 |
+
middlename: 'von'
|
237 |
+
suffix: 'MdL'
|
238 |
+
company: ''
|
239 |
+
|
240 |
+
- entity_id: 52
|
241 |
+
parent_id: 38
|
242 |
+
address_type: 'shipping'
|
243 |
+
firstname: 'Hubertus'
|
244 |
+
postcode: '04229'
|
245 |
+
lastname: 'Fürstenberg'
|
246 |
+
street: 'An der Tabaksmühle 3a'
|
247 |
+
city: 'Leipzig'
|
248 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
249 |
+
country_id: 'DE'
|
250 |
+
prefix: 'Prof. Dr.'
|
251 |
+
middlename: 'von'
|
252 |
+
suffix: 'MdL'
|
253 |
+
company: ''
|
254 |
+
|
255 |
+
- entity_id: 53
|
256 |
+
parent_id: 39
|
257 |
+
address_type: 'shipping'
|
258 |
+
firstname: 'Hubertus'
|
259 |
+
postcode: '04229'
|
260 |
+
lastname: 'Fürstenberg'
|
261 |
+
street: 'An der Tabaksmühle 3a'
|
262 |
+
city: 'Leipzig'
|
263 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
264 |
+
country_id: 'DE'
|
265 |
+
prefix: 'Prof. Dr.'
|
266 |
+
middlename: 'von'
|
267 |
+
suffix: 'MdL'
|
268 |
+
company: ''
|
269 |
+
|
270 |
+
sales/order_payment:
|
271 |
+
- entity_id: 23
|
272 |
+
parent_id: 31
|
273 |
+
method: 'checkmo'
|
274 |
+
|
275 |
+
- entity_id: 24
|
276 |
+
parent_id: 32
|
277 |
+
method: 'checkmo'
|
278 |
+
|
279 |
+
- entity_id: 25
|
280 |
+
parent_id: 33
|
281 |
+
method: 'checkmo'
|
282 |
+
|
283 |
+
- entity_id: 26
|
284 |
+
parent_id: 34
|
285 |
+
method: 'checkmo'
|
286 |
+
|
287 |
+
- entity_id: 27
|
288 |
+
parent_id: 35
|
289 |
+
method: 'cod'
|
290 |
+
|
291 |
+
- entity_id: 28
|
292 |
+
parent_id: 36
|
293 |
+
method: 'checkmo'
|
294 |
+
|
295 |
+
- entity_id: 29
|
296 |
+
parent_id: 37
|
297 |
+
method: 'cod'
|
298 |
+
|
299 |
+
- entity_id: 30
|
300 |
+
parent_id: 38
|
301 |
+
method: 'checkmo'
|
302 |
+
|
303 |
+
- entity_id: 31
|
304 |
+
parent_id: 39
|
305 |
+
method: 'checkmo'
|
306 |
+
|
app/code/community/Netresearch/Hermes/Test/var/fixtures/parcels.yaml
ADDED
@@ -0,0 +1,68 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
hermes/parcel:
|
3 |
+
- id: 1
|
4 |
+
shipment_id: 2
|
5 |
+
shipping_method: 'flatrate_flatrate'
|
6 |
+
receiver_firstname: 'Hubertus'
|
7 |
+
receiver_postcode: '04229'
|
8 |
+
receiver_lastname: 'von Fürstenberg'
|
9 |
+
receiver_address_add: '21. Etage'
|
10 |
+
receiver_street: 'An der Tabaksmühle 3a'
|
11 |
+
receiver_city: 'Leipzig'
|
12 |
+
receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
receiver_country_code: 'DEU'
|
14 |
+
parcel_class: 'M'
|
15 |
+
includeCashOnDelivery: false
|
16 |
+
# (empty status)
|
17 |
+
- id: 2
|
18 |
+
shipment_id: 3
|
19 |
+
status_code: 1 # STATUS_QUEUED
|
20 |
+
|
21 |
+
- id: 3
|
22 |
+
shipment_id: 4
|
23 |
+
status_code: 2 # STATUS_PROCESSED
|
24 |
+
|
25 |
+
- id: 4
|
26 |
+
shipment_id: 5
|
27 |
+
status_code: -4 # STATUS_CANCEL_FAILED
|
28 |
+
|
29 |
+
- id: 5
|
30 |
+
shipment_id: 6
|
31 |
+
status_code: 20 # STATUS_IN_TRANSMISSION
|
32 |
+
parcel_class: 'M'
|
33 |
+
|
34 |
+
|
35 |
+
- id: 6
|
36 |
+
shipment_id: 7
|
37 |
+
status_code: -2 # STATUS_NEW_FAILED
|
38 |
+
shipping_method: 'flatrate_flatrate'
|
39 |
+
receiver_firstname: 'Hubertus'
|
40 |
+
receiver_postcode: '04229'
|
41 |
+
receiver_lastname: 'von Fürstenberg'
|
42 |
+
receiver_address_add: '21. Etage'
|
43 |
+
receiver_street: 'An der Tabaksmühle 3a'
|
44 |
+
receiver_city: 'Leipzig'
|
45 |
+
receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
46 |
+
receiver_country_code: 'IRL'
|
47 |
+
parcel_class: 'XL'
|
48 |
+
includeCashOnDelivery: false
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
- id: 7
|
53 |
+
shipment_id: 14
|
54 |
+
hermes_order_no: 8
|
55 |
+
status_code: 2 # STATUS_PROCESSED
|
56 |
+
|
57 |
+
|
58 |
+
- id: 8
|
59 |
+
shipment_id: 15
|
60 |
+
status_code: 2 # STATUS_PROCESSED
|
61 |
+
|
62 |
+
- id: 9
|
63 |
+
shipment_id: 16
|
64 |
+
status_code: 4 # STATUS_FAILED
|
65 |
+
|
66 |
+
- id: 10
|
67 |
+
shipment_id: 17
|
68 |
+
status_code: 5 # STATUS_CLOSED
|
app/code/community/Netresearch/Hermes/Test/var/fixtures/shipments.yaml
ADDED
@@ -0,0 +1,34 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
- entity_id: 31
|
4 |
+
increment_id: 100000055
|
5 |
+
shipping_address_id: 42
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
currency: 'EUR'
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
12 |
+
|
13 |
+
sales/shipment:
|
14 |
+
- entity_id: 14
|
15 |
+
increment_id: 100000078
|
16 |
+
order_id: 31
|
17 |
+
shipping_address_id: 45
|
18 |
+
|
19 |
+
- entity_id: 15
|
20 |
+
increment_id: 100000077
|
21 |
+
order_id: 31
|
22 |
+
shipping_address_id: 45
|
23 |
+
|
24 |
+
- entity_id: 16
|
25 |
+
increment_id: 100000078
|
26 |
+
order_id: 31
|
27 |
+
shipping_address_id: 45
|
28 |
+
|
29 |
+
- entity_id: 17
|
30 |
+
increment_id: 100000078
|
31 |
+
order_id: 31
|
32 |
+
shipping_address_id: 45
|
33 |
+
|
34 |
+
|
app/code/community/Netresearch/Hermes/controllers/ConfigController.php
ADDED
@@ -0,0 +1,38 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
class Netresearch_Hermes_ConfigController extends Mage_Adminhtml_Controller_Action
|
3 |
+
{
|
4 |
+
protected function _isAllowed()
|
5 |
+
{
|
6 |
+
return Mage::getSingleton('admin/session')
|
7 |
+
->isAllowed('system/hermes');
|
8 |
+
}
|
9 |
+
|
10 |
+
protected function _checkSectionAllowed($section)
|
11 |
+
{
|
12 |
+
if (false == Mage::getSingleton('admin/session')->isAllowed('system/hermes/' . $section)) {
|
13 |
+
$this->forward('denied');
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
public function updateListOfProductsAction()
|
18 |
+
{
|
19 |
+
$this->_checkSectionAllowed('update_list_of_products');
|
20 |
+
$client = Mage::getModel('hermes/client');
|
21 |
+
/* @var $client Netresearch_Hermes_Model_Client */
|
22 |
+
|
23 |
+
try {
|
24 |
+
if (null === $client->updateListOfProducts()) {
|
25 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
26 |
+
Mage::helper('hermes')->__('The list of products could not be updated.')
|
27 |
+
);
|
28 |
+
} else {
|
29 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
30 |
+
Mage::helper('hermes')->__('The list of products was successfully updated.')
|
31 |
+
);
|
32 |
+
}
|
33 |
+
} catch (Exception $e) {
|
34 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
|
35 |
+
}
|
36 |
+
$this->_redirectReferer();
|
37 |
+
}
|
38 |
+
}
|
app/code/community/Netresearch/Hermes/controllers/ParcelController.php
ADDED
@@ -0,0 +1,241 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Netresearch_Hermes_ParcelController extends Mage_Adminhtml_Controller_Action
|
4 |
+
{
|
5 |
+
protected function _isAllowed()
|
6 |
+
{
|
7 |
+
return Mage::getSingleton('admin/session')
|
8 |
+
->isAllowed('sales/shipment/transmit_parcels');
|
9 |
+
}
|
10 |
+
|
11 |
+
protected function _checkSectionAllowed($section)
|
12 |
+
{
|
13 |
+
if (false == Mage::getSingleton('admin/session')->isAllowed('sales/shipment/' . $section)) {
|
14 |
+
return $this->_redirect('denied');
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
public function editAction()
|
19 |
+
{
|
20 |
+
return $this->loadLayout()->renderLayout();
|
21 |
+
}
|
22 |
+
|
23 |
+
public function transmitHermesParcelsAction()
|
24 |
+
{
|
25 |
+
$this->_checkSectionAllowed('transmit_parcels');
|
26 |
+
|
27 |
+
if (true === Mage::getModel('hermes/config')->isEnabled()) {
|
28 |
+
try {
|
29 |
+
$result = Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer());
|
30 |
+
if (0 < $result['errors']) {
|
31 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__(
|
32 |
+
'Tried to transfer %d parcels to Hermes, but %d of them raised an error.',
|
33 |
+
$result['parcels'],
|
34 |
+
$result['errors']
|
35 |
+
));
|
36 |
+
} else if(0 < $result['parcels']) {
|
37 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('hermes')->__(
|
38 |
+
'Successfully transfered %d parcels to Hermes.',
|
39 |
+
$result['parcels']
|
40 |
+
));
|
41 |
+
} else {
|
42 |
+
Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('hermes')->__(
|
43 |
+
'No parcels were transfered to Hermes.',
|
44 |
+
$result['parcels']
|
45 |
+
));
|
46 |
+
}
|
47 |
+
} catch (Exception $e) {
|
48 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
49 |
+
}
|
50 |
+
} else {
|
51 |
+
$message = Mage::helper('hermes')->__('Hermes is disabled in configuration. Please enable it before trying to submit parcels.');
|
52 |
+
Mage::getSingleton('adminhtml/session')->addError($message);
|
53 |
+
}
|
54 |
+
$this->_redirectReferer();
|
55 |
+
}
|
56 |
+
|
57 |
+
public function saveAction()
|
58 |
+
{
|
59 |
+
$post = $this->getRequest()->getPost('receiver');
|
60 |
+
$id = $this->getRequest()->getPost('parcel_id');
|
61 |
+
$resumeParcel = (bool)$this->getRequest()->getPost('save_and_resume');
|
62 |
+
|
63 |
+
try {
|
64 |
+
$parcel = Mage::getModel('hermes/parcel')->load($id);
|
65 |
+
|
66 |
+
/* @var $parcel Netresearch_Hermes_Model_Parcel */
|
67 |
+
if ($resumeParcel && $parcel->canBeResumed()) {
|
68 |
+
$parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
|
69 |
+
}
|
70 |
+
|
71 |
+
if (Mage::getModel('hermes/config')->isTieredPriceMerchant()) {
|
72 |
+
$parcel->setParcelClass($this->getRequest()->getPost('parcel_class'));
|
73 |
+
}
|
74 |
+
$parcel
|
75 |
+
->setReceiverFirstname($post['firstname'])
|
76 |
+
->setReceiverLastname($post['lastname'])
|
77 |
+
->setReceiverStreet($post['street'])
|
78 |
+
->setReceiverHouseNumber($post['house_number'])
|
79 |
+
->setReceiverAddressAdd($post['address_add'])
|
80 |
+
->setReceiverPostcode($post['postcode'])
|
81 |
+
->setReceiverCity($post['city'])
|
82 |
+
->setReceiverDistrict(isset($post['district']) ? $post['district'] : null)
|
83 |
+
->setReceiverEmail($post['email'])
|
84 |
+
->setReceiverTelephoneNumber($post['telephone_number'])
|
85 |
+
->setReceiverTelephonePrefix($post['telephone_prefix'])
|
86 |
+
->save();
|
87 |
+
|
88 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
89 |
+
Mage::helper('hermes')->__('Receiver data successfully updated.')
|
90 |
+
);
|
91 |
+
if ($resumeParcel) {
|
92 |
+
$this->addResumeMessages();
|
93 |
+
}
|
94 |
+
} catch (Exception $e) {
|
95 |
+
Mage::logException($e);
|
96 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
97 |
+
Mage::helper('hermes')->__('Receiver data could not be updated.')
|
98 |
+
);
|
99 |
+
}
|
100 |
+
|
101 |
+
return $this->_redirect('adminhtml/sales_shipment/view', array(
|
102 |
+
'shipment_id' => $parcel->getShipmentId()
|
103 |
+
));
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* add admin messages to inform user about delayed transmission
|
108 |
+
*
|
109 |
+
* @return void
|
110 |
+
*/
|
111 |
+
protected function addResumeMessages()
|
112 |
+
{
|
113 |
+
$session = Mage::getSingleton('adminhtml/session');
|
114 |
+
$session->addSuccess(
|
115 |
+
Mage::helper('hermes')->__('Parcel transmission was resumed')
|
116 |
+
);
|
117 |
+
$session->addWarning(
|
118 |
+
Mage::helper('hermes')->__(
|
119 |
+
'Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
|
120 |
+
Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
|
121 |
+
)
|
122 |
+
);
|
123 |
+
}
|
124 |
+
|
125 |
+
public function getLabelAction()
|
126 |
+
{
|
127 |
+
$parcelId = $this->getRequest()->getParam('parcelId');
|
128 |
+
$format = strtolower(trim($this->getRequest()->getParam('format')));
|
129 |
+
$labelPosition = $this->getRequest()->getParam('labelPosition');
|
130 |
+
if (!in_array($format, Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::getLabelFileFormats())) {
|
131 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__('format is not supported'));
|
132 |
+
$this->_redirectReferer();
|
133 |
+
}
|
134 |
+
$contentType = '';
|
135 |
+
if ($format == Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF) {
|
136 |
+
$contentType = 'application/pdf';
|
137 |
+
}
|
138 |
+
if ($format == Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG) {
|
139 |
+
$contentType = 'image/jpeg';
|
140 |
+
}
|
141 |
+
$parcel = $this->getParcel($parcelId);
|
142 |
+
try {
|
143 |
+
$this->getResponse()->setBody($parcel->getLabel($format, $labelPosition));
|
144 |
+
$this->getResponse()->setHeader('Content-type', $contentType, true);
|
145 |
+
} catch (Exception $e) {
|
146 |
+
Mage::logException($e);
|
147 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
|
148 |
+
$this->_redirectReferer();
|
149 |
+
}
|
150 |
+
return $this->getResponse();
|
151 |
+
}
|
152 |
+
|
153 |
+
public function repeatTransmissionAction()
|
154 |
+
{
|
155 |
+
$parcelId = $this->getRequest()->getParam('parcelId');
|
156 |
+
$parcel = $this->getParcel($parcelId);
|
157 |
+
$parcel->repeatTransmission()->save();
|
158 |
+
|
159 |
+
$this->addResumeMessages();
|
160 |
+
|
161 |
+
$this->_redirect('adminhtml/sales_shipment/view/shipment_id/' . $parcel->getShipmentId());
|
162 |
+
}
|
163 |
+
|
164 |
+
public function cancelAction()
|
165 |
+
{
|
166 |
+
$parcelId = $this->getRequest()->getParam('parcelId');
|
167 |
+
$parcel = $this->getParcel($parcelId);
|
168 |
+
try {
|
169 |
+
$parcel->cancel();
|
170 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('hermes')->__('Parcel cancellation succeeded'));
|
171 |
+
} catch (Exception $e) {
|
172 |
+
Mage::logException($e);
|
173 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
|
174 |
+
}
|
175 |
+
$this->_redirect('adminhtml/sales_shipment/view/shipment_id/' . $parcel->getShipmentId());
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
*
|
180 |
+
* @param int $parcelId the id of the parcel
|
181 |
+
* @return Netresearch_Hermes_Model_Parcel the parcel
|
182 |
+
*/
|
183 |
+
protected function getParcel($parcelId)
|
184 |
+
{
|
185 |
+
if (false == is_numeric($parcelId)) {
|
186 |
+
$this->_redirect('noroute');
|
187 |
+
}
|
188 |
+
$parcel = Mage::getModel('hermes/parcel');
|
189 |
+
$parcel->load($parcelId);
|
190 |
+
if (!$parcel->getId()) {
|
191 |
+
$this->_redirect('noroute');
|
192 |
+
}
|
193 |
+
return $parcel;
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* cancel Hermes shipments
|
198 |
+
*/
|
199 |
+
public function massCancelAction()
|
200 |
+
{
|
201 |
+
/* collect parcels */
|
202 |
+
$shipmentIds = $this->getRequest()->getParam('shipment_ids');
|
203 |
+
if (!is_array($shipmentIds) || 0 == count($shipmentIds)) {
|
204 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
205 |
+
Mage::helper('hermes')->__('Please select at least one shipment')
|
206 |
+
);
|
207 |
+
return $this->_redirect('adminhtml/sales_shipment/index');
|
208 |
+
}
|
209 |
+
$parcels = Mage::getModel('hermes/parcel')->getCollection()
|
210 |
+
->addFieldToFilter('shipment_id', array('in' => $shipmentIds));
|
211 |
+
$successCount = 0;
|
212 |
+
|
213 |
+
/* cancel parcels */
|
214 |
+
foreach ($parcels as $parcel) {
|
215 |
+
try {
|
216 |
+
$parcel->cancel();
|
217 |
+
$successCount++;
|
218 |
+
} catch (Exception $e) {
|
219 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
220 |
+
Mage::helper('hermes')->__('Failed to cancel Hermes shipment %s', $parcel->getShipment()->getIncrementId())
|
221 |
+
. ': ' .
|
222 |
+
Mage::helper('hermes')->__($e->getMessage())
|
223 |
+
);
|
224 |
+
}
|
225 |
+
}
|
226 |
+
if (0 < $successCount) {
|
227 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
228 |
+
Mage::helper('hermes')->__('Canceled %s Hermes shipments', $successCount)
|
229 |
+
);
|
230 |
+
}
|
231 |
+
|
232 |
+
/* calculate error count based on the requested count of shipments */
|
233 |
+
$errorCount = count($shipmentIds) - $successCount;
|
234 |
+
if (0 < $errorCount) {
|
235 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
236 |
+
Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', $errorCount)
|
237 |
+
);
|
238 |
+
}
|
239 |
+
$this->_redirect('adminhtml/sales_shipment/index');
|
240 |
+
}
|
241 |
+
}
|
app/code/community/Netresearch/Hermes/controllers/ShipmentController.php
ADDED
@@ -0,0 +1,94 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Netresearch Hermes
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Netresearch
|
19 |
+
* @package Netresearch_Hermes
|
20 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Hermes Shipment controller
|
26 |
+
*
|
27 |
+
* @category Netresearch
|
28 |
+
* @package Netresearch_Hermes
|
29 |
+
* @author Michael Lühr <michael.luehr@netresearch.de>
|
30 |
+
*/
|
31 |
+
class Netresearch_Hermes_ShipmentController
|
32 |
+
extends Mage_Adminhtml_Controller_Action
|
33 |
+
{
|
34 |
+
|
35 |
+
/**
|
36 |
+
* uses for semi-automatic shipping
|
37 |
+
* creates shipments and according hermes parcels for one or more
|
38 |
+
* orders (= massActio)
|
39 |
+
*/
|
40 |
+
public function createShipmentsAction()
|
41 |
+
{
|
42 |
+
$orderIds = $this->getRequest()->getParam('order_ids');
|
43 |
+
$notifyCustomer = $this->getRequest()->getParam('notifyCustomer');
|
44 |
+
$parcelClass = Mage::getModel('hermes/config')->isTieredPriceMerchant() ? $this->getRequest()->getParam('parcelClass') : '';
|
45 |
+
|
46 |
+
$parcelSuccessCount = 0;
|
47 |
+
$parcelErrorCount = 0;
|
48 |
+
|
49 |
+
if (!is_array($orderIds) || sizeof($orderIds) <= 0) {
|
50 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
51 |
+
Mage::helper('hermes')->__('No order was selected!'));
|
52 |
+
} else {
|
53 |
+
$orders = Mage::getModel('sales/order')
|
54 |
+
->getCollection()
|
55 |
+
->addFieldToFilter('entity_id', array('in' => $orderIds))
|
56 |
+
->load();
|
57 |
+
if (0 < $orders->count()) {
|
58 |
+
$orderHelper = Mage::helper('hermes/order');
|
59 |
+
$createdShipments = $orderHelper->shipOrders($orders, $parcelClass, $notifyCustomer);
|
60 |
+
$parcelErrorCount = sizeof($createdShipments['errors']);
|
61 |
+
$parcelSuccessCount = sizeof($createdShipments['success']);
|
62 |
+
foreach ($createdShipments['errors'] as $orderNumber=>$error) {
|
63 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
64 |
+
Mage::helper('hermes')->__('Order %s threw error: %s', $orderNumber, $error)
|
65 |
+
);
|
66 |
+
}
|
67 |
+
} else {
|
68 |
+
$parcelErrorCount = sizeof($orderIds);
|
69 |
+
}
|
70 |
+
|
71 |
+
}
|
72 |
+
if (0 < $parcelSuccessCount) {
|
73 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
74 |
+
Mage::helper('hermes')->__('%d Hermes shipment(s) created', $parcelSuccessCount)
|
75 |
+
);
|
76 |
+
Mage::getSingleton('adminhtml/session')->addWarning(
|
77 |
+
Mage::helper('hermes')->__(
|
78 |
+
'Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
|
79 |
+
Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
|
80 |
+
));
|
81 |
+
}
|
82 |
+
if (0 < $parcelErrorCount) {
|
83 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
84 |
+
Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', $parcelErrorCount)
|
85 |
+
);
|
86 |
+
}
|
87 |
+
$this->_redirectReferer();
|
88 |
+
}
|
89 |
+
|
90 |
+
protected function _isAllowed()
|
91 |
+
{
|
92 |
+
return Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments');
|
93 |
+
}
|
94 |
+
}
|
app/code/community/Netresearch/Hermes/etc/adminhtml.xml
ADDED
@@ -0,0 +1,57 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @category Acl
|
5 |
+
* @package Netresearch_Hermes
|
6 |
+
* @author Christoph Aßmann <christoph.assmann@netresearch.de>
|
7 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<config>
|
12 |
+
<acl>
|
13 |
+
<resources>
|
14 |
+
<admin>
|
15 |
+
<children>
|
16 |
+
<sales>
|
17 |
+
<children>
|
18 |
+
<shipment>
|
19 |
+
<children>
|
20 |
+
<transmit_parcels translate="title">
|
21 |
+
<title>Transmit Parcel Data to Hermes</title>
|
22 |
+
</transmit_parcels>
|
23 |
+
<create_hermes_shipments translate="title">
|
24 |
+
<title>Create shipment(s) for Hermes</title>
|
25 |
+
</create_hermes_shipments>
|
26 |
+
</children>
|
27 |
+
</shipment>
|
28 |
+
</children>
|
29 |
+
</sales>
|
30 |
+
<system>
|
31 |
+
<children>
|
32 |
+
<config>
|
33 |
+
<children>
|
34 |
+
<hermes>
|
35 |
+
<title>Hermes Settings</title>
|
36 |
+
</hermes>
|
37 |
+
</children>
|
38 |
+
</config>
|
39 |
+
<hermes translate="title" module="hermes">
|
40 |
+
<title>Hermes</title>
|
41 |
+
<sort_order>20</sort_order>
|
42 |
+
<children>
|
43 |
+
<update_list_of_products translate="title">
|
44 |
+
<title>Update List of Hermes Products</title>
|
45 |
+
</update_list_of_products>
|
46 |
+
<configuration translate="title">
|
47 |
+
<title>Settings</title>
|
48 |
+
</configuration>
|
49 |
+
</children>
|
50 |
+
</hermes>
|
51 |
+
</children>
|
52 |
+
</system>
|
53 |
+
</children>
|
54 |
+
</admin>
|
55 |
+
</resources>
|
56 |
+
</acl>
|
57 |
+
</config>
|
app/code/community/Netresearch/Hermes/etc/config.xml
ADDED
@@ -0,0 +1,253 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Netresearch_Hermes>
|
5 |
+
<version>15.04.29</version>
|
6 |
+
</Netresearch_Hermes>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<helpers>
|
10 |
+
<hermes>
|
11 |
+
<class>Netresearch_Hermes_Helper</class>
|
12 |
+
</hermes>
|
13 |
+
</helpers>
|
14 |
+
<models>
|
15 |
+
<hermes>
|
16 |
+
<class>Netresearch_Hermes_Model</class>
|
17 |
+
<resourceModel>hermes_mysql4</resourceModel>
|
18 |
+
</hermes>
|
19 |
+
<hermes_mysql4>
|
20 |
+
<class>Netresearch_Hermes_Model_Mysql4</class>
|
21 |
+
<entities>
|
22 |
+
<parcel>
|
23 |
+
<table>hermes_parcel</table>
|
24 |
+
</parcel>
|
25 |
+
</entities>
|
26 |
+
</hermes_mysql4>
|
27 |
+
</models>
|
28 |
+
<blocks>
|
29 |
+
<hermes>
|
30 |
+
<class>Netresearch_Hermes_Block</class>
|
31 |
+
</hermes>
|
32 |
+
</blocks>
|
33 |
+
<resources>
|
34 |
+
<hermes_setup>
|
35 |
+
<setup>
|
36 |
+
<module>Netresearch_Hermes</module>
|
37 |
+
</setup>
|
38 |
+
</hermes_setup>
|
39 |
+
</resources>
|
40 |
+
<sales>
|
41 |
+
<shipping>
|
42 |
+
<carriers>
|
43 |
+
<hermes>
|
44 |
+
<class>Netresearch_Hermes_Model_Shipping_Carrier_Hermes</class>
|
45 |
+
</hermes>
|
46 |
+
</carriers>
|
47 |
+
</shipping>
|
48 |
+
</sales>
|
49 |
+
</global>
|
50 |
+
<adminhtml>
|
51 |
+
<translate>
|
52 |
+
<modules>
|
53 |
+
<Netresearch_Hermes>
|
54 |
+
<files>
|
55 |
+
<hermes>Netresearch_Hermes.csv</hermes>
|
56 |
+
</files>
|
57 |
+
</Netresearch_Hermes>
|
58 |
+
</modules>
|
59 |
+
</translate>
|
60 |
+
<events>
|
61 |
+
<sales_order_shipment_save_before>
|
62 |
+
<observers>
|
63 |
+
<check_shipment>
|
64 |
+
<class>hermes/observer</class>
|
65 |
+
<method>checkShipment</method>
|
66 |
+
</check_shipment>
|
67 |
+
</observers>
|
68 |
+
</sales_order_shipment_save_before>
|
69 |
+
<sales_order_shipment_save_after>
|
70 |
+
<observers>
|
71 |
+
<save_hermes_shipment_data>
|
72 |
+
<class>hermes/observer</class>
|
73 |
+
<method>saveHermesShipmentData</method>
|
74 |
+
</save_hermes_shipment_data>
|
75 |
+
</observers>
|
76 |
+
</sales_order_shipment_save_after>
|
77 |
+
<core_block_abstract_to_html_after>
|
78 |
+
<observers>
|
79 |
+
<hermes_sales_order_shipment_create_tracking>
|
80 |
+
<class>hermes/observer</class>
|
81 |
+
<method>addShipmentCreationForm</method>
|
82 |
+
</hermes_sales_order_shipment_create_tracking>
|
83 |
+
<hermes_sales_order_shipment_view_tracking>
|
84 |
+
<class>hermes/observer</class>
|
85 |
+
<method>addShipmentViewInfo</method>
|
86 |
+
</hermes_sales_order_shipment_view_tracking>
|
87 |
+
</observers>
|
88 |
+
</core_block_abstract_to_html_after>
|
89 |
+
<adminhtml_block_html_before>
|
90 |
+
<observers>
|
91 |
+
<hermes_sales_order_grid>
|
92 |
+
<class>hermes/observer</class>
|
93 |
+
<method>addOrderGridMassActionAndIcon</method>
|
94 |
+
</hermes_sales_order_grid>
|
95 |
+
<hermes_shipment_grid>
|
96 |
+
<class>hermes/observer</class>
|
97 |
+
<method>addShipmentGridMassActionAndColumns</method>
|
98 |
+
</hermes_shipment_grid>
|
99 |
+
</observers>
|
100 |
+
</adminhtml_block_html_before>
|
101 |
+
<sales_order_shipment_grid_collection_load_before>
|
102 |
+
<observers>
|
103 |
+
<hermes_shipment_grid_collection>
|
104 |
+
<class>hermes/observer</class>
|
105 |
+
<method>addParcelsToShipmentGridCollection</method>
|
106 |
+
</hermes_shipment_grid_collection>
|
107 |
+
</observers>
|
108 |
+
</sales_order_shipment_grid_collection_load_before>
|
109 |
+
</events>
|
110 |
+
<layout>
|
111 |
+
<updates>
|
112 |
+
<hermes>
|
113 |
+
<file>hermes.xml</file>
|
114 |
+
</hermes>
|
115 |
+
</updates>
|
116 |
+
</layout>
|
117 |
+
<menu>
|
118 |
+
<sales>
|
119 |
+
<children>
|
120 |
+
<shipment>
|
121 |
+
<children>
|
122 |
+
<transmit_parcels translate="title" module="hermes">
|
123 |
+
<title>Transmit Parcel Data to Hermes</title>
|
124 |
+
<action>adminhtml/parcel/transmitHermesParcels</action>
|
125 |
+
<sort_order>10</sort_order>
|
126 |
+
</transmit_parcels>
|
127 |
+
</children>
|
128 |
+
</shipment>
|
129 |
+
</children>
|
130 |
+
</sales>
|
131 |
+
<system>
|
132 |
+
<children>
|
133 |
+
<hermes>
|
134 |
+
<title>Hermes</title>
|
135 |
+
<sort_order>12</sort_order>
|
136 |
+
<children>
|
137 |
+
<update_list_of_products translate="title" module="hermes">
|
138 |
+
<title>Update List of Products</title>
|
139 |
+
<action>adminhtml/config/updateListOfProducts</action>
|
140 |
+
<sort_order>20</sort_order>
|
141 |
+
</update_list_of_products>
|
142 |
+
<configuration translate="title">
|
143 |
+
<title>Configuration</title>
|
144 |
+
<action>adminhtml/system_config/edit/section/hermes</action>
|
145 |
+
<sort_order>30</sort_order>
|
146 |
+
</configuration>
|
147 |
+
</children>
|
148 |
+
</hermes>
|
149 |
+
</children>
|
150 |
+
</system>
|
151 |
+
</menu>
|
152 |
+
</adminhtml>
|
153 |
+
<admin>
|
154 |
+
<routers>
|
155 |
+
<adminhtml>
|
156 |
+
<args>
|
157 |
+
<modules>
|
158 |
+
<hermes after="Mage_Adminhtml">Netresearch_Hermes</hermes>
|
159 |
+
</modules>
|
160 |
+
</args>
|
161 |
+
</adminhtml>
|
162 |
+
</routers>
|
163 |
+
</admin>
|
164 |
+
<crontab>
|
165 |
+
<jobs>
|
166 |
+
<update_list_of_products>
|
167 |
+
<schedule><cron_expr>0 1 * * *</cron_expr></schedule>
|
168 |
+
<run><model>hermes/observer::updateListOfProducts</model></run>
|
169 |
+
</update_list_of_products>
|
170 |
+
<create_parcels_for_hermes>
|
171 |
+
<schedule>
|
172 |
+
<cron_expr>0,15,30,45 * * * *</cron_expr>
|
173 |
+
</schedule>
|
174 |
+
<run>
|
175 |
+
<model>hermes/observer::createParcelsForHermes</model>
|
176 |
+
</run>
|
177 |
+
</create_parcels_for_hermes>
|
178 |
+
<transmit_parcels_for_hermes>
|
179 |
+
<schedule>
|
180 |
+
<cron_expr>2,17,32,47 * * * *</cron_expr>
|
181 |
+
</schedule>
|
182 |
+
<run>
|
183 |
+
<model>hermes/observer::transmitParcels</model>
|
184 |
+
</run>
|
185 |
+
</transmit_parcels_for_hermes>
|
186 |
+
</jobs>
|
187 |
+
</crontab>
|
188 |
+
<default>
|
189 |
+
<carriers>
|
190 |
+
<hermes>
|
191 |
+
<active>1</active>
|
192 |
+
<model>hermes/shipping_carrier_hermes</model>
|
193 |
+
<title>Hermes</title>
|
194 |
+
</hermes>
|
195 |
+
</carriers>
|
196 |
+
<hermes>
|
197 |
+
<general>
|
198 |
+
<active>0</active>
|
199 |
+
<testmode>1</testmode>
|
200 |
+
<logging_enabled>1</logging_enabled>
|
201 |
+
<!-- installation_date: see /app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php -->
|
202 |
+
<installation_date></installation_date>
|
203 |
+
</general>
|
204 |
+
<account>
|
205 |
+
<partner_id>EXT000159</partner_id>
|
206 |
+
<api_pwd>171a49c0d02d394a134b17f911332563</api_pwd>
|
207 |
+
</account>
|
208 |
+
<api_data>
|
209 |
+
<props_list_of_products_atg>
|
210 |
+
<number_of_products>5</number_of_products>
|
211 |
+
<dated>2012-04-10T12:49:51.264Z</dated>
|
212 |
+
<label_acceptance_terms_and_conditions><![CDATA[Ich akzeptiere die AGB der Hermes Logistik Gruppe Deutschland GmbH.]]></label_acceptance_terms_and_conditions>
|
213 |
+
<label_acceptance_liability_limit><![CDATA[Mir ist bekannt, dass die Hermes Logistik Gruppe Deutschland GmbH nur Pakete bis zu einem Wert von EUR 500,00 pro Paket entgegennimmt. ]]></label_acceptance_liability_limit>
|
214 |
+
<url_terms_and_conditions><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/AGB]]></url_terms_and_conditions>
|
215 |
+
<net_price_cash_on_delivery_eurocent><![CDATA[350]]></net_price_cash_on_delivery_eurocent>
|
216 |
+
<settlement_type><![CDATA[Abrechnung zum Staffelpreis]]></settlement_type>
|
217 |
+
<url_hermes_logogram><![CDATA[https://profipaketservice.hlg.de/wps/themes/html/Hermes-Standard/img/hlg_prips_api2_vkr.gif]]></url_hermes_logogram>
|
218 |
+
<url_liability_informations><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/AGB]]></url_liability_informations>
|
219 |
+
<url_packaging_guidelines><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/VERPACKUNGSRICHTLINIEN]]></url_packaging_guidelines>
|
220 |
+
<url_portal_b2c><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/]]></url_portal_b2c>
|
221 |
+
<vat_info><![CDATA[Unsere Preise verstehen sich zzgl. 19% MwSt.]]></vat_info>
|
222 |
+
<products>{"DEU":{"product_classes":{"all":{"weightMinKg":"0.000","weigthMaxKg":"31.500","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":310,"thridEdgeCmMax":50,"exclusions":"","netPriceEurcent":1102}}},"BEL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"DNK":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1975}}},"EST":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"FIN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1975}}},"FRA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"GBR":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"IRL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"ITA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1975}}},"LVA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"LTU":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"LUX":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"MCO":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"NLD":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"AUT":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"POL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"PRT":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1975}}},"SWE":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"SVK":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"SVN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"ESP":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1975}}},"CZE":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"HUN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}}}</products>
|
223 |
+
</props_list_of_products_atg>
|
224 |
+
</api_data>
|
225 |
+
<general>
|
226 |
+
<allowed_countries>BEL,DNK,DEU,EST,FIN,FRA,IRL,ITA,LVA,LIE,LTU,LUX,MCO,NLD,POL,AUT,PRT,SWE,CHE,SVK,SVN,ESP,CZE,HUN,GBR</allowed_countries>
|
227 |
+
<allowed_cod_countries>DEU</allowed_cod_countries>
|
228 |
+
</general>
|
229 |
+
<test>
|
230 |
+
<wsdl>app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl</wsdl>
|
231 |
+
</test>
|
232 |
+
<prod>
|
233 |
+
<wsdl>app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl</wsdl>
|
234 |
+
</prod>
|
235 |
+
<tracking>
|
236 |
+
<url>https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=%orderNo%</url>
|
237 |
+
</tracking>
|
238 |
+
<info>
|
239 |
+
<support_mail>hermes.support@netresearch.de</support_mail>
|
240 |
+
</info>
|
241 |
+
<autocreate>
|
242 |
+
<enabled>0</enabled>
|
243 |
+
</autocreate>
|
244 |
+
</hermes>
|
245 |
+
</default>
|
246 |
+
<phpunit>
|
247 |
+
<suite>
|
248 |
+
<modules>
|
249 |
+
<Netresearch_Hermes />
|
250 |
+
</modules>
|
251 |
+
</suite>
|
252 |
+
</phpunit>
|
253 |
+
</config>
|
app/code/community/Netresearch/Hermes/etc/system.xml
ADDED
@@ -0,0 +1,234 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @category Config
|
5 |
+
* @package Netresearch_Hermes
|
6 |
+
* @author Christoph Aßmann <christoph.assmann@netresearch.de>
|
7 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<config>
|
12 |
+
<sections>
|
13 |
+
<hermes translate="label" module="hermes">
|
14 |
+
<label>Hermes</label>
|
15 |
+
<tab>sales</tab>
|
16 |
+
<sort_order>335</sort_order>
|
17 |
+
<show_in_default>1</show_in_default>
|
18 |
+
<show_in_website>1</show_in_website>
|
19 |
+
<show_in_store>1</show_in_store>
|
20 |
+
<groups>
|
21 |
+
<support translate="label">
|
22 |
+
<label>Information</label>
|
23 |
+
<frontend_type>text</frontend_type>
|
24 |
+
<frontend_model>hermes/adminhtml_system_config_notice</frontend_model>
|
25 |
+
<sort_order>0</sort_order>
|
26 |
+
<show_in_default>1</show_in_default>
|
27 |
+
<show_in_website>1</show_in_website>
|
28 |
+
<show_in_store>1</show_in_store>
|
29 |
+
</support>
|
30 |
+
<global translate="label">
|
31 |
+
<label>List of Products</label>
|
32 |
+
<frontend_type>text</frontend_type>
|
33 |
+
<frontend_model>hermes/adminhtml_system_config_products</frontend_model>
|
34 |
+
<sort_order>1</sort_order>
|
35 |
+
<show_in_default>1</show_in_default>
|
36 |
+
<show_in_website>0</show_in_website>
|
37 |
+
<show_in_store>0</show_in_store>
|
38 |
+
</global>
|
39 |
+
<general translate="label">
|
40 |
+
<label>Basic Configuration</label>
|
41 |
+
<frontend_type>text</frontend_type>
|
42 |
+
<sort_order>10</sort_order>
|
43 |
+
<show_in_default>1</show_in_default>
|
44 |
+
<show_in_website>0</show_in_website>
|
45 |
+
<show_in_store>0</show_in_store>
|
46 |
+
<fields>
|
47 |
+
<active translate="label">
|
48 |
+
<label>Enabled</label>
|
49 |
+
<frontend_type>select</frontend_type>
|
50 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
51 |
+
<sort_order>100</sort_order>
|
52 |
+
<show_in_default>1</show_in_default>
|
53 |
+
<show_in_website>0</show_in_website>
|
54 |
+
<show_in_store>0</show_in_store>
|
55 |
+
</active>
|
56 |
+
<testmode translate="label">
|
57 |
+
<label>Test mode</label>
|
58 |
+
<comment><![CDATA[By choosing 'yes' the sandbox mode will be activated. Please notice, that all generated parcels will be ignored by Hermes.]]></comment>
|
59 |
+
<frontend_type>select</frontend_type>
|
60 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
61 |
+
<sort_order>300</sort_order>
|
62 |
+
<show_in_default>1</show_in_default>
|
63 |
+
<show_in_website>0</show_in_website>
|
64 |
+
<show_in_store>0</show_in_store>
|
65 |
+
</testmode>
|
66 |
+
<logging_enabled translate="label comment">
|
67 |
+
<label>Log requests and responses of the web service.</label>
|
68 |
+
<comment><![CDATA[Please ensure that the Magento-Log is activated]]></comment>
|
69 |
+
<frontend_type>select</frontend_type>
|
70 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
71 |
+
<sort_order>400</sort_order>
|
72 |
+
<show_in_default>1</show_in_default>
|
73 |
+
<show_in_website>0</show_in_website>
|
74 |
+
<show_in_store>0</show_in_store>
|
75 |
+
</logging_enabled>
|
76 |
+
</fields>
|
77 |
+
</general>
|
78 |
+
|
79 |
+
<account translate="label" module="hermes">
|
80 |
+
<label>Account</label>
|
81 |
+
<frontend_type>text</frontend_type>
|
82 |
+
<sort_order>21</sort_order>
|
83 |
+
<show_in_default>1</show_in_default>
|
84 |
+
<show_in_website>0</show_in_website>
|
85 |
+
<show_in_store>0</show_in_store>
|
86 |
+
<fields>
|
87 |
+
<username>
|
88 |
+
<label>Username of the client</label>
|
89 |
+
<frontend_type>text</frontend_type>
|
90 |
+
<sort_order>400</sort_order>
|
91 |
+
<show_in_default>1</show_in_default>
|
92 |
+
<show_in_website>0</show_in_website>
|
93 |
+
<show_in_store>0</show_in_store>
|
94 |
+
<validate>required-entry</validate>
|
95 |
+
</username>
|
96 |
+
<password>
|
97 |
+
<label>Password of the client</label>
|
98 |
+
<frontend_type>text</frontend_type>
|
99 |
+
<sort_order>800</sort_order>
|
100 |
+
<show_in_default>1</show_in_default>
|
101 |
+
<show_in_website>0</show_in_website>
|
102 |
+
<show_in_store>0</show_in_store>
|
103 |
+
<validate>required-entry</validate>
|
104 |
+
</password>
|
105 |
+
</fields>
|
106 |
+
</account>
|
107 |
+
|
108 |
+
<shipment_options translate="label" module="hermes">
|
109 |
+
<label>Shipment Options</label>
|
110 |
+
<frontend_type>text</frontend_type>
|
111 |
+
<sort_order>30</sort_order>
|
112 |
+
<show_in_default>1</show_in_default>
|
113 |
+
<show_in_website>1</show_in_website>
|
114 |
+
<show_in_store>1</show_in_store>
|
115 |
+
<fields>
|
116 |
+
<disabled_shipping_methods translate="label">
|
117 |
+
<label>Disabled shipping methods</label>
|
118 |
+
<comment>Please select shipping methods which should not be used for Hermes shipping.</comment>
|
119 |
+
<frontend_type>multiselect</frontend_type>
|
120 |
+
<source_model>Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods</source_model>
|
121 |
+
<sort_order>10</sort_order>
|
122 |
+
<show_in_default>1</show_in_default>
|
123 |
+
<show_in_website>1</show_in_website>
|
124 |
+
<show_in_store>1</show_in_store>
|
125 |
+
</disabled_shipping_methods>
|
126 |
+
<cod_payment_methods translate="label">
|
127 |
+
<label>Payment methods allowed for cash on delivery</label>
|
128 |
+
<frontend_type>multiselect</frontend_type>
|
129 |
+
<source_model>Netresearch_Hermes_Model_System_Config_Source_Payment_Methods</source_model>
|
130 |
+
<sort_order>20</sort_order>
|
131 |
+
<show_in_default>1</show_in_default>
|
132 |
+
<show_in_website>1</show_in_website>
|
133 |
+
<show_in_store>1</show_in_store>
|
134 |
+
</cod_payment_methods>
|
135 |
+
<hermes_mail translate="label">
|
136 |
+
<label>Let Hermes send an email containing the tracking link</label>
|
137 |
+
<frontend_type>select</frontend_type>
|
138 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
139 |
+
<sort_order>30</sort_order>
|
140 |
+
<show_in_default>1</show_in_default>
|
141 |
+
<show_in_website>0</show_in_website>
|
142 |
+
<show_in_store>0</show_in_store>
|
143 |
+
</hermes_mail>
|
144 |
+
</fields>
|
145 |
+
</shipment_options>
|
146 |
+
|
147 |
+
<shipment_label_options translate="shipment label" module="hermes">
|
148 |
+
<label>Shipment Label Options</label>
|
149 |
+
<sort_order>40</sort_order>
|
150 |
+
<show_in_default>1</show_in_default>
|
151 |
+
<show_in_website>0</show_in_website>
|
152 |
+
<show_in_store>0</show_in_store>
|
153 |
+
<fields>
|
154 |
+
<shipment_label_option_pdf translate="shipment label placement">
|
155 |
+
<label>shipment label placement</label>
|
156 |
+
<comment>Please select placement for shipment label.</comment>
|
157 |
+
<frontend_type>select</frontend_type>
|
158 |
+
<source_model>Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements</source_model>
|
159 |
+
<sort_order>2</sort_order>
|
160 |
+
<show_in_default>1</show_in_default>
|
161 |
+
<show_in_website>0</show_in_website>
|
162 |
+
<show_in_store>0</show_in_store>
|
163 |
+
</shipment_label_option_pdf>
|
164 |
+
</fields>
|
165 |
+
</shipment_label_options>
|
166 |
+
|
167 |
+
<email_options translate="email options" module="hermes">
|
168 |
+
<label>e-mail options</label>
|
169 |
+
<sort_order>50</sort_order>
|
170 |
+
<show_in_default>1</show_in_default>
|
171 |
+
<show_in_website>0</show_in_website>
|
172 |
+
<show_in_store>0</show_in_store>
|
173 |
+
<fields>
|
174 |
+
<send_email_automatic_mode translate="label">
|
175 |
+
<label>send shipping e-mail immediately if automatic mode is used</label>
|
176 |
+
<frontend_type>select</frontend_type>
|
177 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
178 |
+
<sort_order>500</sort_order>
|
179 |
+
<show_in_default>1</show_in_default>
|
180 |
+
<show_in_website>0</show_in_website>
|
181 |
+
<show_in_store>0</show_in_store>
|
182 |
+
</send_email_automatic_mode>
|
183 |
+
<send_email_tracking_link translate="label">
|
184 |
+
<label>send shipping e-mail if tracking link is available</label>
|
185 |
+
<frontend_type>select</frontend_type>
|
186 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
187 |
+
<sort_order>510</sort_order>
|
188 |
+
<show_in_default>1</show_in_default>
|
189 |
+
<show_in_website>0</show_in_website>
|
190 |
+
<show_in_store>0</show_in_store>
|
191 |
+
</send_email_tracking_link>
|
192 |
+
</fields>
|
193 |
+
</email_options>
|
194 |
+
|
195 |
+
<autocreate translate="label" module="hermes">
|
196 |
+
<label>Automatic shipment creation</label>
|
197 |
+
<sort_order>60</sort_order>
|
198 |
+
<show_in_default>1</show_in_default>
|
199 |
+
<show_in_website>0</show_in_website>
|
200 |
+
<show_in_store>0</show_in_store>
|
201 |
+
<fields>
|
202 |
+
<enabled translate="label">
|
203 |
+
<label>Enabled</label>
|
204 |
+
<frontend_type>select</frontend_type>
|
205 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
206 |
+
<sort_order>0</sort_order>
|
207 |
+
<show_in_default>1</show_in_default>
|
208 |
+
<show_in_website>0</show_in_website>
|
209 |
+
<show_in_store>0</show_in_store>
|
210 |
+
</enabled>
|
211 |
+
<order_status translate="label">
|
212 |
+
<label>Allowed order status codes for automatic shipment</label>
|
213 |
+
<frontend_type>multiselect</frontend_type>
|
214 |
+
<source_model>Mage_Adminhtml_Model_System_Config_Source_Order_Status</source_model>
|
215 |
+
<sort_order>10</sort_order>
|
216 |
+
<show_in_default>1</show_in_default>
|
217 |
+
<show_in_website>0</show_in_website>
|
218 |
+
<show_in_store>0</show_in_store>
|
219 |
+
</order_status>
|
220 |
+
<payment_methods translate="label">
|
221 |
+
<label>Payment methods allowed for automatic shipment</label>
|
222 |
+
<frontend_type>multiselect</frontend_type>
|
223 |
+
<source_model>Netresearch_Hermes_Model_System_Config_Source_Payment_Methods</source_model>
|
224 |
+
<sort_order>20</sort_order>
|
225 |
+
<show_in_default>1</show_in_default>
|
226 |
+
<show_in_website>0</show_in_website>
|
227 |
+
<show_in_store>0</show_in_store>
|
228 |
+
</payment_methods>
|
229 |
+
</fields>
|
230 |
+
</autocreate>
|
231 |
+
</groups>
|
232 |
+
</hermes>
|
233 |
+
</sections>
|
234 |
+
</config>
|
app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php
ADDED
@@ -0,0 +1,72 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Netresearch Hermes
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Netresearch
|
18 |
+
* @package Netresearch_Hermes
|
19 |
+
* @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Database setup script
|
25 |
+
*
|
26 |
+
* @category Netresearch
|
27 |
+
* @package Netresearch_Hermes
|
28 |
+
* @author Thomas Birke <thomas.birke@netresearch.de>
|
29 |
+
*/
|
30 |
+
|
31 |
+
$installer = $this;
|
32 |
+
$installer->startSetup();
|
33 |
+
|
34 |
+
$installer->run("
|
35 |
+
-- DROP TABLE IF EXISTS {$this->getTable('hermes_parcel')};
|
36 |
+
|
37 |
+
CREATE TABLE IF NOT EXISTS {$this->getTable('hermes_parcel')} (
|
38 |
+
`id` int(10) unsigned NOT NULL auto_increment,
|
39 |
+
`shipment_id` int(10) NOT NULL,
|
40 |
+
`hermes_order_no` varchar(50),
|
41 |
+
`hermes_shipping_id` varchar(16),
|
42 |
+
`hermes_creation_date` datetime,
|
43 |
+
`hermes_status_text` varchar(255),
|
44 |
+
`hermes_status` int(11),
|
45 |
+
`receiver_firstname` varchar(255),
|
46 |
+
`receiver_lastname` varchar(25),
|
47 |
+
`receiver_street` varchar(27),
|
48 |
+
`receiver_house_number` varchar(5),
|
49 |
+
`receiver_address_add` varchar(255),
|
50 |
+
`receiver_postcode` varchar(255),
|
51 |
+
`receiver_city` varchar(30),
|
52 |
+
`receiver_district` varchar(255),
|
53 |
+
`receiver_country_code` varchar(3),
|
54 |
+
`receiver_email` varchar(255),
|
55 |
+
`receiver_telephone_number` varchar(255),
|
56 |
+
`receiver_telephone_prefix` varchar(50),
|
57 |
+
`parcel_class` varchar(3),
|
58 |
+
`amount_cash_on_delivery_eurocent` int(11) NOT NULL default 0,
|
59 |
+
`include_cash_on_delivery` int(1) NOT NULL default 0,
|
60 |
+
`error_code` varchar(10),
|
61 |
+
`error_message` varchar(1000),
|
62 |
+
`status_code` int NOT NULL default 0,
|
63 |
+
PRIMARY KEY (`id`),
|
64 |
+
UNIQUE KEY `shipment_id` (`shipment_id`)
|
65 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Hermes Shipments';
|
66 |
+
|
67 |
+
-- set installation timestamp
|
68 |
+
REPLACE INTO {$this->getTable('core_config_data')} (scope, scope_id, path, value) VALUES ('default', 0, 'hermes/general/installation_date', NOW());
|
69 |
+
");
|
70 |
+
|
71 |
+
$installer->endSetup();
|
72 |
+
|
app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl
ADDED
@@ -0,0 +1,1379 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<wsdl:definitions targetNamespace="http://hermes_api.service.hlg.de" xmlns:impl="http://hermes_api.service.hlg.de" xmlns:intf="http://hermes_api.service.hlg.de" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
3 |
+
<wsdl:types>
|
4 |
+
<schema targetNamespace="http://hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
5 |
+
<import namespace="http://validate.hermes_api.service.hlg.de"/>
|
6 |
+
<import namespace="http://props.hermes_api.service.hlg.de"/>
|
7 |
+
<element name="propsGetCollectionOrdersResponse">
|
8 |
+
<complexType>
|
9 |
+
<sequence>
|
10 |
+
<element name="propsGetCollectionOrdersReturn" nillable="true" type="tns2:ListOfPropsCollectionOrders"/>
|
11 |
+
</sequence>
|
12 |
+
</complexType>
|
13 |
+
</element>
|
14 |
+
<element name="propsOrderDelete">
|
15 |
+
<complexType>
|
16 |
+
<sequence>
|
17 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
18 |
+
</sequence>
|
19 |
+
</complexType>
|
20 |
+
</element>
|
21 |
+
<element name="propsOrderDeleteResponse">
|
22 |
+
<complexType>
|
23 |
+
<sequence>
|
24 |
+
<element name="propsOrderDeleteReturn" type="xsd:boolean"/>
|
25 |
+
</sequence>
|
26 |
+
</complexType>
|
27 |
+
</element>
|
28 |
+
<element name="propsCollectionRequest">
|
29 |
+
<complexType>
|
30 |
+
<sequence>
|
31 |
+
<element name="collectionOrder" nillable="true" type="tns2:PropsCollectionOrder"/>
|
32 |
+
</sequence>
|
33 |
+
</complexType>
|
34 |
+
</element>
|
35 |
+
<element name="propsCollectionRequestResponse">
|
36 |
+
<complexType>
|
37 |
+
<sequence>
|
38 |
+
<element name="propsCollectionRequestReturn" nillable="true" type="xsd:string"/>
|
39 |
+
</sequence>
|
40 |
+
</complexType>
|
41 |
+
</element>
|
42 |
+
<element name="propsOrderPrintLabelPdf">
|
43 |
+
<complexType>
|
44 |
+
<sequence>
|
45 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
46 |
+
<element name="printPosition" nillable="true" type="xsd:short"/>
|
47 |
+
</sequence>
|
48 |
+
</complexType>
|
49 |
+
</element>
|
50 |
+
<element name="propsOrderPrintLabelPdfResponse">
|
51 |
+
<complexType>
|
52 |
+
<sequence>
|
53 |
+
<element name="propsOrderPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
|
54 |
+
</sequence>
|
55 |
+
</complexType>
|
56 |
+
</element>
|
57 |
+
<element name="propsCollectionCancel">
|
58 |
+
<complexType>
|
59 |
+
<sequence>
|
60 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
61 |
+
</sequence>
|
62 |
+
</complexType>
|
63 |
+
</element>
|
64 |
+
<element name="propsCollectionCancelResponse">
|
65 |
+
<complexType>
|
66 |
+
<sequence>
|
67 |
+
<element name="propsCollectionCancelReturn" type="xsd:boolean"/>
|
68 |
+
</sequence>
|
69 |
+
</complexType>
|
70 |
+
</element>
|
71 |
+
<element name="propsOrderSaveAndPrintLabelPdf">
|
72 |
+
<complexType>
|
73 |
+
<sequence>
|
74 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
75 |
+
<element name="printPosition" nillable="true" type="xsd:short"/>
|
76 |
+
</sequence>
|
77 |
+
</complexType>
|
78 |
+
</element>
|
79 |
+
<element name="propsOrderSaveAndPrintLabelPdfResponse">
|
80 |
+
<complexType>
|
81 |
+
<sequence>
|
82 |
+
<element name="propsOrderSaveAndPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
|
83 |
+
</sequence>
|
84 |
+
</complexType>
|
85 |
+
</element>
|
86 |
+
<element name="init">
|
87 |
+
<complexType>
|
88 |
+
<sequence>
|
89 |
+
<element name="arg_0_0" nillable="true" type="xsd:anyType"/>
|
90 |
+
</sequence>
|
91 |
+
</complexType>
|
92 |
+
</element>
|
93 |
+
<element name="initResponse">
|
94 |
+
<complexType>
|
95 |
+
<sequence/>
|
96 |
+
</complexType>
|
97 |
+
</element>
|
98 |
+
<element name="propsGetPropsOrder">
|
99 |
+
<complexType>
|
100 |
+
<sequence>
|
101 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
102 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
103 |
+
</sequence>
|
104 |
+
</complexType>
|
105 |
+
</element>
|
106 |
+
<element name="propsGetPropsOrderResponse">
|
107 |
+
<complexType>
|
108 |
+
<sequence>
|
109 |
+
<element name="propsGetPropsOrderReturn" nillable="true" type="tns2:PropsOrderLong"/>
|
110 |
+
</sequence>
|
111 |
+
</complexType>
|
112 |
+
</element>
|
113 |
+
<element name="propsOrderSave">
|
114 |
+
<complexType>
|
115 |
+
<sequence>
|
116 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
117 |
+
</sequence>
|
118 |
+
</complexType>
|
119 |
+
</element>
|
120 |
+
<element name="propsOrderSaveResponse">
|
121 |
+
<complexType>
|
122 |
+
<sequence>
|
123 |
+
<element name="propsOrderSaveReturn" nillable="true" type="xsd:string"/>
|
124 |
+
</sequence>
|
125 |
+
</complexType>
|
126 |
+
</element>
|
127 |
+
<element name="propsOrdersPrintLabelsPdf">
|
128 |
+
<complexType>
|
129 |
+
<sequence>
|
130 |
+
<element name="requestedOrderNumbers" nillable="true" type="tns2:RequestedOrderNumbers"/>
|
131 |
+
</sequence>
|
132 |
+
</complexType>
|
133 |
+
</element>
|
134 |
+
<element name="propsOrdersPrintLabelsPdfResponse">
|
135 |
+
<complexType>
|
136 |
+
<sequence>
|
137 |
+
<element name="propsOrdersPrintLabelsPdfReturn" nillable="true" type="tns2:MultipleShippingLabelsPdf"/>
|
138 |
+
</sequence>
|
139 |
+
</complexType>
|
140 |
+
</element>
|
141 |
+
<element name="propsUserLogin">
|
142 |
+
<complexType>
|
143 |
+
<sequence>
|
144 |
+
<element name="login" nillable="true" type="tns5:HermesLogin"/>
|
145 |
+
</sequence>
|
146 |
+
</complexType>
|
147 |
+
</element>
|
148 |
+
<element name="propsUserLoginResponse">
|
149 |
+
<complexType>
|
150 |
+
<sequence>
|
151 |
+
<element name="propsUserLoginReturn" nillable="true" type="xsd:string"/>
|
152 |
+
</sequence>
|
153 |
+
</complexType>
|
154 |
+
</element>
|
155 |
+
<element name="propsOrderPrintLabelJpeg">
|
156 |
+
<complexType>
|
157 |
+
<sequence>
|
158 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
159 |
+
</sequence>
|
160 |
+
</complexType>
|
161 |
+
</element>
|
162 |
+
<element name="propsOrderPrintLabelJpegResponse">
|
163 |
+
<complexType>
|
164 |
+
<sequence>
|
165 |
+
<element name="propsOrderPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
|
166 |
+
</sequence>
|
167 |
+
</complexType>
|
168 |
+
</element>
|
169 |
+
<element name="propsListOfProductsATG">
|
170 |
+
<complexType>
|
171 |
+
<sequence/>
|
172 |
+
</complexType>
|
173 |
+
</element>
|
174 |
+
<element name="propsListOfProductsATGResponse">
|
175 |
+
<complexType>
|
176 |
+
<sequence>
|
177 |
+
<element name="propsListOfProductsATGReturn" nillable="true" type="tns2:ListOfProducts"/>
|
178 |
+
</sequence>
|
179 |
+
</complexType>
|
180 |
+
</element>
|
181 |
+
<element name="propsReadShipmentStatus">
|
182 |
+
<complexType>
|
183 |
+
<sequence>
|
184 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
185 |
+
</sequence>
|
186 |
+
</complexType>
|
187 |
+
</element>
|
188 |
+
<element name="propsReadShipmentStatusResponse">
|
189 |
+
<complexType>
|
190 |
+
<sequence>
|
191 |
+
<element name="propsReadShipmentStatusReturn" nillable="true" type="tns2:ShippingStatus"/>
|
192 |
+
</sequence>
|
193 |
+
</complexType>
|
194 |
+
</element>
|
195 |
+
<element name="propsGetPropsOrders">
|
196 |
+
<complexType>
|
197 |
+
<sequence>
|
198 |
+
<element name="searchCriteria" nillable="true" type="tns2:PropsOrderSearchCriteria"/>
|
199 |
+
</sequence>
|
200 |
+
</complexType>
|
201 |
+
</element>
|
202 |
+
<element name="propsGetPropsOrdersResponse">
|
203 |
+
<complexType>
|
204 |
+
<sequence>
|
205 |
+
<element name="propsGetPropsOrdersReturn" nillable="true" type="tns2:ListOfPropsOrders"/>
|
206 |
+
</sequence>
|
207 |
+
</complexType>
|
208 |
+
</element>
|
209 |
+
<element name="propsProductlnformation">
|
210 |
+
<complexType>
|
211 |
+
<sequence/>
|
212 |
+
</complexType>
|
213 |
+
</element>
|
214 |
+
<element name="propsProductlnformationResponse">
|
215 |
+
<complexType>
|
216 |
+
<sequence>
|
217 |
+
<element name="propsProductlnformationReturn" nillable="true" type="tns2:ListOfProductInfos"/>
|
218 |
+
</sequence>
|
219 |
+
</complexType>
|
220 |
+
</element>
|
221 |
+
<element name="propsCheckAvailability">
|
222 |
+
<complexType>
|
223 |
+
<sequence/>
|
224 |
+
</complexType>
|
225 |
+
</element>
|
226 |
+
<element name="propsCheckAvailabilityResponse">
|
227 |
+
<complexType>
|
228 |
+
<sequence>
|
229 |
+
<element name="propsCheckAvailabilityReturn" nillable="true" type="xsd:string"/>
|
230 |
+
</sequence>
|
231 |
+
</complexType>
|
232 |
+
</element>
|
233 |
+
<element name="propsOrderSaveAndPrintLabelJpeg">
|
234 |
+
<complexType>
|
235 |
+
<sequence>
|
236 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
237 |
+
</sequence>
|
238 |
+
</complexType>
|
239 |
+
</element>
|
240 |
+
<element name="propsOrderSaveAndPrintLabelJpegResponse">
|
241 |
+
<complexType>
|
242 |
+
<sequence>
|
243 |
+
<element name="propsOrderSaveAndPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
|
244 |
+
</sequence>
|
245 |
+
</complexType>
|
246 |
+
</element>
|
247 |
+
<element name="destroy">
|
248 |
+
<complexType>
|
249 |
+
<sequence/>
|
250 |
+
</complexType>
|
251 |
+
</element>
|
252 |
+
<element name="destroyResponse">
|
253 |
+
<complexType>
|
254 |
+
<sequence/>
|
255 |
+
</complexType>
|
256 |
+
</element>
|
257 |
+
<element name="propsImportOrders">
|
258 |
+
<complexType>
|
259 |
+
<sequence>
|
260 |
+
<element name="requestedOrders" nillable="true" type="tns2:RequestedOrders"/>
|
261 |
+
</sequence>
|
262 |
+
</complexType>
|
263 |
+
</element>
|
264 |
+
<element name="propsImportOrdersResponse">
|
265 |
+
<complexType>
|
266 |
+
<sequence>
|
267 |
+
<element name="propsImportOrdersReturn" nillable="true" type="tns2:ImportResult"/>
|
268 |
+
</sequence>
|
269 |
+
</complexType>
|
270 |
+
</element>
|
271 |
+
<element name="propsGetCollectionOrders">
|
272 |
+
<complexType>
|
273 |
+
<sequence>
|
274 |
+
<element name="collectionDateFrom" nillable="true" type="xsd:dateTime"/>
|
275 |
+
<element name="collectionDateTo" nillable="true" type="xsd:dateTime"/>
|
276 |
+
<element name="onlyMoreThan2ccm" type="xsd:boolean"/>
|
277 |
+
</sequence>
|
278 |
+
</complexType>
|
279 |
+
</element>
|
280 |
+
</schema>
|
281 |
+
<schema targetNamespace="http://props.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
282 |
+
<import namespace="http://exception.common.service.hlg.de"/>
|
283 |
+
<import namespace="http://common.hermes_api.service.hlg.de"/>
|
284 |
+
<complexType name="ListOfPropsCollectionOrders">
|
285 |
+
<sequence>
|
286 |
+
<element name="orders" nillable="true" type="tns2:ArrayOfPropsCollectionOrderLong"/>
|
287 |
+
</sequence>
|
288 |
+
</complexType>
|
289 |
+
<complexType name="PropsCollectionOrderLong">
|
290 |
+
<sequence>
|
291 |
+
<element name="moreThan2ccm" nillable="true" type="xsd:string"/>
|
292 |
+
<element name="volume" nillable="true" type="xsd:double"/>
|
293 |
+
<element name="collectionAdress" nillable="true" type="tns3:Address"/>
|
294 |
+
<element name="timeframe" nillable="true" type="xsd:string"/>
|
295 |
+
<element name="collectionType" nillable="true" type="xsd:string"/>
|
296 |
+
<element name="numberOfParcels" nillable="true" type="xsd:int"/>
|
297 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
298 |
+
</sequence>
|
299 |
+
</complexType>
|
300 |
+
<complexType name="ArrayOfPropsCollectionOrderLong">
|
301 |
+
<sequence>
|
302 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsCollectionOrderLong" nillable="true" type="tns2:PropsCollectionOrderLong"/>
|
303 |
+
</sequence>
|
304 |
+
</complexType>
|
305 |
+
<complexType name="PropsCollectionOrder">
|
306 |
+
<sequence>
|
307 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
308 |
+
<element name="numberOfParcelsClass_L" nillable="true" type="xsd:int"/>
|
309 |
+
<element name="numberOfParcelsClass_M" nillable="true" type="xsd:int"/>
|
310 |
+
<element name="numberOfParcelsClass_S" nillable="true" type="xsd:int"/>
|
311 |
+
<element name="numberOfParcelsClass_XL" nillable="true" type="xsd:int"/>
|
312 |
+
<element name="numberOfParcelsClass_XLwithBulkGoods" nillable="true" type="xsd:int"/>
|
313 |
+
<element name="numberOfParcelsClass_XS" nillable="true" type="xsd:int"/>
|
314 |
+
</sequence>
|
315 |
+
</complexType>
|
316 |
+
<complexType name="ShippingLabelPdf">
|
317 |
+
<sequence>
|
318 |
+
<element name="pdfData" type="xsd:base64Binary"/>
|
319 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
320 |
+
</sequence>
|
321 |
+
</complexType>
|
322 |
+
<complexType name="PropsOrder">
|
323 |
+
<sequence>
|
324 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
325 |
+
<element name="receiver" nillable="true" type="tns3:Address"/>
|
326 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
327 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
328 |
+
<element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
329 |
+
<element name="includeCashOnDelivery" type="xsd:boolean"/>
|
330 |
+
<element name="withBulkGoods" type="xsd:boolean"/>
|
331 |
+
</sequence>
|
332 |
+
</complexType>
|
333 |
+
<complexType name="PropsOrderLong">
|
334 |
+
<sequence>
|
335 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
336 |
+
<element name="ebayNumber" nillable="true" type="xsd:string"/>
|
337 |
+
<element name="shipper" nillable="true" type="tns3:Address"/>
|
338 |
+
<element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
339 |
+
<element name="trackingFlag" nillable="true" type="xsd:short"/>
|
340 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
341 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
342 |
+
<element name="printDate" nillable="true" type="xsd:dateTime"/>
|
343 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
344 |
+
<element name="status_text" nillable="true" type="xsd:string"/>
|
345 |
+
<element name="status" nillable="true" type="xsd:short"/>
|
346 |
+
<element name="receiver" nillable="true" type="tns3:Address"/>
|
347 |
+
</sequence>
|
348 |
+
</complexType>
|
349 |
+
<complexType name="RequestedOrderNumbers">
|
350 |
+
<sequence>
|
351 |
+
<element name="orderNumbers" nillable="true" type="tns2:ArrayOf_xsd_nillable_string"/>
|
352 |
+
</sequence>
|
353 |
+
</complexType>
|
354 |
+
<complexType name="ArrayOf_xsd_nillable_string">
|
355 |
+
<sequence>
|
356 |
+
<element maxOccurs="unbounded" minOccurs="0" name="string" nillable="true" type="xsd:string"/>
|
357 |
+
</sequence>
|
358 |
+
</complexType>
|
359 |
+
<complexType name="MultipleShippingLabelsPdf">
|
360 |
+
<sequence>
|
361 |
+
<element name="pdfData" type="xsd:base64Binary"/>
|
362 |
+
<element name="orderRes" nillable="true" type="tns2:ArrayOfOrderResponse"/>
|
363 |
+
</sequence>
|
364 |
+
</complexType>
|
365 |
+
<complexType name="OrderResponse">
|
366 |
+
<sequence>
|
367 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
368 |
+
<element name="exceptionItems" nillable="true" type="tns2:ArrayOf_tns4_nillable_ExceptionItem"/>
|
369 |
+
</sequence>
|
370 |
+
</complexType>
|
371 |
+
<complexType name="ArrayOf_tns4_nillable_ExceptionItem">
|
372 |
+
<sequence>
|
373 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
|
374 |
+
</sequence>
|
375 |
+
</complexType>
|
376 |
+
<complexType name="ArrayOfOrderResponse">
|
377 |
+
<sequence>
|
378 |
+
<element maxOccurs="unbounded" minOccurs="0" name="OrderResponse" nillable="true" type="tns2:OrderResponse"/>
|
379 |
+
</sequence>
|
380 |
+
</complexType>
|
381 |
+
<complexType name="ShippingLabelJpeg">
|
382 |
+
<sequence>
|
383 |
+
<element name="jpegData" type="xsd:base64Binary"/>
|
384 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
385 |
+
</sequence>
|
386 |
+
</complexType>
|
387 |
+
<complexType name="ListOfProducts">
|
388 |
+
<sequence>
|
389 |
+
<element name="numberOfProducts" type="xsd:int"/>
|
390 |
+
<element name="products" nillable="true" type="tns2:ArrayOfProductWithPrice"/>
|
391 |
+
<element name="dated" nillable="true" type="xsd:dateTime"/>
|
392 |
+
<element name="labelAcceptanceTermsAndConditions" nillable="true" type="xsd:string"/>
|
393 |
+
<element name="labelAcceptanceLiabilityLimit" nillable="true" type="xsd:string"/>
|
394 |
+
<element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
|
395 |
+
<element name="netPriceCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
396 |
+
<element name="settlementType" nillable="true" type="xsd:string"/>
|
397 |
+
<element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
|
398 |
+
<element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
|
399 |
+
<element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
|
400 |
+
<element name="urlPortalB2C" nillable="true" type="xsd:string"/>
|
401 |
+
<element name="vatInfo" nillable="true" type="xsd:string"/>
|
402 |
+
<element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
|
403 |
+
</sequence>
|
404 |
+
</complexType>
|
405 |
+
<complexType name="ProductWithPrice">
|
406 |
+
<sequence>
|
407 |
+
<element name="netPriceEurcent" nillable="true" type="xsd:int"/>
|
408 |
+
<element name="validAt" nillable="true" type="xsd:dateTime"/>
|
409 |
+
<element name="productInfo" nillable="true" type="tns2:ProductInfo"/>
|
410 |
+
</sequence>
|
411 |
+
</complexType>
|
412 |
+
<complexType name="ProductInfo">
|
413 |
+
<sequence>
|
414 |
+
<element name="parcelFormat" nillable="true" type="tns2:ParcelFormat"/>
|
415 |
+
<element name="deliveryDestinations" nillable="true" type="tns2:ArrayOfDeliveryDestination"/>
|
416 |
+
</sequence>
|
417 |
+
</complexType>
|
418 |
+
<complexType name="ParcelFormat">
|
419 |
+
<sequence>
|
420 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
421 |
+
<element name="shortestPlusLongestEdgeCmMax" nillable="true" type="xsd:int"/>
|
422 |
+
<element name="shortestPlusLongestEdgeCmMin" nillable="true" type="xsd:int"/>
|
423 |
+
<element name="thridEdgeCmMax" nillable="true" type="xsd:int"/>
|
424 |
+
<element name="weightMinKg" nillable="true" type="xsd:decimal"/>
|
425 |
+
<element name="weigthMaxKg" nillable="true" type="xsd:decimal"/>
|
426 |
+
</sequence>
|
427 |
+
</complexType>
|
428 |
+
<complexType name="DeliveryDestination">
|
429 |
+
<sequence>
|
430 |
+
<element name="exclusions" nillable="true" type="xsd:string"/>
|
431 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
432 |
+
</sequence>
|
433 |
+
</complexType>
|
434 |
+
<complexType name="ArrayOfDeliveryDestination">
|
435 |
+
<sequence>
|
436 |
+
<element maxOccurs="unbounded" minOccurs="0" name="DeliveryDestination" nillable="true" type="tns2:DeliveryDestination"/>
|
437 |
+
</sequence>
|
438 |
+
</complexType>
|
439 |
+
<complexType name="ArrayOfProductWithPrice">
|
440 |
+
<sequence>
|
441 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ProductWithPrice" nillable="true" type="tns2:ProductWithPrice"/>
|
442 |
+
</sequence>
|
443 |
+
</complexType>
|
444 |
+
<complexType name="ServiceCharge">
|
445 |
+
<sequence>
|
446 |
+
<element name="displayname" nillable="true" type="xsd:string"/>
|
447 |
+
<element name="amountEurocent" nillable="true" type="xsd:short"/>
|
448 |
+
<element name="currency" nillable="true" type="xsd:string"/>
|
449 |
+
</sequence>
|
450 |
+
</complexType>
|
451 |
+
<complexType name="ArrayOfServiceCharge">
|
452 |
+
<sequence>
|
453 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ServiceCharge" nillable="true" type="tns2:ServiceCharge"/>
|
454 |
+
</sequence>
|
455 |
+
</complexType>
|
456 |
+
<complexType name="ShippingStatus">
|
457 |
+
<sequence>
|
458 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
459 |
+
<element name="statusText" nillable="true" type="xsd:string"/>
|
460 |
+
<element name="statusDateTime" nillable="true" type="xsd:dateTime"/>
|
461 |
+
</sequence>
|
462 |
+
</complexType>
|
463 |
+
<complexType name="PropsOrderSearchCriteria">
|
464 |
+
<sequence>
|
465 |
+
<element name="identNo" nillable="true" type="xsd:string"/>
|
466 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
467 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
468 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
469 |
+
<element name="from" nillable="true" type="xsd:dateTime"/>
|
470 |
+
<element name="to" nillable="true" type="xsd:dateTime"/>
|
471 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
472 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
473 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
474 |
+
<element name="ebayNumber" nillable="true" type="xsd:string"/>
|
475 |
+
<element name="status" nillable="true" type="tns2:ArrayOf_xsd_nillable_short"/>
|
476 |
+
</sequence>
|
477 |
+
</complexType>
|
478 |
+
<complexType name="ArrayOf_xsd_nillable_short">
|
479 |
+
<sequence>
|
480 |
+
<element maxOccurs="unbounded" minOccurs="0" name="short" nillable="true" type="xsd:short"/>
|
481 |
+
</sequence>
|
482 |
+
</complexType>
|
483 |
+
<complexType name="ListOfPropsOrders">
|
484 |
+
<sequence>
|
485 |
+
<element name="orders" nillable="true" type="tns2:ArrayOfPropsOrderShort"/>
|
486 |
+
</sequence>
|
487 |
+
</complexType>
|
488 |
+
<complexType name="PropsOrderShort">
|
489 |
+
<sequence>
|
490 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
491 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
492 |
+
<element name="creationDate" nillable="true" type="xsd:dateTime"/>
|
493 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
494 |
+
<element name="status_text" nillable="true" type="xsd:string"/>
|
495 |
+
<element name="status" nillable="true" type="xsd:short"/>
|
496 |
+
<element name="firstname" nillable="true" type="xsd:string"/>
|
497 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
498 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
499 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
500 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
501 |
+
<element name="bulkGoodsServiceAmount" nillable="true" type="xsd:int"/>
|
502 |
+
</sequence>
|
503 |
+
</complexType>
|
504 |
+
<complexType name="ArrayOfPropsOrderShort">
|
505 |
+
<sequence>
|
506 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsOrderShort" nillable="true" type="tns2:PropsOrderShort"/>
|
507 |
+
</sequence>
|
508 |
+
</complexType>
|
509 |
+
<complexType name="ListOfProductInfos">
|
510 |
+
<sequence>
|
511 |
+
<element name="productInfoList" nillable="true" type="tns2:ArrayOfProductInfo"/>
|
512 |
+
<element name="dated" nillable="true" type="xsd:dateTime"/>
|
513 |
+
<element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
|
514 |
+
<element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
|
515 |
+
<element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
|
516 |
+
<element name="urlPortalB2C" nillable="true" type="xsd:string"/>
|
517 |
+
<element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
|
518 |
+
<element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
|
519 |
+
</sequence>
|
520 |
+
</complexType>
|
521 |
+
<complexType name="ArrayOfProductInfo">
|
522 |
+
<sequence>
|
523 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ProductInfo" nillable="true" type="tns2:ProductInfo"/>
|
524 |
+
</sequence>
|
525 |
+
</complexType>
|
526 |
+
<complexType name="RequestedOrders">
|
527 |
+
<sequence>
|
528 |
+
<element name="propsOrders" nillable="true" type="tns2:ArrayOfPropsOrder"/>
|
529 |
+
</sequence>
|
530 |
+
</complexType>
|
531 |
+
<complexType name="ArrayOfPropsOrder">
|
532 |
+
<sequence>
|
533 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsOrder" nillable="true" type="tns2:PropsOrder"/>
|
534 |
+
</sequence>
|
535 |
+
</complexType>
|
536 |
+
<complexType name="ImportResult">
|
537 |
+
<sequence>
|
538 |
+
<element name="orderResponses" nillable="true" type="tns2:ArrayOfOrderResponse"/>
|
539 |
+
</sequence>
|
540 |
+
</complexType>
|
541 |
+
</schema>
|
542 |
+
<schema targetNamespace="http://common.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
543 |
+
<complexType name="Address">
|
544 |
+
<sequence>
|
545 |
+
<element name="addressAdd" nillable="true" type="xsd:string"/>
|
546 |
+
<element name="email" nillable="true" type="xsd:string"/>
|
547 |
+
<element name="houseNumber" nillable="true" type="xsd:string"/>
|
548 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
549 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
550 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
551 |
+
<element name="district" nillable="true" type="xsd:string"/>
|
552 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
553 |
+
<element name="street" nillable="true" type="xsd:string"/>
|
554 |
+
<element name="telephoneNumber" nillable="true" type="xsd:string"/>
|
555 |
+
<element name="firstname" nillable="true" type="xsd:string"/>
|
556 |
+
<element name="telephonePrefix" nillable="true" type="xsd:string"/>
|
557 |
+
</sequence>
|
558 |
+
</complexType>
|
559 |
+
</schema>
|
560 |
+
<schema targetNamespace="http://exception.common.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
561 |
+
<complexType name="ServiceException">
|
562 |
+
<sequence>
|
563 |
+
<element name="exceptionItems" nillable="true" type="tns4:ArrayOfExceptionItem"/>
|
564 |
+
</sequence>
|
565 |
+
</complexType>
|
566 |
+
<complexType name="ExceptionItem">
|
567 |
+
<sequence>
|
568 |
+
<element name="errorCode" type="xsd:int"/>
|
569 |
+
<element name="errorMessage" nillable="true" type="xsd:string"/>
|
570 |
+
<element name="errorType" nillable="true" type="xsd:string"/>
|
571 |
+
</sequence>
|
572 |
+
</complexType>
|
573 |
+
<complexType name="ArrayOfExceptionItem">
|
574 |
+
<sequence>
|
575 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
|
576 |
+
</sequence>
|
577 |
+
</complexType>
|
578 |
+
<element name="ServiceException" nillable="true" type="tns4:ServiceException"/>
|
579 |
+
</schema>
|
580 |
+
<schema targetNamespace="http://validate.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
581 |
+
<complexType name="HermesLogin">
|
582 |
+
<sequence>
|
583 |
+
<element name="benutzername" nillable="true" type="xsd:string"/>
|
584 |
+
<element name="kennwort" nillable="true" type="xsd:string"/>
|
585 |
+
</sequence>
|
586 |
+
</complexType>
|
587 |
+
</schema>
|
588 |
+
</wsdl:types>
|
589 |
+
|
590 |
+
<wsdl:message name="propsGetPropsOrdersRequest">
|
591 |
+
<wsdl:part element="impl:propsGetPropsOrders" name="parameters"/>
|
592 |
+
|
593 |
+
</wsdl:message>
|
594 |
+
|
595 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelPdfRequest">
|
596 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelPdf" name="parameters"/>
|
597 |
+
|
598 |
+
</wsdl:message>
|
599 |
+
|
600 |
+
<wsdl:message name="propsOrderPrintLabelPdfRequest">
|
601 |
+
<wsdl:part element="impl:propsOrderPrintLabelPdf" name="parameters"/>
|
602 |
+
|
603 |
+
</wsdl:message>
|
604 |
+
|
605 |
+
<wsdl:message name="propsGetPropsOrderResponse">
|
606 |
+
<wsdl:part element="impl:propsGetPropsOrderResponse" name="parameters"/>
|
607 |
+
|
608 |
+
</wsdl:message>
|
609 |
+
|
610 |
+
<wsdl:message name="propsOrderDeleteRequest">
|
611 |
+
<wsdl:part element="impl:propsOrderDelete" name="parameters"/>
|
612 |
+
|
613 |
+
</wsdl:message>
|
614 |
+
|
615 |
+
<wsdl:message name="propsGetCollectionOrdersRequest">
|
616 |
+
<wsdl:part element="impl:propsGetCollectionOrders" name="parameters"/>
|
617 |
+
|
618 |
+
</wsdl:message>
|
619 |
+
|
620 |
+
<wsdl:message name="propsGetPropsOrderRequest">
|
621 |
+
<wsdl:part element="impl:propsGetPropsOrder" name="parameters"/>
|
622 |
+
|
623 |
+
</wsdl:message>
|
624 |
+
|
625 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelJpegResponse">
|
626 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelJpegResponse" name="parameters"/>
|
627 |
+
|
628 |
+
</wsdl:message>
|
629 |
+
|
630 |
+
<wsdl:message name="propsListOfProductsATGResponse">
|
631 |
+
<wsdl:part element="impl:propsListOfProductsATGResponse" name="parameters"/>
|
632 |
+
|
633 |
+
</wsdl:message>
|
634 |
+
|
635 |
+
<wsdl:message name="propsOrderPrintLabelJpegResponse">
|
636 |
+
<wsdl:part element="impl:propsOrderPrintLabelJpegResponse" name="parameters"/>
|
637 |
+
|
638 |
+
</wsdl:message>
|
639 |
+
|
640 |
+
<wsdl:message name="propsCollectionRequestRequest">
|
641 |
+
<wsdl:part element="impl:propsCollectionRequest" name="parameters"/>
|
642 |
+
|
643 |
+
</wsdl:message>
|
644 |
+
|
645 |
+
<wsdl:message name="propsProductlnformationResponse">
|
646 |
+
<wsdl:part element="impl:propsProductlnformationResponse" name="parameters"/>
|
647 |
+
|
648 |
+
</wsdl:message>
|
649 |
+
|
650 |
+
<wsdl:message name="propsReadShipmentStatusResponse">
|
651 |
+
<wsdl:part element="impl:propsReadShipmentStatusResponse" name="parameters"/>
|
652 |
+
|
653 |
+
</wsdl:message>
|
654 |
+
|
655 |
+
<wsdl:message name="propsCheckAvailabilityResponse">
|
656 |
+
<wsdl:part element="impl:propsCheckAvailabilityResponse" name="parameters"/>
|
657 |
+
|
658 |
+
</wsdl:message>
|
659 |
+
|
660 |
+
<wsdl:message name="propsImportOrdersResponse">
|
661 |
+
<wsdl:part element="impl:propsImportOrdersResponse" name="parameters"/>
|
662 |
+
|
663 |
+
</wsdl:message>
|
664 |
+
|
665 |
+
<wsdl:message name="destroyResponse">
|
666 |
+
<wsdl:part element="impl:destroyResponse" name="parameters"/>
|
667 |
+
|
668 |
+
</wsdl:message>
|
669 |
+
|
670 |
+
<wsdl:message name="propsCheckAvailabilityRequest">
|
671 |
+
<wsdl:part element="impl:propsCheckAvailability" name="parameters"/>
|
672 |
+
|
673 |
+
</wsdl:message>
|
674 |
+
|
675 |
+
<wsdl:message name="initRequest">
|
676 |
+
<wsdl:part element="impl:init" name="parameters"/>
|
677 |
+
|
678 |
+
</wsdl:message>
|
679 |
+
|
680 |
+
<wsdl:message name="propsUserLoginRequest">
|
681 |
+
<wsdl:part element="impl:propsUserLogin" name="parameters"/>
|
682 |
+
|
683 |
+
</wsdl:message>
|
684 |
+
|
685 |
+
<wsdl:message name="propsCollectionRequestResponse">
|
686 |
+
<wsdl:part element="impl:propsCollectionRequestResponse" name="parameters"/>
|
687 |
+
|
688 |
+
</wsdl:message>
|
689 |
+
|
690 |
+
<wsdl:message name="propsOrderPrintLabelJpegRequest">
|
691 |
+
<wsdl:part element="impl:propsOrderPrintLabelJpeg" name="parameters"/>
|
692 |
+
|
693 |
+
</wsdl:message>
|
694 |
+
|
695 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelJpegRequest">
|
696 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelJpeg" name="parameters"/>
|
697 |
+
|
698 |
+
</wsdl:message>
|
699 |
+
|
700 |
+
<wsdl:message name="propsListOfProductsATGRequest">
|
701 |
+
<wsdl:part element="impl:propsListOfProductsATG" name="parameters"/>
|
702 |
+
|
703 |
+
</wsdl:message>
|
704 |
+
|
705 |
+
<wsdl:message name="propsCollectionCancelRequest">
|
706 |
+
<wsdl:part element="impl:propsCollectionCancel" name="parameters"/>
|
707 |
+
|
708 |
+
</wsdl:message>
|
709 |
+
|
710 |
+
<wsdl:message name="propsCollectionCancelResponse">
|
711 |
+
<wsdl:part element="impl:propsCollectionCancelResponse" name="parameters"/>
|
712 |
+
|
713 |
+
</wsdl:message>
|
714 |
+
|
715 |
+
<wsdl:message name="propsOrderDeleteResponse">
|
716 |
+
<wsdl:part element="impl:propsOrderDeleteResponse" name="parameters"/>
|
717 |
+
|
718 |
+
</wsdl:message>
|
719 |
+
|
720 |
+
<wsdl:message name="propsGetCollectionOrdersResponse">
|
721 |
+
<wsdl:part element="impl:propsGetCollectionOrdersResponse" name="parameters"/>
|
722 |
+
|
723 |
+
</wsdl:message>
|
724 |
+
|
725 |
+
<wsdl:message name="propsOrderPrintLabelPdfResponse">
|
726 |
+
<wsdl:part element="impl:propsOrderPrintLabelPdfResponse" name="parameters"/>
|
727 |
+
|
728 |
+
</wsdl:message>
|
729 |
+
|
730 |
+
<wsdl:message name="propsUserLoginResponse">
|
731 |
+
<wsdl:part element="impl:propsUserLoginResponse" name="parameters"/>
|
732 |
+
|
733 |
+
</wsdl:message>
|
734 |
+
|
735 |
+
<wsdl:message name="propsGetPropsOrdersResponse">
|
736 |
+
<wsdl:part element="impl:propsGetPropsOrdersResponse" name="parameters"/>
|
737 |
+
|
738 |
+
</wsdl:message>
|
739 |
+
|
740 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelPdfResponse">
|
741 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelPdfResponse" name="parameters"/>
|
742 |
+
|
743 |
+
</wsdl:message>
|
744 |
+
|
745 |
+
<wsdl:message name="initResponse">
|
746 |
+
<wsdl:part element="impl:initResponse" name="parameters"/>
|
747 |
+
|
748 |
+
</wsdl:message>
|
749 |
+
|
750 |
+
<wsdl:message name="propsOrderSaveRequest">
|
751 |
+
<wsdl:part element="impl:propsOrderSave" name="parameters"/>
|
752 |
+
|
753 |
+
</wsdl:message>
|
754 |
+
|
755 |
+
<wsdl:message name="propsOrdersPrintLabelsPdfRequest">
|
756 |
+
<wsdl:part element="impl:propsOrdersPrintLabelsPdf" name="parameters"/>
|
757 |
+
|
758 |
+
</wsdl:message>
|
759 |
+
|
760 |
+
<wsdl:message name="propsImportOrdersRequest">
|
761 |
+
<wsdl:part element="impl:propsImportOrders" name="parameters"/>
|
762 |
+
|
763 |
+
</wsdl:message>
|
764 |
+
|
765 |
+
<wsdl:message name="destroyRequest">
|
766 |
+
<wsdl:part element="impl:destroy" name="parameters"/>
|
767 |
+
|
768 |
+
</wsdl:message>
|
769 |
+
|
770 |
+
<wsdl:message name="ServiceException">
|
771 |
+
<wsdl:part element="tns4:ServiceException" name="fault"/>
|
772 |
+
|
773 |
+
</wsdl:message>
|
774 |
+
|
775 |
+
<wsdl:message name="propsOrderSaveResponse">
|
776 |
+
<wsdl:part element="impl:propsOrderSaveResponse" name="parameters"/>
|
777 |
+
|
778 |
+
</wsdl:message>
|
779 |
+
|
780 |
+
<wsdl:message name="propsOrdersPrintLabelsPdfResponse">
|
781 |
+
<wsdl:part element="impl:propsOrdersPrintLabelsPdfResponse" name="parameters"/>
|
782 |
+
|
783 |
+
</wsdl:message>
|
784 |
+
|
785 |
+
<wsdl:message name="propsReadShipmentStatusRequest">
|
786 |
+
<wsdl:part element="impl:propsReadShipmentStatus" name="parameters"/>
|
787 |
+
|
788 |
+
</wsdl:message>
|
789 |
+
|
790 |
+
<wsdl:message name="propsProductlnformationRequest">
|
791 |
+
<wsdl:part element="impl:propsProductlnformation" name="parameters"/>
|
792 |
+
|
793 |
+
</wsdl:message>
|
794 |
+
|
795 |
+
<wsdl:portType name="ProPS">
|
796 |
+
<wsdl:operation name="propsGetCollectionOrders">
|
797 |
+
<wsdl:input message="impl:propsGetCollectionOrdersRequest" name="propsGetCollectionOrdersRequest"/>
|
798 |
+
|
799 |
+
<wsdl:output message="impl:propsGetCollectionOrdersResponse" name="propsGetCollectionOrdersResponse"/>
|
800 |
+
|
801 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
802 |
+
|
803 |
+
</wsdl:operation>
|
804 |
+
|
805 |
+
<wsdl:operation name="propsOrderDelete">
|
806 |
+
<wsdl:input message="impl:propsOrderDeleteRequest" name="propsOrderDeleteRequest"/>
|
807 |
+
|
808 |
+
<wsdl:output message="impl:propsOrderDeleteResponse" name="propsOrderDeleteResponse"/>
|
809 |
+
|
810 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
811 |
+
|
812 |
+
</wsdl:operation>
|
813 |
+
|
814 |
+
<wsdl:operation name="propsCollectionRequest">
|
815 |
+
<wsdl:input message="impl:propsCollectionRequestRequest" name="propsCollectionRequestRequest"/>
|
816 |
+
|
817 |
+
<wsdl:output message="impl:propsCollectionRequestResponse" name="propsCollectionRequestResponse"/>
|
818 |
+
|
819 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
820 |
+
|
821 |
+
</wsdl:operation>
|
822 |
+
|
823 |
+
<wsdl:operation name="propsOrderPrintLabelPdf">
|
824 |
+
<wsdl:input message="impl:propsOrderPrintLabelPdfRequest" name="propsOrderPrintLabelPdfRequest"/>
|
825 |
+
|
826 |
+
<wsdl:output message="impl:propsOrderPrintLabelPdfResponse" name="propsOrderPrintLabelPdfResponse"/>
|
827 |
+
|
828 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
829 |
+
|
830 |
+
</wsdl:operation>
|
831 |
+
|
832 |
+
<wsdl:operation name="propsCollectionCancel">
|
833 |
+
<wsdl:input message="impl:propsCollectionCancelRequest" name="propsCollectionCancelRequest"/>
|
834 |
+
|
835 |
+
<wsdl:output message="impl:propsCollectionCancelResponse" name="propsCollectionCancelResponse"/>
|
836 |
+
|
837 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
838 |
+
|
839 |
+
</wsdl:operation>
|
840 |
+
|
841 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
|
842 |
+
<wsdl:input message="impl:propsOrderSaveAndPrintLabelPdfRequest" name="propsOrderSaveAndPrintLabelPdfRequest"/>
|
843 |
+
|
844 |
+
<wsdl:output message="impl:propsOrderSaveAndPrintLabelPdfResponse" name="propsOrderSaveAndPrintLabelPdfResponse"/>
|
845 |
+
|
846 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
847 |
+
|
848 |
+
</wsdl:operation>
|
849 |
+
|
850 |
+
<wsdl:operation name="init">
|
851 |
+
<wsdl:input message="impl:initRequest" name="initRequest"/>
|
852 |
+
|
853 |
+
<wsdl:output message="impl:initResponse" name="initResponse"/>
|
854 |
+
|
855 |
+
</wsdl:operation>
|
856 |
+
|
857 |
+
<wsdl:operation name="propsGetPropsOrder">
|
858 |
+
<wsdl:input message="impl:propsGetPropsOrderRequest" name="propsGetPropsOrderRequest"/>
|
859 |
+
|
860 |
+
<wsdl:output message="impl:propsGetPropsOrderResponse" name="propsGetPropsOrderResponse"/>
|
861 |
+
|
862 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
863 |
+
|
864 |
+
</wsdl:operation>
|
865 |
+
|
866 |
+
<wsdl:operation name="propsOrderSave">
|
867 |
+
<wsdl:input message="impl:propsOrderSaveRequest" name="propsOrderSaveRequest"/>
|
868 |
+
|
869 |
+
<wsdl:output message="impl:propsOrderSaveResponse" name="propsOrderSaveResponse"/>
|
870 |
+
|
871 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
872 |
+
|
873 |
+
</wsdl:operation>
|
874 |
+
|
875 |
+
<wsdl:operation name="propsOrdersPrintLabelsPdf">
|
876 |
+
<wsdl:input message="impl:propsOrdersPrintLabelsPdfRequest" name="propsOrdersPrintLabelsPdfRequest"/>
|
877 |
+
|
878 |
+
<wsdl:output message="impl:propsOrdersPrintLabelsPdfResponse" name="propsOrdersPrintLabelsPdfResponse"/>
|
879 |
+
|
880 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
881 |
+
|
882 |
+
</wsdl:operation>
|
883 |
+
|
884 |
+
<wsdl:operation name="propsUserLogin">
|
885 |
+
<wsdl:input message="impl:propsUserLoginRequest" name="propsUserLoginRequest"/>
|
886 |
+
|
887 |
+
<wsdl:output message="impl:propsUserLoginResponse" name="propsUserLoginResponse"/>
|
888 |
+
|
889 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
890 |
+
|
891 |
+
</wsdl:operation>
|
892 |
+
|
893 |
+
<wsdl:operation name="propsOrderPrintLabelJpeg">
|
894 |
+
<wsdl:input message="impl:propsOrderPrintLabelJpegRequest" name="propsOrderPrintLabelJpegRequest"/>
|
895 |
+
|
896 |
+
<wsdl:output message="impl:propsOrderPrintLabelJpegResponse" name="propsOrderPrintLabelJpegResponse"/>
|
897 |
+
|
898 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
899 |
+
|
900 |
+
</wsdl:operation>
|
901 |
+
|
902 |
+
<wsdl:operation name="propsListOfProductsATG">
|
903 |
+
<wsdl:input message="impl:propsListOfProductsATGRequest" name="propsListOfProductsATGRequest"/>
|
904 |
+
|
905 |
+
<wsdl:output message="impl:propsListOfProductsATGResponse" name="propsListOfProductsATGResponse"/>
|
906 |
+
|
907 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
908 |
+
|
909 |
+
</wsdl:operation>
|
910 |
+
|
911 |
+
<wsdl:operation name="propsReadShipmentStatus">
|
912 |
+
<wsdl:input message="impl:propsReadShipmentStatusRequest" name="propsReadShipmentStatusRequest"/>
|
913 |
+
|
914 |
+
<wsdl:output message="impl:propsReadShipmentStatusResponse" name="propsReadShipmentStatusResponse"/>
|
915 |
+
|
916 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
917 |
+
|
918 |
+
</wsdl:operation>
|
919 |
+
|
920 |
+
<wsdl:operation name="propsGetPropsOrders">
|
921 |
+
<wsdl:input message="impl:propsGetPropsOrdersRequest" name="propsGetPropsOrdersRequest"/>
|
922 |
+
|
923 |
+
<wsdl:output message="impl:propsGetPropsOrdersResponse" name="propsGetPropsOrdersResponse"/>
|
924 |
+
|
925 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
926 |
+
|
927 |
+
</wsdl:operation>
|
928 |
+
|
929 |
+
<wsdl:operation name="propsProductlnformation">
|
930 |
+
<wsdl:input message="impl:propsProductlnformationRequest" name="propsProductlnformationRequest"/>
|
931 |
+
|
932 |
+
<wsdl:output message="impl:propsProductlnformationResponse" name="propsProductlnformationResponse"/>
|
933 |
+
|
934 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
935 |
+
|
936 |
+
</wsdl:operation>
|
937 |
+
|
938 |
+
<wsdl:operation name="propsCheckAvailability">
|
939 |
+
<wsdl:input message="impl:propsCheckAvailabilityRequest" name="propsCheckAvailabilityRequest"/>
|
940 |
+
|
941 |
+
<wsdl:output message="impl:propsCheckAvailabilityResponse" name="propsCheckAvailabilityResponse"/>
|
942 |
+
|
943 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
944 |
+
|
945 |
+
</wsdl:operation>
|
946 |
+
|
947 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
|
948 |
+
<wsdl:input message="impl:propsOrderSaveAndPrintLabelJpegRequest" name="propsOrderSaveAndPrintLabelJpegRequest"/>
|
949 |
+
|
950 |
+
<wsdl:output message="impl:propsOrderSaveAndPrintLabelJpegResponse" name="propsOrderSaveAndPrintLabelJpegResponse"/>
|
951 |
+
|
952 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
953 |
+
|
954 |
+
</wsdl:operation>
|
955 |
+
|
956 |
+
<wsdl:operation name="destroy">
|
957 |
+
<wsdl:input message="impl:destroyRequest" name="destroyRequest"/>
|
958 |
+
|
959 |
+
<wsdl:output message="impl:destroyResponse" name="destroyResponse"/>
|
960 |
+
|
961 |
+
</wsdl:operation>
|
962 |
+
|
963 |
+
<wsdl:operation name="propsImportOrders">
|
964 |
+
<wsdl:input message="impl:propsImportOrdersRequest" name="propsImportOrdersRequest"/>
|
965 |
+
|
966 |
+
<wsdl:output message="impl:propsImportOrdersResponse" name="propsImportOrdersResponse"/>
|
967 |
+
|
968 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
969 |
+
|
970 |
+
</wsdl:operation>
|
971 |
+
|
972 |
+
</wsdl:portType>
|
973 |
+
|
974 |
+
<wsdl:binding name="ProPSSoapBinding" type="impl:ProPS">
|
975 |
+
<wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
|
976 |
+
|
977 |
+
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
978 |
+
|
979 |
+
<wsdl:operation name="propsGetCollectionOrders">
|
980 |
+
<wsdlsoap:operation soapAction="propsGetCollectionOrders"/>
|
981 |
+
|
982 |
+
<wsdl:input name="propsGetCollectionOrdersRequest">
|
983 |
+
<wsdlsoap:body use="literal"/>
|
984 |
+
|
985 |
+
</wsdl:input>
|
986 |
+
|
987 |
+
<wsdl:output name="propsGetCollectionOrdersResponse">
|
988 |
+
<wsdlsoap:body use="literal"/>
|
989 |
+
|
990 |
+
</wsdl:output>
|
991 |
+
|
992 |
+
<wsdl:fault name="ServiceException">
|
993 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
994 |
+
|
995 |
+
</wsdl:fault>
|
996 |
+
|
997 |
+
</wsdl:operation>
|
998 |
+
|
999 |
+
<wsdl:operation name="propsOrderDelete">
|
1000 |
+
<wsdlsoap:operation soapAction="propsOrderDelete"/>
|
1001 |
+
|
1002 |
+
<wsdl:input name="propsOrderDeleteRequest">
|
1003 |
+
<wsdlsoap:body use="literal"/>
|
1004 |
+
|
1005 |
+
</wsdl:input>
|
1006 |
+
|
1007 |
+
<wsdl:output name="propsOrderDeleteResponse">
|
1008 |
+
<wsdlsoap:body use="literal"/>
|
1009 |
+
|
1010 |
+
</wsdl:output>
|
1011 |
+
|
1012 |
+
<wsdl:fault name="ServiceException">
|
1013 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1014 |
+
|
1015 |
+
</wsdl:fault>
|
1016 |
+
|
1017 |
+
</wsdl:operation>
|
1018 |
+
|
1019 |
+
<wsdl:operation name="propsCollectionRequest">
|
1020 |
+
<wsdlsoap:operation soapAction="propsCollectionRequest"/>
|
1021 |
+
|
1022 |
+
<wsdl:input name="propsCollectionRequestRequest">
|
1023 |
+
<wsdlsoap:body use="literal"/>
|
1024 |
+
|
1025 |
+
</wsdl:input>
|
1026 |
+
|
1027 |
+
<wsdl:output name="propsCollectionRequestResponse">
|
1028 |
+
<wsdlsoap:body use="literal"/>
|
1029 |
+
|
1030 |
+
</wsdl:output>
|
1031 |
+
|
1032 |
+
<wsdl:fault name="ServiceException">
|
1033 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1034 |
+
|
1035 |
+
</wsdl:fault>
|
1036 |
+
|
1037 |
+
</wsdl:operation>
|
1038 |
+
|
1039 |
+
<wsdl:operation name="propsOrderPrintLabelPdf">
|
1040 |
+
<wsdlsoap:operation soapAction="propsOrderPrintLabelPdf"/>
|
1041 |
+
|
1042 |
+
<wsdl:input name="propsOrderPrintLabelPdfRequest">
|
1043 |
+
<wsdlsoap:body use="literal"/>
|
1044 |
+
|
1045 |
+
</wsdl:input>
|
1046 |
+
|
1047 |
+
<wsdl:output name="propsOrderPrintLabelPdfResponse">
|
1048 |
+
<wsdlsoap:body use="literal"/>
|
1049 |
+
|
1050 |
+
</wsdl:output>
|
1051 |
+
|
1052 |
+
<wsdl:fault name="ServiceException">
|
1053 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1054 |
+
|
1055 |
+
</wsdl:fault>
|
1056 |
+
|
1057 |
+
</wsdl:operation>
|
1058 |
+
|
1059 |
+
<wsdl:operation name="propsCollectionCancel">
|
1060 |
+
<wsdlsoap:operation soapAction="propsCollectionCancel"/>
|
1061 |
+
|
1062 |
+
<wsdl:input name="propsCollectionCancelRequest">
|
1063 |
+
<wsdlsoap:body use="literal"/>
|
1064 |
+
|
1065 |
+
</wsdl:input>
|
1066 |
+
|
1067 |
+
<wsdl:output name="propsCollectionCancelResponse">
|
1068 |
+
<wsdlsoap:body use="literal"/>
|
1069 |
+
|
1070 |
+
</wsdl:output>
|
1071 |
+
|
1072 |
+
<wsdl:fault name="ServiceException">
|
1073 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1074 |
+
|
1075 |
+
</wsdl:fault>
|
1076 |
+
|
1077 |
+
</wsdl:operation>
|
1078 |
+
|
1079 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
|
1080 |
+
<wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelPdf"/>
|
1081 |
+
|
1082 |
+
<wsdl:input name="propsOrderSaveAndPrintLabelPdfRequest">
|
1083 |
+
<wsdlsoap:body use="literal"/>
|
1084 |
+
|
1085 |
+
</wsdl:input>
|
1086 |
+
|
1087 |
+
<wsdl:output name="propsOrderSaveAndPrintLabelPdfResponse">
|
1088 |
+
<wsdlsoap:body use="literal"/>
|
1089 |
+
|
1090 |
+
</wsdl:output>
|
1091 |
+
|
1092 |
+
<wsdl:fault name="ServiceException">
|
1093 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1094 |
+
|
1095 |
+
</wsdl:fault>
|
1096 |
+
|
1097 |
+
</wsdl:operation>
|
1098 |
+
|
1099 |
+
<wsdl:operation name="init">
|
1100 |
+
<wsdlsoap:operation soapAction="init"/>
|
1101 |
+
|
1102 |
+
<wsdl:input name="initRequest">
|
1103 |
+
<wsdlsoap:body use="literal"/>
|
1104 |
+
|
1105 |
+
</wsdl:input>
|
1106 |
+
|
1107 |
+
<wsdl:output name="initResponse">
|
1108 |
+
<wsdlsoap:body use="literal"/>
|
1109 |
+
|
1110 |
+
</wsdl:output>
|
1111 |
+
|
1112 |
+
</wsdl:operation>
|
1113 |
+
|
1114 |
+
<wsdl:operation name="propsGetPropsOrder">
|
1115 |
+
<wsdlsoap:operation soapAction="propsGetPropsOrder"/>
|
1116 |
+
|
1117 |
+
<wsdl:input name="propsGetPropsOrderRequest">
|
1118 |
+
<wsdlsoap:body use="literal"/>
|
1119 |
+
|
1120 |
+
</wsdl:input>
|
1121 |
+
|
1122 |
+
<wsdl:output name="propsGetPropsOrderResponse">
|
1123 |
+
<wsdlsoap:body use="literal"/>
|
1124 |
+
|
1125 |
+
</wsdl:output>
|
1126 |
+
|
1127 |
+
<wsdl:fault name="ServiceException">
|
1128 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1129 |
+
|
1130 |
+
</wsdl:fault>
|
1131 |
+
|
1132 |
+
</wsdl:operation>
|
1133 |
+
|
1134 |
+
<wsdl:operation name="propsOrderSave">
|
1135 |
+
<wsdlsoap:operation soapAction="propsOrderSave"/>
|
1136 |
+
|
1137 |
+
<wsdl:input name="propsOrderSaveRequest">
|
1138 |
+
<wsdlsoap:body use="literal"/>
|
1139 |
+
|
1140 |
+
</wsdl:input>
|
1141 |
+
|
1142 |
+
<wsdl:output name="propsOrderSaveResponse">
|
1143 |
+
<wsdlsoap:body use="literal"/>
|
1144 |
+
|
1145 |
+
</wsdl:output>
|
1146 |
+
|
1147 |
+
<wsdl:fault name="ServiceException">
|
1148 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1149 |
+
|
1150 |
+
</wsdl:fault>
|
1151 |
+
|
1152 |
+
</wsdl:operation>
|
1153 |
+
|
1154 |
+
<wsdl:operation name="propsOrdersPrintLabelsPdf">
|
1155 |
+
<wsdlsoap:operation soapAction="propsOrdersPrintLabelsPdf"/>
|
1156 |
+
|
1157 |
+
<wsdl:input name="propsOrdersPrintLabelsPdfRequest">
|
1158 |
+
<wsdlsoap:body use="literal"/>
|
1159 |
+
|
1160 |
+
</wsdl:input>
|
1161 |
+
|
1162 |
+
<wsdl:output name="propsOrdersPrintLabelsPdfResponse">
|
1163 |
+
<wsdlsoap:body use="literal"/>
|
1164 |
+
|
1165 |
+
</wsdl:output>
|
1166 |
+
|
1167 |
+
<wsdl:fault name="ServiceException">
|
1168 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1169 |
+
|
1170 |
+
</wsdl:fault>
|
1171 |
+
|
1172 |
+
</wsdl:operation>
|
1173 |
+
|
1174 |
+
<wsdl:operation name="propsUserLogin">
|
1175 |
+
<wsdlsoap:operation soapAction="propsUserLogin"/>
|
1176 |
+
|
1177 |
+
<wsdl:input name="propsUserLoginRequest">
|
1178 |
+
<wsdlsoap:body use="literal"/>
|
1179 |
+
|
1180 |
+
</wsdl:input>
|
1181 |
+
|
1182 |
+
<wsdl:output name="propsUserLoginResponse">
|
1183 |
+
<wsdlsoap:body use="literal"/>
|
1184 |
+
|
1185 |
+
</wsdl:output>
|
1186 |
+
|
1187 |
+
<wsdl:fault name="ServiceException">
|
1188 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1189 |
+
|
1190 |
+
</wsdl:fault>
|
1191 |
+
|
1192 |
+
</wsdl:operation>
|
1193 |
+
|
1194 |
+
<wsdl:operation name="propsOrderPrintLabelJpeg">
|
1195 |
+
<wsdlsoap:operation soapAction="propsOrderPrintLabelJpeg"/>
|
1196 |
+
|
1197 |
+
<wsdl:input name="propsOrderPrintLabelJpegRequest">
|
1198 |
+
<wsdlsoap:body use="literal"/>
|
1199 |
+
|
1200 |
+
</wsdl:input>
|
1201 |
+
|
1202 |
+
<wsdl:output name="propsOrderPrintLabelJpegResponse">
|
1203 |
+
<wsdlsoap:body use="literal"/>
|
1204 |
+
|
1205 |
+
</wsdl:output>
|
1206 |
+
|
1207 |
+
<wsdl:fault name="ServiceException">
|
1208 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1209 |
+
|
1210 |
+
</wsdl:fault>
|
1211 |
+
|
1212 |
+
</wsdl:operation>
|
1213 |
+
|
1214 |
+
<wsdl:operation name="propsListOfProductsATG">
|
1215 |
+
<wsdlsoap:operation soapAction="propsListOfProductsATG"/>
|
1216 |
+
|
1217 |
+
<wsdl:input name="propsListOfProductsATGRequest">
|
1218 |
+
<wsdlsoap:body use="literal"/>
|
1219 |
+
|
1220 |
+
</wsdl:input>
|
1221 |
+
|
1222 |
+
<wsdl:output name="propsListOfProductsATGResponse">
|
1223 |
+
<wsdlsoap:body use="literal"/>
|
1224 |
+
|
1225 |
+
</wsdl:output>
|
1226 |
+
|
1227 |
+
<wsdl:fault name="ServiceException">
|
1228 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1229 |
+
|
1230 |
+
</wsdl:fault>
|
1231 |
+
|
1232 |
+
</wsdl:operation>
|
1233 |
+
|
1234 |
+
<wsdl:operation name="propsReadShipmentStatus">
|
1235 |
+
<wsdlsoap:operation soapAction="propsReadShipmentStatus"/>
|
1236 |
+
|
1237 |
+
<wsdl:input name="propsReadShipmentStatusRequest">
|
1238 |
+
<wsdlsoap:body use="literal"/>
|
1239 |
+
|
1240 |
+
</wsdl:input>
|
1241 |
+
|
1242 |
+
<wsdl:output name="propsReadShipmentStatusResponse">
|
1243 |
+
<wsdlsoap:body use="literal"/>
|
1244 |
+
|
1245 |
+
</wsdl:output>
|
1246 |
+
|
1247 |
+
<wsdl:fault name="ServiceException">
|
1248 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1249 |
+
|
1250 |
+
</wsdl:fault>
|
1251 |
+
|
1252 |
+
</wsdl:operation>
|
1253 |
+
|
1254 |
+
<wsdl:operation name="propsGetPropsOrders">
|
1255 |
+
<wsdlsoap:operation soapAction="propsGetPropsOrders"/>
|
1256 |
+
|
1257 |
+
<wsdl:input name="propsGetPropsOrdersRequest">
|
1258 |
+
<wsdlsoap:body use="literal"/>
|
1259 |
+
|
1260 |
+
</wsdl:input>
|
1261 |
+
|
1262 |
+
<wsdl:output name="propsGetPropsOrdersResponse">
|
1263 |
+
<wsdlsoap:body use="literal"/>
|
1264 |
+
|
1265 |
+
</wsdl:output>
|
1266 |
+
|
1267 |
+
<wsdl:fault name="ServiceException">
|
1268 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1269 |
+
|
1270 |
+
</wsdl:fault>
|
1271 |
+
|
1272 |
+
</wsdl:operation>
|
1273 |
+
|
1274 |
+
<wsdl:operation name="propsProductlnformation">
|
1275 |
+
<wsdlsoap:operation soapAction="propsProductlnformation"/>
|
1276 |
+
|
1277 |
+
<wsdl:input name="propsProductlnformationRequest">
|
1278 |
+
<wsdlsoap:body use="literal"/>
|
1279 |
+
|
1280 |
+
</wsdl:input>
|
1281 |
+
|
1282 |
+
<wsdl:output name="propsProductlnformationResponse">
|
1283 |
+
<wsdlsoap:body use="literal"/>
|
1284 |
+
|
1285 |
+
</wsdl:output>
|
1286 |
+
|
1287 |
+
<wsdl:fault name="ServiceException">
|
1288 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1289 |
+
|
1290 |
+
</wsdl:fault>
|
1291 |
+
|
1292 |
+
</wsdl:operation>
|
1293 |
+
|
1294 |
+
<wsdl:operation name="propsCheckAvailability">
|
1295 |
+
<wsdlsoap:operation soapAction="propsCheckAvailability"/>
|
1296 |
+
|
1297 |
+
<wsdl:input name="propsCheckAvailabilityRequest">
|
1298 |
+
<wsdlsoap:body use="literal"/>
|
1299 |
+
|
1300 |
+
</wsdl:input>
|
1301 |
+
|
1302 |
+
<wsdl:output name="propsCheckAvailabilityResponse">
|
1303 |
+
<wsdlsoap:body use="literal"/>
|
1304 |
+
|
1305 |
+
</wsdl:output>
|
1306 |
+
|
1307 |
+
<wsdl:fault name="ServiceException">
|
1308 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1309 |
+
|
1310 |
+
</wsdl:fault>
|
1311 |
+
|
1312 |
+
</wsdl:operation>
|
1313 |
+
|
1314 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
|
1315 |
+
<wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelJpeg"/>
|
1316 |
+
|
1317 |
+
<wsdl:input name="propsOrderSaveAndPrintLabelJpegRequest">
|
1318 |
+
<wsdlsoap:body use="literal"/>
|
1319 |
+
|
1320 |
+
</wsdl:input>
|
1321 |
+
|
1322 |
+
<wsdl:output name="propsOrderSaveAndPrintLabelJpegResponse">
|
1323 |
+
<wsdlsoap:body use="literal"/>
|
1324 |
+
|
1325 |
+
</wsdl:output>
|
1326 |
+
|
1327 |
+
<wsdl:fault name="ServiceException">
|
1328 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1329 |
+
|
1330 |
+
</wsdl:fault>
|
1331 |
+
|
1332 |
+
</wsdl:operation>
|
1333 |
+
|
1334 |
+
<wsdl:operation name="destroy">
|
1335 |
+
<wsdlsoap:operation soapAction="destroy"/>
|
1336 |
+
|
1337 |
+
<wsdl:input name="destroyRequest">
|
1338 |
+
<wsdlsoap:body use="literal"/>
|
1339 |
+
|
1340 |
+
</wsdl:input>
|
1341 |
+
|
1342 |
+
<wsdl:output name="destroyResponse">
|
1343 |
+
<wsdlsoap:body use="literal"/>
|
1344 |
+
|
1345 |
+
</wsdl:output>
|
1346 |
+
|
1347 |
+
</wsdl:operation>
|
1348 |
+
|
1349 |
+
<wsdl:operation name="propsImportOrders">
|
1350 |
+
<wsdlsoap:operation soapAction="propsImportOrders"/>
|
1351 |
+
|
1352 |
+
<wsdl:input name="propsImportOrdersRequest">
|
1353 |
+
<wsdlsoap:body use="literal"/>
|
1354 |
+
|
1355 |
+
</wsdl:input>
|
1356 |
+
|
1357 |
+
<wsdl:output name="propsImportOrdersResponse">
|
1358 |
+
<wsdlsoap:body use="literal"/>
|
1359 |
+
|
1360 |
+
</wsdl:output>
|
1361 |
+
|
1362 |
+
<wsdl:fault name="ServiceException">
|
1363 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1364 |
+
|
1365 |
+
</wsdl:fault>
|
1366 |
+
|
1367 |
+
</wsdl:operation>
|
1368 |
+
|
1369 |
+
</wsdl:binding>
|
1370 |
+
|
1371 |
+
<wsdl:service name="ProPSService">
|
1372 |
+
<wsdl:port binding="impl:ProPSSoapBinding" name="ProPS">
|
1373 |
+
<wsdlsoap:address location="https://hermesapi2.hlg.de/Hermes_API_Web/1_4/services/ProPS"/>
|
1374 |
+
|
1375 |
+
</wsdl:port>
|
1376 |
+
|
1377 |
+
</wsdl:service>
|
1378 |
+
|
1379 |
+
</wsdl:definitions>
|
app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl
ADDED
@@ -0,0 +1,1379 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<wsdl:definitions targetNamespace="http://hermes_api.service.hlg.de" xmlns:impl="http://hermes_api.service.hlg.de" xmlns:intf="http://hermes_api.service.hlg.de" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
3 |
+
<wsdl:types>
|
4 |
+
<schema targetNamespace="http://hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
5 |
+
<import namespace="http://validate.hermes_api.service.hlg.de"/>
|
6 |
+
<import namespace="http://props.hermes_api.service.hlg.de"/>
|
7 |
+
<element name="propsGetCollectionOrdersResponse">
|
8 |
+
<complexType>
|
9 |
+
<sequence>
|
10 |
+
<element name="propsGetCollectionOrdersReturn" nillable="true" type="tns2:ListOfPropsCollectionOrders"/>
|
11 |
+
</sequence>
|
12 |
+
</complexType>
|
13 |
+
</element>
|
14 |
+
<element name="propsOrderDelete">
|
15 |
+
<complexType>
|
16 |
+
<sequence>
|
17 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
18 |
+
</sequence>
|
19 |
+
</complexType>
|
20 |
+
</element>
|
21 |
+
<element name="propsOrderDeleteResponse">
|
22 |
+
<complexType>
|
23 |
+
<sequence>
|
24 |
+
<element name="propsOrderDeleteReturn" type="xsd:boolean"/>
|
25 |
+
</sequence>
|
26 |
+
</complexType>
|
27 |
+
</element>
|
28 |
+
<element name="propsCollectionRequest">
|
29 |
+
<complexType>
|
30 |
+
<sequence>
|
31 |
+
<element name="collectionOrder" nillable="true" type="tns2:PropsCollectionOrder"/>
|
32 |
+
</sequence>
|
33 |
+
</complexType>
|
34 |
+
</element>
|
35 |
+
<element name="propsCollectionRequestResponse">
|
36 |
+
<complexType>
|
37 |
+
<sequence>
|
38 |
+
<element name="propsCollectionRequestReturn" nillable="true" type="xsd:string"/>
|
39 |
+
</sequence>
|
40 |
+
</complexType>
|
41 |
+
</element>
|
42 |
+
<element name="propsOrderPrintLabelPdf">
|
43 |
+
<complexType>
|
44 |
+
<sequence>
|
45 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
46 |
+
<element name="printPosition" nillable="true" type="xsd:short"/>
|
47 |
+
</sequence>
|
48 |
+
</complexType>
|
49 |
+
</element>
|
50 |
+
<element name="propsOrderPrintLabelPdfResponse">
|
51 |
+
<complexType>
|
52 |
+
<sequence>
|
53 |
+
<element name="propsOrderPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
|
54 |
+
</sequence>
|
55 |
+
</complexType>
|
56 |
+
</element>
|
57 |
+
<element name="propsCollectionCancel">
|
58 |
+
<complexType>
|
59 |
+
<sequence>
|
60 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
61 |
+
</sequence>
|
62 |
+
</complexType>
|
63 |
+
</element>
|
64 |
+
<element name="propsCollectionCancelResponse">
|
65 |
+
<complexType>
|
66 |
+
<sequence>
|
67 |
+
<element name="propsCollectionCancelReturn" type="xsd:boolean"/>
|
68 |
+
</sequence>
|
69 |
+
</complexType>
|
70 |
+
</element>
|
71 |
+
<element name="propsOrderSaveAndPrintLabelPdf">
|
72 |
+
<complexType>
|
73 |
+
<sequence>
|
74 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
75 |
+
<element name="printPosition" nillable="true" type="xsd:short"/>
|
76 |
+
</sequence>
|
77 |
+
</complexType>
|
78 |
+
</element>
|
79 |
+
<element name="propsOrderSaveAndPrintLabelPdfResponse">
|
80 |
+
<complexType>
|
81 |
+
<sequence>
|
82 |
+
<element name="propsOrderSaveAndPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
|
83 |
+
</sequence>
|
84 |
+
</complexType>
|
85 |
+
</element>
|
86 |
+
<element name="init">
|
87 |
+
<complexType>
|
88 |
+
<sequence>
|
89 |
+
<element name="arg_0_0" nillable="true" type="xsd:anyType"/>
|
90 |
+
</sequence>
|
91 |
+
</complexType>
|
92 |
+
</element>
|
93 |
+
<element name="initResponse">
|
94 |
+
<complexType>
|
95 |
+
<sequence/>
|
96 |
+
</complexType>
|
97 |
+
</element>
|
98 |
+
<element name="propsGetPropsOrder">
|
99 |
+
<complexType>
|
100 |
+
<sequence>
|
101 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
102 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
103 |
+
</sequence>
|
104 |
+
</complexType>
|
105 |
+
</element>
|
106 |
+
<element name="propsGetPropsOrderResponse">
|
107 |
+
<complexType>
|
108 |
+
<sequence>
|
109 |
+
<element name="propsGetPropsOrderReturn" nillable="true" type="tns2:PropsOrderLong"/>
|
110 |
+
</sequence>
|
111 |
+
</complexType>
|
112 |
+
</element>
|
113 |
+
<element name="propsOrderSave">
|
114 |
+
<complexType>
|
115 |
+
<sequence>
|
116 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
117 |
+
</sequence>
|
118 |
+
</complexType>
|
119 |
+
</element>
|
120 |
+
<element name="propsOrderSaveResponse">
|
121 |
+
<complexType>
|
122 |
+
<sequence>
|
123 |
+
<element name="propsOrderSaveReturn" nillable="true" type="xsd:string"/>
|
124 |
+
</sequence>
|
125 |
+
</complexType>
|
126 |
+
</element>
|
127 |
+
<element name="propsOrdersPrintLabelsPdf">
|
128 |
+
<complexType>
|
129 |
+
<sequence>
|
130 |
+
<element name="requestedOrderNumbers" nillable="true" type="tns2:RequestedOrderNumbers"/>
|
131 |
+
</sequence>
|
132 |
+
</complexType>
|
133 |
+
</element>
|
134 |
+
<element name="propsOrdersPrintLabelsPdfResponse">
|
135 |
+
<complexType>
|
136 |
+
<sequence>
|
137 |
+
<element name="propsOrdersPrintLabelsPdfReturn" nillable="true" type="tns2:MultipleShippingLabelsPdf"/>
|
138 |
+
</sequence>
|
139 |
+
</complexType>
|
140 |
+
</element>
|
141 |
+
<element name="propsUserLogin">
|
142 |
+
<complexType>
|
143 |
+
<sequence>
|
144 |
+
<element name="login" nillable="true" type="tns5:HermesLogin"/>
|
145 |
+
</sequence>
|
146 |
+
</complexType>
|
147 |
+
</element>
|
148 |
+
<element name="propsUserLoginResponse">
|
149 |
+
<complexType>
|
150 |
+
<sequence>
|
151 |
+
<element name="propsUserLoginReturn" nillable="true" type="xsd:string"/>
|
152 |
+
</sequence>
|
153 |
+
</complexType>
|
154 |
+
</element>
|
155 |
+
<element name="propsOrderPrintLabelJpeg">
|
156 |
+
<complexType>
|
157 |
+
<sequence>
|
158 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
159 |
+
</sequence>
|
160 |
+
</complexType>
|
161 |
+
</element>
|
162 |
+
<element name="propsOrderPrintLabelJpegResponse">
|
163 |
+
<complexType>
|
164 |
+
<sequence>
|
165 |
+
<element name="propsOrderPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
|
166 |
+
</sequence>
|
167 |
+
</complexType>
|
168 |
+
</element>
|
169 |
+
<element name="propsListOfProductsATG">
|
170 |
+
<complexType>
|
171 |
+
<sequence/>
|
172 |
+
</complexType>
|
173 |
+
</element>
|
174 |
+
<element name="propsListOfProductsATGResponse">
|
175 |
+
<complexType>
|
176 |
+
<sequence>
|
177 |
+
<element name="propsListOfProductsATGReturn" nillable="true" type="tns2:ListOfProducts"/>
|
178 |
+
</sequence>
|
179 |
+
</complexType>
|
180 |
+
</element>
|
181 |
+
<element name="propsReadShipmentStatus">
|
182 |
+
<complexType>
|
183 |
+
<sequence>
|
184 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
185 |
+
</sequence>
|
186 |
+
</complexType>
|
187 |
+
</element>
|
188 |
+
<element name="propsReadShipmentStatusResponse">
|
189 |
+
<complexType>
|
190 |
+
<sequence>
|
191 |
+
<element name="propsReadShipmentStatusReturn" nillable="true" type="tns2:ShippingStatus"/>
|
192 |
+
</sequence>
|
193 |
+
</complexType>
|
194 |
+
</element>
|
195 |
+
<element name="propsGetPropsOrders">
|
196 |
+
<complexType>
|
197 |
+
<sequence>
|
198 |
+
<element name="searchCriteria" nillable="true" type="tns2:PropsOrderSearchCriteria"/>
|
199 |
+
</sequence>
|
200 |
+
</complexType>
|
201 |
+
</element>
|
202 |
+
<element name="propsGetPropsOrdersResponse">
|
203 |
+
<complexType>
|
204 |
+
<sequence>
|
205 |
+
<element name="propsGetPropsOrdersReturn" nillable="true" type="tns2:ListOfPropsOrders"/>
|
206 |
+
</sequence>
|
207 |
+
</complexType>
|
208 |
+
</element>
|
209 |
+
<element name="propsProductlnformation">
|
210 |
+
<complexType>
|
211 |
+
<sequence/>
|
212 |
+
</complexType>
|
213 |
+
</element>
|
214 |
+
<element name="propsProductlnformationResponse">
|
215 |
+
<complexType>
|
216 |
+
<sequence>
|
217 |
+
<element name="propsProductlnformationReturn" nillable="true" type="tns2:ListOfProductInfos"/>
|
218 |
+
</sequence>
|
219 |
+
</complexType>
|
220 |
+
</element>
|
221 |
+
<element name="propsCheckAvailability">
|
222 |
+
<complexType>
|
223 |
+
<sequence/>
|
224 |
+
</complexType>
|
225 |
+
</element>
|
226 |
+
<element name="propsCheckAvailabilityResponse">
|
227 |
+
<complexType>
|
228 |
+
<sequence>
|
229 |
+
<element name="propsCheckAvailabilityReturn" nillable="true" type="xsd:string"/>
|
230 |
+
</sequence>
|
231 |
+
</complexType>
|
232 |
+
</element>
|
233 |
+
<element name="propsOrderSaveAndPrintLabelJpeg">
|
234 |
+
<complexType>
|
235 |
+
<sequence>
|
236 |
+
<element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
|
237 |
+
</sequence>
|
238 |
+
</complexType>
|
239 |
+
</element>
|
240 |
+
<element name="propsOrderSaveAndPrintLabelJpegResponse">
|
241 |
+
<complexType>
|
242 |
+
<sequence>
|
243 |
+
<element name="propsOrderSaveAndPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
|
244 |
+
</sequence>
|
245 |
+
</complexType>
|
246 |
+
</element>
|
247 |
+
<element name="destroy">
|
248 |
+
<complexType>
|
249 |
+
<sequence/>
|
250 |
+
</complexType>
|
251 |
+
</element>
|
252 |
+
<element name="destroyResponse">
|
253 |
+
<complexType>
|
254 |
+
<sequence/>
|
255 |
+
</complexType>
|
256 |
+
</element>
|
257 |
+
<element name="propsImportOrders">
|
258 |
+
<complexType>
|
259 |
+
<sequence>
|
260 |
+
<element name="requestedOrders" nillable="true" type="tns2:RequestedOrders"/>
|
261 |
+
</sequence>
|
262 |
+
</complexType>
|
263 |
+
</element>
|
264 |
+
<element name="propsImportOrdersResponse">
|
265 |
+
<complexType>
|
266 |
+
<sequence>
|
267 |
+
<element name="propsImportOrdersReturn" nillable="true" type="tns2:ImportResult"/>
|
268 |
+
</sequence>
|
269 |
+
</complexType>
|
270 |
+
</element>
|
271 |
+
<element name="propsGetCollectionOrders">
|
272 |
+
<complexType>
|
273 |
+
<sequence>
|
274 |
+
<element name="collectionDateFrom" nillable="true" type="xsd:dateTime"/>
|
275 |
+
<element name="collectionDateTo" nillable="true" type="xsd:dateTime"/>
|
276 |
+
<element name="onlyMoreThan2ccm" type="xsd:boolean"/>
|
277 |
+
</sequence>
|
278 |
+
</complexType>
|
279 |
+
</element>
|
280 |
+
</schema>
|
281 |
+
<schema targetNamespace="http://props.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
282 |
+
<import namespace="http://exception.common.service.hlg.de"/>
|
283 |
+
<import namespace="http://common.hermes_api.service.hlg.de"/>
|
284 |
+
<complexType name="ListOfPropsCollectionOrders">
|
285 |
+
<sequence>
|
286 |
+
<element name="orders" nillable="true" type="tns2:ArrayOfPropsCollectionOrderLong"/>
|
287 |
+
</sequence>
|
288 |
+
</complexType>
|
289 |
+
<complexType name="PropsCollectionOrderLong">
|
290 |
+
<sequence>
|
291 |
+
<element name="moreThan2ccm" nillable="true" type="xsd:string"/>
|
292 |
+
<element name="volume" nillable="true" type="xsd:double"/>
|
293 |
+
<element name="collectionAdress" nillable="true" type="tns3:Address"/>
|
294 |
+
<element name="timeframe" nillable="true" type="xsd:string"/>
|
295 |
+
<element name="collectionType" nillable="true" type="xsd:string"/>
|
296 |
+
<element name="numberOfParcels" nillable="true" type="xsd:int"/>
|
297 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
298 |
+
</sequence>
|
299 |
+
</complexType>
|
300 |
+
<complexType name="ArrayOfPropsCollectionOrderLong">
|
301 |
+
<sequence>
|
302 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsCollectionOrderLong" nillable="true" type="tns2:PropsCollectionOrderLong"/>
|
303 |
+
</sequence>
|
304 |
+
</complexType>
|
305 |
+
<complexType name="PropsCollectionOrder">
|
306 |
+
<sequence>
|
307 |
+
<element name="collectionDate" nillable="true" type="xsd:dateTime"/>
|
308 |
+
<element name="numberOfParcelsClass_L" nillable="true" type="xsd:int"/>
|
309 |
+
<element name="numberOfParcelsClass_M" nillable="true" type="xsd:int"/>
|
310 |
+
<element name="numberOfParcelsClass_S" nillable="true" type="xsd:int"/>
|
311 |
+
<element name="numberOfParcelsClass_XL" nillable="true" type="xsd:int"/>
|
312 |
+
<element name="numberOfParcelsClass_XLwithBulkGoods" nillable="true" type="xsd:int"/>
|
313 |
+
<element name="numberOfParcelsClass_XS" nillable="true" type="xsd:int"/>
|
314 |
+
</sequence>
|
315 |
+
</complexType>
|
316 |
+
<complexType name="ShippingLabelPdf">
|
317 |
+
<sequence>
|
318 |
+
<element name="pdfData" type="xsd:base64Binary"/>
|
319 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
320 |
+
</sequence>
|
321 |
+
</complexType>
|
322 |
+
<complexType name="PropsOrder">
|
323 |
+
<sequence>
|
324 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
325 |
+
<element name="receiver" nillable="true" type="tns3:Address"/>
|
326 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
327 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
328 |
+
<element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
329 |
+
<element name="includeCashOnDelivery" type="xsd:boolean"/>
|
330 |
+
<element name="withBulkGoods" type="xsd:boolean"/>
|
331 |
+
</sequence>
|
332 |
+
</complexType>
|
333 |
+
<complexType name="PropsOrderLong">
|
334 |
+
<sequence>
|
335 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
336 |
+
<element name="ebayNumber" nillable="true" type="xsd:string"/>
|
337 |
+
<element name="shipper" nillable="true" type="tns3:Address"/>
|
338 |
+
<element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
339 |
+
<element name="trackingFlag" nillable="true" type="xsd:short"/>
|
340 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
341 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
342 |
+
<element name="printDate" nillable="true" type="xsd:dateTime"/>
|
343 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
344 |
+
<element name="status_text" nillable="true" type="xsd:string"/>
|
345 |
+
<element name="status" nillable="true" type="xsd:short"/>
|
346 |
+
<element name="receiver" nillable="true" type="tns3:Address"/>
|
347 |
+
</sequence>
|
348 |
+
</complexType>
|
349 |
+
<complexType name="RequestedOrderNumbers">
|
350 |
+
<sequence>
|
351 |
+
<element name="orderNumbers" nillable="true" type="tns2:ArrayOf_xsd_nillable_string"/>
|
352 |
+
</sequence>
|
353 |
+
</complexType>
|
354 |
+
<complexType name="ArrayOf_xsd_nillable_string">
|
355 |
+
<sequence>
|
356 |
+
<element maxOccurs="unbounded" minOccurs="0" name="string" nillable="true" type="xsd:string"/>
|
357 |
+
</sequence>
|
358 |
+
</complexType>
|
359 |
+
<complexType name="MultipleShippingLabelsPdf">
|
360 |
+
<sequence>
|
361 |
+
<element name="pdfData" type="xsd:base64Binary"/>
|
362 |
+
<element name="orderRes" nillable="true" type="tns2:ArrayOfOrderResponse"/>
|
363 |
+
</sequence>
|
364 |
+
</complexType>
|
365 |
+
<complexType name="OrderResponse">
|
366 |
+
<sequence>
|
367 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
368 |
+
<element name="exceptionItems" nillable="true" type="tns2:ArrayOf_tns4_nillable_ExceptionItem"/>
|
369 |
+
</sequence>
|
370 |
+
</complexType>
|
371 |
+
<complexType name="ArrayOf_tns4_nillable_ExceptionItem">
|
372 |
+
<sequence>
|
373 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
|
374 |
+
</sequence>
|
375 |
+
</complexType>
|
376 |
+
<complexType name="ArrayOfOrderResponse">
|
377 |
+
<sequence>
|
378 |
+
<element maxOccurs="unbounded" minOccurs="0" name="OrderResponse" nillable="true" type="tns2:OrderResponse"/>
|
379 |
+
</sequence>
|
380 |
+
</complexType>
|
381 |
+
<complexType name="ShippingLabelJpeg">
|
382 |
+
<sequence>
|
383 |
+
<element name="jpegData" type="xsd:base64Binary"/>
|
384 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
385 |
+
</sequence>
|
386 |
+
</complexType>
|
387 |
+
<complexType name="ListOfProducts">
|
388 |
+
<sequence>
|
389 |
+
<element name="numberOfProducts" type="xsd:int"/>
|
390 |
+
<element name="products" nillable="true" type="tns2:ArrayOfProductWithPrice"/>
|
391 |
+
<element name="dated" nillable="true" type="xsd:dateTime"/>
|
392 |
+
<element name="labelAcceptanceTermsAndConditions" nillable="true" type="xsd:string"/>
|
393 |
+
<element name="labelAcceptanceLiabilityLimit" nillable="true" type="xsd:string"/>
|
394 |
+
<element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
|
395 |
+
<element name="netPriceCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
|
396 |
+
<element name="settlementType" nillable="true" type="xsd:string"/>
|
397 |
+
<element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
|
398 |
+
<element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
|
399 |
+
<element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
|
400 |
+
<element name="urlPortalB2C" nillable="true" type="xsd:string"/>
|
401 |
+
<element name="vatInfo" nillable="true" type="xsd:string"/>
|
402 |
+
<element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
|
403 |
+
</sequence>
|
404 |
+
</complexType>
|
405 |
+
<complexType name="ProductWithPrice">
|
406 |
+
<sequence>
|
407 |
+
<element name="netPriceEurcent" nillable="true" type="xsd:int"/>
|
408 |
+
<element name="validAt" nillable="true" type="xsd:dateTime"/>
|
409 |
+
<element name="productInfo" nillable="true" type="tns2:ProductInfo"/>
|
410 |
+
</sequence>
|
411 |
+
</complexType>
|
412 |
+
<complexType name="ProductInfo">
|
413 |
+
<sequence>
|
414 |
+
<element name="parcelFormat" nillable="true" type="tns2:ParcelFormat"/>
|
415 |
+
<element name="deliveryDestinations" nillable="true" type="tns2:ArrayOfDeliveryDestination"/>
|
416 |
+
</sequence>
|
417 |
+
</complexType>
|
418 |
+
<complexType name="ParcelFormat">
|
419 |
+
<sequence>
|
420 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
421 |
+
<element name="shortestPlusLongestEdgeCmMax" nillable="true" type="xsd:int"/>
|
422 |
+
<element name="shortestPlusLongestEdgeCmMin" nillable="true" type="xsd:int"/>
|
423 |
+
<element name="thridEdgeCmMax" nillable="true" type="xsd:int"/>
|
424 |
+
<element name="weightMinKg" nillable="true" type="xsd:decimal"/>
|
425 |
+
<element name="weigthMaxKg" nillable="true" type="xsd:decimal"/>
|
426 |
+
</sequence>
|
427 |
+
</complexType>
|
428 |
+
<complexType name="DeliveryDestination">
|
429 |
+
<sequence>
|
430 |
+
<element name="exclusions" nillable="true" type="xsd:string"/>
|
431 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
432 |
+
</sequence>
|
433 |
+
</complexType>
|
434 |
+
<complexType name="ArrayOfDeliveryDestination">
|
435 |
+
<sequence>
|
436 |
+
<element maxOccurs="unbounded" minOccurs="0" name="DeliveryDestination" nillable="true" type="tns2:DeliveryDestination"/>
|
437 |
+
</sequence>
|
438 |
+
</complexType>
|
439 |
+
<complexType name="ArrayOfProductWithPrice">
|
440 |
+
<sequence>
|
441 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ProductWithPrice" nillable="true" type="tns2:ProductWithPrice"/>
|
442 |
+
</sequence>
|
443 |
+
</complexType>
|
444 |
+
<complexType name="ServiceCharge">
|
445 |
+
<sequence>
|
446 |
+
<element name="displayname" nillable="true" type="xsd:string"/>
|
447 |
+
<element name="amountEurocent" nillable="true" type="xsd:short"/>
|
448 |
+
<element name="currency" nillable="true" type="xsd:string"/>
|
449 |
+
</sequence>
|
450 |
+
</complexType>
|
451 |
+
<complexType name="ArrayOfServiceCharge">
|
452 |
+
<sequence>
|
453 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ServiceCharge" nillable="true" type="tns2:ServiceCharge"/>
|
454 |
+
</sequence>
|
455 |
+
</complexType>
|
456 |
+
<complexType name="ShippingStatus">
|
457 |
+
<sequence>
|
458 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
459 |
+
<element name="statusText" nillable="true" type="xsd:string"/>
|
460 |
+
<element name="statusDateTime" nillable="true" type="xsd:dateTime"/>
|
461 |
+
</sequence>
|
462 |
+
</complexType>
|
463 |
+
<complexType name="PropsOrderSearchCriteria">
|
464 |
+
<sequence>
|
465 |
+
<element name="identNo" nillable="true" type="xsd:string"/>
|
466 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
467 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
468 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
469 |
+
<element name="from" nillable="true" type="xsd:dateTime"/>
|
470 |
+
<element name="to" nillable="true" type="xsd:dateTime"/>
|
471 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
472 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
473 |
+
<element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
|
474 |
+
<element name="ebayNumber" nillable="true" type="xsd:string"/>
|
475 |
+
<element name="status" nillable="true" type="tns2:ArrayOf_xsd_nillable_short"/>
|
476 |
+
</sequence>
|
477 |
+
</complexType>
|
478 |
+
<complexType name="ArrayOf_xsd_nillable_short">
|
479 |
+
<sequence>
|
480 |
+
<element maxOccurs="unbounded" minOccurs="0" name="short" nillable="true" type="xsd:short"/>
|
481 |
+
</sequence>
|
482 |
+
</complexType>
|
483 |
+
<complexType name="ListOfPropsOrders">
|
484 |
+
<sequence>
|
485 |
+
<element name="orders" nillable="true" type="tns2:ArrayOfPropsOrderShort"/>
|
486 |
+
</sequence>
|
487 |
+
</complexType>
|
488 |
+
<complexType name="PropsOrderShort">
|
489 |
+
<sequence>
|
490 |
+
<element name="orderNo" nillable="true" type="xsd:string"/>
|
491 |
+
<element name="shippingId" nillable="true" type="xsd:string"/>
|
492 |
+
<element name="creationDate" nillable="true" type="xsd:dateTime"/>
|
493 |
+
<element name="parcelClass" nillable="true" type="xsd:string"/>
|
494 |
+
<element name="status_text" nillable="true" type="xsd:string"/>
|
495 |
+
<element name="status" nillable="true" type="xsd:short"/>
|
496 |
+
<element name="firstname" nillable="true" type="xsd:string"/>
|
497 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
498 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
499 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
500 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
501 |
+
<element name="bulkGoodsServiceAmount" nillable="true" type="xsd:int"/>
|
502 |
+
</sequence>
|
503 |
+
</complexType>
|
504 |
+
<complexType name="ArrayOfPropsOrderShort">
|
505 |
+
<sequence>
|
506 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsOrderShort" nillable="true" type="tns2:PropsOrderShort"/>
|
507 |
+
</sequence>
|
508 |
+
</complexType>
|
509 |
+
<complexType name="ListOfProductInfos">
|
510 |
+
<sequence>
|
511 |
+
<element name="productInfoList" nillable="true" type="tns2:ArrayOfProductInfo"/>
|
512 |
+
<element name="dated" nillable="true" type="xsd:dateTime"/>
|
513 |
+
<element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
|
514 |
+
<element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
|
515 |
+
<element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
|
516 |
+
<element name="urlPortalB2C" nillable="true" type="xsd:string"/>
|
517 |
+
<element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
|
518 |
+
<element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
|
519 |
+
</sequence>
|
520 |
+
</complexType>
|
521 |
+
<complexType name="ArrayOfProductInfo">
|
522 |
+
<sequence>
|
523 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ProductInfo" nillable="true" type="tns2:ProductInfo"/>
|
524 |
+
</sequence>
|
525 |
+
</complexType>
|
526 |
+
<complexType name="RequestedOrders">
|
527 |
+
<sequence>
|
528 |
+
<element name="propsOrders" nillable="true" type="tns2:ArrayOfPropsOrder"/>
|
529 |
+
</sequence>
|
530 |
+
</complexType>
|
531 |
+
<complexType name="ArrayOfPropsOrder">
|
532 |
+
<sequence>
|
533 |
+
<element maxOccurs="unbounded" minOccurs="0" name="PropsOrder" nillable="true" type="tns2:PropsOrder"/>
|
534 |
+
</sequence>
|
535 |
+
</complexType>
|
536 |
+
<complexType name="ImportResult">
|
537 |
+
<sequence>
|
538 |
+
<element name="orderResponses" nillable="true" type="tns2:ArrayOfOrderResponse"/>
|
539 |
+
</sequence>
|
540 |
+
</complexType>
|
541 |
+
</schema>
|
542 |
+
<schema targetNamespace="http://common.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
543 |
+
<complexType name="Address">
|
544 |
+
<sequence>
|
545 |
+
<element name="addressAdd" nillable="true" type="xsd:string"/>
|
546 |
+
<element name="email" nillable="true" type="xsd:string"/>
|
547 |
+
<element name="houseNumber" nillable="true" type="xsd:string"/>
|
548 |
+
<element name="countryCode" nillable="true" type="xsd:string"/>
|
549 |
+
<element name="lastname" nillable="true" type="xsd:string"/>
|
550 |
+
<element name="city" nillable="true" type="xsd:string"/>
|
551 |
+
<element name="district" nillable="true" type="xsd:string"/>
|
552 |
+
<element name="postcode" nillable="true" type="xsd:string"/>
|
553 |
+
<element name="street" nillable="true" type="xsd:string"/>
|
554 |
+
<element name="telephoneNumber" nillable="true" type="xsd:string"/>
|
555 |
+
<element name="firstname" nillable="true" type="xsd:string"/>
|
556 |
+
<element name="telephonePrefix" nillable="true" type="xsd:string"/>
|
557 |
+
</sequence>
|
558 |
+
</complexType>
|
559 |
+
</schema>
|
560 |
+
<schema targetNamespace="http://exception.common.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
561 |
+
<complexType name="ServiceException">
|
562 |
+
<sequence>
|
563 |
+
<element name="exceptionItems" nillable="true" type="tns4:ArrayOfExceptionItem"/>
|
564 |
+
</sequence>
|
565 |
+
</complexType>
|
566 |
+
<complexType name="ExceptionItem">
|
567 |
+
<sequence>
|
568 |
+
<element name="errorCode" type="xsd:int"/>
|
569 |
+
<element name="errorMessage" nillable="true" type="xsd:string"/>
|
570 |
+
<element name="errorType" nillable="true" type="xsd:string"/>
|
571 |
+
</sequence>
|
572 |
+
</complexType>
|
573 |
+
<complexType name="ArrayOfExceptionItem">
|
574 |
+
<sequence>
|
575 |
+
<element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
|
576 |
+
</sequence>
|
577 |
+
</complexType>
|
578 |
+
<element name="ServiceException" nillable="true" type="tns4:ServiceException"/>
|
579 |
+
</schema>
|
580 |
+
<schema targetNamespace="http://validate.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
581 |
+
<complexType name="HermesLogin">
|
582 |
+
<sequence>
|
583 |
+
<element name="benutzername" nillable="true" type="xsd:string"/>
|
584 |
+
<element name="kennwort" nillable="true" type="xsd:string"/>
|
585 |
+
</sequence>
|
586 |
+
</complexType>
|
587 |
+
</schema>
|
588 |
+
</wsdl:types>
|
589 |
+
|
590 |
+
<wsdl:message name="propsGetPropsOrdersRequest">
|
591 |
+
<wsdl:part element="impl:propsGetPropsOrders" name="parameters"/>
|
592 |
+
|
593 |
+
</wsdl:message>
|
594 |
+
|
595 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelPdfRequest">
|
596 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelPdf" name="parameters"/>
|
597 |
+
|
598 |
+
</wsdl:message>
|
599 |
+
|
600 |
+
<wsdl:message name="propsOrderPrintLabelPdfRequest">
|
601 |
+
<wsdl:part element="impl:propsOrderPrintLabelPdf" name="parameters"/>
|
602 |
+
|
603 |
+
</wsdl:message>
|
604 |
+
|
605 |
+
<wsdl:message name="propsGetPropsOrderResponse">
|
606 |
+
<wsdl:part element="impl:propsGetPropsOrderResponse" name="parameters"/>
|
607 |
+
|
608 |
+
</wsdl:message>
|
609 |
+
|
610 |
+
<wsdl:message name="propsOrderDeleteRequest">
|
611 |
+
<wsdl:part element="impl:propsOrderDelete" name="parameters"/>
|
612 |
+
|
613 |
+
</wsdl:message>
|
614 |
+
|
615 |
+
<wsdl:message name="propsGetCollectionOrdersRequest">
|
616 |
+
<wsdl:part element="impl:propsGetCollectionOrders" name="parameters"/>
|
617 |
+
|
618 |
+
</wsdl:message>
|
619 |
+
|
620 |
+
<wsdl:message name="propsGetPropsOrderRequest">
|
621 |
+
<wsdl:part element="impl:propsGetPropsOrder" name="parameters"/>
|
622 |
+
|
623 |
+
</wsdl:message>
|
624 |
+
|
625 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelJpegResponse">
|
626 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelJpegResponse" name="parameters"/>
|
627 |
+
|
628 |
+
</wsdl:message>
|
629 |
+
|
630 |
+
<wsdl:message name="propsListOfProductsATGResponse">
|
631 |
+
<wsdl:part element="impl:propsListOfProductsATGResponse" name="parameters"/>
|
632 |
+
|
633 |
+
</wsdl:message>
|
634 |
+
|
635 |
+
<wsdl:message name="propsOrderPrintLabelJpegResponse">
|
636 |
+
<wsdl:part element="impl:propsOrderPrintLabelJpegResponse" name="parameters"/>
|
637 |
+
|
638 |
+
</wsdl:message>
|
639 |
+
|
640 |
+
<wsdl:message name="propsCollectionRequestRequest">
|
641 |
+
<wsdl:part element="impl:propsCollectionRequest" name="parameters"/>
|
642 |
+
|
643 |
+
</wsdl:message>
|
644 |
+
|
645 |
+
<wsdl:message name="propsProductlnformationResponse">
|
646 |
+
<wsdl:part element="impl:propsProductlnformationResponse" name="parameters"/>
|
647 |
+
|
648 |
+
</wsdl:message>
|
649 |
+
|
650 |
+
<wsdl:message name="propsReadShipmentStatusResponse">
|
651 |
+
<wsdl:part element="impl:propsReadShipmentStatusResponse" name="parameters"/>
|
652 |
+
|
653 |
+
</wsdl:message>
|
654 |
+
|
655 |
+
<wsdl:message name="propsCheckAvailabilityResponse">
|
656 |
+
<wsdl:part element="impl:propsCheckAvailabilityResponse" name="parameters"/>
|
657 |
+
|
658 |
+
</wsdl:message>
|
659 |
+
|
660 |
+
<wsdl:message name="propsImportOrdersResponse">
|
661 |
+
<wsdl:part element="impl:propsImportOrdersResponse" name="parameters"/>
|
662 |
+
|
663 |
+
</wsdl:message>
|
664 |
+
|
665 |
+
<wsdl:message name="destroyResponse">
|
666 |
+
<wsdl:part element="impl:destroyResponse" name="parameters"/>
|
667 |
+
|
668 |
+
</wsdl:message>
|
669 |
+
|
670 |
+
<wsdl:message name="propsCheckAvailabilityRequest">
|
671 |
+
<wsdl:part element="impl:propsCheckAvailability" name="parameters"/>
|
672 |
+
|
673 |
+
</wsdl:message>
|
674 |
+
|
675 |
+
<wsdl:message name="initRequest">
|
676 |
+
<wsdl:part element="impl:init" name="parameters"/>
|
677 |
+
|
678 |
+
</wsdl:message>
|
679 |
+
|
680 |
+
<wsdl:message name="propsUserLoginRequest">
|
681 |
+
<wsdl:part element="impl:propsUserLogin" name="parameters"/>
|
682 |
+
|
683 |
+
</wsdl:message>
|
684 |
+
|
685 |
+
<wsdl:message name="propsCollectionRequestResponse">
|
686 |
+
<wsdl:part element="impl:propsCollectionRequestResponse" name="parameters"/>
|
687 |
+
|
688 |
+
</wsdl:message>
|
689 |
+
|
690 |
+
<wsdl:message name="propsOrderPrintLabelJpegRequest">
|
691 |
+
<wsdl:part element="impl:propsOrderPrintLabelJpeg" name="parameters"/>
|
692 |
+
|
693 |
+
</wsdl:message>
|
694 |
+
|
695 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelJpegRequest">
|
696 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelJpeg" name="parameters"/>
|
697 |
+
|
698 |
+
</wsdl:message>
|
699 |
+
|
700 |
+
<wsdl:message name="propsListOfProductsATGRequest">
|
701 |
+
<wsdl:part element="impl:propsListOfProductsATG" name="parameters"/>
|
702 |
+
|
703 |
+
</wsdl:message>
|
704 |
+
|
705 |
+
<wsdl:message name="propsCollectionCancelRequest">
|
706 |
+
<wsdl:part element="impl:propsCollectionCancel" name="parameters"/>
|
707 |
+
|
708 |
+
</wsdl:message>
|
709 |
+
|
710 |
+
<wsdl:message name="propsCollectionCancelResponse">
|
711 |
+
<wsdl:part element="impl:propsCollectionCancelResponse" name="parameters"/>
|
712 |
+
|
713 |
+
</wsdl:message>
|
714 |
+
|
715 |
+
<wsdl:message name="propsOrderDeleteResponse">
|
716 |
+
<wsdl:part element="impl:propsOrderDeleteResponse" name="parameters"/>
|
717 |
+
|
718 |
+
</wsdl:message>
|
719 |
+
|
720 |
+
<wsdl:message name="propsGetCollectionOrdersResponse">
|
721 |
+
<wsdl:part element="impl:propsGetCollectionOrdersResponse" name="parameters"/>
|
722 |
+
|
723 |
+
</wsdl:message>
|
724 |
+
|
725 |
+
<wsdl:message name="propsOrderPrintLabelPdfResponse">
|
726 |
+
<wsdl:part element="impl:propsOrderPrintLabelPdfResponse" name="parameters"/>
|
727 |
+
|
728 |
+
</wsdl:message>
|
729 |
+
|
730 |
+
<wsdl:message name="propsUserLoginResponse">
|
731 |
+
<wsdl:part element="impl:propsUserLoginResponse" name="parameters"/>
|
732 |
+
|
733 |
+
</wsdl:message>
|
734 |
+
|
735 |
+
<wsdl:message name="propsGetPropsOrdersResponse">
|
736 |
+
<wsdl:part element="impl:propsGetPropsOrdersResponse" name="parameters"/>
|
737 |
+
|
738 |
+
</wsdl:message>
|
739 |
+
|
740 |
+
<wsdl:message name="propsOrderSaveAndPrintLabelPdfResponse">
|
741 |
+
<wsdl:part element="impl:propsOrderSaveAndPrintLabelPdfResponse" name="parameters"/>
|
742 |
+
|
743 |
+
</wsdl:message>
|
744 |
+
|
745 |
+
<wsdl:message name="initResponse">
|
746 |
+
<wsdl:part element="impl:initResponse" name="parameters"/>
|
747 |
+
|
748 |
+
</wsdl:message>
|
749 |
+
|
750 |
+
<wsdl:message name="propsOrderSaveRequest">
|
751 |
+
<wsdl:part element="impl:propsOrderSave" name="parameters"/>
|
752 |
+
|
753 |
+
</wsdl:message>
|
754 |
+
|
755 |
+
<wsdl:message name="propsOrdersPrintLabelsPdfRequest">
|
756 |
+
<wsdl:part element="impl:propsOrdersPrintLabelsPdf" name="parameters"/>
|
757 |
+
|
758 |
+
</wsdl:message>
|
759 |
+
|
760 |
+
<wsdl:message name="propsImportOrdersRequest">
|
761 |
+
<wsdl:part element="impl:propsImportOrders" name="parameters"/>
|
762 |
+
|
763 |
+
</wsdl:message>
|
764 |
+
|
765 |
+
<wsdl:message name="destroyRequest">
|
766 |
+
<wsdl:part element="impl:destroy" name="parameters"/>
|
767 |
+
|
768 |
+
</wsdl:message>
|
769 |
+
|
770 |
+
<wsdl:message name="ServiceException">
|
771 |
+
<wsdl:part element="tns4:ServiceException" name="fault"/>
|
772 |
+
|
773 |
+
</wsdl:message>
|
774 |
+
|
775 |
+
<wsdl:message name="propsOrderSaveResponse">
|
776 |
+
<wsdl:part element="impl:propsOrderSaveResponse" name="parameters"/>
|
777 |
+
|
778 |
+
</wsdl:message>
|
779 |
+
|
780 |
+
<wsdl:message name="propsOrdersPrintLabelsPdfResponse">
|
781 |
+
<wsdl:part element="impl:propsOrdersPrintLabelsPdfResponse" name="parameters"/>
|
782 |
+
|
783 |
+
</wsdl:message>
|
784 |
+
|
785 |
+
<wsdl:message name="propsReadShipmentStatusRequest">
|
786 |
+
<wsdl:part element="impl:propsReadShipmentStatus" name="parameters"/>
|
787 |
+
|
788 |
+
</wsdl:message>
|
789 |
+
|
790 |
+
<wsdl:message name="propsProductlnformationRequest">
|
791 |
+
<wsdl:part element="impl:propsProductlnformation" name="parameters"/>
|
792 |
+
|
793 |
+
</wsdl:message>
|
794 |
+
|
795 |
+
<wsdl:portType name="ProPS">
|
796 |
+
<wsdl:operation name="propsGetCollectionOrders">
|
797 |
+
<wsdl:input message="impl:propsGetCollectionOrdersRequest" name="propsGetCollectionOrdersRequest"/>
|
798 |
+
|
799 |
+
<wsdl:output message="impl:propsGetCollectionOrdersResponse" name="propsGetCollectionOrdersResponse"/>
|
800 |
+
|
801 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
802 |
+
|
803 |
+
</wsdl:operation>
|
804 |
+
|
805 |
+
<wsdl:operation name="propsOrderDelete">
|
806 |
+
<wsdl:input message="impl:propsOrderDeleteRequest" name="propsOrderDeleteRequest"/>
|
807 |
+
|
808 |
+
<wsdl:output message="impl:propsOrderDeleteResponse" name="propsOrderDeleteResponse"/>
|
809 |
+
|
810 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
811 |
+
|
812 |
+
</wsdl:operation>
|
813 |
+
|
814 |
+
<wsdl:operation name="propsCollectionRequest">
|
815 |
+
<wsdl:input message="impl:propsCollectionRequestRequest" name="propsCollectionRequestRequest"/>
|
816 |
+
|
817 |
+
<wsdl:output message="impl:propsCollectionRequestResponse" name="propsCollectionRequestResponse"/>
|
818 |
+
|
819 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
820 |
+
|
821 |
+
</wsdl:operation>
|
822 |
+
|
823 |
+
<wsdl:operation name="propsOrderPrintLabelPdf">
|
824 |
+
<wsdl:input message="impl:propsOrderPrintLabelPdfRequest" name="propsOrderPrintLabelPdfRequest"/>
|
825 |
+
|
826 |
+
<wsdl:output message="impl:propsOrderPrintLabelPdfResponse" name="propsOrderPrintLabelPdfResponse"/>
|
827 |
+
|
828 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
829 |
+
|
830 |
+
</wsdl:operation>
|
831 |
+
|
832 |
+
<wsdl:operation name="propsCollectionCancel">
|
833 |
+
<wsdl:input message="impl:propsCollectionCancelRequest" name="propsCollectionCancelRequest"/>
|
834 |
+
|
835 |
+
<wsdl:output message="impl:propsCollectionCancelResponse" name="propsCollectionCancelResponse"/>
|
836 |
+
|
837 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
838 |
+
|
839 |
+
</wsdl:operation>
|
840 |
+
|
841 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
|
842 |
+
<wsdl:input message="impl:propsOrderSaveAndPrintLabelPdfRequest" name="propsOrderSaveAndPrintLabelPdfRequest"/>
|
843 |
+
|
844 |
+
<wsdl:output message="impl:propsOrderSaveAndPrintLabelPdfResponse" name="propsOrderSaveAndPrintLabelPdfResponse"/>
|
845 |
+
|
846 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
847 |
+
|
848 |
+
</wsdl:operation>
|
849 |
+
|
850 |
+
<wsdl:operation name="init">
|
851 |
+
<wsdl:input message="impl:initRequest" name="initRequest"/>
|
852 |
+
|
853 |
+
<wsdl:output message="impl:initResponse" name="initResponse"/>
|
854 |
+
|
855 |
+
</wsdl:operation>
|
856 |
+
|
857 |
+
<wsdl:operation name="propsGetPropsOrder">
|
858 |
+
<wsdl:input message="impl:propsGetPropsOrderRequest" name="propsGetPropsOrderRequest"/>
|
859 |
+
|
860 |
+
<wsdl:output message="impl:propsGetPropsOrderResponse" name="propsGetPropsOrderResponse"/>
|
861 |
+
|
862 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
863 |
+
|
864 |
+
</wsdl:operation>
|
865 |
+
|
866 |
+
<wsdl:operation name="propsOrderSave">
|
867 |
+
<wsdl:input message="impl:propsOrderSaveRequest" name="propsOrderSaveRequest"/>
|
868 |
+
|
869 |
+
<wsdl:output message="impl:propsOrderSaveResponse" name="propsOrderSaveResponse"/>
|
870 |
+
|
871 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
872 |
+
|
873 |
+
</wsdl:operation>
|
874 |
+
|
875 |
+
<wsdl:operation name="propsOrdersPrintLabelsPdf">
|
876 |
+
<wsdl:input message="impl:propsOrdersPrintLabelsPdfRequest" name="propsOrdersPrintLabelsPdfRequest"/>
|
877 |
+
|
878 |
+
<wsdl:output message="impl:propsOrdersPrintLabelsPdfResponse" name="propsOrdersPrintLabelsPdfResponse"/>
|
879 |
+
|
880 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
881 |
+
|
882 |
+
</wsdl:operation>
|
883 |
+
|
884 |
+
<wsdl:operation name="propsUserLogin">
|
885 |
+
<wsdl:input message="impl:propsUserLoginRequest" name="propsUserLoginRequest"/>
|
886 |
+
|
887 |
+
<wsdl:output message="impl:propsUserLoginResponse" name="propsUserLoginResponse"/>
|
888 |
+
|
889 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
890 |
+
|
891 |
+
</wsdl:operation>
|
892 |
+
|
893 |
+
<wsdl:operation name="propsOrderPrintLabelJpeg">
|
894 |
+
<wsdl:input message="impl:propsOrderPrintLabelJpegRequest" name="propsOrderPrintLabelJpegRequest"/>
|
895 |
+
|
896 |
+
<wsdl:output message="impl:propsOrderPrintLabelJpegResponse" name="propsOrderPrintLabelJpegResponse"/>
|
897 |
+
|
898 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
899 |
+
|
900 |
+
</wsdl:operation>
|
901 |
+
|
902 |
+
<wsdl:operation name="propsListOfProductsATG">
|
903 |
+
<wsdl:input message="impl:propsListOfProductsATGRequest" name="propsListOfProductsATGRequest"/>
|
904 |
+
|
905 |
+
<wsdl:output message="impl:propsListOfProductsATGResponse" name="propsListOfProductsATGResponse"/>
|
906 |
+
|
907 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
908 |
+
|
909 |
+
</wsdl:operation>
|
910 |
+
|
911 |
+
<wsdl:operation name="propsReadShipmentStatus">
|
912 |
+
<wsdl:input message="impl:propsReadShipmentStatusRequest" name="propsReadShipmentStatusRequest"/>
|
913 |
+
|
914 |
+
<wsdl:output message="impl:propsReadShipmentStatusResponse" name="propsReadShipmentStatusResponse"/>
|
915 |
+
|
916 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
917 |
+
|
918 |
+
</wsdl:operation>
|
919 |
+
|
920 |
+
<wsdl:operation name="propsGetPropsOrders">
|
921 |
+
<wsdl:input message="impl:propsGetPropsOrdersRequest" name="propsGetPropsOrdersRequest"/>
|
922 |
+
|
923 |
+
<wsdl:output message="impl:propsGetPropsOrdersResponse" name="propsGetPropsOrdersResponse"/>
|
924 |
+
|
925 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
926 |
+
|
927 |
+
</wsdl:operation>
|
928 |
+
|
929 |
+
<wsdl:operation name="propsProductlnformation">
|
930 |
+
<wsdl:input message="impl:propsProductlnformationRequest" name="propsProductlnformationRequest"/>
|
931 |
+
|
932 |
+
<wsdl:output message="impl:propsProductlnformationResponse" name="propsProductlnformationResponse"/>
|
933 |
+
|
934 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
935 |
+
|
936 |
+
</wsdl:operation>
|
937 |
+
|
938 |
+
<wsdl:operation name="propsCheckAvailability">
|
939 |
+
<wsdl:input message="impl:propsCheckAvailabilityRequest" name="propsCheckAvailabilityRequest"/>
|
940 |
+
|
941 |
+
<wsdl:output message="impl:propsCheckAvailabilityResponse" name="propsCheckAvailabilityResponse"/>
|
942 |
+
|
943 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
944 |
+
|
945 |
+
</wsdl:operation>
|
946 |
+
|
947 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
|
948 |
+
<wsdl:input message="impl:propsOrderSaveAndPrintLabelJpegRequest" name="propsOrderSaveAndPrintLabelJpegRequest"/>
|
949 |
+
|
950 |
+
<wsdl:output message="impl:propsOrderSaveAndPrintLabelJpegResponse" name="propsOrderSaveAndPrintLabelJpegResponse"/>
|
951 |
+
|
952 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
953 |
+
|
954 |
+
</wsdl:operation>
|
955 |
+
|
956 |
+
<wsdl:operation name="destroy">
|
957 |
+
<wsdl:input message="impl:destroyRequest" name="destroyRequest"/>
|
958 |
+
|
959 |
+
<wsdl:output message="impl:destroyResponse" name="destroyResponse"/>
|
960 |
+
|
961 |
+
</wsdl:operation>
|
962 |
+
|
963 |
+
<wsdl:operation name="propsImportOrders">
|
964 |
+
<wsdl:input message="impl:propsImportOrdersRequest" name="propsImportOrdersRequest"/>
|
965 |
+
|
966 |
+
<wsdl:output message="impl:propsImportOrdersResponse" name="propsImportOrdersResponse"/>
|
967 |
+
|
968 |
+
<wsdl:fault message="impl:ServiceException" name="ServiceException"/>
|
969 |
+
|
970 |
+
</wsdl:operation>
|
971 |
+
|
972 |
+
</wsdl:portType>
|
973 |
+
|
974 |
+
<wsdl:binding name="ProPSSoapBinding" type="impl:ProPS">
|
975 |
+
<wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
|
976 |
+
|
977 |
+
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
978 |
+
|
979 |
+
<wsdl:operation name="propsGetCollectionOrders">
|
980 |
+
<wsdlsoap:operation soapAction="propsGetCollectionOrders"/>
|
981 |
+
|
982 |
+
<wsdl:input name="propsGetCollectionOrdersRequest">
|
983 |
+
<wsdlsoap:body use="literal"/>
|
984 |
+
|
985 |
+
</wsdl:input>
|
986 |
+
|
987 |
+
<wsdl:output name="propsGetCollectionOrdersResponse">
|
988 |
+
<wsdlsoap:body use="literal"/>
|
989 |
+
|
990 |
+
</wsdl:output>
|
991 |
+
|
992 |
+
<wsdl:fault name="ServiceException">
|
993 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
994 |
+
|
995 |
+
</wsdl:fault>
|
996 |
+
|
997 |
+
</wsdl:operation>
|
998 |
+
|
999 |
+
<wsdl:operation name="propsOrderDelete">
|
1000 |
+
<wsdlsoap:operation soapAction="propsOrderDelete"/>
|
1001 |
+
|
1002 |
+
<wsdl:input name="propsOrderDeleteRequest">
|
1003 |
+
<wsdlsoap:body use="literal"/>
|
1004 |
+
|
1005 |
+
</wsdl:input>
|
1006 |
+
|
1007 |
+
<wsdl:output name="propsOrderDeleteResponse">
|
1008 |
+
<wsdlsoap:body use="literal"/>
|
1009 |
+
|
1010 |
+
</wsdl:output>
|
1011 |
+
|
1012 |
+
<wsdl:fault name="ServiceException">
|
1013 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1014 |
+
|
1015 |
+
</wsdl:fault>
|
1016 |
+
|
1017 |
+
</wsdl:operation>
|
1018 |
+
|
1019 |
+
<wsdl:operation name="propsCollectionRequest">
|
1020 |
+
<wsdlsoap:operation soapAction="propsCollectionRequest"/>
|
1021 |
+
|
1022 |
+
<wsdl:input name="propsCollectionRequestRequest">
|
1023 |
+
<wsdlsoap:body use="literal"/>
|
1024 |
+
|
1025 |
+
</wsdl:input>
|
1026 |
+
|
1027 |
+
<wsdl:output name="propsCollectionRequestResponse">
|
1028 |
+
<wsdlsoap:body use="literal"/>
|
1029 |
+
|
1030 |
+
</wsdl:output>
|
1031 |
+
|
1032 |
+
<wsdl:fault name="ServiceException">
|
1033 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1034 |
+
|
1035 |
+
</wsdl:fault>
|
1036 |
+
|
1037 |
+
</wsdl:operation>
|
1038 |
+
|
1039 |
+
<wsdl:operation name="propsOrderPrintLabelPdf">
|
1040 |
+
<wsdlsoap:operation soapAction="propsOrderPrintLabelPdf"/>
|
1041 |
+
|
1042 |
+
<wsdl:input name="propsOrderPrintLabelPdfRequest">
|
1043 |
+
<wsdlsoap:body use="literal"/>
|
1044 |
+
|
1045 |
+
</wsdl:input>
|
1046 |
+
|
1047 |
+
<wsdl:output name="propsOrderPrintLabelPdfResponse">
|
1048 |
+
<wsdlsoap:body use="literal"/>
|
1049 |
+
|
1050 |
+
</wsdl:output>
|
1051 |
+
|
1052 |
+
<wsdl:fault name="ServiceException">
|
1053 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1054 |
+
|
1055 |
+
</wsdl:fault>
|
1056 |
+
|
1057 |
+
</wsdl:operation>
|
1058 |
+
|
1059 |
+
<wsdl:operation name="propsCollectionCancel">
|
1060 |
+
<wsdlsoap:operation soapAction="propsCollectionCancel"/>
|
1061 |
+
|
1062 |
+
<wsdl:input name="propsCollectionCancelRequest">
|
1063 |
+
<wsdlsoap:body use="literal"/>
|
1064 |
+
|
1065 |
+
</wsdl:input>
|
1066 |
+
|
1067 |
+
<wsdl:output name="propsCollectionCancelResponse">
|
1068 |
+
<wsdlsoap:body use="literal"/>
|
1069 |
+
|
1070 |
+
</wsdl:output>
|
1071 |
+
|
1072 |
+
<wsdl:fault name="ServiceException">
|
1073 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1074 |
+
|
1075 |
+
</wsdl:fault>
|
1076 |
+
|
1077 |
+
</wsdl:operation>
|
1078 |
+
|
1079 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
|
1080 |
+
<wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelPdf"/>
|
1081 |
+
|
1082 |
+
<wsdl:input name="propsOrderSaveAndPrintLabelPdfRequest">
|
1083 |
+
<wsdlsoap:body use="literal"/>
|
1084 |
+
|
1085 |
+
</wsdl:input>
|
1086 |
+
|
1087 |
+
<wsdl:output name="propsOrderSaveAndPrintLabelPdfResponse">
|
1088 |
+
<wsdlsoap:body use="literal"/>
|
1089 |
+
|
1090 |
+
</wsdl:output>
|
1091 |
+
|
1092 |
+
<wsdl:fault name="ServiceException">
|
1093 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1094 |
+
|
1095 |
+
</wsdl:fault>
|
1096 |
+
|
1097 |
+
</wsdl:operation>
|
1098 |
+
|
1099 |
+
<wsdl:operation name="init">
|
1100 |
+
<wsdlsoap:operation soapAction="init"/>
|
1101 |
+
|
1102 |
+
<wsdl:input name="initRequest">
|
1103 |
+
<wsdlsoap:body use="literal"/>
|
1104 |
+
|
1105 |
+
</wsdl:input>
|
1106 |
+
|
1107 |
+
<wsdl:output name="initResponse">
|
1108 |
+
<wsdlsoap:body use="literal"/>
|
1109 |
+
|
1110 |
+
</wsdl:output>
|
1111 |
+
|
1112 |
+
</wsdl:operation>
|
1113 |
+
|
1114 |
+
<wsdl:operation name="propsGetPropsOrder">
|
1115 |
+
<wsdlsoap:operation soapAction="propsGetPropsOrder"/>
|
1116 |
+
|
1117 |
+
<wsdl:input name="propsGetPropsOrderRequest">
|
1118 |
+
<wsdlsoap:body use="literal"/>
|
1119 |
+
|
1120 |
+
</wsdl:input>
|
1121 |
+
|
1122 |
+
<wsdl:output name="propsGetPropsOrderResponse">
|
1123 |
+
<wsdlsoap:body use="literal"/>
|
1124 |
+
|
1125 |
+
</wsdl:output>
|
1126 |
+
|
1127 |
+
<wsdl:fault name="ServiceException">
|
1128 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1129 |
+
|
1130 |
+
</wsdl:fault>
|
1131 |
+
|
1132 |
+
</wsdl:operation>
|
1133 |
+
|
1134 |
+
<wsdl:operation name="propsOrderSave">
|
1135 |
+
<wsdlsoap:operation soapAction="propsOrderSave"/>
|
1136 |
+
|
1137 |
+
<wsdl:input name="propsOrderSaveRequest">
|
1138 |
+
<wsdlsoap:body use="literal"/>
|
1139 |
+
|
1140 |
+
</wsdl:input>
|
1141 |
+
|
1142 |
+
<wsdl:output name="propsOrderSaveResponse">
|
1143 |
+
<wsdlsoap:body use="literal"/>
|
1144 |
+
|
1145 |
+
</wsdl:output>
|
1146 |
+
|
1147 |
+
<wsdl:fault name="ServiceException">
|
1148 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1149 |
+
|
1150 |
+
</wsdl:fault>
|
1151 |
+
|
1152 |
+
</wsdl:operation>
|
1153 |
+
|
1154 |
+
<wsdl:operation name="propsOrdersPrintLabelsPdf">
|
1155 |
+
<wsdlsoap:operation soapAction="propsOrdersPrintLabelsPdf"/>
|
1156 |
+
|
1157 |
+
<wsdl:input name="propsOrdersPrintLabelsPdfRequest">
|
1158 |
+
<wsdlsoap:body use="literal"/>
|
1159 |
+
|
1160 |
+
</wsdl:input>
|
1161 |
+
|
1162 |
+
<wsdl:output name="propsOrdersPrintLabelsPdfResponse">
|
1163 |
+
<wsdlsoap:body use="literal"/>
|
1164 |
+
|
1165 |
+
</wsdl:output>
|
1166 |
+
|
1167 |
+
<wsdl:fault name="ServiceException">
|
1168 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1169 |
+
|
1170 |
+
</wsdl:fault>
|
1171 |
+
|
1172 |
+
</wsdl:operation>
|
1173 |
+
|
1174 |
+
<wsdl:operation name="propsUserLogin">
|
1175 |
+
<wsdlsoap:operation soapAction="propsUserLogin"/>
|
1176 |
+
|
1177 |
+
<wsdl:input name="propsUserLoginRequest">
|
1178 |
+
<wsdlsoap:body use="literal"/>
|
1179 |
+
|
1180 |
+
</wsdl:input>
|
1181 |
+
|
1182 |
+
<wsdl:output name="propsUserLoginResponse">
|
1183 |
+
<wsdlsoap:body use="literal"/>
|
1184 |
+
|
1185 |
+
</wsdl:output>
|
1186 |
+
|
1187 |
+
<wsdl:fault name="ServiceException">
|
1188 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1189 |
+
|
1190 |
+
</wsdl:fault>
|
1191 |
+
|
1192 |
+
</wsdl:operation>
|
1193 |
+
|
1194 |
+
<wsdl:operation name="propsOrderPrintLabelJpeg">
|
1195 |
+
<wsdlsoap:operation soapAction="propsOrderPrintLabelJpeg"/>
|
1196 |
+
|
1197 |
+
<wsdl:input name="propsOrderPrintLabelJpegRequest">
|
1198 |
+
<wsdlsoap:body use="literal"/>
|
1199 |
+
|
1200 |
+
</wsdl:input>
|
1201 |
+
|
1202 |
+
<wsdl:output name="propsOrderPrintLabelJpegResponse">
|
1203 |
+
<wsdlsoap:body use="literal"/>
|
1204 |
+
|
1205 |
+
</wsdl:output>
|
1206 |
+
|
1207 |
+
<wsdl:fault name="ServiceException">
|
1208 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1209 |
+
|
1210 |
+
</wsdl:fault>
|
1211 |
+
|
1212 |
+
</wsdl:operation>
|
1213 |
+
|
1214 |
+
<wsdl:operation name="propsListOfProductsATG">
|
1215 |
+
<wsdlsoap:operation soapAction="propsListOfProductsATG"/>
|
1216 |
+
|
1217 |
+
<wsdl:input name="propsListOfProductsATGRequest">
|
1218 |
+
<wsdlsoap:body use="literal"/>
|
1219 |
+
|
1220 |
+
</wsdl:input>
|
1221 |
+
|
1222 |
+
<wsdl:output name="propsListOfProductsATGResponse">
|
1223 |
+
<wsdlsoap:body use="literal"/>
|
1224 |
+
|
1225 |
+
</wsdl:output>
|
1226 |
+
|
1227 |
+
<wsdl:fault name="ServiceException">
|
1228 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1229 |
+
|
1230 |
+
</wsdl:fault>
|
1231 |
+
|
1232 |
+
</wsdl:operation>
|
1233 |
+
|
1234 |
+
<wsdl:operation name="propsReadShipmentStatus">
|
1235 |
+
<wsdlsoap:operation soapAction="propsReadShipmentStatus"/>
|
1236 |
+
|
1237 |
+
<wsdl:input name="propsReadShipmentStatusRequest">
|
1238 |
+
<wsdlsoap:body use="literal"/>
|
1239 |
+
|
1240 |
+
</wsdl:input>
|
1241 |
+
|
1242 |
+
<wsdl:output name="propsReadShipmentStatusResponse">
|
1243 |
+
<wsdlsoap:body use="literal"/>
|
1244 |
+
|
1245 |
+
</wsdl:output>
|
1246 |
+
|
1247 |
+
<wsdl:fault name="ServiceException">
|
1248 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1249 |
+
|
1250 |
+
</wsdl:fault>
|
1251 |
+
|
1252 |
+
</wsdl:operation>
|
1253 |
+
|
1254 |
+
<wsdl:operation name="propsGetPropsOrders">
|
1255 |
+
<wsdlsoap:operation soapAction="propsGetPropsOrders"/>
|
1256 |
+
|
1257 |
+
<wsdl:input name="propsGetPropsOrdersRequest">
|
1258 |
+
<wsdlsoap:body use="literal"/>
|
1259 |
+
|
1260 |
+
</wsdl:input>
|
1261 |
+
|
1262 |
+
<wsdl:output name="propsGetPropsOrdersResponse">
|
1263 |
+
<wsdlsoap:body use="literal"/>
|
1264 |
+
|
1265 |
+
</wsdl:output>
|
1266 |
+
|
1267 |
+
<wsdl:fault name="ServiceException">
|
1268 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1269 |
+
|
1270 |
+
</wsdl:fault>
|
1271 |
+
|
1272 |
+
</wsdl:operation>
|
1273 |
+
|
1274 |
+
<wsdl:operation name="propsProductlnformation">
|
1275 |
+
<wsdlsoap:operation soapAction="propsProductlnformation"/>
|
1276 |
+
|
1277 |
+
<wsdl:input name="propsProductlnformationRequest">
|
1278 |
+
<wsdlsoap:body use="literal"/>
|
1279 |
+
|
1280 |
+
</wsdl:input>
|
1281 |
+
|
1282 |
+
<wsdl:output name="propsProductlnformationResponse">
|
1283 |
+
<wsdlsoap:body use="literal"/>
|
1284 |
+
|
1285 |
+
</wsdl:output>
|
1286 |
+
|
1287 |
+
<wsdl:fault name="ServiceException">
|
1288 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1289 |
+
|
1290 |
+
</wsdl:fault>
|
1291 |
+
|
1292 |
+
</wsdl:operation>
|
1293 |
+
|
1294 |
+
<wsdl:operation name="propsCheckAvailability">
|
1295 |
+
<wsdlsoap:operation soapAction="propsCheckAvailability"/>
|
1296 |
+
|
1297 |
+
<wsdl:input name="propsCheckAvailabilityRequest">
|
1298 |
+
<wsdlsoap:body use="literal"/>
|
1299 |
+
|
1300 |
+
</wsdl:input>
|
1301 |
+
|
1302 |
+
<wsdl:output name="propsCheckAvailabilityResponse">
|
1303 |
+
<wsdlsoap:body use="literal"/>
|
1304 |
+
|
1305 |
+
</wsdl:output>
|
1306 |
+
|
1307 |
+
<wsdl:fault name="ServiceException">
|
1308 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1309 |
+
|
1310 |
+
</wsdl:fault>
|
1311 |
+
|
1312 |
+
</wsdl:operation>
|
1313 |
+
|
1314 |
+
<wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
|
1315 |
+
<wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelJpeg"/>
|
1316 |
+
|
1317 |
+
<wsdl:input name="propsOrderSaveAndPrintLabelJpegRequest">
|
1318 |
+
<wsdlsoap:body use="literal"/>
|
1319 |
+
|
1320 |
+
</wsdl:input>
|
1321 |
+
|
1322 |
+
<wsdl:output name="propsOrderSaveAndPrintLabelJpegResponse">
|
1323 |
+
<wsdlsoap:body use="literal"/>
|
1324 |
+
|
1325 |
+
</wsdl:output>
|
1326 |
+
|
1327 |
+
<wsdl:fault name="ServiceException">
|
1328 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1329 |
+
|
1330 |
+
</wsdl:fault>
|
1331 |
+
|
1332 |
+
</wsdl:operation>
|
1333 |
+
|
1334 |
+
<wsdl:operation name="destroy">
|
1335 |
+
<wsdlsoap:operation soapAction="destroy"/>
|
1336 |
+
|
1337 |
+
<wsdl:input name="destroyRequest">
|
1338 |
+
<wsdlsoap:body use="literal"/>
|
1339 |
+
|
1340 |
+
</wsdl:input>
|
1341 |
+
|
1342 |
+
<wsdl:output name="destroyResponse">
|
1343 |
+
<wsdlsoap:body use="literal"/>
|
1344 |
+
|
1345 |
+
</wsdl:output>
|
1346 |
+
|
1347 |
+
</wsdl:operation>
|
1348 |
+
|
1349 |
+
<wsdl:operation name="propsImportOrders">
|
1350 |
+
<wsdlsoap:operation soapAction="propsImportOrders"/>
|
1351 |
+
|
1352 |
+
<wsdl:input name="propsImportOrdersRequest">
|
1353 |
+
<wsdlsoap:body use="literal"/>
|
1354 |
+
|
1355 |
+
</wsdl:input>
|
1356 |
+
|
1357 |
+
<wsdl:output name="propsImportOrdersResponse">
|
1358 |
+
<wsdlsoap:body use="literal"/>
|
1359 |
+
|
1360 |
+
</wsdl:output>
|
1361 |
+
|
1362 |
+
<wsdl:fault name="ServiceException">
|
1363 |
+
<wsdlsoap:fault name="ServiceException" use="literal"/>
|
1364 |
+
|
1365 |
+
</wsdl:fault>
|
1366 |
+
|
1367 |
+
</wsdl:operation>
|
1368 |
+
|
1369 |
+
</wsdl:binding>
|
1370 |
+
|
1371 |
+
<wsdl:service name="ProPSService">
|
1372 |
+
<wsdl:port binding="impl:ProPSSoapBinding" name="ProPS">
|
1373 |
+
<wsdlsoap:address location="https://sandboxapi.hlg.de/Hermes_API_Web/1_4/services/ProPS"/>
|
1374 |
+
|
1375 |
+
</wsdl:port>
|
1376 |
+
|
1377 |
+
</wsdl:service>
|
1378 |
+
|
1379 |
+
</wsdl:definitions>
|
app/design/adminhtml/default/default/layout/hermes.xml
ADDED
@@ -0,0 +1,47 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @category Layout
|
5 |
+
* @package Netresearch_Hermes
|
6 |
+
* @author André Herrn <andre.herrn@netresearch.de>
|
7 |
+
* @copyright Copyright (c) 2010 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<layout>
|
12 |
+
<adminhtml_sales_order_index>
|
13 |
+
<reference name="head">
|
14 |
+
<action method="addCss"><name>hermes.css</name></action>
|
15 |
+
</reference>
|
16 |
+
</adminhtml_sales_order_index>
|
17 |
+
<adminhtml_sales_order_shipment_view>
|
18 |
+
<reference name="head">
|
19 |
+
<action method="addCss"><name>hermes.css</name></action>
|
20 |
+
<action method="addJs"><script>netresearch/hermes/adminhtml/hermes.js</script></action>
|
21 |
+
</reference>
|
22 |
+
<reference name="form">
|
23 |
+
<block type="adminhtml/sales_order_comments_view" name="order_comments" template="hermes/sales/order/shipment/view/comments.phtml">
|
24 |
+
<action method="setParentType"><type>shipment</type></action>
|
25 |
+
</block>
|
26 |
+
</reference>
|
27 |
+
</adminhtml_sales_order_shipment_view>
|
28 |
+
<adminhtml_sales_order_shipment_new>
|
29 |
+
<reference name="head">
|
30 |
+
<action method="addCss"><name>hermes.css</name></action>
|
31 |
+
<action method="addJs"><script>netresearch/hermes/adminhtml/hermes.js</script></action>
|
32 |
+
</reference>
|
33 |
+
</adminhtml_sales_order_shipment_new>
|
34 |
+
<adminhtml_sales_shipment_index>
|
35 |
+
<reference name="head">
|
36 |
+
<action method="addCss"><name>hermes.css</name></action>
|
37 |
+
</reference>
|
38 |
+
</adminhtml_sales_shipment_index>
|
39 |
+
<adminhtml_parcel_edit>
|
40 |
+
<reference name="content">
|
41 |
+
<block type="hermes/adminhtml_sales_parcel_edit" name="parcel_edit"/>
|
42 |
+
</reference>
|
43 |
+
<reference name="head">
|
44 |
+
<action method="setTitle" translate="title" module="hermes"><title>Edit Hermes Parcel Data</title></action>
|
45 |
+
</reference>
|
46 |
+
</adminhtml_parcel_edit>
|
47 |
+
</layout>
|
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/create/hermes.phtml
ADDED
@@ -0,0 +1,81 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
if (false === Mage::helper('hermes/order')->isPartialShipment($this->getMageShipment())): ?>
|
3 |
+
<div id="hermes-form" class="field-row grid">
|
4 |
+
<?php if (true === $this->isValidHermesShipment()): ?>
|
5 |
+
<fieldset id="hermes-selector">
|
6 |
+
<?php
|
7 |
+
$shipWithHermes = $this->isAllowedShippingMethod();
|
8 |
+
$isShippedAsCod = $this->getValidateOrderHelper()->isShippedAsCod();
|
9 |
+
?>
|
10 |
+
<legend><?php echo $this->__('Ship with Hermes?')?></legend>
|
11 |
+
<?php if (true === $isShippedAsCod): ?>
|
12 |
+
<div class="notice-msg" style="padding-left:35px;">
|
13 |
+
<small><?php echo $this->__('Please note');?>:<br /><?php echo $this->__('In case of cash on delivery, the order can not be shipped partially.'); ?></small>
|
14 |
+
</div>
|
15 |
+
<?php endif; ?>
|
16 |
+
<input type="radio" name="ship_with_hermes" id="ship_with_hermes_yes" value="1" checked="checked" onchange="handleHermesFormDisplay(this);" />
|
17 |
+
<label for="ship_with_hermes_yes"><?php echo $this->__('Yes')?></label>
|
18 |
+
<br />
|
19 |
+
<input type="radio" name="ship_with_hermes" id="ship_with_hermes_no" value="0" onchange="handleHermesFormDisplay(this);" <?php if ($shipWithHermes === false):?> checked="checked"<?php endif;?> />
|
20 |
+
<label for="ship_with_hermes_no"><?php echo $this->__('No')?></label>
|
21 |
+
</fieldset>
|
22 |
+
<div id="inner-hermes-form" <?php if ($shipWithHermes === false):?> style="display:none;"<?php endif;?>>
|
23 |
+
<table class="data" cellspacing="0" cellpadding="0">
|
24 |
+
<col width="25%" />
|
25 |
+
<col width="75%" />
|
26 |
+
<tbody>
|
27 |
+
<?php if ($this->isTieredPriceMerchand()): ?>
|
28 |
+
<tr class="odd">
|
29 |
+
<td>
|
30 |
+
<label for="parcel_class"><?php echo $this->__('Please select a product class')?></label>
|
31 |
+
</td>
|
32 |
+
<td>
|
33 |
+
<?php
|
34 |
+
$parcelClasses = $this->getParcelClassesForCountry();
|
35 |
+
if (count($parcelClasses) > 0):
|
36 |
+
?>
|
37 |
+
<select name="parcel_class" id="parcel_class">
|
38 |
+
<?php foreach ($parcelClasses as $parcelClassValue => $parcelClassLabel): ?>
|
39 |
+
<option value="<?php echo $parcelClassValue; ?>"><?php echo $this->escapeHtml($parcelClassLabel); ?></option>
|
40 |
+
<?php endforeach; ?>
|
41 |
+
</select>
|
42 |
+
<?php endif; ?>
|
43 |
+
</td>
|
44 |
+
</tr>
|
45 |
+
<?php endif; ?>
|
46 |
+
<tr class="even">
|
47 |
+
<td><?php print $this->__('COD shipment') ?></td>
|
48 |
+
<td>
|
49 |
+
<?php print ($isShippedAsCod) ? $this->__('Yes') : $this->__('No'); ?>
|
50 |
+
</td>
|
51 |
+
</tr>
|
52 |
+
<? if ($isShippedAsCod): ?>
|
53 |
+
<tr class="odd">
|
54 |
+
<td><?php print $this->__('Grand Total') ?></td>
|
55 |
+
<td>
|
56 |
+
<?php print $this->helper('checkout')
|
57 |
+
->formatPrice($this->getValidateOrderHelper()
|
58 |
+
->getOrder()
|
59 |
+
->getGrandTotal()); ?>
|
60 |
+
</td>
|
61 |
+
</tr>
|
62 |
+
<? endif; ?>
|
63 |
+
</tbody>
|
64 |
+
</table>
|
65 |
+
</div>
|
66 |
+
<?php else: ?>
|
67 |
+
<?php foreach ($this->getValidationErrors() as $error_message): ?>
|
68 |
+
<div class="notice-msg" style="padding-left:35px;">
|
69 |
+
<small><?php echo $this->__('Please note');?>:<br /><?php echo $error_message; ?></small>
|
70 |
+
</div>
|
71 |
+
<?php endforeach; ?>
|
72 |
+
<?php endif;?>
|
73 |
+
</div>
|
74 |
+
<?php else: ?>
|
75 |
+
<?php
|
76 |
+
if (0 < sizeof($this->getValidateOrderHelper()->getOrder()->getShipmentsCollection())): ?>
|
77 |
+
<div class="notice-msg" style="padding-left:35px;">
|
78 |
+
<small><?php echo $this->__('Please note');?>:<br /><?php echo $this->__('This order can not be shipped with Hermes, because it is partially shipped and cash on delivery order.'); ?></small>
|
79 |
+
</div>
|
80 |
+
<?php endif; ?>
|
81 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/comments.phtml
ADDED
@@ -0,0 +1,77 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php if ($_entity = $this->getEntity()): ?>
|
28 |
+
<div id="comments_block">
|
29 |
+
<span class="field-row">
|
30 |
+
<label class="normal" for="history_comment"><?php echo Mage::helper('sales')->__('Comment Text') ?></label>
|
31 |
+
<textarea name="comment[comment]" rows="3" cols="5" style="height:6em; width:99%;" id="history_comment"></textarea>
|
32 |
+
</span>
|
33 |
+
<div class="f-left">
|
34 |
+
<?php if ($this->canSendCommentEmail()): ?>
|
35 |
+
<input name="comment[is_customer_notified]" type="checkbox" id="history_notify" value="1" />
|
36 |
+
<label class="normal" for="history_notify"><?php echo Mage::helper('sales')->__('Notify Customer by Email') ?></label><br />
|
37 |
+
<?php endif; ?>
|
38 |
+
<input name="comment[is_visible_on_front]" type="checkbox" id="history_visible" value="1" /><label class="normal" for="history_visible"> <?php echo Mage::helper('sales')->__('Visible on Frontend') ?></label>
|
39 |
+
</div>
|
40 |
+
<div class="f-right">
|
41 |
+
<?php echo $this->getChildHtml('submit_button') ?>
|
42 |
+
</div>
|
43 |
+
<div class="clear"></div>
|
44 |
+
<ul class="note-list">
|
45 |
+
<?php foreach ($_entity->getCommentsCollection(true) as $_comment): ?>
|
46 |
+
<li>
|
47 |
+
<strong><?php echo $this->helper('core')->formatDate($_comment->getCreatedAtDate(), 'medium') ?></strong>
|
48 |
+
<?php echo $this->helper('core')->formatTime($_comment->getCreatedAtDate(), 'medium') ?><span class="separator">|</span><small><?php echo $this->helper('sales')->__('Customer') ?>
|
49 |
+
<strong class="subdue">
|
50 |
+
<?php if ($_comment->getIsCustomerNotified()): ?>
|
51 |
+
<?php echo $this->helper('sales')->__('Notified') ?>
|
52 |
+
<img src="<?php echo $this->getSkinUrl('images/ico_success.gif') ?>" width="16" height="16" alt="" />
|
53 |
+
<?php else: ?>
|
54 |
+
<?php echo $this->helper('sales')->__('Not Notified') ?>
|
55 |
+
<?php endif; ?>
|
56 |
+
</strong></small>
|
57 |
+
<br/>
|
58 |
+
<?php if ('HERMES::' == substr($_comment->getComment(), 0, 8)): ?>
|
59 |
+
<img src="<?php echo $this->getSkinUrl('images/hermes/logo_small.png') ?>" alt="Hermes" title="Hermes" style="margin-top: 3px;float: left" />
|
60 |
+
<div style="margin-left:30px"><?php echo substr($_comment->getComment(), 8) ?></div>
|
61 |
+
<?php else: ?>
|
62 |
+
<?php echo $this->escapeHtml($_comment->getComment(), array('b','br','strong','i','u')) ?>
|
63 |
+
<?php endif; ?>
|
64 |
+
</li>
|
65 |
+
<?php endforeach; ?>
|
66 |
+
</ul>
|
67 |
+
<script type="text/javascript">
|
68 |
+
function submitComment() {
|
69 |
+
submitAndReloadArea($('comments_block').parentNode, '<?php echo $this->getSubmitUrl() ?>')
|
70 |
+
}
|
71 |
+
|
72 |
+
if ($('submit_comment_button')) {
|
73 |
+
$('submit_comment_button').observe('click', submitComment);
|
74 |
+
}
|
75 |
+
</script>
|
76 |
+
</div>
|
77 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/hermes.phtml
ADDED
@@ -0,0 +1,155 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /** @var $this Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes */ ?>
|
2 |
+
<div id="hermes-form" class="field-row grid">
|
3 |
+
<?php if (!is_null($this->getParcel()->getId())): ?>
|
4 |
+
<?php
|
5 |
+
$parcel = $this->getParcel();
|
6 |
+
$isShippedAsCod = $this->getValidateOrderHelper()
|
7 |
+
->setOrder($parcel->getShipment()->getOrder())
|
8 |
+
->isShippedAsCod();
|
9 |
+
?>
|
10 |
+
<div id="inner-hermes-form">
|
11 |
+
<table class="data" cellspacing="0" cellpadding="0">
|
12 |
+
<col width="34%" />
|
13 |
+
<col width="33%" />
|
14 |
+
<col width="33%" />
|
15 |
+
<?php $line=0; ?>
|
16 |
+
<?php $rowClass = array('odd', 'even'); ?>
|
17 |
+
<tbody>
|
18 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
19 |
+
<?php $line++ ?>
|
20 |
+
<td><?php echo $this->__('COD shipment') ?></td>
|
21 |
+
<td colspan="2">
|
22 |
+
<?php echo ($isShippedAsCod) ? $this->__('Yes') : $this->__('No'); ?>
|
23 |
+
</td>
|
24 |
+
</tr>
|
25 |
+
<?php if ($isShippedAsCod): ?>
|
26 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
27 |
+
<?php $line++ ?>
|
28 |
+
<td><?php echo $this->__('Grand Total') ?></td>
|
29 |
+
<td colspan="2">
|
30 |
+
<?php echo $this->helper('checkout')->formatPrice(
|
31 |
+
$this->getValidateOrderHelper()->getOrder()->getGrandTotal()
|
32 |
+
); ?>
|
33 |
+
</td>
|
34 |
+
</tr>
|
35 |
+
<?php endif; ?>
|
36 |
+
<?php if ($this->isTieredPriceMerchand() && 0 < strlen(trim($parcel->getParcelClass()))): ?>
|
37 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
38 |
+
<?php $line++ ?>
|
39 |
+
<td><?php echo $this->__('Parcel class') ?></td>
|
40 |
+
<td colspan="2"><?php echo $this->escapeHtml($parcel->getParcelClass()); ?></td>
|
41 |
+
</tr>
|
42 |
+
<?php endif; ?>
|
43 |
+
<?php if ($parcel->isProcessed()): ?>
|
44 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
45 |
+
<?php $line++ ?>
|
46 |
+
<td><?php echo $this->__('Hermes order no') ?></td>
|
47 |
+
<td colspan="2"><?php echo $this->escapeHtml($parcel->getHermesOrderNo()); ?></td>
|
48 |
+
</tr>
|
49 |
+
<?php endif; ?>
|
50 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
51 |
+
<?php $line++ ?>
|
52 |
+
<td><?php echo $this->__('Parcel Data')?></td>
|
53 |
+
<td>
|
54 |
+
<dl class="parcel-data">
|
55 |
+
<dt><em><?php echo $this->__('Address'); ?></em></dt>
|
56 |
+
<dd>
|
57 |
+
<?php echo $this->escapeHtml($parcel->getReceiverFirstname()); ?>
|
58 |
+
<?php echo $this->escapeHtml($parcel->getReceiverLastname()); ?><br />
|
59 |
+
<?php if (0 < strlen($parcel->getReceiverAddressAdd())): ?>
|
60 |
+
<?php echo $this->escapeHtml($parcel->getReceiverAddressAdd()); ?><br />
|
61 |
+
<?php endif; ?>
|
62 |
+
<?php echo $this->escapeHtml($parcel->getReceiverStreet()); ?>
|
63 |
+
<?php echo $this->escapeHtml($parcel->getReceiverHouseNumber()); ?><br />
|
64 |
+
<?php echo $this->escapeHtml($parcel->getReceiverPostCode()); ?>
|
65 |
+
<?php echo $this->escapeHtml($parcel->getReceiverCity()); ?><br />
|
66 |
+
<?php echo $this->escapeHtml($parcel->getReceiverCountryCode()); ?><br />
|
67 |
+
</dd>
|
68 |
+
</dl>
|
69 |
+
</td>
|
70 |
+
<td>
|
71 |
+
<dl class="parcel-data">
|
72 |
+
<?php if (0 < strlen($parcel->getReceiverEmail())): ?>
|
73 |
+
<dt><em><?php echo $this->__('Email'); ?></em></dt>
|
74 |
+
<dd><?php echo $this->escapeHtml($parcel->getReceiverEmail()); ?><br /></dd>
|
75 |
+
<?php endif; ?>
|
76 |
+
<?php if (0 < strlen($parcel->getReceiverTelephoneNumber())): ?>
|
77 |
+
<dt><em><?php echo $this->__('Telephone'); ?></em></dt>
|
78 |
+
<dd><?php echo $this->escapeHtml($parcel->getReceiverTelephoneNumber()); ?></dd>
|
79 |
+
<?php endif; ?>
|
80 |
+
</dl>
|
81 |
+
</td>
|
82 |
+
</tr>
|
83 |
+
<tr class="<?php echo $rowClass[$line%2]; ?>">
|
84 |
+
<?php $line++ ?>
|
85 |
+
<td><strong><?php echo $this->__('Status')?></strong></td>
|
86 |
+
<td colspan="2"><strong><?php echo $this->escapeHtml($parcel->getStatusText()); ?></strong></td>
|
87 |
+
</tr>
|
88 |
+
</tbody>
|
89 |
+
</table>
|
90 |
+
</div>
|
91 |
+
|
92 |
+
|
93 |
+
<?php if ($parcel->isProcessed() || $parcel->getHermesOrderNo()): ?>
|
94 |
+
|
95 |
+
<?php $location = $this->getUrl('adminhtml/parcel/getLabel', array(
|
96 |
+
'parcelId' => $parcel->getId(),
|
97 |
+
'format' => Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF
|
98 |
+
));
|
99 |
+
$labelPlacementOptionsModel = new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements();
|
100 |
+
$defaultPosition = Mage::getModel('hermes/config')->getPdfLabelPosition();
|
101 |
+
?>
|
102 |
+
<form action="<?php echo $location; ?>" method="get" style="display:none;float:right;margin-top:2px" id="hermes_pdf_form">
|
103 |
+
<div>
|
104 |
+
<label for="labelPosition" style="margin-top: 2px; text-align: right; width: 400px;">
|
105 |
+
<?php echo $this->__('label position'); ?>:
|
106 |
+
</label>
|
107 |
+
<select name="labelPosition" id="labelPosition">
|
108 |
+
<?php foreach($labelPlacementOptionsModel->toOptionArray() as $option): ?>
|
109 |
+
<?php $selected = ($option['value'] == $defaultPosition) ? ' selected="selected"' : '' ?>
|
110 |
+
<option value="<?php echo $option['value']; ?>"<?php echo $selected ?>>
|
111 |
+
<?php echo $this->escapeHtml($this->__($option['label'])); ?>
|
112 |
+
</option>
|
113 |
+
<?php endforeach; ?>
|
114 |
+
</select>
|
115 |
+
<button id="hermes_pdf" type="button" class="scalable save" onclick="$('hermes_pdf_form').submit();$('hermes_pdf_form').hide();$('hermes_parcel_buttons').show()">
|
116 |
+
<span><?php echo $this->__('Print'); ?></span>
|
117 |
+
</button>
|
118 |
+
<button id="hermes_pdf" type="button" class="scalable cancel" onclick="$('hermes_pdf_form').hide();$('hermes_parcel_buttons').show()">
|
119 |
+
<span><?php echo $this->__('Cancel'); ?></span>
|
120 |
+
</button>
|
121 |
+
</div>
|
122 |
+
</form>
|
123 |
+
|
124 |
+
<?php endif; ?>
|
125 |
+
|
126 |
+
<p class="form-buttons" id="hermes_parcel_buttons">
|
127 |
+
<?php if ($parcel->isProcessed() || $parcel->getHermesOrderNo()): ?>
|
128 |
+
<button id="hermes_pdf" type="button" class="scalable save" onclick="$('hermes_pdf_form').show();$('hermes_parcel_buttons').hide()">
|
129 |
+
<span><?php echo $this->__('Print'); ?></span>
|
130 |
+
</button>
|
131 |
+
<?php endif; ?>
|
132 |
+
<?php if (false == $parcel->isClosed()): ?>
|
133 |
+
<?php if ($parcel->getHermesOrderNo() xor $parcel->isQueued()): ?>
|
134 |
+
<?php $location = $this->getUrl('adminhtml/parcel/cancel', array('parcelId' => $parcel->getId())); ?>
|
135 |
+
<button id="cancel_shipment" type="button" class="scalable cancel" onclick="if (confirm('<?php echo $this->__('Do you really want to cancel that Hermes parcel?') ?>')) setLocation('<?php echo $location ?>')">
|
136 |
+
<span><?php echo $this->__('Cancel shipment') ?></span>
|
137 |
+
</button>
|
138 |
+
<?php endif; ?>
|
139 |
+
|
140 |
+
<?php if ($parcel->canBeResumed() && false === $parcel->isProcessed()): ?>
|
141 |
+
<?php $location = $this->getUrl('adminhtml/parcel/repeatTransmission', array('parcelId' => $parcel->getId())); ?>
|
142 |
+
<button id="resume_shipment" type="button" class="scalable save" onclick="setLocation('<?php echo $location ?>')" style="">
|
143 |
+
<span><?php echo $this->__('Resume shipment') ?></span>
|
144 |
+
</button>
|
145 |
+
<?php endif; ?>
|
146 |
+
|
147 |
+
<?php $location = $this->getUrl('adminhtml/parcel/edit', array('id' => $this->getParcel()->getId())); ?>
|
148 |
+
<button id="edit_shipment" type="button" class="scalable save"
|
149 |
+
onclick="setLocation('<?php echo $location ?>')" style="">
|
150 |
+
<span><?php echo $this->__('Edit') ?></span>
|
151 |
+
</button>
|
152 |
+
<?php endif; ?>
|
153 |
+
</p>
|
154 |
+
<?php endif; ?>
|
155 |
+
</div>
|
app/design/adminhtml/default/default/template/hermes/system/config/notice.phtml
ADDED
@@ -0,0 +1,45 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<table cellspacing="0" class="switcher" width="100%" class="form-list">
|
2 |
+
<col width="220px" />
|
3 |
+
<col />
|
4 |
+
<thead>
|
5 |
+
<tr>
|
6 |
+
<th colspan="2">
|
7 |
+
<img src="<?php echo $this->getSkinUrl('images/hermes/logo_small.png') ?>" alt="Hermes" title="Hermes" />
|
8 |
+
<?php echo $this->escapeHtml($this->getFieldsetLabel()) ?>
|
9 |
+
</th>
|
10 |
+
</tr>
|
11 |
+
</thead>
|
12 |
+
<tbody>
|
13 |
+
<tr>
|
14 |
+
<td><?php echo $this->__('Version'); ?></td>
|
15 |
+
<td><?php echo $this->getVersion(); ?></td>
|
16 |
+
</tr>
|
17 |
+
<!--
|
18 |
+
<tr>
|
19 |
+
<td><?php echo $this->__('Find more at'); ?></td>
|
20 |
+
<td><a href="http://www.netresearch.de/magento/hermes">http://www.netresearch.de/magento/hermes/</a></td>
|
21 |
+
</tr>
|
22 |
+
<tr>
|
23 |
+
<td><?php echo $this->__('Documentation'); ?></td>
|
24 |
+
<td><a href="http://www.netresearch.de/fileadmin/user_upload/partner-hermes/downloads/Hermes_Modul_Dokumentation.pdf"><?php echo $this->__('End user documentation'); ?></a></td>
|
25 |
+
</tr>
|
26 |
+
-->
|
27 |
+
<tr>
|
28 |
+
<td class=label><?php echo $this->__('Need support? Contact us:'); ?></td>
|
29 |
+
<?php
|
30 |
+
$mageVersion = Mage::getVersion();
|
31 |
+
if (is_callable('Mage::getEdition')) {
|
32 |
+
$mageVersion = Mage::getEdition() . ' ' . $mageVersion;
|
33 |
+
}
|
34 |
+
$bodyInfo = array(
|
35 |
+
'',
|
36 |
+
'===',
|
37 |
+
'Magento version: ' . $mageVersion,
|
38 |
+
'Hermes app version: ' . $this->getVersion(),
|
39 |
+
'Shop URI: ' . Mage::getBaseUrl()
|
40 |
+
);
|
41 |
+
?>
|
42 |
+
<td><a href="mailto:<?php echo Mage::getModel('hermes/config')->getSupportMail(); ?>?body=<?php echo rawurlencode(implode("\n", $bodyInfo)) ?>"><?php echo Mage::getModel('hermes/config')->getSupportMail() ?></a></td>
|
43 |
+
</tr>
|
44 |
+
</tbody>
|
45 |
+
</table>
|
app/design/adminhtml/default/default/template/hermes/system/config/products.phtml
ADDED
@@ -0,0 +1,108 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /* @var $this Netresearch_Hermes_Block_Adminhtml_System_Config_Products */ ?>
|
2 |
+
<tr><td><span>
|
3 |
+
<?php echo $this->__('Last Update') ?>:
|
4 |
+
<?php echo $this->formatDate($this->getListOfProductsDated(), Mage_Core_Model_Locale::FORMAT_TYPE_FULL, true); ?>
|
5 |
+
</span></td></tr></tbody></table>
|
6 |
+
<style>
|
7 |
+
.hermes_product_list tr.even {
|
8 |
+
background: #ffffff;
|
9 |
+
border: 0px;
|
10 |
+
}
|
11 |
+
</style>
|
12 |
+
<?php if ($this->getListOfProductsProducts()): ?>
|
13 |
+
<table class="switcher" width="100%" cellspacing="0">
|
14 |
+
<tbody class="hermes_product_list">
|
15 |
+
<?php $rowClass = 'odd'; ?>
|
16 |
+
<?php foreach ($this->getListOfProductsProducts() as $countryCode => $productClasses): ?>
|
17 |
+
<?php $currentCount = count($productClasses['product_classes']); ?>
|
18 |
+
<?php if (false == isset($parcelClasses) || count($parcelClasses) < $currentCount): ?>
|
19 |
+
<?php $parcelClasses = array_keys($productClasses['product_classes']); ?>
|
20 |
+
<?php endif; ?>
|
21 |
+
<?php endforeach; ?>
|
22 |
+
<tr>
|
23 |
+
<td colspan="2"> </td>
|
24 |
+
<?php foreach ($parcelClasses as $parcelClass): ?>
|
25 |
+
<th><?php echo $parcelClass ?></th>
|
26 |
+
<?php endforeach; ?>
|
27 |
+
<td> </td>
|
28 |
+
</tr>
|
29 |
+
<?php foreach ($this->getListOfProductsProducts() as $countryCode => $productClasses): ?>
|
30 |
+
<?php $rowClass = $rowClass=='odd' ? 'even' : 'odd'; ?>
|
31 |
+
<?php $detailsAction = "$$('.hermes_product_details_$countryCode').invoke('toggle');$('hermes_product_details_link_$countryCode').toggle();return false;"; ?>
|
32 |
+
<tr class="country_products <?php echo $rowClass; ?> pointer" onclick="<?php echo $detailsAction ?>">
|
33 |
+
<th><?php print($this->getCountryName($countryCode)); ?></th>
|
34 |
+
<th><?php echo $this->__('Net Price'); ?></th>
|
35 |
+
<?php foreach ($parcelClasses as $parcelClass): ?>
|
36 |
+
<?php $currentProductClasses = $productClasses['product_classes']; ?>
|
37 |
+
<td>
|
38 |
+
<?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
|
39 |
+
<?php echo number_format((int) $currentProductClasses[$parcelClass]['netPriceEurcent']/100, 2) ?> €
|
40 |
+
<?php else: ?>
|
41 |
+
-
|
42 |
+
<?php endif; ?>
|
43 |
+
</td>
|
44 |
+
<?php endforeach; ?>
|
45 |
+
<td><a id="hermes_product_details_link_<?php echo $countryCode ?>" href="#">Details</a></td>
|
46 |
+
</tr>
|
47 |
+
<tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?> pointer" onclick="<?php echo $detailsAction ?>" style="display:none">
|
48 |
+
<td> </td>
|
49 |
+
<th class="product_field"><?php print($this->__('Weight (min, max)')) ?>:</th>
|
50 |
+
<?php foreach ($parcelClasses as $parcelClass): ?>
|
51 |
+
<?php $currentProductClasses = $productClasses['product_classes']; ?>
|
52 |
+
<td>
|
53 |
+
<?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
|
54 |
+
<?php echo $currentProductClasses[$parcelClass]['weightMinKg'] ?> kg -
|
55 |
+
<?php echo $currentProductClasses[$parcelClass]['weigthMaxKg'] ?> kg
|
56 |
+
<?php else: ?>
|
57 |
+
-
|
58 |
+
<?php endif; ?>
|
59 |
+
</td>
|
60 |
+
<?php endforeach; ?>
|
61 |
+
<td> </td>
|
62 |
+
</tr>
|
63 |
+
<tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?> pointer" onclick="<?php echo $detailsAction ?>" style="display:none">
|
64 |
+
<td> </td>
|
65 |
+
<th class="product_field"><?php print($this->__('Edges')) ?>:</th>
|
66 |
+
<?php foreach ($parcelClasses as $parcelClass): ?>
|
67 |
+
<?php $currentProductClasses = $productClasses['product_classes']; ?>
|
68 |
+
<td>
|
69 |
+
<?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
|
70 |
+
<?php echo $currentProductClasses[$parcelClass]['shortestPlusLongestEdgeCmMin'] ?> cm,
|
71 |
+
<?php echo $currentProductClasses[$parcelClass]['shortestPlusLongestEdgeCmMax'] ?>
|
72 |
+
cm<?php if ($currentProductClasses[$parcelClass]['thridEdgeCmMax']): ?>,
|
73 |
+
<?php echo $currentProductClasses[$parcelClass]['thridEdgeCmMax']; ?> cm
|
74 |
+
<?php endif; ?>
|
75 |
+
<?php else: ?>
|
76 |
+
-
|
77 |
+
<?php endif; ?>
|
78 |
+
</td>
|
79 |
+
<?php endforeach; ?>
|
80 |
+
<td> </td>
|
81 |
+
</tr>
|
82 |
+
<tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?>" style="display:none">
|
83 |
+
<td> </td>
|
84 |
+
<th class="product_field"><?php print($this->__('Exclusions')) ?>:</th>
|
85 |
+
<?php foreach ($parcelClasses as $parcelClass): ?>
|
86 |
+
<?php $currentProductClasses = $productClasses['product_classes']; ?>
|
87 |
+
<td>
|
88 |
+
<?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
|
89 |
+
<?php if (array_key_exists('exclusions', $currentProductClasses[$parcelClass]) && 0<strlen($currentProductClasses[$parcelClass]['exclusions'])): ?>
|
90 |
+
<?php echo $currentProductClasses[$parcelClass]['exclusions'] ?>
|
91 |
+
<?php else: ?>
|
92 |
+
-
|
93 |
+
<?php endif; ?>
|
94 |
+
<?php else: ?>
|
95 |
+
-
|
96 |
+
<?php endif; ?>
|
97 |
+
</td>
|
98 |
+
<?php endforeach; ?>
|
99 |
+
<td> </td>
|
100 |
+
</tr>
|
101 |
+
<?php endforeach; ?>
|
102 |
+
<?php
|
103 |
+
/* already included by parent template:
|
104 |
+
</tbody>
|
105 |
+
</table>
|
106 |
+
*/
|
107 |
+
?>
|
108 |
+
<?php endif; ?>
|
app/design/frontend/default/default/template/email/order/shipment/track.phtml
ADDED
@@ -0,0 +1,50 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* * NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_shipment=$this->getShipment() ?>
|
28 |
+
<?php $_order=$this->getOrder() ?>
|
29 |
+
<?php if ($_shipment && $_order && $_shipment->getAllTracks()): ?>
|
30 |
+
<table cellspacing="0" cellpadding="0" border="0" width="650" style="border:1px solid #EAEAEA;">
|
31 |
+
<thead>
|
32 |
+
<tr>
|
33 |
+
<th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Shipped By') ?></th>
|
34 |
+
<th align="center" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Tracking Number') ?></th>
|
35 |
+
</tr>
|
36 |
+
</thead>
|
37 |
+
<tbody>
|
38 |
+
<?php $i=0; foreach ($_shipment->getAllTracks() as $_item): $i++ ?>
|
39 |
+
<tr <?php echo $i%2?'bgcolor="#F6F6F6"':'' ?>>
|
40 |
+
<td align="left" valign="top" style="padding:3px 9px"><?php echo $_item->getTitle() ?></td>
|
41 |
+
<?php if (Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE == $_item->getCarrierCode()): ?>
|
42 |
+
<td align="center" valign="top" style="padding:3px 9px"><a href="<?php echo Mage::getModel('hermes/config')->getTrackingUrl($_item->getNumber()) ?>"><?php echo $_item->getNumber() ?></a></td>
|
43 |
+
<?php else: ?>
|
44 |
+
<td align="center" valign="top" style="padding:3px 9px"><?php echo $_item->getNumber() ?></td>
|
45 |
+
<?php endif; ?>
|
46 |
+
</tr>
|
47 |
+
<?php endforeach ?>
|
48 |
+
</tbody>
|
49 |
+
</table>
|
50 |
+
<?php endif; ?>
|
app/etc/modules/Netresearch_Hermes.xml
ADDED
@@ -0,0 +1,9 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Netresearch_Hermes>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
</Netresearch_Hermes>
|
8 |
+
</modules>
|
9 |
+
</config>
|
app/locale/de_DE/Netresearch_Hermes.csv
ADDED
@@ -0,0 +1,145 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"Basic Configuration","Basiskonfiguration"
|
2 |
+
"Configuration","Konfiguration"
|
3 |
+
"Enabled","Aktiviert"
|
4 |
+
"Test mode","Testmodus"
|
5 |
+
"Sandbox mode","Sandbox"
|
6 |
+
"Log requests and responses of the web service.","Webservice-Anfragen und -Antworten protokollieren"
|
7 |
+
"Please ensure that the Magento-Log is activated","Bitte stellen Sie sicher, dass das Magento-Log ebenfalls aktiviert ist."
|
8 |
+
"Account","Stammdaten"
|
9 |
+
"Partner ID","Partner ID"
|
10 |
+
"API Password","API Passwort"
|
11 |
+
"Shipment Options","Versandoptionen"
|
12 |
+
"Disabled shipping methods","Deaktivierte Versandarten"
|
13 |
+
"Please select shipping methods which should not be used for Hermes shipping.","Bitte wählen Sie die Versandarten, deren Lieferungen nicht an Hermes übertragen werden sollen."
|
14 |
+
"Ship with Hermes?","Mit Hermes versenden?"
|
15 |
+
"Product classes","Produktklassen"
|
16 |
+
"COD shipment","Nachnahme-Sendung"
|
17 |
+
"Payment methods allowed for cash on delivery","Zahlungsarten für Nachnahme"
|
18 |
+
"shipment label placement", "Platzierung des Sendungslabels"
|
19 |
+
"Please select a file format for shipment label.", "Bitte wählen Sie ein Dateiformat für das Sendungslabel aus"
|
20 |
+
"Please select placement for shipment label.", "Bitte wählen Sie die Platzierung des Sendungslabels aus"
|
21 |
+
"Username of the client", "Benutzername des Auftraggebers"
|
22 |
+
"Password of the client", "Passwort des Auftraggebers"
|
23 |
+
"Update List of Products","Produktliste aktualisieren"
|
24 |
+
"List of Products","Produktliste"
|
25 |
+
"Last Update","Letzte Aktualisierung"
|
26 |
+
"Net Price Eurocent","Netto-Preis (Eurocent)"
|
27 |
+
"Net Price","Netto-Preis"
|
28 |
+
"Weight (min, max)","Gewicht (min, max)"
|
29 |
+
"Edges","Kantenlängen"
|
30 |
+
"Edges (shortest+longest min, shortest+longest max, third max)","Kantenlängen (längste+kürzeste min, längste+kürzeste max, dritte max)"
|
31 |
+
"Exclusions","Einschränkungen"
|
32 |
+
"Hermes COD shipments are not allowed for grand totals greater than 2.500€.","Nachnahme-Sendungen für einen Bestellwert über 2.500€ sind bei Hermes nicht möglich."
|
33 |
+
"""%s"" is not supported by Hermes.","""%s"" wird von Hermes nicht unterstützt"
|
34 |
+
"Hermes COD shipments are not allowed to %s.","Nachnahme-Sendungen nach %s werden von Hermes nicht unterstützt."
|
35 |
+
"Error","Fehler"
|
36 |
+
"Please note","Bitte beachten Sie"
|
37 |
+
"Product information could not be updated (%d: %s).","Die Liste der Hermes-Produkte konnte nicht abgerufen werden (%d: %s)."
|
38 |
+
"The list of products could not be updated (%d: %s).","Die Produktliste konnte nicht abgerufen werden (%d: %s)."
|
39 |
+
"Tried to transfer %d parcels to Hermes, but %d of them raised an error.","Bei der Ãœbertragung von %d Hermes-Sendung(en) traten %d Fehler auf."
|
40 |
+
"Successfully transfered %d parcels to Hermes.","Es wurden %d Sendungen erfolgreich an Hermes übertragen"
|
41 |
+
"Grand Total","Bestellwert"
|
42 |
+
"Yes","Ja"
|
43 |
+
"No", "Nein"
|
44 |
+
"Please select a product class", "Bitte wählen Sie eine Produktklasse"
|
45 |
+
"product classes", "Produktklassen"
|
46 |
+
"Parcel class", "Paketklasse"
|
47 |
+
"Cancel shipment","Versand abbrechen"
|
48 |
+
"Resume shipment","Versand wiederaufnehmen"
|
49 |
+
"Edit","Bearbeiten"
|
50 |
+
"None of the given parcels could be sent to Hermes","Keine der vorliegenden Sendungen konnte an Hermes übertragen werden"
|
51 |
+
"An error occured during transmission to Hermes","Bei der Ãœbertragung an Hermes ist ein Fehler aufgetreten"
|
52 |
+
"Some errors occured during transmission to Hermes","Bei der Ãœbertragung an Hermes sind Fehler aufgetreten"
|
53 |
+
"Successfully transmitted to Hermes","Die Ãœbertragung an Hermes war erfolgreich"
|
54 |
+
"Hermes is disabled in configuration. Please enable it before trying to submit parcels.","Hermes ist in deaktiviert. Bitte aktivieren Sie es vor der Ãœbertragung von Sendungen in der Konfiguration."
|
55 |
+
"None of the given parcels could be sent to Hermes","Es konnten keine Sendungen an Hermes übertragen werden"
|
56 |
+
"Save parcel and resume","Sendung speichern und wiederaufnehmen"
|
57 |
+
"Receiver Data","Empfängeradresse"
|
58 |
+
"Edit Receiver Data","Empfängeradresse bearbeiten"
|
59 |
+
"Receiver data successfully updated.","Die Empfängeradresse wurde aktualisiert."
|
60 |
+
"Receiver data could not be updated.","Die Empfängeradresse konnte nicht aktualisiert werden."
|
61 |
+
"Address","Anschrift"
|
62 |
+
"First Name","Vorname"
|
63 |
+
"Leave empty if receiver is a company","Bei Versand an eine Firma leer lassen"
|
64 |
+
"Last Name","Nachname"
|
65 |
+
"Last Name/Company","Nachname/Firma"
|
66 |
+
"If you enter a company name, you could submit the c/o in field <em>%s</em>","Wenn Sie einen Firmennamen angeben, können Sie den Namen des Empfängers im Feld <em>%s</em> angeben"
|
67 |
+
"Street Address","Straße"
|
68 |
+
"May contain house number","Darf die Hausnummer enthalten"
|
69 |
+
"House Number","Hausnummer"
|
70 |
+
"Additional Address Data","Adresszusatz"
|
71 |
+
"Zip/Postal Code","Postleitzahl"
|
72 |
+
"City","Stadt"
|
73 |
+
"Country Code","Ländercode"
|
74 |
+
"Email","E-Mail"
|
75 |
+
"Telephone","Telefon"
|
76 |
+
"Telephone Prefix","Vorwahl"
|
77 |
+
"Let Hermes send an email containing the tracking link","Lassen Sie Hermes eine E-Mail mit einem Link zur Sendungsverfolgung versenden"
|
78 |
+
"Current parcel is not editable.","Der aktuelle Versand kann nicht mehr bearbeitet werden."
|
79 |
+
"Transmit Parcel Data to Hermes","Sendungsdaten an Hermes übertragen"
|
80 |
+
"new (queued)","Neu (wartend)"
|
81 |
+
"new (failed)","Neu (fehlerhaft)"
|
82 |
+
"processed","Erfolgreich"
|
83 |
+
"cancel (failed)","Abbruch (fehlerhaft)"
|
84 |
+
"canceled","Abgebrochen"
|
85 |
+
"in transmission","Wird übertragen"
|
86 |
+
"closed","Gedruckt"
|
87 |
+
"Hermes order no", "Hermes Bestellnummer"
|
88 |
+
"Shipment Label Options","Versand-Label-Optionen"
|
89 |
+
"Hermes Settings", "Hermes-Einstellungen"
|
90 |
+
"bottom left", "unten links"
|
91 |
+
"bottom right", "unten rechts"
|
92 |
+
"top left", "oben links"
|
93 |
+
"top right", "oben rechts"
|
94 |
+
"Hermes API is currently not available. Please try again later.", "Die Hermes API ist zur Zeit nicht verfügbar. Bitte versuchen Sie es später erneut."
|
95 |
+
"Parcel cancellation succeeded", "Versand erfolgreich abgebrochen"
|
96 |
+
"Parcel cancellation failed", "Abbruch des Versandes fehlgeschlagen"
|
97 |
+
"sent","gesendet"
|
98 |
+
"failed","fehlerhaft"
|
99 |
+
"%d failed","%d fehlerhaft"
|
100 |
+
"%d parcels","%d Pakete"
|
101 |
+
"%d parcels could not be transmitted to Hermes","%d Sendungen konnten nicht an Hermes übertragen werden"
|
102 |
+
"%d parcels were transmitted to Hermes","%d Sendungen wurden an Hermes übertragen"
|
103 |
+
"Parcel Data", "Sendungsdaten"
|
104 |
+
"e-mail options", "E-Mail-Optionen"
|
105 |
+
"send shipping e-mail immediately if automatic mode is used", "Sendungsmail beim automatischen Modus sofort senden"
|
106 |
+
"send shipping e-mail if tracking link is available", "Sendungsmail senden, wenn Tracking-Link bekannt ist"
|
107 |
+
"Version", "Version"
|
108 |
+
"Find more at", "mehr unter"
|
109 |
+
"Documentation", "Dokumentation"
|
110 |
+
"Need support? Contact us:","Unterstützung nötig? Schreiben Sie an:"
|
111 |
+
"End user documentation", "Benutzerdokumentation"
|
112 |
+
"Parcel transmission was resumed", "Der Versand wurde wieder aufgenommen"
|
113 |
+
"Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href=""%s"">trigger prompt transmission</a>.", "Der Versandauftrag wird in Kürze wiederaufgenommen. Sie können die Übertragung auch <a href=""%s"">manuell starten</a>."
|
114 |
+
"Hermes parcel cancellation succeeded", "Stornierung des Hermesauftrags erfolgreich"
|
115 |
+
"Automatic shipment creation","Automatische Erstellung von Sendungen"
|
116 |
+
"Allowed order status codes for automatic shipment","Bestellstatus für automatische Erstellung von Sendungen"
|
117 |
+
"Payment methods allowed for automatic shipment","Zahlungsarten für automatische Erstellung von Sendungen"
|
118 |
+
"No parcels were transfered to Hermes.", "Es wurden keine Sendungen an Hermes übertragen."
|
119 |
+
"Create shipment(s) for Hermes","Sendung(en) für erstellen"
|
120 |
+
"%d Hermes shipment(s) created", "%d Hermes-Sendung(en) erstellt"
|
121 |
+
"%d Hermes shipment(s) could not be created", "%d Hermes-Sendung(en) konnte(n) nicht erstellt werden",
|
122 |
+
"notify customer", "Kunden informieren"
|
123 |
+
"Create shipment(s) for Hermes","Sendung(en) für Hermes erstellen"
|
124 |
+
"Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href=""%s"">trigger prompt transmission</a>.", "Der Versandauftrag wird in Kürze aufgenommen. Sie können die Übertragung auch <a href=""%s"">manuell starten</a>."
|
125 |
+
"Successfully created Hermes parcel", "Hermes Sendung erfolgreich erstellt"
|
126 |
+
"Order %s threw error: %s","Bestellung %s führte zu Fehler: %s"
|
127 |
+
"Edit Hermes Parcel Data","Hermes-Sendungsdaten bearbeiten"
|
128 |
+
"The list of products was successfully updated.", "Die Produktliste wurde erfolgreich aktualisiert"
|
129 |
+
"use default", "Standard benutzen"
|
130 |
+
"Print", "Drucken"
|
131 |
+
"label position", "Position des Labels"
|
132 |
+
"No parcels were transfered to Hermes.", "Es wurden keine Sendungen an Hermes übertragen."
|
133 |
+
"Please select at least one shipment","Bitte wählen Sie mindestens eine Sendung aus"
|
134 |
+
"Failed to cancel Hermes shipment %s","Abbruch der Sendung %s schlug fehl"
|
135 |
+
"Canceled %s Hermes shipments","%s Hermes-Sendungen wurden abgebrochen"
|
136 |
+
"Failed to cancel %s Hermes shipments","%s Hermes-Sendungen konnten nicht abgebrochen werden"
|
137 |
+
"Cancel Hermes shipments","Hermes-Sendungen abbrechen"
|
138 |
+
"Cancel", "Abbrechen"
|
139 |
+
"This order is not automatically shippable by Hermes.","Diese Bestellung kann nicht automatisch mit Hermes versendet werden"
|
140 |
+
"By choosing 'yes' the sandbox mode will be activated. Please notice, that all generated parcels will be ignored by Hermes.", "Falls 'JA' ausgewählt ist, wird der Testmodus aktiviert. Alle im Testmodus erstellten Sendungen werden nicht von Hermes bearbeitet."
|
141 |
+
"In case of cash on delivery, the order can not be shipped partially.", "Im Fall von Nachnahme kann die Bestellung nicht in Teillieferungen versendet werden."
|
142 |
+
"Partial shipment is not allowed for cash on delivery shipments which should be shipped with Hermes.", "Teilsendungen sind nicht erlaubt für Nachnahmesendungen die mit Hermes versendet werden sollen."
|
143 |
+
"This order can not be shipped with Hermes, because it is partially shipped and cash on delivery order.", "Die Bestellung kann nicht mit Hermes verschickt werden, da sie schon teilweise versandt wurde und es sich um eine Nachnahme-Sendung handelt."
|
144 |
+
"Do you really want to cancel that Hermes parcel?","Möchten Sie diese Hermes-Sendung tatsächlich abbrechen?"
|
145 |
+
"%d parcels are queued for transmission to Hermes","%d Sendungen warten auf Ãœbertragung zu Hermes"
|
doc/Netresearch_Hermes/Benutzerdokumentation.pdf
ADDED
@@ -0,0 +1,4457 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
%PDF-1.4
|
2 |
+
%���� ReportLab Generated PDF document http://www.reportlab.com
|
3 |
+
1 0 obj
|
4 |
+
<< /F1 2 0 R /F2 3 0 R /F3 60 0 R /F4 62 0 R >>
|
5 |
+
endobj
|
6 |
+
2 0 obj
|
7 |
+
<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
|
8 |
+
endobj
|
9 |
+
3 0 obj
|
10 |
+
<< /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
|
11 |
+
endobj
|
12 |
+
4 0 obj
|
13 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 33 /Length 9345 /Subtype /Image
|
14 |
+
/Type /XObject /Width 210 >>
|
15 |
+
stream
|
16 |
+
Gb"/+B2i+"REiSGQ(0+42nMX>1RUpK:F=1W-HY[L@O#)6;f"5oj+80/?A\&h_8[L#E5R2,;f-jL^%W#2,GB]#C'YP"+X&nTpUr&CgX(0l1OJi9]]V@;1A^E_^[f%`qn1g1Y=I*#,5hjaHDst'h^+b-S"+8UbZ9YoA`LA=Z'h[JD(8WYP!'i+<.ti36i*(/q\8dOVZOH-DKO"'G"u=XRloFL4k2)DegN^a0D_DH\@ZKbB9g97@beAMmo[f3([u-a@t2hdrc^9t:RUS,Vi?.mb^;WpjOZ%ThK^jJM\j8qMX(63@n+4Lp<Do)o,8?>+;P5O]J4t>/6Q+YH%S&<8:9+jg*Ju`gOXQeh7a!Qk,lELrn!cs4B&5Vhb[HgBD8CSB5cQ60\(r!j&Q/eOHc:3lIB[m9>7n(g+%ceOm,<nm&QiE`?*!'LWn*jSZ<FgbD!O%nX1r"2P$U7**($7<=qU@Vu;KCIId7D76oJSp!0P[mBZ=8dPK.2P>1&3%:YqjYucq3ZVn$&I!f_o\3oeRD'?qHO8W2kkHA$Y5@ofQ+arFd;HWB71&j%<ph)77IMt<CPN]h)71HmO_pg?BXN]"IGeF#!f"g37:]CuECn09b[792'k0&`@>B@'S7DDo(ePH`pClIhge]h!aNkJJe:jg<iqn5j2%SrS:d4hJLnQ(F1$Ok!Z3ri&cW"nXA-Zk(?R;AHQNMB&^SW4^f71Lc=oID!Vb3q(G\%;ZcZHMX!?a`RTRjBGN,_m>Wqs-XVeHkY.0*C,5f8\/cGT67aTB:+mP/[56J=":P+GKV$!kaYf`=DiNm,/DH&+1j7J=bt(.Rm3PCI`SA>A%Ge]0IdAlu605`u8tl^pC:gh>0.)CV;HW4c;_oD_M4<`qIKYP@Q<EhYqGp7m7_ITSsdgn[2$,g!p,b,""*B3b\YeY"UfR^t/YJV/k)d]GMmR4W0=`nF$!Dh<L//l]>DX!:P0-pi*nPJ@?>F=+L@tV1e;6bhZO>rL4[Llp%;,I[E1mgD&eRNPPF:r88+&LLUPMckG[-84?g*7<Lt374im^X#8tp^4-#Ar^F[Bb?5s0kf@`o@m#4gf*"jl<ChBRqWth_e*lZU%*6].9buM3QcuT<FXqm?"b:'_7GsF<BCblP9Wg:-Xa\*TNZM&O%k8XpaWE4tGC&<M]W4N[SSO@ZDNYuX5h)?KX_:e$ci\f"3pom&DI56/3M3W$QhtJTkKfR_5GkbO9P(o0_YR7Vo2dT"IMb<'3N6@f>4/PsaY#-fc7@2]0!)"Q?WpVWGL^)g]5[!ANpDYcdGs0X7OONQ*#r7@oLQ<*BPdMt-hVi`C29%Pp=5$eq@uW?/"V'd:V"h02;9UMX-_%2MKC-X1O3Ka%'DLVXc@%oUIJ3kK+MeZ5mZsj2nNW"*O:UjZEp[];b`Eb%?cA:'(9!p.g-pTj4hcP:*k;b,6"HehVWB7OAl';PP%d6lZ]>0pQC;]P;r3(bR)PRlD.<`Od[&PPSs3N/LEZlVN)Q-',*]&Vl^(-D74Rl:Xjs'[s+pYS:r!bLJmBtG;c#LgY5na<"Blu]O*k/pkGPLAglh(V[UgJ6bR`Q8u.6d+pZ4@[#&UA*,@TM=;a/uI*>Cen,ds6DKO%([*()/aj.7a:Gte)2Mr$pM]f@Y<@Ml?+5^,Ahbq=t/*,+K\Xt(]j*ZG4*WU->5E\Nb)J!f2c9QmOo=1^WEP\>GO+JSn]n;Q?Ci+#Z6_pt0&@-M%JLk<EEJ9.%'-f9Wp<[5`&K15t.%=.8?'CA;*;M_nq=Bu0LoAt9(O>h1I=24`>rAD+6,!ajm-\:I@5*#d4+&Y3/AeS/NOH6s]rS3G]:/htV6pa^lh,Rp:>aj^$NGdJV@2-?3X5in9ijWH%GchtNdVZaM0'st)G3b"*ounE>>$6)Pgo?0B+[rF.8_fr^S%f5,*c>;F'K))/Zm\dH0AOAaD#?+d$`S?fsbc#*4`PfcTK2gL2!H\6(&)X"L>\@]*E[_V,6o+3\,VH41k9BV-3(`(a,XYi71G3.n%CAG&/Lb$c(60ZBW[j<?VIe7h#4,??q&MZfhDI:&^nV$CSjF@qN!T7YG:f#k5j]bi1DY?5D_!%/(cAR6T"/UbIp!Z8+!\n4CQhT]!V4O+SL-#UY5c6*7;m_JEWOeus`<i90UW'+!6,E7m`p=?'mj$)'':_5$Cin"e]!P&Fn-MhgJeXR'3_[Bcb\T*%TVJdotb[M^NkX"#U"'M@KW';me;kfDX?)1Srsp"\p\'T.Pfd5Eq-kb780VQ1]F\CT1h5b$V;*5op"o-b_)!lC"VIqcK4D/DEg6cTbMSV(ugge6s08P@AlE9O76K*uju)_CDkZcSMNkBQT!TN8,$dR[)LS^5+s0PT`!N$Ga,D)R\SG,><MDPB4;H2A.*Dk*?rq2=4ud:io_Zmo!H44cTOKN\@^nMm>ORP_/O@6E"F$3782EM%d^mqV%H`AZD9/X*):V5BL.]10HF7d*]0mT'gcKtsCD&"1DV!m^fGh.:Oh:1sSf=4Af\BP-lIr@e%R]6!5Z:#@`CYMBJST3i]O%;=^bmo^'=R6Mo?UXknDn35Q<qm?kH$fa*&23TNmXT;gg2<enA0j)DtbJ!c`Q^<OXE)(;b#uP@n4*tUJTf[INn?@]AkqEn%<Bs7]GXG)pPam%akg>j6OBfTX_0L!5(t'q??P!EW!\i;X@!B-LU:?<;!qQ0_%aXg8oBs9sf_GQdDP5B+RPGZ)?!^sc,0>g$:!T'p[0nLg[>V*NKiQ+iZ=J,]C02&eQ7);tj1;'Ah%EMqaO)WG2%(t[ipcU"d.G2JC10B8!1=*[\^1f5=[(^dT5Tq>[7nh&bN>9@%?6R+qFO&VFLDAR/=A)V(igtq'pD9`/$"D-I7["55uCc^EER9Q3H(HO&:n4u1YiY69[bCJgMO3Y(I6Kc6OpZLf%s!#<YK4sH2\Eg?+B!nDa\6d67J1beV$Bl@)e408;Tf[g$/bE#TCM.1Ah;]&HKB+WfYS?KQVLp]&V_BUHf2$lY*7%%W^T!!.^]Y05PTcIc5l#H"O@gEsW>.bOI#86O2LO=<OocbCh--258FVDF$MSHPYW-HL(8(cp6P$*!a2rGOr%Z$.'f?4qA_q6)\te<WHk5l,79`H*71t)j"!.g[W%)'3ir**),TVjP-%HQcWB0WbGQ@!dgE31WAY>(=_,!TnbPEqVM)['#k<2',:N5+q=.E.H!Ok-#AHZ38C(:p/58*7Ln?3CYPX-$qui7]'5M]eVbr`fk$jp&L`a9Sf^hSod^G614?c6h^m/4#\Rn*g2_bAQp7.f<TS1aRA5X=VBT_B*]G@&)45g.-OoC,"SYG.Fc(f4KQgWImPYGj2t2kD1.S3`a?<RiB+=I=EsA1a<^1A%=^<=t@qfX+ph:RjJ7m0!Iq+^jF)uEo(5))!bKD[t1Hmuma:eX7&DJu(/kSr'Gk_Dl0eO$A=JJ;R,nOMk9n>KjbL]KJ,SK?JYPj]d[a>q,[lCu\3k<+J4#q.N8kLsH2*Ab2]$6e?"#O6&/[!-ST/q5lfVZn'3+&o+XXpgfg(hOXW^Sl)O'o-c?cS0Cpr_:?NQcDSnT4:/@'BV_d/8?A=35\6-keuf:_E%XmfO@Y?G:U]QN+@^E-H7s^WT\3>eH5^RD$-*eW9lCWoeZ*$nTpqQYa)r1fH-3c0&fh7o_3t'bUDM&B<d`:.[^_aM2lWI&#VA/cTK1c_m;F[tMGiJE`4YCnERqP<SJMEo/5NN8M\KHk>-,?:;i;T!c6Fg@Bk8Fj1!\o#chU1!*seZ.WA/PKW"V.?=l[#D@p[UQ06$"m?GndE-[GPKR-Lh<Ka=/VX)V6AC;5g"g-K@F#f`DdP`&"-DVimb3GeiN:kj-SS[67!%PoJNA>1&egJ&oAJOlN3`]jW)G67QB[];+j+gWkW08\YD`\.%4L<GT0n8ggf3hP$:/!Mdm6^);?`6?/0lq-KXJf0jRJEF*$#ni9Pcg/&%?H6_%$^c%,Qd=$Fqao,'\S<]T"UJYKZ^oe1m/8Xcjk-)doaE37FdmCCodR"R6&[3b),(5HK+d5P5^ef-Lpj&G`e/S8/i6f(+l%+fO-o_KIS?\`>M_Z\E/X".uF^)c>5c5tpHgOmVUj[JqG\jc:!Z$d5S$F8DT(iNAc'cL/EtcL1?n*LFr:Fj@RPW7VDmO8Nu2h&\YkH23/I5dS;H[]I,nZ4DCcY$l5RW@i?!,;CXddLI9t304hVT3_X&Gj^/lP&o^Bi(t,.BXAu,o&Q#lo!F@]3G8R%kb_Stb>H&J&/rW<.kN9\[G,/Y8`[4bZlK%P]tM>:ANR`-9?X93md$<NDE2HN.[VBY(2CHlL.]9U*eEXg&?`Y!4E8)$E4VKf%(NHVFAL$BNWPM^0%7Xi3]#A2W;C]__KGnTUubDb1)oLMEEuLID*prb>uQ#KK2=sar)up!9LKI9P`S3B"Vb[ZO>UF87:Z_]>J9atVd';-MjLT>GQt8Or1d(<d9e&W&FR&TO#MQYiY_sM+@%#1G)DsD5_]:c@]KO1S3;(Y0I#FrE`*d"k<<<6*hI__e/B>@7ttT!%th07^r$^UYZ$ERg_(6`am-@H]%5#K^Qo1=('.Lg>=B8.9oIYc5A!Aj,]I$"ME9_l`X1N`riq><Xom2,,H0r./@kM=K\kV,pO!O)7+c_$&C`l35u%YErOi@\Q2/D\3<d4UQ)\P-FpSB>'_LlLAor8=,D[5c/dJhXJdSToIt1c)lcoVpE9J^Yk1Oel5WY?_;CE7#hAX*U2f8h%QSF,F6^pB#iB%%\+]O(Rmc$iLPnPNn$.U/mD;4K=o.h7h&6*<HLrI"#H4qXGpE/SLlQ/=@##C2Z;)\::h>7^Rn\s)$H!Bde:s^R$;QUB*/PW<R4C,uh;`e#D2I.Pt8Rj:1LSl?@&QSrFp1fN4W9_H`<cNQ13C[9Z&U"<)F_PGnpL.=QDdticNU1mCXQ??'?%Z&uETZOY99R_E;Gsi--DZr-e1N=Mn;LPG3HX=ARCI4j^DK4RT[Amm2_=W)^4U`%S%Wr+OIX,fAOT&.L-:G#%1NgW6V9o51RS2(GCs`!SCTB4A,@N2"9he(Esq%7"P-1<ca5m:"U.<tQ3Io_jQ7,UJVGP0FrNi+&ZUhO$cl'G0c-t=gY56"?t6ghCHmdG=a6`f]V.lQLkpXV_/ksp=orTsC6M@dTrgWG]n*QhDCY>i:*)K@h[[;'=]LGU\A!MgkSEoZZB&%,MoO7C?Ap;)&'.*TZ3Qr[J9IW9ZS@rbE8?O:7+^+[F^:W%laf<:mX-[^*?sjJ8Vj/YM'ONi0>aJjL.91:KZ2FuZr#VJa^j'd3o_ARGMKJ]4!tP,936=uq>A3Vm*`f8mHY]FDh;*pM)d%GDq41HVD^`s6Q1Oa>K/_2:%jD6_<1_Rb>nfV8#Kq[Q"U][,*taM5s%4m]iO8/fH;U+&`N/N'd8LR=*kr(rt=W6)\@/W!(9Op0KUWukD@2S#%ObG:LR#f5.K"M]gELX2K[Yb>;OI)6(NJXru1TQ%!#5Q*^Df$gmPOWGCiCMGQ&5#DtE?j28?deDtlRH]9oeIi_2iP9Khd_kW0^8EHW%b\8KY?Xl#Yd`ZmM1qiMp!*nGeE*6B,1gKK5^TA=i.HM;l-^tm%i?KtJ7io3l6".@5S8=-E"'o7YcCAfbl6Rr.;Yp?Yn>fOu;5t5<BYE2Ij)dMLB7o*N\JSaiAO^faF2`cE9QOoCt:!T7lDs='cH$4H!,)7lPCGuP:L0PSO*!>j$h+-2OTrgC;6<!@[5*!<^:2ZZ28],TlD6lA.Mu!0o.hcC2->/\3dfp<uYnDeh@YWs[`X$pp;fnd[iaT7P9KiDD2=F?Ff;jSl;97I[bB1rHg4\ma`-6V@ebOZ=l]37q;?eCfo*[3=*a]9`o"TXoci;SXWrW8&`UPI[_LmV>a?Bd$E4o#`-$rGhK:/%4Zja;OV67g3'^7"Qs3KF#GL:'.+G`:Q,)#hTpO]Km,fDe9!?=RkJg_gB"&VSV#1*jRRSKdTfXV7MR)XaY[";+&U2hP0Uer7iDXZdE5rotrHLQ03%;qMeR)`WZaPT=)=>@Y96<';]8Z;#X(qO8S<ln&2\2oC,S]+I&Z^#5U<@UY0bYfdH-m/l;%Ei7:jO$>8+NEo%WJCR88AX&>Bo-_V@:>iR2`iKA+ZVF?Gt`TcFmT6qp/WYCLCOo?lG.VFCe?sSU*M7*<&1cn^014UJGGqs'hDDgiciB>h=?p((G<O]8&`DT?dksSDfF@gMV7Db^>p(E>+`gYb\TTNll;P#;;9lN>lt,s&A'a)Ei=bP?Y/R<PugqJl-&8J&K's_5C`8qZ,J]Z$^\$3S,c7m$kADT!.NPTg^6X%:=$Tf*_IWib?'MFo!RgA0_T:d2c.6S='e/lDoAKN#c0L?\ro!m;+#NcYUa9)qf]H>W%9Y?jq+MNB0u(c#A7Xji!ZjqK9ZMi&u$?9KKS,3[lA:PlpVQr!["]QCVI_\P3sC'3?0Z[g<.PFk^5^g%MEtj+<WKH3=+;p7[P`#-c=&t#Zuej@+r>$\'3-\O'f-rE>+_5USI-d6ILPqQ^qF;Y^Jb>Sg=`6rUM0.ObnS-!.0X)Y78[U\qLmlr0"q$.+9h?B'+f93W?C:Vp_md3p)ZM8?-AAPKS*Gq#22ML9VR=r0eP<8>8Vs<S]h3=Qp7^9\f1FrejfZ$TAo8"E"1``pW_bF+i(+ja.aY_TF0&kp5h%'V6:0^CadVS'gIqQlj(MMo%YALWKul`$^Mqg!pPt*To*N@A+(dJQffo%)<2O8jsqDD-d*;P@VYQgoK%FIZ(Z;j(me4'seoi9c6Hh3B.o*,CJ9-G.W4q;W[DQU-A%imd8,5p2Q)!nCjN0AZ'_[&<+m",[r3P6Gho<A.V]-R/eT;"Pt@p%Q[bFTJe_fLQfuK;5\&;TlhdX&BJ&kD`)M53*oE)T4E4:0M!eI*f@Du0^MpFTc1!TRDFIr&A81sg?irW_Ji0re0Y8O"-F5+*UAI;\q-5'58\nW2sWWXpl2Cq6<u=CWZ,%&ZDM)X7)<a<Rs")('dH3UqK?Fl3@D2e6oY)k[/.[qV>kQgF%!$r?Wba4"oUg4^;6N"^-O*(6b0B+6J^,>$[$V+=)Xhf><rOU2ms=qI$\E9\NCp:VlHbOTKOD/['mAljY.>\P=s*AZ0ud"I_E1@:G\2+EClSkG/+7e6jLq7>smE"?[L#:;DuoCb"/F*OA/q;Lo<`_"@6^nTXaFIs(ZEVpO""sUXA!@kp/B*6YTdXcZRtP!nWRrkW`e+6;9!uPVaN-A]j!LU'If1f4mh$PR\_Vlh*g7E.$'=iHbBoSlWQE:eVD#"kQu,CHFV)Rp%nHe2F[Rq:$c^CW?[Ih(pGAm/X9]H=GTS`T:,W>F5G-*TYG8Y\.Et4K)tBN/<D5E64$)M-)L:G*m1CFPZ5:h8:Vpo('(H+C_X;4aXpd]ZL9-#$N6&S<MD[ngU&*KFhZV*BQ]?3b6,AIn,k>b#b<6"'OjK]PZ8lIG!%@Thq7AI0O^*lZ3dV(.%G9M"mO3hsutRF3CUe,Ei-;m'+e*3/6og$h&*no5sN<rg]SI.ID<K9qOl*IM?&WbF8Z:Mi]JT4u$)9eQ>jP;c6Ik<*CN4:qo'ohEc*h(kq]##H[RYqMj7jkQtrA[LU/s1u^:<2VUN(d+uU$9hg1_X4:se<\';)#D\$7V-!SuRjqoD2h7MrThi^3#hIW%S=8`N9%5+!M9gaj\>+Eimc_f(cj/VL&q!da]gQc-[OEq6g[.:u-H3P#YS6Hgbu,4LE,BGTj<eW[1iPs=;@+48@oG0W"nJIonPO.>;l4t<HUemn*KW3D>$Bn6<8`+->=V%J'6p7R]b<;,L9f_"nC3]Xb-ZOP>?H.cgG<i\A2(6=rM5^&\Vb[6W8B,;HYZO6k1I\gL=^hFW9fj0noOXr:q=?9/Mjj],GuqA/&.aUHq("]2[J*c[Hk:-dgkJ_i8+)&!29sIia=2qp`3+k<TH3<jk/_X%^b9`IF-0l#<mA#olf*KBg)oW4SObdT^^?P@"I*-U<^aoc.&>>4BjHp1)Yac&.+"A61d;GeC\Stq:#DNKaS8\W!7W\IU3L?97E["$5`qD,2/F5m@Bhqp3HQ%o0*-X,Vb5`-k<@KfJCXnbVhUYC.#=[qms;KR@c)f5%t472kCH;j+st2-c*`mIp6Me>)h_cpWDdp.j+;b@3$lbpWVoC8Sk.j2uYh=q@=*/h[:i@ag=["Y,\-;ragEBMq"]XKX-IR8l5h`i9n=+NU)Q%Vc0-cU'<:oD,_]d-7<BWC4Ksg;rq]2_-KLMI2Z+XkpOhEfVhbK>[eIk(t\Q*k`_6q9%^%q?q5H_lA\pNi!qds[3),QD/@f6reuQD+)='Aa%n#c%^?abkcS,ST:X($#;QPqT[iOR9gCms=6]Dg/lm/,rcq^QGno,O"f.\;)E;"bjH7jKOP%-!ZJh"/Wo)VcG)g9j3hpM/HrOqOZ`)g/a@B#NRTcY$I!\@23ku2jEIfKp`KKo^DMcHE.K*`U+`^<K_sJ.[\'?(TIg:7[D8^g`M?/Ip0!>R)`<coeX/i;1"7?`'3d(9-_='Yd+btC=?L@:::KI#lL@MCnm2X72#f\-JKEj%Q;/P^W\pXhLANHA'ptsdnRGRKW*I1JqU%@Xi!k_PD/ZQWKX(uo[\*_A)^I?_%**i$g4,(EE,>b)FUuYk/j'-^Kh?lN._hKn8RAdseXM)W*;$bo@hasD;PJR/^N$*Bu`JXh:N-d>B/M-7+(le#*]sX8jYl>l-?EZj?*5^#d6tZS)&e#B^F0NPeFlK2M!Hm='*]nQZHK+@tS++i,J.oE\BB]hX$1b3L!%A,^5(9/T>/Reqd+F!W2QNdo^9;&K@6ic,DgVW`[;>Ndlc5![oVag[Uc-i#[S>-YT0+b+=^YgoJ7*A:0d.n;9>BdoY2252V;Jrk:F9WebI%!:.ktMM..0sh'MruVh42D>'kL45R@/nhM$*]gGp.05pd"t+p?Vt"E<G4qk4_kqG6EV3j_8R.CHL<78^BcPoC?lKBTUP,njq&"+bRd8"4Wm]^9))ul^\)E)?oAdGo)/7*rIF0n*s.Gb?2`u_ZEu\)X=EB"nV*._':]jZeoAmjkI)+=0Dk*R\<;)9;*;rRUM#L42ooBj$WfTTnpnP$RUOC%Tb\?>>KT5b*-1/R%BG*S!S%E"khRS.B2Rm_b/D]JdIgFm-IuUCaqHUGn>TN=Kcq*80mWgl@tN-Otm#G9PhA@7*!6b`k;A$J<b`!Q*=n41/Q\m=kQrDgB"_`Ef_hS5og@UEg`/VF;Tr#._%Si3OOWnHS"Fsbhh83$l3\"lGLsSj9*CD+,<U'kN&=(L4>MTXnuq78i8cKA5uT0V5@kC`kK6K2_$j(H;[RAgtURRW=p$_(*H$lgl>4h-^][HMCKJ*HN1+frrOS<0:;~>endstream
|
17 |
+
endobj
|
18 |
+
5 0 obj
|
19 |
+
<< /Contents 146 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
20 |
+
/Type /Page >>
|
21 |
+
endobj
|
22 |
+
6 0 obj
|
23 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 703.7286 159.9429 715.7286 ] /Subtype /Link /Type /Annot >>
|
24 |
+
endobj
|
25 |
+
7 0 obj
|
26 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 703.7286 532.5827 715.7286 ] /Subtype /Link /Type /Annot >>
|
27 |
+
endobj
|
28 |
+
8 0 obj
|
29 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 685.7286 129.3829 697.7286 ] /Subtype /Link /Type /Annot >>
|
30 |
+
endobj
|
31 |
+
9 0 obj
|
32 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 685.7286 532.5827 697.7286 ] /Subtype /Link /Type /Annot >>
|
33 |
+
endobj
|
34 |
+
10 0 obj
|
35 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 667.7286 142.1429 679.7286 ] /Subtype /Link /Type /Annot >>
|
36 |
+
endobj
|
37 |
+
11 0 obj
|
38 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 667.7286 532.5827 679.7286 ] /Subtype /Link /Type /Annot >>
|
39 |
+
endobj
|
40 |
+
12 0 obj
|
41 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Rect [ 82.69291 649.7286 157.1729 661.7286 ] /Subtype /Link /Type /Annot >>
|
42 |
+
endobj
|
43 |
+
13 0 obj
|
44 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Rect [ 527.0227 649.7286 532.5827 661.7286 ] /Subtype /Link /Type /Annot >>
|
45 |
+
endobj
|
46 |
+
14 0 obj
|
47 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Rect [ 82.69291 631.7286 186.6329 643.7286 ] /Subtype /Link /Type /Annot >>
|
48 |
+
endobj
|
49 |
+
15 0 obj
|
50 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Rect [ 527.0227 631.7286 532.5827 643.7286 ] /Subtype /Link /Type /Annot >>
|
51 |
+
endobj
|
52 |
+
16 0 obj
|
53 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Rect [ 82.69291 613.7286 161.6229 625.7286 ] /Subtype /Link /Type /Annot >>
|
54 |
+
endobj
|
55 |
+
17 0 obj
|
56 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Rect [ 527.0227 613.7286 532.5827 625.7286 ] /Subtype /Link /Type /Annot >>
|
57 |
+
endobj
|
58 |
+
18 0 obj
|
59 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Rect [ 82.69291 595.7286 180.5329 607.7286 ] /Subtype /Link /Type /Annot >>
|
60 |
+
endobj
|
61 |
+
19 0 obj
|
62 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Rect [ 527.0227 595.7286 532.5827 607.7286 ] /Subtype /Link /Type /Annot >>
|
63 |
+
endobj
|
64 |
+
20 0 obj
|
65 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Rect [ 82.69291 577.7286 347.8229 589.7286 ] /Subtype /Link /Type /Annot >>
|
66 |
+
endobj
|
67 |
+
21 0 obj
|
68 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Rect [ 527.0227 577.7286 532.5827 589.7286 ] /Subtype /Link /Type /Annot >>
|
69 |
+
endobj
|
70 |
+
22 0 obj
|
71 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Rect [ 82.69291 559.7286 177.1729 571.7286 ] /Subtype /Link /Type /Annot >>
|
72 |
+
endobj
|
73 |
+
23 0 obj
|
74 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Rect [ 527.0227 559.7286 532.5827 571.7286 ] /Subtype /Link /Type /Annot >>
|
75 |
+
endobj
|
76 |
+
24 0 obj
|
77 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Rect [ 82.69291 541.7286 285.5829 553.7286 ] /Subtype /Link /Type /Annot >>
|
78 |
+
endobj
|
79 |
+
25 0 obj
|
80 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Rect [ 527.0227 541.7286 532.5827 553.7286 ] /Subtype /Link /Type /Annot >>
|
81 |
+
endobj
|
82 |
+
26 0 obj
|
83 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 523.7286 116.5829 535.7286 ] /Subtype /Link /Type /Annot >>
|
84 |
+
endobj
|
85 |
+
27 0 obj
|
86 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 523.7286 532.5827 535.7286 ] /Subtype /Link /Type /Annot >>
|
87 |
+
endobj
|
88 |
+
28 0 obj
|
89 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 82.69291 505.7286 181.6229 517.7286 ] /Subtype /Link /Type /Annot >>
|
90 |
+
endobj
|
91 |
+
29 0 obj
|
92 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 527.0227 505.7286 532.5827 517.7286 ] /Subtype /Link /Type /Annot >>
|
93 |
+
endobj
|
94 |
+
30 0 obj
|
95 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Rect [ 102.6929 487.7286 211.6629 499.7286 ] /Subtype /Link /Type /Annot >>
|
96 |
+
endobj
|
97 |
+
31 0 obj
|
98 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Rect [ 527.0227 487.7286 532.5827 499.7286 ] /Subtype /Link /Type /Annot >>
|
99 |
+
endobj
|
100 |
+
32 0 obj
|
101 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Rect [ 82.69291 469.7286 221.0829 481.7286 ] /Subtype /Link /Type /Annot >>
|
102 |
+
endobj
|
103 |
+
33 0 obj
|
104 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Rect [ 527.0227 469.7286 532.5827 481.7286 ] /Subtype /Link /Type /Annot >>
|
105 |
+
endobj
|
106 |
+
34 0 obj
|
107 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Rect [ 82.69291 451.7286 201.6329 463.7286 ] /Subtype /Link /Type /Annot >>
|
108 |
+
endobj
|
109 |
+
35 0 obj
|
110 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Rect [ 521.4627 451.7286 532.5827 463.7286 ] /Subtype /Link /Type /Annot >>
|
111 |
+
endobj
|
112 |
+
36 0 obj
|
113 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Rect [ 82.69291 433.7286 275.0529 445.7286 ] /Subtype /Link /Type /Annot >>
|
114 |
+
endobj
|
115 |
+
37 0 obj
|
116 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Rect [ 521.4627 433.7286 532.5827 445.7286 ] /Subtype /Link /Type /Annot >>
|
117 |
+
endobj
|
118 |
+
38 0 obj
|
119 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Rect [ 82.69291 415.7286 247.7829 427.7286 ] /Subtype /Link /Type /Annot >>
|
120 |
+
endobj
|
121 |
+
39 0 obj
|
122 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Rect [ 521.4627 415.7286 532.5827 427.7286 ] /Subtype /Link /Type /Annot >>
|
123 |
+
endobj
|
124 |
+
40 0 obj
|
125 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Rect [ 82.69291 397.7286 194.9929 409.7286 ] /Subtype /Link /Type /Annot >>
|
126 |
+
endobj
|
127 |
+
41 0 obj
|
128 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Rect [ 521.4627 397.7286 532.5827 409.7286 ] /Subtype /Link /Type /Annot >>
|
129 |
+
endobj
|
130 |
+
42 0 obj
|
131 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Rect [ 82.69291 379.7286 227.2229 391.7286 ] /Subtype /Link /Type /Annot >>
|
132 |
+
endobj
|
133 |
+
43 0 obj
|
134 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Rect [ 521.4627 379.7286 532.5827 391.7286 ] /Subtype /Link /Type /Annot >>
|
135 |
+
endobj
|
136 |
+
44 0 obj
|
137 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Rect [ 82.69291 361.7286 171.0829 373.7286 ] /Subtype /Link /Type /Annot >>
|
138 |
+
endobj
|
139 |
+
45 0 obj
|
140 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Rect [ 521.4627 361.7286 532.5827 373.7286 ] /Subtype /Link /Type /Annot >>
|
141 |
+
endobj
|
142 |
+
46 0 obj
|
143 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Rect [ 82.69291 343.7286 188.8529 355.7286 ] /Subtype /Link /Type /Annot >>
|
144 |
+
endobj
|
145 |
+
47 0 obj
|
146 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Rect [ 521.4627 343.7286 532.5827 355.7286 ] /Subtype /Link /Type /Annot >>
|
147 |
+
endobj
|
148 |
+
48 0 obj
|
149 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 325.7286 271.6229 337.7286 ] /Subtype /Link /Type /Annot >>
|
150 |
+
endobj
|
151 |
+
49 0 obj
|
152 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 521.4627 325.7286 532.5827 337.7286 ] /Subtype /Link /Type /Annot >>
|
153 |
+
endobj
|
154 |
+
50 0 obj
|
155 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 82.69291 307.7286 176.0829 319.7286 ] /Subtype /Link /Type /Annot >>
|
156 |
+
endobj
|
157 |
+
51 0 obj
|
158 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 521.4627 307.7286 532.5827 319.7286 ] /Subtype /Link /Type /Annot >>
|
159 |
+
endobj
|
160 |
+
52 0 obj
|
161 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Rect [ 82.69291 289.7286 158.8429 301.7286 ] /Subtype /Link /Type /Annot >>
|
162 |
+
endobj
|
163 |
+
53 0 obj
|
164 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Rect [ 521.4627 289.7286 532.5827 301.7286 ] /Subtype /Link /Type /Annot >>
|
165 |
+
endobj
|
166 |
+
54 0 obj
|
167 |
+
<< /Annots [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
|
168 |
+
16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R
|
169 |
+
26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R
|
170 |
+
36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R
|
171 |
+
46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R ] /Contents 147 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
172 |
+
/Trans << >> /Type /Page >>
|
173 |
+
endobj
|
174 |
+
55 0 obj
|
175 |
+
<< /Contents 148 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
176 |
+
/Type /Page >>
|
177 |
+
endobj
|
178 |
+
56 0 obj
|
179 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 68.69291 120.8661 0 ] /Rect [ 409.0329 697.7286 413.4809 709.7286 ] /Subtype /Link /Type /Annot >>
|
180 |
+
endobj
|
181 |
+
57 0 obj
|
182 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 62.69291 508.7286 124.3829 520.7286 ] /Subtype /Link /Type /Annot >>
|
183 |
+
endobj
|
184 |
+
58 0 obj
|
185 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 457.4598 0 ] /Rect [ 129.9429 508.7286 226.6429 520.7286 ] /Subtype /Link /Type /Annot >>
|
186 |
+
endobj
|
187 |
+
59 0 obj
|
188 |
+
<< /A << /S /URI /Type /Action /URI (http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job#cron.sh) >> /Border [ 0 0 0 ] /Rect [ 276.6529 508.7286 356.6829 520.7286 ] /Subtype /Link /Type /Annot >>
|
189 |
+
endobj
|
190 |
+
60 0 obj
|
191 |
+
<< /BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
|
192 |
+
endobj
|
193 |
+
61 0 obj
|
194 |
+
<< /Annots [ 56 0 R 57 0 R 58 0 R 59 0 R ] /Contents 149 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
195 |
+
/Trans << >> /Type /Page >>
|
196 |
+
endobj
|
197 |
+
62 0 obj
|
198 |
+
<< /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font >>
|
199 |
+
endobj
|
200 |
+
63 0 obj
|
201 |
+
<< /Contents 150 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
202 |
+
/Type /Page >>
|
203 |
+
endobj
|
204 |
+
64 0 obj
|
205 |
+
<< /Contents 151 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
206 |
+
/Type /Page >>
|
207 |
+
endobj
|
208 |
+
65 0 obj
|
209 |
+
<< /Contents 152 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
210 |
+
/Type /Page >>
|
211 |
+
endobj
|
212 |
+
66 0 obj
|
213 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 27 /Length 7285 /Subtype /Image
|
214 |
+
/Type /XObject /Width 88 >>
|
215 |
+
stream
|
216 |
+
s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPeD=9ARJ!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;8&WlPFkXp6"'b5CBam),Rfu.u[nlpPi]:M7&+HX7daUhuR`k-iX"@GiAS4SM^?HYqZ,dX:7)J3i/Lq=d/jc65B*Zgf8%ISN+`fVrWng$&,9.1ho"Ip&*Lkrr?m1MuJ-trrBhp5PVg@r(4!.jWkUT_lC,VJj8f%Xo4r=2MUs%HFR>XGC+GL%DZM#N02CHN)^<fJ,#It)b*jj%YO1&j=<9YR`[)!En9""Xo!D\9+;2!`_g#bo!a*I?iC[d>Lpjor'12](J4W,#tD&qlQ?#nrrDt&CL6h'G'?b<95J*t9-gcp&-Mfg48qHu5rOY!XRX:SA_T8cIV1iP,InosIYPG19,W5"V:V<0D<>oZG\_ZQqm@i%_GR@`HH6$_5Q:^"8,OYO\+ctRn&,/*nTAFq2bpuJ#"Td]oAtsn85GY\+'tKfFL8Nj['B4>?3oSKBa)+)B-EUnEP!4Rett:oNF1CcDrp*Dlf;$AL0nH]oD\e85Q2:T>Plu9pYl,Pppr]K.+Q)GA,cOX+9)>!WGX9ZgEjMBHY8X(j+Z&Im'nUb&..EX44Z$oOk=F_gV]-lm4&Ff1'.B^cX*J$N-V6uqU`p4Ro6/>X"IMln6TJaNQj]+R[!ZnKr!U:0jI8jgEL3;Lu%hPcZL8,Y(&d-bje_o1]IG,Ud+YV8h8H7lV=Pu.D*4l!0QF+<23'cN)d7b!&I.)7DsB<V3rSsaI=-9%/n?-do<bW<\m(X*0i9uICM0&ZrU;1WE61do@j1Nn4iD_YHXb#EaIUOIYWhGM!\b8VN/f#l+*TuJ_0rB!!c7&6[>h%H#hBHf'(<Xg5j#L!'6>.?Je1_/=FU_eGMPhR`@EcG?"SB+8?(t8`DaB[heOLN:;ndC%=J>d^P'FE>WOmO-F[Q\GN2YReFlPrl:B'rI<GC5IP)%!'Zb,rr<&h!O&fr`hZ)U0"@OK*i*l/hP>'':@b3_X#ik?fZ)qtF4VE%?IqUR-Bd)`qnM'MqdqM\>q`tl!TF`-m4"7Ce@57`o/BI9f]euQ`CDPc*Q3\(Y?"4*<dA^]i_=cj'V7kPocN#i!!I(!957,grr@Rp#DDOi\FGTBOii\POrPtSrr=T\U:l#5oWVG)Wmg%Boss3pEF2kJcYI6)s4I~>endstream
|
217 |
+
endobj
|
218 |
+
67 0 obj
|
219 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 29 /Length 8330 /Subtype /Image
|
220 |
+
/Type /XObject /Width 150 >>
|
221 |
+
stream
|
222 |
+
s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPkFQ3..3!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;:hZ>C@i&B]HL'bf]>E9=&Nl^[.Khn'\O,i@hbA!2+-mp_85Qh*p@Jo'Wm6rku_INk)Z4h_]&S^?,N2l?VW$4cRKk.H4o6'!fu\m(AC+$%epN%iNMKHM)^DRFM6:_I%Ba!'o1dn0n;:n[^sD0=h)_TPQjf'S#o68U#)kHZ(`!ESIOh,*Xf!jG,+nr\*lbW$K_A"k57Qbacl<8.2+=jX28n3cm6TV2nC!S_'V)DT6[V%c6h0p\t5\rrDgemXOF>&,l_Sr\m@F-20Xr%>Xr`!g!?])lP"/m-!qOL3nIP&fEV/]B&"0/hHAOZ%_--'c,(teVF6nJhakXHIR:HIk-_Or&+BZp/jDQanbc.q%Nc._I%Ba!'o1dn0n;:n[^sD0=h)_TPQjf'S#o6<*_9)3#ZMm\-SD*:;JZTYrNebC6EETcIJhUBs%jfdQ#)E].=!Go:t#O+3_J15;+?JAV7\,Im5SN14T'lmXOF>&,l_Sr\m@F-20Xr%>Xr`!g!?])m%\o,*0]YVs\/VAH"+mE&5fWXZIJKH^;+3=JI&;ojq7F5#Q[HXV@gGC1#l+Rp.M2o(,2I7gfHl-VNn*r;;6J!//)Lrdh<R!8p`S!980N_I%Ba!'o1dn0n;:n[a;m)U@J)mc'[bZ90]ceg_akERaJB)Jo7VT4o%ioA!+1`)CT=<1fYbm@;PgAdNN=.t#+Q4dHTO;:k!fh9/%PQe_T@co*!D$:"H+O8)B9J*7g^rWODC2c.\pBi'_IoA/QdbO[Htq"eKXZ#-Al75208I)T=M(h*\?o(N,[V-90JbE^>$*UVLG$lW2Dr;D!<Ttg)`h#@B$2BVi(5Q#D[pe1%)kSk'3"X!_&8@iu8HOZciH-s"J82mt46K]Kj",p2L:URW8LQ/srCFNL>KjBh*NcMdVWHBr[F*"C.0%]GI:C4KW^H_<:rr@_dkPg%:rrCtSrrD)$J&5Q6rr>=:J++ld!:dY$IAPW5Dg19eE+cV=,WkP'L@+;3n(N3UT!gQq7U39li4IaQOhE:m(95#Uq>UG_kkZp/FaYhp)A*9gOU;?LNK2-4"0UGOmmUma..6T3#M+6SrrA2<MY\e8EhsX:g.-j#.Q(cPZ>@PULAN7F&%(6k-#mDTWr`S1EX8jY^!eh:95!"\D6COam.91;gRbprj.Q=MVu.bX#Q4Ypchmp,r%#q/j\r?cePimCq&Z[P22)AePD/E'G<G0N`B(-O^QU8&fuA36;K:/2%+<8WX]@rKg?[mX\#prQo4&Y#EcLDOM>mP]`e"-i5Wpq'!!+>E!"(sL(skM2#H!"/,_+cNo#sbWepibVQEr\'e(FY,jE[gj+k/+AY:AV:Pg%8?NXL!sc@+tfiiQ28,j+0+6mt9C\Cu7fA(XkWJ&3q5J'\^"rrBi*rrBospdR(Nq>oiQp^&&;;H[<P.k9GKq2OO(B("m^?fZL>rZfp1I,@!FGFF+Bq%RC+,Rt'iXZ\>Vc#2"<nX`;ugPI+(#RfAiA+Akj\,7Hh#Q4Ypchmp,r$_RFKO[:I!2(C$rr@S3rr@aY4M)75F"4cslh^Fl]SYcQBucLee)gR88"3e"ZV@PnWBpE<$gp]0[u>bn1\e:WGu@"O""&3N,T+j6e`_MPN+a=*"4KL(&jPl\rXk+lrd]<-rW5Uh'alP1/)%,.n(3'%YO,">8NKqY[nXTscB!j*6ZfdAlfV7<^t?8BStg0X:u#j\pLuBYE*['!S8B8+Vf"^+oY:/j1_9E`l(@_W+8A_5!!pSqrr>;I1]IFU,Q@`N*`\#ZZ`Ep%!1;>QL/.$#jo.c<afaMqkP:>)ce7H.Mt:f_]su$PHqC:T7%\2h`4gD<0Aje)o^q/a/(-Z@(skM2#H!"/,_+cCr$**br;cK9qui)Y.=Yo<2tk"Yq2bDW&,uVn^G#.?m.dba_8Y7qH00('0Rk^HeK"Q6e8?.m996b"6pO0CC$IF5rk3*q5N*I+5Ni?LJ)DT%iCEej)@-3@o[!F<O8LH>Y7fBVBDDK,R4C,3-ZqrMrr=:g-.hVJoDHdjq<4e*aM0KjK;TfF;>WksHI)L6)@-3@o[!F<O8LF+!/+iIrrA]5RK!8;OoGE8B.TLQh;qPsOj7X\iMUV+r/*ZA3Uha%op1++*;!;)[B7-5]%brT'G.-b`tAPQPEUMVl:i#]dYB,._m2i&Wm@94VRj4^s4I~>endstream
|
223 |
+
endobj
|
224 |
+
68 0 obj
|
225 |
+
<< /Contents 153 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.5929cf3293b6bd13fad6c6716df5b8f2 66 0 R /FormXob.a0f0a8dc77b6c2aa79f4cea5d277ce75 67 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
226 |
+
/Type /Page >>
|
227 |
+
endobj
|
228 |
+
69 0 obj
|
229 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 349 /Length 13024 /Subtype /Image
|
230 |
+
/Type /XObject /Width 508 >>
|
231 |
+
stream
|
232 |
+
Gb"/lH]/rbSX>-/+X"9;#4f,'fXV,>iYXXo%a#eEbiNrf"#_,%+LQst7%DR(K'XY28`<2YGJp(<j.%6hUn!a8"537I7?\?Qaco?<5!gN=f-D)&/$G:#=s>D9BDIk$P.4.Vf#-Q$3N5M5Wk5;R]<fsb4oKg(JZS+=WiiMhrjnu(\#7aXzzzzzzzz!!&rZGAl/(&-P9u4`ESN&4CpJk7[tae0f3!5nHG4!p:4"6.@9$5!]`JI0/RF"@:NbQG`O1%aKq_boPc+kDkH(ZTm8Dif<@bmC2'-VFV_W2EPP%43o\#n5![l5Bh=&p(.?mPSVFtcJS3PCd`&*GHKH?Mn@-eOjNna;9ni*D+-OY+:,iP=J!'oW8uJT@.rN_[p5V5b-bE`ZSVSIID(FG]Zl.:[<`LaRks3D0PC!%Eh%%sU-FfS<9DsO^*mb).M3JT*Ic`UD6RkG>[5KmIWBKYqaD&!d>:sHkA/9:K4d4*(2;eq?jso;;1emp4ATpmn<=b*e@(U20W(#Mi^U=QkJrKK`qeS,4M4G.>,Z2bq)u3fr6^6F>&0/i6g*2^B5]%]&4B#tR@LH,(@"Y>fW_=1HSW6RY>'+B[_\'XFp0TZ@@>Hf\EJSUO,g]%b=BoG<LYrF2Fd%qZH:\OS8[;T]o`F`&06VhEkZ^`oV#5hI*tJo1$TP'QEB@uMbHVGs&mVX002aIIb:kn3oAZF>iu>0E'?Q!--!5N?VaCdISQ?V@alMu^YB73#e#fN>oi+_gV>e@+:'?)q4+XY2VU>X)u\>fV;noDR79(%!n($5WT3n#oD'9LpP.n_q>A2l5LE[#I(j`E31h=L&n;fMn'?#VB=WYAEjFhNr4?"Hqd,;Tc5(YUqfX`b+1A^kS)amFQT:[VCMiiJ!6lNQmb>SR"@87bbNXD++:,jO_"e+!&G6@":CmY+T>:7*5nN\qS50\!;4kZ""@3UlM1X#;#ljtUVmu?%!rtTO_>+'2o`=4X!7V7D%ffEJE'=7eIDGXY!;-BU!s$gUS.>Tr+)jCD5^gHD!!)Zmk5t_6#Fl;):`jX?!'ktJq#CEf!TsObe;"MpIq3MP_;L-Y6mg?L)X`Zg(/#PTZ_%0TWN;(+CZoGaF6[Nt)Re)6L90]&K'^V?`ag%%QB^!c,`0Nt"Zc$nLDnOZL@%.ZG)Q9"i@tuupYNW=]uej5fgWJoE'fD'gA-l+-:aaf7k3[,LM-6ZYo;>1E-p5A,F8TBjURR:2N*^/eJ&BGeX!=bf:9#S7J#FLDcNOsE-o#F>M!I'dH?j96k&,R*i*#c2odN8*0Z/I2nFg9r2/Ql<J1;h+nIHdXMLp:5RLqR[S>t?M;3_4f<FlJXZm"GZhWR`a?nqIO2"Xo1cuUuaG>teef8Uda:iZk;/7S:N;AHC8D-:%56NVPq;n']_;NQdfK!9e@Qe>QYNh'-hgD&S]J$NPes7];?o+u).eF74R&d;i,3(^l^Rut+AenP+cRId%h/U.`VDJLpq;ZkkFI4OSK2Jl:kWeY_j]@VSM/].l[[>OdGHR>a4@u:Uc&7V0)C$+AcWN/so!'Xoq3gp=B<^fs\^edOA'16)1(l1o3AH$\lbd9.7XNlJE^d8OWN;e7>0E+H80u\Si=oP`6=u/lU,?-+Aeg/=@M'h2W#FdAk6GUX82VA9V7S`BT:^52[>'L_$;T=91cR[>ZYgsN3_VS!oh:6W-FhQ9T6`duZYD:5)nk#"\m`.0,f]Wtp#ftlm\$Cp'$<0(a%][;F6n6a[NRE8diY">1:(-Xja+S"gm/`o;9/8UqDQcT7!l"N(Jt<]QL9b(4WfDGpRH5PFP**bK/rOeQsj*EK=t=qZQAEZ9]noY7tYDDFs2%FZAc(eAuJ0'A)FsPebP?9jj!2"l[7FsRLPA%iY+D9r3<p`fK%MGMH4;g=jFiO^-f3NYp;7KEIMNC([LuI?;ipKcH#rJ8lqOT1)S<+gX0AEfflJbCIjl%LpSFV?tVQ.f@V0DH@-Adj*]%<Caq0g"-JEDlcd3iSY+PB.$ICd5?i5.ntrIlB_M1dMs6a#Nq:L':WbZS[V:*5[[&S)o?FC>1,")?5Q;1E?D(NJpK-V,H]`<^s.\JCOuYB:"`sTKTYX)<p3OVeg'8:dc:DH(Q^2o,la3tr;u[KMq1]qh[VC1hC#Aa;<!4ZK_8349k$AbjS.sjmbibJ-Y_;`sVr`hZI\aTQr7d>Yn%ES</@d[N89>@+qUERl,Q/[Z9D@hpK?KaV+,kSC]#&V$LA?,E+6jZ@_3giJ1jg`oOn'9VY)$q(.dOg>E2TEd1]I(\1DPa,S8],llo1G>:Npib4lIdbjK1pe2i!<??VnQ6ef@HVN+KlBr`qn]c:R]2G8/`B0elbYaP!rR_jN)PR9rR.Kl*`hrF;IV8ut`mGhlUH*7E(!oHa>T/jM'E1<BA%A:a=QH3jM3$?ErX!!)Zmk5t_6LX%o0imlWdJfokELHEer"onXo`&6`(c-=MZcX42$JODuepa`P(^?U##>YaK8l?Y6W31eL;8_9G/B#6Fg445^@-P.3Z15TR6e8Y3DRe&tcAnP`m()BGO,kQZAok(_(cs>/oArpso&Ib9OBho$Af:7?Paq`=.M\e%0a@HG#F/1r/-?L&H]br(8:[$i7lcgh6iL9@,__,6+Ug$A6/YN^)XuF8[KR#2^clNg;-A(3?,OHp'iL9?k?bZI3gM`")OiU)W"1@I>E&eN#bDrrbKUW9rS92F^AL:Z'^2DRBDnI5+A+H$tl^nKM4JNZSD<C)-igGcV<ifF'F=GroS-Xf10:C\N(O;CYTPs/>D]a>1?ZqgZ1HjN[d<.*\rGnYf39J?n[\(oP'Nq8Y_`N>.Z.8U,0diD>&g'=,DpLQ"rFXP5@1Jn\7n_aj@o<9IdjfY2Cj`*H-]r2i(Cg8\07NHB>AqX%di7B>-cc-2A+BqT)kVC+P,HccY&#pJTat,GWi%d4)IFPW:6q%ZKn_WDm57\^,CIDXY3]Qn$/J%4<T:#+T2rXF/?>PWOI5q*>>P4k+.`8!>GiN%m6Z/7PmE+?YuT8jrJeP*01QM80mV,.3#U!=dg)0%*SHu-$.k^Ik*p;7bfkltWPguC@@bb<p29@pfJiPB#Y)->pZ]nK2`B_!DM+.!@V]<pc^Q`f2MR8J*`G]Y[gC[ZD:m45*uMUuYMN;VI)C[J@HM*?h*P+H]^^=nNUL7A+/kK*qd_X%Sa_t>8CJ*0KqAE7Dbc0iA)[#t2saP4Pn1cm.V17oRL%4#E0]^Jrr.AWb<\Xt"$h'^qHUR>?dK`22u9)R/bgpgro*,"YgLLGmaZ.n]aT>D-;tG`e>)-%ZbLSICOc7l8%Pj($%8<h<_:"!D;-GWn,(.hN&gqc\+Q`\B4>(iAo4"q:SOY[o\l\f-1_Y-F_d<aFT249]P*m3aA]E`CJujR<;mf,;;FApWq+6S5l\8aOa4,m?i.9+ki2Fj)/b<o.a,%-S`oZooo@+^8+jj^c2"4Tqeat98uY.*_p*IT[d$SCiqcre(S;f*fEbY?'5N!Y'#@;]nPs#8e<7&\'>l:Go;Gq1QBQSns2nV*HaTrgk\)0M/;C3IDf"1Z-f4:T!MFd,G",uZW.4`dK5G3i?i>]#76OAqM0n-=+#`Cfd+"IPZ$g<k>KY?6iK(n_s7Hb,^%KT%-b?H]M88qL<W79;%KpoFb]o;57ma-pOh%Hslj^<H:Em\@>5j(<oJri[,i_!=GF)TVroM=i:S0h!lI779n`X0(3VORYI;3RkT1Y&Z=V[F9?Mg\Br7!dTT5,PAMiS#dg\"?f'oj4Xs)?NIHWS>G+#gYT2UQ3>InVf]WV(QNp>Vtl>:ZV-T8L"do*Ki<>#md5\ma.?EIZ+*elB"W`2`?S=*a`hp,KK*lQ4O2gQ77)pS+Dhh*mH+IW%?V^@0p*rJjb\J3HLF<UZc3hp($I%fkF.a\q-&nbQ'&@j8gV0t3/Y&fHPa4'Zil1;VPZYp2P+B%>VCnia_]Yb1`qZA!U#rQGk)kYbX)o\h/2an)mp?$=KgB?m"Z"\$?,K^Q*BGrDe=DtN*^F]tp(12>q`M-]CP)NPZk\_d5NTs[[Q'DB/j\t:3m7ciC3qS'jfa]%MJc"[pXG3V3%f'*k!?<h?a.t7;7U@FdHkQBA@C8^EQq[WKr%c=27FQSO+A;WLE11fOo`Q,HFh-7Lte@k'Z+ukq,<C(Qi>.873h[/QJ=LUrcOmg&6hp($1[4Z^]_lbdf"c(?6ituk&BH`M#d)V!n)Zeqp#UCW)JCWYm%H#r<AW'jV8JDb-TI+gVH&dcQVrd?PCX*`m/mZ%F2)Q*oAG=laIbeaQI_"Nqm(,95`l0EM%^(:dB%CVD&[.F]7s48@pDoY7kNO"9T(/L9oUBl8Ht[Z?YPE0`Fq9RZ`RjSK[Ot'iO/E],ZtEZ@gh:c,'>aYCnPsous*.19Rq:VUNiFEjIPSLX8#2U)m^X%bjjNjsUC#aFO]>h.aJ6`?W3A5#AS398,<1.bpH:&RcL/b^iuO6G#@!OT((qLA@/(Ee$/aj[5B4fDZUkTl]u+ILc9OJ^YfZK4r&cQTQX+[HBNVUo4E9@KR+S`ONRd-)AM-gfn$rCrcFi=XOlKZ$Jl:Tf$SKo/mm$);\GL0Yi9G5$;G3&,YMU@'C<+qX$A7@(f?8#ZD+@4gk3fDV`Q^;b32$j^bGsBB7lj8A8N0tWOY+=Xkc!36In0F\LV>&EaLcY_\ecA]kUqaoMY9NDn)A39n#7<(2qIGXonGLjp"Ooermb=(FkDMV4*fJ3a+cB?$]0g10RWGXN2no5>N8T\.(:%V0tcHc5HF6;'Kp76s*.3/kX$)HSYtT;Z>7aXSt=LB,E\*BL#t^K*)$LuZ6S`[iFYCu-XCX[R0hK8s4V7l?+bFPm+J]j1(qF@A/o<EK*g@&?#KoR`tS;/l$>/.9Xs6_$PtFc4*OFVN'p-%+/iI`L<GG3>]uo+,hu&rcdd-54XD@YF1rmTickNuEA!GWQ:)1;:Tc_XeQ6*@J,[)o)i9N,5#AlJ%$qWYo,VNU#r`Oo39b`Fb"T>-HmjS1:a#qP#`;Hrj2<D0J+&-t#_F1Tc@o3BJ)e]K"@3Sek5sf["@:NbE'?Q!7"#."'*LVN-ZD78&4CpJk7[tae0f3!5nHG4!p:4"6.@9$5#FFSs81[tLtq4jJP'GUc6nL)31X9#^-E5IZ2HoBde*^-a9\;3'G'1#Rns#2K#e4fms*c<U3K5ln,E%aOV'S1n\FrgnW;%Glun!%#b:@.i-_8D#j:*tn[epd&NJ\<_"gCg&C+YXrkD$cYMQdX3"E+ZbUenuqf^h4[;Pug=!J(`*u.f44M7Hs?&Oa2i-DO'D]Y3_MQBY*I'eS*_YK2sc6nL)FT2#`.mHLa8DB(=aI*WeINXpNare&lM9F;_*W3oOH+!T:=8!$b4!$AR-m$8$o+1e3IN4Nr^MufZ]]Y#o0m?r-W-/*Z'>M(3Gs42YDGK'M'm\f$S$@Z^M,#]tHY(*`p"JXT2l$'@Q(PfO-iQ97n5)_P<KC"fb,H3R3EpQc"AOl?b/b.I&_18n&"#@qc<3&f\q=a7JBVWYOh5MT"^-j:=SL>!;:`aboQ*L[I)c?P'?*="s2!U6Nrt06OUgTAK@5"H_[Ce@j57U#I.Fd@0/S=C.Sk+>;HDprh41uR-bS0-CKn.&?[2(c)mauV5nS15esr`]Q.'E$>,ZK@`kmC,U2&+#15$*-ls7s?6)6FjFU'!F\l:Q)^*C0+dQ>U?1Sku__"iuqc6nL)E;oM8r`+F6+-Y^<s#KamPI/K^VITnM\V2&rMrsbDa08OipniaJnS_dIAoFeV^+^k!N@d9^\bYc:?A6BcCJJ/2`^7"'@C:@ubQ\n%Ccr?tTVW*34/`OeXn^^`h%@?>g#;ak4gfHt^%(@38.1sVGi3tDGR3J>]C3*%nY8rqN$%;NIk(D<k"iZjO*jaJ&rb,npY#?ub5%*GpA.GFN;T<-k1%KMOdahSRkLnTk1(\4W-W!.f=\I?A]q(=a]N6E6<J)2#/)6..W_s%U-!%*6eW$MJucgYYVl<klUHXTZDfG@4LP[LNj:T-[2Grpo,S@3:D=?(r;Z`Ao&H,M.B[=UbHFS=SGp*+Fo@$#Xk)0Z@@<]O/QRhSa7K0_r31;BQ%uQD[5VIf09M^R>.lVga'Q;.k;B#0lU%pL@C:@ubQ\mrl%.Is>2,.IK@aRl9\U/m7F?6,)6=iiDgY_EdKAYo*]Tc?*l@`fqW=^IA+(R\!%dKe0/kG<(T01T<S*g,l`X40Kk.n:c1Bc[8BF!oV(hGa:X>XGWt3IE2-\[e$[(R9Km>[YjZ9<M$`_IOS[fVsD1r@m4V5UGG4:u.>.>3@A!IlmU=32XF"P.&llBZn,GQ,ZJb'lmS50h0l25JtPPf[jTG6!VT2I?B6sA^5TD33:\F>N&KIiWMZ9@hV30U*nX!K]cIPHuqC,XYgb<tjYr&8.Lf8`V,.Ln'6$WD)kHO$j=;cW7&dF\V&kOcVY"Z#kr]cFKSJ03?sAac9h\`B<:Y'o>/Q6"@W<,:lJC@*Ebj&:7W,B1BWJb+`X+e8T&TDtZY`3g8\f%^6!=+C2[]A=1@A(`pNk;s_ET-tc/q1&,4gl8"GhZsb.k5<T`ms^JUN)"O1c?DBi5#FFqo0<*J-O:n@E5(@`o82HMSH%RE?R(Ac_"iuqc6nL)FT1*GRijHfk;s_ET-tc/q-Ub!+>O#]4!$AR-m%Ai-A^I@qLM7L"O8A#JuDK'I"EJsq?5(k#_K!Ni-^,!M#%8"-O>=&:Z-VP+Gfjsc6imLW))?!JfomGKN$/\F7).V&-UCkE6%bS!8nbT*rqrti-YNTqLJ/<!9s[3#6:\53$/-n52^egJGOff!<DBec3F?J%h:ULC:M%+=Ku=(@rOgh(`?:+)u[ZQnqBV]CICo^O',NF9>7DNU?`_W=<HWLqJCp^Xh,+:GB(n'rVc]/XlX?o12_$"cZ">tV)Vgf<P;]pYHS#R6TF9,iSd'u<l/'n_h#Ka$cu(g+<$AgL@^%Y&)hhG7!1N;)jIKE*;$Q0&!-M'h/Eaf8g:%iW#et,n2#onc>C[&8tF(UH4Ts4RlddY%1\iP03gX0?I\bM$.,HWkBp]C-(?@Zs%(r@f,$Bk2jPE%<77.#$EbMC1LloZ<YAaV&YpRr\Pf;^[)?-\qUYVG7']BR[De&Zki+!4TEj_Oo1q!%^eQ,#TWe?a>)`&S(`5a6h3D#.b+(ptem=3!A_R'=R[<U4>IYuf3]"2c1V&q&\hLb+[1/%B'*4bR(2N'X3Iap%!thL5Ie[hCj*YpJ`0d]1[.A."Ga\M'N28gHqi+A_3A%MdBePk:r8<2sn_ujH'2qm2i%@1NHp,?uU]'nWDk!M8A"91>n>%FC.CBu'A>,=AlEh@4g,M='2ulp???!UuiXZOm7t'.cI"&*YnsjX%,kio-DiuCB[HS<-@P*u='n^ou5OW@tYF1@@!@gJj38^/[]^"C`+.n7qhm[+>Q5DR[0?3h]8g4X[*s3-Cm+do&eX7tU,&R4*4,&T"a8#^8UVb:]!.[Lio)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDf*rqrti-YNTqLJ/<!9s[3#6:\53$/-n52^egJGOff!<DBec3F?J%lbX2TK_:]!.aoro)SjV6SCF63IKFqpP^`00Q`_D5Q:FjPESd)q;g+DgI-jNGUXDO]3PEM$-n;YEqS_J*BSHd3-]CWC?g5$8;NUATifk4ecGCc^#j^1p>@^a3+=TAK,m%FJ,]8sfsu`"H/X69pkX`g,;79dc&%-`'r-2-AZ*#-5C1XmG7?K@$c,\h2E<4@oP_GAcBa6/r6$bkf.[-45Psiu"2Fj4J+/d85PiZj.q4dbd-W^moGYF)HkYIgSF8;HGOKE-Rg6t4hnSrI?eP;BM_Dbbj*r%sm2u9*++EAGrg/*m.9;96h/4H&YL.^B(TqCoV\3h%[dF%fhnS@SI&HM,^H-JrNNX=krnNOos7kH;5'bm!+8DmB@[5$]m5>%<)SP6[l$H4ubj@BNG5bhWrRE96qnbRIi5K%F55r[m*<3YNo0qX9LN`*rHM-QUhu7f.gBc/A<7^lbe:!F;J!oV8!%6ImpuBiPdt_:Tq(oMSJ)^1*I,^VKrRtVkoQU;j=8qIOIrMuE<icoO]%oi+?DFgO2^`T3[thH[gi^q+%.r@f@Ue?TTgMnab^Od!%mU#>rLa"i07E+mJ*Ac(fDkJa57uq*YtAQjFrLI.N=%`h.Sardk.C)rGPoCY?2G*on`,bo\Vn6#jY+/G';._NI-;bUY?hr](IS%uWMpCBc"9ne'FX`+/:^KGo:`dP_>M6i`"Pp1q3MUS+Cb*5h;T_*I"2]Xo)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDCG/!gBgW3aUAj9d\-h')%^QSgt-<58=`;3TLC@F;f!$tQ`kMJ(14siMRr8;QWk#9l2=sWMS*fdFYZ8$hVlc#2<s8(YL7#Xn]j*.d/3_/;&DuM_RiI&hT2GN?>cXemRcNtm2r(bh(Sf8\5qU50"cX/m0l3lW:)a!Tl^QSiJ+aUs";VZ9,Rk"09#nc>J#6.L\qKK6@jI^pIift1tIX^S#lcnSFo<5lOlEq9Qpmisd:='["f<[?ZfT2pI.0&=Ta3_Sho&BhIPK-J5HLf;0oXW/3hg"Ih[q97/qO?M0kBF333^I[Dhm<<\l264VEP>prk8tU(HKr`Hq$WOBmB9j0qX1uaMLVLl9n"GtTG-sToAd=MKTeL>R=1Uo#5WPL?9/#MM3G,YiIC@5#9SEiiS<5DbfgL1P6K;>HH5jO)tnpK*IhN?k;u0&4'@cf?Fb%FU);hskJ-cJHgeW=%_n22cljn*I&K$empo_:F@f6i^]!l]gf8eN$_VS!I-;dP:)6+:i-a`@r(\"mRG`GmJGOff!<DBec3F?J%lbX2TK_:]!.aoro)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDf*rqrt39>Mf!9c8"3$/,#>Qa-k!7V7D%ffEJE'=7eIDGXY!;-BU!s$gUS.>Tr+)jCD5^gHD!!)Zmk5t_6#Fl;):`jX?!'ktJq#CEf!TsObe-DKS!)OaukPU0<?R#i.+?CP2358kG:cZgk45]EP!.[0FEB]Tec3J:hS.F]mF8hB:9=K3aTEmM!as$$IDRH9"^Us<0`Q%]JGdgldO9NpbEi>r.YMZim4E*Ko&'frNW35aLroch6_"ge5S9Fmcm;$TtYk^ho>U>SjFqBq?fm]W;A91S4[G#f5-0gQ[:g8&pbJ&1ll8jFWUDlW'k<gP7hYDoNj@^q5983q%Du#qWKc_"(mSFEm_"mj4D@%04YEqrmXUNWN@;4i:;VLr]q!^b8_"ge5WoSPW+RUmA#L)>73ER=YZVd9->EN2=NK4h:#E$cq/IVNG'AHE%gn)rG`#ea/cE8sTD2Z5acbAZ1$;2Shq,7!=S>C:.%Sa@$E;nr0(5`7?LItAhkPNEJT%f)M4=[m4"hk$9KgE7O[Jj'.]p<6\,10]%N9uP25CJISXj*oN1if*.GI+d^#jDR=J$ho2M1,jE93)N3%E(FL[).k4.gH8Z)OW1rAHmWM]TdU=KjQGH$(MNk^j5*5a`kJ`=^u&-W6k.J)A()W_0*Q305+Opi3o^UP1<(rVf;O>[qOZ@G(o%?2pPJoemnUPi]tTal<p;gaB0N2Q,QbSeDe<0,$@N"^\Q_QOhgch$(Q3gCi7;fFI)N^(Pr,D4nW_Q5nn4R-sY-pM/<uIIUn4CV/k=_^;X(7B2htSKtbG6BCljdNopeGSXfNMf;=kC't9IVc6%=A6,tQ8K!dQ[.RBo$mgD1sq,s/OX1*"S'9)Fi#MG)T=0jKI]rc,6-VD>O.&[$3>>01R'6j+#m_56"69jaOj'1A^k9l.S>0ej>Pg[kWl\jAIL^DsDL%CuN<6G#nD`fi=o52t@hQSq!X.Kr8qOfuu><1aAaF-/$mr5VfT=)Y&:$6Uh=l_R"<3s+X13tlljqg,)cRYSNc@>Qc2)><ma-Pb5W!(C-5=365J[S:&#I>:+_8Yip0a&J6D9_4fYt:`lMHZ4ub+IEC-X1D`ZJ2"V`RIUp='-)n\o/sd>Yimsi_tAi[`mpt(/LRKhg>&uYn1]7$ZS@0!iMS"4iAQ5cO[b7eT]dCg5b!KP<(_ak;D\^aXM*XV4GB!q/MP4q+qB:5*SEWrsnd[WK2o>cA,#Bo:[-RmJP"#J!_07+"@<:LN9>ro6IJcoFa,*b+YQTkP=r#A)M__LR@\RH^AXC0L-4h5*SG*pMcbl7CppV!6)eM:_#5CCI?tPh,]TU/[sN`XW@Zp!mZRA_"ds_i3`(hIttY3^E_!PdTPS?RZTi*9j7dZ#3Q)uJFh'q4`=tQi-ZonE5(#%S$bA.fX_WiQPA3;>";%S.Y[Jf6<),'`j:o[,B5Jg(s?9RrU??0n#3<jZR2b'[VG\nGR]M3L6'cfrCW?_H*t2=UcDfKI\>@Oa',UUef(%hcnVQ]r5dnN,>Slopi.]6f3IKoq$X=1rMZ%PeDf[j/M0cdFQBp3b/E`GK\Jq&D#[p'o&&g2?fMGq/=C9j59!mAIUj#TShi.VMMhlpJ(']]3$3G\kFJ7D>g6=Aq=&r-c%V!]>%tsp^;g("nj9BNJo.>I]/b53/'k]n1hkut0spYop1>/n!dtf>/6%H6a4.tgYk[@e`^8SPBuL1`>>*q&kZ+-s^<MG4%h65arK22_`:&l-T>iF33[J`aTiGF,nOX\[EQk->/IPk[mA_q`q@7]p>TWW\1l`F$:<rbZ0oB(GBe742Pf!7C92sdDb;%9Y7DeM/$a$`5W0U$#ke8ZZH]pejm3ioHm74Rsq.s.eebP%Gk"%\NGbPntLRt=<c7_;P+.JY,I"r[<N0(crqP.6!$(Kl4P?d=qDc`3\h>(N5Il?:[caqNO]/_[^fPu@8EQ7fN1O?k4.JLXQ;_#V342rh0nN48#%@LP1k&50,<uKc#r2>p([O5X[,JRMa-:R@W\Lj1t:Y0sk;h1"=bfo5cB0IDPL==G'*hqTkq;-M5rbbf*=l-rn$1=icT:F<*bWBcaMPl]Uq9Z2#Hmf7!%MunaE'BKgc3J:hS.F_3o)W(rk<h73S_pQhF:OfONe?qs*,n)l$fHC\#Fl=_!j4Oj["kSIB]i/#Xh86,d$0$qllQL>M.FE;r_=I0SO#*Al[;D;g#81e5CsqF*,4QY@%8n2mQ"QX!'K:7i<Q*<>o+JN358Z\$r@(s&*8o8HscQ?nWi4\Z+VmiG937bNe?qs*)`?2*'Z,2?t`h<^H.gEJFgTsE'BLRL@_h5j0SI<N..&YO7U2-E'BLR](=IRcMhct-VgKboPm&S%aKiM89MZH-#P\X++C?XO]^No3$0-\C$381n=>QYV?=(LOTd`r2ZN=`cf2a;7Uq.HdI&>BfZIbN`VG86_lmr&p[.Gj0#07%^@NRAlk/DRi<T%uNSO@!lV"F`_Tn4eg)..Uk5G+@&Uk,NKC_(kr(REL+<u@-?`5K,*\&,Ko>])cX\k@5e#$e:Z1-%o+5W51S#jt?gb5iIb0:n[dd^r%A/prCa;bmg'MN:ZORpalRrifCc;Egm`S7ub'I<!+g`?O[KB#qHq+=G[KN6IiA@U!jSmJTWmc=gK=;P-k[-'9CSFe1kP`:0W3WqD-NF42KDaU>ZT$5ZRT3'h)PiW,4"1UTBS1hjGj\YuGOBe9T_8O4G$6p;r,\a+XO2f3,.J#1kVh7G`=[R'GC`e*AZ*U^p3.KVsq;=4IEP=*'W1jf=MLH#'[+?LmDlI]4cM-T1PTJDG]E3a"qNca/]+>glps)>i$Kj&i3$0-<.aIe<FMJlq-74,o)X$9`\2`YaI]&W:mk:m[A=R!UE'?6VFdsPeN@1m7`70iC/o'U>XDj$A[sq%Y&@l^,VdRZF'$G[:odbe!`L5%Z7W:ON:6h=k]jY9D]fD24`YF?l^7Bjs4-g5?lMPl_/=?1pRs>VM;eMicMqIG&]:a&lae$TE2mhi.DNFCiqUf=/3$0-\C$.hiUtf.\m%jYU<`L62C^'!Sj5Bi=idF;;r$8SlfUZC2a!P$,q;=4l+3Ga<S6t6q-<n=^i&E\<as$(4ghK#2fa?"0a2.RJ%Ya?*WW%Q7c3MD+q+qQEk?%Jaa]<@E3"F5hE[Ytc%c?4HF;ic$0A8eC+]@aSYI<q)b5#?3>Csp+GFT3:TniXX\(b0rYfu$QBHN`T:_dq5Zk(FeW!YL+g'?dC<!Ad&m=Y!2WWLJ$p;-P)<<;8Mq\[X]Mr117kpIt@I-<_45.$C0r08c;K"LUJ&$0$H''BA,"O;er0qY:)0];s[f$oe/Jb&nI!p;rJ7%U$cIm@4E.">q1&C(N"$ChXo'61b]=))(?(]P58MLkAmpV?UO51/90OotW]Q5]2OHiV4&q9V=1haZBcY]=DJ:$^he!6;nNcp%!W_j0t0Wc)ot5(I/$Ht].^o95#GK(G]1_"l>@r#ICT<P\FW4uaXW.c>\f+.Nj<'lZ@D&'bEY$90-]#Nl1g"e6+jKC],D_P3P2?mU9*B!3>IhsIQM=FRi0@R9,?@HVjH#ljtNJb&mBl3#<:!2pDf*rqrti-YNTqLJ/<!9s[3#6:\5L@_0>r!IuG!<A;TnDE2J]*SH;c@PQf!9s[3#6:\53$/-n52^egJGOff!<DD;G.tUhF61c5^Ms4'H<''rp2N7r5a#NF00J_!?)V*,+6N_+oG6E@Ni2`hpc'>qT[tm\o7c30"pVq)*h3`@cs&oP_c9K?#VD,/!<@ER_te%JB7DnKKC]*DHAp5Hrg1.O9fjqs%fjslps'CggBgl@o)Si;$gmlUmJ/@&G5WmT?lA,0!$pOlDuft("3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDGcVgq<".!pj!'l^KB.6pX!R!GE!$FkaZ]qR"EBX@fA]]7aZ?7>9#6:\R=jL!S0#[Pc!0nkr=j#<L3$/-nZ=H*kft%aX!ru;dXCit`q#SYu*rmETqQlCk#-.TOAXj82OG(Bd"fMe"$Obd.!`U52^B><3p#q'HJFfI_E;gJ8G:bkL)rQ*W+*$FlrpubsV<@'@OjIBl:?VmA+55o+V+Xmm>S6.;mj1$HC$;]g-ZfI>q>VPJo8i5~>endstream
|
233 |
+
endobj
|
234 |
+
70 0 obj
|
235 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 334 /Length 12451 /SMask 71 0 R
|
236 |
+
/Subtype /Image /Type /XObject /Width 506 >>
|
237 |
+
stream
|
238 |
+
Gb"/lH]27NI@-#n+eVA'"+Al(m&!42\pjjqJXR]]gF27f2I$q=[>%]pi]'2#"T_;s+_`4?L6*"VW%"\X8\'p7B2+eY-qYXOb'"6aZ0N]98LpuG$I+pYh;qiV.<.pN[d9*fjE;U-0ltX1a5,Qmn(aK&_[k2^S=)BYk+)%6\T9FmSXT]]zzzzz!.YCtfW^bd#_M:5_"Ims&0V1b-O>;0+g=*q&4?eTm0S@e63qC'&-NS3@!dJJL_+$([bnf;=qmC[Rc_8-=Cb,*BL<"8@I)%F&)WolWPdUF00**?AeAMA8!cubpcsi<&-P:@//C4Shsedq,r?dV\[bA:D"$F.UpdI_c9-s5?F9)+Jfq^_Ks'LhH<9[0hDZ;5/(C23X-W/FV)VC<.5I*(1G`cHn)EEh,r7>/3I*SK[s(g!01.RrE+KPeOf]phLr[Hb\8SoA\Fq*f/*>VN^Uo*X+p`d6+r4p?mC.>W/>q/FD*.lYM77M>1'u9m8Y-NV%+C*fPB%JZ_GOLmB\'V?[YcrO:M8VM'.VHueXA*4=^@<%4-o373O_e$n(O>EP6=/_NPpEcYP"0<:)MXQVqZGOU:IF"EE]]j1t_Kf0R)JX[kE$^V"V7[fZAajl(MiDRW9@RFK9;n[k?FIGN\B>5nHF/Z#JH5CIo13\Rh+@1_,ji0KhF/YHGsR4lJ'#IJUIATC(*f[:su#D_#[s'YsDF6$+dr_=i0uioH$GBb$IV;>BirnlDr@`pW0JhVAG!p&m[+)2hpMA[CXC_pe>VW[aQF'ea^/nHg;NKO-XIYHr+R@f'hBmTd5>ch=p+3nNbi]>O=F6$+dr`V/hjL3#46q7KGT8l#;@Pk6a`LJO5:]>eK(8o1-nH-WgnPBO-Oh;6]:oMb^P>O-Y`#MTmpd?.NNgCj]U&:Okm-O>;0+g=*q&4?eTm0S@e63qC'&-NS3@!dJJL_-</p;[16T_GEqq\oM8d*#gD!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s!uS[Kcd<!Gi8H&-@jDrkQ<)K7O,%N_C-A1"`,O/94oGZ^q*3M6`]7>A1C](%&D4/QZe!8'^L]+@e3%1YKgI-_9QqSm:GH7`Cd5VumF[Z$V-?gnXYJoU73mO"IF$c:k9:(Tp-h2U0q3\qhisl*@(iI<)aLJ(8=C+WXl+mbZ%?,Z>a\LTKWW;7F-r+=#Q7bMG24X%UjQGf6R2DE?UYd040[?,o)'K@i@%3cB@dY+k>:H1aVTN6H-WqRs!Hin"@1%u>NP<_Xl$8/l[<6?c+f*[l8Z'i/<!ad?3VSq't3`_2m_=#DfoO:K>4,OK;-gD<^6)+^OQe/9S"f-sO8J<"V?rlC@k>6Y:pP>QC?U98&sb\1@kC"qK,cZRN+VMqkE\N[MkX<n8PK*TUpjj,(0;33^"bVY*2fmKH7g@iNKd[1#9cg@JH@A64!7`DqprmJhcgdosJdS,qXc<V4?eh!*CZZ`5A\1r;>,dS.Ga0#eV.M^[O[/K7kc3#otC-=L&SE6k%C$iaYQoj/r-IWVKmFs%#'f/a!F6K?ikPJ)32+Hh^S)`UCG/=gJ+Se]4CMcb#?qJ`;\p`R+lWR"q8&\NSXkW#UltjKN=j87]M@O93CX-3rB7tQb(Z&73_'BPZniJQTBf9h*>r-ZU;7@N@OPJX*V#BQ[c3&0I9htCOq5a\a%?C=AbW],Z3W7NtQ<DFW/2skO<;*uMe2ggj3O\`lM#VF+\uS(uFCT21R4t27=3U(!WH(uHjuQ:U4e_fa7t7qjG+?/uD/V(e-Jc*?+nMXQ9XbA[UCI]ChHc\UmB+*&XlM%_p9"KS4!=.#b;`PubYck0*9Rpe9pnnF.k]D"7BRAjr2qX+QhJ'tgY682PRF,<A,_SRYjDfF^f;mFqQ2:"9CmN="cF'q:U8St\a=Ntr>D#9G>U*(GML*5$qh%;/L*7,&_aU?DMM(YK=3F7gk>Sj<EdpQ^A&F8g#04t[l5Bh"`o%BY2(\AHG6ntT?"NkosoT!9BU.6DpgH83ck2nO&g?Y<jZ76X>#-`%NB8pgJ*l#01LmYXj.c53nB(WbK'&&q"'m-)e(ANX7>akiO3s-/>V\=#0L\L7o=bT$;=[0DJpT54O-SgceGk@2-^g?O"'78illMp;1BTG_!F6!3rYNeH*'O$n,q6'U!$]5Y:s=H`maf'/K!gC[H93O*`#Y1Bo1%d-H\N9P9,t%%MS:a[k<eIYt9/Ebl(t5)oX_\pEtAdTDr#U3m>FOmgIXL^%25F,NDmIE5/;IIrG`h)dPo#@EbjtZmp69Nc8^Y$W`I36fC'SpJAf?b:[JYrOb:/3T7cgV$6'C%LfQ[")W\X!I>4S8JKARC_$LW!n\Oo+9\.;rRd7-"@3See)>rHY6+biPPAYbX&lLMbflS=GE,'_ip[n*Lp?5k2geBa+mOA489g`Qf1FT+dE.&+[eF;t4AVV*mU?feOpH$djH&[sQ_p[YB4kjKPU,lIg@]@YSBsXQokol\4HW=-4R#WH')pP_b*=KO9BXWn-W-$t<9?c%4A=r^l?YB[Gb3:68_:T%ab2me(L=UkiI^J:M5#[;7(_:bT+g?mlpH7npmFZ":7h*U!ssHnJ+;O;GM[U8FGWCW6=6HmmtT/Fj=^/%5:$/#kj,&1h<8Cd+5?*6^%Kr\+u(X`-#E5^C!I)9j*@t)j,"T'/mGc#p%'3W=7&DMZ8cK3;kN^ljFY*?YJ'Q(A,UG`<10`%^651:D:@ZPXasnf%WLA54[djJ2&am8,Hn5`a'SM7X!7)mU]9K+;r-n3J-g;VjLACi2SF#*8)@;BHY;^R4`hA5@scV"TDnJ\QS2^3M<EL3mtr*FF,&dXn?%,tZ;mdd6s"P8Q-bkrA(1$b>-6*]:??95a$E@(PO=aWjgDeaH!_&#i<_Y8egBq"PM[h&G.;@]\raGuLUWiLXkuA5gUBm>HI@TJ"I2M):74gTKDhpd^<^""afrEk*ZMQrs6)26GY\gI:;S+-^]!l\QS)PV>uHMBl<u`NF*=aDDUl4?Y=W?1C\R&0]@XLPf?bkRo@TqS>a`&Sm9,p-iUF(o);ctrf=,?dTDl"F27rOqP3Qi6X@Wf_X6Uh,lJe&s[Q<;R6=6II9mbqTC`84Q`h_W"L=;R*(sR'*BfQ(Vg,6KB@:d;tTK7*-N@'h#38LB"UVFQN*ca#4l2o=bTO(9ofoqB7g9pIDD,,Nh]ROlM\SUoGTgs7sg8I9ok4-<HXmg(Np%31[G4Z<[n&`o[Q-e,SDNbc]hr[("q6>Dnaf#STHukpkI`=:DGLkn*o-VUA8md%i;6p,8E46>1/)/Cob_V;DKY/c22GM>aEFl;H95:+)L/]&d!9i<&/dh'5GA?$t0jS(WN58(_7MQdTMA)c@YKhi<Gt:.hhO^-7o=[#n74hN=DfB_dhktc:U:NNqmclSqCKj@@04d3%>U'!*E->160pRsrH#-<RA/TO2_Jc`=)IId2k,<Ig-lPf*&&`RR*f\F6qo%a-0*"-RE\L[4L>qMh?>Pr\l0#d"\7fMQ%H?fbZ^6Yt$;Ba%U=u35MlkoP3VWD[<r_<m0A^ke],*gN<$JT\[4/gCe:jPJM+`tAjHYgA7hhOo7<U'4OZ/E]+0GK0+Sm-Y(Qrd1G4q$rZ2MY"(JgVbH/cc!..PeZ0e<ipS3/O=Thcth2_<9+:p57=']-5iN9&-Zip+G'Cj,KSW52>@[\%FUH"a`.pJH!=@Mc/tlDJb`G-0?-E*#:"oLcY.]Z]S]o*Ki%3]9,QL10nTd5Yc\drIGu@ajO.bG4S>8";T$<DVr>D950NO.t$T*[5Au4;th4pHA.F4Ab;Eckjf&l<ML'DN726!U-6#f+OEE1kt96'*U9&qfT<.-qP]Qd[HYi#r[cRXop&=jXXETF8XBU>^/Zi6ClT8YU'idCW!Bjr+%"$T6BpirNZ=#;l<#PdA8gra(e0%7k5W%3dt>i:b+F4R:Scq]/i0OG4f^QUYc/W\P(_X&$O>)Cm>m$-YUK:,;No`C>H2L`N!ddbk>'5<cqJF]83Io]U8#4;[Il/3]:i=_sm.dS29`?QI;a2d5<Aq%*=`27TU\f,S"bS[Z2CtUP\%a:,aJoZ$k0njmaIl$XhM.=[o!4IGW5rfY/gqn*/1:[?A_qU2c0<Fg[;Z8a,KYl&>gc.3t&g(VgAtDUXe2Uhm<l]SS1j,\g5D?f\00IG3@Ap;cm$eqFJJ-71(&KH-Ak<j,[MSM,$ob!EXTj/CV+m_75taMRd;3Z-C&b,Bm)lf!I0iXWXP/i1*//q#c5N,DnJMHbO!hU`]:U["n(7XLIX[q?&J?eDn=WG_@=ksY)fqs:2NOa3Z@eS!S2j$TiicQ'D)q4Nu#b+0?M6giT(1n)cYA8Oq/6XD@l5c(51.L.1_)ThXcSbKLW\?E$X-Ft=X0=EK=/L3q$ai#XM8^DG:T<)SQh4uBid:KY)>G<-`fi7bpH_5KTOSuGtkgJPQjKW48d_sG]C47dR-o4A)hY"r5?$PN7U;Y[W-aglA9-2>.*]Xol\Dr.Miejr,=#l$WdH<sLgA7YA_5-qmeT,#(g0.=$ElXN0l=QY-:?Y@#Z"_5\ej(Z5l->2=ZKHFK4J[uo5*3;Dri_/OnUV]$4c2]BHAJXsp1P_l/l'#BVfKN/>.l.:)X>>lVu+gc/#$54Z4ZhRrj#,!%<&Bb&g`BFiY:R7Wg!@g;;4=X/V[dEDa`4'MF[BpQVHJ3-qDT6FS3k+g=\jea7`G1;n>UI8eS#DI-?WHM<$;_Ud$.&9^(f<leUc8_B7MS4aQbuq=CL[T-dEu8A55HPQ#focpQ=UDNO?MTs'Z_GGC?.Ir'W&gpo4RcA4*8-qWVq[-QQ;3K`+9T(IekT8DVj0KnYr#87$ghNJ!14FtYbMb,Hl,/B&!5INdsjN-#\B19!pPU,lIg@]@YS4IJb8Uj;+RF'PWf=TGPKKlo#3p93N8mmIJ%KTl`T%O$HJ$kUc#_H_B4L+ih=$@`4JfpKiCekTF&OKlPJfoj\!o"@k6%fg%Sfe:_KY[9a5nG1B[O2?4#U-E85nHEiJaJ:T1&^#/(-tnhf.U*t,d9F/-cD!,\+;BY;%c\(LQ?QU67#5*gCn]rf`'HCs+qjj!o&&CfUf#Tde5d%4[G;8[eDng4]*T&m@V+V+A)^iHQLh2W"[&A2n/cjJg^qAms/;fU.u!Kc[Pau(WR>1?HZUZf=$rF.?6RGDU$G^qWfe<R3RJTPIF$DeY$j.kQ.97LB#h\4=RR%g%(gH*#H'X4KptG-`$.EopaJdFAR9qW(+mlf_HO:_`*$_6&kXZ%3FG/DTV).GIhg"f\Z58p-bG_[\%jC2l^B&[/J8JqTngn`?/1-9)m,+^%q#5b`8;i/s9H!pI8/Sh/Y$0WH**,Ft0M][]Hr5*P>sm'/tC6elD7tK<pUTPZ7#eNN84'1G1\3F\C._X&_dmlTeF)>pEaC]QMc0Mo#Qq>8(O%a+<#mo4h1ai2lN@SHJ!?I).e/"Le%eYWYi2V!T9$p$10k,$hQWs#D3-2`ELm2a-d">J_Z3aRnh0P-<#%%TmjbagkVcGO%ZHR_<i]qV/?;h0j?*DC;DmmaPB;[A->4h,'N>jKHmi.2f-<[8A(65jmj!&P/Y+@tb0_QnbD:)t!g-/5SH*cB8@eE!NiG4KptG-\Ul*4Sg_3is3J"=[2\gqK&5"ai(c<!QCJ[Xe3&Fa0Bb`b%GhPm'QP+?af'0X3@3,&:)1"O+)CeoM!c-Om+ErgF:6$]9G3X<P[sO;8>$jklEjA:iq6!U=r7&>g<H!H^l.I.6(5g5e/s`gl8&Dp7;Mt-gHAhrUkq1<?9s9P-4SOrprp]Gu"<0Zt[^me=+2"bep'A3MgQ,j\n*E4_'`VP[.03b?HR!Xg_VBIQ_F9(/XD>#-UO2<QeB?[o8H(*^\Rs<<7Lj-E=:5!qlXUqbVBbWoA'hpm[cPedZ+SElHNLFW"6]k<QR>?eC@T_"O?)[O:?n[/L%$Vq(=S!NE.:oUfKVjuN6K^$3P[Vs!2;cOS+ibXo(u^eD1a*.q$XgL#6cL>$t>jo8etXL@E<U`F[>Y*.Cr2P$7JQdTKH$CDhf_A\!L!BU*SFF_t!SLcf5]gjf!"U1CujmILn2i7^lHQLh2W"[&AJ+M2d<6+G*iW>M'XoDW^/,hN57W5m;dcl"?aqoC"VHr>RhiN/0l#URuX.Pb>+ZAe]0jAg=9f$qPREV[oWc;=m49X2Ie^)A>`kKkpHN_ca`rUY^F0er2FJ]Z15]lkF2m-5CM0knc7q?_:/?lhNJaJ:T+`77E?`f>oqkUN@I9caHa3l?Us#Am3g"CSE.qJ@`;=*hndrcU8=QS=!oN<]8ZtsQLOVd&lRBO\TXrj*1:$e?D1(-_"7$k,T;DfN_d5V9Zk1&bX2%%:td/ggK+:`&)aq)j4>k7=Cf>$lra+<G;Wib\6FUjYBo*(mj'%l(4_"L0e&@VW#TDbOVM!N+Dk2,nuJ+I=QYj4IB4;N@<YeB4Nm>3kID?$M`cemCMopb1L3'">8mruN>IR]M'L$_#6CerOe@JaDZq4e'i'%l(4_"L0e&@VUXoreop8RQnk"5=K36JDEi^J,7cJaGT2CerOeC&9R>7M$ksm6(tr:Xf\j,83IVFT"NP8cm`\"@7\PfUa2k,)!c*"@3SB"L]Z`Jd<O(4[BWI#_D@LJfmAcCekTF&OKlPJfoj\_@t[r3cgT0#_H_BI'>a6!;Hc,#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s"")(UfqQlu0:t/R-dE31r&;%&cBprIYdS&!;m\Llu`qZ`YdEs!pLUd'[&F0rd^%gTm3>LC[eWifEL(qtjl!bJ3/2=`:oGL@&j?@sdl2NCM0?[K=5W_B[eG%Ltmq'#kh,9Y;DA7i'O::J9js[SL3bUt_.BeUp9Y:g.aE+=br,GT`U;VL*8=@a0RC0ri[dl]=)3foq8E2Y.[V&]T5W%pThg(bff6]6`mM"T5n8=JGS$Hf8/)R0i]h"'OC9BQ%d,j;ZWKdTA1qSfNqF1V7WbP0LA`BII2)Pc6],EOK#_p\=QGmul(7rTYiC3jJumJi$p5j)'s(l%#A\X8bo$A,BgAL<F%A't$lBJs"Q*2ki04Zs'2)TjmKAmYS!hP.bKJDO,BVQ</;(U"tn<!1g#n1H/b>[`Ts);NptL^C-IaRgUI\i_8+8G;U!JNZTm6%Rp=T?8Y^S`7:`s@[6>E(DlbF-iM=B9EB[YoX+#YXBs6B(N+TOMSoSYp&uJ_)cG6b8"j_LlA;Q9GK'C&m7XJ^5VLR?[[5J>JUr:)ZjU3L0/Qq!mG3b$IY&kL'!^=2SOZJG'eA-5E3J"t]q#aXPIWhA&(0.?GGYeD`h1/pXu<mVP@L\R(a%gWa7epjXA%6q5<#^Ilq('Dq2,?eG(1j:G4cg,*h_-K8_X=I5au/.!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s!uS[Kcd<!Gi8H&-CK*!$DEK4TI_Q@!_m(&Emuc:Cc6.qtd"3<e`6ub?t8>a5c4+553j0c'q.XK_SJVG.V)]9+u+P?/aMFCKn8bgUhC]`5KS!$BYmLMG1:SgV!\kJh.qsbB*jt!7)5jq!W%TqU/"i9i#-PpVW?tk@7^a*'!`ao[Tud;f#ot&$Y7K(#'8$^]!$*a\4%+b)aT``AISb47@'3I-\QBbTD6+^]*J9XgnD_IeTGKGiG]HY?V[/7"K7M&R_TC<,?Isb`D/)B#foPPEV2WL]?6rs,UO>o\ESTIJ;kG*BO$-IeWS#H"[.m59:W17"K7M&R_TCP\`!(cWX(>Y\E^k%mKbrrVujdlT]l=j0?)-nG:Y4[iYOh&&%hEgHYT!?Z$[L7"K7M&R_TC<,=3^+"<eH*:M:`s7;5"q6A[=o?SJ+jjs\IJ*\,0s6fo37G.V0D*+q,]Csn/^Y\?A!\?3Td.YHlI?Mgg>oOR[0A6?K1K.4N,;6h*aZKAaHKQ).qUJYsjj.<449+^Vs5_IP:/7ArRm_gFpCUf4d=\kdQY]R#V]X$kGPuh7pO4nV2R[Q(r[V'I^U`a854L`5+8a=/IJdH#mZYE7s87d>'Q\`.8JLB3*s%ZG4_]9,EKX+*^A$L]LQA"Y^1Zo@h`if?k5<PSp+nm`$.'79*kK4rCY+6i`AE$Q@cHR.aiR-EVo[q+<rk,Y[YJ`D-LbMTA'[@5gg<2?W/)HUG)/ANeH7W2[Kcd<!Gi8H&-CK*!$DEK4TI_Q@!_m(&A[u>!$T^Q[TEKHf)""(jkl'82s5Dl^Kh#i8UB"^QLF?hYJG-Y!Ha^#[JfqFo5!\EgF$@'@t%4B8rLX$K7hk%ctU_]Y'T3;nc-5iLE]4.?K\eu!1K[<D/]DiM.(bOpL9T":VKEFpaT#%0Ze67IIG.KTgQ#DNrS1Jf8mR,qW$Oe0D!pu!"I?)[[5.^Rba3Qr%tWoT:>=;a3hY--2%8cCL_9&Hi5<>NkIG5H2?liUF2'C42u2?!Am*'gKq).9P/b)`'B_4gO"\S23[Lt*?%.ir5eD,'2rNr?@;)0ji`uC?2j0-5N0)P!1KS4D'/S&aL$B@iRm!C[-dSu+$+CVlKl%h_XlB^?$l%RpV_P.-7AWV.Y&l0IG8C!U6@4kjB(iU]cZIqY'T-tO^lGhe>iQEc[YrQLEBj9HM,^_9DirJ5SG[PgLia$T.K-C$i&B21QpXu)Lq^FF6Cl-=hV'<qsV<"m^qrYgJn4_d?D"o*ln3GWq.#Za@5uMhRRt*)S]P]clC[Z\cTWP"jg\^4`h'\]*b3p@!_m(&A[u>!$Qm[!<>FdgB.G/!4E+4#Q\`P!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKRbGY#69:Ol+66_!5LOt4TI_Q@!_m(&A[u>!$Qm[!<>FdgB.G/!4E+4#Q\`P!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKE/Fc!!n-&Cd3+(-p\CId<,.kqoUgj7lb_SCq%"V!:in'p<Y5?*l&#b4Z#mQp<P<r\i%>)Fhm^t1jRi"X!dT9n*Mnl3nit-"-eB(TkSi&p9X.:mD4:V4Z#n%gAZ_N@!h)D4LP-u-h"\'ik^7=^.RN$$UHUihim6c%R-7:j_T+6q\&:/%qn7G0$:FX&%2`4!KV)9GYJ)cFmLO'ORX+Dp/:QTjno-2@;=Ho#PW]niVjq_]SVVl,jG+Y^\UeZD>X(nJaK-YkRH:ePOCKgS0XS&jWm(NA>;06Z_Fs))D<D\(D.0AkfA]ecL"9tn]?A(jGkYFGBoYnY!"+m4SQ#%)se,9[[4!iZn-'@a2Wrr05UYp4g7*A"MJ7@=SCi,3L7<p]ibf_mY`lbHC8C*>Z\Ot4D,E+O<!lfHMoMR@rZFf)XJ:U[a/,[aC"-pRI.%LZA^s>(HH\Ugj">2otXi/1?"8jn%Zagm&2NE`#763g@j.`JaK-YnC[Fme[@CGCTP<!%7Xr2P@1pUGljAO'hppDgm>?>^3T$hCA5JjO7$;?2qU-jk4Zs:H9RtG:/i3O:,:'d`qD6gr2khl<_o;!q-)MG=6bA(TdT?^p6h29f[+3<cT`H`[-lFne)d6E(ImMT[a4?ANpWqNb1*HXJ+4QfD-t_!kG\&+D7Xb[1NU!0U?h^aJ%W1n^8niGQF?`[bXYn`>Hp?`"?g5k=NqSh0,(GBr8a(9-+!FqPN'UZVrdn/hcIAUF#C6n<71`o4Vlc.Mbi]HpR.O^iSM#NnNLiqm;l9$TiY;SC2)G;Bol3*\I%"X:XC>pcb65Z\o-t?2NO`Hq:5A4.Z5\>jnl'FgKU;lEP>(MhZ'lE(@8VA5WV>fm7f%!):jc&>_-g;DI6DWG]&#d-;f1<+59.Yi3DZ$Eb8("D43Oh]5X`$o4]13^$4DAHgnkqP0mNc<:g!e?HFpg<a<&Tqd6YL_HiKefHJuF9MW0T?7>O&bhkrQf'Oug(U)R8bosOX1U0+8"J4<gQ4Rn^hEH5"<e$8Z(3\i(2MFdYEEV<X3>L(M[C#=N;@dRS4TW!HVWlod97+/ifH,>?C_'7h]=*3a*nVN[!c/BAe%<'O4"t(lJaK.FHIVY9^HF,&YWXg;`qH0#QYqd:5TR'l1_%2m$fD->*h!;f"8Dl)LSho]!']>?m;r;nG$b1a[/@PXEo2F^rBoD8:!bfN*l&"C[_;!REnUWMHNCP[n:;Xc^%%*&lDn_nJ#k-F/H=.fbV,LAGMdg_;jg?UT$+R(gM?X#33HVKEcs+'`s9$Xn:BH#^%Kp?eouS.r*Y`>C8L=Ho!LBdId"rLDIND]-lq3Nl,iBcFV8L$hub%T^AL&HkNqYU:F'[ek'dDD0!"XAbT?qj[E0]I=4&rXQY60crUWa9m/_UMA)"Uh=SUF\kNnfiO3%9/8G5-/jc>iUp8t_OC,W[l@si!2C3W7G0>Amb8[(@.&+m*n(Lq>9Whf+)f%T3]Tdu=a)1<q)GnY!)hugZ/qqCB0R0@iU]<n!X"iZt$5BN/nSk0tbq+P^U:TBUdHN5/OC"jGO^*R)N8Nr>JXJm&O7r*Lr12>D<4Y1rDZ!YN^>rgM[$8Od?4fM2.m/_UM;qo2&!o!hP!4IZ[_=djmJF0%EYW[LI@!cQ*C_,G+fH-IcgB73N[YL`rp&I:,m@e6u4b+(<@scT:Jfk>n\a[Q2^ORVf\Al,9"T\<$[YL`rp&I:,m@e6u4b+&NHY==6&)[QB*h!;f"8Dl)LSho]!']>?mGE<NmT+,ZhFrrp;*hhU(Un].He5Z/b7q(4m\7O(/g?"Xmu?`;/.m9<]d:QB@XG*NUg:Np]:X=hriPjJ0!RQi%sVpfFaJf\/MkCrW+U[Q*ZMD@k0,D/:fVu#3kLd#]_dO5f&c2Z)g#,Alg%6TS%V9PgC9LiZ@3I@PH)0N7D2DfhS!ftDD""1.UB+OJfZg-WF^GN3<aq%_e\!W0q%l<8]-X(VBHG_?.gGPQdftd3ZE1-1_uJNX,hk's.XJhC:7p:W9EZ%ea^_?7CKD"mdA5,;oA=SEs_o*M<D=6*[n@-r%uK5/JMSFZa)m?^PO#VF<[d0>eRpVnLK2l/)N[)+'^IDg,R_YF\cgl;ESgsYQ2>FIB4^K%"$UZDfk-TeY_^S%F3Gr;*0WYe!BS89,I":'rqig0k:07[0Fc,gLj:_!%]W!gHLeK??::Y>M`N0gqKf)p2")NWnd;-_c8Fa\\7;C!5P>W$b!N/U6CjEDP9QJgR@Qm)k<hnh<tOb=J*^7W*&O]`3F4KHu#EFokpkc]A>knT2P_l9R=VMf))3t*PLN05*R72HmYcR8rf[_q:\$e%0u%YmEIDsMM:@knrM#R-\n?YL/Yg&(%5hl'A])245RCo3i;t^BR"9=kQ%/W1Z@6>!r)c(%uf^p60YG270_KKp].aXVSVs+5(N$oBs9aN%q'`t)JfrB"5"Z`#297T!4IZ[_=djmi/d7o:C)OpLuuPfgK1fi4c6bh]%mMiR)AXE1tWkb#I$?J%CQN2!Gi9@KC&\e!8Bli@!_kq_"Q,3fH.g54LP.@/b^*sjWmqmdcQ,&(5aUg>K_pVb.`JJ@Jfit[drJ@*mB3ZG.(>t\7T9"qD2QM2[BVKD4e@gn(H.?$k_6@6dGBMlf5=>4gE/IGtX')Xs^qs-Rrl<;quWQPgTK`/R(2Q&.6*ZHhhl+ho^:.l\'Mk(2%7%jJla-DsYel6u!35$hp`0IujD8Z3]>^f(S7JPQMkaRiGllg`s@"B0=\(B7SNmqP0_RZjN];6DZVWDqr3dJ;kc;9q>nMS$Q+8F8KJYjtnj8/8-3A=)cO+gjZEi615_$VsVYGNuluo"1l_nMu^PMa0rHqbhVN+6h4idfg:.'>U@.J'<>VRrB4AnXLFf%V(Ko"q[-Tsd`/JUo")461Hl&h+gtHmXE.@f\Ec`f#R$3*T:+X%^THa'H@r,6baCKB16,ARZ#6a&Y5TAORST.,(*(!k$cbl"\Q2b:fTOP:/)I+&$UDgZ.;Ct(\&\CX&j9_$`4WXGfF3ct(KV@']<nm!Q7_hVZhc99MK7rO8$ICj=kd-om+cF3ILB_T9sL:L$`'Tgb3K:?l-^fb\)&a^VD8N2Y%@QJ($B4Me6BW^ebb4>*5)N6q9SFYEpY1Lgo#35NFs(!c]3r<]8'5Pf_.b+[nf1/A'NtQ+,j&kA3Z9A>Na+#]4)Af[8N7B(M%NegS^[;.XAq.+?0%FcE>9R1i=*XIB`dVeF:u]Y_6-NInMl/Sd-c2gL,AAR`2]us!.qZ5%&_N)SRR(^^%),1_$kun,[>99nVg6HiVngdpRM&+2ITs1tWkb#Q1j?kQsNd"OUKL@!_kRn-s1E!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKE/Fc!!iUA%fd.BfH(#8"L(#h5R:bE!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-W+gSY!9ePTD%?UHzzzzz!!!!1#lbto19Bm~>endstream
|
239 |
+
endobj
|
240 |
+
71 0 obj
|
241 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 334 /Length 75
|
242 |
+
/Subtype /Image /Type /XObject /Width 506 >>
|
243 |
+
stream
|
244 |
+
Gb"0;0`_7S!5bE.WTS%&TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzJ2]*9^/P~>endstream
|
245 |
+
endobj
|
246 |
+
72 0 obj
|
247 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 748.4786 0 ] /Rect [ 128.8789 215.5069 356.8608 227.5069 ] /Subtype /Link /Type /Annot >>
|
248 |
+
endobj
|
249 |
+
73 0 obj
|
250 |
+
<< /Annots [ 72 0 R ] /Contents 154 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.818e77063536b529a26e1bb99104d9d8 70 0 R /FormXob.a92d560cd4d454961c737621457fb30c 69 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
251 |
+
/Trans << >> /Type /Page >>
|
252 |
+
endobj
|
253 |
+
74 0 obj
|
254 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 63 /Length 18587 /SMask 75 0 R
|
255 |
+
/Subtype /Image /Type /XObject /Width 659 >>
|
256 |
+
stream
|
257 |
+
Gb"07G>MLJegL=E9\!3_CAsTH;fCeuF\VUPJ(%]p^7NMj]<?-l\G!<B#%OmY+EB/D$mlf1)iTUXB:Bm"#q"gD###LR-OC(na<ETQA!3X_UUSQ063p-g_$,JYo;c0Q9De(`ce<0:]maT9$"&5`a6*Q2lkg0&"Thd+K8'ZEjk!FJcKo]jXNgCoSF*pG5?0"6s$N(%cT4W2]Nm6%k/.S/=3iod/Sm1]KmI+dlojWk6F19:B<T(n![[!AQ=Y#Ds7?AZ1I'QTiD%b2S3I>2ZpK\T+Sh=_/0KsUSn`L\Y'9R7/+2`d=7i'SVaQGtV@/q(Xuq3Yhsq+=*u7\W2MNT:[^J)VaueAX!6+mbY8(Xmj5/k5SPacCHc45mZAI.ug=)[eG^]PrJUh0aI!fPIYOU]:r2,S8%bZr>r%EC4[b\uIU>4`2-*ILs0*/W;A$dj^],_nc4m`<c_%hhl$<7<$92mhi/@'5ApY+',FtUfnO%\UU(l\>k$TItQ?`(\2oqV%5%r^F@^XFtX)inL<_(%SS6d%"H7uJUcMdqT:j1-j^%d#F[cmK\,Lrd7'!^:h0g.8ZdCuSc0`Yk>Q0:[Rr!o@IReOd*3YtsFgos:5u^@in.6kpHc]Cg*X701'>be7G`I,^C]8S,T9WRM(g@GuR%7,Lh-1WKq+mT?)@E8\NO%EC$I/`6ft1H2ELa,^1GoV@%^d0)r^7bl'R=07\,:E9E-pc7L?ng@PDeEqZVfr&ISA=NdBo3X_+f<InXY-C1gM>j6Dq\9?jkN]58\Wi!X).%bJrFQWS_!gT-(cZ&b$VfWcF"SBfW.,=r57G/bm1D91qOkKeQ\gYGS$)3E%!@U<"ESPHDnMH9&F1R>HMjjOGWElR/52%UhgRo!VOg$Z5ObBXnOd<LpLk(]!q('e`?++%VBR7sUYmF(mdoOu*o#P,5WMVkQf0QF?M)Q?<<i@5^%S=ZTCF^XCN2f=A(pnV1[gJ*kr@0$H-?,sld@\dS@'7@9TTNYX<Q'.VYV\/7Ba3aE".A"</([$Vq5h9@jn</F%l4%]S^7p'2fJH+'\N:KQX03W^<ct!^;=1I@(g<J@_1X/pb\Oc,,Uk#npqq[]WH*7`s4dbH]=P;HSP+V,Ip'p]E2D3ksAT\^=G@6Or+^hhp)9CIR.M#2,VVjo<?`IU!kL=C?j/;uPTr>^YAl1e.k@,Q#aYH+i\>Gi*k9\,;+`HsF,Z7ORWc_$E1]cc10I?F[&!iW(J13^.uMKP/1B?bl]gjJf3nd'kRaZ=7s:RAUOu^n>H*S3Nkg7ct%XL*!DqE8%)X'ju4aF;F,NU\KZbRS5LuCm[&b!iC8-X8M;FQ;;;7%DT)+J)!/))JDI@C@8SrmeR(Xk6@EF#NsZ5_\0o$d-51N*RE`d=rhOYge1G`nU<rMccE_`2.D='gB'sTaeS(6kDlCmP60M$pGHlm&U/&-m(]V,kh2'-_j0;jluZdnTI][$N3FTK8,?^dr&IRqP+a(1!8O`4FJd)%*oainkNP;d]+N#"IGV;7aD7CA\bm'F5+)So_Mr2^,?Iud7hCnZJ-r$5O(3`;g2FXr-V16$d,q0Z,+\)@:lZK8YI>ZOPgVV3XCLh@/9UQb/jeW=`4X)GnsB/pf;3=PR@!Ed=s/J"BjI+S'Sqc_rchqO`!Ipdk._"bVteq0na]OLW]l-6%6B!*StrsA1!+X%0sBT1@P@^b^4=fD`?/3gYdk9iSpZQujQ;$\%<o<IH*7(EH,7)q-sB2C_YhIg?WViDWOnI+S&Zhk$UtUjdkE)2?Y0d2q1l2(Mk1M3dGaf2r6b7*4(YSY)r;_7'?n,,]VX;lJVa%`G@!/:0>2+UTm?:?%K?*SnAHo/RJFm6lN?-1YTB]p!$_T2`VtWRl8D[XHJp^A1Z2<Aj6gb$"b3JZ3NS],YqhkaGhB>"*D1VH>c%**rA6Ec&GK&BL3]RnR^bZ@b/,>5<V]a6I>!hDb?m>N0=5$bmDQsk[=`Bu2WW9Y`!t&C]'DDN0*c"g?CC6&O7IM"d+6RjZ+V#V2mJ<:][2#_e0^1VkajT#BPVe+GI+dSHO]KY[lASAXM#3cF!(Fo]U"[0GoLW)0+qOd4#\Bj(k?g-]Pqt38ds-(@"QHs(LZa6pZ<O#@1[Yp0)?IQ[-*(ef=-"(kX_SQn1IL!OcM=Td3N\#2QqZT&:EL#*o]B_N`SROLO(@78U(W:icjt5:smr/d:u-,QbUbJ].RqJb-(oP(r:(P<[2W[/51(I0+.$Vp)UWL6@dF`+n@@c(m1joX@9ch92]'8(d23]ctYW?SJuLi.mD:;r_BE5DF;aA`p;-0A"Z/:?K?>$&k5"^,Yd+6*8<S.^ln%l5'q$E@f`HOnA;X%)>\VhAC=u;:+P!JqM$rMrWG%K..RO#*un[T"OJ?cChRNrANF:G1<:^3Qu1j!KcsB.@??ms<49N2n$mWVch%\e0M%a&3>$5rfe^)dfF-qtQ`e)<K[CSQOda<r?OAf3U"/P?7Q?q@Lg/oH?SB:iZA=u+=nUtk8W0ODXeS<Ep^^9*3,o?$$hVlfQV#>T%N[R=SjrZ(j(i:a'DGs;J:V8??06uJ%.MDDH>U$QN`db6II"U@NNfdKUb/dsA#q7,W6:[/ml;Y"Q"/T$@dT/2RreUJnlfc8ZIq_in;<cj/RO;)&A@^4)1%99!nWqT%ShsLC.O7D,!S!H07r7Vi:TbGroU,-O*9eS+OD4j\1-X_f!@]^-kDR4NRoM&WQjh#?GF37IerfUX$XeojGeG1G&?A-1\o5l]'IdfU7?@hPI0UEO[%I7,hMX^Y_ooWX*cOE*XL^g7R(K#!Zef1-mC$-UCRQtP3OgBkb7a!a%uS]h;kN/&8Y^V0L&A&]";&@5J`mKg]ndc/Y7ESVX@oRD&sKjH[LL9m0-49c,5;eIbh#:KJ""nBd7snhs^j'T4"N9KqTf+^5Y'QaaKZ%R=2Y/H%0PPH\pkFS9i8k`7Qd+s+<N.0pB(=h#)@R*pQ5/2fr"^C>\Q8-giM;M&W%eZ9G@V1;TC(10QbZ^OL-L`#rOs3H8i5qY/)YDZ6+<lQa?pSduC4@<#D$\6$M9,:?V7f8^m68m*M:*VZ$Q%it74b+`Qn_[EiQa;dJAS6,ZKD3N.Y(Hsa'kcLH%3R%9iQD*-J&QZ@1bfsgNmihWM[lA/A8DL]S,-N:U6XRbDV(V_3>>Tm`MO]G)/![d:^ET4E,LBqV#pMUBir^[C$KSo$O7XE@mQn5O4EBGQ]u`u67`*EM_V)f/+GpjXd3N]&=`-)V5qMS"cZ.u?,ONTEmXp!n]rEQh@FHs`bVWi*bP\s;dPdjOEhc0-$^1X`(N4LnnA[HiILl)3Ig^U$F21Ig!s+N?9+gur\tlor0q.<S\bnRO:B/=ZEY5=c_2J5\:pJ?0gHZ"iL&@Hj$>6m?=3eL3gggY'pnL*iJn"ac[b9[)-Y_iuk1F9cq&;9]&Utpk(\K^q:EoXhFdpC:4gWF/1YF;TL,[3Q">g#oT0(AI=2K6J\hY;jP4kqLl7WXhLMRV&iE`+Kh&1MbLSu!b#=dM"Ln"F<`CF2]N4QCCG?7/^]6TDI\5i4;D]URg5Q^.L\^POujRg\;M:_dX/=?gSEFg]MqH)KT(0@`#\6n>:+'GF`"MBS%]d)+IDtjD5I".[2d=]#%j#donY;"sPXi%b8J-Q8W>a*cRX_8J_ZgYC-n00I@Sk/Fol=/(\Gmiu!F>&fNp[_OZJ2@,I?M?d.1OB`0<B95:J&YIjbNM7Nl'aQ&mV)%NDXNlU^,nQZhbe4Ya([&TJ!ARE'9U((Va>P#Gf"WnQh&If7lGbQUiB1*PRejpT\=F(rGa,A$lR:VK*j2Um@ZEEi$O_SE%aEEmCQ%uQ8PjY(c[dfFr2/)2\LdfH0C%emp/'Mfa5rfeP"<R:MO%Kgh3KH1'J_[k2-!!UuJ7]*kNRO%iEGrk1<n*'T=g&Ts:b!j@57S*i9bXU*FK(iDaoMZ1+DN2u>_c'*#KTiJ4?b<^RVrTipHq%K'*u;I/FPW*lFmFTO5F"Tm$%:bscscYJF48^JY@5t5q`r0^L;+qRF7,t?Ym6XJZ/5g[[^qm5XB=^.4JVc([e?-BLtipo;o=U6Ga51DjjJ\7F"rbESG=H`B-[c86F4(YSY)r;_7'?o[80R&QKlIj<Zkjl6uA'3,O4]-L\&V./C4$u?7Y<6U6G9QAG0=Us7g%s.SE?@/Z/ul,B[YB)n#P*3nr`l3GiQSFL2h5+4h8B/-FOZ?NEl.TXdp"(ni0BEk*tmQ-n`.A6)gUVOQ@O]LE=4`N8_-BAr2=b!/>PpP[`V\Kk`Jg/3nCct3\i?.4/<bDo7$AN%DAok@'+VEaO-d':2!smmJqXJfrrQG8a#qkn%"j%CB3SOGfA0m$]iurfp@PE%O<Xe_Dsuq)_on'CBnh8FFfX1L/Yq\(Vne[-#UI^aD5c%d_@&X4&!0_DZt_Y?IYTKr;IM1E<OJgV1#fc'nUnVp_]Iu"?[1#mVqXmNtoDoEDdkJZ/:tQ0_ojGS:Eg07lHkOhBh(kQ\rMkA)H:aMD"j]PFKMjKY%.m$^>oB)(D8hl'M].8.nhmj=g,jY"K*k)/`M_f-ta88.Z;1TH_e"g>BE)q/ln$frXuKS_MeWUt.j?PSYUX]7dc>0hB4rq4H$cCi^%^l9EkWpJ7==<`"tSjbHoh<I!R*(e`c^/u\:7L'b2pY/`YnPc;9\A"1NXmsfD9PPOZ3U;LEUqc9X`FiAiWSe8G1er%3#%C/2Q*376\33k6.\\Lo6`/(]j4:#'d;3f>\$HJf[422E/J27"h`^&"K@t,$afACYE/cD[AY!N>4Ifn=EEA)\=pDn&.aKJt/]&Pk4k@\L9G?rq].-#0"EpO0kbLaEnp*\^@,Yo5'0LLoM*uk@,,jsQr3^V9K*^4pr0;7K&;#/)o`W3V-[?J*"gG3teoBA.;:>C2SD%cU9s12\lj<6kF2+Mk2cHjqQm^fdC;9%?#jk(@`Q`kagHkF_^q-WDqIjB^F^V;u-^WdFQ6oFaBVjpeIpn#D#]o7j_pYGtUG'SADk@Teum\QuaA]NNBqZq2Vpgki9r%.7$Y"LhrA\@D,NdX35q78N+(PcK2s-pt`AW=bQ\Bt6TdI\4DD%a<%X=[0%MjOH"hS/EhKL^;P1mu:qk>lHSGT;'dJ):0SrcI0bo(ZS/:Tq3YDj.[GKHtQLr$T.*h/s$bnpY8XM0lG.g:$N2E9oR<E6*aS;+TqjqH(=Xh/s$bnpY8XM0lG.g:$N2E8]A!JGk9_XR1-YFqK)h>J+D3MiPuPUb3,s3,mfkJHH,e*&qoq^juRm%NIHIi4smG#7__5E8\N_!s];U3,mfkJHH,e*&qoqfK\TgmDU%$n:im7i=0^47,.%*"roUAi4smGLSDS?q[F#T3,mfkJ`BB'7bk1ei4smG#7__\!\iW*rGn!Z"33$(YB0Ut!I$)TrJYs/s5=o5$9AD:mT3a*ZLRt?'TR$=5lm4:QaaB1m<+G=-LB5__B"PE2ZQqgc;sb<>*AHk.-MY0\7`Mqi5CUbHVfB#Yl?cX?K_)r_Ik+]Dp>OHFp&(jB:ess)B`o$SV%OKoToZM\8c<q(l>ITL*m>D0708MT*[SPgpgj6C]l);Oe%UQ'E0s@oV"YTSN.Re/1+;!$R+rF'Alak`3#\*1#eeY$H?9lSGV9,8OEG&qJl;@X/]/PA*n;T;.^i>4Z-L':37mpDJ<hh+B<::"\-TYG:On$*A+"OOhGsdb:DFm9+ZjrB7'UaKC_/T)2;^7g1@1Lr_Kb-_r4Di0i"(a=N_?Ur-(m0XgKu[K%oJO><L.3],*Z\?aI=>Q5h9,q;uJ((\=OnDW"5*39kfHbq!JLh?':H<B!WlAR?,TBH*(3S6r^kRH%Qb3en39+K26;&<os'FBrApQu)"qP5@\f7&rC_rQ*4u[g:*X,agRfaK^&(4DRD_\M)e3XKI'+O:9IX"!cDi`Mng(4Ti,",SPY%iRa9k<hX7DdQ4gcJ2SgL8\u*$28pV-[J97sm>.obl.N:-8sW#&NN2;HCP\CaZMr+kmB1Rjl?6K7H?Vju"@:JX"$sT&NjcUe$u%:Yh#-5Chc']rXe8<Aih"p,L?eqtg9.mL7Zj7:aCf+QMlL@6d-B^!nhVfFW33D-9Xtm/<gsh-KE]K,Ch/)-CB!d'_]s69X3Y.pa:LeEK>c"TbA]Wed]4d5,Ci#O4?i5(3OYNdQM^-=g8BrTSc$H.m+9E7IpnZAAm&SP(gcO\2K=XNneiSAG"]Mmc3JGCb1?>M`4`k.*:4":r:5GnIHX8-=4ViM3\!!\@_YH$["BVnDQ:3HI"()3St.(G:=./]F>Y^aoPM:Q%-:Tk30l8,B7M1nQroR(AV)I`!W"1o#c;T)fLj0\&hR*Ys/$mp+e:8Q-lDmh8rBUJCH5<j;n%<pW$a]aP0)Dp^a1["=pkm#P]1m=p<3kM5URa[-o>89&bs'<M#'^g5P6^0?6S6No2F38J4/VpaFJk1jD(m?[O0m8"2q=79/5Ft:`PGWf@9K2)Tob=BKp/J5rt*dar[&iUD.t<kW6;C'+Xu:8od^B/9"PhrM/2:hPOI;#5UAaVI!u-,@J0b3ls&5Wm_,E>trKI2>$EqZ2T?Jo0t!gTrs^'ootJF=^tJU;/P7%\uU-0jfeK\T9nG/^KEsFKJQmMERi(ags"9r4gKM@+[/`imHh`3T*AVCF0IKD$>Fm?%-2p%8[rN88$[0F(AdBX'hS]]K+V.mn\Zb.LuaQFHP8Qd%7h9.??$-Gp=>@Y/',!#j0nc[>W,ag't-NGA*7)P^XKU1p,mN'\%/AjL7Xf#E9:XLl_pKlFN39-4&k>r^c\;^J^u*U4LV3Jas1e,`e[>E15O!hd/d<%=e"($H/A9>b5[p:(!6G@rTap*$84.*Dd>%?)3^"Mp&R0@$fZ!8amCG<fB[mU.eP^Nd*NogqNXc.an2&:E@^<\`VF'QgHc7Cm9t<RY#d?_:Lh*.,f6BU3jU:3P!2`E?]THWbcd*j[XPt.#!O-m>F59[Ni*[nYT;4mZu0D?eg9CPe:aS[l(5m_/Nl6K9msMG2TGTS/?-n%d8p)P`;P$&><1%IAtaZ;[ZuPi%MdY1XRh0s1eu<":qQXq+^HqE)3*Tu)JV;[esF%_[$2S(kZ]MooFaZGc?2o!#<N;V/_c@jfp0_AN6r(n'7H4ShD*]O+F?OHH6-.0N?^JRO^.."C8pZN=kbX3I<7e*^;(.R8:-&)ZXt01\__RGHbAs\T76Q8b;u;J-=(lJ9H>U(4_*R5GLbrj_-'./\7iY#:=d#A-?lKSj4MS.nlNC;2Zb8D7E\IM0L4>b#][o`\9TSq#?=m1`#!enjsMQ2?D8`L^u1UL0i"[:G(JQ/$H4*@.KfJmW^ool!b,W"d=sG>rFsG6h4Of.<cCuF`'(7O`b:(O.f'bE,E/WAC)VZrXRU:VWO&U9<_r[($Q\u#h@We:TU'"sa2n$PnO429XH)(o.`Tm',NIf/?#aI+(U=:#atKAdFt]SMNK88'O]://dqJugk:WS&NfK0]p8?T7Z-B(8NtGM;=`&C>j^*6oNqY?0HUckoLbW5-ZbB?f_BPN?_Q,")a=/+uS[G>?B\,aV!.S\P,roL1ndlkI-Mc2DdLNs+\SnKV\M8*I<faL@nce=Jb%SV6"&*")ckU)30aFOQ`@X@\B02R=knQF$0(n$TFTUY=OO8>fiZ:k%dB^F>oQK'Nm)HuWOYNS%:r=h/q`_jcI!_NXL0_[C&eJFHPFQZkGd>iX%ujnkX-Esm6Z6>O"=I(_2N>T=m:>EIYKL0BIc/-r>??]l'mHj;?XdMTs(+>YO#Xm&]H,R3U^cE%#.dTt/[8=ZPLrW2Da@oUBg9[UHDRON!SA5%qaERARB&D?@O1e)Rj'j9X$,7rS6mi]giT4K8Sh78W;+DrQ[+bcO);7hIQ)98U172>DV1OC@M[ia.dS-+"N6imM"l9=*>!ETSM"&%L</W1"H13i;(s9Aq6s]a((Y;^e,Y8r3,pBc?u14LP%gh'nZ8',;uNM5m[@'#1L[$n)&YW^Iq3*bpuV#?88!mlahsX\qM&Eq,9p(mK,2o%*]3`#eJX%2;T=dj-^gR:!refAZgb,d$@Htgja-aLpfRPPj'PdaWYo3!=JIZR/*L*kmZb3/Yq<Ku+=/a;IL:W,dU!!nc&4cq=o/BfT+u>2Tpf/9@"t<FZ`q3C$qq&\SOV\AVk>6M4bgTd!n>a/@rF1g2"O?H]NB%MSB-R/W'Zdc-BNlTm'k'7kr:*M#@;9t19rtK?@q)fI9uQl:fR_t&O#s).H5!5Amf-&rV/2;f+d=!#8"@rRfXi&0a0:(c8^=%+L6E?ClJA1qi%OV-%0U.`*$77P*O0mh\UAgKNT*^1lMDZ#)b_JUm;-sC>ET7,0I"Lqq@M<[H')%<R[bX;:%\RYpS*>o[a8:q<9/%hZ/5Q=Z)Cu9bb](1m&*m^Sl]bVE=@Dr*:k\2)KDkDoU=%/AqBE's;jaCZeM$5u-NrfBVO,:sWuQme*@4%WbbB[[%MX/'r+[-2m/Hf>u/6pIq[M&\#.D9VIZ$=3E^,_)_W+:u^VtV:qEp7n5%HM*Pa*R7#!(=Rk12\./?s(=mg8<+'Z;f?t6s$QNUfini$!d3ONVk)Uq6W0e\?!DV:d0U?:M0D=6Y1%rk.*Ic%kGk8WEmA+n#6K6ie=-C)&i*Pr+TfC#!j<Dl&MJe4B(iB`354l2P)0LHcB8G,f)'-r+;0l0(O1hNl\YUTDonZ(V"*=Ei@7hn3D06(Tln%W<nG%O`KT,cJk,6a(>m%smC\h.ClT`OZT=N?Mg5-L;XuZ3cAT5/7VQ*R0cS4'E.mSn0W=,JcFE9=KZCrG@_G]El5m.Za`q1XJ&hXr^[o@*m_c9BoqiOOQVYf'c^<\<@WfuGR8#-SXF@',!#W:'9%8;TZ7YW'\0-cJLmkrMI,#(cVRi<F6)htd19.(-O8@,nTkYkPq&9^Y`5MDH;H3V_CZW:\s>r<Al9$KJ`$krpS*E9+]B\3`k*K(-,\m6e(V)"3+NZ/!SOqZrT&/ZN1GD*KDPr<@(7XS$(=;Q7&NX-kRlO3U]99=a%I0u+cT-2A4V8pd(",@2m_Ze2(j\O,/hBbG7LNlr\@8KofVF&t)]E25>W$#3:_sM[DUBh%@NG!M#ECf7"$gn:PZB"HQ6]mGra&%d8ng*]_"H$(iN`kZ0='^L#j$H2Fb5oP`i24;GHUKTm\e<59q;KrS=D]6%ro#fF@OeMTdYVH\*cB\H:2/Oc&UJ9od4i4u3C5<>+BTm*qeHg_f@(=K7cReAF8e&qV'*_&HA=f45dhED0#+m8?UHWBQ7d>*RcG<ck`VI._SRgAl*\o63bG(Mq2#N,5i[Sg)"b6/g^9p'83OEjVlat].W\*Ylq"U3QI$Mbn_$CWX)aWna`]"TqQO=aETf..W;88,eC+?L#kDZL;qM_)$LYtkHco6cfItQ/,Ap`/:nb#tTE=H3Vp\nd'B8[mWkAm/giA>[V6-@-La,Lberc=Z*"Rjp^*$?[!&'A`-3h)NCMAs%mh[du%c!Q1:0Mk,\2Vd",jm7o=5o2l7PQ*-&a'r6[t=gN010j3Y!!k3f@LpLT]2'ebo@Upf*?#("kD)Rmh`QWnr%[Q`6JE+:KsVp92,[kL?[OEfs*i'6tN]\(5DV)8#\EnkML5/mEhp)h/hpZ_dd1fd\HX^cq2Kk-Wjpj+H,\]2H+ZIV+DD]hJ-C,@IY6'8MjIk..#\dWBhLV]YnKnUSZpR?6N*ML;DkHD0T`7qUDKCC,U)!9JF9/n8ZWJH]4AqJ,06\oB>naV?_F%+YSVH'*^%aR@Qn@1F]BR#s4uB+7;]S;0+B0"F2;kn02HHipI%,[D:b.:!N`"KD"JeL"+Ya/SCn8P#dS^!OC1<jeiY,+<>Ykgt]sM^.CsnL'9)HjZ20r+uIRWbfB=ld/KPEUq0Nr5ie.HKRu:mKUp"8:n^'+niPe=iJ%X2^U_Ssh*;>_"SD:VB@:9XVO7fRRC;<)hshU%!l675mNG!$TaCo2-p^EaL2)I%8\?QQPe.o#gsUY5$&lBL'`nI_eOch&DAMr.hKWDneA^eJ6BG%^jIsR)@o_:YG$=8b/\O[!N8]<hO9"OI3>YI17C:EmG$BpIBnu'SJJ)&RCt=546:!r.7j7%V.MIH8Bu@ii^7r6REQpjMaY<lA,M#p8R.I>mZ#+OKQWin!7LqY[_Wb-eQOQ&'IuYhUSjUt\:3rrgm_tc*OqgUE6]kF4j-V67,KK<F)\G#I3oA?#]Bp84_7B]-X>&WDZ*_E))h+id-0PLm`/U?.Z!f.M;-$^AiXV;@gp1:P.qHlD`4[^#>m0$)TtG.dZ1eEkhbI@A,:)[dF<ucj$gs;Z.TW'E`;)j,m3&f">!TXl.&Vpr%93XHC'N/r%C7JE[r`+P!@"pBI)!&]8gXMal4-u^ZCQr%9J2X$OO>+u-aIK;KhRSJ?H"ZN>l<XXUh%UC2qU_aq&T443L8'TFFeD^Z_3@J.rdXf&DbVOAs!HS/"^o8Th6%/Ed*\WZ=RJ](t4]:E;Z(j_8)@/%IjCShjeca=Mr@c":KfmE_i;iFnqFJ3P`uAKUCH_e5B">c2:-<'3%mnK92B"l%D>1Bgr>n%')/i4/ImKFT^X;>Y8LgjV?W\?oB-FYd35=r!TF)ZRP)HJ@GskKQUMU8m,A=,=$]Y])36D"/NU5LmrJcDfV<[[sN;s9N0<EmuU21L#<&<E>4P!U(I`Me)WVR_<^Mq/JXo9:)iVR^Mt=\5mVH8E?B(kPo,2\X_3dA-kA^octm"NrU77ee*G8Gj/7A[*:n3aU>-Iai`:"s@)OY[LF$^QC:L1Dif`3F>jYq+5;=>6`$IL:[Rfk"Z03c:(8oEo/$c@Y+$X7XY;?VYJ:;fkg'puT[_BI6dDRQCS^&-%G#^Ckl:,A/B3>g_F"&YdB;UaC\T>?.g?/ks5A_='2.dR9eV5mXb[1$1F>J7Uq,KH<9n1/_"3]oEA_pC;X3%cDnJ,0AT;Ud5Loc*FP?lL9"sY].I;<0\"M@gD[n,/<e3%pJ7?VT\#?UuPpOl[_>&QgaJn7Q1R;m2h*"9$0(OI*8LqP:YraJN?9+WY<mr.]q*1A<s2XmYob87sdaA:)sRW!hg'f'B2io\<[kDX"u>u)N/8,WClo:`!Jg:6?ZnXJ?0L+_Y+V43$+r>[@m=8G!rL#&g)Dl=B(%T8rY5=WdQF^=0<6\MSQWj[c'"i$j4cZ>um",aB;M=6deL/s/lBD1Fs4/a]Ch8fgU%cCj+e:`OPO"Y0^&9[Yf[IkM+W]I33IABDNY)Tm<BD?K#%QKd-=5^',b4b)C^?<<ZB6C<r/m\"\BrH3SE'V!J0I`:]/_*Ug1GlB.oJTZgaP0mt)(<-cd(8B(BPjVn<mrt6L<>a]^<U,g6\g[P'1C3WR*rrY2ZOD5':m,/9XHcj(>m5!WiM`-j(>lE_A$T+KbQZl+j#7cP)jcY0=`SS+`?3gH%d&se]^p;RE.c%EKdXF:-7N8YaPCMYB2:4"=VFIjBi;q"/Ot;&GPS,aD:OX+E1k;o7WHCO0k'PP\N(;9;spZ>.B-6aI/l\r)+Ptn,/GlmiXRB!?1qCGRo]1)s;c16JSaH\9BmYH5_?.gT69SL0[(UcGo02DuZ),4Tpdnr6fZA\C3uqEg$=Xhde7[>nJ2s"ZHTSgrqDV;Qn6RZS*!j*(\0&\/ON=m;BjAO.ur!c;\Z!AIB--A43`:RG9U=hrpR<]k`OG-#)\5fN\a+#dqR[$@:/8iaceLdIjMh9NJ+**HM"BXj2:B']rr%8$[1-9?_m=]da8"moq,6_B5$nD@-0GE^u>O*a(^&'Cane766o@3k/MhNQd9jBT8s,Q+.P`7LjF]<!WDLHJR:?hn[%SfZlFXs!(mpPYH$C6^KlsJ'C5GgECHJ?A>Va?^3/*?H)_OYB0Ut5mD=ELdV2cmumTpMrAGo/>^/H[!?uT?CUI"TY)\F^[[qKJP0QCq9iGs\5rb3.'LT;+O'W?=5h2mA%YkE_1u^Lm6@aAp`\1*Yo9XP&'_g(?mjj[(4fj+.P]p0)"RN8"G0rdfUl75S3ts/PohAEVO#q.C`%2Z7KRUga)4Fj)_bOK$!QsA7$/5.I:gVH;rI1Zm_(j,<g:3?5hl^X'I.M8Q\5830;lX6m.CbWL>4rrq3,T=^-0QmV-p@%(Z&-*Zha!KXo.]J%Rm'N^[-*'IjTRBIlVAL=1gDP&`QROh.ng\!]8D-1[.8S5$p?r5UVaZfN;3,Xb@=qh]Faos2JcF'aQ.ZkeF4mr0c"n/eG7\R(o`ts..osNmuI1(+:gA+jbE*Q!b=JGsM.c8'H0CKuXe-TX-%dqf2c;+Bp?G";)PI,(guI+D[Y6Xm8C/?T>Sfr(h">s4@Ba*^Vo!.`tuC*rp:2kYdALl!Fqo)f\6OAQME?H"/?Ys$KkTV9-CllmLY[O]3^_M#N)[E%nrO+)^D/3k@-IE#T8n.*aJmS`?=KT:`XfHGql;"uIg;WP5gPU.f07DQ!X>UpU2B073`nDlNit<m[Z[E=[IXfPe\;ka%eVBP4!=VlOIu&_H_ooo0NqbXf9lkm:Kil@p+r:G,pJAOufaBK1/@UArr$HiSWKlQ#pufKnN:*K+FJJIqSKs8#GI5hl]-#:"-OQ\0]Vgc3"Z-pfO'^[-*'IjXO3<l,l8@lFCDHg0gFq5,&QD?ZS`&NBO/!D_E0FqoO7p,^5Y'0c"gqK<j:@n-NTHh$ZVrh^SVD?ZS`&U3]1K/O]/Fr>Xtj.?Xf@r^jJ+N3[<T>%9/Lg*1.@)UlT!s];U3,n4'+N3[>YMW:]`3#\R0]MN=JHH,e*'!X$!/l8X9gRrM`;TL=Rc2&5!s];U348kHM468N2n\)YDg9/=hS+dMLms#!#7__5E8^L(+<k^a^OQ+J*A69e4q[X<Ha+:@-hcK8p&lq,HYs$?i7h2EJ?<M2btubdN4?pKa5=X]cf=P7!>kHdJF0*p2ZjkFVgua+ccs6/I!a!PYSHQ9)%)gi&bhl$Jd]*XjmF?uO<].$'cn1*b3f!.4^j5()hK3Z#u9KiJ.)6B_"Q0IRt1s^;\6Vlh^A-U!kpg/$DJolI:A7b;_d:'R$`-qp+>LH"^K\-!k+0`g^IH_SV!fWmh:%e!T0J("`-VSDMEb?@`47K:/4RD!\WgQ6$sdA#CCDuHNFu'4Z<HZnEhZ3&3XIi'78f0.XG+?B!YjZIZ4`FYYPDL52%CXi550j/<5'p"tnig;nddaB[=q"cr>t6Vl$>q:0bSgI3N(r8E/(WAFloR%`_P*8d+-LUoW?4^%8mB14qa^4>3OXI/P?4X$/q>@-ZE+a/JVn6pSu3g(DMY].`BSMVVaUpYfP4n^XMY/_DjHH"q2(>XWoVB(P&J2TF7rGf/nn"B5'+d9R%ZpN;A*_=s8cK1it'6;`FQ^Vm!K4M#Osk\7tX5FZqDATj*Kg8.1UD9kd&)IHg#l.*iR-cuQ*pSs>d*Pp`T<$I\7;3uIimdl.!Fd*:Z#NYZ!AMV1jhkZK.NO(e/>VWh'ge_7CUh3jd3+.s,4LPXPF*=?(/QbqE$ZVr1\[G:'lbk:Z>&;;S9(/D/8p'br&:_P2^GJ[,^[C&jn+F%rHo68_dp,%R7sBuM%A'0TBWN&<5\^uha2K8_[WcIf9uVqceLTQdBR4tC(N<fT#hV<Rn);Q7\a'ln1bK$p2<5K`"h9YY#U[jYN1&KUj&<-3;9u7OCu(pZEibh_JP0RfPLH;WIQnHeN0EPl>?X+Wo?J#+8uD-;'npN[29qj'%),s.D8@:M19J0pB67bUoiOlE#Zri_iNG(5lr",Ah=6p:IB3:>hs"GuNoE2X_fai4+HC=uP=qtBb5Ihr*0%/1]V!o;6lL!RY,u>>5.p=3b#C3RUI4_X#9'`H%q+*<Brtr"C7j,-[rbJ/8#CInmN]^=3_IBuNT1t=R@9fCG)q+5N7*#Ua^\Q])QjMN@J0%qfVNGm1n:^Dd'G?8E-HVT/dt,g-YR4L<K^MWihp+t&;^0Cm"pic2_@2iQh+F;c5m:d-d;7MVFHFafO)D\kReBW5EDWh7a3YNm'XZfbX`iUqlT)Bf#.iH3W*l./%^/oVM\]FccjVWcHbDN0'j6;[#\77GdP,a#7-'%/T]BS&+@tdC.`ItD3Dqf>9%rp70=Nr84:5*cH05Gr(u$']:Y/e'^;]3C=CfDDk8$7C&^!;@qK\`JiYbNhf\C#K&u*u5g;)Q-!d^YkF$373oIebQVLjn*;%Yo*l53^C"',;Z$R*@#s)Z%%++SX3N;7MW(*/Fc#!#"&X=>/HJ()1U[:X%Np)HrN5K!4+?aQJ4q=MG7d'[V)b6erl[lr]q+APljJAOSG:fP$lM0H4i3Nfao28!VeF[-$8]BV8hMVpU>@^nP1ZOSNf3E!b/f7Q4kG2bnnB@P;H`_%+'&9KFn/$\9o3ID%BA>;cDL>6a\_RS7bC#GanE;f/'DOB"au_UW)n8O@W&6ZiT,i18T*4/7f"o1(N0FafRO2Vic?-E&nU$&(C$tEs,o0"USs`Y5]KdGWT+CP?SsckOU4W4[lGUn'UET%P)Fl$C4&qgb10c3o?>R`M6NblhLe@Mm@HEo;,]+iZQ!IQXH_NAo?Pl:cU=lMG_^;u/eHsqfeaGaIN?Aa>"rCU)MVAP[j!TGToA+3&e?>bZd7_?ZX(`b9&H20&66BBW`n`_OL1F&,9BekiE(:;6@Q*Am/:[PL"QE5.5sBHq8qmr&X<oT;U3\B3NhJQ_0TSRhs"nr.6;L&-2Qo0eqnc-B==p+d%8P/U\R?TU#S!iJ9-0A3hOZ*_*[%PXXC^<1m(o?/6Kj(QdJ&a,Y%g6qj72!7+KRf\5.p,rW+6H7=bLD>'I9d*Q'A8=h4Du4L"AVBhYE>Vn`cIpRE;r,5#%'N]Wo&/FOC@R&pnS>?$$op1=dbB!4u<UYSB`9>+S7jn8V+"/UZL:(tCBn?5i9+"iQtM=rQ]Yp:]mDVm7Q$cc=lEBmu>kZ*%&F*foQSR%5+-e>D-m7f$C4AE<EDJJf9g=jA)_@L=o/h=Rter\1X<`S$QV(ib0Ln<(cOi;tXu'1#Ue=*l:[n!P[<Xs=P&X<5YtPl(DIYdrZk@=hBbF]QPiA7i(0lLtG%7+TD@roa8>DEjtG)J`";$4+hPcV]S4%hU@1dhYFciZk&+e(idkHNmFR_aiBc/b^iQ8u/@ZPFu=%WY9J*8stmlU3fVLY4;F]E$;<L%=1:U?h]FXh>L(^i0B`+Tu%`Li<enhm$[on,G1=_Dect90bKs$+"!G-0ju`U55(Y)jb>Lh9*5o1FUu'L%h69mehJQ;)OVBsjuVr0I+g0X3772$HtrCH?e3bW&FAk/Yt'l_:H[X*=BJYgAH9r7Bpk>SB-n[C:8jkFp6JqcPq[m%1cmdR&@ZY,oAhI"Fj-njNRDe''[rM"?0D)\K!')[lPQbN9HCVeK!L1l]]$SYP/cn[Z/69gd@\I^p+.E:&mY$7ERt_mIbPhNiY^#r]YJssib4]FSX"5dP^=d^-3*+7:@CnHii%A(3G[Q(-!3SqH'(2>*iho[52Yjq4X7PibYZ+j0Pso6@.K]rmDoBsIHBt@b0&5`1n-YIjmfS139m)<d*gZOiqkOJ2P>&#S=FMqTjs<Ia?k=MS,`)gqA9\6NnKuJOZ(9$)^hN?eG9&.cneJ^S>)?R$D$uVa&Vl,9A,fFNXK$f+KRIYmtRkFIm37g<0uti(n&f04C71G%ta3)c:Mh47pH[AH`GopO9![of%JMN!XR']4HBMDX1OBSO#=&ZrKp[&cr=A&0rDpd(OL_;>%A*9[AK>n9@*g/R@39"YYmOJ?T,L%gN.P,=W_I:mKG1(1V]<]ZJL`.l$7R^n@qBu@u8Bmg4Kdmd:&;3YA7<fn*FB6&J;MIV9.Sa.iu0/BckD"&+)NPG'lQ<((`Etk,=%2E'Ku\fsK_+fl;%p[tiksk#(jEbQ7l0O*=<GU?B(4p]hQ.be@P`htODMcXJHr-Fs3Aqm\"tP8W3&Jpcp'=7o@+a&J#-#6tLeCc7hZ`s#`#-N^`;`-TLIpHZQ=MJAokfqZl3>6l+q3^1[3<9u\=iXsMBp8WnJ"QK/:%]3PC,>5ZGL?J^mF*q6Z:["1<eBq8?kasLPpQkUQ685c"-4fg:?R?Br>q,.Y,Zb/<-u&HepC3.*4?6-_2U1V(1Mj]V_@A7p`XpSI;rDeSTO[bmU9(B+VPYX&P+e&M7l"Y-es^sAdIoM)$hQo7(FiRP(QVOG0tL+l?B6/h1bpH3rMBM.&4l5s,>sjTR[uJYd(*@erCGW2G0E,(hgAap4L@:[*8/tAE5gf6E?4XL3oFsIE\?`l<X8Rid'kOlA$\Z4]h(hb^?$n^Aj+o3/7;n1p16MEIWa/V_;9de3_K70b/o:7QJmOlIRNM!0rd*7FpgDE3N(4Nl1D]&NnT#6.L*\OWEk>s_5TYrSb@CsM8`>nB;"m_)7Wsoa3``eV>c%B0Q?2RT)"k4a76*P9rF6AUtpq]ftak-QqjWjFH6.Vp$+a;5bX7DP(nH=R80`>:a9YCjn4NL2UMHa!f1>Q(Xgc6FCY8ngeM:[K4o/d=Vh&iEm8ImFkLoNP_/\W^ojo64^@H7A53Gp4]2FNGkP_uE+T[@bg\qsRE7d.%Q;<f*70%s?[DI2@;o,cKbIc=`=K$\Qp.WgaLlQ0#$HsE<),k]6;K<e:TTno'VScJ?Vje&CYkUa*fpj]b)\ZWS.u+KQ(m7^9HB35$.5=p<d&W7F4J+Rl;`dk9SASnr%V/-4DiM5FCZr(BW2aW93/W'K`&cUt]ql_ZR\d+0C1FnF3SJph04`WTeIpRlbQA?JROn*FB6&cF[`lk6]a+W0]k=l1@4.K-9%IrGR#l:?8ZZ\OU:Q]M*QW.J@6hSF2PnT>B"i$pM/)Q6GRp'?QD?o:'YD=8'CaTV2D[21s6pNVqX%]WW_MoVqiaKD>G-3`.N-bLR?a&J#-J]qLUBJ^V[i5.Yi7/LZ*B<j>Lr>u/jgVP*pKAP3`hp>VL#98i-ij+/%WH=!_TSa7,2j[!ggi^8Cq)tD&q"eH<,:3$KnSJB0g,he1H8bT4.#!d9Q1hIQ)VqcV^Nc$KfH[6lVFkL793H(76_k&mE5W/(X9l45,.K#n,!F.BT0qg)fM/scDYsc((3\eE!t9W'WGAHA,iC(KSL?<5Q.]F`*Hocch?"O(Ph=Ad%-k(%bOYc!90H8cPuSj;!pu"S0'odTo:'a([uKhGTW2OH4XJ@BH%V=ZaCtgWnDl>Jq_K)=,$u!0c!(>c7aKf41pdm!G_'<Z3L"ah*"3p>8gm>j=qZ?bpk0\LNRjAC8R'<p;-?+cnjIQ#"'4B1:FNJ-MY0dNniT/WXYMpbfolN/9kBU/&$851@$hgIK@g!u.9"C&CJ4)BIT;k^pdR\*XhQn&`:7G_02;3AQI@'jfQ_fiGQ;dc%q%rdo$I]Hf^bd-b*n(IZ565P'\Z`.YXckJqEp'@[&u8.%TKuR&J+ciP;-]bpudd=-%TjWbdsU(3HLuBr045[o`3`Vf;dQIDuF9q/&4pS=9"H%bBceD!n)GZ^l0A_<JX'T?%o._DQgQ5m(Q_K&6?Q3;$O`.WBG:GYG<paBn>mgm0e4IG_A<qJAE)&O%,^FSoiA(G'iql]L^ANUlM35rRHHEU69(s9m&E^c1tlgXfkE5%uNkIk.7?I#\DW1%^r*SQcP/kX7*j/FtoeE509Z[!,D5<(7XIPl#S/UEJ2RXm)Zg$iHqbR"IZ/':igT#,Gd")&9h([)-I-N4Oi6J_6_\nPk9SplN"nb2'`7_Nc,fkNi<k81RUq`3B9*V$b3E:"Df0:pJAJ[4nOP&B.dJHaj)OkM%1!A:aI0)/uZtbre[:`qQ.B:+oR##ZY.rVF2g?nO/NENa?XCs73YV);/NV>%O`6`rOkd/TWW%!(CZGLOn*k0G*kjLJX51S$55#+BDqBL9QFFW)$3Yk]!8#[@+?sH32!_4h.`O4*c`tpWTb6IeQ:8MQ'CDp\nn01Ye=&kR0V$GlCNhac07/Qg!hoTDsthsA90=\^V-7./pG_fT"IuhXhKM?iLXqd9>euBMs#m$<HJX)#)<!F:"6S"+;e;F[j="I.1pK0GJ/rT2c1b9fG9WOCGcjVl5-K9SfsW7%p2AJId8\=W-YYS,VNC=H"S's8RookU/H"4PNj&S<d$<sONns_?U"UX9Ig-6j0QJ8)o!bbU;,_(oe?6ch8"k@h:X#*0.eRKBk3=&)Y"mcdpEmfJiJp&CWUER(N!F4F5&c&rDT"2l/&SN,nDq>7N]F5PJ^r4a9,NNF)nK6>*V>u`jPQhkc9Fmg/;4k-eR<p)$2s[$K2)S\:kVoDD2qKfj6lToSfD#^8so:AF"EHYch9l6gR[d]<W5ok#n<mi6;,b#77t2d8aIH.E:YRcD3S;J;.&g\XV$8A"g'u:P+-tG#JTQG+sJ4CLbe8nBbWPPM7;t6$*j1^1Aj8H^N`JjTpE^3k1h*/(EK.;9@`NGVG5U2:7h3"b`05[&L#c_=.kr!*(k[_#E'"(/!jNZ[-h=HOd^p!KTSPUkdW+V<(.6+[f>icQ5LWm;ZkDU..O&D4$nD[0LDTd?1ghMMr"MCLp$.KIQ1(kt$$in@=rae(34.f[?9'&SUVN$]#Xrk+M4@J`b0Hp)]9YgP72Z3F3ajhKbYT'^BXA1.KNiel5]]5QC)IJUt7_gHP<3koHO_Zps+=*n<HsA.I21"6*(YV/=7PN4An;$F/8J~>endstream
|
258 |
+
endobj
|
259 |
+
75 0 obj
|
260 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 63 /Length 44
|
261 |
+
/Subtype /Image /Type /XObject /Width 659 >>
|
262 |
+
stream
|
263 |
+
Gb"0;!<E0#!.pmDX)1Bm!<<*"zzzzzzzzz*#Y'JPX>~>endstream
|
264 |
+
endobj
|
265 |
+
76 0 obj
|
266 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 395.4327 0 ] /Rect [ 347.8029 587.2098 490.6529 599.2098 ] /Subtype /Link /Type /Annot >>
|
267 |
+
endobj
|
268 |
+
77 0 obj
|
269 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 748.4786 0 ] /Rect [ 101.8129 494.2098 287.4629 506.2098 ] /Subtype /Link /Type /Annot >>
|
270 |
+
endobj
|
271 |
+
78 0 obj
|
272 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 147.9786 0 ] /Rect [ 112.4812 419.2098 298.7678 431.2098 ] /Subtype /Link /Type /Annot >>
|
273 |
+
endobj
|
274 |
+
79 0 obj
|
275 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 138.5029 362.2098 222.9729 374.2098 ] /Subtype /Link /Type /Annot >>
|
276 |
+
endobj
|
277 |
+
80 0 obj
|
278 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 245.7629 362.2098 310.2329 374.2098 ] /Subtype /Link /Type /Annot >>
|
279 |
+
endobj
|
280 |
+
81 0 obj
|
281 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 483.6827 344.2098 532.0712 356.2098 ] /Subtype /Link /Type /Annot >>
|
282 |
+
endobj
|
283 |
+
82 0 obj
|
284 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 85.69291 332.2098 118.4829 344.2098 ] /Subtype /Link /Type /Annot >>
|
285 |
+
endobj
|
286 |
+
83 0 obj
|
287 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 141.2729 332.2098 205.7429 344.2098 ] /Subtype /Link /Type /Annot >>
|
288 |
+
endobj
|
289 |
+
84 0 obj
|
290 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 132.3829 284.2098 196.8529 296.2098 ] /Subtype /Link /Type /Annot >>
|
291 |
+
endobj
|
292 |
+
85 0 obj
|
293 |
+
<< /Annots [ 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R ] /Contents 155 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.5d743eefc8f98bc7a43b5e59bf2de6b9 74 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
294 |
+
/Trans << >> /Type /Page >>
|
295 |
+
endobj
|
296 |
+
86 0 obj
|
297 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 266 /Length 12842 /SMask 87 0 R
|
298 |
+
/Subtype /Image /Type /XObject /Width 509 >>
|
299 |
+
stream
|
300 |
+
Gb"/l$]lB1H0;ja98+Q)W`UAu.4UF5.`3%lKrS+(K-:Vi(_^#n,<Tuh@CK-XD/JoIAk!Un*`e$'YUgAX2NA2T/:7"I)NPSt($dU7d27eHAQ]:C(8I;FN#l(3CZJT`1im$Q3KJWZdsXu8hac#[a8]4Jfr%VqkFA`jmf)skB<H+k"onW'zzzzzzzzz!!pcbV%:FN0GlA*#2+dJ@'E<BA02#._(oS`I2E@sbEP<d@5&NL;[1p1_-jK@).XfnK>B<SFcu]_]-iEX8=*9HoO1WPn\W]l4I3,n<t%suacBDulGMt9iN-IXh7lger7;P/jl(]kUn=;,lmRgM]<1(3L7YR=&7@3E9Nf&@qb-ZZ89_XCcm#n9OaYF<U22WMV3uT3ZVe7!_dK\c>J4S)V-rX=0X87=XQOY6\k2X:'q.*t<UrY7CH<qGRbdNXL.9IGQ&b%K@=QsC6Hr^p@U=2LP3i&dOe_2:.c_gp6=MCLHObjKiiN(bbHHctn\dFu^GE0f--GM+4>4:I_st[<)ML:\`8l/udi;EmShM"_"uARZe.oUcXXPP20iE2<)V7b31:EJuV2nZGpV':pfau#hP1*\(en]TbYGP+!lq9k0$!s,1]2Y4-`!U*po%m3Jq)=FJqbA!RUY-AHl](e2o$70pUkLlqj_t7@'m+V,0N`0m5M>5o[A*`_()DQl/HsYJ3M'8T)3.t3PX-95@$/KB[U2Iq?J0P)Dn(C#/de#A5><uZREBgt$A#JX2A'M-3[:dTL`O6l-o#P;XnMfqZEG<%kdZ3S#6oh2A9F,bB?Ehb>PD;+7j0W\70,.(Ka:kJ56CW%L%*kp=]Mc2mF+T!<Pc<Ip*"\g#JRPHflpo+:A16_/!PJDfa3mkgHg0kSkB6m%td;Yoosn(8UT`9H4)5k`]!5ArbQFNcY4o"r>LD6r>fsVB);TBEj6:)&OWP)ELlK4nl*<V^76:d4q(J!X/kTnRs/?&Ye=QjgpZX9A7(H2k/Mf%=ZbBA?u998=`p>;ZL8*+o^N[3!"BID[dPI<k(?.6[U5Hhq];ErD[i_SI@o\@J0ta0X3Ko[qprf;jU/5@-!]rEQFNK(L)_6A=Qp:l9ciK`l[id"IJU)5X+F\.0Bp"=?RuGaCb&s&0DeWahUN\1d!XI=eH]cc[k#Z]H+[VS]i6-O0N\Gn6LRVe*\,BFk1?FJ*<loV99qm;'5#["J\?OlJ\b`u!/'XU?nb][%'gCr_-iZda?C":K4W1Jq_/iqQ731pql^&$!(]9gaaO6j!'l]uliR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE;<qc9r?SBd?f;tYL*Q+GmY2,m#QP971mMtp>eD!?d!=/7`bN2^*Kn5Kc,CsIT3uEt)N+D';n_sk8<!8`UL]XM`@!.3>Nl]ppXr71`bXo&i/#>]E\.1g"R/u!-Y,216<QQMMIJ^=8\&.f79>Is/NeZ-=Q1TT=8DY&Te>Q1X\C>]!<BkB,cRqZViZY3lhmG8E&;%2cDBkbN:<7lbBV=^MZPReSdEBn,Ge!0k;<TOq_>9tcqkOK60^Hm4"fF`<&3MZ+h6)$^l)1r?oLsA3VIWT$n0,lQAK>p%3sjRjPa+DD@j+$Z,)'>DnaPd-N.^6m'm[#B4T9FuHb4\]670_]c':#WJ(CMKqr2l2F'`*8b/c_#W"bZE(7I>ZMS&d.7`$stktkM3V?lejN7'E5(M8uMPW3orDr))D+aO\<LA_P=qjarQ#o^[[A9F0mDO0XH?I$eG=,P<E+W@'<T'@bZepM_jb._fo_%+Ti'M"E0+N$g$Bp'Aq3A(WIp,b_+7%7Zo?BUdSns`YF,59*M7EUb!(8ppmlCL"<2i+q@eQW4K,*3.DCi/&F8*Qajk"C#Gp8mY.AQd]=UhCoQDZTu`cejsS\EAZSg"5(h/u>hF2ZC1]m4!31Q;r!NePYKDNtTcThl$K^#NYt9EoU#F_;?i!iKBs"+u':9Of)>cmLn??a&6mN&K#e\agTr2R9OSJX:8a;\d?Fn%@umUP3>Tt"(qH$j>j.DE='^me51G+k#P7D7lc5Nqss<W*O^%qY%O&0!iB,#g=u&l;f&kI0?"^6aA]/+Wt%r7JC_84GU.dj;1qW'nqcA07!5Ab1"+sC</W?bTdACdNP&0BQZ55FCS1"S&We:W-2X,[ER5m?s#ZS4;nKLDc2*,.M>Mo!Q[R_#ZV/j)6NkX,'fWItMS;t2XY;/i(b1buc[]UrKX1'MFi3ie=ADe[^]$$I?ZIWdm>K:3c"p`E[(9mMjRnf:.b=<GcNQik%?u9V(SAU#RI+2t3V0B^kWrl!n-B:3YgA0:?`0k"GTuc/"X@h5erZ.ibj(8h<Qt.?L")&2HsipZp6?p1Wr)2NIP&O6#bN)rjSGtFMhb-JGmT;>;V@Db26?_AZY'h\V5b!Zg:J0mrN+AUDt;85c<RDgQi:fI^$8f>ihodl_B5KW@BD`CbU1h\b,c<=_DT99h`#hNK9DR7XRSDG(7rJbB8Gm(?U6.)A_A#`o6K6jAL)GdSRMPA&46)U#O'9g@Q?dRGDG\0d7UQe'rf[G=gZ9S$nZ)D2fd/0P:%*FK2SVa)U?%I(&!"O=Q[^8pfG$,,aZ43=Ju68"5*o%Z/FMAJSK`%!rtT`JF!@<5c0?:p(+h6$4I,k_4nA?aaP92!'lde;"cPK]N?^#:RjCq655-kLCTFl2a!&K'R2e\*_)"p4MqU=,>Ek/b'm#>PL]eG$DNcd![]C>0>p]\8Sf%R';\S5Kd[<+->IcBW@?Jo'U*di=5Xs6GSk-E`)-.\>e!%.4*gBB$;hN4:"8Yd;H)NLCj6dG0%^i&R)G2?64@Ft`-1Fq.39`AFYAP+'o.$s?EcjI-Lmn8^bad80[`pVU$SC8IJWm;o-?4.U+"YL'pEm*?JtWqGShk^n-h6<N&28Y./Q-8hu<>YUsMV]R]L)4;mW#p4=U+p?J++XrUndO4?4Wr7:4t3O\kZI6Z]&q;CB\6kbZ^@B2^G7[[m4V^M6NuG&>PY4k*0O8R)aEL's_(RCcSdE]di-[cDIM3_*ZlC-i=%7)citkBY??UX$#+RVm0=H8!\>5$Y.3+bm9u@XILMf?TpK7gi,$dU0$@ZYK@#%fj%T5:?7p?"h<POVRXcUtE)g/XL6Zon'['$fnj[C[]aGCd'!$Ee#rNYXQ[eotm^hlj'nioZJ]k@1,38hH_e9C<Fehdk%?i8Xf(m;;(afrL)-c-Y%0VE@Ab%p<T6hF8"s'&fW?;,LcOe<<mbC:Fhu)ooWNCXnL8OD&[]eTkD$OSPB0Pc[f(j*hP6$\$\62HecYV%R*E9MPetU-N948XZ_%_]6S1-X5iP`c6HlEadq95"Wtd:/Q;(CoTN;(K*SLsQBp*n!tR:m58W,Ii2AF&,ZF??&=3Khi<%?'[#89g9hdH/G#nFVELV=no@100Dt$o[C1c55k'=#92Z"3@DcA+DAtM'[N3r<J0`&ir9l4b6F`OV=ifU1>$Tu=u?0m%/lm!Anq=VnL.+NXLkFhcplbr[NGcc^dJiG$L^4ggSI^*!#&b<fI2L6Q;B[&hdc?dUc@K0t(oG20g[hZF^kk\*(K*QXBk0r*G6@>.nk<\*T?r]"pok;[bquSlW*+9p(>C/mkeu5QhUrY1q5"#pn'58t.o3uWBcAqCq/,0qsm$l)0M^=f540N(,+YlqHN]bs)k!ttf0eG+>^_ncWZL@/>WEZd1R9Ze9<e]$Xfl,b[?'$=UUt#bJH$jX(=k@(tYEa'Qc(@/Bk9377\2.jM,Fp1O$uTk*=kA%ro2C"Prg+5F0'i)g6GC_"e]ZJ%J8fiB\fiO'/+@'^BE#hK90k\':u=SJAcMDedmHJi7un]K$gZu>r'/OmFL5t#'.`],S`O%5T"gjVG:t):D#Sa]3LpBD]e/&PLP*JAhq?Q[^aseg%#SPW+`b,Z%6TU;(-[D_q9XlloZn!&;TpjJn=)tRbK_oI@;0-Tf[#^H%oAhm_,[gTio>'01L.0aV!IBQ;R^)NXJJS/X#ILq"81nr+]lm>oge,nD-11QX6fCu\$E2)iljlZ[;(d=>\A^MY@f(rLdQW+0CTC^G0q;THD&TL6Zt7D[C"<I/F=+I^s%Pp4NOPR*u.rk"].cV9Ti6064@H*fWeq^+c4Gn:d(GY[$RA`fun\KI?gA/fh6Z\+&^b4c^ij=?&SNuUA<X+Am%$]h^jpd0>4](0C,MnoO=OXo;c=@pXs6:O6YkD#da?ke"5K-=0Q8Y]urH[0eEbkP$PaP)&lr5A\NX3=1O\<i!^EH5.t#3:#3DV9he[.#$6qfBDssWZ]RsY\m;:>8$Cf]rPt]r$a#H:B'/4,bFT*[fe+[kR5j9*p&`REpAi0f*D)uR1Qp84R["Q71:W8h;7or_^!'6&GRLRJ+=9[YD]sk@:Kj;MF_Z/GfIkMiimsD!Zg!`KC\H.sGO*C;ZAW#^/Xr[p5Bm"K<e:joTl+/EDj['G>:lJ`Q+(dB5;frkG0]Au'>7[P%[tXH[[Nu?8^o(]o2Aj0fZf,;@p@kMO^aZ*m(A(LKa>u';s%A\breW,btgG3E/"b/-ono0eBr&!]V8Nnp<h*0;n(<,):Hhp2Sj?<LX'II?@L+$\9_;Yq-.PMS*&HAJ"uU6Hbo^<^0Td[LXg3PT5EYYO^5?#Q4D>D/E&0bLW+oSpTg!.V%gim$2#mg;"dIs,9nF'NZ<$G>?fa=SXp"iL/m*AI"4:s>t@*Ghda,>[t[$`R([m_lu;P_X5WFBpTU*;jnsS'Xh*ZJ*SSbB>3K)[\hqZ%2UA_!M_W8[^i(F90&bIMZk1%s]>u%>aKq6%;.cEU/7s??E.B`LYXQ[e-)]$`'N#Zq);e%#-b$>'Q+G3Jm43S1rNj^KHgW8q$TFR,]RA<>/>)=b%UJ\-1Lf5a?.@E=k2VT&WXCr,6HoL'ccQ:#L>A-]*Y`K]Q9(T?1\7s@+-[FVl[r?8Ob,P<TtZ3tb5UVg.$"gk-jmCV`?_%N(O/+_*_)"pi^>(&nYDfh6eQtNPug_P4F-l"E>5,qn=-B8@AKd9o@`Ue;I$GU74KYSUnA8dffsK9`7W]ZM%,.e$FWXI,bCeJlsJ\08Nc5fn-h6<N&28Y./Pa@9Nhgc.>Um-$CIdA]b!QaJ,/2ma2c4lGUPsWY[p$GnKbf`o@`Ue;I&,tDKm"4.`>0W6)=">#h07C1MW$1\e@$U?h<kpYXiX*04&I>$u%KX',aQ8`D-&UHf5Sg;EHcphXDB1AB6,RS2c/fB?bB/+eQk3A@V%3g!?,G-:0n[AZcG;h!mJ1.SS&0A3Xkl\r!!Y)N`:DW@l(V_2PLG"09Kaqtr<\%c],;NP6mkK>1*65G?b=E,`$rfl)!!ae7o-'A9",i[.brQ7U^Mm]&o.s0m#RpD7?i%$:FdWCceBIh#MA61ts$Omu<q5k_5\Z6(q]ao7%@qHIsW?^LL?R6EW=9MQ-D"gU]L!un,f+T%"MbPn>W5k_5_Z6(s3aF:\cdlpgdeiZ+(f/k1U,eO!/VUZgdM$C7M1I1Z/VA@i<4o-Uud4)b$o/U=tER6W$[VhQ/r9Bd6k-%Ms`ej8p:R1b]B\S"'TOD]m$D[WjjYp:s[-*!D]+&0TQMod-2dGD&L6]Zhrm%("?[,SWo1i^VZ>kl:)((YaA*1)sAiLq1<<Lp8R[Rc:c(F=']RPcIYl*VRi>u;N%bg&L+/cDokSr[H+X[(j[:<3MMb3*O)irUM\&p8\Z9P,TY(HkoSi:9Wc9(J/2skWN(H';5^P;os?T!rDW2W5ZMlT(91V0/21O]'cr^VH@I/4*1k/dX@o.=aWllWm2DjClrg%fl<b9r0op5t*k4dO"L^1lF=pLJVfW#MerHV:-0\?E:9p@:Z,ARA$f@#mhqT>'Mgnj.Oa%;*!p$suZ$lq@"fnkD=R&1t<ofW)=7Qo_EmfBPIi=0e/;m]<cohXhbOG@a^XnoNK6,92gDWe'M,9hhqnd)U8us+W%%/euso2Keb@MVAo723S^-k*mEgEdHY%^0*M4A:N(KMnAh":V0:*A)bna6ar?F3;k/$H$e6"Abu"I8gCcKOFo>Mo5n'F4Z-ZH/`!^.Ut1c9._8B;QQ/N(?KBtFp[jDZ0BMP2'7Dq'h^R(\F]I14s$A[fqc*aOO.'6_^Tc^m3\t>so$-0Sn!6HJ8hY%TRbuS'Pk*tPP7u[4?(KI40ZQdkf+iK&O]$JfFkgDOY_b?+kfqpb>&bR$>9"V=IE3c,pUK&(AA>I\i]<n<l[]MCW=0Gpc4Vc,MPY_e6H+Y$Hf?Wu]'UW?Y127Y;[UM?ZNAlqHJA!t_4[(0AUi@LrO38k]bdt]23@d8WC?OPb<DXV^;s4olHM!X=CLlhndg,Rpf*#./of5r?b;'8kq?]>c,)-SW8t,[8:F&^m;n'D:cq54HAcCi=XEXGR93DGS'9dMFr-?jk+cs9L,7"rV$(Y3%7=n;Q[RcE^9k*sb.d=OJL/t[qtFPPn=n,?DdiS5K2r2CrSImj1gf#Afrl=8Ialjmq`k"?cKmd[:1$&K?h%4nLVN&so,5J4gV!-U<)0(_$K!BsGMFm4QT@?qhbLp)<8K5f'Sf68hBHmZ*:/F>VVnn=b5R*e(,QNHE10C1S5L2M9=*u#BD\9$>1rZC'Oe^;mD%bg#Cs-`_4[(0AcGaJ>Ou.nOSu21lpjc%Z9S#7&*Q^b![gkEkr2@oKCU[7C7G7a&Ls^)hSM5CcSEW@aTn\hp5l_Z*m(+#Pgo(L;U8Q>([SH.T@T06mpbAdO5tEn!L5u6l7i,eeZp:$[]`kRf/NGM8e?us_=cdHL)V,Yn:OaEQi0uJ&C'rM6M@GaZ6(q]ao:;oqj@CJfCE^hH8Uu:JXcIIIULYZ7SBecSa,'+R[:Uh'ci02#^7($RsQ/^?_(POD:+Tih'Lfmn[D-A?E:W[JWK#t'`4d_aDhta:VA&Zp>))dlJ?IMgpp>UV&Ec_Y#\q;:N&(mmf5q>ra#&HWUcN@^CCKZ^M4ng;,`D>:Yt\,J(+?U6X[g!=T4+bS:>eKT(gg:_Z\/37E"=]rq1ugro%f]p8\D'+#Pptrcd4i6<j9GZBLlBil_:!a3IU8qr6di;#b8[EH'Sq'Fr35eNii'VA@k"]'*G(MCd;`T768;S217X5AFqqr@9JgKN2QErBu:qgRf?+qb^:Uln<_kX<L<!ljn\/!L]sP6-+Mn<1RGIqt&YSX2ko!qlhKmFV?Y/M%j<Yc`!fq_aM=K<LB.@aF;^aFVDTQc^5Y,>^(heB?bB/+eQk3A@V%C2q]RV(^>W/@*r,YA01dO5hpnV!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0A62gJdb(^q1f`CfjAG7MK2Ci$c3+TMLO6/6pH%C.&fOF7*/#I9s6+Su-=%V.dK5kY3Y*6<RuJF!@<30=)t!8.SWE8iMIj(mi?EZP+])Q=p29)\)14>s]\^XC&t,nC!+7***<:QYOT:s+5]M$3l)P9e4u7t6#D,=nOi1$uQD+UAkRVNn^IgpQ1>In,:\7OmT(?/+=Plg7O%ghP.ckqN'&fc<O5ZrA@KqS[]4\+f/c#67:#acLot6_Y's,,qnJeu9A%Msk:NDYi$<Pa0B$eXjVj$(j+k"ug!IM,qg63jG^C!tkY88.8(PI4?t#12<eTGH^nmJ]B?iLQVqsH7,"q*>AZSS5M9SSa<BiWsZRme,]PY9lae%P#ke$qQ8;&S?N,NY3@*gFt#JR;YJ@am,]Rlk=-kr?M;'h<<Nic#9YlL8G5c+lBg#B]g,HDCd4l9b%*_CHKZUNWl048L[5,)((qqjo(Pr8qVt]\il1DmYO&JcfiS3mTRlm\^AEgOMVoZT!2P=%ahI\$F&Fn4,3F&j3.?a'nq:9/;05pBm(:/K1]aoNrZ]*)GfW&KBd)oM&*a;sPqE&e"52!+OF7*/#I9s6+Su-=%V.dK5kY3Y*6<RuJF!@<30=)t!8.SWE$5#q!O<49i'?ul!b<AQ^k(ib"NWb,J<L,hGCCF2k23>fmQW4UliR5IZ'TmtkL%5?hPh./4oc_k`*N)m3j&>-)qR0To^CQ*s.u8_c"$8G4&l:6#68`&0)O)?S0Tq0J5Z=5V>,D#VOhRQT.Q^]9R^'F$6]3G!)DllT4,F42CD5lol#ADb,Y3T<q[d9o'b!S;a)B%!!#bLADbC0h"Q4!PbENqMCIO"r<U05oT4J$5iRX4m!E(2A6&E=!Qr2oh[O*<!5OH'm*";I$$^l`jp`Gj[=+aoH+cb)k#g@C!$n,fbJ#-LDdQILr>VD7A[^QD$((T7/b\9Hs7\uc"*L]aC``Y=FHRdDYp%6HqM4D>!'$)=+O!UgnTcX&F[5X$!$'(/7Y'h-!'$)=Mu_N9!,s(X)$.#R!8p-91BM)/!5O0PB*?:>!.Y_Mfd@rZ?n`EK3fBKo=8qOf_&U@/*rs*,lt6IB4og*8g!9qcI/j6PZC_^OqZ$U+A3V;(p&P.5aF6U/liR5IacLr:V2E]jc,\G]p&@%r5_goLQ@8Iq!U1u4C\j_bf4tt5UUCh+6a:";PLs59"X#i=+T%0EEN-6NHKBWP#<HB'[HpQTR]0WeSQF@kJQbj>cp#S?`;q):&gdEQQ2+q2f(6]V3++rn*!c1G@BTP9?;"58<iLR4-tRnr>iC*oo$h%CTkR4&/aPO')cl49djCtQ;jJd?`HaJLI:a51nBU5*F)jSpB$Y#+%O"/$qZ62L!84hfDC$gJE'l_U<Hld]m%QhS"Gu-LPO;SI>5#'WMn)#K\T?jcqncUqrQ3:6VpCcohdts7c@+^=mQ>,\mLAc9!'DMmp;JJQ8fXo>q.1tJA3W.S6&k5lo=)S0_CSLRBnH7ohg%Son-G\*+LYTbl-`n11M%Dl-aPLal<3'@R,Q,8(-]kA:_Cg2I>7DDhP1g;J.(uB+PA[nrK/0MksQor#1NO"@I&4W>3d^9]SZCr@e2V.dI01rKG>H@1M%CUfiJ:i,l?"3)MH04!1X265/ir&WTSpL/Fj(f_Ndm'ZHjo\F&fPpS+*b4F)!APoD'k`a>5,\We8-(++W($^[-lIXBY"USctRD"7CkME?:JJEU]*=Ie_d-IFWqaCE;9\Q)Ze5oECa6_pFp`TYEZuD'+;T`*`3IG40akraAj5)r18G:.L'ai.?S[ma*NUUg=u;ADd&+Iau2r:aaWCl-XA@T50^)b5D?-4E66dPd6?gnc05i7*%QjSOidGY4)mk=:s/p!,*dBrJV<XO#+`F+2l/S-ib.qA3V<s2gGB'*6<RuJF!@<30=)t!8.SWE$5#q!O<49i'?ul!b<AQ^kncOPE90+(^q1N`Cfh)!!'qHa?BS(A.$CA81;7P_V8J_0\n1L\Dqd@Q!0Q%#I4jQ$B^6Ecb6QYgQi@VUH?F_`290:#o;A=qn+hT,*757:oNa\r#Stg/O9"gIh!7N+T!;;&D8^S]IV>9?#AZ;q*u6mDn5DVfDbQtBAYUhj#,l's7"fq^R4lN4PKnf-ju.8%A/?.2on0R2fqdhnS\S5<u^u(><hu\n\9MHq&d(N4oFYg+]#9%aksc+qBOl8\bZ!W]W]G#K/LUFA\[$nBn%XNq!7MM-.=4HN6)B8Ud-hPAPg9D)Isqc)^>1T2?1_S$L8H>@3>?iIsQ2!>4;.^eh=J(DS,`(4Z=%`^oh&WRD8*T*rV=qD/5^agZq#/Ult'OBU_JDm"9CIA:Nn'J+U"_qR`WUr6t-OIZMQ3\U"X]LJ&:npm"M[A<Tdc?[_q+BA[n*?g]=Y\4^MI\9*l"I&Z>ZX=99hMbiG_8$&m/7pRi_CtD<Zk[%L6>ZnIOIVQHS]u_$4qeQ19B4OW<e9kKrM1`84f#O[oreJ5H1KLaQmL.bUp[#<)(gC7o\?\Eo6+S5F5Ioe>5$$>2h:LCFF8j4^7^8=&q=WtOpnR@tI'e"`'JWK.S,))7aKCB&qp,-.:Cq0DmF:'0o]`U/Wp/5D2N74bh>SYMfCJREoO:#2F6AI92`>5YeJ@9*qoaG.od=i^hS2H%;YeMt_`bY'=*o&6\#cD:Z@fXXc-eoSK$X!'m9%35LP`Rl@6!Qq=Z&Z1WZT`#OF<4.M!SKZ^WFM'lb>SHkP\Ihm%(l]<q3T&n\>*Ba)8P%D!m)!DZ;C>SG8_+<]k_lm)kC'14%-ULpPUDo1:ERqcimYjSmV_EOsM2ehbr*h7JPn&@c\jCfN6'PLB.OTa/JuUK2#`U$'U.V;qB!Bo)b48j4Xl5MMeh]_s6/4e\kc8$%qB]l7/T]O02oF&5%9+Su[t>\A.A?Y90*L&@#2ZM=&&bfu=Rg?+kGV6YU/2KNpUI=Y1>Qa;T)?J]5hQOZ!iJn;?)VoLbO50Z5$clT&SqPPV]<H%#%\!8>B*[`!\.6Vs<hELT:fa$braSt:J^[,Gua[^5p7rdnGl%sK"87ClYNtB,T2ZEC8MC4.'4gAMsrBKHeDj?g<0>)0>Y<R#lD,)-`j[Yo8RPlkWX>'o,l/(N$9?m$o0=uX-'cu>!X<9E3SnnZjQ;G\lbM>4MHhutJ1sCE_I!+?].@.P&Pl[QcLN@S5AZKIt0Hel<KCUmLfe9H%W6XVaE(.pG_V3bAmX@rOgENt9E^JNnX-5$u?k_EKd199+V%qU=olB.rWTuUEElHl$dDj?O/aVh6!o@'bEF!R'N/"Z;di7nSH[-.>GIujS"iL1Q.SU1Ykmap/dLD?;\%_`"+"M0q+L5?6nm_FEEFOWgT-'Qo-X?@:JSan'@T<%[[_%u8H01o24?#jT98_doIHD#?F#(Lf3Ga/)g_%NMk$I)h'!pPs9hZ"@6ePQT#4$qfP&ACEaWkC2E<s03THCVaqf2I3<m%,9&'$[__1G!r>,aX_:QrQ[kEgTbB;Y#k^007]h=AWPl(ot2o6XZ";Vm^fD=b/NghZf%S42]N^Ee\"<a*[oG4a3&m]`.a9a5gOMk9-BGDUZl-bOLu<qk`ulh$kD[/(r2`FG^H\#@UW2on0R2am?m[GKhOKrt*/htfiET&*QfqK;dk^9OkiOO!I\IX&O$:T<o7m=V3tm$`=ihrl7[pC_Z\bL_l%DfP^bQduZa`eg\V2dG3d_KAA5p3uU2lh@BE^ANDWiHfM6@Gn09'e`pBg#0R69%F*JUjLc+Cp-uRc/k&BrNP6oSCGRd7Th0qW]V8-Bf2-p<JB_[L<A!F1^1u"%mQjG^;s4olHM!X=CLlhndg,Rpf*"c%rorSn,+V7eE=PTDJlA%)CCr-kDm.aMY]#>_q82kiJ3;4jm@;lPI+L]7=/^1fL'pGn))osm`k9DHLMf=#Kau^!Vdpn(h=_a)^>/tcMODu&_VZIoeYdFs7`?Wqks.*4oVqZ*H1q\q.Fma,6bA5e^m03?!.)%oM<'S90>B8h:,TFpso,qg,3c<II+(]T;2X#HtnM]m<]"h\p4Bcr^Pj$WSuB7Oh,sBM8PLsW']qK40_]N.<Xk-q\]9A,4ES:;ctQ)W]hEROMi\M#)2@2l$o0"AUitM+4-GS-f+#[kOL/&.f\uSSU!DO3,"f]j:SDjce`-]['HO1f)2kpWN,tdEY^0`F?+,4;.sFMp$=F"%^"$A]lD@rO48g9;[?8<f?YT:+PdU^J)cQMq,h)([jO,l48afiHZSS&`TMD?mc^+nrGtjZ7LE[i'X%@]2>mU>j52;e^WYBLV4D,9R:ck>N7-!3[-$4?WbJP.G8XnSpCasIWKnU:gMHPhB+2t=QO?%<cEpt?o7fSMQOf5$B.chEE)0L``oHHANFJFB]HftCXE9.7GW<-!5c@"jV5LL#aSt2nlV.3X-W0m-2bo3=`P93fD8(<R<RcShc->\4#2^-[o)kbB0j7b//Lq[7mVA^9IuAa/U6T?deSg:-(pC-g0>?"TW9fLj3kb&)Pb(3QOm;T,io4a%&jd#4&(1oLrJTS2;h$#*r\p/A"9%CdX1q`ge)RaWli-^fKjVKsG]oeXL[#pAI`cR"j-(Kabp2o`YE=<f="^4Gb_(hD<e=+]a&cF*=!q@]=rlregTo,8_rZNHY4j\eroO^iH+u9k<*H0aLCI<GfNStY<*&jMC)r=_e-tcH$!#AXkG^Cifq5q?I6QfncaE])54igIe`Oq>F4Z^`cKX*S?<2>Mn[qkCA=$<2YiKLu5-iB0$<-t!g>99j4hNFtK^[TZ^ZW9;:DP5EMKps9hh48g6+S5F5B6QB#?mhaJUd^Is#Tka\"EQkX=ITV>hH<4f[UEASo8NooDFI6cRE[7(8`0U6l$pBhg)]Gl$f-GY[K!jZ4G@mOo5Y^mg3KX/cTapHeI(@T0N=?G7WMS%C+;bhK<GhNE8%<J$LS8-a8EN?hUZUH5A-F62!UU+gV.E=8sD=("OrdFPiF7lJ_[/8#\ZE0\I_:iHp)DAH&laV<+8Pn-7PNl%[:Yq(KD`Q?3LrrIs]jKf@(:82jNADu*aAdOd`XkIhlOhB;\<h%7,IV8IDQR"uT\;@@R75kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@6n8(D!!!"n#I4j?!1<no%fcTt!jW=:!1>#pZ4?p8+DsI<!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B)5hqZ$TrP"p8T#64`(zzz!!!QPrW<6)T4.~>endstream
|
301 |
+
endobj
|
302 |
+
87 0 obj
|
303 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 266 /Length 71
|
304 |
+
/Subtype /Image /Type /XObject /Width 509 >>
|
305 |
+
stream
|
306 |
+
Gb"0;!=]#/!5bE.WG`:P'EA+5zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#7MZJ'Qn*p~>endstream
|
307 |
+
endobj
|
308 |
+
88 0 obj
|
309 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 28 /Length 7472 /Subtype /Image
|
310 |
+
/Type /XObject /Width 109 >>
|
311 |
+
stream
|
312 |
+
s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPhED$'e_!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;4$H?,"e\6#1?2@%K^+9X1o:9/,_MqkCF3i@*6k]jq'BINSRiMlQb2Qcnn+qqB*j!27(^_VS;<Z36qA8D2O5S<8m3]mSXP7<r@u-r/LKq?hIn;8XlhNV'cSqYn)H@Rl=+;"SA-O:TZc7K3>o7]lXT+8bR-!;p,@_1)6_fo?n6d#grGd]Nn+mK)_3\/WOf)r$1DCnaJCVq<%>ip'U<PbV*_`J(3bZZ26eRQ(6Hi@*6k]jq'BINSRiMkg7aNEc;25PO.:!;O.Vdr#NWg.LAgXGT=7UC<]CN8oKh!8"6ukgiH?o91q&,f>"@^N[)A!C.LhhR8\3?'BtHqWZbd\X,2p2Pj4GfDLM5n<@\FhQd(\^CU>E`R4\c#tD&qlQ?#nrrDt&=T6FL)IDY[p.hm4jb/Ragj.3bIk$O3PYJ44_5FoH$CfC5`66Fr\A^rb0gBud^AcCNnh0]]nC,/.jo/gUpe!D^mo]SihhV43iopCBKVMTIooK(HJ,V((Y)0'PP/u$,.:`K,G5^:U1\X0\rFsiE_%53A-tbu3iDXq'A(r#K`DWOk]qnWanEGCt\`'Z8_Z'Th/",;aP\T+4Z2Xg=&,uXKdJj1Q7]lXT+8bR-!;p,)D(<U'/BD7EjEMSNgROYPkAE#5%Ym0r>(r97*PM;:DTOK;;9C0U$-qtk24Tsj.CW6Prr<9#G"fFE>#*3^K'nuj1]A#H>Plu9pYl,Ppq#[:4fH],kgA5A#fNhjW-kg9r/rfF#sFMsY;uJU]m!ch41m(]I:fuRq&ScpWtSO9<i7IKJ!$=6L4q*K`EQ]sS>X:EW3,td#a/.RD%PZn&*%uuD0<e'\4PVkN?glQ6]1UV.pDa=[ArMkgAYIK770!,FHn3]gJ.\Ji#Yf]`(S4Sg)m\)a1,NgE6%XSI-Pn9P&=_SrrCM6?L:02\O>_pe>hELrWqb#eELZS8UUO<i#X6fM._Q#N\+R*NCEuOaT-c-VT7[4MAM"18>L1uO_;Hil^hnHW2]d9Qi-f3GPi)g[U]=;5*t1,!!)ORpdo)g6snZn,>kfj\DRlkAs#2G,]c)IW\VZjhW!R]a%W#p?J@mjf^c`SX8BZiL\ArAkL08-!8nnFSg9U^Um3f,=X<n4-c'`#br%UMnWYK%Ppf9P-i9_4,G+Sqe5?1(0DYJDn+\.,foQ(-?[qtU`/f`8BO2@P0o="'L40u2:3i_F^<bq[e;JU&/*;6I"/%dJ?Je1!P;g0VpOC!_SAg!$V>'ui^cX"A9&'>o@fHGB`Hml$fKY"ig^lhE3<XR)o@HQ&F^VN:Kq"\lm]Eb;NQcjZ"V+a>hfJhN~>endstream
|
313 |
+
endobj
|
314 |
+
89 0 obj
|
315 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 27 /Length 7860 /Subtype /Image
|
316 |
+
/Type /XObject /Width 157 >>
|
317 |
+
stream
|
318 |
+
s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPeDSHAm:!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;9\c:qhieHWt29UI9YY-<Q\X/C$=2roj:F"/tLb#rblb%S8R^rrC(hVRo'ViYUd[XC(fDPe'8f?!jVTa@.]te;nMH^P-r2XX@,b4`B-K'bmVrgIl]Y[_L@X<LW'g.rYg&Hlr9C8)*]Tq>%;q!5M\9!99>Z$hr1hb](DtKSifRQ#KCr!,rHdp!69SYtX\gmSmYgPLKpheDs4o9rI-jSMrIdifj"AjD4_/<rW/lRihP3J,VGug\#L\q6Br"^fUO9j-=B)8!_j7G"EQrne`K_fR*H5Y4+]fIf<"9*cCM3c_jHGZtacqPPa%%[Hu?=Qh_*fI]`VM5;kb$$NC,(Ef[]pht-GLrr@SQrrC(h8KtTg-\W,,6Lb-Saj/m-IPib1ar#M\NBYi:q2+qBlU"Nfgu""ta8(2f<r7?Jrr>8A5PPTc!;pku\*DlBo4.e#J?StQa!pN47TpBTCcBT&c:1&(+3K`\\%%G9dMCQa8H)G+9,/RZ5E-u7qYi.kr5SPZILFL"LAekfrrA[\+8c:lr]*L'ol'[%Z2Xg>=8r9\Q!7+-JaGeBd@!fc6:i;`e!e[Med_-EEW!Oa8';Hh*PnQnGrCl@c&JZtRp5\4^YAF"q>%;q!5M\9!99;l^K1@7T:6r#"b6M3;o`Y^cC'CF`2t*3A+P4,T@:1m/5aGBO!knU`#R]Vf-CHUY$.=PnU68,G.6CcIc%2UccqOM!l+a8*2Dot\,?0VrrCt-rrDT3S48WIW[4aH,EYKb>DC6!!'MbD.sng(_A!2U7N8\G'O$"2pqJKR$cdU.k_O]FX+/I?O8]3qrr=%6mJ=<ir7M#Li%+g-n]I!S[>[5f10%`R2J%EaHP;$+!nKoh#YMIik$Zri(o6uZgAG(OhrXbIhm_n.oCHJl!._9Q!66SGLT"J8$h_(bQaXHqQ(gU<O"DH88`q^Qp9&?$hY"#0#s?_fhq%RPk_Q3HC\-%Jj2B=*VV>I/chQAn)c%%gQ?_FABS6S/1\8:f6fJA'k#l0-Kj@G>&dn=^.ViUUV+4BXfCJqAJn[_2<9^E#(Up%7"3dY4r3JXtqdl46(bCUJ+4d^s!4K!okOK/\pab$2WLd6RNq9:.bPhfIo/_!cKd=B^n.-[<'+!PNVPpO-rW,1fjdK!?8JB295IAn]ro]k2r`QF3U6kRQrrD6JqnM'MqcY*5l$`R3n.-UZ&]WT"C.N`rDp84]HQ=og2#$N1QiMP:2@(Nd)8R=(>4pSuIq;FTI_WMo#_-VWrd?H7rW2(Sif`XG[;<.=Jo3VhO'7ji`GjL*Nc(MX&.kf3E4P78Se&?7=JDfUAE,:R<Su:)#bGa)Y#e2!fDYg3qNm*,obinGincPP2CaQ73;4]ZRN_3?NoCpee5B]gDH)dHO69iS76g.mSD=+q?VgG@rmRdgbNuV/rr@Rp*<%B#g^0HJ?-:-Mp\t575+M.:IhJiAbke'=FkXd[e9W0^=0L"Lnu9D"HN*C.,qRUTC.n$q!.]>$nNPl]lC`sY;uIs/rAga9&Ye;(RZ4G^@Xa=&f<'B''Rs[irdMVorWn!h6iMKe^]"8p&)pTOR@dGZ0"Y5RqN""i8jVGn(riAH$a>*[!2B=4l0Vfn75+#,J'Z10J&*6#Zp3a%qu6ZS*]<o(C&\/tOFQ0(?,+;AP2f6cV2a$UYDsJq62f;5f25c2ErQ,J;kKNY!&+*p4tA<el1/k!kPkM^s4I~>endstream
|
319 |
+
endobj
|
320 |
+
90 0 obj
|
321 |
+
<< /Contents 156 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.0f3214fba97c402fe6a90d13753efe28 86 0 R /FormXob.32fba5fba0ae35bed4505744fbc5cafc 89 0 R /FormXob.e8adaea23b9f6040e62cced2232e9b74 88 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
322 |
+
/Type /Page >>
|
323 |
+
endobj
|
324 |
+
91 0 obj
|
325 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 443 /Length 12751 /SMask 92 0 R
|
326 |
+
/Subtype /Image /Type /XObject /Width 648 >>
|
327 |
+
stream
|
328 |
+
Gb"0W:MV4IhB25Not6fmTl8?e)0GDRY58:_W>De*7ej8:?2!bq)LU3miaE]B_h4<L_B'JR4Y2c$#K*m#QW_4df;tGHg6J(kR?8AL=b!a,qN^^K&BprE+sXED<:s6ZVUV5%!<<*"zzzzz^o?,gj^5^t;k^;lG3]),o"4e6rr&l^rVcE(I/<Ig^UcD\+\nsrgGgSSf]R<\s3Y.!JEQ!5F89ahkkgUfLHCQ%hMh#4IWt'U"*gL\pQNA6jn&;pQHP&`J(?ZY+U/3ip65;rX(n[3pXaon76cX3Vn2+_ESEk0\F4;3M7kM62#1)-AlC>]qTm&#rqZE:j+l'32O3=/m7q71%8F0e^\m)cn#_!$_0Q%AGA7)R:*u#]l9BPWVs7p+b"$+Bg@"67mWD9sd;f,/Y>T(jGOAHPAH3V^le&t^XWAI0]OtgQ3F(jCH78[;mQZe'3Ao@)VfB3WZQia$Dp"]%F^KGmBblXgRHZs%AEJ\ns3:@8e^'facI(><o_3d)2jHo+5F]iC&'Eh\!2-_q0%V2pg[0<IZi/r,I+jWFI[c2BoK)\hmT.Z$L-;=;h&^5d=%sb$5M5S,DDCC1LE?.R3-=$!bRrT`KlP7/e^'e6@<;j[m9r/B?K^AG:Uc,Ff_Z3%i2$XNZe%6]1A/gTR1"3>FW\Ap>Y]b]8Fn$0f'Z;+q&uI,d'scOS3HR=s*5tJ7iY<%gV'KLk>$JDFSaU4G7QcBkG.pHcK,-4-/,2CJ05?Gjh][DJ[rF'IC8BL8M2sBaoZ8AcmQorWFn./c1>48O3Xo`9W#CbYOdo^:1)lVF#i,nf/FbdbB9gihS"s*X?mH$JaU\BSa4qi1EQkKjIp5_T+(JM;)5P*hq.>OeZO&W;@gBGkJEbcT`.IA<Vk*YpKhkX@)CF^0@ui'LZJ$!%.A(+F*ZBKkbmE^XR5`@cWMHVNa'fjd\1mApGH&WSigIjSiAS\hKCl,o".A(qTcA,GJe'"kGblWIJY\[EqedhHc]iL$)br-o'b:kArb]&p1Ap-`5`oLSD>'+pCE>^cZ3kT;MU&,[.F$f7b<#8N]?ua=HgLl2;Qf-F=)KuBrZsAf=A8KI9?Ne;98IeCG34,n5qm7#OL:taT1g.4_?;_DIH.UdfKM=*dPI^\jYj;;#gRrzzVsrREJ0uP-!?_l_$ik:gAH7PH[+D/UzzzzzzzzJC!7g5QB>mU*tnn4@t[YMP;MV&uWf^78XafM,WK@U*tnn`$o_0;%uGriY8r).#O`IEJe"%'Lbl`39B('^A7.,KB>DtqW@RJs7-]T?@MpD9t,7H^O#\Il/@t)nP[jao/)5''Lbl`VAtrG5Q'Xc:3#oUr-]=H^]!t,^BdPrbDN#Bb*/1@jDm-"rUduL*k##3++O12hu),CDHdSie<U('lQ<`K<b_@#ht18opM,^GfW.&<g[`B,IS>p3T?)4Tpa5`br1U5D*2;ohiV.aQO*<-t53VD.^RD2Sm]IsqU*t:I@4jJpheb(Gi?*Q8c9S]?F_2rkjdUE645HroZ`6;)idGBd!ql!Ab&l@,1mgGE\@9>8=m+hf5/)5@RZ]1YU*u5e\6SGZWS1%$PGrOX<NIFT]4sHu"a<h2Y%'E\4e/@/'!:VDU,"`[])VUSKV(sYU=e46a)^@tf3oN%V94X9;\VYtPX7ChI!K?W[s?K"hIsX99sj_aAf>a`p37%ZdH>tFbG@Q?HRn2uhK^%08JYs(PIi?&U*rW75%cLoba6NEf&Po9I@6W!cM'4U?S7USA\M!OF*C&M'Lh9/kKN$=Jk*AA/3_BbRGE"6H//F=g,j_=m/$9lU-7qWplp]%j`=?778]:93A-XsPBiCjf_EbWo_NTXHhQq.:e7tcNiCGIe:RqcCr*d[Z?1njqm"TXdtQ'PQ2M4C]..)k<YRu"B$.s#HsB6qqfJYAlS-*QX=/t#.*Kg0jmlfrDG=51'Ld:JjYQ#(U*tnn.!lZ=X=/t#-uk,L<YRu"PW2)a.uL&L8t;(-np^fCSk(T&56:g\5qW7)*-)nsifM=`&;OKpJ2lUF!5p%I!?_l_$ik:gAH7NR/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bs+3I22ep=/P@b2b>@B_.@LJ*R15qs`R^;nnABb6LZm';&NaL#d8Vq-_<UifhQiOB`8G+"XrrHu^)?P07:qK=*7s+)\7<Y4%)[=#UX_:D3rn1+X];_o`4"iI#p8_d]%S0Z`AQl\eiJ?EJ+WMVH\NCEOjg_o`4"krSM\M7YG/eo)MpA@d(t]tUL^l;fk((<tpPYZo_dlM<-dhTCktZ]jMA`Pq-=If&g*lJgei0#K6N**,7*Mm"c]_;&pGP&adWD:P&d%F09Hg`Y9B<l^E[Ragc7\"*tg+ISk$/=0G=e\sG6n#rcF\m0,be$Z&f1Ri9Nf)&$W?7<?(<^'X/n,)C%3JliM+PYOB;fc]cfCb6N`ma<-NKZ1@*1(:acfNp9<Kj\W=MDN:'"88-1kmrSRuQRFn3Y7YYk#Uk_>W$@^he(5&@J@Wl!3YBUu*5Tb:+7:T;P".DuNt[D#M->9XkVmAe'7:XaJ%0,F?<j#O<)=-acOim8`1i7J_i9Eg<lN6MLJiCl\Gk'lpjV.,TNSVp3+aY&=D8=0f<%Ur>)BR9U4P+0:\(rc/atlZJefjf?/8m;_6,C&I#3M-MZ?T]VXkj`5LYfCa97R<c#ISPG?WS(5`.AJpsR9eM3d&(YIoY"51\NRIdX]=.UkZ0OK\gU,h"bK7#bo!;??jZ8(\=`@H+:7SpVnn)ANhPSN0>]Mj+I'EO^0B+MFE[d%GgT`E#]<m@BB$&7i-'uNl#>6Z_T>1+($d%M7o"gL4`$^m[+h8Rn5$2inpuF1],aZEk#>6Z_T3R,)jDnAu@**!>PKU1l>Ri8+/@eH%++V>%qL)&*>R#^<j>$_R+dW3P%_2uJEQD\kLdNcs5TFe^!90*`!"aoj#(S\o1'#69QT7S)J]45WI8$&6jrD)/moI4Zr]YL-q-_<UifhQiOB`8G+"XrrHu^)?P07:qK-ck@:G0OOE]L4KYa4GB_p-`d\*LY'c(JO,*Y)n6Eo4RB^O5e)':o39aCSIE/r,]&ek'n-ON_@&b<N.9IsZHd^F??nJ,f0TSHQP5Er#_2imk)2X4sf:G*RG\4hB>'r9rYA5-7C7i8p*E@HE,aMHjKFh6$Qf9lkKIg8!`cZu0.)4D`cUf>D3ib,_#$Fgc4^_a2bOa1Gl/I)Nl4!'e0/r:Z%%KQ:U+/mhkb[]*KMo#8RQi6#VmbCSc-FdcR<PHU%smH1:Kc,RIQM='Hq3bl.k\ikq9diG<T;oe]9R[R<O>V0E7rVc'*5CU**Q/M1C\\)+JqWVtl7@q/;*"R)#Sn,SS::)[SNaBhFSg1cc<^'W`b2k,OVS]N^[&M7k*RCpqB(I$$oAtb1Bt)opEK]H+dtp5#,L>K+gJnoZRomD=/LBk%/oOXuan<BN?60p)4BHP`XF.6IQcj4o%V)kM6%7PlDR-u=l=$;i*d>+q/uM0ok6r&FH1ToC7-jjfB>el%gr4<?D3^UR:G.Ef&(V&.GoMZckrO!r\@lRi>j?:3>W,)9DhVH!-d)1Ul=oiE\X]ZU=t]EJalTbt_)c9_%r]c8B5=s"h/)MObEEslkApA"2.r_LbLQPtf@T\,k$rElMdX*>ZR2$Vap77N\NKeDk5Of5X7a&B=1B?!cZSSPLV%VQHpl7S0ph3/mqA`U02VD0MeB4HQ``0_1F/=)ap6,Iq]`ap/scXKq;pabD>JR+iOF8"G4o^sn/TR3Yk#VnbJ`T4IDJ6j3NRV4j>-8IAQVJULQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql'Aj%&Z)<$m;^Rh3+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD_:d<f9+Vg]^d-C6__n,9j5Y`->X*EG@+Egc^`1+X];_o`3W/eaj^L5"]/=SZ@HA`AosY`N*".j(ikjRV.'D.e:Ke32SlFk\uXN>kqX%soDl]6F"9ms[=qF?)F')&ACY@HE-L31$[BmK0m*fHsc4aQ94Qc/sI:rO@1PmH*I.VS%BVrR])[2eODZjkJ=dcK]T8_s%*rU<oQ<Ha&.6W>[]JY4!/IW:+H`dta5o%P&X&V7A_6hbCCoK"7@:YO=@YY1Dp>Ft2<DNSE9P*jRIqqT4cqe%<eA^\C,D^BDGZY!TZlUFN&L%_BuYbK2b_2@hkBp1KJ9T0k\j:NAJ"I'=C4Qg:<hQ_1mGXWMIk[7Tbu61akr[bS:9-f7oP=,Y^<J,fB9O5DO9#)"qVj`)2V@]BguDB@Ul(c6+P]i_E5g<qSif@T':FH55-,s,/><./X+8g^q"h36=/_E9o2nREBe\*6*Lq;jhsj9LBl>Ri8+XOGu!eR)aVM;<QO@=uCRpr>[Vn%ZZ_F#9C?f*PE6VCnS>lq:6\cgNp^\o97gP-jSbZ=*(.l<TRGDbk8tTKD'kQ,b86/,jWFLu?]I+X*2iap77NpLAC`R&>!c\P"Jh0V2OI%_3mEkG<.T=.`7PA3&J;$,iuiI[AIMfoH2gfZh`_fO1of5B-b8nL8Um'^*cm\LEW`@HE-L1mbP*m'`XYbK5un1:Xr1Z8j[EF8'2=3Am0pDY&/u3nrkeh;qSL4o@lZ3gZ%ZMcl[UU<h[/2E_4=1O+:D8BBnso"dBSrRcOu(1VR$S[@aql'JSH>J*@V>gB4!8]YLh[!TMLZcb`Zk"F%R3qIU<Hh*X#IWO9"\Qh0D,iiuJq-]cipQrMeCi6ngn&J1D48DV4l6bn?B&,V7,]MAA<.<5,m`-AS"!2CJI=8YRTm(7fHR>);CX,XcJ)[ftS4i`!1tt,h4FtD"'oV6M/r,]&QG</_I'^T&S7YT!?b?]F?&:2kO'UIN)!fj)ERS?E5BcSkMn9)!%D%=XPKloG2u3?oK7k9f'G>FHXF.851@b0e?a,Vs%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"gL4`:j:7m&Am_Pf[J:LdNcs5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S8I+*-.HgoH%-$WSba\a^rcFHiIse/E?2/LQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap2]r/jJ,r]j9O?f>'.^)&ACY@HE+fQ\eKj_a8B(XF.5n2j^T4X_lV`d<>D)4_e(^H?F;8hIlRKe#SsnY.&.mY6O5/UaNBQ?R7Ql&\/;XalTbt_0X=1hBZA>N(mkD=>qh<i2ne`]78G]A1kVk2j<Vl)jHAEm)7A9bHR(5%P&X&;rhsO:U;s)-Z_;9\W.cf)=-s;pn=bU[aVIODigPUku;q+EZ#XUb@0Lbp"7l_qt93a?qp5URppmF4Lpu^/*1dgEZ#XUb@0LbouQIOg%+c7/pHHEX<00`ZSR`e@E<"^81o[_&(Vufni0"W/&qP\gX.MAgnj)[mO-*;d[",J6S?8CE]L4KYT@p-4'A)VDJW'd]W)d+Dn9*:Ge*_3jNP3Bq[%:'3JGmJ3_r@#_a8B(XF.8M]eAB/bHR(5%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"gL4`$^m[+h8Rn5$2inpc\\94n\]>1:[enEQD\kLdNcs5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S<G?h?/[!p%t+3\]d'[n)(6tAc-uCYk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql';&NaL#d8Vq-Yf!jbK>+[f]\j%u9n`^.UDN1n337BB=@+mP!JrFMN1nq8d,L81o[_&(W1M3R,(GoqBKTB])'@0)rG-rU&_.rMI5VrVb>pG0T36jmqg(<UJfBIf(47Ispj%Fdmif[<H1h#LA-0%P&X&;s/2tod6FQ8V=0`>FDi9FHu7*IC-1bG<L)NP0*TE[sG7N\kkBol_!$>If%)#691oO0)*ILbi#q,:Y&6f\&ho=ctlKX-@HZh*mU6[%P&X&'BaE/j`\Anc^Y5E=Z2T.bM=62c.\bX[`MKsco=+H/=3D6Xqn:Wrr2TP+2;%PHLMc+\\-&22L%a.]_V,-[HacTLAb2mb%esLMj*(Rk<^eVPn2HfY:h8ej`L'_7H^>!;;e=rg3tAh\P)%XCp3(ELi8BuP8W(:OO'WlQ<C%hk.-]!@HE,al?2H&I1i-"NYgleUW)VrAMI2k<)3.ObKn3OQNseKJ'g`$0pdfVdqRo_*Et/fm)\:mo"fXR>V=?hLQ@KsPm=i^IC%L4Bfk^jb2i(B\QjS!G0cNPaul#kbft_tX).8%]"#IK%fjq.>Ri8+X@LIqde2_LqXe;NQhJ[mNT\IE#Th9s-P"'tfQhm*\\n9oi(i\9JarBC=BXu4SdW(K<^'WHQcmAFZ,c1SD&:[q@qX!@q'GF:?*Zr6??b?[Qd9#f5B[^PV)@S7mXS+TXG;^FSfbK_<^'XbhA>]&p\W/0,^NBrXA$6JD4,$./r,]&Q<Yb#J+!a\P07:qK-ck@:G0OOE]L4KYiIS0a^nRF/r,]&Q<Yb#\I8kfjfn<lP0:ckQXM&J**,7*Egc\d!/j#5qj9.L$ik:gAH7NR/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bpj!--(k!/NupF,o)ZM`pb1Qnl4r3I:/OXak!\II+3/_33![-^S6b\K"X6=E9i)j>&83Qc$rN9.gmM>_[snE`i-FSKaEheo*Y9];G#Tk,R1mTl!ugjh#a2Qg]B,I#=FO\I8kfjfn<l>+Ec9.!KB/7I/LK_oL6enrKj'hd0XGDp%Cthg`?+1c]3$>e[teGdY-=kEBTZQA7AQF!I$hap2]r/s!nl'@WFYmUji=6WKW'FS]K3bJ%/`X"K.=[!m=Fq<\u*#iuljaBSpQE]L4KYSPQOld0M2aQ)P4@@O&6<@5+r+;a4a<@Cq,fO'..qXT^)/NZ\Pfm^JZ]6`"@+739M*a2if^8bFCh[`n/pDA#,5'X>9?#895=d.$;jb%]EqnDnWb_6<D[d1eVYkUA,I2Vb%j\:st$/.U-aQ5=AX3Gb\9r%Q9Ut`&Q]!5N&3KVEmjb%^8qm!a@beoN:mL8D^[Khl9AS1:kbC,[7ZfBe9j'5>kd='O<?OS=6\(Te\f&UjRq-Yf!j`KLO<XdQagEqPFo4@X'?S86G;rBL?PMAl2[qe*ggMka)E`i-FSb@O!rjm(cZ>&%d[qkGTI2Nt#j`4C)cK-ZnLRDqlbd/X__o`5MeA&cRh#Z*^K\beXi7@5$6!Dt1!i^gT0:/guf<a^M7#r#5ojs^P\K"X6=T7.nnR]6neAl:/M#D$M?XBk_qlrZWhT`skrRfXpgiAhG5V@hW&!gHI^;YTjCN+^t!.J"<k<^eVPn00c-GIfqbNX]8A=7's/r,]&Q<Yb#IifUFP07:qK-ck@:G0OOE]L4KYiIS0a^nRF/r,]&Q<YcN&&;XMrB@)P/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXbFG@%^g^+<5,M"+F,o,SG:R&=IigbRI'DZen]>?E81o[_&!gHI5.M(0alTbt_33![-^S6b\K"X6=A*`2iTBFmqQ<qMFn>+mDI%Y^YeEkAn'8[pGCTGVVaicUNZsfu+h8Rn5$3l2b>6sGELm->HN!6mjo)'hIf95sO)u]gCllj7f,(Up<k"8']m=g@IG`QKXkK)Y)L0ioE`i-F4lUkbmFM!iH3Sf(*`c>0[WP[;Fl1g,\7)dleY'&/)H>2Vnh0f`T(qR+jgSTE+d>@9E]K-/gJo'7;e[bKH1Bs9=SZ>f:+gI:YDp`.6(QN[g>qdQZVJ[rFIUFeqg.u^Utb:Fl(FY94)\,m>V0E7rVc'*5CU**L#I\sF1JHQVo<ZoVT@l'o"fYMFmSf7F5!qW:+nkV[7R[lfKD==a)q'h4"%HW\Qhjs-e>>rG*0t\0QK1TI'=YFQb15r[kki]gqA]hACk^qHF/#8XbG5;+5XbR@b[0km=[L7^-"96QHQopE]L4KYT@X%41VG?b^;G:o9AiXF6#,e^'kCkjfn<lHB_YUB4u"r42*m`^'$Q<0f]!'h)s]nnmG%Y^indZ)p?]EgU0R5)-4QE-C;Wm#O<)74Oi9L27sNIEl-S>/`/=Sh*:UQU-\T-lhrjl[\`_.%iT<>M.L!-\K"X6=T7.nnLaP7jo3XWRYR6#iT60E@HE+fQ\j&GqgsO_E`i-Fa^sIqbHR(5%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-GC#+@ScqdVG&TE5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S8I+*-)nsifM?RU\DQ5:]3JS9J1CHhYVLI?l=G9403h6j>-8IAQVJULQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'VYF8=eWlKu[CbsSJTqQ?m/>7\J$oN=E4D=FjQAQVJULQrD$.<9]8FB37]Y1?l`hlX)bp'P'89^Or_q>U6Me`o'K35FqH<T;B=5K=X^hW/]Zq-\WR>[FVcm6(7(VY[%A/"(BqX3?nJHJZ2;2'5;-*R^":Rr\>dOiq1pKD!o<q<i.V[+iOic!@g1h>1u\fAeiVbLD9W]Esj]lg*s9o&BM[Rql'Z?'F6sF46q11eXWM]qme!G4&tPfqUWu?*%(4'Mh-XYWD+2W#&mo:Cc2X\iu-8/g8?uYk#UkrUo:=o("\F2ug!8[f0VoE&SXdQRU!r\IFF<WnD#Z(W)ribsq<^:C$MMOirHO0C:OBXO(ILDqE5op<TK*6cDnU_H\]0::bBK]8oT]E]L4KYT@Mm>i45bY"`ih<"nAKO7fl*\6%Qi/lPZ80AksI8J:^m+DtX6CU'qLE\=91C(F04^"I#>p+R1N#;1.>gl!kMbCs=uItgOE1t_i<"<s2Map78(X^fuWHemK,Q^JrDFmSA9b&Wp(&\4Fe8!Sg:SfL>aEba6IcY!,AdPL@;U"^u<EnlR,T?F"]B$_khX1@7'OB`8G+0<eVbB4*BbM:(tX`)scI$>H6^g+&%BRE7VRJs=oAaJGu3ErpDkON`$mdWRi-?Ipj&NO2B53bQj?[fiPE`i-F4i6Y@B2L]O&ah`jC@BT:b7#DWbMsjb/$&[dVhI270#+hUHhFjiICXagg%KrK<o)S2Gpj0Kjeru(TBj\fjtXn&._-O"5$7g@(\&NWNnrTL>i5@i]$6CYE#[BB]lgep[1.k7,4E#`422L^3D/%@FhKrj0K&G`V2oj5G#"S%^)pQ3T-:`b<^'W+RJ>(fpQpq=^?FB:iYH0%74s@\&!gHI^1WtZjnm!^3qH-B81o[_&!gHI^1X"[[=6O!<FHaa(6cpMjb"kGM=:9'1-@>&**,7*Egc^`1+X];_o`3W/ed+I@'QVY+&aMQ!?_l_$ik:gAH7NR/d"?YEZ"l:ONTb!pGZH.H#s#]O8I1'J(OP^S,LVXD=CN&IItpNkPOC9[e$B62fH.._t^:\U%^[#D6n/pg=c7SY@l_B<9K;sM#$eq@B.rYW#\[43f!;%5OGrYadh9XQHPf1s7sS4g6D/<:\%7Vhj;meIV03>Q]LX\=*(!%e^O?bbN&nmmYg?'HU%JTr*&K;\<EQ;ESji]>s+7;Qf[SJmE=QG0AYObpAb-J5CL'?O2'Le'HSm?dl2F(R9cF!Djm-'D-k[e<OR6kRXFeY=)Zq@rQH:hY8m46gah4+O1RFAB#_CW]%sO8o:)6:`dM:!i\Tj6%T-#*o-ZM?o"/u=An-1"?esK_+^I9RHBqK*1T;I/eBuTUjsA9--EYBODd-fqe)*",qVgZ89_R^?H03IP:Eb(Rc0P;)m^&oD*c^2YfpkDk@,p^Mo(VLpGAR03hm@#NpmrJ>8,D6eH+&EnD828so'JYjOn[V281nu7rl]fg+91KTs'\ha)hj(1<ZTpGkqcn^-L#/IeUQ9g120\;IJ=52S+i+)83X36A063@ERQ!O\rZjYo=T10r#(c+UAb]u-_i%KF7SQVp;G9&hqWTZ4]&7AJ(&nkO2bWYQY2oPm)&>0cY2TGV9[++>O6`TQ+_UIQoh//nDs>opaK`ddVhhBo(`*-ZdHeRRu-U.nkTtKhm)DuK-R8jB#d(&C^VoDIOBErgOJW[hWmNR-'pW!s6$TcpYYuIIqj"LZa'=HggY$`])A>9H]J\eK$A(ogmO\m'N?.dDhan4j*ll`RSBqX`uTWIV&RCeVLD.03^irMB23o:q=<[LlD_j+c.k'WNua6LH+mO0RT$c0j;CZ4X#Nde9fY;l9O::d?aAACR+Sn8H&qF<['RRZ.cho#LY)=5B`#,)2l-'&Yoa5.gKd&(+.nET<ZQLpK@fFNP<A-t?[.]or6VC`A^8n_s86.9b"_\-hgRM%;>SXg1]@EeD>@dg4%`\?^X`(-M[eOP1\injbBkgbB=V829)]fC%T,j'I6sg3BKhHbl[mADBY248IQln(EM?]%rY_7bQg:K!dPo4NQi=&5b]-BB\_QkK3Le4f&U,PWke!dBCh>imUq(mJfd6q`i$:fgo=,T^_2!bMk"Pa<ci6'9jeciD#E<=Z[&[#:Vio0b_jBVNAG8B/h^roW&'hi,"q,._p3AmA;b]Vfo!l#W2;G8%N7-`%%oJnu:7V5GoAs_ir+15gE-T'h*K/D-nrdX-l<M'L?LPb3e\.L/q%Q'%VnT?XIV8AlQ)kBi*\e,LDI_h@BJUP)lDq`&aRj]Ck_7iB*W,?4*PZcETB),Qs72)\pP6bM>in%^J*?:_DBIUp:[/lQ\i8'G61Q8pW9.U[<hePRHJ%b6Dt<]YkU516&)=_UcA"l5Peo6A9\h"[5JcU]^="=>nYbAk:35<r-]Z4+Lg4g5FgI^SNdO=njRVLrC.Bmh57*T-#Ac%5=4o=!bJiqN\aPWrf&,!o$blOZn3(,>iqUK<;\.4(469rnKJVMj__8X"Ze^!'h4#M\d'FaA7iZK2a1_HC(\s^7NKdZP@+pVP$$P+%3nmSrb5c)LhrjjK3Hs7uTB^57Kj4h4392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD\kLdNe9Nnskr4n\]>1:bUhg3f^Whn$W&5(*.peF-nio"gL4`$^m[+h8Rn5$2inpuF1],aZEk#>6Z_T3R,)jDnAu?nKR`LRY?R@okT"jbE*5?2YI]"h>$LalTbt_)fhgGt75hC9Vc'?FDDODca,W(YADVDs7)aMcZt6_3\ASD7b!q=56$n4)NbQD\#'KQ8ItN.%X=cFEf?W3NRV4*[d<Cf%\;f><-@NHF3RTR4aj"]t1`lfCFM%F1I@W;$aX^gJr+)DNh\I>&PecN-B1r1Yk:AcFu'uIdlj8ZJXpWhOJ&)o(h_C395*^q-Z?T/oQo\M:fO'Bs?cq_ff0/0?Go7PI+#H[Edikle<\#LTt"gfmIggZ!(G/]bba6AtD*^8YFtQh.p7ER/'G:E`i-F4[Ld!ft#e=lh^lJ+3jXR41F5J+q8R<52,Qfn5RSNgSWm*@BPr_VD#*U-^N/8*L>j2Eg\:!Qc$rNlZ$r*]+8_>][MoOqPi)MjYET9*i.J\\X]c>D_L\TF_tNHQFXU3l/RDT:--X@2ST_c>fW/RHnKG"XF.5n-^V1'/C0.8+#RD;CY=*GMSb5JCNo7ES==FuoeT)[SP'meI2_kSIFW-$Egb6A/r,]&etZPY/mV+VoVc#DRJ+2*r2Ee^:2`do^@E5CVlqW.XsS17r$0)V]RKK@i/u.CYk#VVjSQ4:9?H:LmeK@G=Y,nHV#5].mV;,Kg!Zm0..;u8iLOM3FmcuT[#U^5,Z^Ki%kfu%ANgp@**,7*rn\I]*V]HS;nlA'eF322kD>M\rEuDXdE6e$D]B]KG>B5!*fXD7.j$=Q9RQir(G$hu_o`3W/eaj^L5"]/=SZ@HA`AosY`N*".j$=Q9RLju(6ZjLjb"kGM,,bA6?5)fI'DZenU1BQHg:>[ATAXgifM=`&;OKpJ2lUF!5p%I!?_l_$ik:gAH7NR/d"?YEZ"l:ONRV8LKrs]]a#="lM!#EEg_"@hS37qbP:te@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"eLqb7?O5DqB3NMQ<5%V5Lla+Hr'Q;fW`kP07:qK=,[44NcX'Lh4,U>_[snE`i-F/R?C<,]WRth>1u`NR$gOp%iE%F*6":C6bpgcC6tcc)PfoEui*_FeM\c^CYE'(6ZjLjb'u9qJm4mm:M]iUU4lY[+h9Gi*g33CS/7^]2FE)q5'1rY`N*".j(kSpO/kugLb5fQu.k\1"s+K]")P/(>$=UIRa4sPrs82)&ACY@HE,aK);g^U"X,E+>Je>:#OV&h:AK$hCjJqQ-7\<1+X];_o`5M'Yc$'aiHMOqmGS>q/XsDVV5`'gc+%1<@3d1+Nrj_:G0OOE]L4KYYOcdb>g7"fA0'k`:`4;7dDLCI[)pOi6iOR>^gtZ1+X];_o`5M1k/RP]sG:J\fX"ndF"N;a[?$of_,3tgF9O8IbEd;/0pS"ap6,Iq]\57$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql';&NaL#d8Vq-_<UifhQiOB`8G+"XrrHu^)?P07:qK-ck@mfTfH;nnABPKNq;LKk%6392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD\kLdNcs5TIaJ"ot5_T$%*6zzzzzzz!!&#Y%o+1Z2Z~>endstream
|
329 |
+
endobj
|
330 |
+
92 0 obj
|
331 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 443 /Length 107
|
332 |
+
/Subtype /Image /Type /XObject /Width 648 >>
|
333 |
+
stream
|
334 |
+
Gb"0;!=]#/!5bE.WG`8*TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!_%.dLZ)u~>endstream
|
335 |
+
endobj
|
336 |
+
93 0 obj
|
337 |
+
<< /Contents 157 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.9db8d8ed16e382920cc1c7b7979eb51e 91 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
338 |
+
/Type /Page >>
|
339 |
+
endobj
|
340 |
+
94 0 obj
|
341 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 252 /Length 7888 /SMask 95 0 R
|
342 |
+
/Subtype /Image /Type /XObject /Width 504 >>
|
343 |
+
stream
|
344 |
+
Gb"/lD297RIDAK?'M:S(8h%93&,?c-$6e#i6:2,4/LbD,:afEc'_9*4>9P9.V!do[9>JLQY+VU>Wd3r3<K]C"FX!`_/DW=P>g#Ho@]Pc)bP0)@AP:G*=fO&V^:WRr]!JU3nt4UkkO%t4^E7sKqom@0cKoWHgY(8nh9AXozzzz(m6O7qY(+Y&B&`&4AQLk&U3/YJfolZ"4%V`6,XdgSfe:_m_JDs5nJ#@SgOeqLc^@ar3m.e-X$:mWg*H0P(_q,O%utMHd5`1(b0jP/t^f=>._=jq8g&1le0lc>'"/F[]lUc/3sh8(.4/G+$HoGfW;Uo`u!e*I!U%So)q@t)oL"VQi]sh^O2]@Vl-=4e_4i<^O3R_b`38QV%<7;]\708BDRtf`%#F"7-XMHX\MW<]2%+dZ]Zj_4VMfSYB;WaX;L1k:-;;`6mlJhcY&Cl->JbIP@`L+fjHo7D)q)$c)D=s@9*OfQ`<bndmR2UXkHaV=_"fP%<K/8d(MIi)<5uk6b0aLTs2"j'@.<pdE*6Ao9nSfP:&-8r2K#-S/]R?_U<g)VJC8JD&kM+:$f.)oD2TTGp"NDCU?gY,A5(6p*U(`iT*GRM<>1sk[]Y3q.b_db[sYlA@T?R;>Jue\u3a6+@"r_l9JjX[G7;0o26Vi6T%),*Ll,[Gb-%6:<#hrc_aXdlrW&Ek"JAJQJoO.=jF:nU\)ijk>guX9e`.d#\"alBV&"Z\(j3QloN]V#AuT5:nfbFmN'V4S"H%URi+:A5;-X<[t4@#JfqKjN9L(H>!j7HCND9!<D,8H1$N!"qJtRhiCWjFDThooo^*"[!bF6Y!nT6l[hUpH7SZ'A&4@mU<6ob6oQ(.e+:(:A4AQLk&U-Y&H%I.E_@q0c+:'1Z_".[p&9.rH-O><[3s)!<%0-C_T<RK[!<?LhKBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%N7IOuhX%p6Zb:g_Eq>2VpAk6or(LW`hq$P,*WTSW9Z?U]oD.<.:J<rb_u)@O]X8LT!63(o4E"E:1juZorQBF,!+:CPhXdT+='&&"(K:/*$9Sh!0JTHaH0MoAb+gWMGlWAO0GVnA%TfY$`>UiL!&-.)3BqH+e>n<$Is<"7?ues8IN.NtCbC,'[fHJr#lHh:!'o>tGlWB)_=IX,EJ*ET!9.V'T)T9#!)/(uoR*;i!!!iD7un_1o)Jb&KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%i-><Q\A@b:!-*YS!<D*`cN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%i-><Q\A@b:!-*YS!<D*`cN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd.MM^_[NSd,7O#!<CrE#4,h!<D*`cN=/`C\5.Uk%t(uiWIL/!8Q\oGlWB)_=IX,gCE+G%J)IX!-*PP!<AbqcN=0c%A!e)L`8Ge!"_)6*WR=#[a=V9!<?LWCmF/a!2+,cGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT?sBl5k<DTNA[M<m_=IZ]K&g![j#`kVLa;uq%t:D+%hG6:fG5m]s4cuU6kW_iq7k[pZUqO('*)&hc[YP1#pP3Xp\_-S%+"ZpZhM`uR\,RmG1b>>O0mjmZb=);7r.#Ar4Sf\QG%:M<R]@.2,4P5ZZUU///$:4n+iMnXF9^7erMr!ET-ELS`M,[L#f"$X=HhXYNUT$s5TM[Xa'[I#Cc1/ikadf"[,)];mt9KF^%mlAnU:"q(Bt=c8KEUgMS1t(eHhSGiI2Gpth$jEsqDSEKZ]j$5WQkN?m8ZT?f`n:J6rp[l0DXSc>2Q"[BbN@rp]+:Cj$]]X`;I:K5N$kuUpWo1jqUNRph2N/i/^j]>3Bn`p.gId6V*db/\s??jldq7bf7rDR&Bf$<u8oD*@Y*Z(mIlhl-1CsgPl/RIS3n)^<bI3:)lUGcZ4d;S7Eq4qP-H+u;A\$o_8&`cO^#31!&;e:Tf%>EPTPZJ#(kOl^SVJCBEgO0P`:nE172gpesg-s,MW_YBpMuW[h.*o[!B52_^O=G5;iP;n!(_:PDYq]tEnnq3t_0(a`g9Wc_L-"Glj!RV%c`&j0?[D>1\[O3(rQ^OlNd<hVLs5&XdQ`Rc$=?hlg,qooBHB`uiWX&T8r`YtIJ)78C@(c8`VH6sq;,R`8o'NhpTWi::20N`SPuXJO"OVNm%^^_Q#Ba2hri@<`:IcVIbbh+7ii7kJQH`kT6ND$<"h7*i_M_:4F_a%D:e]3P4dWY#Ni%NoBT2K.0id5SNW48-^g$fc]9EQL'AO6C9of4V:(m?lgGT08Xi]1UK*R:q##kQ<S<*`cerWFG\H"l/CYN;g>e1(]RE[qn0+k&^-0#U;!bggMpA%ASj.\`[9$.q3VhCW;QBMMQS)RXI/1h'O%Z'GP8Eq+cg,j(0cc$21I&HLM@=Oq&l%fI0XT`1*i$P/e+7k$jBknJrL\IZE&L\Uq7r$=G>?O%UUIJ+f!:dUG#o*Wc_1NboDe;O?`5u1PDreu=!%7@[JaIW5@->9/cP,bP\4=:DpV985!PuHbphKAkE=rCbNG.`^AZ0]B:i8U/O(u2'8m91g"HkRk1mn^e:$Z+AM^=jU`%SbkbYQn7[qjtgL+s:C"W9gT#Om_2X@ZK9lI8lGe#tK)k=WtU'mRMpKn<+?LPYV5Bm+/[hHG^^OCSkjlEDiP34V_.*Ye-D!lSt*edtD#mAM`oq&@qhm=H",D*k6o$pm$)T\uT&a)8GgXqlU0.MBpc\H_`&GmGNT`-c[k9kYN0"gJN%p#=8n&#B[H0oqhj=,;=]uBa<P_GEpgK6Y;(68B.QG.P7gudb0_4H]hH'2/lHu?:7P:j'=nDd"#\dV'9AVRMiSY$`M-#([7Fs\(J<2s2LY\IpA5:*AHae34OCXX5'Ceel,<Gf&p3sDZrGq1b#pO:^cFM[SG&,msp`P6Kaimk)2Dqqkm?:"VXS"]/Pl.Fja]3)1VRWgk9<,mo\p$mDcV)P$U8[#o&HKd9"Bi4?+Hrn>ZiEd&"c_1N!k?#Cs0jj"5^[lqjchu=>s7"qo:FXCMrM@cT9'LV>nL#DSB+,R-^AbCF2tDYJIJ'Gd:/>KT^7q_%``H34=]Egrktb8f]"J$$RCOq;\mV0dVesLIBl,7V.PrnrR$L#KXUS9I>%>^,Eau1cRrp_ce-f=#nlEn2Eo073"j\k"kj[?q>eG+=8hu,soU_l6^3r*=pT4f>_Y7&FVQ[(*blN0e&Y>U2B<?UR2XV8J9g,).aQQ,;bG+"dD@E,?D1?WQfC+Ujq]&e44TDl4ogLcWZ[QM+jcNnSh=X8g?i,hjs-u$dEoF73Gjh8hB3tLG[J^!q@d]WhP3(41hq["7F3l`7U`&gKleh`@Oh!)s;6A?&[51CJKf,.p^q/#40nU'A)lh,._hu^\NNoL#f&\_c0.8d9C8<=*pH93rnGM8F5*AM:k09C;`t&M0?+SPLrqTGGq>#NDDR-am/)P7Y4@c>HDT_Afn_A%-eRLMm_Tii8W)j^u]blOfja1BinpH'qd<;-L$PLd8pskH#U:^uJn_TOrS\Ml/O+18kjAV3MhVu/^Tfhq`kL,E`)dM9";VI\>Dnbr,,^nd.2tOtc%rR]$e)eEp+).'-gROY@p0(AXi0nE)QNot^ZDu?kXH]$ee"\I8>$K^Jc0O7hWGRSoD6kirD9E<%bMlRF;KCY^d07i<Hhk]0:S(`nlCWRlX\1nWl.'S$Y$Jf6r-.8F<SR*cK%iSadjWO,r2[QYn#K,]^N&:N@kaP3=6V<NCR=V9iQpX.^O&52\[H;8iHqk1.;&mtmO?cMRFC96G?+L^iNmg$g'm'i;R3]V)qL7;%]hg@:U-F<r9W?F;<2h%m2)$\:Oc6o+[s45=^0I]dg,Hu>-._gNNoL#f&\G[C[aL`ZETV"Pc*u$k^qu%r&nkO_"5oe'$oJ2lX'rdq!Y#qAVodh>OHd.DZ_["Pir);Qbq^.mQk\U@XA:)Ws"6A`:G'5n;@F3"J,jSP/Qt$^[qm:OT_6\L_AhF0Dmpu,_>+ZU-s;+07Jp(P/-Yh;3Lil'1<_?IX&B["ooc`3cP,3rqrf$Ilgg-fE(4k.ubG+D`40$KH:%Er)*K'PeT0]!.c_NT9Sk&@,jgj?7+t5+W-tZnN6eFJBkf'.\jgi<ROn=nf*h!Va4@abt"Rtk7%=YCSCS^03[pi6*.`@MjCG,c/6bk^.o%9+D6Vi-`&u9beW_Mq7oD3K]`e::872o:&[YBl)V.#K[Up=LtsZGM88gXSXR1rb%aekf4b6cP\fmeUb\qfHN1VK8fBgK2u#r9g=JZ*j8$KC*/u/f6Rob[AsZ7pjQFNAHoI8apjE-mMCj:LP_JnrF_e?kms4Z8;#.EUic09.pc*Ti3Pb<ZG:r:65D".Ff-UK*40Z]mPB+U+-]D\#DnO^iHd;M14[8"P^>Z>LnN6g$Yf6'p1@M]71haR[_gH[:a7FIO]1A.;]T1D2NF0%<c-P"URu-rd!!opMmupZ5EtmVlMM1kD*8OWH9""P5bkI!!2l03qo//1DP'YO<h+U9#\DIJj,^>pq!'o=]i9t(T!+:EJHlE'9\D_^u!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!6!-,4o[D?!)/t9oK3*RF:C>C!"_)6*WR=#n2p\9gl1(\O#o0N]%#Ih1G^hr:aRa;I4Af?Ak-c2c7Z:p$OUI&$59GaGjFn.a!`RI8meP]qmqlj.k</0,US8(W0V"#OS0=fguXLHo9n,6)BXG'@5HFMVD?tmIB&UWr7+ugDn0%gkG?nX'"(/84\g@bicZ\#3@D5q+-Ir/E9)9!P8IP/*Eqf^N1!7DPH6Hb*SS/"@'^"Q%d^_*JXP>tW9%N9BC:8NG9KbP46Ff&A)B]u4fcNF.9A8WI#VjmN7u"qG/<Q'5T@`2q986p^]4:m)`Op+]pa?Hi.DR*<1cgkKi_3J<XRC.Wm!PJGXUm4Qg9df,8RcbO;)'KSQBT<[uF9p9bD4mIcE?U]]qdua+q--P'R'+]dd+Jq7?Ka)_^n+.Lm5+cE6hglf(fLA=DZaOI;3n'=T?h^NT!J3Ns$oIUQ!N`gS7]Nos,$=3IT);qZmf?QD,eHGoMJ`T=*WlgF!0k'ZbYe^6cHC5@__,5-OlDHNIm:!$IZ(/(\*>^h^.oe2jeR[`%dU[LQ5:JU&`LE9A\QH&Mhq];5(#D,9U7=HgCeQqn=T`[r"c#^MkAudDP*m7Job+h4&kO-#FoF3*@hJH?KTJ6bVbZ2(<>o9Ck;VA-AF2pDV#&(n"4MS>5QDjfVmG%*CpYNON^71,I)pI0K??IW:WiVAUdi+CGOGJhJQ(ieV]TClX(\`$g3$j]'>coZB1nD47i?F$1L\&/>r@uHOT$P#HS3E/dAN.$jg1N1/b4_\'&$G*?']j(HSgRNF2ZEH2kHu2$ZpK2&DcUc-RB4[2=_;I')!1S9]qb5=.%<.W48PbrN9=VK-K4bood_OCaf,3iX]m`&hAjQ,D<>]@jXOKMo@ZUUFh[GK[ln2?\UJ$N?YeS?ooO7fUQ=S<&`XEHHeqHD2k.9E]2!3M+":0tYkt]^525\.rUq/3e)rclH(N`8RrjV&mp\/Keq`m<S`QA>Sum!B;U:\h)5Suqfuj,8*_'^-T!qZ`K]dt4D/ilF^\k+l=>HL:?OG=.[mr&'G=%dFRY'_C2*WadI2'qDk':ld[39<HK/!PU4-orC3fS]=Hd>dB7!Kb6biCmYOJF/%^N8S`fZ*OZ'Y=$f)fn,[c0EqaC[Ts)4C:17069_ZgUQi5LA2,cMi$C:g2,'5pY1proZ!D[m!3Y!V`;$P25INt3XcedD5t#*>Xrk]CND0&d(PU?<+e6TU=NqS!,WW!H[_?r0Q.%,AtkkmL@eXFORr)3rTa)&=3i0fdIZM%6A'U.p@sLQSHrP2cn^hE_cujCfnji?RbU-bm(UX-@(25'5$$9;4e==1_ksn%27X3t)9dRN2D_dSN[;GPg?q#'0gB1"=\d];hE,?i)JU5Onb`rH$!i>ZoGXA3PFJ2rC$'].+C<A]2ed=,.6o[93hA!-=]rT4>77%[#&%(kNH5b`d?qdl%l,KZGQ7`BL$+g(!5o><#69Q!4:_E'2g?AD+E$[2!'o>Xjn\9372n?9(BEBr+YM(C!.[ck4C:3r5^9(i_m-bA9hPdW%BO8tgP+RgLmKF`-">EI&b\KbYsEr0ZU\+Z%o"g/]P$<GB_WXAiB1i#H#U7f&<%27Rl!>/$DRPtgQ$BqoC`]0]:Tj$?ZL@:52=3#m=@=E]3iOTN-EG.O"`=11M#4Og5PiKXX.#o*--+\R+S/'_u-[RjQWK'XbZ"QO88I]G,4!dF*#X*8UA6UqJ)hkZ,Xnc,#N]KUH8H+LHsQl^YB'\/QK!@W[Vh0`%9oMVg_\MH<n1V79,o/S@rO7=q5ofeJm8Fk#_u<?:1GMMU^m][_l1SD:F&B`bQ[8B?/,$QEeD@`N(p<W:t,Mhh>XT@RK/MU\n*_!_W()aa*0ZplObQ'AGAccZbJ2H<u*f\b;6KIJRiPkM;:fD+j!nfJTp\`\;R9eWtTSf:J`$3_t(=ZF!%r4UlU(W7UkNrFqf[hh(CjjhMJ?1guO1m@ER#VVd`J5Q0KOq.1F9Pr@^V&`N2qY[5mph[+g3f_Q2#Ps2Uo2N>cKh5%*C?]lINDSOdI<.ei?7XI(L;k$k6i_Q^:KQ3LKWCe-rRD3@j/^!bM*I$AL'%ht/%=/-KAUV)PILEtnW)QMf:I8"eZ(#3LoX2rX0DjLIIu8hb<d7!jF!Z%43BD=BVUo;G&NunoKD"\"5N:?dcK`<'M/=/lkIX;e4YQeh\nC7+)@Xq25J)X4S_BNXI\A_mY@_g6LW?mr]NErWfOBj'I49<PDWH*->:9t6T%BM\or%iPgG3:NlCCeo&DriGFjtkCi=3?T:IEH0"iX/Xf0"K!lsdH%ZTM/'jOZ=3cZbS5H<rRV%fZZ'VnLg&M"@YqeQ2-uC'<'rLcEh-?J=C0Se(P+OlqA3a3r=@Q0Dk@7:++i/Q?@d_;:T&2#=r+0V8#WB\;kQ;Xnpt&l"mf*U7E?c2JU\r-YQbj8!T@8^E;UQ0)@R`A4L^\YOCtl`[FES;f*k'C<_!Dg36CR\(D*35"G?H<oubBuuh/O@Jl=*1$5D2JRSOeC!X[)KL;`35=r!f<T"H%EJ)"QP#=l?!I!N-?dA.eB'^[@Z/7dq/4UucSrCaIUUM`3KUGQLE&a/G/'%7Y!)$tC>L<'(Kh^3bindBPZ=\kC\=`0[%pc_l=;7J`E*.G*5V4UH<oQVnQW6\?7b`DY&c]8p!+]4Ek.7Up9lg%nF%QBm0K;-a2peW?`VBmiF;9?5;c?a;%oEW*m]%o:3\r@]T/FQEG3<*p@d<T]t:JggB0Q&1<LEQA\4oWLK7)mD[V%*)_q0&`Ub)QcN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$86Xlf]b@(R*A49,?]zz9S*3KGCIGc~>endstream
|
345 |
+
endobj
|
346 |
+
95 0 obj
|
347 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 252 /Length 65
|
348 |
+
/Subtype /Image /Type /XObject /Width 504 >>
|
349 |
+
stream
|
350 |
+
Gb"0;0`_7S!5bE.WFlN5TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz4pJ6T9[`~>endstream
|
351 |
+
endobj
|
352 |
+
96 0 obj
|
353 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 265 /Length 8598 /SMask 97 0 R
|
354 |
+
/Subtype /Image /Type /XObject /Width 503 >>
|
355 |
+
stream
|
356 |
+
Gb"/l?&2b;IDAJt$De8e;@5&;+V0."&A5+o1pkWXdZOeAKn>YF668hX$6]^&Ff1.'!\SA0"YE/?c.K.u,^!ec6r$Z`g3"sWQA$<t<bogCG@\h$V<D\HeWqcTmd+i[pH9VuF7-U1YqpJ!qsh.CkKZ*NSo\Q<GL)eiF3aJ;zz9IX=njR3D,+Ga/2,YnsS&TJq=Jfol*"3D2Z5su\`Sfe:_i^!&;5nFV5Os^NeLc>U%r&5.h-:rN1lTGJJ-9G7h5I,o!hg<AA_a)U4Ieh1ghm;(lQ]HU%\X`W3Uc'Up.iT.M=UB[&neeGUs2`Sf9kE9=**nLio%CDWaV+dhD[\U1UY@GCrp%=;Ys0I[Qp.!`nlIK247`hJ:*i8MB2NJoLbl`flHVG%mpma?bc=c:o=.iWo$8QVNpJQX?$W97fel4QYGFYX"@5^m$n1r,OQH72._oTL<+=_/c=C.%\OCA43t#9D)0:q;LJUHqlKh-JR90"&-m(29j!pVnqN@ZIjJ<"0iNeG@h,6ij:CtHD`h8L@rDm\r0qfdeeTL_M8C7[.L08OulQ'p(P+`q+YL/P8qu>2HTKKAX2^s`VT\)5c>\/SL/S[m':CtHD`k[b@41D3?b]0!i>IJ7q1=nVTfs]bNpIW*5b%P+`%d0.jPX\DE&'NH=-93B8-O=02@rTQQUF9abUsc<!8h0^<iV[`&)Hr:#k>Tin:Ks_:Jt>(j&2P"f83YMYC@C5`/QgW7[k?aiLXn`%ZR6hQ-8-Auf<o6b?;0:["(Um)6-M_*,Pc@:6g;976S\;dP]iL9TY%qcjlDh-P4I57/aoi>O"9#]PF&B*>>:dI6tC.M.?Q_Y&5sH68Ua8urH(:9"@4Gej9^D\,*!Kc:CmXp3!.28"@5Eq8=gq0,2tlY"@3S2LJ.39!<?O$nOS*L!!$UK,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=<UFHZ*8([a"\kk9W!/M7Rh!!!"<1]!\j>A5=-!._=/I`X5r(>\grBC\%Ni+E?4NFr7l@"aJCo"*7"bpQ`k^\$Rf!63*I-!rZ]ID)q43IG0rJ`Hh3`l@d"07=G%VGXgb4930!(r,,8JZ!i2b@co!!5R7>Yq^N@F?\M/reKP8!63%hhH_@S!F+3J]5%BH`WEo""TX>q,S'kd0h<>c+C^Ep!'nJ];"EKJ!.Z(u;Nc5="TSOtin1MG80.aR<ffED5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f6)#0?rI6k#4`!/MI;%fd.q80.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f8??oc-WM<"[;iW.(&!.<9]nc/Y%KB*%5Af#TGL>a$NJB1"H!!"*PO?<M.`#s=*JD%ds7)NsQ!'gZ0GlRic61P!U&VK-F!$VWh!rt^tOp:uCQq9mK(]XR&#SW=_!!#\380.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#FKs@s6QWiU5Dui*[D7Mr?QmE>MoF.Jk4mnJ+':=]m5]%_"<g_rni0k+Hi+bjSs,LY)m<s-31.1P5iO?'1<IsQ2Ia21s,L'$hl2)l]8Fom4aIQ3O4P./9H5:)Pqo+Mtd!M>IDIg<^T64g/p4GcfEA"(aP:%h"t=Tf_EJTC`\"Llb\eO40(pu)p-!>B2_9/[US6Zs,X(M1#f2$+8l*obD2ZPm$7M<6CFq9RuX#9=]ee-be(NtYRjdk[`u\50p5)As7g5Sn_O#CF%c46EO%BGb+%p.[ut:*I(jiM50HqhS89Hn49*q"1OafE`qIu)TBSRaA:+2EYqt2W:V61\T<g$6YIp=)AP@a;?[DNI'sIQ(l_e(XXdhOuq"Y`]P4**o;BPRr%dcTl]3'0>boUlYF'W%PZRqXQS_:(9Mqt*lY',B8Emb&(Ab6$M^R4(5$L`*Reb]")cN;(g?9h:mBN/!jr':8XC\cEfbDU+IrQpP%U?ssr(8R+Cm+5O*FOrt!=.W2#34&Y^^SI$Bq+oK,jhkeeEt<PV[=e"red*di26CQS:/na&np,YL#<C0'8H-QLe,OLSNRq7g4F?Lu$ZEe$oYk;Ma]fO%8\U?`U6AK@oqjMB;=2jd,=;*e/9C3tiomOc9O@rrIX-4D/7u0!>iej5A@pYNH+QpGHL9eCcg$i4V-W40=";@8.b^M9BL*j<NSVA7MTqn,$\,s-[l.#GQ#EP[2QlCB5*8J:`59O^`Q][m]2/(lV_ZP95+1duPc<p6iF7;"pr*!f;Nd=WO?b?TY="^.9=_;&DV:,Q8l[lD;0dlADlH0*Fi`#'cR,-:qc:[`Pqe.Z&_,md6Y_;c)jPW<aj!1^gRU!>*n)8-'.7.6jjc/j^:(>1q>K<L9:%;=rm?Q9P2t(H$aZJgPe=C[l[`7B5,qH%"EO2C`U%jTZklQ!<oJcVq''>>DjicbT6t@W%b)VHc\YOq:>$Db[&TtB[[jqu<"*`kT`qFVs5DG08B9\3[VfAXHh96T%Xb[/Gi=H7qmRVB-1fQurEbZV\UOKV-Zr^uPAKu#3hP-j>G'bsk..k/e]7R+c8%\N[kU0o3.#;(le]n:WZ$!`Z34;6e6I8#Xj1'[FYF>7<G_7E7qIWg_j[*]VH2?N]Nh)/%T_>40lb>(s0&7tYP6o;SNHl&gPO[g?ba=Dn`m+&P2p[AUlMRj(bU)>*Mm#@E<AY>c'#8k+'O]U&A_asrqc4Yg4`=X7BB9=b/$OmH-tf-9AY.J"utemK(Sdj]0>>6oUAmHc2RPQpO;nQ05c13raO3E<G2$=h,HZjcYfkV9/hn08\T]7fX^D:F8`eEXOAFjrSZAr.S[@bq1DIXM45,k`E!;FnooM^^QRr1[_F=an3H9\Pm?TSB'D,B'!)4.1:&gF@ccS0ar&*P2;-,SDp(XbBY3lD:1E4G5B,hA8cSa[M\iR']mA_YNV?%kBA`?0nXB.9bor#<-D<GHnm2hc87(]*L\X&[\0h*i[G/r\k&lA=LZ55.-gu!H!9Y>*O@XifCS,Q7+o+5"\+0)tDYB+_J,Ehlpntj5h-[3.n'(dLA(a,`o#B9FZ11;gOmHG)0iQO7H*XWLb'N(uCJQU]`d@6:e",1ck0nY9V?GS,7[c<;6_6rM6[;M%P'P$2"DT?-W(U&=;e;1D@h]m5jD:`_Z/1e-;WX(rmYcopId)VXhL=YIPq,q!hL"8UAC'Yt\!)=!\o>K8$`0Tn>.O=9YJV4V0mRc7g,3,FO%_Bpj(O7-H3l>@.UMI2+Sj%RLJ,AW<4"mQd"56fJ+IY]jMNjEB9q-jrg!04J%53]^UE[)MjdWu*-#TZr_k;7(]Gi=ra,<cm@!j8mI_:PgtmLdhpp1d$.Qn_htspL\1)u0XAjt71J+I?NHG4!Ro3h9"Bm3rW"Z3H.h="/`[EaHak9EHUKi)>P%cPZmCnstjH'65dG44MDr+//ISb(Ld\WW6j=@hV+8`ZE"2&2Kq<f0iVh:F;9_k5'Nk9)&EqG5.R#/I]oX]RQ'r-l'I)jDqOq0MeD9k5L+HcSW?i??BW\7\fhRg)%lSmGpnIOnKHq':7R=3E5;oq0%\a8;<qU`2T,OHrRDnl#-AH1BTD\bF,3j`0=cF3UGIB6]Uj`'5)NRs=eLGmT'I(?F\+>55!RHIH\3*MOoc:Z80Z[Mf<CQ4T6M@F?A?+2#QZ7R,oasFOQ(DE/5nX"^slDpg`<dNrdHL'!TIWG,8[;4Bt-i[J_En-EP'Z&$90\)t^J*<5)U#&,(G^etugKHO"]7n\$IJ<//1.ON44T*L@1s`ScCCf6d5F$5s^\b2!fckFEh>^6]J*k>1,#)R!l4=j/ZYCL=;B[(9Gj);N4+I%Yrj=N)l)NAhVBS2%7H&oa)>dEJH,WN#/8eoOg8e8o-oS0Kq+dd'GH'?6;6!l][X2KCP&KlKf-pdC_c2gjrm"mLOsg/lL@XLRAh07\"s?*-aoB=5pqntk6"<An[XqX1!TG>dr!2ur4@(6Dj8n6bOo4T"r>\*KJ`Hjk,F/0CI[2+>5k4pFO\5W!Itf)/5k4pFOo/Ju6kui\4PX3E!"^lK^/&(+fIGh2O\N.h85lGi1Vg1LXl$]"I^f9[^Bs!\V#VVlad&R,$%B92b++DjncLR4ZQaYp(^&6l1/q#aPUY9aMt1%Bq&GIge,%j4qPT%=It=M(_idU:-A[A2/=C%E$"%78>SmhKTO<p56RagSBkXg&Va4:'37^F%G.Q71EmGo+5+Q%'XQinjb[t"Ar0kebKrjKKe0o9E/-(3X8ZiJe;if)5Qb]X-QsA6)`HgJF:J+F>1HhM!`L;,$3RPG1;+7&]5&cc5EB8LJJ=9'4$tUPVV/GqsRjDu+n5O4>+s*TA^!k/_;u8IGhYJk6GuilEs#pJaAq<OV$tWS@fJ/hd]XCFf12m'88q+RII,K^2Sid!00ZfTRoXela#9)oCk_ie0,]@9PZ\0m[3^Upn0:=)FaZ$B.`0`XepmL3c:at\VKXg*)E-I<'])'TIjmF%8@;t6BPT?!9_t$K!/)%)1<&TcKCB-VOQ(\0X,%f9<GQe(t0uD^'!!!VK/<g,7&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2bQoNp2?3`9T1MTq!!&l*,S'kd0h<>c+C^Ep!'nJ]<q;;S"D;$)cHjb[FdB$J9:`[Nk2tg<.ro\+fdrn[V^sNq5)cffB77/R6ES`bQTBEN;@BKllNMU@Le"G6i2d^pHt4+gjE%0l'gDQb__BE'AudeSm`?R$>C-/B=j;`$nc['I-HpZ`S$$e5qT.@77d*RF?#7*e3(-n?qK-#O4,\?J[&S6aa/'r)9"k9N:["ouJ"^i4[-#6Aq>9TPg[fHsI=0r-I?/P)'K\CsSa#>3?PN4sL$0uI6:Q[014dthCeJ7OlrF4q@C23D`W#l6n)(Wpj6G0qahnWQpn5b#Ki)&F2%s8X<4?oq\p9'bXmC'g;LQLM7N7NW9<.KEI;3i/m:o"6;L.?J+s+_1[+t'Lak%>eQ39k[^3s^q9(G^@/MUSu5$2,?oTYQ+I-^,s>@bTL!m$<fnql!4cX4;-Xm4>]4hoK<4_"n]G^K"mSEoRT0>$<1C)>B$%CmI`5#QR7k]ZgQSdiolr[:L(f*u)R=`1)342n*:jiH,Z;Q$9pKSk\_ENi\i%mHH9=R+#3m!j+0]aBu^/(6"11Y:_!+$@'-Qe^9#07U!Fl1&6/>]g@obM9FB?9M+_jZR4\!L66$\Pnj'DeYTI89seBFcJOe%FBil97CA\,Ot^!gUH'en%Er&I5gW@#7T>=;ROPalD0T5ZP&EQT7tJIN\Z67Z&n9]Ap6)+HqlK#8+OeN944&#j7@jX>Vh2sdgnWG5#Lmi6-@Llg'<UR9=`jA+&bcHn'?_/Cru!i;Ges^4.5j6T"hTZY7(PF"fgC*]l:=%jOme0<O0uoUlqq#4%rkc]LB7"92Duj:EG7%jH@hP^UCS:o]L/K\omW,bs<W4B"02FY*8ZmV[C]AM869TQsD>Z<?Ks6ChbQtqMWtl1JE/;Vao-io0pdeHdnK"8lr`o2STnS4gq`\dI)H^nsT@JBsglp39oIn`o3AfGJ4#ch3V/(o5^8L:f<E,\2'K5X3(k"(,9_ZHmB6?1(MDFSf^5ghEJA-Q<nsrWZllCW@Q[c[dX''i>q6nqq0I"]@CA3*6OnMi@2)<Xla:6P?090%FhkK]^l5cdTOg!/p9MNf!)ngVUhS^0DTp9#g'su1FC3k,^U0Mhmmf@A3G3\f\CarNS]jX#'8"a%<q%R\&pNVhU&HJdu7VGk^@(Zq'^B@hg\dB^:U6\psFh*ABF->39>+=X7!BQZOX2n>Z3jk%<7%o?5[c<470F9V)#ASOn@>>oA?E#ZK)7)$c=hUB#Z4oUbeY3+)jp1^+\=?Nn&-A]I8&R0Hm)/]frUc66j/;ad3>)O"+%Yc7I89<*sj\00s$U:tA^ZA>B'#eKObRMq@<-VN<H;'n*X-Gg1Bu(g8B&,]3:pX#;M=Q<B3tm+L"<Xp^5SECbP/[eRR]FgN'[%:^<?<sb'QN"MuK@6+_*d1d^^nb(rnf%/E6r+&+a1P#$2YkG%!?oZ.hX[15lC(:4DNA*X9!'nIFGlWAN61P!U&VK-F!$VWh!rt^tP0_4!2]=Ac/c`[\J`Hh3,%gD/0..NKQnb7/m!6<n=55lOJ7m00&QW=DBUh:qiq3V-G*$7gS'X/aKQF<,nXZTnH*O]1*+ALX8^0DJ_LnG0f5r=Y;EMUHDR:j[7OjC#@lblR9UsksmHcE?TH$MZZY+S$D;BrRi`K"+!/436o&c02_u:OrC$+S?b$<`EZq3V!50`Qed4f^+[jFSWgKYN@IR0u*]p)NS`4T6)3V/^!Q$fK>ID0ZdXRnk@9?,qT^5>aO3Ye$l!oSI8gBkr=2FPmN/>r;C1nDsekdh_GUhmY8=BCi)pR9Q)k#tU$rJ#%@G&Mr&Nceeu:R#iqG<*Wc<LU?SV>c>k7oUOuLN]S;f%`<#+e8XN$>]C(Bg2Q/RSKbe)7cOA\U.*60[a(t^-u[fWKY!SphCT#3f3KTeW]AMdo8C!>+(j*DpP$0:pTfG;VsV%ZJB+iooWLB=6A&'Zd+UgiNdPn7lc-u_L"J3#O9?EIgO7f-/jQ[G=fohmfXe:gU;H5D3iZ17+l-5F<p5f?h)-:X-3/R6%q5J7Q>b;8d)je5f<C6dO]O`WcaQFNkHf](hrd&U,0Z.87!Bu'Aca?WcL&_QqI$n@,;[:29K+WhNAiS%r/(5c2Eg7G)Fsa]_0bmDCrM1rt3B9;ltT?=fgn?=s`s^@C0#3SDk*<=NNI<\"+H8=pMh4baJbPDP-FV<]AM[\?Rrt[I&)Alo0GuJg^Zc-nG*uHeJFh?1^V.#>;u7(7c&76h9M8TUp4I!5roNP[..+5[NF5L?,bmpju+]^U9BMO1k2dNkOL[\E(Wq3l2IJ7-E:QGWnJ?Dj@P5s)gE;BN&\.B4\IMEo!!sg\-_0b8q.?j+Y65%Bk"qWuL=>gfU&=T"O(mi%;T*5FnW+:"k:s7g&'?9db!!Brl[=U,0[Y8R=RC!D[fEPXG#E$WlU.D7mr9M`6pfrqe/dpcE(4lcDdi*(of$o,/`tDf7OQ#fZP+hcn2'-/\F(DY;!WH\%W4nmSY<W*=4ND="0RQc]+/B`>57Vb+L,h5pLM?U:20Eu8VINLD`%:\*5LUM''pb]($K]]RPPY.[&W7+rG\q,:JkhHP#q<Kn_!6`fspX9[]78fXN>c>%L?_'Ru`4rYe$D&Jt,?'6"f28'[IA:mF%OOlPcN@2Ie)I@j^'b>/(;r'bZCEr``gKb`fXjD%djeFA0?XW]emDDK4rt_.;VF0pWqrF))bobAl]luQQ./2mVP#b(S?cJr5mM^0FDdUUhHfiNQ_j,8U5IlrJY-G'7<g.FMd&<%Sh/gLX,TkCu#0@6!fH7@=8!fC(k?6!gY2hj2DeQQU;d7<^:OGel]__1LDP(&,:$>51?t8LXj?I)QR;nR4\*"5LW@#?'q_6If^I;dga\*]+_g4)ub76<5Y;cZ;j<mIFQPf?VSKY>WbeYe>K7N"`!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;Lmbp:XWP.aG7SY406&_S`I'S1dE_c.`;a&,EVtur-r]rLC!\+H!"_0>+o0NRB-oaL1R5oG!&2rd?YN\[..*aQZT0P[F`ZgcM?9,6.Ppo:grZlQlg0RL<?p*@+b@&obqYq4:7OjC/-Gr^@CdcR?Yh.@P[\j3f;_N(V0Pk($I:rI?X9I*,B[HnT`nUWXCV;:Z3I80Ij1l3aV+E/4@$PQLZHEC@2^LO<$quY&a!T,=n5>NkaJAQ4eanXT\GIc[75CAg=%`q@f'<lK`_3od/uWr9S_]b__hmdf4G.CB@F8d$$D;dXI'5uC0ont]KD0]<MONTMm[CPH+D#s&0\;LhUZ!%au]\V\76)[#_H\($$u.B0HOh2o%$.V:.+lD7V]WpcFPm'1[M,26S8Z+c-D\=^djdVOM&(O9MeO!e!YE>KWMO_)C]L=*WK6'fr/)P<\j?+jEamQn'E0b6@#o(L[u>!h),0e13ptPc5>,;S1W-JUpdV[A,p9LP0Z!E3t(J8UpdV[A,mI:=dD/M!&T5e!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f6)#0?rI6k#4`!/MI;%fd.q80.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&`]3?!!(5(0$+1q!!!#7XRQ6q5:[-~>endstream
|
357 |
+
endobj
|
358 |
+
97 0 obj
|
359 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 265 /Length 68
|
360 |
+
/Subtype /Image /Type /XObject /Width 503 >>
|
361 |
+
stream
|
362 |
+
Gb"0;!=]#/!5bE.WG`8*TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!"V[#[#$H~>endstream
|
363 |
+
endobj
|
364 |
+
98 0 obj
|
365 |
+
<< /Contents 158 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.81808bf289bfc83578ca22d0176fe858 96 0 R /FormXob.c20285075f305e3bd848de8b08bf296e 94 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
366 |
+
/Type /Page >>
|
367 |
+
endobj
|
368 |
+
99 0 obj
|
369 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 570 /Length 52388 /Subtype /Image
|
370 |
+
/Type /XObject /Width 600 >>
|
371 |
+
stream
|
372 |
+
s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ<3W`Cc!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7MX!$7MX!$7MX!$7MX!$7Zp2m@aIZ?#^R'rqh9ElD+-,7Yp$rCDB$fiA:DsPU,rj8u*]D1h`t6nQpaZFaHp$5\Zk[R!<uWK%Br%RB#s<5F)2cI:A9/YItls<Zpp^LP`gsXhPXj9V*WYT;Jl'ps,Z1RN3l9m(^%G,)b/JmmaDo;CtgCT,q#*XI9(Kb($Ns">Iu[61-3@CNEK$p0uE<'S[<!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!9Tj(`)3RBRlHBD4HOljL8Zlb]S4fkb+o_OWi<T%UmGaZ?3pQEgKV8>F.^`#iAB`kECO%SGf:oM\N''345IIW.n#AV20_"TsneS_4bs,]:q-VoQenG'`3r@=67:\'/F;O2Bg&<aXr9DLPes/2jX\-k<!8X2Aoq^isDOF,)2meq.?D<mO,_Ih_\FidhF[;Zt72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!7:PPr-F)#I(5O6J^Mg`"DS)P2rpSlI(eS\n6r'OlY%bKmC8p+U[MiCtn#mmbFq2;$oGpY6Rr8r*4PjA@O_fO/Ks/`M*q.GtV-1+n[Z=iES@5/+qO+JmOid:<n+<_B.ECG5rBJX-*66d`TCClPh>[J@rr@J':Q48C4*7S[rr>mfOWrHrrr@U/peqXbMsim\g1f8e+8P3a=!.1_(!q'^OO<G<^)6hFrrBk4"5)+ia#ES<r86LTVao?V5ND@Rf)QoO[Y822i]3m.#[,@N!$?F=Q/Ad;FN6V3/#"lL8(K/3G4`*<KBe\Md_Di$o.Zs/IXr<kdpkW21H4n_AMai;1%OR0Io?E4r2WB:)OFX&hG<Sm3-m=5$gpG,V<R8![MGY&$NC*[37upa!7._gpZtnD9f5'(mU*;U@]NU60Yt,HrF6r.:qi!f5Msql)s[S*!/4`9dmBRk:itXi8BI(53\6]TVV@1+=)[Z0a20l02X>IVftY3/mLSokj%VCG]iDG3hIc8a*q3NW0a<VeDuTeYINm;%oFj3K&&?\qET5_K\U@n6#AN-OPQ(W1nQL[9C&<0?MU1@?qQ(LMg@T=SfVY5me1F2g9_8^CUTBcA,mW<I&R'?!/^ZEl&Oh)0c-sh*(u%6A4b!g?C9?WjBmuOhXeV,1[(MHnm70<"D]="PPQ(V:p3!/"cMjm;<rAB:d9IAh?1+#&BY'_bl8i.nI)qAW%jU?i7b>X5B^5nZ/BsXtKt3*p$QnNGN?6-0php*3TABKJ&$0ec<H@p'^Ae3)Z.;cHN`bG#AVnst@?kCa"F>\qXA4kOMC8J!MC8J!MC8J!W+rooL5c2!qVbr?_B@sqq?7k-`;=b7otG789d7in9ldl.@HnN#r\^ck8kYT9]<`C,N*e'bp0ZCC1SqUlK$k;a`6lI>lLHW*58.-3ptJFs(p"sne7Ak(D':G2qO@n'4qQ2Ud6=5Pl;o50>$]3S&#/^:[;Er(E5j,Z'bGIe(^'9*ql'7=K)WLD5M@L=/+7t^r6-CdGbX^-!2=/X[V0tMm/)kBo"9ige%ACrc-M2D"n%\bbPqR9*c"C2;eW@<dMiR`R1_B>N(,K80jm3:Y<OJ8jh/!QGi4nM)!-tL7d^@;d!)M`P$\Vqq-Wa($C#,lc+fg9iF<Go;.]b-O1f%(\b-JR6N0<)n7I3+-GV]eBd@jLo/38R]s$0C/SCLhA<((2/'7mV.#j<!qtTX.Q$!AA?C?[<*NYtnOk]qWLtOfQp[S#TlIYI?:r<54.Xnu.ARt;mM\k3tXUk<V#6&a!dWF"9\p^=O+]81f;13-Omr5a41b&0p&e1nW4J%1W&)o#VqTrE(UNHRG4XDimT:\a#b+me!AI9qu^B))WZNC9W!'R)!iCu3gJ+Mn0rVI;n05VrB>F2pT?uD.7J1:DB<G==+=DqLPk(XQ^7j?%FJ00&VJY2[$=q[=Yj)1%:_ja9ITC5lcT<'MlV,iet\hp%+9XPu1`Y\GNYI:@`-\8_+71)Xt/]JX;r%YO]]fI[e>DQHrDIJ\Sc<VD))!f8@bu-V]:F-lrQeZ+9KJZ#>-)$1m1ig0iqTq>h/0*AZHE80Gp5R8k)UsZ<dbu)%\qX3^\V`op!RE,86hqX8hc`SVSsN9\+bH*t5Z]tc1[C2R]sV^HIm&9;5HEb7W?pf,jA8_5RpYhLe/(Al>H;-r<T^/S''n,HrB!B,iB,.m2tC#1eX3N,Xs.Rg\;Ei/mlEENI7U/gjpS-cbB]kJ1QBed@@sKle:23^r2ocsC5W#kQZHs*J'R,@^,OGOE>?ETfZ\j,S`FBIf;Iq?"EMO>@S!:r6d_.Z+3(k%To.hc*76$fHE3tgZ@B)&[?/Y0?!M*m*`%s[UO?,2Bn#>QfAaQko,[/7HV&Y3oj<j<d9LKO-.VX_[oft@]4':Yd!WWTZ@@RMqL58RWnNB#)haY)h+pE%7o4Vn9^,/!ql]&0Y6hpKT4bq3kZad=.l1S-MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MU0m-Rn_85Y7pBB$SlAlf]2YD35s"8M4Bf>jSB_iSu6q9l;HiW/A=`q`T?S,o"Wgap:ll,Bf[Q#MZHIA^38X1SF1Y5Wu?o63dPMS+17&K/;PX@O!U?O8LO0..p1BQB5cVDAbc(g;5\b@WUW3jaaUFldn"1I1tDn&L8sMT?X_EdY4cf)+aJ6D)n(?<T%tm<Wd:MJhWZtbOd-PT"3.1K!m3dSk>`IB/*osub5$6(LJXLIrKd9c@:KsE)C`mg[7CN_<Q@u5qGX-=XJ]2=Ah('`R)VO)q*2MN!L<C!<chLa0tC4sB;`^3ZbX[pg"opT1&4dZ%-*E.2!\EoA8,4lU1Q)9.UMCS_f!J7Y&L&lA.8EPB,Y($B[4&TIK'<:bOJ,lk?YNNf?["NJ)83`;Zqun3rtjgc8t!G8B4UXC%Y+lFcE5C#FM!tLg7/k<_tQHl\_@H?16HY:!om-+d*[:_oSifE9H@lO;e1-$k-%kBpTVPBm?X?`e@oc-+oNTU_7\c#L3"(;<cMh>$&-3!3H@W=1.Gj54@[eIFbAC=&L;12N/#AXi\YM;MW#[)#gp^hV7iIGFA?C2p'@op\4$prUn52!*Z^u8!IjmbY!d6ROWpEGqt_(\NL5=5@7T0l1b'=b+E;C5MH@fQsI1`kBVc)iu.1.IjuFP]q>3[O=A_>gKd#_]7'pkea0*(b#qiUQt"C+gI$QY?.d/;3bOmQF_`D.4I;=cq26"VCfbm)"l5,MOiD,hm-29k^<a>KrO;/3ai<5FH'mjJD]`?3ZYk_a>V;KcQLDE\-el0,\2&m[ji9[5c(9P.BT4uCl2>no.FkI&GAk*sD9\Q^Q\+5>2$ubC(u%3/QL2`PU7hM:[9Hj\Ujr'b#saIjn>'\Z/jSU!!iEQ<H*/]o;P6<1OgEhgDS1EL.j/N7&OU52LQX_imGq9YOqEu*+K&PDW;NZ'WO04NXim[nZ#>nW>(=@FkL=?cb'B-`]m#Hlcgq)9Gi0PPF2^F`X2/q,p1Tam<e`Vt?Rb]Q@)oE(3!5=h,`\PJ9:u!Cq+d)VTPJ+kCp(P_RE"(iDnLNtalAh=Q"b;S[Z43CRj_^01D%W(2aNILCipT8HEUrb#;<T@<hlUgpZ_WoCDpo`1t,^m@"tG>1mU%[6ruhp.`3CYL72cbb\58aKr$_3DY^[+k'I_^[!-3^&%D?TeWoO9ULb1rXF`uS?-:(_or`8`?4V*iX(p?drrC*NPdlEs]=[MBVEh;=rN$rf')YVJU[0HYa5N@[c[@pJA$D\b/"Go4.&)5!`7O[m//fH:4s=pG?%8i0oMOH!ck"^9l]ptVICfFY<n?C.V4-MJi[=M1:&lA7fBHL;93KGLq4.->/#mQ3Dm*a%Z_[A:.lklQr20?jITk`<iV#S8,Q.F>frXeH6h[-*aIL01q&a=do)-_lDd<8/1Q5t*epa<qcIR"T)_92d7Br?g^^]F^cHshXl[t.,N8pEe)O2W;$8\GH%7gC*rr>8^GgfAu[]l(>Z<2#"5`,3&MPom!!;uUOc43Ur5gQ8LeCkf/`1fh\h5h/V)NDckUYp579,s-mm,VmJU&BII?[182Z$!1pEA=t*NO269%El_V%3],&0[;U1?X>hE%80@+QM12i]6J6PrrB!25[5]S@d7'91(*3J9_H*t]b+LtNpk6i:YC,tX1NkJk'q^pa*cq:k++E:*$r)JghhmIgc,X/)&^>>gu'0C\\P=VlG`*u.++8c]mnB+hoMjBVTgEbL]YAhCV9Hj,;8qY<Tgj8%puFok0i6NM=,bQkdl@@Z'S>MYEH0\PDk7W"--II='notT&j*]7ulLn*-%Y,b[X_iahco!PDj#+-EZD$^"oIp@l1Gq5r"PPU(UU40Jep%""iC8,HheMcVNl$rr=3;2!j&k^Z0P7ZT0V?04VY\#bD5p:X1[ad?ZbK<8a:Dm%!o_*dcFgVp$\pg)JV1h0J$967#R:DVtL$lc6P!CKjSthFe^1X<JL4.O#-7@0D093#EdgGVp!i/O!Wb*U\<[jku)sFjJ9OKi/FdS9,H+P1:kfp%ef)_'IdmqS2#h=>+/"2cACUnjFd*M$aI_QkaM4G@4h:rr<YM:BdHke!f8hA413(U/AbC#"$N*jaE+WU[%5hB4*?$SRnB-,%jm`/+(Mi#EIu/3#koeC9_#<)Mi!-k0K5I!O>r=n]lF^Glo0eT/sQmom;s"fefLshs#(M1?#IPL;t?%R>$Wr=CSE(UG6^D`]tYuGg7d'Z!TQW&l,b"Fb/03/J'S?fpPUOJWYN/GWgB]7p_K]Ya4$<\nGuRK&0T\4LT,.EJ);\0FtQq3f6LMEGR4>Fb&kE_LeQD%?+pI+G#%R2/ZD-eLpk%Fhc#C0V]nq-Y93Xe+2kLM'8?d]%'h@%CD*0\&qh]0iiH?j"$9H3R7h@d\Qlg\=+;ZO^'t@/\^>WBXq*((?#HYB<N["m8n/-X_h*0I`0eCLsp3O793:[Qu+4J7WZm"K[o';q/]cq>Q3`^h(!q5/i%Z!qqX=0dW;&6?,$bsO=GA>n&o!d)u4dT(%i#"H^SfbTs80`!2L4u1-66kkI(U?*;?>aV8]K2Eq%o,,cqbk9Ol@,@(%9s^^Zg*_mV&4C@S)u8N"3"5$T[!=&mG<ocj_+_8521Y,<.]=eV;A&XbqL!#YtrGUF?Li8F3*H1KXj5N0Aue!?=Z16nL-hu)/LdnNiO^KZPBVLiJdY4N?W2m5P;$2#8X*^qC"qV03T//(_92mA)?[=(e@oK3PR.iq8ga%*Lr\ZT'mO`@6kCNO\>)IKf,N`emK\\4A[>.#]R&1Q\Z/]R"m^UaF46dV?cf:E1B*@eJ"VT2K=/JQeQ%r@G$jXTa*l>f/NkCMmG[AKrkhI"m6NE8TI].^qs^Yg+sL\9<mb9h]i_fZ?'\:M62hr&i"f<76Ce75lU`gnEU]<1]K-JOJ7[WXSWW7l_2RBK&U=raY$XIc,?WofgU]8O)oq>UG#6Ad1m:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig8n[><>>Mn:0QkJYFJlq$(6F`N@R[-iVrW@&M3_!ne-p?`J@V&O=>5LJmD4]U*oI^mX=R`!]5CUgRn[A&pjm@e-Cpe-kmO/%">QV$]NVQ.lF)VXmK-+'%VF[&X]gfDrKc$GK+YF#.hRZ0fF;Q7E$hu4./q?_SMa_,g<W=)Bs/[i^4-mi)"39).N3h1<VaY>ESFL&L(@#0p"-+qI.m__6E]112XI-[<_)=NHrEMc*EE:Z.^)>oGD7R)#=OaDD<T5R><RUe1!q.W'CEuiG3NYs`_%Q](+F7hASWS:GOC&\/9EfFkj5KhCP!F&gA]!E/(CWU@EjsJGJTT.a*pH*W"dH^:-lTaV"-*d=uXJ'Y2f2Eb6T&2^mJXkl1kI*tD[ZQIMD]t5sHBO6"rX=9KX"KTK+:'2(`#tB'b)?L0Z5"t,n+)O`d2>9m1_YRE-K=m*e,BYC%hZVJ>V+-7I$bu5Rp2"5'lgj0!sat]p#;QcM='FUIq5c+[?B^!9tq$hEX9JDk5'Frd\`!8Q[Qit`R!rnhe]-4lts9M<?L$:rrD_lQ(FI-\'65YgmD-qmIo>VNOU]JJ[;d$WT<66Q%-AhJ(Mcep!o9*]geoVUNg[GD7#?5X5'^@F=#"7Tnjd>jEcl.MHrkT^ULM]+(^H?JS?D!Ya]e;j#Qp[@CR:t%ntO)dY$9"D`-q;YtYTnLLp8qN#Z8O53Fd"bruNe/N2Ss&mLV+!3>MCq#$o[V9MS'Bq\dsg`#>,jo'K;97(k#JcTX#?:l6H$-pLi,:@Zirr<]3!"XS!Lil@)+bceZ4*`,qNFJ&9$$C*dUXu(sp8*sJ1.Mgm/k#3s$ZJ!/+S>kSg.)7S@G[li[uSnm@?3KO-S0:0-R=o@8LC.@>L30G!.\bu;k&2!?<t9o7L#'U>Ya!jlas-bi]YaAp>RnN-@SG:\`Xt>j!V9Mj;QaqW5iT2fJJ88=RJPtU]PN##93imR[2Dn>@4]=GB5fKN'`]o_L/t:nu*hlOj8:%@*taYP1Y\^L5sf@L*eFYEi!ckal/:Y:VU)]EhqIh]DhlH0rGBK8RJX8LTd=Wp_E5#mVXj3gSBVHKrlV`$!(E*mZIknq+l!^IgV>2PZp/OI)#;A_PF9lI)[OPIZ'@L-hQPsrlL+&cYN64O0d"C7'UVHNE_%EN;YQ&;kHd8]^Q</9LCQa^^^iuO$fEZ__jR+[^TV]:W0(Jqqn=3YMo8@P?qBDk%Ne0Bju=RD8!`-5%AFO2?uBi,IbC%<n-5a:6ua=Zc"(<Oib*sp+!_:1%PH-<6%ej&P9..-N2pfk:/3kK)pK&l8dl]Ze.Wb,gPNC.O#iPD:i!UO*nG#-uPAiccc:ne8*fgbKp.g>0_J_2/BS0N(:/Z84AWOo$V'/#G<)!;i[XDmIJ#?p5^HAh>$.mro_O(>?Hf!M5N9G9e<<EbpaYL35>LppPg?#L\jU/fmbeih7<?&rTnjjO/42]jN<ErW35lEF+9S]^81?`]03Yp0!jUuI$;BT\7:JJ:K('<Y3*F)NoiuWKd9*/!_p^tSp2+>rrCWGK2%40@pppiO_;gnLt`t?39*.W3@>O!D7$E+23Ldt5oQDA%q%(U)C<JsK%KuDrW#=>/S[EbVjI<'e?I.39/-H4aX=JT_3$V*cD@WS6ru"G>NBopa=[1Zj]V;C2kDO.o#Y[AkN6q,A@Wb>ke?`G6O[#B,VYt5'P\?t7K<Ou2SG>[?c;sE"o`&Oqg#0EKl,uGqnFmY.&*q,Jr1tL!kDS;rrB@4btg]om4U8$g6;GS^JI+LqU\_M3p)6e`%ehqD=;>rIC6rb7fK(T's/o:@kF+&BM$osh0plSrjn@"LEMXU2b96]9`B;jB!!argQ!Q*"$XY`a/)m!=8E0TI.-lYqc<+!o\[sKN;a^mIB&9fLn5QNdrj;sSc8[XPQ"]\mZ%/SDjm\dUfun)N+gHp"mc.gk[`Oa&mS"MZ/#]QY;,a<b^5bl:oA)>D9@A=62W2oh)rV.0%*hmIakh]P_@/_q.gQG6-BZ=dg)I*<*$Tcdcr`q4%Ci'/BXh?BiS,d/]=d^\AFhfHINiBe`7W\M&b[6XmTRfit87!KL`Nb8\rJHfO4R+o$iQImJVKgI+4tYQMl.p^\bs<AW=XrD_<;ShekA'^(Q.?PN@5@EhfTOahSe[:;-/h2cnG_KX3"A)*ZG]ZEPGPPpGn8*HF<B/bM4$ACBUiZ[J/<c4DK2NI80Wk;XjN);o#tW:\n`k5+)jN%AAI"Fr(8:FKV49T1m<EK2cq(sNTFVW><Algba<K8P>n^W0&u(&_CH2O)H3dmnD`B"8^40hd6E0cgVH+Fnl$qc&Db0A>g]At2F<;+V^DO(`CsLEi"ACrSL$f!=p0S&dGB'dk[l(D%j3KMiZnO)QB-#9clOKBl=Ae9*3^gBlq!U20^Z+<ta.jU77/2pK5/39Q6l[&"Y<C[M-%"b)E?<2S)eHL(AkeJ`UShdh;5hnO9=8Xs;Z]08Fgf_d6`hat>3lk-F$XmB9d;2B0^fZ4.QmRRf:!VE/a9(-]OYn,Rfeb3o;#L!,I=6=D?F8(#oYBjd$^,irZXHql+m+29.`l2r3/je_bS7h@KP+$:WJ+@*6WO/ar[?om[*FknkC6h`CGdGA$\;1F!*:58>Ec]&>$kBu93unMG53=e\/HSA&Kl'd^N"L[;kHCO+]eW;oi'V=3<G.Gk=*9*dP^-'/OK6\T*D[C1e1^5rc7#HF#F[*56Te/a``3-j+Q2\5%QG^'VsSW=hu4/a&egt8Q0i@7mH<\+rL"pWI\-a%$F8=gfd"PJ=G/)C\K.(3W==p1I_KkVg=Wjqi2?"n3'P)0Ii>(/ZZ%(s5cV03djr#G,g&6YfLT$*PE)PudBL-DlH2,`M5,-R<Ks[R7W<VQj!-^H7+Fi/^[#7u7[2^X5$7gb>(;_l+Ro#Cb9P)F_T?]hm^DiK/]"md:.Zgof=-!t\%'p@=C&;>5V474b?L?_q-R$?E2Ot$dhOHrP2>I,^&)9o^/W0ch$hP[8.2&VJ4LLt44A<M?K1O#(rF93J4Kaq7Il0>"M+>436)lsN+TG7VQT[b0i=dA[BB6#\,4d,e.Y,I[^q868BfF;!TCCfgC--J#G7[)X-[u9G;e\&lnD'7+<<i:aj9kior=<ZpX2R09lp#L*U8]K1gj.IbNC.@O-K0p1Z"d/MlWiLMjXtt$)TI%.Zh^[;IC00GWbIM;Un8)hUh^UaLJf2.7QDRo3^W`YgSiW@j"uPG&.@%@2fg!hB;F=[Kj3(k0dnQ1YZ.??/lO2kkF->80a7K2]lA>.?NH1/Zt9f.L*Q?jo>kq@V=_n:aui7le*N3VRZL`9>E_neU^%`^2cfdq+hjrhNLqljPTX6q%TAFPTmL7!/CLR1e[e;nG.QD\.J%]?u=$#._4;o7L7-!T"QVSkY[_LL\a,r6NTMVHZ:09]a,Jm4J)N9nS/kXee::$`O4G?-rLp!@kc$M$/fHIM?Vhm[;a]#)MZ)H\#_f<(Xr9+m8T?Tkl-(prH]@'iS8>&UALO?qXYT#C#\m,p?`4lK2&gP0%BtiNPS+)BBCQDVCU$Z5=X&fZqW]#D6hsbP",>s1$Z^.KkFSe4'($JDhb(P`OEI'@7:l2-U:Nt'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED0GXe9D)d]_Au,%U]R=$1,3M=bQ3U8ftgGDdeeN7TVGdE7r.'55Du[!KuikT'D>W;?.)k%WEG/^ku7aLc/.qk!=a+cQD5O4Ln"K'LY8p+Io\hC7Lam&1bM[AUBb^,Z&ATC<7PNC\O/?RN&;^ZJTh&l]A\X.eT0S:aFL-;Od/W9-f8CV;Vnc>@/9'CMbBTku=!2Lk8aWnC`-kdPMuc9A;YdHofj)1D@2RLa1759)lMJ+A)?ZtZDAcD0A\Dts5!iKZq'g>"2krWC`=HrgGXnb8pGQCash;if.7O/pdpYG4cT[nH*MHD\G5FONrna5[%%?CHa#oQ=aE@]ZH?Ue![T;U:rSAI&%\\ht8nIrTJH;3o[<H8H'feR>IllnZ'$a6>)R!0&GA[/U,uW'Bb/WT9CTrM2N=)JQ-Rrlbjii#c)*5pik68,)Zq7Jb6Cj$JEja;mf'g+Aa\=`SbR7Z["Q:`oF9GOhd6!:Z7fZCG-IVWdkDDTDTRWYJmoIrUss:g;1mk0^&pb$@eB\c2Yj57VE;k\^BRI^LqFhCQ;(RWX3']:#L8q/K3_8UO5cR6Ol-peuWurbk-fWY`7dT4*k'G8dsb!SlRok,h/3a11;4eo*0h@ttVhp)nBk@nuO]OeiV*o_;p9dR(R<rq\W3Emg!9rh&?Q!6@1dbMe>>Y.oSg!&KpuD/3249@FdrO8QZIr/6V4]hN9EGWOY.>J43`e?4QObSZ0Iq^L"cY*t4gAsK$kq>K>UFPZ5rDp.SK!'>s%JOL8R-U:Nt'ED!!'ED!!'EMD6_UDDkCMV[LkCpLJN;b'Kqq!rP/Rq956bX?P_u<oE8NTG:5>h&8=&h\'$F5Pu:<#.>6>r?+h/71nC-#[jFU.WCR<bXT$Qge@mj';P.RF\=JV&+H%\ArnV-.KqZ-B/O8<L'rb0JEb%q%s/T(qC@XnP5K$:q2\_Za.Q)T')TAr1LTSJAJ6ce;Sn0bO0j5>'JUK_K>4/,K.e'cN>9'W(B,r&"<`<\5&M=,Q1aME#"+hE@&a&m,`rLZLgV,ibj+V-]'R["@>`N?)+66MZR;8a8Y*B^0mRogQ4sIaA!U2?*Y>#>"<W%JdNrUMHJ:g4-<RD/RjGCJ0Z%UN91&;tssscJP"a-r]o?[F]3n="`3?p,3>6hA0HMG+`OeJe.Q@,RjFf>'juWX^`*<Q:)<7XC*adG473=a<T:sXMa%1LEc=WeZJAl^<a?>0hB#5d+Pk@iJIR7].?^Tq,Fq*gV'*S8lbA[EnrBS5;Ph,1=PT^B(D"L]7+t4mG2u(cKtGk1pP_"$cM7aF@aKSc<0%]/Wrmi.Lo63<BN^F8j6NYd!r_W?ft>s=&+7WIqmk4PlC_eLDmj)22nIs;dY&HVV8[L1E-<7U]i#T@*D2O(`\KtHd]rID[XM)KJZ<BUp29U6#NTjPm8Y&mIk($?,/u/F;32PC&\/t:k.B=;t'+Q9A+6W*1D#N`$7"@!STe9fiU$C=G@&*,bFZ[:o1fk.)?0MA<MEuaf&QHdu\/0m8SGVU\`MT4@>maf2B%Am`6@C;rsu1/D.Ms_;=F)`6i;-YY;@BNOa,71lT7,rQn:Un=i'0g)9h@d=VKk?ST!g4\/i9FZfn@[u3(kgL@[<htsZHb^Ym+eukq1cU$).oOis&;tug1fiNNuo@*:cp@qYW[/Dl[N<QY?3:3JCn@%!?7Sh3]/,8U)k+GF$c9$]M,%0WRPP:#&&dUI%i+FF1W7DIoh>[JUdql+:mrL\aq(5]E$0l_Ane'KM#^XO((m"[s*]Z&t2=XBoSc8[4p5t]X9tut.4+9UI@+'/M,Ij11KZ6YTk"Ka)"<FL;#6aN"<.aJo-+l8[Q#Uu5p^kU$N[2K,qp!`ECT4W/IYVD3@b@d2FY[28,89D7EVWYfz%Y.C@6$J[!p%j98;>,n<=+>SGn2M@/!T%)H.mCF!%;;QKg=o0qEdM2S#LN'Je\/=*O<bV3,Z,]$U+QGFBW.t8FZq$R3,3PRb-cYDKbRBe)heu'5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5S6Y+"TJJfToMqCcl_FMho#:IV_=juZ1U$>TB065<@Q%+aH\_XF`SS9.A/V*,1H%?$Gb8@/YU(`G\/r-fMs9JSiHcUk?kN"2@nfIIgYT/TCEHiLHHsa!+B"poSVq7gJn/bpQ>,p5KLS"8j"9Ui,UZDDoHcr-\c^krpGhWpqWg'MUeGV<hoOfmfeKB[YjsE<\6)D&+qh=dJj3W&s)*'f1IHiD8"1n;V;3f;+P+a'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng)OuVQ/Z6HgN@@D<Q!CC'*8XSXG0$2G?>G;%]?+_b^^Ki&0n;%V:>4bgpP?TqWkgOmtIE)r[:CHBP^'=*:bSk:0bncdi,]99,X<M*Zr+gBQ&H;_@J']P"nhh5DrrD,OGaJEG='teQX.ZBXWdci%ani[mjBlp_'>iH1*/u/`rrB_<5L-B"UM4]I!34Laj8T+""Wu0qd7MiWh6N:aCM9o]77BZ!MA1@;MHVF,1^YY*J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^)fD!YV[PM5p((e?pS>aQK1n/YTD+.`rBWbooFeq-R=DukpA.`Rp&PN-($-&>3!'^77rW9KCom4Bqc@;unrcE7h=#L!X$-&>3!'^77rW9JLn=43Bo>=E)!5MX1lLfXlLXt[=3]^FpRf<A@j%KCPSf3C`!js->S8!KE_bg@5^fI5qom`6^f'%TE3a+&&rr@`89E,!`)Me:n[3+n.l!O&";#^O2<hnsQJ!Gf?k^PWS=t?$@!/0N-rrAW,rrDg$e:5>VV16f!rrDs#C-Jh&q,i&_L\%:<Y6=BN`LTrF^*\b/eF\I*e9$+-Vm_mLfU"<U]Wn/=K80?qPE$+Yik8Fm':gZQGi/N$i%%k8igW(9`*X'<45r2Nn0NWMC-uahPV:8tjQ,LXO/ph1<ZbP>r93f*(]-Va[V`&^cCiPi\.PkY>k1i)6(EB=I^u*G::.5#j+%(/J?;?>-X'=Dn\>)(^fI5qom`6^f'%TE3bg15rr@`<8cJd^2u`mQ$IjRBFeo$;cPulaquph!Y?1O%I;Xi3USacrTD21RTD@Msrr@SO8cJbshNRs>4Knbbn.hnu]jKl0osu6jNh2-j5N+]PJ*3*krW>#"n=Aeco?-t1!!/OLX4@2M+'YH:kiq<6A,[.d,Q;sqJ)E+[rr<AfOoGDDYJ9QEW;=27j^Ihn+3on<MWR.^4OQIWQ1t7[2.+c/9rI<D'1$?q#pE-jZ:7mqrFnlX8?97c*).;.(s-'Q'N%;0DA5r:!#/:8fDI!W8WlJ4mpu"EUD11L!03fuXq^%`Kj;p"C38jgm;o+u\Zbd'1r&k\e3EF;W;cjNj%KCPT7'*,!!-9,lLfXlR=/t.o:r.V\Zbd'1r&kFW.3_U;?$V&`g?]*4>dZI"_p6)=8>sHDMRhYV4tN(peEZ\q;J9%i%%\)!"$r;rr>/=&,ZTG5-J&`=FG(Bo:r.V\Zbd'FKbN!W.3_U;LcQ)V16f#6iR,e>*#`7r`1+FU&=-=W30e4':gZQG[LINi%%\)!"$r9rr>0"rrDO'W;=27j^Ihn+3olsir9"<FUnhuH)=kMXk&W:l*K-\1469D3C9M_beGp)a-Q%M='>%]`1!T_1b!SEqe5@KDPeW#ff:Pqn[Y."/Y9ad7L(fpHqTr#n]ul!dj'nD41OBDXlOh0_QZ![qPdp!=%fCbUI!<"RnYfhgAPmU@9@"]AT,/T"7`/Oom`6^f'%TE3uTW;rr@`<8cJd^2u`mQ$IjRBFeo$;cPulaquph!Y?1O%I;Xi3USacrTD20gTD@Msrr@SO8,O`\:]0atrrBi8U[%N%Q&!rSIl]W*/"$>:K^VM4!1m9l!;HoNJ&6E*rrC@qrrDs$C-Jh&q,i&_L\%:=U:H?[:@sVCjaI./JB^U^-[J;\o"P,(^h0A,om`6^f'%TE3dN<Drr@`D8H/[]=5Wc]e:5>\Ujp]@n,*B)5-J&`=FG(Bo:r4X\_Bmukr4su=iN([C"mA/+Y!frCSIbu3C?@g)Uk_oMXYfs.&*B].&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.hfoEngNdQou-k10jAdWit(r"F[,`^J!d?Orr<ZqW5fSL)>ZS=d*r!pj;Db5!*iIu$CoTaJ,FpN5O42V+]FiT>I-kJ-pp]cVOD35+f:],88&%$OOBS3TEI+#8ne_71t,/YdnKfcVOCFX1]W9!BuZTT!=^m6RVADt1t,'2%0/65)H0?e!/@P!GQ(*,:]A%;rcMW!Ih)JYaQ]](!8"#rcF0RVrBF8&@Ql8kir'bJ;+24VdM,PI!#<`Q-iQAprrC[3hte(0e]de9r]l\I!8$;hqA!ihiCh^MV_nDRNt4bW*>t`C;b]-+dNPDCVOD0!%5cM%BqPScdn4<`!$S5.;b](KL72gN+eT%.6V;'iJ.U1(.AiO66VTDt9f)j)RV>JQciP,"V)3pW1G=7=@F0Mikl1YH-G.FYY<V)Vd!tBJrrD70]@tu:_%0'3Z^QsFC3m)*"Vag9SKUE9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X[i0`M-87oTEfXsa%&gT40fJ&nCarrCXar5EGAplY5=31o-TdJcT55Q3s7^\,Q1oFY#jYG_C#a>2BH\>Sm4K*R3=D%B<ZDSF^W[94bj3>EKSTRW?3bRe!?Hh#gD:/c&d`9P@4=#Y'=km\f;.J:H^lH*rqd&OdrTSr27R=9(9%khgDP!aZbh"l"g-F7[K^2"Hf:UQ[!1XF6WbqXq\\"PeMOmgkV7XKa*;nH,`f/1rY=8JKCZ)^.pb@,f5#&uO@OYWtb\GN(R]m97h7_76W[7$<O9[d9Q"Db'!.0?<h3FWLa;ud0e.B5.=5s.gSZeF$GcGo[WR`LOpP3c>0)d)6<R,r_&pdOc,<;aNON4/q:HLYWIe>(JEdRajTaWQR*aTQ=@$0@46J8.6;Y*HCH<eH<qoL75'22rZkDBOVe5nrn'agNBTJ7B!409G+40F)FbGf[igqcZjr$R^N/EO7E8N&)(I,lqAD7XF,:%i!h;Y(Bc5DcH`:1JlOp@p<^"0PNI)RYjEI3TNUX/ol?j5RpdZ"+d'(PDY(%OaCp/'Te/\\[Dptf,eCdGuS9m"4;Z:r=)i4Sc3d[lSRt?[<ik4RVN,Qo).ba6@gD5hX%e9;@XK#.*'JZlC7m:%XVSaV<u`9/4)=LZV;g6)A_$5_*"5-$j(_rPqo5cYu%P?8"9AS[4E51XD;%pO1*,nX!9e-!0sc[\PrrUg_)X\1WDKS5qKZ9"mseo+b6Zio!Vd-PCQHQR/(t3\bF'%7Vcp>/58'uG1O[DUbtM<QJsiV,L7>7GF9]gH&`CS7PK'Lo7PCiH*qna/Zjf^+IVBI<`u40W=!pm_<6n6#@-nsWCf`>e8h_u[\]h8Y>\EL9kHnr^!O1a-+Z]]8K06>'m;@3j9(O.e:1d=C2uq.X>[nt,VfF^-IlC][D$#ZHi_8JU!fD/^TPAQdsF<qq1"hi%5cXJR<p32-tPm*.pTV9q'iUc"oeSCZ1q5s!,9\/Z,HmH]=FGZdd7$(iA+.=>l&r0%[<0dp"0+m=+cB[f2)!-M5pOqrrA21;uZj$=T8Al<Z73cUalnaCP`IMUWJ3qNO?K:*r#htoQWR]Y5D;!9$qoYj9-l83%F:.IgXbt3CYfC\*@C*X<foAGPrWZS_XuW>fUMT72,`'1#S]"!mglH?^$!'<R]PSi32qXci3uPPCMdr["!c_<Vi67r]E=ck]CF*Bh^G8-V5<7B9O^,\'<WMD]'G[T5)B,?WXkF7R3'[CspJHXDc2gq'<NN!-Yd1\;"X,MJ1h0mfd)ijGn^)@J'lRZ)@*H'.)A#g^B$oQPfV#r(6NtdXU/(T!\;N;`X.?7qYKkrjEneX</bL]Np5.ig\+^c:=8I'mcCZap'O[n'2'ng@6^M]^S]"OR:j3J6_M%>\t`+Sd.Dm0=5u-T'XVXV8Q5$Yb3.5DU&bT&XFDH\%Pju6:e4+M`.h&N/XlQC*F#+gQ[haSoN9Z<F<=`rr?=hi04'2U=XnGhk8WpL)8J!BSq$YJf%%4eOsgmOE%Xtk6a9Cr+]@lW1nlH-FUIB8=DDL8u[<2[]()h&5T"dC+1u20##tVmZM($*(bj>C8[BA_h(WQ>G:fai??S!-lt'Z+tY?$+1#.,Jb%S[#g"?^@l`StS+^3Ul2L_dQ1]j-]Ctj*kZF$GPn?gcD<!?Vb_d&^1.N^8$0*uJSt&aHn):jF`sF:ZR-+p=$GPo;rrBc/kuDjX(hsjRAnW'0Y_=\]`1_H(Eo_`iStmEZR1>@!BcI3*ohgn'4)#S+h7+eN_rgbjb^/>Lg7+-!r6+6(VmY."rW,spE_.mPj@+7#&QpF5$6o:u/%<ce]D-=FmLFKX3YCXlo!EFA>f,?#Plm[*e70a-,j1<+_;oT9f0e5hc"m$3q3l\S>IJY-*,`cCn*05jXPR'-Wc9DVdGj"b5#.ku?^MnQD>e4Fkr31Y0NHQ5hrWbnMO3%uM5T6JJpU^hm:;Y=1b%7fFVlBC8Ds?).IX?.&kpbY>f5[=o76,:FC(bNp#L(2H)bZ=YWVpchV1NJg<"/YMbtSRa39!A8Jq-hgV)uE:&BD>!8d(uCGil_chbo!p$K5d]f5;\OI+NLhd24-(Y7W*alZa^YEYbQ199ucF7Z#nV[&6p*\'gR;Cd$';\[N=j3EnigD38(aj3X%!PkGu:A\,I^O*HW<heL>kAE6Mf:Th,g8eOnEEq?nE#-rkEPKi-=]c48q+3\f#@*.Om$lW'g\qLWp??:ph<4e<!789d93<*H1UV0UUEl"A!;@ai=g@7N0/#H_VM7'=LkqTfD9U9bg.l^C*Ik2)?<[fLArCq%Q"=>Z[?QCNo)c8U8:-u:)p<o%ga$ZhLMF!3AfMG(13t&.8tWHOpV3iFi0@Bto.EbPi'%)?!_:e9NYrmBH/j/&"%5C+o=!0o"G/Guf[ZprBjqSB4A:'rOcfGP5?a`rN['7>I@;q>`96L\_D$-mDFR2X`]EYS>"5B:T4Fs.dHa$_=8H#d9f/`9CGTHYoDV3"#QDGure"MDE*%P[0^(aooRHKH?0uK-i.n**g!*%^[67UPJr1tX:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig>E(k9W%WW)tM'E#gdegHD@jAFG,!:,L@@^W!/8G])$:[i#\rr=8:TDnm6b?t,*T?'tV9S%;t>s's8<O\0rjDI.c.9uE.UHd2'e,KF/)f,HR>Z:G*SCG!rFt,4A.fG<md%Y4\qd%Xfp47;G.k].%3.1\[O@\S2di;h<VF1&QZYkt>g4%M@N:-:bgiVemO/M/BNAT#I8bE6Z$_`h<M%m:6qb>4%kH2ddXLgU1_6_TQOiYg.p#_du9L0@]4RgLV9-VN4G7QEd0]Wd7:I7,Md59<B[$Pb*0^Mc!`?Ur\g0%sL.,HZ'6/3HZ,k:/p(r2u[[7e$[=e-ELH:Wf"NRK+7F<kqn<Xg4KbjTS_,AUDW\p+G8V7<+0L/TLG$KRA(0L,VJ%!Vbn9XrQ;k2Bj6idWOcAFab!DGga'1-#GeEEA,VdEa>u?HtI:M??P.7<&X"<eb6B"=+L0M\[U0)>hH:PO1n_mElW>mc&`Q7j)Fo0N!H&!)P_:GgF'01t,6l6M=7B:`<SYb7p(51-BJ"jD?u3O1ge=FNupTn^aPK[9L/k9>#)"*@*s1,BV#P7m]]j]id2@9:f4peMsC@):7VF5p2964H^))E*:9(@iq&iFN8<,DCNq7$YNg!k'n[@j91I#mF*>-&o-[.RVnpmlq3KXaKKZ&e*ST*1^pqW,/!kA!^B;[FNBarQ76F'8;e4J81[CR[W2X64S5]:RV=4XXG5uY]<\G>W_Eo!=^FX]cngc((o\eNrlD#W9T1IsF%m@+niFjFDB%67%RCrRo^"('VOBO+%\-m%lhX/t>p_P*M.4!)NT)].PSG`:[cRf;K?cQ%'`2`..oqLhjC9$k!puNRNYpsL'l_S>DPWlj8rOFp?e=q4R<)s#_MrFc%#Z@?BUJsQlrf+gnr]G]I0ZSrJo.+2`0u?WB7JU"a=WQ64#SnPX_A]+_k6K[l@8Km+7lV6e8>qXmJ<?\W5^\Da`k5PrrC.,kb<ss4+`><TE;Zb"b4T/J,9)4rr>BgT"0=SJ&iCTqYZi_!(*f_r$crqeE3CniTU:A6_ZH1Y"9mB#,NS?aWfH]b0"Zh$?/<(XTM7>=&Q+%.2X1dJh&7]1sP2)BXDF;'"Zra5okR!FMWR#)17h^&#dPSn.h4]h-NCEBT^SWg'a8\35fQ!+VF,FP&PFUp)$!$YA^7?g.WfM2r(0CDjB*#oMEJ[r%UmOdB#1uN8$\BjfZ\B9$@ijg'Jm7\K,I'GUU*%!*t)ukB,uLWIDRQ?;/YnFh=./Me4Y'K&dOE[$<bIJjD.Gg=aJ*a!>.P=`1X:a>?Pn[9>rk[ghH#%RA5jh`&h>%Q\T^N_VUhMbLL0j3EW)=;!srN)<136K`%IH4KS.VHQ-Q(7Q1MJ1-=dN3&Bc7Mm-;j0*cXd[GXMrjDb+J4cS:`mT?p?,,=rj\N>A2;Y(^m8DN[pAEm#Dqur7ftr8DXq)PbeN!6T@XF.uH)d19>cCq1+Q5&;oDS-j3?OS[g,>$-\Pj=qEcWosL\X::!$q]I6_rC>c/u*FdWoFVd`V-.LBOg):E0^6FR?(\<9moIIJa$E>8c%=QD\+;oDZiT(,K4!QAdN>[gIS%8'TYEqc/V[;OYYMns2)?b2V>s#Oa"`%_Y&9RYJjO0jV0<&O[0qcidLC:s-]iSc8\3I%q$(##/5=-%HI6:>=`@(qe/7bA:a1:BQ1?m8W1=21Or^+u-7[mA9]n^CI)c[0sSOPO3r>'O&\#U(o.Ic+..Pce]Z3e"o)5S+Y:i[C\?@P/-YN-"'#>6&nOXq7?=m'n/f#AXR+O%-ifh-`5J2,98eu5:Xk*oV]+3qb2hbCl#rZ-@%?Q#Pc$sq*l';129d]ipXEUNC>[fdf0=:pE-AAc#5S!#pTncIc%KR1EK*J-f#bbkJ&!9&S`-9KT#P"Zc%i;%EIp7R-"'i]Fk,!^X'=bSNbcm;(S[#p?a/:A_b"ZJhf>K+'Mlq4*sYH1%!^.69\k-7*a3+VW1=@$9Bb.l.'jeIdbSD/%`io_R!Rg=soKTVHp*b,r.0&W]@8#,ehafCHJS-C"P4'VAOSREUp@t5X(]<o4N"8&$YkZkh]C)ZR>0N(scNQl!]TRM;<4"2Y9#nE*#8f+3p%><gN/4:2\=jhh0G"Ygr.p-\.SO_f,n^>=cJ)_'#(/.q]^Z*0H3/@D:6fZdYd'BHHfE"3YL'0sd)<\`c$5\G**Ro_W<7o4(5u#pF]9g8+BbF+Mj5'WYjLESEsfi@V=r%%ijn=7P42bu:/pqlBSFrW*V-<m-q=et;G\o/bV)n`@59Lci4\P2?P@*Qc(YaZU-Oa119,YgoYaRK?r.%,d3N[#=%)&d`XM[nLe%8F'GgdKT42R.B?Q=-LP1m%=3$^H.B:$YX/D@n$oj5k>q0PLP<3#@>9&3c=eD>5nT<)Q-_BhY$e2i;MbA$epO#1#2,U9r5Lp.@$6^d>>c$HB2uJco#,K)gc9mOeZg6cro&1O$SuFi,Ch/F'7"4DXfW])+HNUk&'#RN&hLJI38Cjf6pm5hu&Eo&,gnur<1`#=&\%4U\rf1+6(fC?]kaEU9QaGMC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!YrlIp!$[H$rr?;"o+e`:ShU0EO[i@M!3R^FMUmjY,O15-5J`ter/8.9r.Aj9l\^08;jumNHs*,>T5:X/^oS_V5pR"\4fW#Om0!?>[f6>qV^aPVrR^cU$r%dCn#sDD-CS]ippWNg!2-1'k%Ua4\e"`C/cPf,9A%bn=8*O(RQo*3oP>F5=QdYl&,cYSr67(nY<i0gTVNZtUY+)q=8)sNB`A&nqpDW^VQp_ioIp%I_>0O<r$>M_r<2'VboXm&o"V[uZUaiChMlSN23\%?$!)i]!'rS/1JL%^d/O+0-O8dIp,,("rPA/q5L."8CRSt=PN&,DrdmsqAt"*ITn3<pmD1.PT!Z1j:Z[(FI:eQ3YItjoRVO>HT1&\ZTTgOh+n7aSrr>>%5;Q*feG`PD#M*Sg!':#)W+c]P*tr>&oFZ`IUcp-QJ*8*fk=;eVr3,N!XO7#ipS1R69kBq0khl"EL\%>A!/-P*rrA^F5Fik8Vt.U45-mcTfA;KC9f8;c8Yc:ccpAi"OSFl,rrA^F5Fik8Vt.U45-mcTfA;KC9f8Ae8#-(acpAi"RX@Q"J'\$WSK>eKo"V[uZUaiChMiaVpi$.%4\u'jA,^UApkME?!2'%93hO8JE*i=K;jQ9;,_'EbDB1O%d[`D<1NH3(qP+D*WQoV8A=L>`-?h:D7<9KC72/Q!>ebmj!9=MPrI.K@!23Ik>UP7'6_ruCFiD&MoMEc@EtXOqE*Bh%`_r]\'n*hqP-j6VcuO<WreG0$VQnI*Zk*!?g\tfRHs<7ncr/cm2'0c8o"V]dlSO*^IH]?@doaBSR!<ktjo5<rgMb)TmcPY$T_PiZrrA^g^ZK6W)P>1Oi;1\?k?iNn%5cX%nRdFR!'s.?1JRlLKWd`B!2,i(RA]CdIk1DKlSO*^IH]9>L9_>IZnM7^_>0O6nQ(GF!'rS/1In^Lr3,N!XO7#ipS2!B9k9k1k^W4<KC^qKiggVZJl$o.O(2,a?ec`+U\sHH7^8aHP'g-$J'^ducB.gn7/m7[PTQG;`i&CB\3@5hq:FJ_;b]-6Hr$L:!74=KbgIRHBYX0OKCbkjeG`PD#M*Sg!':#)W+i-7rrD")d=:@)&*HOa!!t9;rr>>%Il]`P:Z[(FI:eQ3YItj/RVOJLQU^uTTS,P#+n6n?rr>=jIl]`P:Z[(FI:eQ3YItidRVOVPO%93MTS,P#+n6V7rr>=jIl]`P:Z[(FI:eQ3YItiDOOdk1(6SUs5OeYoLW!@dr;Qc7q9ePDIk1DKlSO*^IHYh*r/<ZIrI#dd#.s0l;5r5UGaCcj>D/9-jH:=``HkNaBXkncX(hF:4?VXbPoO)[fAqO@.'*oOU5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!VRe%/;:SfF<FLu'e5-<em->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*gt5329)Z!7)da8UJRrrDN9rr@`pg"&CZkAUA#I[Bs^bnP4_iQ3.[DsZd3q=D)q!5D2+'RsatrrCB9^]""9n>eBCbkm/@HPO<%XFKEYhu<R-peh!\A,cNmG5hR:l$pROd76"\*0KSgrm%eK!1u?&qt.Y^8+q(dr;#+I!8jXQ!"-&$*7)-88$Q:q3lh5ImJd1Tdf0<$@!I:?c#pc.!GMNCW]2+j3?MbA5L<J/>lOe[J)iWK5Pkf0rrAir<4SW?jH!eXq`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*q4DWeO(,TlFcZIrg]%92V>gN&5I7G@kK_uar@dqGROI<H_id0?hq?RFoB1&l!.L:4./qMsrrAZQJ,AlQiDsWeRJ.1^p+(W*=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e^phgc6V3Xo4f#rr>6+rrDfXJ&795lQ>ro\,QHC9E#Z<ME.;JjH!cZp2uGoq:koLhkg>Q$BcoDGR6(?'P-kbJ7nGPBVirMJrEaO.&)Sf"Vag!"]d[4OX-DXE_fSC+5pB!O,<3SDU",,C]-X0rJnu^aTd&,rYW\fPofTsll,l2o4h@Aff"Wb>r;<"bWR"V3;Oa#IsBF:Xb>,LP%o<?JYl\17^e?>rJ"@qdbIJM*JmTV;?#$PHdse9>ut7mmQ57ubl7[d]rE?E/3hjQJuSB-:SZN-VJ-rtO)/4Qm3B*"Noo%UG5h(fjc?qte_5Ds\@Ej:aO>MiU$49GZdS6&\)3=3I$,RPG0;W7,h;AMlQ>ro\,QHC9E#Z<MHnK;E_!B=q`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*q4DWeO(,TlFcZIrg]%92V>gN&5I7G@kK_uar@dqGROI<H_id0?hq?RFoB1&l!.L:4./qMsrrAZQJ,AlQiDsWeRJ.1^p+(W*=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e^phgc6V3Xo4f#rr>6+rrDfXJ&795lQ>ro\,QHC9E#Z<ME.;JjH!cZp2uGoq:koLhkg>Q$9tkuJ*5,7rr"MF<LP>uID_42MVm+<5P+&Vrr@M7r$_QiZ2Xfr4+I/"^Yr4,URCid8G4Q`B3>06c^hiLqHr`eq`;dsI-pq6n'_49Kit.1BA>KlfWG+CA,cNmG5hR:l$pR2m->bho=+`"^J"P@Ar8U@E9*'h"L5=n_kjFA_kSbj&Q@(G-JR<i-*U68'S[<!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$$(RLHaIAE32;QN^71<eRTSVP1nQSC&BrYs?tL&"5#=)dMFCIh?ne^?1O?Ca$u-a2G'*DI9mrrBo3WIN:"W.3\t8,OY/Qi.:1L]-kQ?G_.uHN*t#5.=22mXO;>e5nI+!!u,irr>C*U&P+@/LUHB)NXh))Me:`[!N,TII$gKlZBf=kPdtI7<9R?Pj1L*/F">OdaA'p$!*c"!(+u)rr@I!*l<A5HN*t!qV<eh\c2Yle'VF8r$>O%r<kRa!;Fphrr<@2rrE!*2u`mPda@D/jnGtM&$=:Oqk*[)7==F]IiipM_Yu8c%iD%TT$I6#>#ieF9<q2)OXdRPhFF#(HK@04CY6D\/&2)aTkaT-rq]g[Fk\XRpr>\j'`K#b'59o79X!o3VGI(@o+.rE_L>j<rr=bLh(M"'rrA2FH7c8\Sr74cTlemfWt>.rmJLuG=H>b2E'"I8^Ke8G-(!N]/RSMXhb-K;-+De(/RSMXhb-JDT9nELbW`L/cgH;DFYm/Mrr<@Jn,3W<rrDfAdJj1QFmo8:GQ.[;da@D/jnGtM&$=:Oqk*[)<>E[V!5`)irr>CArrE#i[%HiShLEn_J,]Ls/KVcX?[D_P0`'TY5IpdoOk%iaVu.kXTCaaCJ)<mhr$F@PoIaL#hb-JDT9nELbW`L/cgH;DF`^\4rr<@bhu*qLhtPRHrr<@jhu*qlhtPRHlmLohYO`:,de!@.q&O#]ao;@XATe"Q6LFOGoX(lJo#<Y3)>-XJFP(CQ'28"ZGUEJ"FXNh&cP2oVUu1Hm*).kR76P"Arr=:EU:dPBIh\gND8rnEFr*(Mq<F8LHjW)\#[b=lLC1R;jHH/h!QB4,7b.0j[_&J`(@D,%0`<l^(ESVr%fZOu*J;i[aQP24pnGpbl)\^]Ro@g<K5"iuZ6/pV`.a/"]LTDFZ-p%^D[0CY2AW3_Yj&HTbWR"r)#Y"!eCNH9T4b$)-*;m&2V.-e@tau_qup5r$CZ.+A#.h:>s?[eBL+"V8d7lP:T6OUR^Y^"!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)tn$:t]#FF`?:_M+]oO^f8j@it(r"F[,`^J!d:7*bhReVKHM0:/Y@212SU\4C<:RVl</5Bb?oeG&@6Z/U\mokWbtO[t$.n$EpB-!6?qErj\m*Jh"U:X#DDDMe#6`8eJf)med"a>m*"58nk0.2\=G4.ASd#dn"55cDVkuHW]Y&XsHW)<q;Mp'UAia_k31`f@)k2+'=2t9lC1/?=ZBM6DH%Kkf4rkkCLqaMSEdV`bqjo;Yd2YY6Fh?;]+I>J;-)%j+^Xk[ib@dr@0%k7!)f'2-0:^ch;mkf5BEs55:tr/)%o7OgXZV,2&i^c>?)K51#5J,a61IREDK(c>ZcRY&HT;bt)t:gMh`^V][-(;M2T#,Rfh9i+JPi8$,!g+Y'_MqNhXJepH]pXCt>9_3O0R4HQVW?YO<tER8>Ya!.:ceRXtMrrBH18SnpCIJ51E)\n/gA'`@p*+L#Rq^G_.p<^LUBc:]ep=:HZAs-qFLjZ.)E3?7.7I!>Qdt<:oV_4qipK?IDfIT`N14THL`^mp*`^^7=RU49FKA/c(E7,ZJ9gWWt:+L<!`NhY6P()q&,jmq!3B].Q+'qB=e)u(9,^F??;UNQU6H[8=r5#+,gf;unXCU\4XhW)cBr7-C)M:naOOBS3TEI-nhtSEin]-N)m58[;e[C2<j:PV=&QuD/>D&NTes`f$ht\9M5Pk&6q:='(Q`',/HN*sZ4b#q"d/FOM;o@=R>)o&<nD-KQZ4"\Xk])QBA&5>EMCT@5.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.hfoEngNdQou-k10jAdWit(r"F[,`^J!d?Orr<ZqW5fSL)>ZS=^Sh)3a>2BH\>Sm43NDq*r.?SNl\^08;ju!9ZUfHl6V(oc1t!d>9f/`9BEGKnm*o[[hk)eDin9?]9:Y2&J*C)HiM_\nKDcQg@(&^;f/B@'AR:#uNMhut^O0)XVOG$FP]][B<,'HX9DW7'djL#PHTS1b5!hNm^^)EXg/J+TT:#<sg8'L"8G$$Vfc/.([he>_`o%YI3:0e,1skMZNDbA])/lBFFLlhT9YPYS##0^o>[[<jo-u]XO*\#.J.kZnX#d[9o07R;jBr2B7U1n&]162-%;d"N9i[Y8P48,#XVfVm(pd`s=MS.9F0[2^C,6H_BE7SS5NamcBuT2J=-ZtCn/jDKT.hQ+%N@Pb]eS-PBGtTYeXLc!C5"XM<4)XeLmeCA[F?>Q7V9,S"2SZU[MWL*60IGc.cofaQ]l<LO-XYEJWLA8p>kE9"8^Qs9f+o;DXE%L9eKDP1LdW$9?"K2m3d/;G``,5!Qe9'Ed@J+r^4AW.s#K=*)+2=AY"TC`9!'B9j'=%8lKb2@uVnUh1&e^KJ_.MBr7QM6VTD7OO+%IYMnC7*Ap(XooJpuk+M5,r/Q)qrHcN^lY9X"e+H3h,N>X#0@?>U'N%u'+[m)A!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!EbpIrrA0O;uZj#-i&YSXA9[_aJ5a7!7qn^`G8!=OnD1'TA\&Cr^H3=r^"!-ou0.WWQeMnrrD*tC]=B>;u$cjeoKT86fC?MBr*Y@O[M,E&DG"M>YQ1m/iPnO'h1qY-DHt.cJE)dCT&GBrouUs=h]FZWqtWNGX_W4?Zt?'4Y&<d\;J/kp#<NjP$,6#Q8?RJR"YMC3UQn6_`?u+D,-O_rk+8;[@A>pqYpPXV_5HT73fi"Vdtr6.a$?M$B`gMR^-Racgj3Jo=",YpC5kuN8rAMlC@kSnhF9sf;6OeLCI]3R=<ifYP'FC^U/L2`oPhHHu/fUm!g*LEMTD;rg>OF-oR[.p?C-#mVO;YV+W#Q*iEW<j=71TUlp$(1KJnu9IVZ]5:Q<nID]i<^g%rVaN(GuUgN[HhZ!T-V8*"b2.T!o$g;nSR^+BUM63(7!Vt*^kZ]:1!%I&kAt.8mnK53(=1rLdK=BiX2>*WRq_>[8>T`cQjph=jQWfd-&"aT5pY"K7[^ZrUDJN=7pWC_U/.QtT3QW9H?BqRiUs`td8T%(iTlCqlhSI7u;^us+bc"N^:%nS$YK0hL/Zp@@K&S4c4rmM<(&Hse0:rQ),nd,?qf]^4L>@A6HflUq>02YK/"=dD2"I&eGF5Ba@ZOq:=EZd7n9mI"X>_iIMl1:4,+I6=fjoUTSI.CnaQ`a4H)gR!rr?A9I:H$CIX?R4Y'"#7m2p!<IBT3RB:%d6mFfK6SEE&8;`mAoPffS$DVY,D(N0O+[P2dpX?AWAABtMSVOnt,AAdd%^V)Xq\BaWdmIKulBsZS]RPpq=1l<q3CR%Esq:g8,>RmP@_jYJ'[RA.Kq0AO>rg*$F2.tGrqfu?on#`=HHDA]a7t-->^7f/*5A,>Q(4HLQA-'7*`cG90p[$V2Un?A0IBI3]ZK6,IpJLPVf8mhW4PeX[EN<="aV,J\+!?YNa-.T6l=flAcYNMd?=EM^Y,Q2Tcd0\`1WAPQ*bouTGPQT?mCC5Vl(7P-=]W]q?>4+6-=sHD84ie3`Lk_h%:qMtg;cWB\R,:9eqo2sVNfP(6(it*nE9_0HCt.^a8G4D:j@'\7m0ZI]jq%a[4S<@qP0MlnPfGf([0/iMC>Q$OJ7U\!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!3As5J&nCarrCXar5EO(08i]gn><";XNY)q.ZBS4XXO2L&jE87'DraE5KLC5rrC+ufD`:XneF0f?I-VPHr`/q]saRS,?81G<oAO,T,Hn.oC&W-i%%gN%p&/TAl-Inj^.L='2:@1rrBoKVgm%,U&P+CX\JfqKZd-j!2"[,rr<('QdtC$!%TScF?c<8=*Ch)gR'?h0p8[0\P`\VJHQNR#R7(^J:(k)rrCBZU&P+CX[mhJVuHbC^&J*3!jt7$>1VeDorL=Fb`23g21g3_@K-<kp\t6g$Ik^;QWSa`[Jp7+!js\^ec&Sk>G:uYh)*S_?gsB6J'YP&!<*&--i>9V5P+8lrr@SO8(Ho)!%SS^d/J-)R\^IhnOft\Q.3r;UT?^&qrIkWCH2*la8ULjrrDO'W[U&?VSr!MO^>(\gEQpU^1P2t&&Cj8.B57,g&)!C3-P9c`7lt8DFMS&hLm>i-`1sGJ+Mu$22V>5$!!>iqd9@'i%n8\_Gb%G!']$7!;HuP]nKhT@p$B)qafEtL9XO3/H5_5gA_0Q!!/OMpn#h2IBUET)6!DF?fb_h\f]4WP>*opHqe>T!']#lp^G[0pdo<ekM#h5!!/OLX4@2M+'YH:kgMH[)mOELo2Q3,mPkPE-]XaQ4a<lnaSu6nP10DYYJ9QEW=Oh;J*5P_rr<(gT<PErb6<d@Xe^qt9f8)]7r/,)51e]e%+O208?KYigACmM!LfA*lMgi7&$=4XFDDeM_gh5;l@8Km+7lT&pdf8:kM#h5!!/OkGXc1eif-Fh@%K?Hh%U`:/!:FVBaRdlAE9kjlAV`EVc%J1Q/2H?7X#PD7<4s872/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!>lOe[J)iWK5Pkf0rrAir<R=f3iZIt+GYe=UZ@D*ReGs\*;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;,fEd61h8pmeIH*BG5>c3!Pm^jO.=*S<P5Yp-ng.Q\SN0D"'qMknX;1:r"$6S.V3>gUphl!'lN.rr<*pC[<-cpS.nLMq=8%F#mJTRJVJl^ZZ9-rrCtKU[A%5rrA]]TDnnB-BDX5YIt1lA,NY4!5Mad;-_H@LPpZG&Z>X/i(9aDd.)&Q!d+GBr!>3,(YsN'5-l?mQi7'3Sr2Yp[!Z*X!'m)>rr<*p-h`mbJ*7QDrrCtKUY*<Hmm6W6rr=Ubn.p-\="jNKim7H(l2LbY&nq9nnRqe%FT2@=#W-lEh0nKNZQJ:qrW:B>^2!3+X5ctaq"?o\Bm9-\'4)'[*4goM][W)rLrVJPjuS$6Muk_?g&7i.ch[e/rrDg*CDTptorV<6>"5uBU=^Eu/BD3`BK/)n3THWP*eo_bqld[<emnW`rrBi;g1\'9p-ssQVtnb9cpSW2ObmdZpmdPtPEYdlqW5K"4BMO_5b1.>!!3TWp90AR!9b))rr@TSO(/!i]a*+ur3H>&^ff2b>d*k1MZ3\?'4Ln@JHh2&D\[cK-H#i`!Y$3ipKr4WXN1-Jrr@SUWhR%"m=,k#cmH[1!!3TOgAWT%!2*&ArWF-&Mse=O+'FZqbPqPCB3.NBJ(l"orrA]dL].Dp5IN[Qrr><R&,Z\iHPbLdkWZ<pjd5rJcE`>grrBKT;uZh_Rh,E&1nWN/.K9C@9o&]N)Ej#H^@WLMO7LKo!!-_:7<2bi?7GmSTM:4@"<+\@le7)eX53%:Kq('i"A9jl3Gdd'kfG1>[.?XeQoQS%ebc4cFAYJ9F9N@U5Qqj#-'gN"H"D+hck^5'J,o"N!VBGB(PqaT<_6oNFJu%?<neVg&sVuYl9P"A!'\8,\+mT7JJs%;"Ie#jP0pYNB]`F,4^smeN9R:DA,AX4^[qf\rrDO6dJ]j"htdK?rrDg,B_F*jqp9b'5Kb_X"e@dkbPqQVGdIC#3e.,3RQn1W=oSIeSNm,S!Y$3ipKr4WXN1-Jrr@SUW1ph@m8"LIcmMWh!5O4Wp90AR!9b)orrCtCUY*<Hmm6W6rr=Ubn.p.'="F6MikP<mfRMgFV#Js8=8`2:5O]fClsFo0T_cl^Q='Cp3k?i+rn$[Ar;pe"n0$//Cj<#[JMnVF&8:bj])0j&Aj=HlqurX&(!6IUD"sq-JMnVF&8=A;]Mnh15ar;^#W-lEh0nKNZQJ:qrW:BRMWDO\r)*Io5ar;^#W/1.SgaU=TM:4@"<'F]m_8<8=c`-srr<(4>t&cugR]hn!2*&ArWF-8mGATW!73(1rr<*0*l[k\H4R*tq.9R+J?uGR\GlQrmh>^$cmHg5!!3TOg\rQ"!2*&IrWF-&Mse=O+'FZqbPqPCB445Khsc_PS,Rss5PP*'rr<?9M8/6fA,cOYboXju?[<6aa8'<H!._D\U:BN='^I9MfNMWrf!38<0:0C59+f0ZZ)F3P$X]m0.ab5BFRH4E;+3dL;+20!;+20!;+20!;+20!;+20!;+20!;+20!;+20!;+20!<[WhjjAFG,!:,L@@^bS9`ZOb"l@8KFrr=cWdJbD>;3!%!1\?0ZTr7nja>26D\>T=X.`GH;rrD*tC]=B>;u$d*=j(u&%tt%[U6:X*;Gg"N"X0V'J-nmt-ikbFUn@dNd7HS,,mKN_&sA,E!%B=lTE:5&8O*Gkkb%E.l@8Kk(\=aB=h6!YNuFYhH:@btC0OK_og^nbihuc/d@GCo;-9A472/Q!>\j071r#1u^'t:t;N:dq>rq]Q;>tk*fiKufTD8Oarr?DiJ*9nG-d*B%DQIm1>k<q6Zb([0[[r7?*)XTd71q(>J1@RX!!cq)Bh^G8#>g/DBh]bD">nS$S_c=OGiSB9<0^/;EQ8/=NdO8/8Ld.8HpWl+h16e/hj:5_lQbTkWjooDfZnVJ%uHc&RVNp$CR:24/a\5>9(tHk0L2?]G&fqAkDh@I3TS[kqN]R8WIbSf_YPYhibU=nAQJVHpMpW6kL1/<N3?\3+r7cfT50p.OO\-iK+tb6%D^apjmH#+_R&tA3SBJ6X_$>G>`6+$JR1j):b\!Z"VLn>8^7PJ2\*e(T^ledRupXO(iS9Nfqt4\T3PT9<dTY_MKPQXjW7eS&%?c?,Gs==N:t8+3;(a?"=Dh.Vj6[EYn>7g!YE(5J]PVIZd2=(;t`#Tlqc1]?J!]Y1t,RSl?Da<X3Yp,!KPWM.`X7k+s_$?E,]hm:H:DS"]'3=>[#m`QOqld=cPW1Y_iZ&akQR$n,XMOV!1MF)T4tor?%`-Br83]e_99r@qc9C/E+YS>Ta;qZ.oB$aV_hV2$<10QI%IN_Z\E#W"S+J,-R<O:0S`bDuo:lRXW8'>Pe>\Sg'>!^\+N#UL;PFA]Ll8d'``kZ:`TANL$%@],=T=!Q`CJ4hZ*NB63dY@4=p1\WN4=_^cHapZ*6\;j:;8E2s;W7K3?kJ!i<oRSup<#(db-V)3pW1G:uR@F0Mikl1YH-G.FYY<V)Vd!tBJrrD70]@tu:_%0'3Z^QsFC3m)*"Vag9SKUE9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X[i0`M-87oTEfXsa%&gT40fJ&nCarrCXar5EGAplY5=31o-TdJcT%5Q3s7^\,Q1OK0+#:]CEVD6NnX:ZO"EB._f44qn]q;Gno88gu.g1mClV!%B=lTEM&I[+YL/-o?[/$;)`q!@\I02Ll-,%4(ugPYt<Z<doi(!$fL]rr?AfIlbrZG1(eV594KGfp[A^Ekc1D-Kb-^4b).AlY9Wse+H3oFmh]LoOjgo>lOfY4CS6i5V3NH!!b<0ngtr"nV@&CZp4I.c2Rdb[>E7P'SM!%,Q^^G]jQ8p`ZOgSd/O+8F#X+!,1ej8a`Y_<&ZVC39$qLX,D=24M"R1F`9YQ$J"mOA2D?r/j1PG=*HN8.rrA-3rrD`f2u\M;6h%k0Ihf02.33ui[&sYf2)8V@HE>q,npdK^mt(of$=2QoqcqeSj9*$F[ZBpSlG$8dJ&d>>r=4e7)H0?fM:*QERSup;!/@dgcn+/H2OT&91JG>sV"Qom(gIUF7;EfUWf3bpR1b0anKNo1Cc;"o1,O]KcG1]8pTb$AhP6-M>-BQ:'U%n]:!,ofXiHO)]/PHRSseZ"7WHbVC)Uf`W_#;-:6Z[)MV"/PG`dV(OZZFR3?obh[Kt2%NeEE_HD5L@[cd%%?>nO]e)p((g\eaVR)V3to]!9<1si6o.jbn*#s5M,rr?Uu/c<@A@kX>7H2/Lnr*sqEFQ44X35mB"%)C<H:G]m;PWP"j8ef)A!K8bk!R4n,dmlNO;M++/RnJc[[Y$E[*T@d!0t/#M(NACWhuVFNeEa^YF"C6@o#!"EK"QGOL;la-#jaWQZUeeOaF;Dql+d-VOZ&^&>?F=n]6Rk0@.CgRQuZ?DrrC22ES&[h;f)*'9*c9oQ5c'&*(Z#+Q[9Jt8H^*04EVCABr7rbb17_Ei19eJq1"PWV4+4,b[m)3,)sr*OEUmY8N_L.3cRp([nCD'1b:qTjS?JlM]^H;R+"bsPBn,q76@^=qQP^CBuZTU'Hs?B;b](LRsG#6,7]A+!+/7r!'rL!f*-Bu!$_u+rr?Crrr>>BhU^4@#^S_[SCE%H;q6=f.&)U;kmAi5J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-s6bL]!#jTD`aobZ<P/Gf0ML*Dc[ETB7Y-5K&V_0uX(l#(DX(/nt=cndW#,!3RdKKikA/J,Fq9J*VuA+]]%b/_Qp`'GQd0;CG.0.4>1lU6*_%BdfdM"JhlkciH^,,le.4MF0W88P;dN!g(f$5QR[TP(3ncd(eXceGfO7dP'cbl@t#m!$f4Urr?AfIlc;Le+ET9c%u.orr@uLB4"(A<[UF<Hcldk7O<rcg+.uE_h=9W0&b18n\nV)J,fQd!s6#_"b4T/J,9)4rr>BgU:GaWJ&iCTqYZi_!(*f_r$crqeE3CniTU:A6YZ#VUUlWAj=;Kpq<sS1<AI$:@frFb3T/G!enjD:AG\[H]<V'4G;.)U;7A):*/rA[`uNgQWt_fqZ+ch;Ztn4.C%;M[RAN\tf>]\6p1lr+-*JH^fcMFG#urN2]-j2&SnR2EYNR%YG>#XL!'aiVaL,Z]>$nTA4T$hu[$K-0UM7O`R6\hUA$6-cR_$2&[LqB5d`hoR<D64NS;dIJ#R$0Ya7HD,MX5S:imnqgca^TsN!@FTXYZ-Yi8AIo#9Cje9r5mSD1?[C`N4$t0NhlsaCI^^"_!RpNf%h;>&KiCD15rR>)gKbX0_f?iR'fsZ"8/(0XTSH+_#)nOTX]JL'oEU$;Q)h<3ord>I;R)ThHl?5!e*]+b$sO7L(f9$r]HckRo]bPA%5.d=`gqGq=a4l]>4gf7Q^?XmFZkDf9_Lg*dOf)^L-"h7"l(*XaF]f^NQrj*`ic!/(8;NG7tLC]=CM^ZV;eD0lHKmjQ6a@rf[)7`.AK?k6a=Fa\1B]?c[Q,'f6l:WSpYGkBcU3if+%E?paK]u7AE(Wr'++">=pE5i]Fo(.F^or=T+Jn_mT.OcH#A_ITn:X%[%#Lq\iHW!hp[,lWN.^E$!f)Ga>I=G0h?JE%q3m!Yt3/HMja(]J0Kfsi4\[daO0_-cr$-"0GUd(#oIi?M!hInd9.&2XQeZN(pb./)t'S1i-"dfni`jST8iu#1@R8i>u-D$32p`hY=gD>Pj;fYc&"D@),r:pMNdC1KW-R,En6IkHL\e5Sh=n<"M"`Q4_;DJck.kWnVLXLQ5#W':BHT];9)l(=]%RU:&3#mtX[2bM,W*[FeCPR8!4Hmu]/>rOn//3VTWji/(pT7^L?HN3I="mY>V09T`[e9X3R^-[/Ohklr9E]PjWtSn=`/K`3E"?,of=(0*X!FB48?VanJAd$3a\jiqb@tqa"eFJJ&M;bO,:1]+nO^ae%ZEsC`^dEC%'Mhb?GgaA3+,$%.EmKOfK,VbAP'pg:6ZQ%lJkn05+eH9J'?;W>0UpFS`G%D184WeR0_Se3$91ShPQV$(h\R@*!mr;7_de&AH%1cjSM[%XH>3H\@3.+'PZLXmJG78'u8`-%WFN+;Pp(/%IK+<\!uL);&OCt`$19EhW0f_oV']b:@GsY2.!%mb=?Krc`_2Dc)TJ'iGg*PR08<jM4Err#lkSCes9T2eh*;5@d4t%EO24MVeA%2k-C\>gM-?jrgdtJ/E0!)J@IQ\FbUA3,k]2a[5Gd_6o2sY]6hSL6^qc%`?]!],6snie#uqmP]*Jmpj\ZrH.q]Df?a&tbg8;WfQ64(#nkD!oE]MjTD/`jWY)46ZnkA;19;q=5k2.A]U[o=j+C;XL@05R8K^32\$^BFd@"NgA-]$Ai[MHnqtP'jJdI%2N6qXq1:+;s!!4oq\,QFLif^,Wg\U+D][FAuLR\4$6$EDV%'jGW3/lena(]J0J9q&hDfHfI,$9[M8KT^Q+G)l^*_.@(FKeCJX(`JAm;?e[@)-;B9Pt[h5Y2**P?'NTq"0dL^1[HGdB?D,77QV>hu&H_eWcuT-/\@p!&?(>q&"2qqYEGQ$*O-7)o)1cF<CAU5Pbh5eEVDmoRE>F+6(fC?]kaEU9QaGMC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!YrlIp!$[H$rr?;"o+e`:ShU0EO[i@M!3R^FMUmjY,O15-5J`ter/5lNr.Aj9l\^08;q64*q$,RQ!7qqa6DppH]/5;[JC7C`FD6\!8[rDs)[5.%pT]e=*W:Br*0MS)=uTL_PpK1N#6]H@"F_%fNp2Hn73SH\UnX$&"%bp-!!\o]+eSn"MIK,>.:dR/$!aIU+Q/<rJg^ZLPYt<Y9r4`6!,3jY#nbk-ZBBuY!.O1J3'NiDIi8<0,nuRD<?2>D7t"24]d!GuG,XUhniLT9p$!:aXf6/%:XpH;O,BS)^IEA\;+4r9KbRBL"`jSMrrA-3rrD`f2u\M:7<#gihQN[.:MB_K]pgr98?sHm#\0"J\g^(jS>*LAof4PI6EDI+Zfp:aa'NWAqbPpnR/HoS?^nE?gRRZW>\BR*NH>+"n;uq-oIO`!pX7K>_Ek2Od'9O!hb-o7.Xt0BR7e8dGPe$.)s375#PRkjrr>C*U&P+@/LU8[X8`/d`hED4I4ZMWIU@F$!&49*00d#I!0Op.VQdhE2.-1qFV"B6Bg9'!?htOVrrDMaUY&AcmpG3!>G^NW5Op\7D54\$,`O:(F-re;cfV#F_NNd04'9Wpd]b*BAX0&URhC2Xao:#EJ*:%MrrBd!PP\umrrAa)rrE&p>(4JfXno6m(Y1"lS$2Toq&;(3Ou>c\!s/d0.XqL[+&Q$Tllicu]Phc-N.1K_8I+>#8)mbP!8AEqr<l^,!;FpiIr"?,oIXGM!8gF9UJWNpc$u*C72G=k!;)WW7`hNra8XZ?^Z\k9rrBd!PP\E^rrAa-rrDXo?G_.uHN*t"rGIsoh#@AqfJM&[#?96gkZYb!es#u,<rW/nDZ9_.>!7Q:^@hJ6ot"IZF8l4b=OTuUIq`ZToI\u"CJ"K"X8`1H[se(S*l<A5HN*t!qV<eh\c2YlW+c]Prr?_IrrD[ChgT?4pAJ@tL!/r0B_E,1qq(Y!f'.JYchrbY9f8F6m9fjHbO<\i523.<!789)q5k^TIU@F$!&49*00d#I!0O!j.%uM(KM][N`k<*$!'^K`^=fRe!789)q5l$uooJqcDne0)fMqj=rr=bLeLTNa\c2Yk?%9r5T`5#DdJj3n9m>.Nd)2njlhX;<B\,03_*7UV68/Tug:[]]A]kpgg[u='8lM7Gc*&aX\5>[0J^bB270"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"'Zit(r"F[,`^J!d@L`:8W\ME7C.EBhZJ["!oS<+Cda%/h:/=g7o+ODV3"EDPXFF&hQkj;Vn7!*iIu$D+Sim*Zs_3QRaeKQMIV!rK(JDL($C8%<t:e"<>4m&-H3-CR$Pb&p9a2S3$-C"OJH]5Rn^>[V[B>K^Gf*Re:?U^M.tAJ'IUn`rnR$TRQ<d$BbEr;Q4r!P(3Qj#iKS3oAZ2c!,CAlho%8X3TteAT.?.n2<"";:MGWB1/B79@"cCQpa5!mE$Zec.MiIY6,d,Tt4IObrM\g;41Bu68X]ZN!34m$E'.7Oc8u"1(QD/)TpIqL!*Z:f*g#*(bS#o[&n0I_!j/mQs>g%PT*_gPEF`JP=N'=Br!toc).<ams`%'ge_@c^9lJKDNmEj]IlH;h'3\s*1abK;4M.N'gg5G\U?f^10dBSiF&c37&W@?D9*F[+*[Ldf</n83$F%u<)L\h<#\dF.d$ot12oDA)"d\RAhukgDN^=A]jagk_&:NZi1J6CWfbluTh^j?RXKOsrrD/SO_];eo'$h$ro&7lk$)Y,+S+?sK8f`(!-1k!SLRi\7VOG2!n4-;miHG`bPpVV\F&kge*0e$UakZED.<gnm-5h)#j$je0%p')#m5b1]in&:32\Q&B`^n2EKO`3Z[t!'Fhp;1Wgr>G?e3!Tp^p8l<P.SSe,5f/AlbODIH5(n'Ag+r!,bUY6Q2u(0f.luB0S&P3UKMJ]t8Q3R@a:p]ls!!p+?o%DV,13q+(MHSp`Y#Vk%<<M7<R%g=(KVO,3LI<ku`m_[\b.B_7!a;sfNOq-BOZE!14"&b@o0C]Zl[Fmi+t0)&E(Vm#oiHTA6/)..9qSpjK(++GidHY[=9_cs4BmUT<q`3.lDg^*(_4[4VN27;Po=^")nb9roFdkoY84j6<l(uBH-P'`cb)X-T@TXp3-\;!#=c?@9[L44lEp/[5mp33ouTZKB#N"sGpc8p(pVA1;LP@)nUk$:S8PamrHoY8T>18:C;\sC>@\8,]$VeJaSCr^%[WW"1K#EU]$,O'8L[l6!-JYG,g+"CcRRtL:(kKs1aQ#.Xu4e!XTFt$DETPXoO"42!O+\=d-gdGVC,aL7:>se_h)OF<B-C'KgT.<XmrrD0ZF>2G=X_bY>4(#>/gAHdC#$)"QDTZk6q@7Me4D(+m3eOQA%4mT&hAD0\NLZo2ccB@i3?OnRk7t-OD:[J._VQF?1$&NWEV/Ke*Nc[sM&!ZoZ(8t9J-@nW,L_67j&PJVD2;.=Fmj&=IpT](7dB52=rX6H?427iQ!M4"6;6DYF-F)2EQ(:X4Kr0`T4npne;R9r5T>6_(^D#_OJ@bT576,-h?af_Or2ju3K[H1%WDY:]E.g8O6ec6#(u9(Gq=!`q."+u"-M'*+-d27D/4#!N:*81IG`l\!!dR'9?Wal)@.t(.DPF4.]ZuH^@F9)GA$jD6+XX*eqWDV(P:Q3"]oYA(jt?_F-F)2EQ)Y4CMa>S*P=oX[fE?2%Q<M9N]r]NRoH!9B[pPr;@@E%3jI`6%f?;Tp5ljde,%Q7.[FuKhn.XPr"?`31pT"*Enks>9uiR'Zjnu;_8gqe:XD>eG1?Nlld@HL9;gGpKJ%eKB790P2D/qK!IG4T.5VS2*OS-.oT/gu7Af6chrI2TP,HR>2sAQ(MC>W;Zm_Z+!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%S`&+7^iFJ+^b[!&7]#M;o-B'QlY:id[>tB`A&F5,cL8r#,>qaI^<K6+4Q$`BTH`lFhuNK<9XhMLQdJeoKT86fC=%BJbs2$>h@QJ-sNP"#ZT`/]>_A!Q.CTWf.uk0.o&3O*pZ'.S?Y_Q/%eJRP#s>Bk8RU";_iLgErZ=W%H^K&cJ6kY`jdr8ARGa39aWcA05BGrY1:5JSk^UJT.;VBMRH%`O^9<BMqjUZ]U504CP8h[+ON=e#siZeFq^).<BZ5fjd]6?18%sES\Zar)5IG98RdAQ>Wh6m'7!XRA9RJh-e#Ah36,Foco%:dqY0m8`&@VoSJkH/R&+boY:3lrU-2]_r;!IWI'C1YVAhV#2Mekof4"7ku$>P0d5'GcY)u'ea<((5JI*ZbeC9tF4[=lFEE`snmC"Hq#mq+GQ,5S!2&1j>,A(6RZ5KL"h+Au6"]^FIjk2q(^)q+H,j6hV,)4<h/H&Rm50kLIt$46`S_AlNYDsp;q1!][qR8am`B`V5-#X3h;@i(!&1:udq]&a.4D!b!7F_8BE5&]+9)>'f2M\LY=SZnSQi+c+9)>'f2M\LY=SZnSS_#6qL5C*`-bPa!6+djZ(d++';R%NM?#'!M?#'!M?#'!M?#'!M?#'!M?#'"V.&X10@=n9ns\o@5=#a_o,+)p3$4!WKI&QjX-$;].BC_GgnM=c2;]$]5lUgrkttR$H:r_E1&h6(%S,QJH?bWVe%T*p7Pi%FghGqrqWp>q^;=1+qct';DB%9`]q)pA_!<DMNAnf05,pqR?Us8Nntc('5+"R_[Hf8.;0J,-ZmnO[n97/e'NCA4;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I"M;o-B'QlY:id[>t]#=,or/*P-rGb'G<j[@5+&la,rXA`Ij@`q]!$LT7qVn-g<:sS8r^#,MouTF[WTuQ^bouSLUnX$75ts2Cg&NQM1m@u<;+X"V2O9gt"X0V'J-nmX,leY5>"Sc^8OXeq!g81-5Qt0Wp\^&_TDa(+r9DO-nFuj@R\0P)8,V[f>>N`@7lDUOVuA?sSW+=\=IgU('Mng!'Mng!'Mng!'p5J?Rn(nrA^0jrDa>(e4-So[e+'Gs,q!B,OZJSU]\S^R7<5Ni%<#,(8^U3DSsL@JC`iDek+Zc)?YV^hHHjFGT!n@m!4e$OEQP=GMN>e'^D:>PLG.UT^VP@`U1Uj-iiO.oD_>hTH+F8irSs++J^a.jf@T]_7u]/l(6KZ%l4(-#!8dmI[qho+RQfBk/=%L;`>g1b:cVnopP2\r-_NH2jrok^%].YZ/"T!d_8j8#jD"3aO2Dq5rrAD`34UNb8^?0cr87;p!PCF6W#aUKYB+q!=<g"/?]aSWQ?m,&S==?^@YA6SMokgeVQLhOW0M)==hR$%87Cc!h(=!ArqE@GRV>JQen2l/r?"eaJbs#S;P3CiLA](L5r>-2:$5'uVaMOWmf*96+4(\B+%k?GdosbuiiRVjDN#ruV`2iMT66q+d@258[7^ueN>^CS>Dj9g([JI!"`3G;,LSGc$TmRD6iR-;f^41cjRZB2B4'l6G,(7DBcFh]^r(V2RXEV]nLJp8PQ(V<Gq28@QT),DYOZ=37<%eLCDpj`K!h!TA#6m&o2Fi`:d1.Z58R[0I(IU_.OaV&Api,)Ojj_$O#Ol'r#atq#M+0MM\dJSII$R2f25\^DSN#_^jV+:)-Hn=#&sSBpW;R)X!pKVg.KBSS7\r@F;.S@,(b\#TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE;A\@K-<ONi2mW>Yjr+[of4UrrA0O;uZj#-i&YNO7=I[N,_(uT;2=>fRLt'fD`<.neF0bp-8*X[f6?18c49<=j(u&%tt05#*@7]8kN9(!#10F8cU:g1m@u=BkapS;Gg"N"X0Pe:]X:eUn@jdU6:$66U`:$'jJSjniCN8p$3^kWs5j$piUk0B7KlFI:I"\XF'rsB(P2WgLX'-[C%T_l2%0H^Vp`RIZ3nK/"c\\N'HMfU&P,NRW&0tU[3F`rrA_[L]7@+BtsHnYrWAHTY%nFY_cr(\Vf6%E.R+iW`\m24j@JbO2`:6*ROfdn4bkA!$t],j4LcL4;"Un!,UrS/]F6A(sE;]9>4JF&QAWRr5GpnNXn:O"46n'MC[knL&N"cZ".9VY?OZJGl>X\%"POU`V5_j:T\q,\Yf/)9BUZ$A\QV$'BEluL`:9+"D%HdI^Q:-C88+L(h,!V;7_[7T;g@U?6dlTS;YSSP!T*J/<oRPqrDg$?gs3CqN9O-k`R3(V9Si,fBO&j78qR:r$Q,*JfA:MY6S%>N22mA!-u?!]$S9X16=f_&`0m`N@d.rr;Qc=J!l9V::e$*9DcKdrrC.\j*6&Oe9TVf\`?-/hU$O&r<_c,lWRJ@M5Fu[M^p3M5MlPoJ)Ehccns3Sb-^63I628)iJ4<9ba%(0X8CP(RVBd1CEm=Ac<0&>edRS<MhR8\35YJGN;YLBj]Isd9FN>Y`m'];[:]56PE.N&i-6:4K?3+T96"HSFWsCsB`u_RFejsN?_KV3[h]a'1'oQb+I0r#dRG(4B,mO;T?PmVWt_\mhgrs#&oBhan'o:B;q*F'fclI9-@7SZ+orI'2KB=q7frjk4S9FG11+DF"Dc&c;.g$5O9jV(Er!Ta^lO_0T!ri<Z?^Dkc'$p>agNV+.h^J^NPkk7PLm3G&Oqdd@o[!38HT*HS.D:7r65_GjjG?4.66]@rrB7gWQs.EW\"`IL)\e[gh^#'6mWMfB%fFT`C:0Up!"DPUN9tT;FNam^LL-U#m`k@K82!D,j4qWf7BCAZ:cVj10[r&&6\)Y(gl,KA7jl4_<7s15'mYfM1""D+I5a6G<B;o4YfN"YA52+aaP:AWY9LA)0Y<BIn[o5D_BHY<bS\Nb\WL;BsC3L:c;'<Gp`\2jEISA2$mZrf-KsQ*nrkM+FLr7;EhiM4arY[VkgJj-n\m5;e$Sn1n/jZD#CgK*=YdjV3U(dZW]dBNQJb67dOZ;3>okE@nWDaQ.P],q*2N0SQ@7CqJ5Em?%'^uh8SZ^YB#tgM.G;"+W?HpM&_6qB*=FI#+;Jt>pMJ4d9cdAfr+8e@Z]ZDCn-IT:'NGomonJJjLMh.0W?BVP$Fs>iO:I(]I#Z+MQ*Rh9;oo>QpMP?`LmY7n$TLmj;`7uiAdehAb^S$?SJHSDCr]]rbp-Re*]%e1t%h,Y%+]^^<ne'o=Er3%%Vdbq--'\bs<)Y\#+Yr2ct?8*?`';@/g5@\r,&qdosbud^AMUoe;[MS=_[?qlLsu5o5K_D*D6<8=gAWjh8.lA,;>;I^QkeCRSk:\Zrl'@uTa`L*'DXO34_5eJ,X"<?4Xj!kF:WD%?R*b."^(lcu9l89Y1%\:=2;84GI[MdDm%5NZHRF.p7qnp3O6J!'"Q<u9h"%i&=*UYf<3BnJY6pG.S:l,V!Q*94R*=(tf;VP,LeT:rq*Y,jXR>4i4NU9c`b.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!`:8W\ME7C.EBhZJh-tWHr^@i'rj\T_.p>0UO/aqQrr<7PO7F(,r^#,mouTF[WTq0Xr.D,dl]Q`@;q?!FRR?%"8OXpLJt#D-TE::68cU:L'U/SrBkapS;G_'U!2MGL:]X+#VU,?86):.TP);j3.M!#=aQ]](!8"<%cDIO&3WB((Su;Sg?EsM13nfnKo_hY3M"mtL!/pJ^B13M8-V.,M<ZmJ1;j!3hda:;`'N%+1YB9Y)7P?7^eg](r6jFf09#,?MI>NoO(9)GS*9YEkc%Q)s^fn=,.nE[1'pI,9qi#8dVbu;D?Mct#C3!r`nKsUBUSTR7,HUSJQH/lXP(&[2a2H\,UAe+nCE3/dL102R5+"K_$L"LMTqc>5WboJUL41foQf]AWe5^S=Qc0niJ!^'f*mV,V$"(gS!1Nk(.AiQQD[KfQI+fpR4:4,Rh1#&^T[,.be1I`e>%\bfMXMDJF'sC7qN^=L*ljc.GPiQUkT<pgr[_7N=5L\kNT49PO_8_MrNf;jgnsPIZIq:,5#_3P/6.FD7L,gnRb4jrFNmaB9?<oYq;tH(rrBc/213hMPrlsc>])6sj#F['jfPm?:U"LRDOD/0o)56'#VH%LpjA%\FuVVp4fUkeIbXl&*j^?0rNh"-I'\k]IW<-"4MR5#HM6f5)5`k#?;97=Y`MK#qU48NREcb!,UW658Z`08fm(/mrr=iI8hiR;,9*k,r'8amAV<!SaA$>Sf`gid.ddX;la/T[ELsn9e^7XV7<KG=GMjHmNlXN[.REMk0ZS)=6OEsU"r0XCIc&u1J,"Nb-"25hG.79sOj4>-O6pEInNYa:XG^]W`]`)f2g3Q[GT`&R$0J$Apde-@XHM9FMk]`e7K-n`P[]/RN,J!.K3\e\RSLJ+/1affrrB*tYM<Us3o9=(Ofg8067j?_`2et0kqY9u+>N:?moM?l2u=rFcOM;m'?h!][r!#/^1u?&]A7s2Z@=K"Q$J5%MBT[ToYCI5Y<&9?="BT-++?p9r3nMB0TZ;\i)XZ4iZ1ts4ES!;K_1`3Y^c+mc!61C96*Dc>*[A&l=!WQ7K3@8N_eh.Z;LDYDoM_V?SQt<;Z7A7o6N(1?b$k'Hpaet09[BXF#i/GCqaC$bDLCBr[$)Ze6,/9_LL[Ddr'P[+R"9^f3%:G3c&,.Q)$)eIk:ZHeG$"CF462f)uBR7Qi&gi.^Sp3D^D=A^YNCc\*u8E\<g7.\^[Gqi^VT<50?+0\iX\#CFDS/YXJ\)pgZRaoVndgSQX911J2a<e(-$UrI4^^MC>RN6Ad1a!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!jOjrrr=7'VuHa%:\,=1=e6eARo8bSm@Cac1st\U`re2q-C%-2h&0Z8Ppn$4r^CTEq$1,Rf-UD_VlV9knSC,R7K&W^gCPudcpht/;LcYirr><r&,Z\jEh_=EIH\g5PbOKq^?060<^6L^^[qo<rrBie7QaoT!'n.,r!5-mMse=O5HMp$AcDa\ZX0,(4+(32!'n.,r!5,rnRqe&/3iVHdHk4_pRqB,J!OI:$T2W-ASgmLr<"T8n0$-?pp9sNQ65l5B_F*jqp9b'5Kb_X"e(1/ZM_HQJ']sgrr<*0*`n7akS[h/!.b?8@f*@B#M*D_ZMsp?=f4hoSkk8/kS[h/!.b?8-cM_M%'fg4^k5.^IFm>.lS8BAJ)Dm*Uc"_(Gd%*t[QjNuB_t#OrrD7%A,cO[#*36jYIt1lA,NY4!5Ma28Ql&nBCT@-")NJV+OTn$(&n9\2TPgt!Y$3ipKr4WXN1-Jrr@STr?Y;;08fc0kSn%3!.b?8ZM:X&J[Rf<&8:bj])0j&Aj=HlqurF$%9!'NMZ3\?)e8mJJJ<Nn`IILiZ2Xg>MEQmc^@WLMO7LKo!!-ZR8uMAI(&n9\3lh7#!\!p^MZ3\?*Fo*LJJ<GIh0nKNZQJ:qrW:8c%u1)ajE&iN!:/3#k>;,4`F&6IZ2Xg>MS7uN,?D5'mr.kI@#.Ma`hFn@F>\&n,\5Y6GOn:FWU2&:(qh#'\hgC]MCY(]$7MX!$7MX!$7MX!$7MX!$7Mt`rGm7ca`O'SA"NNQ[c68^0\PN"kJuG,F@"5HPm8Q9Vi"s1Sk/7Gdh_g^\-1R@g\d7!5DZiHW"2pH5,SD/e%@EpI58bZ2;#&a%U#p3N3l7AWrE'G"/^G<j/$jd7YtuX/@$eJEI0\TF*TdiZOuJL!SKpBlmki=NG55)h0++39+OcnRauo<O75-Lf5J%a26@qZh+(\*5C43rOiXXD/Pa>a:%id.9KRrG8(;Yrd8hlniCt7hD_asCMLM:8F60nq\K-/<I+5"(\#-omrr=g"CW#+YbKi]QYOWCV9kDM@pkqlPq_qK3qB=9;jnX]0%!DJf:63:r`hC\[X;E0FD<qJac-J6FP]u:kq>N\IkI7dAq-3=&r#[*6qTbY/O7^&oj)=?u/:R]F<(m1&;r^KtjB0`$Mppc8e1X]`Q-a6Z)U^I*)V2n_04-U9GL-0,Rb"=[8j<ZtYPBjC%SH?fV96Hcc2Rd+aJXZnFTk"a\u`65$oPH%mc)9\m_eUl[IF+.&8%7qZV/ITbM"iX`+/e7b's-c!+F4$LJ$lGWKgUZ8$R$,:(HN(h<P"5;U[L=/RAXIb&I4sA<F)GnMg2J:(!V&"^S4#:I)D=-X557P06`lgE#Ci"699[3]d9@ZG;Mp*bqc[ou<=J>54++mE71Soa$-G1rT"k3AE8\@ueBd9$GrO.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)il;%'u><>d'P!%7k^*S*&[Fpb6)=I]@@V>dN*VJ4;R?<kMcWdoK6F.Dk&%S8g6jS#Z0Vqq-IQ>L(Y[aFk`[)V(fmM^RnqIe:Sg#rD<IsL%d`M:`P\it*\UmsTgWkk9bgW]Zt^2s%'p7J6ckuL[7fYESQa7iG\1.gb&4Hat:XK&9K<<6&-!!WE;ZiErl'ED!!'ED!!'ED!!'ED!!'ED&XME0[@V2]#Fe>o@'L'OY%\>R_>*8gHbV;^uUcs,m<,F6cUP8ac*0Tc7jpD`5\$4>50Fite:A6W\g\:fDrXNFFS8aOTF*lju@8?FAbe[,]I>"Ge9a_uS5`##lLZ=pq&kZ?;:'g9M9C/J6Wf5Ga4,4R.V[E]FdJI%).H-=NuJ(j!If;3SflQRjS#$)TM%RD/C!45WS##NH.;DJOABkRL@MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!JoEJ\P.9$qr(EtGQA9ErX=`0C)M5,9\+^Qfli'YDl+-U9eB4n):>K.-G<4G.R/[/>G?"SBTqbHa!5;KtrXnNrre>hgrqTa$B+O04F8l4b5AaL$ID<IFRFG)=\,7KIVu7&#L]-eNT@b'[r=&OXrUR=B3.F!dTD8`#X8`/`hql,llDUjaqZg+#!26#]rrBc6PPY_errAab;#^O0<f^l(k?i<1!$M!cJ*5S`fD1tK(!1r6lG)sIC*32mdXP_@^[s<hrrCq,8$e!BYIXZ5OF(`WoBlMBr6Dm2j?Knl?htYDrrDMQV#JBaJ*:LZrrBc6O(T!d?ZZ5I+SO?8kM,mcq433S`uQ7%rrAaYrrE&o>#4LE=8mqYrrDrXB_HEEFn\,k%rGDIID<IFRFtGBBD,*&rr>D<rrD,eT@mDWr=$18!0YariV`$0J)h[)YPe9IHN*t$['(kPmGh(&rr<CU@Tl?_6WI$>C$%B93WB)1IF7_+9'H9TZLr/4)/oNT-*3T>"%.F8rr?e>hn@;(:oc_JUl:sg$b.4jqKeSnS3NQmchrRcWrE(F\+d)t1O^)6L>Tt.B61(VC3*`c7'Tq.Q>Q=T!j4;=1,k:TG/<>D",#pI_i6HP:]U#+n,QhrX2Q16g;!RpQf!tRm,@m.mXO:ND--^b^V,,bgeh<8p3s4F!(/(,jKtOeec,X5A%ql,O(T!d?ZZ5I+SO?8kM,mcq46%N_L72@rrAaQqsmpJinIRmhH:Z5GGLrK)%5(nWBodo^?>J\lVpLUc2Hu+cTn51Hnf\"kD"*UMhr?DUkfh1l:l%pF,qlB?UJRL;hC1t'N%:j@7:l,!C[]!!C[\9JWi>&(!0]qQi8;\)TtLX2V&Z2MiC#(459Xhlh18X-?&ZLF\hiP2%TTGCO]fgn]K1dV^fVF?eNE+hbV,Ul'Xmf<WK*9+SW#@`4Dh4nC@\iD5tEd".e?%e$1>TYEBS8M#@?M:c"Qmrr@_!<;urlT2>Of^/gr;n?(g--6&QghG"UIP!k6>i'f;3&*I;@rr=5>C;9B-rTjC-556/g-i6c;n@#5Do?ak1%d,.e,aeS3e9b_LYA^U$57)G([_mG3r_:lp,`ZOiUPY7ea>m'WY(QTV<;urlT2>Of^/g;-&*I;\q%)4ZrrA[0mpG4"FB9jgKrTXLc_u?N.nT\pWrE(Gc)?-L.n?q$o<5_)!0Fn%?hsEpp&8T.7<1WFR]lYufDbjFb0kcKlG)sI?iL,`.n?q$o<5_)!0DPB^[pjklho&BMW=^:Z*ds8)6a&?n!0\05-+\`6S8<<rUR=B3.F!dTD8`#X8`/`hql,lltEO\q]f,@!25_Y!<2dt:[FWVre=YW!6JpJE;k"S5Oo>%=8mW_]mlI'd9L&P<iuB%6S8<<jKtQ4HFNh]\,QGkdHoiilgB8`*nmgqqgWql!&M$W\=`-4>Q0@MrrC/T5I5KNqACsd!%"Dn_thp>rrC,'[9rb'rq68'DaeXF!86)@r=#%MP1"hmlMgkV11,K'8$e!BYIXZ5OF(`WoBlMBr6FG^iI8VDrrCEdIJGHBfQD]?)"53cUY3Q\fA-B+a??q<q=ag\rb$FDH2Y^jYnapW08T'g6nC)0Ycb%E(GfBBB2?%IOeeF:JTl"-dZlYabb]<rZ]t83(7hYXoJNSAMTFug.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5PIhK0?UT<&BIMpDD^!psPb_c)I(\gLtJ'XhFZa7-im3B$HM.22oKiP3In+e@m?i>8nr5EbI\#Sg$`GKDgm`nuJ:8I%H]tRNN%5`g(dnO4m#\g0#dnKfcVODM%RK,]L2:(/_rNF.@+7Uqe^"[63r-c"3A``1I2dZGD$Ct)_>t(jT\Md8MBa]2eb(M8Y+<VG+Qr#gRK;E>IBmZ3scM"_OIoir?gs_/C$]sKWUQcu;@Z27A%\Vjq#"0(TA^idC_/m^#)*%Oajt!%Orm7*?NG,fL`jZ_tBp>W8>Uj2?q/Q=#nd47G8bVuO%I"6Wd90e@g+Xf*,[__h(=7OLVaFZ9rG2C%CDH9nY2?/QSJe;nkAN",/;2b85I>pY[X48c'BOAk[>"o]:'&[gk,5qZqUS;D<M&>bT6iDW/0T`Lr2[F;N_/C]O3)_bVQ3V/ZF/*EDV]bRaf+9_,@/U;UEOZu*0Yn;&jWNcIs2gK4L$D4*L5+@_NMkY!9HelH[p+.TV]A*^TtoX9Kphl4gQZ'>U_G3+:Mh01[3JE7oad3?GQ(<c)%_\iH&\\)P_!;a/E7s95sL&7i\PsWYfV+#l-_-_<KgZRa+dlFuP)bQ,GN.8nk/uTa`j-NASu`)R"Mf!$52`p!(7::27K*r-;Osf/EV.;>?80pfX`WrrDj/FO0gC5FJXb`:/9SME5DKE?EEUh,SCQ9@]Hh^Om%cq#qI0=doR/;*Y:!;*Y;*rZu?^7outbr%jghH`5e*R1o%p0CY#rrrAZYe5nMUrr=>M9E,!q3IdEuW+dUU-i"b7X^Ip[V=M1+B4l.\g.,po'#b8h$EI'nEMf2H[b]W`P"Ne_9f/`9Bad@'1o@SIg?MC9daAN4[uO!+P!Xu$M,oQDD?LK_H[k^g1$3X+EogB-U1k'XYGkmA<gN#`Bc]p'hH1O9mH$pDA'?)^,Ep`Q_"=sEI<P?C1#3Cq88^Ah<:4:=$;",\4%g1emX6S@)'sY0!)!7kjC90'>IC)!`o#ooR]S1/X>)iCgqo2KD0K[o$JpI02&;I!f9T,e80lFN.^6o"XK8JOfF#Sg*d\D.mCAMh*bK+[@0uN6;DTD_:HO1>`:q(NC$O3ZJ&2-b+J!/fS6#Xin3>.]%5DBb(NMR@"K<kla>bF6+H"!06W'0FSPjAT0)U<S_BK;uDGFDbluG76)"12.CTD5LFI-k+SOMT02D3F[E_u@dkN4.qiDo5J>DZffH7*Q(jcLfdaQgYhEi2$PJj0;BT[u04=#!2S[CD_#f2lOP%kiFU1LL_ImH5bh4B1iHW*N&+"5Gc?4B&V`(,f[-d8^,G&qbhX)<s`>3\>LCqYpPW7hVFaI6S[#RBWtBMHLs%!`pjma>bF6+GpV9gU5;6WOY[!o$3ouq&:,a<k0]*`cK6bIgSd?.u<WA7$;bIh2??>M.5T?O>;%@HLs2]MLNCMdUDg5U7@GH])!@;E=B.p'QV4a7uc`6$!d,Dm6HdOfbN#Bj)TdnoZ_GRg.hR"J$a)_m7-&`ls(.cI,B"Ea*p$.",q%TbH@_gijNb]n7C;NhN[7Q]-mP"Vd<;]g:"'Prr@g,RVATTL9Wd/RR9\]VLTf&rrA*1O8A"rb-cU=rr=7'RK!7l8+SU%H2djc=!.+[^QiSZ5Q4(l1]FnFk%eQ+([Aa^F$KDQrYPC*DMfjD:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-j,pPrrA45V>gPISA39L6>N.,rrA45V>gPISA39L6>L>J8(7-D2BUqXr\)Y)Br7D7VQi0M1t,'2VLT6,9dukp!D_rSYe?,iF^o8NJ8G`H9#M66OmZsdi.`4s;+DZ>:i0#_X.0]nah[YM9f1>]G.#FgMK_]k]XCk)>:m4jd(B\c=ILpC!Rh.K']BHmaNGJ'MGXXVnu9VooGeC_</-iT],rNhAD1_%>L+RXMe<J<7C#!p)O4bjDAbNm_"8UgX7mD!>t*j[6QEA&9$!]]jD&1!2!$_hh6J7t&R;;K7$'bWcRpWt@[0Zf#1.@O4U2)['bXYQ7'*ZI_MZPXK#RdA%RE;S)9l8?dn?*ob9"PZ+H`H,U"BN#N^t&'cf0F16)PW8Uelf7Bh^G2!ZGdL1kpN!C;&g.Gu+G?>hf'SK2qA)j2ulJk24=]58#;m$T7i(rr=7'RK!7l8+SUI=Ip''!0KcFrrB2Hq3p'<Xo(b:ZTL29@HbHKU5CHW@%rN,!2>?!!3U)6r^mB]rr?AGrr=cZ/TWlN!:irC^\[Pgq23mdn'V,)2CIIEpnRYU&Z2!q88Am7Br!S_RV2^27a[ok85W'<$AQSD*+W^>"7d/t9f)lW><>u\0M?6j_H=(&UBO:(P&]fN:ZG-7_Tlg-$#Lf0;sqZQJueM\^oKqnC%FOLnjW0qN[WkIA5T.:P'3SXA=T:Ak+PF@GeW63rir:;kA)'uN:bCk:K-R[%5cIU5#p7<p3*QY/m?sBE&\Jt`o6^cV(b9CB9\lEn(Y3ZG4!uZmcQdHe>A>TFr[Qf?<^':@5,fA$cH/P7R0q9E_\c<8c3:##\2QL`>\)@WO5"F%Pe9^i-n"h1t+nGEin[r@#&@?.5l,%[qNeJma'KIkLZ/VX=VTXF(kZBOA(B`\<(_kqLSHBP=T@bCM"q2^!U.j95.fgbAS'4=Kt=\<0D8s4`X,j=CXpuQnRnR!&J8d*=(kZ3gA)f(LbIiHO+>_Pg`>NKJ_.Q1t+])mm#jTJ,8<bb-h-hrr=7'RK!7l8+SU#H2djc;uZjL2Z?^[i;WfQ'Qh[ti]ij5Qge@^r0be/!8\Oe?fm?Z.&*t-6Ad1a!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!%VG_@r^mB]rr?AGrr=cZ$*JUS!<,RpQi@%lErQ+o>lh(-m2o-SSCi=KVte"p+f:],88Am7`J[m/T$L/Vm3;F%oL<DOmKc6d"3YQ'3+9U0?VJqPFU^gk#c/Gf\I@^A/):b(1P?U^&4[l+K9"JccJ!&p%-`kC$[KTnU.Y[\Z=0"`m\^mEp?/^RYVaJANs25>%#JsDUu^nMZNo2GhuU35"a%.H4hCXn>u!AjZB"Bl/aU-'^"&t.iO:`]aCTBcWt_Cr35PE_,t;m>ircD8p%A9kg^utfD'X2Eji6b0b&ahTjD6gQVn)1h]@(<)^7JuNQ5J=!$D\gT<:\eQWTm8s^f&3]EZrl^=V9N9;U3rUFn4>hl.>&#r\ZpP8O)eqqc;G%g32qghmkn@gYBKdE^[1G]Sd^4IDD$b3PiN1r]^q1W5G]4G*^"rdPdCq=RK='T3tLo!'<s9_<a70e?<e?Dfp1KR'q+I@3IEg.?/q5kQ0HmUPt6+?@=9AQ*$KYfj2Q".iPh;.`t#riIH=]9RUSH*Ik6N.95W\rrAX]4*_acbgEIH'Oh(m:2kV@XHh?(1*i%2-+7Td[T?VRI#/8>mFheBfUaR'e1>_:@^E\s/\]U@C5ukn<JeNPJp[1gBsnpS]q[^YD/O6[Bk6h##4+.P&"=I#5bsWRS!*Cmb&V2^qX+6*lpA:k`^Gtn7(1?\D3^E-?QqiS4*H2)B7bB+9<(OSFN\D;aqlKP^1J=:L*:QX#<Cje4B*i)Uf"Mh`GW8;\<:Bm/dVt30NL0Y2Okjah$#iF54,&RZ9o/TmN'uNZ/2MAQV]DhP$8/9)<c'AC0/m\rkG7@STM:<2uC@mjRV0_29_09g8r.2$!F+XaVigF*1RRc^uTQ6)p@J`Y%"iH[rd3f)/1]@#pg=t"@(c9Vn<h-?-agiJ^WM0Ya(*1@%hTp%Rq.Pa%j:t)>'hT6LK$G1u#8lJX,XF%%nfI5Lm5c-a.hn;!Zm+e'/ACW4'G?!/A3`aL:ip%<jomf#]=jJL9WiYp9GBN#_=W,`6Bp:=jPSD/>Ak#SM$ECD&ls.)F44E_*/%.gbZT@'EgFN(7p,M.-,uEdRHnh+GP2aVZQER3N=!Yp*:u`uL]L70u=Srr?D^8l\mYIK';n9t`F9j@F2BA@f=/g=G)C#8*8biK04">G+@^moj5Yh&5XH)`3^.G6l,]LL[SnL"h[Jor@WJDYNm([[X1#M51Q`45lD,<QEm4l;(aZ0nW;[k4$0p_(HuCZ94,W5"/hj[g2?td:dfBra(&Jk,YW=hmZ<se'kiW?[9,(nY.O$4h6t+h9Q7L`]Y;_T>I]KcAhpDWEDM*aCD]cGk[I_lPK^e1\.,#X$G678Qs.+S=TJjXV^7GWqW.UjZi]bDrk"/=1nP5O"()/l^NAR;>?8ppfXl[rrDj/FO0gC5FJXb`:/9SME5DKE?EEUh,SCQ9@]Hh^Om%cq#qI0=doR/;*Y:!;*Y;+2u`mK:c,r`o9]91l)U5errA45V>gPISA39Ke9?A&ni<s>%"H5<bihbXd[FmO:6N&ZGP3%8lLSWf!$W5GAoYFr-Q2="W_KEt$ad9qeebh-XKmVk.\e8J.G@F8%q44iC/&_-Rm>JtN>^f(=]JHk9+n-&$EpD_8Z8G$Q8Vf!11bpc)'1P[O-H835#O,edqC/_>j&(8h5J'FYEKUb:t2/0g,-%B.rtM#bdo:HgC'Rf+WnQk"SSR<<NWHAD.J0/5e_TGj^B]ZUS,n7&_j-QCaRi3.@<ZWDAl(gX8_A45>kT*cDb(4G8G+C,O,q/f+#Sb&?$!23Fj_5r#VZnReCUaqYpP%A4b?Dg@+Isrd#5RJ#Pr:XeJqO2jfb")n"E/Wg+Qb/E$HdNdL@mI8b$EH%4oT!6;R@no"?]>;Gll);Fq!]h0lSI6uBI;]%7D8K<:QqoiP4ERWu5V,3XV^,EH(I",ceQRs@9Z]OCV&m0"j$2KSk7qrZhYhQ2ohQOBDQ+p58RYAXc:Bdl#8hJ*sDOY,K5];lpkCP]>F7cNqZ?8l&iqc+PDeG4f*RbWILYZo03TP31dFE@-[!eS6p:c"SSmS#"[q?PtF.Ds'PZ(5?(C@JrVYr`_pi;Y&\1Y.eY7875,KU9L7J!lWaoTdJ(iXeJ<0m9ff1sPUQK$[nnSW-.hh?*HmFdN<j$/N'3\A5%BsG\J$"-t^mP7Ph=P6o=3eF7M54PN)kq<4p8GZY\.5rn5g0+FUH36]?*-lrt,P\lnXW"$JfCep6#g0j/QZ'q4J"^BLAI$k?`)Z4PBN]Olb@SaX\bUar\q=%cDLU)u3)-?W1+CLm"ZRn$#P+t^]c(U&D^U9M;^)Er2t0J*,bJnn)>sL7)_6!-kqGJ;2=(m=MuY/h<0>WlT(k/uN#MFLrkIEO+ZbKVg1\6trr<;d,2QVMI695g6=GIGNT>B+DH0f#]*RWW]t7/_8:PE'Mon+9O#M8(AiFPHqn1B#dqpDD\A+1G=k[Rj==2`=Ka<3;Z0J-DHIZN#h0E=FgRmjSGM50l0:0F:1UhN^a'P"YVtb]bEibPW]"ZpJ+/s#4;>Wf)6fi1BkOZ;FntZTVh`:E)VAm_30!8Zl[C9[t`+>aSA0dC?kRdaoHe+lp)r#)dRM<5qWO^ff.jks%*-)be*7PU8EkU;Io4`Mfb=p(UVNBnYMPYTWnWc>25tsh>ht>UOF;(3L-*?h(jllQ,T)Rs"FKjGoO^#=b,&B=]MVKi>Ii#4M0>-&OGgR8"T%qPQDWcVa@igXjcf%_<2$g@'$k$kai]ufSaP2p><VsCIIdaBs3!I$mAHZclNo&%@hGiO:?ju\Rb'<WZZn:kI5Kp9FM=9'hl1-Z*1t%g[=<0hWchR('rjfN/XcE_e!6Cq4J(G;1c"#U[a-?T(p!(7:Cj82D73+2`\<#cfAc*A0^F""dpP&S_q4hhb.'-1*U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?$RFFI^TP8oKk:cEAcl0jRoM%sL=gZ\cgXn+=JgQG5A)%>I&,(L2J*8P`rrCt3Y*ha8N.'cg]_fGgNY@sDbr@Y+I4a,tS*$/T$i<$)^[r;jrrDO*dXPm(Zi5R1J,TNgO(?"nIQun#eg:=r53;QhRCHt.Z%')B=oSIfD*S%#!R3"c?]./4/Z8UKi&RRc0BQW&q$5Isrr>7Epj\^=Br8/MZFj9=!'tB2r!,'.AGEA-K%;%=%VYQ/q3U.@61p(acaeKHk%gE"XInj?'n=S6_uB];bobU[.fTLA[>4_`RQZi5Abc9*OF:SFoBot@q3m&"emJ,8MSJ@,@K-=Xk)\kI'`S0[>/U@?!R2\-IkpqOa?Hj^q=cP[r66H\24a](ih-&T=F]6hU\b_D+7p>QrrBiU8$ZLG^E<"WX@rP@bOGN31ARf9U]#u-O895dJ)E>_rke1qr<98en/TjBQh)lNr.F;JrrA[3r'/E<Br7m0!+>Sordr]cp^V"&Y^B7H!'tBBr!,'*-2bsVrr=2<`4tKj^CTofRVAeZfH)C>!2-`\rV/4An;m@6rdr]cpYaHcQh)lNr.F;JrrA[3r'/E2Br7R'!/,^;^[r;HrrBe<PPu0O')qsY<lb4;)Ej8_Abc9*OF:SFoBot@q3)`#H2djc;uZjL2Z?\Epd[G>rr>>h+8bPAP5&P*El@LVX_!5bV[spAeKg^]fAlisQ$G4<Z^9YMB%M\8!9@#+5O4.)B"$uZM5S(QU=r_]XGm9u/>E3qqTc-:Ebi4f#e8<A?KiT,MCK'%MC>,!MC>,!\Xc+e8d:X^!+'^G!&7b:F5#K-WEs?uR[0Fi"h]pbd?,u,JHiQWdZ_;OO7G=$.S^;h?Hk^QgGIA]+5-WFrrA_+TDnnA`fKKT(B4B]>>P8!^gfm??d-8,ne]k'rr>7Epj\^CBr8-7!4.&Urr>?%5Q:]aN??iF/H5^C[\*R"JEDo'^R9O8j<%Kjr;2i>rasQR22hF"im7H/C&\2.%V\/5]N>+56#.#/#;gcRr6+X1!$M-V^ZXCe&+_\R1tG1j:Q#/PkUg6C!.a3qq]j'eoG4\2!5NYGZ<thj+7]rD9E'@_nG`JE=OTuUrr?SSX8[_%+8?=[5I(,drr>?#&,ZYhHR8U5nc&S3qS^/3gqOBk2%;CnDtZ,IJ*8Imrr@T3PPZ085P,_qrrBiU8$ZLG^E<"WX@rP@bOGN31IT\d;#\E'8,WUm5O]Z@Ipr,Irdr]Cp^V!29DOq7r^$46J'YZS+6HldL8b+P@<eRHK%;%=%VYjXnNZsUXFK^ZdHm4k0?=!ClOs3tT5siobd_AaWdeFOTDjGn5PP_%rkS%_r<99Pn%kdP0BQW&q$5Isrr>7Epj\]BdMf7f!!rT)M8/7+A,cOX%3P)#GaJD]ej&oedHm4k0?=!ClOs3tT5siobad-V6iR,lmtlPX.qASZILRCgNd-oiK!mo<i6gnXo.S/^KBj0M!2"<05Kn!-r-;*<!*n:S<mQEu!9@#+5O4.)B!Gq:a,&i6j)%uC%&H]A4mSum2##G*>>#cTOe>FFP[GE/.)ql2ds!,K;lleSdRinFlcd+4'N[<G'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!J,e1~>endstream
|
373 |
+
endobj
|
374 |
+
100 0 obj
|
375 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 475 /Length 33541 /Subtype /Image
|
376 |
+
/Type /XObject /Width 437 >>
|
377 |
+
stream
|
378 |
+
s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;gB"\a!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grVqS[qH3g<7)f5*\uuV=:OJ3fo*&G4d`VXAAUb4?`]E6#1todJj1QLPNY./T:HR^LL4<?ee0&B`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iU/:9g\C0)V9cMe]Y+J"C8^ng3o9("A#)T5O;ZBG+4VaV;#At_X-:]X!tl5K)WV96&M?UFsT2[+Bf*k85Bn<eHIrdr`$!1Br(.ZI_&rPha=8hSPT:XpD+<[[el*Zk=]TXDPsB`A'c_o(C((:X4d5@[Xf?ed<9dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iFr$EI+rrA_"^ZK5'2*[B)_=a6]cG&pfd9*%1R!<uWK%Br%RA9`p%hF0:>2Sp.HQ&O!ro!Xt+6R!W2X%5<pe3e5rr>?#J'?=?!""F9^Z[7fq3jI+:Z[(FI:eQ3YItls<[[el*Zk=]TXDPsB`A'c_o(C((:X4d*lb,K^UQJ68,:cnNOgVRrY#eQJ'_BVo/(s6@H$\O$X<UBO(2,a?ec`+U\sHH7bnf9rr<@\LVN%)Du#hdi@scqr<9>'!&I-MWVisf&$41XFn_YKMT#MpKYt^boG4q6bocGBG^KFAf)G`<UY+)q=8)sNB`A&nqpDlA@],-+#p`JE;V\Si!!Mk.C8+OhIO/I^;A8gDIXsp%<0e4q<U\SCSTN"F@2"_mD@JG*lmD)%F5"(+GH5)bKqV)H7H3n1IG8o4#HN>-b`+2=_tmu5A<tTr7)=2^L`)`W,kj/p_,g(li@>QU@9QY%*0.,=nkF$@hQ6N[Z\F<c-S5[QkuOdaC[PJplM?c@T4S$&5'Hr+pZ[1ERWSE[q=D)q!5Co!.ab%LO#-3Gnjfral1SKUl#6S%IY[\s9ner3qHNt"hm*.qB[]Zqca\!cYuK@YrrCB@+8>,OKd!\,rrAZ^5O[8)!"-#H^#dC>=\j/_@iQ)fN#/GnAE36S3B(KeirlO3_dR3X!'ZKohm*.pdpZnh!'ZKohm#k4rS)[(=\i`E+a0/qMeE4kf/WHqii5_Vfo8>TapX\!AX/'fgkFL7"usn1mbrE9%lJ)Z)mV8@V%n3PaLZ2(rrD61&,Z&LVT-s]I:3'T^LEe$QIAVT&R7`q8,)%F"deL9<G46oBf,]KX,1;p2c6WM8K]"W#6:9,X\GZml1kr2)c-;&KDth,6Xsj1!'[W:hm#Js/A[<?g]5J2`]V*/LASLDSD`GYPqMI#S`#Of-^d0rC>cDr7o;dkk!.\t$oU#9oBQY[q\7LjC&\/sY^bQ88)*E!&5=_G672cQ*_#6:3!:3B]nr[h<4;[/p<uYK1.NaL"3:M,.'8RAqq1fqV)B[b/aQ)GXZu""+8ba\VTRBeI:<-U^LF8_BrU6CbN+^n\[&XC!2!qSn(=Eo<kn7n&,lA?@+.gica\!cZ!>u9rrCBP5POMC9qAKcqa:A`I`5DGdml4^*0KSQD!c`8g)p4M<D*U,MoV,I>\KP5QTJ.TeqpCbJ+>d*J(Ld:d^>hsg[ouXc\[TYNL/@+RG6+X'nOjLM6H7F!82g,SXa&$eLl)ugjeN^kbJ(M,At&!%mq<2S&AB'Tr/\7&9Gr$\"N@.[4''u93WD/jY(cgG&hs'dcI#=_f8h\QWf]uh+m"mSp;#(+7-.V!WIKt;!I[\oB1&l!.L:4.`nJD&ud<A[Tk5t&`lQ`FSd`eo=+`"^J"P?e#1lKc^hiLqB+ZsNAT)GIEU]4@^3/CrrAZaJ,Aq(_O>9l^ZX#Uqt<7kXI?,eh^4n)f.oiAMQEka+dOFA.)=0.'IP6oKd@#%g<fr*Zi:#t83cRqrr<C?Yd=?0T1D38f`(pY<PF1T/`B$'c\85d?b060O8YSt[#(_a8s;geg^]G/c"2tJR-VAU58o"G^N\`^Yd=?0T1D38fVY,W5Par(rr%_EaFZj>\qaZq/pSRL-Q^q_R&[K!XB1;\$a`=Mb9JnJC-$"ncfAb7:LIoFF=FK$rrAZn5O[7#2E$'VlNdCc'dMMLS+fVqlqm/:")=@aT0^<Vf[OO,fBlpVqb04flfEDEJ*#7>bUlW3BsG&F!2!@Xn(=M,)c-;&KDth,K'upmCrc!_@,8IB_(+jU[aK/eJEK+`5*\6ser`HBP$L>8bE"6D5Qg2H%siDujt:CMCJ=pi<hK!L#Q=N6dq*7n!'[Xe!8k%S4nYYXD7I0/-K*lT!qji"r=A!Xf65aB4R7fto*uF\L"q*_esF/65Mc,D2HHIAlOWsk'Sac^rdCL?!5E!9[a^;RfeZ"#DVu/,h4-A(gXFOBp,-s>/pOu^O0b:f;-_dXrrCBP5POMC9qAKcqa:A`I`5DGL6j^a=!W,-c(2'9qa:A`I`4.sgA_0!Zp4<#Ws5#+k'b.14cD$*><s:+ZQp-`$b3E@!'beC)SGg_?h*5rrr?D'J*9nr<NOqsUOM\(0W(#:4*Fu0;+24NdM5t`rrA-lhu.PEr<1Z>Xf27"a>35`\A/#pC8:;CBCN5X_B8=sl(@XeIkt:UZ+M7[!$[_srr?:oo/3ggX+(agXNq@R(j[jV6VTD7RVO]f%5cM%6U1olL9C`H=tTE[/%Sl#j@!7(P#QrlX2^TB`S'%777o0cWR"4M,hdF8"?%0_;Tic"C%eUR0j'Qg!&Ctn^'B+&7BMu#CIr#p#U6^C1Q2=0Zt2]jMLR+gBan:Hfpl_EIN?!]Qo6j(;7<"uQG-J+h7hoiOZ1EaN#_CZ@ur\klF\fHVd!@Cm1s41SK&,o6loJrG@r;kS\l^cmZ%`uL9'*5gYE#L(@b'4j[=nD#Lm@f<c.-/+lSSjld^L#?+V=/6F;!cg>YYR+5+*M.i`1HH"#u!X[/iK[oUu3,j+?FY3\/^6t[u=7L&ISk6Jb"EErmJRSL5ZIUeBV.7IT^pi?Yfdd"so6M=c"5@KH*coV0nPT8j6"<<B\5Big#/p-o"[FYJsVH^.t-R15?Pu5kGQl`Z@Br76*Q0o"j*aW(8rr<,XW.paT9f1Ek5_b_A9d-/6RR9\]VLT6.)aF-?/3iIO?g1Wd;R6<&On-Eh]k+=Emen6gF(0S8rr@p@RG:Y.'oC?RbkQ8Y6[g9[!3a6=!2.q<>gJ0ij>Z'_qYVH3%;eo!T;)82c!0tMrEnX2Lso'IUc""W1t!:@9f)j)W+qDcEG11AmU:);OcVb,Po-.7)SBd]S6_]-PZ4C:qOI33:"d4K#eir!B5isU\:3hA.IuN&"^$f;+Ej\b9"VUB\rK4j8K,TA<&:mC#2h4e)M15p;iH$D>qr4FeQ7o'%grU1G%AI./p3O6A[-T,UUHEoGn?._d@Q4k+"?CK;riUk@G0[RL?dDZ`!h>J=Q'$d3W,pGdnN=sOeSY`hcp)POitY<?gij6:eZlmSF7QbPA\k<SVN:&BPI2VRZs.2U+&KGHEuKlQ&B:B#sC68`cKTV4aJ0.dMgU#'#!Xj^8V7:RkYA*n`_g'_3r$mDFssci*:1?k8>`S;u'?Fm4RP6>I`8J,aRF:MD$6\*0NVE#f4dr%rV'MBr7_-C#6hA4Bf/M:Vb,Ye''a^Ul-WPTn-@f@S3!B$1HDc^s,if[(E_tfZ@^uQ8UJP\o1s3Z@e\.nd]rbId]X.`gUT7damCMGhH;trr<]Rdb85i7^eI,<jdTCVm'SNc+3%6b^V+n1o?^V-T<Dr>rl^-bPKZ()JQ$)do'j&VODM%RK1Cu(]8P_rrC[#?htL`'m\tu^Z3Jork>-,!77dnlY1hU5-OT=WW)r>IZ*k+.&*t-6E=icndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1QAGA[o74g=p\<#cfAC`\mJ)jMV5O4.)B!tE6DrOF?RGko5%n6:'1kq7GA]\QS%>&kg";]J#`GuZsBRh?1K7M4uetsqb`fl`=^Sg4-)JQ8l32DFVT[Z^4>g+'(;0#?/2UY@I)s#oi0GKIgU<Y/<mPRY*DD'.VF*t]5godZK8hnD!+S*a%rr<D89l$s*Z&5X=SZVa&I`C?B29k@:EF6B0;X,IfXs7/GjP:j(&q4@"V^_`%O/]"q&VEb9.<0NBrm25<m\Fj,?%p9+&beaNl(:mRkh4Y'hh`isbdinbc0s<L%5cXRT[tcp7h)i;,^V%nR6N*I`Y=R&PPWd4Bb=YH1*uQKR*0<UT?UF;J6>WB0M(j%d\GLm\%/EEp\AW?RVAk:EM*11'lI8JE`JmDQcjRo</2@H]tcdX<==JlM@2u:9@B![OH:d6-M%)44%nuZq11bWVE$Kn9'JF$3rH+\D>eYLp$t-g9f7J1e%?'+A=aL$pqqq6h(2).[aNhkP.Vd+*+77YQ>8.^>/`UX#Ec;^@dOu!jVsDHE!G`YI4>%0HXHX%9+\4PC&\/7k0^&pajdHl`MPk`/_f`_"Y9;$/orLo'oC#Q39gasR]p%FMW&ESn#b\55NCnlH"!:2SaEfE,<U)iPa+)UmSg/4/m_kNr;=3e@n:AU7#u2-Deo'VY#f*MXsVr?8`Zp`\q%[Yi/Z>oi_M2DGbZ)FasFM+%$QkO>!P8Qgj\uBmrn(m;S0?YG`+*,U\ldBhF@%4R`1[4/6u9qqebr?K["U@OC_73OR-&#F476n=M0V\lt\H("OK4Ao!:(_<,feD);KT4ifg7OPcHn!YNarccns3OFJjC@CDV/+G.3F:1!(]>jOL#.a]Yud$$/O.\;$tcJ&qForr?B2rr>[$C7U^hO-Um\lS%n4B^Yg@jC*o?A,[nUB5p?S<[UF>1#_$c%JZ"`^Baaj>s36M*WH,$hh_:4lgTDf275Z#IZ*ef2/hL'om`/d,>C"lRVNS46VTD7OO+)(+flB<mX6hD-b,D1q97!fQ$/*Wl4k/.QPa$0*!=YI%I1n[LU@FtQViWU8ED"*\o@1!5en#7o6)?)]%5`]>@4ARlapKZ0E$B-k&a(]CBmpVHOG'Tp!dNY(GZa^c#gpi<+OsYZe&m1H^]uS7+CjE4[E_OA9f;SbSO$Tbc7g"X9%V(4b$'=/#<"qG`+L"C6ePm]T.Nj)U>]s,?MFa=X@aEg(m\O<dm]bPEmKjIRDP^!I&U$O8b>*$ZU24NZ%c*&+<UI)^Bk6(s)+/9A/XGokTfX1q)"C_:[U$doH&9,F6Fi2jKUC?f)j5+c%9<JdD99eJF(GY:mB@:Cl.3;D0XhTmf8]a;d,i7l_YC8qsH3Kt<l@BjUf>nE-FAR`j/4k.8.q,p[c%2U[ua_Qt+=@")IEXQ(S4>[&F)mD>1&,q\NnBB>We,k"ug%KOh(Q"l5jS,TO22i(_=8T4TBI]#_NVR%CXO&3-</]:1sk9_Y>hUrD\13YWP-QJWY<,Z?5Y22D8R8E/l4Lc^d`I?(D!:F)$guBTCBjL2i'!KH]DRTHrrFg,<Brl"mb1OL-qV<F/+kB;`0#PhQpQ`k?5iY#=<-P31/@Bh8\<s?UU1iH.D<TVi2eOKW!Ta"IVQ!kS5O.qI?)64^eZ[W[1kq7D9k&2MBr7-C)?@hJ(]8P_rrC[#?htL`*I6h(J)e]/rk>-,!77dnlY1hU5-OT=WW)r>IZ*k+.&*t-6E=icndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1QA9^WD74gIt\<#cfACj!'46o<(Y+2V:!j]ds%"f\`f"oie^ZY1Frr0+res3!.UpTF2E79lQL:nDa:26<MNr#TSil\8EN_%h1B5hmhK:W>s4!+%cW*+Vrh7rpd+6-'VKqJ;A_>aLb#Pcka8SjA3i?`*WU!g%0k?4R>pSN*<Q.])!G,Z`?huu.-D5:=bUWB"EP)[NE?ka.!=,rf!Bua&VrrA\$5O[P1!#fRdZi:#t\3KH?rr<s]SaWM?Um74#aTQWY'Wej.,'Fsd)&P4IfWDm4-*`7CA7fF@PEO-lT?NKb^U*q?T=@,Si1r=*J+NC>rVR@5A%b)N.(%/g"Ii9DaL`G8.nE;/AViD?W7Jd9_p)g1R;bXCp5=\gB9B^l+F=.CV`4=!oCiLgr"RV0BE%rr:k.B=:@mdlD+g^lgdN3(gc@UcZk9Yu^*=?Yr0:h=j]Ac1?G=rHYfA94m^["<H5uQ=9'>bTq9r(2Vu6KZrr@NP1uDJdcdX'2n5=YcfVIGjS%m`:CE$uH^1:C<G44LNQ0:`3*i#<uPh>=SU:69d(?jl+RH?5Er*tm]-]_GN^9mn?T;Y!Ci1r<_TC_^drVR@Vqe@e??MY3R.aZq_-"SLd8M*#ib+,UR3>amJBO*[T,*FM&kpA/2\<6W0_.%EZ<2TB<rdLR@!5F,SDf%`%jraKq.Ggti\S1\DJK!e(W>(JJAeJU#4H.L(e)i#?G3=aAl#rXdOVEn6$F;ITbEAbRo4N7MEQq)RULWG3?Ym4C0tV@m\]:j/dZiVBrrCBh5POYEHCeQg9="I$:75p+GZ``^3EA60A7>n9JdH7RI48X2NnIr$itAlBR4C+LgE`;N4Yokm[_MG*&,lD?L@WsqIUW6V^;Uneo[IV4PIe!Q4+FP<gY6W'jMnIm`\W1)ih\LE]X@b>T9t,sYt[0Cht-FMrUq^EPBU]:-q.8o;cN+5jF"33!3]OTV+beZ^ZXSuqs7="2JArWh2dmH4tU<jecuql(pr1qr/<?cMc$hX9Ck6f.&*q,K"6pPrrC,Y`..IT5P,lYl]TVtXl.gD7'b,QCi7),\-EsgC.dud]._DKeXBJehn/fSdi(SRcCnhL!'ceL!;H/9`fTI$?h=#1rr@NRpsshrZ+iDJPF?3a%\[J6!'bFPhnf:Ke#6FL!70FBp[EZl*3ZSfa15A*.7L>(pC_b-DBtf0*pD99Z#!r/E]4SmN]U3m9se+RXMdNE0OZAB@UF)jb7g%Yh`7U(q`joRKDti\nYA,;J+NC>rVRbt<8C("bsml_5KJoQ-KB%58o3=UiQcF>[>hF]6QaJAXMf!@Hk8UAe0"\j>pAQW&oQBNCth_9gFA^86dJpFrLa#d_>aLb"YY8#l1M:8Wsa9`=-[#ON!GADNNq`5+Hc%gaeme)0glVK=G@L3OeXBfnt[1ghc]sZcdX'2n5E'SVu6KZrr@NP$-dZ-<1VdPU^WSJMNCqD>;Q]%o$V\J%Sh6Sg%EX;e5s4dHA!T?*_jg#<bU<Hn]htk]lTbNkYFgXDll7el4<de.1PsJr;Aq]!.P/MF&(t7-Q6iBak_-eA^,qBb:?,d*CeE'8C<rRAOnfSW2.l/,ZmOX,P"g0ISA'*!95:R7X>QYPqg"[rrA[iJ+)<mS(ga7qM5(L$;&`O>]!Acg[HG93n`GO-PDOZ,ok/+`d7RYh>5SB9=/@WLL[?ZR1uI"Xgirhg^Zol4mHO(C&\/t;#^OQ_+cks^[q%-rVR@9VjP#/G$fe.BpR!N`5^_gPK[&d1)<p,*&d0U-]I)SNoNi'dr'!hLks?Q>"8b<aMB5O,idD)K6qD6!'`1;!8kU`Df(!ejraKq.-@Mk%Q%@tKVk2Q,C+))!'`1;!8h7SD_6J%jraKe<:[cCSFQ#@Br7U`QG<%_&,l2NVXiL@INe^k^;V(qY]IjqS`1ado=+`"YGf5..eH@)D0k=N/T$b"NL8NjJ/AsoX3tcdVQ!&`hrnKCVd=Q5^JLY^.g)RrY)=QANWE/`&:9:W'EO'j!!n(0^ZZ>Lq&2KV&+K>l!c@r;,?o7j^=oLV5J5&%e:3U/aMe)YKKmB3oEi#)N?@YFpj<!k2ZEc>Xh#qSeN]K#iUpqMaM-_EJ&3;dn+m1Ar^MtD6i9+I!'m$'aO]/]HYT1srp]cl+66dL0gFV-nFuk_D>sS\8,OP0*rc559u#b)DMgTb:Zd.OI9M^&0=_pln;$dcrdd!-!0O&U&H;_@J']P"nhmmF*nmO`5J01^8,3tVN)049r&t&[5b!8EdJj1PIttf&'6![bgS0aG;u*'B+',07Msa%^r#u%\rrA]d^Z9).!/*SSht.5ar/GR@8%,DpcgMCF;>s#Y,8:%frr<RZcmIZ@1k3@aiU?UGg\s[NkbHm3rb(t\eYrKJ,5[MElMghooF4:F)gb-BY@@=#\VY?'q@u+JT'CY!*"bt:dkiS5[aK;8%arg.M0Bfg-9Hl#H'&cjI7I9b#I-G2B59O[VRL6Cgi#b/D__]VNnIg%FEDE@oHPK1#o((\:Zd.OI9qj/$gpGjpd=sBrr><RJ&p%;!!n(0^ZZ>Lq&4lZeul,.dm`d2`4^PV>I7\@?@XiPpLFB+IOgQ0U8RCYIl$u>lI:<GIE9A,!/*SSht.5ar/DffL\Q5qJN!N.Ofc2Cp=2BqrSdEa5KLS"@Xl6:iU?UGg\s[D=SR56dr%UnSV/]@!?9O0K3E@pF_WdH-hiU/ksaDsIE3h2MTjR#-Ki8b-0<@;(E.*&9d.]l"-RG'MQ"fteh4m9S0k?aEteNarr<RZcmIZ@1k3@aiU?UGg\s[Nkc=F-5FMK2I9M^&0=_pln;$dcrdd!-!0O&U&H;_@J']P"nhmmIbc%A*KhsNr2ulhCWdci%_s5a$OaY<irr@^:_r((m\,;5,(HNV&iX<jbh$6`-$WpZ1k,PJDKQW:pnB]ar._b(sXS3Mp1NO"YZ<MQu*(tO0XI%eC&aHXp13IJma3@mIXf]9rUfOpc`s'+J&ieoWWh=G6;YJX*RJl+;C-TeRjC-be'>kSda_qBG!0%0eE_6!NS<A:p:]CD#Ittf&'6![bgS0C*UAIaT#D]&0g_\b):\[<T4oYLIRt&N,rr<=SLVN$dDtt=+U7\lnr6OgBX&8jbpEL@N&H;_@J']P"nhbj5+5u\b"P`oF[cjL@<;pP)LXi@'!$_<&M>mP]Ittf&'6![b5N*.Bp\b/1rr=9JFA_G*Il$u>lI:<GIE9A,!/*SSht.5ar/DffL\Q5qJN!N.Ofc2Cp=2BqrSdEa5KLS"@Xl6:iU?UGg\s['pd=sBrr><RJ&p3s'ROSebl7,.[3+I:E\Tf;&+K>l!c@r;,=hYTrZ;(>TM<2^CMo"m[85q7G^WbVnh7NjTC@X2HiARSrrA1VrXf)0%tDqQhsrY673:0\o09lOX[i1'gl,5%Q@U$5l)!-h;@"Bd%;es27&MJ]:?B?_+n-bj!fAD*/1@6M!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=SJ24]':6B2kpo7)/b&4W.G5+&@/>b.Us-?G+jbpR%9d9P<$-MhBQqs#9u$IjRBEM`[8cb?+Q!._1TI9s,JZOa1brcE7h=#L!X$-&>3!'^77rW9JLn=43Bo>=E)!5MX1lLfXlLXt[=3]=B/1='(,P03V5/.[AlOAq6-.3,Aja<Qd^R(;_rf7PXB,4Q)D4e-LR>&'!\enn;Q;e(NFN!AMFc,%$l!"$Z3rr>/=&,ZTGiV[h,UA3FX=4OrVA4XLn38L^_]0puE@ZRS?r`1+FU&=-C]G9F>HsbhQ5?`t[]^aul;thOW1B(\AfS\Ri$M[f6rr<S5oaO+Q8[!5?TI#IdXkYaRN\XFk2\*>FmY^ZJpeGq7q;J9%i%%[tHG@VCosu6jNg>RbJ)NE9^ZU=N!<*&-+7Pfb?h;/7!<3$">*#`7r`1\Sd/J-/e5nI+!"$r9rr>0"rrDO'W;cjNlUq0WSi?ZLp^5N!?E`q(qV;\F7nlEn5Ob4X?h;;;!<3$">*&GR[%I0SJ,]M!X[gq,rr=P[XjI&hFOXAJrr<AVPQ(VFDuTh,'r_-4K^VM4!1l.L!;HoNI9s,JYkm/dk=';,GkT%l3jsZLF!OB3Q.F&\7_jlm0O14,0j_Q"ktbD6Htl\d\E1-fk?.,D.4+uoUI[GI?A[4IMZ`')1#d*\h>$`b(L#CpI6O92(e8?M<mN=t'(kfr-^O%:=P'MH@oh!)0rGCI^@;u35JMXg;E]eC4fJ4j?fbeoh%/[=TW5"?<D]]j!!.TR/TW$'S`q6fb5;2=!Lf)E:@sVCjaI./JB^U7lMgi7(Y7f"3]_R;R/[/>o18l]SlahE%+KdDH),r9/+<B?C-Jh&q,i&_L\%:=U:H?[:Ge..jaI./JB_:Z7^$U0fSdp.jq>X!A\lHePo>cdP0g^J.9(]!P&.g#'NSh^72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!>h=g^j>Z&DqYWSS%<T#&Gan\"?6&tFYJ^A?T[qUV5El#5c&;Q;c$j?ibr!k;Brk'l%5cOn1sc:BBr*Z85R;)$PgUHMBr!S_RV2^21t%h,TEI*+Pg`>,+f:],9f)j)RVBd1BE8Q!d[FmC">nS"Bak&!e,0IN!$_'-p%L-=KhO?'!!3*"aLru"IEVWjTiTS?'YRT5F&2T#oRER`d7"e,dM,PI!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#<b'S,Pc]*<-#B_uB_0f1TB#M8/+/iQqAu5Pbh+6f[u,adh"uiI'8>NeGh!;b]-+dNPKV;b1R&VNB5pBqPrbIhQ$RV;KAgQ:lW,\5\$U!0W;W!F4fL#M2(<]A5q\=_']aVVXJ58\C]s0q>L/?qB%4<#cn@4TjS7h4rh@rce9fq>UH-g\6*HB'Gn,]CEpVTrRm,C3&,d95f[=!N!4;4@a9Q7OR:<qK40J>q=SgCSKGQ397=O3bn#o]AN64:T[+i[n:LT>!#adGu[pT%AC,MaV\o7$**jIYh#+Ain>:(=<V-c78gBSgob[Cm!&bfc!$`5o<!.;I-c9rG<:99@T`SSqml+FX6LTkpIT]O(Q/DtX,0-#H-XdI#9t2g#f5cZPWb;^rrB19i/X_Ej_918J+*[P7A61F8fgm>9+2E,NQ3au@!(g=jI./mM.;MCRc)?[q&W(,hQO;p%lic6k8]@jhMWE,\FUUs10gru#pKkZ6u&)=Idk-:SUIh5^5sqc[L<K'g_n8NDBhJACm`"#II-$Ye+-kW[JKn'^`W%@Xjd7[q$tpC-+;8<j]1>j2A!u\bQCD0QNJHl,]WTX+'=C[-$a@q,EaC5=q[LCcG<J=&dTcV4cNUoD&W,l^loU>H8olUYZ8S_r$nDgjd42SioOKjOqoU2m81(%n=X=dcT1Gd50oSPn,?\`7mCacq)5^JqYpQ2'^C5j@m!XXji&27CnS4>SNt?&"HoM^hlf!O?"u/cp*UX-&Xb7FD[BDp_om'TJk&WIF5*;Z2:e3KB"3rF<6H7R\6lbn]/X_X=E3`s8(f8PXe+P2*T3=,njTns;3Mj=a55*^Br=aVlYlA!WpTdkrrC-@2R+BffjV1WRHJ6pN9gt+7UI.>)*Ao"N+]jT:tC$JCkcSo)hgjXaLFS,mSJ;)*XKj5)*LJn^1o%=A]e:)2!*'SfL&2D9f1F5_A[-b1t+\qC/4m1!6Di$rI%?=!23A(V!oK(Mpd+,eA(hpD'._0eUFDQrrA)j8,=5h'N%u'+[m)A!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!F465^Z792chdQ(q@.PSc$5`W6XCc4!3a<?!2.om5!P8/RE^Zh(X7DBkRBAtNAT368;<RI9f12u)Pa7dblG51he/L"09iR]-!02?,_/@/;oV<eX/;Q$[>+5o.Wm;Q$o#Xk,G>6\&%JWt8a9!uEO9pDXQI$R;NW=][$#0X*6),\JS5<Kcher>O?T<UI[dHEhcsA?Ko?fjO9M_bjU;b.ObVH40uc3u)6F`4X".YV.#9'W3$m7<ns^"":FC'#rHcj,Rqi2JSJjPn,_bh,U6F)\cI(/6*U@E=VXLEMRM;dAg@`5Brr<2*Wl9$(^gfst[p@j,<qCT3:E*&L3$1's*CWki<A6^Q%BE1B?SaH3"I$--?j`/o8He'!p?I"jh-%X>\'5NeRG-'2dBLr'<.ih&0;_o1]Pr-b&gBpbh3!qnUbEq_hk"Rm3*@[F3cuF3LL9fuf&[%a2%-=fMC@J8k)*f5cP,iRPsGaLS/p;!`rpi:HB%%-[t67W4,5TsG#HCDVq>rD%j[*T_"FfHm&f5[SIgO4)%`)ZJA`5gH-&m'C+2!_8Knb6fg<d..7kCZ1D3fE#9tLc1JaS_^TE"D#ICJgqU>EShIgNr1BS)uXFIp!aW.HY)/$tpe)rrl.d@i%2\<k3g!I:?h!U-R&]t])!?&s@oDTJGq]a-iNYI>4+tUjtb0!e*bAn)38a2[c)L\`cQfLTAb7:NC'7fEe^G5s*SMo4q?hf-G"NH^+PZuU3^7JY,mjQ5T?/1?_@e(bRF"hfL/;))nLBA[i8FO?p3c3*mG$]"D"JSI"KR)>C].Y&u;_KuhCNW9p:pS6l%F[FP/4jY=nhO"i[6IBlqZVXrq-8NqG4Ys*YliaL;fH^)^\Rm0^abeOWdEK)r4h0S/bNgg^:0)i,`^fJ;]HE"W<ujd)s))1SsZHuH]+hEr?WdEZnoS(TKkjf&afdlo8olS_=aoI[$rHjN`;!j6qN=T=G4a?jTOKM'>WUjf1WHUA2$EpZ$)cq1Bei8OpBssW`:M$Uqa$]i"6l-\W`4\H+u$'A[>)fVNBCifHI,\;b](KL8FA]r/9!Qf@7S3'gcYR!WN/@]dNc,9E,!c<mgm\]iXK?:\aGOJ"b?=72:[-'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!(!Uumr^1!3rrB7?rrA_D93eBR/toT#F:4"`"E;D)90)2?g=m+@;TmDWB/V?<8[mN)B^&5Jei3LQhB2atTWPukBb--/&,HXfraqM%WVisf0C(HESUK_S1kr8rMf]L+$=!LAOSH.JrrA^g^ZK5'2*[B)_=a6]cG&pe)JQ9oilq`-JrkFnOSH"GrrA^f+.8nVeG`PD#M*Sg!':#)Y%\>U*u4!HoFllK1t1Hd$iY`sIV+XN;u'eU+'GB:lgI<RVOGUj.a\1qkU-VtBts/%k^W4;KC^pH)P>1Oi;1\?k?iNmNAT3fr$<7/r</ekl(@I0k[fYO!,:3K%$?ub`i&CB\3@5hq:FJ_F%nNVHr$Jdcq4hoS,WHp5)]F@5o;gB:Y=1r=8)sNB`A&nqpDEXVR$4%i?ls%kT^W$9g0lN^ZZmQk=;eVr3,N!XO7#ipS1R5)Tt;jdD+li&*HK28Y^d^66FL6@oN21g`K[or9Nf@RAQFs4s\PU!9bR:k=P[R#p,0-!'pm?3^&HujaV5tArlPe]c'A/CGbgE8H/[_KKl"NnJ78e!'fuPFF+pub5U>qboc+UH8LUUi%OmBV#LFuWIOOi`BGHn5Ni"fcF,nY]#ip>FZEL5P_8@l^.CeY\WsR0WJde`f7tW8dI$KcROFo@cG603-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig4-Jf2?;73$i"%\VkRW@4DX^?';"lQ>ro\,QHC9E#WTB3>06c^hiLqHr`m1f\T\jRPgG>PgJ%rd=,5!:SA9!/2NJej&chDuTfdQi&>X'QZIsaWAE>m->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*\tqhHGD'u.)VJ*5,7rr"MF;>m%qrr>6+rrDfXJ&8;77l0QQOmH-JcE[BLT0%Q"oY9?Tp2uGoq:koLhkg>Q$F</@ca\!cZ!7)da8UJRrrDN9rr@a\>$+q"L`4//Oq"0ZYon=%!1@a)!5MZ5>lC;mPW`[Y_,_ZS2XZnfmMqAUC]=BI=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e_NEmMqAU<rUCLrrAZQJ,AlQiCETaO8Sh.rrCrQrr<D473'X`E_!B=q`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*F$AR)*lW'alQ>ro\,QHC9E#WTB3>06c^hiLqHr`m1f;KoLEq3]^U("kkK_uar@dqCrLIHu!'YT+!;G`-_Q;-T1[Z6FlrO,2Z2Xfr4+I/"^Yr*['QBqjUIa#6Wjic>.5p&C;+kF6;+2X^'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'NR]8Y5\K2rK1.+CUn>Yo$TLRc>ci$\\;2677r]?*bfG+d9P<$,hemh$MoPVoX'+b9r\-md''Bthb.."$2K#8r60W!9@*$UjE.b11]IF]5,J8Z6H5`!!.?F@n<<-EoIO`!pX7IU-ft*+o+.tOoD>0U*AnSUrrBo5W;ckEZ)E0091f-`#tC]i!(+]!rr@I!*l<A5HN*t!qV<eh\c2Yle'VF@r$=Cbr<kZArUdIH_H!Oad'K[#hb-JDT9nELbW`L/cgH;DFS&Wfrr<@+U&P*Zc2ReBoX'+b=+C5M6I#N1rUdID$2K#8r57iB]`.*n7b4n]GBorhgXodhXlI?IM:_`0ajj1sc8%J?MXW8+Gl,K%0DL5:Nada[l=cp#eL-1ZFcP;?B#]'^hJ#p?S7<<#J+/`\rrCERJ,]Ls/TSEKR*e$1Y5".j%:=D7W)&U,4Ke.6pQu.L8j.k*^@hJ6ot"IZF8l4be>TNSrY!uSqA-:7!:QbZrY!uSqA/Q"!:QbZfMB]Z?fiG7V<@S;niE3iQ2^i;](c2X]Dhm.l"L(sKY$pWKtI?bqrqef'Cu%Pq1mPcH2Z(eNiIuuJ)N&orrAa1rrE&p>#4oe00eZ*^]+;JQB,H=0>2k&I;YCDh#@AqlKGBLrY#[cqA1g"n"lfY'-"^_(GEPlV5)[=bO8g#+'YT)pHS40\gs!E!//A\re8Paqrqeo!//M\re9+qqrqef'Cu%Pq1mPcH2Z(eNj=Q'rrD"5])Mc(G5M:8>1q8FPh1#nHB:5kHQbmAJgj<NijkZ;W2O/Sc<R@7kh"s2d7"e4\5>[/!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!*;&;?hk0+F8iobre"K.F'^3n!0Gff5O7h=!9c;J&!,fO!%)brrr@cE?^a#39f/`9CD3L29f/`/ciP,"V)6Xd#\g0#dM`+"Ubns;BE8Q!d[FmC">nS&1t+\qBr7-D9`Q?6RSuaj!N(t,RVADt1t,'2VLT6,r!36%,4qN#pFlN"9JlbL!WN/@]dNc,9E,!c<mgm\]iXK?:\aGOJ"b?=72:[-'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!(!Uumr^1!3rrB7?rrA_D93g)*^Z792chdQ(q@.:/j7tp]SCkU8I+RM@K[Ld4Vo\=TX"1e;V:)@FF0p3I*"P>u:Z?.R_Y3*Pe#m97D=@5p8?D]`gnmBIQ6EbCF;oN9.Xdf<qWW%VA?G%oFuN,PeeB%Qe8S\dI#*gm]?Y8H/rmPiJAdQ0[RN?)dAd-GBT48VL:);$c)HXkXJuf$S/d`Tduf]f5@j2G(Y0hRjHdsNfqt4X\CGK`'(ISB;bIJ7aO%rL&")GY/!`:4mF5*"gDAktE["PL-%R;,95.d(o-=T2fB4C.'@_FY<+P_%^T3"*_.`iKX'bdm]P47Ag"]jPgP\/%L#+6<Q!P^a#\([g,k;9`rTc+C\\+P/et[c2YZnp5a;mib-8<AjS.#TBN_cK"dV`=!*:##jT&'DH&,9Y-1t,Qng==D+[kV+(cF1\Z7^fVDAL0]O1An2h*HTQ"WMdMBMcK=Q7hrRV<%eW`P;rOqG,`S+!]e<75@Yjb@M`gd\+TJ6L72m><k+IPD)n=^AM%q&U5=CQ4K/fN+E[\THW:r+C#HP:RI-o1A/=Hlb!UR&,`B/8/a_#N\*6:p3@h<!>6M"H/Z7(qY&9\BXAA5!d;(HK.nGi?M'SD86BC7g;Du!E*h]+"ksa_5V.sn&lW4jfX)fHTQuC*1jTBMC#W_(>h!k9$^TZtI?Wi)drH8,?->],<=VL(E<_IVF$P\alYqgSqf_shE!00Xe*P2)GA(5Fgg?WPZ=^p#\rll]SJN,kEE_:jX#G*Ak)-[%?fCc*AYm]<ir'1!5>glDD\(!q$%(!947%4^ND'n1\Sl5fZnb2XWj/U)s\\IOZmIS'6p2;d#Vr$1"]D25!W6*r<-&@4PGMM%3dokj1Qg>cBeDKuG,8`DpkP9S?EVe6\]N=>K&uEjYaZ]:;ln-sF\';qQ^ZJCR#AuQ^QPqeW[qcX>6;8l/hd=,cV)6Y(rr?iG2`Jd"\m*mshjb6^pM/KlIS^Dp_;_JlYp=0FS34b`GF_@\aVP>DO.5T\*/[@IT#Ef[(?WH449tld,4qN#oe6;u=Q\pGMW@,KgWIcX,fm6BUp?6dGpeZBYO\ao!"SE89ciFDGf`U5D4hH`P'Vc8N^"-0ZqtLrT;Us`lD\58]V"D2'N%;?*MGn9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]XhQM8/+/iQqAu5Pbh2[EWrcr^1!3rrB7?rrA_Ce36*\r0bffrYNh.B[^fJeD@mk2[_.GG1gp\X"XMT:c?e>J^^,e6)@^g>l!nX6h@Z$@]>s2<1GRhJ?-\YCHd#\F)P\!hT2GrQ"OqY4E3),KeW'RJ>]Dt`.0fe$k=_kkr)AV@T_EZFF5pJfI4S&)*@mh6,d.edmlO4LU2bH<gLn^B:7h:3LVg_9U#&tP!I(<O69?:QY@FN2Fuc;3AO:rEfIVT@SQqAa%EpW%33ga%\-k6+V7,P05qa%Y)81k4K=Q0rrC*/o;\.G4cT>#>XH]t0%UIU-un!\"9X\&oW.,CBMt";9QGesXOY]nj%ZqlR*-[;nc3Ni15?p0!<KqTdS$KAbAo3U(q<u+o,DCPd$;l_(`_SD>;Xf!4M-O)_=U,n_]5in]&fW6k]>,</"aqEk>BE8D_&uY6l=.+)s=ea80=<CcE%puV04d3pI-sgD,CXWOb%UpA<ks3>B9:+3!=?f:7BJbIm;/<GFoG$:.X/mG95Xe\pDnZ9f2\-gg88A[>6-9\!?&h,7J-PNUtsl,S/.Z6Fq<F73l;P@4!oLQ.`\.@>W(GC`9ftVN,A7#7/"Z6#UNRWYC:\%,7/U(+acBP"@eAj\.RUrr?U,0:2R+@r>)oY?^8(=>\K"RI>.d7b4h9oW'p?c"NKRQmKe?gI$UagN/>7H;_jnD"*7<0Ms&e$HU@W0dMiHaSX$LX%&3"kEg18."<]h2ULH&@g#PJ-p37[6N7$."[NonCCIpdUGM6kk"-Hi;iHd)Si@I(dnL0i>sZqlGA,+*dYrB%/BJg6P$n^']UP.I:YtuDJV>+"CKKKn]MW?`b)(rrk!`l-P!ZFhrD2Qi%8Gb6q%ok,!3`AOoIAbP8lVX:0@]+W:k`R.\kDZVH75MuNmOMX-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-igDc`8C,(nE9b!+8lDT>31-A2q]i@40o@D7h*jYnrU*YDd6>qFaBAHr0bffG,3m\^GL%eRVSMp!//fqrrA[>6iR,e>*Jq!4ZiXkoags(C-Jh&q,i&_L\%:61krR$j"3@lIJ"-K"_pj.9Q]b!pXDFs'r^uB?fb_h\f]4XJC@5#J&5]nrrCBZU&P+CX\&Nm$&5)P!'^/W!;HoNI9s,JYkm/dk=5!=R_h6AYl=]qHiF*D"_qcAFbfnl?iL,a.oGtc^WOI[F?c<8`gUZNrY!rrq=_T'!5MX2rr@_Xa8ULjrrDO'W;=27j^Ihn+3ok`9f7e-!!uqlr;0k$!8oA,6cM0&>W`'<djciZ-eXt4=HF'Q<PKbKea!/7.j*@+Ikit-1tEi?<L<X\?iL,a1K&_>;e>t/51ff7p^GZ#?E`q)I;Xi3UM/+N@t2?mBE%rqfDbjG%+O208aQHWkM#h5!!/OLX4@2M+'YH:kh.eIZ&aaD5Ngbtrr<(gOSG-jrdCubn/82$]jKl0osu6jNIsq_OoGCf-)^\<?[pui;LcPRC]=AufAH?3e9tZ,o!%uH&*HEeVOGX,!/-6]rdCubn/829LonGTgACmM!Lf(Mec&Sk>G:uYehoC:^Z8^brk>6/!77bPpkIQ&IBUET)67tsC?*3b]Pe['M&7bG%LMd.p2Yj9F";"?;a5+oV0MPmkl1WMVkT&!R-b5/U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<U6m/I(HU$Fr:$F'O1dC48F=$L?t!$r.YrrB9'L]3:FTFQR2.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.36tr0'j<<aX#dO!2Zd]_cP6go^ao$RGoX$7`AOhrYJHn&9(.f^3K-ZWT-biHqI`VlM'kLg8`&jZt^2LMV7&6?&'[@Pc;YX%lph8^%%t\CFOkl=YK2i6Y;ou5D\@mY%(*`3_tV*IhAl<B4($l(S"B7Bbt/%+Zf5EO':4Fl8<ael_ild4C'6!Sc'4OI?-pnYj=JXU?W9N/_GZ(L)Z9:YWeTHIgXur1+P@O:j/#,ZmnD:]H+kH.&eaGU5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5jjQJ-me:rrC$l/VEjgls*e;&DI^Man4VDI\s'PZ/RoBNB^$q_@t@5k0%95_9i-r<C1P.ke-OJjb]k,/7%.EYP^?'l:D<h,QKlh=BF?5dB'28<oi)lG)"ClegJq,5?c>r(jk;X>Lb@6"4t]Oj[K1LI'%,If(s6r)g'a"Q9I'3a#O-YOk50qd#+u0;;Jd/BYUa54OrVh8j9i$\S:iF3OO>Ll?l`KnEI0Lq.k60UrTbNL[.e:!5^?A(eLiE2d2F<f^H*gI?\iVLso'OD^Fm'H@MOHqQ+9+7cisFh6C/7b1=Qc0%Sl-;pmN)VDP0=CF7e[B0o0?,,O^uAZ-s!]3(pN#5-([6e#.?kVkPBh4j2d2ILW]6fuAf!.;7JhDE\_)RG=,H@?rUPjn>-maf)FIsTVf:D%BRG8d'9[rIG7fJZP(n9M-142lM(Uu#?XW>s_&1]HdXoYKkg;b^0'dk#VVgNREIgg_nJO.khg\`q;sNP.R"rYU]/=s!mNjSo5)I]8l4'uNP:heBaeg:bJ:Nf["`fY2kWQ"iMtCDIn)g-;2HlTKgTrrA'#B_Eo_"L%SSqSSBa@b74;nGQ6GqC<dbnOAM<OI"MGM0aGFI#jmn*l!DEeoHG<m3Q7U<.rf[mXg<EW@THlM?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!ZM[!PYAL-S1g=(b0"6@/6blqHOiYZ/hPr<mBbNMt7EX5k@oBRS%i+<>C\`#-Um#m3_>D8#dfZN.>\k3ql8/6"/Ch-IBocIi'C>4\`-!-a(#*GkAsHj-[[CuMLr5&n!1"_qF[)F=:5in7GCH$0rrDNu3d?M5rY:d&YO5c[AfY[*3gfpIM.VjXE1W9Y%>0`9#;j?WM=gt_>h/8G60eYdb)>MlHIk]%VR-!`Hj\c'hJ;dq0B+oD?,#Euhf>9RR:E,7ZHCT4#CVI15?$(^P>3s`=Z5$H3[5@SBWE@B=-;LJNKMm)g24YUEP\%D+$p8KS)R!Z7r]AhfQ=aFA^:L?0*I?SrarVeL-(2t)3?su0Znam2:=%A.H</(icr[F).n)%LT9cO80%=\XZ=BZDkVl"F.LbEMR$tu<[M1^Lh$S<99o&^Xo`)_E__)Q_;i9F;u:>&/T2q[[hu4m\4/B>`2^sDiSXC9Std;:!k%FfgIkH,.$)Zc%ejVQrr@.Y-Ni"@<:0&EabA9X8Lp[hJjAcJ:oAoF8\jSB(T&[HWUF=W6FM_Ch`pE+!20][W7NTK9=nSk"Kp.J/W9mp,<P]`nCZcm3MJV4_eX=;/=*7B9dE9+)a>mM!@/>Ba5$i]N^ddVgiff@B[`8M]Y^n<Al;A_&9d^`9TXKYV/%#^[<lC*m[`%RmQYs)icETia$/=YF2lAgnF\A3P&fZ6Mr)Wu.QqBn0'O6Rk)@4jRbgR9o,+.C^Gl@=*N<CB^:1VD$-fi32R_>eUFns?P\brl(^#eJ_QJB!g;aZDN\/R<"`lMZqlu^&,a65D^Z6l8VNi,qEV@cs2gZb]q<oIg2_b'^$sSmCJr`O,C/4.LlVI:&I'qLgIJ`ipo^a/SW8(V'4A[RtOBZPYT!Cu0F,s]nqXhle$bK>Y%,OCY+G@bUV%i`c:h12b&^NTiBe2+<-muNe>TaD"Z940.LsGZ=P"ELi!",1Sc7,'&o$sP)0cAhC#T5.b`K*c/H(itgpi#plH#=@$DYjA5_uB_PqhQgV0$X@>Xj]Pl<,oL^8ln*4K9/[Fh5dEZ[,!n4-FfX4Wq-@!X"-i[k6/,3:X";3=pD=4DJ]hro5]37J"E9`9)D5be4)(XA!HW@7MpS!R\pplWTfd27^5'h3a:D=p-54r,Ohgf9f5eM33-C]gS%CR:2cQ&H`\CHMU?[X;mF-goQG<sB<c=>p"F[+[AN__8C`N#9B_g?q;fS3rrCq(R`mXYWTj7b`(!Dp?iY>3cI+r8<D$6RUQ(n4q*4I,E32o<b3RCOfD.56U:dYd<7Gcf"?m^;^V:+@0K`ZX8j,*QD')R!]d$.8rbXCs2)lh4omu^EN9+%"iuFZCmmUCiRSNbXTA1,89!k*dgZH6@jV1Qo*C3+.:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]si8[eFbYY$d9'cW$#o&'3?c2hLE@ONjQVh.^pDTA2F]T;iqAFOX?QX#PJXb,#Gf4sg2XIci%inQ(poc(#]Z"0@g/bEj:8GX"Jm>'RAG\X1C'=0fC#@(T2`LZc_D>r>Zre#`3Z]W94XB2;)1*.9t"rM1b0a6rs-/\`MpAQBnjSc#(oNrK*-aMA8c";#kk88At<*VM6q6e(OGo@M)3c%uB"^g$_O(;B;SQc>es/bC9hqKleYmY@>2.=3?oJlhjlq0jL[M+@?GCX$V/%=[qf)T11iRON(Xoo@S3q6'HDDS(W]K'EXa`T`n8lt3Nm-C(OEQPIrEq8%eoZ,-(KlhFMSWCbO)]SgYbiU0A33QlQ6nng9(Mn']D$\i/04+Q6\(gO9P:''\#H0f8O,"k'U2kP()]U/49`.m6r`"G^qP($YtTTOhIP'beWBr8)gFLIh2rrD6W)?!]EpXfB`r4`o:Jl<rg4!f0SQV_[?,I(_"p36K\pP/(N+)7ulEijV`B)6\aP",=R#$)mOb&TdSMhW2]1Q:paf2-4DY[=gHQ_&I\(,<hiD2b'^?tZ/XP&Zq*Wcu&=rdX''_oXcKfDN;Z^I&<Vd1;!hqh:VU)W>.@R3oIe!D4%"\_57/+FR%3Ra-2>fLOXr8D<a%I&Ygr;os*f\H@'#c[O[1=$UJsPH:3s77Rd8<gM>75Kr7r=QRme!r#SUnZnD76IHJY[dl?K>TO)(Om?1*`,.AV@9Mc8QJP,O/;<Z;a8m1CpQ#CX[*:Fh!@6TLdZn&$DsRB';5%iFY+LLFJYnmY\a^`3%),D52:]P$6Ya>F+3TO`E-RjOrr>o/%[dY'!1&sG^.`l%k^Klg'=H\TcTl`TGI2e]jfeRco/%K=2(\)/7oE(^XGM<lAnE`"XOm1go?Pkork0g_%g6%IM03UGSOu2n-#Ko>m">4OU:%A:Z@kS\D\NeEiJdo"dYh"apV-n2Iupj?HR0F$^[h<J3\<;/g7MBSdU55qpTiiC3#/3&i-d4<"P<$!V)\H)Vok'poZ,Q@dnrWEP0t7pJ"GT&Y\s+skNDhKIKLdK.sR@.@n>WdMM_BUJ>^d`@W\GSU5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?#L81L-]!?1eZA*f^)40J-7N@<GFaFLU%e^o-_cinT\s25sH>MchN>"9(m!4UGlcCN*P?es%X^'+sqEBS;c)?.Tq:oR$,sC--H-#3%PLSN3=#=b,gI6][)p(7mmCq`NA%Gh#eW8no^]T)jBc==8Z?dA6%o.&2Xa@/lhN!!KRbjEh24YbY5T?kB&"&sOC&*;Ue_:OO:"8sF]8b_IH'>YVqulUs2.c&Z*7?]R>4TZ[PQ#m,g>i/83ND5<08Wo^r1EeIa]]bp\X-t.C]'"51tH3/)V+KO]1CKk=N=']n[s8PN^Z2\nPle5A^I-2;:^"F6&Y&[cf*HIZ+dK+Iu!/.=ln(OC&23-rG69gbIuO"b89a2\lP2g#bi9nT1fTT57(ZRI+m/V1l?V6g(,YtTfksEX*7:c1sI1%fNCWLkZA7uqQ],0jeX!RrBJR,!0D9RT>M^MkH"KHq4)lhhhnV>)I4.H=Mk!Ohmc.;H7J*4oZnSglVhJc'p"1<"l90YFad>J95;Ac&@h"d)!!CF55bq722/)E;TX:aZ(oI-]"4h@/3e9!K;(sC;<Yo_m?*K+CtHJ)rHI$\XVlU'\U*Z;/O&c$b>,@lU@RZQ@=^Lrcj]l$C=Qm/g>k<!Q5>DF2%+d>Rjgnc&Np[%8p`8MrBUNdZ>I'oF==)g+JO`B$n.j-!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S1dNV0/1TJHfZ!qYPp!!It\Z;i1mpEVl:!b6XXlEn3hP^E_)'*4BZUrfA]"[?bK\Ti-adP:O-+37:8%V)c9CMR`4]XdKlJKL1o,a4Kf&"Et.pGPSK&.d[*-%oW:c\R[!(3UIG'Z</=kL^T`2'Z[/C);!bf?#YGpMrqjV1Ml72/Q!72/Q!72/Q!72/Q&7^\p:W+*?ISZK4lI/TN-2$K1,<JU+<m\d6p#R!MiC[t_92Nt1.Q?pbJ\AT=@c@c+"6HAOJW9V&,@WuTP=OCtC]2aUH3lr=dOBb3.AV'_>2e2[rO?j#,!77INbr8e<YeH/fnHhL'kA@'d0%d?mm>p1l*E0^QaN,A6+:nhs4X^>EU5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!W]ISjBqj6CjlDn.GZ>`i[q,ZPX;bdAI\R_5r;.uIPjXRg8;k&4D9(9+n^=h!-RI!mQ^NP"l4W/L\)_[r=#'DU(Ose9:]CF1@nHB4(Ose9:]CF1@o(c2k$O2F'D733caeKHk&hA>0D9l3J'_CqrrBiE8`Y-.rdrjRrW='%P5]%frrA./@UJ`p?\eHJ9bkhH4tcj8TWXpe!.`(Qb40EK"a'bEr!#!)-2bsVrr=2<`4tKj^CTos\gs$9r*01$6!Flt"uMf3>Q4[h>7^W91j^PHbOPT4+Ss$kkM3f_o/b#EP2#!Rq?g>Si%_%JMgsq>@K-=X`fFZFR=7B]+'=m-qj6:@B3drH+7WB]cr.d]!!1=^nRqe(/3iVDdHm4k0?=!ClOs3tT5siobj4Jq5Bi#MkUBs?!.a3qIu?PT-Xm#TJEDo'^R9O8j<%Kjr;2i>rac$/&U[cR%.IQjWORATO!`7MnP$acr4->(VS't.T8]k!?)MDN*7o+>`M?oGMT$h=[=R;5E&"R*I#!;C8L',Wr(5iV8&_df2RdmEFVUT%*!I?mgjb-6,:ANO!7]ScS#:%J25mq3-.4@&+7d\b+G9<]fe;JpO80=@bP<IZJ!o0o'gei!!ItDi>2qaF!#C(2:<3A7!R3"G4BMO_5q=&T#;gcRr6+X1!$Qc"?h<\mL\[L;'ubU!`IILmZ2Xg>F%Q)/(&n9\9#pr3!R2\-IkpqOa?Hj^q=cP[r6F#RidTM=^\S7=rrCt?8Yg+tkPQUpC"eQc[*Zu(anr$FS;KIhe$P>9rrC,(ZY#Gpeb&+Xk&s^$7:L@m'N6<D3+@/EF\'jpAn->kmUuXn=!\WaY'>]\8[Ls=dnGha8a^(>e$j@mYl=\f8\WC-n+mE+rrDg&CNi,!8kCh(@_&n">@$n$!&LOI\W=(A]DdE9J,TNg:UBi.rdrjRrW='FaaZ)DJ&m+AQi-`IiVmHGX_D9nV;,;?:l2:lF!?ksJ^-_F"Eaif#fs3AHr9EN[(d5ef%PSJ/uNEZhAIBo8D6(8N3:&4JUlOl94@_Y&i)4jS&k,Dr<9S.!;m$YM6D.VpVbHqejbR@EIf@fOQo!!&B!uoHR8U5nc&S3qS^/3gqOBk452:/I6ts1p=;M]]u4\;:;%NIA08nBotfiu*q:&%1jF,E5?5'+OCUbB7*\UBSY21:%.Te6o))_l!'sg"r!#!)-2bsVrr=5>H%.*S&+_in/!JZGhtd]4J)E&WgZ%,e$<Vf90r*DTk$O2F$gSH*!2"<05KrG,Y"'NbrrA^gL].Ao5N8gF!2-0DrWATPP5]%frrA./@UJ`p?\eHJFVVu1`Llc:Yl=^=F%O!_TC`i%rrBiU8$ZLG^E<"WX@rP@bOGN31U*U`mJ\[:!2,m<rWATb1W?!Y'<qK:^iN#O?d-8,ndhfprdDuZrr=j\U:B)>`Llc9Yl=^=F%PP>Zi5Q"5PP_%p.P4Jj8M@;M1<j^INR]qFB9:Apoj[K<^6?hBg0r(^\S7=rrCt;UY.<_?]Y!feg:=r53;QhRG-%n=5&%'rr>>8+8c@#T5*n'r<03On/TjBQh)lNr.F;JrrA[3r'/EmW3-3n>4FMB+I6ft3?r7$2H>A7"QI&iRFC4ghY/XfAPotjVRuYX'N&#&"\1\L$[F(,9#d]`*lBi]<n)W[)0c)\>[RL25r@T(lmY"Cc=]MMS&@5tG`PnC0.+]g*2G*W]R<oBr:,fKeh;\@jAFAjl\POP[Z,'/:"3sQd2_p`,tUb1ebQHZ1t%h,XA4le1t%g[5RfQ)UUcsX>A7t$4(F*TZ1J$,f-7ehc(aM>m=-/+P?:D!KU>?mP,'jPGQ['JeCM"k3NJn^[Gt!7q43)6R`Uak]<F'hZpPrOZ<],FV/`gZ;j)4rL(>="W2.qHlm?.fp1\"PEnm91=\_ekbK2dAa.E9_\>`'d%hTPkccFcrdp1_cUNLXRC2m#e.VpDZimq3u&@gFerU.<1Ne`M"FfA_M_fP"!B969>Eu1.D!gEd:ff]5laMrM`;t^jYWBXO?YG&79VR'g*;-BR"o.<DL_;sM80iV0,0oajrQ5nt6.O<M]Y#a6n6o!Igk3mKtd!9F>YQ4mfOcF`eq_u:_rFfQHNU:ZM:\.&TVOGS7I+mDlJaJUrZ+sVU1CW]<JV#lIcfn9JY"^D#q%;t-/Q1ZlhFWLKS1i"5U#c2BT<W<D?6UoZd+gJ,=_i;]?/0^KlO3bs`A(NU@_nSLb!70nGOY5fY$'QYZGPJ]DVmK$PAd<`3;mT'#9D&4<\nne`gUU9+fI49BalMgRK,]SD#XLrI'EVNY??@O>r>7#r^Y-BqXp3O<n)>BO7G<957E%\+3a-9U5HnR$KLR&j2IJSet"$&FH&IQ=j^I9\UM%PMEfFr@9h-65NFc_5Pk:"q@.@3nu52uQg/VN(HeBcm,#I&2KTPO*&/^9,,AlRWi3]5Fqgg<dnO4m#\g0+CCe?bOiJKUPNiNbDHQ%B.#b1)ah]@-G)r=S:lCR>LoE6;\MIdF9llHS>\\J/7Eq@2lR\?G!StS6">iEK!?(]f3qVQq[9d2)>',iC,+lrgN^E#:5tN;!5Qha`]Q;HNT#LANrr?Es1&B%>0&JbFr6BuE9k,NHIs3K?&.<0IOY/cIFCtWKF\e5'1'o>CVrJrMk5NX&7bIJ6]Bo=/`o".K=mO[X5@;R0dZQ1`Mnc+g!%7W3L72k2V9RiOnk';uBX5_q_P_n+8s[bBe9&`+op_]2?<c[*,"uBX/g3cJ;+P697=cgG4=T:mYBkZ>g$?-F+7]q[Y-cUV!5SU71ORYG:qQj8?G[NY!*6-Gf^)meJc>_DPPA0AXi8;NBe@6u&mS`!aUad[X-Uo@S?PmoJ-p6"1"/;LN@ndarrB0NaI1ZAQ($2$)uS!GdMfoalLOE@4G4#%?SX.R$c]>3QTKdXc.n7jW9[5<'2<gd'uuVO\%cV"7LH2GUUpV[:,l\;oVUi[e.s2jQW1^EB[][bl2&B<m.TdS@g0Xn!Gs%V6Ni!Gr2lK!N,hBD:^Qe&]6tU^g=/\VWp$,q$(,6N5;t\GS9eh]*l:M%l2<j;(Y3'DEEE.+q4$N8CFuq5Lu=[IGQdPA#^;*\K4P.:W!Oa-oZpuf=nBsZWf'sr_1fO8U_?qGffsL^&r]*Yf_<5.*0HuPqZO/Y=s\CFkfks89oN$,l'G9):6Hhp1'4CRXs@GGQ9?oVdhj*?m=`f*VcqCh_oW6I%rq\.&r/(3f[?<cHYI8rPF?3^1kq[Q`pk/KH!C:Kf@41('m^U?mtea=b2<34UAk5?X3dn]IgSBCoJroN!$6TIoa3+AYrY4PC-V7t]Dhl60E2$FR^6#%+8H+HrrCXerrCD?<.6)drYB'i6iKLp1]FnFk%eMY08+i9;U[krM#M"pNE'oV9@]Hh^Om%cq$f08Pg`?=Ca#[E;b](L'uU\h_IApW7S"e8N8Wmq<&\tYf?(>X4l^<*hBRao=E3U8=u=]&8ZeC50mfXZ)J,bEEu[U:?&*d5r4h&,M88g)<dp[9[Cu+?RQ-R5'*=oPo'TCA5C`*^P[R$HafVmD2+j[Pf5_lK2RM,01lEZ;=M2*tb8H/%VKMtN<>e"LqI5S/M\M%^KM59WbYB'GDiju!#UK>CSq@c&dMb9EqiBE/r`/\-Y,pQo$78fr*31<i1Ar(],,18q[!3dMasrO'X7G)/Qfu5;qX[bt1t#9bfo=I=GA)RiBOR"E)Jrt&a./d5\\S4Fa,fC`gInn.6Ptg1@6klF3EZVbgE;)<*U;mdRQ71O\2nSDbn.p4$o/\F9rqi,pclX+_#-,0+bi(',D%5r*,6'%3PY^s<2Q*u2W!ODV6UZ]9dus.6P.^@37CS%+f[GMnig0*f;ua8Y*u1urr=;*L])PBr@;VE^IS)>fUmm_ifE5G'N%;.FG4d"*<-##hh_:4lgTDf2:GV]iQq</plGEh#QB?[;tqa(^GL"4r[g?9q(nd&dn4>OYrY91&!7[^9uc)IPhEYrmcQRMetk3XMi"7Rl*P44jV#4$,Rhm<3F)nBNS#^M1UM8uoe_iqp+ib]QruVuXH=@\A1.pDJtsH,3WB'm=pCF1rM9=Qm&B==XaH#Rfip_gZr$r[`mMhYGZGrLpluiLBf(/S-hEcR/`mAEk.]4#K=c#@S;t,AZjek?;j,gndt:\8'j"2>9=&`=b:,N5*O_/jB5V^ZGK+;h.sU']M'Kl@j2i7$bCqE0^F:CrZ>$1rBm1JK=$jRnaZP[+=d@rol;[Wl61uGNDddJ5m/`:BA_Kf^+GMFLOE6M(8`HijBr0&NK7mRpWuZo$69V9ca!$RJjCUK2Q,t<4n4;\oAT-aWhI#_6h`Eh_IqHq)!8fn=P>*n0V;+'U[>Jtgf!*K`7Z=DT+ah;`V"GmPJ^j<+X(Q>j<me!n95Jku-fr41r-0K.<_YEtjX7YQVZj@Uc)9;jk&64?j:[b[ANRb_a<9P_!90C^RqZb+NZnaqcH15WH!Qgu4T)j@]kZ5r1ipgj\9g2Ap/`]WT)ji/1bqP0);hkih`8J4$_3aF%^f[EWYIc!$ii@fNAT((DfM_q4!>%id[FmG;3Bikq!too!3`?9oIBJ_o?S"ua-FF<I7=/9Ti[r=df'r/?g)Q0r]L,ql4d)a@W[<)e:6NsGQ.YJ?iL*l2.in(5Oo5prrB2TrrA^\W;K2Sr%,tZO8Ol=BDlflbgsn;?O6Z3aJGd6!7qh\c"riKho(k^1W+\H*fKS#dnMgN9kJ3QVR2Oj=j7\PbIu\C=J,[RlkoPZc*S"LHhSQF[p$[R73&4"]ju/_Ol_S(c`ei,i:S=W`usNNm#jH6%-Z!&P$NaL7GhrAN_%eN"9Z2]Je(#U<OT<KP=:'@JU<*]M9%:U#d^RPH]WlP;CeT`$/<\aN9X"o:SmdU?=0&W9lmAUBaq]0gWpO/-I471/=c\$_'<kn5s7Xpo2L'0W8R[#]9gcjOh>9XY1lTWA\f?8l3BqbJ#?W1hbM$Z,.I+P\r!+9D@OdOLKo<7kPMXZK(<%9K0!U[H&8)t4%1?2leIWC]hP22rrB5HS>s$K[aNJsp4)4/[_#b=15P"NiGag\N.Oo6*"k:d+'d>beg$VC)W''-F"@V]`!QhrF=id\Z/?;BdN>o#?='us:NEp"#uQi86Cj"$D8[EAT]Baf<.-p3m-NXGF3cBQaU"KlE>&BX0QP(mn)(,(Kc"t3]7d(\A^^N>o]b#^8+Rs,!J"Pf(grE'm8X)cZpWWU;-Qg?/,=*=J[&G.Y"h'?#Sgh%AkPZqiIfE#;'R_\f]8+5W7q]\3F:?A1m'W`,0V&oJF$D!':aYM5^QHU[5F2FVtgsr7N_"^Y[RIcS+gFSrr@7,\E=ou!p_bjD1+V$5dN4kMEo>fa<c,m'!)>dW?"3&a4g:(k5D4F5#7O:rr@7\rV68[FN=!Omki4oUg/^"c-r/Xo(N1!3??3(39)LGR."4YFS&Z6\t&2jD-nr?\)$ZH2(-lVG7=t(o?PDXOMh>:4Yr6VI>1HaqNLlTG[[hfT?1K"k[O]@6Y#7tH8+_W7EqCjdm\$'&_o@-1:iI)Zmc5*EUnaESu7I@/Yn<'hT5CoKW?Z(aS+57>*7p@niXnS+SMdn@Fr!aH(q2tSM.`qRe]/m?7U\t>DUc_0M!F)pH)Bbr"rF,4[ng?)&C*O3+YqP/"#jY1,ob>ktQl7/bL'uCo2I?SR#f-9qZcFUl\\"$D,dD8%"N6.nJd-e0C,9K"J_Ik^a+oo(e'%:RBP,*0F*:e+3/R[%!LfmdI'FSKCX';UrL_QO*c%Xi(h,!+M*V\87+b]#P]_`E7`U>Woq0h&6TI[LJ7A$ja[3&Akbj@D%duYd'M=i"-0Afd(Y^q05+VdW:Sbn\nY[h-TDGA73=B5\(l*,)d-0Jgd-6XhUu)SOpP%DS=T3(QC9"RR:0t6VULbrrA2L_u@>\rfqHQ4"pCO/3iIO>2##*dJcWo-fL-]U\UJ"'N%u'+^E'CJ)iQJ5Pk:"q@.Q>b]n@26_5P&!3a6=!2.omrX&ESboG9KMbhn&9^#2JRo>%LX,(:X'lE?Wbd2;o<0dN,c@/5G0umJ1CDiNZ`&`h\A!0@2i@>;?)o-`Mr&FcUC*8_Rc"]hN>HdiXFk!:1F8_GQ(bXo>&VB$cE-L4]F+th1W9j1q[Nq"nQ-HrrmgUhf4h4$3_rYobKA.AgW-$40Li5jXH^e5*&I'bB`0l"3'`"53"*\b7EQ(?mL$RrcfV5B/`RNYqYeado?*Z^?3Dp%^cct1NEJE1hrjORZWGCh+q7`CaaKl)P0(eeJ[Bd?0EtpBgMWsfh^j:4m.@-FFh'JkOcK5u3a:P_J5&?uXIT@_5^&:I8$O^2)>t3qY*Z8Fs<IN66@g_.2kZNrk*<-#F<MHe1K1=6RLNURn`aj`Vai$Ub".Wn>cWkJ@L7tVSfCZmOY)V>b:GqsMG:q\9E*GstDR(%7,BL86]?Fke"5K0^i[OTQ:N=$1XS2"jq.0rZI0u-!HIW*#f.VJn4b;?=;+.k@3pn./NcGF+r;:WjW2VV`Xs0$Ln_?QN6MXJ`:$0$YG9#_S5;!.96dh0W<*d!5!/<*^S!q(Fo_&4aJ69Fr>@/t0W@!ot6:D_1RiQg:!$7rc2d2_pRXa&RJoT'uSY3]<N+4j?4aKtP*9hfeHNY[:&j1(FYRFO?S;`Ob$4`kS2-T,_6MB]q6s/hW'kbJ.k2hV&$nDfSkIs,toL:R`iAo.@UVBMd2>m<:-e0g,]!R$t+120l,([*%ZuUT<-m)W/\s+rFi1u=Z9Hi&`-/>N)$dYRX\EJ9?IC>D[9GZ5p)Am>SK?QXu+LG\c)'iT=*nu..fPL3ao.DAG28j^5APg/KPX6Q>H=u@_)Ql\\rrB+`BC0JXr&3#2a):#'FYa_/(9tIBAXCPAISJML><1NK(fT:]\&U0Rf!E0`8n(50K]F:mr2`@AUjD1&l7$_"'r6h!EWfGig*l,`PAccI4+i&D@DHcQPqf#$,I<[T$e+1m(O2ge=WE&-/jX1W``R5Q?7=lo]`!?<O4mQ2lYS\/H%*LQ@+?3E6*=fLQ?NBR,KJt%9t=/$n[j!A7nU/tN@[]j$c9ra3DrBGnjr^p2U9.@A")>Wk2XaY7>tJ0ecj^0bI_[8NnsYL32kNfF(r0F/mZ6N]Y=Nl3eTF.[hbn^4?1G-L@rTi3Z;k4Tb["Q/R31F3QBu@lfSAR?^0(KD*Lk)P0R-t#u"o`MNJW_*9E#d`#kHRVeTe%GFF#F]#JH6cu%c\.HC502spo%5J0$XNgqZr=c@+G]&lejo_Z)3Tlr"VkE(MdDH\bF7V0ePEi`61DU(!JC5coLo.sTU,RYhdB-Bn.0iE7*5fi4Z<40,s)i!r8n+Rch*(ZDuMZuL6gZEUo)&n!K1`1,e`og.p,H.&6JXN&e"F"@<Jkg:@0KH#h$i^4Crr@]MFsU+gCV/KQYAM%Wk)ru)]UITuF_I$^EQ/hREK5HHNc@scUC4,<\"Qn:[d^<tH6(ER+2EO(e^IVp=oI6?eP9Aln%8MANtD<ka-FF<I7=/9Ti[r>SbS!>4K\V`lfp/%$G@(ZQggd8rr>D)J&e1UrBcAiXA4kWg5l/a0)kq;MuNe@-EP]UOgN\<`0f?MZAeXB:-51]XBCJ?+8HVXchcWcRB;ZXSs9hEFM0<``H9i@()>O?g^m#WIqeFsr;q*@!;m-\d8H;fgJ)VB*0_tPdYqFBFI,I8RVAiF5K2OP$.JnSn0HG-hCeg.TN7]b!.cJlfY6\?7\<hEo#q%5!G:Sl22C>h\,Lq^J,TS>:G]u)oEqi&!5OdgZ$k6\KBk8k=b#?\gGIA]]DPn5!'mRqr!>3L]NbC95e@R)#rHuFh0nKNZQJ:qrW:?.9f8'*(B4B]0#R\h!Y$OT<PS/6Yl=^=K1E1pfA;/G1&b=*i%2?$Q)@m2dnaCf/?SZ<86(N6aWdi*aiB<(kSI\-!.b?<Di6jD(Ld=DJHhU?-bPf&KWDpNW5&66rrA1]Br830GdIC#Q65l5B_)((rr>=-&,Z\i]o2<moKTFtq.9R+J?qep)U7ic=oSIeb7FLV1nIL$5Nitnrr@TSO(/!i]a*+ur3H>&^fdCGVR-2](&n9\2TPgt!Y$O1r)`mu5hdCY#W-lEh0nKNZQJ:qrW::*RVJ2B]N>+55hdCY#W//bnR)4sCk(psdHk4_pRqB,J!OI:$SIl^WdeRL?i:(CJ++YGm!^Jb!2+IqrWH*b?Zl+9qTOGT?hb!\R\sZq!$g<TrHcZc.=T7qYPJK+rrCtG9r$qKf^Ud:L7rO('JVrErp!e0-E[p@]5;B\Y/XIVqbC8506P\:4";YQ\W5UN?c0YL)t>$KILlA]\r,OrbJ\^EZ`6f2AS40>gqlK89sfp8>LHT3UOCbZEoJ$si@?gMHRn`$;JE#451AN[q?6'_!;I1@51/BYq?6'_!;I1@HPbLdk^Q`ro#q%5!G;/)R_n[o?2jmiXZugc!_k&5ipZ^IC&\2.&nptl])0j&Aj=HlqurRERVNS]nSe@-X?Z2"dWqE9rrA]lL].FF4cAaBoH.4so#q%5!G9`X/o<2D,8&a9`B"+2/>sBfl\"l3c2K<p!2*VQrWJZ`pp^6RFs$JlBrWplVS;[5&I,>rrrDO(Bj9<G=iOsZ[u(;9EEJ;N-eAIb;B!XV!/e8bJT`.1&8<lYhtdN/J)EVdd?E+gpRkWE-"Rnm!._CXdnOCjnRqe%lp't^dBgfaoF.u(!5O4[fY6\?61pWF!%bnS(2=b%XNrQ=TC`PrrrBie8`b3'rdg@Wp^h-40=q&-I:b^e0Dl!>-dspLM-='KD5EB+]>CXFDPU9b=l)r45Nitnrr@TSPK<9,r<$kcn0$2%V"^&Ld$8i'FVk&XJA:Y39f1B2ZhUa'J[Rf<&8=>QikP<of`(s06)EpTFn_U.Aj=HlqurFH1t=7bpoj[J[QjNuBg0Yu^\S/errCtG*l[k\H4R*tq.9R+J?n.02,ijj/,oUBFcZM);LOJBJ+O5UrrBil4cAaBoH.4so#q%5!G+J,rrC*1^\rRLrrA`oU0!smBRV;CnfjOJc8aBcOdTk(^cASaVbqKO0u&4b<*PVjcHRq"<pgZ!7::6A'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+;s4I~>endstream
|
379 |
+
endobj
|
380 |
+
101 0 obj
|
381 |
+
<< /Contents 159 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.6c51b3c12e64758b8cee4fbfb9e39182 99 0 R /FormXob.e11218f06e1fbb87aa54ffdf1f788094 100 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
382 |
+
/Type /Page >>
|
383 |
+
endobj
|
384 |
+
102 0 obj
|
385 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 299 /Length 13978 /Subtype /Image
|
386 |
+
/Type /XObject /Width 219 >>
|
387 |
+
stream
|
388 |
+
s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;.fe<+!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grW<S[qH3g<7+%oW!ir083Yfe:\Rtltb!NTCA4mHiAWJrrAI^rY#eQJ'_BVo/2!:Vt.U4O0$b.Fn_YKMT#MpKYt^boG4q6bocGBG^KFAf)G`<UY+)q=8)sNB`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Auo,0LIfpt7D58i1JC(r'_?lId\rGd?edMFPb"&*hMjQEU9c]a.'!%.=&-><,VY(r,H0PL9('Q6b3)!iC=cXkqri>GRq,hY01RO1^YKs7r4eP_L4Q5dekt/=BbMs+?:54GH]ielVh3ia*sl$dj&Ik3pE4M#:F,e*h)2TCEkc6-')YL>&EcZmokf-#ZMf-8:7l+t!'YT+!;G`-_O>TD0DY4KrrBf,rY9+p)U"QC3]SG;Wc\+kq=D)q!5Co!.AotIrrAZaJ,Aq(_Q=_jURCid8G4O&$SV>JKDth1n>%rXJ+Mn0rVI\q<_YEubkm/@HPMNoTD\OOrr@Mgpesn@TD\OOrr@Me=u=\u1[Z6FlrH#&J+Mn0rVI;X@qYfA5*19OYuXRUdEMKC,^U8cNM$.F_>aLa`?DLnrrAZn5O[7*#*@6VqhHGD'oe3Nr;+80!.MmDfiimOX<73'<Kg-6F$AR)*lW23C&\/sYl=^\Yt[,WTC_@ZrVI=;dnLh.\8k*E>hN;1c`BA*lr"cQ?hsDNrr%_YBr6o'gc6V3Y&*KTkLq$Tp*llafD^2lrrBfCX;YfJRJ.1^p)l8:^[ph'rU;;5KMf_K]+H#rJD/2;X,>:^7aM'(b7FIBQF3IADpePS4sh^,fmT^mS\5_7=<0\-[3,2K?2joV(]OK^9j+LMO8OV_rrDACrrD70W]q+CIg\$E+o_NdNg]nI>Y"BCZ>1Dr+7^iETCp-P1Ku3+\+(d0bjaN+LSF^"1t,'2VR&/ldnM9e1]Z!,@pWlVX\.k<"EI^7o0OGb&gl%(qf$_M4hB49Ta]Ng'1$Np,a!6T-glW',MW^fhQcLU$_JVFmI-WD-(L9jD?;4d/+V_0%YrZ@274_<HcJ!h<DVCWfDG_Ghc$kohrN%QK5o\CIUDOPJW]@[W8Q5XDQ!&6T/(4<@?Hm)#R,c("EHNk<Q:MNF67nYiCqu`ZM=Xo)]<.UA"^X)cS_2/k3BOI,``$o[PD'oQM\0C;m&C%^csJg<@Vs3GM&6cU9_6-!0?0<ib@36&:\<KgfcbO[dZDZ*CpDB83Go_a&,W,?H,M_R:l==6R.bQ0S!eT"D!N',;l%jLN%)_ibb8tQBGIJNHI(G/3;aH$97FAP'o+^mb6c8CNYoDjL'oh-Y_@"o5Vf:a#N4NKe9GR;SMkhrdWOfE9c#'5b#uGN8%G.:R=&eat]2'j,.riNN@(h3Ku9lri]]\?g%\cVI!J%B=GCYo"<%DP@T?#.bO.i_>-T>>-,;Xc+J5*6LdW05%`o(W]'IYiu,iI:(J'H1tl<gp!D+3Wbku0o^hb)a<]>ELAg(rrr@.Xj-h`cZP0j_8]GuU=.afD5+ub0W+;-$f5g6^^0b2.Hh=+gg/ZWK\s13^bBTdDF8(p0Do:]PRJi%)>M7tfb8%$]aJ.ffPjKJW?G0-3q,:.fhP@\_MU>d\beH?BB5]_o,c?+--5@E4;k+m0j+GT[='%ZP5unj+G83m$`N?:9SXVgd$jm"_"UjLsDjY_qUsn7K9fCSV64:[<7`BZd!!a5P:eTV$V^d]'aIL^R.AShhYgZ-W9f12u)P^sF!$gT\rHcXg9iA:s!0Qiirk2mFW:'U+jE"dZ)#jSn5FL;(72:[-'jFQ8!0CdLrGd>c"P&sCW;ck=1@P4P^]&h"U[]O@n?XLZ+7^jpTCp-P1Ku32]HdFV,*nYs!*i%c26pttIhH(hcOKdhH8!?RUbns;CGTIkMXLGM9e(@s\LTcD>Dn;F=-,-:J.sUjaldC%5.'Xq\N4lHe\8:C%4k@oN]?aBBgRtK;F=ltfOT*k<c%EOM"H$%Bl7IjT%XbgCM<l$!!*!E_9N)GOctDrrr?ZH/7Z$j`+^\oSG^?k_rRG5*;rTR\\UM&DMK3Ge8a(:GC/)ocd]*NXTUQU[gt="UKl+8,*n?*rQYBC[R^N%pM"Q[d3[=qgM3&e_fm`hW0%f&jZ<OS6?t%APLS-nZu&"hmRs%M=KZ1R!;#5PfEZ!/i,q7_7!`At`Fg*rRr'.X5`sl*5Wj,hc9?iXSd@%KT@Zu33fUc=VcV:FW+MYQXYp#SbgM:p=OEK9ETK[12un(Hr\^".pQAWmo1s?g&P6[VO$#*$b_0Npq+f>aoE1;u`G/ZBOj>kI$0R)g!G,B#!8n9,OiPsZd6=-I#dIZ?>G@dOA4utQ5+ps$0PF@78ei8Ml$g81qA(8acpl#DOHg&sN!A=@XQsqOH#YCpm)KNU1i!AV80L_<id&WgirjPk;RH!tmC%X?\rmnp.PtuR>QNT#K?$`O*B?RC:E@EmC?uu#<Z;p3I[M2\E(53(X"4"3mjf^5IFmN/VJkle[Pr+H@.QS*[fcS@1V5err0[/WD5po2@B$W>r8DO"eb5&jb@b+o0QDe/ouZj,kJR.?PIKoCkN@'CFt]>s3Sh:fF&'9nmB1Qq/=iUCmj+CPNQPOo[LPOU,Nro33a-7m(qOk_GOO.u:\#FdlL+Z1+hKZ&g[/:@2/V\FCn148*AQH?UFk8\W8>Pg\qE]jWi267Smm94UN1ajk9Tf(.uc](\ML)$`!jd'`(U/M3bKSql7cs3e"?"`bmjX$*chR.5oCOI(I'Ygd78L[PWJO<!&#ZuiDZTIn'bW$j?D"+-+Uc\CogQg6&pT@7`XZ3o;oVDmRrqL,aS1$P"?i+kk;Vt,d'qfjc2JfDbd^8p'+13DBlg(N(Y:Ui_Y>2KaZ^.j='IjZdYMf@?#3nA;2B9YrId]!rujS4FLpM*3\K"H4Q=:Rbl0$cVD0giJJE&(U7(Vf<X6ilZ+0^a!)qJHuc&KkXaXpMS3RHXZcT&9%"!J2Q#C:'V[KF"/05n;;:=)gP^3$Ru,SK!>8"+C>`J>-lF.Rk,#G:=Ji`o:kR&cHA,gW:l;#1%Xq[^1epkk\+Q]!6DSmFJ%kkGbd(r[S8"k)3lEmJbPk#T&,PsbXr=3Lrr=;*L])PB>>a5Q5KN!*r%\3O'RqpKU5CH7UaigJrr=1b^\Zsi!;[#&2-WrX!0CdLrGd>c"P$$%7*jh(7tcBQ;U^-]M#M"p9lo/*]sNj;\oKs`.`)dZdJucpY]U=,q>@`%!5GT625P!$Be;BP*&Q^B@BW,q':NX6%\[J6!'ceL!;Gu4NATo9?h=!srVRbt=n9;Hh!sf71t,8A6I5X[i;WelKD]G\rm1Rmi;WelKD]EEI=n+SaiuZl#6)sJIc15+^OuGu%K2psrPAL6Ig$gqY]Ijq0r-Z-^U*q?T=@,Si23"@5Pb/.rr*6b?XW&XEcXr4$,3eH!2$2Sn)1(4lVI?QKDtiW3F?1WO)e`$C'/lurr>8[J)A(5Dll7el4<de.-5l0Sit2T1t3lKe,FfirrBfcRW!%-kNX/dpaG6PK:Y6JNAT-Sp=K:m@K->BJspUpJ*5r9qtMT$I=n+Sac/.,-MH'jIUW6V^OhR(gA_0!bWkjSUQtN_GkWL@dnq(-?hsMQrqdDYH#*E[5;<*;hdVUIfK&!IPgqi;q&_.PldfG-;]Enuq>#gFq\<=0Q8s>:@UkO*$X%PXk-^qPDpePS4sik"g&7cCS`LP_=<0\%FBKi!E!iflKA9D(TF=Wk6i9+I!'m$'aO1"f#_.WEkS%n1)V_!op=2BqrT6=FU\p&<7OS*WrZ;(>TM<2^B`A'c5JuCN$+KhlD:(k^WVk*2&$&S,7JA#?rXf)0%tDqQhsrUR_B7b*q?5RP7^hNUgJn/bpP7:trr=8?Obs)<#_.WEkS%n1)F*0knFuk_D>sS\>BEa0Wdci%_s5a$OaY<hrr@^:_r((m\,;4-n;$dcrdd!-!0OCp./)1URJl+;C-TeRjC3VU+5u\b"P`oFYl%S]D%>;j[uqai(u4CW&X&gXX`k,Vr';RtY26_h!#^:-%bq!"\o7S6_b8``rb(t\eYrKJ,5[KUr#u%\rrA]d^Z9).!/*SSht.5ar/GR@:YSkJBD723W;ciAqiQa8!!n(0^ZZ>Lq&2KV&+K>l!c@r;,?o7emAbXlqnq^KJ!#0#`;]gj5JuCN$+Khl+7P'\HiARSrrA1`\g[:&5FMK/okH_4^>raQ_B7b*q?5RP7Z[=3r&t&[5b!8Ef%h$eC7i`LnG9O7jBlp^5N*.Bp\b/1rr=96r#u%\rrA]d^Z90JMES@Ck'qW(>*&5-\JUt.L\Q5qJN!N.OfK6]*mun"O`>#B$o7lQoc2o@SJ7VuNEOC%j&@Hrh*lb5.&)UCe0q&K!%=S!!%=S!!%=S!!%=S!!%=S!!%X]3Qi)C$^[*JJrrD;"2:,EXHr]^gLjU/F:Sc5L2nEkU[b?b6,bTmGU7!8]P!8I)N/Vl[LHVR<h<:pN"eAsq$<^YMdht#)V#*QtBMfi=63'%M>S!b\]l26u72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!;9pYBhH>X[7YQX=n2!sBD+FRkQ[e\IrrD[):+GUu4!r7!gVqdRQI4Jlphp(%A/Rm<>S0m6!5_I0rrCELW.3\t<]hQ*!$[Gkrr?:oo/3mjU84d.DCQTN^[jI"6EKFk:8?>lMu8TVrXsWPre6>!rq]e_i@!-ikZH>!n"m1?dnN?>L[m+3rrAI9`io=<IrbPh,6RoXNCWu%NC3^A>#4oc2';Z12%TTKCO"<&*mu.O^A%V8ltZP#cc>c5nhC(Di@39+kZQD"n"lfY'!4P#Kq1U1qHDW1dmpd#nh7]V!18*O^[q!obP[<+pe%q)qA+#L!:QbZrXujC!;[ILrrDMaXb0>)HUrW1qqq4)Z)dm)59J[qaN=G^KWb=Tre7EQ!;l"rPOYc9r$IS?c$A9[iVf<lZ^d:EA:MQ?dBLBNH3'fuHUrW1qqq41f[^!%T9&DIjCS>k_HD<e!(,69!<)PsJ&5E<rr>C9rrE#i[A7N6O(f-c?[MeQ0mahRoC;e&r/C+>9<Wj/>JL1<^6XiT9<Wj/>JL1<^6Ysk6V"M=nh7]V!18*O^[q!obP[5^n<`#3!783)rr@I!-i>:bTCa_mrrCqL=%tO!m32CcmsjI@`io=<IrbPh,,b>c(SC=P?iL,`91Sn,2h1HP?[ps+<_YEum32CcmsjI@`io=<IrbPh,/=%&2h1HP?[ps+8,O]8J+PANJ)<mtRVAPN6hqPTrrC8+NF2MVroO,I?gsIhJ'bfUrr@I!=jm4MFU_Y?3aFN#dRbZr<gA4=&#DU-NM$-0Q65ea/R08CFj"VDE[iQGm.oDd/XKQ&G4\X#Eufg3[3,2K?2joV(]OK^9j+LMO8OV_rrDACrrD70W]q+CIg\$E+o_NdNg]nI>Y"BCZtgJp+7^iETCp-P1Ku3+\+(d0bjaN+LSF^"1t,EHS%#]P`::/8-\5K:D^ARe<WE+k,SE*"d]3<ICjGla;-Tm;Q7Z^6UR'`1hTF6"_/MWOh=8fSWCEDRY(nLRN4E9kIQAD0RVSLQ`![9'S)oOe>AH-dA613,m=US@<,H--Sh]KdXpnQ*S]19#[K6]D;C(.a>].ji"E#3#f<%uH1e_m'jj_a9dp0nlW8F5SDh^nYBie4[ag73%@%:^83VCC:20Vme*Nb%VO?5]iSYf]e$BN9Sb,:Q`KA5-;rIjgO[jUK@ebQRCfJJ>]_gcZGWSH5SWe`7f#kKmcP#5=iEW4;iOmDC3h!,\IW6&ajA0s%JP-_O-"rOSb6dNsU!:$NVEkRH\XDNGKCs<&V230)nKk]M"k!jsR8E8J0I+]B-DS8*$FQpmkCDS%-,h=.sMKH=m`7ofTgUD)@O-t(<)=LSlAk1E$p\Z,*q(l.%9k8`j>r7G<Vh23Z8T,8fhg(<m,\)CY-Tmt];e+=\/p/[$MAVWqNc-cr>S,"$ULWCGa#N-m-TJo:f[$b`+'GK7r1B>ORg,<rVPb`YG3Wr=N49KWBt]dNE^KL\a6-FIW>2"r-Bd_##+*M&Rh1[$dII8S_*&%OP,@<CMNqko[3JZ"9k:E;k<TJ[6BfM;_7(p7^o1XpZ5='@!;uis$CCWar2*D2rfec#4J=,+[dO%Fl*TWOiBsG!\e;q[HU#jQq&0I+CEgquSD?l&`6-Nbq&p07&V0q"4[CQG55&_aND`=0BO\C@+719-%l5+%f9s7KiVNFMFJX>3_."PIc0&S)dnN[<dXN[E\,QG"'6tWqILC#KpT`1c4[0:%NT?FUBN\a6?5\-r]D#t"<mG^aeOuecY0'aPh2uC$.mNhO/3iIO>.SI.TDXb9+8+qQoW+b!oRE!h-fL-]U\UJ"'N%u'+]Yolq$(.)!7r%e!74GCWnNO3K.d0(l\kcCkU*;o&gi)91418F!$[_srr?:oo/3mj(W&E-.;>FI`.'RI-E=QF-0i_Dhnb)Br/15lWHeik+^h>rEXfa]iQ'oB'c#8P2ff9O/q7jd"[TpRqfD4uP^^#VdMdfd[PVr^[mi+AoF*#Yh;(`<g.Pe@P\iq1DutT_P]QZ_Y0UYg`PTkP=KF8F\$9!a:4M_`qUM?82,9s>;H5+kA;k^$r"%rcQWJ3QQHs@<\3"2JB,l%2l>uE_Ys+\`cI/Q6`!,WU&MO7Ul]?(6`XQ62dmL)^e4PZ8aFY@AJm4WWYqsHHD"]#PGl/7S7C"6+[m7Ct,=ooCKe,anL4;hYUt9N:j?)!T>H>S!aoQdJrJ0,h#9WTb<3fh9fu8-0pQL$23*J^<<ot7@DK`!)n^"-SJ?=6YqQg?^Ve`-<r#b\[o[.NNME&MsKT=nDOubqKQa_!\rflQN[[F9t9#SEeF%@%$b31&mHZ4j^n*VZe^:jC^a"%uPCTeu.PKPMW=)]E6.N>kV%P!]EQPQgj#!#DrO/Rkna:JnFU`&6IcN&9([q_`G]BfE/9;tN4/mU^"5O5S_\o]C^iLfj'&mR%[je$ufj/;>Vku"UO*-+InF%VK5P!2@mQq7,-:.J"<hi>+:p8pedm9oNh$"!,<cJga&JgPq5P+fDa#8fG&/(mXoSBbbdaq]<@JXDsYdt*_YF&=5?d_=kKPrV:I>:':L"8n9-bQ`=/XO=u$j?,g4qLT7;.\kX#_eA%$S:(<W:<iqG`]%P.6'"]?Eb`'+>t!!eBI1,6V@i5%nmR+%8E^SXkOG<JSaNX.[>sL;31eG?0W,?.&9Eq[D*NR;82V<,:=mto)uRdBC2Q/bfDZliRA1LmE[A*MC6mmjSoRBG%d]lq_\g:7`?`$:;L-<1MXnn:gnY"1'IY2e7IQhFXeM&><LoY1!G9>UguAM-T[l6r^!f#*S8DksjO,64-W*%COf%aJd_N)8TlN-56.6k!&F!%WlMbVFicB'AfFh<,ZdYd9?Z%AZdnLn3DlAp>CS@AC@_Ph1)TqWm.a0e1<`TR.nrq*[hqjct>"`W>m5FA'9Ou&FAfLin*+t;e<f*]B4eq-#%q?Z0E=GgOrrA2P_u@>\X/;k!J&qForr?B2e^<4L5KM.anAkH(r6F;Z.'-1*WnNO3K.d0(l\kcCkU*C]D+FRkQ[e\IrrD[)<?I&25D>LH&cVin925EdXs<b2fencJ+8HVXhtl=sRB;ZQ>POBSApA7P_pNp")JQ$)doi.GBr7-C)?<-!1o?^T!Z&2QD>Ac.]u.9TI*=<sIDuLU_NCLEM#iG=OQJf-I-1KNlbEVlWD+P6FtQeIY-rMQCi,Kl'nGt5+:J!eVPU,rEATE)`0%gk76gn3%S+kHpf2r@1ikk?jc<jVm;8Ob8?Ll?NOL+3!#4@MO$eLhj%b^L6tDE[d=r"4a>EK_1gTN+P#b"rm&_F#8?H<[)0W<e?ii@Hqf70B9hQEr=)<&a,5f))?k8L_IRfOh<_YF"k*L(.8$I`:Bh^G6PTcom;b1R&VNB5pBqPSd:<WW,b7FIBQE?URA,cNRjbNe\b?Ij"qEN'``;D@i!#0o=\Y=s3';R+dTF'(bJ-;&Di")N^1fI/pibIc!$/tma'A;X("dPXt[J61=p97b5,;l7r!"#Nlrr>7ZL].@_F];E4WD6?3ESo+A!Qtg-TbS;"VjI;pPlC`:cVFK?T7'*,!!-8erY$kFrdFGMqupj$.&l@*r3,Sh!.\,sJ*10_r"G2V1"6.&kMK,9!5MX24ttIc!9`*5rrBi8Y.fcRWIHGqrrCs^-%G)bGPi,8rr@_e:]CEeC]=D4"_pj.9<:A@gA_0Q!!-98)CXaEr3,Sh!.Z&SrrAU<hsaApppS*>IBWYNn.ho5Memn+gA_0Q!!-988grhur3,Sh!.Z&SrrAU<hsaAhpp.s>IBWYNn.hrP]ORhnTQt"[74bAF>;45T$D[,:&&u5]kPSok!$F@Aq[2T&qHFCKeA%:IrrDNna^=kqh>[HXaSu6nWltBiYQ"Ul)6'OQ2IH(CJ,]M!c!AR.F&N!=p\t6/(F=Ro?[)D]Kg$okrrA[,rrDs$C.%!-5Pb#frrBiHY3q0-WIHGqrrCs^-%G)bGPi,,rr@_@ci/?r^[N,?^[RE?J'YOsrW>$%e5=I`q-W%Z!!##0rr>+W^YkU_nL^[:qd4j21K#;->5nTK[J0Y&20oE?F&N!=p\t6/%SHa$cG&cB-_Gn*7r/,)51e]e%+O208?IC)gACmM!Lg\3ME.Yc/,T>Hi!1QXk?iH2'@-UXi?>Z0!2"&qr!$o"6b</ENGU#"$\XKkUfM1R.PcI\kS-rq+WL!mnc&T>-Ut2+kF/\jmG$b;;+4l8"Vag!"Vag!"Vag!"Vag!"Vag!"Vag!"`sYurrA-$\,D#&hu,-]\dIVJ?Qr.:>F=5O%:;k.<9FBj_?g!j5TLRRe<)"/&_2aZX9$Vqf*B[n5<<oe'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'NH_d<OC/T*qJkrZ*+0u/FD+UmV<"/ir)1s[>F7O&lZ=mUklW,p=t(3=OM4pc.RB0e?5Q!<1A>,=%.0PAat!C"gn:0r!#!MB(:*D"gn:0r!#"VP5]%frrA0'=I8s_Qf7pV;+5O*!,(hGr<9S.!;m$XSk"^RkUi_4!8oT,fe;JpO80%3-3!s/jnO=neBqO)PN)'-$L.Qjp^Ck!Y87-<crX$C!5N)7Z<thj+7]rD9E'@_nG`JEX.m.#0?(]u("<0_n/0SinSe@0Cd7D+dHm4k0?=!ClOs3tT5siobj-eBDiM2OkD)/u*SuQqFUaqT@kpCZ&.R,_V-"5PQ&L;KEXd?Wh\Q4lcr.d]!!/'ll?Y(rX0nA0][N`9="/7rD9p<RkA,ODO(?"nIQumXD_Lq\0>m_5K>H7AnBZd[r@+,HnOL1M6?6V)^1Uo%jb^+nj?MY+rrA^gL].CE1ZHaW$<Vf93MY7\k$O2F$gSH*!2"<05KrHWY!7,g5NjJ'rr@T3PCJKTkU0g=!.a3mAA=O]5NEngQi-`IiVmJ"7<-%[Ma-DQ@K-=Xk*+*\BDhu"5O]Z?m$I;sa8CSU')qs(Er8/Gm-(T.cgbZH"RJAB*7B81`IILmZ2Xg>F%<NCbeG7j&$/G'IEV-[!&M!V\?E:7YPs,S5PP_&51SZ-q?^:(!8ol4fe;JpO80%3-3!s/jnO=ngJM3OgAG%P!'r+Wr!,)3OfRetn<7)@qM!2,d7Xkhql$rb739J5g.D8C!9>5)ZWtjlqK2&p3uTNAYrY4HSl#[(P;":m;T''X%+LPH;?$WXA`*H+J,KN!MS$*gm$g#K%aJDm>XdX8=).o%@qlKO(!k`#XF5Tpf]l1?pd>$L*Ad])O614kf!XSog?>n5(g*V+9<6V=[NVN:;b]-+clo9T;b1R&VNB5pBqPScdn4>OJ.U1(37CS%+f:],9f)j)RV7jPMDgVf<(-tYR,@s*P%ZZPL72gN1sc:BBr*Y@J/W,2.AiO66W@n%!9AO3rrB6*C?_a!J+>d*J(LL([2n/"r/PSh_]SD=o/h7HU9QaGX(jli%(lN>XtTeTTUN2e[3,2K?2joV(]OK^9iQQe9`>f=GXMI!*Ad])O614geh;\@jAOGkl\POP[Z+:*i_.giiP1!U7JRBLL7u/iL=Mr"=bBKmMD1u2Q6;d7i*[4^^r8RmXdH]s5FU@$lm,'>6[s3d2M:CcPo2`IURYAEQH_8;I!XnEf-9#dn'1ZKX^s9G0d%-pi,Es(E.'35W7noY:aCbV[/m*m7O2MT?ieU#Aqp[Ed$7]rUl-RgCH-,'$mn!F;$^d!T$gUFL"p]@n]*W`*jp/oj,)_bCc'JD0oi/GCjo!+.NB_C5oPiNbqhReEG2fWOo)SmIdiEok2.\<>W;QbZ1OYP=l@cs10Q[IoXXu%BEeS<r]>Ve'tQ71)ojkK]YP^>L5E?'W!&*^`cq]YGB%Dr_^4]d=O[LUO<Gth_N"gr/c+&GRuDV2fD>LIJof5-AM7_nU>PYAOc=(U9\Pc%Am(sbm''N4NE"k0AH4g-j7n2keuQh3p"cd)F`FD,k"am]QQ0BV0Y,9ISpPP!-]XSHQhr8P;`d?b*1gBiR1^[6WW6YP*fp!VU2.FtCJtAEc7Pef2G[lJ(`<;aR6^1)rBdQWXCM$ORJT13Su^2brf>Lh4[W)]NrJ,lj-+>i<WEtg3$T]RFp&<.*hE.)GB8.e=1V&1Yurt_&K6bH7#jPmcT+-OCJ'*Cq6!jJ87\1F"K0I/8h&$q8H/[#e!SjsS?oS;@$Njr1EYL[]uDgV:^0(f;Po_mho!q>q3j?bGPD+;+(*4`0_P=2T$(22[B'Z;3s7u<o)g@<:H[]hN,gGB2,[k\>u(lM7g.8^'0LWg2H,-F8Eo^VcA0p9dO8[@J4ZR-UH;8qfd"tD*I:]-nqr<3fCXuQ:n4@2Ds.(C7?^8W]_Co"aO.bkcCn@AE4gi.h1LCdqks@S;-W=oQU2o198Q1OQ\EdM<4<!]SeRgs!*H>u-#;/bg-Y_H="TkTWmPQ^PM)ef;f70>;-RbqQ3mgNSto:3eEnEITm9E*qtj6X-i:gj&&sW$?IfX&$XW,;UJ3Sa\Va%:D:H%a&5qGc*&_b%4<B9UV**1?Xia@$KJc6Fr^Y-BqXp3O<RXpK^Z9dHrrB6*CK`g78,4/"T8#SiO61X#;+4r9KiZ]Qj;E1A!*in2!'rJSX(jli%(lN>XtTeTTUMhW8=BB,ambAhMHXZkE?EEUafJhTrrC-:VZ-YJ&cBmiR]>8`Q`Dp[Ig-sPnhYDQq#:?ArrDBT^[sq%7l&ia>:`hJGMHe4A;Bn=/XCANj#iD*FmLVnCNs_Z^H*4mo%Zd*e/bVO0[E'KC$(+Ib/!7"gV7+CJ!$/j_lVbNR&"E7S2`!omOHZu#H?d(mOKd,gJbJiZFQRT&\X`Q)C_*0q1j,clkfc.gu)eU@nef1>BKkH@6,3=hf&+sM^=n&2VoRc$<5fm/7jP:c+IhSl8+Rt)H/J]L$aF,Zc2W`)Hfb=PlUVr]0ST/rr>oY`G:o09A4*hokP)jlbE+>Qs+d$)n9:`>JY%T&jp^UeV!t=<l[>\@k9A,X*VEq/WqS,F7u)D5T/KPKV+n;R_9mO,@k9!0HcWiVskpnobCNa_AcVdOhJpN2W@r/,Ti4)+,rI+jiu<^;JIg)+5uF)p\'q.rMn*bQ:Rb!Y*'#h,S9i2Vu+AG!."ZImF<jXp@;O)1Sg-gZJ=/Z97t5Mo%0LMrY;_QVOO]1CD.[KN13U5rHJ2-EbT$^9Z\RM5FH]7f&YkeC(qH[*KQ9XkUWVT@i43qC6?u<qa[:@?#SW8+)7-[F.^(V)"tru:8^;P=ENd(08Ed+3TmZs+_QrTT?O]OCMn.C2V\C_#5$7?F#@_#_W#9(XhD)YD$@E%d*!q0K"tra$?L_6T3Tu5Br8#l)gAdarI/9.,Z;&M!3b\FEL!F@M/QpriYRU.eeN##"*eO(!VqB?,M&QsL/kJIqQs!9/Y6?"EhBj]c_i$!`jSSbW-*6/Io`hKUL^P$rr=nU!(3/I>Dm>W9iQ^2-5O=9"Z_RiOHq-#ap:2#78#^J>2.n<_RECu1pTa_O[L4#/Wuci#TZ/ja%j%VBr7rchfM3%UqPAs/5_K-6^N;qm192M/R('^L*W'V;C#Bj`qKf@CimefMK,_nm`j],'kc_*NAXJSr^Y-BqXp/W)Q.0H!$gT\rHcXj;;M(5aN"t`a8Ag4cJj^0XA4kWg5l/a0)kq;MuNe@-EP]UOgN\<`0f?MZAeXB:-51]XBCJ?+8HVXhtl=sRB;ZXSsKtG1qbNu`AGaC=ArmF\0.6Lp5^#>cmMWh!5Oe('e).;[+>3'a[Wjq.)j0]-./4ERVN/SnTXp5FT2@=#rJ5tMneHjVuHbT8Z;>9])0mQemnW`qjG$0%:T(H0)kpE<hKBlJL6T)nSe@-[/U.(#rHuFh0nKNZQJ:qgs*0"22f5g^[ql;rrBiu8\;sVoF%o'!5OdgZ$k6\KBk8k=aeNI1t,S&nSe@-lp't^dJj1]DuBb(5O]fClsFo0T_cl^Q="\jbr"!H4Bqgc5e@R)#W/#u=oSIeb7FLV1j^%pIHWl$+6AjEbu7=oQa=Z'oF.u(!5O4WQf??f#$?B56)3)HlgI.4R/[.;^?0,J6Wq-)Ma-DC@K-=Y#*[1!BDho`5O]fClsFo0T_cl^Q="\i9f1FNOlF^`#2&qUi'F195DoI@kSn%3!.b?8@f*@B#M*D_ZMU&;dnNa;2i@V8kSn%3!.b?<m(P"M!2+1irWF-&Mse=O+'FZqbO/rj9f5`5Sh'g@TQQ=p"<((@poj[Jej&pA8$RKohLk,Kr`OZn[VD@or/[-cp$41_fXt;c!'oilr!9:/I32Z7-A,.E/a_PT-sf-obIE^Mi=8Mhf$CA_B3)4Cjc![C>p"-nU5CIgm0Y89J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J3X(e~>endstream
|
389 |
+
endobj
|
390 |
+
103 0 obj
|
391 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 338 /Length 40380 /Subtype /Image
|
392 |
+
/Type /XObject /Width 782 >>
|
393 |
+
stream
|
394 |
+
Gb"-6#?2CE^8QD)>OUBjmsXZ;HY2[PF5gJ<k005,AmSmG8_o&SDF,"*"UPeE"!WOL+=KfL0jmK4Y@87M"6PCF.On!73JYn%NkDC[-<DFHVP3s:CTlisWclpqlM[d^e_\jDkic].ID#a`z!1:SNQkBB!!!!"L#/HH'z!&O_R"98E%!!&Yu0I6]!z9n4Ynz!,)F-#ljr*!!#7t?qLD!zRK-7fz!71k9&c_n3!!%Nr^m"g!z1]aHVz!2'WP,ldoF!!!!nJ11L!zB]>LT8LSIKAKCe&D:eeJ]]Yn(=eWK7ei-Yqgu;*o\6CBVjrO@*7(rNQ951[2(]AB*GfE@WL?UERXs!cF!!!#1i*/m3F,-%M)qKcOYt-(t[gO5rdIqGhn@l./$c8-Q:K^9h_Wg.>XoqZ)!!!"LT9aCM-.[5$mb`%gB^.hX%K)9276IhCbS#BW^eFV74o);F7t%n<fEU@/c1D*RfY8tM*;pEE!UGmE5-0R-.=C0tf_7>s]mjQu=\_nadUXL=f-eh^f.td'6VI5Vk"Sp'g.!68XD[$Hre8*r]Vnj0+V5BlT`&mu/AeGiCG:1O)sd!sBo2l34SlgJGQ&KIJ17Cm>?L708GNuPnLs,SJpBLQa^e>e4mq+O)?9a;!.`&.\!W>G/c60qf_s]@LTFUe'=cSb`'WSFNbsaI9md.@+s%=rqU&5o"[&V;7/u"4#=B[IMVacLNZ8[g;"k6mmp4*U?q\#%H.fqR4ts#di=lfrVg@t2R1aBpn(QY--VlKDZtuLuH9]:#OX#A%XrkZe=DKU-kJ)st0I6e'K_pRjAAB5FMjr;HP?iIi6P<hBn-teO(5crh<\`CicMagFz=EJrf)r8@S;9LQJo.@%2Im/7)Rt*:=I.FJYZ%#-us'%%Nr<"Y!N'"hqS0:mL1?,_OoE.rW!E]'c&+nZ/W],OJ/V3QIa-<G;*t^^3"9$M,Fn)WU.:Ysur-+\0s3,1iMn=2-WrtO+I`5Jf>72%A$E?gW.D5[6oNQ7`Y:B(6Z]fl'd`if5)")B$ll;qWhf=\Wzcn/UC8g87B'^P0MnbB02r/[ATs+ab-,CK,:[.ALlMa\'%E$)ZNEZQ].m6Bku8!s<PoUJ7UEhFUr87bDEo_i9(eiD4-a(O:A'YjU]l*oQ1),&J$;j-X':]Eu#=Wkfc/`ZA6<.jZjL76QcgIL;$FROF;9^*EFl(9u,,@dU(HX%"Aa/Sda>[ma6!!!!7#2_25e<e&)oc)J_-R'<r,3ThDKJDKdTH&=38<7+Adb#u\F+hM#>&o.DMsh),,Zfj.YE(-k2tCnbX_RQ(d^t:KS&cQ.98'F[bPt3u-&5E(/8bkmc[t[*pc8@.S2/?R,a+j2biF7d,TC_.Ynd$K__EIO\1s):m)J?4Q3[_LD^`!RFkE!p;o1cegs6l=!!!"L7E7@3^@=X78Z\\:8)*iP_pNs"cZ%rE1gu"d@_2&G!+YK$BSjL$*F?^%++LbFVDGH1n,/PeIm_ufDp7MmeX2LfeBPaD7c4/[q>k+"6U1EU9r<U+L'0/8k_]>'QM_!M70D9&1m)`l"iWX;Zi=l%o=Xqe+P_k5QkF_X@Gr/D7`qoKaaZfFmEb/rDE75V2r8PhiiE.\!!!"$A1Y`-SeQAhjh,tmrC2@*-%,82g8.:qIfr?8NXGge!!%PPp]aY8hYCfG^*.4T'*J:8!!#92/B0Cjz!.akG9F1\!!!!!a'4=E4z!1Emd!WW3#!!(@KQkBB!!!!"L-GYiGz!&O_R"98E%!!&Yu0I6]!z9mhRB$/.#A+]ECZV6TGF'g]nGX*M3dpq9+aO[4=YYU;)>3Ti//08?:1$2G$HNB_fM[hJ.0qb)aVYHLD,M`m[l;jPk4DB7LM]ZQ7BA7T;aE^SR:7a3=R6Pud_*P1k,nDo4XL>JP\>3eF1>dE.DiiuqLm7,BKs.[$-j,0aso;T`$s!aS5-#9?&i9ajuHlSdM1#CLSA0XmeX[ok+:TNK(r@W%Alo2_/]>JHtd4J^R^1GH:D'KsFHRcn]hMQ"6](OiK\k)G0ab:R33GI7!3Em=E9?]P^?4YB*'a4R;p_imN;f^W:3Ccg#Z\IFnfp"kRS*PnRVE<YZ1aN6b1i,B8YPka[&F3(rcSkCbG+i=lhcXg9nE8OB0AQCXph_#\N[]h<jbI,CfPSD$Y(J/7Mn&`I=!C2t)[cGKfp0r,qj[Et$r(j-@f"8eJp#T1#)5YmiqAV,=DMB8;T>,9(YV,2pi)Fbh15l$iDpt@Y_jp)c]>F2!)o>+@D;tPr@o+De-c,kMu"MbfQq)@)rP_i*[Neu6t9:'GMr[67d5A';l@.k,u$3;];,#?lV7mD!rr<$HoKr!9$9R/>5OQn%']sKIaaZ5n[fj=Y-Tk$*hSd]r!kjX(%<,;;TGB-fB2gg.>,d-<eS0MB=$8b>5-(DSd#J[I(BWtl[Nn%6<;?j3)?U:#\%?)'mHd;nO4%X[Fu_G:OA`>V]N!K%DPK=5nK7,4$>oe#k'0N<qWlaQ%W^<%NG/5Lprjg8tt`Y+!\Bb<?i.^(=>?O4FO,a.hQikDC>>8=d,p=D*;C4<A?qbQ)?RQ3BB2tCoMsjT(WF8'&gWqe)>(I?(LA"8bN1?$4"r&d(\@f\ijJ;J<.=ENCWX&];Hm$f<2")Y2!%(`U14Fh&`]2[7Bl,0cq&>4Ua5k8H6b1s35D-H1,;P7uYTCNRQ99V9VgO$&q"_HsnVp8PR!H(M?I"03,V9qgFuorIN*'S0B3>M0=mk&M"/W[Q@j)Q-Sog3)XrGD"_,?`mpZlrb1h`o$_%!?J4RWB19+Kh]1`LE1(N7,'msXVj6G=Os(G2+i^Z.R1kEFZ;730,]ifp1&8][Z=_Z*^B3crd0.qfiX).lp#Z&fOk,<`4'PiJ#9S?K1$)hq<OC<)4'+;\L.6icjn?0"r.PeGm*>,YERX\N!<<*"r(qj\ll-7Z?62$OHL9BnWoNs9O5@X^*_ns3f;r":VrLdg,D$d/T.d8e(r*i3R!h>\W+"l3YaG^`(O"4koIdru1%[JH\#ANYTs`&Ul_KSK)JPYRg,si=[/e_#C]`1VTm^G+/%!nA1\$LBXZD9lOeLsp)isSHK!8[faem!+g1!C-/]A[B)6#a^lFaU)O"V:?\t6p(.>]-,UAin2k5KT$Z%J=4hN<&d;o#HW$s9"mNe)B0K(dB'N)j7u;sF\rTcU>qLrFuWf.TKr:0"&lqWg[FkMm"6S=pJ`8FrD..npF(h1DA!:Z$D"4/AD:d:>kUm!SN7GUGBEUj7)#<6L)!fT:o6pt8^6eJHr,GXYG-Z:'aOaVOHW]lUn72G7;8=/(j&lH/]Vn]5Sa9%Y4!.CRXugI?jtqHIX^ToPU?lKacAf@U:uqi".-QrTS?[LUWcUC.7CPufkGf^C>#j*VX&(Dca%E@W.DEsFcg#IkG>"g@G_G[Ocooe:$_l>DK[M<j]C$!.a_>Zt\Vr^PF_`PW5<RJ>PXjPqgk)lRH.kq;.q#XWK5mA[rUmQn&G$]Q5.!!)e+^=e_Z4AS.gWMK$3'2p`]*"ijqp$KGN8!CFZgS#/=(;%sXAX;#YAU[cX*a[K5O!%(sV8"&g)j-M9-f!$p8Q2^'M8q9O'/+k))QrO)8jl62>0t*XA$mW"hL[F[ChK!>%ns("_`\@9j,sY!&EB$B^oK]f36dZp6VVCH1G,?;qs-u+7BLdKXZ5Eq/@2X':h"?9Yjf9[-K)@>%3ZSBHA<l?bUI@-NJr]a3^5a>H/W:[6F[h?M'F?*BW"P/;&tBmIF,fB\*EI*),?F7ne$kF6iq\hVl.(<e&'p7$s+Kt:D[_#V-.t*lWQb&hFUGEK!=9mQfWr,K-F02IK1gmTV%!D">qK0gSAlO:u'j0M&do(Za.YCH&<X8E".k0GLW%Nn4>L3a8*)t4Ec=b93/,Z5D@&Mb"n=)F,6j/E(\dOG$7bj4lRG_I:;[3N)tQ`"V:RrH;h;SM7/;Mb*<a+V9!K/K-<G86M6+lR?Ga6">P+$S!%.&SLtI"!!!#dn]dqA(fnSDZuA]!Wqo@$aJ_5&:Hb%kl_(R^,=]Zu-gL(m;_m31_T)0"5"j7n#3Br91HP.]lt#0UJgH".@`'Xn;tY5@N(fZ2@D3"&:^IIPm_bF1bZ\l-PdkjKf-lP/pUf44Fa:Je&U%JH9kd&+E]<on9]rCP,j`2/BgeLSC4P`^EZ`8H=)n$jWd3f$L2*-4h:k*2<Cm2"\+2u5l'+o&7Q,8*FN43k<.`/ne(5ZUQ;p*S,>p<s<a\]dW9f=;?#cYc.slQc$ZJg37"9PCCB(>k\$*;!L[C(RT@6Y_Y]Wq4#Fj]r32o>UQCZ@5Q<pcRUaEl`<jMG4g"(7R%4.m=.H]S)5u!3qI!#:lIH<=(c_GMR;7i@H?L5^,ai+3gdBsO;rSI8WZ1:<(';kC[b0jVhL>CA>1;m\"KNi*%$:nbO@T;K]bGer"59)EF8W]pljj"1?6.O))D-l,P7%8s;@bD%d_MLF!hcssXI(Bo%hZ*WVk(=am8nDQ=0uqu?WfP_M/'JEMp5OOIQAC;'Hr1&e5FD2VFo3alP>)ANHCN5jY:1=nkB.0[NbnE[[.G&%'+i)5q"TK.f<u8'KTu%ADR48M9SpqF5O=%G7dKceU$dPXS>mGmL$^bC;0[6(Yml*k(6fS?hJS<HJ"rM/iLl*kc.6r3/)'5M5,5%Dc1O6&7[/<96_@8t`h"R8p@:W,k%jrCf"9hGq5kIGD)^Te0B@up$A&PT=.6.LfGb&2@"W6HSd.>.&=\*5gb5'.oAp1.kKP'qV"6Y5@;*@I6:o?3=3)=uHBRE.m!Pmpa)=*%D!IXNl6sF5rq;2jWGaYj&N7p+9u$8#[rHR4M7["t%Ol5t\&]gnqM&c@O_9q+:i*StBkE:5m>p6t#1Uc`.1*WX2\=%:Ds/D-]03UR&\3#mTn$HlFX+^`mN$**EBAka(DaL*pnflXp2-UQYH?cPF4Dfb\$PS.#JjV)lDE?QO=Ndh1=Y%V:f/m4e+Pb`C):5F(J/Q^:*=/]9qn_.9=\-O_\%`N]eq["0WG6U!2(omZmf"]3pt"i`89?*F5@HC@#c@FY+e_=K!%14p<+$Mb72T[,?9jTVM%ZTSajM<76DIKIW6_tB(bh&T!lWC9*h[DM:\Z=8GomG54J8G1?rJkRr7s+\94^SC,kS[^_D^rNZoNYHZ:reXlV;_>Q9AP2+qQ\8cZ3k:.EG3:OBDoLnQ,;mFFXKX0J6k`2_)8^"12n5U9ICDnfDJI\St\e;6^=3Dc8/G?dFp_!ecHk@&(5[rSn.L6OK.DAJ_5%#_l.8qP@D0O$p)249HaK,T?UU<L\92Fc>pTc%Eak[E#2`5;M?#Q/C3$+<g*>o@W7/&0]#E)140]\3c!oJ=/0Y57APMG,'iqYFt_q%Q;eEoVQ6XfQAE2T,gS9`+7IYik^,!\*j)OH<=b2.e_&?t!X,llSIkG5\f.:0cHJTp^&CYJ?)U]!8F=>`JH]1*[@3S2Zue<`on/m<1:,jWH(gkNN"sMReSK$$lKkO6Wnqi%CPTE-hsg7BX'W>-c).i4.`NrO;aJ"TSN&n7COE-NQIKn<tstT5+GE!<<+%k^Y)_J.<._'KrFcq2:C9!!'f$"&'"$z5SINtz!!&Gf;ZZq!!!!#G`&F(3Vj^d[O<?i@":5^:7@NATPf*P%zMi`3?,png)PtJ["\fdc-9N=LbHBE>V%ELd=U&Zs1JLJmObe0@l69&+2cD[I)kLG(kA0;4%!uZmr4j2'=.A;N,0GlR5$o6PXW1lZBeUS'=+:94n)2J>WbKQG)dHPcFE8B@+OO6Ne'cf?=#%ShY;#hKT5SWEbB&62f4^:cYO6X6:q;E2kFQg@UOF[g.!G!;T;4qQiGr);RhVR5M@J%'kd7._q`:^0'odl'E6O#;,Muq'c7\;Hn*sG">i%,XIB&63QFh#0"^>ZfS@h&cRPPDRf\YQ_!roOs:ZLugaHRH8tnX8g+E<O4-qo`mE*C?)1<HLnckq53\MG1qZHIKsu,R_OInjSmeUa\CF0CiNVmLIuY`)n-oYocGWIU8+ebdU).?XM-K4X:.bO1<Y"KJ!iN-.sE\@IH1eY:='*1N--`b&e>qOO7rrEj2K0]qk>;-6pHD?PS'<S)2_?=*Ld)H,IX2kOgGX`-g='ecg)#]$8I^ls"shs3T+(HG=cM^^aA@K=(bs8c+-2'4b7]c)/=N8_a14%/4J3).FZ[M6"<WkVAojNeo'7*R-6TT0Ihn:l%,`OLAb3?+bFDFXOr%p@6,N^D-F!]&'::+U77>Z>k*@>o8L=aO<&<T,2#\oBfC/1rQTOB8&JpfVXpTqYE9H;JZo.m>otC?WG04B&97IR;"=5[o>OG';JoVW`F7)hRin5`><]VDqnQC^]?1Z]A8&k&J)T?Ikp=u?/G]D0AU7&c'/D:"pP;;dGpshh@GC3d$n*/8b_-ckNu#C`,L-"C!j1n>=/NJVM#q9?.V0bnHf()XTR-9)D6*RGk3K*a*KcB+YU1qN5&BA4"(aQh+q71D/\DFOB,382omT*9gC6gmb6l:Amf$7Z28\b.VAjso`]]UD%',Y2^Khs)^9sFk8aYWI1:*O+7!%"?uf6`94iRiFm?!`Q:tooEW;lH?aZ\&V*GQ_VqA!SRXF[0B3n7Q2Y:Mqq5csHk62aEHqtGu^><_'C?R:*9=qfN&!@Ob/WVst7m=k[+Vq>:>r!:q@/VkQAlL.>[GG&!J2j?p9(oMJ1j0;PbYI]8>dhSp4n2*nn%_1-[alnq@&u$'d)7s8n>SB`/R`cqDGB"2c5ha?&n-Gq#-N/,>3;8Sd^9Xh%qL-D%";R1r]#X_(pD\JG(V-(YFGEo<QZY'[C`ZJlI9PN`-h01g\WGbINdVuZh%1uC1^m^TVj,$.E%LU`*e;$Dpjh%XGcFmZ%Ij7TcL;"WPK4!B7,/FhZ>c]m:GG/Pb_2+H;H.;B[1Qb<G?A'T7[UGTV@YaAn'[0RpGOKg.j0:Ggl%,(A8mq7R$]jDEk_=cQ66OIAsmDji*V&OG#!pK#YH_kk7SnYOA$?5duf!60id#K7G(V@5eQe$[/9`i:]fHmm,'K#]ud#NcR.cG'PW-&G)j`*W8?$[q\+XMi++B.90Y!)-(e&==*`e(qn;a2gWuS\E0(ZD0oIDp+R81^i2AU^O_Dh0agu9_U81)5mB+%'*Y<`OV!_!]@IiEbLYK_HC\l)RaPE#[,W$Mhm#^%k7/!1A#;XSKKcgn9aS)ZIHTG8rTL!r@MO$\keU[WJiF`"m29<F>d%CZ]>!pIUN5b>W]-pNkh:Y`!qFJWC4!<*]rS4?3-O9OS^6+"iqbq&B?9$("o\([>?@JAr^W6W,-WMd)tj0nWXc+e&gIm@&WpY*NtcZR,@rltBYUe:Csi.B51GhDa(k6l\arNF)@j^$]k9*aetX7ce"M!A"!aF]UKQ%T^O0oM`&_/$@r4QgT=aePoD(k";c?U^6\@-ms)PjVW_.X+k(]?M.lL_GZGgqV)`;dfY<UhM2F;=s%pGEj)F%K_LojuujVG*!aN_2ZNRdi'[jUWio'm4$Vkr]s<&?FZ^([jfZ&HD(<F*8(N#8Y@r`G4&o4Hp$`,+bgf%)okZQ*bnL5RUXMN/RTl<^:?Tr)qkD1cRpp&47\`&-In9C;<r>K"<1+5I^q@Xbm)Bn;Xh\Po?ro7@B]^*a9A?c?6D/NNRi=g+ZXZ/=uoQH4s1]ZR)YXO16g0;rc%.)-e,'HtF[Y&7pqpG5'Q*"T&qS+$,*6VKl=>C'NE2]3k&iD3[)/$=/mCNmO.DlUI,Xc7R1ePqgC&R?>uY8SdE53/k:mj]:J.Wp2C+S/NCE;G0XRL;=&&ED^(o%KfG!N<f;552V%WTc4i7$T=r]NEjHDI!,sOb+Ep?UMHQL:.oG6o9)X58IZ`&?E-0d;H>SIAT+&Cln1\Zhdu2g>N7m5mp\!?ag`SMLSa'qfC@qB&64\\[`S0L`TW_l25c7I9%SoEAp1B2rqWth7*M$h94nSoeiAa/".BFS',m"&()m';6@-'a+jo_drkk@g+Gf*_fZc%56sWK&cK""eFduBQFs8sWNU5g)J+rcg[[Q&p9s%!0L@=b?FFua3e4_IW9S)7Y0'%Ia?9$":%bVA*349e<>S(n'cf)2<PLbS)QE&-2moY3'hSW:]3AR;NekjSqTf[b>YJ.VK][d8q0>711>``K[?%%6&/4]`!.AHu<-8Nu2Wg=W[m#X*7>s1]qM]SA=fW*e'N`f@>Bq63+j.WFS]t0DJdg%Rs/Xl9RXFbD$G145QX*a0JCpd6Win(j\^:tnN-SB*?h#Di$o&.)?%EYW/b_1B+dP4Y=6f^h5j"ueb`%.nGGdS4VLH46Rf9$NeO0uo2h1"eLujYDj`U5:-#)#i_W<P[<6YO;Yo8UmqI^*mW$u#O7D$sEP#Lf$TMeWS"ZA2g5##+RnaKrX$H-Cd6&"aQ?$hub1F9D-:JXbZ98bj[=FAIeq2q(]^0+K@FiAhjZIC2_bfqBhkY3HT^V$NGr=H)@+'/+-Zp%6(0fJVcFRSmtMqb?GABfhSV&0'VmG7MA\oPRoh*1OP;b]Q2)>^U%6B=s&8Wi,;8%$V'\&&H-!Hi&+XiniCBUcg*BsSms;@OFB7MQq"<co+Rfcu<rg!<s(-*>MD$InVF#WAUtH/e7iQB*gSB'mJaK)/q/PS8]YAA02o.dui5_B'/$lKcTbm^>u]dY8"O4Um*ZG%gc6^2tlPO":)%AWubf^.%-Mq[+9=(YXDMcstRZ*cFuf:jliFT)iDfnuTF#\KKN9F.ft5Q?uh1&[S\h/R:/bW&cR7IJuheCt&2kJ]poTR1TU^YHYa,YjoX@Pe2/2:PBG/(8"LSVJMtBEA-UL-efdKY/`bK1_q)s3t-.'<c1M-fOK%u`SDpm"L7GlaN0232b-;Ns0Ja%QD`K^Q!HsW:NO6jB];I]ma#0cR<^S7oPgq7X`\c/A!uUXR%9tGPgb:<C&3'k[l;:E@&\iaE,'iMG>Cq^LnXB'K5Ormp-rcs"WJgoC@8efX0Ab'Y.E]>?9ba#_,@#nk!Moo>?X8KhMQc$@J=O&lH6B(*O(@6pURH)X8[*NN0i)c'pO5c5o.Uig)#c,WJ6<[UPb'LWu@Vt`Fe"&Pr>\/e;YnRC]3k<X%X*-MkCG"CM$ns]A"md(NZ:?+ClVd%8kLG1<pLOC+dPEG87ZXbtq=G]i3B`='^2pVlSL6AJV>TV$*84Ucf5=lc*2.C<VA=:_tSe2cJNkWc.YL+I)N-*N_2EWY)0*elln<brkQGD<oD-;YeT17L1IBBt_eF$Y4^dbk*<^I%pPAGll^:<D0?`V)Y43ZfAl+XGL-"4Kbl9IsEh.]6!B<k=5cjbRalNs4QCDeRLHT45J0-:IhQ2Ri!7uCtA%"IZ4dceDB)[)Ob>VX\fO%4Kd03\SEiSDl2%8ettJ\A@.Ir7>K0h!?&sD'L2jX&-[BGR5\'EXf_!YmVZr]LQ",HWp%fT2';u=L]YX_#,4B/1@o*M?!U_V*?F?`+et$U.QVZX%ELd=U&Zs1JLJmObe0@l69&+2cD[I)kLG(kA0;4%!uZmr4j2'=.FlqtFEVi%7tcgZ1?6ce5jAFha?UG)"u6_nqN71);Za=`.QRRfB*P(1!$DWU_>K\K.%k.?4$%Li"TZn(&-W%6;4nB6Pk5'6%KM#-!!%fVD#gH/+$aoJ!(6hf5SRl60I?YtU&tB<$31(#5T>5&km%b?!!#jr!"]=f!),sKJEQt5L]RR,.*r0+9)8QV#67"'!!#E<2OJtm;D93gXmijS.iV\8mCp5RL$qB`@bsmeO-g\'E05^D&.O&@<*m+mT"%rT;Z<M#98gKNahOPrquo5nXe:G4Z(\g;Pl#giMu']n8&X$Y@X.(.WRK7:)&?"'GtT@Epi#DRJ'5o.POR\V/a$c?<*!Hr)m9d<rZn.0Idfc/(-0j=@!Eb<N[Wm_hb6m;U)h@;od;I,h:/,Q#8H!&Muu/;dN;<3`<DWlIK65J!4\o%(d-#7rdT\:e>B&*%VI'!$\u6ene(*k8,E5P;XCQ`:^l1@B)W7>+,k2<P#h/arf5_bR'O>d*)8!#CE66-RmhV;UL/MP:s@t:ETBLH)umjdoiM\9%8:>nVDKdjPHic818^QrTU9dN!`N86VPFd1h:q7.:EkoPa^/sGlaZ/"PcuprSf/L25qjM'4>5CN8DTCB*pC5!CuZ+Sp&:@M5OUI/Z:Fi1IOT_c3P4WOW&p:080Loa%_`e,duX8S9F3=,TVp_8P+[VXba_`Ha%.7--,sFl6bBpB(eS?b\VZ#RN[`7pig(@;DZ%D*.<-uEir4t'9k5OLL632s@URq>)I;STZdaFZ]T7p;<]kj>a,nG.]?q/XP_d,=JEb;"PS>,%><c`BYNUgm8O'UK35EKKnr*8Zrl@(g4*p2\=nhOL1?AN&>CT]Mhp[ehMOk\/@S&7P8g]O.)pf8uS9D]>hp,'dN@-72`(Ko2HHKUDO80*.Z#Nr`bB0qM$\ll8s2dg@iAD.lcfo3Oh3\g1"(`i4X?Gq8ZEIe@U/6[B?cH"mae&`=-Z4W7O4Wr6@PPVENJ-H[":>=m8]W[*27"@KEf.>1\X[CHit[p0meN:V'[Yp9$?"snki;tsqUpeeQkEY7i$W#\+!L(f?2GkYZqW9N1lZ3J%+7%Bp>7Xn]UJIXc'-qQ0I=]r+jQJU@4t?k/JI"?&),u*;Q3Vr]S(auWO`6$->U)IO=Qp+KlV;nKeGnnrb80Vj9JpF5jt(m.4GsJ+nQIm@6\g47['.jdJ%RELun1_;d/<09[8?1q:@M1R1_sWG".XITT=pZPN2b]aF,]0$D[(fqiU_=e;g?D`j?EBjQLHq4,S#sMjT.n]hhbi:Z&WI,0!<5*rYQ?mLa7Vq1BP:j+pAm\p.@K@nMp89P7n([Cr=J#;X\9h:6Blg52$8.@&QWgo..uNFJ)RJIRBml45u1-@Eh=ihkb]PiTt!gu=LB)]OTfA=n[kR<ccR,E)B(RZ0=g.D\FWoTlIR+I'REB'.r;n)WagRE;<O.-7*$#C?)XR:PlmbS4!E!^E<bkDt!/?WQh!9bEaU";+El?OKk`alO7\oTLX=Fh\#lO#`Sj;#9\Uo_`pueg5da8cDdt^M&jTJt;\okpP;scd%CQ=j$KuQI2luT,]#As6L1qMSQ0b-\?>G]2U8G56&N>lu*a<J#?!?84t]Sd$:A%qa/h;G&:ie7ka-f]7jcfioUnRo.<Dr-RCckYb*A-A&B<$QfCf_O_;$7GG$!k_!ZG\-VgN)XhspXZkIXL4)kaJEU8LU_:lc=Z`0Wt,FeK&,C2@X4_I]FM[\f$;kcN\aZK-%LL^>h/ae,8@[6CH-X$m\fZdScb8r\5f;sagjK`J]Qu#B87<]N^oTOU>M4_iB@j#/M'f@nV'B^_i`R6Z;2oU&HW2s'ii7P59AUQf@l2gatS4r1`^J$DZQ^jl/EdO(tac[]Zh-'_o#=dM+O#.Bh?N+r]Pf2B5qQQ]0i]SSVD^8hBKN'.Y55@A/_L;)hne!lt(lb!+D`$^pgJ&'tPXbH`W>&jGbR['M\Z#I=TF!(+'6!<0\.GjRUbgb\]_QFe>&cRi@5-*pHLLL<UL#YKpQXS["8[npmmg.p;rZZrV#DU:X9DD^Vp<#!D5$E%`p`#J8ijm$%;7,M@c)Uok-.e``,"^:Lg*:C^LuUk_,P1+(1QsO`ese?rf@tpq>`4ifsfQ*oTYWXIb(HV+an-%9*p[c`Ng[tqY:M$,?G9Zci,S08\:]IS<<.^*8k52D[!nNS^3GWR*qq-,Es6faD:0C-j6ib(:9;KM$QdHRr<DlH&[(UhR;PL,/J$UNls<FQ]:1\M;oA<Zcg[K3>2]E7jhrQkj*@rr>`0CMDr-*+p3/6*)&pH/bmBFa^;E9Z^Q.=BA2\kp=?8T1\i\;M8*Jh:CqSI2gVaA-Bbe*=1%`eVk6VD#itThE"mYA,gfon(-2HRJ7D2MITbYP7bW-_$C:=d0/M_Ao]3c"A-T&`.tdkVJ+4'AKYM#ms+,I_\5Xls6K%f'k2*kKn,FWu`a81kFGg*WR1cr2Bb5@SY@rd-VB8qckT5)G)bfKX9F9&Mn7uM6!)W^r&-^bf9M%I!kQ$-I;(uSJ8:Qi+Xu<L<=iaI5X)%;)J19^f?qLD!;#gS-"kirM8O%ah!!%fV!.ZKE#%1("!CR.m5SO1u7"I5r;pl1!3WK/S!!",KZiQPWIK7ar!"];6!)]Buk/W_5cOLR58<=r[Jcof8V>2jBXBSIDBf/%(.FWP_+@4FmJgc-P$)0[(BmraTO$3V:WsP%tS_!lT,i'f'!_ACq$FGr2Pk61dF?kE\;#gn87"I6/R$)nDL^lt;+:95WRMH'ci;Wo-\#%35&PPb\d^85Z"b6a\6id;3Ih\P=rb*>Vdat@4dXR[4)<]nAFPTphLY;P1*Ia[p!2`Us>,i67de.kf^]Z]T!n<GK\[IU62D#&1dWL1Jd'19<:aiEDW0e?Bcpn'D))*?:d$Z?=["e4\#u#&ao0lSE2/1gRD.#uO+p(FE!-DgFf.:N0dVG0>GP`*1DaoEh1nbfZ:NYP3$gM^5;d/+XFJrG#gQ[4;!K.4;,ll;W.EO64c]Vg_f-i[dbcED-&7%/?=ZoMf8dcUm,s_J1;ZZr)R?HogM5Gq8*8tUp$?R#oJ]?^FRFjtL>Le40ND_/o7i@(m(JSGLZ`mFerj*U@bNYb']V9dQ2EE='=5:9J4YIfrD3=#YaP!>`>nPu%k;f>lAkEEmMs]#.CqS=J&N?6e$p)uken2gjN1Bkub%&VcI];lk8a"W3.WsS"nRY)^_cQ;O_,,Mf-_e$g8a5\'?eT<s^m"it"&'"$FCn-JL74;'h*.?dML"cm4/sjCJ]?][Vm%c,6e-Zmg4l".4^E6f:j+ia?@#S"T01;j^RQn\.n$/-gjJo"5M8IMfsM:[='K7h<jF)mo)!Uf[HBQGKkO(/\(hpe:&D"+@b/<p9Di)DnQ![,mtRs)H-O3d..+^U2)$r.Iq*X`G/am_RpDTtpP5WtE<[X6dAqK(AqMN5^_FSK!'jV_,gBSg.:MZl9gumnM[pb"T;8Fcm!b_7pl,qh=4\0=]4<E\du?NCT<pH>fd5(9R972O9:GG[RShRA<A6G3JW9AoQXuZ0RQ+4Ufb>^FQ&QgMUH>ng<KYE,3H&^9aYVW+)&ngBP%L0)MB41!Z;F2sU?W)/`.e9V)08qXJO4n\gnN2i!dPi,U<&R6/=Yb,TP:Zud_qN96J-be:h5ZkO5G]eN7=Mndu>Pf@FpE93s'j/I(fJ'%R4Xc.?m8Q6deaU7YHP8$4;X%>eu_eibp8\3#NRGDr2=+GQ7;2,AOKGFC!Yb]t]/[9%.06jSIo/.o$;'hWU8cNq+^oqhEtmQ-R)ohjs"OJPK1EDqLaB%/DhPe$pit4aZn;9Ee]'V?AG>^m"gaB;Te1:RVpi$MS)l1<IMcU=d5FhVFl3,%P@<IcVElTE$QDHKn;SCT"C:T3"[hT>NF9-h:MTft1uUX*EYQ]tRfrIuEYrQ3-CGHfXo,dMj",<M_>#DO!X)T@V0Up1#$qccC,IV)N%'nBjsV,7E9%cjffG?1L`+G4[g[l('rD>?7!WP24k=+-_`TF(K"`KNAVp=Y:)N(8<6PSU5Dg^"OWt0I:/`ahWGEYBtsY62.F45#bn5PXNdZ2f6Ve@n7=An^+lVs+$;U6EH!8e&Eo_!l_+.p2n?TYe0ihr%1dZnYQLtDALA?OpS#u2kO:rSCK/[$h"KtYMf"&&$FZ5]2+=PGQ#P)*Ki)El:6ma9pR)j-@mTHM\.Wh!76u[8M^9N;c9*JO<_HR9A]M7p,NB,UcX^6ZEY3QKFEjZZSShgDW&%kmNsBO*\,3mL/Xngr`sR/KQ>^XV<#c:CgjFV[f)Jtb(]7cre-32=#;t\P!?4frk,6No6Ei+k*7,il7=q1+@hEdItrafgn]X`USAfSmS[l[`IlfoC'(5s_c&2!U/@6T-]Q['S/.hJbr2FEDS*D%poO=?+`Z94i'>eVUg;S2:gJJNf..0upKG2h?9`$YJH<n*-e'Ra:BuVZC_PiIM<^)8s2bJmZssGY1AnW<m\RUWoABG-X&*b"VYKP'51Gk0-2:0_>]urtff,0INGB/o'!N2R;ZZr)R?I@'mklEAm$kZPV0LmI82BSOkt@i`G>G@t\q.l\k7;!,?.1k-T>s=[kheaaP/G$N?T=o&(NL6t4H3o930/!=/NdhmD.KC>\`1#\\nq'XjXN2?Ij6$smQ3r/0gEmHqR11l^dV/R1cidEk85UkIKZ]F[D0'UFh]Q^`W$Vor.Fd'[3XcCfNR'FBYH$2>'-WprYpZ>MJ?SS`=U7X,TW5(f-GcD:LhNNZsgCFJJAIu52R\f(K]bh[m]m9@)M(9an1nCqm=\!f>GXcrd0MWh,1D7'*@nl],SFIUII4(LL"WW4f-8h"Ju;Q7_k5g5\HsYp<T2Up`&%HOWe_!RJ7JA@PgX_\q.l\B@F,gY0fc<kE-n2PQpkQ%fEXm.mn"t:?#VU.`[,\`j]#s==a@&NpV/fRd<>9oR<V.VNpqpG3(e\^IYPHOL8M80e#^CiksVnZnB$(=P;_Z)dH@&'[^jB*[T!Uq:Ik]=%RH#@@</9dT_(Z!n=$K8e1kW?8\6b\L_DtCo4#d<?:]*=3eMdqb)tF;uKHMMFWBnVu8b&Y#Wjq$?=CEBFj!1eH/uS_V\7T.:HuP*us>TX8\QWK(3<:s+Wf=rFM?<I<eo,O*`u6*n.k%-)FI`UDqQM^m"ga=/I68q+".nnui1hZD:n$9WkVb<rt2o5J:G"'"+)&cZFZ5.E.3Ds&##+(pfA!p7en6Z-6Fpq"BT+@5@]/l[fo*pRdVc+pH\[nnM`)b/q%M2PL;FQmq]E'r,@7ibaeJDrO92'EZsdW't$=;glTtruliUVr7&7'eDf.2<cdoJK9&K2:*p4?PYIM6rTQR.fh0\9/rZ&2nHQmq0P&HXnM>=&@ZkakE`be.CtVup@qbN\i$'cT&-1<mkh$$kalK\\6E]'-1(RWZo/L,a1g[_)gW&jF\?t[qVqMkG9n8WRc<eu&Uq'%k-!kSQkH'AJ11MLc:f\Wmq,.ts757;ATaM<m?'7iPeGlr\_nWVobQqujgP\JeBSl!.=De:>J\:k$C2\/(0g+t/\_*Go7'<3?)W9&!W!%g&ch.<P_ARV4aYWL^R9JSTT2sFM<*\%L$H.#`-q3^#Z9"\g\IR",mCbA2eA2V[suK]/J/<Ph[W;ed=rGI?qPtK!N#u"3]!V"?UO\D[-13JB1"']Wr<Oaf`>"Q((jqH!2(i@'(#CcOM3W(.4oN$U.J`b^u>Dh#lo'Y9)Qd1)q*=b0I?Yt9F4fhJ11MLc:f\b^I.kOUiTHa"b%#h7#.qG"p!,?s#rd$B++dhd>]Slq6,mo2X0"]+O*8q5_AVA-AV^oOJYGIg>bQs[P[e8JgoqSJj'5K,_uLmO<=n;Ohd4R,=-E:JcnpN#nfXW2U_Mj')L9IJclAm,Y4">/\3bLV??l!!!!#gP5qH_z!2'WP,ldoF!!!!nJ11L!zBECj6z!'h3*8cShk!!!"f!)iq!zcif^Kz!.ZE3PQ1[`!!!!U!N#u"zTF!:uz!!#`@g].-T#neLSO<?i@Zq/Y.R*mA_r-U>FFR$FE!!!#7G;2>^6S=`=n8eZ."98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+f[5O)anp/1+A9@"[#2j=%-2`'pci==k#uV!9pu1W8;$-L>ABqC#3=!(kBD56&e10Y2l!J.[/XI5@*U,V*Ppo%ACo%+nW0an0`Og&V6=b3BLB1O8?_p,%2AjC!;HnCB1`H8eGVe+asH\rPSEK9gPDYrpKC&IUN4aIl"P&LEb_H/)tsQ6U`\N_dT<f'Ko"U7_[q7&E!$(?!8id]9Zb4#le#ASa8KQoMCJLXN:u[5KVt</MZ]C.&9t"<-H?I4lYaZ<453kA=\o1J?OfV(eZlFfNXoJc+drt@S'RD,j\#QH3^kEMH?jhJ3B2^4J'Z'UipBQ@EC];SV!pY,Q"1hpfW4bm7/D24ToqRu+8/@T:.rrWDm,crM+"WpHc=gBj3"9+8Hn^"LoKF.cXY-eh*hj33mdj;Y989o(&Z);0j]%S,kB+)SR)Gq.A=mpl[6?:WD)@KUoAUfNEC*(Ou:?AAG7teLX^(4f%U]h4#j+5WT@o/-`SmIr(e:4!!(A03\r)2TL)+l:6;IBmUDK0U;%6sSI>'bs+keAddCnB7NRo-V5'cr6]RJ+3=QsrS6L!O_g,$,XZDGpfHe-OQHB@_=+/<*o*=AZDdp&kojfXMJTa<SI\s0KFNZN-YQhj%$)&D1+8-G.-R$YEf?AOtb:2:cj`7@i/?D#$lE[U(=JAWJqHq6@.*8*ZN>F$sm0*e;VM:E)_)p,kjM#MB9!Q@F"`^Tcs-ub+a$/c$b';1?[h02:Co2ke4N3ntlVRmo`bU&8@uZScP]RFr.;<JkRbGln.F%e/!<<+MGsI^n`#Y*Pg^bW5Ck"Lm4#$u6&GDAR]p5.6-u%F>iY!^j$*rFRT%;XhH'@rPFrV4NU^Eq)M!ED/WJ=HdM&f$e#K!K?H`%;6r7]@8C+N,b8Z]`*7oXujd5F:i6K4m&cBRD4Ok*3=A=9j=UCmeed:1q^DCNj7Q#aGc?KPl@f]I'\k]-A27tb(XYH$fK>U\l0N=%-J.C5$`bpY2Z4R,6r:og$^'K$l(g4Lj=*dgo'C&&B9m:>":nCfc#!!&[7FDFK^Q<kCq1(QQke3hnr.(GoC;$j;_cf@2@Y,m$k:;k(?d[oQ<2.fI$_*E?+F/4-A73b[c6)p]k2jmdHcK">3lBXEK;,a2ep/YW#P1!^#.lkj%W9.<A7arg$)sh3pjLht\L56J[nD_11N1K3O(upf(U4s']j,cSG?:!AHMQ6DJC_G5B<G6=7i2/?-MF@$fQFrB"U9iR<Aemo6;Z!g>[4*tF3.WM1!&U+lN0Z-Je5""XBuVMamjA2;!:Wp]CK!S"@$d`e:t[P<q?p0\;$Z-SLY04,dXfHd(5U67>1':QqLG>`G^^#r0'AOu4.:):g/g.%;o7GNf:.qb?]dr8p<*:e,aOABD[)Yl&jB#2j;K%-I;Y;n.6P5LK.2t?=DcC5<uS]@BG0>@`9m>EAP!T*W.K3,>h&^'Sn+LaI?V$M\sN]apIRk$rK!\/W[TrU-iB&k<mA>b\t::3Z.V)"9Qc>,;ju;.7l@[f0I6]!!8XAr;]6ZVn1'JYWV[&p:I2XKV1kJ\R^F)5ZOXKLKK_nmb'=FVnX_X,P(S,>Y,lh(fp>ZN,*0@RD_NKE%ZP`?hR;PL,/J$UNls</hrmO0D#!D.m@H4*B]lkCN3Xc]j&lo$1VA;X3^-tVI_;k:29FEl@pFhlE_L1H7XKQ&SZO>lm,T+84PnUUP:<11i`'M[\.VMmeh/*XWsKg`47T0QJb`h7;juG2274)O,ldoFh#b>RWAb)$Y91G[8sa&FU8lQ3+DlVKqf3iF]>-'q!WW3OG/0@7#!&U@QZ+mH'ue;N_^kBKMgcL?dQLu1!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"WSU!";oK\K\6%T4G&gU#+0$TG+#lroH"-"s><ri:$!;J1^PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`;8@S6Rt]07`G?>S_`/Jr1^n$^+1:*4u":S6*\`YfY,M7IE_`K*C!\X-r0T%k=Y\0&KBN;%<M:.M>;',f_@6\?h-]*]`5#i"4_Q%/=Zb:c>1=IGSHR9=f'AX<p'Zp8O'P;l'n;tV.'ht/j)B&i9$q5UO9&Tf2"s36C>:O=Ud[;4E_pOfKoo<XP5EliA_1)[Rmbp,IN1'.FUkR]Eok8!;($nD;8%[L\/0dQ3<B?e!bi.H0L5'Oi-!"IkT'"dRZJ<btBRG*m-jf*E(>OraM4<D30`[2(KrL^>1aCj!=lsFD9'LA6aNgUNl-H"L[V//a+j`TGk[p=9h\;/=BHEbG@[,][JJ,U3YW^ksqBX1qAX8];IdJs7I=9L07;rTUune-B;XKATVCtHU1res!I1I!/;3J<1"RiC$M4a`O]i#'!dbhq1"QF(\q`VbqY5$k90D;A^i[#a,]k7,-e\]NC<_1?Fg(m+HiA'uUj1fO6mB!#'@:'Yu\qdFX&hI^\V+P%Sq$bC"-\"@A,XKiNFC=JhLSuYr)g/EWa]^DE)R6[1LFZEd/g/@NVcG'"1fC6c;]IW6mb"Pan&&$`4`])rG&Qd.1;egT#pN`g^UH&dOXqkH"1c.;dEqe^llQo>Mg:302'!FCKgW2Ehb;q"$/#W%F*jf=/BWo9(fA>jlq?blIZ/%1tDrDPgc9#G[fCTSqBNbB9kSlQ=-"I3P;du%7E,eL!e]m(Eg$Oi1alJ-L%'5f)6l_8P1Uq6ZUFaAfRHO2=$A+Qec6k*gm*No]9;ePmCqSc?mQ>EoFnsiU!Ism^af'mID%ip+FnQ9`-*=B^o85QrB5C6J\(\?h6sAStZlJI.GTA_k9KXr7E&F*4/>kN*g+Qc"Gj(bYVOJ4-X!#Q-oCWkg_jPLCRXj4W]>`JI\TlP)%HCa<KIO0AIgHM8Feb\'dJ#Xcai2p*BJl:6EmXu3/+l#2It=5KGCD2X^(u_d-/+h*CN@9Rn0@u6oT057VSoGsiIibgZ?&iODbI>(^">H!p@>Z##p5PeVPkc%8b&Y0_^rFZJ:gSOHY'YNYS0%U_[p^*:?1GDJt_ScYf,SR?dqhr%;EtP&oY94IttG*kCk8&>kb!O,rY2b\>DY;-\#$c#kMPh*VEed>GEW]5#(/u>_L5N&=>DRRM*7#I%]5sVl5NSa(-Nb&oZu4ej^V5/Q_8*PBCAm.8=7?;37dCfg]RPQMVAI1%W$/c^CtjWiGW9mY4iH]fZnR!!!"F_u__@G"m^dg#hHbWl7)HB1G1ELQ.(Na'8\2"FJ2]8h?#p!]fcqf(lYQO!l:T[lAP!<bM6WlR.lS3Z*ug?V`ei:GF/H;I?Mb2a$Pul[HiI$$U`$;];_77%R6oDsO'&8:)(@E)N0gk0mji_aTr?%=re7MCGg210g+s=`/n%\4l]5!^bg>Cp$jTC<VTZZrigsZ?uH&d$%1\2cP7tbk6"FZMF%r*X8'ZTKtF,369;oVgE5XCo&07_t1;JKA2R&`dD&u2iL`<!2,Z00N1<G+dm05H2LAQS&]9R][#.jY(Su_;e"`$k;6eQ[G?r!`ke6pmfX9S>adYA'N="tg7BQd$pCm78*7CTiTDBHT%?&K\CI1G.:M7MVX&-,N<hN2GIJ.qa6ti2gku00U`2/h9#0LB-!p'#-sPGCH-LRUcBL%0k/V#ejf?^,d($0c(C*)/CG.T,TZ-A<[WY;ne]D8W5=fah`"`dQk&6s!rccs34.jM3pAt<pciY&P.1(7+b3O%R2J2)>F%a!`o4@3rOlpCM\A``GmnR_C,+;^t:n?0*?2?\J9A!2";_hHm8m.LJf8+j]BTDs-Bt_'rG.I/.;`4M0\"BEE$+Sg;dX5n*c#'H:0o'80h7qR+^3C*<H".>]`%'YW469a.UOYGdn,H(NIH/d+0(6`-:Olj7[.2f7?<%,J3Zb3$,Fb)<)j>o7^K42aceCbeqt#7u_H,c&kPtS_H3jH>,QMKgpuP'I!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`&6]U9CY+@qS:6%T4G&u7s_k/W]U!T<,CNA"R=!<BJ71ibkM!E0%"m/`a`T_C\r#P9&k,ll:5d"qaK%lA;lmf?>g!:9fX#b^oW,7!i^0I6_G*mf`DH4MiQ5jn_P!W_TgSHtn_5U-O+*\\l?clNS)'9UK"\ul+-(G+K6%KJ]t*LW(\q<@fPDb$P\P3$;?<L`^>CDA83ob7P$pQ/Z:>K,KF-,/gr_M5C*0eZ\eHkLsYU9PAo%i/tfJKUPp"5iJrr/WQX\$PH7N>lh0[TT`DgasJ1ZTk74&e,;,hYYa1Dn@btOWT7`451cA&D(89%]/(tD`:)rO/orL;,*Lm6[G:/V]`RnJU4*mDq/)XUXdrkGgiI%Q#ur`\g$&Mq\sbSSb:BKAi+Q(E'Xb<)9NQpA'%V"D]/8=3UQgE?p+l@qW&0%#_DO.)K<AoWh$0i5\.7=4k*Kp``fs*>B_rNQ*iWggrt(EbdBJaG*;EYRN'?f=#l@Z-lru`b?:$)>W24b]-T23Pc+AA<uPq1N3Rb)FpE0ojQt%44'#4[M5D%0Z+!niMG[O&osKOqA6*#+0:"rWQG;14A54B_.-o<QoI;@;kFeY7/5:s8=9"ZZ+.;VooG-T.PSEK9gPDYrpKC&IUN4aIl"P&LEb_H/)c'm.QkK:!J>qG$l$!3eB1IS'adIk1,YH^4Wm.\%rc]DMgm[JB]=WHVn<*5FHYGf'f'&1G'0NIA9-rt<h+4fC^A#]U"uW6B98ossgbN*`OX"L&gM0)\U,40MLu-Uu&E*d%R*m0Fj5Y["jV65jjI+!m87=q"`T_'2L9!Al>^o9j[>BLmro?nKePZNi)1,g)eK1s(hKH)n0:296o0Y)M&"uc%_Q&#pZOM,i`<nW+1tA1\<&#H%U:/62etrZ6A#:Mh52kdo<\rjc-oc-hO[qR+%8,a;](97*X0]Db?Q2##E#6JWYls_Qq*:O4WE48L5U#=@Sout!H,<C:nik'W/@O\!E+C_!rRG;f:%pIn.PMOlQkK")LoKF.cWp,J-0d+/:t-XbN%+sIp\+I:P=QrlZ<,gUV2(i?.&p3f;Q,q[Vji<;aRT!s'isfCYK(n@=d-oW6[*hgPR]MFp,FZ_RYj&[M"Pp6=d,@CG&MG@8?EZ%^0Yt0e=B3SUl_QA#@@m1nW/8c41mWgiT]Lei]nhN"<K"ha^kPbU)XRQKX<6&aUiBnVZ?Vti-$:Om\d`4Z]4]`SqWQ7]%SCHQHB#FI4=,f:W@2V$1_77I'Auu[1RD&6%V%\l=<DZpng7>P@2^j<S*EnHaus(LecoqlhLlJmCp?'a+<8*IdZntJpYp=RU!6ZlAi48S)!CZ1LH_VBsmn&Zi+Ve"`:'dp(dje7L6;Y]I)dgTM2tqO-u0q\eD[qS24.CTmX@XK3QQ^[3ehmPgDMlNHfqc)f$r38jN6r!@bV&c71e;Hkh?K6D/3[>L(5@a3;oJXsVFg@udF>HcOKT(ReJK@:c`-2)<U4?pp#(B)fM>8X`=E::o]$_Hk]_.tk%6;`8m23BPkkf,lH9@1?#dGl_]K4M8)]Z0(?<]C1/lq5%bC='$2q[:@;*@V&^?GgR+nihWg.]MG_?D9'\?76MrXhXmfdTVO`obp).!VEf/6?\10M3PY1E%^PCT[3R4kapr^!47VOES!D]ljMQ1iNCY5O!A;sS/g6"Bon]ga\E>#IX0;7H@oabIFgMYc-Q8Oln6q!0qiOJl[Re5\]oD)mZCE'Rdlnak+[s0+@TV<T\@"^N@e0L<0@R_WN1[T,IP&.!I8^F+$PGQq%5$CgGG^qQIGMtD]!8L5YcGs]P$s26+mOOp:SB%`(1?kbRjG3bCXEn?+3=14?$2uJ2Tl&i9HhG?l4V6ac*t.o&F+)/KNC:TT!IZZ#@GJdIh6+LOAJlm_V.,F!581X\<U^$P99EgEK;;Y3Z%"Nrc(>Wo`Nf.NBAh%%m=E48om3#i+E%n'+r_7F#*=-C))ZldOA\DmC\U!-AZ_hae2`ZmE5.,#fgha'@5INVI.pO*j4Yuh[)$8,See($?>qX?e`h$)8)"bjp5\a]hY9,+>F;:(SZ747N@VaFUJr:rKZT+c#B=OpoZOFAV*cF=hKa[knYk3_I=ofBu@8Q):$b(>4aX^rAam"7m9$FRVGHh\jMLDTfM>cY+/^9`5?jr.BPXjK\.Q`*gXqP/Q[AEPUCu#HFOR]4f5#(KP/j@2'jc+HG#Os'8qA&B-0jF`%0Y8,UHM!Z-U*k]5'r\!tW(=iq?#OG$$Og+..\;^3>=m\80-SX0a6%Lub+0_3(LR$(m8<=`#f0d1@tB"UutdS69fNceWOQ2-&=G0bj!6=Snp#@^G7*deU+][qPLfGs2*!?ei[q8_eV@,%u1L4\NSh]:\A'ic_=nKF+",`\T!NHeOU\!V'fp[IGV4LK>BiU84%D`g2EAE^S)OdrE<CpQW"&]FT#5(84gQ#5HuViY-*o,An;Z(]J[86:$rVFA"W"'ef0b%W$2F1%[I'M'Hc[F@MR!gH-m)+;6?X?0tZV>uIm]*u&-`WkD>#K1Od>gkCnjTj0K*W(<`.3i4a/\>\qr$hZceb3)2&8#Z.6#*R7N)i05ZT8:1KH,Zm1B[;9W'[61Fb+IP5c9.>uD(T`6<I%!?.>d58$JPG\JH`p7:.3ld@?$st.X"Td0HU$/]3W3i=/*\C.WJZI#J8BWG?bdR=;*UB_C@_,DIU/"=4ZtTCh*X]=1XhM8(&c.f5fTuFT"Sgk_cT"M;iie=cDam_8nRE?`%(q6D5I"(SOY"&,Z_7&*\++q`-T5bQmO]]oAFX&Yh54h*.Z5JG*\@SnHaoKi:];epH6%H@+o;Xq"`+YuSgc.[5tC6d"#KAqll[2r_QhPjimQ>9D@ZaQ/RXTp@@kJk(GBU%_?_l,FMj"_PVp98TgC?:m?9.FdPomeG>Q?TZhD"gnRTm.ZLQS&$W2DWQFmnG)OJ>B!8-5#RplC.f&_BbO5Z]hsT"("qo0p1]cn;;:4*.sDdbjB*'92l.t-?\FfX?g-Q.ACr&[^8Hn$\@hg%(IO"CI9#R@-`9,]AE@m==8`-%i-n?F>AUlU2CRY\Q"C2&\/_I]WnqcRnK\c"*IVD'ZIT]@>jI(kp:6n*;j+I[1NoY1@>mF*M&J,hN'dqdbpTIP>Dbo">O_ppR3MHk2[%.kU?[.@RtT+fkX"%B_+eW9'oD"V/U8Z$6t`nVbq+mDMuD9J0H,"-p1fRaL^%W&o?O4f;N5MPhp\TENhYH\g.*HjMEd<r\@Aj<EB%rq.>d27$<m9gJVD)8:.3ZW/'nh^0X2nVTTFt&OVQioBX][;a-RY6>kp^Ao$K0)I70B]$k9L1;KhYiXCt[FS(L'i8BFna94k6q?7]Z1[e96f[/9j@^k^(3#?4>YXJ=YDP^B_D<P:UIlaaU\!]pO2,EGc`,UjRkK8Ah#B_*qcU,F=#Znm&gh<qaPR@_-Z];=:sVM(PG]@E8taTVe6h9;#H8Kh#VOQqX>L)YGJgk_H#.H0&:n96i<K[ob39SqaajX<>@pni_Q6D"u6fG=i`3A6$0]^H7Z>F_58rom>h7ujuuGO$:5ViJB4XLX3j:BJ`BT<VAm6oEPL\Fh]u2dUUNFAifphV1K,oJofC;if]^q!Du@^?J\E\1o'$)6_0HX?Y[TCrp]B'Z4M)fADGNoD9gY[J@SueYu#o'WgK6VQ6ln8qq5e2>507;?\]9<Nt_V)lfks=jJrY6K#Q9Z&k9YST-@p.op#?Oi!)ifH`Zs=^<RY?'H"SgJB$sk(ldPPgGJ*Pp%S=]<m2>P)3:XcdPr6]:<OIo.*]f`a5&TL;\+0qoqA>;Sje&^1QlWOsi4c"mp]JW;B^[aZqj>L4tb(@"+_i<7:dpMQ!*t_^VbHIRkT^B&<aIcP"@Pm$gPoRI*AuHrp+r#jl%SdHc*3)s8WD`hO$`6-<hbl+l=m$cHXA2E8Z-g-kGA2'AOg.0)R7;`bROm7Fgu=_PY(lTkm?di`/`1Mmb2kmil3qLoFAPP+(jjGnUAhoF7<8gj>pbXb<i[;0A)YMfc;-FST0;"3d+=.+>>lK!>O+aKSZIP41d73^XDk`$;4RuP`GeX,P\KqUo<S:4JY7,!K@9\@E"ol0lB[(nCp)O:!Pn?M]VV$?(U<LI_sUVc9uNn31b/NgS6>Ft7r^A2JMeP%d8%mA^(S"hFkhD)_a_I,u7_)E[sqs?f+<9:'6\G;r,H-jf:JR$])&8?!pZ]H>3$G.D2]Ap#aBWe)`F9bEI#uckt>^A9[_WbGS:Os<8o6etBR:8d/qTB^23U0rFj>c1d-'F2hF4s''$,,=b!7CK7jL<eiO""N+IN*U)YNO"qIDm))Ld'ILmBZ`(+O[jf-@nM/Dnd)[E]g"@^mELl"WG!b9cD9nk2NJ;*q`/rjkQ06OX/*+9#7I9l(g+Dj8B#CW-%6KX:6WH/I,T\RPR!nI?P/U4h'7r`X$X!1Wl/j%-9!TkS$Bp?@oYg3Is`*>.N[6NVZpQ4O"GGji@6Z=HdQ,2o^R(\uFSpIXQ1+XXShfj;WS2hUOuW.4N"bR2t6Y1aQ>;KLDmg@,nemEd%8h0P;S\jQP[k'n'B`+t(Z5,Wu>$*gRRb*c'>E9[,WVD@qahg.6S^_o[YQT')Q1F$9ams-_Z!aB9hZ,kK:T"t#);`@\!XbVg9cRSUIl&lj!7fJnZOh'@]Ij`XgPTXU9>=tf>8j`cUDbgI.J%Q4f7Wro+QMhe+fQIDuNort@bV'^!k6JQt2buq/8U72&S%bO0*.V7oP^3?iBWVssDZFO99h1"`%]oSZ2W-n+.\g>OPQ(BeLPgI3aaGKYu+d*i#"*\=iUWIK""@)PJDAr;I2!)p1[Ya)IgcNNBmm:DS;o(=;b\Kp3^J_c/Y2Ii;NEg1-D<DrSJ*'lqp6.1t=1DX:`OK\2RO^:KFXbbVT'G:J/gMdMW*b.E(LFc<R`VEPW_4^8Bl6C+fYF\\>B_[=_jWhI-e\eHGW\EiVTuoLfAoEf.VggAg-p^eISX%aWaqddpa0(J%E[>?2rS)@]""^,O?IU<]?-g_E_c;XQo/Di/##&G.mBl&Vu5rb[jF2lftrp3m("hs\"3hroG.:o^H<rY]RKK^.5kb2&Cb?=OLDpQrR`]pO2-hI!I>85E^9*h3DE)jWV@dpNFYItEqf&14oD#r^&e:J"mA>S]a#H9T_JASV??nj"*>`;h?/`Wd!NQm!'klr-N`Kpd)Z7$#>>F(Zj1[sJDLBf*70&JPQ3sq5UQWs4j_7N]a%4;!42uQ,(SMPN?$;l^m"gaHU&q[kWR;6!PJ_3#lq=;F<Z7l"-";IHbbjG5^PaD!pDeoa8rsZ9F1^+a%tQKaSU&0+A9@"[#Y*o%J#'T:D<c+/D^:q$GqP(@50FuZP##si?%9aF-HT=Y*hou/O+M*#CZlmPQ3sqr8aE)dZb;RWV_N5J^R1,L+0C""do-L@a7aq'`@YPLB=TD,)D0R56[OeA9%4)2fdhh!)*\![)Yu!M.!2kifeM$Xbl*;Z4Y%i;c<,MDoR'cb_\_3`AdU1$X]V*O(bLfd7L$<St9g0:*I[81Z]MjN[b0Kp\+I:P=QrlZ<,i+3j,>3jm99/U$bm[,DAf#3r!/L2"2X1_#QblX((N]:UI#h7X>W)a>(XBg:K-QSo/Eu%V1_ii/qIe:0B$k'&8pLJlA0RQC@R4<UBL1T/q&8ioVV,jM9(AQkBC4O.X&u_+_s-W0#Dt'4bji]9jld2^JX2/;Z^IQJ]WC8QiIQ2d&-,YN02nA$a,HA1^T.3`Wndl)H8i1AljCg;C'GqauVCs7X_@.#Mlfdr4BnFEGPs9Lj3sb]IqspN40!04)EfqRsIHoSUf*'MoLETHN0IT\"V&$<Q>`+K-]HW%9P;"i1qmI2B'pU4Op?Jfl0a$F82gRC,b\WWER,._KH:V<[fo5D[OIkF=Z&FgB:oR>37qWKajKh!!l9pI))AVrI[.0Um@N)"1</.^Pl/0"d;Ugf'A8`]:?7kqsYF7>^@)bn!Bl7!)2TRNM/r^u8>In?UR5g@Vga(qMpgD^]20@c<jt=9:0&!)/0%%jG1U&ual0cS)W2?ZYo-CTT$WT;QYai[Q7CI%j-Y:1!2X'Vd_WD@+kY<(U)ALKEb^WCgMAh3dHOZ?#O*<5W/!g!;\,.aqUlDE5;TDA#$Qjd++hG8pA=L6%?DZ.\[GNDN7(P[?S!.!+S6<O;$=E1,kP.6B(LInPNe$()>*iu"-r!2dZN#E]$c@MZS5URc6Gp8/",9W9pQf9@>ZF5S=q8f?1<E)W@/kC4!nlV"$[m,m"QrJ@`6NUU5#O&Vf3-WsJBhpiF5b"c'UrPiF/"27[RPh^YB&M[DkNt](4JK(qU?bT`IF*WH[=-GhLm*M!"H@7@_###>RE=>MI!7PB8K8>O:O\%d6nSTlnlRVYW2o27`D!0?&omF<On(H+-G0Vh'K_e\=Dka0S_9G##o3hm#O>\,K5K,YVZ2Wa)bFqc+ihABUqj-7?`<a*6K%G%Z:Z'k1T7!]d0dUO>)TOo:,+4rHH[@cqT&m8[7Sh_"Qc!RulYFTr?qLEX@phn/QjsKG6jB%lRD`C!ih\@UAfJMIkk^^m[e<HK54a4?R$.E1VPI)qlV>ER\D#ThffDl8S,:]CECF71^1H/E[a(INhSE%mA3[BOKe(f>XFnq/2ti`(MJbMb0u1W^4^dER71&k#qqEd7hQ%W&<_mT/=u$MR&cgr/QkBCr"+pk5HdKlcf`P.S^iWrq!G2j'3A>ef8cY4g$mNLR5plnL%nm90dt'dfQp'Zo_!HV$!FRrBL]FadSK+"[0I6]m#6kcJp7RTOZNm?1JEail!mD^-Ea\UVPQ3BX(dro-K2)p#*gdQ?V?;GV0RM0gJ_:-(!l/nc&-6AR3]Sm@?qLEd%LX@HkiMu]PNQ6;)`ahgkuJ<idPL..f)0U\"4L];SK(`50I6]mLP66_+)abDBieMC[oE1.2?2J0^iW\'-O5q;9F1^J@GuipIT'.%?_6(/gV_^tfmt0V@GnV72>;pJ0AF&i=Yh^Mf'K&[3AH4^;O*,S4LB@ENuB\'8M$0S8hFu>SruuNJ+WULNjFqUG@\oI%O[rR1,]AQYul5u#F5?`#lrF_iIcqm;j,WUqt_Spl_Ke<C&?/7DJjGi`.Lb*AV/729"mWgke?Wja$77Ti";GV>aI7m3G<W55WOp5oH`;2D>g;CO^-O\+khe7$rd#N=El1uQ2jSb!7PB8K8;]iU)Po%=]S9=Sn^6$48V$.>%P:BjQW;i8?;=h9@l/J4Ru[Y.JWc+8f.42f/q)hIsu*;RLaUhNCKe@cVq=p0VpF^Km.QF$,Dc*0HComM!-W@lG[YDc-i6ZRPffg?$hW31$G3lVdDmqV;<]7]?JiEIhVFFUZfE*a0guLJ#U,t1gipO\%6p&IB#0$\l:>MdMKs@4#sMJ?qLEd%LX@HoKI[:<@#(W#A66eTG5hOA+QTXa$(7KIeraQBBu+t;H[@$mK1FZ^%G:"YUUmM/g.!LVs(=[5JL+c0UAhdqBg*n[Y[_M^>U0n^+:&Vaak`<;ZaaV=SO"*9SoU(l_\^-8g18t'cZ.I@r#`C3.5Z3e"JS/h<[Ioc/t0<g'b>rIk+I>h]/--@XVhNio9='`aeguf#mt0h$RKMTp<?8;sg*&,$3'o%EN7GNV-^a(`(uMJL(:p!l/nc&G`kus*`q)4TFXB6K5S.[%,Ps"e"gbRi1.sVF5+?k(2KaP68,rV?DG6^``2hq73Aui)Lb!iTKRkk2dZr]Hm;B474MFC!atQf`P.S^iWrq!G2j'3A>ef8cY4g$mNLR5plnL%nm90dt'dfQp'Zo_!HV$!FRrBL]FadSK+"[0I6]m#6kcJp7RTOZNm?1JEail!mD^-Ea\UVPQ3BX(dro-K2)p#*gdQ?V?;GV0RM0gJ_:-(!l/n[p`Q;E5<`$/[nNZ>(F>Vt/l;RmS)XD":t?2*1E.`27q(oJRE+%eIc4#PRQGq<fYqaifGt/MMM67p?jXW5!&,E/5)9bKRN,SbTlD=)X6Wsl-<`&bdk97>dc>p'YN8-0^m)hX(>d/a,lgjF^iW]R+>V$&#kI]L+l@852Gc(Ro>/:*3NrWo8cY4g$QhckR?C2=Ckpd+aC;lTVf.crn#`Kq9&gEin)V7sJ11M,3\5Xi)/`'0b0A5\<o+W2^8Ic%ci9(ZCWZ+94RYlq9^.n$Km.QF$,Dc*0HComL^Z'c=_hoj,laAMR6abLM9BD!fitI%rTfWh3*19.V.=7'n4UU74#sMJ?qLEd%LX@H#1)KK^U]skHci_W=5GG9cfet!>Ztf(AUa?*<ZWh/]e.EaQo]*[[;NtQg;,EE$h*/l&qDD3?ofid&/k*l!>?g5q*ZR$Gp-'M8(72a!L"b3Ob[cDpEeLn"!&bh-SN$S>+\mL#>b1"A)Wsu=9:0&!)*V%&Rb=*P68,rV?DG6^`W^&*cuF1p:umm0HCuuJD#QM%a5u]&ced2K*X/Xd)gjl"&f9:FC5X\Ae-p_0RI2"!146),/EP2-O45o9F1^JJO'F+4m:tBm.k+f`9[b\5TgUD"Cg0*QSBd@!1!k2I>r@_!!!"H&hkU39F"5t!!(##0I6]m#>>F(!6.)S,lgUD9F1\!`]Gk#!)*Vk#ljtF4"qr\9F"5t!!(##0I6]m#>>F(!6.*1A4hG4GI(>qFItIB`Nlf.b`=tgdk,$lGqHN!Y+-S8dVYqn,A$r6Qc'G6imhUcZ\C.clMe$U/F7VcCHhV7(@)ps`5b$YX5uM!_e$+*gFN+igG%YFBXYK"=,je?!!"\l`l+,:%>TP&+bKZ06H5^hZk]afZ?+g=DR&]]0d_>6GBXLQd"iP>pdLn.PeNTXGc7:-@mq\\Jt^/p9/bEW(J*oW]B(]rT-8sYl)#_Rp\<7S"34'k#k`%g.00Fa!+TJ1IFTbf/=(Fs_33q%Tr>U"`9u]n]SEUbdlmRmB*Y&Bm;'9E5MK`^=gN,UgNqrr^TU*c6Y"(F2\sSP:G%X,n7aA-`T!]DoQE@N\&-bjCF7())kU\E-1CI9"9<feoU=2eM_?oqp[bPW0,F;J`B,dpGg0-i8M'bXBi31SrS2_LSM&=e-\nI0F)<8.-9=n/R<>EeY@C2Kj\l^2@.uP%g*:Y([QkVOIUd*(DJ^o-^(nAcbl<-hj$[M*c9^@NQ?NT>\Q3(T`M@G_\\C5R.3u@+Y.&n]j-m'.%3^`FXkb5Mn%H]*"9>Z&`ocNTT_7kFmT8\I@%p<PU6r#t%D<r_GJj)jN:9N2Zi<K`>A%O0!`)R9g4ammH-:#+/>)8ihOk;G.u0Tl<F$X`/&")Nna'[m_SZ+!e*c-'*fM6e5CK$0p0P5ZPZZBYpDcD(<8Q@(i6Y`KCOFR5QdrRs*LaksZ^2s#k,#3Pr/1/I?tR[\Ia@8W8nL7M9UlueJ$C\ETcHeHPdIhuFEH=:_21#uA7sl'>D5Yb'3S)8&%Xum;J45q5=V>5[N)hsP&-[Kk@g&EZ^#)bJ'Wi.ZUk1V6j;_e*-UKQ!!"R%Z(',mk]hR>o_tZM80;X04aHVrg_]n)&(cJ?Fa$S&9\He!NZ03Cp)>%]IQZ5[25Os(PcBo&eb><b5)<^4iFe>>N.pRr$LTeGl$7@O^m@Bk.=E5"H23blid3O'6EM]I,aA%<no`bk`EX-$BASI>FkJrHVs\YhoU^i-**Fi=oZBdckEOL<%UcPXU=BqOq"=N4F\JdL[bf&E:4q><_Xr8!r-hQoH_/F1@(0HJK8A.8VuC5#fkRQ_mAhQU6eliai^k*i^bQc8;\HaSYUOtN]_Iu`l??fJ'=e^n$9m,md"p&;45F@Ca%nFKo@Si=B,s(Jh+Km2o^nUca[#46K6aNTp8!aClWA)'2PiUBYbU?,?<YRY:_"'k]C533NR=-t^jmk:YP`**YLJr&:KAKCZ`[e1p%s,Z9duA_-17@R;gM\id#WQr:iGGYcg]@;V>f1p8n74q(C0QrUUd)#LKo"T9rYm^ejhqfW,Ci3lHW>V[/!Y_6id;'\7TR>.934-B+WW[h^)k4R$A6A8>^TL/+44\(POW&IbTq@X=i0q6n.tYle@lg9;aLS`O^DT5CLULf@=%A_CYS%4*Tj[eflFG1Dl@CB85&6FBOlY^T-:>g2n*Gd^N<7iN<e11\@-aKRdob-O)!3;;]itFrS2K%Dtk2h"PWg5L[1!Q_ij+Vm#WZ^mZr5qcVOde$k2TmS&<udFlQ]i^0_hT>(!M-@0lWXUT=P/P%sM/U&N4M8EtJl(FqmHPtN5g,D(YG[A5q/&nge4QF8B!!$DW0m`]If5r<URD7c@lA#DK?BL(5FhNa]n='d:GYDXrAKP&O=')ogTD6_hYK/SBR=uNhN<7oENI;fXpI;_gAm%+sY1pY7=$*1h/8*d4Vhn*XYGQ=aG?ek@O3MqRJFF0.'#9ruhqW)$PaFe^f@*b']2*"C-9A)<F:/;tk^Ju8f&(Yf=&XO5Dqi(TkgPXIKUiiJU4Z^Q^RAQr)\JQ@hDo[IpP!JU4f4<4K?bXFV`r>gL+*-'J/I0+$%OHZof#\?e`9+O>nNWLoOc5$97,i+ZR3mXh1gDg!!%Pq#YYO)dp_h9kjGK%N"'9$PCFkVb1\]uk4nOSe*[bI!%\SH&ced2^LdNI!95)e&ced2V??l!iuOL"!2]jq"98G^*LIH>V?<[u!!)%"QkBCr"/Z2$!99V'AkL:-&-rC?JNt?t?$lZO!l/(*Nqff6JM;23Wa1(50TX#'n7=3i0]%@0=Wf(C*^aRpH*:/<E#fQr0%]Ii%Za!&^G9nsQk<AJAi!o/a74X:p_)o+&.lk!a<^r.4"qrgKM_o<3RTi!&rEEYU8#$%eBjU,"2loA";<#Id`IK)nK&pBdTH7ZE>L;T1I_OHZ90\hPSd+u[;+4tVNc!`,fj8X@>SS0L5sQh.EMpk7LV?P46A3hj,2.4[]]c4l%T)>lYV.%iqIpaQ;<ef=?;NE0ig#\.?/Jr*-VE^11O9;--O3=9rZo%X4.tF,t4trnW;io-qY,;X`ma-DC1_SAsFX%<,d5=EDrSBY8SR)^LR6MP!b\JJ(M5D[CGM)P,=Vu85`O_4tF4lrI=ANV@R3)N(FjF-!U_JnWEq5*S&Ip,uN\'J#`Ss3<ZM.HdXLBBgLi]Y#eMdJ>W-"=j*SDG>]Lu5(W.&iANL_lC[M<EEmXqO/+Hko(#AO&Iut'HQ;A>QX22l>K;Oj4%g)PKm>aSR:L0\$!P!DW/aC4*mmKq1rEgL7\+KTA\T'9,su=")'J!):)O[L0)*7ud7e-CNT%K]&t)J3bPq'Bd*_*2EDrV*0/aknhHIpQlL"QYmo%I#dj;MJp@WXt4WE4FCa2u70MrZGV%J$6fj+lU*\\lr7Q!5*RML@K9>)P6Wn\[OKgV)T'#&.!mLV..d<-bjDXIZtO9QIa!@dJ3F'F]-eCE.@<hQV[Z^VTXF_eB040#6^7nQDXD>3dZfm"d,o5p#VUDYb^;3_#gN8Bep09:!G.cDgH=o;o!eRsS+*.1>+C`>R!.IEa<.%&?(H:J2LbU+Zh_;Zj9%a$B);#V.Y5@AG;*u.5b8QChKIo7Qs_RM$dpP'UnqFHims,mSQ^LiF\Bd!Ac6/MQ@F54t@ZcXgiC*10os0Xg2K$KGR:c:+!f#MTS.6ANC:!)(l:bXQi=XqnQ*^=]cc==GPZ?GO>fhUBLg$V:iS2fd^-mH'aD_f:?NaPIdk!DlN<%XMq]ZHdp+Xg"^7a?97S*[IB9Rb>e;0G>&/E4iX117biqIEO)3&')EZER'OIi"rbmG(mKM,m[D_!pIW3+O1GrM;HdogN*IEnP9;ZU`*VJndbH#-+`IoOg\Omq%0Kj3g80l\1[^=nUR0EXsa8O\"?cbuutT+Mc=HKC-&hjn;p'bpuSVaI&5Y*%)[1T-[X$\tlp77.H$#M^dZQ)]cC=FOmMn0AhKJpH#-37mqK+?=`64o5T8\"AQkuMApijL\jF7lI79/X3$D4olObl">5T>FmpK#:W[k7Z!d4$`4m*GA*rZt0f:8pD>5ZZ,g2]3,e.*^AjK:WW3;IQ7F`:#,'j#=XLL0KmNsORb#eM*W-E8PfcsFp`6+S;#4m=<'HU28!Q+S0.N(4W+^s/j,cMqVJhC1*r]@a;4_n"P):_jfdcV]U6N81sBOcWs?rj8(B?[7@gk<.p-8:j1b0H=0DBWZ`p+#`MR.ORqcK^aR"$)=2.A(K!+ktC[6t:[L20.]Tj7"KqgS=43EL=a?a[i'"$l?eX4@Sce`U-&^*RSIg>s?/[E8PHlS3MbMn#%RkS7T6NU_sURT=!L:^1>$(8+iiWh\`6Z\D&b%l.`Fh9)P^Ml$eJ5g-l]%CqUn-iP[tC%Fcc,:&"7<J&8+1DQdX+:NKid\!Q6BDY+@^CR,6AZPS9@4m6>08_e](f$kRmR`&`,Cb*!>\(\f!?<uE(qll9fV&rB&n%P/5DNk"m<:s+q[-c@JgS!>6M9[8Ar._P_1Mj1a"!aSLAf\WddjZWc"%Qn/rQMG)3?IK>^>qq5T,4YRYjrZB9#f&7#t%BXngnY'_VAa,]0,iBr)Y_[P_dDVh4%HJ=Rg6QjG)HI5)&q5X_m$'>]/3"SThY5YAW]44$RP)=NK9_aVPkK8sR+73dZuQh_RJ@0l^ohs4jEjI*(m;.])XRq:'NpB8;5cRMWB8jLpMOE.5n)eG*TrK*-]L@ZT+0Pr`clh,8B;e)H1>"nUkGI)#^\HeAX&b0J<3eR4c/O#<ciIl8!O9#b8'_Cd=k>';2u]@qSO@.Cm8j;8g\[&XG`.2c4PbE?N9=a$NiP^QE1PV[76b@JYB<;V^ea]>WA4])!sG#+?0b#.j=aDQZrMJHJ&<E&D$\#`sBWJst-s7%VmSgj6iZUti$E_9=PB,/IbI]2F4T!F,AdU2I0+(,sH;C7?lP%`Tl,=*DSf+RS6ij,%GO[.LSg_0=Y(Uh(n%f1$`n8F_K=*+BcHe6DVU0cE`jSUTnGu4%EHPK/IP`d'977iE9G&hYZg,iMZ[9+S_%['_u(K6*$PFRC]WUKaI@ZF_s[nWCd4^HsB,^iF]m!;2ER7$Q3=<oK%,q"I6n6B!25nX^.oqV)j]SeeB[.74j1d+[B/Q?cXN^=pkofeMo]1"JSD>;I-^%H%W:ifOcpdV(k.\>fo;?Mk(%Q&<TW1Lo[(*l(b<o,?)n"O-3IMk^>E(jR,#[L`>PY7:da!J>!7!adW5:C"pdg2g]dL2ao[JYQGll]M]isNnXc]`1ngN>=)nu=&e\[l,+'?(.<%m>F#P#8E_lEV,K/Lgp2foRK:a3n=!ra)o)WqD7`rhdGgOmP%%,m2.KUGSfuHV2_XqQo(cVhF3H'H8qV@9ob&eRVaa[i-n18*>/C:#^^2Kf(<.IVC\.+3"(0cIiljSa`G]4Pi.F\!^d#pob`E5*;&6F7\Zna%>.+KpWm#gc(Si8Qe>ZP.122C>j[lM=g4ogkOf6<iCrGT-SB(;eq+PV\=9h/A$@Os7Xuo2H+35QZc%!O%=bk"3kIPO/$P%bq%Pe))P.2GhK@\,>Dm\f:ono@\l]erp&4QAOZ"W&,1.@0+NHC0XIibVGpG6-)ktKm<L$5:di?g6F[W<0-kT#9^=:eE*tt&m)>:m\PcOVE9Y6HMOqD\g"b9F&".g.QD-5m<aU-U(hePrqo3h9UMb6*R<RoLUIffMFi\[n.I#!<7[$$aPj$U]$jePQX'$Q$=*7B]l'rX>n,H]p['p!6Fq67/NC0]1c`m#KX1LLT9P*deA/TliNuh/jTY'c1)s$hPcpnS-\*+H#OtA>F/=1\3\`oo7H_1/PHGs)l-%@I1pn+",b3CO3KGe"?aUe<;:AlDcMKs3<b/[Ab1JoEqn@3:q[N:^tZM^Z!ls:DU<U;d-k_=b1;\F!A1_PcF1qN[GXLVBbh8'6#clDsF`fZX%$2G+bX*RK$'/(@*4*>emT]0r7dKW=?H:qoH$Ic><pq0-3k?_#c.)il18U`Gn>,Dp;P&0e**]Qq*8m4u\99\cO&m]<aA5RMr\bKPfh,#QtBtYq?;j_u8hVBgaBrg;cL7C7smrQG;T#+0q+"H4il%+PO)g15,]KBQ.YE1$D3A3OX8iI'u.=/;n6`]k1UM58>$!icD/U^BOPcYZ<8^oY@L?PkU_o]tE#MXE^3giSQj\M^ehSP3r,a#+&:<#gtRRg@1c.?<-ha&-0R>dVu_4LR-/d,I+o448=1>$`1Uag^qQ)-!BVrJIhQ)ZoK[VOMAUKtR2\@P$+Uk1.!L!'&=G'LLmBkF<F.#0Y>oaY-=h9WcF$jB>HN;6FOU=JDB[TQM`A&OV'n+O"n?JM<t0C=,Beg\so"NBSb?dRX;>6Dc=2:q1$$qrZ%mh\=Y*`5(sM*;D8)mbQ1]NnidEM\lFY%PU;o99C.41r8K:A[aWs1S[P)*6#6g/X:SPuQNncm1nOWgCu))r:H_AA%kmMF<J/XS,*qF#(B0FA6JF@il(BdZin?bG^W)hgt&Jk""QqVdN\$TjJNcjSFVV?_A`nDXaa8BA7"oMs-PVgpqd'PH?Tg`Mn(E<eMf#LijWU<&eekHEFbFlG^I@&I04<Zp?-fI=>\1s4fJ9p?#_2r(<n)p@M'(9*:XTOetP6pmn,*%M08Em/2/uiuRrZj(*6kZW\[D5>FeZ_;Y]DOuM7o3SN"o=*YVP+kc;@;+K-B@`nYWRguJ`bhhq6bD4TE<8pX0W+AF4`R2G^`0A#544Q@A"Z7\MGcQc&R=<REBGaXuaUe<#b/kbdT*D@^bZ*JtnhG0\9Gf]7_0RIR5p)"n9Sn4!VJ'aSJq!R#3T0pO9Sln[<]0,8&5t(20Y"X!0W1;FnGY2jQ"EJdAN9eN#@2rml6V_4(1`q4T:BgW"bkVulE`c*h`RWk;oIGH[C)j4O^-,.X/hK/B$hpp-7?V^U*%O`'dQ.m5$>VkXm!Vp7^VAq%S>H@9+i="+4R=Lor&h&\2g0lLg<=T<3!)gU25I=rCut3G;pY\Et+oGqpZ(2i<V?ApRA%/%TolJWk-kJ/_,>/oGgi+nX%A-.@KlrG`s[?'eVS]7!@aNqBJ6LSRS8XmeAqf+A>h+WMk/3Ef*Z@Bu;P@c0B]e=\]E*0V7$_/Z[<$gQ1EUQL_:6Q+<L9p,q]b>V]^"U\[AWU'.Z;`-Y5cb%]A9VpnYXfHKlTRri%h=-gq4$-alD,ErNR$GpZ4Z))l[<UqXQ]psN'5mJ@JN,!<J>o\HFC_W)F9kdol&a.9s,]VSXBP/j)D+smt9o7H50;GC4MdG`\R_iBrF2+tY+;&eJ?VLm7n_7>"*&o/&mI,H?a)P=1[Xfe@1gc)J:E9<)D5:Y`",<7BmB4"udt'nun\GU@VDKtskej^W;Q/a5Lma_S#rUfZiqK!lPgVgZIMc"PVtDcJ?ZB6'n\lYU[AKaa]PhZU'@uDIfW[SL_7g`8TQs.%lMZXhb==?t,Q)2P<X=K,;ps3lO#<c9s#).4>cq[)o?]d#J!3M&,G"'b-%.AW(c1A-[e7r8inDIK+t]r*eZPc<.[X`1bGKL])g1?uGonY^eo!N>hP-8G]u]c,P:H73$2W@3`YfHos%*iIqoeOmkahaV.B&Cn<kP2,MDBJ>n#3@<Uaqj1X@7TrpXIcDVtSi.CeTrnHUs\<49o&aX^C8TL4jPFiiebb,j8/5/cPbm\l'ZSYGNAsC(C/CE]5H2[k0Cc6Y%Y8?^X;oPN;^So(9%<EG,gI(D4Ip=-;1lr%k)9SOB<fbiaIjLHU-HN?CDM&8ae?m39lG'GlDu$ebl0XHd$T-Yn15^)M#_[!nGdlPqq;(T4&V&h.ET'V5t,:Z_%-`/'*+ef7S&>:,JigC&[I(f?F:p:HL+mJBH6_aOWDbm*IdV3saD/]ebK61\*VN_JDLK8KP$eU'9a_UC0*HKcssP%SihB[:LXT!Y+Hp#^(]VCp;H2Y8!=4QA*D#c;.2-\'t\+j#FcA5JQ5G5Y!>fDQ/$<.1sOq69cp'Y+Z'5#1PdG0+DMK^'FcH)Ek]V68X[C4-o8r`!ath\/_AeBSuO-"A?28nQ9q9ke!qdR7k4cgWMTN<7p]9&c.8.m9tNAnBRNBG[7aesqO*F16@4Ec;=iGIV\WXCcp,]SdLPq'i'l^%^+2=\V--W.%&ZC-ERme(NDq7W@SNKRMSWSX3[MUl:cU/aXRm0B8qJ[(-'Pp=`Ye;p!W4fQ2Y2Vd='Ql5l)%3d$p!IkkVrQRghHJ+:NImK%rQFH97A$lEGGj;-(#W%/lDQ)s$>[U=!+@8de&qB9P6jnB*RD8t@]Q2+Ec[$#19&/>bbX'5GkVPMXE>[!K-+>j(4Mb'NUf'H`t1\P^A?;o:\JU2`jc.pt;9WM19T&TFZ/'kp+/2Ol6nc*DR"t$W*q&NH"1hn]@_hVoboT^[?/=s,+]JI=W-Th'nm.,=F.l2d7'k\nX9aAdm!9H'WD9gXrjFKte55N>%=Ta`OmZ*2^CBl<F=XZAH62m01jp"uNDmT[d3_9"bPH?L(;Hs,h>+hHegQY/LgSeMm;ijXjs(?%h])"e'gH\Dr%m5dj.20]qM7<+m,Jfbqq_`O;EFJEq''YBS:#,d)1@sD&]9emm(78+dXY\1uY+85,N:+R$@5V-pDeT/P:2qkA\($;-ELF2EDP&n()pO=o]T^2i?h8H&0iW/H>>mq/Y"C//TT;MI\$(n-ApjNZB\aB]c$(X;0:h@I:Pb2hB1%'''MLW^d+8+P05e7&7:u''M3Fm,F2_id,YuM>XXom\+)$_lHINC#.:1G8IurH78eu?"nI6l>2q>_&,\2u@ZsSpWDl$X*QafVuAMS0sk-1_;kV'+-TT$WZ`_FSI(W%*Dq.Npq?*`1T:*o2m]"b'_]O<_AO%tpOXX-d#,c=4`*cfB$=&k+onsc[j&"er<4n,3<?3lt@g<Q>'9RW1;b6f5fUF*`d^j'K+V?Fn#6iZmThYhEng,Us@k!lLF3LmZoWF8_g]t51If.UONZ0&ceQZoR'1G^F=-tLH.1\KH>h&g?'.]$g'EKYQ$A]=#oYjfWZaiC%Ga9P^)?qUB73*K7#D"GO%T\0\s(TpFmf-"%A*`LebO$eNBj_>QQs#HMc,F#lY\n=n3cdBXgCLd+i6.7XbO5q+*W6OU%qgTm[_cNaLF)LsfqUTL0F/"=`ji,p<J#%+LDYc<W7(/gk4enKR-9l#;U#:&4l)*?9pKP^hEo`;0c+g//S5f&I.V5gSAY*_qmn(f`1m7I5b<S^b-#Q)1DFbU'V;@"m)@?8]3m"YO%5*.Tb=RfO^Ett5/%p+h=^Zha?ri[!dE,)Q/HLX%kp'&O.et5n4icrDGiN/PC?.>O,=V/EYtE[sIs+/kjVoPO09JA,P+Q^B(0N@j>[!mFPHL1nc?n!QN[/Um2"d;5P2>&jl^<H>ipZp&].&Yo`$IX2+XU2a"='Qunn[*R1odNZ7DG&B4YBeiV^nQ]TKW/:d5Ko\(B'Q&'%B`HbBZb\A1V_nWVR+&2duhAl]CJHqGqBM"neW<g%u;loef`VEP2TgoOSrWPRR6Gc[-h6ABHhYAXU;5pO%BpGLpk\#Pl$*lFO*2@2>kSC&]s\P0pAf9iH0(<2*"(XT_\`5O#@gmga3tO8DCIo87XT`cY8Ycb!]r"\d$sJLO_EpuY.8B8.9H,THcEOYHcgHcF6hY:sid4`c'^4Qo]M]fThiDk>2NJ\HSF8-nfbg/kMj2YkaS>=Yb%@A5Gn9"5Erj!=fI4"?V\jT/:8FCrSo&cHo@K$39@Xr@-KLZ&EW71;2fJM:t6h80+J@aJbNqNC$TE;HVqFhXU*'`*2@'B8r^c4)R:f`/NE/q>S.nM0\Z9GA_=dRZOAbV"QE&"&LtUOjpt*p.30&rB$J)n<mBDG&orIu@^O\1)Pps8.i`qKT*;E6#Suc:qVp=)[sd-=1`lp?`2kdBP:IVN7e]@A5Gn8n6][a'HKFbSV'gamq,e;u.>*)UXd;X8g5%i,ZBG'?qj4*M%1KHLLgI&E>p4S'm\ub]+FQ,r8!o;mJO0eW`7\&PQoXh[C$i'B]0nD\tF0:63.UN;"1*PRMXB`$d5U0]#[CPUqknMoX24+To[2^HsV/Jgn802oKs%&PQo?Hf2CAR$&<h;Z^>,k.M6Z&;JIC1Vt?[,B+fRR7daCG@4#CzL4C]Rz(h+2V,],UYD"W?NN\eC2n>PZJJ"ku@c[>4tZBe!f=8t=<2W`EG4c]3&:4>b;zi3P+0;jnJJlA`fCUtnhP6Dlf`4QLp$ED$#/\[b'ud<+!*E4`Xs3iNW=T*@sqzT9i>3--c:N)7e!)WqU5D``[,)-RU:eSG:QU4N;fF?&u:W"aYNBF$+goG$JerpYSp7CHK#VCSI(/4)"S\)[Y5F9)<:1npC7'a"7[i2(QJcG@C?]c9\qC-sfVsFJu)fgEUZ?<2bGag6=!lIF4@k>W/)=lk-P.TUPd,mI6DAz)!=gl8]lNgOqBb"4e\Ctq_4&J?@D*A[m]"SQ+tu)CKiepg0QVV55]6/PbrcLZ_HL+]b5g>f%,=HWBZ*b<s(0'[n6RGWqn,Uc_opZ"u/mHTeX4#nJmV_(LQ_Z^!@'f4';:i;rUk):\RMpdk7@C@I*S'%O_7\^6X/t'+"X=!!"h9PNF;gS2b5gNO-t/bpTN<Ur&Q7+&;_I^*XN^6+!\2HEC#n=R`HQ'T^qJ[Ubo<>t=>M(cE]=2)&5t3JeL9<;r'aY&A("LZ`Hig2oR)jt]XC?J-Y8H28kfbOi-0m)o!%j5o7`4>3m04M2s?z`q^$=hm<Z]-@>'':.^\V=7T;L1mHp@e]eb1#tqt0]#EIji>X[$]eqKJ]mN^7G,2aO7So5gEJo7HR3T[qPZIip9#Bc'II*::pLp&NpU[J*TPj+XQ@/8A-ia5I!15d=c]kB"#Fdj.CJI%YObgWL$^NcXIsB<jC<W+5Z/kO-&QA&`q+/Pfr0G%t;sGf<lk"K;9fhe99j\@:;,a42"$=!"B,c(n61^?Yp-eT&2dTW2a!NX<jGctcBIF.q@E4]-l"Q!-"onW'!&2FU1F6X#:K>5c@((]oX.*I@CdF>0*d.0s5:6]E\$'.0FFJ@noY]-:EQb>H*nE6UdSInt;tSUJgluK@?[jhCNgD9Nh1+t77IC3A);W`tRM2r7me.,c%PE=u%Thq6aX<W=z=9/-Y8H8_j!!#C%PQ1[`!!!E.;ZZq!!!"\U9F1\!!!'eG0I6]!!!!!d^m"g!!!!!-!E0%"!!!!Q"AB+%!!!#7&25C1z6bnodz$o'51P'3-4L^N`sRPN"=SeJJU>>ZDZeA!obHQ;?+?2YE^T,XY>GJEcR"#]\B`,g\40Zn(o!<<*"J/L-M;kgj@X`e5F("MtJBrRcmrn]=JO+_Q1-lW.b!WW3#^b;#$Qr<,/7<[NL+8>fRXIuQf>]D!LU+'Dsd?_=J2Oj+#&[J[7>5S3*hS.BWb<fjd$LmUlR!u6&PbNC[q9bn-Y&'07APo-2rkt%CKk*H@$l+7mYWg9hmE5-,oYYDsYJ^c3q#T9PAV&^phAd&uL`P+$`&\W*hVQL\2(Kfbcc^t.[34T)>H->@4Ij=@/bEO740X@g++;kDWHn7^%+I(\(B=F8!&/=\oCS%%2k5ku@;G6M(`B_=lhITN::2nIX-0CX-/N>P;3\<XH45QBs-Q;Ua).">SuOu3QF<?QCE&Mm/7I<YT&[*Ti_."]pNb_4#:gm+VPL[\Qa>X;,>Zb^inX:2<c#d?V!UTlm)./X951E(4=`Jlgahn[Ku2R1"^st5H753t2]nGFFiL+%0ejsj/%:KSR9FoO$5P^M-W^]J+$tH?H?SiS?Om,:!!)q[)#]D2EVIY^lR2FF?QEf9AO^]S\$.L6cYBa9f3=6$LSOIR]I#A.3h@=3c\EjVE>#dqWAR"ND7Ug%F.#(Kk*9fC9K-QU_i*-Bq0?n^&u^]rCJoPi,_N&#i*45N*j\pbaZ+:PDU?'>ic_LH>s=C7Z#fO%:rc/a,`sf-:]ET(2:'cun#UU<4P7a(HO'`H%,V3g!!!#CS"FUkd]Sb_W2/F5!DsEXUjC]F](,LiDBJc;`BDp[IBVBd"]D'U?N&?(qNh@#M&a"Wa-rDjN;n,+W(j7-PD?V*BCDBkNdb/1)IAr=-goR.IT&l3j_@eQ'"kBYGp4bIWV9B$R!V!pL-tWu-Mf\)D9P%anTK3.`Ka1^]:PurM;t0)<+AOKpXZhWjYcZ%*eLQ3%GA_!kHP*h!!$D30T(3LU)3]ZVQa.`gi)Nn8;*Q,=-E]&r-$[!H"DgPS'[+W2aXL:Tci-F*F%6q=*<``LN+<C[:^G';F0o>)"pAjdl1-0VOq/ha]DqTe9Z,:UZR]/^>`*f8Z[^0ko6hjasIYioM$HCbaIk'jRar7@lSDQ7llCc\+F>C7p(u;AJ9'T9MQ50?&Ws8EnaV@:d9At3.9\*7^tj'Qe-4hm&_SBVWSNe9hEY`,URb)znB56>:Z'+XGI,oHEgpfTAMqT$'>-I#8i(H)BlD7QfJ%Mr#:BbC^ibD_[55CLRhAHelVGOEnT&3Qq_-g9aBa3iM3bO+g+gq0cG@DBcGj-Er\FtN'!nA$nsi_Z:3KC8ILB3\3R%9';,!ikB.s"#EaX7kqLq?#=8,6M4>gn<)`,srflKW%ki.8DgB4"5?L=Q04XIRkCDJRZ#bSkVduVJm!m8;%kg&B5ZA['+=o\O&!8s3`Gl6\q?;5n&O8%O'ahOi=c()WLmV_Jq2[KHa!!$WQGVg^\GM.OI!GiR4DrAjdV9/LVI/j6I!18T4BM&7)!!!"+#+-#'!!!"L+^dnBzL4C]Rz(]pQ;z?jN,4zJ0@Bj9$I>9!!!#Z(75^7!!!"L+^dnBzL4C]Rz(rFe""98E%!+6uJIkX&R-N~>endstream
|
395 |
+
endobj
|
396 |
+
104 0 obj
|
397 |
+
<< /Contents 160 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.b7a5ac708be9df2b565ab0a3537e1a53 102 0 R /FormXob.e10777c65db8f33c527546567b83dd27 103 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
398 |
+
/Type /Page >>
|
399 |
+
endobj
|
400 |
+
105 0 obj
|
401 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 612 /Length 57131 /SMask 106 0 R
|
402 |
+
/Subtype /Image /Type /XObject /Width 437 >>
|
403 |
+
stream
|
404 |
+
Gb",kH$g;pqZ$(LG1Ca(XKo!9Gl:l)Y1Mqg,)fT"%RCdpKE754"sFNf\KqdmU7?eN&8o@($A:Z(j@UP"EeM8JLN#Y4&31rSr'&Re>uT3Xh/d*RPJHeh,HoDAeQ(/Ue";)\Wp6VD@Y,^.Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)JfnrG.]@SLEdPS^PgEOP.o6S\U'a^#Vue9KJF<WA<l)HNjfnl`:b/OG<IcPqnd5p25nF/b&;2]u-V4jP+bf!>+:'/>OIQpd5tE/E,RB!`6LmYY"@3S%5nF/b&/ls!-4#3b6LmYY"<k`kGpGBr#_J.)njj;p+bf!>+:*QA#_F0)JflmHYY5T2+bf!>+:(:@aWj(_6r5!d,m]*a6Lm\&Gl7L2cPJ6@4<%bTSNHSh0>Cc+Hl3mIEp_R<?AG8L,4*_tJcrjep7#/ajIi\+N2;!J#_KQ8aNVk5[;+6f&<i3;!+B-IIf7cq;t9=`C"&(`4j*'jM+0?ZLSUcC5r6K[64?dk;`2\jmbRd+YJ6Cs<?he/-=H8s\Ut(qWZ#@'HL%\3VbVC%g@_l*?GjO;)E#[YaP_2k:UjfK!i-D=l-cEOR58KoWh)=uEm0n*@[^A*I<GDYl%OhFV1.*8Hmi)DLu#[ec^H_lDV_mte&H.QW^.0!?G0O?:)sTY/28k6%YmDMNVD=[?T]er2YP05Ih^@:^OCUYU.#uGr:\l`.D?8q,``(*X9>Zp_4Y)\Yu&O%)fNADAB5<M_6:WQ3jVMJ1.CgD&KPfF\5@=sOsNa4FGoh9bKHA;H*Wg7HM-P/dYj!?9)Y47plr?Pk+tL2mjp4<-8",'6]2qm-lA^qN`*L2q.\4gg1gbTan*noH*VkH1KBE<GU>i_N\js^P\Q8:[\YtkUbtQ_PW3HSOt>$"Q_GfWbfrh=[R<+"QKZ92>kc&<=a!ll;:5*=!d?hO21:G>Omg>Y(?K-T7U)+@ZpZ9Qjq\l,U[ubLfl>)5LTQ,8NJOlOQ2]6]l-cDn.p(<&=-%WN_<('nhmV;,ZY.Um==dGeQZ)Q^eSlj\l0o=LP*3aN+Ok?`i@^"Q4E04Ds8MtB)WUulf:9p#^\nAA]lresPq,ogHNKs38<Fa?\X3RkiGb$^3=lu('of.VEmpgpG1IFd]pd/Jr^L@WariV_Y!3'bQlLgnqNKI]-e+AW:5a/Z/L!$'T\.Gc4=\m!?uoS<m#n!?\NCYiV@Borp-i'sZh+T-O:c,^&5u`k1($.dA^lU\]HA_.XVJGXmVLr#7!>G]3VEq(79SV+Sb:L)@oQ-*:6D5U?aoOG,J\B-FmITs2/38"*oDD?h303^,+s[sLOToWn(G$;/35jSHgot0iZTCknA0ed(Gn#)Y[KnW(+jd"f3Wg+:S0iIZU![%VG6C2[r3XF/mZ'@Cpok(*)S5ZG_jqiAGuAtK.MNHh05DOGNQn`^A2C4k042=$/Et:CY-)+395fDFn0(mW)<Hcm6g$H\[f%Yc-kr!3csTMe#0$GQ_0nbC"&pc'..B&)),Fu.Z'qmLHlgK?CNllhXKLA;5I#C7ZJI6kg6$=IM.*,13mD*_XlRs`]>2M5n$b=*,\Q4;=m.nD[IJ`ERkCq.H45GWnSc08_i]A779P_-)[uB,-:;PWX$MV*TT"Xg!/'__\'11:Wufh9D:EDe"udOQ*TJ6DKr$.9Fs>XF=@qhpVP^EEQU:4*)otJL_b0tMb=\RV6Ftb>M,"Q>`b5,_]to)np0@m"hS*&)36RRlp^_a0bH$P]oX+593RYZ9T-2m;)kq84U4_lI[1FCd(>W)Bed#_DO]<^<i,V42!1-3IY"rCfaFN4_IIE<\huSiABS6,6%]B43,q89GPh+$c'gL'O+N=(,&71d&_"Dcem%b/cPI6[eiJ!@a?t2$F6Ci&&@(kh7qg(mn%Hd97R]c14/sW%RWS&W_6:TL9$FhXc'hI"Bb:n&<6T#oe##j#+$VAY)_ZeSbEckFJ;/77g>V->*ed7uA&f(_2[^FtTKrAn$j@r?8(RhH767K*KA.>b$'>JZ):sOIDKeY;-Fo^HI<r&I3cE&`QV2KaC8LY;SJ()u+.pkY4P!Gh>Y=,B38ntjbN!A,mR2>"C*Lfq.%?fr)cY-0\WSb3SZ.B,Z4!V1]Mb[YJ]EmV4$/eKf#I(DOI2.L<h2X+#PGSD<7p6QZUMg1EM$--;jh.;=hK!a3%u!Co[?TCJ,QdBk+-_Q6+G/QbaC8bET>%iIQ%;1m/Ht\R1BVmle??mD:l'9h[9HtIHr(-=0=r&VG<[3as0e&kqFs&?G1Z`SocX2FPXNN#`&5$9qOV_G4""P/"f+AaH.Q0r9seM$MB0M#[oZ1%"WZC`l;bJO-W(bVb\fH/g6*c@EZf;Mj:ojb",j+<&-Chjeg1qARJ\ZTc/J3LU5%S(!rpg/<`T5B2t`g6I%sJ>3R,J"lk>-P;Dm5^HV'DC<=uc)2Y]kQ+gq%kBO[.ngH_$ad^B3=QdZ,,]Oj4G'8`7DoOO5@bqhM<\,X:d$?J#c62!)(/<9eI6]?bH*.Z"5-/HQgV%rXc^m9g\Zf8>Hq;T?]mEtlCagjXRr?"Ih1OaFA7Ej7W`;EO\3ktcfj%CD1hd"=/MAbq`/#!h2U!?_8hioMB$D5PU_EEV2_-f^@KW(M>+pEDqViC#B[HkdZ>--un7fRZV;[kVHqrR-5KCR"ob1E>l-\Rg``(U"7sDkD.hYg;MRFfaApk+@Xn0IO?1R/XclC@E"c4Xjq6!I=\Sg+FC>A;lG,?a81%[TNZT1c)=[fk=nQ,B1E47"[2MVQ2oMF^?M<3.S9\h95;:0C>/KVqfdF026[hgL&Qo->&)?e2RTFE"gD;)@r?SW1,6L.+$*6J3Id%SA!P:+=I*"I`fSqRlco`R"K(eDM2)`DLLb5n2:n(tas@?^*5[n!q8s6@[f,OdB!6&V/WQn\]3>c`hJ<&a;,Q'$@GJP4/?]=Sio5_o\dia9CKXq^<L7oYL'[m=,eT\]Qs+%KES5V8kM]L9T6Ih\deD!q9R,?3]`_1*(n8.5`LgQ+JS>^^HZWGDUbW4d\TUi.HAo7Z9Ng9q"44N]q40)CPLF;:?flqV@11n)CZWJU[g8)AhLOHP?fc%MJM0>*kA`q3dF[3P'1B'SuIV!i7a)O.WooWa1.XMI:_2NH6im#NR(R*+2LNLl>P29C8-/C),Ur-NZL?@LDQ#X\Vjnu*4(YG46G\fIe_lWbgNt=?VN2kGMdg]hWuSc:7XG((+iuUA7fF?XLJ?:)4<^=rhW8SfNngq"<$LIO.AF\pA+=CZ"rOJSY(?()7Lh1ro/hh:7O9e2@D2d(1+@M8OTsX8P/*jS\(aQH1GKC]'IqL$\'#I$f1gP`ubodM`#G'WYKkH^ib>!MI<(0+d.(!5`J4AH03>=n1@cE>f.j\Q4tk*:C,986&(;un)uDJV'V3!!6X?<<s=IqL`/2:*[9S='n^96@sR](\CMF.n15M94F0"dnSlCK)0b*[MtH\*V08iVUcMGcjmfq/e`&V[?.Vc455&(+CYW!pB.D[<B31"(mhKV5PfN%:9B"9h<-GoE4Dro_Dhlr?q4>QLC=]I()]K1bN<c[a(!)D;K`6<9?hiQ3&)^]t9]5BUn)Cq`%j&sLkSVYpY!N-"b'I^Y*/_%Y@,*.EKe%t#i@1I1@dhb7iPWW5kh3<*Y$JYad><^:@a.E(*f\M`]AOdjA\hYBj?ID/.#l/2>'\F+gr39o<l#&EL>scGM3eAu,;Rb*fTmk8b,MWa)#A/EduN*c7!dS;kK"ZcMfrTU2!^T=S[P9Kg"pBhO3Ym@a.IT:;mU!="+*-kh_f]Ej]=N?LGt_-3j?Zo9XQMTek[RXdN9dElgDLdXVXb%Zm'%5%iLa$_Vp'H#+pZT[VabG5/IkgET>(7Rr.i`eQ]IuahgO.!*Kt>iSY9Acp]Dl(G=3nai9;Zfr.Q"*Y2P=6^ouNGc.tUN'i=.iC1P!6O55lWWS4q)[RlcR)";t!#6M.@";??1mrL/04)<dj,ZFeG5/3G_\[S"V<'T$gpo6/"j:uJaH;p,!qAZ(Nf/a1+jS:p/kt!EfC-W<&X-ECHl^l"iE6HhHe`cXH1Yo'9,MP#YfAnqg-ctkS)_/PWNjF-EIhV*Z8dppH+>uk>$D/_@H$W_hN68eEL=648ns*7X80hkKq"%g`7[3<m!ad+./$^`4`7+g>nCnHOB]/0l.)h9!"/PD-_DN)k3[M7E_`/d-$H(.Q@oL^dmJ`Pf<;BMd/qH5%`lRHoVu$XHA:!b.L%iu6\,FN)PC?L[oTV7E'"YO_lja.4P>f;knX!mqsRA_SeA:aWl4Y'3HIZk)tJbLnGjGuZ`&GY^%N@:^TN+1+uW]A_8``%H@f>j7K]1OiPUG/PnB:M:4+c0]IY2*j2[5$Pn>&0:_TKa&k"a8.AX^B,TNiPh7I<2AO.T0"oi>KXk0^].us7Nj,H"U!pM5.M/=E0oB+:J<oe8efWjQ@*Aub++>5\iIVd&b*P!3<qV8W&V5FhWY&WLA4=0n^<1E8A"]hg5/ZKdq:`c=J_h:L9eO)Oe6h6b;**`s1X,SWj+J!Ybj"Ca.Kh^"UijWg])TdU),9R9/!%9,b">O1hT,BV-+@HX`e_n8rR:Y'WAUM-tZ-m>AB?hJopCL`LU+,reV+[8[m3YPrYf8ieJA>3EXR"E;pTY,H!o`FmV$dui`O9s%rM,E;iWjr/l)4"`V<@j>QX>W&(u\%AJLsp`0g7d-*%EsjkYU.,M%ElIP^V2g@B@dg_hJWuX\i)D0>.>aqpLoX=hAkEE"+TZ1O58Vo(%s,OudaNe>Q4h52KVLONb`l#bj.aTDB=j![VBL.W^M[HnmfUBT)XR6ep<1Gp5=nlk%u84SAIc@3]fFd#!Oq:E)0+e8cEW<ijr[B?uDJ-hmqo&3[;Wn[$P*P;YP_/B%(E:dQl@7m<"fY0YaNC2jd[aH7]D9<j5-]32Hf4B:7-?WHVG-Vp<bXnehgRrD)pLRMNg\>I=h+s.aCgS$t>keDR_q<+B"*q1bY@$r,="58R0=o(+!1,:W1Sis],k>(_h>$@A,Uc1D$c!WlJK)2c0Yq>;#/QTS*3H3o,W!;b!N4PUSA)\aN:tK$eHLV*rJAoLH8IsUgG;%`HSe=6Do]aiX0"jI#W`<ij\om!=_C63qnBdjr9][DB8Bc;:3bU^a'JD>.d!Sk<BK30gf3a"ZINSr`Ekm2+-:aIknjj=C!CpqJPURq$L1"*OhS$C:hql(qH_q5-]6DlN>78[ia#:i%K<M+##SNqiD%TOK&Wb9V30n$I#W=Q(>qhB2jN3VCIJ4`u)$j<u[V`uGPEV3,B=_Wq&hsU2;.A!`H@!/)!I/UrGOOZOLK*hV8N+<pn$Rpi+e[s&,'K7Z+T&D>i5('D$ZtO<9;f;<Bo9efOoL4L,GZ\%$:mnuJq8[k$7#C3)R+"oKF(2e7O02ARl5,P-9QssMLE3pXS!KSq=<Y2k\)^6eu`.4%FiQG_UXVb2o;VKeGQ1o%4K?GUIUe4Dr.-Q"0PB,(G=3nT%L=r11n`InMF`b@X,d8Ho@LH=FlSZ7ija8N9s&i4`faZ^'cTM5(39H=mOM4Mg-AM7JL,`^o@i_+qRjI2r\^54XP>hhRrZB0>;s4?DM*2rr&s&[1]Zt^*,FWO?=-Y#7n#Ui@sO5B\'9<r;#s[Lr\+RH]:29r,AUTO<I!06P)QD!S<P;-%m=saa3[Iang5RnlSnKY@D'PiEjCA>J#&q6:(`9;M[%!H.]?0>b)EuM]O=#b@mOk*($7`p"*Q+>4Psc/mT)/7DXQZ$i&=7g"G%f_kY1[R5]%*DdLf3,PFI>',)%QgCS+q[+T9O\ohN.-i@:o'L[!>q!gn6CGg"b31BpIKoh1/O6tZ/gTkB`&FQoDO?=//#itFNn%XW%l"?JO.(sBG._[_JKLOAZ#i4h#[B"OCbEaaQ!@Hk/:H_JU9gc#,9@(`%d?G"d%I/N(hGA_Rj'N'Or[qE`N7@sog:;9;Y3Ks9-V^$TS^n!BXnXJV_hJUhrt^JAT(oqd^'eN4q.+#HLr,0%AS#HC'-')WD!fra2)Rm@OURD/^Y!.dUB8*I@.2scljI]s=G,a!"Xd55.9tQdHEOr@jJ*.8-QA>PG'T9&6'QfUNu^H6*57NeP#bR#hiaS&c:1amab?(X3=oXGIaA<Q'T]RaIs@@?#D8+Iri(%Fi]sqde&Hbb0Wn0,?C>tRgU9gmo7[)o?bTckG"\/S77b^&_OZ=ob'$'\e'c[_,,"Yh`3VFh&,9QBO(*_b*("Y\V[4S;N8VB-n:rkW;&JiF-_I31Um1hWbhVb;R=p.POXTt>,PpAS+2gs]CY#RIFm@INRl2u+$202h-YeZ.!qA?c-jes'+5oP2`F4`cAFeg'@KJN6cl)FHaWTDqXL[MkRH(PY]m>KLV5H4toOuLIeu>XJCtHXa(GuY_OBIAeF&7AanOIi"ia2D5W%-CLpiWoUcP@O2.6))(b*C`g7*t>E(jN];i-"WF5;5\[=D%-V+?I*"0HG^"f7Cn=L!-6scAG'hK\*VZM=T?-qE6M/DRsY4P=lJ+8iu,5rVIBa?9DEm%NbV'cSKe5>l9M11cmd'F3*LgRh9$<<e6UYf##u`Rkn[eP`7&CLP\nc73=L.@-5\$Z*CR]dF!b_S#Nc3gU:J(INq@CKH?#gAe:\s+$Z@[3ILVk'e<<UcO168W)9=7b&QI]_=M3Li&tu5\8e_Q$GpS1$/i4,fC3qppYmaBi4<#.g5Q)[qXj#3GJ"i=[@9*nNgf!iYJ:'_c'gLd>(.16UUGeLR5Sn#P*Ps7ldD'=2T]YHUYMJ%BA'$E`RuVB?1OqA0(#+YPtfQ>50d`G:H3!W\F,md3^PU>.RB:"+B*5\c7?]:\pF$a@::>VpVMUlqRO'*oCF,.f`LqM5N0hS1M;^f3?ff6Y.F2Q:Hoj_H5&ENCY,^_Q/0&r,MG;(m$MBB!B=SXU<fDo.m5=lMo0hGj2[5P+lAA4S7]2WioGtV6#kN8_hW5[1smqmD29H\mG#*';ZJ\q+fA)+_IXDl6(U'\CfBh\$-U3CJ]arb*pkt7D,F;8I-mHi+NiifZ!4'@p%?P=8eihpAL]nnAO`5HHIg)uqJ!tUJfr2;-'cO+!k='OW[Njtc=*k(O3[Q9PUVJ'f_d>$4S"4%.'+a$U5VuZH+`Qe)A-=`fPc[_m$oEG/WZu=1"$t!bAL[W[Qdd]*r3ZW,``'oggIYR;/('PdQOa_'UqUTbG-h^\(b1f`r*@GAWu,Z"]["]-4&Uc6BF^^N4#8JkZ[Pk+Ns1X>+3R.cs*Wr>YSK["@87RV;--oaJ7o$eF)8K4jCC?-t/9[$>XmRq;SuX1pD`XLf/gg&gRa7OQ*H+P+3-f5tE/E,RB!`6LmYY"@3S%5nF/b&/ls!-4#3b;P*!TW5,[m6!qtM";)PEG?B)DB+%dQoPojH-O>;04!gAZ,+,]jP<9H\;5Pb04IXS3?B?%;ER3#WbkG5(RusXsK'dYEXmrBNHt=\C&slbZS3AlAS2J0K+thE>I"A5,BPD:*I]+(q2)/NaV$K`d=Qd/Nc=AMC)-cL2Cnm`l=iqmVb(SlZZCLX,N8,UX)&t`fp!"^2TpQ;V"@3U5ilc/s7e5bB;:e3!"ab+Q6gQ#EHXtT^8&_:c32[P<9!h&IV\Upp)(O*o(DRp2SClne<2a8,^,gUOUt)o_^bs`H;CcCF.Tp4YSJkRoP847k<5&fSEpQ[g+ha#/+:,hcI$lSA801RZXd.DDAqV/[nu-f,DPpIUa!m_)#1kBe!&^1b/nGRb6M3bqG)p-]YS..:r[ILXHVA#Z2j-\>mL3<i/&AqZ1Y8aPMED6.[N"ClL=*T0/5KElGGHg6:0?pf'[/.]SiN4m$%aT*Pl?>J`j:AgW0t!j0lsT_3DO9q<!$or4M"J&nR!?j]Xnd,\7Fg`])??\]uV><,=1+pKOMSbUY3LAC*q4A/nUnOO=%JL%?d=X/W\%BP[**Ja#_<e5nH4Wo!N'<B+&q*Oj_-FPa`9RF;1:g,L.K>S=aA.&YZQL.U'dQe9.ncWq<X5c.j"ONE"p3^uUX>_rp/.GpE[4-\<M&7^Ie!,C&5$n=3$bHt$@@8rE1)WDZurEL`/6F<YLKAA-WuA+L_?Xs9LX`hb(jdfe%kR.%9"=O_q=c<st@EKWhD+M:RC5=-V$Jfk>N+A)udK*4IO;Fhi8JfpkN4;%c_"9jreJfk=J,``'o&5l%?$%a9*Jfk>N+:(:9"j7$7Gf#e2d1[739+1%]GCGn?S@cs%fcX(&:NPSiF"\[^Ns%an@Nnrk3W`mXr\0SUecLqKWNoVkQm"I9L`7@QP/X?R.cms@CS2LjlsS-g$r3W#L#e@=DKNC!GqL7tYVo@<C*h?0L:f)3Z2g1-],FDM#n2G<g&XP28.[^@#*Mt;.$Vb_J1Tegk?P+6D3)Z)$QSJ;PPdM![)UA`CaTXa/<()/oq8-S"qUo'"H`[H\qhi%.]N]Q;n93UX!M2YfM:X#=irk3/lT,o=_;Q=6YV,pDEdu3%i!U2;cclBc;pgCAom_tWNG29S5R@>i"m]hYBEZPX^ht#Nm=rbf*/Q<h$kkZ'KHg0;*OLo=mF-V8l@:&<dV!:#@#a(6OAZ61t/l1YodO+)=Re51dkO-2rt6J,=rp_K(-]\Z7OB]FX:U#;JcN0MR&J<'29j7p&I>"E`:meZeL0\9p_)Ji\JB_O9s#X6/:Z@GF.NWb.C=!)H&>oZM9+/>"L'%hTM)A*$rma;H]eKJ4tOuaWj+,kQE#h\s.YjO'^"-F]C32;-@$tnMnFu&0Aq<6/:Z,6QVNcQ^(6lCjYeX(0^cB3S#*]GDG#6.]$TW"@3Sb-Q)D&$qHQS>e<-a5KYIuYtN+D\JlVpfYd_t+[HYu1-q&CiY%5tPZ*s=1!\^HCBW2jdt0^qP(I7s+?Tsr4;L!^/T\Jc=#5$GiS8m+c$8m"W3LMdBSJ^:"*lH=c4%s67HL1aJfqpc^[`5GS-l%W3BiD_F<9RjXXH2oDU4PD]'g?pAgBjPO.RUId7F@eqG`iO2UFctO:jslU1EiI`h(?qGh.i3D3Bm!-]^lTSSP1=1B3O;,,]*a"o?$++NbS<P=L_$(B(m,C,Fh1ArGf8\QPX?1NSHWNtYE2ebNRJFne5Qlk!Tb:N_B)Z=C:_Wf2m7"@qtLKM9<[i$5=CWK%$Okn^="8`C`4,qi48m\MD5;^s:(qCaZVZQf%.W@0,GVNrNGPJc73jH1R&'$TH7R>\u5T2h,F)?\Z$UIhlMUH1q2EQm(^.ALA^jA@@j9gN$gf4L"A'!jk0[GiqpW82=5!%NE]cB/5)foEDjN@O;m=F_DiQt,Rri?#eM7XV2-m5l[YNbi,g-CH<3RIeCZ9CbUb2[tr.g)36",XV"mF99FZOqZ7\*,?[XcE[,TnPP/`kssbQQ>Tr9/rrVh/QC(GbN_o+oao#$77eO,,5d[/caBQa`cLK.qomi5:U[OL="]Ps@+jaGKCip%T!R<"_6/7Ymd^@C0\L&FmcmS&Du#Vuf^1gOP:uGK>1PQB/:]",";-)T<utZ(,L[iZ/A2]T*aT`!A@JIJVAX]@ZF3/RA'O)a3He#cn\`&kO)p8GC/k=P@sKo4YZi/oHY.pW-8i9ZH+_IT8+K1^i?p2I=NnH9QS^-u;nCLEBccnH*Y"2'9J>J+Xd-%Jr44@hL8>hj=Hl>;7$UeISG6f2)IHS0+F,5gnji1qY$"g0S"`VSRtqigXF+Y>ZouDlXMoIPC[dCQ4A(ZWFs8H.>ERWN%""[%n:pVQ3%%#'/7cWo9pB6Z_pXMPAb)5$g_Nm].@M&m>rge5X)2d+\pfaf'WJcL,``(*mKi*n*]>med[==$ATnZ]:/D!s2Yi+(fd7[oUL;dE=SG(L#]"g.>[o(.;1Tr<cF($I0Hd:/Om;pB.4RA5K+69a.,DC0QhP_uq"ihccSG*Z=sVN7QX]k1'ZhRc&-P91"@3SeH(rg"AdEu2aql=a"@3Ss80/(h+G'[:.7"Mu'Ttt<+:'DANs%`[5t7A@YsMEs4\Pa"3B&0h59AS'm`pRul7Nk'eTIQ'JmRd^8Zl3\>l+t<?l2T[6kDaHVR4!%2YeNn$;[279_fseoj%m1ZUr&nllM?=.N`OeAh2UsB79Cr:aD))623`[aeLW7UAGU6kJ)mPGtOBLH>On=-6HkUj^71PGfH@0]+^[U@t?E8\'+U.bJYf!=eZR7T,^=(D;Sp1O0"mdm)k*79HJtem:W%AEaREs2Yg#_XumY-SR3BehfQIp;2gBmlY\052'WBYO:e(m7(+4r;pChQVjT>A;(s*Z>k*oKMT+;:M4:`pJr$s".^MgYQHEe<C4ofi>uO>!O2NOs1Kq"3-C@TPd\tW%\:%jcH":UrN]D-$PR5R)7B=m4Ous@Fq'-_sb3%tt.i0&ESWR1l0fHG"0Fs4[%WE_DrRB^W;:6ZsXu0,>S8tO+=>OU"5oQ)W46J4PPt.G&.FEMaE]*q:aWj*95>!Phb!`P<H+j-B8$Qh6Z)u7d>t$N*U+d1IJCh6MU&r@rkPX62"?+qn>KYHqGYDnMOZRd4Ho=MoH1]1A9ejSe7.Nk[jc:%sUCo[i;W`47pb.[LLhe#g`G!hJ1!W1nEgCd<Yuu8IijAZ``_o:s8.\1.@C$tD>2qQPf9akl$WfbA]-lB,FH5Vuf#a)Y:MhSB)F[Y\$2Gs0Rc'WY4Rl)Snl/XnUu7[aDH^#sbS=&tr#OG-VWh^[MTRd3Y&._j5dB_(]n-[5]0*Z:&QejlrKBb'g$-e6c1e7Kj4*8VP#GH6N,obSlC&lPZ9Tl3>\hArZRuhY+$>:-$biI"?'s3tUPIREm`%B!/oo;,>p1]OQ5&Lc!o%@5Zuh@=K6-hQKH=cW;b2j_>Y-9'inWQNY_OV3.'7#W_QQq/K\pGiI/!"+_SA/DARpUEr,?(^As3"8nc<mio@2=>-m(J.);%:nUMYl6Lba]qpmElmg!uuCDMpK&,aY.`>-$._TJ@J5,%'/.m*Bepb<eYH4SAA(bU5rCS-C(DA/P2(($r?=][h&RMBF/mD+Boe9LlBY#GO_<U:_`$F1!HnPt_+H(M(HeW`Uh#eW,okQeZHTb.gPL`d(2BBp_]#Xq&Q`#gbR/qOiH`ap@dEVE'-uRdh-L]gp?4EdWFJp-6FZHBu(jZoDDVc=J"-:q8pQ4:UR)cR3D?#g";W&:3#,#%4B#_B81)RtB\@qbm$6R_-B"B/99?aj[JcZ?uq0+G,BHm'&B2j[3575A;iL\i)]].<EX24lmVD+/X313bE:BWNK0,!dXFZLEHjHG^.;iVG0k?]kA[&GtM2`>W?ZmW!I;FpR&WZj\_M.+VZI@"Q;:cH.:!$G4^KdG,^7%F]rqO]1ZB2LE`h[15(s=H(O#h>'Z@q@g'mu5nJJi$*Mf=Y3!L-f7?*(-JkM\Ig&CplnqR14_=ElM#cYe=\1'^^$>#Of7p6]QmdbHLTC<;O]93:0hLiHcH?%0bH0aX4GA@D*hCS1-Ut.ReWq&aAsg1#',&X:0YKdOL@l^G;S^'udg`eK1V4EL%cOQ5oA;CqaH'=b/(;@-pQh^I4\bJR%OLg,`QMhMGBm.O,\.^E2(!#5kabG^ih0,3oZE6qV7Y!qXQ/"sQ#Ze>Ji.,\U?eX)2Z1//&gg^j(3'>U@=!S(%I6@m7+_d%4:9sV]"\Iaj\`VMJ`jZZb.%MX\\gFjWf!WFKZ?$%7d7*;ClO\dd*-,CfB&ujkZ2=k',mf4VJu1+^CgUtMp'oC1!,/IHDCCtl9c+N3CYZ_JqI$mT4Mfs>"Zf8pS`*#SOt*Mgo-1-g6sqTrJ@mQHKRQE.Z-9TbW7B";h.=)dVkAg3I-L&1RC+SH@n56FQneVpJN)b+NbWaH'HNAVYEg`b+n/?W["K*Arn]An!#'ZPnb1_3\J\+L"`E_RUSeidsoUj!Y]k/VjHL`<Zco9Jj?=0>\iHk\u]E!W>gE3irqW0au=TfITn'.W84e?)s$5aS'$[A'&b_U9/LCeKC%r`dVJFJV*5#JP_cUgO0YZF5^>IA:A3n@4Mj%XV28_g\E:lW\6tQ!QT@bCdsW6YB4mB6bhqU[&-Pi3r0>=\GKkC)4pZCu8'R:V0(h:X>Am/+-;S",*n!t<NV%53I`"9*>q4hP2f/IbH+7-2O[j,3H2cPRN9WbA7/.$RcaD3NjpEKh-mh@o8j9ILlWHg.?fse&ghBGp*V[X=%ENOc=+!6`<iO_%aCAcTFjLQ`OeaqYhs_TlJd<;=);$0-o^/5bgZuWrbqO((T;I_\=aF^^[>459D:W^/*(eSbM3VT\Wh.gnY;TmVhV\/@"@3S%5nF/b&>`.$pKS@76'MmN*XRE@Ul[\O"@3.oP#HrT#Uq$["@3S%5nF/b&-S\XJn9NV#Uq$["@3Ss80/(h+G'[:.7"Mu'Ttt<+:'DANs%sU1/,MI@AZ8EHS"ROS6*$F2fl7+IrsA3f9ab"WL8\T[C#N3p`ch[G2;0<r'9(+F#Z'4g7h?uBD5Mr]r8`/Aoh7>#YVNV9tN<pag%Ppb>[NT><'r44K1[/>""fb$A,c*EN[]a:/7co=4%6[4Q^%,^_X4eLW[oLkK:A#R^kIZ_=TuKB<lkm@S_8Kf/FLb0:\_nO+92QZK\V;h!;+*5B2-Mmd"A-.EX[;SAJP>U)`/t.ae36(bZA:KJG9fGi88#-'+d,kpA$CMFhm7i3'.b%Kg&I7.d@`o&t,&RHUWEUn5;91!0c;@[>K$B%^5Clh6bg)oB9<U([$rnsq9c\a/Un>dB&\at4m"6pR\;&J:S(*3F$j<dAY`T+I<gm\87'l^[r[Ulol]&5S5T%(_V08^:T/TgD?cC>m=:N<f%qWQ]]VLmjQR@[!_T?I-$gEE0pCr&hV[odj'tg"i%R3[pDeW94oCf\0FHLUrMrl&r=RLi\\'Z'&@Ifd]Oia+eQ:H8.NE>P4e2(R!g[Hu13Qbu)pn:s'Y$O$l73h@:SWf;#Hf)hKK!cW_r:Z!ZTaP_QX^eA]qidR>?[//AcXnO4LeZP6i)Rq:'?KdWl*-*6r?_7?/"99VeiFBpVF<j&e#3)e['To';cQl[3`^$H`l"g8YRT;^Ql>VTfPbmO$Wr2,&+P]5WF7$!,TZ\-7s*i028_)6GVPjkfbk]4N$,1XA(SQ/J#MhcPCQrKtNl#'Vp6QTO$31J<Ul-;VKCP"$O\]a$m2`]'(SVsElm!OMRLmZ3/HXmo@@mdc8=EmbT'^1h2o3UGn&8fb)R28"1GpM0"VAb&c?.`Tk9b?D`g@%t-S%7<lT;=I<Ym6eSr'G4u<??(gg/OIVUd#6\!mXe'Q*SpU68sYi-r`Q-_d-`p^pMn6ie"j%f6N5DBQ.bnpF;)D<_tk_N9!iYTj=c<2f\"<aWhrk%U+N4r?07Xk'>0pfOHJdP1`^4B.3:[I?[5;Rk)dIr%&]?Dq$_WMWa!*pBVqb9!h2CC08/>O#Md?m8-Y+?1P9DLmnVCE(>aKEifVA4S![7@Nk#q[)U@rgXeG<A-b\j=<?!>58im6e#eUq(qX[">p1;^gE)VY.r_;oS7,rtQ;B'5Me7=\/r%<:k-q4I4nj]qS080Q:g4hIoMP9K4M,^+W%CttbG4jBBf&j(4-qq:p+DDXS&YS=Z[@/g\MgMp4887:>aroH`\H&gb?nR7TKKN$%<jC[nq4TI=r7S+o%[1bF8;#Oa(6NWqEW@p*a,r>!SFFKWRZ'4bnO^AU]'VL&^XO@O7ngXe/X<-RZB.%7tIs@-m#=AIUo3liuZ1oiArE)0,SU\%HnJ*Z3eVti=DCIGg]m!-Uhn&GGC2E0pG2U0D-1V.*//l[VA"[JN`90`1Y2HloPdibu^%LUMNI6*sTWdSlg,$J^'2aj^&O9CI!?7:&CWFa-StK+7'o!],!f%i12W$&&IA<ESlBZcc.1ESXAZ_0Q2:P)rI%\9&rjAm>2fWH_^HGi^diiMJ(s[EQR:h\7*2iH1\&)Cc&bFYWFp$g%W\KroRD82'^[Tp7:tQ#0A)ec7!2[.M=Zo,`b>r7dX4=,BJ+!VnP$=+:-t=_I-%a%E9UuK$[1niG;4]?K\hLB%\A#%18C-JfpkN4;*+;);X[#rN+qNXe<<:AS`FY15sqRFTY?3k(2sDK&Aq8HILoX4R-M^07@u=c>.nPGmkOQa."-"j\[reGj.TdkRSr"!CQF&dpr%7oVN:i8ZiZB&_=HkLN?^[IbJ"K5!rc3.Hfo4>FNHKSj<6fA<#C7";q\XG]S6^)ksF9KDVDSp[I_\;:14<m_R7>Z]r'u^Mn0'7/*2cfDVOPcfF/Y_+q!07[lX2aUUM;*p8RtEf]tW;iRaurcksC*j_M\H-A7af,R]nfXk?V_u]e)8^,Zj5a"(:B%llZ7;+?hk0?PNEsm\V(XH;n<eR@Ec0K=j@>,*P0/GCY/!%]b"G6+R\NE>`/6+f38GTVh/s#i>""UlGh::Pd4BAai4?mOg8g9Tlh5'&ii#h27jW^krK3Vn8FXo?W+6J5#V=jt92IEu?Vf?g&O/\CL-g4]p':0EFh?'j\)c=RP73!MjLQ]etT6@(YpVG.R_-h/=#]'2&(9r\:(A;6,?Ajn?(N9'T]_'7Ai4>)K^BB/X&%OgnRA0Mg,c]U/1og^bqKBh$iU\uH/9g<Y4S%aUpm9Cn+hHT8'd(\X>("b:aXlNp<H@>\lg&TMF(t@H,Q%12;4CCXe6X7MO-*Jth?$Oc>[Ka;"d!An?4E6/Wa_j^+?ngH]7m8NC?B$XbcRQSID)<3Wd>d4D120n*9op6lpkVjKN_UQ_f59NH0Yn]#O@gb8NSeeq(I:Fo^Ta?#X`lZHSq6@"?#`uRr_8.\OKr!cebG/C!l#b)9JWl9=jHU3Nne&/EQa#ieQ1/+Wg&S-rOeVjcR</\A5)qdrTglobP&,&STc4;\Qdd;Z02M/Q;>\r?8gde1YTPeudB^\WT^mVEN;=#ks*Od0\))5KsF"Gc^bX:p7"-/2+a@P"3Ab]M7/EA_LAe@XlAbaALY3i-X4R;$*j^)FU@5!p7s@/%?WuUb>^F'6V8`Vh+55:G<J34jip[ke(J&H1Vd[ccE]M;[i>S)c$Ma:-\/l-b\*Oo+\hOTjO2AAE:L9<YMa+_TOT`D&W?Wo_=oI\DapujO&53*=mEPrCktB.Ld$W@pQs:UDt"+et17(j&A@-dKBO2;%7I&,@/YID'nSZ((N!^9Y;]eQ[[@XTB[YmJo#<`O!9IHR=aenXuur6K;%@,MXouuQf'7X:qmMcDB)7sO8]C9Y%L=^O#57kht!]VWB?;=Uo(uYJuA6,#`XVB:'l>*(Yk6!!QZJr=$+>0YG\r%VXet;+8L4,>Iq[In'P>O*Yd`,mWDZY^Othb61T9L;aPaD-M7#:CPK<o1&!rJ2QKo)e@@C?%J"68TB&jkE`gS?8BjO"K:gRj?366Zcac,"Y.V;-)YKSuiBRt8dBj2YHKFbdWjD9-Y)an[cQs]^m@'/\JJ!Q:8h?%_:Xfgq2kif$oV.5^,#/.+>on.[OR(Z).L7+YqBV-il$q4gdk,H@2`TG=K-661EN5[oBQ*Gi^O:K]nR0G5GnJJU4g&+<I9&g15]Zf[r?W#.J!=1ZMj6TCl]U;XT<7pnE+bJs<**O?K^agmrj=oSk92MPLs!*2F8IAH>]k<RWkK!,1b"&#O7&^,)N"/7O2W.BXgJh$#=T]YMpU6@c0n/pQ#QJo_nqC_$-Z@B&B%:t.ZYq:QYpt;*XUh<KEmbH/'/FC,``(Jdil0<;BJ:\+ZUj)EXqOIVs,"L%*9_[&-P91"@3S%6"lp!R32c%$HZcp=g`!Ep[6iZJ,Ji9;lB'9Z")q?RCF(/q9C.pKnY4nc^t*ms8Fs'o]VJd:PQKY"E?4q3q@Olo]\/EcC@+Krka?s(GB*J!aO.Sqmge2p@$n2S"$J9/#Ao3^j!CtM1^LRTf?3=@E4BKX&lKrR$a84Sj%#F1u+!fVbSDO:I"f"m+ASp?@-PQd%O92^BtGCh'<7m8ml\nUIUB:4aYn!2X%sCfs;JI>e#1Wno);AG+$M$V+[Ks_hJW4qsM'XFQfsQ'-pn]",EeMUkkFXoQK9qUHYN:*J`qgPo<B`k(O9`1^Ls#ZY%ImF6>=UJ,oakD<K05a&BjaCt,C\M\[m$QV3O3AlgDK4$aEa#tuE?XROS(%mBj[_\F\&r9$<Eq1oO5s7Wq:h/^[j2hO5q>e0Ej='fUhUre]A6^B9+_X)SoS1nA<]mB?&((85/6'Qd!PK+%0!4OH$PCj)NB$#!O*.7Y!JHMWPEsVc1-J$h_(2?e^UVoWUi\0.&K*Mon^OA>T:S'ZdVn[ZWG+O0;[V\a.2Q]lRMG^q4U-iqX$%`EpI`^XFn`-f%'WUZiCFX/tlIDs3D'3`f"(Ci5XXQfIm59HDgSgd;J,]88Hg[:cIJUp@(V(Q(,YgQW09<$GFQjEcl)Iaa?BZO=&<UqhD1]8`.%RLYJ%\A7&KR)Z[JQP_HX%`"qbeit_VMhJj%Mt%(pR`"*c>WI@qK=":S45MhQ0kdC=T>Pk:`,60(8>A_Sh9ET6]ReM"4>I"^M)3>YLlN:^6$dCY,_i=0Gr:B$G'.H@'CA.fQST[n^jS]/3"<Y]fD;BdQ<;9.T%(%E1[(Db<XE+92,V2Jq.n-78;P%i[D8Vn[KH@X^ck7uhE<Y[RM,p%;=JQHKR,h3:7s8DJHSN]_cfcs8rKh5snjG4"!L$LYFaNWB4dm.Y&J^4#liLj"#;-L(7RkS%au?46EbYu.3Ap[6#B>-6@/^A*;XJ[XKCA7T4Y)[U]Tg4][#4*M`)DOd)ZR&@=jTt[!o-7X[QeUgK6MA<U<h&;UF8X)^HPLJD'i*H8T;HR$LDI:)'ourg[)`MY^o[-1Dq;rWE!rY#mH/j)!(8p'@-T9]P=t"/0j;)+2N=*Z#cC[?$dn`3IX5W9iUR*T=\oQm>r'jrGF6CjIr:A6[H$PM#W2QZ"A&fWSI$cjenfgc96ZM"snr,oFodomfW)4cjf97VD">#U&77DI^NuU/hhKfr>CL1D*9=)</C7d=s;R9u[+sS=&NukuFaca0D3*][@a[o&qONf/FHudGu0aO))$C-nb6?1nr&oJQp('!b&rP,RA:SKsL&p_^HcJGj<$YphW91rJ66Y\PP]RKg*,J3(Lr4?k&3bcl/RJ9bqUVoWU1:u@[T.j\?FEI/en%NSB=<;tin_7rnmF>9FX]M]4bEa^b%j!iOhRqsnQa9%QMUq,$qG$\f]rEVg\.F[?:AJ>U^4#D'[jQGH8t#>DF9pq%n`0N>ldr[gk7/LnLkD,mp[:=di^<p=dQu0+gpQ"Q@`8ZrmF[.jR^8,^3\9&n]<m<%TaMVeYh<i`3d#2cUrduP]iV+,SW>u2#hN_1O<LrCcX+2).6F?l%h%!fb0#u"_buI,K(lcE+\<`3:t)10%n)=/]^S8,MA>Tps8G+K]Mj3V?[Cr_#Qhqcd@s''C@i^#a%cDAMNN=@JmM#r<#DCK7\Au@oa-[NTdH$R?h0SN='esPRPSRdaWnV-bJ9]RDRi2`S9sqop##fK2_m-D-73?pil+e-+FGQdG>jAg*e4%NVm'-qjNO/VQfO9:KM*B4SiqEq`Skc0Rl7B;M\_R.=&)C]bKeCFp9P)Pg_L:g]'WSYdbOQXPW>GORo2R#O$EX=,M_>3fN<eDN>jgb>-5Jbp\s<EDt`SQpZo#t#-/FJaWhBOJ]VUnKkASuIIbK-(5i@e=B&8lRgQS7*]uDse>V,>]+#p,<`U!Fo46;:+r0]d+*/)/)f>J>8]eI3i*X*>D97qe\2)\p:G5``K]9^m,o#qFb:gW_Cpo*?H76X\W`?+&?+W#)VbHYP"AE4oGjO(fj2[2s'GM5s(=&F1;_O25Y$A6dmDuh=X]d/&.D@2Fdh&_;r$ZG>g@e^K0DbC3Vj;W\e7]fDE:Mr,.TNK6+"gp7Ca=kcm82S^YP_*<=Rq9s=g;E>e;n8;`"PqRCY*I^^k&,-rqY;e^F^p;hnFLl>dt?H'-VWH!i@6\_V$.rCXt&XUIMsmS2^Pa&NTm]O+0hs9GGtA]d(37Bm/`>)W_NF]<lmuB@<G="$HJII3D<</Kto'h((e`*cY'`V-,ts.omWGB$:cMr#hRI[dgA'\o_Z8VG14!2r8c]n)%NC#K\2fg@0k9J!iEVcSaLRM%_8fW)3ZfGh65F9pmb*Y9X-eCQ)/Z1.n4segQ]g'OM3dhbK_'mF\\]4FLI>>d%JI`f;(?5;d/cN3M*s@*'YY5Bu[*Q:[,Y4`YR`bgU3:B"n36b=MQjM_FMQ[kFsP77\JV;C53$e>ZC,`f5U5*^+i!iGe/?]mJeZNDl`MX]r:&huE\"aQ)*#h[N:>W;r:UU^RpKdB4#m5RmP/,EFrBIJS'Wr238Yetu02[Vadq<NE@ZiaBkQILdubdA'5/GfZ!l7k.N=`2)bdfs?6pb9;-V32P)F]gX(h,@fiXQ/0&rLHOQdLhI]hA"uMQrpY\-gi:@TX<rGne">PSI&hm\Y:bZ;RaT8pPaIHop<0VbC>#n(3*CK\k2f@,2!Nh?hlU(iW_m>0HHk;Chb>OcOiP>U6Ir<lW`:Ra4s"(CFtG5RJ,fKKPUf)k88u`*KP!rI1r2uDW7=Z#kFrJX:$b%jj01/rP2#XQ0N(qJekIj%biR$7&VF:=QJ^3@QhEISY"Ye_VNdap@rcTFNd^cgVZRd-1i1eu<]$P6!/fp#4;%Z.R%4!sN47VdgHG;d1OoE%A&jVo<Q1oQc'Pk/WU^l`/P7lPk]VqJ)HH.heZ56&GHP8cHBA]^AJ't1`I7JQalO,djGc+T^p,\.c4$?I..N-AT"s<;"q:ptE"9u7&MPAka4kOIr@`Zrb=aM%KGZg548Y8&S=CS40`ZRB#tdp"`*"=.2D=C3JHH06iB@$;_bf-4YEW95^\dH2#c4SjXn3V6GhjKtb*=KDA@OV@,7uUQP/mIg^E;1Nk4R^Ua8,C.ZB8F]d`CiXianu/E?!S6<_Jc3Xe<$aRcj_4QXA=I?iR7;hNI:a+r'e-.j^P&JHH/:^da;%"^D;r.P&1X.nYmc&uEh7c'pY.f^R!1T0NK#Ie_lKn%BO2oE,Ud:oR>=`)C0dNnq6ekKcBmbWcWs^iKDMFa[rF>2ak6qjrt%idtVu0,I,E*q:Ko--"Jc(]DW@mm&]fD;(f3KIpN'cbCl%_no&!O#:\%^k'CY%kgL3U8"BD$"B!HF("R[8%FgG&tpX*0CS8\ZhVqN>e/:#\'LX/HcD!^p`1tjZtT-teTf]<5CX^b]<p+kaT(tRP-d@fKr2O<4[$J_[r+p/2#15Wo(_LNY;T6cQ6l[*IemcN5(1G1)n0hI`cL=gktb%72c%;2Mb>[`&0`)RET4p"<24U%f#VChg9gtE5i*a%#qT3P(U**,:[.cF^]3iE+#T\c"X](WaeM=?I*kaS[f0A/Q%S)H;Q3g*-8,1:cTP@QJ;+LP`l,g^fs:o:%T*k8j_>Jbe9=h`alTdJjiTQ%d\KG\W<SR,'e<>GjQ*PeGi=GTPlo,Q_'pCMe3Cp@#<XUkY![sShgP7T0>IGEMj0X.QGtQ-^qf<Nl_2qS28Q[RQ-l8X-)M"Ah3:fXH$n_==)]:2#plRjLECs^Tqc>NVJFbanZfi`jH8Bq/!#8'l#/>qa*daUl1O>lqnjNTY^,hP(/%9Kh^%5'9ht]m*r!aQl0dEAHV(6RL'C5K?+]h.q=D9\P9c2W^]Z3LG_Akb5+Rt([9EmQl8`qJ+=t+k[bL;15W"j*T9@k>EpE%=p[4=#ocP+b9C:.oV=m%Z7eqB_FP![$%m9?sQn`)E.V!KgdaGm3$,q>e8mq47jiWk\o^mtR-Oq%OW'Q%?3:P<c+"`>df<8OG-73?IPURP0CtQ+/'B5/-ZY+LMgmQKG<kWg%>Uu!X803V<.>^/.4Eti4g9pd..,TLND,O80VbWeEo4*hEeurGqAa0=Ld_o&\b*=K:L<&M!5[rt1hZrG&T*P4+(DjJ^\od3&YJ38IoOt#B0Y>)pP01s<L%mfIgU=5.n(t.Z;*u`G4teSXb:gW3=Ks(@J)l_^eurG!P`k*i-tSc.3ZO0&ldk<mlc"buNuBk_c9hbH8r>6,\o:NX;9(hcYZu7dEf5@4a,:`e7Rou?Pg;Me*;mLlP:'.-Qn`*jdA'3!<66q/cEqHCQ7:n?SNEZ^803Uck0FAF5566Eb55cJmWZFXl`RkPk;.'%"4.1&':)khUHJPHb:ehn2.C8L<N:_N!LD08kLHV7hgG#iP[:+S%;?MPnjm^lVrue"=#6@rr8SkdL($ZJ,U4NY>mH;od%n;Gp'_,"9Vci[HBV$SAX?GP+6$dJTt[!oI$$q?;87SY=Fq,07YGQfY5S7l_g=clQ7cIChb3N2E6=V3^A[c[ZY%HCIf)00It;V!`!O.0[3&>/VY<6YO*21HaYPl\MnAWCnj>[@n"pe+j:T*MgUhk/o$X_8aJ;Ck:^r?%ErGiWbq>/LJlC7]ESe?RCrRO2#3#?KfOWWn?_`I:dKcgL'>)BMVQr>PES%@!XS[8)baH5"C%Mub5<o2*s8Fr,1M=uQbq>/L,%(J9;fbOCj,Q5#oVXo:pY9g13cnK2BMhAob3Bq:eC;ta??i/ajiWWJqIjDM,WfSUH;g\7H2[EfT7$3$4I*+_o#dn.UZTmpmr.?^\F3`YQcDac/j8gM1U&fVhE5$EY2Suu5=^-.IedR"E,h%2,%(J9a1/XhOX!@+*&oW!-72oiB@!0s.PP>`Qn`(d/6K-%oB*.^l07G:Ab^&-V@6)Zr[&EJ>IJ?^h7>J8c"be/iUh-@.p&mD0O]R`C@0ZYA%-@3\p*W"^4#kh55=&o0>@5TgM_KnU278$icW'')`MXC9D.p.>II4/<K]kHP[U9Cq=EcjEcM^Q+&t>`M:=.PWOMK=2kqAbM>aH/mksX3L.@7DJJ`Rugj-u&+V'80`[+9D?lOCt1#0<\kP*k`&&H3!G^U\71s'*3H<>'i\NKTSh]Kk9SpIE$ql*<BZtU2SlMgbZ76AU9;9J[dRcjQ,K4/Tm$VI+c=gM_HB$EAYkRb)<H1'(T#DA5a>f;/MNYjJPG,'G\="Go3fL-cX-+91KhnFNV;E$'%p?c?iL#Xc=8KJ15l#b1Sa8,5`_tY[X.BM'.A7rM@OZ6J:!"*#<B$DQ]4>Lm6^u`b+1OGldNS\sD*Oq-h;6*a"C>QW!l`\'@P`N2-:u=tr-M#5jWJ-*IQF]Z0bfjV*_M2_OGpGAG.?@V7=_lQK$54$bqXj%$Z=Q\M!Yh;?c^s[snI$-co]nk2^V9(+pFF2_C>uiGgjAM']mKKcZ_K0[]GTAtlDq+'dO\\8'_1kfcTc?2O+(0/n"pd4H-FOXA]>/u2M@oE;V%sSa(gm1SLrPe*XPU+a<R0(J]ZrH7>p<QS(FW<-Nm\(q9*,_^%Kq]*dHVrB:j%r\FJ4VA&ZD$6j8[$NlTa*okHG._8s@7i57gGhFIIPl7/i\49")cqsBJ8Ak>`mId=,F??tWI9kA9$lIW6>giLdZ<H8u!A"^&[Bn0f0)j3]8?ihD%F8+L7ZRI?#9q)>iJ1BDrb:V`CSpTn9k?n8c=&Mp/oM_al2\L';s8(?^IfB0+m,)`qq5.cKRScpZRUcdA/83V9RGMgV..4]K9]YaAq=Dh?C=T>ge4iQucCIh/"q;Ja>&-\NM1>n+*[a[N1hFfDa<RG#DV_leo[#u%d>nj_47BfqJbHTnj+=$lAJiKumFnu<KZ;'Q6Nc)PD\)"Ks([_5SaOju6^ouNr5q,9pY@>Ho(_OS^ToTH,=[UtBcX?]\UpHA0:h-i/mWeqd7:%XTd5[e^]Z!FLD8%)4#_WdGdp>$.n*lomBtP0rUeRiX]nl1?G0OMC'b1Q=Z8AH%NLirF(X=DI<"7@RPaj(UQ7m()RXVI8tKGjrr"p%ltFqLeURZ&nA+mcGpr*m=%qZeZtn8'`]A8-KW&B$fl#TTnYMRY6HJLdHG#D;+/Gfq$Al")\n3R$]Em,oEokGK(nm/fh07b0#o!%"gZNN8^A@+Fr#04mR\^l=UYd[Z=R!V3>FLE*/fg6f?A)0mc-n@JVbs3Y:HnS"]Z2U.[d]OeOWZkQJ,As,0>-ek^juT3n)!H`'aVu72ODH%1M/=f:/4P48nWbnld`&6QTI@?<jc\m6Mf*)8*fo44;+/^lab%(2DHrVfk6olrPj^0.lM7uPcZTk":08oI.4toP:,\:pdn!Sl%f34PrMn>:_X7D#g_Y8\)*"o#G,M%o]9Q;,KS0UB(g6)`Wa'>FmIU%;L\K,ViMoamS!ELldqmY%mBQHFCIh)7tOZ#nqaOHjN3Vcq9OQY^]/bf0*Ztc6:eOQbLNXpF)uF&orij277@C<Y)u0kI'd\e/u]iT*A`[W"f3PPm:'YrVV&:lf=#PNE.-YGCD%KG;eG.]2eCckKJF)*_1MuF<@G/,?clulQp6)708JWMjhW<7qN3!m8e[:K&tIC4a%;IAIJrijd)4UU]8b"o@uid-TQ8AM4[1>[#OooarqY`tNut!r_!Gn7YX5dUM4O%nG+MTae1R&#A3Y+q85SYZ.q;mWUI2=M8+Di_k42WU86O-%/[=Wl='rpncmYN^Ua-5:0AS.g^J1.R@E$d"?/(^"#g]#$oA4i_74<69)Qh+MnjimW?uh/!20;VM92FBTF^nok=_I&`,tfR[SCk&S_`Dr*i3f`VNEs)8V0'MHOaVq8`ou"m#=d_mV+\Uk/.H*"pM3?VE]riQF6_7(2@o1:n%8bs=IN#o@A1YLq=)949pSb/d]QlfQ7X)o?ldVVShj[m:HnS"95h2#68?S,;$$e?pSd'(B:g2.HoQVM&L)Abg@a<Lmi=H2.(5s55kmkum^lPJO[lX%okKd8.Oke[;D3%I^3rd>nH@:IDVb/YDnao=I6/Y4U7rh[.X!CGYb5^ZVIE]TajehiWDf])(bhUi^OCV-o[/%U%9BT7KblR=5C<*?P7o*b,Qak(nq[hr^Uc:<f&1EEUB:@o<ioOKf"Uh.>A)6O\TdN!*sn49^A=jVp[3JN&rQSS'd)NLUo1+TpY9g@=nV(1B?cmAO0ou<a%J)!']CD]IItq"H1NXn\A0jc\.'6rd@s)&ldobUTXlR$.HXAPaWj[*gnF<._[jNUg1ritoXK/9,/PbZQ-cL/Ve;TH#-K2h'0>sFGMi5Hm@s&C0en"1p8dZ%CNkV\H=+,Xp[;IuDI'#b1fpQuG0O]NL;VL#CJTRd[;,C%gNW#:Yu@MnR5f1qChtZS1`r]%\MCh?cCI%Hp=X*R75\c*J@V>38sLkLgOb"YY9u[-8<blj./`C<s2&]'r:oepc^kjnkC<Ei++G&64kCSUOD]uo>)]oc;;>ilmBob8*A]b'][1^,\.iT$S2&]7fs9__0>B''@\`=pgg\%ZOb#@2aiXP)TH<euNY1`mo+$4H#g[o]&X#Y9;ek>6V+Tj->pDO2FUB[>Yj;B)MDNel`u7gO8emP;oXdG<2l-X"NuWi$2Ob.:=g;GTLD1;J%iR819!s!<C';VjfhbJ"%NTN24*U*\=Ik\@1jo)fR$\`g7EiJnq/W5?+;79e#u7JAA!-?49Q"`#>BfPsace)70s[8ocH42U-cRdkq&sPh5Q%QRbZ=d$Z>0g/b6:LR@V"*BOJg-1DqD/J2[\"JYVCS&FCmh+ftMl]KUd;>(G8s;;Se]GJl(?!.4(*HNqf=\mCRQ/16T[HM\ZK\$s`:iHq5:bIgJeDg!:]Mnt&!kfP8^d[r:.NOIi&8QBjFMk01r2-a-XWK%ns&cMI1W^0S_!cBj=;jBuLW09L,HQ!RBP0q\@2]5QcOO[bbCWJs+;jHD<.`k[4ijs)GoK]9^m,q/=t_LMXhV",Apl$pg%,Q];HGsmUTT:`l.`t$$LaU/Ck/4^PD1M>"3;5<F-Xo#m5rGTc=+Y.\#,$(gLV73A"VYY1+8P-a*aKI7?DUd<9'7FlEc49B`Np@5o)&XA4CL3Fkc'rqAdUi(7d4#FNqX@d\:u$8uKN]E/5"juLk8rE1803V<$.cUV,GLp,nG#X\o8HlKr(7qoHXdoE\OLC!@`4)*?+Z!fEk9P=#q7DVPffbMU$<7Wnjo!#^<:#oC=SK1P#tZA8Jt"k;l<CTGHn#*I1Ag7=6<D-!&aE#St2G.X]r7qFm<oj4/3c!ICY<@gu;/R,A>`6TjAe:ZgO%\P"272nQd2CHKh92A&kl%[EQk=m/jrb02k/H8)u;1963@-URZb>ZOO\9XG4Gj#550'[l/*W'\C:eN260Ogu;4na1/W=]f``Ah`eQHO?=/G^k1[`9(@UJT7(n0TL%p+i`3$[+jg3h#A\)Gd>f4!#KpH@pfCXhM&eJ'B5V8[f(b2_.Z$['G4"!Z5Q.t'#\eTSW:-UJ;NSqU'.<),n[[hSq^naVR7JA*:0EcNhY*m^:CF\scTHtZgSNHl-'M\bq#q,SVb`pcX]c/T4P2'q["qQ99dun]O-:nbd`Wm)ELKB>+aG=7-87GS:/7BFIm0UhJHH/N<ks>0',/9l5PjT=b*=JI-m(Fea2c*ta])]r+qL2449"[%[7bECgs4qSj<,f3G't^mXsnJ))UqDq,.21n(";X,\at5J)Dl-S\8c"Hf)>I<Rm)83^,"]IBo328IJ6@D]LT2TrV@Y&6LmYM9ORF98qF*DaC^\LBBU6mDI!/:oj;t&"it1O;UWF9$T1l0Hn/E=<K'L,l1K4c=J+$[/mX"X?TY<F2"M'sN0ga3W*6SYr`6(#X[\9g?+Y9N0O_h],tgoY1t1n#`I7JQ.EE`?SPjb2lDq+?=:3.p&MSdX,L_;sAY!W$6To26W"2)ei7;+N24Dm.V=AqoqKX*@m(Q9#.$Zl+:J"-?b,Nl#V"UWXQf9dolIF(Eb*^[`\gnKhh((dRa'X;k,qgo)4$+BfpP'+rE!Hu!I.PTAn/K.?o#iuKGXEsAGbL'61C!:[S'<j<p2!ubN>jhEfsBl*dA*Xp0/MpOO?=/Pbcee\>$+m?oRMQ_M\c!QgD>b;ieoH"*^&('faS&Enc/UWs$Ch)@Ca@kb9MHE(G8tF\T;CuC?iHWo3u3>4*BhAn:Ao+(3H4AT7$3$^OH+o&ea[YgqJ1u.UY(uPiRrTAU[QYg+ng]BHqnW`f1p)*Zo^l+m)]@,rW&%@q;>SU^j;0KsH54RaT9[.<N@U!D,jS7[5^-U_.1Ek8LfN%O'Uf]A5Yii4rBq>#hS%.7>rT(Jd6jAEV7/LCYJe5i]Y2"2%9bjH8Ab:<tefV'Sd#5S-,G&JGiLd75:pGsG*l^%^C_rVMMF'oSI31G^h`]8RC"Q+>`m5Rd`ubhC+[YVSVQ3-k(*rEc6Cb/cNnB?m#5F?F-WPgK5Z_<''7+!!LjFBVl%o]agn43?O-9N`=eF8P@6,6I`/7\&r;kF[6Qk*]l5X]ss]Ab\1=S#/oL)AOh6mjV0W'gcb0;;4DCalCX)^[`5/SGFk!O$EX=\8gO=#riV/Gp5*M-#p0UHK1S[HZ$Oieqk%fqNZ?4B$Hosrcu2J+/2!Bhn'O9_C]8kK&i'`SWM"S/[sL:24-FIl3;h.'K50*ERUdZdTq/\95KiLh@;G]go+"b<"kH6npaS:;_'8;gOA&kPq,prN/U/9HnRVspY@@YQEa7PnjrONd,bk&Gh[)Eh0o%RJ,7Wdn5C;iH8HS1+mjBu(tiREI926]DDJqGV8:$MRXmUXB$?XFO=13X]ah&IY[G;<GM[Vs?$G+Ss8@HIqqp?[5P<N)cZnKrJ,V6%QFh]22[gsm7&Vil`o$gqp](0S5Mpk[c.L\$V+[.IFWg&2*b/Yg3d'`;TgK(_D6K^)NugbrkBu'[h/<8Ihu<?=_[dtorqPN7-Vp<rJ,Xi!Q)R][%`r2t+aG>"c+.oYEcZ;q0YMf*MUhf<>[6'kC"!hN?7]*,ZG;h^@o.Zg0J^4`mgcI(Z=Jf;-?J=n5s@hEY?jB)&KZ;cZ"hgh[;+6,b*4>QW<?8&eRGfY<Rn>/ic*(CW$$AuR0bEHp6X[$3>T@*l7;)62_rh0de<+bHc2,cLCa9i*E%(KgpqC__QdUk%[Ab`e>W'+f,m,"ctdK<R[Z6SL<GpFO8s2:YD1W1>=1!32/@q`>b?t6N3'*3I`Ug)Wu!?kjB#>KI5e!U>K/u5alCW>WQF2nldodnQi[5K/I0('$00dng"BH0>X:,9#Q.8j&M*s!q_CE-4N_?mcEG"^$KYF&G4!MA1Eg4k-;BpgET2WX'.,3]Cpm'-2Shu!HM-QG"b*sn`0"^tG3mkM2/D43iusKP^%WQ^Z>\X7n1\i>oOhSrR--DZ:u=trH=;*ql)42Dl(Y5D.p!M<]FGrX4nVe7`f8r:9D;'E7e1d[;k!8*lCgZg+V\lKnX)Q1^]RCSY>V6a"X@S78K<9ZkF[7\ZY.V>\T=I+>T4QbCtlDc`/,0'q>#_uKfEF:%*^Rub5M53:Ra8EDV_n5hgYI`aclD^p%#'7`OA3_2l11eA]'63W01bKFe_Ec:qbB.<7+gUC/s'cIJ`_H]1.bu(G8s#mhZhEX.2A%qLo_lckM'*'Mj>j]O'3l>M#Q9#H@@'C=Od]-\oAsnFriQIerE;cboreWtfb=F68ENeO^egh[)tOR69K>d.iTjj2[4un%ti>s8D[JGr3r1F1Xn7p&B?GCG_$W@)7GjUa/(kE"jI&>SSV7YjJDgVm=9D=\?,r6#)2$4D`Y(plJ96nO.J@1u`;SVuNfLoFsW2gV'AE,IXHOrea1`%PU5if_flNYJ:(*)6o`oOC4<&c^m;=XPdsT(Sso^dpKe7[Di_F[^]B7PRA9[jBa?S,."arh4!De#`QR[&Zu`$K=&"mP`uk/O*^7,0fA\(mWZG+nu-bloV1;e>O#W8D/4/''?lguKBo41)u[03('Y0ad(Xr*pYUJ8J,fM07mu$L6+:[`Eq\j&o8;d<a0I%Q:`a4=0ZsWZIu)piDdT(k.k:uCGam@*bCq65ou(aWj2E2(?a4'/Q4gnm&jR(RmFl^Mg,3J9:J^.&EE1[Lq=2KIQRl9k.mIh#XAc#lZ'7=omUTL\=!"]TD;1B;OXNrn'-/l@%"<cSKWtkk.e%<QDW.10l-e\=47>S[$OV-IcC[>I[a-H,?l'KDDk$2ajl7(FNuf=F'#8Zq>hni-_ZpVhe>#NpVG3Poq<"/cFg*T<gpg(J2R-0lM`uO`nA0_^c[4](5Zhp/7NS$XDpI_@kKdcV2Wm(V1,/oM]^Z1^p?pa@PfF&JE-_B?LEF#<=-BcQg8e:.=C-=<V9>2Yj'RSZn]Wf8n<B#&^*jM]AXDJ?#T#[R28eY)Tn@fuMXNnJ:$d>R!i.Q"p=X(p$kK?c*S]VLh.j@KXBG.oVk1Kg^AID]<i]9'8WtL\L`fF&cl$MQa^dg9!V9a1`>\Q(Y6]%UG/ubO+FN+(iT;j>?Y>IKUKp33"I1H:\od17Z)YUGB?t23oPKc!CY*11i4b@:&lM?"CW8#QKKk<#ps1u.$4;aY^oP.6`V1?K*4J_73d%N]kk^1(gE?_r5Q167O$EWYs8B-0_hJ6u%fG=E0AoO@>=O9Z<#IgMYIsE55CNJFd+^p92l5^QCs%tk`C^f9`F=,imC-6(4aZlVA':/iO_44Ic1i)p0ft'3,QC%"X098.9-1onhgGb,OX!B+-==<(763lWace*1eRm,>,=\mGldr=9njkIWTKFFNOZ"-_cjm$hRe*BC;,a3rm4kj=7Qfpbr8Sn!n:s6dU&3/crY$"]"jqQb+XSP5Y=]l?rpL4J]^YL80,q;X8l%7mG>jB*I,GsM^m9+HZ"3?rfudHU(+jk&`>;ZmiQ.-+2=ei)ks,RRP/g_3B#/rT_?Fb^VM7Hn%S8N9,9qhPo#)2;i0q"31l\"NO#Jk+:`eS/jXXS8@,(IIo52nCFdlT_feuD%?YGB"CIcq8eIMT^B8;lNO#e=:#3d9Uk,0Y/'nlF$8s/C7C2.LgddEHmSW/X#kKcNH&ebq`SX5\P@)2n\>eb`Y[gME4Aqgd9.a?X7*a,3+%'bf=*o"1gdW(NW%j!9&<cC<AYJ:&t[.2(k':La'O+cs)-Du=7,B%o;H[DN$kA?7\Zo9aD[r.23X')d+Ib3#E99%)*hcrhK)A.l(mM2^WFme%q=E2Gb)Uo59\om>EJ!jU/AM/8_,CD_3E3\-j3-44UQE4B(G+'Cq2'A(+14T:NI1mpK,N1_8alD6kHb]U[HTW=4-VkdGGd(L;g9tkQXBDm`[;4ZKqsDh7RBSJkmbBfKA,>i^n6u1dl_iWO;Jss\9rh9pk#YPMESnH=UgrCV=F<6WR58KcEV/JB6'OmPBUF4`J-#H>\`]Po_]ob#CE1Et>IUo&L^Ql`,'bG]-STgVX^lZNY?A2D`f(e17ZA>M$%C*HqXe1uHh?lB10KU!h=m0>NAC%U^%@chil-iG(77.*WaD$JNK(oB1%2[(=@.#b]j`6?E"6"PkTlsY)0),CLJag9%D=l!oOR=@Z'n*!\3(s+B5-^UqiN*nQq)JpkY^1QPFS/e;W8_q`>;n>(A.%NS(Hrtl-h<"p`bm/CtTFn]4K0OW`?*_4;+L4[;4Bs?G3q"s*fV`:l3-/7/Tk=ZT8L62Ji0XiHO1-2^5OAJQ8aOV5C-LDi,pHUnsn*fl;g]`4o.2'HOEa_<Ukj1c^rT6u$@g)VLs@)P%J`?b_N\VQkp<()tBUTL"34!lVY)fWepVB&nLpA(n;(7eoFM2"G>0$'h'PrT^GeMCI/\?S>-dHhVE\\m-p:9UJ*982*Z6CF1P^lbJ&RRl>7TLlH98,T[^`$]&R2&e_&IgiLe)GbFQU+PB$]]\+;8LYg>-'[R\Vm*Zl4m+a#C@73i^G*<j8oY)#S;Aj(*fp/BHlFSLa804CJie\<r:?:KsLu0s4c@q(jTBt15T:!,SK*Ji*Vffcoe@,eE-^:*ibL>Cf+bP$c8pe,]T"o\`T4&q*_%hlhNu&JFV8Q"H<NTK70$,?S-lmU2jHEA'rUa$AeV=YW^7p-"4FYM4'p]+j+a<>-<DZM2`=k5'pj;i-jV$9q#<><cB6J!G7eVAuTZKTj^YU$s].(]i*m5K$:(9V^GV`8Zo%6:&FmIV`Z*CWIbsD]HB@!07.p(#f4kjST9iJ8F5XH&766Y;n5YJEeISeDGfri4"HFrfVIEk<*Bo-e.;#fq;\&0;BaKJm](;]S,eZ7A*Pgp-<p?b4>GU^js^IX!A)`DNb\ofMucmWu,b%T'kC(L!nPS,/t$TfVpK^T$jVrPdV)`r4Z[;+7kqqqFfp"!=f4*G.s2=/3q^(C)1b:aMB'3R[BP8t6;oQFh'9(,C_gqHsIBP3M=c'pY1lI;eC`f(cjA4W=VI<tVRftDb,DV_mH;<Y$11e<\Ggk[f7dEr4IEP<)6:0bAP.:*QV@t'mC?#6_:&4S)9]2uj$A"eM8OmnolH`e7DJ,fJC8X&GjXc"#$roE.^PMo7+H$e2t<<1%&-VoVX5&2LAOj6qdDrLc`M#&n`1T+$@cDJJo5E4'4[cZZ3+?b<cNLbPeZY7`1pkRJ(?1V6uFQ,'A?FhX$pY@@YQEa7PnjrON_"*9d)*oR=S:q=e_K?hP?pNJTD<o`QpYq)a[VF?-e>Q5ckK`0fSAB>9d(2XH!A+4fon;_dW^C^^U*<=RmH;ccA(kBKhd_d(=":QhiP3cfO+,3Gc";S1M'/@S(k@.'jnTs9(e>^):ilX6q7OAQ=gM]`C1b_LrVQ>E&,G[Ds8/t2mYZs^XBDlAbEaaWp?hbMf3aI%dBI4S[TKPYKc7_mk)#dnR\aGQ*^(u*i,\>F6"i>hC<^uK`7NGfB@>8XEKnB"0M.=l!j2hD;CkdGY*#9_[7YXsjVEVU`^0jN,8"\Ci0Mcc7h6Y'\5/_\T7-DNoFTaO^]P*$GP%2*DYa8"Ih0`C++N(PB2AJf84LC<Y:4,1T"RaHFf't\q=Ed1*''0>,^.b4\'LHu#FR,M^>(h6h?\qdq;=`n]X^XiO^5OK/@RUo1);?1*cGX_Vrnt,i3d@PioB&\FQi5jl`WPJi.EB6>^,J_a_8p&,J3E$29Xco:7O:PhXh%k&.7YZVWR9-VbWf";(T488dls"=+o4p0KHA)RSV`QlFSK6UFK!-2Z9G!o&cE[OusA9dZI$X75g[RMA7X.)fNLiG.fB^HgeY5.TNcXXba0?1sdo#eD#t'JFV^BPNGShE:B$RP0C=2[!S'.AskDcb06807E+kuNLIOlF$d3P9cR,Q(+`QQnjimQ?ul+d/$HV`o#nN!H7OS\]eKHYYCDOjN-srn[p$4V3I^o$H1U1o-',dp9iTWC4>'mKE9brP>hK[Ij1r'<f</%;GUo'"_SX04!_C'm)&L6QEUr24aS,K'lXHRMcCn<d..4]K80/']0R8led88"Jm^V;KHg[k>]m>_\4eNF^Jr/Kahra6Mq6I--82FfI.#Nsq)gXJXdNgGqBk_:l\[cPH=X:LriIX$*/q?'!KF8_qbL<@bDr/-0j%j]@e>2:-RbK^STt'Pt+aG>h@*'YQl_gA(\p<o0#mgoC_>(N1]m&Y7a66T6d4Ta+;C?>4XBF??"7+RB5BlN8%uN#H]Vp[Xft\Y'-:n0c:Hr^N[Z)YejMHI)+59^8a#u2']R9N1>MS2]R5:eo0a1\KQ`\8PmFjF`ni(,0>+?1#K?Ll>cQ9M2Vht&bb/C_J"FFQi.J*-$=9Yp[J,*Q08FLLWprh[>Pq.4UmU_fZ15?>[6A_W^11U^DauIB%<$$,J<d@&]KI,?<k4%tBFZhO`P&bZ@\4k"R\O;P<GO)]lDL:lh#QObkJ(Ll2^K%=8]mB@/NK*m7A^$Mr?\SQUCtU)jC`CNe@EKBnI*nifT3a!7L((mqj&O*Z*S\c$q"T*d-O?r@3!rgYAB8i-J,rl`DDa*'M"L=]]eM(I==TC$PM+aID;)@JVqnk&j-5dmj2[4iB[L;=W):&mqtBFCg9k_$Z3Cb"$?+.R.p'TJ1i(^GA[=-Y*q=m!`h5VMOPu-91H'.+fX,?kjL0R<ITD$9K*UEO2LP;hC"&qjAS!#+5r,6eB+AcHDQ?jB:/">LcI(%efWa%FRl5+ufWZM35ZIPo3&d-c12=d>qQkW^E94>IbALON>N0I:?k>``H0:`Z4ndOO0>Cbi:)sW#aH7\j'OU,">!['UU"sKnrLC6`Gn`LCr,Y!Ad^d1e6C0<1TTFQ0E51P!/BdWJEd;KW\i&n5PK+S!C1&"+>MHT'Vb`pKE8\P!gUFrhc9(OlE!n-rX9e8)ruqpEWa35[UIUB""U>eY((M?GFSG4Z0ekD-0n&cKBBRU5B=U<0Io1_Y?FXqT5%3j4[7?/mJ]-2ijcrp*1nk[T-*&EaJU"J2X&c@&<NB/(>2%2g1\%e^Nq\M]Ntj-4fc7^b\cb_K$Ze,D=X,CqYhI:"49cQPq[5O+5QCQ*O9.C=aiVZJN#+laWh<DnBmLO8qdMM,_8s>a2qK\;P+Fg`G#6Pd>ep($h7F1:2N4968S(TX">5<7\T2s`I1X:OH%`ZN_JQf7%2q&gR(R"RQ?i)aiS#V(,WtV8'.6SI`+oWm=R-"K$PJ?l!h+u5NZC26=gFiIn(rKip-ntB8u../pX)JQ_'*I^Lnil5+t2*PD&[lJ-_GeWLECutZ"(hM8X!7>R<%;c%mTu2iPL<7f<9t^6AM8e2hF/<#Z5#JAl>u^6J9c%k.'\lDS_K+Se&r<.?Hs0h1"kO6%hnZB7-*kN;0s?HgeXZF"miOCl%G0mQKQ$8"^[RWeU@f9(=4;L+:&9F#Y/LP5$=g/_@(,",1REZK7cILL,5aL$\/BW#!g/s8D[*PtAj_QfSaM'A4EdDu^Y%.e8)hrV)G;/Ho@["P3naqY0H>?P+Qg;l<B1EH1sRog@#D+K\Zp''&?ff+G3#81p,B*\:8)N[r!BDV_n[E:O8A1?0q.%SL&=JSKjSg>f8sDVn?+T]E^2nlUtckE=MsR'[k$LDD<V7Aq8BZu&rXDP8Bf2s"'cI4$^/c,duAmh!7X?+Y8k.NmTi<+4O+9^jS2h=#fJ@+-Mu!8G=^N5lLU(HfBui.9[V\i=]E.],MH.hqa6.oLY'Zc$>Us$D+Y.Icbm]Y(m-=0<ZbL-LO.#cQ_3nMI.>T?bR#iB9of@(e8HKgU*&]SdaKpm4d#H1Bl_[\=3dLCrO)&>&9CPKEZ7i-`D%$rJY*hf/-7oc=K^ll@9"k_ZO^A[iFP,EE"TD([CT[BZYQ/((BC.&)DI/&.J4d2u,S3gHJ7fk17.W^=djPa$:94ng)saU'Ie[=o1.1P&2O)R=Y@@MJt!L=63b3^#Vhkk,J*IJ8Ug*dNfc\YFPqUCk0+0g@6N64q,&e6ENBi%']U=I>9f';bU?Bsm>NH^NT\Zj]WLHAk8r%_GAkH!05n\Fu9)jH5Kl&]^`(gN\Q"Smk?49q!o\4L$k@`p:'^G`:%Yf0W>+GTBGD/tFb/MItdU!8AqO.?H=[/O!3/1[\,q/q`1*p[-]OQ>2X(ETP+X6lo?hc4fu=bO,"+mO1.@-7rU#nShWhBH5i6VN&P`q.VR@'L!V0QDYY)kM"Z=M,d@Ek**j$\BQtb2`2U;G5ScWZY\=#l-lP[p!m,2LCW_-]6C`%h)]cJgqa\p;5[0[+TBd9d=VW4MN<g2m>W9h@9@EP7NS[4CI(7;pVY,jRl>9J9,ue"o'"IBaRF""'NJ*[O)?dAK<@7O%?0DYP1>#u,9N(=;rSML22rJ0L2Dtk3AO>5gB^lmGOJk78em.m9MEZRKl%/Cgu]AZ[XCi^C""F&+X-1-L-N4ZaV&U@*;qe]Ob\+^>.&,4g9o#<,_,Elclf2uK]Nt>k^]nMpYL8cQQJ&J;3X_!oI<8s:6l5!f!o8fo#qc:ZlLk6H.363i]TIa\3.(g$$@[YG3mklF6CN#(JgYeI8]%BM%_7:Y^QHEEP/g?=l"5P?*UZ>-c:V7<mpB>?r@%(Y#+"M.?tV>nl"=irqY`pE]sB==*`jmEC?$CbGBCYIVM.i,HMPWCi,D(,$W]\W<+O9&D'5=kSnKG<ifD3hQhA$o&[cE&)VTgI:]kSdAR)mkWiJ^ot=gG]^;u56Faucp`q.3L#mXWLTg7sP;SQ,)&@,%HXYni$eVXU-F:[:C!k6WLYXq,O8d:3?ujEDfa]#``)i7eIK>F=pYL6MS+!Tj13W$:XoeRuoa<=CC"&r%ou-(kn\FYgmK<^EBoZ"Hgj0`0g9k_j>F<-5pCCWmOnYGHLhL4@NmT;sZ:@Ea0sRhCg1_ucaGa2"<>bYO2)E)fT93@=:/`;[3mH1c`:NNbS"9+D@.MCma0N"V&7Vt_p3!ULbs5fV\(cnj"L.9?@\^X'?i7=bCuSOH_hJWLVibkTfqt[F-RU9W51!p!>aqA)2?Wr.HY4BA7?R:`I+<Xh=5@.f<t2d5nGnQOLtAB,nHp\%GT\WQAebhU&EF0&0M"/)%"qiq#!tjO8/TX;,;97`E!1n_P)p(Y&4-X]+UepFR-"9@f1`$<O1CFA>gN-T5!:b\e^`-m2p]rY>p\ednATZ#)Dkc+HfUM#K7d=Vf@*P?q,*Pt<u2d$82n$\H5VUnNLh%13a`oi_r1&qF-38BH7Y4=Eo]cRS_@n<\?,-rj3B0V=Kt1tE-B6[)4pQ7YcnZ^F@o0J(e5&X54!a=S9tDI?^u>760#[#X`pp(A*ae;5cDt9.PA,?b4_loC(D%[(E7Z'3!P/hZ&Yg*2)i@(XGt?jOph.rnLC6JSL]'0$[43Rqt\t+eu`/q8KAHW&mQK0Ce'bUQ$g;9E==+neu5c8&d7/6m)PTfT:_^HY.C3hGH_g`S8WaUR5&gIcp7a3qXs_TTPr`%K+r_4q<)\1q.?[.XZCRfnF=O@.k;#F0L42!=L2V!7icYGI@kA.BHh\f/:.`Q@r?2PY$JZlosa27VaD.]ljOaeABp]*GRKYaVG3Q4OMYSPQ7Z7F,Uk/KEE^#,jQ'k&'VFtn\]k^ZAD9j/7mo`Rp5j1J\iooRUUT-0HgB7biCTC/^\dH2nF1D8V/@?.''3?35+;]&9^oA0f`KDY3B=d!oa20=Ib;q]YIt,VU"j06ARo<gNQ0ML="djj'Fmf19T4mfMiE^%i!@PPjN*J#_SRO@PhYtWhnFMc-2'lcgK@Z^H$O\p#A#J\S2bMqLOAU-#C#'RpDnJ5ES"K?^&Ilo0'c"r7HnnTHnA*R6<5Le9q!Z"q"ee>6o2ZOHA%2/>e"bHm+IpkGID57k4-J6s1=hpTHK&%a,V021YLt+ENG)`p?'Vh?!_lZXK4fNcXP<%fN2hGgN^nX2ESJC(_[Q-4t\ENB<CjN2%o2hg$.;&ZchO8B@!.Ye^LorJnP41Vc3;!LE96`5)mYQrV,2^<da8=`u]NeOTuqPi8p;4manZ"g9k]t/!eEm`@.$>O/c@s_+r1rb)gPA[L<m<e/'cE'I=tZJ,Xht2-@9/76SBXem#.,'anGXoL*C[AS8"HS@h::,`)<64$@1K+B2R[If5WgA(n>+#;IE3Cu)Z[gt9Aks,eNrcC?n9[:0S2R2a-4['VZ6_C>\M"U,'6[r,2_*/XU@UIY,P=L.-&H;k=fQ,+_qWRR[ok*-%2aiVZGnXTf?WWH.Z*]^qommPXBn^2)kmN!h.Apm4p]Cs:D#p6sSRb>,d)`7?`gM]H<%mU!]K+C.jhgP7TIJ;QU(+i.eP9cjW?G(NfX;l7BGO?GKolFl<Q!i@%%NWEh%0coQJMk<1FkF!2bF(/!<#^D)U*V-]SB*W+d>m_embPLa[.F.[YOf56od<J&`2:CX^3hrPVn.)UWUI/f1_+%P:C%%@Y:A\q+[,Z5=D5[2'uPe;Dr8;-^%^B1cTV$<*d?CZa6aKO&J77+0l#4:aN-n`3?3tJZ"(hs((js+/S0Y&=iK%GfQ#rkM2dH20nT@^f$Lm+p2t#dcgnKQ<7d$/hgG$Tm&cU]Ieh<>rq!8$hMQfTH0,uUI5\VRHR<b/o]c/"YfcP`AlK0(G;08qd35-La5O"`,"$#dl-V`)Artm;hnT3ekFY7&NGoJdkNr?.J,_Z*"_2Z@f^YYj*dYWIK+c8D<TQ5_kg7X>q[C2eb)mKIHr4Sd"H%N=?MleLe?`f6GMdfbp&Fj6Im3V^F3d&Ilp(L>&,6TfG\cs8dHK4En%9;R*8J#A?O/P>.S=g=^juS"e"RfM^]4;^:I"gAUQ7V0a<Tp<h0/5$s8GMF5lCQS^],=0L4*J`b14OCTE8@:*Zk=&-_GMGeEMZ'?9hSc?[S]+;*Y!J6hCp)Q7Q0*H6h:A7ZRT;K%gGg/D%l(W?=A#?B7q3XBDmfKYYAg,h/r"[Gml)f-?6-N&r.)i-%V`&JjWQ(c5n;j8^4VlcA+I5E6RY(1/4KKHUqfU+$AM?b_&.^A0*$e##hY#T4ZkZibkDn\c)cX0VpCo[mZ7^%')]#mgnO-;5!D(`!mAQ9Y60,?PFGK]BYq'2TdAJ+C]/d5VYDQ-h5n4EKXY*,N*%h)]ZA!%Yq(p`TG\nOE^8+_O=eQH#Pa_1N!iqJ6d=K,QlWI]rdNX5H7tKKK9D5L$XUOJGAgJf*kA\)2p-OB07`LrYa+6n!<3?$G+u!4"ptXN\!Ip[=.s%$j`T&QuR-6E]es51lc/+.*0gOl0a<fYq4tqH!fH8q!rRliK=W\8^E6C"(_A?#2nf9T,2K]KuE+XHisZPVX8rONWtDB:VH:`GR%M-;L-p)')1WlXUfZ05(]qp@[)aRKe?bUJfYu+0s(Nm)!6tM#QSuk,h-LnP6"Ka,;ndH:/Z5@))c=*l%O5)^MsJ's*,Uqp%:lKX+Dr/qlHQL)_sZa9Nf7!&_k4KP5Flg3#sIVt9&q6c]M+a^S5^`9si_-Y>_dbm_%(m97nF/-/6HV\HO36UL7F^A9<G=Va.U7'T+rYIsE5$PZS[Om/"eMt9\#4Tmq59L[C*(2STCl<Ja.J2AWaNe-id$/XnYp0a:G9JV"jn>)kU]*49\6@]X$eu`/_Za9DphiC/ba:91l<`TFV)%;6G&dAYUUo:4?5<n%A2Q*CJ4_b3_7K!T1/sIeEET0B2GW=\5Qk9.3gU8\3CtM=We"Hk*G3m#I[r:/aQKQPaM^T1Z4(;&4f8*h>,M&rtA[HaDa:[!_]Y$?0W4XJ[#7`R`j@P^Z6-4Z[#7_b8<)QVglmg0J/]!G1,\sMVRl4QaG)_<6@-\d2o#i[H3B=]pm6Y_'f(SOf)kBAu;:??ESS3?!kV5JDY2W'\f]N4=Wj7`YkRl\9OUhL81h]]Z9FQBt@^NIZh7DFSG99"r\?rWMWiE)1\iMW'P<Vn8d75;WpV6aa\8gQT!jJL\md]MgUV&dTU,='tZEb)l3U3jIG3d]g;(,*D)l!K_:S,M]04)9sj2##7*s(Y2DnYh\$SQo*n].P'T4[--;#ssV8GS_1@,J\HCj-.?=Z;]h+[C8\&nBIrQ`R8>\?W9B&FH,Tb+\08jO0ktB`-V'^I>GeVI2s5ebHH`+!6QY+S_^>YuiJ*.aZqnQS0FFIN34a4%+UYhVt_k0?uZ,oVg04FW*(p2^8t#*8CC'ef3:iG&bs*%tQ7h`n+OD%<2mLS#FAEgU?'"c<S2=VUVBgB]LDLfnDife-m;D/aDlfQX:L5=3F'ZpZg9:3Bl1N,-G(TAg)=d7(QsQ(.\t]&P$)9(F)D.q#'a0kKK?HTTQbsEEu1/$9j/CIHJbAClERC>T=^:c1HhPD;Dc\Ul(fZIh(u<R1e.;c)"("Y$\pbm@6Cj?9Du:hda]eThEUh#TDI,Di[)tJVYe`7__<Upf(d7jHj5&=l3k]BH0"sd6<\;aS3:FD-PZTH>N"qoZsWWG*`ta)U-!g=Q.lVOE!)JLsLq!oSCB6e5RgA>g)d'AA1Q%F?FkceZ./@cTTmnHhXbKYc1R!Y$/4?Bek(4l;db/p?YpMM6gj@<^&8@l*6](,Q880J,fIkh0#(UB<GZ9"K:[T*EacAY$K5F>^utWl`\&eFm9YDW;9VUpkJj`4`fbEYKnQC1iUs>lnKCO&.RmO++!;&V[l\E7>hqt*f-]Uc_#]b`8,XprP/LG+PAmDaGL]_>2+>cSTdnnR$\`N85`=uX,KGhqtBEi5)dP*)8'*gNuU1NeQ6*hH\]Gi-mK#bWMc=SOS7h+Dnc8Nqk&<1fq:W`F?1GRJW(FS*^6'cT+<:oqIMJMN0<,RP:'.<qjK3I!eel(]jjQA*T_HdF>T".4$-Y/Fu1t'r:gaB3j?Lfgk[VcTV-hMHWU_XIdl8]eF`Fe,anop.rMU2edc11fbd9.UHeAfCM1YG)=4=`#ir1=r@8!SRA?aYDmKPniEtZJHuM&CEg5L7P6B56U+ZY;lr,E9Y2o7!3]7B*2?>]\+uZ;oT8mlT4glTP3eNJ<ogV-'R-fklhLM%=+sN,!DqM8p)*L1\h07b1WIZ$/NT39#!Nl;h!ko[;Gd(q2<fV[MNZF$?HL'.aXIlSXIJ`_,+5#OolI6,i>e!a5OhL)HZUlt_'Pf$$:Wh=IpsNHm<0*X1SPHY1f`H:]BMhW(Cfh1!X+5_N^]!P<891%K>:(<?!rML<P:sWA&dl[<)'^*p3,[M25"ZC&,d5P64j&M5UBM?@!td'mL2[aP,<U]EYTZJPoV6Fl%Ve=,kRW9e+[_"R7gRe#Jc-l!$lC[7fJ#.ROH>"6P<DbKSpg=chS"7d+%8RBpc.$JB5qVOW>RV^OUX17NH0,)YX_aRMt9\#4VW4DH-Y,-!0[!<);aU45!D._/l%WMN!)3c@$Bi;BhbHpP]3gHfJD,QVkP6c\4>)IPu3-\=g-G4LPI*67%=PkC$Cb43fcK$kSITR_-G"hM'O)bmdfJ_q=B-h,Eh&qhKnM6G1\V&>0gujE^YWf,K5EFd7NP!CD<U,pu8q"9b2q!Q)duM*^.D&4gNhe1-Hh'AC%93H=SGsW/Me:.4LL-e,gg\AYdNP#7a-3qpebTIJW3+n%\o%>7r$,p`[!^*$!bBD-JV@KP)ta1?B$1pjgNs_'G1QXu1He=Z7TO7&EK;5a!gs3%Q$lWJ?R,Ns*iM84cBU]6<Rp#ns13T?clZ,#i']ZQFMW+Z:68"Bk"WG2@W<9p@n,Z<P*P(+_`H5)B^f2XpQ6BmI8A-=/<1\eKQ01h]_3SitI7G5$:9Zt[V17u\EEET4p4Ua.i%/k`%uIf!t1N\q2OrTdhjqVD^^V5L6k,-bXu%Wh\V6:fe+9,IR]cAO?i#S0Ep7a@G[$c-mn@Npg?1$>?(PB]0f0RWY71a7)Xk!qnepA<QZYJHsN4e]U92F.lq^]rl8$j[RC^n0,Z><hi6@gMeNbKFHaBJMA"q,.UA1k5Js=06J''bqIM/mZWCbEIp4AE+iPnMul"Q&$@k.(3pC%X!quP7d\KK8"L:grV'J<E5<LPsK1^,&7r@n'Rm8QS\K"PEWm*U+%QA6AJG6-cKO%1M>!<]Qist!sdK:-1p0KZ""Xh)6=i,HKs"ZP:'-iIJPc>l-29%DV_l)!sZ"._U<.4BihHB&]ap-K6_,k>_;GWrjd)5B?m$XF6AF0K,u+`pgKR3q(LQ71-oBnO@X(]S2c)h9N2nY,:XobKU8?.;3*J<Y\#Oq^5P/p=YmFD]d'jQ7*;.<JWY-Cg*Lgcfs>=R`Ns0=?UK5of:#"*NlIJ.Of-Nm1#q?:PE6_"2(Y)`S'+!UA/tG7Qe8*Nm"eL$e>ZA;\(e9(KDe",e5P27Fi.PkoO"Icg#V+>gXg)%+IWW9dGmh*EO?T[O0FBj"@?K#j1u]$+i3C+k_0B\+uN]7C)-_:&;^7+`/#!r,XXpdObZ-pgiKdb;&5/nkiKo6T>VdT[;(E/6TabNqsLrNIZ&;05!C%DK9P7H`1jL+rr)^;9QgYr&'s[mVpA-GA=i/D]/TH#oSAS#ldmdS5QCZWoB[@1F6Cj9hRu!/2YO2T^?X@U,Fb7jJHm6@ie]%E6q9[7Z*'fV3e5`Wl)1/nh[!2.n%JJ8N#@8((EkEj:P>23da0+OU@FD0&d5.;[r+WRSs5K#la'.oKIYjC'X;";9$3AI;rBKCMaN70'pEF/T;efhB![memHDrme##il(*JBFSp@2Kf<2f5obof/+FH%[clfj[_[et"lMBeHY;1fh5a>!./4iW50.\Z=kn3AJo#N'RTgHC[4Gik#Rr?%:m^qr-Nuno45aAZgc\=6\4.$e86552=@&KbiO&jf+p_$*KV+VU_it+9Oem!&9K1;6>@)2nH&JZK6,!Ph`P8@SRO\M@hL8L^n."Ud]2ZStXg9_0AftMl]G$GUOQX>1Z)&\9a*IfUQ',)0TTOjAG0*ka9S9strl&5..&;3]hdj&m#"Cpo8s#sD'Nu^W.5s[et8K_&e6RjT:&J!c,6q"ffndFf>Y_p\:_++1T,7k\/aR"dFOQ9o3I/`s)#(qIc#S;!L1.##0C\K5Bqp=J8$D9AsR2n>1J;"QB::GkW=`o)H\8d<A=dosFHe=jdgIbjE<5Tk%K8+*Z%V'#6e>XO;n,`P%gr(#lSKJ3)Gc+%73H9%YiqbFi^`E]#jAh5@W/M`Y(6KH'%pV,Q3(d$Hm'G"^(h;O'#]tj7>9#5IX;mCS[?OCj6(!K&P_3KX_4hs[ERCLL8:GnW3#TaB&APpWp=o'd)qp:CT`%*UEU0a9Z60h>.pJ<TQ!taO\/4V.Nr(%EI<"*MK('B,[V\Z197,WO(D&=XAVU`]@;E%h;hb]V80!u37R9>Vk09CYc^ta>+N`_:0k/FOmFo8JhKqdC&XVqA]/LrZ6ai?io'okhB!HLr`Poe\r9sf/=G3-qh7)9jMmPMj,Qo]o=(n*Mqfmsf)N@*VF6:\LZY%IR4aW:Wj5W4Elp19(*#p-]GVr=C"tuZO.p&m,g%tF0$gj]RlldDI7=aLho#W8Om+AT'J,ob6aQ",DZEafF$cUtC%NdlnG;jEp3-k(*e46-<HKc_6R1DV_G44ShkF[7cPul>qcT_6mX097;n$>_"KEo9mWMulqqtL-cj,^h*q=)94^\HfHnF5oj6\[j;l07H<qq#ZH_]q[3+J==!rr);8GF/*sdneXK(&5,J]H#JIS2iCD&P/2EM<8;jIfB0+_1Mt[+H_eK#RJfZ_G4bU/be\h4"MrLqsV9A4aJqQKTDl`e9'Zd"n?nH?="\c(EX`[$>c.d7"+hHrR^B.-ss5g"V.?0XK8e9e8.%\Y"4t-o]Yhb)fNCgqWht?$bSn-OZ7:3YQ;@4hIlkl,Lt4Wh)RJUldr=1&3agVUlcll7RTWQ)`A-)@N/LB11^g(KErIOX7*Ah&5<<-gpp`>_$B\<>M(AR.1#kH"Cat`n?IoOFZ&'OZG(A7,>,8JZ]u3!Z0_Vu%Tk7tXe,%L.p&kf'btT>ZjDRC9Jq%^>_IUr,h/'CP_:[NkN>4sZC[`,n0_trRl;uD+TX#J@VI6]%J\?)Qg?AZeg+iamZAW>KR`V"%pZhr=k"%UnJ`(5Cr!BW-"L3>iuXId;<e39d/eoAldi1JCXDQ?(l70D8kO=Q9'9kJb)&c^2r[9:;NJ,mppRBP-:&3CGc+L6^dppa"p?6,D$V7]a;u1\3DF*/Y"(*9(-S[H7.q7?5CND#SiqFf)jSgGa^d^hVe&poPcNAWfna\"?\U5Z4$aE1nP5-VAS(&NTARA2qpM<6O_)SdM3!^)ZtRk4SNG).1Qp=!a,V=#4!mcT_%miCEs,4&8/u[Rou6Ks7usD7/R,Y/-RXfo(V>6BO^-*'W9aiFd-@<>IFTBbe@:^5WpU\uik,p-i=bVOR$X/+S!scnc'U5<c*oK<`!AR$cKNZNom4<f?uRk5R;tX#ET>'De6#j\/;H[!e$3E'Nfa$%!=ILXM6]:="_BVlbFR-am3*u]4\XCHXfk1Z/RP#lJfoFD9<KG[*BSEe9bu>#A3Y#Yh2!XYSik,4C9YoZ]XGg].cel`f,dpB1Wmna:RsP#h5stpQ="@eMW7bYdA:4;-l^P`f@m3=\W`Igm$'*aW:_T9he/E$#S1<-?Kgq+TgS_NmGmq2pcTO[(l_!%&f&]`4j.d.Ek#*E"[f_[X7FtM[5@a`&l5rL28:.Vh@efjTLDRm(tD9,X?8X/ID*r<Y9LRE9XWm>WiWG=cSe'G&c?_5g1%<l\8VIp/1;q![;-QkhF3><`Chb&"T$i`F_b#Y(2=U#()@W"Z"o1e]k-l!%^Q2slrr2lUIU@b3<Hf63,i9ohRs1&QRuDgCL>XZEcNq*N/sW[4r4+,J67g?I@MO0.!Y.&E<sT"LkFc6Ior%:bP=\L?_:&EBI<LEO*M@MZPc&:;Gts0fs>6ks(!e9jKs!kc<[r!iSqh7Ti4-Z35:,+G3mkH.p#'#GSb3`GC$roc#)dBENtWT;l2*JYe^)-6[jH%^jlHk7gQLD0_D)E>YMuqFi[R?#7l)'_q/Ob+IWV.lI"pK4]PK^0]^65)coT])GH_b=h-_JdU41q6FBRa,?d$5<.TMO4D(Vm;'OJ!h'-&sTpBqLFpN\u'>2d=]0s[3#bWM4HHlua,9TnN(NCn9=&+&e#bk)`:6-2E?F3fc#7hm2[V_M]:3(A1dc]iXkU:@8IdMSE.i^d&4E>24iTo+!hlpMk\cH:[h&ngBr*,eEcEP!lfbruJik,p-i?R!/a&Am2*BJ:u?\cS7-Bm]WT7<H-#()ZhGrb6VZ<UFdW-.L][JT[bj4u\6i'<m)gtZ/Kc$IISiDh8IHS*G8n)*T>1Lbi%pfk:PlMGB2"Q9@r'bsfQ>f!VRXK8KqTX(l/]Y(nUW+c)%mBG/k"BGj')I/T?;gJ'$e_/X/Vb`r)*ig!Z)/,S*03GGdL3p-2E]o"+[G\>Hln)@Ofr%)`T5B0n,5C?HF`hgaI_TT2BtJQUg?6O1^\j7_R>F%mc%3d0#lCl%6/79^QRuF]3e0B]o:.+"Q6at?7>hqT)p%?u6EUn4&JHNeS2G(_Ci$1C?#j*$f4U9iRL/u@j/#D8//HF+9q.)2is%A=;Gn(a_'-&9PUTPh%4&8W;,LiYK3r"#9A&=4;l<AZ:5tRe^?Vm"!uq6!#amj:fXGeVrr)_T*^+iCm+LlOh<rJ<B9OI,$%<if.(f2OFd3KRc^$.eTTR127",HiMsHJrkKdd51mq#t3B?(?h7qep.q_rW<%eHeCkV6k,rdr7"VQ:p1,:VTe5s)^g]`&VCrb.?P9:-2][J=A-H8M>ZKmU;C7q*1>@(WrJ?uVio[pEYq>'hW-eWMK)`MY>[r*4U&XQd)`&;Fa^aqW3*D-+a]mCn0I-UY*o+s&d]R9N1CQP`<,uPm`qf6]T/16_Q&dME9<.kA4<uou$jK+,Clr<YIoYl)'#f7nEl1(PP$QZQ"EYKqF&P;EE[;5[5m>.qg`XPfU/j?J`Ssr1U%#K1,;c=i2LiiCZh-!l`]J\:2rr)^opS_(E.pT>g`=gKO(_#EIUnjfRQl+o]_hSb`O;KuujMZlg=`<-b$nk\1b89?4+:'&d=BKhCn6n_/8=\-D+I[>W:f\'C\h*TSZBLi.s8DZo,mGcr9fY*9%j&B/o4F>[i@iY*P]bF@eG%WC#f6]=;_rf4X(nO_&\(a?L_JTXD=^P[9/`_d45];>KaZR^n=LuED>)EDD8?#+]OTKPM^^'Plf$UkIC9HVM;Y"11]3YVET'-Y"CuG]?g`ASe[`QP.>Js5TulpTHV7M9=rE%#B?uTtNKnnuc9((I)^@KY6lk8/4e=c]o#-@u]6E_hcHa^XAH2Z-\TL30nCWP\``\/(npUnq(0LD-n`.UO>_Wb2Y51,:CADfTeafZ;.!RKp-V(^GXWql^NVWEe&k"Ol5C,G>q!atEL\C)fZXq=G9aWdshX"jJPOc)f1p+6O/YKC>NMCmbd%UEoA&*TqDO(eQ3&!*CEo+HSWMulbGLFTQ0mnC-$%c!mlPY'Kle^aAAp*K\_1Dh%j/#D8h!#Y]HR+CONn8TqO.G*.AJ&+7JF^^5;JsVin#eV38h5M`T!0=h4[&c=n`-YKiQ1ZT`V%6=1M="5lnL4LM\e%d:(JC.GlIVd;/WChj6:\W?^u=l+C*p6*il<@huoEu4k2;h!6X:3Tc?%2_!Es_Q"B(T+VajdHM-RUfN>RhrjWEi\8c#%G.*T(P*;*i4b57b.i.,U6:(aB>/#AEr^Q8-ZU[-$XWqlW[>5@:E-uZ^$%hXYcspWu-!W9Mlr`A.?K.4*:6l2_QFjou.:4J(-CcbuJoY``KQaT/lm(rm7((hGK!!0b=O1!j[8p:(h0".<D5+bD/hnqReq\sdhun_uP(,BT<;<YN-IGingmVYt7*t-qO'9P-ZY#2s3nQeVDO.%$"Ei1j9iK?OLdIo`U3!]mZXslS\QKELaurqVRb#"rgnWS42M;5=Zqr+u1chDM`Pq)q\'T6.l5r1gqWk="'bt3M.,rO(02<:ZngM^LM"oFp5:QI@*?@:]hE7.\E8D7hb'f&KcR.%9WOA1gK/I2U6`XU#VT"<B1o[YS7uu3NeVG7_/6IEFD1[AH['U6k@5JmdP*2&XJ2:V/^NIGlq"ee>%2;I4:,A+I$0kqI<0+%oha5fXW[G#VHMT(>CBfN`-_]/XkLhk7i';jar;:r/gU/1X0/#IO?.K$m-R9t5Unk6.jQ,Cgh7ImWSiqGfLtfYZj\^AHpqA`V7"_DeV!B:P+WrU&`E[#'a'qfkKfZ.X38.n?3huC#1qg&<7W%e=kLa3AmdP)+V&Yf]UN)@I3-t3FRgG'sK5GPZY[QG'IB;s5Rl75U;tSHnf@Zs5Y)1k1Adf?L&CATs/DQ_n/i<2+'&ILFAisAn/Mt/DH:VoFa<r/Fh$Dp>nRo!c^e_@C=f<m<[>^+)io6R6=<H+r>IStRDH7o<2-"E3USm3<.8VV:Q_Sko>$jq1JFXZK`H`gL2UuBYE!Kg))9_q`U$6^M:O&eXC.D7"iM9_e_8*br4j%AqA97%)9I<d^d:8a2;<^QPEi)?,e[s>+o%j.+gP#U3Qup/r%g#*-7Ihr!Lb%7_<aDUT1qg'g$)YaCX&c?-\T3CU9:%8rQ^;'A.$n>rQS2^KrO1?$2CoV:IXXJ(\pX<oYn-'Neu`.Zc1UDS:Ra7ZlI;f^m"jC?[4)p$04);iq@/\$bnYg+521bj.5HP\$9AIDR1qSrX)mqWU,'=Fc/j*%6IY78ZQ&YKAB>I+6TOQh1,<n@jN4K,<)hB!?[pn4=0JeBT^\Fh^/:0uPcK7$X'@3/T:LH62"$KF7[6Om$DU$c6V3Q;P0>D9=6+,R6IY8#Ig>\sEnk/q4N8!U+$Y2MFCcO`NZ<mpN`BS8e3_].?BgA(HIP"RO$<F(s8MKeqXj$)r\%Qge4F4YT1u&r;.9fJiR/R@NF?[X3fZ47m9=7M?1f3+FR"Q$4WS+9of/NK/;-2\QnSQGU9"m#7urCJ=Q@^"kVZ-5WN&JA&cM[sIt-C-#G->6a`lWjGJSk7b)cJ@N\A[>d@bL&(pZeX/HU'lW]Fsil#kNt][J+;p8FfXeO\#]VimT5e&R#mPEV1X9q$`#ER^paZ9GL,Bj'Ig4Y"_-9;&c02]<h(qtAc_nZQ$rqY'=2Y?sNU*sd$X@S+b//[)k]>5%njR5.2K5k<Z9^,YRL6UmYbWk6'70l#T4e*F"Me4,L?kKY),DOd2B>U;P8XED5(rTfR3dbM->b7YF#i&r,?MAJLn`/,0#HG03%KF+?[Lkl=iSHq``9q1k:O$Bp!bA`h'0er:^c'pqI4uQk[@i$b&aJS8X(^rtK&2jB??Eq+/mQ?!te5K0!I.PVLqaYRk/6S^Kcg\o!-Q4b"a>o6YX+#]c&OK#^9O+COq!mAle2VU9P\N3_RR*toXd,-8'GhQ%'bq`MF=8LaBD_Di)`DM_Ks5bl;V;)4R[T,&X9D-$iRrHG`n=cRFZLPE3-k(*e7<HM(#_Di/aP)Q4akA2*P_OCbCKa#NZ:'2rZ""C%"12aJK>l!:d#@id/GQ!]^e;eo054dK*Mo^8P.=0=l3k]n2H?J3K9u<IY5a7CYU/k3pK8@`)-]DEkX,k(J,;V(*5S_0L%dOhnFMC[r+&ANN4(^Xd!Z\S'/ssfT<t%Jca"&rdj:#dLcN*R55)aTp+HmckiFp`JYNW-=i1rUnsp(b^9*Ph7nG(,RIPI@rNY<I-/Wjm-`;u9389$iPRjMO*fZiCY/(7_k2DSl/2F$2]Xr$5\G%p2"$L9g8LOjLq7o_?[&Z<%hcI[c"7]kjgI64JdEU'b0!>Z)CXqBji``;bQc&&T5ejjaM)<3RPiQSClGieD,a!-N>Qg6o&]2hYKt;2JEn=gZk#rA8(Fc6TYs<CFuGSC[/*RJqU9T=?.YoG(M)_E'c#r@lleu.T1u&rd>7471nq-2?p2*c:RBi6;p+:)q)04;rqq$n2=YO.$oUIhR@0HLUEYag`9<=2[C4n:k5*@bn%AAJCOc69hqi\FXm@+RmskB7p?gU%R%$$Q5(38a%lJc`2MhW.K,?0b)epeA-E%-r<F=^U:0AnOT-/`CP<^23raj%$&^+a>b51Nb_RF*Aj5]0^4(i,9+nI:/"hU.YW"8QFn(nLF+pVJcE[=nY2JlVs/O7LbIISflS<ba2??=@K&0m?RCu?jP)le;Xd75A%cCI%Hq;mqT&J:d-NUk&6-Q4fN@]ZtaH>F-uobFm^,BSTHBrWCVVG*C](U1sP>W0l"G\+gBkgd+YgNMr9Z#f)'PCf><C`@MYBHoB09he'Jb6HfW2i\qB3ntH;L()HZ8'A3/ia3th@NgXN[JoXRXkRa*/LW%2M'nna`H`gL2"G;C4FbYZp+<eR`s0pk?f@Os=W4=umSPm^`^ukfb(uLn5,)5KD+$lao-J!R/ci;#l-b6<"<7S/"Wn3p3j_\T5,pso<QBQh5)mY+<QB@-`]`1.s8C$?Sc&6Bpu8q"%3%6H8Je]ie@l+\o[k:tg9BKOqIF9)M\T4#[H].Z?`ghDcF,ZMhHX/bGk'c^EP<R0>uamIl-^kg\2cQ0Lb8-G"ITgrl?nYmgTm5pS<pQ"H[_5VG(u9Wc@lWBOG5!'78KTNcT_4W3&haPjUF0(5^I8'1nn-i)GsT7"HsH,K4J#*.N?,'(Vq]e$+c@eQA2JaQND8oNT?K^A&dTOPBAo,@`=.Z#_\+'gjnM04I*nj55>*Nha;'e`f(d"If-!5PL,NHZY/Usq?76B/6]E:V:$t^Dir`uW_?/_`WopRoF2f[3,mfB?[g\1>ITV5421:./+n>!M>EkWbq[st]#m5*h.PQaH#i:0:(hM8U]aT[W2M+hBu5N0;l36V2/<uo`u\;bV=p,tWdXd3\#RbE4/$lehX&A#rr)^))Dl-si5'BmY[PG:(e9T+M*=V'3-"65WR)R%Ld"(_Cs?`u(9b[Po9.:_/ONIcVb^qA%=ER^M$?Nr>+qV:FLAjTkinp4eO$D(N@8EM<[1ec*i#L*&N%e*59CA<\oaofr\W:S^/`l#R^"6A[G2$BIeVZBm+sHR#[,EC3u;>jil-g!5aOQ4^"t/dKI/N#S5W^0ki'hH<8+BOe\6_aelC:Sn*2\Y.k@f.\aghn<Pk89QS2^KY_-\r%<o861pC/C@.3Gn<E3%qSLQ^;>:e[AE?inHphbc(F:#\+2J17)M$OZt+,#@oIHSnH=]nlf3B@!2n'B2#.juf*FQcP0@3KtkVPL#@4X57Gm+Kh8dduYJ?at(6d\TTQc<f'VXj6EV`p(sMZ.$2=HE1&H<]Ao`o,mu$LBeoK&D=Wsa4%@^1_m#B\M9d1U_+.XSt`ppF7!1FH<p1Dn+=\u_i9_<T07P0bVRo(]mI5/9gGh7!`c`(8@[-i*]m->iOtqf5h=-\`GsqX+]_"V/m8tR1OHD3M>V/r7*Z&bq=9>X[Yb5$aKh'O<d#,6YDH#PHg.Anm_&/:Rr5h%]'HN2p=a;#]^\J0[&d#;C?kZgl[<d0M+0h>`G>h/>i@Lf1ciO>/o'91e*F$GGcaI`':RInI#lRVc?[o1".AUTf#a_`Uk&UQro5+#;#W]Cg9iH3%sa0P0u=aiSS1ueR>hE!=GRMXL$FhN2O.7Orb.k1d.Fp7.m0BkdH(p-V+Fq;pF*JCFm8@-&*J:]?\>a.pGd$D[$P-KREaBZW^h0FB@!1<]^nmHT5B0&4@!//Mm(..da$stQ`m@HjLV(#2:Z`P:tD:?q1]=tfI3EWG1a6*k]3.'-$!>;9#PX5X-6B;6Ou>uI/)B-T.O3O`+V!5Q\,MRAi72Bl#Qh&pXf/m-AX"#GKI.gYXoQ:$O[J<'KVtr+R+@jbHSQ/QVAdb717Yo3nMN^<]sWqg=(**$b<S1QX5"&c[YpM4(#7tYlt:7HhQf70>k]F=WM&(++O3nYKnO]1_]ea8$?K(bAoNnb5(_^?T2iUUoH:`Tm,UuH?@i^<ioP2J,T',I$mYT"IrUt=Y`.C?G1[D_M,]fRfq,4n>@=5c>"c^Al$t-End@[Z43\O>0^"-dC,uDXcD4]hgPF>@noc/%PTt+>GfH)-VkdHHIUPZP9:-2][J<VE;7YF1ImHF.?MW;E3d_]PhXJJ.,.cS;;LAW(+i](l!Fo?38gTBD#9&:T"+$^S(RIr*[7psZXsYnq:/PRYr_dVmtWoOES_"RE/E0KH_AEr_Eqdekm\[lc`KEOVcU(9qW])FgqiHu,UOi^O(L%0qWK/)B>o`Cke&Ro4$aEAJu+6JH$L>fDKKOX%ABRfNukE,[:2=Q.YeKS3c<_45-P9$9M.qRiJ/KZ%2r4'B:C"L%q']?S'@q3WQH<sl3#"A'VbKdCmm-0qB!&GW[;:;)loqq#ZJ.FC(K,bbaC8"_M[^Nj6qKtq\NR`TmQP%>`T./a,_>"VG3PG/R-g#fd;M%Jj0M6;"Rj/Q7Z;V&J=QU/$IlY?$"7J^]!P<DnPU0G5?*diJ-**^\sI&DY`2irSMCo^"1eJP9?;#rm]tr1M71>5(#Tt`0MI0bN`VNBCFKX,:tL,/T\_j_HjWg*CA>Z>IUoW!SqIicF[.ZCtZ*?-75T_QS(5SI']#j'mtEf$)3jGc[e6EQ'LImj_UA()4)Z)0,NBJ==iX\SLZ0>i_*IY=gNiY$3X@HhRqNP1*LgPX%Qg4GYtL\J5;u9eWVLbY..W[2RLV4(93ZB5CP^I0!9X"p35DB2^F4s&tZa*iqhuE^ZhVbrqOMuqYG"@"JL_)GHMN@SiV#Zd%NgP&dZ)>m,[<knnkLL(8iV)p[@"3St9gR)!9&1_ro$Je)LF/360<r"Ue_`bfib_S\!Jf:Wkn9?a\Z?_93E[cBp?HhuE]M_[f!0Va(.E[h:8s[d;A7_n5BOl\k@0&;3]hdj&'H,sOVDrVH2lZ*D^(d?>nOMKWP$jN5lJ9nU12\Hg!gPq,q]RPbJFNJ`T3jiHZ5UIQauiOEmfVG*C5Dr*VC#VEQsYD0hk:H]F0)#3*K04K;$lIAOo/rbpQfB`*GTl#<E"RnW=2+%rJ7;[d5,OAR=A-k)k3`#O<0k7(VT<:5_QP,)d&L2r_G3ml&a@Ohc[2:oE,U=6@'8+U*pi_Ph5^a4V&]9>4_ZBc3j,]*6/Rf5q_iQK8l\k@0&;6*PaYcsb`&:e7\PAMG!DZI^qbbJ@A]mmf6)0p-[jme*E?[GrG%tkLT)eI-9n**;k<!nUr5BIZi%Y3+a$2nOpYL786:(al/mFu7UqY/55r92OG&%<0j1]s=n>fUt%4)Q+@O1J&mX.9->[3dM$K]HL.2u?r0gL=TJ,XgubGrGLs1$+FUa-p&+1f?U%,%CG%t%[Sk04RknD[^T^-8"hd7j&m^n-.0Js;LajQ'kLp6,Xk$Z4Y,mGPg5kK]VK[<(2"W?WfOG3i=CB'.O<9>qY`aU1k3,b_;u(,g$`<*WZZ2NE:58]Z'YW^*t=>3/KhLEYD$[SNJWq;-Jeh0%=TU)pMMmQ)2jA]pD6h07c:O$DL/CKDe>F6ChS^OA<UjQtR+BZeq>P9?;#reqo)Za3S/;cs[>=ocj$)_YL.UmtshFXfrGEQ=([Z:6grEoe?fH!4AiUb/&]7s26ss%gT<oQpHTDnL)5/[m,U#tN,+IePqbg.9$:If!t-i/s.aZY%I>M2Ccqfd$hi's@l9<)lqpVl(d46d3!o&O\g<%j/N1n_thu(F<UG]6<Rn;3rk=[Tih`>\/E)OQW_r=0>NR"F/O31pXrZXDs0;idO[nQR`HOd&Ln?Rn&DSn]Wf8"9\k3ET#GREt*IQ"rg0C"pP89"U4_]]FtG,'(>Gu2dX%87;JI[R58J.?G)Y4j`Btm1+W[.M2fTZ2^3jj]83,A7)OR+<idtl%'d(B1M4iJ1M2TsFi_)&3(Vepl\Bq<cC0@fq9*.EJoCY.)fL,l\``Cjispa&o[F:81ap$6!LB%;SiLir^>`2q)6dRZ@NmSn'.6PFFThB`.QD_EA6rR`S"3%"%fV.gOY!7b<',O)oGK`8=^54%T:ZY%o#`.\[VWdX<;4I;:mPnicq1eFNN8A#KS8-(gMO&s\)+`@muADM&3n(t&J5WTqU`J)9^ral0?uXF&3chaU]c9I?N"Ad^b9'//6bh6lN1I>H$M\A!KqHQ98hQ5D(@.gXJi'o?HrB?f3]-(mb+oOWO24WA4B&.n`.Yea%)I-lfpNAT0@Z-$lHc,6:X5"D\\j3gl(Y@@IpChIbM>RkDgQEf([iE#f6ZR+$PYQ9_8s=)Vg-n:UZJfQ\4jh$(M"7Z,]>PG$)q"ZPd2OX;u:D!ec\?[r,4&_1AHAe]Q$,jW=6+Rm$DBh#2*@!kuS.]6DHZa^1_53'-ur5_ND"B:C$4#l[E9ZEge0mFs#;,Q:D39uU=GfVW4*[W19C"agG2@u^EL5QB[O_O9T4SRXOBEF?3HfFBgD]+#];n.2g?IFuWcc%T>lCJ#pIGFZ[";O_MN]9^!oiTmgA&Bt@XkRfg_AnIpa80C&YrQq6*W_/MtNCiU*fs?(313'f6gphFg:5d(8M\q]h_=!D;ZO_qUkMEn!:RjD<W]jEQWV4\aAXUJ!.VC&o043#NcQ>B#HrO&Z^,i,fjfX#[2@4t3`B0W.fs2nK,9o3/3A)p:-73@(r:p^GQ7cGMF7PU"PtPMC^^MQR.7O:hYRNG$ET9M6f;t)Z7uiBIABhDH=;3Mi2R7Ab8p9GsCGB_qOS-O`3SUN63Aq3O$IJBAUIIE@giG-`r:74/e(@kaC8`m:.;@(t3B3,QfN;LNGCgrBigh.>daC$jg8#_@1L\.RKS0K]i"jjO1\_c0ea)n.%h(cCciS]I>&,Yu2R'e8J,E0s#XYiMZY-o''0")t)?n'+Y17uKI/F3kI)%)+B\B]Qf3a$PhO6NMmcU3lhR[jql`\)&Q<S7;mC(bsES_"RE/Adb1`D>m2Jcb7m"ePsNfH"7$o1&GWb0ME22R0H1:-p%9tq>Z)*)<Q(pkM_dD2n\.cnQ[L/\Y26jke_b](U=aR3&`/?5!<X`CNgeQPQ-P>=C$96'puGJF%Mj,\2m#f!!Zo#X,oi=@d5OWYPkl_Nb_`TWF=C!n9[S2j?]Z\8c':73k+Bf>0pgph@0RF'RtDIk'FSLap*nL)ab2gaQaEYPs#h]@n''4AFqm=l&hL4jmJnDSTJH09>%>t92dLdoN*M>?c+:S'[o]E$s5N>jfoP1V>EA/iWJ!ke%1&;&2r2,!8AZ9mmfm3ipA3,p.LWOcm=Z8UJ**1c\<r;4P[O5+]l%8;;cHhWPWM1Os(FmI$o3^[NXi.DP(p=Nl95Q5nUT5B0n,5<PB==]MqO8qZ=AI\]hi8S2HI(]O1D5?@"Z*F55]UcRB3!<;dT9V:*S"#n5QDSJObmu/%>[Q6c7re"2p[T^Eho!a14,l^>Rl5-9dtPlHHhHZX0R36RdCqf6"OTp4Nuj8nb&NIhP=[bO><,XegD(G<3B9+*iS87"d'dfG%NRSUNY6FhmL^C.Nuh;]HUMf\iABV8O3f,D[jN[VX0f5JT'$bcgiLe)-$FZa2@4t3`B0V72bZq??+=k4:I"e770$33Q7Z<am+ASl'kh%'U.U2A[fSF9pX=uFd'1u4^13Mk](6[3">.sKK)r,YpIE8)7pRdh?BJ:9X%3*;n,'7YU[V^>:HCBL?c9"<'0(D\t)&X=efd^pb9Un))cdh%q\80Ng8]k6e!+pj9gh?m6K16oaCh1J?&X+S<G-d<W+Xeap:EGP"EQF4b*BJ:M0CQL<Y0NS"YEIJ(=LrUR0?uXF&2*KJO2ue_,qASde*5lOinTXu5)[R`HCQ^"L28n+-QqWA4*Rj5OiYU7`/rj!bP1r+TE!trY5@q[qsM)b,,&U%gU(\DY@#%EdLlrp#mn=*mfYrOLn(!*m-O'r$4p)V3,l[(a+SY/G9W8'CtPtcTV0+!-gAdrb4>,o<8761QX=KOPeI;5ElX1\R1HK`@,&Hlc#3dr*-go,\Z=-a!W9L-n"(-pi;q6sk`4H*oSCA:#7nE''Bmh[2E,eBMD.2ZQBki'4VC/R63E&NJfn#94V@l`W8act8Z)\W&?:g5$%a:!+[$G@5nF/b&-P91KFCJ=$%a:!+[$G@6)[+r,RB"#'1f#(5nL&X*XRE@#_F0)Io'_)"Y/])@0D<'ML;b^M@rj(=E&etQ[iILVWFhsU^M(fU8O]\lDe\_=D+r7B(#jg1h-BL/D#e$*Hi>4U<fqg4V@nV*_fn#-&,63qea60VgZuW5nHa,^[':8$1.raBe\_GkX),13%-UEUSM)7Ob:P\9I8-Zi`.:ZSs!?RN&bZrTg@,#KS7<T8oNJAXarp"eJ>Jg*u8<=$jtOe2-\^Tjh*lbAl30!Xc?LL_IBtJc+:*Q9RED6NQWf-]bT63NAh`)#e"VneXO_s?UJt(0cZ=Y=e%ibm>jn*kk*)^$E%6W[3[bdFX80S=Q]Bi9:ZZiBT\B1^!Yf;eXJ3H`InEdNu2mh[c36ZgZ`\P#3r8EhV2LLGY"LQ<-?_'X`B$_&FXc,JKAA*Knf8@q"4j`1)*fg$./CSFH'.'O4D4(*W_-/oIpu;7La#Igs2TkNE[s%\mY%[?Ic2KGm/!`HPd)1I,6L.IPit;=Jf'EBk(7,krO@]X)[q"CatNL<0$$&oj>F"O.cdT'!V-=@_a'1qq%Q27BrO&.d;#tXOh^!_IlArrjT;7>;D9<0^Gd0*KsIN6LeW#PnSi6e67oJf`,aX.KQ4t\HlJU<"ftGca)JACPnE?a[ErK(_@[!Y_G3h-(3.3<jG5,[cEla>q@r#]3=NUVau@BHc\.ACp;:5,=q$l,R!H!ODpuF*7Z>aiO0d_ce'0FrkW9-l^0MnmBa^HnQ7Cm^SpF&I7SR-<2n6>/]d!VXuUZQHdO;)1<5bYH%"5"*i8SSq@J*Q_YQ,>s/m(S63Dq7eG@VILgsM_G,3Sa?fe`Fe4"$(M]R`oe1)gOn*l5Vq/=sc"6X*C6O:he4X!?E1PQ(?W/4C5HF/;-gL)`!H"+iG_=bc'AYpU,6Yh(t_BDda=(!,TROu;u6FN.5c_ttgJb=5hXPcF+V']Iq]9CEYofW@m!Od4"@nk94OG6`lqTW-WF5[M9Se7sboi3VM"'B,/[#5WE<%fU)J)c)$\Xi)5jM+r"4ZXjU;@LI4<9Oo[<_Ubl7uj>cKqF64QWW8K%[jM;(K(G(A!EE]BjZEKr`!,M<)'NtJZCC&[AlL%rFE#]gnsg@O$"?1lDXk:Yj\ADQ-(u'HX:(@N^oo=AWRr>FhEb>4iO1#1EPf.iIA:W4kdb;jIa"o_fA[QYsZ$'CH^B\='']iEl$*@K=+Xgc`SJKTMV2q,i+nd[Bd/05Nu%VU2.AM5^F]E$r'$K[R=$1H#dbKQNp^"Ctb^,4\r4$O3`:<>2)($@A$fh/cOC>pDlSq1Mq>JV,"%NhQ5,"W)1=\Fc]j$EGV:i4%t7u82M(ZY"&qshkl`d<8O)&_Go,3]="cRZ/SZB>__UrN9q+Yd"99>);@:UQ[2UMdSnU*nWG62h^TqY[c7^VhsBK4TNBO9_lXeNb02=0`nB9#NNR;;eQ7#*Udr;2Gct$fl;<:!bIadF>g%+cO32H(6/=o?L]_u,j`1FhOd/R&WX\3ll%`b"`-N%9D6f0sP]"b80fGHK6Z&/6I6Xr+r3gC$U>ZRJYsNa^HqQiVUH",m+B4\:Y5,ITmp+J'fp9X)QfUd&0H77ZL*"='44:i8<@X@EHrtWDFFhg4)g.uICCmF*:gEtE[<+@G5"J6bMdH!$GbR\5UPmsZ(tbU0TiKg5_shL$,!^RAgEA]m^;YF^eiiHV#kiZo'RD#1JuEVcY=JJd7=NY1rlg(sVcO.U+T+eo7$#b*$RP_U6%U5J%Ljjip69kpY%9Cm80]OBB'#*mJfksnNEM;F5nFJ2dO@HnKIWcfJfk>!8<3m>&9WlM>[F^+U^;WdAiP9H6k^)Ka@adCe^+<JQJrDTMN@;u8!ll/"OTp5Yo`]\g>;%UI@q>\k9`l`?,ON?$.I^$&'5"\\)Ve!#0ke],p5/ueiI6+1hF/pq-WicYC0A.5nK"qhs+'MEK^U-a.CDmT5(7?[SE7@7;)D;r]ICV9T$_m2f'6Jk'u^DlRM55JcR`MB+Y9oaRQ)JASJQmHLqniF_[NKTf@s+pM,*X,t)Z(<aEbap9!#_"#_AuQdG.dp,QjnJnPL9V+99L:JTk!6T#oJQ<<L3"X$k4D@I'rAqR(kQr=GpB!ZasC]6`SJn.KS$)4sR/Y?#&2ru$*.]BLAg>MX+AQroL1rm$G?]?,oo*=R?%>NuaS.m,mj9J>(,`$&dr8*=3Bh6p4lt_RV=-)2^bUt:qVp\rHI0c>(L?h\pHbVE"a7bZ:CiFl0=9p5)"OW0ih-1Im:=2H[X_nPnZnF=SRhjaUO7j<kEt)Q*EH^;Y[BsZKh3oLCk(2mUMHa"h3Mt=m4VHeM!km*Y\&kqRLjF/FU0U<m`MHd*_Xt+EclhX:MIlSS_,krWJNX.`>``;WFD"WSa0aQhM-%ddrA6c&&d1LFKPY3JGCh$ZBTm#enlt-<e0F4B+:-lb`>oiL8*lXg/bJ6UUdp"ZI#mHaUZ5(=)P*$4$%chWaAsm4,BQmXWu6B9,=)loO-/8&(?_r"7@$t95#Xgp,RC-d+Bq0<2@H5lLU:5>nB[0)AdEu2HjQG.d-eN73PJIn4$Fd^Hu+K.8.\0&6$?2H<G$(g3:/;kL(^CinWt<QSLn)%I8<5P+[]q9^%3#'/m*FKL2Zk$^B?jP$_Ct]^=8pUGcT<IbSEs",`$&aLRIhcVPH`FZ\:J'G^/mrOZe4of4/qp7W^&jjq&6,>AL\:&YQt6Tu#;hG90$o#bh@9-=j'[UMXTI-T!)3HAakkKmTOaMtA-8GY/9GZ=N2eD6#7mX0C#q=b6Aofo[Bq("0;""ugFp1a,"CSLrWF4\?<rE)As-U32J(BuB$\.=rZ\,bA=eFGE>)kLuK[_VNh=Zm!J9e1A/-@@m\M(m-s4;`E=K)Nu55bSKW?*nB]+O<+_&nKKnpSKtt08roFIL!0*:c&V*@\`P\;MRt#p&k$5`O)M:#2ks=j_3>XObSG((Xk>`sAS+;SYjKbleu]heeDf")RF._p;C(Lh+;ui-7jkWs"1o:P"9aMEojR6p#PM,$b\M@0JNYRd6DIK'f&8rk7tPE]aR1K:*tIZrNBiO-5nF/b&4BHIU-XAR#ZXEV"@3U!O<+^[+R0*X.7"Mu.\oRd+:(t<Ns%`["@3S%5nF/BK9Bet+:(t<Ns%`[FTUfl+:(:KdN_$hKIWcfJfk>N+:*QA#_J.(aYH-nKIWcfJfok1JTOKq"JH1eOWXor("+<m&-P91"@3S%6-,^0R32c%("/jFRFtPIWUERn"OWn3<0+H6Bskore;&a^(0Uiol3sPQC8[[P0nct@esYUUW\Wf?e]PSE@aYFh#W7iknsSd+bS]*>"9aM!RS#'BfPu%*8pG<2E$2'<@;T5u&/].1ntK9=+R0-6oiPL9kRe@?)P&$#&ZR[@"U>7t1;.X3rTg^L=!&%d&/paJWP3,he--'[l:b2!mT":;5R[*IXNcLLh/O#0iE*\B@o\AZB8[Ng%40dRj^rqm('3C61+@fC1_q)M@#HP1;p8h(68<enj;Mj^>"J[tmK't*on-:r,,cFq(*$_/,Ei;2'd]_Z>@EG_:u,<]V9J3o>Hjt\PtN2-m4K,reXK?<"(#2[Qn0eC"h\EdYQ0#`B6@BcLd%.1_UTqMd@ikC/sIN"7>^Pii8A:43S>Q<`prUQ6pqBomCi-U=="6I@8^snLM5tIe>2E[,5;D<oiGLdX7$W3d*#6j+m;eG3i*1D6'oRrV>/JV7B$dGN`Biq;TN$Yac-T9#`uD?7$"beU60Ih5s[6Lf-2Kq=Bs+']b%lfRX(CeZ(fmtbI1?(24+d\%Ss?Ee<6X=%1;<-.$br0/8_aDcJe%SFdXsH+Llcs?0Sp7Zh0"EGJnZ`P#kijLc-RcU@D/o2MBgPTTCjUZGC4_KhYT`[1+p`[T/Q$5H=gp4ffU8JtruZY4Y*&EWKUg11"57:/DHgTqbiQHK60\WiX4GBWaiSb8)jKWGb*+.(+gYZs<P[ER5p<VsU@hC::7=X0reWaQ3_[n.`Xp\OPNLZb\>"b#eaJPf5sI)--jlm3.gT6b1nU*?A%Qa6I,DGR4'8End]>\K2dPK>c=@P&3.CA9tV:VEE;5e>2@eBO<+:\G(*12oUAKl_W<7CG0M])sNJ-r.3buaH=p!)U#*__C[pNI8ERt'%J;*jbA#Np$s4uZo.M)h+k8u0,\@WRZ,DQOYmpg(2Qp_&7N/&1He@HUpVZF70SD1iXLY(`gda#*XT\Jpe-[r`C!i\A;A>o\g44p4jC+i>4$r;ok9,]9M:FO:r4A(oiT\>Sq`C8BgXtOeiH'Cqa+V-n!,GR[iR<hOWYPdhWbep<HPHiCPLZ%%ZWGM?a:BRLH`2kRXJgD%qSfVeSi^:qng4P)<D)\oOtj"UsH@CLtt"pl:=HUQ$TepDSL-?l7r*II0dFm_sRk'QQ2iA5.311m&mqbc"Mk&er7MSa"BDOWT,*Fg[0@9,=+.OC(Y;`PaDk?gP?Y(kf$@S5fI2-dFlP&e6L.;(tc_V3"G:PrLdcp=Ct<bk-aS$ACt2S(=mIq7GAe[f:()TW'!/p\g&XZZpg%0dcaEYfV*&<GqD8)R^#>^aHLD5HSsD2X)%E<]jr$sD-Rj3'*LT4"@3S%5nN]]rS>"2#_Ha:O<+^[+B0LI&d1MM$)CLO+:(t<Ns%`[WfS8.Jfs=q@:D^lnE-*3q,H=YH"Cj=1>D+6E\1&0h3bpga:K9RagAP.qOTpD,0apqO0oNej2YNS+F@RX4^,]L/JKNUZQ_OR=S'$BRn(m*[%OfjRtsb5]XlJ:K?pVIQ)d#Kii*t*JnWa1995)@(<C.@QCc08(E?[9fn*48_YahtC`;CFF&oNc#\EkGl:d8=;i]HtO&G.nqs3UtQ.nZ,WBp@8AYh`c-p/$]5#+s$d3Q!rU>%^+il[3gJ\j7k2Pe\grE!A9OQ>k$'-l..6A*0Lg<-mh-/o&^4T2q8&llDA/b,/KAVmED`<8+7Rsnf#>0X%XfX)(0=_`5mm,;NV*gQ%nC$AK)b&NgjD,ZaWTr\6`M8C1F$HY/pS@mu_1m\?m<3`<UJMk2=fh6[k1ddqYY<[N='fLQUoY\'8^-qoLh`@`6@\*-\g+SpcMao=@\6)`?hWe(;7kpBaS[qqd?.>ALS'CZUaZ=j0<k/p)g6OF#MGlMA)LBo%Ea5K^RYc5&PI%MY;RY86\/qIUfr%B%6rV&C/rK\`43>r1lP6Y^m\*o#$eOA3eKZUl`=O>R/$2`^fh5-h7*%<PDsbj#X=VUV'51`bV,LL?2FCGOUX5d33$oCM4kc2]A@%A3QOC976Ga@JLBT0jJQ16rk*4m]4k>!W2@lU.3V9>E7rc-/X)uO>B^4N"dF4s\W3VWRikI&P.^^UHWkSW$n&=f;Yse;gnh&l[ou^b/B5cH!Rr8^]jKfb2<F80`=o_3,]iV=V)raJANd]:$U[!'bNZN'/=:2Ssl&fYV<1EQOX9gb5+Pe&jPF<nub27MUqa]Su[\c\]e"aCn$tD(h\Q\'+YJqnRj@a!([*!12=9-N9EilqHT@;k)C<'q#nIJQX"s$dFV<"(Yo"[RT7i=s@oUYh>hNUm=_5-Wh;!P<gP3]0W?R>a>2`Nt3*7uKo*pj?:aE)*UEd!Lu%IB30o;XC7lL`YdElrCtXViHrU%?]G,5W\,R_qt:2.LKhDTr_e)uRoMoa'juU;#3V'i1REC4:(ij491aek&;%&JT!OJ@Eq$^[>@ML4u\II\Im['ie3c#bKQpY7g$^elkdP3=a(NWN&]R/rq'cL\2/i/#Za\6q2Z^#5/VQ(YOdC"bIdq0"BS@npr4;J.VVH;Hcl7a]g5@I("MpiA<e_2I\dRJ'^b3Zj6_!1gQQH:;,+$>J?2Y7q0ZpW*\F.#bm/@HLq3jj5J/$bR&l768V=u&d1K3"@3S%5nJ]*-s7l&Jl%0n8.Yo$-]h(0Jfn#94V@l`W'YeU#_F0)Jfk>N+:&jL//&.PW'YeU#_Gml;a$:=$%a:!+[$G@6)[+r,RAuE#_F0)Jfk=:PUmIN6)[+r,RAuuL%InI"ApP.:'lLp<$=C;"@3S%5nF/b&;1HaQ3i-c<$=C;"@8tQH6`cJW"V_""@3U!O<+^[+B0LI&d1K3"@4kW-lO?:Jl%0n8.YotMK_^5aZcG&W7AET/_%)QGmF8o/*[+WJ3)$[3oE2EeZ6:[#+Fh&Tajm(Vuu_L!J2F"Jfk>N+:*QA#_F0)Jfk>N+:*R4B`()%=Vmn~>endstream
|
405 |
+
endobj
|
406 |
+
106 0 obj
|
407 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 612 /Length 99
|
408 |
+
/Subtype /Image /Type /XObject /Width 437 >>
|
409 |
+
stream
|
410 |
+
Gb"0;0`_7S!5bE.WFlYNTE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzILVlBgcY~>endstream
|
411 |
+
endobj
|
412 |
+
107 0 obj
|
413 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 285 /Length 13690 /Subtype /Image
|
414 |
+
/Type /XObject /Width 219 >>
|
415 |
+
stream
|
416 |
+
s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;*<=gr!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grVqS[qH3g<7)f5*\uuV=:OJ3fo*&G4d`VXAAUb4?`]E6#1todJj1QLPNY./T:HR^LL4<?ee0&B`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iU/:9g\C0)V9cMe]Y+J"C8^ng3o9("A#)T5O;ZBG+4VaV;#At_X.?N#cGf1_up&NKu;i6t<d_J[NZ4f`>lHF<Y6=qmH:?8!s%h7$_KHFNJCaO8Q85Gi.\8Snp49GabNJXOi):NKMu'lOd-'!X/\'r=\\aQguF,hDLflHbam3,"Z<EmU`0Q"lbr^?+$sYGkLcp0[FSDuTfdQi&;1:U:!#T0%Q"oKU3p)FIWu53G]eHPK;JAcD`oQN$sZk^S:CfNE^MV8*!++5p7[1ssPELEq3]9nf5;qEb,]I`M4])[en+oRm/AO791sX57*XQ'D#@"u3q58ATV6##7B4'9dT5:,#<-$oSlNoB?MYq]Fck2AUf6km.1a'ZdK6\$a2>p5pO8BkM\!J3Vk2O'bX3UtYd7e1L$[\[.T)=GG)A?+;"eN9-)f(Q@;D<hiO(,<%Y\=*f7PVT-s]I3AOi^LEXJD#XLuedqZO.Hu+p2"EpI`(r4>IPl(II\X;OK2o@D:U@XBQ7I$!)S.2W!QtI^$-%;@g1=T_OWh!:rrAZn5O[7#2E%3!lNdCc'HKNa(t@BW%&$@)bTAf_]8h0^%R"N(mb1h##jrm^POHMo$SU"P'RTghrSN^S@qkrC5-TOoYt[,WTC_@RrVI:W^=5FOda&UOE"$19??.iP6,Dm>RY>lWDmdo.1pKCnEeof>J/L,"f`;$P]oU%!;dsX-hSc;6e,Fc(rrBfCRV])jkLLaPp+!nUR\"0I^.@rJRk%kAp4rYGMF1rjrr>70rrCr]<Xgn5bkm/@HPOerYPe8brr@Me1tgU_!7/#:pZtn49f-oTiQ3.Z#0tj"IA-Z@^'.K?L+'][A*(^eRosg?5g<u2UM'T,,NX^ZHHZ7;=u's08,4/"R)LK,IAQb1]bF=G*C3]5+8H+HrrCXerrCD?=fU2:r.?X%!:,RC!9bc058#;m$So@<rr=7'RK!7l8+SUDCE(,4ngS:Fou)>9>:-AZnKmJEnDD';UAT[$dn4>OZSiBD9dukp!/@Fen4@bshcmt0V3]t+7E?>m8-><nBr7D+S]R*qU>l$>oX8d7VeQc1@Au[H[ZX+PC:s-QM&63p.q&84GNQ89fp>aHQ8l[3.qrKQ^^<_(<+G-inuKcle[hlN`e7FPgS;<3@qBd%C!]Fejbk/6mPcR.I&2)(cQn6*"-MH@_Z]gY[BZ=NAj=tr_!#;pjcg!nEdm9.1.H`Vi7CM7]u@+ecr"e$'Z!OD8:e!n7V^IchQ&sa)("^a=8W6VZ8-MP7u]+',_uL"Rr&eC`c=#(*i#ab)K)$eD*=UgDO=Vq_j5sFEhm5RD`Q*^HhAa$d$e[ElUeSJ38pTr<VHFmLG3Qs0!(bR04jj0p)'pf"0_.G6-aLi6-.>-pNda@k>.C:?#V>EA\-3NE\cO_<?1`.Ja6MeRV@+_?Jr'XjlO4Kn1FKmBr7-D9k8>OBr7-C)?=KI1o?^T!=_o4rrA2P_u@>\rfqTU.kg]?/3iIO>2##*dJcWo-fL-]U\UJ"'N%u'+]Yolq$(.)!7r%e!74GCWnNO3K.d0(l\kcCkU*;o&gi)9141>H!$[_srr?:oo/3gh)o=i1.;>FI`.'RI-E=QF-0i_Dhnb)Br.^Y-8o$3CZZq5@4NRX4C#<C1$<T,M&cohaB'\b]'mF.ZbEZG`o/$n5ed\-I76FC]-N,Q/%#l[G-7PEu-YNt[E![?g7QSq0'Gbm2V9HCbAii#e?S_%N<DOnXj>.?mAj$(nKj1F^fD=.=<c646rA;9!E7,ZeoP:t?hJ4Q_&TZJ8XjQ]WNp)<a1'U[B!:@hVdpe-LVAkc0]/'BdBF&YQ;E3;]_W(fUqkG&$c`*pdD!^%t`0H2A>fg\lp[!!VRVOiYCR3JFL>#pr4dEiWT9MNL$:sm4rG!o@Lp$ZD')EKiA[Yi>k,X"t/>jj4,^OUt;=+89gsb!Sr3eIW1tH!Cci/HP[k8r:.ad"ojh$R'6]CG>i#]S3Ku.-7"f-18kt,ea8.t)!H%&\_V=tDr^n8<h*1ClDFIgOEITG"-rk!IPq&L'ER_XYlh?CAD:C9aB@Dn=HQ6Z`?Bl'A4?4Ka@0PU.%24*&L@\,o=aOqfCG)ORbNQK:%"*ZrCPl6NRYPi8`LfV3rrr@UkB[][dl;mob@acF@QL4Fk!gWXM(HIaH$H2"9*-DAJ9is#3`Gi9:pX\o+TCMMq]Wf^*:A3C]Oe+Up8kPOepF4XUQS1!brdJ0CZ(s7;U.;Z'\$c*<="CP7<tfIZV".Nkh*>D=n4.5sE@7)]4Ah%3jV$=&L.TL8XWS]9mQZ&\pUbUGWEn6=]LA+QdJas2D^0MU9k)>*Q7f3IrO2O[6>!e[82@,*89QN"3U,+r/7(f>p,/:OJnQ0\H!-O@.QCm]%.6:UECnVbb#P#!fC\OmBGtTb\l68122f(&4'T^-R,jE0Eba"'jK.&mKXmhRgd>&B^Z9dHrrB6*J#-C-:<WW,b7FIBQhjaiGCGVD0Z<lDrr<a_1Us0:.he^.[\Nj&+NqOrir9#T$*,pf;?$WXA`*H+J,KN#8)cq_iFYT5J)jMVJ*VpiB!tETh@mW1:C?@/f2*tK=<P[?%S^a[6Hf@X/cPh>lMgjDBj*1D92;S/%645%CXIT!k,HU=n#BRJ/?5E]jGf7uG6]UB3T,LAZ0tILKpV`9g]%92_>Z:?W*0-#ceKW:n:-F0Pa9D=:(gTDMB+1lhK>8Hhg/pCBjHu[f4pI8rW#lg`nEkP>!.Ys8LWACAcY0q'mSu`espjj5Pb2/rr*GuVORHIq>5gDrX\OsH/ACS.S3cFI#piDd7VTM+t$gE0p.)cI>ZeGdT[Q>L.5cc3B8Y0M>YIP)uDkqqh+nI$:B;Urr>9&J)A(2VE<8t,)].%J4[-hb_raMZF#:gVHB%CC5m$BbWOHrH'\YN+)&0*`d&M`iWl\.WcNZ&rr>9&J)A(:2thamo`tHn'^n5p-IfV0IDf"'4i=&OgHccFqr0>*ccK3c:/uWqp$;!D9+5jR:@"4"pS#o#['"m*5FjXg>(=lJ+8>8':%bF^rB^G`Ig%4EI>Uc+=hFXMB!Je3bN;6c2fAUca^0XH&aDC@ktR2Tg+.Fk&T3V6q4;(40?-!tP'HYt)s^;qqLeeH$:B5Urr>8[rrCrm8&)L,rRLA1!Re(Z]>@THN`;1j\SS7fiNnZ!cN]*PXjSXBbjLX(,"mb7Vb@jR+,*=*D*R4K+8bg^VY8L<IUW6V^Oi$AH&IuLAbZk?SSF9Y(e.p\2m^TL`uR?QF2r0CW6U`Dj@KqT#`u)C)4\5eEkaMVE(:ntk4[F+IUW6V^OhnmD1Ca2+8bg]]h^?DUY1)!-VUs&4=k@j*31+S1,/r-5m4Vd5*W<T7r5IMEJ[q1ba"Vam?148*grpqgL'dPL]78[6[<JI!'`1;!8h7De9Yje)G/aeD4SGp/8ad`Dt7C?pL>)V`c4nFLu)>8!7/kRpXl@4bA[4PL]7/c/P3R];NrB,R45.Z5Oq!?J(Ld:d\\shht-@KrUq_LRl"%<m`3M5*u;.pCBKIFN*:/Ir^I`m7B"o<V>6\D'N%sQ5tuH(,@ka#YTSSR;lH>t:\[<T4oYLIRt&N,rr<=SLVN$dDtt=+U:'^F5FMK45?=QWMsa%^r#u%\rrA]d^Z9).!/*SSht.5ar/GR@8%,DpcgMCF;>s#Y,8:%frr<RZcmIZ@1k3@aiU?UGg\s[NkbHm3rb(t\eYrKJ,5[LZrr<=SLVN$dDtt;9i=GGPr;pj9!$b]i;=1B51],)Te:3U/aMe)YKKmB3oEi#)N?@YFpj<!k2ZEc>Xh#qSeN]K#iUpqMaM-_EJ&3;dn+m1Ar^O-i=5e!+gIJ`9*B"bil;eL[T`*HRKiidHOndOH>lOe_^Z5W:rr?J52u`kN@AW@kIl$u>lI:<GIE7cS&H;_@J']P"nhbj5+5u\b"P`oF[cjXVWdci%_s5a$OaY<hrr@^:_r((m\,;4-n;$dcrdd!-!0OCp./)1URJl+;C-TeRjC3VU+5u\b"P`oFO8)*?4oYLIRt&N1h%Y3NT?R<(qR%F+?ZIkci=GGPr;pj9!$b#3+oWP_!2*'$jD/Xj4ge)JIs?BFO7Fs7(n^;Qpj<!k2ZEc>U](i)!"XS+-K"AO[m_@lVt3-c5-7?N(YjsFpd=sBrr><RJ&p/u*tN'(D905nY_F$G,C5AhCJKa^X[]DQrpd'Q.(cF]\HN[E=dk$Y;^I];L#m^L74`HB-k1sZ>f;(RdNq0K`I-lq1>=MfSc8Zr`g?]*55L'6!jun<HG@VJDluq9FEFlk2?*X_`g?]*55L'6!js->S8!KE_bg@5^fI5qom`6^f'%TE3a+&&rr@`49E,!`)Me:n[3+n.Bn,`l;#^O2<hnsQJ!Gf?k^PWS=t?'A!/0N.rrAW/L].@_+7Pfb?h;03rrBi8U[%N%Q&!rSIl]Vo/"-D;K]bu-!1k*arW9JLn=8`Mo>:M-rr<('O/ph1<ZbP>r93CG`I9.]8AFYkZTa/EBu9/gXt;LO52mpA=X0Lu)E6qB`l]-JZ]K6soM>6WFKbN#J,]M!X^!NtHYj;6J(UUW]gf<?<gerJ!nQb"0h8tdO2d6]ec&Sk>G:uYoFD,j3j,aHCJ@l4N]:op8(n^a`WT/Jgg57RD@%]$2:,DYSi>(B77=W!<De8MWrN;Vr$PZDr:.Q%!5MX1lLfXlLXt[=3]_"+RK!8?lUh*VSi?ZLp^5N#_KD[S!7)Va!;m"85-J&`=FG(Bo:r1W\Y&XloUks>J,]M!X\&Nm$/UmG!'IIb!:U`%qRp7t@J.2RcAnKRk!.fddXUGFrrE$#2';=Yko]N>qu6WsRZFN"r`1+FU&=-=kcSFp'>5XiH!c'Z1K"/P$0IBM!'II"n/82$]jKl0osu6jNh2-j5N+`Q5Ne=+rW>#]dl^j3C>+9lg\mgYAM++J(#XLS3Y`:>Lt4&7RS$3=h4fcW,G6NpU]1<:bJ3o5rrDm%X#4*YrrA-lhu.PEr<1Y@i^D,OAm^3UjAFAjl\POP[Z+bk6iKLp1]FnFk%eMX<rOAX=e6T-0_A_6L72gN1tH9U)JQ)fBqPScdn4>OJ.U1(.ASd#L72gN1sc:BBr*Y@J/W,2.AiO66VTD7RV2^21t.F@ciP,"V)6Xd#\o?kr/[-cp$4:'X/;k!rrC.9@K-=6ZMsnsg5bXLr^SjoiK*c/q4525;-9A4<OEqE#$q6/f,+GecqRZCg5l/a0)kq;MuNe@-E99C-@ZCY]HR:T,*&)k!*i%c26q"^dBD9A_YtNkalUV@-!9.^1G>(<!!NMu<BPSRB!34\mOiW*$(W8tee4Qj?9q%mO;?&t2ukDL"E8T5,.=OE:3(f%o<HJ*]H^#\HeEjL2[qUp"?n$c"l#])l=f:57!@0T,%="I!-"^'JoF2-n4"t;Y;?=B0!,k++V>G[V;AM'N);cJ#!QE\j,/U]CT$k(1KB7.ohYG9r0aKtVRam.bPqRO>ccl<Z8I.='ZH;k\7!5p%\nZs3:s22M/E7m[!p:0[a2=/Ric>cG5^0:jl8>V`cIaH`BRc`Rf<@Y?Wj;Y:\]+J6Yt0hULARjHLiprUfQ_*OXp7<Aglb^[iGqhJ&As4l["iEfP7I"#$0Fn=-u^eOihRaN,sM8c:><X@nKL$V+SC1%Xs/kVOGZ<ea=SAPGO^)('0?*9nMFo,et?pW#VFYH<#mJ74b>E.\A7rbAb`;5oEpdGPg9o04uk!a6fS']77^6br"!@TmLntQtO!d=p:MQmRam8L/m">!utquOj?s"\C@nm*l75\@p#l].\^WLR2=%Y)&l?+j$(*d;i4Obe]E&l-Z;bNh2RUm2-3_J97'W_Rqit!:n20QPuNgcR`MtO]U%WGmOmU_?9E'<>6,"g8lXdC%RQ6F*dFM":/U-nlc'S!CK#W09jua]aYh7e\(ZSqFWq+>dkP9AAHRFJGeb1Y]m1=VY9i`d^6\J.GU&L6</TSW!$NJkr1r@&:-et!WcVdB^X)h7=I?LGo)A\GACF7?H#bJgRVdc(<E2O.R>=[(1+Jc.E^Z+n`NWR&]Y#F[\3BMlE(D!O&^uVn_GXH)P,fG32uS4scns3Rc)FEQFaYk.@Ps#K0T.REb<(Z75fQP",S$'>Y(qU@8E$">SgE+p^i_hND'(Y@4a83\]iVG1:[7r[nE,4'Vq'OO_Z'VsCDoQ>YG\mc7Co"BMW-T@EO!!,+;-[WB=DX$P4%`gCY9l&l:BsCOi3SEi\Ie?o&Jh:p[-U1)GWYjGer(9Qi=RcL8`f*!6FtErr?B2drTMAGA`I`pCY]i5Bs1G85d6TTQ0OoeXtfYLUlq]QSc%p/<=8a``TYL8-J>U7Rt3X>1SZk\YX^*rr=GG7Mq$)\AHtk0&7HG!&N'%U5J%oJu`WNndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1Q@<c83/j(k^b2n7[YF:h@&lmDQCcVGE9(,B(na7GgO>P&l&u9oh>;N5uFj#!Mi,MaZ,Q@`fQC7aQ>Y"BCZ>3(<C94Pnram!l7F7%G7JU'.)C/X"Z;#Oc4H^OS4GA:HPF#MSTE18%#OBW-F/D6E/]<egh)o\sE,i?s1FXAu(=1ngnYVb9BeKDcfCY&&-sG4$[Jp4bAM/fUR4ONWh+o;u$T#k*5Iu:/J.r%+kE"5`OD1FNK-XN"&]E+CN<6EP/5Ae$\7G.q3'>a_9f+noI6gb_faq@l-)=6TAV`*(T/Wg]A,<I12u5(,he5r0Et!7C[Ub5Z#NH]_&e6TT`c*`&e25WG:.b%/a!u(nH!8RnedsTCU[D[*,g)qZU7h\Y;,rrQO3TN9>hiTu$c08\\Cec@0ED+9kHD"%)JQ(H-.G\S*pCog@[K9GDQ[SJn[eOT\Qt.2%KPoW-RAQ;)b>cSW=8C8,F?Z5@8l8-&41sS_$kQK`d#I9RR9TPQZ2XPlr(U-Rcm$MH"%pH8L$#3_d`lN%!.Rp7Qp$0HZZZPUI)mUO!i3;bZOk?eE336F$"E,TXhVERIP!p"GFam>qBSgPf&="jd<:jfplTEq52q]1!f#2\=PZmc^P7VgA)RK5pJS3<e7-:IaV<.5/nAGLi.(Xl3;u:m;*cA_#ta04i%-K;5Q`jR:Vh$So)*9EWZc`XtThm4H;JQo1_'+jHYhg:,7$,c<Vn^cI1$$cT7f,3rhae8s-Ih&5VOc2B/A>2:V5Fkhs!X2DAMm!$+QlB!.S:VsPec8sC,Y)lOP;en]IT,cJf'H@SIEUq2+pX_,%_6;!2q=/Z73MO;je8s;\'VgJ(c`FZ>dRTkWO,Z$fF2N>95J=mFmT[I4P?Q!QYkXe=H>njbQ$k@&@eN5G[+"TYBemIZGdZ\P*Zi#i"6mEEcIkprLgegKTc?4hAe:6NsGQ.YJ?iL*l2.in(5Oo5prrB2TrrA^\W;K2Sr%,qYO8Ol=DuFYtbgsn=6c2)8d;=7g@0HFc1!:P@=W8K9P?Na\g'@Q[D>sSl>LoQHe<dc@I1BLG,)W,uk-ePs@q=%_A"OP#+7p8Vr67(n[mC#oTV]EcCHl<-q-VooopS+j^@Z61BrlC8bm46"OFCf'pp39d!2-,0RA8Ear`Ah!enG'`3r@=-Br81#i@E9ikU-VtBg:Q+d(ecl#Nf^n2*[B)_=a6]cG&pd)FIX4`EFA^"Q94&+n8<_rr>>E5;Pg7WVisf&$41XFn_Y5dnOAF'^1&=&qfd4f'udoUF0!L"$#Aip,,("rPA/q5L."8CDpogUZ-\8rdmsqFGIg20Du#]r67H9;u'eU+'GB:lgI<BVOGXk-II>,,7!C&Hqg@8!741WcAuI6q-Vo!=eko\mma"JR`td3KU51.!2,98SN$N\9cO(`&H6cu)P>1Oi;1\?k?iNm%5cXEnKs=s!'pm?3be+*O8f2G#_+luNDJYcE.)>Zo<5hGAt!Klpl@rF!2,!0SM^,"8H/[^pjY=fNDJYcE.)>Zo<5hG7]G&?!6FtErr?B2e-Eoq8,WAe_thc'C\q?9!$,4MXNN"r=T]E+>#M1Vh6cm*ObJ,RUnXV0h_ON[H5.,k>fUMU&-sD/60\n2'EMG83lh5ImJd1Tdf0<$+5,40oB1&l!.L:4.a8]5cac0#lrO,2Z2Xfr4+I/"^Yq]VFcZIrg]%92V>gN&ZUGk[\8k*E>PgJ%rd=,5!:SA9!/2NJej&chDuTfdQi&>X'QZIsaWAE>m->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*\tqhHGD'u.)VJ*5,7rr"MF;>m%qrr>6+rrDfXJ&8;77l0QQOmH-JcE[BLT0%Q"oY9?e*\ah)>nYqpU]CDpC2(R01!ncD%<WE3priY%G2N!.dsq"u)I1UuE_!C<rLIHu!'YT+!;G`-_N4'L+8PN;rrBf,rY9%&I*]<C8$Q:q3lh5ImJd1Tdf0<$+5,40oB1&l!.L:4.a8ZK52jU)`Gb,/+8PN;rrBf,rY0ip=T8BIS\P."?gt*Q;9\om,^U9@Z`JZ>cJSX"0DJECSR_["5'Hr+pZ[1EXO0NomMqAU<rUCLrrAZQJ,AlQiCETaO8Sh.rrCrQrr<D473'X`E_!B=q`;dsI-pq6n'_49Kg%R[BO?-fnAaAB;ukFt;W`DFOt32&721Ud.&)5!.C.,:0g)bQUhC,l0u*d529\SN$#]LZVs%4VG+jehl2n$H\Bep";j?s419"Fkg/<:qrr=:CU:IK&8[U5J(,ZX"l"NB@-e,op=O]S(V5s;'o)%&7RJh#iTA9GHaQ]Y+BDrO'8,e4%6iQpc:\[O>+8Qa1&,YU)p(R#ofD13Ql$<6Rr/RA+k!.fRe:6[be3EDuU](ms6iMe16iQpc4bWaIp&8Cm\mBl-rr=:AU:GdK9!o3+(2s3Qn"lfY'"e/DqA+#L!:QbZfMB]Z?fiG7V<@S;niDZtO,G&:nK3AUq)%59YB6hu/bKJeS/f?j;^@<i(u2`eU#ZFq4CYugrXujC!;[J7rrDMaY#iW/J+/mZOtV2?Hp5Ak[iJH::ZIN"fH6A"_L>j<rr=bLh(M"'rrA26p`oZB:C5][ldN5PS_F%>?rq$&Ik$"r"^DI^jS,g3\Sq790>H^S^]+;JQB1f6DnkL>^]+;JQB,H=0>2k&I;YCDh#@Aql=d>%rY"PSqA/Q"!:QbZrY"PSqA/Q"!:QbZfMB]Z?fiG7V<@S;niEd$Q2^i;^A%V\]Dhm.l"NB@0>.;bTl0l1rq]e]K`&RWraGK2?@R%r!$eP=\PMuo00eZ*^Ae2IQB1f70)kq8>e^4<^6Xgg5;0^"R!ik=TA9GHaQhul:];"H^\Sa"^[J"orY$fsqA4(bn"lf3:Wr36jr[g(kP%433m&t:rr@_pli)Umn,)?a`g>]&W9XbebGF"J8Fa'EdZK+ddYC/'?hHcgW_K=<r1Ed*,ns3YSH2:JW/U.2Wf3*f$<jR1rrC+qn,Bi3rdnj\G@=(r2KGV>j,:'!_r9fdkgtb(k^`[5SFl,WMDueNU.%W""]\EM!:23X_B8=sl(@XeIkt:u[]_?2O_g&*/3UsLlR=+6rB1^HRV>JQed"a#RVBd1BE8Q!d[FmC">nS,05i3S:N(.t]HS1\dnMlh<)Q7,!^F9OkDW=U<*urcZL,>oD;,5^"^ELm+Hc^,N9'Xkk-*IM>g(j@m2?1jeHXQu0gO+'4OQs9Ca]:'[,J?S!5[Ubeu@A=9^kFghWB+HP2N&YW$,&:TH'$o!3]a*?EI+jYPirS$.jcP^\+N#UL_hJ<B?('Ac"sKg%LK5ir_BUh_.-=BCu,$,JRBa=t&<sUK/dU^tH5?*HTkliu-l74H_AO7n%jL-BQdcCU+H]IAT!Xk3>#O1p3Kf=4e&.aSLuYa5NSVA8,IRG[;.K;9G%dmug3,:3>S,aer<"4s&;sBr7-D9gP_4RVBd1BE8Q!d[FmC">rZpr^Y-BqXp3O<RXpKrrD,-Yl=^,=b!8b7sF1s!$dsHnAkH(r6F/V.'-1*WnNO3K.d0(l\kcCkU*C]D+FRkQ[e\IrrD[)<?I&25D>M3&H;`m7nip_Xs<b2fencJ&,?pHchcWcRB;ZQ>POBSApA7P_pNp")JQ$)doi.GBr7-D9`Q?41o?^T!fba#c#bS?/eT%ZH#Mh8]j3oLA-*61:-%`WN8>Y:>Bg7W'$V*4qlVNhLeNf=^.e(C:3&'n7[e*]<`.P<8q\L;UF^+T"BNOnBOR>0l3c9s)-7rbfEfM?GO=7Mb=ZPA+Hc(cXW#Ik.?2>M"6Zj)`]`qI[1+t>lH-)V?e1mK_)pEJe,5>iqG"g)dbZJ-rM3]oISO*2B:)0ToZherlVkW427:?tG74+FOehQ,IkYI[T:7u!8a2jn]P47,W@"^_;1a"!S,TPN@mcqA^7<b/g^s[ThF+@WL2FPHY<OI!a#X*68eEhqU3RAC#?F5B&)^%YFXa+C8u/<R%MYTIKafknPg`>mTSAnL9d-/6RR9\]VLT6.)aF-?/3iIO?g1Wd;R6<&On-Eh]k.2.[2n/"r/PSh_]SD=o/hgXU9QaGX(jli%(lN>XtTeTTUN2e[3,2K?2joV(]OK^9iQQe9`>f<pdb<P/MmC9O614gei/83jAOHVl\POP[LH5Ti_.giiP1!U7JR4'%4S0Cbh,9^gJY7[7CkFd_V'qb@k-gmV[#3JC>#argqsVYTj9hR(6Z^MWfM+gUEH:A*_$YB*.ul"[&4'ZrrB1FC=I4WqUL(`ZSo"a5Yt1Rg./i#Y5-Rb?W!$.i7$9RdG]sn\q-T@[RT7A<SOAOmW^j@<a;sMN<7g4&k0D&%M3&Qr?Zo#4WEj=2%Ho<^V5&>XXBZViB(3eK?K[n;tD^)5R3A=<f3,GZdWtE=-?WgkcLWGrr<IB:TJ3<dkj!%KqqVMhFT%o@Gd/@9bkT*$b@3cQ$DC-0]W9rHOtXZ<b's6Zhk6jY1@r`\UV3I9VI7"E^'nG?Wu^GqNB[YOL2>FZ%k:o09hCcqOFN%'eZ+H[Jp5Z@[1eJg9pq\9:)L)/>8(a-+p]TP\)gf<!OJb4Oj00!Y.N[7<<I&dqpX>9?VZdTjnd4("-Yq-p.u*c:Q;;gQ%Q2B)ZA$]9mu*dAc]ANLYFS_keiIe5amqWk#`+lh^D_pQip?[dS2CcJ5L4^gm!WC$Qs6V30;_9'&fn#6]JY&Qr.Y(6D0P[EHS!DfkBOa3<JM:k@C*g,%J)eQN?jUse_5D=6@!m3UDF+X#[Sb`IiGqpTZ!IpQZcrVZZqiOqsAY3iA4dMn"<F?"D5"L$Dt.>`Ce/F<Ra0YGU'UKIV+oc7g/.I?J?o]=Qqjpg0VW54KWKPbWp]5Ir'g7d!YMAqIH-n[+>i`rL7*[Q=?4MO+9+<7!Ndr^kIp"W0O]%_`*rr=iI/Q5HTQ"#@Ael`rd,g+("kRA)<(0><Qg?o97E^XpP,P!^UTO.)ne):5Te)^JE&$r#0oO0dnH/s2FHQJFeS^"RnOeb?_/99Rd+Q>-n`Wk8pa5-Q8%Xi=s.Od9fJ&1\"(ma0QRf<B'd;&QJdE`N]r2ERgN)B;Q4'6V1d/-b$;R-6%O3LK"^/t=77)r@<@3oN.6;C/Acgq^s9dukq-&?<$Qi)o1+8+qQoW*_Gfmh*=@K-=6ZMsnsg5bXLr^SjoiK*c/q45J=;-9A4<OEqE#$q6/f,+GecqRZCg41PF\c<@:07Z6@W]Qqfn?X@V5Op7;TCp-P1Ku39^CU+6cVMn=m-ZHDenARI^frN2c"R+W_J,nI!7/BQrr@SO>nq$PFX5I_Z]>WSU8^RA/XPO?-CS_Brr@_u:B(<dI7+#7!EtT[b>/';T7'*,!!-90qRp7tB"qQDr93#q"g+ja<jCC`X"5ubW3#*b4YfSdML8p3rrCBZU&P+CX[mhJVuHbC^&J*3!jt7$>1VeDorL=Fb`23g21to/$%ANH!'^/W!;HoNTCA1LJ'Yh.!<*&-0<<Y&<ZbP>r92rndo]uHQIp]5[Jp7+!js3AAWQcd?iL,a.oGtc^WOI[F?c<8VQ!@*4L6i@V0*-:Ll2iIrq\s2>0];_Z2XfrC]=D4"_pj.9'h&jgA_0Q!!-8lTiHN5^f&-[jK.P>RqA+)(]G&J0DY=VrrBiHVOnRUJ'YP&!<*'X0<<Y&<^3_5rcE"GBrk7mMa.%2^]+;LAu%U<Zi:#tC]=D4#&6?*=8>sHDMRhYACF7_rrBo1BE%rqfAH?3eDL$mD*R4;qu6WsRZFN"r`1+FU&=-'MV]k).?"gLF!HjeZIf8oYQGn*W=<@0'&%i][J0Y&2'MK9YPe9)J)E+]F=TN6_.'Y773lZ;Brms%8F:oigACmM!Lf5O&h@>bp:gP,^h0G9HG@V?lZ>@^)Q'LdrrC.7@K-=6ZIMbG88Z-)gACmM!LfXSh0m&X[Za-uE081X,-soS;3U[T.FFZ'jK53TN,)lO<99&bGBN_QK1-JU.Gbb970"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70%i;f`~>endstream
|
417 |
+
endobj
|
418 |
+
108 0 obj
|
419 |
+
<< /Contents 161 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.74127609a36f05e363754b7df7d18470 107 0 R /FormXob.a790bb62d3b1e18c00c00cf0a78135df 105 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
420 |
+
/Type /Page >>
|
421 |
+
endobj
|
422 |
+
109 0 obj
|
423 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 405 /Length 43520 /Subtype /Image
|
424 |
+
/Type /XObject /Width 790 >>
|
425 |
+
stream
|
426 |
+
Gb"-6#?2DpSu@#!Xo%OtpV&TTc8g*cR<7ndF6:]73HO<u##K?;#u)*K1SA4R.gUq3Pb]Kh0r(IP634oQW.:TbJq0#*cET0ro@qgOjD"f4)Y!L'hcfHNWkE3"Y1gS(g/YM#3<0$Zzz!!(4VhN8Tt+<VdL+<VdL#QkJB!WiE)!WiF4[K-R9!<E3%!<E3UgAlkXJ:N0#J:N0;D1Fo<5X7S"5X7TY2Sbt.+<VdL+<Ve=)dlJR&.fBa&.fDZNGgPMQj9hZBTrFkX-]&DI'.!;8`au=;+/Y+ebih1qeis7;u-48gm&b"41TiUgC0ps?2B;mrU3aljRRlWHbSMUqVEbAP04^hO8NTpc<%;>?,'4_bn/([@Tr35X)lhj0t4?7BPo:o%JZefJ:N0#J:LbgnP+($Qc!mkQmqKQHflONnP\kW4rO@im_O1Mq0X#YjOKHnDiup64oWqUONU'UV5]mOP$bm^Fm`H@-T!6D$d"7onfK0tcb/MVP3#q`&Pk#l<Sr:j'`(PsS5DXZam"u3q/oI7^?H1O+<VdL+;T<OgJbb;=5UG1B;-05Nk+?oSWM8IQcj[s?G.DN<S,3PaQ6lC?esbSf6p,qJPtA`,aNKi?3FS*8T1DEV.^Ap0"(@@iXN8SG>(=iBeNDDmoRBoHiN.bEX]_;,ug,6ZFl&EONJl.cHfQF?1O#g(7j:6a-VZ#*I.gr2"_(7QV`Rj%cuRi/#j`^n@+_JJ%(pkQOfF\*1Cn9a+u56*I/stBk\eZL`/k/mOuYkk<EQTpQ++TDarJ;CN!Oi4?A%gVJ^C9RIr^*WEdBAs'2G.];*hcM+c,7*]\qkjt!\Q&)YV^l"4mGE\W>IOn\Kmo]5k(,W,nhP1EDt"eEOT$*U-%_pe0?VF3$Tm`e=(8C>oh<)#\/k^*t`CMXJqlL'JSA(7ocQ\q4fY5(6_!<E3%!AQIGnNEhLptMoapg[pn^2i^h?B8>DC3^\g<5Xklg5E8?V.Ac]8`ZE,$aH`%=t]#dp%n(34#b$^d9t-Jc$0qB5<H'N];"6*Z)ET[$&+@\An/ZX9?HY'pdiU9:6(:GEc0@$HhT2Sp*8bcH$^ps0()0frlUI<Dr,RAjkjTFhb`H7K,QbECPN0GJ*Rc28l9L1.MH_-8P`7>AX0ikQW3QQ=UfSX?M5H7#`Q92$(iZh\in<`Cu`]q$u/+pSAap8]Ol7tW$OCjh)cCELS#kngRC.jZPo8,4CR*!UD)sC(cNkRD!9'MRn9U8\Cr^=11Tb82MtJS6?%*WikeU:n;;@:]RK$U^hA.6&F>GH\;i]r\5Wa[36Z/(5X7S"/BmlYK8R<d,c(g(!9<\2W*CSjK$r_LZ)*rs7E?nAnLAB`IS'67j9eGZ<6SZ>(]tetTAEkbH3KpnMS'W7s5a0kcQDJ":g%gFm=fV]nWZt;H3dTFcR;L@:6*C]j#4Y#1!X"^721GQ*4tl-\%K;FUAEoJbcm3GYso/e!H(^??YJI.C*mM@eY#BmLoBm26f0#ai"modoSJFrMc(7`<#5_&:Ci`D-Q1F0\t+;&WZrp;LmR.Kj't<95u#Soa=m7$3RY_"XMDp#-P`QA9@>]1T''!8EptYi&gs7_KgGClcPE_&Pd$:djPRT7*I[Z"g,$3!p)NVU)?1Chj:IJ!M09\`GA8EG?R!'\Ls@um>6P$.!<KGjj-pM#4#XL.M[%D^qI+d(4+H\`q+@G^bfj9mn1j\&S`Ao&7kg^!Y!uas\TIIEqW#G]WZEKNh8?;**..3h;@W11:.OE(f5KQon1je;LdBFG*hkC=2nj5r0h*[P6<oq1O3t[#57K*$i^?tZ9Nc(Yh1^tMJ,BrK+dc,iKX)[lXQ,6qW0rnG<J)2Q,,341%8'a&E!bDP.9@-(#+rLa13qDS3?XGWq]9)lR"Li,[to7XZ#\i(FZVWiQ>$cmE<34!77r1NXhW;W3a^_6M7aJo$*@XK\p;7V3oMgI)7Kg@#f<q.UGSqG#mPO,BQm($RTR\].n#^2d2<1AJq/B%J68K7m04;N-+[4Oc40.S53a/:gk_2Pf3WJV/[ke@OR0"=,>[k+hVD2G*HWX3T.=?:B;J&Q8^B``Y.4GmKr`Vre-E0&p"$BPDl_9)/nhaOnk;PVo&t=US7)\Q3`^FmiNolqmPI`0HnK'@j)[@pGEO^fZjPmS%;PTJ:,Sut,9j;'i[LI`;ZGbLqn)qYg*b=3;=t9PcU[gTCrndO28u48f'VZAHmVQWX\XHF+hq)Hp_7XEQ>m+OdI/Dg%6:aP48[k"HFcd&lcOWpA4$70C/DhRk]82Z:!pTa+5].@nfH:hU>6D]1?eqhV*]FH_4Vnn+<VdBApfA"iA3@oppS]EG^MOUIm#d'^2$grPO\P)Wup64jtk[L0)D)6ISr8KOsjq$(nGR[mp5fscRp8:bXg,BbIZ%C4d:9[ZC:=UC3Woj8KU_PB"(fAGK\M9/RHs"o,g#-,.W@go]9Rc^NtO$8X\iQMR`6PS)ho<RM=4epm^=tn,#oU>J.JP`CsN0;Ju8(Y="FlB<iHQpbJ7f<`r<n<Jejl%16)[345QfO2[H\G+_gq4rJd4I)ZAejoD.i*n95JOkoa!<5Rjgj93(>5*&*u$5aH["9\kG,)YhD.#>DD^KYt0bq16\3S+n9h"oALPfoLODYe%X<Y,fR&.fBa?r.4lcJEnEhFGV!JE/Ht]=me&l*Hh]&d/=?"9\i1(_d)U"9\i1"N9X/$jm%;!WiE)!b/S="pG#.!<E3%!AW=/K7\W(J:N0#J=(2(5s[b$5X7S"5g2.9),qUVz!2,'\$q^X&z!)*D%$31&+!!$E8J3a29zbSDl\z!.``("pFu,!!!!Q>JQm3z!+lTU'EA+5!!'fN!J:FRzQn;]Bz!!'>/$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&!X8f.z0O)>cz!!$U=(_crM!!!#7D#'b/`>:G(@U/g_jk,&(3q9sunbY:/N,PkdYh>QcI@SX\joTu7Jfa?DjclP?2t^LgE6:ecL/CGt>XJJk!!!!U_2gE$el,'-D]$IT6@h\GD<&=\Tq'oWj*Y@U(5+tnZ5B;8bj&RJXos@Y!!!"LT9^R5:lL2%j1f._;cFjLp"Y^C!fg)&AFPM$d3F*-%Jq[@q9A79Himg3?>APIk090uo7*Q*RLRmAi`UqVrWbC9l+`p`r"J,i8rCKY`f&!<<iOEZOV[I+9)-0JPFSQ`]D:6E\dA8D\,V?Z[RTe<-cfX`\bScE+KAPe:?i^0`n=]t6N3O)rdPF^r#$eYO4E%)cehD(rtQj@0<(:]Ek:M0nHMFlhjGQDz!/lgYBi%,C^Y"0^r4c-=9GpWXfi=YuI)Y+=K=%R?>T-*X*#;LiV4QD_j!\0ln@oIBdmPCoTMU\i/k-sK:9p(0E[.KS.:SW`mehAZEa")>aR2J[[>E@&(U:##M17;q2U7slhM0:TEqhN0kPh&U2agoUQCX7jIi`L*Mg0%Mq\:>TM`o,r2X[5m3H;V77Jo@K#:iEb5((P9M@o9#k!oj\!!!#7U>s;/8^8Cl1dC-8q1TFPk<ikmnlWg-b^UKkqDZn[^VqGW+"/</m!^ST&uS]`,Ac1)NV)E*f_h(cTVgd"h`)6,HW$c6K:8<YR%NmRlI/("p.jKOF&3-[+m[?:Z.bS^XoPhda5IS2X9Das(JgGrAPdLJMgqTfrh+QPMXuQ?pA<f$p.3..pT(01Jnfd.)Zp'?!!&ZpI[i\1K_>>'B?u:,Y?Z-A=:tQd]s=.-lCTN7SuEJ5BS)pa[#O'jQESGh<,!+4m=.ushlB]Z#tBm%TKK2d7^fC@TL=c'`LE%haoA5%.2XcWs2bHkipa;R6qp;:V>Z_R\d[g8EQ+#*NP=4*C/E6+2pS)%)57)Kl51Qs.)Pq_.@d'bZY<nLz('[!D%]VIXG3h/HGF8L:9>p/VQg^gUrBW/>Z^Vl?Ek%f1,\6H:N@83V4>sH;i"+#J>rfT?&\!>gk\l_^nO,MfW5jlWK3T#'Klc^4WZLO>A/>Rl4B,,*3;)(fIi&NbA5FJti!"GZ^X9o?fE:mUiee<b'N`rF8I]b'F:F*%"8iZT9%Z%L99hdTms!na%0-A.!5P>hLH`];$>MpGkPpPTn7P+Ds+2/)a!u#G-Xh[-IXqakjKBsT^S[N,bAJ8IVg>@90_pE,kn/D43VflNLZZ`>.$:0\qb3W.r7BH>e]a@aWFsa!'M8i*EZD&%s+:sX#C:t;j_TU#5I#gWDU.qT3YZd2p%Au+`<ZkZm;Ig\@1t6jf9EMSUL&(U[k"m,H]st5^U#n7z!#?GFknc42S`a-9RJ:\L#T<Qas.J.q2>'J0QI:3_zckJ^kTS<OI%,r48Nm90UzF2q1IK)u#Q!!!"d+2FNLz!+lTU'EA+5!!'fN!J:FRzQn;]Bz!!'>/$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&ncK>Yf6Z0hRu#P<L>&\=%'thoiXk82p>j3gDEh:J*5ATNL?!qb[*:N6Vq!TRrm3T$+`glTY9E+U\.6E8:OHbK=A#]C*$)8)XgOj_NkXVD>nPC$e0!0N@CZ1!^4<;YnN.<kI_+LQdFLj8fh-[Ul`S]4)HcV0$gRZ`qeeG)<uT*WVhMeGpb`8I:O308Z%#eGOJUFf#*+LFI`g@kU67\:+p]+\)djF$dN?0d<j''b4Q4'M&I]F[nStli2)956E2/(9:qpss-<au$`5-:#`nK'#"4toTTm:?L!!%PAOWSL<cDU+WX%:L<+0(r.70Gb&DA]6pW,Sb&Bt6^kjWl//4RIt91JZPk\3rca.HERk9cGR/P&U;<n\DUC5Qh9;A<rg0>%R)FYHXSC'+3B?V>#D^%<eTBcK,U-II42H-%0`KTGLLI]FE-`T@D<m+p#=Qj/%aHQJl1QdhFMQ#R4W'dC5,U;\sUg[&p<W*d)p:mKXTYP_T,P3-?#WD,6E1mp=B8d`9cn[]lCAC4-h5CN120*Q!M?#\c_?SFl.M++A%%E1$#]RCO>Qq@!?(!:\hBE._?YQ/9reTRW'F'6+s]%#Wg8lI7^"D>\R(L&'<@2a'8u_e&D[*VdX]^(HW,)UtecDu5nq-CrRbEnsFt_]5g;U=%o"L%#u1Nrn-2=(7PW`J21H9%m>MA_LmcP[8K$4"$XPB+01o[_OTQI8@KN+p$(tKT)qL_eTZ^kh,;eI4<6`U-T*s;E!iCa&EP0m8uV*::U/-OY%3O)P;\"Yr4Bs1U2$`RTN,t-rs[1lYL3H9<ogi7V6f76m@*[LTB:tSX^[9/Br#o@c$jSc&`%[P5TtCG\hQ.ZuA0Un(C^5/K<<(/_:t8mppW,pTm/N2fh.[El?F[K.hH6fg_7R<M.sH3R;c8=[FAK(A?p,'q.3j0[pl`qoW*ZK,TA>(hdM&<2=P@k,1HPS&gIqJh4g9+kCg#5&1RL/-BorMe:TgG2u$,Hem8VGHrC\31iF63'5?QqZ1TcVWO0sHi;b/*QK+`J6EZQB'L0'EDV1X`1uYC%?-7)X>Yh^B0I]8Mt%82_jFV?iX.A(*B)F=c6(M_6#YIh*V1<Kh&T0`*HjoeDP(m3_8n]GZ7/4&.>N5&Z\`#iPBc%gJR-B%FIgt=B`J,5!'c^YI#;Qsm]T+iMHY(L-eWCX`E/Zq4S1PM0W4[]0!"qVPT>Km]AIpAeN`oD5NO=8VF03iisYk)K)Ls$q?@=[bqSP0kFUes4cA"'&i0nIq:a'Bo[W)C>8'/]Yuu<fe44"\i&`b6$L's*@95oCCXRAfq<2s)lumd1CqN%gnp\tD3a+p.gG<(HmGr4AYEpaRE]UN.X[jT]/4&0Wbm*T3qs^/)\U#[bGmBC/)s=I\U6(+aFC*_8of?l+[jj5S*$_)ZA-mql06aM5*3W>8,W43*`8P/gLL@,M38F/up_mFT'Bec^Vli5+W>SYt3DsKddhG"E>,$WfJ'a_>=L*e04+%B(30\j,Cu+JZ3`-Z':aTj/'hgfHh)"(LYup.5Yl`%.TK?_CY3VW:^5,o)6F&`OU32jLW-aIU*V--pS]]36?>mCQ7N%@2+epI<b02rDQHJA"<SZJCCifF\PMf])2D!fq&lq7CA.Nd(oWuT`"fL=f[qB)@eIZMhnl`JdY1(AD0o+bthd($WrBY`!$AVr*e(sq<J4m7GAYt(YXCDa`1!J!aSXYeEJJgWKY?^u*!!'eno>;#0bO+lD*!Pdq2:;Y<.O#KZ>7-rLS.G44[mi=G`lHJ/1X/k2'jK]S?eu9s_6E$:UN66%Ah^)8KO&cLI"DeZF1p6^p2UJ;ro'9l&4H<hoQKX2X"E?*V!lpQ$R8(Se+!I#E%gSO]<2u_'Vl9D:>J@N8I"j:T<<n5M2bp$`=?0R<jUfij]CfR'rKQj$>_7&NORb[j`+KGGSt7#DXn:LSG^)e3Kkd0mO3OPFSg)XYkJ@>ATkTQTY[(-U"g*T.b`J5\8q>OZ1auTdUBNoRs<H6cWM^K,J9Ri[F[frU'fBfe22kT]9_#5FAV"u^i.!&_.6WeJ3_JFk$d\ChT$e`JdffM1:1"8FZ8nMYpP0k.C'AKL0Kkf<c^7.k8gXU5:^@H=eAJlN?"VQZ;msP=U=i!34#.?(p]mp'JKms9Za5$K)M\fQFP4.(&1tqTk<]=F,h?S<mapX`d#-Il#4`^j:X%DSQssC**6U:JV2+<[N9_J#m(81!&/WpE.cTqT>qeXE(!,Eq`Y3g+fX+6l:/qVBEs5t%$/JjJ&,*:>(,lb'2RN=]F5Od4h1ZE1.;(5+iBq)9ead$T70)/e_T(H4Q4s*rU"b[V77?H(6?P][+3/*MHtRW]cu4RXnS:SToa4Hr/UZqTN6=gMW$J53D;7XI`DOL*V/u.##oQ\Bp./Sr6bs`K7,a:jY?kCVe_BrPQQ))`S9ISiHsp5/->FBZqi'kL9AS"50S9OV'9Ea&NNm+$T@'Z`;klS`f:b1)#\G]+>bJI[G\.dR<N.ZGHn3pg8s0,L5MeDdS<pTri!ob?6pH;'L(nfC7UfG)?YI,b%s^KCZFgTUa,\W+bq`Z1+8='q9`fDAXeXUOn=f9Ni0*"Ro+gdF\g(OoJ3d6q2$Ft*/N.45o'0afI5Y8S%)goE5\CTlV(7Yd1c_jMNf(%PmkXR&Q1Bnlabm<(fMKO<!F:?HUf.0\QXc9)(&ZL<ao.Y7NI8b%Ib&B!!$CjQnO*gng,2uT4@>9.J8brl_Agg_k3;?iF)KtUa@_AWOXUUIhFZrT[8eUF:3R-8pb2c(EX**dhgHfrVj#EL?\0>R$!SWcj7P5_`uK6.@rSQ@P^['g1-Mq[aTfKM(mO3e\ar=EXDHVWP+++\2cU`..<b"))h:bEdD`4UQ3<E)d29><">8G?2NU>#q$bAl12[:iE!#8/f4/!"RN!RG?qQ8T:"E"gRBa<Vr991$i8>])nOjDX?:.%g+sbAN8o%n*&>Mb:04[7Al/,i?&!5gh1BXeFkp'Pm(i"Lc%BgrB;dO@_I^-mKj"tqiJN8ZHOA2#DW_DBZ%lTAC/DfAJqKNInr//cCY+YXNfGh$9-MM7cChnF9ubV?U0s.<hpWpLJDKoKcs2Jkr]MZY=5#8oX5FLf!PRuUV3t+O/WJ)O<^,/QBGO^kR(D/br^ap>esY0`VEDg:/j3pJ^&CJ9K?rt1J(E.hP@BhQZ.T+]L]hdkR7g4[&"D,G3eV;iPXcIE#T&LEU_SQG<]Pq"0CNKZKUeY!l2d9+!WW4f/*>$JWYk-L!nZ@K#O+>:o(OiRYk8OR*B11nWP?\M9Zpt5@Zj<NAV*5,O2S33iq[sW#M<B8KL;qhGg+EQ[FR*#-a/VeP?qXgD7(SrhM!+c>J92k2ih6k'sEAZR:<a(5dV?dE9l9E7lQm<d'7['%UHhclE;)PCS&Neg#Zh@^C8RL+`BISo;i9@!<nFNjPq12$k/+(9jIT/b#NACa6g2l1,QHdgUeK;O7pA+Ii@Nc@Vi_ih1f4of-6`EpLFa?^LC$PNg0L.g8iiG22k:^n9X]cI+MTdi"$q&8aH)@<PH;nn&pRCC8#9R8`"hG2UHHgpDOb)5u!)4'5NNOiS?ERW@,hDIL^,dD)2)%L)X%m2qs^g=ZGh1]$k-:hr=1<TBn9h5FOCLVc>i=ZHh7Pf[RdS4_XJir^lu-CY657WHBPj^m$e"nNT0]E7i]?hpBa"@F(ctV<orEr:CF4PHs!3X@RPuJaR8YWu[O"<.>NH\8_A"g[kE%mlE7qA]qFim<7<aqmKklz^(1(8-3,SB3/tBXhl$eO!<<+%k^Yr"^]K,>SX3J6op7E7!!%P'"rJ$Sz^ha%(!WW3#!!&B<?r-h'zZfME1eE?*8#RC\A#RC]l72d($-m8Qj!!!#7,"1Gq7AnVR@W?$n-R@gu;-@4c)Hl+NJ-7-j(I/$7cjQ.A6K89X&/ns`-^;;6j4/Y_,bPr=!YWifQ<6K6#)0'CUX:>"#peXWU$OWTY6H6p!PJIGOFUZA`"EtI-n:L>WmTAI"c9c\.!prnWrWMt5VIWj,bPr)Z%U++$<<k5]3AD[8Gqt1ZI`d&)N]IPoE%QK!d_Zq95*+RH?smlL5&NQ+>F[hd@&`ljm$.hQ%oJf1tW0Y!K!Y;q#4SR\,_OuTd;O5:s*PFp@]!h(1"/`0T2$E*lX;6`YWu'@4QLHf(=o<oA^Ki-%Uf<JR;1(h!IFl$"^:X>LHMtbmBkmgV_%iZ;>%)chD:SGe!:hOfc>NgBe7(H[E[Jdm%"uXRY>&"=1^p(\IEEIlLks@0Snk>6`If?='Q6[X*EH9Cl/;"=3-3(FTsaq;G@f(a)91[B#V#AF.^[9M\`18%7_s.=?)NgQ<"?]^Oo&1W9b4B!s7Pj3ha1is(4;dFZu/3&l`.`sO&nO[;LgnF.`@)8<]7$BM"&J\c?\r9shNb?#cAnGg_(]3T)*U$OXH9*X+>hEJJmlUHi"!J[!aLlG2$\=_NlmB1`*E:mglYFr3U_A^nWOi&FqYj;6b]^KC=CAbRa!Jta`"bVH_b1!6_h1K9,.BBq]j(#S&VX*uV<V'4E"=3-3(FTo5mt4:JGLAs9hf^DL[D1S1$8W3=h`eVk:Jmo>VR?(g1KktBpiPhBr6*gN"`dk:9k`=TqYU-p"pRnP:njjI`ZBQ-Kn&G-(gn']k[E1,P)Jl`m'P9^Ygk#&$b<Z.rU$f8aYi\B@AgfU55%?eph$jtkiAp$Esm;!h(p/c%_dbOL2X82lOf7cf/peIEnh3^fmR\GZbD`kJa;hR[7K$JHg9$TDR.X?[G)?1\k*hs%"-O\5L<X762eMMeFLU\Fg32]B5T*"l=l9"^bD+E<IN"9SOtc^GS=toR[Dg!g+p&j3VZR=^2J2,`fCK?OSGDRd#i\1<-b0!Sh96mXGOC&<r_a%I:0S[W'4g@oR3W*_Fi^j!dts:ng#e_[qT9ZiE*lSRq](7gD>&]gs'BK14>LNbeB\Jr`4EKI:2]p/`tcu%_cSZ"QF2+f,[G^mN!GF7Ugf<dD8L=GM)/]E/OGC\IdI"&jJa8GV!NTIDc\$^$QXT#'G?8S,2VSMG)Ikq"ofg/*jPrK>"adS0=lO"ck3\a1J+h-P?=Uh:655?;?6uZrU=I$-hhTLWGLbLQ!oc1uR*RBe;,_$VIJa>l_o/GDV#]:h$[H<<c7gRUYZG6Ck4:ZLFh:,Z)V[FgZ%HhFW3`(gr6'hXdP*JY-1@BChPP-a0,5[_Z!\\m*mUPAnIh.lakjf9!Q_D',48qtu0Zg>;!EV>]d)6O_H$TCfiGrA`4-kF5h)qO99gcpG?32j30]\LtoV"91=II=kZ-eF2^?H2#+-W\0HfZI_cQ`@Es,)VX:M[qZYi'N_&^=`pi"O.mR+kAr<AWC2aA?J0O))F#iF5iR-:!AZ'E9R#6rD6'oVgE&67L05XO.U\+fZdJN-EG-eJ@%[rf-rLJbSPp@>ApsSk@Fc<<Mhd_s5K_//9?&[?R%j"t7a;L_g*_#3([VoP?WMV8AV8Q'2tDW#4&P=E^$&[3Q,eU5pR[[n/Vs+O`6XMf)@QD?3<rTYDuNfQmsOUp5*,"*d&M9e&iK6:hJ\(L=EcBi,oloIm#/l;[Fb"62>&/G6FY_55.]dl.F]As4AT:A$f-@<<;W'"Y5[D+a&,`Qf?LUUp\98SJ"`.2q.$&/KZ4J$Vl-GtZ*D$W?BM203Fds]lGU"CDZah+m_o";k`((%a#Z?WoAcB&kfYTR\ZrE5pq^iqol<uD&&30W"VhJHBbRtb3g!S9'U?%QgS=?9qQd$RQX_@t?W:(fT<uJB2Vom^6i0RJ>`%\eaD,F7\pp/sNRi'2-'Z)Tb,X1)VlZ"H>q2dS/ua0UB8GgJ]Palt'5EA<D,!CP&iAb6kJ"s'hChYT21AelJAh3SK!okh-Kn&sah#2p3OX8"n\$:%WdUi]NTKq(DsWfs<F9,0`+(f>*q[%D^+jK*(Ad%3W9e5ElFm>KgR$LHe"!jZ2.kd;e^@Bf\-]9#riWB.+phWBo=D6413GNZli4VTTG&'<lp0GX]2L4:hCOc`W=f>D6$N"hbq$$K4&\aennrdsZ!V^MXKJh5%)51F/9aackX$4iAVH4"X\FXc(p._)He8VsS[=PBr/&D(p`_PRG(5Bj62(em`>qt)IF*N1q%RD?GdqTNAfC<I>4]cuG6s6J<)Z^/b)#>X9QZM(5kfGVlWnV;e[pu/V<hNB`;!YQ@pScjddkESVP_dPFE1(d^T(/lC+mlB'ldobS)nZ!e)#702e,(`VqcTr\@/<AiF?;AF^89GQG3Isc:]bTl"NoKV1TZ_kHq\XRXhs(Y3^%@W_>mJADm?t]'Afep=1suWf&'plnq^B<IK`oVWr9^6]H+X\O);L5HCe`oot?F]!@Z$)H5=5p8+$gr4!jMM=9[426RK/A%Lli!SpE$.0kc2]2M>f=u(O!Ygn(AQ_D5AIP$;B#NiGe<'3R/7#EV`BW?Hm>oSb0mqS;ke'JO?rk6_Ojo._$bi[Ee]"6=ch:e7<O]N9?jdEjZR(i<YEe7'9r*m,FAeOU-6K?;lM4Z7P[21Y6??Oeeph*%VW41="9,,ipG'@&KR2gNZ>$KVX0`mth\G$0gWm3l=gSjSjAHuE^K=YEBL=+#%='Y5dW4_tII*)NHAQPT)OKj!EAfQn=Y5)S"]7e05$K^R@mVZo[<[A[TU[8eo;Km'-Q^Z(omOPR(N^p5uS_Jh3SG^i.)q33V2*:Z?U:\&!Fg0n@ICGU,\ZZYDbV3l3mBWJ@>LE-s-goiPgjlgtqRWpmh+&QXmT4'4<OaTJ*.(]7<;P8%&CVg.`':sP[L$4ipikQdq\iPR7?p^CROP;khac=,R,dkF:?@Y)2_$\"s)\aC"SBD"luR6iPfBeMl#3M8b_:(fOFY8.oR_r:!N,WD6Zl[OC"@83KgG+KB^2aM+(:/3s20%&h`9YKDTaRtZg4'FNcb,G4`[?(\0J[VNqE1@dZNf5;R^CLf&>:^h+d,q[;e-?m;@B%5S)?$T@r![[1cQ:HD15Ai:j>lD\bnA</E';T]$nTef*tjoEb!R=k]-h7d,^?cYHNcU;hb&le[:t@p2VDMq]3A,11pLFX004A)55nG'3U:Io?b3Fq9Um%<=Bm!d,j%ZE?42cTj4LFE][?.AeZQ[V5Zmk:WHJK0n+%BkaQKXW9u4IE$+>#ukpi>1-N9G^L/r=)5@Oo?L9KF^<hRBjTMNmiSoV<PbG/*[H-IEOgYD_>*c4c*^OnT:XhQ[9@@VOji0Sb_kPKZ6on($/PWoVREoIs*4b-_p?M@]0#=b`uWi@\oJP-j5>)j`HU->p,0"-M^b@d2,dO5A=pf4ia"!J;D+ph;59Gg2^d5B@9U\*DjOF!D9QVtNE(tK:_"$LOSFQ:d$bV]Jko+-ia7?".=:`M61'#&h,7IBT+p4Z^MJVog4S?G%5@Ae0.Ud-*3!tsOj]@:V0hMY^Gi/6D:ZQp;$H>=eZ$\/Wk+K7r8F2tmu*X#WS^7C8NV#Jo:W0GNAh4jI]C?I?;Qc`ptPONFG263<+^p?+X9%4;1N#JVFOtEeU4s;(Om?fpo3U[oEK_;bK0X.IZs>G)tfc)VDhS)f3@KS@B1q;*l!ns:GpY732i@QBPFGH:0G64ebl\u>sdQUe_8`WX:HT=,,+?\)Qs>j+9B.U&s.WMYf%.m2lN16R]`fr[^J(bbXFkOCG]?,83d6&!@/cg]jQ[C1i?-\SXo08mAN41R#?X'f4_f8OFRK+!_>QXHGL4eB\]6r66e&?KX03C]Gcl^"S;ad5QZ8J&kconTW5&n4$#E!9cu/,M:#Y95jAFX83ehY"=0WV/<,>&%18J$Pe@8$IV,5h!!)YC\NmJ*V626)8(#iCU$4$,J;/V]!!(@RjoR68V%*&8!.\AU!72,9!\gRL%J1P=J6i3UcjSt;0W:fWoGR^[?2suP$g%LEW20sq)?>:o!!(@RjoR68V%*&8!.\AU!72,9!\gRL%J1P=J6i3UcjSufKk!q7qQ$a!>T`T/7M^flm]BX"jX!VZQcHkjRFH#FOb',92.MDD>-XA3Z;)fEI$-5'q&AO+^S1l2"Z:HJYF@P\TsRUWnpC5fdBC8m@H(W&"oOc<c::IqrZmUaLTiE1Q5]>'Zo\jDY#M[fHnCS&-,gqtn6]$ZISIMe?U,;(d.RR-!g@uIctQ[VOaoN=1Kgh?j]nm_09d73XQg][5h<?8(3rG%rW2[s>_#*lD8;eEJC's""(rK[s5-YWb+N9NhR"sQrZGDt*>TIG;:##o7JL?F?kPQhDicEq7L_sp`JOR7]8JVA\D^uL.?)a(0,$5M;L_2bpf]#6a+]K<N"[_Pr>`A,--lK7j[PCIH8I=<)&e`EfILAajV#.heh<N_<<NN6TFFN5COLYPX,X[#\V\jk^nb-l]'nW[K\;H8I9d;)XH'shGhS1*.+I!mb8Ml=f:rj_>k?d_Bg(.l2<\VDQoM^Bq;p<o(Ga[(A4>>rrO.34T))S,'JqSL6m464?68uq!N/&A(,fVu[+Bp+2V!U<G`!:%/EEQ??'oBQ/p]0qoFGF9`Oa;"r&_n=,?i`<B^u'')SVcD_23Iu?KEb+Vs1-^iVY9lF44:Ns+f&]-kl?51B*Q-Qj!Np9O^HqKabV%.m<f3e<%G@?J3<dBB'B1H/./(U.,'AHKt6`(MQd(@`#RhSItPhe?H]^`q]lW,2Aj.b_PY#;+(>Q&o#7#UFAgq8A=G!7/SVor3*(9[dnb6H!Pg@W"$YR[HSM,SJGeQBc<G4_k/.hQ9eqX:^ldiR^5bLV`tZJA26GX:(W6r<lW#^G>jHJZ%ab@$G"\!jsXNYPK@L+?7R_-\2ojbjnkH,?>1/fAX?;dD_^`PVb#o)G/^l,@2ZaOF*&c`-tm/L-Y)`"+mfjereXe-.N;>(aJ;<@i`?&L^SO)A2spm?,>&k1.+piol^A'nLE^5XiBR,_jm3;Y==hR$7_LnC/Y"*+EEtb43+!'@bmI8;ac<*CWYja4LSoC4'P:`L10LXo2;EoC8!cjsifD[?1C$<7WUu)i-13B<mJI$'i\!E#,jXuqL"c*Dkt%X=)&OseNO3ak2;mqYl["[NM=XeI0&;V`YPg)'>4aI7(@lpgUtVAcHC%0Y)\hu7^N$i>n`S<=qNTWR''[';_iJA;)&2W5Lo;WF!F&uEA#I,nb/eh^K.\ksgo[Zp/+EF#\Y)!8A.__":TFlgcIuD*Qf1MEj$a2N=N)t&G#?;T>t3OKRse&OV<55q0BR=8*Aa:>Jjos1//*@2?h2$lT(3kL_lMp=`Z#VqLjSG0W->C:7,qp"-5b58\7pm8J)XA9P.^fN6#9:5$95ou=t#ZDm%B):o@gce_KK@J.5a.OnH]a-`gD<Cn\m/2:JE?=?!Y<kXK[35oEjTC9?`Lt7_S04cFtnN@%^@ano4j+rgWF@"S\XS4%5%-:=ef"Mt@[@L#P%@(cqL4g6phIiZBVC#!Anp[d*KKeWubQBi0X%os;EP?r4_;94WZ^nqNEfV4<*#\j2-KO,t>72C`UQd,8e75$*ep';E=69KH=5O83I.G=7'FM_I6,8&7I8qpar0p5sJKJj'Vsaa*=m)\b+aY[j0K$cEdMR/\p`oY4<+s#]>@EmhsdcbR<6AX#9oOakW#q+<-)<5<a2P01Aq\OE,j1K<./`X+4<9e<?RTNo&cp2DTm(E+O\CS=Sqk$KPDY>h'NpRJ4]dZ897?u[tIK?EuPE<_]G$N2Qg7reP[l5%uXk<?/I"oeI>e"@uL:LaSTm#k2#A=[6!6-4G#BkMh3,(V`FpQXDc<1?I7V2QSICW=+D[05?X=ptT]kE__aXkjUj4=HF$g6+R@c%A6%Aj3`rM6`%#mVK>cqlCU%Ya"^!VpU6S4d3W<QNT*o%gj3m=K8=u47;W[;!]R2;uar8dS(q^';+9,r^&cVK%n2+MqWk<[4%Bfj+!!-:1f7\#H+8"->XHnrLT=<M(@/)/X/,2UP>la0LTq1;uCnMp%0:;4N@ON18Cal/N]oiC\W;d\V):^Yb?_sM"j;.hJ2>Xg\=2ilfVXTTCe1]Z;,=AQm9A<Kg3OLruL3%Z@p#djKeK-e0&U'992cdP8"j4_RGF+?r3;:P?c7E8.FEdBjbUbBY*?Q]kZ(jc8-Hq$+!9mV)S*0(`AdsffO"0r(uqCo+GRLDj!I4"&"jr(_fc9rf:PR:k0b:PWs?%:4.qS^MUTN*qgD7OPeE&"Uj#+!C/'8p19cn'd`(iWAfDt4R'L2PgMqq)sO8L6Oii+otiU.Z9&&R#_>:$^Yf4n@CV:AQSHD^>Nk%\VM>%4/^@;fRi^>qgk7mgKE$rIo`og&758/,GC`QEkU6CnHKJ"^7jj#.iX&pJ@Sli37GI&S'gK!DDEY1=j@sYK-mIRc2&@D).r#%a]`8&*(X*%j:eMbk2#o>0(JL33>.UE,eclm:$b7'eW_L2L0W:fW(_cs80)u"9"`j\]eC"PI%0/XH!!)3dErd--dKY",!'i1;!9aT-!>s>7#'p^Y5VE*;kQQ#.(t?t<H49j>0)u"9"`o6,%18Y)#RC\A#RC]l72MCMW;+D9&9AcC+2;L%%M02?%Hms,&C:gI+uF(3^!pJH3=R7U)Qs5GKOt=4!<`PtK"2.@W21N]CEOam(I15N0:7XtK3Ht0]`nN>H3"/eUg?=@q0t\X>E!Ji0W:fgPBoq1!%]gs(BD8KpB"k,nl-7?Cu^QOIi@4'$censI0hPIVB7nLSN[%@Iu9,@1h':M5&L?;6R08E)3c\k&n8;SO:>qg0A8i"o5!jkr:9FL8Y$I5%U^F^"pFuF1T2QTLtMtLe0="T#)2^6i5(%R:r"7V$jltkAl+?(dt]p16s=h=f(D>SVkH?^oFW\QC;qP>?r2aqV'_J-kF_l1-t!Vf"pG!q1+;BMK5![CCqZqKmF9jaKkT$/H'`K#5qQ!MTR`jD(_cs`b+L#hFk$XZd6sd+9$f&pJ_KI)EVN#j#?2ceprd2g3A!^`TIY:#O0>R,T4Z\^Ns&*iH)Y$mQV6%C02*[1MWF>?C"d/J;_IP2q6#ln&<"N#AG!?[j@S]5ljsIBYBb$#d3SWUfBu_&;R?=-IsK`q<dYO&4P34PD]@BEAFP<I\jLCMZEFrdBRLR5<QP$jB%$ec"Y;gPTE%5e"r4>D/u43!#q@Fc81U;^P@t'+fi,'3>I<crICsn<2^iF*jHd78Sqj]:]_$p.1qWa5,j^a%jDoF41h3R35t@*J9D\(,jGp2b1JmqbqR]@k5qF@8>4]r/!Qh.NaFoNOIYR@(A7S_3qO[(]G9iN+mnqm3pjhPT,OW24[#+:`0L$Ouo6E&M\W0T*rci\DTj/o]'ECf,$jltkAPhBrAa0>HpLtg,%TRas[5]sIos*h8g?akQiBpo6@EDeJ0oAIKn;ie>nb$JQUc:JBYsFn-'.%13%qKbt1,F4E/]f"88L&#f/fV9X+5ap/<T8THX3=HR/EMh,+Ng!4S$Kks[Gj/o8R@.109M0=A<loZ4k=t9Y8Kn%dUbNtEXUr\l-`P+Yq-QgZ!s/66*]&OC2=AP`c$29j1B`_k,l7I@S^juI^MIl0C4(5jcJYkX]m]oqjboEk/\6>G'ZS_$M!Z[hQu#gn6S+R.OX(N:k./>kNUI1\@K+>I3)DqO/OjSpSKb.>U35Ml+T53QBbhNh"Ra?/=1G$cYV;/\48Z0;-O*r!^5qmj=U7=51$)]m8R"$25oimYQ(MWTI!uB^g[ET$32np:m_/K?/VoHO%1Z3-*.b"rCc[e6`MG[RbI-&0+^em:elkNr.d9%$GNNVSbV.Q4Mf4*VDq*RX&)^f_+soILZHE-P3dE254!JdT,WY0h8WM23TA"-ZH,4JPbane2kXNAUtCNfVJK)g/:J:o(I%UbqWaHTK7WL)G,tCP.N4UaV8jk-O%BREEc-cqg4'Z6_g7b`6*ZdcC>q$3Q[KCu7:QP@YJ';eEAk:]0B%&eMr%.aJfBrIl.2G3EF3BgR7oSB)!gU0\X&:hfkS;!IM5L(QVt+!Xkj#Y:I;]?d[j1oSbJTJ&s6kOFbEIJG3k0+&u*SNSl+TSDFO3+"&F6^W8&E*n$S(f?IY%-K,QC?8ppbn!Z!"g:]R.;K+c0&S%;E6'V?\#ED5*W5uO#-ldJd>\Rab))Epl4p,fPS:tL1onna@(`Cn1_dnmRL_S:rq?;aH1XV'C(L+fX]N,O4G\mh?@T"a86kn2"u$u)RBrpbPKNi8&@81OhBa?ape6Rn8Bq[TUY^fgTL5qZeA;jQGO';G";<I9TRL*eagX?gmi5L`_$I4Q^tRViU-fUB$[kB5>P8A`q^4$A]lM)ugI,!0Z8gnA,fqhC)cT(h3@j6<8)TgB7CE7NDfTiFXr-.3iYpWN5]8c.RMa1<@;dR2+cF?`pFQH@c*iEHi+)=1&mA`pJ@R1qL`:[sY^26'G[:r$NC$jltkAPg8-hl@.H;`nc(NpuZ_7<(6&W9*$*a2cdLD4ifaXVcGaCYYf`GgT0A4qEC(cMh-pqgr8ua[qk='i,N*N,F\04DQKcTVM$^Q><\HHfpi,Pr#"\P_SY9cq\go.rJ1sIVLc['YSFLbLt<S/OeX]nB+_@M^so'G"NDH>o<MFiAEDgllY`)K[ioV/1?gC6(rckOhW:\[O-7X"sn$![rZt2M<ZgpPXcU#$>"IJm5o6o$<>aoC#U_,p3>r8f.NM>BUmDHh2f6s*TDMl+4hVQ1I'O`AG3@I4(>8dnei-!2t'%lf-`7#?nh]e"TTGsW/,q$(Sbo3bD$7UZ22<f<b&I3$IAulZX8d1LUr5bWfQ>Ois%A[6595k_Y@5eZ.KG&?<58jfoBr'/)D[,Bu>iM8sEl]MI6.9P>$[sr"STrh%W*/-#(?UP*15=$.!LPU:U!li-?sgD31EX=e\*B]F'kpE:G\6er#W_j,*Jfil<FB4ChP)6tcOVW#GBY1^f2;@SegTjTTjP`D\mJho?,mjK2K&KQ;Ot<HhN:`(I%#-LB#;m(2:F'p$_7Lpp>r:q/9kn(bYQW9V^sA@/hdgin%TTD=(ce(9N;Pal^aGtn,.Q_<F/-98:E!J:FR9c90<r#aJ.pg5gB&g_%0O0>eYf*p/@^NrB>o(E:<a!c.c5m7QjrM(M'/8co/C]r?Cie[`bkk;<Fr=\D6G!T8+s1@KCSdZ('S/OtjiZ[+_$ULR-DG]-oKIH:\U(,!><VYjYN$j_qR\`GEW]csOU[V9`N5_(*(p_^\n]a;X]:N18[&*V26*ZdcC@\PGX9naE&raLqcE9f%\U26*%@_PFSiks)959M)/`a@S^>QV?^"Wb#:&E3uD,e2?51Q;3[o@!:q"n!g2Eicarp3B8R,Lb_%PCTW5f$N[&eAN,]0!WN-Zr09HDZ3Y!D<qW-ihV]6m1bnq^C/1C&_f=dkUuA/Gi/m02X6<gi)R#u5[!l!5MoD@'$GSG]+gmg``W)s@jl%js:7#s5Hf6S,^n?4S#8e-TBZd"C6%;%GW;Bq-^7%p:&Y^d*.@)E4o17LarSf%-rF(C5)2"*WlVbUoCt[n;[J(K0i*-@PipXO=(H>f!^sW;n$32np:e,sD1##ec#5,==kOXu=GOY6T5lllL0IQqJPX4gLr==_;"rPi6AL@6V"pHP1^n:Zm;[156rI5r%)dlK8)_`[J&HN(>!#dXAn,ESHgK:Za<<W4BVWft,Xr7:6B)]g\9cl(i9L^fBouhi9Qu+BVK7]JG?3:5u'*e(1#`)'c!1<i*\&J,S"G9n3!Fl?;"S;a$#j;G5&R\F.4.t1j5X6uQJ:Lr[(SOua6K]$a!WiE)!WliYKa%tnz!8o4*$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&!X8f.z0O)>cz!!$U=(_crM!!!#7C]T.iz!15?G:]LIq!!!#*"Uk_<z@((SO!<<*"!!(6/+8c)t5sR\#5X7S"/CMn<6)c@A!1#<5m2_Xu!WW3#n6K`$Ihi6@!e*n[TE"rl(->o#!&4G'5lgrc/9\h%!+>d,K)u#Q=R:Q(!PnU8"pFu,Yh/u/!eC(O$jlt7@'Ke<"T\-)(_crM^g^qB)3hK]Gs/TP_sJ5UaFaC*2dQ//L2<`B,H-X,-(h4SI!s2KaK>^rrU[.A9m0"[b?!nlf'YQi]S/<)".BY%m"CX&>`8)Aedn-t-5k<LYC(Gcg=SmFrnn/!!!!"d"UiYL0Pn;CV-9^*/-UZh0lmjDR0Pim*gXsFK)VLFRrkc-<Ud`-1bbl)!Kf[mil[SoW868d_)I93!!!#gh(1O<dbPmm@AC!]R4lI`$0-hp;L$I,c.Udtf#le!o3=IJMJ$>K4pl=SYV7jj-@&#@oS\h5=e"gfnm4sEdPW<=]jAjG._LRRIlMQ-"ueJR>C3Q3TBLN+U&rkV[j)t%p%I1H`lc0kk^s]'I(*us:UY9QHJ'Z8K,Llcq8o`sk2teQ<Z;+(C>%$lD'G`fH0O#$P`741FQI)p[A.`)-mN_3A_`#q7lFJ=R9QfH(U1_P@8KLk/0-?$.TC.^X41^!HusIoXgsk1K@fXG[^N*6pcn<^!kn[:K2QpTX1:uiF&9ef)uos=R!TU=60W69:[:X0Y%N#BT-53o7g+f14?#]oi.Hrt/(%)3okp*u/uXc71YJ+"c]UiPjl]kh:)$R*,0Vd"d+feLPh5h@Zi6i/!@^4T==eO)>f2\tJLPH:hV.j4&iBhn'5'8Ea;8W;1)V[mCB`i7=,2s?Hp:QM/'UD0bulF7diX?517=dg-\t.t/"8B1,icA1#J988S%.enLq&b6gHZS8M[;0P<g?l)7^>)OWfo*p1d*j4LlnSk.&-(e2Paidg:7hk>K.72bT%$`o+2b'RO_b$FY[].;pRE'!!"\`/4>,"b9d*?p)=nHAbGeV4j/rWHV:[dhhd6t4h/mQ)&^PKV!"G@R9pP=>R>(/+^'Pc.h"^?)eDO";3!E_,aC:W.o4jNa"!\09eB1YG*59b3UT=f]!HRG_$WUD2I:JJKiJPj`&V3Ub\ZV[fNK.1DgThW->4;PX0Xo9/O&`uMlsMSg!;2M@7HukU-1N"<0`X<b!S_Kc9Y1H/nd658<0cK5+*,7T-N*@6"qBLK-Ihr7I%%>;1g(([K-@.J2q7N)AGeAh]FR3fQlSkX(!'2Ys4j-)m0X]QM`eYU?8km&M?2?[WiV;&VH8;qV/UF_c:2"1'q]ja`a[]Ao+.j9j$>l/IA^-K-HLS<oW/)_J@"<=A>.'#/B4.Wt'Y9cpnmC3<e9nQi_-nr8+1#J>a!cd>'6(qH2M&?LK=2)%!>nW&dYY#Zf2dTi'7h=^b.g+]]glE^"dg3N*@$C3DGRg-eo@%&tK%*XlcaT['4->kp^/f?'sW9f_8*IP:a%!'_b;eY(7oAl1Mo8Ve-GNX-QKgTKE4&q<tSh#I5T0kPF&7Ngkq7G=/TV_rOk;Kcc=S\a0ahT?]S'QJ]12^gl!r"Nl<L:H5/TiBC)jJco9r0]@79p"P?eMd09;q+PY8-Fn&2c4?k4'lY9&nWC/&34)a8J_<iD-X'5.m(gW9CW]le.UrCkF'mOQAbTGq&:b)m1Hs>ENk`!.3>ZC42_JUM?ed8VGV8.PHK;D]'BJ-$31&kZRf@6P07F,MKAKkECA<I*oq'FD!ef_j6fk9OY4ZNhOp]C:47/ERt[!8Xc)AIpd0l!CC2na-7nX*$jtOY+Z4M.V1G>&U$8"5pSoUU8WFL%W8NE&RtV=j'US'Jf'e[Em`#VZb,Ao;jL:uiD6YrS[rg=Ek[g`\K9AkU\^B._oaIth[fftFEcP/m:hWA#ME=!s7X@O9Na=p8$saN-L`S>Ro>u(Y2=\gjGFa7M!<<+5Q3Chr^g+ZjG^)EGLapCDWiIbte_I?ioCYemg]G6h#ljt0fE$V.njlpF2nbd,9hG%2XrI)*IG4u_:mqUt$31'6Ylb16!:p^<'EA-K@L!;K!9P@W-ia6t`=<_!!6dZ8:]LIqM]FK"!188OTE"rl(->o#!&4G'5lgrc/9Wjf:oFF,&.fBa&.fD2/i7??4950P5lFI,<<*"!!58gp-ifWa^n:Z-!#@Y(:]N3LJ3a29!%`</TE&C!!J:FR!*JT<5lne!!sSo/!3k)VK*$T!#7Lq>!+<&6"pG"u%i>u\!5N&V5oCBGn(Hi'CD'h',7B6qD`P#ToX'rHhp'#Q\E8=$ZHU,+2kacD1\:P:MT^AF?hY/aS+\;X_Z!dTF"@@iCoB':G%\CIZ/NM0<5g6Q:hbNrX/Wga^:pSIs..T3Yq(plPo48uHDQXuqFpkGY<R?HY$;q'0T6cfqEA0TG-`n\13;0!mF-S@pO"RRdVG&,XZ+]f1c2Gj&t[ssiW0#Z/1nZ1#f-sbe[CD;`<Z+PQal_B<i8S.1X84HYt]0.1GC4B%>4r)XM*_(WiMu"1+5WV.;RB7WV&(XLKa:_O0S)?1AhL?dd#9,Cbo4S@J6$X%#S1.lX1\2A\nVnl$D<*\`R^W2j;g[EPg<)d(;U34>(H"\5@0mHo6o,Tp/l&eDHi]s1K6L!+8Q)1^:pqeY\(;[Pfot1U^P<jB`^Q5>EjA[^Pl&Ftq@KoRHZhbgt)6pjVs3cBdU.!YWp6HZ.cFf$;_*aO@S+ip<1d_TR:rCi+$k/F>PD?F:<)eRXh/ID3/;e2+Y+4gT/Gm8"5GBOR9rCI!1nAa8tf%>s[%gm7;V@ZT9TF\XjUmH8Ne`c&jqUb*T?egS",J!e]grG!:c*IpFnSsX7hgqgi`laOer46L-0@Sk><T"Si8qDG<;cH1>2HO<@TjrE7tqXA!,J;)I.6#jJ62X-TGs(.\5WN#iVaGa^n'BS&!PDr/)M?tGJ4laN0k&2EP5Pou!bPB"]-F<S:PeELbqk6#f;?-]IH"Ol1'K-,K6.&=M*UUc$Fg8G]B%uXH<`[&/B_^e0K%Z\FV6QF^g6Zb77@MEe:#EYdF1>20P(PbY-MHV<QpfUf?)a=c\#"4eGhf"PbPo=R>/q=li_qsmA&S7Ngc&hIcH$t>@C6CNb']Vpq,/\kn"-mhfCa;C>HL1cF-tF[rG!:si\;bKI7uOIG%\D$e)#l)[/+R5"uQUk3TV&5gT^Ul0uKh&*Z6a^B$JU!*lf=epX+<1dR"sU4.WQaZC;M4O`RLn#PP!4e_QJ@_j[c_kYbkH,jnMm=Yr1$$;^0l!*F7m3.iEHK4<A9ZH$"5>2(O2Yr";oP0c%E7Xn(Si*na].?Xodo:R9G8i"R7D(PfR.?]s/mB(tu#77`C)XcuLe@+/B5NLhA[l"h*F.+cf`>P[M4(P5UG.WkpdrJCl`?a61d%Ep1@@n8>68&YQ-:_,keJa\K_k_cL,E-P.@,@8a:s@WtT$GB^OJAl=E5ib0BCL!?D@=Wp*n8WYcO`i*W!NmFg90U\]n,#WmkR1FoX@$QA'NUlc;8tOV6SXS_@AW/2)!7mfKQ;LXt]nVQ55CsTU=97G5?RC$n<'7W#b8R$k>IN@Q!-^802U6U+5Xh/e:u+-2897Zg+&I*XK+4HXq5_Aj*dH]%^9+r+PNN/cGm*i[M7SD"Xqi]e_6Q`1RCF-T%cab)`B577!6JWeH[]q[Mpm#,V;Ql/0hnj4b-42^T@UZSL*O`Nkai#ji@a5@#u89Z!D>o,%q9L[C$Z7ce_$:F]bb6#d*%PHI&"V'ms'DZ<@*4]g-i#%)<#hiQVNno/H*2=ATX[?+C8fj9/H%RjOR_(76ff7[`o%fcT;$*d#0$L'sGeS;RO+$,f07fC#;X3C]1;J0lDFJA-'LA6ao]2Dh[+N3Mnl=md-mb!OI(_i=aRMefIG)^DWSnU2PDnHM6*k$+qX$&h&_WTbI[QS@Gk-<X3*Ak_$^=/_\)Z^@>1T:1.KCO"ZS=\@3QBhbSRtshbKK1H,8XSV^Fk=bbCe!aFBNN*2#u/;cqhr."c;F$k(pp0!?oq9EqZ5"?/YmbR@V0rU=Z`Y(:echVR8ld4D9c;u!!#7t//EltE@;P4"#j?G)]0H[3;_S/U3[2nL'C)6SMO)eAZre0JXJ+CI_Gd;Z>k@F52eXQXd+4.D'>kfpg6),Yaj[<UgGZSY$Q=K\o6m-1GgL$].5sPMhRaR-$dt%ZUZ$@^=T$lg4mDU0a!&;Pb,=Rn1L;ma4$X-96B/l4>*K.?3'u:#DT,L].`7=.!lN+rH6%:.t-7(X0&g;r1nX44^SRWK:`hTf34W3)!RNl5B=N/!cQ`m!3jCD:^.('57-h;RK*<fM]FK"!188OTE"rl(->o#!&4G'5lgrc/9\h%!+>d,K)u#Q=R:Q(!PnU8"pFu,Yh/u/!eC(O$jlt7@'Ke<"T\-)(_crM^g]go#)+N,!<E3%!<E5+kX)T[V623H=Mg_[Vs,Z2^t\u-3O%QFK*$T!#6kuPaTE>>YiGh;!eC(O"rC[h!uEu%j8jl7JGBES(LY>e(HJ_\!J:H(q$.*?@*&Ke3O%QFK*$T!#6kuPaTE>>YiGh;!eC)Z!=pe\WDq>H!1!`qp`]rn+2\.9-n5,dXaj,h7bZ$dlBBfe3V0n;-i;I^j-?1>Ef+WEIV\p)Z57ugp&.C$(uK]P^sYX<i$'14hn'65gf"!`gLI`>8'IO-[u&UP_#AT*FR?aoM-S1SNcHr(ei)6(3m-pLrFrS8+N.Q0>VHS-\iI2L)(XT?&&VWooLK,8&N7'p[/tr=BU(1F>WpK7R=KUaV8L9lEP5B%Ia`"r7lKrX$iJ<H/8_7hjO0`D0>eN\AJi^uj`oKiru:g1mme6?gWO8Og45VE0RC9U4R<^,:"=_9'$C(bjL$p9Y&kPnp;,^qAd3toqIXN(,hB9kK9QjI576/Yf%.uqjQ^fePVN0Q-%hV7-:[u'*9B[cd:%H>KU(ll[,W_\AQISJ[$G67UhB%?oPlZo-C8g=go-3lB?`Th=>G>@g@5X7#"D(:Uhp^34c2j'=X^b[M4P=$ao0;_&j"f6c%6+1:blYN5pPuOkKUnB\Q$p_FENeMeYro42]g\)0IUPALYgT`PJ88kT,fcn-)J@@Cei^Q8%(DNL&7FQ&@TM;=WT5eVY`nD"$I>^l>+mN3t0pdFGWG'f:C0IIfA1eIiW&rCR44PkrZpCX*TejSpeDkBUQ`1A--Li2bcQeBu$AW&Sc4tK[!T>\mF')D_1_GTd9O,%;K'hoQ'mRQ(1KXgpYED:XeDBju@B/,H-I+0g#0CN@U97>13,4fYsLF"b,QI/,`aL]7_pgUZdpO.C=K0f*Y^MD)]qm1)M_o@FHMM]85_Y9d=-_*&BMaa;tmcfsS:IkcMJG3PK@+[.hU32Ba0)QV%'Q2sY=je&7GA3Ajm/oY!"o1-)6XaP?PU8j,fk@F[NnBt`]?3ctV'ZEOapT&le](K8=SSNoJB?:J6_:F;Fu>+_GBC1D.!DIU!s0M16jkduahIlMQ-"ueJR>C3Q3T+pQAj#0"^ZGG8=ghP*JJ.75?[i,4R3@[/VZ8Xs.]#iOYbhU&#pd&-=;cS5+pKt)jF!6b7864g=d;Sp$`-XfE)MQdjgmjoUD6;$!4jW4gUlt]cIp4K51LGJcF-&3,6NDQ:#R;.`qt!CBrpCTIfj8u?+*:0FA^\;W/L9fNQ]LM(g:h"_cKKX*IZ4WFdXsK@anF<JUb/K"HU[^XAEC_5]c.q_`^][YpZf7D.HQ8q^2)fK,?nGiN!ruYF!sptC#hY5U\;4MCl-?G[`6hc'><eL4qbFtc"r?HZun'=L"6#EY6H7nHhb*:l#"%Sbgmq<3DN2%dW[\n3O_k0iZ&XN&KV+d4'7l<)O!:XEr*agQ*ol%+Rc]`,@*\-hWq"3]K)j44hNWY^,0G8:k[^ClFqtLeq[TEAjc:bFZ%[R3g.heH1.?S)3gBVI*3uUjY/@J[lauS[DCP4erm]+>TO'`nAH?VnLKejZrT/,\N4OerMcjimbpl8:6$SU40S8OMS-n+774<M6hd3FrVZ)^jlfsRT_mcM%mA&C:t-9LD!Y)NX-$As'ql"(b3aG!aNEb!8fhQ]?Xbp0]CbB_Z`2*?UdNJ:ka6^BHT7I^3I77@mM=_:G&P%cf0/J#oN@T4dbZn'+1p_^"##'R>g?>gn3o*%mQkpGbG@%hOA^JOdJRr,)fKR0UB;U'JgTkXhOs'-ReH>Z['O=0)&2?iD<\m>HJ0\u3s-\0V;sP]'e[b73U>aNqW!Z.-56%5"Hc5`AN]n&b@6mgjVi5P8GglElE.bW-'<8l_FR]t?ZkocS>IY=%5IEq#"=b>gkKq;<BF:!C!/JFL7'9=_RmF27lpKEQE_sC*=g9V'bg"(d!3HL;cLlC$m-Q(h/loji\sFRF&4YW"Q3pCBQ2q\?Ei%$NGfC9C84<Ee+T;m#B_bVW/h$IRCMjKX0FV_KfaI=c>UA+A'<OT:>\u'"&`er74]+\h;;\P2iG[)3F[N,#<_J5.l&%1a1iirBr`u#Yj=!V%0,0Ag4V[>&N4!9Z3^<DPOlKk=ZB](T&WsX*/-]Gb5NCH5`Vj1LEYnTp2E/rr-J6.K+c\RfU;)!7X)mNG54."LD*+@WX*[i+uFL7/EJ`RfW;89!5bm/f]0]dT[\,CWV&O]AVuU'eo2p%iQlmIUs>Vm70,m?@241f]VkWeH/5I_TOnhFh;)Iu?\[c6HDf/VVh7ma[A0(h\3"uJq51ZBQ5&.=Pb#->p%p_MVS?d[e?(8.Su)n-T6Zoi:FRo#*#UR4W6K>kZT+)JE'aElh-lXW;S0JV2dJl]9%\19BD_5+3X1XGqr3j(Y4IoJ!A7h.]<>N2F0dbPHN[X#DWQlb&>pqtS.tsV1U9EqT!H[-q,ku,i,ck94AKmhRIRur?i%>"cMU<S=(9G]*=I@GDkXD>$qcADeQJK-(*@hK79A7:lt;WW--cNq@:j#I^t-ZLGh[j'`SDpKT-H\l.o4jNa4:WON>EU,U#h/CEaF"sC"bSG.G4k6k8h[,2+mlbe=Ru?i#@J5*pk`2[bC(h1+kH!AJgCdKR:Q6YI?@SnX[1Wd"<9sQB;o/<#Lp>`eX'$c7H2]R6%h`gMX4H[QK7nf?%^0gfHSp`kTLr%C'H=KD@(r$P7_"S!,K^i_qXlU.?)+PE!WBh_a:J+m;#;8P_&c5?;%\<<p2X0,:fJr/+=6e)_o"?CJ"AQBXRi@UV6QI'-3eQVoTo%6\#qV4tC;cK7WSkPc@ULdC.M>2ie'_CKkEXP<)bXd/U/U-V@s*kId8'oa::d41<UWp_+YZm3U>?C.,7ogFHrmQ1i7\3Rq-+G6u*$ErC6E?d)\e//nrrZpgsI`mi3L2=QYaN8:O!]Lo.q=$oJB^6>8*P#F#23G=*VaoV6i"Z!Trr;BA#uFQ)K.m)i]tWsdm<Z6J=*<>G?WVI-qg/%K])1gjFcJsTU-][u!Q'eg+Q*6O*p4D?32d*4MVuG2E)7)['ubG6'h))d5su7e"9k48S=T3;Plq6C"?8o',l_5RZBCcl<n7arBDo12Nq&ejIcgT?HnclpQ(\&n1'd6ISG1G47si`bHc_+5D!.@c'&!/@7C/`Z4&ogIp*HX<HL?O4nG]g]oJY*R2)Qemi.FkUr&d-$m2/p%++($]lTa,.T)#>b@'18/ho`A+3MZAU<;``ZBSa(:^,JsG<E'QZ>dfVbi238>(U<.6IDdN/OntX^PcCW0EF\pAcG#?VZF>ZQMm3-QG6_D*QTl2Jf+NLLmZOOR>_17K>?2g.BHR1F[o^tFK]f1+:aK>V]k`KHY@>-0'@bt*FJ<dC4i^7bMf-i:Gb^RQY/ii"(;%f`-i:u_m:?^PU)(J!F1(Ru9[1+F:g.jK'mi2tP)X]"IfH#S-@i9I(ZhQ9_,FK$9Xj!5dl?\9=jpCdd*kGL`?9?V*UO"Tg5h\<l&X=$60m]ORA/m#h4rr#(A=6g]*+0r>'ZpnC>Yd$h$rhB7>gdh$eW;I[&5VA\Dh#-ri&HCRdDldFh>en;mWUJ;p]IP>I6nle=ANbf^gc*)rmlR5!]Ji%4C9t76N(mnI*KQ<!^62;"PNMg\)sBQ)(7ZYtIpMDjPaUa45lMNH*RF)#(P&-7FUm%-@a!m)&VuO9F\/1#Q3Y'6Ac"7q(=4+7]R>%KBbub^bUgg(C4qe\-3)_cMt?mVTFari7h=g,iPNh)?-R#2ek"[7SDC&,+-N4cK9]Gl'NfaVldKG-qY3=4"*7d\@T04hC?c;1I`2o@c<b3B7P6#<aG1Rdq,/l=B9npZt>Zc#Q*=m]lA%F@VSFh021upn%=1DnRjV_EYM0\)[&JLX)9.>'ES7fp(T:'n!!_GF+W1:\Cqs;4rD1"Sk]&P)BLbT(Sd]f,*h2`AMa6Kb=0Q&et05q+g%Q3`/l6,u_sthqs9_A`7X5RM(t*3a2<V4DUcmZFVj.dlGf/7*P0g<4pK'If8@hYtESl4-K2fpA>i^]k.E1ISsk?c.CRRodAQ4WiLj"U:IkAG`p)$>IifGSkS![,*9Dn:OB38qmB8/J+go(L1cWK-1NNQ[%I.//N:PK=n]JK_(=Q_T<8%;[AZR/$"+5I:+iR?S#\)Q0"]ncq2r8S<euHVl?g(?BEQ:FJ&+\-bsdrZ,a%A5DVtr<bQ`*!No9GR43s-pdG')Pp7!,tW7Bld.D@V::H%^77rWj9CVQdBrF/^P"o8[oDTtB7SF0%!r;:,Bs.!]WKZ2V8:KZ[KQ"r^_;+=r3K$l&3Sdr.!$$$J=:Ntpd"Jq6Hmrks?Q!5J2WIuqb>qD?!qG]@4YqYWmN-j=c',9Ig`pgSo'%B1j#tji3*SV`<H^'20GKASqj@l[D-2VY,Xe":fr(`M8aNl*;51?96L9%C"T'*WVEL2Pf]Qu'Wg20Wb8BnNV(jVk])j$^l*VUbfh"@!PqsS1WiiO2Yi1)ir9&<G9lU&&CJc8`upHJjNXuW->GJ$hLP^P#PoOS8j$gO#%k<h6#:K1!:.WO:@[2bOh\e"e?NpFLsSk&Yur?CFsm+,N^<bPILR_6$J`uUuh%97hth.k&s(556*H=rF)B?LrP/qY(Imj^WNmso7NNi_iYs+t:SR>u>h,\eutUHa</SW=8"Yd@kDg!8<5nQLDO-WBr)^<_cIin8;k4I9jjF7@Ubj8EB3I"rS?>dpBI"-K0=6R=/JpGu*Op12KWgNeISSo$oV$Yr^)09<2RB3T@\gt_kGZaCU21-CK-l#NS\NO=trS@M:%O7)_M?:I*c.6cmsi_HoN47]Oi`1$b(YQ*[Xl@'_pZ!;USjia?=WogP?bbb.&mga\*DUk:&,0*,of06/[2&CG=$4cS"TBdT'<r:]c<EISa0V1GRCNaZA8jTM0W_)o+e/p$f?8P)GAl.q+Hb&GeP3hioB-''A9o$,F<^D"A_Q(dabdDOrQ.J.lL[b0RPXb?A_Ycu(6FHW%:kGEcr3n\KIeIRfcT?CCdDC&Q@q&m'opFSmQkRu"07>ouI48TP`u+e]#RP5g`WSa$mYn":FVi]27?se%cEap#nd^LM]j4/-lPbpF4NJsa`^dcP=)oYSjB<X<=.b$=@1aq!S)koX1$pXSXabqc]ntn^(iDQlO9<HOiL?nS+$2!]-/1G)pPf4DC>`5WqDC:Hak(F-'g4u;97GTggK3Jg%hJU)agL<anUdJg2<_*ahX#AsY:8gf'McV#58>o.CM1i!jS27-</S'?\IcJ=Z-(nV`mNU\8^,j[&b=C!HtNb#S4T`dPL>B1W=QD41<#$TY&O<"!J;i<Il7QZ%tbiq*YMG%.XoLE<F-YL7lP?.s()L\S+2aH(_`9A^uSpcK?6K4!\cf3/n"6(aMHp\5lhfE-5S@])!#)qOIuT4&!IBg4:H6aGt:a3`eVY>9HFBuQolWB!9:uX![\G1*)%Cd'S,^^EWMAZ5n54P#n"KC0Y)_U_]T2JLBIcgI$e0SjC+.&a[:X]0Kq:b>ZAs.F'+Y(J$&,:q$L-F=hj2/DKV$/%n]CMVQGZaB?X+!g[fo7of^alVoo8tRBXn_OFoPYJc[Vi1S7pZ$&Z^udJMi@M)MPb*snt1p;.^=Y'1b]'5DOCc+Us%5I+B4qB&EN]OYJ-o0ElK!!s"Jprn,++UMn0i6hLEVn;:F(8qH`.(-#EbSEF'-(E/&%,.:S,?AT0^t7*gI+pE+5<gfm>M+M)?)f%`C=JF@QZgSok&<:<>lQBgh?\m?;q4g:]$/pZe]![:)RAODMlc%*HJT/`(<:VthOUdoY%uYc=T-0t.-PJ#9O7&KjlO>=Ed5Ft$JHB_.N"I*p7rdZ_6t)`k?m$%eG$;UK9o8JAj4;P*$@NJ(n[3l/gNa-#g)OObR']r&67)Zl:Xrg;=QP7cC3O'^/E?aOo;UDDc`p*6m2@uSqed`C-$.lcC<d^fr/Ff.'6&0oS@kL-<I6Zc1`D&*OieH0WqBi^D(4hn1pPieABY`nEj:A.Jf&j8P?PIZ<Ro>Lm8Z#WBLq7&HA9=4@NbGhbQE`)\n"k;M/1`m)^B5ilJ=odblDbQ'i/'0F(-F!6/[6PD_Uj#rTkk.kB9'lYa+Xe0cZtgO65bgInBSou,0$m+`(M;fi._Ef;U%/sVaA3kH]PQ"cU$b%jr2=d/6C?*ni][e9PsN=*\jnqPVOfi,G4X*:A00;oVI"%<)#'UKcfgBk:[e&ttY:8I74[Uq.=Ot5?/L:W#'0_],).tIg,0S(B5!>qGs:G.&%MS@c++2P2j4e1T.92Ll[r=d\eNAeG&8f8Y#Gcpr#C9K_f]?R^EH?[`dEqr(Rrb4cmS%E2\`\kkT[Hqs'rqWqRAZe8N7m7Zdq^!X\&!E1@<J3$b>ciAu;fcgjPZHRA`HKc`+&r"#,otN04W+A/$=Ep&Jc[Vi1S7qK,q*e2;,N8sMoGNYHPTEPHn1Pi2Rck_<:mg`]p-cuH7iZe5`?)i-*`IGr[H/s.@%"&9^m.!oF'gHnqIg/gnf:gkbOqf^D=ucci0jW55a*Vs'1J^?\4G@-1NNQY*"X7'J28\X]bA0.N%I%^E:soJ>joK+@-$%?q=)o`b4FtbCB^a/fl\%kGCmKoOEK1e!oN>XK:gU4Vn%FG:E:m'9ks4W]D4Bi*^9<[^)I3+li6WeQ"acO0!;5>B*p'h#5-san$oEk-!]=[I?8>)qg^R2"INeOZk\S:-Na]/r;a&gY7&-SSn,Y\dY\qojeUZ."DU4#n"KC0Y)_U_]T2JLBIcgI$e0SjC+.&a[:X]0Kr/_@.H"m_;lb*!>ln*(GL+OjC%P?TE'o]P7*a?%!"%I85K<+LWK]n*X4Wl4<u<Tj29pZ-4b_K9HFf\JFR&g!L&:)%OM\m$GcEj\U_f>+:"*c"9i1\Qs@Gf@??,`6\5@n4u8g9jRpPUV_,R;1]3]If/oOKnS_q_D0`MS_q6^85n<#W#n"KCb^=FKH%Jr;3guKuAa5Dd4PKI:m$RSk#BPCu"^l^i5.N?p.(/.7V&f/t3?4%gf7-HND[Pfj.?Rs?G$MInU$pc^IQm@uEpI6S%97aakq!>s2i"@`QIEQ?Ibuk.[CH)*V>q[XNoM/r[>)_[/XMLD`gSJ8+66f>OIuT4ccdaQ`WRTi8FZ8-He]rLX(BQM+rq]5^QK!r;"g)8p6Q+c)HGsq?[1E4WqoK@W?kR/$TWY@982ZFou4+DS/jOqY88]XF]TgS=<&S7@l*^B%d!`t$GcG\Hu`Xf;"E<SGLg:dB,<-@QYenc<261;Jo^BVWKh8N'c!jWRrdki;HNDKV:G97>OJk\]=mORWffJLG?<upQL+!&=(`d,@l*^B%d!`t$GcG\Hu`Xf:t3+0Y*R6Q$?Z#AU<h(i1=^nb:bH(r23df3;8ESiYG65^S5OJng?r\rRe:!:5cQJ'^#]^rNp5uf5B+[I!:R1F<l#=qYk`b4Ft$fbAPECm7,Kn%7O<_=[=3tj`I'E(6Sn1<E,]Ub*eA;Zt9N((0=LT>!$;-C1hgLjkJ?e*n%n+peXZY6N0/=r[-p/We+Mh`tL)4-a%E\I_h:]SLJk*$0E:osX9[_@u><2-Dad/a`C<bs;@=W9,&IsiWR,<K;P4BHQ;pnHSg=qhn:V_`BrX<6*gp)I9gkET*f97*if=7JpZXS-2N@,#s[Xe'CkPMVrLn'*aHAj4;P*$@NJ(`t)kd3@JeF5?S6`5duc<S9t.73*juSU"e(%qf1ABIpb#K40joa[:X]0Kr/_UG^a.V;dg]>NNi/F`d6KnR%T$[i%]/N"(CZ9HFf\JFR&g!L&:)%OM\m$GcEj\U_f>+:"*c"9i1\Qs@Gf@??,`6\5@n5"mS:nhA/$j<6ei(`t(@0R4Mr@.KDP!/qGP$^a$bE\Mc0:]SLjaTY?Z#!&&5,U`ZQ_rLkG%tbiq*YK0;nX946U2%uAe*f5$B"0IM^\Cj.rGao!qkZR/=$0Dr-rk&cs0OdHc$d?WVeF;A2(e#qVgA8!!t6sV5n<#W#n"KCb^=FS$#5oYDQ>BGM*KeKkqg:fn\o+:/jW5'3V?8FFVQ1#M8maE3LBmo-ii9`o>tQ/Jg-H(3<;@T*j22uTM1-/%rs?/85K<+BBGE$TEM*R^"MF*/M(8EE#*BWXM`R&'%Fj0k(=Yt!>6)snX9461,qQk9=JnQY'qQ5qA>H?H.J>DMM?5VBa\j&,=-a]b^>M)3C&/t0Kq:b>QuK&7:V(u<:BG``K1Bu,C(0GiU/+Xp>2.%DKk#V09q""*dfWbI#rt@5_9%k4u8g9#$skRq=GqXhXm3dDml^$^65"8i;-o@l+q(0)u4NN\>;/JFN2Oi[l[TB>DM["R1F<l#=qYk`b4FtbCKW;@+&#_7p+QcG@Kt832Z`#?s;3"EjAHn?C81Pf63&Fi[F]7Rkm]aOIs6sAj4;P*$@NJ(`t(@0R4Mr@.KDP!/qGP$^a$bE\Mc0:]SLjaTY?Z#!&&5,U`ZQ_rLkG%tbiq*YK0;nR6G=PD;F6-4^Ci_"]UoJB>\O#EsoG"^l_F>eoE/OFtXopB3p/!!NN0"U,&5A\s`&9i)H&o0_tjj4sk=!;Ki]TE'o]#mpZ?U-jM60Kpa1!.]n9#n"KCOIuRR-9<D#!96Fu!W\VOOIuT4%g`RC@%p#?!\ce`-iedSmQ4'<_G:?7X62IeSA\l2[c@V4S?M,jdu4#2pCFG;hHnhpe7K-$!l4QkWs$DF8p+cpAS1_$6,QjTqK.3@pEpaB-dT:=?%\X.^H(At@W?UYo_d:#)/_b7W)H%9Df-Ws^gqgo#te$8_N19L\3J"\T1Da]jZq_cCk("b&UcW+0;#M`@&ST4lj<aM'ugCL_lU?]ftG\l'fHB5Y1?acKh_"Yd2*-r^=RhBpr`&$:nl8hc6#9:;trr&oI(=d!'m1F.RE`lmrN*G/4,C6eouthS`OJp-7!.dCOCQGV>#&As4PD`\uRRWm&-"nPO3sFhY\M[WT_)`D93hh(<c)A-(f)EFWumci[%TH[m!$^b1#WGHAtL^*\1+r5;Q%G!62jBTRL'j[C3Wtk>$RrdTmi&7h=O#bMB&$XHt8fF*bm;`L9:;iq?G$,NcO?:1?r&S[CNO;3RY[JtdI]lj+^,O":\%YarCR=Y/m[U?;HWXhN=0C+mic1rjbHrQH7r9c5Tg70>;I:X-<B&0<hQ4N/oq3k)-$pJK[fWQA?GCo:ApKcYKoJisD?bg^j%THqCo)j.9fBW$Y8p:a1o;K(0/MoD5EGBVA"BZg7JG>"CY8lHM9n3W;@50hJZ@EDu(UfHpiXO(973'ig0AWf&arIpCncZ3M3#HpmKKK">s8&Lt<S%7KtV`mDOAqh>KaiSn_=Sqa/!]odp,i'oPDQZ#TT>&QUQB75s[+aUHedoJD(%&^1VmS(,r_tU`cM">T\Oh_4XF:IJhc`TeCV_ZIXJl5IF78#4NVB'^ZAX1cq'A>7<?1S(UK,*i;ch;-8#OQq>pn,bb-D::F>a(r]FQ$cHo'Ui3`6.^?l$J["@WT#h`eVj1d3,-_h*?@Sedjd:,)/_SZ&=Kd=pWX[]Z1i8;Ae_/PcVCk3LDBW&GtfPpJD(O$U09h9I=qdSu"TM`:+JIU(dJE!c``=;V_$Nr^[gmd&t!Y%SR7'9mq3bAQ-^*KSduHUY`h:LZUiRKn[PO#kAQY%LsU=Y,mAV5:d$;d=UrLW-QXcs@P;W'9M"01#9>f)9'ih13^-C"ACr6#V?)I[`X4^tu/06-Sfad=1*%4_gg!g/Ca1SiH-e`>Lf=0MgS)JeEOB\i"$d_O,\pg37=0*BA)Wnit_Se-2XjO#eTHeq[+E(:"F,8Ni9DgJ'aaFS-t/Z3!TlcL_gTlW"J+Ch,>+S"P'QU=P2`R7U7+!dQ&YYr<D>N709e0LUMu=T.`i;5m2b*iW-@h>Md/WqqNarra'2-RdS6]a<sm`GmR%O[Apns)#&G^BE*A>$"Rc[=7;35F'aM1j+r:DIA(]D5$Lq_l)T*?)%>M60\7DH`jm\!1;-IVZ]GDT1!]P_np>?I-Ro7Z(\VeZLV9S]>`$?Jb2[?h)Y5P$[7^5'lg.VV'9RJ9R73%pmB?,?WO,jBZppYDgUo`r9.bX&pb"5P'HdX-,=8QrL0f8AL2P`B!GH:J%k^r8"j>G0IE_i5.`Srp;t!Ph:8@H4C6'D"skZhc^Vi/o\amrOdMPZ@%H$tetb<?D`[a?ig&kMU)W`\8BXT^*amCq/7*71im7?W=OK:XU81Gk1KMts2!hXc%608iQk!OhH:F^mAB)od9II#2Dtlk"!!%G]Wrtk(W4JHi/%f_Kd[jFBEXRfKX6QRGNhA"KSb!QH&(Y1B<E6T!]h'iFkn^^F!I\I$7]iop$FN%!cOP^j:1I#,n_JG/Q`'gTo&B;$F6odNomW:E$eoa/5qkL+2ZPRas36'O40-):kQF=UWkXb)b26n;M`&ICHR64A^m3uaZSm&4:&8:Qa3%[lGe.#M<GS>;P#DsA%Mh9&ZLSE`c@"==op+T>G6L'(-Pn(L!i""j\WRp=$33?^h'FHLZS9u1ULm:jHGoAS&b2df'c(%=*,NH[[.$Bq^,uDrn-pO,!>s^]s.A@8<OpLC>RU,AefQF_!hs_lG)u#(!W\T,,U`ZQ_lpWO!).K*:]SLj"9ecZd31dV(`sA)!5M!X"9i1\85K9d'-.]"JFOdK!<>f8j.;q-%\TJfTV.sNTM2jNNX6'.<-<rpT.#,!W)otRr\%)AUL6SGc7T24*>0(Y3G\>CH=c=75kS7b'Y9gmr*cO*M4T!X(Up)3oTJh?6iMqI,CJ6O"suAV.-O#gLnP$jK[qq!WDm&!;GpIn1t4$C-B9m*.!-=R6(Np%RHS4L"?#$\E5E>8-kh=<"b"TQ6.,4:c'gN-,cE80'Y5,V:l=W/@>d6X4oI&,l`.D$<Zc_hm[a#X<*T<p_<_,<>rbW&CjFnF.-"<^8PnG1![h5=Jhgb*:sd7i'@b4!XjJnoTMuepL5R8!7TC;'DLA7BG1))Y6/NsrLT<D>MW"[a5IkBnP-LVX=-sOqkPEeILXo)?$Ij*RrYnG0MVD&SC7Y>S5B^)bC+/+?$n!Ii#iBTfJVie6-7Em$1%354VV:f_b^@qiPKSZV4'g\%bCjoHTH\Mi`18gObDkDQo2^\/m*+bH#<cnT'_IJ5oFnc\m&L[,=H3>)g<&YGV22C9@EI5\NeI_KgJ+;T@EnCJ\gstA:\EV>&Ylts4=ds7oNUT!%2./eY7*R6."@e*W8u3#fA@VHeFZ*(Tjd4]W+%_P;+Hrk0(R3qF@N9Bru_1)l%<=qiT!QQf/n+D3mju;gD%dI'uL=b42Nr3ARM80`X-BlaNY4^*GJ%.d=CID&euhBkPG$U&Y2$FDMGA3>c!'Ohi6MZ`rB#qe0P]N1c;WG[4Qgu"@[Ig?Ydgoc`?>oa^r>d-\m=*SRZ$tqea`:od-Qo:tKB0H\.Eo5J8Y_OK\YCeOPIr:(7Lmrgk$B+21I$3]_D^6@Z^]S2GEPLZfJ-XFBm4J@.fllA'r5@m`H3Le:t`C$PMqhpodZ`GgEl*=af#jJTk+8!hcYrtd^Fd2eI$XAO/LkdHtp6/SMW81U=GZi1>(Ei;)Nr(Gk1-q+[Fi-WGb;#QRLUFI#WVnGKp(ja2?>Y\nZ_b4:GF-tM'h'8s`NYm6(D_B^gUpZOna'pi[8PmF[&MugK6]*@7g@*o2e4!]]YB_a[4D/r$o!jUXpoaHfW,ZtuR-;OB6'WFZk7Es6,jdb[daN;`KA2X4PI\CN.i7ct%DU0>5BU&jm9&;hj`3B,!Kl'sFB%L?Xt%D[)tB_n%Pk0<(L'um^-NB5=$a>p@!70%g/=$DB!.2UQ^]e_D:-'&/\6R?0(r^NX8R9dQ8Tf-;P/0SqBm\K5PVeQ.dil?gK+O'Sa5=u\bNu#2HddHU=sK9@CtuVdG$0[?2is`>!DW@3"f/ZrT`u)Z6B?U*4X;./&DC*]E]L110f#cr:U7>GT8no_h4P#9i+4OiL;)@7EVF"MQ/@jWL"f/fgX^kEY`/`lDG/U*d;.o*lb1NSksV[1`D5ISs+`')ntC)d?'4&o63&I6nt4)Uko*VMEH6,qg*G?Tlh9-JuUDPn*r=GJcDT`D5%DdK>("/]qHP5b_U+=15T>J?ep"5#7]aZI'?(e2b8,(]&-e'Q"0'#C/_n(2U#p6Dj,G;E6[k[IrdVqT!\3=do^F`i<2$H4$n:k.Y"Ma6(Fs4`+_9\I"NHuM;.N8rYhS[Z;6b+;.OJjh5CW;c7T24h3abPUWqLkcoU)9hOn@TK!L&4??)$p`=sV5]G&9E`Ot.'[3qt:i8kUC8g*SKY^pRQPI%Ne>L"mZF:$0mQ\m9A('VZAm@lD%V#Jm!)7*,g8]VQb-Tc4Xh^jo[X"rj@#G(`?qi[ThT8Tl337[n&=UugF24\)^jd/gtmC,ZOT]T/ECb#mRDcle[e=?CND%a.aDi5%tT76&BT(D)[mfh/-\%-9k-@6.l:kn:rMm!bXoM*d3`>S>hrTsbQB75l*oF`&XIrO`=<NCQY$/:V?d\B^Khqo1.k3<kl@dg'%nV=`32ZsB1$OU"?3oOh58?H=#ddL=LD\!#,`l0P(o3N".66I:R?)&1K]99[Dn[uYf\I6<9'XfOU#(m"9-cW5ii:#\B)L]1`T^LEe#7Y7B[k8+!?*nQ:kbb+Ng(ds-<*EJZ*sSI+N&3g@r:<a=>k0V2>1>ha==A(,kjLDn)R=\OI^4s@U&)CA2lc*NeW[",rj1U#2Q?R+?`g-]dT7jBr2S"1*b;\F,MEIR96"p.np7mY7nB4@<3!Os8flM_I,_<MhEtK,k:1u[6#gSL1B3M@9`I+aRat-3S/G\fH'>5qifiIGO"-3q$u@@u$n!InY#tsdr7&^jT>-X*hc#GeMWXbiTRVH(onRk.5M#`3OhU?o_1*js2pr46mjm8dreb$-5kW$M<GE.(V0cg2j-NTejBrOAGb4P.^.Le3,c,D(VbYG\CS&2A4]:pBhKF%l/kOJ<H$,=>N&d07j-fhpI'V%h-*il&jMdf!h^WY6ahm)l=AjH6fg3BEEqP2mf`>IMY!D7=7k1K9e,;o/pc_iSCs//O0t*kC5fG`Pm3dlcUjAL_:%U0IYck+>!uX"0Q_3?u-"XPfq\7S<.kA]X@qW.`:W^e\eOl7@5"E3A8'G)+H(tfHR>+:0A%Eo7Y>lWR.un\9GAiZ;+1mVi(l)ua='>5hUXZ_&HDS3qq(hO<FrB[Q9i\3n^-SM,W,(CX7p+!;AK<,D?FF"ee(aQA;2W8$^<=;[2cdtlA6m`P2K>W"B"XH=SY/AN.:/493OlY9\N/Db(1u,hqAL&Jm.9d?Wb?l'mCb@T:k3oZX1"?LmK"3uA/.`+iVAJ>l,e:]XUVY.l:s)IrBrcGD8cQS='-7,m_6/8e<ciHN6ap&>Og]FZrI74@U2,1.gDX7PB=Ml^2r`+m^9cpdq:$BFio$>Lq1dEmaDK(VsfY9?bDX_i&W:(FiVN.'@].R-(43IC5o7lect"HH-OJba+%XgNrQaOV79Ht<`?,SM$k(?H6XH)9"tKDi#8'S:9(*sBu]Eq`tehH?[FG*W^W2nQS2)`l)I@Hk;r(I1O;2u6f,E-CN$Y^qYHlM]XrVfpq9E[rU*s:3r[M)<^m$u;#NbG/j>7K6-0f?D5]e(R-d\GPc)inD>J1.]FDP-A`o0*:F'[>o*4OLmWV^[N@>r!P5e7*qNU[W.T#!YU<NI*Id.bqlRm9&X(A/kgI:Q$N!#l%F/JNnAlXaoUO8atrkERje`Eb[.6Zj#<Z_.E4Rl5<oCO,+VLB,[\/7ul']g_Ql.aUAD^\Dn-m"_;>58X4[ZiD!'9m1"Mh+3MU0<>e<7G!L4'Ur9hl-;LB0&-%V'4c('d'GubN\TCpA^j^XrC2cH[r2PdV)hFWLfgdBd=8'Mj%],<,3o4irj'sK)DB1,J5Ybkor03Kl!"?-$;4>G/R1(Xd0HZM@1p\`tRMkV2C%t`S4ZdBd]1:c,tf'V5KKAoW-K5/r=Q[V3"fR&Nu9t>:dHl7K/H/K#L6#ahghTA7lS;FX$Ah^"VtP=,cP13Zrhsc\mu%]d6[92i%noe9?&Dpa">N,\N:"D7WE39-an1Y@U;nU?#6`+]V.*Minh+Ofi"$B!0Fd;25*EL(i(hmKic6B.?gYIE8+/.T,$XW%M8U\?K6bdqCcU'`/.&1A\VD<OZ!X?^6`-AUt3.ekR:9SeV]6jJA&XI,(L<@N/aBJVe9G&sQXj8@Xu/o",;UW4*!pXB4P.l.23oHu*O2p-4g2`um%M_cM'YL7GHN399D;mm;t7!'/b$FVVl@f_@n4T"4RQA_FKAFrpP<L^%)h,qRs6mS9@\2aK/_f75>X?Uc@--qk&1cYr4:P-?.Xc#Uq^cJC-.gj`a(*7$?CIpe+^1#.0Q-`H"4I6<HB5m8o8Y**MVRAuF&_pZZ[1js\4J&ks_l5:GO81S5%s4e'MRMF%HqB`'D$P'irO"-Ns;kG_H$B-Kto]m@Mi559p.^]^`muAq+4]_0N%r0)(/!9hf$eF])S9<l2#E`cJ=ZfuGlAJF_9Mj61IibWR-OqS4EFlJVp6"oG%[f1,Y14qI[o;!@AG+u0aW#9nI/Vk(#A".^8W&0#9V'U<Fn=$cs3O@)LYp.tjRrmsJgtl/hkg))DUn"O+:IrB#IRXFVRE4ZqPh*8qOclQg'6p#l71o#J"tGUadTF3[;DdSO)'"XfM]9t:/JgPFp<j%9GF%jjDToU9m(Q?^OB5PoDe%f'RbVJX'8=8P+]+i%'7_dV<=$`5$9&C=\hOT7CnQ@Bue#KH;Eqg$Bm,X?_!a2'h)h^g/io)IsN`nh^@+EUi1,-3pF%'H$PgHITUu'ZIM^[T>V@bnLCi]JLkj=dEggQn*'g!:ZIRkq_Q=1(Foa_C2c8g%]Je!P80gYab:X-`sHb>O:-EIlHHUqcD&K>U]X,o*Ji\],IPjeUck@F;V+oc[i[58IPhs#.a7CSa`)hMgE#6OK&V06ikdIiURTtu#''3^6O_d6s$@_6;WOaSWh,D3-0O>\K6A-gh'Y=*44.+ukMNF!72]$>^QKgLl5-$kb%B)UgE>PC1,.+8<J$ru+7@.Y9_V2`m<8u=.t=Nmi7TG[h[P$S*7$Ao\aYeR-EP<!Z/e@jp%30#:_Ms2n_j6aYEdHHKP+k7j7d>kKH-OTEjH1f68!_M1gQ$t9Qo2[[r3rdaVg_o@"OQ"h];BZc<ZY5Up`uG't%'!MYFON3`mirgEOQ6ms_^9kIBJK%::H`^DY"]1@QjOE8*Pd^.qLiq\Sm2DBpipnR&@n:jpq<ICZIU03!?hkaZM97Cr=F8UFYPV&l@'002BNeE8YK;ftN-cI.66q?3X\[Pp,=LoU;/=E?<@d?/Y&JErlX<;X;%)lJmp6bVY/QA>`P#Lu%&NANrgr.gu'mc9)%qApCG-[CS*(&t&g>1A)3hSr&Q<_nW$4g#.Ahb=GVdG**5-K"D*e;9CMrAgLFJ*8k;lW-5k,I^I>dqI'IaD\heZ\0h*J!5Qk]bQs\o"G(!X/M/o:jo2tWa]P^5>sZD,VQ!,[g(s!J"_&b'6VrrX@?8OG)3O$e>9>rqY#[sL(feZh$aBSIQk3VqesD3Z^')&eFWS1^4/q=55G/^@Eq*#&EWf`oKrBtl'!(I/7*5Lf.CfF6@sugN*K@8\1$3E-SF]8BKf=@X9Io@KeYd.#YVJWIWF:;Fj7,!U8;hT#3h]%MY`CfUBfDiRqE(,09_BDG@#GNNhY].d:I=9%)Ld6FML`/T204h8g.X'_'78q3l"9$7if[fh+,Q'B1mpSQA9-d^[<;BT?1g[TlP]Re!_IA397s5XtjmTQ0?(H\m9T]4]uE%W;+_%Z98+7l0>s-rOTRnq:/m*W.g!+9Z&,(j6R'Ap>i!%VHC,'hjK5e5>nDea4BNO.^+Vk_mY^Jq;+ELN,D-6T1s4lod1!Fj.N-:Bh(.OW#tqm,"S!A\]3<6@%nU@l_(+WY['S=jOFV7?O%lk35=2#_K'Nt7?.;dgU<!Gd6UOY2Kh"P^)Kk6IXO)]i+7lGA7!,g3nAC;hT29NlWC:_9UE9g;UcZra(;]/i6p7&]6u]_Dm`Gs'9lbQ4nuPr-RcRHblqf#juUd1s#kulc[TNcc$E7e/RiJ$J+p"i7Ep$ti&Z-:NEkK(1[n$-@Hrl*Y7_O0,W%U\Aue7nBRR,.h_fN>"=8BnMr3e=m4)g]ncGH6=_/Uo2:Ze+ga?cb\Rab-9#Fb:<gC*A0]lDg=JZd5**kBK\tG<C60\83ICue%61c2/f,Ad5rau2\QTot`/'2?Ws)Y-eG6+gLcq5V0U^hI\I-B.8_8<]*X!d?[n(=7n-n_])gt8`FUh<_blI%N[cuF(m6%.Kc^LlJ?EoNt`M#>aH71GkOh'78Ll5ij:/QZq'MmA&njr-\25O'cUZ]Q8g+cj?A:@7g`Z>ApY]QHg:1Qa.JNs[](]Dnc[m==mt\mo)Ce5)VECaiWu-Reub*t8oF6+*n+[r)^SQ5%L0T!*56mgX@;M(6#1(]">a=*FTfrD:PkA`QJSgpfX%=GZD1^UpDTmDiQt=ce#`oXX7C,^#HDSfddk7-f<_micbQl@QXNMXYYS>1"fa'.V_L9(nCmklp(+dma!pCGal<'LtIUFp7hZ8?S/6EQ;&TQ@It65H'PiEs6P/X(^cS,Y?1TYK3NB/mKgglORJeg(%dqn)]mbOZn"aDVba6%)&mSX$^\uCbk6?o2SrE:9'HU'A(?L9]PS4):[1:k3>VZAbaS^3'iQ&Nj)8u,skI.5jie:T]-fDmN8F+TBM&qVl.U62it@jdL0SJJ$mI5mqPhjPkW`WT"Q<gHg4'TmKb6JqSAf.6G&S\.C*fhdpp,8^dNtX;%reRrEVNskHgp&k0Na*&@QK6ai#LKLJC['caR@!GknF%;r@3G`r<C;kP4lM"YADNZ!)W'q$7Xu7P,ZdSLhF^Dq-uMTTGu^#s#3#PQMij92N<M3*fC%B%pdE^NkaS(9`b5>U*-rRfp.lDhfh@^Vijm*U<'iri`'a9ADm85IbdMjWB*;b%i'J2XNk%IjOR0\#/KCh"IrBq[_3K$RL,$bYQ]:Z--1VocL-=BrZ(<Q/mO+j[H4'(%58I[f2D8dQf.J;h'sIq\SP_3Ak0F;0T(uB.Ar>$X#8GM6'ifhq&NaTqd/jV2O:8eK+K6"%@ZRU\)d=)Z0QO:QJL<\LkLX+hN/_^-NS3#(;iP+[25Zr\oIn&b8lZ%#t1*5^Nsr4%\L_OLnpc#u9S2]-J;;O7LOuac<"WKfsG:>a=l]UV=mN3Kg*D'tMt$X_rJ:4)@P*DN:AR$HSs-a7=!A`Z*$s5Bh$?,m!&;(Khn2;+Z@p:NtHPr'O%T?)L0k=](9U<7*@#5Yka:R+fr3i-ME97A(5n:jFSebQ$DF_S30.D,,<=,_#"b7D&9?Cj-3YWsa4H?Oei6Q)Qh)7N)+[%?mHDZQj,tl;-RW.=]j-I&<ULJ#0H9I#cQq4A[o^2p)k,s6JuV7X)<a8_(Z/LeCbB(K#1%a5#D-4o3"0r?k%Q#;T7n2c;A?^<=;[LBId/n3:XtoubVpLG\RO(at.=,=04i-WVslTXs:cUZ!C]+5=JA*r-m8;gskd\bK/:AaX>?`U2=C--tC-Cf;`l<"(-&lj2KfQ[su'#n$MO5n3M0OGP4AY76hlI`u9RMA*$-:/IM\IlD2+?]=GF=SU205IYP&'PHcr?cf%#,jR_MQ9"E8s.XSHO$%@,8D6?IUG>Mp_N+-QFr?\2OJ&8-W?s$m<3#i_@)EC#.*74Y6D9=r"P#6m^Q#&1F/#MAHTlB+e@GO#[FHA_nt,SW/ZYtkB6MW4NNa"Z0e.nke@:RT$!34]9GeBVoJ+l!23R_kCk<;'rP)4n@Q6Z]]Dk)D'>55X:ua_@-X8rh11<^Md)T*!e-HMITN;";$=+&fW&EhR7%*7MQio;',B1L7,Ua=\"9j42bhc1"%%0)@s(<%W%$R>(rY*FB0>f'6nK*5pXrp#u0I/&s@F=Op.",[*=,EMo;,!`m7ki4@!tu[f'EA+5^h=lW!<<*"N7Kp]:pQrSrfb*aC--e@Z0*,Pri)&65Be<M86m*Q8,FegqB`les$a<d/Fn]Kzho%HK:br4"J'qmT=m)j8_!.AfBD`?BVaR0ClWZfB>i'HVKY?;Y)tddamt1`H!!!#VesIa3h>QTE1[:f9pZq1e\Qio34$2<sQjZoA3YTUrSu8a\Fa&&m3I?GI\_SOq4U0HcFErMnPf]-"I[`"INR],'@VUI#hq^(tqhi2"F+)h+(E[nW2W/Nj`NR@?#]t(E3r?&c&%(lX-7FaYS[W*[/!nH@3!Vi`Q]iN_*S_;.!!!#:`[X9r"<S#8"(s[6^>sK&gWni^4o_BX.VUEV>0:j>oo^tDcC8_mEiE1gVn-337`8R2+Sg''Y4ic4mh1MW"d5MuVg9F7l_3NT5/4nUO3VKI3l?FZ_fO[^mCbd=rAJl%c"%?JTEJg4Zb59=22`nUe9E?ua,>5Ze<=hI!WrE&J-d-Xl_(+KR6&TUit8rkCjD@@<3ac%(\:7l>D`A:_SPh/V+=j\rNkm5kBUid,bKK]7?.N\SY2?STHA=8`Kb,'$=:]_H6u[?3DV$&4Q+35<ii@=0AahrBCWo?.:/493OlY9\N/Db(1u,h#586#!!'g=0g(Al-[M?AhCnmCL3),_?B_HX#sXa34.@/#gjOoeeDi0tcj>T7"o;(TO+"UheGltCYU#7l)#ZdF%2PM<gjJ;g-$jpb_g5mCQbL'p+.Lu;g<P/tPM^fI'`\46R(0Cs:fQ&qXj5^EkMLAQ,ou+#bA=`(4REp9VU'<iG2\(@Y1@V>bVgTETr0P0Flb9a#s?rflT:$Fe:QI`Js)<2IuYI#eaR.eqO:@;.GD+Qr8K]-ARKQ;-]q))P9",SN@sL)k_W7K!!!",aOhjgqLPfTln/3A)ifQG=%IFVRK!'M[$=s@2I(H%YCMG1nh/U^ZZqXfo;eE6/E\(aY[,"sW<L0G8hLoZT8T0,k.l-1?5gAma[^\(\ZEF&Cikc&[>g`:^$it)V9D*u>q[T+!!&Aer/[9H!!!"oK`hPZ!!"]V85K9d!!&dJ"9ec*!&.SI:]LIq!2G5N"TSN&0Nq"DzUP/gS!!!!Q>"DHi!!!"oK`hPZ!!"]Vh_[X@g5:oE#J&S`T5%fZo38dVYDW@LJ#/M3,2.=.p8;$,27d?HY61%WZn-G:_u'98@X^s3!!!",_S0H1U,q_G[H3/+<HZFE11AXq_a0U6YqPpfZ"$=$!!!#gh>3EDWpRe=[ennt]g'alXNSAK?d#A.'Yc\I`r]<pQcj@YLs.L's":OfB>jKYJTL#N\9T\jn@4J-UA,I+&V2PE>\Dq/iINoD,XM)6.XeR:W9S<,2[?m5*OoEKITc"!(0;\&59-3)_UmW"S`f>O]'"7#UgJc&Q@dUDF+&GKgmkomMtT;IO_GJn1FH_n@P9@SL?l>Eo]pC#bC_aIYFWL*!<<*"VX7TZ`M3PnQ_J+s=`Ac+_KVm>gokD?AdLb+_CVn#8'PM#&iJO&ipgJan4<b'SEbO$XG;t^Ra*Rjo#mtud[;A8kIgWEH\&R$D=1SsaW?0L'Ou8ehNk4MHtgp=bF9IuF6NfRCX/Df*HJ,^-E"F]VFJL/rZLH@:fNjk-n,(/(F>D@l;,Zq1&FA0KHquCac;M8kZ58EZBoUe'?Z$QS']n"_c(s[^CpSI!.7SVrKZH,cM,;%c5k`Sf%4s=m"D*.;,rM*jCo+,mTOMR[[`&>FV6_:\a[Zp+uq[M'C4qO=<S;W*q80+/(Q>:o8C*KAf43;K<&'!H+EAr'5FS+.e\.tOqkpCfg"4dGFl9U8+P=<<<J7%Oj*RYq2M`Faa:M!%CD\k:);7ab/O8)>MZj#mRO>FI#lnM))n7mS\\)&!!!"rmFrp8=[un0G^OsU?[r\g,e@,2\_H]KTSN3_r%@qO4Wg0IKJF0kgj1V4lFec#M;pTc^X-7H7HYjR+)QTZhWjI1?aKXW)I"kCJf7mb:0"GY97%=OU8P%U@St"'AbXKI`\)J-i>D6tX#KiN>t&`S2L^dfB<FCB=a"YiS]C^gg'#B9:O'!7:d'lkg&#@3o,0K\J$f+<.=Um]o)Jaj0Hkh]@o20/8,]<+f;(X1D%fN1D:Q,TI4`,B<f6[kEBMF[jMF\:RBS#"`0)'FeAE,SjPA.jo,K\oWo;-Sof&YU;m^3-`)S6mm#Z91,][nb[10RU;gV3gWNO*OBAH]QIbi8NcK$OJ:gBJRc["2t%q7TqZs3pD%EN;JdO-,67?X-OkS8..PGIGH"D>%#Xtl^E/DcUo8)DZ[9\a`",B*;78s80N2PE&q0g(/3%/s-)!!)Nepnh]o,g?L,)s03,QooZb<,8**b/BeB,ictW/'^Th3Eb+hg"?1>4B\]!P'h5#P04$ZkG%+N3H1P%QUWTIdN4%(9:PD==m3f4EV>nE\Ne5`p.u'QI\P,Sl"ds!fQIa2Mq@aWbl5"N68%k)>No^3_fb_G$AcbQmui)Zqc81qC(?$Z1>>$4C$^u<^7=;og*gtMb&Qs_V2IZ-JsUBR28<Hg%C$6<Y9a/5.DG3,#QOi)^,Mq]5AKa>ZBBZbnl\Gr3qk[H2KsR8pNUlg!!!!mOsq\*=_I902*P8lSu;%I^uYmtDZp+@!+:bQ;M"rM!!"\_,U`Wm!.`H`JcYoP!#R:5-ia5IJC-]8!WW3#(bI!]!!!"LdJAS(WZD-?!+<Z1JcYoP!#R:5-ia5IJC-]8!WW3#(p3=#:]LIq!+l9=$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#L3E.S,k!!!!g6R=,\z!!!"L1%P>Hpmnu@~>endstream
|
427 |
+
endobj
|
428 |
+
110 0 obj
|
429 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 157 /Length 14698 /Subtype /Image
|
430 |
+
/Type /XObject /Width 777 >>
|
431 |
+
stream
|
432 |
+
Gb"/lG?bhrK"q'>muH)W\_Z#rgV)?_Ap80\R2r[\La]B98W$p$=iYM%*QL8H'LX2kMMaDEk3SI3;3B371c.4*3p1C&#f!B71f2Q_&=r:]H2]4lhb%fep\X?(heJUL!<<*"zzzzzzzz!!)XS-'NfZHbmE[cN!qF!9b&+X"F""4Y*6=!!!!Q:d?j(1]dXW!.Y)<,=EaV!!!!95Vtea!WW3#J,r'5pGj-LWJ_girU/Fj$l@5sR57#D3f]TpmshB/g=Wa$D5b(g0P?ctIO==4mIVuK9(#*Yg,kdl1O_?3=a8mE'?(moV^=4Dba69TRsJZ?!!!#3,D\hXD)?!l`:'3f2Vb+C)`?0gHg]fh0%rNSqW<R=++%tM5DNq%^qD]#F0[PA5+T4#D.1@MZ)PNkBES;8",+sodD!#*mk4+\bBNrmS.PI.jc`>%VN-u8>SK3&NSNp@(Bi",=-bW?6jJYM]DT[R#%[m^XA-RdouDP<E2/PY^#p%aT8_QGKHo%1TLMMum0.!u#2T4bYG&uprH!cab)Gi)Qnpp2&C9fSdQo\k!.Y*%l"J"n<o75`<>@Gp(@]dn6KDU]7;h*Ep/Nr4L5o(n=JIqI#Pr"!I=ENceV1&A6rM'30sb*XZS/'#S".1@c-/\ihA!E?\'j?16"Fl$Ei5eT]%)6>d7F8ZmgnQ>_,82E?!IBW#QOi/#c=@onP"5HT4F2$QgO^)1uQuC4!tp\YFD"]:":W@L];uVH#P,G4OPF'jGTIreW".PP[XS;%C&prAiESfBP?C4X$?,YC#Bg#6N)Y>(<C[IXm3u6ZK5c\gh?Vj\LGS2-(2,I)`@ZQjHi2_'PU`YH/e/Uk(XT"`7\7bT%MPcBIr#C#lR8^]10.4EaUEjlH<VAUJ]N/r+FO'Xrh]!MFQ"BbfgqL:/n^i3`D<85C@)Cm6%X;)E"KEYD.JokViE!k%"DO[)cn#m7b(L29Fqt%("oD:WlXZYQ!6bPbZph]nkq-!Zol/7=ljtl17&"[l?FYHtY\!Fm[k[\^t&[&R?[/AZ$E,WHhe(KW=BA^l%r;)9OWPl8s%N^+2W4gRK*mSnAG=L\HQ#+?%$gea#0VN"9d&Ngf.GlVWq)g7[a,-8./r[lMdr`c[qF$iS_JnNZ>A;U[KG\hKCX2Ce&jnsN(P@t-L`SCR1t,n:?#f;)I=h>(gQECoatm9DHa_>RHrH5m`[hg182dBBHb4`l!<]i/VF!!)5-Rguipf14%qV[bRAWuGBj;4a?M]'=FEr1IN./giJ+i`&E4;`mf!-Q@O05Pa-Bk%=U^CR4O$F']YGIZr\8$huu95+F**^.rt;:\:^97&/o@+6mbs<#tg3^GGmX[l.NTBs*=o?_1&qU#DDccTc2D;"O"nop=K6M&Fggh#"Te1pWk5qV__FeL.fJ>\.tt?N'kQQ2:MJQOimFr@&XBX#L?uTGm64ZXOuPe>bUA7FW_WgYarDCu>9IB>Y@sh6U`iq),^Ij/uU6bnA_WfR2K;QAc=k?S.;L&/Mcqk\&tH.@[VbNGs;CgfUlP20U$$cgRq-lUTV^bcJHAI+r>akpB`'?6*rMcE[CYp9nPu2_miXb_AeHs4e/2A5BX0-4f'bHoEYKht-6HeUshu5[KA?bK89be&23#cM5:9Y9Y^S=23NQNniVqWN%T#J0l1_k4@7;`imE6[!26c[OXAs`hed!F$D?kr7@He&]ZMq@>PrESZK=a`J-uWs6I"/iT?\p-[AY,a`dXA;U#L7f(EG9LjHe`!!!"@JE^`HZX%^&S<EN7K08o27;>PtjdXofR"*NGKVik9#bos:.U=<'aH#`<1bJ"4RX8tE03(F=>O)d,J#?Y=-5n`f%r\d1FDLbdq7ZF_B#0rM+&HMM5EH)VoURjNBQn'dmOh>jBOjWJF^6gB,/8A[C6SF>Q/TLEqB>U6B[kh5k+#]VZ2W%gIl]-PZmdoq?<3KB3$kPl+]HY07urJKdbio+?$(5\s-PT+hTV.i1r5../\YSo)k>D[I:LOjbSbn6S$!n6C>bYNk@eJq2YhBY[RkA$Ui18)D"R+h;.l@X^X.hm`5IQKg7'mXZKtj\<1)(@o$YIU"N/IX8ssSe-:Lu%?us>+(<5seK2UlLY\0=4gO.>/NKb=(7PN'Q,#VBGW<#^M+tIWkSI2.N=`$7M)L/1BOS.PqF=:5b!+;!?lbk:D-pF#?WOP[V0mQ1#:h]n0!'7o;1s1"u)K0,_8E2Qd(Y'W*Io?;rPXYON(A*Y>]h:#6;:@7ho])JA8To'C3oTRhPsq.5N>'IjL1oWnlY';P%^j?L[bIGJCXY`tl'p/:dY'5Wjmf%o8rUe/l$'"11h%kI\#tWYT1f._7<UDO3rG^@Wq<G9Edrs9'M\/Hj9*"P4#f2=FT>.)\1agbqlI=jC$JNp\*0+"BV?Lu,J=q+T<GgQDULJ[mL,1]9"ZT7B18t9l?uu;F!L.VbGPb)[hF$=&$IpKT)/EUXeSaKRqSb4j[_8mV[JHTO-cb5r(Z(k2[LP:P5?r]s'k)*h91fCRS'1H[5OemablHpB'qE+?E2f`=`WGm%D?/HCHrhu>c,84)V8epB[fkRksKQQbqpJgoVO0u>`\]^OQ&4=ojI?HHD/ae!!%,Z>=PB;OI\I+I5%#_X"JeuLAY#:ml0kk[8%sA'_.#S%97?7fIIGkX03b;Rled>IuoE0UqYl0_c5e_Q.)m.)iYp:XnC!;S"+Y=#I\:MMP$o`\bpRZf`pNe+8FHj73a>Z"49T5V]upXeuN_mq2q1#%T:;hnW<WV1c!FVX=JO?p%4^7oDVArO?VKh/8T-O;lXP*8$6&0H=0C(dBfCBSiD5*=k,CG1P:UERTT)i(NLssCD@<'9%NDrk)B=Dbq^?_6ft4"D]Ofug]SK]aF4'F9l,OR!QeYCpq%\?Li0Edd\K)(s-pN<A^%7]H(rn[K:Q?cSKQ,o^K^D:7*S[p?0bp25/g;2k.4@kg1W<[7t.LG/nu&ZjN0L)2#,,[>1Gu]ZT?dcgW\Hhqha+<*kH;Y4^Vn'!!#(</Yg]HU]DPem[S*T.[li[NQ&0f_]Q>B6>;Vs6>Y/>bU1SUn4fYSol5JY?JYF>MGljd.9\23Ug"R^2#7CSg;q?W3W)CPN&hSSip.PU)EQAA73bJ%"49T5B4I/4%iSfiDQ:<PJ+eqAEQJ)/)E$*t2mdoMW_&d$k=uHq=r:2c5R*_X2&]6F>1Zn1Q22hP_4bV=DE,`O=0fVp/*.5bZKE0V9*VM+h)JpcMWAJ=4,l_;2sf8,nf;U7nn@,<bo&nB[!icaQ1_Pe;(M[8p\7jpLT?>As*s@Fo43DU[n5smTV3<BM49sqWUm50An-nbC,/3oC-W_t(*BSo2-d1V1m1%,pE/OVcbg)o5Hsik_4b#mWa+saN9e=P&bSnq!<<+m"$cV6$hf$+C(`ZIpBAIY/j)SQr^GAD[I.YhDY'&kg=n'k=n8<)VsI,8_90.CO3AJk=N*,2>LFdCjD&egkfa_j=ra_]=[RW*_9]aKb%oJLT/UAh^&aD\o0rOW^/8%&GN\mdV6bQJCh($;Np`5N)bNmZ1,F-GoM?`W:>J[M3aAAlgX:cocp]2>rGQQiNRXK^:[%3b-#FT>B'qG7L!hsJQp.6NXY^"X!3JLCH7u$joBX8q<0r^@MI]01)b1A81UG)gR8;\&o=A*$SEaN#(&GeW"`4f7g`O4LhlUE\UWFjmOal9UF,$+S+lb:8E`Uh">(5'oIWI-P\QRmf/a]egT";tj`E'^Hjp'@!kB4AOW'OKrmJBjICo4p/5%J;nhd\sq.-X4;q:XguIFd\-X.e[Qj/7i#HkV!X%2fNilnaU!2I-DjMFNU'Hdp]>f(IDfVC]ZL>]rjFH0iO\ND(?i02rhi!.^(p1jVB];0,,#Kb`)NoG5V/h9)kJ5F'fmXL]5Dp$^#um`2Y@;r)4b[o1P>>D03`L'O8eDBKmH1](jOg2n"`gaKi/eQD+YXF8;Bc1mkW<FOrfqj&VZRd3lSW-^KK&!c?#Q/_/[4t>*j<kc+AHt,1I$+D?bWjHPT;AJYkl"G=olGrJ*&`g<'Cl0A?WX8gIP3Z@pYY$!g)?o;9gRAYD2Im*2D"=uS6]*X)"'pdRc&IlJhg1CWi,YVYVYf<rFjA[jA6"+50s5@8RAhFrKh;FI!72=67dk%JU2GD7hDW8*EoqRh;a7a6eGX*h3i5/l4%57@gmOW,H`o:7[K]HsjRXn%bfk2_2:&RtCkA.GJ#p1Fb>trQS#(0aq2KM6D)QdqT8e:/]0?7nKk@ssmBq!*Jd!6G`qZ+n7L%9%<kc-?FkJWZC[1qh%%cMReY^U:@i/g-GQ/sl@!l2c'a#_B28<p;2X8JRRj6O%gYq*^V23I,Vi"YYfuUe;qDZoAN,cSelCXl>We%<A,H;e+bd!qooC:n$?i'/]3Sg%U-&Ye#MDWZ([J=+'cB"n?.Lc@X5R/DM]slCFV!3$to=-[$Qi>g\R;*Cj9sgJ#F_14$QChjAQ;X!e"`JL%oDYjPj-Q(G2G<e8iCNW+&S/HZ-@*jI*=CISeog>_#iAKd*k5MJEp?K]Ih_IN3oT/tRBm*G_>)>2$[m6Sjp9VhGi13`o$f"$?YoaS).@#n2UlBXQNqHjgntKQrIM#_7Is"<lr8eQ]D(bY@upkqB5Lt%/rSUJ!&TNG-Blj:o9JKaD1DSkdi.Fb1hroUmGoAD^;eIOo@N,"TD5Mb1Aoj)Y5Sa5FsF%^*)S@g)?9a;3lk>@p4@^@Sd.$1b49SEoM)CKr(YjiCNIMa^Ia^`eR&1gHJs\:^IeS.!!%NbFnTQ3L=rN`Vc%q1h^Ep45KV.)_=Mj)J"A_Uk_17-s!eHX!!!"&RT-Ae\^\,0]4J=W7'5>Y36BpGr:<.MT$:<*?FiAL$V0jg<>ki;!!!EaLgOGDo'u;H"8..RmJlD>jo">?7I#Fd@\ss%kl%P=zzz!!%Q;K*_MX!!(B,l0GDRzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzhDaF9h1H8*#U/QDp3niu="@^gQsX+OkPG6&KFkjn+rUo(&WIod&AmiMd:be'BETK3&9b757KZg^,7#HGY^8eq)UKZH5mSWeh(,5IJ/6N<63nb$?Md_Z;A:2G,m_A5CB@:,bn27N5FN^,?`d?$I7<g)]+Bs4Q++JM(qodV;"LTBRsnhkA4J]c_p38mg665UQ(b"Jik]61anrF+l:stBT<GXIoN4mLPV4Csb%hZb^RafO36')'RtJgfc+3.sR4;W_h"T9flpd%JN1CW$X'!g5oa`4!nGT[X7O*M(fq,u\+W?d"A2KJ2**M2ZEYq.[NMNYHmZ&g$j9\dXIa3XY%\>s(&ot]QS9lK*^4R^tGfT$B&Ud5bAsBdF:6rtG'<93EhmuR?GYoUtjk\VPiOo.EH1#uhB%a__US]'n#h2IQ>4_s0`A_aE5R8P"G5Go/+p_9MQX$pq1m5+2h$@K&VW!h\,!?7LCJP`?q3mGan9Nu>r>(>4DXB-!qm#29B00<2_d2DZ5-7kbQ"!YqlBOL*fhKp8XU2kaH,c^;RX68W<e*!:r\Z4G%k$^Fs1jo*,<Z=L,D%0-qt&@XcD-MjpG.!IS>b`c4q@F&<:ot*UI(C2<I*GM+8]uJ$HVJCpoVa<cTf1ZhSmMHNTa!7.PK)QEE^"aY.(1$pYt"QMo=\W_C$iRAtH2*C.fW;-+>2cOdYLGql?56mWheYP?,=%)=P63M4h'<+$p7lqe&-P7]u'#c6#=`@fp%;^?@m?,)/f!MpGh&SnCLJDVBI_,PC+1EcI`(!kC3-F](IJGd5eU(d9J:b*+2S6>'C6:4C;/>r3blQH$k^h9=fW']kBcqu^CL<\!tFI'p5cBV[&g[FT!dq*M>E=pS?I.P8<G_TBu.F*CA<;t+O#9/N@p.Eao\El%Jd19/;NXD9mEf_S!UUpB"?P9![f&SVTQCN%E;3V-F^U^(MSld_a-Zca3>lo\nA'm-B?#U/O8qdD=%%qk!2>[g&3DHlk=@^M.bq`%P3ap`>MMFKdbEYW>/`bnk0E!ft[lfIq4agF*E9,6ce;9&i.X8jWb(lLt@o;1/Sj:]Oup@[)nBueUlS9o(g`:&2S<U0%a(e#Ya0BMCQ(Y9D"F2\K]7;/Dm#:26JmjoOAF!tBtG\!P^EK%/lH`KWa"#K%j(L(/3QQAdNQ&(;1%P4jY%S7K2r@*7.6MR/*0;DC!9Mqkt7iJb^-o9Y2+NEh]aj`rQX7+(G7AC_:b>i:s<]Ct``l7"0l4q9NV@\FZeeENhlF;?uH)j(oGjaN]lIBoP=^e_*)XaYc7MB7Q5h5TVW,k%Z7ad6o$!%hm2C-2B1nej[K"+\rF`dGG2L*p$%"2)$DmNEtB[j2\SBj5<H_)P5gh9U;h,uRLdYVENs5"s>N&X2ff-L*-ABjka9M+ZdnVjXn$+7CcqdHJ[U_?2&5!K2^63uI)qe7lb/!ZqIFQ#b(NDroEB9UfY6+7Kp`@do,P3S'@Uu94q@h==Lii$&l:OPmu/a)MU%^h/6$?XZd;%\:3E7_or<<K9h9s=(m,?=EmFfqn)?-\eaP\_(oBM1rqrEZP'`b+_)P+q`U8Y]o>09VMFDgq*7)u?@0.a#NlkN0-4Su:q;RDOW::6)AnQ:gJ.h!@\7SAoGB&bZ)OJ.P'BT%S%W;8$.6(:Vpc+-"@m0P17s[h4:Y_itUWK7(9Y)H!PHTA;K_eTR>!BV-U*N/(iN7&'cE$sTc01_QVi\[LcgZrq@]>-9Mm*0!!-WT(0YXf%cS+78:*CemC*p83hFr*IbJZ$%@/D9"8h:=fF66;Pg)f!.uOSa,M(0ZMC`g;Yod4B7^u$:5"Am%XG.)Srlt5PYR.KFi=1LdhJM6mDs\KWoel1`F^b)F4WPK\\/Qd=<"[#XSe?ls:9`#.01U&4-Y2pPNW@TLC\h&4-Z7=%&ea/YWi1&45$_p.7(b)fu?/KFl"LBV.[;O\c=q7Igl\q*%%L+b]<JLdhJM6mDs\KWoel1`F^b)F4WPK\\/Qd=<"[#XSe?ls:9`#.01U&4-Y2pPNW@TLC\h&4-Z7f7"En\?&4SJf$E+<%_N>7o4/5^*Q'i7AOpMY<iB&a!VP=QqbnAqYJ]``D3.iYk[3O)rJOQSph09F3qs>7U1eCmro^;#U/QDp7l:h[bZ]c&Hjia&;O'[aj31-CDc_W(;CY9"ORKA#U0++gRk4&:lom5[KSsA7qZdp,$rRbW<?WaqeU.Qo'uBO*39F_`bF`7@u9:KTs46eT+aM8I/B2\E+7&6>:!k,pTO'u=H^MCK&Q\$hBulF)%jWhrIWhS:j7N\guQ6*RpeSkGF99FTU7AF<$i^ccBhsNj1]%opkH'-BLK=SS*cNlVM:25Et;^1p!)`Ja(Q`s:-Z4!VOO?EUV4j8[DuTROG?l#Yh@92`<m]ANQ^VQp\`f0=+.i2mL10R-f6e:01;t13Gl("Msn6e>V?!7K!Hb$9.+t/\@]=sc3q.Rf8DTa+G:<CDR<b>,8%]cg61E*e-JdNj(iNUfmJ&sld>He`:+YV0DoeX6I7P>_K!c*.U>Fc7P0W]IHFF*=nXSUm$Q<>P0t!rlrZ#mA_<b5^7b$Oc%=Y_7+e\(o-4.t^?K0qRWt2uod\=J+KVL;S[`u(GlB+CMFLALkn\3Nh$O1di,4dO?dtW5?Jh8:'@DVLLF*qi]F=ERkP%=E="(#l]s6GEFn;qS.N6tRSfobfpiU`0e7!ZX,ZY9V`E*gW&`Y+!Ws-AGHRnL(Ker&Y(?ZL*Rpe8QHm)iFX@S.N]f@^7gZR0HKFgKF%ed)>,SX55>=D!p(]T0<QjEn(pYGeb(Rd&+_D'mGCp#[j3:D)pX')\'WLk^6g2ND#9/_HnN6`e_f=[n`:`GB`Dg5/Ih*IcQq7$XC9L%T2cJ/-$>"$UDo:Vi*K?%9MDP-f$GE'+H&RL-UK:BIg(WMhFLGQJO1idTho"9],9HL(3e#%e5Ek4.hd+s!-;lY2L/g\HZF`Tl0mG_CEd7'#Q0%7Sl)KG<hMn6gWkEQ,mKFkkMr@Ain79*,BgQS%=p*+.$E8:#s\gCi!q6rjRZVDe,=64I[C8aGPg5+b%08$0,OC-;GI6;W#nsLODa;?^ZrSpNH"gub!D0L"@3M!F!]J^ZKR7IlI/+-7hK:B;^S0f.;kgFYOfQW3BFj*ZX].\)(B]nt;o5fh*q:&[pf5\Bn61Q_c4Tgm`Kpl]9iCYCC1)d!DN$G)p)=?G5(2NIRDk2j@]#;M+C&N[)@:*(GKFgKF%edMJ7((":gA<^E]2Q4+6.rs?(^)R.@G'\r8&#p9&5HFCoGq."#I?6!V3Vu^K44/[l?I\kdd8_qJf)5o<Z.NQ6%(R^0oAFlQ)UH`A2]kgGU`WI,:aeB*GTks[jr0_$L[<SpYU>$T6@/U0\33!ff%Fo;^3@FF87[28*AMcDN(dcH8MXq>F`l#0\p<^fc2U^Q3o:jB1t>&l-7'9&4-Y2GM3"j&TuuC4I(kQp9QX:<VR<Na4F%.))5qE_gCA)j,"M*iR!=8+t.qdGg-pmCT?9-UrT4&RsDXV(8QpZFb6'`>LDc6fj!.>bh9@7ZA!H=[d!0WBji+o_rb$tSD6*Kfo@eU@ILNPp8)XDFr-ncmG``'-[V/)NFk/\H[/=gI3beDhriTLKFgKF%edeR"M6:8ne"1o+m`MIN<ZbG7M%ll@J>Xm1n[8oJe16S]2qCq!A1#XKFgK&]cn@(BG$4HKFl#g("$\[MeE5:KFi=1I1hO\"s$#9+b['Ag*b:H?EJn:,'aCiHljJa&An057&'c7U(N%i6J/sq)@^?lN?Elc_X8/dBL%Jh"<iF0G-?]k"'S);#U+l*HUTb0clsAo#U+lW/#(FA(=<CS#U/P@qb]25EV>A:Lg`(mPf^=S<0^N$=q\c`kT$"i"&X*&UDJls+UB$Z+JuAk!I;ssEnt5Xdq!l4iSA8sd7@/?3%D3^:#;b1"lZBMDMa<!hI4#Gl.&`!^bS@%6snP5LWA.nM@9#mp69):\knANI<.Va<LmG&jA?>H.UajaALlgZ)&Z;i1jMQLG<iVDGtib@Z@cjYrKI6sa;TE"n9h';9pOdX$>"[M:OYJUBF:]6GN,!^*%9ha[O;s2*)%5uMc[s"o\>`hBLdrj5AB]G[\m6J(1*ukXA^E<9uqJ5SMGFkWo^tMrC&Kl>Lr_)S*Zj'PH@TFqRuJ>MG>J,_L5XOk7aOg2b-`6aStO&9qA<=2UP5Kb0tBd"m%q1C+D]l9ZS4nS2u>'cb)Uk7eNaFhS,L<p5qnKm\HZVabA51jN5jF\!XI+-+/SugsX.HdO^$<:8c9Al70=LAuap^UjPsYQ\&+**%JU)gFkbD@%Z)4U6/V_FF5i0&5u@=.]GYo'c6%8:k'6/9cf*=EUt#&qY4?C_($2I>gJ3qqMM;@(moS?BJf8Q)c_f2([j"LQ+'HZGs-7o]R?^"B[i$LpQJY.l'5WrNS\h/?&_<C4.tCt$EnVM&9D!3OJc!VjHB9Cm*A!+'4icCLb)#"5UGQ1$qkbl-koTqQDZmi(qdU??)CSad3sNnN2uhd:b*g#0/GhLXX[C$`C5L3rp7=016kJOI[*&Q3<+]S04Mpn\R4c"gK?$+.;pV<[F&[7p5GXW9n_i9d7@GD4s`2MUKtHE,Uk/^)4Yc^9!2(6ZX.2RdpE*Lar8%4beIseZI_SkqN;1od%7W5Mrh(@JmYiD1a=\M.[,^l>tqYcX5g4+AgY!-HltMJJrJBge-G5F*36(,B=/1qc2JE:PcF;a\RZPGYWn3HFA`gFSO!f&F"`m1Z-R<Vk%II#2U4*:SOqk)?S8.U!,$oQ>-h]9E5I'Le->IS/[h^P$PgPN'-$+p@os;nNg!KcHr_gXMFK&rkPU&`@k7pjO"Y\^9dL)BXfo8$:cEtC+-TF5B4[T(:NF^,Z@pqgXh2<85d"h2l[nVZ)L4L%iaO>udXrZ)+un$-5(/tl,MV%E<MqWB"JlN`bRQ:fWK`RUF(l_59<sN%RWjQV:$g%ba"A>HQG)p0L0#q\ohbXe.]W;@M0NGV1Dl6g[\7D6DV(,9?ehHiYCf^gj\R%%>Y_HBFhUs>EMYEu&+ci,)*,GmNUsV"S?#WT+FA4%jn5]mpH-%[6EJ]*^KkC<RaYErHWeqsnmYNj(WWi;,?ZXcWf%UtLDQ>QD@7_YP*N!dlXSJ!7I?+:Xn`m&;W&56ZjLF!m*@as9$J%d'o\*q=hH]D4>cLrG/mfadP"?o3JM9MajZmFH'78V1Zk3?&(*ik\s:d7XM#EZ@<'moNW+mdd?Q)oS$QG^H%_t'-,0`+(7_M"g=_c1#gQV&/5:I;>ieR!4j<GP::H9l=[clsP?2hkB[k^9Pg]9K)PRg&^Xt?0m@Pn/[]^%U2+d39?_P*=KJh3\e,0RG2]Uo<H`;.u`mL`[!c"R9W7X9V4fD=4/1u)SiZ,"mG-=UsOpV@_:SiMhZDNA87Q&u%*0F@P!\14nS:e-9MWkYl\12U2=!ESaT(^cQ8OF_)6UR6pUH"a*Dn*CH$Ye0Z?4Ro,o#=*P/ORsa?d9N(;4&o03NZ7;g6ih(O8W3L@03u47a[$(:DBA6?^)mD2>K/@_TX13-i^TneG37s7B73qr:Xb-0h\$[l_@<oh5)[-p)BsCWmiIGkFmR?U`Wj`hY;tP4-&E5LdlJ4<W"=bJ*+,e=n][*qdW(H2>:qjff9fQ/'CrHP%Dq-D=th@.WPc,ln4CB'[in'd]G-@q0h'a_nNE`7AG0?e_OfSacI+",uGEuT0e:+j`cTRDfm7YcO.;TjN3\6):jJ)?a<3=N<m.m0l_1le&k=H:+RN_dtFYiXLu-W'D'<0Z!U"k3ka]\Y@5ARW<YCLI5KqrL3jMcoec\iG;&F\EXZA+)A*J:?"E(C`Qkh9Lrh"P`H7#r($1Kdqu^CL<d)o<dPH%fNNBRnemqAe.X>Vmjqe7Qb>^<BNQ>S[Id)D_/#0&gar_@(S1[lDVIU0#>ZIb$W[7SI$O(Nm$M)*@W`E@rI0#Qq^;sVZ+P0E1fKZ1d?6bYsm/B$-huMo+3AN?[XUJj_f#ln7-&'bGVsPt-3_HOr9-1I<PU.P=MX-Sr:(OL(84nd+6Lpb3T=RYb_#pcMfeP;<nVTts*2<i_n.f]'U6qK9,-9_!N;Cc-d&^BL:l%0g$LQh0Q(tO(;.5#mB\m;UMbA`$c_M&.UtRBRQ#r_n'O<jZqD1HB?BAMJ+unab\P/ueVEX/S&VZ(i<]-Q"?O>0Od`D`PSn_HfK'-tA^#f&^j&W[rXjA]$M+310ZALb2Z_E=7XY"Bi[+oTI?Wnq):.i7DcK&E]S7OWOO(Sf8[/&1tU"3'A8icc'qsTY-$R/_Hdj3Y7XjhNm);LWDol>>0Ygr,P3NmVT?Dc%YJOj@X.ZA6O9">=RB2BDHr[<`k<_TtDnfeqhQ?T<cX>Nj[*-4q1'ogq><_YEn\h+U<4d%SuEa>fiF>W:LrUT[6H)ljVro71&og6[R=(7:U>-rTU+[17AagfXV[G6"h5JP\\NG(u-.a&VLaZicT'ak0]Y,?ab?,DmX$551LS`'o5L"2n9hjp/O"?eK'g;D^am(qD6,Uhh<3n/Vup9//*<q)`/B1EN95tP47I)tNXmV)h\^kjbb@aa4_WAY[*">Y*?n\Sqrfb26iX0jEk_4_1rK'T'#WVPQ7*KF[WM.X*%d3pm@j<T=bCe>D'Y:9mXD6u^+I2j^TAVR`77ADT,'?0%VX9]>gE!p+&/hZS(dq@[C;.r7ik,U<R,U,,?X6H@@?$*'Khabgp)GE$2o'2)M6-2"iF#H.Z]O*+'ot`'<I2A(h056i9Q5/.E'rQt7hsKCh]?b(okLUC`f^1=F:qks_/c-WQYM"C/lV?1'b<2er'uIa7f"*&N]i#OX_d(!C9$0dH,H8\:mW]IL&(:c#B9%pAZ_M%?$-J4/;37FG2PC;XA1"c0UKtOmb#+6\B>bP!p3Ik9X:\F$7DB@=WP,I+)Z?]"b0/9%UtK))m1NQBH#WV_nl@VUg_1s9j'>A1$b]iMkWnFRO]:AqdL(3,'a=!1A4[`TPY\b7=^L4[WV3TLW\EdiiR60BX\tHd=F9=QiM,P#:\GPe',uuilC`ZN^-]1S3be*Zg)>C7giD#&CAJ>*G@g-^D`+C_/`go/@a96B'^HS"X=?n4UR&Kf=cXd*DE?gTmY7XHXCu]8FnN1-Xh&0k+Xa;Q"Yl@>8W$21UJBZ!mr4g:+,D%$f@""f;G/N]@@!/L/Bd-qD7-D*Y)Au;<FUF$8X@Wc$;RYY8Xa>B5tTmt3@up0\lt^"1kRKB0nEJ/KSgh<WT<7(gB;L+'M-/?EW"iJ,-%%+<kYR'4gL\K,AP_iT*(KFjt:d"#cI&=,%:%CH\1bB_i^&L/5]PY[@$eue4-2>Z+15/;F]'4:m7mNd3r]j)3)Z'c.#1WPal6t">OY.!qiQU0?.4[D0VK-AF^VMRjB:DC0l<Q`[Db9LLnQ*Op<=U]Qh2N7Y\0,P0tOD6mpB\,ZEIG8a>I*8rqDBOf7B)eBH))le)\reuB^X>/+6\@=e<03hF_e]j.cn.O0ULk^9nGTWH(WDpatgl(1\iMKaNKmJ^$+k*fL)e;*iPD)B]5UKJV>]Ql*RoeH,J96\$Z<_46X9!a^rWn3o&/!WrK9+#M./PE!GOjPf<ETP9*Dm6=NN=OJ\;)g%oMFR78d"U3>ii*OS=%-1s7NU'8Q>"3B[QA>QWPZ.L$s*Kp^MrhJN0Oo(Y&O08XIPuH`>M-j5ht$n'XZ%]d:d1DJS_X>:YV+0ee3C2["Jeb-FgV*bAPk<%.fPg![:O>ZXruH,jV[bmR5.a*_RB!?YC9YfXaFEOngusY<f_Npau4CUnpMTUP]K_eN0];)uTpeaNbY9eR:9ie1KL&j=*#i,B*)EdAV;K-5s9VXbLLWmVin&cZ0gLphkg0)R\IdcJL;DE1OJL8D5R1#45"]=>R8]PO6k:QG3Q6S^Q#lUq5i\8ET\/Fd:*-9=9aKm7["B.\g;V"PS'fW+Kce<OZ3kBCNa;$@V*(CH1trW!?oa3"OK[H4Xb6:L#t;0]O9n*;s.0GL8r5Aqu>qhB-bK-Y&!b(VbtrAt?n<[iV.;Q:rmUgC50<'9<m8Mag<A:<Z+@iGYI9SCtMd]EL$+g*)Ktd%Qa;l:qm+'/ghf3u0O)<neiGWk(<^SFR-#Q#JC"R2o]UNP^[M&cL]u77I-j^g.0e<V<[.24A2(WLL;RI=hA"dn`g=,MUY\c]UhaZIEMi(4/\0jGM`jR5QFmMQ(SNdYgUo4eIXt\dgTCat<<r2VH:l-BsriO>\YQl1RN@ORY8aV-**,fNYKV89t*!</PF26Sd-<81iu,#YDGZXoCY`4'kcmiJ7JWBV%VhP39L!qCFW+RC);-85?WRD<:!T=ccuu)j5QA9!4D:Y?bUdV!1^N>=k/rYA:%*Pc.q(?$X[2@9nYWN;4ZE82/R%frETO>m^)o]4mlYWNK2t*@4c>0F*:GVTK@qW+C`upPO,srE(:58MXpL=MZ3orTQ$&J70,^b0mQobQUeQ\O*SKV4<JgQ[n_$EeWJT;25<s(OtVqLhbLnpEU=elO6.L<DlD3PshADPQ#OBNS4VLSZ5W</&[e#l$?!,U65EaAQ6/2l_2U[[R3b9^4(c)c:k*^a2qMZ&N*rIrYg]R+!53k&ac1fKP3c#SXYL+7N1/A;@70*LU+Wf&PHh1[YdP]--7eS2ETQ<8nI'Fkl0Cs+U=u!8<oi[?>tXK[R<I5f[Vh5bLDX<SsUtJc*n,,]hI6fP[u3)=GH).6GoFhr@]'<jgd)ZW+=t93+#;&+Tq_sNRM0MLKTT0=gH:s(cH4fW`Mj9+%CZ?_gN4b=?B2[*Lfm-BKZe$m(/%K/V]7RY\NoE:[Lh%2eE"%[h4:Y_itUWK7#b@7eDW5f4!;gd7>]MFdhuQ!UPUtO`k28Ee/'=HX:NW<A8L<dD?i-h,rQj;s?Yn1$p164YKbg-2M'&RCn%P3S/tRn*/O4c*k^^q\IpggIjEa?I#GWg7s)Wp75NQnQ#gibfc<?N(2kUD;nRXi)@%PPMX.GWat@to#HG^:ZGXFbrnn))dh=<BLKHl:$(U5RG9+6X*j@AVIaH;b_r"MdFr$]m8hZCg7p\p9V*.gbGo7!;\,e@aE%k`-%]:nL\$Rm[&jAH,nZYM\S<4M#g[HS^tJLmcoENOL.EDG,UTrDYH;QSCs*K,9$-mmWE'i$C6URJWS7HgUd=u"I@Vc9Z:gPPB:3[2)W[6")j;;(Y%^.\*o<eJT[Qjs;C_nSKu:C)^+\!lnIoGGIhpQ)C`;^"e17A>DeBOj9XT`$>^8![@;kIFUp%eRUjPPcd]Z.e972o_&<nq,3.9MKN$3PIe(t"t;Ar%M9p_K%Ub3S5m`A7]7OI">-9e\=U61skM`&S#=I4Ng7=h/.EAZsRUunWWlA>K_VZ"W"`rb(V^/B.%Up/@p"&_T..s\,[3UMBc.TpdYSpMm7+t1uVJ%jlu$2?<`+%E"H<L/&\j,-j+6I3]e9";?[JLt<8i*&S$YQ(6)GdmS!J+BkZ4nINQ<>'agFSb,DGu&@WYC,)'dlXIJi*J,96ucAKc6qBs("IHGHC/,dQ7M1b?%NWrn`L[IlD;$m\'K'#*C^UY0O*.3>N>9"]sr<2gIX5:oo0AH#iXOmQ`V"h4+DG$kku.o-j2jB+m`MIN<ZbG7M%ll@J>Xm1n[8oJe16S]2qCq!A1#XKFgK&^%P#SJe16S+mc]3E\mgtzzzzzzzzzzzzz!!&\TYdCdU"=>gR#u"_.':A"0'*&"4zzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!a)u`''+n*5~>endstream
|
433 |
+
endobj
|
434 |
+
111 0 obj
|
435 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 228 /Length 29245 /Subtype /Image
|
436 |
+
/Type /XObject /Width 694 >>
|
437 |
+
stream
|
438 |
+
Gb",kG?e'\pAb/RZSPftpUBbMh:\?eh<<?j:_<b[5_+Mo"@Q,*!Z%k.&I#FJ5sZ3h+G^1h;*e%n&Hi.!*>0J+9'CpROFW@do=Hpf&E!a("m"g9fDCWujHeu!HZRKq50jo5qsX!@`(zzzzzzzzzzzzzzzzzzzzzzz!2bh/*HbWGgZdL57Lk=ehKF&8pV*-eD?'Y:!1tl^4!.=UA:beNV7O0#jM#rDj8@VUH+Wa9qNi^>@rLj@gO1htE3"ZC\&2O5]-A)c1_2s\X0bO]MY<2pXSh<hf3OqC,_*8bKlF]2%-o2$2LX[KeB$MfWpEZ'KK$PU?17-`K3K6*QN_5JjRo@pXq*&*DgOQ>OlOM;0;-akXT.s?*TsoG)_jd&K:8gs..CNpDM0#-6@8UA@BVonB)AP)<g?Ucj-TAFGFn6?*q=K8b]Ib(!!$UQ15558.Vj5m-dT\GS_!`QeHtP.Rbk]tEI'C!^.1fhq^[?iFr\c=mcRUrWL,EsS1>Yi5Ap^N?<_TVn1W_7_i$i@:pU(<Xm8.D[Mrd'<%!o!FME6bj7IQ!oZ@(nE0`#-2klK:M!mboT=;fur;,/mNm)m+!<<+3)`!+4]hg&Vd63OK;@,aG;dSAM^VB$W\[KB%kR4-95P95GVmN/DWc-VZT@itg,#+k&J$F+'h1akV=7sW,#DXFl@sGbKh@!O29OPn<*WE2*eu$cLjEV]7r^J/_l1DV];Sc_lK`=@aJ*h@+P,_5!=cqhW*B'oQ*b,W;=72?5q?3PTdaP&0G8P3mM*_J^4<IY%igWY)<H5P6opajrrS#Xen]m_U]l%[PcIYRSGD'nH36`DgjaZTe6OI9DYBom-Ll3QZ#Q]pMZJtj1q0MJ\hYF>I^S);GU\F`Se`.pP`_gibiS.ig:?b+E)f\^$i"/;%S-WUX71)?C;)f*:=)[s\6_m56H2#4!mcg2eo+,C3pLLgY`N(q2pYPK+Rl?k^qo1!jpEoY*c2=cY9.o_p`!g[Jo>j3i6FtO`GQ%Ha8$]ln;4%"qUK>?BFg,8Ic_))">O((Xk4;@(WmL=[q>*p=_+j?U*qY!#'nW1*?q!>S7fWMh8q]k]r+NiSmtn1DO0*VLr!/A^cOI.\=7>!&a6EOn-BK2fNh*W.d3'"f:U"3tP'6k^8H-To<qO(pgJ#!\5H[.IfpNrLpH<PY"YO\$cRN]bp;0i9^Bqs:EFaiSXnObBlMef-g<r,&AAVTLY\&!Y6`L\'7'/m1a#4up]lS&SYfur@ZOHPg*ZSI:k_K1`VRQMYmH0W]"Rg1"k_?l@k!J/%n_3nJAQA27mi:/Q[C[N(Ed2HP^=cj8/ou<^=c5HdQ^mF[2E2gX#ehT(j6AbpfC$:Kp5=,QkuqlIRs/fG)#JJX1B6[29o3f%>L]r;,j/t#dX]p#`Hek+a?bhcqIXhLF^j\p3JHt1GHTWZp@t.]:#r](48Un`gTCuV`V2!hNiRB;>Tg$._\L&Wn(N[M^I<I9,"Cj<2iBQF4'O:.,f9+`=KERN`9#R>+3OT:VZaPbWU5'dIl+g<&N/=[$ic3&G,Ctsoru^ll3q:['R;OqT2kplJE^V:3WoL]j/9"V3J,kjiV(?.h0@u]mp/.6'WJYC4'L=)\G^Imq/b8-Qa:]+$QB8a8WGS`WrFU#?Hh9rB,Rpt*)V4_b0CWVj=aOuBm]`g1<:6q/a7*=X$MH4F&=h.+ud\!H6!&qT)NBdYfZ^8IUqL/4,b2k8LO`AqN>45AH3ldA[PN=ojhP6DsK2PONM-;r#4hAX4@KNN\=,nm?bRiUXgS2BLFcqp0mF5/[,)l48YL'9[D4sa,PMQFdkb)%+oo`-DqCV)Cl@PIM8>Ba!f+!oY(u<U1[PU/90X.pf&Aj6?jm?D)e'ap$%3g?XG0cbs=5nmedO#=$=H1KkSH^",JEd>*JXU>us&X47DNin\SV.rS<sE\9p\83)mSRn%=7t@%U)f^nVeIZiU4-9II_i);`'k'@b&EYX0i.J%Ti$p)+<@%cfila:c4)MVd[oeNh:tWcnU/[9Q/gH\o-HIscs#^#SSc"21[\(eFOjApYQS%QUVsSqCjVFs9RATFb/$G"]:a>9V(lnYtaPrV,hDN#fK$."huqD=<Q/^P]RP/fofa%QkP7mc("Rr0AFs5GJ"(GHJJYraO!q1;%tghq+3^:kWYnn@mfak.Yd1n&CXk1skg^JEgf9#7W*bln]!g<X@.1^?rZL4Bs&"Df9oZH?XGG4)+4B.=Ce(mJO/Ei>;p\pYXk=h*_$8kYp#LEr\3t)ttq-YB[ro-*Im:eu#2i1+df(3RPIiJhlC_>%ZZmU!>1RbT#mS..Coi5HOnc!7T&gFU2p].3;h?V17U%N*n^K;,d@,Gr;LnWZqI_Am%Q\W4.tSSXEF+dSc>'nE;d0Q7*F@At&^L5/NZ$IU*[DH8"f(71*J9*T^@q^$U,Xp@F+!%Kp)'AH"*96MT=j6`)8d%Z@.peG\g2Sbn77rk^:jrjVDZN#fK$Y>foDHA"W[-F16R&p\Y(0iF^hZ?p>uqUdBOPhI1Ei6AJ3N*M/-:/FqJ(Ff<L4*$p&lmq?9(Y&$!"T;o^*J#pX/b,L3moB,I"6`%<Dm7R_Wre!*GeoKSDFM55[:fN]i<j"XGMVAGs7+B88W\>Ii7Hi'V_Ak&]DgshV;Bli";N$ir[UU&.Z`DdraE&M2MT!t8#Ihk`XktgOm?+4C^`TqB7@aYJ-(dDr6kuQ!&0tb'Z0Tf(:t*Z7iol[>^f)4^58;Ca<iVh=rhl]Ab5&W.m%Tj#t/Y,S`]2fl]ERh^TKO:)#M*uVZg7.UKZN1$eD>>$$0sb]rsRPN>f3+]0_3*hMuXLnP)B8'6<AfGo"P;`:%WVP2$X(o9i;m]*_OD?`Y=dF-&J"H8X8G`OGbuD>FAZ_r3WU'o&4Fe#<nm*>g2Le(%o`:3fpNV/Z0_jWYGg[dY#d69%g.&BipUQgJh"P'd7Xlns4EhhSITIr/6>^V-tg&*$nGBFhgWLmGp5r\q"agQ#lqm8L[s6$!eXj,Aj0_XF[^gX/HNKc?2bLSKb+j#rDhGUr'"4H-Ege;n(B4e%A?%KYZMnJUTNahq+M@YJgc+!)qXL%)O3ms7=+%O&JslXe1!KX6Z7^CFV+TV+*.k5p>;!!)LMjuS/!G,?Y8Ra@t^h`>h]g7"J(6OG:nXb64,Im`dPkL6c/.SI1smkQH&1I%/]pa_LrHa<dDs#HGD7nra!k1?C&;YY+LnTGo;lE>>ZkSG>bh+IR")F]A*W^rnUDrS`E$:4*aiJ%"[ru]+]oeGO<A-2.G;*Tf);tt3"`<no:Y+E6KU];DN3*NWe\Y*a5feM&$*%>4mK\--kJplOjI\'_34-kMJQbfkMbu5\X2tSO\0=dV6PPq%:.u'+iQf;pF^27A#bl)V_F1B<V@JeTrgp%RqdU?Qoo=CU-D[tjWn$W@omA1Emd<5/"@l?A$5e8H_,7Yr.-)V<95Po`=P;*dd^[/-7(!pHZZ[,,kQU+J]YTa&S!<<*"Qo*hP"Q3"8i)W-V8lL5si9C]Bas[/7)#sX:!8!1-&4WaN")u'"hfSo!!5PKCN$4/+gP3"[]>4>_On*f@?Sd9If7ct?5\C&szzzzzzzzz!.YZW,UWWn!!!"lS;aQ]Wg^O#!1;<4QdsE,+(cNQ#T=1X!)I5cWh9n'!;AbX<6h/q^]j4LAto\?!<@'LjA4kG)@g!P:M2ScTF_)'pH\^WcCj.3"n6VGUC%>/!,rJ0:ZW!'%U9!0B/Zc_&-)_)5lOa.T]*Zin8r9;$46e6E"D#*jU<%;>Q@Q42Q@k!&F-RQWK@KTNMRf"8k%La=%=6Of5c48eD+?$'f(h@raoMDhD;pMM<#cWb::NtjPVYe1EA(JR&,b65N.5WM4hO0jk1H"+<j+;n_)p0X!<L[\.dV@;UPA,(Wp%e&LC`]J"*#GU+OXA2X*doDnS65A&^1K`'!/C>h_N*$TlK4Y8chh)/ACgs#j14>OLm88+jb6!\a#Fqd60SVZ]3A?uO%9\Z%n@s4'+=8M!PI[XV][nO-+aIM3(hHtnUA.H#h@M4hO@;M?gFi:qj22\)?;]PKbEE+=[$XV9B30]:/hFC@uh&6+_/efcg>jVh.iCf:VqAbf+t?ALe&E'AZWJL8hF5MJW)2LN_FK0mANWTN8^$K6d5)k9V.7/HKL-C1I@<0B(o::n7?M>Vi5(EKmfPafdsk8>Kc4\G<QKPUKZ-><7I0BoQQil6b"03YAE+B&5VidEMWM(+cn$7*+Hgmof01kX,1e8MDj,:g@*l<3<*2u_tfo_>%3gT^3K%?d]J&j61dUll7AfNXjFnOLJC]<CSY^&HnRP5hKCZmf=%h6B^3j-KiJVMK4A`@(.@/knG+*Kg95?V1&Y@3QaFarTr'4Ln8a0Y]M.c;j?J5=Gq<0C)O_cf:RqkNn==/e"^/)UY03UK:@ddW=6%YJ*LZK]_0+Y3q,UA)seRU(G$oZlfo3?..KNdKBM>eG-3Z6`(F!qH8Q@V7A/a(\TLYTb)[XeFiB>80n5mNm-LDRY3'HBh(eJY5a:4]eobfne--bR6V40>i/iZaSRJ3q9/HQ"jJ&ZVcFq33aXs)AuOIU7A&#Vdeetoro:<Wp(:l4"'=Ym:)EY@?iR;OFT6+mI"TP1G^Pl\-^r=V`#)AM&;<s[o&@tdCtChqbR?r.r6K4h1Ra%2$Xpl[h3W#M8S':,nOL7hUK,t.eCpYUK9O705mAfLK%drF7>N/L'dOds(Ql;Yk>&t/4.ApN#c`YuZ:?5W_@hpiaedB4*WJAMcTfT(9Y6t"D5DCM_2\6UL5V.oIjq?_)C7eP#DQmQqH?aXO5YSsa2^?VVZ!iC"7-\LghZrjT+5AocVNMP>bj%qNq#E,j<oAc?OAUM'Ie]"fuH</WD6#\g2=&f+R3/X[#F3EhH81KGnREO5\-6ha\,==ZYn<*PJb^fRjNF:a$k.pG,$qnk>N[f:>$58%\$_*,RU4c1U^k^(H4Kr/op+lq&P<Ph7ebA5SZUT`^`b?j,T;a`;<+ek'dNJ76@*2YU'i^H07'*H'ubY8ZGq-L1CAIbe<1LKt8fkoG?R4RN4J;j#5WY+.`<:4/H#65h`mJ7WQk)HUKtI4NG[:BRD;$@@]ro6MU>JLbYY#!=GMXecU3Wcng]bbV%.[eO/uT$MTl-K8J\S*]_Xl(\tnh&_!)p7hVP7^1>Eq=?#8KZUJq:H004-81\+bIo2.m/H*fmLu`LK,<PH'F.T!64L9@/ds#lTKZ+16f#j`Z'0>^;-Fj/9*KjX-)CkIF,F@Q>m5jSIIGAW=!1sa2k0Hi_K:FT]%nk@Rs!sEH'n;;mq+2[ef;+!V)+L\p5knsOSWrs_E?6KR3KO-Q7GFg!(iH\QNP89>`gSY!UkS(1_iJsc:Y^\;[ikoSs2)amee3\`K\=[,N/O1spoHW0BOIC`JfM*@-gW3[+f&HAW(D5-:O+8N@;8#i#sYNc9Q-&JX#pb)_b3?pGO(Fl8@A7Ld<\=\%94VJJ%gVj@te)InjBmOpqj%L.;b4h%Gg-HD,RRb#^kg+'fFD6jC;NFdV8VIN"OT3.g-VDa^kD?jW?n]^\21R%j[G_:WfO]AVnCj3C[I\YgM*"S+-CQKDA%c>@Vgp&r9TC1YRt,>$+al=i[Q]2)tD=+#F?s5AT0CbK[\Ln/LG;Zh<q"(uqEE-j8FpJLE)[@l'V/*ZVDGNJTNu%Pj+o*P>C-I3J[,.q@Yd:ZI(t=+H<=PJ?Y172h'tID1lfLPe=;PPh5;n7rY&RiG==s'Qak/iG.@54)*?K<t`uq_M">8t3H`17fIHFHBpKobSnE.c/cmVTK(16L`11^!BAu@smI1*TneK#akQA_mm50NriB,'%HhF1[<')o08lT+m$j:9u:Cb>$2PP[KPj-e_9fpU%+lRP20(m6-K'CU5hNMS2#luNKocN11e[+9,5<o0-r9T4t]O4j2nJl)"9THg-jtRI8.n^nImWH<%"^X]$eKd5"#25(45j`EWj8H8GYY.iKmiD'g1^is%?aro_rK'gfoMXXm^c;DHU<.nEJ,[AOSW<Mrp3&Z6h3!M3iS@lgI74hc?6V\p_h*KhPTl,\GQajRB43Gmh<.):j#a\J[-o"_>KeI5fg=7LAr[+#b,=^o)hEr:u1sORl)e@Z`#tJt@J=K1@!VqLjon&$^I:_QW\Eg*@QM%Uk1Pr>@\CR<MH.s6<*Qe'R^lWDBrAO9n/=\A2(2j?Jeo.*7`Jeg$U6mVua29HgcQp9P1nio[)/7NR+FU[@fcFN)($=$"Ndp/.$X6;JQCpR>h=BDhYLZU_lMSWFKSjDdokUSHD'LM3Sa-$ABO:aF5+cQq#$'5Hb__]SL^?`pRg7.sf8gi?L(+ZEo*n\IC$EuI7T@mkI&$DG2PNJ>Ap_ssJ(J]@D:_oiWF(8#(PNq`T4YYI2]IR2KYa3*Tnl(c!=eT09r$E`mn)OO5nE?X0glFM'!dXSPaF9lZ5dti@S0`R08!Vuti^Zi7q01Wmh`](YR]I7o(@@cWBAci&.FAS>h5FE%&BiEK_@kQ[;9`BF]C9+-/5C]2NM#BpFZkWXcTB0*'B)?Cfpt(Sj=&].!jg+\_ob_"_/;6p?I'!>]RIKh9b>mqjAI>+5Z_*TlTp4;p&F)\fUcE)e$6u_V`.9H<&X0Fc:[>;,<(@F\&VtU:\K,6!kN3tlkuXH6G,8Pf,Y4dLb/Os7gTqju=qhl@\l(81BVj_P>C(nk_*67'INldf.f@=4!5Lbes(%?MBV1(gV3tDN47'6GNXeiY$TYZ[018OZ/%$JnU$NH_'PDq_!!$R1nu$L4m8J"U;g)pML2TZIB`FT0ba.\0oqW(qT&L,S#QUM+5lOa.T]*Zin8r9;$46e6E"D#*jU<%;>Q@Q42QED]!!)aYr`%19iP5WdFCq9T$3:-G&*-OJ$lTU\!)I5cWoGQ3A/bLK!!!"`NH#]M\[r^Z!6f2>:\p%E@Fg!^T]*Zin8r9;3j(eoeLq+,?rg3+gGIr=R!%=0BK0r34IoV?+TMN1Jc)L;6,S6]i9AGe$3:-G&*-OJ$lTU\!)I5C:^@&OHQ[efB@(VU!dHc4J3j59g]R@N3J3%g(VnLf"V_"<i#]t3ar*#U\,`,G/>*OS!;AbX<6h/q^]j4LB))F\d*n5.g"+C<X*J6m%gG8$4:tHIeNZM$ltL]h`m_^bLH"Xeiq=0)p+BZ<+V6+&AF0!8DXTsI]<clYL41+irn]#.8>EEO_'uAgPsD/Di"5a\\Q<qW;00mVK2c^A*$X\"pU5j0?FG^f`BDGgUg_"lY!7ErV<$36q6N`'q/UOGQaESFKn0BI34_R9Eq_e]SQqm^g;O_F+1(Q:pr/pG4st(^,^)`X`:O>1EKi-1hcLl/>_ZS!&T<*+`,Wuf8m\,l=;q*iUueWtR1eu"So!#FCh%Oj69+#70ebMI5F"$<3,em\SQR;A&:/,0W$;I4F4\^1)Zfs+s$^7p++M[$-(P`/`$4C@J(q9K<=$6r6iS?ns)&nm'R#@++qp7`8OL'7@L!_oYBRS^L)gR-o=OpZh(.o/H>)k*Gn/X`+F*qdLua'QalqqU"@gQ:%l:$NI;/&Uqt*=dSPJ&bIXSsSTLpUaSY$c)"@q@_Hm@e;*rF9?jDTGR"`e5t=!>dB3d'Rgbh8(62?m=fU983HK6UYqYrXO`9@T(=n2"7CAI8Ie,KrWfcJ6-Q/c(.Hk.`.]0aK;qOal[tcriT8"j$4.>]RC\'`p\g=9`.1MP%X`N=6/&[P1b]lt\8cZJ.uUSP3)9[W7?YP`"bO(U!&!!E3-MYmS21H<\jNG1b6N25t1?kB#@('cg57l`G)M]L4`R*V5XrHC>oAd*gSBJg^L1o0a6TqfDrM'6.5_paurs1/0p\eSaP+>C%#B%P]D.`U-+A7s:slVPoRlO=_!=2"uDL(QcS\$8ij:8>Q&lo3GGgg(YPL"+F,:(>$U/,0Y9,fm@k$:R;HE?AuQ\6=4N6QSs]-iYHa^k:)oLKMV%PR^>BmQCRiD8H.qDX/VWW^:pb%kR2b9Dl1"#?AUabYPP7N6Rj5O>BA\Cq3$E[_hmo'qX/"'VL5*"[/3]f0@G[CFj4PJo"7c(1--,BMUX<Rh!WQo$7cYN$p<'DghRI0*FFQ"UH$(Sn4ILK;R>*;enPfZD2DsAos[+nr'2UQe,.<N)JR*Wn9f=OT_79p57krd\<_SX$!-SAeh-<h\G-Gor!1F2jZV#o$>](#Epu%)<n&R_Pg2LsHX,+L_JS;FN8BI`OX91kHf\_b,MV?X7:T6u!]*SamP'>K-m&5R&r[DEF[D!UB$l`KFrk?62^PS49)aTsfq:[IoEa2G8SA%.0tDkee^`?qc3dK;qPe\DUh<([H`G!8+CS?2jR=H&iLct_"JXG\&qR8(\b[69bSZuaAd)]*:LV(J"79rL=C$@7cH;X%=q&/TJbYM71sgo)\=d&TbJ'kN4(sqX1E(VO=V&413c<8)qll-<XUq^s.A`ptCp!E:q.,m[^c^#_cTVe(_k]B3P=jL@<RN30[?X->l9!g>'Os(^*R\pim;(&=1K-*dHR$4u?.`;Loe<4;n?H5C,uk4D=$LGdr$cA4#dmg:GGIb`i?P]WXAN1:h_JVo0ZNg7]\7!A46R<VU)XO!'>0#G5Kb0aN-2Ut,9&F_0_#F0X6K%BC39<7rt)/ua5S0fa1GPh&_-`Mo>H7?0Y5PM\pn10b0B#taQ%#'Gq[TjmO)OPZP0#CidKB%[0BV:c(hc7iN\OIIRLVLETKJp',U!0UUhi<a:;?.Qi*2XnTA;\:K<?2_b.m.3%X3djYAT"U$(5I5t1!0!g.)ag@_J\2.d$OKi:s/W9LGudZ#Q>CIQ<1`80g_/_h,+Q7ekMjN'G]hu0/UQbK4amj2?jKNGie`sp+C+*Y\JNcWNSF^F^?LE1-5qZfT(EoPrjaV9=<b9P5#dHH&Y=_H'cQ`/Ju'0-M%-)j)O[0]6Re`gAf0n^YCU-`a+BOroEfX:-Rb<[;q$H>sLlt>k12*I,S]rVc$MTbTD,fAD@\V.PClY7)MD3OY5*jPO^]=cXq>'A:f@d02Pk#sjo0uL`.ZE%kdFK2d0d>#?hk]G\`5,o0-Ph!Ct)s^>AeE(T"M`^e3Z&aaghiW3>`]c*E[$d4R+^glIqs6*Q1b==1(X4eF4HkeHp2R7gW&ZtR&R[I+-&kK@g;f&U?Y4JQV(e`qJ.&Y=%T<YrmBdmPer.l_c&=enDa;jH;J7uVf8J!tdFXs-]ZJBZ6.`"PY!)K_5u;cD(O\K(7(%&^d+C(!qiM5Z>Aj><1cGlOm:i+YSoSbQ;GjoEpU"8&,RWL/]S/OcV.*5)A`hOi5fYa*?Qt3dQ`]GN3]"HDL=O=ip*Ws5"VGm^19Y"H[q4m&\]EgrP!dR-H`Fqa,LsghK84bMF_-,G$isj2q,rGi"iltu<H$?mJ0jg.":^ujL7SttAmM^/S@#sR`(j>oqc[mkb"=$_U(A*3YN['6mZGZK,5Lj%j^GF9Bb)7L\T69]J*:R`[=Q^0'^76B>@+u<,UFKT/jr.%6E!)!."lju\(cX\(R3b2[J/m^]goQ'87;*u7!kTu/\(n_5FZ<#mmUMN]IOV?Xd`<B!WeTW6;0>7Sb^,`ic\S&]f);Jr>O:c>d9e,ne(lif(c6dffFeYrLY,t\nr@khipfBK\c7/"beW\Qr*brf#2I&)BMRB*]JBp_R?T&HaC5MhbnF>f2U9OY[#gZ)e#SN/[\fgEIVd%l=G/5RX=k`4pH=NnZ4>tYMu.C2Min^#[/JocZgdDe6[HD",1`r=FbZjU^#@6E&HAi?,N#k0iT<(Sk+BWp6cG[*5!*Ug(`^#=`sX;<_@nE$H_X4Pn:9A@$gW][#b+*dpsVYUg^ji7V_XgnVs9(k/+0]ZODYX*dc1$MS#P>R&S3De0[J2+2:"e;bt_$Vn897]99fR(9--gS_:i^hY6;gK4=sbgQ+@Ld+@)O>LP-bHfbr!<-#SH]3i(I.u?Uf'Q9\e.YJkgI6Y=)k3YrK,_Q$.2-1cZC-oYV:A$:d&=<9Y#uFX;@5mb>.kYR04b?F\gRgHKj3A]/V!]="isV7k<tU77X.CPs\*,O+0;q4YWPd@dga?)-/t%M^8AdFdY`@8i5<'0&djBX,\5ISpi`/,35BZKg-1]8(/.Y3"VNLIC?;(4Y3CL/J>RSu(Ila!jEZbOVAI(ZhU[_n@U%S$C?DOC9?/,Bt3JB.did4ctp!JA<6Vbpd]+/9=Xo?m^X8-9-j\2i4n6JQD<p>t[@BjaN9_)V7r^@^)/r&!JAQLld(`nO<h3@5!&+c5:d`J,j?=4.JabcOT-`ID$0=+btdV0D`63o,fES+NB`jpO%3J!h7Ad@AYcb>FpbKd]+Xk/pb5>Xl\J%/h0ls^^5-Hq&cT6A^c5A9:6of"ckOtW%Vp66OU1ls-hI?T2%kq#3RZ`T\;mR"!bFu$te>3p[m.NWi_5o"t_lU1fU7YR&XdhB*NLg+r<?*.fZ=q!LeO:Xq,jcQr6fT!1BhV1t#H<28Pe4jK<h;8**m20W,5'.3!gs3R=LUu+rU:RDrX:]0/[K2$+5bQR_./$_WKY:BJ)`/>Zls+qa7\s'T-@BA>?\#]cqople;'q"d$/S"4*^^JQ#G]7[^8(Xhn:5TZN+GQ1Y].kUDLK+rs+oaNY7?P<*,W"b?.bI_j6*(HL#JEKfMZn5EZpjTa?,e;()-rrV>N+OTArf#?'aeKAf3@%Z*s";8^KfL`<a!O[&Q#uo^R]_,qQgDCbFETS)]ir#=fcKQr)-U&epu:&U@nF4V8AG6skVsj\m&\\4"!GO5r=nj+3mfF,At]pLHlt.R')u<;_rRkH9@),KKc,%<R[rs6Ys'5."5XhW:\?V[p?9':ieB/s)Q=*EOCT(HPl[#hs0t:E\p>a4-$e]4WfYcg.aVH6+^WVMI7=nI$OdiJGT.3.+D\0H5fA;c"7pLo?+oXhMt"4k;>)=IDLSCjg<]+/hM6Crg?E!JN4#(d!3SX)>Ng;X@.*F(IuLHTMV0016WG,]f=ND%G6t=^J)pktG>P?4etQFD5IIS]gIS337%;3,_&*S2;-\#^VG>Z?6Gce/_^n=4dS5@knDn9c#BX=b>;c7Hj@.!faTB*6](Q0cOaZBVXhXY%(J@83bM8XC*h07sAE$%dl(Y:]!+1m$8In=%pdg!s1^MTT6&D;f6l2+aJ-,VmK=VfuRkC8p],Ci"RM,"oC>"0%&@Af%r'\pjC<Q5p=I`>Nc0$)$DgX6C&Q/ru%pTRfCah^?\OZ!%kJs3KXQr20A$*UG#_j1cQSJK']In?Z1aL3UZ?^gK3)H&;Ug/ffcP8\dGY/=';UbB7ZWHTgM?OqVU7p:<Y;:3EKIer^bQ6g>R4?&EENf?0Y%%V%8'cFpP)5IFZqTG4VZ0RPo^fqgQN+Qs,'Brso3F'In[4qu%H/D`bBiO#U^[C@uec+Ss,P`QiO+j@bMPo^Fs(5NY/G,s:uVGeVe=*M"BpRj[cD8*nOEi2(_tD<T`7Ql]ZmNpN[:r.ks]rCuS_>erB,JLPD.2Z&n9pgqd(%RDNlKNZ//q6R:#d2j3C=):lt>b`G1+AKiO6?.c_^eXF/e?Fir^])]0Igag)A1C+%?1l:Z:u<e"6S.MKiC/sU1*DSRBd=_V!eFmJ@D6GhGrKd@2'hP:ZT*Te!mG-aSl'A6!V8_3NAD;+9R=h_N6*%,eI,aWegJ&nk]inro/0X0dLl-fJS6g1p9eNQcs(76i*J\i?S(JV/1PAuq,f8^)PI`=\iGhbobUh<XqL;HI.^HUcG$7G&U1RaX\kp@AaooR@<OK*>FZ`[m5N%ee$+\1&U,Q^O_piYHa1$";@!BZA'?]!;'q"d$/S!)p`G\&jk&+%FE]hcRuj%\qok?ZM4/aqh"USI%0-AA6ZN+l0(PbHRs&,D2@bk3I2sV8h9`>jC1s(rT1Nse-4iI1U7[(0qD)&N^%FZO*O;kXj^)s^ePt#I2I=/CMJR:+\lUYATX/OV7YeBe<]f]`ONd,^Kf&KXA]QA)lk<edc:H:rd+;TCBr`tBU1\;Un\Fg\/s4"??J7#SFk7F8POu5;PB(i%20I#m"cLK]%2[1_+3fKOlO`3ZW9LMZNFeho7,j6TBJ2GQFg<>sbC!B9JTR_t<lc%$9equBA7X_HV7<l+<GtUU<gnoGF\$fLkj:)=_Vk.`.3hkCb"sF=n-Rr<1\j6M"]\Xt3YCOj+OAPY87n;3GKV?4SJhJ.-Ht!$:O^EN;\u(8Ls`Wu-"eg.4&X-![q;t"W@U(3B%W[_jV&QprD[(tZqqf>#FMAm#la-F!8sHJbFa2'0/'i&;71(,k*EI$`tCE-R<"b5U=3?@r)*Gmc]Uu($_J9Yj/J"%\qNBm!!)Fa])2k#_i"o\l-'29!<@'LjA4kG)@g!P:M1G>#QTC%+FbkRcu@nEGWN0]63%#@"8PkUK8'IE^se\T'ES9m*lstr))N>C!1qIeTF_)'pH\^WcCj.3"n6VG!JLLR\-MT&EWusX/qBiU$Rc,X^cdcDPr!)5Dui(l=[4,1!:GF9WLQ8lJICE#bQ8+P!,rJ0:ZW"R65N$I=)F:kS1X1MC(s]SZllQch)+g)VXKf2#9%9Q6'Xe,.t1@b(>$U/$@gg8Y;P!+>A8PQiR7lC!W_."aIgTm1rV*>[O*u7lh_D+rY1BchulF%279Rd,Fs-sL(qKA^]*$/X*kbhK.cs/.8U:+"=OBQ^cdcDPr!)`\^6W07AY<AaaQmf4*.SXh62pt`JcrfDa;jH;J7uVf8IutA/+*N)_e_hYTPTm\L,p="E-%OAC1!`L22i5D!2VK&iHPWF0RVZ1SN9>kRJu42'TX<$P"$mmIo4D@r6'P2d.#Zer9TADdQR[UoUW3[LUQ0dr$,18PiuBh7[+dq'6U'b3_Jpg5+X0m,Qr/V4qkjmV0??'Z,e0$3:-G&*-OJ%,.($nB4QGC2JISd>-6>jsMc\lS)@@_(elPK;hRsr]YdZU8OTSG>:)s&@=u_!<lb<@<Z5J9(JEQUfdA8Ad>qohl@FaPQe6rE?qkXoVu9>NjN,%&]X6-'nX^4P;<B5rVaD=0rpUC?"T#5r+p;"RbRdUT"(ineoigjE;18:?[#.[9s[*&0L=>fam&(lWaC8ToDjRF!4W:)VfDuYC_t%V.k<"e*]3Wb2;DB9ZQZK.?[:4YZq/r%6"_=eBc7]_.lBX]+jamdH$j_#hQ"X+)N/<Q0"ttn;C^$*L0+<t6![MXe>9Llp2=<3Z%-i*>_jj4I6HHhaY&1X!sV4B98%of!+W_@0*RM;o5jWiNB><+"Veh4!X\r.E"D#*jUBj&/r5u0S>l3Z<NIliIJ;6o5,<uROuFb2b22N%j>77`kSSoc$!R)"Hh@b+Kh5.X^<VI+FS;T>F_2[O,[5Sd]Ct/cG2`D%RYI`_,RT*?Ge?GMbJ<H3JjXiFqm-![K-7IND?^GV('"[B!,rJ0:ZW#=\1[8WGT'\0H^^=l/EX]6+74LL<,KppW:(=BZ`^E-V0Z_Cj;!9>3m<WHFGnV#k_I0fFW*0#'h/+De[9UjOn.=4pV<%\dQ(P\^f1SK?IjRRSXjt-L_?\9kXh<uSRq"YE['7+fCrau1.VG"0Va.b!!(dVq,9;+2SKR9imS;KaZ>sJ/,<-!;&\h5VlNSD,\rh:$87LC<#clFk\JKOfj^aKVD=*hCg=.XGP:a9A+s/)./F_1.lJ@U3G_H1:2CYR.YLn%4Q]AaQ#plCY/s.oot&R+K\i/bXY^bml]D%/&M"T-J3oW#5Tp+-mXb;8S3b&D$fL9n!X\r.E"D#*jU<%;>Q@Q4(/P8:J9rDg.VI+Ihu\-aZ[b@B!8I\P;`TJb!uJc%R0=9+!8np>T?8$.*4Q!?c7GV"!!)aYr`%19iP5WdFCkQ-!!'M6nu$L4%0nM9V_\]/"9?5#O?]!dBK0r34IoWp<<u.V!<<*"!)PSn<=""\?sp=rOAG^HG@C1_%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68DT#:P8^`jB\h1WuuaOU45hr35a&GSs:>7D0Bn4uhT%^H\W;r(Zu)hBi@L=iUBQO3rB%WpZM-et<Y3[-o$\-ZVY=/MS1V[p#A/3iK/TRmTUBqVLr8R@!<SI=6^iE73ZQ;=s$i%"$\PP!?EtRkH^5F@cH"87`p[0tpf@4*('[P+B'OQaRCYqn5+TSZjei_rjDsrC<E94i1kPjbrgk(.Z87dE=K.Xj<<7gO+q4.IQ5_KR>Feq.b8B`&li9mJ;u_CjaEQ-K56^$l\3Q8JhqhL'&5=BZfB"1u"f@K!7:.%4MjW]64<GSNc<.?f\WknMK*eFL&CT%W\`P\*`;P$DEf7b)f;!\pI4\f\rL-UL>V%4aj'E7j^HakKo9\$MOH@Oo/#,bVh2!A"T\WhSTaNHs[e=m65r<cVEYA&APs:E15<%/Y/LO#Fp^`GNjFt&QekUM<&T'MRqnE5-@5>@rs3iC.qIF)&muU!`@S1G%:!:4Hc)A/Ml<4Zpr4Q_Sk7MlHHZgo2fiOpY#+]j>d"&98)kSh)Z51VmQLb^<+rBrh)S#W#\Z(I-rW>U.,?@0O&A;r7RA'W_OHdQ0"?7kk,XtUn?I\9@qajR^nr<fd9^gR#Ms6S`?JXGbS:oOV:<g\)I;rMT3s6Y!0fPRcrEhQAlV9ECW<JX-L+S=^>=fb4S@m#ML+oHd:_Y(6iC!HD[b;S:;]1I)'P<Z:T<kC+kB(\mr-&7>8*6h9tK>aFd7/"U-5`SMqG!8>HE"ZX"0RmI(YQmc&;W>n^GH*u9,T]l]60QO8IRN4jW])N/67g*G+(>E*-9@eM7(=`OmE=s<BnK9;>ef@AJNlM)PX0/*0RVglq^<hq'bj[Aqt>D?*BSSuc$cfRk?(NQ7`S\P%>XXRVU3UM:F-q$G@bI_q*a^PU.A7]j:?n#!gh"/*HD^f)jkR9T(>2801@NBqPl7GSd+39+\H@M>Q,AfD]3=gQ9Dbes]#9m=J?E713D,h&ko<9/;jVNCiP5ep8]hBh;?;K,-;enM@>qG@%91nB>f0*P#[l-*aZD,&38L,r!XV&^H?!:S7m$Lo3aQ4OD``)%1;[A$86.G\V)"E_,=th^iN\jFjqTohEVtNd*s"H,G<!_sOVPH"tg%^NT`Tu`$X3SAj%-a\HV'=lSIeL(af-"L/HDR2\;$d1Y[3Q<c]S_F@icEuj2<L;EJjPh>2HKekPQdF.%d!<DgI.#3[aQd']kA&JWY2r^3dXcY`Rp0;L92#k:*b1aipp:?Ab4G`$K2*5rip9uT^`DM(hdiGAb&6`Y4CdN'ZRCEIUC\7:F]r!NT0ZghY*ZL8,\FPocibB6(<h2iqCTkAno>4YGYC/$G't-+$Q_?Np>Qt/grJS+Y6o_cmJR`[k0hoB!L4?!fW&7^tKFPW3(rH\3_$BHZ=7(Ep.\X7&o0?+j?6VB_&J<]hPulD<ApZbT0A>_XCLr`Q3[Kg<op3WLA;1+$@7*At_Xio1S?5lRobBf3*"Ls7kib(b6?^EAaJl#LOCOIRNle3tZKthKpi,+AiD=UULq\=$?rc!SMK^A:+Ee$1%A=-=FeDB3;,mKj;99a^Q-UYgDu:Z`lQ6-%SUn:$!P-A+U,(_p130Ha"F-NH^nSDCc9uP<;;(>?b:#RSgSc4oCEeo43H5s5W&sp8HAc$!7P.YG_5a!L`H;Y.0L3DBpco`-jsqLqW3u(nj_ImJWMJ+^fVLmH3V]r`Nlphb-pa%>gU07V6Y?\!8k&BOIIPPE$gaYW!+*EXP7&L$2ss\p5k4KeP#nN;P,>]X;bdFktV+`nK.dl]3FCTQRq(`C7u<AqM?@+XP$"CM,[=]+NHd-!/o'd&G_uj7Rc.dHLo-\l"/HUTE.VcBq3I;m"iX'm5BJS>Zrm='<R[liZ6BUBd$2QJ^`h;e]_jKUS.8Vei=76>!/6`?hpuLNUF,@nV]$S5[A:DPQ>*h^l]\*(h-5n5R>_>.)R*Pc6@5:XB862F8SJS[['kN8aE'(V1ga^a]F9PtIb'G[)ggdtO_PleEgC#(rU>1L08?Lr8E2h+=57+s@d$IRE;^m7/W/T%s%@oK=+-gR\peF&>m&8eq"6m[hT<iDCcBP$@.f<\!gO<+JFPSlr\FmRsA&r3H!3<S*0--H#-/][b&j4m7t71Fr#_nE-jBjs#ke9+IffHC:+$,LpGoMf+@fOUIsp#T-dgcSFu)*$:qoQ'^h`a6tDe)5r_XegT:(dYZ@"DNZE$KqW>An8aRhG-9oPc`JhWI[V%EQkU.nq7g@5%B)jBq:tO=eDo%<KR4jl$5GnPEC:toF1KgNGL)Mnm+Qg9g%4EnisCtf=)ZH\est3i5FZ<Son$*`mtsM>lXi#@0:]PAda!5K*>*?GEg8PNnGSg38_dW4(ZZh=hlZX8>=kh+IeHQ$LihB.A=k<=^pndDh\HpCXKXGMVk?/rAaS@<U)%'Vi>l9(<O9J=6#TJN'p>hta]dJ?J+^+4GITu@7M5*cO+EmL*/iG'<I&eL2Min^#[/Jo&%&a>q!(<Uj#HUWKQSK\oRa-sk,91>oDF,*G`T2W<7$@n:igD&Q#Z9snr2.fm\*A.'TpAnF]9XlfW(%W0!]dW)[CP8DbierM&sYE8L+b/jYg#CpPc:W4B;3nZODYXqP?*.d!<UjVT&j>)MMY*TJ"Vj:XA2M:Xg5n;LQe1UiqYXEmD5lgo]r]*#$-AI`sML0qZX$2t?"$\HIoRFZ_B3@uiY\'uH&\g:,F>'gchUr%S;s/_cGaX6i;T&Iq>h+l?h.GSh'LbIpQ&W%+aHXm[%#I7ueU:4h5moXfS(<=c)+LJtg3.PIkI&G9(uO10OhMQgGaKojKtfWn9u<<t3[LdFYO3<#S-43J:5T"5b9J_YN6A\iNmU63pJDJoC73CGXq?E:SkI?I>PW;&R:M6RuHDP6[M-lbflibhLp9%ptZhZ&m?#X]nE=ER"R.A0GfjlG4,lOX9X'"9,jc6j8RB6*'fn(Jh"Q&`rt(Ajuu'RTJH**!fmlaU\?IH/9%Pj=:$o"$0rae-&6YNb;8'04I$;suqtRDE^+8ema\#V8P/Cb@m2gnTSVJY3QdLJ9UT[QRflAp/aU?$47u=GB[[*T&'ZC?-3.)`*Mq#,)4>-O^Gp$:3PpYY=nDe=!UB'00Y8eqpsf/j#NjI=bE@folnloUZA]I;5Yt`XSB84n"Q?/oBqI$>C7g[H1Y:[AIY7(j9d?ToPSbYHWAY)eJa"StbK*7"n$,2jU:aHhTUEA#s8<cnPZ#8&_#^eA\lT<P7n/`hZ&W"q6@9&V'-lWdBE#WuEl2e*L<L"@XW'99q*L._Yn(qtHRkO;b8:_P_kkID@ms&@@hMG?f89r7"l!`\O?)=R=>r2^`nN+-HJFqp6:=2f0>*$enRk"PIHk0jOUOM-G;X@Nh/DaSTZf,"dLM&]p[0+#nH(qGo+PaXfek$J(O&jod9s>`?Hk8_#[8a-Z*ldFfV'Vdn0hB<Ia^=G2pse*6'-7(iM[j>lkm!MM\uM<'0Ra_DK!2ti)3+%TE^rlNN.fBMeBa8O3jFHA`%p;h"i>cAQgn'[3MrWfq2':ieBaci31*EOCTGJ=]/H'>X"JZ*(+ZXMYKMW%DKT:))_-Q/e;5-sbe,'i/;-Y[^TM7Yd\T>Haf7mofDao5W>kcp/aDTELnZh]=D5>[&A\082R#Sb-,0u`ree6[+cHrND0,_(VS+$-E)7Bh-n'A'4eLhRhGV6i)Kam&62C?4P"dPi"F>9G=XBf)IooGGW,U`YT!kM*DG,&2cJ-`S^+0O;%NAI2h((J,C^BfOu19`46U(pUgFM@Q6nlY]7u47TCli:[uW30dLGd_CIZ&2VJ;PRd'"6(<P*,#6XF--#,jVe).pZ0kk(WiFOsk-=tSp!$:eAY&%bkHs_)4V[MR$_BbWo6"XrdIDV@/fmgpR+m6[OLJA4$[ofAK<XW<Lm=\(T@%tYq%(1+]C&Xn3_7bgIDo8^6[-g<qL[6fcfLp#OFlcplO;/oa8K:^]A3er!mr0iVRK@FbE)9r=faVrJ_flaLQDT0^V_AbQs99',$_5K8C[F$6S)/dEVpsno1NsBePt!e^YH<XA2IL=lY8b:XsR'4Fh_9>pbb=\`kK1Des(thG,nYnpC!^FbZ%Vfm^htp<\SjpSamlo"6YPs%:Qoq[iM$0,4_0L1.mGkOj#kYHi7gFgPuqiF(@N2'o.dqmr)CeDseZ:+gCaDcV/g8'7OqZD\j1A6C9&W7fMc"4\/MV5$ugmbHFW(Br,5SJU[QQqd;51r'X.?T3%TAA#Sj]g*X[Q'R-@"dA4)W8E2lP3m5=*bVIC$%4U>4CQoq-d^(oce,mi-%@Z&h_Sjba@mLcJ'4#=ZS[$`9M_PC3J]?c1G;qa64UhqXFJp7[m:,EOl%hBe0:n-#iq@I9]qo>TGOmgWO]]t,>hlFM&b&.&Js]pBfLLFreKn6,0DhE6WbkRYK0[@f?<s<uoucJ2Z7ahXS8P%DgdFm2*&VOVftAD%2j/$Q3$PHkYnY'jp)(+E;T#J#Qn>eo%0"9mIb>0cN?2kr`88gbH0`\?08Z.)gJ^5@#R7/j2WbhM3fC/PU#3H0co-&2o3A^H7EA'm>GJ+19N>)2?-l6tfA3YL7I<+%>YI!)1pr=p\QFtGcoG!G$peO^p5KPtf<!i=n)De78`%KOOj)l$_L%f$.SXp0p]X0%_rg6NXM)YC-faeO\JS6nHH+MTI;Tb@L.e`h]@(o'X7&MZO%mbq@=@_"*QtET(+`Q]Ao'S:VXOsj+1_qj^5ABYRKKfGFGrc?=WHP26<B_Z8_,ZSFZEg;;DEF&YpPm]0J^(VNC6hmp98IQV5^Cs#FDiWhB#$-$uV](3b"q[bj_SCB$DnaPQ+RD?QHE'M)\iEH)@0#1=Pm*=#0=7e:<+$:"Z<qJ+AIAr@b%Ab$N:B3bq%;OZJ&CCGn7j.Z9=[imOFijl:d>q1EOme]l4*np!3'drYu6IpE6\_nAcMrY2bQT6E#bC?ZV(=kYnYJ&K1LPg^<^SK:Pk_h+lfT2/'Y2jME^R8)9b":>/<%/6W@q=A)5%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhVU1%RRRl0Z`b4C_hQM]W_*WQeCr<XX1_/uN(X4cBrL^p^`TK.k-7]"37o@Gc05^Xc0#ObF:^CH:\2VL$P;!sZD2_j#DLUNFY4#FGpes0M_W)'lh'q`KItmc/g5nW<j4BpBh)3<JgZakC2?JRd6O!ku$k2k7q/[1'K:n4c6Ka9?<2s#sm'd\@1A:"]r<g,]'sS!E),R;3$I-TN.f*Y7kV%&s0Xbo/+>9G!5-<*m\&jTF@-GuHfD8'fKql++opgrJR@,e#7\r2:84J*XStCLg@H?^eak#2"N,H#jo^`j*]Sh'SOfl.hg/OO:VVS[kPFuq;kO)+AHkM9Nj`[8]52s$l78:$;<Rb*[HS/Y.$=Up_'ET*gmLAaM,RaoD)q+sVaXKU"p8;cKj1Dh_YmY^MV5fQ-j/0g$;]:@!Z(N_s;bta&,nEu]=sV#7"h\.B^HQh;qO0L*kg't+S9+A6>MCAN%<binoE@;Lcr5#)HAP'mFUtJ`F;C5H(3GE17%BaIQ<Apno_.f]qWQ>^ii9S:43M*AO\(;F`t61:/t:\8QQ&U01mZb``;'9'k?2;f&AZ)#Did12@5nPHfIihT&L\UY\KXoL/I1QqH]<XJZc8e0g'.tBd:jL5qhXMY6m9oj4uqH_/je.>%2t.=FtO#OU6<^S,t2%n?(:L0l;H!6rS)-G(,/LM$;cGLYBMZrZ:fDEYCY*C@Y(3E['AKeCe7hQ070>J\?cTA",/G("ptA>%/0u%EtX4[TT.u`M#4uU\gj_knrgDPqst<&TIdlTIIkp2ft1P_S//gE*CJ107dIe<`;KI`-W0&SSJb(B4J0*lB,i`R>BuaN*hSs$&AM5on5P64+j^Zo'METeGg4PrW2J\KOs`6q+rf`XTFb^dJO0>=_nAA8S:oiDB]H\NRI4csjl9cYEhWgkkIg/6HE+D>km[\+T6YR=.b-&E93rbI=dSJg::FtlkUM.1NZ'g<Pm.//e[>.u`<SPrGZP5DkAUGD;^(dUApWe-m(C6sM>/q7T%*Sa=b_s7)p,Nc*"g1AK@E.0bc$(Z!!C-P62mC-i?2go]-&Lc`?:;E,AMNMIu6:FUV'XkWfo<^>3<FLkK?mU%ZV]gg9Q;h)f(V9$mT7$f>tf=Og*u.V^7%kDmA)@UMn3c1Q(eA(,;[Q5`SeUmCAC_:";,SkcnGq3el#!^:BN+U1t^=QTATPU<GkGbc$(Z!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#q\&2K0ezi0+=A#W(<B>V`HKa=Cm)!!!#7-OZX[B"SYaA6agbalWR'!!'e^$_e2E]FVM_>_Tt2C'FY<!.[i\6m9d!+)o?3$DFW5%0-A.!'XNsKeVP8^a5Wb!!!"L=Ucd4.0:1b!!'e^87gd5%FT4EoQX?5E-kX.I[[uH&naN97lJqn+%i-W`h,H$:Ea]1:X4<i1"3$uF\SFQ,VWGuNJZh'9Jfbk]#M25cbrmW)]R5BpK2+.X-;(V<p[S)^`@m&QK!]!:0.3*%4rg&1CmWjMAq>A4XnUqg!3D]KsX+ibUpQ/<^Ar9+TMKBI,`Wi7;nm"fq*K2j=8r^QG\)Q^g\bL5TW`-1CNg-I]D,U9DM;i9iZ1[olSu]<Aq<d,e?l1S3k]X23$t`i&/*+fCGBafYugmQW]m)XKUa:,onpN[O.kBmLlkLDE6sK*DC!EeJ;D62pgEQ:s-ap*'-0JrP6Hu).QH56>d*boC?m;C`ukW5=$Fm!!%Dhe?U.aALoS*H<AD5nMAVIP#,63gfbEZY\90:[7]NMYkG5XNog)rMLdL8>1QWeod9M>#.ckfPm:c>)j$djRrmN;Q9h?D1j)mr6ksbTKqM(AZbsmi7mg:I^@'X;)Y>JA>Fu\Af1&P/91tI`\LTYA[T9+Ko]b+9f.T(l1tJE`*(m/=2e/AP122e-__7i-m4e+"C39#l]i9cs\2r:r2pp#2gDP,#P`r5W3F0[9=&_r43:C="7T"tRSO,R_o3#l^i__9h5@U[RiK6f71H-Q*7"&Q3\RYecEL=^#ql:I6[ELTX/[N>j=B5%<pk+<)gE)[(*N/hLZ_hk5SjWQXk6)]#>iODgNJ"hcP/Bc>j@$FC<?Mf#"98FP:DZcDOM.*;e('dUd;3\m3GPMYOihKPhqk*0[R>3.K=X*edLP"%TRu<W=bbLZ86`Kef*f**[FH^TgH6\f\ZE/jHCF.eOG?bPmDFQgFP"IJPl4c2WpAJu)K,NF@%1^u6"t(DVB.QNgjc5d>K^m-\a?DllhRb#XlJ.,N=Mk,C7AFJ_cNe*Kk*&MS3i?)cm$jJ4\))n=]a3++rU2(f='724kN.W4He5Op:H]_;&#j0W"9MD9B13D(6V5<4Yc'C85&cR>ni8-B:b>f<YsQb>J>o(Hn#r3isdXoD,?Ek1ML[>4D^=Wq.6daL@`:iae,ub(gC"pn-UdKUMQZU?%-FA+`^11_nsR5'#eJWc+HN"SHOWH!!)MFd_rf/>Bd'CIhGtOiE>E#)2:YQ0p?f!3M,rNdbgNtSF!4f)3WN(ZjrcjpYorY@]K)J[hI`0Ze0)iNeCS62CDPH*>okbTR&_bXD2-+pX(cVplr[EI_q2R8;j?`TSK8:Y$i-2-Q-dJh=k$W-1dN@NIE,jitMj@&9Oo>P02XKlt`9--b0jMH[XI2#&R.V_jKnu0fu-Y:pX(DT[_Oo4q(VsY.$V-M$(6LdCC:[3b/\J)jaJ(X#)AZ$Fo2SmSjY9^aJ5;G0.GHp)8[@PD7Y_E&3-jL5>r=PufIj)s%ccd392pI6\t.D7`tLUUYZD&-)\15"2uOVuFk>BmX_uZj\g4de>IINni9*Zn`ik`Gm,d6^KnD/^>-_$t#u9b:-5u'7OcdHMth4*=8h>djCMfA.#$=[OaSFW_@:N!\;Ms+5O1NeW6lA5/'^:U*`WAE>=BnCrM#(lf"aL=$Cc))T^bb^[J8L(n>0!2PM*Tf/&\K*4c(1+[_Ya;#DpbZSRJJ2;8g3CM!5<LjMQAknU1RZ<:oS;VWJ,1tC$#?(E!DUp9_j2)jouU"Y5+ZC-F3HY_-TcP/2H*iek@K:6pnrkO2=WLi:J3pal&?.d,_XVMlPA\fo"!!'ecKq!.#$Uqrf32^b@Hc'>HI1<cR=^Z\Q?)kN>Wi!@]A1W%'+`K5hCoE@qZdGb"B#JGi7;-[dMN8gtq*J+&Rp2B?A"_t//,S"5L!WlrFJ$k,j[UDX=)f2-0<A?Wj`[8UW=UaY_9DI_/6d7jOB^=5'"O9$U48h&BY`tnU2\@8L!Wlr`1=2U<H*+KD$0B<i(A,:^Ls(FWf5t[FiWu\,_kD>G#5SiU+6Yq+7?"&>U#<MVV:372H+_l5!haY)@?k0$TY>s't;b.RJP\lB@Rc(pRpi`U:Xek%\906Nq]1u1%C,l.B@9"AX-jQ=#;Gm-R])t!.[k*`hG8dUli+(iB"<1RI$nEde-@&PXF9?Xij7)JM5@r$:A;/[B/HL)[sjRg3Rj.Mes9%<k$Y"l]Nph2Q(:doM+[q#2CeKAmpWA+LS!4=dYZn<F<?.6_<0L`EJEV((L`[MfV@h..*02ndsD0Ht>AXIqF6GVrHU2\@<Kn-<H%G>/^;--gDdoQ9Lc"iD!4uqXsf?i#U=K_2(S6R;,)W7nCL[6_HdF-N@f<X0PS5tEbJXs;B9mt20%\b4iDu88QWiIaPeQHta@C:28!OGX`L@X(H[[Lt`?EdhB\q-W+Atu)LJjKG;!!$UgZVM`l-r"DA48cF^ghT^l!!!#7X@DFg6:9Fs>A9oIqqi23![n0O!!$D-UN?iO\c@Ea!!!#CC-Wq9&YK[8!!%OP%4HlY!Yb\9!!"^R!JN3rJ3j59!!$UgTFdt+:^@%$!5PZ?'Z(Ob$3:,,!1;;e6C8r^+TMKB!4*S?#ZCjS"98E%?rd@:@>Y&=zb\BBd9G*p/!!!"L=Ucd4.0:1b!!'f]crbD@C,+a::A%F.pI1aCRf0Y,VWm;0A^VX"&c0\-nr:&"3L@Aubm\9-]03t`3$WkVYrX7o1%Yj9o@6Q?c9,TtnPb9S_bBdR*Vd%_Yo3JMah#'B@iKSZ0h;2`i(!iM$DF`qVCUKP5Bl#iCFO_rmpr7jdEjXh3qJFj,)2KRNkGhsH]^m.50e>+)ChNdC1_AR<JkYu:^@%$!:N9jdEV@-BYI&j-'Il:>@20hrQ3[HpB!u2[$KQh:c1;)<o9;(7pkP#[rhBtW'XUlniBG7B4K2MdoIs05"QD9nX*!T+k1P"0+1l5DHe.Ip53E3Y#L!>(n9+!m$R`%.18]m`dgB`Qec]10ftcDXK!k^mV\]24[K&PRkW_?HP]'k4Rb(3`n1rfOB]T\]R1\<>KBgo,u=jI!!)IXc'+]%g:JDIUjlDjma9V[9rb6iMqi*CVkp5d8[[=gS5riE.AeqSbtb/$Mfj3ub"M;0Dk_/XTW:FeGp##S!@cUD]-fP*)]LU*FgUf.IH$W1a`FpTICnhAjlVlKH?=p0#usN+*LH@KFGD/:92!=Td:KlbW%it*N8oYm(;@7f%pDn5SM.&^hVf%RiGjAW`VrJ),B?nF5%F:YhN@-u4K'/K2m4scdT!-3mgMsl6heGYP\^bZ>o'\FIm/]W1#%!<k&,$j?](ZNK2P4%b:2Uu>3Tg"Zjg+*hQ3Wimr=o8.tSRk^lEQlkT6$(]gKhR5TuBLGLj-]aQ(FGUCkHkN]j`Wk.>-l_Cc>-;)L@rX\]bR!t#&/!8p"S9K>GkfR+ch1uhV*4)()f'pPU;1c4!;Vj(E/D9TQXWh\nUYSJglRO%a'<)-/96XHRjg</^bgpYr%'YeLV&VXIj`b@MMTD30^adS\6@_(,J33rW;QeM%j%]=>^Rp0pN=/_RAA2PRMe5KF]B4P=9:!Lk>S((%%OU?ZaHKJjs']B4]JJj`JIM@&%/-BA$q]E&h\rYBSb[/COdSte3VXCsV?eJQYm(B*J_83#h"c""dAJc7O5Z@c]6GRVe026ZBPoNO.4#^W\(.h.:'S;SG#J10T6M&B.$Ou9S'p?%@R5).M[c%sR6SXtsElZgd?%-FAiBe06bcn=WYXGbLI5A'(@:qhK!!!#30/WnL/2\HO<j]/*Y1dTnN@8RiI_q2R8;j?`TSK8:Y$i-2a$g=c<G-6EUpO.b?<g329XWa<Fs?j-()qZqDJj#$-==B,mcXZ^Vrd"8#&*6hb,)8DX;WjdH-thGOuZ5c7h'UrShVOhY'fN;1OKU^>o(%HO6U]\?M%ZaV)l5k5EG?eIO_U7BLmX*(d_/<g=74.`QJATl7r0pfdh><crgRJj/LH:e0M-I0_*K.51ILc_C1`iT,fi>pJ,3iqThbuA>#ij$A"ZaA2^OEX0'#q1g,J,mT@)o$GgBfM53>.&F?i2/ZDV&),LS=!!)HsQ[*G=QHc8CoH6f_SWCq(9rWS`[Is'$dW_0?H,Wc7Y,%F'apMSu3\Oj3F=7"=hY$`'WB1aFAVp9neBN3-%(dFEOqd"OVTT[*hS:]B_!?`q?8V%4ad&$A+>m-E=C*.-^C2hu0u'*84:*o#Dn50eS53$gJ#cC`,[m',5c@=uf3[`]O+l-IeoIiuaZG*eehK-4>DL"Cj@$74;c&P>5))CKl:s3uGuoIP=e-^7#bt[SZB%K02kU^g*)TajcrPJI6-VGGIpgF7<6t/u>T>HT*IATGnR\c?L438Zb5_MB0NF?%Ei#1LmP$Ee8SbCp+78ge/7!_s;0`nc+oT9XV-7d2g%'i^Rh90uFhF1!J?"N`eRXTbgn_ja9C8M$;Vk5nFdj_7lAZKVXE)uprn'T)l>enS_r_Y=hlT%kfITC*g&:;K295=!NO=c4j9n`J,glbC"1QIC#J3#j+`JC+@m+rN>Fa"#@eCUaGfT$u#_ep3htTTO"6*;J9c"i!'1b3^qa1^a3o3/NH"_1jFd>7%fr>F6gq&6'aK9";F:"8VXlYW!W7"h'g;</n3[F*@NtnjX`3DY-Xgkc6bLG^(3=C[r#@5q]ZL!\-:fpP!aD&V@(OMLbj)`oD*jd4??4eVtPteB^dZ!7EAjr6kK`D)Q0Guj<^A9+<AS>+sjA0[LZS4<gWk,cr\u(<W@#Acsia?2sAL/GU?q=>MetX0fCqK2D]!]--q@5;U%@W^\E_#k&5"6IVD_PBM'gc2I6eZ,'jn`-pWmR9+%beq?f-)tN5<Q:&6q^f[SO-\)n64DdnD+k'!BF-^)[or+0RqJ*g.JiqI$T@JA+jZu(]r7(Bs%?VPq*m1Jo2;[e1*H-O@!V/^>Pf^ZIJI?MisG0G1t-hWH?l87pHq/MA-+qa<$o*`6_UUVAS#K>H""qAMbgJ(-#>#W!p<*CT"59\l;[Bc,kakP5,0&i[-PU/WVmDmp\5ud85;h`)^r]`=!G4<]>!icYQS1),LS=!!'g47cfO9^1S&dS'Z(F,bHccCjoKhG[l+MKSe'?(::tDCWa<pK`D)Q!.8P2<]rP/A5&]\)OQmpXudJ#4P%0UdOBj(Z9,PD8k4;DjeDnb!<<*"R+3UU6C9Aj+TMKB!4*S?#ZCjS"98E%?rd@:@>Y&=zb\BBd9G*p/!!!"L=Ucd4.0:1b!!!!QWr[o.7=[])!!!"224tMX#Z(d,!!'g9"r+og!=Ai-!!&D:J3oVI5Tp+-!!'>D:^Bu&-j0MM!2ZNX46gI,Ag*fYV?g!(!!!!t"ul"e3S-.g^V,!aAn0TU!<+??1t8SE,:K[<[6u,%Eg1p8C4#8d<SptM>>@hP[[Ls%4rbL6Q:jVM.ACL/KY/Rnnn6b%Scg2mFBuGRkA,LsW\K]#PFYj*hq>>1%gVq".#R!hKHEBX;VNq.p&#Kr[q%0@?XD"$XT,$ld7<cBgP#r"2qaSD[t!O[pQWu';8Tmm(Ditj%-1:__ifMOmU+>EIMN;5)G6#[#23G"o+rH"GUT,g\8.DD"g1iE)_oI(YNM_%L\oiP8Ub&@efFQ1gUf^;!!)KoX1n1;MDqs=bP+F'R-)F1gX9nJ\sN@l%b45q+aBZ,e`&,enl`.CK]U=b3PI,D6.4RDX)hc8kPrfOr8X(5E+36cZg98_X`@tkYKI5l4WD;^LWsXR":5)/^]V;F[MBi*^OlD_.iR9fjeK_q:%uuRdWLu;T7!O4p*1*oo!L*46:11#jf-i/5Y(cq-3WqY]``XAXK6Vl5uF1HIkN2fS?oEI[[l2d?P8[sbj1QgK/H5r_ET&FEc%,;"ccS8/@%@BjJW./Y.SHJ0JT;`]mAHjBOH6A8-f1q43p#lPMdi$o#8#/ld]:k2lg`4OoZ"`#Sq9trEkbAIQX3o0_rp%M;!7:\3(uP?TK6VJ0'@$q1^2dWTm<KSW1ke<u7ZcqN202rS^6R*d0<@C&^f#IjFlcrDEPkTeDHK'UrC]1T0TNRiNU1c1?ia4^YBH)k?H6n`>u3:=$X9U[1=OrJ080kV/15S,5hAMbr90G4kS'pg%*EFc1UY.NoY9h*lqGc?1B8rR;M/jjCOO96>j^1S+O7_CD@Y'r,)=5j&G^Bs19M2%A?=cPu?%/^pl3U,Z?7C4*.;Dq`m9F$]GA#7;bLSS:hp/93%:,Qn*t*N/oe-<G4MdAqNpgLaJrB3>@98G;j7j3'`6X]kVqL=s=^r5iul-nRH2\Q*XZlLV[e<TYsBa2gLKjVKBTB"mjikU0H,9GOET9OrHmH5+\.Vn@\WCf(=<'NXkle`,q7a6aCdTHLDEo*bH`[ZqE4g8!nZ[UehB[bfk0$,LBC/uK4DVX/Ks\qH^s^(sHsVSCL);a]aE0@JlR4umI@ql=PUQI7aie![ZaOoK[]ZCtii(-!7Wcme9i.5tTG2b(1@D[-RL!+<i-IqaZPbF"d3(>6sRotQoiDNE)&5@hcgMr%3EQV9c-:Xce9@t'UpY0?PSdM4jFXAcT%.`f$7il[^UnN#om5pNKoHQjWlT22A$7[s'LD&hA$_P>GC[43/&+e,mB/1@M/P"!4%H<&PH6V=AJqR5?8"39i<R1Qg`j0lGHZ$-R[Dss9NTGankVX*Z8m`Cd%FU;Kb.rRYCL/,3/OOHQt:1aU(4BC,sHs%c/He`mNK$Hf?00YlXpl7=;i,%3=Ee@-?<guBn7KquRdFKLe:NT7[m\VKo+X$gclo=D%FWn<j/a?sqMRuFc?Wo4t8<%F_cAYQFN%(?rd?fqd%ju3TA\I+f!&#T]oDI/8ep`n'jW`DnSlA7M)lec`A?nQn=eB]A?Me8WR#LZ&`1KQa7=L!05VK-EVN@juMIF\_KYY"-9aRNF9g[LP*k/hZMS36HH@*+H"Oh$!*Gu!KSU,qKrAkTY-Rn'P1,fp;#1^"fTsoOnr:`?W5<LYPHZY:,T>]?/0Y90ed/q@geX*V$+c+(C>^u1!KE)"Vis_q7;Y$b2cdYXf242Y\D;RA<V,/K^HlB#-474UM\(=QJjcfIEN6<;0"D9hnOL]"iOdDCI".VU<;k"CdBF-J6YolUc0>'!CIZ_i[h`+PsI<U^)^d$Z#,_X.>$UL6p_D_+th(=VY\@TY-Dsr^>?lc4B[:^H9XHt.>VV14rA+X1OY55*KR$Y3J($&k#Dq<>UYJ1\-(r-^tpDB;S8%eip`%$c_3**/POS['_ao,aj(F/#=$V?ttdr'+kc2!.(8-f1q43o\T4.2:-7GX'.T.@(.('QK#iU^/-WL6%t[;Xp8DKT^[)Up_nNu:V0g&%Z(/f0Bhl,iAC^5Q[Ko))#n)4qGcX_I0l1o`U^pt1qM/kagaofN2&bu&XC'P4Rnl"_;"]U4&geOb:/G@rbTMoh>PHAeA2Ao.FbB2_.L`ZDV&jlBIuZIuBO#Ze&eeQoPe^WH'*fnk#q2sAVZ;1%,+Spka.FY]ZN*eBukQUqH=b]$0josdX]d':'qZ-)/6QdegPE"!J08%-"OC7D]:%O3)>!!%8Zo!G3KbT*OnP=t3f6h8V8D,#4qUE)/_U2H$l("L^m1@o8L]["7iqpH_ZW>XmbrhHr_24]^9n_"_(\Q_l0p=@BiK[F#$29pT=@L?dJV2W,ADirk4TiUL&p?T+ddmu*26SHX5L4rFLfljhuB*g?I+Loo[@pRKB2kD9RZTXWdk#o<M[?0eTKV12`<K[kBr81D;If/q>3eI`r#NkBLs3%0^H;.dJ_aftX/\.-;T-F8Ig\(9/4tgc"g[qMJB@^[*Dh2\hlT(s4.jLeu<)D0E=+fQ(_>!WA-Z[u6Ci9Xe!<Bn[XLc^3WBP387c`5,`M-d4o;^1-p_r$D!P**G68!G\XS/[alm20**'qFrd?+^_MLWoeV.E*mOdXS#0.*U`;I5MNoD8Ern+>L9YAL01I)el/?Fj7iaL40VC1<Uk+Se;.lj"CF`qO.50X>m1>?C9NKWp$n49VGHS+9"FlcG5j4_eQRPP,W_lhS@iIR'KlA/H_jD\t0l5hK<!>.*=Z2"]Ck%WpBe'"&i*!!)rs/Le:RQfTKH#LF"2%>[Wu-n)jd1c2a($-f3,<9G?_$+AGOIW0\cXgZQ9)>hTuMUtpY8J'7&S*(_/Q[.u+S@OHaRUf2I-40#JH4/`X>^ub:'O;ZpbN.PZKl&=Y`RDK;!BeLP,jF<h)&qo0Cb(89Tpg%:Oa^X6KdjR_4TeJY4IZnl]#D@rO:^U\,7d!l&OcqN;>W]oo;[-"f,fm`W+rr6T,?]\;-nfNU7s"WB:([>8-j[T?)B2Wi)mCLoh/@\@0V#27)6X'm*^1`lN@_D"98GSdro4ffHCI$,VpRCiWEs.pF%9i!!([#IbKIZ3$l:`a=lMTguS9Z\V#P8!!%B":R_nH1N+=jHfeEP"Q=&c#QOk/Vu<t/iC?7%!!%O4%10j<O:VBl?r'-Vn.6iJ!!([#O:XMW#lt#+p,"#t&(r]]!!!#7h\/LHzzzzzzzzzzzzzpcJ7(`rgf;~>endstream
|
439 |
+
endobj
|
440 |
+
112 0 obj
|
441 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 321.9786 0 ] /Rect [ 116.6029 164.143 191.6229 176.143 ] /Subtype /Link /Type /Annot >>
|
442 |
+
endobj
|
443 |
+
113 0 obj
|
444 |
+
<< /Annots [ 112 0 R ] /Contents 162 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.01e7e4352e1f055fb8692ff3607d0bb4 110 0 R /FormXob.4ffe8197428276c840e4956b8baffb9b 109 0 R /FormXob.eb9ca5e7c57cf610a506074c049b99de 111 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
445 |
+
/Trans << >> /Type /Page >>
|
446 |
+
endobj
|
447 |
+
114 0 obj
|
448 |
+
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 263 /Length 24037 /Subtype /Image
|
449 |
+
/Type /XObject /Width 653 >>
|
450 |
+
stream
|
451 |
+
Gb"0WpK!&+1ujfZ5H?0f1HmsRPV!C@)]RM:C1Jk-If<"KdA/6EJ&N[T5?MM7h(-mB"U%E*jm!eNsu5j0Kp";9V9,_;0d#!I4JSF:+\".;jVlq(g8GP96+qo93Izzz!.[;0'*),8boD7.d!c!t"u-S&->:-o/;';o?k]nS!1#oE"0`*c0*'0<V?,<Pm2(:a&CUVqK(]Sf15KWE2F73D?l?m>!1Wo!r<d=Y7@4Z4]>UFU`PeXo$!_56FkjmS5>k9_1d6_i.iNZ=Y-YInDQ"`O^uqmsmF/a>f^e06]Y=RI6GdL5X]j\UWih<=_m0$eU7G4T>@g`TXZ6Bf?]"#-g<=1tZ`O8P"ZdW8$QC/*Ei?+pAj_-^Yr4e)Z_F<VCjY%0BBlH(Q1is1HmCU*13.MXhR(*LXM)0gLe_WUi3;_7]oO-3opF=8joAT_;K$l!2Y.eP9Z,Y]e(LtfU-q(Xo<qnf=&1/uYWd8r-2#nJolV5H]We+%lE5)ESgE%t1uZ"N-XD/L81.)0_-4G300!ul?_dqIJ/_Ql?iB1VI,I,&'6:C0):p`Rh3g%(&Ab9g[D"aR;ZgcX,>/96'mjh_bM&,R&D)oRf(qI3&;6a:mtQa3Z5n^n.dq>@O0(-&R+coafFX86=7N<0=g^S5-$3+Xk7^I(2a;.nYC1^L1!&1:g(Tk.H\NkYQIK\QQ[<p(MiICR1a`\_kCr9II8b5rlS8ud6c+Mc2!'0\#@0tSCStJ>_DjZe;7Yh[SNj4ee(`=KGWi`iof,hrR$Go#o[tmhoU^uc>_`CB[3F*tD%/'#joX?k>.'YA4&[*)fnqlKKYlHtOn@V6p[JdDVVP9r,(Ss?=tbonJ,I)cGH/W$2rrKqVcnt0eXEfnhK2']fH#>5Cg/"LD.Oa\J38'pHZOG:kG!dB`2'3IeVdu*d/+[9F=%AMi;&._q:jBu)[9nTF`b'V*q5=Ujh,-ClK(4le&ShA$'k00(NtP[c.%!SL->DiEo4Vk8CroA%Z=,A$`*N#`dt&2"Us]P):O8$PCI8MQ\G>D6`5I=ANo_rNj.D5pHu<iSZoB[Hr:M=X-nH(8o!Y=XR\:2R^]s+H$qO,(@6GJgOAhLoGh]0\eHQ*i3da'H<Wa0J[n%Tp=h#E45rhKbpK,CWiNHmNN'$Di'Ja?<KqFcVVsHa)k397/$_L@,A=EKH&Y`S`TqL%qhj[B[<5hs,#,$CQ@[f=0AUsHWj91CiEM6<ghqK;V\f*6/tG(H.$!.gd"f65JP3Gpd_.8T!,d)5den?B2>+^odaKP:g=\0WR+<g^Zi0J5?g<3[p(q822EcqogTd)]cd_N+QQof8Y2WL,F_RjW.CSY&rO*::RFUAnL0WDharX9`G+'f<P\SsO6[]ePWjBCMnERP?B?oC^<KHb6s#n+8drVa]lVQM=K5K!ul&Cu1F+B;<\$Q%^)*dueG4Es)M[ep:r-&UX@10hT>"C>LE9;4s>198/DCRiYbXQkA?IYCKekTYkoCR"uDAC%8MWa7q2faO^3=VPEm8n;!fI$Sh@s+Y50tFL73Mr'6BNC+,@F[em?-MLWJ*OmnemdpL;:s\/c#lmQU3Ipkk2n&]oP3sCP<6>>eo&'dr`Z:BI8j5SrnDl^VWV2?f=aEVY"cghUhfkpm.bU4WR4\OZWrbG5Q#=IOPOR/Q$i1#Tj0n_rIRi+dBc;8Br`keC_>0`4h6c%C1$=TqMo1UVP9q@QPWO!)@'nUOPRprr)Ml_gMbV25=HVNhHri5fS-U5IU-GeW<B?:l#OB0=tD`AaO#;$e>QJJU$R2ha)mI1*a'tiL"!/pT_sHZ]cTmnfqM>[UX&O0=XitTrnDlbVWV&;T=/;c`3`!<6VE!@5j.jq3I.`aDK?a=:OY[+V)3$4h%4FN_dbWCg(4q&`6H.S1:L,eV3&aYrl/R<bMot.m,,Qn[@;`KM,h"9h-OtcQQ*Mas8Jfo?7+A:Z^'7JYV(,OI6,U%B?g/+>GJjpKB_9Ll->TX"*?mW*1+Vj`%IpNeg0aDo!RC_M!=0TY-U;>S3C(n^2RpentBh@<3K$^=s):^`YGu_[,6](\^ep%D-<;:<jSp%V8-?/Hi*3sCj<289%JC3m[Wi,1kbP*ZM$cZS[ik>2RK^_$/_1C[K4YHg\C>-g_+fm9=hg+fm8Bj4nkI1N"o=IfcT8C5YgLd?a1ithcQ6=9.fu(M,dm5#)%Q(92ODI:P7P`C%CciCXJQ'5W:='.kmaeXF@!lBD'JYHJ5dmlte8cY^QV>hL-5#D_,^&]@0unqB2YDddP-H*,F[t(FZ'8f$I<&/so6-"b8VkpL5$@oF'A+!6ZL^!S@PB(P$'.df=39p'\YkLhQiI62Lgn)8n?3S"T]]YRFtZJ5+C>!E]O\%DX=5m<>#M%01IdoF2\_*+3YM9EVL-@N'bk&CUV1K9ujN'>u^-b93Y_fE<o<^bU^[!&d,:"0`2C)LtNndf:qOQj-q3`&%J;+Jo1l">LA$15KWE2F1"=YRFtZJ5$U(!%`bi#%3W4`:Wem1cL#j=B!QkO\ZRSm;O0RbOq\Uo)BNRAleH*`=+C6^J1qVh-W2=la7]bgVS#'q5da$<?JR/774grm-e!a5l^a_9Zrm8ZA$m66VIr.dRa0D-S<XoQY'pm)0t_V?qfm\V^Z8U(tYKhq`[Ugd[p>%QA][*8q&rS^cuOF1$rCaA'8#"Y(:J)P-4[4m;0=&eoXSY7'/=R"_+?'(blKh#Q8g>Rtfu1"r%81@hQcc39_eFD&2uHHZW6BfDOc9\:mMq]e4.^pCG<O``c'BO4"2@)ZD$=MePsngneOWQYiopdN;tAJ,+A-^U/j<V.4hO+\P=0$4fRMg)(G,*4O;U]XEC#$$Nt(ViJ^jEX`=2[l"u&aHr);"?Ge]CeUcp?#u?Daa#JqA]ne;QF:ftf@7mkNh::(8gKfr9Tu#n/$G.ZZ6OP_RuMT/#HL>%'e@j50e0o.2I6;t,G/aZi-"t`pYU=Y!WK%TNbOJb2;%sIg8q5t/P"3"2<Op=2l<u>8_;c@PBhquN&%hiL2n-bXH'/^MrEN*>Bm$'c?uI3%+;u$Hec.DIlD.GS92+uIrDQt.7'=^q^o$/6qkLj2q+/N>[!I7C*/lrk^U:jA*MOImrk_OoPhbm:Q#CU:[7gF?*u=<+22"9q_l9ZYR*I;pYE<Ub+*]<e"sN7W(gPACAq2[fJPK@3[?+JoB!,'k`bu_XZ>@`%E`qI4XLckB!&H53*7p+&&^;7Z!o:",H"`XL@aHRZ6$](rNYIN&&//E%C6o#N,A9$]kOK'anLA+VhZ%.4:Z`Yrh61UX-LTTAp#s/>*.F-ibH'_Ga55rj`VHsL.>2JT5ekG293B^]osO;$+`35+7F8,781Uk2rg9S-Q4JjioHDe''p51]O+pH*n/#<>93&g;,\g@S6HcD8[*>4r^=4Sa\ZRBJb@4!*4[&1,D'l1X8+qW^>!4*b,5ij.l[!G:Y1[+G"a\.X0#hj)%L`@5C%,"I.=&1EM_]+L,Q*u[;!M)n*nNGES2!i08I*_.[<0RS/G]Y0A.pWFn%\!M]Yjek;48:kKj26cTQ1N,ha"m<3^A56\9](L6LK`0:@)ZMlG1]h?;f"<\m?cgM/H+de>H6bZhJ8WMJCla5,%$8KZ"ulA;qgTbb)aB4'/3%84cf*'=^4Nt+8^2^F>B2KBcn;ic@!7XdFrR>]Tn0uPomBto.73p:0MMbKUZBRK(fS?^?(e=3&naB`:m(3HgASkGDjR+n]_iT#RXc&K*-[bal\c>,_l+WW,j^`eZRF6/b2)&Ln-'Z'<',J+`s0b+/K?]""hP.pZnf3_H8Hu$[mkjZ29p@a>][.^ApdW"-d$;7iQeYA"Ikb^E3+j&F9J9jQ-+JrMbEEs)T.6>P6]kPJq&_"NbZZjieZ-?0@a2MWa8#A)j8u5+*SgHK8Go\LR8X\>I=ujfD<_(W2oHkf,\FP<Fh83hiNoQF<]b51?)h+,en$o]/<[5O>r(DJfVPe+IZrC#5B:cZk_5E7p,D.RdDId"Ql"*UWo%;X3LnF4G78R37F-jWj0op(Li_P=lXVW'3XR-c6pGRLRqE'Tt*mbhSVSW"qHPQC3`h[)RB75bFP7).E^:_+mK.PM@G&<\Q=N!&#dHnh/F.8_6^?fLpRo/#ueD&BGfrLYp9fi&eT:7!BlgnGf0'+dq=WQCOT3n)]Y`$e@+)T>\[cYTj#q)*a&JP,h2fLccVi/;J<5$N0iFcVMR"dio+-1.$Z;4bD8uN]LJ06CK6Y(Ce1T$kA]Ca<:IiF!tGX_'q%CUGXROWHTGgWeH^(."C6!-)u>(?7`JG,@2rG(E!LOE&lIp#6oP6k[9jf_<=(1uq`^XJ[O=N!&#d;7Z+`n4lL]u:3X\^WLpi68(gkt2nt3l*c7XNG5ll;.shS(7$\Qu4Lo4[kh\m:%0aGq0Kh`Rn:IB/P`)05dNMjj>bp;o6VA^[BHD:G]pGr-A&P1'!WVYE/dh$"=g'AJ!;jCkA#Y?l?m>!1P+.!E]O\%DX<HB`OGb9EVL*@N'c.&CUVqJsZaM)8n?3S'6,iBnEh[SST:F+6%L6H(NN(n`kgXE"orln@eeB<bL9TGJcI:#FIB)B`L&ZiQn"Gpk?7tK!)N.5@K)0VFgZV-?sP_N!P$9'$&_'"3`C91]X#hoN0*H$M)d&o!Xbm8l]>(.fPa?,KRuc0X,X.9mtMbrF-m4RWE<Arb-3hp!K9IVe[@eRUKgM5l$-,Hoi!n0XC3S:G$=+Xu9Cag6g8p)B$Q'<\L7a6?A$eKAMW9h!O1<&BEM%"3_P!1]X#hr5V/$)pU%BoY8a4VA.M=o"D2rV5N/V`?IV<;1FVPM42iV7WW135*I.`7k7MD\^<?OqF3ud^V.k&:ad/^lV4F>)(ccT*8af'&<US0\dj%EQj.tiQj-r^?hd?6l/8To4M)'KqF$4.*e(k`a4jWAs0_<hP4eIW<'$$$4>hOV6UD<uhem)>i*bNqhD)u&rG0E[b3s@,N,Pb"Lusqo%XP1+Qj.tiQj-r^?Q+6#]_T\_Npk(c`U]B;-k*GL)Io5+cbh*<7&8;I(/!Ujc=fc4M6<##3'TJlJhV<RhO.;,,+UWhRE)ee/4<u?s%`m5Ps\5t^-G?oYfX).O<kXTgZcY98;X^Gl:l1sN1Dh*]\Z\a2uW?8T%T4PEg"hqO'-779Z%qD%''kaWuBI2j4e;a,#t8`p0Pd*D\:Hk0+cS4D"=V/=\]6?L/7ud\LXgWcf5.>]G1p7"XRk]f;<0ndk_jS=uuF:IK.i\qOZ+'K8g&hS[n'DLXZR0<JbG0EH3oDGq%)k<nBWU&_!C+&CUVqo'>=1%tEBt9Fu**GC&0"&a3ap&/Ok(pH;L2krkf/T#m)@,@@W"/9]th&qltOr)Ldq]-Z`peZ)oEAf<$uZOj!CIlceq[--C?Y-F)iI@%L,0fSrKT6.[/!4*%f%DX=c'f#cT5thBb$"=g'AJ!;jCkA#Y?l?m>!1P+.!E]O\%DX<HB`OGb9EVL*@N'c.&CUVqJsZaM)8n?3RinR/=9^Jh^a:l7GnW-Cj[DO$03%Qfg<;&G[J8p+rn@8WUWis4=8U]K5<NCamEAqB1\3suo.Z@:eAp^=Fcq=Ho<A\i9aFZ&rjp<G[/i"YU<:r9`l,a[JdL,c>qaXWn/X(iaE=iLYJ9S@:HlO8Ua\MceCB^)9HBI9qn$n4-e%$=#;H\'-F4?6&lEGh=+OK:S=&R=1*`Fb\XIh\aaW-se^[^lmd[]LkihWq^?bXd59//#ro`UW2UPUK48R^h?];4t:Fm5T4o;qWjr-1^Kf2Da0g4*0C]DfK=4OEY_V3&0^.-mPo__Tafj6V\J7GGC@W?a/qB@`9Us]:Cp?D&gKU;sOPM_Gcn*SHL<mKls)O]=L'<YD6S]'Km/Ne?`.P_@um%Y*ZNpsD21pli1E4n^ll,a;l-^60mh'l7Gs$Jj$r$XFESf'g2EBW)O%2[pie/$p$bnkbe^!ANKN%-h2aB@tC@mZGtm]nB(YD#_hl"E`KTa4F56c+B6(7LcF2F,iQ\*hb.(gjEh@HP#\@[2b026t\X@6NM.I(bZ%7sJcGf*(+p;QIfq:#@&[D56ZB/Yr>6d2\M&WF%f2[#$<!kO_/Ti>-@HIDrTS60=@cXg1Eu=88Z,(Ri@CTf0C5>>MtRpqoiJB@Vn`mF1#Y#Vce(-GLMKUGXEH\Nq,%]#Q(jg8pRJ*X=2b<+=R9i2o&&s.R0soA(uN-H^ruO13o#i4A>+m?^Ml5?`-`gX::Q@9r=u:OQ*?S*;aarBjhuP=O9/cH%U9+rD;lRP#10J#[2K)B'J6&sT9hE`WtI8Uh.M*:gI=OSYce:XiDAipu'Oe\,l7X9kBCK6Q4$CT>U8[kh<9X+O[.BP"1o2u7,\hrmW*\!L56$3fIKlR6@o\MiJB(OXJZmWQ]aOU/8qb[cP]l$n%ndJSY&mGjAtHd"2rm44(#iGO$3^%:73p!u#-DrfLTW,fuWDB@Cj*WC[&df=4TRk['(^>!4*MIHQtn_6c#.Ys@"HKrGS6u[RJ=hr:*=]171Sm?1"Hh<M(3n=*KX[o!qT--?9/FBtiA3!phs,`6t5!$+qLq4R!N=W^Eb@T?1>fffRp4;n[]H"I%F!K?\?Gg>Y*UG[5T4V-+S+o^0X`H8**lIHUgDMY(=ST:J9KLujC3d?JUK%P)9LB0lj>HDL?Y8Scrq6/5>BZ6$e?sV&(bII*d92RHj+L`QUlTF>SU"'PMicEVKYu\9*L4/s>R]jVei"QJK+QK3D"=&M4n(GdO>,hLaDoEt4na:B@?0Ro6U_TQo2!qs;--X[*qm#P]'rGfN+2e&U'QdgU;-ZuR%>Q@l)H>LZH8B9>Z99:eoi:f_D_8WMqY=BM.1/_^5!kDhF]s,+5-tbRcl6CM"@r/UlmreB28Cr5N=g(A0>]2A8g2B/EgELEc:eXgVh1RA1'^'ECau6@\kH`SgSl+I.iit:;.1#hU7?rGNubjWRI#q9/m\;T+4UT*WC*kdf=4T]=mG>8^?`/eF1:aNp6(gZeh!VO8>Z8^60N.\1=jha49;g^Y<SnSGZ78.K*CC9>?BSPWPHMXdOPMn$<Hd:KCT/*N>?KF6,,>r,.G+IGu3J]kP`]Q&Km8bZ\Ld)YTik4juI;0W(]F:SKg$MGhM*3mT9FmFng7DgJed?@o6&ij:Xm>2Fmg[_J1!,4>lhT@Pn@rYlEt!,OF.Qo5DffA*FR2`)irIlcY)^%cPTD7=c"\+t*mhc[.0,g%iYCD393\\52Mp"dS8Y2+i,hXSmHlPt0>"^P%MU6o<9<tr]_M9>bC.W"sCHZ5t[FLR?kPUCg'`>m'Hq73c:\$Q'Nen-k!"Xe%S8'6$8)"BE=[KpV@Dsm0T-0C=E/JXQ<R:kr3n7gpuaC*2\)]@7BH5Ud)3qtU]s4*;/T$d"ZN<S(-\a,-.(tWb^0hkq]NjZ<P^AbZaT^uZ*Up]U0i^)+Ac;\;"Uuju\f7(^7nh-&,An6jL/#8qGXW>*gjP!noilh!Z?6qhdY&-5tk9-W&fOT^kXa5;:fu$"QFL7n.fP4aulH@?d:5d\qr@jlWdp-B!57]:88Sar@QTbmMW-bLC$Lp1V[=@aBmtn1`LI.P*#t&L3khV)5AjNu`;QAokfnOHGoT8/[I35d+`[u2jRZW:@>.XtcS1P=NrGtPSl'[P12?^kdMVag@D!c\=HD+;CQ^\WQ`\ASA9@ja.S_d%#47`&:_I==A+][\&<QC#se'q(WW'.!qCJ.a=m.;2<>@YP&DSb&ujTFeg+"B!>SJG9g)=DP/$WZ7irAd)_-*68)8#>9o'2M*2[d!:RK9ujNPM,mLZJYIqnp'2?5&V\=RjXu]LL!UiA^6DWU?5KnJV=Za!,SBB0g/_?k^N&get,(Ak?A8<%dT&L,h0;XrOFHL]&q"tf""db?mETH!1W1T9T.cooX-TQIf.Z4_:g\`W;E'\4o$Tj&ke#B``_*-<EiiW`&%I`@-A%"Q9e1HYR+bWJ7T;@!,R7S#%/=e1]X!fV?'d'0b(oF^\GKV"--%4`Y80UU0kF(H),hCPO)N%3n&7&g>j'WJ(Y6ZOq_;A5YM9aa\7182"XZ>W45XUo_J$2XaXk/r1iB&No.n\0b#h+&CUVqnf,@./JWatk[s0+)pj1F6tXi)BIb`^Ul?JG(fD=?g^[AErX]gJj\-.>_>gQRN+%*HS]?JVN+p9dVR6m?/KJ]Rh](ou8e@lFIL@^)qaj\93<q8J^a?fRoYt#3Bl=Z6B$1>;Ls4'tXkoOZ(uJKZZ(\()RW4:#D*pY=UKW!l5H#3:GLSh52uT]+!-8TY)LtP2/#K0!pOZ)/pK.&ENl\;+9P][WXS^Ys8gh:i`gG?NWmQ]Po,MioeJ_hU5thBba`#-Tfb8NaoXii2b;^]PDDA7J^@Uh&`eIO4oE<V[e(S+sO(s*?@E,'G"3_41B`L'eSSQ]lT+AQ'0"fgnc91C!kZ&VSoh^pJ1HQ?#+*Y?,m/EqAcJm@KcE4[=%BYHN!N%TK[Cp>M?)#$mc>q`1[0E">&CUVqngep1%hEci<'@pb[)g*@+JWtE)JP@K7-:b/ZbFG^ab;S]?X@'riGV>uaC9Iiq6HW\Dao#u:iAkMk^^\Jc@`]g%6YHTN+5OsMeQo*o*nr"f]hD!%95'fG5.IB+Js]a&CUVqnuLeF>Ijq`A3?kj$u='D,4c=:Ip#6oP6k[9jf_<=(1uq`Ms2=HhVnWg>jA3Qi68&AVX^4"*#i)G(,DaAVR6m?4jirnBUH+T@:[PgGA*nP).FN:">LA$-MS<2!1#oE"0`)@)LuB1df=39Qj-q9`&%I`+Jo0A"u-S&-AZ@9Q9e1HYR+bWJ7T;@!,R7S#%/=e1]X$/)Uh&B@0D5I^2a(arQ/)QhNiB'P>``40@JG@*A%^+_ShJLrkeOrfo%//jlbV*h/&%K;7#We2I%dT:aoBoW]V;89J!h/R#k#ZXk;s<;NE,J]&^&VMSJ;L6jL5))\@a^1RlG,8JA4oI'n:lAA8F'*N?fC*9+gi2Dh^]?Fo`/mBCsDXc]LYe504>JhV=PZL.,'+agC1jpo<d!1W0je'`7+huKVFeTN!H<FIuf?r/u2381aHmqIA$f7JreY&[3s2;Qu92#C9qCR;:!EN62S=$FESUp',s<ag9%HZ*7]Fl%9h_o\P+VL3<n\]2m0ToG1,9Y4E1Gq?"LE]o.-dM?l:2d\#5&Ti4)>.R5gac\C+TOQK'^9:V(gA##k+p35"qWN<%i*Yq67ONrF?6*6`mW"Kf_,721Cp0=>^p2=2Z+.J(I?Bq-;X(tj8(@h=[ihOKfOVuL]gk744'Ab87E;Im7C3B[GI;9SbH)e04#n_0['GP>.st:Q$WL;)Oc4B^h+;RT^[kI?]`1%?=h)H*DdRL$:6<#$9QSgb%&-2:/BA<B#g$i3;BH5`_9";>n^$EJr6WV(Nnp#Q,"6>hX^[/Ve=^+%m&f<*jeWK;fL[-N]GT('-@fDg9EVN@DoM@ikHq2L4.gV/3@-dn9M>8?ibZ+D?R_hDr4KW4`gfM$-hrIms6ZLKo+N1PO%[(QWPu4X6("$\\;p0I-Cc^VRZNg10\"T%-n<T_K).K+c^<2MqUDN'hOM-pHI7F9fti5]n851lOnll]REmBJhhpU#3+#D[6@%gACR]u9@bFC"_X%9nGbTK]#Jcj[Qj-r^hhpZjc)NXu-TVVJGb!,2NFT!;,pV62g$<n<20kaU+6.4k;'&TdlD`\%<f:\6:ug`]Dp<,Np#Q^FKlTih1T=^V=P_*pL9AYo?\G.NOl4d[-"^14"[,ID/a[nI@*dS23iG#j/a4]Y$hXj0(DC1L&9]d0A/CpcSU"'PMicEVKYu\9*L4/s>RV4n0R"Y:!SHI?M!9c!kK2R#T7&$!N4n`.MLEe4&Wch2QR=kohm-i6P,mG`s8FUfdk$lT4BDKKQYB96[lf=4YLZk2.PLeuf*i`rd.PM%if]=ljW'>VZ=1BAhOe+d@CbqmI7p*+[ko>`h4.`CWRI#q9/m\;T+:.j_>sE40b(oFIlaGsS*qZ5g+6!GUOG7MP3C/&/gj-U>-M1K>,B0[r@Sit"aso@%m5\&GM`'s5*GTcb8>#m4eEF`?q\*%U9.^ahbVdMq#**4bLJ9,';U'P+XT<d\1JF/D1=5!7G\d=?>l2]&CUVqnjflXO47D?j4^[r?f!(AbD_BWY8o1N\aI88OtSDXK$)kZDe&4T,.4#NC.s]>>YIm;kATbQq"j'm&p*B+I(Bg9JQLTOjoHjd#Y0V2?69^9GTQ],^V]n9>eY+t-i?`O7(LZ7CTK(=N^'WfS</Q,Y=.%4[Zo.JFA#-9>!%%W"gt2Y[eOnAO&q>=r/Ca('8U?&2OU*t]qmk&=)s:[%-SAT7`O6Ia&H]<\f"0.,dtmi04aNo[.`4>AKJ;P@+?kq40lV7Hr!m&VT7H^P/BDmeGNpk7@UH-<88;h6S_VdI?U:o0f;dMq#3e.npAc59XJC`[;\?0W>;t+^(6Ph"n9`q9It!b6^$nc(!5S[X$>c;<o.S_IoK%c2_i%*"`juZ)LtQO.qAW2K9ujN'>u^-b93Y_fE<o<^bU^[!&d,:"0`2C)LtNndf:qOQj-q3`&%J;+Jo1l">LA$15KWE2F1"=YRFtZJ5$U(!%`bi#%/+_1]Y]AV?,<P0b(oRLhQiI5thBb$t:-*:"3Vj!*EY*-4^)tbNp;YzzzzzzzzzzzzzzJ:@='8(7YA!!%.tB`J,5]nMgX!!(AMLhQhh!54)R"onYM>DQtn!!']dQj*Njcs)<?!!!#4KpW&E!74q+N9TK!6p$!4(4!MmW-q.OLL]qTfpku5>@g_OmY2WX;geT@eD=0/Q:(Vc3,?)\eG\+%!8pqOZ%F)2PTB:UD4]<u&*d^FM=B9UeK!71YN+_rJ%:=6S/K;QYWa^@r[&20;,HDA%^!'P[bR2.,I*AnOfO];C5$?3!;[.a*VA&b9G7X0B0N_%PKG]VMG<e/)q2[-2oA@hA*`sIQIHki5P;9ep5G_?/N@cj?_k_Qj.9d$T%g4!mZd_ff&ggmU`PnYSpfKc/Z,66lE5)ESgAYEDSgN,::g;!;5h,AZs8,aVGE1Wn\=D0?#0BZ/I95?`co>>ZBieXDS&cu]nT9s2gsJ>RZY(c\><-g<O)O`k(J<I]TBh;Di-/`?05R48=8n4VVJB>:gV`!kL?3Bo!cSg)ct\aa$7!3&uCsB#`!7mRtZi_2qq&%OiR)i5;.bNW`.RHl#o[d]9NE-rU]g`4M&>DRrt:N'f_[p&CVYb(Di;.-LA2W4@s^j.dhcTNU20aZ-!CX?>DJ(dB20I59V=1ok7BO)fs3).R,"i:AsL`X,oMbd8kE7^kdAS]f:K@nH3R_W?lRDjOFPKdf=lT?8_Gu,oZ:N6c8ihl2M1p1TNQYM.siJaZhW7b<fN@6`5I=ANk3aagHKPU:`r[SPt:N.p*slB9sg>XnZ47A7C:"H%'b41&9KUG+OS*>s9p$NCqjuFI.o%HZ09r\U(fi`DfN,;rDK?4f/DE-[_lH3[_[W'tcQj7Q6*u(\H+1@[4V:(V[)Or`WOXe=pq(N2bWY-RF#cn+=cHca%saoAfLEj93s$S!At-9oTljTdEb9?^]N%Qj3=QoW,6t2Z1#3^%>(LI`o&5?"."2Wk-rY`mc75b\H]G6Z/^ae0COIe>:#\D[Up;\`tJ09KV^QRd<Xp%/-RJ7s"*-LlimYF\`\4NN25?%"2sSZDX)Di#<b+R42Tk\cQN.c8"/K3n9KZW8RN-7n/4<aGrH#2E[]`W#;7sQ`Cr6O6(Uj*m*gN&:V0sOC5<Nbi]JS1r(3,B8p2>M&hlEkmNS2nP>Sg0l7bRpEq\tGU*[SjsT[We0Ftgaq")%dQT&P:ASKVVGiAq0*fnP9\:^VWOa%GM!6hR5;/jmWj2E+5P;3_e,qaZQ"#'n%:D*Y)Ug:a[b<N;co`f@RujW2QCj6rR&$'#Z7/K7NgG"`9I,&I@\8bV9h<SFB19SWaYt:Vaqa!p0DO&6ZkNN8a6?f<=50KN?1a?L;4BWdn&mc(IM\rqSM$cIA]p6lDc$S&HGgZLg?6E28WQQaFD4BXiDqV72)"a.%t]O_P;+Z9rUWqDW#G8.R`S1s5b/H`mS-JYi,$grVAgStWondsEVj#<kHjf3KlQV4C8RI\lZ9r-;b,sXf-Vdc](SG5jf2KMe[7sEgcp#=?0]B\V.g>%mrI(UL<"2eZlpc*M4931A1gW'"8iaWf@[!XBgLEL3g^40T88l55Sq!MZPM$B46[?RQu5omX;o^#IpU8:Q*Btjr**IhDMnSpS7UFh&XZi_m0586FGad@mB$ZUisT&fV_bWJhu1iJWb9sP>K\Y#?biL>dD1$;@?]8cf3W_KSA)8HHHe&,IS+&IX/s"^HtP(F84*c3TCAtN+55'Q!+qiE2YLio\l78N4FO%FeOd5h>SOe]L#&iM2"j]@6^O1kq=@M?W&eZ8+(+&<B0mZ,g@HQ,krZTG&td>7!nUK2Cr3B;!<<*J1d0M,*YoJ0[p_YZWaL#aqT(<eIRhAl!\k,a!2.^2A@iqE,<ORqABEk%n%J7"QENJJ%l"Ln!2-e4df9@JH4)G:!!&\$&CUUZ!.%9uVM>0P!'kHFV?$YsoG1mS!!#9&+f58?!;%%9)?9b&D]ttY!!)X,@N#4H5]=mmVFAA-CV(eQgJXfY)HbY'03OcNgb,%tRWUc"BgNACX,FQ3RpX\A3&SRnd>Ic<<YJ^+kT^7*K@KPmMDTNDKu;3F^#TjdhWd276To:G#m3gJ^U9t4-eCd4/AI;e_0</]``Y%$Fq%]#kY?7Bq.:?m2cM9I`$oB_S_APCC<5T.bA<hEl[?CoJUH[Go"Io]jTakUDLiaeh665]cept6\h5aI@EBQL\n4f8\n"aHXJ;*GC+EuV*1W6fXglAL`a%t47uLQ*VP[S!H6Am(k]sk"*_qGlGbnj"2@c*crRG!/(HG]fR2D@Gni'nSfL'SSSWCY/&)5H5`mXltjT)hComFIlcf\G8=nDFY="AU(DU=sM+]]c^lMDF<11eBen'`'k>HW8*/UtjG+J"i/^dKG!8b$o#p<S%YpR!#%],F9N'Oi/m,ONFsPf.7LQ''DWYCj/]Z^Ji*^m>_k(=#Q_[qq%0CeI8iBQg^q1>4:3[i[_!90<0LM9M=CGC,jY7,oYjmY\4rs"fYE6d78"^>(T,:==F2'2oC<DI:)-6P,0Y2i/62A@MF)ku.gsks2UN.-XU.`m8/K2L9lLdCfiPF<sY603%[%Xq)1_lTuP*^)Li45Cej9['k,,2LVlc#>UjQP.6;hDK*E0qD2/7'pY5Z[O9(YqVN^rmmb](I/BHZB,%c87[XpGl+*t32ZNL"Ra*'rIria%73%q`?`<H>,Ln7dX'+Oo*N2[+EEJc;2]s0?b?j;gF1c6Q9:8sn>,+c[W;1moVjf'S8flH?$dsIf!9sc(Ze"r_fGG7HXGQ2eJk2o:C:3na\R9qKAek%uIVGT=K0uaocYd"KChY<`AK<:9*?+>uhSH\1TQf<`S9_s*s/tX`qf'$-QLISHI[\SFWiPF`<t1PuRPT0<T(c7Mf(ko@*F`3013%ejCU^CMG<]G)N?cU#rN:&og>!1(1^\T-Fp>X`[o#/"S+s!r=O_;T*qFd%NFl%;`DLpe;t$LCMJfGmlXS5tDhVXh<;HGlhV;@UHS(YB-6_",<NGZ]R$Kr_C<_[5#.:j@;p_4R(I60TcqdZ4$Sikf\*i9P`O*'re2CU?L:qMK:fXu0pUj"E]m<:/;$R4^RnA!kHJ,r:DhQZ=q2,[l1!L3hG2V_orAE+D(a=+,jtC)RfHT"jS$&Zop'XVo9mWbKn5+e-[AC:ERuaV(bFZ"'3i4La2JihG[l,tLjsT#KSVUa8BlWU^PJQ)^pKjKd\!+cfj+=Wh*C+99jf'<fktM]>?4J_gm".qOpa^MoI+^hEM1OqJ!T]9p48EL9Mu.4>A-Q8X('qP0AgAH^J)al'Sb(SPOA?euAN0@44R>YQfIc7Dl-k!2bU6o37q:\N[<9ek;"7s2E'3U2dl.`,?^R.r*,iOZ&%GO5[lRk=<^0GtkT#'H)0L,2j*ldbq3ZZj)]>tFZ<X#Gn7-t6mA4nsT;iqHpU/T'<7AQ>F:N#T'.+"Z*=qH3<@aat%uha0aXZ@AROFbs,jm4qHLu_m>#n(qEoC3QKm_:KI3)qFr;;nI#KruR>2))QS$&]`pW7XP[I<R#Vqsk;AQa+tj\L/uQW/Ac^:M^S>(4iKL*>5l,QEECVM'69Sle(k/83L!6c:fSL]idu*I+'GG>anj)6$)YOTid_lb"nuS\F=8qg,l\gYV\11ID'/pUWAKM*BGYpMtVq,Hlfq@?L&)dQBHW9Ue%Z\b/fR0\$)BT;PCO:5aq59_&`Q5LFiBnIId8op6@Ic+"n9M>tj?"`kBi@[cR^I_KkKI[R*nJKcMtp4);*4f@*(V,=l&Sr1/EgK$!!p[N@2TP$Dc??t+WlGIHbqf'IOT+AP.`jAihk)+VQPMSZ1QD.O(J\!r5e?r/Ce_(E(EOE=>CWYUgJk,W\YG]Ef;>J&a>gfC'YQ]o_ZBUX,gNkB+.bor@l(/^W3JrMB3)@gIO/dIeZO7i;B-.GTT!aN&-r<Y`q)m5:8c,K[h7M(d86\aq+0M8Gg0(\MOhJjG<u+Q5j3i;Ab!uKVlU($h2V8XS+_T\[CT+bSR%Ve"Iqe3`Bj&K*D::A&0oZ))(,QONYLaK?p"-.kos3g//+2OIdV&(V]<.-7kjpE_krDPp<L0o>c?Ja#%f%[c"5Q+^N-9]]PMg*hH!_\kK6#iSeY)9M?d;r']8bZhad2AVY))>aPMZ6Q8%bA$;3@k]k!8=1jk^sE;&eAR>"ktMLiMFHI?.cr@oZ3\].0BdfCdNC:Xo"/?357@P6ehW=EE2c$K(X6O4=TFX\JVlaNh)bGN,%FGrLmkA2.B[(H!RQrNgC,Qkm.ebcDT/K3oL^d\bTX-'-hgT*hJk,Wi40]=Lf;jC"=Y:EC=Hk._#^n@R-rmOd6]`<nPdN,2AiANsr+ikLsOrT+:J/(7fp5'46HbKn:&nPkQ`H-UToKi3soN`@K7%b(6LpJAcpePohVeihE$<^7>i](EX,Z<'8F+c&Qibro7];;8Z4C?Vu%g@a8c<0H!QaH`BXPX"9"Gkl5`_9;E'N^;e"2-K`WnG*@?e+ZP:&/;949[A-]p6UQ#n.qiaD.EDZHX:NmG:*pg#-1Pq3imf`]7HdTfiia[;q1te[tCbLo7Z`m/M[4oi-a3Wbq_@QGBc,-]@!.j-=UXIJ(:s\?A8Um1+aLo]jW6i("5Nm(\qS`FlB@=PbT,\H_RJj1Ch(eFg/XOU`[!7G?o:RdZ#34Nphqr$-R^^5+h+<XucT]k[&SFV(?mR8s?3p12pI&j5?NZoGq%59FlNm@$nK3ShU]o0'!b\Bb4<Y/g[PqH2fVgokKEf*Dk$3G096W3rP^h@%d@lYGH<eRa!p;,Xf.@4^6sCQYHbjDkl%$.tUrf8SE:2LcW^\+?K]\E*8dBmoWbFZ[,;D[ud.Uh]5!9c!e6L4_-V/65Hutf[83%V0(nL0d4"tp#>[%[&f0V=Re4TmacjP]d3N9gj@SuYB:kn9in@m@/\>`l>2$FJ,4NWp0%&e!NPHY`cRQW?dMX$d,$GD6;5^JikF[snXcna/sLQ1*CBILc+j:UR63GEpK$11[<G/dg*nBG`CIT]@dc2b%1bAPM;``X<V2L&Ht9rseBPQ*nPI:'M\4`iMO<NWrk"<X,e"J(GFQ(T\4b%Njs6e[1uj1T-N`Ll<A?)n._E3-q#Vool9$Y,C?lb+FSW?2CHOs90?tmK\_5?UR+Q_g4Sl(kp$'lS^=Hh5G[AHP3XD\F'a]an7(JLAChW,Rj@RTkhmaqHA"%\QYMrH=#CR*;/0q8^`39r@?7<>t;"%4YG<^r<$MT:$fU>YTDe.rJP^'pP9pU^e%;e1m\lk4GA+&9e3o`Yu+tj2U8hY#jn`![id,1@^k81Dbr4>_/g500(Nbc_=D"Xu^kkKi_l?ci')ikdlbiHcCmHZN!W-iGcq`8J[Y#9P-nDt_f9"=9"HVHjlO6ObXM!6p<TJG>UgqkWojfI7HP"29qjlqo!>]WgO9.L7^%HlUUl-EGdrUKH)^8!:3QH*?^=dJ@tiTl[X>qJ`$D*:5:/@"fDcT$(0LRM?tnFLb-[GoJ=F%5kDjt[[9A"%C'bS(#!0i39Ig=O61$lO+6&)UBRC\7:8!e9k*9a8>f9fmUt>isR0-[18@-[`UHn-d#qik_dX*r>$=^8_Ragc%F9%jqDUZ9K8Vr=u4s*6dWlUlgphpn$6jH@;Xk!.N$d>um2RV1fZ9hT9QPOXD_A?e5;Y%J[2)!!!#4KpW&E!74r+B`J,5]nMgX!!(AMC,,Yh!!!#k#%AJN!'kHGV?$YsoG1mS!!#9&+f58?!;%%9)?9b&D]ttY!!)ZB9O_0\=IG_c_V<A#)WfA`c6I$$WHWcRfrCJ(75QmYFDQe)\,!dgbOA=K+H)TaBnUk#3ms,!2gi?A0k%k;p0W=.K=oL`VGf!KS[372h`MimX@O!D\#&V/Gn$N5ILJAt<#Qp<0Qdk#c>+J$XbM3Es""1Vg;p1&*]:CgrlS*'QQ)=HH7Ve3-tjT_cJUk5\rJPo_0;mNo;8QqMPaZL/^r6Nd)%)>pYCSO+.>tCF+%Lm'R*8F9t,q(ge3tg>b9qGca2j(p0$-0@($M-N?CGe6Xq!/^mVbgEjH@-]s2:FUQ(Ouj2+MLC5;%jQZ43ZO[W^0@7<Pp/4`5[Xus89R'ZLOHt3/XV#rE6%$p:Qmm6?5opG/%4jeF/S-iqbLuaND-h_I_Zd?j._1h%AfrE^Y`\]&R='@X:,P.anb`S%6WRQaO-@T//V6$HsPr)d/f-Sg.>rqa=`Ka1rf>qh+dgkc(iH#8K+Bp6k7$;ubYm]`TY+l5I[+Y"f=JZp#O(l3`LJOL$O;Me(#AWIfL@71<-ed.62URr-N[m>EON6uef6srZ8'[Vb^4!7H<>PTYr>EeNZ<_V:A4C=hI-Q3VcoW82WVH2%9[5'NH*k_a5YTLLA9qE2\_X7U$'*Q,>/6',f/=rrCV(D#>OY_mR$NTQ7;@`pN<R]T>m6'k*aTh%Gte8#dK.jW\(ll8T>rf7>Z_Zg6dMO+;1u&]ZE*lBW+/lm84S(5eJXn@IX>f#@Mb&uXI#2LdQR+foIbE_K-e252r_?%m^c=]6MKGZG6^-k@;kD9^m42bqODIJ1I-"n;+i6CWE[EhCme[7MDBI1GoSF%(`8ZUoHWHZW'%HCrdOWtV#A:WWjn^l:5QFDheQ#4;ZHWapnHuL8jkNImX,q;.\^[oq(H#ZhsRZq1XRI!>G,/ZT?">:.7naB3bg?EbI,[mFmT6D=\$VJrT.Ec_J@3.Ki9]hdre`oiQ+O#lC@Y$@eKC4I^b"l+Q/F'-q_0ha-;X;N>ML,*u\U7/n7GunYYo*qfVJIB$mZ%%f?]/j,=YNA&]=!.m.W-2@f-_gaqWb;L:\bVCap=m"k/80ep-,gRd0t?-@hK:qMURZ_9R>&'Ha2lt%n7PGJBFD"Pmo:\OFXa'5j$N>0!4':rQQo$t3TA<RjG\@@4I;>]e).="jRZ'<I?cFW0@U/.]]*QuZPpa@e:(S?*/+S]j+8BnF8e;N/CNaB5W)JhSTdpe<)F'@:(T;LVcE62I@040,A%+R-c7604(:C%oN6l[_RcGK8kKGfl4rN<MjE@QDX:\K_Rf:t4\[7h\0^;#V%l#VjEda@KKVFFa1qp:#93FOZrP978nWb/?P4>_e[-EC/]AYOEeP'!Yn`ebp\)7RA?r:p(KOtV-2d$$-mafOrW*'+h`1L0\CMAl>_q(-3YbhMAOGF<BuBe+\UqrGBcYO?@HG+t9EHrD^BRr/qE--2<)%ng2@:RD<(=_*>UT&[oa1a7l03EBCO7<'\JW9YBIjh"dQ&'-]\dE2RZ0"]7r(ai(chhcIE5@-N%q&pW#^"_(C&^t@;8\$^,@hX9/&'j@@HpF=?d9I6.#[=[\GM->'_rH@7MO;tCl2ScX"`kHk@[cR^Ia'sg.Fa8kTEko!_c>^YbKBci)ARJUDttc)`.eIIR."i_-ee+U\k<FPJ*_??ICLBV^E.HgN+o9RbdH>.:3o\i01G\YYuKL`p>Xc3Vbcli:Mo["Ee:p2Cfh9LI.]JM14>r[2jc)MRuD(ORuJE,_YBP[I.F4V9tpN&7FBrO&_+.W\0@4(oC@0C,'G'*K(cul^6,jk*[mc6ODm4Q]ST25s'@OiNlrL;8Un=3jA%;CN\CjQoWbg;p1>F-eTgoGqOS;@%+fo,iu#\ds1n6/$0CiKijLRgl?^-8FFMUq>C*mZNi*EOo.Gj`\P,%2)Q"0H<1gY=aXX<`=#s6ne&C?TQ$Q7^9^I6Aa^'))LYd-pQL=.6M!<$FhVW+0Hb8X;,#r\MA'NUMI1mZFP#E`m@p7K\s4K=<ju?D\ZrC$%nt!GZ-lHoO\:qMi8M%R4d<*3kr5X!0URFZ+k&0.A(p^Jake$fQrPG)\oB>96;L@8Ub-d5*,*eO]p(_;e4;lU&`Uk%OAqm/SW,uRj70B=U=HIX\=[ImK?B93h6P:+UghgS49*ADseF^O<SJ#eg8#q]t=/N[[X+kpa(Ho:9J%g5&bB(,,E&mU41ZOtqjY36$H;Cp*O/5Tt>K+>seFfUro/[A2h!Lb`$ptSaDg.(O\F,4mcJ+VT]lsLBjRrn@jJO6a:Ut;fatJ/Ap.J'Y\FTKb7).saHCX9bcd2C;q]Zq5bp).+#nA$;1%BMK3BiLA]d-J>H3ZWZ/B]kiXQP&:9mGUs4\\RCf;-NdC+cIb6aAYs`LZ-X2A&<'n!NI-&RC``PMRu,XGZ8![]=l<SpaJ[[f%RKT1iNXAXW):/'[,3ld#9(HZZa)C"IBGY5ad"E^<)okp^PN9,Wrh[,g1;]%9M#DuYUK<+HlV7jfBQNMXtX;DC=8J!sg.n&)F^i?__X/H.%7r2.#h>9-<j0\12tcZ'7t]/;Tob6ec[#A_!=3d(&CeEp.h;cZ_]A5/BI'hYi/Qh3G-*J,-PMqiJ0,9tT)4f52_a=a":]96>8K"&'[XSb9\4Jlss*R$K_BZi1-(,Df+7mbaagXFNTNfq64=%,nqEXu+;-/kKqn9t2tN7V@7o&G=l2:P-)(iZKQ/CdiU[IkhU=sX('fA>*8pK]789[A"ARu7V;G*9n^dZK9SFUl(&=$olk$[fg\[k>F*il?:j?C[cd7d]plN"`sU:%u)'Q.%W<S`m8i\ruBZLhTWBSIVZ`h">K]]Bdad+t<,8-7SVbF^I2F%'V4YV4u,54!OLGf$rO4KW4A:jh%kAAZ'l&]&$]G(@9>34_*XgIH#Z^pT"t4HlK@Mll$X8#6C+&P.l.<=*p#jImZ;HYSVH!2^kRsnjCjC2"QdUDqEu2/Z:GL_JZbS(m^oO$^L@s3"YLlCIVmGOgSE_[`iqYZM^J8>YADcDF::X3KG8/qTVg5PF^9r&(c#YGrp$Tk\j5,qQEH4r&c6)47R+-E=5FMqb>:ZD>ImPa<F;pgk%Kboh7'')cO/Jj.o!&CXY(GGEp<D#2[M:hIRN':cS":R%Bh$R%F1E^RU1McS[Yhi)oUK'/Dc]cl])`<0O`;ccM2_lfbf4X'-e!2Gl53IQ#p)dZe8))7DHEhM4;T1fP0,B$L(BmqcdYoj3"8e"B+pJeXGZ>5+iqk[^dbg)@]'$Q1_^cCXs$X<rAoR_U$DH'>Mar/@D#?-^$$rG5)n20ELK#JU9*,97Tn&(<HrNn.PDp"917rG,L8TX-j$e).p2$fdZ&SOk&AO,2<_NI$#M!<@Sj7,+hDc5]J-Y(O')FSa05SZh>ZJ-PpR-ia6thEjm<!!)47`&%GoJDNUd!rr>b/[^rM!!!#4JsZ`B!74r+B`J,5]nMgX!!(AMLhQhh!54)R"onYM>DQtn!!']dQj*Njcs)<?!!!#4KpW&E!74q2`O)lC<WkPgV-RP-ZXRCmirgtlbrY9$j6YAr7u\%Rk_]T$XR#3eHoO$VHJk;kgA5_h$ijm@8*,"[_8nD*;:@b8Lo,d3*3-fn=g^T(V]+uX)H'B,r:R&f+'BA0Jo889@Dd_"HLnMs:a"*F`eSP7e.d[TcWgB64`uFF#5F5lf&gcYjAY3qb2V+,fp@$K^\gpM5I6QB-Dk")O2OLW7]oM3ds)5XpZQqO]=B?;N]o($P?1OtKu3]A<L2-Ef@8DheFUP3d]:!s]m5q)&Z#fc4ZM]kRmq^><G^:qNa1?Ul+o+4`YI'+5<9Au37$<3S8;TQFU_GsVMm&on0rF\0@.ejJ=><8d_TS8Sf?dsHrUm?\oH>*In'lu0XUB+E3W*foE80>LSK65N=!JOhV6)*OMu=DqOt<:Gj\P7T</'-])H$Vh@$7g%=)aQa8T^9[C=aO4dR#HDG(/I\\2Wh;J&M6n>Fe:!55$b4uZT0dkEdZF%;Jp7dCP>hP"64]8H&fAOJ^rAiDqrkKQVM8k]V.o/8[.&'RDe^2HqqC:YF>Yk?K4PV@;3EiEY5^-@[GlrHgO.X>+O.-r"_6A"dg?IXqHS]*2'YDW!s1a`\_kCr9II8b5rlS8ud6c+Mc2!'0\L[mOro/UHl5Q>@k<5:>4^,FeNP3bkj4D$,3Hm?,IgQ?T]ebf+H.coC,:'=C_Zh<>QrPoGMFf.-FmY8A8iRGoJ@(#-5MDnfP5Bb*(4knPCHWsWC4WkEFmEOV/Sr4fP&sJIk="f`UXnT(UWr0t*%!_cF@K,ums+Z)m<?7V^V$FYD:H:(2Z$NsA\U:a`elZrV.>X!j1]N,meC:6rj_[WUe+@/aIE:f$KN^_@I6+cq6aNe^?6,j-7lZ:C-cQ><#:INBVoo7m<W`?o`3_6^\KcuYn4`-XVtKH!5SL_O].@5.(E;dP7G)O-g7jhN<TWC2l$\Q3Y!Vt-SggNoG8.p6Vn63tLINnI.p"Cu[EskHL>@at0hiKFq1f0$=ia[jcm^)RR1I"2,ODnfB0:=/F!gd*`:P.Eq^l?1Z6Psjk@,'MUUiK:e<ns[!\RGM$.\ru4`ph]2#Lrs@oH<9791hEM4:WkCRk6']abjmYGhG(>PBEkdZg2.)7V9sd]H$C.[sW]^9u&.'=HGAH>u18d^`;3iol!rGo'TU>Z4kk?@#8Rht!kFq=+Z)l@6jMVbP#GSb-fJ[>/(Aqk:K9osq-%NRi,mDLLQ?=BRReFo]t]EYj/Bm's++Fdd(CP91)2r/PK$H?)O*7($sq*DT7im(OF:?-d*ViWraP]dWj10j0<V;?FNfZs&mn=eJs4E_L9:.%23rd(:*\4iPoG6Y1a)c0e#UR$PFcmP_ak-N#[#a[ZfNZ@/kAOj8$nBRekapuA"8J'SPkoPX\N`fE=[>(#t`@RE2\s/r'T<VY\(6A!%*1S6`cYN?+[MN9?q;4`gbFf)7J;qUS%4e-C0KV9.,e^7?qTrAg%\5gHor^gUBVEZfG$-hhj[,Cm;H=M0Ts7fVOQ-siFT/6kT0%0&p7X+@$lWmYO$+b]CD9uUKAqo:Gi*S3U9Mb&3[-hmdeX,O6MWp!\[C]r!qi\TDO6VFfj\N4tP*N-$]hB*g._?LB9H/`CrCK[5*m):.q+3]^VraPK\l62c3OAZEquJVL6<;-n.nbl!4uLM`\aiJ%WBbVgR9/t(7tkseq=b7\Oe$$BO0u+$XKk8k?hWPUk,Ed6oBEk3\XSJF^0Fu4rG*CC=[=+$2<M(tf,E+<(]>$eE9$n^oQIrFeur/7l1,LnXZ>Vl@s>DWi^*Wf3ld!D7]i!"hU4<&;3S]XEk428/3DJ0d$n(=`]s''!5S'P.AhgJlu3[%kiV8thg-VcXaI,'S)u#'4VLEU-gVN;^'W?5T4WS<-ei"M:Y&5Ve&o:h`r!'eXrk?HRkCQGA\2Dspr^ni0ZLKn3G5]`LHf09hj^4M,Y^ep`lF9uROt@M$gG=3nI:Q8\7n<(`"G!:bK/I.VUfb/hq6/$=kr_8rVLf@Fu,5fPfi^2gWSi^6/9iSqtDJ?nhO'WB\GCQ@9r;)\j`%`XP(=7CQoXK29RoTcMF&MqRhja_R2tWLTZ&=;dZ0#2oA?)lf04*31VWI#O"'23%g+^Lg<\m]I&2BPcme+V?-=UDD=<1%]AF]0n6c)@dL[Bc+:<F$gir'Y"dLTWiee=QZp"+mOIs+ViPP4(V3f$+#eCJ'^4^r/DKt'AksMtK!M/WSW]C:6qgRQMsP#]("4tlT>R9T_k/l%Gd,ak[UG<S9B@e+Yl7YRhIsVZQ]?&Q$[\N8XdN-@C:'#@QRCdY\D(07Rt7!0BB[ofcfncHT]48r(k2d23bSGL*D-7M]#6G5jJOA+H!)'t#*pl-EGI]HVII-C[Htd,"^HAC2K7NOH*;k)4tfBSf>`u3Q&6Nsg:nDo8I0Fu;@.51hs(*>?K6PR0b'eJF?A_Mh%#4o23_??NqD:5;JBuajgoQgh\E/8H?Zf!?4!Ou,-tTsX/87nQmNp*5!H^#a,W810Xg.7L=:?mgEi#<!7UDu)P3k1FJJ^$(64;^\#cg'eX2rErZ(n?r!F;A^n9'IA64"X<,C?E%<8G#h<?OS06-Oi2ZNru1]Y=`de%(^+-.X.CMdV(j%&ROnY$+0%F[U:!rr>b/]9IG!.`om9EP7pkUj_0!!%Q+;NC!M!!!#G)i/2.!!']dQj*Njcs)<?!!!#4KpW&E!74r+B`J,5]nMgX!!(AM1Pk:eQQ$pWdOPR`%t!4%FE's!htI@*#lsIukcQ=So/mlhWh4SkcuqV7S;#l"s5fY`'Qs:heUUaVS#EB2H[*R(MF%&JjuGj>cO6%lVd"qRRtY2*p:*Ju1[V>o]dbN!s5P1VMn4>N>$g?-9Ot(LbQWf:!!#JUD4fC4T<M[A8.j><\IYaUFGn'>>q[h$q`cU&d;^P6\X2\%I/&3&V(9MA_jk2pk90fRa1bICoN"1tp<1Zt+!)J>4h)[foKgNJGc:=%QKa:)<#N"sOg1K3(]4q$4k*`$(?OrE1sa_&B2usP%M;]YIYahEo"eEM/&Gsk<`;M;L`%iq2Di5,a3E9jrm^bneU`YV4It:P:4;?"O7\eHl2-X/\B*?Sk?r'e06ht<Vc[`j!!*!qikD:blVFW3X?3iTW'$rBoTnCD#g+`em%t1Jm0I4iV,#;bm]9OQGAP0TmNHV#fC[31i;28iiPE)Ac2fj3HK\LYWZqR?Vq6c;A)^;M$$pB!0l9>j`hm?'VFC^I9ZH^$rNuq1pAFbNnZ]P#m=$^l"6KK'9Uj[&*IgmdgEu8)&<dXLh%(2-L<(U^U@hd7cqC"QF;?`=%Bs,@+=&mLVF!<OUML^9V2d^Xr=,r;IdKQt"2H!%lH\5cQg^cjStV0#RP?D^\Y#$s[_G9k\PLWhIk#Ms)P5dF\F$V+IktWcKq5&'A7#"ZaL)G%pf>uC)/)\N8WWm*3#`N\;GYYL^YPCI(#3),C@9+9V_.OaG$A>'8]S2<8H*.F8e:eLNdA>*HqPQ8G!Cn-=EM)[,\AT<YkDN;a#7<ml<d\JQ(9+R.KKPIo0bIFXuN;+Co$p@)DNi3J":l4BZ7leb3/L9j%jemEDQQ4piGt$g8a"pV//4gX=AJJ9ucfgMpR7Je8t>UT/^+>6,3AI9Xiga[T\!T9s(=o4f/H6e#A`&V2K`8cGBNYrK*DW&99:>IfCh^o_shCCq7`mf+%]Hg&_9Pgq_+.VbEGKYR)KQdf6LTb5Vl0)033W^;/M#oZVTeeIN&B<VKO_nY\*S=%O/>?M$fI97Ok1V2%BpqZjl!G@$g<6udf>1>m9.2plG8e65YpHbY&IRdBVM>']Obge<1dU7SrZgaDas1QCX-VF!\AjnB-4\u<lSkNs<Lf3Ria],C\I=\?AAEIZ`.P`s\Q9?MQ;AlF[R`]<psTCDb2SZM*(pM#%uDZ^*e*2sqs*b\-)8;en[*#]UC5It8=n`1q*s.#(*9_F'!iLdW6Cp<0oZ.6Q`G.':K/*FlUZG-jo32W)N&IV5AKmVJ,g@H:(4<k>"BuOe)!;OHr@X?sJOY,7mp,Vo_(XR[0N:k\gje8^@lcrr's0#YLrtCXU]Y3s\TU%UWK,+-%I=dNK02"57c.l@P/j#9R<E0qPFj.r,Lfm^NfrBMkCe\H=-d2nlGnU/X!54)R"oqKk5MT09$\/3MgC-,/9EP7pkUj_0!!%Q+6;.I]!9c#Q1]RN+hGT8G!!!#G.mF"6zzzzzzzzB#jo^qMes7~>endstream
|
452 |
+
endobj
|
453 |
+
115 0 obj
|
454 |
+
<< /Contents 163 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.50baa64f1af275cede837017a3536486 114 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
|
455 |
+
/Type /Page >>
|
456 |
+
endobj
|
457 |
+
116 0 obj
|
458 |
+
<< /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 409.0329 710.9786 0 ] /Rect [ 68.69291 107.6161 74.25291 119.6161 ] /Subtype /Link /Type /Annot >>
|
459 |
+
endobj
|
460 |
+
117 0 obj
|
461 |
+
<< /Annots [ 116 0 R ] /Contents 164 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
|
462 |
+
/Trans << >> /Type /Page >>
|
463 |
+
endobj
|
464 |
+
118 0 obj
|
465 |
+
<< /Outlines 120 0 R /PageLabels 165 0 R /PageMode /UseNone /Pages 145 0 R /Type /Catalog >>
|
466 |
+
endobj
|
467 |
+
119 0 obj
|
468 |
+
<< /Author () /CreationDate (D:20151029123655-01'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
|
469 |
+
/Title (Magento Extension zur Einbindung des Versandlogistiksystems "Hermes") >>
|
470 |
+
endobj
|
471 |
+
120 0 obj
|
472 |
+
<< /Count 28 /First 121 0 R /Last 142 0 R /Type /Outlines >>
|
473 |
+
endobj
|
474 |
+
121 0 obj
|
475 |
+
<< /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Next 122 0 R /Parent 120 0 R /Title (\376\377\0001\000\240\000\240\000\240\000V\000o\000r\000a\000u\000s\000s\000e\000t\000z\000u\000n\000g\000e\000n) >>
|
476 |
+
endobj
|
477 |
+
122 0 obj
|
478 |
+
<< /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Next 123 0 R /Parent 120 0 R /Prev 121 0 R /Title (\376\377\0002\000\240\000\240\000\240\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
|
479 |
+
endobj
|
480 |
+
123 0 obj
|
481 |
+
<< /Count 7 /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /First 124 0 R /Last 130 0 R /Next 131 0 R /Parent 120 0 R
|
482 |
+
/Prev 122 0 R /Title (\376\377\0003\000\240\000\240\000\240\000K\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
|
483 |
+
endobj
|
484 |
+
124 0 obj
|
485 |
+
<< /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Next 125 0 R /Parent 123 0 R /Title (\376\377\0003\000.\0001\000\240\000\240\000\240\000P\000r\000o\000d\000u\000k\000t\000l\000i\000s\000t\000e) >>
|
486 |
+
endobj
|
487 |
+
125 0 obj
|
488 |
+
<< /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Next 126 0 R /Parent 123 0 R /Prev 124 0 R /Title (\376\377\0003\000.\0002\000\240\000\240\000\240\000B\000a\000s\000i\000s\000k\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
|
489 |
+
endobj
|
490 |
+
126 0 obj
|
491 |
+
<< /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Next 127 0 R /Parent 123 0 R /Prev 125 0 R /Title (\376\377\0003\000.\0003\000\240\000\240\000\240\000S\000t\000a\000m\000m\000d\000a\000t\000e\000n) >>
|
492 |
+
endobj
|
493 |
+
127 0 obj
|
494 |
+
<< /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Next 128 0 R /Parent 123 0 R /Prev 126 0 R /Title (\376\377\0003\000.\0004\000\240\000\240\000\240\000V\000e\000r\000s\000a\000n\000d\000o\000p\000t\000i\000o\000n\000e\000n) >>
|
495 |
+
endobj
|
496 |
+
128 0 obj
|
497 |
+
<< /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Next 129 0 R /Parent 123 0 R /Prev 127 0 R /Title (\376\377\0003\000.\0005\000\240\000\240\000\240\000V\000e\000r\000s\000a\000n\000d\000-\000L\000a\000b\000e\000l\000-\000O\000p\000t\000i\000o\000n\000e\000n\000 \000\(\000n\000u\000r\000 \000f\000\374\000r\000 \000d\000i\000e\000 \000S\000e\000n\000d\000u\000n\000g\000s\000a\000n\000s\000i\000c\000h\000t\000\)) >>
|
498 |
+
endobj
|
499 |
+
129 0 obj
|
500 |
+
<< /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Next 130 0 R /Parent 123 0 R /Prev 128 0 R /Title (\376\377\0003\000.\0006\000\240\000\240\000\240\000E\000-\000M\000a\000i\000l\000-\000O\000p\000t\000i\000o\000n\000e\000n) >>
|
501 |
+
endobj
|
502 |
+
130 0 obj
|
503 |
+
<< /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Parent 123 0 R /Prev 129 0 R /Title (\376\377\0003\000.\0007\000\240\000\240\000\240\000A\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000 \000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000 \000v\000o\000n\000 \000S\000e\000n\000d\000u\000n\000g\000e\000n) >>
|
504 |
+
endobj
|
505 |
+
131 0 obj
|
506 |
+
<< /Count 10 /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /First 132 0 R /Last 141 0 R /Next 142 0 R /Parent 120 0 R
|
507 |
+
/Prev 123 0 R /Title (\376\377\0004\000\240\000\240\000\240\000N\000u\000t\000z\000u\000n\000g) >>
|
508 |
+
endobj
|
509 |
+
132 0 obj
|
510 |
+
<< /Count 1 /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /First 133 0 R /Last 133 0 R /Next 134 0 R /Parent 131 0 R
|
511 |
+
/Title (\376\377\0004\000.\0001\000\240\000\240\000\240\000M\000a\000n\000u\000e\000l\000l\000e\000r\000 \000M\000o\000d\000u\000s) >>
|
512 |
+
endobj
|
513 |
+
133 0 obj
|
514 |
+
<< /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Parent 132 0 R /Title (\376\377\0004\000.\0001\000.\0001\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000l\000e\000g\000e\000n) >>
|
515 |
+
endobj
|
516 |
+
134 0 obj
|
517 |
+
<< /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Next 135 0 R /Parent 131 0 R /Prev 132 0 R /Title (\376\377\0004\000.\0002\000\240\000\240\000\240\000H\000a\000l\000b\000a\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000r\000 \000M\000o\000d\000u\000s) >>
|
518 |
+
endobj
|
519 |
+
135 0 obj
|
520 |
+
<< /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Next 136 0 R /Parent 131 0 R /Prev 134 0 R /Title (\376\377\0004\000.\0003\000\240\000\240\000\240\000A\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000r\000 \000M\000o\000d\000u\000s) >>
|
521 |
+
endobj
|
522 |
+
136 0 obj
|
523 |
+
<< /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Next 137 0 R /Parent 131 0 R /Prev 135 0 R /Title (\376\377\0004\000.\0004\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000s\000e\000h\000e\000n\000 \000u\000n\000d\000 \000g\000g\000f\000.\000 \000b\000e\000a\000r\000b\000e\000i\000t\000e\000n) >>
|
524 |
+
endobj
|
525 |
+
137 0 obj
|
526 |
+
<< /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Next 138 0 R /Parent 131 0 R /Prev 136 0 R /Title (\376\377\0004\000.\0005\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000 \000H\000e\000r\000m\000e\000s\000 \000\374\000b\000e\000r\000t\000r\000a\000g\000e\000n) >>
|
527 |
+
endobj
|
528 |
+
138 0 obj
|
529 |
+
<< /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Next 139 0 R /Parent 131 0 R /Prev 137 0 R /Title (\376\377\0004\000.\0006\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000b\000b\000r\000e\000c\000h\000e\000n) >>
|
530 |
+
endobj
|
531 |
+
139 0 obj
|
532 |
+
<< /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Next 140 0 R /Parent 131 0 R /Prev 138 0 R /Title (\376\377\0004\000.\0007\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000w\000i\000e\000d\000e\000r\000a\000u\000f\000n\000e\000h\000m\000e\000n) >>
|
533 |
+
endobj
|
534 |
+
140 0 obj
|
535 |
+
<< /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Next 141 0 R /Parent 131 0 R /Prev 139 0 R /Title (\376\377\0004\000.\0008\000\240\000\240\000\240\000L\000a\000b\000e\000l\000s\000 \000a\000b\000r\000u\000f\000e\000n) >>
|
536 |
+
endobj
|
537 |
+
141 0 obj
|
538 |
+
<< /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Parent 131 0 R /Prev 140 0 R /Title (\376\377\0004\000.\0009\000\240\000\240\000\240\000T\000r\000a\000c\000k\000i\000n\000g\000l\000i\000n\000k\000 \000\366\000f\000f\000n\000e\000n) >>
|
539 |
+
endobj
|
540 |
+
142 0 obj
|
541 |
+
<< /Count 2 /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /First 143 0 R /Last 144 0 R /Parent 120 0 R /Prev 131 0 R
|
542 |
+
/Title (\376\377\0005\000\240\000\240\000\240\000A\000n\000f\000o\000r\000d\000e\000r\000u\000n\000g\000e\000n\000 \000a\000n\000 \000e\000i\000n\000e\000 \000H\000e\000r\000m\000e\000s\000-\000S\000e\000n\000d\000u\000n\000g) >>
|
543 |
+
endobj
|
544 |
+
143 0 obj
|
545 |
+
<< /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Next 144 0 R /Parent 142 0 R /Title (\376\377\0005\000.\0001\000\240\000\240\000\240\000E\000r\000l\000a\000u\000b\000t\000e\000 \000L\000\344\000n\000d\000e\000r) >>
|
546 |
+
endobj
|
547 |
+
144 0 obj
|
548 |
+
<< /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Parent 142 0 R /Prev 143 0 R /Title (\376\377\0005\000.\0002\000\240\000\240\000\240\000N\000a\000c\000h\000n\000a\000h\000m\000e) >>
|
549 |
+
endobj
|
550 |
+
145 0 obj
|
551 |
+
<< /Count 19 /Kids [ 5 0 R 54 0 R 55 0 R 61 0 R 63 0 R 64 0 R 65 0 R 68 0 R 73 0 R 85 0 R
|
552 |
+
90 0 R 93 0 R 98 0 R 101 0 R 104 0 R 108 0 R 113 0 R 115 0 R 117 0 R ] /Type /Pages >>
|
553 |
+
endobj
|
554 |
+
146 0 obj
|
555 |
+
<< /Length 727 >>
|
556 |
+
stream
|
557 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
558 |
+
q
|
559 |
+
1 0 0 1 62.69291 696.9786 cm
|
560 |
+
q
|
561 |
+
0 .533333 .603922 rg
|
562 |
+
BT 1 0 0 1 0 28 Tm /F2 20 Tf 24 TL 47.69488 0 Td (Magento Extension zur Einbindung des) Tj T* 23.82 0 Td (Versandlogistiksystems "Hermes") Tj T* -71.51488 0 Td ET
|
563 |
+
Q
|
564 |
+
Q
|
565 |
+
q
|
566 |
+
1 0 0 1 62.69291 686.9786 cm
|
567 |
+
Q
|
568 |
+
q
|
569 |
+
1 0 0 1 411.0236 765.1519 cm
|
570 |
+
q
|
571 |
+
127.5591 0 0 20.04499 0 0 cm
|
572 |
+
/FormXob.efc54228790fd6106318b719fde81cf8 Do
|
573 |
+
Q
|
574 |
+
Q
|
575 |
+
q
|
576 |
+
1 0 0 1 56.69291 56.69291 cm
|
577 |
+
0 0 0 rg
|
578 |
+
BT /F1 10 Tf 12 TL ET
|
579 |
+
q
|
580 |
+
1 0 0 1 6 3 cm
|
581 |
+
q
|
582 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Stand: 29/10/2015) Tj T* ET
|
583 |
+
Q
|
584 |
+
Q
|
585 |
+
q
|
586 |
+
1 0 0 1 246.9449 3 cm
|
587 |
+
q
|
588 |
+
0 0 0 rg
|
589 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (1/19) Tj T* -209.4849 0 Td ET
|
590 |
+
Q
|
591 |
+
Q
|
592 |
+
q
|
593 |
+
Q
|
594 |
+
Q
|
595 |
+
|
596 |
+
endstream
|
597 |
+
endobj
|
598 |
+
147 0 obj
|
599 |
+
<< /Length 6925 >>
|
600 |
+
stream
|
601 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
602 |
+
q
|
603 |
+
1 0 0 1 62.69291 723.9786 cm
|
604 |
+
q
|
605 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (Hermes - Benutzerdokumentation) Tj T* ET
|
606 |
+
Q
|
607 |
+
Q
|
608 |
+
q
|
609 |
+
1 0 0 1 62.69291 285.9786 cm
|
610 |
+
0 0 0 rg
|
611 |
+
BT /F1 10 Tf 12 TL ET
|
612 |
+
q
|
613 |
+
1 0 0 1 0 417 cm
|
614 |
+
q
|
615 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (1 Voraussetzungen) Tj T* ET
|
616 |
+
Q
|
617 |
+
Q
|
618 |
+
q
|
619 |
+
1 0 0 1 397.8898 417 cm
|
620 |
+
q
|
621 |
+
0 0 .501961 rg
|
622 |
+
0 0 .501961 RG
|
623 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
|
624 |
+
Q
|
625 |
+
Q
|
626 |
+
q
|
627 |
+
1 0 0 1 0 399 cm
|
628 |
+
q
|
629 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (2 Installation) Tj T* ET
|
630 |
+
Q
|
631 |
+
Q
|
632 |
+
q
|
633 |
+
1 0 0 1 397.8898 399 cm
|
634 |
+
q
|
635 |
+
0 0 .501961 rg
|
636 |
+
0 0 .501961 RG
|
637 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (4) Tj T* -66.44 0 Td ET
|
638 |
+
Q
|
639 |
+
Q
|
640 |
+
q
|
641 |
+
1 0 0 1 0 381 cm
|
642 |
+
q
|
643 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (3 Konfiguration) Tj T* ET
|
644 |
+
Q
|
645 |
+
Q
|
646 |
+
q
|
647 |
+
1 0 0 1 397.8898 381 cm
|
648 |
+
q
|
649 |
+
0 0 .501961 rg
|
650 |
+
0 0 .501961 RG
|
651 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
652 |
+
Q
|
653 |
+
Q
|
654 |
+
q
|
655 |
+
1 0 0 1 0 363 cm
|
656 |
+
q
|
657 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.1 Produktliste) Tj T* ET
|
658 |
+
Q
|
659 |
+
Q
|
660 |
+
q
|
661 |
+
1 0 0 1 397.8898 363 cm
|
662 |
+
q
|
663 |
+
0 0 .501961 rg
|
664 |
+
0 0 .501961 RG
|
665 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
666 |
+
Q
|
667 |
+
Q
|
668 |
+
q
|
669 |
+
1 0 0 1 0 345 cm
|
670 |
+
q
|
671 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.2 Basiskonfiguration) Tj T* ET
|
672 |
+
Q
|
673 |
+
Q
|
674 |
+
q
|
675 |
+
1 0 0 1 397.8898 345 cm
|
676 |
+
q
|
677 |
+
0 0 .501961 rg
|
678 |
+
0 0 .501961 RG
|
679 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
680 |
+
Q
|
681 |
+
Q
|
682 |
+
q
|
683 |
+
1 0 0 1 0 327 cm
|
684 |
+
q
|
685 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.3 Stammdaten) Tj T* ET
|
686 |
+
Q
|
687 |
+
Q
|
688 |
+
q
|
689 |
+
1 0 0 1 397.8898 327 cm
|
690 |
+
q
|
691 |
+
0 0 .501961 rg
|
692 |
+
0 0 .501961 RG
|
693 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
694 |
+
Q
|
695 |
+
Q
|
696 |
+
q
|
697 |
+
1 0 0 1 0 309 cm
|
698 |
+
q
|
699 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.4 Versandoptionen) Tj T* ET
|
700 |
+
Q
|
701 |
+
Q
|
702 |
+
q
|
703 |
+
1 0 0 1 397.8898 309 cm
|
704 |
+
q
|
705 |
+
0 0 .501961 rg
|
706 |
+
0 0 .501961 RG
|
707 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
708 |
+
Q
|
709 |
+
Q
|
710 |
+
q
|
711 |
+
1 0 0 1 0 291 cm
|
712 |
+
q
|
713 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.5 Versand-Label-Optionen \(nur f\374r die Sendungsansicht\)) Tj T* ET
|
714 |
+
Q
|
715 |
+
Q
|
716 |
+
q
|
717 |
+
1 0 0 1 397.8898 291 cm
|
718 |
+
q
|
719 |
+
0 0 .501961 rg
|
720 |
+
0 0 .501961 RG
|
721 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
|
722 |
+
Q
|
723 |
+
Q
|
724 |
+
q
|
725 |
+
1 0 0 1 0 273 cm
|
726 |
+
q
|
727 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.6 E-Mail-Optionen) Tj T* ET
|
728 |
+
Q
|
729 |
+
Q
|
730 |
+
q
|
731 |
+
1 0 0 1 397.8898 273 cm
|
732 |
+
q
|
733 |
+
0 0 .501961 rg
|
734 |
+
0 0 .501961 RG
|
735 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
|
736 |
+
Q
|
737 |
+
Q
|
738 |
+
q
|
739 |
+
1 0 0 1 0 255 cm
|
740 |
+
q
|
741 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.7 Automatische Erstellung von Sendungen) Tj T* ET
|
742 |
+
Q
|
743 |
+
Q
|
744 |
+
q
|
745 |
+
1 0 0 1 397.8898 255 cm
|
746 |
+
q
|
747 |
+
0 0 .501961 rg
|
748 |
+
0 0 .501961 RG
|
749 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
|
750 |
+
Q
|
751 |
+
Q
|
752 |
+
q
|
753 |
+
1 0 0 1 0 237 cm
|
754 |
+
q
|
755 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (4 Nutzung) Tj T* ET
|
756 |
+
Q
|
757 |
+
Q
|
758 |
+
q
|
759 |
+
1 0 0 1 397.8898 237 cm
|
760 |
+
q
|
761 |
+
0 0 .501961 rg
|
762 |
+
0 0 .501961 RG
|
763 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
|
764 |
+
Q
|
765 |
+
Q
|
766 |
+
q
|
767 |
+
1 0 0 1 0 219 cm
|
768 |
+
q
|
769 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1 Manueller Modus) Tj T* ET
|
770 |
+
Q
|
771 |
+
Q
|
772 |
+
q
|
773 |
+
1 0 0 1 397.8898 219 cm
|
774 |
+
q
|
775 |
+
0 0 .501961 rg
|
776 |
+
0 0 .501961 RG
|
777 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
|
778 |
+
Q
|
779 |
+
Q
|
780 |
+
q
|
781 |
+
1 0 0 1 0 201 cm
|
782 |
+
q
|
783 |
+
BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1.1 Sendung anlegen) Tj T* ET
|
784 |
+
Q
|
785 |
+
Q
|
786 |
+
q
|
787 |
+
1 0 0 1 397.8898 201 cm
|
788 |
+
q
|
789 |
+
0 0 .501961 rg
|
790 |
+
0 0 .501961 RG
|
791 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
|
792 |
+
Q
|
793 |
+
Q
|
794 |
+
q
|
795 |
+
1 0 0 1 0 183 cm
|
796 |
+
q
|
797 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2 Halbautomatischer Modus) Tj T* ET
|
798 |
+
Q
|
799 |
+
Q
|
800 |
+
q
|
801 |
+
1 0 0 1 397.8898 183 cm
|
802 |
+
q
|
803 |
+
0 0 .501961 rg
|
804 |
+
0 0 .501961 RG
|
805 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET
|
806 |
+
Q
|
807 |
+
Q
|
808 |
+
q
|
809 |
+
1 0 0 1 0 165 cm
|
810 |
+
q
|
811 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.3 Automatischer Modus) Tj T* ET
|
812 |
+
Q
|
813 |
+
Q
|
814 |
+
q
|
815 |
+
1 0 0 1 397.8898 165 cm
|
816 |
+
q
|
817 |
+
0 0 .501961 rg
|
818 |
+
0 0 .501961 RG
|
819 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
|
820 |
+
Q
|
821 |
+
Q
|
822 |
+
q
|
823 |
+
1 0 0 1 0 147 cm
|
824 |
+
q
|
825 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.4 Sendung ansehen und ggf. bearbeiten) Tj T* ET
|
826 |
+
Q
|
827 |
+
Q
|
828 |
+
q
|
829 |
+
1 0 0 1 397.8898 147 cm
|
830 |
+
q
|
831 |
+
0 0 .501961 rg
|
832 |
+
0 0 .501961 RG
|
833 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
|
834 |
+
Q
|
835 |
+
Q
|
836 |
+
q
|
837 |
+
1 0 0 1 0 129 cm
|
838 |
+
q
|
839 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.5 Sendung an Hermes \374bertragen) Tj T* ET
|
840 |
+
Q
|
841 |
+
Q
|
842 |
+
q
|
843 |
+
1 0 0 1 397.8898 129 cm
|
844 |
+
q
|
845 |
+
0 0 .501961 rg
|
846 |
+
0 0 .501961 RG
|
847 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
|
848 |
+
Q
|
849 |
+
Q
|
850 |
+
q
|
851 |
+
1 0 0 1 0 111 cm
|
852 |
+
q
|
853 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.6 Sendung abbrechen) Tj T* ET
|
854 |
+
Q
|
855 |
+
Q
|
856 |
+
q
|
857 |
+
1 0 0 1 397.8898 111 cm
|
858 |
+
q
|
859 |
+
0 0 .501961 rg
|
860 |
+
0 0 .501961 RG
|
861 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
|
862 |
+
Q
|
863 |
+
Q
|
864 |
+
q
|
865 |
+
1 0 0 1 0 93 cm
|
866 |
+
q
|
867 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.7 Sendung wiederaufnehmen) Tj T* ET
|
868 |
+
Q
|
869 |
+
Q
|
870 |
+
q
|
871 |
+
1 0 0 1 397.8898 93 cm
|
872 |
+
q
|
873 |
+
0 0 .501961 rg
|
874 |
+
0 0 .501961 RG
|
875 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
|
876 |
+
Q
|
877 |
+
Q
|
878 |
+
q
|
879 |
+
1 0 0 1 0 75 cm
|
880 |
+
q
|
881 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.8 Labels abrufen) Tj T* ET
|
882 |
+
Q
|
883 |
+
Q
|
884 |
+
q
|
885 |
+
1 0 0 1 397.8898 75 cm
|
886 |
+
q
|
887 |
+
0 0 .501961 rg
|
888 |
+
0 0 .501961 RG
|
889 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
|
890 |
+
Q
|
891 |
+
Q
|
892 |
+
q
|
893 |
+
1 0 0 1 0 57 cm
|
894 |
+
q
|
895 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.9 Trackinglink \366ffnen) Tj T* ET
|
896 |
+
Q
|
897 |
+
Q
|
898 |
+
q
|
899 |
+
1 0 0 1 397.8898 57 cm
|
900 |
+
q
|
901 |
+
0 0 .501961 rg
|
902 |
+
0 0 .501961 RG
|
903 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (16) Tj T* -60.88 0 Td ET
|
904 |
+
Q
|
905 |
+
Q
|
906 |
+
q
|
907 |
+
1 0 0 1 0 39 cm
|
908 |
+
q
|
909 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (5 Anforderungen an eine Hermes-Sendung) Tj T* ET
|
910 |
+
Q
|
911 |
+
Q
|
912 |
+
q
|
913 |
+
1 0 0 1 397.8898 39 cm
|
914 |
+
q
|
915 |
+
0 0 .501961 rg
|
916 |
+
0 0 .501961 RG
|
917 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (19) Tj T* -60.88 0 Td ET
|
918 |
+
Q
|
919 |
+
Q
|
920 |
+
q
|
921 |
+
1 0 0 1 0 21 cm
|
922 |
+
q
|
923 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1 Erlaubte L\344nder) Tj T* ET
|
924 |
+
Q
|
925 |
+
Q
|
926 |
+
q
|
927 |
+
|