summaryrefslogtreecommitdiffstats
path: root/apps/files_external/3rdparty/aws-sdk-php/Guzzle
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_external/3rdparty/aws-sdk-php/Guzzle')
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json31
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php41
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json20
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php103
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php15
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php193
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php9
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php26
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php8
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php32
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php7
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php3
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php20
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php23
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php16
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php20
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php47
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php6
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php28
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php92
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php12
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem941
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md51
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php110
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json32
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json26
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php16
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md25
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json29
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php47
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php23
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json19
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php10
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json28
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json28
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php49
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php15
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php3
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json28
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php19
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php100
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json44
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php7
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php32
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php5
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php152
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php12
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php9
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php113
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php11
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php20
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php7
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php36
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php25
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json29
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php28
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php13
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json30
90 files changed, 2223 insertions, 994 deletions
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json
new file mode 100644
index 00000000000..12404d381e9
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json
@@ -0,0 +1,31 @@
+{
+ "name": "guzzle/batch",
+ "description": "Guzzle batch component for batching requests, commands, or custom transfers",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["batch", "HTTP", "REST", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Batch": "" }
+ },
+ "suggest": {
+ "guzzle/http": "self.version",
+ "guzzle/service": "self.version"
+ },
+ "target-dir": "Guzzle/Batch",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php
index d02219a6929..94e623463b4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php
@@ -5,6 +5,7 @@ namespace Guzzle\Cache;
use Doctrine\Common\Cache\Cache;
use Guzzle\Common\Version;
use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Common\Exception\RuntimeException;
use Guzzle\Common\FromConfigInterface;
use Zend\Cache\Storage\StorageInterface;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json
new file mode 100644
index 00000000000..a5d999bd6d2
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/cache",
+ "description": "Guzzle cache adapter component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["cache", "adapter", "zf", "doctrine", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Cache": "" }
+ },
+ "target-dir": "Guzzle/Cache",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php
index 9c6874fb4e4..d1e842b1cf5 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php
@@ -37,7 +37,7 @@ class AbstractHasDispatcher implements HasDispatcherInterface
public function dispatch($eventName, array $context = array())
{
- $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
}
public function addSubscriber(EventSubscriberInterface $subscriber)
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php
index 185d05cddac..750e4839eea 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php
@@ -10,6 +10,15 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat
/** @var array Array of Exceptions */
protected $exceptions = array();
+ /** @var string Succinct exception message not including sub-exceptions */
+ private $shortMessage;
+
+ public function __construct($message = '', $code = 0, \Exception $previous = null)
+ {
+ parent::__construct($message, $code, $previous);
+ $this->shortMessage = $message;
+ }
+
/**
* Set all of the exceptions
*
@@ -36,19 +45,12 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat
*/
public function add($e)
{
+ $this->exceptions[] = $e;
if ($this->message) {
$this->message .= "\n";
}
- if ($e instanceof self) {
- $this->message .= '(' . get_class($e) . ")";
- foreach (explode("\n", $e->getMessage()) as $message) {
- $this->message .= "\n {$message}";
- }
- } elseif ($e instanceof \Exception) {
- $this->exceptions[] = $e;
- $this->message .= '(' . get_class($e) . ') ' . $e->getMessage();
- }
+ $this->message .= $this->getExceptionMessage($e, 0);
return $this;
}
@@ -82,4 +84,25 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat
{
return $this->exceptions ? $this->exceptions[0] : null;
}
+
+ private function getExceptionMessage(\Exception $e, $depth = 0)
+ {
+ static $sp = ' ';
+ $prefix = $depth ? str_repeat($sp, $depth) : '';
+ $message = "{$prefix}(" . get_class($e) . ') ' . $e->getFile() . ' line ' . $e->getLine() . "\n";
+
+ if ($e instanceof self) {
+ if ($e->shortMessage) {
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->shortMessage) . "\n";
+ }
+ foreach ($e as $ee) {
+ $message .= "\n" . $this->getExceptionMessage($ee, $depth + 1);
+ }
+ } else {
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getMessage()) . "\n";
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getTraceAsString()) . "\n";
+ }
+
+ return str_replace(getcwd(), '.', $message);
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php
index 75727ed9e25..806759806c8 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php
@@ -38,6 +38,8 @@ interface HasDispatcherInterface
*
* @param string $eventName Name of the event to dispatch
* @param array $context Context of the event
+ *
+ * @return Event Returns the created event object
*/
public function dispatch($eventName, array $context = array());
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php
index 9e394659b71..d018c1e1253 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php
@@ -7,7 +7,7 @@ namespace Guzzle\Common;
*/
class Version
{
- const VERSION = '3.7.0';
+ const VERSION = '3.9.2';
/**
* @var bool Set this value to true to enable warnings for deprecated functionality use. This should be on in your
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json
new file mode 100644
index 00000000000..c02fa690102
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json
@@ -0,0 +1,20 @@
+{
+ "name": "guzzle/common",
+ "homepage": "http://guzzlephp.org/",
+ "description": "Common libraries used by Guzzle",
+ "keywords": ["common", "event", "exception", "collection"],
+ "license": "MIT",
+ "require": {
+ "php": ">=5.3.2",
+ "symfony/event-dispatcher": ">=2.1"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Common": "" }
+ },
+ "target-dir": "Guzzle/Common",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php
index 1f34203acf8..3d7298dcdf2 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php
@@ -30,6 +30,8 @@ class Client extends AbstractHasDispatcher implements ClientInterface
const CURL_OPTIONS = 'curl.options';
const SSL_CERT_AUTHORITY = 'ssl.certificate_authority';
const DISABLE_REDIRECTS = RedirectPlugin::DISABLE;
+ const DEFAULT_SELECT_TIMEOUT = 1.0;
+ const MAX_HANDLES = 3;
/** @var Collection Default HTTP headers to set on each request */
protected $defaultHeaders;
@@ -109,11 +111,8 @@ class Client extends AbstractHasDispatcher implements ClientInterface
*/
public function setDefaultOption($keyOrPath, $value)
{
- if (strpos($keyOrPath, '/')) {
- $this->config->setPath($keyOrPath, $value);
- } else {
- $this->config[$keyOrPath] = $value;
- }
+ $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath;
+ $this->config->setPath($keyOrPath, $value);
return $this;
}
@@ -127,7 +126,9 @@ class Client extends AbstractHasDispatcher implements ClientInterface
*/
public function getDefaultOption($keyOrPath)
{
- return strpos($keyOrPath, '/') ? $this->config->getPath($keyOrPath) : $this->config[$keyOrPath];
+ $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath;
+
+ return $this->config->getPath($keyOrPath);
}
final public function setSslVerification($certificateAuthority = true, $verifyPeer = true, $verifyHost = 2)
@@ -142,7 +143,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface
} elseif ($certificateAuthority === false) {
unset($opts[CURLOPT_CAINFO]);
$opts[CURLOPT_SSL_VERIFYPEER] = false;
- $opts[CURLOPT_SSL_VERIFYHOST] = 2;
+ $opts[CURLOPT_SSL_VERIFYHOST] = 0;
} elseif ($verifyPeer !== true && $verifyPeer !== false && $verifyPeer !== 1 && $verifyPeer !== 0) {
throw new InvalidArgumentException('verifyPeer must be 1, 0 or boolean');
} elseif ($verifyHost !== 0 && $verifyHost !== 1 && $verifyHost !== 2) {
@@ -178,7 +179,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface
} else {
list($uri, $templateVars) = $uri;
}
- if (substr($uri, 0, 4) === 'http') {
+ if (strpos($uri, '://')) {
// Use absolute URLs as-is
$url = $this->expandTemplate($uri, $templateVars);
} else {
@@ -244,7 +245,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface
public function head($uri = null, $headers = null, array $options = array())
{
- return $this->createRequest('HEAD', $uri, $headers, $options);
+ return $this->createRequest('HEAD', $uri, $headers, null, $options);
}
public function delete($uri = null, $headers = null, $body = null, array $options = array())
@@ -307,7 +308,10 @@ class Client extends AbstractHasDispatcher implements ClientInterface
public function getCurlMulti()
{
if (!$this->curlMulti) {
- $this->curlMulti = new CurlMultiProxy();
+ $this->curlMulti = new CurlMultiProxy(
+ self::MAX_HANDLES,
+ $this->getConfig('select_timeout') ?: self::DEFAULT_SELECT_TIMEOUT
+ );
}
return $this->curlMulti;
@@ -335,31 +339,6 @@ class Client extends AbstractHasDispatcher implements ClientInterface
}
/**
- * Copy the cacert.pem file from the phar if it is not in the temp folder and validate the MD5 checksum
- *
- * @param bool $md5Check Set to false to not perform the MD5 validation
- *
- * @return string Returns the path to the extracted cacert
- * @throws RuntimeException if the file cannot be copied or there is a MD5 mismatch
- */
- public function preparePharCacert($md5Check = true)
- {
- $from = __DIR__ . '/Resources/cacert.pem';
- $certFile = sys_get_temp_dir() . '/guzzle-cacert.pem';
- if (!file_exists($certFile) && !copy($from, $certFile)) {
- throw new RuntimeException("Could not copy {$from} to {$certFile}: " . var_export(error_get_last(), true));
- } elseif ($md5Check) {
- $actualMd5 = md5_file($certFile);
- $expectedMd5 = trim(file_get_contents("{$from}.md5"));
- if ($actualMd5 != $expectedMd5) {
- throw new RuntimeException("{$certFile} MD5 mismatch: expected {$expectedMd5} but got {$actualMd5}");
- }
- }
-
- return $certFile;
- }
-
- /**
* Expand a URI template while merging client config settings into the template variables
*
* @param string $template Template to expand
@@ -458,7 +437,9 @@ class Client extends AbstractHasDispatcher implements ClientInterface
*/
protected function initSsl()
{
- if ('system' == ($authority = $this->config[self::SSL_CERT_AUTHORITY])) {
+ $authority = $this->config[self::SSL_CERT_AUTHORITY];
+
+ if ($authority === 'system') {
return;
}
@@ -467,13 +448,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface
}
if ($authority === true && substr(__FILE__, 0, 7) == 'phar://') {
- $authority = $this->preparePharCacert();
- $that = $this;
- $this->getEventDispatcher()->addListener('request.before_send', function ($event) use ($authority, $that) {
- if ($authority == $event['request']->getCurlOptions()->get(CURLOPT_CAINFO)) {
- $that->preparePharCacert(false);
- }
- });
+ $authority = self::extractPharCacert(__DIR__ . '/Resources/cacert.pem');
}
$this->setSslVerification($authority);
@@ -504,4 +479,46 @@ class Client extends AbstractHasDispatcher implements ClientInterface
return $this;
}
+
+ /**
+ * @deprecated
+ */
+ public function preparePharCacert($md5Check = true)
+ {
+ return sys_get_temp_dir() . '/guzzle-cacert.pem';
+ }
+
+ /**
+ * Copies the phar cacert from a phar into the temp directory.
+ *
+ * @param string $pharCacertPath Path to the phar cacert. For example:
+ * 'phar://aws.phar/Guzzle/Http/Resources/cacert.pem'
+ *
+ * @return string Returns the path to the extracted cacert file.
+ * @throws \RuntimeException Throws if the phar cacert cannot be found or
+ * the file cannot be copied to the temp dir.
+ */
+ public static function extractPharCacert($pharCacertPath)
+ {
+ // Copy the cacert.pem file from the phar if it is not in the temp
+ // folder.
+ $certFile = sys_get_temp_dir() . '/guzzle-cacert.pem';
+
+ if (!file_exists($pharCacertPath)) {
+ throw new \RuntimeException("Could not find $pharCacertPath");
+ }
+
+ if (!file_exists($certFile) ||
+ filesize($certFile) != filesize($pharCacertPath)
+ ) {
+ if (!copy($pharCacertPath, $certFile)) {
+ throw new \RuntimeException(
+ "Could not copy {$pharCacertPath} to {$certFile}: "
+ . var_export(error_get_last(), true)
+ );
+ }
+ }
+
+ return $certFile;
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php
index 78f9bde87f6..63c6d4206ba 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php
@@ -48,9 +48,16 @@ class CurlHandle
$method = $request->getMethod();
$bodyAsString = $requestCurlOptions->get(self::BODY_AS_STRING);
+ // Prepare url
+ $url = (string)$request->getUrl();
+ if(($pos = strpos($url, '#')) !== false ){
+ // strip fragment from url
+ $url = substr($url, 0, $pos);
+ }
+
// Array of default cURL options.
$curlOptions = array(
- CURLOPT_URL => $request->getUrl(),
+ CURLOPT_URL => $url,
CURLOPT_CONNECTTIMEOUT => 150,
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => false,
@@ -200,6 +207,12 @@ class CurlHandle
$curlOptions[CURLOPT_PROGRESSFUNCTION] = function () use ($mediator, $handle) {
$args = func_get_args();
$args[] = $handle;
+
+ // PHP 5.5 pushed the handle onto the start of the args
+ if (is_resource($args[0])) {
+ array_shift($args);
+ }
+
call_user_func_array(array($mediator, 'progress'), $args);
};
$curlOptions[CURLOPT_NOPROGRESS] = false;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php
index a8c569984d2..9e4e637222d 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php
@@ -7,6 +7,8 @@ use Guzzle\Common\Event;
use Guzzle\Http\Exception\MultiTransferException;
use Guzzle\Http\Exception\CurlException;
use Guzzle\Http\Message\RequestInterface;
+use Guzzle\Http\Message\EntityEnclosingRequestInterface;
+use Guzzle\Http\Exception\RequestException;
/**
* Send {@see RequestInterface} objects in parallel using curl_multi
@@ -39,8 +41,12 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
CURLM_INTERNAL_ERROR => array('CURLM_INTERNAL_ERROR', 'This can only be returned if libcurl bugs. Please report it to us!')
);
- public function __construct()
+ /** @var float */
+ protected $selectTimeout;
+
+ public function __construct($selectTimeout = 1.0)
{
+ $this->selectTimeout = $selectTimeout;
$this->multiHandle = curl_multi_init();
// @codeCoverageIgnoreStart
if ($this->multiHandle === false) {
@@ -76,13 +82,12 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
public function remove(RequestInterface $request)
{
$this->removeHandle($request);
- foreach ($this->requests as $i => $r) {
- if ($request === $r) {
- unset($this->requests[$i]);
- $this->requests = array_values($this->requests);
- $this->dispatch(self::REMOVE_REQUEST, array('request' => $request));
- return true;
- }
+ if (($index = array_search($request, $this->requests, true)) !== false) {
+ $request = $this->requests[$index];
+ unset($this->requests[$index]);
+ $this->requests = array_values($this->requests);
+ $this->dispatch(self::REMOVE_REQUEST, array('request' => $request));
+ return true;
}
return false;
@@ -130,8 +135,7 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
$multiException = new MultiTransferException('Errors during multi transfer');
while ($e = array_shift($exceptions)) {
- $multiException->add($e['exception']);
- $multiException->addFailedRequest($e['request']);
+ $multiException->addFailedRequestWithException($e['request'], $e['exception']);
}
// Add successful requests
@@ -155,10 +159,10 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
try {
$state = $request->setState(RequestInterface::STATE_TRANSFER);
if ($state == RequestInterface::STATE_TRANSFER) {
- // Add the request curl handle to the multi handle
- $this->checkCurlResult(curl_multi_add_handle($this->multiHandle, $this->createCurlHandle($request)->getHandle()));
+ $this->addHandle($request);
} else {
- // Requests might decide they don't need to be sent just before transfer (e.g. CachePlugin)
+ // Requests might decide they don't need to be sent just before
+ // transfer (e.g. CachePlugin)
$this->remove($request);
if ($state == RequestInterface::STATE_COMPLETE) {
$this->successful[] = $request;
@@ -170,6 +174,14 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
}
}
+ private function addHandle(RequestInterface $request)
+ {
+ $handle = $this->createCurlHandle($request)->getHandle();
+ $this->checkCurlResult(
+ curl_multi_add_handle($this->multiHandle, $handle)
+ );
+ }
+
/**
* Create a curl handle for a request
*
@@ -191,18 +203,9 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
*/
protected function perform()
{
- if (!$this->requests) {
- return;
- }
-
- // Initialize the handles with a very quick select timeout
- $active = $mrc = null;
- $this->executeHandles($active, $mrc, 0.001);
$event = new Event(array('curl_multi' => $this));
- $this->processMessages();
while ($this->requests) {
-
// Notify each request as polling
$blocking = $total = 0;
foreach ($this->requests as $request) {
@@ -214,33 +217,45 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
++$blocking;
}
}
-
if ($blocking == $total) {
// Sleep to prevent eating CPU because no requests are actually pending a select call
usleep(500);
} else {
- do {
- $this->executeHandles($active, $mrc, 1);
- } while ($active);
+ $this->executeHandles();
}
- $this->processMessages();
}
}
/**
+ * Execute and select curl handles
+ */
+ private function executeHandles()
+ {
+ // The first curl_multi_select often times out no matter what, but is usually required for fast transfers
+ $selectTimeout = 0.001;
+ $active = false;
+ do {
+ while (($mrc = curl_multi_exec($this->multiHandle, $active)) == CURLM_CALL_MULTI_PERFORM);
+ $this->checkCurlResult($mrc);
+ $this->processMessages();
+ if ($active && curl_multi_select($this->multiHandle, $selectTimeout) === -1) {
+ // Perform a usleep if a select returns -1: https://bugs.php.net/bug.php?id=61141
+ usleep(150);
+ }
+ $selectTimeout = $this->selectTimeout;
+ } while ($active);
+ }
+
+ /**
* Process any received curl multi messages
*/
private function processMessages()
{
- // Get messages from curl handles
while ($done = curl_multi_info_read($this->multiHandle)) {
+ $request = $this->resourceHash[(int) $done['handle']];
try {
- $request = $this->resourceHash[(int) $done['handle']];
$this->processResponse($request, $this->handles[$request], $done);
$this->successful[] = $request;
- } catch (MultiTransferException $e) {
- $this->removeErroredRequest($request, $e, false);
- throw $e;
} catch (\Exception $e) {
$this->removeErroredRequest($request, $e);
}
@@ -248,43 +263,14 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
}
/**
- * Execute and select curl handles until there is activity
- *
- * @param int $active Active value to update
- * @param int $mrc Multi result value to update
- * @param int $timeout Select timeout in seconds
- */
- private function executeHandles(&$active, &$mrc, $timeout = 1)
- {
- do {
- $mrc = curl_multi_exec($this->multiHandle, $active);
- } while ($mrc == CURLM_CALL_MULTI_PERFORM && $active);
- $this->checkCurlResult($mrc);
-
- // @codeCoverageIgnoreStart
- // Select the curl handles until there is any activity on any of the open file descriptors
- // See https://github.com/php/php-src/blob/master/ext/curl/multi.c#L170
- if ($active && $mrc == CURLM_OK && curl_multi_select($this->multiHandle, $timeout) == -1) {
- // Perform a usleep if a previously executed select returned -1
- // @see https://bugs.php.net/bug.php?id=61141
- usleep(100);
- }
- // @codeCoverageIgnoreEnd
- }
-
- /**
* Remove a request that encountered an exception
*
* @param RequestInterface $request Request to remove
* @param \Exception $e Exception encountered
- * @param bool $buffer Set to false to not buffer the exception
*/
- protected function removeErroredRequest(RequestInterface $request, \Exception $e = null, $buffer = true)
+ protected function removeErroredRequest(RequestInterface $request, \Exception $e = null)
{
- if ($buffer) {
- $this->exceptions[] = array('request' => $request, 'exception' => $e);
- }
-
+ $this->exceptions[] = array('request' => $request, 'exception' => $e);
$this->remove($request);
$this->dispatch(self::MULTI_EXCEPTION, array('exception' => $e, 'all_exceptions' => $this->exceptions));
}
@@ -310,23 +296,31 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
$this->removeHandle($request);
if (!$curlException) {
- $state = $request->setState(RequestInterface::STATE_COMPLETE, array('handle' => $handle));
- // Only remove the request if it wasn't resent as a result of the state change
- if ($state != RequestInterface::STATE_TRANSFER) {
- $this->remove($request);
- }
- } else {
- // Set the state of the request to an error
- $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $curlException));
- // Allow things to ignore the error if possible
- if ($state != RequestInterface::STATE_TRANSFER) {
- $this->remove($request);
- }
- // The error was not handled, so fail
- if ($state == RequestInterface::STATE_ERROR) {
- /** @var CurlException $curlException */
- throw $curlException;
+ if ($this->validateResponseWasSet($request)) {
+ $state = $request->setState(
+ RequestInterface::STATE_COMPLETE,
+ array('handle' => $handle)
+ );
+ // Only remove the request if it wasn't resent as a result of
+ // the state change
+ if ($state != RequestInterface::STATE_TRANSFER) {
+ $this->remove($request);
+ }
}
+ return;
+ }
+
+ // Set the state of the request to an error
+ $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $curlException));
+ // Allow things to ignore the error if possible
+ if ($state != RequestInterface::STATE_TRANSFER) {
+ $this->remove($request);
+ }
+
+ // The error was not handled, so fail
+ if ($state == RequestInterface::STATE_ERROR) {
+ /** @var CurlException $curlException */
+ throw $curlException;
}
}
@@ -339,9 +333,9 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
{
if (isset($this->handles[$request])) {
$handle = $this->handles[$request];
+ curl_multi_remove_handle($this->multiHandle, $handle->getHandle());
unset($this->handles[$request]);
unset($this->resourceHash[(int) $handle->getHandle()]);
- curl_multi_remove_handle($this->multiHandle, $handle->getHandle());
$handle->close();
}
}
@@ -387,4 +381,43 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface
);
}
}
+
+ /**
+ * @link https://github.com/guzzle/guzzle/issues/710
+ */
+ private function validateResponseWasSet(RequestInterface $request)
+ {
+ if ($request->getResponse()) {
+ return true;
+ }
+
+ $body = $request instanceof EntityEnclosingRequestInterface
+ ? $request->getBody()
+ : null;
+
+ if (!$body) {
+ $rex = new RequestException(
+ 'No response was received for a request with no body. This'
+ . ' could mean that you are saturating your network.'
+ );
+ $rex->setRequest($request);
+ $this->removeErroredRequest($request, $rex);
+ } elseif (!$body->isSeekable() || !$body->seek(0)) {
+ // Nothing we can do with this. Sorry!
+ $rex = new RequestException(
+ 'The connection was unexpectedly closed. The request would'
+ . ' have been retried, but attempting to rewind the'
+ . ' request body failed.'
+ );
+ $rex->setRequest($request);
+ $this->removeErroredRequest($request, $rex);
+ } else {
+ $this->remove($request);
+ // Add the request back to the batch to retry automatically.
+ $this->requests[] = $request;
+ $this->addHandle($request);
+ }
+
+ return false;
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php
index 665f029a79d..c5b80a7f57f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php
@@ -15,13 +15,16 @@ class CurlMultiProxy extends AbstractHasDispatcher implements CurlMultiInterface
protected $groups = array();
protected $queued = array();
protected $maxHandles;
+ protected $selectTimeout;
/**
- * @param int $maxHandles The maximum number of idle CurlMulti handles to allow to remain open
+ * @param int $maxHandles The maximum number of idle CurlMulti handles to allow to remain open
+ * @param float $selectTimeout timeout for curl_multi_select
*/
- public function __construct($maxHandles = 3)
+ public function __construct($maxHandles = 3, $selectTimeout = 1.0)
{
$this->maxHandles = $maxHandles;
+ $this->selectTimeout = $selectTimeout;
// You can get some weird "Too many open files" errors when sending a large amount of requests in parallel.
// These two statements autoload classes before a system runs out of file descriptors so that you can get back
// valuable error messages if you run out.
@@ -122,7 +125,7 @@ class CurlMultiProxy extends AbstractHasDispatcher implements CurlMultiInterface
}
// All are claimed, so create one
- $handle = new CurlMulti();
+ $handle = new CurlMulti($this->selectTimeout);
$handle->setEventDispatcher($this->getEventDispatcher());
$this->handles[] = $handle;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php
index 0a70c626bf0..5d1a0cd8724 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php
@@ -114,7 +114,12 @@ class RequestMediator
));
}
- return $this->request->getResponse()->getBody()->write($write);
+ if ($response = $this->request->getResponse()) {
+ return $response->getBody()->write($write);
+ } else {
+ // Unexpected data received before response headers - abort transfer
+ return 0;
+ }
}
/**
@@ -128,18 +133,15 @@ class RequestMediator
*/
public function readRequestBody($ch, $fd, $length)
{
- $read = '';
-
- if ($this->request->getBody()) {
- $read = $this->request->getBody()->read($length);
- if ($this->emitIo) {
- $this->request->dispatch('curl.callback.read', array(
- 'request' => $this->request,
- 'read' => $read
- ));
- }
+ if (!($body = $this->request->getBody())) {
+ return '';
+ }
+
+ $read = (string) $body->read($length);
+ if ($this->emitIo) {
+ $this->request->dispatch('curl.callback.read', array('request' => $this->request, 'read' => $read));
}
- return !$read ? '' : $read;
+ return $read;
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php
index 625be6ee173..b60d170f02a 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php
@@ -126,9 +126,11 @@ class EntityBody extends Stream implements EntityBodyInterface
public function getContentMd5($rawOutput = false, $base64Encode = false)
{
- $hash = self::getHash($this, 'md5', $rawOutput);
-
- return $hash && $base64Encode ? base64_encode($hash) : $hash;
+ if ($hash = self::getHash($this, 'md5', $rawOutput)) {
+ return $hash && $base64Encode ? base64_encode($hash) : $hash;
+ } else {
+ return false;
+ }
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php
index 9b98a8642ba..0ed0b47c254 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php
@@ -32,7 +32,6 @@ class BadResponseException extends RequestException
} else {
$label = 'Unsuccessful response';
$class = __CLASS__;
- $e = new self();
}
$message = $label . PHP_EOL . implode(PHP_EOL, array(
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php
index 5bea80f3337..91e384daee4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php
@@ -12,6 +12,7 @@ class MultiTransferException extends ExceptionCollection
{
protected $successfulRequests = array();
protected $failedRequests = array();
+ protected $exceptionForRequest = array();
/**
* Get all of the requests in the transfer
@@ -52,6 +53,37 @@ class MultiTransferException extends ExceptionCollection
}
/**
+ * Add to the array of failed requests and associate with exceptions
+ *
+ * @param RequestInterface $request Failed request
+ * @param \Exception $exception Exception to add and associate with
+ *
+ * @return self
+ */
+ public function addFailedRequestWithException(RequestInterface $request, \Exception $exception)
+ {
+ $this->add($exception)
+ ->addFailedRequest($request)
+ ->exceptionForRequest[spl_object_hash($request)] = $exception;
+
+ return $this;
+ }
+
+ /**
+ * Get the Exception that caused the given $request to fail
+ *
+ * @param RequestInterface $request Failed command
+ *
+ * @return \Exception|null
+ */
+ public function getExceptionForFailedRequest(RequestInterface $request)
+ {
+ $oid = spl_object_hash($request);
+
+ return isset($this->exceptionForRequest[$oid]) ? $this->exceptionForRequest[$oid] : null;
+ }
+
+ /**
* Set all of the successful requests
*
* @param array Array of requests
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php
index ae32dee9057..4cc17a835ae 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php
@@ -43,7 +43,7 @@ class IoEmittingEntityBody extends AbstractEntityBodyDecorator implements HasDis
public function dispatch($eventName, array $context = array())
{
- $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php
index d9c83d815be..212850a254a 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php
@@ -7,7 +7,6 @@ use Guzzle\Http\EntityBodyInterface;
use Guzzle\Http\QueryString;
use Guzzle\Http\RedirectPlugin;
use Guzzle\Http\Exception\RequestException;
-use Guzzle\Http\Mimetypes;
/**
* HTTP request that sends an entity-body in the request message (POST, PUT, PATCH, DELETE)
@@ -61,7 +60,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn
// Auto detect the Content-Type from the path of the request if possible
if ($contentType === null && !$this->hasHeader('Content-Type')) {
- $contentType = $this->body->getContentType() ?: Mimetypes::getInstance()->fromFilename($this->getPath());
+ $contentType = $this->body->getContentType();
}
if ($contentType) {
@@ -181,7 +180,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn
return $this;
}
- public function addPostFile($field, $filename = null, $contentType = null)
+ public function addPostFile($field, $filename = null, $contentType = null, $postname = null)
{
$data = null;
@@ -197,7 +196,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn
throw new RequestException('The path to a file must be a string');
} elseif (!empty($filename)) {
// Adding an empty file will cause cURL to error out
- $data = new PostFile($field, $filename, $contentType);
+ $data = new PostFile($field, $filename, $contentType, $postname);
}
if ($data) {
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
index d9c037de683..49ad4595d6f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
@@ -108,9 +108,10 @@ interface EntityEnclosingRequestInterface extends RequestInterface
* @param string $filename Full path to the file. Do not include the @ symbol.
* @param string $contentType Optional Content-Type to add to the Content-Disposition.
* Default behavior is to guess. Set to false to not specify.
+ * @param string $postname The name of the file, when posted. (e.g. rename the file)
* @return self
*/
- public function addPostFile($field, $filename = null, $contentType = null);
+ public function addPostFile($field, $filename = null, $contentType = null, $postname = null);
/**
* Add POST files to use in the upload
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php
index 3e82176a895..50597b2a698 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php
@@ -81,7 +81,8 @@ class Header implements HeaderInterface
for ($i = 0, $total = count($values); $i < $total; $i++) {
if (strpos($values[$i], $this->glue) !== false) {
- foreach (explode($this->glue, $values[$i]) as $v) {
+ // Explode on glue when the glue is not inside of a comma
+ foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) {
$values[] = trim($v);
}
unset($values[$i]);
@@ -122,23 +123,24 @@ class Header implements HeaderInterface
return new \ArrayIterator($this->toArray());
}
- /**
- * {@inheritdoc}
- * @todo Do not split semicolons when enclosed in quotes (e.g. foo="baz;bar")
- */
public function parseParams()
{
- $params = array();
+ $params = $matches = array();
$callback = array($this, 'trimHeader');
// Normalize the header into a single array and iterate over all values
foreach ($this->normalize()->toArray() as $val) {
$part = array();
- foreach (explode(';', $val) as $kvp) {
- $pieces = array_map($callback, explode('=', $kvp, 2));
+ foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
+ if (!preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
+ continue;
+ }
+ $pieces = array_map($callback, $matches[0]);
$part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : '';
}
- $params[] = $part;
+ if ($part) {
+ $params[] = $part;
+ }
}
return $params;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php
index ec282d9a911..8c7f6aefba0 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php
@@ -2,7 +2,6 @@
namespace Guzzle\Http\Message\Header;
-use Guzzle\Common\Collection;
use Guzzle\Common\ToArrayInterface;
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php
index 0beb7a7ce6b..141e66d7ed6 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php
@@ -14,16 +14,19 @@ class PostFile implements PostFileInterface
protected $fieldName;
protected $contentType;
protected $filename;
+ protected $postname;
/**
* @param string $fieldName Name of the field
- * @param string $filename Path to the file
+ * @param string $filename Local path to the file
+ * @param string $postname Remote post file name
* @param string $contentType Content-Type of the upload
*/
- public function __construct($fieldName, $filename, $contentType = null)
+ public function __construct($fieldName, $filename, $contentType = null, $postname = null)
{
$this->fieldName = $fieldName;
$this->setFilename($filename);
+ $this->postname = $postname ? $postname : basename($filename);
$this->contentType = $contentType ?: $this->guessContentType();
}
@@ -55,11 +58,23 @@ class PostFile implements PostFileInterface
return $this;
}
+ public function setPostname($postname)
+ {
+ $this->postname = $postname;
+
+ return $this;
+ }
+
public function getFilename()
{
return $this->filename;
}
+ public function getPostname()
+ {
+ return $this->postname;
+ }
+
public function setContentType($type)
{
$this->contentType = $type;
@@ -77,11 +92,11 @@ class PostFile implements PostFileInterface
// PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
// See: https://wiki.php.net/rfc/curl-file-upload
if (function_exists('curl_file_create')) {
- return curl_file_create($this->filename, $this->contentType, basename($this->filename));
+ return curl_file_create($this->filename, $this->contentType, $this->postname);
}
// Use the old style if using an older version of PHP
- $value = "@{$this->filename};filename=" . basename($this->filename);
+ $value = "@{$this->filename};filename=" . $this->postname;
if ($this->contentType) {
$value .= ';type=' . $this->contentType;
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php
index 99dc706946f..7f0779d1e85 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php
@@ -36,6 +36,15 @@ interface PostFileInterface
public function setFilename($path);
/**
+ * Set the post name of the file
+ *
+ * @param string $name The new name of the file
+ *
+ * @return self
+ */
+ public function setPostname($name);
+
+ /**
* Get the full path to the file
*
* @return string
@@ -43,6 +52,13 @@ interface PostFileInterface
public function getFilename();
/**
+ * Get the post name of the file
+ *
+ * @return string
+ */
+ public function getPostname();
+
+ /**
* Set the Content-Type of the file
*
* @param string $type Content type
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php
index 1fb9a01e165..f218cd5ce90 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php
@@ -275,7 +275,7 @@ class Request extends AbstractMessage implements RequestInterface
// Include the port in the Host header if it is not the default port for the scheme of the URL
$scheme = $this->url->getScheme();
- if (($scheme == 'http' && $port != 80) || ($scheme == 'https' && $port != 443)) {
+ if ($port && (($scheme == 'http' && $port != 80) || ($scheme == 'https' && $port != 443))) {
$this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost() . ':' . $port);
} else {
$this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost());
@@ -532,7 +532,8 @@ class Request extends AbstractMessage implements RequestInterface
public function dispatch($eventName, array $context = array())
{
$context['request'] = $this;
- $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
}
public function addSubscriber(EventSubscriberInterface $subscriber)
@@ -543,21 +544,6 @@ class Request extends AbstractMessage implements RequestInterface
}
/**
- * {@inheritdoc}
- * Adds a check for Host header changes
- */
- public function addHeader($header, $value)
- {
- parent::addHeader($header, $value);
-
- if ($header == 'host' || $header == 'Host') {
- $this->setHost((string) $this->getHeader('Host'));
- }
-
- return $this;
- }
-
- /**
* Get an array containing the request and response for event notifications
*
* @return array
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php
index f14d0879c36..ba00a767614 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php
@@ -7,7 +7,6 @@ use Guzzle\Common\Exception\InvalidArgumentException;
use Guzzle\Http\RedirectPlugin;
use Guzzle\Http\Url;
use Guzzle\Parser\ParserRegistry;
-use Guzzle\Plugin\Log\LogPlugin;
/**
* Default HTTP request factory used to create the default {@see Request} and {@see EntityEnclosingRequest} objects.
@@ -85,7 +84,7 @@ class RequestFactory implements RequestFactoryInterface
{
$method = strtoupper($method);
- if ($method == 'GET' || $method == 'HEAD' || $method == 'TRACE' || $method == 'OPTIONS') {
+ if ($method == 'GET' || $method == 'HEAD' || $method == 'TRACE') {
// Handle non-entity-enclosing request methods
$request = new $this->requestClass($method, $url, $headers);
if ($body) {
@@ -98,7 +97,7 @@ class RequestFactory implements RequestFactoryInterface
} else {
// Create an entity enclosing request by default
$request = new $this->entityEnclosingRequestClass($method, $url, $headers);
- if ($body) {
+ if ($body || $body === '0') {
// Add POST fields and files to an entity enclosing request if an array is used
if (is_array($body) || $body instanceof Collection) {
// Normalize PHP style cURL uploads with a leading '@' symbol
@@ -139,7 +138,7 @@ class RequestFactory implements RequestFactoryInterface
public function cloneRequestWithMethod(RequestInterface $request, $method)
{
// Create the request with the same client if possible
- if ($client = $request->getClient()) {
+ if ($request->getClient()) {
$cloned = $request->getClient()->createRequest($method, $request->getUrl(), $request->getHeaders());
} else {
$cloned = $this->create($method, $request->getUrl(), $request->getHeaders());
@@ -270,7 +269,7 @@ class RequestFactory implements RequestFactoryInterface
if ($value === false || $value === 0) {
$dispatcher = $request->getEventDispatcher();
foreach ($dispatcher->getListeners('request.error') as $listener) {
- if ($listener[0] == 'Guzzle\Http\Message\Request' && $listener[1] = 'onRequestError') {
+ if (is_array($listener) && $listener[0] == 'Guzzle\Http\Message\Request' && $listener[1] = 'onRequestError') {
$dispatcher->removeListener('request.error', $listener);
break;
}
@@ -294,22 +293,26 @@ class RequestFactory implements RequestFactoryInterface
protected function visit_timeout(RequestInterface $request, $value, $flags)
{
- $request->getCurlOptions()->set(CURLOPT_TIMEOUT_MS, $value * 1000);
+ if (defined('CURLOPT_TIMEOUT_MS')) {
+ $request->getCurlOptions()->set(CURLOPT_TIMEOUT_MS, $value * 1000);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_TIMEOUT, $value);
+ }
}
protected function visit_connect_timeout(RequestInterface $request, $value, $flags)
{
- $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT_MS, $value * 1000);
+ if (defined('CURLOPT_CONNECTTIMEOUT_MS')) {
+ $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT_MS, $value * 1000);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT, $value);
+ }
}
protected function visit_debug(RequestInterface $request, $value, $flags)
{
- if (class_exists('Guzzle\Plugin\Log\LogPlugin')) {
- $request->addSubscriber(LogPlugin::getDebugPlugin());
- } else {
- // @codeCoverageIgnoreStart
+ if ($value) {
$request->getCurlOptions()->set(CURLOPT_VERBOSE, true);
- // @codeCoverageIgnoreEnd
}
}
@@ -333,4 +336,24 @@ class RequestFactory implements RequestFactoryInterface
{
$request->getCurlOptions()->set(CURLOPT_PROXY, $value, $flags);
}
+
+ protected function visit_cert(RequestInterface $request, $value, $flags)
+ {
+ if (is_array($value)) {
+ $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value[0]);
+ $request->getCurlOptions()->set(CURLOPT_SSLCERTPASSWD, $value[1]);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value);
+ }
+ }
+
+ protected function visit_ssl_key(RequestInterface $request, $value, $flags)
+ {
+ if (is_array($value)) {
+ $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value[0]);
+ $request->getCurlOptions()->set(CURLOPT_SSLKEYPASSWD, $value[1]);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value);
+ }
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php
index 5f31b5060be..6088f10e994 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php
@@ -88,6 +88,12 @@ interface RequestFactoryInterface
* indefinitely.
* "verify": Set to true to enable SSL cert validation (the default), false to disable, or supply the path
* to a CA bundle to enable verification using a custom certificate.
+ * "cert": Set to a string to specify the path to a file containing a PEM formatted certificate. If a
+ * password is required, then set an array containing the path to the PEM file followed by the the
+ * password required for the certificate.
+ * "ssl_key": Specify the path to a file containing a private SSL key in PEM format. If a password is
+ * required, then set an array containing the path to the SSL key followed by the password required for
+ * the certificate.
* "proxy": Specify an HTTP proxy (e.g. "http://username:password@192.168.16.1:10")
* "debug": Set to true to display all data sent over the wire
* @param int $flags Bitwise flags to apply when applying the options to the request. Defaults to no special
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php
index 654ea761ff3..153e2dd9636 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php
@@ -865,18 +865,38 @@ class Response extends AbstractMessage implements \Serializable
}
/**
- * Parse the XML response body and return a SimpleXMLElement
+ * Parse the XML response body and return a \SimpleXMLElement.
+ *
+ * In order to prevent XXE attacks, this method disables loading external
+ * entities. If you rely on external entities, then you must parse the
+ * XML response manually by accessing the response body directly.
*
* @return \SimpleXMLElement
* @throws RuntimeException if the response body is not in XML format
+ * @link http://websec.io/2012/08/27/Preventing-XXE-in-PHP.html
*/
public function xml()
{
+ $errorMessage = null;
+ $internalErrors = libxml_use_internal_errors(true);
+ $disableEntities = libxml_disable_entity_loader(true);
+ libxml_clear_errors();
+
try {
- // Allow XML to be retrieved even if there is no response body
- $xml = new \SimpleXMLElement((string) $this->body ?: '<root />');
+ $xml = new \SimpleXMLElement((string) $this->body ?: '<root />', LIBXML_NONET);
+ if ($error = libxml_get_last_error()) {
+ $errorMessage = $error->message;
+ }
} catch (\Exception $e) {
- throw new RuntimeException('Unable to parse response body into XML: ' . $e->getMessage());
+ $errorMessage = $e->getMessage();
+ }
+
+ libxml_clear_errors();
+ libxml_use_internal_errors($internalErrors);
+ libxml_disable_entity_loader($disableEntities);
+
+ if ($errorMessage) {
+ throw new RuntimeException('Unable to parse response body into XML: ' . $errorMessage);
}
return $xml;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php
index 15af061f6f3..d71586a05b3 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php
@@ -943,6 +943,8 @@ class Mimetypes
*/
public function fromExtension($extension)
{
+ $extension = strtolower($extension);
+
return isset($this->mimetypes[$extension]) ? $this->mimetypes[$extension] : null;
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php
index 62bdfa8c7ae..38a26407382 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php
@@ -3,6 +3,8 @@
namespace Guzzle\Http;
use Guzzle\Common\Collection;
+use Guzzle\Common\Exception\RuntimeException;
+use Guzzle\Http\QueryAggregator\DuplicateAggregator;
use Guzzle\Http\QueryAggregator\QueryAggregatorInterface;
use Guzzle\Http\QueryAggregator\PhpAggregator;
@@ -33,7 +35,7 @@ class QueryString extends Collection
protected $aggregator;
/** @var array Cached PHP aggregator */
- protected static $defaultAggregator = null;
+ private static $defaultAggregator = null;
/**
* Parse a query string into a QueryString object
@@ -45,31 +47,40 @@ class QueryString extends Collection
public static function fromString($query)
{
$q = new static();
+ if ($query === '') {
+ return $q;
+ }
- if ($query || $query === '0') {
- if ($query[0] == '?') {
- $query = substr($query, 1);
- }
- foreach (explode('&', $query) as $kvp) {
- $parts = explode('=', $kvp, 2);
- $key = rawurldecode($parts[0]);
-
- if ($paramIsPhpStyleArray = substr($key, -2) == '[]') {
- $key = substr($key, 0, -2);
- }
+ $foundDuplicates = $foundPhpStyle = false;
- if (isset($parts[1])) {
- $value = rawurldecode(str_replace('+', '%20', $parts[1]));
- if ($paramIsPhpStyleArray && !$q->hasKey($key)) {
- $value = array($value);
- }
+ foreach (explode('&', $query) as $kvp) {
+ $parts = explode('=', $kvp, 2);
+ $key = rawurldecode($parts[0]);
+ if ($paramIsPhpStyleArray = substr($key, -2) == '[]') {
+ $foundPhpStyle = true;
+ $key = substr($key, 0, -2);
+ }
+ if (isset($parts[1])) {
+ $value = rawurldecode(str_replace('+', '%20', $parts[1]));
+ if (isset($q[$key])) {
$q->add($key, $value);
+ $foundDuplicates = true;
+ } elseif ($paramIsPhpStyleArray) {
+ $q[$key] = array($value);
} else {
- $q->add($key, null);
+ $q[$key] = $value;
}
+ } else {
+ // Uses false by default to represent keys with no trailing "=" sign.
+ $q->add($key, false);
}
}
+ // Use the duplicate aggregator if duplicates were found and not using PHP style arrays
+ if ($foundDuplicates && !$foundPhpStyle) {
+ $q->setAggregator(new DuplicateAggregator());
+ }
+
return $q;
}
@@ -77,6 +88,7 @@ class QueryString extends Collection
* Convert the query string parameters to a query string string
*
* @return string
+ * @throws RuntimeException
*/
public function __toString()
{
@@ -84,21 +96,12 @@ class QueryString extends Collection
return '';
}
- $queryString = '';
-
+ $queryList = array();
foreach ($this->prepareData($this->data) as $name => $value) {
- foreach ((array) $value as $v) {
- if ($queryString) {
- $queryString .= $this->fieldSeparator;
- }
- $queryString .= $name;
- if ($v !== self::BLANK) {
- $queryString .= $this->valueSeparator . $v;
- }
- }
+ $queryList[] = $this->convertKvp($name, $value);
}
- return $queryString;
+ return implode($this->fieldSeparator, $queryList);
}
/**
@@ -255,7 +258,10 @@ class QueryString extends Collection
$temp = array();
foreach ($data as $key => $value) {
- if (is_array($value)) {
+ if ($value === false || $value === null) {
+ // False and null will not include the "=". Use an empty string to include the "=".
+ $temp[$this->encodeValue($key)] = $value;
+ } elseif (is_array($value)) {
$temp = array_merge($temp, $this->aggregator->aggregate($key, $value, $this));
} else {
$temp[$this->encodeValue($key)] = $this->encodeValue($value);
@@ -264,4 +270,28 @@ class QueryString extends Collection
return $temp;
}
+
+ /**
+ * Converts a key value pair that can contain strings, nulls, false, or arrays
+ * into a single string.
+ *
+ * @param string $name Name of the field
+ * @param mixed $value Value of the field
+ * @return string
+ */
+ private function convertKvp($name, $value)
+ {
+ if ($value === self::BLANK || $value === null || $value === false) {
+ return $name;
+ } elseif (!is_array($value)) {
+ return $name . $this->valueSeparator . $value;
+ }
+
+ $result = '';
+ foreach ($value as $v) {
+ $result .= $this->convertKvp($name, $v) . $this->fieldSeparator;
+ }
+
+ return rtrim($result, $this->fieldSeparator);
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php
index d0bc867e3aa..a34893a661e 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php
@@ -22,7 +22,6 @@ class ReadLimitEntityBody extends AbstractEntityBodyDecorator
{
parent::__construct($body);
$this->setLimit($limit)->setOffset($offset);
- $this->body->seek($offset);
}
/**
@@ -36,7 +35,8 @@ class ReadLimitEntityBody extends AbstractEntityBodyDecorator
public function isConsumed()
{
- return (($this->offset + $this->limit) - $this->body->ftell()) <= 0;
+ return $this->body->isConsumed() ||
+ ($this->body->ftell() >= $this->offset + $this->limit);
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php
index 391edb152b7..1a824b8b76d 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php
@@ -68,7 +68,7 @@ class RedirectPlugin implements EventSubscriberInterface
// Trace the original request based on parameter history
$original = $this->getOriginalRequest($request);
- // Terminating condition to set the effective repsonse on the original request
+ // Terminating condition to set the effective response on the original request
if (!$response->isRedirect() || !$response->hasHeader('Location')) {
if ($request !== $original) {
// This is a terminating redirect response, so set it on the original request
@@ -123,9 +123,9 @@ class RedirectPlugin implements EventSubscriberInterface
$redirectRequest = null;
$strict = $original->getParams()->get(self::STRICT_REDIRECTS);
- // Use a GET request if this is an entity enclosing request and we are not forcing RFC compliance, but rather
- // emulating what all browsers would do
- if ($request instanceof EntityEnclosingRequestInterface && !$strict && $statusCode <= 302) {
+ // Switch method to GET for 303 redirects. 301 and 302 redirects also switch to GET unless we are forcing RFC
+ // compliance to emulate what most browsers do. NOTE: IE only switches methods on 301/302 when coming from a POST.
+ if ($request instanceof EntityEnclosingRequestInterface && ($statusCode == 303 || (!$strict && $statusCode <= 302))) {
$redirectRequest = RequestFactory::getInstance()->cloneRequestWithMethod($request, 'GET');
} else {
$redirectRequest = clone $request;
@@ -141,7 +141,7 @@ class RedirectPlugin implements EventSubscriberInterface
$originalUrl = $redirectRequest->getUrl(true);
// Remove query string parameters and just take what is present on the redirect Location header
$originalUrl->getQuery()->clear();
- $location = $originalUrl->combine((string) $location);
+ $location = $originalUrl->combine((string) $location, true);
}
$redirectRequest->setUrl($location);
@@ -174,7 +174,7 @@ class RedirectPlugin implements EventSubscriberInterface
/**
* Prepare the request for redirection and enforce the maximum number of allowed redirects per client
*
- * @param RequestInterface $original Origina request
+ * @param RequestInterface $original Original request
* @param RequestInterface $request Request to prepare and validate
* @param Response $response The current response
*
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem
index 99b310bce91..9794dfb70f4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem
@@ -1,12 +1,12 @@
##
## ca-bundle.crt -- Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
+## Certificate data from Mozilla as of: Tue Apr 22 08:29:31 2014
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
+## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
@@ -14,7 +14,6 @@
## Just configure this file as the SSLCACertificateFile.
##
-# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
GTE CyberTrust Global Root
==========================
@@ -91,46 +90,6 @@ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----
-Digital Signature Trust Co. Global CA 1
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
-MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
-NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
-o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
-kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
-RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 3
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
-MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
-VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
-xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
-up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
-mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority
=======================================================
-----BEGIN CERTIFICATE-----
@@ -147,44 +106,6 @@ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
Tqj/ZA1k
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
-k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
-WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
-XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
-lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
-nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
-wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
-ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
-1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
-LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G2
============================================================
-----BEGIN CERTIFICATE-----
@@ -304,54 +225,6 @@ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
on+jjBXu
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
-bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
-rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
-Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
-FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
-y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
-a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
-D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
-azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
-b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
-tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
-C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
-0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
-Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
-JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
-0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
-JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
-GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G3
============================================================
-----BEGIN CERTIFICATE-----
@@ -430,11 +303,11 @@ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
Entrust.net Premium 2048 Secure Server CA
=========================================
-----BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
+NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
@@ -442,14 +315,13 @@ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
-AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
-gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
-o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
-2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
-OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
+VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
+KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
+T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
+J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
+nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
-----END CERTIFICATE-----
Baltimore CyberTrust Root
@@ -507,26 +379,6 @@ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
-----END CERTIFICATE-----
-Equifax Secure eBusiness CA 2
-=============================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
-ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
-DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
-2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
-BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
-JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
-uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
-jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
-78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
-V+GRMOrN
------END CERTIFICATE-----
-
AddTrust Low-Value Services Root
================================
-----BEGIN CERTIFICATE-----
@@ -772,31 +624,6 @@ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
-----END CERTIFICATE-----
-UTN-USER First-Network Applications
-===================================
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
-BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
-WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
-YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
-cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
-mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
-DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
-Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
-P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
-j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
-HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
-cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
-CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
-RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
-xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
-DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
-
America Online Root Certification Authority 1
=============================================
-----BEGIN CERTIFICATE-----
@@ -1084,26 +911,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
FL39vmwLAw==
-----END CERTIFICATE-----
-Sonera Class 1 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
-NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
-7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
-EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
-0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
-2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
-HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
-iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
-28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
-yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
-vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
-qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
-IRlXvVWa
------END CERTIFICATE-----
-
Sonera Class 2 Root CA
======================
-----BEGIN CERTIFICATE-----
@@ -1170,34 +977,6 @@ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
-----END CERTIFICATE-----
-TDC OCES Root CA
-================
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
-ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
-MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
-nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
-zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
-iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
-dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
-3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
-5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
-ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
-cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
-Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
-LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
-MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
-aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
-+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
-NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
-A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
-A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
-AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
-AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
-
UTN DATACorp SGC Root CA
========================
-----BEGIN CERTIFICATE-----
@@ -1223,32 +1002,6 @@ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
-----END CERTIFICATE-----
-UTN USERFirst Email Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
-BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
-OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
-FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
-ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
-dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
-B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
-om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
-TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
-yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
-AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
-HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
-bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
-xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
-5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
-NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
-w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
UTN USERFirst Hardware Root CA
==============================
-----BEGIN CERTIFICATE-----
@@ -1275,31 +1028,6 @@ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
nfhmqA==
-----END CERTIFICATE-----
-UTN USERFirst Object Root CA
-============================
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
-BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
-NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
-HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
-dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
-loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
-w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
-lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
-RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
-BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
-ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
-c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
-DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
-NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
-PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
-qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
-hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
------END CERTIFICATE-----
-
Camerfirma Chambers of Commerce Root
====================================
-----BEGIN CERTIFICATE-----
@@ -1354,42 +1082,6 @@ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
-----END CERTIFICATE-----
-NetLock Qualified (Class QA) Root
-=================================
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
-eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
-bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
-LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
-dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
-aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
-CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
-8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
-m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
-0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
-0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
-YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
-a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
-YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
-YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
-ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
-L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
-Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
-aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
-YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
-IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
-DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
-wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
-W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
-R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
-5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
-
NetLock Notary (Class A) Root
=============================
-----BEGIN CERTIFICATE-----
@@ -1626,54 +1318,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
-----END CERTIFICATE-----
-Firmaprofesional Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
-GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
-Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
-ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
-MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
-OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
-ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
-j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
-lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
-3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
-NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
-KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
-AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
-wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
-7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
-VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-Wells Fargo Root CA
-===================
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
-bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
-MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
-x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
-E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
-OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
-sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
-YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
-BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
-ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
-m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
-OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
-tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-
Swisscom Root CA 1
==================
-----BEGIN CERTIFICATE-----
@@ -1886,37 +1530,6 @@ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
UrbnBEI=
-----END CERTIFICATE-----
-SwissSign Platinum CA - G2
-==========================
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
-HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
-U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
-KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
-669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
-eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
-WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
-j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
-8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
-aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
-domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
-+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
-CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
-zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
-Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
-NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
-U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
-KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
-9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
-aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
-OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
-Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
-IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
-
SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
@@ -2254,32 +1867,6 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
-----END CERTIFICATE-----
-S-TRUST Authentication and Encryption Root CA 2005 PN
-=====================================================
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
-cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
-LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
-NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
-ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
-aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
-b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
-4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
-g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
-eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
-KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
-/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
-bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
-D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
-P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
-nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
-F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
-Hz2eBIPdltkdOpQ=
------END CERTIFICATE-----
-
Microsec e-Szigno Root CA
=========================
-----BEGIN CERTIFICATE-----
@@ -2475,28 +2062,6 @@ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
Cm26OWMohpLzGITY+9HPBVZkVw==
-----END CERTIFICATE-----
-ComSign CA
-==========
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
-EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
-MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
-Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
-ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
-P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
-GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
-YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
-rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
-oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
-AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
-VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
-QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
-mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
-/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
-zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
-
ComSign Secured CA
==================
-----BEGIN CERTIFICATE-----
@@ -3045,22 +2610,6 @@ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
-VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
-yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
-XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
-0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
-RjXZ+Hxb
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority
=======================================================
-----BEGIN CERTIFICATE-----
@@ -3144,29 +2693,6 @@ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
kpeDMdmztcpHWD9f
-----END CERTIFICATE-----
-TC TrustCenter Universal CA III
-===============================
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
-Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
-QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
-KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
-QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
-juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
-CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
-M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
-A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
-g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
-KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
-BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
-woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
-
Autoridad de Certificacion Firmaprofesional CIF A62634068
=========================================================
-----BEGIN CERTIFICATE-----
@@ -3893,3 +3419,448 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
dcGWxZ0=
-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2007
+=================================================
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
+DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
+a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
+YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
+KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
+KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
+rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
+AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
+Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
+Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
+BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
+poRq0Tl9
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
+Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
+LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
+ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
+BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
+KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
+p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
+AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
+4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
+eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
+MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
+PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
+OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
+2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
+dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
+X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 EV 2009
+=================================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
+egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
+zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
+7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
+sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
+11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
+cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
+ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
+MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
+b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
+c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
+PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
+ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
+NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
+w9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
+
+PSCProcert
+==========
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
+ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
+MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
+dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
+cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
+IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
+MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
+DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
+ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
+Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
+wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
+3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
+RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
+EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
+0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
+td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
+Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
+r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
+AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
+Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
+xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
+ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
+EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
+Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
+ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
+9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
+MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
+LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
+ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
+YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
+dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
+T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
+g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
+uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
+n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
+FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
+5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
+3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
+poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
+eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
+
+China Internet Network Information Center EV Certificates Root
+==============================================================
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
+BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
+aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
+Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
+A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
+PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
+cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
+jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
+98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
+klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
+KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
+7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
+glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
+0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
+7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
+5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
+-----END CERTIFICATE-----
+
+Swisscom Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
+MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
+LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
+ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
+wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
+Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
+SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
+NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
+mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
+Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
+qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
+BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
+MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
+v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
+82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
+o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
+a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
+OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
+mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
+rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
+5OfNeOI5wSsSnqaeG8XmDtkx2Q==
+-----END CERTIFICATE-----
+
+Swisscom Root EV CA 2
+=====================
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
+BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
+cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
+MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
+HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
+Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
+o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
+Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
+GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
+qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
+Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
+alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
+m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
+bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
+xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
+MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
+bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
+j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
+wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
+XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
+59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
+23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
+J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
+HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
+uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
+l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
+-----END CERTIFICATE-----
+
+CA Disig Root R1
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
+3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
+u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
+m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
+CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
+YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
+vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
+LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
+ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
+XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
+04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
+LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
+CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
+VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
+YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
+ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
+lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
+UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
+a7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
+
+CA Disig Root R2
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
+w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
+xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
+A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
+GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
+g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
+5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
+koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
+Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
+Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
+Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
+sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
+dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
+1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
+mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
+utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
+sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
+UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
+7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
+
+ACCVRAIZ1
+=========
+-----BEGIN CERTIFICATE-----
+MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
+SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
+MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
+UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
+jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
+RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
+aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
+0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
+WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
+8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
+5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
+9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
+Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
+Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
+Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
+VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
+Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
+QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
+AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
+YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
+AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
+IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
+aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
+dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
+MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
+hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
+R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
+YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
+nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
+TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
+sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
+I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
+Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
+3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
+EfbRD0tVNEYqi4Y7
+-----END CERTIFICATE-----
+
+TWCA Global Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
+CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
+QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
+EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
+Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
+nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
+r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
+Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
+tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
+KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
+sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
+yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
+kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
+zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
+cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
+LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
+8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
+/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
+lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
+A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
+i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
+EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
+zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
+-----END CERTIFICATE-----
+
+TeliaSonera Root CA v1
+======================
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
+CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
+MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
+VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
+3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
+B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
+Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
+oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
+F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
+oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
+gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
+TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
+AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
+DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
+zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
+pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
+G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
+c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
+JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
+qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
+Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
+WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
+
+E-Tugra Certification Authority
+===============================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
+DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
+ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
+NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
+QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
+cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
+DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
+hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
+CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
+ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
+BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
+E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
+rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
+jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
+dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
+kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
+XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
+VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
+a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
+dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
+KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
+Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
+8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
+C7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 2
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
+MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
+SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
+vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
+2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
+WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
+YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
+r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
+vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
+3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
+-----END CERTIFICATE-----
+
+Atos TrustedRoot 2011
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
+cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
+MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
+A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
+hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
+54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
+HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
+z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
+l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
+bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
+k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
+TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
+61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
+3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5 b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5
deleted file mode 100644
index 56f626a9348..00000000000
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5
+++ /dev/null
@@ -1 +0,0 @@
-47961e7ef15667c93cd99be01b51f00a
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php
index e7fe6284460..6a4e7724514 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php
@@ -3,7 +3,6 @@
namespace Guzzle\Http;
use Guzzle\Common\Exception\InvalidArgumentException;
-use Guzzle\Parser\ParserRegistry;
/**
* Parses and generates URLs based on URL parts. In favor of performance, URL parts are not validated.
@@ -27,20 +26,25 @@ class Url
* @param string $url Full URL used to create a Url object
*
* @return Url
+ * @throws InvalidArgumentException
*/
public static function factory($url)
{
static $defaults = array('scheme' => null, 'host' => null, 'path' => null, 'port' => null, 'query' => null,
'user' => null, 'pass' => null, 'fragment' => null);
- $parts = parse_url($url) + $defaults;
+ if (false === ($parts = parse_url($url))) {
+ throw new InvalidArgumentException('Was unable to parse malformed url: ' . $url);
+ }
+
+ $parts += $defaults;
// Convert the query string into a QueryString object
if ($parts['query'] || 0 !== strlen($parts['query'])) {
$parts['query'] = QueryString::fromString($parts['query']);
}
- return new self($parts['scheme'], $parts['host'], $parts['user'],
+ return new static($parts['scheme'], $parts['host'], $parts['user'],
$parts['pass'], $parts['port'], $parts['path'], $parts['query'],
$parts['fragment']);
}
@@ -156,6 +160,8 @@ class Url
*/
public function getParts()
{
+ $query = (string) $this->query;
+
return array(
'scheme' => $this->scheme,
'user' => $this->username,
@@ -163,7 +169,7 @@ class Url
'host' => $this->host,
'port' => $this->port,
'path' => $this->getPath(),
- 'query' => (string) $this->query ?: null,
+ 'query' => $query !== '' ? $query : null,
'fragment' => $this->fragment,
);
}
@@ -207,6 +213,12 @@ class Url
*/
public function setScheme($scheme)
{
+ if ($this->scheme == 'http' && $this->port == 80) {
+ $this->port = null;
+ } elseif ($this->scheme == 'https' && $this->port == 443) {
+ $this->port = null;
+ }
+
$this->scheme = $scheme;
return $this;
@@ -263,12 +275,13 @@ class Url
*/
public function setPath($path)
{
+ static $pathReplace = array(' ' => '%20', '?' => '%3F');
if (is_array($path)) {
- $this->path = '/' . implode('/', $path);
- } else {
- $this->path = (string) $path;
+ $path = '/' . implode('/', $path);
}
+ $this->path = strtr($path, $pathReplace);
+
return $this;
}
@@ -283,42 +296,29 @@ class Url
return $this;
}
- // Replace // and /./ with /
- $this->path = str_replace(array('/./', '//'), '/', $this->path);
-
- // Remove dot segments
- if (strpos($this->path, '..') !== false) {
-
- // Remove trailing relative paths if possible
- $segments = $this->getPathSegments();
- $last = end($segments);
- $trailingSlash = false;
- if ($last === '') {
- array_pop($segments);
- $trailingSlash = true;
+ $results = array();
+ $segments = $this->getPathSegments();
+ foreach ($segments as $segment) {
+ if ($segment == '..') {
+ array_pop($results);
+ } elseif ($segment != '.' && $segment != '') {
+ $results[] = $segment;
}
+ }
- while ($last == '..' || $last == '.') {
- if ($last == '..') {
- array_pop($segments);
- $last = array_pop($segments);
- }
- if ($last == '.' || $last == '') {
- $last = array_pop($segments);
- }
- }
+ // Combine the normalized parts and add the leading slash if needed
+ $this->path = ($this->path[0] == '/' ? '/' : '') . implode('/', $results);
- $this->path = implode('/', $segments);
- if ($trailingSlash) {
- $this->path .= '/';
- }
+ // Add the trailing slash if necessary
+ if ($this->path != '/' && end($segments) == '') {
+ $this->path .= '/';
}
return $this;
}
/**
- * Add a relative path to the currently set path
+ * Add a relative path to the currently set path.
*
* @param string $relativePath Relative path to add
*
@@ -326,16 +326,15 @@ class Url
*/
public function addPath($relativePath)
{
- if (!$relativePath || $relativePath == '/') {
- return $this;
- }
-
- // Add a leading slash if needed
- if ($relativePath[0] != '/') {
- $relativePath = '/' . $relativePath;
+ if ($relativePath != '/' && is_string($relativePath) && strlen($relativePath) > 0) {
+ // Add a leading slash if needed
+ if ($relativePath[0] != '/') {
+ $relativePath = '/' . $relativePath;
+ }
+ $this->setPath(str_replace('//', '/', $this->path . $relativePath));
}
- return $this->setPath(str_replace('//', '/', $this->getPath() . $relativePath));
+ return $this;
}
/**
@@ -475,13 +474,18 @@ class Url
/**
* Combine the URL with another URL. Follows the rules specific in RFC 3986 section 5.4.
*
- * @param string $url Relative URL to combine with
- *
+ * @param string $url Relative URL to combine with
+ * @param bool $strictRfc3986 Set to true to use strict RFC 3986 compliance when merging paths. When first
+ * released, Guzzle used an incorrect algorithm for combining relative URL paths. In
+ * order to not break users, we introduced this flag to allow the merging of URLs based
+ * on strict RFC 3986 section 5.4.1. This means that "http://a.com/foo/baz" merged with
+ * "bar" would become "http://a.com/foo/bar". When this value is set to false, it would
+ * become "http://a.com/foo/baz/bar".
* @return Url
* @throws InvalidArgumentException
* @link http://tools.ietf.org/html/rfc3986#section-5.4
*/
- public function combine($url)
+ public function combine($url, $strictRfc3986 = false)
{
$url = self::factory($url);
@@ -510,6 +514,7 @@ class Url
$this->username = $url->getUsername();
$this->password = $url->getPassword();
$this->path = $url->getPath();
+ $this->query = $url->getQuery();
$this->fragment = $url->getFragment();
return $this;
}
@@ -519,20 +524,31 @@ class Url
if (!$path) {
if (count($query)) {
- $this->query = $query;
+ $this->addQuery($query, $strictRfc3986);
}
} else {
if ($path[0] == '/') {
$this->path = $path;
+ } elseif ($strictRfc3986) {
+ $this->path .= '/../' . $path;
} else {
$this->path .= '/' . $path;
}
$this->normalizePath();
- $this->query = $query;
+ $this->addQuery($query, $strictRfc3986);
}
$this->fragment = $url->getFragment();
return $this;
}
+
+ private function addQuery(QueryString $new, $strictRfc386)
+ {
+ if (!$strictRfc386) {
+ $new->merge($this->query);
+ }
+
+ $this->query = $new;
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json
new file mode 100644
index 00000000000..9384a5bf918
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json
@@ -0,0 +1,32 @@
+{
+ "name": "guzzle/http",
+ "description": "HTTP libraries used by Guzzle",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["http client", "http", "client", "Guzzle", "curl"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version",
+ "guzzle/parser": "self.version",
+ "guzzle/stream": "self.version"
+ },
+ "suggest": {
+ "ext-curl": "*"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Http": "" }
+ },
+ "target-dir": "Guzzle/Http",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json
new file mode 100644
index 00000000000..93f9e7b725b
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "guzzle/inflection",
+ "description": "Guzzle inflection component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["inflection", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Inflection": "" }
+ },
+ "target-dir": "Guzzle/Inflection",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php
index 1807b23e97a..d76cdd439ff 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php
@@ -16,25 +16,31 @@ class ChunkedIterator extends \IteratorIterator
/**
* @param \Traversable $iterator Traversable iterator
* @param int $chunkSize Size to make each chunk
+ * @throws \InvalidArgumentException
*/
public function __construct(\Traversable $iterator, $chunkSize)
{
+ $chunkSize = (int) $chunkSize;
+ if ($chunkSize < 0 ) {
+ throw new \InvalidArgumentException("The chunk size must be equal or greater than zero; $chunkSize given");
+ }
+
parent::__construct($iterator);
$this->chunkSize = $chunkSize;
}
public function rewind()
{
+ parent::rewind();
$this->next();
}
public function next()
{
$this->chunk = array();
- $inner = $this->getInnerIterator();
- for ($i = 0; $i < $this->chunkSize && $inner->valid(); $i++) {
- $this->chunk[] = $inner->current();
- $inner->next();
+ for ($i = 0; $i < $this->chunkSize && parent::valid(); $i++) {
+ $this->chunk[] = parent::current();
+ parent::next();
}
}
@@ -45,6 +51,6 @@ class ChunkedIterator extends \IteratorIterator
public function valid()
{
- return !empty($this->chunk);
+ return (bool) $this->chunk;
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php
index 82b978284be..b103367b6ea 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php
@@ -15,12 +15,12 @@ class FilterIterator extends \FilterIterator
protected $callback;
/**
- * @param \Traversable $iterator Traversable iterator
+ * @param \Iterator $iterator Traversable iterator
* @param array|\Closure $callback Callback used for filtering. Return true to keep or false to filter.
*
* @throws InvalidArgumentException if the callback if not callable
*/
- public function __construct(\Traversable $iterator, $callback)
+ public function __construct(\Iterator $iterator, $callback)
{
parent::__construct($iterator);
if (!is_callable($callback)) {
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md
new file mode 100644
index 00000000000..8bb7e08e26b
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md
@@ -0,0 +1,25 @@
+Guzzle Iterator
+===============
+
+Provides useful Iterators and Iterator decorators
+
+- ChunkedIterator: Pulls out chunks from an inner iterator and yields the chunks as arrays
+- FilterIterator: Used when PHP 5.4's CallbackFilterIterator is not available
+- MapIterator: Maps values before yielding
+- MethodProxyIterator: Proxies missing method calls to the innermost iterator
+
+### Installing via Composer
+
+```bash
+# Install Composer
+curl -sS https://getcomposer.org/installer | php
+
+# Add Guzzle as a dependency
+php composer.phar require guzzle/iterator:~3.0
+```
+
+After installing, you need to require Composer's autoloader:
+
+```php
+require 'vendor/autoload.php';
+```
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json
new file mode 100644
index 00000000000..ee1737987bb
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/iterator",
+ "description": "Provides helpful iterators and iterator decorators",
+ "keywords": ["iterator", "guzzle"],
+ "homepage": "http://guzzlephp.org/",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": ">=2.8.0"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Iterator": "/" }
+ },
+ "target-dir": "Guzzle/Iterator",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php
index 8c74a45dce8..6afe7b62af1 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php
@@ -29,6 +29,6 @@ class MonologLogAdapter extends AbstractLogAdapter
public function log($message, $priority = LOG_INFO, $extras = array())
{
- $this->log->addRecord(self::$mapping[$priority], $message);
+ $this->log->addRecord(self::$mapping[$priority], $message, $extras);
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json
new file mode 100644
index 00000000000..a8213e8b451
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json
@@ -0,0 +1,29 @@
+{
+ "name": "guzzle/log",
+ "description": "Guzzle log adapter component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["log", "adapter", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Log": "" }
+ },
+ "suggest": {
+ "guzzle/http": "self.version"
+ },
+ "target-dir": "Guzzle/Log",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php
index 8e825f9bdea..4349eeb38bf 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php
@@ -36,7 +36,7 @@ class CookieParser implements CookieParserInterface
$data = array_merge(array_fill_keys(array_keys(self::$cookieParts), null), array(
'cookies' => array(),
'data' => array(),
- 'path' => $path ?: '/',
+ 'path' => null,
'http_only' => false,
'discard' => false,
'domain' => $host
@@ -81,6 +81,51 @@ class CookieParser implements CookieParserInterface
$data['expires'] = time() + (int) $data['max_age'];
}
+ // Check path attribute according RFC6265 http://tools.ietf.org/search/rfc6265#section-5.2.4
+ // "If the attribute-value is empty or if the first character of the
+ // attribute-value is not %x2F ("/"):
+ // Let cookie-path be the default-path.
+ // Otherwise:
+ // Let cookie-path be the attribute-value."
+ if (!$data['path'] || substr($data['path'], 0, 1) !== '/') {
+ $data['path'] = $this->getDefaultPath($path);
+ }
+
return $data;
}
+
+ /**
+ * Get default cookie path according to RFC 6265
+ * http://tools.ietf.org/search/rfc6265#section-5.1.4 Paths and Path-Match
+ *
+ * @param string $path Request uri-path
+ *
+ * @return string
+ */
+ protected function getDefaultPath($path) {
+ // "The user agent MUST use an algorithm equivalent to the following algorithm
+ // to compute the default-path of a cookie:"
+
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
+ if (empty($path) || substr($path, 0, 1) !== '/') {
+ return '/';
+ }
+
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining step."
+ if ($path === "/") {
+ return $path;
+ }
+
+ $rightSlashPos = strrpos($path, '/');
+ if ($rightSlashPos === 0) {
+ return "/";
+ }
+
+ // "4. Output the characters of the uri-path from the first character up to,
+ // but not including, the right-most %x2F ("/")."
+ return substr($path, 0, $rightSlashPos);
+
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php
index 2044810b5d4..0df032f0ff8 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php
@@ -9,6 +9,8 @@ namespace Guzzle\Parser\UriTemplate;
*/
class UriTemplate implements UriTemplateInterface
{
+ const DEFAULT_PATTERN = '/\{([^\}]+)\}/';
+
/** @var string URI template */
private $template;
@@ -16,7 +18,7 @@ class UriTemplate implements UriTemplateInterface
private $variables;
/** @var string Regex used to parse expressions */
- private static $regex = '/\{([^\}]+)\}/';
+ private $regex = self::DEFAULT_PATTERN;
/** @var array Hash for quick operator lookups */
private static $operatorHash = array(
@@ -36,15 +38,24 @@ class UriTemplate implements UriTemplateInterface
public function expand($template, array $variables)
{
+ if ($this->regex == self::DEFAULT_PATTERN && false === strpos($template, '{')) {
+ return $template;
+ }
+
$this->template = $template;
$this->variables = $variables;
- // Check to ensure that the preg_* function is needed
- if (false === strpos($this->template, '{')) {
- return $this->template;
- }
+ return preg_replace_callback($this->regex, array($this, 'expandMatch'), $this->template);
+ }
- return preg_replace_callback(self::$regex, array($this, 'expandMatch'), $this->template);
+ /**
+ * Set the regex patten used to expand URI templates
+ *
+ * @param string $regexPattern
+ */
+ public function setRegex($regexPattern)
+ {
+ $this->regex = $regexPattern;
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json
new file mode 100644
index 00000000000..378b281971a
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json
@@ -0,0 +1,19 @@
+{
+ "name": "guzzle/parser",
+ "homepage": "http://guzzlephp.org/",
+ "description": "Interchangeable parsers used by Guzzle",
+ "keywords": ["HTTP", "message", "cookie", "URL", "URI Template"],
+ "license": "MIT",
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Parser": "" }
+ },
+ "target-dir": "Guzzle/Parser",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php
index 534901baa42..ae594187346 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php
@@ -43,12 +43,16 @@ class AsyncPlugin implements EventSubscriberInterface
public function onCurlProgress(Event $event)
{
if ($event['handle'] &&
- ($event['downloaded'] || ($event['uploaded'] && $event['upload_size'] === $event['uploaded']))
+ ($event['downloaded'] || (isset($event['uploaded']) && $event['upload_size'] === $event['uploaded']))
) {
// Timeout after 1ms
curl_setopt($event['handle'], CURLOPT_TIMEOUT_MS, 1);
- // Even if the response is quick, tell curl not to download the body
- curl_setopt($event['handle'], CURLOPT_NOBODY, true);
+ // Even if the response is quick, tell curl not to download the body.
+ // - Note that we can only perform this shortcut if the request transmitted a body so as to ensure that the
+ // request method is not converted to a HEAD request before the request was sent via curl.
+ if ($event['uploaded']) {
+ curl_setopt($event['handle'], CURLOPT_NOBODY, true);
+ }
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json
new file mode 100644
index 00000000000..dc3fc5bf882
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-async",
+ "description": "Guzzle async request plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Async": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Async",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php
index b2b84c266df..99ace053826 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php
@@ -6,8 +6,8 @@ use Guzzle\Common\Event;
use Guzzle\Common\AbstractHasDispatcher;
use Guzzle\Http\Message\EntityEnclosingRequestInterface;
use Guzzle\Http\Message\RequestInterface;
-use Guzzle\Http\Message\Response;
use Guzzle\Http\Curl\CurlMultiInterface;
+use Guzzle\Http\Exception\CurlException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
@@ -92,7 +92,7 @@ class BackoffPlugin extends AbstractHasDispatcher implements EventSubscriberInte
$this->dispatch(self::RETRY_EVENT, array(
'request' => $request,
'response' => $response,
- 'handle' => $exception ? $exception->getCurlHandle() : null,
+ 'handle' => ($exception && $exception instanceof CurlException) ? $exception->getCurlHandle() : null,
'retries' => $retries,
'delay' => $delay
));
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php
index d1d70f65c53..a584ed4a2be 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php
@@ -14,7 +14,7 @@ class CurlBackoffStrategy extends AbstractErrorCodeBackoffStrategy
{
/** @var array Default cURL errors to retry */
protected static $defaultErrorCodes = array(
- CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT, CURLE_WRITE_ERROR, CURLE_READ_ERROR,
+ CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT, CURLE_PARTIAL_FILE, CURLE_WRITE_ERROR, CURLE_READ_ERROR,
CURLE_OPERATION_TIMEOUTED, CURLE_SSL_CONNECT_ERROR, CURLE_HTTP_PORT_FAILED, CURLE_GOT_NOTHING,
CURLE_SEND_ERROR, CURLE_RECV_ERROR
);
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json
new file mode 100644
index 00000000000..91c122cb43a
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "guzzle/plugin-backoff",
+ "description": "Guzzle backoff retry plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Backoff": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Backoff",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php
index 7109fa429b0..2d271e31eec 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php
@@ -41,7 +41,7 @@ class CallbackCanCacheStrategy extends DefaultCanCacheStrategy
{
return $this->requestCallback
? call_user_func($this->requestCallback, $request)
- : parent::canCache($request);
+ : parent::canCacheRequest($request);
}
public function canCacheResponse(Response $response)
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php
index 1bbaa1ad0fc..af33234eef8 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php
@@ -60,7 +60,7 @@ class DefaultRevalidation implements RevalidationInterface
($resCache && ($resCache->hasDirective('no-cache') || $resCache->hasDirective('must-revalidate')));
// Use the strong ETag validator if available and the response contains no Cache-Control directive
- if (!$revalidate && !$reqCache && $response->hasHeader('ETag')) {
+ if (!$revalidate && !$resCache && $response->hasHeader('ETag')) {
$revalidate = true;
}
@@ -95,19 +95,21 @@ class DefaultRevalidation implements RevalidationInterface
protected function createRevalidationRequest(RequestInterface $request, Response $response)
{
$revalidate = clone $request;
- $revalidate->removeHeader('Pragma')
- ->removeHeader('Cache-Control')
- ->setHeader('If-Modified-Since', $response->getLastModified() ?: $response->getDate());
+ $revalidate->removeHeader('Pragma')->removeHeader('Cache-Control');
+
+ if ($response->getLastModified()) {
+ $revalidate->setHeader('If-Modified-Since', $response->getLastModified());
+ }
if ($response->getEtag()) {
- $revalidate->setHeader('If-None-Match', '"' . $response->getEtag() . '"');
+ $revalidate->setHeader('If-None-Match', $response->getEtag());
}
// Remove any cache plugins that might be on the request to prevent infinite recursive revalidations
$dispatcher = $revalidate->getEventDispatcher();
foreach ($dispatcher->getListeners() as $eventName => $listeners) {
foreach ($listeners as $listener) {
- if ($listener[0] instanceof CachePlugin) {
+ if (is_array($listener) && $listener[0] instanceof CachePlugin) {
$dispatcher->removeListener($eventName, $listener);
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json
new file mode 100644
index 00000000000..674d8c497e2
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "guzzle/plugin-cache",
+ "description": "Guzzle HTTP cache plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/cache": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Cache": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Cache",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php
index bf81125ff77..5218e5f0e42 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php
@@ -412,7 +412,32 @@ class Cookie implements ToArrayInterface
*/
public function matchesPath($path)
{
- return !$this->getPath() || 0 === stripos($path, $this->getPath());
+ // RFC6265 http://tools.ietf.org/search/rfc6265#section-5.1.4
+ // A request-path path-matches a given cookie-path if at least one of
+ // the following conditions holds:
+
+ // o The cookie-path and the request-path are identical.
+ if ($path == $this->getPath()) {
+ return true;
+ }
+
+ $pos = stripos($path, $this->getPath());
+ if ($pos === 0) {
+ // o The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/").
+ if (substr($this->getPath(), -1, 1) === "/") {
+ return true;
+ }
+
+ // o The cookie-path is a prefix of the request-path, and the first
+ // character of the request-path that is not included in the cookie-
+ // path is a %x2F ("/") character.
+ if (substr($path, strlen($this->getPath()), 1) === "/") {
+ return true;
+ }
+ }
+
+ return false;
}
/**
@@ -424,30 +449,20 @@ class Cookie implements ToArrayInterface
*/
public function matchesDomain($domain)
{
- $cookieDomain = $this->getDomain();
+ // Remove the leading '.' as per spec in RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.2.3
+ $cookieDomain = ltrim($this->getDomain(), '.');
// Domain not set or exact match.
if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) {
return true;
}
- // . prefix match.
- if (strpos($cookieDomain, '.') === 0) {
- $realDomain = substr($cookieDomain, 1);
-
- // Root domains don't match except for .local.
- if (!substr_count($realDomain, '.') && strcasecmp($realDomain, 'local')) {
- return false;
- }
-
- if (substr($domain, -strlen($realDomain)) === $realDomain) {
- // Match exact or 1 deep subdomain.
- return !strcasecmp($domain, $realDomain) ||
- substr_count(substr($domain, 0, -strlen($realDomain)), '.') === 1;
- }
+ // Matching the subdomain according to RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.1.3
+ if (filter_var($domain, FILTER_VALIDATE_IP)) {
+ return false;
}
- return false;
+ return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/i', $domain);
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php
index 68d5be7e633..6b675039faf 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php
@@ -93,6 +93,7 @@ class ArrayCookieJar implements CookieJarInterface, \Serializable
if ($this->strictMode) {
throw new InvalidCookieException($result);
} else {
+ $this->removeCookieIfEmpty($cookie);
return false;
}
}
@@ -219,4 +220,18 @@ class ArrayCookieJar implements CookieJarInterface, \Serializable
return $cookies;
}
+
+ /**
+ * If a cookie already exists and the server asks to set it again with a null value, the
+ * cookie must be deleted.
+ *
+ * @param \Guzzle\Plugin\Cookie\Cookie $cookie
+ */
+ private function removeCookieIfEmpty(Cookie $cookie)
+ {
+ $cookieValue = $cookie->getValue();
+ if ($cookieValue === null || $cookieValue === '') {
+ $this->remove($cookie->getDomain(), $cookie->getPath(), $cookie->getName());
+ }
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json
new file mode 100644
index 00000000000..f0b52308d23
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-cookie",
+ "description": "Guzzle cookie plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Cookie": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Cookie",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json
new file mode 100644
index 00000000000..edc8b24e501
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-curlauth",
+ "description": "Guzzle cURL authorization plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "curl", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\CurlAuth": "" }
+ },
+ "target-dir": "Guzzle/Plugin/CurlAuth",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php
index a687fd7f120..588b9c3e376 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php
@@ -61,8 +61,8 @@ class ErrorResponsePlugin implements EventSubscriberInterface
$className = $error['class'];
$errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface';
if (!class_exists($className)) {
- throw new ErrorResponseException("{$className} does not exist");;
- } elseif (!is_subclass_of($className, $errorClassInterface)) {
+ throw new ErrorResponseException("{$className} does not exist");
+ } elseif (!(in_array($errorClassInterface, class_implements($className)))) {
throw new ErrorResponseException("{$className} must implement {$errorClassInterface}");
}
throw $className::fromCommand($command, $response);
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json
new file mode 100644
index 00000000000..607e86137ba
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-error-response",
+ "description": "Guzzle errorResponse plugin for creating error exceptions based on a service description",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/service": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\ErrorResponse": "" }
+ },
+ "target-dir": "Guzzle/Plugin/ErrorResponse",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json
new file mode 100644
index 00000000000..ba0bf2c4d17
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-history",
+ "description": "Guzzle history plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\History": "" }
+ },
+ "target-dir": "Guzzle/Plugin/History",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php
index 1a8e8a00b1c..cabdea854a9 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php
@@ -8,7 +8,6 @@ use Guzzle\Log\MessageFormatter;
use Guzzle\Log\ClosureLogAdapter;
use Guzzle\Http\EntityBody;
use Guzzle\Http\Message\EntityEnclosingRequestInterface;
-use Guzzle\Http\Message\Response;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
@@ -21,7 +20,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LogPlugin implements EventSubscriberInterface
{
/** @var LogAdapterInterface Adapter responsible for writing log data */
- private $logAdapter;
+ protected $logAdapter;
/** @var MessageFormatter Formatter used to format messages before logging */
protected $formatter;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json
new file mode 100644
index 00000000000..130e6da0ad9
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "guzzle/plugin-log",
+ "description": "Guzzle log plugin for over the wire logging",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "log", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Log": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Log",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php
index 08d635cf3fa..85124243309 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php
@@ -43,7 +43,9 @@ class CommandContentMd5Plugin implements EventSubscriberInterface
&& $command->getOperation()->hasParam($this->contentMd5Param)) {
// Check if an MD5 checksum value should be passed along to the request
if ($command[$this->contentMd5Param] === true) {
- $request->setHeader('Content-MD5', $request->getBody()->getContentMd5(true, true));
+ if (false !== ($md5 = $request->getBody()->getContentMd5(true, true))) {
+ $request->setHeader('Content-MD5', $md5);
+ }
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php
index 9c70f4dcec8..5d7a3785e49 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php
@@ -4,7 +4,6 @@ namespace Guzzle\Plugin\Md5;
use Guzzle\Common\Event;
use Guzzle\Common\Exception\UnexpectedValueException;
-use Guzzle\Http\Message\Response;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json
new file mode 100644
index 00000000000..0602d060902
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-md5",
+ "description": "Guzzle MD5 plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Md5": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Md5",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php
index ab7833cee2c..2440578cf08 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php
@@ -226,17 +226,20 @@ class MockPlugin extends AbstractHasDispatcher implements EventSubscriberInterfa
* Called when a request is about to be sent
*
* @param Event $event
+ * @throws \OutOfBoundsException When queue is empty
*/
public function onRequestBeforeSend(Event $event)
{
- if ($this->queue) {
- $request = $event['request'];
- $this->received[] = $request;
- // Detach the filter from the client so it's a one-time use
- if ($this->temporary && count($this->queue) == 1 && $request->getClient()) {
- $request->getClient()->getEventDispatcher()->removeSubscriber($this);
- }
- $this->dequeue($request);
+ if (!$this->queue) {
+ throw new \OutOfBoundsException('Mock queue is empty');
+ }
+
+ $request = $event['request'];
+ $this->received[] = $request;
+ // Detach the filter from the client so it's a one-time use
+ if ($this->temporary && count($this->queue) == 1 && $request->getClient()) {
+ $request->getClient()->getEventDispatcher()->removeSubscriber($this);
}
+ $this->dequeue($request);
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json
new file mode 100644
index 00000000000..f8201e31fee
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-mock",
+ "description": "Guzzle Mock plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["mock", "plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Mock": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Mock",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php
index 14961a0bc89..95e0c3e4a84 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php
@@ -16,6 +16,12 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
*/
class OauthPlugin implements EventSubscriberInterface
{
+ /**
+ * Consumer request method constants. See http://oauth.net/core/1.0/#consumer_req_param
+ */
+ const REQUEST_METHOD_HEADER = 'header';
+ const REQUEST_METHOD_QUERY = 'query';
+
/** @var Collection Configuration settings */
protected $config;
@@ -23,6 +29,7 @@ class OauthPlugin implements EventSubscriberInterface
* Create a new OAuth 1.0 plugin
*
* @param array $config Configuration array containing these parameters:
+ * - string 'request_method' Consumer request method. Use the class constants.
* - string 'callback' OAuth callback
* - string 'consumer_key' Consumer key
* - string 'consumer_secret' Consumer secret
@@ -38,6 +45,7 @@ class OauthPlugin implements EventSubscriberInterface
{
$this->config = Collection::fromConfig($config, array(
'version' => '1.0',
+ 'request_method' => self::REQUEST_METHOD_HEADER,
'consumer_key' => 'anonymous',
'consumer_secret' => 'anonymous',
'signature_method' => 'HMAC-SHA1',
@@ -62,29 +70,34 @@ class OauthPlugin implements EventSubscriberInterface
*
* @param Event $event Event received
* @return array
+ * @throws \InvalidArgumentException
*/
public function onRequestBeforeSend(Event $event)
{
$timestamp = $this->getTimestamp($event);
$request = $event['request'];
$nonce = $this->generateNonce($request);
+ $authorizationParams = $this->getOauthParams($timestamp, $nonce);
+ $authorizationParams['oauth_signature'] = $this->getSignature($request, $timestamp, $nonce);
- $authorizationParams = array(
- 'oauth_callback' => $this->config['callback'],
- 'oauth_consumer_key' => $this->config['consumer_key'],
- 'oauth_nonce' => $nonce,
- 'oauth_signature' => $this->getSignature($request, $timestamp, $nonce),
- 'oauth_signature_method' => $this->config['signature_method'],
- 'oauth_timestamp' => $timestamp,
- 'oauth_token' => $this->config['token'],
- 'oauth_verifier' => $this->config['verifier'],
- 'oauth_version' => $this->config['version'],
- );
-
- $request->setHeader(
- 'Authorization',
- $this->buildAuthorizationHeader($authorizationParams)
- );
+ switch ($this->config['request_method']) {
+ case self::REQUEST_METHOD_HEADER:
+ $request->setHeader(
+ 'Authorization',
+ $this->buildAuthorizationHeader($authorizationParams)
+ );
+ break;
+ case self::REQUEST_METHOD_QUERY:
+ foreach ($authorizationParams as $key => $value) {
+ $request->getQuery()->set($key, $value);
+ }
+ break;
+ default:
+ throw new \InvalidArgumentException(sprintf(
+ 'Invalid consumer method "%s"',
+ $this->config['request_method']
+ ));
+ }
return $authorizationParams;
}
@@ -142,7 +155,8 @@ class OauthPlugin implements EventSubscriberInterface
$params = $this->prepareParameters($params);
// Build signing string from combined params
- $parameterString = new QueryString($params);
+ $parameterString = clone $request->getQuery();
+ $parameterString->replace($params);
$url = Url::factory($request->getUrl())->setQuery('')->setFragment(null);
@@ -152,27 +166,55 @@ class OauthPlugin implements EventSubscriberInterface
}
/**
- * Parameters sorted and filtered in order to properly sign a request
+ * Get the oauth parameters as named by the oauth spec
*
- * @param RequestInterface $request Request to generate a signature for
- * @param integer $timestamp Timestamp to use for nonce
- * @param string $nonce
- *
- * @return array
+ * @param $timestamp
+ * @param $nonce
+ * @return Collection
*/
- public function getParamsToSign(RequestInterface $request, $timestamp, $nonce)
+ protected function getOauthParams($timestamp, $nonce)
{
$params = new Collection(array(
- 'oauth_callback' => $this->config['callback'],
'oauth_consumer_key' => $this->config['consumer_key'],
'oauth_nonce' => $nonce,
'oauth_signature_method' => $this->config['signature_method'],
'oauth_timestamp' => $timestamp,
- 'oauth_token' => $this->config['token'],
- 'oauth_verifier' => $this->config['verifier'],
- 'oauth_version' => $this->config['version']
));
+ // Optional parameters should not be set if they have not been set in the config as
+ // the parameter may be considered invalid by the Oauth service.
+ $optionalParams = array(
+ 'callback' => 'oauth_callback',
+ 'token' => 'oauth_token',
+ 'verifier' => 'oauth_verifier',
+ 'version' => 'oauth_version'
+ );
+
+ foreach ($optionalParams as $optionName => $oauthName) {
+ if (isset($this->config[$optionName]) == true) {
+ $params[$oauthName] = $this->config[$optionName];
+ }
+ }
+
+ return $params;
+ }
+
+ /**
+ * Get all of the parameters required to sign a request including:
+ * * The oauth params
+ * * The request GET params
+ * * The params passed in the POST body (with a content-type of application/x-www-form-urlencoded)
+ *
+ * @param RequestInterface $request Request to generate a signature for
+ * @param integer $timestamp Timestamp to use for nonce
+ * @param string $nonce
+ *
+ * @return array
+ */
+ public function getParamsToSign(RequestInterface $request, $timestamp, $nonce)
+ {
+ $params = $this->getOauthParams($timestamp, $nonce);
+
// Add query string parameters
$params->merge($request->getQuery());
@@ -184,7 +226,7 @@ class OauthPlugin implements EventSubscriberInterface
// Sort params
$params = $params->toArray();
- ksort($params);
+ uksort($params, 'strcmp');
return $params;
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json
new file mode 100644
index 00000000000..c9766ba16e8
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-oauth",
+ "description": "Guzzle OAuth plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["oauth", "plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Oauth": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Oauth",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json
new file mode 100644
index 00000000000..2bbe64cc5e5
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json
@@ -0,0 +1,44 @@
+{
+ "name": "guzzle/plugin",
+ "description": "Guzzle plugin component containing all Guzzle HTTP plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["http", "client", "plugin", "extension", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "suggest": {
+ "guzzle/cache": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin": "" }
+ },
+ "target-dir": "Guzzle/Plugin",
+ "replace": {
+ "guzzle/plugin-async": "self.version",
+ "guzzle/plugin-backoff": "self.version",
+ "guzzle/plugin-cache": "self.version",
+ "guzzle/plugin-cookie": "self.version",
+ "guzzle/plugin-curlauth": "self.version",
+ "guzzle/plugin-error-response": "self.version",
+ "guzzle/plugin-history": "self.version",
+ "guzzle/plugin-log": "self.version",
+ "guzzle/plugin-md5": "self.version",
+ "guzzle/plugin-mock": "self.version",
+ "guzzle/plugin-oauth": "self.version"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php
index 944d994f77f..3e5f8e53da1 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php
@@ -57,7 +57,8 @@ class Client extends HttpClient implements ClientInterface
'command.before_prepare',
'command.after_prepare',
'command.before_send',
- 'command.after_send'
+ 'command.after_send',
+ 'command.parse_response'
));
}
@@ -146,6 +147,10 @@ class Client extends HttpClient implements ClientInterface
{
$this->serviceDescription = $service;
+ if ($this->getCommandFactory() && $this->getCommandFactory() instanceof CompositeFactory) {
+ $this->commandFactory->add(new Command\Factory\ServiceDescriptionFactory($service));
+ }
+
// If a baseUrl was set on the description, then update the client
if ($baseUrl = $service->getBaseUrl()) {
$this->setBaseUrl($baseUrl);
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php
index e54f51ace56..e42ff90215e 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php
@@ -4,7 +4,6 @@ namespace Guzzle\Service\Command;
use Guzzle\Common\Collection;
use Guzzle\Common\Exception\InvalidArgumentException;
-use Guzzle\Http\Message\Response;
use Guzzle\Http\Message\RequestInterface;
use Guzzle\Http\Curl\CurlHandle;
use Guzzle\Service\Client;
@@ -375,4 +374,17 @@ abstract class AbstractCommand extends Collection implements CommandInterface
return $this->validator;
}
+
+ /**
+ * Get array of any validation errors
+ * If no validator has been set then return false
+ */
+ public function getValidationErrors()
+ {
+ if (!$this->validator) {
+ return false;
+ }
+
+ return $this->validator->getErrors();
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php
new file mode 100644
index 00000000000..e05067841c9
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Guzzle\Service\Command;
+
+use Guzzle\Common\Event;
+
+/**
+ * Event class emitted with the operation.parse_class event
+ */
+class CreateResponseClassEvent extends Event
+{
+ /**
+ * Set the result of the object creation
+ *
+ * @param mixed $result Result value to set
+ */
+ public function setResult($result)
+ {
+ $this['result'] = $result;
+ $this->stopPropagation();
+ }
+
+ /**
+ * Get the created object
+ *
+ * @return mixed
+ */
+ public function getResult()
+ {
+ return $this['result'];
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php
index dfca2e1038d..2dc4acd3788 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php
@@ -3,7 +3,6 @@
namespace Guzzle\Service\Command;
use Guzzle\Http\Message\RequestInterface;
-use Guzzle\Http\Url;
use Guzzle\Service\Command\LocationVisitor\Request\RequestVisitorInterface;
use Guzzle\Service\Command\LocationVisitor\VisitorFlyweight;
use Guzzle\Service\Description\OperationInterface;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php
index da26caff9c2..4fe380376a4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php
@@ -45,7 +45,7 @@ class DefaultResponseParser implements ResponseParserInterface
if ($result->getBody()) {
if (stripos($contentType, 'json') !== false) {
$result = $result->json();
- } if (stripos($contentType, 'xml') !== false) {
+ } elseif (stripos($contentType, 'xml') !== false) {
$result = $result->xml();
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php
index db0b00468e8..757e1c520ce 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php
@@ -51,12 +51,13 @@ class JsonVisitor extends AbstractRequestVisitor
public function after(CommandInterface $command, RequestInterface $request)
{
if (isset($this->data[$command])) {
- $request->setBody(json_encode($this->data[$command]));
- unset($this->data[$command]);
// Don't overwrite the Content-Type if one is set
if ($this->jsonContentType && !$request->hasHeader('Content-Type')) {
$request->setHeader('Content-Type', $this->jsonContentType);
}
+
+ $request->setBody(json_encode($this->data[$command]));
+ unset($this->data[$command]);
}
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php
index 01f42da65c4..5b714878708 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php
@@ -43,6 +43,7 @@ class XmlVisitor extends AbstractRequestVisitor
? $this->data[$command]
: $this->createRootElement($param->getParent());
$this->addXml($xml, $param, $value);
+
$this->data[$command] = $xml;
}
@@ -52,22 +53,23 @@ class XmlVisitor extends AbstractRequestVisitor
// If data was found that needs to be serialized, then do so
if (isset($this->data[$command])) {
- $xml = $this->data[$command]->asXML();
+ $xml = $this->finishDocument($this->data[$command]);
unset($this->data[$command]);
} else {
// Check if XML should always be sent for the command
$operation = $command->getOperation();
if ($operation->getData('xmlAllowEmpty')) {
- $xml = $this->createRootElement($operation)->asXML();
+ $xmlWriter = $this->createRootElement($operation);
+ $xml = $this->finishDocument($xmlWriter);
}
}
if ($xml) {
- $request->setBody($xml);
// Don't overwrite the Content-Type if one is set
if ($this->contentType && !$request->hasHeader('Content-Type')) {
$request->setHeader('Content-Type', $this->contentType);
}
+ $request->setBody($xml);
}
}
@@ -76,42 +78,41 @@ class XmlVisitor extends AbstractRequestVisitor
*
* @param Operation $operation Operation object
*
- * @return \SimpleXMLElement
+ * @return \XMLWriter
*/
protected function createRootElement(Operation $operation)
{
static $defaultRoot = array('name' => 'Request');
// If no root element was specified, then just wrap the XML in 'Request'
$root = $operation->getData('xmlRoot') ?: $defaultRoot;
-
// Allow the XML declaration to be customized with xmlEncoding
- $declaration = '<?xml version="1.0"';
- if ($encoding = $operation->getData('xmlEncoding')) {
- $declaration .= ' encoding="' . $encoding . '"';
- }
- $declaration .= "?>";
+ $encoding = $operation->getData('xmlEncoding');
+
+ $xmlWriter = $this->startDocument($encoding);
+ $xmlWriter->startElement($root['name']);
// Create the wrapping element with no namespaces if no namespaces were present
- if (empty($root['namespaces'])) {
- return new \SimpleXMLElement("{$declaration}\n<{$root['name']}/>");
- } else {
+ if (!empty($root['namespaces'])) {
// Create the wrapping element with an array of one or more namespaces
- $xml = "{$declaration}\n<{$root['name']} ";
foreach ((array) $root['namespaces'] as $prefix => $uri) {
- $xml .= is_numeric($prefix) ? "xmlns=\"{$uri}\" " : "xmlns:{$prefix}=\"{$uri}\" ";
+ $nsLabel = 'xmlns';
+ if (!is_numeric($prefix)) {
+ $nsLabel .= ':'.$prefix;
+ }
+ $xmlWriter->writeAttribute($nsLabel, $uri);
}
- return new \SimpleXMLElement($xml . "/>");
}
+ return $xmlWriter;
}
/**
* Recursively build the XML body
*
- * @param \SimpleXMLElement $xml XML to modify
- * @param Parameter $param API Parameter
- * @param mixed $value Value to add
+ * @param \XMLWriter $xmlWriter XML to modify
+ * @param Parameter $param API Parameter
+ * @param mixed $value Value to add
*/
- protected function addXml(\SimpleXMLElement $xml, Parameter $param, $value)
+ protected function addXml(\XMLWriter $xmlWriter, Parameter $param, $value)
{
if ($value === null) {
return;
@@ -119,29 +120,110 @@ class XmlVisitor extends AbstractRequestVisitor
$value = $param->filter($value);
$type = $param->getType();
+ $name = $param->getWireName();
+ $prefix = null;
+ $namespace = $param->getData('xmlNamespace');
+ if (false !== strpos($name, ':')) {
+ list($prefix, $name) = explode(':', $name, 2);
+ }
if ($type == 'object' || $type == 'array') {
- $ele = $param->getData('xmlFlattened') ? $xml : $xml->addChild($param->getWireName());
+ if (!$param->getData('xmlFlattened')) {
+ $xmlWriter->startElementNS(null, $name, $namespace);
+ }
if ($param->getType() == 'array') {
- $this->addXmlArray($ele, $param, $value, $param->getData('xmlNamespace'));
+ $this->addXmlArray($xmlWriter, $param, $value);
} elseif ($param->getType() == 'object') {
- $this->addXmlObject($ele, $param, $value);
+ $this->addXmlObject($xmlWriter, $param, $value);
}
- } elseif ($param->getData('xmlAttribute')) {
- $xml->addAttribute($param->getWireName(), $value, $param->getData('xmlNamespace'));
+ if (!$param->getData('xmlFlattened')) {
+ $xmlWriter->endElement();
+ }
+ return;
+ }
+ if ($param->getData('xmlAttribute')) {
+ $this->writeAttribute($xmlWriter, $prefix, $name, $namespace, $value);
} else {
- $xml->addChild($param->getWireName(), $value, $param->getData('xmlNamespace'));
+ $this->writeElement($xmlWriter, $prefix, $name, $namespace, $value);
}
}
/**
+ * Write an attribute with namespace if used
+ *
+ * @param \XMLWriter $xmlWriter XMLWriter instance
+ * @param string $prefix Namespace prefix if any
+ * @param string $name Attribute name
+ * @param string $namespace The uri of the namespace
+ * @param string $value The attribute content
+ */
+ protected function writeAttribute($xmlWriter, $prefix, $name, $namespace, $value)
+ {
+ if (empty($namespace)) {
+ $xmlWriter->writeAttribute($name, $value);
+ } else {
+ $xmlWriter->writeAttributeNS($prefix, $name, $namespace, $value);
+ }
+ }
+
+ /**
+ * Write an element with namespace if used
+ *
+ * @param \XMLWriter $xmlWriter XML writer resource
+ * @param string $prefix Namespace prefix if any
+ * @param string $name Element name
+ * @param string $namespace The uri of the namespace
+ * @param string $value The element content
+ */
+ protected function writeElement(\XMLWriter $xmlWriter, $prefix, $name, $namespace, $value)
+ {
+ $xmlWriter->startElementNS($prefix, $name, $namespace);
+ if (strpbrk($value, '<>&')) {
+ $xmlWriter->writeCData($value);
+ } else {
+ $xmlWriter->writeRaw($value);
+ }
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Create a new xml writer and start a document
+ *
+ * @param string $encoding document encoding
+ *
+ * @return \XMLWriter the writer resource
+ */
+ protected function startDocument($encoding)
+ {
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $xmlWriter->startDocument('1.0', $encoding);
+
+ return $xmlWriter;
+ }
+
+ /**
+ * End the document and return the output
+ *
+ * @param \XMLWriter $xmlWriter
+ *
+ * @return \string the writer resource
+ */
+ protected function finishDocument($xmlWriter)
+ {
+ $xmlWriter->endDocument();
+
+ return $xmlWriter->outputMemory();
+ }
+
+ /**
* Add an array to the XML
*/
- protected function addXmlArray(\SimpleXMLElement $xml, Parameter $param, &$value)
+ protected function addXmlArray(\XMLWriter $xmlWriter, Parameter $param, &$value)
{
if ($items = $param->getItems()) {
foreach ($value as $v) {
- $this->addXml($xml, $items, $v);
+ $this->addXml($xmlWriter, $items, $v);
}
}
}
@@ -149,12 +231,22 @@ class XmlVisitor extends AbstractRequestVisitor
/**
* Add an object to the XML
*/
- protected function addXmlObject(\SimpleXMLElement $xml, Parameter $param, &$value)
+ protected function addXmlObject(\XMLWriter $xmlWriter, Parameter $param, &$value)
{
+ $noAttributes = array();
+ // add values which have attributes
foreach ($value as $name => $v) {
if ($property = $param->getProperty($name)) {
- $this->addXml($xml, $property, $v);
+ if ($property->getData('xmlAttribute')) {
+ $this->addXml($xmlWriter, $property, $v);
+ } else {
+ $noAttributes[] = array('value' => $v, 'property' => $property);
+ }
}
}
+ // now add values with no attributes
+ foreach ($noAttributes as $element) {
+ $this->addXml($xmlWriter, $element['property'], $element['value']);
+ }
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php
index b9b35a86d22..a609ebd8ce9 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php
@@ -60,10 +60,12 @@ class JsonVisitor extends AbstractResponseVisitor
}
} elseif ($type == 'object' && !isset($value[0])) {
// On the above line, we ensure that the array is associative and not numerically indexed
+ $knownProperties = array();
if ($properties = $param->getProperties()) {
foreach ($properties as $property) {
$name = $property->getName();
$key = $property->getWireName();
+ $knownProperties[$name] = 1;
if (isset($value[$key])) {
$this->recursiveProcess($property, $value[$key]);
if ($key != $name) {
@@ -73,6 +75,16 @@ class JsonVisitor extends AbstractResponseVisitor
}
}
}
+
+ // Remove any unknown and potentially unsafe properties
+ if ($param->getAdditionalProperties() === false) {
+ $value = array_intersect_key($value, $knownProperties);
+ } elseif (($additional = $param->getAdditionalProperties()) !== true) {
+ // Validate and filter additional properties
+ foreach ($value as &$v) {
+ $this->recursiveProcess($additional, $v);
+ }
+ }
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php
index ae1c556f980..bb7124be757 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php
@@ -55,6 +55,8 @@ class XmlVisitor extends AbstractResponseVisitor
$this->processObject($param, $value);
} elseif ($type == 'array') {
$this->processArray($param, $value);
+ } elseif ($type == 'string' && gettype($value) == 'array') {
+ $value = '';
}
if ($value !== null) {
@@ -106,9 +108,11 @@ class XmlVisitor extends AbstractResponseVisitor
{
// Ensure that the array is associative and not numerically indexed
if (!isset($value[0]) && ($properties = $param->getProperties())) {
+ $knownProperties = array();
foreach ($properties as $property) {
$name = $property->getName();
$sentAs = $property->getWireName();
+ $knownProperties[$name] = 1;
if ($property->getData('xmlAttribute')) {
$this->processXmlAttribute($property, $value);
} elseif (isset($value[$sentAs])) {
@@ -119,6 +123,11 @@ class XmlVisitor extends AbstractResponseVisitor
}
}
}
+
+ // Remove any unknown and potentially unsafe properties
+ if ($param->getAdditionalProperties() === false) {
+ $value = array_intersect_key($value, $knownProperties);
+ }
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php
index 0d51296e280..ca00bc06255 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php
@@ -22,6 +22,9 @@ class OperationResponseParser extends DefaultResponseParser
/** @var self */
protected static $instance;
+ /** @var bool */
+ private $schemaInModels;
+
/**
* @return self
* @codeCoverageIgnore
@@ -36,11 +39,13 @@ class OperationResponseParser extends DefaultResponseParser
}
/**
- * @param VisitorFlyweight $factory Factory to use when creating visitors
+ * @param VisitorFlyweight $factory Factory to use when creating visitors
+ * @param bool $schemaInModels Set to true to inject schemas into models
*/
- public function __construct(VisitorFlyweight $factory)
+ public function __construct(VisitorFlyweight $factory, $schemaInModels = false)
{
$this->factory = $factory;
+ $this->schemaInModels = $schemaInModels;
}
/**
@@ -67,14 +72,7 @@ class OperationResponseParser extends DefaultResponseParser
if ($type == OperationInterface::TYPE_MODEL) {
$model = $operation->getServiceDescription()->getModel($operation->getResponseClass());
} elseif ($type == OperationInterface::TYPE_CLASS) {
- $responseClassInterface = __NAMESPACE__ . '\ResponseClassInterface';
- $className = $operation->getResponseClass();
- if (!class_exists($className)) {
- throw new ResponseClassException("{$className} does not exist");
- } elseif (!method_exists($className, 'fromCommand')) {
- throw new ResponseClassException("{$className} must implement {$responseClassInterface}");
- }
- return $className::fromCommand($command);
+ return $this->parseClass($command);
}
if (!$model) {
@@ -82,13 +80,39 @@ class OperationResponseParser extends DefaultResponseParser
return parent::handleParsing($command, $response, $contentType);
} elseif ($command[AbstractCommand::RESPONSE_PROCESSING] != AbstractCommand::TYPE_MODEL) {
// Returns a model with no visiting if the command response processing is not model
- return new Model(parent::handleParsing($command, $response, $contentType), $model);
+ return new Model(parent::handleParsing($command, $response, $contentType));
} else {
- return new Model($this->visitResult($model, $command, $response), $model);
+ // Only inject the schema into the model if "schemaInModel" is true
+ return new Model($this->visitResult($model, $command, $response), $this->schemaInModels ? $model : null);
}
}
/**
+ * Parse a class object
+ *
+ * @param CommandInterface $command Command to parse into an object
+ *
+ * @return mixed
+ * @throws ResponseClassException
+ */
+ protected function parseClass(CommandInterface $command)
+ {
+ // Emit the operation.parse_class event. If a listener injects a 'result' property, then that will be the result
+ $event = new CreateResponseClassEvent(array('command' => $command));
+ $command->getClient()->getEventDispatcher()->dispatch('command.parse_response', $event);
+ if ($result = $event->getResult()) {
+ return $result;
+ }
+
+ $className = $command->getOperation()->getResponseClass();
+ if (!method_exists($className, 'fromCommand')) {
+ throw new ResponseClassException("{$className} must exist and implement a static fromCommand() method");
+ }
+
+ return $className::fromCommand($command);
+ }
+
+ /**
* Perform transformations on the result array
*
* @param Parameter $model Model that defines the structure
@@ -99,7 +123,7 @@ class OperationResponseParser extends DefaultResponseParser
*/
protected function visitResult(Parameter $model, CommandInterface $command, Response $response)
{
- $foundVisitors = $result = array();
+ $foundVisitors = $result = $knownProps = array();
$props = $model->getProperties();
foreach ($props as $schema) {
@@ -113,39 +137,23 @@ class OperationResponseParser extends DefaultResponseParser
}
// Visit additional properties when it is an actual schema
- if ($additional = $model->getAdditionalProperties()) {
- if ($additional instanceof Parameter) {
- // Only visit when a location is specified
- if ($location = $additional->getLocation()) {
- if (!isset($foundVisitors[$location])) {
- $foundVisitors[$location] = $this->factory->getResponseVisitor($location);
- $foundVisitors[$location]->before($command, $result);
- }
- // Only traverse if an array was parsed from the before() visitors
- if (is_array($result)) {
- // Find each additional property
- foreach (array_keys($result) as $key) {
- // Check if the model actually knows this property. If so, then it is not additional
- if (!$model->getProperty($key)) {
- // Set the name to the key so that we can parse it with each visitor
- $additional->setName($key);
- $foundVisitors[$location]->visit($command, $response, $additional, $result);
- }
- }
- // Reset the additionalProperties name to null
- $additional->setName(null);
- }
- }
- }
+ if (($additional = $model->getAdditionalProperties()) instanceof Parameter) {
+ $this->visitAdditionalProperties($model, $command, $response, $additional, $result, $foundVisitors);
}
// Apply the parameter value with the location visitor
foreach ($props as $schema) {
+ $knownProps[$schema->getName()] = 1;
if ($location = $schema->getLocation()) {
$foundVisitors[$location]->visit($command, $response, $schema, $result);
}
}
+ // Remove any unknown and potentially unsafe top-level properties
+ if ($additional === false) {
+ $result = array_intersect_key($result, $knownProps);
+ }
+
// Call the after() method of each found visitor
foreach ($foundVisitors as $visitor) {
$visitor->after($command);
@@ -153,4 +161,35 @@ class OperationResponseParser extends DefaultResponseParser
return $result;
}
+
+ protected function visitAdditionalProperties(
+ Parameter $model,
+ CommandInterface $command,
+ Response $response,
+ Parameter $additional,
+ &$result,
+ array &$foundVisitors
+ ) {
+ // Only visit when a location is specified
+ if ($location = $additional->getLocation()) {
+ if (!isset($foundVisitors[$location])) {
+ $foundVisitors[$location] = $this->factory->getResponseVisitor($location);
+ $foundVisitors[$location]->before($command, $result);
+ }
+ // Only traverse if an array was parsed from the before() visitors
+ if (is_array($result)) {
+ // Find each additional property
+ foreach (array_keys($result) as $key) {
+ // Check if the model actually knows this property. If so, then it is not additional
+ if (!$model->getProperty($key)) {
+ // Set the name to the key so that we can parse it with each visitor
+ $additional->setName($key);
+ $foundVisitors[$location]->visit($command, $response, $additional, $result);
+ }
+ }
+ // Reset the additionalProperties name to null
+ $additional->setName(null);
+ }
+ }
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php
index 8400ff64e19..b2890be53f1 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php
@@ -507,7 +507,7 @@ class Operation implements OperationInterface
/**
* Get the additionalParameters of the operation
*
- * @return Paramter|null
+ * @return Parameter|null
*/
public function getAdditionalParameters()
{
@@ -535,16 +535,13 @@ class Operation implements OperationInterface
*/
protected function inferResponseType()
{
- if (!$this->responseClass || $this->responseClass == 'array' || $this->responseClass == 'string'
- || $this->responseClass == 'boolean' || $this->responseClass == 'integer'
- ) {
+ static $primitives = array('array' => 1, 'boolean' => 1, 'string' => 1, 'integer' => 1, '' => 1);
+ if (isset($primitives[$this->responseClass])) {
$this->responseType = self::TYPE_PRIMITIVE;
} elseif ($this->description && $this->description->hasModel($this->responseClass)) {
$this->responseType = self::TYPE_MODEL;
- } elseif (strpos($this->responseClass, '\\') !== false) {
- $this->responseType = self::TYPE_CLASS;
} else {
- $this->responseType = self::TYPE_PRIMITIVE;
+ $this->responseType = self::TYPE_CLASS;
}
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php
index c856a79a5d1..9ed3c30bf2f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php
@@ -97,12 +97,7 @@ class Parameter
if ($description) {
if (isset($data['$ref'])) {
if ($model = $description->getModel($data['$ref'])) {
- // The name of the original parameter should override the ref name if one is available
- $name = empty($data['name']) ? null : $data['name'];
- $data = $model->toArray();
- if ($name) {
- $data['name'] = $name;
- }
+ $data = $model->toArray() + $data;
}
} elseif (isset($data['extends'])) {
// If this parameter extends from another parameter then start with the actual data
@@ -138,11 +133,12 @@ class Parameter
*/
public function toArray()
{
- $result = array();
- $checks = array('required', 'description', 'static', 'type', 'format', 'instanceOf', 'location', 'sentAs',
+ static $checks = array('required', 'description', 'static', 'type', 'format', 'instanceOf', 'location', 'sentAs',
'pattern', 'minimum', 'maximum', 'minItems', 'maxItems', 'minLength', 'maxLength', 'data', 'enum',
'filters');
+ $result = array();
+
// Anything that is in the `Items` attribute of an array *must* include it's name if available
if ($this->parent instanceof self && $this->parent->getType() == 'array' && isset($this->name)) {
$result['name'] = $this->name;
@@ -188,9 +184,11 @@ class Parameter
*/
public function getValue($value)
{
- return $this->static || ($this->default !== null && !$value && ($this->type != 'boolean' || $value !== false))
- ? $this->default
- : $value;
+ if ($this->static || ($this->default !== null && $value === null)) {
+ return $this->default;
+ }
+
+ return $value;
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php
index 3f29550aae3..7f47fc9d70c 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php
@@ -109,7 +109,7 @@ class SchemaFormatter
*/
public static function formatTimestamp($value)
{
- return self::dateFormatter($value, 'U');
+ return (int) self::dateFormatter($value, 'U');
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php
index 1d15f0fcfb2..b045422d4c7 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php
@@ -136,7 +136,7 @@ class SchemaValidator implements ValidatorInterface
$current = null;
$this->recursiveProcess($property, $current, $path, $depth + 1);
// Only set the value if it was populated with something
- if ($current) {
+ if (null !== $current) {
$value[$name] = $current;
}
}
@@ -157,8 +157,9 @@ class SchemaValidator implements ValidatorInterface
}
} else {
// if additionalProperties is set to false and there are additionalProperties in the values, then fail
- $keys = array_keys($value);
- $this->errors[] = sprintf('%s[%s] is not an allowed property', $path, reset($keys));
+ foreach ($diff as $prop) {
+ $this->errors[] = sprintf('%s[%s] is not an allowed property', $path, $prop);
+ }
}
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php
index 1d4929eded0..eabe93d3dbd 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php
@@ -23,10 +23,28 @@ class CommandTransferException extends MultiTransferException
public static function fromMultiTransferException(MultiTransferException $e)
{
$ce = new self($e->getMessage(), $e->getCode(), $e->getPrevious());
+ $ce->setSuccessfulRequests($e->getSuccessfulRequests());
- return $ce->setExceptions($e->getIterator()->getArrayCopy())
- ->setSuccessfulRequests($e->getSuccessfulRequests())
- ->setFailedRequests($e->getFailedRequests());
+ $alreadyAddedExceptions = array();
+ foreach ($e->getFailedRequests() as $request) {
+ if ($re = $e->getExceptionForFailedRequest($request)) {
+ $alreadyAddedExceptions[] = $re;
+ $ce->addFailedRequestWithException($request, $re);
+ } else {
+ $ce->addFailedRequest($request);
+ }
+ }
+
+ // Add any exceptions that did not map to a request
+ if (count($alreadyAddedExceptions) < count($e)) {
+ foreach ($e as $ex) {
+ if (!in_array($ex, $alreadyAddedExceptions)) {
+ $ce->add($ex);
+ }
+ }
+ }
+
+ return $ce;
}
/**
@@ -86,4 +104,16 @@ class CommandTransferException extends MultiTransferException
{
return $this->failedCommands;
}
+
+ /**
+ * Get the Exception that caused the given $command to fail
+ *
+ * @param CommandInterface $command Failed command
+ *
+ * @return \Exception|null
+ */
+ public function getExceptionForFailedCommand(CommandInterface $command)
+ {
+ return $this->getExceptionForFailedRequest($command->getRequest());
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php
index d146b3ecb32..2322434a543 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php
@@ -20,7 +20,7 @@ class Model extends Collection
public function __construct(array $data = array(), Parameter $structure = null)
{
$this->data = $data;
- $this->structure = $structure ?: new Parameter();
+ $this->structure = $structure;
}
/**
@@ -30,7 +30,7 @@ class Model extends Collection
*/
public function getStructure()
{
- return $this->structure;
+ return $this->structure ?: new Parameter();
}
/**
@@ -40,18 +40,25 @@ class Model extends Collection
*/
public function __toString()
{
- $output = 'Debug output of ' . ($this->structure->getName() ?: ' the model');
+ $output = 'Debug output of ';
+ if ($this->structure) {
+ $output .= $this->structure->getName() . ' ';
+ }
+ $output .= 'model';
$output = str_repeat('=', strlen($output)) . "\n" . $output . "\n" . str_repeat('=', strlen($output)) . "\n\n";
$output .= "Model data\n-----------\n\n";
$output .= "This data can be retrieved from the model object using the get() method of the model "
. "(e.g. \$model->get(\$key)) or accessing the model like an associative array (e.g. \$model['key']).\n\n";
$lines = array_slice(explode("\n", trim(print_r($this->toArray(), true))), 2, -1);
- $output .= implode("\n", $lines) . "\n\n";
- $output .= "Model structure\n---------------\n\n";
- $output .= "The following JSON document defines how the model was parsed from an HTTP response into the "
- . "associative array strucure you see above.\n\n";
- $output .= ' ' . json_encode($this->structure->toArray()) . "\n\n";
+ $output .= implode("\n", $lines);
- return $output;
+ if ($this->structure) {
+ $output .= "\n\nModel structure\n---------------\n\n";
+ $output .= "The following JSON document defines how the model was parsed from an HTTP response into the "
+ . "associative array structure you see above.\n\n";
+ $output .= ' ' . json_encode($this->structure->toArray()) . "\n\n";
+ }
+
+ return $output . "\n";
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json
new file mode 100644
index 00000000000..cb7ace623dc
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json
@@ -0,0 +1,29 @@
+{
+ "name": "guzzle/service",
+ "description": "Guzzle service component for abstracting RESTful web services",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["web service", "webservice", "REST", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/cache": "self.version",
+ "guzzle/http": "self.version",
+ "guzzle/inflection": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Service": "" }
+ },
+ "target-dir": "Guzzle/Service",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php
index 0c2c94f2640..9949e456f5e 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php
@@ -45,12 +45,6 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface
throw new InvalidArgumentException('$context must be an array or resource');
}
- $this->setUrl($request);
- $this->addDefaultContextOptions($request);
- $this->addSslOptions($request);
- $this->addBodyOptions($request);
- $this->addProxyOptions($request);
-
// Dispatch the before send event
$request->dispatch('request.before_send', array(
'request' => $request,
@@ -58,6 +52,12 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface
'context_options' => $this->contextOptions
));
+ $this->setUrl($request);
+ $this->addDefaultContextOptions($request);
+ $this->addSslOptions($request);
+ $this->addBodyOptions($request);
+ $this->addProxyOptions($request);
+
// Create the file handle but silence errors
return $this->createStream($params)
->setCustomData('request', $request)
@@ -114,9 +114,15 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface
protected function addDefaultContextOptions(RequestInterface $request)
{
$this->setContextValue('http', 'method', $request->getMethod());
- $this->setContextValue('http', 'header', $request->getHeaderLines());
- // Force 1.0 for now until PHP fully support chunked transfer-encoding decoding
- $this->setContextValue('http', 'protocol_version', '1.0');
+ $headers = $request->getHeaderLines();
+
+ // "Connection: close" is required to get streams to work in HTTP 1.1
+ if (!$request->hasHeader('Connection')) {
+ $headers[] = 'Connection: close';
+ }
+
+ $this->setContextValue('http', 'header', $headers);
+ $this->setContextValue('http', 'protocol_version', $request->getProtocolVersion());
$this->setContextValue('http', 'ignore_errors', true);
}
@@ -147,7 +153,7 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface
*/
protected function addSslOptions(RequestInterface $request)
{
- if ($verify = $request->getCurlOptions()->get(CURLOPT_SSL_VERIFYPEER)) {
+ if ($request->getCurlOptions()->get(CURLOPT_SSL_VERIFYPEER)) {
$this->setContextValue('ssl', 'verify_peer', true, true);
if ($cafile = $request->getCurlOptions()->get(CURLOPT_CAINFO)) {
$this->setContextValue('ssl', 'cafile', $cafile, true);
@@ -235,7 +241,7 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface
{
// Set the size on the stream if it was returned in the response
foreach ($this->lastResponseHeaders as $header) {
- if (($pos = stripos($header, 'Content-Length:')) === 0) {
+ if ((stripos($header, 'Content-Length:')) === 0) {
$stream->setSize(trim(substr($header, 15)));
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php
index e222e02ebee..12bed268d90 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php
@@ -100,8 +100,8 @@ class Stream implements StreamInterface
}
$ctx = hash_init($algo);
- while ($data = $stream->read(8192)) {
- hash_update($ctx, $data);
+ while (!$stream->feof()) {
+ hash_update($ctx, $stream->read(8192));
}
$out = hash_final($ctx, (bool) $rawOutput);
@@ -234,20 +234,15 @@ class Stream implements StreamInterface
public function read($length)
{
- return $this->cache[self::IS_READABLE] ? fread($this->stream, $length) : false;
+ return fread($this->stream, $length);
}
public function write($string)
{
- if (!$this->cache[self::IS_WRITABLE]) {
- return 0;
- }
-
- $bytes = fwrite($this->stream, $string);
// We can't know the size after writing anything
$this->size = null;
- return $bytes;
+ return fwrite($this->stream, $string);
}
public function ftell()
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json
new file mode 100644
index 00000000000..9c19d2bd17a
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json
@@ -0,0 +1,30 @@
+{
+ "name": "guzzle/stream",
+ "description": "Guzzle stream wrapper component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["stream", "component", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "suggest": {
+ "guzzle/http": "To convert Guzzle request objects to PHP streams"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Stream": "" }
+ },
+ "target-dir": "Guzzle/Stream",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}