lfnds_donation - Version 1.0.0

Version Notes

Stable Release

Download this release

Release Info

Developer elefunds GmbH
Extension lfnds_donation
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (114) hide show
  1. app/code/community/Lfnds/Donation/Block/Checkout/Banner.php +142 -0
  2. app/code/community/Lfnds/Donation/Block/Checkout/Socialmedia.php +145 -0
  3. app/code/community/Lfnds/Donation/Block/Page/Head.php +103 -0
  4. app/code/community/Lfnds/Donation/Block/Sales/Order/Email.php +59 -0
  5. app/code/community/Lfnds/Donation/Helper/Data.php +276 -0
  6. app/code/community/Lfnds/Donation/Manager/SyncManager.php +227 -0
  7. app/code/community/Lfnds/Donation/Model/Donation.php +143 -0
  8. app/code/community/Lfnds/Donation/Model/Mysql4/Donation.php +55 -0
  9. app/code/community/Lfnds/Donation/Model/Mysql4/Donation/Collection.php +117 -0
  10. app/code/community/Lfnds/Donation/Model/Mysql4/Receiver.php +56 -0
  11. app/code/community/Lfnds/Donation/Model/Mysql4/Receiver/Collection.php +103 -0
  12. app/code/community/Lfnds/Donation/Model/Observer.php +340 -0
  13. app/code/community/Lfnds/Donation/Model/Receiver.php +105 -0
  14. app/code/community/Lfnds/Donation/Model/System/Config/Source/Color.php +76 -0
  15. app/code/community/Lfnds/Donation/Model/System/Config/Source/Payment.php +79 -0
  16. app/code/community/Lfnds/Donation/Model/System/Config/Source/Position.php +65 -0
  17. app/code/community/Lfnds/Donation/Model/System/Config/Source/Theme.php +76 -0
  18. app/code/community/Lfnds/Donation/controllers/IndexController.php +27 -0
  19. app/code/community/Lfnds/Donation/etc/config.xml +218 -0
  20. app/code/community/Lfnds/Donation/etc/system.xml +136 -0
  21. app/code/community/Lfnds/Donation/sql/lfnds_donation_setup/mysql4-install-1.0.0.php +247 -0
  22. app/design/frontend/base/default/layout/lfnds_donation.xml +67 -0
  23. app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner.phtml +63 -0
  24. app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner_after.phtml +4 -0
  25. app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner_before.phtml +4 -0
  26. app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/socialmedia.phtml +13 -0
  27. app/design/frontend/base/default/template/lfnds/donation/mail/description.phtml +2 -0
  28. app/design/frontend/base/default/template/lfnds/donation/page/html/head.phtml +1 -0
  29. app/etc/modules/Lfnds_Donation.xml +11 -0
  30. app/locale/de_DE/Lfnds_Donation.csv +21 -0
  31. app/locale/en_US/Lfnds_Donation.csv +2 -0
  32. lib/Elefunds/Communication/CurlRequest.php +202 -0
  33. lib/Elefunds/Communication/RestInterface.php +97 -0
  34. lib/Elefunds/Communication/certificate/GandiProSSLCA.pem +3923 -0
  35. lib/Elefunds/Configuration/BaseConfiguration.php +344 -0
  36. lib/Elefunds/Configuration/ConfigurationInterface.php +208 -0
  37. lib/Elefunds/Configuration/DefaultConfiguration.php +80 -0
  38. lib/Elefunds/Documentation/PHPGuideBasics.md +160 -0
  39. lib/Elefunds/Documentation/PHPGuideConfiguration.md +146 -0
  40. lib/Elefunds/Documentation/PHPGuideTemplating.md +235 -0
  41. lib/Elefunds/Example/RawDataConfiguration.php +60 -0
  42. lib/Elefunds/Example/ShopExampleCheckoutSuccessConfiguration.php +69 -0
  43. lib/Elefunds/Example/ShopExampleConfiguration.php +77 -0
  44. lib/Elefunds/Example/rawDataExample.php +110 -0
  45. lib/Elefunds/Example/shopExample.php +81 -0
  46. lib/Elefunds/Example/shopExampleCheckoutSuccess.php +60 -0
  47. lib/Elefunds/Exception/ElefundsCommunicationException.php +56 -0
  48. lib/Elefunds/Exception/ElefundsException.php +120 -0
  49. lib/Elefunds/Facade.php +341 -0
  50. lib/Elefunds/Model/Donation.php +427 -0
  51. lib/Elefunds/Model/DonationInterface.php +219 -0
  52. lib/Elefunds/Model/Factory.php +122 -0
  53. lib/Elefunds/Model/Receiver.php +345 -0
  54. lib/Elefunds/Model/ReceiverInterface.php +201 -0
  55. lib/Elefunds/README.md +50 -0
  56. lib/Elefunds/Template/Shop/CheckoutConfiguration.php +119 -0
  57. lib/Elefunds/Template/Shop/CheckoutSuccess.phtml +18 -0
  58. lib/Elefunds/Template/Shop/CheckoutSuccessConfiguration.php +115 -0
  59. lib/Elefunds/Template/Shop/Css/color.less +2 -0
  60. lib/Elefunds/Template/Shop/Css/elefunds.less +436 -0
  61. lib/Elefunds/Template/Shop/Css/elefunds_dark_blue.min.css +1 -0
  62. lib/Elefunds/Template/Shop/Css/elefunds_dark_green.min.css +1 -0
  63. lib/Elefunds/Template/Shop/Css/elefunds_dark_grey.min.css +1 -0
  64. lib/Elefunds/Template/Shop/Css/elefunds_dark_orange.min.css +1 -0
  65. lib/Elefunds/Template/Shop/Css/elefunds_dark_purple.min.css +1 -0
  66. lib/Elefunds/Template/Shop/Css/elefunds_light_blue.min.css +1 -0
  67. lib/Elefunds/Template/Shop/Css/elefunds_light_green.min.css +1 -0
  68. lib/Elefunds/Template/Shop/Css/elefunds_light_grey.min.css +1 -0
  69. lib/Elefunds/Template/Shop/Css/elefunds_light_orange.min.css +1 -0
  70. lib/Elefunds/Template/Shop/Css/elefunds_light_purple.min.css +1 -0
  71. lib/Elefunds/Template/Shop/Css/elements.less +156 -0
  72. lib/Elefunds/Template/Shop/Helper/RequestHelper.php +149 -0
  73. lib/Elefunds/Template/Shop/Hooks/ShopHooks.php +307 -0
  74. lib/Elefunds/Template/Shop/Images/elefunds_item_main.png +0 -0
  75. lib/Elefunds/Template/Shop/Images/elefunds_item_small.png +0 -0
  76. lib/Elefunds/Template/Shop/Images/elefunds_item_thumbnail.png +0 -0
  77. lib/Elefunds/Template/Shop/Javascript/elefunds.jquery.js +227 -0
  78. lib/Elefunds/Template/Shop/Javascript/elefunds.jquery.min.js +1 -0
  79. lib/Elefunds/Template/Shop/Javascript/elefundsTT.jquery.js +211 -0
  80. lib/Elefunds/Template/Shop/ShopConfiguration.php +113 -0
  81. lib/Elefunds/Template/Shop/View.phtml +92 -0
  82. lib/Elefunds/Test/Unit/Configuration/BaseConfigurationTest.php +197 -0
  83. lib/Elefunds/Test/Unit/Configuration/DefaultConfigurationTest.php +72 -0
  84. lib/Elefunds/Test/Unit/Exception/ElefundsExceptionTest.php +97 -0
  85. lib/Elefunds/Test/Unit/FacadeTest.php +544 -0
  86. lib/Elefunds/Test/Unit/Model/DonationTest.php +430 -0
  87. lib/Elefunds/Test/Unit/Model/FactoryTest.php +107 -0
  88. lib/Elefunds/Test/Unit/Model/ReceiverTest.php +340 -0
  89. lib/Elefunds/Test/Unit/View/BaseViewTest.php +227 -0
  90. lib/Elefunds/View/BaseView.php +358 -0
  91. lib/Elefunds/View/ViewInterface.php +219 -0
  92. package.xml +54 -0
  93. skin/frontend/base/default/css/lfnds_donation/additional/elefunds_magento_additional.css +9 -0
  94. skin/frontend/base/default/css/lfnds_donation/additional/elefunds_magento_onestep_additional.css +454 -0
  95. skin/frontend/base/default/css/lfnds_donation/elefunds_dark_blue.min.css +1 -0
  96. skin/frontend/base/default/css/lfnds_donation/elefunds_dark_green.min.css +1 -0
  97. skin/frontend/base/default/css/lfnds_donation/elefunds_dark_grey.min.css +1 -0
  98. skin/frontend/base/default/css/lfnds_donation/elefunds_dark_orange.min.css +1 -0
  99. skin/frontend/base/default/css/lfnds_donation/elefunds_dark_purple.min.css +1 -0
  100. skin/frontend/base/default/css/lfnds_donation/elefunds_light_blue.min.css +1 -0
  101. skin/frontend/base/default/css/lfnds_donation/elefunds_light_green.min.css +1 -0
  102. skin/frontend/base/default/css/lfnds_donation/elefunds_light_grey.min.css +1 -0
  103. skin/frontend/base/default/css/lfnds_donation/elefunds_light_orange.min.css +1 -0
  104. skin/frontend/base/default/css/lfnds_donation/elefunds_light_purple.min.css +1 -0
  105. skin/frontend/base/default/images/lfnds_donation/elefunds_item_main.png +0 -0
  106. skin/frontend/base/default/images/lfnds_donation/elefunds_item_small.png +0 -0
  107. skin/frontend/base/default/images/lfnds_donation/elefunds_item_thumbnail.png +0 -0
  108. skin/frontend/base/default/js/lfnds_donation/additional/elefunds_magento_onepage_additional.js +147 -0
  109. skin/frontend/base/default/js/lfnds_donation/additional/elefunds_magento_onestep_additional.js +171 -0
  110. skin/frontend/base/default/js/lfnds_donation/elefunds.jquery.js +227 -0
  111. skin/frontend/base/default/js/lfnds_donation/elefunds.jquery.min.js +1 -0
  112. skin/frontend/base/default/js/lfnds_donation/elefundsTT.jquery.js +211 -0
  113. skin/frontend/base/default/js/lfnds_donation/jQueryNoConflict.js +1 -0
  114. skin/frontend/base/default/js/lfnds_donation/jquery-1.9.1.min.js +5 -0
app/code/community/Lfnds/Donation/Block/Checkout/Banner.php ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Block
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Block_Checkout_Banner extends Mage_Core_Block_Template {
51
+
52
+ /**
53
+ * @var Lfnds_Donation_Helper_Data $helper
54
+ */
55
+ protected $helper;
56
+
57
+ /**
58
+ * @var string
59
+ */
60
+ protected $position;
61
+
62
+ public function __construct() {
63
+ $this->helper = Mage::helper('lfnds_donation');
64
+ }
65
+
66
+ public function getPosition() {
67
+ if ($this->position === NULL) {
68
+ $this->position = Mage::getStoreConfig('lfnds_donation/advanced/banner_position');
69
+ }
70
+ return $this->position;
71
+ }
72
+
73
+ /**
74
+ * Returns the API Template.
75
+ *
76
+ * If we cannot display the Template, we return an empty string.
77
+ *
78
+ * Used and shown in /design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner.phtml
79
+ *
80
+ * @return string The rendered HTML Snippet
81
+ */
82
+ public function getApiTemplate() {
83
+
84
+ if (!$this->helper->isOneStepCheckoutInstalled()) {
85
+ // The event does not work with one step checkout.
86
+ // That's because the payment methods are not configured prior to the module.
87
+ Mage::dispatchEvent('elefunds_checkout_review_before_enable', array('object' => $this));
88
+ } else {
89
+ $this->helper->getConfiguredFacade()->getConfiguration()->getView()->assign('toolTipPosition', 'right');
90
+ }
91
+ $template = '';
92
+
93
+ if ($this->helper->isActive()) {
94
+
95
+ try {
96
+ $facade = $this->helper->getConfiguredFacade();
97
+
98
+ $banner_width = Mage::getStoreConfig('lfnds_donation/advanced/banner_width');
99
+ $total = Mage::getModel('checkout/cart')->getQuote()->getGrandTotal();
100
+ $localeCode = Mage::app()->getLocale()->getLocaleCode();
101
+ $symbols = Zend_Locale_Data::getList($localeCode, 'symbols');
102
+
103
+ $receivers = $this->helper->getReceivers();
104
+
105
+ if (count($receivers) >= 3) {
106
+
107
+ $facade->getConfiguration()
108
+ ->getView()
109
+ ->assign('shopWidth', $banner_width)
110
+ ->assign('currencyDelimiter', $symbols['decimal'])
111
+ ->assign('total', $total * 100)
112
+ ->assign('receivers', $receivers);
113
+
114
+ $template = $facade->renderTemplate();
115
+
116
+ }
117
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
118
+ Mage::logException($exception);
119
+ }
120
+ }
121
+ return $template;
122
+ }
123
+
124
+ public function getExcludedPaymentMethods() {
125
+ return $this->helper->getExcludedPaymentMethods();
126
+ }
127
+
128
+ /**
129
+ * Returns true if the elefunds plugin can be displayed.
130
+ *
131
+ * @return bool
132
+ */
133
+ public function canShowBanner() {
134
+ return $this->isActive;
135
+ }
136
+
137
+ public function deactivateBanner() {
138
+ $this->isActive = FALSE;
139
+ }
140
+
141
+
142
+ }
app/code/community/Lfnds/Donation/Block/Checkout/Socialmedia.php ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * General helper function to access and configure the SDK in magento
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Block
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Block_Checkout_Socialmedia extends Mage_Core_Block_Template {
50
+
51
+ /**
52
+ * @var Mage_Sales_Model_Order
53
+ */
54
+ protected $order;
55
+
56
+ /**
57
+ * @var Lfnds_Donation_Helper_Data
58
+ */
59
+ protected $helper;
60
+
61
+ public function __construct() {
62
+ $this->helper = Mage::helper('lfnds_donation');
63
+ }
64
+
65
+ /**
66
+ * Adds the elefunds page head to the layout.
67
+ */
68
+ protected function _prepareLayout() {
69
+ $headBlock = $this->getLayout()->createBlock('lfnds_donation/page_head', 'elefunds.head');
70
+ $this->getLayout()->getBlock('head')->setChild('elefunds.head', $headBlock);
71
+
72
+ parent::_prepareLayout();
73
+ }
74
+
75
+ /**
76
+ * Checks whether a donation exists in the actual order.
77
+ *
78
+ * @return bool
79
+ */
80
+ public function existDonation() {
81
+ $virtualProduct = $this->helper->getVirtualProduct();
82
+ if (!$virtualProduct) {
83
+ Mage::log('Unable to retrieve virtual product for elefunds.');
84
+ } else {
85
+ if ($this->getOrder() !== NULL && $this->getOrder()->getItemsCollection()->getItemByColumnValue('product_id', $virtualProduct->getId())) {
86
+ return TRUE;
87
+ }
88
+ }
89
+ return FALSE;
90
+ }
91
+
92
+ /**
93
+ * Retrieves the current order.
94
+ *
95
+ * @return Mage_Sales_Model_Order
96
+ */
97
+ public function getOrder() {
98
+ if (!$this->order) {
99
+ $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
100
+ if ($orderId) {
101
+ $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
102
+ $this->order = $order;
103
+ if (!$order->getId()) {
104
+ $this->order = NULL;
105
+ }
106
+ }
107
+ }
108
+ return $this->order;
109
+ }
110
+
111
+ /**
112
+ * Renders the social media template or returns an empty string if we do have nothing to show.
113
+ *
114
+ * @return string
115
+ */
116
+ public function renderSocialMedia() {
117
+ $order = $this->getOrder();
118
+
119
+ /** @var Elefunds_Facade $facade */
120
+ $facade = $this->helper->getConfiguredFacade(TRUE);
121
+
122
+ $donationItem = Mage::getModel('lfnds_donation/donation');
123
+ /** @var Lfnds_Donation_Model_Donation $donationItem */
124
+ $donationItem->loadByAttribute('foreign_id', $order->getIncrementId());
125
+
126
+ if ($donationItem->getId()) {
127
+ $receivers = $this->helper->getReceivers();
128
+
129
+ $receiverIds = $donationItem->getReceiverIds();
130
+ $receiversArray = array();
131
+ foreach ($receivers as $receiver) {
132
+ if (in_array($receiver->getId(TRUE), $receiverIds)) {
133
+ $receiversArray[$receiver->getId(TRUE)] = $receiver->getName();
134
+ }
135
+ }
136
+
137
+ $facade->getConfiguration()->getView()->assign('foreignId', $donationItem->getForeignId());
138
+ $facade->getConfiguration()->getView()->assign('receivers', $receiversArray);
139
+
140
+ return $facade->renderTemplate('CheckoutSuccess');
141
+ }
142
+
143
+ return '';
144
+ }
145
+ }
app/code/community/Lfnds/Donation/Block/Page/Head.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Block
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Block_Page_Head extends Mage_Core_Block_Template {
51
+
52
+ /**
53
+ * Gets CSS- and Javascript-files from the Elefunds Facade and adds them to the head block
54
+ */
55
+ protected function _prepareLayout() {
56
+
57
+ /** @var Lfnds_Donation_Helper_Data $helper */
58
+ $helper = Mage::helper('lfnds_donation');
59
+ $headBlock = $this->getLayout()->getBlock('head');
60
+
61
+ try {
62
+ $includeJQuery = Mage::getStoreConfig('lfnds_donation/advanced/include_jquery');
63
+
64
+ $facade = $helper->getConfiguredFacade();
65
+
66
+ // Javascript includes
67
+ $scriptFiles = $facade->getTemplateJavascriptFiles($includeJQuery);
68
+
69
+
70
+
71
+ if ($includeJQuery) {
72
+ array_unshift($scriptFiles, 'jQueryNoConflict.js');
73
+ array_unshift($scriptFiles, 'jquery-1.9.1.min.js');
74
+ }
75
+
76
+ foreach ($scriptFiles as $jsFile) {
77
+ $headBlock->addItem('skin_js', 'js' . DS . 'lfnds_donation' . DS . basename($jsFile));
78
+ }
79
+
80
+ if ($helper->isOneStepCheckoutInstalled()) {
81
+ $jsAdditional = '/elefunds_magento_onestep_additional.js';
82
+ $headBlock->addItem('skin_js', 'js' . DS . 'lfnds_donation' . DS . 'additional' . DS . basename($jsAdditional));
83
+ }
84
+
85
+ // CSS included
86
+ // This CSS is not used in OneStepCheckout
87
+ // Check layout/lfnds_donation.xml for OneStepCheckout CSS
88
+ if (!$helper->isOneStepCheckoutInstalled()) {
89
+ $cssFiles = $facade->getTemplateCssFiles();
90
+ foreach ($cssFiles as $cssFile) {
91
+ $headBlock->addCss('css' . DS . 'lfnds_donation' . DS . basename($cssFile));
92
+ }
93
+ } else {
94
+ $headBlock->addCss('css' . DS . 'lfnds_donation' . DS . 'additional' . DS . 'elefunds_magento_onestep_additional.css');
95
+ }
96
+
97
+
98
+ } catch (Exception $exception) {
99
+ Mage::logException($exception);
100
+ }
101
+ parent::_prepareLayout();
102
+ }
103
+ }
app/code/community/Lfnds/Donation/Block/Sales/Order/Email.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * General helper function to access and configure the SDK in magento
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Block
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Block_Sales_Order_Email extends Mage_Core_Block_Template {
50
+
51
+ protected function _toHtml() {
52
+ $item = $this->getLayout()->getBlock('additional.product.info')->getItem();
53
+
54
+ if ($item->getSku() === Lfnds_Donation_Model_Donation::ELEFUNDS_VIRTUAL_PRODUCT_SKU) {
55
+ return parent::_toHtml();
56
+ }
57
+ return '';
58
+ }
59
+ }
app/code/community/Lfnds/Donation/Helper/Data.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Helper
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Helper_Data extends Mage_Core_Helper_Abstract {
51
+
52
+ /**
53
+ * @var Mage_Catalog_Model_Product
54
+ */
55
+ protected $virtualProduct;
56
+
57
+ /**
58
+ * @var array
59
+ */
60
+ protected $facade = array();
61
+
62
+ /**
63
+ * @var Elefunds_Template_Shop_Helper_RequestHelper
64
+ */
65
+ protected $requestHelper;
66
+
67
+ /**
68
+ * @var array
69
+ */
70
+ protected $receivers;
71
+
72
+ /**
73
+ * @var Lfnds_Donation_Manager_SyncManager
74
+ */
75
+ protected $syncManager;
76
+
77
+ /**
78
+ * @var bool
79
+ */
80
+ protected $usesOneStepCheckout;
81
+
82
+ /**
83
+ * @var bool
84
+ */
85
+ protected $active;
86
+
87
+ /**
88
+ * Configures the facade based on the plugin settings and the current locale.
89
+ *
90
+ * @param bool $checkoutSuccess
91
+ * @param bool $autoFetchReceivers
92
+ * @return Elefunds_Facade
93
+ */
94
+ public function getConfiguredFacade($checkoutSuccess = FALSE, $autoFetchReceivers = TRUE) {
95
+ $configurationType = $checkoutSuccess ? 'CheckoutSuccess' : 'Checkout';
96
+
97
+ if (!isset($this->facade[$configurationType])) {
98
+
99
+ $configPath = Mage::getBaseDir('lib') . DS . 'Elefunds' . DS . 'Template'
100
+ . DS . 'Shop' . DS . $configurationType . 'Configuration.php';
101
+ $facadePath = Mage::getBaseDir('lib') . DS . 'Elefunds' . DS . 'Facade.php';
102
+
103
+ $className = 'Elefunds_Template_Shop_'.$configurationType.'Configuration';
104
+
105
+ require_once($facadePath);
106
+ require_once($configPath);
107
+
108
+ /** @var Elefunds_Configuration_ConfigurationInterface $configuration */
109
+ $configuration = new $className();
110
+
111
+ $magentoConfigBasePath = 'lfnds_donation/general';
112
+ $clientId = Mage::getStoreConfig($magentoConfigBasePath . '/client_id');
113
+ $apiKey = Mage::getStoreConfig($magentoConfigBasePath . '/api_key');
114
+ $countryCode = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
115
+
116
+ $configuration->setClientId($clientId)
117
+ ->setApiKey($apiKey)
118
+ ->setCountrycode($countryCode);
119
+
120
+ $theme = Mage::getStoreConfig($magentoConfigBasePath . '/theme');
121
+ $color = Mage::getStoreConfig($magentoConfigBasePath . '/color');
122
+
123
+
124
+ $facade = new Elefunds_Facade($configuration);
125
+ $facade->getConfiguration()->getView()->assign(
126
+ 'skin',
127
+ array(
128
+ 'theme' => $theme,
129
+ 'color' => $color
130
+ )
131
+ );
132
+
133
+ $this->facade[$configurationType] = $facade;
134
+ }
135
+
136
+ return $this->facade[$configurationType];
137
+ }
138
+
139
+ /**
140
+ * A helper to verify the request for elefunds donations.
141
+ *
142
+ * @param array $request
143
+ * @return Elefunds_Template_Shop_Helper_RequestHelper
144
+ */
145
+ public function getRequestHelper(array $request = array()) {
146
+ if ($this->requestHelper === NULL) {
147
+ $helperPath = Mage::getBaseDir('lib') . DS . 'Elefunds' . DS . 'Template'
148
+ . DS . 'Shop' . DS . 'Helper' . DS . 'RequestHelper.php';
149
+ require_once $helperPath;
150
+ $this->requestHelper = new Elefunds_Template_Shop_Helper_RequestHelper();
151
+ }
152
+ $this->requestHelper->setRequest($request);
153
+ return $this->requestHelper;
154
+ }
155
+
156
+
157
+ /**
158
+ * Returns a valid set of receivers.
159
+ *
160
+ * @return array
161
+ */
162
+ public function getReceivers() {
163
+
164
+ if ($this->receivers === NULL) {
165
+ $time = new DateTime();
166
+
167
+ /** @var Lfnds_Donation_Model_Mysql4_Receiver_Collection $receiversCollection */
168
+ $receiversCollection = Mage::getModel('lfnds_donation/receiver')->getCollection();
169
+
170
+
171
+ $receiversCollection->addFieldToFilter(
172
+ 'valid', array(
173
+ 'from' => $time->format("Y-m-d H:i:s")
174
+ )
175
+ )
176
+ ->addFieldToFilter('countrycode', substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2));
177
+
178
+ try {
179
+ if ($receiversCollection->getSize() < 3) {
180
+ $this->receivers = $this->getSyncManager()->syncReceivers();
181
+
182
+ if (count($this->receivers) < 3) {
183
+ // Okay, this line of code will hopefully never execute! We do ALWAYS provide three receivers.
184
+ $this->receivers = array();
185
+ }
186
+ } else {
187
+ $this->receivers = $receiversCollection;
188
+ }
189
+ } catch (Exception $exception) {
190
+ Mage::logException($exception);
191
+ Mage::log('Elefunds database tables not available or module improperly configured.');
192
+
193
+ $this->receivers = array();
194
+ }
195
+
196
+
197
+ }
198
+
199
+ return $this->receivers;
200
+ }
201
+
202
+ /**
203
+ * Returns the available receiver ids
204
+ *
205
+ * @return array
206
+ */
207
+ public function getAvailableReceiverIds() {
208
+ $ids = array();
209
+ /** @var Lfnds_Donation_Model_Mysql4_Receiver_Collection $receiversCollection */
210
+ $receiversCollection = Mage::getModel('lfnds_donation/receiver')->getCollection();
211
+ $receiversCollection->addFieldToFilter('countrycode', substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2));
212
+
213
+ /** Lfnds_Donation_Model_Receiver $receiver */
214
+ foreach ($receiversCollection as $receiver) {
215
+ $ids[] = $receiver->getReceiverId();
216
+ }
217
+ return $ids;
218
+ }
219
+
220
+ /**
221
+ * Retrieves the virtual product.
222
+ *
223
+ * @return Mage_Catalog_Model_Product
224
+ */
225
+ public function getVirtualProduct() {
226
+ /** @var Mage_Catalog_Model_Product $productModel */
227
+ $productModel = Mage::getModel('catalog/product');
228
+ $id = $productModel->getIdBySku(Lfnds_Donation_Model_Donation::ELEFUNDS_VIRTUAL_PRODUCT_SKU);
229
+ if (!$id) {
230
+ $this->virtualProduct = NULL;
231
+ } else {
232
+ $this->virtualProduct = $productModel->load($id);
233
+ }
234
+
235
+ return $this->virtualProduct;
236
+ }
237
+
238
+ public function getSyncManager() {
239
+ if ($this->syncManager === NULL) {
240
+ $this->syncManager = new Lfnds_Donation_Manager_SyncManager($this->getConfiguredFacade());
241
+ }
242
+
243
+ return $this->syncManager;
244
+ }
245
+
246
+ /**
247
+ * Returns the setted state of the one step checkout in the backend.
248
+ *
249
+ * @return bool
250
+ */
251
+ public function isOneStepCheckoutInstalled() {
252
+ if ($this->usesOneStepCheckout === NULL) {
253
+ $this->usesOneStepCheckout = Mage::getStoreConfig('lfnds_donation/advanced/uses_onestepcheckout');
254
+ }
255
+ return $this->usesOneStepCheckout;
256
+ }
257
+
258
+ /**
259
+ * @return array
260
+ */
261
+ public function getExcludedPaymentMethods() {
262
+ $path = 'lfnds_donation/advanced/excluded_payment_methods';
263
+ $storeId = Mage::app()->getStore()->getId();
264
+
265
+ $excludedMethodsAsString = Mage::getStoreConfig($path, $storeId);
266
+ return !empty($excludedMethodsAsString) ? explode(',', $excludedMethodsAsString) : array();
267
+ }
268
+
269
+ public function isActive() {
270
+ if ($this->active === NULL) {
271
+ $this->active = Mage::getStoreConfig('lfnds_donation/general/active');
272
+ }
273
+ return $this->active;
274
+ }
275
+
276
+ }
app/code/community/Lfnds/Donation/Manager/SyncManager.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Syncs between database and API.
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Manager
43
+ * @author Christian Peters <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Manager_SyncManager
50
+ {
51
+
52
+ /**
53
+ * @var Elefunds_Facade
54
+ */
55
+ protected $facade;
56
+
57
+ /**
58
+ * Initialisation of the sync process.
59
+ *
60
+ * @param Elefunds_Facade $facade
61
+ */
62
+ public function __construct(Elefunds_Facade $facade) {
63
+ $this->facade = $facade;
64
+ }
65
+
66
+ /**
67
+ * Retrieves fresh sets of receivers.
68
+ *
69
+ * The sync is done for the german and english language. For convenience,
70
+ * the receivers of the current magento locale are returned.
71
+ *
72
+ * @return array with receivers of the facade's original countrycode
73
+ */
74
+ public function syncReceivers() {
75
+
76
+ /** @var Lfnds_Donation_Model_Mysql4_Receiver_Collection $receiverCollection */
77
+ $receiverCollection = Mage::getModel('lfnds_donation/receiver')->getCollection();
78
+
79
+ // We want this to be available from anywhere, so we do not set state!
80
+ $originalCountryCode = $this->facade->getConfiguration()->getCountrycode();
81
+
82
+ $returnedReceivers = array();
83
+ $germanReceivers = array();
84
+ $englishReceivers = array();
85
+
86
+ try {
87
+ $this->facade->getConfiguration()->setCountrycode('de');
88
+ $germanReceivers = $this->facade->getReceivers();
89
+
90
+ $this->facade->getConfiguration()->setCountrycode('en');
91
+ $englishReceivers = $this->facade->getReceivers();
92
+
93
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
94
+ // Pass, we still use the old receivers.
95
+ }
96
+
97
+ if (count($germanReceivers) > 0) {
98
+ $receiverCollection->removeByLanguage('de')
99
+ ->mapArrayOfSDKReceiversToEntitiesAndSave($germanReceivers, 'de');
100
+ }
101
+
102
+ if (count($englishReceivers) > 0) {
103
+ $receiverCollection->removeByLanguage('en')
104
+ ->mapArrayOfSDKReceiversToEntitiesAndSave($englishReceivers, 'en');
105
+ }
106
+
107
+ if ($originalCountryCode === 'de') {
108
+ $returnedReceivers = $germanReceivers;
109
+ }
110
+
111
+ if ($originalCountryCode === 'en') {
112
+ $returnedReceivers = $englishReceivers;
113
+ }
114
+
115
+ $this->facade->getConfiguration()->setCountrycode($originalCountryCode);
116
+
117
+ return $returnedReceivers;
118
+ }
119
+
120
+ /**
121
+ * Syncs all donations to the API.
122
+ *
123
+ * @return $this
124
+ */
125
+ public function syncDonations() {
126
+
127
+ /** @var Lfnds_Donation_Model_Mysql4_Donation_Collection $donationCollection */
128
+ $donationCollection = Mage::getModel('lfnds_donation/donation')->getCollection();
129
+ $donationCollection->addFieldToFilter('state',
130
+ array(
131
+ Lfnds_Donation_Model_Donation::SCHEDULED_FOR_ADDING,
132
+ Lfnds_Donation_Model_Donation::SCHEDULED_FOR_CANCELLATION,
133
+ Lfnds_Donation_Model_Donation::SCHEDULED_FOR_COMPLETION
134
+ )
135
+ );
136
+
137
+ $donationsToBeCancelled = array();
138
+ $donationsToBeCompleted = array();
139
+ $donationsToBeAdded = array();
140
+
141
+ /** @var Lfnds_Donation_Model_Donation $donationModel */
142
+ foreach ($donationCollection as $donationModel) {
143
+ switch ($donationModel->getState()) {
144
+
145
+ case Lfnds_Donation_Model_Donation::SCHEDULED_FOR_ADDING:
146
+ $donationsToBeAdded[$donationModel->getForeignId()] = $donationModel;
147
+ break;
148
+
149
+ case Lfnds_Donation_Model_Donation::SCHEDULED_FOR_CANCELLATION:
150
+ $donationsToBeCancelled[$donationModel->getForeignId()] = $donationModel;
151
+ break;
152
+
153
+ case Lfnds_Donation_Model_Donation::SCHEDULED_FOR_COMPLETION:
154
+ $donationsToBeCompleted[$donationModel->getForeignId()] = $donationModel;
155
+ break;
156
+ }
157
+ }
158
+
159
+ // Add pending donations
160
+ try {
161
+ $this->facade->addDonations($this->mapArrayOfEntitiesToSDKObject($donationsToBeAdded));
162
+ $donationCollection->setStates($donationsToBeAdded, Lfnds_Donation_Model_Donation::PENDING);
163
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
164
+ $donationCollection->setStates($donationsToBeAdded, Lfnds_Donation_Model_Donation::SCHEDULED_FOR_ADDING);
165
+ }
166
+
167
+ // Cancel donations
168
+ try {
169
+ $this->facade->cancelDonations(array_keys($donationsToBeCancelled));
170
+ $donationCollection->setStates($donationsToBeCancelled, Lfnds_Donation_Model_Donation::CANCELLED);
171
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
172
+ $donationCollection->setStates($donationsToBeCancelled, Lfnds_Donation_Model_Donation::SCHEDULED_FOR_CANCELLATION);
173
+ }
174
+
175
+ // Complete donation
176
+ try {
177
+ $this->facade->completeDonations(array_keys($donationsToBeCompleted));
178
+ $donationCollection->setStates($donationsToBeCompleted, Lfnds_Donation_Model_Donation::COMPLETED);
179
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
180
+ $donationCollection->setStates($donationsToBeCompleted, Lfnds_Donation_Model_Donation::SCHEDULED_FOR_COMPLETION);
181
+ }
182
+
183
+ return $this;
184
+ }
185
+
186
+ /**
187
+ * Maps an array of Donation entities to SDK Objects.
188
+ *
189
+ * @param array
190
+ * @return array
191
+ */
192
+ protected function mapArrayOfEntitiesToSDKObject(array $donationModels) {
193
+
194
+ $sdkDonations = array();
195
+
196
+ /** @var Donation $donationModel */
197
+ foreach ($donationModels as $donationModel) {
198
+
199
+ $donation = $this->facade->createDonation()
200
+ ->setForeignId($donationModel->getForeignId())
201
+ ->setAmount($donationModel->getAmount())
202
+ ->setSuggestedAmount($donationModel->getSuggestedAmount())
203
+ ->setGrandTotal($donationModel->getGrandTotal())
204
+ ->setReceiverIds($donationModel->getReceiverIds())
205
+ ->setAvailableReceiverIds($donationModel->getAvailableReceiverIds())
206
+ ->setTime($donationModel->getTime());
207
+
208
+ try {
209
+ $donation->setDonator(
210
+ $donationModel->getDonatorEmail(),
211
+ $donationModel->getDonatorFirstName(),
212
+ $donationModel->getDonatorLastName(),
213
+ $donationModel->getDonatorStreetAddress(),
214
+ $donationModel->getDonatorZip(),
215
+ $donationModel->getDonatorCity(),
216
+ $donationModel->getDonatorCountrycode()
217
+ );
218
+ } catch(InvalidArgumentException $exception) {
219
+ // It's always easier to ask for forgiveness, than for permission.
220
+ }
221
+
222
+ $sdkDonations[] = $donation;
223
+ }
224
+
225
+ return $sdkDonations;
226
+ }
227
+ }
app/code/community/Lfnds/Donation/Model/Donation.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * General helper function to access and configure the SDK in magento
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_Donation extends Mage_Core_Model_Abstract
50
+ {
51
+
52
+ protected $_eventPrefix = 'elefunds_donation';
53
+
54
+ /**
55
+ * Donation states
56
+ */
57
+ const
58
+ NEW_ORDER = 0,
59
+ SCHEDULED_FOR_ADDING = 1,
60
+ SCHEDULED_FOR_CANCELLATION = 2,
61
+ SCHEDULED_FOR_COMPLETION = 3,
62
+ PENDING = 4,
63
+ CANCELLED = 5,
64
+ COMPLETED = 6;
65
+
66
+ const ELEFUNDS_VIRTUAL_PRODUCT_SKU = 'elefunds-donation';
67
+
68
+ public function loadByAttribute($attribute, $value)
69
+ {
70
+ $this->load($value, $attribute);
71
+ return $this;
72
+ }
73
+
74
+ /**
75
+ * Timestamp wrapper for time.
76
+ *
77
+ * @param DateTime $time
78
+ * @return $this
79
+ */
80
+ public function setTime(DateTime $time) {
81
+ parent::setTime($time->format('Y-m-d H:i:s'));
82
+ return $this;
83
+ }
84
+
85
+ /**
86
+ * Timestamp wrapper for time.
87
+ *
88
+ * @return DateTime
89
+ */
90
+ public function getTime() {
91
+ return Datetime::createFromFormat('Y-m-d H:i:s', parent::getTime(), new DateTimeZone('UTC'));
92
+ }
93
+
94
+ /**
95
+ * Sets all receivers and maps them to a csv for the database.
96
+ *
97
+ * @param array $receiverIds
98
+ * @return $this
99
+ */
100
+ public function setReceiverIds(array $receiverIds) {
101
+ parent::setReceiverIds(implode(',', $receiverIds));
102
+ return $this;
103
+ }
104
+
105
+ /**
106
+ * Maps back the csv to an array of receiver ids as int and
107
+ * returns it.
108
+ *
109
+ * @return array
110
+ */
111
+ public function getReceiverIds() {
112
+ return array_map(function($x) { return (int)$x;}, explode(',',parent::getReceiverIds()));
113
+ }
114
+
115
+ /**
116
+ * Sets the available receivers, that are saved as CSV in
117
+ * the database.
118
+ *
119
+ * @param array $availableReceiverIds
120
+ * @return $this
121
+ */
122
+ public function setAvailableReceiverIds($availableReceiverIds) {
123
+ parent::setAvailableReceiverIds(implode(',', $availableReceiverIds));
124
+ return $this;
125
+ }
126
+
127
+ /**
128
+ * Returns the CSV from the database mapped to an array of integers and returns it.
129
+ *
130
+ * @return array
131
+ */
132
+ public function getAvailableReceiverIds() {
133
+ return array_map(function($x) { return (int)$x;}, explode(',',parent::getAvailableReceiverIds()));
134
+ }
135
+
136
+
137
+ protected function _construct()
138
+ {
139
+ $this->_init('lfnds_donation/donation');
140
+ }
141
+
142
+
143
+ }
app/code/community/Lfnds/Donation/Model/Mysql4/Donation.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * General helper function to access and configure the SDK in magento
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_Mysql4_Donation extends Mage_Core_Model_Mysql4_Abstract
50
+ {
51
+ public function _construct()
52
+ {
53
+ $this->_init('lfnds_donation/donation', 'donation_id');
54
+ }
55
+ }
app/code/community/Lfnds/Donation/Model/Mysql4/Donation/Collection.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Model
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Model_Mysql4_Donation_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
51
+ {
52
+ public function _construct()
53
+ {
54
+ $this->_init('lfnds_donation/donation');
55
+ }
56
+
57
+ /**
58
+ * Sets given donations as synced and flushes the
59
+ * entity manager.
60
+ *
61
+ * @param array $donations
62
+ * @param int $state
63
+ * @return void
64
+ */
65
+ public function setStates(array $donations, $state) {
66
+ foreach ($donations as $donation) {
67
+ /** @var Lfnds_Donation_Model_Donation $donation */
68
+ $donation->setState($state);
69
+ $donation->save();
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Adds a donation to the repository.
75
+ *
76
+ * @param string $foreignId
77
+ *
78
+ * @param int $roundup
79
+ * @param int $grandTotal
80
+ * @param array $receivers
81
+ * @param array $availableReceivers
82
+ * @param array $userData
83
+ * @param string $languageCode
84
+ * @param int $suggestedRoundUp
85
+ * @param int $status
86
+ * @return void
87
+ */
88
+ public function addDonation($foreignId, $roundup, $grandTotal, array $receivers, array $availableReceivers, array $userData, $languageCode, $suggestedRoundUp = 0, $status = 0) {
89
+
90
+ $donation = new Lfnds_Donation_Model_Donation();
91
+ $donation->setForeignId($foreignId)
92
+ ->setAmount((int)$roundup)
93
+ ->setGrandTotal((int)$grandTotal)
94
+ ->setReceiverIds($receivers)
95
+ ->setAvailableReceiverIds($availableReceivers)
96
+ ->setTime(new DateTime(NULL, new DateTimeZone('UTC')))
97
+ ->setSuggestedAmount((int)$suggestedRoundUp)
98
+ ->setState($status);
99
+
100
+ if (count($userData) === 6) {
101
+ $donation->setDonatorFirstname($userData['firstName'])
102
+ ->setDonatorLastname($userData['lastName'])
103
+ ->setDonatorEmail($userData['email'])
104
+ ->setDonatorStreetAddress($userData['streetAddress'])
105
+ ->setDonatorZip($userData['zip'])
106
+ ->setDonatorCity($userData['city'])
107
+ ->setDonatorCountrycode($languageCode);
108
+ }
109
+
110
+ try {
111
+ $donation->save();
112
+ } catch (Exception $exception) {
113
+ Mage::logException($exception);
114
+ }
115
+
116
+ }
117
+ }
app/code/community/Lfnds/Donation/Model/Mysql4/Receiver.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Model
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Model_Mysql4_Receiver extends Mage_Core_Model_Mysql4_Abstract
51
+ {
52
+ public function _construct()
53
+ {
54
+ $this->_init('lfnds_donation/receiver', 'internal_identifier');
55
+ }
56
+ }
app/code/community/Lfnds/Donation/Model/Mysql4/Receiver/Collection.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * General helper function to access and configure the SDK in magento
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Model
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Model_Mysql4_Receiver_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
51
+ {
52
+ public function _construct()
53
+ {
54
+ $this->_init('lfnds_donation/receiver');
55
+ }
56
+
57
+ /**
58
+ * Removes receivers by given language.
59
+ *
60
+ * @param string $code
61
+ * @return $this
62
+ */
63
+ public function removeByLanguage($code) {
64
+
65
+ $receivers = $this->addFieldToFilter('countrycode', $code);
66
+ /** @var Lfnds_Donation_Model_Receiver $receiver */
67
+ foreach ($receivers as $receiver) {
68
+ $receiver->delete();
69
+ }
70
+
71
+ return $this->_reset();
72
+ }
73
+
74
+ /**
75
+ * Maps an array of receivers (as returned from the SDK) to a doctrine model.
76
+ *
77
+ * @param array $receivers that are implementing Elefunds_Model_ReceiverInterface
78
+ * @param string $languageCode
79
+ *
80
+ * @return $this
81
+ */
82
+ public function mapArrayOfSDKReceiversToEntitiesAndSave(array $receivers, $languageCode) {
83
+
84
+ /** @var Elefunds_Model_ReceiverInterface $receiver */
85
+ foreach ($receivers as $receiver) {
86
+ /** @var Lfnds_Donation_Model_Receiver $entity */
87
+ $entity = Mage::getModel('lfnds_donation/receiver');
88
+ $entity->setReceiverId($receiver->getId())
89
+ ->setName($receiver->getName())
90
+ ->setImage($receiver->getImage('horizontal', 'medium'))
91
+ ->setValid($receiver->getValidTime())
92
+ ->setDescription($receiver->getDescription())
93
+ ->setCountrycode($languageCode);
94
+
95
+ try {
96
+ $entity->save();
97
+ } catch (Exception $exception) {
98
+ Mage::logException($exception);
99
+ }
100
+ }
101
+ return $this;
102
+ }
103
+ }
app/code/community/Lfnds/Donation/Model/Observer.php ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * Watches for events that are interacting with the elefunds module.
41
+ *
42
+ * @package elefunds Magento Module
43
+ * @subpackage Model
44
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Christian Peters <christian@elefunds.de>
45
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
46
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
47
+ * @link http://www.elefunds.de
48
+ * @since File available since Release 1.0.0
49
+ */
50
+ class Lfnds_Donation_Model_Observer
51
+ {
52
+
53
+ /**
54
+ * @var Lfnds_Donation_Helper_Data
55
+ */
56
+ protected $helper;
57
+
58
+ public function __construct() {
59
+ $this->helper = Mage::helper('lfnds_donation');
60
+ }
61
+
62
+ /**
63
+ * Adds the virtual product to the quote, so it's in included in the
64
+ * processed order on save order after.
65
+ *
66
+ * @param Varien_Event_Observer $observer
67
+ * @return void
68
+ */
69
+ public function onPreDispatchSaveOrder(Varien_Event_Observer $observer) {
70
+
71
+ $params = Mage::app()->getRequest()->getParams();
72
+
73
+ /** @var Elefunds_Template_Shop_Helper_RequestHelper $requestHelper */
74
+ $requestHelper = $this->helper->getRequestHelper($params);
75
+ if ($requestHelper->isActiveAndValid()) {
76
+
77
+ /** @var Mage_Checkout_Model_Session $checkoutSession */
78
+ $checkoutSession = Mage::getSingleton('checkout/session');
79
+ $quote = $checkoutSession->getQuote();
80
+
81
+ /** @var Mage_Sales_Model_Quote_Item $elefundsProduct */
82
+ $elefundsProduct = $this->helper->getVirtualProduct();
83
+
84
+ if ($elefundsProduct === NULL) {
85
+ Mage::log('Elefunds object not found on store!');
86
+ return;
87
+ }
88
+
89
+ if ($quote->hasProductId($elefundsProduct->getId())) {
90
+ return;
91
+ }
92
+
93
+ $roundUpAsFloat = $requestHelper->getRoundUpAsFloat();
94
+ $elefundsProduct->setPrice($roundUpAsFloat);
95
+ $elefundsProduct->setBasePrice($roundUpAsFloat);
96
+ $quote->addProduct($elefundsProduct);
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Dispatched after the order is saved.
102
+ *
103
+ * Manipulates the quote with an elefunds virtual product.
104
+ *
105
+ * @param Varien_Event_Observer $observer
106
+ * @return void
107
+ */
108
+ public function onSaveOrderAfter(Varien_Event_Observer $observer) {
109
+
110
+ $params = Mage::app()->getRequest()->getParams();
111
+
112
+ /** @var Elefunds_Template_Shop_Helper_RequestHelper $requestHelper */
113
+ $requestHelper = $this->helper->getRequestHelper($params);
114
+
115
+ if($requestHelper->isActiveAndValid()) {
116
+
117
+ /* @var $order Mage_Sales_Model_Order */
118
+ $order = $observer->getEvent()->getOrder();
119
+
120
+ if ($requestHelper->isDonationReceiptRequested()) {
121
+ $billingAddress = $order->getBillingAddress();
122
+ $streets = $billingAddress->getStreet(); // 5.3 compliant lazy array access
123
+ $user = array(
124
+ 'firstName' => $billingAddress->getFirstname() ? $billingAddress->getFirstname() : '',
125
+ 'lastName' => $billingAddress->getLastname() ? $billingAddress->getLastname() : $order->getCustomerName(),
126
+ 'email' => $billingAddress->getEmail(),
127
+ 'streetAddress' => $streets[0],
128
+ 'zip' => (int)$billingAddress->getPostcode(),
129
+ 'city' => $billingAddress->getCity()
130
+ );
131
+ } else {
132
+ $user = array();
133
+ }
134
+
135
+ /** @var Lfnds_Donation_Model_Mysql4_Donation_Collection $donationCollection */
136
+ $donationCollection = Mage::getModel('lfnds_donation/donation')->getCollection();
137
+ $donationCollection->addDonation(
138
+ $order->getIncrementId(),
139
+ $requestHelper->getRoundUp(),
140
+ $order->getTotalDue() * 100,
141
+ $requestHelper->getReceiverIds(),
142
+ $this->helper->getAvailableReceiverIds(),
143
+ $user,
144
+ $order->getBillingAddress()->getCountryId(),
145
+ $requestHelper->getSuggestedRoundUp(),
146
+ Lfnds_Donation_Model_Donation::NEW_ORDER
147
+ );
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Dispatched when the order is finished.
153
+ *
154
+ * @param Varien_Event_Observer $observer
155
+ * @return void
156
+ */
157
+ public function onOrderFinished(Varien_Event_Observer $observer)
158
+ {
159
+ $orderIds = $observer->getEvent()->getOrderIds();
160
+
161
+ $orderId = 0;
162
+ if (is_array($orderIds) && !empty($orderIds)) {
163
+ $orderId = (int)$orderIds[0];
164
+ }
165
+
166
+ /* @var $order Mage_Sales_Model_Order */
167
+ $order = Mage::getModel('sales/order')->load($orderId);
168
+
169
+ /** @var Mage_Sales_Model_Quote_Item $elefundsProduct */
170
+ $elefundsProduct = $this->helper->getVirtualProduct();
171
+
172
+ if ($elefundsProduct !== NULL || $order->getItemByQuoteItemId($elefundsProduct->getQuoteId()) !== NULL) {
173
+
174
+ $donation = Mage::getModel('lfnds_donation/donation');
175
+ $donation->loadByAttribute('foreign_id', $order->getIncrementId());
176
+
177
+ if ($donation !== NULL && $donation->getId()) {
178
+ $donation->setState(Lfnds_Donation_Model_Donation::SCHEDULED_FOR_ADDING);
179
+ $donation->save();
180
+ }
181
+
182
+ $this->helper->getSyncManager()->syncDonations();
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Whenever an order is saved, we check if it contains a donation and if the status change is of
188
+ * interest for the API. If so, we invoke the sync process.
189
+ *
190
+ * @param Varien_Event_Observer $observer
191
+ * @return void
192
+ */
193
+ public function onOrderSaved(Varien_Event_Observer $observer)
194
+ {
195
+ /* @var $order Mage_Sales_Model_Order */
196
+ $order = $observer->getEvent()->getOrder();
197
+
198
+ $newState = $order->getData('state');
199
+ $oldState = $order->getOrigData('state');
200
+
201
+ if ($newState === NULL || $oldState === NULL) {
202
+ return;
203
+ }
204
+
205
+ /** @var Lfnds_Donation_Model_Donation $donation */
206
+ $donation = Mage::getModel('lfnds_donation/donation');
207
+ $donation->loadByAttribute('foreign_id', $order->getIncrementId());
208
+
209
+ if ($donation !== NULL) {
210
+ $stateHasChanged = $newState !== $oldState;
211
+
212
+ if ($stateHasChanged) {
213
+
214
+ // We have to map the magento states to API states ...
215
+ $statesToBeMappedToAddingState = array(
216
+ Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
217
+ Mage_Sales_Model_Order::STATE_PROCESSING,
218
+ Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW
219
+ );
220
+
221
+ $statesToBeMappedToCancelledState = array(
222
+ Mage_Sales_Model_Order::STATE_CANCELED
223
+ );
224
+
225
+ $statesToBeMappedToCompletionState = array(
226
+ Mage_Sales_Model_Order::STATE_CLOSED,
227
+ Mage_Sales_Model_Order::STATE_COMPLETE
228
+ );
229
+
230
+ $stateToBySyncedToTheApi = -1;
231
+
232
+ if (in_array($newState, $statesToBeMappedToAddingState)) {
233
+ $stateToBySyncedToTheApi = Lfnds_Donation_Model_Donation::SCHEDULED_FOR_ADDING;
234
+ }
235
+ if (in_array($newState, $statesToBeMappedToCancelledState)) {
236
+ $stateToBySyncedToTheApi = Lfnds_Donation_Model_Donation::SCHEDULED_FOR_CANCELLATION;
237
+ }
238
+ if (in_array($newState, $statesToBeMappedToCompletionState)) {
239
+ $stateToBySyncedToTheApi = Lfnds_Donation_Model_Donation::SCHEDULED_FOR_COMPLETION;
240
+ }
241
+
242
+ if ($stateToBySyncedToTheApi > Lfnds_Donation_Model_Donation::NEW_ORDER) {
243
+ if ($donation->getState() !== $stateToBySyncedToTheApi) {
244
+ $donation->setState($stateToBySyncedToTheApi);
245
+ $donation->save();
246
+ $this->helper->getSyncManager()->syncDonations();
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Removes the Donation from cloned (reordered or edited orders) in the backend.
255
+ *
256
+ * @param Varien_Event_Observer $observer
257
+ */
258
+ public function removeDonationFromClonedOrderInBackend(Varien_Event_Observer $observer) {
259
+
260
+ /* @var $order Mage_Sales_Model_Order */
261
+ $order = $observer->getEvent()->getOrder();
262
+
263
+ /* @var Mage_Sales_Model_Quote $quote */
264
+ $quote = $observer->getEvent()->getQuote();
265
+
266
+ $elefundsItem = NULL;
267
+ /** @var Mage_Sales_Model_Order_Item $item */
268
+ foreach ($order->getAllItems() as $item) {
269
+ if ($item->getSku() === Lfnds_Donation_Model_Donation::ELEFUNDS_VIRTUAL_PRODUCT_SKU) {
270
+ $elefundsItem = $item;
271
+ break;
272
+ }
273
+ }
274
+
275
+ if ($elefundsItem !== NULL) {
276
+ $allItems = $quote->getAllItems();
277
+ // Since $quote->removeItem() does not work for virtual products,
278
+ // we have to remove and re-add all items.
279
+ // @todo: removeAllItems was implemented in 1.6, we have reimplemented here for 1.5
280
+ // @todo: can be exchanged with $quote->removeAllItems() if we no longer support 1.5
281
+ foreach ($quote->getItemsCollection() as $itemId => $item) {
282
+ if (is_null($item->getId())) {
283
+ $quote->getItemsCollection()->removeItemByKey($itemId);
284
+ } else {
285
+ $item->isDeleted(true);
286
+ }
287
+ }
288
+
289
+
290
+ /** @var Mage_Sales_Model_Quote_Item $item */
291
+ foreach ($allItems as $item) {
292
+ if ($item->getSku() !== Lfnds_Donation_Model_Donation::ELEFUNDS_VIRTUAL_PRODUCT_SKU) {
293
+ $quote->addItem($item);
294
+ }
295
+ }
296
+ $quote->save();
297
+ }
298
+ }
299
+
300
+
301
+ /**
302
+ * @param Varien_Event_Observer $observer
303
+ */
304
+ public function limitPayments(Varien_Event_Observer $observer) {
305
+ /** @var Lfnds_Donation_Block_Checkout_Banner $block */
306
+ $block = $observer->getEvent()->getObject();
307
+
308
+ try {
309
+ $paymentCode = Mage::getSingleton('checkout/session')->getQuote()
310
+ ->getPayment()
311
+ ->getMethodInstance()
312
+ ->getCode();
313
+ } catch (Exception $exception) {
314
+ // This exception is thrown, when the merchant uses some kind of one step checkout
315
+ // (where no payment has yet been set).
316
+ // If so, check if you have enabled the one step checkout in the settings.
317
+ // If it's a one step checkout that we do not support,
318
+ // we silently bypass the module, as the shop would crash otherwise.
319
+ Mage::log('We could not get a default payment and are deactivating the banner.');
320
+ }
321
+
322
+ $excludedMethods = $this->helper->getExcludedPaymentMethods();
323
+ if (in_array($paymentCode, $excludedMethods)) {
324
+ $block->deactivateBanner();
325
+ }
326
+ }
327
+
328
+ /**
329
+ * @param Varien_Event_Observer $observer
330
+ */
331
+ public function excludeDonationFromDiscount(Varien_Event_Observer $observer){
332
+ $quoteItem = $observer->getQuoteItem();
333
+ $product = $observer->getProduct();
334
+ if ($product->getSku() == Lfnds_Donation_Model_Donation::ELEFUNDS_VIRTUAL_PRODUCT_SKU) {
335
+ $quoteItem->setNoDiscount(TRUE);
336
+ }
337
+ }
338
+
339
+ }
340
+
app/code/community/Lfnds/Donation/Model/Receiver.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Elefunds Receiver Model
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_Receiver extends Mage_Core_Model_Abstract
50
+ {
51
+ protected $_eventPrefix = 'elefunds_receiver';
52
+
53
+ /**
54
+ * We want to have the receiver model interchangeable with the SDK receivers.
55
+ * Since getID is reserved, we provide an additional parameter that selectively
56
+ * bypasses this behaviour.
57
+ *
58
+ * @param bool $bypassInternalIdentifier
59
+ * @return int
60
+ */
61
+ public function getId($bypassInternalIdentifier = FALSE) {
62
+ if ($bypassInternalIdentifier) {
63
+ return $this->getReceiverId();
64
+ } else {
65
+ return parent::getId();
66
+ }
67
+ }
68
+
69
+ /**
70
+ * This methods just fakes the SDK signature to make calls interchangeable.
71
+ *
72
+ * @param string $direction
73
+ * @param string $size
74
+ * @return string
75
+ */
76
+ public function getImage($direction, $size) {
77
+ return parent::getImage();
78
+ }
79
+
80
+ /**
81
+ * Timestamp wrapper for time.
82
+ *
83
+ * @param DateTime $time
84
+ * @return $this
85
+ */
86
+ public function setValid(DateTime $time) {
87
+ parent::setValid($time->format('Y-m-d H:i:s'));
88
+ return $this;
89
+ }
90
+
91
+ /**
92
+ * Timestamp wrapper for time.
93
+ *
94
+ * @return DateTime
95
+ */
96
+ public function getValid() {
97
+ return Datetime::createFromFormat('Y-m-d H:i:s', parent::getValid(), new DateTimeZone('UTC'));
98
+ }
99
+
100
+ protected function _construct()
101
+ {
102
+ $this->_init('lfnds_donation/receiver');
103
+ }
104
+
105
+ }
app/code/community/Lfnds/Donation/Model/System/Config/Source/Color.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Retrieves available themes.
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Christian Peters, <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_System_Config_Source_Color
50
+ {
51
+ protected $_options;
52
+
53
+ public function toOptionArray()
54
+ {
55
+ /** @var Lfnds_Donation_Helper_Data $helper */
56
+ $helper = Mage::helper('lfnds_donation');
57
+ $facade = $helper->getConfiguredFacade(TRUE);
58
+ if (!$this->_options) {
59
+
60
+ /** @var Elefunds_Template_Shop_ShopConfiguration $configuration */
61
+ $configuration = $facade->getConfiguration();
62
+ $colors = $configuration->getAvailableColors();
63
+
64
+ foreach ($colors as $color) {
65
+ $optionsArray[] = array(
66
+ 'value' => $color,
67
+ 'label' => $color,
68
+ );
69
+ }
70
+
71
+ $this->_options = $optionsArray;
72
+ }
73
+
74
+ return $this->_options;
75
+ }
76
+ }
app/code/community/Lfnds/Donation/Model/System/Config/Source/Payment.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Retrieves available payment groups.
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_System_Config_Source_Payment
50
+ {
51
+ protected $_options;
52
+
53
+ public function toOptionArray($isMultiselect = FALSE)
54
+ {
55
+ if (!$this->_options) {
56
+ $options = Mage::getSingleton('payment/config')->getActiveMethods();
57
+ foreach ($options as $code => $value) {
58
+ $optionsArray[] = array(
59
+ 'value' => $code,
60
+ 'label' => Mage::getStoreConfig('payment/' . $code . '/title'),
61
+ );
62
+ }
63
+ $this->_options = $optionsArray;
64
+ }
65
+
66
+ $options = $this->_options;
67
+
68
+ if(!$isMultiselect){
69
+ array_unshift($options,
70
+ array(
71
+ 'value' => '',
72
+ 'label' => Mage::helper('adminhtml')->__('--Please Select--'),
73
+ )
74
+ );
75
+ }
76
+
77
+ return $options;
78
+ }
79
+ }
app/code/community/Lfnds/Donation/Model/System/Config/Source/Position.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Retrieves available themes.
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Christian Peters, <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_System_Config_Source_Position
50
+ {
51
+ public function toOptionArray()
52
+ {
53
+ return array(
54
+ array(
55
+ 'value' => 'top',
56
+ 'label' => 'Top'
57
+ ),
58
+ array(
59
+ 'value' => 'bottom',
60
+ 'label' => 'Bottom'
61
+ )
62
+ );
63
+
64
+ }
65
+ }
app/code/community/Lfnds/Donation/Model/System/Config/Source/Theme.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * elefunds Magento Module
4
+ *
5
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * Neither the name of the elefunds GmbH nor the names of its
21
+ * contributors may be used to endorse or promote products derived
22
+ * from this software without specific prior written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ * POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ /**
39
+ * Retrieves available themes.
40
+ *
41
+ * @package elefunds Magento Module
42
+ * @subpackage Model
43
+ * @author Christian Peters, <christian@elefunds.de>
44
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
45
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
46
+ * @link http://www.elefunds.de
47
+ * @since File available since Release 1.0.0
48
+ */
49
+ class Lfnds_Donation_Model_System_Config_Source_Theme
50
+ {
51
+ protected $_options;
52
+
53
+ public function toOptionArray()
54
+ {
55
+ /** @var Lfnds_Donation_Helper_Data $helper */
56
+ $helper = Mage::helper('lfnds_donation');
57
+ $facade = $helper->getConfiguredFacade(TRUE);
58
+ if (!$this->_options) {
59
+
60
+ /** @var Elefunds_Template_Shop_ShopConfiguration $configuration */
61
+ $configuration = $facade->getConfiguration();
62
+ $themes = $configuration->getAvailableThemes();
63
+
64
+ foreach ($themes as $theme) {
65
+ $optionsArray[] = array(
66
+ 'value' => $theme,
67
+ 'label' => $theme,
68
+ );
69
+ }
70
+
71
+ $this->_options = $optionsArray;
72
+ }
73
+
74
+ return $this->_options;
75
+ }
76
+ }
app/code/community/Lfnds/Donation/controllers/IndexController.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * IndexController
5
+ *
6
+ * Renders our view
7
+ *
8
+ * Controller is registered in ../etc/config.xml
9
+ * The rendered View is also defined in ../etc/config.xml (layout)
10
+ *
11
+ * @package elefunds Magento Module
12
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>
13
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
14
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
15
+ * @link http://www.elefunds.de
16
+ */
17
+ class Lfnds_Donation_IndexController extends Mage_Core_Controller_Front_Action {
18
+
19
+ /**
20
+ * The default Action for any controller
21
+ * Loads and renders the layout
22
+ */
23
+ public function indexAction() {
24
+ $this->loadLayout();
25
+ $this->renderLayout();
26
+ }
27
+ }
app/code/community/Lfnds/Donation/etc/config.xml ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <config>
3
+ <modules>
4
+ <Lfnds_Donation>
5
+ <version>1.0.0</version>
6
+ </Lfnds_Donation>
7
+ </modules>
8
+
9
+ <global>
10
+ <models>
11
+ <lfnds_donation>
12
+ <class>Lfnds_Donation_Model</class>
13
+ <resourceModel>donation_mysql4</resourceModel>
14
+ </lfnds_donation>
15
+ <donation_mysql4>
16
+ <class>Lfnds_Donation_Model_Mysql4</class>
17
+ <entities>
18
+ <donation>
19
+ <table>lfnds_donation_donation</table>
20
+ </donation>
21
+ <receiver>
22
+ <table>lfnds_donation_receiver</table>
23
+ </receiver>
24
+ </entities>
25
+ </donation_mysql4>
26
+ </models>
27
+
28
+ <blocks>
29
+ <lfnds_donation>
30
+ <class>Lfnds_Donation_Block</class>
31
+ </lfnds_donation>
32
+ </blocks>
33
+
34
+ <helpers>
35
+ <lfnds_donation>
36
+ <class>Lfnds_Donation_Helper</class>
37
+ </lfnds_donation>
38
+ </helpers>
39
+
40
+ <resources>
41
+ <lfnds_donation_setup>
42
+ <setup>
43
+ <module>Lfnds_Donation</module>
44
+ <class>Mage_Core_Model_Resource_Setup</class>
45
+ </setup>
46
+ <use>default_setup</use>
47
+ </lfnds_donation_setup>
48
+
49
+ <lfnds_donation_write>
50
+ <use>default_write</use>
51
+ </lfnds_donation_write>
52
+ <lfnds_donation_read>
53
+ <use>default_read</use>
54
+ </lfnds_donation_read>
55
+ </resources>
56
+ <events>
57
+ <sales_order_save_after>
58
+ <observers>
59
+ <syncDonationOnChangedState>
60
+ <type>model</type>
61
+ <class>lfnds_donation/observer</class>
62
+ <method>onOrderSaved</method>
63
+ </syncDonationOnChangedState>
64
+ </observers>
65
+ </sales_order_save_after>
66
+ <sales_convert_order_to_quote>
67
+ <observers>
68
+ <removeDonationFromClonedOrder>
69
+ <type>model</type>
70
+ <class>lfnds_donation/observer</class>
71
+ <method>removeDonationFromClonedOrderInBackend</method>
72
+ </removeDonationFromClonedOrder>
73
+ </observers>
74
+ </sales_convert_order_to_quote>
75
+ </events>
76
+ </global>
77
+
78
+ <adminhtml>
79
+ <translate>
80
+ <modules>
81
+ <Lfnds_Donation>
82
+ <files>
83
+ <default>Lfnds_Donation.csv</default>
84
+ </files>
85
+ </Lfnds_Donation>
86
+ </modules>
87
+ </translate>
88
+ <layout>
89
+ <updates>
90
+ <lfnds_donation>
91
+ <file>lfnds_donation.xml</file>
92
+ </lfnds_donation>
93
+ </updates>
94
+ </layout>
95
+ <acl>
96
+ <resources>
97
+ <admin>
98
+ <children>
99
+ <system>
100
+ <children>
101
+ <config>
102
+ <children>
103
+ <lfnds_donation>
104
+ <title>Elefunds</title>
105
+ </lfnds_donation>
106
+ </children>
107
+ </config>
108
+ </children>
109
+ </system>
110
+ </children>
111
+ </admin>
112
+ </resources>
113
+ </acl>
114
+ </adminhtml>
115
+
116
+ <frontend>
117
+ <routers>
118
+ <lfnds_donation>
119
+ <use>standard</use>
120
+ <args>
121
+ <module>Lfnds_Donation</module>
122
+ <frontName>elefunds</frontName>
123
+ </args>
124
+ </lfnds_donation>
125
+ </routers>
126
+ <events>
127
+
128
+ <!-- +++ One step checkout specific events +++ -->
129
+ <controller_action_predispatch_onestepcheckout_index_index>
130
+ <observers>
131
+ <limitPayments>
132
+ <type>model</type>
133
+ <class>lfnds_donation/observer</class>
134
+ <method>onPreDispatchSaveOrder</method>
135
+ </limitPayments>
136
+ </observers>
137
+ </controller_action_predispatch_onestepcheckout_index_index>
138
+ <!-- ^^^ One step checkout specific events ^^^ -->
139
+
140
+
141
+ <!-- +++ One page checkout specific events +++ -->
142
+ <elefunds_checkout_review_before_enable>
143
+ <observers>
144
+ <limitPayments>
145
+ <type>model</type>
146
+ <class>lfnds_donation/observer</class>
147
+ <method>limitPayments</method>
148
+ </limitPayments>
149
+ </observers>
150
+ </elefunds_checkout_review_before_enable>
151
+ <controller_action_predispatch_checkout_onepage_saveOrder>
152
+ <observers>
153
+ <addDonationToBasket>
154
+ <type>model</type>
155
+ <class>lfnds_donation/observer</class>
156
+ <method>onPreDispatchSaveOrder</method>
157
+ </addDonationToBasket>
158
+ </observers>
159
+ </controller_action_predispatch_checkout_onepage_saveOrder>
160
+ <!-- ^^^ One page checkout specific events ^^^ -->
161
+
162
+ <!-- +++ Shared events +++ -->
163
+ <checkout_type_onepage_save_order_after>
164
+ <observers>
165
+ <addDonationToElefundsModel>
166
+ <type>model</type>
167
+ <class>lfnds_donation/observer</class>
168
+ <method>onSaveOrderAfter</method>
169
+ </addDonationToElefundsModel>
170
+ </observers>
171
+ </checkout_type_onepage_save_order_after>
172
+ <checkout_onepage_controller_success_action>
173
+ <observers>
174
+ <updateDonationStateAndSync>
175
+ <type>model</type>
176
+ <class>lfnds_donation/observer</class>
177
+ <method>onOrderFinished</method>
178
+ </updateDonationStateAndSync>
179
+ </observers>
180
+ </checkout_onepage_controller_success_action>
181
+ <sales_quote_item_set_product>
182
+ <observers>
183
+ <exclude_from_donation>
184
+ <type>model</type>
185
+ <class>lfnds_donation/observer</class>
186
+ <method>excludeDonationFromDiscount</method>
187
+ </exclude_from_donation>
188
+ </observers>
189
+ </sales_quote_item_set_product>
190
+ <!-- ^^^ Shared events ^^^ -->
191
+
192
+ </events>
193
+
194
+ <layout>
195
+ <updates>
196
+ <lfnds_donation>
197
+ <file>lfnds_donation.xml</file>
198
+ </lfnds_donation>
199
+ </updates>
200
+ </layout>
201
+ </frontend>
202
+
203
+ <default>
204
+ <lfnds_donation>
205
+ <general>
206
+ <active>0</active>
207
+ <theme>light</theme>
208
+ <color>orange</color>
209
+ </general>
210
+ <advanced>
211
+ <include_jquery>1</include_jquery>
212
+ <banner_width>681</banner_width>
213
+ <banner_position>bottom</banner_position>
214
+ <uses_onestepcheckout>0</uses_onestepcheckout>
215
+ </advanced>
216
+ </lfnds_donation>
217
+ </default>
218
+ </config>
app/code/community/Lfnds/Donation/etc/system.xml ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <lfnds_donation translate="label" module="lfnds_donation">
5
+ <label>Elefunds</label>
6
+ <sort_order>2888000</sort_order>
7
+ </lfnds_donation>
8
+ </tabs>
9
+ <sections>
10
+ <lfnds_donation translate="label" module="lfnds_donation">
11
+ <label>Donation</label>
12
+ <tab>lfnds_donation</tab>
13
+ <sort_order>100</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
+ <groups>
18
+ <general translate="label comment">
19
+ <label>General</label>
20
+ <comment>Welcome to elefunds!</comment>
21
+ <sort_order>10</sort_order>
22
+ <show_in_default>1</show_in_default>
23
+ <show_in_website>1</show_in_website>
24
+ <show_in_store>1</show_in_store>
25
+ <fields>
26
+ <active translate="label comment">
27
+ <label>Enabled</label>
28
+ <frontend_type>select</frontend_type>
29
+ <source_model>adminhtml/system_config_source_yesno</source_model>
30
+ <show_in_default>1</show_in_default>
31
+ <show_in_website>1</show_in_website>
32
+ <show_in_store>1</show_in_store>
33
+ <sort_order>10</sort_order>
34
+ <comment>Activate / deactivate the elefunds module.</comment>
35
+ </active>
36
+ <client_id translate="label">
37
+ <label>Client Id</label>
38
+ <frontend_type>text</frontend_type>
39
+ <show_in_default>1</show_in_default>
40
+ <show_in_website>1</show_in_website>
41
+ <show_in_store>1</show_in_store>
42
+ <sort_order>30</sort_order>
43
+ </client_id>
44
+ <api_key translate="label">
45
+ <label>Api Key</label>
46
+ <frontend_type>text</frontend_type>
47
+ <show_in_default>1</show_in_default>
48
+ <show_in_website>1</show_in_website>
49
+ <show_in_store>1</show_in_store>
50
+ <sort_order>40</sort_order>
51
+ </api_key>
52
+ <theme translate="label comment">
53
+ <label>Theme</label>
54
+ <frontend_type>select</frontend_type>
55
+ <source_model>lfnds_donation/system_config_source_theme</source_model>
56
+ <show_in_default>1</show_in_default>
57
+ <show_in_website>1</show_in_website>
58
+ <show_in_store>1</show_in_store>
59
+ <sort_order>50</sort_order>
60
+ <comment>Select a base theme for the elefunds donation module.</comment>
61
+ </theme>
62
+ <color translate="label comment">
63
+ <label>Color</label>
64
+ <frontend_type>select</frontend_type>
65
+ <source_model>lfnds_donation/system_config_source_color</source_model>
66
+ <show_in_default>1</show_in_default>
67
+ <show_in_website>1</show_in_website>
68
+ <show_in_store>1</show_in_store>
69
+ <sort_order>60</sort_order>
70
+ <comment>Select a color for the elefunds donation module.</comment>
71
+ </color>
72
+ </fields>
73
+ </general>
74
+ <advanced translate="label">
75
+ <label>Advanced</label>
76
+ <sort_order>20</sort_order>
77
+ <show_in_default>1</show_in_default>
78
+ <show_in_website>1</show_in_website>
79
+ <show_in_store>1</show_in_store>
80
+ <fields>
81
+ <banner_width translate="label comment">
82
+ <label>Banner width</label>
83
+ <frontend_type>text</frontend_type>
84
+ <show_in_default>1</show_in_default>
85
+ <show_in_website>1</show_in_website>
86
+ <show_in_store>1</show_in_store>
87
+ <sort_order>10</sort_order>
88
+ <comment>The modul width in pixel. Adjust this number if the modul does not fit perfectly in your checkout.</comment>
89
+ </banner_width>
90
+ <banner_position translate="label comment">
91
+ <label>Banner position</label>
92
+ <frontend_type>select</frontend_type>
93
+ <source_model>lfnds_donation/system_config_source_position</source_model>
94
+ <show_in_default>1</show_in_default>
95
+ <show_in_website>1</show_in_website>
96
+ <show_in_store>1</show_in_store>
97
+ <sort_order>20</sort_order>
98
+ <comment>Choose where to position the module relative to the article listing.</comment>
99
+ </banner_position>
100
+ <include_jquery translate="label">
101
+ <label>Include jQuery</label>
102
+ <frontend_type>select</frontend_type>
103
+ <source_model>adminhtml/system_config_source_yesno</source_model>
104
+ <show_in_default>1</show_in_default>
105
+ <show_in_website>1</show_in_website>
106
+ <show_in_store>1</show_in_store>
107
+ <sort_order>30</sort_order>
108
+ <comment>Load jQuery in the frontend, if it's not already loaded.</comment>
109
+ </include_jquery>
110
+ <uses_onestepcheckout translate="label comment">
111
+ <label>Uses one step checkout?</label>
112
+ <frontend_type>select</frontend_type>
113
+ <source_model>adminhtml/system_config_source_yesno</source_model>
114
+ <show_in_default>1</show_in_default>
115
+ <show_in_website>1</show_in_website>
116
+ <show_in_store>1</show_in_store>
117
+ <sort_order>40</sort_order>
118
+ <comment>Set to yes, if your shop uses the module from onestepcheckout.com.</comment>
119
+ </uses_onestepcheckout>
120
+ <excluded_payment_methods translate="label comment">
121
+ <label>Excluded payment methods</label>
122
+ <frontend_type>multiselect</frontend_type>
123
+ <source_model>lfnds_donation/system_config_source_payment</source_model>
124
+ <show_in_default>1</show_in_default>
125
+ <show_in_website>1</show_in_website>
126
+ <show_in_store>1</show_in_store>
127
+ <sort_order>50</sort_order>
128
+ <comment>Elefunds won't be displayed in the selected payment methods.</comment>
129
+ <can_be_empty>1</can_be_empty>
130
+ </excluded_payment_methods>
131
+ </fields>
132
+ </advanced>
133
+ </groups>
134
+ </lfnds_donation>
135
+ </sections>
136
+ </config>
app/code/community/Lfnds/Donation/sql/lfnds_donation_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds Magento Module
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ /**
40
+ * Installation Script for the magento module,
41
+ * creates DB Tables and adds VirtualProduct for Donations
42
+ *
43
+ * @package elefunds Magento Module
44
+ * @subpackage sql
45
+ * @author Raul Armando Salamanca Gonzalez <raul.salamanca@gmx.de>, Roland Luckenhuber <roland@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.0.0
50
+ */
51
+
52
+ /**
53
+ * Fixes for Magento 1.5
54
+ *
55
+ * @deprecated
56
+ */
57
+
58
+ // Fix for not supported datetime in magento <= 1.5
59
+ // Once we're done, change $datetime in the Table definitions
60
+ // with Varien_Db_Ddl_Table::TYPE_DATETIME
61
+ // ATM we're falling back to varchar for magento <= 1.5
62
+ $class = new ReflectionClass('Varien_Db_Ddl_Table');
63
+ if ($class->hasConstant('TYPE_DATETIME')) {
64
+ $datetime = Varien_Db_Ddl_Table::TYPE_DATETIME;
65
+ $datetimeIdentifier = NULL;
66
+ } else {
67
+ $datetime = Varien_Db_Ddl_Table::TYPE_VARCHAR;
68
+ $datetimeIdentifier = 25;
69
+ }
70
+
71
+ /**
72
+ * @var $installer Mage_Core_Model_Resource_Setup
73
+ */
74
+ $installer = $this;
75
+
76
+ define('ELEFUNDS_VIRTUAL_PRODUCT_SKU', 'elefunds-donation');
77
+
78
+ /**
79
+ * @var int
80
+ */
81
+ $donationProduct = Mage::getModel('catalog/product')->getIdBySku(ELEFUNDS_VIRTUAL_PRODUCT_SKU);
82
+
83
+ /**
84
+ * Adding donationProduct to catalog/product if not already created
85
+ */
86
+ if (!$donationProduct) {
87
+ Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
88
+ Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
89
+ Mage::app()->setUpdateMode(FALSE);
90
+
91
+
92
+ $websiteId = Mage::app()->getStore(TRUE)->getWebsiteId();
93
+ // In case the module gets installed with a brand new installation
94
+ // we assume a website id of 0
95
+ if (is_null($websiteId)) {
96
+ $websiteId = 0;
97
+ }
98
+
99
+ /** @var Mage_Catalog_Model_Product $donationProduct */
100
+ $donationProduct = Mage::getModel('catalog/product');
101
+ $donationProduct->setSku(ELEFUNDS_VIRTUAL_PRODUCT_SKU)
102
+ ->setAttributeSetId(Mage::getModel('catalog/product')->getResource()->getEntityType()->getDefaultAttributeSetId())
103
+ ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL)
104
+ ->setName('elefunds Donation')
105
+ ->setDescription('An item that is used when donations are added as items')
106
+ ->setShortDescription('An item that is used when donations are added as items')
107
+ ->setPrice(0.00)
108
+ ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)
109
+ ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
110
+ ->setTaxClassId(0)
111
+ ->setCreatedAt(strtotime('now'))
112
+ ->setWebsiteIds(array($websiteId, 1))
113
+ ->setStockData(array(
114
+ 'manage_stock' => 0,
115
+ 'use_config_manage_stock'=> 0,
116
+ 'is_in_stock' => 1
117
+ ));
118
+
119
+ try {
120
+ $donationProduct->save();
121
+ } catch (Exception $exception){
122
+ Mage::logException($exception);
123
+ }
124
+
125
+ // This is separated, as we do not want the extension to break when images cannot be added.
126
+ // ATM it does not look like we need product images, but in case the use case arises (e.g.
127
+ // when some shop wants it on it's invoice: Here you go.
128
+ /*
129
+ try {
130
+ $skinPath = Mage::getBaseDir('skin') . DS . 'frontend' . DS . 'base ' . DS . 'default' . DS . 'images' . DS . 'lfnds_donation' . DS;
131
+ $fullImagePath = $skinPath . 'elefunds_item_main.png';
132
+ $fullSmallImagePath = $skinPath . 'elefunds_item_small.png';
133
+ $fullThumbnailPath = $skinPath . 'elefunds_item_thumbnail.png';
134
+
135
+ $donationProduct->addImageToMediaGallery ($fullImagePath, array ('image'), false, false);
136
+ $donationProduct->addImageToMediaGallery ($fullSmallImagePath, array ('small_image'), false, false);
137
+ $donationProduct->addImageToMediaGallery ($fullThumbnailPath, array ('thumbnail'), false, false);
138
+ $donationProduct->save();
139
+ } catch (Exception $exception) {
140
+ var_dump($exception); exit;
141
+ Mage::logException($exception);
142
+ }
143
+ */
144
+ }
145
+
146
+ /**
147
+ * Creating table lfnds_donation_donation
148
+ */
149
+ if (!$installer->tableExists('lfnds_donation_donation')) {
150
+ $donationTable = $installer->getConnection()
151
+ ->newTable($installer->getTable('lfnds_donation_donation'))
152
+ ->addColumn('donation_id', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
153
+ 'unsigned' => TRUE,
154
+ 'identity' => TRUE,
155
+ 'nullable' => FALSE,
156
+ 'primary' => TRUE,
157
+ ), 'Donation ID')
158
+ ->addColumn('foreign_id', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
159
+ 'nullable' => FALSE,
160
+ ), 'Store ID')
161
+ ->addColumn('amount', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
162
+ 'nullable' => TRUE,
163
+ ), 'Amount')
164
+ ->addColumn('suggested_amount', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
165
+ 'nullable' => TRUE,
166
+ ), 'Suggested Amount')
167
+ ->addColumn('grand_total', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
168
+ 'nullable' => TRUE,
169
+ ), 'Suggested Amount')
170
+ ->addColumn('receiver_ids', Varien_Db_Ddl_Table::TYPE_VARCHAR, 45, array(
171
+ 'nullable' => TRUE,
172
+ ), 'Receiver Ids')
173
+ ->addColumn('available_receiver_ids', Varien_Db_Ddl_Table::TYPE_VARCHAR, 45, array(
174
+ 'nullable' => TRUE,
175
+ ), 'Available Receiver Ids')
176
+ ->addColumn('time', $datetime, $datetimeIdentifier, array(
177
+ 'nullable' => FALSE,
178
+ ), 'Time')
179
+ ->addColumn('donator_firstname', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
180
+ 'nullable' => TRUE,
181
+ ), 'Donator Firstname')
182
+ ->addColumn('donator_lastname', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
183
+ 'nullable' => TRUE,
184
+ ), 'Donator Lastname')
185
+ ->addColumn('donator_zip', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
186
+ 'nullable' => TRUE,
187
+ ), 'Donator ZIP Code')
188
+ ->addColumn('donator_city', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
189
+ 'nullable' => TRUE,
190
+ ), 'Donator Citry')
191
+ ->addColumn('donator_countrycode', Varien_Db_Ddl_Table::TYPE_VARCHAR, 2, array(
192
+ 'nullable' => TRUE,
193
+ ), 'Donator Countrycode')
194
+ ->addColumn('state', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
195
+ 'nullable' => FALSE,
196
+ ), 'The donation state');
197
+
198
+ $installer->getConnection()->createTable($donationTable);
199
+ }
200
+
201
+ /**
202
+ * Creating Table lfnds_donation_receiver
203
+ */
204
+ if (!$installer->tableExists('lfnds_donation_receiver')) {
205
+ $receiverTable = $installer->getConnection()
206
+ ->newTable($installer->getTable('lfnds_donation_receiver'))
207
+ ->addColumn('internal_identifier', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
208
+ 'unsigned' => FALSE,
209
+ 'identity' => TRUE,
210
+ 'nullable' => FALSE,
211
+ 'primary' => TRUE,
212
+ ), 'Internal Identifier for magento')
213
+ ->addColumn('receiver_id', Varien_Db_Ddl_Table::TYPE_INTEGER, NULL, array(
214
+ 'unsigned' => FALSE,
215
+ 'nullable' => FALSE,
216
+ ), 'Receiver ID')
217
+ ->addColumn('name', Varien_Db_Ddl_Table::TYPE_VARCHAR, 45, array(
218
+ 'nullable' => TRUE,
219
+ ), 'Receiver ID')
220
+ ->addColumn('countrycode', Varien_Db_Ddl_Table::TYPE_VARCHAR, 5, array(
221
+ 'nullable' => TRUE,
222
+ ), 'Country Code')
223
+ ->addColumn('description', Varien_Db_Ddl_Table::TYPE_VARCHAR, 200, array(
224
+ 'nullable' => TRUE,
225
+ ), 'Description')
226
+ ->addColumn('image', Varien_Db_Ddl_Table::TYPE_LONGVARCHAR, NULL, array(
227
+ 'nullable' => TRUE,
228
+ ), 'Image URL')
229
+ ->addColumn('valid', $datetime, $datetimeIdentifier, array(
230
+ 'nullable' => FALSE,
231
+ ), 'Valid');
232
+
233
+ $installer->getConnection()->createTable($receiverTable);
234
+ }
235
+
236
+ /**
237
+ * Post database fixes
238
+ *
239
+ * @deprecated
240
+ */
241
+ $version = Mage::getVersionInfo();
242
+
243
+ // For 1.5 or lower
244
+ if ($version['major'] === '1' && in_array($version['minor'], array('4', '5'))) {
245
+ $installer->getConnection()->query('ALTER TABLE lfnds_donation_receiver MODIFY internal_identifier INTEGER NOT NULL AUTO_INCREMENT');
246
+ $installer->getConnection()->query('ALTER TABLE lfnds_donation_donation MODIFY donation_id INTEGER NOT NULL AUTO_INCREMENT');
247
+ }
app/design/frontend/base/default/layout/lfnds_donation.xml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ Defines when to call specific Blocks (from Block/..)
4
+ -->
5
+ <layout version="0.1.0">
6
+ <checkout_onepage_index>
7
+ <reference name="head">
8
+ <action method="addItem"><type>skin_css</type><name>css/lfnds_donation/additional/elefunds_magento_additional.css</name></action>
9
+ <block type="lfnds_donation/page_head" name="elefunds.head"/>
10
+ <action method="addItem"><type>skin_js</type><name>js/lfnds_donation/additional/elefunds_magento_onepage_additional.js</name></action>
11
+ </reference>
12
+ </checkout_onepage_index>
13
+
14
+ <checkout_onepage_review>
15
+ <reference name="checkout.onepage.review.info.items.before">
16
+ <block type="lfnds_donation/checkout_banner" name="checkout.onepage.elefunds.banner_before" as="elefunds.banner_before" template="lfnds/donation/checkout/onepage/review/donation_banner_before.phtml" />
17
+ </reference>
18
+ <reference name="checkout.onepage.review.info.items.after">
19
+ <block type="lfnds_donation/checkout_banner" name="checkout.onepage.elefunds.banner_after" as="elefunds.banner_after" template="lfnds/donation/checkout/onepage/review/donation_banner_after.phtml" />
20
+ </reference>
21
+ </checkout_onepage_review>
22
+
23
+ <checkout_onepage_success>
24
+ <!-- head was added by code, so it will be loaded only if a donation was done! -->
25
+ <reference name="content">
26
+ <block type="lfnds_donation/checkout_socialmedia" name="checkout.onepage.sucess.socialmedia" after="checkout.success" as="elefunds.socialmedia" template="lfnds/donation/checkout/onepage/socialmedia.phtml" />
27
+ </reference>
28
+ </checkout_onepage_success>
29
+
30
+ <!-- +++ One step checkout implementation +++ -->
31
+ <onestepcheckout_index_index>
32
+ <reference name="head">
33
+ <action method="addItem"><type>skin_css</type><name>css/lfnds_donation/additional/elefunds_magento_onestep_additional.css</name></action>
34
+ <block type="lfnds_donation/page_head" name="elefunds.head"/>
35
+ </reference>
36
+ <reference name="content">
37
+ <block type="lfnds_donation/checkout_banner" name="checkout.onepage.elefunds.banner" as="elefunds.banner" after="onestepcheckout.billing.address" template="lfnds/donation/checkout/onepage/review/donation_banner.phtml" />
38
+ </reference>
39
+ </onestepcheckout_index_index>
40
+ <!-- ^^^ One step checkout implementation ^^^ -->
41
+
42
+ <!-- +++ Elefunds billing changes +++ -->
43
+ <sales_email_order_items>
44
+ <reference name="additional.product.info">
45
+ <block type="lfnds_donation/sales_order_email" name="donation.description" template="lfnds/donation/mail/description.phtml"/>
46
+ </reference>
47
+ </sales_email_order_items>
48
+
49
+ <sales_email_order_invoice_items>
50
+ <reference name="additional.product.info">
51
+ <block type="core/template" name="donation.description" template="lfnds/donation/mail/description.phtml"/>
52
+ </reference>
53
+ </sales_email_order_invoice_items>
54
+
55
+ <sales_email_order_shipment_items>
56
+ <reference name="additional.product.info">
57
+ <block type="core/template" name="donation.description" template="lfnds/donation/mail/description.phtml"/>
58
+ </reference>
59
+ </sales_email_order_shipment_items>
60
+
61
+ <sales_email_order_creditmemo_items>
62
+ <reference name="additional.product.info">
63
+ <block type="core/template" name="donation.description" template="lfnds/donation/mail/description.phtml"/>
64
+ </reference>
65
+ </sales_email_order_creditmemo_items>
66
+ <!-- ^^^ Elefunds billing changes ^^^ -->
67
+ </layout>
app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner.phtml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $html = $this->getApiTemplate();
3
+ if (!empty($html)):
4
+ $html = '<div id="elefunds-form">' . $html . '</div>';
5
+ echo $html;
6
+ ?>
7
+ <script type="text/javascript">
8
+ //<![CDATA[
9
+
10
+ // Review is only defined in one page checkout
11
+ if (typeof Review !== 'undefined') {
12
+
13
+ /*
14
+ * One page checkout specific JS
15
+ */
16
+
17
+ var ElefundsForm = Class.create();
18
+ ElefundsForm.prototype = {
19
+ initialize: function(form) {
20
+ this.form = form;
21
+ }
22
+ }
23
+
24
+ eleForm = new ElefundsForm($('elefunds-form'));
25
+
26
+ Review.prototype.save = function(){
27
+ if (checkout.loadWaiting!=false) return;
28
+ checkout.setLoadWaiting('review');
29
+ var params = Form.serialize(payment.form);
30
+ if (this.agreementsForm) {
31
+ params += '&'+Form.serialize(this.agreementsForm);
32
+ }
33
+ if (eleForm.form) {
34
+ params += '&'+Form.serialize(eleForm.form);
35
+ }
36
+
37
+ params.save = true;
38
+ var request = new Ajax.Request(
39
+ this.saveUrl,
40
+ {
41
+ method:'post',
42
+ parameters:params,
43
+ onComplete: this.onComplete,
44
+ onSuccess: this.onSave,
45
+ onFailure: checkout.ajaxFailure.bind(checkout)
46
+ }
47
+ );
48
+ };
49
+ } else {
50
+
51
+ /*
52
+ * One step checkout specific JS
53
+ */
54
+ var elefunds = elefunds || {};
55
+ elefunds.excludedPaymentMethods = [ <?php implode(',', $this->getExcludedPaymentMethods()) ?> ];
56
+
57
+ }
58
+ //]]>
59
+ </script>
60
+ <?php
61
+ endif;
62
+ ?>
63
+
app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner_after.phtml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ if ($this->getPosition() === 'bottom') {
3
+ include(dirname(__FILE__) . '/donation_banner.phtml');
4
+ }
app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/review/donation_banner_before.phtml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ if ($this->getPosition() === 'top') {
3
+ include(dirname(__FILE__) . '/donation_banner.phtml');
4
+ }
app/design/frontend/base/default/template/lfnds/donation/checkout/onepage/socialmedia.phtml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ($this->existDonation()): ?>
2
+ <div id="elefunds-sucess-div" style="display:none">
3
+ <?php echo $this->renderSocialMedia(); ?>
4
+ </div>
5
+
6
+ <script type="text/javascript">
7
+ var subtitle = $$(".sub-title");
8
+ var elefunddiv = $('elefunds-sucess-div');
9
+
10
+ subtitle[0].insert({'after': elefunddiv});
11
+ elefunddiv.show();
12
+ </script>
13
+ <?php endif; ?>
app/design/frontend/base/default/template/lfnds/donation/mail/description.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ echo $this->__('Your donation is processed by the elefunds Foundation gUG which forwards 100% to your chosen charities.');
app/design/frontend/base/default/template/lfnds/donation/page/html/head.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/etc/modules/Lfnds_Donation.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!-- Shows the Elefunds module in the module list,
3
+ configure basic module-options -->
4
+ <config>
5
+ <modules>
6
+ <Lfnds_Donation>
7
+ <active>true</active>
8
+ <codePool>community</codePool>
9
+ </Lfnds_Donation>
10
+ </modules>
11
+ </config>
app/locale/de_DE/Lfnds_Donation.csv ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Your donation is processed by the elefunds Foundation gUG which forwards 100% to your chosen charities.","Die Spende wird vereinnahmt für die elefunds Stiftung gUG und zu 100% an die ausgewählten Organisationen weitergeleitet. Der Kaufbeleg ersetzt keine Spendenbescheinigung im Sinne des Steuerrechts."
2
+ "Activate / deactivate the elefunds module.", "Aktiviert oder deaktiviert das elefunds Modul."
3
+ "Client ID", "Kundennummer"
4
+ "API Key", "API Schlüssel"
5
+ "Theme", "Thema"
6
+ "Select a base theme for the elefunds donation module.", "Wählen Sie ein Thema für das elefunds Modul aus."
7
+ "Color", "Farbe"
8
+ "Select a color for the elefunds donation module.", "Wählen Sie eine Farbe für das elefunds Modul aus."
9
+ "Banner width", "Modul Breite"
10
+ "The modul width in pixel. Adjust this number if the modul does not fit perfectly in your checkout.", "Die Modulbreite in Pixel. Bitte passen Sie diese Nummer an, falls das elefunds Modul nicht perfekt in Ihren Checkout passt."
11
+ "Include jQuery", "jQuery einbinden"
12
+ "Load jQuery in the frontend, if it's not already loaded.", "Falls Ihr Frontend jQuery bereits benutzt, können Sie das Laden von jQuery deaktivieren."
13
+ "Excluded payment methods", "Ausgeschlossene Zahlungsmöglichkeiten"
14
+ "Elefunds won't be displayed in the selected payment methods.", "Elefunds wird bei den ausgewählten Zahlungsmöglichkeiten nicht angezeigt."
15
+ "Welcome to elefunds!","<br /><div class='box'><h2>Herzlich Willkommen,</h2><br /><p>Um das Plugin aktivieren und in Betrieb nehmen zu können, müssen Sie Ihre Anmeldung abschließen:</p><br /><p><a target='_blank' href='https://elefunds.de/produkt/anmeldung'>Zur Anmeldung</a></p><br /><p>Gleich kann es losgehen!</p><br /><p><b>Vielen Dank für Ihr Engagement.</b></p><br /><p>Hinweis für Entwickler und Administratoren:</p><br /><p>Wenn Sie das Plugin unverbindlich in einem Demoshop testen möchten, schauen Sie doch in unsere <a href='http://elefunds.github.com/elefunds-SDK'>Software Dokumentation</a>. In unserem <a href='https://github.com/elefunds/elefunds-SDK/blob/master/Documentation/GettingStarted.md#prerequisites'>Getting Started Guide</a> finden Sie Zugangsdaten, die Sie zu Testzwecken nutzen könnten.</p></div>"
16
+ "Uses one step checkout?", "One Step Checkout installiert?"
17
+ "Set to yes, if your shop uses the module from onestepcheckout.com.", "Aktivieren Sie diese Option, wenn Sie das Modul von onestepcheckout.com installiert haben und nutzen."
18
+ "Banner position", "Banner Position"
19
+ "Choose where to position the module relative to the article listing.", "Bestimmen Sie die Position des Moduls relativ zur Artikelzusammenfassung."
20
+ "Top", "Oberhalb"
21
+ "Bottom", "Unterhalb"
app/locale/en_US/Lfnds_Donation.csv ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "Your donation is processed by the elefunds Foundation gUG which forwards 100% to your chosen charities.","Your donation is processed by the elefunds Foundation gUG which forwards 100% to your chosen charities."
2
+ "Welcome to elefunds!", "<br /><div class='box'><h2>Welcome.</h2><br /><p>To activate the plugin, please register your shop here:</p><br /><p><a target='_blank' href='https://elefunds.de/produkt/anmeldung'>Register</a></p><br /><p><b>We appreciate your corporate responsibility!</b></p><br /><p>If you would like to test the module in your demo shop, you can find sample login credentials in our <a href='https://github.com/elefunds/elefunds-SDK/blob/master/Documentation/GettingStarted.md#prerequisites'>Getting Started Guide</a>.</p>"
lib/Elefunds/Communication/CurlRequest.php ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once 'RestInterface.php';
41
+
42
+ /**
43
+ * Curl Request
44
+ *
45
+ * Connects to the elefunds API via curl.
46
+ *
47
+ * Type validation is performed, but valid semantic input is forwarded to the API or curl itself.
48
+ *
49
+ * @package elefunds API PHP Library
50
+ * @subpackage Communication
51
+ * @author Christian Peters <christian@elefunds.de>
52
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
53
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
54
+ * @link http://www.elefunds.de
55
+ * @since File available since Release 1.0.0
56
+ */
57
+ class Elefunds_Communication_CurlRequest implements Elefunds_Communication_RestInterface {
58
+
59
+ /**
60
+ * @var resource
61
+ */
62
+ protected $curl;
63
+
64
+ /**
65
+ * @var array
66
+ */
67
+ protected $curlOptions;
68
+
69
+ /**
70
+ * Initializes curl - if the extension is installed.
71
+ *
72
+ * @throws Elefunds_Exception_ElefundsException if curl is not installed
73
+ */
74
+ public function __construct() {
75
+ if (!extension_loaded('curl')) {
76
+ throw new Elefunds_Exception_ElefundsException(
77
+ 'You are using the curl request method without having curl installed on your server.
78
+ Your options are to either use another implementation of the RestInterface or to install curl.',
79
+ 1347875278);
80
+ }
81
+
82
+ $this->curl = curl_init();
83
+ $this->curlOptions = array();
84
+
85
+ }
86
+
87
+ /**
88
+ * Performs a GET Request against a given URL.
89
+ *
90
+ * @param string $restUrl with fully qualified resource path
91
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
92
+ * @return string the server response as JSON
93
+ */
94
+ public function get($restUrl) {
95
+ $this->curlOptions[CURLOPT_CUSTOMREQUEST] = 'GET';
96
+ $this->curlOptions[CURLOPT_URL] = (string)$restUrl;
97
+
98
+ return $this->performRequest();
99
+
100
+ }
101
+
102
+ /**
103
+ * Performs a POST Request against a given URL.
104
+ *
105
+ * @param string $restUrl with fully qualified resource path
106
+ * @param string $body the JSON body
107
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
108
+ * @return string the server response as JSON
109
+ */
110
+ public function post($restUrl, $body) {
111
+
112
+ $this->curlOptions[CURLOPT_CUSTOMREQUEST] = 'POST';
113
+ $this->curlOptions[CURLOPT_POSTFIELDS] = (string)$body;
114
+ $this->curlOptions[CURLOPT_URL] = (string)$restUrl;
115
+ $this->curlOptions[CURLOPT_HTTPHEADER] = array('Content-Type: application/json');
116
+
117
+ return $this->performRequest();
118
+ }
119
+
120
+ /**
121
+ * Performs a DELETE Request against a given URL.
122
+ *
123
+ * @param string $restUrl with fully qualified resource path
124
+ * @param string $body the JSON body
125
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
126
+ * @return string the server response as JSON
127
+ */
128
+ public function put($restUrl, $body = '') {
129
+
130
+ $this->curlOptions[CURLOPT_CUSTOMREQUEST] = 'PUT';
131
+ $this->curlOptions[CURLOPT_URL] = (string)$restUrl;
132
+
133
+ if (strlen($body) > 0) {
134
+ $this->curlOptions[CURLOPT_POSTFIELDS] = (string)$body;
135
+ $this->curlOptions[CURLOPT_HTTPHEADER] = array('Content-Type: application/json');
136
+ }
137
+
138
+ return $this->performRequest();
139
+ }
140
+
141
+
142
+ /**
143
+ * Performs a DELETE Request against a given URL.
144
+ *
145
+ * @param string $restUrl with fully qualified resource path
146
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
147
+ * @return string the server response as JSON
148
+ */
149
+ public function delete($restUrl) {
150
+ $this->curlOptions[CURLOPT_CUSTOMREQUEST] = 'DELETE';
151
+ $this->curlOptions[CURLOPT_URL] = (string)$restUrl;
152
+
153
+ return $this->performRequest();
154
+ }
155
+
156
+ /**
157
+ * Performs the actual curl request.
158
+ *
159
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
160
+ * @return string the server response as JSON
161
+ */
162
+ protected function performRequest() {
163
+ $this->curlOptions[CURLOPT_RETURNTRANSFER] = TRUE;
164
+ $this->curlOptions[CURLOPT_USERAGENT] = 'elefunds-php-1.1';
165
+ $this->curlOptions[CURLOPT_CAINFO] = dirname(__FILE__) . '/certificate/GandiProSSLCA.pem';
166
+
167
+ curl_setopt_array($this->curl, $this->curlOptions);
168
+
169
+ $serverResponse = curl_exec($this->curl);
170
+
171
+ if ($serverResponse === FALSE) {
172
+
173
+ throw new Elefunds_Exception_ElefundsCommunicationException(
174
+ 'Unable to connect to the elefunds API',
175
+ 1347878604,
176
+ array(
177
+ 'curlErrorCode' => curl_errno($this->curl),
178
+ 'curlErrorMessage' => curl_error($this->curl)
179
+ )
180
+ );
181
+ }
182
+
183
+ $httpResponseCode = curl_getinfo($this->curl, CURLINFO_HTTP_CODE);
184
+
185
+ if ($httpResponseCode !== 200) {
186
+ throw new Elefunds_Exception_ElefundsCommunicationException(
187
+ 'An error occurred during the api call. Refer to additionalInformation of this exception for more details.',
188
+ 1347899756668,
189
+ array(
190
+ 'httpCode' => $httpResponseCode,
191
+ 'serverResponse' => (string)$serverResponse
192
+ )
193
+ );
194
+ }
195
+
196
+ // Reset options
197
+ $this->curlOptions = array();
198
+
199
+ return $serverResponse;
200
+ }
201
+
202
+ }
lib/Elefunds/Communication/RestInterface.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../Exception/ElefundsCommunicationException.php';
41
+
42
+ /**
43
+ * Rest Interface
44
+ *
45
+ * By default, the API uses the CurlRequest implementation of this interface.
46
+ * If you are not able (or not want to) use curl, use this interface for your request method.
47
+ *
48
+ * @package elefunds API PHP Library
49
+ * @subpackage Communication
50
+ * @author Christian Peters <christian@elefunds.de>
51
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
52
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
53
+ * @link http://www.elefunds.de
54
+ * @since File available since Release 1.0.0
55
+ */
56
+ interface Elefunds_Communication_RestInterface {
57
+
58
+ /**
59
+ * Performs a GET Request against a given URL.
60
+ *
61
+ * @param string $restUrl with fully qualified resource path
62
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
63
+ * @return string the server response as JSON
64
+ */
65
+ public function get($restUrl);
66
+
67
+ /**
68
+ * Performs a POST Request against a given URL.
69
+ *
70
+ * @param string $restUrl with fully qualified resource path
71
+ * @param string $body the JSON body
72
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
73
+ * @return string the server response as JSON
74
+ */
75
+ public function post($restUrl, $body);
76
+
77
+ /**
78
+ * Performs a PUT Request against a given URL.
79
+ *
80
+ * @param string $restUrl with fully qualified resource path
81
+ * @param string $body the JSON body
82
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
83
+ * @return string the server response as JSON
84
+ */
85
+ public function put($restUrl, $body = '');
86
+
87
+ /**
88
+ * Performs a DELETE Request against a given URL.
89
+ *
90
+ * @param string $restUrl with fully qualified resource path
91
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
92
+ * @return string the server response as JSON
93
+ */
94
+ public function delete($restUrl);
95
+
96
+
97
+ }
lib/Elefunds/Communication/certificate/GandiProSSLCA.pem ADDED
@@ -0,0 +1,3923 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEnjCCA4agAwIBAgIQPBkQvAZ54yVvTfQWo16zFDANBgkqhkiG9w0BAQUFADCB
3
+ lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
4
+ Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
5
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
6
+ SGFyZHdhcmUwHhcNMDgxMDIzMDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA8MQswCQYD
7
+ VQQGEwJGUjESMBAGA1UEChMJR0FOREkgU0FTMRkwFwYDVQQDExBHYW5kaSBQcm8g
8
+ U1NMIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw5nFDd2ffWY4
9
+ OxZxUVj2uQ49ms1N68h471Kq5j3R9OkVJYwObJqozTZvnlcmJ/QG5lZY9+RXDNyU
10
+ V1EKVL92l4vHkngDhhTQaoIB0sNeJMdnCzzjebnmN3VTbSTniQhYEZPg1554Zo+2
11
+ U39kHBCPKZbwNk11EP4f7U7goyatkNJl0b28zEjbfGvJbPNE6vfaiBfM06spAHft
12
+ gJbCC2lzmv9L5R+KlixFFk3P8IkZInLnrGZ6iP0XIckVI8ENoMxu0SXb5JnfF8OS
13
+ QKdqBZKFBMbNJCCBQjXiv50hQEvVTX/INrqoMUfOVV1OT2HmuhPEBdoU0tU75mwm
14
+ VArKuQAdwwIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWW
15
+ nUvSw0UwHQYDVR0OBBYEFMGxMoDxE5IUL21nMJIYqnw5VRQ+MA4GA1UdDwEB/wQE
16
+ AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQEC
17
+ AhowRAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VU
18
+ Ti1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEF
19
+ BQcwAoYxaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVy
20
+ X0NBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTAN
21
+ BgkqhkiG9w0BAQUFAAOCAQEAjSvVDlj6cT/RDFCrOvqpd1gZD7rzKzDGpfi3IciU
22
+ cjatYny806bAaAxRqL56e3O4rRMr+Jw1sHGpcqfKkm3YBW0CyJAum4vI07lYjZpn
23
+ 9ihcWeatDX4gp/6Pm862lGITpB6TLriX1G7EYdnjOudIajawz64vnyTdvzmC18BV
24
+ +wC3A9f57mnqzm5SghMSeGlF78y9vPUXWPfBx9JY4Ga/r+U59djQrgbKY93sgyXD
25
+ 3LS+K6NqGCKt58LcXQq75/e0OnHoJ3tiPMiB1IuYoIRCXevitc1ynVyP/m5wuZqB
26
+ wHHiX3Eo2RFMBCfSE7mSUoSwgHWtp1tHh0IvL8H7dmKjZQ==
27
+ -----END CERTIFICATE-----
28
+
29
+ ##
30
+ ## ca-bundle.crt -- Bundle of CA Root Certificates
31
+ ##
32
+ ## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
33
+ ##
34
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
35
+ ## (CA). These were automatically extracted from Mozilla's root certificates
36
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
37
+ ## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
38
+ ##
39
+ ## It contains the certificates in PEM format and therefore
40
+ ## can be directly used with curl / libcurl / php_curl, or with
41
+ ## an Apache+mod_ssl webserver for SSL client authentication.
42
+ ## Just configure this file as the SSLCACertificateFile.
43
+ ##
44
+
45
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
46
+
47
+ GTE CyberTrust Global Root
48
+ ==========================
49
+ -----BEGIN CERTIFICATE-----
50
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
51
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
52
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
53
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
54
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
55
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
56
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
57
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
58
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
59
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
60
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
61
+ -----END CERTIFICATE-----
62
+
63
+ Thawte Server CA
64
+ ================
65
+ -----BEGIN CERTIFICATE-----
66
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
67
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
68
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
69
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
70
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
71
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
72
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
73
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
74
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
75
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
76
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
77
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
78
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
79
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
80
+ -----END CERTIFICATE-----
81
+
82
+ Thawte Premium Server CA
83
+ ========================
84
+ -----BEGIN CERTIFICATE-----
85
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
86
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
87
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
88
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
89
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
90
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
91
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
92
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
93
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
94
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
95
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
96
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
97
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
98
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
99
+ UCemDaYj+bvLpgcUQg==
100
+ -----END CERTIFICATE-----
101
+
102
+ Equifax Secure CA
103
+ =================
104
+ -----BEGIN CERTIFICATE-----
105
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
106
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
107
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
108
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
109
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
110
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
111
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
112
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
113
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
114
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
115
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
116
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
117
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
118
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
119
+ 70+sB3c4
120
+ -----END CERTIFICATE-----
121
+
122
+ Digital Signature Trust Co. Global CA 1
123
+ =======================================
124
+ -----BEGIN CERTIFICATE-----
125
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
126
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
127
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
128
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
129
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
130
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
131
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
132
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
133
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
134
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
135
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
136
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
137
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
138
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
139
+ RbyhkwS7hp86W0N6w4pl
140
+ -----END CERTIFICATE-----
141
+
142
+ Digital Signature Trust Co. Global CA 3
143
+ =======================================
144
+ -----BEGIN CERTIFICATE-----
145
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
146
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
147
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
148
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
149
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
150
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
151
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
152
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
153
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
154
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
155
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
156
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
157
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
158
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
159
+ mPnHfxsb1gYgAlihw6ID
160
+ -----END CERTIFICATE-----
161
+
162
+ Verisign Class 3 Public Primary Certification Authority
163
+ =======================================================
164
+ -----BEGIN CERTIFICATE-----
165
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
166
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
167
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
168
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
169
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
170
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
171
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
172
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
173
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
174
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
175
+ Tqj/ZA1k
176
+ -----END CERTIFICATE-----
177
+
178
+ Verisign Class 1 Public Primary Certification Authority - G2
179
+ ============================================================
180
+ -----BEGIN CERTIFICATE-----
181
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
182
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
183
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
184
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
185
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
186
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
187
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
188
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
189
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
190
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
191
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
192
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
193
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
194
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
195
+ -----END CERTIFICATE-----
196
+
197
+ Verisign Class 2 Public Primary Certification Authority - G2
198
+ ============================================================
199
+ -----BEGIN CERTIFICATE-----
200
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
201
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
202
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
203
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
204
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
205
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
206
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
207
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
208
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
209
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
210
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
211
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
212
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
213
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
214
+ -----END CERTIFICATE-----
215
+
216
+ Verisign Class 3 Public Primary Certification Authority - G2
217
+ ============================================================
218
+ -----BEGIN CERTIFICATE-----
219
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
220
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
221
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
222
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
223
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
224
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
225
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
226
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
227
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
228
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
229
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
230
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
231
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
232
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
233
+ -----END CERTIFICATE-----
234
+
235
+ GlobalSign Root CA
236
+ ==================
237
+ -----BEGIN CERTIFICATE-----
238
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
239
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
240
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
241
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
242
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
243
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
244
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
245
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
246
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
247
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
248
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
249
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
250
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
251
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
252
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
253
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
254
+ -----END CERTIFICATE-----
255
+
256
+ GlobalSign Root CA - R2
257
+ =======================
258
+ -----BEGIN CERTIFICATE-----
259
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
260
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
261
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
262
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
263
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
264
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
265
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
266
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
267
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
268
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
269
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
270
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
271
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
272
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
273
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
274
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
275
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
276
+ -----END CERTIFICATE-----
277
+
278
+ ValiCert Class 1 VA
279
+ ===================
280
+ -----BEGIN CERTIFICATE-----
281
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
282
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
283
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
284
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
285
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
286
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
287
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
288
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
289
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
290
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
291
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
292
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
293
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
294
+ Orf1LXLI
295
+ -----END CERTIFICATE-----
296
+
297
+ ValiCert Class 2 VA
298
+ ===================
299
+ -----BEGIN CERTIFICATE-----
300
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
301
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
302
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
303
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
304
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
305
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
306
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
307
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
308
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
309
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
310
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
311
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
312
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
313
+ W9ViH0Pd
314
+ -----END CERTIFICATE-----
315
+
316
+ RSA Root Certificate 1
317
+ ======================
318
+ -----BEGIN CERTIFICATE-----
319
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
320
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
321
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
322
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
323
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
324
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
325
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
326
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
327
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
328
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
329
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
330
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
331
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
332
+ on+jjBXu
333
+ -----END CERTIFICATE-----
334
+
335
+ Verisign Class 1 Public Primary Certification Authority - G3
336
+ ============================================================
337
+ -----BEGIN CERTIFICATE-----
338
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
339
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
340
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
341
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
342
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
343
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
344
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
345
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
346
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
347
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
348
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
349
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
350
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
351
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
352
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
353
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
354
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
355
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
356
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
357
+ -----END CERTIFICATE-----
358
+
359
+ Verisign Class 2 Public Primary Certification Authority - G3
360
+ ============================================================
361
+ -----BEGIN CERTIFICATE-----
362
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
363
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
364
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
365
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
366
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
367
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
368
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
369
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
370
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
371
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
372
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
373
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
374
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
375
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
376
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
377
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
378
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
379
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
380
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
381
+ -----END CERTIFICATE-----
382
+
383
+ Verisign Class 3 Public Primary Certification Authority - G3
384
+ ============================================================
385
+ -----BEGIN CERTIFICATE-----
386
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
387
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
388
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
389
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
390
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
391
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
392
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
393
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
394
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
395
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
396
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
397
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
398
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
399
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
400
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
401
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
402
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
403
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
404
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
405
+ -----END CERTIFICATE-----
406
+
407
+ Verisign Class 4 Public Primary Certification Authority - G3
408
+ ============================================================
409
+ -----BEGIN CERTIFICATE-----
410
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
411
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
412
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
413
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
414
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
415
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
416
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
417
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
418
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
419
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
420
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
421
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
422
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
423
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
424
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
425
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
426
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
427
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
428
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
429
+ -----END CERTIFICATE-----
430
+
431
+ Entrust.net Secure Server CA
432
+ ============================
433
+ -----BEGIN CERTIFICATE-----
434
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
435
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
436
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
437
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
438
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
439
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
440
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
441
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
442
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
443
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
444
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
445
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
446
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
447
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
448
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
449
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
450
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
451
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
452
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
453
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
454
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
455
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
456
+ -----END CERTIFICATE-----
457
+
458
+ Entrust.net Premium 2048 Secure Server CA
459
+ =========================================
460
+ -----BEGIN CERTIFICATE-----
461
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
462
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
463
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
464
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
465
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
466
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
467
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
468
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
469
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
470
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
471
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
472
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
473
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
474
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
475
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
476
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
477
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
478
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
479
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
480
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
481
+ -----END CERTIFICATE-----
482
+
483
+ Baltimore CyberTrust Root
484
+ =========================
485
+ -----BEGIN CERTIFICATE-----
486
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
487
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
488
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
489
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
490
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
491
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
492
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
493
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
494
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
495
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
496
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
497
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
498
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
499
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
500
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
501
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
502
+ -----END CERTIFICATE-----
503
+
504
+ Equifax Secure Global eBusiness CA
505
+ ==================================
506
+ -----BEGIN CERTIFICATE-----
507
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
508
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
509
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
510
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
511
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
512
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
513
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
514
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
515
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
516
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
517
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
518
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
519
+ -----END CERTIFICATE-----
520
+
521
+ Equifax Secure eBusiness CA 1
522
+ =============================
523
+ -----BEGIN CERTIFICATE-----
524
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
525
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
526
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
527
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
528
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
529
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
530
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
531
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
532
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
533
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
534
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
535
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
536
+ -----END CERTIFICATE-----
537
+
538
+ Equifax Secure eBusiness CA 2
539
+ =============================
540
+ -----BEGIN CERTIFICATE-----
541
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
542
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
543
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
544
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
545
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
546
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
547
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
548
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
549
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
550
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
551
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
552
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
553
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
554
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
555
+ V+GRMOrN
556
+ -----END CERTIFICATE-----
557
+
558
+ AddTrust Low-Value Services Root
559
+ ================================
560
+ -----BEGIN CERTIFICATE-----
561
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
562
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
563
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
564
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
565
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
566
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
567
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
568
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
569
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
570
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
571
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
572
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
573
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
574
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
575
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
576
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
577
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
578
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
579
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
580
+ -----END CERTIFICATE-----
581
+
582
+ AddTrust External Root
583
+ ======================
584
+ -----BEGIN CERTIFICATE-----
585
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
586
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
587
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
588
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
589
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
590
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
591
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
592
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
593
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
594
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
595
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
596
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
597
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
598
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
599
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
600
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
601
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
602
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
603
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
604
+ -----END CERTIFICATE-----
605
+
606
+ AddTrust Public Services Root
607
+ =============================
608
+ -----BEGIN CERTIFICATE-----
609
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
610
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
611
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
612
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
613
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
614
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
615
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
616
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
617
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
618
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
619
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
620
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
621
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
622
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
623
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
624
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
625
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
626
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
627
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
628
+ -----END CERTIFICATE-----
629
+
630
+ AddTrust Qualified Certificates Root
631
+ ====================================
632
+ -----BEGIN CERTIFICATE-----
633
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
634
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
635
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
636
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
637
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
638
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
639
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
640
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
641
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
642
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
643
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
644
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
645
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
646
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
647
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
648
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
649
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
650
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
651
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
652
+ -----END CERTIFICATE-----
653
+
654
+ Entrust Root Certification Authority
655
+ ====================================
656
+ -----BEGIN CERTIFICATE-----
657
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
658
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
659
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
660
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
661
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
662
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
663
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
664
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
665
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
666
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
667
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
668
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
669
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
670
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
671
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
672
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
673
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
674
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
675
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
676
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
677
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
678
+ -----END CERTIFICATE-----
679
+
680
+ RSA Security 2048 v3
681
+ ====================
682
+ -----BEGIN CERTIFICATE-----
683
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
684
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
685
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
686
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
687
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
688
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
689
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
690
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
691
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
692
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
693
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
694
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
695
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
696
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
697
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
698
+ pKnXwiJPZ9d37CAFYd4=
699
+ -----END CERTIFICATE-----
700
+
701
+ GeoTrust Global CA
702
+ ==================
703
+ -----BEGIN CERTIFICATE-----
704
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
705
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
706
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
707
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
708
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
709
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
710
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
711
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
712
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
713
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
714
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
715
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
716
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
717
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
718
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
719
+ Mw==
720
+ -----END CERTIFICATE-----
721
+
722
+ GeoTrust Global CA 2
723
+ ====================
724
+ -----BEGIN CERTIFICATE-----
725
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
726
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
727
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
728
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
729
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
730
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
731
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
732
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
733
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
734
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
735
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
736
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
737
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
738
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
739
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
740
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
741
+ -----END CERTIFICATE-----
742
+
743
+ GeoTrust Universal CA
744
+ =====================
745
+ -----BEGIN CERTIFICATE-----
746
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
747
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
748
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
749
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
750
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
751
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
752
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
753
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
754
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
755
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
756
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
757
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
758
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
759
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
760
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
761
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
762
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
763
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
764
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
765
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
766
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
767
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
768
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
769
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
770
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
771
+ -----END CERTIFICATE-----
772
+
773
+ GeoTrust Universal CA 2
774
+ =======================
775
+ -----BEGIN CERTIFICATE-----
776
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
777
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
778
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
779
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
780
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
781
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
782
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
783
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
784
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
785
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
786
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
787
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
788
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
789
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
790
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
791
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
792
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
793
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
794
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
795
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
796
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
797
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
798
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
799
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
800
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
801
+ -----END CERTIFICATE-----
802
+
803
+ UTN-USER First-Network Applications
804
+ ===================================
805
+ -----BEGIN CERTIFICATE-----
806
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
807
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
808
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
809
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
810
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
811
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
812
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
813
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
814
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
815
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
816
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
817
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
818
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
819
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
820
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
821
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
822
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
823
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
824
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
825
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
826
+ -----END CERTIFICATE-----
827
+
828
+ America Online Root Certification Authority 1
829
+ =============================================
830
+ -----BEGIN CERTIFICATE-----
831
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
832
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
833
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
834
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
835
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
836
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
837
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
838
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
839
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
840
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
841
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
842
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
843
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
844
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
845
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
846
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
847
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
848
+ -----END CERTIFICATE-----
849
+
850
+ America Online Root Certification Authority 2
851
+ =============================================
852
+ -----BEGIN CERTIFICATE-----
853
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
854
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
855
+ Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
856
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
857
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
858
+ ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
859
+ fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
860
+ f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
861
+ qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
862
+ RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
863
+ gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
864
+ 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
865
+ FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
866
+ Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
867
+ B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
868
+ aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
869
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
870
+ T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
871
+ +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
872
+ JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
873
+ zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
874
+ ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
875
+ 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
876
+ GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
877
+ Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
878
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
879
+ -----END CERTIFICATE-----
880
+
881
+ Visa eCommerce Root
882
+ ===================
883
+ -----BEGIN CERTIFICATE-----
884
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
885
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
886
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
887
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
888
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
889
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
890
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
891
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
892
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
893
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
894
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
895
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
896
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
897
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
898
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
899
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
900
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
901
+ -----END CERTIFICATE-----
902
+
903
+ Certum Root CA
904
+ ==============
905
+ -----BEGIN CERTIFICATE-----
906
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
907
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
908
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
909
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
910
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
911
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
912
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
913
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
914
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
915
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
916
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
917
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
918
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
919
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
920
+ -----END CERTIFICATE-----
921
+
922
+ Comodo AAA Services root
923
+ ========================
924
+ -----BEGIN CERTIFICATE-----
925
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
926
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
927
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
928
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
929
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
930
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
931
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
932
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
933
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
934
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
935
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
936
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
937
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
938
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
939
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
940
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
941
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
942
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
943
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
944
+ -----END CERTIFICATE-----
945
+
946
+ Comodo Secure Services root
947
+ ===========================
948
+ -----BEGIN CERTIFICATE-----
949
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
950
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
951
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
952
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
953
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
954
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
955
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
956
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
957
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
958
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
959
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
960
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
961
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
962
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
963
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
964
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
965
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
966
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
967
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
968
+ RR3B7Hzs/Sk=
969
+ -----END CERTIFICATE-----
970
+
971
+ Comodo Trusted Services root
972
+ ============================
973
+ -----BEGIN CERTIFICATE-----
974
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
975
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
976
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
977
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
978
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
979
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
980
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
981
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
982
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
983
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
984
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
985
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
986
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
987
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
988
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
989
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
990
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
991
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
992
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
993
+ 9y5Xt5hwXsjEeLBi
994
+ -----END CERTIFICATE-----
995
+
996
+ QuoVadis Root CA
997
+ ================
998
+ -----BEGIN CERTIFICATE-----
999
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
1000
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1001
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
1002
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
1003
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
1004
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1005
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
1006
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
1007
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
1008
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
1009
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
1010
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
1011
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
1012
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
1013
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1014
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
1015
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
1016
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
1017
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
1018
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
1019
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
1020
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
1021
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
1022
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
1023
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
1024
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
1025
+ 5nrQNiOKSnQ2+Q==
1026
+ -----END CERTIFICATE-----
1027
+
1028
+ QuoVadis Root CA 2
1029
+ ==================
1030
+ -----BEGIN CERTIFICATE-----
1031
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1032
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1033
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1034
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1035
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1036
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1037
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1038
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1039
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1040
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1041
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1042
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1043
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1044
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1045
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1046
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1047
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1048
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1049
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1050
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1051
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1052
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1053
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1054
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1055
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1056
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1057
+ -----END CERTIFICATE-----
1058
+
1059
+ QuoVadis Root CA 3
1060
+ ==================
1061
+ -----BEGIN CERTIFICATE-----
1062
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1063
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1064
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1065
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1066
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1067
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1068
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1069
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1070
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1071
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1072
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1073
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1074
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1075
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1076
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1077
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1078
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1079
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1080
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1081
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1082
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1083
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1084
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1085
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1086
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1087
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1088
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1089
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1090
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1091
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1092
+ -----END CERTIFICATE-----
1093
+
1094
+ Security Communication Root CA
1095
+ ==============================
1096
+ -----BEGIN CERTIFICATE-----
1097
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1098
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1099
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1100
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1101
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1102
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1103
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1104
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1105
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1106
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1107
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1108
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1109
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1110
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1111
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1112
+ FL39vmwLAw==
1113
+ -----END CERTIFICATE-----
1114
+
1115
+ Sonera Class 1 Root CA
1116
+ ======================
1117
+ -----BEGIN CERTIFICATE-----
1118
+ MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1119
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1120
+ NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1121
+ IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1122
+ 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1123
+ EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1124
+ 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1125
+ 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1126
+ HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1127
+ iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1128
+ 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1129
+ yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1130
+ vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1131
+ qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1132
+ IRlXvVWa
1133
+ -----END CERTIFICATE-----
1134
+
1135
+ Sonera Class 2 Root CA
1136
+ ======================
1137
+ -----BEGIN CERTIFICATE-----
1138
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1139
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1140
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1141
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1142
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
1143
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
1144
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
1145
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
1146
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
1147
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
1148
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
1149
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
1150
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
1151
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
1152
+ llpwrN9M
1153
+ -----END CERTIFICATE-----
1154
+
1155
+ Staat der Nederlanden Root CA
1156
+ =============================
1157
+ -----BEGIN CERTIFICATE-----
1158
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
1159
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
1160
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
1161
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
1162
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
1163
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
1164
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
1165
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
1166
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
1167
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
1168
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
1169
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
1170
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
1171
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
1172
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
1173
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
1174
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
1175
+ -----END CERTIFICATE-----
1176
+
1177
+ TDC Internet Root CA
1178
+ ====================
1179
+ -----BEGIN CERTIFICATE-----
1180
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
1181
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
1182
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
1183
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1184
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
1185
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
1186
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
1187
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
1188
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
1189
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
1190
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
1191
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
1192
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
1193
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
1194
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
1195
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
1196
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
1197
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
1198
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
1199
+ -----END CERTIFICATE-----
1200
+
1201
+ TDC OCES Root CA
1202
+ ================
1203
+ -----BEGIN CERTIFICATE-----
1204
+ MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
1205
+ ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
1206
+ MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
1207
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
1208
+ nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
1209
+ zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
1210
+ iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
1211
+ dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
1212
+ 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
1213
+ 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
1214
+ ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
1215
+ cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
1216
+ Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
1217
+ LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
1218
+ MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
1219
+ aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
1220
+ MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
1221
+ +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
1222
+ NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
1223
+ A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
1224
+ A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
1225
+ AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
1226
+ AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
1227
+ -----END CERTIFICATE-----
1228
+
1229
+ UTN DATACorp SGC Root CA
1230
+ ========================
1231
+ -----BEGIN CERTIFICATE-----
1232
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
1233
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1234
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
1235
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
1236
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
1237
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
1238
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
1239
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
1240
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
1241
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
1242
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
1243
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
1244
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
1245
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
1246
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
1247
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1248
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
1249
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
1250
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
1251
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
1252
+ -----END CERTIFICATE-----
1253
+
1254
+ UTN USERFirst Email Root CA
1255
+ ===========================
1256
+ -----BEGIN CERTIFICATE-----
1257
+ MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
1258
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1259
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
1260
+ BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
1261
+ OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
1262
+ FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
1263
+ ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
1264
+ dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1265
+ MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
1266
+ B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
1267
+ om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
1268
+ TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
1269
+ yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
1270
+ AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
1271
+ HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
1272
+ bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
1273
+ AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
1274
+ xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
1275
+ 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
1276
+ NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
1277
+ w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
1278
+ -----END CERTIFICATE-----
1279
+
1280
+ UTN USERFirst Hardware Root CA
1281
+ ==============================
1282
+ -----BEGIN CERTIFICATE-----
1283
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
1284
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1285
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
1286
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
1287
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
1288
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
1289
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
1290
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
1291
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
1292
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
1293
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
1294
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
1295
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
1296
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
1297
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
1298
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1299
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
1300
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
1301
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
1302
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
1303
+ nfhmqA==
1304
+ -----END CERTIFICATE-----
1305
+
1306
+ UTN USERFirst Object Root CA
1307
+ ============================
1308
+ -----BEGIN CERTIFICATE-----
1309
+ MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
1310
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1311
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
1312
+ BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
1313
+ NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
1314
+ HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
1315
+ dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
1316
+ BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
1317
+ loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
1318
+ w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
1319
+ lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
1320
+ RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
1321
+ BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
1322
+ ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
1323
+ c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
1324
+ DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
1325
+ NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
1326
+ PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
1327
+ qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
1328
+ hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
1329
+ -----END CERTIFICATE-----
1330
+
1331
+ Camerfirma Chambers of Commerce Root
1332
+ ====================================
1333
+ -----BEGIN CERTIFICATE-----
1334
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1335
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1336
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
1337
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
1338
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
1339
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
1340
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
1341
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
1342
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
1343
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
1344
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
1345
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
1346
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
1347
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
1348
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
1349
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
1350
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
1351
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
1352
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
1353
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
1354
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
1355
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
1356
+ -----END CERTIFICATE-----
1357
+
1358
+ Camerfirma Global Chambersign Root
1359
+ ==================================
1360
+ -----BEGIN CERTIFICATE-----
1361
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1362
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1363
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
1364
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
1365
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
1366
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
1367
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
1368
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
1369
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
1370
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
1371
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
1372
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
1373
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
1374
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
1375
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
1376
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
1377
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
1378
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
1379
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
1380
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
1381
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
1382
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
1383
+ -----END CERTIFICATE-----
1384
+
1385
+ NetLock Qualified (Class QA) Root
1386
+ =================================
1387
+ -----BEGIN CERTIFICATE-----
1388
+ MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1389
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1390
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
1391
+ eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
1392
+ bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
1393
+ MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
1394
+ LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
1395
+ dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
1396
+ aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
1397
+ CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
1398
+ 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
1399
+ m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
1400
+ 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
1401
+ 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1402
+ HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
1403
+ YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
1404
+ biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
1405
+ a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
1406
+ YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
1407
+ YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
1408
+ ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
1409
+ L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
1410
+ Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
1411
+ aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
1412
+ YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
1413
+ IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
1414
+ DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
1415
+ wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
1416
+ W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
1417
+ R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
1418
+ 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
1419
+ -----END CERTIFICATE-----
1420
+
1421
+ NetLock Notary (Class A) Root
1422
+ =============================
1423
+ -----BEGIN CERTIFICATE-----
1424
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
1425
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1426
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
1427
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
1428
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
1429
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
1430
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
1431
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
1432
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
1433
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
1434
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
1435
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
1436
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
1437
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
1438
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
1439
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1440
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
1441
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
1442
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
1443
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
1444
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
1445
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
1446
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
1447
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
1448
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
1449
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
1450
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
1451
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
1452
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
1453
+ 8CgHrTwXZoi1/baI
1454
+ -----END CERTIFICATE-----
1455
+
1456
+ NetLock Business (Class B) Root
1457
+ ===============================
1458
+ -----BEGIN CERTIFICATE-----
1459
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1460
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1461
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
1462
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
1463
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
1464
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
1465
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1466
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
1467
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
1468
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1469
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
1470
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
1471
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
1472
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
1473
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
1474
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1475
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
1476
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
1477
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
1478
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
1479
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
1480
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
1481
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
1482
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
1483
+ -----END CERTIFICATE-----
1484
+
1485
+ NetLock Express (Class C) Root
1486
+ ==============================
1487
+ -----BEGIN CERTIFICATE-----
1488
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1489
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1490
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
1491
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
1492
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1493
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
1494
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
1495
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
1496
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
1497
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
1498
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
1499
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
1500
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
1501
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
1502
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
1503
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1504
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
1505
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
1506
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
1507
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
1508
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
1509
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
1510
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
1511
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
1512
+ -----END CERTIFICATE-----
1513
+
1514
+ XRamp Global CA Root
1515
+ ====================
1516
+ -----BEGIN CERTIFICATE-----
1517
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
1518
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
1519
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1520
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
1521
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
1522
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1523
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
1524
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
1525
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
1526
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
1527
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
1528
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1529
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
1530
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
1531
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
1532
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1533
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
1534
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
1535
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
1536
+ -----END CERTIFICATE-----
1537
+
1538
+ Go Daddy Class 2 CA
1539
+ ===================
1540
+ -----BEGIN CERTIFICATE-----
1541
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
1542
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
1543
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
1544
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
1545
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
1546
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
1547
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
1548
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
1549
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
1550
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
1551
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
1552
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
1553
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
1554
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
1555
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
1556
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1557
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
1558
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
1559
+ vZ8=
1560
+ -----END CERTIFICATE-----
1561
+
1562
+ Starfield Class 2 CA
1563
+ ====================
1564
+ -----BEGIN CERTIFICATE-----
1565
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
1566
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
1567
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
1568
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
1569
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
1570
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
1571
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
1572
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
1573
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
1574
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
1575
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
1576
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
1577
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
1578
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
1579
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
1580
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1581
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
1582
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
1583
+ QBFGmh95DmK/D5fs4C8fF5Q=
1584
+ -----END CERTIFICATE-----
1585
+
1586
+ StartCom Certification Authority
1587
+ ================================
1588
+ -----BEGIN CERTIFICATE-----
1589
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
1590
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
1591
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
1592
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
1593
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
1594
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
1595
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
1596
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
1597
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
1598
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
1599
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
1600
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
1601
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
1602
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
1603
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
1604
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1605
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
1606
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
1607
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
1608
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
1609
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
1610
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
1611
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
1612
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
1613
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
1614
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
1615
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
1616
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
1617
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
1618
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
1619
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
1620
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1621
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
1622
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
1623
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
1624
+ g14=
1625
+ -----END CERTIFICATE-----
1626
+
1627
+ Taiwan GRCA
1628
+ ===========
1629
+ -----BEGIN CERTIFICATE-----
1630
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
1631
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
1632
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
1633
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
1634
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
1635
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
1636
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
1637
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
1638
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
1639
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
1640
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
1641
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
1642
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
1643
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
1644
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
1645
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
1646
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
1647
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
1648
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
1649
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
1650
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
1651
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
1652
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
1653
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
1654
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
1655
+ -----END CERTIFICATE-----
1656
+
1657
+ Firmaprofesional Root CA
1658
+ ========================
1659
+ -----BEGIN CERTIFICATE-----
1660
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
1661
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
1662
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
1663
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
1664
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
1665
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
1666
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
1667
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
1668
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
1669
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
1670
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
1671
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
1672
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
1673
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
1674
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
1675
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
1676
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
1677
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
1678
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
1679
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
1680
+ -----END CERTIFICATE-----
1681
+
1682
+ Wells Fargo Root CA
1683
+ ===================
1684
+ -----BEGIN CERTIFICATE-----
1685
+ MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
1686
+ BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1687
+ cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1688
+ MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
1689
+ bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
1690
+ MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1691
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
1692
+ x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
1693
+ E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
1694
+ OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
1695
+ sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
1696
+ YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
1697
+ BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
1698
+ ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
1699
+ m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
1700
+ OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
1701
+ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
1702
+ tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
1703
+ -----END CERTIFICATE-----
1704
+
1705
+ Swisscom Root CA 1
1706
+ ==================
1707
+ -----BEGIN CERTIFICATE-----
1708
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
1709
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
1710
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
1711
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
1712
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
1713
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
1714
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
1715
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
1716
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
1717
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
1718
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
1719
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
1720
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
1721
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
1722
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
1723
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
1724
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
1725
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
1726
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
1727
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
1728
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
1729
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
1730
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1731
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
1732
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
1733
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
1734
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
1735
+ -----END CERTIFICATE-----
1736
+
1737
+ DigiCert Assured ID Root CA
1738
+ ===========================
1739
+ -----BEGIN CERTIFICATE-----
1740
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1741
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1742
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1743
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1744
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1745
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1746
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1747
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1748
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1749
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1750
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1751
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1752
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1753
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1754
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1755
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1756
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1757
+ -----END CERTIFICATE-----
1758
+
1759
+ DigiCert Global Root CA
1760
+ =======================
1761
+ -----BEGIN CERTIFICATE-----
1762
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1763
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1764
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1765
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1766
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1767
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1768
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1769
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1770
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1771
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1772
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1773
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1774
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1775
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1776
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1777
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1778
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1779
+ -----END CERTIFICATE-----
1780
+
1781
+ DigiCert High Assurance EV Root CA
1782
+ ==================================
1783
+ -----BEGIN CERTIFICATE-----
1784
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1785
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1786
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1787
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1788
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1789
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1790
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1791
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1792
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1793
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1794
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1795
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1796
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1797
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1798
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1799
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1800
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1801
+ -----END CERTIFICATE-----
1802
+
1803
+ Certplus Class 2 Primary CA
1804
+ ===========================
1805
+ -----BEGIN CERTIFICATE-----
1806
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1807
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1808
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1809
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1810
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1811
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1812
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1813
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1814
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1815
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1816
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1817
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1818
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1819
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1820
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1821
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1822
+ l7+ijrRU
1823
+ -----END CERTIFICATE-----
1824
+
1825
+ DST Root CA X3
1826
+ ==============
1827
+ -----BEGIN CERTIFICATE-----
1828
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1829
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1830
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1831
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1832
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1833
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1834
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1835
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1836
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1837
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1838
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1839
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1840
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1841
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1842
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1843
+ -----END CERTIFICATE-----
1844
+
1845
+ DST ACES CA X6
1846
+ ==============
1847
+ -----BEGIN CERTIFICATE-----
1848
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1849
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1850
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1851
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1852
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1853
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1854
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1855
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1856
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1857
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1858
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1859
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1860
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1861
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1862
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1863
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1864
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1865
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1866
+ oKfN5XozNmr6mis=
1867
+ -----END CERTIFICATE-----
1868
+
1869
+ TURKTRUST Certificate Services Provider Root 1
1870
+ ==============================================
1871
+ -----BEGIN CERTIFICATE-----
1872
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1873
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1874
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1875
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1876
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1877
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1878
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1879
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1880
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1881
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1882
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1883
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1884
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1885
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1886
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1887
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1888
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1889
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1890
+ -----END CERTIFICATE-----
1891
+
1892
+ TURKTRUST Certificate Services Provider Root 2
1893
+ ==============================================
1894
+ -----BEGIN CERTIFICATE-----
1895
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1896
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1897
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1898
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1899
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1900
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1901
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1902
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1903
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1904
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1905
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1906
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1907
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1908
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1909
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1910
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1911
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1912
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1913
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1914
+ UrbnBEI=
1915
+ -----END CERTIFICATE-----
1916
+
1917
+ SwissSign Platinum CA - G2
1918
+ ==========================
1919
+ -----BEGIN CERTIFICATE-----
1920
+ MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
1921
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
1922
+ HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
1923
+ U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
1924
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
1925
+ 669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
1926
+ eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
1927
+ WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
1928
+ j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
1929
+ 8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
1930
+ aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
1931
+ domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
1932
+ +m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
1933
+ CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
1934
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
1935
+ zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
1936
+ IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
1937
+ Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
1938
+ NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
1939
+ U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
1940
+ KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
1941
+ 9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
1942
+ aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
1943
+ OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
1944
+ Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
1945
+ IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
1946
+ -----END CERTIFICATE-----
1947
+
1948
+ SwissSign Gold CA - G2
1949
+ ======================
1950
+ -----BEGIN CERTIFICATE-----
1951
+ MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
1952
+ EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
1953
+ MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
1954
+ c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
1955
+ AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
1956
+ t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
1957
+ jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
1958
+ vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
1959
+ ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
1960
+ AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
1961
+ jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
1962
+ peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
1963
+ 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
1964
+ GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
1965
+ AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
1966
+ OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
1967
+ L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
1968
+ 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
1969
+ 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
1970
+ Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
1971
+ Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
1972
+ mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
1973
+ vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
1974
+ KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
1975
+ NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
1976
+ viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
1977
+ -----END CERTIFICATE-----
1978
+
1979
+ SwissSign Silver CA - G2
1980
+ ========================
1981
+ -----BEGIN CERTIFICATE-----
1982
+ MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
1983
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
1984
+ DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
1985
+ aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
1986
+ 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
1987
+ N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
1988
+ +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
1989
+ 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
1990
+ MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
1991
+ qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
1992
+ FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
1993
+ ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
1994
+ celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
1995
+ CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
1996
+ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
1997
+ tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
1998
+ cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
1999
+ 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
2000
+ kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
2001
+ 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
2002
+ /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
2003
+ DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
2004
+ e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
2005
+ WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
2006
+ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
2007
+ DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
2008
+ -----END CERTIFICATE-----
2009
+
2010
+ GeoTrust Primary Certification Authority
2011
+ ========================================
2012
+ -----BEGIN CERTIFICATE-----
2013
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
2014
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
2015
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
2016
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
2017
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2018
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
2019
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
2020
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
2021
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
2022
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2023
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
2024
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
2025
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
2026
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
2027
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2028
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2029
+ -----END CERTIFICATE-----
2030
+
2031
+ thawte Primary Root CA
2032
+ ======================
2033
+ -----BEGIN CERTIFICATE-----
2034
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2035
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2036
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2037
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2038
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2039
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2040
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2041
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2042
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2043
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2044
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2045
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2046
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2047
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2048
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2049
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2050
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2051
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2052
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2053
+ -----END CERTIFICATE-----
2054
+
2055
+ VeriSign Class 3 Public Primary Certification Authority - G5
2056
+ ============================================================
2057
+ -----BEGIN CERTIFICATE-----
2058
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2059
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2060
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2061
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2062
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2063
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2064
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2065
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2066
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2067
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2068
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2069
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2070
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2071
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2072
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2073
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2074
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2075
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2076
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2077
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2078
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2079
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2080
+ -----END CERTIFICATE-----
2081
+
2082
+ SecureTrust CA
2083
+ ==============
2084
+ -----BEGIN CERTIFICATE-----
2085
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2086
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2087
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2088
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2089
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2090
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2091
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2092
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2093
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2094
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2095
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2096
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2097
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2098
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2099
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2100
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2101
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2102
+ -----END CERTIFICATE-----
2103
+
2104
+ Secure Global CA
2105
+ ================
2106
+ -----BEGIN CERTIFICATE-----
2107
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2108
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2109
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2110
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2111
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2112
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2113
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2114
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
2115
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
2116
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2117
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
2118
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
2119
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
2120
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
2121
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
2122
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
2123
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
2124
+ -----END CERTIFICATE-----
2125
+
2126
+ COMODO Certification Authority
2127
+ ==============================
2128
+ -----BEGIN CERTIFICATE-----
2129
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
2130
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
2131
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
2132
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
2133
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
2134
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
2135
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
2136
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
2137
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
2138
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
2139
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
2140
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
2141
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
2142
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
2143
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
2144
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
2145
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
2146
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
2147
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
2148
+ -----END CERTIFICATE-----
2149
+
2150
+ Network Solutions Certificate Authority
2151
+ =======================================
2152
+ -----BEGIN CERTIFICATE-----
2153
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
2154
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
2155
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
2156
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
2157
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2158
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
2159
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
2160
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
2161
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
2162
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
2163
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
2164
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
2165
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
2166
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
2167
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
2168
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
2169
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
2170
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
2171
+ -----END CERTIFICATE-----
2172
+
2173
+ WellsSecure Public Root Certificate Authority
2174
+ =============================================
2175
+ -----BEGIN CERTIFICATE-----
2176
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
2177
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
2178
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2179
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
2180
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
2181
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2182
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
2183
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
2184
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
2185
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
2186
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
2187
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
2188
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
2189
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
2190
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
2191
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
2192
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
2193
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
2194
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
2195
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
2196
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
2197
+ tylv2G0xffX8oRAHh84vWdw+WNs=
2198
+ -----END CERTIFICATE-----
2199
+
2200
+ COMODO ECC Certification Authority
2201
+ ==================================
2202
+ -----BEGIN CERTIFICATE-----
2203
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
2204
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
2205
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
2206
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
2207
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
2208
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
2209
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
2210
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
2211
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
2212
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
2213
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
2214
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
2215
+ -----END CERTIFICATE-----
2216
+
2217
+ IGC/A
2218
+ =====
2219
+ -----BEGIN CERTIFICATE-----
2220
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
2221
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
2222
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
2223
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
2224
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
2225
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
2226
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
2227
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
2228
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
2229
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
2230
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
2231
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
2232
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
2233
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
2234
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
2235
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
2236
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
2237
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
2238
+ 0mBWWg==
2239
+ -----END CERTIFICATE-----
2240
+
2241
+ Security Communication EV RootCA1
2242
+ =================================
2243
+ -----BEGIN CERTIFICATE-----
2244
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
2245
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
2246
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
2247
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
2248
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2249
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
2250
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
2251
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
2252
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
2253
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
2254
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
2255
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
2256
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
2257
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
2258
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
2259
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
2260
+ -----END CERTIFICATE-----
2261
+
2262
+ OISTE WISeKey Global Root GA CA
2263
+ ===============================
2264
+ -----BEGIN CERTIFICATE-----
2265
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
2266
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
2267
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
2268
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
2269
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
2270
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
2271
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
2272
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
2273
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
2274
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
2275
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
2276
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
2277
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2278
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
2279
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
2280
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
2281
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
2282
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
2283
+ -----END CERTIFICATE-----
2284
+
2285
+ S-TRUST Authentication and Encryption Root CA 2005 PN
2286
+ =====================================================
2287
+ -----BEGIN CERTIFICATE-----
2288
+ MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2289
+ BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
2290
+ cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
2291
+ LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
2292
+ NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
2293
+ ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
2294
+ aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
2295
+ b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2296
+ MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
2297
+ 4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
2298
+ g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
2299
+ eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
2300
+ KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
2301
+ /wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
2302
+ bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
2303
+ D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
2304
+ pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
2305
+ P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
2306
+ nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
2307
+ F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
2308
+ Hz2eBIPdltkdOpQ=
2309
+ -----END CERTIFICATE-----
2310
+
2311
+ Microsec e-Szigno Root CA
2312
+ =========================
2313
+ -----BEGIN CERTIFICATE-----
2314
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
2315
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
2316
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
2317
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
2318
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
2319
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
2320
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
2321
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
2322
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
2323
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
2324
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
2325
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
2326
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
2327
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
2328
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
2329
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
2330
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
2331
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
2332
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
2333
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
2334
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
2335
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
2336
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
2337
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
2338
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
2339
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
2340
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
2341
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
2342
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
2343
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
2344
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
2345
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
2346
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
2347
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
2348
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
2349
+ -----END CERTIFICATE-----
2350
+
2351
+ Certigna
2352
+ ========
2353
+ -----BEGIN CERTIFICATE-----
2354
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
2355
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
2356
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
2357
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
2358
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
2359
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
2360
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
2361
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
2362
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
2363
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
2364
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
2365
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
2366
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
2367
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
2368
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
2369
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
2370
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
2371
+ -----END CERTIFICATE-----
2372
+
2373
+ AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
2374
+ ======================================
2375
+ -----BEGIN CERTIFICATE-----
2376
+ MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
2377
+ AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
2378
+ LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
2379
+ HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
2380
+ U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
2381
+ IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
2382
+ AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
2383
+ yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
2384
+ 2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
2385
+ 4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
2386
+ 2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
2387
+ 8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
2388
+ HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
2389
+ Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
2390
+ 5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
2391
+ czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2392
+ AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
2393
+ ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
2394
+ BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
2395
+ cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
2396
+ AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
2397
+ EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
2398
+ /zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
2399
+ MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
2400
+ 3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
2401
+ eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
2402
+ /RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
2403
+ RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
2404
+ Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
2405
+ -----END CERTIFICATE-----
2406
+
2407
+ TC TrustCenter Class 2 CA II
2408
+ ============================
2409
+ -----BEGIN CERTIFICATE-----
2410
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2411
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2412
+ IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
2413
+ MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2414
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
2415
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2416
+ AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
2417
+ IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
2418
+ xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
2419
+ Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
2420
+ SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
2421
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
2422
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2423
+ Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2424
+ cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2425
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2426
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
2427
+ dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
2428
+ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
2429
+ TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
2430
+ JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
2431
+ vQ==
2432
+ -----END CERTIFICATE-----
2433
+
2434
+ TC TrustCenter Class 3 CA II
2435
+ ============================
2436
+ -----BEGIN CERTIFICATE-----
2437
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2438
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2439
+ IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
2440
+ MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2441
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
2442
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2443
+ AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
2444
+ yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
2445
+ 6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
2446
+ uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
2447
+ 2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
2448
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
2449
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2450
+ Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2451
+ cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2452
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2453
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
2454
+ O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
2455
+ yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
2456
+ IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
2457
+ 092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
2458
+ 5A==
2459
+ -----END CERTIFICATE-----
2460
+
2461
+ TC TrustCenter Universal CA I
2462
+ =============================
2463
+ -----BEGIN CERTIFICATE-----
2464
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
2465
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2466
+ IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
2467
+ MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
2468
+ VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
2469
+ JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
2470
+ ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
2471
+ qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
2472
+ xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
2473
+ ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
2474
+ gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
2475
+ BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2476
+ AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
2477
+ 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
2478
+ vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
2479
+ ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
2480
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
2481
+ 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
2482
+ -----END CERTIFICATE-----
2483
+
2484
+ Deutsche Telekom Root CA 2
2485
+ ==========================
2486
+ -----BEGIN CERTIFICATE-----
2487
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
2488
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
2489
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
2490
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
2491
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
2492
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
2493
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
2494
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
2495
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
2496
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
2497
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
2498
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
2499
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
2500
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
2501
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
2502
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
2503
+ Cm26OWMohpLzGITY+9HPBVZkVw==
2504
+ -----END CERTIFICATE-----
2505
+
2506
+ ComSign CA
2507
+ ==========
2508
+ -----BEGIN CERTIFICATE-----
2509
+ MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
2510
+ EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
2511
+ MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
2512
+ Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
2513
+ ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
2514
+ P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
2515
+ GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
2516
+ YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
2517
+ rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
2518
+ oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
2519
+ AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
2520
+ VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
2521
+ QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
2522
+ mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
2523
+ /627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
2524
+ zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
2525
+ AGegcQCCSA==
2526
+ -----END CERTIFICATE-----
2527
+
2528
+ ComSign Secured CA
2529
+ ==================
2530
+ -----BEGIN CERTIFICATE-----
2531
+ MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
2532
+ AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
2533
+ NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
2534
+ QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2535
+ ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
2536
+ 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
2537
+ 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
2538
+ kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
2539
+ 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
2540
+ AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
2541
+ U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
2542
+ j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
2543
+ AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
2544
+ BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
2545
+ FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
2546
+ 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
2547
+ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
2548
+ -----END CERTIFICATE-----
2549
+
2550
+ Cybertrust Global Root
2551
+ ======================
2552
+ -----BEGIN CERTIFICATE-----
2553
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
2554
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
2555
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
2556
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2557
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
2558
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
2559
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
2560
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
2561
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
2562
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
2563
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
2564
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
2565
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
2566
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
2567
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
2568
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
2569
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
2570
+ -----END CERTIFICATE-----
2571
+
2572
+ ePKI Root Certification Authority
2573
+ =================================
2574
+ -----BEGIN CERTIFICATE-----
2575
+ MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
2576
+ EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
2577
+ Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
2578
+ MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
2579
+ MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
2580
+ AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
2581
+ IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
2582
+ lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
2583
+ qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
2584
+ 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
2585
+ WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
2586
+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
2587
+ lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
2588
+ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
2589
+ Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
2590
+ MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
2591
+ ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
2592
+ 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
2593
+ KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
2594
+ xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
2595
+ NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
2596
+ GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
2597
+ xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
2598
+ gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
2599
+ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
2600
+ BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
2601
+ -----END CERTIFICATE-----
2602
+
2603
+ T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
2604
+ =============================================================================================================================
2605
+ -----BEGIN CERTIFICATE-----
2606
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
2607
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
2608
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
2609
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
2610
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
2611
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
2612
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
2613
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
2614
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
2615
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
2616
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
2617
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
2618
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
2619
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
2620
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
2621
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
2622
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
2623
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
2624
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
2625
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
2626
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
2627
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
2628
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
2629
+ -----END CERTIFICATE-----
2630
+
2631
+ Buypass Class 2 CA 1
2632
+ ====================
2633
+ -----BEGIN CERTIFICATE-----
2634
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2635
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
2636
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2637
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
2638
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
2639
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
2640
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
2641
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
2642
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
2643
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
2644
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
2645
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
2646
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
2647
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
2648
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
2649
+ -----END CERTIFICATE-----
2650
+
2651
+ Buypass Class 3 CA 1
2652
+ ====================
2653
+ -----BEGIN CERTIFICATE-----
2654
+ MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2655
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
2656
+ MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2657
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
2658
+ hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
2659
+ ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
2660
+ n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
2661
+ AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
2662
+ 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
2663
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
2664
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
2665
+ pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
2666
+ EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
2667
+ htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
2668
+ el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
2669
+ -----END CERTIFICATE-----
2670
+
2671
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
2672
+ ==========================================================================
2673
+ -----BEGIN CERTIFICATE-----
2674
+ MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
2675
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
2676
+ QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
2677
+ Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
2678
+ ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
2679
+ IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
2680
+ SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
2681
+ X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
2682
+ gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
2683
+ eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
2684
+ TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
2685
+ Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
2686
+ uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
2687
+ qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
2688
+ ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
2689
+ Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
2690
+ /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
2691
+ Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
2692
+ FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
2693
+ zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
2694
+ XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
2695
+ bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
2696
+ RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
2697
+ 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
2698
+ 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
2699
+ Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
2700
+ AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
2701
+ -----END CERTIFICATE-----
2702
+
2703
+ certSIGN ROOT CA
2704
+ ================
2705
+ -----BEGIN CERTIFICATE-----
2706
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
2707
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
2708
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
2709
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
2710
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
2711
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
2712
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
2713
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
2714
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
2715
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
2716
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
2717
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
2718
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
2719
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
2720
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
2721
+ -----END CERTIFICATE-----
2722
+
2723
+ CNNIC ROOT
2724
+ ==========
2725
+ -----BEGIN CERTIFICATE-----
2726
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
2727
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
2728
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
2729
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
2730
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
2731
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
2732
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
2733
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
2734
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
2735
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
2736
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
2737
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
2738
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
2739
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
2740
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
2741
+ mxE=
2742
+ -----END CERTIFICATE-----
2743
+
2744
+ ApplicationCA - Japanese Government
2745
+ ===================================
2746
+ -----BEGIN CERTIFICATE-----
2747
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
2748
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
2749
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
2750
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2751
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
2752
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
2753
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
2754
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
2755
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
2756
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
2757
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
2758
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
2759
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
2760
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
2761
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
2762
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
2763
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
2764
+ -----END CERTIFICATE-----
2765
+
2766
+ GeoTrust Primary Certification Authority - G3
2767
+ =============================================
2768
+ -----BEGIN CERTIFICATE-----
2769
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
2770
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
2771
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
2772
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
2773
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
2774
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
2775
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
2776
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
2777
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
2778
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
2779
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
2780
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
2781
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
2782
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
2783
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
2784
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
2785
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
2786
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
2787
+ -----END CERTIFICATE-----
2788
+
2789
+ thawte Primary Root CA - G2
2790
+ ===========================
2791
+ -----BEGIN CERTIFICATE-----
2792
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
2793
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
2794
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
2795
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
2796
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
2797
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
2798
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
2799
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
2800
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
2801
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
2802
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
2803
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
2804
+ -----END CERTIFICATE-----
2805
+
2806
+ thawte Primary Root CA - G3
2807
+ ===========================
2808
+ -----BEGIN CERTIFICATE-----
2809
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
2810
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2811
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2812
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
2813
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
2814
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
2815
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
2816
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2817
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
2818
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
2819
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
2820
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
2821
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
2822
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
2823
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
2824
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
2825
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
2826
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
2827
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
2828
+ -----END CERTIFICATE-----
2829
+
2830
+ GeoTrust Primary Certification Authority - G2
2831
+ =============================================
2832
+ -----BEGIN CERTIFICATE-----
2833
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
2834
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
2835
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
2836
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
2837
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
2838
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
2839
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
2840
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
2841
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
2842
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
2843
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
2844
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
2845
+ npaqBA+K
2846
+ -----END CERTIFICATE-----
2847
+
2848
+ VeriSign Universal Root Certification Authority
2849
+ ===============================================
2850
+ -----BEGIN CERTIFICATE-----
2851
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
2852
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2853
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2854
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
2855
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
2856
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
2857
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
2858
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
2859
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
2860
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
2861
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
2862
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
2863
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2864
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2865
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2866
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2867
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2868
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2869
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2870
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2871
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2872
+ mJO37M2CYfE45k+XmCpajQ==
2873
+ -----END CERTIFICATE-----
2874
+
2875
+ VeriSign Class 3 Public Primary Certification Authority - G4
2876
+ ============================================================
2877
+ -----BEGIN CERTIFICATE-----
2878
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2879
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2880
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2881
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2882
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2883
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2884
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2885
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2886
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2887
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2888
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2889
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2890
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2891
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2892
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2893
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2894
+ -----END CERTIFICATE-----
2895
+
2896
+ NetLock Arany (Class Gold) Főtanúsítvány
2897
+ ============================================
2898
+ -----BEGIN CERTIFICATE-----
2899
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2900
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2901
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2902
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2903
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2904
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2905
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2906
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2907
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2908
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2909
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2910
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2911
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2912
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2913
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2914
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2915
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2916
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2917
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2918
+ -----END CERTIFICATE-----
2919
+
2920
+ Staat der Nederlanden Root CA - G2
2921
+ ==================================
2922
+ -----BEGIN CERTIFICATE-----
2923
+ MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
2924
+ CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2925
+ Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
2926
+ TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
2927
+ ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
2928
+ 5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
2929
+ vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
2930
+ CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
2931
+ e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
2932
+ OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
2933
+ CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
2934
+ 48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
2935
+ trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
2936
+ qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
2937
+ AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
2938
+ ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
2939
+ HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
2940
+ A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
2941
+ +51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
2942
+ f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
2943
+ kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
2944
+ CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
2945
+ URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
2946
+ CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
2947
+ oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
2948
+ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
2949
+ 66+KAQ==
2950
+ -----END CERTIFICATE-----
2951
+
2952
+ CA Disig
2953
+ ========
2954
+ -----BEGIN CERTIFICATE-----
2955
+ MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
2956
+ QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
2957
+ MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
2958
+ bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
2959
+ DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
2960
+ GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
2961
+ Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
2962
+ hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
2963
+ ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
2964
+ gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
2965
+ AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
2966
+ aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
2967
+ ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
2968
+ BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
2969
+ WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
2970
+ mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
2971
+ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
2972
+ ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
2973
+ 4Z7CRneC9VkGjCFMhwnN5ag=
2974
+ -----END CERTIFICATE-----
2975
+
2976
+ Juur-SK
2977
+ =======
2978
+ -----BEGIN CERTIFICATE-----
2979
+ MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
2980
+ c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
2981
+ DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
2982
+ SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
2983
+ aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2984
+ ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
2985
+ TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
2986
+ +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
2987
+ UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
2988
+ Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
2989
+ MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
2990
+ HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
2991
+ AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
2992
+ cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
2993
+ AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
2994
+ cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
2995
+ FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
2996
+ A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
2997
+ ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
2998
+ abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
2999
+ IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
3000
+ Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
3001
+ yyqcjg==
3002
+ -----END CERTIFICATE-----
3003
+
3004
+ Hongkong Post Root CA 1
3005
+ =======================
3006
+ -----BEGIN CERTIFICATE-----
3007
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
3008
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
3009
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
3010
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
3011
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
3012
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
3013
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
3014
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
3015
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
3016
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
3017
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
3018
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
3019
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
3020
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
3021
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
3022
+ -----END CERTIFICATE-----
3023
+
3024
+ SecureSign RootCA11
3025
+ ===================
3026
+ -----BEGIN CERTIFICATE-----
3027
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
3028
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
3029
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
3030
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
3031
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
3032
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
3033
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
3034
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
3035
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
3036
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
3037
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
3038
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
3039
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
3040
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
3041
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
3042
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
3043
+ -----END CERTIFICATE-----
3044
+
3045
+ ACEDICOM Root
3046
+ =============
3047
+ -----BEGIN CERTIFICATE-----
3048
+ MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
3049
+ T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
3050
+ MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
3051
+ A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
3052
+ AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
3053
+ WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
3054
+ YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
3055
+ MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
3056
+ m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
3057
+ HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
3058
+ xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
3059
+ 3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
3060
+ 2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
3061
+ TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
3062
+ 4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
3063
+ 9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
3064
+ bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
3065
+ aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
3066
+ eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
3067
+ zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
3068
+ ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
3069
+ KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
3070
+ nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
3071
+ I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
3072
+ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
3073
+ tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
3074
+ -----END CERTIFICATE-----
3075
+
3076
+ Verisign Class 1 Public Primary Certification Authority
3077
+ =======================================================
3078
+ -----BEGIN CERTIFICATE-----
3079
+ MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3080
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
3081
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3082
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
3083
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3084
+ A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
3085
+ VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
3086
+ yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
3087
+ XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
3088
+ 0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
3089
+ RjXZ+Hxb
3090
+ -----END CERTIFICATE-----
3091
+
3092
+ Verisign Class 3 Public Primary Certification Authority
3093
+ =======================================================
3094
+ -----BEGIN CERTIFICATE-----
3095
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3096
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
3097
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3098
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
3099
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3100
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
3101
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
3102
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
3103
+ CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
3104
+ bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
3105
+ D/xwzoiQ
3106
+ -----END CERTIFICATE-----
3107
+
3108
+ Microsec e-Szigno Root CA 2009
3109
+ ==============================
3110
+ -----BEGIN CERTIFICATE-----
3111
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
3112
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
3113
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
3114
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
3115
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
3116
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
3117
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
3118
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
3119
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
3120
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
3121
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
3122
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
3123
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
3124
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
3125
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
3126
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
3127
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
3128
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
3129
+ LXpUq3DDfSJlgnCW
3130
+ -----END CERTIFICATE-----
3131
+
3132
+ E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
3133
+ ===================================================
3134
+ -----BEGIN CERTIFICATE-----
3135
+ MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3136
+ EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
3137
+ ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
3138
+ MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
3139
+ cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
3140
+ aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3141
+ AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
3142
+ 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
3143
+ jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
3144
+ JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
3145
+ 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
3146
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
3147
+ SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
3148
+ F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
3149
+ D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
3150
+ Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
3151
+ fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
3152
+ -----END CERTIFICATE-----
3153
+
3154
+ GlobalSign Root CA - R3
3155
+ =======================
3156
+ -----BEGIN CERTIFICATE-----
3157
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
3158
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
3159
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
3160
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
3161
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
3162
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
3163
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
3164
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
3165
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
3166
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
3167
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
3168
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
3169
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
3170
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
3171
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
3172
+ kpeDMdmztcpHWD9f
3173
+ -----END CERTIFICATE-----
3174
+
3175
+ TC TrustCenter Universal CA III
3176
+ ===============================
3177
+ -----BEGIN CERTIFICATE-----
3178
+ MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
3179
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
3180
+ IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
3181
+ Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
3182
+ QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
3183
+ KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
3184
+ AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
3185
+ QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
3186
+ juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
3187
+ CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
3188
+ M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
3189
+ A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
3190
+ BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
3191
+ g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
3192
+ KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
3193
+ BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
3194
+ CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
3195
+ woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
3196
+ -----END CERTIFICATE-----
3197
+
3198
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
3199
+ =========================================================
3200
+ -----BEGIN CERTIFICATE-----
3201
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
3202
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
3203
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
3204
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
3205
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
3206
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
3207
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
3208
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
3209
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
3210
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
3211
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
3212
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
3213
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
3214
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
3215
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
3216
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
3217
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
3218
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
3219
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
3220
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
3221
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
3222
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
3223
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
3224
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
3225
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
3226
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
3227
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
3228
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
3229
+ -----END CERTIFICATE-----
3230
+
3231
+ Izenpe.com
3232
+ ==========
3233
+ -----BEGIN CERTIFICATE-----
3234
+ MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
3235
+ EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
3236
+ MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
3237
+ QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
3238
+ 03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
3239
+ ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
3240
+ +zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
3241
+ PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
3242
+ OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
3243
+ F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
3244
+ 0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
3245
+ 0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
3246
+ leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
3247
+ AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
3248
+ SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
3249
+ NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
3250
+ MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
3251
+ BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
3252
+ Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
3253
+ kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
3254
+ hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
3255
+ g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
3256
+ aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
3257
+ nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
3258
+ ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
3259
+ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
3260
+ WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
3261
+ -----END CERTIFICATE-----
3262
+
3263
+ Chambers of Commerce Root - 2008
3264
+ ================================
3265
+ -----BEGIN CERTIFICATE-----
3266
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
3267
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3268
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3269
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
3270
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
3271
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
3272
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
3273
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
3274
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
3275
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
3276
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
3277
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
3278
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
3279
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
3280
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
3281
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
3282
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
3283
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
3284
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
3285
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
3286
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
3287
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
3288
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
3289
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
3290
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
3291
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
3292
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
3293
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
3294
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
3295
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
3296
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
3297
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
3298
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
3299
+ -----END CERTIFICATE-----
3300
+
3301
+ Global Chambersign Root - 2008
3302
+ ==============================
3303
+ -----BEGIN CERTIFICATE-----
3304
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
3305
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3306
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3307
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
3308
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
3309
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
3310
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
3311
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
3312
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
3313
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
3314
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
3315
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
3316
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
3317
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
3318
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
3319
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
3320
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
3321
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
3322
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
3323
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
3324
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
3325
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
3326
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
3327
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
3328
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
3329
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
3330
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
3331
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
3332
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
3333
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
3334
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
3335
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
3336
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
3337
+ -----END CERTIFICATE-----
3338
+
3339
+ Go Daddy Root Certificate Authority - G2
3340
+ ========================================
3341
+ -----BEGIN CERTIFICATE-----
3342
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3343
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
3344
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
3345
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
3346
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
3347
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
3348
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
3349
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
3350
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
3351
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
3352
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
3353
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
3354
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
3355
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
3356
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
3357
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
3358
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
3359
+ -----END CERTIFICATE-----
3360
+
3361
+ Starfield Root Certificate Authority - G2
3362
+ =========================================
3363
+ -----BEGIN CERTIFICATE-----
3364
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3365
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3366
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
3367
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
3368
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
3369
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
3370
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
3371
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
3372
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
3373
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
3374
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
3375
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3376
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
3377
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
3378
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
3379
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
3380
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
3381
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
3382
+ -----END CERTIFICATE-----
3383
+
3384
+ Starfield Services Root Certificate Authority - G2
3385
+ ==================================================
3386
+ -----BEGIN CERTIFICATE-----
3387
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3388
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3389
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
3390
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
3391
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
3392
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
3393
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3394
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
3395
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
3396
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
3397
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
3398
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
3399
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
3400
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
3401
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
3402
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
3403
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
3404
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
3405
+ -----END CERTIFICATE-----
3406
+
3407
+ AffirmTrust Commercial
3408
+ ======================
3409
+ -----BEGIN CERTIFICATE-----
3410
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
3411
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
3412
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3413
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
3414
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
3415
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
3416
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
3417
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
3418
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
3419
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3420
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
3421
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
3422
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
3423
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
3424
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
3425
+ -----END CERTIFICATE-----
3426
+
3427
+ AffirmTrust Networking
3428
+ ======================
3429
+ -----BEGIN CERTIFICATE-----
3430
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
3431
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
3432
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3433
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
3434
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
3435
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
3436
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
3437
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
3438
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
3439
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3440
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
3441
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
3442
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
3443
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
3444
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
3445
+ -----END CERTIFICATE-----
3446
+
3447
+ AffirmTrust Premium
3448
+ ===================
3449
+ -----BEGIN CERTIFICATE-----
3450
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
3451
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
3452
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
3453
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3454
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
3455
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
3456
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
3457
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
3458
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
3459
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
3460
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
3461
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
3462
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
3463
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
3464
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
3465
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
3466
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
3467
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
3468
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
3469
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
3470
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
3471
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
3472
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
3473
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
3474
+ -----END CERTIFICATE-----
3475
+
3476
+ AffirmTrust Premium ECC
3477
+ =======================
3478
+ -----BEGIN CERTIFICATE-----
3479
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
3480
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
3481
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
3482
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
3483
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
3484
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
3485
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
3486
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
3487
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
3488
+ eQ==
3489
+ -----END CERTIFICATE-----
3490
+
3491
+ Certum Trusted Network CA
3492
+ =========================
3493
+ -----BEGIN CERTIFICATE-----
3494
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
3495
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
3496
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
3497
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
3498
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3499
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
3500
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
3501
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
3502
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
3503
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
3504
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
3505
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
3506
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
3507
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
3508
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
3509
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
3510
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
3511
+ -----END CERTIFICATE-----
3512
+
3513
+ Certinomis - Autorité Racine
3514
+ =============================
3515
+ -----BEGIN CERTIFICATE-----
3516
+ MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
3517
+ Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
3518
+ LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
3519
+ A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
3520
+ JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
3521
+ ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
3522
+ wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
3523
+ Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
3524
+ 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
3525
+ jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
3526
+ c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
3527
+ lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
3528
+ xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
3529
+ 530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
3530
+ 4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
3531
+ A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
3532
+ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
3533
+ WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
3534
+ R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
3535
+ nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
3536
+ CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
3537
+ JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
3538
+ qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
3539
+ WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
3540
+ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
3541
+ vgt2Fl43N+bYdJeimUV5
3542
+ -----END CERTIFICATE-----
3543
+
3544
+ Root CA Generalitat Valenciana
3545
+ ==============================
3546
+ -----BEGIN CERTIFICATE-----
3547
+ MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
3548
+ ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
3549
+ IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
3550
+ WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
3551
+ CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
3552
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
3553
+ F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
3554
+ ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
3555
+ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
3556
+ JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
3557
+ AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
3558
+ dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
3559
+ ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
3560
+ AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
3561
+ YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
3562
+ AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
3563
+ aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
3564
+ AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
3565
+ YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
3566
+ AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
3567
+ OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
3568
+ dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
3569
+ BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
3570
+ A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
3571
+ b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
3572
+ TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
3573
+ Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
3574
+ NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
3575
+ iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
3576
+ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
3577
+ -----END CERTIFICATE-----
3578
+
3579
+ A-Trust-nQual-03
3580
+ ================
3581
+ -----BEGIN CERTIFICATE-----
3582
+ MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
3583
+ Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
3584
+ a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
3585
+ dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
3586
+ RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
3587
+ ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
3588
+ c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
3589
+ zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
3590
+ yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
3591
+ SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
3592
+ iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
3593
+ cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
3594
+ eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
3595
+ ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
3596
+ sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
3597
+ JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
3598
+ mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
3599
+ ahq97BvIxYSazQ==
3600
+ -----END CERTIFICATE-----
3601
+
3602
+ TWCA Root Certification Authority
3603
+ =================================
3604
+ -----BEGIN CERTIFICATE-----
3605
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
3606
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
3607
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
3608
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
3609
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3610
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
3611
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
3612
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
3613
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
3614
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
3615
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
3616
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
3617
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
3618
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
3619
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
3620
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
3621
+ -----END CERTIFICATE-----
3622
+
3623
+ Security Communication RootCA2
3624
+ ==============================
3625
+ -----BEGIN CERTIFICATE-----
3626
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
3627
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
3628
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
3629
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
3630
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3631
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
3632
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3633
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
3634
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
3635
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
3636
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
3637
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
3638
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3639
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
3640
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
3641
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
3642
+ -----END CERTIFICATE-----
3643
+
3644
+ EC-ACC
3645
+ ======
3646
+ -----BEGIN CERTIFICATE-----
3647
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
3648
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
3649
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
3650
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
3651
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
3652
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
3653
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
3654
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
3655
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
3656
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
3657
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
3658
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
3659
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
3660
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
3661
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
3662
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
3663
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
3664
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
3665
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
3666
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
3667
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
3668
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
3669
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
3670
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
3671
+ 5EI=
3672
+ -----END CERTIFICATE-----
3673
+
3674
+ Hellenic Academic and Research Institutions RootCA 2011
3675
+ =======================================================
3676
+ -----BEGIN CERTIFICATE-----
3677
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
3678
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
3679
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3680
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
3681
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3682
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
3683
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3684
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
3685
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
3686
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
3687
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
3688
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
3689
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
3690
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
3691
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
3692
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
3693
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
3694
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
3695
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
3696
+ -----END CERTIFICATE-----
3697
+
3698
+ Actalis Authentication Root CA
3699
+ ==============================
3700
+ -----BEGIN CERTIFICATE-----
3701
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
3702
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
3703
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
3704
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
3705
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
3706
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
3707
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
3708
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
3709
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
3710
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
3711
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
3712
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
3713
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
3714
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
3715
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
3716
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
3717
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
3718
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
3719
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
3720
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
3721
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
3722
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
3723
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
3724
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
3725
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
3726
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
3727
+ -----END CERTIFICATE-----
3728
+
3729
+ Trustis FPS Root CA
3730
+ ===================
3731
+ -----BEGIN CERTIFICATE-----
3732
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
3733
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
3734
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
3735
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
3736
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
3737
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
3738
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
3739
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
3740
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
3741
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
3742
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
3743
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
3744
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
3745
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
3746
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
3747
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
3748
+ -----END CERTIFICATE-----
3749
+
3750
+ StartCom Certification Authority
3751
+ ================================
3752
+ -----BEGIN CERTIFICATE-----
3753
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3754
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
3755
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
3756
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
3757
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
3758
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
3759
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
3760
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
3761
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
3762
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
3763
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
3764
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
3765
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
3766
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
3767
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
3768
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
3769
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
3770
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
3771
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
3772
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
3773
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
3774
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
3775
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
3776
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
3777
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
3778
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
3779
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
3780
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
3781
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
3782
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
3783
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
3784
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
3785
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
3786
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
3787
+ -----END CERTIFICATE-----
3788
+
3789
+ StartCom Certification Authority G2
3790
+ ===================================
3791
+ -----BEGIN CERTIFICATE-----
3792
+ MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3793
+ U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
3794
+ RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
3795
+ ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
3796
+ dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
3797
+ o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
3798
+ 4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
3799
+ Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
3800
+ Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
3801
+ O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
3802
+ vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
3803
+ nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
3804
+ FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
3805
+ z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
3806
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
3807
+ KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
3808
+ 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
3809
+ J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
3810
+ JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
3811
+ /+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
3812
+ nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
3813
+ blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
3814
+ l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
3815
+ 7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
3816
+ obp573PYtlNXLfbQ4ddI
3817
+ -----END CERTIFICATE-----
3818
+
3819
+ Buypass Class 2 Root CA
3820
+ =======================
3821
+ -----BEGIN CERTIFICATE-----
3822
+ MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
3823
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
3824
+ DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
3825
+ eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
3826
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
3827
+ g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
3828
+ 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
3829
+ /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
3830
+ CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
3831
+ awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
3832
+ zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
3833
+ Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
3834
+ Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
3835
+ M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3836
+ VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
3837
+ AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
3838
+ A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
3839
+ osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
3840
+ aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
3841
+ DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
3842
+ LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
3843
+ oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
3844
+ wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
3845
+ CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
3846
+ rJgWVqA=
3847
+ -----END CERTIFICATE-----
3848
+
3849
+ Buypass Class 3 Root CA
3850
+ =======================
3851
+ -----BEGIN CERTIFICATE-----
3852
+ MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
3853
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
3854
+ DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
3855
+ eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
3856
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
3857
+ sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
3858
+ 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
3859
+ 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
3860
+ ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
3861
+ 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
3862
+ /afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
3863
+ RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
3864
+ Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
3865
+ j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3866
+ VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
3867
+ AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
3868
+ cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
3869
+ uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
3870
+ Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
3871
+ ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
3872
+ KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
3873
+ 6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
3874
+ UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
3875
+ eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
3876
+ Cp/HuZc=
3877
+ -----END CERTIFICATE-----
3878
+
3879
+ T-TeleSec GlobalRoot Class 3
3880
+ ============================
3881
+ -----BEGIN CERTIFICATE-----
3882
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3883
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3884
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
3885
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3886
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3887
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
3888
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
3889
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
3890
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
3891
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
3892
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
3893
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
3894
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
3895
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
3896
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
3897
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
3898
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
3899
+ -----END CERTIFICATE-----
3900
+
3901
+ EE Certification Centre Root CA
3902
+ ===============================
3903
+ -----BEGIN CERTIFICATE-----
3904
+ MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3905
+ EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
3906
+ dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
3907
+ MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
3908
+ UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
3909
+ ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
3910
+ DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
3911
+ TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
3912
+ rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
3913
+ 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
3914
+ P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
3915
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
3916
+ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
3917
+ BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
3918
+ xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
3919
+ lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
3920
+ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
3921
+ 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
3922
+ dcGWxZ0=
3923
+ -----END CERTIFICATE-----
lib/Elefunds/Configuration/BaseConfiguration.php ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once 'ConfigurationInterface.php';
41
+ require_once dirname(__FILE__) . '/../Exception/ElefundsException.php';
42
+
43
+
44
+ /**
45
+ * Base Configuration for the elefunds API.
46
+ *
47
+ * @package elefunds API PHP Library
48
+ * @subpackage Configuration
49
+ * @author Christian Peters <christian@elefunds.de>
50
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
51
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
52
+ * @link http://www.elefunds.de
53
+ * @since File available since Release 1.0.0
54
+ */
55
+ class Elefunds_Configuration_BaseConfiguration implements Elefunds_Configuration_ConfigurationInterface {
56
+
57
+ /**
58
+ * @var array
59
+ */
60
+ protected $availableShareServices = array();
61
+
62
+ /**
63
+ * @var int
64
+ */
65
+ protected $clientId;
66
+
67
+ /**
68
+ * @var string
69
+ */
70
+ protected $apiKey;
71
+
72
+ /**
73
+ * The calculated hashedKey that is a sha1 value of
74
+ * the clientId concatenated with the api key.
75
+ *
76
+ * @var string
77
+ */
78
+ protected $hashedKey;
79
+
80
+ /**
81
+ * @var Elefunds_Communication_RestInterface
82
+ */
83
+ protected $rest;
84
+
85
+ /**
86
+ * @var string
87
+ */
88
+ protected $apiUrl;
89
+
90
+ /**
91
+ * Class name of the donation implementation.
92
+ *
93
+ * @var string
94
+ */
95
+ protected $donationClassName;
96
+
97
+ /**
98
+ * Class name of the receiver implementation.
99
+ *
100
+ * @var string
101
+ */
102
+ protected $receiverClassName;
103
+
104
+ /**
105
+ * Two digit countrycode to use for calls.
106
+ *
107
+ * @var string
108
+ */
109
+ protected $countrycode = 'en';
110
+
111
+ /**
112
+ * Instance of the facade.
113
+ *
114
+ * @var Elefunds_Facade
115
+ */
116
+ protected $facade;
117
+
118
+ /**
119
+ * @var Elefunds_View_ViewInterface
120
+ */
121
+ protected $view;
122
+
123
+ /**
124
+ * Setup configuration of an elefunds API Plugin.
125
+ *
126
+ * This function gets called after forwarding the configuration to the facade.
127
+ *
128
+ * @return void
129
+ */
130
+ public function init() {}
131
+
132
+ /**
133
+ * An instance of the facade. This is set by the facade itself, so you can access API functionality
134
+ * from within init()!
135
+ *
136
+ * @param Elefunds_Facade $facade
137
+ * @return Elefunds_Configuration_ConfigurationInterface
138
+ */
139
+ public function setFacade(Elefunds_Facade $facade) {
140
+ $this->facade = $facade;
141
+ return $this;
142
+ }
143
+
144
+ /**
145
+ * Sets the view for this configuration.
146
+ *
147
+ * @param Elefunds_View_ViewInterface $view
148
+ * @return Elefunds_Configuration_ConfigurationInterface
149
+ */
150
+ public function setView(Elefunds_View_ViewInterface $view) {
151
+ $this->view = $view;
152
+ return $this;
153
+ }
154
+
155
+ /**
156
+ * Returns the view that is configured for this configuration.
157
+ *
158
+ * @return Elefunds_View_ViewInterface
159
+ */
160
+ public function getView() {
161
+ return $this->view;
162
+ }
163
+
164
+ /**
165
+ * Sets the clientId.
166
+ *
167
+ * @param int $clientId
168
+ * @return Elefunds_Configuration_ConfigurationInterface
169
+ */
170
+ public function setClientId($clientId) {
171
+ $this->clientId = (int)$clientId;
172
+ if ($this->apiKey !== NULL && $this->hashedKey === NULL) {
173
+ $this->hashedKey = sha1($this->clientId . $this->apiKey);
174
+ }
175
+
176
+ return $this;
177
+ }
178
+
179
+ /**
180
+ * Sets the apiKey.
181
+ *
182
+ * @param string $apiKey
183
+ * @return Elefunds_Configuration_ConfigurationInterface
184
+ */
185
+ public function setApiKey($apiKey) {
186
+ $this->apiKey = (string)$apiKey;
187
+ if ($this->clientId !== NULL && $this->hashedKey === NULL) {
188
+ $this->hashedKey = sha1($this->clientId . $this->apiKey);
189
+ }
190
+
191
+ return $this;
192
+ }
193
+
194
+ /**
195
+ * Returns the ClientId.
196
+ *
197
+ * @return int
198
+ */
199
+ public function getClientId() {
200
+ return $this->clientId;
201
+ }
202
+
203
+ /**
204
+ * The API Url.
205
+ *
206
+ * Url is not validated here, as it's dependent on the RestInterface Implementation. For example
207
+ * the curl implementation adds it's error message to the additionalInformation of the ElefundsException.
208
+ *
209
+ * @param string $url
210
+ * @return Elefunds_Configuration_ConfigurationInterface
211
+ */
212
+ public function setApiUrl($url) {
213
+ $this->apiUrl = rtrim((string)$url, '/');
214
+ return $this;
215
+ }
216
+
217
+ /**
218
+ * Returns the URL to the API without trailing slashes.
219
+ *
220
+ * @return string
221
+ */
222
+ public function getApiUrl() {
223
+ return $this->apiUrl;
224
+ }
225
+
226
+ /**
227
+ * Returns the hashed key
228
+ *
229
+ * @throws Elefunds_Exception_ElefundsException if hashedKey has not been calculated
230
+ * @return string
231
+ */
232
+ public function getHashedKey() {
233
+ if ($this->hashedKey === NULL) {
234
+ if ($this->apiKey === NULL || $this->clientId === NULL) {
235
+ throw new Elefunds_Exception_ElefundsException('HashedKey could not been calculated. Make sure that either clientId and apiKey are set.', 1347889008107);
236
+ } else {
237
+ $this->hashedKey = sha1($this->clientId . $this->apiKey);
238
+ }
239
+ }
240
+ return $this->hashedKey;
241
+ }
242
+
243
+ /**
244
+ * The rest implementation to be used to connect to the api.
245
+ *
246
+ * If not changed in the configuration, this will be curl.
247
+ *
248
+ * @param Elefunds_Communication_RestInterface $rest
249
+ * @return Elefunds_Configuration_ConfigurationInterface
250
+ */
251
+ public function setRestImplementation(Elefunds_Communication_RestInterface $rest) {
252
+ $this->rest = $rest;
253
+ return $this;
254
+ }
255
+
256
+ /**
257
+ * Returns the rest implementation to use, by default, it's curl.
258
+ *
259
+ * @return Elefunds_Communication_RestInterface
260
+ */
261
+ public function getRestImplementation() {
262
+ return $this->rest;
263
+ }
264
+
265
+ /**
266
+ * Sets the donation class name a fully qualified string.
267
+ *
268
+ * Attention: Since we do not use autoloading, you have to require_once the class before
269
+ * setting it.
270
+ *
271
+ * @param string $donationClassName
272
+ * @throws Elefunds_Exception_ElefundsException if given class does not exist
273
+ * @return Elefunds_Configuration_ConfigurationInterface
274
+ */
275
+ public function setDonationClassName($donationClassName) {
276
+ if (!class_exists($donationClassName)) {
277
+ throw new Elefunds_Exception_ElefundsException('Class ' . $donationClassName . ' does not exist. Did you called required_once on the file that hosts this class?', 1347893442819);
278
+ }
279
+ $this->donationClassName = (string)$donationClassName;
280
+ return $this;
281
+ }
282
+
283
+ /**
284
+ * Returns the donation class name.
285
+ *
286
+ * @return string
287
+ */
288
+ public function getDonationClassName() {
289
+ return $this->donationClassName;
290
+ }
291
+
292
+ /**
293
+ * Sets the receiver class name a fully qualified string.
294
+ *
295
+ * Attention: Since we do not use auto-loading, you have to require_once the class before
296
+ * setting it.
297
+ *
298
+ * @param string $receiverClassName
299
+ * @throws Elefunds_Exception_ElefundsException if given class does not exist
300
+ * @return Elefunds_Configuration_ConfigurationInterface
301
+ */
302
+ public function setReceiverClassName($receiverClassName) {
303
+ if (!class_exists($receiverClassName)) {
304
+ throw new Elefunds_Exception_ElefundsException('Class ' . $receiverClassName . ' does not exist. Did you called required_once on the file that hosts this class?', 1347893442820);
305
+ }
306
+ $this->receiverClassName = (string)$receiverClassName;
307
+ return $this;
308
+ }
309
+
310
+ /**
311
+ * Returns the receiver class name.
312
+ *
313
+ * @return string
314
+ */
315
+ public function getReceiverClassName() {
316
+ return $this->receiverClassName;
317
+ }
318
+
319
+ /**
320
+ * Sets the countrycode.
321
+ *
322
+ * @param string $countrycode two digit countrycode
323
+ * @throws InvalidArgumentException if given string is not a countrycode
324
+ * @return Elefunds_Configuration_ConfigurationInterface
325
+ */
326
+ public function setCountrycode($countrycode) {
327
+ if (is_string($countrycode) && strlen($countrycode) === 2) {
328
+ $this->countrycode = $countrycode;
329
+ } else {
330
+ throw new InvalidArgumentException('Given countrycode must be a two digit string.', 1347965897);
331
+ }
332
+ return $this;
333
+ }
334
+
335
+ /**
336
+ * Returns the countrycode.
337
+ *
338
+ * @return string
339
+ */
340
+ public function getCountrycode() {
341
+ return $this->countrycode;
342
+ }
343
+
344
+ }
lib/Elefunds/Configuration/ConfigurationInterface.php ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Elefunds Configuration Interface
42
+ *
43
+ * @package elefunds API PHP Library
44
+ * @subpackage Configuration
45
+ * @author Christian Peters <christian@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.0.0
50
+ */
51
+ interface Elefunds_Configuration_ConfigurationInterface {
52
+
53
+ /**
54
+ * Setup configuration of an elefunds API Plugin.
55
+ *
56
+ * This function gets called after forwarding the configuration to the facade.
57
+ *
58
+ * @param Elefunds_Facade
59
+ * @return void
60
+ */
61
+ public function init();
62
+
63
+ /**
64
+ * An instance of the facade. This is set by the facade itself, so you can access API functionality
65
+ * from within init()!
66
+ *
67
+ * @param Elefunds_Facade $facade
68
+ * @return Elefunds_Configuration_ConfigurationInterface
69
+ *
70
+ */
71
+ public function setFacade(Elefunds_Facade $facade);
72
+
73
+ /**
74
+ * Sets the view for this configuration.
75
+ *
76
+ * @param Elefunds_View_ViewInterface $view
77
+ * @return Elefunds_Configuration_ConfigurationInterface
78
+ */
79
+ public function setView(Elefunds_View_ViewInterface $view);
80
+
81
+ /**
82
+ * Returns the view that is configured for this configuration.
83
+ *
84
+ * @return Elefunds_View_ViewInterface
85
+ */
86
+ public function getView();
87
+
88
+ /**
89
+ * Sets the clientId.
90
+ *
91
+ * @param int $clientId
92
+ * @return Elefunds_Configuration_ConfigurationInterface
93
+ */
94
+ public function setClientId($clientId);
95
+
96
+ /**
97
+ * Sets the apiKey.
98
+ *
99
+ * @param string $apiKey
100
+ * @return Elefunds_Configuration_ConfigurationInterface
101
+ */
102
+ public function setApiKey($apiKey);
103
+
104
+ /**
105
+ * Returns the ClientId.
106
+ *
107
+ * @return int
108
+ */
109
+ public function getClientId();
110
+
111
+ /**
112
+ * Sets the countrycode.
113
+ *
114
+ * @param string $countrycode two digit countrycode
115
+ * @throws InvalidArgumentException if given string is not a countrycode
116
+ * @return Elefunds_Configuration_ConfigurationInterface
117
+ */
118
+ public function setCountrycode($countrycode);
119
+
120
+ /**
121
+ * Returns the countrycode.
122
+ *
123
+ * @return string
124
+ */
125
+ public function getCountrycode();
126
+
127
+ /**
128
+ * The API Url.
129
+ *
130
+ * Url is not validated here, as it's dependent on the RestInterface Implementation. For example
131
+ * the curl implementation adds it's error message to the additionalInformation of the ElefundsException.
132
+ *
133
+ * @param string $url
134
+ * @return Elefunds_Configuration_ConfigurationInterface
135
+ */
136
+ public function setApiUrl($url);
137
+
138
+ /**
139
+ * Returns the URL to the API without trailing slashes.
140
+ *
141
+ * @return string
142
+ */
143
+ public function getApiUrl();
144
+
145
+ /**
146
+ * Returns the hashed key
147
+ *
148
+ * @throws Elefunds_Exception_ElefundsException if hashedKey has not been calculated
149
+ * @return string
150
+ */
151
+ public function getHashedKey();
152
+
153
+ /**
154
+ * The rest implementation to be used to connect to the api.
155
+ *
156
+ * If not changed in the configuration, this will be curl.
157
+ *
158
+ * @param Elefunds_Communication_RestInterface $rest
159
+ * @return Elefunds_Configuration_ConfigurationInterface
160
+ */
161
+ public function setRestImplementation(Elefunds_Communication_RestInterface $rest);
162
+
163
+ /**
164
+ * Returns the rest implementation to use, by default, it's curl.
165
+ *
166
+ * @return Elefunds_Communication_RestInterface
167
+ */
168
+ public function getRestImplementation();
169
+
170
+ /**
171
+ * Sets the donation class name a fully qualified string.
172
+ *
173
+ * Attention: Since we do not use autoloading, you have to require_once the class before
174
+ * setting it.
175
+ *
176
+ * @param string $donationClassName
177
+ * @throws Elefunds_Exception_ElefundsException if given class does not exist
178
+ * @return Elefunds_Configuration_ConfigurationInterface
179
+ */
180
+ public function setDonationClassName($donationClassName);
181
+
182
+ /**
183
+ * Returns the donation class name.
184
+ *
185
+ * @return string
186
+ */
187
+ public function getDonationClassName();
188
+
189
+ /**
190
+ * Sets the receiver class name a fully qualified string.
191
+ *
192
+ * Attention: Since we do not use auto-loading, you have to require_once the class before
193
+ * setting it.
194
+ *
195
+ * @param string $receiverClassName
196
+ * @throws Elefunds_Exception_ElefundsException if given class does not exist
197
+ * @return Elefunds_Configuration_ConfigurationInterface
198
+ */
199
+ public function setReceiverClassName($receiverClassName);
200
+
201
+ /**
202
+ * Returns the receiver class name.
203
+ *
204
+ * @return string
205
+ */
206
+ public function getReceiverClassName();
207
+
208
+ }
lib/Elefunds/Configuration/DefaultConfiguration.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/BaseConfiguration.php';
41
+
42
+
43
+ /**
44
+ * Default Configuration for the elefunds API.
45
+ *
46
+ * @package elefunds API PHP Library
47
+ * @subpackage Configuration
48
+ * @author Christian Peters <christian@elefunds.de>
49
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
50
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
51
+ * @link http://www.elefunds.de
52
+ * @since File available since Release 1.0.0
53
+ */
54
+ class Elefunds_Configuration_DefaultConfiguration extends Elefunds_Configuration_BaseConfiguration {
55
+
56
+ protected $apiUrl = 'https://connect.elefunds.de';
57
+
58
+ /**
59
+ * Default configuration settings.
60
+ *
61
+ * The default configuration uses the basic Donation and Receiver implementations that
62
+ * ship with the library, as well as a curl based REST connection.
63
+ *
64
+ * @return void
65
+ */
66
+ public function init() {
67
+ require_once dirname(__FILE__) . '/../Communication/CurlRequest.php';
68
+ $this->setRestImplementation(new Elefunds_Communication_CurlRequest());
69
+
70
+ require_once dirname(__FILE__) . '/../Model/Donation.php';
71
+ $this->setDonationClassName('Elefunds_Model_Donation');
72
+
73
+ require_once dirname(__FILE__) . '/../Model/Receiver.php';
74
+ $this->setReceiverClassName('Elefunds_Model_Receiver');
75
+
76
+ Elefunds_Model_Factory::setReceiverImplementation($this->getReceiverClassName());
77
+ Elefunds_Model_Factory::setDonationImplementation($this->getDonationClassName());
78
+ }
79
+
80
+ }
lib/Elefunds/Documentation/PHPGuideBasics.md ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PHP Guide - Basics
2
+ ==================
3
+
4
+ > If you're not exactly a bookworm, chances are you can get away by referring to the samples in the `Examples` folder, an
5
+ > excellent inline information will be there to assist you as well.
6
+
7
+
8
+ Accounts
9
+ --------
10
+
11
+ > Have you already read the general Getting Started guide in the root Documentation folder of this repository?
12
+
13
+ In order to integrate elefunds into your app, you just need an API key and a Client ID. You can contact us at <hello@elefunds.de> to receive your own authentication keys and get started collecting donations.
14
+ In the meantime you can grab a test account from the `testaccounts.csv` in the root's documentation folder!
15
+
16
+ Let's assume, you choose to use the client ID `1001` with the associated API Key of `ay3456789gg234561234`.
17
+
18
+
19
+ Setup
20
+ -----
21
+
22
+ Create a file named `SampleConfiguration.php` (the name does not really matter), save it in the root folder of the PHP
23
+ Library (next to `Facade.php`) and enter the following lines:
24
+
25
+ <?php
26
+ require_once dirname(__FILE__) . '/Configuration/DefaultConfiguration.php';
27
+
28
+ class Elefunds_SampleConfiguration extends Configuration_DefaultConfiguration {
29
+
30
+ protected $clientId = 1001;
31
+ protected $apiKey = 'ay3456789gg234561234';
32
+
33
+ }
34
+ ?>
35
+
36
+ As you can see, we can get started with very little code. We'll dive into the details later, but at the moment this is all that's needed
37
+ to setup an app. So let's retrieve some receivers.
38
+
39
+ Create a file named `sample.php` within the same folder and add the following lines:
40
+
41
+ <?php
42
+ require_once dirname(__FILE__) . '/Facade.php';
43
+ require_once dirname(__FILE__) . '/SampleConfiguration.php';
44
+
45
+ $facade = new Elefunds_Facade(new Elefunds_SampleConfiguration());
46
+ ?>
47
+
48
+ Now the facade is up, running and connected to the elefunds API. Let's retrieve some charities.
49
+
50
+
51
+ Receivers
52
+ ---------
53
+
54
+ Since elefunds is centered around donations, charities are called receivers - because they *receive* 100% of all made donations.
55
+ Add these (and all upcoming) lines before the closing PHP tag:
56
+
57
+ try {
58
+ $receivers = $facade->getReceivers();
59
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
60
+
61
+ // The API is not available!
62
+ // Kick in fallback or omit the service if you retrieve in real time
63
+ $message = $exception->getMessage();
64
+ }
65
+
66
+ foreach($receivers as $receiver) {
67
+ /** @var Elefunds_Model_ReceiverInterface $receiver */
68
+
69
+ echo '<p data-id="' . $receiver->getId(). '">' . $receiver->getName() . '</p>';
70
+ echo '<img src="' .$receiver->getImage('horizontal', 'medium') . '" alt="' . $receiver->getDescription() .'"/>';
71
+ }
72
+
73
+ This will render a tiny HTML snippet that displays the receiver's name along with a horizontal-aligned, medium sized image.
74
+ Notice that we render the receivers id as a data-attribute and that we use the receivers description for providing an alt-attribute
75
+ for the image tag.
76
+
77
+ > Reminder: The API is really stable and robust, we're talking about best-practices here when we encourage you to watch out
78
+ > for errors.
79
+
80
+ You can use this to create a user-interface for choosing donation receivers. This may be something an administrator does in the backend
81
+ (e.g. when a donation is triggered anytime someone does something, like subscribing to a newsletter).
82
+
83
+ > The library ships with its own templating solution, hence you are not forced to mix everything into a single file. We have a pre-build template
84
+ > for shops with more coming soon.
85
+
86
+
87
+ Donations
88
+ ---------
89
+
90
+ Now that we are able to retrieve receivers, we want to collect donations and send those back to the API. Let's create a donation object now.
91
+
92
+ > All setters in the library are chainable.
93
+
94
+ $donation = $facade->createDonation()
95
+ ->setForeignId(125)
96
+ ->setAmount(25)
97
+ ->setSuggestedAmount(20)
98
+ ->setGrandTotal(1005)
99
+ ->setReceiverIds(array(2, 3))
100
+ ->setAvailableReceiverIds(array(1001, 1002, 1003))
101
+ ->setTime(new DateTime())
102
+ ->setDonator('christian@elefunds.de', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin');
103
+
104
+
105
+ We use the facade to create an instance of the donation. Next, we set some values:
106
+
107
+ - `foreignId` must be an integer. You are free to add whatever you like here but you must be able to match this foreignId
108
+ with the donating process on your site. If you are implementing for a shop, the orderId would be a perfect match.
109
+
110
+ - `amount` you must set the donated amount.
111
+
112
+ - `suggestedAmount` is optional. If your service allows the user to adjust their donation, this value is the amount originally suggested as a donation to the user.
113
+
114
+ - `grand total` is optional. It's the sum of donation plus all invoiced items (like the overall costs of an order). If your service
115
+ does not have something like a grand total at all, just omit this.
116
+
117
+ - `receiverIds` are the ID's of the receivers that are qualified for the donation. The ID is available through `$receivers->getId()`
118
+
119
+ - `availableReceivers` are optional. If your service gives the user the choice to select from a range of receivers, this array should be filled with all receivers that were available to the user. This will greatly help us to improve our service.
120
+
121
+ - `time` is when the donation was made. If you do not send the donation directly after the checkout (e.g. to batch-send them at night),
122
+ please provide the original time when the donation was made.
123
+
124
+ - `donator` is the user that made the donation, you can send the information (optionally) along, when you want to provide donation receipts. In
125
+ that case, elefunds and its foundation will take care of all the paperwork for you.
126
+
127
+ That's it, now just send back the donation:
128
+
129
+ try {
130
+ $responseMessage = $facade->addDonation($donation);
131
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
132
+ $message = $exception->getMessage();
133
+ }
134
+
135
+
136
+ If everything went well, you'll retrieve a status code of `200` and a response message:
137
+
138
+ > 1 of 1 donation(s) have been saved. 0 donation(s) failed the validation. 0 donation(s) failed due to a server problem.
139
+
140
+ If you get an error, simply send the donation again later. If you used the `$facade->addDonations()` method to
141
+ add multiple donations, you can send them all again later as well - if some of them were saved before something went wrong,
142
+ the API is smart enough to sort things out.
143
+
144
+ At this stage, the donation has a status of `pending` in our API. You can set it to completed, once you got your money by just
145
+ sending in the `foreignId`, that you used when adding the donation:
146
+
147
+ // One donation:
148
+ $facade->completeDonation($foreignId);
149
+
150
+ // Multiple donations:
151
+ $facade->completeDonations(array($foreignId, $anotherForeignId));
152
+
153
+ If you have to cancel the donation, you can do so by calling the cancel donation method:
154
+
155
+ // One donation:
156
+ $facade->cancelDonation($foreignId);
157
+
158
+ // Multiple donations:
159
+ $facade->cancelDonations(array($foreignId, $anotherForeignId));
160
+
lib/Elefunds/Documentation/PHPGuideConfiguration.md ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PHP Guide - Configuration
2
+ =========================
3
+
4
+ This SDK ships with a very powerful configuration mechanism. It allows you to setup a basic configuration and switch it at
5
+ runtime.
6
+
7
+ Basics
8
+ ------
9
+
10
+ If you want to implement a custom configuration, it's a good idea to extend the default configuration. Here's an overview:
11
+
12
+ ![overview](http://yuml.me/diagram/scruffy;dir:LR;/class///%20Cool%20Class%20Diagram,%20[note:ConfigurationInterface]-[BaseConfiguration],%20[BaseConfiguration]-%3E[DefaultConfiguration],%20[DefaultConfiguration]-%3E[YourCustomConfiguration] "ConfigurationOverview")
13
+
14
+ - the `ConfigurationInterface` is the core for all configuration files. If you are really unsatisfied with the BaseConfiguration you should drop us a mail - or - feel free to implement your own version as the SDK can handle it.
15
+
16
+ - the `BaseConfiguration` is a reference implementation, that implements algorithms for authentication, separates concerns of other key players and administrates implementations for our models.
17
+
18
+ - the `DefaultConfiguration` sets up a few options that you can use. For example, it sets the REST engine to *curl* and registers vanilla model implementations for receivers and donations.
19
+
20
+ > In most scenario's, you're good to go with the default configuration.
21
+
22
+ > The `DefaultConfiguration` registers it's setting in the `$configuration->init()` method, that is automatically called by the facade
23
+ > after the configuration is initialized. If you have custom logic yourself, this method is a good place for it.
24
+
25
+ Configuring your app is as easy as:
26
+
27
+ <?php
28
+ require_once dirname(__FILE__) . '/Facade.php';
29
+ require_once dirname(__FILE__) . '/Configuration/DefaultConfiguration.php';
30
+
31
+ $configuration = new Configuration_DefaultConfiguration();
32
+ $configuration->setClientId(1001)
33
+ ->setApiKey('ay3456789gg234561234')
34
+ ->setCountrycode('de');
35
+
36
+ $facade = new Elefunds_Facade($configuration);
37
+ ?>
38
+
39
+ Another scenario would be, to implement a class, to extend the DefaultConfiguration:
40
+
41
+ <?php
42
+ require_once dirname(__FILE__) . '/Configuration/DefaultConfiguration.php';
43
+
44
+ class Elefunds_YourCustomConfiguration extends Configuration_DefaultConfiguration {
45
+
46
+ protected $clientId = 1001;
47
+ protected $hashedKey = 'eb85fa24f23b7ade5224a036b39556d65e764653';
48
+ protected $countrycode = 'de';
49
+ }
50
+ ?>
51
+
52
+ Did you noticed, that we did not provide the apiKey, but the already calculated hashedKey? That'll save us some milliseconds,
53
+ as there is no need to calculate it on every request.
54
+
55
+ Advanced
56
+ --------
57
+
58
+ You are free to configure the various files of this SDK yourself. For example, you may want to change the REST engine
59
+ to something different than curl. You'd then need to implement the `RestInterface` in your own engine. This can be configured
60
+ like this:
61
+
62
+ require_once dirname(__FILE__) . '/YourRestEngine.php';
63
+ $configuration->setRestImplementation(new YourRestEngine());
64
+
65
+ The same is true for the Donation and Receiver classes. A common scenario would be to implement the donation or the receiver to
66
+ support a persistence layer.
67
+
68
+ Here's a very basic example for `Doctrine`:
69
+
70
+ <?php
71
+ namespace YourCompany\YourProduct\Entity;
72
+
73
+ use Doctrine\ORM\Mapping as ORM;
74
+
75
+ require_once 'path/to/ElefundsSDK/Model/Donation.php';
76
+
77
+ /**
78
+ * @ORM\Entity
79
+ * @ORM\Table(name="donation")
80
+ */
81
+ class Donation extends Elefunds_Model_Donation
82
+ {
83
+ /**
84
+ * @ORM\Id
85
+ * @ORM\Column(type="integer")
86
+ * @ORM\GeneratedValue(strategy="AUTO")
87
+ */
88
+ protected $id;
89
+
90
+ /**
91
+ * @ORM\Column(type="integer")
92
+ */
93
+ protected $foreignId;
94
+
95
+ /**
96
+ * @ORM\Column(type="integer")
97
+ */
98
+ protected $amount;
99
+
100
+ /**
101
+ * @ORM\Column(type="integer")
102
+ */
103
+ protected $suggestedAmount;
104
+
105
+ /**
106
+ * We have a receiver model as well!
107
+ *
108
+ * @ORM\OneToMany(targetEntity="Receiver", mappedBy="donation")
109
+ */
110
+ protected $receivers;
111
+
112
+ /**
113
+ * @ORM\OneToMany(targetEntity="Receiver", mappedBy="donation")
114
+ */
115
+ protected $availableReceivers;
116
+
117
+ /**
118
+ * @ORM\Column(type="integer")
119
+ */
120
+ protected $grandTotal;
121
+
122
+ /**
123
+ * @ORM\Column(type="datetime")
124
+ */
125
+ protected $time;
126
+ }
127
+ ?>
128
+
129
+ This would get the job done:
130
+
131
+ // Let's assume $facade is already up and running.
132
+ $facade->getConfiguration()->setDonationClassName('YourCompany\YourProduct\Entity\Donation');
133
+
134
+ $donation = $facade->createDonation()->setForeignId(123)
135
+ ->setAmount(50)
136
+ ->addReceiverId(1001)
137
+ ->setAvailableReceiverIds(array(1001, 1002, 1003))
138
+ ->setTime(new DateTime()),
139
+
140
+ // Let's say we use symfony and are in a controller:
141
+ $entityManager = $this->getDoctrine()->getManager();
142
+ $entityManager->persist($donation);
143
+ $entityManager->flush();
144
+
145
+ The same scenario is true for receivers and can be achieved using the `$configuration->setReceiverClassName()` method. If
146
+ you can't use the given models as base classes, you can implement the `DonationInterface` as well as the `ReceiverInterface`.
lib/Elefunds/Documentation/PHPGuideTemplating.md ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PHP Guide - Templating
2
+ ======================
3
+
4
+ The SDK ships with simple, yet efficient templating support. We have a shop template and are working hard to implement
5
+ templates for other applications as well. This guide will walk you through setting up the shop template and give you hints
6
+ on how to implement your own templates.
7
+
8
+ Basics
9
+ ------
10
+
11
+ **Checkout**
12
+
13
+ Using a template is as easy as accessing raw data. But a template gives you some additional configuration options and
14
+ requires you to provide some extra information.
15
+
16
+ The shop example has a configuration like this:
17
+
18
+ <?php
19
+ require_once dirname(__FILE__) . '/Template/Shop/CheckoutConfiguration.php';
20
+
21
+ class Elefunds_Example_ShopExampleConfiguration extends Template_Shop_CheckoutConfiguration {
22
+
23
+ protected $clientId = 1001;
24
+ protected $apiKey = 'ay3456789gg234561234';
25
+
26
+ public function init() {
27
+ parent::init();
28
+
29
+ // Width of the checkout area, ie. how wide you want the plugin to be
30
+ $this->view->assign('shopWidth', 600);
31
+ }
32
+ }
33
+ ?>
34
+
35
+ This is the bare minimum. You can see that we assign values to the view. The view needs the information `shopWidth` to
36
+ know the width of your checkout layout to calculate the size of the plugin. It needs one more information to do it's job: The total sum to round up. Your shop should give the actual total to the view and it will calculate the assumed roundup and format everything in a nice html snippet.
37
+
38
+ So what's left to do:
39
+
40
+ <?php
41
+ require_once dirname(__FILE__) . '/../Facade.php';
42
+ require_once dirname(__FILE__) . '/ShopExampleConfiguration.php';
43
+
44
+ $facade = new Elefunds_Facade();
45
+
46
+ try {
47
+ $facade->setConfiguration(new Elefunds_Example_ShopExampleConfiguration());
48
+ $snippet = $facade->renderTemplate();
49
+ } catch (Elefunds_Exception_ElefundsCommunicationException $error) {
50
+ $snippet = '';
51
+ }
52
+ ?>
53
+
54
+ Nothing else is needed to get you going. `$snippet` will now either include the rendered plugin or an empty string if
55
+ the communication went wrong (the latter is a fallback to not compromise your checkout).
56
+
57
+ In order to have everything in place, you need to add CSS and Javascript snippets. This can be done like this:
58
+
59
+ <!-- +++ HTML Snippet for your head section +++ -->
60
+ <?php foreach($facade->getTemplateCssFiles() as $cssFile): ?>
61
+ <link rel="stylesheet" type="text/css" href="<?php echo $cssFile; ?>">
62
+ <?php endforeach; ?>
63
+ <!-- ^^^ HTML Snippets for your head section ^^^ -->
64
+
65
+ <!-- +++ HTML Snippet for Javascript Files +++ -->
66
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"> </script>
67
+ <?php foreach($facade->getTemplateJavascriptFiles() as $javascript): ?>
68
+ <script type="text/javascript" src="<?php echo $javascript; ?>"></script>
69
+ <?php endforeach; ?>
70
+ <!-- ^^^ HTML Snippet for Javascript Files ^^^ -->
71
+
72
+ > CSS and Javascript path's are always relative to the SDK root (e.g. the same folder as the `Facade`).
73
+
74
+ > We're working on a version, were you can set your javascript library of choice in your configuration.
75
+ > At the moment, this template requires jQuery.
76
+
77
+
78
+ If you use the `ShopConfiguration`, you can easily change the theme!
79
+
80
+ // Let's assume, that the facade is already configured!
81
+ $configuration = $facade->getConfiguration();
82
+
83
+ /** @var Elefunds_Template_Shop_ShopConfiguration $configuration */
84
+ $configuration->getView()
85
+ ->assign('skin'
86
+ array(
87
+ 'theme' => 'light',
88
+ 'color' => 'purple'
89
+ )
90
+ );
91
+
92
+ **Success**
93
+
94
+ When a checkout was successful, you can send back the donation and display our facebook and twitter share. This is as easy as:
95
+
96
+ require_once dirname(__FILE__) . '/../Facade.php';
97
+ require_once dirname(__FILE__) . '/ShopExampleCheckoutSuccessConfiguration.php';
98
+
99
+ $facade = new Elefunds_Facade();
100
+ $facade->setConfiguration(new Elefunds_Example_ShopExampleCheckoutSuccessConfiguration());
101
+
102
+
103
+ $facade->getConfiguration()->getView()->assign('donationReceivers', array(
104
+ 2 => 'UNO',
105
+ 3 => 'Care'
106
+ ));
107
+
108
+ $facade->getConfiguration()->getView()->assign('foreignId', 1234);
109
+ $snippet = $facade->renderTemplate('CheckoutSuccess');
110
+
111
+ Notice that we do not need to create try / catch blocks here, as there are no API calls yet! You have to add the donation
112
+ receivers and your foreignId to the view, as they are needed for the facebook and twitter share. `$snippet` now contains the data for the facebook share.
113
+
114
+ Since the share does not need additionally Javascript files, you're good to go with the following lines:
115
+
116
+ <!-- +++ HTML Snippet for your head section +++ -->
117
+ <?php foreach($facade->getTemplateCssFiles() as $cssFile): ?>
118
+ <link rel="stylesheet" type="text/css" href="<?php echo $cssFile; ?>">
119
+ <?php endforeach; ?>
120
+ <!-- ^^^ HTML Snippets for your head section ^^^ -->
121
+
122
+ > You can configure the Share (like which ones are to display the hover title and much more directly in the init()
123
+ > method of the CheckoutSuccessConfiguration, or - better - override it's values in your extending Configuration
124
+ > file.
125
+
126
+ All that's left to do no now is send us the donation data.
127
+
128
+
129
+ Advanced
130
+ --------
131
+
132
+ You can create your own template as well. It's easy.
133
+
134
+ To get started create a new Folder named `Awesome` below the Template Folder and create a `View.phtml` file in it:
135
+
136
+ <div>
137
+ <p>$view['number']</p>
138
+ </div>
139
+
140
+ > `View` is the default, if you want to name your template differently, you have to add the name as parameter to the
141
+ > `$facade->renderTemplate('YourDifferentName')` method.
142
+
143
+ Create an `AwesomeConfiguration.php` file as well, with the following content:
144
+
145
+ <?php
146
+
147
+ require_once dirname(__FILE__) . '/../../Configuration/DefaultConfiguration.php';
148
+ require_once dirname(__FILE__) . '/../../View/BaseView.php';
149
+
150
+ class Elefunds_Template_Awesome_AwesomeConfiguration extends Configuration_DefaultConfiguration {
151
+
152
+ public function init() {
153
+ parent::init();
154
+
155
+ $this->setView(new Elefunds_View_BaseView());
156
+ $this->view->setTemplate('Awesome');
157
+ $this->view->assign('number', 42);
158
+ }
159
+ }
160
+ ?>
161
+
162
+ If you now pass the AwesomeConfiguration to your facade, you are able to render the template. As you can see, everything
163
+ you assign to the view is accessible in the `$view` Array of your `View.phtml`.
164
+
165
+ But let's do some more tricks!
166
+
167
+ Fire some CSS files and Javascript files in the Folder `Template/Awesome/Css` and `Template/Awesome/Javascript`. You can assign
168
+ them to your template like this (assuming you are inside the configuration's `init()` method):
169
+
170
+ $this->view->addCssFile('awesome.min.css');
171
+ $this->view->addJavascriptFile('awesome.jquery.min.js');
172
+
173
+ > It's a good practise to provide minimized versions of your static files.
174
+
175
+ Lets create a hook to multiply a number by ten.
176
+
177
+ > You can see this trick in action if you are looking at the hooks in the shop template. For example, the suggested roundup gets
178
+ > calculated that way when the total is assigned to the view.
179
+
180
+ Create a file named `AwesomeHooks.php` and save it at `Template/Awesome/Hooks`. Then paste in the following content:
181
+
182
+ <?php
183
+ class Elefunds_Template_Awesome_Hooks_AwesomeHooks {
184
+ public static function mulitplyByTen($view, $number) {
185
+ $view->assign('number', $number * 10);
186
+ }
187
+ }
188
+ ?>
189
+
190
+ Now adjust your Configuration file like this:
191
+
192
+ <?php
193
+ require_once dirname(__FILE__) . '/../../Configuration/DefaultConfiguration.php';
194
+ require_once dirname(__FILE__) . '/../../View/BaseView.php';
195
+ require_once dirname(__FILE__) . '/Hooks/AwesomeHooks.php';
196
+
197
+ class Elefunds_Template_Awesome_AwesomeConfiguration extends Configuration_DefaultConfiguration {
198
+ public function init() {
199
+ parent::init();
200
+
201
+ $this->setView(new Elefunds_View_BaseView());
202
+ $this->view->setTemplate('Awesome');
203
+ $this->view->registerAssignHook('number', 'Elefunds_Template_Awesome_Hooks_AwesomeHooks', 'mulitplyByTen');
204
+ }
205
+ }
206
+ ?>
207
+
208
+ We have omitted the number but added a hook for it. If the number is assigned from the outside, the hook kicks in and adds
209
+ a variable named `numberMultipliedByTen` to the view. If the number is set, it will be available like this:
210
+
211
+ <div>
212
+ <p><?php echo $view['number']; ?></p>
213
+ <p><?php echo $view['numberMultipliedByTen']; ?></p>
214
+ </div>
215
+
216
+ In order for this to work, the number must be set, an example would be:
217
+
218
+ <?php
219
+ require_once 'Facade.php';
220
+ require_once 'Template/Awesome/AwesomeConfiguration.php';
221
+
222
+ $facade = new Elefunds_Facade(new Elefunds_Template_Awesome_AwesomeConfiguration());
223
+ $facade->getConfiguration()->getView()->assign('number', 42);
224
+ echo $facade->renderTemplate();
225
+ ?>
226
+
227
+ If the number is assigned, the multiplied version is assigned as well.
228
+
229
+ > There's a whole lot more to explore. Be sure to check out the shop template to get an in-depth overview on what is
230
+ > possible with this SDK's templating system.
231
+
232
+
233
+
234
+
235
+
lib/Elefunds/Example/RawDataConfiguration.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../Configuration/DefaultConfiguration.php';
41
+
42
+ /**
43
+ * Sample Configuration for the elefunds API.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Example
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Example_RawDataConfiguration extends Elefunds_Configuration_DefaultConfiguration {
54
+
55
+ //Insert your clientID and apiKey
56
+ protected $clientId = 1001;
57
+ protected $apiKey = 'ay3456789gg234561234';
58
+
59
+ protected $countrycode = 'de';
60
+ }
lib/Elefunds/Example/ShopExampleCheckoutSuccessConfiguration.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+
39
+ require_once dirname(__FILE__) . '/../Template/Shop/CheckoutSuccessConfiguration.php';
40
+
41
+ /**
42
+ * Sample Configuration for the elefunds API Shop Template Checkout view.
43
+ *
44
+ * @package elefunds API PHP Library
45
+ * @subpackage Example
46
+ * @author Christian Peters <christian@elefunds.de>
47
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
48
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
49
+ * @link http://www.elefunds.de
50
+ * @since File available since Release 1.0.0
51
+ */
52
+ class Elefunds_Example_ShopExampleCheckoutSuccessConfiguration extends Elefunds_Template_Shop_CheckoutSuccessConfiguration {
53
+
54
+ //Insert your clientID and apiKey
55
+ protected $clientId = 1001;
56
+ protected $apiKey = 'ay3456789gg234561234';
57
+
58
+ protected $countrycode = 'de';
59
+
60
+ /**
61
+ * Assigns the name of the shop.
62
+ *
63
+ * @return void
64
+ */
65
+ public function init() {
66
+ parent::init();
67
+ }
68
+
69
+ }
lib/Elefunds/Example/ShopExampleConfiguration.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../Template/Shop/CheckoutConfiguration.php';
41
+
42
+ /**
43
+ * Sample Configuration for the elefunds API Shop Template.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Example
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Example_ShopExampleConfiguration extends Elefunds_Template_Shop_CheckoutConfiguration {
54
+
55
+ //Insert your clientID and apiKey
56
+ protected $clientId = 1001;
57
+ protected $apiKey = 'ay3456789gg234561234';
58
+
59
+ protected $countrycode = 'de';
60
+
61
+ /**
62
+ * Assigns the shop width and the currency delimiter that should be used for the elefunds module.
63
+ */
64
+ public function init() {
65
+
66
+ parent::init();
67
+
68
+ /** You have to assign some vars here, to calculate the view. */
69
+
70
+ // Width of the checkout area, ie. how wide you want the plugin to be
71
+ $this->view->assign('shopWidth', 900);
72
+
73
+ // These are default Values, you can override this if you have another currency # $this->view->assign('currency', '€'); #
74
+ $this->view->assign('currencyDelimiter', '.');
75
+ }
76
+
77
+ }
lib/Elefunds/Example/rawDataExample.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once dirname(__FILE__) . '/../Facade.php';
4
+ require_once dirname(__FILE__) . '/RawDataConfiguration.php';
5
+
6
+ // Set up API
7
+ $facade = new Elefunds_Facade();
8
+ $facade->setConfiguration(new Example_RawDataConfiguration());
9
+
10
+ /**
11
+ * BASIC ACTIONS
12
+ */
13
+
14
+ // Get receivers
15
+ $receivers = $facade->getReceivers();
16
+ var_dump($receivers);
17
+
18
+ // Send donation
19
+ $response = $facade->addDonations(
20
+
21
+ array(
22
+
23
+ $facade->createDonation()->setForeignId(123)
24
+ ->setAmount(50)
25
+ ->addReceiverId(1001)
26
+ ->setAvailableReceiverIds(array(1001, 1002, 1003))
27
+ ->setTime(new DateTime()),
28
+
29
+ $facade->createDonation()->setForeignId(125)
30
+ ->setAmount(25)
31
+ ->setSuggestedAmount(20)
32
+ ->setGrandTotal(1005)
33
+ ->setReceiverIds(array(1001, 1002))
34
+ ->setAvailableReceiverIds(array(1001, 1002, 1003))
35
+ ->setTime(new DateTime())
36
+ ->setDonator('hello@elefunds.de', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin')
37
+
38
+ )
39
+
40
+ );
41
+
42
+ // Sample server response
43
+ echo('<p>Added: ' . $response . '</p>');
44
+
45
+ // Some users did not pay or an order got canceled? Just delete their donations with the corresponding foreignId
46
+ $response = $facade->cancelDonation(123);
47
+ // Or Multiple
48
+ # $response = $facade->cancelDonations(array(123, 124));
49
+
50
+ // Sample server response
51
+ echo('<p>Deleted: ' . $response . '</p>');
52
+
53
+ // NOTE: Normally you should wrap API calls around try ... catch! Like this:
54
+ try {
55
+ $receivers = $facade->getReceivers();
56
+ } catch (Elefunds_Exception_ElefundsCommunicationException $exception) {
57
+ $message = $exception->getMessage();
58
+ $additionalInformation = $exception->getAdditionalInformation();
59
+ }
60
+
61
+ /**
62
+ * COOL TRICKS
63
+ */
64
+
65
+ // Wanna change language at runtime? Here's an example for TYPO3:
66
+ # $countrycode = $GLOBALS['TSFE']->sys_language_uid === 0 ? 'de' : 'en';
67
+ # $facade->getConfiguration()->setCountrycode($countrycode);
68
+ # $receivers = $facade->getReceivers();
69
+
70
+ // Use the API for different shops and want to switch configuration at will?
71
+ # $configuration = $shop->getId() === 1 ? new MyFirstShopConfiguration() : new MySecondShopConfiguration();
72
+ # $facade->setConfiguration($configuration);
73
+
74
+
75
+ // Wanna switch from curl to some rare php module no one uses?
76
+ // You can opt to push this into your configuration file, but you're free to do it at runtime
77
+
78
+ # require_once('path/to/class/that/implements/our/RestInterface/Implementation.php);
79
+ # $facade->getConfiguration()->setRestImplementation(new Implementation());
80
+
81
+
82
+ // You have three different shops, one on doctrine, one on propel and one on your self build persistence layer?
83
+ // You want to have the donation class be a part of your backend, so it gets auto persisted after retrieving?
84
+ // You want to decide at runtime, which backend to use?
85
+
86
+ // 1. Generate a donation class for your backend and implement the Elefunds_Model_DonationInterface
87
+ // 2. Use the full power of your persistence backend of choice
88
+ // 3. Set the backend at runtime like this (assumes that your shop / framework uses autoloading for the persistence backend)
89
+ // 4. That's it.
90
+
91
+ /*
92
+ switch($persistenceBackend) {
93
+
94
+ case self::DOCTRINCE:
95
+ $facade->getConfiguration()->setDonationClassName('Application\Domain\Model\YourDonationClass');
96
+ break;
97
+
98
+ case self::PROPEL:
99
+ $facade->getConfiguration()->setDonationClassName('Application\Domain\Model\YourOtherDonationClass');
100
+ break;
101
+
102
+ case self::MYCOOLPERSISTENCEBACKEND:
103
+ $facade->getConfiguration()->setDonationClassName('Application\Domain\Model\YourThirdDonationClass');
104
+ break;
105
+
106
+ }
107
+ */
108
+
109
+ // Same is true for Receivers!
110
+
lib/Elefunds/Example/shopExample.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * A sample checkout page
5
+ */
6
+ require_once dirname(__FILE__) . '/../Facade.php';
7
+ require_once dirname(__FILE__) . '/ShopExampleConfiguration.php';
8
+
9
+ try {
10
+ $facade = new Elefunds_Facade();
11
+
12
+ $facade->setConfiguration(new Elefunds_Example_ShopExampleConfiguration());
13
+
14
+ // Assign the total at runtime.
15
+ //
16
+ // Normally this would be coming from the grand total in the checkout process.
17
+ // For our example, we'll hard-code the value.
18
+ $actualTotal = 960;
19
+ $facade->getConfiguration()->getView()->assign('total', $actualTotal);
20
+
21
+ // Define the skin of the module. Currently, the skin is made up of the following
22
+ // theme: 'light', 'dark'
23
+ // color: 'orange', 'blue', 'green', 'purple'
24
+ $facade->getConfiguration()->getView()->assign('skin',
25
+ array(
26
+ 'theme' => 'dark',
27
+ 'color' => 'blue'
28
+ )
29
+ );
30
+
31
+ $snippet = $facade->renderTemplate();
32
+
33
+ } catch (Elefunds_Exception_ElefundsCommunicationException $error) {
34
+
35
+ // If something goes wrong, we do not render anything at all.
36
+ $snippet = '';
37
+ }
38
+
39
+ ?>
40
+
41
+ <!DOCTYPE HTML >
42
+ <html>
43
+ <head>
44
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
45
+ <title>My Shop</title>
46
+ <?php foreach ($facade->getTemplateCssFiles() as $cssFile): ?>
47
+ <link rel="stylesheet" type="text/css" href="../<?php echo $cssFile; ?>">
48
+ <?php endforeach; ?>
49
+ <!-- Be sure to include jQuery as it's required by our JavaScript files -->
50
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
51
+ <style>
52
+ body {
53
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
54
+ }
55
+ </style>
56
+ </head>
57
+ <body>
58
+ <h2>My awesome Shop</h2>
59
+
60
+ <!-- Lets assume the checkout total is 9.60€ -->
61
+ <div style="margin-left: 780px; margin-bottom: 10px; font-weight: bold;">Total:&nbsp;&nbsp;&nbsp;&nbsp;9.60 €</div>
62
+
63
+ <!-- Some other HTML here -->
64
+
65
+ <!--
66
+ This will render the template. If you are using a form, then you will have access to the selected
67
+ receivers automatically, because they are all rendered as input fields, so you have them to your
68
+ service upon your next request.
69
+
70
+ You can opt to override the template in Template/Shop/View.phtml to fit your needs if you have
71
+ another implementation.
72
+ -->
73
+ <?php echo $snippet; ?>
74
+
75
+ <!-- Even more HTML here -->
76
+
77
+ <?php foreach ($facade->getTemplateJavascriptFiles() as $javascript): ?>
78
+ <script type="text/javascript" src="../<?php echo $javascript; ?>"></script>
79
+ <?php endforeach; ?>
80
+ </body>
81
+ </html>
lib/Elefunds/Example/shopExampleCheckoutSuccess.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * A sample successful order page
5
+ */
6
+ require_once dirname(__FILE__) . '/../Facade.php';
7
+ require_once dirname(__FILE__) . '/ShopExampleCheckoutSuccessConfiguration.php';
8
+
9
+ $facade = new Elefunds_Facade();
10
+ $facade->setConfiguration(new Elefunds_Example_ShopExampleCheckoutSuccessConfiguration());
11
+
12
+ // We've prepared this for you: The names of all receivers are given as hidden field
13
+ // in the checkout template and you get the ids of the receivers via the checked fields.
14
+ //
15
+ // Just check which receivers have been checked by the user and assign them here.
16
+ //
17
+ // You can get the id of the receiver from the checkbox input field id
18
+ // Like this: $receiverIds = array_map(function($x) { return (int)$x; }, $params['elefunds_receiver']);
19
+ //
20
+ // We assume, that Care and UNO have been chosen.
21
+ $facade->getConfiguration()->getView()->assign('receivers', array(
22
+ 2 => 'UNO',
23
+ 3 => 'Care'
24
+ ));
25
+
26
+ // Assign current orderId as foreignId
27
+ $facade->getConfiguration()->getView()->assign('foreignId', 1234);
28
+
29
+ // Define the skin of the module. Currently, the skin is made up of the following...
30
+ // theme: 'light', 'dark'
31
+ // color: 'orange', 'blue', 'green', 'purple'
32
+ $facade->getConfiguration()->getView()->assign('skin',
33
+ array(
34
+ 'theme' => 'dark',
35
+ 'color' => 'blue'
36
+ )
37
+ );
38
+
39
+ ?>
40
+
41
+ <!DOCTYPE HTML >
42
+ <html>
43
+ <head>
44
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
45
+ <title>My awesome Shop</title>
46
+ <?php foreach ($facade->getTemplateCssFiles() as $cssFile): ?>
47
+ <link rel="stylesheet" type="text/css" href="../<?php echo $cssFile; ?>">
48
+ <?php endforeach; ?>
49
+ </head>
50
+ <body>
51
+ <h2>My awesome Shop</h2>
52
+
53
+ <!-- Some other HTML here -->
54
+
55
+ <?php echo $facade->renderTemplate('CheckoutSuccess'); ?>
56
+
57
+ <!-- Even more HTML here -->
58
+
59
+ </body>
60
+ </html>
lib/Elefunds/Exception/ElefundsCommunicationException.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Elefunds communication error class.
42
+ *
43
+ * This error is thrown, if something with the API communication went wrong. Errors like this
44
+ * should be caught and handled appropriately.
45
+ *
46
+ * @package elefunds API PHP Library
47
+ * @subpackage Exception
48
+ * @author Christian Peters <christian@elefunds.de>
49
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
50
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
51
+ * @link http://www.elefunds.de
52
+ * @since File available since Release 1.0.0
53
+ */
54
+ class Elefunds_Exception_ElefundsCommunicationException extends Elefunds_Exception_ElefundsException {
55
+
56
+ }
lib/Elefunds/Exception/ElefundsException.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Elefunds custom error class.
42
+ *
43
+ * This error is thrown if anything fatal goes wrong that needs a developer to fix it.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Exception
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Exception_ElefundsException extends Exception {
54
+
55
+ /**
56
+ * An elefunds error.
57
+ *
58
+ * @param string $message The error message
59
+ * @param int $code An integer of the code, defined as the timestamp at the time where the error was defined
60
+ * @param array $additionalInformation
61
+ */
62
+ public function __construct($message, $code = 0, array $additionalInformation=array()) {
63
+
64
+ $this->additionalInformation = $additionalInformation;
65
+ parent::__construct($message, $code);
66
+
67
+ }
68
+
69
+
70
+ /**
71
+ * Add additional information.
72
+ *
73
+ * @param array $additionalInformation
74
+ * @return Elefunds_Exception_ElefundsException
75
+ */
76
+ public function addAdditionalInformation(array $additionalInformation) {
77
+ $this->additionalInformation = array_merge($this->additionalInformation, $additionalInformation);
78
+ return $this;
79
+ }
80
+
81
+
82
+ /**
83
+ * Additional Information
84
+ *
85
+ * Some Exceptions are upgraded with additional information. In this case, refer to
86
+ * the exception message to find out about their nature.
87
+ *
88
+ * @return array
89
+ */
90
+ public function getAdditionalInformation() {
91
+ return $this->additionalInformation;
92
+ }
93
+
94
+ /**
95
+ * Transforms the error to string.
96
+ *
97
+ * All additional information are added if they are of type string.
98
+ *
99
+ * @return string
100
+ */
101
+ public function __toString() {
102
+
103
+ $additionalInformation = '';
104
+
105
+ foreach ($this->additionalInformation as $key => $value) {
106
+ if (is_string($value)) {
107
+ $additionalInformation .= (string)$key . ' = ' . $value . PHP_EOL;
108
+ }
109
+ }
110
+
111
+ $string = __CLASS__ . ' [Errorcode: ' . $this->code . '] : ' . $this->message . PHP_EOL;
112
+
113
+ if (strlen($additionalInformation) > 0) {
114
+ $string .= 'Additional information:' . PHP_EOL . $additionalInformation;
115
+ }
116
+
117
+ return $string;
118
+
119
+ }
120
+ }
lib/Elefunds/Facade.php ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/Model/Factory.php';
41
+
42
+
43
+ /**
44
+ * Elefunds Facade with access to the entire API functionality.
45
+ *
46
+ * @package elefunds API PHP Library
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Facade {
54
+
55
+ /**
56
+ * @var Elefunds_Configuration_ConfigurationInterface
57
+ */
58
+ protected $configuration;
59
+
60
+ /**
61
+ * The cached receivers response - during one process there should only be one call.
62
+ *
63
+ * @var array
64
+ */
65
+ protected $cachedReceivers = array();
66
+
67
+ /**
68
+ * Sets up the facade and initializes configuration (if set).
69
+ *
70
+ * @param Elefunds_Configuration_ConfigurationInterface $configuration
71
+ */
72
+ public function __construct(Elefunds_Configuration_ConfigurationInterface $configuration = NULL) {
73
+ if ($configuration !== NULL) {
74
+ $this->setConfiguration($configuration);
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Returns a brand new donation.
80
+ *
81
+ * @return Elefunds_Model_DonationInterface
82
+ */
83
+ public function createDonation() {
84
+ return Elefunds_Model_Factory::getDonation();
85
+ }
86
+
87
+ /**
88
+ * Returns a brand new Receiver.
89
+ *
90
+ * @return Elefunds_Model_ReceiverInterface
91
+ */
92
+ public function createReceiver() {
93
+ return Elefunds_Model_Factory::getReceiver();
94
+ }
95
+
96
+ /**
97
+ * Sets the configuration.
98
+ *
99
+ * @param Elefunds_Configuration_ConfigurationInterface $configuration
100
+ * @return Elefunds_Facade
101
+ */
102
+ public function setConfiguration(Elefunds_Configuration_ConfigurationInterface $configuration) {
103
+ $this->configuration = $configuration;
104
+ $this->configuration->setFacade($this);
105
+ $this->configuration->init();
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Returns the configuration instance.
111
+ *
112
+ * @return Elefunds_Configuration_ConfigurationInterface
113
+ */
114
+ public function getConfiguration() {
115
+ return $this->configuration;
116
+ }
117
+
118
+ /**
119
+ * Returns the available receivers
120
+ *
121
+ * @throws Elefunds_Exception_ElefundsCommunicationException
122
+ * @return array
123
+ */
124
+ public function getReceivers() {
125
+
126
+ if (count($this->cachedReceivers) === 0) {
127
+ $restUrl = $this->configuration->getApiUrl() . '/receivers/?clientId=' . $this->configuration->getClientId() . '&hashedKey=' . $this->configuration->getHashedKey();
128
+ $rawJson = $this->configuration->getRestImplementation()->get($restUrl);
129
+
130
+ $response = json_decode($rawJson, TRUE);
131
+ $this->cachedReceivers = $response;
132
+ }
133
+
134
+ // Let's get the country specific receivers
135
+ if (!isset($this->cachedReceivers['receivers'][$this->configuration->getCountrycode()])) {
136
+ throw new Elefunds_Exception_ElefundsCommunicationException(
137
+ 'Requested countrycode was not available. Available country codes are: ' . implode(', ', array_keys($response['receivers'])) . '.',
138
+ 1347966301
139
+ );
140
+ }
141
+
142
+ $receivers = array();
143
+
144
+ foreach ($this->cachedReceivers['receivers'][$this->configuration->getCountrycode()] as $rec) {
145
+ $receiver = $this->createReceiver();
146
+ $receivers[] = $receiver->setId($rec['id'])
147
+ ->setName($rec['name'])
148
+ ->setDescription($rec['description'])
149
+ ->setImages($rec['images'])
150
+ ->setValidTime(new DateTime($this->cachedReceivers['meta']['valid']));
151
+ }
152
+
153
+ return $receivers;
154
+ }
155
+
156
+ /**
157
+ * Adds a single Donation to the API.
158
+ *
159
+ * This is just a wrapper for the addDonations method.
160
+ *
161
+ * @param Elefunds_Model_DonationInterface
162
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
163
+ * @return string Message returned from the API
164
+ */
165
+ public function addDonation(Elefunds_Model_DonationInterface $donation) {
166
+ return $this->addDonations(array($donation));
167
+ }
168
+
169
+ /**
170
+ * Cancels a single Donation at the API.
171
+ *
172
+ * This is just a wrapper for the cancelDonations method.
173
+ *
174
+ * @param int $donationId
175
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
176
+ * @return string Message returned from the API
177
+ */
178
+ public function cancelDonation($donationId) {
179
+ return $this->cancelDonations(array($donationId));
180
+ }
181
+
182
+ /**
183
+ * Completes a single Donation in the API.
184
+ *
185
+ * This is just a wrapper for the completeDonations method.
186
+ *
187
+ * @param int $donationId
188
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
189
+ * @return string Message returned from the API
190
+ */
191
+ public function completeDonation($donationId) {
192
+ return $this->completeDonations(array($donationId));
193
+ }
194
+
195
+ /**
196
+ * Sends an array of donations to the API.
197
+ *
198
+ * @param array $donations
199
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
200
+ * @return string Message returned from the API
201
+ */
202
+ public function addDonations(array $donations) {
203
+
204
+ if (count($donations) > 0) {
205
+ $restUrl = $this->configuration->getApiUrl() . '/donations/?clientId=' . $this->configuration->getClientId() . '&hashedKey=' . $this->configuration->getHashedKey();
206
+ $donationsArray = array();
207
+
208
+ foreach ($donations as $donation) {
209
+ $donationsArray[] = $this->mapDonationToArray($donation);
210
+ }
211
+
212
+ $body = json_encode($donationsArray);
213
+
214
+ $response = json_decode($this->configuration->getRestImplementation()->post($restUrl, $body), TRUE);
215
+ return $response['message'];
216
+ } else {
217
+ return 'No donations given.';
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Cancels an array of donation from the API.
223
+ *
224
+ * @param array $donationIds with ids
225
+ *
226
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
227
+ * @return string Message returned from the API
228
+ */
229
+ public function cancelDonations(array $donationIds) {
230
+
231
+ if (count($donationIds) > 0) {
232
+ $donationIds = array_filter($donationIds, create_function('$donationIds', 'return (string)$donationIds;'));
233
+
234
+ $donationIdsString = implode(',', $donationIds);
235
+
236
+ $restUrl = $this->configuration->getApiUrl() . '/donations/' . $donationIdsString . '/?clientId=' . $this->configuration->getClientId() . '&hashedKey=' . $this->configuration->getHashedKey();
237
+
238
+ $response = json_decode($this->configuration->getRestImplementation()->delete($restUrl), TRUE);
239
+ return $response['message'];
240
+ } else {
241
+ return 'No donations given.';
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Completes an array of Donations in the API.
247
+ *
248
+ * @param array $donationIds with ids
249
+ *
250
+ * @throws Elefunds_Exception_ElefundsCommunicationException if connection or authentication fails or retrieved http code is not 200
251
+ * @return string Message returned from the API
252
+ */
253
+ public function completeDonations(array $donationIds) {
254
+
255
+ if (count($donationIds) > 0) {
256
+ $donationIds = array_filter($donationIds, create_function('$donationIds', 'return (string)$donationIds;'));
257
+
258
+ $donationIdsString = implode(',', $donationIds);
259
+
260
+ $restUrl = $this->configuration->getApiUrl() . '/donations/' . $donationIdsString . '/?clientId=' . $this->configuration->getClientId() . '&hashedKey=' . $this->configuration->getHashedKey();
261
+
262
+ $response = json_decode($this->configuration->getRestImplementation()->put($restUrl), TRUE);
263
+
264
+ return $response['message'];
265
+ } else {
266
+ return 'No donations given.';
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Renders the template.
272
+ *
273
+ * @param string $templateName
274
+ * @param bool $givenTemplateNameIsAbsolutePath
275
+ * @throws Elefunds_Exception_ElefundsException
276
+ * @return string The rendered HTML Snippet
277
+ */
278
+ public function renderTemplate($templateName = 'View', $givenTemplateNameIsAbsolutePath = FALSE) {
279
+
280
+ $view = $this->getConfiguration()->getView();
281
+
282
+ if ($view === NULL) {
283
+ throw new Elefunds_Exception_ElefundsException('There is no template set in your configuration file. Please refer to the documentation or use one of the sample templates.', 1348051662593);
284
+ }
285
+
286
+ return $view->render($templateName, $givenTemplateNameIsAbsolutePath);
287
+ }
288
+
289
+ /**
290
+ * Returns the CSS Files required by the template.
291
+ *
292
+ * @throws Elefunds_Exception_ElefundsException if no template is configured
293
+ * @return array with css files (path relative to this library)
294
+ */
295
+ public function getTemplateCssFiles() {
296
+ $view = $this->getConfiguration()->getView();
297
+ if ($view === NULL) {
298
+ throw new Elefunds_Exception_ElefundsException('There is no template set in your configuration file. Please refer to the documentation or use one of the sample templates.', 1348051662593);
299
+ } else {
300
+ return $view->getCssFiles();
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Returns the Javascript Files required by the template.
306
+ *
307
+ * @throws Elefunds_Exception_ElefundsException if no template is configured
308
+ * @return array with javascript files (path relative to this library)
309
+ */
310
+ public function getTemplateJavascriptFiles() {
311
+ $view = $this->getConfiguration()->getView();
312
+ if ($view === NULL) {
313
+ throw new Elefunds_Exception_ElefundsException('There is no template set in your configuration file. Please refer to the documentation or use one of the sample templates.', 1348051662593);
314
+ } else {
315
+ return $view->getJavascriptFiles();
316
+ }
317
+ }
318
+
319
+ /**
320
+ * Maps a Elefunds_Model_DonationInterface to a JSON ready array.
321
+ *
322
+ * @param Elefunds_Model_DonationInterface
323
+ * @throws Elefunds_Exception_ElefundsException if not all information are given that are needed for the API
324
+ * @return array
325
+ */
326
+ protected function mapDonationToArray(Elefunds_Model_DonationInterface $donation) {
327
+
328
+ if ($donation->getForeignId() === NULL || $donation->getTime() === NULL || $donation->getAmount() === NULL || $donation->getReceiverIds() === NULL || $donation->getAvailableReceiverIds() === NULL) {
329
+ throw new Elefunds_Exception_ElefundsException('Given donation does not contain all information needed to be send to the API.', 1347975987321);
330
+ }
331
+
332
+ $donationAsArray = $donation->toArray();
333
+
334
+ if (isset($donationAsArray['donator']) && !isset($donationAsArray['donator']['countryCode'])) {
335
+ $donationAsArray['donator']['countryCode'] = $this->getConfiguration()->getCountrycode();
336
+ }
337
+
338
+ return $donationAsArray;
339
+ }
340
+
341
+ }
lib/Elefunds/Model/Donation.php ADDED
@@ -0,0 +1,427 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once 'DonationInterface.php';
41
+
42
+ /**
43
+ * Elefunds Donation Model
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Model
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Model_Donation implements Elefunds_Model_DonationInterface {
54
+
55
+ /**
56
+ * Order or unique transaction ID
57
+ *
58
+ * @var string
59
+ */
60
+ protected $foreignId;
61
+
62
+ /**
63
+ * The amount that was donated (in Cents)
64
+ *
65
+ * @var int
66
+ */
67
+ protected $amount;
68
+
69
+ /**
70
+ * The amount that was suggested during the checkout (in Cents)
71
+ *
72
+ * @var int
73
+ */
74
+ protected $suggestedAmount;
75
+
76
+ /**
77
+ * Array containing integers of receiver IDs.
78
+ *
79
+ * @var array
80
+ */
81
+ protected $receiverIds = array();
82
+
83
+ /**
84
+ * Array containing integers of all available receivers.
85
+ *
86
+ * @var array
87
+ */
88
+ protected $availableReceiverIds = array();
89
+
90
+ /**
91
+ * Grand total of the order / transaction that is associated with this donation (in Cents)
92
+ *
93
+ * @var int
94
+ */
95
+ protected $grandTotal;
96
+
97
+ /**
98
+ * The time, when the donation was made.
99
+ *
100
+ * @var DateTime
101
+ */
102
+ protected $time;
103
+
104
+ /**
105
+ * Donator information in the following structure
106
+ *
107
+ * <code>
108
+ * array(
109
+ * 'email' => 'hello@elefunds.de',
110
+ * 'firstName' => 'Christian',
111
+ * 'lastName' => 'Peters',
112
+ * 'streetAddress' => 'Schönhauser Allee 124',
113
+ * 'zip' => 10437,
114
+ * 'city' => 'Berlin',
115
+ * 'countryCode' => 'de'
116
+ * );
117
+ * </code>
118
+ *
119
+ * @var array
120
+ */
121
+ protected $donator = array();
122
+
123
+ /**
124
+ * Returns the foreign ID. A unique ID to identify the order or transaction.
125
+ *
126
+ * @return string
127
+ */
128
+ public function getForeignId() {
129
+ return $this->foreignId;
130
+ }
131
+
132
+ /**
133
+ * Sets the foreign ID. A unique ID to identify the order or transaction.
134
+ *
135
+ * @param string $foreignId
136
+ * @throws InvalidArgumentException if type can't be casted to integer
137
+ * @return Elefunds_Model_DonationInterface
138
+ */
139
+ public function setForeignId($foreignId) {
140
+ if (preg_match('/^[A-Za-z0-9_+\-#:.,äüöÄÜÖß]*$/', $foreignId)) {
141
+ $this->foreignId = (string)$foreignId;
142
+ } else {
143
+ throw new InvalidArgumentException('Given foreignId was not of of a type that can be casted to integer.', 1347557226);
144
+ }
145
+
146
+ return $this;
147
+ }
148
+
149
+ /**
150
+ * Returns the donated amount in the smallest unit available in your currency (e.g. cent in EUR or $).
151
+ *
152
+ * @return int
153
+ */
154
+ public function getAmount() {
155
+ return $this->amount;
156
+ }
157
+
158
+ /**
159
+ * Sets the donated amount.
160
+ *
161
+ * @param int $amount
162
+ *
163
+ * @throws InvalidArgumentException
164
+ * @return Elefunds_Model_DonationInterface
165
+ */
166
+ public function setAmount($amount) {
167
+ if (is_int($amount) || ctype_digit($amount)) {
168
+ $this->amount = $amount > 0 ? (int)$amount : 0 ;
169
+ } else {
170
+ throw new InvalidArgumentException('Given amount was not of of a type that can be casted to integer.', 1347557226);
171
+ }
172
+ return $this;
173
+ }
174
+
175
+ /**
176
+ * Returns the amount that was suggested to the customer in the smallest unit available in your currency (e.g. cent in EUR or $).
177
+ *
178
+ * @return int
179
+ */
180
+ public function getSuggestedAmount() {
181
+ return $this->suggestedAmount;
182
+ }
183
+
184
+ /**
185
+ * Sets the time when the donation took place.
186
+ *
187
+ * @param DateTime $time
188
+ * @return Elefunds_Model_DonationInterface
189
+ */
190
+ public function setTime(DateTime $time) {
191
+ $this->time = $time;
192
+ return $this;
193
+ }
194
+
195
+ /**
196
+ * Returns the time when the donation took place.
197
+ *
198
+ * @return DateTime
199
+ */
200
+ public function getTime() {
201
+ return $this->time;
202
+ }
203
+
204
+ /**
205
+ * Sets the amount that was suggested to the customer.
206
+ *
207
+ * @param int $amount
208
+ *
209
+ * @throws InvalidArgumentException
210
+ * @return Elefunds_Model_DonationInterface
211
+ */
212
+ public function setSuggestedAmount($amount) {
213
+ if (is_int($amount) || ctype_digit($amount)) {
214
+ $this->suggestedAmount = $amount > 0 ? (int)$amount : 0 ;
215
+ } else {
216
+ throw new InvalidArgumentException('Given amount was not of of a type that can be casted to integer.', 1347557226);
217
+ }
218
+ return $this;
219
+ }
220
+
221
+ /**
222
+ * Adds a receiverId to the list of receivers who preserve a share of
223
+ * the donation.
224
+ *
225
+ * @param int $receiverId
226
+ * @throws InvalidArgumentException if given id is not a positive integer
227
+ * @return Elefunds_Model_DonationInterface
228
+ */
229
+ public function addReceiverId($receiverId) {
230
+ if (is_int($receiverId) && $receiverId > 0) {
231
+ $this->receiverIds[] = $receiverId;
232
+ } else {
233
+ throw new InvalidArgumentException('Given value must be a positive integer.', 1347721362);
234
+ }
235
+ return $this;
236
+ }
237
+
238
+ /**
239
+ * Set the list of receivers who preserve a share of
240
+ * the donation.
241
+ *
242
+ * @param array $receiverIds array with receiverIds (integers)
243
+ * @throws InvalidArgumentException if given array contains a value that is not a positive integer
244
+ * @return Elefunds_Model_DonationInterface
245
+ */
246
+ public function setReceiverIds(array $receiverIds) {
247
+
248
+ $isValidArray = $receiverIds === array_filter($receiverIds, create_function('$receiverIds', 'return is_int($receiverIds) && $receiverIds > 0;'));
249
+
250
+ if ($isValidArray) {
251
+ $this->receiverIds = $receiverIds;
252
+ } else {
253
+ throw new InvalidArgumentException('Given array may only contain positive integers.', 1347721363);
254
+ }
255
+
256
+ return $this;
257
+
258
+ }
259
+
260
+ /**
261
+ * Returns all receivers who preserve a share of
262
+ * the donation.
263
+ *
264
+ * @return array $receiverIds array with receiverIds (integers)
265
+ */
266
+ public function getReceiverIds() {
267
+ return $this->receiverIds;
268
+ }
269
+
270
+ /**
271
+ * Adds a receiverId to the list of receivers that were available to the customer.
272
+ *
273
+ * @param int $receiverId
274
+ * @throws InvalidArgumentException if given id is not a positive integer
275
+ * @return Elefunds_Model_DonationInterface
276
+ */
277
+ public function addAvailableReceiverId($receiverId) {
278
+ if (is_int($receiverId) && $receiverId > 0) {
279
+ $this->availableReceiverIds[] = $receiverId;
280
+ } else {
281
+ throw new InvalidArgumentException('Given value must be a positive integer.', 1347721366);
282
+ }
283
+ return $this;
284
+ }
285
+
286
+ /**
287
+ * Sets an array of integers to the list of receivers that were available to the customer
288
+ *
289
+ * @param array $receiverIds array with receiverIds (integers)
290
+ * @throws InvalidArgumentException if given array contains a value that is not a positive integer
291
+ * @return Elefunds_Model_DonationInterface
292
+ */
293
+ public function setAvailableReceiverIds(array $receiverIds) {
294
+
295
+ $isValidArray = $receiverIds === array_filter($receiverIds, create_function('$receiverIds', 'return is_int($receiverIds) && $receiverIds > 0;'));
296
+
297
+ if ($isValidArray) {
298
+ $this->availableReceiverIds = $receiverIds;
299
+ } else {
300
+ throw new InvalidArgumentException('Given array may only contain positive integers.', 1347721363);
301
+ }
302
+
303
+ return $this;
304
+
305
+ }
306
+
307
+ /**
308
+ * Returns all receivers that were available to the customer.
309
+ *
310
+ * @return array $receiverIds array with receiverIds (integers)
311
+ */
312
+ public function getAvailableReceiverIds() {
313
+ return $this->availableReceiverIds;
314
+ }
315
+
316
+ /**
317
+ * Returns the overall total of the process that is associated with the donation (in Cents).
318
+ *
319
+ * @return int
320
+ */
321
+ public function getGrandTotal() {
322
+ return $this->grandTotal;
323
+ }
324
+
325
+ /**
326
+ * Sets the overall total of the process that is associated with the donation (in Cents).
327
+ *
328
+ * @param int $grandTotal
329
+ * @throws InvalidArgumentException if type can't be casted to integer
330
+ * @return Elefunds_Model_DonationInterface
331
+ */
332
+ public function setGrandTotal($grandTotal) {
333
+ if (is_int($grandTotal) || ctype_digit($grandTotal)) {
334
+ $this->grandTotal = $grandTotal > 0 ? (int)$grandTotal : 0;
335
+ } else {
336
+ throw new InvalidArgumentException('Given total was not of of a type that can be casted to integer.', 1347557227);
337
+ }
338
+ return $this;
339
+ }
340
+
341
+ /**
342
+ * Sets the donator information.
343
+ *
344
+ * The setting of the donator information is optional, but required if the donator want to get a donation receipt.
345
+ * If needed, all you need to do is to provide these information, everything else is taken care of be the
346
+ * elefunds foundation.
347
+ *
348
+ * @param string $email
349
+ * @param string $firstName
350
+ * @param string $lastName
351
+ * @param string $streetAddress
352
+ * @param int $zip
353
+ * @param string $city
354
+ * @param string $countryCode two digit country code; if not given, the code from your settings will be used
355
+ *
356
+ * @return Elefunds_Model_Donation
357
+ * @throws InvalidArgumentException
358
+ */
359
+ public function setDonator($email, $firstName, $lastName, $streetAddress, $zip, $city, $countryCode = NULL) {
360
+ $validMail = filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE;
361
+
362
+ if ($validMail && is_string($firstName) && is_string($lastName) && is_string($streetAddress) && is_int($zip) && is_string($city)) {
363
+
364
+ $this->donator = array(
365
+ 'email' => $email,
366
+ 'firstName' => $firstName,
367
+ 'lastName' => $lastName,
368
+ 'streetAddress' => $streetAddress,
369
+ 'zip' => $zip,
370
+ 'city' => $city,
371
+ );
372
+
373
+
374
+ if ($countryCode !== NULL && is_string($countryCode) && strlen($countryCode) === 2) {
375
+ $this->donator['countryCode'] = $countryCode;
376
+ }
377
+
378
+ } else {
379
+ throw new InvalidArgumentException('Given donator information are not in the correct format.', 1352721709);
380
+ }
381
+
382
+ return $this;
383
+ }
384
+
385
+ /**
386
+ * Returns the array with donator information.
387
+ *
388
+ * @return array
389
+ */
390
+ public function getDonatorInformation() {
391
+ return $this->donator;
392
+ }
393
+
394
+ /**
395
+ * Returns an associative array with all available information
396
+ * about this donation instance.
397
+ *
398
+ * @return array
399
+ */
400
+ public function toArray() {
401
+
402
+ $donationAsArray = array(
403
+ 'foreignId' => $this->getForeignId(),
404
+ 'donationTimestamp' => $this->getTime()->format(DateTime::ISO8601),
405
+ 'donationAmount' => $this->getAmount(),
406
+ 'receivers' => $this->getReceiverIds(),
407
+ 'receiversAvailable' => $this->getAvailableReceiverIds()
408
+ );
409
+
410
+ // Optional vars
411
+ $donator = $this->getDonatorInformation();
412
+ if (count($donator) > 0) {
413
+ $donationAsArray['donator'] = $donator;
414
+ }
415
+
416
+ if ($this->getGrandTotal() !== NULL) {
417
+ $donationAsArray['grandTotal'] = $this->getGrandTotal();
418
+ }
419
+
420
+ if ($this->getSuggestedAmount() !== NULL) {
421
+ $donationAsArray['donationAmountSuggested'] = $this->getSuggestedAmount();
422
+ }
423
+
424
+ return $donationAsArray;
425
+ }
426
+
427
+ }
lib/Elefunds/Model/DonationInterface.php ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * elefunds Donation Interface
42
+ *
43
+ * @package elefunds API PHP Library
44
+ * @subpackage Model
45
+ * @author Christian Peters <christian@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.0.0
50
+ */
51
+ interface Elefunds_Model_DonationInterface {
52
+
53
+ /**
54
+ * Sets the foreign ID. A unique ID to identify the order or transaction.
55
+ *
56
+ * @param int $foreignId
57
+ * @throws InvalidArgumentException if type can't be casted to integer
58
+ * @return Elefunds_Model_DonationInterface
59
+ */
60
+ public function setForeignId($foreignId);
61
+
62
+ /**
63
+ * Returns the foreign ID. A unique ID to identify the order or transaction.
64
+ *
65
+ * @return int
66
+ */
67
+ public function getForeignId();
68
+
69
+ /**
70
+ * Sets the time when the donation took place.
71
+ *
72
+ * @param DateTime $time
73
+ * @return Elefunds_Model_DonationInterface
74
+ */
75
+ public function setTime(DateTime $time);
76
+
77
+ /**
78
+ * Returns the time when the donation took place.
79
+ *
80
+ * @return DateTime
81
+ */
82
+ public function getTime();
83
+
84
+ /**
85
+ * Sets the donated amount.
86
+ *
87
+ * @param int $amount
88
+ * @return Elefunds_Model_DonationInterface
89
+ */
90
+ public function setAmount($amount);
91
+
92
+ /**
93
+ * Returns the donated amount in the smallest unit available in your currency (e.g. cent in EUR or $).
94
+ *
95
+ * @return int
96
+ */
97
+ public function getAmount();
98
+
99
+ /**
100
+ * Sets the amount that was suggested to the customer.
101
+ *
102
+ * @param int $amount
103
+ * @return Elefunds_Model_DonationInterface
104
+ */
105
+ public function setSuggestedAmount($amount);
106
+
107
+ /**
108
+ * Returns the amount that was suggested to the customer in the smallest unit available in your currency (e.g. cent in EUR or $).
109
+ *
110
+ * @return int
111
+ */
112
+ public function getSuggestedAmount();
113
+
114
+ /**
115
+ * Adds a receiverId to the list of receivers who preserve a share of
116
+ * the donation.
117
+ *
118
+ * @param int $receiverId
119
+ * @throws InvalidArgumentException if given id is not a positive integer
120
+ * @return Elefunds_Model_DonationInterface
121
+ */
122
+ public function addReceiverId($receiverId);
123
+
124
+ /**
125
+ * Set the list of receivers who preserve a share of
126
+ * the donation.
127
+ *
128
+ * @param array $receiverIds array with receiverIds (integers)
129
+ * @throws InvalidArgumentException if given array contains a value that is not a positive integer
130
+ * @return Elefunds_Model_DonationInterface
131
+ */
132
+ public function setReceiverIds(array $receiverIds);
133
+
134
+ /**
135
+ * Returns all receivers who preserve a share of
136
+ * the donation.
137
+ *
138
+ * @return array with receiverIds (integers)
139
+ */
140
+ public function getReceiverIds();
141
+
142
+ /**
143
+ * Adds a receiverId to the list of receivers that were available to the customer.
144
+ *
145
+ * @param int $receiverId
146
+ * @throws InvalidArgumentException if given id is not a positive integer
147
+ * @return Elefunds_Model_DonationInterface
148
+ */
149
+ public function addAvailableReceiverId($receiverId);
150
+
151
+ /**
152
+ * Sets an array of integers to the list of receivers that were available to the customer
153
+ *
154
+ * @param array $receiverIds array with receiverIds (integers)
155
+ * @throws InvalidArgumentException if given array contains a value that is not a positive integer
156
+ * @return Elefunds_Model_DonationInterface
157
+ */
158
+ public function setAvailableReceiverIds(array $receiverIds);
159
+
160
+ /**
161
+ * Returns all receivers that were available to the customer.
162
+ *
163
+ * @return array array with receiverIds (integers)
164
+ */
165
+ public function getAvailableReceiverIds();
166
+
167
+ /**
168
+ * Returns the overall total of the process that is associated with the donation.
169
+ * In the smallest unit available in your currency (e.g. cent in EUR or $).
170
+ *
171
+ * @return int
172
+ */
173
+ public function getGrandTotal();
174
+
175
+ /**
176
+ * Sets the overall total of the process that is associated with the donation.
177
+ *
178
+ * @param int $grandTotal
179
+ * @throws InvalidArgumentException if type can't be casted to integer
180
+ * @return Elefunds_Model_DonationInterface
181
+ */
182
+ public function setGrandTotal($grandTotal);
183
+
184
+ /**
185
+ * Sets the donator information.
186
+ *
187
+ * The setting of the donator information is optional, but required if the donator want to get a donation receipt.
188
+ * If needed, all you need to do is to provide these information, everything else is taken care of be the
189
+ * elefunds foundation.
190
+ *
191
+ * @param string $email
192
+ * @param string $firstName
193
+ * @param string $lastName
194
+ * @param string $streetAddress
195
+ * @param int $zip
196
+ * @param string $city
197
+ * @param string $countryCode two digit country code; if not given, the code from your settings will be used
198
+ *
199
+ * @return Elefunds_Model_Donation
200
+ * @throws InvalidArgumentException
201
+ */
202
+ public function setDonator($email, $firstName, $lastName, $streetAddress, $zip, $city, $countryCode = NULL);
203
+
204
+ /**
205
+ * Returns the array with donator information.
206
+ *
207
+ * @return array
208
+ */
209
+ public function getDonatorInformation();
210
+
211
+ /**
212
+ * Returns an associative array with all available information
213
+ * about this donation instance.
214
+ *
215
+ * @return array
216
+ */
217
+ public function toArray();
218
+
219
+ }
lib/Elefunds/Model/Factory.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once 'ReceiverInterface.php';
41
+
42
+ /**
43
+ * Elefunds Model Factory
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Model
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Model_Factory {
54
+
55
+ /**
56
+ * @var string
57
+ */
58
+ protected static $donationPrototype;
59
+
60
+ /**
61
+ * @var string
62
+ */
63
+ protected static $receiverPrototype;
64
+
65
+ /**
66
+ * Sets the prototype for the implementation.
67
+ *
68
+ * Be sure to require the class, if you opt to use your own implementation.
69
+ *
70
+ * @param string $donation the class name of the implementation.
71
+ * @return void
72
+ */
73
+ public static function setDonationImplementation($donation) {
74
+ self::$donationPrototype = $donation;
75
+ }
76
+
77
+ /**
78
+ * Sets the prototype for the implementation.
79
+ *
80
+ * Be sure to require the class, if you opt to use your own implementation.
81
+ *
82
+ * @param string $receiver the class name of the implementation.
83
+ * @return void
84
+ */
85
+ public static function setReceiverImplementation($receiver) {
86
+ self::$receiverPrototype = $receiver;
87
+ }
88
+
89
+ /**
90
+ * Returns a copy of the provided donation.
91
+ *
92
+ * @throws Elefunds_Exception_ElefundsException if class does not implement the DonationInterface
93
+ * @return Elefunds_Model_DonationInterface
94
+ */
95
+ public static function getDonation() {
96
+ $donationPrototype = new self::$donationPrototype();
97
+ if ($donationPrototype instanceof Elefunds_Model_DonationInterface === FALSE) {
98
+ throw new Elefunds_Exception_ElefundsException(
99
+ 'Given prototype for donation does not implement Elefunds_Model_DonationInterface',
100
+ 1347883795444);
101
+ }
102
+ return $donationPrototype;
103
+ }
104
+
105
+ /**
106
+ * Returns a copy of the provided receiver.
107
+ *
108
+ * @throws Elefunds_Exception_ElefundsException if class does not implement the ReceiverInterface
109
+ * @return Elefunds_Model_ReceiverInterface
110
+ */
111
+ public static function getReceiver() {
112
+ $receiverPrototype = new self::$receiverPrototype();
113
+ if ($receiverPrototype instanceof Elefunds_Model_ReceiverInterface === FALSE) {
114
+ throw new Elefunds_Exception_ElefundsException(
115
+ 'Given prototype for donation does not implement Elefunds_Model_ReceiverInterface',
116
+ 1347883795444);
117
+ }
118
+ return $receiverPrototype;
119
+ }
120
+
121
+ }
122
+
lib/Elefunds/Model/Receiver.php ADDED
@@ -0,0 +1,345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once 'ReceiverInterface.php';
41
+
42
+ /**
43
+ * Elefunds Receiver
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Model
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Model_Receiver implements Elefunds_Model_ReceiverInterface {
54
+
55
+ const IMAGE_ORIENTATION_VERTICAL = 'vertical';
56
+ const IMAGE_ORIENTATION_HORIZONTAL = 'horizontal';
57
+ const IMAGE_SIZE_SMALL = 'small';
58
+ const IMAGE_SIZE_MEDIUM = 'medium';
59
+ const IMAGE_SIZE_LARGE = 'large';
60
+
61
+ /**
62
+ * @var int
63
+ */
64
+ protected $id;
65
+
66
+ /**
67
+ * @var string
68
+ */
69
+ protected $name;
70
+
71
+ /**
72
+ * @var string
73
+ */
74
+ protected $description;
75
+
76
+ /**
77
+ * <code>
78
+ * $images = array(
79
+ * 'vertical' => array(
80
+ * 'small' => 'http://url.of/the/image'
81
+ * 'medium' => 'http://url.of/the/image'
82
+ * 'large' => 'http://url.of/the/image'
83
+ * )
84
+ * 'horizontal' => array(
85
+ * 'small' => 'http://url.of/the/image'
86
+ * 'medium' => 'http://url.of/the/image'
87
+ * 'large' => 'http://url.of/the/image'
88
+ * )
89
+ * )
90
+ * </code>
91
+ *
92
+ * @var array
93
+ */
94
+ protected $images;
95
+
96
+ /**
97
+ * @var DateTime
98
+ */
99
+ protected $validTime;
100
+
101
+ /**
102
+ * Initializes the indices of the images array.
103
+ */
104
+ public function __construct() {
105
+
106
+ $this->images = array(
107
+ 'vertical' => array(
108
+ 'small' => '',
109
+ 'medium' => '',
110
+ 'large' => ''
111
+ ),
112
+ 'horizontal' => array(
113
+ 'small' => '',
114
+ 'medium' => '',
115
+ 'large' => ''
116
+ )
117
+ );
118
+
119
+ }
120
+
121
+ /**
122
+ * Sets the id of the receiver.
123
+ *
124
+ * @param int
125
+ * @throws InvalidArgumentException if given type is not int
126
+ * @return Elefunds_Model_ReceiverInterface
127
+ */
128
+ public function setId($id) {
129
+ if (is_int($id) && $id > 0) {
130
+ $this->id = $id;
131
+ } else {
132
+ throw new InvalidArgumentException('Given value must be a positive integer.', 1347734104);
133
+ }
134
+ return $this;
135
+ }
136
+
137
+
138
+ /**
139
+ * Returns the id of the receiver.
140
+ *
141
+ * @return int
142
+ */
143
+ public function getId() {
144
+ return $this->id;
145
+ }
146
+
147
+ /**
148
+ * Sets the name of the receiver.
149
+ *
150
+ * @param string $name
151
+ * @throws InvalidArgumentException if given type is not string
152
+ * @return Elefunds_Model_ReceiverInterface
153
+ */
154
+ public function setName($name) {
155
+ if (is_string($name)) {
156
+ $this->name = $name;
157
+ } else {
158
+ throw new InvalidArgumentException('Given value must be of type string.', 1347734105);
159
+ }
160
+
161
+ return $this;
162
+ }
163
+
164
+ /**
165
+ * Returns the name the receiver.
166
+ *
167
+ * @return string
168
+ */
169
+ public function getName() {
170
+ return $this->name;
171
+ }
172
+
173
+ /**
174
+ * Sets the description of the receiver.
175
+ *
176
+ * @param string $description
177
+ * @throws InvalidArgumentException if given type is not string
178
+ * @return Elefunds_Model_ReceiverInterface
179
+ */
180
+ public function setDescription($description) {
181
+ if (is_string($description)) {
182
+ $this->description = $description;
183
+ } else {
184
+ throw new InvalidArgumentException('Given value must be of type string.', 1347734105);
185
+ }
186
+
187
+ return $this;
188
+ }
189
+
190
+ /**
191
+ * Returns the description the receiver.
192
+ *
193
+ * @return string
194
+ */
195
+ public function getDescription() {
196
+ return $this->description;
197
+ }
198
+
199
+ /**
200
+ * Adds or overwrites an image to the array.
201
+ *
202
+ * @param string $url Url of the image
203
+ * @param string $orientation must be either 'horizontal' or 'vertical'
204
+ * @param string $size either 'small', 'medium' or 'large'
205
+ * @throws InvalidArgumentException if url, orientation or size are not in correct format#
206
+ * @return Elefunds_Model_ReceiverInterface
207
+ */
208
+ public function addImage($url, $orientation, $size) {
209
+
210
+ // @todo remove once 5.3.3 or higher is supported php version
211
+ // Fix for PHP <= 5.3.2
212
+ // https://bugs.php.net/bug.php?id=51192
213
+ $tempUrl = str_replace('-', '', $url);
214
+
215
+ $validUrl = filter_var($tempUrl, FILTER_VALIDATE_URL) !== FALSE;
216
+
217
+ if ($validUrl && isset($this->images[$orientation]) && isset($this->images[$orientation][$size])) {
218
+ $this->images[$orientation][$size] = $url;
219
+ } else {
220
+ throw new InvalidArgumentException('URL, orientation and size have to be valid. Please refer to documentation for permitted input.', 1347872590);
221
+ }
222
+
223
+ return $this;
224
+ }
225
+
226
+ /**
227
+ * Returns an image.
228
+ *
229
+ * @param string $orientation either 'vertical' or 'horizontal'
230
+ * @param string $size either 'small', 'medium' or 'large'
231
+ * @throws InvalidArgumentException if orientation or size are not in correct format
232
+ * @return string URL to the image
233
+ */
234
+ public function getImage($orientation, $size) {
235
+ if (isset($this->images[$orientation]) && isset($this->images[$orientation][$size])) {
236
+ return $this->images[$orientation][$size];
237
+ } else {
238
+ throw new InvalidArgumentException('Orientation and size have to be valid. Please refer to documentation for permitted input.', 1347872591);
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Sets an array with all images.
244
+ *
245
+ * The structure of the array must be like this:
246
+ *
247
+ * <code>
248
+ * $images = array(
249
+ * 'vertical' => array(
250
+ * 'small' => 'http://url.of/the/image'
251
+ * 'medium' => 'http://url.of/the/image'
252
+ * 'large' => 'http://url.of/the/image'
253
+ * )
254
+ * 'horizontal' => array(
255
+ * 'small' => 'http://url.of/the/image'
256
+ * 'medium' => 'http://url.of/the/image'
257
+ * 'large' => 'http://url.of/the/image'
258
+ * )
259
+ * )
260
+ * </code>
261
+ *
262
+ * @param array $images
263
+ * @throws InvalidArgumentException if array is not of correct structure
264
+ * @return Elefunds_Model_ReceiverInterface
265
+ */
266
+ public function setImages(array $images) {
267
+ foreach ($images as $orientation => $sizes) {
268
+ if (is_array($sizes)) {
269
+ foreach ($sizes as $size => $url) {
270
+ $this->addImage($url, $orientation, $size);
271
+ }
272
+ } else {
273
+ throw new InvalidArgumentException('Array is not of correct multidimensional structure.', 1347873638);
274
+ }
275
+ }
276
+ return $this;
277
+ }
278
+
279
+ /**
280
+ * Returns an array with all images.
281
+ *
282
+ * The structure of the array will be like this:
283
+ *
284
+ * <code>
285
+ * $images = array(
286
+ * 'vertical' => array(
287
+ * 'small' => 'http://url.of/the/image'
288
+ * 'medium' => 'http://url.of/the/image'
289
+ * 'large' => 'http://url.of/the/image'
290
+ * )
291
+ * 'horizontal' => array(
292
+ * 'small' => 'http://url.of/the/image'
293
+ * 'medium' => 'http://url.of/the/image'
294
+ * 'large' => 'http://url.of/the/image'
295
+ * )
296
+ * )
297
+ * </code>
298
+ *
299
+ * @return array
300
+ */
301
+ public function getImages() {
302
+ return $this->images;
303
+ }
304
+
305
+ /**
306
+ * Checks whether the receiver is valid.
307
+ *
308
+ * When you are retrieving the receiver from the API
309
+ * it should always be valid. However, if you are
310
+ * persisting receivers or cache them, you can check
311
+ * if you need to refresh with this method.
312
+ *
313
+ * @return bool
314
+ */
315
+ public function isValid() {
316
+ return new DateTime() < $this->validTime;
317
+ }
318
+
319
+ /**
320
+ * Returns the DateTime on which this receiver
321
+ * expires.
322
+ *
323
+ * @return DateTime
324
+ */
325
+ public function getValidTime() {
326
+ return $this->validTime;
327
+ }
328
+
329
+ /**
330
+ * Setter for the time until which the receiver is
331
+ * valid.
332
+ *
333
+ * @param DateTime $validTime
334
+ *
335
+ * @return Elefunds_Model_ReceiverInterface
336
+ */
337
+ public function setValidTime(DateTime $validTime) {
338
+
339
+ $this->validTime = $validTime;
340
+ return $this;
341
+
342
+ }
343
+
344
+ }
345
+
lib/Elefunds/Model/ReceiverInterface.php ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Elefunds Receiver Interface
42
+ *
43
+ * @package elefunds API PHP Library
44
+ * @subpackage Model
45
+ * @author Christian Peters <christian@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.0.0
50
+ */
51
+ interface Elefunds_Model_ReceiverInterface {
52
+
53
+ /**
54
+ * Sets the ID of the receiver.
55
+ *
56
+ * @param int
57
+ * @throws InvalidArgumentException if given type is not int
58
+ * @return Elefunds_Model_ReceiverInterface
59
+ */
60
+ public function setId($id);
61
+
62
+ /**
63
+ * Returns the ID of the receiver.
64
+ *
65
+ * @return int
66
+ */
67
+ public function getId();
68
+
69
+ /**
70
+ * Sets the name of the receiver.
71
+ *
72
+ * @param string $name
73
+ * @throws InvalidArgumentException if given type is not string
74
+ * @return Elefunds_Model_ReceiverInterface
75
+ */
76
+ public function setName($name);
77
+ /**
78
+ * Returns the name the receiver.
79
+ *
80
+ * @return string
81
+ */
82
+ public function getName();
83
+
84
+ /**
85
+ * Sets the description of the receiver.
86
+ *
87
+ * @param int
88
+ * @throws InvalidArgumentException if given type is not string
89
+ * @return Elefunds_Model_ReceiverInterface
90
+ */
91
+ public function setDescription($description);
92
+
93
+ /**
94
+ * Returns the description the receiver.
95
+ *
96
+ * @return string
97
+ */
98
+ public function getDescription();
99
+
100
+ /**
101
+ * Adds or overwrites an image to the array.
102
+ *
103
+ * @param string $url url of the image
104
+ * @param string $orientation must be either 'horizontal' or 'vertical'
105
+ * @param string $size either 'small', 'medium' or 'large'
106
+ * @throws InvalidArgumentException if url, orientation or size are not in correct format#
107
+ * @return Elefunds_Model_ReceiverInterface
108
+ */
109
+ public function addImage($url, $orientation, $size);
110
+
111
+ /**
112
+ * Returns an image.
113
+ *
114
+ * @param string $orientation either 'vertical' or 'horizontal'
115
+ * @param string $size either 'small', 'medium' or 'large'
116
+ * @throws InvalidArgumentException if orientation or size are not in correct format
117
+ * @return string URL to the image
118
+ */
119
+ public function getImage($orientation, $size);
120
+
121
+ /**
122
+ * Sets an array with all images.
123
+ *
124
+ * The structure of the array must be like this:
125
+ *
126
+ * <code>
127
+ * $images = array(
128
+ * 'vertical' => array(
129
+ * 'small' => 'http://url.of/the/image'
130
+ * 'medium' => 'http://url.of/the/image'
131
+ * 'large' => 'http://url.of/the/image'
132
+ * )
133
+ * 'horizontal' => array(
134
+ * 'small' => 'http://url.of/the/image'
135
+ * 'medium' => 'http://url.of/the/image'
136
+ * 'large' => 'http://url.of/the/image'
137
+ * )
138
+ * )
139
+ * </code>
140
+ *
141
+ * @param array $images
142
+ * @throws InvalidArgumentException if array is not of correct structure
143
+ * @return Elefunds_Model_ReceiverInterface
144
+ */
145
+ public function setImages(array $images);
146
+
147
+ /**
148
+ * Returns an array with all images.
149
+ *
150
+ * The structure of the array will be like this:
151
+ *
152
+ * <code>
153
+ * $images = array(
154
+ * 'vertical' => array(
155
+ * 'small' => 'http://url.of/the/image'
156
+ * 'medium' => 'http://url.of/the/image'
157
+ * 'large' => 'http://url.of/the/image'
158
+ * )
159
+ * 'horizontal' => array(
160
+ * 'small' => 'http://url.of/the/image'
161
+ * 'medium' => 'http://url.of/the/image'
162
+ * 'large' => 'http://url.of/the/image'
163
+ * )
164
+ * )
165
+ * </code>
166
+ *
167
+ * @return array
168
+ */
169
+ public function getImages();
170
+
171
+ /**
172
+ * Checks whether the receiver is valid.
173
+ *
174
+ * When you are retrieving the receiver from the API
175
+ * it should always be valid. However, if you are
176
+ * persisting receivers or cache them, you can check
177
+ * if you need to refresh with this method.
178
+ *
179
+ * @return bool
180
+ */
181
+ public function isValid();
182
+
183
+ /**
184
+ * Returns the DateTime on which this receiver
185
+ * expires.
186
+ *
187
+ * @return DateTime
188
+ */
189
+ public function getValidTime();
190
+
191
+ /**
192
+ * Setter for the time until which the receiver is
193
+ * valid.
194
+ *
195
+ * @param DateTime $validTime
196
+ *
197
+ * @return Elefunds_Model_ReceiverInterface
198
+ */
199
+ public function setValidTime(DateTime $validTime);
200
+
201
+ }
lib/Elefunds/README.md ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ elefunds PHP Client Library 1.2.1
2
+ =================================
3
+
4
+ Welcome to the elefunds PHP Client Library.
5
+
6
+ We put a lot of effort into making your daily work with our elefunds API an ease and loads of fun.
7
+ Therefore we tried to minimize the workload for shop implementers and developers as much as possible
8
+ while offering you all the necessary freedoms to develop your idea just as quick and sustainable as possible.
9
+
10
+ We have been working hard on a finite guide to the API and libraries at hand, and there is already an introduction written in
11
+ `Documentation/PHPGuide.md`, as well as more general information in the root folder of this repository (`/Documentation`)!
12
+
13
+ There's also an excellent inline documentation as well as simple examples (check out the `/Examples`Folder)
14
+ and a clean and structured code base.
15
+
16
+ So please enjoy working with us and never hesitate to call or mail in case of problems, questions or the need for an immediate response.
17
+
18
+ Questions concerning bugtracking, feature requests or suggestions are always welcome!
19
+
20
+ For questions regarding the API or the PHP Client Library, please contact Christian Peters, <christian@elefunds.de>!
21
+
22
+
23
+ Prerequisites
24
+ -------------
25
+
26
+ This PHP Client Library requires PHP 5.3 or higher and should therefore work on every modern and even a bit aged system.
27
+ However, if you want to run the tests, you need PHP 5.3.8 or higher. The tests are mainly for code quality and are not
28
+ needed in a production environment.
29
+
30
+
31
+ What is it about?
32
+ -----------------
33
+
34
+ The API is basically about retrieving donation receivers (e.g. NGOs like Greenpeace, that can receive donations) and -
35
+ if a donation was made - sending back donation data to the API.
36
+
37
+ We have encapsulated the whole process as you can see in `Example/rawDataExample.php`, that handles with the pure
38
+ data that is returned from the API but already abstracts them in plain old php objects.
39
+
40
+ There is as well an example for advanced templating in `Example/shopExample.php`.
41
+
42
+
43
+ Summary
44
+ -------
45
+
46
+ We are sure that this is one small step to revolutionize the way we consume and
47
+ how we take responsibility in our daily life decisions.
48
+ So please enjoy all the good deeds you can enable your customers to and help us change the world.
49
+ We're super excited to see your ideas coming to live with it.
50
+ After all, have fun with this API!
lib/Elefunds/Template/Shop/CheckoutConfiguration.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/ShopConfiguration.php';
41
+ require_once dirname(__FILE__) . '/../../View/BaseView.php';
42
+ require_once dirname(__FILE__) . '/Hooks/ShopHooks.php';
43
+
44
+ /**
45
+ * Checkout Configuration for a shop template.
46
+ *
47
+ * @package elefunds API PHP Library
48
+ * @subpackage Template\Shop
49
+ * @author Christian Peters <christian@elefunds.de>
50
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
51
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
52
+ * @link http://www.elefunds.de
53
+ * @since File available since Release 1.0.0
54
+ */
55
+ class Elefunds_Template_Shop_CheckoutConfiguration extends Elefunds_Template_Shop_ShopConfiguration {
56
+
57
+ /**
58
+ * @var boolean
59
+ */
60
+ protected $autoFetchReceivers = TRUE;
61
+
62
+ /**
63
+ * Sets if receivers are auto fetched from the API.
64
+ *
65
+ * Set this to FALSE if you want to assign the receivers for yourself
66
+ * (for example if you want to use caching).
67
+ *
68
+ * You should then call $this->view->assign('receivers', $receivers) for yourself.
69
+ *
70
+ * @param boolean $autoFetchReceivers
71
+ */
72
+ public function setAutoFetchReceivers($autoFetchReceivers)
73
+ {
74
+ $this->autoFetchReceivers = $autoFetchReceivers;
75
+ }
76
+
77
+ /**
78
+ * Assigns the receivers.
79
+ *
80
+ * @return void
81
+ */
82
+ public function init() {
83
+
84
+ parent::init();
85
+
86
+ // If set to FALSE, no donation receipt if offered.
87
+ // If TRUE you have to adjust T&Cs and send back donator information
88
+ // Refer to the documentation for further information.
89
+ $this->view->assign('offerDonationReceipt', TRUE);
90
+
91
+ if ($this->autoFetchReceivers) {
92
+ $this->view->assign('receivers', $this->facade->getReceivers());
93
+ }
94
+
95
+ // Defaults, you can opt to override this if you like.
96
+ $this->view->assign('currency', '€');
97
+ $this->view->assign('currencyDelimiter', '.');
98
+ $this->view->assign('toolTipPosition', 'top');
99
+
100
+ $this->view->assign('roundSum', 'elefunds_round_sum');
101
+ $this->view->assign('roundSumContainer', 'elefunds_below_container');
102
+
103
+ // L18n
104
+ if ($this->countrycode === 'de') {
105
+ $this->view->assign('elefundsDescription', 'Die elefunds Stiftung gUG leitet Deine Spende zu 100% an die ausgewählten Organisationen weiter.');
106
+ $this->view->assign('slogan', 'Ja, ich möchte mit meinem Einkauf aufrunden und spenden!');
107
+ $this->view->assign('receipt_slogan', 'Ich möchte eine Spendenquittung erhalten.');
108
+ $this->view->assign('roundedSumString', 'Runde Summe');
109
+ } else {
110
+ $this->view->assign('elefundsDescription', 'elefunds is a charitable foundation proceeding 100% of your donation to the charities of your choice.');
111
+ $this->view->assign('slogan', 'Yes, I want to roundup my purchase!');
112
+ $this->view->assign('receipt_slogan', 'I want to receive a donation receipt.');
113
+ $this->view->assign('roundedSumString', 'Round Sum');
114
+ }
115
+
116
+ $this->view->registerAssignHook('shopWidth', 'Elefunds_Template_Shop_Hooks_ShopHooks', 'calculatePadding');
117
+ $this->view->registerAssignHook('total', 'Elefunds_Template_Shop_Hooks_ShopHooks', 'calculateRoundUp');
118
+ }
119
+ }
lib/Elefunds/Template/Shop/CheckoutSuccess.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="elefunds_share">
2
+ <h3><?php echo $view['tellAboutIt']; ?></h3>
3
+ <p><?php echo $view['IDonatedAndWantToTellAboutIt']; ?></p>
4
+ <?php foreach($view['shares'] as $share): ?>
5
+ <a title="<?php echo $share->title ?>" href="<?php echo $share->url; ?>" onclick="return elefunds_share('<?php echo $share->url; ?>', '<?php echo $share->title ?>', <?php echo $share->width; ?>, <?php echo $share->height; ?>)">
6
+ <img src="<?php echo $share->imageUrl; ?>" />
7
+ </a>
8
+ &nbsp;&nbsp;
9
+ <?php endforeach; ?>
10
+ <span><?php echo $view['learnMore']; ?> <a href="http://elefunds.de" target="_blank"><img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_logo_s.png"></a></span>
11
+ </div>
12
+ <script language="javascript" type="text/javascript">
13
+ function elefunds_share(url, title, width, height) {
14
+ var newwindow=window.open(url,title,'left=100,top=50,width='+width+',height='+height);
15
+ if (window.focus) {newwindow.focus()}
16
+ return false;
17
+ }
18
+ </script>
lib/Elefunds/Template/Shop/CheckoutSuccessConfiguration.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/ShopConfiguration.php';
41
+ require_once dirname(__FILE__) . '/../../View/BaseView.php';
42
+ require_once dirname(__FILE__) . '/Hooks/ShopHooks.php';
43
+
44
+ /**
45
+ * Base Configuration for the checkout success configuration of the shop template.
46
+ *
47
+ * @package elefunds API PHP Library
48
+ * @subpackage Template\Shop
49
+ * @author Christian Peters <christian@elefunds.de>
50
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
51
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
52
+ * @link http://www.elefunds.de
53
+ * @since File available since Release 1.0.0
54
+ */
55
+ class Elefunds_Template_Shop_CheckoutSuccessConfiguration extends Elefunds_Template_Shop_ShopConfiguration {
56
+
57
+ /*
58
+ * NOTE:
59
+ *
60
+ * To change this template, instead of modifying this file, do the following:
61
+ *
62
+ * * create a new Folder /Template/MyTemplate
63
+ * * copy View.phtml and CheckoutSuccess.phtml in it (and adjust them)
64
+ * * create a MyTemplateBaseConfiguration class, that extends this class (and adjust it)
65
+ */
66
+
67
+ /**
68
+ * Assigns the basic variables for the shop.
69
+ *
70
+ * @return void
71
+ */
72
+ public function init() {
73
+ parent::init();
74
+
75
+ $this->view->assign('clientId', $this->facade->getConfiguration()->getClientId());
76
+ $this->view->assign('hashedKey', $this->facade->getConfiguration()->getHashedKey());
77
+
78
+ $this->view->assign('availableShareServices', array(
79
+ 'facebook' => array(
80
+ 'image' => 'https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/share_on_facebook.png',
81
+ 'width' => 660,
82
+ 'height' => 350,
83
+ 'title' => $this->countrycode === 'de' ? 'Auf Facebook teilen' : 'Share on facebook'
84
+ ),
85
+ 'twitter' => array(
86
+ 'image' => 'https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/tweet_on_twitter.png',
87
+ 'width' => 620,
88
+ 'height' => 415,
89
+ 'title' => $this->countrycode === 'de' ? 'Auf Twitter tweeten' : 'Tweet on twitter'
90
+ ),
91
+ ));
92
+
93
+ if($this->countrycode === 'de') {
94
+ $this->view->assign('learnMore', 'Erfahre mehr über');
95
+ } else {
96
+ $this->view->assign('learnMore', 'Learn more about');
97
+ }
98
+
99
+ $this->view->assign('shareServices', array('facebook', 'twitter'));
100
+
101
+ // L18n
102
+ if ($this->countrycode === 'de') {
103
+ $this->view->assign('tellAboutIt', 'Juhu! Vielen Dank für Deine Spende.');
104
+ $this->view->assign('IDonatedAndWantToTellAboutIt', 'Teilen kann man nicht nur mit seinem Einkauf, sondern auch mit seinen Freunden.<br />Erzähle Deinen Freunden von elefunds!');
105
+ } else {
106
+ $this->view->assign('tellAboutIt', 'Yay! Thank you for your donation.');
107
+ $this->view->assign('IDonatedAndWantToTellAboutIt', 'If everyone used their change for change we could make the world a better place. Tell your friends about elefunds.');
108
+ }
109
+
110
+ // Hooks
111
+ $this->view->registerAssignHook('receivers', 'Elefunds_Template_Shop_Hooks_ShopHooks', 'onReceiversAdded');
112
+ $this->view->registerAssignHook('foreignId', 'Elefunds_Template_Shop_Hooks_ShopHooks', 'onForeignIdAdded');
113
+ }
114
+
115
+ }
lib/Elefunds/Template/Shop/Css/color.less ADDED
@@ -0,0 +1,2 @@
 
 
1
+ @theme: "light";
2
+ @theme-color: "grey";
lib/Elefunds/Template/Shop/Css/elefunds.less ADDED
@@ -0,0 +1,436 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "elements.less";
2
+ @import "color.less";
3
+
4
+ @cdn-URL: "https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com";
5
+
6
+ @font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
7
+
8
+ @light-border: #8c8f91;
9
+ @dark-border: #3a414a;
10
+
11
+ @light-currency: #2c3238;
12
+ @light-shadow: #C6CFD8;
13
+ @light-input-color: #7f807f;
14
+ @light-input-border: #7f807f;
15
+ @light-label-color: #d0d9d2;
16
+ @light-text-color: #000;
17
+
18
+ @dark-currency: #C6CFD8;
19
+ @dark-shadow: #2c3238;
20
+ @dark-input-color: #c6cfd8;
21
+ @dark-input-border: #2f3439;
22
+ @dark-label-color: #C6CFD8;
23
+ @dark-text-color: #fff;
24
+
25
+ #elefunds_top {
26
+ position: relative;
27
+ background: url('@{cdn-URL}/@{theme}/top_bar.png') repeat-x;
28
+ height: 49px;
29
+
30
+ @border-color: "@{theme}-border";
31
+ border-left: 1px solid @@border-color;
32
+ border-right: 1px solid @@border-color;
33
+ line-height: 1.4;
34
+
35
+ .user-select(none);
36
+
37
+ > div {
38
+ float: right;
39
+ margin-right: 10px;
40
+ }
41
+ }
42
+
43
+ #elefunds_logo {
44
+ position: absolute;
45
+ top: 8px;
46
+ left: 10px;
47
+ }
48
+
49
+ #elefunds_arrow {
50
+ position: relative;
51
+ display: inline-block;
52
+ float: left;
53
+ background: url('@{cdn-URL}/@{theme}/arrow_bg.png') repeat-x;
54
+ height: 49px;
55
+ padding: 0;
56
+ }
57
+
58
+ #elefunds_checkbox {
59
+ position: absolute;
60
+ top: 18px;
61
+ left: 19px;
62
+ width: 18px;
63
+ line-height: normal;
64
+ cursor: pointer;
65
+ opacity: 0;
66
+
67
+ + label {
68
+ font-family: @font-family;
69
+ font-size: 12px;
70
+ font-weight: normal;
71
+ @color: "@{theme}-label-color";
72
+ color: @@color;
73
+ padding: 9px 10px 9px 60px;
74
+ height: 31px;
75
+ margin: 0;
76
+ max-width: 180px;
77
+ float: left;
78
+ cursor: pointer;
79
+ background: url('@{cdn-URL}/@{theme}/@{theme-color}/arrow_off.png') no-repeat;
80
+ }
81
+
82
+ &:checked + label {
83
+ background: url('@{cdn-URL}/@{theme}/@{theme-color}/arrow_on.png') no-repeat;
84
+ }
85
+ }
86
+
87
+ #elefunds_arrow_end {
88
+ width: 14px;
89
+ height: 49px;
90
+ display: inline-block;
91
+ background: url('@{cdn-URL}/@{theme}/arrow_end.png') no-repeat;
92
+ }
93
+
94
+ #elefunds_plus_minus {
95
+ float: left;
96
+ padding: 13px 10px 0 30px;
97
+
98
+ img {
99
+ margin: 0 1px;
100
+ }
101
+ }
102
+
103
+ #elefunds_input_container {
104
+ float: left;
105
+ padding-top: 11px;
106
+ }
107
+
108
+ #elefunds_currency {
109
+ display: inline-block;
110
+ width: auto;
111
+ height: 18px;
112
+ padding: 4px 8px;
113
+ font-family: @font-family;
114
+ font-size: 12px;
115
+ font-weight: normal;
116
+ line-height: 18px;
117
+ text-align: center;
118
+ @color: "@{theme}-currency";
119
+ color: @@color;
120
+
121
+ @shadow: "@{theme}-shadow";
122
+ text-shadow: 0 1px 0 @@shadow;
123
+ background: url('@{cdn-URL}/@{theme}/currency_bg.png') repeat-x;
124
+
125
+ @border: "@{theme}-input-border";
126
+ border: 1px solid @@border;
127
+ border-radius: 3px 0 0 3px;
128
+ margin-right: -1px;
129
+ float: left;
130
+ }
131
+
132
+ #elefunds_input {
133
+ display: inline-block;
134
+ width: 48px;
135
+ height: 18px;
136
+ padding: 4px 2px 4px 0;
137
+ margin: 0;
138
+ vertical-align: middle;
139
+ text-align: center;
140
+ font-family: @font-family;
141
+ font-size: 12px;
142
+ @color: "@{theme}-input-color";
143
+ color: @@color;
144
+
145
+ @shadow: "@{theme}-shadow";
146
+ text-shadow: 0 1px 0 @@shadow;
147
+ background: url('@{cdn-URL}/@{theme}/input_bg.png') repeat-x;
148
+
149
+ @border: "@{theme}-input-border";
150
+ border: 1px solid @@border;
151
+ float: left;
152
+ outline: none;
153
+ }
154
+
155
+ .elefunds_input_active {
156
+ @color: "@{theme}-text-color";
157
+ color: @@color !important;
158
+ }
159
+
160
+ #elefunds_bottom {
161
+ height: 62px;
162
+ border-width: 0 1px 1px;
163
+ border-style: solid;
164
+ border-color: #cfd0d4 #b9bec4;
165
+ line-height: 1.4;
166
+
167
+ .user-select(none);
168
+ }
169
+
170
+ .elefunds_receiver {
171
+ margin: 0;
172
+ text-align: center;
173
+ display: inline-block;
174
+ border-left: 1px solid #a3a6ac;
175
+ background: url('@{cdn-URL}/receiver_off_bg.png') repeat-x;
176
+ float: left;
177
+ position: relative;
178
+
179
+ > label > img {
180
+ vertical-align: middle;
181
+ -webkit-filter: grayscale(1) opacity(0.7);
182
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
183
+ filter: alpha(opacity=50);
184
+ }
185
+
186
+ > input {
187
+ cursor: pointer;
188
+ opacity: 0;
189
+ font-size: 100%;
190
+ margin: 0;
191
+ vertical-align: baseline;
192
+ width: 22px;
193
+ position: absolute;
194
+ top: 25px;
195
+ left: 13px;
196
+ }
197
+
198
+ > input + label {
199
+ height: 42px;
200
+ width: 165px;
201
+ margin: 0;
202
+ cursor: pointer;
203
+ background: url('@{cdn-URL}/checkbox_off.png') 10px 24px no-repeat;
204
+ display: inline-block;
205
+ border-left: 1px solid rgb(246, 246, 246);
206
+ border-left: 1px solid rgba(255, 255, 255, 0.6);
207
+ }
208
+
209
+ > input:checked + label {
210
+ background: url('@{cdn-URL}/checkbox_on.png') 10px 24px no-repeat;
211
+ }
212
+ }
213
+
214
+ #elefunds_bottom > input:first-child + div {
215
+ border-left: 0 !important;
216
+ }
217
+
218
+ .elefunds_receiver_selected {
219
+ background: url('@{cdn-URL}/receiver_on_bg.png') repeat-x;
220
+
221
+ > label > img {
222
+ filter: none;
223
+ -webkit-filter: none;
224
+ -ms-filter: none;
225
+ }
226
+ }
227
+
228
+ #elefunds_below_container {
229
+ font-family: @font-family;
230
+ font-size: 16px;
231
+ margin: 0;
232
+ padding: 15px 0 10px;
233
+ text-align: right;
234
+
235
+ label {
236
+ font-weight: normal;
237
+ }
238
+ }
239
+
240
+ #elefunds_round_sum_container {
241
+ background: url('@{cdn-URL}/elefunds_highlight.png') right top no-repeat;
242
+
243
+ strong {
244
+ font-weight: bold;
245
+ line-height: 1.5em;
246
+ }
247
+
248
+ strong:last-child {
249
+ margin-right: 8px;
250
+ }
251
+ }
252
+
253
+ #elefunds_round_sum {
254
+ display: inline-block;
255
+ width: 65px;
256
+ color: #222;
257
+ }
258
+
259
+ #elefunds_receipt {
260
+ position: relative;
261
+ float: left;
262
+ font-size: 12px;
263
+ color: #333;
264
+ margin: 5px 0 0 15px;
265
+
266
+ .user-select(none);
267
+ }
268
+
269
+ #elefunds_receipt_checkbox {
270
+ position: absolute;
271
+ top: 1px;
272
+ cursor: pointer;
273
+ opacity: 0;
274
+ font-size: 100%;
275
+ margin: 0;
276
+ vertical-align: baseline;
277
+ width: 16px;
278
+
279
+ + label {
280
+ margin: 0;
281
+ cursor: pointer;
282
+ background: url('@{cdn-URL}/receipt_off.png') no-repeat;
283
+ display: inline-block;
284
+ padding-left: 20px;
285
+ }
286
+ }
287
+
288
+
289
+ #elefunds_receipt > input:checked + label {
290
+ background: url('@{cdn-URL}/receipt_on.png') no-repeat;
291
+ }
292
+
293
+ .elefunds_hidden {
294
+ visibility: hidden;
295
+ }
296
+
297
+ /* Social Media Share */
298
+
299
+ #elefunds_share {
300
+ width: 450px;
301
+ padding: 20px 20px 10px;
302
+ background: #f4f4f4;
303
+ border: 4px solid #ccc;
304
+ border-radius: 8px;
305
+ font-family: @font-family;
306
+ text-align: center;
307
+
308
+ > a {
309
+ text-decoration: none;
310
+ }
311
+
312
+ h3 {
313
+ font-weight: bold;
314
+ color: #222;
315
+ margin: 0;
316
+ }
317
+
318
+ p {
319
+ font-size: 14px;
320
+ color: #666;
321
+ margin: 20px 0 10px;
322
+ padding: 10px 10px 20px;
323
+ }
324
+
325
+ span {
326
+ font-style: normal;
327
+ font-size: 11px;
328
+ line-height: 21px;
329
+ margin-top: 6px;
330
+ vertical-align: top;
331
+ display: block;
332
+ }
333
+ }
334
+
335
+ /* TOOLTIPS */
336
+
337
+ #tiptip_content {
338
+ font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
339
+ background: #222;
340
+ background: rgba(0, 0, 0, 0.7);
341
+ padding: 3px;
342
+ overflow: hidden;
343
+ width: 260px;
344
+
345
+ .rounded(6px);
346
+ .drop-shadow(0, 3px, 7px, 0.3);
347
+ }
348
+
349
+ #tiptip_title {
350
+ background-color: #f5f5f5;
351
+ padding: 10px 15px 8px;
352
+ color: #222;
353
+ font-size: 18px;
354
+ line-height: 1;
355
+ text-align: center;
356
+ font-weight: bold;
357
+
358
+ .border-radius(3px, 3px, 0, 0);
359
+
360
+ border-bottom: 1px solid #eee;
361
+ margin: 0;
362
+ }
363
+
364
+ #tiptip_inner {
365
+ font-size: 12px;
366
+ color: #222;
367
+ background-color: #fff;
368
+ padding: 14px;
369
+
370
+ .border-radius(0, 0, 3px, 3px);
371
+
372
+ -webkit-background-clip: padding-box;
373
+ -moz-background-clip: padding-box;
374
+ background-clip: padding-box;
375
+ }
376
+
377
+ #tiptip_holder {
378
+ display: none;
379
+ position: absolute;
380
+ top: 0;
381
+ left: 0;
382
+ z-index: 99999;
383
+ }
384
+
385
+ #tiptip_holder.tip_top {
386
+ margin-bottom: 5px;
387
+ }
388
+
389
+ #tiptip_holder.tip_left {
390
+ margin-right: 5px;
391
+ }
392
+
393
+ #tiptip_holder.tip_right {
394
+ margin-left: 5px;
395
+ }
396
+
397
+ #tiptip_holder.tip_bottom {
398
+ margin-top: 5px;
399
+ }
400
+
401
+ #tiptip_arrow, #tiptip_arrow_inner {
402
+ position: absolute;
403
+ border-color: transparent;
404
+ border-style: solid;
405
+ border-width: 6px;
406
+ height: 0;
407
+ width: 0;
408
+ }
409
+
410
+ #tiptip_holder.tip_top #tiptip_arrow_inner {
411
+ margin-top: -7px;
412
+ margin-left: -6px;
413
+ border-top-color: rgb(25,25,25);
414
+ border-top-color: rgba(25, 25, 25, 0.92);
415
+ }
416
+
417
+ #tiptip_holder.tip_right #tiptip_arrow_inner {
418
+ margin-top: -6px;
419
+ margin-left: -5px;
420
+ border-right-color: rgb(25,25,25);
421
+ border-right-color: rgba(25, 25, 25, 0.92);
422
+ }
423
+
424
+ #tiptip_holder.tip_bottom #tiptip_arrow_inner {
425
+ margin-top: -5px;
426
+ margin-left: -6px;
427
+ border-bottom-color: rgb(25,25,25);
428
+ border-bottom-color: rgba(25, 25, 25, 0.92);
429
+ }
430
+
431
+ #tiptip_holder.tip_left #tiptip_arrow_inner {
432
+ margin-top: -6px;
433
+ margin-left: -7px;
434
+ border-left-color: rgb(25,25,25);
435
+ border-left-color: rgba(25, 25, 25, 0.92);
436
+ }
lib/Elefunds/Template/Shop/Css/elefunds_dark_blue.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/blue/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/blue/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_dark_green.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/green/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/green/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_dark_grey.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/grey/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/grey/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_dark_orange.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/orange/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/orange/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_dark_purple.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/purple/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/purple/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_light_blue.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/blue/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/blue/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_light_green.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/green/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/green/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_light_grey.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/grey/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/grey/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_light_orange.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elefunds_light_purple.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/purple/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/purple/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
lib/Elefunds/Template/Shop/Css/elements.less ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*---------------------------------------------------
2
+ LESS Elements 0.9
3
+ ---------------------------------------------------
4
+ A set of useful LESS mixins
5
+ More info at: http://lesselements.com
6
+ ---------------------------------------------------*/
7
+
8
+ .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
9
+ background: @color;
10
+ background: -webkit-gradient(linear,
11
+ left bottom,
12
+ left top,
13
+ color-stop(0, @start),
14
+ color-stop(1, @stop));
15
+ background: -ms-linear-gradient(bottom,
16
+ @start,
17
+ @stop);
18
+ background: -moz-linear-gradient(center bottom,
19
+ @start 0%,
20
+ @stop 100%);
21
+ background: -o-linear-gradient(@stop,
22
+ @start);
23
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@stop,@start));
24
+ }
25
+ .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
26
+ background: @color;
27
+ background: -webkit-gradient(linear,
28
+ left bottom,
29
+ left top,
30
+ color-stop(0, rgb(@start,@start,@start)),
31
+ color-stop(1, rgb(@stop,@stop,@stop)));
32
+ background: -ms-linear-gradient(bottom,
33
+ rgb(@start,@start,@start) 0%,
34
+ rgb(@stop,@stop,@stop) 100%);
35
+ background: -moz-linear-gradient(center bottom,
36
+ rgb(@start,@start,@start) 0%,
37
+ rgb(@stop,@stop,@stop) 100%);
38
+ background: -o-linear-gradient(rgb(@stop,@stop,@stop),
39
+ rgb(@start,@start,@start));
40
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",rgb(@stop,@stop,@stop),rgb(@start,@start,@start)));
41
+ }
42
+ .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43
+ border-top: solid 1px @top-color;
44
+ border-left: solid 1px @left-color;
45
+ border-right: solid 1px @right-color;
46
+ border-bottom: solid 1px @bottom-color;
47
+ }
48
+ .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49
+ -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50
+ -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51
+ box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52
+ }
53
+ .rounded(@radius: 2px) {
54
+ -webkit-border-radius: @radius;
55
+ -moz-border-radius: @radius;
56
+ border-radius: @radius;
57
+ }
58
+ .border-radius(@topleft: 0, @topright: 0, @bottomright: 0, @bottomleft: 0) {
59
+ -webkit-border-top-left-radius: @topleft;
60
+ -webkit-border-top-right-radius: @topright;
61
+ -webkit-border-bottom-right-radius: @bottomright;
62
+ -webkit-border-bottom-left-radius: @bottomleft;
63
+ -moz-border-radius-topleft: @topleft;
64
+ -moz-border-radius-topright: @topright;
65
+ -moz-border-radius-bottomright: @bottomright;
66
+ -moz-border-radius-bottomleft: @bottomleft;
67
+ border-top-left-radius: @topleft;
68
+ border-top-right-radius: @topright;
69
+ border-bottom-right-radius: @bottomright;
70
+ border-bottom-left-radius: @bottomleft;
71
+ .background-clip(padding-box);
72
+ }
73
+ .opacity(@opacity: 0.5) {
74
+ -moz-opacity: @opacity;
75
+ -khtml-opacity: @opacity;
76
+ -webkit-opacity: @opacity;
77
+ opacity: @opacity;
78
+ @opperc: @opacity * 100;
79
+ -ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=@{opperc})";
80
+ filter: ~"alpha(opacity=@{opperc})";
81
+ }
82
+ .transition-duration(@duration: 0.2s) {
83
+ -moz-transition-duration: @duration;
84
+ -webkit-transition-duration: @duration;
85
+ -o-transition-duration: @duration;
86
+ transition-duration: @duration;
87
+ }
88
+ .transform(...) {
89
+ -webkit-transform: @arguments;
90
+ -moz-transform: @arguments;
91
+ -o-transform: @arguments;
92
+ -ms-transform: @arguments;
93
+ transform: @arguments;
94
+ }
95
+ .rotation(@deg:5deg){
96
+ .transform(rotate(@deg));
97
+ }
98
+ .scale(@ratio:1.5){
99
+ .transform(scale(@ratio));
100
+ }
101
+ .transition(@duration:0.2s, @ease:ease-out) {
102
+ -webkit-transition: all @duration @ease;
103
+ -moz-transition: all @duration @ease;
104
+ -o-transition: all @duration @ease;
105
+ transition: all @duration @ease;
106
+ }
107
+ .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
108
+ -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
109
+ -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
110
+ box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
111
+ }
112
+ .box-shadow(@arguments) {
113
+ -webkit-box-shadow: @arguments;
114
+ -moz-box-shadow: @arguments;
115
+ box-shadow: @arguments;
116
+ }
117
+ .box-sizing(@sizing: border-box) {
118
+ -ms-box-sizing: @sizing;
119
+ -moz-box-sizing: @sizing;
120
+ -webkit-box-sizing: @sizing;
121
+ box-sizing: @sizing;
122
+ }
123
+ .user-select(@argument: none) {
124
+ -webkit-user-select: @argument;
125
+ -moz-user-select: @argument;
126
+ -ms-user-select: @argument;
127
+ user-select: @argument;
128
+ }
129
+ .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
130
+ -moz-column-width: @colwidth;
131
+ -moz-column-count: @colcount;
132
+ -moz-column-gap: @colgap;
133
+ -moz-column-rule-color: @columnRuleColor;
134
+ -moz-column-rule-style: @columnRuleStyle;
135
+ -moz-column-rule-width: @columnRuleWidth;
136
+ -webkit-column-width: @colwidth;
137
+ -webkit-column-count: @colcount;
138
+ -webkit-column-gap: @colgap;
139
+ -webkit-column-rule-color: @columnRuleColor;
140
+ -webkit-column-rule-style: @columnRuleStyle;
141
+ -webkit-column-rule-width: @columnRuleWidth;
142
+ column-width: @colwidth;
143
+ column-count: @colcount;
144
+ column-gap: @colgap;
145
+ column-rule-color: @columnRuleColor;
146
+ column-rule-style: @columnRuleStyle;
147
+ column-rule-width: @columnRuleWidth;
148
+ }
149
+ .translate(@x:0, @y:0) {
150
+ .transform(translate(@x, @y));
151
+ }
152
+ .background-clip(@argument: padding-box) {
153
+ -moz-background-clip: @argument;
154
+ -webkit-background-clip: @argument;
155
+ background-clip: @argument;
156
+ }
lib/Elefunds/Template/Shop/Helper/RequestHelper.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Helper for request verification.
42
+ *
43
+ * @package elefunds API PHP Library
44
+ * @subpackage Template\Shop
45
+ * @author Christian Peters <christian@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.2.1
50
+ */
51
+
52
+ class Elefunds_Template_Shop_Helper_RequestHelper {
53
+
54
+ protected $request;
55
+
56
+ /**
57
+ * Accepts the request as array.
58
+ *
59
+ * @param array $request
60
+ */
61
+ public function __construct(array $request = array()) {
62
+ $this->request = $request;
63
+ }
64
+
65
+ public function setRequest(array $request) {
66
+ $this->request = $request;
67
+ }
68
+
69
+ /**
70
+ * Checks if the given request contains the basic information for the elefunds module and checks
71
+ * if the module is active. The module is active and valid if the following parameters are set:
72
+ *
73
+ * elefunds_agree: if the module is checked
74
+ * elefunds_donation_cent: the donation amount in cent
75
+ * elefunds_receivers[]: list of receivers the donation goes to
76
+ * elefunds_receivers: alternative - comma separated list of receivers as a string (in case the value is read from a hidden field)
77
+ *
78
+ * @return bool
79
+ */
80
+ public function isActiveAndValid() {
81
+
82
+ $agreedToElefunds = isset($this->request['elefunds_agree']) && $this->request['elefunds_agree'] !== 'false';
83
+ $hasDonation = isset($this->request['elefunds_donation_cent']) && ctype_digit($this->request['elefunds_donation_cent']) && $this->request['elefunds_donation_cent'] > 0;
84
+ $hasValidReceivers = FALSE;
85
+
86
+ if (isset($this->request['elefunds_receivers'])) {
87
+ if (is_array($this->request['elefunds_receivers'])) {
88
+ $hasValidReceivers = count($this->request['elefunds_receivers']) > 0;
89
+ } else {
90
+ $hasValidReceivers = $this->request['elefunds_receivers'] !== '';
91
+ }
92
+ }
93
+
94
+ return $agreedToElefunds && $hasDonation && $hasValidReceivers;
95
+ }
96
+
97
+ /**
98
+ * Returns the roundup of the request.
99
+ *
100
+ * @return int
101
+ */
102
+ public function getRoundUp() {
103
+ return (int)$this->request['elefunds_donation_cent'];
104
+ }
105
+
106
+ /**
107
+ * Returns the roundup as float.
108
+ *
109
+ * @return float
110
+ */
111
+ public function getRoundUpAsFloat() {
112
+ return number_format($this->getRoundUp() / 100, 2);
113
+ }
114
+
115
+ /**
116
+ * Returns the receivers id's of the request, mapped to int.
117
+ *
118
+ * @return array
119
+ */
120
+ public function getReceiverIds() {
121
+ if (is_array($this->request['elefunds_receivers'])) {
122
+ return array_map(function($x) { return (int)$x; }, $this->request['elefunds_receivers']);
123
+ } else {
124
+ return array_map(function($x) { return (int)$x; }, explode(',', $this->request['elefunds_receivers']));
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Returns the suggested roundup in Cent as integer.
130
+ *
131
+ * @return int
132
+ */
133
+ public function getSuggestedRoundUp() {
134
+ if (isset($this->request['elefunds_suggested_round_up_cent']) && ctype_digit($this->request['elefunds_suggested_round_up_cent'])) {
135
+ return (int)$this->request['elefunds_suggested_round_up_cent'];
136
+ }
137
+ return 0;
138
+ }
139
+
140
+ /**
141
+ * Returns true if the customer requested a donation receipt.
142
+ *
143
+ * @return bool
144
+ */
145
+ public function isDonationReceiptRequested() {
146
+ return isset($this->request['elefunds_receipt']) && $this->request['elefunds_receipt'] !== 'false';
147
+ }
148
+
149
+ }
lib/Elefunds/Template/Shop/Hooks/ShopHooks.php ADDED
@@ -0,0 +1,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ /**
41
+ * Hooks for the shop template.
42
+ *
43
+ * @package elefunds API PHP Library
44
+ * @subpackage Template\Shop
45
+ * @author Christian Peters <christian@elefunds.de>
46
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
47
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
48
+ * @link http://www.elefunds.de
49
+ * @since File available since Release 1.0.0
50
+ */
51
+ class Elefunds_Template_Shop_Hooks_ShopHooks {
52
+
53
+ private static $foreignId;
54
+ private static $receiverIds;
55
+
56
+ /**
57
+ * Calculates the suggested roundup to be displayed in the shop.
58
+ *
59
+ * @param Elefunds_View_ViewInterface $view
60
+ * @param int $total in the smallest unit of currency
61
+ * @return void
62
+ */
63
+ public static function calculateRoundup(Elefunds_View_ViewInterface $view, $total) {
64
+
65
+ //Convert to float
66
+ $total = round(($total / 100), 2);
67
+
68
+ //Checkout total price tiers
69
+ $tiers = array(16, 100, 1000, 999999);
70
+
71
+ //Percentage of checkout total
72
+ $percent = array(0.10, 0.06, 0.04, 0.03);
73
+
74
+ //Round to the nearest "round sum"
75
+ $roundup = array(2, 5, 10, 20);
76
+
77
+ //Default tier
78
+ $tier = count($tiers)-1;
79
+
80
+ //Determine checkout price tier
81
+ foreach($tiers as $key => $value) {
82
+ if ($total < $value) {
83
+ $tier = $key;
84
+ break;
85
+ }
86
+ }
87
+
88
+ //Percentage of the checkout total...
89
+ $donationSuggestion = $total * $percent[$tier];
90
+
91
+ //Round up total sum, rounded to the nearest $roundup...
92
+ $roundTotal = ceil(($total + $donationSuggestion) / $roundup[$tier]) * $roundup[$tier];
93
+
94
+ //Donation suggestion is the difference between the round total and the checkout total
95
+ $donationSuggestion = $roundTotal - $total;
96
+
97
+ //In case the suggestion is higher than the nearest $roundup, we subtract the nearest $roundup
98
+ //and adjust the $roundTotal
99
+
100
+ if ($donationSuggestion > $roundup[$tier] && $tier < count($tiers)-2) {
101
+ $donationSuggestion -= $roundup[$tier];
102
+ }
103
+
104
+ //Round the donationSuggestion to eliminate float bugs
105
+
106
+ $assigns = $view->getAssignments();
107
+ $suggestedDonationAmount = round($donationSuggestion, 2);
108
+ $donationAmountString = number_format($suggestedDonationAmount, 2, $assigns['currencyDelimiter'], '');
109
+ $roundedSum = number_format(($suggestedDonationAmount + $total), 2, $assigns['currencyDelimiter'], '');
110
+
111
+ $view->assign('suggestedDonationAmountCent', $suggestedDonationAmount * 100);
112
+ $view->assign('suggestedDonationAmount', $donationAmountString);
113
+ $view->assign('roundedSum', $roundedSum);
114
+ $view->assign('currencyDelimiter', $assigns['currencyDelimiter']);
115
+
116
+ }
117
+
118
+ /**
119
+ * Calculates number of providers displayed and their sizes
120
+ *
121
+ * @param Elefunds_View_ViewInterface $view
122
+ * @param int $width
123
+ * @return void
124
+ */
125
+ public static function calculatePadding(Elefunds_View_ViewInterface $view, $width) {
126
+
127
+ if ($width < 632) {
128
+ $width = 632;
129
+ }
130
+
131
+ $width = $width - 2;
132
+
133
+ // Max number of receivers that can be displayed
134
+ $receiversCount = (int) floor($width / 210);
135
+
136
+ // Adjust receivers & override assignments
137
+ $assigns = $view->getAssignments();
138
+
139
+ // If we have less receivers assigned than space available, reduce the count
140
+ if (count($assigns['receivers']) < $receiversCount) {
141
+ $receiversCount = count($assigns['receivers']);
142
+ }
143
+
144
+ $receivers = array_slice($assigns['receivers'], 0, $receiversCount);
145
+ $view->assign('receivers', $receivers);
146
+
147
+ if ($width % 210 == 0) {
148
+ $paddingLeft = 8;
149
+ } else {
150
+ $paddingLeft = 9;
151
+ }
152
+
153
+ $paddingRight = 0;
154
+
155
+ //subtract the borders between the buttons
156
+ $padding = $width - ($receiversCount - 1);
157
+
158
+ //subtract image width
159
+ $padding = $padding - (166 * $receiversCount);
160
+
161
+ //subtract min padding
162
+ $padding = $padding - ($receiversCount * ($paddingLeft + $paddingRight));
163
+
164
+ $paddingEach = $padding / $receiversCount;
165
+
166
+ $mod = $padding % $receiversCount;
167
+
168
+ if ($mod == 0) {
169
+ $paddingEach = intval($paddingEach);
170
+ $bonus = 0;
171
+ } elseif ($mod == 1) {
172
+ $paddingEach = floor($paddingEach);
173
+ $bonus = 1;
174
+ } else {
175
+ $paddingEach = ceil($paddingEach);
176
+ $bonus = $mod - $receiversCount;
177
+ }
178
+
179
+ //Padding of the receivers buttons
180
+ $paddingLeft = $paddingLeft + ceil($paddingEach / 2);
181
+ $paddingRight = $paddingRight + floor($paddingEach / 2);
182
+
183
+ //Padding of the last receiver buttons
184
+ $paddingLeftLast = $paddingLeft + floor($bonus / 2);
185
+ $paddingRightLast = $paddingRight + ceil($bonus / 2);
186
+
187
+ $view->assignMultiple(
188
+ array(
189
+ 'paddingLeft' => $paddingLeft . 'px',
190
+ 'paddingRight' => $paddingRight . 'px',
191
+ 'paddingLeftLast' => $paddingLeftLast . 'px',
192
+ 'paddingRightLast' => $paddingRightLast . 'px',
193
+ )
194
+ );
195
+
196
+ $view->assign('actualShopWidth', $width);
197
+ }
198
+
199
+ /**
200
+ * Chooses the correct CSS to load in the view based on the theme and color defined in $skin
201
+ *
202
+ * @param Elefunds_View_ViewInterface $view
203
+ * @param array $skin
204
+ */
205
+ public static function chooseCssFile(Elefunds_View_ViewInterface $view, array $skin) {
206
+
207
+ $default_theme = 'light';
208
+ $default_color = 'orange';
209
+
210
+ if(!isset($skin['theme']) || !isset($skin['color'])) {
211
+ $theme = $default_theme;
212
+ $color = $default_color;
213
+ } else {
214
+ $theme = $skin['theme'];
215
+ $color = $skin['color'];
216
+ }
217
+
218
+ //Set theme & color to use in the view
219
+ $view->assign('theme', $theme);
220
+ $view->assign('color', $color);
221
+
222
+ //Reset the css array in case assign('skin') has already been invoked
223
+ $view->flushCssFiles();
224
+ $view->addCssFile('elefunds_' . $theme . '_' . $color . '.min.css');
225
+ }
226
+
227
+ /**
228
+ * Forwards the handling to the assignShares method if foreignId is already set. If not,
229
+ * it just assigns the receiverIds to a private property. The action will then be invoked
230
+ * once the foreignId is added.
231
+ *
232
+ * Invokes as well calculateReceiversText.
233
+ *
234
+ * @param Elefunds_View_ViewInterface $view
235
+ * @param array $receivers
236
+ */
237
+ public static function onReceiversAdded(Elefunds_View_ViewInterface $view, array $receivers) {
238
+ self::$receiverIds = array_keys($receivers);
239
+
240
+ if (self::$foreignId !== NULL) {
241
+ self::assignShares($view);
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Forwards the handling to the assignShares method if receiverIds are already set. If not,
247
+ * it just assigns the foreignId to a private property. The action will then be invoked
248
+ * once receivers are added.
249
+ *
250
+ * @param Elefunds_View_ViewInterface $view
251
+ * @param $foreignId
252
+ */
253
+ public static function onForeignIdAdded(Elefunds_View_ViewInterface $view, $foreignId) {
254
+ self::$foreignId = $foreignId;
255
+
256
+ if (self::$receiverIds !== NULL) {
257
+ self::assignShares($view);
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Assigns shares to the success page!
263
+ *
264
+ * @param Elefunds_View_ViewInterface $view
265
+ *
266
+ * @throws InvalidArgumentException
267
+ *
268
+ * @return void
269
+ */
270
+ private static function assignShares(Elefunds_View_ViewInterface $view) {
271
+
272
+ $assigns = $view->getAssignments();
273
+
274
+ // No services are configured, hence we skip this.
275
+ if (!isset($assigns['shareServices'])) {
276
+ return;
277
+ }
278
+
279
+ $services = $assigns['shareServices'];
280
+ $baseUrl = 'https://share.elefunds.de/on/%s/%d/%d/%s/%s';
281
+ $receivers = implode(',', self::$receiverIds);
282
+ $clientId = $assigns['clientId'];
283
+ $hashedKey = $assigns['hashedKey'];
284
+ $checksum = sha1($clientId . self::$foreignId . $receivers . $hashedKey);
285
+
286
+ $shares = array();
287
+ $availableShareServices = $assigns['availableShareServices'];
288
+
289
+ foreach($services as $service) {
290
+
291
+ if (!array_key_exists($service, $availableShareServices)) {
292
+ throw new InvalidArgumentException('Service must be one of the following: ' . implode(', ', $availableShareServices));
293
+ }
294
+ $serviceObj = new stdClass();
295
+ $serviceObj->url = sprintf($baseUrl, $service, $clientId, self::$foreignId, $receivers, $checksum);
296
+ $serviceObj->imageUrl = $availableShareServices[$service]['image'];
297
+ $serviceObj->width = $availableShareServices[$service]['width'];
298
+ $serviceObj->height = $availableShareServices[$service]['height'];
299
+ $serviceObj->title = $availableShareServices[$service]['title'];
300
+ $shares[] = $serviceObj;
301
+ }
302
+ $view->assign('shares', $shares);
303
+
304
+ }
305
+
306
+
307
+ }
lib/Elefunds/Template/Shop/Images/elefunds_item_main.png ADDED
Binary file
lib/Elefunds/Template/Shop/Images/elefunds_item_small.png ADDED
Binary file
lib/Elefunds/Template/Shop/Images/elefunds_item_thumbnail.png ADDED
Binary file
lib/Elefunds/Template/Shop/Javascript/elefunds.jquery.js ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var elefunds = (function(parent, $) {
2
+
3
+ var roundSumContainer, roundSum, currency, decimal, decimalAlt, total, toolTipPosition;
4
+ var enabled = false;
5
+
6
+ function init(options) {
7
+ roundSumContainer = options.roundSumContainer;
8
+ roundSum = options.roundSum;
9
+ currency = options.currency;
10
+ decimal = options.decimal;
11
+ decimalAlt = options.deciamlAlt;
12
+ total = options.total;
13
+ toolTipPosition = options.toolTipPosition;
14
+
15
+ $('#elefunds').data('elefunds-roundSum', convertToFloat(total + parseInt($('#elefunds_donation_cent').val(), 10)));
16
+ $('#elefunds').data('elefunds-donation', {donationCent: parseInt($('#elefunds_donation_cent').val(), 10), donationFloat: convertToFloat(parseInt($('#elefunds_donation_cent').val(), 10))});
17
+
18
+ function enable() {
19
+ $('#elefunds_checkbox').prop('checked', true);
20
+ $("#elefunds_input").addClass('elefunds_input_active');
21
+ roundSumContainer.slideDown();
22
+
23
+ $('#elefunds').trigger('elefunds_enabled');
24
+ enabled = true;
25
+ }
26
+
27
+ function disable() {
28
+ $('#elefunds_checkbox').prop('checked', false);
29
+ $('#elefunds_input').removeClass('elefunds_input_active');
30
+ roundSumContainer.slideUp();
31
+
32
+ $('#elefunds').trigger('elefunds_disabled');
33
+ enabled = false;
34
+ }
35
+
36
+ // Change button backgrounds when (un)selected
37
+ $('.elefunds_receiver > input').on('change', function() {
38
+ //If all are unchecked
39
+ if($('#elefunds_bottom').find('input[type="checkbox"]:checked').length == 0) {
40
+ disable();
41
+ } else if(!enabled) {
42
+ enable();
43
+ }
44
+
45
+ $(this).parent().toggleClass('elefunds_receiver_selected');
46
+ });
47
+
48
+ // When the plugin is (de)activated
49
+ $('#elefunds_checkbox').on('change', function() {
50
+ if($('#elefunds_checkbox').prop('checked') && $('#elefunds_bottom').find('input[type="checkbox"]:checked').length == 0) {
51
+ $('#elefunds_bottom').find('input[type="checkbox"]').prop('checked', true);
52
+ $('#elefunds_bottom').find('input[type="checkbox"]').parent().toggleClass('elefunds_receiver_selected');
53
+ }
54
+
55
+ if(!$('#elefunds_checkbox:checked').length) {
56
+ roundSumContainer.slideUp();
57
+ $('#elefunds').trigger('elefunds_disabled');
58
+ enabled = false;
59
+
60
+ } else {
61
+ if ($('#elefunds_checkbox:checked').length) {
62
+ roundSumContainer.slideDown();
63
+
64
+ //Store data
65
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
66
+ $('#elefunds').data('elefunds-donation', {donationCent: centValue, donationFloat: convertToFloat(centValue)});
67
+
68
+ $('#elefunds').trigger('elefunds_enabled');
69
+ enabled = true;
70
+ }
71
+ }
72
+
73
+ $('#elefunds_input').toggleClass('elefunds_input_active');
74
+ });
75
+
76
+ $('#elefunds_input').keyup(function(e){
77
+ if(e.which == 13) e.preventDefault();
78
+ });
79
+
80
+ // Enable tooltips
81
+ $('.tiptip').tipTip({
82
+ defaultPosition: toolTipPosition || 'top',
83
+ edgeOffset: -12,
84
+ delay: 200
85
+ });
86
+ } //END INIT
87
+
88
+ //Check if elefunds has already been created in the view
89
+ (function() {
90
+ if(parent.hasOwnProperty('options')) {
91
+ init(parent.options);
92
+ }
93
+ })();
94
+
95
+ function convertToCent(floatValue) {
96
+ var centValue;
97
+ var centArray;
98
+
99
+ if(floatValue.indexOf(decimal) !== -1) {
100
+ centArray = floatValue.split(decimal,2);
101
+ } else if(floatValue.indexOf(decimalAlt) !== -1) {
102
+ centArray = floatValue.split(decimalAlt,2);
103
+ } else {
104
+ centArray = [floatValue, 0];
105
+ }
106
+
107
+ if(centArray[1].length > 2) {
108
+ centArray[1] = centArray[1].substr(0,2);
109
+ }
110
+
111
+ while(centArray[1].length < 2) {
112
+ centArray[1] += '0';
113
+ }
114
+
115
+ if(centArray[0].length < 1) {
116
+ centArray[0] = 0;
117
+ }
118
+
119
+ centValue = parseInt(centArray[0], 10)*100 + parseInt(centArray[1], 10);
120
+
121
+ // Check for valid value
122
+ if(isNaN(centValue) || centValue < 0) {
123
+ centValue = 0;
124
+ }
125
+
126
+ return centValue;
127
+ }
128
+
129
+ // Convert cent value to float currency equivalent
130
+ function convertToFloat(centValue) {
131
+ var floatValue;
132
+
133
+ if(centValue < 10) {
134
+ floatValue = '0' + decimal + '0' + centValue;
135
+ } else if(centValue < 100) {
136
+ floatValue = '0' + decimal + centValue;
137
+ } else {
138
+ centValue = centValue.toString();
139
+ floatValue = centValue.slice(0, -2) + decimal + centValue.slice(-2);
140
+ }
141
+
142
+ return floatValue;
143
+ }
144
+
145
+ // Update the donation input field
146
+ function updateDonation(centValue) {
147
+ var floatValue = convertToFloat(centValue);
148
+ $('#elefunds_input').val(floatValue);
149
+
150
+ render(centValue);
151
+
152
+ if(enabled) {
153
+ $('#elefunds').trigger('elefunds_donationChange');
154
+ }
155
+ }
156
+
157
+ function render(centValue) {
158
+ // Update the hidden donation input field
159
+ // containing the value of the donation in cents
160
+ $('#elefunds_donation_cent').val(centValue);
161
+
162
+ // Store data
163
+ $('#elefunds').data('elefunds-roundSum', convertToFloat(total + centValue));
164
+ $('#elefunds').data('elefunds-donation', {donationCent: centValue, donationFloat: convertToFloat(centValue)});
165
+
166
+ //Update round sum
167
+ if(roundSum) {
168
+ roundSum.html(convertToFloat(total + centValue));
169
+ }
170
+ }
171
+
172
+ return {
173
+
174
+ init: function(options) {
175
+ init(options);
176
+ },
177
+
178
+ // Decrease the donation sum by 1.00
179
+ decreaseDonation: function() {
180
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
181
+
182
+ if(centValue > 100) {
183
+ centValue = centValue - 100;
184
+ updateDonation(centValue);
185
+ }
186
+
187
+ return centValue;
188
+ },
189
+
190
+ // Increase the donation sum by 1.00
191
+ increaseDonation: function() {
192
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
193
+
194
+ centValue = parseInt(centValue, 10) + 100;
195
+
196
+ updateDonation(centValue);
197
+ return centValue;
198
+ },
199
+
200
+ // Update the hidden field with the current donation value
201
+ donationChange: function(floatValue) {
202
+ var centValue = convertToCent(floatValue);
203
+ render(centValue);
204
+
205
+ var timeHandler = $('#elefunds').data('elefunds-timer');
206
+ var now = (new Date()).getTime();
207
+ var delay = 800;
208
+
209
+ if (typeof(timeHandler) !== 'undefined' && timeHandler !== null) {
210
+ if(now - timeHandler.time < delay) {
211
+ clearTimeout(timeHandler.timer);
212
+ }
213
+ }
214
+
215
+ if(enabled) {
216
+ var timer = setTimeout(function() {
217
+ $('#elefunds').trigger('elefunds_donationChange');
218
+ }, delay);
219
+
220
+ $('#elefunds').data('elefunds-timer', {timer: timer, time: (new Date()).getTime()});
221
+ }
222
+
223
+ return centValue;
224
+ }
225
+
226
+ };
227
+ }(elefunds || {}, jQuery));
lib/Elefunds/Template/Shop/Javascript/elefunds.jquery.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(e){e.fn.tipTip=function(t){var n={activation:"hover",keepAlive:!1,maxWidth:"auto",edgeOffset:2,defaultPosition:"top",delay:50,fadeIn:50,fadeOut:100,attribute:"title",attribute2:"desc",content:"",enter:function(){},exit:function(){}},r=e.extend(n,t),i,s,o,u;if(e("#tiptip_holder").length<=0){i=e('<div id="tiptip_holder" style="max-width:'+r.maxWidth+';"></div>');s=e('<div id="tiptip_content"></div>');o=e('<div id="tiptip_inner"></div>');u=e('<div id="tiptip_arrow"></div>');e("body").append(i.html(s).prepend(u.html('<div id="tiptip_arrow_inner"></div>')))}else{i=e("#tiptip_holder");s=e("#tiptip_content");o=e("#tiptip_inner");u=e("#tiptip_arrow")}return this.each(function(){var t=e(this),n,a,f;if(t.attr(r.attribute)){n=t.attr(r.attribute);a=t.attr(r.attribute2)}else{n=r.title;a=r.content}if(n!==""){if(!r.content){t.removeAttr(r.attribute);t.removeAttr(r.attribute2)}f=!1;if(r.activation==="hover"){t.hover(function(){l()},function(){r.keepAlive||c()});r.keepAlive&&i.hover(function(){},function(){c()})}else if(r.activation==="focus")t.focus(function(){l()}).blur(function(){c()});else if(r.activation==="click"){t.click(function(){l();return!1}).hover(function(){},function(){r.keepAlive||c()});r.keepAlive&&i.hover(function(){},function(){c()})}function l(){r.enter.call(this);s.html('<h3 id="tiptip_title">'+n+"</h3>");o.html(a);s.append(o);i.hide().removeAttr("class").css("margin","0");u.removeAttr("style");var l=parseInt(t.offset().top);t.attr("id")==="elefunds_logo"&&(l-=8);var c=parseInt(t.offset().left),h=parseInt(t.width()),p=parseInt(t.height()),d=i.width(),v=i.height(),m=Math.round((h-d)/2),g=Math.round((p-v)/2),y=Math.round(c+m),b=Math.round(l+p+r.edgeOffset),w="",E="",S=Math.round(d-12)/2;r.defaultPosition==="bottom"?w="_bottom":r.defaultPosition==="top"?w="_top":r.defaultPosition==="left"?w="_left":r.defaultPosition==="right"&&(w="_right");var x=m+c<parseInt(e(window).scrollLeft()),T=d+c>parseInt(e(window).width());if(x&&m<0||w=="_right"&&!T||w=="_left"&&c<d+r.edgeOffset+5){w="_right";E=Math.round(v-13)/2;S=-12;y=Math.round(c+h+r.edgeOffset);b=Math.round(l+g)}else if(T&&m<0||w=="_left"&&!x){w="_left";E=Math.round(v-13)/2;S=Math.round(d);y=Math.round(c-(d+r.edgeOffset+5));b=Math.round(l+g)}var N=l+p+r.edgeOffset+v+8>parseInt(e(window).height()+e(window).scrollTop()),C=l+p-(r.edgeOffset+v+8)<0;if(N||w=="_bottom"&&N||w=="_top"&&!C){w=="_top"||w=="_bottom"?w="_top":w+="_top";E=v;b=Math.round(l-(v+5+r.edgeOffset))}else if(C|(w=="_top"&&C)||w=="_bottom"&&!N){w=="_top"||w=="_bottom"?w="_bottom":w+="_bottom";E=-12;b=Math.round(l+p+r.edgeOffset)}u.css({"margin-left":S+"px","margin-top":E+"px"});i.css({"margin-left":y+"px","margin-top":b+"px"}).attr("class","tip"+w);f&&clearTimeout(f);f=setTimeout(function(){i.stop(!0,!0).fadeIn(r.fadeIn)},r.delay)}function c(){r.exit.call(this);f&&clearTimeout(f);i.fadeOut(r.fadeOut)}}})}})(window.jQuery);var elefunds=function(e,t){function l(e){function l(){t("#elefunds_checkbox").prop("checked",!0);t("#elefunds_input").addClass("elefunds_input_active");n.slideDown();t("#elefunds").trigger("elefunds_enabled");f=!0}function c(){t("#elefunds_checkbox").prop("checked",!1);t("#elefunds_input").removeClass("elefunds_input_active");n.slideUp();t("#elefunds").trigger("elefunds_disabled");f=!1}n=e.roundSumContainer;r=e.roundSum;i=e.currency;s=e.decimal;o=e.deciamlAlt;u=e.total;a=e.toolTipPosition;t("#elefunds").data("elefunds-roundSum",h(u+parseInt(t("#elefunds_donation_cent").val(),10)));t("#elefunds").data("elefunds-donation",{donationCent:parseInt(t("#elefunds_donation_cent").val(),10),donationFloat:h(parseInt(t("#elefunds_donation_cent").val(),10))});t(".elefunds_receiver > input").on("change",function(){t("#elefunds_bottom").find('input[type="checkbox"]:checked').length==0?c():f||l();t(this).parent().toggleClass("elefunds_receiver_selected")});t("#elefunds_checkbox").on("change",function(){if(t("#elefunds_checkbox").prop("checked")&&t("#elefunds_bottom").find('input[type="checkbox"]:checked').length==0){t("#elefunds_bottom").find('input[type="checkbox"]').prop("checked",!0);t("#elefunds_bottom").find('input[type="checkbox"]').parent().toggleClass("elefunds_receiver_selected")}if(!t("#elefunds_checkbox:checked").length){n.slideUp();t("#elefunds").trigger("elefunds_disabled");f=!1}else if(t("#elefunds_checkbox:checked").length){n.slideDown();var e=parseInt(t("#elefunds_donation_cent").val(),10);t("#elefunds").data("elefunds-donation",{donationCent:e,donationFloat:h(e)});t("#elefunds").trigger("elefunds_enabled");f=!0}t("#elefunds_input").toggleClass("elefunds_input_active")});t("#elefunds_input").keyup(function(e){e.which==13&&e.preventDefault()});t(".tiptip").tipTip({defaultPosition:a||"top",edgeOffset:-12,delay:200})}function c(e){var t,n;e.indexOf(s)!==-1?n=e.split(s,2):e.indexOf(o)!==-1?n=e.split(o,2):n=[e,0];n[1].length>2&&(n[1]=n[1].substr(0,2));while(n[1].length<2)n[1]+="0";n[0].length<1&&(n[0]=0);t=parseInt(n[0],10)*100+parseInt(n[1],10);if(isNaN(t)||t<0)t=0;return t}function h(e){var t;if(e<10)t="0"+s+"0"+e;else if(e<100)t="0"+s+e;else{e=e.toString();t=e.slice(0,-2)+s+e.slice(-2)}return t}function p(e){var n=h(e);t("#elefunds_input").val(n);d(e);f&&t("#elefunds").trigger("elefunds_donationChange")}function d(e){t("#elefunds_donation_cent").val(e);t("#elefunds").data("elefunds-roundSum",h(u+e));t("#elefunds").data("elefunds-donation",{donationCent:e,donationFloat:h(e)});r&&r.html(h(u+e))}var n,r,i,s,o,u,a,f=!1;(function(){e.hasOwnProperty("options")&&l(e.options)})();return{init:function(e){l(e)},decreaseDonation:function(){var e=parseInt(t("#elefunds_donation_cent").val(),10);if(e>100){e-=100;p(e)}return e},increaseDonation:function(){var e=parseInt(t("#elefunds_donation_cent").val(),10);e=parseInt(e,10)+100;p(e);return e},donationChange:function(e){var n=c(e);d(n);var r=t("#elefunds").data("elefunds-timer"),i=(new Date).getTime(),s=800;typeof r!="undefined"&&r!==null&&i-r.time<s&&clearTimeout(r.timer);if(f){var o=setTimeout(function(){t("#elefunds").trigger("elefunds_donationChange")},s);t("#elefunds").data("elefunds-timer",{timer:o,time:(new Date).getTime()})}return n}}}(elefunds||{},jQuery);
lib/Elefunds/Template/Shop/Javascript/elefundsTT.jquery.js ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * TipTip
3
+ * Copyright 2010 Drew Wilson
4
+ * www.drewwilson.com
5
+ * code.drewwilson.com/entry/tiptip-jquery-plugin
6
+ *
7
+ * Version 1.3 - Updated: Mar. 23, 2010
8
+ *
9
+ * This Plug-In will create a custom tooltip to replace the default
10
+ * browser tooltip. It is extremely lightweight and very smart in
11
+ * that it detects the edges of the browser window and will make sure
12
+ * the tooltip stays within the current window size. As a result the
13
+ * tooltip will adjust itself to be displayed above, below, to the left
14
+ * or to the right depending on what is necessary to stay within the
15
+ * browser window. It is completely customizable as well via CSS.
16
+ *
17
+ * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
18
+ * http://www.opensource.org/licenses/mit-license.php
19
+ * http://www.gnu.org/licenses/gpl.html
20
+ */
21
+
22
+ (function ($) {
23
+ $.fn.tipTip = function (options) {
24
+ var defaults = {
25
+ activation: "hover",
26
+ keepAlive: false,
27
+ maxWidth: "auto",
28
+ edgeOffset: 2,
29
+ defaultPosition: "top",
30
+ delay: 50,
31
+ fadeIn: 50,
32
+ fadeOut: 100,
33
+ attribute: "title",
34
+ attribute2: "desc",
35
+ content: '',
36
+ enter: function () {},
37
+ exit: function () {}
38
+ },
39
+ opts = $.extend(defaults, options),
40
+ tiptip_holder,
41
+ tiptip_content,
42
+ tiptip_inner,
43
+ tiptip_arrow;
44
+
45
+ // Setup tip tip elements and render them to the DOM
46
+ if ($("#tiptip_holder").length <= 0) {
47
+ tiptip_holder = $('<div id="tiptip_holder" style="max-width:' + opts.maxWidth + ';"></div>');
48
+ tiptip_content = $('<div id="tiptip_content"></div>');
49
+ tiptip_inner = $('<div id="tiptip_inner"></div>');
50
+ tiptip_arrow = $('<div id="tiptip_arrow"></div>');
51
+ $("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));
52
+ } else {
53
+ tiptip_holder = $('#tiptip_holder');
54
+ tiptip_content = $('#tiptip_content');
55
+ tiptip_inner = $('#tiptip_inner');
56
+ tiptip_arrow = $("#tiptip_arrow");
57
+ }
58
+
59
+ return this.each(function () {
60
+ var org_elem = $(this),
61
+ org_title,
62
+ org_desc,
63
+ timeout;
64
+
65
+ if (org_elem.attr(opts.attribute)) {
66
+ org_title = org_elem.attr(opts.attribute);
67
+ org_desc = org_elem.attr(opts.attribute2);
68
+ } else {
69
+ org_title = opts.title;
70
+ org_desc = opts.content;
71
+ }
72
+
73
+ if (org_title !== "") {
74
+ if (!opts.content) {
75
+ org_elem.removeAttr(opts.attribute);
76
+ org_elem.removeAttr(opts.attribute2);
77
+ }
78
+ timeout = false;
79
+
80
+ if (opts.activation === "hover") {
81
+ org_elem.hover(function () {
82
+ active_tiptip();
83
+ }, function () {
84
+ if (!opts.keepAlive) {
85
+ deactive_tiptip();
86
+ }
87
+ });
88
+ if (opts.keepAlive) {
89
+ tiptip_holder.hover(function () {}, function () {
90
+ deactive_tiptip();
91
+ });
92
+ }
93
+ } else if (opts.activation === "focus") {
94
+ org_elem.focus(function () {
95
+ active_tiptip();
96
+ }).blur(function () {
97
+ deactive_tiptip();
98
+ });
99
+ } else if (opts.activation === "click") {
100
+ org_elem.click(function () {
101
+ active_tiptip();
102
+ return false;
103
+ }).hover(function () {}, function () {
104
+ if (!opts.keepAlive) {
105
+ deactive_tiptip();
106
+ }
107
+ });
108
+ if (opts.keepAlive) {
109
+ tiptip_holder.hover(function () {}, function () {
110
+ deactive_tiptip();
111
+ });
112
+ }
113
+ }
114
+
115
+ function active_tiptip() {
116
+ opts.enter.call(this);
117
+
118
+ tiptip_content.html('<h3 id="tiptip_title">' + org_title + '</h3>');
119
+ tiptip_inner.html(org_desc);
120
+ tiptip_content.append(tiptip_inner);
121
+ tiptip_holder.hide().removeAttr("class").css("margin", "0");
122
+ tiptip_arrow.removeAttr("style");
123
+
124
+ var top = parseInt(org_elem.offset().top);
125
+ if (org_elem.attr('id') === 'elefunds_logo') {
126
+ top -= 8;
127
+ }
128
+
129
+ var left = parseInt(org_elem.offset().left),
130
+ org_width = parseInt(org_elem.width()),
131
+ org_height = parseInt(org_elem.height()),
132
+ tip_w = tiptip_holder.width(),
133
+ tip_h = tiptip_holder.height(),
134
+ w_compare = Math.round((org_width - tip_w) / 2),
135
+ h_compare = Math.round((org_height - tip_h) / 2),
136
+ marg_left = Math.round(left + w_compare),
137
+ marg_top = Math.round(top + org_height + opts.edgeOffset),
138
+ t_class = "",
139
+ arrow_top = "",
140
+ arrow_left = Math.round(tip_w - 12) / 2;
141
+
142
+ if (opts.defaultPosition === "bottom") {
143
+ t_class = "_bottom";
144
+ } else if (opts.defaultPosition === "top") {
145
+ t_class = "_top";
146
+ } else if (opts.defaultPosition === "left") {
147
+ t_class = "_left";
148
+ } else if (opts.defaultPosition === "right") {
149
+ t_class = "_right";
150
+ }
151
+
152
+ var right_compare = (w_compare + left) < parseInt($(window).scrollLeft());
153
+ var left_compare = (tip_w + left) > parseInt($(window).width());
154
+
155
+ if((right_compare && w_compare < 0) || (t_class == "_right" && !left_compare) || (t_class == "_left" && left < (tip_w + opts.edgeOffset + 5))){
156
+ t_class = "_right";
157
+ arrow_top = Math.round(tip_h - 13) / 2;
158
+ arrow_left = -12;
159
+ marg_left = Math.round(left + org_width + opts.edgeOffset);
160
+ marg_top = Math.round(top + h_compare);
161
+ } else if((left_compare && w_compare < 0) || (t_class == "_left" && !right_compare)){
162
+ t_class = "_left";
163
+ arrow_top = Math.round(tip_h - 13) / 2;
164
+ arrow_left = Math.round(tip_w);
165
+ marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
166
+ marg_top = Math.round(top + h_compare);
167
+ }
168
+
169
+ var top_compare = (top + org_height + opts.edgeOffset + tip_h + 8) > parseInt($(window).height() + $(window).scrollTop()),
170
+ bottom_compare = ((top + org_height) - (opts.edgeOffset + tip_h + 8)) < 0;
171
+
172
+ if(top_compare || (t_class == "_bottom" && top_compare) || (t_class == "_top" && !bottom_compare)){
173
+ if(t_class == "_top" || t_class == "_bottom"){
174
+ t_class = "_top";
175
+ } else {
176
+ t_class = t_class+"_top";
177
+ }
178
+ arrow_top = tip_h;
179
+ marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
180
+ } else if(bottom_compare | (t_class == "_top" && bottom_compare) || (t_class == "_bottom" && !top_compare)){
181
+ if(t_class == "_top" || t_class == "_bottom"){
182
+ t_class = "_bottom";
183
+ } else {
184
+ t_class = t_class+"_bottom";
185
+ }
186
+ arrow_top = -12;
187
+ marg_top = Math.round(top + org_height + opts.edgeOffset);
188
+ }
189
+
190
+ tiptip_arrow.css({"margin-left": arrow_left + "px", "margin-top": arrow_top + "px"});
191
+ tiptip_holder.css({"margin-left": marg_left + "px", "margin-top": marg_top + "px"}).attr("class", "tip" + t_class);
192
+
193
+ if (timeout) {
194
+ clearTimeout(timeout);
195
+ }
196
+ timeout = setTimeout(function () {
197
+ tiptip_holder.stop(true, true).fadeIn(opts.fadeIn);
198
+ }, opts.delay);
199
+ }
200
+
201
+ function deactive_tiptip() {
202
+ opts.exit.call(this);
203
+ if (timeout) {
204
+ clearTimeout(timeout);
205
+ }
206
+ tiptip_holder.fadeOut(opts.fadeOut);
207
+ }
208
+ }
209
+ });
210
+ };
211
+ })(window.jQuery);
lib/Elefunds/Template/Shop/ShopConfiguration.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../Configuration/DefaultConfiguration.php';
41
+ require_once dirname(__FILE__) . '/../../View/BaseView.php';
42
+ require_once dirname(__FILE__) . '/Hooks/ShopHooks.php';
43
+
44
+ /**
45
+ * Shop Configuration for a shop template.
46
+ *
47
+ * @package elefunds API PHP Library
48
+ * @subpackage Template\Shop
49
+ * @author Christian Peters <christian@elefunds.de>
50
+ * @copyright 2013 elefunds GmbH <hello@elefunds.de>
51
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
52
+ * @link http://www.elefunds.de
53
+ * @since File available since Release 1.2.0
54
+ */
55
+ class Elefunds_Template_Shop_ShopConfiguration extends Elefunds_Configuration_DefaultConfiguration {
56
+
57
+ /**
58
+ * @var array
59
+ */
60
+ protected $themes;
61
+
62
+ /**
63
+ * @var array
64
+ */
65
+ protected $colors;
66
+
67
+ /**
68
+ * Assigns the receivers.
69
+ *
70
+ * @return void
71
+ */
72
+ public function init() {
73
+
74
+ parent::init();
75
+
76
+ $this->setView(new Elefunds_View_BaseView());
77
+ $this->view->setTemplate('Shop');
78
+
79
+ //Available theme and color choices
80
+ $this->themes = array('light', 'dark');
81
+ $this->colors = array('orange', 'blue', 'green', 'purple', 'grey');
82
+
83
+ //Chose your theme and color
84
+ $theme = $this->themes[0];
85
+ $color = $this->colors[0];
86
+
87
+ $this->view->addJavascriptFile('elefunds.jquery.min.js');
88
+
89
+ $this->view->registerAssignHook('skin', 'Elefunds_Template_Shop_Hooks_ShopHooks', 'chooseCssFile');
90
+ $this->view->assign('skin',
91
+ array(
92
+ 'theme' => $theme,
93
+ 'color' => $color
94
+ )
95
+ );
96
+
97
+ }
98
+
99
+ /**
100
+ * @return array
101
+ */
102
+ public function getAvailableThemes() {
103
+ return $this->themes;
104
+ }
105
+
106
+ /**
107
+ * @return array
108
+ */
109
+ public function getAvailableColors() {
110
+ return $this->colors;
111
+ }
112
+
113
+ }
lib/Elefunds/Template/Shop/View.phtml ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="elefunds">
2
+ <input type="hidden" id="elefunds_donation_cent" value="<?php echo $view['suggestedDonationAmountCent']; ?>" name="elefunds_donation_cent"/>
3
+ <input type="hidden" id="<?php echo 'elefunds_suggested_round_up_cent'; ?>" name="<?php echo 'elefunds_suggested_round_up_cent'; ?>" value="<?php echo $view['suggestedDonationAmountCent'];?>"/>
4
+ <div id="elefunds_top" style="width: <?php echo $view['actualShopWidth']; ?>px;">
5
+ <img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/<?php echo $view['theme'] ?>/elefunds_logo.png" id="elefunds_logo" class="tiptip" desc="<?php echo $view['elefundsDescription']; ?>" title="elefunds" />
6
+ <div>
7
+ <div id="elefunds_arrow">
8
+ <input type="checkbox" id="elefunds_checkbox" name="elefunds_agree"/>
9
+ <label for="elefunds_checkbox"><?php echo $view['slogan'];?></label>
10
+ <span id="elefunds_arrow_end"></span>
11
+ </div>
12
+ <div id="elefunds_plus_minus">
13
+ <a href="#" onclick="elefunds.decreaseDonation(); return false;" id="elefunds_decrease"><img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/<?php echo $view['theme'] ?>/minus.png"></a> <a href="#" onclick="elefunds.increaseDonation(); return false;" id="elefunds_increase"><img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/<?php echo $view['theme'] . '/' . $view['color'] ?>/plus.png"></a>
14
+ </div>
15
+ <div id="elefunds_input_container">
16
+ <label id="elefunds_currency" for="elefunds_input"><?php echo $view['currency']; ?></label>
17
+ <input type="text" id="elefunds_input" name="elefunds_round_up" onkeyup="elefunds.donationChange(this.value)" value="<?php echo $view['suggestedDonationAmount'];?>" />
18
+ </div>
19
+ </div>
20
+ </div>
21
+
22
+ <div id="elefunds_bottom" style="width: <?php echo $view['actualShopWidth']; ?>px;">
23
+ <?php $numReceivers = count($view['receivers']); $i = 0; foreach ($view['receivers'] as $key => $receiver): ?>
24
+ <input type="hidden" name="elefunds_receiver_name[]" value="<?php echo $receiver->getName(); ?>" />
25
+ <div class="elefunds_receiver tiptip" desc="<?php echo $receiver->getDescription(); ?>" title="<?php echo $receiver->getName(); ?>">
26
+ <input type="checkbox" id="<?php echo 'elefunds_receiver_' . $receiver->getId(TRUE); ?>" name="elefunds_receivers[]" value="<?php echo $receiver->getId(TRUE); ?>"/>
27
+ <?php if(++$i !== $numReceivers) : ?>
28
+ <label for="<?php echo 'elefunds_receiver_' . $receiver->getId(TRUE); ?>" style="padding: 12px <?php echo $view['paddingRight']; ?> 8px <?php echo $view['paddingLeft']; ?>;"><img src="<?php echo $receiver->getImage('horizontal', 'medium'); ?>" /></label>
29
+ <?php else : ?>
30
+ <label for="<?php echo 'elefunds_receiver_' . $receiver->getId(TRUE); ?>" style="padding: 12px <?php echo $view['paddingRightLast']; ?> 8px <?php echo $view['paddingLeftLast']; ?>;"><img src="<?php echo $receiver->getImage('horizontal', 'medium'); ?>" /></label>
31
+ <?php endif; ?>
32
+ </div>
33
+ <?php endforeach; ?>
34
+ </div>
35
+
36
+ <div id="elefunds_below_container" style="width: <?php echo $view['actualShopWidth']; ?>px; display: none;">
37
+ <?php if ($view['offerDonationReceipt']): ?>
38
+ <div id="elefunds_receipt">
39
+ <input type="checkbox" name="elefunds_receipt" id="elefunds_receipt_checkbox" /><label for="elefunds_receipt_checkbox"><?php echo $view['receipt_slogan'];?></label>
40
+ </div>
41
+ <?php endif; ?>
42
+ <div id="elefunds_round_sum_container" class="elefunds_hidden">
43
+ <strong><?php echo $view['roundedSumString']; ?></strong>
44
+ <strong id="elefunds_round_sum"><?php echo $view['roundedSum'];?></strong>
45
+ <strong><?php echo $view['currency']; ?></strong>
46
+ </div>
47
+ </div>
48
+ </div>
49
+
50
+ <script type="text/javascript">
51
+ jQuery('<img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/<?php echo $view['theme'] . '/' . $view['color'] ?>/arrow_on.png"/>');
52
+ jQuery('<img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png"/>');
53
+ jQuery('<img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png"/>');
54
+ jQuery('<img src="https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png"/>');
55
+
56
+ var elefunds = (function(parent, $) {
57
+ var options = {
58
+ roundSumContainer: $('#<?php echo $view["roundSumContainer"]; ?>'),
59
+ roundSum: $('#<?php echo $view["roundSum"]; ?>'),
60
+ currency: '<?php echo $view["currency"]; ?>',
61
+ decimal: '<?php echo $view["currencyDelimiter"]; ?>',
62
+ decimalAlt: ',',
63
+ total: <?php echo $view["total"]; ?>,
64
+ toolTipPosition: '<?php echo $view["toolTipPosition"]; ?>'
65
+ };
66
+
67
+ if(options.decimal === options.decimalAlt) {
68
+ options.decimalAlt = '.';
69
+ }
70
+
71
+ if(parent.hasOwnProperty('init')) {
72
+ parent.init(options);
73
+ }
74
+
75
+ return {
76
+ options: options,
77
+
78
+ decreaseDonation: function() {
79
+ return parent.decreaseDonation();
80
+ },
81
+
82
+ increaseDonation: function() {
83
+ return parent.increaseDonation();
84
+ },
85
+
86
+ donationChange: function(floatValue) {
87
+ return parent.donationChange(floatValue);
88
+ }
89
+ }
90
+
91
+ }(window.elefunds || {}, jQuery));
92
+ </script>
lib/Elefunds/Test/Unit/Configuration/BaseConfigurationTest.php ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Configuration/BaseConfiguration.php';
41
+ require_once dirname(__FILE__) . '/../../../Communication/RestInterface.php';
42
+ require_once dirname(__FILE__) . '/../../../View/ViewInterface.php';
43
+
44
+ /**
45
+ * Unit Test for Elefunds_Configuration_BaseConfiguration.
46
+ *
47
+ * @package elefunds API PHP Library
48
+ * @subpackage Test
49
+ * @author Christian Peters <christian@elefunds.de>
50
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
51
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
52
+ * @link http://www.elefunds.de
53
+ * @since File available since Release 1.0.0
54
+ */
55
+ class Elefunds_Test_Unit_Configuration_BaseConfigurationTest extends PHPUnit_Framework_TestCase {
56
+
57
+ protected $baseConfiguration;
58
+
59
+ /**
60
+ * setClientCalculatesHashedKeyIfApiKeyIsAlreadySetAndGettersForClientIdAndHashedKeyAreWorking
61
+ *
62
+ * @test
63
+ */
64
+ public function setClientCalculatesHashedKeyIfApiKeyIsAlreadySetAndGettersForClientIdAndHashedKeyAreWorking() {
65
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
66
+ $this->baseConfiguration->setApiKey('asdfaAdf123ddddddddd');
67
+ $this->baseConfiguration->setClientId(1234);
68
+
69
+ $this->assertSame(1234, $this->baseConfiguration->getClientId());
70
+ $this->assertSame('3382a100edcb335c6af4efc1d5fb37b4ec264553', $this->baseConfiguration->getHashedKey());
71
+ }
72
+
73
+
74
+ /**
75
+ * setApiKeyCalculatesHashedKeyIfClientIdIsAlreadySet
76
+ *
77
+ * @test
78
+ */
79
+ public function setApiKeyCalculatesHashedKeyIfClientIdIsAlreadySet() {
80
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
81
+
82
+ $this->baseConfiguration->setClientId(1234);
83
+ $this->baseConfiguration->setApiKey('asdfaAdf123ddddddddd');
84
+
85
+ $this->assertSame('3382a100edcb335c6af4efc1d5fb37b4ec264553', $this->baseConfiguration->getHashedKey());
86
+ }
87
+
88
+ /**
89
+ * getHashedKeyThrowsErrorIfNotClientIdAndApiKeyAreSet
90
+ *
91
+ * @test
92
+ * @expectedException Elefunds_Exception_ElefundsException
93
+ */
94
+ public function getHashedKeyThrowsErrorIfNotClientIdAndApiKeyAreSet() {
95
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
96
+ $this->baseConfiguration->getHashedKey();
97
+
98
+ }
99
+
100
+ /**
101
+ * Tests if the view can be set.
102
+ *
103
+ * @test
104
+ */
105
+ public function setViewWorks() {
106
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
107
+ $view = $this->getMock('Elefunds_View_ViewInterface');
108
+
109
+ $this->baseConfiguration->setView($view);
110
+ $this->assertSame($view, $this->baseConfiguration->getView());
111
+ }
112
+
113
+ /**
114
+ * setRestImplementationWorks
115
+ *
116
+ * @test
117
+ */
118
+ public function setRestImplementationWorks() {
119
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
120
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
121
+
122
+ $this->baseConfiguration->setRestImplementation($rest);
123
+ $this->assertSame($rest, $this->baseConfiguration->getRestImplementation());
124
+ }
125
+
126
+ /**
127
+ * setDonationClassNameAcceptsOnlyLoadedClasses
128
+ *
129
+ * @test
130
+ */
131
+ public function setDonationClassNameAcceptsOnlyLoadedClasses() {
132
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
133
+
134
+ // Interface reqs are tested by the factory, so we can pass any class here.
135
+ $this->baseConfiguration->setDonationClassName('Elefunds_Test_Unit_Configuration_BaseConfigurationTest');
136
+ $this->assertSame('Elefunds_Test_Unit_Configuration_BaseConfigurationTest', $this->baseConfiguration->getDonationClassName());
137
+ }
138
+
139
+ /**
140
+ * setDonationClassNameThrowsErrorIfClassIsNotLoaded
141
+ *
142
+ * @test
143
+ * @expectedException Elefunds_Exception_ElefundsException
144
+ */
145
+ public function setDonationClassNameThrowsErrorIfClassIsNotLoaded() {
146
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
147
+ $this->baseConfiguration->setDonationClassName('Some_Made_Up_ClassName');
148
+ }
149
+
150
+ /**
151
+ * setReceiverClassNameAcceptsOnlyLoadedClasses
152
+ *
153
+ * @test
154
+ */
155
+ public function setReceiverClassNameAcceptsOnlyLoadedClasses() {
156
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
157
+
158
+ // Interface reqs are tested by the factory, so we can pass any class here.
159
+ $this->baseConfiguration->setReceiverClassName('Elefunds_Test_Unit_Configuration_BaseConfigurationTest');
160
+ $this->assertSame('Elefunds_Test_Unit_Configuration_BaseConfigurationTest', $this->baseConfiguration->getReceiverClassName());
161
+ }
162
+
163
+ /**
164
+ * setReceiverClassNameThrowsErrorIfClassIsNotLoaded
165
+ *
166
+ * @test
167
+ * @expectedException Elefunds_Exception_ElefundsException
168
+ */
169
+ public function setReceiverClassNameThrowsErrorIfClassIsNotLoaded() {
170
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
171
+ $this->baseConfiguration->setReceiverClassName('Some_Made_Up_ClassName');
172
+ }
173
+
174
+ /**
175
+ * setCountrycodeAcceptsCountrycodeAsString
176
+ *
177
+ * @test
178
+ */
179
+ public function setCountrycodeAcceptsCountrycodeAsString() {
180
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
181
+ $this->baseConfiguration->setCountrycode('de');
182
+ $this->assertSame('de', $this->baseConfiguration->getCountrycode());
183
+ }
184
+
185
+ /**
186
+ * setLanguageThrowsErrorIfGivenParamIsNotACountrycode
187
+ *
188
+ * @test
189
+ * @expectedException InvalidArgumentException
190
+ */
191
+ public function setLanguageThrowsErrorIfGivenParamIsNotACountrycode() {
192
+ $this->baseConfiguration = new Elefunds_Configuration_BaseConfiguration();
193
+ $this->baseConfiguration->setCountrycode('This is not a countrycode.');
194
+ }
195
+
196
+
197
+ }
lib/Elefunds/Test/Unit/Configuration/DefaultConfigurationTest.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Configuration/DefaultConfiguration.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_Configuration_BaseConfiguration.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_Configuration_DefaultConfigurationTest extends PHPUnit_Framework_TestCase {
54
+
55
+ protected $defaultConfiguration;
56
+
57
+ /**
58
+ * initSetsCurlDonationAndReceiver
59
+ *
60
+ * Checks if the correct model factory pattern is set are not included here.
61
+ *
62
+ * @test
63
+ */
64
+ public function initSetsCurlDonationAndReceiver() {
65
+ $this->defaultConfiguration = new Elefunds_Configuration_DefaultConfiguration();
66
+ $this->defaultConfiguration->init();
67
+
68
+ $this->assertEquals('Elefunds_Model_Receiver', $this->defaultConfiguration->getReceiverClassName());
69
+ $this->assertEquals('Elefunds_Model_Donation', $this->defaultConfiguration->getDonationClassName());
70
+
71
+ }
72
+ }
lib/Elefunds/Test/Unit/Exception/ElefundsExceptionTest.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Exception/ElefundsException.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_Exception_ElefundsException.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_Exception_ElefundsExceptionTest extends PHPUnit_Framework_TestCase {
54
+
55
+ protected $elefundsException;
56
+
57
+ /**
58
+ * Sets up the class under test.
59
+ */
60
+ public function setUp() {
61
+ $this->elefundsException = new Elefunds_Exception_ElefundsException('Test Message', 12345, array("error" => "Hello World!!!"));
62
+ }
63
+
64
+ /**
65
+ * toStringReturnsValuableInformation
66
+ *
67
+ * @test
68
+ */
69
+ public function toStringReturnsValuableInformation() {
70
+
71
+ $this->assertSame(
72
+ 'Elefunds_Exception_ElefundsException [Errorcode: 12345] : Test Message' . PHP_EOL
73
+ . 'Additional information:' . PHP_EOL
74
+ . 'error = Hello World!!!' . PHP_EOL
75
+
76
+ , $this->elefundsException->__toString()
77
+ );
78
+ }
79
+
80
+ /**
81
+ * addAdditionalInformationMergesNewArraysToTheOldOne
82
+ *
83
+ * @test
84
+ */
85
+ public function addAdditionalInformationMergesNewArraysToTheOldOne() {
86
+ $this->elefundsException->addAdditionalInformation(array('foo' => 'bar'));
87
+
88
+ $this->assertSame(
89
+ array(
90
+ 'error' => 'Hello World!!!',
91
+ 'foo' => 'bar'
92
+ ),
93
+ $this->elefundsException->getAdditionalInformation()
94
+ );
95
+ }
96
+
97
+ }
lib/Elefunds/Test/Unit/FacadeTest.php ADDED
@@ -0,0 +1,544 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ x<?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../Facade.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_Facade
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_Facade extends PHPUnit_Framework_TestCase {
54
+
55
+ /**
56
+ * @var Elefunds_Facade
57
+ */
58
+ protected $facade;
59
+
60
+ /**
61
+ * @var DateTime
62
+ */
63
+ protected $uniqueTimestampForAllTests;
64
+
65
+ /**
66
+ * Sets up the class under test.
67
+ */
68
+ public function setUp() {
69
+ $this->facade = new Elefunds_Facade();
70
+
71
+ date_default_timezone_set('Europe/Berlin');
72
+ $this->uniqueTimestampForAllTests = new DateTime();
73
+ }
74
+
75
+ /**
76
+ * setConfigurationCallsInit
77
+ *
78
+ * @test
79
+ */
80
+ public function setConfigurationCallsInit() {
81
+
82
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
83
+
84
+ $configuration->expects($this->once())
85
+ ->method('init');
86
+
87
+ $this->facade->setConfiguration($configuration);
88
+ }
89
+
90
+ /**
91
+ * When a donation is persisted, there are a few properties required to be set.
92
+ * We test that here.
93
+ *
94
+ * @test
95
+ * @expectedException Elefunds_Exception_ElefundsException
96
+ */
97
+ public function addDonationsThrowsErrorIfDonationIsNotRichEnough() {
98
+
99
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
100
+
101
+ $configuration->expects($this->once())
102
+ ->method('getApiUrl')
103
+ ->will($this->returnValue('https://api.elefunds.de'));
104
+
105
+ $configuration->expects($this->once())
106
+ ->method('getClientId')
107
+ ->will($this->returnValue(1234));
108
+
109
+ $configuration->expects($this->once())
110
+ ->method('getHashedKey')
111
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
112
+
113
+ $this->facade->setConfiguration($configuration);
114
+
115
+ $donations = array($this->getMock('Elefunds_Model_DonationInterface'));
116
+
117
+ $this->facade->addDonations($donations);
118
+ }
119
+
120
+ /**
121
+ * cancelDonationCalculatesCorrectApiUrl
122
+ *
123
+ * @test
124
+ */
125
+ public function cancelDonationCalculatesCorrectApiUrl() {
126
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
127
+
128
+ $configuration->expects($this->once())
129
+ ->method('getApiUrl')
130
+ ->will($this->returnValue('https://api.elefunds.de'));
131
+
132
+ $configuration->expects($this->once())
133
+ ->method('getClientId')
134
+ ->will($this->returnValue(1234));
135
+
136
+ $configuration->expects($this->once())
137
+ ->method('getHashedKey')
138
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
139
+
140
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
141
+
142
+ $rest->expects($this->once())
143
+ ->method('delete')
144
+ ->with($this->equalTo('https://api.elefunds.de/donations/1234/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'))
145
+ ->will($this->returnValue(json_encode(array('message' => 'Works like a charm!'))));
146
+
147
+ $configuration->expects($this->once())
148
+ ->method('getRestImplementation')
149
+ ->will($this->returnValue($rest));
150
+
151
+
152
+ $this->facade->setConfiguration($configuration);
153
+
154
+ $result = $this->facade->cancelDonation(1234);
155
+ $this->assertSame('Works like a charm!', $result);
156
+ }
157
+
158
+ /**
159
+ * completeDonationCalculatesCorrectApiUrl
160
+ *
161
+ * @test
162
+ */
163
+ public function completeDonationCalculatesCorrectApiUrl() {
164
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
165
+
166
+ $configuration->expects($this->once())
167
+ ->method('getApiUrl')
168
+ ->will($this->returnValue('https://api.elefunds.de'));
169
+
170
+ $configuration->expects($this->once())
171
+ ->method('getClientId')
172
+ ->will($this->returnValue(1234));
173
+
174
+ $configuration->expects($this->once())
175
+ ->method('getHashedKey')
176
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
177
+
178
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
179
+
180
+ $rest->expects($this->once())
181
+ ->method('put')
182
+ ->with($this->equalTo('https://api.elefunds.de/donations/1234/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'))
183
+ ->will($this->returnValue(json_encode(array('message' => 'Works like a charm!'))));
184
+
185
+ $configuration->expects($this->once())
186
+ ->method('getRestImplementation')
187
+ ->will($this->returnValue($rest));
188
+
189
+
190
+ $this->facade->setConfiguration($configuration);
191
+
192
+ $result = $this->facade->completeDonation(1234);
193
+ $this->assertSame('Works like a charm!', $result);
194
+ }
195
+
196
+ /**
197
+ * addDonationsCallsCorrectAPiUrl
198
+ *
199
+ * @test
200
+ */
201
+ public function addDonationsCallsCorrectAPiUrl() {
202
+
203
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
204
+
205
+ $configuration->expects($this->once())
206
+ ->method('getApiUrl')
207
+ ->will($this->returnValue('https://api.elefunds.de'));
208
+
209
+ $configuration->expects($this->once())
210
+ ->method('getClientId')
211
+ ->will($this->returnValue(1234));
212
+
213
+ $configuration->expects($this->once())
214
+ ->method('getHashedKey')
215
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
216
+
217
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
218
+
219
+ $rest->expects($this->once())
220
+ ->method('post')
221
+ ->with(
222
+ $this->equalTo('https://api.elefunds.de/donations/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'),
223
+ json_encode(
224
+ array(
225
+ array(
226
+ 'foreignId' => 1234,
227
+ 'donationTimestamp' => $this->uniqueTimestampForAllTests->format(DateTime::ISO8601),
228
+ 'donationAmount' => 1000,
229
+ 'receivers' => array(1,2,3),
230
+ 'receiversAvailable' => array(1,2,3)
231
+ )
232
+ )
233
+ )
234
+
235
+ )
236
+ ->will($this->returnValue(json_encode(array('message' => 'Works like a charm!'))));
237
+
238
+ $configuration->expects($this->once())
239
+ ->method('getRestImplementation')
240
+ ->will($this->returnValue($rest));
241
+
242
+ $donation = $this->getMock('Elefunds_Model_DonationInterface');
243
+
244
+ $donation->expects($this->any())
245
+ ->method('getForeignId')
246
+ ->will($this->returnValue(1234));
247
+
248
+ $donation->expects($this->any())
249
+ ->method('toArray')
250
+ ->will($this->returnValue(
251
+ array(
252
+ 'foreignId' => 1234,
253
+ 'donationTimestamp' => $this->uniqueTimestampForAllTests->format(DateTime::ISO8601),
254
+ 'donationAmount' => 1000,
255
+ 'receivers' => array(1,2,3),
256
+ 'receiversAvailable' => array(1,2,3)
257
+ )
258
+ ));
259
+
260
+
261
+ $donation->expects($this->any())
262
+ ->method('getTime')
263
+ ->will($this->returnValue($this->uniqueTimestampForAllTests));
264
+
265
+ $donation->expects($this->any())
266
+ ->method('getAmount')
267
+ ->will($this->returnValue(1000));
268
+
269
+ $donation->expects($this->any())
270
+ ->method('getReceiverIds')
271
+ ->will($this->returnValue(array(1,2,3)));
272
+
273
+ $donation->expects($this->any())
274
+ ->method('getAvailableReceiverIds')
275
+ ->will($this->returnValue(array(1,2,3)));
276
+
277
+
278
+ $this->facade->setConfiguration($configuration);
279
+ $result = $this->facade->addDonations(array($donation));
280
+ $this->assertSame($result, 'Works like a charm!');
281
+ }
282
+
283
+ /**
284
+ * cancelDonationsCallsCorrectAPiUrl
285
+ *
286
+ * @test
287
+ */
288
+ public function cancelDonationsCallsCorrectAPiUrl() {
289
+
290
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
291
+
292
+ $configuration->expects($this->once())
293
+ ->method('getApiUrl')
294
+ ->will($this->returnValue('https://api.elefunds.de'));
295
+
296
+ $configuration->expects($this->once())
297
+ ->method('getClientId')
298
+ ->will($this->returnValue(1234));
299
+
300
+ $configuration->expects($this->once())
301
+ ->method('getHashedKey')
302
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
303
+
304
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
305
+
306
+ $rest->expects($this->once())
307
+ ->method('delete')
308
+ ->with($this->equalTo('https://api.elefunds.de/donations/1,2,3,4/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'))
309
+ ->will($this->returnValue(json_encode(array('message' => 'Works like a charm!'))));
310
+
311
+ $configuration->expects($this->once())
312
+ ->method('getRestImplementation')
313
+ ->will($this->returnValue($rest));
314
+
315
+ $this->facade->setConfiguration($configuration);
316
+ $result = $this->facade->cancelDonations(array(1, 2, 3, 4));
317
+ $this->assertSame($result, 'Works like a charm!');
318
+ }
319
+
320
+ /**
321
+ * completeDonationsCallsCorrectAPiUrl
322
+ *
323
+ * @test
324
+ */
325
+ public function completeDonationsCallsCorrectAPiUrl() {
326
+
327
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
328
+
329
+ $configuration->expects($this->once())
330
+ ->method('getApiUrl')
331
+ ->will($this->returnValue('https://api.elefunds.de'));
332
+
333
+ $configuration->expects($this->once())
334
+ ->method('getClientId')
335
+ ->will($this->returnValue(1234));
336
+
337
+ $configuration->expects($this->once())
338
+ ->method('getHashedKey')
339
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
340
+
341
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
342
+
343
+ $rest->expects($this->once())
344
+ ->method('put')
345
+ ->with($this->equalTo('https://api.elefunds.de/donations/1,2,3,4/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'))
346
+ ->will($this->returnValue(json_encode(array('message' => 'Works like a charm!'))));
347
+
348
+ $configuration->expects($this->once())
349
+ ->method('getRestImplementation')
350
+ ->will($this->returnValue($rest));
351
+
352
+ $this->facade->setConfiguration($configuration);
353
+ $result = $this->facade->completeDonations(array(1, 2, 3, 4));
354
+ $this->assertSame($result, 'Works like a charm!');
355
+ }
356
+
357
+ /**
358
+ * getReceiversCallsCorrectApiUrlAndThrowsErrorIfWrongCountryCodeIsSet
359
+ *
360
+ * @test
361
+ * @expectedException Elefunds_Exception_ElefundsCommunicationException
362
+ */
363
+ public function getReceiversCallsCorrectApiUrlAndThrowsErrorIfWrongCountryCodeIsSet() {
364
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
365
+
366
+ $configuration->expects($this->once())
367
+ ->method('getApiUrl')
368
+ ->will($this->returnValue('https://api.elefunds.de'));
369
+
370
+ $configuration->expects($this->once())
371
+ ->method('getClientId')
372
+ ->will($this->returnValue(1234));
373
+
374
+ $configuration->expects($this->once())
375
+ ->method('getHashedKey')
376
+ ->will($this->returnValue('3382a100edcb335c6af4efc1d5fb37b4ec264553'));
377
+
378
+
379
+ $rest = $this->getMock('Elefunds_Communication_RestInterface');
380
+
381
+ $rest->expects($this->once())
382
+ ->method('get')
383
+ ->with($this->equalTo('https://api.elefunds.de/receivers/?clientId=1234&hashedKey=3382a100edcb335c6af4efc1d5fb37b4ec264553'))
384
+ ->will($this->returnValue(json_encode(
385
+ array(
386
+ 'receivers' => array(
387
+ array(
388
+ 'de' =>
389
+ array(
390
+ 'id' => 1234,
391
+ 'name' => 'TestReceiver',
392
+ 'description' => 'Some description',
393
+ 'images' => array(
394
+ 'vertical' => array(
395
+ 'small' => 'http://elefunds.de/image1.jpg',
396
+ 'medium' => 'http://elefunds.de/image2.jpg',
397
+ 'large' => 'http://elefunds.de/image3.jpg',
398
+ ),
399
+ 'horizontal' => array(
400
+ 'small' => 'http://elefunds.de/image4.jpg',
401
+ 'medium' => 'http://elefunds.de/image5.jpg',
402
+ 'large' => 'http://elefunds.de/image6.jpg',
403
+ )
404
+ )
405
+ )
406
+ )
407
+ )
408
+ )
409
+ )));
410
+
411
+ $configuration->expects($this->once())
412
+ ->method('getRestImplementation')
413
+ ->will($this->returnValue($rest));
414
+
415
+ $configuration->expects($this->once())
416
+ ->method('getCountrycode')
417
+ ->will($this->returnValue('de'));
418
+
419
+ $this->facade->setConfiguration($configuration);
420
+ $this->facade->getReceivers();
421
+
422
+ }
423
+
424
+ /**
425
+ * getTemplateCssFilesReturnsArray
426
+ *
427
+ * @test
428
+ */
429
+ public function getTemplateCssFilesReturnsArray() {
430
+
431
+ $view = $this->getMock('Elefunds_View_ViewInterface');
432
+ $view->expects($this->once())
433
+ ->method('getCssFiles')
434
+ ->will($this->returnValue(array('http://path/to/css.css')));
435
+
436
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
437
+
438
+ $configuration->expects($this->once())
439
+ ->method('getView')
440
+ ->will($this->returnValue($view));
441
+
442
+ $this->facade->setConfiguration($configuration);
443
+ $files = $this->facade->getTemplateCssFiles();
444
+
445
+ $this->assertSame(array('http://path/to/css.css'), $files);
446
+ }
447
+
448
+ /**
449
+ * renderTemplateReturnsStringFromViewIfViewIsSet
450
+ *
451
+ * @test
452
+ */
453
+ public function renderTemplateReturnsStringFromViewIfViewIsSet() {
454
+
455
+ $view = $this->getMock('Elefunds_View_ViewInterface');
456
+ $view->expects($this->once())
457
+ ->method('render')
458
+ ->will($this->returnValue('<p>Hello World!</p>'));
459
+
460
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
461
+
462
+ $configuration->expects($this->once())
463
+ ->method('getView')
464
+ ->will($this->returnValue($view));
465
+
466
+ $this->facade->setConfiguration($configuration);
467
+ $html = $this->facade->renderTemplate();
468
+
469
+ $this->assertSame('<p>Hello World!</p>', $html);
470
+ }
471
+
472
+ /**
473
+ * renderTemplateThrowsErrorIfNoViewIsGiven
474
+ *
475
+ * @test
476
+ * @expectedException Elefunds_Exception_ElefundsException
477
+ */
478
+ public function renderTemplateThrowsErrorIfNoViewIsGiven() {
479
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
480
+
481
+ $configuration->expects($this->once())
482
+ ->method('getView');
483
+
484
+ $this->facade->setConfiguration($configuration);
485
+ $this->facade->renderTemplate();
486
+ }
487
+
488
+ /**
489
+ * getTemplateJavascriptFilesReturnsArray
490
+ *
491
+ * @test
492
+ */
493
+ public function getTemplateJavascriptFilesReturnsArray() {
494
+
495
+ $view = $this->getMock('Elefunds_View_ViewInterface');
496
+ $view->expects($this->once())
497
+ ->method('getJavascriptFiles')
498
+ ->will($this->returnValue(array('http://path/to/script.js')));
499
+
500
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
501
+
502
+ $configuration->expects($this->once())
503
+ ->method('getView')
504
+ ->will($this->returnValue($view));
505
+
506
+ $this->facade->setConfiguration($configuration);
507
+ $files = $this->facade->getTemplateJavascriptFiles();
508
+
509
+ $this->assertSame(array('http://path/to/script.js'), $files);
510
+ }
511
+
512
+ /**
513
+ * getTemplateCssFilesThrowsErrorIfNoViewGiven
514
+ *
515
+ * @test
516
+ * @expectedException Elefunds_Exception_ElefundsException
517
+ */
518
+ public function getTemplateCssFilesThrowsErrorIfNoViewGiven() {
519
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
520
+
521
+ $configuration->expects($this->once())
522
+ ->method('getView');
523
+
524
+ $this->facade->setConfiguration($configuration);
525
+ $this->facade->getTemplateCssFiles();
526
+ }
527
+
528
+ /**
529
+ * getTemplateJavascriptFilesThrowsErrorIfNoViewGiven
530
+ *
531
+ * @test
532
+ * @expectedException Elefunds_Exception_ElefundsException
533
+ */
534
+ public function getTemplateJavascriptFilesThrowsErrorIfNoViewGiven() {
535
+ $configuration = $this->getMock('Elefunds_Configuration_ConfigurationInterface');
536
+
537
+ $configuration->expects($this->once())
538
+ ->method('getView');
539
+
540
+ $this->facade->setConfiguration($configuration);
541
+ $this->facade->getTemplateJavascriptFiles();
542
+ }
543
+
544
+ }
lib/Elefunds/Test/Unit/Model/DonationTest.php ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Model/Donation.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_Models_Donation.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_Model_DonationTest extends PHPUnit_Framework_TestCase {
54
+
55
+ /**
56
+ * @var Elefunds_Model_Donation
57
+ */
58
+ protected $donation;
59
+
60
+ /**
61
+ * Sets up the class under test.
62
+ */
63
+ public function setUp() {
64
+ $this->donation = new Elefunds_Model_Donation();
65
+ }
66
+
67
+ /**
68
+ * setForeignIdAcceptsNumbersOrDigitOnlyString
69
+ *
70
+ * @test
71
+ */
72
+ public function setForeignIdAcceptsNumbersOrDigitOnlyString() {
73
+ $this->donation->setForeignId('12345');
74
+ $this->assertSame('12345', $this->donation->getForeignId());
75
+
76
+ $this->donation->setForeignId(12345);
77
+ $this->assertSame('12345', $this->donation->getForeignId());
78
+ }
79
+
80
+ /**
81
+ * setAmountMustBeOfTypeIntegerOrADigitOnlyString
82
+ *
83
+ * @test
84
+ */
85
+ public function setAmountMustBeOfTypeIntegerOrADigitOnlyString() {
86
+ $this->donation->setAmount(1234);
87
+ $this->assertSame(1234, $this->donation->getAmount());
88
+
89
+ $this->donation->setAmount('125');
90
+ $this->assertSame(125, $this->donation->getAmount());
91
+
92
+ }
93
+
94
+ /**
95
+ * setAmountReturnsZeroIfANegativeValueIsGiven
96
+ *
97
+ * @test
98
+ */
99
+ public function setAmountReturnsZeroIfANegativeValueIsGiven() {
100
+ $this->donation->setAmount(-125);
101
+ $this->assertSame(0, $this->donation->getAmount());
102
+ }
103
+
104
+ /**
105
+ * setAmountThrowsErrorIfGivenStringIsNotCastableToInt
106
+ *
107
+ * @test
108
+ * @expectedException InvalidArgumentException
109
+ */
110
+ public function setAmountThrowsErrorIfGivenStringIsNotCastableToInt() {
111
+ $this->donation->setAmount('This string is not castable to int.');
112
+ }
113
+
114
+ /**
115
+ * setAmountThrowsErrorIfGivenValueIsNeitherCastableStringOrInt
116
+ *
117
+ * @test
118
+ * @expectedException InvalidArgumentException
119
+ */
120
+ public function setAmountThrowsErrorIfGivenValueIsNeitherCastableStringOrInt() {
121
+ $this->donation->setAmount(array());
122
+ }
123
+
124
+ /**
125
+ * setSuggestedAmountMustBeOfTypeIntOrADigitOnlyString
126
+ *
127
+ * @test
128
+ */
129
+ public function setSuggestedAmountMustBeOfTypeIntOrADigitOnlyString() {
130
+ $this->donation->setSuggestedAmount(125);
131
+ $this->assertSame(125, $this->donation->getSuggestedAmount());
132
+
133
+ $this->donation->setSuggestedAmount('125');
134
+ $this->assertSame(125, $this->donation->getSuggestedAmount());
135
+ }
136
+
137
+ /**
138
+ * setSuggestedAmountReturnsZeroIfANegativeValueIsGiven
139
+ *
140
+ * @test
141
+ */
142
+ public function setSuggestedAmountReturnsZeroIfANegativeValueIsGiven() {
143
+ $this->donation->setSuggestedAmount(-125);
144
+ $this->assertSame(0, $this->donation->getSuggestedAmount());
145
+ }
146
+
147
+ /**
148
+ * setSuggestedAmountThrowsErrorIfGivenStringIsNotCastableToInt
149
+ *
150
+ * @test
151
+ * @expectedException InvalidArgumentException
152
+ */
153
+ public function setSuggestedAmountThrowsErrorIfGivenStringIsNotCastableToInt() {
154
+ $this->donation->setSuggestedAmount('This string is not castable to int.');
155
+ }
156
+
157
+
158
+ /**
159
+ * setSuggestedAmountThrowsErrorIfGivenValueIsNeitherCastableStringOrInt
160
+ *
161
+ * @test
162
+ * @expectedException InvalidArgumentException
163
+ */
164
+ public function setSuggestedAmountThrowsErrorIfGivenValueIsNeitherCastableStringOrInt() {
165
+ $this->donation->setSuggestedAmount(array());
166
+ }
167
+
168
+ /**
169
+ * addReceiverIdAddsAnIntToTheArrayOfReceiverIds
170
+ *
171
+ * @test
172
+ */
173
+ public function addReceiverIdAddsAnIntToTheArrayOfReceiverIds() {
174
+ $this->donation->addReceiverId(1234567890);
175
+ $this->assertTrue(in_array(1234567890, $this->donation->getReceiverIds()));
176
+ }
177
+
178
+ /**
179
+ * addReceiverThrowsErrorIfGivenTypeIsNotInt
180
+ *
181
+ * @test
182
+ * @expectedException InvalidArgumentException
183
+ */
184
+ public function addReceiverThrowsErrorIfGivenTypeIsNotInt() {
185
+ $this->donation->addReceiverId('A string is given here.');
186
+ }
187
+
188
+ /**
189
+ * addReceiverThrowsErrorIfGivenTypeNegativeInt
190
+ *
191
+ * @test
192
+ * @expectedException InvalidArgumentException
193
+ */
194
+ public function addReceiverThrowsErrorIfGivenTypeNegativeInt() {
195
+ $this->donation->addReceiverId(-5);
196
+ }
197
+
198
+ /**
199
+ * setReceiverIdsSetsIdsIfAllArrayValuesArePositiveInteger
200
+ *
201
+ * @test
202
+ */
203
+ public function setReceiverIdsSetsIdsIfAllArrayValuesArePositiveInteger() {
204
+ $ids = array(1,2,3,4,5,6,7,8,9);
205
+ $this->donation->setReceiverIds($ids);
206
+ $this->assertSame($this->donation->getReceiverIds(), $ids);
207
+ }
208
+
209
+ /**
210
+ * setReceiverIdsThrowsErrorIfNotAllArrayValuesArePositiveInteger
211
+ *
212
+ * @test
213
+ * @expectedException InvalidArgumentException
214
+ */
215
+ public function setReceiverIdsThrowsErrorIfNotAllArrayValuesArePositiveInteger() {
216
+ $ids = array(1,2,3,4,-5,6,7,8,9);
217
+ $this->donation->setReceiverIds($ids);
218
+ }
219
+
220
+ /**
221
+ * setReceiverIdsThrowsErrorIfNotAllArrayValuesAreInteger
222
+ *
223
+ * @test
224
+ * @expectedException InvalidArgumentException
225
+ */
226
+ public function setReceiverIdsThrowsErrorIfNotAllArrayValuesAreInteger() {
227
+ $ids = array(1,2,3,4, 'A string is injected into the array.',6,7,8,9);
228
+ $this->donation->setReceiverIds($ids);
229
+ }
230
+
231
+ /**
232
+ * addAvailableReceiverIdAddsAnIntToTheArrayOfReceiverIds
233
+ *
234
+ * @test
235
+ */
236
+ public function addAvailableReceiverIdAddsAnIntToTheArrayOfReceiverIds() {
237
+ $this->donation->addAvailableReceiverId(1234567890);
238
+ $this->assertTrue(in_array(1234567890, $this->donation->getAvailableReceiverIds()));
239
+ }
240
+
241
+ /**
242
+ * addAvailableReceiverThrowsErrorIfGivenTypeIsNotInt
243
+ *
244
+ * @test
245
+ * @expectedException InvalidArgumentException
246
+ */
247
+ public function addAvailableReceiverThrowsErrorIfGivenTypeIsNotInt() {
248
+ $this->donation->addAvailableReceiverId('A string is given here.');
249
+ }
250
+
251
+ /**
252
+ * addAvailableReceiverThrowsErrorIfGivenTypeNegativeInt
253
+ *
254
+ * @test
255
+ * @expectedException InvalidArgumentException
256
+ */
257
+ public function addAvailableReceiverThrowsErrorIfGivenTypeNegativeInt() {
258
+ $this->donation->addAvailableReceiverId(-5);
259
+ }
260
+
261
+ /**
262
+ * setAvailableReceiverIdsSetsIdsIfAllArrayValuesArePositiveInteger
263
+ *
264
+ * @test
265
+ */
266
+ public function setAvailableReceiverIdsSetsIdsIfAllArrayValuesArePositiveInteger() {
267
+ $ids = array(1,2,3,4,5,6,7,8,9);
268
+ $this->donation->setAvailableReceiverIds($ids);
269
+ $this->assertSame($this->donation->getAvailableReceiverIds(), $ids);
270
+ }
271
+
272
+ /**
273
+ * setAvailableReceiverIdsThrowsErrorIfNotAllArrayValuesArePositiveInteger
274
+ *
275
+ * @test
276
+ * @expectedException InvalidArgumentException
277
+ */
278
+ public function setAvailableReceiverIdsThrowsErrorIfNotAllArrayValuesArePositiveInteger() {
279
+ $ids = array(1,2,3,4,-5,6,7,8,9);
280
+ $this->donation->setAvailableReceiverIds($ids);
281
+ }
282
+
283
+ /**
284
+ * setAvailableReceiverIdsThrowsErrorIfNotAllArrayValuesAreInteger
285
+ *
286
+ * @test
287
+ * @expectedException InvalidArgumentException
288
+ */
289
+ public function setAvailableReceiverIdsThrowsErrorIfNotAllArrayValuesAreInteger() {
290
+ $ids = array(1,2,3,4, 'A string is injected into the array.',6,7,8,9);
291
+ $this->donation->setAvailableReceiverIds($ids);
292
+ }
293
+
294
+ /**
295
+ * setGrandTotalMustBeOfTypeIntOrDigitOnlyString
296
+ *
297
+ * @test
298
+ */
299
+ public function setGrandTotalMustBeOfTypeIntOrDigitOnlyString() {
300
+ $this->donation->setGrandTotal(125);
301
+ $this->assertSame(125, $this->donation->getGrandTotal());
302
+
303
+ $this->donation->setGrandTotal('125');
304
+ $this->assertSame(125, $this->donation->getGrandTotal());
305
+ }
306
+
307
+ /**
308
+ * setGrandTotaReturnsZeroIfANegativeValueIsGiven
309
+ *
310
+ * @test
311
+ */
312
+ public function setGrandTotaReturnsZeroIfANegativeValueIsGiven() {
313
+ $this->donation->setGrandTotal(-125);
314
+ $this->assertSame(0, $this->donation->getGrandTotal());
315
+ }
316
+
317
+ /**
318
+ * setGrandTotalThrowsErrorIfGivenStringIsNotCastableToInt
319
+ *
320
+ * @test
321
+ * @expectedException InvalidArgumentException
322
+ */
323
+ public function setGrandTotalThrowsErrorIfGivenStringIsNotCastableToInt() {
324
+ $this->donation->setGrandTotal('This string is not castable to int.');
325
+ }
326
+
327
+ /**
328
+ * setGrandTotalThrowsErrorIfGivenValueIsNeitherCastableStringOrInt
329
+ *
330
+ * @test
331
+ * @expectedException InvalidArgumentException
332
+ */
333
+ public function setGrandTotalThrowsErrorIfGivenValueIsNeitherCastableStringOrInt() {
334
+ $this->donation->setGrandTotal(array());
335
+ }
336
+
337
+ /**
338
+ * setTimeStoresTimeInProperty
339
+ *
340
+ * @test
341
+ */
342
+ public function setTimeStoresTimeInProperty() {
343
+ date_default_timezone_set('Europe/Berlin');
344
+ $time = new DateTime();
345
+ $this->donation->setTime($time);
346
+ $this->assertSame($time, $this->donation->getTime());
347
+ }
348
+
349
+ /**
350
+ * setDonatorAcceptsAValidUser
351
+ *
352
+ * @test
353
+ */
354
+ public function setDonatorAcceptsAValidUser() {
355
+ $this->donation->setDonator('hello@elefunds.de', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin', 'de');
356
+
357
+ $donator = $this->donation->getDonatorInformation();
358
+
359
+ $this->assertSame($donator['email'], 'hello@elefunds.de');
360
+ $this->assertSame($donator['firstName'], 'Christian');
361
+ $this->assertSame($donator['lastName'], 'Peters');
362
+ $this->assertSame($donator['streetAddress'], 'Schönhauser Allee 124');
363
+ $this->assertSame($donator['zip'], 10243);
364
+ $this->assertSame($donator['city'], 'Berlin');
365
+ $this->assertSame($donator['countryCode'], 'de');
366
+
367
+ }
368
+
369
+ /**
370
+ * setDonatorNeedsAValidEmail
371
+ *
372
+ * @test
373
+ * @expectedException InvalidArgumentException
374
+ */
375
+ public function setDonatorNeedsAValidEmail() {
376
+ $this->donation->setDonator('hello@elefunds', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin', 'de');
377
+ }
378
+
379
+ /**
380
+ * setDonatorDoesNotUseInvalidCountryCodes
381
+ *
382
+ * @test
383
+ */
384
+ public function setDonatorDoesNotUseInvalidCountryCodes() {
385
+ $this->donation->setDonator('hello@elefunds.de', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin', 'invalid');
386
+
387
+ $donator = $this->donation->getDonatorInformation();
388
+ $this->assertSame(FALSE, isset($donator['countryCode']));
389
+ }
390
+
391
+ /**
392
+ * toArrayReturnsArrayWithEverythingThatIsSet
393
+ *
394
+ * @test
395
+ */
396
+ public function toArrayReturnsArrayWithEverythingThatIsSet() {
397
+
398
+ $now = new DateTime();
399
+
400
+ $this->donation
401
+ ->setAmount(100)
402
+ ->setAvailableReceiverIds(array(1,2,3))
403
+ ->setForeignId('1234')
404
+ ->setReceiverIds(array(1,2))
405
+ ->setTime($now);
406
+
407
+ $array = $this->donation->toArray();
408
+
409
+ $this->assertSame($array['donationAmount'], 100);
410
+ $this->assertSame(implode(',', $array['receiversAvailable']), '1,2,3');
411
+ $this->assertSame($array['foreignId'], '1234');
412
+ $this->assertSame(implode(',', $array['receivers']), '1,2');
413
+ $this->assertSame($array['donationTimestamp'], $now->format(DateTime::ISO8601));
414
+
415
+ $this->assertSame(FALSE, isset($array['grandTotal']));
416
+ $this->assertSame(FALSE, isset($array['donationAmountSuggested']));
417
+ $this->assertSame(FALSE, isset($array['donator']));
418
+
419
+ $this->donation->setGrandTotal(999);
420
+ $this->donation->setSuggestedAmount(888);
421
+ $this->donation->setDonator('hello@elefunds.de', 'Christian', 'Peters', 'Schönhauser Allee 124', 10243, 'Berlin', 'invalid');
422
+
423
+ $array = $this->donation->toArray();
424
+ $this->assertSame($array['grandTotal'], 999);
425
+ $this->assertSame($array['donationAmountSuggested'], 888);
426
+ $this->assertSame(TRUE, isset($array['donator']));
427
+
428
+ }
429
+
430
+ }
lib/Elefunds/Test/Unit/Model/FactoryTest.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Model/Factory.php';
41
+ require_once dirname(__FILE__) . '/../../../Model/Donation.php';
42
+ require_once dirname(__FILE__) . '/../../../Model/Receiver.php';
43
+
44
+
45
+ /**
46
+ * Unit Test for Elefunds_Model_Factory.
47
+ *
48
+ * @package elefunds API PHP Library
49
+ * @subpackage Test
50
+ * @author Christian Peters <christian@elefunds.de>
51
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
52
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
53
+ * @link http://www.elefunds.de
54
+ * @since File available since Release 1.0.0
55
+ */
56
+ class Elefunds_Test_Unit_Model_FactoryTest extends PHPUnit_Framework_TestCase {
57
+
58
+
59
+ /**
60
+ * getDonationProducesDonationPrototype
61
+ *
62
+ * @test
63
+ */
64
+ public function getDonationProducesDonationPrototype() {
65
+
66
+ Elefunds_Model_Factory::setDonationImplementation('Elefunds_Model_Donation');
67
+ $prototype = Elefunds_Model_Factory::getDonation();
68
+
69
+ $this->assertInstanceOf('Elefunds_Model_DonationInterface', $prototype);
70
+ }
71
+
72
+ /**
73
+ * getReceiverProducesReceiverPrototype
74
+ *
75
+ * @test
76
+ */
77
+ public function getReceiverProducesReceiverPrototype() {
78
+
79
+ Elefunds_Model_Factory::setReceiverImplementation('Elefunds_Model_Receiver');
80
+ $prototype = Elefunds_Model_Factory::getReceiver();
81
+
82
+ $this->assertInstanceOf('Elefunds_Model_ReceiverInterface', $prototype);
83
+ }
84
+
85
+ /**
86
+ * getDonationProducesErrorIfGivenInstanceIsNotDonationInterface
87
+ *
88
+ * @test
89
+ * @expectedException Elefunds_Exception_ElefundsException
90
+ */
91
+ public function getDonationProducesErrorIfGivenInstanceIsNotDonationInterface() {
92
+ Elefunds_Model_Factory::setDonationImplementation('Elefunds_Model_Receiver');
93
+ Elefunds_Model_Factory::getDonation();
94
+ }
95
+
96
+ /**
97
+ * getReceiverProducesErrorIfGivenInstanceIsNotReceiverInterface
98
+ *
99
+ * @test
100
+ * @expectedException Elefunds_Exception_ElefundsException
101
+ */
102
+ public function getReceiverProducesErrorIfGivenInstanceIsNotReceiverInterface() {
103
+ Elefunds_Model_Factory::setReceiverImplementation('Elefunds_Model_Donation');
104
+ Elefunds_Model_Factory::getReceiver();
105
+ }
106
+
107
+ }
lib/Elefunds/Test/Unit/Model/ReceiverTest.php ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../Model/Receiver.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_Model_Receiver.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_Model_ReceiverTest extends PHPUnit_Framework_TestCase {
54
+
55
+ /**
56
+ * @var Elefunds_Model_Receiver
57
+ */
58
+ protected $receiver;
59
+
60
+ /**
61
+ * Sets up the class under test.
62
+ */
63
+ public function setUp() {
64
+ $this->receiver = new Elefunds_Model_Receiver();
65
+ }
66
+
67
+ /**
68
+ * setIdAcceptsPositiveIntegerValuesAsId
69
+ *
70
+ * @test
71
+ */
72
+ public function setIdAcceptsPositiveIntegerValuesAsId() {
73
+ $this->receiver->setId(1000);
74
+ $this->assertSame(1000, $this->receiver->getId());
75
+ }
76
+
77
+ /**
78
+ * setIdThrowsErrorIfNonPositiveIdIsGiven
79
+ *
80
+ * @test
81
+ * @expectedException InvalidArgumentException
82
+ */
83
+ public function setIdThrowsErrorIfNonPositiveIdIsGiven() {
84
+ $this->receiver->setId(0);
85
+ }
86
+
87
+ /**
88
+ * setIdThrowsErrorIfGivenTypeIsNotInt
89
+ *
90
+ * @test
91
+ * @expectedException InvalidArgumentException
92
+ */
93
+ public function setIdThrowsErrorIfGivenTypeIsNotInt() {
94
+ $this->receiver->setId(new stdClass());
95
+ }
96
+
97
+ /**
98
+ * setNameAcceptsString
99
+ *
100
+ * @test
101
+ */
102
+ public function setNameAcceptsString() {
103
+ $this->receiver->setName('Testing is awesome!');
104
+ $this->assertSame('Testing is awesome!', $this->receiver->getName());
105
+ }
106
+
107
+
108
+ /**
109
+ * setNameThrowsErrorIfGivenTypeIsNotString
110
+ *
111
+ * @test
112
+ * @expectedException InvalidArgumentException
113
+ */
114
+ public function setNameThrowsErrorIfGivenTypeIsNotString() {
115
+ $this->receiver->setName(new stdClass());
116
+ }
117
+
118
+ /**
119
+ * setDescriptionAcceptsString
120
+ *
121
+ * @test
122
+ */
123
+ public function setDescriptionAcceptsString() {
124
+ $this->receiver->setDescription('Testing is awesome!');
125
+ $this->assertSame('Testing is awesome!', $this->receiver->getDescription());
126
+ }
127
+
128
+
129
+ /**
130
+ * setDescriptionThrowsErrorIfGivenTypeIsNotString
131
+ *
132
+ * @test
133
+ * @expectedException InvalidArgumentException
134
+ */
135
+ public function setDescriptionThrowsErrorIfGivenTypeIsNotString() {
136
+ $this->receiver->setDescription(new stdClass());
137
+ }
138
+
139
+ /**
140
+ * addImagesAddsAnImageToTheArrayOfImages
141
+ *
142
+ * @test
143
+ */
144
+ public function addImagesAddsAnImageToTheArrayOfImages() {
145
+ $imageUrl = 'http://elefunds.de/img/logo.png';
146
+ $this->receiver->addImage($imageUrl, 'vertical', 'small');
147
+ $this->assertSame($imageUrl, $this->receiver->getImage('vertical', 'small'));
148
+ }
149
+
150
+ /**
151
+ * addImagesAcceptsOnlyVerticalOrHorizontalAsFirstKey
152
+ *
153
+ * @test
154
+ * @expectedException InvalidArgumentException
155
+ */
156
+ public function addImagesAcceptsOnlyVerticalOrHorizontalAsFirstKey() {
157
+ $imageUrl = 'http://elefunds.de/img/logo.png';
158
+ $this->receiver->addImage($imageUrl, 'some invalid string', 'small');
159
+ }
160
+
161
+ /**
162
+ * addImagesAcceptsOnlySmallMediumAndLargeAsSecondKey
163
+ *
164
+ * @test
165
+ * @expectedException InvalidArgumentException
166
+ */
167
+ public function addImagesAcceptsOnlySmallMediumAndLargeAsSecondKey() {
168
+ $imageUrl = 'http://elefunds.de/img/logo.png';
169
+ $this->receiver->addImage($imageUrl, 'horizontal', 'invalid');
170
+ }
171
+
172
+ /**
173
+ * getImagesAcceptsOnlyVerticalOrHorizontalAsFirstKey
174
+ *
175
+ * @test
176
+ * @expectedException InvalidArgumentException
177
+ */
178
+ public function getImagesAcceptsOnlyVerticalOrHorizontalAsFirstKey() {
179
+ $this->receiver->getImage('http://elefunds.de/img/sample.jpg', 'some invalid string', 'small');
180
+ }
181
+
182
+ /**
183
+ * getImagesAcceptsOnlySmallMediumAndLargeAsSecondKey
184
+ *
185
+ * @test
186
+ * @expectedException InvalidArgumentException
187
+ */
188
+ public function getImagesAcceptsOnlySmallMediumAndLargeAsSecondKey() {
189
+ $this->receiver->getImage('http://elefunds.de/img/sample.jpg', 'horizontal', 'large');
190
+ }
191
+
192
+ /**
193
+ * setImagesAcceptsAValidStructuredArrayOfImages
194
+ *
195
+ * @test
196
+ */
197
+ public function setImagesAcceptsAValidStructuredArrayOfImages() {
198
+ $images = array(
199
+ 'horizontal' => array(
200
+
201
+ 'small' => 'http://elefunds.de/img/logo1.png',
202
+ 'medium' => 'http://elefunds.de/img/logo2.png',
203
+ 'large' => 'http://elefunds.de/img/logo3.png'
204
+
205
+ ),
206
+
207
+ 'vertical' => array(
208
+
209
+ 'small' => 'http://elefunds.de/img/logo1.png',
210
+ 'medium' => 'http://elefunds.de/img/logo2.png',
211
+ 'large' => 'http://elefunds.de/img/logo3.png'
212
+
213
+ )
214
+
215
+ );
216
+
217
+ $this->receiver->setImages($images);
218
+
219
+ $settedArray = $this->receiver->getImages();
220
+
221
+ $this->assertArrayHasKey('horizontal', $settedArray);
222
+ $this->assertArrayHasKey('vertical', $settedArray);
223
+ $this->assertArrayHasKey('small', $settedArray['horizontal']);
224
+ $this->assertArrayHasKey('medium', $settedArray['horizontal']);
225
+ $this->assertArrayHasKey('large', $settedArray['horizontal']);
226
+ $this->assertArrayHasKey('small', $settedArray['vertical']);
227
+ $this->assertArrayHasKey('medium', $settedArray['vertical']);
228
+ $this->assertArrayHasKey('large', $settedArray['vertical']);
229
+
230
+ $this->assertSame('http://elefunds.de/img/logo1.png', $settedArray['horizontal']['small']);
231
+ $this->assertSame('http://elefunds.de/img/logo2.png', $settedArray['horizontal']['medium']);
232
+ $this->assertSame('http://elefunds.de/img/logo3.png', $settedArray['horizontal']['large']);
233
+ $this->assertSame('http://elefunds.de/img/logo1.png', $settedArray['vertical']['small']);
234
+ $this->assertSame('http://elefunds.de/img/logo2.png', $settedArray['vertical']['medium']);
235
+ $this->assertSame('http://elefunds.de/img/logo3.png', $settedArray['vertical']['large']);
236
+
237
+ // Part structures are okay as well
238
+ $images = array(
239
+ 'horizontal' => array(
240
+
241
+ 'small' => 'http://elefunds.de/img/logo1.png',
242
+ 'medium' => 'http://elefunds.de/img/logo2.png',
243
+ )
244
+ );
245
+
246
+ $this->receiver->setImages($images);
247
+
248
+ $settedArray = $this->receiver->getImages();
249
+ $this->assertArrayHasKey('horizontal', $settedArray);
250
+ $this->assertArrayHasKey('small', $settedArray['horizontal']);
251
+ $this->assertArrayHasKey('medium', $settedArray['horizontal']);
252
+ $this->assertSame('http://elefunds.de/img/logo1.png', $settedArray['horizontal']['small']);
253
+ $this->assertSame('http://elefunds.de/img/logo2.png', $settedArray['horizontal']['medium']);
254
+ }
255
+
256
+ /**
257
+ * setImagesThrowsErrorOnInvalidArrayStructure
258
+ *
259
+ * @test
260
+ * @expectedException InvalidArgumentException
261
+ */
262
+ public function setImagesThrowsErrorOnInvalidArrayStructure() {
263
+ $images = array(
264
+ 'horizontal' => array(
265
+
266
+ 'small' => 'http://elefunds.de/img/logo1.png',
267
+ 'IM NOT VALID' => 'http://elefunds.de/img/logo2.png',
268
+ 'large' => 'http://elefunds.de/img/logo3.png'
269
+
270
+ ),
271
+
272
+ 'IM NOT VALID' => array(
273
+
274
+ 'small' => 'http://elefunds.de/img/logo1.png',
275
+ 'medium' => 'http://elefunds.de/img/logo2.png',
276
+ 'large' => 'http://elefunds.de/img/logo3.png'
277
+
278
+ )
279
+
280
+ );
281
+
282
+ $this->receiver->setImages($images);
283
+ }
284
+
285
+ /**
286
+ * setImagesThrowsErrorIfNoMultidimensionalArrayGiven
287
+ *
288
+ * @test
289
+ * @expectedException InvalidArgumentException
290
+ */
291
+ public function setImagesThrowsErrorIfNoMultidimensionalArrayGiven() {
292
+ $images = array(
293
+ 'horizontal' => array(
294
+
295
+ 'small' => 'http://elefunds.de/img/logo1.png',
296
+ 'medium' => 'http://elefunds.de/img/logo2.png',
297
+ 'large' => 'http://elefunds.de/img/logo3.png'
298
+
299
+ ),
300
+
301
+ 'vertical' => 'http://elefunds.de/img/logo1.png'
302
+
303
+ );
304
+
305
+ $this->receiver->setImages($images);
306
+ }
307
+
308
+ /**
309
+ * isValidReturnsTrueIfValidTimeIsInTheFuture
310
+ *
311
+ * @test
312
+ */
313
+ public function isValidReturnsTrueIfValidTimeIsInTheFuture() {
314
+
315
+ $validTime = new DateTime();
316
+ $validTime->modify('+ 1 month');
317
+
318
+ $this->receiver->setValidTime($validTime);
319
+
320
+ $this->assertSame(TRUE, $this->receiver->isValid());
321
+
322
+ }
323
+
324
+ /**
325
+ * isValidReturnsFalseIfValidTimeIsInThePast
326
+ *
327
+ * @test
328
+ */
329
+ public function isValidReturnsFalseIfValidTimeIsInThePast() {
330
+
331
+ $validTime = new DateTime();
332
+ $validTime->modify('- 1 month');
333
+
334
+ $this->receiver->setValidTime($validTime);
335
+
336
+ $this->assertSame(FALSE, $this->receiver->isValid());
337
+
338
+ }
339
+
340
+ }
lib/Elefunds/Test/Unit/View/BaseViewTest.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/../../../View/BaseView.php';
41
+
42
+ /**
43
+ * Unit Test for Elefunds_View_BaseView.
44
+ *
45
+ * @package elefunds API PHP Library
46
+ * @subpackage Test
47
+ * @author Christian Peters <christian@elefunds.de>
48
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
49
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
50
+ * @link http://www.elefunds.de
51
+ * @since File available since Release 1.0.0
52
+ */
53
+ class Elefunds_Test_Unit_View_BaseViewTest extends PHPUnit_Framework_TestCase {
54
+
55
+ /**
56
+ * @var Elefunds_View_BaseView
57
+ */
58
+ protected $view;
59
+
60
+ /**
61
+ * BaseView is meant to be extended, so we have to do some tricks for proper testing ...
62
+ *
63
+ * @var ReflectionClass
64
+ */
65
+ protected $reflectionClass;
66
+
67
+ /**
68
+ * Sets up the class under test.
69
+ */
70
+ public function setUp() {
71
+ $this->view = new Elefunds_View_BaseView();
72
+
73
+ // Set dummy test name
74
+ $this->view->setTemplate('Dummy');
75
+
76
+ // We need some reflection for more insight here ...
77
+ $this->reflectionClass = new ReflectionClass('Elefunds_View_BaseView');
78
+
79
+ }
80
+
81
+ /**
82
+ * registerHooksThrowsErrorIfClassDoesNotExist
83
+ *
84
+ * @test
85
+ * @expectedException InvalidArgumentException
86
+ */
87
+ public function registerHooksThrowsErrorIfClassDoesNotExist() {
88
+ $this->view->registerAssignHook('someVar', 'NonExistingClass', 'NonExistingMethod');
89
+ }
90
+
91
+ /**
92
+ * registerHooksThrowsErrorIfMethodDoesNotExist
93
+ *
94
+ * @test
95
+ * @expectedException InvalidArgumentException
96
+ */
97
+ public function registerHooksThrowsErrorIfMethodDoesNotExist() {
98
+ $this->view->registerAssignHook('someVar', $this, 'NonExistingMethod');
99
+ }
100
+
101
+ /**
102
+ * registerHooksAddsHookIfClassAndMethodExistsAndItGetsCalledWhenAKeyIsAssigned
103
+ *
104
+ * @test
105
+ */
106
+ public function registerHooksAddsHookIfClassAndMethodExistsAndItGetsCalledWhenAKeyIsAssigned() {
107
+
108
+ // The class itself does not matter, we could use any as hook
109
+ $sampleClass = $this->getMock('Elefunds_View_BaseView');
110
+ $sampleClass->expects($this->once())
111
+ ->method('getCssFiles');
112
+
113
+ $this->view->registerAssignHook('someKey', $sampleClass, 'getCssFiles');
114
+ $this->view->assign('someKey', 'someValue');
115
+
116
+ }
117
+
118
+
119
+ /**
120
+ * setCssFilesCalculatesTheCorrectPathAndChecksForExistance
121
+ *
122
+ * @test
123
+ */
124
+ public function setCssFilesCalculatesTheCorrectPathAndChecksForExistance() {
125
+
126
+ $additionalInformation = array();
127
+ try {
128
+ $this->view->addCssFile('test.css');
129
+ } catch (Elefunds_Exception_ElefundsException $exception) {
130
+
131
+ $additionalInformation = $exception->getAdditionalInformation();
132
+ }
133
+
134
+ $this->assertSame('Template/Dummy/Css/test.css', $additionalInformation['filepath']);
135
+
136
+ }
137
+
138
+ /**
139
+ * setJavascriptFilesCalculatesTheCorrectPathAndChecksForExistance
140
+ *
141
+ * @test
142
+ */
143
+ public function setJavascriptFilesCalculatesTheCorrectPathAndChecksForExistance() {
144
+
145
+ $additionalInformation = array();
146
+ try {
147
+ $this->view->addJavascriptFile('test.js');
148
+ } catch (Elefunds_Exception_ElefundsException $exception) {
149
+ $additionalInformation = $exception->getAdditionalInformation();
150
+ }
151
+
152
+ $this->assertSame('Template/Dummy/Javascript/test.js', $additionalInformation['filepath']);
153
+
154
+ }
155
+
156
+ /**
157
+ * assignSetsValueToTheView
158
+ *
159
+ * @test
160
+ */
161
+ public function assignSetsValueToTheView() {
162
+
163
+ $foo = new stdClass();
164
+ $foo->bar = 'baz';
165
+
166
+ $this->view->assign('foo', $foo);
167
+
168
+ $reflectionProperty = $this->reflectionClass->getProperty('view');
169
+ $reflectionProperty->setAccessible(TRUE);
170
+ $view = $reflectionProperty->getValue($this->view);
171
+ $this->assertSame($foo->bar, $view['foo']->bar);
172
+
173
+ }
174
+
175
+ /**
176
+ * assignMultipleAssignsMultipleValues
177
+ *
178
+ * @test
179
+ */
180
+ public function assignMultipleAssignsMultipleValues() {
181
+ $this->view->assignMultiple(array(
182
+ 'foo' => 'bar',
183
+ 'baz' => 'boo'
184
+ ));
185
+
186
+ $reflectionProperty = $this->reflectionClass->getProperty('view');
187
+ $reflectionProperty->setAccessible(TRUE);
188
+ $view = $reflectionProperty->getValue($this->view);
189
+ $this->assertSame('bar', $view['foo']);
190
+ $this->assertSame('boo', $view['baz']);
191
+ }
192
+
193
+ /**
194
+ * renderCalculatesTheCorrectPathToViewPhtmlAndChecksForExistance
195
+ *
196
+ * @test
197
+ */
198
+ public function renderCalculatesTheCorrectPathToViewPhtmlAndChecksForExistance() {
199
+
200
+ try {
201
+ $this->view->render('Test');
202
+ } catch (Elefunds_Exception_ElefundsException $exception) {
203
+ $additionalInformation = $exception->getAdditionalInformation();
204
+ }
205
+
206
+ $filepathExtractDoesMatch = strpos($additionalInformation['filepath'], 'Template/Dummy/Test.phtml') !== FALSE;
207
+ $this->assertSame(TRUE, $filepathExtractDoesMatch);
208
+
209
+ }
210
+
211
+ /**
212
+ * renderTakesFullpathIfFlagIsSet
213
+ *
214
+ * @test
215
+ */
216
+ public function renderTakesFullpathIfFlagIsSet() {
217
+ try {
218
+ $this->view->render('FullyQualifiedGiven', TRUE);
219
+ } catch (Elefunds_Exception_ElefundsException $exception) {
220
+ $additionalInformation = $exception->getAdditionalInformation();
221
+ }
222
+
223
+ $filepathExtractDoesMatch = strpos($additionalInformation['filepath'], 'FullyQualifiedGiven') !== FALSE;
224
+ $this->assertSame(TRUE, $filepathExtractDoesMatch);
225
+ }
226
+
227
+ }
lib/Elefunds/View/BaseView.php ADDED
@@ -0,0 +1,358 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+ require_once dirname(__FILE__) . '/ViewInterface.php';
41
+ require_once dirname(__FILE__) . '/../Exception/ElefundsException.php';
42
+
43
+ /**
44
+ * View for the elefunds API.
45
+ *
46
+ * @package elefunds API PHP Library
47
+ * @subpackage View
48
+ * @author Christian Peters <christian@elefunds.de>
49
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
50
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
51
+ * @link http://www.elefunds.de
52
+ * @since File available since Release 1.0.0
53
+ */
54
+ class Elefunds_View_BaseView implements Elefunds_View_ViewInterface {
55
+
56
+ /**
57
+ * @var array
58
+ */
59
+ protected $view = array();
60
+
61
+ /**
62
+ * The template of this plugin.
63
+ *
64
+ * @var string
65
+ */
66
+ protected $template;
67
+
68
+ /**
69
+ * @var array
70
+ */
71
+ protected $javascriptFiles = array();
72
+
73
+ /**
74
+ * @var array
75
+ */
76
+ protected $cssFiles = array();
77
+
78
+ /**
79
+ * Array of the following structure:
80
+ *
81
+ * <code
82
+ * $hook = array(
83
+ * 'hookName' => array(
84
+ * 'class' => 'someClass',
85
+ * 'method' => 'someMethod'
86
+ * )
87
+ * );
88
+ * </code>
89
+ *
90
+ *
91
+ * @var array
92
+ */
93
+ protected $assignHooks = array();
94
+
95
+ /**
96
+ * Sets the name of the template. This must be corresponding to
97
+ * the name of a folder in the Template folder.
98
+ *
99
+ * @param string $template
100
+ * @return Elefunds_View_ViewInterface
101
+ */
102
+ public function setTemplate($template) {
103
+ $this->template = ucfirst(strtolower($template));
104
+ return $this;
105
+ }
106
+
107
+ /**
108
+ * Returns the template name of this view.
109
+ *
110
+ * @return string
111
+ */
112
+ public function getTemplate() {
113
+ return $this->template;
114
+ }
115
+
116
+ /**
117
+ * Returns all javascript files that are required for this plugin to work in their correct order.
118
+ *
119
+ * The given path is relative to the folder of this library without trailing slash. E.g.:
120
+ *
121
+ * 'Template/YourTemplate/Javascript/script.min.js'
122
+ *
123
+ * Hence, you have to add your base path ahead of it if you want to include it.
124
+ *
125
+ * Like this:
126
+ *
127
+ * <code>
128
+ * <?php foreach($javaScripts as $javaScript): ?>
129
+ * <script type="text/javascript" src="http://elefunds.de/plugins/<?php echo $javascript; ?>"></script>
130
+ * <?php endforeach; ?>
131
+ * </code>
132
+ *
133
+ * If you write your own template files, minimize your javascript and try to deliver as few as possible.
134
+ *
135
+ * @return array
136
+ */
137
+ public function getJavascriptFiles() {
138
+ return $this->javascriptFiles;
139
+ }
140
+
141
+ /**
142
+ * Returns all css files that are required for this plugin to work in their correct order.
143
+ *
144
+ * The given path is relative to the folder of this library without trailing slash. E.g.:
145
+ *
146
+ * 'Template/YourTemplate/Css/styles.css'
147
+ *
148
+ * Hence, you have to add your basepath ahead of it if you want to include it.
149
+ *
150
+ * Like this:
151
+ *
152
+ * <code>
153
+ * <?php foreach($cssFiles as $cssFile): ?>
154
+ * <link rel="stylesheet" type="text/css" href="http://elefunds.de/plugins/<?php echo $cssFile; ?>">
155
+ * <?php endforeach; ?>
156
+ * </code>
157
+ *
158
+ * If you write your own template files, minimze your css files and try to deliver as few as possible.
159
+ *
160
+ * @return array
161
+ */
162
+ public function getCssFiles() {
163
+ return $this->cssFiles;
164
+ }
165
+
166
+ /**
167
+ * Removes all css files.
168
+ *
169
+ * @return void
170
+ */
171
+ public function flushCssFiles() {
172
+ $this->cssFiles = array();
173
+ }
174
+
175
+ /**
176
+ * Adds hooks that are called when a value is assigned to the view.
177
+ *
178
+ * Hence you can auto-calculate dependencies (like a round up suggestion when a grand
179
+ * total is assigned).
180
+ *
181
+ * Hooks are called with a reference to this view (so you can assign for yourself) and the
182
+ * called value as second parameter.
183
+ *
184
+ * Be sure that all classes are required_once.
185
+ *
186
+ * @param string $name equals the assignValue that should be hooked.
187
+ * @param mixed $class string (class name) or instance
188
+ * @param string $method
189
+ * @throws InvalidArgumentException
190
+ * @return Elefunds_View_ViewInterface
191
+ */
192
+ public function registerAssignHook($name, $class, $method) {
193
+
194
+ if (method_exists($class, $method)) {
195
+ $this->assignHooks[$name] = array(
196
+ 'class' => $class,
197
+ 'method' => $method
198
+ );
199
+ } else {
200
+ throw new InvalidArgumentException('Given method or class does not exist or is not used. Did you require_once it?', 1348567047);
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Returns all already assigned values.
206
+ *
207
+ * @return array
208
+ */
209
+ public function getAssignments() {
210
+ return $this->view;
211
+ }
212
+
213
+ /**
214
+ * Assigns variables to the view and calls hooks if registered.
215
+ *
216
+ * @param string $key
217
+ * @param mixed $value
218
+ * @throws InvalidArgumentException if given key is not a string
219
+ * @return Elefunds_View_ViewInterface
220
+ */
221
+ public function assign($key, $value) {
222
+ if (is_string($key)) {
223
+ $this->view[$key] = $value;
224
+
225
+ if (isset($this->assignHooks[$key])) {
226
+ call_user_func_array(
227
+ array(
228
+ $this->assignHooks[$key]['class'],
229
+ $this->assignHooks[$key]['method']
230
+ ),
231
+ array($this, $value)
232
+ );
233
+ }
234
+
235
+ } else {
236
+ throw new InvalidArgumentException('Given key must be a string.', 1347988964615);
237
+ }
238
+ return $this;
239
+ }
240
+
241
+ /**
242
+ * Add multiple variables to the view.
243
+ *
244
+ * @param array $values array in the format array(key1 => value1, key2 => value2).
245
+ * @return Elefunds_View_ViewInterface
246
+ */
247
+ public function assignMultiple(array $values) {
248
+ foreach($values as $key => $value) {
249
+ $this->assign($key, $value);
250
+ }
251
+ return $this;
252
+ }
253
+
254
+
255
+ /**
256
+ * Renders the given output.
257
+ *
258
+ * @param string $templateName name of the template to render
259
+ * @param bool $givenTemplateNameIsAbsolutePathWithFullyQualifiedFilename
260
+ * @throws Elefunds_Exception_ElefundsException
261
+ *
262
+ * @return string the rendered HTML
263
+ */
264
+ public function render($templateName = 'View', $givenTemplateNameIsAbsolutePathWithFullyQualifiedFilename = FALSE) {
265
+
266
+ if ($givenTemplateNameIsAbsolutePathWithFullyQualifiedFilename) {
267
+ $filepath = $templateName;
268
+ } else {
269
+ $filepath = dirname(__FILE__) . '/../Template/' . $this->template . '/' . $templateName . '.phtml';
270
+ }
271
+
272
+ if (file_exists($filepath)) {
273
+ $view = $this->view;
274
+
275
+ ob_start();
276
+ include_once $filepath;
277
+ $output = ob_get_contents();
278
+ ob_end_clean();
279
+
280
+ return $output;
281
+ } else {
282
+ throw new Elefunds_Exception_ElefundsException('View.phtml not found in your template folder.',
283
+ 1348041578910,
284
+ array('filepath' => $filepath));
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Add your css file with it's pure file name (e.g. 'styles.css') and save it
290
+ * as /Template/YourTemplateFolder/Css/styles.css
291
+ *
292
+ * @param string $file
293
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
294
+ * @return Elefunds_View_ViewInterface
295
+ */
296
+ public function addCssFile($file) {
297
+ $templateFolder = ucfirst(strtolower($this->template));
298
+ $filepath = 'Template/' . $templateFolder . '/Css/' . $file;
299
+ if (file_exists(dirname(__FILE__) . '/../' . $filepath)) {
300
+ $this->cssFiles[] = $filepath;
301
+ } else {
302
+ throw new Elefunds_Exception_ElefundsException('Given CSS file ' . $file . ' does not exist.',
303
+ 1348041578905,
304
+ array('filepath' => $filepath));
305
+ }
306
+ }
307
+
308
+ /**
309
+ * Add your css files.
310
+ *
311
+ * Wrapper for addCss($file).
312
+ *
313
+ * @param array $files
314
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
315
+ * @return Elefunds_View_ViewInterface
316
+ */
317
+ public function addCssFiles(array $files) {
318
+ foreach ($files as $file) {
319
+ $this->addCssFile($file);
320
+ }
321
+ }
322
+
323
+ /**
324
+ * Add your js file with it's pure file name (e.g. 'myjavascript.js') and save it
325
+ * as /Template/YourTemplateFolder/Javascript/myjavascript.js
326
+ *
327
+ * @param string $file
328
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
329
+ * @return Elefunds_View_ViewInterface
330
+ */
331
+ public function addJavascriptFile($file) {
332
+ $templateFolder = ucfirst(strtolower($this->template));
333
+ $filepath = 'Template/' . $templateFolder . '/Javascript/' . $file;
334
+ if (file_exists(dirname(__FILE__) . '/../' . $filepath)) {
335
+ $this->javascriptFiles[] = $filepath;
336
+ } else {
337
+ throw new Elefunds_Exception_ElefundsException('Given Javascript file ' . $file . ' does not exist.',
338
+ 1348041578907,
339
+ array('filepath' => $filepath));
340
+ }
341
+ }
342
+
343
+ /**
344
+ * Add your js files.
345
+ *
346
+ * Wrapper for addJavascriptFiles($file).
347
+ *
348
+ * @param array $files
349
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
350
+ * @return Elefunds_View_ViewInterface
351
+ */
352
+ public function addJavascriptFiles(array $files) {
353
+ foreach ($files as $file) {
354
+ $this->addJavascriptFile($file);
355
+ }
356
+ }
357
+
358
+ }
lib/Elefunds/View/ViewInterface.php ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * elefunds API PHP Library
5
+ *
6
+ * Copyright (c) 2012, elefunds GmbH <hello@elefunds.de>.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * Neither the name of the elefunds GmbH nor the names of its
22
+ * contributors may be used to endorse or promote products derived
23
+ * from this software without specific prior written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
+ * POSSIBILITY OF SUCH DAMAGE.
37
+ *
38
+ */
39
+
40
+
41
+ /**
42
+ * View Interface
43
+ *
44
+ * @package elefunds API PHP Library
45
+ * @subpackage View
46
+ * @author Christian Peters <christian@elefunds.de>
47
+ * @copyright 2012 elefunds GmbH <hello@elefunds.de>
48
+ * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
49
+ * @link http://www.elefunds.de
50
+ * @since File available since Release 1.0.0
51
+ */
52
+ interface Elefunds_View_ViewInterface {
53
+
54
+ /**
55
+ * Sets the name of the template. This must be corresponding to
56
+ * the name of a folder in the Template folder.
57
+ *
58
+ * @param string $template
59
+ * @return Elefunds_View_BaseView
60
+ */
61
+ public function setTemplate($template);
62
+
63
+ /**
64
+ * Returns the template name of this view.
65
+ *
66
+ * @return string
67
+ */
68
+ public function getTemplate();
69
+
70
+ /**
71
+ * Returns all javascript files that are required for this plugin to work in their correct order.
72
+ *
73
+ * The given path is relative to the folder of this library without trailing slash. E.g.:
74
+ *
75
+ * 'Template/YourTemplate/Javascript/script.min.js'
76
+ *
77
+ * Hence, you have to add your basepath ahead of it if you want to include it.
78
+ *
79
+ * Like this:
80
+ *
81
+ * <code>
82
+ * <?php foreach($javascripts as $javascript): ?>
83
+ * <script type="text/javascript" src="http://elefunds.de/plugins/<?php echo $javascript; ?>"></script>
84
+ * <?php endforeach; ?>
85
+ * </code>
86
+ *
87
+ * If you write your own template files, minimize your javascript and try to deliver as few as possible.
88
+ *
89
+ * @return array
90
+ */
91
+ public function getJavascriptFiles();
92
+
93
+ /**
94
+ * Returns all css files that are required for this plugin to work in their correct order.
95
+ *
96
+ * The given path is relative to the folder of this library without trailing slash. E.g.:
97
+ *
98
+ * 'Template/YourTemplate/Css/styles.css'
99
+ *
100
+ * Hence, you have to add your base path ahead of it if you want to include it.
101
+ *
102
+ * Like this:
103
+ *
104
+ * <code>
105
+ * <?php foreach($cssFiles as $cssFile): ?>
106
+ * <link rel="stylesheet" type="text/css" href="http://elefunds.de/plugins/<?php echo $cssFile; ?>">
107
+ * <?php endforeach; ?>
108
+ * </code>
109
+ *
110
+ * If you write your own template files, minimize your css files and try to deliver as few as possible.
111
+ *
112
+ * @return array
113
+ */
114
+ public function getCssFiles();
115
+
116
+ /**
117
+ * Adds hooks that are called when a value is assigned to the view.
118
+ *
119
+ * Hence you can auto-calculate dependencies (like a round up suggestion when a grand
120
+ * total is assigned).
121
+ *
122
+ * Hooks are called with a reference to this view (so you can assign for yourself) and the
123
+ * called value as second parameter.
124
+ *
125
+ * Be sure that all classes are required_once.
126
+ *
127
+ * @param string $name equals the assignValue that should be hooked.
128
+ * @param mixed $class string (class name) or instance
129
+ * @param string $method
130
+ * @throws InvalidArgumentException
131
+ * @return Elefunds_View_ViewInterface
132
+ */
133
+ public function registerAssignHook($name, $class, $method);
134
+
135
+ /**
136
+ * Returns all already assigned values.
137
+ *
138
+ * @return array
139
+ */
140
+ public function getAssignments();
141
+
142
+ /**
143
+ * Assigns variables to the view.
144
+ *
145
+ * @param string $key
146
+ * @param mixed $value
147
+ * @throws InvalidArgumentException if given key is not a string
148
+ * @return Elefunds_View_BaseView
149
+ */
150
+ public function assign($key, $value);
151
+
152
+ /**
153
+ * Add multiple variables to the view.
154
+ *
155
+ * @param array $values array in the format array(key1 => value1, key2 => value2).
156
+ * @return Elefunds_View_BaseView
157
+ */
158
+ public function assignMultiple(array $values);
159
+
160
+ /**
161
+ * Renders the given output.
162
+ *
163
+ * @param string $templateName name of the template to render
164
+ * @param bool $givenTemplateNameIsAbsolutePathWithFullyQualifiedFilename
165
+ *
166
+ * @return string the rendered HTML
167
+ */
168
+ public function render($templateName = 'View', $givenTemplateNameIsAbsolutePathWithFullyQualifiedFilename = FALSE);
169
+
170
+ /**
171
+ * Add your css file with it's pure file name (e.g. 'styles.css') and save it
172
+ * as /Template/YourTemplateFolder/Css/styles.css
173
+ *
174
+ * @param string $file
175
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
176
+ * @return Elefunds_View_BaseView
177
+ */
178
+ public function addCssFile($file);
179
+
180
+ /**
181
+ * Add your css files.
182
+ *
183
+ * Wrapper for addCss($file).
184
+ *
185
+ * @param array $files
186
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
187
+ * @return Elefunds_View_BaseView
188
+ */
189
+ public function addCssFiles(array $files);
190
+
191
+ /**
192
+ * Add your js file with it's pure file name (e.g. 'myjavascript.js') and save it
193
+ * as /Template/YourTemplateFolder/Javascript/myjavascript.js
194
+ *
195
+ * @param string $file
196
+ * @throws InvalidArgumentException if given key is not a string
197
+ * @return Elefunds_View_BaseView
198
+ */
199
+ public function addJavascriptFile($file);
200
+
201
+ /**
202
+ * Add your js files.
203
+ *
204
+ * Wrapper for addJavascriptFiles($file).
205
+ *
206
+ * @param array $files
207
+ * @throws Elefunds_Exception_ElefundsException if file does not exist
208
+ * @return Elefunds_View_BaseView
209
+ */
210
+ public function addJavascriptFiles(array $files);
211
+
212
+ /**
213
+ * Removes all css files.
214
+ *
215
+ * @return void
216
+ */
217
+ public function flushCssFiles();
218
+
219
+ }
package.xml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>lfnds_donation</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/BSD-3-Clause">The BSD 3-Clause License</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>elefunds erm&#xF6;glicht Ihren Kunden freiw&#xE4;hlbare Betr&#xE4;ge aufzurunden und an eine oder mehrere renommierte Charities zu spenden.</summary>
10
+ <description>Mit dem elefunds Spendenmodul stellen wir Ihnen die weltweit erste dynamische ONE-CLICK-Spende f&#xFC;r Ihren Onlineshop zur Verf&#xFC;gung.&#xD;
11
+ &#xD;
12
+ Ihre Kunden werden direkt am Point-of-Sale abgeholt und bekommen die Option zus&#xE4;tzlich zum Warenkorbwert einen weiteren, freiw&#xE4;hlbaren Betrag an bis zu drei renommierte und namhafte Hilfsorganisationen (z.B. Aktion Deutschland Hilft, die SOS-Kinderd&#xF6;rfer weltweit oder den WWF) zu spenden. Im Anschluss daran teilen Ihre Kunden ihr Engagement via Facebook und Twitter und berichten Ihren Freunden von Ihrem Shop.&#xD;
13
+ &#xD;
14
+ Der Kunde verbindet sein Einkaufserlebnis mit dem guten Gef&#xFC;hl, sich gemeinsam mit Ihnen engagiert zu haben und beh&#xE4;lt Ihren Shop in positiver Erinnerung.&#xD;
15
+ Sie erh&#xF6;hen Ihre Kundenbindung und betreiben gleichzeitig effektive Neukundenakquise, da jeder Post in den sozialen Netzwerken eine Verlinkung zu ihrem Shop enth&#xE4;lt. &#xD;
16
+ Mit durchschnittlichen Aktivierungszahlen von &#xFC;ber 10% ist das Empfehlungsmarketing par excellence. &#xD;
17
+ &#xD;
18
+ Ihre Vorteile:&#xD;
19
+ &#xD;
20
+ - Emotionalisierung des Kunden beim Kaufabschluss&#xD;
21
+ - Hoher Bekanntheitsgrad der Hilfsorganisationen&#xD;
22
+ - Positive Au&#xDF;enwirkung f&#xFC;r soziales Engagement&#xD;
23
+ - Keine Einschr&#xE4;nkung der Conversion im Checkout&#xD;
24
+ - Empfehlungsmarketing und Neukundengenerierung&#xD;
25
+ - Customer Lifetime Value steigt&#xD;
26
+ - Analyse und Auswertungen durch elefunds&#xD;
27
+ - ein nachhaltiges und zeitloses PR &amp; Marketingtool&#xD;
28
+ - einfache Implementierung durch den Plugin Manager&#xD;
29
+ &#xD;
30
+ Wir unterst&#xFC;tzen Sie:&#xD;
31
+ &#xA0; &#xA0;&#x2022; &#xA0; &#xA0;bei der Auswahl der Hilfsorganisationen &#xD;
32
+ &#xA0; &#xA0;&#x2022; &#xA0; &#xA0;der Kommunikation des Engagements &#xD;
33
+ &#xA0; &#xA0;&#x2022; &#xA0; &#xA0;der Analyse, Abrechnung und dem Spendentransfer&#xD;
34
+ &#xD;
35
+ Die Spenden werden mit dem Warenkorbwert eingezogen. Wir stellen Ihnen eine Spendenaufstellung zur Verf&#xFC;gung. Sie leiten die Spendengelder einfach an die elefunds Stiftung weiter. Von hier transferieren wir geb&#xFC;ndelt und zu 100% an die Organisationen weiter. Auf monatlicher Basis stellen wir Ihnen diese Analysen und Auswertungen zur Verf&#xFC;gung, damit Sie Ihre Kunden &#xFC;ber die Erfolge und ihr Engagement informieren k&#xF6;nnen. elefunds wird von den Charit&#xE9;s teilweise erfolgsabh&#xE4;ngig verg&#xFC;tet.&#xD;
36
+ &#xD;
37
+ Helfen Sie uns, die Welt ein bisschen besser zu machen und engagieren Sie sich noch heute mit elefunds und Ihren Kunden f&#xFC;r eine saubere Umwelt, bessere Gesundheits- und Bildungsbedingungen sowie f&#xFC;r den Tierschutz und in der Katastrophenhilfe. &#xD;
38
+ Laden Sie sich jetzt unser Modul herunter, dass sich in wenigen einfachen Schritten in jeden Onlineshop integrieren l&#xE4;sst.&#xD;
39
+ &#xD;
40
+ We turn emotions into loyalty!&#xD;
41
+ &#xD;
42
+ www.elefunds.de&#xD;
43
+ kontakt@elefunds.de&#xD;
44
+ Tel. +49 (0)30 48 49 24 39&#xD;
45
+ &#xD;
46
+ Wir bitten zu entschuldigen, dass im Interesse unserer Charitypartner Online Shops, die &#xFC;berwiegend Alkoholika und Zigaretten/Zigarren anbieten, den elefunds Service nicht nutzen k&#xF6;nnen. Grunds&#xE4;tzlich ausgeschlossen sind Online Shops, die Pornographie und Waffen jeglicher Art vertreiben.</description>
47
+ <notes>Stable Release</notes>
48
+ <authors><author><name>elefunds GmbH</name><user>elefunds</user><email>kontakt@elefunds.de</email></author></authors>
49
+ <date>2013-04-17</date>
50
+ <time>19:51:46</time>
51
+ <contents><target name="magecommunity"><dir name="Lfnds"><dir name="Donation"><dir name="Block"><dir name="Checkout"><file name="Banner.php" hash="2a871f599052b81a75d95315158479c5"/><file name="Socialmedia.php" hash="8de51409d7a36b490ed58653b671e43c"/></dir><dir name="Page"><file name="Head.php" hash="cc83ce329b6c6ebe1e7bcfc301468ee0"/></dir><dir name="Sales"><dir name="Order"><file name="Email.php" hash="ed610afb13caaac6c37bcff9db593601"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="8454d67e2f769a0e6505406906860adf"/></dir><dir name="Manager"><file name="SyncManager.php" hash="a01f05a2e50eb07e4942c0b7754f6f54"/></dir><dir name="Model"><file name="Donation.php" hash="dcdb5e5071a91e4f2a5021dd9f16704c"/><dir name="Mysql4"><dir name="Donation"><file name="Collection.php" hash="8187802aca89ac243d256e9d7cb6dfe3"/></dir><file name="Donation.php" hash="382a7f808a334045f6753565f01230ce"/><dir name="Receiver"><file name="Collection.php" hash="992d049163b3a5f75568269fdf2272c5"/></dir><file name="Receiver.php" hash="bb9396fb9bb37941ec5bdbb6239fdcb0"/></dir><file name="Observer.php" hash="a14a03bbf4d6f8ba8c2b2a07cda210dc"/><file name="Receiver.php" hash="9f236002e9a3215f5b3a089c0ce9623a"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Color.php" hash="61f94ffc5df0db5238a6e6ee920ff9e6"/><file name="Payment.php" hash="2bf3a981e5b0a2dd92eaadc02fd0bdbd"/><file name="Position.php" hash="ec434ec88b85ca4b664026bfa066bc74"/><file name="Theme.php" hash="1b05ba613d2093ec5fc759a1dfbb1334"/></dir></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="d56f46626aefb34798273181b4c7b706"/></dir><dir name="etc"><file name="config.xml" hash="779d52f354685c49f235d0e517c5d8e1"/><file name="system.xml" hash="8e2d02a862ce6d6864e826d49cb1a588"/></dir><dir name="sql"><dir name="lfnds_donation_setup"><file name="mysql4-install-1.0.0.php" hash="4d07ca42ae308bd2051df30f3a6cfd63"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="lfnds_donation.xml" hash="cdaa84ebe0db2c6662d28e66e8326513"/></dir><dir name="template"><dir name="lfnds"><dir name="donation"><dir name="checkout"><dir name="onepage"><dir name="review"><file name="donation_banner.phtml" hash="9edf0cf0ed946a637bbe4c2a52e18d60"/><file name="donation_banner_after.phtml" hash="24183a92eb517b2e76e8022d34f63edd"/><file name="donation_banner_before.phtml" hash="dcd489753304685d2f89e5e36faa9a82"/></dir><file name="socialmedia.phtml" hash="c7984a5752211f28dfe04fde2d44626f"/></dir></dir><dir name="mail"><file name="description.phtml" hash="788968e611e3777c06130dcfca06dfc0"/></dir><dir name="page"><dir name="html"><file name="head.phtml" hash="ce407ff5715c837d02b1aba7975bf512"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Lfnds_Donation.xml" hash="49ee8216f94bda0701b6a5c7b1fb99c3"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Lfnds_Donation.csv" hash="e0a11e265781c36c8efd41da0c63667a"/></dir><dir name="en_US"><file name="Lfnds_Donation.csv" hash="af1ebb72d80a27e2c7f57950ea702c33"/></dir></target><target name="magelib"><dir name="Elefunds"><dir name="Communication"><file name="CurlRequest.php" hash="b0c6ead08836395c5df543c0e35f03c6"/><file name="RestInterface.php" hash="06a1b8fecd4abf1204d48ccbcec6b4b0"/><dir name="certificate"><file name="GandiProSSLCA.pem" hash="215597d5040603701d032e1fa299746e"/></dir></dir><dir name="Configuration"><file name="BaseConfiguration.php" hash="9e481bfc1aa6b3f0e3d5a5f2866518d6"/><file name="ConfigurationInterface.php" hash="3f39571485f8d6bcca49e69d899c86b6"/><file name="DefaultConfiguration.php" hash="e5f749ab07052186746871f20edd554f"/></dir><dir name="Documentation"><file name="PHPGuideBasics.md" hash="da7e409b76ed4c5c5fdf0b966e6c1756"/><file name="PHPGuideConfiguration.md" hash="6ab57ceca89500bda60c6e02c0b20ed0"/><file name="PHPGuideTemplating.md" hash="6682ad669ab3062d8a04ea00a1f17f03"/></dir><dir name="Example"><file name="RawDataConfiguration.php" hash="4716aa63da8f00ec9becec510d7d6709"/><file name="ShopExampleCheckoutSuccessConfiguration.php" hash="f73f364c454adc00bc1974d908660345"/><file name="ShopExampleConfiguration.php" hash="263fd5cfe055f335bc70811da175b0f7"/><file name="rawDataExample.php" hash="ee18d728a678e03afe367a69ba94fe8d"/><file name="shopExample.php" hash="79bf411089286392c0e6753492c6694e"/><file name="shopExampleCheckoutSuccess.php" hash="58f9e9b36975ff23410c01a005a0ebbc"/></dir><dir name="Exception"><file name="ElefundsCommunicationException.php" hash="74213ff89ef5dcc2afd30766f6e49e05"/><file name="ElefundsException.php" hash="8d0e54b748898eab2286bf3fe46ee7ec"/></dir><file name="Facade.php" hash="1fd802e9125298dd9a0c1f43cf59be55"/><dir name="Model"><file name="Donation.php" hash="957c897dca79616f49b30e60e5c8d9a1"/><file name="DonationInterface.php" hash="3969390f2d5898835c4c7c74361cb618"/><file name="Factory.php" hash="5b92a5696db598f1d7e8a943cb407299"/><file name="Receiver.php" hash="5b63f6c8c5068b483923c93fb250137d"/><file name="ReceiverInterface.php" hash="5bc575aea8ca44762e2b353eb86a2e32"/></dir><file name="README.md" hash="f479705edf62b3697aab2d074798aada"/><dir name="Template"><dir name="Shop"><file name="CheckoutConfiguration.php" hash="42afcf507ef01c5b84cace0a6c500370"/><file name="CheckoutSuccess.phtml" hash="564c95ae206d22f50f38126cd1a7e351"/><file name="CheckoutSuccessConfiguration.php" hash="ba8c339472e44e3b8d9d82d6979fbc8a"/><dir name="Css"><file name="color.less" hash="4f18721f13cd8b26dbabcd2c11e844ac"/><file name="elefunds.less" hash="8a2f37d9eeb4cbea4607ccf0f005b370"/><file name="elefunds_dark_blue.min.css" hash="c30bca596ddb732c81fc3941d3ed0f52"/><file name="elefunds_dark_green.min.css" hash="47deea1b8f397eb279b71ba82e89e7e8"/><file name="elefunds_dark_grey.min.css" hash="1f202144f1d68547e07b0bee053ed8cd"/><file name="elefunds_dark_orange.min.css" hash="4660e08faadc310f23ba068020023473"/><file name="elefunds_dark_purple.min.css" hash="4f759f90f164dcc1d447d56a34d376cd"/><file name="elefunds_light_blue.min.css" hash="e39509ea7f014055528616a986b3ddbe"/><file name="elefunds_light_green.min.css" hash="b85854be499f48744f7d4d7bb451fb0a"/><file name="elefunds_light_grey.min.css" hash="f244fdce75ad270d56feeeffd2b5130d"/><file name="elefunds_light_orange.min.css" hash="e264e5d60e73bda315f5de53ce794783"/><file name="elefunds_light_purple.min.css" hash="719e20b305282e2750607ba90fd57687"/><file name="elements.less" hash="7e01dcb516db8e55c7f031f7da0492cf"/></dir><dir name="Helper"><file name="RequestHelper.php" hash="ee3986d02f97144333b56a955dd9595e"/></dir><dir name="Hooks"><file name="ShopHooks.php" hash="9a46f66b1ec8fa37d45e2e15467e5952"/></dir><dir name="Images"><file name="elefunds_item_main.png" hash="b89c61fbdc9c669034a92e9f40ce601b"/><file name="elefunds_item_small.png" hash="f55ceccecc0e76a8d019d8206905db88"/><file name="elefunds_item_thumbnail.png" hash="84bf08fff98b2f8a3f2a1616d73b432c"/></dir><dir name="Javascript"><file name="elefunds.jquery.js" hash="82a0763aee2eeb43a723d808ba7db72e"/><file name="elefunds.jquery.min.js" hash="b89c6146e0cf89f73fbccf15612b4972"/><file name="elefundsTT.jquery.js" hash="86e5170e6eea44cbdc5d44383e0404c5"/></dir><file name="ShopConfiguration.php" hash="227a7f2a7573392f3b8d2027669eb1e0"/><file name="View.phtml" hash="42e6d618bf8cb87ae038446db348104a"/></dir></dir><dir name="Test"><dir name="Unit"><dir name="Configuration"><file name="BaseConfigurationTest.php" hash="ec3513a6a8972be3efdb48318ecd10db"/><file name="DefaultConfigurationTest.php" hash="790159073ffb9f6e25c3ea5df0e0c49b"/></dir><dir name="Exception"><file name="ElefundsExceptionTest.php" hash="79339ebcce32e95aee348b6658c5ed88"/></dir><file name="FacadeTest.php" hash="c06016cbc6fc5aa58d104a47adef13c2"/><dir name="Model"><file name="DonationTest.php" hash="577f18fca07fb2361853daf32247be0c"/><file name="FactoryTest.php" hash="2dbb74d7bf67bbe1cea3f8b1e1b45c8d"/><file name="ReceiverTest.php" hash="a2f0667292bc3525bc571912aa2caad0"/></dir><dir name="View"><file name="BaseViewTest.php" hash="2d5f873cf48fbe7af1e77ce6055c1d8a"/></dir></dir></dir><dir name="View"><file name="BaseView.php" hash="20bfbf8d484c9d3c1874fdf4a6493f0e"/><file name="ViewInterface.php" hash="596f19ed7ca7853062d96a4d1bca67e3"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="lfnds_donation"><dir name="additional"><file name="elefunds_magento_additional.css" hash="73e4f3ae0bb9f6a1588ab9d97fb52333"/><file name="elefunds_magento_onestep_additional.css" hash="69076b25d2a3ac358487d5461ddf0b38"/></dir><file name="elefunds_dark_blue.min.css" hash="c30bca596ddb732c81fc3941d3ed0f52"/><file name="elefunds_dark_green.min.css" hash="47deea1b8f397eb279b71ba82e89e7e8"/><file name="elefunds_dark_grey.min.css" hash="1f202144f1d68547e07b0bee053ed8cd"/><file name="elefunds_dark_orange.min.css" hash="4660e08faadc310f23ba068020023473"/><file name="elefunds_dark_purple.min.css" hash="4f759f90f164dcc1d447d56a34d376cd"/><file name="elefunds_light_blue.min.css" hash="e39509ea7f014055528616a986b3ddbe"/><file name="elefunds_light_green.min.css" hash="b85854be499f48744f7d4d7bb451fb0a"/><file name="elefunds_light_grey.min.css" hash="f244fdce75ad270d56feeeffd2b5130d"/><file name="elefunds_light_orange.min.css" hash="e264e5d60e73bda315f5de53ce794783"/><file name="elefunds_light_purple.min.css" hash="719e20b305282e2750607ba90fd57687"/></dir></dir><dir name="images"><dir name="lfnds_donation"><file name="elefunds_item_main.png" hash="b89c61fbdc9c669034a92e9f40ce601b"/><file name="elefunds_item_small.png" hash="f55ceccecc0e76a8d019d8206905db88"/><file name="elefunds_item_thumbnail.png" hash="84bf08fff98b2f8a3f2a1616d73b432c"/></dir></dir><dir name="js"><dir name="lfnds_donation"><dir name="additional"><file name="elefunds_magento_onepage_additional.js" hash="c2d9635a9acab5a6a6508cfcb8ef8aab"/><file name="elefunds_magento_onestep_additional.js" hash="105b284f2e8c686ef1b02b3ff810f731"/></dir><file name="elefunds.jquery.js" hash="82a0763aee2eeb43a723d808ba7db72e"/><file name="elefunds.jquery.min.js" hash="b89c6146e0cf89f73fbccf15612b4972"/><file name="elefundsTT.jquery.js" hash="86e5170e6eea44cbdc5d44383e0404c5"/><file name="jQueryNoConflict.js" hash="e2060c4e5e5955c824723b13a212d3ec"/><file name="jquery-1.9.1.min.js" hash="397754ba49e9e0cf4e7c190da78dda05"/></dir></dir></dir></dir></dir></target></contents>
52
+ <compatible/>
53
+ <dependencies><required><php><min>5.3.2</min><max>5.4.14</max></php></required></dependencies>
54
+ </package>
skin/frontend/base/default/css/lfnds_donation/additional/elefunds_magento_additional.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Fix for Onepage-Checkout
3
+ * Adds Border to Elefunds-Module to fit in default-styling of onepage-checkout
4
+ */
5
+ #elefunds {
6
+ border-style: solid;
7
+ border-width: 0 1px;
8
+ border-color: #D9DDE3;
9
+ }
skin/frontend/base/default/css/lfnds_donation/additional/elefunds_magento_onestep_additional.css ADDED
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * ++ One Step Checkout Success (Social-Media-Share) Specific Styling ++
3
+ */
4
+ #elefunds_share {
5
+ width: 450px;
6
+ padding: 20px 20px 10px;
7
+ background: #f4f4f4;
8
+ border: 4px solid #ccc;
9
+ border-radius: 8px;
10
+ text-align: center;
11
+ }
12
+ #elefunds_share > a {
13
+ text-decoration: none;
14
+ }
15
+ #elefunds_share h3 {
16
+ font-weight: bold;
17
+ color: #222;
18
+ margin: 0;
19
+ }
20
+ #elefunds_share p {
21
+ font-size: 14px;
22
+ color: #666;
23
+ margin: 20px 0 10px;
24
+ padding: 10px 10px 20px;
25
+ }
26
+ #elefunds_share span {
27
+ font-style: normal;
28
+ font-size: 11px;
29
+ line-height: 21px;
30
+ margin-top: 6px;
31
+ vertical-align: top;
32
+ display: block;
33
+ }
34
+
35
+
36
+ /*
37
+ * ++ One Step Checkout Specific Styling ++
38
+ */
39
+
40
+ /*
41
+ * Hide elefunds-module first until JavaScript replaced it.
42
+ */
43
+ #onestepcheckout-form .elefunds {
44
+ display: none;
45
+ }
46
+ #onestepcheckout-form .elefunds.replaced {
47
+ display: block;
48
+ }
49
+
50
+
51
+ /*
52
+ * Hide sum in elefunds-container
53
+ * elefunds-donation is always shown in order-review
54
+ */
55
+ #elefunds_round_sum_container strong {
56
+ display: none;
57
+ }
58
+
59
+ /*
60
+ * ++ One Step Checkout - Row in Order-review which shows the elefunds-donation ++
61
+ */
62
+ .elefunds_donation_row {
63
+ display: none;
64
+ }
65
+ .elefunds_donation_row.active {
66
+ display: table-row;
67
+ }
68
+ .elefunds_donation_row .title {
69
+ font-style: italic;
70
+ }
71
+
72
+ /*
73
+ * Force sizes to auto
74
+ * Not able to prevent !important here because of inline-width-styles
75
+ */
76
+ #onestepcheckout-form .elefunds #elefunds_top,
77
+ #onestepcheckout-form .elefunds #elefunds_bottom,
78
+ #onestepcheckout-form .elefunds #elefunds_round_sum_container {
79
+ width: auto !important;
80
+ }
81
+
82
+
83
+ #onestepcheckout-form .elefunds {
84
+ border: 1px solid rgb(196, 196, 196);
85
+ -webkit-border-radius: 1px;
86
+ -moz-border-radius: 1px;
87
+ border-radius: 1px;
88
+ margin-top: 30px;
89
+ }
90
+ #onestepcheckout-form #elefunds_logo {
91
+ padding: 7px;
92
+ }
93
+ #onestepcheckout-form #elefunds_arrow {
94
+ background: url(https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png) repeat-x;
95
+ color: #444;
96
+ margin: 0 0 10px 0px;
97
+ position: relative;
98
+ }
99
+ #onestepcheckout-form #elefunds_arrow #elefunds_checkbox {
100
+ cursor: pointer;
101
+ left: 21px;
102
+ margin-top: 3px;
103
+ margin-right: 3px;
104
+ position: absolute;
105
+ top: 15px;
106
+ visibility: hidden;
107
+ }
108
+ /*
109
+ * IE8 Fix: TODO - Solution with conditional comments
110
+ */
111
+ #onestepcheckout-form #elefunds_arrow #elefunds_checkbox {
112
+ visibility: visible\0/;
113
+ }
114
+ #onestepcheckout-form #elefunds_arrow #elefunds_checkbox:checked + label {
115
+ background: url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_on.png') no-repeat;
116
+ }
117
+ #onestepcheckout-form #elefunds_arrow label {
118
+ background: url(https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_off.png) no-repeat;
119
+ cursor: pointer;
120
+ color: #DDD;
121
+ display: block;
122
+ font-family: 'Lucida Grande';
123
+ font-size: 11px;
124
+ font-weight: bold !important;
125
+ height: 43px;
126
+ padding: 6px 0 0 60px;
127
+ }
128
+
129
+ #onestepcheckout-form #elefunds_top {
130
+ background: url(https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png) repeat-x #efefef;
131
+ border-bottom: 1px solid rgb(219, 219, 219);
132
+ }
133
+
134
+ #onestepcheckout-form #elefunds_top > div {
135
+ margin-bottom: 10px;
136
+ }
137
+ #onestepcheckout-form #elefunds_top > div:before,
138
+ #onestepcheckout-form #elefunds_top > div:after {
139
+ content:"";
140
+ display:table;
141
+ }
142
+ #onestepcheckout-form #elefunds_top > div:after {
143
+ clear:both;
144
+ }
145
+ #onestepcheckout-form #elefunds_top > div {
146
+ zoom:1; /* For IE 6/7 (trigger hasLayout) */
147
+ }
148
+
149
+
150
+ #onestepcheckout-form #elefunds_plus_minus {
151
+ float: left;
152
+ margin-right: 10px;
153
+ margin-top: 3px;
154
+ margin-left: 15px;
155
+ }
156
+ #onestepcheckout-form #elefunds_plus_minus a:link,
157
+ #onestepcheckout-form #elefunds_plus_minus a:visited {
158
+ text-decoration: none;
159
+ }
160
+ #onestepcheckout-form #elefunds_decrease img {
161
+ visibility: hidden;
162
+ }
163
+ #onestepcheckout-form #elefunds_decrease {
164
+ background: #efefef; /* Old browsers */
165
+ background: -moz-linear-gradient(top, #efefef 0%, #aaaaaa 100%); /* FF3.6+ */
166
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#aaaaaa)); /* Chrome,Safari4+ */
167
+ background: -webkit-linear-gradient(top, #efefef 0%,#aaaaaa 100%); /* Chrome10+,Safari5.1+ */
168
+ background: -o-linear-gradient(top, #efefef 0%,#aaaaaa 100%); /* Opera 11.10+ */
169
+ background: -ms-linear-gradient(top, #efefef 0%,#aaaaaa 100%); /* IE10+ */
170
+ background: linear-gradient(to bottom, #efefef 0%,#aaaaaa 100%); /* W3C */
171
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#aaaaaa',GradientType=0 ); /* IE6-9 */
172
+
173
+ border: 1px solid #999;
174
+ -webkit-border-radius: 10px;
175
+ -moz-border-radius: 10px;
176
+ border-radius: 10px;
177
+
178
+ -webkit-box-shadow: 0 0 5px rgb(207, 207, 207);
179
+ -moz-box-shadow: 0 0 5px rgb(207, 207, 207);
180
+ box-shadow: 0 0 5px rgb(207, 207, 207);
181
+
182
+ display: inline-block;
183
+ height: 19px;
184
+ position: relative;
185
+ width: 19px;
186
+ }
187
+ #onestepcheckout-form #elefunds_decrease:before {
188
+ content: "-";
189
+ color: rgb(255, 255, 255);
190
+ font-size: 18px;
191
+ font-weight: bold;
192
+ left: 6px;
193
+ line-height: 18px;
194
+ position: absolute;
195
+ text-shadow: 0px 0px 2px #aaa;
196
+ top: -1px;
197
+ }
198
+ #onestepcheckout-form #elefunds_increase img {
199
+ visibility: hidden;
200
+ }
201
+ #onestepcheckout-form #elefunds_increase {
202
+ background: #fcaa6c; /* Old browsers */
203
+ background: -moz-linear-gradient(top, #fcaa6c 0%, #f7842c 100%); /* FF3.6+ */
204
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fcaa6c), color-stop(100%,#f7842c)); /* Chrome,Safari4+ */
205
+ background: -webkit-linear-gradient(top, #fcaa6c 0%,#f7842c 100%); /* Chrome10+,Safari5.1+ */
206
+ background: -o-linear-gradient(top, #fcaa6c 0%,#f7842c 100%); /* Opera 11.10+ */
207
+ background: -ms-linear-gradient(top, #fcaa6c 0%,#f7842c 100%); /* IE10+ */
208
+ background: linear-gradient(to bottom, #fcaa6c 0%,#f7842c 100%); /* W3C */
209
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcaa6c', endColorstr='#f7842c',GradientType=0 ); /* IE6-9 */
210
+
211
+ border: 1px solid rgb(207, 102, 21);
212
+ -webkit-border-radius: 10px;
213
+ -moz-border-radius: 10px;
214
+ border-radius: 10px;
215
+
216
+ -webkit-box-shadow: 0 0 5px rgb(207, 207, 207);
217
+ -moz-box-shadow: 0 0 5px rgb(207, 207, 207);
218
+ box-shadow: 0 0 5px rgb(207, 207, 207);
219
+
220
+ display: inline-block;
221
+ height: 19px;
222
+ position: relative;
223
+ width: 19px;
224
+ }
225
+ #onestepcheckout-form #elefunds_increase:before {
226
+ content: "+";
227
+ color: rgb(255, 255, 255);
228
+ font-size: 18px;
229
+ font-weight: bold;
230
+ left: 4px;
231
+ line-height: 18px;
232
+ position: absolute;
233
+ text-shadow: 0px 0px 2px #aaa;
234
+ top: 1px;
235
+ }
236
+
237
+ #onestepcheckout-form #elefunds_input_container {
238
+ float: left;
239
+ margin-left: 5px;
240
+ }
241
+ #onestepcheckout-form #elefunds_input_container #elefunds_currency {
242
+ background: url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;
243
+ border: 1px solid #7f807f;
244
+ -wekbit-border-radius: 3px 0 0 3px;
245
+ -moz-border-radius: 3px 0 0 3px;
246
+ border-radius: 3px 0 0 3px;
247
+ float: left;
248
+ height: 18px;
249
+ padding: 4px 8px;
250
+ text-shadow: 0 1px 0 #c6cfd8;
251
+
252
+ }
253
+ #onestepcheckout-form #elefunds_input_container #elefunds_input {
254
+ background: #f3f3f3; /* Old browsers */
255
+ background: -moz-linear-gradient(top, #f3f3f3 0%, #ffffff 100%); /* FF3.6+ */
256
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f3f3f3), color-stop(100%,#ffffff)); /* Chrome,Safari4+ */
257
+ background: -webkit-linear-gradient(top, #f3f3f3 0%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
258
+ background: -o-linear-gradient(top, #f3f3f3 0%,#ffffff 100%); /* Opera 11.10+ */
259
+ background: -ms-linear-gradient(top, #f3f3f3 0%,#ffffff 100%); /* IE10+ */
260
+ background: linear-gradient(to bottom, #f3f3f3 0%,#ffffff 100%); /* W3C */
261
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */
262
+
263
+ border: 1px solid #777;
264
+
265
+ -webkit-box-shadow: inset 0 0 7px rgb(175, 175, 175);
266
+ -moz-box-shadow: inset 0 0 7px rgb(175, 175, 175);
267
+ box-shadow: inset 0 0 7px rgb(175, 175, 175);
268
+
269
+ -webkit-border-radius: 0 2px 2px 0;
270
+ -moz-border-radius: 0 2px 2px 0;
271
+ border-radius: 0 2px 2px 0;
272
+
273
+ font-size: 14px;
274
+ float: left;
275
+ height: 22px;
276
+ margin-left: -4px;
277
+ padding: 2px 4px;
278
+ width: 111px;
279
+ }
280
+
281
+ #onestepcheckout-form #elefunds_bottom {
282
+ margin: 0;
283
+ }
284
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver {
285
+ background: url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;
286
+ border: 1px solid rgb(179, 179, 179);
287
+ border-left: none;
288
+ border-right: none;
289
+
290
+ -webkit-box-shadow: inset 0 -3px 2px -1px rgb(218, 218, 218);
291
+ -moz-box-shadow: inset 0 -3px 2px -1px rgb(218, 218, 218);
292
+ box-shadow: inset 0 -3px 2px -1px rgb(218, 218, 218);
293
+
294
+ cursor: pointer;
295
+ height: 41px;
296
+ margin: 0;
297
+ margin-top: -1px;
298
+ padding: 7px;
299
+ position: relative;
300
+ }
301
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver.elefunds_receiver_selected {
302
+ -webkit-box-shadow: none;
303
+ -moz-box-shadow: none;
304
+ box-shadow: none;
305
+ }
306
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver.elefunds_receiver_selected label {
307
+ background: url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 2px 11px no-repeat;
308
+ }
309
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver input[type="checkbox"] {
310
+ left: 14px;
311
+ position: absolute;
312
+ top: 20px;
313
+ visibility: hidden;
314
+ }
315
+ /*
316
+ * IE8 Fix - TODO: Solution with conditional comments
317
+ */
318
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver input[type="checkbox"] {
319
+ visibility: visible\0/;
320
+ }
321
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver label {
322
+ background: url(https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png) no-repeat 2px 11px;
323
+ cursor: pointer;
324
+ display: inline-block;
325
+ height: 32px;
326
+ padding: 0;
327
+ width: 200px;
328
+ }
329
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver label img {
330
+ position: absolute;
331
+ left: 35px;
332
+ opacity: 0.7;
333
+ top: 8px;
334
+ }
335
+ #onestepcheckout-form #elefunds_bottom .elefunds_receiver.elefunds_receiver_selected label img {
336
+ opacity: 1.0;
337
+ }
338
+
339
+ #onestepcheckout-form #elefunds_receipt {
340
+ margin: 18px 0 0 14px;
341
+ overflow: hidden;
342
+ }
343
+ #onestepcheckout-form #elefunds_receipt input[type="checkbox"] {
344
+ float: left;
345
+ margin-right: 5px;
346
+ }
347
+ #onestepcheckout-form #elefunds_receipt label {
348
+ float: left;
349
+ line-height: 14px;
350
+ }
351
+ #onestepcheckout-form .elefunds #elefunds_round_sum_container {
352
+ margin: 20px 15px;
353
+ }
354
+
355
+
356
+
357
+ /* +++ Tooltips +++ */
358
+ /* TOOLTIPS */
359
+
360
+ #tiptip_content {
361
+ font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
362
+ background: #222;
363
+ background: rgba(0, 0, 0, 0.7);
364
+ padding: 3px;
365
+ overflow: hidden;
366
+ width: 260px;
367
+ -moz-border-radius: 6px;
368
+ -webkit-border-radius: 6px;
369
+ border-radius: 6px;
370
+ -wekbit-box-shadow: 0 3px 7px 0.3;
371
+ -moz-box-shadow: 3px 7px 0.3;
372
+ box-shadow: 3px 7px 0.3;;
373
+ }
374
+
375
+ #tiptip_title {
376
+ background-color: #f5f5f5;
377
+ padding: 10px 15px 8px;
378
+ color: #222;
379
+ font-size: 18px;
380
+ line-height: 1;
381
+ text-align: center;
382
+ font-weight: bold;
383
+ -moz-border-radius: 3px 3px 0 0;
384
+ -webkit-border-radius: 3px 3px 0 0;
385
+ border-radius: 3px 3px 0 0;
386
+
387
+ border-bottom: 1px solid #eee;
388
+ margin: 0;
389
+ }
390
+
391
+ #tiptip_inner {
392
+ font-size: 12px;
393
+ color: #222;
394
+ background-color: #fff;
395
+ padding: 14px;
396
+
397
+ -moz-border-radius: 0 0 3px 3px;
398
+ -webkit-border-radius: 0 0 3px 3px;
399
+ border-radius: 0 0 3px 3px;
400
+
401
+ -webkit-background-clip: padding-box;
402
+ -moz-background-clip: padding-box;
403
+ background-clip: padding-box;
404
+ }
405
+
406
+ #tiptip_holder {
407
+ display: none;
408
+ position: absolute;
409
+ top: 0;
410
+ left: 0;
411
+ z-index: 99999;
412
+ }
413
+
414
+ #tiptip_holder.tip_top {
415
+ margin-bottom: 5px;
416
+ }
417
+
418
+ #tiptip_holder.tip_left {
419
+ margin-right: 5px;
420
+ }
421
+
422
+ #tiptip_holder.tip_right {
423
+ margin-left: 5px;
424
+ }
425
+
426
+ #tiptip_holder.tip_bottom {
427
+ margin-top: 5px;
428
+ }
429
+
430
+ #tiptip_arrow, #tiptip_arrow_inner {
431
+ position: absolute;
432
+ border-color: transparent;
433
+ border-style: solid;
434
+ border-width: 6px;
435
+ height: 0;
436
+ width: 0;
437
+ }
438
+ #tiptip_arrow {
439
+ border-right-color: rgb(85, 85, 85);
440
+ }
441
+
442
+ #tiptip_holder.tip_top #tiptip_arrow_inner {
443
+ margin-top: -7px;
444
+ margin-left: -6px;
445
+ border-top-color: rgb(25,25,25);
446
+ border-top-color: rgba(25,25,25,0.92);
447
+ }
448
+
449
+ #tiptip_holder.tip_left #tiptip_arrow_inner {
450
+ margin-top: -6px;
451
+ margin-left: -7px;
452
+ border-left-color: rgb(25,25,25);
453
+ border-left-color: rgba(25,25,25,0.92);
454
+ }
skin/frontend/base/default/css/lfnds_donation/elefunds_dark_blue.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/blue/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/blue/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_dark_green.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/green/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/green/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_dark_grey.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/grey/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/grey/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_dark_orange.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/orange/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/orange/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_dark_purple.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/top_bar.png') repeat-x;height:49px;border-left:1px solid #3a414a;border-right:1px solid #3a414a;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#c6cfd8;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/purple/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/purple/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/currency_bg.png') repeat-x;border:1px solid #2f3439;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#c6cfd8;text-shadow:0 1px 0 #2c3238;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/dark/input_bg.png') repeat-x;border:1px solid #2f3439;float:left;outline:0}.elefunds_input_active{color:#fff!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_light_blue.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/blue/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/blue/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_light_green.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/green/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/green/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_light_grey.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/grey/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/grey/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_light_orange.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/orange/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/css/lfnds_donation/elefunds_light_purple.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #elefunds_top{position:relative;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/top_bar.png') repeat-x;height:49px;border-left:1px solid #8c8f91;border-right:1px solid #8c8f91;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_top>div{float:right;margin-right:10px}#elefunds_logo{position:absolute;top:8px;left:10px}#elefunds_arrow{position:relative;display:inline-block;float:left;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_bg.png') repeat-x;height:49px;padding:0}#elefunds_checkbox{position:absolute;top:18px;left:19px;width:18px;line-height:normal;cursor:pointer;opacity:0}#elefunds_checkbox+label{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;color:#d0d9d2;padding:9px 10px 9px 60px;height:31px;margin:0;max-width:180px;float:left;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/purple/arrow_off.png') no-repeat}#elefunds_checkbox:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/purple/arrow_on.png') no-repeat}#elefunds_arrow_end{width:14px;height:49px;display:inline-block;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/arrow_end.png') no-repeat}#elefunds_plus_minus{float:left;padding:13px 10px 0 30px}#elefunds_plus_minus img{margin:0 1px}#elefunds_input_container{float:left;padding-top:11px}#elefunds_currency{display:inline-block;width:auto;height:18px;padding:4px 8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;font-weight:normal;line-height:18px;text-align:center;color:#2c3238;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/currency_bg.png') repeat-x;border:1px solid #7f807f;border-radius:3px 0 0 3px;margin-right:-1px;float:left}#elefunds_input{display:inline-block;width:48px;height:18px;padding:4px 2px 4px 0;margin:0;vertical-align:middle;text-align:center;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:12px;color:#7f807f;text-shadow:0 1px 0 #c6cfd8;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/light/input_bg.png') repeat-x;border:1px solid #7f807f;float:left;outline:0}.elefunds_input_active{color:#000!important}#elefunds_bottom{height:62px;border-width:0 1px 1px;border-style:solid;border-color:#cfd0d4 #b9bec4;line-height:1.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elefunds_receiver{margin:0;text-align:center;display:inline-block;border-left:1px solid #a3a6ac;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_off_bg.png') repeat-x;float:left;position:relative}.elefunds_receiver>label>img{vertical-align:middle;-webkit-filter:grayscale(1) opacity(0.7);-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50)}.elefunds_receiver>input{cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:22px;position:absolute;top:25px;left:13px}.elefunds_receiver>input+label{height:42px;width:165px;margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_off.png') 10px 24px no-repeat;display:inline-block;border-left:1px solid #f6f6f6;border-left:1px solid rgba(255,255,255,0.6)}.elefunds_receiver>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/checkbox_on.png') 10px 24px no-repeat}#elefunds_bottom>input:first-child+div{border-left:0!important}.elefunds_receiver_selected{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receiver_on_bg.png') repeat-x}.elefunds_receiver_selected>label>img{filter:none;-webkit-filter:none;-ms-filter:none}#elefunds_below_container{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:16px;margin:0;padding:15px 0 10px;text-align:right}#elefunds_below_container label{font-weight:normal}#elefunds_round_sum_container{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/elefunds_highlight.png') right top no-repeat}#elefunds_round_sum_container strong{font-weight:bold;line-height:1.5em}#elefunds_round_sum_container strong:last-child{margin-right:8px}#elefunds_round_sum{display:inline-block;width:65px;color:#222}#elefunds_receipt{position:relative;float:left;font-size:12px;color:#333;margin:5px 0 0 15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#elefunds_receipt_checkbox{position:absolute;top:1px;cursor:pointer;opacity:0;font-size:100%;margin:0;vertical-align:baseline;width:16px}#elefunds_receipt_checkbox+label{margin:0;cursor:pointer;background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_off.png') no-repeat;display:inline-block;padding-left:20px}#elefunds_receipt>input:checked+label{background:url('https://0ce8ff584bf613ee6639-c1fc539e0df6af03ccc14b5020ab4161.ssl.cf1.rackcdn.com/receipt_on.png') no-repeat}.elefunds_hidden{visibility:hidden}#elefunds_share{width:450px;padding:20px 20px 10px;background:#f4f4f4;border:4px solid #ccc;border-radius:8px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:center}#elefunds_share>a{text-decoration:none}#elefunds_share h3{font-weight:bold;color:#222;margin:0}#elefunds_share p{font-size:14px;color:#666;margin:20px 0 10px;padding:10px 10px 20px}#elefunds_share span{font-style:normal;font-size:11px;line-height:21px;margin-top:6px;vertical-align:top;display:block}#tiptip_content{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;background:#222;background:rgba(0,0,0,0.7);padding:3px;overflow:hidden;width:260px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}#tiptip_title{background-color:#f5f5f5;padding:10px 15px 8px;color:#222;font-size:18px;line-height:1;text-align:center;font-weight:bold;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;border-bottom:1px solid #eee;margin:0}#tiptip_inner{font-size:12px;color:#222;background-color:#fff;padding:14px;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{margin-bottom:5px}#tiptip_holder.tip_left{margin-right:5px}#tiptip_holder.tip_right{margin-left:5px}#tiptip_holder.tip_bottom{margin-top:5px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,0.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,0.92)}
skin/frontend/base/default/images/lfnds_donation/elefunds_item_main.png ADDED
Binary file
skin/frontend/base/default/images/lfnds_donation/elefunds_item_small.png ADDED
Binary file
skin/frontend/base/default/images/lfnds_donation/elefunds_item_thumbnail.png ADDED
Binary file
skin/frontend/base/default/js/lfnds_donation/additional/elefunds_magento_onepage_additional.js ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * When Module is placed on bottom (above Checkout-Button)
3
+ */
4
+ var lfndsModule = function () {
5
+ // if #checkout-review-table-wrapper + #elefunds-form
6
+ this.$elefunds = jQuery('#elefunds');
7
+ this.$elefundsBelow = jQuery('#elefunds_below_container');
8
+
9
+ this.currency = '€';
10
+
11
+ this.addEvents();
12
+ };
13
+ lfndsModule.prototype.addEvents = function () {
14
+ var me = this;
15
+
16
+ jQuery(document).on('elefunds_enabled', function (event) {
17
+ if (jQuery('#checkout-review-table-wrapper + #elefunds-form').length) {
18
+
19
+ jQuery('#elefunds_below_container').slideDown(function () {
20
+ jQuery('#elefunds_below_container').removeClass('elefunds_hidden');
21
+ jQuery('#elefunds_round_sum_container').removeClass('elefunds_hidden');
22
+ });
23
+
24
+ }
25
+ });
26
+
27
+ jQuery(document).on('elefunds_disabled', function (event) {
28
+ if (jQuery('#checkout-review-table-wrapper + #elefunds-form').length) {
29
+
30
+ jQuery('#elefunds_below_container').slideUp(function () {
31
+ jQuery('#elefunds_below_container').addClass('elefunds_hidden');
32
+ jQuery('#elefunds_round_sum_container').addClass('elefunds_hidden');
33
+ });
34
+
35
+ }
36
+ });
37
+ };
38
+
39
+
40
+ /*
41
+ * When Module is placed on top (above article-review)
42
+ */
43
+ var lfndsModuleTop = function () {
44
+ this.isDonationRowCreated = false;
45
+ this.isOldPriceSaved = false;
46
+ this.isModuleActive = false;
47
+ this.currency = '€';
48
+ this.addEvents();
49
+ };
50
+ lfndsModuleTop.prototype.addEvents = function () {
51
+ var me = this;
52
+
53
+ jQuery(document).on('elefunds_enabled', function (event) {
54
+ if (!jQuery('#checkout-review-table-wrapper + #elefunds-form').length) {
55
+
56
+ me.isModuleActive = true;
57
+
58
+ if (!me.isOldPriceSaved) {
59
+ me.oldPrice = jQuery('#checkout-review-table tfoot tr.last .price').html();
60
+ me.isOldPriceSaved = true;
61
+ }
62
+
63
+ jQuery('#checkout-review-table tfoot tr.last .price').html(jQuery('#elefunds_round_sum').html() + ' ' + me.currency);
64
+
65
+ jQuery('#elefunds_below_container').slideDown(function () {
66
+ jQuery('#elefunds_below_container').removeClass('elefunds_hidden');
67
+ });
68
+
69
+ if (!jQuery('#donationRow').length) {
70
+ me.createDonationRow();
71
+ } else {
72
+ me.showDonationRow();
73
+ }
74
+
75
+
76
+ /*
77
+ * Events can only be registered when Module is already shown,
78
+ * so register events when activating module for the first time.
79
+ */
80
+ jQuery('#elefunds_input').on('change', function () {
81
+ if (me.isModuleActive) {
82
+ jQuery('#checkout-review-table tfoot tr.last .price').html(jQuery('#elefunds_round_sum').html() + ' ' + me.currency);
83
+ }
84
+ me.updateDonationRow();
85
+ });
86
+ jQuery('#elefunds_plus_minus').on('click', function () {
87
+ jQuery('#elefunds_input').trigger('change');
88
+ });
89
+ jQuery('#elefunds_input').on('keypress', function () {
90
+ jQuery('#elefunds_input').trigger('change');
91
+ });
92
+
93
+ }
94
+ });
95
+
96
+ jQuery(document).on('elefunds_disabled', function (event) {
97
+ if (!jQuery('#checkout-review-table-wrapper + #elefunds-form').length) {
98
+
99
+ me.isModuleActive = false;
100
+
101
+ jQuery('#elefunds_below_container').slideUp(function () {
102
+ jQuery('#checkout-review-table tfoot tr.last .price').html(me.oldPrice);
103
+ jQuery('#elefunds_below_container').addClass('elefunds_hidden');
104
+ jQuery('#elefunds_round_sum_container').addClass('elefunds_hidden');
105
+ });
106
+
107
+ me.hideDonationRow();
108
+ }
109
+ });
110
+ };
111
+ lfndsModuleTop.prototype.createDonationRow = function () {
112
+ var donationValue = parseFloat(jQuery('#elefunds_donation_cent').val() / 100);
113
+
114
+ jQuery('' +
115
+ '<tr id="donationRow">' +
116
+ '<td class="a-right" colspan="3">' +
117
+ 'elefunds Donation' +
118
+ '</td>' +
119
+ '<td class="a-right">' +
120
+ '<span class="price">' +
121
+ donationValue.toFixed(2) + ' ' + this.currency +
122
+ '</span>' +
123
+ '</td>' +
124
+ '</tr>' +
125
+ '').insertBefore('#checkout-review-table tfoot tr.last');
126
+
127
+ this.isDonationRowCreated = true;
128
+ };
129
+ lfndsModuleTop.prototype.showDonationRow = function () {
130
+ jQuery('#donationRow').show();
131
+ };
132
+ lfndsModuleTop.prototype.hideDonationRow = function () {
133
+ jQuery('#donationRow').hide();
134
+ };
135
+ lfndsModuleTop.prototype.updateDonationRow = function () {
136
+ var donationValue = parseFloat(jQuery('#elefunds_donation_cent').val() / 100);
137
+
138
+ jQuery('#donationRow .price').html('' +
139
+ donationValue.toFixed(2) + ' ' + this.currency +
140
+ '');
141
+ };
142
+
143
+
144
+ jQuery(document).ready(function () {
145
+ var lfnds = new lfndsModuleTop();
146
+ var lfndsBottom = new lfndsModule();
147
+ });
skin/frontend/base/default/js/lfnds_donation/additional/elefunds_magento_onestep_additional.js ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var lfndsOneStep = {};
2
+
3
+ /*
4
+ * ++ One Step Checkout Specific JavaScript ++
5
+ */
6
+
7
+ var ElefundsOneStepCheckoutIntegration = function () {
8
+ /*
9
+ * Cache important DOM-Nodes as member-variables
10
+ */
11
+ this.$oneStepMiddleColumn = jQuery('.onestepcheckout-column-middle');
12
+ this.$elefundsModule = jQuery('#elefunds-form');
13
+
14
+ this.init();
15
+ this.addEvents();
16
+ };
17
+ ElefundsOneStepCheckoutIntegration.prototype.init = function () {
18
+ this.changePosition();
19
+ };
20
+ ElefundsOneStepCheckoutIntegration.prototype.addEvents = function () {
21
+
22
+ };
23
+ ElefundsOneStepCheckoutIntegration.prototype.changePosition = function () {
24
+ this.$oneStepMiddleColumn.append('<div class="elefunds"></div>');
25
+ jQuery('.elefunds').append(this.$elefundsModule);
26
+ this.$elefundsModule.parent().fadeIn();
27
+ };
28
+
29
+
30
+ /*
31
+ * ++ Change Sum in One-Step-Checkout ++
32
+ */
33
+ var ElefundsOneStepCheckoutIntegrationChangeSum = function () {
34
+ this.$roundedSumNode = jQuery('#elefunds_round_sum');
35
+ this.$currencyNode = jQuery('#elefunds_round_sum + strong');
36
+
37
+ this.$totalAmountNode = jQuery('.onestepcheckout-totals .grand-total .price');
38
+
39
+ this.roundedSum = this.$roundedSumNode.html();
40
+
41
+ if (this.$roundedSumNode.length && this.$totalAmountNode.length) {
42
+ this.oldSum = this.$totalAmountNode.html();
43
+ this.isModuleEnabled = false;
44
+ this.addDonationRow();
45
+ this.addEvents();
46
+ }
47
+ };
48
+
49
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.addEvents = function () {
50
+ var that = this;
51
+
52
+ jQuery(document).on('elefunds_enabled', function () {
53
+ that.isModuleEnabled = true;
54
+ that.activateDonationRow();
55
+
56
+ that.changeSumValue();
57
+ });
58
+ jQuery('#elefunds').on('click', function () {
59
+ if (that.isModuleEnabled) {
60
+ that.changeSumValue();
61
+ }
62
+ });
63
+ jQuery('#elefunds_input').on('change', function () {
64
+ if (that.isModuleEnabled) {
65
+ that.changeSumValue();
66
+ }
67
+ });
68
+ jQuery(document).on('elefunds_disabled', function () {
69
+ that.deactivateDonationRow();
70
+ that.isModuleEnabled = false;
71
+ jQuery('.onestepcheckout-totals .grand-total .price').html(that.oldSum);
72
+ });
73
+ };
74
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.changeSumValue = function () {
75
+ if (this.isModuleEnabled) {
76
+ var oldSumReg = this.oldSum.replace(/[^0-9]/gi, '');
77
+ var oldSumValue = parseFloat(oldSumReg / 100);
78
+ var donationValue = parseFloat(jQuery('#elefunds_donation_cent').val() / 100);
79
+ console.log(donationValue);
80
+
81
+ this.roundedSum = oldSumValue + donationValue;
82
+
83
+ this.$roundedSumNode.html(this.roundedSum.toFixed(2));
84
+
85
+ var currency = this.$currencyNode.html();
86
+ jQuery('.onestepcheckout-totals .grand-total .price').html(this.roundedSum.toFixed(2) + ' ' + currency);
87
+ this.updateDonationRow();
88
+ }
89
+ };
90
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.updateSums = function () {
91
+ this.oldSum = jQuery('.onestepcheckout-totals .grand-total .price').html();
92
+
93
+ if (!jQuery('.elefunds_donation_row').length) {
94
+ this.addDonationRow();
95
+ }
96
+ if (this.isModuleEnabled) {
97
+ this.activateDonationRow();
98
+ }
99
+
100
+ /*
101
+ * New total has to change too
102
+ * As there is the curreny-symbol inside the amount-value we have to remove it
103
+ * (and everything else what is not a number)
104
+ */
105
+ var oldSumReg = this.oldSum.replace(/[^0-9]/gi, '');
106
+ var oldSumValue = parseFloat(oldSumReg / 100);
107
+ var donationValue = parseFloat(jQuery('#elefunds_donation_cent').val() / 100);
108
+
109
+ this.roundedSum = oldSumValue + donationValue;
110
+
111
+ this.$roundedSumNode.html(this.roundedSum.toFixed(2));
112
+ };
113
+
114
+ /*
115
+ * Adds a new row in order review to show elefunds donation
116
+ * Supply methods for update, activate and remove the row
117
+ */
118
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.addDonationRow = function () {
119
+ jQuery('' +
120
+ '<tr class="elefunds_donation_row">' +
121
+ '<td class="title">elefunds Donation</td>' +
122
+ '<td class="value">' +
123
+ '<span class="price">' + jQuery('#elefunds_input').val() + '</span>' +
124
+ '</td>' +
125
+ '</tr>' +
126
+ '').insertBefore('.grand-total');
127
+ };
128
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.updateDonationRow = function () {
129
+ var currency = this.$currencyNode.html();
130
+ var donationValue = parseFloat(jQuery('#elefunds_donation_cent').val() / 100);
131
+ jQuery('.elefunds_donation_row .price').html(donationValue.toFixed(2) + ' ' + currency);
132
+ };
133
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.activateDonationRow = function () {
134
+ jQuery('.elefunds_donation_row').addClass('active');
135
+ };
136
+ ElefundsOneStepCheckoutIntegrationChangeSum.prototype.deactivateDonationRow = function () {
137
+ jQuery('.elefunds_donation_row').removeClass('active');
138
+ };
139
+
140
+
141
+ jQuery(document).ready(function () {
142
+ lfndsOneStep.instance = new ElefundsOneStepCheckoutIntegration();
143
+ lfndsOneStep.lfnds_changeSum = new ElefundsOneStepCheckoutIntegrationChangeSum();
144
+ });
145
+
146
+
147
+
148
+ /*
149
+ * Patches the Ajax.Request of Prototype to change sum always after ajax-requests (in callback)
150
+ */
151
+
152
+ OriginalAjaxRequest = Ajax.Request;
153
+ AjaxRequestProxy = Class.create(OriginalAjaxRequest, {
154
+
155
+ initialize: function($super, url, options) {
156
+ originalCallback = options['onSuccess'];
157
+
158
+ callbackProxy = function(transport) {
159
+ originalCallback(transport);
160
+ lfndsOneStep.lfnds_changeSum.updateSums();
161
+ lfndsOneStep.lfnds_changeSum.changeSumValue();
162
+ };
163
+
164
+ options['onSuccess'] = callbackProxy;
165
+
166
+ $super(url, options);
167
+
168
+ }
169
+ });
170
+ AjaxRequestProxy.Events = Ajax.Request.Events;
171
+ Ajax.Request = AjaxRequestProxy;
skin/frontend/base/default/js/lfnds_donation/elefunds.jquery.js ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var elefunds = (function(parent, $) {
2
+
3
+ var roundSumContainer, roundSum, currency, decimal, decimalAlt, total, toolTipPosition;
4
+ var enabled = false;
5
+
6
+ function init(options) {
7
+ roundSumContainer = options.roundSumContainer;
8
+ roundSum = options.roundSum;
9
+ currency = options.currency;
10
+ decimal = options.decimal;
11
+ decimalAlt = options.deciamlAlt;
12
+ total = options.total;
13
+ toolTipPosition = options.toolTipPosition;
14
+
15
+ $('#elefunds').data('elefunds-roundSum', convertToFloat(total + parseInt($('#elefunds_donation_cent').val(), 10)));
16
+ $('#elefunds').data('elefunds-donation', {donationCent: parseInt($('#elefunds_donation_cent').val(), 10), donationFloat: convertToFloat(parseInt($('#elefunds_donation_cent').val(), 10))});
17
+
18
+ function enable() {
19
+ $('#elefunds_checkbox').prop('checked', true);
20
+ $("#elefunds_input").addClass('elefunds_input_active');
21
+ roundSumContainer.slideDown();
22
+
23
+ $('#elefunds').trigger('elefunds_enabled');
24
+ enabled = true;
25
+ }
26
+
27
+ function disable() {
28
+ $('#elefunds_checkbox').prop('checked', false);
29
+ $('#elefunds_input').removeClass('elefunds_input_active');
30
+ roundSumContainer.slideUp();
31
+
32
+ $('#elefunds').trigger('elefunds_disabled');
33
+ enabled = false;
34
+ }
35
+
36
+ // Change button backgrounds when (un)selected
37
+ $('.elefunds_receiver > input').on('change', function() {
38
+ //If all are unchecked
39
+ if($('#elefunds_bottom').find('input[type="checkbox"]:checked').length == 0) {
40
+ disable();
41
+ } else if(!enabled) {
42
+ enable();
43
+ }
44
+
45
+ $(this).parent().toggleClass('elefunds_receiver_selected');
46
+ });
47
+
48
+ // When the plugin is (de)activated
49
+ $('#elefunds_checkbox').on('change', function() {
50
+ if($('#elefunds_checkbox').prop('checked') && $('#elefunds_bottom').find('input[type="checkbox"]:checked').length == 0) {
51
+ $('#elefunds_bottom').find('input[type="checkbox"]').prop('checked', true);
52
+ $('#elefunds_bottom').find('input[type="checkbox"]').parent().toggleClass('elefunds_receiver_selected');
53
+ }
54
+
55
+ if(!$('#elefunds_checkbox:checked').length) {
56
+ roundSumContainer.slideUp();
57
+ $('#elefunds').trigger('elefunds_disabled');
58
+ enabled = false;
59
+
60
+ } else {
61
+ if ($('#elefunds_checkbox:checked').length) {
62
+ roundSumContainer.slideDown();
63
+
64
+ //Store data
65
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
66
+ $('#elefunds').data('elefunds-donation', {donationCent: centValue, donationFloat: convertToFloat(centValue)});
67
+
68
+ $('#elefunds').trigger('elefunds_enabled');
69
+ enabled = true;
70
+ }
71
+ }
72
+
73
+ $('#elefunds_input').toggleClass('elefunds_input_active');
74
+ });
75
+
76
+ $('#elefunds_input').keyup(function(e){
77
+ if(e.which == 13) e.preventDefault();
78
+ });
79
+
80
+ // Enable tooltips
81
+ $('.tiptip').tipTip({
82
+ defaultPosition: toolTipPosition || 'top',
83
+ edgeOffset: -12,
84
+ delay: 200
85
+ });
86
+ } //END INIT
87
+
88
+ //Check if elefunds has already been created in the view
89
+ (function() {
90
+ if(parent.hasOwnProperty('options')) {
91
+ init(parent.options);
92
+ }
93
+ })();
94
+
95
+ function convertToCent(floatValue) {
96
+ var centValue;
97
+ var centArray;
98
+
99
+ if(floatValue.indexOf(decimal) !== -1) {
100
+ centArray = floatValue.split(decimal,2);
101
+ } else if(floatValue.indexOf(decimalAlt) !== -1) {
102
+ centArray = floatValue.split(decimalAlt,2);
103
+ } else {
104
+ centArray = [floatValue, 0];
105
+ }
106
+
107
+ if(centArray[1].length > 2) {
108
+ centArray[1] = centArray[1].substr(0,2);
109
+ }
110
+
111
+ while(centArray[1].length < 2) {
112
+ centArray[1] += '0';
113
+ }
114
+
115
+ if(centArray[0].length < 1) {
116
+ centArray[0] = 0;
117
+ }
118
+
119
+ centValue = parseInt(centArray[0], 10)*100 + parseInt(centArray[1], 10);
120
+
121
+ // Check for valid value
122
+ if(isNaN(centValue) || centValue < 0) {
123
+ centValue = 0;
124
+ }
125
+
126
+ return centValue;
127
+ }
128
+
129
+ // Convert cent value to float currency equivalent
130
+ function convertToFloat(centValue) {
131
+ var floatValue;
132
+
133
+ if(centValue < 10) {
134
+ floatValue = '0' + decimal + '0' + centValue;
135
+ } else if(centValue < 100) {
136
+ floatValue = '0' + decimal + centValue;
137
+ } else {
138
+ centValue = centValue.toString();
139
+ floatValue = centValue.slice(0, -2) + decimal + centValue.slice(-2);
140
+ }
141
+
142
+ return floatValue;
143
+ }
144
+
145
+ // Update the donation input field
146
+ function updateDonation(centValue) {
147
+ var floatValue = convertToFloat(centValue);
148
+ $('#elefunds_input').val(floatValue);
149
+
150
+ render(centValue);
151
+
152
+ if(enabled) {
153
+ $('#elefunds').trigger('elefunds_donationChange');
154
+ }
155
+ }
156
+
157
+ function render(centValue) {
158
+ // Update the hidden donation input field
159
+ // containing the value of the donation in cents
160
+ $('#elefunds_donation_cent').val(centValue);
161
+
162
+ // Store data
163
+ $('#elefunds').data('elefunds-roundSum', convertToFloat(total + centValue));
164
+ $('#elefunds').data('elefunds-donation', {donationCent: centValue, donationFloat: convertToFloat(centValue)});
165
+
166
+ //Update round sum
167
+ if(roundSum) {
168
+ roundSum.html(convertToFloat(total + centValue));
169
+ }
170
+ }
171
+
172
+ return {
173
+
174
+ init: function(options) {
175
+ init(options);
176
+ },
177
+
178
+ // Decrease the donation sum by 1.00
179
+ decreaseDonation: function() {
180
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
181
+
182
+ if(centValue > 100) {
183
+ centValue = centValue - 100;
184
+ updateDonation(centValue);
185
+ }
186
+
187
+ return centValue;
188
+ },
189
+
190
+ // Increase the donation sum by 1.00
191
+ increaseDonation: function() {
192
+ var centValue = parseInt($('#elefunds_donation_cent').val(), 10);
193
+
194
+ centValue = parseInt(centValue, 10) + 100;
195
+
196
+ updateDonation(centValue);
197
+ return centValue;
198
+ },
199
+
200
+ // Update the hidden field with the current donation value
201
+ donationChange: function(floatValue) {
202
+ var centValue = convertToCent(floatValue);
203
+ render(centValue);
204
+
205
+ var timeHandler = $('#elefunds').data('elefunds-timer');
206
+ var now = (new Date()).getTime();
207
+ var delay = 800;
208
+
209
+ if (typeof(timeHandler) !== 'undefined' && timeHandler !== null) {
210
+ if(now - timeHandler.time < delay) {
211
+ clearTimeout(timeHandler.timer);
212
+ }
213
+ }
214
+
215
+ if(enabled) {
216
+ var timer = setTimeout(function() {
217
+ $('#elefunds').trigger('elefunds_donationChange');
218
+ }, delay);
219
+
220
+ $('#elefunds').data('elefunds-timer', {timer: timer, time: (new Date()).getTime()});
221
+ }
222
+
223
+ return centValue;
224
+ }
225
+
226
+ };
227
+ }(elefunds || {}, jQuery));
skin/frontend/base/default/js/lfnds_donation/elefunds.jquery.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(e){e.fn.tipTip=function(t){var n={activation:"hover",keepAlive:!1,maxWidth:"auto",edgeOffset:2,defaultPosition:"top",delay:50,fadeIn:50,fadeOut:100,attribute:"title",attribute2:"desc",content:"",enter:function(){},exit:function(){}},r=e.extend(n,t),i,s,o,u;if(e("#tiptip_holder").length<=0){i=e('<div id="tiptip_holder" style="max-width:'+r.maxWidth+';"></div>');s=e('<div id="tiptip_content"></div>');o=e('<div id="tiptip_inner"></div>');u=e('<div id="tiptip_arrow"></div>');e("body").append(i.html(s).prepend(u.html('<div id="tiptip_arrow_inner"></div>')))}else{i=e("#tiptip_holder");s=e("#tiptip_content");o=e("#tiptip_inner");u=e("#tiptip_arrow")}return this.each(function(){var t=e(this),n,a,f;if(t.attr(r.attribute)){n=t.attr(r.attribute);a=t.attr(r.attribute2)}else{n=r.title;a=r.content}if(n!==""){if(!r.content){t.removeAttr(r.attribute);t.removeAttr(r.attribute2)}f=!1;if(r.activation==="hover"){t.hover(function(){l()},function(){r.keepAlive||c()});r.keepAlive&&i.hover(function(){},function(){c()})}else if(r.activation==="focus")t.focus(function(){l()}).blur(function(){c()});else if(r.activation==="click"){t.click(function(){l();return!1}).hover(function(){},function(){r.keepAlive||c()});r.keepAlive&&i.hover(function(){},function(){c()})}function l(){r.enter.call(this);s.html('<h3 id="tiptip_title">'+n+"</h3>");o.html(a);s.append(o);i.hide().removeAttr("class").css("margin","0");u.removeAttr("style");var l=parseInt(t.offset().top);t.attr("id")==="elefunds_logo"&&(l-=8);var c=parseInt(t.offset().left),h=parseInt(t.width()),p=parseInt(t.height()),d=i.width(),v=i.height(),m=Math.round((h-d)/2),g=Math.round((p-v)/2),y=Math.round(c+m),b=Math.round(l+p+r.edgeOffset),w="",E="",S=Math.round(d-12)/2;r.defaultPosition==="bottom"?w="_bottom":r.defaultPosition==="top"?w="_top":r.defaultPosition==="left"?w="_left":r.defaultPosition==="right"&&(w="_right");var x=m+c<parseInt(e(window).scrollLeft()),T=d+c>parseInt(e(window).width());if(x&&m<0||w=="_right"&&!T||w=="_left"&&c<d+r.edgeOffset+5){w="_right";E=Math.round(v-13)/2;S=-12;y=Math.round(c+h+r.edgeOffset);b=Math.round(l+g)}else if(T&&m<0||w=="_left"&&!x){w="_left";E=Math.round(v-13)/2;S=Math.round(d);y=Math.round(c-(d+r.edgeOffset+5));b=Math.round(l+g)}var N=l+p+r.edgeOffset+v+8>parseInt(e(window).height()+e(window).scrollTop()),C=l+p-(r.edgeOffset+v+8)<0;if(N||w=="_bottom"&&N||w=="_top"&&!C){w=="_top"||w=="_bottom"?w="_top":w+="_top";E=v;b=Math.round(l-(v+5+r.edgeOffset))}else if(C|(w=="_top"&&C)||w=="_bottom"&&!N){w=="_top"||w=="_bottom"?w="_bottom":w+="_bottom";E=-12;b=Math.round(l+p+r.edgeOffset)}u.css({"margin-left":S+"px","margin-top":E+"px"});i.css({"margin-left":y+"px","margin-top":b+"px"}).attr("class","tip"+w);f&&clearTimeout(f);f=setTimeout(function(){i.stop(!0,!0).fadeIn(r.fadeIn)},r.delay)}function c(){r.exit.call(this);f&&clearTimeout(f);i.fadeOut(r.fadeOut)}}})}})(window.jQuery);var elefunds=function(e,t){function l(e){function l(){t("#elefunds_checkbox").prop("checked",!0);t("#elefunds_input").addClass("elefunds_input_active");n.slideDown();t("#elefunds").trigger("elefunds_enabled");f=!0}function c(){t("#elefunds_checkbox").prop("checked",!1);t("#elefunds_input").removeClass("elefunds_input_active");n.slideUp();t("#elefunds").trigger("elefunds_disabled");f=!1}n=e.roundSumContainer;r=e.roundSum;i=e.currency;s=e.decimal;o=e.deciamlAlt;u=e.total;a=e.toolTipPosition;t("#elefunds").data("elefunds-roundSum",h(u+parseInt(t("#elefunds_donation_cent").val(),10)));t("#elefunds").data("elefunds-donation",{donationCent:parseInt(t("#elefunds_donation_cent").val(),10),donationFloat:h(parseInt(t("#elefunds_donation_cent").val(),10))});t(".elefunds_receiver > input").on("change",function(){t("#elefunds_bottom").find('input[type="checkbox"]:checked').length==0?c():f||l();t(this).parent().toggleClass("elefunds_receiver_selected")});t("#elefunds_checkbox").on("change",function(){if(t("#elefunds_checkbox").prop("checked")&&t("#elefunds_bottom").find('input[type="checkbox"]:checked').length==0){t("#elefunds_bottom").find('input[type="checkbox"]').prop("checked",!0);t("#elefunds_bottom").find('input[type="checkbox"]').parent().toggleClass("elefunds_receiver_selected")}if(!t("#elefunds_checkbox:checked").length){n.slideUp();t("#elefunds").trigger("elefunds_disabled");f=!1}else if(t("#elefunds_checkbox:checked").length){n.slideDown();var e=parseInt(t("#elefunds_donation_cent").val(),10);t("#elefunds").data("elefunds-donation",{donationCent:e,donationFloat:h(e)});t("#elefunds").trigger("elefunds_enabled");f=!0}t("#elefunds_input").toggleClass("elefunds_input_active")});t("#elefunds_input").keyup(function(e){e.which==13&&e.preventDefault()});t(".tiptip").tipTip({defaultPosition:a||"top",edgeOffset:-12,delay:200})}function c(e){var t,n;e.indexOf(s)!==-1?n=e.split(s,2):e.indexOf(o)!==-1?n=e.split(o,2):n=[e,0];n[1].length>2&&(n[1]=n[1].substr(0,2));while(n[1].length<2)n[1]+="0";n[0].length<1&&(n[0]=0);t=parseInt(n[0],10)*100+parseInt(n[1],10);if(isNaN(t)||t<0)t=0;return t}function h(e){var t;if(e<10)t="0"+s+"0"+e;else if(e<100)t="0"+s+e;else{e=e.toString();t=e.slice(0,-2)+s+e.slice(-2)}return t}function p(e){var n=h(e);t("#elefunds_input").val(n);d(e);f&&t("#elefunds").trigger("elefunds_donationChange")}function d(e){t("#elefunds_donation_cent").val(e);t("#elefunds").data("elefunds-roundSum",h(u+e));t("#elefunds").data("elefunds-donation",{donationCent:e,donationFloat:h(e)});r&&r.html(h(u+e))}var n,r,i,s,o,u,a,f=!1;(function(){e.hasOwnProperty("options")&&l(e.options)})();return{init:function(e){l(e)},decreaseDonation:function(){var e=parseInt(t("#elefunds_donation_cent").val(),10);if(e>100){e-=100;p(e)}return e},increaseDonation:function(){var e=parseInt(t("#elefunds_donation_cent").val(),10);e=parseInt(e,10)+100;p(e);return e},donationChange:function(e){var n=c(e);d(n);var r=t("#elefunds").data("elefunds-timer"),i=(new Date).getTime(),s=800;typeof r!="undefined"&&r!==null&&i-r.time<s&&clearTimeout(r.timer);if(f){var o=setTimeout(function(){t("#elefunds").trigger("elefunds_donationChange")},s);t("#elefunds").data("elefunds-timer",{timer:o,time:(new Date).getTime()})}return n}}}(elefunds||{},jQuery);
skin/frontend/base/default/js/lfnds_donation/elefundsTT.jquery.js ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * TipTip
3
+ * Copyright 2010 Drew Wilson
4
+ * www.drewwilson.com
5
+ * code.drewwilson.com/entry/tiptip-jquery-plugin
6
+ *
7
+ * Version 1.3 - Updated: Mar. 23, 2010
8
+ *
9
+ * This Plug-In will create a custom tooltip to replace the default
10
+ * browser tooltip. It is extremely lightweight and very smart in
11
+ * that it detects the edges of the browser window and will make sure
12
+ * the tooltip stays within the current window size. As a result the
13
+ * tooltip will adjust itself to be displayed above, below, to the left
14
+ * or to the right depending on what is necessary to stay within the
15
+ * browser window. It is completely customizable as well via CSS.
16
+ *
17
+ * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
18
+ * http://www.opensource.org/licenses/mit-license.php
19
+ * http://www.gnu.org/licenses/gpl.html
20
+ */
21
+
22
+ (function ($) {
23
+ $.fn.tipTip = function (options) {
24
+ var defaults = {
25
+ activation: "hover",
26
+ keepAlive: false,
27
+ maxWidth: "auto",
28
+ edgeOffset: 2,
29
+ defaultPosition: "top",
30
+ delay: 50,
31
+ fadeIn: 50,
32
+ fadeOut: 100,
33
+ attribute: "title",
34
+ attribute2: "desc",
35
+ content: '',
36
+ enter: function () {},
37
+ exit: function () {}
38
+ },
39
+ opts = $.extend(defaults, options),
40
+ tiptip_holder,
41
+ tiptip_content,
42
+ tiptip_inner,
43
+ tiptip_arrow;
44
+
45
+ // Setup tip tip elements and render them to the DOM
46
+ if ($("#tiptip_holder").length <= 0) {
47
+ tiptip_holder = $('<div id="tiptip_holder" style="max-width:' + opts.maxWidth + ';"></div>');
48
+ tiptip_content = $('<div id="tiptip_content"></div>');
49
+ tiptip_inner = $('<div id="tiptip_inner"></div>');
50
+ tiptip_arrow = $('<div id="tiptip_arrow"></div>');
51
+ $("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));
52
+ } else {
53
+ tiptip_holder = $('#tiptip_holder');
54
+ tiptip_content = $('#tiptip_content');
55
+ tiptip_inner = $('#tiptip_inner');
56
+ tiptip_arrow = $("#tiptip_arrow");
57
+ }
58
+
59
+ return this.each(function () {
60
+ var org_elem = $(this),
61
+ org_title,
62
+ org_desc,
63
+ timeout;
64
+
65
+ if (org_elem.attr(opts.attribute)) {
66
+ org_title = org_elem.attr(opts.attribute);
67
+ org_desc = org_elem.attr(opts.attribute2);
68
+ } else {
69
+ org_title = opts.title;
70
+ org_desc = opts.content;
71
+ }
72
+
73
+ if (org_title !== "") {
74
+ if (!opts.content) {
75
+ org_elem.removeAttr(opts.attribute);
76
+ org_elem.removeAttr(opts.attribute2);
77
+ }
78
+ timeout = false;
79
+
80
+ if (opts.activation === "hover") {
81
+ org_elem.hover(function () {
82
+ active_tiptip();
83
+ }, function () {
84
+ if (!opts.keepAlive) {
85
+ deactive_tiptip();
86
+ }
87
+ });
88
+ if (opts.keepAlive) {
89
+ tiptip_holder.hover(function () {}, function () {
90
+ deactive_tiptip();
91
+ });
92
+ }
93
+ } else if (opts.activation === "focus") {
94
+ org_elem.focus(function () {
95
+ active_tiptip();
96
+ }).blur(function () {
97
+ deactive_tiptip();
98
+ });
99
+ } else if (opts.activation === "click") {
100
+ org_elem.click(function () {
101
+ active_tiptip();
102
+ return false;
103
+ }).hover(function () {}, function () {
104
+ if (!opts.keepAlive) {
105
+ deactive_tiptip();
106
+ }
107
+ });
108
+ if (opts.keepAlive) {
109
+ tiptip_holder.hover(function () {}, function () {
110
+ deactive_tiptip();
111
+ });
112
+ }
113
+ }
114
+
115
+ function active_tiptip() {
116
+ opts.enter.call(this);
117
+
118
+ tiptip_content.html('<h3 id="tiptip_title">' + org_title + '</h3>');
119
+ tiptip_inner.html(org_desc);
120
+ tiptip_content.append(tiptip_inner);
121
+ tiptip_holder.hide().removeAttr("class").css("margin", "0");
122
+ tiptip_arrow.removeAttr("style");
123
+
124
+ var top = parseInt(org_elem.offset().top);
125
+ if (org_elem.attr('id') === 'elefunds_logo') {
126
+ top -= 8;
127
+ }
128
+
129
+ var left = parseInt(org_elem.offset().left),
130
+ org_width = parseInt(org_elem.width()),
131
+ org_height = parseInt(org_elem.height()),
132
+ tip_w = tiptip_holder.width(),
133
+ tip_h = tiptip_holder.height(),
134
+ w_compare = Math.round((org_width - tip_w) / 2),
135
+ h_compare = Math.round((org_height - tip_h) / 2),
136
+ marg_left = Math.round(left + w_compare),
137
+ marg_top = Math.round(top + org_height + opts.edgeOffset),
138
+ t_class = "",
139
+ arrow_top = "",
140
+ arrow_left = Math.round(tip_w - 12) / 2;
141
+
142
+ if (opts.defaultPosition === "bottom") {
143
+ t_class = "_bottom";
144
+ } else if (opts.defaultPosition === "top") {
145
+ t_class = "_top";
146
+ } else if (opts.defaultPosition === "left") {
147
+ t_class = "_left";
148
+ } else if (opts.defaultPosition === "right") {
149
+ t_class = "_right";
150
+ }
151
+
152
+ var right_compare = (w_compare + left) < parseInt($(window).scrollLeft());
153
+ var left_compare = (tip_w + left) > parseInt($(window).width());
154
+
155
+ if((right_compare && w_compare < 0) || (t_class == "_right" && !left_compare) || (t_class == "_left" && left < (tip_w + opts.edgeOffset + 5))){
156
+ t_class = "_right";
157
+ arrow_top = Math.round(tip_h - 13) / 2;
158
+ arrow_left = -12;
159
+ marg_left = Math.round(left + org_width + opts.edgeOffset);
160
+ marg_top = Math.round(top + h_compare);
161
+ } else if((left_compare && w_compare < 0) || (t_class == "_left" && !right_compare)){
162
+ t_class = "_left";
163
+ arrow_top = Math.round(tip_h - 13) / 2;
164
+ arrow_left = Math.round(tip_w);
165
+ marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
166
+ marg_top = Math.round(top + h_compare);
167
+ }
168
+
169
+ var top_compare = (top + org_height + opts.edgeOffset + tip_h + 8) > parseInt($(window).height() + $(window).scrollTop()),
170
+ bottom_compare = ((top + org_height) - (opts.edgeOffset + tip_h + 8)) < 0;
171
+
172
+ if(top_compare || (t_class == "_bottom" && top_compare) || (t_class == "_top" && !bottom_compare)){
173
+ if(t_class == "_top" || t_class == "_bottom"){
174
+ t_class = "_top";
175
+ } else {
176
+ t_class = t_class+"_top";
177
+ }
178
+ arrow_top = tip_h;
179
+ marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
180
+ } else if(bottom_compare | (t_class == "_top" && bottom_compare) || (t_class == "_bottom" && !top_compare)){
181
+ if(t_class == "_top" || t_class == "_bottom"){
182
+ t_class = "_bottom";
183
+ } else {
184
+ t_class = t_class+"_bottom";
185
+ }
186
+ arrow_top = -12;
187
+ marg_top = Math.round(top + org_height + opts.edgeOffset);
188
+ }
189
+
190
+ tiptip_arrow.css({"margin-left": arrow_left + "px", "margin-top": arrow_top + "px"});
191
+ tiptip_holder.css({"margin-left": marg_left + "px", "margin-top": marg_top + "px"}).attr("class", "tip" + t_class);
192
+
193
+ if (timeout) {
194
+ clearTimeout(timeout);
195
+ }
196
+ timeout = setTimeout(function () {
197
+ tiptip_holder.stop(true, true).fadeIn(opts.fadeIn);
198
+ }, opts.delay);
199
+ }
200
+
201
+ function deactive_tiptip() {
202
+ opts.exit.call(this);
203
+ if (timeout) {
204
+ clearTimeout(timeout);
205
+ }
206
+ tiptip_holder.fadeOut(opts.fadeOut);
207
+ }
208
+ }
209
+ });
210
+ };
211
+ })(window.jQuery);
skin/frontend/base/default/js/lfnds_donation/jQueryNoConflict.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery.noConflict();
skin/frontend/base/default/js/lfnds_donation/jquery-1.9.1.min.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
2
+ //@ sourceMappingURL=jquery.min.map
3
+ */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
4
+ return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
5
+ }b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);