Razorpay for WooCommerce - Version 2.7.0

Version Description

  • Added auto-webhook setup feature.
  • Updates Razorpay SDK.
  • Tested upto WordPress 5.7.2 and WooCommerce 5.3.0
Download this release

Release Info

Developer razorpay
Plugin Icon 128x128 Razorpay for WooCommerce
Version 2.7.0
Comparing to
See all releases

Code changes from version 2.6.0 to 2.7.0

Files changed (80) hide show
  1. includes/razorpay-webhook.php +3 -3
  2. razorpay-sdk/Razorpay.php +2 -2
  3. razorpay-sdk/libs/Requests-1.8.0/.codecov.yml +21 -0
  4. razorpay-sdk/libs/Requests-1.8.0/CHANGELOG.md +598 -0
  5. razorpay-sdk/libs/Requests-1.8.0/LICENSE +49 -0
  6. razorpay-sdk/libs/Requests-1.8.0/README.md +162 -0
  7. razorpay-sdk/libs/Requests-1.8.0/composer.json +47 -0
  8. razorpay-sdk/libs/Requests-1.8.0/library/Requests.php +1001 -0
  9. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Auth.php +33 -0
  10. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Auth/Basic.php +88 -0
  11. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Cookie.php +505 -0
  12. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Cookie/Jar.php +175 -0
  13. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception.php +62 -0
  14. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP.php +71 -0
  15. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/304.php +27 -0
  16. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/305.php +27 -0
  17. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/306.php +27 -0
  18. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/400.php +27 -0
  19. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/401.php +27 -0
  20. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/402.php +27 -0
  21. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/403.php +27 -0
  22. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/404.php +27 -0
  23. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/405.php +27 -0
  24. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/406.php +27 -0
  25. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/407.php +27 -0
  26. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/408.php +27 -0
  27. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/409.php +27 -0
  28. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/410.php +27 -0
  29. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/411.php +27 -0
  30. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/412.php +27 -0
  31. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/413.php +27 -0
  32. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/414.php +27 -0
  33. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/415.php +27 -0
  34. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/416.php +27 -0
  35. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/417.php +27 -0
  36. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/418.php +29 -0
  37. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/428.php +29 -0
  38. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/429.php +29 -0
  39. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/431.php +29 -0
  40. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/500.php +27 -0
  41. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/501.php +27 -0
  42. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/502.php +27 -0
  43. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/503.php +27 -0
  44. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/504.php +27 -0
  45. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/505.php +27 -0
  46. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/511.php +29 -0
  47. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/Unknown.php +44 -0
  48. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/Transport.php +5 -0
  49. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/Transport/cURL.php +56 -0
  50. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Hooker.php +33 -0
  51. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Hooks.php +68 -0
  52. razorpay-sdk/libs/Requests-1.8.0/library/Requests/IDNAEncoder.php +387 -0
  53. razorpay-sdk/libs/Requests-1.8.0/library/Requests/IPv6.php +190 -0
  54. razorpay-sdk/libs/Requests-1.8.0/library/Requests/IRI.php +1086 -0
  55. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Proxy.php +35 -0
  56. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Proxy/HTTP.php +151 -0
  57. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Response.php +122 -0
  58. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Response/Headers.php +98 -0
  59. razorpay-sdk/libs/Requests-1.8.0/library/Requests/SSL.php +144 -0
  60. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Session.php +268 -0
  61. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport.php +41 -0
  62. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/cURL.php +589 -0
  63. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/cacert.pem +3302 -0
  64. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/fsockopen.php +451 -0
  65. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Utility/CaseInsensitiveDictionary.php +103 -0
  66. razorpay-sdk/libs/Requests-1.8.0/library/Requests/Utility/FilteredIterator.php +65 -0
  67. razorpay-sdk/libs/Requests-1.8.0/phpunit.xml.dist +43 -0
  68. razorpay-sdk/src/Api.php +1 -1
  69. razorpay-sdk/src/Customer.php +5 -0
  70. razorpay-sdk/src/Entity.php +18 -10
  71. razorpay-sdk/src/Invoice.php +4 -2
  72. razorpay-sdk/src/Payment.php +16 -0
  73. razorpay-sdk/src/PaymentPage.php +31 -0
  74. razorpay-sdk/src/Request.php +20 -1
  75. razorpay-sdk/src/Settlement.php +42 -0
  76. razorpay-sdk/src/Subscription.php +3 -3
  77. razorpay-sdk/src/VirtualAccount.php +2 -2
  78. razorpay-sdk/src/Webhook.php +39 -0
  79. readme.txt +16 -3
  80. woo-razorpay.php +159 -11
includes/razorpay-webhook.php CHANGED
@@ -159,7 +159,7 @@ class RZP_Webhook
159
  //
160
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_id'];
161
 
162
- $order = new WC_Order($orderId);
163
 
164
  // If it is already marked as paid, ignore the event
165
  if ($order->needs_payment() === false)
@@ -242,7 +242,7 @@ class RZP_Webhook
242
  //
243
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_id'];
244
 
245
- $order = new WC_Order($orderId);
246
 
247
  // If it is already marked as paid, ignore the event
248
  if ($order->needs_payment() === false)
@@ -377,7 +377,7 @@ class RZP_Webhook
377
  //
378
  $orderId = $payment['notes']['woocommerce_order_id'];
379
 
380
- $order = new WC_Order($orderId);
381
 
382
  // If it is already marked as unpaid, ignore the event
383
  if ($order->needs_payment() === true)
159
  //
160
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_id'];
161
 
162
+ $order = wc_get_order($orderId);
163
 
164
  // If it is already marked as paid, ignore the event
165
  if ($order->needs_payment() === false)
242
  //
243
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_id'];
244
 
245
+ $order = wc_get_order($orderId);
246
 
247
  // If it is already marked as paid, ignore the event
248
  if ($order->needs_payment() === false)
377
  //
378
  $orderId = $payment['notes']['woocommerce_order_id'];
379
 
380
+ $order = wc_get_order($orderId);
381
 
382
  // If it is already marked as unpaid, ignore the event
383
  if ($order->needs_payment() === true)
razorpay-sdk/Razorpay.php CHANGED
@@ -3,12 +3,12 @@
3
  // Include Requests only if not already defined
4
  if (class_exists('Requests') === false)
5
  {
6
- require_once __DIR__.'/libs/Requests-1.6.1/library/Requests.php';
7
  }
8
 
9
  try
10
  {
11
- Requests::register_autoloader();
12
 
13
  if (version_compare(Requests::VERSION, '1.6.0') === -1)
14
  {
3
  // Include Requests only if not already defined
4
  if (class_exists('Requests') === false)
5
  {
6
+ require_once __DIR__.'/libs/Requests-1.8.0/library/Requests.php';
7
  }
8
 
9
  try
10
  {
11
+ Requests::register_autoloader();
12
 
13
  if (version_compare(Requests::VERSION, '1.6.0') === -1)
14
  {
razorpay-sdk/libs/Requests-1.8.0/.codecov.yml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ codecov:
2
+ notify:
3
+ after_n_builds: 2
4
+
5
+ coverage:
6
+ round: nearest
7
+ # Status will be green when coverage is between 85 and 100%.
8
+ range: "85...100"
9
+ status:
10
+ project:
11
+ default:
12
+ threshold: 1%
13
+ paths:
14
+ - "library"
15
+ patch:
16
+ default:
17
+ threshold: 0%
18
+ paths:
19
+ - "library"
20
+
21
+ comment: false
razorpay-sdk/libs/Requests-1.8.0/CHANGELOG.md ADDED
@@ -0,0 +1,598 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Changelog
2
+ =========
3
+
4
+ 1.8.0
5
+ -----
6
+
7
+ ### IMPORTANT NOTES
8
+
9
+ #### Last release supporting PHP 5.2 - 5.5
10
+
11
+ Release 1.8.0 will be the last release with compatibility for PHP 5.2 - 5.5. With the next release (v2.0.0), the minimum PHP version will be bumped to 5.6.
12
+
13
+ #### Last release supporting PEAR distribution
14
+
15
+ Release 1.8.0 will be the last release to be distributed via PEAR. From release 2.0.0 onwards, consumers of this library will have to switch to Composer to receive updates.
16
+
17
+ ### Overview of changes
18
+
19
+ - **[SECURITY FIX] Disable deserialization in `FilteredIterator`**
20
+
21
+ A `Deserialization of Untrusted Data` weakness was found in the `FilteredIterator` class.
22
+
23
+ This security vulnerability was first reported to the WordPress project. The security fix applied to WordPress has been ported back into the library.
24
+
25
+ GitHub security advisory: [CVE-2021-29476 - Deserialization of Untrusted Data](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-29476)
26
+
27
+ Related WordPress CVE: [https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032)
28
+
29
+ (props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@peterwilsoncc][gh-peterwilsoncc], [@SergeyBiryukov][gh-SergeyBiryukov], [@whyisjake][gh-whyisjake], [@xknown][gh-xknown], [#421][gh-421], [#422][gh-422])
30
+
31
+
32
+ - **Repository moved to `WordPress\Requests`**
33
+
34
+ The `Requests` library has been moved to the WordPress GitHub organization and can now be found under `https://github.com/WordPress/Requests`.
35
+
36
+ All links in code and documentation were updated accordingly.
37
+
38
+ Note: the Composer package name remains unchanged ([`rmccue/requests`](https://packagist.org/packages/rmccue/requests)), as well as the documentation site ([requests.ryanmccue.info](https://requests.ryanmccue.info/)).
39
+
40
+ (props [@dd32][gh-dd32], [@JustinyAhin][gh-JustinyAhin], [@jrfnl][gh-jrfnl], [@rmccue][gh-rmccue], [#440][gh-440], [#441][gh-441], [#448][gh-448])
41
+
42
+
43
+ - **Manage `"Expect"` header with `cURL` transport**
44
+
45
+ By default, `cURL` adds a `Expect: 100-Continue` header to certain requests. This can add as much as a second delay to requests done using `cURL`. This is [discussed on the cURL mailing list](https://curl.se/mail/lib-2017-07/0013.html).
46
+
47
+ To prevent this, `Requests` now adds an empty `"Expect"` header to requests that are smaller than 1 MB and use HTTP/1.1.
48
+
49
+ (props [@carlalexander][gh-carlalexander], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [#453][gh-453], [#454][gh-454], [#469][gh-469])
50
+
51
+
52
+ - **Update bundled certificates as of 2021-02-12**
53
+
54
+ The bundled certificates were updated. A small subset of expired certificates are still included for legacy reasons (and support).
55
+
56
+ (props [@ozh][gh-ozh], [@patmead][gh-patmead], [@schlessera][gh-schlessera], [@todeveni][gh-todeveni], [#385][gh-385], [#398][gh-398], [#451][gh-451])
57
+
58
+
59
+ - **Add required `Content-*` headers for empty `POST` requests**
60
+
61
+ Sends the `Content-Length` and `Content-Type` headers even for empty `POST` requests, as the length is expected as per [RFC2616 Section 14.13](https://tools.ietf.org/html/rfc2616#section-14.13):
62
+ ```
63
+ Content-Length header "SHOULD" be included. In practice, it is not
64
+ used for GET nor HEAD requests, but is expected for POST requests.
65
+ ```
66
+
67
+ (props [@dd32][gh-dd32], [@gstrauss][gh-gstrauss], [@jrfnl][gh-jrfnl], [@soulseekah][gh-soulseekah], [#248][gh-248], [#249][gh-249], [#318][gh-318], [#368][gh-368])
68
+
69
+
70
+ - **Ignore locale when creating the HTTP version string from a float**
71
+
72
+ The previous behavior allowed for the locale to mess up the float to string conversion resulting in a `GET / HTTP/1,1` instead of `GET / HTTP/1.1` request.
73
+
74
+ (props [@tonebender][gh-tonebender], [@Zegnat][gh-Zegnat], [#335][gh-335], [#339][gh-339])
75
+
76
+
77
+ - **Make `verify => false` work with `fsockopen`**
78
+
79
+ This allows the `fsockopen` transport now to ignore SSL failures when requested.
80
+
81
+ (props [@soulseekah][gh-soulseekah], [#310][gh-310], [#311][gh-311])
82
+
83
+
84
+ - **Only include port number in the `Host` header if it differs from the default**
85
+
86
+ The code was not violating the RFC per se, but also not following standard practice of leaving the port off when it is the default port for the scheme, which could lead to connectivity issues.
87
+
88
+ (props [@amandato][gh-amandato], [@dd32][gh-dd32], [#238][gh-238])
89
+
90
+
91
+ - **Fix PHP cross-version compatibility**
92
+
93
+ Important fixes have been made to improve cross-version compatibility of the code across all supported PHP versions.
94
+
95
+ - Use documented order for `implode()` arguments.
96
+ - Harden type handling when no domain was passed.
97
+ - Explicitly cast `$url` property to `string` in `Requests::parse_response()`.
98
+ - Initialize `$body` property to an empty string in `Requests::parse_response()`.
99
+ - Ensure the stream handle is valid before trying to close it.
100
+ - Ensure the `$callback` in the `FilteredIterator` is callable before calling it.
101
+
102
+ (props [@aaronjorbin][gh-aaronjorbin], [@jrfnl][gh-jrfnl], [#346][gh-346], [#370][gh-370], [#425][gh-425], [#426][gh-426], [#456][gh-456], [#457][gh-457])
103
+
104
+
105
+ - **Improve testing**
106
+
107
+ Lots of improvements were made to render the tests more reliable and increase the coverage.
108
+
109
+ And to top it all off, all tests are now run against all supported PHP versions, including PHP 8.0.
110
+
111
+ (props [@datagutten][gh-datagutten], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#345][gh-345], [#351][gh-351], [#355][gh-355], [#366][gh-366], [#412][gh-412], [#414][gh-414], [#445][gh-445], [#458][gh-458], [#464][gh-464])
112
+
113
+
114
+ - **Improve code quality and style**
115
+
116
+ A whole swoop of changes has been made to harden the code and make it more consistent.
117
+
118
+ The code style has been made consistent across both code and tests and is now enforced via a custom PHPCS rule set.
119
+
120
+ The WordPress Coding Standards were chosen as the basis for the code style checks as most contributors to this library originate from the WordPress community and will be familiar with this code style.
121
+
122
+ Main differences from the WordPress Coding Standards based on discussions and an analysis of the code styles already in use:
123
+
124
+ - No whitespace on the inside of parentheses.
125
+ - No Yoda conditions.
126
+
127
+ A more detailed overview of the decisions that went into the final code style rules can be found at [#434][gh-434].
128
+
129
+ (props [@jrfnl][gh-jrfnl], [@KasperFranz][gh-KasperFranz], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TysonAndre][gh-TysonAndre], [#263][gh-263], [#296][gh-296], [#328][gh-328], [#358][gh-358], [#359][gh-359], [#360][gh-360], [#361][gh-361], [#362][gh-362], [#363][gh-363], [#364][gh-364], [#386][gh-386], [#396][gh-396], [#399][gh-399], [#400][gh-400], [#401][gh-401], [#402][gh-402], [#403][gh-403], [#404][gh-404], [#405][gh-405], [#406][gh-406], [#408][gh-408], [#409][gh-409], [#410][gh-410], [#411][gh-411], [#413][gh-413], [#415][gh-415], [#416][gh-416], [#417][gh-417], [#423][gh-423], [#424][gh-424], [#434][gh-434])
130
+
131
+
132
+ - **Replace Travis CI with GitHub Actions (partial)**
133
+
134
+ The entire CI setup is gradually being moved from Travis CI to GitHub Actions.
135
+
136
+ At this point, GitHub Actions takes over the CI from PHP 5.5 onwards, leaving Travis CI as a fallback for lower PHP versions.
137
+
138
+ This move will be completed after the planned minimum version bump to PHP 5.6+ with the next release, at which point we will get rid of all the remaining Travis CI integrations.
139
+
140
+ (props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@ntwb][gh-ntwb], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [@TysonAndre][gh-TysonAndre], [#280][gh-280], [#298][gh-298], [#302][gh-302], [#303][gh-303], [#352][gh-352], [#353][gh-353], [#354][gh-354], [#356][gh-356], [#388][gh-388], [#397][gh-397], [#428][gh-428], [#436][gh-436], [#439][gh-439], [#461][gh-461], [#467][gh-467])
141
+
142
+
143
+ - **Update and improve documentation**
144
+ - Use clearer and more inclusive language.
145
+ - Update the GitHub Pages site.
146
+ - Update content and various tweaks to the markdown.
147
+ - Fix code blocks in `README.md` file.
148
+ - Add pagination to documentation pages.
149
+
150
+ (props [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@JustinyAhin][gh-JustinyAhin], [@tnorthcutt][gh-tnorthcutt], [#334][gh-334], [#367][gh-367], [#387][gh-387], [#443][gh-443], [#462][gh-462], [#465][gh-465], [#468][gh-468], [#471][gh-471] )
151
+
152
+ [gh-194]: https://github.com/WordPress/Requests/issues/194
153
+ [gh-238]: https://github.com/WordPress/Requests/issues/238
154
+ [gh-248]: https://github.com/WordPress/Requests/issues/248
155
+ [gh-249]: https://github.com/WordPress/Requests/issues/249
156
+ [gh-263]: https://github.com/WordPress/Requests/issues/263
157
+ [gh-280]: https://github.com/WordPress/Requests/issues/280
158
+ [gh-296]: https://github.com/WordPress/Requests/issues/296
159
+ [gh-298]: https://github.com/WordPress/Requests/issues/298
160
+ [gh-302]: https://github.com/WordPress/Requests/issues/302
161
+ [gh-303]: https://github.com/WordPress/Requests/issues/303
162
+ [gh-310]: https://github.com/WordPress/Requests/issues/310
163
+ [gh-311]: https://github.com/WordPress/Requests/issues/311
164
+ [gh-318]: https://github.com/WordPress/Requests/issues/318
165
+ [gh-328]: https://github.com/WordPress/Requests/issues/328
166
+ [gh-334]: https://github.com/WordPress/Requests/issues/334
167
+ [gh-335]: https://github.com/WordPress/Requests/issues/335
168
+ [gh-339]: https://github.com/WordPress/Requests/issues/339
169
+ [gh-345]: https://github.com/WordPress/Requests/issues/345
170
+ [gh-346]: https://github.com/WordPress/Requests/issues/346
171
+ [gh-351]: https://github.com/WordPress/Requests/issues/351
172
+ [gh-352]: https://github.com/WordPress/Requests/issues/352
173
+ [gh-353]: https://github.com/WordPress/Requests/issues/353
174
+ [gh-354]: https://github.com/WordPress/Requests/issues/354
175
+ [gh-355]: https://github.com/WordPress/Requests/issues/355
176
+ [gh-356]: https://github.com/WordPress/Requests/issues/356
177
+ [gh-358]: https://github.com/WordPress/Requests/issues/358
178
+ [gh-359]: https://github.com/WordPress/Requests/issues/359
179
+ [gh-360]: https://github.com/WordPress/Requests/issues/360
180
+ [gh-361]: https://github.com/WordPress/Requests/issues/361
181
+ [gh-362]: https://github.com/WordPress/Requests/issues/362
182
+ [gh-363]: https://github.com/WordPress/Requests/issues/363
183
+ [gh-364]: https://github.com/WordPress/Requests/issues/364
184
+ [gh-366]: https://github.com/WordPress/Requests/issues/366
185
+ [gh-367]: https://github.com/WordPress/Requests/issues/367
186
+ [gh-367]: https://github.com/WordPress/Requests/issues/367
187
+ [gh-368]: https://github.com/WordPress/Requests/issues/368
188
+ [gh-370]: https://github.com/WordPress/Requests/issues/370
189
+ [gh-385]: https://github.com/WordPress/Requests/issues/385
190
+ [gh-386]: https://github.com/WordPress/Requests/issues/386
191
+ [gh-387]: https://github.com/WordPress/Requests/issues/387
192
+ [gh-388]: https://github.com/WordPress/Requests/issues/388
193
+ [gh-396]: https://github.com/WordPress/Requests/issues/396
194
+ [gh-397]: https://github.com/WordPress/Requests/issues/397
195
+ [gh-398]: https://github.com/WordPress/Requests/issues/398
196
+ [gh-399]: https://github.com/WordPress/Requests/issues/399
197
+ [gh-400]: https://github.com/WordPress/Requests/issues/400
198
+ [gh-401]: https://github.com/WordPress/Requests/issues/401
199
+ [gh-402]: https://github.com/WordPress/Requests/issues/402
200
+ [gh-403]: https://github.com/WordPress/Requests/issues/403
201
+ [gh-404]: https://github.com/WordPress/Requests/issues/404
202
+ [gh-405]: https://github.com/WordPress/Requests/issues/405
203
+ [gh-406]: https://github.com/WordPress/Requests/issues/406
204
+ [gh-408]: https://github.com/WordPress/Requests/issues/408
205
+ [gh-409]: https://github.com/WordPress/Requests/issues/409
206
+ [gh-410]: https://github.com/WordPress/Requests/issues/410
207
+ [gh-411]: https://github.com/WordPress/Requests/issues/411
208
+ [gh-412]: https://github.com/WordPress/Requests/issues/412
209
+ [gh-413]: https://github.com/WordPress/Requests/issues/413
210
+ [gh-414]: https://github.com/WordPress/Requests/issues/414
211
+ [gh-415]: https://github.com/WordPress/Requests/issues/415
212
+ [gh-416]: https://github.com/WordPress/Requests/issues/416
213
+ [gh-417]: https://github.com/WordPress/Requests/issues/417
214
+ [gh-421]: https://github.com/WordPress/Requests/issues/421
215
+ [gh-422]: https://github.com/WordPress/Requests/issues/422
216
+ [gh-423]: https://github.com/WordPress/Requests/issues/423
217
+ [gh-424]: https://github.com/WordPress/Requests/issues/424
218
+ [gh-425]: https://github.com/WordPress/Requests/issues/425
219
+ [gh-426]: https://github.com/WordPress/Requests/issues/426
220
+ [gh-428]: https://github.com/WordPress/Requests/issues/428
221
+ [gh-434]: https://github.com/WordPress/Requests/issues/434
222
+ [gh-436]: https://github.com/WordPress/Requests/issues/436
223
+ [gh-439]: https://github.com/WordPress/Requests/issues/439
224
+ [gh-440]: https://github.com/WordPress/Requests/issues/440
225
+ [gh-441]: https://github.com/WordPress/Requests/issues/441
226
+ [gh-443]: https://github.com/WordPress/Requests/issues/443
227
+ [gh-445]: https://github.com/WordPress/Requests/issues/445
228
+ [gh-448]: https://github.com/WordPress/Requests/issues/448
229
+ [gh-451]: https://github.com/WordPress/Requests/issues/451
230
+ [gh-453]: https://github.com/WordPress/Requests/issues/453
231
+ [gh-454]: https://github.com/WordPress/Requests/issues/454
232
+ [gh-456]: https://github.com/WordPress/Requests/issues/456
233
+ [gh-457]: https://github.com/WordPress/Requests/issues/457
234
+ [gh-458]: https://github.com/WordPress/Requests/issues/458
235
+ [gh-461]: https://github.com/WordPress/Requests/issues/461
236
+ [gh-462]: https://github.com/WordPress/Requests/issues/462
237
+ [gh-464]: https://github.com/WordPress/Requests/issues/464
238
+ [gh-465]: https://github.com/WordPress/Requests/issues/465
239
+ [gh-467]: https://github.com/WordPress/Requests/issues/467
240
+ [gh-468]: https://github.com/WordPress/Requests/issues/468
241
+ [gh-469]: https://github.com/WordPress/Requests/issues/469
242
+ [gh-471]: https://github.com/WordPress/Requests/issues/471
243
+
244
+ 1.7.0
245
+ -----
246
+
247
+ - Add support for HHVM and PHP 7
248
+
249
+ Requests is now tested against both HHVM and PHP 7, and they are supported as
250
+ first-party platforms.
251
+
252
+ (props [@rmccue][gh-rmccue], [#106][gh-106], [#176][gh-176])
253
+
254
+ - Transfer & connect timeouts, in seconds & milliseconds
255
+
256
+ cURL is unable to handle timeouts under a second in DNS lookups, so we round
257
+ those up to ensure 1-999ms isn't counted as an instant failure.
258
+
259
+ (props [@ozh][gh-ozh], [@rmccue][gh-rmccue], [#97][gh-97], [#216][gh-216])
260
+
261
+ - Rework cookie handling to be more thorough.
262
+
263
+ Cookies are now restricted to the same-origin by default, expiration is checked.
264
+
265
+ (props [@catharsisjelly][gh-catharsisjelly], [@rmccue][gh-rmccue], [#120][gh-120], [#124][gh-124], [#130][gh-130], [#132][gh-132], [#156][gh-156])
266
+
267
+ - Improve testing
268
+
269
+ Tests are now run locally to speed them up, as well as further general
270
+ improvements to the quality of the testing suite. There are now also
271
+ comprehensive proxy tests to ensure coverage there.
272
+
273
+ (props [@rmccue][gh-rmccue], [#75][gh-75], [#107][gh-107], [#170][gh-170], [#177][gh-177], [#181][gh-181], [#183][gh-183], [#185][gh-185], [#196][gh-196], [#202][gh-202], [#203][gh-203])
274
+
275
+ - Support custom HTTP methods
276
+
277
+ Previously, custom HTTP methods were only supported on sockets; they are now
278
+ supported across all transports.
279
+
280
+ (props [@ocean90][gh-ocean90], [#227][gh-227])
281
+
282
+ - Add byte limit option
283
+
284
+ (props [@rmccue][gh-rmccue], [#172][gh-172])
285
+
286
+ - Support a Requests_Proxy_HTTP() instance for the proxy setting.
287
+
288
+ (props [@ocean90][gh-ocean90], [#223][gh-223])
289
+
290
+ - Add progress hook
291
+
292
+ (props [@rmccue][gh-rmccue], [#180][gh-180])
293
+
294
+ - Add a before_redirect hook to alter redirects
295
+
296
+ (props [@rmccue][gh-rmccue], [#205][gh-205])
297
+
298
+ - Pass cURL info to after_request
299
+
300
+ (props [@rmccue][gh-rmccue], [#206][gh-206])
301
+
302
+ - Remove explicit autoload in Composer installation instructions
303
+
304
+ (props [@SlikNL][gh-SlikNL], [#86][gh-86])
305
+
306
+ - Restrict CURLOPT_PROTOCOLS on `defined()` instead of `version_compare()`
307
+
308
+ (props [@ozh][gh-ozh], [#92][gh-92])
309
+
310
+ - Fix doc - typo in "Authentication"
311
+
312
+ (props [@remik][gh-remik], [#99][gh-99])
313
+
314
+ - Contextually check for a valid transport
315
+
316
+ (props [@ozh][gh-ozh], [#101][gh-101])
317
+
318
+ - Follow relative redirects correctly
319
+
320
+ (props [@ozh][gh-ozh], [#103][gh-103])
321
+
322
+ - Use cURL's version_number
323
+
324
+ (props [@mishan][gh-mishan], [#104][gh-104])
325
+
326
+ - Removed duplicated option docs
327
+
328
+ (props [@staabm][gh-staabm], [#112][gh-112])
329
+
330
+ - code styling fixed
331
+
332
+ (props [@imsaintx][gh-imsaintx], [#113][gh-113])
333
+
334
+ - Fix IRI "normalization"
335
+
336
+ (props [@ozh][gh-ozh], [#128][gh-128])
337
+
338
+ - Mention two PHP extension dependencies in the README.
339
+
340
+ (props [@orlitzky][gh-orlitzky], [#136][gh-136])
341
+
342
+ - Ignore coverage report files
343
+
344
+ (props [@ozh][gh-ozh], [#148][gh-148])
345
+
346
+ - drop obsolete "return" after throw
347
+
348
+ (props [@staabm][gh-staabm], [#150][gh-150])
349
+
350
+ - Updated exception message to specify both http + https
351
+
352
+ (props [@beutnagel][gh-beutnagel], [#162][gh-162])
353
+
354
+ - Sets `stream_headers` method to public to allow calling it from other
355
+ places.
356
+
357
+ (props [@adri][gh-adri], [#158][gh-158])
358
+
359
+ - Remove duplicated stream_get_meta_data call
360
+
361
+ (props [@rmccue][gh-rmccue], [#179][gh-179])
362
+
363
+ - Transmits $errno from stream_socket_client in exception
364
+
365
+ (props [@laurentmartelli][gh-laurentmartelli], [#174][gh-174])
366
+
367
+ - Correct methods to use snake_case
368
+
369
+ (props [@rmccue][gh-rmccue], [#184][gh-184])
370
+
371
+ - Improve code quality
372
+
373
+ (props [@rmccue][gh-rmccue], [#186][gh-186])
374
+
375
+ - Update Build Status image
376
+
377
+ (props [@rmccue][gh-rmccue], [#187][gh-187])
378
+
379
+ - Fix/Rationalize transports (v2)
380
+
381
+ (props [@rmccue][gh-rmccue], [#188][gh-188])
382
+
383
+ - Surface cURL errors
384
+
385
+ (props [@ifwe][gh-ifwe], [#194][gh-194])
386
+
387
+ - Fix for memleak and curl_close() never being called
388
+
389
+ (props [@kwuerl][gh-kwuerl], [#200][gh-200])
390
+
391
+ - addex how to install with composer
392
+
393
+ (props [@royopa][gh-royopa], [#164][gh-164])
394
+
395
+ - Uppercase the method to ensure compatibility
396
+
397
+ (props [@rmccue][gh-rmccue], [#207][gh-207])
398
+
399
+ - Store default certificate path
400
+
401
+ (props [@rmccue][gh-rmccue], [#210][gh-210])
402
+
403
+ - Force closing keep-alive connections on old cURL
404
+
405
+ (props [@rmccue][gh-rmccue], [#211][gh-211])
406
+
407
+ - Docs: Updated HTTP links with HTTPS links where applicable
408
+
409
+ (props [@ntwb][gh-ntwb], [#215][gh-215])
410
+
411
+ - Remove the executable bit
412
+
413
+ (props [@ocean90][gh-ocean90], [#224][gh-224])
414
+
415
+ - Change more links to HTTPS
416
+
417
+ (props [@rmccue][gh-rmccue], [#217][gh-217])
418
+
419
+ - Bail from cURL when either `curl_init()` OR `curl_exec()` are unavailable
420
+
421
+ (props [@dd32][gh-dd32], [#230][gh-230])
422
+
423
+ - Disable OpenSSL's internal peer_name checking when `verifyname` is disabled.
424
+
425
+ (props [@dd32][gh-dd32], [#239][gh-239])
426
+
427
+ - Only include the port number in the `Host` header when it differs from
428
+ default
429
+
430
+ (props [@dd32][gh-dd32], [#238][gh-238])
431
+
432
+ - Respect port if specified for HTTPS connections
433
+
434
+ (props [@dd32][gh-dd32], [#237][gh-237])
435
+
436
+ - Allow paths starting with a double-slash
437
+
438
+ (props [@rmccue][gh-rmccue], [#240][gh-240])
439
+
440
+ - Fixes bug in rfc2616 #3.6.1 implementation.
441
+
442
+ (props [@stephenharris][gh-stephenharris], [#236][gh-236], [#3][gh-3])
443
+
444
+ - CURLOPT_HTTPHEADER在php7接受空数组导致php-fpm奔溃
445
+
446
+ (props [@qibinghua][gh-qibinghua], [#219][gh-219])
447
+
448
+ [gh-3]: https://github.com/WordPress/Requests/issues/3
449
+ [gh-75]: https://github.com/WordPress/Requests/issues/75
450
+ [gh-86]: https://github.com/WordPress/Requests/issues/86
451
+ [gh-92]: https://github.com/WordPress/Requests/issues/92
452
+ [gh-97]: https://github.com/WordPress/Requests/issues/97
453
+ [gh-99]: https://github.com/WordPress/Requests/issues/99
454
+ [gh-101]: https://github.com/WordPress/Requests/issues/101
455
+ [gh-103]: https://github.com/WordPress/Requests/issues/103
456
+ [gh-104]: https://github.com/WordPress/Requests/issues/104
457
+ [gh-106]: https://github.com/WordPress/Requests/issues/106
458
+ [gh-107]: https://github.com/WordPress/Requests/issues/107
459
+ [gh-112]: https://github.com/WordPress/Requests/issues/112
460
+ [gh-113]: https://github.com/WordPress/Requests/issues/113
461
+ [gh-120]: https://github.com/WordPress/Requests/issues/120
462
+ [gh-124]: https://github.com/WordPress/Requests/issues/124
463
+ [gh-128]: https://github.com/WordPress/Requests/issues/128
464
+ [gh-130]: https://github.com/WordPress/Requests/issues/130
465
+ [gh-132]: https://github.com/WordPress/Requests/issues/132
466
+ [gh-136]: https://github.com/WordPress/Requests/issues/136
467
+ [gh-148]: https://github.com/WordPress/Requests/issues/148
468
+ [gh-150]: https://github.com/WordPress/Requests/issues/150
469
+ [gh-156]: https://github.com/WordPress/Requests/issues/156
470
+ [gh-158]: https://github.com/WordPress/Requests/issues/158
471
+ [gh-162]: https://github.com/WordPress/Requests/issues/162
472
+ [gh-164]: https://github.com/WordPress/Requests/issues/164
473
+ [gh-170]: https://github.com/WordPress/Requests/issues/170
474
+ [gh-172]: https://github.com/WordPress/Requests/issues/172
475
+ [gh-174]: https://github.com/WordPress/Requests/issues/174
476
+ [gh-176]: https://github.com/WordPress/Requests/issues/176
477
+ [gh-177]: https://github.com/WordPress/Requests/issues/177
478
+ [gh-179]: https://github.com/WordPress/Requests/issues/179
479
+ [gh-180]: https://github.com/WordPress/Requests/issues/180
480
+ [gh-181]: https://github.com/WordPress/Requests/issues/181
481
+ [gh-183]: https://github.com/WordPress/Requests/issues/183
482
+ [gh-184]: https://github.com/WordPress/Requests/issues/184
483
+ [gh-185]: https://github.com/WordPress/Requests/issues/185
484
+ [gh-186]: https://github.com/WordPress/Requests/issues/186
485
+ [gh-187]: https://github.com/WordPress/Requests/issues/187
486
+ [gh-188]: https://github.com/WordPress/Requests/issues/188
487
+ [gh-194]: https://github.com/WordPress/Requests/issues/194
488
+ [gh-196]: https://github.com/WordPress/Requests/issues/196
489
+ [gh-200]: https://github.com/WordPress/Requests/issues/200
490
+ [gh-202]: https://github.com/WordPress/Requests/issues/202
491
+ [gh-203]: https://github.com/WordPress/Requests/issues/203
492
+ [gh-205]: https://github.com/WordPress/Requests/issues/205
493
+ [gh-206]: https://github.com/WordPress/Requests/issues/206
494
+ [gh-207]: https://github.com/WordPress/Requests/issues/207
495
+ [gh-210]: https://github.com/WordPress/Requests/issues/210
496
+ [gh-211]: https://github.com/WordPress/Requests/issues/211
497
+ [gh-215]: https://github.com/WordPress/Requests/issues/215
498
+ [gh-216]: https://github.com/WordPress/Requests/issues/216
499
+ [gh-217]: https://github.com/WordPress/Requests/issues/217
500
+ [gh-219]: https://github.com/WordPress/Requests/issues/219
501
+ [gh-223]: https://github.com/WordPress/Requests/issues/223
502
+ [gh-224]: https://github.com/WordPress/Requests/issues/224
503
+ [gh-227]: https://github.com/WordPress/Requests/issues/227
504
+ [gh-230]: https://github.com/WordPress/Requests/issues/230
505
+ [gh-236]: https://github.com/WordPress/Requests/issues/236
506
+ [gh-237]: https://github.com/WordPress/Requests/issues/237
507
+ [gh-238]: https://github.com/WordPress/Requests/issues/238
508
+ [gh-239]: https://github.com/WordPress/Requests/issues/239
509
+ [gh-240]: https://github.com/WordPress/Requests/issues/240
510
+
511
+ 1.6.0
512
+ -----
513
+ - [Add multiple request support][#23] - Send multiple HTTP requests with both
514
+ fsockopen and cURL, transparently falling back to synchronous when
515
+ not supported.
516
+
517
+ - [Add proxy support][#70] - HTTP proxies are now natively supported via a
518
+ [high-level API][docs/proxy]. Major props to Ozh for his fantastic work
519
+ on this.
520
+
521
+ - [Verify host name for SSL requests][#63] - Requests is now the first and only
522
+ standalone HTTP library to fully verify SSL hostnames even with socket
523
+ connections. Thanks to Michael Adams, Dion Hulse, Jon Cave, and Pádraic Brady
524
+ for reviewing the crucial code behind this.
525
+
526
+ - [Add cookie support][#64] - Adds built-in support for cookies (built entirely
527
+ as a high-level API)
528
+
529
+ - [Add sessions][#62] - To compliment cookies, [sessions][docs/usage-advanced]
530
+ can be created with a base URL and default options, plus a shared cookie jar.
531
+
532
+ - Add [PUT][#1], [DELETE][#3], and [PATCH][#2] request support
533
+
534
+ - [Add Composer support][#6] - You can now install Requests via the
535
+ `rmccue/requests` package on Composer
536
+
537
+ [docs/proxy]: http://requests.ryanmccue.info/docs/proxy.html
538
+ [docs/usage-advanced]: http://requests.ryanmccue.info/docs/usage-advanced.html
539
+
540
+ [#1]: https://github.com/WordPress/Requests/issues/1
541
+ [#2]: https://github.com/WordPress/Requests/issues/2
542
+ [#3]: https://github.com/WordPress/Requests/issues/3
543
+ [#6]: https://github.com/WordPress/Requests/issues/6
544
+ [#9]: https://github.com/WordPress/Requests/issues/9
545
+ [#23]: https://github.com/WordPress/Requests/issues/23
546
+ [#62]: https://github.com/WordPress/Requests/issues/62
547
+ [#63]: https://github.com/WordPress/Requests/issues/63
548
+ [#64]: https://github.com/WordPress/Requests/issues/64
549
+ [#70]: https://github.com/WordPress/Requests/issues/70
550
+
551
+ [View all changes][https://github.com/WordPress/Requests/compare/v1.5.0...v1.6.0]
552
+
553
+ 1.5.0
554
+ -----
555
+ Initial release!
556
+
557
+ [gh-aaronjorbin]: https://github.com/aaronjorbin
558
+ [gh-adri]: https://github.com/adri
559
+ [gh-amandato]: https://github.com/amandato
560
+ [gh-beutnagel]: https://github.com/beutnagel
561
+ [gh-carlalexander]: https://github.com/carlalexander
562
+ [gh-catharsisjelly]: https://github.com/catharsisjelly
563
+ [gh-datagutten]: https://github.com/datagutten
564
+ [gh-dd32]: https://github.com/dd32
565
+ [gh-desrosj]: https://github.com/desrosj
566
+ [gh-gstrauss]: https://github.com/gstrauss
567
+ [gh-ifwe]: https://github.com/ifwe
568
+ [gh-imsaintx]: https://github.com/imsaintx
569
+ [gh-JustinyAhin]: https://github.com/JustinyAhin
570
+ [gh-jrfnl]: https://github.com/jrfnl
571
+ [gh-KasperFranz]: https://github.com/KasperFranz
572
+ [gh-kwuerl]: https://github.com/kwuerl
573
+ [gh-laurentmartelli]: https://github.com/laurentmartelli
574
+ [gh-mishan]: https://github.com/mishan
575
+ [gh-ntwb]: https://github.com/ntwb
576
+ [gh-ocean90]: https://github.com/ocean90
577
+ [gh-orlitzky]: https://github.com/orlitzky
578
+ [gh-ozh]: https://github.com/ozh
579
+ [gh-patmead]: https://github.com/patmead
580
+ [gh-peterwilsoncc]: https://github.com/peterwilsoncc
581
+ [gh-qibinghua]: https://github.com/qibinghua
582
+ [gh-remik]: https://github.com/remik
583
+ [gh-rmccue]: https://github.com/rmccue
584
+ [gh-royopa]: https://github.com/royopa
585
+ [gh-schlessera]: https://github.com/schlessera
586
+ [gh-SergeyBiryukov]: https://github.com/SergeyBiryukov
587
+ [gh-SlikNL]: https://github.com/SlikNL
588
+ [gh-soulseekah]: https://github.com/soulseekah
589
+ [gh-staabm]: https://github.com/staabm
590
+ [gh-stephenharris]: https://github.com/stephenharris
591
+ [gh-TimothyBJacobs]: https://github.com/TimothyBJacobs
592
+ [gh-tnorthcutt]: https://github.com/tnorthcutt
593
+ [gh-todeveni]: https://github.com/todeveni
594
+ [gh-tonebender]: https://github.com/tonebender
595
+ [gh-TysonAndre]: https://github.com/TysonAndre
596
+ [gh-whyisjake]: https://github.com/whyisjake
597
+ [gh-xknown]: https://github.com/xknown
598
+ [gh-Zegnat]: https://github.com/Zegnat
razorpay-sdk/libs/Requests-1.8.0/LICENSE ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Requests
2
+ ========
3
+
4
+ Copyright (c) 2010-2012 Ryan McCue and contributors
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted, provided that the above
8
+ copyright notice and this permission notice appear in all copies.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
+
18
+
19
+ ComplexPie IRI Parser
20
+ =====================
21
+
22
+ Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
23
+ All rights reserved.
24
+
25
+ Redistribution and use in source and binary forms, with or without
26
+ modification, are permitted provided that the following conditions are met:
27
+
28
+ * Redistributions of source code must retain the above copyright notice,
29
+ this list of conditions and the following disclaimer.
30
+
31
+ * Redistributions in binary form must reproduce the above copyright notice,
32
+ this list of conditions and the following disclaimer in the documentation
33
+ and/or other materials provided with the distribution.
34
+
35
+ * Neither the name of the SimplePie Team nor the names of its contributors
36
+ may be used to endorse or promote products derived from this software
37
+ without specific prior written permission.
38
+
39
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
40
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
43
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
45
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49
+ POSSIBILITY OF SUCH DAMAGE.
razorpay-sdk/libs/Requests-1.8.0/README.md ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Requests for PHP
2
+ ================
3
+
4
+ [![CS](https://github.com/WordPress/Requests/actions/workflows/cs.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/cs.yml)
5
+ [![Lint](https://github.com/WordPress/Requests/actions/workflows/lint.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/lint.yml)
6
+ [![Test](https://github.com/WordPress/Requests/actions/workflows/test.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/test.yml)
7
+ [![CI PHP 5.2-5.4](https://travis-ci.org/WordPress/Requests.svg?branch=master)](https://travis-ci.org/WordPress/Requests)
8
+ [![codecov.io](http://codecov.io/github/WordPress/Requests/coverage.svg?branch=master)](http://codecov.io/github/WordPress/Requests?branch=master)
9
+
10
+ Requests is a HTTP library written in PHP, for human beings. It is roughly
11
+ based on the API from the excellent [Requests Python
12
+ library](http://python-requests.org/). Requests is [ISC
13
+ Licensed](https://github.com/WordPress/Requests/blob/master/LICENSE) (similar to
14
+ the new BSD license) and has no dependencies, except for PHP 5.2+.
15
+
16
+ Despite PHP's use as a language for the web, its tools for sending HTTP requests
17
+ are severely lacking. cURL has an
18
+ [interesting API](http://php.net/manual/en/function.curl-setopt.php), to say the
19
+ least, and you can't always rely on it being available. Sockets provide only low
20
+ level access, and require you to build most of the HTTP response parsing
21
+ yourself.
22
+
23
+ We all have better things to do. That's why Requests was born.
24
+
25
+ ```php
26
+ $headers = array('Accept' => 'application/json');
27
+ $options = array('auth' => array('user', 'pass'));
28
+ $request = Requests::get('https://api.github.com/gists', $headers, $options);
29
+
30
+ var_dump($request->status_code);
31
+ // int(200)
32
+
33
+ var_dump($request->headers['content-type']);
34
+ // string(31) "application/json; charset=utf-8"
35
+
36
+ var_dump($request->body);
37
+ // string(26891) "[...]"
38
+ ```
39
+
40
+ Requests allows you to send **HEAD**, **GET**, **POST**, **PUT**, **DELETE**,
41
+ and **PATCH** HTTP requests. You can add headers, form data, multipart files,
42
+ and parameters with basic arrays, and access the response data in the same way.
43
+ Requests uses cURL and fsockopen, depending on what your system has available,
44
+ but abstracts all the nasty stuff out of your way, providing a consistent API.
45
+
46
+
47
+ Features
48
+ --------
49
+
50
+ - International Domains and URLs
51
+ - Browser-style SSL Verification
52
+ - Basic/Digest Authentication
53
+ - Automatic Decompression
54
+ - Connection Timeouts
55
+
56
+
57
+ Installation
58
+ ------------
59
+
60
+ ### Install with Composer
61
+ If you're using [Composer](https://github.com/composer/composer) to manage
62
+ dependencies, you can add Requests with it.
63
+
64
+ ```sh
65
+ composer require rmccue/requests
66
+ ```
67
+
68
+ or
69
+ ```json
70
+ {
71
+ "require": {
72
+ "rmccue/requests": ">=1.0"
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### Install source from GitHub
78
+ To install the source code:
79
+ ```bash
80
+ $ git clone git://github.com/WordPress/Requests.git
81
+ ```
82
+
83
+ And include it in your scripts:
84
+ ```php
85
+ require_once '/path/to/Requests/library/Requests.php';
86
+ ```
87
+
88
+ You'll probably also want to register an autoloader:
89
+ ```php
90
+ Requests::register_autoloader();
91
+ ```
92
+
93
+ ### Install source from zip/tarball
94
+ Alternatively, you can fetch a [tarball][] or [zipball][]:
95
+
96
+ ```bash
97
+ $ curl -L https://github.com/WordPress/Requests/tarball/master | tar xzv
98
+ (or)
99
+ $ wget https://github.com/WordPress/Requests/tarball/master -O - | tar xzv
100
+ ```
101
+
102
+ [tarball]: https://github.com/WordPress/Requests/tarball/master
103
+ [zipball]: https://github.com/WordPress/Requests/zipball/master
104
+
105
+
106
+ ### Using a Class Loader
107
+ If you're using a class loader (e.g., [Symfony Class Loader][]) for
108
+ [PSR-0][]-style class loading:
109
+ ```php
110
+ $loader->registerPrefix('Requests', 'path/to/vendor/Requests/library');
111
+ ```
112
+
113
+ [Symfony Class Loader]: https://github.com/symfony/ClassLoader
114
+ [PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
115
+
116
+
117
+ Documentation
118
+ -------------
119
+ The best place to start is our [prose-based documentation][], which will guide
120
+ you through using Requests.
121
+
122
+ After that, take a look at [the documentation for
123
+ `Requests::request()`][request_method], where all the parameters are fully
124
+ documented.
125
+
126
+ Requests is [100% documented with PHPDoc](http://requests.ryanmccue.info/api/).
127
+ If you find any problems with it, [create a new
128
+ issue](https://github.com/WordPress/Requests/issues/new)!
129
+
130
+ [prose-based documentation]: https://github.com/WordPress/Requests/blob/master/docs/README.md
131
+ [request_method]: http://requests.ryanmccue.info/api/class-Requests.html#_request
132
+
133
+ Testing
134
+ -------
135
+
136
+ Requests strives to have 100% code-coverage of the library with an extensive
137
+ set of tests. We're not quite there yet, but [we're getting close][codecov].
138
+
139
+ [codecov]: http://codecov.io/github/WordPress/Requests
140
+
141
+ To run the test suite, first check that you have the [PHP
142
+ JSON extension ](http://php.net/manual/en/book.json.php) enabled. Then
143
+ simply:
144
+ ```bash
145
+ $ phpunit
146
+ ```
147
+
148
+ If you'd like to run a single set of tests, specify just the name:
149
+ ```bash
150
+ $ phpunit Transport/cURL
151
+ ```
152
+
153
+ Contribute
154
+ ----------
155
+
156
+ 1. Check for open issues or open a new issue for a feature request or a bug
157
+ 2. Fork [the repository][] on Github to start making your changes to the
158
+ `master` branch (or branch off of it)
159
+ 3. Write a test which shows that the bug was fixed or that the feature works as expected
160
+ 4. Send a pull request and bug me until I merge it
161
+
162
+ [the repository]: https://github.com/WordPress/Requests
razorpay-sdk/libs/Requests-1.8.0/composer.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "rmccue/requests",
3
+ "description": "A HTTP library written in PHP, for human beings.",
4
+ "homepage": "http://github.com/WordPress/Requests",
5
+ "license": "ISC",
6
+ "keywords": ["http", "idna", "iri", "ipv6", "curl", "sockets", "fsockopen"],
7
+ "authors": [
8
+ {
9
+ "name": "Ryan McCue",
10
+ "homepage": "http://ryanmccue.info"
11
+ }
12
+ ],
13
+ "require": {
14
+ "php": ">=5.2"
15
+ },
16
+ "require-dev": {
17
+ "requests/test-server": "dev-master",
18
+ "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
19
+ "squizlabs/php_codesniffer": "^3.5",
20
+ "phpcompatibility/php-compatibility": "^9.0",
21
+ "wp-coding-standards/wpcs": "^2.0",
22
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
23
+ "php-parallel-lint/php-parallel-lint": "^1.3",
24
+ "php-parallel-lint/php-console-highlighter": "^0.5.0"
25
+ },
26
+ "type": "library",
27
+ "autoload": {
28
+ "psr-0": {"Requests": "library/"}
29
+ },
30
+ "scripts" : {
31
+ "lint": [
32
+ "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php --exclude vendor --exclude .git"
33
+ ],
34
+ "checkcs": [
35
+ "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs"
36
+ ],
37
+ "fixcs": [
38
+ "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf"
39
+ ],
40
+ "test": [
41
+ "@php ./vendor/phpunit/phpunit/phpunit --no-coverage"
42
+ ],
43
+ "coverage": [
44
+ "@php ./vendor/phpunit/phpunit/phpunit"
45
+ ]
46
+ }
47
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests.php ADDED
@@ -0,0 +1,1001 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Requests for PHP
4
+ *
5
+ * Inspired by Requests for Python.
6
+ *
7
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
8
+ *
9
+ * @package Requests
10
+ */
11
+
12
+ /**
13
+ * Requests for PHP
14
+ *
15
+ * Inspired by Requests for Python.
16
+ *
17
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
18
+ *
19
+ * @package Requests
20
+ */
21
+ class Requests {
22
+ /**
23
+ * POST method
24
+ *
25
+ * @var string
26
+ */
27
+ const POST = 'POST';
28
+
29
+ /**
30
+ * PUT method
31
+ *
32
+ * @var string
33
+ */
34
+ const PUT = 'PUT';
35
+
36
+ /**
37
+ * GET method
38
+ *
39
+ * @var string
40
+ */
41
+ const GET = 'GET';
42
+
43
+ /**
44
+ * HEAD method
45
+ *
46
+ * @var string
47
+ */
48
+ const HEAD = 'HEAD';
49
+
50
+ /**
51
+ * DELETE method
52
+ *
53
+ * @var string
54
+ */
55
+ const DELETE = 'DELETE';
56
+
57
+ /**
58
+ * OPTIONS method
59
+ *
60
+ * @var string
61
+ */
62
+ const OPTIONS = 'OPTIONS';
63
+
64
+ /**
65
+ * TRACE method
66
+ *
67
+ * @var string
68
+ */
69
+ const TRACE = 'TRACE';
70
+
71
+ /**
72
+ * PATCH method
73
+ *
74
+ * @link https://tools.ietf.org/html/rfc5789
75
+ * @var string
76
+ */
77
+ const PATCH = 'PATCH';
78
+
79
+ /**
80
+ * Default size of buffer size to read streams
81
+ *
82
+ * @var integer
83
+ */
84
+ const BUFFER_SIZE = 1160;
85
+
86
+ /**
87
+ * Current version of Requests
88
+ *
89
+ * @var string
90
+ */
91
+ const VERSION = '1.7';
92
+
93
+ /**
94
+ * Registered transport classes
95
+ *
96
+ * @var array
97
+ */
98
+ protected static $transports = array();
99
+
100
+ /**
101
+ * Selected transport name
102
+ *
103
+ * Use {@see get_transport()} instead
104
+ *
105
+ * @var array
106
+ */
107
+ public static $transport = array();
108
+
109
+ /**
110
+ * Default certificate path.
111
+ *
112
+ * @see Requests::get_certificate_path()
113
+ * @see Requests::set_certificate_path()
114
+ *
115
+ * @var string
116
+ */
117
+ protected static $certificate_path;
118
+
119
+ /**
120
+ * This is a static class, do not instantiate it
121
+ *
122
+ * @codeCoverageIgnore
123
+ */
124
+ private function __construct() {}
125
+
126
+ /**
127
+ * Autoloader for Requests
128
+ *
129
+ * Register this with {@see register_autoloader()} if you'd like to avoid
130
+ * having to create your own.
131
+ *
132
+ * (You can also use `spl_autoload_register` directly if you'd prefer.)
133
+ *
134
+ * @codeCoverageIgnore
135
+ *
136
+ * @param string $class Class name to load
137
+ */
138
+ public static function autoloader($class) {
139
+ // Check that the class starts with "Requests"
140
+ if (strpos($class, 'Requests') !== 0) {
141
+ return;
142
+ }
143
+
144
+ $file = str_replace('_', '/', $class);
145
+ if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
146
+ require_once dirname(__FILE__) . '/' . $file . '.php';
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Register the built-in autoloader
152
+ *
153
+ * @codeCoverageIgnore
154
+ */
155
+ public static function register_autoloader() {
156
+ spl_autoload_register(array('Requests', 'autoloader'));
157
+ }
158
+
159
+ /**
160
+ * Register a transport
161
+ *
162
+ * @param string $transport Transport class to add, must support the Requests_Transport interface
163
+ */
164
+ public static function add_transport($transport) {
165
+ if (empty(self::$transports)) {
166
+ self::$transports = array(
167
+ 'Requests_Transport_cURL',
168
+ 'Requests_Transport_fsockopen',
169
+ );
170
+ }
171
+
172
+ self::$transports = array_merge(self::$transports, array($transport));
173
+ }
174
+
175
+ /**
176
+ * Get a working transport
177
+ *
178
+ * @throws Requests_Exception If no valid transport is found (`notransport`)
179
+ * @return Requests_Transport
180
+ */
181
+ protected static function get_transport($capabilities = array()) {
182
+ // Caching code, don't bother testing coverage
183
+ // @codeCoverageIgnoreStart
184
+ // array of capabilities as a string to be used as an array key
185
+ ksort($capabilities);
186
+ $cap_string = serialize($capabilities);
187
+
188
+ // Don't search for a transport if it's already been done for these $capabilities
189
+ if (isset(self::$transport[$cap_string]) && self::$transport[$cap_string] !== null) {
190
+ $class = self::$transport[$cap_string];
191
+ return new $class();
192
+ }
193
+ // @codeCoverageIgnoreEnd
194
+
195
+ if (empty(self::$transports)) {
196
+ self::$transports = array(
197
+ 'Requests_Transport_cURL',
198
+ 'Requests_Transport_fsockopen',
199
+ );
200
+ }
201
+
202
+ // Find us a working transport
203
+ foreach (self::$transports as $class) {
204
+ if (!class_exists($class)) {
205
+ continue;
206
+ }
207
+
208
+ $result = call_user_func(array($class, 'test'), $capabilities);
209
+ if ($result) {
210
+ self::$transport[$cap_string] = $class;
211
+ break;
212
+ }
213
+ }
214
+ if (self::$transport[$cap_string] === null) {
215
+ throw new Requests_Exception('No working transports found', 'notransport', self::$transports);
216
+ }
217
+
218
+ $class = self::$transport[$cap_string];
219
+ return new $class();
220
+ }
221
+
222
+ /**#@+
223
+ * @see request()
224
+ * @param string $url
225
+ * @param array $headers
226
+ * @param array $options
227
+ * @return Requests_Response
228
+ */
229
+ /**
230
+ * Send a GET request
231
+ */
232
+ public static function get($url, $headers = array(), $options = array()) {
233
+ return self::request($url, $headers, null, self::GET, $options);
234
+ }
235
+
236
+ /**
237
+ * Send a HEAD request
238
+ */
239
+ public static function head($url, $headers = array(), $options = array()) {
240
+ return self::request($url, $headers, null, self::HEAD, $options);
241
+ }
242
+
243
+ /**
244
+ * Send a DELETE request
245
+ */
246
+ public static function delete($url, $headers = array(), $options = array()) {
247
+ return self::request($url, $headers, null, self::DELETE, $options);
248
+ }
249
+
250
+ /**
251
+ * Send a TRACE request
252
+ */
253
+ public static function trace($url, $headers = array(), $options = array()) {
254
+ return self::request($url, $headers, null, self::TRACE, $options);
255
+ }
256
+ /**#@-*/
257
+
258
+ /**#@+
259
+ * @see request()
260
+ * @param string $url
261
+ * @param array $headers
262
+ * @param array $data
263
+ * @param array $options
264
+ * @return Requests_Response
265
+ */
266
+ /**
267
+ * Send a POST request
268
+ */
269
+ public static function post($url, $headers = array(), $data = array(), $options = array()) {
270
+ return self::request($url, $headers, $data, self::POST, $options);
271
+ }
272
+ /**
273
+ * Send a PUT request
274
+ */
275
+ public static function put($url, $headers = array(), $data = array(), $options = array()) {
276
+ return self::request($url, $headers, $data, self::PUT, $options);
277
+ }
278
+
279
+ /**
280
+ * Send an OPTIONS request
281
+ */
282
+ public static function options($url, $headers = array(), $data = array(), $options = array()) {
283
+ return self::request($url, $headers, $data, self::OPTIONS, $options);
284
+ }
285
+
286
+ /**
287
+ * Send a PATCH request
288
+ *
289
+ * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
290
+ * specification recommends that should send an ETag
291
+ *
292
+ * @link https://tools.ietf.org/html/rfc5789
293
+ */
294
+ public static function patch($url, $headers, $data = array(), $options = array()) {
295
+ return self::request($url, $headers, $data, self::PATCH, $options);
296
+ }
297
+ /**#@-*/
298
+
299
+ /**
300
+ * Main interface for HTTP requests
301
+ *
302
+ * This method initiates a request and sends it via a transport before
303
+ * parsing.
304
+ *
305
+ * The `$options` parameter takes an associative array with the following
306
+ * options:
307
+ *
308
+ * - `timeout`: How long should we wait for a response?
309
+ * Note: for cURL, a minimum of 1 second applies, as DNS resolution
310
+ * operates at second-resolution only.
311
+ * (float, seconds with a millisecond precision, default: 10, example: 0.01)
312
+ * - `connect_timeout`: How long should we wait while trying to connect?
313
+ * (float, seconds with a millisecond precision, default: 10, example: 0.01)
314
+ * - `useragent`: Useragent to send to the server
315
+ * (string, default: php-requests/$version)
316
+ * - `follow_redirects`: Should we follow 3xx redirects?
317
+ * (boolean, default: true)
318
+ * - `redirects`: How many times should we redirect before erroring?
319
+ * (integer, default: 10)
320
+ * - `blocking`: Should we block processing on this request?
321
+ * (boolean, default: true)
322
+ * - `filename`: File to stream the body to instead.
323
+ * (string|boolean, default: false)
324
+ * - `auth`: Authentication handler or array of user/password details to use
325
+ * for Basic authentication
326
+ * (Requests_Auth|array|boolean, default: false)
327
+ * - `proxy`: Proxy details to use for proxy by-passing and authentication
328
+ * (Requests_Proxy|array|string|boolean, default: false)
329
+ * - `max_bytes`: Limit for the response body size.
330
+ * (integer|boolean, default: false)
331
+ * - `idn`: Enable IDN parsing
332
+ * (boolean, default: true)
333
+ * - `transport`: Custom transport. Either a class name, or a
334
+ * transport object. Defaults to the first working transport from
335
+ * {@see getTransport()}
336
+ * (string|Requests_Transport, default: {@see getTransport()})
337
+ * - `hooks`: Hooks handler.
338
+ * (Requests_Hooker, default: new Requests_Hooks())
339
+ * - `verify`: Should we verify SSL certificates? Allows passing in a custom
340
+ * certificate file as a string. (Using true uses the system-wide root
341
+ * certificate store instead, but this may have different behaviour
342
+ * across transports.)
343
+ * (string|boolean, default: library/Requests/Transport/cacert.pem)
344
+ * - `verifyname`: Should we verify the common name in the SSL certificate?
345
+ * (boolean, default: true)
346
+ * - `data_format`: How should we send the `$data` parameter?
347
+ * (string, one of 'query' or 'body', default: 'query' for
348
+ * HEAD/GET/DELETE, 'body' for POST/PUT/OPTIONS/PATCH)
349
+ *
350
+ * @throws Requests_Exception On invalid URLs (`nonhttp`)
351
+ *
352
+ * @param string $url URL to request
353
+ * @param array $headers Extra headers to send with the request
354
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
355
+ * @param string $type HTTP request type (use Requests constants)
356
+ * @param array $options Options for the request (see description for more information)
357
+ * @return Requests_Response
358
+ */
359
+ public static function request($url, $headers = array(), $data = array(), $type = self::GET, $options = array()) {
360
+ if (empty($options['type'])) {
361
+ $options['type'] = $type;
362
+ }
363
+ $options = array_merge(self::get_default_options(), $options);
364
+
365
+ self::set_defaults($url, $headers, $data, $type, $options);
366
+
367
+ $options['hooks']->dispatch('requests.before_request', array(&$url, &$headers, &$data, &$type, &$options));
368
+
369
+ if (!empty($options['transport'])) {
370
+ $transport = $options['transport'];
371
+
372
+ if (is_string($options['transport'])) {
373
+ $transport = new $transport();
374
+ }
375
+ }
376
+ else {
377
+ $need_ssl = (stripos($url, 'https://') === 0);
378
+ $capabilities = array('ssl' => $need_ssl);
379
+ $transport = self::get_transport($capabilities);
380
+ }
381
+ $response = $transport->request($url, $headers, $data, $options);
382
+
383
+ $options['hooks']->dispatch('requests.before_parse', array(&$response, $url, $headers, $data, $type, $options));
384
+
385
+ return self::parse_response($response, $url, $headers, $data, $options);
386
+ }
387
+
388
+ /**
389
+ * Send multiple HTTP requests simultaneously
390
+ *
391
+ * The `$requests` parameter takes an associative or indexed array of
392
+ * request fields. The key of each request can be used to match up the
393
+ * request with the returned data, or with the request passed into your
394
+ * `multiple.request.complete` callback.
395
+ *
396
+ * The request fields value is an associative array with the following keys:
397
+ *
398
+ * - `url`: Request URL Same as the `$url` parameter to
399
+ * {@see Requests::request}
400
+ * (string, required)
401
+ * - `headers`: Associative array of header fields. Same as the `$headers`
402
+ * parameter to {@see Requests::request}
403
+ * (array, default: `array()`)
404
+ * - `data`: Associative array of data fields or a string. Same as the
405
+ * `$data` parameter to {@see Requests::request}
406
+ * (array|string, default: `array()`)
407
+ * - `type`: HTTP request type (use Requests constants). Same as the `$type`
408
+ * parameter to {@see Requests::request}
409
+ * (string, default: `Requests::GET`)
410
+ * - `cookies`: Associative array of cookie name to value, or cookie jar.
411
+ * (array|Requests_Cookie_Jar)
412
+ *
413
+ * If the `$options` parameter is specified, individual requests will
414
+ * inherit options from it. This can be used to use a single hooking system,
415
+ * or set all the types to `Requests::POST`, for example.
416
+ *
417
+ * In addition, the `$options` parameter takes the following global options:
418
+ *
419
+ * - `complete`: A callback for when a request is complete. Takes two
420
+ * parameters, a Requests_Response/Requests_Exception reference, and the
421
+ * ID from the request array (Note: this can also be overridden on a
422
+ * per-request basis, although that's a little silly)
423
+ * (callback)
424
+ *
425
+ * @param array $requests Requests data (see description for more information)
426
+ * @param array $options Global and default options (see {@see Requests::request})
427
+ * @return array Responses (either Requests_Response or a Requests_Exception object)
428
+ */
429
+ public static function request_multiple($requests, $options = array()) {
430
+ $options = array_merge(self::get_default_options(true), $options);
431
+
432
+ if (!empty($options['hooks'])) {
433
+ $options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
434
+ if (!empty($options['complete'])) {
435
+ $options['hooks']->register('multiple.request.complete', $options['complete']);
436
+ }
437
+ }
438
+
439
+ foreach ($requests as $id => &$request) {
440
+ if (!isset($request['headers'])) {
441
+ $request['headers'] = array();
442
+ }
443
+ if (!isset($request['data'])) {
444
+ $request['data'] = array();
445
+ }
446
+ if (!isset($request['type'])) {
447
+ $request['type'] = self::GET;
448
+ }
449
+ if (!isset($request['options'])) {
450
+ $request['options'] = $options;
451
+ $request['options']['type'] = $request['type'];
452
+ }
453
+ else {
454
+ if (empty($request['options']['type'])) {
455
+ $request['options']['type'] = $request['type'];
456
+ }
457
+ $request['options'] = array_merge($options, $request['options']);
458
+ }
459
+
460
+ self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
461
+
462
+ // Ensure we only hook in once
463
+ if ($request['options']['hooks'] !== $options['hooks']) {
464
+ $request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
465
+ if (!empty($request['options']['complete'])) {
466
+ $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
467
+ }
468
+ }
469
+ }
470
+ unset($request);
471
+
472
+ if (!empty($options['transport'])) {
473
+ $transport = $options['transport'];
474
+
475
+ if (is_string($options['transport'])) {
476
+ $transport = new $transport();
477
+ }
478
+ }
479
+ else {
480
+ $transport = self::get_transport();
481
+ }
482
+ $responses = $transport->request_multiple($requests, $options);
483
+
484
+ foreach ($responses as $id => &$response) {
485
+ // If our hook got messed with somehow, ensure we end up with the
486
+ // correct response
487
+ if (is_string($response)) {
488
+ $request = $requests[$id];
489
+ self::parse_multiple($response, $request);
490
+ $request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id));
491
+ }
492
+ }
493
+
494
+ return $responses;
495
+ }
496
+
497
+ /**
498
+ * Get the default options
499
+ *
500
+ * @see Requests::request() for values returned by this method
501
+ * @param boolean $multirequest Is this a multirequest?
502
+ * @return array Default option values
503
+ */
504
+ protected static function get_default_options($multirequest = false) {
505
+ $defaults = array(
506
+ 'timeout' => 10,
507
+ 'connect_timeout' => 10,
508
+ 'useragent' => 'php-requests/' . self::VERSION,
509
+ 'protocol_version' => 1.1,
510
+ 'redirected' => 0,
511
+ 'redirects' => 10,
512
+ 'follow_redirects' => true,
513
+ 'blocking' => true,
514
+ 'type' => self::GET,
515
+ 'filename' => false,
516
+ 'auth' => false,
517
+ 'proxy' => false,
518
+ 'cookies' => false,
519
+ 'max_bytes' => false,
520
+ 'idn' => true,
521
+ 'hooks' => null,
522
+ 'transport' => null,
523
+ 'verify' => self::get_certificate_path(),
524
+ 'verifyname' => true,
525
+ );
526
+ if ($multirequest !== false) {
527
+ $defaults['complete'] = null;
528
+ }
529
+ return $defaults;
530
+ }
531
+
532
+ /**
533
+ * Get default certificate path.
534
+ *
535
+ * @return string Default certificate path.
536
+ */
537
+ public static function get_certificate_path() {
538
+ if (!empty(self::$certificate_path)) {
539
+ return self::$certificate_path;
540
+ }
541
+
542
+ return dirname(__FILE__) . '/Requests/Transport/cacert.pem';
543
+ }
544
+
545
+ /**
546
+ * Set default certificate path.
547
+ *
548
+ * @param string $path Certificate path, pointing to a PEM file.
549
+ */
550
+ public static function set_certificate_path($path) {
551
+ self::$certificate_path = $path;
552
+ }
553
+
554
+ /**
555
+ * Set the default values
556
+ *
557
+ * @param string $url URL to request
558
+ * @param array $headers Extra headers to send with the request
559
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
560
+ * @param string $type HTTP request type
561
+ * @param array $options Options for the request
562
+ * @return array $options
563
+ */
564
+ protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
565
+ if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
566
+ throw new Requests_Exception('Only HTTP(S) requests are handled.', 'nonhttp', $url);
567
+ }
568
+
569
+ if (empty($options['hooks'])) {
570
+ $options['hooks'] = new Requests_Hooks();
571
+ }
572
+
573
+ if (is_array($options['auth'])) {
574
+ $options['auth'] = new Requests_Auth_Basic($options['auth']);
575
+ }
576
+ if ($options['auth'] !== false) {
577
+ $options['auth']->register($options['hooks']);
578
+ }
579
+
580
+ if (is_string($options['proxy']) || is_array($options['proxy'])) {
581
+ $options['proxy'] = new Requests_Proxy_HTTP($options['proxy']);
582
+ }
583
+ if ($options['proxy'] !== false) {
584
+ $options['proxy']->register($options['hooks']);
585
+ }
586
+
587
+ if (is_array($options['cookies'])) {
588
+ $options['cookies'] = new Requests_Cookie_Jar($options['cookies']);
589
+ }
590
+ elseif (empty($options['cookies'])) {
591
+ $options['cookies'] = new Requests_Cookie_Jar();
592
+ }
593
+ if ($options['cookies'] !== false) {
594
+ $options['cookies']->register($options['hooks']);
595
+ }
596
+
597
+ if ($options['idn'] !== false) {
598
+ $iri = new Requests_IRI($url);
599
+ $iri->host = Requests_IDNAEncoder::encode($iri->ihost);
600
+ $url = $iri->uri;
601
+ }
602
+
603
+ // Massage the type to ensure we support it.
604
+ $type = strtoupper($type);
605
+
606
+ if (!isset($options['data_format'])) {
607
+ if (in_array($type, array(self::HEAD, self::GET, self::DELETE), true)) {
608
+ $options['data_format'] = 'query';
609
+ }
610
+ else {
611
+ $options['data_format'] = 'body';
612
+ }
613
+ }
614
+ }
615
+
616
+ /**
617
+ * HTTP response parser
618
+ *
619
+ * @throws Requests_Exception On missing head/body separator (`requests.no_crlf_separator`)
620
+ * @throws Requests_Exception On missing head/body separator (`noversion`)
621
+ * @throws Requests_Exception On missing head/body separator (`toomanyredirects`)
622
+ *
623
+ * @param string $headers Full response text including headers and body
624
+ * @param string $url Original request URL
625
+ * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
626
+ * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
627
+ * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
628
+ * @return Requests_Response
629
+ */
630
+ protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
631
+ $return = new Requests_Response();
632
+ if (!$options['blocking']) {
633
+ return $return;
634
+ }
635
+
636
+ $return->raw = $headers;
637
+ $return->url = (string) $url;
638
+ $return->body = '';
639
+
640
+ if (!$options['filename']) {
641
+ $pos = strpos($headers, "\r\n\r\n");
642
+ if ($pos === false) {
643
+ // Crap!
644
+ throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
645
+ }
646
+
647
+ $headers = substr($return->raw, 0, $pos);
648
+ // Headers will always be separated from the body by two new lines - `\n\r\n\r`.
649
+ $body = substr($return->raw, $pos + 4);
650
+ if (!empty($body)) {
651
+ $return->body = $body;
652
+ }
653
+ }
654
+ // Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
655
+ $headers = str_replace("\r\n", "\n", $headers);
656
+ // Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
657
+ $headers = preg_replace('/\n[ \t]/', ' ', $headers);
658
+ $headers = explode("\n", $headers);
659
+ preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches);
660
+ if (empty($matches)) {
661
+ throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
662
+ }
663
+ $return->protocol_version = (float) $matches[1];
664
+ $return->status_code = (int) $matches[2];
665
+ if ($return->status_code >= 200 && $return->status_code < 300) {
666
+ $return->success = true;
667
+ }
668
+
669
+ foreach ($headers as $header) {
670
+ list($key, $value) = explode(':', $header, 2);
671
+ $value = trim($value);
672
+ preg_replace('#(\s+)#i', ' ', $value);
673
+ $return->headers[$key] = $value;
674
+ }
675
+ if (isset($return->headers['transfer-encoding'])) {
676
+ $return->body = self::decode_chunked($return->body);
677
+ unset($return->headers['transfer-encoding']);
678
+ }
679
+ if (isset($return->headers['content-encoding'])) {
680
+ $return->body = self::decompress($return->body);
681
+ }
682
+
683
+ //fsockopen and cURL compatibility
684
+ if (isset($return->headers['connection'])) {
685
+ unset($return->headers['connection']);
686
+ }
687
+
688
+ $options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options));
689
+
690
+ if ($return->is_redirect() && $options['follow_redirects'] === true) {
691
+ if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
692
+ if ($return->status_code === 303) {
693
+ $options['type'] = self::GET;
694
+ }
695
+ $options['redirected']++;
696
+ $location = $return->headers['location'];
697
+ if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) {
698
+ // relative redirect, for compatibility make it absolute
699
+ $location = Requests_IRI::absolutize($url, $location);
700
+ $location = $location->uri;
701
+ }
702
+
703
+ $hook_args = array(
704
+ &$location,
705
+ &$req_headers,
706
+ &$req_data,
707
+ &$options,
708
+ $return,
709
+ );
710
+ $options['hooks']->dispatch('requests.before_redirect', $hook_args);
711
+ $redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
712
+ $redirected->history[] = $return;
713
+ return $redirected;
714
+ }
715
+ elseif ($options['redirected'] >= $options['redirects']) {
716
+ throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return);
717
+ }
718
+ }
719
+
720
+ $return->redirects = $options['redirected'];
721
+
722
+ $options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options));
723
+ return $return;
724
+ }
725
+
726
+ /**
727
+ * Callback for `transport.internal.parse_response`
728
+ *
729
+ * Internal use only. Converts a raw HTTP response to a Requests_Response
730
+ * while still executing a multiple request.
731
+ *
732
+ * @param string $response Full response text including headers and body (will be overwritten with Response instance)
733
+ * @param array $request Request data as passed into {@see Requests::request_multiple()}
734
+ * @return null `$response` is either set to a Requests_Response instance, or a Requests_Exception object
735
+ */
736
+ public static function parse_multiple(&$response, $request) {
737
+ try {
738
+ $url = $request['url'];
739
+ $headers = $request['headers'];
740
+ $data = $request['data'];
741
+ $options = $request['options'];
742
+ $response = self::parse_response($response, $url, $headers, $data, $options);
743
+ }
744
+ catch (Requests_Exception $e) {
745
+ $response = $e;
746
+ }
747
+ }
748
+
749
+ /**
750
+ * Decoded a chunked body as per RFC 2616
751
+ *
752
+ * @see https://tools.ietf.org/html/rfc2616#section-3.6.1
753
+ * @param string $data Chunked body
754
+ * @return string Decoded body
755
+ */
756
+ protected static function decode_chunked($data) {
757
+ if (!preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', trim($data))) {
758
+ return $data;
759
+ }
760
+
761
+ $decoded = '';
762
+ $encoded = $data;
763
+
764
+ while (true) {
765
+ $is_chunked = (bool) preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', $encoded, $matches);
766
+ if (!$is_chunked) {
767
+ // Looks like it's not chunked after all
768
+ return $data;
769
+ }
770
+
771
+ $length = hexdec(trim($matches[1]));
772
+ if ($length === 0) {
773
+ // Ignore trailer headers
774
+ return $decoded;
775
+ }
776
+
777
+ $chunk_length = strlen($matches[0]);
778
+ $decoded .= substr($encoded, $chunk_length, $length);
779
+ $encoded = substr($encoded, $chunk_length + $length + 2);
780
+
781
+ if (trim($encoded) === '0' || empty($encoded)) {
782
+ return $decoded;
783
+ }
784
+ }
785
+
786
+ // We'll never actually get down here
787
+ // @codeCoverageIgnoreStart
788
+ }
789
+ // @codeCoverageIgnoreEnd
790
+
791
+ /**
792
+ * Convert a key => value array to a 'key: value' array for headers
793
+ *
794
+ * @param array $array Dictionary of header values
795
+ * @return array List of headers
796
+ */
797
+ public static function flatten($array) {
798
+ $return = array();
799
+ foreach ($array as $key => $value) {
800
+ $return[] = sprintf('%s: %s', $key, $value);
801
+ }
802
+ return $return;
803
+ }
804
+
805
+ /**
806
+ * Convert a key => value array to a 'key: value' array for headers
807
+ *
808
+ * @codeCoverageIgnore
809
+ * @deprecated Misspelling of {@see Requests::flatten}
810
+ * @param array $array Dictionary of header values
811
+ * @return array List of headers
812
+ */
813
+ public static function flattern($array) {
814
+ return self::flatten($array);
815
+ }
816
+
817
+ /**
818
+ * Decompress an encoded body
819
+ *
820
+ * Implements gzip, compress and deflate. Guesses which it is by attempting
821
+ * to decode.
822
+ *
823
+ * @param string $data Compressed data in one of the above formats
824
+ * @return string Decompressed string
825
+ */
826
+ public static function decompress($data) {
827
+ if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") {
828
+ // Not actually compressed. Probably cURL ruining this for us.
829
+ return $data;
830
+ }
831
+
832
+ if (function_exists('gzdecode')) {
833
+ // phpcs:ignore PHPCompatibility.FunctionUse.NewFunctions.gzdecodeFound -- Wrapped in function_exists() for PHP 5.2.
834
+ $decoded = @gzdecode($data);
835
+ if ($decoded !== false) {
836
+ return $decoded;
837
+ }
838
+ }
839
+
840
+ if (function_exists('gzinflate')) {
841
+ $decoded = @gzinflate($data);
842
+ if ($decoded !== false) {
843
+ return $decoded;
844
+ }
845
+ }
846
+
847
+ $decoded = self::compatible_gzinflate($data);
848
+ if ($decoded !== false) {
849
+ return $decoded;
850
+ }
851
+
852
+ if (function_exists('gzuncompress')) {
853
+ $decoded = @gzuncompress($data);
854
+ if ($decoded !== false) {
855
+ return $decoded;
856
+ }
857
+ }
858
+
859
+ return $data;
860
+ }
861
+
862
+ /**
863
+ * Decompression of deflated string while staying compatible with the majority of servers.
864
+ *
865
+ * Certain Servers will return deflated data with headers which PHP's gzinflate()
866
+ * function cannot handle out of the box. The following function has been created from
867
+ * various snippets on the gzinflate() PHP documentation.
868
+ *
869
+ * Warning: Magic numbers within. Due to the potential different formats that the compressed
870
+ * data may be returned in, some "magic offsets" are needed to ensure proper decompression
871
+ * takes place. For a simple progmatic way to determine the magic offset in use, see:
872
+ * https://core.trac.wordpress.org/ticket/18273
873
+ *
874
+ * @since 2.8.1
875
+ * @link https://core.trac.wordpress.org/ticket/18273
876
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#70875
877
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#77336
878
+ *
879
+ * @param string $gz_data String to decompress.
880
+ * @return string|bool False on failure.
881
+ */
882
+ public static function compatible_gzinflate($gz_data) {
883
+ // Compressed data might contain a full zlib header, if so strip it for
884
+ // gzinflate()
885
+ if (substr($gz_data, 0, 3) === "\x1f\x8b\x08") {
886
+ $i = 10;
887
+ $flg = ord(substr($gz_data, 3, 1));
888
+ if ($flg > 0) {
889
+ if ($flg & 4) {
890
+ list($xlen) = unpack('v', substr($gz_data, $i, 2));
891
+ $i += 2 + $xlen;
892
+ }
893
+ if ($flg & 8) {
894
+ $i = strpos($gz_data, "\0", $i) + 1;
895
+ }
896
+ if ($flg & 16) {
897
+ $i = strpos($gz_data, "\0", $i) + 1;
898
+ }
899
+ if ($flg & 2) {
900
+ $i += 2;
901
+ }
902
+ }
903
+ $decompressed = self::compatible_gzinflate(substr($gz_data, $i));
904
+ if ($decompressed !== false) {
905
+ return $decompressed;
906
+ }
907
+ }
908
+
909
+ // If the data is Huffman Encoded, we must first strip the leading 2
910
+ // byte Huffman marker for gzinflate()
911
+ // The response is Huffman coded by many compressors such as
912
+ // java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's
913
+ // System.IO.Compression.DeflateStream.
914
+ //
915
+ // See https://decompres.blogspot.com/ for a quick explanation of this
916
+ // data type
917
+ $huffman_encoded = false;
918
+
919
+ // low nibble of first byte should be 0x08
920
+ list(, $first_nibble) = unpack('h', $gz_data);
921
+
922
+ // First 2 bytes should be divisible by 0x1F
923
+ list(, $first_two_bytes) = unpack('n', $gz_data);
924
+
925
+ if ($first_nibble === 0x08 && ($first_two_bytes % 0x1F) === 0) {
926
+ $huffman_encoded = true;
927
+ }
928
+
929
+ if ($huffman_encoded) {
930
+ $decompressed = @gzinflate(substr($gz_data, 2));
931
+ if ($decompressed !== false) {
932
+ return $decompressed;
933
+ }
934
+ }
935
+
936
+ if (substr($gz_data, 0, 4) === "\x50\x4b\x03\x04") {
937
+ // ZIP file format header
938
+ // Offset 6: 2 bytes, General-purpose field
939
+ // Offset 26: 2 bytes, filename length
940
+ // Offset 28: 2 bytes, optional field length
941
+ // Offset 30: Filename field, followed by optional field, followed
942
+ // immediately by data
943
+ list(, $general_purpose_flag) = unpack('v', substr($gz_data, 6, 2));
944
+
945
+ // If the file has been compressed on the fly, 0x08 bit is set of
946
+ // the general purpose field. We can use this to differentiate
947
+ // between a compressed document, and a ZIP file
948
+ $zip_compressed_on_the_fly = ((0x08 & $general_purpose_flag) === 0x08);
949
+
950
+ if (!$zip_compressed_on_the_fly) {
951
+ // Don't attempt to decode a compressed zip file
952
+ return $gz_data;
953
+ }
954
+
955
+ // Determine the first byte of data, based on the above ZIP header
956
+ // offsets:
957
+ $first_file_start = array_sum(unpack('v2', substr($gz_data, 26, 4)));
958
+ $decompressed = @gzinflate(substr($gz_data, 30 + $first_file_start));
959
+ if ($decompressed !== false) {
960
+ return $decompressed;
961
+ }
962
+ return false;
963
+ }
964
+
965
+ // Finally fall back to straight gzinflate
966
+ $decompressed = @gzinflate($gz_data);
967
+ if ($decompressed !== false) {
968
+ return $decompressed;
969
+ }
970
+
971
+ // Fallback for all above failing, not expected, but included for
972
+ // debugging and preventing regressions and to track stats
973
+ $decompressed = @gzinflate(substr($gz_data, 2));
974
+ if ($decompressed !== false) {
975
+ return $decompressed;
976
+ }
977
+
978
+ return false;
979
+ }
980
+
981
+ public static function match_domain($host, $reference) {
982
+ // Check for a direct match
983
+ if ($host === $reference) {
984
+ return true;
985
+ }
986
+
987
+ // Calculate the valid wildcard match if the host is not an IP address
988
+ // Also validates that the host has 3 parts or more, as per Firefox's
989
+ // ruleset.
990
+ $parts = explode('.', $host);
991
+ if (ip2long($host) === false && count($parts) >= 3) {
992
+ $parts[0] = '*';
993
+ $wildcard = implode('.', $parts);
994
+ if ($wildcard === $reference) {
995
+ return true;
996
+ }
997
+ }
998
+
999
+ return false;
1000
+ }
1001
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Auth.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Authentication provider interface
4
+ *
5
+ * @package Requests
6
+ * @subpackage Authentication
7
+ */
8
+
9
+ /**
10
+ * Authentication provider interface
11
+ *
12
+ * Implement this interface to act as an authentication provider.
13
+ *
14
+ * Parameters should be passed via the constructor where possible, as this
15
+ * makes it much easier for users to use your provider.
16
+ *
17
+ * @see Requests_Hooks
18
+ * @package Requests
19
+ * @subpackage Authentication
20
+ */
21
+ interface Requests_Auth {
22
+ /**
23
+ * Register hooks as needed
24
+ *
25
+ * This method is called in {@see Requests::request} when the user has set
26
+ * an instance as the 'auth' option. Use this callback to register all the
27
+ * hooks you'll need.
28
+ *
29
+ * @see Requests_Hooks::register
30
+ * @param Requests_Hooks $hooks Hook system
31
+ */
32
+ public function register(Requests_Hooks $hooks);
33
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Auth/Basic.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Basic Authentication provider
4
+ *
5
+ * @package Requests
6
+ * @subpackage Authentication
7
+ */
8
+
9
+ /**
10
+ * Basic Authentication provider
11
+ *
12
+ * Provides a handler for Basic HTTP authentication via the Authorization
13
+ * header.
14
+ *
15
+ * @package Requests
16
+ * @subpackage Authentication
17
+ */
18
+ class Requests_Auth_Basic implements Requests_Auth {
19
+ /**
20
+ * Username
21
+ *
22
+ * @var string
23
+ */
24
+ public $user;
25
+
26
+ /**
27
+ * Password
28
+ *
29
+ * @var string
30
+ */
31
+ public $pass;
32
+
33
+ /**
34
+ * Constructor
35
+ *
36
+ * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
37
+ * @param array|null $args Array of user and password. Must have exactly two elements
38
+ */
39
+ public function __construct($args = null) {
40
+ if (is_array($args)) {
41
+ if (count($args) !== 2) {
42
+ throw new Requests_Exception('Invalid number of arguments', 'authbasicbadargs');
43
+ }
44
+
45
+ list($this->user, $this->pass) = $args;
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Register the necessary callbacks
51
+ *
52
+ * @see curl_before_send
53
+ * @see fsockopen_header
54
+ * @param Requests_Hooks $hooks Hook system
55
+ */
56
+ public function register(Requests_Hooks $hooks) {
57
+ $hooks->register('curl.before_send', array($this, 'curl_before_send'));
58
+ $hooks->register('fsockopen.after_headers', array($this, 'fsockopen_header'));
59
+ }
60
+
61
+ /**
62
+ * Set cURL parameters before the data is sent
63
+ *
64
+ * @param resource $handle cURL resource
65
+ */
66
+ public function curl_before_send(&$handle) {
67
+ curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
68
+ curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
69
+ }
70
+
71
+ /**
72
+ * Add extra headers to the request before sending
73
+ *
74
+ * @param string $out HTTP header string
75
+ */
76
+ public function fsockopen_header(&$out) {
77
+ $out .= sprintf("Authorization: Basic %s\r\n", base64_encode($this->getAuthString()));
78
+ }
79
+
80
+ /**
81
+ * Get the authentication string (user:pass)
82
+ *
83
+ * @return string
84
+ */
85
+ public function getAuthString() {
86
+ return $this->user . ':' . $this->pass;
87
+ }
88
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Cookie.php ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Cookie storage object
4
+ *
5
+ * @package Requests
6
+ * @subpackage Cookies
7
+ */
8
+
9
+ /**
10
+ * Cookie storage object
11
+ *
12
+ * @package Requests
13
+ * @subpackage Cookies
14
+ */
15
+ class Requests_Cookie {
16
+ /**
17
+ * Cookie name.
18
+ *
19
+ * @var string
20
+ */
21
+ public $name;
22
+
23
+ /**
24
+ * Cookie value.
25
+ *
26
+ * @var string
27
+ */
28
+ public $value;
29
+
30
+ /**
31
+ * Cookie attributes
32
+ *
33
+ * Valid keys are (currently) path, domain, expires, max-age, secure and
34
+ * httponly.
35
+ *
36
+ * @var Requests_Utility_CaseInsensitiveDictionary|array Array-like object
37
+ */
38
+ public $attributes = array();
39
+
40
+ /**
41
+ * Cookie flags
42
+ *
43
+ * Valid keys are (currently) creation, last-access, persistent and
44
+ * host-only.
45
+ *
46
+ * @var array
47
+ */
48
+ public $flags = array();
49
+
50
+ /**
51
+ * Reference time for relative calculations
52
+ *
53
+ * This is used in place of `time()` when calculating Max-Age expiration and
54
+ * checking time validity.
55
+ *
56
+ * @var int
57
+ */
58
+ public $reference_time = 0;
59
+
60
+ /**
61
+ * Create a new cookie object
62
+ *
63
+ * @param string $name
64
+ * @param string $value
65
+ * @param array|Requests_Utility_CaseInsensitiveDictionary $attributes Associative array of attribute data
66
+ */
67
+ public function __construct($name, $value, $attributes = array(), $flags = array(), $reference_time = null) {
68
+ $this->name = $name;
69
+ $this->value = $value;
70
+ $this->attributes = $attributes;
71
+ $default_flags = array(
72
+ 'creation' => time(),
73
+ 'last-access' => time(),
74
+ 'persistent' => false,
75
+ 'host-only' => true,
76
+ );
77
+ $this->flags = array_merge($default_flags, $flags);
78
+
79
+ $this->reference_time = time();
80
+ if ($reference_time !== null) {
81
+ $this->reference_time = $reference_time;
82
+ }
83
+
84
+ $this->normalize();
85
+ }
86
+
87
+ /**
88
+ * Check if a cookie is expired.
89
+ *
90
+ * Checks the age against $this->reference_time to determine if the cookie
91
+ * is expired.
92
+ *
93
+ * @return boolean True if expired, false if time is valid.
94
+ */
95
+ public function is_expired() {
96
+ // RFC6265, s. 4.1.2.2:
97
+ // If a cookie has both the Max-Age and the Expires attribute, the Max-
98
+ // Age attribute has precedence and controls the expiration date of the
99
+ // cookie.
100
+ if (isset($this->attributes['max-age'])) {
101
+ $max_age = $this->attributes['max-age'];
102
+ return $max_age < $this->reference_time;
103
+ }
104
+
105
+ if (isset($this->attributes['expires'])) {
106
+ $expires = $this->attributes['expires'];
107
+ return $expires < $this->reference_time;
108
+ }
109
+
110
+ return false;
111
+ }
112
+
113
+ /**
114
+ * Check if a cookie is valid for a given URI
115
+ *
116
+ * @param Requests_IRI $uri URI to check
117
+ * @return boolean Whether the cookie is valid for the given URI
118
+ */
119
+ public function uri_matches(Requests_IRI $uri) {
120
+ if (!$this->domain_matches($uri->host)) {
121
+ return false;
122
+ }
123
+
124
+ if (!$this->path_matches($uri->path)) {
125
+ return false;
126
+ }
127
+
128
+ return empty($this->attributes['secure']) || $uri->scheme === 'https';
129
+ }
130
+
131
+ /**
132
+ * Check if a cookie is valid for a given domain
133
+ *
134
+ * @param string $string Domain to check
135
+ * @return boolean Whether the cookie is valid for the given domain
136
+ */
137
+ public function domain_matches($string) {
138
+ if (!isset($this->attributes['domain'])) {
139
+ // Cookies created manually; cookies created by Requests will set
140
+ // the domain to the requested domain
141
+ return true;
142
+ }
143
+
144
+ $domain_string = $this->attributes['domain'];
145
+ if ($domain_string === $string) {
146
+ // The domain string and the string are identical.
147
+ return true;
148
+ }
149
+
150
+ // If the cookie is marked as host-only and we don't have an exact
151
+ // match, reject the cookie
152
+ if ($this->flags['host-only'] === true) {
153
+ return false;
154
+ }
155
+
156
+ if (strlen($string) <= strlen($domain_string)) {
157
+ // For obvious reasons, the string cannot be a suffix if the domain
158
+ // is shorter than the domain string
159
+ return false;
160
+ }
161
+
162
+ if (substr($string, -1 * strlen($domain_string)) !== $domain_string) {
163
+ // The domain string should be a suffix of the string.
164
+ return false;
165
+ }
166
+
167
+ $prefix = substr($string, 0, strlen($string) - strlen($domain_string));
168
+ if (substr($prefix, -1) !== '.') {
169
+ // The last character of the string that is not included in the
170
+ // domain string should be a %x2E (".") character.
171
+ return false;
172
+ }
173
+
174
+ // The string should be a host name (i.e., not an IP address).
175
+ return !preg_match('#^(.+\.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $string);
176
+ }
177
+
178
+ /**
179
+ * Check if a cookie is valid for a given path
180
+ *
181
+ * From the path-match check in RFC 6265 section 5.1.4
182
+ *
183
+ * @param string $request_path Path to check
184
+ * @return boolean Whether the cookie is valid for the given path
185
+ */
186
+ public function path_matches($request_path) {
187
+ if (empty($request_path)) {
188
+ // Normalize empty path to root
189
+ $request_path = '/';
190
+ }
191
+
192
+ if (!isset($this->attributes['path'])) {
193
+ // Cookies created manually; cookies created by Requests will set
194
+ // the path to the requested path
195
+ return true;
196
+ }
197
+
198
+ $cookie_path = $this->attributes['path'];
199
+
200
+ if ($cookie_path === $request_path) {
201
+ // The cookie-path and the request-path are identical.
202
+ return true;
203
+ }
204
+
205
+ if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
206
+ if (substr($cookie_path, -1) === '/') {
207
+ // The cookie-path is a prefix of the request-path, and the last
208
+ // character of the cookie-path is %x2F ("/").
209
+ return true;
210
+ }
211
+
212
+ if (substr($request_path, strlen($cookie_path), 1) === '/') {
213
+ // The cookie-path is a prefix of the request-path, and the
214
+ // first character of the request-path that is not included in
215
+ // the cookie-path is a %x2F ("/") character.
216
+ return true;
217
+ }
218
+ }
219
+
220
+ return false;
221
+ }
222
+
223
+ /**
224
+ * Normalize cookie and attributes
225
+ *
226
+ * @return boolean Whether the cookie was successfully normalized
227
+ */
228
+ public function normalize() {
229
+ foreach ($this->attributes as $key => $value) {
230
+ $orig_value = $value;
231
+ $value = $this->normalize_attribute($key, $value);
232
+ if ($value === null) {
233
+ unset($this->attributes[$key]);
234
+ continue;
235
+ }
236
+
237
+ if ($value !== $orig_value) {
238
+ $this->attributes[$key] = $value;
239
+ }
240
+ }
241
+
242
+ return true;
243
+ }
244
+
245
+ /**
246
+ * Parse an individual cookie attribute
247
+ *
248
+ * Handles parsing individual attributes from the cookie values.
249
+ *
250
+ * @param string $name Attribute name
251
+ * @param string|boolean $value Attribute value (string value, or true if empty/flag)
252
+ * @return mixed Value if available, or null if the attribute value is invalid (and should be skipped)
253
+ */
254
+ protected function normalize_attribute($name, $value) {
255
+ switch (strtolower($name)) {
256
+ case 'expires':
257
+ // Expiration parsing, as per RFC 6265 section 5.2.1
258
+ if (is_int($value)) {
259
+ return $value;
260
+ }
261
+
262
+ $expiry_time = strtotime($value);
263
+ if ($expiry_time === false) {
264
+ return null;
265
+ }
266
+
267
+ return $expiry_time;
268
+
269
+ case 'max-age':
270
+ // Expiration parsing, as per RFC 6265 section 5.2.2
271
+ if (is_int($value)) {
272
+ return $value;
273
+ }
274
+
275
+ // Check that we have a valid age
276
+ if (!preg_match('/^-?\d+$/', $value)) {
277
+ return null;
278
+ }
279
+
280
+ $delta_seconds = (int) $value;
281
+ if ($delta_seconds <= 0) {
282
+ $expiry_time = 0;
283
+ }
284
+ else {
285
+ $expiry_time = $this->reference_time + $delta_seconds;
286
+ }
287
+
288
+ return $expiry_time;
289
+
290
+ case 'domain':
291
+ // Domains are not required as per RFC 6265 section 5.2.3
292
+ if (empty($value)) {
293
+ return null;
294
+ }
295
+
296
+ // Domain normalization, as per RFC 6265 section 5.2.3
297
+ if ($value[0] === '.') {
298
+ $value = substr($value, 1);
299
+ }
300
+
301
+ return $value;
302
+
303
+ default:
304
+ return $value;
305
+ }
306
+ }
307
+
308
+ /**
309
+ * Format a cookie for a Cookie header
310
+ *
311
+ * This is used when sending cookies to a server.
312
+ *
313
+ * @return string Cookie formatted for Cookie header
314
+ */
315
+ public function format_for_header() {
316
+ return sprintf('%s=%s', $this->name, $this->value);
317
+ }
318
+
319
+ /**
320
+ * Format a cookie for a Cookie header
321
+ *
322
+ * @codeCoverageIgnore
323
+ * @deprecated Use {@see Requests_Cookie::format_for_header}
324
+ * @return string
325
+ */
326
+ public function formatForHeader() {
327
+ return $this->format_for_header();
328
+ }
329
+
330
+ /**
331
+ * Format a cookie for a Set-Cookie header
332
+ *
333
+ * This is used when sending cookies to clients. This isn't really
334
+ * applicable to client-side usage, but might be handy for debugging.
335
+ *
336
+ * @return string Cookie formatted for Set-Cookie header
337
+ */
338
+ public function format_for_set_cookie() {
339
+ $header_value = $this->format_for_header();
340
+ if (!empty($this->attributes)) {
341
+ $parts = array();
342
+ foreach ($this->attributes as $key => $value) {
343
+ // Ignore non-associative attributes
344
+ if (is_numeric($key)) {
345
+ $parts[] = $value;
346
+ }
347
+ else {
348
+ $parts[] = sprintf('%s=%s', $key, $value);
349
+ }
350
+ }
351
+
352
+ $header_value .= '; ' . implode('; ', $parts);
353
+ }
354
+ return $header_value;
355
+ }
356
+
357
+ /**
358
+ * Format a cookie for a Set-Cookie header
359
+ *
360
+ * @codeCoverageIgnore
361
+ * @deprecated Use {@see Requests_Cookie::format_for_set_cookie}
362
+ * @return string
363
+ */
364
+ public function formatForSetCookie() {
365
+ return $this->format_for_set_cookie();
366
+ }
367
+
368
+ /**
369
+ * Get the cookie value
370
+ *
371
+ * Attributes and other data can be accessed via methods.
372
+ */
373
+ public function __toString() {
374
+ return $this->value;
375
+ }
376
+
377
+ /**
378
+ * Parse a cookie string into a cookie object
379
+ *
380
+ * Based on Mozilla's parsing code in Firefox and related projects, which
381
+ * is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
382
+ * specifies some of this handling, but not in a thorough manner.
383
+ *
384
+ * @param string Cookie header value (from a Set-Cookie header)
385
+ * @return Requests_Cookie Parsed cookie object
386
+ */
387
+ public static function parse($string, $name = '', $reference_time = null) {
388
+ $parts = explode(';', $string);
389
+ $kvparts = array_shift($parts);
390
+
391
+ if (!empty($name)) {
392
+ $value = $string;
393
+ }
394
+ elseif (strpos($kvparts, '=') === false) {
395
+ // Some sites might only have a value without the equals separator.
396
+ // Deviate from RFC 6265 and pretend it was actually a blank name
397
+ // (`=foo`)
398
+ //
399
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=169091
400
+ $name = '';
401
+ $value = $kvparts;
402
+ }
403
+ else {
404
+ list($name, $value) = explode('=', $kvparts, 2);
405
+ }
406
+ $name = trim($name);
407
+ $value = trim($value);
408
+
409
+ // Attribute key are handled case-insensitively
410
+ $attributes = new Requests_Utility_CaseInsensitiveDictionary();
411
+
412
+ if (!empty($parts)) {
413
+ foreach ($parts as $part) {
414
+ if (strpos($part, '=') === false) {
415
+ $part_key = $part;
416
+ $part_value = true;
417
+ }
418
+ else {
419
+ list($part_key, $part_value) = explode('=', $part, 2);
420
+ $part_value = trim($part_value);
421
+ }
422
+
423
+ $part_key = trim($part_key);
424
+ $attributes[$part_key] = $part_value;
425
+ }
426
+ }
427
+
428
+ return new Requests_Cookie($name, $value, $attributes, array(), $reference_time);
429
+ }
430
+
431
+ /**
432
+ * Parse all Set-Cookie headers from request headers
433
+ *
434
+ * @param Requests_Response_Headers $headers Headers to parse from
435
+ * @param Requests_IRI|null $origin URI for comparing cookie origins
436
+ * @param int|null $time Reference time for expiration calculation
437
+ * @return array
438
+ */
439
+ public static function parse_from_headers(Requests_Response_Headers $headers, Requests_IRI $origin = null, $time = null) {
440
+ $cookie_headers = $headers->getValues('Set-Cookie');
441
+ if (empty($cookie_headers)) {
442
+ return array();
443
+ }
444
+
445
+ $cookies = array();
446
+ foreach ($cookie_headers as $header) {
447
+ $parsed = self::parse($header, '', $time);
448
+
449
+ // Default domain/path attributes
450
+ if (empty($parsed->attributes['domain']) && !empty($origin)) {
451
+ $parsed->attributes['domain'] = $origin->host;
452
+ $parsed->flags['host-only'] = true;
453
+ }
454
+ else {
455
+ $parsed->flags['host-only'] = false;
456
+ }
457
+
458
+ $path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
459
+ if (!$path_is_valid && !empty($origin)) {
460
+ $path = $origin->path;
461
+
462
+ // Default path normalization as per RFC 6265 section 5.1.4
463
+ if (substr($path, 0, 1) !== '/') {
464
+ // If the uri-path is empty or if the first character of
465
+ // the uri-path is not a %x2F ("/") character, output
466
+ // %x2F ("/") and skip the remaining steps.
467
+ $path = '/';
468
+ }
469
+ elseif (substr_count($path, '/') === 1) {
470
+ // If the uri-path contains no more than one %x2F ("/")
471
+ // character, output %x2F ("/") and skip the remaining
472
+ // step.
473
+ $path = '/';
474
+ }
475
+ else {
476
+ // Output the characters of the uri-path from the first
477
+ // character up to, but not including, the right-most
478
+ // %x2F ("/").
479
+ $path = substr($path, 0, strrpos($path, '/'));
480
+ }
481
+ $parsed->attributes['path'] = $path;
482
+ }
483
+
484
+ // Reject invalid cookie domains
485
+ if (!empty($origin) && !$parsed->domain_matches($origin->host)) {
486
+ continue;
487
+ }
488
+
489
+ $cookies[$parsed->name] = $parsed;
490
+ }
491
+
492
+ return $cookies;
493
+ }
494
+
495
+ /**
496
+ * Parse all Set-Cookie headers from request headers
497
+ *
498
+ * @codeCoverageIgnore
499
+ * @deprecated Use {@see Requests_Cookie::parse_from_headers}
500
+ * @return array
501
+ */
502
+ public static function parseFromHeaders(Requests_Response_Headers $headers) {
503
+ return self::parse_from_headers($headers);
504
+ }
505
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Cookie/Jar.php ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Cookie holder object
4
+ *
5
+ * @package Requests
6
+ * @subpackage Cookies
7
+ */
8
+
9
+ /**
10
+ * Cookie holder object
11
+ *
12
+ * @package Requests
13
+ * @subpackage Cookies
14
+ */
15
+ class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
16
+ /**
17
+ * Actual item data
18
+ *
19
+ * @var array
20
+ */
21
+ protected $cookies = array();
22
+
23
+ /**
24
+ * Create a new jar
25
+ *
26
+ * @param array $cookies Existing cookie values
27
+ */
28
+ public function __construct($cookies = array()) {
29
+ $this->cookies = $cookies;
30
+ }
31
+
32
+ /**
33
+ * Normalise cookie data into a Requests_Cookie
34
+ *
35
+ * @param string|Requests_Cookie $cookie
36
+ * @return Requests_Cookie
37
+ */
38
+ public function normalize_cookie($cookie, $key = null) {
39
+ if ($cookie instanceof Requests_Cookie) {
40
+ return $cookie;
41
+ }
42
+
43
+ return Requests_Cookie::parse($cookie, $key);
44
+ }
45
+
46
+ /**
47
+ * Normalise cookie data into a Requests_Cookie
48
+ *
49
+ * @codeCoverageIgnore
50
+ * @deprecated Use {@see Requests_Cookie_Jar::normalize_cookie}
51
+ * @return Requests_Cookie
52
+ */
53
+ public function normalizeCookie($cookie, $key = null) {
54
+ return $this->normalize_cookie($cookie, $key);
55
+ }
56
+
57
+ /**
58
+ * Check if the given item exists
59
+ *
60
+ * @param string $key Item key
61
+ * @return boolean Does the item exist?
62
+ */
63
+ public function offsetExists($key) {
64
+ return isset($this->cookies[$key]);
65
+ }
66
+
67
+ /**
68
+ * Get the value for the item
69
+ *
70
+ * @param string $key Item key
71
+ * @return string|null Item value (null if offsetExists is false)
72
+ */
73
+ public function offsetGet($key) {
74
+ if (!isset($this->cookies[$key])) {
75
+ return null;
76
+ }
77
+
78
+ return $this->cookies[$key];
79
+ }
80
+
81
+ /**
82
+ * Set the given item
83
+ *
84
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
85
+ *
86
+ * @param string $key Item name
87
+ * @param string $value Item value
88
+ */
89
+ public function offsetSet($key, $value) {
90
+ if ($key === null) {
91
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
92
+ }
93
+
94
+ $this->cookies[$key] = $value;
95
+ }
96
+
97
+ /**
98
+ * Unset the given header
99
+ *
100
+ * @param string $key
101
+ */
102
+ public function offsetUnset($key) {
103
+ unset($this->cookies[$key]);
104
+ }
105
+
106
+ /**
107
+ * Get an iterator for the data
108
+ *
109
+ * @return ArrayIterator
110
+ */
111
+ public function getIterator() {
112
+ return new ArrayIterator($this->cookies);
113
+ }
114
+
115
+ /**
116
+ * Register the cookie handler with the request's hooking system
117
+ *
118
+ * @param Requests_Hooker $hooks Hooking system
119
+ */
120
+ public function register(Requests_Hooker $hooks) {
121
+ $hooks->register('requests.before_request', array($this, 'before_request'));
122
+ $hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
123
+ }
124
+
125
+ /**
126
+ * Add Cookie header to a request if we have any
127
+ *
128
+ * As per RFC 6265, cookies are separated by '; '
129
+ *
130
+ * @param string $url
131
+ * @param array $headers
132
+ * @param array $data
133
+ * @param string $type
134
+ * @param array $options
135
+ */
136
+ public function before_request($url, &$headers, &$data, &$type, &$options) {
137
+ if (!$url instanceof Requests_IRI) {
138
+ $url = new Requests_IRI($url);
139
+ }
140
+
141
+ if (!empty($this->cookies)) {
142
+ $cookies = array();
143
+ foreach ($this->cookies as $key => $cookie) {
144
+ $cookie = $this->normalize_cookie($cookie, $key);
145
+
146
+ // Skip expired cookies
147
+ if ($cookie->is_expired()) {
148
+ continue;
149
+ }
150
+
151
+ if ($cookie->domain_matches($url->host)) {
152
+ $cookies[] = $cookie->format_for_header();
153
+ }
154
+ }
155
+
156
+ $headers['Cookie'] = implode('; ', $cookies);
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Parse all cookies from a response and attach them to the response
162
+ *
163
+ * @var Requests_Response $response
164
+ */
165
+ public function before_redirect_check(Requests_Response $return) {
166
+ $url = $return->url;
167
+ if (!$url instanceof Requests_IRI) {
168
+ $url = new Requests_IRI($url);
169
+ }
170
+
171
+ $cookies = Requests_Cookie::parse_from_headers($return->headers, $url);
172
+ $this->cookies = array_merge($this->cookies, $cookies);
173
+ $return->cookies = $this;
174
+ }
175
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for HTTP requests
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for HTTP requests
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception extends Exception {
14
+ /**
15
+ * Type of exception
16
+ *
17
+ * @var string
18
+ */
19
+ protected $type;
20
+
21
+ /**
22
+ * Data associated with the exception
23
+ *
24
+ * @var mixed
25
+ */
26
+ protected $data;
27
+
28
+ /**
29
+ * Create a new exception
30
+ *
31
+ * @param string $message Exception message
32
+ * @param string $type Exception type
33
+ * @param mixed $data Associated data
34
+ * @param integer $code Exception numerical code, if applicable
35
+ */
36
+ public function __construct($message, $type, $data = null, $code = 0) {
37
+ parent::__construct($message, $code);
38
+
39
+ $this->type = $type;
40
+ $this->data = $data;
41
+ }
42
+
43
+ /**
44
+ * Like {@see getCode()}, but a string code.
45
+ *
46
+ * @codeCoverageIgnore
47
+ * @return string
48
+ */
49
+ public function getType() {
50
+ return $this->type;
51
+ }
52
+
53
+ /**
54
+ * Gives any relevant data
55
+ *
56
+ * @codeCoverageIgnore
57
+ * @return mixed
58
+ */
59
+ public function getData() {
60
+ return $this->data;
61
+ }
62
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception based on HTTP response
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception based on HTTP response
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP extends Requests_Exception {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 0;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Unknown';
27
+
28
+ /**
29
+ * Create a new exception
30
+ *
31
+ * There is no mechanism to pass in the status code, as this is set by the
32
+ * subclass used. Reason phrases can vary, however.
33
+ *
34
+ * @param string|null $reason Reason phrase
35
+ * @param mixed $data Associated data
36
+ */
37
+ public function __construct($reason = null, $data = null) {
38
+ if ($reason !== null) {
39
+ $this->reason = $reason;
40
+ }
41
+
42
+ $message = sprintf('%d %s', $this->code, $this->reason);
43
+ parent::__construct($message, 'httpresponse', $data, $this->code);
44
+ }
45
+
46
+ /**
47
+ * Get the status message
48
+ */
49
+ public function getReason() {
50
+ return $this->reason;
51
+ }
52
+
53
+ /**
54
+ * Get the correct exception class for a given error code
55
+ *
56
+ * @param int|bool $code HTTP status code, or false if unavailable
57
+ * @return string Exception class name to use
58
+ */
59
+ public static function get_class($code) {
60
+ if (!$code) {
61
+ return 'Requests_Exception_HTTP_Unknown';
62
+ }
63
+
64
+ $class = sprintf('Requests_Exception_HTTP_%d', $code);
65
+ if (class_exists($class)) {
66
+ return $class;
67
+ }
68
+
69
+ return 'Requests_Exception_HTTP_Unknown';
70
+ }
71
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/304.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 304 Not Modified responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 304 Not Modified responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_304 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 304;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Not Modified';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/305.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 305 Use Proxy responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 305 Use Proxy responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_305 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 305;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Use Proxy';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/306.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 306 Switch Proxy responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 306 Switch Proxy responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_306 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 306;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Switch Proxy';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/400.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 400 Bad Request responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 400 Bad Request responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_400 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 400;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Bad Request';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/401.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 401 Unauthorized responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 401 Unauthorized responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_401 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 401;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Unauthorized';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/402.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 402 Payment Required responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 402 Payment Required responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_402 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 402;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Payment Required';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/403.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 403 Forbidden responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 403 Forbidden responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_403 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 403;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Forbidden';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/404.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 404 Not Found responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 404 Not Found responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_404 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 404;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Not Found';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/405.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 405 Method Not Allowed responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 405 Method Not Allowed responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_405 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 405;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Method Not Allowed';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/406.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 406 Not Acceptable responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 406 Not Acceptable responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_406 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 406;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Not Acceptable';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/407.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 407 Proxy Authentication Required responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 407 Proxy Authentication Required responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_407 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 407;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Proxy Authentication Required';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/408.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 408 Request Timeout responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 408 Request Timeout responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_408 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 408;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Request Timeout';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/409.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 409 Conflict responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 409 Conflict responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_409 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 409;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Conflict';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/410.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 410 Gone responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 410 Gone responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_410 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 410;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Gone';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/411.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 411 Length Required responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 411 Length Required responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_411 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 411;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Length Required';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/412.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 412 Precondition Failed responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 412 Precondition Failed responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_412 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 412;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Precondition Failed';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/413.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 413 Request Entity Too Large responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 413 Request Entity Too Large responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_413 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 413;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Request Entity Too Large';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/414.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 414 Request-URI Too Large responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 414 Request-URI Too Large responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_414 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 414;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Request-URI Too Large';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/415.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 415 Unsupported Media Type responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 415 Unsupported Media Type responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_415 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 415;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Unsupported Media Type';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/416.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 416 Requested Range Not Satisfiable responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 416 Requested Range Not Satisfiable responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_416 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 416;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Requested Range Not Satisfiable';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/417.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 417 Expectation Failed responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 417 Expectation Failed responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_417 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 417;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Expectation Failed';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/418.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 418 I'm A Teapot responses
4
+ *
5
+ * @see https://tools.ietf.org/html/rfc2324
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * Exception for 418 I'm A Teapot responses
11
+ *
12
+ * @see https://tools.ietf.org/html/rfc2324
13
+ * @package Requests
14
+ */
15
+ class Requests_Exception_HTTP_418 extends Requests_Exception_HTTP {
16
+ /**
17
+ * HTTP status code
18
+ *
19
+ * @var integer
20
+ */
21
+ protected $code = 418;
22
+
23
+ /**
24
+ * Reason phrase
25
+ *
26
+ * @var string
27
+ */
28
+ protected $reason = "I'm A Teapot";
29
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/428.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 428 Precondition Required responses
4
+ *
5
+ * @see https://tools.ietf.org/html/rfc6585
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * Exception for 428 Precondition Required responses
11
+ *
12
+ * @see https://tools.ietf.org/html/rfc6585
13
+ * @package Requests
14
+ */
15
+ class Requests_Exception_HTTP_428 extends Requests_Exception_HTTP {
16
+ /**
17
+ * HTTP status code
18
+ *
19
+ * @var integer
20
+ */
21
+ protected $code = 428;
22
+
23
+ /**
24
+ * Reason phrase
25
+ *
26
+ * @var string
27
+ */
28
+ protected $reason = 'Precondition Required';
29
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/429.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 429 Too Many Requests responses
4
+ *
5
+ * @see https://tools.ietf.org/html/draft-nottingham-http-new-status-04
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * Exception for 429 Too Many Requests responses
11
+ *
12
+ * @see https://tools.ietf.org/html/draft-nottingham-http-new-status-04
13
+ * @package Requests
14
+ */
15
+ class Requests_Exception_HTTP_429 extends Requests_Exception_HTTP {
16
+ /**
17
+ * HTTP status code
18
+ *
19
+ * @var integer
20
+ */
21
+ protected $code = 429;
22
+
23
+ /**
24
+ * Reason phrase
25
+ *
26
+ * @var string
27
+ */
28
+ protected $reason = 'Too Many Requests';
29
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/431.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 431 Request Header Fields Too Large responses
4
+ *
5
+ * @see https://tools.ietf.org/html/rfc6585
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * Exception for 431 Request Header Fields Too Large responses
11
+ *
12
+ * @see https://tools.ietf.org/html/rfc6585
13
+ * @package Requests
14
+ */
15
+ class Requests_Exception_HTTP_431 extends Requests_Exception_HTTP {
16
+ /**
17
+ * HTTP status code
18
+ *
19
+ * @var integer
20
+ */
21
+ protected $code = 431;
22
+
23
+ /**
24
+ * Reason phrase
25
+ *
26
+ * @var string
27
+ */
28
+ protected $reason = 'Request Header Fields Too Large';
29
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/500.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 500 Internal Server Error responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 500 Internal Server Error responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_500 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 500;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Internal Server Error';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/501.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 501 Not Implemented responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 501 Not Implemented responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_501 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 501;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Not Implemented';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/502.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 502 Bad Gateway responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 502 Bad Gateway responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_502 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 502;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Bad Gateway';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/503.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 503 Service Unavailable responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 503 Service Unavailable responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_503 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 503;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Service Unavailable';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/504.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 504 Gateway Timeout responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 504 Gateway Timeout responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_504 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 504;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Gateway Timeout';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/505.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 505 HTTP Version Not Supported responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for 505 HTTP Version Not Supported responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_505 extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer
18
+ */
19
+ protected $code = 505;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'HTTP Version Not Supported';
27
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/511.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 511 Network Authentication Required responses
4
+ *
5
+ * @see https://tools.ietf.org/html/rfc6585
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * Exception for 511 Network Authentication Required responses
11
+ *
12
+ * @see https://tools.ietf.org/html/rfc6585
13
+ * @package Requests
14
+ */
15
+ class Requests_Exception_HTTP_511 extends Requests_Exception_HTTP {
16
+ /**
17
+ * HTTP status code
18
+ *
19
+ * @var integer
20
+ */
21
+ protected $code = 511;
22
+
23
+ /**
24
+ * Reason phrase
25
+ *
26
+ * @var string
27
+ */
28
+ protected $reason = 'Network Authentication Required';
29
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/HTTP/Unknown.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for unknown status responses
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Exception for unknown status responses
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Exception_HTTP_Unknown extends Requests_Exception_HTTP {
14
+ /**
15
+ * HTTP status code
16
+ *
17
+ * @var integer|bool Code if available, false if an error occurred
18
+ */
19
+ protected $code = 0;
20
+
21
+ /**
22
+ * Reason phrase
23
+ *
24
+ * @var string
25
+ */
26
+ protected $reason = 'Unknown';
27
+
28
+ /**
29
+ * Create a new exception
30
+ *
31
+ * If `$data` is an instance of {@see Requests_Response}, uses the status
32
+ * code from it. Otherwise, sets as 0
33
+ *
34
+ * @param string|null $reason Reason phrase
35
+ * @param mixed $data Associated data
36
+ */
37
+ public function __construct($reason = null, $data = null) {
38
+ if ($data instanceof Requests_Response) {
39
+ $this->code = $data->status_code;
40
+ }
41
+
42
+ parent::__construct($reason, $data);
43
+ }
44
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/Transport.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Requests_Exception_Transport extends Requests_Exception {
4
+
5
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Exception/Transport/cURL.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Requests_Exception_Transport_cURL extends Requests_Exception_Transport {
4
+
5
+ const EASY = 'cURLEasy';
6
+ const MULTI = 'cURLMulti';
7
+ const SHARE = 'cURLShare';
8
+
9
+ /**
10
+ * cURL error code
11
+ *
12
+ * @var integer
13
+ */
14
+ protected $code = -1;
15
+
16
+ /**
17
+ * Which type of cURL error
18
+ *
19
+ * EASY|MULTI|SHARE
20
+ *
21
+ * @var string
22
+ */
23
+ protected $type = 'Unknown';
24
+
25
+ /**
26
+ * Clear text error message
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Unknown';
31
+
32
+ public function __construct($message, $type, $data = null, $code = 0) {
33
+ if ($type !== null) {
34
+ $this->type = $type;
35
+ }
36
+
37
+ if ($code !== null) {
38
+ $this->code = $code;
39
+ }
40
+
41
+ if ($message !== null) {
42
+ $this->reason = $message;
43
+ }
44
+
45
+ $message = sprintf('%d %s', $this->code, $this->reason);
46
+ parent::__construct($message, $this->type, $data, $this->code);
47
+ }
48
+
49
+ /**
50
+ * Get the error message
51
+ */
52
+ public function getReason() {
53
+ return $this->reason;
54
+ }
55
+
56
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Hooker.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Event dispatcher
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * Event dispatcher
11
+ *
12
+ * @package Requests
13
+ * @subpackage Utilities
14
+ */
15
+ interface Requests_Hooker {
16
+ /**
17
+ * Register a callback for a hook
18
+ *
19
+ * @param string $hook Hook name
20
+ * @param callback $callback Function/method to call on event
21
+ * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
22
+ */
23
+ public function register($hook, $callback, $priority = 0);
24
+
25
+ /**
26
+ * Dispatch a message
27
+ *
28
+ * @param string $hook Hook name
29
+ * @param array $parameters Parameters to pass to callbacks
30
+ * @return boolean Successfulness
31
+ */
32
+ public function dispatch($hook, $parameters = array());
33
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Hooks.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles adding and dispatching events
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * Handles adding and dispatching events
11
+ *
12
+ * @package Requests
13
+ * @subpackage Utilities
14
+ */
15
+ class Requests_Hooks implements Requests_Hooker {
16
+ /**
17
+ * Registered callbacks for each hook
18
+ *
19
+ * @var array
20
+ */
21
+ protected $hooks = array();
22
+
23
+ /**
24
+ * Constructor
25
+ */
26
+ public function __construct() {
27
+ // pass
28
+ }
29
+
30
+ /**
31
+ * Register a callback for a hook
32
+ *
33
+ * @param string $hook Hook name
34
+ * @param callback $callback Function/method to call on event
35
+ * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
36
+ */
37
+ public function register($hook, $callback, $priority = 0) {
38
+ if (!isset($this->hooks[$hook])) {
39
+ $this->hooks[$hook] = array();
40
+ }
41
+ if (!isset($this->hooks[$hook][$priority])) {
42
+ $this->hooks[$hook][$priority] = array();
43
+ }
44
+
45
+ $this->hooks[$hook][$priority][] = $callback;
46
+ }
47
+
48
+ /**
49
+ * Dispatch a message
50
+ *
51
+ * @param string $hook Hook name
52
+ * @param array $parameters Parameters to pass to callbacks
53
+ * @return boolean Successfulness
54
+ */
55
+ public function dispatch($hook, $parameters = array()) {
56
+ if (empty($this->hooks[$hook])) {
57
+ return false;
58
+ }
59
+
60
+ foreach ($this->hooks[$hook] as $priority => $hooked) {
61
+ foreach ($hooked as $callback) {
62
+ call_user_func_array($callback, $parameters);
63
+ }
64
+ }
65
+
66
+ return true;
67
+ }
68
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/IDNAEncoder.php ADDED
@@ -0,0 +1,387 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * IDNA URL encoder
5
+ *
6
+ * Note: Not fully compliant, as nameprep does nothing yet.
7
+ *
8
+ * @package Requests
9
+ * @subpackage Utilities
10
+ * @see https://tools.ietf.org/html/rfc3490 IDNA specification
11
+ * @see https://tools.ietf.org/html/rfc3492 Punycode/Bootstrap specification
12
+ */
13
+ class Requests_IDNAEncoder {
14
+ /**
15
+ * ACE prefix used for IDNA
16
+ *
17
+ * @see https://tools.ietf.org/html/rfc3490#section-5
18
+ * @var string
19
+ */
20
+ const ACE_PREFIX = 'xn--';
21
+
22
+ /**#@+
23
+ * Bootstrap constant for Punycode
24
+ *
25
+ * @see https://tools.ietf.org/html/rfc3492#section-5
26
+ * @var int
27
+ */
28
+ const BOOTSTRAP_BASE = 36;
29
+ const BOOTSTRAP_TMIN = 1;
30
+ const BOOTSTRAP_TMAX = 26;
31
+ const BOOTSTRAP_SKEW = 38;
32
+ const BOOTSTRAP_DAMP = 700;
33
+ const BOOTSTRAP_INITIAL_BIAS = 72;
34
+ const BOOTSTRAP_INITIAL_N = 128;
35
+ /**#@-*/
36
+
37
+ /**
38
+ * Encode a hostname using Punycode
39
+ *
40
+ * @param string $string Hostname
41
+ * @return string Punycode-encoded hostname
42
+ */
43
+ public static function encode($string) {
44
+ $parts = explode('.', $string);
45
+ foreach ($parts as &$part) {
46
+ $part = self::to_ascii($part);
47
+ }
48
+ return implode('.', $parts);
49
+ }
50
+
51
+ /**
52
+ * Convert a UTF-8 string to an ASCII string using Punycode
53
+ *
54
+ * @throws Requests_Exception Provided string longer than 64 ASCII characters (`idna.provided_too_long`)
55
+ * @throws Requests_Exception Prepared string longer than 64 ASCII characters (`idna.prepared_too_long`)
56
+ * @throws Requests_Exception Provided string already begins with xn-- (`idna.provided_is_prefixed`)
57
+ * @throws Requests_Exception Encoded string longer than 64 ASCII characters (`idna.encoded_too_long`)
58
+ *
59
+ * @param string $string ASCII or UTF-8 string (max length 64 characters)
60
+ * @return string ASCII string
61
+ */
62
+ public static function to_ascii($string) {
63
+ // Step 1: Check if the string is already ASCII
64
+ if (self::is_ascii($string)) {
65
+ // Skip to step 7
66
+ if (strlen($string) < 64) {
67
+ return $string;
68
+ }
69
+
70
+ throw new Requests_Exception('Provided string is too long', 'idna.provided_too_long', $string);
71
+ }
72
+
73
+ // Step 2: nameprep
74
+ $string = self::nameprep($string);
75
+
76
+ // Step 3: UseSTD3ASCIIRules is false, continue
77
+ // Step 4: Check if it's ASCII now
78
+ if (self::is_ascii($string)) {
79
+ // Skip to step 7
80
+ if (strlen($string) < 64) {
81
+ return $string;
82
+ }
83
+
84
+ throw new Requests_Exception('Prepared string is too long', 'idna.prepared_too_long', $string);
85
+ }
86
+
87
+ // Step 5: Check ACE prefix
88
+ if (strpos($string, self::ACE_PREFIX) === 0) {
89
+ throw new Requests_Exception('Provided string begins with ACE prefix', 'idna.provided_is_prefixed', $string);
90
+ }
91
+
92
+ // Step 6: Encode with Punycode
93
+ $string = self::punycode_encode($string);
94
+
95
+ // Step 7: Prepend ACE prefix
96
+ $string = self::ACE_PREFIX . $string;
97
+
98
+ // Step 8: Check size
99
+ if (strlen($string) < 64) {
100
+ return $string;
101
+ }
102
+
103
+ throw new Requests_Exception('Encoded string is too long', 'idna.encoded_too_long', $string);
104
+ }
105
+
106
+ /**
107
+ * Check whether a given string contains only ASCII characters
108
+ *
109
+ * @internal (Testing found regex was the fastest implementation)
110
+ *
111
+ * @param string $string
112
+ * @return bool Is the string ASCII-only?
113
+ */
114
+ protected static function is_ascii($string) {
115
+ return (preg_match('/(?:[^\x00-\x7F])/', $string) !== 1);
116
+ }
117
+
118
+ /**
119
+ * Prepare a string for use as an IDNA name
120
+ *
121
+ * @todo Implement this based on RFC 3491 and the newer 5891
122
+ * @param string $string
123
+ * @return string Prepared string
124
+ */
125
+ protected static function nameprep($string) {
126
+ return $string;
127
+ }
128
+
129
+ /**
130
+ * Convert a UTF-8 string to a UCS-4 codepoint array
131
+ *
132
+ * Based on Requests_IRI::replace_invalid_with_pct_encoding()
133
+ *
134
+ * @throws Requests_Exception Invalid UTF-8 codepoint (`idna.invalidcodepoint`)
135
+ * @param string $input
136
+ * @return array Unicode code points
137
+ */
138
+ protected static function utf8_to_codepoints($input) {
139
+ $codepoints = array();
140
+
141
+ // Get number of bytes
142
+ $strlen = strlen($input);
143
+
144
+ // phpcs:ignore Generic.CodeAnalysis.JumbledIncrementer -- This is a deliberate choice.
145
+ for ($position = 0; $position < $strlen; $position++) {
146
+ $value = ord($input[$position]);
147
+
148
+ // One byte sequence:
149
+ if ((~$value & 0x80) === 0x80) {
150
+ $character = $value;
151
+ $length = 1;
152
+ $remaining = 0;
153
+ }
154
+ // Two byte sequence:
155
+ elseif (($value & 0xE0) === 0xC0) {
156
+ $character = ($value & 0x1F) << 6;
157
+ $length = 2;
158
+ $remaining = 1;
159
+ }
160
+ // Three byte sequence:
161
+ elseif (($value & 0xF0) === 0xE0) {
162
+ $character = ($value & 0x0F) << 12;
163
+ $length = 3;
164
+ $remaining = 2;
165
+ }
166
+ // Four byte sequence:
167
+ elseif (($value & 0xF8) === 0xF0) {
168
+ $character = ($value & 0x07) << 18;
169
+ $length = 4;
170
+ $remaining = 3;
171
+ }
172
+ // Invalid byte:
173
+ else {
174
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $value);
175
+ }
176
+
177
+ if ($remaining > 0) {
178
+ if ($position + $length > $strlen) {
179
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
180
+ }
181
+ for ($position++; $remaining > 0; $position++) {
182
+ $value = ord($input[$position]);
183
+
184
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
185
+ if (($value & 0xC0) !== 0x80) {
186
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
187
+ }
188
+
189
+ --$remaining;
190
+ $character |= ($value & 0x3F) << ($remaining * 6);
191
+ }
192
+ $position--;
193
+ }
194
+
195
+ if (// Non-shortest form sequences are invalid
196
+ $length > 1 && $character <= 0x7F
197
+ || $length > 2 && $character <= 0x7FF
198
+ || $length > 3 && $character <= 0xFFFF
199
+ // Outside of range of ucschar codepoints
200
+ // Noncharacters
201
+ || ($character & 0xFFFE) === 0xFFFE
202
+ || $character >= 0xFDD0 && $character <= 0xFDEF
203
+ || (
204
+ // Everything else not in ucschar
205
+ $character > 0xD7FF && $character < 0xF900
206
+ || $character < 0x20
207
+ || $character > 0x7E && $character < 0xA0
208
+ || $character > 0xEFFFD
209
+ )
210
+ ) {
211
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
212
+ }
213
+
214
+ $codepoints[] = $character;
215
+ }
216
+
217
+ return $codepoints;
218
+ }
219
+
220
+ /**
221
+ * RFC3492-compliant encoder
222
+ *
223
+ * @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
224
+ * @throws Requests_Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
225
+ *
226
+ * @param string $input UTF-8 encoded string to encode
227
+ * @return string Punycode-encoded string
228
+ */
229
+ public static function punycode_encode($input) {
230
+ $output = '';
231
+ // let n = initial_n
232
+ $n = self::BOOTSTRAP_INITIAL_N;
233
+ // let delta = 0
234
+ $delta = 0;
235
+ // let bias = initial_bias
236
+ $bias = self::BOOTSTRAP_INITIAL_BIAS;
237
+ // let h = b = the number of basic code points in the input
238
+ $h = 0;
239
+ $b = 0; // see loop
240
+ // copy them to the output in order
241
+ $codepoints = self::utf8_to_codepoints($input);
242
+ $extended = array();
243
+
244
+ foreach ($codepoints as $char) {
245
+ if ($char < 128) {
246
+ // Character is valid ASCII
247
+ // TODO: this should also check if it's valid for a URL
248
+ $output .= chr($char);
249
+ $h++;
250
+ }
251
+ // Check if the character is non-ASCII, but below initial n
252
+ // This never occurs for Punycode, so ignore in coverage
253
+ // @codeCoverageIgnoreStart
254
+ elseif ($char < $n) {
255
+ throw new Requests_Exception('Invalid character', 'idna.character_outside_domain', $char);
256
+ }
257
+ // @codeCoverageIgnoreEnd
258
+ else {
259
+ $extended[$char] = true;
260
+ }
261
+ }
262
+ $extended = array_keys($extended);
263
+ sort($extended);
264
+ $b = $h;
265
+ // [copy them] followed by a delimiter if b > 0
266
+ if (strlen($output) > 0) {
267
+ $output .= '-';
268
+ }
269
+ // {if the input contains a non-basic code point < n then fail}
270
+ // while h < length(input) do begin
271
+ $codepointcount = count($codepoints);
272
+ while ($h < $codepointcount) {
273
+ // let m = the minimum code point >= n in the input
274
+ $m = array_shift($extended);
275
+ //printf('next code point to insert is %s' . PHP_EOL, dechex($m));
276
+ // let delta = delta + (m - n) * (h + 1), fail on overflow
277
+ $delta += ($m - $n) * ($h + 1);
278
+ // let n = m
279
+ $n = $m;
280
+ // for each code point c in the input (in order) do begin
281
+ for ($num = 0; $num < $codepointcount; $num++) {
282
+ $c = $codepoints[$num];
283
+ // if c < n then increment delta, fail on overflow
284
+ if ($c < $n) {
285
+ $delta++;
286
+ }
287
+ // if c == n then begin
288
+ elseif ($c === $n) {
289
+ // let q = delta
290
+ $q = $delta;
291
+ // for k = base to infinity in steps of base do begin
292
+ for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
293
+ // let t = tmin if k <= bias {+ tmin}, or
294
+ // tmax if k >= bias + tmax, or k - bias otherwise
295
+ if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
296
+ $t = self::BOOTSTRAP_TMIN;
297
+ }
298
+ elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
299
+ $t = self::BOOTSTRAP_TMAX;
300
+ }
301
+ else {
302
+ $t = $k - $bias;
303
+ }
304
+ // if q < t then break
305
+ if ($q < $t) {
306
+ break;
307
+ }
308
+ // output the code point for digit t + ((q - t) mod (base - t))
309
+ $digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
310
+ $output .= self::digit_to_char($digit);
311
+ // let q = (q - t) div (base - t)
312
+ $q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
313
+ } // end
314
+ // output the code point for digit q
315
+ $output .= self::digit_to_char($q);
316
+ // let bias = adapt(delta, h + 1, test h equals b?)
317
+ $bias = self::adapt($delta, $h + 1, $h === $b);
318
+ // let delta = 0
319
+ $delta = 0;
320
+ // increment h
321
+ $h++;
322
+ } // end
323
+ } // end
324
+ // increment delta and n
325
+ $delta++;
326
+ $n++;
327
+ } // end
328
+
329
+ return $output;
330
+ }
331
+
332
+ /**
333
+ * Convert a digit to its respective character
334
+ *
335
+ * @see https://tools.ietf.org/html/rfc3492#section-5
336
+ * @throws Requests_Exception On invalid digit (`idna.invalid_digit`)
337
+ *
338
+ * @param int $digit Digit in the range 0-35
339
+ * @return string Single character corresponding to digit
340
+ */
341
+ protected static function digit_to_char($digit) {
342
+ // @codeCoverageIgnoreStart
343
+ // As far as I know, this never happens, but still good to be sure.
344
+ if ($digit < 0 || $digit > 35) {
345
+ throw new Requests_Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
346
+ }
347
+ // @codeCoverageIgnoreEnd
348
+ $digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
349
+ return substr($digits, $digit, 1);
350
+ }
351
+
352
+ /**
353
+ * Adapt the bias
354
+ *
355
+ * @see https://tools.ietf.org/html/rfc3492#section-6.1
356
+ * @param int $delta
357
+ * @param int $numpoints
358
+ * @param bool $firsttime
359
+ * @return int New bias
360
+ *
361
+ * function adapt(delta,numpoints,firsttime):
362
+ */
363
+ protected static function adapt($delta, $numpoints, $firsttime) {
364
+ // if firsttime then let delta = delta div damp
365
+ if ($firsttime) {
366
+ $delta = floor($delta / self::BOOTSTRAP_DAMP);
367
+ }
368
+ // else let delta = delta div 2
369
+ else {
370
+ $delta = floor($delta / 2);
371
+ }
372
+ // let delta = delta + (delta div numpoints)
373
+ $delta += floor($delta / $numpoints);
374
+ // let k = 0
375
+ $k = 0;
376
+ // while delta > ((base - tmin) * tmax) div 2 do begin
377
+ $max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
378
+ while ($delta > $max) {
379
+ // let delta = delta div (base - tmin)
380
+ $delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
381
+ // let k = k + base
382
+ $k += self::BOOTSTRAP_BASE;
383
+ } // end
384
+ // return k + (((base - tmin + 1) * delta) div (delta + skew))
385
+ return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
386
+ }
387
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/IPv6.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class to validate and to work with IPv6 addresses
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * Class to validate and to work with IPv6 addresses
11
+ *
12
+ * This was originally based on the PEAR class of the same name, but has been
13
+ * entirely rewritten.
14
+ *
15
+ * @package Requests
16
+ * @subpackage Utilities
17
+ */
18
+ class Requests_IPv6 {
19
+ /**
20
+ * Uncompresses an IPv6 address
21
+ *
22
+ * RFC 4291 allows you to compress consecutive zero pieces in an address to
23
+ * '::'. This method expects a valid IPv6 address and expands the '::' to
24
+ * the required number of zero pieces.
25
+ *
26
+ * Example: FF01::101 -> FF01:0:0:0:0:0:0:101
27
+ * ::1 -> 0:0:0:0:0:0:0:1
28
+ *
29
+ * @author Alexander Merz <alexander.merz@web.de>
30
+ * @author elfrink at introweb dot nl
31
+ * @author Josh Peck <jmp at joshpeck dot org>
32
+ * @copyright 2003-2005 The PHP Group
33
+ * @license http://www.opensource.org/licenses/bsd-license.php
34
+ * @param string $ip An IPv6 address
35
+ * @return string The uncompressed IPv6 address
36
+ */
37
+ public static function uncompress($ip) {
38
+ if (substr_count($ip, '::') !== 1) {
39
+ return $ip;
40
+ }
41
+
42
+ list($ip1, $ip2) = explode('::', $ip);
43
+ $c1 = ($ip1 === '') ? -1 : substr_count($ip1, ':');
44
+ $c2 = ($ip2 === '') ? -1 : substr_count($ip2, ':');
45
+
46
+ if (strpos($ip2, '.') !== false) {
47
+ $c2++;
48
+ }
49
+ // ::
50
+ if ($c1 === -1 && $c2 === -1) {
51
+ $ip = '0:0:0:0:0:0:0:0';
52
+ }
53
+ // ::xxx
54
+ elseif ($c1 === -1) {
55
+ $fill = str_repeat('0:', 7 - $c2);
56
+ $ip = str_replace('::', $fill, $ip);
57
+ }
58
+ // xxx::
59
+ elseif ($c2 === -1) {
60
+ $fill = str_repeat(':0', 7 - $c1);
61
+ $ip = str_replace('::', $fill, $ip);
62
+ }
63
+ // xxx::xxx
64
+ else {
65
+ $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
66
+ $ip = str_replace('::', $fill, $ip);
67
+ }
68
+ return $ip;
69
+ }
70
+
71
+ /**
72
+ * Compresses an IPv6 address
73
+ *
74
+ * RFC 4291 allows you to compress consecutive zero pieces in an address to
75
+ * '::'. This method expects a valid IPv6 address and compresses consecutive
76
+ * zero pieces to '::'.
77
+ *
78
+ * Example: FF01:0:0:0:0:0:0:101 -> FF01::101
79
+ * 0:0:0:0:0:0:0:1 -> ::1
80
+ *
81
+ * @see uncompress()
82
+ * @param string $ip An IPv6 address
83
+ * @return string The compressed IPv6 address
84
+ */
85
+ public static function compress($ip) {
86
+ // Prepare the IP to be compressed
87
+ $ip = self::uncompress($ip);
88
+ $ip_parts = self::split_v6_v4($ip);
89
+
90
+ // Replace all leading zeros
91
+ $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
92
+
93
+ // Find bunches of zeros
94
+ if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
95
+ $max = 0;
96
+ $pos = null;
97
+ foreach ($matches[0] as $match) {
98
+ if (strlen($match[0]) > $max) {
99
+ $max = strlen($match[0]);
100
+ $pos = $match[1];
101
+ }
102
+ }
103
+
104
+ $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
105
+ }
106
+
107
+ if ($ip_parts[1] !== '') {
108
+ return implode(':', $ip_parts);
109
+ }
110
+ else {
111
+ return $ip_parts[0];
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Splits an IPv6 address into the IPv6 and IPv4 representation parts
117
+ *
118
+ * RFC 4291 allows you to represent the last two parts of an IPv6 address
119
+ * using the standard IPv4 representation
120
+ *
121
+ * Example: 0:0:0:0:0:0:13.1.68.3
122
+ * 0:0:0:0:0:FFFF:129.144.52.38
123
+ *
124
+ * @param string $ip An IPv6 address
125
+ * @return string[] [0] contains the IPv6 represented part, and [1] the IPv4 represented part
126
+ */
127
+ protected static function split_v6_v4($ip) {
128
+ if (strpos($ip, '.') !== false) {
129
+ $pos = strrpos($ip, ':');
130
+ $ipv6_part = substr($ip, 0, $pos);
131
+ $ipv4_part = substr($ip, $pos + 1);
132
+ return array($ipv6_part, $ipv4_part);
133
+ }
134
+ else {
135
+ return array($ip, '');
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Checks an IPv6 address
141
+ *
142
+ * Checks if the given IP is a valid IPv6 address
143
+ *
144
+ * @param string $ip An IPv6 address
145
+ * @return bool true if $ip is a valid IPv6 address
146
+ */
147
+ public static function check_ipv6($ip) {
148
+ $ip = self::uncompress($ip);
149
+ list($ipv6, $ipv4) = self::split_v6_v4($ip);
150
+ $ipv6 = explode(':', $ipv6);
151
+ $ipv4 = explode('.', $ipv4);
152
+ if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
153
+ foreach ($ipv6 as $ipv6_part) {
154
+ // The section can't be empty
155
+ if ($ipv6_part === '') {
156
+ return false;
157
+ }
158
+
159
+ // Nor can it be over four characters
160
+ if (strlen($ipv6_part) > 4) {
161
+ return false;
162
+ }
163
+
164
+ // Remove leading zeros (this is safe because of the above)
165
+ $ipv6_part = ltrim($ipv6_part, '0');
166
+ if ($ipv6_part === '') {
167
+ $ipv6_part = '0';
168
+ }
169
+
170
+ // Check the value is valid
171
+ $value = hexdec($ipv6_part);
172
+ if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
173
+ return false;
174
+ }
175
+ }
176
+ if (count($ipv4) === 4) {
177
+ foreach ($ipv4 as $ipv4_part) {
178
+ $value = (int) $ipv4_part;
179
+ if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
180
+ return false;
181
+ }
182
+ }
183
+ }
184
+ return true;
185
+ }
186
+ else {
187
+ return false;
188
+ }
189
+ }
190
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/IRI.php ADDED
@@ -0,0 +1,1086 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IRI parser/serialiser/normaliser
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * IRI parser/serialiser/normaliser
11
+ *
12
+ * Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
13
+ * All rights reserved.
14
+ *
15
+ * Redistribution and use in source and binary forms, with or without
16
+ * modification, are permitted provided that the following conditions are met:
17
+ *
18
+ * * Redistributions of source code must retain the above copyright notice,
19
+ * this list of conditions and the following disclaimer.
20
+ *
21
+ * * Redistributions in binary form must reproduce the above copyright notice,
22
+ * this list of conditions and the following disclaimer in the documentation
23
+ * and/or other materials provided with the distribution.
24
+ *
25
+ * * Neither the name of the SimplePie Team nor the names of its contributors
26
+ * may be used to endorse or promote products derived from this software
27
+ * without specific prior written permission.
28
+ *
29
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
30
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
33
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39
+ * POSSIBILITY OF SUCH DAMAGE.
40
+ *
41
+ * @package Requests
42
+ * @subpackage Utilities
43
+ * @author Geoffrey Sneddon
44
+ * @author Steve Minutillo
45
+ * @copyright 2007-2009 Geoffrey Sneddon and Steve Minutillo
46
+ * @license http://www.opensource.org/licenses/bsd-license.php
47
+ * @link http://hg.gsnedders.com/iri/
48
+ *
49
+ * @property string $iri IRI we're working with
50
+ * @property-read string $uri IRI in URI form, {@see to_uri}
51
+ * @property string $scheme Scheme part of the IRI
52
+ * @property string $authority Authority part, formatted for a URI (userinfo + host + port)
53
+ * @property string $iauthority Authority part of the IRI (userinfo + host + port)
54
+ * @property string $userinfo Userinfo part, formatted for a URI (after '://' and before '@')
55
+ * @property string $iuserinfo Userinfo part of the IRI (after '://' and before '@')
56
+ * @property string $host Host part, formatted for a URI
57
+ * @property string $ihost Host part of the IRI
58
+ * @property string $port Port part of the IRI (after ':')
59
+ * @property string $path Path part, formatted for a URI (after first '/')
60
+ * @property string $ipath Path part of the IRI (after first '/')
61
+ * @property string $query Query part, formatted for a URI (after '?')
62
+ * @property string $iquery Query part of the IRI (after '?')
63
+ * @property string $fragment Fragment, formatted for a URI (after '#')
64
+ * @property string $ifragment Fragment part of the IRI (after '#')
65
+ */
66
+ class Requests_IRI {
67
+ /**
68
+ * Scheme
69
+ *
70
+ * @var string|null
71
+ */
72
+ protected $scheme = null;
73
+
74
+ /**
75
+ * User Information
76
+ *
77
+ * @var string|null
78
+ */
79
+ protected $iuserinfo = null;
80
+
81
+ /**
82
+ * ihost
83
+ *
84
+ * @var string|null
85
+ */
86
+ protected $ihost = null;
87
+
88
+ /**
89
+ * Port
90
+ *
91
+ * @var string|null
92
+ */
93
+ protected $port = null;
94
+
95
+ /**
96
+ * ipath
97
+ *
98
+ * @var string
99
+ */
100
+ protected $ipath = '';
101
+
102
+ /**
103
+ * iquery
104
+ *
105
+ * @var string|null
106
+ */
107
+ protected $iquery = null;
108
+
109
+ /**
110
+ * ifragment|null
111
+ *
112
+ * @var string
113
+ */
114
+ protected $ifragment = null;
115
+
116
+ /**
117
+ * Normalization database
118
+ *
119
+ * Each key is the scheme, each value is an array with each key as the IRI
120
+ * part and value as the default value for that part.
121
+ *
122
+ * @var array
123
+ */
124
+ protected $normalization = array(
125
+ 'acap' => array(
126
+ 'port' => 674
127
+ ),
128
+ 'dict' => array(
129
+ 'port' => 2628
130
+ ),
131
+ 'file' => array(
132
+ 'ihost' => 'localhost'
133
+ ),
134
+ 'http' => array(
135
+ 'port' => 80,
136
+ ),
137
+ 'https' => array(
138
+ 'port' => 443,
139
+ ),
140
+ );
141
+
142
+ /**
143
+ * Return the entire IRI when you try and read the object as a string
144
+ *
145
+ * @return string
146
+ */
147
+ public function __toString() {
148
+ return $this->get_iri();
149
+ }
150
+
151
+ /**
152
+ * Overload __set() to provide access via properties
153
+ *
154
+ * @param string $name Property name
155
+ * @param mixed $value Property value
156
+ */
157
+ public function __set($name, $value) {
158
+ if (method_exists($this, 'set_' . $name)) {
159
+ call_user_func(array($this, 'set_' . $name), $value);
160
+ }
161
+ elseif (
162
+ $name === 'iauthority'
163
+ || $name === 'iuserinfo'
164
+ || $name === 'ihost'
165
+ || $name === 'ipath'
166
+ || $name === 'iquery'
167
+ || $name === 'ifragment'
168
+ ) {
169
+ call_user_func(array($this, 'set_' . substr($name, 1)), $value);
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Overload __get() to provide access via properties
175
+ *
176
+ * @param string $name Property name
177
+ * @return mixed
178
+ */
179
+ public function __get($name) {
180
+ // isset() returns false for null, we don't want to do that
181
+ // Also why we use array_key_exists below instead of isset()
182
+ $props = get_object_vars($this);
183
+
184
+ if (
185
+ $name === 'iri' ||
186
+ $name === 'uri' ||
187
+ $name === 'iauthority' ||
188
+ $name === 'authority'
189
+ ) {
190
+ $method = 'get_' . $name;
191
+ $return = $this->$method();
192
+ }
193
+ elseif (array_key_exists($name, $props)) {
194
+ $return = $this->$name;
195
+ }
196
+ // host -> ihost
197
+ elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
198
+ $name = $prop;
199
+ $return = $this->$prop;
200
+ }
201
+ // ischeme -> scheme
202
+ elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
203
+ $name = $prop;
204
+ $return = $this->$prop;
205
+ }
206
+ else {
207
+ trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
208
+ $return = null;
209
+ }
210
+
211
+ if ($return === null && isset($this->normalization[$this->scheme][$name])) {
212
+ return $this->normalization[$this->scheme][$name];
213
+ }
214
+ else {
215
+ return $return;
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Overload __isset() to provide access via properties
221
+ *
222
+ * @param string $name Property name
223
+ * @return bool
224
+ */
225
+ public function __isset($name) {
226
+ return (method_exists($this, 'get_' . $name) || isset($this->$name));
227
+ }
228
+
229
+ /**
230
+ * Overload __unset() to provide access via properties
231
+ *
232
+ * @param string $name Property name
233
+ */
234
+ public function __unset($name) {
235
+ if (method_exists($this, 'set_' . $name)) {
236
+ call_user_func(array($this, 'set_' . $name), '');
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Create a new IRI object, from a specified string
242
+ *
243
+ * @param string|null $iri
244
+ */
245
+ public function __construct($iri = null) {
246
+ $this->set_iri($iri);
247
+ }
248
+
249
+ /**
250
+ * Create a new IRI object by resolving a relative IRI
251
+ *
252
+ * Returns false if $base is not absolute, otherwise an IRI.
253
+ *
254
+ * @param Requests_IRI|string $base (Absolute) Base IRI
255
+ * @param Requests_IRI|string $relative Relative IRI
256
+ * @return Requests_IRI|false
257
+ */
258
+ public static function absolutize($base, $relative) {
259
+ if (!($relative instanceof Requests_IRI)) {
260
+ $relative = new Requests_IRI($relative);
261
+ }
262
+ if (!$relative->is_valid()) {
263
+ return false;
264
+ }
265
+ elseif ($relative->scheme !== null) {
266
+ return clone $relative;
267
+ }
268
+
269
+ if (!($base instanceof Requests_IRI)) {
270
+ $base = new Requests_IRI($base);
271
+ }
272
+ if ($base->scheme === null || !$base->is_valid()) {
273
+ return false;
274
+ }
275
+
276
+ if ($relative->get_iri() !== '') {
277
+ if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
278
+ $target = clone $relative;
279
+ $target->scheme = $base->scheme;
280
+ }
281
+ else {
282
+ $target = new Requests_IRI;
283
+ $target->scheme = $base->scheme;
284
+ $target->iuserinfo = $base->iuserinfo;
285
+ $target->ihost = $base->ihost;
286
+ $target->port = $base->port;
287
+ if ($relative->ipath !== '') {
288
+ if ($relative->ipath[0] === '/') {
289
+ $target->ipath = $relative->ipath;
290
+ }
291
+ elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
292
+ $target->ipath = '/' . $relative->ipath;
293
+ }
294
+ elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
295
+ $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
296
+ }
297
+ else {
298
+ $target->ipath = $relative->ipath;
299
+ }
300
+ $target->ipath = $target->remove_dot_segments($target->ipath);
301
+ $target->iquery = $relative->iquery;
302
+ }
303
+ else {
304
+ $target->ipath = $base->ipath;
305
+ if ($relative->iquery !== null) {
306
+ $target->iquery = $relative->iquery;
307
+ }
308
+ elseif ($base->iquery !== null) {
309
+ $target->iquery = $base->iquery;
310
+ }
311
+ }
312
+ $target->ifragment = $relative->ifragment;
313
+ }
314
+ }
315
+ else {
316
+ $target = clone $base;
317
+ $target->ifragment = null;
318
+ }
319
+ $target->scheme_normalization();
320
+ return $target;
321
+ }
322
+
323
+ /**
324
+ * Parse an IRI into scheme/authority/path/query/fragment segments
325
+ *
326
+ * @param string $iri
327
+ * @return array
328
+ */
329
+ protected function parse_iri($iri) {
330
+ $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
331
+ $has_match = preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match);
332
+ if (!$has_match) {
333
+ throw new Requests_Exception('Cannot parse supplied IRI', 'iri.cannot_parse', $iri);
334
+ }
335
+
336
+ if ($match[1] === '') {
337
+ $match['scheme'] = null;
338
+ }
339
+ if (!isset($match[3]) || $match[3] === '') {
340
+ $match['authority'] = null;
341
+ }
342
+ if (!isset($match[5])) {
343
+ $match['path'] = '';
344
+ }
345
+ if (!isset($match[6]) || $match[6] === '') {
346
+ $match['query'] = null;
347
+ }
348
+ if (!isset($match[8]) || $match[8] === '') {
349
+ $match['fragment'] = null;
350
+ }
351
+ return $match;
352
+ }
353
+
354
+ /**
355
+ * Remove dot segments from a path
356
+ *
357
+ * @param string $input
358
+ * @return string
359
+ */
360
+ protected function remove_dot_segments($input) {
361
+ $output = '';
362
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
363
+ // A: If the input buffer begins with a prefix of "../" or "./",
364
+ // then remove that prefix from the input buffer; otherwise,
365
+ if (strpos($input, '../') === 0) {
366
+ $input = substr($input, 3);
367
+ }
368
+ elseif (strpos($input, './') === 0) {
369
+ $input = substr($input, 2);
370
+ }
371
+ // B: if the input buffer begins with a prefix of "/./" or "/.",
372
+ // where "." is a complete path segment, then replace that prefix
373
+ // with "/" in the input buffer; otherwise,
374
+ elseif (strpos($input, '/./') === 0) {
375
+ $input = substr($input, 2);
376
+ }
377
+ elseif ($input === '/.') {
378
+ $input = '/';
379
+ }
380
+ // C: if the input buffer begins with a prefix of "/../" or "/..",
381
+ // where ".." is a complete path segment, then replace that prefix
382
+ // with "/" in the input buffer and remove the last segment and its
383
+ // preceding "/" (if any) from the output buffer; otherwise,
384
+ elseif (strpos($input, '/../') === 0) {
385
+ $input = substr($input, 3);
386
+ $output = substr_replace($output, '', strrpos($output, '/'));
387
+ }
388
+ elseif ($input === '/..') {
389
+ $input = '/';
390
+ $output = substr_replace($output, '', strrpos($output, '/'));
391
+ }
392
+ // D: if the input buffer consists only of "." or "..", then remove
393
+ // that from the input buffer; otherwise,
394
+ elseif ($input === '.' || $input === '..') {
395
+ $input = '';
396
+ }
397
+ // E: move the first path segment in the input buffer to the end of
398
+ // the output buffer, including the initial "/" character (if any)
399
+ // and any subsequent characters up to, but not including, the next
400
+ // "/" character or the end of the input buffer
401
+ elseif (($pos = strpos($input, '/', 1)) !== false) {
402
+ $output .= substr($input, 0, $pos);
403
+ $input = substr_replace($input, '', 0, $pos);
404
+ }
405
+ else {
406
+ $output .= $input;
407
+ $input = '';
408
+ }
409
+ }
410
+ return $output . $input;
411
+ }
412
+
413
+ /**
414
+ * Replace invalid character with percent encoding
415
+ *
416
+ * @param string $string Input string
417
+ * @param string $extra_chars Valid characters not in iunreserved or
418
+ * iprivate (this is ASCII-only)
419
+ * @param bool $iprivate Allow iprivate
420
+ * @return string
421
+ */
422
+ protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false) {
423
+ // Normalize as many pct-encoded sections as possible
424
+ $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string);
425
+
426
+ // Replace invalid percent characters
427
+ $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
428
+
429
+ // Add unreserved and % to $extra_chars (the latter is safe because all
430
+ // pct-encoded sections are now valid).
431
+ $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
432
+
433
+ // Now replace any bytes that aren't allowed with their pct-encoded versions
434
+ $position = 0;
435
+ $strlen = strlen($string);
436
+ while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
437
+ $value = ord($string[$position]);
438
+
439
+ // Start position
440
+ $start = $position;
441
+
442
+ // By default we are valid
443
+ $valid = true;
444
+
445
+ // No one byte sequences are valid due to the while.
446
+ // Two byte sequence:
447
+ if (($value & 0xE0) === 0xC0) {
448
+ $character = ($value & 0x1F) << 6;
449
+ $length = 2;
450
+ $remaining = 1;
451
+ }
452
+ // Three byte sequence:
453
+ elseif (($value & 0xF0) === 0xE0) {
454
+ $character = ($value & 0x0F) << 12;
455
+ $length = 3;
456
+ $remaining = 2;
457
+ }
458
+ // Four byte sequence:
459
+ elseif (($value & 0xF8) === 0xF0) {
460
+ $character = ($value & 0x07) << 18;
461
+ $length = 4;
462
+ $remaining = 3;
463
+ }
464
+ // Invalid byte:
465
+ else {
466
+ $valid = false;
467
+ $length = 1;
468
+ $remaining = 0;
469
+ }
470
+
471
+ if ($remaining) {
472
+ if ($position + $length <= $strlen) {
473
+ for ($position++; $remaining; $position++) {
474
+ $value = ord($string[$position]);
475
+
476
+ // Check that the byte is valid, then add it to the character:
477
+ if (($value & 0xC0) === 0x80) {
478
+ $character |= ($value & 0x3F) << (--$remaining * 6);
479
+ }
480
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
481
+ else {
482
+ $valid = false;
483
+ $position--;
484
+ break;
485
+ }
486
+ }
487
+ }
488
+ else {
489
+ $position = $strlen - 1;
490
+ $valid = false;
491
+ }
492
+ }
493
+
494
+ // Percent encode anything invalid or not in ucschar
495
+ if (
496
+ // Invalid sequences
497
+ !$valid
498
+ // Non-shortest form sequences are invalid
499
+ || $length > 1 && $character <= 0x7F
500
+ || $length > 2 && $character <= 0x7FF
501
+ || $length > 3 && $character <= 0xFFFF
502
+ // Outside of range of ucschar codepoints
503
+ // Noncharacters
504
+ || ($character & 0xFFFE) === 0xFFFE
505
+ || $character >= 0xFDD0 && $character <= 0xFDEF
506
+ || (
507
+ // Everything else not in ucschar
508
+ $character > 0xD7FF && $character < 0xF900
509
+ || $character < 0xA0
510
+ || $character > 0xEFFFD
511
+ )
512
+ && (
513
+ // Everything not in iprivate, if it applies
514
+ !$iprivate
515
+ || $character < 0xE000
516
+ || $character > 0x10FFFD
517
+ )
518
+ ) {
519
+ // If we were a character, pretend we weren't, but rather an error.
520
+ if ($valid) {
521
+ $position--;
522
+ }
523
+
524
+ for ($j = $start; $j <= $position; $j++) {
525
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
526
+ $j += 2;
527
+ $position += 2;
528
+ $strlen += 2;
529
+ }
530
+ }
531
+ }
532
+
533
+ return $string;
534
+ }
535
+
536
+ /**
537
+ * Callback function for preg_replace_callback.
538
+ *
539
+ * Removes sequences of percent encoded bytes that represent UTF-8
540
+ * encoded characters in iunreserved
541
+ *
542
+ * @param array $match PCRE match
543
+ * @return string Replacement
544
+ */
545
+ protected function remove_iunreserved_percent_encoded($match) {
546
+ // As we just have valid percent encoded sequences we can just explode
547
+ // and ignore the first member of the returned array (an empty string).
548
+ $bytes = explode('%', $match[0]);
549
+
550
+ // Initialize the new string (this is what will be returned) and that
551
+ // there are no bytes remaining in the current sequence (unsurprising
552
+ // at the first byte!).
553
+ $string = '';
554
+ $remaining = 0;
555
+
556
+ // Loop over each and every byte, and set $value to its value
557
+ for ($i = 1, $len = count($bytes); $i < $len; $i++) {
558
+ $value = hexdec($bytes[$i]);
559
+
560
+ // If we're the first byte of sequence:
561
+ if (!$remaining) {
562
+ // Start position
563
+ $start = $i;
564
+
565
+ // By default we are valid
566
+ $valid = true;
567
+
568
+ // One byte sequence:
569
+ if ($value <= 0x7F) {
570
+ $character = $value;
571
+ $length = 1;
572
+ }
573
+ // Two byte sequence:
574
+ elseif (($value & 0xE0) === 0xC0) {
575
+ $character = ($value & 0x1F) << 6;
576
+ $length = 2;
577
+ $remaining = 1;
578
+ }
579
+ // Three byte sequence:
580
+ elseif (($value & 0xF0) === 0xE0) {
581
+ $character = ($value & 0x0F) << 12;
582
+ $length = 3;
583
+ $remaining = 2;
584
+ }
585
+ // Four byte sequence:
586
+ elseif (($value & 0xF8) === 0xF0) {
587
+ $character = ($value & 0x07) << 18;
588
+ $length = 4;
589
+ $remaining = 3;
590
+ }
591
+ // Invalid byte:
592
+ else {
593
+ $valid = false;
594
+ $remaining = 0;
595
+ }
596
+ }
597
+ // Continuation byte:
598
+ else {
599
+ // Check that the byte is valid, then add it to the character:
600
+ if (($value & 0xC0) === 0x80) {
601
+ $remaining--;
602
+ $character |= ($value & 0x3F) << ($remaining * 6);
603
+ }
604
+ // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
605
+ else {
606
+ $valid = false;
607
+ $remaining = 0;
608
+ $i--;
609
+ }
610
+ }
611
+
612
+ // If we've reached the end of the current byte sequence, append it to Unicode::$data
613
+ if (!$remaining) {
614
+ // Percent encode anything invalid or not in iunreserved
615
+ if (
616
+ // Invalid sequences
617
+ !$valid
618
+ // Non-shortest form sequences are invalid
619
+ || $length > 1 && $character <= 0x7F
620
+ || $length > 2 && $character <= 0x7FF
621
+ || $length > 3 && $character <= 0xFFFF
622
+ // Outside of range of iunreserved codepoints
623
+ || $character < 0x2D
624
+ || $character > 0xEFFFD
625
+ // Noncharacters
626
+ || ($character & 0xFFFE) === 0xFFFE
627
+ || $character >= 0xFDD0 && $character <= 0xFDEF
628
+ // Everything else not in iunreserved (this is all BMP)
629
+ || $character === 0x2F
630
+ || $character > 0x39 && $character < 0x41
631
+ || $character > 0x5A && $character < 0x61
632
+ || $character > 0x7A && $character < 0x7E
633
+ || $character > 0x7E && $character < 0xA0
634
+ || $character > 0xD7FF && $character < 0xF900
635
+ ) {
636
+ for ($j = $start; $j <= $i; $j++) {
637
+ $string .= '%' . strtoupper($bytes[$j]);
638
+ }
639
+ }
640
+ else {
641
+ for ($j = $start; $j <= $i; $j++) {
642
+ $string .= chr(hexdec($bytes[$j]));
643
+ }
644
+ }
645
+ }
646
+ }
647
+
648
+ // If we have any bytes left over they are invalid (i.e., we are
649
+ // mid-way through a multi-byte sequence)
650
+ if ($remaining) {
651
+ for ($j = $start; $j < $len; $j++) {
652
+ $string .= '%' . strtoupper($bytes[$j]);
653
+ }
654
+ }
655
+
656
+ return $string;
657
+ }
658
+
659
+ protected function scheme_normalization() {
660
+ if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
661
+ $this->iuserinfo = null;
662
+ }
663
+ if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
664
+ $this->ihost = null;
665
+ }
666
+ if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
667
+ $this->port = null;
668
+ }
669
+ if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
670
+ $this->ipath = '';
671
+ }
672
+ if (isset($this->ihost) && empty($this->ipath)) {
673
+ $this->ipath = '/';
674
+ }
675
+ if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
676
+ $this->iquery = null;
677
+ }
678
+ if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
679
+ $this->ifragment = null;
680
+ }
681
+ }
682
+
683
+ /**
684
+ * Check if the object represents a valid IRI. This needs to be done on each
685
+ * call as some things change depending on another part of the IRI.
686
+ *
687
+ * @return bool
688
+ */
689
+ public function is_valid() {
690
+ $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
691
+ if ($this->ipath !== '' &&
692
+ (
693
+ $isauthority && $this->ipath[0] !== '/' ||
694
+ (
695
+ $this->scheme === null &&
696
+ !$isauthority &&
697
+ strpos($this->ipath, ':') !== false &&
698
+ (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
699
+ )
700
+ )
701
+ ) {
702
+ return false;
703
+ }
704
+
705
+ return true;
706
+ }
707
+
708
+ /**
709
+ * Set the entire IRI. Returns true on success, false on failure (if there
710
+ * are any invalid characters).
711
+ *
712
+ * @param string $iri
713
+ * @return bool
714
+ */
715
+ protected function set_iri($iri) {
716
+ static $cache;
717
+ if (!$cache) {
718
+ $cache = array();
719
+ }
720
+
721
+ if ($iri === null) {
722
+ return true;
723
+ }
724
+ if (isset($cache[$iri])) {
725
+ list($this->scheme,
726
+ $this->iuserinfo,
727
+ $this->ihost,
728
+ $this->port,
729
+ $this->ipath,
730
+ $this->iquery,
731
+ $this->ifragment,
732
+ $return) = $cache[$iri];
733
+ return $return;
734
+ }
735
+
736
+ $parsed = $this->parse_iri((string) $iri);
737
+
738
+ $return = $this->set_scheme($parsed['scheme'])
739
+ && $this->set_authority($parsed['authority'])
740
+ && $this->set_path($parsed['path'])
741
+ && $this->set_query($parsed['query'])
742
+ && $this->set_fragment($parsed['fragment']);
743
+
744
+ $cache[$iri] = array($this->scheme,
745
+ $this->iuserinfo,
746
+ $this->ihost,
747
+ $this->port,
748
+ $this->ipath,
749
+ $this->iquery,
750
+ $this->ifragment,
751
+ $return);
752
+ return $return;
753
+ }
754
+
755
+ /**
756
+ * Set the scheme. Returns true on success, false on failure (if there are
757
+ * any invalid characters).
758
+ *
759
+ * @param string $scheme
760
+ * @return bool
761
+ */
762
+ protected function set_scheme($scheme) {
763
+ if ($scheme === null) {
764
+ $this->scheme = null;
765
+ }
766
+ elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
767
+ $this->scheme = null;
768
+ return false;
769
+ }
770
+ else {
771
+ $this->scheme = strtolower($scheme);
772
+ }
773
+ return true;
774
+ }
775
+
776
+ /**
777
+ * Set the authority. Returns true on success, false on failure (if there are
778
+ * any invalid characters).
779
+ *
780
+ * @param string $authority
781
+ * @return bool
782
+ */
783
+ protected function set_authority($authority) {
784
+ static $cache;
785
+ if (!$cache) {
786
+ $cache = array();
787
+ }
788
+
789
+ if ($authority === null) {
790
+ $this->iuserinfo = null;
791
+ $this->ihost = null;
792
+ $this->port = null;
793
+ return true;
794
+ }
795
+ if (isset($cache[$authority])) {
796
+ list($this->iuserinfo,
797
+ $this->ihost,
798
+ $this->port,
799
+ $return) = $cache[$authority];
800
+
801
+ return $return;
802
+ }
803
+
804
+ $remaining = $authority;
805
+ if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
806
+ $iuserinfo = substr($remaining, 0, $iuserinfo_end);
807
+ $remaining = substr($remaining, $iuserinfo_end + 1);
808
+ }
809
+ else {
810
+ $iuserinfo = null;
811
+ }
812
+ if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) {
813
+ $port = substr($remaining, $port_start + 1);
814
+ if ($port === false || $port === '') {
815
+ $port = null;
816
+ }
817
+ $remaining = substr($remaining, 0, $port_start);
818
+ }
819
+ else {
820
+ $port = null;
821
+ }
822
+
823
+ $return = $this->set_userinfo($iuserinfo) &&
824
+ $this->set_host($remaining) &&
825
+ $this->set_port($port);
826
+
827
+ $cache[$authority] = array($this->iuserinfo,
828
+ $this->ihost,
829
+ $this->port,
830
+ $return);
831
+
832
+ return $return;
833
+ }
834
+
835
+ /**
836
+ * Set the iuserinfo.
837
+ *
838
+ * @param string $iuserinfo
839
+ * @return bool
840
+ */
841
+ protected function set_userinfo($iuserinfo) {
842
+ if ($iuserinfo === null) {
843
+ $this->iuserinfo = null;
844
+ }
845
+ else {
846
+ $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
847
+ $this->scheme_normalization();
848
+ }
849
+
850
+ return true;
851
+ }
852
+
853
+ /**
854
+ * Set the ihost. Returns true on success, false on failure (if there are
855
+ * any invalid characters).
856
+ *
857
+ * @param string $ihost
858
+ * @return bool
859
+ */
860
+ protected function set_host($ihost) {
861
+ if ($ihost === null) {
862
+ $this->ihost = null;
863
+ return true;
864
+ }
865
+ if (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
866
+ if (Requests_IPv6::check_ipv6(substr($ihost, 1, -1))) {
867
+ $this->ihost = '[' . Requests_IPv6::compress(substr($ihost, 1, -1)) . ']';
868
+ }
869
+ else {
870
+ $this->ihost = null;
871
+ return false;
872
+ }
873
+ }
874
+ else {
875
+ $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
876
+
877
+ // Lowercase, but ignore pct-encoded sections (as they should
878
+ // remain uppercase). This must be done after the previous step
879
+ // as that can add unescaped characters.
880
+ $position = 0;
881
+ $strlen = strlen($ihost);
882
+ while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
883
+ if ($ihost[$position] === '%') {
884
+ $position += 3;
885
+ }
886
+ else {
887
+ $ihost[$position] = strtolower($ihost[$position]);
888
+ $position++;
889
+ }
890
+ }
891
+
892
+ $this->ihost = $ihost;
893
+ }
894
+
895
+ $this->scheme_normalization();
896
+
897
+ return true;
898
+ }
899
+
900
+ /**
901
+ * Set the port. Returns true on success, false on failure (if there are
902
+ * any invalid characters).
903
+ *
904
+ * @param string $port
905
+ * @return bool
906
+ */
907
+ protected function set_port($port) {
908
+ if ($port === null) {
909
+ $this->port = null;
910
+ return true;
911
+ }
912
+
913
+ if (strspn($port, '0123456789') === strlen($port)) {
914
+ $this->port = (int) $port;
915
+ $this->scheme_normalization();
916
+ return true;
917
+ }
918
+
919
+ $this->port = null;
920
+ return false;
921
+ }
922
+
923
+ /**
924
+ * Set the ipath.
925
+ *
926
+ * @param string $ipath
927
+ * @return bool
928
+ */
929
+ protected function set_path($ipath) {
930
+ static $cache;
931
+ if (!$cache) {
932
+ $cache = array();
933
+ }
934
+
935
+ $ipath = (string) $ipath;
936
+
937
+ if (isset($cache[$ipath])) {
938
+ $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
939
+ }
940
+ else {
941
+ $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
942
+ $removed = $this->remove_dot_segments($valid);
943
+
944
+ $cache[$ipath] = array($valid, $removed);
945
+ $this->ipath = ($this->scheme !== null) ? $removed : $valid;
946
+ }
947
+ $this->scheme_normalization();
948
+ return true;
949
+ }
950
+
951
+ /**
952
+ * Set the iquery.
953
+ *
954
+ * @param string $iquery
955
+ * @return bool
956
+ */
957
+ protected function set_query($iquery) {
958
+ if ($iquery === null) {
959
+ $this->iquery = null;
960
+ }
961
+ else {
962
+ $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
963
+ $this->scheme_normalization();
964
+ }
965
+ return true;
966
+ }
967
+
968
+ /**
969
+ * Set the ifragment.
970
+ *
971
+ * @param string $ifragment
972
+ * @return bool
973
+ */
974
+ protected function set_fragment($ifragment) {
975
+ if ($ifragment === null) {
976
+ $this->ifragment = null;
977
+ }
978
+ else {
979
+ $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
980
+ $this->scheme_normalization();
981
+ }
982
+ return true;
983
+ }
984
+
985
+ /**
986
+ * Convert an IRI to a URI (or parts thereof)
987
+ *
988
+ * @param string|bool IRI to convert (or false from {@see get_iri})
989
+ * @return string|false URI if IRI is valid, false otherwise.
990
+ */
991
+ protected function to_uri($string) {
992
+ if (!is_string($string)) {
993
+ return false;
994
+ }
995
+
996
+ static $non_ascii;
997
+ if (!$non_ascii) {
998
+ $non_ascii = implode('', range("\x80", "\xFF"));
999
+ }
1000
+
1001
+ $position = 0;
1002
+ $strlen = strlen($string);
1003
+ while (($position += strcspn($string, $non_ascii, $position)) < $strlen) {
1004
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
1005
+ $position += 3;
1006
+ $strlen += 2;
1007
+ }
1008
+
1009
+ return $string;
1010
+ }
1011
+
1012
+ /**
1013
+ * Get the complete IRI
1014
+ *
1015
+ * @return string|false
1016
+ */
1017
+ protected function get_iri() {
1018
+ if (!$this->is_valid()) {
1019
+ return false;
1020
+ }
1021
+
1022
+ $iri = '';
1023
+ if ($this->scheme !== null) {
1024
+ $iri .= $this->scheme . ':';
1025
+ }
1026
+ if (($iauthority = $this->get_iauthority()) !== null) {
1027
+ $iri .= '//' . $iauthority;
1028
+ }
1029
+ $iri .= $this->ipath;
1030
+ if ($this->iquery !== null) {
1031
+ $iri .= '?' . $this->iquery;
1032
+ }
1033
+ if ($this->ifragment !== null) {
1034
+ $iri .= '#' . $this->ifragment;
1035
+ }
1036
+
1037
+ return $iri;
1038
+ }
1039
+
1040
+ /**
1041
+ * Get the complete URI
1042
+ *
1043
+ * @return string
1044
+ */
1045
+ protected function get_uri() {
1046
+ return $this->to_uri($this->get_iri());
1047
+ }
1048
+
1049
+ /**
1050
+ * Get the complete iauthority
1051
+ *
1052
+ * @return string|null
1053
+ */
1054
+ protected function get_iauthority() {
1055
+ if ($this->iuserinfo === null && $this->ihost === null && $this->port === null) {
1056
+ return null;
1057
+ }
1058
+
1059
+ $iauthority = '';
1060
+ if ($this->iuserinfo !== null) {
1061
+ $iauthority .= $this->iuserinfo . '@';
1062
+ }
1063
+ if ($this->ihost !== null) {
1064
+ $iauthority .= $this->ihost;
1065
+ }
1066
+ if ($this->port !== null) {
1067
+ $iauthority .= ':' . $this->port;
1068
+ }
1069
+ return $iauthority;
1070
+ }
1071
+
1072
+ /**
1073
+ * Get the complete authority
1074
+ *
1075
+ * @return string
1076
+ */
1077
+ protected function get_authority() {
1078
+ $iauthority = $this->get_iauthority();
1079
+ if (is_string($iauthority)) {
1080
+ return $this->to_uri($iauthority);
1081
+ }
1082
+ else {
1083
+ return $iauthority;
1084
+ }
1085
+ }
1086
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Proxy.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Proxy connection interface
4
+ *
5
+ * @package Requests
6
+ * @subpackage Proxy
7
+ * @since 1.6
8
+ */
9
+
10
+ /**
11
+ * Proxy connection interface
12
+ *
13
+ * Implement this interface to handle proxy settings and authentication
14
+ *
15
+ * Parameters should be passed via the constructor where possible, as this
16
+ * makes it much easier for users to use your provider.
17
+ *
18
+ * @see Requests_Hooks
19
+ * @package Requests
20
+ * @subpackage Proxy
21
+ * @since 1.6
22
+ */
23
+ interface Requests_Proxy {
24
+ /**
25
+ * Register hooks as needed
26
+ *
27
+ * This method is called in {@see Requests::request} when the user has set
28
+ * an instance as the 'auth' option. Use this callback to register all the
29
+ * hooks you'll need.
30
+ *
31
+ * @see Requests_Hooks::register
32
+ * @param Requests_Hooks $hooks Hook system
33
+ */
34
+ public function register(Requests_Hooks $hooks);
35
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Proxy/HTTP.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * HTTP Proxy connection interface
4
+ *
5
+ * @package Requests
6
+ * @subpackage Proxy
7
+ * @since 1.6
8
+ */
9
+
10
+ /**
11
+ * HTTP Proxy connection interface
12
+ *
13
+ * Provides a handler for connection via an HTTP proxy
14
+ *
15
+ * @package Requests
16
+ * @subpackage Proxy
17
+ * @since 1.6
18
+ */
19
+ class Requests_Proxy_HTTP implements Requests_Proxy {
20
+ /**
21
+ * Proxy host and port
22
+ *
23
+ * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
24
+ *
25
+ * @var string
26
+ */
27
+ public $proxy;
28
+
29
+ /**
30
+ * Username
31
+ *
32
+ * @var string
33
+ */
34
+ public $user;
35
+
36
+ /**
37
+ * Password
38
+ *
39
+ * @var string
40
+ */
41
+ public $pass;
42
+
43
+ /**
44
+ * Do we need to authenticate? (ie username & password have been provided)
45
+ *
46
+ * @var boolean
47
+ */
48
+ public $use_authentication;
49
+
50
+ /**
51
+ * Constructor
52
+ *
53
+ * @since 1.6
54
+ * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
55
+ * @param array|null $args Array of user and password. Must have exactly two elements
56
+ */
57
+ public function __construct($args = null) {
58
+ if (is_string($args)) {
59
+ $this->proxy = $args;
60
+ }
61
+ elseif (is_array($args)) {
62
+ if (count($args) === 1) {
63
+ list($this->proxy) = $args;
64
+ }
65
+ elseif (count($args) === 3) {
66
+ list($this->proxy, $this->user, $this->pass) = $args;
67
+ $this->use_authentication = true;
68
+ }
69
+ else {
70
+ throw new Requests_Exception('Invalid number of arguments', 'proxyhttpbadargs');
71
+ }
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Register the necessary callbacks
77
+ *
78
+ * @since 1.6
79
+ * @see curl_before_send
80
+ * @see fsockopen_remote_socket
81
+ * @see fsockopen_remote_host_path
82
+ * @see fsockopen_header
83
+ * @param Requests_Hooks $hooks Hook system
84
+ */
85
+ public function register(Requests_Hooks $hooks) {
86
+ $hooks->register('curl.before_send', array($this, 'curl_before_send'));
87
+
88
+ $hooks->register('fsockopen.remote_socket', array($this, 'fsockopen_remote_socket'));
89
+ $hooks->register('fsockopen.remote_host_path', array($this, 'fsockopen_remote_host_path'));
90
+ if ($this->use_authentication) {
91
+ $hooks->register('fsockopen.after_headers', array($this, 'fsockopen_header'));
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Set cURL parameters before the data is sent
97
+ *
98
+ * @since 1.6
99
+ * @param resource $handle cURL resource
100
+ */
101
+ public function curl_before_send(&$handle) {
102
+ curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
103
+ curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
104
+
105
+ if ($this->use_authentication) {
106
+ curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
107
+ curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Alter remote socket information before opening socket connection
113
+ *
114
+ * @since 1.6
115
+ * @param string $remote_socket Socket connection string
116
+ */
117
+ public function fsockopen_remote_socket(&$remote_socket) {
118
+ $remote_socket = $this->proxy;
119
+ }
120
+
121
+ /**
122
+ * Alter remote path before getting stream data
123
+ *
124
+ * @since 1.6
125
+ * @param string $path Path to send in HTTP request string ("GET ...")
126
+ * @param string $url Full URL we're requesting
127
+ */
128
+ public function fsockopen_remote_host_path(&$path, $url) {
129
+ $path = $url;
130
+ }
131
+
132
+ /**
133
+ * Add extra headers to the request before sending
134
+ *
135
+ * @since 1.6
136
+ * @param string $out HTTP header string
137
+ */
138
+ public function fsockopen_header(&$out) {
139
+ $out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
140
+ }
141
+
142
+ /**
143
+ * Get the authentication string (user:pass)
144
+ *
145
+ * @since 1.6
146
+ * @return string
147
+ */
148
+ public function get_auth_string() {
149
+ return $this->user . ':' . $this->pass;
150
+ }
151
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Response.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * HTTP response class
4
+ *
5
+ * Contains a response from Requests::request()
6
+ * @package Requests
7
+ */
8
+
9
+ /**
10
+ * HTTP response class
11
+ *
12
+ * Contains a response from Requests::request()
13
+ * @package Requests
14
+ */
15
+ class Requests_Response {
16
+ /**
17
+ * Constructor
18
+ */
19
+ public function __construct() {
20
+ $this->headers = new Requests_Response_Headers();
21
+ $this->cookies = new Requests_Cookie_Jar();
22
+ }
23
+
24
+ /**
25
+ * Response body
26
+ *
27
+ * @var string
28
+ */
29
+ public $body = '';
30
+
31
+ /**
32
+ * Raw HTTP data from the transport
33
+ *
34
+ * @var string
35
+ */
36
+ public $raw = '';
37
+
38
+ /**
39
+ * Headers, as an associative array
40
+ *
41
+ * @var Requests_Response_Headers Array-like object representing headers
42
+ */
43
+ public $headers = array();
44
+
45
+ /**
46
+ * Status code, false if non-blocking
47
+ *
48
+ * @var integer|boolean
49
+ */
50
+ public $status_code = false;
51
+
52
+ /**
53
+ * Protocol version, false if non-blocking
54
+ *
55
+ * @var float|boolean
56
+ */
57
+ public $protocol_version = false;
58
+
59
+ /**
60
+ * Whether the request succeeded or not
61
+ *
62
+ * @var boolean
63
+ */
64
+ public $success = false;
65
+
66
+ /**
67
+ * Number of redirects the request used
68
+ *
69
+ * @var integer
70
+ */
71
+ public $redirects = 0;
72
+
73
+ /**
74
+ * URL requested
75
+ *
76
+ * @var string
77
+ */
78
+ public $url = '';
79
+
80
+ /**
81
+ * Previous requests (from redirects)
82
+ *
83
+ * @var array Array of Requests_Response objects
84
+ */
85
+ public $history = array();
86
+
87
+ /**
88
+ * Cookies from the request
89
+ *
90
+ * @var Requests_Cookie_Jar Array-like object representing a cookie jar
91
+ */
92
+ public $cookies = array();
93
+
94
+ /**
95
+ * Is the response a redirect?
96
+ *
97
+ * @return boolean True if redirect (3xx status), false if not.
98
+ */
99
+ public function is_redirect() {
100
+ $code = $this->status_code;
101
+ return in_array($code, array(300, 301, 302, 303, 307), true) || $code > 307 && $code < 400;
102
+ }
103
+
104
+ /**
105
+ * Throws an exception if the request was not successful
106
+ *
107
+ * @throws Requests_Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
108
+ * @throws Requests_Exception_HTTP On non-successful status code. Exception class corresponds to code (e.g. {@see Requests_Exception_HTTP_404})
109
+ * @param boolean $allow_redirects Set to false to throw on a 3xx as well
110
+ */
111
+ public function throw_for_status($allow_redirects = true) {
112
+ if ($this->is_redirect()) {
113
+ if (!$allow_redirects) {
114
+ throw new Requests_Exception('Redirection not allowed', 'response.no_redirects', $this);
115
+ }
116
+ }
117
+ elseif (!$this->success) {
118
+ $exception = Requests_Exception_HTTP::get_class($this->status_code);
119
+ throw new $exception(null, $this);
120
+ }
121
+ }
122
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Response/Headers.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Case-insensitive dictionary, suitable for HTTP headers
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ /**
9
+ * Case-insensitive dictionary, suitable for HTTP headers
10
+ *
11
+ * @package Requests
12
+ */
13
+ class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictionary {
14
+ /**
15
+ * Get the given header
16
+ *
17
+ * Unlike {@see self::getValues()}, this returns a string. If there are
18
+ * multiple values, it concatenates them with a comma as per RFC2616.
19
+ *
20
+ * Avoid using this where commas may be used unquoted in values, such as
21
+ * Set-Cookie headers.
22
+ *
23
+ * @param string $key
24
+ * @return string|null Header value
25
+ */
26
+ public function offsetGet($key) {
27
+ $key = strtolower($key);
28
+ if (!isset($this->data[$key])) {
29
+ return null;
30
+ }
31
+
32
+ return $this->flatten($this->data[$key]);
33
+ }
34
+
35
+ /**
36
+ * Set the given item
37
+ *
38
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
39
+ *
40
+ * @param string $key Item name
41
+ * @param string $value Item value
42
+ */
43
+ public function offsetSet($key, $value) {
44
+ if ($key === null) {
45
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
46
+ }
47
+
48
+ $key = strtolower($key);
49
+
50
+ if (!isset($this->data[$key])) {
51
+ $this->data[$key] = array();
52
+ }
53
+
54
+ $this->data[$key][] = $value;
55
+ }
56
+
57
+ /**
58
+ * Get all values for a given header
59
+ *
60
+ * @param string $key
61
+ * @return array|null Header values
62
+ */
63
+ public function getValues($key) {
64
+ $key = strtolower($key);
65
+ if (!isset($this->data[$key])) {
66
+ return null;
67
+ }
68
+
69
+ return $this->data[$key];
70
+ }
71
+
72
+ /**
73
+ * Flattens a value into a string
74
+ *
75
+ * Converts an array into a string by imploding values with a comma, as per
76
+ * RFC2616's rules for folding headers.
77
+ *
78
+ * @param string|array $value Value to flatten
79
+ * @return string Flattened value
80
+ */
81
+ public function flatten($value) {
82
+ if (is_array($value)) {
83
+ $value = implode(',', $value);
84
+ }
85
+
86
+ return $value;
87
+ }
88
+
89
+ /**
90
+ * Get an iterator for the data
91
+ *
92
+ * Converts the internal
93
+ * @return ArrayIterator
94
+ */
95
+ public function getIterator() {
96
+ return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
97
+ }
98
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/SSL.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * SSL utilities for Requests
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * SSL utilities for Requests
11
+ *
12
+ * Collection of utilities for working with and verifying SSL certificates.
13
+ *
14
+ * @package Requests
15
+ * @subpackage Utilities
16
+ */
17
+ class Requests_SSL {
18
+ /**
19
+ * Verify the certificate against common name and subject alternative names
20
+ *
21
+ * Unfortunately, PHP doesn't check the certificate against the alternative
22
+ * names, leading things like 'https://www.github.com/' to be invalid.
23
+ *
24
+ * @see https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
25
+ *
26
+ * @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
27
+ * @param string $host Host name to verify against
28
+ * @param array $cert Certificate data from openssl_x509_parse()
29
+ * @return bool
30
+ */
31
+ public static function verify_certificate($host, $cert) {
32
+ $has_dns_alt = false;
33
+
34
+ // Check the subjectAltName
35
+ if (!empty($cert['extensions']) && !empty($cert['extensions']['subjectAltName'])) {
36
+ $altnames = explode(',', $cert['extensions']['subjectAltName']);
37
+ foreach ($altnames as $altname) {
38
+ $altname = trim($altname);
39
+ if (strpos($altname, 'DNS:') !== 0) {
40
+ continue;
41
+ }
42
+
43
+ $has_dns_alt = true;
44
+
45
+ // Strip the 'DNS:' prefix and trim whitespace
46
+ $altname = trim(substr($altname, 4));
47
+
48
+ // Check for a match
49
+ if (self::match_domain($host, $altname) === true) {
50
+ return true;
51
+ }
52
+ }
53
+ }
54
+
55
+ // Fall back to checking the common name if we didn't get any dNSName
56
+ // alt names, as per RFC2818
57
+ if (!$has_dns_alt && !empty($cert['subject']['CN'])) {
58
+ // Check for a match
59
+ if (self::match_domain($host, $cert['subject']['CN']) === true) {
60
+ return true;
61
+ }
62
+ }
63
+
64
+ return false;
65
+ }
66
+
67
+ /**
68
+ * Verify that a reference name is valid
69
+ *
70
+ * Verifies a dNSName for HTTPS usage, (almost) as per Firefox's rules:
71
+ * - Wildcards can only occur in a name with more than 3 components
72
+ * - Wildcards can only occur as the last character in the first
73
+ * component
74
+ * - Wildcards may be preceded by additional characters
75
+ *
76
+ * We modify these rules to be a bit stricter and only allow the wildcard
77
+ * character to be the full first component; that is, with the exclusion of
78
+ * the third rule.
79
+ *
80
+ * @param string $reference Reference dNSName
81
+ * @return boolean Is the name valid?
82
+ */
83
+ public static function verify_reference_name($reference) {
84
+ $parts = explode('.', $reference);
85
+
86
+ // Check the first part of the name
87
+ $first = array_shift($parts);
88
+
89
+ if (strpos($first, '*') !== false) {
90
+ // Check that the wildcard is the full part
91
+ if ($first !== '*') {
92
+ return false;
93
+ }
94
+
95
+ // Check that we have at least 3 components (including first)
96
+ if (count($parts) < 2) {
97
+ return false;
98
+ }
99
+ }
100
+
101
+ // Check the remaining parts
102
+ foreach ($parts as $part) {
103
+ if (strpos($part, '*') !== false) {
104
+ return false;
105
+ }
106
+ }
107
+
108
+ // Nothing found, verified!
109
+ return true;
110
+ }
111
+
112
+ /**
113
+ * Match a hostname against a dNSName reference
114
+ *
115
+ * @param string $host Requested host
116
+ * @param string $reference dNSName to match against
117
+ * @return boolean Does the domain match?
118
+ */
119
+ public static function match_domain($host, $reference) {
120
+ // Check if the reference is blocklisted first
121
+ if (self::verify_reference_name($reference) !== true) {
122
+ return false;
123
+ }
124
+
125
+ // Check for a direct match
126
+ if ($host === $reference) {
127
+ return true;
128
+ }
129
+
130
+ // Calculate the valid wildcard match if the host is not an IP address
131
+ // Also validates that the host has 3 parts or more, as per Firefox's
132
+ // ruleset.
133
+ if (ip2long($host) === false) {
134
+ $parts = explode('.', $host);
135
+ $parts[0] = '*';
136
+ $wildcard = implode('.', $parts);
137
+ if ($wildcard === $reference) {
138
+ return true;
139
+ }
140
+ }
141
+
142
+ return false;
143
+ }
144
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Session.php ADDED
@@ -0,0 +1,268 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Session handler for persistent requests and default parameters
4
+ *
5
+ * @package Requests
6
+ * @subpackage Session Handler
7
+ */
8
+
9
+ /**
10
+ * Session handler for persistent requests and default parameters
11
+ *
12
+ * Allows various options to be set as default values, and merges both the
13
+ * options and URL properties together. A base URL can be set for all requests,
14
+ * with all subrequests resolved from this. Base options can be set (including
15
+ * a shared cookie jar), then overridden for individual requests.
16
+ *
17
+ * @package Requests
18
+ * @subpackage Session Handler
19
+ */
20
+ class Requests_Session {
21
+ /**
22
+ * Base URL for requests
23
+ *
24
+ * URLs will be made absolute using this as the base
25
+ *
26
+ * @var string|null
27
+ */
28
+ public $url = null;
29
+
30
+ /**
31
+ * Base headers for requests
32
+ *
33
+ * @var array
34
+ */
35
+ public $headers = array();
36
+
37
+ /**
38
+ * Base data for requests
39
+ *
40
+ * If both the base data and the per-request data are arrays, the data will
41
+ * be merged before sending the request.
42
+ *
43
+ * @var array
44
+ */
45
+ public $data = array();
46
+
47
+ /**
48
+ * Base options for requests
49
+ *
50
+ * The base options are merged with the per-request data for each request.
51
+ * The only default option is a shared cookie jar between requests.
52
+ *
53
+ * Values here can also be set directly via properties on the Session
54
+ * object, e.g. `$session->useragent = 'X';`
55
+ *
56
+ * @var array
57
+ */
58
+ public $options = array();
59
+
60
+ /**
61
+ * Create a new session
62
+ *
63
+ * @param string|null $url Base URL for requests
64
+ * @param array $headers Default headers for requests
65
+ * @param array $data Default data for requests
66
+ * @param array $options Default options for requests
67
+ */
68
+ public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
69
+ $this->url = $url;
70
+ $this->headers = $headers;
71
+ $this->data = $data;
72
+ $this->options = $options;
73
+
74
+ if (empty($this->options['cookies'])) {
75
+ $this->options['cookies'] = new Requests_Cookie_Jar();
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Get a property's value
81
+ *
82
+ * @param string $key Property key
83
+ * @return mixed|null Property value, null if none found
84
+ */
85
+ public function __get($key) {
86
+ if (isset($this->options[$key])) {
87
+ return $this->options[$key];
88
+ }
89
+
90
+ return null;
91
+ }
92
+
93
+ /**
94
+ * Set a property's value
95
+ *
96
+ * @param string $key Property key
97
+ * @param mixed $value Property value
98
+ */
99
+ public function __set($key, $value) {
100
+ $this->options[$key] = $value;
101
+ }
102
+
103
+ /**
104
+ * Remove a property's value
105
+ *
106
+ * @param string $key Property key
107
+ */
108
+ public function __isset($key) {
109
+ return isset($this->options[$key]);
110
+ }
111
+
112
+ /**
113
+ * Remove a property's value
114
+ *
115
+ * @param string $key Property key
116
+ */
117
+ public function __unset($key) {
118
+ if (isset($this->options[$key])) {
119
+ unset($this->options[$key]);
120
+ }
121
+ }
122
+
123
+ /**#@+
124
+ * @see request()
125
+ * @param string $url
126
+ * @param array $headers
127
+ * @param array $options
128
+ * @return Requests_Response
129
+ */
130
+ /**
131
+ * Send a GET request
132
+ */
133
+ public function get($url, $headers = array(), $options = array()) {
134
+ return $this->request($url, $headers, null, Requests::GET, $options);
135
+ }
136
+
137
+ /**
138
+ * Send a HEAD request
139
+ */
140
+ public function head($url, $headers = array(), $options = array()) {
141
+ return $this->request($url, $headers, null, Requests::HEAD, $options);
142
+ }
143
+
144
+ /**
145
+ * Send a DELETE request
146
+ */
147
+ public function delete($url, $headers = array(), $options = array()) {
148
+ return $this->request($url, $headers, null, Requests::DELETE, $options);
149
+ }
150
+ /**#@-*/
151
+
152
+ /**#@+
153
+ * @see request()
154
+ * @param string $url
155
+ * @param array $headers
156
+ * @param array $data
157
+ * @param array $options
158
+ * @return Requests_Response
159
+ */
160
+ /**
161
+ * Send a POST request
162
+ */
163
+ public function post($url, $headers = array(), $data = array(), $options = array()) {
164
+ return $this->request($url, $headers, $data, Requests::POST, $options);
165
+ }
166
+
167
+ /**
168
+ * Send a PUT request
169
+ */
170
+ public function put($url, $headers = array(), $data = array(), $options = array()) {
171
+ return $this->request($url, $headers, $data, Requests::PUT, $options);
172
+ }
173
+
174
+ /**
175
+ * Send a PATCH request
176
+ *
177
+ * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
178
+ * specification recommends that should send an ETag
179
+ *
180
+ * @link https://tools.ietf.org/html/rfc5789
181
+ */
182
+ public function patch($url, $headers, $data = array(), $options = array()) {
183
+ return $this->request($url, $headers, $data, Requests::PATCH, $options);
184
+ }
185
+ /**#@-*/
186
+
187
+ /**
188
+ * Main interface for HTTP requests
189
+ *
190
+ * This method initiates a request and sends it via a transport before
191
+ * parsing.
192
+ *
193
+ * @see Requests::request()
194
+ *
195
+ * @throws Requests_Exception On invalid URLs (`nonhttp`)
196
+ *
197
+ * @param string $url URL to request
198
+ * @param array $headers Extra headers to send with the request
199
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
200
+ * @param string $type HTTP request type (use Requests constants)
201
+ * @param array $options Options for the request (see {@see Requests::request})
202
+ * @return Requests_Response
203
+ */
204
+ public function request($url, $headers = array(), $data = array(), $type = Requests::GET, $options = array()) {
205
+ $request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
206
+
207
+ return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
208
+ }
209
+
210
+ /**
211
+ * Send multiple HTTP requests simultaneously
212
+ *
213
+ * @see Requests::request_multiple()
214
+ *
215
+ * @param array $requests Requests data (see {@see Requests::request_multiple})
216
+ * @param array $options Global and default options (see {@see Requests::request})
217
+ * @return array Responses (either Requests_Response or a Requests_Exception object)
218
+ */
219
+ public function request_multiple($requests, $options = array()) {
220
+ foreach ($requests as $key => $request) {
221
+ $requests[$key] = $this->merge_request($request, false);
222
+ }
223
+
224
+ $options = array_merge($this->options, $options);
225
+
226
+ // Disallow forcing the type, as that's a per request setting
227
+ unset($options['type']);
228
+
229
+ return Requests::request_multiple($requests, $options);
230
+ }
231
+
232
+ /**
233
+ * Merge a request's data with the default data
234
+ *
235
+ * @param array $request Request data (same form as {@see request_multiple})
236
+ * @param boolean $merge_options Should we merge options as well?
237
+ * @return array Request data
238
+ */
239
+ protected function merge_request($request, $merge_options = true) {
240
+ if ($this->url !== null) {
241
+ $request['url'] = Requests_IRI::absolutize($this->url, $request['url']);
242
+ $request['url'] = $request['url']->uri;
243
+ }
244
+
245
+ if (empty($request['headers'])) {
246
+ $request['headers'] = array();
247
+ }
248
+ $request['headers'] = array_merge($this->headers, $request['headers']);
249
+
250
+ if (empty($request['data'])) {
251
+ if (is_array($this->data)) {
252
+ $request['data'] = $this->data;
253
+ }
254
+ }
255
+ elseif (is_array($request['data']) && is_array($this->data)) {
256
+ $request['data'] = array_merge($this->data, $request['data']);
257
+ }
258
+
259
+ if ($merge_options !== false) {
260
+ $request['options'] = array_merge($this->options, $request['options']);
261
+
262
+ // Disallow forcing the type, as that's a per request setting
263
+ unset($request['options']['type']);
264
+ }
265
+
266
+ return $request;
267
+ }
268
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Base HTTP transport
4
+ *
5
+ * @package Requests
6
+ * @subpackage Transport
7
+ */
8
+
9
+ /**
10
+ * Base HTTP transport
11
+ *
12
+ * @package Requests
13
+ * @subpackage Transport
14
+ */
15
+ interface Requests_Transport {
16
+ /**
17
+ * Perform a request
18
+ *
19
+ * @param string $url URL to request
20
+ * @param array $headers Associative array of request headers
21
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
22
+ * @param array $options Request options, see {@see Requests::response()} for documentation
23
+ * @return string Raw HTTP result
24
+ */
25
+ public function request($url, $headers = array(), $data = array(), $options = array());
26
+
27
+ /**
28
+ * Send multiple requests simultaneously
29
+ *
30
+ * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
31
+ * @param array $options Global options, see {@see Requests::response()} for documentation
32
+ * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
33
+ */
34
+ public function request_multiple($requests, $options);
35
+
36
+ /**
37
+ * Self-test whether the transport can be used
38
+ * @return bool
39
+ */
40
+ public static function test();
41
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/cURL.php ADDED
@@ -0,0 +1,589 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * cURL HTTP transport
4
+ *
5
+ * @package Requests
6
+ * @subpackage Transport
7
+ */
8
+
9
+ /**
10
+ * cURL HTTP transport
11
+ *
12
+ * @package Requests
13
+ * @subpackage Transport
14
+ */
15
+ class Requests_Transport_cURL implements Requests_Transport {
16
+ const CURL_7_10_5 = 0x070A05;
17
+ const CURL_7_16_2 = 0x071002;
18
+
19
+ /**
20
+ * Raw HTTP data
21
+ *
22
+ * @var string
23
+ */
24
+ public $headers = '';
25
+
26
+ /**
27
+ * Raw body data
28
+ *
29
+ * @var string
30
+ */
31
+ public $response_data = '';
32
+
33
+ /**
34
+ * Information on the current request
35
+ *
36
+ * @var array cURL information array, see {@see https://secure.php.net/curl_getinfo}
37
+ */
38
+ public $info;
39
+
40
+ /**
41
+ * cURL version number
42
+ *
43
+ * @var int
44
+ */
45
+ public $version;
46
+
47
+ /**
48
+ * cURL handle
49
+ *
50
+ * @var resource
51
+ */
52
+ protected $handle;
53
+
54
+ /**
55
+ * Hook dispatcher instance
56
+ *
57
+ * @var Requests_Hooks
58
+ */
59
+ protected $hooks;
60
+
61
+ /**
62
+ * Have we finished the headers yet?
63
+ *
64
+ * @var boolean
65
+ */
66
+ protected $done_headers = false;
67
+
68
+ /**
69
+ * If streaming to a file, keep the file pointer
70
+ *
71
+ * @var resource
72
+ */
73
+ protected $stream_handle;
74
+
75
+ /**
76
+ * How many bytes are in the response body?
77
+ *
78
+ * @var int
79
+ */
80
+ protected $response_bytes;
81
+
82
+ /**
83
+ * What's the maximum number of bytes we should keep?
84
+ *
85
+ * @var int|bool Byte count, or false if no limit.
86
+ */
87
+ protected $response_byte_limit;
88
+
89
+ /**
90
+ * Constructor
91
+ */
92
+ public function __construct() {
93
+ $curl = curl_version();
94
+ $this->version = $curl['version_number'];
95
+ $this->handle = curl_init();
96
+
97
+ curl_setopt($this->handle, CURLOPT_HEADER, false);
98
+ curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
99
+ if ($this->version >= self::CURL_7_10_5) {
100
+ curl_setopt($this->handle, CURLOPT_ENCODING, '');
101
+ }
102
+ if (defined('CURLOPT_PROTOCOLS')) {
103
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_protocolsFound
104
+ curl_setopt($this->handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
105
+ }
106
+ if (defined('CURLOPT_REDIR_PROTOCOLS')) {
107
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_redir_protocolsFound
108
+ curl_setopt($this->handle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Destructor
114
+ */
115
+ public function __destruct() {
116
+ if (is_resource($this->handle)) {
117
+ curl_close($this->handle);
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Perform a request
123
+ *
124
+ * @throws Requests_Exception On a cURL error (`curlerror`)
125
+ *
126
+ * @param string $url URL to request
127
+ * @param array $headers Associative array of request headers
128
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
129
+ * @param array $options Request options, see {@see Requests::response()} for documentation
130
+ * @return string Raw HTTP result
131
+ */
132
+ public function request($url, $headers = array(), $data = array(), $options = array()) {
133
+ $this->hooks = $options['hooks'];
134
+
135
+ $this->setup_handle($url, $headers, $data, $options);
136
+
137
+ $options['hooks']->dispatch('curl.before_send', array(&$this->handle));
138
+
139
+ if ($options['filename'] !== false) {
140
+ $this->stream_handle = fopen($options['filename'], 'wb');
141
+ }
142
+
143
+ $this->response_data = '';
144
+ $this->response_bytes = 0;
145
+ $this->response_byte_limit = false;
146
+ if ($options['max_bytes'] !== false) {
147
+ $this->response_byte_limit = $options['max_bytes'];
148
+ }
149
+
150
+ if (isset($options['verify'])) {
151
+ if ($options['verify'] === false) {
152
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
153
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYPEER, 0);
154
+ }
155
+ elseif (is_string($options['verify'])) {
156
+ curl_setopt($this->handle, CURLOPT_CAINFO, $options['verify']);
157
+ }
158
+ }
159
+
160
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
161
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
162
+ }
163
+
164
+ curl_exec($this->handle);
165
+ $response = $this->response_data;
166
+
167
+ $options['hooks']->dispatch('curl.after_send', array());
168
+
169
+ if (curl_errno($this->handle) === 23 || curl_errno($this->handle) === 61) {
170
+ // Reset encoding and try again
171
+ curl_setopt($this->handle, CURLOPT_ENCODING, 'none');
172
+
173
+ $this->response_data = '';
174
+ $this->response_bytes = 0;
175
+ curl_exec($this->handle);
176
+ $response = $this->response_data;
177
+ }
178
+
179
+ $this->process_response($response, $options);
180
+
181
+ // Need to remove the $this reference from the curl handle.
182
+ // Otherwise Requests_Transport_cURL wont be garbage collected and the curl_close() will never be called.
183
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, null);
184
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, null);
185
+
186
+ return $this->headers;
187
+ }
188
+
189
+ /**
190
+ * Send multiple requests simultaneously
191
+ *
192
+ * @param array $requests Request data
193
+ * @param array $options Global options
194
+ * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
195
+ */
196
+ public function request_multiple($requests, $options) {
197
+ // If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
198
+ if (empty($requests)) {
199
+ return array();
200
+ }
201
+
202
+ $multihandle = curl_multi_init();
203
+ $subrequests = array();
204
+ $subhandles = array();
205
+
206
+ $class = get_class($this);
207
+ foreach ($requests as $id => $request) {
208
+ $subrequests[$id] = new $class();
209
+ $subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
210
+ $request['options']['hooks']->dispatch('curl.before_multi_add', array(&$subhandles[$id]));
211
+ curl_multi_add_handle($multihandle, $subhandles[$id]);
212
+ }
213
+
214
+ $completed = 0;
215
+ $responses = array();
216
+ $subrequestcount = count($subrequests);
217
+
218
+ $request['options']['hooks']->dispatch('curl.before_multi_exec', array(&$multihandle));
219
+
220
+ do {
221
+ $active = 0;
222
+
223
+ do {
224
+ $status = curl_multi_exec($multihandle, $active);
225
+ }
226
+ while ($status === CURLM_CALL_MULTI_PERFORM);
227
+
228
+ $to_process = array();
229
+
230
+ // Read the information as needed
231
+ while ($done = curl_multi_info_read($multihandle)) {
232
+ $key = array_search($done['handle'], $subhandles, true);
233
+ if (!isset($to_process[$key])) {
234
+ $to_process[$key] = $done;
235
+ }
236
+ }
237
+
238
+ // Parse the finished requests before we start getting the new ones
239
+ foreach ($to_process as $key => $done) {
240
+ $options = $requests[$key]['options'];
241
+ if ($done['result'] !== CURLE_OK) {
242
+ //get error string for handle.
243
+ $reason = curl_error($done['handle']);
244
+ $exception = new Requests_Exception_Transport_cURL(
245
+ $reason,
246
+ Requests_Exception_Transport_cURL::EASY,
247
+ $done['handle'],
248
+ $done['result']
249
+ );
250
+ $responses[$key] = $exception;
251
+ $options['hooks']->dispatch('transport.internal.parse_error', array(&$responses[$key], $requests[$key]));
252
+ }
253
+ else {
254
+ $responses[$key] = $subrequests[$key]->process_response($subrequests[$key]->response_data, $options);
255
+
256
+ $options['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$key], $requests[$key]));
257
+ }
258
+
259
+ curl_multi_remove_handle($multihandle, $done['handle']);
260
+ curl_close($done['handle']);
261
+
262
+ if (!is_string($responses[$key])) {
263
+ $options['hooks']->dispatch('multiple.request.complete', array(&$responses[$key], $key));
264
+ }
265
+ $completed++;
266
+ }
267
+ }
268
+ while ($active || $completed < $subrequestcount);
269
+
270
+ $request['options']['hooks']->dispatch('curl.after_multi_exec', array(&$multihandle));
271
+
272
+ curl_multi_close($multihandle);
273
+
274
+ return $responses;
275
+ }
276
+
277
+ /**
278
+ * Get the cURL handle for use in a multi-request
279
+ *
280
+ * @param string $url URL to request
281
+ * @param array $headers Associative array of request headers
282
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
283
+ * @param array $options Request options, see {@see Requests::response()} for documentation
284
+ * @return resource Subrequest's cURL handle
285
+ */
286
+ public function &get_subrequest_handle($url, $headers, $data, $options) {
287
+ $this->setup_handle($url, $headers, $data, $options);
288
+
289
+ if ($options['filename'] !== false) {
290
+ $this->stream_handle = fopen($options['filename'], 'wb');
291
+ }
292
+
293
+ $this->response_data = '';
294
+ $this->response_bytes = 0;
295
+ $this->response_byte_limit = false;
296
+ if ($options['max_bytes'] !== false) {
297
+ $this->response_byte_limit = $options['max_bytes'];
298
+ }
299
+ $this->hooks = $options['hooks'];
300
+
301
+ return $this->handle;
302
+ }
303
+
304
+ /**
305
+ * Setup the cURL handle for the given data
306
+ *
307
+ * @param string $url URL to request
308
+ * @param array $headers Associative array of request headers
309
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
310
+ * @param array $options Request options, see {@see Requests::response()} for documentation
311
+ */
312
+ protected function setup_handle($url, $headers, $data, $options) {
313
+ $options['hooks']->dispatch('curl.before_request', array(&$this->handle));
314
+
315
+ // Force closing the connection for old versions of cURL (<7.22).
316
+ if (!isset($headers['Connection'])) {
317
+ $headers['Connection'] = 'close';
318
+ }
319
+
320
+ /**
321
+ * Add "Expect" header.
322
+ *
323
+ * By default, cURL adds a "Expect: 100-Continue" to most requests. This header can
324
+ * add as much as a second to the time it takes for cURL to perform a request. To
325
+ * prevent this, we need to set an empty "Expect" header. To match the behaviour of
326
+ * Guzzle, we'll add the empty header to requests that are smaller than 1 MB and use
327
+ * HTTP/1.1.
328
+ *
329
+ * https://curl.se/mail/lib-2017-07/0013.html
330
+ */
331
+ if (!isset($headers['Expect']) && $options['protocol_version'] === 1.1) {
332
+ $headers['Expect'] = $this->get_expect_header($data);
333
+ }
334
+
335
+ $headers = Requests::flatten($headers);
336
+
337
+ if (!empty($data)) {
338
+ $data_format = $options['data_format'];
339
+
340
+ if ($data_format === 'query') {
341
+ $url = self::format_get($url, $data);
342
+ $data = '';
343
+ }
344
+ elseif (!is_string($data)) {
345
+ $data = http_build_query($data, null, '&');
346
+ }
347
+ }
348
+
349
+ switch ($options['type']) {
350
+ case Requests::POST:
351
+ curl_setopt($this->handle, CURLOPT_POST, true);
352
+ curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
353
+ break;
354
+ case Requests::HEAD:
355
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
356
+ curl_setopt($this->handle, CURLOPT_NOBODY, true);
357
+ break;
358
+ case Requests::TRACE:
359
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
360
+ break;
361
+ case Requests::PATCH:
362
+ case Requests::PUT:
363
+ case Requests::DELETE:
364
+ case Requests::OPTIONS:
365
+ default:
366
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
367
+ if (!empty($data)) {
368
+ curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
369
+ }
370
+ }
371
+
372
+ // cURL requires a minimum timeout of 1 second when using the system
373
+ // DNS resolver, as it uses `alarm()`, which is second resolution only.
374
+ // There's no way to detect which DNS resolver is being used from our
375
+ // end, so we need to round up regardless of the supplied timeout.
376
+ //
377
+ // https://github.com/curl/curl/blob/4f45240bc84a9aa648c8f7243be7b79e9f9323a5/lib/hostip.c#L606-L609
378
+ $timeout = max($options['timeout'], 1);
379
+
380
+ if (is_int($timeout) || $this->version < self::CURL_7_16_2) {
381
+ curl_setopt($this->handle, CURLOPT_TIMEOUT, ceil($timeout));
382
+ }
383
+ else {
384
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_timeout_msFound
385
+ curl_setopt($this->handle, CURLOPT_TIMEOUT_MS, round($timeout * 1000));
386
+ }
387
+
388
+ if (is_int($options['connect_timeout']) || $this->version < self::CURL_7_16_2) {
389
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
390
+ }
391
+ else {
392
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_connecttimeout_msFound
393
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
394
+ }
395
+ curl_setopt($this->handle, CURLOPT_URL, $url);
396
+ curl_setopt($this->handle, CURLOPT_REFERER, $url);
397
+ curl_setopt($this->handle, CURLOPT_USERAGENT, $options['useragent']);
398
+ if (!empty($headers)) {
399
+ curl_setopt($this->handle, CURLOPT_HTTPHEADER, $headers);
400
+ }
401
+ if ($options['protocol_version'] === 1.1) {
402
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
403
+ }
404
+ else {
405
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
406
+ }
407
+
408
+ if ($options['blocking'] === true) {
409
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, array($this, 'stream_headers'));
410
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, array($this, 'stream_body'));
411
+ curl_setopt($this->handle, CURLOPT_BUFFERSIZE, Requests::BUFFER_SIZE);
412
+ }
413
+ }
414
+
415
+ /**
416
+ * Process a response
417
+ *
418
+ * @param string $response Response data from the body
419
+ * @param array $options Request options
420
+ * @return string|false HTTP response data including headers. False if non-blocking.
421
+ * @throws Requests_Exception
422
+ */
423
+ public function process_response($response, $options) {
424
+ if ($options['blocking'] === false) {
425
+ $fake_headers = '';
426
+ $options['hooks']->dispatch('curl.after_request', array(&$fake_headers));
427
+ return false;
428
+ }
429
+ if ($options['filename'] !== false && $this->stream_handle) {
430
+ fclose($this->stream_handle);
431
+ $this->headers = trim($this->headers);
432
+ }
433
+ else {
434
+ $this->headers .= $response;
435
+ }
436
+
437
+ if (curl_errno($this->handle)) {
438
+ $error = sprintf(
439
+ 'cURL error %s: %s',
440
+ curl_errno($this->handle),
441
+ curl_error($this->handle)
442
+ );
443
+ throw new Requests_Exception($error, 'curlerror', $this->handle);
444
+ }
445
+ $this->info = curl_getinfo($this->handle);
446
+
447
+ $options['hooks']->dispatch('curl.after_request', array(&$this->headers, &$this->info));
448
+ return $this->headers;
449
+ }
450
+
451
+ /**
452
+ * Collect the headers as they are received
453
+ *
454
+ * @param resource $handle cURL resource
455
+ * @param string $headers Header string
456
+ * @return integer Length of provided header
457
+ */
458
+ public function stream_headers($handle, $headers) {
459
+ // Why do we do this? cURL will send both the final response and any
460
+ // interim responses, such as a 100 Continue. We don't need that.
461
+ // (We may want to keep this somewhere just in case)
462
+ if ($this->done_headers) {
463
+ $this->headers = '';
464
+ $this->done_headers = false;
465
+ }
466
+ $this->headers .= $headers;
467
+
468
+ if ($headers === "\r\n") {
469
+ $this->done_headers = true;
470
+ }
471
+ return strlen($headers);
472
+ }
473
+
474
+ /**
475
+ * Collect data as it's received
476
+ *
477
+ * @since 1.6.1
478
+ *
479
+ * @param resource $handle cURL resource
480
+ * @param string $data Body data
481
+ * @return integer Length of provided data
482
+ */
483
+ public function stream_body($handle, $data) {
484
+ $this->hooks->dispatch('request.progress', array($data, $this->response_bytes, $this->response_byte_limit));
485
+ $data_length = strlen($data);
486
+
487
+ // Are we limiting the response size?
488
+ if ($this->response_byte_limit) {
489
+ if ($this->response_bytes === $this->response_byte_limit) {
490
+ // Already at maximum, move on
491
+ return $data_length;
492
+ }
493
+
494
+ if (($this->response_bytes + $data_length) > $this->response_byte_limit) {
495
+ // Limit the length
496
+ $limited_length = ($this->response_byte_limit - $this->response_bytes);
497
+ $data = substr($data, 0, $limited_length);
498
+ }
499
+ }
500
+
501
+ if ($this->stream_handle) {
502
+ fwrite($this->stream_handle, $data);
503
+ }
504
+ else {
505
+ $this->response_data .= $data;
506
+ }
507
+
508
+ $this->response_bytes += strlen($data);
509
+ return $data_length;
510
+ }
511
+
512
+ /**
513
+ * Format a URL given GET data
514
+ *
515
+ * @param string $url
516
+ * @param array|object $data Data to build query using, see {@see https://secure.php.net/http_build_query}
517
+ * @return string URL with data
518
+ */
519
+ protected static function format_get($url, $data) {
520
+ if (!empty($data)) {
521
+ $query = '';
522
+ $url_parts = parse_url($url);
523
+ if (empty($url_parts['query'])) {
524
+ $url_parts['query'] = '';
525
+ }
526
+ else {
527
+ $query = $url_parts['query'];
528
+ }
529
+
530
+ $query .= '&' . http_build_query($data, null, '&');
531
+ $query = trim($query, '&');
532
+
533
+ if (empty($url_parts['query'])) {
534
+ $url .= '?' . $query;
535
+ }
536
+ else {
537
+ $url = str_replace($url_parts['query'], $query, $url);
538
+ }
539
+ }
540
+ return $url;
541
+ }
542
+
543
+ /**
544
+ * Whether this transport is valid
545
+ *
546
+ * @codeCoverageIgnore
547
+ * @return boolean True if the transport is valid, false otherwise.
548
+ */
549
+ public static function test($capabilities = array()) {
550
+ if (!function_exists('curl_init') || !function_exists('curl_exec')) {
551
+ return false;
552
+ }
553
+
554
+ // If needed, check that our installed curl version supports SSL
555
+ if (isset($capabilities['ssl']) && $capabilities['ssl']) {
556
+ $curl_version = curl_version();
557
+ if (!(CURL_VERSION_SSL & $curl_version['features'])) {
558
+ return false;
559
+ }
560
+ }
561
+
562
+ return true;
563
+ }
564
+
565
+ /**
566
+ * Get the correct "Expect" header for the given request data.
567
+ *
568
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD.
569
+ * @return string The "Expect" header.
570
+ */
571
+ protected function get_expect_header($data) {
572
+ if (!is_array($data)) {
573
+ return strlen((string) $data) >= 1048576 ? '100-Continue' : '';
574
+ }
575
+
576
+ $bytesize = 0;
577
+ $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
578
+
579
+ foreach ($iterator as $datum) {
580
+ $bytesize += strlen((string) $datum);
581
+
582
+ if ($bytesize >= 1048576) {
583
+ return '100-Continue';
584
+ }
585
+ }
586
+
587
+ return '';
588
+ }
589
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/cacert.pem ADDED
@@ -0,0 +1,3302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Tue Jan 19 04:12:04 2021 GMT
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+ ## Conversion done with mk-ca-bundle.pl version 1.28.
17
+ ## SHA256: 3bdc63d1de27058fec943a999a2a8a01fcc6806a611b19221a7727d3d9bbbdfd
18
+ ##
19
+
20
+
21
+ GlobalSign Root CA
22
+ ==================
23
+ -----BEGIN CERTIFICATE-----
24
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
25
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
26
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
27
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
28
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
29
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
30
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
31
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
32
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
33
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
34
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
35
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
36
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
37
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
38
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
39
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
40
+ -----END CERTIFICATE-----
41
+
42
+ GlobalSign Root CA - R2
43
+ =======================
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
46
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
47
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
48
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
49
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
50
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
51
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
52
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
53
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
54
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
55
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
56
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
57
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
58
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
59
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
60
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
61
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
62
+ -----END CERTIFICATE-----
63
+
64
+ Entrust.net Premium 2048 Secure Server CA
65
+ =========================================
66
+ -----BEGIN CERTIFICATE-----
67
+ MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
68
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
69
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
70
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
71
+ NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
72
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
73
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
74
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
75
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
76
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
77
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
78
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
79
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
80
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
81
+ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
82
+ T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
83
+ zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
84
+ J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
85
+ nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
86
+ -----END CERTIFICATE-----
87
+
88
+ Baltimore CyberTrust Root
89
+ =========================
90
+ -----BEGIN CERTIFICATE-----
91
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
92
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
93
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
94
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
95
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
96
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
97
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
98
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
99
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
100
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
101
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
102
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
103
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
104
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
105
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
106
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
107
+ -----END CERTIFICATE-----
108
+
109
+ Entrust Root Certification Authority
110
+ ====================================
111
+ -----BEGIN CERTIFICATE-----
112
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
113
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
114
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
115
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
116
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
117
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
118
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
119
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
120
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
121
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
122
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
123
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
124
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
125
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
126
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
127
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
128
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
129
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
130
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
131
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
132
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
+ -----END CERTIFICATE-----
134
+
135
+ Comodo AAA Services root
136
+ ========================
137
+ -----BEGIN CERTIFICATE-----
138
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
139
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
140
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
141
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
142
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
143
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
144
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
145
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
146
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
147
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
148
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
149
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
150
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
151
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
152
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
153
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
154
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
155
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
156
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
157
+ -----END CERTIFICATE-----
158
+
159
+ QuoVadis Root CA
160
+ ================
161
+ -----BEGIN CERTIFICATE-----
162
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
163
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
164
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
165
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
166
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
167
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
168
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
169
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
170
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
171
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
172
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
173
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
174
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
175
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
176
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
177
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
178
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
179
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
180
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
181
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
182
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
183
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
184
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
185
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
186
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
187
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
188
+ 5nrQNiOKSnQ2+Q==
189
+ -----END CERTIFICATE-----
190
+
191
+ QuoVadis Root CA 2
192
+ ==================
193
+ -----BEGIN CERTIFICATE-----
194
+ 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
220
+ -----END CERTIFICATE-----
221
+
222
+ QuoVadis Root CA 3
223
+ ==================
224
+ -----BEGIN CERTIFICATE-----
225
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
226
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
227
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
228
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
229
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
230
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
231
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
232
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
233
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
234
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
235
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
236
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
237
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
238
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
239
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
240
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
241
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
242
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
243
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
244
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
245
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
246
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
247
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
248
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
249
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
250
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
251
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
252
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
253
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
254
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
255
+ -----END CERTIFICATE-----
256
+
257
+ Security Communication Root CA
258
+ ==============================
259
+ -----BEGIN CERTIFICATE-----
260
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
261
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
262
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
263
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
264
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
265
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
266
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
267
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
268
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
269
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
270
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
271
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
272
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
273
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
274
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
275
+ FL39vmwLAw==
276
+ -----END CERTIFICATE-----
277
+
278
+ Sonera Class 2 Root CA
279
+ ======================
280
+ -----BEGIN CERTIFICATE-----
281
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
282
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
283
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
284
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
285
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
286
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
287
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
288
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
289
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
290
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
291
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
292
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
293
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
294
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
295
+ llpwrN9M
296
+ -----END CERTIFICATE-----
297
+
298
+ XRamp Global CA Root
299
+ ====================
300
+ -----BEGIN CERTIFICATE-----
301
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
302
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
303
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
304
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
305
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
306
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
307
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
308
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
309
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
310
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
311
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
312
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
313
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
314
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
315
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
316
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
317
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
318
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
319
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
320
+ -----END CERTIFICATE-----
321
+
322
+ Go Daddy Class 2 CA
323
+ ===================
324
+ -----BEGIN CERTIFICATE-----
325
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
326
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
327
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
328
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
329
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
330
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
331
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
332
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
333
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
334
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
335
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
336
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
337
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
338
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
339
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
340
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
341
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
342
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
343
+ vZ8=
344
+ -----END CERTIFICATE-----
345
+
346
+ Starfield Class 2 CA
347
+ ====================
348
+ -----BEGIN CERTIFICATE-----
349
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
350
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
351
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
352
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
353
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
354
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
355
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
356
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
357
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
358
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
359
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
360
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
361
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
362
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
363
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
364
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
365
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
366
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
367
+ QBFGmh95DmK/D5fs4C8fF5Q=
368
+ -----END CERTIFICATE-----
369
+
370
+ DigiCert Assured ID Root CA
371
+ ===========================
372
+ -----BEGIN CERTIFICATE-----
373
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
374
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
375
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
376
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
377
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
378
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
379
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
380
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
381
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
382
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
383
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
384
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
385
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
386
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
387
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
388
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
389
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
390
+ -----END CERTIFICATE-----
391
+
392
+ DigiCert Global Root CA
393
+ =======================
394
+ -----BEGIN CERTIFICATE-----
395
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
396
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
397
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
398
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
399
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
400
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
401
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
402
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
403
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
404
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
405
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
406
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
407
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
408
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
409
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
410
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
411
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
412
+ -----END CERTIFICATE-----
413
+
414
+ DigiCert High Assurance EV Root CA
415
+ ==================================
416
+ -----BEGIN CERTIFICATE-----
417
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
418
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
419
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
420
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
421
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
422
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
423
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
424
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
425
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
426
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
427
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
428
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
429
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
430
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
431
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
432
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
433
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
434
+ -----END CERTIFICATE-----
435
+
436
+ DST Root CA X3
437
+ ==============
438
+ -----BEGIN CERTIFICATE-----
439
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
440
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
441
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
442
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
443
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
444
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
445
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
446
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
447
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
448
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
449
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
450
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
451
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
452
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
453
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
454
+ -----END CERTIFICATE-----
455
+
456
+ SwissSign Gold CA - G2
457
+ ======================
458
+ -----BEGIN CERTIFICATE-----
459
+ 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
485
+ -----END CERTIFICATE-----
486
+
487
+ SwissSign Silver CA - G2
488
+ ========================
489
+ -----BEGIN CERTIFICATE-----
490
+ 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
516
+ -----END CERTIFICATE-----
517
+
518
+ SecureTrust CA
519
+ ==============
520
+ -----BEGIN CERTIFICATE-----
521
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
522
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
523
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
524
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
525
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
526
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
527
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
528
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
529
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
530
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
531
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
532
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
533
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
534
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
535
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
536
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
537
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
538
+ -----END CERTIFICATE-----
539
+
540
+ Secure Global CA
541
+ ================
542
+ -----BEGIN CERTIFICATE-----
543
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
544
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
545
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
546
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
547
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
548
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
549
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
550
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
551
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
552
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
553
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
554
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
555
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
556
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
557
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
558
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
559
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
560
+ -----END CERTIFICATE-----
561
+
562
+ COMODO Certification Authority
563
+ ==============================
564
+ -----BEGIN CERTIFICATE-----
565
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
566
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
567
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
568
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
569
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
570
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
571
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
572
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
573
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
574
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
575
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
576
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
577
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
578
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
579
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
580
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
581
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
582
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
583
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
584
+ -----END CERTIFICATE-----
585
+
586
+ Network Solutions Certificate Authority
587
+ =======================================
588
+ -----BEGIN CERTIFICATE-----
589
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
590
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
591
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
592
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
593
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
594
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
595
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
596
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
597
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
598
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
599
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
600
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
601
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
602
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
603
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
604
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
605
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
606
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
607
+ -----END CERTIFICATE-----
608
+
609
+ COMODO ECC Certification Authority
610
+ ==================================
611
+ -----BEGIN CERTIFICATE-----
612
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
613
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
614
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
615
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
616
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
617
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
618
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
619
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
620
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
621
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
622
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
623
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
624
+ -----END CERTIFICATE-----
625
+
626
+ Certigna
627
+ ========
628
+ -----BEGIN CERTIFICATE-----
629
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
630
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
631
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
632
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
633
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
634
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
635
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
636
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
637
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
638
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
639
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
640
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
641
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
642
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
643
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
644
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
645
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
646
+ -----END CERTIFICATE-----
647
+
648
+ Cybertrust Global Root
649
+ ======================
650
+ -----BEGIN CERTIFICATE-----
651
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
652
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
653
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
654
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
655
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
656
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
657
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
658
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
659
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
660
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
661
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
662
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
663
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
664
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
665
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
666
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
667
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
668
+ -----END CERTIFICATE-----
669
+
670
+ ePKI Root Certification Authority
671
+ =================================
672
+ -----BEGIN CERTIFICATE-----
673
+ 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
699
+ -----END CERTIFICATE-----
700
+
701
+ certSIGN ROOT CA
702
+ ================
703
+ -----BEGIN CERTIFICATE-----
704
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
705
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
706
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
707
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
708
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
709
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
710
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
711
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
712
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
713
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
714
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
715
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
716
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
717
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
718
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
719
+ -----END CERTIFICATE-----
720
+
721
+ GeoTrust Primary Certification Authority - G2
722
+ =============================================
723
+ -----BEGIN CERTIFICATE-----
724
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
725
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
726
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
727
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
728
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
729
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
730
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
731
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
732
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
733
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
734
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
735
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
736
+ npaqBA+K
737
+ -----END CERTIFICATE-----
738
+
739
+ VeriSign Universal Root Certification Authority
740
+ ===============================================
741
+ -----BEGIN CERTIFICATE-----
742
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
743
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
744
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
745
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
746
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
747
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
748
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
749
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
750
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
751
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
752
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
753
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
754
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
755
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
756
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
757
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
758
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
759
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
760
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
761
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
762
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
763
+ mJO37M2CYfE45k+XmCpajQ==
764
+ -----END CERTIFICATE-----
765
+
766
+ NetLock Arany (Class Gold) Főtanúsítvány
767
+ ========================================
768
+ -----BEGIN CERTIFICATE-----
769
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
770
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
771
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
772
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
773
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
774
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
775
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
776
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
777
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
778
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
779
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
780
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
781
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
782
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
783
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
784
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
785
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
786
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
787
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
788
+ -----END CERTIFICATE-----
789
+
790
+ Hongkong Post Root CA 1
791
+ =======================
792
+ -----BEGIN CERTIFICATE-----
793
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
794
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
795
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
796
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
797
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
798
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
799
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
800
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
801
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
802
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
803
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
804
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
805
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
806
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
807
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
808
+ -----END CERTIFICATE-----
809
+
810
+ SecureSign RootCA11
811
+ ===================
812
+ -----BEGIN CERTIFICATE-----
813
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
814
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
815
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
816
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
817
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
818
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
819
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
820
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
821
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
822
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
823
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
824
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
825
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
826
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
827
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
828
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
829
+ -----END CERTIFICATE-----
830
+
831
+ Microsec e-Szigno Root CA 2009
832
+ ==============================
833
+ -----BEGIN CERTIFICATE-----
834
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
835
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
836
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
837
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
838
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
839
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
840
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
841
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
842
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
843
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
844
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
845
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
846
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
847
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
848
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
849
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
850
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
851
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
852
+ LXpUq3DDfSJlgnCW
853
+ -----END CERTIFICATE-----
854
+
855
+ GlobalSign Root CA - R3
856
+ =======================
857
+ -----BEGIN CERTIFICATE-----
858
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
859
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
860
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
861
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
862
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
863
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
864
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
865
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
866
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
867
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
868
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
869
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
870
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
871
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
872
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
873
+ kpeDMdmztcpHWD9f
874
+ -----END CERTIFICATE-----
875
+
876
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
877
+ =========================================================
878
+ -----BEGIN CERTIFICATE-----
879
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
880
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
881
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
882
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
883
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
884
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
885
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
886
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
887
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
888
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
889
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
890
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
891
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
892
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
893
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
894
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
895
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
896
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
897
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
898
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
899
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
900
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
901
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
902
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
903
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
904
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
905
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
906
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
907
+ -----END CERTIFICATE-----
908
+
909
+ Izenpe.com
910
+ ==========
911
+ -----BEGIN CERTIFICATE-----
912
+ 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
939
+ -----END CERTIFICATE-----
940
+
941
+ Chambers of Commerce Root - 2008
942
+ ================================
943
+ -----BEGIN CERTIFICATE-----
944
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
945
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
946
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
947
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
948
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
949
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
950
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
951
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
952
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
953
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
954
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
955
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
956
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
957
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
958
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
959
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
960
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
961
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
962
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
963
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
964
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
965
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
966
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
967
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
968
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
969
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
970
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
971
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
972
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
973
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
974
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
975
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
976
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
977
+ -----END CERTIFICATE-----
978
+
979
+ Global Chambersign Root - 2008
980
+ ==============================
981
+ -----BEGIN CERTIFICATE-----
982
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
983
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
984
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
985
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
986
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
987
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
988
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
989
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
990
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
991
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
992
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
993
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
994
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
995
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
996
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
997
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
998
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
999
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
1000
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
1001
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
1002
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
1003
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
1004
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
1005
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
1006
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
1007
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
1008
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
1009
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
1010
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
1011
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
1012
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
1013
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
1014
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
1015
+ -----END CERTIFICATE-----
1016
+
1017
+ Go Daddy Root Certificate Authority - G2
1018
+ ========================================
1019
+ -----BEGIN CERTIFICATE-----
1020
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1021
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
1022
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
1023
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
1024
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
1025
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
1026
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
1027
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
1028
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
1029
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
1030
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
1031
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
1032
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
1033
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
1034
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
1035
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
1036
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
1037
+ -----END CERTIFICATE-----
1038
+
1039
+ Starfield Root Certificate Authority - G2
1040
+ =========================================
1041
+ -----BEGIN CERTIFICATE-----
1042
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1043
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
1044
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
1045
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
1046
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
1047
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
1048
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
1049
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
1050
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
1051
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
1052
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
1053
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1054
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
1055
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
1056
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
1057
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
1058
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
1059
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
1060
+ -----END CERTIFICATE-----
1061
+
1062
+ Starfield Services Root Certificate Authority - G2
1063
+ ==================================================
1064
+ -----BEGIN CERTIFICATE-----
1065
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1066
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
1067
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
1068
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
1069
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
1070
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
1071
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1072
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
1073
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
1074
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
1075
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
1076
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
1077
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
1078
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
1079
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
1080
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
1081
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
1082
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
1083
+ -----END CERTIFICATE-----
1084
+
1085
+ AffirmTrust Commercial
1086
+ ======================
1087
+ -----BEGIN CERTIFICATE-----
1088
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
1089
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
1090
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
1091
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
1092
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
1093
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
1094
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
1095
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
1096
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
1097
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1098
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
1099
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
1100
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
1101
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
1102
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
1103
+ -----END CERTIFICATE-----
1104
+
1105
+ AffirmTrust Networking
1106
+ ======================
1107
+ -----BEGIN CERTIFICATE-----
1108
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
1109
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
1110
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
1111
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
1112
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
1113
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
1114
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
1115
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
1116
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
1117
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1118
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
1119
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
1120
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
1121
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
1122
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
1123
+ -----END CERTIFICATE-----
1124
+
1125
+ AffirmTrust Premium
1126
+ ===================
1127
+ -----BEGIN CERTIFICATE-----
1128
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
1129
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
1130
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
1131
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
1132
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
1133
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
1134
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
1135
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
1136
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
1137
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
1138
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
1139
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
1140
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
1141
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
1142
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
1143
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
1144
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
1145
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
1146
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
1147
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
1148
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
1149
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
1150
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
1151
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
1152
+ -----END CERTIFICATE-----
1153
+
1154
+ AffirmTrust Premium ECC
1155
+ =======================
1156
+ -----BEGIN CERTIFICATE-----
1157
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
1158
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
1159
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
1160
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
1161
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
1162
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
1163
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
1164
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
1165
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
1166
+ eQ==
1167
+ -----END CERTIFICATE-----
1168
+
1169
+ Certum Trusted Network CA
1170
+ =========================
1171
+ -----BEGIN CERTIFICATE-----
1172
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
1173
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
1174
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
1175
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
1176
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1177
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
1178
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
1179
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
1180
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
1181
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
1182
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
1183
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
1184
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
1185
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
1186
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
1187
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
1188
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
1189
+ -----END CERTIFICATE-----
1190
+
1191
+ TWCA Root Certification Authority
1192
+ =================================
1193
+ -----BEGIN CERTIFICATE-----
1194
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
1195
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
1196
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
1197
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
1198
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
1199
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
1200
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
1201
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
1202
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
1203
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
1204
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
1205
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
1206
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
1207
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
1208
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
1209
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
1210
+ -----END CERTIFICATE-----
1211
+
1212
+ Security Communication RootCA2
1213
+ ==============================
1214
+ -----BEGIN CERTIFICATE-----
1215
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1216
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
1217
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
1218
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
1219
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1220
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
1221
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
1222
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
1223
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
1224
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
1225
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
1226
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
1227
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
1228
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
1229
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
1230
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
1231
+ -----END CERTIFICATE-----
1232
+
1233
+ EC-ACC
1234
+ ======
1235
+ -----BEGIN CERTIFICATE-----
1236
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
1237
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
1238
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
1239
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
1240
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
1241
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
1242
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
1243
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
1244
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
1245
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
1246
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
1247
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
1248
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
1249
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
1250
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
1251
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
1252
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
1253
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
1254
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
1255
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
1256
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
1257
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
1258
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
1259
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
1260
+ 5EI=
1261
+ -----END CERTIFICATE-----
1262
+
1263
+ Hellenic Academic and Research Institutions RootCA 2011
1264
+ =======================================================
1265
+ -----BEGIN CERTIFICATE-----
1266
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
1267
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
1268
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1269
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
1270
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1271
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
1272
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1273
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
1274
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
1275
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
1276
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
1277
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
1278
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
1279
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
1280
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
1281
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
1282
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
1283
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
1284
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
1285
+ -----END CERTIFICATE-----
1286
+
1287
+ Actalis Authentication Root CA
1288
+ ==============================
1289
+ -----BEGIN CERTIFICATE-----
1290
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
1291
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
1292
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
1293
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
1294
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
1295
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
1296
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
1297
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
1298
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
1299
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
1300
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
1301
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
1302
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
1303
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
1304
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
1305
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
1306
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
1307
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
1308
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
1309
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
1310
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
1311
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
1312
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
1313
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
1314
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
1315
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1316
+ -----END CERTIFICATE-----
1317
+
1318
+ Trustis FPS Root CA
1319
+ ===================
1320
+ -----BEGIN CERTIFICATE-----
1321
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
1322
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
1323
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
1324
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
1325
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
1326
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
1327
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
1328
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
1329
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
1330
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
1331
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
1332
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
1333
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
1334
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
1335
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
1336
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
1337
+ -----END CERTIFICATE-----
1338
+
1339
+ Buypass Class 2 Root CA
1340
+ =======================
1341
+ -----BEGIN CERTIFICATE-----
1342
+ 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
1366
+ rJgWVqA=
1367
+ -----END CERTIFICATE-----
1368
+
1369
+ Buypass Class 3 Root CA
1370
+ =======================
1371
+ -----BEGIN CERTIFICATE-----
1372
+ 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
1396
+ Cp/HuZc=
1397
+ -----END CERTIFICATE-----
1398
+
1399
+ T-TeleSec GlobalRoot Class 3
1400
+ ============================
1401
+ -----BEGIN CERTIFICATE-----
1402
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
1403
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
1404
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
1405
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
1406
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
1407
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
1408
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
1409
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
1410
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
1411
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
1412
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
1413
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
1414
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
1415
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
1416
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
1417
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
1418
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
1419
+ -----END CERTIFICATE-----
1420
+
1421
+ D-TRUST Root Class 3 CA 2 2009
1422
+ ==============================
1423
+ -----BEGIN CERTIFICATE-----
1424
+ MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1425
+ DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
1426
+ Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
1427
+ LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
1428
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
1429
+ ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
1430
+ BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
1431
+ KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
1432
+ p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
1433
+ AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
1434
+ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
1435
+ eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
1436
+ MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
1437
+ PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
1438
+ OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
1439
+ 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
1440
+ o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
1441
+ dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
1442
+ X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
1443
+ -----END CERTIFICATE-----
1444
+
1445
+ D-TRUST Root Class 3 CA 2 EV 2009
1446
+ =================================
1447
+ -----BEGIN CERTIFICATE-----
1448
+ MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1449
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
1450
+ OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1451
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
1452
+ OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
1453
+ egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
1454
+ zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
1455
+ 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
1456
+ sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
1457
+ 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
1458
+ cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
1459
+ ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
1460
+ MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
1461
+ b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
1462
+ c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
1463
+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
1464
+ nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
1465
+ ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
1466
+ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
1467
+ w9y4AyHqnxbxLFS1
1468
+ -----END CERTIFICATE-----
1469
+
1470
+ CA Disig Root R2
1471
+ ================
1472
+ -----BEGIN CERTIFICATE-----
1473
+ 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
1497
+ 7+ZtsH8tZ/3zbBt1RqPlShfppNcL
1498
+ -----END CERTIFICATE-----
1499
+
1500
+ ACCVRAIZ1
1501
+ =========
1502
+ -----BEGIN CERTIFICATE-----
1503
+ MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
1504
+ SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
1505
+ MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
1506
+ UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1507
+ DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
1508
+ jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
1509
+ RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
1510
+ aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
1511
+ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
1512
+ WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
1513
+ 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
1514
+ 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
1515
+ 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
1516
+ Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
1517
+ Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
1518
+ Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
1519
+ VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
1520
+ Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
1521
+ QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
1522
+ AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
1523
+ YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
1524
+ AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
1525
+ IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
1526
+ aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
1527
+ dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
1528
+ MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
1529
+ hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
1530
+ R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
1531
+ YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
1532
+ nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
1533
+ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
1534
+ sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
1535
+ I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
1536
+ Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
1537
+ 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
1538
+ EfbRD0tVNEYqi4Y7
1539
+ -----END CERTIFICATE-----
1540
+
1541
+ TWCA Global Root CA
1542
+ ===================
1543
+ -----BEGIN CERTIFICATE-----
1544
+ MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
1545
+ CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
1546
+ QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
1547
+ EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
1548
+ Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
1549
+ nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
1550
+ r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
1551
+ Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
1552
+ tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
1553
+ KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
1554
+ sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
1555
+ yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
1556
+ kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
1557
+ zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
1558
+ AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
1559
+ cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
1560
+ LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
1561
+ 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
1562
+ /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
1563
+ lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
1564
+ A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
1565
+ i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
1566
+ EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
1567
+ zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
1568
+ -----END CERTIFICATE-----
1569
+
1570
+ TeliaSonera Root CA v1
1571
+ ======================
1572
+ -----BEGIN CERTIFICATE-----
1573
+ MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
1574
+ CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
1575
+ MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
1576
+ VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
1577
+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
1578
+ 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
1579
+ B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
1580
+ Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
1581
+ oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
1582
+ F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
1583
+ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
1584
+ gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
1585
+ TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
1586
+ AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
1587
+ DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
1588
+ zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
1589
+ 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
1590
+ pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
1591
+ G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
1592
+ c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
1593
+ JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
1594
+ qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
1595
+ Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
1596
+ WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
1597
+ -----END CERTIFICATE-----
1598
+
1599
+ E-Tugra Certification Authority
1600
+ ===============================
1601
+ -----BEGIN CERTIFICATE-----
1602
+ MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
1603
+ DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
1604
+ ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
1605
+ ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
1606
+ NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
1607
+ QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
1608
+ cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
1609
+ DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
1610
+ MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
1611
+ hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
1612
+ CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
1613
+ ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
1614
+ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
1615
+ E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
1616
+ rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
1617
+ jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
1618
+ rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
1619
+ dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
1620
+ /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
1621
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
1622
+ kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
1623
+ XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
1624
+ VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
1625
+ a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
1626
+ dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
1627
+ KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
1628
+ Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
1629
+ 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
1630
+ C7TbO6Orb1wdtn7os4I07QZcJA==
1631
+ -----END CERTIFICATE-----
1632
+
1633
+ T-TeleSec GlobalRoot Class 2
1634
+ ============================
1635
+ -----BEGIN CERTIFICATE-----
1636
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
1637
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
1638
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
1639
+ MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
1640
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
1641
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
1642
+ DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
1643
+ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
1644
+ vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
1645
+ 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
1646
+ WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
1647
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
1648
+ YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
1649
+ r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
1650
+ vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
1651
+ 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
1652
+ 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
1653
+ -----END CERTIFICATE-----
1654
+
1655
+ Atos TrustedRoot 2011
1656
+ =====================
1657
+ -----BEGIN CERTIFICATE-----
1658
+ MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
1659
+ cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
1660
+ MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
1661
+ A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
1662
+ hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
1663
+ 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
1664
+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
1665
+ HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
1666
+ z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
1667
+ l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
1668
+ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
1669
+ CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
1670
+ k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
1671
+ TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
1672
+ 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
1673
+ 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
1674
+ -----END CERTIFICATE-----
1675
+
1676
+ QuoVadis Root CA 1 G3
1677
+ =====================
1678
+ -----BEGIN CERTIFICATE-----
1679
+ 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
1703
+ hMJKzRwuJIczYOXD
1704
+ -----END CERTIFICATE-----
1705
+
1706
+ QuoVadis Root CA 2 G3
1707
+ =====================
1708
+ -----BEGIN CERTIFICATE-----
1709
+ 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
1733
+ O3jtZsSOeWmD3n+M
1734
+ -----END CERTIFICATE-----
1735
+
1736
+ QuoVadis Root CA 3 G3
1737
+ =====================
1738
+ -----BEGIN CERTIFICATE-----
1739
+ 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
1763
+ PpxxVJkES/1Y+Zj0
1764
+ -----END CERTIFICATE-----
1765
+
1766
+ DigiCert Assured ID Root G2
1767
+ ===========================
1768
+ -----BEGIN CERTIFICATE-----
1769
+ MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
1770
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1771
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
1772
+ MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1773
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
1774
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
1775
+ 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
1776
+ bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
1777
+ VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
1778
+ YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
1779
+ lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
1780
+ w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
1781
+ 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
1782
+ d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
1783
+ hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
1784
+ jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
1785
+ IhNzbM8m9Yop5w==
1786
+ -----END CERTIFICATE-----
1787
+
1788
+ DigiCert Assured ID Root G3
1789
+ ===========================
1790
+ -----BEGIN CERTIFICATE-----
1791
+ MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
1792
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
1793
+ VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
1794
+ MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1795
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
1796
+ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
1797
+ RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
1798
+ KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
1799
+ UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
1800
+ YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
1801
+ 1vUhZscv6pZjamVFkpUBtA==
1802
+ -----END CERTIFICATE-----
1803
+
1804
+ DigiCert Global Root G2
1805
+ =======================
1806
+ -----BEGIN CERTIFICATE-----
1807
+ MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
1808
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1809
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
1810
+ MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1811
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
1812
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
1813
+ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
1814
+ 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
1815
+ BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
1816
+ UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
1817
+ o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
1818
+ 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
1819
+ F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
1820
+ WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
1821
+ QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
1822
+ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
1823
+ MrY=
1824
+ -----END CERTIFICATE-----
1825
+
1826
+ DigiCert Global Root G3
1827
+ =======================
1828
+ -----BEGIN CERTIFICATE-----
1829
+ MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
1830
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
1831
+ VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
1832
+ MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
1833
+ aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
1834
+ AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
1835
+ YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
1836
+ BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
1837
+ Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
1838
+ 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
1839
+ VOKa5Vt8sycX
1840
+ -----END CERTIFICATE-----
1841
+
1842
+ DigiCert Trusted Root G4
1843
+ ========================
1844
+ -----BEGIN CERTIFICATE-----
1845
+ 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
1870
+ 82Z+
1871
+ -----END CERTIFICATE-----
1872
+
1873
+ COMODO RSA Certification Authority
1874
+ ==================================
1875
+ -----BEGIN CERTIFICATE-----
1876
+ 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
1902
+ LaZRfyHBNVOFBkpdn627G190
1903
+ -----END CERTIFICATE-----
1904
+
1905
+ USERTrust RSA Certification Authority
1906
+ =====================================
1907
+ -----BEGIN CERTIFICATE-----
1908
+ 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
1934
+ Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
1935
+ -----END CERTIFICATE-----
1936
+
1937
+ USERTrust ECC Certification Authority
1938
+ =====================================
1939
+ -----BEGIN CERTIFICATE-----
1940
+ MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
1941
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
1942
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
1943
+ biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
1944
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
1945
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
1946
+ biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
1947
+ 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
1948
+ nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
1949
+ HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
1950
+ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
1951
+ 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
1952
+ -----END CERTIFICATE-----
1953
+
1954
+ GlobalSign ECC Root CA - R4
1955
+ ===========================
1956
+ -----BEGIN CERTIFICATE-----
1957
+ MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
1958
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1959
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
1960
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1961
+ EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
1962
+ OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
1963
+ AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
1964
+ MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
1965
+ JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
1966
+ -----END CERTIFICATE-----
1967
+
1968
+ GlobalSign ECC Root CA - R5
1969
+ ===========================
1970
+ -----BEGIN CERTIFICATE-----
1971
+ MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
1972
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1973
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
1974
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1975
+ EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
1976
+ SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
1977
+ h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
1978
+ BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
1979
+ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
1980
+ yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
1981
+ -----END CERTIFICATE-----
1982
+
1983
+ Staat der Nederlanden Root CA - G3
1984
+ ==================================
1985
+ -----BEGIN CERTIFICATE-----
1986
+ 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
2011
+ -----END CERTIFICATE-----
2012
+
2013
+ Staat der Nederlanden EV Root CA
2014
+ ================================
2015
+ -----BEGIN CERTIFICATE-----
2016
+ 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
2040
+ eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
2041
+ -----END CERTIFICATE-----
2042
+
2043
+ IdenTrust Commercial Root CA 1
2044
+ ==============================
2045
+ -----BEGIN CERTIFICATE-----
2046
+ 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
2070
+ cGzM7vRX+Bi6hG6H
2071
+ -----END CERTIFICATE-----
2072
+
2073
+ IdenTrust Public Sector Root CA 1
2074
+ =================================
2075
+ -----BEGIN CERTIFICATE-----
2076
+ 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
2100
+ 3Wl9af0AVqW3rLatt8o+Ae+c
2101
+ -----END CERTIFICATE-----
2102
+
2103
+ Entrust Root Certification Authority - G2
2104
+ =========================================
2105
+ -----BEGIN CERTIFICATE-----
2106
+ MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
2107
+ BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
2108
+ bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
2109
+ b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
2110
+ HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
2111
+ DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
2112
+ OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
2113
+ eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
2114
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
2115
+ /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
2116
+ HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
2117
+ s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
2118
+ TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
2119
+ AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
2120
+ 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
2121
+ iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
2122
+ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
2123
+ nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
2124
+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
2125
+ e4pIb4tF9g==
2126
+ -----END CERTIFICATE-----
2127
+
2128
+ Entrust Root Certification Authority - EC1
2129
+ ==========================================
2130
+ -----BEGIN CERTIFICATE-----
2131
+ MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
2132
+ FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
2133
+ YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
2134
+ ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
2135
+ IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
2136
+ FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
2137
+ LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
2138
+ dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
2139
+ IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
2140
+ AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
2141
+ 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
2142
+ FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
2143
+ vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
2144
+ kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
2145
+ -----END CERTIFICATE-----
2146
+
2147
+ CFCA EV ROOT
2148
+ ============
2149
+ -----BEGIN CERTIFICATE-----
2150
+ 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
2175
+ -----END CERTIFICATE-----
2176
+
2177
+ OISTE WISeKey Global Root GB CA
2178
+ ===============================
2179
+ -----BEGIN CERTIFICATE-----
2180
+ MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
2181
+ EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
2182
+ ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
2183
+ MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
2184
+ VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
2185
+ b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
2186
+ scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
2187
+ rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
2188
+ 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
2189
+ Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
2190
+ GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
2191
+ /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
2192
+ hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
2193
+ dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
2194
+ VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
2195
+ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
2196
+ Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
2197
+ -----END CERTIFICATE-----
2198
+
2199
+ SZAFIR ROOT CA2
2200
+ ===============
2201
+ -----BEGIN CERTIFICATE-----
2202
+ MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
2203
+ A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
2204
+ BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
2205
+ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
2206
+ VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
2207
+ qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
2208
+ DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
2209
+ 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
2210
+ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
2211
+ ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
2212
+ AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
2213
+ AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
2214
+ O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
2215
+ oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
2216
+ 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
2217
+ +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
2218
+ -----END CERTIFICATE-----
2219
+
2220
+ Certum Trusted Network CA 2
2221
+ ===========================
2222
+ -----BEGIN CERTIFICATE-----
2223
+ MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
2224
+ BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
2225
+ bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
2226
+ ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
2227
+ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
2228
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
2229
+ IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
2230
+ 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
2231
+ CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
2232
+ Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
2233
+ uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
2234
+ GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
2235
+ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
2236
+ Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
2237
+ hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
2238
+ BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2239
+ AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
2240
+ hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
2241
+ Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
2242
+ L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
2243
+ clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
2244
+ pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
2245
+ w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
2246
+ J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
2247
+ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
2248
+ is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
2249
+ zAYspsbiDrW5viSP
2250
+ -----END CERTIFICATE-----
2251
+
2252
+ Hellenic Academic and Research Institutions RootCA 2015
2253
+ =======================================================
2254
+ -----BEGIN CERTIFICATE-----
2255
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
2256
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
2257
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
2258
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
2259
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
2260
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
2261
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
2262
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
2263
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
2264
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
2265
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
2266
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
2267
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
2268
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
2269
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
2270
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
2271
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2272
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
2273
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
2274
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
2275
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
2276
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
2277
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
2278
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
2279
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
2280
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
2281
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
2282
+ p/UsQu0yrbYhnr68
2283
+ -----END CERTIFICATE-----
2284
+
2285
+ Hellenic Academic and Research Institutions ECC RootCA 2015
2286
+ ===========================================================
2287
+ -----BEGIN CERTIFICATE-----
2288
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
2289
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
2290
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
2291
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
2292
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
2293
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
2294
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
2295
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
2296
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
2297
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
2298
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
2299
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
2300
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
2301
+ -----END CERTIFICATE-----
2302
+
2303
+ ISRG Root X1
2304
+ ============
2305
+ -----BEGIN CERTIFICATE-----
2306
+ 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
2330
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
2331
+ -----END CERTIFICATE-----
2332
+
2333
+ AC RAIZ FNMT-RCM
2334
+ ================
2335
+ -----BEGIN CERTIFICATE-----
2336
+ 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
2361
+ -----END CERTIFICATE-----
2362
+
2363
+ Amazon Root CA 1
2364
+ ================
2365
+ -----BEGIN CERTIFICATE-----
2366
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
2367
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
2368
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2369
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2370
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
2371
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
2372
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
2373
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
2374
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
2375
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
2376
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
2377
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
2378
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
2379
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
2380
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
2381
+ -----END CERTIFICATE-----
2382
+
2383
+ Amazon Root CA 2
2384
+ ================
2385
+ -----BEGIN CERTIFICATE-----
2386
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
2387
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
2388
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2389
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
2390
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
2391
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
2392
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
2393
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
2394
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
2395
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
2396
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
2397
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
2398
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
2399
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
2400
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
2401
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
2402
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
2403
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
2404
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
2405
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
2406
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
2407
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
2408
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
2409
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
2410
+ -----END CERTIFICATE-----
2411
+
2412
+ Amazon Root CA 3
2413
+ ================
2414
+ -----BEGIN CERTIFICATE-----
2415
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
2416
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
2417
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2418
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
2419
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
2420
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
2421
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
2422
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
2423
+ -----END CERTIFICATE-----
2424
+
2425
+ Amazon Root CA 4
2426
+ ================
2427
+ -----BEGIN CERTIFICATE-----
2428
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
2429
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
2430
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2431
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
2432
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
2433
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
2434
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
2435
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
2436
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
2437
+ -----END CERTIFICATE-----
2438
+
2439
+ TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
2440
+ =============================================
2441
+ -----BEGIN CERTIFICATE-----
2442
+ MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
2443
+ D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
2444
+ IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
2445
+ TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
2446
+ ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
2447
+ VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
2448
+ c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
2449
+ bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
2450
+ IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2451
+ MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
2452
+ 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
2453
+ wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
2454
+ 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
2455
+ WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
2456
+ ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
2457
+ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
2458
+ AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
2459
+ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
2460
+ e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
2461
+ q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
2462
+ -----END CERTIFICATE-----
2463
+
2464
+ GDCA TrustAUTH R5 ROOT
2465
+ ======================
2466
+ -----BEGIN CERTIFICATE-----
2467
+ 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
2492
+ -----END CERTIFICATE-----
2493
+
2494
+ TrustCor RootCert CA-1
2495
+ ======================
2496
+ -----BEGIN CERTIFICATE-----
2497
+ MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
2498
+ MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
2499
+ U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
2500
+ dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
2501
+ MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
2502
+ YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
2503
+ VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
2504
+ dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
2505
+ jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
2506
+ pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
2507
+ JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
2508
+ gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
2509
+ /Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
2510
+ BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2511
+ AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
2512
+ mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
2513
+ ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
2514
+ qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
2515
+ 3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
2516
+ -----END CERTIFICATE-----
2517
+
2518
+ TrustCor RootCert CA-2
2519
+ ======================
2520
+ -----BEGIN CERTIFICATE-----
2521
+ MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
2522
+ DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
2523
+ eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
2524
+ eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
2525
+ MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
2526
+ bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
2527
+ cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
2528
+ IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
2529
+ ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
2530
+ RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
2531
+ oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
2532
+ XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
2533
+ /p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
2534
+ jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
2535
+ eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
2536
+ rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
2537
+ 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
2538
+ 2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
2539
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
2540
+ Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
2541
+ kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
2542
+ 2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
2543
+ S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
2544
+ PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
2545
+ DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
2546
+ RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
2547
+ xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
2548
+ RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
2549
+ -----END CERTIFICATE-----
2550
+
2551
+ TrustCor ECA-1
2552
+ ==============
2553
+ -----BEGIN CERTIFICATE-----
2554
+ MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
2555
+ MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
2556
+ U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
2557
+ dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
2558
+ N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
2559
+ MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
2560
+ IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
2561
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
2562
+ MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
2563
+ xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
2564
+ p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
2565
+ fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
2566
+ YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
2567
+ f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
2568
+ AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
2569
+ /ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
2570
+ hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
2571
+ J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
2572
+ jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
2573
+ -----END CERTIFICATE-----
2574
+
2575
+ SSL.com Root Certification Authority RSA
2576
+ ========================================
2577
+ -----BEGIN CERTIFICATE-----
2578
+ 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
2604
+ WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
2605
+ -----END CERTIFICATE-----
2606
+
2607
+ SSL.com Root Certification Authority ECC
2608
+ ========================================
2609
+ -----BEGIN CERTIFICATE-----
2610
+ MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
2611
+ BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
2612
+ BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
2613
+ MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
2614
+ BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
2615
+ bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
2616
+ BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
2617
+ 8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
2618
+ hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
2619
+ jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
2620
+ e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
2621
+ 5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
2622
+ -----END CERTIFICATE-----
2623
+
2624
+ SSL.com EV Root Certification Authority RSA R2
2625
+ ==============================================
2626
+ -----BEGIN CERTIFICATE-----
2627
+ MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
2628
+ DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
2629
+ MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
2630
+ MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
2631
+ DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
2632
+ VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
2633
+ BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
2634
+ hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
2635
+ cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
2636
+ Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
2637
+ B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
2638
+ CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
2639
+ 9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
2640
+ RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
2641
+ JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
2642
+ +qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
2643
+ HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
2644
+ qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
2645
+ ++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
2646
+ Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
2647
+ guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
2648
+ OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
2649
+ CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
2650
+ lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
2651
+ rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
2652
+ hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
2653
+ 9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
2654
+ -----END CERTIFICATE-----
2655
+
2656
+ SSL.com EV Root Certification Authority ECC
2657
+ ===========================================
2658
+ -----BEGIN CERTIFICATE-----
2659
+ MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
2660
+ BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
2661
+ BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
2662
+ MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
2663
+ EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
2664
+ LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
2665
+ BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
2666
+ 3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
2667
+ BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
2668
+ 5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
2669
+ N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
2670
+ m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
2671
+ -----END CERTIFICATE-----
2672
+
2673
+ GlobalSign Root CA - R6
2674
+ =======================
2675
+ -----BEGIN CERTIFICATE-----
2676
+ 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
2701
+ -----END CERTIFICATE-----
2702
+
2703
+ OISTE WISeKey Global Root GC CA
2704
+ ===============================
2705
+ -----BEGIN CERTIFICATE-----
2706
+ MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD
2707
+ SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo
2708
+ MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa
2709
+ Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL
2710
+ ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
2711
+ bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr
2712
+ VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab
2713
+ NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
2714
+ BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E
2715
+ AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk
2716
+ AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9
2717
+ -----END CERTIFICATE-----
2718
+
2719
+ GTS Root R1
2720
+ ===========
2721
+ -----BEGIN CERTIFICATE-----
2722
+ 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
2746
+ CFF1pkgl
2747
+ -----END CERTIFICATE-----
2748
+
2749
+ GTS Root R2
2750
+ ===========
2751
+ -----BEGIN CERTIFICATE-----
2752
+ MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG
2753
+ EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv
2754
+ b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG
2755
+ A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi
2756
+ MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk
2757
+ k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo
2758
+ 7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI
2759
+ m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm
2760
+ dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu
2761
+ ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz
2762
+ cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW
2763
+ Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl
2764
+ aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy
2765
+ 5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
2766
+ VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM
2767
+ BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT
2768
+ vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ
2769
+ +YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw
2770
+ c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da
2771
+ WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r
2772
+ n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu
2773
+ Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ
2774
+ 7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs
2775
+ gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld
2776
+ o/DUhgkC
2777
+ -----END CERTIFICATE-----
2778
+
2779
+ GTS Root R3
2780
+ ===========
2781
+ -----BEGIN CERTIFICATE-----
2782
+ MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
2783
+ UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
2784
+ UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
2785
+ ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq
2786
+ hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU
2787
+ Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej
2788
+ QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP
2789
+ 0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0
2790
+ glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa
2791
+ KaqW04MjyaR7YbPMAuhd
2792
+ -----END CERTIFICATE-----
2793
+
2794
+ GTS Root R4
2795
+ ===========
2796
+ -----BEGIN CERTIFICATE-----
2797
+ MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
2798
+ UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
2799
+ UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
2800
+ ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq
2801
+ hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa
2802
+ 6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj
2803
+ QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV
2804
+ 2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI
2805
+ N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x
2806
+ zPKwTdb+mciUqXWi4w==
2807
+ -----END CERTIFICATE-----
2808
+
2809
+ UCA Global G2 Root
2810
+ ==================
2811
+ -----BEGIN CERTIFICATE-----
2812
+ MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG
2813
+ EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x
2814
+ NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU
2815
+ cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
2816
+ MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT
2817
+ oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV
2818
+ 8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS
2819
+ h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o
2820
+ LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/
2821
+ R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe
2822
+ KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa
2823
+ 4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc
2824
+ OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97
2825
+ 8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
2826
+ BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo
2827
+ 5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5
2828
+ 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A
2829
+ Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9
2830
+ yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX
2831
+ c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo
2832
+ jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk
2833
+ bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x
2834
+ ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn
2835
+ RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A==
2836
+ -----END CERTIFICATE-----
2837
+
2838
+ UCA Extended Validation Root
2839
+ ============================
2840
+ -----BEGIN CERTIFICATE-----
2841
+ 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
2865
+ dhh2n1ax
2866
+ -----END CERTIFICATE-----
2867
+
2868
+ Certigna Root CA
2869
+ ================
2870
+ -----BEGIN CERTIFICATE-----
2871
+ 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
2900
+ -----END CERTIFICATE-----
2901
+
2902
+ emSign Root CA - G1
2903
+ ===================
2904
+ -----BEGIN CERTIFICATE-----
2905
+ MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET
2906
+ MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl
2907
+ ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx
2908
+ ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk
2909
+ aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB
2910
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN
2911
+ LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1
2912
+ cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW
2913
+ DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ
2914
+ 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH
2915
+ hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG
2916
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2
2917
+ vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q
2918
+ NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q
2919
+ +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih
2920
+ U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
2921
+ iN66zB+Afko=
2922
+ -----END CERTIFICATE-----
2923
+
2924
+ emSign ECC Root CA - G3
2925
+ =======================
2926
+ -----BEGIN CERTIFICATE-----
2927
+ MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG
2928
+ A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg
2929
+ MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4
2930
+ MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11
2931
+ ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
2932
+ RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc
2933
+ 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr
2934
+ MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC
2935
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D
2936
+ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
2937
+ jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
2938
+ -----END CERTIFICATE-----
2939
+
2940
+ emSign Root CA - C1
2941
+ ===================
2942
+ -----BEGIN CERTIFICATE-----
2943
+ MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
2944
+ EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
2945
+ Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE
2946
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD
2947
+ ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up
2948
+ ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/
2949
+ Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX
2950
+ OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V
2951
+ I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms
2952
+ lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+
2953
+ XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
2954
+ ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp
2955
+ /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1
2956
+ NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9
2957
+ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
2958
+ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
2959
+ -----END CERTIFICATE-----
2960
+
2961
+ emSign ECC Root CA - C3
2962
+ =======================
2963
+ -----BEGIN CERTIFICATE-----
2964
+ MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
2965
+ A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
2966
+ Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE
2967
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD
2968
+ ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd
2969
+ 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9
2970
+ SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA
2971
+ B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA
2972
+ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
2973
+ ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
2974
+ -----END CERTIFICATE-----
2975
+
2976
+ Hongkong Post Root CA 3
2977
+ =======================
2978
+ -----BEGIN CERTIFICATE-----
2979
+ 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
3005
+ dBb9HxEGmpv0
3006
+ -----END CERTIFICATE-----
3007
+
3008
+ Entrust Root Certification Authority - G4
3009
+ =========================================
3010
+ -----BEGIN CERTIFICATE-----
3011
+ MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
3012
+ BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
3013
+ bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
3014
+ dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
3015
+ dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
3016
+ AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
3017
+ L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
3018
+ cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
3019
+ cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
3020
+ umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
3021
+ 3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
3022
+ 8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
3023
+ e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
3024
+ ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
3025
+ xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
3026
+ 7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
3027
+ dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
3028
+ Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
3029
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
3030
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
3031
+ jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
3032
+ 7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
3033
+ YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
3034
+ jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
3035
+ m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
3036
+ RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
3037
+ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
3038
+ +TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
3039
+ kcpG2om3PVODLAgfi49T3f+sHw==
3040
+ -----END CERTIFICATE-----
3041
+
3042
+ Microsoft ECC Root Certificate Authority 2017
3043
+ =============================================
3044
+ -----BEGIN CERTIFICATE-----
3045
+ MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
3046
+ UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
3047
+ IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4
3048
+ MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw
3049
+ NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ
3050
+ BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6
3051
+ thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB
3052
+ eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM
3053
+ +Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf
3054
+ Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
3055
+ eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
3056
+ -----END CERTIFICATE-----
3057
+
3058
+ Microsoft RSA Root Certificate Authority 2017
3059
+ =============================================
3060
+ -----BEGIN CERTIFICATE-----
3061
+ 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
3086
+ 5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
3087
+ -----END CERTIFICATE-----
3088
+
3089
+ e-Szigno Root CA 2017
3090
+ =====================
3091
+ -----BEGIN CERTIFICATE-----
3092
+ MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
3093
+ DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
3094
+ MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa
3095
+ Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE
3096
+ CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp
3097
+ Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx
3098
+ s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G
3099
+ A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv
3100
+ vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA
3101
+ tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
3102
+ svxyqltZ+efcMQ==
3103
+ -----END CERTIFICATE-----
3104
+
3105
+ certSIGN Root CA G2
3106
+ ===================
3107
+ -----BEGIN CERTIFICATE-----
3108
+ MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
3109
+ EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
3110
+ MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH
3111
+ TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
3112
+ ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05
3113
+ N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk
3114
+ abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg
3115
+ wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp
3116
+ dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh
3117
+ ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732
3118
+ jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf
3119
+ 95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc
3120
+ z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL
3121
+ iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud
3122
+ DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB
3123
+ ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC
3124
+ b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB
3125
+ /AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5
3126
+ 8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5
3127
+ BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW
3128
+ atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU
3129
+ Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M
3130
+ NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
3131
+ 0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
3132
+ -----END CERTIFICATE-----
3133
+
3134
+ Trustwave Global Certification Authority
3135
+ ========================================
3136
+ -----BEGIN CERTIFICATE-----
3137
+ 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
3163
+ 29FpHOTKyeC2nOnOcXHebD8WpHk=
3164
+ -----END CERTIFICATE-----
3165
+
3166
+ Trustwave Global ECC P256 Certification Authority
3167
+ =================================================
3168
+ -----BEGIN CERTIFICATE-----
3169
+ MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
3170
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
3171
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp
3172
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD
3173
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
3174
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1
3175
+ NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj
3176
+ 43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm
3177
+ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
3178
+ 0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz
3179
+ RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
3180
+ -----END CERTIFICATE-----
3181
+
3182
+ Trustwave Global ECC P384 Certification Authority
3183
+ =================================================
3184
+ -----BEGIN CERTIFICATE-----
3185
+ MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
3186
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
3187
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp
3188
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD
3189
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
3190
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4
3191
+ NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH
3192
+ Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr
3193
+ /TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV
3194
+ HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
3195
+ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
3196
+ CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
3197
+ -----END CERTIFICATE-----
3198
+
3199
+ NAVER Global Root Certification Authority
3200
+ =========================================
3201
+ -----BEGIN CERTIFICATE-----
3202
+ MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
3203
+ A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
3204
+ DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
3205
+ NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
3206
+ UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
3207
+ biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
3208
+ UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
3209
+ +j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
3210
+ XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
3211
+ aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
3212
+ Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
3213
+ VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
3214
+ A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
3215
+ cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
3216
+ YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
3217
+ HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
3218
+ Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
3219
+ 21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
3220
+ jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
3221
+ hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
3222
+ E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
3223
+ D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
3224
+ A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
3225
+ qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
3226
+ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
3227
+ kpzNNIaRkPpkUZ3+/uul9XXeifdy
3228
+ -----END CERTIFICATE-----
3229
+
3230
+ Thawte Server CA
3231
+ ================
3232
+ -----BEGIN CERTIFICATE-----
3233
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
3234
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
3235
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
3236
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
3237
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
3238
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
3239
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
3240
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
3241
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
3242
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
3243
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
3244
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
3245
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
3246
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
3247
+ -----END CERTIFICATE-----
3248
+
3249
+ Thawte Premium Server CA
3250
+ ========================
3251
+ -----BEGIN CERTIFICATE-----
3252
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
3253
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
3254
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
3255
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
3256
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
3257
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
3258
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
3259
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
3260
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
3261
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
3262
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
3263
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
3264
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
3265
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
3266
+ UCemDaYj+bvLpgcUQg==
3267
+ -----END CERTIFICATE-----
3268
+
3269
+ Verisign Class 3 Public Primary Certification Authority
3270
+ =======================================================
3271
+ -----BEGIN CERTIFICATE-----
3272
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
3273
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
3274
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
3275
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
3276
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3277
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
3278
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
3279
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
3280
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
3281
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
3282
+ Tqj/ZA1k
3283
+ -----END CERTIFICATE-----
3284
+
3285
+ Verisign Class 3 Public Primary Certification Authority - G2
3286
+ ============================================================
3287
+ -----BEGIN CERTIFICATE-----
3288
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
3289
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
3290
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
3291
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
3292
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
3293
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
3294
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
3295
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
3296
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
3297
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
3298
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
3299
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
3300
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
3301
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
3302
+ -----END CERTIFICATE-----
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Transport/fsockopen.php ADDED
@@ -0,0 +1,451 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fsockopen HTTP transport
4
+ *
5
+ * @package Requests
6
+ * @subpackage Transport
7
+ */
8
+
9
+ /**
10
+ * fsockopen HTTP transport
11
+ *
12
+ * @package Requests
13
+ * @subpackage Transport
14
+ */
15
+ class Requests_Transport_fsockopen implements Requests_Transport {
16
+ /**
17
+ * Second to microsecond conversion
18
+ *
19
+ * @var integer
20
+ */
21
+ const SECOND_IN_MICROSECONDS = 1000000;
22
+
23
+ /**
24
+ * Raw HTTP data
25
+ *
26
+ * @var string
27
+ */
28
+ public $headers = '';
29
+
30
+ /**
31
+ * Stream metadata
32
+ *
33
+ * @var array Associative array of properties, see {@see https://secure.php.net/stream_get_meta_data}
34
+ */
35
+ public $info;
36
+
37
+ /**
38
+ * What's the maximum number of bytes we should keep?
39
+ *
40
+ * @var int|bool Byte count, or false if no limit.
41
+ */
42
+ protected $max_bytes = false;
43
+
44
+ protected $connect_error = '';
45
+
46
+ /**
47
+ * Perform a request
48
+ *
49
+ * @throws Requests_Exception On failure to connect to socket (`fsockopenerror`)
50
+ * @throws Requests_Exception On socket timeout (`timeout`)
51
+ *
52
+ * @param string $url URL to request
53
+ * @param array $headers Associative array of request headers
54
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
55
+ * @param array $options Request options, see {@see Requests::response()} for documentation
56
+ * @return string Raw HTTP result
57
+ */
58
+ public function request($url, $headers = array(), $data = array(), $options = array()) {
59
+ $options['hooks']->dispatch('fsockopen.before_request');
60
+
61
+ $url_parts = parse_url($url);
62
+ if (empty($url_parts)) {
63
+ throw new Requests_Exception('Invalid URL.', 'invalidurl', $url);
64
+ }
65
+ $host = $url_parts['host'];
66
+ $context = stream_context_create();
67
+ $verifyname = false;
68
+ $case_insensitive_headers = new Requests_Utility_CaseInsensitiveDictionary($headers);
69
+
70
+ // HTTPS support
71
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
72
+ $remote_socket = 'ssl://' . $host;
73
+ if (!isset($url_parts['port'])) {
74
+ $url_parts['port'] = 443;
75
+ }
76
+
77
+ $context_options = array(
78
+ 'verify_peer' => true,
79
+ 'capture_peer_cert' => true,
80
+ );
81
+ $verifyname = true;
82
+
83
+ // SNI, if enabled (OpenSSL >=0.9.8j)
84
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.openssl_tlsext_server_nameFound
85
+ if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
86
+ $context_options['SNI_enabled'] = true;
87
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
88
+ $context_options['SNI_enabled'] = false;
89
+ }
90
+ }
91
+
92
+ if (isset($options['verify'])) {
93
+ if ($options['verify'] === false) {
94
+ $context_options['verify_peer'] = false;
95
+ $context_options['verify_peer_name'] = false;
96
+ $verifyname = false;
97
+ }
98
+ elseif (is_string($options['verify'])) {
99
+ $context_options['cafile'] = $options['verify'];
100
+ }
101
+ }
102
+
103
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
104
+ $context_options['verify_peer_name'] = false;
105
+ $verifyname = false;
106
+ }
107
+
108
+ stream_context_set_option($context, array('ssl' => $context_options));
109
+ }
110
+ else {
111
+ $remote_socket = 'tcp://' . $host;
112
+ }
113
+
114
+ $this->max_bytes = $options['max_bytes'];
115
+
116
+ if (!isset($url_parts['port'])) {
117
+ $url_parts['port'] = 80;
118
+ }
119
+ $remote_socket .= ':' . $url_parts['port'];
120
+
121
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
122
+ set_error_handler(array($this, 'connect_error_handler'), E_WARNING | E_NOTICE);
123
+
124
+ $options['hooks']->dispatch('fsockopen.remote_socket', array(&$remote_socket));
125
+
126
+ $socket = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);
127
+
128
+ restore_error_handler();
129
+
130
+ if ($verifyname && !$this->verify_certificate_from_context($host, $context)) {
131
+ throw new Requests_Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
132
+ }
133
+
134
+ if (!$socket) {
135
+ if ($errno === 0) {
136
+ // Connection issue
137
+ throw new Requests_Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
138
+ }
139
+
140
+ throw new Requests_Exception($errstr, 'fsockopenerror', null, $errno);
141
+ }
142
+
143
+ $data_format = $options['data_format'];
144
+
145
+ if ($data_format === 'query') {
146
+ $path = self::format_get($url_parts, $data);
147
+ $data = '';
148
+ }
149
+ else {
150
+ $path = self::format_get($url_parts, array());
151
+ }
152
+
153
+ $options['hooks']->dispatch('fsockopen.remote_host_path', array(&$path, $url));
154
+
155
+ $request_body = '';
156
+ $out = sprintf("%s %s HTTP/%.1F\r\n", $options['type'], $path, $options['protocol_version']);
157
+
158
+ if ($options['type'] !== Requests::TRACE) {
159
+ if (is_array($data)) {
160
+ $request_body = http_build_query($data, '', '&');
161
+ }
162
+ else {
163
+ $request_body = $data;
164
+ }
165
+
166
+ // Always include Content-length on POST requests to prevent
167
+ // 411 errors from some servers when the body is empty.
168
+ if (!empty($data) || $options['type'] === Requests::POST) {
169
+ if (!isset($case_insensitive_headers['Content-Length'])) {
170
+ $headers['Content-Length'] = strlen($request_body);
171
+ }
172
+
173
+ if (!isset($case_insensitive_headers['Content-Type'])) {
174
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
175
+ }
176
+ }
177
+ }
178
+
179
+ if (!isset($case_insensitive_headers['Host'])) {
180
+ $out .= sprintf('Host: %s', $url_parts['host']);
181
+
182
+ if ((strtolower($url_parts['scheme']) === 'http' && $url_parts['port'] !== 80) || (strtolower($url_parts['scheme']) === 'https' && $url_parts['port'] !== 443)) {
183
+ $out .= ':' . $url_parts['port'];
184
+ }
185
+ $out .= "\r\n";
186
+ }
187
+
188
+ if (!isset($case_insensitive_headers['User-Agent'])) {
189
+ $out .= sprintf("User-Agent: %s\r\n", $options['useragent']);
190
+ }
191
+
192
+ $accept_encoding = $this->accept_encoding();
193
+ if (!isset($case_insensitive_headers['Accept-Encoding']) && !empty($accept_encoding)) {
194
+ $out .= sprintf("Accept-Encoding: %s\r\n", $accept_encoding);
195
+ }
196
+
197
+ $headers = Requests::flatten($headers);
198
+
199
+ if (!empty($headers)) {
200
+ $out .= implode("\r\n", $headers) . "\r\n";
201
+ }
202
+
203
+ $options['hooks']->dispatch('fsockopen.after_headers', array(&$out));
204
+
205
+ if (substr($out, -2) !== "\r\n") {
206
+ $out .= "\r\n";
207
+ }
208
+
209
+ if (!isset($case_insensitive_headers['Connection'])) {
210
+ $out .= "Connection: Close\r\n";
211
+ }
212
+
213
+ $out .= "\r\n" . $request_body;
214
+
215
+ $options['hooks']->dispatch('fsockopen.before_send', array(&$out));
216
+
217
+ fwrite($socket, $out);
218
+ $options['hooks']->dispatch('fsockopen.after_send', array($out));
219
+
220
+ if (!$options['blocking']) {
221
+ fclose($socket);
222
+ $fake_headers = '';
223
+ $options['hooks']->dispatch('fsockopen.after_request', array(&$fake_headers));
224
+ return '';
225
+ }
226
+
227
+ $timeout_sec = (int) floor($options['timeout']);
228
+ if ($timeout_sec === $options['timeout']) {
229
+ $timeout_msec = 0;
230
+ }
231
+ else {
232
+ $timeout_msec = self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
233
+ }
234
+ stream_set_timeout($socket, $timeout_sec, $timeout_msec);
235
+
236
+ $response = '';
237
+ $body = '';
238
+ $headers = '';
239
+ $this->info = stream_get_meta_data($socket);
240
+ $size = 0;
241
+ $doingbody = false;
242
+ $download = false;
243
+ if ($options['filename']) {
244
+ $download = fopen($options['filename'], 'wb');
245
+ }
246
+
247
+ while (!feof($socket)) {
248
+ $this->info = stream_get_meta_data($socket);
249
+ if ($this->info['timed_out']) {
250
+ throw new Requests_Exception('fsocket timed out', 'timeout');
251
+ }
252
+
253
+ $block = fread($socket, Requests::BUFFER_SIZE);
254
+ if (!$doingbody) {
255
+ $response .= $block;
256
+ if (strpos($response, "\r\n\r\n")) {
257
+ list($headers, $block) = explode("\r\n\r\n", $response, 2);
258
+ $doingbody = true;
259
+ }
260
+ }
261
+
262
+ // Are we in body mode now?
263
+ if ($doingbody) {
264
+ $options['hooks']->dispatch('request.progress', array($block, $size, $this->max_bytes));
265
+ $data_length = strlen($block);
266
+ if ($this->max_bytes) {
267
+ // Have we already hit a limit?
268
+ if ($size === $this->max_bytes) {
269
+ continue;
270
+ }
271
+ if (($size + $data_length) > $this->max_bytes) {
272
+ // Limit the length
273
+ $limited_length = ($this->max_bytes - $size);
274
+ $block = substr($block, 0, $limited_length);
275
+ }
276
+ }
277
+
278
+ $size += strlen($block);
279
+ if ($download) {
280
+ fwrite($download, $block);
281
+ }
282
+ else {
283
+ $body .= $block;
284
+ }
285
+ }
286
+ }
287
+ $this->headers = $headers;
288
+
289
+ if ($download) {
290
+ fclose($download);
291
+ }
292
+ else {
293
+ $this->headers .= "\r\n\r\n" . $body;
294
+ }
295
+ fclose($socket);
296
+
297
+ $options['hooks']->dispatch('fsockopen.after_request', array(&$this->headers, &$this->info));
298
+ return $this->headers;
299
+ }
300
+
301
+ /**
302
+ * Send multiple requests simultaneously
303
+ *
304
+ * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
305
+ * @param array $options Global options, see {@see Requests::response()} for documentation
306
+ * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
307
+ */
308
+ public function request_multiple($requests, $options) {
309
+ $responses = array();
310
+ $class = get_class($this);
311
+ foreach ($requests as $id => $request) {
312
+ try {
313
+ $handler = new $class();
314
+ $responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
315
+
316
+ $request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
317
+ }
318
+ catch (Requests_Exception $e) {
319
+ $responses[$id] = $e;
320
+ }
321
+
322
+ if (!is_string($responses[$id])) {
323
+ $request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
324
+ }
325
+ }
326
+
327
+ return $responses;
328
+ }
329
+
330
+ /**
331
+ * Retrieve the encodings we can accept
332
+ *
333
+ * @return string Accept-Encoding header value
334
+ */
335
+ protected static function accept_encoding() {
336
+ $type = array();
337
+ if (function_exists('gzinflate')) {
338
+ $type[] = 'deflate;q=1.0';
339
+ }
340
+
341
+ if (function_exists('gzuncompress')) {
342
+ $type[] = 'compress;q=0.5';
343
+ }
344
+
345
+ $type[] = 'gzip;q=0.5';
346
+
347
+ return implode(', ', $type);
348
+ }
349
+
350
+ /**
351
+ * Format a URL given GET data
352
+ *
353
+ * @param array $url_parts
354
+ * @param array|object $data Data to build query using, see {@see https://secure.php.net/http_build_query}
355
+ * @return string URL with data
356
+ */
357
+ protected static function format_get($url_parts, $data) {
358
+ if (!empty($data)) {
359
+ if (empty($url_parts['query'])) {
360
+ $url_parts['query'] = '';
361
+ }
362
+
363
+ $url_parts['query'] .= '&' . http_build_query($data, '', '&');
364
+ $url_parts['query'] = trim($url_parts['query'], '&');
365
+ }
366
+ if (isset($url_parts['path'])) {
367
+ if (isset($url_parts['query'])) {
368
+ $get = $url_parts['path'] . '?' . $url_parts['query'];
369
+ }
370
+ else {
371
+ $get = $url_parts['path'];
372
+ }
373
+ }
374
+ else {
375
+ $get = '/';
376
+ }
377
+ return $get;
378
+ }
379
+
380
+ /**
381
+ * Error handler for stream_socket_client()
382
+ *
383
+ * @param int $errno Error number (e.g. E_WARNING)
384
+ * @param string $errstr Error message
385
+ */
386
+ public function connect_error_handler($errno, $errstr) {
387
+ // Double-check we can handle it
388
+ if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
389
+ // Return false to indicate the default error handler should engage
390
+ return false;
391
+ }
392
+
393
+ $this->connect_error .= $errstr . "\n";
394
+ return true;
395
+ }
396
+
397
+ /**
398
+ * Verify the certificate against common name and subject alternative names
399
+ *
400
+ * Unfortunately, PHP doesn't check the certificate against the alternative
401
+ * names, leading things like 'https://www.github.com/' to be invalid.
402
+ * Instead
403
+ *
404
+ * @see https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
405
+ *
406
+ * @throws Requests_Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
407
+ * @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
408
+ * @param string $host Host name to verify against
409
+ * @param resource $context Stream context
410
+ * @return bool
411
+ */
412
+ public function verify_certificate_from_context($host, $context) {
413
+ $meta = stream_context_get_options($context);
414
+
415
+ // If we don't have SSL options, then we couldn't make the connection at
416
+ // all
417
+ if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
418
+ throw new Requests_Exception(rtrim($this->connect_error), 'ssl.connect_error');
419
+ }
420
+
421
+ $cert = openssl_x509_parse($meta['ssl']['peer_certificate']);
422
+
423
+ return Requests_SSL::verify_certificate($host, $cert);
424
+ }
425
+
426
+ /**
427
+ * Whether this transport is valid
428
+ *
429
+ * @codeCoverageIgnore
430
+ * @return boolean True if the transport is valid, false otherwise.
431
+ */
432
+ public static function test($capabilities = array()) {
433
+ if (!function_exists('fsockopen')) {
434
+ return false;
435
+ }
436
+
437
+ // If needed, check that streams support SSL
438
+ if (isset($capabilities['ssl']) && $capabilities['ssl']) {
439
+ if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse')) {
440
+ return false;
441
+ }
442
+
443
+ // Currently broken, thanks to https://github.com/facebook/hhvm/issues/2156
444
+ if (defined('HHVM_VERSION')) {
445
+ return false;
446
+ }
447
+ }
448
+
449
+ return true;
450
+ }
451
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Utility/CaseInsensitiveDictionary.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Case-insensitive dictionary, suitable for HTTP headers
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * Case-insensitive dictionary, suitable for HTTP headers
11
+ *
12
+ * @package Requests
13
+ * @subpackage Utilities
14
+ */
15
+ class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
16
+ /**
17
+ * Actual item data
18
+ *
19
+ * @var array
20
+ */
21
+ protected $data = array();
22
+
23
+ /**
24
+ * Creates a case insensitive dictionary.
25
+ *
26
+ * @param array $data Dictionary/map to convert to case-insensitive
27
+ */
28
+ public function __construct(array $data = array()) {
29
+ foreach ($data as $key => $value) {
30
+ $this->offsetSet($key, $value);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Check if the given item exists
36
+ *
37
+ * @param string $key Item key
38
+ * @return boolean Does the item exist?
39
+ */
40
+ public function offsetExists($key) {
41
+ $key = strtolower($key);
42
+ return isset($this->data[$key]);
43
+ }
44
+
45
+ /**
46
+ * Get the value for the item
47
+ *
48
+ * @param string $key Item key
49
+ * @return string|null Item value (null if offsetExists is false)
50
+ */
51
+ public function offsetGet($key) {
52
+ $key = strtolower($key);
53
+ if (!isset($this->data[$key])) {
54
+ return null;
55
+ }
56
+
57
+ return $this->data[$key];
58
+ }
59
+
60
+ /**
61
+ * Set the given item
62
+ *
63
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
64
+ *
65
+ * @param string $key Item name
66
+ * @param string $value Item value
67
+ */
68
+ public function offsetSet($key, $value) {
69
+ if ($key === null) {
70
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
71
+ }
72
+
73
+ $key = strtolower($key);
74
+ $this->data[$key] = $value;
75
+ }
76
+
77
+ /**
78
+ * Unset the given header
79
+ *
80
+ * @param string $key
81
+ */
82
+ public function offsetUnset($key) {
83
+ unset($this->data[strtolower($key)]);
84
+ }
85
+
86
+ /**
87
+ * Get an iterator for the data
88
+ *
89
+ * @return ArrayIterator
90
+ */
91
+ public function getIterator() {
92
+ return new ArrayIterator($this->data);
93
+ }
94
+
95
+ /**
96
+ * Get the headers as an array
97
+ *
98
+ * @return array Header data
99
+ */
100
+ public function getAll() {
101
+ return $this->data;
102
+ }
103
+ }
razorpay-sdk/libs/Requests-1.8.0/library/Requests/Utility/FilteredIterator.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Iterator for arrays requiring filtered values
4
+ *
5
+ * @package Requests
6
+ * @subpackage Utilities
7
+ */
8
+
9
+ /**
10
+ * Iterator for arrays requiring filtered values
11
+ *
12
+ * @package Requests
13
+ * @subpackage Utilities
14
+ */
15
+ class Requests_Utility_FilteredIterator extends ArrayIterator {
16
+ /**
17
+ * Callback to run as a filter
18
+ *
19
+ * @var callable
20
+ */
21
+ protected $callback;
22
+
23
+ /**
24
+ * Create a new iterator
25
+ *
26
+ * @param array $data
27
+ * @param callable $callback Callback to be called on each value
28
+ */
29
+ public function __construct($data, $callback) {
30
+ parent::__construct($data);
31
+
32
+ $this->callback = $callback;
33
+ }
34
+
35
+ /**
36
+ * Get the current item's value after filtering
37
+ *
38
+ * @return string
39
+ */
40
+ public function current() {
41
+ $value = parent::current();
42
+
43
+ if (is_callable($this->callback)) {
44
+ $value = call_user_func($this->callback, $value);
45
+ }
46
+
47
+ return $value;
48
+ }
49
+
50
+ /**
51
+ * @inheritdoc
52
+ */
53
+ public function unserialize($serialized) {}
54
+
55
+ /**
56
+ * @inheritdoc
57
+ *
58
+ * @phpcs:disable PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound
59
+ */
60
+ public function __unserialize($serialized) {}
61
+
62
+ public function __wakeup() {
63
+ unset($this->callback);
64
+ }
65
+ }
razorpay-sdk/libs/Requests-1.8.0/phpunit.xml.dist ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.5/phpunit.xsd"
5
+ backupGlobals="true"
6
+ bootstrap="tests/bootstrap.php"
7
+ colors="true"
8
+ verbose="true"
9
+ >
10
+ <testsuites>
11
+ <testsuite name="Authentication">
12
+ <directory suffix=".php">tests/Auth</directory>
13
+ </testsuite>
14
+ <testsuite name="Transports">
15
+ <directory suffix=".php">tests/Transport</directory>
16
+ </testsuite>
17
+ <testsuite name="Proxies">
18
+ <directory suffix=".php">tests/Proxy</directory>
19
+ </testsuite>
20
+ <testsuite name="General">
21
+ <file>tests/ChunkedEncoding.php</file>
22
+ <file>tests/Cookies.php</file>
23
+ <file>tests/Encoding.php</file>
24
+ <file>tests/IDNAEncoder.php</file>
25
+ <file>tests/IRI.php</file>
26
+ <file>tests/Requests.php</file>
27
+ <file>tests/Response/Headers.php</file>
28
+ <file>tests/Session.php</file>
29
+ <file>tests/SSL.php</file>
30
+ <file>tests/Utility/FilteredIterator.php</file>
31
+ </testsuite>
32
+ </testsuites>
33
+
34
+ <logging>
35
+ <log type="coverage-html" target="tests/coverage" lowUpperBound="35" highLowerBound="90"/>
36
+ </logging>
37
+
38
+ <filter>
39
+ <whitelist addUncoveredFilesFromWhitelist="true">
40
+ <directory suffix=".php">library</directory>
41
+ </whitelist>
42
+ </filter>
43
+ </phpunit>
razorpay-sdk/src/Api.php CHANGED
@@ -16,7 +16,7 @@ class Api
16
  */
17
  public static $appsDetails = array();
18
 
19
- const VERSION = '2.2.0';
20
 
21
  /**
22
  * @param string $key
16
  */
17
  public static $appsDetails = array();
18
 
19
+ const VERSION = '2.7.0';
20
 
21
  /**
22
  * @param string $key
razorpay-sdk/src/Customer.php CHANGED
@@ -12,6 +12,11 @@ class Customer extends Entity
12
  return parent::fetch($id);
13
  }
14
 
 
 
 
 
 
15
  public function create($attributes = array())
16
  {
17
  return parent::create($attributes);
12
  return parent::fetch($id);
13
  }
14
 
15
+ public function all($options = array())
16
+ {
17
+ return parent::all($options);
18
+ }
19
+
20
  public function create($attributes = array())
21
  {
22
  return parent::create($attributes);
razorpay-sdk/src/Entity.php CHANGED
@@ -19,21 +19,28 @@ class Entity extends Resource implements ArrayableInterface
19
  {
20
  $entityUrl = $this->getEntityUrl();
21
 
22
- if ($id === null)
23
- {
24
- $path = explode('\\', get_class($this));
25
- $class = strtolower(array_pop($path));
26
 
27
- $message = 'The ' . $class . ' id provided is null';
28
 
29
- $code = Errors\ErrorCode::BAD_REQUEST_ERROR;
 
30
 
31
- throw new Errors\BadRequestError($message, $code, 500);
 
 
 
 
32
  }
33
 
34
- $relativeUrl = $entityUrl . $id;
 
35
 
36
- return $this->request('GET', $relativeUrl);
 
 
 
 
37
  }
38
 
39
  protected function all($options = array())
@@ -133,7 +140,8 @@ class Entity extends Resource implements ArrayableInterface
133
  'refund',
134
  'order',
135
  'customer',
136
- 'token');
 
137
  }
138
 
139
  protected static function getEntityClass($name)
19
  {
20
  $entityUrl = $this->getEntityUrl();
21
 
22
+ $this->validateIdPresence($id);
 
 
 
23
 
24
+ $relativeUrl = $entityUrl . $id;
25
 
26
+ return $this->request('GET', $relativeUrl);
27
+ }
28
 
29
+ protected function validateIdPresence($id)
30
+ {
31
+ if ($id !== null)
32
+ {
33
+ return;
34
  }
35
 
36
+ $path = explode('\\', get_class($this));
37
+ $class = strtolower(array_pop($path));
38
 
39
+ $message = 'The ' . $class . ' id provided is null';
40
+
41
+ $code = Errors\ErrorCode::BAD_REQUEST_ERROR;
42
+
43
+ throw new Errors\BadRequestError($message, $code, 500);
44
  }
45
 
46
  protected function all($options = array())
140
  'refund',
141
  'order',
142
  'customer',
143
+ 'token',
144
+ 'settlement');
145
  }
146
 
147
  protected static function getEntityClass($name)
razorpay-sdk/src/Invoice.php CHANGED
@@ -69,8 +69,9 @@ class Invoice extends Entity
69
  public function notifyBy($medium)
70
  {
71
  $url = $this->getEntityUrl() . $this->id . '/notify_by/' . $medium;
 
72
 
73
- return (new Request())->request(Requests::POST, $url);
74
  }
75
 
76
  /**
@@ -107,7 +108,8 @@ class Invoice extends Entity
107
  public function delete()
108
  {
109
  $url = $this->getEntityUrl() . $this->id;
 
110
 
111
- return (new Request())->request(Requests::DELETE, $url);
112
  }
113
  }
69
  public function notifyBy($medium)
70
  {
71
  $url = $this->getEntityUrl() . $this->id . '/notify_by/' . $medium;
72
+ $r = new Request();
73
 
74
+ return $r->request(Requests::POST, $url);
75
  }
76
 
77
  /**
108
  public function delete()
109
  {
110
  $url = $this->getEntityUrl() . $this->id;
111
+ $r = new Request();
112
 
113
+ return $r->request(Requests::DELETE, $url);
114
  }
115
  }
razorpay-sdk/src/Payment.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  namespace Razorpay\Api;
4
 
 
 
5
  class Payment extends Entity
6
  {
7
  /**
@@ -17,6 +19,20 @@ class Payment extends Entity
17
  return parent::all($options);
18
  }
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  /**
21
  * @param $id Payment id
22
  */
2
 
3
  namespace Razorpay\Api;
4
 
5
+ use Requests;
6
+
7
  class Payment extends Entity
8
  {
9
  /**
19
  return parent::all($options);
20
  }
21
 
22
+ /**
23
+ * Patches given payment with new attributes
24
+ *
25
+ * @param array $attributes
26
+ *
27
+ * @return Payment
28
+ */
29
+ public function edit($attributes = array())
30
+ {
31
+ $url = $this->getEntityUrl() . $this->id;
32
+
33
+ return $this->request(Requests::PATCH, $url, $attributes);
34
+ }
35
+
36
  /**
37
  * @param $id Payment id
38
  */
razorpay-sdk/src/PaymentPage.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Razorpay\Api;
4
+
5
+ class PaymentPage extends Entity
6
+ {
7
+
8
+ public function fetch($id)
9
+ {
10
+ return parent::fetch($id);
11
+ }
12
+
13
+ public function all($options = array())
14
+ {
15
+ return parent::all($options);
16
+ }
17
+
18
+ public function activate($id)
19
+ {
20
+ $relativeUrl = $this->getEntityUrl() . $id . '/activate';
21
+
22
+ return $this->request('PATCH', $relativeUrl);
23
+ }
24
+
25
+ public function deactivate($id)
26
+ {
27
+ $relativeUrl = $this->getEntityUrl() . $id . '/deactivate';
28
+
29
+ return $this->request('PATCH', $relativeUrl);
30
+ }
31
+ }
razorpay-sdk/src/Request.php CHANGED
@@ -4,9 +4,18 @@ namespace Razorpay\Api;
4
 
5
  use Requests;
6
  use Exception;
 
7
  use Razorpay\Api\Errors;
8
  use Razorpay\Api\Errors\ErrorCode;
9
 
 
 
 
 
 
 
 
 
10
  /**
11
  * Request class to communicate to the request libarary
12
  */
@@ -32,9 +41,14 @@ class Request
32
  {
33
  $url = Api::getFullUrl($url);
34
 
 
 
 
 
35
  $options = array(
36
  'auth' => array(Api::getKey(), Api::getSecret()),
37
- 'timeout' => 60
 
38
  );
39
 
40
  $headers = $this->getRequestHeaders();
@@ -46,6 +60,11 @@ class Request
46
  return json_decode($response->body, true);
47
  }
48
 
 
 
 
 
 
49
  /**
50
  * Adds an additional header to all API requests
51
  * @param string $key Header key
4
 
5
  use Requests;
6
  use Exception;
7
+ use Requests_Hooks;
8
  use Razorpay\Api\Errors;
9
  use Razorpay\Api\Errors\ErrorCode;
10
 
11
+
12
+ // Available since PHP 5.5.19 and 5.6.3
13
+ // https://git.io/fAMVS | https://secure.php.net/manual/en/curl.constants.php
14
+ if (defined('CURL_SSLVERSION_TLSv1_1') === false)
15
+ {
16
+ define('CURL_SSLVERSION_TLSv1_1', 5);
17
+ }
18
+
19
  /**
20
  * Request class to communicate to the request libarary
21
  */
41
  {
42
  $url = Api::getFullUrl($url);
43
 
44
+ $hooks = new Requests_Hooks();
45
+
46
+ $hooks->register('curl.before_send', array($this, 'setCurlSslOpts'));
47
+
48
  $options = array(
49
  'auth' => array(Api::getKey(), Api::getSecret()),
50
+ 'hook' => $hooks,
51
+ 'timeout' => 60,
52
  );
53
 
54
  $headers = $this->getRequestHeaders();
60
  return json_decode($response->body, true);
61
  }
62
 
63
+ public function setCurlSslOpts($curl)
64
+ {
65
+ curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
66
+ }
67
+
68
  /**
69
  * Adds an additional header to all API requests
70
  * @param string $key Header key
razorpay-sdk/src/Settlement.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Razorpay\Api;
4
+
5
+ /**
6
+ * Settlement related actions can be done from here
7
+ */
8
+ class Settlement extends Entity
9
+ {
10
+ /**
11
+ * Fetch single settlement entity
12
+ * @param string $id
13
+ * @return Settlement
14
+ */
15
+ public function fetch($id)
16
+ {
17
+ return parent::fetch($id);
18
+ }
19
+
20
+ /**
21
+ * Get all settlements according to options
22
+ * @param array $options
23
+ * @return Collection
24
+ */
25
+ public function all($options = array())
26
+ {
27
+ return parent::all($options);
28
+ }
29
+
30
+ /**
31
+ * Get combined report of settlements
32
+ * @param array $options
33
+ * @return array
34
+ */
35
+ public function reports($options = array())
36
+ {
37
+ $relativeUrl = $this->getEntityUrl() . 'report/combined';
38
+
39
+ return $this->request('GET', $relativeUrl, $options);
40
+ }
41
+ }
42
+
razorpay-sdk/src/Subscription.php CHANGED
@@ -19,11 +19,11 @@ class Subscription extends Entity
19
  return parent::all($options);
20
  }
21
 
22
- public function cancel()
23
  {
24
  $relativeUrl = $this->getEntityUrl() . $this->id . '/cancel';
25
 
26
- return $this->request('POST', $relativeUrl);
27
  }
28
 
29
  public function createAddon($attributes = array())
@@ -32,4 +32,4 @@ class Subscription extends Entity
32
 
33
  return $this->request('POST', $relativeUrl, $attributes);
34
  }
35
- }
19
  return parent::all($options);
20
  }
21
 
22
+ public function cancel($attributes = array())
23
  {
24
  $relativeUrl = $this->getEntityUrl() . $this->id . '/cancel';
25
 
26
+ return $this->request('POST', $relativeUrl, $attributes);
27
  }
28
 
29
  public function createAddon($attributes = array())
32
 
33
  return $this->request('POST', $relativeUrl, $attributes);
34
  }
35
+ }
razorpay-sdk/src/VirtualAccount.php CHANGED
@@ -23,9 +23,9 @@ class VirtualAccount extends Entity
23
  {
24
  $relativeUrl = $this->getEntityUrl() . $this->id;
25
 
26
- $data = [
27
  'status' => 'closed'
28
- ];
29
 
30
  return $this->request('PATCH', $relativeUrl, $data);
31
  }
23
  {
24
  $relativeUrl = $this->getEntityUrl() . $this->id;
25
 
26
+ $data = array(
27
  'status' => 'closed'
28
+ );
29
 
30
  return $this->request('PATCH', $relativeUrl, $data);
31
  }
razorpay-sdk/src/Webhook.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Razorpay\Api;
4
+ use Requests;
5
+
6
+ class Webhook extends Entity
7
+ {
8
+ /**
9
+ * @param $id webhook id description
10
+ */
11
+ public function create($attributes = array())
12
+ {
13
+ return parent::create($attributes);
14
+ }
15
+
16
+ public function fetch($id)
17
+ {
18
+ return parent::fetch($id);
19
+ }
20
+
21
+ public function all($options = array())
22
+ {
23
+ return parent::all($options);
24
+ }
25
+
26
+ /**
27
+ * Patches given webhook with new attributes
28
+ *
29
+ * @param array $attributes
30
+ *
31
+ * @return Webhooks
32
+ */
33
+ public function edit($attributes = array(), $id)
34
+ {
35
+ $url = $this->getEntityUrl() . $id;
36
+
37
+ return $this->request(Requests::PUT, $url, $attributes);
38
+ }
39
+ }
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: razorpay
3
  Tags: razorpay, payments, india, woocommerce, ecommerce
4
  Requires at least: 3.9.2
5
- Tested up to: 5.6
6
- Stable tag: 2.6.0
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -41,8 +41,21 @@ This is compatible with WooCommerce>=2.4, including the new 3.0 release. It has
41
 
42
  == Changelog ==
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  = 2.6.0 =
45
- * Added webhook for virtual account credited event .
46
  * Tested upto WordPress 5.6 and WooCommerce 4.6.1
47
 
48
  = 2.5.0 =
2
  Contributors: razorpay
3
  Tags: razorpay, payments, india, woocommerce, ecommerce
4
  Requires at least: 3.9.2
5
+ Tested up to: 5.7.2
6
+ Stable tag: 2.7.0
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
41
 
42
  == Changelog ==
43
 
44
+ = 2.7.0 =
45
+ * Added auto-webhook setup feature.
46
+ * Updates Razorpay SDK.
47
+ * Tested upto WordPress 5.7.2 and WooCommerce 5.3.0
48
+
49
+ = 2.6.2 =
50
+ * Updated wc order syntax.
51
+ * Tested upto WordPress 5.7.1 and WooCommerce 5.2.2
52
+
53
+ = 2.6.1 =
54
+ * Added RAZORPAY ORDER ID in checkout argument.
55
+ * Tested upto WordPress 5.6.2 and WooCommerce 5.0.0
56
+
57
  = 2.6.0 =
58
+ * Added webhook for virtual account credited event.
59
  * Tested upto WordPress 5.6 and WooCommerce 4.6.1
60
 
61
  = 2.5.0 =
woo-razorpay.php CHANGED
@@ -3,10 +3,10 @@
3
  * Plugin Name: Razorpay for WooCommerce
4
  * Plugin URI: https://razorpay.com
5
  * Description: Razorpay Payment Gateway Integration for WooCommerce
6
- * Version: 2.6.0
7
- * Stable tag: 2.6.0
8
  * Author: Team Razorpay
9
- * WC tested up to: 4.6.1
10
  * Author URI: https://razorpay.com
11
  */
12
 
@@ -59,6 +59,7 @@ function woocommerce_razorpay_init()
59
  'payment_action',
60
  'order_success_message',
61
  'enable_webhook',
 
62
  'webhook_secret',
63
  );
64
 
@@ -164,10 +165,12 @@ function woocommerce_razorpay_init()
164
  if (version_compare(WOOCOMMERCE_VERSION, '2.0.0', '>='))
165
  {
166
  add_action("woocommerce_update_options_payment_gateways_{$this->id}", $cb);
 
167
  }
168
  else
169
  {
170
  add_action('woocommerce_update_options_payment_gateways', $cb);
 
171
  }
172
  }
173
 
@@ -224,9 +227,25 @@ function woocommerce_razorpay_init()
224
  'title' => __('Enable Webhook', $this->id),
225
  'type' => 'checkbox',
226
  'description' => "<span>$webhookUrl</span><br/><br/>Instructions and guide to <a href='https://github.com/razorpay/razorpay-woocommerce/wiki/Razorpay-Woocommerce-Webhooks'>Razorpay webhooks</a>",
227
- 'label' => __('Enable Razorpay Webhook <a href="https://dashboard.razorpay.com/#/app/webhooks">here</a> with the URL listed below.', $this->id),
228
  'default' => 'no'
229
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  'webhook_secret' => array(
231
  'title' => __('Webhook Secret', $this->id),
232
  'type' => 'text',
@@ -244,6 +263,111 @@ function woocommerce_razorpay_init()
244
  }
245
  }
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  public function admin_options()
248
  {
249
  echo '<h3>'.__('Razorpay Payment Gateway', $this->id) . '</h3>';
@@ -380,7 +504,7 @@ function woocommerce_razorpay_init()
380
  **/
381
  public function generate_razorpay_form($orderId)
382
  {
383
- $order = new WC_Order($orderId);
384
 
385
  try
386
  {
@@ -407,10 +531,15 @@ function woocommerce_razorpay_init()
407
  */
408
  private function getDefaultCheckoutArguments($order)
409
  {
 
 
410
  $callbackUrl = $this->getRedirectUrl();
411
 
412
  $orderId = $order->get_order_number();
413
 
 
 
 
414
  $productinfo = "Order $orderId";
415
  $mod_version = get_plugin_data(plugin_dir_path(__FILE__) . 'woo-razorpay.php')['Version'];
416
 
@@ -422,6 +551,7 @@ function woocommerce_razorpay_init()
422
  'notes' => array(
423
  'woocommerce_order_id' => $orderId
424
  ),
 
425
  'callback_url' => $callbackUrl,
426
  'prefill' => $this->getCustomerInfo($order),
427
  '_' => array(
@@ -507,7 +637,7 @@ function woocommerce_razorpay_init()
507
  $woocommerce->session->set($sessionKey, $razorpayOrderId);
508
 
509
  //update it in order comments
510
- $order = new WC_Order($orderId);
511
 
512
  $order->add_order_note("Razorpay OrderId: $razorpayOrderId");
513
 
@@ -516,7 +646,7 @@ function woocommerce_razorpay_init()
516
 
517
  protected function verifyOrderAmount($razorpayOrderId, $orderId)
518
  {
519
- $order = new WC_Order($orderId);
520
 
521
  $api = $this->getRazorpayApiInstance();
522
 
@@ -554,7 +684,7 @@ function woocommerce_razorpay_init()
554
 
555
  private function getOrderCreationData($orderId)
556
  {
557
- $order = new WC_Order($orderId);
558
 
559
  $data = array(
560
  'receipt' => $orderId,
@@ -683,7 +813,7 @@ EOT;
683
 
684
  public function process_refund($orderId, $amount = null, $reason = '')
685
  {
686
- $order = new WC_Order($orderId);
687
 
688
  if (! $order or ! $order->get_transaction_id())
689
  {
@@ -732,7 +862,7 @@ EOT;
732
  function process_payment($order_id)
733
  {
734
  global $woocommerce;
735
- $order = new WC_Order($order_id);
736
  $woocommerce->session->set(self::SESSION_KEY, $order_id);
737
 
738
  $orderKey = $this->getOrderKey($order);
@@ -775,7 +905,7 @@ EOT;
775
  global $woocommerce;
776
 
777
  $orderId = $woocommerce->session->get(self::SESSION_KEY);
778
- $order = new WC_Order($orderId);
779
 
780
  //
781
  // If the order has already been paid for
@@ -982,6 +1112,24 @@ EOT;
982
  }
983
 
984
  add_filter('woocommerce_payment_gateways', 'woocommerce_add_razorpay_gateway' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
985
  }
986
 
987
  // This is set to a priority of 10
3
  * Plugin Name: Razorpay for WooCommerce
4
  * Plugin URI: https://razorpay.com
5
  * Description: Razorpay Payment Gateway Integration for WooCommerce
6
+ * Version: 2.7.0
7
+ * Stable tag: 2.7.0
8
  * Author: Team Razorpay
9
+ * WC tested up to: 5.3.0
10
  * Author URI: https://razorpay.com
11
  */
12
 
59
  'payment_action',
60
  'order_success_message',
61
  'enable_webhook',
62
+ 'webhook_events',
63
  'webhook_secret',
64
  );
65
 
165
  if (version_compare(WOOCOMMERCE_VERSION, '2.0.0', '>='))
166
  {
167
  add_action("woocommerce_update_options_payment_gateways_{$this->id}", $cb);
168
+ add_action( "woocommerce_update_options_payment_gateways_{$this->id}", array($this, 'autoEnableWebhook'));
169
  }
170
  else
171
  {
172
  add_action('woocommerce_update_options_payment_gateways', $cb);
173
+ add_action( "woocommerce_update_options_payment_gateways", array($this, 'autoEnableWebhook'));
174
  }
175
  }
176
 
227
  'title' => __('Enable Webhook', $this->id),
228
  'type' => 'checkbox',
229
  'description' => "<span>$webhookUrl</span><br/><br/>Instructions and guide to <a href='https://github.com/razorpay/razorpay-woocommerce/wiki/Razorpay-Woocommerce-Webhooks'>Razorpay webhooks</a>",
230
+ 'label' => __('Enable Razorpay Webhook', $this->id),
231
  'default' => 'no'
232
  ),
233
+ 'webhook_events' => array(
234
+ 'title' => __('Webhook Events', $this->id),
235
+ 'type' => 'multiselect',
236
+ 'description' => "",
237
+ 'class' => 'wc-enhanced-select',
238
+ 'default' => '',
239
+ 'options' => array(
240
+ RZP_Webhook::PAYMENT_AUTHORIZED => 'payment.authorized',
241
+ RZP_Webhook::PAYMENT_FAILED => 'payment.failed',
242
+ RZP_Webhook::REFUNDED_CREATED => 'refund.created',
243
+ RZP_Webhook::VIRTUAL_ACCOUNT_CREDITED => 'virtual_account.credited',
244
+ ),
245
+ 'custom_attributes' => array(
246
+ 'data-placeholder' => __( 'Select Webhook Events', 'woocommerce' ),
247
+ ),
248
+ ),
249
  'webhook_secret' => array(
250
  'title' => __('Webhook Secret', $this->id),
251
  'type' => 'text',
263
  }
264
  }
265
 
266
+ public function autoEnableWebhook()
267
+ {
268
+ $webhookExist = false;
269
+ $webhookUrl = esc_url(admin_url('admin-post.php')) . '?action=rzp_wc_webhook';
270
+
271
+ $enabled = $this->getSetting('enable_webhook');
272
+ $secret = $this->getSetting('webhook_secret');
273
+
274
+ $eventsSubscribe = $this->getSetting('webhook_events');
275
+
276
+ $prepareEventsData = [];
277
+
278
+ if(empty($eventsSubscribe) == false)
279
+ {
280
+ foreach ($eventsSubscribe as $value)
281
+ {
282
+ $prepareEventsData[$value] = true;
283
+ }
284
+ }
285
+
286
+ if(in_array($_SERVER['SERVER_ADDR'], ["127.0.0.1","::1"]))
287
+ {
288
+ error_log(json_encode('Could not enable webhook for localhost'));
289
+ return;
290
+ }
291
+
292
+ if($enabled === 'no')
293
+ {
294
+ $data = [
295
+ 'url' => $webhookUrl,
296
+ 'active' => false,
297
+ ];
298
+ }
299
+ else
300
+ {
301
+ if (empty($eventsSubscribe) === true)
302
+ {
303
+ ?>
304
+ <div class="notice error is-dismissible" >
305
+ <p><b><?php _e( 'Please select the atlease one webhook event to enable webhook.' ); ?><b></p>
306
+ </div>
307
+ <?php
308
+ }
309
+
310
+ if (empty($secret) === true)
311
+ {
312
+ ?>
313
+ <div class="notice error is-dismissible" >
314
+ <p><b><?php _e( 'Please enter the webhook secret.' ); ?><b></p>
315
+ </div>
316
+ <?php
317
+ }
318
+
319
+ $data = [
320
+ 'url' => $webhookUrl,
321
+ 'active' => $enabled == 'yes' ? true: false,
322
+ 'events' => $prepareEventsData,
323
+ 'secret' => $secret,
324
+ ];
325
+
326
+ }
327
+
328
+ $webhook = $this->webhookAPI("GET", "webhooks");
329
+
330
+ foreach ($webhook['items'] as $key => $value)
331
+ {
332
+ if($value['url'] === $webhookUrl)
333
+ {
334
+ $webhookExist = true;
335
+ $webhookId = $value['id'];
336
+ }
337
+ }
338
+
339
+ if($webhookExist)
340
+ {
341
+ $this->webhookAPI('PUT', "webhooks/".$webhookId, $data);
342
+ }
343
+ else
344
+ {
345
+ $this->webhookAPI('POST', "webhooks/", $data);
346
+ }
347
+
348
+ }
349
+
350
+ protected function webhookAPI($method, $url, $data = array())
351
+ {
352
+ $webhook = [];
353
+ try
354
+ {
355
+ $api = $this->getRazorpayApiInstance();
356
+
357
+ $webhook = $api->request->request($method, $url, $data);
358
+ }
359
+ catch(Exception $e)
360
+ {
361
+ $log = array(
362
+ 'message' => $e->getMessage(),
363
+ );
364
+
365
+ error_log(json_encode($log));
366
+ }
367
+
368
+ return $webhook;
369
+ }
370
+
371
  public function admin_options()
372
  {
373
  echo '<h3>'.__('Razorpay Payment Gateway', $this->id) . '</h3>';
504
  **/
505
  public function generate_razorpay_form($orderId)
506
  {
507
+ $order = wc_get_order($orderId);
508
 
509
  try
510
  {
531
  */
532
  private function getDefaultCheckoutArguments($order)
533
  {
534
+ global $woocommerce;
535
+
536
  $callbackUrl = $this->getRedirectUrl();
537
 
538
  $orderId = $order->get_order_number();
539
 
540
+ $sessionKey = $this->getOrderSessionKey($orderId);
541
+ $razorpayOrderId = $woocommerce->session->get($sessionKey);
542
+
543
  $productinfo = "Order $orderId";
544
  $mod_version = get_plugin_data(plugin_dir_path(__FILE__) . 'woo-razorpay.php')['Version'];
545
 
551
  'notes' => array(
552
  'woocommerce_order_id' => $orderId
553
  ),
554
+ 'order_id' => $razorpayOrderId,
555
  'callback_url' => $callbackUrl,
556
  'prefill' => $this->getCustomerInfo($order),
557
  '_' => array(
637
  $woocommerce->session->set($sessionKey, $razorpayOrderId);
638
 
639
  //update it in order comments
640
+ $order = wc_get_order($orderId);
641
 
642
  $order->add_order_note("Razorpay OrderId: $razorpayOrderId");
643
 
646
 
647
  protected function verifyOrderAmount($razorpayOrderId, $orderId)
648
  {
649
+ $order = wc_get_order($orderId);
650
 
651
  $api = $this->getRazorpayApiInstance();
652
 
684
 
685
  private function getOrderCreationData($orderId)
686
  {
687
+ $order = wc_get_order($orderId);
688
 
689
  $data = array(
690
  'receipt' => $orderId,
813
 
814
  public function process_refund($orderId, $amount = null, $reason = '')
815
  {
816
+ $order = wc_get_order($orderId);
817
 
818
  if (! $order or ! $order->get_transaction_id())
819
  {
862
  function process_payment($order_id)
863
  {
864
  global $woocommerce;
865
+ $order = wc_get_order($order_id);
866
  $woocommerce->session->set(self::SESSION_KEY, $order_id);
867
 
868
  $orderKey = $this->getOrderKey($order);
905
  global $woocommerce;
906
 
907
  $orderId = $woocommerce->session->get(self::SESSION_KEY);
908
+ $order = wc_get_order($orderId);
909
 
910
  //
911
  // If the order has already been paid for
1112
  }
1113
 
1114
  add_filter('woocommerce_payment_gateways', 'woocommerce_add_razorpay_gateway' );
1115
+
1116
+ /**
1117
+ * Creating the settings link from the plugins page
1118
+ **/
1119
+ function razorpay_woo_plugin_links($links)
1120
+ {
1121
+ $pluginLinks = array(
1122
+ 'settings' => '<a href="'. esc_url(admin_url('admin.php?page=wc-settings&tab=checkout&section=razorpay')) .'">Settings</a>',
1123
+ 'docs' => '<a href="https://razorpay.com/docs/payment-gateway/ecommerce-plugins/woocommerce/woocommerce-pg/">Docs</a>',
1124
+ 'support' => '<a href="https://razorpay.com/contact/">Support</a>'
1125
+ );
1126
+
1127
+ $links = array_merge($links, $pluginLinks);
1128
+
1129
+ return $links;
1130
+ }
1131
+
1132
+ add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'razorpay_woo_plugin_links');
1133
  }
1134
 
1135
  // This is set to a priority of 10