Version Description
- Updated AWS SDK to ver.1.3.5 for Amazon S3
- some extra outputs on job start
- resart Script execution time on many job operations.
- some changes too prevent cache addons
- prevent job run twice on same time on background
Download this release
Release Info
Developer | daveshine |
Plugin | BackWPup – WordPress Backup Plugin |
Version | 1.7.8 |
Comparing to | |
See all releases |
Code changes from version 1.7.7 to 1.7.8
- app/backwpup_dojob.php +6 -1
- app/libs/aws/README.md +6 -1
- app/libs/aws/lib/cachecore/LICENSE +25 -25
- app/libs/aws/lib/cachecore/README +1 -1
- app/libs/aws/lib/cachecore/_sql/README +5 -5
- app/libs/aws/lib/cachecore/_sql/mysql.sql +6 -6
- app/libs/aws/lib/cachecore/_sql/pgsql.sql +5 -5
- app/libs/aws/lib/cachecore/_sql/sqlite3.sql +1 -1
- app/libs/aws/lib/cachecore/cacheapc.class.php +119 -119
- app/libs/aws/lib/cachecore/cachecore.class.php +141 -141
- app/libs/aws/lib/cachecore/cachefile.class.php +170 -170
- app/libs/aws/lib/cachecore/cachemc.class.php +176 -176
- app/libs/aws/lib/cachecore/cachepdo.class.php +290 -290
- app/libs/aws/lib/cachecore/cachexcache.class.php +122 -122
- app/libs/aws/lib/cachecore/icachecore.interface.php +66 -66
- app/libs/aws/lib/requestcore/LICENSE +25 -25
- app/libs/aws/lib/requestcore/cacert.pem +3990 -0
- app/libs/aws/lib/requestcore/requestcore.class.php +1029 -997
- app/libs/aws/lib/yaml/LICENSE +19 -19
- app/libs/aws/lib/yaml/lib/sfYaml.php +135 -135
- app/libs/aws/lib/yaml/lib/sfYamlDumper.php +60 -60
- app/libs/aws/lib/yaml/lib/sfYamlInline.php +442 -442
- app/libs/aws/lib/yaml/lib/sfYamlParser.php +612 -612
- app/libs/aws/sdk.class.php +1472 -1417
- app/libs/aws/services/as.class.php +918 -931
- app/libs/aws/services/cloudformation.class.php +328 -316
- app/libs/aws/services/cloudfront.class.php +1420 -1417
- app/libs/aws/services/cloudwatch.class.php +606 -511
- app/libs/aws/services/ec2.class.php +0 -1945
app/backwpup_dojob.php
CHANGED
@@ -101,6 +101,8 @@ class backwpup_dojob {
|
|
101 |
$jobs[$this->jobid]['lastbackupdownloadurl']='';
|
102 |
$jobs[$this->jobid]['lastlogfile']=$this->logdir.$this->logfile;
|
103 |
$jobs[$this->jobid]['cronnextrun']=backwpup_cron_next($jobs[$this->jobid]['cron']); //set next run
|
|
|
|
|
104 |
update_option('backwpup_jobs',$jobs); //Save job Settings
|
105 |
$this->job=backwpup_check_job_vars($jobs[$this->jobid],$this->jobid);//Set and check job settings
|
106 |
//set waht to do
|
@@ -189,7 +191,9 @@ class backwpup_dojob {
|
|
189 |
$massage=$timestamp."<span>[".$args[0]."] ".$args[1]."</span>";
|
190 |
break;
|
191 |
}
|
192 |
-
|
|
|
|
|
193 |
if (!empty($massage)) {
|
194 |
//wirte log file
|
195 |
$fd=fopen($this->logdir.$this->logfile,'a');
|
@@ -1433,6 +1437,7 @@ class backwpup_dojob {
|
|
1433 |
|
1434 |
$jobs=get_option('backwpup_jobs');
|
1435 |
$jobs[$this->jobid]['lastrun']=$jobs[$this->jobid]['starttime'];
|
|
|
1436 |
$jobs[$this->jobid]['lastruntime']=current_time('timestamp')-$jobs[$this->jobid]['starttime'];
|
1437 |
$jobs[$this->jobid]['logfile']='';
|
1438 |
$jobs[$this->jobid]['lastlogfile']=$logfile;
|
101 |
$jobs[$this->jobid]['lastbackupdownloadurl']='';
|
102 |
$jobs[$this->jobid]['lastlogfile']=$this->logdir.$this->logfile;
|
103 |
$jobs[$this->jobid]['cronnextrun']=backwpup_cron_next($jobs[$this->jobid]['cron']); //set next run
|
104 |
+
if ($jobs[$this->jobid]['activated'])
|
105 |
+
trigger_error(__('Next scheduled run is on:','backwpup').' '.date('D, j M Y H:i',$jobs[$this->jobid]['cronnextrun']).'; '.$jobs[$this->jobid]['cron'],E_USER_NOTICE);
|
106 |
update_option('backwpup_jobs',$jobs); //Save job Settings
|
107 |
$this->job=backwpup_check_job_vars($jobs[$this->jobid],$this->jobid);//Set and check job settings
|
108 |
//set waht to do
|
191 |
$massage=$timestamp."<span>[".$args[0]."] ".$args[1]."</span>";
|
192 |
break;
|
193 |
}
|
194 |
+
|
195 |
+
@set_time_limit(300);//set script run time limit new to 300sec.
|
196 |
+
|
197 |
if (!empty($massage)) {
|
198 |
//wirte log file
|
199 |
$fd=fopen($this->logdir.$this->logfile,'a');
|
1437 |
|
1438 |
$jobs=get_option('backwpup_jobs');
|
1439 |
$jobs[$this->jobid]['lastrun']=$jobs[$this->jobid]['starttime'];
|
1440 |
+
$jobs[$this->jobid]['cronnextrun']=backwpup_cron_next($jobs[$this->jobid]['cron']); //set next run
|
1441 |
$jobs[$this->jobid]['lastruntime']=current_time('timestamp')-$jobs[$this->jobid]['starttime'];
|
1442 |
$jobs[$this->jobid]['logfile']='';
|
1443 |
$jobs[$this->jobid]['lastlogfile']=$logfile;
|
app/libs/aws/README.md
CHANGED
@@ -41,6 +41,8 @@ The source tree for includes the following files and directories:
|
|
41 |
run on your server to determine whether or not your PHP environment meets the minimum requirements.
|
42 |
* `_docs` -- Informational documents, the contents of which should be fairly self-explanatory.
|
43 |
* `_samples` -- Code samples that you can run out of the box.
|
|
|
|
|
44 |
* `lib` -- Contains any third-party libraries that the SDK depends on. The licenses for these projects will
|
45 |
always be Apache 2.0-compatible.
|
46 |
* `services` -- Contains the service-specific classes that communicate with AWS. These classes are always
|
@@ -112,7 +114,10 @@ From the command-line, you can install the SDK with PEAR as follows:
|
|
112 |
pear channel-discover pear.amazonwebservices.com
|
113 |
pear install aws/sdk
|
114 |
|
115 |
-
You may need to use `sudo` for the above commands.
|
|
|
|
|
|
|
116 |
|
117 |
### Configuration
|
118 |
|
41 |
run on your server to determine whether or not your PHP environment meets the minimum requirements.
|
42 |
* `_docs` -- Informational documents, the contents of which should be fairly self-explanatory.
|
43 |
* `_samples` -- Code samples that you can run out of the box.
|
44 |
+
* `extensions` -- Extra code that can be used to enhance usage of the SDK, but isn't a service class or a
|
45 |
+
third-party library.
|
46 |
* `lib` -- Contains any third-party libraries that the SDK depends on. The licenses for these projects will
|
47 |
always be Apache 2.0-compatible.
|
48 |
* `services` -- Contains the service-specific classes that communicate with AWS. These classes are always
|
114 |
pear channel-discover pear.amazonwebservices.com
|
115 |
pear install aws/sdk
|
116 |
|
117 |
+
You may need to use `sudo` for the above commands. Once the SDK has been installed via PEAR, you can load it into
|
118 |
+
your project with:
|
119 |
+
|
120 |
+
require_once 'AWSSDKforPHP/sdk.class.php';
|
121 |
|
122 |
### Configuration
|
123 |
|
app/libs/aws/lib/cachecore/LICENSE
CHANGED
@@ -1,25 +1,25 @@
|
|
1 |
-
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
-
|
3 |
-
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
-
permitted provided that the following conditions are met:
|
5 |
-
|
6 |
-
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
-
conditions and the following disclaimer.
|
8 |
-
|
9 |
-
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
-
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
-
provided with the distribution.
|
12 |
-
|
13 |
-
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
-
endorse or promote products derived from this software without specific prior written
|
15 |
-
permission.
|
16 |
-
|
17 |
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
-
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
-
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
-
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
-
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
-
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
-
POSSIBILITY OF SUCH DAMAGE.
|
1 |
+
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
+
|
3 |
+
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
+
permitted provided that the following conditions are met:
|
5 |
+
|
6 |
+
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
+
conditions and the following disclaimer.
|
8 |
+
|
9 |
+
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
+
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
+
provided with the distribution.
|
12 |
+
|
13 |
+
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
+
endorse or promote products derived from this software without specific prior written
|
15 |
+
permission.
|
16 |
+
|
17 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
+
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
+
POSSIBILITY OF SUCH DAMAGE.
|
app/libs/aws/lib/cachecore/README
CHANGED
@@ -1 +1 @@
|
|
1 |
-
A simple caching system for PHP5 that provides a single interface for a variety of storage types.
|
1 |
+
A simple caching system for PHP5 that provides a single interface for a variety of storage types.
|
app/libs/aws/lib/cachecore/_sql/README
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
The .sql files in this directory contain the code to create the tables for database caching.
|
2 |
-
|
3 |
-
If you're not using database caching, you can safely ignore these.
|
4 |
-
|
5 |
-
If you ARE using database caching, simply load the correct *.sql file into your database to set up the required tables.
|
1 |
+
The .sql files in this directory contain the code to create the tables for database caching.
|
2 |
+
|
3 |
+
If you're not using database caching, you can safely ignore these.
|
4 |
+
|
5 |
+
If you ARE using database caching, simply load the correct *.sql file into your database to set up the required tables.
|
app/libs/aws/lib/cachecore/_sql/mysql.sql
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
CREATE TABLE `cache` (
|
2 |
-
`id` char(40) NOT NULL default '',
|
3 |
-
`expires` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
4 |
-
`data` longtext,
|
5 |
-
PRIMARY KEY (`id`),
|
6 |
-
UNIQUE KEY `id` (`id`)
|
7 |
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
1 |
+
CREATE TABLE `cache` (
|
2 |
+
`id` char(40) NOT NULL default '',
|
3 |
+
`expires` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
4 |
+
`data` longtext,
|
5 |
+
PRIMARY KEY (`id`),
|
6 |
+
UNIQUE KEY `id` (`id`)
|
7 |
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
app/libs/aws/lib/cachecore/_sql/pgsql.sql
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
CREATE TABLE "cache" (
|
2 |
-
expires timestamp without time zone NOT NULL,
|
3 |
-
id character(40) NOT NULL,
|
4 |
-
data text NOT NULL
|
5 |
-
)
|
6 |
WITH (OIDS=TRUE);
|
1 |
+
CREATE TABLE "cache" (
|
2 |
+
expires timestamp without time zone NOT NULL,
|
3 |
+
id character(40) NOT NULL,
|
4 |
+
data text NOT NULL
|
5 |
+
)
|
6 |
WITH (OIDS=TRUE);
|
app/libs/aws/lib/cachecore/_sql/sqlite3.sql
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
CREATE TABLE cache (id TEXT, expires NUMERIC, data BLOB);
|
2 |
CREATE UNIQUE INDEX idx ON cache(id ASC);
|
1 |
+
CREATE TABLE cache (id TEXT, expires NUMERIC, data BLOB);
|
2 |
CREATE UNIQUE INDEX idx ON cache(id ASC);
|
app/libs/aws/lib/cachecore/cacheapc.class.php
CHANGED
@@ -1,119 +1,119 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all APC-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
-
* to the ICacheCore interface.
|
5 |
-
*
|
6 |
-
* @version 2009.10.10
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
* @link http://php.net/apc APC
|
14 |
-
*/
|
15 |
-
class CacheAPC extends CacheCore implements ICacheCore
|
16 |
-
{
|
17 |
-
|
18 |
-
/*%******************************************************************************************%*/
|
19 |
-
// CONSTRUCTOR
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Constructs a new instance of this class.
|
23 |
-
*
|
24 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
25 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
26 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
27 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
28 |
-
* @return object Reference to the cache object.
|
29 |
-
*/
|
30 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
31 |
-
{
|
32 |
-
parent::__construct($name, null, $expires, $gzip);
|
33 |
-
$this->id = $this->name;
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Creates a new cache.
|
38 |
-
*
|
39 |
-
* @param mixed $data (Required) The data to cache.
|
40 |
-
* @return boolean Whether the operation was successful.
|
41 |
-
*/
|
42 |
-
public function create($data)
|
43 |
-
{
|
44 |
-
$data = serialize($data);
|
45 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
46 |
-
|
47 |
-
return apc_add($this->id, $data, $this->expires);
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Reads a cache.
|
52 |
-
*
|
53 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
54 |
-
*/
|
55 |
-
public function read()
|
56 |
-
{
|
57 |
-
if ($data = apc_fetch($this->id))
|
58 |
-
{
|
59 |
-
$data = $this->gzip ? gzuncompress($data) : $data;
|
60 |
-
return unserialize($data);
|
61 |
-
}
|
62 |
-
|
63 |
-
return false;
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Updates an existing cache.
|
68 |
-
*
|
69 |
-
* @param mixed $data (Required) The data to cache.
|
70 |
-
* @return boolean Whether the operation was successful.
|
71 |
-
*/
|
72 |
-
public function update($data)
|
73 |
-
{
|
74 |
-
$data = serialize($data);
|
75 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
76 |
-
|
77 |
-
return apc_store($this->id, $data, $this->expires);
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Deletes a cache.
|
82 |
-
*
|
83 |
-
* @return boolean Whether the operation was successful.
|
84 |
-
*/
|
85 |
-
public function delete()
|
86 |
-
{
|
87 |
-
return apc_delete($this->id);
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Implemented here, but always returns `false`. APC manages its own expirations.
|
92 |
-
*
|
93 |
-
* @return boolean Whether the cache is expired or not.
|
94 |
-
*/
|
95 |
-
public function is_expired()
|
96 |
-
{
|
97 |
-
return false;
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Implemented here, but always returns `false`. APC manages its own expirations.
|
102 |
-
*
|
103 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
104 |
-
*/
|
105 |
-
public function timestamp()
|
106 |
-
{
|
107 |
-
return false;
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Implemented here, but always returns `false`. APC manages its own expirations.
|
112 |
-
*
|
113 |
-
* @return boolean Whether the operation was successful.
|
114 |
-
*/
|
115 |
-
public function reset()
|
116 |
-
{
|
117 |
-
return false;
|
118 |
-
}
|
119 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all APC-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2009.10.10
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
* @link http://php.net/apc APC
|
14 |
+
*/
|
15 |
+
class CacheAPC extends CacheCore implements ICacheCore
|
16 |
+
{
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CONSTRUCTOR
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Constructs a new instance of this class.
|
23 |
+
*
|
24 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
25 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
26 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
27 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
28 |
+
* @return object Reference to the cache object.
|
29 |
+
*/
|
30 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
31 |
+
{
|
32 |
+
parent::__construct($name, null, $expires, $gzip);
|
33 |
+
$this->id = $this->name;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Creates a new cache.
|
38 |
+
*
|
39 |
+
* @param mixed $data (Required) The data to cache.
|
40 |
+
* @return boolean Whether the operation was successful.
|
41 |
+
*/
|
42 |
+
public function create($data)
|
43 |
+
{
|
44 |
+
$data = serialize($data);
|
45 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
46 |
+
|
47 |
+
return apc_add($this->id, $data, $this->expires);
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Reads a cache.
|
52 |
+
*
|
53 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
54 |
+
*/
|
55 |
+
public function read()
|
56 |
+
{
|
57 |
+
if ($data = apc_fetch($this->id))
|
58 |
+
{
|
59 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
60 |
+
return unserialize($data);
|
61 |
+
}
|
62 |
+
|
63 |
+
return false;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Updates an existing cache.
|
68 |
+
*
|
69 |
+
* @param mixed $data (Required) The data to cache.
|
70 |
+
* @return boolean Whether the operation was successful.
|
71 |
+
*/
|
72 |
+
public function update($data)
|
73 |
+
{
|
74 |
+
$data = serialize($data);
|
75 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
76 |
+
|
77 |
+
return apc_store($this->id, $data, $this->expires);
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Deletes a cache.
|
82 |
+
*
|
83 |
+
* @return boolean Whether the operation was successful.
|
84 |
+
*/
|
85 |
+
public function delete()
|
86 |
+
{
|
87 |
+
return apc_delete($this->id);
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
92 |
+
*
|
93 |
+
* @return boolean Whether the cache is expired or not.
|
94 |
+
*/
|
95 |
+
public function is_expired()
|
96 |
+
{
|
97 |
+
return false;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
102 |
+
*
|
103 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
104 |
+
*/
|
105 |
+
public function timestamp()
|
106 |
+
{
|
107 |
+
return false;
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
112 |
+
*
|
113 |
+
* @return boolean Whether the operation was successful.
|
114 |
+
*/
|
115 |
+
public function reset()
|
116 |
+
{
|
117 |
+
return false;
|
118 |
+
}
|
119 |
+
}
|
app/libs/aws/lib/cachecore/cachecore.class.php
CHANGED
@@ -1,141 +1,141 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all shared caching methods. This is not intended to be instantiated directly, but is
|
4 |
-
* extended by the cache-specific classes.
|
5 |
-
*
|
6 |
-
* @version 2010.10.13
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
*/
|
14 |
-
class CacheCore
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* A name to uniquely identify the cache object by.
|
18 |
-
*/
|
19 |
-
var $name;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Where to store the cache.
|
23 |
-
*/
|
24 |
-
var $location;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* The number of seconds before a cache object is considered stale.
|
28 |
-
*/
|
29 |
-
var $expires;
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Used internally to uniquely identify the location + name of the cache object.
|
33 |
-
*/
|
34 |
-
var $id;
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Stores the time when the cache object was created.
|
38 |
-
*/
|
39 |
-
var $timestamp;
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Stores whether or not the content should be gzipped when stored
|
43 |
-
*/
|
44 |
-
var $gzip;
|
45 |
-
|
46 |
-
|
47 |
-
/*%******************************************************************************************%*/
|
48 |
-
// CONSTRUCTOR
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Constructs a new instance of this class.
|
52 |
-
*
|
53 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
54 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
55 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
56 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
57 |
-
* @return object Reference to the cache object.
|
58 |
-
*/
|
59 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
60 |
-
{
|
61 |
-
if (!extension_loaded('zlib'))
|
62 |
-
{
|
63 |
-
$gzip = false;
|
64 |
-
}
|
65 |
-
|
66 |
-
$this->name = $name;
|
67 |
-
$this->location = $location;
|
68 |
-
$this->expires = $expires;
|
69 |
-
$this->gzip = $gzip;
|
70 |
-
|
71 |
-
return $this;
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Allows for chaining from the constructor. Requires PHP 5.3 or newer.
|
76 |
-
*
|
77 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
78 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
79 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
80 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
81 |
-
* @return object Reference to the cache object.
|
82 |
-
*/
|
83 |
-
public static function init($name, $location, $expires, $gzip = true)
|
84 |
-
{
|
85 |
-
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
86 |
-
{
|
87 |
-
throw new Exception('PHP 5.3 or newer is required to use CacheCore::init().');
|
88 |
-
}
|
89 |
-
|
90 |
-
$self = get_called_class();
|
91 |
-
return new $self($name, $location, $expires, $gzip);
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Provides a simple, straightforward cache-logic mechanism. Useful for non-complex response caches.
|
96 |
-
*
|
97 |
-
* @param string|function $callback (Required) The name of the function to fire when we need to fetch new data to cache.
|
98 |
-
* @param array params (Optional) Parameters to pass into the callback function, as an array.
|
99 |
-
* @return array The cached data being requested.
|
100 |
-
*/
|
101 |
-
public function response_manager($callback, $params = null)
|
102 |
-
{
|
103 |
-
// Automatically handle $params values.
|
104 |
-
$params = is_array($params) ? $params : array($params);
|
105 |
-
|
106 |
-
if ($data = $this->read())
|
107 |
-
{
|
108 |
-
if ($this->is_expired())
|
109 |
-
{
|
110 |
-
if ($data = call_user_func_array($callback, $params))
|
111 |
-
{
|
112 |
-
$this->update($data);
|
113 |
-
}
|
114 |
-
else
|
115 |
-
{
|
116 |
-
$this->reset();
|
117 |
-
$data = $this->read();
|
118 |
-
}
|
119 |
-
}
|
120 |
-
}
|
121 |
-
else
|
122 |
-
{
|
123 |
-
if ($data = call_user_func_array($callback, $params))
|
124 |
-
{
|
125 |
-
$this->create($data);
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
return $data;
|
130 |
-
}
|
131 |
-
}
|
132 |
-
|
133 |
-
|
134 |
-
/*%******************************************************************************************%*/
|
135 |
-
// CORE DEPENDENCIES
|
136 |
-
|
137 |
-
// Include the ICacheCore interface.
|
138 |
-
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php'))
|
139 |
-
{
|
140 |
-
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php';
|
141 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all shared caching methods. This is not intended to be instantiated directly, but is
|
4 |
+
* extended by the cache-specific classes.
|
5 |
+
*
|
6 |
+
* @version 2010.10.13
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
*/
|
14 |
+
class CacheCore
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* A name to uniquely identify the cache object by.
|
18 |
+
*/
|
19 |
+
var $name;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Where to store the cache.
|
23 |
+
*/
|
24 |
+
var $location;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The number of seconds before a cache object is considered stale.
|
28 |
+
*/
|
29 |
+
var $expires;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Used internally to uniquely identify the location + name of the cache object.
|
33 |
+
*/
|
34 |
+
var $id;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Stores the time when the cache object was created.
|
38 |
+
*/
|
39 |
+
var $timestamp;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Stores whether or not the content should be gzipped when stored
|
43 |
+
*/
|
44 |
+
var $gzip;
|
45 |
+
|
46 |
+
|
47 |
+
/*%******************************************************************************************%*/
|
48 |
+
// CONSTRUCTOR
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Constructs a new instance of this class.
|
52 |
+
*
|
53 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
54 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
55 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
56 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
57 |
+
* @return object Reference to the cache object.
|
58 |
+
*/
|
59 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
60 |
+
{
|
61 |
+
if (!extension_loaded('zlib'))
|
62 |
+
{
|
63 |
+
$gzip = false;
|
64 |
+
}
|
65 |
+
|
66 |
+
$this->name = $name;
|
67 |
+
$this->location = $location;
|
68 |
+
$this->expires = $expires;
|
69 |
+
$this->gzip = $gzip;
|
70 |
+
|
71 |
+
return $this;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Allows for chaining from the constructor. Requires PHP 5.3 or newer.
|
76 |
+
*
|
77 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
78 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
79 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
80 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
81 |
+
* @return object Reference to the cache object.
|
82 |
+
*/
|
83 |
+
public static function init($name, $location, $expires, $gzip = true)
|
84 |
+
{
|
85 |
+
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
86 |
+
{
|
87 |
+
throw new Exception('PHP 5.3 or newer is required to use CacheCore::init().');
|
88 |
+
}
|
89 |
+
|
90 |
+
$self = get_called_class();
|
91 |
+
return new $self($name, $location, $expires, $gzip);
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Provides a simple, straightforward cache-logic mechanism. Useful for non-complex response caches.
|
96 |
+
*
|
97 |
+
* @param string|function $callback (Required) The name of the function to fire when we need to fetch new data to cache.
|
98 |
+
* @param array params (Optional) Parameters to pass into the callback function, as an array.
|
99 |
+
* @return array The cached data being requested.
|
100 |
+
*/
|
101 |
+
public function response_manager($callback, $params = null)
|
102 |
+
{
|
103 |
+
// Automatically handle $params values.
|
104 |
+
$params = is_array($params) ? $params : array($params);
|
105 |
+
|
106 |
+
if ($data = $this->read())
|
107 |
+
{
|
108 |
+
if ($this->is_expired())
|
109 |
+
{
|
110 |
+
if ($data = call_user_func_array($callback, $params))
|
111 |
+
{
|
112 |
+
$this->update($data);
|
113 |
+
}
|
114 |
+
else
|
115 |
+
{
|
116 |
+
$this->reset();
|
117 |
+
$data = $this->read();
|
118 |
+
}
|
119 |
+
}
|
120 |
+
}
|
121 |
+
else
|
122 |
+
{
|
123 |
+
if ($data = call_user_func_array($callback, $params))
|
124 |
+
{
|
125 |
+
$this->create($data);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
return $data;
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
|
134 |
+
/*%******************************************************************************************%*/
|
135 |
+
// CORE DEPENDENCIES
|
136 |
+
|
137 |
+
// Include the ICacheCore interface.
|
138 |
+
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php'))
|
139 |
+
{
|
140 |
+
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php';
|
141 |
+
}
|
app/libs/aws/lib/cachecore/cachefile.class.php
CHANGED
@@ -1,170 +1,170 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all file-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
-
* to the ICacheCore interface.
|
5 |
-
*
|
6 |
-
* @version 2009.10.10
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
*/
|
14 |
-
class CacheFile extends CacheCore implements ICacheCore
|
15 |
-
{
|
16 |
-
|
17 |
-
/*%******************************************************************************************%*/
|
18 |
-
// CONSTRUCTOR
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Constructs a new instance of this class.
|
22 |
-
*
|
23 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
24 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
25 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
26 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
27 |
-
* @return object Reference to the cache object.
|
28 |
-
*/
|
29 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
30 |
-
{
|
31 |
-
parent::__construct($name, $location, $expires, $gzip);
|
32 |
-
$this->id = $this->location . '/' . $this->name . '.cache';
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Creates a new cache.
|
37 |
-
*
|
38 |
-
* @param mixed $data (Required) The data to cache.
|
39 |
-
* @return boolean Whether the operation was successful.
|
40 |
-
*/
|
41 |
-
public function create($data)
|
42 |
-
{
|
43 |
-
if (file_exists($this->id))
|
44 |
-
{
|
45 |
-
return false;
|
46 |
-
}
|
47 |
-
elseif (file_exists($this->location) && is_writeable($this->location))
|
48 |
-
{
|
49 |
-
$data = serialize($data);
|
50 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
51 |
-
|
52 |
-
return (bool) file_put_contents($this->id, $data);
|
53 |
-
}
|
54 |
-
|
55 |
-
return false;
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Reads a cache.
|
60 |
-
*
|
61 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
62 |
-
*/
|
63 |
-
public function read()
|
64 |
-
{
|
65 |
-
if (file_exists($this->id) && is_readable($this->id))
|
66 |
-
{
|
67 |
-
$data = file_get_contents($this->id);
|
68 |
-
$data = $this->gzip ? gzuncompress($data) : $data;
|
69 |
-
$data = unserialize($data);
|
70 |
-
|
71 |
-
if ($data === false)
|
72 |
-
{
|
73 |
-
/*
|
74 |
-
This should only happen when someone changes the gzip settings and there is
|
75 |
-
existing data or someone has been mucking about in the cache folder manually.
|
76 |
-
Delete the bad entry since the file cache doesn't clean up after itself and
|
77 |
-
then return false so fresh data will be retrieved.
|
78 |
-
*/
|
79 |
-
$this->delete();
|
80 |
-
return false;
|
81 |
-
}
|
82 |
-
|
83 |
-
return $data;
|
84 |
-
}
|
85 |
-
|
86 |
-
return false;
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* Updates an existing cache.
|
91 |
-
*
|
92 |
-
* @param mixed $data (Required) The data to cache.
|
93 |
-
* @return boolean Whether the operation was successful.
|
94 |
-
*/
|
95 |
-
public function update($data)
|
96 |
-
{
|
97 |
-
if (file_exists($this->id) && is_writeable($this->id))
|
98 |
-
{
|
99 |
-
$data = serialize($data);
|
100 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
101 |
-
|
102 |
-
return (bool) file_put_contents($this->id, $data);
|
103 |
-
}
|
104 |
-
|
105 |
-
return false;
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Deletes a cache.
|
110 |
-
*
|
111 |
-
* @return boolean Whether the operation was successful.
|
112 |
-
*/
|
113 |
-
public function delete()
|
114 |
-
{
|
115 |
-
if (file_exists($this->id))
|
116 |
-
{
|
117 |
-
return unlink($this->id);
|
118 |
-
}
|
119 |
-
|
120 |
-
return false;
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Checks whether the cache object is expired or not.
|
125 |
-
*
|
126 |
-
* @return boolean Whether the cache is expired or not.
|
127 |
-
*/
|
128 |
-
public function is_expired()
|
129 |
-
{
|
130 |
-
if ($this->timestamp() + $this->expires < time())
|
131 |
-
{
|
132 |
-
return true;
|
133 |
-
}
|
134 |
-
|
135 |
-
return false;
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Retrieves the timestamp of the cache.
|
140 |
-
*
|
141 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
142 |
-
*/
|
143 |
-
public function timestamp()
|
144 |
-
{
|
145 |
-
clearstatcache();
|
146 |
-
|
147 |
-
if (file_exists($this->id))
|
148 |
-
{
|
149 |
-
$this->timestamp = filemtime($this->id);
|
150 |
-
return $this->timestamp;
|
151 |
-
}
|
152 |
-
|
153 |
-
return false;
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Resets the freshness of the cache.
|
158 |
-
*
|
159 |
-
* @return boolean Whether the operation was successful.
|
160 |
-
*/
|
161 |
-
public function reset()
|
162 |
-
{
|
163 |
-
if (file_exists($this->id))
|
164 |
-
{
|
165 |
-
return touch($this->id);
|
166 |
-
}
|
167 |
-
|
168 |
-
return false;
|
169 |
-
}
|
170 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all file-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2009.10.10
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
*/
|
14 |
+
class CacheFile extends CacheCore implements ICacheCore
|
15 |
+
{
|
16 |
+
|
17 |
+
/*%******************************************************************************************%*/
|
18 |
+
// CONSTRUCTOR
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Constructs a new instance of this class.
|
22 |
+
*
|
23 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
24 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
25 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
26 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
27 |
+
* @return object Reference to the cache object.
|
28 |
+
*/
|
29 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
30 |
+
{
|
31 |
+
parent::__construct($name, $location, $expires, $gzip);
|
32 |
+
$this->id = $this->location . '/' . $this->name . '.cache';
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Creates a new cache.
|
37 |
+
*
|
38 |
+
* @param mixed $data (Required) The data to cache.
|
39 |
+
* @return boolean Whether the operation was successful.
|
40 |
+
*/
|
41 |
+
public function create($data)
|
42 |
+
{
|
43 |
+
if (file_exists($this->id))
|
44 |
+
{
|
45 |
+
return false;
|
46 |
+
}
|
47 |
+
elseif (file_exists($this->location) && is_writeable($this->location))
|
48 |
+
{
|
49 |
+
$data = serialize($data);
|
50 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
51 |
+
|
52 |
+
return (bool) file_put_contents($this->id, $data);
|
53 |
+
}
|
54 |
+
|
55 |
+
return false;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Reads a cache.
|
60 |
+
*
|
61 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
62 |
+
*/
|
63 |
+
public function read()
|
64 |
+
{
|
65 |
+
if (file_exists($this->id) && is_readable($this->id))
|
66 |
+
{
|
67 |
+
$data = file_get_contents($this->id);
|
68 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
69 |
+
$data = unserialize($data);
|
70 |
+
|
71 |
+
if ($data === false)
|
72 |
+
{
|
73 |
+
/*
|
74 |
+
This should only happen when someone changes the gzip settings and there is
|
75 |
+
existing data or someone has been mucking about in the cache folder manually.
|
76 |
+
Delete the bad entry since the file cache doesn't clean up after itself and
|
77 |
+
then return false so fresh data will be retrieved.
|
78 |
+
*/
|
79 |
+
$this->delete();
|
80 |
+
return false;
|
81 |
+
}
|
82 |
+
|
83 |
+
return $data;
|
84 |
+
}
|
85 |
+
|
86 |
+
return false;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Updates an existing cache.
|
91 |
+
*
|
92 |
+
* @param mixed $data (Required) The data to cache.
|
93 |
+
* @return boolean Whether the operation was successful.
|
94 |
+
*/
|
95 |
+
public function update($data)
|
96 |
+
{
|
97 |
+
if (file_exists($this->id) && is_writeable($this->id))
|
98 |
+
{
|
99 |
+
$data = serialize($data);
|
100 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
101 |
+
|
102 |
+
return (bool) file_put_contents($this->id, $data);
|
103 |
+
}
|
104 |
+
|
105 |
+
return false;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Deletes a cache.
|
110 |
+
*
|
111 |
+
* @return boolean Whether the operation was successful.
|
112 |
+
*/
|
113 |
+
public function delete()
|
114 |
+
{
|
115 |
+
if (file_exists($this->id))
|
116 |
+
{
|
117 |
+
return unlink($this->id);
|
118 |
+
}
|
119 |
+
|
120 |
+
return false;
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Checks whether the cache object is expired or not.
|
125 |
+
*
|
126 |
+
* @return boolean Whether the cache is expired or not.
|
127 |
+
*/
|
128 |
+
public function is_expired()
|
129 |
+
{
|
130 |
+
if ($this->timestamp() + $this->expires < time())
|
131 |
+
{
|
132 |
+
return true;
|
133 |
+
}
|
134 |
+
|
135 |
+
return false;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Retrieves the timestamp of the cache.
|
140 |
+
*
|
141 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
142 |
+
*/
|
143 |
+
public function timestamp()
|
144 |
+
{
|
145 |
+
clearstatcache();
|
146 |
+
|
147 |
+
if (file_exists($this->id))
|
148 |
+
{
|
149 |
+
$this->timestamp = filemtime($this->id);
|
150 |
+
return $this->timestamp;
|
151 |
+
}
|
152 |
+
|
153 |
+
return false;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Resets the freshness of the cache.
|
158 |
+
*
|
159 |
+
* @return boolean Whether the operation was successful.
|
160 |
+
*/
|
161 |
+
public function reset()
|
162 |
+
{
|
163 |
+
if (file_exists($this->id))
|
164 |
+
{
|
165 |
+
return touch($this->id);
|
166 |
+
}
|
167 |
+
|
168 |
+
return false;
|
169 |
+
}
|
170 |
+
}
|
app/libs/aws/lib/cachecore/cachemc.class.php
CHANGED
@@ -1,176 +1,176 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all Memcache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
-
* to the ICacheCore interface.
|
5 |
-
*
|
6 |
-
* @version 2010.05.17
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
* @link http://php.net/memcache Memcache
|
14 |
-
* @link http://php.net/memcached Memcached
|
15 |
-
*/
|
16 |
-
class CacheMC extends CacheCore implements ICacheCore
|
17 |
-
{
|
18 |
-
/**
|
19 |
-
* Holds the Memcache object.
|
20 |
-
*/
|
21 |
-
var $memcache = null;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Whether the Memcached extension is being used (as opposed to Memcache).
|
25 |
-
*/
|
26 |
-
var $is_memcached = false;
|
27 |
-
|
28 |
-
|
29 |
-
/*%******************************************************************************************%*/
|
30 |
-
// CONSTRUCTOR
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Constructs a new instance of this class.
|
34 |
-
*
|
35 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
36 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
37 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
38 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
39 |
-
* @return object Reference to the cache object.
|
40 |
-
*/
|
41 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
42 |
-
{
|
43 |
-
parent::__construct($name, null, $expires, $gzip);
|
44 |
-
$this->id = $this->name;
|
45 |
-
|
46 |
-
// Prefer Memcached over Memcache.
|
47 |
-
if (class_exists('Memcached'))
|
48 |
-
{
|
49 |
-
$this->memcache = new Memcached();
|
50 |
-
$this->is_memcached = true;
|
51 |
-
}
|
52 |
-
elseif (class_exists('Memcache'))
|
53 |
-
{
|
54 |
-
$this->memcache = new Memcache();
|
55 |
-
}
|
56 |
-
else
|
57 |
-
{
|
58 |
-
return false;
|
59 |
-
}
|
60 |
-
|
61 |
-
// Enable compression, if available
|
62 |
-
if ($this->gzip)
|
63 |
-
{
|
64 |
-
if ($this->is_memcached)
|
65 |
-
{
|
66 |
-
$this->memcache->setOption(Memcached::OPT_COMPRESSION, true);
|
67 |
-
}
|
68 |
-
else
|
69 |
-
{
|
70 |
-
$this->gzip = MEMCACHE_COMPRESSED;
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
// Process Memcached servers.
|
75 |
-
if (isset($location) && sizeof($location) > 0)
|
76 |
-
{
|
77 |
-
foreach ($location as $loc)
|
78 |
-
{
|
79 |
-
if (isset($loc['port']) && !empty($loc['port']))
|
80 |
-
{
|
81 |
-
$this->memcache->addServer($loc['host'], $loc['port']);
|
82 |
-
}
|
83 |
-
else
|
84 |
-
{
|
85 |
-
$this->memcache->addServer($loc['host'], 11211);
|
86 |
-
}
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
return $this;
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Creates a new cache.
|
95 |
-
*
|
96 |
-
* @param mixed $data (Required) The data to cache.
|
97 |
-
* @return boolean Whether the operation was successful.
|
98 |
-
*/
|
99 |
-
public function create($data)
|
100 |
-
{
|
101 |
-
if ($this->is_memcached)
|
102 |
-
{
|
103 |
-
return $this->memcache->set($this->id, $data, $this->expires);
|
104 |
-
}
|
105 |
-
return $this->memcache->set($this->id, $data, $this->gzip, $this->expires);
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Reads a cache.
|
110 |
-
*
|
111 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
112 |
-
*/
|
113 |
-
public function read()
|
114 |
-
{
|
115 |
-
if ($this->is_memcached)
|
116 |
-
{
|
117 |
-
return $this->memcache->get($this->id);
|
118 |
-
}
|
119 |
-
return $this->memcache->get($this->id, $this->gzip);
|
120 |
-
}
|
121 |
-
|
122 |
-
/**
|
123 |
-
* Updates an existing cache.
|
124 |
-
*
|
125 |
-
* @param mixed $data (Required) The data to cache.
|
126 |
-
* @return boolean Whether the operation was successful.
|
127 |
-
*/
|
128 |
-
public function update($data)
|
129 |
-
{
|
130 |
-
if ($this->is_memcached)
|
131 |
-
{
|
132 |
-
return $this->memcache->replace($this->id, $data, $this->expires);
|
133 |
-
}
|
134 |
-
return $this->memcache->replace($this->id, $data, $this->gzip, $this->expires);
|
135 |
-
}
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Deletes a cache.
|
139 |
-
*
|
140 |
-
* @return boolean Whether the operation was successful.
|
141 |
-
*/
|
142 |
-
public function delete()
|
143 |
-
{
|
144 |
-
return $this->memcache->delete($this->id);
|
145 |
-
}
|
146 |
-
|
147 |
-
/**
|
148 |
-
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
149 |
-
*
|
150 |
-
* @return boolean Whether the cache is expired or not.
|
151 |
-
*/
|
152 |
-
public function is_expired()
|
153 |
-
{
|
154 |
-
return false;
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
159 |
-
*
|
160 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
161 |
-
*/
|
162 |
-
public function timestamp()
|
163 |
-
{
|
164 |
-
return false;
|
165 |
-
}
|
166 |
-
|
167 |
-
/**
|
168 |
-
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
169 |
-
*
|
170 |
-
* @return boolean Whether the operation was successful.
|
171 |
-
*/
|
172 |
-
public function reset()
|
173 |
-
{
|
174 |
-
return false;
|
175 |
-
}
|
176 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all Memcache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2010.05.17
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
* @link http://php.net/memcache Memcache
|
14 |
+
* @link http://php.net/memcached Memcached
|
15 |
+
*/
|
16 |
+
class CacheMC extends CacheCore implements ICacheCore
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
* Holds the Memcache object.
|
20 |
+
*/
|
21 |
+
var $memcache = null;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Whether the Memcached extension is being used (as opposed to Memcache).
|
25 |
+
*/
|
26 |
+
var $is_memcached = false;
|
27 |
+
|
28 |
+
|
29 |
+
/*%******************************************************************************************%*/
|
30 |
+
// CONSTRUCTOR
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Constructs a new instance of this class.
|
34 |
+
*
|
35 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
36 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
37 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
38 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
39 |
+
* @return object Reference to the cache object.
|
40 |
+
*/
|
41 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
42 |
+
{
|
43 |
+
parent::__construct($name, null, $expires, $gzip);
|
44 |
+
$this->id = $this->name;
|
45 |
+
|
46 |
+
// Prefer Memcached over Memcache.
|
47 |
+
if (class_exists('Memcached'))
|
48 |
+
{
|
49 |
+
$this->memcache = new Memcached();
|
50 |
+
$this->is_memcached = true;
|
51 |
+
}
|
52 |
+
elseif (class_exists('Memcache'))
|
53 |
+
{
|
54 |
+
$this->memcache = new Memcache();
|
55 |
+
}
|
56 |
+
else
|
57 |
+
{
|
58 |
+
return false;
|
59 |
+
}
|
60 |
+
|
61 |
+
// Enable compression, if available
|
62 |
+
if ($this->gzip)
|
63 |
+
{
|
64 |
+
if ($this->is_memcached)
|
65 |
+
{
|
66 |
+
$this->memcache->setOption(Memcached::OPT_COMPRESSION, true);
|
67 |
+
}
|
68 |
+
else
|
69 |
+
{
|
70 |
+
$this->gzip = MEMCACHE_COMPRESSED;
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
// Process Memcached servers.
|
75 |
+
if (isset($location) && sizeof($location) > 0)
|
76 |
+
{
|
77 |
+
foreach ($location as $loc)
|
78 |
+
{
|
79 |
+
if (isset($loc['port']) && !empty($loc['port']))
|
80 |
+
{
|
81 |
+
$this->memcache->addServer($loc['host'], $loc['port']);
|
82 |
+
}
|
83 |
+
else
|
84 |
+
{
|
85 |
+
$this->memcache->addServer($loc['host'], 11211);
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
return $this;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Creates a new cache.
|
95 |
+
*
|
96 |
+
* @param mixed $data (Required) The data to cache.
|
97 |
+
* @return boolean Whether the operation was successful.
|
98 |
+
*/
|
99 |
+
public function create($data)
|
100 |
+
{
|
101 |
+
if ($this->is_memcached)
|
102 |
+
{
|
103 |
+
return $this->memcache->set($this->id, $data, $this->expires);
|
104 |
+
}
|
105 |
+
return $this->memcache->set($this->id, $data, $this->gzip, $this->expires);
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Reads a cache.
|
110 |
+
*
|
111 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
112 |
+
*/
|
113 |
+
public function read()
|
114 |
+
{
|
115 |
+
if ($this->is_memcached)
|
116 |
+
{
|
117 |
+
return $this->memcache->get($this->id);
|
118 |
+
}
|
119 |
+
return $this->memcache->get($this->id, $this->gzip);
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Updates an existing cache.
|
124 |
+
*
|
125 |
+
* @param mixed $data (Required) The data to cache.
|
126 |
+
* @return boolean Whether the operation was successful.
|
127 |
+
*/
|
128 |
+
public function update($data)
|
129 |
+
{
|
130 |
+
if ($this->is_memcached)
|
131 |
+
{
|
132 |
+
return $this->memcache->replace($this->id, $data, $this->expires);
|
133 |
+
}
|
134 |
+
return $this->memcache->replace($this->id, $data, $this->gzip, $this->expires);
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Deletes a cache.
|
139 |
+
*
|
140 |
+
* @return boolean Whether the operation was successful.
|
141 |
+
*/
|
142 |
+
public function delete()
|
143 |
+
{
|
144 |
+
return $this->memcache->delete($this->id);
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
149 |
+
*
|
150 |
+
* @return boolean Whether the cache is expired or not.
|
151 |
+
*/
|
152 |
+
public function is_expired()
|
153 |
+
{
|
154 |
+
return false;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
159 |
+
*
|
160 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
161 |
+
*/
|
162 |
+
public function timestamp()
|
163 |
+
{
|
164 |
+
return false;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
169 |
+
*
|
170 |
+
* @return boolean Whether the operation was successful.
|
171 |
+
*/
|
172 |
+
public function reset()
|
173 |
+
{
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
}
|
app/libs/aws/lib/cachecore/cachepdo.class.php
CHANGED
@@ -1,290 +1,290 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all PDO-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
-
* to the ICacheCore interface.
|
5 |
-
*
|
6 |
-
* @version 2009.10.10
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
* @link http://php.net/pdo PDO
|
14 |
-
*/
|
15 |
-
class CachePDO extends CacheCore implements ICacheCore
|
16 |
-
{
|
17 |
-
/**
|
18 |
-
* Reference to the PDO connection object.
|
19 |
-
*/
|
20 |
-
var $pdo = null;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Holds the parsed URL components.
|
24 |
-
*/
|
25 |
-
var $dsn = null;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Holds the PDO-friendly version of the connection string.
|
29 |
-
*/
|
30 |
-
var $dsn_string = null;
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Holds the prepared statement for creating an entry.
|
34 |
-
*/
|
35 |
-
var $create = null;
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Holds the prepared statement for reading an entry.
|
39 |
-
*/
|
40 |
-
var $read = null;
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Holds the prepared statement for updating an entry.
|
44 |
-
*/
|
45 |
-
var $update = null;
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Holds the prepared statement for resetting the expiry of an entry.
|
49 |
-
*/
|
50 |
-
var $reset = null;
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Holds the prepared statement for deleting an entry.
|
54 |
-
*/
|
55 |
-
var $delete = null;
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Holds the response of the read so we only need to fetch it once instead of doing
|
59 |
-
* multiple queries.
|
60 |
-
*/
|
61 |
-
var $store_read = null;
|
62 |
-
|
63 |
-
|
64 |
-
/*%******************************************************************************************%*/
|
65 |
-
// CONSTRUCTOR
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Constructs a new instance of this class.
|
69 |
-
*
|
70 |
-
* Tested with [MySQL 5.0.x](http://mysql.com), [PostgreSQL](http://postgresql.com), and
|
71 |
-
* [SQLite 3.x](http://sqlite.org). SQLite 2.x is assumed to work. No other PDO-supported databases have
|
72 |
-
* been tested (e.g. Oracle, Microsoft SQL Server, IBM DB2, ODBC, Sybase, Firebird). Feel free to send
|
73 |
-
* patches for additional database support.
|
74 |
-
*
|
75 |
-
* See <http://php.net/pdo> for more information.
|
76 |
-
*
|
77 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
78 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
79 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
80 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
81 |
-
* @return object Reference to the cache object.
|
82 |
-
*/
|
83 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
84 |
-
{
|
85 |
-
// Make sure the name is no longer than 40 characters.
|
86 |
-
$name = sha1($name);
|
87 |
-
|
88 |
-
// Call parent constructor and set id.
|
89 |
-
parent::__construct($name, $location, $expires, $gzip);
|
90 |
-
$this->id = $this->name;
|
91 |
-
$options = array();
|
92 |
-
|
93 |
-
// Check if the location contains :// (e.g. mysql://user:pass@hostname:port/table)
|
94 |
-
if (stripos($location, '://') === false)
|
95 |
-
{
|
96 |
-
// No? Just pass it through.
|
97 |
-
$this->dsn = parse_url($location);
|
98 |
-
$this->dsn_string = $location;
|
99 |
-
}
|
100 |
-
else
|
101 |
-
{
|
102 |
-
// Yes? Parse and set the DSN
|
103 |
-
$this->dsn = parse_url($location);
|
104 |
-
$this->dsn_string = $this->dsn['scheme'] . ':host=' . $this->dsn['host'] . ((isset($this->dsn['port'])) ? ';port=' . $this->dsn['port'] : '') . ';dbname=' . substr($this->dsn['path'], 1);
|
105 |
-
}
|
106 |
-
|
107 |
-
// Make sure that user/pass are defined.
|
108 |
-
$user = isset($this->dsn['user']) ? $this->dsn['user'] : null;
|
109 |
-
$pass = isset($this->dsn['pass']) ? $this->dsn['pass'] : null;
|
110 |
-
|
111 |
-
// Set persistence for databases that support it.
|
112 |
-
switch ($this->dsn['scheme'])
|
113 |
-
{
|
114 |
-
case 'mysql': // MySQL
|
115 |
-
case 'pgsql': // PostgreSQL
|
116 |
-
$options[PDO::ATTR_PERSISTENT] = true;
|
117 |
-
break;
|
118 |
-
}
|
119 |
-
|
120 |
-
// Instantiate a new PDO object with a persistent connection.
|
121 |
-
$this->pdo = new PDO($this->dsn_string, $user, $pass, $options);
|
122 |
-
|
123 |
-
// Define prepared statements for improved performance.
|
124 |
-
$this->create = $this->pdo->prepare("INSERT INTO cache (id, expires, data) VALUES (:id, :expires, :data)");
|
125 |
-
$this->read = $this->pdo->prepare("SELECT id, expires, data FROM cache WHERE id = :id");
|
126 |
-
$this->reset = $this->pdo->prepare("UPDATE cache SET expires = :expires WHERE id = :id");
|
127 |
-
$this->delete = $this->pdo->prepare("DELETE FROM cache WHERE id = :id");
|
128 |
-
}
|
129 |
-
|
130 |
-
/**
|
131 |
-
* Creates a new cache.
|
132 |
-
*
|
133 |
-
* @param mixed $data (Required) The data to cache.
|
134 |
-
* @return boolean Whether the operation was successful.
|
135 |
-
*/
|
136 |
-
public function create($data)
|
137 |
-
{
|
138 |
-
$data = serialize($data);
|
139 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
140 |
-
|
141 |
-
$this->create->bindParam(':id', $this->id);
|
142 |
-
$this->create->bindParam(':data', $data);
|
143 |
-
$this->create->bindParam(':expires', $this->generate_timestamp());
|
144 |
-
|
145 |
-
return (bool) $this->create->execute();
|
146 |
-
}
|
147 |
-
|
148 |
-
/**
|
149 |
-
* Reads a cache.
|
150 |
-
*
|
151 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
152 |
-
*/
|
153 |
-
public function read()
|
154 |
-
{
|
155 |
-
if (!$this->store_read)
|
156 |
-
{
|
157 |
-
$this->read->bindParam(':id', $this->id);
|
158 |
-
$this->read->execute();
|
159 |
-
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
160 |
-
}
|
161 |
-
|
162 |
-
if ($this->store_read)
|
163 |
-
{
|
164 |
-
$data = $this->store_read['data'];
|
165 |
-
$data = $this->gzip ? gzuncompress($data) : $data;
|
166 |
-
|
167 |
-
return unserialize($data);
|
168 |
-
}
|
169 |
-
|
170 |
-
return false;
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Updates an existing cache.
|
175 |
-
*
|
176 |
-
* @param mixed $data (Required) The data to cache.
|
177 |
-
* @return boolean Whether the operation was successful.
|
178 |
-
*/
|
179 |
-
public function update($data)
|
180 |
-
{
|
181 |
-
$this->delete();
|
182 |
-
return $this->create($data);
|
183 |
-
}
|
184 |
-
|
185 |
-
/**
|
186 |
-
* Deletes a cache.
|
187 |
-
*
|
188 |
-
* @return boolean Whether the operation was successful.
|
189 |
-
*/
|
190 |
-
public function delete()
|
191 |
-
{
|
192 |
-
$this->delete->bindParam(':id', $this->id);
|
193 |
-
return $this->delete->execute();
|
194 |
-
}
|
195 |
-
|
196 |
-
/**
|
197 |
-
* Checks whether the cache object is expired or not.
|
198 |
-
*
|
199 |
-
* @return boolean Whether the cache is expired or not.
|
200 |
-
*/
|
201 |
-
public function is_expired()
|
202 |
-
{
|
203 |
-
if ($this->timestamp() + $this->expires < time())
|
204 |
-
{
|
205 |
-
return true;
|
206 |
-
}
|
207 |
-
|
208 |
-
return false;
|
209 |
-
}
|
210 |
-
|
211 |
-
/**
|
212 |
-
* Retrieves the timestamp of the cache.
|
213 |
-
*
|
214 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
215 |
-
*/
|
216 |
-
public function timestamp()
|
217 |
-
{
|
218 |
-
if (!$this->store_read)
|
219 |
-
{
|
220 |
-
$this->read->bindParam(':id', $this->id);
|
221 |
-
$this->read->execute();
|
222 |
-
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
223 |
-
}
|
224 |
-
|
225 |
-
if ($this->store_read)
|
226 |
-
{
|
227 |
-
$value = $this->store_read['expires'];
|
228 |
-
|
229 |
-
// If 'expires' isn't yet an integer, convert it into one.
|
230 |
-
if (!is_numeric($value))
|
231 |
-
{
|
232 |
-
$value = strtotime($value);
|
233 |
-
}
|
234 |
-
|
235 |
-
$this->timestamp = date('U', $value);
|
236 |
-
return $this->timestamp;
|
237 |
-
}
|
238 |
-
|
239 |
-
return false;
|
240 |
-
}
|
241 |
-
|
242 |
-
/**
|
243 |
-
* Resets the freshness of the cache.
|
244 |
-
*
|
245 |
-
* @return boolean Whether the operation was successful.
|
246 |
-
*/
|
247 |
-
public function reset()
|
248 |
-
{
|
249 |
-
$this->reset->bindParam(':id', $this->id);
|
250 |
-
$this->reset->bindParam(':expires', $this->generate_timestamp());
|
251 |
-
return (bool) $this->reset->execute();
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* Returns a list of supported PDO database drivers. Identical to <PDO::getAvailableDrivers()>.
|
256 |
-
*
|
257 |
-
* @return array The list of supported database drivers.
|
258 |
-
* @link http://php.net/pdo.getavailabledrivers PHP Method
|
259 |
-
*/
|
260 |
-
public function get_drivers()
|
261 |
-
{
|
262 |
-
return PDO::getAvailableDrivers();
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Returns a timestamp value apropriate to the current database type.
|
267 |
-
*
|
268 |
-
* @return mixed Timestamp for MySQL and PostgreSQL, integer value for SQLite.
|
269 |
-
*/
|
270 |
-
protected function generate_timestamp()
|
271 |
-
{
|
272 |
-
// Define 'expires' settings differently.
|
273 |
-
switch ($this->dsn['scheme'])
|
274 |
-
{
|
275 |
-
// These support timestamps.
|
276 |
-
case 'mysql': // MySQL
|
277 |
-
case 'pgsql': // PostgreSQL
|
278 |
-
$expires = date(DATE_FORMAT_MYSQL, time());
|
279 |
-
break;
|
280 |
-
|
281 |
-
// These support integers.
|
282 |
-
case 'sqlite': // SQLite 3
|
283 |
-
case 'sqlite2': // SQLite 2
|
284 |
-
$expires = time();
|
285 |
-
break;
|
286 |
-
}
|
287 |
-
|
288 |
-
return $expires;
|
289 |
-
}
|
290 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all PDO-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2009.10.10
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
* @link http://php.net/pdo PDO
|
14 |
+
*/
|
15 |
+
class CachePDO extends CacheCore implements ICacheCore
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* Reference to the PDO connection object.
|
19 |
+
*/
|
20 |
+
var $pdo = null;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Holds the parsed URL components.
|
24 |
+
*/
|
25 |
+
var $dsn = null;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Holds the PDO-friendly version of the connection string.
|
29 |
+
*/
|
30 |
+
var $dsn_string = null;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Holds the prepared statement for creating an entry.
|
34 |
+
*/
|
35 |
+
var $create = null;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Holds the prepared statement for reading an entry.
|
39 |
+
*/
|
40 |
+
var $read = null;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Holds the prepared statement for updating an entry.
|
44 |
+
*/
|
45 |
+
var $update = null;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Holds the prepared statement for resetting the expiry of an entry.
|
49 |
+
*/
|
50 |
+
var $reset = null;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Holds the prepared statement for deleting an entry.
|
54 |
+
*/
|
55 |
+
var $delete = null;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Holds the response of the read so we only need to fetch it once instead of doing
|
59 |
+
* multiple queries.
|
60 |
+
*/
|
61 |
+
var $store_read = null;
|
62 |
+
|
63 |
+
|
64 |
+
/*%******************************************************************************************%*/
|
65 |
+
// CONSTRUCTOR
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Constructs a new instance of this class.
|
69 |
+
*
|
70 |
+
* Tested with [MySQL 5.0.x](http://mysql.com), [PostgreSQL](http://postgresql.com), and
|
71 |
+
* [SQLite 3.x](http://sqlite.org). SQLite 2.x is assumed to work. No other PDO-supported databases have
|
72 |
+
* been tested (e.g. Oracle, Microsoft SQL Server, IBM DB2, ODBC, Sybase, Firebird). Feel free to send
|
73 |
+
* patches for additional database support.
|
74 |
+
*
|
75 |
+
* See <http://php.net/pdo> for more information.
|
76 |
+
*
|
77 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
78 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
79 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
80 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
81 |
+
* @return object Reference to the cache object.
|
82 |
+
*/
|
83 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
84 |
+
{
|
85 |
+
// Make sure the name is no longer than 40 characters.
|
86 |
+
$name = sha1($name);
|
87 |
+
|
88 |
+
// Call parent constructor and set id.
|
89 |
+
parent::__construct($name, $location, $expires, $gzip);
|
90 |
+
$this->id = $this->name;
|
91 |
+
$options = array();
|
92 |
+
|
93 |
+
// Check if the location contains :// (e.g. mysql://user:pass@hostname:port/table)
|
94 |
+
if (stripos($location, '://') === false)
|
95 |
+
{
|
96 |
+
// No? Just pass it through.
|
97 |
+
$this->dsn = parse_url($location);
|
98 |
+
$this->dsn_string = $location;
|
99 |
+
}
|
100 |
+
else
|
101 |
+
{
|
102 |
+
// Yes? Parse and set the DSN
|
103 |
+
$this->dsn = parse_url($location);
|
104 |
+
$this->dsn_string = $this->dsn['scheme'] . ':host=' . $this->dsn['host'] . ((isset($this->dsn['port'])) ? ';port=' . $this->dsn['port'] : '') . ';dbname=' . substr($this->dsn['path'], 1);
|
105 |
+
}
|
106 |
+
|
107 |
+
// Make sure that user/pass are defined.
|
108 |
+
$user = isset($this->dsn['user']) ? $this->dsn['user'] : null;
|
109 |
+
$pass = isset($this->dsn['pass']) ? $this->dsn['pass'] : null;
|
110 |
+
|
111 |
+
// Set persistence for databases that support it.
|
112 |
+
switch ($this->dsn['scheme'])
|
113 |
+
{
|
114 |
+
case 'mysql': // MySQL
|
115 |
+
case 'pgsql': // PostgreSQL
|
116 |
+
$options[PDO::ATTR_PERSISTENT] = true;
|
117 |
+
break;
|
118 |
+
}
|
119 |
+
|
120 |
+
// Instantiate a new PDO object with a persistent connection.
|
121 |
+
$this->pdo = new PDO($this->dsn_string, $user, $pass, $options);
|
122 |
+
|
123 |
+
// Define prepared statements for improved performance.
|
124 |
+
$this->create = $this->pdo->prepare("INSERT INTO cache (id, expires, data) VALUES (:id, :expires, :data)");
|
125 |
+
$this->read = $this->pdo->prepare("SELECT id, expires, data FROM cache WHERE id = :id");
|
126 |
+
$this->reset = $this->pdo->prepare("UPDATE cache SET expires = :expires WHERE id = :id");
|
127 |
+
$this->delete = $this->pdo->prepare("DELETE FROM cache WHERE id = :id");
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Creates a new cache.
|
132 |
+
*
|
133 |
+
* @param mixed $data (Required) The data to cache.
|
134 |
+
* @return boolean Whether the operation was successful.
|
135 |
+
*/
|
136 |
+
public function create($data)
|
137 |
+
{
|
138 |
+
$data = serialize($data);
|
139 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
140 |
+
|
141 |
+
$this->create->bindParam(':id', $this->id);
|
142 |
+
$this->create->bindParam(':data', $data);
|
143 |
+
$this->create->bindParam(':expires', $this->generate_timestamp());
|
144 |
+
|
145 |
+
return (bool) $this->create->execute();
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Reads a cache.
|
150 |
+
*
|
151 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
152 |
+
*/
|
153 |
+
public function read()
|
154 |
+
{
|
155 |
+
if (!$this->store_read)
|
156 |
+
{
|
157 |
+
$this->read->bindParam(':id', $this->id);
|
158 |
+
$this->read->execute();
|
159 |
+
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
160 |
+
}
|
161 |
+
|
162 |
+
if ($this->store_read)
|
163 |
+
{
|
164 |
+
$data = $this->store_read['data'];
|
165 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
166 |
+
|
167 |
+
return unserialize($data);
|
168 |
+
}
|
169 |
+
|
170 |
+
return false;
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Updates an existing cache.
|
175 |
+
*
|
176 |
+
* @param mixed $data (Required) The data to cache.
|
177 |
+
* @return boolean Whether the operation was successful.
|
178 |
+
*/
|
179 |
+
public function update($data)
|
180 |
+
{
|
181 |
+
$this->delete();
|
182 |
+
return $this->create($data);
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Deletes a cache.
|
187 |
+
*
|
188 |
+
* @return boolean Whether the operation was successful.
|
189 |
+
*/
|
190 |
+
public function delete()
|
191 |
+
{
|
192 |
+
$this->delete->bindParam(':id', $this->id);
|
193 |
+
return $this->delete->execute();
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Checks whether the cache object is expired or not.
|
198 |
+
*
|
199 |
+
* @return boolean Whether the cache is expired or not.
|
200 |
+
*/
|
201 |
+
public function is_expired()
|
202 |
+
{
|
203 |
+
if ($this->timestamp() + $this->expires < time())
|
204 |
+
{
|
205 |
+
return true;
|
206 |
+
}
|
207 |
+
|
208 |
+
return false;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Retrieves the timestamp of the cache.
|
213 |
+
*
|
214 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
215 |
+
*/
|
216 |
+
public function timestamp()
|
217 |
+
{
|
218 |
+
if (!$this->store_read)
|
219 |
+
{
|
220 |
+
$this->read->bindParam(':id', $this->id);
|
221 |
+
$this->read->execute();
|
222 |
+
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
223 |
+
}
|
224 |
+
|
225 |
+
if ($this->store_read)
|
226 |
+
{
|
227 |
+
$value = $this->store_read['expires'];
|
228 |
+
|
229 |
+
// If 'expires' isn't yet an integer, convert it into one.
|
230 |
+
if (!is_numeric($value))
|
231 |
+
{
|
232 |
+
$value = strtotime($value);
|
233 |
+
}
|
234 |
+
|
235 |
+
$this->timestamp = date('U', $value);
|
236 |
+
return $this->timestamp;
|
237 |
+
}
|
238 |
+
|
239 |
+
return false;
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Resets the freshness of the cache.
|
244 |
+
*
|
245 |
+
* @return boolean Whether the operation was successful.
|
246 |
+
*/
|
247 |
+
public function reset()
|
248 |
+
{
|
249 |
+
$this->reset->bindParam(':id', $this->id);
|
250 |
+
$this->reset->bindParam(':expires', $this->generate_timestamp());
|
251 |
+
return (bool) $this->reset->execute();
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Returns a list of supported PDO database drivers. Identical to <PDO::getAvailableDrivers()>.
|
256 |
+
*
|
257 |
+
* @return array The list of supported database drivers.
|
258 |
+
* @link http://php.net/pdo.getavailabledrivers PHP Method
|
259 |
+
*/
|
260 |
+
public function get_drivers()
|
261 |
+
{
|
262 |
+
return PDO::getAvailableDrivers();
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Returns a timestamp value apropriate to the current database type.
|
267 |
+
*
|
268 |
+
* @return mixed Timestamp for MySQL and PostgreSQL, integer value for SQLite.
|
269 |
+
*/
|
270 |
+
protected function generate_timestamp()
|
271 |
+
{
|
272 |
+
// Define 'expires' settings differently.
|
273 |
+
switch ($this->dsn['scheme'])
|
274 |
+
{
|
275 |
+
// These support timestamps.
|
276 |
+
case 'mysql': // MySQL
|
277 |
+
case 'pgsql': // PostgreSQL
|
278 |
+
$expires = date(DATE_FORMAT_MYSQL, time());
|
279 |
+
break;
|
280 |
+
|
281 |
+
// These support integers.
|
282 |
+
case 'sqlite': // SQLite 3
|
283 |
+
case 'sqlite2': // SQLite 2
|
284 |
+
$expires = time();
|
285 |
+
break;
|
286 |
+
}
|
287 |
+
|
288 |
+
return $expires;
|
289 |
+
}
|
290 |
+
}
|
app/libs/aws/lib/cachecore/cachexcache.class.php
CHANGED
@@ -1,122 +1,122 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Container for all XCache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
-
* to the ICacheCore interface.
|
5 |
-
*
|
6 |
-
* @version 2009.10.10
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
* @link http://xcache.lighttpd.net XCache
|
14 |
-
*/
|
15 |
-
class CacheXCache extends CacheCore implements ICacheCore
|
16 |
-
{
|
17 |
-
|
18 |
-
/*%******************************************************************************************%*/
|
19 |
-
// CONSTRUCTOR
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Constructs a new instance of this class.
|
23 |
-
*
|
24 |
-
* @param string $name (Required) A name to uniquely identify the cache object.
|
25 |
-
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
26 |
-
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
27 |
-
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
28 |
-
* @return object Reference to the cache object.
|
29 |
-
*/
|
30 |
-
public function __construct($name, $location, $expires, $gzip = true)
|
31 |
-
{
|
32 |
-
parent::__construct($name, null, $expires, $gzip);
|
33 |
-
$this->id = $this->name;
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Creates a new cache.
|
38 |
-
*
|
39 |
-
* @param mixed $data (Required) The data to cache.
|
40 |
-
* @return boolean Whether the operation was successful.
|
41 |
-
*/
|
42 |
-
public function create($data)
|
43 |
-
{
|
44 |
-
$data = serialize($data);
|
45 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
46 |
-
|
47 |
-
return xcache_set($this->id, $data, $this->expires);
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Reads a cache.
|
52 |
-
*
|
53 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
54 |
-
*/
|
55 |
-
public function read()
|
56 |
-
{
|
57 |
-
if ($data = xcache_get($this->id))
|
58 |
-
{
|
59 |
-
$data = $this->gzip ? gzuncompress($data) : $data;
|
60 |
-
return unserialize($data);
|
61 |
-
}
|
62 |
-
|
63 |
-
return false;
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Updates an existing cache.
|
68 |
-
*
|
69 |
-
* @param mixed $data (Required) The data to cache.
|
70 |
-
* @return boolean Whether the operation was successful.
|
71 |
-
*/
|
72 |
-
public function update($data)
|
73 |
-
{
|
74 |
-
$data = serialize($data);
|
75 |
-
$data = $this->gzip ? gzcompress($data) : $data;
|
76 |
-
|
77 |
-
return xcache_set($this->id, $data, $this->expires);
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Deletes a cache.
|
82 |
-
*
|
83 |
-
* @return boolean Whether the operation was successful.
|
84 |
-
*/
|
85 |
-
public function delete()
|
86 |
-
{
|
87 |
-
return xcache_unset($this->id);
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Defined here, but always returns false. XCache manages it's own expirations. It's worth
|
92 |
-
* mentioning that if the server is configured for a long xcache.var_gc_interval then it IS
|
93 |
-
* possible for expired data to remain in the var cache, though it is not possible to access
|
94 |
-
* it.
|
95 |
-
*
|
96 |
-
* @return boolean Whether the cache is expired or not.
|
97 |
-
*/
|
98 |
-
public function is_expired()
|
99 |
-
{
|
100 |
-
return false;
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
105 |
-
*
|
106 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
107 |
-
*/
|
108 |
-
public function timestamp()
|
109 |
-
{
|
110 |
-
return false;
|
111 |
-
}
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
115 |
-
*
|
116 |
-
* @return boolean Whether the operation was successful.
|
117 |
-
*/
|
118 |
-
public function reset()
|
119 |
-
{
|
120 |
-
return false;
|
121 |
-
}
|
122 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all XCache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2009.10.10
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
* @link http://xcache.lighttpd.net XCache
|
14 |
+
*/
|
15 |
+
class CacheXCache extends CacheCore implements ICacheCore
|
16 |
+
{
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CONSTRUCTOR
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Constructs a new instance of this class.
|
23 |
+
*
|
24 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
25 |
+
* @param string $location (Required) The location to store the cache object in. This may vary by cache method.
|
26 |
+
* @param integer $expires (Required) The number of seconds until a cache object is considered stale.
|
27 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. Defaults to true.
|
28 |
+
* @return object Reference to the cache object.
|
29 |
+
*/
|
30 |
+
public function __construct($name, $location, $expires, $gzip = true)
|
31 |
+
{
|
32 |
+
parent::__construct($name, null, $expires, $gzip);
|
33 |
+
$this->id = $this->name;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Creates a new cache.
|
38 |
+
*
|
39 |
+
* @param mixed $data (Required) The data to cache.
|
40 |
+
* @return boolean Whether the operation was successful.
|
41 |
+
*/
|
42 |
+
public function create($data)
|
43 |
+
{
|
44 |
+
$data = serialize($data);
|
45 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
46 |
+
|
47 |
+
return xcache_set($this->id, $data, $this->expires);
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Reads a cache.
|
52 |
+
*
|
53 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
54 |
+
*/
|
55 |
+
public function read()
|
56 |
+
{
|
57 |
+
if ($data = xcache_get($this->id))
|
58 |
+
{
|
59 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
60 |
+
return unserialize($data);
|
61 |
+
}
|
62 |
+
|
63 |
+
return false;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Updates an existing cache.
|
68 |
+
*
|
69 |
+
* @param mixed $data (Required) The data to cache.
|
70 |
+
* @return boolean Whether the operation was successful.
|
71 |
+
*/
|
72 |
+
public function update($data)
|
73 |
+
{
|
74 |
+
$data = serialize($data);
|
75 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
76 |
+
|
77 |
+
return xcache_set($this->id, $data, $this->expires);
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Deletes a cache.
|
82 |
+
*
|
83 |
+
* @return boolean Whether the operation was successful.
|
84 |
+
*/
|
85 |
+
public function delete()
|
86 |
+
{
|
87 |
+
return xcache_unset($this->id);
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Defined here, but always returns false. XCache manages it's own expirations. It's worth
|
92 |
+
* mentioning that if the server is configured for a long xcache.var_gc_interval then it IS
|
93 |
+
* possible for expired data to remain in the var cache, though it is not possible to access
|
94 |
+
* it.
|
95 |
+
*
|
96 |
+
* @return boolean Whether the cache is expired or not.
|
97 |
+
*/
|
98 |
+
public function is_expired()
|
99 |
+
{
|
100 |
+
return false;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
105 |
+
*
|
106 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
107 |
+
*/
|
108 |
+
public function timestamp()
|
109 |
+
{
|
110 |
+
return false;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
115 |
+
*
|
116 |
+
* @return boolean Whether the operation was successful.
|
117 |
+
*/
|
118 |
+
public function reset()
|
119 |
+
{
|
120 |
+
return false;
|
121 |
+
}
|
122 |
+
}
|
app/libs/aws/lib/cachecore/icachecore.interface.php
CHANGED
@@ -1,66 +1,66 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Defines the methods that all implementing classes MUST have. Covers CRUD (create, read, update,
|
4 |
-
* delete) methods, as well as others that are used in the base <CacheCore> class.
|
5 |
-
*
|
6 |
-
* @version 2009.03.22
|
7 |
-
* @copyright 2006-2010 Ryan Parman
|
8 |
-
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
-
* @copyright 2008-2010 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
-
* @link http://getcloudfusion.com CloudFusion
|
13 |
-
*/
|
14 |
-
interface ICacheCore
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* Creates a new cache.
|
18 |
-
*
|
19 |
-
* @param mixed $data (Required) The data to cache.
|
20 |
-
* @return boolean Whether the operation was successful.
|
21 |
-
*/
|
22 |
-
public function create($data);
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Reads a cache.
|
26 |
-
*
|
27 |
-
* @return mixed Either the content of the cache object, or boolean `false`.
|
28 |
-
*/
|
29 |
-
public function read();
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Updates an existing cache.
|
33 |
-
*
|
34 |
-
* @param mixed $data (Required) The data to cache.
|
35 |
-
* @return boolean Whether the operation was successful.
|
36 |
-
*/
|
37 |
-
public function update($data);
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Deletes a cache.
|
41 |
-
*
|
42 |
-
* @return boolean Whether the operation was successful.
|
43 |
-
*/
|
44 |
-
public function delete();
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Checks whether the cache object is expired or not.
|
48 |
-
*
|
49 |
-
* @return boolean Whether the cache is expired or not.
|
50 |
-
*/
|
51 |
-
public function is_expired();
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Retrieves the timestamp of the cache.
|
55 |
-
*
|
56 |
-
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
57 |
-
*/
|
58 |
-
public function timestamp();
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Resets the freshness of the cache.
|
62 |
-
*
|
63 |
-
* @return boolean Whether the operation was successful.
|
64 |
-
*/
|
65 |
-
public function reset();
|
66 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Defines the methods that all implementing classes MUST have. Covers CRUD (create, read, update,
|
4 |
+
* delete) methods, as well as others that are used in the base <CacheCore> class.
|
5 |
+
*
|
6 |
+
* @version 2009.03.22
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
*/
|
14 |
+
interface ICacheCore
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Creates a new cache.
|
18 |
+
*
|
19 |
+
* @param mixed $data (Required) The data to cache.
|
20 |
+
* @return boolean Whether the operation was successful.
|
21 |
+
*/
|
22 |
+
public function create($data);
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Reads a cache.
|
26 |
+
*
|
27 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
28 |
+
*/
|
29 |
+
public function read();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Updates an existing cache.
|
33 |
+
*
|
34 |
+
* @param mixed $data (Required) The data to cache.
|
35 |
+
* @return boolean Whether the operation was successful.
|
36 |
+
*/
|
37 |
+
public function update($data);
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Deletes a cache.
|
41 |
+
*
|
42 |
+
* @return boolean Whether the operation was successful.
|
43 |
+
*/
|
44 |
+
public function delete();
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Checks whether the cache object is expired or not.
|
48 |
+
*
|
49 |
+
* @return boolean Whether the cache is expired or not.
|
50 |
+
*/
|
51 |
+
public function is_expired();
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Retrieves the timestamp of the cache.
|
55 |
+
*
|
56 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
57 |
+
*/
|
58 |
+
public function timestamp();
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Resets the freshness of the cache.
|
62 |
+
*
|
63 |
+
* @return boolean Whether the operation was successful.
|
64 |
+
*/
|
65 |
+
public function reset();
|
66 |
+
}
|
app/libs/aws/lib/requestcore/LICENSE
CHANGED
@@ -1,25 +1,25 @@
|
|
1 |
-
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
-
|
3 |
-
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
-
permitted provided that the following conditions are met:
|
5 |
-
|
6 |
-
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
-
conditions and the following disclaimer.
|
8 |
-
|
9 |
-
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
-
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
-
provided with the distribution.
|
12 |
-
|
13 |
-
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
-
endorse or promote products derived from this software without specific prior written
|
15 |
-
permission.
|
16 |
-
|
17 |
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
-
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
-
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
-
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
-
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
-
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
-
POSSIBILITY OF SUCH DAMAGE.
|
1 |
+
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
+
|
3 |
+
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
+
permitted provided that the following conditions are met:
|
5 |
+
|
6 |
+
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
+
conditions and the following disclaimer.
|
8 |
+
|
9 |
+
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
+
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
+
provided with the distribution.
|
12 |
+
|
13 |
+
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
+
endorse or promote products derived from this software without specific prior written
|
15 |
+
permission.
|
16 |
+
|
17 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
+
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
+
POSSIBILITY OF SUCH DAMAGE.
|
app/libs/aws/lib/requestcore/cacert.pem
ADDED
@@ -0,0 +1,3990 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
##
|
2 |
+
## ca-bundle.crt -- Bundle of CA Root Certificates
|
3 |
+
##
|
4 |
+
## Certificate data from Mozilla as of: Wed Apr 13 08:13:21 2011
|
5 |
+
##
|
6 |
+
## This is a bundle of X.509 certificates of public Certificate Authorities
|
7 |
+
## (CA). These were automatically extracted from Mozilla's root certificates
|
8 |
+
## file (certdata.txt). This file can be found in the mozilla source tree:
|
9 |
+
## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
|
10 |
+
##
|
11 |
+
## It contains the certificates in PEM format and therefore
|
12 |
+
## can be directly used with curl / libcurl / php_curl, or with
|
13 |
+
## an Apache+mod_ssl webserver for SSL client authentication.
|
14 |
+
## Just configure this file as the SSLCACertificateFile.
|
15 |
+
##
|
16 |
+
|
17 |
+
# Ryan Parman elects to use cacert.pem under the Mozilla Public License, version 1.1.
|
18 |
+
# Amazon elects to use cacert.pem under the Mozilla Public License, version 1.1.
|
19 |
+
#
|
20 |
+
# ***** BEGIN LICENSE BLOCK *****
|
21 |
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
22 |
+
#
|
23 |
+
# The contents of this file are subject to the Mozilla Public License Version
|
24 |
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
25 |
+
# the License. You may obtain a copy of the License at
|
26 |
+
# http://www.mozilla.org/MPL/
|
27 |
+
#
|
28 |
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
29 |
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
30 |
+
# for the specific language governing rights and limitations under the
|
31 |
+
# License.
|
32 |
+
#
|
33 |
+
# The Original Code is the Netscape security libraries.
|
34 |
+
#
|
35 |
+
# The Initial Developer of the Original Code is
|
36 |
+
# Netscape Communications Corporation.
|
37 |
+
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
38 |
+
# the Initial Developer. All Rights Reserved.
|
39 |
+
#
|
40 |
+
# Contributor(s):
|
41 |
+
#
|
42 |
+
# Alternatively, the contents of this file may be used under the terms of
|
43 |
+
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
44 |
+
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
45 |
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
46 |
+
# of those above. If you wish to allow use of your version of this file only
|
47 |
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
48 |
+
# use your version of this file under the terms of the MPL, indicate your
|
49 |
+
# decision by deleting the provisions above and replace them with the notice
|
50 |
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
51 |
+
# the provisions above, a recipient may use your version of this file under
|
52 |
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
53 |
+
#
|
54 |
+
# ***** END LICENSE BLOCK *****
|
55 |
+
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.74 $ $Date: 2011/04/13 00:10:24 $
|
56 |
+
|
57 |
+
GTE CyberTrust Global Root
|
58 |
+
==========================
|
59 |
+
-----BEGIN CERTIFICATE-----
|
60 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
61 |
+
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
62 |
+
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
63 |
+
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
64 |
+
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
65 |
+
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
66 |
+
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
67 |
+
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
68 |
+
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
69 |
+
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
70 |
+
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
71 |
+
-----END CERTIFICATE-----
|
72 |
+
|
73 |
+
Thawte Server CA
|
74 |
+
================
|
75 |
+
-----BEGIN CERTIFICATE-----
|
76 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
77 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
78 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
79 |
+
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
80 |
+
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
81 |
+
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
82 |
+
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
83 |
+
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
84 |
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
85 |
+
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
86 |
+
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
87 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
88 |
+
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
89 |
+
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
90 |
+
-----END CERTIFICATE-----
|
91 |
+
|
92 |
+
Thawte Premium Server CA
|
93 |
+
========================
|
94 |
+
-----BEGIN CERTIFICATE-----
|
95 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
96 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
97 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
98 |
+
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
99 |
+
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
100 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
101 |
+
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
102 |
+
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
103 |
+
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
104 |
+
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
105 |
+
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
106 |
+
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
107 |
+
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
108 |
+
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
109 |
+
UCemDaYj+bvLpgcUQg==
|
110 |
+
-----END CERTIFICATE-----
|
111 |
+
|
112 |
+
Equifax Secure CA
|
113 |
+
=================
|
114 |
+
-----BEGIN CERTIFICATE-----
|
115 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
116 |
+
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
117 |
+
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
118 |
+
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
119 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
120 |
+
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
121 |
+
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
122 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
123 |
+
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
124 |
+
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
125 |
+
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
126 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
127 |
+
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
128 |
+
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
129 |
+
70+sB3c4
|
130 |
+
-----END CERTIFICATE-----
|
131 |
+
|
132 |
+
Digital Signature Trust Co. Global CA 1
|
133 |
+
=======================================
|
134 |
+
-----BEGIN CERTIFICATE-----
|
135 |
+
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
136 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
137 |
+
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
138 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
139 |
+
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
140 |
+
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
141 |
+
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
142 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
143 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
144 |
+
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
145 |
+
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
146 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
147 |
+
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
148 |
+
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
149 |
+
RbyhkwS7hp86W0N6w4pl
|
150 |
+
-----END CERTIFICATE-----
|
151 |
+
|
152 |
+
Digital Signature Trust Co. Global CA 3
|
153 |
+
=======================================
|
154 |
+
-----BEGIN CERTIFICATE-----
|
155 |
+
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
156 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
157 |
+
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
158 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
159 |
+
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
160 |
+
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
161 |
+
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
162 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
163 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
164 |
+
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
165 |
+
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
166 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
167 |
+
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
168 |
+
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
169 |
+
mPnHfxsb1gYgAlihw6ID
|
170 |
+
-----END CERTIFICATE-----
|
171 |
+
|
172 |
+
Verisign Class 1 Public Primary Certification Authority
|
173 |
+
=======================================================
|
174 |
+
-----BEGIN CERTIFICATE-----
|
175 |
+
MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT
|
176 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
177 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla
|
178 |
+
MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg
|
179 |
+
MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF
|
180 |
+
AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw
|
181 |
+
0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7
|
182 |
+
NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf
|
183 |
+
7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx
|
184 |
+
giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A
|
185 |
+
NACY89FxlA==
|
186 |
+
-----END CERTIFICATE-----
|
187 |
+
|
188 |
+
Verisign Class 2 Public Primary Certification Authority
|
189 |
+
=======================================================
|
190 |
+
-----BEGIN CERTIFICATE-----
|
191 |
+
MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
192 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5
|
193 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
194 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy
|
195 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
196 |
+
A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6
|
197 |
+
Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/
|
198 |
+
S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX
|
199 |
+
XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY
|
200 |
+
YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2
|
201 |
+
lw0Xd8rY
|
202 |
+
-----END CERTIFICATE-----
|
203 |
+
|
204 |
+
Verisign Class 3 Public Primary Certification Authority
|
205 |
+
=======================================================
|
206 |
+
-----BEGIN CERTIFICATE-----
|
207 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
208 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
209 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
210 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
211 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
212 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
213 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
214 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
215 |
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
216 |
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
217 |
+
Tqj/ZA1k
|
218 |
+
-----END CERTIFICATE-----
|
219 |
+
|
220 |
+
Verisign Class 1 Public Primary Certification Authority - G2
|
221 |
+
============================================================
|
222 |
+
-----BEGIN CERTIFICATE-----
|
223 |
+
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
224 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
225 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
226 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
227 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
228 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
229 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
230 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
231 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
|
232 |
+
k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
|
233 |
+
WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
|
234 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
|
235 |
+
XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
|
236 |
+
lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
|
237 |
+
-----END CERTIFICATE-----
|
238 |
+
|
239 |
+
Verisign Class 2 Public Primary Certification Authority - G2
|
240 |
+
============================================================
|
241 |
+
-----BEGIN CERTIFICATE-----
|
242 |
+
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
|
243 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
244 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
245 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
246 |
+
c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
|
247 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
248 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
249 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
250 |
+
c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
|
251 |
+
nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
|
252 |
+
wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
|
253 |
+
ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
|
254 |
+
1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
|
255 |
+
LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
|
256 |
+
-----END CERTIFICATE-----
|
257 |
+
|
258 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
259 |
+
============================================================
|
260 |
+
-----BEGIN CERTIFICATE-----
|
261 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
262 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
263 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
264 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
265 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
266 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
267 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
268 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
269 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
270 |
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
271 |
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
272 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
273 |
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
274 |
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
275 |
+
-----END CERTIFICATE-----
|
276 |
+
|
277 |
+
Verisign Class 4 Public Primary Certification Authority - G2
|
278 |
+
============================================================
|
279 |
+
-----BEGIN CERTIFICATE-----
|
280 |
+
MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
281 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
|
282 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
283 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
284 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
285 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
|
286 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
287 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
288 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4
|
289 |
+
xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH
|
290 |
+
qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB
|
291 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF
|
292 |
+
WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB
|
293 |
+
ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp
|
294 |
+
-----END CERTIFICATE-----
|
295 |
+
|
296 |
+
GlobalSign Root CA
|
297 |
+
==================
|
298 |
+
-----BEGIN CERTIFICATE-----
|
299 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
300 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
301 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
302 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
303 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
304 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
305 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
306 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
307 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
308 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
309 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
310 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
311 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
312 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
313 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
314 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
315 |
+
-----END CERTIFICATE-----
|
316 |
+
|
317 |
+
GlobalSign Root CA - R2
|
318 |
+
=======================
|
319 |
+
-----BEGIN CERTIFICATE-----
|
320 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
321 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
322 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
323 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
324 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
325 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
326 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
327 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
328 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
329 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
330 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
331 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
332 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
333 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
334 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
335 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
336 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
337 |
+
-----END CERTIFICATE-----
|
338 |
+
|
339 |
+
ValiCert Class 1 VA
|
340 |
+
===================
|
341 |
+
-----BEGIN CERTIFICATE-----
|
342 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
343 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
344 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
345 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
346 |
+
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
347 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
348 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
349 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
350 |
+
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
351 |
+
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
352 |
+
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
353 |
+
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
354 |
+
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
355 |
+
Orf1LXLI
|
356 |
+
-----END CERTIFICATE-----
|
357 |
+
|
358 |
+
ValiCert Class 2 VA
|
359 |
+
===================
|
360 |
+
-----BEGIN CERTIFICATE-----
|
361 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
362 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
363 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
364 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
365 |
+
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
366 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
367 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
368 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
369 |
+
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
370 |
+
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
371 |
+
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
372 |
+
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
373 |
+
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
374 |
+
W9ViH0Pd
|
375 |
+
-----END CERTIFICATE-----
|
376 |
+
|
377 |
+
RSA Root Certificate 1
|
378 |
+
======================
|
379 |
+
-----BEGIN CERTIFICATE-----
|
380 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
381 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
382 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
383 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
384 |
+
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
385 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
386 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
387 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
388 |
+
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
389 |
+
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
390 |
+
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
391 |
+
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
392 |
+
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
393 |
+
on+jjBXu
|
394 |
+
-----END CERTIFICATE-----
|
395 |
+
|
396 |
+
Verisign Class 1 Public Primary Certification Authority - G3
|
397 |
+
============================================================
|
398 |
+
-----BEGIN CERTIFICATE-----
|
399 |
+
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
400 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
401 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
402 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
403 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
404 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
405 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
406 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
|
407 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
408 |
+
ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
|
409 |
+
bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
|
410 |
+
rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
|
411 |
+
Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
|
412 |
+
FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
413 |
+
q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
|
414 |
+
y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
415 |
+
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
|
416 |
+
a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
|
417 |
+
D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
418 |
+
-----END CERTIFICATE-----
|
419 |
+
|
420 |
+
Verisign Class 2 Public Primary Certification Authority - G3
|
421 |
+
============================================================
|
422 |
+
-----BEGIN CERTIFICATE-----
|
423 |
+
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
|
424 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
|
425 |
+
azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
|
426 |
+
b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
|
427 |
+
aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
|
428 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
429 |
+
c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
430 |
+
aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
|
431 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
432 |
+
AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
|
433 |
+
tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
|
434 |
+
C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
|
435 |
+
0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
|
436 |
+
Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
|
437 |
+
JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
|
438 |
+
0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
439 |
+
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
|
440 |
+
JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
|
441 |
+
GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
442 |
+
-----END CERTIFICATE-----
|
443 |
+
|
444 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
445 |
+
============================================================
|
446 |
+
-----BEGIN CERTIFICATE-----
|
447 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
448 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
449 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
450 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
451 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
452 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
453 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
454 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
455 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
456 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
457 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
458 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
459 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
460 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
461 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
462 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
463 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
464 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
465 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
466 |
+
-----END CERTIFICATE-----
|
467 |
+
|
468 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
469 |
+
============================================================
|
470 |
+
-----BEGIN CERTIFICATE-----
|
471 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
472 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
473 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
474 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
475 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
476 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
477 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
478 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
479 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
480 |
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
481 |
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
482 |
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
483 |
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
484 |
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
485 |
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
486 |
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
487 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
488 |
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
489 |
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
490 |
+
-----END CERTIFICATE-----
|
491 |
+
|
492 |
+
Entrust.net Secure Server CA
|
493 |
+
============================
|
494 |
+
-----BEGIN CERTIFICATE-----
|
495 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
496 |
+
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
497 |
+
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
498 |
+
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
499 |
+
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
500 |
+
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
501 |
+
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
502 |
+
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
503 |
+
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
504 |
+
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
505 |
+
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
506 |
+
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
507 |
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
508 |
+
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
509 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
510 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
511 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
512 |
+
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
513 |
+
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
514 |
+
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
515 |
+
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
516 |
+
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
517 |
+
-----END CERTIFICATE-----
|
518 |
+
|
519 |
+
Entrust.net Premium 2048 Secure Server CA
|
520 |
+
=========================================
|
521 |
+
-----BEGIN CERTIFICATE-----
|
522 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
523 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
524 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
525 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
526 |
+
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
527 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
528 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
529 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
530 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
531 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
532 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
533 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
534 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
535 |
+
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
536 |
+
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
537 |
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
538 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
539 |
+
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
540 |
+
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
541 |
+
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
542 |
+
-----END CERTIFICATE-----
|
543 |
+
|
544 |
+
Baltimore CyberTrust Root
|
545 |
+
=========================
|
546 |
+
-----BEGIN CERTIFICATE-----
|
547 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
548 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
549 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
550 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
551 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
552 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
553 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
554 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
555 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
556 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
557 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
558 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
559 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
560 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
561 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
562 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
563 |
+
-----END CERTIFICATE-----
|
564 |
+
|
565 |
+
Equifax Secure Global eBusiness CA
|
566 |
+
==================================
|
567 |
+
-----BEGIN CERTIFICATE-----
|
568 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
569 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
570 |
+
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
571 |
+
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
572 |
+
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
573 |
+
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
574 |
+
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
575 |
+
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
576 |
+
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
577 |
+
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
578 |
+
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
579 |
+
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
580 |
+
-----END CERTIFICATE-----
|
581 |
+
|
582 |
+
Equifax Secure eBusiness CA 1
|
583 |
+
=============================
|
584 |
+
-----BEGIN CERTIFICATE-----
|
585 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
586 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
587 |
+
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
588 |
+
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
589 |
+
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
590 |
+
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
591 |
+
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
592 |
+
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
593 |
+
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
594 |
+
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
595 |
+
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
596 |
+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
597 |
+
-----END CERTIFICATE-----
|
598 |
+
|
599 |
+
Equifax Secure eBusiness CA 2
|
600 |
+
=============================
|
601 |
+
-----BEGIN CERTIFICATE-----
|
602 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
603 |
+
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
604 |
+
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
605 |
+
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
606 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
607 |
+
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
608 |
+
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
609 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
610 |
+
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
611 |
+
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
612 |
+
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
613 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
614 |
+
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
615 |
+
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
616 |
+
V+GRMOrN
|
617 |
+
-----END CERTIFICATE-----
|
618 |
+
|
619 |
+
AddTrust Low-Value Services Root
|
620 |
+
================================
|
621 |
+
-----BEGIN CERTIFICATE-----
|
622 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
623 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
624 |
+
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
625 |
+
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
626 |
+
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
627 |
+
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
628 |
+
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
629 |
+
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
630 |
+
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
631 |
+
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
632 |
+
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
633 |
+
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
634 |
+
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
635 |
+
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
636 |
+
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
637 |
+
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
638 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
639 |
+
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
640 |
+
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
641 |
+
-----END CERTIFICATE-----
|
642 |
+
|
643 |
+
AddTrust External Root
|
644 |
+
======================
|
645 |
+
-----BEGIN CERTIFICATE-----
|
646 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
647 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
648 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
649 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
650 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
651 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
652 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
653 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
654 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
655 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
656 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
657 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
658 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
659 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
660 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
661 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
662 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
663 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
664 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
665 |
+
-----END CERTIFICATE-----
|
666 |
+
|
667 |
+
AddTrust Public Services Root
|
668 |
+
=============================
|
669 |
+
-----BEGIN CERTIFICATE-----
|
670 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
671 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
672 |
+
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
673 |
+
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
674 |
+
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
675 |
+
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
676 |
+
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
677 |
+
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
678 |
+
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
679 |
+
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
680 |
+
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
681 |
+
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
682 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
683 |
+
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
684 |
+
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
685 |
+
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
686 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
687 |
+
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
688 |
+
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
689 |
+
-----END CERTIFICATE-----
|
690 |
+
|
691 |
+
AddTrust Qualified Certificates Root
|
692 |
+
====================================
|
693 |
+
-----BEGIN CERTIFICATE-----
|
694 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
695 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
696 |
+
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
697 |
+
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
698 |
+
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
699 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
700 |
+
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
701 |
+
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
702 |
+
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
703 |
+
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
704 |
+
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
705 |
+
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
706 |
+
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
707 |
+
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
708 |
+
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
709 |
+
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
710 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
711 |
+
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
712 |
+
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
713 |
+
-----END CERTIFICATE-----
|
714 |
+
|
715 |
+
Entrust Root Certification Authority
|
716 |
+
====================================
|
717 |
+
-----BEGIN CERTIFICATE-----
|
718 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
719 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
720 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
721 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
722 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
723 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
724 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
725 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
726 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
727 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
728 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
729 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
730 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
731 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
732 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
733 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
734 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
735 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
736 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
737 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
738 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
739 |
+
-----END CERTIFICATE-----
|
740 |
+
|
741 |
+
RSA Security 2048 v3
|
742 |
+
====================
|
743 |
+
-----BEGIN CERTIFICATE-----
|
744 |
+
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
745 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
746 |
+
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
747 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
748 |
+
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
749 |
+
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
750 |
+
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
751 |
+
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
752 |
+
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
753 |
+
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
754 |
+
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
755 |
+
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
756 |
+
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
757 |
+
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
758 |
+
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
759 |
+
pKnXwiJPZ9d37CAFYd4=
|
760 |
+
-----END CERTIFICATE-----
|
761 |
+
|
762 |
+
GeoTrust Global CA
|
763 |
+
==================
|
764 |
+
-----BEGIN CERTIFICATE-----
|
765 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
766 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
767 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
768 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
769 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
770 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
771 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
772 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
773 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
774 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
775 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
776 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
777 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
778 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
779 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
780 |
+
Mw==
|
781 |
+
-----END CERTIFICATE-----
|
782 |
+
|
783 |
+
GeoTrust Global CA 2
|
784 |
+
====================
|
785 |
+
-----BEGIN CERTIFICATE-----
|
786 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
787 |
+
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
788 |
+
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
789 |
+
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
790 |
+
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
791 |
+
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
792 |
+
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
793 |
+
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
794 |
+
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
795 |
+
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
796 |
+
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
797 |
+
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
798 |
+
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
799 |
+
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
800 |
+
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
801 |
+
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
802 |
+
-----END CERTIFICATE-----
|
803 |
+
|
804 |
+
GeoTrust Universal CA
|
805 |
+
=====================
|
806 |
+
-----BEGIN CERTIFICATE-----
|
807 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
808 |
+
R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
|
809 |
+
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
810 |
+
Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
811 |
+
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
812 |
+
JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
|
813 |
+
RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
|
814 |
+
7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
|
815 |
+
8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
|
816 |
+
qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
|
817 |
+
Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
|
818 |
+
Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
|
819 |
+
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
820 |
+
ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
|
821 |
+
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
822 |
+
hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
823 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
|
824 |
+
qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
|
825 |
+
oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
|
826 |
+
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
827 |
+
KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
|
828 |
+
DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
|
829 |
+
xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
|
830 |
+
p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
|
831 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
832 |
+
-----END CERTIFICATE-----
|
833 |
+
|
834 |
+
GeoTrust Universal CA 2
|
835 |
+
=======================
|
836 |
+
-----BEGIN CERTIFICATE-----
|
837 |
+
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
838 |
+
R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
|
839 |
+
MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
|
840 |
+
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
841 |
+
A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
|
842 |
+
DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
|
843 |
+
j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
|
844 |
+
JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
|
845 |
+
QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
|
846 |
+
WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
|
847 |
+
20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
|
848 |
+
ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
|
849 |
+
SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
|
850 |
+
8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
|
851 |
+
+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
|
852 |
+
BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
|
853 |
+
dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
|
854 |
+
4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
|
855 |
+
mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
|
856 |
+
A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
|
857 |
+
Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
|
858 |
+
pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
|
859 |
+
FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
|
860 |
+
gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
|
861 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
862 |
+
-----END CERTIFICATE-----
|
863 |
+
|
864 |
+
UTN-USER First-Network Applications
|
865 |
+
===================================
|
866 |
+
-----BEGIN CERTIFICATE-----
|
867 |
+
MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
|
868 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
869 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
|
870 |
+
BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
|
871 |
+
WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
|
872 |
+
YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
873 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
|
874 |
+
cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
|
875 |
+
mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
|
876 |
+
DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
|
877 |
+
Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
|
878 |
+
P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
|
879 |
+
j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
|
880 |
+
HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
|
881 |
+
cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
|
882 |
+
CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
|
883 |
+
IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
|
884 |
+
RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
|
885 |
+
xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
|
886 |
+
DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
|
887 |
+
-----END CERTIFICATE-----
|
888 |
+
|
889 |
+
America Online Root Certification Authority 1
|
890 |
+
=============================================
|
891 |
+
-----BEGIN CERTIFICATE-----
|
892 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
893 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
894 |
+
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
895 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
896 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
897 |
+
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
898 |
+
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
899 |
+
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
900 |
+
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
901 |
+
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
902 |
+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
903 |
+
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
904 |
+
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
905 |
+
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
906 |
+
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
907 |
+
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
908 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
909 |
+
-----END CERTIFICATE-----
|
910 |
+
|
911 |
+
America Online Root Certification Authority 2
|
912 |
+
=============================================
|
913 |
+
-----BEGIN CERTIFICATE-----
|
914 |
+
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
915 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
916 |
+
Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
|
917 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
918 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
|
919 |
+
ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
|
920 |
+
fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
|
921 |
+
f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
|
922 |
+
qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
|
923 |
+
RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
|
924 |
+
gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
|
925 |
+
6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
|
926 |
+
FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
|
927 |
+
Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
|
928 |
+
B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
|
929 |
+
aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
|
930 |
+
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
|
931 |
+
T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
|
932 |
+
+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
|
933 |
+
JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
|
934 |
+
zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
|
935 |
+
ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
|
936 |
+
1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
|
937 |
+
GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
|
938 |
+
Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
|
939 |
+
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
940 |
+
-----END CERTIFICATE-----
|
941 |
+
|
942 |
+
Visa eCommerce Root
|
943 |
+
===================
|
944 |
+
-----BEGIN CERTIFICATE-----
|
945 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
946 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
947 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
948 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
949 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
950 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
951 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
952 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
953 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
954 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
955 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
956 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
957 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
958 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
959 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
960 |
+
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
961 |
+
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
962 |
+
-----END CERTIFICATE-----
|
963 |
+
|
964 |
+
TC TrustCenter, Germany, Class 2 CA
|
965 |
+
===================================
|
966 |
+
-----BEGIN CERTIFICATE-----
|
967 |
+
MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
|
968 |
+
EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
|
969 |
+
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
|
970 |
+
bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
|
971 |
+
ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
|
972 |
+
YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
|
973 |
+
aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
|
974 |
+
MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
|
975 |
+
hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs
|
976 |
+
qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N
|
977 |
+
u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
|
978 |
+
Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
|
979 |
+
LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf
|
980 |
+
/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2
|
981 |
+
9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
|
982 |
+
ASZ4smZHcFFk
|
983 |
+
-----END CERTIFICATE-----
|
984 |
+
|
985 |
+
TC TrustCenter, Germany, Class 3 CA
|
986 |
+
===================================
|
987 |
+
-----BEGIN CERTIFICATE-----
|
988 |
+
MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
|
989 |
+
EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
|
990 |
+
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
|
991 |
+
bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
|
992 |
+
ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
|
993 |
+
YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
|
994 |
+
aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
|
995 |
+
MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
|
996 |
+
hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN
|
997 |
+
2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7
|
998 |
+
7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
|
999 |
+
Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
|
1000 |
+
LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B
|
1001 |
+
u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm
|
1002 |
+
5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
|
1003 |
+
CdS7kjXvD9s0
|
1004 |
+
-----END CERTIFICATE-----
|
1005 |
+
|
1006 |
+
Certum Root CA
|
1007 |
+
==============
|
1008 |
+
-----BEGIN CERTIFICATE-----
|
1009 |
+
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
1010 |
+
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
1011 |
+
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
1012 |
+
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
1013 |
+
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
1014 |
+
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
1015 |
+
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
1016 |
+
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
1017 |
+
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
1018 |
+
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
1019 |
+
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
1020 |
+
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
1021 |
+
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
1022 |
+
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
1023 |
+
-----END CERTIFICATE-----
|
1024 |
+
|
1025 |
+
Comodo AAA Services root
|
1026 |
+
========================
|
1027 |
+
-----BEGIN CERTIFICATE-----
|
1028 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1029 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1030 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
1031 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
1032 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
1033 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
1034 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
1035 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
1036 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
1037 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
1038 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
1039 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
1040 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
1041 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
1042 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
1043 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
1044 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
1045 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
1046 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
1047 |
+
-----END CERTIFICATE-----
|
1048 |
+
|
1049 |
+
Comodo Secure Services root
|
1050 |
+
===========================
|
1051 |
+
-----BEGIN CERTIFICATE-----
|
1052 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1053 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1054 |
+
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
1055 |
+
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
1056 |
+
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
1057 |
+
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1058 |
+
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
1059 |
+
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
1060 |
+
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
1061 |
+
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
1062 |
+
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
1063 |
+
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
1064 |
+
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
1065 |
+
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
1066 |
+
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
1067 |
+
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
1068 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
1069 |
+
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
1070 |
+
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
1071 |
+
RR3B7Hzs/Sk=
|
1072 |
+
-----END CERTIFICATE-----
|
1073 |
+
|
1074 |
+
Comodo Trusted Services root
|
1075 |
+
============================
|
1076 |
+
-----BEGIN CERTIFICATE-----
|
1077 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1078 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1079 |
+
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
1080 |
+
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
1081 |
+
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
1082 |
+
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1083 |
+
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
1084 |
+
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
1085 |
+
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
1086 |
+
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
1087 |
+
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
1088 |
+
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
1089 |
+
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
1090 |
+
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
1091 |
+
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
1092 |
+
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
1093 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
1094 |
+
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
1095 |
+
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
1096 |
+
9y5Xt5hwXsjEeLBi
|
1097 |
+
-----END CERTIFICATE-----
|
1098 |
+
|
1099 |
+
QuoVadis Root CA
|
1100 |
+
================
|
1101 |
+
-----BEGIN CERTIFICATE-----
|
1102 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
1103 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1104 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
1105 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
1106 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
1107 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
1108 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
1109 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
1110 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
1111 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
1112 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
1113 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
1114 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
1115 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
1116 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
1117 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
1118 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
1119 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
1120 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
1121 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
1122 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
1123 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
1124 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
1125 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
1126 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
1127 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
1128 |
+
5nrQNiOKSnQ2+Q==
|
1129 |
+
-----END CERTIFICATE-----
|
1130 |
+
|
1131 |
+
QuoVadis Root CA 2
|
1132 |
+
==================
|
1133 |
+
-----BEGIN CERTIFICATE-----
|
1134 |
+
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1135 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
1136 |
+
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1137 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1138 |
+
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
|
1139 |
+
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
1140 |
+
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
|
1141 |
+
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
|
1142 |
+
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
|
1143 |
+
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
1144 |
+
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
|
1145 |
+
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
|
1146 |
+
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
|
1147 |
+
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
|
1148 |
+
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
|
1149 |
+
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
|
1150 |
+
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
1151 |
+
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
|
1152 |
+
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
1153 |
+
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
1154 |
+
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
|
1155 |
+
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
1156 |
+
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
|
1157 |
+
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
|
1158 |
+
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
|
1159 |
+
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
|
1160 |
+
-----END CERTIFICATE-----
|
1161 |
+
|
1162 |
+
QuoVadis Root CA 3
|
1163 |
+
==================
|
1164 |
+
-----BEGIN CERTIFICATE-----
|
1165 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1166 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
1167 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1168 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1169 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
1170 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
1171 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
1172 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
1173 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
1174 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
1175 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
1176 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
1177 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
1178 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
1179 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
1180 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
1181 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
1182 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
1183 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
1184 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
1185 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
1186 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
1187 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
1188 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
1189 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
1190 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
1191 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
1192 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
1193 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
1194 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
1195 |
+
-----END CERTIFICATE-----
|
1196 |
+
|
1197 |
+
Security Communication Root CA
|
1198 |
+
==============================
|
1199 |
+
-----BEGIN CERTIFICATE-----
|
1200 |
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1201 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1202 |
+
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1203 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1204 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
1205 |
+
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
1206 |
+
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
1207 |
+
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
1208 |
+
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
1209 |
+
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
1210 |
+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
1211 |
+
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
1212 |
+
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
1213 |
+
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
1214 |
+
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
1215 |
+
FL39vmwLAw==
|
1216 |
+
-----END CERTIFICATE-----
|
1217 |
+
|
1218 |
+
Sonera Class 1 Root CA
|
1219 |
+
======================
|
1220 |
+
-----BEGIN CERTIFICATE-----
|
1221 |
+
MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1222 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
|
1223 |
+
NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1224 |
+
IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
|
1225 |
+
7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
|
1226 |
+
EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
|
1227 |
+
0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
|
1228 |
+
2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
|
1229 |
+
HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
|
1230 |
+
iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
|
1231 |
+
28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
|
1232 |
+
yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
|
1233 |
+
vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
|
1234 |
+
qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
|
1235 |
+
IRlXvVWa
|
1236 |
+
-----END CERTIFICATE-----
|
1237 |
+
|
1238 |
+
Sonera Class 2 Root CA
|
1239 |
+
======================
|
1240 |
+
-----BEGIN CERTIFICATE-----
|
1241 |
+
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1242 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1243 |
+
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1244 |
+
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1245 |
+
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
1246 |
+
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
1247 |
+
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
1248 |
+
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
1249 |
+
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
1250 |
+
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
1251 |
+
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
1252 |
+
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
1253 |
+
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
1254 |
+
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
1255 |
+
llpwrN9M
|
1256 |
+
-----END CERTIFICATE-----
|
1257 |
+
|
1258 |
+
Staat der Nederlanden Root CA
|
1259 |
+
=============================
|
1260 |
+
-----BEGIN CERTIFICATE-----
|
1261 |
+
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
1262 |
+
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
1263 |
+
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
1264 |
+
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
1265 |
+
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
1266 |
+
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
1267 |
+
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
1268 |
+
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
1269 |
+
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
1270 |
+
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
1271 |
+
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
1272 |
+
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
1273 |
+
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
1274 |
+
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
1275 |
+
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
1276 |
+
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
1277 |
+
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
1278 |
+
-----END CERTIFICATE-----
|
1279 |
+
|
1280 |
+
TDC Internet Root CA
|
1281 |
+
====================
|
1282 |
+
-----BEGIN CERTIFICATE-----
|
1283 |
+
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
|
1284 |
+
ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
|
1285 |
+
NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
|
1286 |
+
ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1287 |
+
MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
|
1288 |
+
xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
|
1289 |
+
znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
|
1290 |
+
5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
|
1291 |
+
otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
|
1292 |
+
AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
|
1293 |
+
VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
|
1294 |
+
MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
|
1295 |
+
AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
|
1296 |
+
UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
|
1297 |
+
CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
|
1298 |
+
gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
|
1299 |
+
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
|
1300 |
+
O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
|
1301 |
+
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
|
1302 |
+
-----END CERTIFICATE-----
|
1303 |
+
|
1304 |
+
TDC OCES Root CA
|
1305 |
+
================
|
1306 |
+
-----BEGIN CERTIFICATE-----
|
1307 |
+
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
|
1308 |
+
ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
|
1309 |
+
MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
|
1310 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
|
1311 |
+
nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
|
1312 |
+
zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
|
1313 |
+
iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
|
1314 |
+
dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
|
1315 |
+
3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
|
1316 |
+
5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
|
1317 |
+
ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
|
1318 |
+
cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
|
1319 |
+
Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
|
1320 |
+
LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
|
1321 |
+
MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
|
1322 |
+
aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
|
1323 |
+
MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
|
1324 |
+
+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
|
1325 |
+
NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
|
1326 |
+
A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
|
1327 |
+
A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
|
1328 |
+
AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
|
1329 |
+
AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
|
1330 |
+
-----END CERTIFICATE-----
|
1331 |
+
|
1332 |
+
UTN DATACorp SGC Root CA
|
1333 |
+
========================
|
1334 |
+
-----BEGIN CERTIFICATE-----
|
1335 |
+
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
|
1336 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1337 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
|
1338 |
+
BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
|
1339 |
+
MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
|
1340 |
+
HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
|
1341 |
+
dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1342 |
+
AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
|
1343 |
+
raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
|
1344 |
+
wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
|
1345 |
+
9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
|
1346 |
+
33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
|
1347 |
+
DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
|
1348 |
+
BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
|
1349 |
+
LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
|
1350 |
+
DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
1351 |
+
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
|
1352 |
+
I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
|
1353 |
+
EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
|
1354 |
+
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
|
1355 |
+
-----END CERTIFICATE-----
|
1356 |
+
|
1357 |
+
UTN USERFirst Email Root CA
|
1358 |
+
===========================
|
1359 |
+
-----BEGIN CERTIFICATE-----
|
1360 |
+
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
|
1361 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1362 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
|
1363 |
+
BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
|
1364 |
+
OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
|
1365 |
+
FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
|
1366 |
+
ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
|
1367 |
+
dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1368 |
+
MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
|
1369 |
+
B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
|
1370 |
+
om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
|
1371 |
+
TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
|
1372 |
+
yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
|
1373 |
+
AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
|
1374 |
+
HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
|
1375 |
+
bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
|
1376 |
+
AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
|
1377 |
+
xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
|
1378 |
+
5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
|
1379 |
+
NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
|
1380 |
+
w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
|
1381 |
+
-----END CERTIFICATE-----
|
1382 |
+
|
1383 |
+
UTN USERFirst Hardware Root CA
|
1384 |
+
==============================
|
1385 |
+
-----BEGIN CERTIFICATE-----
|
1386 |
+
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
1387 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1388 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
1389 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
|
1390 |
+
OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
|
1391 |
+
eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
|
1392 |
+
ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
|
1393 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
|
1394 |
+
wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
|
1395 |
+
tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
|
1396 |
+
i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
|
1397 |
+
Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
|
1398 |
+
gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
|
1399 |
+
lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
|
1400 |
+
UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
|
1401 |
+
BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
1402 |
+
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
|
1403 |
+
XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
|
1404 |
+
lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
|
1405 |
+
iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
|
1406 |
+
nfhmqA==
|
1407 |
+
-----END CERTIFICATE-----
|
1408 |
+
|
1409 |
+
UTN USERFirst Object Root CA
|
1410 |
+
============================
|
1411 |
+
-----BEGIN CERTIFICATE-----
|
1412 |
+
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
|
1413 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1414 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
|
1415 |
+
BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
|
1416 |
+
NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
|
1417 |
+
HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
|
1418 |
+
dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
|
1419 |
+
BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
|
1420 |
+
loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
|
1421 |
+
w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
|
1422 |
+
lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
|
1423 |
+
RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
|
1424 |
+
BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
|
1425 |
+
ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
|
1426 |
+
c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
|
1427 |
+
DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
|
1428 |
+
NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
|
1429 |
+
PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
|
1430 |
+
qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
|
1431 |
+
hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
|
1432 |
+
-----END CERTIFICATE-----
|
1433 |
+
|
1434 |
+
Camerfirma Chambers of Commerce Root
|
1435 |
+
====================================
|
1436 |
+
-----BEGIN CERTIFICATE-----
|
1437 |
+
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1438 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1439 |
+
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
1440 |
+
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
1441 |
+
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
1442 |
+
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
1443 |
+
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
1444 |
+
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
1445 |
+
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
1446 |
+
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
1447 |
+
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
1448 |
+
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
1449 |
+
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
1450 |
+
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
1451 |
+
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
1452 |
+
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
1453 |
+
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
1454 |
+
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
1455 |
+
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
1456 |
+
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
1457 |
+
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
1458 |
+
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
1459 |
+
-----END CERTIFICATE-----
|
1460 |
+
|
1461 |
+
Camerfirma Global Chambersign Root
|
1462 |
+
==================================
|
1463 |
+
-----BEGIN CERTIFICATE-----
|
1464 |
+
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1465 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1466 |
+
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
1467 |
+
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
1468 |
+
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
1469 |
+
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
1470 |
+
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
1471 |
+
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
1472 |
+
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
1473 |
+
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
1474 |
+
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
1475 |
+
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
1476 |
+
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
1477 |
+
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
1478 |
+
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
1479 |
+
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
1480 |
+
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
1481 |
+
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
1482 |
+
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
1483 |
+
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
1484 |
+
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
1485 |
+
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
1486 |
+
-----END CERTIFICATE-----
|
1487 |
+
|
1488 |
+
NetLock Qualified (Class QA) Root
|
1489 |
+
=================================
|
1490 |
+
-----BEGIN CERTIFICATE-----
|
1491 |
+
MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1492 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1493 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
|
1494 |
+
eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
|
1495 |
+
bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
|
1496 |
+
MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
|
1497 |
+
LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
|
1498 |
+
dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
|
1499 |
+
aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
|
1500 |
+
CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
|
1501 |
+
8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
|
1502 |
+
m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
|
1503 |
+
0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
|
1504 |
+
0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1505 |
+
HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
|
1506 |
+
YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
|
1507 |
+
biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
|
1508 |
+
a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
|
1509 |
+
YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
|
1510 |
+
YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
|
1511 |
+
ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
|
1512 |
+
L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
|
1513 |
+
Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
|
1514 |
+
aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
|
1515 |
+
YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
|
1516 |
+
IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
|
1517 |
+
DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
|
1518 |
+
wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
|
1519 |
+
W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
|
1520 |
+
R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
|
1521 |
+
5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
|
1522 |
+
-----END CERTIFICATE-----
|
1523 |
+
|
1524 |
+
NetLock Notary (Class A) Root
|
1525 |
+
=============================
|
1526 |
+
-----BEGIN CERTIFICATE-----
|
1527 |
+
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
1528 |
+
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1529 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
1530 |
+
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
1531 |
+
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
1532 |
+
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
1533 |
+
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
1534 |
+
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
1535 |
+
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
1536 |
+
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
1537 |
+
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
1538 |
+
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
1539 |
+
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
1540 |
+
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
1541 |
+
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
1542 |
+
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
1543 |
+
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
1544 |
+
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
1545 |
+
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
1546 |
+
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
1547 |
+
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
1548 |
+
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
1549 |
+
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
1550 |
+
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
1551 |
+
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
1552 |
+
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
1553 |
+
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
1554 |
+
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
1555 |
+
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
1556 |
+
8CgHrTwXZoi1/baI
|
1557 |
+
-----END CERTIFICATE-----
|
1558 |
+
|
1559 |
+
NetLock Business (Class B) Root
|
1560 |
+
===============================
|
1561 |
+
-----BEGIN CERTIFICATE-----
|
1562 |
+
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1563 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1564 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
|
1565 |
+
VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
|
1566 |
+
VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
|
1567 |
+
bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
|
1568 |
+
VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
1569 |
+
iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
|
1570 |
+
o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
|
1571 |
+
1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1572 |
+
HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
|
1573 |
+
RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
|
1574 |
+
dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
|
1575 |
+
ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
|
1576 |
+
c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
|
1577 |
+
YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
|
1578 |
+
c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
|
1579 |
+
Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
|
1580 |
+
bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
|
1581 |
+
IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
|
1582 |
+
YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
|
1583 |
+
cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
|
1584 |
+
43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
|
1585 |
+
stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
|
1586 |
+
-----END CERTIFICATE-----
|
1587 |
+
|
1588 |
+
NetLock Express (Class C) Root
|
1589 |
+
==============================
|
1590 |
+
-----BEGIN CERTIFICATE-----
|
1591 |
+
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1592 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1593 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
|
1594 |
+
KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
|
1595 |
+
BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1596 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
|
1597 |
+
ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
|
1598 |
+
jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
|
1599 |
+
W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
|
1600 |
+
euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
|
1601 |
+
DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
|
1602 |
+
RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
|
1603 |
+
YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
|
1604 |
+
IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
|
1605 |
+
aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
|
1606 |
+
ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
|
1607 |
+
ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
|
1608 |
+
dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
|
1609 |
+
emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
|
1610 |
+
IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
|
1611 |
+
UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
|
1612 |
+
YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
|
1613 |
+
xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
|
1614 |
+
gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
|
1615 |
+
-----END CERTIFICATE-----
|
1616 |
+
|
1617 |
+
XRamp Global CA Root
|
1618 |
+
====================
|
1619 |
+
-----BEGIN CERTIFICATE-----
|
1620 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
1621 |
+
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
1622 |
+
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1623 |
+
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
1624 |
+
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
1625 |
+
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1626 |
+
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
1627 |
+
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
1628 |
+
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
1629 |
+
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
1630 |
+
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
1631 |
+
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1632 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
1633 |
+
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
1634 |
+
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
1635 |
+
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1636 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
1637 |
+
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
1638 |
+
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1639 |
+
-----END CERTIFICATE-----
|
1640 |
+
|
1641 |
+
Go Daddy Class 2 CA
|
1642 |
+
===================
|
1643 |
+
-----BEGIN CERTIFICATE-----
|
1644 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
1645 |
+
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
1646 |
+
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
1647 |
+
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1648 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
1649 |
+
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
1650 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
1651 |
+
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
1652 |
+
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
1653 |
+
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
1654 |
+
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
1655 |
+
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
1656 |
+
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
1657 |
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
1658 |
+
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
1659 |
+
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1660 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
1661 |
+
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
1662 |
+
vZ8=
|
1663 |
+
-----END CERTIFICATE-----
|
1664 |
+
|
1665 |
+
Starfield Class 2 CA
|
1666 |
+
====================
|
1667 |
+
-----BEGIN CERTIFICATE-----
|
1668 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
1669 |
+
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
1670 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
1671 |
+
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
1672 |
+
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
1673 |
+
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
1674 |
+
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
1675 |
+
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
1676 |
+
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
1677 |
+
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
1678 |
+
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
1679 |
+
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
1680 |
+
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
1681 |
+
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
1682 |
+
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
1683 |
+
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1684 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
1685 |
+
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
1686 |
+
QBFGmh95DmK/D5fs4C8fF5Q=
|
1687 |
+
-----END CERTIFICATE-----
|
1688 |
+
|
1689 |
+
StartCom Certification Authority
|
1690 |
+
================================
|
1691 |
+
-----BEGIN CERTIFICATE-----
|
1692 |
+
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
1693 |
+
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
1694 |
+
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
1695 |
+
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
1696 |
+
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
1697 |
+
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
1698 |
+
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
1699 |
+
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
1700 |
+
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
1701 |
+
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
1702 |
+
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
1703 |
+
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
1704 |
+
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
1705 |
+
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
1706 |
+
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
1707 |
+
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
1708 |
+
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
1709 |
+
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
1710 |
+
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
1711 |
+
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
1712 |
+
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
1713 |
+
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
1714 |
+
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
1715 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
1716 |
+
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
1717 |
+
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
1718 |
+
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
1719 |
+
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
1720 |
+
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
1721 |
+
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
1722 |
+
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
1723 |
+
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
1724 |
+
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
1725 |
+
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
1726 |
+
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
1727 |
+
g14=
|
1728 |
+
-----END CERTIFICATE-----
|
1729 |
+
|
1730 |
+
Taiwan GRCA
|
1731 |
+
===========
|
1732 |
+
-----BEGIN CERTIFICATE-----
|
1733 |
+
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
|
1734 |
+
EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
|
1735 |
+
DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
|
1736 |
+
dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
1737 |
+
ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
|
1738 |
+
w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
|
1739 |
+
BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
|
1740 |
+
1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
|
1741 |
+
htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
|
1742 |
+
J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
|
1743 |
+
Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
|
1744 |
+
B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
|
1745 |
+
O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
|
1746 |
+
lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
|
1747 |
+
HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
|
1748 |
+
09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
|
1749 |
+
TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
|
1750 |
+
Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
|
1751 |
+
Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
|
1752 |
+
D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
|
1753 |
+
DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
|
1754 |
+
Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
|
1755 |
+
7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
|
1756 |
+
CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
|
1757 |
+
+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
|
1758 |
+
-----END CERTIFICATE-----
|
1759 |
+
|
1760 |
+
Firmaprofesional Root CA
|
1761 |
+
========================
|
1762 |
+
-----BEGIN CERTIFICATE-----
|
1763 |
+
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
|
1764 |
+
GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
|
1765 |
+
Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
|
1766 |
+
ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
|
1767 |
+
MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
|
1768 |
+
OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
|
1769 |
+
ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
|
1770 |
+
AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
|
1771 |
+
j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
|
1772 |
+
lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
|
1773 |
+
3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
|
1774 |
+
NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
|
1775 |
+
KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
|
1776 |
+
AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
|
1777 |
+
DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
|
1778 |
+
ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
|
1779 |
+
u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
|
1780 |
+
wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
|
1781 |
+
7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
|
1782 |
+
VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
|
1783 |
+
-----END CERTIFICATE-----
|
1784 |
+
|
1785 |
+
Wells Fargo Root CA
|
1786 |
+
===================
|
1787 |
+
-----BEGIN CERTIFICATE-----
|
1788 |
+
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
|
1789 |
+
BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1790 |
+
cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1791 |
+
MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
|
1792 |
+
bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
|
1793 |
+
MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
1794 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
|
1795 |
+
x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
|
1796 |
+
E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
|
1797 |
+
OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
|
1798 |
+
sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
|
1799 |
+
YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
|
1800 |
+
BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
|
1801 |
+
ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
|
1802 |
+
m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
|
1803 |
+
OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
|
1804 |
+
x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
|
1805 |
+
tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
|
1806 |
+
-----END CERTIFICATE-----
|
1807 |
+
|
1808 |
+
Swisscom Root CA 1
|
1809 |
+
==================
|
1810 |
+
-----BEGIN CERTIFICATE-----
|
1811 |
+
MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
|
1812 |
+
EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
|
1813 |
+
dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
|
1814 |
+
MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
|
1815 |
+
aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
|
1816 |
+
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
|
1817 |
+
MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
|
1818 |
+
NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
|
1819 |
+
AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
|
1820 |
+
b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
|
1821 |
+
7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
|
1822 |
+
cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
|
1823 |
+
WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
|
1824 |
+
haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
|
1825 |
+
MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
|
1826 |
+
HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
|
1827 |
+
BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
|
1828 |
+
MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
|
1829 |
+
jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
|
1830 |
+
MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
|
1831 |
+
VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
|
1832 |
+
vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
|
1833 |
+
OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
|
1834 |
+
1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
|
1835 |
+
nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
|
1836 |
+
x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
|
1837 |
+
NY6E0F/6MBr1mmz0DlP5OlvRHA==
|
1838 |
+
-----END CERTIFICATE-----
|
1839 |
+
|
1840 |
+
DigiCert Assured ID Root CA
|
1841 |
+
===========================
|
1842 |
+
-----BEGIN CERTIFICATE-----
|
1843 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
1844 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
1845 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
1846 |
+
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
1847 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
1848 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
1849 |
+
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
1850 |
+
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
1851 |
+
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
1852 |
+
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
1853 |
+
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
1854 |
+
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
1855 |
+
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
1856 |
+
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
1857 |
+
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
1858 |
+
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1859 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1860 |
+
-----END CERTIFICATE-----
|
1861 |
+
|
1862 |
+
DigiCert Global Root CA
|
1863 |
+
=======================
|
1864 |
+
-----BEGIN CERTIFICATE-----
|
1865 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
1866 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
1867 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
1868 |
+
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
1869 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
1870 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
1871 |
+
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
1872 |
+
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
1873 |
+
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
1874 |
+
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
1875 |
+
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
1876 |
+
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
1877 |
+
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
1878 |
+
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
1879 |
+
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
1880 |
+
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1881 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1882 |
+
-----END CERTIFICATE-----
|
1883 |
+
|
1884 |
+
DigiCert High Assurance EV Root CA
|
1885 |
+
==================================
|
1886 |
+
-----BEGIN CERTIFICATE-----
|
1887 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
1888 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
1889 |
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
1890 |
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
1891 |
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
1892 |
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
1893 |
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
1894 |
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
1895 |
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
1896 |
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
1897 |
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
1898 |
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
1899 |
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
1900 |
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
1901 |
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
1902 |
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1903 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
1904 |
+
-----END CERTIFICATE-----
|
1905 |
+
|
1906 |
+
Certplus Class 2 Primary CA
|
1907 |
+
===========================
|
1908 |
+
-----BEGIN CERTIFICATE-----
|
1909 |
+
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
1910 |
+
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
1911 |
+
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
1912 |
+
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1913 |
+
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
1914 |
+
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
1915 |
+
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
1916 |
+
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
1917 |
+
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
1918 |
+
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
1919 |
+
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
1920 |
+
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
1921 |
+
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
1922 |
+
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
1923 |
+
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
1924 |
+
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
1925 |
+
l7+ijrRU
|
1926 |
+
-----END CERTIFICATE-----
|
1927 |
+
|
1928 |
+
DST Root CA X3
|
1929 |
+
==============
|
1930 |
+
-----BEGIN CERTIFICATE-----
|
1931 |
+
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
1932 |
+
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
1933 |
+
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
1934 |
+
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
1935 |
+
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
1936 |
+
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
1937 |
+
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
1938 |
+
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
1939 |
+
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
1940 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
1941 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
1942 |
+
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
1943 |
+
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
1944 |
+
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
1945 |
+
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
1946 |
+
-----END CERTIFICATE-----
|
1947 |
+
|
1948 |
+
DST ACES CA X6
|
1949 |
+
==============
|
1950 |
+
-----BEGIN CERTIFICATE-----
|
1951 |
+
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
1952 |
+
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
1953 |
+
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
1954 |
+
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
1955 |
+
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1956 |
+
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
1957 |
+
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
1958 |
+
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
1959 |
+
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
1960 |
+
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
1961 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
1962 |
+
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
1963 |
+
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
1964 |
+
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
1965 |
+
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
1966 |
+
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
1967 |
+
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
1968 |
+
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
1969 |
+
oKfN5XozNmr6mis=
|
1970 |
+
-----END CERTIFICATE-----
|
1971 |
+
|
1972 |
+
TURKTRUST Certificate Services Provider Root 1
|
1973 |
+
==============================================
|
1974 |
+
-----BEGIN CERTIFICATE-----
|
1975 |
+
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1976 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
|
1977 |
+
MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
|
1978 |
+
acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
|
1979 |
+
MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
|
1980 |
+
U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
|
1981 |
+
TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
|
1982 |
+
aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1983 |
+
AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
|
1984 |
+
yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
|
1985 |
+
Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
|
1986 |
+
8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
|
1987 |
+
W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
|
1988 |
+
BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
|
1989 |
+
sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
|
1990 |
+
q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
|
1991 |
+
B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
|
1992 |
+
nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
|
1993 |
+
-----END CERTIFICATE-----
|
1994 |
+
|
1995 |
+
TURKTRUST Certificate Services Provider Root 2
|
1996 |
+
==============================================
|
1997 |
+
-----BEGIN CERTIFICATE-----
|
1998 |
+
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1999 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
2000 |
+
MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
2001 |
+
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
|
2002 |
+
MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
|
2003 |
+
dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
|
2004 |
+
A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
2005 |
+
acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
|
2006 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
|
2007 |
+
LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
|
2008 |
+
x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
|
2009 |
+
QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
|
2010 |
+
5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
|
2011 |
+
AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
|
2012 |
+
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
|
2013 |
+
Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
|
2014 |
+
Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
|
2015 |
+
hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
|
2016 |
+
9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
|
2017 |
+
UrbnBEI=
|
2018 |
+
-----END CERTIFICATE-----
|
2019 |
+
|
2020 |
+
SwissSign Platinum CA - G2
|
2021 |
+
==========================
|
2022 |
+
-----BEGIN CERTIFICATE-----
|
2023 |
+
MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
|
2024 |
+
BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
|
2025 |
+
HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
|
2026 |
+
U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
|
2027 |
+
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
|
2028 |
+
669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
|
2029 |
+
eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
|
2030 |
+
WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
|
2031 |
+
j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
|
2032 |
+
8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
|
2033 |
+
aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
|
2034 |
+
domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
|
2035 |
+
+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
|
2036 |
+
CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
|
2037 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
|
2038 |
+
zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
|
2039 |
+
IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
|
2040 |
+
Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
|
2041 |
+
NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
|
2042 |
+
U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
|
2043 |
+
KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
|
2044 |
+
9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
|
2045 |
+
aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
|
2046 |
+
OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
|
2047 |
+
Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
|
2048 |
+
IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
|
2049 |
+
-----END CERTIFICATE-----
|
2050 |
+
|
2051 |
+
SwissSign Gold CA - G2
|
2052 |
+
======================
|
2053 |
+
-----BEGIN CERTIFICATE-----
|
2054 |
+
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
|
2055 |
+
EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
|
2056 |
+
MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
|
2057 |
+
c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
|
2058 |
+
AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
|
2059 |
+
t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
|
2060 |
+
jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
|
2061 |
+
vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
|
2062 |
+
ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
|
2063 |
+
AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
|
2064 |
+
jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
|
2065 |
+
peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
|
2066 |
+
7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
|
2067 |
+
GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
|
2068 |
+
AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
|
2069 |
+
OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
|
2070 |
+
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
|
2071 |
+
5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
|
2072 |
+
44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
|
2073 |
+
Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
|
2074 |
+
Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
|
2075 |
+
mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
|
2076 |
+
vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
|
2077 |
+
KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
|
2078 |
+
NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
|
2079 |
+
viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
|
2080 |
+
-----END CERTIFICATE-----
|
2081 |
+
|
2082 |
+
SwissSign Silver CA - G2
|
2083 |
+
========================
|
2084 |
+
-----BEGIN CERTIFICATE-----
|
2085 |
+
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
|
2086 |
+
BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
|
2087 |
+
DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
|
2088 |
+
aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
|
2089 |
+
9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
|
2090 |
+
N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
|
2091 |
+
+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
|
2092 |
+
6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
|
2093 |
+
MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
|
2094 |
+
qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
|
2095 |
+
FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
|
2096 |
+
ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
|
2097 |
+
celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
|
2098 |
+
CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
|
2099 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
|
2100 |
+
tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
|
2101 |
+
cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
|
2102 |
+
4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
|
2103 |
+
kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
|
2104 |
+
3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
|
2105 |
+
/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
|
2106 |
+
DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
|
2107 |
+
e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
|
2108 |
+
WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
|
2109 |
+
DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
|
2110 |
+
DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
|
2111 |
+
-----END CERTIFICATE-----
|
2112 |
+
|
2113 |
+
GeoTrust Primary Certification Authority
|
2114 |
+
========================================
|
2115 |
+
-----BEGIN CERTIFICATE-----
|
2116 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
2117 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
2118 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
2119 |
+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
2120 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2121 |
+
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
2122 |
+
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
2123 |
+
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
2124 |
+
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
2125 |
+
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
2126 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
2127 |
+
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
2128 |
+
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
2129 |
+
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
2130 |
+
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
2131 |
+
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
2132 |
+
-----END CERTIFICATE-----
|
2133 |
+
|
2134 |
+
thawte Primary Root CA
|
2135 |
+
======================
|
2136 |
+
-----BEGIN CERTIFICATE-----
|
2137 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
2138 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2139 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2140 |
+
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
2141 |
+
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
2142 |
+
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
2143 |
+
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
2144 |
+
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
2145 |
+
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
2146 |
+
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
2147 |
+
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
2148 |
+
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
2149 |
+
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
2150 |
+
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
2151 |
+
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
2152 |
+
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
2153 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
2154 |
+
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
2155 |
+
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
2156 |
+
-----END CERTIFICATE-----
|
2157 |
+
|
2158 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
2159 |
+
============================================================
|
2160 |
+
-----BEGIN CERTIFICATE-----
|
2161 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
2162 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2163 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2164 |
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
2165 |
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
2166 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
2167 |
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
2168 |
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
2169 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2170 |
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
2171 |
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
2172 |
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
2173 |
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
2174 |
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
2175 |
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
2176 |
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
2177 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
2178 |
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
2179 |
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
2180 |
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
2181 |
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
2182 |
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
2183 |
+
-----END CERTIFICATE-----
|
2184 |
+
|
2185 |
+
SecureTrust CA
|
2186 |
+
==============
|
2187 |
+
-----BEGIN CERTIFICATE-----
|
2188 |
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
2189 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
2190 |
+
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
2191 |
+
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
2192 |
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
2193 |
+
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
2194 |
+
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
2195 |
+
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
2196 |
+
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
2197 |
+
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
2198 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
2199 |
+
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2200 |
+
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
2201 |
+
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
2202 |
+
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
2203 |
+
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
2204 |
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
2205 |
+
-----END CERTIFICATE-----
|
2206 |
+
|
2207 |
+
Secure Global CA
|
2208 |
+
================
|
2209 |
+
-----BEGIN CERTIFICATE-----
|
2210 |
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
2211 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
2212 |
+
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
2213 |
+
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
2214 |
+
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
2215 |
+
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
2216 |
+
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
2217 |
+
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
2218 |
+
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
2219 |
+
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
2220 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
2221 |
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
2222 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
2223 |
+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
2224 |
+
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
2225 |
+
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
2226 |
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
2227 |
+
-----END CERTIFICATE-----
|
2228 |
+
|
2229 |
+
COMODO Certification Authority
|
2230 |
+
==============================
|
2231 |
+
-----BEGIN CERTIFICATE-----
|
2232 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
2233 |
+
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
2234 |
+
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
2235 |
+
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
2236 |
+
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
2237 |
+
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
2238 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
2239 |
+
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
2240 |
+
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
2241 |
+
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
2242 |
+
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
2243 |
+
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
2244 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
2245 |
+
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
2246 |
+
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
2247 |
+
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
2248 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
2249 |
+
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
2250 |
+
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
2251 |
+
-----END CERTIFICATE-----
|
2252 |
+
|
2253 |
+
DigiNotar Root CA
|
2254 |
+
=================
|
2255 |
+
-----BEGIN CERTIFICATE-----
|
2256 |
+
MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG
|
2257 |
+
EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G
|
2258 |
+
CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx
|
2259 |
+
OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90
|
2260 |
+
YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3
|
2261 |
+
DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq
|
2262 |
+
7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U
|
2263 |
+
i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8
|
2264 |
+
ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq
|
2265 |
+
bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4
|
2266 |
+
iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk
|
2267 |
+
XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb
|
2268 |
+
qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6
|
2269 |
+
xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc
|
2270 |
+
BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2271 |
+
AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
|
2272 |
+
jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5
|
2273 |
+
wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA
|
2274 |
+
ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT
|
2275 |
+
FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf
|
2276 |
+
yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA
|
2277 |
+
ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ
|
2278 |
+
/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE
|
2279 |
+
CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo
|
2280 |
+
EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
|
2281 |
+
-----END CERTIFICATE-----
|
2282 |
+
|
2283 |
+
Network Solutions Certificate Authority
|
2284 |
+
=======================================
|
2285 |
+
-----BEGIN CERTIFICATE-----
|
2286 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
2287 |
+
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
2288 |
+
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
2289 |
+
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
2290 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
2291 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
2292 |
+
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
2293 |
+
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
2294 |
+
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
2295 |
+
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
2296 |
+
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
2297 |
+
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
2298 |
+
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
2299 |
+
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
2300 |
+
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
2301 |
+
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
2302 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
2303 |
+
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
2304 |
+
-----END CERTIFICATE-----
|
2305 |
+
|
2306 |
+
WellsSecure Public Root Certificate Authority
|
2307 |
+
=============================================
|
2308 |
+
-----BEGIN CERTIFICATE-----
|
2309 |
+
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
|
2310 |
+
F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
|
2311 |
+
NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
2312 |
+
MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
|
2313 |
+
bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
|
2314 |
+
VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
2315 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
|
2316 |
+
iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
|
2317 |
+
i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
|
2318 |
+
bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
|
2319 |
+
K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
|
2320 |
+
AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
|
2321 |
+
cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
|
2322 |
+
lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
|
2323 |
+
i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
|
2324 |
+
GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
|
2325 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
|
2326 |
+
K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
|
2327 |
+
bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
|
2328 |
+
qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
|
2329 |
+
E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
|
2330 |
+
tylv2G0xffX8oRAHh84vWdw+WNs=
|
2331 |
+
-----END CERTIFICATE-----
|
2332 |
+
|
2333 |
+
COMODO ECC Certification Authority
|
2334 |
+
==================================
|
2335 |
+
-----BEGIN CERTIFICATE-----
|
2336 |
+
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
2337 |
+
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
2338 |
+
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
2339 |
+
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
2340 |
+
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
2341 |
+
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
2342 |
+
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
2343 |
+
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
2344 |
+
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
2345 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
2346 |
+
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
2347 |
+
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
2348 |
+
-----END CERTIFICATE-----
|
2349 |
+
|
2350 |
+
MD5 Collisions Forged Rogue CA 25c3
|
2351 |
+
===================================
|
2352 |
+
-----BEGIN CERTIFICATE-----
|
2353 |
+
MIIEMjCCA5ugAwIBAgIBQjANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
2354 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
2355 |
+
bmVzcyBDQS0xMB4XDTA0MDczMTAwMDAwMVoXDTA0MDkwMjAwMDAwMVowPDE6MDgGA1UEAxMxTUQ1
|
2356 |
+
IENvbGxpc2lvbnMgSW5jLiAoaHR0cDovL3d3dy5waHJlZWRvbS5vcmcvbWQ1KTCBnzANBgkqhkiG
|
2357 |
+
9w0BAQEFAAOBjQAwgYkCgYEAuqZZySwo1iqw+O2fRqSkN+4OGWhZ0bMDmVHWFppeN2sV4A5L9YRk
|
2358 |
+
+KPbQW811ZsVH9vEOFJwgZdej6C193458DKsHq1E0rP6SMPOkZvs9Jx84Vr1yDdrmoPe58oglzFC
|
2359 |
+
cxWRaPSIr/koKMXpD3OwF0sTTJl10ETmfghsGvJPG0ECAwEAAaOCAiQwggIgMAsGA1UdDwQEAwIB
|
2360 |
+
xjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSnBGAfq3JDCMV/CJBVVhzWzuY46zAfBgNVHSME
|
2361 |
+
GDAWgBS+qKB0clBrRLfJI9j7qP+zV2tobDCCAb4GCWCGSAGG+EIBDQSCAa8WggGrMwAAACdeOeCJ
|
2362 |
+
YQ9Oo8VFCza7AdFTqsMIj2/4Tz6Hh0QR3GDg35JV+bhzG1STxZ/QRsRgtjVizbmvHKhpGslbPJY3
|
2363 |
+
wO1n77v+wIucUC8pvYMino4I+qwTcKJYf2JiihH3ifbftmdZcxb7YxaKtJE4zi71tr5MpJRJ5GUR
|
2364 |
+
CkIVycEw4mnVRX2lJru5YexiZPA54ee8aNhQUZ4dYNPRo6cK+AMgoXABF5E2TwJwMYaD3fcP2Acd
|
2365 |
+
EbMTBKXc8K5QsSgOY2kqDIJvj0cz32yiBpLxT0W+2TA2oyuM1neuNWN/Tkyak0g22Z8CAwEAAaOB
|
2366 |
+
vTCBujAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0OBBYEFM2mg/qlYDf3ljcXKd5BePGHiVXnMDsGA1Ud
|
2367 |
+
HwQ0MDIwMKAuoCyGKmh0dHA6Ly9jcmwuZ2VvdHJ1c3QuY29tL2NybHMvZ2xvYmFsY2ExLmNybDAf
|
2368 |
+
BgNVHSMEGDAWgBS+qKB0clBrRLfJI9j7qP+zV2tobDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
|
2369 |
+
BQUHAwIwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQCnIQKN0Q6igHcl/UNgFY/s75BH
|
2370 |
+
1IRCFSYRHM3CPBApqbbfq1d1kdrlK7OQRRwwY1Y/itlQ+u1YbMBlrGZX3hzGdjv1AA6ORc5/TJDs
|
2371 |
+
K8bNs7SPYtD+t8UmckTt9phbrsvRlfXaCL5oRrF1yOwdjx56lPGqU3iiRa5U6tGedMh2Zw==
|
2372 |
+
-----END CERTIFICATE-----
|
2373 |
+
|
2374 |
+
IGC/A
|
2375 |
+
=====
|
2376 |
+
-----BEGIN CERTIFICATE-----
|
2377 |
+
MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
|
2378 |
+
VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
|
2379 |
+
Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
|
2380 |
+
MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
|
2381 |
+
EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
|
2382 |
+
STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
|
2383 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
|
2384 |
+
TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
|
2385 |
+
So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
|
2386 |
+
HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
|
2387 |
+
frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
|
2388 |
+
tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
|
2389 |
+
egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
|
2390 |
+
iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
|
2391 |
+
q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
|
2392 |
+
MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
|
2393 |
+
Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
|
2394 |
+
lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
|
2395 |
+
0mBWWg==
|
2396 |
+
-----END CERTIFICATE-----
|
2397 |
+
|
2398 |
+
Security Communication EV RootCA1
|
2399 |
+
=================================
|
2400 |
+
-----BEGIN CERTIFICATE-----
|
2401 |
+
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
2402 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
|
2403 |
+
dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
|
2404 |
+
BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
|
2405 |
+
Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2406 |
+
AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
|
2407 |
+
/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
|
2408 |
+
WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
|
2409 |
+
ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
|
2410 |
+
bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
|
2411 |
+
9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
2412 |
+
SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
|
2413 |
+
iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
|
2414 |
+
Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
|
2415 |
+
mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
|
2416 |
+
T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
|
2417 |
+
-----END CERTIFICATE-----
|
2418 |
+
|
2419 |
+
OISTE WISeKey Global Root GA CA
|
2420 |
+
===============================
|
2421 |
+
-----BEGIN CERTIFICATE-----
|
2422 |
+
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
2423 |
+
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
2424 |
+
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
2425 |
+
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
2426 |
+
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
2427 |
+
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
2428 |
+
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
2429 |
+
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
2430 |
+
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
2431 |
+
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
2432 |
+
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
2433 |
+
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
2434 |
+
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2435 |
+
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
2436 |
+
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
2437 |
+
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
2438 |
+
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
2439 |
+
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
2440 |
+
-----END CERTIFICATE-----
|
2441 |
+
|
2442 |
+
S-TRUST Authentication and Encryption Root CA 2005 PN
|
2443 |
+
=====================================================
|
2444 |
+
-----BEGIN CERTIFICATE-----
|
2445 |
+
MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
|
2446 |
+
BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
|
2447 |
+
cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
|
2448 |
+
LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
|
2449 |
+
NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
|
2450 |
+
ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
|
2451 |
+
aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
|
2452 |
+
b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2453 |
+
MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
|
2454 |
+
4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
|
2455 |
+
g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
|
2456 |
+
eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
|
2457 |
+
KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
|
2458 |
+
/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
|
2459 |
+
bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
|
2460 |
+
D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
|
2461 |
+
pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
|
2462 |
+
P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
|
2463 |
+
nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
|
2464 |
+
F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
|
2465 |
+
Hz2eBIPdltkdOpQ=
|
2466 |
+
-----END CERTIFICATE-----
|
2467 |
+
|
2468 |
+
Microsec e-Szigno Root CA
|
2469 |
+
=========================
|
2470 |
+
-----BEGIN CERTIFICATE-----
|
2471 |
+
MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
|
2472 |
+
BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
|
2473 |
+
EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
|
2474 |
+
MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
|
2475 |
+
dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
|
2476 |
+
GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
2477 |
+
AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
|
2478 |
+
d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
|
2479 |
+
oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
|
2480 |
+
QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
|
2481 |
+
PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
|
2482 |
+
MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
|
2483 |
+
IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
|
2484 |
+
VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
|
2485 |
+
LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
|
2486 |
+
dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
|
2487 |
+
AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
|
2488 |
+
4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
|
2489 |
+
AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
|
2490 |
+
egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
|
2491 |
+
Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
|
2492 |
+
PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
|
2493 |
+
c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
|
2494 |
+
cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
|
2495 |
+
IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
|
2496 |
+
WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
|
2497 |
+
MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
|
2498 |
+
MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
|
2499 |
+
Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
|
2500 |
+
HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
|
2501 |
+
nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
|
2502 |
+
aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
|
2503 |
+
86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
|
2504 |
+
yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
|
2505 |
+
S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
|
2506 |
+
-----END CERTIFICATE-----
|
2507 |
+
|
2508 |
+
Certigna
|
2509 |
+
========
|
2510 |
+
-----BEGIN CERTIFICATE-----
|
2511 |
+
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
2512 |
+
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
2513 |
+
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
2514 |
+
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
2515 |
+
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
2516 |
+
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
2517 |
+
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
2518 |
+
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
2519 |
+
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
2520 |
+
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
2521 |
+
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
2522 |
+
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
2523 |
+
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
2524 |
+
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
2525 |
+
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
2526 |
+
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
2527 |
+
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
2528 |
+
-----END CERTIFICATE-----
|
2529 |
+
|
2530 |
+
AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
|
2531 |
+
======================================
|
2532 |
+
-----BEGIN CERTIFICATE-----
|
2533 |
+
MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
|
2534 |
+
AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
|
2535 |
+
LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
|
2536 |
+
HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
|
2537 |
+
U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
|
2538 |
+
IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
|
2539 |
+
AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
|
2540 |
+
yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
|
2541 |
+
2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
|
2542 |
+
4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
|
2543 |
+
2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
|
2544 |
+
8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
|
2545 |
+
HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
|
2546 |
+
Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
|
2547 |
+
5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
|
2548 |
+
czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2549 |
+
AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
|
2550 |
+
ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
|
2551 |
+
BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
|
2552 |
+
cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
|
2553 |
+
AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
|
2554 |
+
EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
|
2555 |
+
/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
|
2556 |
+
MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
|
2557 |
+
3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
|
2558 |
+
eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
|
2559 |
+
/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
|
2560 |
+
RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
|
2561 |
+
Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
|
2562 |
+
-----END CERTIFICATE-----
|
2563 |
+
|
2564 |
+
TC TrustCenter Class 2 CA II
|
2565 |
+
============================
|
2566 |
+
-----BEGIN CERTIFICATE-----
|
2567 |
+
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2568 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2569 |
+
IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
|
2570 |
+
MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2571 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
|
2572 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2573 |
+
AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
|
2574 |
+
IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
|
2575 |
+
xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
|
2576 |
+
Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
|
2577 |
+
SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2578 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
|
2579 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2580 |
+
Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2581 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2582 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2583 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
|
2584 |
+
dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
|
2585 |
+
KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
|
2586 |
+
TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
|
2587 |
+
JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
|
2588 |
+
vQ==
|
2589 |
+
-----END CERTIFICATE-----
|
2590 |
+
|
2591 |
+
TC TrustCenter Class 3 CA II
|
2592 |
+
============================
|
2593 |
+
-----BEGIN CERTIFICATE-----
|
2594 |
+
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2595 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2596 |
+
IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
|
2597 |
+
MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2598 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
|
2599 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2600 |
+
AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
|
2601 |
+
yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
|
2602 |
+
6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
|
2603 |
+
uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
|
2604 |
+
2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2605 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
|
2606 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2607 |
+
Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2608 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2609 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2610 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
|
2611 |
+
O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
|
2612 |
+
yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
|
2613 |
+
IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
|
2614 |
+
092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
|
2615 |
+
5A==
|
2616 |
+
-----END CERTIFICATE-----
|
2617 |
+
|
2618 |
+
TC TrustCenter Universal CA I
|
2619 |
+
=============================
|
2620 |
+
-----BEGIN CERTIFICATE-----
|
2621 |
+
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
|
2622 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2623 |
+
IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
|
2624 |
+
MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
|
2625 |
+
VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
|
2626 |
+
JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
2627 |
+
ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
|
2628 |
+
qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
|
2629 |
+
xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
|
2630 |
+
ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
|
2631 |
+
gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
|
2632 |
+
BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2633 |
+
AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
|
2634 |
+
1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
|
2635 |
+
vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
|
2636 |
+
ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
|
2637 |
+
ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
|
2638 |
+
7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
|
2639 |
+
-----END CERTIFICATE-----
|
2640 |
+
|
2641 |
+
Deutsche Telekom Root CA 2
|
2642 |
+
==========================
|
2643 |
+
-----BEGIN CERTIFICATE-----
|
2644 |
+
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
2645 |
+
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
2646 |
+
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
2647 |
+
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
2648 |
+
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
2649 |
+
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
2650 |
+
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
2651 |
+
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
2652 |
+
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
2653 |
+
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
2654 |
+
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
2655 |
+
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
2656 |
+
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
2657 |
+
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
2658 |
+
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
2659 |
+
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
2660 |
+
Cm26OWMohpLzGITY+9HPBVZkVw==
|
2661 |
+
-----END CERTIFICATE-----
|
2662 |
+
|
2663 |
+
ComSign CA
|
2664 |
+
==========
|
2665 |
+
-----BEGIN CERTIFICATE-----
|
2666 |
+
MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
|
2667 |
+
EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
|
2668 |
+
MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
|
2669 |
+
Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
|
2670 |
+
ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
|
2671 |
+
P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
|
2672 |
+
GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
|
2673 |
+
YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
|
2674 |
+
rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
|
2675 |
+
oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
|
2676 |
+
AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
|
2677 |
+
VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
|
2678 |
+
QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
|
2679 |
+
mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
|
2680 |
+
/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
|
2681 |
+
zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
|
2682 |
+
AGegcQCCSA==
|
2683 |
+
-----END CERTIFICATE-----
|
2684 |
+
|
2685 |
+
ComSign Secured CA
|
2686 |
+
==================
|
2687 |
+
-----BEGIN CERTIFICATE-----
|
2688 |
+
MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
|
2689 |
+
AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
|
2690 |
+
NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
|
2691 |
+
QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2692 |
+
ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
|
2693 |
+
49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
|
2694 |
+
7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
|
2695 |
+
kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
|
2696 |
+
9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
|
2697 |
+
AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
|
2698 |
+
U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
|
2699 |
+
j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
|
2700 |
+
AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
|
2701 |
+
BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
|
2702 |
+
FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
|
2703 |
+
51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
|
2704 |
+
OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
|
2705 |
+
-----END CERTIFICATE-----
|
2706 |
+
|
2707 |
+
Cybertrust Global Root
|
2708 |
+
======================
|
2709 |
+
-----BEGIN CERTIFICATE-----
|
2710 |
+
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
2711 |
+
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
2712 |
+
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
2713 |
+
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
2714 |
+
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
2715 |
+
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
2716 |
+
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
2717 |
+
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
2718 |
+
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
2719 |
+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
2720 |
+
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
2721 |
+
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
2722 |
+
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
2723 |
+
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
2724 |
+
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
2725 |
+
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
2726 |
+
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
2727 |
+
-----END CERTIFICATE-----
|
2728 |
+
|
2729 |
+
ePKI Root Certification Authority
|
2730 |
+
=================================
|
2731 |
+
-----BEGIN CERTIFICATE-----
|
2732 |
+
MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
|
2733 |
+
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
|
2734 |
+
Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
|
2735 |
+
MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
|
2736 |
+
MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
|
2737 |
+
AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
|
2738 |
+
IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
|
2739 |
+
lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
|
2740 |
+
qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
|
2741 |
+
12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
|
2742 |
+
WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
|
2743 |
+
ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
|
2744 |
+
lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
|
2745 |
+
vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
|
2746 |
+
Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
|
2747 |
+
MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
|
2748 |
+
ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
|
2749 |
+
1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
|
2750 |
+
KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
|
2751 |
+
xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
|
2752 |
+
NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
|
2753 |
+
GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
|
2754 |
+
xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
|
2755 |
+
gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
|
2756 |
+
sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
|
2757 |
+
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
2758 |
+
-----END CERTIFICATE-----
|
2759 |
+
|
2760 |
+
T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
|
2761 |
+
=============================================================================================================================
|
2762 |
+
-----BEGIN CERTIFICATE-----
|
2763 |
+
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
|
2764 |
+
DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
|
2765 |
+
aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
|
2766 |
+
b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
|
2767 |
+
BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
|
2768 |
+
S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
|
2769 |
+
MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
|
2770 |
+
IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
|
2771 |
+
n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
|
2772 |
+
IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
|
2773 |
+
dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
|
2774 |
+
cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
|
2775 |
+
AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
|
2776 |
+
Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
|
2777 |
+
xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
|
2778 |
+
6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
|
2779 |
+
hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
|
2780 |
+
BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
2781 |
+
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
|
2782 |
+
N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
|
2783 |
+
y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
|
2784 |
+
LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
|
2785 |
+
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
|
2786 |
+
-----END CERTIFICATE-----
|
2787 |
+
|
2788 |
+
Buypass Class 2 CA 1
|
2789 |
+
====================
|
2790 |
+
-----BEGIN CERTIFICATE-----
|
2791 |
+
MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2792 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
|
2793 |
+
MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2794 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
|
2795 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
|
2796 |
+
cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
|
2797 |
+
0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
|
2798 |
+
0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
|
2799 |
+
uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
|
2800 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
|
2801 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
|
2802 |
+
1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
|
2803 |
+
7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
|
2804 |
+
fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
|
2805 |
+
wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
|
2806 |
+
-----END CERTIFICATE-----
|
2807 |
+
|
2808 |
+
Buypass Class 3 CA 1
|
2809 |
+
====================
|
2810 |
+
-----BEGIN CERTIFICATE-----
|
2811 |
+
MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2812 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
|
2813 |
+
MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2814 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
|
2815 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
|
2816 |
+
ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
|
2817 |
+
n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
|
2818 |
+
AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
|
2819 |
+
1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
|
2820 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
|
2821 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
|
2822 |
+
pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
|
2823 |
+
EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
|
2824 |
+
htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
|
2825 |
+
el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
|
2826 |
+
-----END CERTIFICATE-----
|
2827 |
+
|
2828 |
+
EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
|
2829 |
+
==========================================================================
|
2830 |
+
-----BEGIN CERTIFICATE-----
|
2831 |
+
MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
|
2832 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
|
2833 |
+
QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
|
2834 |
+
Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
|
2835 |
+
ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
|
2836 |
+
IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
|
2837 |
+
SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
|
2838 |
+
X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
|
2839 |
+
gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
|
2840 |
+
eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
|
2841 |
+
TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
|
2842 |
+
Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
|
2843 |
+
uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
|
2844 |
+
qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
|
2845 |
+
ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
|
2846 |
+
Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
|
2847 |
+
/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
|
2848 |
+
Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
|
2849 |
+
FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
|
2850 |
+
zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
|
2851 |
+
XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
|
2852 |
+
bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
|
2853 |
+
RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
|
2854 |
+
1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
|
2855 |
+
2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
|
2856 |
+
Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
|
2857 |
+
AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
|
2858 |
+
-----END CERTIFICATE-----
|
2859 |
+
|
2860 |
+
certSIGN ROOT CA
|
2861 |
+
================
|
2862 |
+
-----BEGIN CERTIFICATE-----
|
2863 |
+
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
2864 |
+
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
2865 |
+
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
2866 |
+
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
2867 |
+
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
2868 |
+
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
2869 |
+
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
2870 |
+
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
2871 |
+
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
2872 |
+
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
2873 |
+
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
2874 |
+
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
2875 |
+
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
2876 |
+
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
2877 |
+
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
2878 |
+
-----END CERTIFICATE-----
|
2879 |
+
|
2880 |
+
CNNIC ROOT
|
2881 |
+
==========
|
2882 |
+
-----BEGIN CERTIFICATE-----
|
2883 |
+
MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
|
2884 |
+
ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
|
2885 |
+
OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
|
2886 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
|
2887 |
+
o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
|
2888 |
+
VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
|
2889 |
+
VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
|
2890 |
+
czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
|
2891 |
+
y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
|
2892 |
+
wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
|
2893 |
+
lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
|
2894 |
+
Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
|
2895 |
+
O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
|
2896 |
+
BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
|
2897 |
+
G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
|
2898 |
+
mxE=
|
2899 |
+
-----END CERTIFICATE-----
|
2900 |
+
|
2901 |
+
ApplicationCA - Japanese Government
|
2902 |
+
===================================
|
2903 |
+
-----BEGIN CERTIFICATE-----
|
2904 |
+
MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
|
2905 |
+
SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
|
2906 |
+
MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
|
2907 |
+
cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2908 |
+
CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
|
2909 |
+
fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
|
2910 |
+
wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
|
2911 |
+
jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
|
2912 |
+
nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
|
2913 |
+
WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
|
2914 |
+
BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
|
2915 |
+
vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
|
2916 |
+
o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
|
2917 |
+
/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
|
2918 |
+
io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
|
2919 |
+
dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
|
2920 |
+
rosot4LKGAfmt1t06SAZf7IbiVQ=
|
2921 |
+
-----END CERTIFICATE-----
|
2922 |
+
|
2923 |
+
GeoTrust Primary Certification Authority - G3
|
2924 |
+
=============================================
|
2925 |
+
-----BEGIN CERTIFICATE-----
|
2926 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
2927 |
+
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
2928 |
+
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
2929 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
2930 |
+
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
2931 |
+
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
2932 |
+
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
2933 |
+
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
2934 |
+
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
2935 |
+
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
2936 |
+
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
2937 |
+
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
2938 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
2939 |
+
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
2940 |
+
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
2941 |
+
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
2942 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
2943 |
+
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
2944 |
+
-----END CERTIFICATE-----
|
2945 |
+
|
2946 |
+
thawte Primary Root CA - G2
|
2947 |
+
===========================
|
2948 |
+
-----BEGIN CERTIFICATE-----
|
2949 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
2950 |
+
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
2951 |
+
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
2952 |
+
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
2953 |
+
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
2954 |
+
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
2955 |
+
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
2956 |
+
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
2957 |
+
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
2958 |
+
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
2959 |
+
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
2960 |
+
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
2961 |
+
-----END CERTIFICATE-----
|
2962 |
+
|
2963 |
+
thawte Primary Root CA - G3
|
2964 |
+
===========================
|
2965 |
+
-----BEGIN CERTIFICATE-----
|
2966 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
2967 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2968 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2969 |
+
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
2970 |
+
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
2971 |
+
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
2972 |
+
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
2973 |
+
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2974 |
+
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
2975 |
+
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
2976 |
+
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
2977 |
+
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
2978 |
+
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
2979 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
2980 |
+
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
2981 |
+
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
2982 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
2983 |
+
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
2984 |
+
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
2985 |
+
-----END CERTIFICATE-----
|
2986 |
+
|
2987 |
+
GeoTrust Primary Certification Authority - G2
|
2988 |
+
=============================================
|
2989 |
+
-----BEGIN CERTIFICATE-----
|
2990 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
2991 |
+
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
2992 |
+
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
2993 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
2994 |
+
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
2995 |
+
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
2996 |
+
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
2997 |
+
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
2998 |
+
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
2999 |
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
3000 |
+
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
3001 |
+
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
3002 |
+
npaqBA+K
|
3003 |
+
-----END CERTIFICATE-----
|
3004 |
+
|
3005 |
+
VeriSign Universal Root Certification Authority
|
3006 |
+
===============================================
|
3007 |
+
-----BEGIN CERTIFICATE-----
|
3008 |
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
3009 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
3010 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
3011 |
+
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
3012 |
+
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
3013 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
3014 |
+
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
3015 |
+
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
3016 |
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
3017 |
+
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
3018 |
+
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
3019 |
+
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
3020 |
+
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
3021 |
+
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
3022 |
+
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
3023 |
+
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
3024 |
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
3025 |
+
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
3026 |
+
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
3027 |
+
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
3028 |
+
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
3029 |
+
mJO37M2CYfE45k+XmCpajQ==
|
3030 |
+
-----END CERTIFICATE-----
|
3031 |
+
|
3032 |
+
VeriSign Class 3 Public Primary Certification Authority - G4
|
3033 |
+
============================================================
|
3034 |
+
-----BEGIN CERTIFICATE-----
|
3035 |
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
3036 |
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
3037 |
+
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
3038 |
+
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
3039 |
+
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
3040 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
3041 |
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
3042 |
+
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
3043 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
3044 |
+
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
3045 |
+
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
3046 |
+
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
3047 |
+
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
3048 |
+
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
3049 |
+
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
3050 |
+
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
3051 |
+
-----END CERTIFICATE-----
|
3052 |
+
|
3053 |
+
NetLock Arany (Class Gold) Főtanúsítvány
|
3054 |
+
============================================
|
3055 |
+
-----BEGIN CERTIFICATE-----
|
3056 |
+
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
3057 |
+
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
3058 |
+
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
3059 |
+
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
3060 |
+
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
3061 |
+
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
3062 |
+
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
3063 |
+
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
3064 |
+
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
3065 |
+
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
3066 |
+
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
3067 |
+
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
3068 |
+
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
3069 |
+
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
3070 |
+
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
3071 |
+
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
3072 |
+
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
3073 |
+
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
3074 |
+
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
3075 |
+
-----END CERTIFICATE-----
|
3076 |
+
|
3077 |
+
Staat der Nederlanden Root CA - G2
|
3078 |
+
==================================
|
3079 |
+
-----BEGIN CERTIFICATE-----
|
3080 |
+
MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
3081 |
+
CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
3082 |
+
Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
|
3083 |
+
TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
|
3084 |
+
ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
|
3085 |
+
5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
|
3086 |
+
vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
|
3087 |
+
CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
|
3088 |
+
e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
|
3089 |
+
OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
|
3090 |
+
CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
|
3091 |
+
48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
|
3092 |
+
trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
|
3093 |
+
qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
|
3094 |
+
AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
|
3095 |
+
ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
|
3096 |
+
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
|
3097 |
+
A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
|
3098 |
+
+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
|
3099 |
+
f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
|
3100 |
+
kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
|
3101 |
+
CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
|
3102 |
+
URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
|
3103 |
+
CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
|
3104 |
+
oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
|
3105 |
+
IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
|
3106 |
+
66+KAQ==
|
3107 |
+
-----END CERTIFICATE-----
|
3108 |
+
|
3109 |
+
CA Disig
|
3110 |
+
========
|
3111 |
+
-----BEGIN CERTIFICATE-----
|
3112 |
+
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
|
3113 |
+
QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
|
3114 |
+
MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
|
3115 |
+
bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
|
3116 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
|
3117 |
+
GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
|
3118 |
+
Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
|
3119 |
+
hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
|
3120 |
+
ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
|
3121 |
+
gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
|
3122 |
+
AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
|
3123 |
+
aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
|
3124 |
+
ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
|
3125 |
+
BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
|
3126 |
+
WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
|
3127 |
+
mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
|
3128 |
+
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
|
3129 |
+
ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
|
3130 |
+
4Z7CRneC9VkGjCFMhwnN5ag=
|
3131 |
+
-----END CERTIFICATE-----
|
3132 |
+
|
3133 |
+
Juur-SK
|
3134 |
+
=======
|
3135 |
+
-----BEGIN CERTIFICATE-----
|
3136 |
+
MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
|
3137 |
+
c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
|
3138 |
+
DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
|
3139 |
+
SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
|
3140 |
+
aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
3141 |
+
ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
|
3142 |
+
TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
|
3143 |
+
+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
|
3144 |
+
UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
|
3145 |
+
Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
|
3146 |
+
MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
|
3147 |
+
HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
|
3148 |
+
AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
|
3149 |
+
cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
|
3150 |
+
AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
|
3151 |
+
cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
|
3152 |
+
FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
|
3153 |
+
A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
|
3154 |
+
ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
|
3155 |
+
abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
|
3156 |
+
IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
|
3157 |
+
Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
|
3158 |
+
yyqcjg==
|
3159 |
+
-----END CERTIFICATE-----
|
3160 |
+
|
3161 |
+
Hongkong Post Root CA 1
|
3162 |
+
=======================
|
3163 |
+
-----BEGIN CERTIFICATE-----
|
3164 |
+
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
3165 |
+
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
3166 |
+
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
3167 |
+
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
3168 |
+
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
3169 |
+
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
3170 |
+
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
3171 |
+
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
3172 |
+
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
3173 |
+
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
3174 |
+
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
3175 |
+
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
3176 |
+
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
3177 |
+
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
3178 |
+
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
3179 |
+
-----END CERTIFICATE-----
|
3180 |
+
|
3181 |
+
SecureSign RootCA11
|
3182 |
+
===================
|
3183 |
+
-----BEGIN CERTIFICATE-----
|
3184 |
+
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
3185 |
+
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
3186 |
+
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
3187 |
+
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
3188 |
+
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
3189 |
+
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
3190 |
+
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
3191 |
+
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
3192 |
+
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
3193 |
+
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
3194 |
+
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
3195 |
+
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
3196 |
+
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
3197 |
+
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
3198 |
+
y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
3199 |
+
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
3200 |
+
-----END CERTIFICATE-----
|
3201 |
+
|
3202 |
+
ACEDICOM Root
|
3203 |
+
=============
|
3204 |
+
-----BEGIN CERTIFICATE-----
|
3205 |
+
MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
|
3206 |
+
T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
|
3207 |
+
MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
|
3208 |
+
A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
|
3209 |
+
AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
|
3210 |
+
WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
|
3211 |
+
YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
|
3212 |
+
MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
|
3213 |
+
m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
|
3214 |
+
HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
|
3215 |
+
xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
|
3216 |
+
3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
|
3217 |
+
2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
|
3218 |
+
TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
|
3219 |
+
4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
|
3220 |
+
9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
|
3221 |
+
bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
|
3222 |
+
aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
|
3223 |
+
eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
|
3224 |
+
zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
|
3225 |
+
ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
|
3226 |
+
KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
|
3227 |
+
nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
|
3228 |
+
I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
|
3229 |
+
MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
|
3230 |
+
tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
|
3231 |
+
-----END CERTIFICATE-----
|
3232 |
+
|
3233 |
+
Verisign Class 1 Public Primary Certification Authority
|
3234 |
+
=======================================================
|
3235 |
+
-----BEGIN CERTIFICATE-----
|
3236 |
+
MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
3237 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
|
3238 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
3239 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
|
3240 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
3241 |
+
A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
|
3242 |
+
VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
|
3243 |
+
yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
|
3244 |
+
XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
|
3245 |
+
0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
|
3246 |
+
RjXZ+Hxb
|
3247 |
+
-----END CERTIFICATE-----
|
3248 |
+
|
3249 |
+
Verisign Class 3 Public Primary Certification Authority
|
3250 |
+
=======================================================
|
3251 |
+
-----BEGIN CERTIFICATE-----
|
3252 |
+
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
3253 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
3254 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
3255 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
3256 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
3257 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
3258 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
3259 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
|
3260 |
+
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
|
3261 |
+
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
|
3262 |
+
D/xwzoiQ
|
3263 |
+
-----END CERTIFICATE-----
|
3264 |
+
|
3265 |
+
Microsec e-Szigno Root CA 2009
|
3266 |
+
==============================
|
3267 |
+
-----BEGIN CERTIFICATE-----
|
3268 |
+
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
3269 |
+
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
3270 |
+
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
3271 |
+
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
3272 |
+
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
3273 |
+
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
3274 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
3275 |
+
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
3276 |
+
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
3277 |
+
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
3278 |
+
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
3279 |
+
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
3280 |
+
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
3281 |
+
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
3282 |
+
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
3283 |
+
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
3284 |
+
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
3285 |
+
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
3286 |
+
LXpUq3DDfSJlgnCW
|
3287 |
+
-----END CERTIFICATE-----
|
3288 |
+
|
3289 |
+
E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
|
3290 |
+
===================================================
|
3291 |
+
-----BEGIN CERTIFICATE-----
|
3292 |
+
MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
3293 |
+
EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
|
3294 |
+
ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
|
3295 |
+
MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
|
3296 |
+
cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
|
3297 |
+
aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3298 |
+
AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
|
3299 |
+
8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
|
3300 |
+
jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
|
3301 |
+
JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
|
3302 |
+
9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
|
3303 |
+
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
|
3304 |
+
SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
|
3305 |
+
F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
|
3306 |
+
D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
|
3307 |
+
Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
|
3308 |
+
fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
|
3309 |
+
-----END CERTIFICATE-----
|
3310 |
+
|
3311 |
+
GlobalSign Root CA - R3
|
3312 |
+
=======================
|
3313 |
+
-----BEGIN CERTIFICATE-----
|
3314 |
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
3315 |
+
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
3316 |
+
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
3317 |
+
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
3318 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
3319 |
+
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
3320 |
+
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
3321 |
+
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
3322 |
+
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
3323 |
+
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
3324 |
+
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
3325 |
+
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
3326 |
+
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
3327 |
+
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
3328 |
+
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
3329 |
+
kpeDMdmztcpHWD9f
|
3330 |
+
-----END CERTIFICATE-----
|
3331 |
+
|
3332 |
+
TC TrustCenter Universal CA III
|
3333 |
+
===============================
|
3334 |
+
-----BEGIN CERTIFICATE-----
|
3335 |
+
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
|
3336 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
3337 |
+
IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
|
3338 |
+
Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
|
3339 |
+
QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
|
3340 |
+
KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
|
3341 |
+
AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
|
3342 |
+
QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
|
3343 |
+
juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
|
3344 |
+
CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
|
3345 |
+
M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
|
3346 |
+
A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
3347 |
+
BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
|
3348 |
+
g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
|
3349 |
+
KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
|
3350 |
+
BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
|
3351 |
+
CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
|
3352 |
+
woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
|
3353 |
+
-----END CERTIFICATE-----
|
3354 |
+
|
3355 |
+
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
3356 |
+
=========================================================
|
3357 |
+
-----BEGIN CERTIFICATE-----
|
3358 |
+
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
3359 |
+
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
3360 |
+
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
3361 |
+
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
3362 |
+
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
3363 |
+
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
3364 |
+
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
3365 |
+
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
3366 |
+
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
3367 |
+
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
3368 |
+
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
3369 |
+
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
3370 |
+
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
3371 |
+
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
3372 |
+
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
3373 |
+
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
3374 |
+
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
3375 |
+
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
3376 |
+
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
3377 |
+
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
3378 |
+
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
3379 |
+
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
3380 |
+
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
3381 |
+
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
3382 |
+
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
3383 |
+
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
3384 |
+
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
3385 |
+
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
3386 |
+
-----END CERTIFICATE-----
|
3387 |
+
|
3388 |
+
Izenpe.com
|
3389 |
+
==========
|
3390 |
+
-----BEGIN CERTIFICATE-----
|
3391 |
+
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
3392 |
+
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
3393 |
+
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
3394 |
+
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
3395 |
+
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
3396 |
+
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
3397 |
+
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
3398 |
+
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
3399 |
+
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
3400 |
+
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
3401 |
+
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
3402 |
+
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
3403 |
+
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
3404 |
+
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
3405 |
+
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
3406 |
+
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
3407 |
+
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
3408 |
+
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
3409 |
+
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
3410 |
+
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
3411 |
+
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
3412 |
+
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
3413 |
+
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
3414 |
+
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
3415 |
+
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
3416 |
+
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
3417 |
+
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
3418 |
+
-----END CERTIFICATE-----
|
3419 |
+
|
3420 |
+
Chambers of Commerce Root - 2008
|
3421 |
+
================================
|
3422 |
+
-----BEGIN CERTIFICATE-----
|
3423 |
+
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
3424 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
3425 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
3426 |
+
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
3427 |
+
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
3428 |
+
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
3429 |
+
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
3430 |
+
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
3431 |
+
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
3432 |
+
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
3433 |
+
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
3434 |
+
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
3435 |
+
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
3436 |
+
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
3437 |
+
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
3438 |
+
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
3439 |
+
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
3440 |
+
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
3441 |
+
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
3442 |
+
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
3443 |
+
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
3444 |
+
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
3445 |
+
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
3446 |
+
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
3447 |
+
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
3448 |
+
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
3449 |
+
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
3450 |
+
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
3451 |
+
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
3452 |
+
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
3453 |
+
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
3454 |
+
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
3455 |
+
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
3456 |
+
-----END CERTIFICATE-----
|
3457 |
+
|
3458 |
+
Global Chambersign Root - 2008
|
3459 |
+
==============================
|
3460 |
+
-----BEGIN CERTIFICATE-----
|
3461 |
+
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
3462 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
3463 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
3464 |
+
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
3465 |
+
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
3466 |
+
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
3467 |
+
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
3468 |
+
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
3469 |
+
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
3470 |
+
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
3471 |
+
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
3472 |
+
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
3473 |
+
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
3474 |
+
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
3475 |
+
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
3476 |
+
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
3477 |
+
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
3478 |
+
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
3479 |
+
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
3480 |
+
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
3481 |
+
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
3482 |
+
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
3483 |
+
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
3484 |
+
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
3485 |
+
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
3486 |
+
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
3487 |
+
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
3488 |
+
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
3489 |
+
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
3490 |
+
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
3491 |
+
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
3492 |
+
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
3493 |
+
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
3494 |
+
-----END CERTIFICATE-----
|
3495 |
+
|
3496 |
+
Bogus Mozilla Addons
|
3497 |
+
====================
|
3498 |
+
-----BEGIN CERTIFICATE-----
|
3499 |
+
MIIF+DCCBOCgAwIBAgIRAJI51TSPQNFpWnRUcOHyP0MwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3500 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3501 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3502 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3503 |
+
NTk1OVowgeIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQ
|
3504 |
+
MA4GA1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoTC0dvb2ds
|
3505 |
+
ZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0ZWQgYnkgR1RJIEdyb3Vw
|
3506 |
+
IENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNTTDEbMBkGA1UEAxMSYWRkb25zLm1vemls
|
3507 |
+
bGEub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq8ZtNvMVc3iDc850hdWu7LLw
|
3508 |
+
4CQfE4O4IKy7mv6Iu6uhHQsfRQCqSbc1Nwxq70dMudG+41cSBI2Sx7bsAby22seBOCCtcoXmDvyB
|
3509 |
+
bAetaHY4xUTXzMZKxZc+ZPRR5vB+suxW9yWCTUmYyxaY3SPxiZHRF5dAmSbW4qIrXt+9ifIbGlMt
|
3510 |
+
zFBBetA9KgxVcBQB6VhJEHoLk4KL4R7tOoAQgs6WijTwzNfTubRQh1VUCbidQihVAOWMNVS/3SWR
|
3511 |
+
RrcN5V2DqOWL+4TkPK522sRDK1t0C/i+XWjxeFu1zn3xXZlA2sruOIFQvpihbLgkrfOvjA/XESgs
|
3512 |
+
hBhMfbXZjzC1GwIDAQABo4IB8DCCAewwHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw
|
3513 |
+
HQYDVR0OBBYEFN2A0lQ990xwyqOw3TR6MuToO1o7MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8E
|
3514 |
+
AjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEB
|
3515 |
+
AgEDBDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzB7BgNVHR8E
|
3516 |
+
dDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJl
|
3517 |
+
LmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUu
|
3518 |
+
Y3JsMHEGCCsGAQUFBwEBBGUwYzA7BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20v
|
3519 |
+
VVROQWRkVHJ1c3RTZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2Nh
|
3520 |
+
LmNvbTA1BgNVHREELjAsghJhZGRvbnMubW96aWxsYS5vcmeCFnd3dy5hZGRvbnMubW96aWxsYS5v
|
3521 |
+
cmcwDQYJKoZIhvcNAQEFBQADggEBADM7YxX8sewULJPddZTegVrZTpm++0qkOVVNoUB63hMqh6k3
|
3522 |
+
z+jV+63Re21vjCCHglTmV0m8ICiEzdYB2ZOLF24jZuWEyIA/xqFwgOTsTR35/JFac2IpmvcgHGHg
|
3523 |
+
izmfyrx+jd282bHjn57fFVORIVIL2RojD2Y226yTlkqjpSLPKfeimaj2ttlArtl+tvZYLpusNspk
|
3524 |
+
j2VS3IacgqtuUEvaX/oFAIgwDt6NVr+BR409BuKyYpJnj57ImrLlBrhwJLh3fCMKOMN5CNixUZ2s
|
3525 |
+
lRHHQBeeoxyP8hGnaCfaSQWEGHxYLQFnXOWfoSm7SjlFL78Rqnmi7bTUtWVDt5NGitM=
|
3526 |
+
-----END CERTIFICATE-----
|
3527 |
+
|
3528 |
+
Bogus Global Trustee
|
3529 |
+
====================
|
3530 |
+
-----BEGIN CERTIFICATE-----
|
3531 |
+
MIIG3TCCBcWgAwIBAgIRANjzX063hystqwaS4xU4L7AwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3532 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3533 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3534 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3535 |
+
NTk1OVowgeMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEO
|
3536 |
+
MAwGA1UEBxMFVGFtcGExFzAVBgNVBAkTDlNlYSBWaWxsYWdlIDEwMRcwFQYDVQQKEw5HbG9iYWwg
|
3537 |
+
VHJ1c3RlZTEXMBUGA1UECxMOR2xvYmFsIFRydXN0ZWUxKDAmBgNVBAsTH0hvc3RlZCBieSBHVEkg
|
3538 |
+
R3JvdXAgQ29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NMMRcwFQYDVQQDEw5nbG9iYWwg
|
3539 |
+
dHJ1c3RlZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANl08qpBHd/1whZDSVwpv7aJ
|
3540 |
+
dCm8nI0MRk9ZfrJBF2Y0DGWJ4Wwl44YKniJFIozdneajld7ciAJVXONbkXXrJmljuS7Gyi4n34i6
|
3541 |
+
AiBu/rkLKden1tdIGhzO3R+pJw5iT6GWHt1UOjRjSnb1d31ZZ9gQ1LUPOkMimNv0CcQKcM7dkNQv
|
3542 |
+
73QTw83CiTliFZ3mdKjom/BjbpyJtg6tm/fMgujoLbgL2iLsSYUHiJmYP/R0qQn3gXyXC1mZGHKL
|
3543 |
+
25SCK6foqmuXv4h+dbCLRUUMx6gJ6htBWDA7X3hlFTTS5Dw0DR3YZDyKpVZJmSgtS/LPzdluSWSb
|
3544 |
+
qXmQd1WpCButGnSe4AOTCgm3rae0XO+DbLeatMZoQIAdQtFueZupGSGanPmGLQDRNP7gtvlVtvUm
|
3545 |
+
xZUWpXxznwopiaw6mPebdGe3kLddCSNqau0sEO5TChDwFh9Xs7ENeZEZsOvNMD+gFF+zxv1cM6ew
|
3546 |
+
/5iwVYy5pfJvRyRJIWnMQqJRAECFjIKCqzKly5rc0NkYDd8Z9K+DDcE+MdskSLZ1gKHhyXdkHqfl
|
3547 |
+
i38VTUunwtDteZVekTHsGP9On0gU6nW6Ic4pdukfTlGHLrPMBGC6Ix8fZbIKuNVuj0tCiUepgZBb
|
3548 |
+
K7K2ruagcHt4kAp6xeXnxfsK9i9pjIwfV+AGmf8R1VIyIJcnmO5lAgMBAAGjggHUMIIB0DAfBgNV
|
3549 |
+
HSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQUt8PeGkPtQZepjyl4nAO5rEBC
|
3550 |
+
AKwwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
|
3551 |
+
AQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQMEMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8v
|
3552 |
+
c2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2Rv
|
3553 |
+
Y2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9k
|
3554 |
+
by5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUF
|
3555 |
+
BzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZlckNBLmNydDAkBggr
|
3556 |
+
BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMBkGA1UdEQQSMBCCDmdsb2JhbCB0cnVz
|
3557 |
+
dGVlMA0GCSqGSIb3DQEBBQUAA4IBAQCPunW6OdQm03APxLMCp8USI3HJ/mPpo2J4JERP1LkRPh/H
|
3558 |
+
KOdVa+704QCRhorJCWufLqRFOdFhYl6TpQVFeJ9gEiz0bGVlDcxGNIsouqDG9JlxZPMidqxP82LJ
|
3559 |
+
pzNaBx89yYaA3NsEL4cn6L9IRIHA8Ekjbh/l5AOGJBOihWJ8WATK5o0Tcgq6VkSiD7z7oD0NKn/7
|
3560 |
+
nqkJPbda1IqN4SXopAmEcK0SRLnPuTN6ulzmS6a7BQaY//KYUnt3gCdK2eL6uVLU+/vm1i2ej8EV
|
3561 |
+
RI2bdC/ulFpO08SLiqxDnXP2rgyHia2HycnH3boUYHr4tTWdwo3GloENqVKKKUAE6Rm0
|
3562 |
+
-----END CERTIFICATE-----
|
3563 |
+
|
3564 |
+
Bogus GMail
|
3565 |
+
===========
|
3566 |
+
-----BEGIN CERTIFICATE-----
|
3567 |
+
MIIF7jCCBNagAwIBAgIQBH7L6fylX3vQnq424QyuHjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
3568 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
3569 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
3570 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1
|
3571 |
+
OTU5WjCB3zELMAkGA1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAw
|
3572 |
+
DgYDVQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChMLR29vZ2xl
|
3573 |
+
IEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3RlZCBieSBHVEkgR3JvdXAg
|
3574 |
+
Q29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NMMRgwFgYDVQQDEw9tYWlsLmdvb2dsZS5j
|
3575 |
+
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwc/DyBO7CokbKNCqqu2Aj0RF2Hx86
|
3576 |
+
0GWDTppFqENwhXbwH4cAAh9uOxcXxLXpGUaikiWNYiq0YzAfuYX4NeEWWnZJzFBIUzlZidaEAvua
|
3577 |
+
7BvHUdV2lZDUOiq4pt4CTQb7ze2lRkFfVXTl7H5A3FCcteQ1XR5oIPjp3qNqKL9B0qGz4iWNDBvK
|
3578 |
+
PZMMGK7fxbz9vIK6aADXFjJxn2W1EdpoWdCmV2Qbyf6Y5fWlZerh2+70s52zjuqHrhbSHqB8fGk/
|
3579 |
+
KRaFAVOnbPFgq92i/CVH1DLREt33SBLg/Jyid5jpiZm4+DjxjAbCeiM2bZudzTDIxzQXHrt9Qsir
|
3580 |
+
5xUW9nO1AgMBAAGjggHqMIIB5jAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3581 |
+
HQ4EFgQUGCqiyNR6P3utBIu9b54QRhN4cZ0wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3582 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3583 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3584 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3585 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3586 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3587 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3588 |
+
MC8GA1UdEQQoMCaCD21haWwuZ29vZ2xlLmNvbYITd3d3Lm1haWwuZ29vZ2xlLmNvbTANBgkqhkiG
|
3589 |
+
9w0BAQUFAAOCAQEAZwYICifFk24C8t4XP9DTG3z/tc16x3fHvt8SyhnesBNXDAORxHlSz3+3XlUg
|
3590 |
+
hEnd9dApLw4E2lmeDhOf9MAym/+hESQql6PyPz0qa6itjBl1lQ4dJf1PxHoVwx3HE0DIDb6XYHKm
|
3591 |
+
/iW+j+zVpobDIVxZUtlqC1yfS961+ezi9MXMYlN2iWXkKdq3v5bgYI0NtwlV1kBVHcHyliF1r4mG
|
3592 |
+
H12BlykoHinXlsEgAzJ7ADtqNxdao7MabzI7bvGjXaurzCrLMAwfNSOLaURc6qwoYO2ra2Oe9pK8
|
3593 |
+
vZpaJkzFmLgOGT78BTHjFtn9kAUDhsZXAR9/eKDPM2qqZmsi0KdJIw==
|
3594 |
+
-----END CERTIFICATE-----
|
3595 |
+
|
3596 |
+
Bogus Google
|
3597 |
+
============
|
3598 |
+
-----BEGIN CERTIFICATE-----
|
3599 |
+
MIIF5DCCBMygAwIBAgIRAPXIavNhYvE6ZPVPbclYfAYwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3600 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3601 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3602 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3603 |
+
NTk1OVowgd4xCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQ
|
3604 |
+
MA4GA1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoTC0dvb2ds
|
3605 |
+
ZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0ZWQgYnkgR1RJIEdyb3Vw
|
3606 |
+
IENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNTTDEXMBUGA1UEAxMOd3d3Lmdvb2dsZS5j
|
3607 |
+
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwc/DyBO7CokbKNCqqu2Aj0RF2Hx86
|
3608 |
+
0GWDTppFqENwhXbwH4cAAh9uOxcXxLXpGUaikiWNYiq0YzAfuYX4NeEWWnZJzFBIUzlZidaEAvua
|
3609 |
+
7BvHUdV2lZDUOiq4pt4CTQb7ze2lRkFfVXTl7H5A3FCcteQ1XR5oIPjp3qNqKL9B0qGz4iWNDBvK
|
3610 |
+
PZMMGK7fxbz9vIK6aADXFjJxn2W1EdpoWdCmV2Qbyf6Y5fWlZerh2+70s52zjuqHrhbSHqB8fGk/
|
3611 |
+
KRaFAVOnbPFgq92i/CVH1DLREt33SBLg/Jyid5jpiZm4+DjxjAbCeiM2bZudzTDIxzQXHrt9Qsir
|
3612 |
+
5xUW9nO1AgMBAAGjggHgMIIB3DAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3613 |
+
HQ4EFgQUGCqiyNR6P3utBIu9b54QRhN4cZ0wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3614 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3615 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3616 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3617 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3618 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3619 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3620 |
+
MCUGA1UdEQQeMByCDnd3dy5nb29nbGUuY29tggpnb29nbGUuY29tMA0GCSqGSIb3DQEBBQUAA4IB
|
3621 |
+
AQBxwJk/Xva9M/+eFsuov91w+dJTOzauyRfIrl5N3WL3t9M+d6P+wHsytcmUBVJQ8l89eYRJT11s
|
3622 |
+
sNdZvdRsiPr8xWWG6yhSokL2fLxqxwcuJdGQYiDGjVHCLEU5TgPa9xjozAo62UXYbG40i2KcThX5
|
3623 |
+
Q+7ll8A/rTUTxSsGx0H94vd+Ra2b0eFm7fh6S5Q5ei/r6D9D2DXWVvp0523m7axlhP7QTQYS3tpZ
|
3624 |
+
ADwJXM+IS+g9tBUhksxtplHijpfx9IJGy8RTXtpcnWWSAWWJAOW2mf8mQPEvGTEIGrFnVYYNrjUz
|
3625 |
+
hryXSJLXlmD4zvyW64fEc8yUm1hb83qkJxPWT/Rp
|
3626 |
+
-----END CERTIFICATE-----
|
3627 |
+
|
3628 |
+
Bogus Skype
|
3629 |
+
===========
|
3630 |
+
-----BEGIN CERTIFICATE-----
|
3631 |
+
MIIF7zCCBNegAwIBAgIRAOkCi5V45BXcGnEKK4gVREcwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3632 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3633 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3634 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3635 |
+
NTk1OVowgd8xCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQ
|
3636 |
+
MA4GA1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoTC0dvb2ds
|
3637 |
+
ZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0ZWQgYnkgR1RJIEdyb3Vw
|
3638 |
+
IENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNTTDEYMBYGA1UEAxMPbG9naW4uc2t5cGUu
|
3639 |
+
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsHiZhg6icyPUWsNJ67E2jHzKhK48
|
3640 |
+
rziIKJmNLVgTsZd4PlIgZ6xbc5hsMlXJcNHZqhXoLiaFgbxW5LyAY9tO1/UCvlFjHjzb39cAXVq5
|
3641 |
+
5Xtq6jggsju27nVUhPmmyjhw3b+w/6WFXbRB/t092SrhMEMamHmToF/gZ2yV+j56rnF7422IQj8l
|
3642 |
+
1O6+aGisraxg4CCjOYO5Wyijk22hvXYK4+uuhycOVI+0SAyaVPRdjjdQ3F6ki2tL3KbzNL53WSKI
|
3643 |
+
/xkrbXZkc9oMhwcrmjc60OKM9jYya5p5zNI7k28aTWzmwZ1ArC10w77qXHNlASmxKr9wWcHOxsOi
|
3644 |
+
yEVfumc9DwIDAQABo4IB6jCCAeYwHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0UwHQYD
|
3645 |
+
VR0OBBYEFNWOWlETtCkNMbYcjT5RUTEKM6qBMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAA
|
3646 |
+
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgED
|
3647 |
+
BDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzB7BgNVHR8EdDBy
|
3648 |
+
MDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
|
3649 |
+
bDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3650 |
+
MHEGCCsGAQUFBwEBBGUwYzA7BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVRO
|
3651 |
+
QWRkVHJ1c3RTZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNv
|
3652 |
+
bTAvBgNVHREEKDAmgg9sb2dpbi5za3lwZS5jb22CE3d3dy5sb2dpbi5za3lwZS5jb20wDQYJKoZI
|
3653 |
+
hvcNAQEFBQADggEBAAjygXWRu84SBBjCTVr7RpAKVET08t0HgfAfpnpvn8+4DixPnMSa9aj2uqTJ
|
3654 |
+
el2x4lrKPPpgqGg+y7ot4s3WtuSSPGmtV+qoLzgQhHLlaHHtvutuGO9jer7nJP/AY/1YO0yBktgp
|
3655 |
+
q441XdfTCWuF09VzBUTi5buDUxDL8s+3buFpt6GSZMXPzYK7NqA4rdck31P8P2K3t9XHV+OTMXCO
|
3656 |
+
JImGymMrObpd2Wpg7KFOiv5T+F6S3y9cJhdtA30CDw+qQ2dtsGK/flPdzOx4c5XlpfYAowT9PwQq
|
3657 |
+
s5jFtwMc28lQq7AFHR6+VrTPPkITlJ755wGBpXhvDHp2rAWG7KzCEaw=
|
3658 |
+
-----END CERTIFICATE-----
|
3659 |
+
|
3660 |
+
Bogus Yahoo 1
|
3661 |
+
=============
|
3662 |
+
-----BEGIN CERTIFICATE-----
|
3663 |
+
MIIF7zCCBNegAwIBAgIRANdVj9r18RBbshMoK3B3KaMwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3664 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3665 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3666 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3667 |
+
NTk1OVowgd8xCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQ
|
3668 |
+
MA4GA1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoTC0dvb2ds
|
3669 |
+
ZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0ZWQgYnkgR1RJIEdyb3Vw
|
3670 |
+
IENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNTTDEYMBYGA1UEAxMPbG9naW4ueWFob28u
|
3671 |
+
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoaQFPe2FRZOKGE3GAwBX4kB38Bzr
|
3672 |
+
0BnfIl0If9EHPEGJRhejCfr8+KkE0ZaPq9dPPPmtGKl0gcRXCjomFs5iPrw/bCHuk43LDaAfmpbQ
|
3673 |
+
j631k5OC7nIMoXUVo3uEVrit/1IRcYS8OjALfpio4ag/N1LQ8XxvkNhFCqw5cmph1bvDjPnCzN/9
|
3674 |
+
OnG5r7zcOtwMtrHS0Ym7Qbby3lfVFd/8/eIxxd/KwdiPLL/wDltx4DRxw8VNfXrU+u0wSy/qti6e
|
3675 |
+
kzziOvhCohru3N/ND6n2eYQajmwCtoblv1FqZvjznNNZDHulmXjNfJn6xpZH2DLUdHYOd0sgdKS3
|
3676 |
+
iXWSSrRbVQIDAQABo4IB6jCCAeYwHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0UwHQYD
|
3677 |
+
VR0OBBYEFIZJRfwzGTPUBO0nYe7oAckMfy9+MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAA
|
3678 |
+
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgED
|
3679 |
+
BDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzB7BgNVHR8EdDBy
|
3680 |
+
MDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
|
3681 |
+
bDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3682 |
+
MHEGCCsGAQUFBwEBBGUwYzA7BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVRO
|
3683 |
+
QWRkVHJ1c3RTZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNv
|
3684 |
+
bTAvBgNVHREEKDAmgg9sb2dpbi55YWhvby5jb22CE3d3dy5sb2dpbi55YWhvby5jb20wDQYJKoZI
|
3685 |
+
hvcNAQEFBQADggEBAD1XyUgkXO5kgfWuvlUpFv8qL4Tt2fijA8gwZrvI1IEtIfcI96yWQppBdXq6
|
3686 |
+
XRAjy5JCYfqK2m1lNBnlqdYtE3jXgUSSqW6AYxXL/jUfAtGKFLCozJQgO6ga8F02UNsNrulk5PaN
|
3687 |
+
aX0wyBQXAErlpjX7fQ0inXl2Uiy8lwaImhX0c+bx9ZilzQdEkbinaGdF0nIRYOJxt1BV4oqpDdaS
|
3688 |
+
7gQqizCgogVGNG2SxjuqTaDQqwEZCjK36OPP8dKXSXuspJf38FeuY3eaf5baTf2+3Ac24yW9iXmO
|
3689 |
+
KRITi4gH+2vbpM2zLSfp1Mpg14VT+3TGXDWMcB/5sreSJyDHlNVnFDA=
|
3690 |
+
-----END CERTIFICATE-----
|
3691 |
+
|
3692 |
+
Bogus Yahoo 2
|
3693 |
+
=============
|
3694 |
+
-----BEGIN CERTIFICATE-----
|
3695 |
+
MIIF2TCCBMGgAwIBAgIQOSpDTw4H3x+KowXeNODCKTANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
3696 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
3697 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
3698 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1
|
3699 |
+
OTU5WjCB3zELMAkGA1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAw
|
3700 |
+
DgYDVQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChMLR29vZ2xl
|
3701 |
+
IEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3RlZCBieSBHVEkgR3JvdXAg
|
3702 |
+
Q29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NMMRgwFgYDVQQDEw9sb2dpbi55YWhvby5j
|
3703 |
+
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChpAU97YVFk4oYTcYDAFfiQHfwHOvQ
|
3704 |
+
Gd8iXQh/0Qc8QYlGF6MJ+vz4qQTRlo+r1088+a0YqXSBxFcKOiYWzmI+vD9sIe6TjcsNoB+altCP
|
3705 |
+
rfWTk4LucgyhdRWje4RWuK3/UhFxhLw6MAt+mKjhqD83UtDxfG+Q2EUKrDlyamHVu8OM+cLM3/06
|
3706 |
+
cbmvvNw63Ay2sdLRibtBtvLeV9UV3/z94jHF38rB2I8sv/AOW3HgNHHDxU19etT67TBLL+q2Lp6T
|
3707 |
+
POI6+EKiGu7c380PqfZ5hBqObAK2huW/UWpm+POc01kMe6WZeM18mfrGlkfYMtR0dg53SyB0pLeJ
|
3708 |
+
dZJKtFtVAgMBAAGjggHVMIIB0TAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3709 |
+
HQ4EFgQUhklF/DMZM9QE7Sdh7ugByQx/L34wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3710 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3711 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3712 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3713 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3714 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3715 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3716 |
+
MBoGA1UdEQQTMBGCD2xvZ2luLnlhaG9vLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAV2Lhd+v8H7+I
|
3717 |
+
U69Y09TWbWcwF0C+4B9k3ocVzOCkVqnRn/kB/gKxseriX+5xFjH5CNXC15qbslo416l/6YdrMfkL
|
3718 |
+
rNn9UHHg24KSD4GcjXfp6y7q1CNBh+wtsnizjrFn0u5xAwgSmbMCKW/ei97BqQMKWjMcPREDxkgM
|
3719 |
+
mJwVLtmmhVLnBYquMCPr7ShsYOktf49Hiy/Q3Oa7D35f8kiBjlAEY7FRgHWaqbYQHBBfbxhv4A6W
|
3720 |
+
Rc7u8bUg2+/absiV4/ZF/cr8pV9JbQYe0t5hPRV9N+UcNY4Gwmv3tKgoLDHLqrSnl0+divavfje5
|
3721 |
+
ez3fkmaLj06dxjbnXKarEg/Wzw==
|
3722 |
+
-----END CERTIFICATE-----
|
3723 |
+
|
3724 |
+
Bogus Yahoo 3
|
3725 |
+
=============
|
3726 |
+
-----BEGIN CERTIFICATE-----
|
3727 |
+
MIIF2TCCBMGgAwIBAgIQPnXO1GtpMCEhiDCuhqgqcTANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
3728 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
3729 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
3730 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1
|
3731 |
+
OTU5WjCB3zELMAkGA1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAw
|
3732 |
+
DgYDVQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChMLR29vZ2xl
|
3733 |
+
IEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3RlZCBieSBHVEkgR3JvdXAg
|
3734 |
+
Q29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NMMRgwFgYDVQQDEw9sb2dpbi55YWhvby5j
|
3735 |
+
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChpAU97YVFk4oYTcYDAFfiQHfwHOvQ
|
3736 |
+
Gd8iXQh/0Qc8QYlGF6MJ+vz4qQTRlo+r1088+a0YqXSBxFcKOiYWzmI+vD9sIe6TjcsNoB+altCP
|
3737 |
+
rfWTk4LucgyhdRWje4RWuK3/UhFxhLw6MAt+mKjhqD83UtDxfG+Q2EUKrDlyamHVu8OM+cLM3/06
|
3738 |
+
cbmvvNw63Ay2sdLRibtBtvLeV9UV3/z94jHF38rB2I8sv/AOW3HgNHHDxU19etT67TBLL+q2Lp6T
|
3739 |
+
POI6+EKiGu7c380PqfZ5hBqObAK2huW/UWpm+POc01kMe6WZeM18mfrGlkfYMtR0dg53SyB0pLeJ
|
3740 |
+
dZJKtFtVAgMBAAGjggHVMIIB0TAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3741 |
+
HQ4EFgQUhklF/DMZM9QE7Sdh7ugByQx/L34wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3742 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3743 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3744 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3745 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3746 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3747 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3748 |
+
MBoGA1UdEQQTMBGCD2xvZ2luLnlhaG9vLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAU2mYjihOnCtb
|
3749 |
+
Hcxrdyg9u/qlTn5WKaTqEOL05i0G0YTbI86X82i2DzreFQskHZHjbC4wt+lwsMNGgPDTsVG/T9Z4
|
3750 |
+
oPysxs8xBGPiNFUFSj32MLrzM+W60pbz1bG2k4kapGi+fu1jtBpIwFPko/A5DDKSx0MNGnHt0EaT
|
3751 |
+
v5NibDNLzTYNaV67bJaZIWnES2dy22xquPdo7cWPrWNllQpM4PkPfjc9qtSTumcJw6WkDQNabdUL
|
3752 |
+
/vBAFLT2uGl8bcIyS5+1GudGrkxaK6p6XpBXlfrbZgIgHmppZhWcwrb1vFC1/UXHH2i0R1msxBso
|
3753 |
+
k05SUxIDWEtxg59m5qx5SP7+Rw==
|
3754 |
+
-----END CERTIFICATE-----
|
3755 |
+
|
3756 |
+
Bogus live.com
|
3757 |
+
==============
|
3758 |
+
-----BEGIN CERTIFICATE-----
|
3759 |
+
MIIF7DCCBNSgAwIBAgIRALC3Ez7Qlvm1b66RyHS9OsAwDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNV
|
3760 |
+
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
3761 |
+
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8w
|
3762 |
+
HQYDVQQDExZVVE4tVVNFUkZpcnN0LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIz
|
3763 |
+
NTk1OVowgd4xCzAJBgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQ
|
3764 |
+
MA4GA1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoTC0dvb2ds
|
3765 |
+
ZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0ZWQgYnkgR1RJIEdyb3Vw
|
3766 |
+
IENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNTTDEXMBUGA1UEAxMObG9naW4ubGl2ZS5j
|
3767 |
+
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDz/Csv7+GtWfBCPMLxgr8sQZPR9pgz
|
3768 |
+
lUy8YvGVWAi26Xt3SLDT3Bc/vG7m7B7sjRf+HCTGPmc9kpWiMMCnVyDPcIiXSgWTeZNCly8+/8QU
|
3769 |
+
FCiiEza0+O6+Hbx4XWGTX+uI19HkK5rNWOIHRZ9PuLlAajMsWyEDWkqU8nqXWRuotULYgwCqNMyn
|
3770 |
+
dtBHA18FrzvhuaE0JbdsX5owhJjCwtfyuEJKEFW9+lOBXY1oZkUsUn7lxATDVOfDOdp6SsW5mIIg
|
3771 |
+
4SxgV7+68kYAvF863OMzl/hKmLnsM08tYGwVkqaBSgvp7HZwNDEXcOZwS46L03XLeEmrZpuGn4+p
|
3772 |
+
xAHoyhvnAgMBAAGjggHoMIIB5DAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3773 |
+
HQ4EFgQU1GT2qeilfte/Y1IDg1PbxUGN6oAwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3774 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3775 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3776 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3777 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3778 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3779 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3780 |
+
MC0GA1UdEQQmMCSCDmxvZ2luLmxpdmUuY29tghJ3d3cubG9naW4ubGl2ZS5jb20wDQYJKoZIhvcN
|
3781 |
+
AQEFBQADggEBAFTjpJok0vMdQq0b8B6r+9rVqunPWrMeV3sx8m5XSzGvM7u2DRXHXlkBzkS1t78J
|
3782 |
+
ydXcaYTpxRq38D7UwCS9KV+06dZY60URiTQ00xHrNM4qTwA99nLvaWbAn5qsfnBQrFVH2r5DW+yL
|
3783 |
+
yMUjhMmftlIIz5EbL4Bp5jQz5rOfpOUNmhX5V/wLqUEL9f9YQZIiJ2YSBscq2Fmnxt9EEk/AqH+n
|
3784 |
+
QcjIaf+6BS6XrTvQ6/MVbX4b5brdNL4iEexomDOBAmoLE1V5MXVOOsi2E72XbzcKCy2IDt5nkMKz
|
3785 |
+
yiDKmlH0ZD7b9C5F8sdHF6j0+pBaf4CmgqzkbIFGu1KFICT4gOo=
|
3786 |
+
-----END CERTIFICATE-----
|
3787 |
+
|
3788 |
+
Bogus kuix.de
|
3789 |
+
=============
|
3790 |
+
-----BEGIN CERTIFICATE-----
|
3791 |
+
MIIFbDCCBFSgAwIBAgIQcgMhBcUMCFc9jqUwTv7osDANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
3792 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
3793 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
3794 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNMTEwMzE3MDAwMDAwWhcNMTEwNDE2MjM1
|
3795 |
+
OTU5WjCB8TELMAkGA1UEBhMCREUxDjAMBgNVBBETBTEyMzQ1MRMwEQYDVQQIEwpUZXN0IFN0YXRl
|
3796 |
+
MRIwEAYDVQQHEwlUZXN0IENpdHkxFDASBgNVBAkTC1Rlc3QgU3RyZWV0MRMwEQYDVQQKEwpLYWkg
|
3797 |
+
RW5nZXJ0MSIwIAYDVQQLExlGb3IgVGVzdGluZyBQdXJwb3NlcyBPbmx5MS0wKwYDVQQLEyRURVNU
|
3798 |
+
IFVTRSBPTkxZIC0gTk8gV0FSUkFOVFkgQVRUQUNIRUQxGTAXBgNVBAsTEENvbW9kbyBUcmlhbCBT
|
3799 |
+
U0wxEDAOBgNVBAMTB2t1aXguZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALiqjvWXRwdf
|
3800 |
+
5Xh2bpNrjt9LPNuZL3FTKW6l8yRPSCUjQAHsChUL7G7IniYjZvvp29gohSFPHt97TOVjwQuyYlaU
|
3801 |
+
U8u/nKFN2YfFaUg8sb+laFIhHXrclE9EbkclHZ+cktI3HflbW7LdPhjX84dmraP0zo/Rb/C5tO+x
|
3802 |
+
6hVjCs6BAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNV
|
3803 |
+
HQ4EFgQUQI85JpxMhiOZxlEJpubywf6n9rcwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw
|
3804 |
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME
|
3805 |
+
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIw
|
3806 |
+
OKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js
|
3807 |
+
MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww
|
3808 |
+
cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5B
|
3809 |
+
ZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
|
3810 |
+
MB8GA1UdEQQYMBaCB2t1aXguZGWCC3d3dy5rdWl4LmRlMA0GCSqGSIb3DQEBBQUAA4IBAQCOYR4m
|
3811 |
+
HqLZGdDw1L2J+eqSEXlqXnt8n345cwlWUeaGVMdtRnZSymqoNMBgPgPOs8lIl9GfpqFqD/530R4Q
|
3812 |
+
s1eAqQYmhKb7ejcTzoTMd3kJLuJEvh+sd253RkHbsLJpkXTRgJZhMQwvCs+10NwILev2dYLeii66
|
3813 |
+
PQeQYDlWg+GCyiOs3+PPTXBXwbi3k5rt3IveSqBVKAKrQwxUl2gYous54bn8v3OAZDMSe4dgAuc+
|
3814 |
+
cMmHyqk2PAXxBl5xCg4KNpmwh+dpWrGgME59YVjLxqiWgF59wSr/m0pK6ylnig9v5hntgs+BV+Ek
|
3815 |
+
raLR+toUl7BsfEfG15QRIezWWtLdj3+R
|
3816 |
+
-----END CERTIFICATE-----
|
3817 |
+
|
3818 |
+
Go Daddy Root Certificate Authority - G2
|
3819 |
+
========================================
|
3820 |
+
-----BEGIN CERTIFICATE-----
|
3821 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3822 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
3823 |
+
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
3824 |
+
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
3825 |
+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
3826 |
+
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
3827 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
3828 |
+
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
3829 |
+
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
3830 |
+
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
3831 |
+
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
3832 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
3833 |
+
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
3834 |
+
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
3835 |
+
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
3836 |
+
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
3837 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
3838 |
+
-----END CERTIFICATE-----
|
3839 |
+
|
3840 |
+
Starfield Root Certificate Authority - G2
|
3841 |
+
=========================================
|
3842 |
+
-----BEGIN CERTIFICATE-----
|
3843 |
+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3844 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3845 |
+
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
3846 |
+
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
3847 |
+
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
3848 |
+
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
3849 |
+
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
3850 |
+
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
3851 |
+
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
3852 |
+
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
3853 |
+
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
3854 |
+
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3855 |
+
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
3856 |
+
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
3857 |
+
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
3858 |
+
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
3859 |
+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
3860 |
+
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
3861 |
+
-----END CERTIFICATE-----
|
3862 |
+
|
3863 |
+
Starfield Services Root Certificate Authority - G2
|
3864 |
+
==================================================
|
3865 |
+
-----BEGIN CERTIFICATE-----
|
3866 |
+
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3867 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3868 |
+
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
3869 |
+
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
3870 |
+
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
3871 |
+
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
3872 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3873 |
+
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
3874 |
+
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
3875 |
+
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
3876 |
+
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
3877 |
+
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
3878 |
+
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
3879 |
+
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
3880 |
+
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
3881 |
+
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
3882 |
+
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
3883 |
+
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
3884 |
+
-----END CERTIFICATE-----
|
3885 |
+
|
3886 |
+
AffirmTrust Commercial
|
3887 |
+
======================
|
3888 |
+
-----BEGIN CERTIFICATE-----
|
3889 |
+
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3890 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
3891 |
+
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3892 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
3893 |
+
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
3894 |
+
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
3895 |
+
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
3896 |
+
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
3897 |
+
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
3898 |
+
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3899 |
+
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
3900 |
+
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
3901 |
+
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
3902 |
+
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
3903 |
+
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
3904 |
+
-----END CERTIFICATE-----
|
3905 |
+
|
3906 |
+
AffirmTrust Networking
|
3907 |
+
======================
|
3908 |
+
-----BEGIN CERTIFICATE-----
|
3909 |
+
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3910 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
3911 |
+
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3912 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
3913 |
+
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
3914 |
+
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
3915 |
+
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
3916 |
+
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
3917 |
+
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
3918 |
+
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3919 |
+
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
3920 |
+
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
3921 |
+
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
3922 |
+
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
3923 |
+
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
3924 |
+
-----END CERTIFICATE-----
|
3925 |
+
|
3926 |
+
AffirmTrust Premium
|
3927 |
+
===================
|
3928 |
+
-----BEGIN CERTIFICATE-----
|
3929 |
+
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
|
3930 |
+
BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
|
3931 |
+
OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
|
3932 |
+
dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
3933 |
+
MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
|
3934 |
+
BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
|
3935 |
+
5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
|
3936 |
+
+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
|
3937 |
+
GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
|
3938 |
+
p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
|
3939 |
+
S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
|
3940 |
+
6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
|
3941 |
+
/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
|
3942 |
+
+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
|
3943 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
|
3944 |
+
MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
|
3945 |
+
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
|
3946 |
+
6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
|
3947 |
+
L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
|
3948 |
+
+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
|
3949 |
+
BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
|
3950 |
+
IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
|
3951 |
+
g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
|
3952 |
+
zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
|
3953 |
+
-----END CERTIFICATE-----
|
3954 |
+
|
3955 |
+
AffirmTrust Premium ECC
|
3956 |
+
=======================
|
3957 |
+
-----BEGIN CERTIFICATE-----
|
3958 |
+
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
3959 |
+
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
3960 |
+
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
3961 |
+
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
3962 |
+
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
3963 |
+
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
3964 |
+
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
3965 |
+
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
3966 |
+
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
3967 |
+
eQ==
|
3968 |
+
-----END CERTIFICATE-----
|
3969 |
+
|
3970 |
+
Certum Trusted Network CA
|
3971 |
+
=========================
|
3972 |
+
-----BEGIN CERTIFICATE-----
|
3973 |
+
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
3974 |
+
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
3975 |
+
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
3976 |
+
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
3977 |
+
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3978 |
+
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
3979 |
+
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
3980 |
+
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
3981 |
+
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
3982 |
+
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
3983 |
+
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
3984 |
+
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
3985 |
+
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
3986 |
+
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
3987 |
+
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
3988 |
+
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
3989 |
+
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
3990 |
+
-----END CERTIFICATE-----
|
app/libs/aws/lib/requestcore/requestcore.class.php
CHANGED
@@ -1,997 +1,1029 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Handles all HTTP requests using cURL and manages the responses.
|
4 |
-
*
|
5 |
-
* @version 2011.
|
6 |
-
* @copyright 2006-2011 Ryan Parman
|
7 |
-
* @copyright 2006-2010 Foleeo Inc.
|
8 |
-
* @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
|
9 |
-
* @copyright 2008-2011 Contributors
|
10 |
-
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
-
*/
|
12 |
-
class RequestCore
|
13 |
-
{
|
14 |
-
/**
|
15 |
-
* The URL being requested.
|
16 |
-
*/
|
17 |
-
public $request_url;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* The headers being sent in the request.
|
21 |
-
*/
|
22 |
-
public $request_headers;
|
23 |
-
|
24 |
-
/**
|
25 |
-
* The body being sent in the request.
|
26 |
-
*/
|
27 |
-
public $request_body;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* The response returned by the request.
|
31 |
-
*/
|
32 |
-
public $response;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* The headers returned by the request.
|
36 |
-
*/
|
37 |
-
public $response_headers;
|
38 |
-
|
39 |
-
/**
|
40 |
-
* The body returned by the request.
|
41 |
-
*/
|
42 |
-
public $response_body;
|
43 |
-
|
44 |
-
/**
|
45 |
-
* The HTTP status code returned by the request.
|
46 |
-
*/
|
47 |
-
public $response_code;
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Additional response data.
|
51 |
-
*/
|
52 |
-
public $response_info;
|
53 |
-
|
54 |
-
/**
|
55 |
-
* The handle for the cURL object.
|
56 |
-
*/
|
57 |
-
public $curl_handle;
|
58 |
-
|
59 |
-
/**
|
60 |
-
* The method by which the request is being made.
|
61 |
-
*/
|
62 |
-
public $method;
|
63 |
-
|
64 |
-
/**
|
65 |
-
* Stores the proxy settings to use for the request.
|
66 |
-
*/
|
67 |
-
public $proxy = null;
|
68 |
-
|
69 |
-
/**
|
70 |
-
* The username to use for the request.
|
71 |
-
*/
|
72 |
-
public $username = null;
|
73 |
-
|
74 |
-
/**
|
75 |
-
* The password to use for the request.
|
76 |
-
*/
|
77 |
-
public $password = null;
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Custom CURLOPT settings.
|
81 |
-
*/
|
82 |
-
public $curlopts = null;
|
83 |
-
|
84 |
-
/**
|
85 |
-
* The state of debug mode.
|
86 |
-
*/
|
87 |
-
public $debug_mode = false;
|
88 |
-
|
89 |
-
/**
|
90 |
-
* The default class to use for HTTP Requests (defaults to <RequestCore>).
|
91 |
-
*/
|
92 |
-
public $request_class = 'RequestCore';
|
93 |
-
|
94 |
-
/**
|
95 |
-
* The default class to use for HTTP Responses (defaults to <ResponseCore>).
|
96 |
-
*/
|
97 |
-
public $response_class = 'ResponseCore';
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Default useragent string to use.
|
101 |
-
*/
|
102 |
-
public $useragent = 'RequestCore/1.4.
|
103 |
-
|
104 |
-
/**
|
105 |
-
* File to read from while streaming up.
|
106 |
-
*/
|
107 |
-
public $read_file = null;
|
108 |
-
|
109 |
-
/**
|
110 |
-
* The resource to read from while streaming up.
|
111 |
-
*/
|
112 |
-
public $read_stream = null;
|
113 |
-
|
114 |
-
/**
|
115 |
-
* The size of the stream to read from.
|
116 |
-
*/
|
117 |
-
public $read_stream_size = null;
|
118 |
-
|
119 |
-
/**
|
120 |
-
* The length already read from the stream.
|
121 |
-
*/
|
122 |
-
public $read_stream_read = 0;
|
123 |
-
|
124 |
-
/**
|
125 |
-
* File to write to while streaming down.
|
126 |
-
*/
|
127 |
-
public $write_file = null;
|
128 |
-
|
129 |
-
/**
|
130 |
-
* The resource to write to while streaming down.
|
131 |
-
*/
|
132 |
-
public $write_stream = null;
|
133 |
-
|
134 |
-
/**
|
135 |
-
* Stores the intended starting seek position.
|
136 |
-
*/
|
137 |
-
public $seek_position = null;
|
138 |
-
|
139 |
-
/**
|
140 |
-
* The
|
141 |
-
*/
|
142 |
-
public $
|
143 |
-
|
144 |
-
/**
|
145 |
-
* The
|
146 |
-
*/
|
147 |
-
public $
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
/**
|
164 |
-
*
|
165 |
-
*/
|
166 |
-
const
|
167 |
-
|
168 |
-
/**
|
169 |
-
*
|
170 |
-
*/
|
171 |
-
const
|
172 |
-
|
173 |
-
/**
|
174 |
-
*
|
175 |
-
*/
|
176 |
-
const
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
*
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
*
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
*
|
271 |
-
*
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
*
|
298 |
-
*
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
*
|
310 |
-
*
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
*
|
322 |
-
*
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
*
|
334 |
-
*
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
*
|
347 |
-
*
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
*
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
*
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
*
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
*
|
471 |
-
*
|
472 |
-
*
|
473 |
-
*
|
474 |
-
*
|
475 |
-
*
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
*
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
*
|
496 |
-
*
|
497 |
-
*
|
498 |
-
*
|
499 |
-
*
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
curl_setopt($curl_handle,
|
608 |
-
curl_setopt($curl_handle,
|
609 |
-
curl_setopt($curl_handle,
|
610 |
-
curl_setopt($curl_handle,
|
611 |
-
curl_setopt($curl_handle,
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
$
|
630 |
-
curl_setopt($curl_handle,
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
$this->
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
*
|
811 |
-
*
|
812 |
-
*
|
813 |
-
*
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
$
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
$
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
{
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
/**
|
951 |
-
*
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
/**
|
961 |
-
*
|
962 |
-
*
|
963 |
-
* @
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
/**
|
978 |
-
*
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles all HTTP requests using cURL and manages the responses.
|
4 |
+
*
|
5 |
+
* @version 2011.06.07
|
6 |
+
* @copyright 2006-2011 Ryan Parman
|
7 |
+
* @copyright 2006-2010 Foleeo Inc.
|
8 |
+
* @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
|
9 |
+
* @copyright 2008-2011 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
*/
|
12 |
+
class RequestCore
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* The URL being requested.
|
16 |
+
*/
|
17 |
+
public $request_url;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The headers being sent in the request.
|
21 |
+
*/
|
22 |
+
public $request_headers;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The body being sent in the request.
|
26 |
+
*/
|
27 |
+
public $request_body;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* The response returned by the request.
|
31 |
+
*/
|
32 |
+
public $response;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The headers returned by the request.
|
36 |
+
*/
|
37 |
+
public $response_headers;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* The body returned by the request.
|
41 |
+
*/
|
42 |
+
public $response_body;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* The HTTP status code returned by the request.
|
46 |
+
*/
|
47 |
+
public $response_code;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Additional response data.
|
51 |
+
*/
|
52 |
+
public $response_info;
|
53 |
+
|
54 |
+
/**
|
55 |
+
* The handle for the cURL object.
|
56 |
+
*/
|
57 |
+
public $curl_handle;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* The method by which the request is being made.
|
61 |
+
*/
|
62 |
+
public $method;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Stores the proxy settings to use for the request.
|
66 |
+
*/
|
67 |
+
public $proxy = null;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The username to use for the request.
|
71 |
+
*/
|
72 |
+
public $username = null;
|
73 |
+
|
74 |
+
/**
|
75 |
+
* The password to use for the request.
|
76 |
+
*/
|
77 |
+
public $password = null;
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Custom CURLOPT settings.
|
81 |
+
*/
|
82 |
+
public $curlopts = null;
|
83 |
+
|
84 |
+
/**
|
85 |
+
* The state of debug mode.
|
86 |
+
*/
|
87 |
+
public $debug_mode = false;
|
88 |
+
|
89 |
+
/**
|
90 |
+
* The default class to use for HTTP Requests (defaults to <RequestCore>).
|
91 |
+
*/
|
92 |
+
public $request_class = 'RequestCore';
|
93 |
+
|
94 |
+
/**
|
95 |
+
* The default class to use for HTTP Responses (defaults to <ResponseCore>).
|
96 |
+
*/
|
97 |
+
public $response_class = 'ResponseCore';
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Default useragent string to use.
|
101 |
+
*/
|
102 |
+
public $useragent = 'RequestCore/1.4.3';
|
103 |
+
|
104 |
+
/**
|
105 |
+
* File to read from while streaming up.
|
106 |
+
*/
|
107 |
+
public $read_file = null;
|
108 |
+
|
109 |
+
/**
|
110 |
+
* The resource to read from while streaming up.
|
111 |
+
*/
|
112 |
+
public $read_stream = null;
|
113 |
+
|
114 |
+
/**
|
115 |
+
* The size of the stream to read from.
|
116 |
+
*/
|
117 |
+
public $read_stream_size = null;
|
118 |
+
|
119 |
+
/**
|
120 |
+
* The length already read from the stream.
|
121 |
+
*/
|
122 |
+
public $read_stream_read = 0;
|
123 |
+
|
124 |
+
/**
|
125 |
+
* File to write to while streaming down.
|
126 |
+
*/
|
127 |
+
public $write_file = null;
|
128 |
+
|
129 |
+
/**
|
130 |
+
* The resource to write to while streaming down.
|
131 |
+
*/
|
132 |
+
public $write_stream = null;
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Stores the intended starting seek position.
|
136 |
+
*/
|
137 |
+
public $seek_position = null;
|
138 |
+
|
139 |
+
/**
|
140 |
+
* The location of the cacert.pem file to use.
|
141 |
+
*/
|
142 |
+
public $cacert_location = false;
|
143 |
+
|
144 |
+
/**
|
145 |
+
* The state of SSL certificate verification.
|
146 |
+
*/
|
147 |
+
public $ssl_verification = true;
|
148 |
+
|
149 |
+
/**
|
150 |
+
* The user-defined callback function to call when a stream is read from.
|
151 |
+
*/
|
152 |
+
public $registered_streaming_read_callback = null;
|
153 |
+
|
154 |
+
/**
|
155 |
+
* The user-defined callback function to call when a stream is written to.
|
156 |
+
*/
|
157 |
+
public $registered_streaming_write_callback = null;
|
158 |
+
|
159 |
+
|
160 |
+
/*%******************************************************************************************%*/
|
161 |
+
// CONSTANTS
|
162 |
+
|
163 |
+
/**
|
164 |
+
* GET HTTP Method
|
165 |
+
*/
|
166 |
+
const HTTP_GET = 'GET';
|
167 |
+
|
168 |
+
/**
|
169 |
+
* POST HTTP Method
|
170 |
+
*/
|
171 |
+
const HTTP_POST = 'POST';
|
172 |
+
|
173 |
+
/**
|
174 |
+
* PUT HTTP Method
|
175 |
+
*/
|
176 |
+
const HTTP_PUT = 'PUT';
|
177 |
+
|
178 |
+
/**
|
179 |
+
* DELETE HTTP Method
|
180 |
+
*/
|
181 |
+
const HTTP_DELETE = 'DELETE';
|
182 |
+
|
183 |
+
/**
|
184 |
+
* HEAD HTTP Method
|
185 |
+
*/
|
186 |
+
const HTTP_HEAD = 'HEAD';
|
187 |
+
|
188 |
+
|
189 |
+
/*%******************************************************************************************%*/
|
190 |
+
// CONSTRUCTOR/DESTRUCTOR
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Constructs a new instance of this class.
|
194 |
+
*
|
195 |
+
* @param string $url (Optional) The URL to request or service endpoint to query.
|
196 |
+
* @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
197 |
+
* @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
|
198 |
+
* @return $this A reference to the current instance.
|
199 |
+
*/
|
200 |
+
public function __construct($url = null, $proxy = null, $helpers = null)
|
201 |
+
{
|
202 |
+
// Set some default values.
|
203 |
+
$this->request_url = $url;
|
204 |
+
$this->method = self::HTTP_GET;
|
205 |
+
$this->request_headers = array();
|
206 |
+
$this->request_body = '';
|
207 |
+
|
208 |
+
// Set a new Request class if one was set.
|
209 |
+
if (isset($helpers['request']) && !empty($helpers['request']))
|
210 |
+
{
|
211 |
+
$this->request_class = $helpers['request'];
|
212 |
+
}
|
213 |
+
|
214 |
+
// Set a new Request class if one was set.
|
215 |
+
if (isset($helpers['response']) && !empty($helpers['response']))
|
216 |
+
{
|
217 |
+
$this->response_class = $helpers['response'];
|
218 |
+
}
|
219 |
+
|
220 |
+
if ($proxy)
|
221 |
+
{
|
222 |
+
$this->set_proxy($proxy);
|
223 |
+
}
|
224 |
+
|
225 |
+
return $this;
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Destructs the instance. Closes opened file handles.
|
230 |
+
*
|
231 |
+
* @return $this A reference to the current instance.
|
232 |
+
*/
|
233 |
+
public function __destruct()
|
234 |
+
{
|
235 |
+
if (isset($this->read_file) && isset($this->read_stream))
|
236 |
+
{
|
237 |
+
fclose($this->read_stream);
|
238 |
+
}
|
239 |
+
|
240 |
+
if (isset($this->write_file) && isset($this->write_stream))
|
241 |
+
{
|
242 |
+
fclose($this->write_stream);
|
243 |
+
}
|
244 |
+
|
245 |
+
return $this;
|
246 |
+
}
|
247 |
+
|
248 |
+
|
249 |
+
/*%******************************************************************************************%*/
|
250 |
+
// REQUEST METHODS
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Sets the credentials to use for authentication.
|
254 |
+
*
|
255 |
+
* @param string $user (Required) The username to authenticate with.
|
256 |
+
* @param string $pass (Required) The password to authenticate with.
|
257 |
+
* @return $this A reference to the current instance.
|
258 |
+
*/
|
259 |
+
public function set_credentials($user, $pass)
|
260 |
+
{
|
261 |
+
$this->username = $user;
|
262 |
+
$this->password = $pass;
|
263 |
+
return $this;
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Adds a custom HTTP header to the cURL request.
|
268 |
+
*
|
269 |
+
* @param string $key (Required) The custom HTTP header to set.
|
270 |
+
* @param mixed $value (Required) The value to assign to the custom HTTP header.
|
271 |
+
* @return $this A reference to the current instance.
|
272 |
+
*/
|
273 |
+
public function add_header($key, $value)
|
274 |
+
{
|
275 |
+
$this->request_headers[$key] = $value;
|
276 |
+
return $this;
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Removes an HTTP header from the cURL request.
|
281 |
+
*
|
282 |
+
* @param string $key (Required) The custom HTTP header to set.
|
283 |
+
* @return $this A reference to the current instance.
|
284 |
+
*/
|
285 |
+
public function remove_header($key)
|
286 |
+
{
|
287 |
+
if (isset($this->request_headers[$key]))
|
288 |
+
{
|
289 |
+
unset($this->request_headers[$key]);
|
290 |
+
}
|
291 |
+
return $this;
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Set the method type for the request.
|
296 |
+
*
|
297 |
+
* @param string $method (Required) One of the following constants: <HTTP_GET>, <HTTP_POST>, <HTTP_PUT>, <HTTP_HEAD>, <HTTP_DELETE>.
|
298 |
+
* @return $this A reference to the current instance.
|
299 |
+
*/
|
300 |
+
public function set_method($method)
|
301 |
+
{
|
302 |
+
$this->method = strtoupper($method);
|
303 |
+
return $this;
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Sets a custom useragent string for the class.
|
308 |
+
*
|
309 |
+
* @param string $ua (Required) The useragent string to use.
|
310 |
+
* @return $this A reference to the current instance.
|
311 |
+
*/
|
312 |
+
public function set_useragent($ua)
|
313 |
+
{
|
314 |
+
$this->useragent = $ua;
|
315 |
+
return $this;
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Set the body to send in the request.
|
320 |
+
*
|
321 |
+
* @param string $body (Required) The textual content to send along in the body of the request.
|
322 |
+
* @return $this A reference to the current instance.
|
323 |
+
*/
|
324 |
+
public function set_body($body)
|
325 |
+
{
|
326 |
+
$this->request_body = $body;
|
327 |
+
return $this;
|
328 |
+
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Set the URL to make the request to.
|
332 |
+
*
|
333 |
+
* @param string $url (Required) The URL to make the request to.
|
334 |
+
* @return $this A reference to the current instance.
|
335 |
+
*/
|
336 |
+
public function set_request_url($url)
|
337 |
+
{
|
338 |
+
$this->request_url = $url;
|
339 |
+
return $this;
|
340 |
+
}
|
341 |
+
|
342 |
+
/**
|
343 |
+
* Set additional CURLOPT settings. These will merge with the default settings, and override if
|
344 |
+
* there is a duplicate.
|
345 |
+
*
|
346 |
+
* @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings.
|
347 |
+
* @return $this A reference to the current instance.
|
348 |
+
*/
|
349 |
+
public function set_curlopts($curlopts)
|
350 |
+
{
|
351 |
+
$this->curlopts = $curlopts;
|
352 |
+
return $this;
|
353 |
+
}
|
354 |
+
|
355 |
+
/**
|
356 |
+
* Sets the length in bytes to read from the stream while streaming up.
|
357 |
+
*
|
358 |
+
* @param integer $size (Required) The length in bytes to read from the stream.
|
359 |
+
* @return $this A reference to the current instance.
|
360 |
+
*/
|
361 |
+
public function set_read_stream_size($size)
|
362 |
+
{
|
363 |
+
$this->read_stream_size = $size;
|
364 |
+
|
365 |
+
return $this;
|
366 |
+
}
|
367 |
+
|
368 |
+
/**
|
369 |
+
* Sets the resource to read from while streaming up. Reads the stream from its current position until
|
370 |
+
* EOF or `$size` bytes have been read. If `$size` is not given it will be determined by <php:fstat()> and
|
371 |
+
* <php:ftell()>.
|
372 |
+
*
|
373 |
+
* @param resource $resource (Required) The readable resource to read from.
|
374 |
+
* @param integer $size (Optional) The size of the stream to read.
|
375 |
+
* @return $this A reference to the current instance.
|
376 |
+
*/
|
377 |
+
public function set_read_stream($resource, $size = null)
|
378 |
+
{
|
379 |
+
if (!isset($size) || $size < 0)
|
380 |
+
{
|
381 |
+
$stats = fstat($resource);
|
382 |
+
|
383 |
+
if ($stats && $stats['size'] >= 0)
|
384 |
+
{
|
385 |
+
$position = ftell($resource);
|
386 |
+
|
387 |
+
if ($position !== false && $position >= 0)
|
388 |
+
{
|
389 |
+
$size = $stats['size'] - $position;
|
390 |
+
}
|
391 |
+
}
|
392 |
+
}
|
393 |
+
|
394 |
+
$this->read_stream = $resource;
|
395 |
+
|
396 |
+
return $this->set_read_stream_size($size);
|
397 |
+
}
|
398 |
+
|
399 |
+
/**
|
400 |
+
* Sets the file to read from while streaming up.
|
401 |
+
*
|
402 |
+
* @param string $location (Required) The readable location to read from.
|
403 |
+
* @return $this A reference to the current instance.
|
404 |
+
*/
|
405 |
+
public function set_read_file($location)
|
406 |
+
{
|
407 |
+
$this->read_file = $location;
|
408 |
+
$read_file_handle = fopen($location, 'r');
|
409 |
+
|
410 |
+
return $this->set_read_stream($read_file_handle);
|
411 |
+
}
|
412 |
+
|
413 |
+
/**
|
414 |
+
* Sets the resource to write to while streaming down.
|
415 |
+
*
|
416 |
+
* @param resource $resource (Required) The writeable resource to write to.
|
417 |
+
* @return $this A reference to the current instance.
|
418 |
+
*/
|
419 |
+
public function set_write_stream($resource)
|
420 |
+
{
|
421 |
+
$this->write_stream = $resource;
|
422 |
+
|
423 |
+
return $this;
|
424 |
+
}
|
425 |
+
|
426 |
+
/**
|
427 |
+
* Sets the file to write to while streaming down.
|
428 |
+
*
|
429 |
+
* @param string $location (Required) The writeable location to write to.
|
430 |
+
* @return $this A reference to the current instance.
|
431 |
+
*/
|
432 |
+
public function set_write_file($location)
|
433 |
+
{
|
434 |
+
$this->write_file = $location;
|
435 |
+
$write_file_handle = fopen($location, 'w');
|
436 |
+
|
437 |
+
return $this->set_write_stream($write_file_handle);
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
* Set the proxy to use for making requests.
|
442 |
+
*
|
443 |
+
* @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
444 |
+
* @return $this A reference to the current instance.
|
445 |
+
*/
|
446 |
+
public function set_proxy($proxy)
|
447 |
+
{
|
448 |
+
$proxy = parse_url($proxy);
|
449 |
+
$proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null;
|
450 |
+
$proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null;
|
451 |
+
$proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null;
|
452 |
+
$this->proxy = $proxy;
|
453 |
+
return $this;
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Set the intended starting seek position.
|
458 |
+
*
|
459 |
+
* @param integer $position (Required) The byte-position of the stream to begin reading from.
|
460 |
+
* @return $this A reference to the current instance.
|
461 |
+
*/
|
462 |
+
public function set_seek_position($position)
|
463 |
+
{
|
464 |
+
$this->seek_position = isset($position) ? (integer) $position : null;
|
465 |
+
|
466 |
+
return $this;
|
467 |
+
}
|
468 |
+
|
469 |
+
/**
|
470 |
+
* Register a callback function to execute whenever a data stream is read from using
|
471 |
+
* <CFRequest::streaming_read_callback()>.
|
472 |
+
*
|
473 |
+
* The user-defined callback function should accept three arguments:
|
474 |
+
*
|
475 |
+
* <ul>
|
476 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
477 |
+
* <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
|
478 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
479 |
+
* </ul>
|
480 |
+
*
|
481 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
482 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
483 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
484 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
485 |
+
* @return $this A reference to the current instance.
|
486 |
+
*/
|
487 |
+
public function register_streaming_read_callback($callback)
|
488 |
+
{
|
489 |
+
$this->registered_streaming_read_callback = $callback;
|
490 |
+
|
491 |
+
return $this;
|
492 |
+
}
|
493 |
+
|
494 |
+
/**
|
495 |
+
* Register a callback function to execute whenever a data stream is written to using
|
496 |
+
* <CFRequest::streaming_write_callback()>.
|
497 |
+
*
|
498 |
+
* The user-defined callback function should accept two arguments:
|
499 |
+
*
|
500 |
+
* <ul>
|
501 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
502 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
503 |
+
* </ul>
|
504 |
+
*
|
505 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
506 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
507 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
508 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
509 |
+
* @return $this A reference to the current instance.
|
510 |
+
*/
|
511 |
+
public function register_streaming_write_callback($callback)
|
512 |
+
{
|
513 |
+
$this->registered_streaming_write_callback = $callback;
|
514 |
+
|
515 |
+
return $this;
|
516 |
+
}
|
517 |
+
|
518 |
+
|
519 |
+
/*%******************************************************************************************%*/
|
520 |
+
// PREPARE, SEND, AND PROCESS REQUEST
|
521 |
+
|
522 |
+
/**
|
523 |
+
* A callback function that is invoked by cURL for streaming up.
|
524 |
+
*
|
525 |
+
* @param resource $curl_handle (Required) The cURL handle for the request.
|
526 |
+
* @param resource $file_handle (Required) The open file handle resource.
|
527 |
+
* @param integer $length (Required) The maximum number of bytes to read.
|
528 |
+
* @return binary Binary data from a stream.
|
529 |
+
*/
|
530 |
+
public function streaming_read_callback($curl_handle, $file_handle, $length)
|
531 |
+
{
|
532 |
+
// Once we've sent as much as we're supposed to send...
|
533 |
+
if ($this->read_stream_read >= $this->read_stream_size)
|
534 |
+
{
|
535 |
+
// Send EOF
|
536 |
+
return '';
|
537 |
+
}
|
538 |
+
|
539 |
+
// If we're at the beginning of an upload and need to seek...
|
540 |
+
if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream))
|
541 |
+
{
|
542 |
+
if (fseek($this->read_stream, $this->seek_position) !== 0)
|
543 |
+
{
|
544 |
+
throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.');
|
545 |
+
}
|
546 |
+
}
|
547 |
+
|
548 |
+
$read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size
|
549 |
+
$this->read_stream_read += strlen($read);
|
550 |
+
|
551 |
+
$out = $read === false ? '' : $read;
|
552 |
+
|
553 |
+
// Execute callback function
|
554 |
+
if ($this->registered_streaming_read_callback)
|
555 |
+
{
|
556 |
+
call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out);
|
557 |
+
}
|
558 |
+
|
559 |
+
return $out;
|
560 |
+
}
|
561 |
+
|
562 |
+
/**
|
563 |
+
* A callback function that is invoked by cURL for streaming down.
|
564 |
+
*
|
565 |
+
* @param resource $curl_handle (Required) The cURL handle for the request.
|
566 |
+
* @param binary $data (Required) The data to write.
|
567 |
+
* @return integer The number of bytes written.
|
568 |
+
*/
|
569 |
+
public function streaming_write_callback($curl_handle, $data)
|
570 |
+
{
|
571 |
+
$length = strlen($data);
|
572 |
+
$written_total = 0;
|
573 |
+
$written_last = 0;
|
574 |
+
|
575 |
+
while ($written_total < $length)
|
576 |
+
{
|
577 |
+
$written_last = fwrite($this->write_stream, substr($data, $written_total));
|
578 |
+
|
579 |
+
if ($written_last === false)
|
580 |
+
{
|
581 |
+
return $written_total;
|
582 |
+
}
|
583 |
+
|
584 |
+
$written_total += $written_last;
|
585 |
+
}
|
586 |
+
|
587 |
+
// Execute callback function
|
588 |
+
if ($this->registered_streaming_write_callback)
|
589 |
+
{
|
590 |
+
call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total);
|
591 |
+
}
|
592 |
+
|
593 |
+
return $written_total;
|
594 |
+
}
|
595 |
+
|
596 |
+
/**
|
597 |
+
* Prepares and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
|
598 |
+
* function.
|
599 |
+
*
|
600 |
+
* @return resource The handle for the cURL object.
|
601 |
+
*/
|
602 |
+
public function prep_request()
|
603 |
+
{
|
604 |
+
$curl_handle = curl_init();
|
605 |
+
|
606 |
+
// Set default options.
|
607 |
+
curl_setopt($curl_handle, CURLOPT_URL, $this->request_url);
|
608 |
+
curl_setopt($curl_handle, CURLOPT_FILETIME, true);
|
609 |
+
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
|
610 |
+
curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
|
611 |
+
curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
|
612 |
+
curl_setopt($curl_handle, CURLOPT_HEADER, true);
|
613 |
+
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
|
614 |
+
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
|
615 |
+
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);
|
616 |
+
curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
|
617 |
+
curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url);
|
618 |
+
curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent);
|
619 |
+
curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback'));
|
620 |
+
|
621 |
+
// Verification of the SSL cert
|
622 |
+
if ($this->ssl_verification)
|
623 |
+
{
|
624 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true);
|
625 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, true);
|
626 |
+
}
|
627 |
+
else
|
628 |
+
{
|
629 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
|
630 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
|
631 |
+
}
|
632 |
+
|
633 |
+
// chmod the file as 0755
|
634 |
+
if ($this->cacert_location === true)
|
635 |
+
{
|
636 |
+
curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
|
637 |
+
}
|
638 |
+
elseif (is_string($this->cacert_location))
|
639 |
+
{
|
640 |
+
curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location);
|
641 |
+
}
|
642 |
+
|
643 |
+
// Debug mode
|
644 |
+
if ($this->debug_mode)
|
645 |
+
{
|
646 |
+
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);
|
647 |
+
}
|
648 |
+
|
649 |
+
// Handle open_basedir & safe mode
|
650 |
+
if (!ini_get('safe_mode') && !ini_get('open_basedir'))
|
651 |
+
{
|
652 |
+
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
|
653 |
+
}
|
654 |
+
|
655 |
+
// Enable a proxy connection if requested.
|
656 |
+
if ($this->proxy)
|
657 |
+
{
|
658 |
+
curl_setopt($curl_handle, CURLOPT_HTTPPROXYTUNNEL, true);
|
659 |
+
|
660 |
+
$host = $this->proxy['host'];
|
661 |
+
$host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : '';
|
662 |
+
curl_setopt($curl_handle, CURLOPT_PROXY, $host);
|
663 |
+
|
664 |
+
if (isset($this->proxy['user']) && isset($this->proxy['pass']))
|
665 |
+
{
|
666 |
+
curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']);
|
667 |
+
}
|
668 |
+
}
|
669 |
+
|
670 |
+
// Set credentials for HTTP Basic/Digest Authentication.
|
671 |
+
if ($this->username && $this->password)
|
672 |
+
{
|
673 |
+
curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
674 |
+
curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
|
675 |
+
}
|
676 |
+
|
677 |
+
// Handle the encoding if we can.
|
678 |
+
if (extension_loaded('zlib'))
|
679 |
+
{
|
680 |
+
curl_setopt($curl_handle, CURLOPT_ENCODING, '');
|
681 |
+
}
|
682 |
+
|
683 |
+
// Process custom headers
|
684 |
+
if (isset($this->request_headers) && count($this->request_headers))
|
685 |
+
{
|
686 |
+
$temp_headers = array();
|
687 |
+
|
688 |
+
foreach ($this->request_headers as $k => $v)
|
689 |
+
{
|
690 |
+
$temp_headers[] = $k . ': ' . $v;
|
691 |
+
}
|
692 |
+
|
693 |
+
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers);
|
694 |
+
}
|
695 |
+
|
696 |
+
switch ($this->method)
|
697 |
+
{
|
698 |
+
case self::HTTP_PUT:
|
699 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
|
700 |
+
if (isset($this->read_stream))
|
701 |
+
{
|
702 |
+
if (!isset($this->read_stream_size) || $this->read_stream_size < 0)
|
703 |
+
{
|
704 |
+
throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
|
705 |
+
}
|
706 |
+
|
707 |
+
curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
|
708 |
+
curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
|
709 |
+
}
|
710 |
+
else
|
711 |
+
{
|
712 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
713 |
+
}
|
714 |
+
break;
|
715 |
+
|
716 |
+
case self::HTTP_POST:
|
717 |
+
curl_setopt($curl_handle, CURLOPT_POST, true);
|
718 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
719 |
+
break;
|
720 |
+
|
721 |
+
case self::HTTP_HEAD:
|
722 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD);
|
723 |
+
curl_setopt($curl_handle, CURLOPT_NOBODY, 1);
|
724 |
+
break;
|
725 |
+
|
726 |
+
default: // Assumed GET
|
727 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method);
|
728 |
+
if (isset($this->write_stream))
|
729 |
+
{
|
730 |
+
curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback'));
|
731 |
+
curl_setopt($curl_handle, CURLOPT_HEADER, false);
|
732 |
+
}
|
733 |
+
else
|
734 |
+
{
|
735 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
736 |
+
}
|
737 |
+
break;
|
738 |
+
}
|
739 |
+
|
740 |
+
// Merge in the CURLOPTs
|
741 |
+
if (isset($this->curlopts) && sizeof($this->curlopts) > 0)
|
742 |
+
{
|
743 |
+
foreach ($this->curlopts as $k => $v)
|
744 |
+
{
|
745 |
+
curl_setopt($curl_handle, $k, $v);
|
746 |
+
}
|
747 |
+
}
|
748 |
+
|
749 |
+
return $curl_handle;
|
750 |
+
}
|
751 |
+
|
752 |
+
/**
|
753 |
+
* Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the
|
754 |
+
* data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
|
755 |
+
* parameters.
|
756 |
+
*
|
757 |
+
* @param resource $curl_handle (Optional) The reference to the already executed cURL request.
|
758 |
+
* @param string $response (Optional) The actual response content itself that needs to be parsed.
|
759 |
+
* @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
|
760 |
+
*/
|
761 |
+
public function process_response($curl_handle = null, $response = null)
|
762 |
+
{
|
763 |
+
// Accept a custom one if it's passed.
|
764 |
+
if ($curl_handle && $response)
|
765 |
+
{
|
766 |
+
$this->curl_handle = $curl_handle;
|
767 |
+
$this->response = $response;
|
768 |
+
}
|
769 |
+
|
770 |
+
// As long as this came back as a valid resource...
|
771 |
+
if (is_resource($this->curl_handle))
|
772 |
+
{
|
773 |
+
// Determine what's what.
|
774 |
+
$header_size = curl_getinfo($this->curl_handle, CURLINFO_HEADER_SIZE);
|
775 |
+
$this->response_headers = substr($this->response, 0, $header_size);
|
776 |
+
$this->response_body = substr($this->response, $header_size);
|
777 |
+
$this->response_code = curl_getinfo($this->curl_handle, CURLINFO_HTTP_CODE);
|
778 |
+
$this->response_info = curl_getinfo($this->curl_handle);
|
779 |
+
|
780 |
+
// Parse out the headers
|
781 |
+
$this->response_headers = explode("\r\n\r\n", trim($this->response_headers));
|
782 |
+
$this->response_headers = array_pop($this->response_headers);
|
783 |
+
$this->response_headers = explode("\r\n", $this->response_headers);
|
784 |
+
array_shift($this->response_headers);
|
785 |
+
|
786 |
+
// Loop through and split up the headers.
|
787 |
+
$header_assoc = array();
|
788 |
+
foreach ($this->response_headers as $header)
|
789 |
+
{
|
790 |
+
$kv = explode(': ', $header);
|
791 |
+
$header_assoc[strtolower($kv[0])] = $kv[1];
|
792 |
+
}
|
793 |
+
|
794 |
+
// Reset the headers to the appropriate property.
|
795 |
+
$this->response_headers = $header_assoc;
|
796 |
+
$this->response_headers['_info'] = $this->response_info;
|
797 |
+
$this->response_headers['_info']['method'] = $this->method;
|
798 |
+
|
799 |
+
if ($curl_handle && $response)
|
800 |
+
{
|
801 |
+
return new $this->response_class($this->response_headers, $this->response_body, $this->response_code, $this->curl_handle);
|
802 |
+
}
|
803 |
+
}
|
804 |
+
|
805 |
+
// Return false
|
806 |
+
return false;
|
807 |
+
}
|
808 |
+
|
809 |
+
/**
|
810 |
+
* Sends the request, calling necessary utility functions to update built-in properties.
|
811 |
+
*
|
812 |
+
* @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not.
|
813 |
+
* @return string The resulting unparsed data from the request.
|
814 |
+
*/
|
815 |
+
public function send_request($parse = false)
|
816 |
+
{
|
817 |
+
set_time_limit(0);
|
818 |
+
|
819 |
+
$curl_handle = $this->prep_request();
|
820 |
+
$this->response = curl_exec($curl_handle);
|
821 |
+
|
822 |
+
if ($this->response === false)
|
823 |
+
{
|
824 |
+
throw new RequestCore_Exception('cURL resource: ' . (string) $curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')');
|
825 |
+
}
|
826 |
+
|
827 |
+
$parsed_response = $this->process_response($curl_handle, $this->response);
|
828 |
+
|
829 |
+
curl_close($curl_handle);
|
830 |
+
|
831 |
+
if ($parse)
|
832 |
+
{
|
833 |
+
return $parsed_response;
|
834 |
+
}
|
835 |
+
|
836 |
+
return $this->response;
|
837 |
+
}
|
838 |
+
|
839 |
+
/**
|
840 |
+
* Sends the request using <php:curl_multi_exec()>, enabling parallel requests. Uses the "rolling" method.
|
841 |
+
*
|
842 |
+
* @param array $handles (Required) An indexed array of cURL handles to process simultaneously.
|
843 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
844 |
+
* <li><code>callback</code> - <code>string|array</code> - Optional - The string name of a function to pass the response data to. If this is a method, pass an array where the <code>[0]</code> index is the class and the <code>[1]</code> index is the method name.</li>
|
845 |
+
* <li><code>limit</code> - <code>integer</code> - Optional - The number of simultaneous requests to make. This can be useful for scaling around slow server responses. Defaults to trusting cURLs judgement as to how many to use.</li></ul>
|
846 |
+
* @return array Post-processed cURL responses.
|
847 |
+
*/
|
848 |
+
public function send_multi_request($handles, $opt = null)
|
849 |
+
{
|
850 |
+
set_time_limit(0);
|
851 |
+
|
852 |
+
// Skip everything if there are no handles to process.
|
853 |
+
if (count($handles) === 0) return array();
|
854 |
+
|
855 |
+
if (!$opt) $opt = array();
|
856 |
+
|
857 |
+
// Initialize any missing options
|
858 |
+
$limit = isset($opt['limit']) ? $opt['limit'] : -1;
|
859 |
+
|
860 |
+
// Initialize
|
861 |
+
$handle_list = $handles;
|
862 |
+
$http = new $this->request_class();
|
863 |
+
$multi_handle = curl_multi_init();
|
864 |
+
$handles_post = array();
|
865 |
+
$added = count($handles);
|
866 |
+
$last_handle = null;
|
867 |
+
$count = 0;
|
868 |
+
$i = 0;
|
869 |
+
|
870 |
+
// Loop through the cURL handles and add as many as it set by the limit parameter.
|
871 |
+
while ($i < $added)
|
872 |
+
{
|
873 |
+
if ($limit > 0 && $i >= $limit) break;
|
874 |
+
curl_multi_add_handle($multi_handle, array_shift($handles));
|
875 |
+
$i++;
|
876 |
+
}
|
877 |
+
|
878 |
+
do
|
879 |
+
{
|
880 |
+
$active = false;
|
881 |
+
|
882 |
+
// Start executing and wait for a response.
|
883 |
+
while (($status = curl_multi_exec($multi_handle, $active)) === CURLM_CALL_MULTI_PERFORM)
|
884 |
+
{
|
885 |
+
// Start looking for possible responses immediately when we have to add more handles
|
886 |
+
if (count($handles) > 0) break;
|
887 |
+
}
|
888 |
+
|
889 |
+
// Figure out which requests finished.
|
890 |
+
$to_process = array();
|
891 |
+
|
892 |
+
while ($done = curl_multi_info_read($multi_handle))
|
893 |
+
{
|
894 |
+
// Since curl_errno() isn't reliable for handles that were in multirequests, we check the 'result' of the info read, which contains the curl error number, (listed here http://curl.haxx.se/libcurl/c/libcurl-errors.html )
|
895 |
+
if ($done['result'] > 0)
|
896 |
+
{
|
897 |
+
throw new RequestCore_Exception('cURL resource: ' . (string) $done['handle'] . '; cURL error: ' . curl_error($done['handle']) . ' (' . $done['result'] . ')');
|
898 |
+
}
|
899 |
+
|
900 |
+
// Because curl_multi_info_read() might return more than one message about a request, we check to see if this request is already in our array of completed requests
|
901 |
+
elseif (!isset($to_process[(int) $done['handle']]))
|
902 |
+
{
|
903 |
+
$to_process[(int) $done['handle']] = $done;
|
904 |
+
}
|
905 |
+
}
|
906 |
+
|
907 |
+
// Actually deal with the request
|
908 |
+
foreach ($to_process as $pkey => $done)
|
909 |
+
{
|
910 |
+
$response = $http->process_response($done['handle'], curl_multi_getcontent($done['handle']));
|
911 |
+
$key = array_search($done['handle'], $handle_list, true);
|
912 |
+
$handles_post[$key] = $response;
|
913 |
+
|
914 |
+
if (count($handles) > 0)
|
915 |
+
{
|
916 |
+
curl_multi_add_handle($multi_handle, array_shift($handles));
|
917 |
+
}
|
918 |
+
|
919 |
+
curl_multi_remove_handle($multi_handle, $done['handle']);
|
920 |
+
curl_close($done['handle']);
|
921 |
+
}
|
922 |
+
}
|
923 |
+
while ($active || count($handles_post) < $added);
|
924 |
+
|
925 |
+
curl_multi_close($multi_handle);
|
926 |
+
|
927 |
+
ksort($handles_post, SORT_NUMERIC);
|
928 |
+
return $handles_post;
|
929 |
+
}
|
930 |
+
|
931 |
+
|
932 |
+
/*%******************************************************************************************%*/
|
933 |
+
// RESPONSE METHODS
|
934 |
+
|
935 |
+
/**
|
936 |
+
* Get the HTTP response headers from the request.
|
937 |
+
*
|
938 |
+
* @param string $header (Optional) A specific header value to return. Defaults to all headers.
|
939 |
+
* @return string|array All or selected header values.
|
940 |
+
*/
|
941 |
+
public function get_response_header($header = null)
|
942 |
+
{
|
943 |
+
if ($header)
|
944 |
+
{
|
945 |
+
return $this->response_headers[strtolower($header)];
|
946 |
+
}
|
947 |
+
return $this->response_headers;
|
948 |
+
}
|
949 |
+
|
950 |
+
/**
|
951 |
+
* Get the HTTP response body from the request.
|
952 |
+
*
|
953 |
+
* @return string The response body.
|
954 |
+
*/
|
955 |
+
public function get_response_body()
|
956 |
+
{
|
957 |
+
return $this->response_body;
|
958 |
+
}
|
959 |
+
|
960 |
+
/**
|
961 |
+
* Get the HTTP response code from the request.
|
962 |
+
*
|
963 |
+
* @return string The HTTP response code.
|
964 |
+
*/
|
965 |
+
public function get_response_code()
|
966 |
+
{
|
967 |
+
return $this->response_code;
|
968 |
+
}
|
969 |
+
}
|
970 |
+
|
971 |
+
|
972 |
+
/**
|
973 |
+
* Container for all response-related methods.
|
974 |
+
*/
|
975 |
+
class ResponseCore
|
976 |
+
{
|
977 |
+
/**
|
978 |
+
* Stores the HTTP header information.
|
979 |
+
*/
|
980 |
+
public $header;
|
981 |
+
|
982 |
+
/**
|
983 |
+
* Stores the SimpleXML response.
|
984 |
+
*/
|
985 |
+
public $body;
|
986 |
+
|
987 |
+
/**
|
988 |
+
* Stores the HTTP response code.
|
989 |
+
*/
|
990 |
+
public $status;
|
991 |
+
|
992 |
+
/**
|
993 |
+
* Constructs a new instance of this class.
|
994 |
+
*
|
995 |
+
* @param array $header (Required) Associative array of HTTP headers (typically returned by <RequestCore::get_response_header()>).
|
996 |
+
* @param string $body (Required) XML-formatted response from AWS.
|
997 |
+
* @param integer $status (Optional) HTTP response status code from the request.
|
998 |
+
* @return object Contains an <php:array> `header` property (HTTP headers as an associative array), a <php:SimpleXMLElement> or <php:string> `body` property, and an <php:integer> `status` code.
|
999 |
+
*/
|
1000 |
+
public function __construct($header, $body, $status = null)
|
1001 |
+
{
|
1002 |
+
$this->header = $header;
|
1003 |
+
$this->body = $body;
|
1004 |
+
$this->status = $status;
|
1005 |
+
|
1006 |
+
return $this;
|
1007 |
+
}
|
1008 |
+
|
1009 |
+
/**
|
1010 |
+
* Did we receive the status code we expected?
|
1011 |
+
*
|
1012 |
+
* @param integer|array $codes (Optional) The status code(s) to expect. Pass an <php:integer> for a single acceptable value, or an <php:array> of integers for multiple acceptable values.
|
1013 |
+
* @return boolean Whether we received the expected status code or not.
|
1014 |
+
*/
|
1015 |
+
public function isOK($codes = array(200, 201, 204, 206))
|
1016 |
+
{
|
1017 |
+
if (is_array($codes))
|
1018 |
+
{
|
1019 |
+
return in_array($this->status, $codes);
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
return $this->status === $codes;
|
1023 |
+
}
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
/**
|
1027 |
+
* Default RequestCore Exception.
|
1028 |
+
*/
|
1029 |
+
class RequestCore_Exception extends Exception {}
|
app/libs/aws/lib/yaml/LICENSE
CHANGED
@@ -1,19 +1,19 @@
|
|
1 |
-
Copyright (c) 2008-2009 Fabien Potencier
|
2 |
-
|
3 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
-
of this software and associated documentation files (the "Software"), to deal
|
5 |
-
in the Software without restriction, including without limitation the rights
|
6 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
-
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
-
to do so, subject to the following conditions:
|
9 |
-
|
10 |
-
The above copyright notice and this permission notice shall be included in all
|
11 |
-
copies or substantial portions of the Software.
|
12 |
-
|
13 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
-
THE SOFTWARE.
|
1 |
+
Copyright (c) 2008-2009 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
app/libs/aws/lib/yaml/lib/sfYaml.php
CHANGED
@@ -1,135 +1,135 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the symfony package.
|
5 |
-
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
-
*
|
7 |
-
* For the full copyright and license information, please view the LICENSE
|
8 |
-
* file that was distributed with this source code.
|
9 |
-
*/
|
10 |
-
|
11 |
-
/**
|
12 |
-
* sfYaml offers convenience methods to load and dump YAML.
|
13 |
-
*
|
14 |
-
* @package symfony
|
15 |
-
* @subpackage yaml
|
16 |
-
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
17 |
-
* @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
|
18 |
-
*/
|
19 |
-
class sfYaml
|
20 |
-
{
|
21 |
-
static protected
|
22 |
-
$spec = '1.2';
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Sets the YAML specification version to use.
|
26 |
-
*
|
27 |
-
* @param string $version The YAML specification version
|
28 |
-
*/
|
29 |
-
static public function setSpecVersion($version)
|
30 |
-
{
|
31 |
-
if (!in_array($version, array('1.1', '1.2')))
|
32 |
-
{
|
33 |
-
throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
|
34 |
-
}
|
35 |
-
|
36 |
-
self::$spec = $version;
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Gets the YAML specification version to use.
|
41 |
-
*
|
42 |
-
* @return string The YAML specification version
|
43 |
-
*/
|
44 |
-
static public function getSpecVersion()
|
45 |
-
{
|
46 |
-
return self::$spec;
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Loads YAML into a PHP array.
|
51 |
-
*
|
52 |
-
* The load method, when supplied with a YAML stream (string or file),
|
53 |
-
* will do its best to convert YAML in a file into a PHP array.
|
54 |
-
*
|
55 |
-
* Usage:
|
56 |
-
* <code>
|
57 |
-
* $array = sfYaml::load('config.yml');
|
58 |
-
* print_r($array);
|
59 |
-
* </code>
|
60 |
-
*
|
61 |
-
* @param string $input Path of YAML file or string containing YAML
|
62 |
-
*
|
63 |
-
* @return array The YAML converted to a PHP array
|
64 |
-
*
|
65 |
-
* @throws InvalidArgumentException If the YAML is not valid
|
66 |
-
*/
|
67 |
-
public static function load($input)
|
68 |
-
{
|
69 |
-
$file = '';
|
70 |
-
|
71 |
-
// if input is a file, process it
|
72 |
-
if (strpos($input, "\n") === false && is_file($input))
|
73 |
-
{
|
74 |
-
$file = $input;
|
75 |
-
|
76 |
-
ob_start();
|
77 |
-
$retval = include($input);
|
78 |
-
$content = ob_get_clean();
|
79 |
-
|
80 |
-
// if an array is returned by the config file assume it's in plain php form else in YAML
|
81 |
-
$input = is_array($retval) ? $retval : $content;
|
82 |
-
}
|
83 |
-
|
84 |
-
// if an array is returned by the config file assume it's in plain php form else in YAML
|
85 |
-
if (is_array($input))
|
86 |
-
{
|
87 |
-
return $input;
|
88 |
-
}
|
89 |
-
|
90 |
-
require_once dirname(__FILE__).'/sfYamlParser.php';
|
91 |
-
|
92 |
-
$yaml = new sfYamlParser();
|
93 |
-
|
94 |
-
try
|
95 |
-
{
|
96 |
-
$ret = $yaml->parse($input);
|
97 |
-
}
|
98 |
-
catch (Exception $e)
|
99 |
-
{
|
100 |
-
throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
|
101 |
-
}
|
102 |
-
|
103 |
-
return $ret;
|
104 |
-
}
|
105 |
-
|
106 |
-
/**
|
107 |
-
* Dumps a PHP array to a YAML string.
|
108 |
-
*
|
109 |
-
* The dump method, when supplied with an array, will do its best
|
110 |
-
* to convert the array into friendly YAML.
|
111 |
-
*
|
112 |
-
* @param array $array PHP array
|
113 |
-
* @param integer $inline The level where you switch to inline YAML
|
114 |
-
*
|
115 |
-
* @return string A YAML string representing the original PHP array
|
116 |
-
*/
|
117 |
-
public static function dump($array, $inline = 2)
|
118 |
-
{
|
119 |
-
require_once dirname(__FILE__).'/sfYamlDumper.php';
|
120 |
-
|
121 |
-
$yaml = new sfYamlDumper();
|
122 |
-
|
123 |
-
return $yaml->dump($array, $inline);
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
/**
|
128 |
-
* Wraps echo to automatically provide a newline.
|
129 |
-
*
|
130 |
-
* @param string $string The string to echo with new line
|
131 |
-
*/
|
132 |
-
function echoln($string)
|
133 |
-
{
|
134 |
-
echo $string."\n";
|
135 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* sfYaml offers convenience methods to load and dump YAML.
|
13 |
+
*
|
14 |
+
* @package symfony
|
15 |
+
* @subpackage yaml
|
16 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
17 |
+
* @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
|
18 |
+
*/
|
19 |
+
class sfYaml
|
20 |
+
{
|
21 |
+
static protected
|
22 |
+
$spec = '1.2';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Sets the YAML specification version to use.
|
26 |
+
*
|
27 |
+
* @param string $version The YAML specification version
|
28 |
+
*/
|
29 |
+
static public function setSpecVersion($version)
|
30 |
+
{
|
31 |
+
if (!in_array($version, array('1.1', '1.2')))
|
32 |
+
{
|
33 |
+
throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
|
34 |
+
}
|
35 |
+
|
36 |
+
self::$spec = $version;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Gets the YAML specification version to use.
|
41 |
+
*
|
42 |
+
* @return string The YAML specification version
|
43 |
+
*/
|
44 |
+
static public function getSpecVersion()
|
45 |
+
{
|
46 |
+
return self::$spec;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Loads YAML into a PHP array.
|
51 |
+
*
|
52 |
+
* The load method, when supplied with a YAML stream (string or file),
|
53 |
+
* will do its best to convert YAML in a file into a PHP array.
|
54 |
+
*
|
55 |
+
* Usage:
|
56 |
+
* <code>
|
57 |
+
* $array = sfYaml::load('config.yml');
|
58 |
+
* print_r($array);
|
59 |
+
* </code>
|
60 |
+
*
|
61 |
+
* @param string $input Path of YAML file or string containing YAML
|
62 |
+
*
|
63 |
+
* @return array The YAML converted to a PHP array
|
64 |
+
*
|
65 |
+
* @throws InvalidArgumentException If the YAML is not valid
|
66 |
+
*/
|
67 |
+
public static function load($input)
|
68 |
+
{
|
69 |
+
$file = '';
|
70 |
+
|
71 |
+
// if input is a file, process it
|
72 |
+
if (strpos($input, "\n") === false && is_file($input))
|
73 |
+
{
|
74 |
+
$file = $input;
|
75 |
+
|
76 |
+
ob_start();
|
77 |
+
$retval = include($input);
|
78 |
+
$content = ob_get_clean();
|
79 |
+
|
80 |
+
// if an array is returned by the config file assume it's in plain php form else in YAML
|
81 |
+
$input = is_array($retval) ? $retval : $content;
|
82 |
+
}
|
83 |
+
|
84 |
+
// if an array is returned by the config file assume it's in plain php form else in YAML
|
85 |
+
if (is_array($input))
|
86 |
+
{
|
87 |
+
return $input;
|
88 |
+
}
|
89 |
+
|
90 |
+
require_once dirname(__FILE__).'/sfYamlParser.php';
|
91 |
+
|
92 |
+
$yaml = new sfYamlParser();
|
93 |
+
|
94 |
+
try
|
95 |
+
{
|
96 |
+
$ret = $yaml->parse($input);
|
97 |
+
}
|
98 |
+
catch (Exception $e)
|
99 |
+
{
|
100 |
+
throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
|
101 |
+
}
|
102 |
+
|
103 |
+
return $ret;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Dumps a PHP array to a YAML string.
|
108 |
+
*
|
109 |
+
* The dump method, when supplied with an array, will do its best
|
110 |
+
* to convert the array into friendly YAML.
|
111 |
+
*
|
112 |
+
* @param array $array PHP array
|
113 |
+
* @param integer $inline The level where you switch to inline YAML
|
114 |
+
*
|
115 |
+
* @return string A YAML string representing the original PHP array
|
116 |
+
*/
|
117 |
+
public static function dump($array, $inline = 2)
|
118 |
+
{
|
119 |
+
require_once dirname(__FILE__).'/sfYamlDumper.php';
|
120 |
+
|
121 |
+
$yaml = new sfYamlDumper();
|
122 |
+
|
123 |
+
return $yaml->dump($array, $inline);
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Wraps echo to automatically provide a newline.
|
129 |
+
*
|
130 |
+
* @param string $string The string to echo with new line
|
131 |
+
*/
|
132 |
+
function echoln($string)
|
133 |
+
{
|
134 |
+
echo $string."\n";
|
135 |
+
}
|
app/libs/aws/lib/yaml/lib/sfYamlDumper.php
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the symfony package.
|
5 |
-
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
-
*
|
7 |
-
* For the full copyright and license information, please view the LICENSE
|
8 |
-
* file that was distributed with this source code.
|
9 |
-
*/
|
10 |
-
|
11 |
-
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
-
|
13 |
-
/**
|
14 |
-
* sfYamlDumper dumps PHP variables to YAML strings.
|
15 |
-
*
|
16 |
-
* @package symfony
|
17 |
-
* @subpackage yaml
|
18 |
-
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
-
* @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
|
20 |
-
*/
|
21 |
-
class sfYamlDumper
|
22 |
-
{
|
23 |
-
/**
|
24 |
-
* Dumps a PHP value to YAML.
|
25 |
-
*
|
26 |
-
* @param mixed $input The PHP value
|
27 |
-
* @param integer $inline The level where you switch to inline YAML
|
28 |
-
* @param integer $indent The level o indentation indentation (used internally)
|
29 |
-
*
|
30 |
-
* @return string The YAML representation of the PHP value
|
31 |
-
*/
|
32 |
-
public function dump($input, $inline = 0, $indent = 0)
|
33 |
-
{
|
34 |
-
$output = '';
|
35 |
-
$prefix = $indent ? str_repeat(' ', $indent) : '';
|
36 |
-
|
37 |
-
if ($inline <= 0 || !is_array($input) || empty($input))
|
38 |
-
{
|
39 |
-
$output .= $prefix.sfYamlInline::dump($input);
|
40 |
-
}
|
41 |
-
else
|
42 |
-
{
|
43 |
-
$isAHash = array_keys($input) !== range(0, count($input) - 1);
|
44 |
-
|
45 |
-
foreach ($input as $key => $value)
|
46 |
-
{
|
47 |
-
$willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
|
48 |
-
|
49 |
-
$output .= sprintf('%s%s%s%s',
|
50 |
-
$prefix,
|
51 |
-
$isAHash ? sfYamlInline::dump($key).':' : '-',
|
52 |
-
$willBeInlined ? ' ' : "\n",
|
53 |
-
$this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
|
54 |
-
).($willBeInlined ? "\n" : '');
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
return $output;
|
59 |
-
}
|
60 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
+
|
13 |
+
/**
|
14 |
+
* sfYamlDumper dumps PHP variables to YAML strings.
|
15 |
+
*
|
16 |
+
* @package symfony
|
17 |
+
* @subpackage yaml
|
18 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
+
* @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
|
20 |
+
*/
|
21 |
+
class sfYamlDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Dumps a PHP value to YAML.
|
25 |
+
*
|
26 |
+
* @param mixed $input The PHP value
|
27 |
+
* @param integer $inline The level where you switch to inline YAML
|
28 |
+
* @param integer $indent The level o indentation indentation (used internally)
|
29 |
+
*
|
30 |
+
* @return string The YAML representation of the PHP value
|
31 |
+
*/
|
32 |
+
public function dump($input, $inline = 0, $indent = 0)
|
33 |
+
{
|
34 |
+
$output = '';
|
35 |
+
$prefix = $indent ? str_repeat(' ', $indent) : '';
|
36 |
+
|
37 |
+
if ($inline <= 0 || !is_array($input) || empty($input))
|
38 |
+
{
|
39 |
+
$output .= $prefix.sfYamlInline::dump($input);
|
40 |
+
}
|
41 |
+
else
|
42 |
+
{
|
43 |
+
$isAHash = array_keys($input) !== range(0, count($input) - 1);
|
44 |
+
|
45 |
+
foreach ($input as $key => $value)
|
46 |
+
{
|
47 |
+
$willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
|
48 |
+
|
49 |
+
$output .= sprintf('%s%s%s%s',
|
50 |
+
$prefix,
|
51 |
+
$isAHash ? sfYamlInline::dump($key).':' : '-',
|
52 |
+
$willBeInlined ? ' ' : "\n",
|
53 |
+
$this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
|
54 |
+
).($willBeInlined ? "\n" : '');
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
return $output;
|
59 |
+
}
|
60 |
+
}
|
app/libs/aws/lib/yaml/lib/sfYamlInline.php
CHANGED
@@ -1,442 +1,442 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the symfony package.
|
5 |
-
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
-
*
|
7 |
-
* For the full copyright and license information, please view the LICENSE
|
8 |
-
* file that was distributed with this source code.
|
9 |
-
*/
|
10 |
-
|
11 |
-
require_once dirname(__FILE__).'/sfYaml.php';
|
12 |
-
|
13 |
-
/**
|
14 |
-
* sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
|
15 |
-
*
|
16 |
-
* @package symfony
|
17 |
-
* @subpackage yaml
|
18 |
-
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
-
* @version SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
|
20 |
-
*/
|
21 |
-
class sfYamlInline
|
22 |
-
{
|
23 |
-
const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')';
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Convert a YAML string to a PHP array.
|
27 |
-
*
|
28 |
-
* @param string $value A YAML string
|
29 |
-
*
|
30 |
-
* @return array A PHP array representing the YAML string
|
31 |
-
*/
|
32 |
-
static public function load($value)
|
33 |
-
{
|
34 |
-
$value = trim($value);
|
35 |
-
|
36 |
-
if (0 == strlen($value))
|
37 |
-
{
|
38 |
-
return '';
|
39 |
-
}
|
40 |
-
|
41 |
-
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
42 |
-
{
|
43 |
-
$mbEncoding = mb_internal_encoding();
|
44 |
-
mb_internal_encoding('ASCII');
|
45 |
-
}
|
46 |
-
|
47 |
-
switch ($value[0])
|
48 |
-
{
|
49 |
-
case '[':
|
50 |
-
$result = self::parseSequence($value);
|
51 |
-
break;
|
52 |
-
case '{':
|
53 |
-
$result = self::parseMapping($value);
|
54 |
-
break;
|
55 |
-
default:
|
56 |
-
$result = self::parseScalar($value);
|
57 |
-
}
|
58 |
-
|
59 |
-
if (isset($mbEncoding))
|
60 |
-
{
|
61 |
-
mb_internal_encoding($mbEncoding);
|
62 |
-
}
|
63 |
-
|
64 |
-
return $result;
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Dumps a given PHP variable to a YAML string.
|
69 |
-
*
|
70 |
-
* @param mixed $value The PHP variable to convert
|
71 |
-
*
|
72 |
-
* @return string The YAML string representing the PHP array
|
73 |
-
*/
|
74 |
-
static public function dump($value)
|
75 |
-
{
|
76 |
-
if ('1.1' === sfYaml::getSpecVersion())
|
77 |
-
{
|
78 |
-
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
79 |
-
$falseValues = array('false', 'off', '-', 'no', 'n');
|
80 |
-
}
|
81 |
-
else
|
82 |
-
{
|
83 |
-
$trueValues = array('true');
|
84 |
-
$falseValues = array('false');
|
85 |
-
}
|
86 |
-
|
87 |
-
switch (true)
|
88 |
-
{
|
89 |
-
case is_resource($value):
|
90 |
-
throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
|
91 |
-
case is_object($value):
|
92 |
-
return '!!php/object:'.serialize($value);
|
93 |
-
case is_array($value):
|
94 |
-
return self::dumpArray($value);
|
95 |
-
case null === $value:
|
96 |
-
return 'null';
|
97 |
-
case true === $value:
|
98 |
-
return 'true';
|
99 |
-
case false === $value:
|
100 |
-
return 'false';
|
101 |
-
case ctype_digit($value):
|
102 |
-
return is_string($value) ? "'$value'" : (int) $value;
|
103 |
-
case is_numeric($value):
|
104 |
-
return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
|
105 |
-
case false !== strpos($value, "\n") || false !== strpos($value, "\r"):
|
106 |
-
return sprintf('"%s"', str_replace(array('"', "\n", "\r"), array('\\"', '\n', '\r'), $value));
|
107 |
-
case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value):
|
108 |
-
return sprintf("'%s'", str_replace('\'', '\'\'', $value));
|
109 |
-
case '' == $value:
|
110 |
-
return "''";
|
111 |
-
case preg_match(self::getTimestampRegex(), $value):
|
112 |
-
return "'$value'";
|
113 |
-
case in_array(strtolower($value), $trueValues):
|
114 |
-
return "'$value'";
|
115 |
-
case in_array(strtolower($value), $falseValues):
|
116 |
-
return "'$value'";
|
117 |
-
case in_array(strtolower($value), array('null', '~')):
|
118 |
-
return "'$value'";
|
119 |
-
default:
|
120 |
-
return $value;
|
121 |
-
}
|
122 |
-
}
|
123 |
-
|
124 |
-
/**
|
125 |
-
* Dumps a PHP array to a YAML string.
|
126 |
-
*
|
127 |
-
* @param array $value The PHP array to dump
|
128 |
-
*
|
129 |
-
* @return string The YAML string representing the PHP array
|
130 |
-
*/
|
131 |
-
static protected function dumpArray($value)
|
132 |
-
{
|
133 |
-
// array
|
134 |
-
$keys = array_keys($value);
|
135 |
-
if (
|
136 |
-
(1 == count($keys) && '0' == $keys[0])
|
137 |
-
||
|
138 |
-
(count($keys) > 1 && array_reduce($keys, create_function('$v,$w', 'return (integer) $v + $w;'), 0) == count($keys) * (count($keys) - 1) / 2))
|
139 |
-
{
|
140 |
-
$output = array();
|
141 |
-
foreach ($value as $val)
|
142 |
-
{
|
143 |
-
$output[] = self::dump($val);
|
144 |
-
}
|
145 |
-
|
146 |
-
return sprintf('[%s]', implode(', ', $output));
|
147 |
-
}
|
148 |
-
|
149 |
-
// mapping
|
150 |
-
$output = array();
|
151 |
-
foreach ($value as $key => $val)
|
152 |
-
{
|
153 |
-
$output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
|
154 |
-
}
|
155 |
-
|
156 |
-
return sprintf('{ %s }', implode(', ', $output));
|
157 |
-
}
|
158 |
-
|
159 |
-
/**
|
160 |
-
* Parses a scalar to a YAML string.
|
161 |
-
*
|
162 |
-
* @param scalar $scalar
|
163 |
-
* @param string $delimiters
|
164 |
-
* @param array $stringDelimiter
|
165 |
-
* @param integer $i
|
166 |
-
* @param boolean $evaluate
|
167 |
-
*
|
168 |
-
* @return string A YAML string
|
169 |
-
*/
|
170 |
-
static public function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true)
|
171 |
-
{
|
172 |
-
if (in_array($scalar[$i], $stringDelimiters))
|
173 |
-
{
|
174 |
-
// quoted scalar
|
175 |
-
$output = self::parseQuotedScalar($scalar, $i);
|
176 |
-
}
|
177 |
-
else
|
178 |
-
{
|
179 |
-
// "normal" string
|
180 |
-
if (!$delimiters)
|
181 |
-
{
|
182 |
-
$output = substr($scalar, $i);
|
183 |
-
$i += strlen($output);
|
184 |
-
|
185 |
-
// remove comments
|
186 |
-
if (false !== $strpos = strpos($output, ' #'))
|
187 |
-
{
|
188 |
-
$output = rtrim(substr($output, 0, $strpos));
|
189 |
-
}
|
190 |
-
}
|
191 |
-
else if (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match))
|
192 |
-
{
|
193 |
-
$output = $match[1];
|
194 |
-
$i += strlen($output);
|
195 |
-
}
|
196 |
-
else
|
197 |
-
{
|
198 |
-
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
|
199 |
-
}
|
200 |
-
|
201 |
-
$output = $evaluate ? self::evaluateScalar($output) : $output;
|
202 |
-
}
|
203 |
-
|
204 |
-
return $output;
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
* Parses a quoted scalar to YAML.
|
209 |
-
*
|
210 |
-
* @param string $scalar
|
211 |
-
* @param integer $i
|
212 |
-
*
|
213 |
-
* @return string A YAML string
|
214 |
-
*/
|
215 |
-
static protected function parseQuotedScalar($scalar, &$i)
|
216 |
-
{
|
217 |
-
if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match))
|
218 |
-
{
|
219 |
-
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i)));
|
220 |
-
}
|
221 |
-
|
222 |
-
$output = substr($match[0], 1, strlen($match[0]) - 2);
|
223 |
-
|
224 |
-
if ('"' == $scalar[$i])
|
225 |
-
{
|
226 |
-
// evaluate the string
|
227 |
-
$output = str_replace(array('\\"', '\\n', '\\r'), array('"', "\n", "\r"), $output);
|
228 |
-
}
|
229 |
-
else
|
230 |
-
{
|
231 |
-
// unescape '
|
232 |
-
$output = str_replace('\'\'', '\'', $output);
|
233 |
-
}
|
234 |
-
|
235 |
-
$i += strlen($match[0]);
|
236 |
-
|
237 |
-
return $output;
|
238 |
-
}
|
239 |
-
|
240 |
-
/**
|
241 |
-
* Parses a sequence to a YAML string.
|
242 |
-
*
|
243 |
-
* @param string $sequence
|
244 |
-
* @param integer $i
|
245 |
-
*
|
246 |
-
* @return string A YAML string
|
247 |
-
*/
|
248 |
-
static protected function parseSequence($sequence, &$i = 0)
|
249 |
-
{
|
250 |
-
$output = array();
|
251 |
-
$len = strlen($sequence);
|
252 |
-
$i += 1;
|
253 |
-
|
254 |
-
// [foo, bar, ...]
|
255 |
-
while ($i < $len)
|
256 |
-
{
|
257 |
-
switch ($sequence[$i])
|
258 |
-
{
|
259 |
-
case '[':
|
260 |
-
// nested sequence
|
261 |
-
$output[] = self::parseSequence($sequence, $i);
|
262 |
-
break;
|
263 |
-
case '{':
|
264 |
-
// nested mapping
|
265 |
-
$output[] = self::parseMapping($sequence, $i);
|
266 |
-
break;
|
267 |
-
case ']':
|
268 |
-
return $output;
|
269 |
-
case ',':
|
270 |
-
case ' ':
|
271 |
-
break;
|
272 |
-
default:
|
273 |
-
$isQuoted = in_array($sequence[$i], array('"', "'"));
|
274 |
-
$value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i);
|
275 |
-
|
276 |
-
if (!$isQuoted && false !== strpos($value, ': '))
|
277 |
-
{
|
278 |
-
// embedded mapping?
|
279 |
-
try
|
280 |
-
{
|
281 |
-
$value = self::parseMapping('{'.$value.'}');
|
282 |
-
}
|
283 |
-
catch (InvalidArgumentException $e)
|
284 |
-
{
|
285 |
-
// no, it's not
|
286 |
-
}
|
287 |
-
}
|
288 |
-
|
289 |
-
$output[] = $value;
|
290 |
-
|
291 |
-
--$i;
|
292 |
-
}
|
293 |
-
|
294 |
-
++$i;
|
295 |
-
}
|
296 |
-
|
297 |
-
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
|
298 |
-
}
|
299 |
-
|
300 |
-
/**
|
301 |
-
* Parses a mapping to a YAML string.
|
302 |
-
*
|
303 |
-
* @param string $mapping
|
304 |
-
* @param integer $i
|
305 |
-
*
|
306 |
-
* @return string A YAML string
|
307 |
-
*/
|
308 |
-
static protected function parseMapping($mapping, &$i = 0)
|
309 |
-
{
|
310 |
-
$output = array();
|
311 |
-
$len = strlen($mapping);
|
312 |
-
$i += 1;
|
313 |
-
|
314 |
-
// {foo: bar, bar:foo, ...}
|
315 |
-
while ($i < $len)
|
316 |
-
{
|
317 |
-
switch ($mapping[$i])
|
318 |
-
{
|
319 |
-
case ' ':
|
320 |
-
case ',':
|
321 |
-
++$i;
|
322 |
-
continue 2;
|
323 |
-
case '}':
|
324 |
-
return $output;
|
325 |
-
}
|
326 |
-
|
327 |
-
// key
|
328 |
-
$key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false);
|
329 |
-
|
330 |
-
// value
|
331 |
-
$done = false;
|
332 |
-
while ($i < $len)
|
333 |
-
{
|
334 |
-
switch ($mapping[$i])
|
335 |
-
{
|
336 |
-
case '[':
|
337 |
-
// nested sequence
|
338 |
-
$output[$key] = self::parseSequence($mapping, $i);
|
339 |
-
$done = true;
|
340 |
-
break;
|
341 |
-
case '{':
|
342 |
-
// nested mapping
|
343 |
-
$output[$key] = self::parseMapping($mapping, $i);
|
344 |
-
$done = true;
|
345 |
-
break;
|
346 |
-
case ':':
|
347 |
-
case ' ':
|
348 |
-
break;
|
349 |
-
default:
|
350 |
-
$output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i);
|
351 |
-
$done = true;
|
352 |
-
--$i;
|
353 |
-
}
|
354 |
-
|
355 |
-
++$i;
|
356 |
-
|
357 |
-
if ($done)
|
358 |
-
{
|
359 |
-
continue 2;
|
360 |
-
}
|
361 |
-
}
|
362 |
-
}
|
363 |
-
|
364 |
-
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
|
365 |
-
}
|
366 |
-
|
367 |
-
/**
|
368 |
-
* Evaluates scalars and replaces magic values.
|
369 |
-
*
|
370 |
-
* @param string $scalar
|
371 |
-
*
|
372 |
-
* @return string A YAML string
|
373 |
-
*/
|
374 |
-
static protected function evaluateScalar($scalar)
|
375 |
-
{
|
376 |
-
$scalar = trim($scalar);
|
377 |
-
|
378 |
-
if ('1.1' === sfYaml::getSpecVersion())
|
379 |
-
{
|
380 |
-
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
381 |
-
$falseValues = array('false', 'off', '-', 'no', 'n');
|
382 |
-
}
|
383 |
-
else
|
384 |
-
{
|
385 |
-
$trueValues = array('true');
|
386 |
-
$falseValues = array('false');
|
387 |
-
}
|
388 |
-
|
389 |
-
switch (true)
|
390 |
-
{
|
391 |
-
case 'null' == strtolower($scalar):
|
392 |
-
case '' == $scalar:
|
393 |
-
case '~' == $scalar:
|
394 |
-
return null;
|
395 |
-
case 0 === strpos($scalar, '!str'):
|
396 |
-
return (string) substr($scalar, 5);
|
397 |
-
case 0 === strpos($scalar, '! '):
|
398 |
-
return intval(self::parseScalar(substr($scalar, 2)));
|
399 |
-
case 0 === strpos($scalar, '!!php/object:'):
|
400 |
-
return unserialize(substr($scalar, 13));
|
401 |
-
case ctype_digit($scalar):
|
402 |
-
$raw = $scalar;
|
403 |
-
$cast = intval($scalar);
|
404 |
-
return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
|
405 |
-
case in_array(strtolower($scalar), $trueValues):
|
406 |
-
return true;
|
407 |
-
case in_array(strtolower($scalar), $falseValues):
|
408 |
-
return false;
|
409 |
-
case is_numeric($scalar):
|
410 |
-
return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
|
411 |
-
case 0 == strcasecmp($scalar, '.inf'):
|
412 |
-
case 0 == strcasecmp($scalar, '.NaN'):
|
413 |
-
return -log(0);
|
414 |
-
case 0 == strcasecmp($scalar, '-.inf'):
|
415 |
-
return log(0);
|
416 |
-
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
|
417 |
-
return floatval(str_replace(',', '', $scalar));
|
418 |
-
case preg_match(self::getTimestampRegex(), $scalar):
|
419 |
-
return strtotime($scalar);
|
420 |
-
default:
|
421 |
-
return (string) $scalar;
|
422 |
-
}
|
423 |
-
}
|
424 |
-
|
425 |
-
static protected function getTimestampRegex()
|
426 |
-
{
|
427 |
-
return <<<EOF
|
428 |
-
~^
|
429 |
-
(?P<year>[0-9][0-9][0-9][0-9])
|
430 |
-
-(?P<month>[0-9][0-9]?)
|
431 |
-
-(?P<day>[0-9][0-9]?)
|
432 |
-
(?:(?:[Tt]|[ \t]+)
|
433 |
-
(?P<hour>[0-9][0-9]?)
|
434 |
-
:(?P<minute>[0-9][0-9])
|
435 |
-
:(?P<second>[0-9][0-9])
|
436 |
-
(?:\.(?P<fraction>[0-9]*))?
|
437 |
-
(?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
|
438 |
-
(?::(?P<tz_minute>[0-9][0-9]))?))?)?
|
439 |
-
$~x
|
440 |
-
EOF;
|
441 |
-
}
|
442 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once dirname(__FILE__).'/sfYaml.php';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
|
15 |
+
*
|
16 |
+
* @package symfony
|
17 |
+
* @subpackage yaml
|
18 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
+
* @version SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
|
20 |
+
*/
|
21 |
+
class sfYamlInline
|
22 |
+
{
|
23 |
+
const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Convert a YAML string to a PHP array.
|
27 |
+
*
|
28 |
+
* @param string $value A YAML string
|
29 |
+
*
|
30 |
+
* @return array A PHP array representing the YAML string
|
31 |
+
*/
|
32 |
+
static public function load($value)
|
33 |
+
{
|
34 |
+
$value = trim($value);
|
35 |
+
|
36 |
+
if (0 == strlen($value))
|
37 |
+
{
|
38 |
+
return '';
|
39 |
+
}
|
40 |
+
|
41 |
+
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
42 |
+
{
|
43 |
+
$mbEncoding = mb_internal_encoding();
|
44 |
+
mb_internal_encoding('ASCII');
|
45 |
+
}
|
46 |
+
|
47 |
+
switch ($value[0])
|
48 |
+
{
|
49 |
+
case '[':
|
50 |
+
$result = self::parseSequence($value);
|
51 |
+
break;
|
52 |
+
case '{':
|
53 |
+
$result = self::parseMapping($value);
|
54 |
+
break;
|
55 |
+
default:
|
56 |
+
$result = self::parseScalar($value);
|
57 |
+
}
|
58 |
+
|
59 |
+
if (isset($mbEncoding))
|
60 |
+
{
|
61 |
+
mb_internal_encoding($mbEncoding);
|
62 |
+
}
|
63 |
+
|
64 |
+
return $result;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Dumps a given PHP variable to a YAML string.
|
69 |
+
*
|
70 |
+
* @param mixed $value The PHP variable to convert
|
71 |
+
*
|
72 |
+
* @return string The YAML string representing the PHP array
|
73 |
+
*/
|
74 |
+
static public function dump($value)
|
75 |
+
{
|
76 |
+
if ('1.1' === sfYaml::getSpecVersion())
|
77 |
+
{
|
78 |
+
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
79 |
+
$falseValues = array('false', 'off', '-', 'no', 'n');
|
80 |
+
}
|
81 |
+
else
|
82 |
+
{
|
83 |
+
$trueValues = array('true');
|
84 |
+
$falseValues = array('false');
|
85 |
+
}
|
86 |
+
|
87 |
+
switch (true)
|
88 |
+
{
|
89 |
+
case is_resource($value):
|
90 |
+
throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
|
91 |
+
case is_object($value):
|
92 |
+
return '!!php/object:'.serialize($value);
|
93 |
+
case is_array($value):
|
94 |
+
return self::dumpArray($value);
|
95 |
+
case null === $value:
|
96 |
+
return 'null';
|
97 |
+
case true === $value:
|
98 |
+
return 'true';
|
99 |
+
case false === $value:
|
100 |
+
return 'false';
|
101 |
+
case ctype_digit($value):
|
102 |
+
return is_string($value) ? "'$value'" : (int) $value;
|
103 |
+
case is_numeric($value):
|
104 |
+
return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
|
105 |
+
case false !== strpos($value, "\n") || false !== strpos($value, "\r"):
|
106 |
+
return sprintf('"%s"', str_replace(array('"', "\n", "\r"), array('\\"', '\n', '\r'), $value));
|
107 |
+
case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value):
|
108 |
+
return sprintf("'%s'", str_replace('\'', '\'\'', $value));
|
109 |
+
case '' == $value:
|
110 |
+
return "''";
|
111 |
+
case preg_match(self::getTimestampRegex(), $value):
|
112 |
+
return "'$value'";
|
113 |
+
case in_array(strtolower($value), $trueValues):
|
114 |
+
return "'$value'";
|
115 |
+
case in_array(strtolower($value), $falseValues):
|
116 |
+
return "'$value'";
|
117 |
+
case in_array(strtolower($value), array('null', '~')):
|
118 |
+
return "'$value'";
|
119 |
+
default:
|
120 |
+
return $value;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Dumps a PHP array to a YAML string.
|
126 |
+
*
|
127 |
+
* @param array $value The PHP array to dump
|
128 |
+
*
|
129 |
+
* @return string The YAML string representing the PHP array
|
130 |
+
*/
|
131 |
+
static protected function dumpArray($value)
|
132 |
+
{
|
133 |
+
// array
|
134 |
+
$keys = array_keys($value);
|
135 |
+
if (
|
136 |
+
(1 == count($keys) && '0' == $keys[0])
|
137 |
+
||
|
138 |
+
(count($keys) > 1 && array_reduce($keys, create_function('$v,$w', 'return (integer) $v + $w;'), 0) == count($keys) * (count($keys) - 1) / 2))
|
139 |
+
{
|
140 |
+
$output = array();
|
141 |
+
foreach ($value as $val)
|
142 |
+
{
|
143 |
+
$output[] = self::dump($val);
|
144 |
+
}
|
145 |
+
|
146 |
+
return sprintf('[%s]', implode(', ', $output));
|
147 |
+
}
|
148 |
+
|
149 |
+
// mapping
|
150 |
+
$output = array();
|
151 |
+
foreach ($value as $key => $val)
|
152 |
+
{
|
153 |
+
$output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
|
154 |
+
}
|
155 |
+
|
156 |
+
return sprintf('{ %s }', implode(', ', $output));
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Parses a scalar to a YAML string.
|
161 |
+
*
|
162 |
+
* @param scalar $scalar
|
163 |
+
* @param string $delimiters
|
164 |
+
* @param array $stringDelimiter
|
165 |
+
* @param integer $i
|
166 |
+
* @param boolean $evaluate
|
167 |
+
*
|
168 |
+
* @return string A YAML string
|
169 |
+
*/
|
170 |
+
static public function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true)
|
171 |
+
{
|
172 |
+
if (in_array($scalar[$i], $stringDelimiters))
|
173 |
+
{
|
174 |
+
// quoted scalar
|
175 |
+
$output = self::parseQuotedScalar($scalar, $i);
|
176 |
+
}
|
177 |
+
else
|
178 |
+
{
|
179 |
+
// "normal" string
|
180 |
+
if (!$delimiters)
|
181 |
+
{
|
182 |
+
$output = substr($scalar, $i);
|
183 |
+
$i += strlen($output);
|
184 |
+
|
185 |
+
// remove comments
|
186 |
+
if (false !== $strpos = strpos($output, ' #'))
|
187 |
+
{
|
188 |
+
$output = rtrim(substr($output, 0, $strpos));
|
189 |
+
}
|
190 |
+
}
|
191 |
+
else if (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match))
|
192 |
+
{
|
193 |
+
$output = $match[1];
|
194 |
+
$i += strlen($output);
|
195 |
+
}
|
196 |
+
else
|
197 |
+
{
|
198 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
|
199 |
+
}
|
200 |
+
|
201 |
+
$output = $evaluate ? self::evaluateScalar($output) : $output;
|
202 |
+
}
|
203 |
+
|
204 |
+
return $output;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Parses a quoted scalar to YAML.
|
209 |
+
*
|
210 |
+
* @param string $scalar
|
211 |
+
* @param integer $i
|
212 |
+
*
|
213 |
+
* @return string A YAML string
|
214 |
+
*/
|
215 |
+
static protected function parseQuotedScalar($scalar, &$i)
|
216 |
+
{
|
217 |
+
if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match))
|
218 |
+
{
|
219 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i)));
|
220 |
+
}
|
221 |
+
|
222 |
+
$output = substr($match[0], 1, strlen($match[0]) - 2);
|
223 |
+
|
224 |
+
if ('"' == $scalar[$i])
|
225 |
+
{
|
226 |
+
// evaluate the string
|
227 |
+
$output = str_replace(array('\\"', '\\n', '\\r'), array('"', "\n", "\r"), $output);
|
228 |
+
}
|
229 |
+
else
|
230 |
+
{
|
231 |
+
// unescape '
|
232 |
+
$output = str_replace('\'\'', '\'', $output);
|
233 |
+
}
|
234 |
+
|
235 |
+
$i += strlen($match[0]);
|
236 |
+
|
237 |
+
return $output;
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Parses a sequence to a YAML string.
|
242 |
+
*
|
243 |
+
* @param string $sequence
|
244 |
+
* @param integer $i
|
245 |
+
*
|
246 |
+
* @return string A YAML string
|
247 |
+
*/
|
248 |
+
static protected function parseSequence($sequence, &$i = 0)
|
249 |
+
{
|
250 |
+
$output = array();
|
251 |
+
$len = strlen($sequence);
|
252 |
+
$i += 1;
|
253 |
+
|
254 |
+
// [foo, bar, ...]
|
255 |
+
while ($i < $len)
|
256 |
+
{
|
257 |
+
switch ($sequence[$i])
|
258 |
+
{
|
259 |
+
case '[':
|
260 |
+
// nested sequence
|
261 |
+
$output[] = self::parseSequence($sequence, $i);
|
262 |
+
break;
|
263 |
+
case '{':
|
264 |
+
// nested mapping
|
265 |
+
$output[] = self::parseMapping($sequence, $i);
|
266 |
+
break;
|
267 |
+
case ']':
|
268 |
+
return $output;
|
269 |
+
case ',':
|
270 |
+
case ' ':
|
271 |
+
break;
|
272 |
+
default:
|
273 |
+
$isQuoted = in_array($sequence[$i], array('"', "'"));
|
274 |
+
$value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i);
|
275 |
+
|
276 |
+
if (!$isQuoted && false !== strpos($value, ': '))
|
277 |
+
{
|
278 |
+
// embedded mapping?
|
279 |
+
try
|
280 |
+
{
|
281 |
+
$value = self::parseMapping('{'.$value.'}');
|
282 |
+
}
|
283 |
+
catch (InvalidArgumentException $e)
|
284 |
+
{
|
285 |
+
// no, it's not
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
$output[] = $value;
|
290 |
+
|
291 |
+
--$i;
|
292 |
+
}
|
293 |
+
|
294 |
+
++$i;
|
295 |
+
}
|
296 |
+
|
297 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Parses a mapping to a YAML string.
|
302 |
+
*
|
303 |
+
* @param string $mapping
|
304 |
+
* @param integer $i
|
305 |
+
*
|
306 |
+
* @return string A YAML string
|
307 |
+
*/
|
308 |
+
static protected function parseMapping($mapping, &$i = 0)
|
309 |
+
{
|
310 |
+
$output = array();
|
311 |
+
$len = strlen($mapping);
|
312 |
+
$i += 1;
|
313 |
+
|
314 |
+
// {foo: bar, bar:foo, ...}
|
315 |
+
while ($i < $len)
|
316 |
+
{
|
317 |
+
switch ($mapping[$i])
|
318 |
+
{
|
319 |
+
case ' ':
|
320 |
+
case ',':
|
321 |
+
++$i;
|
322 |
+
continue 2;
|
323 |
+
case '}':
|
324 |
+
return $output;
|
325 |
+
}
|
326 |
+
|
327 |
+
// key
|
328 |
+
$key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false);
|
329 |
+
|
330 |
+
// value
|
331 |
+
$done = false;
|
332 |
+
while ($i < $len)
|
333 |
+
{
|
334 |
+
switch ($mapping[$i])
|
335 |
+
{
|
336 |
+
case '[':
|
337 |
+
// nested sequence
|
338 |
+
$output[$key] = self::parseSequence($mapping, $i);
|
339 |
+
$done = true;
|
340 |
+
break;
|
341 |
+
case '{':
|
342 |
+
// nested mapping
|
343 |
+
$output[$key] = self::parseMapping($mapping, $i);
|
344 |
+
$done = true;
|
345 |
+
break;
|
346 |
+
case ':':
|
347 |
+
case ' ':
|
348 |
+
break;
|
349 |
+
default:
|
350 |
+
$output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i);
|
351 |
+
$done = true;
|
352 |
+
--$i;
|
353 |
+
}
|
354 |
+
|
355 |
+
++$i;
|
356 |
+
|
357 |
+
if ($done)
|
358 |
+
{
|
359 |
+
continue 2;
|
360 |
+
}
|
361 |
+
}
|
362 |
+
}
|
363 |
+
|
364 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Evaluates scalars and replaces magic values.
|
369 |
+
*
|
370 |
+
* @param string $scalar
|
371 |
+
*
|
372 |
+
* @return string A YAML string
|
373 |
+
*/
|
374 |
+
static protected function evaluateScalar($scalar)
|
375 |
+
{
|
376 |
+
$scalar = trim($scalar);
|
377 |
+
|
378 |
+
if ('1.1' === sfYaml::getSpecVersion())
|
379 |
+
{
|
380 |
+
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
381 |
+
$falseValues = array('false', 'off', '-', 'no', 'n');
|
382 |
+
}
|
383 |
+
else
|
384 |
+
{
|
385 |
+
$trueValues = array('true');
|
386 |
+
$falseValues = array('false');
|
387 |
+
}
|
388 |
+
|
389 |
+
switch (true)
|
390 |
+
{
|
391 |
+
case 'null' == strtolower($scalar):
|
392 |
+
case '' == $scalar:
|
393 |
+
case '~' == $scalar:
|
394 |
+
return null;
|
395 |
+
case 0 === strpos($scalar, '!str'):
|
396 |
+
return (string) substr($scalar, 5);
|
397 |
+
case 0 === strpos($scalar, '! '):
|
398 |
+
return intval(self::parseScalar(substr($scalar, 2)));
|
399 |
+
case 0 === strpos($scalar, '!!php/object:'):
|
400 |
+
return unserialize(substr($scalar, 13));
|
401 |
+
case ctype_digit($scalar):
|
402 |
+
$raw = $scalar;
|
403 |
+
$cast = intval($scalar);
|
404 |
+
return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
|
405 |
+
case in_array(strtolower($scalar), $trueValues):
|
406 |
+
return true;
|
407 |
+
case in_array(strtolower($scalar), $falseValues):
|
408 |
+
return false;
|
409 |
+
case is_numeric($scalar):
|
410 |
+
return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
|
411 |
+
case 0 == strcasecmp($scalar, '.inf'):
|
412 |
+
case 0 == strcasecmp($scalar, '.NaN'):
|
413 |
+
return -log(0);
|
414 |
+
case 0 == strcasecmp($scalar, '-.inf'):
|
415 |
+
return log(0);
|
416 |
+
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
|
417 |
+
return floatval(str_replace(',', '', $scalar));
|
418 |
+
case preg_match(self::getTimestampRegex(), $scalar):
|
419 |
+
return strtotime($scalar);
|
420 |
+
default:
|
421 |
+
return (string) $scalar;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
|
425 |
+
static protected function getTimestampRegex()
|
426 |
+
{
|
427 |
+
return <<<EOF
|
428 |
+
~^
|
429 |
+
(?P<year>[0-9][0-9][0-9][0-9])
|
430 |
+
-(?P<month>[0-9][0-9]?)
|
431 |
+
-(?P<day>[0-9][0-9]?)
|
432 |
+
(?:(?:[Tt]|[ \t]+)
|
433 |
+
(?P<hour>[0-9][0-9]?)
|
434 |
+
:(?P<minute>[0-9][0-9])
|
435 |
+
:(?P<second>[0-9][0-9])
|
436 |
+
(?:\.(?P<fraction>[0-9]*))?
|
437 |
+
(?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
|
438 |
+
(?::(?P<tz_minute>[0-9][0-9]))?))?)?
|
439 |
+
$~x
|
440 |
+
EOF;
|
441 |
+
}
|
442 |
+
}
|
app/libs/aws/lib/yaml/lib/sfYamlParser.php
CHANGED
@@ -1,612 +1,612 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the symfony package.
|
5 |
-
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
-
*
|
7 |
-
* For the full copyright and license information, please view the LICENSE
|
8 |
-
* file that was distributed with this source code.
|
9 |
-
*/
|
10 |
-
|
11 |
-
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
-
|
13 |
-
if (!defined('PREG_BAD_UTF8_OFFSET_ERROR'))
|
14 |
-
{
|
15 |
-
define('PREG_BAD_UTF8_OFFSET_ERROR', 5);
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* sfYamlParser parses YAML strings to convert them to PHP arrays.
|
20 |
-
*
|
21 |
-
* @package symfony
|
22 |
-
* @subpackage yaml
|
23 |
-
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
24 |
-
* @version SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
|
25 |
-
*/
|
26 |
-
class sfYamlParser
|
27 |
-
{
|
28 |
-
protected
|
29 |
-
$offset = 0,
|
30 |
-
$lines = array(),
|
31 |
-
$currentLineNb = -1,
|
32 |
-
$currentLine = '',
|
33 |
-
$refs = array();
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Constructor
|
37 |
-
*
|
38 |
-
* @param integer $offset The offset of YAML document (used for line numbers in error messages)
|
39 |
-
*/
|
40 |
-
public function __construct($offset = 0)
|
41 |
-
{
|
42 |
-
$this->offset = $offset;
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Parses a YAML string to a PHP value.
|
47 |
-
*
|
48 |
-
* @param string $value A YAML string
|
49 |
-
*
|
50 |
-
* @return mixed A PHP value
|
51 |
-
*
|
52 |
-
* @throws InvalidArgumentException If the YAML is not valid
|
53 |
-
*/
|
54 |
-
public function parse($value)
|
55 |
-
{
|
56 |
-
$value = str_replace("\t", ' ', $value); // Convert tabs to spaces.
|
57 |
-
|
58 |
-
$this->currentLineNb = -1;
|
59 |
-
$this->currentLine = '';
|
60 |
-
$this->lines = explode("\n", $this->cleanup($value));
|
61 |
-
|
62 |
-
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
63 |
-
{
|
64 |
-
$mbEncoding = mb_internal_encoding();
|
65 |
-
mb_internal_encoding('ASCII');
|
66 |
-
}
|
67 |
-
|
68 |
-
$data = array();
|
69 |
-
while ($this->moveToNextLine())
|
70 |
-
{
|
71 |
-
if ($this->isCurrentLineEmpty())
|
72 |
-
{
|
73 |
-
continue;
|
74 |
-
}
|
75 |
-
|
76 |
-
// tab?
|
77 |
-
if (preg_match('#^\t+#', $this->currentLine))
|
78 |
-
{
|
79 |
-
throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
80 |
-
}
|
81 |
-
|
82 |
-
$isRef = $isInPlace = $isProcessed = false;
|
83 |
-
if (preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
84 |
-
{
|
85 |
-
if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
86 |
-
{
|
87 |
-
$isRef = $matches['ref'];
|
88 |
-
$values['value'] = $matches['value'];
|
89 |
-
}
|
90 |
-
|
91 |
-
// array
|
92 |
-
if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
93 |
-
{
|
94 |
-
$c = $this->getRealCurrentLineNb() + 1;
|
95 |
-
$parser = new sfYamlParser($c);
|
96 |
-
$parser->refs =& $this->refs;
|
97 |
-
$data[] = $parser->parse($this->getNextEmbedBlock());
|
98 |
-
}
|
99 |
-
else
|
100 |
-
{
|
101 |
-
if (isset($values['leadspaces'])
|
102 |
-
&& ' ' == $values['leadspaces']
|
103 |
-
&& preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"\{].*?) *\:(\s+(?P<value>.+?))?\s*$#', $values['value'], $matches))
|
104 |
-
{
|
105 |
-
// this is a compact notation element, add to next block and parse
|
106 |
-
$c = $this->getRealCurrentLineNb();
|
107 |
-
$parser = new sfYamlParser($c);
|
108 |
-
$parser->refs =& $this->refs;
|
109 |
-
|
110 |
-
$block = $values['value'];
|
111 |
-
if (!$this->isNextLineIndented())
|
112 |
-
{
|
113 |
-
$block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
|
114 |
-
}
|
115 |
-
|
116 |
-
$data[] = $parser->parse($block);
|
117 |
-
}
|
118 |
-
else
|
119 |
-
{
|
120 |
-
$data[] = $this->parseValue($values['value']);
|
121 |
-
}
|
122 |
-
}
|
123 |
-
}
|
124 |
-
else if (preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"].*?) *\:(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
125 |
-
{
|
126 |
-
$key = sfYamlInline::parseScalar($values['key']);
|
127 |
-
|
128 |
-
if ('<<' === $key)
|
129 |
-
{
|
130 |
-
if (isset($values['value']) && '*' === substr($values['value'], 0, 1))
|
131 |
-
{
|
132 |
-
$isInPlace = substr($values['value'], 1);
|
133 |
-
if (!array_key_exists($isInPlace, $this->refs))
|
134 |
-
{
|
135 |
-
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
136 |
-
}
|
137 |
-
}
|
138 |
-
else
|
139 |
-
{
|
140 |
-
if (isset($values['value']) && $values['value'] !== '')
|
141 |
-
{
|
142 |
-
$value = $values['value'];
|
143 |
-
}
|
144 |
-
else
|
145 |
-
{
|
146 |
-
$value = $this->getNextEmbedBlock();
|
147 |
-
}
|
148 |
-
$c = $this->getRealCurrentLineNb() + 1;
|
149 |
-
$parser = new sfYamlParser($c);
|
150 |
-
$parser->refs =& $this->refs;
|
151 |
-
$parsed = $parser->parse($value);
|
152 |
-
|
153 |
-
$merged = array();
|
154 |
-
if (!is_array($parsed))
|
155 |
-
{
|
156 |
-
throw new InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
157 |
-
}
|
158 |
-
else if (isset($parsed[0]))
|
159 |
-
{
|
160 |
-
// Numeric array, merge individual elements
|
161 |
-
foreach (array_reverse($parsed) as $parsedItem)
|
162 |
-
{
|
163 |
-
if (!is_array($parsedItem))
|
164 |
-
{
|
165 |
-
throw new InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem));
|
166 |
-
}
|
167 |
-
$merged = array_merge($parsedItem, $merged);
|
168 |
-
}
|
169 |
-
}
|
170 |
-
else
|
171 |
-
{
|
172 |
-
// Associative array, merge
|
173 |
-
$merged = array_merge($merge, $parsed);
|
174 |
-
}
|
175 |
-
|
176 |
-
$isProcessed = $merged;
|
177 |
-
}
|
178 |
-
}
|
179 |
-
else if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
180 |
-
{
|
181 |
-
$isRef = $matches['ref'];
|
182 |
-
$values['value'] = $matches['value'];
|
183 |
-
}
|
184 |
-
|
185 |
-
if ($isProcessed)
|
186 |
-
{
|
187 |
-
// Merge keys
|
188 |
-
$data = $isProcessed;
|
189 |
-
}
|
190 |
-
// hash
|
191 |
-
else if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
192 |
-
{
|
193 |
-
// if next line is less indented or equal, then it means that the current value is null
|
194 |
-
if ($this->isNextLineIndented())
|
195 |
-
{
|
196 |
-
$data[$key] = null;
|
197 |
-
}
|
198 |
-
else
|
199 |
-
{
|
200 |
-
$c = $this->getRealCurrentLineNb() + 1;
|
201 |
-
$parser = new sfYamlParser($c);
|
202 |
-
$parser->refs =& $this->refs;
|
203 |
-
$data[$key] = $parser->parse($this->getNextEmbedBlock());
|
204 |
-
}
|
205 |
-
}
|
206 |
-
else
|
207 |
-
{
|
208 |
-
if ($isInPlace)
|
209 |
-
{
|
210 |
-
$data = $this->refs[$isInPlace];
|
211 |
-
}
|
212 |
-
else
|
213 |
-
{
|
214 |
-
$data[$key] = $this->parseValue($values['value']);
|
215 |
-
}
|
216 |
-
}
|
217 |
-
}
|
218 |
-
else
|
219 |
-
{
|
220 |
-
// 1-liner followed by newline
|
221 |
-
if (2 == count($this->lines) && empty($this->lines[1]))
|
222 |
-
{
|
223 |
-
$value = sfYamlInline::load($this->lines[0]);
|
224 |
-
if (is_array($value))
|
225 |
-
{
|
226 |
-
$first = reset($value);
|
227 |
-
if ('*' === substr($first, 0, 1))
|
228 |
-
{
|
229 |
-
$data = array();
|
230 |
-
foreach ($value as $alias)
|
231 |
-
{
|
232 |
-
$data[] = $this->refs[substr($alias, 1)];
|
233 |
-
}
|
234 |
-
$value = $data;
|
235 |
-
}
|
236 |
-
}
|
237 |
-
|
238 |
-
if (isset($mbEncoding))
|
239 |
-
{
|
240 |
-
mb_internal_encoding($mbEncoding);
|
241 |
-
}
|
242 |
-
|
243 |
-
return $value;
|
244 |
-
}
|
245 |
-
|
246 |
-
switch (preg_last_error())
|
247 |
-
{
|
248 |
-
case PREG_INTERNAL_ERROR:
|
249 |
-
$error = 'Internal PCRE error on line';
|
250 |
-
break;
|
251 |
-
case PREG_BACKTRACK_LIMIT_ERROR:
|
252 |
-
$error = 'pcre.backtrack_limit reached on line';
|
253 |
-
break;
|
254 |
-
case PREG_RECURSION_LIMIT_ERROR:
|
255 |
-
$error = 'pcre.recursion_limit reached on line';
|
256 |
-
break;
|
257 |
-
case PREG_BAD_UTF8_ERROR:
|
258 |
-
$error = 'Malformed UTF-8 data on line';
|
259 |
-
break;
|
260 |
-
case PREG_BAD_UTF8_OFFSET_ERROR:
|
261 |
-
$error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point on line';
|
262 |
-
break;
|
263 |
-
default:
|
264 |
-
$error = 'Unable to parse line';
|
265 |
-
}
|
266 |
-
|
267 |
-
throw new InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
268 |
-
}
|
269 |
-
|
270 |
-
if ($isRef)
|
271 |
-
{
|
272 |
-
$this->refs[$isRef] = end($data);
|
273 |
-
}
|
274 |
-
}
|
275 |
-
|
276 |
-
if (isset($mbEncoding))
|
277 |
-
{
|
278 |
-
mb_internal_encoding($mbEncoding);
|
279 |
-
}
|
280 |
-
|
281 |
-
return empty($data) ? null : $data;
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
* Returns the current line number (takes the offset into account).
|
286 |
-
*
|
287 |
-
* @return integer The current line number
|
288 |
-
*/
|
289 |
-
protected function getRealCurrentLineNb()
|
290 |
-
{
|
291 |
-
return $this->currentLineNb + $this->offset;
|
292 |
-
}
|
293 |
-
|
294 |
-
/**
|
295 |
-
* Returns the current line indentation.
|
296 |
-
*
|
297 |
-
* @return integer The current line indentation
|
298 |
-
*/
|
299 |
-
protected function getCurrentLineIndentation()
|
300 |
-
{
|
301 |
-
return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* Returns the next embed block of YAML.
|
306 |
-
*
|
307 |
-
* @param integer $indentation The indent level at which the block is to be read, or null for default
|
308 |
-
*
|
309 |
-
* @return string A YAML string
|
310 |
-
*/
|
311 |
-
protected function getNextEmbedBlock($indentation = null)
|
312 |
-
{
|
313 |
-
$this->moveToNextLine();
|
314 |
-
|
315 |
-
if (null === $indentation)
|
316 |
-
{
|
317 |
-
$newIndent = $this->getCurrentLineIndentation();
|
318 |
-
|
319 |
-
if (!$this->isCurrentLineEmpty() && 0 == $newIndent)
|
320 |
-
{
|
321 |
-
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
322 |
-
}
|
323 |
-
}
|
324 |
-
else
|
325 |
-
{
|
326 |
-
$newIndent = $indentation;
|
327 |
-
}
|
328 |
-
|
329 |
-
$data = array(substr($this->currentLine, $newIndent));
|
330 |
-
|
331 |
-
while ($this->moveToNextLine())
|
332 |
-
{
|
333 |
-
if ($this->isCurrentLineEmpty())
|
334 |
-
{
|
335 |
-
if ($this->isCurrentLineBlank())
|
336 |
-
{
|
337 |
-
$data[] = substr($this->currentLine, $newIndent);
|
338 |
-
}
|
339 |
-
|
340 |
-
continue;
|
341 |
-
}
|
342 |
-
|
343 |
-
$indent = $this->getCurrentLineIndentation();
|
344 |
-
|
345 |
-
if (preg_match('#^(?P<text> *)$#', $this->currentLine, $match))
|
346 |
-
{
|
347 |
-
// empty line
|
348 |
-
$data[] = $match['text'];
|
349 |
-
}
|
350 |
-
else if ($indent >= $newIndent)
|
351 |
-
{
|
352 |
-
$data[] = substr($this->currentLine, $newIndent);
|
353 |
-
}
|
354 |
-
else if (0 == $indent)
|
355 |
-
{
|
356 |
-
$this->moveToPreviousLine();
|
357 |
-
|
358 |
-
break;
|
359 |
-
}
|
360 |
-
else
|
361 |
-
{
|
362 |
-
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
363 |
-
}
|
364 |
-
}
|
365 |
-
|
366 |
-
return implode("\n", $data);
|
367 |
-
}
|
368 |
-
|
369 |
-
/**
|
370 |
-
* Moves the parser to the next line.
|
371 |
-
*/
|
372 |
-
protected function moveToNextLine()
|
373 |
-
{
|
374 |
-
if ($this->currentLineNb >= count($this->lines) - 1)
|
375 |
-
{
|
376 |
-
return false;
|
377 |
-
}
|
378 |
-
|
379 |
-
$this->currentLine = $this->lines[++$this->currentLineNb];
|
380 |
-
|
381 |
-
return true;
|
382 |
-
}
|
383 |
-
|
384 |
-
/**
|
385 |
-
* Moves the parser to the previous line.
|
386 |
-
*/
|
387 |
-
protected function moveToPreviousLine()
|
388 |
-
{
|
389 |
-
$this->currentLine = $this->lines[--$this->currentLineNb];
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* Parses a YAML value.
|
394 |
-
*
|
395 |
-
* @param string $value A YAML value
|
396 |
-
*
|
397 |
-
* @return mixed A PHP value
|
398 |
-
*/
|
399 |
-
protected function parseValue($value)
|
400 |
-
{
|
401 |
-
if ('*' === substr($value, 0, 1))
|
402 |
-
{
|
403 |
-
if (false !== $pos = strpos($value, '#'))
|
404 |
-
{
|
405 |
-
$value = substr($value, 1, $pos - 2);
|
406 |
-
}
|
407 |
-
else
|
408 |
-
{
|
409 |
-
$value = substr($value, 1);
|
410 |
-
}
|
411 |
-
|
412 |
-
if (!array_key_exists($value, $this->refs))
|
413 |
-
{
|
414 |
-
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
|
415 |
-
}
|
416 |
-
return $this->refs[$value];
|
417 |
-
}
|
418 |
-
|
419 |
-
if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches))
|
420 |
-
{
|
421 |
-
$modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
|
422 |
-
|
423 |
-
return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
|
424 |
-
}
|
425 |
-
else
|
426 |
-
{
|
427 |
-
return sfYamlInline::load($value);
|
428 |
-
}
|
429 |
-
}
|
430 |
-
|
431 |
-
/**
|
432 |
-
* Parses a folded scalar.
|
433 |
-
*
|
434 |
-
* @param string $separator The separator that was used to begin this folded scalar (| or >)
|
435 |
-
* @param string $indicator The indicator that was used to begin this folded scalar (+ or -)
|
436 |
-
* @param integer $indentation The indentation that was used to begin this folded scalar
|
437 |
-
*
|
438 |
-
* @return string The text value
|
439 |
-
*/
|
440 |
-
protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
|
441 |
-
{
|
442 |
-
$separator = '|' == $separator ? "\n" : ' ';
|
443 |
-
$text = '';
|
444 |
-
|
445 |
-
$notEOF = $this->moveToNextLine();
|
446 |
-
|
447 |
-
while ($notEOF && $this->isCurrentLineBlank())
|
448 |
-
{
|
449 |
-
$text .= "\n";
|
450 |
-
|
451 |
-
$notEOF = $this->moveToNextLine();
|
452 |
-
}
|
453 |
-
|
454 |
-
if (!$notEOF)
|
455 |
-
{
|
456 |
-
return '';
|
457 |
-
}
|
458 |
-
|
459 |
-
if (!preg_match('#^(?P<indent>'.($indentation ? str_repeat(' ', $indentation) : ' +').')(?P<text>.*)$#', $this->currentLine, $matches))
|
460 |
-
{
|
461 |
-
$this->moveToPreviousLine();
|
462 |
-
|
463 |
-
return '';
|
464 |
-
}
|
465 |
-
|
466 |
-
$textIndent = $matches['indent'];
|
467 |
-
$previousIndent = 0;
|
468 |
-
|
469 |
-
$text .= $matches['text'].$separator;
|
470 |
-
while ($this->currentLineNb + 1 < count($this->lines))
|
471 |
-
{
|
472 |
-
$this->moveToNextLine();
|
473 |
-
|
474 |
-
if (preg_match('#^(?P<indent> {'.strlen($textIndent).',})(?P<text>.+)$#', $this->currentLine, $matches))
|
475 |
-
{
|
476 |
-
if (' ' == $separator && $previousIndent != $matches['indent'])
|
477 |
-
{
|
478 |
-
$text = substr($text, 0, -1)."\n";
|
479 |
-
}
|
480 |
-
$previousIndent = $matches['indent'];
|
481 |
-
|
482 |
-
$text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)).$matches['text'].($diff ? "\n" : $separator);
|
483 |
-
}
|
484 |
-
else if (preg_match('#^(?P<text> *)$#', $this->currentLine, $matches))
|
485 |
-
{
|
486 |
-
$text .= preg_replace('#^ {1,'.strlen($textIndent).'}#', '', $matches['text'])."\n";
|
487 |
-
}
|
488 |
-
else
|
489 |
-
{
|
490 |
-
$this->moveToPreviousLine();
|
491 |
-
|
492 |
-
break;
|
493 |
-
}
|
494 |
-
}
|
495 |
-
|
496 |
-
if (' ' == $separator)
|
497 |
-
{
|
498 |
-
// replace last separator by a newline
|
499 |
-
$text = preg_replace('/ (\n*)$/', "\n$1", $text);
|
500 |
-
}
|
501 |
-
|
502 |
-
switch ($indicator)
|
503 |
-
{
|
504 |
-
case '':
|
505 |
-
$text = preg_replace('#\n+$#s', "\n", $text);
|
506 |
-
break;
|
507 |
-
case '+':
|
508 |
-
break;
|
509 |
-
case '-':
|
510 |
-
$text = preg_replace('#\n+$#s', '', $text);
|
511 |
-
break;
|
512 |
-
}
|
513 |
-
|
514 |
-
return $text;
|
515 |
-
}
|
516 |
-
|
517 |
-
/**
|
518 |
-
* Returns true if the next line is indented.
|
519 |
-
*
|
520 |
-
* @return Boolean Returns true if the next line is indented, false otherwise
|
521 |
-
*/
|
522 |
-
protected function isNextLineIndented()
|
523 |
-
{
|
524 |
-
$currentIndentation = $this->getCurrentLineIndentation();
|
525 |
-
$notEOF = $this->moveToNextLine();
|
526 |
-
|
527 |
-
while ($notEOF && $this->isCurrentLineEmpty())
|
528 |
-
{
|
529 |
-
$notEOF = $this->moveToNextLine();
|
530 |
-
}
|
531 |
-
|
532 |
-
if (false === $notEOF)
|
533 |
-
{
|
534 |
-
return false;
|
535 |
-
}
|
536 |
-
|
537 |
-
$ret = false;
|
538 |
-
if ($this->getCurrentLineIndentation() <= $currentIndentation)
|
539 |
-
{
|
540 |
-
$ret = true;
|
541 |
-
}
|
542 |
-
|
543 |
-
$this->moveToPreviousLine();
|
544 |
-
|
545 |
-
return $ret;
|
546 |
-
}
|
547 |
-
|
548 |
-
/**
|
549 |
-
* Returns true if the current line is blank or if it is a comment line.
|
550 |
-
*
|
551 |
-
* @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
|
552 |
-
*/
|
553 |
-
protected function isCurrentLineEmpty()
|
554 |
-
{
|
555 |
-
return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
|
556 |
-
}
|
557 |
-
|
558 |
-
/**
|
559 |
-
* Returns true if the current line is blank.
|
560 |
-
*
|
561 |
-
* @return Boolean Returns true if the current line is blank, false otherwise
|
562 |
-
*/
|
563 |
-
protected function isCurrentLineBlank()
|
564 |
-
{
|
565 |
-
return '' == trim($this->currentLine, ' ');
|
566 |
-
}
|
567 |
-
|
568 |
-
/**
|
569 |
-
* Returns true if the current line is a comment line.
|
570 |
-
*
|
571 |
-
* @return Boolean Returns true if the current line is a comment line, false otherwise
|
572 |
-
*/
|
573 |
-
protected function isCurrentLineComment()
|
574 |
-
{
|
575 |
-
//checking explicitly the first char of the trim is faster than loops or strpos
|
576 |
-
$ltrimmedLine = ltrim($this->currentLine, ' ');
|
577 |
-
return $ltrimmedLine[0] === '#';
|
578 |
-
}
|
579 |
-
|
580 |
-
/**
|
581 |
-
* Cleanups a YAML string to be parsed.
|
582 |
-
*
|
583 |
-
* @param string $value The input YAML string
|
584 |
-
*
|
585 |
-
* @return string A cleaned up YAML string
|
586 |
-
*/
|
587 |
-
protected function cleanup($value)
|
588 |
-
{
|
589 |
-
$value = str_replace(array("\r\n", "\r"), "\n", $value);
|
590 |
-
|
591 |
-
if (!preg_match("#\n$#", $value))
|
592 |
-
{
|
593 |
-
$value .= "\n";
|
594 |
-
}
|
595 |
-
|
596 |
-
// strip YAML header
|
597 |
-
$count = 0;
|
598 |
-
$value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#s', '', $value, -1, $count);
|
599 |
-
$this->offset += $count;
|
600 |
-
|
601 |
-
// remove leading comments and/or ---
|
602 |
-
$trimmedValue = preg_replace('#^((\#.*?\n)|(\-\-\-.*?\n))*#s', '', $value, -1, $count);
|
603 |
-
if ($count == 1)
|
604 |
-
{
|
605 |
-
// items have been removed, update the offset
|
606 |
-
$this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
|
607 |
-
$value = $trimmedValue;
|
608 |
-
}
|
609 |
-
|
610 |
-
return $value;
|
611 |
-
}
|
612 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
+
|
13 |
+
if (!defined('PREG_BAD_UTF8_OFFSET_ERROR'))
|
14 |
+
{
|
15 |
+
define('PREG_BAD_UTF8_OFFSET_ERROR', 5);
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* sfYamlParser parses YAML strings to convert them to PHP arrays.
|
20 |
+
*
|
21 |
+
* @package symfony
|
22 |
+
* @subpackage yaml
|
23 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
24 |
+
* @version SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
|
25 |
+
*/
|
26 |
+
class sfYamlParser
|
27 |
+
{
|
28 |
+
protected
|
29 |
+
$offset = 0,
|
30 |
+
$lines = array(),
|
31 |
+
$currentLineNb = -1,
|
32 |
+
$currentLine = '',
|
33 |
+
$refs = array();
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Constructor
|
37 |
+
*
|
38 |
+
* @param integer $offset The offset of YAML document (used for line numbers in error messages)
|
39 |
+
*/
|
40 |
+
public function __construct($offset = 0)
|
41 |
+
{
|
42 |
+
$this->offset = $offset;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Parses a YAML string to a PHP value.
|
47 |
+
*
|
48 |
+
* @param string $value A YAML string
|
49 |
+
*
|
50 |
+
* @return mixed A PHP value
|
51 |
+
*
|
52 |
+
* @throws InvalidArgumentException If the YAML is not valid
|
53 |
+
*/
|
54 |
+
public function parse($value)
|
55 |
+
{
|
56 |
+
$value = str_replace("\t", ' ', $value); // Convert tabs to spaces.
|
57 |
+
|
58 |
+
$this->currentLineNb = -1;
|
59 |
+
$this->currentLine = '';
|
60 |
+
$this->lines = explode("\n", $this->cleanup($value));
|
61 |
+
|
62 |
+
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
63 |
+
{
|
64 |
+
$mbEncoding = mb_internal_encoding();
|
65 |
+
mb_internal_encoding('ASCII');
|
66 |
+
}
|
67 |
+
|
68 |
+
$data = array();
|
69 |
+
while ($this->moveToNextLine())
|
70 |
+
{
|
71 |
+
if ($this->isCurrentLineEmpty())
|
72 |
+
{
|
73 |
+
continue;
|
74 |
+
}
|
75 |
+
|
76 |
+
// tab?
|
77 |
+
if (preg_match('#^\t+#', $this->currentLine))
|
78 |
+
{
|
79 |
+
throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
80 |
+
}
|
81 |
+
|
82 |
+
$isRef = $isInPlace = $isProcessed = false;
|
83 |
+
if (preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
84 |
+
{
|
85 |
+
if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
86 |
+
{
|
87 |
+
$isRef = $matches['ref'];
|
88 |
+
$values['value'] = $matches['value'];
|
89 |
+
}
|
90 |
+
|
91 |
+
// array
|
92 |
+
if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
93 |
+
{
|
94 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
95 |
+
$parser = new sfYamlParser($c);
|
96 |
+
$parser->refs =& $this->refs;
|
97 |
+
$data[] = $parser->parse($this->getNextEmbedBlock());
|
98 |
+
}
|
99 |
+
else
|
100 |
+
{
|
101 |
+
if (isset($values['leadspaces'])
|
102 |
+
&& ' ' == $values['leadspaces']
|
103 |
+
&& preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"\{].*?) *\:(\s+(?P<value>.+?))?\s*$#', $values['value'], $matches))
|
104 |
+
{
|
105 |
+
// this is a compact notation element, add to next block and parse
|
106 |
+
$c = $this->getRealCurrentLineNb();
|
107 |
+
$parser = new sfYamlParser($c);
|
108 |
+
$parser->refs =& $this->refs;
|
109 |
+
|
110 |
+
$block = $values['value'];
|
111 |
+
if (!$this->isNextLineIndented())
|
112 |
+
{
|
113 |
+
$block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
|
114 |
+
}
|
115 |
+
|
116 |
+
$data[] = $parser->parse($block);
|
117 |
+
}
|
118 |
+
else
|
119 |
+
{
|
120 |
+
$data[] = $this->parseValue($values['value']);
|
121 |
+
}
|
122 |
+
}
|
123 |
+
}
|
124 |
+
else if (preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"].*?) *\:(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
125 |
+
{
|
126 |
+
$key = sfYamlInline::parseScalar($values['key']);
|
127 |
+
|
128 |
+
if ('<<' === $key)
|
129 |
+
{
|
130 |
+
if (isset($values['value']) && '*' === substr($values['value'], 0, 1))
|
131 |
+
{
|
132 |
+
$isInPlace = substr($values['value'], 1);
|
133 |
+
if (!array_key_exists($isInPlace, $this->refs))
|
134 |
+
{
|
135 |
+
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
136 |
+
}
|
137 |
+
}
|
138 |
+
else
|
139 |
+
{
|
140 |
+
if (isset($values['value']) && $values['value'] !== '')
|
141 |
+
{
|
142 |
+
$value = $values['value'];
|
143 |
+
}
|
144 |
+
else
|
145 |
+
{
|
146 |
+
$value = $this->getNextEmbedBlock();
|
147 |
+
}
|
148 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
149 |
+
$parser = new sfYamlParser($c);
|
150 |
+
$parser->refs =& $this->refs;
|
151 |
+
$parsed = $parser->parse($value);
|
152 |
+
|
153 |
+
$merged = array();
|
154 |
+
if (!is_array($parsed))
|
155 |
+
{
|
156 |
+
throw new InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
157 |
+
}
|
158 |
+
else if (isset($parsed[0]))
|
159 |
+
{
|
160 |
+
// Numeric array, merge individual elements
|
161 |
+
foreach (array_reverse($parsed) as $parsedItem)
|
162 |
+
{
|
163 |
+
if (!is_array($parsedItem))
|
164 |
+
{
|
165 |
+
throw new InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem));
|
166 |
+
}
|
167 |
+
$merged = array_merge($parsedItem, $merged);
|
168 |
+
}
|
169 |
+
}
|
170 |
+
else
|
171 |
+
{
|
172 |
+
// Associative array, merge
|
173 |
+
$merged = array_merge($merge, $parsed);
|
174 |
+
}
|
175 |
+
|
176 |
+
$isProcessed = $merged;
|
177 |
+
}
|
178 |
+
}
|
179 |
+
else if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
180 |
+
{
|
181 |
+
$isRef = $matches['ref'];
|
182 |
+
$values['value'] = $matches['value'];
|
183 |
+
}
|
184 |
+
|
185 |
+
if ($isProcessed)
|
186 |
+
{
|
187 |
+
// Merge keys
|
188 |
+
$data = $isProcessed;
|
189 |
+
}
|
190 |
+
// hash
|
191 |
+
else if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
192 |
+
{
|
193 |
+
// if next line is less indented or equal, then it means that the current value is null
|
194 |
+
if ($this->isNextLineIndented())
|
195 |
+
{
|
196 |
+
$data[$key] = null;
|
197 |
+
}
|
198 |
+
else
|
199 |
+
{
|
200 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
201 |
+
$parser = new sfYamlParser($c);
|
202 |
+
$parser->refs =& $this->refs;
|
203 |
+
$data[$key] = $parser->parse($this->getNextEmbedBlock());
|
204 |
+
}
|
205 |
+
}
|
206 |
+
else
|
207 |
+
{
|
208 |
+
if ($isInPlace)
|
209 |
+
{
|
210 |
+
$data = $this->refs[$isInPlace];
|
211 |
+
}
|
212 |
+
else
|
213 |
+
{
|
214 |
+
$data[$key] = $this->parseValue($values['value']);
|
215 |
+
}
|
216 |
+
}
|
217 |
+
}
|
218 |
+
else
|
219 |
+
{
|
220 |
+
// 1-liner followed by newline
|
221 |
+
if (2 == count($this->lines) && empty($this->lines[1]))
|
222 |
+
{
|
223 |
+
$value = sfYamlInline::load($this->lines[0]);
|
224 |
+
if (is_array($value))
|
225 |
+
{
|
226 |
+
$first = reset($value);
|
227 |
+
if ('*' === substr($first, 0, 1))
|
228 |
+
{
|
229 |
+
$data = array();
|
230 |
+
foreach ($value as $alias)
|
231 |
+
{
|
232 |
+
$data[] = $this->refs[substr($alias, 1)];
|
233 |
+
}
|
234 |
+
$value = $data;
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
if (isset($mbEncoding))
|
239 |
+
{
|
240 |
+
mb_internal_encoding($mbEncoding);
|
241 |
+
}
|
242 |
+
|
243 |
+
return $value;
|
244 |
+
}
|
245 |
+
|
246 |
+
switch (preg_last_error())
|
247 |
+
{
|
248 |
+
case PREG_INTERNAL_ERROR:
|
249 |
+
$error = 'Internal PCRE error on line';
|
250 |
+
break;
|
251 |
+
case PREG_BACKTRACK_LIMIT_ERROR:
|
252 |
+
$error = 'pcre.backtrack_limit reached on line';
|
253 |
+
break;
|
254 |
+
case PREG_RECURSION_LIMIT_ERROR:
|
255 |
+
$error = 'pcre.recursion_limit reached on line';
|
256 |
+
break;
|
257 |
+
case PREG_BAD_UTF8_ERROR:
|
258 |
+
$error = 'Malformed UTF-8 data on line';
|
259 |
+
break;
|
260 |
+
case PREG_BAD_UTF8_OFFSET_ERROR:
|
261 |
+
$error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point on line';
|
262 |
+
break;
|
263 |
+
default:
|
264 |
+
$error = 'Unable to parse line';
|
265 |
+
}
|
266 |
+
|
267 |
+
throw new InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
268 |
+
}
|
269 |
+
|
270 |
+
if ($isRef)
|
271 |
+
{
|
272 |
+
$this->refs[$isRef] = end($data);
|
273 |
+
}
|
274 |
+
}
|
275 |
+
|
276 |
+
if (isset($mbEncoding))
|
277 |
+
{
|
278 |
+
mb_internal_encoding($mbEncoding);
|
279 |
+
}
|
280 |
+
|
281 |
+
return empty($data) ? null : $data;
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Returns the current line number (takes the offset into account).
|
286 |
+
*
|
287 |
+
* @return integer The current line number
|
288 |
+
*/
|
289 |
+
protected function getRealCurrentLineNb()
|
290 |
+
{
|
291 |
+
return $this->currentLineNb + $this->offset;
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Returns the current line indentation.
|
296 |
+
*
|
297 |
+
* @return integer The current line indentation
|
298 |
+
*/
|
299 |
+
protected function getCurrentLineIndentation()
|
300 |
+
{
|
301 |
+
return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Returns the next embed block of YAML.
|
306 |
+
*
|
307 |
+
* @param integer $indentation The indent level at which the block is to be read, or null for default
|
308 |
+
*
|
309 |
+
* @return string A YAML string
|
310 |
+
*/
|
311 |
+
protected function getNextEmbedBlock($indentation = null)
|
312 |
+
{
|
313 |
+
$this->moveToNextLine();
|
314 |
+
|
315 |
+
if (null === $indentation)
|
316 |
+
{
|
317 |
+
$newIndent = $this->getCurrentLineIndentation();
|
318 |
+
|
319 |
+
if (!$this->isCurrentLineEmpty() && 0 == $newIndent)
|
320 |
+
{
|
321 |
+
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
322 |
+
}
|
323 |
+
}
|
324 |
+
else
|
325 |
+
{
|
326 |
+
$newIndent = $indentation;
|
327 |
+
}
|
328 |
+
|
329 |
+
$data = array(substr($this->currentLine, $newIndent));
|
330 |
+
|
331 |
+
while ($this->moveToNextLine())
|
332 |
+
{
|
333 |
+
if ($this->isCurrentLineEmpty())
|
334 |
+
{
|
335 |
+
if ($this->isCurrentLineBlank())
|
336 |
+
{
|
337 |
+
$data[] = substr($this->currentLine, $newIndent);
|
338 |
+
}
|
339 |
+
|
340 |
+
continue;
|
341 |
+
}
|
342 |
+
|
343 |
+
$indent = $this->getCurrentLineIndentation();
|
344 |
+
|
345 |
+
if (preg_match('#^(?P<text> *)$#', $this->currentLine, $match))
|
346 |
+
{
|
347 |
+
// empty line
|
348 |
+
$data[] = $match['text'];
|
349 |
+
}
|
350 |
+
else if ($indent >= $newIndent)
|
351 |
+
{
|
352 |
+
$data[] = substr($this->currentLine, $newIndent);
|
353 |
+
}
|
354 |
+
else if (0 == $indent)
|
355 |
+
{
|
356 |
+
$this->moveToPreviousLine();
|
357 |
+
|
358 |
+
break;
|
359 |
+
}
|
360 |
+
else
|
361 |
+
{
|
362 |
+
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
363 |
+
}
|
364 |
+
}
|
365 |
+
|
366 |
+
return implode("\n", $data);
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* Moves the parser to the next line.
|
371 |
+
*/
|
372 |
+
protected function moveToNextLine()
|
373 |
+
{
|
374 |
+
if ($this->currentLineNb >= count($this->lines) - 1)
|
375 |
+
{
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
|
379 |
+
$this->currentLine = $this->lines[++$this->currentLineNb];
|
380 |
+
|
381 |
+
return true;
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Moves the parser to the previous line.
|
386 |
+
*/
|
387 |
+
protected function moveToPreviousLine()
|
388 |
+
{
|
389 |
+
$this->currentLine = $this->lines[--$this->currentLineNb];
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Parses a YAML value.
|
394 |
+
*
|
395 |
+
* @param string $value A YAML value
|
396 |
+
*
|
397 |
+
* @return mixed A PHP value
|
398 |
+
*/
|
399 |
+
protected function parseValue($value)
|
400 |
+
{
|
401 |
+
if ('*' === substr($value, 0, 1))
|
402 |
+
{
|
403 |
+
if (false !== $pos = strpos($value, '#'))
|
404 |
+
{
|
405 |
+
$value = substr($value, 1, $pos - 2);
|
406 |
+
}
|
407 |
+
else
|
408 |
+
{
|
409 |
+
$value = substr($value, 1);
|
410 |
+
}
|
411 |
+
|
412 |
+
if (!array_key_exists($value, $this->refs))
|
413 |
+
{
|
414 |
+
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
|
415 |
+
}
|
416 |
+
return $this->refs[$value];
|
417 |
+
}
|
418 |
+
|
419 |
+
if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches))
|
420 |
+
{
|
421 |
+
$modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
|
422 |
+
|
423 |
+
return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
|
424 |
+
}
|
425 |
+
else
|
426 |
+
{
|
427 |
+
return sfYamlInline::load($value);
|
428 |
+
}
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Parses a folded scalar.
|
433 |
+
*
|
434 |
+
* @param string $separator The separator that was used to begin this folded scalar (| or >)
|
435 |
+
* @param string $indicator The indicator that was used to begin this folded scalar (+ or -)
|
436 |
+
* @param integer $indentation The indentation that was used to begin this folded scalar
|
437 |
+
*
|
438 |
+
* @return string The text value
|
439 |
+
*/
|
440 |
+
protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
|
441 |
+
{
|
442 |
+
$separator = '|' == $separator ? "\n" : ' ';
|
443 |
+
$text = '';
|
444 |
+
|
445 |
+
$notEOF = $this->moveToNextLine();
|
446 |
+
|
447 |
+
while ($notEOF && $this->isCurrentLineBlank())
|
448 |
+
{
|
449 |
+
$text .= "\n";
|
450 |
+
|
451 |
+
$notEOF = $this->moveToNextLine();
|
452 |
+
}
|
453 |
+
|
454 |
+
if (!$notEOF)
|
455 |
+
{
|
456 |
+
return '';
|
457 |
+
}
|
458 |
+
|
459 |
+
if (!preg_match('#^(?P<indent>'.($indentation ? str_repeat(' ', $indentation) : ' +').')(?P<text>.*)$#', $this->currentLine, $matches))
|
460 |
+
{
|
461 |
+
$this->moveToPreviousLine();
|
462 |
+
|
463 |
+
return '';
|
464 |
+
}
|
465 |
+
|
466 |
+
$textIndent = $matches['indent'];
|
467 |
+
$previousIndent = 0;
|
468 |
+
|
469 |
+
$text .= $matches['text'].$separator;
|
470 |
+
while ($this->currentLineNb + 1 < count($this->lines))
|
471 |
+
{
|
472 |
+
$this->moveToNextLine();
|
473 |
+
|
474 |
+
if (preg_match('#^(?P<indent> {'.strlen($textIndent).',})(?P<text>.+)$#', $this->currentLine, $matches))
|
475 |
+
{
|
476 |
+
if (' ' == $separator && $previousIndent != $matches['indent'])
|
477 |
+
{
|
478 |
+
$text = substr($text, 0, -1)."\n";
|
479 |
+
}
|
480 |
+
$previousIndent = $matches['indent'];
|
481 |
+
|
482 |
+
$text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)).$matches['text'].($diff ? "\n" : $separator);
|
483 |
+
}
|
484 |
+
else if (preg_match('#^(?P<text> *)$#', $this->currentLine, $matches))
|
485 |
+
{
|
486 |
+
$text .= preg_replace('#^ {1,'.strlen($textIndent).'}#', '', $matches['text'])."\n";
|
487 |
+
}
|
488 |
+
else
|
489 |
+
{
|
490 |
+
$this->moveToPreviousLine();
|
491 |
+
|
492 |
+
break;
|
493 |
+
}
|
494 |
+
}
|
495 |
+
|
496 |
+
if (' ' == $separator)
|
497 |
+
{
|
498 |
+
// replace last separator by a newline
|
499 |
+
$text = preg_replace('/ (\n*)$/', "\n$1", $text);
|
500 |
+
}
|
501 |
+
|
502 |
+
switch ($indicator)
|
503 |
+
{
|
504 |
+
case '':
|
505 |
+
$text = preg_replace('#\n+$#s', "\n", $text);
|
506 |
+
break;
|
507 |
+
case '+':
|
508 |
+
break;
|
509 |
+
case '-':
|
510 |
+
$text = preg_replace('#\n+$#s', '', $text);
|
511 |
+
break;
|
512 |
+
}
|
513 |
+
|
514 |
+
return $text;
|
515 |
+
}
|
516 |
+
|
517 |
+
/**
|
518 |
+
* Returns true if the next line is indented.
|
519 |
+
*
|
520 |
+
* @return Boolean Returns true if the next line is indented, false otherwise
|
521 |
+
*/
|
522 |
+
protected function isNextLineIndented()
|
523 |
+
{
|
524 |
+
$currentIndentation = $this->getCurrentLineIndentation();
|
525 |
+
$notEOF = $this->moveToNextLine();
|
526 |
+
|
527 |
+
while ($notEOF && $this->isCurrentLineEmpty())
|
528 |
+
{
|
529 |
+
$notEOF = $this->moveToNextLine();
|
530 |
+
}
|
531 |
+
|
532 |
+
if (false === $notEOF)
|
533 |
+
{
|
534 |
+
return false;
|
535 |
+
}
|
536 |
+
|
537 |
+
$ret = false;
|
538 |
+
if ($this->getCurrentLineIndentation() <= $currentIndentation)
|
539 |
+
{
|
540 |
+
$ret = true;
|
541 |
+
}
|
542 |
+
|
543 |
+
$this->moveToPreviousLine();
|
544 |
+
|
545 |
+
return $ret;
|
546 |
+
}
|
547 |
+
|
548 |
+
/**
|
549 |
+
* Returns true if the current line is blank or if it is a comment line.
|
550 |
+
*
|
551 |
+
* @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
|
552 |
+
*/
|
553 |
+
protected function isCurrentLineEmpty()
|
554 |
+
{
|
555 |
+
return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
|
556 |
+
}
|
557 |
+
|
558 |
+
/**
|
559 |
+
* Returns true if the current line is blank.
|
560 |
+
*
|
561 |
+
* @return Boolean Returns true if the current line is blank, false otherwise
|
562 |
+
*/
|
563 |
+
protected function isCurrentLineBlank()
|
564 |
+
{
|
565 |
+
return '' == trim($this->currentLine, ' ');
|
566 |
+
}
|
567 |
+
|
568 |
+
/**
|
569 |
+
* Returns true if the current line is a comment line.
|
570 |
+
*
|
571 |
+
* @return Boolean Returns true if the current line is a comment line, false otherwise
|
572 |
+
*/
|
573 |
+
protected function isCurrentLineComment()
|
574 |
+
{
|
575 |
+
//checking explicitly the first char of the trim is faster than loops or strpos
|
576 |
+
$ltrimmedLine = ltrim($this->currentLine, ' ');
|
577 |
+
return $ltrimmedLine[0] === '#';
|
578 |
+
}
|
579 |
+
|
580 |
+
/**
|
581 |
+
* Cleanups a YAML string to be parsed.
|
582 |
+
*
|
583 |
+
* @param string $value The input YAML string
|
584 |
+
*
|
585 |
+
* @return string A cleaned up YAML string
|
586 |
+
*/
|
587 |
+
protected function cleanup($value)
|
588 |
+
{
|
589 |
+
$value = str_replace(array("\r\n", "\r"), "\n", $value);
|
590 |
+
|
591 |
+
if (!preg_match("#\n$#", $value))
|
592 |
+
{
|
593 |
+
$value .= "\n";
|
594 |
+
}
|
595 |
+
|
596 |
+
// strip YAML header
|
597 |
+
$count = 0;
|
598 |
+
$value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#s', '', $value, -1, $count);
|
599 |
+
$this->offset += $count;
|
600 |
+
|
601 |
+
// remove leading comments and/or ---
|
602 |
+
$trimmedValue = preg_replace('#^((\#.*?\n)|(\-\-\-.*?\n))*#s', '', $value, -1, $count);
|
603 |
+
if ($count == 1)
|
604 |
+
{
|
605 |
+
// items have been removed, update the offset
|
606 |
+
$this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
|
607 |
+
$value = $trimmedValue;
|
608 |
+
}
|
609 |
+
|
610 |
+
return $value;
|
611 |
+
}
|
612 |
+
}
|
app/libs/aws/sdk.class.php
CHANGED
@@ -1,1417 +1,1472 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
|
18 |
-
/*%******************************************************************************************%*/
|
19 |
-
// CORE DEPENDENCIES
|
20 |
-
|
21 |
-
// Look for include file in the same directory (e.g. `./config.inc.php`).
|
22 |
-
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php'))
|
23 |
-
{
|
24 |
-
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php';
|
25 |
-
}
|
26 |
-
// Fallback to `~/.aws/sdk/config.inc.php`
|
27 |
-
elseif (getenv('HOME') && file_exists(getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php'))
|
28 |
-
{
|
29 |
-
include_once getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php';
|
30 |
-
}
|
31 |
-
|
32 |
-
|
33 |
-
/*%******************************************************************************************%*/
|
34 |
-
// EXCEPTIONS
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Default CFRuntime Exception.
|
38 |
-
*/
|
39 |
-
class CFRuntime_Exception extends Exception {}
|
40 |
-
|
41 |
-
|
42 |
-
/*%******************************************************************************************%*/
|
43 |
-
// DETERMINE WHAT ENVIRONMENT DATA TO ADD TO THE USERAGENT FOR METRIC TRACKING
|
44 |
-
|
45 |
-
/*
|
46 |
-
Define a temporary callback function for this calculation. Get the PHP version and any
|
47 |
-
required/optional extensions that are leveraged.
|
48 |
-
|
49 |
-
Tracking this data gives Amazon better metrics about what configurations are being used
|
50 |
-
so that forward-looking plans for the code can be made with more certainty (e.g. What
|
51 |
-
version of PHP are most people running? Do they tend to have the latest PCRE?).
|
52 |
-
*/
|
53 |
-
function __aws_sdk_ua_callback()
|
54 |
-
{
|
55 |
-
$ua_append = '';
|
56 |
-
$extensions = get_loaded_extensions();
|
57 |
-
$sorted_extensions = array();
|
58 |
-
|
59 |
-
if ($extensions)
|
60 |
-
{
|
61 |
-
foreach ($extensions as $extension)
|
62 |
-
{
|
63 |
-
if ($extension === 'curl' && function_exists('curl_version'))
|
64 |
-
{
|
65 |
-
$curl_version = curl_version();
|
66 |
-
$sorted_extensions[strtolower($extension)] = $curl_version['version'];
|
67 |
-
}
|
68 |
-
elseif ($extension === 'pcre' && defined('PCRE_VERSION'))
|
69 |
-
{
|
70 |
-
$pcre_version = explode(' ', PCRE_VERSION);
|
71 |
-
$sorted_extensions[strtolower($extension)] = $pcre_version[0];
|
72 |
-
}
|
73 |
-
elseif ($extension === 'openssl' && defined('OPENSSL_VERSION_TEXT'))
|
74 |
-
{
|
75 |
-
$openssl_version = explode(' ', OPENSSL_VERSION_TEXT);
|
76 |
-
$sorted_extensions[strtolower($extension)] = $openssl_version[1];
|
77 |
-
}
|
78 |
-
else
|
79 |
-
{
|
80 |
-
$sorted_extensions[strtolower($extension)] = phpversion($extension);
|
81 |
-
}
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
foreach (array('simplexml', 'json', 'pcre', 'spl', 'curl', 'openssl', 'apc', 'xcache', 'memcache', 'memcached', 'pdo', 'pdo_sqlite', 'sqlite', 'sqlite3', 'zlib', 'xdebug') as $ua_ext)
|
86 |
-
{
|
87 |
-
if (isset($sorted_extensions[$ua_ext]) && $sorted_extensions[$ua_ext])
|
88 |
-
{
|
89 |
-
$ua_append .= ' ' . $ua_ext . '/' . $sorted_extensions[$ua_ext];
|
90 |
-
}
|
91 |
-
elseif (isset($sorted_extensions[$ua_ext]))
|
92 |
-
{
|
93 |
-
$ua_append .= ' ' . $ua_ext . '/0';
|
94 |
-
}
|
95 |
-
}
|
96 |
-
|
97 |
-
return $ua_append;
|
98 |
-
}
|
99 |
-
|
100 |
-
|
101 |
-
/*%******************************************************************************************%*/
|
102 |
-
// INTERMEDIARY CONSTANTS
|
103 |
-
|
104 |
-
define('CFRUNTIME_NAME', 'aws-sdk-php');
|
105 |
-
define('CFRUNTIME_VERSION', '1.3.
|
106 |
-
// define('CFRUNTIME_BUILD', gmdate('YmdHis', filemtime(__FILE__))); // @todo: Hardcode for release.
|
107 |
-
define('CFRUNTIME_BUILD', '
|
108 |
-
define('CFRUNTIME_USERAGENT', CFRUNTIME_NAME . '/' . CFRUNTIME_VERSION . ' PHP/' . PHP_VERSION . ' ' . php_uname('s') . '/' . php_uname('r') . ' Arch/' . php_uname('m') . ' SAPI/' . php_sapi_name() . ' Integer/' . PHP_INT_MAX . ' Build/' . CFRUNTIME_BUILD . __aws_sdk_ua_callback());
|
109 |
-
|
110 |
-
|
111 |
-
/*%******************************************************************************************%*/
|
112 |
-
// CLASS
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Core functionality and default settings shared across all SDK classes. All methods and properties in this
|
116 |
-
* class are inherited by the service-specific classes.
|
117 |
-
*
|
118 |
-
* @version 2011.
|
119 |
-
* @license See the included NOTICE.md file for more information.
|
120 |
-
* @copyright See the included NOTICE.md file for more information.
|
121 |
-
* @link http://aws.amazon.com/php/ PHP Developer Center
|
122 |
-
*/
|
123 |
-
class CFRuntime
|
124 |
-
{
|
125 |
-
/*%******************************************************************************************%*/
|
126 |
-
// CONSTANTS
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Name of the software.
|
130 |
-
*/
|
131 |
-
const NAME = CFRUNTIME_NAME;
|
132 |
-
|
133 |
-
/**
|
134 |
-
* Version of the software.
|
135 |
-
*/
|
136 |
-
const VERSION = CFRUNTIME_VERSION;
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Build ID of the software.
|
140 |
-
*/
|
141 |
-
const BUILD = CFRUNTIME_BUILD;
|
142 |
-
|
143 |
-
/**
|
144 |
-
* User agent string used to identify the software.
|
145 |
-
*/
|
146 |
-
const USERAGENT = CFRUNTIME_USERAGENT;
|
147 |
-
|
148 |
-
|
149 |
-
/*%******************************************************************************************%*/
|
150 |
-
// PROPERTIES
|
151 |
-
|
152 |
-
/**
|
153 |
-
* The Amazon API Key.
|
154 |
-
*/
|
155 |
-
public $key;
|
156 |
-
|
157 |
-
/**
|
158 |
-
* The Amazon API Secret Key.
|
159 |
-
*/
|
160 |
-
public $secret_key;
|
161 |
-
|
162 |
-
/**
|
163 |
-
* The Amazon Authentication Token.
|
164 |
-
*/
|
165 |
-
public $auth_token;
|
166 |
-
|
167 |
-
/**
|
168 |
-
* The Amazon Account ID, without hyphens.
|
169 |
-
*/
|
170 |
-
public $account_id;
|
171 |
-
|
172 |
-
/**
|
173 |
-
* The Amazon Associates ID.
|
174 |
-
*/
|
175 |
-
public $assoc_id;
|
176 |
-
|
177 |
-
/**
|
178 |
-
* Handle for the utility functions.
|
179 |
-
*/
|
180 |
-
public $util;
|
181 |
-
|
182 |
-
/**
|
183 |
-
* An identifier for the current AWS service.
|
184 |
-
*/
|
185 |
-
public $service = null;
|
186 |
-
|
187 |
-
/**
|
188 |
-
* The supported API version.
|
189 |
-
*/
|
190 |
-
public $api_version = null;
|
191 |
-
|
192 |
-
/**
|
193 |
-
* The state of whether auth should be handled as AWS Query.
|
194 |
-
*/
|
195 |
-
public $use_aws_query = true;
|
196 |
-
|
197 |
-
/**
|
198 |
-
* The default class to use for utilities (defaults to <CFUtilities>).
|
199 |
-
*/
|
200 |
-
public $utilities_class = 'CFUtilities';
|
201 |
-
|
202 |
-
/**
|
203 |
-
* The default class to use for HTTP requests (defaults to <CFRequest>).
|
204 |
-
*/
|
205 |
-
public $request_class = 'CFRequest';
|
206 |
-
|
207 |
-
/**
|
208 |
-
* The default class to use for HTTP responses (defaults to <CFResponse>).
|
209 |
-
*/
|
210 |
-
public $response_class = 'CFResponse';
|
211 |
-
|
212 |
-
/**
|
213 |
-
* The default class to use for parsing XML (defaults to <CFSimpleXML>).
|
214 |
-
*/
|
215 |
-
public $parser_class = 'CFSimpleXML';
|
216 |
-
|
217 |
-
/**
|
218 |
-
* The default class to use for handling batch requests (defaults to <CFBatchRequest>).
|
219 |
-
*/
|
220 |
-
public $batch_class = 'CFBatchRequest';
|
221 |
-
|
222 |
-
/**
|
223 |
-
* The number of seconds to adjust the request timestamp by (defaults to 0).
|
224 |
-
*/
|
225 |
-
public $adjust_offset = 0;
|
226 |
-
|
227 |
-
/**
|
228 |
-
* The state of SSL/HTTPS use.
|
229 |
-
*/
|
230 |
-
public $use_ssl = true;
|
231 |
-
|
232 |
-
/**
|
233 |
-
* The
|
234 |
-
*/
|
235 |
-
public $
|
236 |
-
|
237 |
-
/**
|
238 |
-
* The
|
239 |
-
*/
|
240 |
-
public $
|
241 |
-
|
242 |
-
/**
|
243 |
-
* The
|
244 |
-
*/
|
245 |
-
public $
|
246 |
-
|
247 |
-
/**
|
248 |
-
* The
|
249 |
-
*/
|
250 |
-
public $
|
251 |
-
|
252 |
-
/**
|
253 |
-
* The alternate
|
254 |
-
*/
|
255 |
-
public $
|
256 |
-
|
257 |
-
/**
|
258 |
-
* The
|
259 |
-
*/
|
260 |
-
public $
|
261 |
-
|
262 |
-
/**
|
263 |
-
* The
|
264 |
-
*/
|
265 |
-
public $
|
266 |
-
|
267 |
-
/**
|
268 |
-
* The caching
|
269 |
-
*/
|
270 |
-
public $
|
271 |
-
|
272 |
-
/**
|
273 |
-
*
|
274 |
-
*/
|
275 |
-
public $
|
276 |
-
|
277 |
-
/**
|
278 |
-
*
|
279 |
-
*/
|
280 |
-
public $
|
281 |
-
|
282 |
-
/**
|
283 |
-
* The
|
284 |
-
*/
|
285 |
-
public $
|
286 |
-
|
287 |
-
/**
|
288 |
-
* The current instantiated
|
289 |
-
*/
|
290 |
-
public $
|
291 |
-
|
292 |
-
/**
|
293 |
-
* The
|
294 |
-
*/
|
295 |
-
public $
|
296 |
-
|
297 |
-
/**
|
298 |
-
* The
|
299 |
-
*/
|
300 |
-
public $
|
301 |
-
|
302 |
-
/**
|
303 |
-
* The state of
|
304 |
-
*/
|
305 |
-
public $
|
306 |
-
|
307 |
-
/**
|
308 |
-
* The state of the
|
309 |
-
*/
|
310 |
-
public $
|
311 |
-
|
312 |
-
/**
|
313 |
-
* The
|
314 |
-
*/
|
315 |
-
public $
|
316 |
-
|
317 |
-
/**
|
318 |
-
* The
|
319 |
-
*/
|
320 |
-
public $
|
321 |
-
|
322 |
-
/**
|
323 |
-
* The user-defined callback function to call when a stream is
|
324 |
-
*/
|
325 |
-
public $
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
*
|
338 |
-
*
|
339 |
-
*
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
$this->
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
*
|
404 |
-
*
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
*
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
*
|
545 |
-
*
|
546 |
-
*
|
547 |
-
*
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
*
|
560 |
-
*
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
*
|
630 |
-
*
|
631 |
-
*
|
632 |
-
*
|
633 |
-
*
|
634 |
-
*
|
635 |
-
*
|
636 |
-
*
|
637 |
-
* <li>The
|
638 |
-
*
|
639 |
-
*
|
640 |
-
* @
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
/**
|
653 |
-
*
|
654 |
-
*
|
655 |
-
*
|
656 |
-
* The
|
657 |
-
*
|
658 |
-
*
|
659 |
-
*
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
*
|
685 |
-
*
|
686 |
-
*
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
*
|
700 |
-
*
|
701 |
-
*
|
702 |
-
*
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
*
|
715 |
-
*
|
716 |
-
*
|
717 |
-
*
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
*
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
$
|
752 |
-
$
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
$
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
$
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
$
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
$
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
{
|
858 |
-
$
|
859 |
-
}
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
$
|
890 |
-
|
891 |
-
$
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
$
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
//
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
*
|
1107 |
-
*
|
1108 |
-
* @
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
$this->
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
if (
|
1181 |
-
{
|
1182 |
-
$
|
1183 |
-
}
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
|
1190 |
-
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
|
1215 |
-
|
1216 |
-
|
1217 |
-
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
1233 |
-
|
1234 |
-
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
|
1264 |
-
|
1265 |
-
|
1266 |
-
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
|
1271 |
-
|
1272 |
-
|
1273 |
-
|
1274 |
-
|
1275 |
-
|
1276 |
-
|
1277 |
-
}
|
1278 |
-
|
1279 |
-
|
1280 |
-
|
1281 |
-
$
|
1282 |
-
$
|
1283 |
-
|
1284 |
-
|
1285 |
-
|
1286 |
-
$
|
1287 |
-
|
1288 |
-
|
1289 |
-
|
1290 |
-
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
1308 |
-
|
1309 |
-
|
1310 |
-
|
1311 |
-
$response
|
1312 |
-
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
-
*
|
1324 |
-
*
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
|
1337 |
-
|
1338 |
-
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
/**
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
$
|
1367 |
-
|
1368 |
-
//
|
1369 |
-
if (
|
1370 |
-
{
|
1371 |
-
$
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
1394 |
-
|
1395 |
-
|
1396 |
-
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CORE DEPENDENCIES
|
20 |
+
|
21 |
+
// Look for include file in the same directory (e.g. `./config.inc.php`).
|
22 |
+
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php'))
|
23 |
+
{
|
24 |
+
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php';
|
25 |
+
}
|
26 |
+
// Fallback to `~/.aws/sdk/config.inc.php`
|
27 |
+
elseif (getenv('HOME') && file_exists(getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php'))
|
28 |
+
{
|
29 |
+
include_once getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php';
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
/*%******************************************************************************************%*/
|
34 |
+
// EXCEPTIONS
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Default CFRuntime Exception.
|
38 |
+
*/
|
39 |
+
class CFRuntime_Exception extends Exception {}
|
40 |
+
|
41 |
+
|
42 |
+
/*%******************************************************************************************%*/
|
43 |
+
// DETERMINE WHAT ENVIRONMENT DATA TO ADD TO THE USERAGENT FOR METRIC TRACKING
|
44 |
+
|
45 |
+
/*
|
46 |
+
Define a temporary callback function for this calculation. Get the PHP version and any
|
47 |
+
required/optional extensions that are leveraged.
|
48 |
+
|
49 |
+
Tracking this data gives Amazon better metrics about what configurations are being used
|
50 |
+
so that forward-looking plans for the code can be made with more certainty (e.g. What
|
51 |
+
version of PHP are most people running? Do they tend to have the latest PCRE?).
|
52 |
+
*/
|
53 |
+
function __aws_sdk_ua_callback()
|
54 |
+
{
|
55 |
+
$ua_append = '';
|
56 |
+
$extensions = get_loaded_extensions();
|
57 |
+
$sorted_extensions = array();
|
58 |
+
|
59 |
+
if ($extensions)
|
60 |
+
{
|
61 |
+
foreach ($extensions as $extension)
|
62 |
+
{
|
63 |
+
if ($extension === 'curl' && function_exists('curl_version'))
|
64 |
+
{
|
65 |
+
$curl_version = curl_version();
|
66 |
+
$sorted_extensions[strtolower($extension)] = $curl_version['version'];
|
67 |
+
}
|
68 |
+
elseif ($extension === 'pcre' && defined('PCRE_VERSION'))
|
69 |
+
{
|
70 |
+
$pcre_version = explode(' ', PCRE_VERSION);
|
71 |
+
$sorted_extensions[strtolower($extension)] = $pcre_version[0];
|
72 |
+
}
|
73 |
+
elseif ($extension === 'openssl' && defined('OPENSSL_VERSION_TEXT'))
|
74 |
+
{
|
75 |
+
$openssl_version = explode(' ', OPENSSL_VERSION_TEXT);
|
76 |
+
$sorted_extensions[strtolower($extension)] = $openssl_version[1];
|
77 |
+
}
|
78 |
+
else
|
79 |
+
{
|
80 |
+
$sorted_extensions[strtolower($extension)] = phpversion($extension);
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
foreach (array('simplexml', 'json', 'pcre', 'spl', 'curl', 'openssl', 'apc', 'xcache', 'memcache', 'memcached', 'pdo', 'pdo_sqlite', 'sqlite', 'sqlite3', 'zlib', 'xdebug') as $ua_ext)
|
86 |
+
{
|
87 |
+
if (isset($sorted_extensions[$ua_ext]) && $sorted_extensions[$ua_ext])
|
88 |
+
{
|
89 |
+
$ua_append .= ' ' . $ua_ext . '/' . $sorted_extensions[$ua_ext];
|
90 |
+
}
|
91 |
+
elseif (isset($sorted_extensions[$ua_ext]))
|
92 |
+
{
|
93 |
+
$ua_append .= ' ' . $ua_ext . '/0';
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
return $ua_append;
|
98 |
+
}
|
99 |
+
|
100 |
+
|
101 |
+
/*%******************************************************************************************%*/
|
102 |
+
// INTERMEDIARY CONSTANTS
|
103 |
+
|
104 |
+
define('CFRUNTIME_NAME', 'aws-sdk-php');
|
105 |
+
define('CFRUNTIME_VERSION', '1.3.5');
|
106 |
+
// define('CFRUNTIME_BUILD', gmdate('YmdHis', filemtime(__FILE__))); // @todo: Hardcode for release.
|
107 |
+
define('CFRUNTIME_BUILD', '20110621180731');
|
108 |
+
define('CFRUNTIME_USERAGENT', CFRUNTIME_NAME . '/' . CFRUNTIME_VERSION . ' PHP/' . PHP_VERSION . ' ' . php_uname('s') . '/' . php_uname('r') . ' Arch/' . php_uname('m') . ' SAPI/' . php_sapi_name() . ' Integer/' . PHP_INT_MAX . ' Build/' . CFRUNTIME_BUILD . __aws_sdk_ua_callback());
|
109 |
+
|
110 |
+
|
111 |
+
/*%******************************************************************************************%*/
|
112 |
+
// CLASS
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Core functionality and default settings shared across all SDK classes. All methods and properties in this
|
116 |
+
* class are inherited by the service-specific classes.
|
117 |
+
*
|
118 |
+
* @version 2011.06.07
|
119 |
+
* @license See the included NOTICE.md file for more information.
|
120 |
+
* @copyright See the included NOTICE.md file for more information.
|
121 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
122 |
+
*/
|
123 |
+
class CFRuntime
|
124 |
+
{
|
125 |
+
/*%******************************************************************************************%*/
|
126 |
+
// CONSTANTS
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Name of the software.
|
130 |
+
*/
|
131 |
+
const NAME = CFRUNTIME_NAME;
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Version of the software.
|
135 |
+
*/
|
136 |
+
const VERSION = CFRUNTIME_VERSION;
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Build ID of the software.
|
140 |
+
*/
|
141 |
+
const BUILD = CFRUNTIME_BUILD;
|
142 |
+
|
143 |
+
/**
|
144 |
+
* User agent string used to identify the software.
|
145 |
+
*/
|
146 |
+
const USERAGENT = CFRUNTIME_USERAGENT;
|
147 |
+
|
148 |
+
|
149 |
+
/*%******************************************************************************************%*/
|
150 |
+
// PROPERTIES
|
151 |
+
|
152 |
+
/**
|
153 |
+
* The Amazon API Key.
|
154 |
+
*/
|
155 |
+
public $key;
|
156 |
+
|
157 |
+
/**
|
158 |
+
* The Amazon API Secret Key.
|
159 |
+
*/
|
160 |
+
public $secret_key;
|
161 |
+
|
162 |
+
/**
|
163 |
+
* The Amazon Authentication Token.
|
164 |
+
*/
|
165 |
+
public $auth_token;
|
166 |
+
|
167 |
+
/**
|
168 |
+
* The Amazon Account ID, without hyphens.
|
169 |
+
*/
|
170 |
+
public $account_id;
|
171 |
+
|
172 |
+
/**
|
173 |
+
* The Amazon Associates ID.
|
174 |
+
*/
|
175 |
+
public $assoc_id;
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Handle for the utility functions.
|
179 |
+
*/
|
180 |
+
public $util;
|
181 |
+
|
182 |
+
/**
|
183 |
+
* An identifier for the current AWS service.
|
184 |
+
*/
|
185 |
+
public $service = null;
|
186 |
+
|
187 |
+
/**
|
188 |
+
* The supported API version.
|
189 |
+
*/
|
190 |
+
public $api_version = null;
|
191 |
+
|
192 |
+
/**
|
193 |
+
* The state of whether auth should be handled as AWS Query.
|
194 |
+
*/
|
195 |
+
public $use_aws_query = true;
|
196 |
+
|
197 |
+
/**
|
198 |
+
* The default class to use for utilities (defaults to <CFUtilities>).
|
199 |
+
*/
|
200 |
+
public $utilities_class = 'CFUtilities';
|
201 |
+
|
202 |
+
/**
|
203 |
+
* The default class to use for HTTP requests (defaults to <CFRequest>).
|
204 |
+
*/
|
205 |
+
public $request_class = 'CFRequest';
|
206 |
+
|
207 |
+
/**
|
208 |
+
* The default class to use for HTTP responses (defaults to <CFResponse>).
|
209 |
+
*/
|
210 |
+
public $response_class = 'CFResponse';
|
211 |
+
|
212 |
+
/**
|
213 |
+
* The default class to use for parsing XML (defaults to <CFSimpleXML>).
|
214 |
+
*/
|
215 |
+
public $parser_class = 'CFSimpleXML';
|
216 |
+
|
217 |
+
/**
|
218 |
+
* The default class to use for handling batch requests (defaults to <CFBatchRequest>).
|
219 |
+
*/
|
220 |
+
public $batch_class = 'CFBatchRequest';
|
221 |
+
|
222 |
+
/**
|
223 |
+
* The number of seconds to adjust the request timestamp by (defaults to 0).
|
224 |
+
*/
|
225 |
+
public $adjust_offset = 0;
|
226 |
+
|
227 |
+
/**
|
228 |
+
* The state of SSL/HTTPS use.
|
229 |
+
*/
|
230 |
+
public $use_ssl = true;
|
231 |
+
|
232 |
+
/**
|
233 |
+
* The state of SSL certificate verification.
|
234 |
+
*/
|
235 |
+
public $ssl_verification = true;
|
236 |
+
|
237 |
+
/**
|
238 |
+
* The proxy to use for connecting.
|
239 |
+
*/
|
240 |
+
public $proxy = null;
|
241 |
+
|
242 |
+
/**
|
243 |
+
* The alternate hostname to use, if any.
|
244 |
+
*/
|
245 |
+
public $hostname = null;
|
246 |
+
|
247 |
+
/**
|
248 |
+
* The state of the capability to override the hostname with <set_hostname()>.
|
249 |
+
*/
|
250 |
+
public $override_hostname = true;
|
251 |
+
|
252 |
+
/**
|
253 |
+
* The alternate port number to use, if any.
|
254 |
+
*/
|
255 |
+
public $port_number = null;
|
256 |
+
|
257 |
+
/**
|
258 |
+
* The alternate resource prefix to use, if any.
|
259 |
+
*/
|
260 |
+
public $resource_prefix = null;
|
261 |
+
|
262 |
+
/**
|
263 |
+
* The state of cache flow usage.
|
264 |
+
*/
|
265 |
+
public $use_cache_flow = false;
|
266 |
+
|
267 |
+
/**
|
268 |
+
* The caching class to use.
|
269 |
+
*/
|
270 |
+
public $cache_class = null;
|
271 |
+
|
272 |
+
/**
|
273 |
+
* The caching location to use.
|
274 |
+
*/
|
275 |
+
public $cache_location = null;
|
276 |
+
|
277 |
+
/**
|
278 |
+
* When the cache should be considered stale.
|
279 |
+
*/
|
280 |
+
public $cache_expires = null;
|
281 |
+
|
282 |
+
/**
|
283 |
+
* The state of cache compression.
|
284 |
+
*/
|
285 |
+
public $cache_compress = null;
|
286 |
+
|
287 |
+
/**
|
288 |
+
* The current instantiated cache object.
|
289 |
+
*/
|
290 |
+
public $cache_object = null;
|
291 |
+
|
292 |
+
/**
|
293 |
+
* The current instantiated batch request object.
|
294 |
+
*/
|
295 |
+
public $batch_object = null;
|
296 |
+
|
297 |
+
/**
|
298 |
+
* The internally instantiated batch request object.
|
299 |
+
*/
|
300 |
+
public $internal_batch_object = null;
|
301 |
+
|
302 |
+
/**
|
303 |
+
* The state of batch flow usage.
|
304 |
+
*/
|
305 |
+
public $use_batch_flow = false;
|
306 |
+
|
307 |
+
/**
|
308 |
+
* The state of the cache deletion setting.
|
309 |
+
*/
|
310 |
+
public $delete_cache = false;
|
311 |
+
|
312 |
+
/**
|
313 |
+
* The state of the debug mode setting.
|
314 |
+
*/
|
315 |
+
public $debug_mode = false;
|
316 |
+
|
317 |
+
/**
|
318 |
+
* The number of times to retry failed requests.
|
319 |
+
*/
|
320 |
+
public $max_retries = 3;
|
321 |
+
|
322 |
+
/**
|
323 |
+
* The user-defined callback function to call when a stream is read from.
|
324 |
+
*/
|
325 |
+
public $registered_streaming_read_callback = null;
|
326 |
+
|
327 |
+
/**
|
328 |
+
* The user-defined callback function to call when a stream is written to.
|
329 |
+
*/
|
330 |
+
public $registered_streaming_write_callback = null;
|
331 |
+
|
332 |
+
|
333 |
+
/*%******************************************************************************************%*/
|
334 |
+
// CONSTRUCTOR
|
335 |
+
|
336 |
+
/**
|
337 |
+
* The constructor. You would not normally instantiate this class directly. Rather, you would instantiate
|
338 |
+
* a service-specific class.
|
339 |
+
*
|
340 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <AWS_KEY> constant.
|
341 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <AWS_SECRET_KEY> constant.
|
342 |
+
* @param string $account_id (Optional) Your Amazon account ID without the hyphens. Required for EC2. If blank, it will look for the <AWS_ACCOUNT_ID> constant.
|
343 |
+
* @param string $assoc_id (Optional) Your Amazon Associates ID. Required for PAS. If blank, it will look for the <AWS_ASSOC_ID> constant.
|
344 |
+
* @return boolean A value of `false` if no valid values are set, otherwise `true`.
|
345 |
+
*/
|
346 |
+
public function __construct($key = null, $secret_key = null, $account_id = null, $assoc_id = null)
|
347 |
+
{
|
348 |
+
// Instantiate the utilities class.
|
349 |
+
$this->util = new $this->utilities_class();
|
350 |
+
|
351 |
+
// Determine the current service.
|
352 |
+
$this->service = get_class($this);
|
353 |
+
|
354 |
+
// Set default values
|
355 |
+
$this->key = null;
|
356 |
+
$this->secret_key = null;
|
357 |
+
$this->account_id = null;
|
358 |
+
$this->assoc_id = null;
|
359 |
+
|
360 |
+
// Set the Account ID
|
361 |
+
if ($account_id)
|
362 |
+
{
|
363 |
+
$this->account_id = $account_id;
|
364 |
+
}
|
365 |
+
elseif (defined('AWS_ACCOUNT_ID'))
|
366 |
+
{
|
367 |
+
$this->account_id = AWS_ACCOUNT_ID;
|
368 |
+
}
|
369 |
+
|
370 |
+
// Set the Associates ID
|
371 |
+
if ($assoc_id)
|
372 |
+
{
|
373 |
+
$this->assoc_id = $assoc_id;
|
374 |
+
}
|
375 |
+
elseif (defined('AWS_ASSOC_ID'))
|
376 |
+
{
|
377 |
+
$this->assoc_id = AWS_ASSOC_ID;
|
378 |
+
}
|
379 |
+
|
380 |
+
// If both a key and secret key are passed in, use those.
|
381 |
+
if ($key && $secret_key)
|
382 |
+
{
|
383 |
+
$this->key = $key;
|
384 |
+
$this->secret_key = $secret_key;
|
385 |
+
return true;
|
386 |
+
}
|
387 |
+
// If neither are passed in, look for the constants instead.
|
388 |
+
elseif (defined('AWS_KEY') && defined('AWS_SECRET_KEY'))
|
389 |
+
{
|
390 |
+
$this->key = AWS_KEY;
|
391 |
+
$this->secret_key = AWS_SECRET_KEY;
|
392 |
+
return true;
|
393 |
+
}
|
394 |
+
|
395 |
+
// Otherwise set the values to blank and return false.
|
396 |
+
else
|
397 |
+
{
|
398 |
+
throw new CFRuntime_Exception('No valid credentials were used to authenticate with AWS.');
|
399 |
+
}
|
400 |
+
}
|
401 |
+
|
402 |
+
/**
|
403 |
+
* Alternate approach to constructing a new instance. Supports chaining.
|
404 |
+
*
|
405 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <AWS_KEY> constant.
|
406 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <AWS_SECRET_KEY> constant.
|
407 |
+
* @param string $account_id (Optional) Your Amazon account ID without the hyphens. Required for EC2. If blank, it will look for the <AWS_ACCOUNT_ID> constant.
|
408 |
+
* @param string $assoc_id (Optional) Your Amazon Associates ID. Required for AAWS. If blank, it will look for the <AWS_ASSOC_ID> constant.
|
409 |
+
* @return boolean A value of `false` if no valid values are set, otherwise `true`.
|
410 |
+
*/
|
411 |
+
public static function init($key = null, $secret_key = null, $account_id = null, $assoc_id = null)
|
412 |
+
{
|
413 |
+
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
414 |
+
{
|
415 |
+
throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');
|
416 |
+
}
|
417 |
+
|
418 |
+
$self = get_called_class();
|
419 |
+
return new $self($key, $secret_key, $account_id, $assoc_id);
|
420 |
+
}
|
421 |
+
|
422 |
+
|
423 |
+
/*%******************************************************************************************%*/
|
424 |
+
// MAGIC METHODS
|
425 |
+
|
426 |
+
/**
|
427 |
+
* A magic method that allows `camelCase` method names to be translated into `snake_case` names.
|
428 |
+
*
|
429 |
+
* @param string $name (Required) The name of the method.
|
430 |
+
* @param array $arguments (Required) The arguments passed to the method.
|
431 |
+
* @return mixed The results of the intended method.
|
432 |
+
*/
|
433 |
+
public function __call($name, $arguments)
|
434 |
+
{
|
435 |
+
// Convert camelCase method calls to snake_case.
|
436 |
+
$method_name = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $name));
|
437 |
+
|
438 |
+
if (method_exists($this, $method_name))
|
439 |
+
{
|
440 |
+
return call_user_func_array(array($this, $method_name), $arguments);
|
441 |
+
}
|
442 |
+
|
443 |
+
throw new CFRuntime_Exception('The method ' . $name . '() is undefined. Attempted to map to ' . $method_name . '() which is also undefined. Error occurred');
|
444 |
+
}
|
445 |
+
|
446 |
+
|
447 |
+
/*%******************************************************************************************%*/
|
448 |
+
// SET CUSTOM SETTINGS
|
449 |
+
|
450 |
+
/**
|
451 |
+
* Adjusts the current time. Use this method for occasions when a server is out of sync with Amazon
|
452 |
+
* servers.
|
453 |
+
*
|
454 |
+
* @param integer $seconds (Required) The number of seconds to adjust the sent timestamp by.
|
455 |
+
* @return $this A reference to the current instance.
|
456 |
+
*/
|
457 |
+
public function adjust_offset($seconds)
|
458 |
+
{
|
459 |
+
$this->adjust_offset = $seconds;
|
460 |
+
return $this;
|
461 |
+
}
|
462 |
+
|
463 |
+
/**
|
464 |
+
* Set the proxy settings to use.
|
465 |
+
*
|
466 |
+
* @param string $proxy (Required) Accepts proxy credentials in the following format: `proxy://user:pass@hostname:port`
|
467 |
+
* @return $this A reference to the current instance.
|
468 |
+
*/
|
469 |
+
public function set_proxy($proxy)
|
470 |
+
{
|
471 |
+
$this->proxy = $proxy;
|
472 |
+
return $this;
|
473 |
+
}
|
474 |
+
|
475 |
+
/**
|
476 |
+
* Set the hostname to connect to. This is useful for alternate services that are API-compatible with
|
477 |
+
* AWS, but run from a different hostname.
|
478 |
+
*
|
479 |
+
* @param string $hostname (Required) The alternate hostname to use in place of the default one. Useful for mock or test applications living on different hostnames.
|
480 |
+
* @param integer $port_number (Optional) The alternate port number to use in place of the default one. Useful for mock or test applications living on different port numbers.
|
481 |
+
* @return $this A reference to the current instance.
|
482 |
+
*/
|
483 |
+
public function set_hostname($hostname, $port_number = null)
|
484 |
+
{
|
485 |
+
if ($this->override_hostname)
|
486 |
+
{
|
487 |
+
$this->hostname = $hostname;
|
488 |
+
|
489 |
+
if ($port_number)
|
490 |
+
{
|
491 |
+
$this->port_number = $port_number;
|
492 |
+
$this->hostname .= ':' . (string) $this->port_number;
|
493 |
+
}
|
494 |
+
}
|
495 |
+
|
496 |
+
return $this;
|
497 |
+
}
|
498 |
+
|
499 |
+
/**
|
500 |
+
* Set the resource prefix to use. This method is useful for alternate services that are API-compatible
|
501 |
+
* with AWS.
|
502 |
+
*
|
503 |
+
* @param string $prefix (Required) An alternate prefix to prepend to the resource path. Useful for mock or test applications.
|
504 |
+
* @return $this A reference to the current instance.
|
505 |
+
*/
|
506 |
+
public function set_resource_prefix($prefix)
|
507 |
+
{
|
508 |
+
$this->resource_prefix = $prefix;
|
509 |
+
return $this;
|
510 |
+
}
|
511 |
+
|
512 |
+
/**
|
513 |
+
* Disables any subsequent use of the <set_hostname()> method.
|
514 |
+
*
|
515 |
+
* @param boolean $override (Optional) Whether or not subsequent calls to <set_hostname()> should be obeyed. A `false` value disables the further effectiveness of <set_hostname()>. Defaults to `true`.
|
516 |
+
* @return $this A reference to the current instance.
|
517 |
+
*/
|
518 |
+
public function allow_hostname_override($override = true)
|
519 |
+
{
|
520 |
+
$this->override_hostname = $override;
|
521 |
+
return $this;
|
522 |
+
}
|
523 |
+
|
524 |
+
/**
|
525 |
+
* Disables SSL/HTTPS connections for hosts that don't support them. Some services, however, still
|
526 |
+
* require SSL support.
|
527 |
+
*
|
528 |
+
* This method will throw a user warning when invoked, which can be hidden by changing your
|
529 |
+
* <php:error_reporting()> settings.
|
530 |
+
*
|
531 |
+
* @return $this A reference to the current instance.
|
532 |
+
*/
|
533 |
+
public function disable_ssl()
|
534 |
+
{
|
535 |
+
trigger_error('Disabling SSL connections is potentially unsafe and highly discouraged.', E_USER_WARNING);
|
536 |
+
$this->use_ssl = false;
|
537 |
+
return $this;
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* Disables the verification of the SSL Certificate Authority. Doing so can enable an attacker to carry
|
542 |
+
* out a man-in-the-middle attack.
|
543 |
+
*
|
544 |
+
* https://secure.wikimedia.org/wikipedia/en/wiki/Man-in-the-middle_attack
|
545 |
+
*
|
546 |
+
* This method will throw a user warning when invoked, which can be hidden by changing your
|
547 |
+
* <php:error_reporting()> settings.
|
548 |
+
*
|
549 |
+
* @return $this A reference to the current instance.
|
550 |
+
*/
|
551 |
+
public function disable_ssl_verification($ssl_verification = false)
|
552 |
+
{
|
553 |
+
trigger_error('Disabling the verification of SSL certificates can lead to man-in-the-middle attacks. It is potentially unsafe and highly discouraged.', E_USER_WARNING);
|
554 |
+
$this->ssl_verification = $ssl_verification;
|
555 |
+
return $this;
|
556 |
+
}
|
557 |
+
|
558 |
+
/**
|
559 |
+
* Enables HTTP request/response header logging to `STDERR`.
|
560 |
+
*
|
561 |
+
* @param boolean $enabled (Optional) Whether or not to enable debug mode. Defaults to `true`.
|
562 |
+
* @return $this A reference to the current instance.
|
563 |
+
*/
|
564 |
+
public function enable_debug_mode($enabled = true)
|
565 |
+
{
|
566 |
+
$this->debug_mode = $enabled;
|
567 |
+
return $this;
|
568 |
+
}
|
569 |
+
|
570 |
+
/**
|
571 |
+
* Sets the maximum number of times to retry failed requests.
|
572 |
+
*
|
573 |
+
* @param integer $retries (Optional) The maximum number of times to retry failed requests. Defaults to `3`.
|
574 |
+
* @return $this A reference to the current instance.
|
575 |
+
*/
|
576 |
+
public function set_max_retries($retries = 3)
|
577 |
+
{
|
578 |
+
$this->max_retries = $retries;
|
579 |
+
return $this;
|
580 |
+
}
|
581 |
+
|
582 |
+
/**
|
583 |
+
* Set the caching configuration to use for response caching.
|
584 |
+
*
|
585 |
+
* @param string $location (Required) <p>The location to store the cache object in. This may vary by cache method.</p><ul><li>File - The local file system paths such as <code>./cache</code> (relative) or <code>/tmp/cache/</code> (absolute). The location must be server-writable.</li><li>APC - Pass in <code>apc</code> to use this lightweight cache. You must have the <a href="http://php.net/apc">APC extension</a> installed.</li><li>XCache - Pass in <code>xcache</code> to use this lightweight cache. You must have the <a href="http://xcache.lighttpd.net">XCache</a> extension installed.</li><li>Memcached - Pass in an indexed array of associative arrays. Each associative array should have a <code>host</code> and a <code>port</code> value representing a <a href="http://php.net/memcached">Memcached</a> server to connect to.</li><li>PDO - A URL-style string (e.g. <code>pdo.mysql://user:pass@localhost/cache</code>) or a standard DSN-style string (e.g. <code>pdo.sqlite:/sqlite/cache.db</code>). MUST be prefixed with <code>pdo.</code>. See <code>CachePDO</code> and <a href="http://php.net/pdo">PDO</a> for more details.</li></ul>
|
586 |
+
* @param boolean $gzip (Optional) Whether or not data should be gzipped before being stored. A value of `true` will compress the contents before caching them. A value of `false` will leave the contents uncompressed. Defaults to `true`.
|
587 |
+
* @return $this A reference to the current instance.
|
588 |
+
*/
|
589 |
+
public function set_cache_config($location, $gzip = true)
|
590 |
+
{
|
591 |
+
// If we have an array, we're probably passing in Memcached servers and ports.
|
592 |
+
if (is_array($location))
|
593 |
+
{
|
594 |
+
$this->cache_class = 'CacheMC';
|
595 |
+
}
|
596 |
+
else
|
597 |
+
{
|
598 |
+
// I would expect locations like `/tmp/cache`, `pdo.mysql://user:pass@hostname:port`, `pdo.sqlite:memory:`, and `apc`.
|
599 |
+
$type = strtolower(substr($location, 0, 3));
|
600 |
+
switch ($type)
|
601 |
+
{
|
602 |
+
case 'apc':
|
603 |
+
$this->cache_class = 'CacheAPC';
|
604 |
+
break;
|
605 |
+
|
606 |
+
case 'xca': // First three letters of `xcache`
|
607 |
+
$this->cache_class = 'CacheXCache';
|
608 |
+
break;
|
609 |
+
|
610 |
+
case 'pdo':
|
611 |
+
$this->cache_class = 'CachePDO';
|
612 |
+
$location = substr($location, 4);
|
613 |
+
break;
|
614 |
+
|
615 |
+
default:
|
616 |
+
$this->cache_class = 'CacheFile';
|
617 |
+
break;
|
618 |
+
}
|
619 |
+
}
|
620 |
+
|
621 |
+
// Set the remaining cache information.
|
622 |
+
$this->cache_location = $location;
|
623 |
+
$this->cache_compress = $gzip;
|
624 |
+
|
625 |
+
return $this;
|
626 |
+
}
|
627 |
+
|
628 |
+
/**
|
629 |
+
* Register a callback function to execute whenever a data stream is read from using
|
630 |
+
* <CFRequest::streaming_read_callback()>.
|
631 |
+
*
|
632 |
+
* The user-defined callback function should accept three arguments:
|
633 |
+
*
|
634 |
+
* <ul>
|
635 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
636 |
+
* <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
|
637 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
638 |
+
* </ul>
|
639 |
+
*
|
640 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
641 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
642 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
643 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
644 |
+
* @return $this A reference to the current instance.
|
645 |
+
*/
|
646 |
+
public function register_streaming_read_callback($callback)
|
647 |
+
{
|
648 |
+
$this->registered_streaming_read_callback = $callback;
|
649 |
+
return $this;
|
650 |
+
}
|
651 |
+
|
652 |
+
/**
|
653 |
+
* Register a callback function to execute whenever a data stream is written to using
|
654 |
+
* <CFRequest::streaming_write_callback()>.
|
655 |
+
*
|
656 |
+
* The user-defined callback function should accept two arguments:
|
657 |
+
*
|
658 |
+
* <ul>
|
659 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
660 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
661 |
+
* </ul>
|
662 |
+
*
|
663 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
664 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
665 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
666 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
667 |
+
* @return $this A reference to the current instance.
|
668 |
+
*/
|
669 |
+
public function register_streaming_write_callback($callback)
|
670 |
+
{
|
671 |
+
$this->registered_streaming_write_callback = $callback;
|
672 |
+
return $this;
|
673 |
+
}
|
674 |
+
|
675 |
+
|
676 |
+
/*%******************************************************************************************%*/
|
677 |
+
// SET CUSTOM CLASSES
|
678 |
+
|
679 |
+
/**
|
680 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
681 |
+
* with new functionality.
|
682 |
+
*
|
683 |
+
* The replacement class must extend from <CFUtilities>.
|
684 |
+
*
|
685 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
686 |
+
* @return $this A reference to the current instance.
|
687 |
+
*/
|
688 |
+
public function set_utilities_class($class = 'CFUtilities')
|
689 |
+
{
|
690 |
+
$this->utilities_class = $class;
|
691 |
+
$this->util = new $this->utilities_class();
|
692 |
+
return $this;
|
693 |
+
}
|
694 |
+
|
695 |
+
/**
|
696 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
697 |
+
* with new functionality.
|
698 |
+
*
|
699 |
+
* The replacement class must extend from <CFRequest>.
|
700 |
+
*
|
701 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
702 |
+
* @param $this A reference to the current instance.
|
703 |
+
*/
|
704 |
+
public function set_request_class($class = 'CFRequest')
|
705 |
+
{
|
706 |
+
$this->request_class = $class;
|
707 |
+
return $this;
|
708 |
+
}
|
709 |
+
|
710 |
+
/**
|
711 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
712 |
+
* with new functionality.
|
713 |
+
*
|
714 |
+
* The replacement class must extend from <CFResponse>.
|
715 |
+
*
|
716 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
717 |
+
* @return $this A reference to the current instance.
|
718 |
+
*/
|
719 |
+
public function set_response_class($class = 'CFResponse')
|
720 |
+
{
|
721 |
+
$this->response_class = $class;
|
722 |
+
return $this;
|
723 |
+
}
|
724 |
+
|
725 |
+
/**
|
726 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
727 |
+
* with new functionality.
|
728 |
+
*
|
729 |
+
* The replacement class must extend from <CFSimpleXML>.
|
730 |
+
*
|
731 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
732 |
+
* @return $this A reference to the current instance.
|
733 |
+
*/
|
734 |
+
public function set_parser_class($class = 'CFSimpleXML')
|
735 |
+
{
|
736 |
+
$this->parser_class = $class;
|
737 |
+
return $this;
|
738 |
+
}
|
739 |
+
|
740 |
+
/**
|
741 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
742 |
+
* with new functionality.
|
743 |
+
*
|
744 |
+
* The replacement class must extend from <CFBatchRequest>.
|
745 |
+
*
|
746 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
747 |
+
* @return $this A reference to the current instance.
|
748 |
+
*/
|
749 |
+
public function set_batch_class($class = 'CFBatchRequest')
|
750 |
+
{
|
751 |
+
$this->batch_class = $class;
|
752 |
+
return $this;
|
753 |
+
}
|
754 |
+
|
755 |
+
|
756 |
+
/*%******************************************************************************************%*/
|
757 |
+
// AUTHENTICATION
|
758 |
+
|
759 |
+
/**
|
760 |
+
* Default, shared method for authenticating a connection to AWS. Overridden on a class-by-class basis
|
761 |
+
* as necessary.
|
762 |
+
*
|
763 |
+
* @param string $action (Required) Indicates the action to perform.
|
764 |
+
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
765 |
+
* @param string $domain (Optional) The URL of the queue to perform the action on.
|
766 |
+
* @param integer $signature_version (Optional) The signature version to use. Defaults to 2.
|
767 |
+
* @param integer $redirects (Do Not Use) Used internally by this function on occasions when Amazon S3 returns a redirect code and it needs to call itself recursively.
|
768 |
+
* @return CFResponse Object containing a parsed HTTP response.
|
769 |
+
*/
|
770 |
+
public function authenticate($action, $opt = null, $domain = null, $signature_version = 2, $redirects = 0)
|
771 |
+
{
|
772 |
+
// Handle nulls
|
773 |
+
if (is_null($signature_version))
|
774 |
+
{
|
775 |
+
$signature_version = 2;
|
776 |
+
}
|
777 |
+
|
778 |
+
$method_arguments = func_get_args();
|
779 |
+
$headers = array();
|
780 |
+
$signed_headers = array();
|
781 |
+
|
782 |
+
// Use the caching flow to determine if we need to do a round-trip to the server.
|
783 |
+
if ($this->use_cache_flow)
|
784 |
+
{
|
785 |
+
// Generate an identifier specific to this particular set of arguments.
|
786 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . $action . '_' . sha1(serialize($method_arguments));
|
787 |
+
|
788 |
+
// Instantiate the appropriate caching object.
|
789 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
790 |
+
|
791 |
+
if ($this->delete_cache)
|
792 |
+
{
|
793 |
+
$this->use_cache_flow = false;
|
794 |
+
$this->delete_cache = false;
|
795 |
+
return $this->cache_object->delete();
|
796 |
+
}
|
797 |
+
|
798 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
799 |
+
$data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
|
800 |
+
|
801 |
+
// Parse the XML body
|
802 |
+
$data = $this->parse_callback($data);
|
803 |
+
|
804 |
+
// End!
|
805 |
+
return $data;
|
806 |
+
}
|
807 |
+
|
808 |
+
$return_curl_handle = false;
|
809 |
+
$x_amz_target = null;
|
810 |
+
|
811 |
+
// Do we have a custom resource prefix?
|
812 |
+
if ($this->resource_prefix)
|
813 |
+
{
|
814 |
+
$domain .= $this->resource_prefix;
|
815 |
+
}
|
816 |
+
|
817 |
+
// Determine signing values
|
818 |
+
$current_time = time() + $this->adjust_offset;
|
819 |
+
$date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
|
820 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
|
821 |
+
$nonce = $this->util->generate_guid();
|
822 |
+
|
823 |
+
// Manage the key-value pairs that are used in the query.
|
824 |
+
if (stripos($action, 'x-amz-target') !== false)
|
825 |
+
{
|
826 |
+
$x_amz_target = trim(str_ireplace('x-amz-target:', '', $action));
|
827 |
+
}
|
828 |
+
else
|
829 |
+
{
|
830 |
+
$query['Action'] = $action;
|
831 |
+
}
|
832 |
+
$query['Version'] = $this->api_version;
|
833 |
+
|
834 |
+
// Only Signature v2
|
835 |
+
if ($signature_version === 2)
|
836 |
+
{
|
837 |
+
$query['AWSAccessKeyId'] = $this->key;
|
838 |
+
$query['SignatureMethod'] = 'HmacSHA256';
|
839 |
+
$query['SignatureVersion'] = 2;
|
840 |
+
$query['Timestamp'] = $timestamp;
|
841 |
+
}
|
842 |
+
|
843 |
+
// Merge in any options that were passed in
|
844 |
+
if (is_array($opt))
|
845 |
+
{
|
846 |
+
$query = array_merge($query, $opt);
|
847 |
+
}
|
848 |
+
|
849 |
+
$return_curl_handle = isset($query['returnCurlHandle']) ? $query['returnCurlHandle'] : false;
|
850 |
+
unset($query['returnCurlHandle']);
|
851 |
+
|
852 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
853 |
+
uksort($query, 'strcmp');
|
854 |
+
|
855 |
+
// Normalize JSON input
|
856 |
+
if (isset($query['body']) && $query['body'] === '[]')
|
857 |
+
{
|
858 |
+
$query['body'] = '{}';
|
859 |
+
}
|
860 |
+
|
861 |
+
if ($this->use_aws_query)
|
862 |
+
{
|
863 |
+
// Create the string that needs to be hashed.
|
864 |
+
$canonical_query_string = $this->util->to_signable_string($query);
|
865 |
+
}
|
866 |
+
else
|
867 |
+
{
|
868 |
+
// Create the string that needs to be hashed.
|
869 |
+
$canonical_query_string = $this->util->encode_signature2($query['body']);
|
870 |
+
}
|
871 |
+
|
872 |
+
// Remove the default scheme from the domain.
|
873 |
+
$domain = str_replace(array('http://', 'https://'), '', $domain);
|
874 |
+
|
875 |
+
// Parse our request.
|
876 |
+
$parsed_url = parse_url('http://' . $domain);
|
877 |
+
|
878 |
+
// Set the proper host header.
|
879 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
880 |
+
{
|
881 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
882 |
+
}
|
883 |
+
else
|
884 |
+
{
|
885 |
+
$host_header = strtolower($parsed_url['host']);
|
886 |
+
}
|
887 |
+
|
888 |
+
// Set the proper request URI.
|
889 |
+
$request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
|
890 |
+
|
891 |
+
if ($signature_version === 2)
|
892 |
+
{
|
893 |
+
// Prepare the string to sign
|
894 |
+
$string_to_sign = "POST\n$host_header\n$request_uri\n$canonical_query_string";
|
895 |
+
|
896 |
+
// Hash the AWS secret key and generate a signature for the request.
|
897 |
+
$query['Signature'] = base64_encode(hash_hmac('sha256', $string_to_sign, $this->secret_key, true));
|
898 |
+
}
|
899 |
+
|
900 |
+
// Generate the querystring from $query
|
901 |
+
$querystring = $this->util->to_query_string($query);
|
902 |
+
|
903 |
+
// Gather information to pass along to other classes.
|
904 |
+
$helpers = array(
|
905 |
+
'utilities' => $this->utilities_class,
|
906 |
+
'request' => $this->request_class,
|
907 |
+
'response' => $this->response_class,
|
908 |
+
);
|
909 |
+
|
910 |
+
// Compose the request.
|
911 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
912 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
913 |
+
|
914 |
+
// Instantiate the request class
|
915 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers);
|
916 |
+
$request->set_method('POST');
|
917 |
+
$request->set_body($querystring);
|
918 |
+
$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
919 |
+
|
920 |
+
// Do we have an authentication token?
|
921 |
+
if ($this->auth_token)
|
922 |
+
{
|
923 |
+
$headers['X-Amz-Security-Token'] = $this->auth_token;
|
924 |
+
}
|
925 |
+
|
926 |
+
// Signing using X-Amz-Target is handled differently.
|
927 |
+
if ($signature_version === 3 && $x_amz_target)
|
928 |
+
{
|
929 |
+
$headers['X-Amz-Target'] = $x_amz_target;
|
930 |
+
$headers['Content-Type'] = 'application/json; amzn-1.0';
|
931 |
+
$headers['Content-Encoding'] = 'amz-1.0';
|
932 |
+
|
933 |
+
$request->set_body($query['body']);
|
934 |
+
$querystring = $query['body'];
|
935 |
+
}
|
936 |
+
|
937 |
+
// Pass along registered stream callbacks
|
938 |
+
if ($this->registered_streaming_read_callback)
|
939 |
+
{
|
940 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
941 |
+
}
|
942 |
+
|
943 |
+
if ($this->registered_streaming_write_callback)
|
944 |
+
{
|
945 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
946 |
+
}
|
947 |
+
|
948 |
+
// Add authentication headers
|
949 |
+
if ($signature_version === 3)
|
950 |
+
{
|
951 |
+
$headers['X-Amz-Nonce'] = $nonce;
|
952 |
+
$headers['Date'] = $date;
|
953 |
+
$headers['Content-Length'] = strlen($querystring);
|
954 |
+
$headers['Content-MD5'] = $this->util->hex_to_base64(md5($querystring));
|
955 |
+
$headers['Host'] = $host_header;
|
956 |
+
}
|
957 |
+
|
958 |
+
// Sort headers
|
959 |
+
uksort($headers, 'strnatcasecmp');
|
960 |
+
|
961 |
+
if ($signature_version === 3 && $this->use_ssl)
|
962 |
+
{
|
963 |
+
// Prepare the string to sign (HTTPS)
|
964 |
+
$string_to_sign = $date . $nonce;
|
965 |
+
}
|
966 |
+
elseif ($signature_version === 3 && !$this->use_ssl)
|
967 |
+
{
|
968 |
+
// Prepare the string to sign (HTTP)
|
969 |
+
$string_to_sign = "POST\n$request_uri\n\n";
|
970 |
+
}
|
971 |
+
|
972 |
+
// Add headers to request and compute the string to sign
|
973 |
+
foreach ($headers as $header_key => $header_value)
|
974 |
+
{
|
975 |
+
// Strip linebreaks from header values as they're illegal and can allow for security issues
|
976 |
+
$header_value = str_replace(array("\r", "\n"), '', $header_value);
|
977 |
+
|
978 |
+
// Add the header if it has a value
|
979 |
+
if ($header_value !== '')
|
980 |
+
{
|
981 |
+
$request->add_header($header_key, $header_value);
|
982 |
+
}
|
983 |
+
|
984 |
+
// Signature v3 over HTTP
|
985 |
+
if ($signature_version === 3 && !$this->use_ssl)
|
986 |
+
{
|
987 |
+
// Generate the string to sign
|
988 |
+
if (
|
989 |
+
substr(strtolower($header_key), 0, 8) === 'content-' ||
|
990 |
+
strtolower($header_key) === 'date' ||
|
991 |
+
strtolower($header_key) === 'expires' ||
|
992 |
+
strtolower($header_key) === 'host' ||
|
993 |
+
substr(strtolower($header_key), 0, 6) === 'x-amz-'
|
994 |
+
)
|
995 |
+
{
|
996 |
+
$string_to_sign .= strtolower($header_key) . ':' . $header_value . "\n";
|
997 |
+
$signed_headers[] = $header_key;
|
998 |
+
}
|
999 |
+
}
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
if ($signature_version === 3)
|
1003 |
+
{
|
1004 |
+
if (!$this->use_ssl)
|
1005 |
+
{
|
1006 |
+
$string_to_sign .= "\n";
|
1007 |
+
|
1008 |
+
if (isset($query['body']) && $query['body'] !== '')
|
1009 |
+
{
|
1010 |
+
$string_to_sign .= $query['body'];
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
// Convert from string-to-sign to bytes-to-sign
|
1014 |
+
$bytes_to_sign = hash('sha256', $string_to_sign, true);
|
1015 |
+
|
1016 |
+
// Hash the AWS secret key and generate a signature for the request.
|
1017 |
+
$signature = base64_encode(hash_hmac('sha256', $bytes_to_sign, $this->secret_key, true));
|
1018 |
+
}
|
1019 |
+
else
|
1020 |
+
{
|
1021 |
+
// Hash the AWS secret key and generate a signature for the request.
|
1022 |
+
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $this->secret_key, true));
|
1023 |
+
}
|
1024 |
+
|
1025 |
+
$headers['X-Amzn-Authorization'] = 'AWS3' . ($this->use_ssl ? '-HTTPS' : '')
|
1026 |
+
. ' AWSAccessKeyId=' . $this->key
|
1027 |
+
. ',Algorithm=HmacSHA256'
|
1028 |
+
. ',SignedHeaders=' . implode(';', $signed_headers)
|
1029 |
+
. ',Signature=' . $signature;
|
1030 |
+
|
1031 |
+
$request->add_header('X-Amzn-Authorization', $headers['X-Amzn-Authorization']);
|
1032 |
+
}
|
1033 |
+
|
1034 |
+
// Update RequestCore settings
|
1035 |
+
$request->request_class = $this->request_class;
|
1036 |
+
$request->response_class = $this->response_class;
|
1037 |
+
$request->ssl_verification = $this->ssl_verification;
|
1038 |
+
|
1039 |
+
$curlopts = array();
|
1040 |
+
|
1041 |
+
// Set custom CURLOPT settings
|
1042 |
+
if (is_array($opt) && isset($opt['curlopts']))
|
1043 |
+
{
|
1044 |
+
$curlopts = $opt['curlopts'];
|
1045 |
+
unset($opt['curlopts']);
|
1046 |
+
}
|
1047 |
+
|
1048 |
+
// Debug mode
|
1049 |
+
if ($this->debug_mode)
|
1050 |
+
{
|
1051 |
+
$request->debug_mode = $this->debug_mode;
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
if (count($curlopts))
|
1055 |
+
{
|
1056 |
+
$request->set_curlopts($curlopts);
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
// Manage the (newer) batch request API or the (older) returnCurlHandle setting.
|
1060 |
+
if ($this->use_batch_flow)
|
1061 |
+
{
|
1062 |
+
$handle = $request->prep_request();
|
1063 |
+
$this->batch_object->add($handle);
|
1064 |
+
$this->use_batch_flow = false;
|
1065 |
+
|
1066 |
+
return $handle;
|
1067 |
+
}
|
1068 |
+
elseif ($return_curl_handle)
|
1069 |
+
{
|
1070 |
+
return $request->prep_request();
|
1071 |
+
}
|
1072 |
+
|
1073 |
+
// Send!
|
1074 |
+
$request->send_request();
|
1075 |
+
|
1076 |
+
$request_headers = $headers;
|
1077 |
+
|
1078 |
+
// Prepare the response.
|
1079 |
+
$headers = $request->get_response_header();
|
1080 |
+
$headers['x-aws-stringtosign'] = $string_to_sign;
|
1081 |
+
$headers['x-aws-request-headers'] = $request_headers;
|
1082 |
+
$headers['x-aws-body'] = $querystring;
|
1083 |
+
|
1084 |
+
$data = new $this->response_class($headers, $this->parse_callback($request->get_response_body(), $headers), $request->get_response_code());
|
1085 |
+
|
1086 |
+
// Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
|
1087 |
+
if ((integer) $request->get_response_code() === 500 || (integer) $request->get_response_code() === 503)
|
1088 |
+
{
|
1089 |
+
if ($redirects <= $this->max_retries)
|
1090 |
+
{
|
1091 |
+
// Exponential backoff
|
1092 |
+
$delay = (integer) (pow(4, $redirects) * 100000);
|
1093 |
+
usleep($delay);
|
1094 |
+
$data = $this->authenticate($action, $opt, $domain, $signature_version, ++$redirects);
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
return $data;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
|
1102 |
+
/*%******************************************************************************************%*/
|
1103 |
+
// BATCH REQUEST LAYER
|
1104 |
+
|
1105 |
+
/**
|
1106 |
+
* Specifies that the intended request should be queued for a later batch request.
|
1107 |
+
*
|
1108 |
+
* @param CFBatchRequest $queue (Optional) The <CFBatchRequest> instance to use for managing batch requests. If not available, it generates a new instance of <CFBatchRequest>.
|
1109 |
+
* @return $this A reference to the current instance.
|
1110 |
+
*/
|
1111 |
+
public function batch(CFBatchRequest &$queue = null)
|
1112 |
+
{
|
1113 |
+
if ($queue)
|
1114 |
+
{
|
1115 |
+
$this->batch_object = $queue;
|
1116 |
+
}
|
1117 |
+
elseif ($this->internal_batch_object)
|
1118 |
+
{
|
1119 |
+
$this->batch_object = &$this->internal_batch_object;
|
1120 |
+
}
|
1121 |
+
else
|
1122 |
+
{
|
1123 |
+
$this->internal_batch_object = new $this->batch_class();
|
1124 |
+
$this->batch_object = &$this->internal_batch_object;
|
1125 |
+
}
|
1126 |
+
|
1127 |
+
$this->use_batch_flow = true;
|
1128 |
+
|
1129 |
+
return $this;
|
1130 |
+
}
|
1131 |
+
|
1132 |
+
/**
|
1133 |
+
* Executes the batch request queue by sending all queued requests.
|
1134 |
+
*
|
1135 |
+
* @param boolean $clear_after_send (Optional) Whether or not to clear the batch queue after sending a request. Defaults to `true`. Set this to `false` if you are caching batch responses and want to retrieve results later.
|
1136 |
+
* @return array An array of <CFResponse> objects.
|
1137 |
+
*/
|
1138 |
+
public function send($clear_after_send = true)
|
1139 |
+
{
|
1140 |
+
if ($this->use_batch_flow)
|
1141 |
+
{
|
1142 |
+
// When we send the request, disable batch flow.
|
1143 |
+
$this->use_batch_flow = false;
|
1144 |
+
|
1145 |
+
// If we're not caching, simply send the request.
|
1146 |
+
if (!$this->use_cache_flow)
|
1147 |
+
{
|
1148 |
+
$response = $this->batch_object->send();
|
1149 |
+
$parsed_data = array_map(array($this, 'parse_callback'), $response);
|
1150 |
+
$parsed_data = new CFArray($parsed_data);
|
1151 |
+
|
1152 |
+
// Clear the queue
|
1153 |
+
if ($clear_after_send)
|
1154 |
+
{
|
1155 |
+
$this->batch_object->queue = array();
|
1156 |
+
}
|
1157 |
+
|
1158 |
+
return $parsed_data;
|
1159 |
+
}
|
1160 |
+
|
1161 |
+
// Generate an identifier specific to this particular set of arguments.
|
1162 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . sha1(serialize($this->batch_object));
|
1163 |
+
|
1164 |
+
// Instantiate the appropriate caching object.
|
1165 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
1166 |
+
|
1167 |
+
if ($this->delete_cache)
|
1168 |
+
{
|
1169 |
+
$this->use_cache_flow = false;
|
1170 |
+
$this->delete_cache = false;
|
1171 |
+
return $this->cache_object->delete();
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
1175 |
+
$data_set = $this->cache_object->response_manager(array($this, 'cache_callback_batch'), array($this->batch_object));
|
1176 |
+
$parsed_data = array_map(array($this, 'parse_callback'), $data_set);
|
1177 |
+
$parsed_data = new CFArray($parsed_data);
|
1178 |
+
|
1179 |
+
// Clear the queue
|
1180 |
+
if ($clear_after_send)
|
1181 |
+
{
|
1182 |
+
$this->batch_object->queue = array();
|
1183 |
+
}
|
1184 |
+
|
1185 |
+
// End!
|
1186 |
+
return $parsed_data;
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
// Load the class
|
1190 |
+
$null = new CFBatchRequest();
|
1191 |
+
unset($null);
|
1192 |
+
|
1193 |
+
throw new CFBatchRequest_Exception('You must use $object->batch()->send()');
|
1194 |
+
}
|
1195 |
+
|
1196 |
+
/**
|
1197 |
+
* Parses a response body into a PHP object if appropriate.
|
1198 |
+
*
|
1199 |
+
* @param CFResponse|string $response (Required) The <CFResponse> object to parse, or an XML string that would otherwise be a response body.
|
1200 |
+
* @param string $content_type (Optional) The content-type to use when determining how to parse the content.
|
1201 |
+
* @return CFResponse|string A parsed <CFResponse> object, or parsed XML.
|
1202 |
+
*/
|
1203 |
+
public function parse_callback($response, $headers = null)
|
1204 |
+
{
|
1205 |
+
// Shorten this so we have a (mostly) single code path
|
1206 |
+
if (isset($response->body))
|
1207 |
+
{
|
1208 |
+
if (is_string($response->body))
|
1209 |
+
{
|
1210 |
+
$body = $response->body;
|
1211 |
+
}
|
1212 |
+
else
|
1213 |
+
{
|
1214 |
+
return $response;
|
1215 |
+
}
|
1216 |
+
}
|
1217 |
+
elseif (is_string($response))
|
1218 |
+
{
|
1219 |
+
$body = $response;
|
1220 |
+
}
|
1221 |
+
else
|
1222 |
+
{
|
1223 |
+
return $response;
|
1224 |
+
}
|
1225 |
+
|
1226 |
+
// Decompress gzipped content
|
1227 |
+
if (isset($headers['content-encoding']))
|
1228 |
+
{
|
1229 |
+
switch (strtolower(trim($headers['content-encoding'], "\x09\x0A\x0D\x20")))
|
1230 |
+
{
|
1231 |
+
case 'gzip':
|
1232 |
+
case 'x-gzip':
|
1233 |
+
if (strpos($headers['_info']['url'], 'monitoring.') !== false)
|
1234 |
+
{
|
1235 |
+
// CloudWatch incorrectly uses the deflate algorithm when they say gzip.
|
1236 |
+
if (($uncompressed = gzuncompress($body)) !== false)
|
1237 |
+
{
|
1238 |
+
$body = $uncompressed;
|
1239 |
+
}
|
1240 |
+
elseif (($uncompressed = gzinflate($body)) !== false)
|
1241 |
+
{
|
1242 |
+
$body = $uncompressed;
|
1243 |
+
}
|
1244 |
+
break;
|
1245 |
+
}
|
1246 |
+
else
|
1247 |
+
{
|
1248 |
+
// Everyone else uses gzip correctly.
|
1249 |
+
$decoder = new CFGzipDecode($body);
|
1250 |
+
if ($decoder->parse())
|
1251 |
+
{
|
1252 |
+
$body = $decoder->data;
|
1253 |
+
}
|
1254 |
+
break;
|
1255 |
+
}
|
1256 |
+
|
1257 |
+
case 'deflate':
|
1258 |
+
if (strpos($headers['_info']['url'], 'monitoring.') !== false)
|
1259 |
+
{
|
1260 |
+
// CloudWatch incorrectly does nothing when they say deflate.
|
1261 |
+
continue;
|
1262 |
+
}
|
1263 |
+
else
|
1264 |
+
{
|
1265 |
+
// Everyone else uses deflate correctly.
|
1266 |
+
if (($uncompressed = gzuncompress($body)) !== false)
|
1267 |
+
{
|
1268 |
+
$body = $uncompressed;
|
1269 |
+
}
|
1270 |
+
elseif (($uncompressed = gzinflate($body)) !== false)
|
1271 |
+
{
|
1272 |
+
$body = $uncompressed;
|
1273 |
+
}
|
1274 |
+
}
|
1275 |
+
break;
|
1276 |
+
}
|
1277 |
+
}
|
1278 |
+
|
1279 |
+
// Look for XML cues
|
1280 |
+
if (
|
1281 |
+
(isset($headers['content-type']) && ($headers['content-type'] === 'text/xml' || $headers['content-type'] === 'application/xml')) || // We know it's XML
|
1282 |
+
(!isset($headers['content-type']) && (stripos($body, '<?xml') === 0 || strpos($body, '<Error>') === 0) || preg_match('/^<(\w*) xmlns="http(s?):\/\/(\w*).amazon(aws)?.com/im', $body)) // Sniff for XML
|
1283 |
+
)
|
1284 |
+
{
|
1285 |
+
// Strip the default XML namespace to simplify XPath expressions
|
1286 |
+
$body = str_replace("xmlns=", "ns=", $body);
|
1287 |
+
|
1288 |
+
// Parse the XML body
|
1289 |
+
$body = new $this->parser_class($body);
|
1290 |
+
}
|
1291 |
+
// Look for JSON cues
|
1292 |
+
elseif (
|
1293 |
+
(isset($headers['content-type']) && $headers['content-type'] === 'application/json') || // We know it's JSON
|
1294 |
+
(!isset($headers['content-type']) && $this->util->is_json($body)) // Sniff for JSON
|
1295 |
+
)
|
1296 |
+
{
|
1297 |
+
// Normalize JSON to a CFSimpleXML object
|
1298 |
+
$body = CFJSON::to_xml($body);
|
1299 |
+
}
|
1300 |
+
|
1301 |
+
// Put the parsed data back where it goes
|
1302 |
+
if (isset($response->body))
|
1303 |
+
{
|
1304 |
+
$response->body = $body;
|
1305 |
+
}
|
1306 |
+
else
|
1307 |
+
{
|
1308 |
+
$response = $body;
|
1309 |
+
}
|
1310 |
+
|
1311 |
+
return $response;
|
1312 |
+
}
|
1313 |
+
|
1314 |
+
|
1315 |
+
/*%******************************************************************************************%*/
|
1316 |
+
// CACHING LAYER
|
1317 |
+
|
1318 |
+
/**
|
1319 |
+
* Specifies that the resulting <CFResponse> object should be cached according to the settings from
|
1320 |
+
* <set_cache_config()>.
|
1321 |
+
*
|
1322 |
+
* @param string|integer $expires (Required) The time the cache is to expire. Accepts a number of seconds as an integer, or an amount of time, as a string, that is understood by <php:strtotime()> (e.g. "1 hour").
|
1323 |
+
* @param $this A reference to the current instance.
|
1324 |
+
* @return $this
|
1325 |
+
*/
|
1326 |
+
public function cache($expires)
|
1327 |
+
{
|
1328 |
+
// Die if they haven't used set_cache_config().
|
1329 |
+
if (!$this->cache_class)
|
1330 |
+
{
|
1331 |
+
throw new CFRuntime_Exception('Must call set_cache_config() before using cache()');
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
if (is_string($expires))
|
1335 |
+
{
|
1336 |
+
$expires = strtotime($expires);
|
1337 |
+
$this->cache_expires = $expires - time();
|
1338 |
+
}
|
1339 |
+
elseif (is_int($expires))
|
1340 |
+
{
|
1341 |
+
$this->cache_expires = $expires;
|
1342 |
+
}
|
1343 |
+
|
1344 |
+
$this->use_cache_flow = true;
|
1345 |
+
|
1346 |
+
return $this;
|
1347 |
+
}
|
1348 |
+
|
1349 |
+
/**
|
1350 |
+
* The callback function that is executed when the cache doesn't exist or has expired. The response of
|
1351 |
+
* this method is cached. Accepts identical parameters as the <authenticate()> method. Never call this
|
1352 |
+
* method directly -- it is used internally by the caching system.
|
1353 |
+
*
|
1354 |
+
* @param string $action (Required) Indicates the action to perform.
|
1355 |
+
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
1356 |
+
* @param string $domain (Optional) The URL of the queue to perform the action on.
|
1357 |
+
* @param integer $signature_version (Optional) The signature version to use. Defaults to 2.
|
1358 |
+
* @return CFResponse A parsed HTTP response.
|
1359 |
+
*/
|
1360 |
+
public function cache_callback($action, $opt = null, $domain = null, $signature_version = 2)
|
1361 |
+
{
|
1362 |
+
// Disable the cache flow since it's already been handled.
|
1363 |
+
$this->use_cache_flow = false;
|
1364 |
+
|
1365 |
+
// Make the request
|
1366 |
+
$response = $this->authenticate($action, $opt, $domain, $signature_version);
|
1367 |
+
|
1368 |
+
// If this is an XML document, convert it back to a string.
|
1369 |
+
if (isset($response->body) && ($response->body instanceof SimpleXMLElement))
|
1370 |
+
{
|
1371 |
+
$response->body = $response->body->asXML();
|
1372 |
+
}
|
1373 |
+
|
1374 |
+
return $response;
|
1375 |
+
}
|
1376 |
+
|
1377 |
+
/**
|
1378 |
+
* Used for caching the results of a batch request. Never call this method directly; it is used
|
1379 |
+
* internally by the caching system.
|
1380 |
+
*
|
1381 |
+
* @param CFBatchRequest $batch (Required) The batch request object to send.
|
1382 |
+
* @return CFResponse A parsed HTTP response.
|
1383 |
+
*/
|
1384 |
+
public function cache_callback_batch(CFBatchRequest $batch)
|
1385 |
+
{
|
1386 |
+
return $batch->send();
|
1387 |
+
}
|
1388 |
+
|
1389 |
+
/**
|
1390 |
+
* Deletes a cached <CFResponse> object using the specified cache storage type.
|
1391 |
+
*
|
1392 |
+
* @return boolean A value of `true` if cached object exists and is successfully deleted, otherwise `false`.
|
1393 |
+
*/
|
1394 |
+
public function delete_cache()
|
1395 |
+
{
|
1396 |
+
$this->use_cache_flow = true;
|
1397 |
+
$this->delete_cache = true;
|
1398 |
+
|
1399 |
+
return $this;
|
1400 |
+
}
|
1401 |
+
}
|
1402 |
+
|
1403 |
+
|
1404 |
+
/**
|
1405 |
+
* Contains the functionality for auto-loading service classes.
|
1406 |
+
*/
|
1407 |
+
class CFLoader
|
1408 |
+
{
|
1409 |
+
|
1410 |
+
/*%******************************************************************************************%*/
|
1411 |
+
// AUTO-LOADER
|
1412 |
+
|
1413 |
+
/**
|
1414 |
+
* Automatically load classes that aren't included.
|
1415 |
+
*
|
1416 |
+
* @param string $class (Required) The classname to load.
|
1417 |
+
* @return void
|
1418 |
+
*/
|
1419 |
+
public static function autoloader($class)
|
1420 |
+
{
|
1421 |
+
$path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
|
1422 |
+
|
1423 |
+
// Amazon SDK classes
|
1424 |
+
if (strstr($class, 'Amazon'))
|
1425 |
+
{
|
1426 |
+
$path .= 'services' . DIRECTORY_SEPARATOR . str_ireplace('Amazon', '', strtolower($class)) . '.class.php';
|
1427 |
+
}
|
1428 |
+
|
1429 |
+
// Utility classes
|
1430 |
+
elseif (strstr($class, 'CF'))
|
1431 |
+
{
|
1432 |
+
$path .= 'utilities' . DIRECTORY_SEPARATOR . str_ireplace('CF', '', strtolower($class)) . '.class.php';
|
1433 |
+
}
|
1434 |
+
|
1435 |
+
// Load CacheCore
|
1436 |
+
elseif (strstr($class, 'Cache'))
|
1437 |
+
{
|
1438 |
+
if (file_exists($ipath = 'lib' . DIRECTORY_SEPARATOR . 'cachecore' . DIRECTORY_SEPARATOR . 'icachecore.interface.php'))
|
1439 |
+
{
|
1440 |
+
require_once($ipath);
|
1441 |
+
}
|
1442 |
+
|
1443 |
+
$path .= 'lib' . DIRECTORY_SEPARATOR . 'cachecore' . DIRECTORY_SEPARATOR . strtolower($class) . '.class.php';
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
// Load RequestCore
|
1447 |
+
elseif (strstr($class, 'RequestCore') || strstr($class, 'ResponseCore'))
|
1448 |
+
{
|
1449 |
+
$path .= 'lib' . DIRECTORY_SEPARATOR . 'requestcore' . DIRECTORY_SEPARATOR . 'requestcore.class.php';
|
1450 |
+
}
|
1451 |
+
|
1452 |
+
// Load Symfony YAML classes
|
1453 |
+
elseif (strstr($class, 'sfYaml'))
|
1454 |
+
{
|
1455 |
+
$path .= 'lib' . DIRECTORY_SEPARATOR . 'yaml' . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'sfYaml.php';
|
1456 |
+
}
|
1457 |
+
|
1458 |
+
// Fall back to the 'extensions' directory.
|
1459 |
+
elseif (defined('AWS_ENABLE_EXTENSIONS') && AWS_ENABLE_EXTENSIONS)
|
1460 |
+
{
|
1461 |
+
$path .= 'extensions' . DIRECTORY_SEPARATOR . strtolower($class) . '.class.php';
|
1462 |
+
}
|
1463 |
+
|
1464 |
+
if (file_exists($path) && !is_dir($path))
|
1465 |
+
{
|
1466 |
+
require_once($path);
|
1467 |
+
}
|
1468 |
+
}
|
1469 |
+
}
|
1470 |
+
|
1471 |
+
// Register the autoloader.
|
1472 |
+
spl_autoload_register(array('CFLoader', 'autoloader'));
|
app/libs/aws/services/as.class.php
CHANGED
@@ -1,932 +1,919 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
/**
|
18 |
-
*
|
19 |
-
*
|
20 |
-
* Auto Scaling is a web service designed to automatically launch or terminate EC2 instances based on user-defined
|
21 |
-
*
|
22 |
-
*
|
23 |
-
*
|
24 |
-
* Auto Scaling groups can work across multiple Availability Zones - distinct physical locations for the hosted Amazon EC2
|
25 |
-
*
|
26 |
-
*
|
27 |
-
*
|
28 |
-
*
|
29 |
-
*
|
30 |
-
*
|
31 |
-
*
|
32 |
-
*
|
33 |
-
*
|
34 |
-
*
|
35 |
-
*
|
36 |
-
*
|
37 |
-
*
|
38 |
-
*
|
39 |
-
*
|
40 |
-
*
|
41 |
-
*
|
42 |
-
*
|
43 |
-
*
|
44 |
-
*
|
45 |
-
*
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
/**
|
88 |
-
*
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
*
|
143 |
-
*
|
144 |
-
*
|
145 |
-
*
|
146 |
-
*
|
147 |
-
*
|
148 |
-
*
|
149 |
-
*
|
150 |
-
*
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
*
|
169 |
-
*
|
170 |
-
*
|
171 |
-
*
|
172 |
-
*
|
173 |
-
*
|
174 |
-
*
|
175 |
-
*
|
176 |
-
*
|
177 |
-
*
|
178 |
-
*
|
179 |
-
*
|
180 |
-
*
|
181 |
-
*
|
182 |
-
*
|
183 |
-
*
|
184 |
-
*
|
185 |
-
* <code>
|
186 |
-
* <
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
*
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
*
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
*
|
245 |
-
*
|
246 |
-
*
|
247 |
-
*
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
*
|
291 |
-
*
|
292 |
-
*
|
293 |
-
*
|
294 |
-
*
|
295 |
-
*
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
*
|
324 |
-
*
|
325 |
-
*
|
326 |
-
*
|
327 |
-
*
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
*
|
358 |
-
*
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
*
|
380 |
-
*
|
381 |
-
*
|
382 |
-
*
|
383 |
-
*
|
384 |
-
*
|
385 |
-
*
|
386 |
-
*
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
*
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
*
|
451 |
-
*
|
452 |
-
*
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
*
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
*
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
*
|
519 |
-
*
|
520 |
-
*
|
521 |
-
*
|
522 |
-
*
|
523 |
-
*
|
524 |
-
*
|
525 |
-
*
|
526 |
-
*
|
527 |
-
*
|
528 |
-
*
|
529 |
-
*
|
530 |
-
* @
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
$opt['
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
*
|
569 |
-
*
|
570 |
-
*
|
571 |
-
*
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
*
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
*
|
622 |
-
*
|
623 |
-
*
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
*
|
670 |
-
*
|
671 |
-
*
|
672 |
-
*
|
673 |
-
*
|
674 |
-
*
|
675 |
-
*
|
676 |
-
*
|
677 |
-
*
|
678 |
-
*
|
679 |
-
*
|
680 |
-
*
|
681 |
-
*
|
682 |
-
*
|
683 |
-
*
|
684 |
-
*
|
685 |
-
*
|
686 |
-
*
|
687 |
-
*
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
*
|
720 |
-
*
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
if (
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
}
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
*
|
764 |
-
*
|
765 |
-
*
|
766 |
-
* <
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
*
|
828 |
-
*
|
829 |
-
*
|
830 |
-
*
|
831 |
-
*
|
832 |
-
*
|
833 |
-
*
|
834 |
-
*
|
835 |
-
*
|
836 |
-
*
|
837 |
-
*
|
838 |
-
*
|
839 |
-
* <li><code>
|
840 |
-
*
|
841 |
-
* <li><code>
|
842 |
-
* <li><code>
|
843 |
-
*
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
$opt['
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
}
|
920 |
-
|
921 |
-
return $this->authenticate('DisableMetricsCollection', $opt, $this->hostname);
|
922 |
-
}
|
923 |
-
}
|
924 |
-
|
925 |
-
|
926 |
-
/*%******************************************************************************************%*/
|
927 |
-
// EXCEPTIONS
|
928 |
-
|
929 |
-
/**
|
930 |
-
* Default AS Exception.
|
931 |
-
*/
|
932 |
class AS_Exception extends Exception {}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
*
|
19 |
+
*
|
20 |
+
* Auto Scaling is a web service designed to automatically launch or terminate EC2 instances based on user-defined policies, schedules, and
|
21 |
+
* health checks. Auto Scaling responds automatically to changing conditions. All you need to do is specify how it should respond to those
|
22 |
+
* changes.
|
23 |
+
*
|
24 |
+
* Auto Scaling groups can work across multiple Availability Zones - distinct physical locations for the hosted Amazon EC2 instances - so that
|
25 |
+
* if an Availability Zone becomes unavailable, Auto Scaling will automatically redistribute applications to a different Availability Zone.
|
26 |
+
*
|
27 |
+
* Every API call returns a response meta data object that contains a request identifier. Successful requests return an HTTP 200 status code.
|
28 |
+
* Unsuccessful requests return an error object and an HTTP status code of 400 or 500.
|
29 |
+
*
|
30 |
+
* The current WSDL is available at:
|
31 |
+
*
|
32 |
+
* <a
|
33 |
+
* href="http://autoscaling.amazonaws.com/doc/2010-08-01/AutoScaling.wsdl">http://autoscaling.amazonaws.com/doc/2010-08-01/AutoScaling.wsdl</a>
|
34 |
+
*
|
35 |
+
* <b>Endpoints</b>
|
36 |
+
*
|
37 |
+
* For information about this product's regions and endpoints, go to <a
|
38 |
+
* href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html">Regions and Endpoints</a> in the Amazon Web Services
|
39 |
+
* General Reference.
|
40 |
+
*
|
41 |
+
* @version Tue Jun 07 16:11:09 PDT 2011
|
42 |
+
* @license See the included NOTICE.md file for complete information.
|
43 |
+
* @copyright See the included NOTICE.md file for complete information.
|
44 |
+
* @link http://aws.amazon.com/autoscaling/Amazon Auto-Scaling
|
45 |
+
* @link http://aws.amazon.com/documentation/autoscaling/Amazon Auto-Scaling documentation
|
46 |
+
*/
|
47 |
+
class AmazonAS extends CFRuntime
|
48 |
+
{
|
49 |
+
|
50 |
+
/*%******************************************************************************************%*/
|
51 |
+
// CLASS CONSTANTS
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Specify the default queue URL.
|
55 |
+
*/
|
56 |
+
const DEFAULT_URL = 'autoscaling.us-east-1.amazonaws.com';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Specify the queue URL for the US-East (Northern Virginia) Region.
|
60 |
+
*/
|
61 |
+
const REGION_US_E1 = self::DEFAULT_URL;
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Specify the queue URL for the US-West (Northern California) Region.
|
65 |
+
*/
|
66 |
+
const REGION_US_W1 = 'autoscaling.us-west-1.amazonaws.com';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Specify the queue URL for the EU (Ireland) Region.
|
70 |
+
*/
|
71 |
+
const REGION_EU_W1 = 'autoscaling.eu-west-1.amazonaws.com';
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Specify the queue URL for the Asia Pacific (Singapore) Region.
|
75 |
+
*/
|
76 |
+
const REGION_APAC_SE1 = 'autoscaling.ap-southeast-1.amazonaws.com';
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Specify the queue URL for the Asia Pacific (Japan) Region.
|
80 |
+
*/
|
81 |
+
const REGION_APAC_NE1 = 'autoscaling.ap-northeast-1.amazonaws.com';
|
82 |
+
|
83 |
+
|
84 |
+
/*%******************************************************************************************%*/
|
85 |
+
// SETTERS
|
86 |
+
|
87 |
+
/**
|
88 |
+
* This allows you to explicitly sets the region for the service to use.
|
89 |
+
*
|
90 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_EU_W1>, or <REGION_APAC_SE1>.
|
91 |
+
* @return $this A reference to the current instance.
|
92 |
+
*/
|
93 |
+
public function set_region($region)
|
94 |
+
{
|
95 |
+
$this->set_hostname($region);
|
96 |
+
return $this;
|
97 |
+
}
|
98 |
+
|
99 |
+
|
100 |
+
/*%******************************************************************************************%*/
|
101 |
+
// CONSTRUCTOR
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Constructs a new instance of <AmazonAS>.
|
105 |
+
*
|
106 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <code>AWS_KEY</code> constant.
|
107 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <code>AWS_SECRET_KEY</code> constant.
|
108 |
+
* @return boolean false if no valid values are set, otherwise true.
|
109 |
+
*/
|
110 |
+
public function __construct($key = null, $secret_key = null)
|
111 |
+
{
|
112 |
+
$this->api_version = '2010-08-01';
|
113 |
+
$this->hostname = self::DEFAULT_URL;
|
114 |
+
|
115 |
+
if (!$key && !defined('AWS_KEY'))
|
116 |
+
{
|
117 |
+
// @codeCoverageIgnoreStart
|
118 |
+
throw new AS_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
119 |
+
// @codeCoverageIgnoreEnd
|
120 |
+
}
|
121 |
+
|
122 |
+
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
123 |
+
{
|
124 |
+
// @codeCoverageIgnoreStart
|
125 |
+
throw new AS_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
126 |
+
// @codeCoverageIgnoreEnd
|
127 |
+
}
|
128 |
+
|
129 |
+
return parent::__construct($key, $secret_key);
|
130 |
+
}
|
131 |
+
|
132 |
+
|
133 |
+
/*%******************************************************************************************%*/
|
134 |
+
// SERVICE METHODS
|
135 |
+
|
136 |
+
/**
|
137 |
+
*
|
138 |
+
* Creates a scheduled scaling action for a Auto Scaling group. If you leave a parameter unspecified, the corresponding value remains
|
139 |
+
* unchanged in the affected Auto Scaling group.
|
140 |
+
*
|
141 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling Group.
|
142 |
+
* @param string $scheduled_action_name (Required) The name of this scaling action.
|
143 |
+
* @param string $time (Required) The time for this action to start. Accepts any value that <php:strtotime()> understands.
|
144 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
145 |
+
* <li><code>MinSize</code> - <code>integer</code> - Optional - The minimum size for the new Auto Scaling group. </li>
|
146 |
+
* <li><code>MaxSize</code> - <code>integer</code> - Optional - The maximum size for the Auto Scaling group. </li>
|
147 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The number of EC2 instances that should be running in the group. </li>
|
148 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
149 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
150 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
151 |
+
*/
|
152 |
+
public function put_scheduled_update_group_action($auto_scaling_group_name, $scheduled_action_name, $time, $opt = null)
|
153 |
+
{
|
154 |
+
if (!$opt) $opt = array();
|
155 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
156 |
+
$opt['ScheduledActionName'] = $scheduled_action_name;
|
157 |
+
$opt['Time'] = $this->util->convert_date_to_iso8601($time);
|
158 |
+
|
159 |
+
return $this->authenticate('PutScheduledUpdateGroupAction', $opt, $this->hostname);
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
*
|
164 |
+
* Adjusts the desired size of the AutoScalingGroup by initiating scaling activities. When reducing the size of the group, it is not possible
|
165 |
+
* to define which EC2 instances will be terminated. This applies to any auto-scaling decisions that might result in terminating instances.
|
166 |
+
*
|
167 |
+
* There are two common use cases for <code>SetDesiredCapacity</code>: one for users of the Auto Scaling triggering system, and another for
|
168 |
+
* developers who write their own triggering systems. Both use cases relate to the concept of cooldown.
|
169 |
+
*
|
170 |
+
* In the first case, if you use the Auto Scaling triggering system, <code>SetDesiredCapacity</code> changes the size of your Auto Scaling
|
171 |
+
* group without regard to the cooldown period. This could be useful, for example, if Auto Scaling did something unexpected for some reason. If
|
172 |
+
* your cooldown period is 10 minutes, Auto Scaling would normally reject requests to change the size of the group for that entire 10 minute
|
173 |
+
* period. The <code>SetDesiredCapacity</code> command allows you to circumvent this restriction and change the size of the group before the
|
174 |
+
* end of the cooldown period.
|
175 |
+
*
|
176 |
+
* In the second case, if you write your own triggering system, you can use <code>SetDesiredCapacity</code> to control the size of your Auto
|
177 |
+
* Scaling group. If you want the same cooldown functionality that Auto Scaling offers, you can configure <code>SetDesiredCapacity</code> to
|
178 |
+
* honor cooldown by setting the <code>HonorCooldown</code> parameter to <code>true</code>.
|
179 |
+
*
|
180 |
+
* @param string $auto_scaling_group_name (Required) The name of the AutoScalingGroup.
|
181 |
+
* @param integer $desired_capacity (Required) The new capacity setting for the AutoScalingGroup.
|
182 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
183 |
+
* <li><code>HonorCooldown</code> - <code>boolean</code> - Optional - By default, <code>SetDesiredCapacity</code> overrides any cooldown period. Set to True if you want Auto Scaling to reject this request if the Auto Scaling group is in cooldown. </li>
|
184 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
185 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
186 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
187 |
+
*/
|
188 |
+
public function set_desired_capacity($auto_scaling_group_name, $desired_capacity, $opt = null)
|
189 |
+
{
|
190 |
+
if (!$opt) $opt = array();
|
191 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
192 |
+
$opt['DesiredCapacity'] = $desired_capacity;
|
193 |
+
|
194 |
+
return $this->authenticate('SetDesiredCapacity', $opt, $this->hostname);
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
*
|
199 |
+
* Deletes a policy created by PutScalingPolicy
|
200 |
+
*
|
201 |
+
* @param string $policy_name (Required) The name or PolicyARN of the policy you want to delete
|
202 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
203 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. </li>
|
204 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
205 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
206 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
207 |
+
*/
|
208 |
+
public function delete_policy($policy_name, $opt = null)
|
209 |
+
{
|
210 |
+
if (!$opt) $opt = array();
|
211 |
+
$opt['PolicyName'] = $policy_name;
|
212 |
+
|
213 |
+
return $this->authenticate('DeletePolicy', $opt, $this->hostname);
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
*
|
218 |
+
* Deletes a scheduled action previously created using the PutScheduledUpdateGroupAction.
|
219 |
+
*
|
220 |
+
* @param string $scheduled_action_name (Required) The name of the action you want to delete.
|
221 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
222 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group </li>
|
223 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
224 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
225 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
226 |
+
*/
|
227 |
+
public function delete_scheduled_action($scheduled_action_name, $opt = null)
|
228 |
+
{
|
229 |
+
if (!$opt) $opt = array();
|
230 |
+
$opt['ScheduledActionName'] = $scheduled_action_name;
|
231 |
+
|
232 |
+
return $this->authenticate('DeleteScheduledAction', $opt, $this->hostname);
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
*
|
237 |
+
* Returns a full description of the launch configurations given the specified names.
|
238 |
+
*
|
239 |
+
* If no names are specified, then the full details of all launch configurations are returned.
|
240 |
+
*
|
241 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
242 |
+
* <li><code>LaunchConfigurationNames</code> - <code>string|array</code> - Optional - A list of launch configuration names. Pass a string for a single value, or an indexed array for multiple values. </li>
|
243 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. </li>
|
244 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of launch configurations. </li>
|
245 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
246 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
247 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
248 |
+
*/
|
249 |
+
public function describe_launch_configurations($opt = null)
|
250 |
+
{
|
251 |
+
if (!$opt) $opt = array();
|
252 |
+
|
253 |
+
// Optional parameter
|
254 |
+
if (isset($opt['LaunchConfigurationNames']))
|
255 |
+
{
|
256 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
257 |
+
'LaunchConfigurationNames' => (is_array($opt['LaunchConfigurationNames']) ? $opt['LaunchConfigurationNames'] : array($opt['LaunchConfigurationNames']))
|
258 |
+
), 'member'));
|
259 |
+
unset($opt['LaunchConfigurationNames']);
|
260 |
+
}
|
261 |
+
|
262 |
+
return $this->authenticate('DescribeLaunchConfigurations', $opt, $this->hostname);
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
*
|
267 |
+
* Returns scaling process types for use in the ResumeProcesses and SuspendProcesses actions.
|
268 |
+
*
|
269 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
270 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
271 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
272 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
273 |
+
*/
|
274 |
+
public function describe_scaling_process_types($opt = null)
|
275 |
+
{
|
276 |
+
if (!$opt) $opt = array();
|
277 |
+
|
278 |
+
return $this->authenticate('DescribeScalingProcessTypes', $opt, $this->hostname);
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
*
|
283 |
+
* Returns a full description of each Auto Scaling group in the given list. This includes all Amazon EC2 instances that are members of the
|
284 |
+
* group. If a list of names is not provided, the service returns the full details of all Auto Scaling groups.
|
285 |
+
*
|
286 |
+
* This action supports pagination by returning a token if there are more pages to retrieve. To get the next page, call this action again with
|
287 |
+
* the returned token as the NextToken parameter.
|
288 |
+
*
|
289 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
290 |
+
* <li><code>AutoScalingGroupNames</code> - <code>string|array</code> - Optional - A list of Auto Scaling group names. Pass a string for a single value, or an indexed array for multiple values. </li>
|
291 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. </li>
|
292 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of records to return. </li>
|
293 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
294 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
295 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
296 |
+
*/
|
297 |
+
public function describe_auto_scaling_groups($opt = null)
|
298 |
+
{
|
299 |
+
if (!$opt) $opt = array();
|
300 |
+
|
301 |
+
// Optional parameter
|
302 |
+
if (isset($opt['AutoScalingGroupNames']))
|
303 |
+
{
|
304 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
305 |
+
'AutoScalingGroupNames' => (is_array($opt['AutoScalingGroupNames']) ? $opt['AutoScalingGroupNames'] : array($opt['AutoScalingGroupNames']))
|
306 |
+
), 'member'));
|
307 |
+
unset($opt['AutoScalingGroupNames']);
|
308 |
+
}
|
309 |
+
|
310 |
+
return $this->authenticate('DescribeAutoScalingGroups', $opt, $this->hostname);
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
*
|
315 |
+
* Enables monitoring of group metrics for the Auto Scaling group specified in AutoScalingGroupName. You can specify the list of enabled
|
316 |
+
* metrics with the Metrics parameter.
|
317 |
+
*
|
318 |
+
* Auto scaling metrics collection can be turned on only if the <code>InstanceMonitoring.Enabled</code> flag, in the Auto Scaling group's
|
319 |
+
* launch configuration, is set to <code>true</code>.
|
320 |
+
*
|
321 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling Group.
|
322 |
+
* @param string $granularity (Required) The granularity to associate with the metrics to collect. Currently, the only legal granularity is "1Minute".
|
323 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
324 |
+
* <li><code>Metrics</code> - <code>string|array</code> - Optional - The list of metrics to collect. If no metrics are specified, all metrics are enabled. The following metrics are supported: <ul> <li>GroupMinSize</li><li>GroupMaxSize</li><li>GroupDesiredCapacity</li><li>GroupInServiceInstances</li><li>GroupPendingInstances</li><li>GroupTerminatingInstances</li><li>GroupTotalInstances</li> </ul> Pass a string for a single value, or an indexed array for multiple values. </li>
|
325 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
326 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
327 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
328 |
+
*/
|
329 |
+
public function enable_metrics_collection($auto_scaling_group_name, $granularity, $opt = null)
|
330 |
+
{
|
331 |
+
if (!$opt) $opt = array();
|
332 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
333 |
+
|
334 |
+
// Optional parameter
|
335 |
+
if (isset($opt['Metrics']))
|
336 |
+
{
|
337 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
338 |
+
'Metrics' => (is_array($opt['Metrics']) ? $opt['Metrics'] : array($opt['Metrics']))
|
339 |
+
), 'member'));
|
340 |
+
unset($opt['Metrics']);
|
341 |
+
}
|
342 |
+
$opt['Granularity'] = $granularity;
|
343 |
+
|
344 |
+
return $this->authenticate('EnableMetricsCollection', $opt, $this->hostname);
|
345 |
+
}
|
346 |
+
|
347 |
+
/**
|
348 |
+
*
|
349 |
+
* Terminates the specified instance. Optionally, the desired group size can be adjusted.
|
350 |
+
*
|
351 |
+
* This call simply registers a termination request. The termination of the instance cannot happen immediately.
|
352 |
+
*
|
353 |
+
* @param string $instance_id (Required) The ID of the EC2 instance to be terminated.
|
354 |
+
* @param boolean $should_decrement_desired_capacity (Required) Specifies whether (<i>true</i>) or not (<i>false</i>) terminating this instance should also decrement the size of the AutoScalingGroup.
|
355 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
356 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
357 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
358 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
359 |
+
*/
|
360 |
+
public function terminate_instance_in_auto_scaling_group($instance_id, $should_decrement_desired_capacity, $opt = null)
|
361 |
+
{
|
362 |
+
if (!$opt) $opt = array();
|
363 |
+
$opt['InstanceId'] = $instance_id;
|
364 |
+
$opt['ShouldDecrementDesiredCapacity'] = $should_decrement_desired_capacity;
|
365 |
+
|
366 |
+
return $this->authenticate('TerminateInstanceInAutoScalingGroup', $opt, $this->hostname);
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
*
|
371 |
+
* Returns the scaling activities for the specified Auto Scaling group.
|
372 |
+
*
|
373 |
+
* If the specified <i>ActivityIds</i> list is empty, all the activities from the past six weeks are returned. Activities are sorted by
|
374 |
+
* completion time. Activities still in progress appear first on the list.
|
375 |
+
*
|
376 |
+
* This action supports pagination. If the response includes a token, there are more records available. To get the additional records, repeat
|
377 |
+
* the request with the response token as the NextToken parameter.
|
378 |
+
*
|
379 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
380 |
+
* <li><code>ActivityIds</code> - <code>string|array</code> - Optional - A list containing the activity IDs of the desired scaling activities. If this list is omitted, all activities are described. If an AutoScalingGroupName is provided, the results are limited to that group. The list of requested activities cannot contain more than 50 items. If unknown activities are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values. </li>
|
381 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the AutoScalingGroup. </li>
|
382 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of scaling activities to return. </li>
|
383 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results for pagination. </li>
|
384 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
385 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
386 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
387 |
+
*/
|
388 |
+
public function describe_scaling_activities($opt = null)
|
389 |
+
{
|
390 |
+
if (!$opt) $opt = array();
|
391 |
+
|
392 |
+
// Optional parameter
|
393 |
+
if (isset($opt['ActivityIds']))
|
394 |
+
{
|
395 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
396 |
+
'ActivityIds' => (is_array($opt['ActivityIds']) ? $opt['ActivityIds'] : array($opt['ActivityIds']))
|
397 |
+
), 'member'));
|
398 |
+
unset($opt['ActivityIds']);
|
399 |
+
}
|
400 |
+
|
401 |
+
return $this->authenticate('DescribeScalingActivities', $opt, $this->hostname);
|
402 |
+
}
|
403 |
+
|
404 |
+
/**
|
405 |
+
*
|
406 |
+
* Runs the policy you create for your Auto Scaling group in PutScalingPolicy.
|
407 |
+
*
|
408 |
+
* @param string $policy_name (Required) The name or PolicyARN of the policy you want to run.
|
409 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
410 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name or ARN of the Auto Scaling Group. </li>
|
411 |
+
* <li><code>HonorCooldown</code> - <code>boolean</code> - Optional - Set to True if you want Auto Scaling to reject this request if the Auto Scaling group is in cooldown. </li>
|
412 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
413 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
414 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
415 |
+
*/
|
416 |
+
public function execute_policy($policy_name, $opt = null)
|
417 |
+
{
|
418 |
+
if (!$opt) $opt = array();
|
419 |
+
$opt['PolicyName'] = $policy_name;
|
420 |
+
|
421 |
+
return $this->authenticate('ExecutePolicy', $opt, $this->hostname);
|
422 |
+
}
|
423 |
+
|
424 |
+
/**
|
425 |
+
*
|
426 |
+
* Returns a list of metrics and a corresponding list of granularities for each metric.
|
427 |
+
*
|
428 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
429 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
430 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
431 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
432 |
+
*/
|
433 |
+
public function describe_metric_collection_types($opt = null)
|
434 |
+
{
|
435 |
+
if (!$opt) $opt = array();
|
436 |
+
|
437 |
+
return $this->authenticate('DescribeMetricCollectionTypes', $opt, $this->hostname);
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
*
|
442 |
+
* Returns descriptions of what each policy does. This action supports pagination. If the response includes a token, there are more records
|
443 |
+
* available. To get the additional records, repeat the request with the response token as the NextToken parameter.
|
444 |
+
*
|
445 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
446 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. </li>
|
447 |
+
* <li><code>PolicyNames</code> - <code>string|array</code> - Optional - A list of policy names or policy ARNs to be described. If this list is omitted, all policy names are described. If an auto scaling group name is provided, the results are limited to that group.The list of requested policy names cannot contain more than 50 items. If unknown policy names are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values. </li>
|
448 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that is used to mark the start of the next batch of returned results for pagination. </li>
|
449 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of policies that will be described with each call. </li>
|
450 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
451 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
452 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
453 |
+
*/
|
454 |
+
public function describe_policies($opt = null)
|
455 |
+
{
|
456 |
+
if (!$opt) $opt = array();
|
457 |
+
|
458 |
+
// Optional parameter
|
459 |
+
if (isset($opt['PolicyNames']))
|
460 |
+
{
|
461 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
462 |
+
'PolicyNames' => (is_array($opt['PolicyNames']) ? $opt['PolicyNames'] : array($opt['PolicyNames']))
|
463 |
+
), 'member'));
|
464 |
+
unset($opt['PolicyNames']);
|
465 |
+
}
|
466 |
+
|
467 |
+
return $this->authenticate('DescribePolicies', $opt, $this->hostname);
|
468 |
+
}
|
469 |
+
|
470 |
+
/**
|
471 |
+
*
|
472 |
+
* Returns policy adjustment types for use in the PutScalingPolicy action.
|
473 |
+
*
|
474 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
475 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
476 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
477 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
478 |
+
*/
|
479 |
+
public function describe_adjustment_types($opt = null)
|
480 |
+
{
|
481 |
+
if (!$opt) $opt = array();
|
482 |
+
|
483 |
+
return $this->authenticate('DescribeAdjustmentTypes', $opt, $this->hostname);
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
*
|
488 |
+
* Deletes the specified auto scaling group if the group has no instances and no scaling activities in progress.
|
489 |
+
*
|
490 |
+
* To remove all instances before calling DeleteAutoScalingGroup, you can call UpdateAutoScalingGroup to set the minimum and maximum size of
|
491 |
+
* the AutoScalingGroup to zero.
|
492 |
+
*
|
493 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group.
|
494 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
495 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
496 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
497 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
498 |
+
*/
|
499 |
+
public function delete_auto_scaling_group($auto_scaling_group_name, $opt = null)
|
500 |
+
{
|
501 |
+
if (!$opt) $opt = array();
|
502 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
503 |
+
|
504 |
+
return $this->authenticate('DeleteAutoScalingGroup', $opt, $this->hostname);
|
505 |
+
}
|
506 |
+
|
507 |
+
/**
|
508 |
+
*
|
509 |
+
* Creates a new Auto Scaling group with the specified name. Once the creation request is completed, the AutoScalingGroup is ready to be used
|
510 |
+
* in other calls.
|
511 |
+
*
|
512 |
+
* The Auto Scaling group name must be unique within the scope of your AWS account, and under the quota of Auto Scaling groups allowed for
|
513 |
+
* your account.
|
514 |
+
*
|
515 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group.
|
516 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration to use with the Auto Scaling group.
|
517 |
+
* @param integer $min_size (Required) The minimum size of the Auto Scaling group.
|
518 |
+
* @param integer $max_size (Required) The maximum size of the Auto Scaling group.
|
519 |
+
* @param string|array $availability_zones (Required) A list of availability zones for the Auto Scaling group. Pass a string for a single value, or an indexed array for multiple values.
|
520 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
521 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The number of EC2 instances that should be running in the group. For more information, see SetDesiredCapacity. </li>
|
522 |
+
* <li><code>DefaultCooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start. </li>
|
523 |
+
* <li><code>LoadBalancerNames</code> - <code>string|array</code> - Optional - A list of LoadBalancers to use. Pass a string for a single value, or an indexed array for multiple values. </li>
|
524 |
+
* <li><code>HealthCheckType</code> - <code>string</code> - Optional - The service you want the health status from, Amazon EC2 or Elastic Load Balancer. Valid values are "EC2" or "ELB." </li>
|
525 |
+
* <li><code>HealthCheckGracePeriod</code> - <code>integer</code> - Optional - Length of time in seconds after a new EC2 instance comes into service that Auto Scaling starts checking its health. </li>
|
526 |
+
* <li><code>PlacementGroup</code> - <code>string</code> - Optional - Physical location of your cluster placement group created in Amazon EC2. </li>
|
527 |
+
* <li><code>VPCZoneIdentifier</code> - <code>string</code> - Optional - The subnet identifier of the Virtual Private Cloud. </li>
|
528 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
529 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
530 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
531 |
+
*/
|
532 |
+
public function create_auto_scaling_group($auto_scaling_group_name, $launch_configuration_name, $min_size, $max_size, $availability_zones, $opt = null)
|
533 |
+
{
|
534 |
+
if (!$opt) $opt = array();
|
535 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
536 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
537 |
+
$opt['MinSize'] = $min_size;
|
538 |
+
$opt['MaxSize'] = $max_size;
|
539 |
+
|
540 |
+
// Required parameter
|
541 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
542 |
+
'AvailabilityZones' => (is_array($availability_zones) ? $availability_zones : array($availability_zones))
|
543 |
+
), 'member'));
|
544 |
+
|
545 |
+
// Optional parameter
|
546 |
+
if (isset($opt['LoadBalancerNames']))
|
547 |
+
{
|
548 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
549 |
+
'LoadBalancerNames' => (is_array($opt['LoadBalancerNames']) ? $opt['LoadBalancerNames'] : array($opt['LoadBalancerNames']))
|
550 |
+
), 'member'));
|
551 |
+
unset($opt['LoadBalancerNames']);
|
552 |
+
}
|
553 |
+
|
554 |
+
return $this->authenticate('CreateAutoScalingGroup', $opt, $this->hostname);
|
555 |
+
}
|
556 |
+
|
557 |
+
/**
|
558 |
+
*
|
559 |
+
* Returns a description of each Auto Scaling instance in the InstanceIds list. If a list is not provided, the service returns the full
|
560 |
+
* details of all instances up to a maximum of fifty.
|
561 |
+
*
|
562 |
+
* This action supports pagination by returning a token if there are more pages to retrieve. To get the next page, call this action again with
|
563 |
+
* the returned token as the NextToken parameter.
|
564 |
+
*
|
565 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
566 |
+
* <li><code>InstanceIds</code> - <code>string|array</code> - Optional - The list of Auto Scaling instances to describe. If this list is omitted, all auto scaling instances are described. The list of requested instances cannot contain more than 50 items. If unknown instances are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values. </li>
|
567 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of Auto Scaling instances to be described with each call. </li>
|
568 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available. </li>
|
569 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
570 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
571 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
572 |
+
*/
|
573 |
+
public function describe_auto_scaling_instances($opt = null)
|
574 |
+
{
|
575 |
+
if (!$opt) $opt = array();
|
576 |
+
|
577 |
+
// Optional parameter
|
578 |
+
if (isset($opt['InstanceIds']))
|
579 |
+
{
|
580 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
581 |
+
'InstanceIds' => (is_array($opt['InstanceIds']) ? $opt['InstanceIds'] : array($opt['InstanceIds']))
|
582 |
+
), 'member'));
|
583 |
+
unset($opt['InstanceIds']);
|
584 |
+
}
|
585 |
+
|
586 |
+
return $this->authenticate('DescribeAutoScalingInstances', $opt, $this->hostname);
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
*
|
591 |
+
* Deletes the specified LaunchConfiguration.
|
592 |
+
*
|
593 |
+
* The specified launch configuration must not be attached to an Auto Scaling group. Once this call completes, the launch configuration is no
|
594 |
+
* longer available for use.
|
595 |
+
*
|
596 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration.
|
597 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
598 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
599 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
600 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
601 |
+
*/
|
602 |
+
public function delete_launch_configuration($launch_configuration_name, $opt = null)
|
603 |
+
{
|
604 |
+
if (!$opt) $opt = array();
|
605 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
606 |
+
|
607 |
+
return $this->authenticate('DeleteLaunchConfiguration', $opt, $this->hostname);
|
608 |
+
}
|
609 |
+
|
610 |
+
/**
|
611 |
+
*
|
612 |
+
* Creates or updates a policy for an Auto Scaling group. To update an existing policy, use the existing policy name and set the parameter(s)
|
613 |
+
* you want to change. Any existing parameter not changed in an update to an existing policy is not changed in this update request.
|
614 |
+
*
|
615 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling Group.
|
616 |
+
* @param string $policy_name (Required) The name of the policy you want to create or update.
|
617 |
+
* @param integer $scaling_adjustment (Required) The number of instances by which to scale. AdjustmentType determines the interpretation of this number (e.g., as an absolute number or as a percentage of the existing Auto Scaling group size). A positive increment adds to the current capacity and a negative value removes from the current capacity.
|
618 |
+
* @param string $adjustment_type (Required) Specifies whether the <code>ScalingAdjustment</code> is an absolute number or a percentage of the current capacity. Valid values are <code>ChangeInCapacity</code>, <code>ExactCapacity</code>, and <code>PercentChangeInCapacity</code>.
|
619 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
620 |
+
* <li><code>Cooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start. </li>
|
621 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
622 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
623 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
624 |
+
*/
|
625 |
+
public function put_scaling_policy($auto_scaling_group_name, $policy_name, $scaling_adjustment, $adjustment_type, $opt = null)
|
626 |
+
{
|
627 |
+
if (!$opt) $opt = array();
|
628 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
629 |
+
$opt['PolicyName'] = $policy_name;
|
630 |
+
$opt['ScalingAdjustment'] = $scaling_adjustment;
|
631 |
+
$opt['AdjustmentType'] = $adjustment_type;
|
632 |
+
|
633 |
+
return $this->authenticate('PutScalingPolicy', $opt, $this->hostname);
|
634 |
+
}
|
635 |
+
|
636 |
+
/**
|
637 |
+
*
|
638 |
+
* Sets the health status of an instance.
|
639 |
+
*
|
640 |
+
* @param string $instance_id (Required) The identifier of the EC2 instance.
|
641 |
+
* @param string $health_status (Required) The health status of the instance. "Healthy" means that the instance is healthy and should remain in service. "Unhealthy" means that the instance is unhealthy. Auto Scaling should terminate and replace it.
|
642 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
643 |
+
* <li><code>ShouldRespectGracePeriod</code> - <code>boolean</code> - Optional - If True, this call should respect the grace period associated with the group. </li>
|
644 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
645 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
646 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
647 |
+
*/
|
648 |
+
public function set_instance_health($instance_id, $health_status, $opt = null)
|
649 |
+
{
|
650 |
+
if (!$opt) $opt = array();
|
651 |
+
$opt['InstanceId'] = $instance_id;
|
652 |
+
$opt['HealthStatus'] = $health_status;
|
653 |
+
|
654 |
+
return $this->authenticate('SetInstanceHealth', $opt, $this->hostname);
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
*
|
659 |
+
* Updates the configuration for the specified AutoScalingGroup.
|
660 |
+
*
|
661 |
+
* To update an Auto Scaling group with a launch configuration that has the <code>InstanceMonitoring.enabled</code> flag set to
|
662 |
+
* <code>false</code>, you must first ensure that collection of group metrics is disabled. Otherwise, calls to UpdateAutoScalingGroup will
|
663 |
+
* fail. If you have previously enabled group metrics collection, you can disable collection of all group metrics by calling
|
664 |
+
* DisableMetricsCollection.
|
665 |
+
*
|
666 |
+
*
|
667 |
+
* The new settings are registered upon the completion of this call. Any launch configuration settings take effect on any triggers after this
|
668 |
+
* call returns. Triggers that are currently in progress aren't affected.
|
669 |
+
*
|
670 |
+
* If the new values are specified for the <i>MinSize</i> or <i>MaxSize</i> parameters, then there will be an implicit call to
|
671 |
+
* SetDesiredCapacity to set the group to the new <i>MaxSize</i>. All optional parameters are left unchanged if not passed in the request.
|
672 |
+
*
|
673 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group.
|
674 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
675 |
+
* <li><code>LaunchConfigurationName</code> - <code>string</code> - Optional - The name of the launch configuration. </li>
|
676 |
+
* <li><code>MinSize</code> - <code>integer</code> - Optional - The minimum size of the Auto Scaling group. </li>
|
677 |
+
* <li><code>MaxSize</code> - <code>integer</code> - Optional - The maximum size of the Auto Scaling group. </li>
|
678 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The desired capacity for the Auto Scaling group. </li>
|
679 |
+
* <li><code>DefaultCooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start. </li>
|
680 |
+
* <li><code>AvailabilityZones</code> - <code>string|array</code> - Optional - Availability zones for the group. Pass a string for a single value, or an indexed array for multiple values. </li>
|
681 |
+
* <li><code>HealthCheckType</code> - <code>string</code> - Optional - The service of interest for the health status check, either "EC2" for Amazon EC2 or "ELB" for Elastic Load Balancing. </li>
|
682 |
+
* <li><code>HealthCheckGracePeriod</code> - <code>integer</code> - Optional - The length of time that Auto Scaling waits before checking an instance's health status. The grace period begins when an instance comes into service. </li>
|
683 |
+
* <li><code>PlacementGroup</code> - <code>string</code> - Optional - The name of the cluster placement group, if applicable. For more information, go to Using Cluster Instances in the <i>Amazon EC2 User Guide</i>. </li>
|
684 |
+
* <li><code>VPCZoneIdentifier</code> - <code>string</code> - Optional - The identifier for the VPC connection, if applicable. </li>
|
685 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
686 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
687 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
688 |
+
*/
|
689 |
+
public function update_auto_scaling_group($auto_scaling_group_name, $opt = null)
|
690 |
+
{
|
691 |
+
if (!$opt) $opt = array();
|
692 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
693 |
+
|
694 |
+
// Optional parameter
|
695 |
+
if (isset($opt['AvailabilityZones']))
|
696 |
+
{
|
697 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
698 |
+
'AvailabilityZones' => (is_array($opt['AvailabilityZones']) ? $opt['AvailabilityZones'] : array($opt['AvailabilityZones']))
|
699 |
+
), 'member'));
|
700 |
+
unset($opt['AvailabilityZones']);
|
701 |
+
}
|
702 |
+
|
703 |
+
return $this->authenticate('UpdateAutoScalingGroup', $opt, $this->hostname);
|
704 |
+
}
|
705 |
+
|
706 |
+
/**
|
707 |
+
*
|
708 |
+
* Lists all the actions scheduled for your Auto Scaling group that haven't been executed. To see a list of action already executed, see the
|
709 |
+
* activity record returned in DescribeScalingActivities.
|
710 |
+
*
|
711 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
712 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. </li>
|
713 |
+
* <li><code>ScheduledActionNames</code> - <code>string|array</code> - Optional - A list of scheduled actions to be described. If this list is omitted, all scheduled actions are described. The list of requested scheduled actions cannot contain more than 50 items. If an auto scaling group name is provided, the results are limited to that group. If unknown scheduled actions are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values. </li>
|
714 |
+
* <li><code>StartTime</code> - <code>string</code> - Optional - The earliest scheduled start time to return. If scheduled action names are provided, this field will be ignored. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
715 |
+
* <li><code>EndTime</code> - <code>string</code> - Optional - The latest scheduled start time to return. If scheduled action names are provided, this field will be ignored. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
716 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. </li>
|
717 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of scheduled actions to return. </li>
|
718 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
719 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
720 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
721 |
+
*/
|
722 |
+
public function describe_scheduled_actions($opt = null)
|
723 |
+
{
|
724 |
+
if (!$opt) $opt = array();
|
725 |
+
|
726 |
+
// Optional parameter
|
727 |
+
if (isset($opt['ScheduledActionNames']))
|
728 |
+
{
|
729 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
730 |
+
'ScheduledActionNames' => (is_array($opt['ScheduledActionNames']) ? $opt['ScheduledActionNames'] : array($opt['ScheduledActionNames']))
|
731 |
+
), 'member'));
|
732 |
+
unset($opt['ScheduledActionNames']);
|
733 |
+
}
|
734 |
+
|
735 |
+
// Optional parameter
|
736 |
+
if (isset($opt['StartTime']))
|
737 |
+
{
|
738 |
+
$opt['StartTime'] = $this->util->convert_date_to_iso8601($opt['StartTime']);
|
739 |
+
}
|
740 |
+
|
741 |
+
// Optional parameter
|
742 |
+
if (isset($opt['EndTime']))
|
743 |
+
{
|
744 |
+
$opt['EndTime'] = $this->util->convert_date_to_iso8601($opt['EndTime']);
|
745 |
+
}
|
746 |
+
|
747 |
+
return $this->authenticate('DescribeScheduledActions', $opt, $this->hostname);
|
748 |
+
}
|
749 |
+
|
750 |
+
/**
|
751 |
+
*
|
752 |
+
* Suspends Auto Scaling processes for an Auto Scaling group. To suspend specific process types, specify them by name with the
|
753 |
+
* <code>ScalingProcesses.member.N</code> parameter. To suspend all process types, omit the <code>ScalingProcesses.member.N</code> parameter.
|
754 |
+
*
|
755 |
+
* Suspending either of the two primary process types, <code>Launch</code> or <code>Terminate</code>, can prevent other process types from
|
756 |
+
* functioning properly. For more information about processes and their dependencies, see ProcessType.
|
757 |
+
*
|
758 |
+
*
|
759 |
+
* To resume processes that have been suspended, use ResumeProcesses.
|
760 |
+
*
|
761 |
+
* @param string $auto_scaling_group_name (Required) The name or Amazon Resource Name (ARN) of the Auto Scaling group.
|
762 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
763 |
+
* <li><code>ScalingProcesses</code> - <code>string|array</code> - Optional - The processes that you want to suspend or resume, which can include one or more of the following: <ul> <li>Launch</li><li>Terminate</li><li>HealthCheck</li><li>ReplaceUnhealthy</li><li>AZRebalance</li><li>AlarmNotifications</li><li>ScheduledActions</li> </ul> To suspend all process types, omit this parameter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
764 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
765 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
766 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
767 |
+
*/
|
768 |
+
public function suspend_processes($auto_scaling_group_name, $opt = null)
|
769 |
+
{
|
770 |
+
if (!$opt) $opt = array();
|
771 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
772 |
+
|
773 |
+
// Optional parameter
|
774 |
+
if (isset($opt['ScalingProcesses']))
|
775 |
+
{
|
776 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
777 |
+
'ScalingProcesses' => (is_array($opt['ScalingProcesses']) ? $opt['ScalingProcesses'] : array($opt['ScalingProcesses']))
|
778 |
+
), 'member'));
|
779 |
+
unset($opt['ScalingProcesses']);
|
780 |
+
}
|
781 |
+
|
782 |
+
return $this->authenticate('SuspendProcesses', $opt, $this->hostname);
|
783 |
+
}
|
784 |
+
|
785 |
+
/**
|
786 |
+
*
|
787 |
+
* Resumes Auto Scaling processes for an Auto Scaling group. For more information, see SuspendProcesses and ProcessType.
|
788 |
+
*
|
789 |
+
* @param string $auto_scaling_group_name (Required) The name or Amazon Resource Name (ARN) of the Auto Scaling group.
|
790 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
791 |
+
* <li><code>ScalingProcesses</code> - <code>string|array</code> - Optional - The processes that you want to suspend or resume, which can include one or more of the following: <ul> <li>Launch</li><li>Terminate</li><li>HealthCheck</li><li>ReplaceUnhealthy</li><li>AZRebalance</li><li>AlarmNotifications</li><li>ScheduledActions</li> </ul> To suspend all process types, omit this parameter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
792 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
793 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
794 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
795 |
+
*/
|
796 |
+
public function resume_processes($auto_scaling_group_name, $opt = null)
|
797 |
+
{
|
798 |
+
if (!$opt) $opt = array();
|
799 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
800 |
+
|
801 |
+
// Optional parameter
|
802 |
+
if (isset($opt['ScalingProcesses']))
|
803 |
+
{
|
804 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
805 |
+
'ScalingProcesses' => (is_array($opt['ScalingProcesses']) ? $opt['ScalingProcesses'] : array($opt['ScalingProcesses']))
|
806 |
+
), 'member'));
|
807 |
+
unset($opt['ScalingProcesses']);
|
808 |
+
}
|
809 |
+
|
810 |
+
return $this->authenticate('ResumeProcesses', $opt, $this->hostname);
|
811 |
+
}
|
812 |
+
|
813 |
+
/**
|
814 |
+
*
|
815 |
+
* Creates a new launch configuration. Once created, the new launch configuration is available for immediate use.
|
816 |
+
*
|
817 |
+
* The launch configuration name used must be unique, within the scope of the client's AWS account, and the maximum limit of launch
|
818 |
+
* configurations must not yet have been met, or else the call will fail.
|
819 |
+
*
|
820 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration to create.
|
821 |
+
* @param string $image_id (Required) Unique ID of the <i>Amazon Machine Image</i> (AMI) which was assigned during registration. For more information about Amazon EC2 images, please go to Using AMIs in the <i>Amazon EC2 User Guide</i>
|
822 |
+
* @param string $instance_type (Required) The instance type of the EC2 instance. For more information about Amazon EC2 instance types, please go to Using Instances in the <i>Amazon EC2 User Guide</i>.
|
823 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
824 |
+
* <li><code>KeyName</code> - <code>string</code> - Optional - The name of the EC2 key pair. </li>
|
825 |
+
* <li><code>SecurityGroups</code> - <code>string|array</code> - Optional - The names of the security groups with which to associate EC2 instances. For more information about Amazon EC2 security groups, go to Using Security Groups in the <i>Amazon EC2 User Guide</i>. Pass a string for a single value, or an indexed array for multiple values. </li>
|
826 |
+
* <li><code>UserData</code> - <code>string</code> - Optional - The user data available to the launched EC2 instances. For more information about Amazon EC2 user data, please go to Using Instances in the <i>Amazon EC2 User Guide</i>. </li>
|
827 |
+
* <li><code>KernelId</code> - <code>string</code> - Optional - The ID of the kernel associated with the EC2 AMI. </li>
|
828 |
+
* <li><code>RamdiskId</code> - <code>string</code> - Optional - The ID of the RAM disk associated with the EC2 AMI. </li>
|
829 |
+
* <li><code>BlockDeviceMappings</code> - <code>array</code> - Optional - A list of mappings that specify how block devices are exposed to the instance. Each mapping is made up of a <i>VirtualName</i>, a <i>DeviceName</i>, and an <i>ebs</i> data structure that contains information about the associated Elastic Block Storage volume. For more information about Amazon EC2 BlockDeviceMappings, please go to Block Device Mapping in the <i>Amazon EC2 User Guide</i>. <ul>
|
830 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
831 |
+
* <li><code>VirtualName</code> - <code>string</code> - Optional - The virtual name associated with the device. </li>
|
832 |
+
* <li><code>DeviceName</code> - <code>string</code> - Required - The name of the device within Amazon EC2. </li>
|
833 |
+
* <li><code>Ebs</code> - <code>array</code> - Optional - The Elastic Block Storage volume information. Takes an associative array of parameters that can have the following keys: <ul>
|
834 |
+
* <li><code>SnapshotId</code> - <code>string</code> - Optional - The Snapshot ID. </li>
|
835 |
+
* <li><code>VolumeSize</code> - <code>integer</code> - Optional - The volume size, in GigaBytes. </li>
|
836 |
+
* </ul></li>
|
837 |
+
* </ul></li>
|
838 |
+
* </ul></li>
|
839 |
+
* <li><code>InstanceMonitoring</code> - <code>array</code> - Optional - Enables detailed monitoring. <ul>
|
840 |
+
* <li><code>Enabled</code> - <code>boolean</code> - Optional - If true, instance monitoring is enabled. </li></ul></li>
|
841 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
842 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
843 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
844 |
+
*/
|
845 |
+
public function create_launch_configuration($launch_configuration_name, $image_id, $instance_type, $opt = null)
|
846 |
+
{
|
847 |
+
if (!$opt) $opt = array();
|
848 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
849 |
+
$opt['ImageId'] = $image_id;
|
850 |
+
|
851 |
+
// Optional parameter
|
852 |
+
if (isset($opt['SecurityGroups']))
|
853 |
+
{
|
854 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
855 |
+
'SecurityGroups' => (is_array($opt['SecurityGroups']) ? $opt['SecurityGroups'] : array($opt['SecurityGroups']))
|
856 |
+
), 'member'));
|
857 |
+
unset($opt['SecurityGroups']);
|
858 |
+
}
|
859 |
+
$opt['InstanceType'] = $instance_type;
|
860 |
+
|
861 |
+
// Optional parameter
|
862 |
+
if (isset($opt['BlockDeviceMappings']))
|
863 |
+
{
|
864 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
865 |
+
'BlockDeviceMappings' => $opt['BlockDeviceMappings']
|
866 |
+
), 'member'));
|
867 |
+
unset($opt['BlockDeviceMappings']);
|
868 |
+
}
|
869 |
+
|
870 |
+
// Optional parameter
|
871 |
+
if (isset($opt['InstanceMonitoring']))
|
872 |
+
{
|
873 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
874 |
+
'InstanceMonitoring' => $opt['InstanceMonitoring']
|
875 |
+
), 'member'));
|
876 |
+
unset($opt['InstanceMonitoring']);
|
877 |
+
}
|
878 |
+
|
879 |
+
return $this->authenticate('CreateLaunchConfiguration', $opt, $this->hostname);
|
880 |
+
}
|
881 |
+
|
882 |
+
/**
|
883 |
+
*
|
884 |
+
* Disables monitoring of group metrics for the Auto Scaling group specified in AutoScalingGroupName. You can specify the list of affected
|
885 |
+
* metrics with the Metrics parameter.
|
886 |
+
*
|
887 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling Group.
|
888 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
889 |
+
* <li><code>Metrics</code> - <code>string|array</code> - Optional - The list of metrics to disable. If no metrics are specified, all metrics are disabled. The following metrics are supported: <ul> <li>GroupMinSize</li><li>GroupMaxSize</li><li>GroupDesiredCapacity</li><li>GroupInServiceInstances</li><li>GroupPendingInstances</li><li>GroupTerminatingInstances</li><li>GroupTotalInstances</li> </ul> Pass a string for a single value, or an indexed array for multiple values. </li>
|
890 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
891 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
892 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
893 |
+
*/
|
894 |
+
public function disable_metrics_collection($auto_scaling_group_name, $opt = null)
|
895 |
+
{
|
896 |
+
if (!$opt) $opt = array();
|
897 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
898 |
+
|
899 |
+
// Optional parameter
|
900 |
+
if (isset($opt['Metrics']))
|
901 |
+
{
|
902 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
903 |
+
'Metrics' => (is_array($opt['Metrics']) ? $opt['Metrics'] : array($opt['Metrics']))
|
904 |
+
), 'member'));
|
905 |
+
unset($opt['Metrics']);
|
906 |
+
}
|
907 |
+
|
908 |
+
return $this->authenticate('DisableMetricsCollection', $opt, $this->hostname);
|
909 |
+
}
|
910 |
+
}
|
911 |
+
|
912 |
+
|
913 |
+
/*%******************************************************************************************%*/
|
914 |
+
// EXCEPTIONS
|
915 |
+
|
916 |
+
/**
|
917 |
+
* Default AS Exception.
|
918 |
+
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
class AS_Exception extends Exception {}
|
app/libs/aws/services/cloudformation.class.php
CHANGED
@@ -1,317 +1,329 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
/**
|
18 |
-
*
|
19 |
-
*
|
20 |
-
*
|
21 |
-
*
|
22 |
-
*
|
23 |
-
*
|
24 |
-
*
|
25 |
-
*
|
26 |
-
*
|
27 |
-
*
|
28 |
-
*
|
29 |
-
*
|
30 |
-
*
|
31 |
-
* href="http://
|
32 |
-
*
|
33 |
-
*
|
34 |
-
*
|
35 |
-
*
|
36 |
-
*
|
37 |
-
*
|
38 |
-
*
|
39 |
-
*
|
40 |
-
*
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Specify the queue URL
|
65 |
-
*/
|
66 |
-
const
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Specify the queue URL for the
|
70 |
-
*/
|
71 |
-
const
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Specify the queue URL for the
|
75 |
-
*/
|
76 |
-
const
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
*
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
*
|
100 |
-
*
|
101 |
-
* @
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
*
|
148 |
-
*
|
149 |
-
*
|
150 |
-
*
|
151 |
-
*
|
152 |
-
*
|
153 |
-
* @
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
*
|
201 |
-
*
|
202 |
-
*
|
203 |
-
*
|
204 |
-
*
|
205 |
-
*
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
*
|
221 |
-
*
|
222 |
-
*
|
223 |
-
*
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
*
|
234 |
-
*
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
*
|
245 |
-
*
|
246 |
-
*
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
*
|
265 |
-
*
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
*
|
284 |
-
*
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
*
|
296 |
-
*
|
297 |
-
*
|
298 |
-
*
|
299 |
-
*
|
300 |
-
*
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
class CloudFormation_Exception extends Exception {}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
*
|
19 |
+
*
|
20 |
+
* This is the AWS CloudFormation API Reference. The major sections of this guide are described in the following table.
|
21 |
+
*
|
22 |
+
* <ul> <li> <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_Operations.html">Actions</a>: Alphabetical
|
23 |
+
* list of CloudFormation actions</li>
|
24 |
+
*
|
25 |
+
* <li> <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_Types.html">Data Types</a>: Alphabetical list of
|
26 |
+
* CloudFormation data types</li>
|
27 |
+
*
|
28 |
+
* <li> <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/CommonParameters.html">Common Parameters</a>:
|
29 |
+
* Parameters that all Query actions can use</li>
|
30 |
+
*
|
31 |
+
* <li> <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/CommonErrors.html">Common Errors</a>: Client and
|
32 |
+
* server errors that all actions can return</li>
|
33 |
+
*
|
34 |
+
* </ul>
|
35 |
+
*
|
36 |
+
* This guide is for programmers who need detailed information about the CloudFormation APIs. You use AWS CloudFormation to create and manage
|
37 |
+
* AWS infrastructure deployments predictably and repeatedly. CloudFormation helps you leverage AWS products such as Amazon EC2, EBS, Amazon
|
38 |
+
* SNS, ELB, and Auto Scaling to build highly-reliable, highly scalable, cost effective applications without worrying about creating and
|
39 |
+
* configuring the underlying the AWS infrastructure.
|
40 |
+
*
|
41 |
+
* Through the use of a template file you write, and a few AWS CloudFormation commands or API actions, AWS CloudFormation enables you to manage
|
42 |
+
* a collection of resources together as a single unit called a stack. AWS CloudFormation creates and deletes all member resources of the stack
|
43 |
+
* together and manages all dependencies between the resources for you.
|
44 |
+
*
|
45 |
+
* For more information about this product, go to the <a href="http://aws.amazon.com/documentation/cloudformation">CloudFormation Product
|
46 |
+
* Page</a>.
|
47 |
+
*
|
48 |
+
* Amazon CloudFormation makes use of other AWS products. If you need additional technical information about a specific AWS product, you can
|
49 |
+
* find the product's technical documentation at <a href="http://aws.amazon.com/documentation/">http://aws.amazon.com/documentation/</a>.
|
50 |
+
*
|
51 |
+
* @version Tue May 10 18:24:21 PDT 2011
|
52 |
+
* @license See the included NOTICE.md file for complete information.
|
53 |
+
* @copyright See the included NOTICE.md file for complete information.
|
54 |
+
* @link http://aws.amazon.com/cloudformation/Amazon CloudFormation
|
55 |
+
* @link http://aws.amazon.com/documentation/cloudformation/Amazon CloudFormation documentation
|
56 |
+
*/
|
57 |
+
class AmazonCloudFormation extends CFRuntime
|
58 |
+
{
|
59 |
+
|
60 |
+
/*%******************************************************************************************%*/
|
61 |
+
// CLASS CONSTANTS
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Specify the default queue URL.
|
65 |
+
*/
|
66 |
+
const DEFAULT_URL = 'cloudformation.us-east-1.amazonaws.com';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Specify the queue URL for the US-East (Northern Virginia) Region.
|
70 |
+
*/
|
71 |
+
const REGION_US_E1 = self::DEFAULT_URL;
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Specify the queue URL for the US-West (Northern California) Region.
|
75 |
+
*/
|
76 |
+
const REGION_US_W1 = 'cloudformation.us-west-1.amazonaws.com';
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Specify the queue URL for the EU (Ireland) Region.
|
80 |
+
*/
|
81 |
+
const REGION_EU_W1 = 'cloudformation.eu-west-1.amazonaws.com';
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Specify the queue URL for the Asia Pacific (Singapore) Region.
|
85 |
+
*/
|
86 |
+
const REGION_APAC_SE1 = 'cloudformation.ap-southeast-1.amazonaws.com';
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Specify the queue URL for the Asia Pacific (Japan) Region.
|
90 |
+
*/
|
91 |
+
const REGION_APAC_NE1 = 'cloudformation.ap-northeast-1.amazonaws.com';
|
92 |
+
|
93 |
+
|
94 |
+
/*%******************************************************************************************%*/
|
95 |
+
// SETTERS
|
96 |
+
|
97 |
+
/**
|
98 |
+
* This allows you to explicitly sets the region for the service to use.
|
99 |
+
*
|
100 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_EU_W1>, or <REGION_APAC_SE1>.
|
101 |
+
* @return $this A reference to the current instance.
|
102 |
+
*/
|
103 |
+
public function set_region($region)
|
104 |
+
{
|
105 |
+
$this->set_hostname($region);
|
106 |
+
return $this;
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
/*%******************************************************************************************%*/
|
111 |
+
// CONSTRUCTOR
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Constructs a new instance of <AmazonCloudFormation>.
|
115 |
+
*
|
116 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <code>AWS_KEY</code> constant.
|
117 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <code>AWS_SECRET_KEY</code> constant.
|
118 |
+
* @return boolean false if no valid values are set, otherwise true.
|
119 |
+
*/
|
120 |
+
public function __construct($key = null, $secret_key = null)
|
121 |
+
{
|
122 |
+
$this->api_version = '2010-05-15';
|
123 |
+
$this->hostname = self::DEFAULT_URL;
|
124 |
+
|
125 |
+
if (!$key && !defined('AWS_KEY'))
|
126 |
+
{
|
127 |
+
// @codeCoverageIgnoreStart
|
128 |
+
throw new CloudFormation_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
129 |
+
// @codeCoverageIgnoreEnd
|
130 |
+
}
|
131 |
+
|
132 |
+
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
133 |
+
{
|
134 |
+
// @codeCoverageIgnoreStart
|
135 |
+
throw new CloudFormation_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
136 |
+
// @codeCoverageIgnoreEnd
|
137 |
+
}
|
138 |
+
|
139 |
+
return parent::__construct($key, $secret_key);
|
140 |
+
}
|
141 |
+
|
142 |
+
|
143 |
+
/*%******************************************************************************************%*/
|
144 |
+
// SERVICE METHODS
|
145 |
+
|
146 |
+
/**
|
147 |
+
*
|
148 |
+
* Creates a stack as specified in the template. Once the call completes successfully, the stack creation starts. You can check the status of
|
149 |
+
* the stack via the DescribeStacks API.
|
150 |
+
*
|
151 |
+
* Currently, the limit for stacks is 20 stacks per account per region.
|
152 |
+
*
|
153 |
+
* @param string $stack_name (Required) The name associated with the stack. The name must be unique within your AWS account. Must contain only alphanumeric characters (case sensitive) and start with an alpha character. Maximum length of the name is 255 characters.
|
154 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
155 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - Structure containing the template body. (For more information, go to the AWS CloudFormation User Guide.) Condition: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used. </li>
|
156 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the AWS CloudFormation User Guide. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used. </li>
|
157 |
+
* <li><code>Parameters</code> - <code>array</code> - Optional - A list of <code>Parameter</code> structures. <ul>
|
158 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
159 |
+
* <li><code>ParameterKey</code> - <code>string</code> - Optional - The key associated with the parameter. </li>
|
160 |
+
* <li><code>ParameterValue</code> - <code>string</code> - Optional - The value associated with the parameter. </li>
|
161 |
+
* </ul></li>
|
162 |
+
* </ul></li>
|
163 |
+
* <li><code>DisableRollback</code> - <code>boolean</code> - Optional - Boolean to enable or disable rollback on stack creation failures.<br></br> Default: <code>false</code> </li>
|
164 |
+
* <li><code>TimeoutInMinutes</code> - <code>integer</code> - Optional - The amount of time that can pass before the stack status becomes CREATE_FAILED; if <code>DisableRollback</code> is not set or is set to <code>false</code>, the stack will be rolled back. </li>
|
165 |
+
* <li><code>NotificationARNs</code> - <code>string|array</code> - Optional - The Simple Notification Service (SNS) topic ARNs to publish stack related events. You can find your SNS topic ARNs using the SNS console or your Command Line Interface (CLI). Pass a string for a single value, or an indexed array for multiple values. </li>
|
166 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
167 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
168 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
169 |
+
*/
|
170 |
+
public function create_stack($stack_name, $opt = null)
|
171 |
+
{
|
172 |
+
if (!$opt) $opt = array();
|
173 |
+
$opt['StackName'] = $stack_name;
|
174 |
+
|
175 |
+
// Optional parameter
|
176 |
+
if (isset($opt['Parameters']))
|
177 |
+
{
|
178 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
179 |
+
'Parameters' => $opt['Parameters']
|
180 |
+
), 'member'));
|
181 |
+
unset($opt['Parameters']);
|
182 |
+
}
|
183 |
+
|
184 |
+
// Optional parameter
|
185 |
+
if (isset($opt['NotificationARNs']))
|
186 |
+
{
|
187 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
188 |
+
'NotificationARNs' => (is_array($opt['NotificationARNs']) ? $opt['NotificationARNs'] : array($opt['NotificationARNs']))
|
189 |
+
), 'member'));
|
190 |
+
unset($opt['NotificationARNs']);
|
191 |
+
}
|
192 |
+
|
193 |
+
return $this->authenticate('CreateStack', $opt, $this->hostname);
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
*
|
198 |
+
* Validates a specified template.
|
199 |
+
*
|
200 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
201 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - String containing the template body. (For more information, go to the AWS CloudFormation User Guide.) Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used. </li>
|
202 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the AWS CloudFormation User Guide. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used. </li>
|
203 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
204 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
205 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
206 |
+
*/
|
207 |
+
public function validate_template($opt = null)
|
208 |
+
{
|
209 |
+
if (!$opt) $opt = array();
|
210 |
+
|
211 |
+
return $this->authenticate('ValidateTemplate', $opt, $this->hostname);
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
*
|
216 |
+
* Returns the description for the specified stack; if no stack name was specified, then it returns the description for all the stacks
|
217 |
+
* created.
|
218 |
+
*
|
219 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
220 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack. Default: There is no default value. </li>
|
221 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
222 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
223 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
224 |
+
*/
|
225 |
+
public function describe_stacks($opt = null)
|
226 |
+
{
|
227 |
+
if (!$opt) $opt = array();
|
228 |
+
|
229 |
+
return $this->authenticate('DescribeStacks', $opt, $this->hostname);
|
230 |
+
}
|
231 |
+
|
232 |
+
/**
|
233 |
+
*
|
234 |
+
* Returns all the stack related events for the AWS account. If <code>StackName</code> is specified, returns events related to all the stacks
|
235 |
+
* with the given name. If <code>StackName</code> is not specified, returns all the events for the account. For more information about a
|
236 |
+
* stack's event history, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/CFNGuide">AWS CloudFormation User
|
237 |
+
* Guide</a>.
|
238 |
+
*
|
239 |
+
* Events are returned, even if the stack never existed or has been successfully deleted.
|
240 |
+
*
|
241 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
242 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack.<br></br> Default: There is no default value. </li>
|
243 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - String that identifies the start of the next list of events, if there is one.<br></br> Default: There is no default value. </li>
|
244 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
245 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
246 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
247 |
+
*/
|
248 |
+
public function describe_stack_events($opt = null)
|
249 |
+
{
|
250 |
+
if (!$opt) $opt = array();
|
251 |
+
|
252 |
+
return $this->authenticate('DescribeStackEvents', $opt, $this->hostname);
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
*
|
257 |
+
* Returns the template body for a specified stack name.
|
258 |
+
*
|
259 |
+
* If the template does not exist, a <code>ValidationError</code> is returned.
|
260 |
+
*
|
261 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack.
|
262 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
263 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
264 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
265 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
266 |
+
*/
|
267 |
+
public function get_template($stack_name, $opt = null)
|
268 |
+
{
|
269 |
+
if (!$opt) $opt = array();
|
270 |
+
$opt['StackName'] = $stack_name;
|
271 |
+
|
272 |
+
return $this->authenticate('GetTemplate', $opt, $this->hostname);
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
*
|
277 |
+
* Deletes a specified stack. Once the call completes successfully, stack deletion starts. Deleted stacks do not show up in the DescribeStacks
|
278 |
+
* API if the deletion has been completed successfully.
|
279 |
+
*
|
280 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack.
|
281 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
282 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
283 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
284 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
285 |
+
*/
|
286 |
+
public function delete_stack($stack_name, $opt = null)
|
287 |
+
{
|
288 |
+
if (!$opt) $opt = array();
|
289 |
+
$opt['StackName'] = $stack_name;
|
290 |
+
|
291 |
+
return $this->authenticate('DeleteStack', $opt, $this->hostname);
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
*
|
296 |
+
* Returns AWS resource descriptions. If <code>StackName</code> is specified, all the associated resources that are part of the stack are
|
297 |
+
* returned. If <code>PhysicalResourceId</code> is specified, all the associated resources of the stack the resource belongs to are returned.
|
298 |
+
*
|
299 |
+
* You must specify <code>StackName</code> or <code>PhysicalResourceId.</code> In addition, you can specify <code>LogicalResourceId</code> to
|
300 |
+
* filter the returned result. For more information about resources, the <code>LogicalResourceId</code> and <code>PhysicalResourceId</code>, go
|
301 |
+
* to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/CFNGuide">AWS CloudFormation User Guide</a>.
|
302 |
+
*
|
303 |
+
* A <code>ValidationError</code> is returned if you specify both <code>StackName</code> and <code>PhysicalResourceId</code> in the same
|
304 |
+
* request.
|
305 |
+
*
|
306 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
307 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack. Default: There is no default value. </li>
|
308 |
+
* <li><code>LogicalResourceId</code> - <code>string</code> - Optional - The logical name of the resource as specified in the template.<br></br> Default: There is on default value. </li>
|
309 |
+
* <li><code>PhysicalResourceId</code> - <code>string</code> - Optional - The name or unique identifier that corresponds to a physical instance ID of a resource supported by AWS CloudFormation. For example, for an Amazon Elastic Compute Cloud (EC2) instance, <code>PhysicalResourceId</code> corresponds to the <code>InstanceId</code>. You can pass the EC2 <code>InstanceId</code> to <code>DescribeStackResources</code> to find which stack the instance belongs to and what other resources are part of the stack. Default: There is no default value. </li>
|
310 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
311 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
312 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
313 |
+
*/
|
314 |
+
public function describe_stack_resources($opt = null)
|
315 |
+
{
|
316 |
+
if (!$opt) $opt = array();
|
317 |
+
|
318 |
+
return $this->authenticate('DescribeStackResources', $opt, $this->hostname);
|
319 |
+
}
|
320 |
+
}
|
321 |
+
|
322 |
+
|
323 |
+
/*%******************************************************************************************%*/
|
324 |
+
// EXCEPTIONS
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Default CloudFormation Exception.
|
328 |
+
*/
|
329 |
class CloudFormation_Exception extends Exception {}
|
app/libs/aws/services/cloudfront.class.php
CHANGED
@@ -1,1417 +1,1420 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
|
18 |
-
/*%******************************************************************************************%*/
|
19 |
-
// EXCEPTIONS
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Default CloudFront Exception.
|
23 |
-
*/
|
24 |
-
class CloudFront_Exception extends Exception {}
|
25 |
-
|
26 |
-
|
27 |
-
/*%******************************************************************************************%*/
|
28 |
-
// MAIN CLASS
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Amazon CloudFront is a web service for content delivery. It makes it easier for you to distribute content
|
32 |
-
* to end users quickly, with low latency and high data transfer speeds.
|
33 |
-
*
|
34 |
-
* CloudFront delivers your content through a worldwide network of edge locations. End users are routed to
|
35 |
-
* the nearest edge location, so content is delivered with the best possible performance. CloudFront works
|
36 |
-
* seamlessly with the Amazon Simple Storage Service, which durably stores the original, definitive versions
|
37 |
-
* of your files.
|
38 |
-
*
|
39 |
-
* @version 2011.03.11
|
40 |
-
* @license See the included NOTICE.md file for more information.
|
41 |
-
* @copyright See the included NOTICE.md file for more information.
|
42 |
-
* @link http://aws.amazon.com/cloudfront/ Amazon CloudFront
|
43 |
-
* @link http://aws.amazon.com/documentation/cloudfront/ Amazon CloudFront documentation
|
44 |
-
*/
|
45 |
-
class AmazonCloudFront extends CFRuntime
|
46 |
-
{
|
47 |
-
/**
|
48 |
-
* Specify the default queue URL.
|
49 |
-
*/
|
50 |
-
const DEFAULT_URL = 'cloudfront.amazonaws.com';
|
51 |
-
|
52 |
-
/**
|
53 |
-
* The InProgress state.
|
54 |
-
*/
|
55 |
-
const STATE_INPROGRESS = 'InProgress';
|
56 |
-
|
57 |
-
/**
|
58 |
-
* The Deployed state.
|
59 |
-
*/
|
60 |
-
const STATE_DEPLOYED = 'Deployed';
|
61 |
-
|
62 |
-
/**
|
63 |
-
* The base content to use for generating the DistributionConfig XML.
|
64 |
-
*/
|
65 |
-
var $base_xml;
|
66 |
-
|
67 |
-
/**
|
68 |
-
* The CloudFront distribution domain to use.
|
69 |
-
*/
|
70 |
-
var $domain;
|
71 |
-
|
72 |
-
/**
|
73 |
-
* The RSA key pair ID to use.
|
74 |
-
*/
|
75 |
-
var $key_pair_id;
|
76 |
-
|
77 |
-
/**
|
78 |
-
* The RSA private key resource locator.
|
79 |
-
*/
|
80 |
-
var $private_key;
|
81 |
-
|
82 |
-
|
83 |
-
/*%******************************************************************************************%*/
|
84 |
-
// CONSTRUCTOR
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Constructs a new instance of this class.
|
88 |
-
*
|
89 |
-
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <AWS_KEY> constant.
|
90 |
-
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <AWS_SECRET_KEY> constant.
|
91 |
-
* @return boolean A value of <code>false</code> if no valid values are set, otherwise <code>true</code>.
|
92 |
-
*/
|
93 |
-
public function __construct($key = null, $secret_key = null)
|
94 |
-
{
|
95 |
-
$this->api_version = '2010-11-01';
|
96 |
-
$this->hostname = self::DEFAULT_URL;
|
97 |
-
|
98 |
-
$this->base_xml = '<?xml version="1.0" encoding="UTF-8"?><%s xmlns="http://cloudfront.amazonaws.com/doc/' . $this->api_version . '/"></%1$s>';
|
99 |
-
|
100 |
-
if (!$key && !defined('AWS_KEY'))
|
101 |
-
{
|
102 |
-
throw new CloudFront_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
103 |
-
}
|
104 |
-
|
105 |
-
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
106 |
-
{
|
107 |
-
throw new CloudFront_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
108 |
-
}
|
109 |
-
|
110 |
-
// Set a default key pair ID
|
111 |
-
if (defined('AWS_CLOUDFRONT_KEYPAIR_ID'))
|
112 |
-
{
|
113 |
-
$this->key_pair_id = AWS_CLOUDFRONT_KEYPAIR_ID;
|
114 |
-
}
|
115 |
-
|
116 |
-
// Set a default private key
|
117 |
-
if (defined('AWS_CLOUDFRONT_PRIVATE_KEY_PEM'))
|
118 |
-
{
|
119 |
-
$this->private_key = AWS_CLOUDFRONT_PRIVATE_KEY_PEM;
|
120 |
-
}
|
121 |
-
|
122 |
-
return parent::__construct($key, $secret_key);
|
123 |
-
}
|
124 |
-
|
125 |
-
|
126 |
-
/*%******************************************************************************************%*/
|
127 |
-
// AUTHENTICATION
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Authenticates a connection to Amazon CloudFront. This method should not be used directly unless
|
131 |
-
* you're writing custom methods for this class.
|
132 |
-
*
|
133 |
-
* @param string $method (Required) The HTTP method to use to connect. Accepts <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>, and <code>HEAD</code>.
|
134 |
-
* @param string $path (Optional) The endpoint path to make requests to.
|
135 |
-
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
136 |
-
* @param string $xml (Optional) The XML body content to send along in the request.
|
137 |
-
* @param string $etag (Optional) The ETag value to pass along with the If-Match HTTP header.
|
138 |
-
* @param integer $redirects (Do Not Use) Used internally by this function on occasions when Amazon S3 returns a redirect code and it needs to call itself recursively.
|
139 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
140 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html Authentication
|
141 |
-
*/
|
142 |
-
public function authenticate($method = 'GET', $path = null, $opt = null, $xml = null, $etag = null, $redirects = 0)
|
143 |
-
{
|
144 |
-
if (!$opt) $opt = array();
|
145 |
-
$querystring = null;
|
146 |
-
|
147 |
-
$method_arguments = func_get_args();
|
148 |
-
|
149 |
-
// Use the caching flow to determine if we need to do a round-trip to the server.
|
150 |
-
if ($this->use_cache_flow)
|
151 |
-
{
|
152 |
-
// Generate an identifier specific to this particular set of arguments.
|
153 |
-
$cache_id = $this->key . '_' . get_class($this) . '_' . $method . sha1($path) . '_' . sha1(serialize($method_arguments));
|
154 |
-
|
155 |
-
// Instantiate the appropriate caching object.
|
156 |
-
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
157 |
-
|
158 |
-
if ($this->delete_cache)
|
159 |
-
{
|
160 |
-
$this->use_cache_flow = false;
|
161 |
-
$this->delete_cache = false;
|
162 |
-
return $this->cache_object->delete();
|
163 |
-
}
|
164 |
-
|
165 |
-
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
166 |
-
$data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
|
167 |
-
|
168 |
-
// Parse the XML body
|
169 |
-
$data = $this->parse_callback($data);
|
170 |
-
|
171 |
-
// End!
|
172 |
-
return $data;
|
173 |
-
}
|
174 |
-
|
175 |
-
// Generate query string
|
176 |
-
if (isset($opt['query_string']) && count($opt['query_string']))
|
177 |
-
{
|
178 |
-
$querystring = '?' . $this->util->to_query_string($opt['query_string']);
|
179 |
-
}
|
180 |
-
|
181 |
-
// Gather information to pass along to other classes.
|
182 |
-
$helpers = array(
|
183 |
-
'utilities' => $this->utilities_class,
|
184 |
-
'request' => $this->request_class,
|
185 |
-
'response' => $this->response_class,
|
186 |
-
);
|
187 |
-
|
188 |
-
// Compose the endpoint URL.
|
189 |
-
$request_url = 'https://' . $this->hostname . '/' . $this->api_version;
|
190 |
-
$request_url .= ($path) ? $path : '';
|
191 |
-
$request_url .= ($querystring) ? $querystring : '';
|
192 |
-
|
193 |
-
// Compose the request.
|
194 |
-
$request = new $this->request_class($request_url, $this->proxy, $helpers);
|
195 |
-
|
196 |
-
// Update RequestCore settings
|
197 |
-
$request->request_class = $this->request_class;
|
198 |
-
$request->response_class = $this->response_class;
|
199 |
-
|
200 |
-
// Pass along registered stream callbacks
|
201 |
-
if ($this->registered_streaming_read_callback)
|
202 |
-
{
|
203 |
-
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
204 |
-
}
|
205 |
-
|
206 |
-
if ($this->registered_streaming_write_callback)
|
207 |
-
{
|
208 |
-
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
209 |
-
}
|
210 |
-
|
211 |
-
// Generate required headers.
|
212 |
-
$request->set_method($method);
|
213 |
-
$canonical_date = gmdate($this->util->konst($this->util, 'DATE_FORMAT_RFC2616'));
|
214 |
-
$request->add_header('x-amz-date', $canonical_date);
|
215 |
-
$signature = base64_encode(hash_hmac('sha1', $canonical_date, $this->secret_key, true));
|
216 |
-
$request->add_header('Authorization', 'AWS ' . $this->key . ':' . $signature);
|
217 |
-
|
218 |
-
// Add configuration XML if we have it.
|
219 |
-
if ($xml)
|
220 |
-
{
|
221 |
-
$request->add_header('Content-Length', strlen($xml));
|
222 |
-
$request->add_header('Content-Type', 'application/xml');
|
223 |
-
$request->set_body($xml);
|
224 |
-
}
|
225 |
-
|
226 |
-
// Set If-Match: ETag header if we have one.
|
227 |
-
if ($etag)
|
228 |
-
{
|
229 |
-
$request->add_header('If-Match', $etag);
|
230 |
-
}
|
231 |
-
|
232 |
-
$curlopts = array();
|
233 |
-
|
234 |
-
// Set custom CURLOPT settings
|
235 |
-
if (isset($opt['curlopts']))
|
236 |
-
{
|
237 |
-
$curlopts = $opt['curlopts'];
|
238 |
-
unset($opt['curlopts']);
|
239 |
-
}
|
240 |
-
|
241 |
-
// Debug mode
|
242 |
-
if ($this->debug_mode)
|
243 |
-
{
|
244 |
-
$curlopts[CURLOPT_VERBOSE] = true;
|
245 |
-
}
|
246 |
-
|
247 |
-
if (count($curlopts))
|
248 |
-
{
|
249 |
-
$request->set_curlopts($curlopts);
|
250 |
-
}
|
251 |
-
|
252 |
-
// Manage the (newer) batch request API or the (older) returnCurlHandle setting.
|
253 |
-
if ($this->use_batch_flow)
|
254 |
-
{
|
255 |
-
$handle = $request->prep_request();
|
256 |
-
$this->batch_object->add($handle);
|
257 |
-
$this->use_batch_flow = false;
|
258 |
-
|
259 |
-
return $handle;
|
260 |
-
}
|
261 |
-
elseif (isset($opt['returnCurlHandle']) && $opt['returnCurlHandle'] == (bool) true)
|
262 |
-
{
|
263 |
-
return $request->prep_request();
|
264 |
-
}
|
265 |
-
|
266 |
-
// Send!
|
267 |
-
$request->send_request();
|
268 |
-
|
269 |
-
// Prepare the response.
|
270 |
-
$headers = $request->get_response_header();
|
271 |
-
if ($xml) $headers['x-aws-body'] = $xml;
|
272 |
-
|
273 |
-
$data = new $this->response_class($headers, $this->parse_callback($request->get_response_body()), $request->get_response_code());
|
274 |
-
|
275 |
-
// Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
|
276 |
-
if ((integer) $request->get_response_code() === 500 || (integer) $request->get_response_code() === 503)
|
277 |
-
{
|
278 |
-
if ($redirects <= $this->max_retries)
|
279 |
-
{
|
280 |
-
// Exponential backoff
|
281 |
-
$delay = (integer) (pow(4, $redirects) * 100000);
|
282 |
-
usleep($delay);
|
283 |
-
$data = $this->authenticate($method, $path, $opt, $xml, $etag, ++$redirects);
|
284 |
-
}
|
285 |
-
}
|
286 |
-
|
287 |
-
return $data;
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* When caching is enabled, this method fires the request to the server, and the response is cached.
|
292 |
-
* Accepts identical parameters as <authenticate()>. You should never call this method directly—it is
|
293 |
-
* used internally by the caching system.
|
294 |
-
*
|
295 |
-
* @param string $method (Required) The HTTP method to use to connect. Accepts <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>, and <code>HEAD</code>.
|
296 |
-
* @param string $path (Optional) The endpoint path to make requests to.
|
297 |
-
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
298 |
-
* @param string $xml (Optional) The XML body content to send along in the request.
|
299 |
-
* @param string $etag (Optional) The ETag value to pass along with the If-Match HTTP header.
|
300 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
301 |
-
*/
|
302 |
-
public function cache_callback($method = 'GET', $path = null, $opt = null, $xml = null, $etag = null)
|
303 |
-
{
|
304 |
-
// Disable the cache flow since it's already been handled.
|
305 |
-
$this->use_cache_flow = false;
|
306 |
-
|
307 |
-
// Make the request
|
308 |
-
$response = $this->authenticate($method, $path, $opt, $xml, $etag);
|
309 |
-
|
310 |
-
if (isset($response->body) && ($response->body instanceof SimpleXMLElement))
|
311 |
-
{
|
312 |
-
$response->body = $response->body->asXML();
|
313 |
-
}
|
314 |
-
|
315 |
-
return $response;
|
316 |
-
}
|
317 |
-
|
318 |
-
|
319 |
-
/*%******************************************************************************************%*/
|
320 |
-
// SETTERS
|
321 |
-
|
322 |
-
/**
|
323 |
-
* Set the key ID of the RSA key pair being used.
|
324 |
-
*
|
325 |
-
* @param string $key_pair_id (Required) The ID of the RSA key pair being used.
|
326 |
-
* @return $this A reference to the current instance.
|
327 |
-
*/
|
328 |
-
public function set_keypair_id($key_pair_id)
|
329 |
-
{
|
330 |
-
$this->key_pair_id = $key_pair_id;
|
331 |
-
return $this;
|
332 |
-
}
|
333 |
-
|
334 |
-
/**
|
335 |
-
* Set the private key resource locator being used.
|
336 |
-
*
|
337 |
-
* @param string $private_key (Optional) The contents of the RSA private key used to sign requests.
|
338 |
-
* @return $this A reference to the current instance.
|
339 |
-
*/
|
340 |
-
public function set_private_key($private_key)
|
341 |
-
{
|
342 |
-
$this->private_key = $private_key;
|
343 |
-
return $this;
|
344 |
-
}
|
345 |
-
|
346 |
-
/**
|
347 |
-
* Overrides the <CFRuntime::disable_ssl()> method from the base class. SSL is required for CloudFront.
|
348 |
-
*
|
349 |
-
* @return void
|
350 |
-
*/
|
351 |
-
public function disable_ssl()
|
352 |
-
{
|
353 |
-
throw new CloudFront_Exception('SSL/HTTPS is REQUIRED for Amazon CloudFront and cannot be disabled.');
|
354 |
-
}
|
355 |
-
|
356 |
-
|
357 |
-
/*%******************************************************************************************%*/
|
358 |
-
// GENERATE CONFIG XML
|
359 |
-
|
360 |
-
/**
|
361 |
-
* Generates the distribution configuration XML used with <create_distribution()> and
|
362 |
-
* <set_distribution_config()>.
|
363 |
-
*
|
364 |
-
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
365 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
366 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
367 |
-
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
368 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
369 |
-
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
370 |
-
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
371 |
-
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
372 |
-
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
373 |
-
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. It has a default value of <code>match-viewer</code>. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]</li>
|
374 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
375 |
-
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
376 |
-
* @return string An XML document to be used as the distribution configuration.
|
377 |
-
*/
|
378 |
-
public function generate_config_xml($origin, $caller_reference, $opt = null)
|
379 |
-
{
|
380 |
-
// Default, empty XML
|
381 |
-
$xml = simplexml_load_string(sprintf($this->base_xml, (
|
382 |
-
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
383 |
-
));
|
384 |
-
|
385 |
-
if (substr($origin, 0, 7) === 'http://' || substr($origin, 0, 8) === 'https://')
|
386 |
-
{
|
387 |
-
// Custom Origin
|
388 |
-
$custom_origin = $xml->addChild('CustomOrigin');
|
389 |
-
$custom_origin->addChild('DNSName', str_replace(array('http://', 'https://'), '', $origin));
|
390 |
-
|
391 |
-
if (isset($opt['OriginProtocolPolicy']))
|
392 |
-
{
|
393 |
-
$custom_origin->addChild('OriginProtocolPolicy', $opt['OriginProtocolPolicy']);
|
394 |
-
}
|
395 |
-
else
|
396 |
-
{
|
397 |
-
$custom_origin->addChild('OriginProtocolPolicy', 'match-viewer');
|
398 |
-
}
|
399 |
-
}
|
400 |
-
else
|
401 |
-
{
|
402 |
-
// S3 Origin
|
403 |
-
$s3_origin = $xml->addChild('S3Origin');
|
404 |
-
$s3_origin->addChild('DNSName', $origin . ((stripos($origin, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
405 |
-
|
406 |
-
// Origin Access Identity
|
407 |
-
if (isset($opt['OriginAccessIdentity']))
|
408 |
-
{
|
409 |
-
$s3_origin->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
410 |
-
}
|
411 |
-
}
|
412 |
-
|
413 |
-
// CallerReference
|
414 |
-
$xml->addChild('CallerReference', $caller_reference);
|
415 |
-
|
416 |
-
// CNAME
|
417 |
-
if (isset($opt['CNAME']))
|
418 |
-
{
|
419 |
-
if (is_array($opt['CNAME']))
|
420 |
-
{
|
421 |
-
foreach ($opt['CNAME'] as $cname)
|
422 |
-
{
|
423 |
-
$xml->addChild('CNAME', $cname);
|
424 |
-
}
|
425 |
-
}
|
426 |
-
else
|
427 |
-
{
|
428 |
-
$xml->addChild('CNAME', $opt['CNAME']);
|
429 |
-
}
|
430 |
-
}
|
431 |
-
|
432 |
-
// Comment
|
433 |
-
if (isset($opt['Comment']))
|
434 |
-
{
|
435 |
-
$xml->addChild('Comment', $opt['Comment']);
|
436 |
-
}
|
437 |
-
|
438 |
-
// Enabled
|
439 |
-
if (isset($opt['Enabled']))
|
440 |
-
{
|
441 |
-
$xml->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
442 |
-
}
|
443 |
-
else
|
444 |
-
{
|
445 |
-
$xml->addChild('Enabled', 'true');
|
446 |
-
}
|
447 |
-
|
448 |
-
// Logging
|
449 |
-
if (isset($opt['Logging']))
|
450 |
-
{
|
451 |
-
if (is_array($opt['Logging']))
|
452 |
-
{
|
453 |
-
$logging = $xml->addChild('Logging');
|
454 |
-
$bucket_name = $opt['Logging']['Bucket'];
|
455 |
-
|
456 |
-
// Origin
|
457 |
-
$logging->addChild('Bucket', $bucket_name . (
|
458 |
-
(stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''
|
459 |
-
));
|
460 |
-
|
461 |
-
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
462 |
-
}
|
463 |
-
}
|
464 |
-
|
465 |
-
// Required Protocols
|
466 |
-
if (isset($opt['RequiredProtocols']))
|
467 |
-
{
|
468 |
-
$required_protocols = $xml->addChild('RequiredProtocols');
|
469 |
-
$required_protocols->addChild('Protocol', $opt['RequiredProtocols']);
|
470 |
-
}
|
471 |
-
|
472 |
-
// Trusted Signers
|
473 |
-
if (isset($opt['TrustedSigners']))
|
474 |
-
{
|
475 |
-
$trusted_signers = $xml->addChild('TrustedSigners');
|
476 |
-
|
477 |
-
// Not an array? Convert to one.
|
478 |
-
if (!is_array($opt['TrustedSigners']))
|
479 |
-
{
|
480 |
-
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
481 |
-
}
|
482 |
-
|
483 |
-
// Handle 'Self' vs. everything else
|
484 |
-
foreach ($opt['TrustedSigners'] as $signer)
|
485 |
-
{
|
486 |
-
if (strtolower($signer) === 'self')
|
487 |
-
{
|
488 |
-
$trusted_signers->addChild('Self');
|
489 |
-
}
|
490 |
-
else
|
491 |
-
{
|
492 |
-
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
493 |
-
}
|
494 |
-
}
|
495 |
-
}
|
496 |
-
|
497 |
-
// DefaultRootObject
|
498 |
-
if (isset($opt['DefaultRootObject']))
|
499 |
-
{
|
500 |
-
$xml->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
501 |
-
}
|
502 |
-
|
503 |
-
return $xml->asXML();
|
504 |
-
}
|
505 |
-
|
506 |
-
/**
|
507 |
-
* Updates an existing configuration XML document.
|
508 |
-
*
|
509 |
-
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
510 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
511 |
-
* <li><code>CNAME</code> - <code>string|array</code> - Optional - The value or values to add to the existing list of CNAME values. If setting more than one, use an indexed array. Supports up to 10 CNAMEs.</li>
|
512 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
513 |
-
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
514 |
-
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
515 |
-
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
516 |
-
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>.</li>
|
517 |
-
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
518 |
-
* @return string XML document.
|
519 |
-
*/
|
520 |
-
public function update_config_xml($xml, $opt = null)
|
521 |
-
{
|
522 |
-
// If we receive a full CFResponse object, only use the body.
|
523 |
-
if ($xml instanceof CFResponse)
|
524 |
-
{
|
525 |
-
$xml = $xml->body;
|
526 |
-
}
|
527 |
-
|
528 |
-
// If we received a string of XML, convert it into a CFSimpleXML object.
|
529 |
-
if (is_string($xml))
|
530 |
-
{
|
531 |
-
$xml = simplexml_load_string($xml, $this->parser_class);
|
532 |
-
}
|
533 |
-
|
534 |
-
// Default, empty XML
|
535 |
-
$update = simplexml_load_string(sprintf($this->base_xml, (
|
536 |
-
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
537 |
-
), $this->parser_class);
|
538 |
-
|
539 |
-
// These can't change.
|
540 |
-
if (isset($xml->S3Origin))
|
541 |
-
{
|
542 |
-
$origin = $update->addChild('S3Origin');
|
543 |
-
$origin->addChild('DNSName', $xml->S3Origin->DNSName);
|
544 |
-
|
545 |
-
// origin access identity
|
546 |
-
if (isset($opt['OriginAccessIdentity']))
|
547 |
-
{
|
548 |
-
$update->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
549 |
-
}
|
550 |
-
elseif (isset($xml->OriginAccessIdentity))
|
551 |
-
{
|
552 |
-
$update->addChild('OriginAccessIdentity', $xml->OriginAccessIdentity);
|
553 |
-
}
|
554 |
-
}
|
555 |
-
elseif (isset($xml->CustomOrigin))
|
556 |
-
{
|
557 |
-
$origin = $update->addChild('CustomOrigin');
|
558 |
-
$origin->addChild('DNSName', $xml->CustomOrigin->DNSName);
|
559 |
-
}
|
560 |
-
$update->addChild('CallerReference', $xml->CallerReference);
|
561 |
-
|
562 |
-
// Add existing CNAME values
|
563 |
-
if ($xml->CNAME)
|
564 |
-
{
|
565 |
-
$update->addChild('CNAME', $xml->CNAME);
|
566 |
-
}
|
567 |
-
|
568 |
-
// Add new CNAME values
|
569 |
-
if (isset($opt['CNAME']))
|
570 |
-
{
|
571 |
-
if (is_array($opt['CNAME']))
|
572 |
-
{
|
573 |
-
foreach ($opt['CNAME'] as $cname)
|
574 |
-
{
|
575 |
-
$update->addChild('CNAME', $cname);
|
576 |
-
}
|
577 |
-
}
|
578 |
-
else
|
579 |
-
{
|
580 |
-
$update->addChild('CNAME', $opt['CNAME']);
|
581 |
-
}
|
582 |
-
}
|
583 |
-
|
584 |
-
// Comment
|
585 |
-
if (isset($opt['Comment']))
|
586 |
-
{
|
587 |
-
$update->addChild('Comment', $opt['Comment']);
|
588 |
-
}
|
589 |
-
elseif (isset($xml->Comment))
|
590 |
-
{
|
591 |
-
$update->addChild('Comment', $xml->Comment);
|
592 |
-
}
|
593 |
-
|
594 |
-
// DefaultRootObject
|
595 |
-
if (isset($opt['DefaultRootObject']))
|
596 |
-
{
|
597 |
-
$update->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
598 |
-
}
|
599 |
-
elseif (isset($xml->DefaultRootObject))
|
600 |
-
{
|
601 |
-
$update->addChild('DefaultRootObject', $xml->DefaultRootObject);
|
602 |
-
}
|
603 |
-
|
604 |
-
// Enabled
|
605 |
-
if (isset($opt['Enabled']))
|
606 |
-
{
|
607 |
-
$update->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
608 |
-
}
|
609 |
-
elseif (isset($xml->Enabled))
|
610 |
-
{
|
611 |
-
$update->addChild('Enabled', $xml->Enabled);
|
612 |
-
}
|
613 |
-
|
614 |
-
// Logging
|
615 |
-
if (isset($opt['Logging']))
|
616 |
-
{
|
617 |
-
if (is_array($opt['Logging']))
|
618 |
-
{
|
619 |
-
$logging = $update->addChild('Logging');
|
620 |
-
$bucket_name = $opt['Logging']['Bucket'];
|
621 |
-
|
622 |
-
// Origin
|
623 |
-
$logging->addChild('Bucket', $bucket_name . ((stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
624 |
-
|
625 |
-
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
626 |
-
}
|
627 |
-
}
|
628 |
-
elseif (isset($xml->Logging))
|
629 |
-
{
|
630 |
-
$logging = $update->addChild('Logging');
|
631 |
-
$logging->addChild('Bucket', $xml->Logging->Bucket);
|
632 |
-
$logging->addChild('Prefix', $xml->Logging->Prefix);
|
633 |
-
}
|
634 |
-
|
635 |
-
// Trusted Signers
|
636 |
-
if (isset($opt['TrustedSigners']))
|
637 |
-
{
|
638 |
-
$trusted_signers = $update->addChild('TrustedSigners');
|
639 |
-
|
640 |
-
// Not an array? Convert to one.
|
641 |
-
if (!is_array($opt['TrustedSigners']))
|
642 |
-
{
|
643 |
-
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
644 |
-
}
|
645 |
-
|
646 |
-
// Handle 'Self' vs. everything else
|
647 |
-
foreach ($opt['TrustedSigners'] as $signer)
|
648 |
-
{
|
649 |
-
if (strtolower($signer) === 'self')
|
650 |
-
{
|
651 |
-
$trusted_signers->addChild('Self');
|
652 |
-
}
|
653 |
-
else
|
654 |
-
{
|
655 |
-
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
656 |
-
}
|
657 |
-
}
|
658 |
-
}
|
659 |
-
elseif (isset($xml->TrustedSigners) && $xml->TrustedSigners->count())
|
660 |
-
{
|
661 |
-
$trusted_signers = $update->addChild('TrustedSigners');
|
662 |
-
|
663 |
-
// Handle 'Self' vs. everything else
|
664 |
-
foreach ($xml->TrustedSigners->children() as $signer_key => $signer_value)
|
665 |
-
{
|
666 |
-
if (strtolower((string) $signer_key) === 'self')
|
667 |
-
{
|
668 |
-
$trusted_signers->addChild('Self');
|
669 |
-
}
|
670 |
-
else
|
671 |
-
{
|
672 |
-
$trusted_signers->addChild('AwsAccountNumber', (string) $signer_value);
|
673 |
-
}
|
674 |
-
}
|
675 |
-
}
|
676 |
-
|
677 |
-
// Output
|
678 |
-
return $update->asXML();
|
679 |
-
}
|
680 |
-
|
681 |
-
/**
|
682 |
-
* Removes one or more CNAMEs from a <code>DistibutionConfig</code> XML document.
|
683 |
-
*
|
684 |
-
* @param CFSimpleXML|CFResponse|string $xml (Required) The source DistributionConfig XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
685 |
-
* @param string|array $cname (Optional) The value or values to remove from the existing list of CNAME values. To add a CNAME value, see <update_config_xml()>.
|
686 |
-
* @return string XML document.
|
687 |
-
*/
|
688 |
-
public function remove_cname($xml, $cname)
|
689 |
-
{
|
690 |
-
// If we receive a full CFResponse object, only use the body.
|
691 |
-
if ($xml instanceof CFResponse)
|
692 |
-
{
|
693 |
-
$xml = $xml->body;
|
694 |
-
}
|
695 |
-
|
696 |
-
// If we received a string of XML, convert it into a CFSimpleXML object.
|
697 |
-
if (is_string($xml))
|
698 |
-
{
|
699 |
-
$xml = simplexml_load_string($xml);
|
700 |
-
}
|
701 |
-
|
702 |
-
// Let's make sure that we have CNAMEs to remove in the first place.
|
703 |
-
if (isset($xml->CNAME))
|
704 |
-
{
|
705 |
-
// If we have an array of CNAME values...
|
706 |
-
if (is_array($cname))
|
707 |
-
{
|
708 |
-
foreach ($cname as $cn)
|
709 |
-
{
|
710 |
-
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
711 |
-
{
|
712 |
-
if ((string) $xml->CNAME[$i] == $cn)
|
713 |
-
{
|
714 |
-
unset($xml->CNAME[$i]);
|
715 |
-
break;
|
716 |
-
}
|
717 |
-
}
|
718 |
-
}
|
719 |
-
}
|
720 |
-
|
721 |
-
// If we only have one CNAME value...
|
722 |
-
else
|
723 |
-
{
|
724 |
-
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
725 |
-
{
|
726 |
-
if ((string) $xml->CNAME[$i] == $cname)
|
727 |
-
{
|
728 |
-
unset($xml->CNAME[$i]);
|
729 |
-
break;
|
730 |
-
}
|
731 |
-
}
|
732 |
-
}
|
733 |
-
}
|
734 |
-
|
735 |
-
return $xml->asXML();
|
736 |
-
}
|
737 |
-
|
738 |
-
/**
|
739 |
-
* Used to generate the origin access identity (OAI) Config XML used in <create_oai()>.
|
740 |
-
*
|
741 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
742 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
743 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
744 |
-
* @return string An XML document to be used as the OAI configuration.
|
745 |
-
*/
|
746 |
-
public function generate_oai_xml($caller_reference, $opt = null)
|
747 |
-
{
|
748 |
-
// Default, empty XML
|
749 |
-
$xml = simplexml_load_string(sprintf($this->base_xml, 'CloudFrontOriginAccessIdentityConfig'));
|
750 |
-
|
751 |
-
// CallerReference
|
752 |
-
$xml->addChild('CallerReference', $caller_reference);
|
753 |
-
|
754 |
-
// Comment
|
755 |
-
if (isset($opt['Comment']))
|
756 |
-
{
|
757 |
-
$xml->addChild('Comment', $opt['Comment']);
|
758 |
-
}
|
759 |
-
|
760 |
-
return $xml->asXML();
|
761 |
-
}
|
762 |
-
|
763 |
-
/**
|
764 |
-
* Updates the origin access identity (OAI) configureation XML used in <create_oai()>.
|
765 |
-
*
|
766 |
-
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_oai_config()> response, the entire <CFResponse> of a <get_oai_config()> response, or a string of XML generated by <generate_oai_xml()> or <update_oai_xml()>.
|
767 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
768 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
769 |
-
* @return string XML document.
|
770 |
-
*/
|
771 |
-
public function update_oai_xml($xml, $opt = null)
|
772 |
-
{
|
773 |
-
// If we receive a full CFResponse object, only use the body.
|
774 |
-
if ($xml instanceof CFResponse)
|
775 |
-
{
|
776 |
-
$xml = $xml->body;
|
777 |
-
}
|
778 |
-
|
779 |
-
// If we received a string of XML, convert it into a CFSimpleXML object.
|
780 |
-
if (is_string($xml))
|
781 |
-
{
|
782 |
-
$xml = simplexml_load_string($xml, $this->parser_class);
|
783 |
-
}
|
784 |
-
|
785 |
-
// Update the comment, if we have one.
|
786 |
-
if (isset($opt['Comment']) && isset($xml->Comment))
|
787 |
-
{
|
788 |
-
$xml->Comment = $opt['Comment'];
|
789 |
-
}
|
790 |
-
elseif (isset($opt['Comment']))
|
791 |
-
{
|
792 |
-
$xml->addChild('Comment', $opt['Comment']);
|
793 |
-
}
|
794 |
-
|
795 |
-
return $xml->asXML();
|
796 |
-
}
|
797 |
-
|
798 |
-
/**
|
799 |
-
* Generates the Invalidation Config XML used in <create_invalidation()>.
|
800 |
-
*
|
801 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
802 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
803 |
-
* <li><code>Paths</code> - <code>string|array</code> - Optional - One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values.</li></ul>
|
804 |
-
* @return string An XML document to be used as the Invalidation configuration.
|
805 |
-
*/
|
806 |
-
public function generate_invalidation_xml($caller_reference, $opt = null)
|
807 |
-
{
|
808 |
-
// Default, empty XML
|
809 |
-
$xml = simplexml_load_string(sprintf($this->base_xml, 'InvalidationBatch'));
|
810 |
-
|
811 |
-
// CallerReference
|
812 |
-
$xml->addChild('CallerReference', $caller_reference);
|
813 |
-
|
814 |
-
// Paths
|
815 |
-
if (isset($opt['Paths']))
|
816 |
-
{
|
817 |
-
$paths = is_array($opt['Paths']) ? $opt['Paths'] : array($opt['Paths']);
|
818 |
-
|
819 |
-
foreach ($paths as $path)
|
820 |
-
{
|
821 |
-
$path = str_replace('%2F', '/', rawurlencode($path));
|
822 |
-
$path = (substr($path, 0, 1) === '/') ? $path : ('/' . $path);
|
823 |
-
$xml->addChild('Path', $path);
|
824 |
-
}
|
825 |
-
}
|
826 |
-
|
827 |
-
return $xml->asXML();
|
828 |
-
}
|
829 |
-
|
830 |
-
|
831 |
-
/*%******************************************************************************************%*/
|
832 |
-
// DISTRIBUTIONS
|
833 |
-
|
834 |
-
/**
|
835 |
-
* Creates an Amazon CloudFront distribution. You can have up to 100 distributions in the Amazon
|
836 |
-
* CloudFront system.
|
837 |
-
*
|
838 |
-
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
839 |
-
* to true.
|
840 |
-
*
|
841 |
-
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
842 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
843 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
844 |
-
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
845 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
846 |
-
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of the Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
847 |
-
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> will enable the distribution. A value of <code>false</code> will disable it. The default value is <code>true</code>.</li>
|
848 |
-
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
849 |
-
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]. The default value is <code>match-viewer</code>. Requires a non-S3 origin.</li>
|
850 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> creates a streaming distribution. A value of <code>false</code> creates a standard distribution. The default value is <code>false</code>.</li>
|
851 |
-
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li>
|
852 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
853 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
854 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
855 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html POST Distribution
|
856 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateStreamingDistribution.html POST Streaming Distribution
|
857 |
-
*/
|
858 |
-
public function create_distribution($origin, $caller_reference, $opt = null)
|
859 |
-
{
|
860 |
-
if (!$opt) $opt = array();
|
861 |
-
|
862 |
-
$xml = $this->generate_config_xml($origin, $caller_reference, $opt);
|
863 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
864 |
-
|
865 |
-
return $this->authenticate('POST', $path, $opt, $xml, null);
|
866 |
-
}
|
867 |
-
|
868 |
-
/**
|
869 |
-
* Gets a list of distributions. By default, the list is returned as one result. If needed, paginate the
|
870 |
-
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
871 |
-
*
|
872 |
-
* Standard distributions are listed separately from streaming distributions. For streaming distributions,
|
873 |
-
* set the <code>Streaming</code> option to true.
|
874 |
-
*
|
875 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
876 |
-
* <li><code>Marker</code> - <code>string</code> - Optional - Use this setting when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last distribution on that page).</li>
|
877 |
-
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
878 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
879 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
880 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
881 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
882 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListDistributions.html GET Distribution List
|
883 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListStreamingDistributions.html GET Streaming Distribution List
|
884 |
-
*/
|
885 |
-
public function list_distributions($opt = null)
|
886 |
-
{
|
887 |
-
if (!$opt) $opt = array();
|
888 |
-
$opt['query_string'] = array();
|
889 |
-
|
890 |
-
// Pass these to the query string
|
891 |
-
foreach (array('Marker', 'MaxItems') as $option)
|
892 |
-
{
|
893 |
-
if (isset($opt[$option]))
|
894 |
-
{
|
895 |
-
$opt['query_string'][$option] = $opt[$option];
|
896 |
-
}
|
897 |
-
}
|
898 |
-
|
899 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
900 |
-
|
901 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
902 |
-
}
|
903 |
-
|
904 |
-
/**
|
905 |
-
* Gets distribution information for the specified distribution ID.
|
906 |
-
*
|
907 |
-
* Standard distributions are handled separately from streaming distributions. For streaming
|
908 |
-
* distributions, set the <code>Streaming</code> option to true.
|
909 |
-
*
|
910 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
911 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
912 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
913 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
914 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
915 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
916 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetDistribution.html GET Distribution
|
917 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistribution.html GET Streaming Distribution
|
918 |
-
*/
|
919 |
-
public function get_distribution_info($distribution_id, $opt = null)
|
920 |
-
{
|
921 |
-
if (!$opt) $opt = array();
|
922 |
-
|
923 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
924 |
-
$path .= '/' . $distribution_id;
|
925 |
-
|
926 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
927 |
-
}
|
928 |
-
|
929 |
-
/**
|
930 |
-
* Deletes a disabled distribution. If distribution hasn't been disabled, Amazon CloudFront returns a
|
931 |
-
* <code>DistributionNotDisabled</code> error. Use <set_distribution_config()> to disable a distribution before
|
932 |
-
* attempting to delete.
|
933 |
-
*
|
934 |
-
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
935 |
-
* to be <code>true</code>.
|
936 |
-
*
|
937 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
938 |
-
* @param string $etag (Required) The <code>ETag</code> header value retrieved from <get_distribution_config()>.
|
939 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
940 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
941 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
942 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
943 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
944 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteDistribution.html DELETE Distribution
|
945 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteStreamingDistribution.html DELETE Streaming Distribution
|
946 |
-
*/
|
947 |
-
public function delete_distribution($distribution_id, $etag, $opt = null)
|
948 |
-
{
|
949 |
-
if (!$opt) $opt = array();
|
950 |
-
|
951 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
952 |
-
$path .= '/' . $distribution_id;
|
953 |
-
|
954 |
-
return $this->authenticate('DELETE', $path, $opt, null, $etag);
|
955 |
-
}
|
956 |
-
|
957 |
-
/**
|
958 |
-
* Gets the current distribution configuration for the specified distribution ID.
|
959 |
-
*
|
960 |
-
* Standard distributions are handled separately from streaming distributions. For streaming
|
961 |
-
* distributions, set the <code>Streaming</code> option to true.
|
962 |
-
*
|
963 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
964 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
965 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
966 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
967 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
968 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
969 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetConfig.html GET Distribution Config
|
970 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistConfig.html GET Streaming Distribution Config
|
971 |
-
*/
|
972 |
-
public function get_distribution_config($distribution_id, $opt = null)
|
973 |
-
{
|
974 |
-
if (!$opt) $opt = array();
|
975 |
-
|
976 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
977 |
-
$path .= '/' . $distribution_id . '/config';
|
978 |
-
|
979 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
980 |
-
}
|
981 |
-
|
982 |
-
/**
|
983 |
-
* Sets a new distribution configuration for the specified distribution ID.
|
984 |
-
*
|
985 |
-
* Standard distributions are handled separately from streaming distributions. For streaming
|
986 |
-
* distributions, set the <code>Streaming</code> option to true.
|
987 |
-
*
|
988 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
989 |
-
* @param string $xml (Required) The DistributionConfig XML generated by <generate_config_xml()> or <update_config_xml()>.
|
990 |
-
* @param string $etag (Required) The ETag header value retrieved from <get_distribution_config()>.
|
991 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
992 |
-
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
993 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
994 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
995 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
996 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutConfig.html PUT Distribution Config
|
997 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutStreamingDistConfig.html PUT Streaming Distribution Config
|
998 |
-
*/
|
999 |
-
public function set_distribution_config($distribution_id, $xml, $etag, $opt = null)
|
1000 |
-
{
|
1001 |
-
if (!$opt) $opt = array();
|
1002 |
-
|
1003 |
-
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
1004 |
-
$path .= '/' . $distribution_id . '/config';
|
1005 |
-
|
1006 |
-
return $this->authenticate('PUT', $path, $opt, $xml, $etag);
|
1007 |
-
}
|
1008 |
-
|
1009 |
-
|
1010 |
-
/*%******************************************************************************************%*/
|
1011 |
-
// Origin Access Identity
|
1012 |
-
|
1013 |
-
/**
|
1014 |
-
* Creates a new Amazon CloudFront origin access identity (OAI). You can create up to 100 OAIs per AWS
|
1015 |
-
* account. For more information, see the Amazon CloudFront Developer Guide.
|
1016 |
-
*
|
1017 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1018 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1019 |
-
* <li><code>Comment</code> - <code>string</code> - Optional - A comment about the OAI.</li>
|
1020 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1021 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1022 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1023 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateOAI.html POST Origin Access Identity
|
1024 |
-
*/
|
1025 |
-
public function create_oai($caller_reference, $opt = null)
|
1026 |
-
{
|
1027 |
-
if (!$opt) $opt = array();
|
1028 |
-
|
1029 |
-
$path = '/origin-access-identity/cloudfront';
|
1030 |
-
$xml = $this->generate_oai_xml($caller_reference, $opt);
|
1031 |
-
|
1032 |
-
return $this->authenticate('POST', $path, $opt, $xml, null);
|
1033 |
-
}
|
1034 |
-
|
1035 |
-
/**
|
1036 |
-
* Gets a list of origin access identity (OAI) summaries. By default, the list is returned as one result.
|
1037 |
-
* If needed, paginate the list by specifying values for the <code>MaxItems</code> and <code>Marker</code>
|
1038 |
-
* parameters.
|
1039 |
-
*
|
1040 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1041 |
-
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the Marker to the value of the NextMarker from the current page's response (which is also the ID of the last distribution on that page).</li>
|
1042 |
-
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
1043 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1044 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1045 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1046 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListOAIs.html GET Origin Access Identity List
|
1047 |
-
*/
|
1048 |
-
public function list_oais($opt = null)
|
1049 |
-
{
|
1050 |
-
if (!$opt) $opt = array();
|
1051 |
-
$opt['query_string'] = array();
|
1052 |
-
|
1053 |
-
// Pass these to the query string
|
1054 |
-
foreach (array('Marker', 'MaxItems') as $option)
|
1055 |
-
{
|
1056 |
-
if (isset($opt[$option]))
|
1057 |
-
{
|
1058 |
-
$opt['query_string'][$option] = $opt[$option];
|
1059 |
-
}
|
1060 |
-
}
|
1061 |
-
|
1062 |
-
$path = '/origin-access-identity/cloudfront';
|
1063 |
-
|
1064 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
1065 |
-
}
|
1066 |
-
|
1067 |
-
/**
|
1068 |
-
* Gets information about an origin access identity (OAI).
|
1069 |
-
*
|
1070 |
-
* @param string $identity_id (Required) The Identity ID for an existing OAI.
|
1071 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1072 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1073 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1074 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1075 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAI.html GET Origin Access Identity
|
1076 |
-
*/
|
1077 |
-
public function get_oai($identity_id, $opt = null)
|
1078 |
-
{
|
1079 |
-
if (!$opt) $opt = array();
|
1080 |
-
|
1081 |
-
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1082 |
-
|
1083 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
1084 |
-
}
|
1085 |
-
|
1086 |
-
/**
|
1087 |
-
* Deletes an Amazon CloudFront origin access identity (OAI). To delete an OAI, the identity must first
|
1088 |
-
* be disassociated from all distributions (by updating each distribution's configuration to omit the
|
1089 |
-
* <code>OriginAccessIdentity</code> element). Wait until each distribution's state is <code>Deployed</code>
|
1090 |
-
* before deleting the OAI.
|
1091 |
-
*
|
1092 |
-
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1093 |
-
* @param string $etag (Required) The <code>ETag</code> header value retrieved from a call to <get_oai()>.
|
1094 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1095 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1096 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1097 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1098 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteOAI.html DELETE Origin Access Identity
|
1099 |
-
*/
|
1100 |
-
public function delete_oai($identity_id, $etag, $opt = null)
|
1101 |
-
{
|
1102 |
-
if (!$opt) $opt = array();
|
1103 |
-
|
1104 |
-
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1105 |
-
|
1106 |
-
return $this->authenticate('DELETE', $path, $opt, null, $etag);
|
1107 |
-
}
|
1108 |
-
|
1109 |
-
/**
|
1110 |
-
* Gets the configuration of the origin access identity (OAI) for the specified identity ID.
|
1111 |
-
*
|
1112 |
-
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1113 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1114 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1115 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1116 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1117 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAIConfig.html GET Origin Access Identity Config
|
1118 |
-
*/
|
1119 |
-
public function get_oai_config($identity_id, $opt = null)
|
1120 |
-
{
|
1121 |
-
if (!$opt) $opt = array();
|
1122 |
-
|
1123 |
-
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1124 |
-
|
1125 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
1126 |
-
}
|
1127 |
-
|
1128 |
-
/**
|
1129 |
-
* Sets the configuration for an Amazon CloudFront origin access identity (OAI). Use this when updating
|
1130 |
-
* the configuration. Currently, only comments may be updated. Follow the same process as when updating
|
1131 |
-
* an identity's configuration as you do when updating a distribution's configuration. For more
|
1132 |
-
* information, go to Updating a Distribution's Configuration in the Amazon CloudFront Developer Guide.
|
1133 |
-
*
|
1134 |
-
* When attempting to change configuration items that are not allowed to be updated, Amazon CloudFront
|
1135 |
-
* returns an <code>IllegalUpdate</code> error.
|
1136 |
-
*
|
1137 |
-
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1138 |
-
* @param string $xml (Required) The configuration XML generated by <generate_oai_xml()>.
|
1139 |
-
* @param string $etag (Required) The ETag header value retrieved from a call to <get_distribution_config()>.
|
1140 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1141 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1142 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1143 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1144 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutOAIConfig.html PUT Origin Access Identity Config
|
1145 |
-
*/
|
1146 |
-
public function set_oai_config($identity_id, $xml, $etag, $opt = null)
|
1147 |
-
{
|
1148 |
-
if (!$opt) $opt = array();
|
1149 |
-
|
1150 |
-
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1151 |
-
|
1152 |
-
return $this->authenticate('PUT', $path, $opt, $xml, $etag);
|
1153 |
-
}
|
1154 |
-
|
1155 |
-
|
1156 |
-
/*%******************************************************************************************%*/
|
1157 |
-
// INVALIDATION
|
1158 |
-
|
1159 |
-
/**
|
1160 |
-
* Creates a new invalidation request.
|
1161 |
-
*
|
1162 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1163 |
-
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1164 |
-
* @param string|array $paths (Required) One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values. values.
|
1165 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1166 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1167 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1168 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1169 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html POST Invalidation
|
1170 |
-
*/
|
1171 |
-
public function create_invalidation($distribution_id, $caller_reference, $paths, $opt = null)
|
1172 |
-
{
|
1173 |
-
if (!$opt) $opt = array();
|
1174 |
-
$opt['Paths'] = $paths;
|
1175 |
-
|
1176 |
-
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1177 |
-
$xml = $this->generate_invalidation_xml($caller_reference, $opt);
|
1178 |
-
|
1179 |
-
return $this->authenticate('POST', $path, $opt, $xml, null);
|
1180 |
-
}
|
1181 |
-
|
1182 |
-
/**
|
1183 |
-
* Gets a list of invalidations. By default, the list is returned as one result. If needed, paginate the
|
1184 |
-
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
1185 |
-
*
|
1186 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1187 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1188 |
-
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in the list of invalidations to begin. The results include invalidations in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> parameter to the value of the <code>NextMarker</code> parameter from the current page's response, which is also the ID of the last invalidation on that page.</li>
|
1189 |
-
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of invalidations you want in the response body. A maximum value of 100 can be used.</li>
|
1190 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1191 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1192 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1193 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListInvalidation.html GET Invalidation List
|
1194 |
-
*/
|
1195 |
-
public function list_invalidations($distribution_id, $opt = null)
|
1196 |
-
{
|
1197 |
-
if (!$opt) $opt = array();
|
1198 |
-
$opt['query_string'] = array();
|
1199 |
-
|
1200 |
-
// Pass these to the query string
|
1201 |
-
foreach (array('Marker', 'MaxItems') as $option)
|
1202 |
-
{
|
1203 |
-
if (isset($opt[$option]))
|
1204 |
-
{
|
1205 |
-
$opt['query_string'][$option] = $opt[$option];
|
1206 |
-
}
|
1207 |
-
}
|
1208 |
-
|
1209 |
-
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1210 |
-
|
1211 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
1212 |
-
}
|
1213 |
-
|
1214 |
-
/**
|
1215 |
-
* Gets information about an invalidation.
|
1216 |
-
*
|
1217 |
-
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1218 |
-
* @param string $invalidation_id (Required) The invalidation ID returned from <create_invalidation()> or <list_invalidations()>.
|
1219 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1220 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <
|
1221 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1222 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1223 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetInvalidation.html GET Invalidation
|
1224 |
-
*/
|
1225 |
-
public function get_invalidation($distribution_id, $invalidation_id, $opt = null)
|
1226 |
-
{
|
1227 |
-
if (!$opt) $opt = array();
|
1228 |
-
|
1229 |
-
$path = '/distribution/' . $distribution_id . '/invalidation/' . $invalidation_id;
|
1230 |
-
|
1231 |
-
return $this->authenticate('GET', $path, $opt, null, null);
|
1232 |
-
}
|
1233 |
-
|
1234 |
-
|
1235 |
-
/*%******************************************************************************************%*/
|
1236 |
-
// CONVENIENCE METHODS
|
1237 |
-
|
1238 |
-
/**
|
1239 |
-
* Gets a simplified list of standard distribution IDs.
|
1240 |
-
*
|
1241 |
-
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1242 |
-
* @return array A list of standard distribution IDs.
|
1243 |
-
*/
|
1244 |
-
public function get_distribution_list($pcre = null)
|
1245 |
-
{
|
1246 |
-
if ($this->use_batch_flow)
|
1247 |
-
{
|
1248 |
-
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1249 |
-
}
|
1250 |
-
|
1251 |
-
$list = $this->list_distributions();
|
1252 |
-
if ($list = $list->body->Id())
|
1253 |
-
{
|
1254 |
-
$list = $list->map_string($pcre);
|
1255 |
-
return $list;
|
1256 |
-
}
|
1257 |
-
|
1258 |
-
return array();
|
1259 |
-
}
|
1260 |
-
|
1261 |
-
/**
|
1262 |
-
* Gets a simplified list of streaming distribution IDs.
|
1263 |
-
*
|
1264 |
-
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1265 |
-
* @return array A list of streaming distribution IDs.
|
1266 |
-
*/
|
1267 |
-
public function get_streaming_distribution_list($pcre = null)
|
1268 |
-
{
|
1269 |
-
if ($this->use_batch_flow)
|
1270 |
-
{
|
1271 |
-
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1272 |
-
}
|
1273 |
-
|
1274 |
-
$list = $this->list_distributions(array(
|
1275 |
-
'Streaming' => true
|
1276 |
-
));
|
1277 |
-
if ($list = $list->body->Id())
|
1278 |
-
{
|
1279 |
-
$list = $list->map_string($pcre);
|
1280 |
-
return $list;
|
1281 |
-
}
|
1282 |
-
|
1283 |
-
return array();
|
1284 |
-
}
|
1285 |
-
|
1286 |
-
/**
|
1287 |
-
* Gets a simplified list of origin access identity (OAI) IDs.
|
1288 |
-
*
|
1289 |
-
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the OAI caller references against.
|
1290 |
-
* @return array A list of OAI IDs.
|
1291 |
-
*/
|
1292 |
-
public function get_oai_list($pcre = null)
|
1293 |
-
{
|
1294 |
-
if ($this->use_batch_flow)
|
1295 |
-
{
|
1296 |
-
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1297 |
-
}
|
1298 |
-
|
1299 |
-
$list = $this->list_oais();
|
1300 |
-
if ($list = $list->body->Id())
|
1301 |
-
{
|
1302 |
-
$list = $list->map_string($pcre);
|
1303 |
-
return $list;
|
1304 |
-
}
|
1305 |
-
|
1306 |
-
return array();
|
1307 |
-
}
|
1308 |
-
|
1309 |
-
|
1310 |
-
/*%******************************************************************************************%*/
|
1311 |
-
// URLS
|
1312 |
-
|
1313 |
-
/**
|
1314 |
-
* Generates a time-limited and/or query signed request for a private file with additional optional
|
1315 |
-
* restrictions.
|
1316 |
-
*
|
1317 |
-
* @param string $distribution_hostname (Required) The hostname of the distribution. Obtained from <create_distribution()> or <get_distribution_info()>.
|
1318 |
-
* @param string $filename (Required) The file name of the object. Query parameters can be included. You can use multicharacter match wild cards () or a single-character match wild card (?) anywhere in the string.
|
1319 |
-
* @param integer|string $expires (Required) The expiration time expressed either as a number of seconds since UNIX Epoch, or any string that <php:strtotime()> can understand.
|
1320 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1321 |
-
* <li><code>BecomeAvailable</code> - <code>integer|string</code> - Optional - The time when the private URL becomes active. Can be expressed either as a number of seconds since UNIX Epoch, or any string that <code>strtotime()</code> can understand.</li>
|
1322 |
-
* <li><code>IPAddress</code> - <code>string</code> - Optional - A single IP address to restrict the access to.</li>
|
1323 |
-
* <li><code>Secure</code> - <code>boolean</code> - Optional - Whether or not to use HTTPS as the protocol scheme. A value of <code>true</code> uses <code>https</code>. A value of <code>false</code> uses <code>http</code>. The default value is <code>false</code>.</li></ul>
|
1324 |
-
* @return string The file URL with authentication parameters.
|
1325 |
-
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html Serving Private Content
|
1326 |
-
*/
|
1327 |
-
public function get_private_object_url($distribution_hostname, $filename, $expires, $opt = null)
|
1328 |
-
{
|
1329 |
-
if (!$this->key_pair_id || !$this->private_key)
|
1330 |
-
{
|
1331 |
-
throw new CloudFront_Exception('You must set both a Amazon CloudFront keypair ID and an RSA private key for that keypair before using ' . __FUNCTION__ . '()');
|
1332 |
-
}
|
1333 |
-
if (!function_exists('openssl_sign'))
|
1334 |
-
{
|
1335 |
-
throw new CloudFront_Exception(__FUNCTION__ . '() uses functions from the OpenSSL PHP Extension <http://php.net/openssl>, which is not installed in this PHP installation');
|
1336 |
-
}
|
1337 |
-
|
1338 |
-
if (!$opt) $opt = array();
|
1339 |
-
|
1340 |
-
$resource = '';
|
1341 |
-
$expiration_key = 'Expires';
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
|
1371 |
-
|
1372 |
-
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
//
|
1384 |
-
$
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
1394 |
-
|
1395 |
-
//
|
1396 |
-
$
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
. '
|
1415 |
-
.
|
1416 |
-
|
1417 |
-
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// EXCEPTIONS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Default CloudFront Exception.
|
23 |
+
*/
|
24 |
+
class CloudFront_Exception extends Exception {}
|
25 |
+
|
26 |
+
|
27 |
+
/*%******************************************************************************************%*/
|
28 |
+
// MAIN CLASS
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Amazon CloudFront is a web service for content delivery. It makes it easier for you to distribute content
|
32 |
+
* to end users quickly, with low latency and high data transfer speeds.
|
33 |
+
*
|
34 |
+
* CloudFront delivers your content through a worldwide network of edge locations. End users are routed to
|
35 |
+
* the nearest edge location, so content is delivered with the best possible performance. CloudFront works
|
36 |
+
* seamlessly with the Amazon Simple Storage Service, which durably stores the original, definitive versions
|
37 |
+
* of your files.
|
38 |
+
*
|
39 |
+
* @version 2011.03.11
|
40 |
+
* @license See the included NOTICE.md file for more information.
|
41 |
+
* @copyright See the included NOTICE.md file for more information.
|
42 |
+
* @link http://aws.amazon.com/cloudfront/ Amazon CloudFront
|
43 |
+
* @link http://aws.amazon.com/documentation/cloudfront/ Amazon CloudFront documentation
|
44 |
+
*/
|
45 |
+
class AmazonCloudFront extends CFRuntime
|
46 |
+
{
|
47 |
+
/**
|
48 |
+
* Specify the default queue URL.
|
49 |
+
*/
|
50 |
+
const DEFAULT_URL = 'cloudfront.amazonaws.com';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* The InProgress state.
|
54 |
+
*/
|
55 |
+
const STATE_INPROGRESS = 'InProgress';
|
56 |
+
|
57 |
+
/**
|
58 |
+
* The Deployed state.
|
59 |
+
*/
|
60 |
+
const STATE_DEPLOYED = 'Deployed';
|
61 |
+
|
62 |
+
/**
|
63 |
+
* The base content to use for generating the DistributionConfig XML.
|
64 |
+
*/
|
65 |
+
var $base_xml;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* The CloudFront distribution domain to use.
|
69 |
+
*/
|
70 |
+
var $domain;
|
71 |
+
|
72 |
+
/**
|
73 |
+
* The RSA key pair ID to use.
|
74 |
+
*/
|
75 |
+
var $key_pair_id;
|
76 |
+
|
77 |
+
/**
|
78 |
+
* The RSA private key resource locator.
|
79 |
+
*/
|
80 |
+
var $private_key;
|
81 |
+
|
82 |
+
|
83 |
+
/*%******************************************************************************************%*/
|
84 |
+
// CONSTRUCTOR
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Constructs a new instance of this class.
|
88 |
+
*
|
89 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <AWS_KEY> constant.
|
90 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <AWS_SECRET_KEY> constant.
|
91 |
+
* @return boolean A value of <code>false</code> if no valid values are set, otherwise <code>true</code>.
|
92 |
+
*/
|
93 |
+
public function __construct($key = null, $secret_key = null)
|
94 |
+
{
|
95 |
+
$this->api_version = '2010-11-01';
|
96 |
+
$this->hostname = self::DEFAULT_URL;
|
97 |
+
|
98 |
+
$this->base_xml = '<?xml version="1.0" encoding="UTF-8"?><%s xmlns="http://cloudfront.amazonaws.com/doc/' . $this->api_version . '/"></%1$s>';
|
99 |
+
|
100 |
+
if (!$key && !defined('AWS_KEY'))
|
101 |
+
{
|
102 |
+
throw new CloudFront_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
103 |
+
}
|
104 |
+
|
105 |
+
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
106 |
+
{
|
107 |
+
throw new CloudFront_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
108 |
+
}
|
109 |
+
|
110 |
+
// Set a default key pair ID
|
111 |
+
if (defined('AWS_CLOUDFRONT_KEYPAIR_ID'))
|
112 |
+
{
|
113 |
+
$this->key_pair_id = AWS_CLOUDFRONT_KEYPAIR_ID;
|
114 |
+
}
|
115 |
+
|
116 |
+
// Set a default private key
|
117 |
+
if (defined('AWS_CLOUDFRONT_PRIVATE_KEY_PEM'))
|
118 |
+
{
|
119 |
+
$this->private_key = AWS_CLOUDFRONT_PRIVATE_KEY_PEM;
|
120 |
+
}
|
121 |
+
|
122 |
+
return parent::__construct($key, $secret_key);
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
/*%******************************************************************************************%*/
|
127 |
+
// AUTHENTICATION
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Authenticates a connection to Amazon CloudFront. This method should not be used directly unless
|
131 |
+
* you're writing custom methods for this class.
|
132 |
+
*
|
133 |
+
* @param string $method (Required) The HTTP method to use to connect. Accepts <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>, and <code>HEAD</code>.
|
134 |
+
* @param string $path (Optional) The endpoint path to make requests to.
|
135 |
+
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
136 |
+
* @param string $xml (Optional) The XML body content to send along in the request.
|
137 |
+
* @param string $etag (Optional) The ETag value to pass along with the If-Match HTTP header.
|
138 |
+
* @param integer $redirects (Do Not Use) Used internally by this function on occasions when Amazon S3 returns a redirect code and it needs to call itself recursively.
|
139 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
140 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html Authentication
|
141 |
+
*/
|
142 |
+
public function authenticate($method = 'GET', $path = null, $opt = null, $xml = null, $etag = null, $redirects = 0)
|
143 |
+
{
|
144 |
+
if (!$opt) $opt = array();
|
145 |
+
$querystring = null;
|
146 |
+
|
147 |
+
$method_arguments = func_get_args();
|
148 |
+
|
149 |
+
// Use the caching flow to determine if we need to do a round-trip to the server.
|
150 |
+
if ($this->use_cache_flow)
|
151 |
+
{
|
152 |
+
// Generate an identifier specific to this particular set of arguments.
|
153 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . $method . sha1($path) . '_' . sha1(serialize($method_arguments));
|
154 |
+
|
155 |
+
// Instantiate the appropriate caching object.
|
156 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
157 |
+
|
158 |
+
if ($this->delete_cache)
|
159 |
+
{
|
160 |
+
$this->use_cache_flow = false;
|
161 |
+
$this->delete_cache = false;
|
162 |
+
return $this->cache_object->delete();
|
163 |
+
}
|
164 |
+
|
165 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
166 |
+
$data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
|
167 |
+
|
168 |
+
// Parse the XML body
|
169 |
+
$data = $this->parse_callback($data);
|
170 |
+
|
171 |
+
// End!
|
172 |
+
return $data;
|
173 |
+
}
|
174 |
+
|
175 |
+
// Generate query string
|
176 |
+
if (isset($opt['query_string']) && count($opt['query_string']))
|
177 |
+
{
|
178 |
+
$querystring = '?' . $this->util->to_query_string($opt['query_string']);
|
179 |
+
}
|
180 |
+
|
181 |
+
// Gather information to pass along to other classes.
|
182 |
+
$helpers = array(
|
183 |
+
'utilities' => $this->utilities_class,
|
184 |
+
'request' => $this->request_class,
|
185 |
+
'response' => $this->response_class,
|
186 |
+
);
|
187 |
+
|
188 |
+
// Compose the endpoint URL.
|
189 |
+
$request_url = 'https://' . $this->hostname . '/' . $this->api_version;
|
190 |
+
$request_url .= ($path) ? $path : '';
|
191 |
+
$request_url .= ($querystring) ? $querystring : '';
|
192 |
+
|
193 |
+
// Compose the request.
|
194 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers);
|
195 |
+
|
196 |
+
// Update RequestCore settings
|
197 |
+
$request->request_class = $this->request_class;
|
198 |
+
$request->response_class = $this->response_class;
|
199 |
+
|
200 |
+
// Pass along registered stream callbacks
|
201 |
+
if ($this->registered_streaming_read_callback)
|
202 |
+
{
|
203 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
204 |
+
}
|
205 |
+
|
206 |
+
if ($this->registered_streaming_write_callback)
|
207 |
+
{
|
208 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
209 |
+
}
|
210 |
+
|
211 |
+
// Generate required headers.
|
212 |
+
$request->set_method($method);
|
213 |
+
$canonical_date = gmdate($this->util->konst($this->util, 'DATE_FORMAT_RFC2616'));
|
214 |
+
$request->add_header('x-amz-date', $canonical_date);
|
215 |
+
$signature = base64_encode(hash_hmac('sha1', $canonical_date, $this->secret_key, true));
|
216 |
+
$request->add_header('Authorization', 'AWS ' . $this->key . ':' . $signature);
|
217 |
+
|
218 |
+
// Add configuration XML if we have it.
|
219 |
+
if ($xml)
|
220 |
+
{
|
221 |
+
$request->add_header('Content-Length', strlen($xml));
|
222 |
+
$request->add_header('Content-Type', 'application/xml');
|
223 |
+
$request->set_body($xml);
|
224 |
+
}
|
225 |
+
|
226 |
+
// Set If-Match: ETag header if we have one.
|
227 |
+
if ($etag)
|
228 |
+
{
|
229 |
+
$request->add_header('If-Match', $etag);
|
230 |
+
}
|
231 |
+
|
232 |
+
$curlopts = array();
|
233 |
+
|
234 |
+
// Set custom CURLOPT settings
|
235 |
+
if (isset($opt['curlopts']))
|
236 |
+
{
|
237 |
+
$curlopts = $opt['curlopts'];
|
238 |
+
unset($opt['curlopts']);
|
239 |
+
}
|
240 |
+
|
241 |
+
// Debug mode
|
242 |
+
if ($this->debug_mode)
|
243 |
+
{
|
244 |
+
$curlopts[CURLOPT_VERBOSE] = true;
|
245 |
+
}
|
246 |
+
|
247 |
+
if (count($curlopts))
|
248 |
+
{
|
249 |
+
$request->set_curlopts($curlopts);
|
250 |
+
}
|
251 |
+
|
252 |
+
// Manage the (newer) batch request API or the (older) returnCurlHandle setting.
|
253 |
+
if ($this->use_batch_flow)
|
254 |
+
{
|
255 |
+
$handle = $request->prep_request();
|
256 |
+
$this->batch_object->add($handle);
|
257 |
+
$this->use_batch_flow = false;
|
258 |
+
|
259 |
+
return $handle;
|
260 |
+
}
|
261 |
+
elseif (isset($opt['returnCurlHandle']) && $opt['returnCurlHandle'] == (bool) true)
|
262 |
+
{
|
263 |
+
return $request->prep_request();
|
264 |
+
}
|
265 |
+
|
266 |
+
// Send!
|
267 |
+
$request->send_request();
|
268 |
+
|
269 |
+
// Prepare the response.
|
270 |
+
$headers = $request->get_response_header();
|
271 |
+
if ($xml) $headers['x-aws-body'] = $xml;
|
272 |
+
|
273 |
+
$data = new $this->response_class($headers, $this->parse_callback($request->get_response_body()), $request->get_response_code());
|
274 |
+
|
275 |
+
// Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
|
276 |
+
if ((integer) $request->get_response_code() === 500 || (integer) $request->get_response_code() === 503)
|
277 |
+
{
|
278 |
+
if ($redirects <= $this->max_retries)
|
279 |
+
{
|
280 |
+
// Exponential backoff
|
281 |
+
$delay = (integer) (pow(4, $redirects) * 100000);
|
282 |
+
usleep($delay);
|
283 |
+
$data = $this->authenticate($method, $path, $opt, $xml, $etag, ++$redirects);
|
284 |
+
}
|
285 |
+
}
|
286 |
+
|
287 |
+
return $data;
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* When caching is enabled, this method fires the request to the server, and the response is cached.
|
292 |
+
* Accepts identical parameters as <authenticate()>. You should never call this method directly—it is
|
293 |
+
* used internally by the caching system.
|
294 |
+
*
|
295 |
+
* @param string $method (Required) The HTTP method to use to connect. Accepts <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>, and <code>HEAD</code>.
|
296 |
+
* @param string $path (Optional) The endpoint path to make requests to.
|
297 |
+
* @param array $opt (Optional) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
298 |
+
* @param string $xml (Optional) The XML body content to send along in the request.
|
299 |
+
* @param string $etag (Optional) The ETag value to pass along with the If-Match HTTP header.
|
300 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
301 |
+
*/
|
302 |
+
public function cache_callback($method = 'GET', $path = null, $opt = null, $xml = null, $etag = null)
|
303 |
+
{
|
304 |
+
// Disable the cache flow since it's already been handled.
|
305 |
+
$this->use_cache_flow = false;
|
306 |
+
|
307 |
+
// Make the request
|
308 |
+
$response = $this->authenticate($method, $path, $opt, $xml, $etag);
|
309 |
+
|
310 |
+
if (isset($response->body) && ($response->body instanceof SimpleXMLElement))
|
311 |
+
{
|
312 |
+
$response->body = $response->body->asXML();
|
313 |
+
}
|
314 |
+
|
315 |
+
return $response;
|
316 |
+
}
|
317 |
+
|
318 |
+
|
319 |
+
/*%******************************************************************************************%*/
|
320 |
+
// SETTERS
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Set the key ID of the RSA key pair being used.
|
324 |
+
*
|
325 |
+
* @param string $key_pair_id (Required) The ID of the RSA key pair being used.
|
326 |
+
* @return $this A reference to the current instance.
|
327 |
+
*/
|
328 |
+
public function set_keypair_id($key_pair_id)
|
329 |
+
{
|
330 |
+
$this->key_pair_id = $key_pair_id;
|
331 |
+
return $this;
|
332 |
+
}
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Set the private key resource locator being used.
|
336 |
+
*
|
337 |
+
* @param string $private_key (Optional) The contents of the RSA private key used to sign requests.
|
338 |
+
* @return $this A reference to the current instance.
|
339 |
+
*/
|
340 |
+
public function set_private_key($private_key)
|
341 |
+
{
|
342 |
+
$this->private_key = $private_key;
|
343 |
+
return $this;
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Overrides the <CFRuntime::disable_ssl()> method from the base class. SSL is required for CloudFront.
|
348 |
+
*
|
349 |
+
* @return void
|
350 |
+
*/
|
351 |
+
public function disable_ssl()
|
352 |
+
{
|
353 |
+
throw new CloudFront_Exception('SSL/HTTPS is REQUIRED for Amazon CloudFront and cannot be disabled.');
|
354 |
+
}
|
355 |
+
|
356 |
+
|
357 |
+
/*%******************************************************************************************%*/
|
358 |
+
// GENERATE CONFIG XML
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Generates the distribution configuration XML used with <create_distribution()> and
|
362 |
+
* <set_distribution_config()>.
|
363 |
+
*
|
364 |
+
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
365 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
366 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
367 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
368 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
369 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
370 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
371 |
+
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
372 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
373 |
+
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. It has a default value of <code>match-viewer</code>. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]</li>
|
374 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
375 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
376 |
+
* @return string An XML document to be used as the distribution configuration.
|
377 |
+
*/
|
378 |
+
public function generate_config_xml($origin, $caller_reference, $opt = null)
|
379 |
+
{
|
380 |
+
// Default, empty XML
|
381 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, (
|
382 |
+
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
383 |
+
));
|
384 |
+
|
385 |
+
if (substr($origin, 0, 7) === 'http://' || substr($origin, 0, 8) === 'https://')
|
386 |
+
{
|
387 |
+
// Custom Origin
|
388 |
+
$custom_origin = $xml->addChild('CustomOrigin');
|
389 |
+
$custom_origin->addChild('DNSName', str_replace(array('http://', 'https://'), '', $origin));
|
390 |
+
|
391 |
+
if (isset($opt['OriginProtocolPolicy']))
|
392 |
+
{
|
393 |
+
$custom_origin->addChild('OriginProtocolPolicy', $opt['OriginProtocolPolicy']);
|
394 |
+
}
|
395 |
+
else
|
396 |
+
{
|
397 |
+
$custom_origin->addChild('OriginProtocolPolicy', 'match-viewer');
|
398 |
+
}
|
399 |
+
}
|
400 |
+
else
|
401 |
+
{
|
402 |
+
// S3 Origin
|
403 |
+
$s3_origin = $xml->addChild('S3Origin');
|
404 |
+
$s3_origin->addChild('DNSName', $origin . ((stripos($origin, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
405 |
+
|
406 |
+
// Origin Access Identity
|
407 |
+
if (isset($opt['OriginAccessIdentity']))
|
408 |
+
{
|
409 |
+
$s3_origin->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
410 |
+
}
|
411 |
+
}
|
412 |
+
|
413 |
+
// CallerReference
|
414 |
+
$xml->addChild('CallerReference', $caller_reference);
|
415 |
+
|
416 |
+
// CNAME
|
417 |
+
if (isset($opt['CNAME']))
|
418 |
+
{
|
419 |
+
if (is_array($opt['CNAME']))
|
420 |
+
{
|
421 |
+
foreach ($opt['CNAME'] as $cname)
|
422 |
+
{
|
423 |
+
$xml->addChild('CNAME', $cname);
|
424 |
+
}
|
425 |
+
}
|
426 |
+
else
|
427 |
+
{
|
428 |
+
$xml->addChild('CNAME', $opt['CNAME']);
|
429 |
+
}
|
430 |
+
}
|
431 |
+
|
432 |
+
// Comment
|
433 |
+
if (isset($opt['Comment']))
|
434 |
+
{
|
435 |
+
$xml->addChild('Comment', $opt['Comment']);
|
436 |
+
}
|
437 |
+
|
438 |
+
// Enabled
|
439 |
+
if (isset($opt['Enabled']))
|
440 |
+
{
|
441 |
+
$xml->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
442 |
+
}
|
443 |
+
else
|
444 |
+
{
|
445 |
+
$xml->addChild('Enabled', 'true');
|
446 |
+
}
|
447 |
+
|
448 |
+
// Logging
|
449 |
+
if (isset($opt['Logging']))
|
450 |
+
{
|
451 |
+
if (is_array($opt['Logging']))
|
452 |
+
{
|
453 |
+
$logging = $xml->addChild('Logging');
|
454 |
+
$bucket_name = $opt['Logging']['Bucket'];
|
455 |
+
|
456 |
+
// Origin
|
457 |
+
$logging->addChild('Bucket', $bucket_name . (
|
458 |
+
(stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''
|
459 |
+
));
|
460 |
+
|
461 |
+
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
462 |
+
}
|
463 |
+
}
|
464 |
+
|
465 |
+
// Required Protocols
|
466 |
+
if (isset($opt['RequiredProtocols']))
|
467 |
+
{
|
468 |
+
$required_protocols = $xml->addChild('RequiredProtocols');
|
469 |
+
$required_protocols->addChild('Protocol', $opt['RequiredProtocols']);
|
470 |
+
}
|
471 |
+
|
472 |
+
// Trusted Signers
|
473 |
+
if (isset($opt['TrustedSigners']))
|
474 |
+
{
|
475 |
+
$trusted_signers = $xml->addChild('TrustedSigners');
|
476 |
+
|
477 |
+
// Not an array? Convert to one.
|
478 |
+
if (!is_array($opt['TrustedSigners']))
|
479 |
+
{
|
480 |
+
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
481 |
+
}
|
482 |
+
|
483 |
+
// Handle 'Self' vs. everything else
|
484 |
+
foreach ($opt['TrustedSigners'] as $signer)
|
485 |
+
{
|
486 |
+
if (strtolower($signer) === 'self')
|
487 |
+
{
|
488 |
+
$trusted_signers->addChild('Self');
|
489 |
+
}
|
490 |
+
else
|
491 |
+
{
|
492 |
+
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
493 |
+
}
|
494 |
+
}
|
495 |
+
}
|
496 |
+
|
497 |
+
// DefaultRootObject
|
498 |
+
if (isset($opt['DefaultRootObject']))
|
499 |
+
{
|
500 |
+
$xml->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
501 |
+
}
|
502 |
+
|
503 |
+
return $xml->asXML();
|
504 |
+
}
|
505 |
+
|
506 |
+
/**
|
507 |
+
* Updates an existing configuration XML document.
|
508 |
+
*
|
509 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
510 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
511 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - The value or values to add to the existing list of CNAME values. If setting more than one, use an indexed array. Supports up to 10 CNAMEs.</li>
|
512 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
513 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
514 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
515 |
+
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
516 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>.</li>
|
517 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
518 |
+
* @return string XML document.
|
519 |
+
*/
|
520 |
+
public function update_config_xml($xml, $opt = null)
|
521 |
+
{
|
522 |
+
// If we receive a full CFResponse object, only use the body.
|
523 |
+
if ($xml instanceof CFResponse)
|
524 |
+
{
|
525 |
+
$xml = $xml->body;
|
526 |
+
}
|
527 |
+
|
528 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
529 |
+
if (is_string($xml))
|
530 |
+
{
|
531 |
+
$xml = simplexml_load_string($xml, $this->parser_class);
|
532 |
+
}
|
533 |
+
|
534 |
+
// Default, empty XML
|
535 |
+
$update = simplexml_load_string(sprintf($this->base_xml, (
|
536 |
+
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
537 |
+
), $this->parser_class);
|
538 |
+
|
539 |
+
// These can't change.
|
540 |
+
if (isset($xml->S3Origin))
|
541 |
+
{
|
542 |
+
$origin = $update->addChild('S3Origin');
|
543 |
+
$origin->addChild('DNSName', $xml->S3Origin->DNSName);
|
544 |
+
|
545 |
+
// origin access identity
|
546 |
+
if (isset($opt['OriginAccessIdentity']))
|
547 |
+
{
|
548 |
+
$update->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
549 |
+
}
|
550 |
+
elseif (isset($xml->OriginAccessIdentity))
|
551 |
+
{
|
552 |
+
$update->addChild('OriginAccessIdentity', $xml->OriginAccessIdentity);
|
553 |
+
}
|
554 |
+
}
|
555 |
+
elseif (isset($xml->CustomOrigin))
|
556 |
+
{
|
557 |
+
$origin = $update->addChild('CustomOrigin');
|
558 |
+
$origin->addChild('DNSName', $xml->CustomOrigin->DNSName);
|
559 |
+
}
|
560 |
+
$update->addChild('CallerReference', $xml->CallerReference);
|
561 |
+
|
562 |
+
// Add existing CNAME values
|
563 |
+
if ($xml->CNAME)
|
564 |
+
{
|
565 |
+
$update->addChild('CNAME', $xml->CNAME);
|
566 |
+
}
|
567 |
+
|
568 |
+
// Add new CNAME values
|
569 |
+
if (isset($opt['CNAME']))
|
570 |
+
{
|
571 |
+
if (is_array($opt['CNAME']))
|
572 |
+
{
|
573 |
+
foreach ($opt['CNAME'] as $cname)
|
574 |
+
{
|
575 |
+
$update->addChild('CNAME', $cname);
|
576 |
+
}
|
577 |
+
}
|
578 |
+
else
|
579 |
+
{
|
580 |
+
$update->addChild('CNAME', $opt['CNAME']);
|
581 |
+
}
|
582 |
+
}
|
583 |
+
|
584 |
+
// Comment
|
585 |
+
if (isset($opt['Comment']))
|
586 |
+
{
|
587 |
+
$update->addChild('Comment', $opt['Comment']);
|
588 |
+
}
|
589 |
+
elseif (isset($xml->Comment))
|
590 |
+
{
|
591 |
+
$update->addChild('Comment', $xml->Comment);
|
592 |
+
}
|
593 |
+
|
594 |
+
// DefaultRootObject
|
595 |
+
if (isset($opt['DefaultRootObject']))
|
596 |
+
{
|
597 |
+
$update->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
598 |
+
}
|
599 |
+
elseif (isset($xml->DefaultRootObject))
|
600 |
+
{
|
601 |
+
$update->addChild('DefaultRootObject', $xml->DefaultRootObject);
|
602 |
+
}
|
603 |
+
|
604 |
+
// Enabled
|
605 |
+
if (isset($opt['Enabled']))
|
606 |
+
{
|
607 |
+
$update->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
608 |
+
}
|
609 |
+
elseif (isset($xml->Enabled))
|
610 |
+
{
|
611 |
+
$update->addChild('Enabled', $xml->Enabled);
|
612 |
+
}
|
613 |
+
|
614 |
+
// Logging
|
615 |
+
if (isset($opt['Logging']))
|
616 |
+
{
|
617 |
+
if (is_array($opt['Logging']))
|
618 |
+
{
|
619 |
+
$logging = $update->addChild('Logging');
|
620 |
+
$bucket_name = $opt['Logging']['Bucket'];
|
621 |
+
|
622 |
+
// Origin
|
623 |
+
$logging->addChild('Bucket', $bucket_name . ((stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
624 |
+
|
625 |
+
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
626 |
+
}
|
627 |
+
}
|
628 |
+
elseif (isset($xml->Logging))
|
629 |
+
{
|
630 |
+
$logging = $update->addChild('Logging');
|
631 |
+
$logging->addChild('Bucket', $xml->Logging->Bucket);
|
632 |
+
$logging->addChild('Prefix', $xml->Logging->Prefix);
|
633 |
+
}
|
634 |
+
|
635 |
+
// Trusted Signers
|
636 |
+
if (isset($opt['TrustedSigners']))
|
637 |
+
{
|
638 |
+
$trusted_signers = $update->addChild('TrustedSigners');
|
639 |
+
|
640 |
+
// Not an array? Convert to one.
|
641 |
+
if (!is_array($opt['TrustedSigners']))
|
642 |
+
{
|
643 |
+
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
644 |
+
}
|
645 |
+
|
646 |
+
// Handle 'Self' vs. everything else
|
647 |
+
foreach ($opt['TrustedSigners'] as $signer)
|
648 |
+
{
|
649 |
+
if (strtolower($signer) === 'self')
|
650 |
+
{
|
651 |
+
$trusted_signers->addChild('Self');
|
652 |
+
}
|
653 |
+
else
|
654 |
+
{
|
655 |
+
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
656 |
+
}
|
657 |
+
}
|
658 |
+
}
|
659 |
+
elseif (isset($xml->TrustedSigners) && $xml->TrustedSigners->count())
|
660 |
+
{
|
661 |
+
$trusted_signers = $update->addChild('TrustedSigners');
|
662 |
+
|
663 |
+
// Handle 'Self' vs. everything else
|
664 |
+
foreach ($xml->TrustedSigners->children() as $signer_key => $signer_value)
|
665 |
+
{
|
666 |
+
if (strtolower((string) $signer_key) === 'self')
|
667 |
+
{
|
668 |
+
$trusted_signers->addChild('Self');
|
669 |
+
}
|
670 |
+
else
|
671 |
+
{
|
672 |
+
$trusted_signers->addChild('AwsAccountNumber', (string) $signer_value);
|
673 |
+
}
|
674 |
+
}
|
675 |
+
}
|
676 |
+
|
677 |
+
// Output
|
678 |
+
return $update->asXML();
|
679 |
+
}
|
680 |
+
|
681 |
+
/**
|
682 |
+
* Removes one or more CNAMEs from a <code>DistibutionConfig</code> XML document.
|
683 |
+
*
|
684 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source DistributionConfig XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
685 |
+
* @param string|array $cname (Optional) The value or values to remove from the existing list of CNAME values. To add a CNAME value, see <update_config_xml()>.
|
686 |
+
* @return string XML document.
|
687 |
+
*/
|
688 |
+
public function remove_cname($xml, $cname)
|
689 |
+
{
|
690 |
+
// If we receive a full CFResponse object, only use the body.
|
691 |
+
if ($xml instanceof CFResponse)
|
692 |
+
{
|
693 |
+
$xml = $xml->body;
|
694 |
+
}
|
695 |
+
|
696 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
697 |
+
if (is_string($xml))
|
698 |
+
{
|
699 |
+
$xml = simplexml_load_string($xml);
|
700 |
+
}
|
701 |
+
|
702 |
+
// Let's make sure that we have CNAMEs to remove in the first place.
|
703 |
+
if (isset($xml->CNAME))
|
704 |
+
{
|
705 |
+
// If we have an array of CNAME values...
|
706 |
+
if (is_array($cname))
|
707 |
+
{
|
708 |
+
foreach ($cname as $cn)
|
709 |
+
{
|
710 |
+
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
711 |
+
{
|
712 |
+
if ((string) $xml->CNAME[$i] == $cn)
|
713 |
+
{
|
714 |
+
unset($xml->CNAME[$i]);
|
715 |
+
break;
|
716 |
+
}
|
717 |
+
}
|
718 |
+
}
|
719 |
+
}
|
720 |
+
|
721 |
+
// If we only have one CNAME value...
|
722 |
+
else
|
723 |
+
{
|
724 |
+
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
725 |
+
{
|
726 |
+
if ((string) $xml->CNAME[$i] == $cname)
|
727 |
+
{
|
728 |
+
unset($xml->CNAME[$i]);
|
729 |
+
break;
|
730 |
+
}
|
731 |
+
}
|
732 |
+
}
|
733 |
+
}
|
734 |
+
|
735 |
+
return $xml->asXML();
|
736 |
+
}
|
737 |
+
|
738 |
+
/**
|
739 |
+
* Used to generate the origin access identity (OAI) Config XML used in <create_oai()>.
|
740 |
+
*
|
741 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
742 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
743 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
744 |
+
* @return string An XML document to be used as the OAI configuration.
|
745 |
+
*/
|
746 |
+
public function generate_oai_xml($caller_reference, $opt = null)
|
747 |
+
{
|
748 |
+
// Default, empty XML
|
749 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, 'CloudFrontOriginAccessIdentityConfig'));
|
750 |
+
|
751 |
+
// CallerReference
|
752 |
+
$xml->addChild('CallerReference', $caller_reference);
|
753 |
+
|
754 |
+
// Comment
|
755 |
+
if (isset($opt['Comment']))
|
756 |
+
{
|
757 |
+
$xml->addChild('Comment', $opt['Comment']);
|
758 |
+
}
|
759 |
+
|
760 |
+
return $xml->asXML();
|
761 |
+
}
|
762 |
+
|
763 |
+
/**
|
764 |
+
* Updates the origin access identity (OAI) configureation XML used in <create_oai()>.
|
765 |
+
*
|
766 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_oai_config()> response, the entire <CFResponse> of a <get_oai_config()> response, or a string of XML generated by <generate_oai_xml()> or <update_oai_xml()>.
|
767 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
768 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
769 |
+
* @return string XML document.
|
770 |
+
*/
|
771 |
+
public function update_oai_xml($xml, $opt = null)
|
772 |
+
{
|
773 |
+
// If we receive a full CFResponse object, only use the body.
|
774 |
+
if ($xml instanceof CFResponse)
|
775 |
+
{
|
776 |
+
$xml = $xml->body;
|
777 |
+
}
|
778 |
+
|
779 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
780 |
+
if (is_string($xml))
|
781 |
+
{
|
782 |
+
$xml = simplexml_load_string($xml, $this->parser_class);
|
783 |
+
}
|
784 |
+
|
785 |
+
// Update the comment, if we have one.
|
786 |
+
if (isset($opt['Comment']) && isset($xml->Comment))
|
787 |
+
{
|
788 |
+
$xml->Comment = $opt['Comment'];
|
789 |
+
}
|
790 |
+
elseif (isset($opt['Comment']))
|
791 |
+
{
|
792 |
+
$xml->addChild('Comment', $opt['Comment']);
|
793 |
+
}
|
794 |
+
|
795 |
+
return $xml->asXML();
|
796 |
+
}
|
797 |
+
|
798 |
+
/**
|
799 |
+
* Generates the Invalidation Config XML used in <create_invalidation()>.
|
800 |
+
*
|
801 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
802 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
803 |
+
* <li><code>Paths</code> - <code>string|array</code> - Optional - One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values.</li></ul>
|
804 |
+
* @return string An XML document to be used as the Invalidation configuration.
|
805 |
+
*/
|
806 |
+
public function generate_invalidation_xml($caller_reference, $opt = null)
|
807 |
+
{
|
808 |
+
// Default, empty XML
|
809 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, 'InvalidationBatch'));
|
810 |
+
|
811 |
+
// CallerReference
|
812 |
+
$xml->addChild('CallerReference', $caller_reference);
|
813 |
+
|
814 |
+
// Paths
|
815 |
+
if (isset($opt['Paths']))
|
816 |
+
{
|
817 |
+
$paths = is_array($opt['Paths']) ? $opt['Paths'] : array($opt['Paths']);
|
818 |
+
|
819 |
+
foreach ($paths as $path)
|
820 |
+
{
|
821 |
+
$path = str_replace('%2F', '/', rawurlencode($path));
|
822 |
+
$path = (substr($path, 0, 1) === '/') ? $path : ('/' . $path);
|
823 |
+
$xml->addChild('Path', $path);
|
824 |
+
}
|
825 |
+
}
|
826 |
+
|
827 |
+
return $xml->asXML();
|
828 |
+
}
|
829 |
+
|
830 |
+
|
831 |
+
/*%******************************************************************************************%*/
|
832 |
+
// DISTRIBUTIONS
|
833 |
+
|
834 |
+
/**
|
835 |
+
* Creates an Amazon CloudFront distribution. You can have up to 100 distributions in the Amazon
|
836 |
+
* CloudFront system.
|
837 |
+
*
|
838 |
+
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
839 |
+
* to true.
|
840 |
+
*
|
841 |
+
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
842 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
843 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
844 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
845 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
846 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of the Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
847 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> will enable the distribution. A value of <code>false</code> will disable it. The default value is <code>true</code>.</li>
|
848 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
849 |
+
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]. The default value is <code>match-viewer</code>. Requires a non-S3 origin.</li>
|
850 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> creates a streaming distribution. A value of <code>false</code> creates a standard distribution. The default value is <code>false</code>.</li>
|
851 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li>
|
852 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
853 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
854 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
855 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html POST Distribution
|
856 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateStreamingDistribution.html POST Streaming Distribution
|
857 |
+
*/
|
858 |
+
public function create_distribution($origin, $caller_reference, $opt = null)
|
859 |
+
{
|
860 |
+
if (!$opt) $opt = array();
|
861 |
+
|
862 |
+
$xml = $this->generate_config_xml($origin, $caller_reference, $opt);
|
863 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
864 |
+
|
865 |
+
return $this->authenticate('POST', $path, $opt, $xml, null);
|
866 |
+
}
|
867 |
+
|
868 |
+
/**
|
869 |
+
* Gets a list of distributions. By default, the list is returned as one result. If needed, paginate the
|
870 |
+
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
871 |
+
*
|
872 |
+
* Standard distributions are listed separately from streaming distributions. For streaming distributions,
|
873 |
+
* set the <code>Streaming</code> option to true.
|
874 |
+
*
|
875 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
876 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this setting when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last distribution on that page).</li>
|
877 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
878 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
879 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
880 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
881 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
882 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListDistributions.html GET Distribution List
|
883 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListStreamingDistributions.html GET Streaming Distribution List
|
884 |
+
*/
|
885 |
+
public function list_distributions($opt = null)
|
886 |
+
{
|
887 |
+
if (!$opt) $opt = array();
|
888 |
+
$opt['query_string'] = array();
|
889 |
+
|
890 |
+
// Pass these to the query string
|
891 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
892 |
+
{
|
893 |
+
if (isset($opt[$option]))
|
894 |
+
{
|
895 |
+
$opt['query_string'][$option] = $opt[$option];
|
896 |
+
}
|
897 |
+
}
|
898 |
+
|
899 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
900 |
+
|
901 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
902 |
+
}
|
903 |
+
|
904 |
+
/**
|
905 |
+
* Gets distribution information for the specified distribution ID.
|
906 |
+
*
|
907 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
908 |
+
* distributions, set the <code>Streaming</code> option to true.
|
909 |
+
*
|
910 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
911 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
912 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
913 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
914 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
915 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
916 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetDistribution.html GET Distribution
|
917 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistribution.html GET Streaming Distribution
|
918 |
+
*/
|
919 |
+
public function get_distribution_info($distribution_id, $opt = null)
|
920 |
+
{
|
921 |
+
if (!$opt) $opt = array();
|
922 |
+
|
923 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
924 |
+
$path .= '/' . $distribution_id;
|
925 |
+
|
926 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
927 |
+
}
|
928 |
+
|
929 |
+
/**
|
930 |
+
* Deletes a disabled distribution. If distribution hasn't been disabled, Amazon CloudFront returns a
|
931 |
+
* <code>DistributionNotDisabled</code> error. Use <set_distribution_config()> to disable a distribution before
|
932 |
+
* attempting to delete.
|
933 |
+
*
|
934 |
+
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
935 |
+
* to be <code>true</code>.
|
936 |
+
*
|
937 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
938 |
+
* @param string $etag (Required) The <code>ETag</code> header value retrieved from <get_distribution_config()>.
|
939 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
940 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
941 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
942 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
943 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
944 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteDistribution.html DELETE Distribution
|
945 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteStreamingDistribution.html DELETE Streaming Distribution
|
946 |
+
*/
|
947 |
+
public function delete_distribution($distribution_id, $etag, $opt = null)
|
948 |
+
{
|
949 |
+
if (!$opt) $opt = array();
|
950 |
+
|
951 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
952 |
+
$path .= '/' . $distribution_id;
|
953 |
+
|
954 |
+
return $this->authenticate('DELETE', $path, $opt, null, $etag);
|
955 |
+
}
|
956 |
+
|
957 |
+
/**
|
958 |
+
* Gets the current distribution configuration for the specified distribution ID.
|
959 |
+
*
|
960 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
961 |
+
* distributions, set the <code>Streaming</code> option to true.
|
962 |
+
*
|
963 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
964 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
965 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
966 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
967 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
968 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
969 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetConfig.html GET Distribution Config
|
970 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistConfig.html GET Streaming Distribution Config
|
971 |
+
*/
|
972 |
+
public function get_distribution_config($distribution_id, $opt = null)
|
973 |
+
{
|
974 |
+
if (!$opt) $opt = array();
|
975 |
+
|
976 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
977 |
+
$path .= '/' . $distribution_id . '/config';
|
978 |
+
|
979 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
980 |
+
}
|
981 |
+
|
982 |
+
/**
|
983 |
+
* Sets a new distribution configuration for the specified distribution ID.
|
984 |
+
*
|
985 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
986 |
+
* distributions, set the <code>Streaming</code> option to true.
|
987 |
+
*
|
988 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
989 |
+
* @param string $xml (Required) The DistributionConfig XML generated by <generate_config_xml()> or <update_config_xml()>.
|
990 |
+
* @param string $etag (Required) The ETag header value retrieved from <get_distribution_config()>.
|
991 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
992 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
993 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
994 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
995 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
996 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutConfig.html PUT Distribution Config
|
997 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutStreamingDistConfig.html PUT Streaming Distribution Config
|
998 |
+
*/
|
999 |
+
public function set_distribution_config($distribution_id, $xml, $etag, $opt = null)
|
1000 |
+
{
|
1001 |
+
if (!$opt) $opt = array();
|
1002 |
+
|
1003 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
1004 |
+
$path .= '/' . $distribution_id . '/config';
|
1005 |
+
|
1006 |
+
return $this->authenticate('PUT', $path, $opt, $xml, $etag);
|
1007 |
+
}
|
1008 |
+
|
1009 |
+
|
1010 |
+
/*%******************************************************************************************%*/
|
1011 |
+
// Origin Access Identity
|
1012 |
+
|
1013 |
+
/**
|
1014 |
+
* Creates a new Amazon CloudFront origin access identity (OAI). You can create up to 100 OAIs per AWS
|
1015 |
+
* account. For more information, see the Amazon CloudFront Developer Guide.
|
1016 |
+
*
|
1017 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1018 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1019 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment about the OAI.</li>
|
1020 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1021 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1022 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1023 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateOAI.html POST Origin Access Identity
|
1024 |
+
*/
|
1025 |
+
public function create_oai($caller_reference, $opt = null)
|
1026 |
+
{
|
1027 |
+
if (!$opt) $opt = array();
|
1028 |
+
|
1029 |
+
$path = '/origin-access-identity/cloudfront';
|
1030 |
+
$xml = $this->generate_oai_xml($caller_reference, $opt);
|
1031 |
+
|
1032 |
+
return $this->authenticate('POST', $path, $opt, $xml, null);
|
1033 |
+
}
|
1034 |
+
|
1035 |
+
/**
|
1036 |
+
* Gets a list of origin access identity (OAI) summaries. By default, the list is returned as one result.
|
1037 |
+
* If needed, paginate the list by specifying values for the <code>MaxItems</code> and <code>Marker</code>
|
1038 |
+
* parameters.
|
1039 |
+
*
|
1040 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1041 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the Marker to the value of the NextMarker from the current page's response (which is also the ID of the last distribution on that page).</li>
|
1042 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
1043 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1044 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1045 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1046 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListOAIs.html GET Origin Access Identity List
|
1047 |
+
*/
|
1048 |
+
public function list_oais($opt = null)
|
1049 |
+
{
|
1050 |
+
if (!$opt) $opt = array();
|
1051 |
+
$opt['query_string'] = array();
|
1052 |
+
|
1053 |
+
// Pass these to the query string
|
1054 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
1055 |
+
{
|
1056 |
+
if (isset($opt[$option]))
|
1057 |
+
{
|
1058 |
+
$opt['query_string'][$option] = $opt[$option];
|
1059 |
+
}
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
$path = '/origin-access-identity/cloudfront';
|
1063 |
+
|
1064 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
1065 |
+
}
|
1066 |
+
|
1067 |
+
/**
|
1068 |
+
* Gets information about an origin access identity (OAI).
|
1069 |
+
*
|
1070 |
+
* @param string $identity_id (Required) The Identity ID for an existing OAI.
|
1071 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1072 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1073 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1074 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1075 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAI.html GET Origin Access Identity
|
1076 |
+
*/
|
1077 |
+
public function get_oai($identity_id, $opt = null)
|
1078 |
+
{
|
1079 |
+
if (!$opt) $opt = array();
|
1080 |
+
|
1081 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1082 |
+
|
1083 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
1084 |
+
}
|
1085 |
+
|
1086 |
+
/**
|
1087 |
+
* Deletes an Amazon CloudFront origin access identity (OAI). To delete an OAI, the identity must first
|
1088 |
+
* be disassociated from all distributions (by updating each distribution's configuration to omit the
|
1089 |
+
* <code>OriginAccessIdentity</code> element). Wait until each distribution's state is <code>Deployed</code>
|
1090 |
+
* before deleting the OAI.
|
1091 |
+
*
|
1092 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1093 |
+
* @param string $etag (Required) The <code>ETag</code> header value retrieved from a call to <get_oai()>.
|
1094 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1095 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1096 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1097 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1098 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteOAI.html DELETE Origin Access Identity
|
1099 |
+
*/
|
1100 |
+
public function delete_oai($identity_id, $etag, $opt = null)
|
1101 |
+
{
|
1102 |
+
if (!$opt) $opt = array();
|
1103 |
+
|
1104 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1105 |
+
|
1106 |
+
return $this->authenticate('DELETE', $path, $opt, null, $etag);
|
1107 |
+
}
|
1108 |
+
|
1109 |
+
/**
|
1110 |
+
* Gets the configuration of the origin access identity (OAI) for the specified identity ID.
|
1111 |
+
*
|
1112 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1113 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1114 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1115 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1116 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1117 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAIConfig.html GET Origin Access Identity Config
|
1118 |
+
*/
|
1119 |
+
public function get_oai_config($identity_id, $opt = null)
|
1120 |
+
{
|
1121 |
+
if (!$opt) $opt = array();
|
1122 |
+
|
1123 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1124 |
+
|
1125 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
1126 |
+
}
|
1127 |
+
|
1128 |
+
/**
|
1129 |
+
* Sets the configuration for an Amazon CloudFront origin access identity (OAI). Use this when updating
|
1130 |
+
* the configuration. Currently, only comments may be updated. Follow the same process as when updating
|
1131 |
+
* an identity's configuration as you do when updating a distribution's configuration. For more
|
1132 |
+
* information, go to Updating a Distribution's Configuration in the Amazon CloudFront Developer Guide.
|
1133 |
+
*
|
1134 |
+
* When attempting to change configuration items that are not allowed to be updated, Amazon CloudFront
|
1135 |
+
* returns an <code>IllegalUpdate</code> error.
|
1136 |
+
*
|
1137 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1138 |
+
* @param string $xml (Required) The configuration XML generated by <generate_oai_xml()>.
|
1139 |
+
* @param string $etag (Required) The ETag header value retrieved from a call to <get_distribution_config()>.
|
1140 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1141 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1142 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1143 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1144 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutOAIConfig.html PUT Origin Access Identity Config
|
1145 |
+
*/
|
1146 |
+
public function set_oai_config($identity_id, $xml, $etag, $opt = null)
|
1147 |
+
{
|
1148 |
+
if (!$opt) $opt = array();
|
1149 |
+
|
1150 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1151 |
+
|
1152 |
+
return $this->authenticate('PUT', $path, $opt, $xml, $etag);
|
1153 |
+
}
|
1154 |
+
|
1155 |
+
|
1156 |
+
/*%******************************************************************************************%*/
|
1157 |
+
// INVALIDATION
|
1158 |
+
|
1159 |
+
/**
|
1160 |
+
* Creates a new invalidation request.
|
1161 |
+
*
|
1162 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1163 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1164 |
+
* @param string|array $paths (Required) One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values. values.
|
1165 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1166 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1167 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1168 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1169 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html POST Invalidation
|
1170 |
+
*/
|
1171 |
+
public function create_invalidation($distribution_id, $caller_reference, $paths, $opt = null)
|
1172 |
+
{
|
1173 |
+
if (!$opt) $opt = array();
|
1174 |
+
$opt['Paths'] = $paths;
|
1175 |
+
|
1176 |
+
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1177 |
+
$xml = $this->generate_invalidation_xml($caller_reference, $opt);
|
1178 |
+
|
1179 |
+
return $this->authenticate('POST', $path, $opt, $xml, null);
|
1180 |
+
}
|
1181 |
+
|
1182 |
+
/**
|
1183 |
+
* Gets a list of invalidations. By default, the list is returned as one result. If needed, paginate the
|
1184 |
+
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
1185 |
+
*
|
1186 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1187 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1188 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in the list of invalidations to begin. The results include invalidations in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> parameter to the value of the <code>NextMarker</code> parameter from the current page's response, which is also the ID of the last invalidation on that page.</li>
|
1189 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of invalidations you want in the response body. A maximum value of 100 can be used.</li>
|
1190 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1191 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1192 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1193 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListInvalidation.html GET Invalidation List
|
1194 |
+
*/
|
1195 |
+
public function list_invalidations($distribution_id, $opt = null)
|
1196 |
+
{
|
1197 |
+
if (!$opt) $opt = array();
|
1198 |
+
$opt['query_string'] = array();
|
1199 |
+
|
1200 |
+
// Pass these to the query string
|
1201 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
1202 |
+
{
|
1203 |
+
if (isset($opt[$option]))
|
1204 |
+
{
|
1205 |
+
$opt['query_string'][$option] = $opt[$option];
|
1206 |
+
}
|
1207 |
+
}
|
1208 |
+
|
1209 |
+
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1210 |
+
|
1211 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
1212 |
+
}
|
1213 |
+
|
1214 |
+
/**
|
1215 |
+
* Gets information about an invalidation.
|
1216 |
+
*
|
1217 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1218 |
+
* @param string $invalidation_id (Required) The invalidation ID returned from <create_invalidation()> or <list_invalidations()>.
|
1219 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1220 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1221 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1222 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1223 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetInvalidation.html GET Invalidation
|
1224 |
+
*/
|
1225 |
+
public function get_invalidation($distribution_id, $invalidation_id, $opt = null)
|
1226 |
+
{
|
1227 |
+
if (!$opt) $opt = array();
|
1228 |
+
|
1229 |
+
$path = '/distribution/' . $distribution_id . '/invalidation/' . $invalidation_id;
|
1230 |
+
|
1231 |
+
return $this->authenticate('GET', $path, $opt, null, null);
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
|
1235 |
+
/*%******************************************************************************************%*/
|
1236 |
+
// CONVENIENCE METHODS
|
1237 |
+
|
1238 |
+
/**
|
1239 |
+
* Gets a simplified list of standard distribution IDs.
|
1240 |
+
*
|
1241 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1242 |
+
* @return array A list of standard distribution IDs.
|
1243 |
+
*/
|
1244 |
+
public function get_distribution_list($pcre = null)
|
1245 |
+
{
|
1246 |
+
if ($this->use_batch_flow)
|
1247 |
+
{
|
1248 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
$list = $this->list_distributions();
|
1252 |
+
if ($list = $list->body->Id())
|
1253 |
+
{
|
1254 |
+
$list = $list->map_string($pcre);
|
1255 |
+
return $list;
|
1256 |
+
}
|
1257 |
+
|
1258 |
+
return array();
|
1259 |
+
}
|
1260 |
+
|
1261 |
+
/**
|
1262 |
+
* Gets a simplified list of streaming distribution IDs.
|
1263 |
+
*
|
1264 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1265 |
+
* @return array A list of streaming distribution IDs.
|
1266 |
+
*/
|
1267 |
+
public function get_streaming_distribution_list($pcre = null)
|
1268 |
+
{
|
1269 |
+
if ($this->use_batch_flow)
|
1270 |
+
{
|
1271 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
$list = $this->list_distributions(array(
|
1275 |
+
'Streaming' => true
|
1276 |
+
));
|
1277 |
+
if ($list = $list->body->Id())
|
1278 |
+
{
|
1279 |
+
$list = $list->map_string($pcre);
|
1280 |
+
return $list;
|
1281 |
+
}
|
1282 |
+
|
1283 |
+
return array();
|
1284 |
+
}
|
1285 |
+
|
1286 |
+
/**
|
1287 |
+
* Gets a simplified list of origin access identity (OAI) IDs.
|
1288 |
+
*
|
1289 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the OAI caller references against.
|
1290 |
+
* @return array A list of OAI IDs.
|
1291 |
+
*/
|
1292 |
+
public function get_oai_list($pcre = null)
|
1293 |
+
{
|
1294 |
+
if ($this->use_batch_flow)
|
1295 |
+
{
|
1296 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1297 |
+
}
|
1298 |
+
|
1299 |
+
$list = $this->list_oais();
|
1300 |
+
if ($list = $list->body->Id())
|
1301 |
+
{
|
1302 |
+
$list = $list->map_string($pcre);
|
1303 |
+
return $list;
|
1304 |
+
}
|
1305 |
+
|
1306 |
+
return array();
|
1307 |
+
}
|
1308 |
+
|
1309 |
+
|
1310 |
+
/*%******************************************************************************************%*/
|
1311 |
+
// URLS
|
1312 |
+
|
1313 |
+
/**
|
1314 |
+
* Generates a time-limited and/or query signed request for a private file with additional optional
|
1315 |
+
* restrictions.
|
1316 |
+
*
|
1317 |
+
* @param string $distribution_hostname (Required) The hostname of the distribution. Obtained from <create_distribution()> or <get_distribution_info()>.
|
1318 |
+
* @param string $filename (Required) The file name of the object. Query parameters can be included. You can use multicharacter match wild cards () or a single-character match wild card (?) anywhere in the string.
|
1319 |
+
* @param integer|string $expires (Required) The expiration time expressed either as a number of seconds since UNIX Epoch, or any string that <php:strtotime()> can understand.
|
1320 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1321 |
+
* <li><code>BecomeAvailable</code> - <code>integer|string</code> - Optional - The time when the private URL becomes active. Can be expressed either as a number of seconds since UNIX Epoch, or any string that <code>strtotime()</code> can understand.</li>
|
1322 |
+
* <li><code>IPAddress</code> - <code>string</code> - Optional - A single IP address to restrict the access to.</li>
|
1323 |
+
* <li><code>Secure</code> - <code>boolean</code> - Optional - Whether or not to use HTTPS as the protocol scheme. A value of <code>true</code> uses <code>https</code>. A value of <code>false</code> uses <code>http</code>. The default value is <code>false</code>.</li></ul>
|
1324 |
+
* @return string The file URL with authentication parameters.
|
1325 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html Serving Private Content
|
1326 |
+
*/
|
1327 |
+
public function get_private_object_url($distribution_hostname, $filename, $expires, $opt = null)
|
1328 |
+
{
|
1329 |
+
if (!$this->key_pair_id || !$this->private_key)
|
1330 |
+
{
|
1331 |
+
throw new CloudFront_Exception('You must set both a Amazon CloudFront keypair ID and an RSA private key for that keypair before using ' . __FUNCTION__ . '()');
|
1332 |
+
}
|
1333 |
+
if (!function_exists('openssl_sign'))
|
1334 |
+
{
|
1335 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() uses functions from the OpenSSL PHP Extension <http://php.net/openssl>, which is not installed in this PHP installation');
|
1336 |
+
}
|
1337 |
+
|
1338 |
+
if (!$opt) $opt = array();
|
1339 |
+
|
1340 |
+
$resource = '';
|
1341 |
+
$expiration_key = 'Expires';
|
1342 |
+
if (is_string($expires))
|
1343 |
+
{
|
1344 |
+
$expires = strtotime($expires);
|
1345 |
+
}
|
1346 |
+
$conjunction = (strpos($filename, '?') === false ? '?' : '&');
|
1347 |
+
|
1348 |
+
// Determine the protocol scheme
|
1349 |
+
switch (substr($distribution_hostname, 0, 1) === 's')
|
1350 |
+
{
|
1351 |
+
// Streaming
|
1352 |
+
case 's':
|
1353 |
+
$scheme = 'rtmp';
|
1354 |
+
$resource = str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename));
|
1355 |
+
break;
|
1356 |
+
|
1357 |
+
// Default
|
1358 |
+
case 'd':
|
1359 |
+
default:
|
1360 |
+
$scheme = 'http';
|
1361 |
+
$scheme .= (isset($opt['Secure']) && $opt['Secure'] === true ? 's' : '');
|
1362 |
+
$resource = $scheme . '://' . $distribution_hostname . '/' . str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename));
|
1363 |
+
break;
|
1364 |
+
}
|
1365 |
+
|
1366 |
+
// Generate default policy
|
1367 |
+
$raw_policy = array(
|
1368 |
+
'Statement' => array(
|
1369 |
+
array(
|
1370 |
+
'Resource' => $resource,
|
1371 |
+
'Condition' => array(
|
1372 |
+
'DateLessThan' => array(
|
1373 |
+
'AWS:EpochTime' => $expires
|
1374 |
+
)
|
1375 |
+
)
|
1376 |
+
)
|
1377 |
+
)
|
1378 |
+
);
|
1379 |
+
|
1380 |
+
// Become Available
|
1381 |
+
if (isset($opt['BecomeAvailable']))
|
1382 |
+
{
|
1383 |
+
// Switch to 'Policy' instead
|
1384 |
+
$expiration_key = 'Policy';
|
1385 |
+
|
1386 |
+
// Update the policy
|
1387 |
+
$raw_policy['Statement'][0]['Condition']['DateGreaterThan'] = array(
|
1388 |
+
'AWS:EpochTime' => strtotime($opt['BecomeAvailable'])
|
1389 |
+
);
|
1390 |
+
}
|
1391 |
+
|
1392 |
+
// IP Address
|
1393 |
+
if (isset($opt['IPAddress']))
|
1394 |
+
{
|
1395 |
+
// Switch to 'Policy' instead
|
1396 |
+
$expiration_key = 'Policy';
|
1397 |
+
|
1398 |
+
// Update the policy
|
1399 |
+
$raw_policy['Statement'][0]['Condition']['IpAddress'] = array(
|
1400 |
+
'AWS:SourceIp' => $opt['IPAddress']
|
1401 |
+
);
|
1402 |
+
}
|
1403 |
+
|
1404 |
+
// Munge the policy
|
1405 |
+
$json_policy = str_replace('\/', '/', json_encode($raw_policy));
|
1406 |
+
$json_policy = $this->util->decode_uhex($json_policy);
|
1407 |
+
$encoded_policy = strtr(base64_encode($json_policy), '+=/', '-_~');
|
1408 |
+
|
1409 |
+
// Generate the signature
|
1410 |
+
openssl_sign($json_policy, $signature, $this->private_key);
|
1411 |
+
$signature = strtr(base64_encode($signature), '+=/', '-_~');
|
1412 |
+
|
1413 |
+
return $scheme . '://' . $distribution_hostname . '/'
|
1414 |
+
. str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename))
|
1415 |
+
. $conjunction
|
1416 |
+
. ($expiration_key === 'Expires' ? ($expiration_key . '=' . $expires) : ($expiration_key . '=' . $encoded_policy))
|
1417 |
+
. '&Key-Pair-Id=' . $this->key_pair_id
|
1418 |
+
. '&Signature=' . $signature;
|
1419 |
+
}
|
1420 |
+
}
|
app/libs/aws/services/cloudwatch.class.php
CHANGED
@@ -1,512 +1,607 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
/**
|
18 |
-
*
|
19 |
-
*
|
20 |
-
*
|
21 |
-
*
|
22 |
-
*
|
23 |
-
*
|
24 |
-
*
|
25 |
-
*
|
26 |
-
*
|
27 |
-
*
|
28 |
-
*
|
29 |
-
*
|
30 |
-
*
|
31 |
-
*
|
32 |
-
*
|
33 |
-
*
|
34 |
-
*
|
35 |
-
*
|
36 |
-
*
|
37 |
-
*
|
38 |
-
*
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
*
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
/*%******************************************************************************************%*/
|
94 |
-
//
|
95 |
-
|
96 |
-
/**
|
97 |
-
*
|
98 |
-
*
|
99 |
-
* @param string $
|
100 |
-
* @
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
$this
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
*
|
147 |
-
*
|
148 |
-
*
|
149 |
-
*
|
150 |
-
*
|
151 |
-
*
|
152 |
-
*
|
153 |
-
*
|
154 |
-
*
|
155 |
-
*
|
156 |
-
*
|
157 |
-
*
|
158 |
-
*
|
159 |
-
* @
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
$opt['
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
*
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
*
|
252 |
-
*
|
253 |
-
*
|
254 |
-
*
|
255 |
-
*
|
256 |
-
*
|
257 |
-
*
|
258 |
-
*
|
259 |
-
*
|
260 |
-
*
|
261 |
-
*
|
262 |
-
* @param
|
263 |
-
*
|
264 |
-
*
|
265 |
-
* @
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
*
|
306 |
-
*
|
307 |
-
*
|
308 |
-
*
|
309 |
-
*
|
310 |
-
*
|
311 |
-
* <li><code>
|
312 |
-
*
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
*
|
332 |
-
*
|
333 |
-
*
|
334 |
-
*
|
335 |
-
*
|
336 |
-
*
|
337 |
-
*
|
338 |
-
*
|
339 |
-
*
|
340 |
-
*
|
341 |
-
*
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
*
|
361 |
-
*
|
362 |
-
*
|
363 |
-
*
|
364 |
-
*
|
365 |
-
*
|
366 |
-
*
|
367 |
-
*
|
368 |
-
*
|
369 |
-
*
|
370 |
-
*
|
371 |
-
*
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
*
|
402 |
-
*
|
403 |
-
*
|
404 |
-
*
|
405 |
-
* @param array $
|
406 |
-
*
|
407 |
-
* <li><code>
|
408 |
-
* <li><code>
|
409 |
-
*
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
*
|
437 |
-
*
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
*
|
459 |
-
*
|
460 |
-
*
|
461 |
-
* @param
|
462 |
-
*
|
463 |
-
* <li><code>
|
464 |
-
*
|
465 |
-
*
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
512 |
class CloudWatch_Exception extends Exception {}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
*
|
19 |
+
*
|
20 |
+
* This is the <i>Amazon CloudWatch API Reference</i>. This guide provides detailed information about Amazon CloudWatch actions, data types,
|
21 |
+
* parameters, and errors. For detailed information about Amazon CloudWatch features and their associated API calls, go to the <a
|
22 |
+
* href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide">Amazon CloudWatch Developer Guide</a>.
|
23 |
+
*
|
24 |
+
* Amazon CloudWatch is a web service that enables you to publish, monitor, and manage various metrics, as well as configure alarm actions
|
25 |
+
* based on data from metrics. For more information about this product go to <a
|
26 |
+
* href="http://aws.amazon.com/cloudwatch">http://aws.amazon.com/cloudwatch</a>.
|
27 |
+
*
|
28 |
+
* Use the following links to get started using the <i>Amazon CloudWatch API Reference</i>:
|
29 |
+
*
|
30 |
+
* <ul> <li> <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_Operations.html">Actions</a>: An alphabetical
|
31 |
+
* list of all Amazon CloudWatch actions.</li>
|
32 |
+
*
|
33 |
+
* <li> <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_Types.html">Data Types</a>: An alphabetical list
|
34 |
+
* of all Amazon CloudWatch data types.</li>
|
35 |
+
*
|
36 |
+
* <li> <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/CommonParameters.html">Common Parameters</a>:
|
37 |
+
* Parameters that all Query actions can use.</li>
|
38 |
+
*
|
39 |
+
* <li> <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/CommonErrors.html">Common Errors</a>: Client and
|
40 |
+
* server errors that all actions can return.</li>
|
41 |
+
*
|
42 |
+
* <li> <a href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html">Regions and Endpoints</a>: Itemized regions and
|
43 |
+
* endpoints for all AWS products.</li>
|
44 |
+
*
|
45 |
+
* <li> <a href="http://monitoring.amazonaws.com/doc/2010-08-01/CloudWatch.wsdl">WSDL Location</a>:
|
46 |
+
* http://monitoring.amazonaws.com/doc/2010-08-01/CloudWatch.wsdl</li>
|
47 |
+
*
|
48 |
+
* </ul>
|
49 |
+
*
|
50 |
+
* @version Tue May 10 18:24:54 PDT 2011
|
51 |
+
* @license See the included NOTICE.md file for complete information.
|
52 |
+
* @copyright See the included NOTICE.md file for complete information.
|
53 |
+
* @link http://aws.amazon.com/cloudwatch/Amazon CloudWatch
|
54 |
+
* @link http://aws.amazon.com/documentation/cloudwatch/Amazon CloudWatch documentation
|
55 |
+
*/
|
56 |
+
class AmazonCloudWatch extends CFRuntime
|
57 |
+
{
|
58 |
+
|
59 |
+
/*%******************************************************************************************%*/
|
60 |
+
// CLASS CONSTANTS
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Specify the default queue URL.
|
64 |
+
*/
|
65 |
+
const DEFAULT_URL = 'monitoring.amazonaws.com';
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Specify the queue URL for the US-East (Northern Virginia) Region.
|
69 |
+
*/
|
70 |
+
const REGION_US_E1 = 'us-east-1';
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Specify the queue URL for the US-West (Northern California) Region.
|
74 |
+
*/
|
75 |
+
const REGION_US_W1 = 'us-west-1';
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Specify the queue URL for the EU (Ireland) Region.
|
79 |
+
*/
|
80 |
+
const REGION_EU_W1 = 'eu-west-1';
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Specify the queue URL for the Asia Pacific (Singapore) Region.
|
84 |
+
*/
|
85 |
+
const REGION_APAC_SE1 = 'ap-southeast-1';
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Specify the queue URL for the Asia Pacific (Japan) Region.
|
89 |
+
*/
|
90 |
+
const REGION_APAC_NE1 = 'ap-northeast-1';
|
91 |
+
|
92 |
+
|
93 |
+
/*%******************************************************************************************%*/
|
94 |
+
// SETTERS
|
95 |
+
|
96 |
+
/**
|
97 |
+
* This allows you to explicitly sets the region for the service to use.
|
98 |
+
*
|
99 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_EU_W1>, or <REGION_APAC_SE1>.
|
100 |
+
* @return $this A reference to the current instance.
|
101 |
+
*/
|
102 |
+
public function set_region($region)
|
103 |
+
{
|
104 |
+
$this->set_hostname('http://monitoring.'. $region .'.amazonaws.com');
|
105 |
+
return $this;
|
106 |
+
}
|
107 |
+
|
108 |
+
|
109 |
+
/*%******************************************************************************************%*/
|
110 |
+
// CONSTRUCTOR
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Constructs a new instance of <AmazonCloudWatch>.
|
114 |
+
*
|
115 |
+
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <code>AWS_KEY</code> constant.
|
116 |
+
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <code>AWS_SECRET_KEY</code> constant.
|
117 |
+
* @return boolean false if no valid values are set, otherwise true.
|
118 |
+
*/
|
119 |
+
public function __construct($key = null, $secret_key = null)
|
120 |
+
{
|
121 |
+
$this->api_version = '2010-08-01';
|
122 |
+
$this->hostname = self::DEFAULT_URL;
|
123 |
+
|
124 |
+
if (!$key && !defined('AWS_KEY'))
|
125 |
+
{
|
126 |
+
// @codeCoverageIgnoreStart
|
127 |
+
throw new CW_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
128 |
+
// @codeCoverageIgnoreEnd
|
129 |
+
}
|
130 |
+
|
131 |
+
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
132 |
+
{
|
133 |
+
// @codeCoverageIgnoreStart
|
134 |
+
throw new CW_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
135 |
+
// @codeCoverageIgnoreEnd
|
136 |
+
}
|
137 |
+
|
138 |
+
return parent::__construct($key, $secret_key);
|
139 |
+
}
|
140 |
+
|
141 |
+
|
142 |
+
/*%******************************************************************************************%*/
|
143 |
+
// SERVICE METHODS
|
144 |
+
|
145 |
+
/**
|
146 |
+
*
|
147 |
+
* Creates or updates an alarm and associates it with the specified Amazon CloudWatch metric. Optionally, this operation can associate one or
|
148 |
+
* more Amazon Simple Notification Service resources with the alarm.
|
149 |
+
*
|
150 |
+
* When this operation creates an alarm, the alarm state is immediately set to <code>INSUFFICIENT_DATA</code>. The alarm is evaluated and its
|
151 |
+
* <code>StateValue</code> is set appropriately. Any actions associated with the <code>StateValue</code> is then executed.
|
152 |
+
*
|
153 |
+
* When updating an existing alarm, its <code>StateValue</code> is left unchanged.
|
154 |
+
*
|
155 |
+
* @param string $alarm_name (Required) The descriptive name for the alarm. This name must be unique within the user's AWS account
|
156 |
+
* @param string $metric_name (Required) The name for the alarm's associated metric.
|
157 |
+
* @param string $namespace (Required) The namespace for the alarm's associated metric.
|
158 |
+
* @param string $statistic (Required) The statistic to apply to the alarm's associated metric. [Allowed values: <code>SampleCount</code>, <code>Average</code>, <code>Sum</code>, <code>Minimum</code>, <code>Maximum</code>]
|
159 |
+
* @param integer $period (Required) The period in seconds over which the specified statistic is applied.
|
160 |
+
* @param integer $evaluation_periods (Required) The number of periods over which data is compared to the specified threshold.
|
161 |
+
* @param double $threshold (Required) The value against which the specified statistic is compared.
|
162 |
+
* @param string $comparison_operator (Required) The arithmetic operation to use when comparing the specified <code>Statistic</code> and <code>Threshold</code>. The specified <code>Statistic</code> value is used as the first operand. [Allowed values: <code>GreaterThanOrEqualToThreshold</code>, <code>GreaterThanThreshold</code>, <code>LessThanThreshold</code>, <code>LessThanOrEqualToThreshold</code>]
|
163 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
164 |
+
* <li><code>AlarmDescription</code> - <code>string</code> - Optional - The description for the alarm. </li>
|
165 |
+
* <li><code>ActionsEnabled</code> - <code>boolean</code> - Optional - Indicates whether or not actions should be executed during any changes to the alarm's state. </li>
|
166 |
+
* <li><code>OKActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>OK</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values. </li>
|
167 |
+
* <li><code>AlarmActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values. </li>
|
168 |
+
* <li><code>InsufficientDataActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>INSUFFICIENT_DATA</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values. </li>
|
169 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - The dimensions for the alarm's associated metric. <ul>
|
170 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
171 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension. </li>
|
172 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement </li>
|
173 |
+
* </ul></li>
|
174 |
+
* </ul></li>
|
175 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit for the alarm's associated metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
176 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
177 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
178 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
179 |
+
*/
|
180 |
+
public function put_metric_alarm($alarm_name, $metric_name, $namespace, $statistic, $period, $evaluation_periods, $threshold, $comparison_operator, $opt = null)
|
181 |
+
{
|
182 |
+
if (!$opt) $opt = array();
|
183 |
+
$opt['AlarmName'] = $alarm_name;
|
184 |
+
|
185 |
+
// Optional parameter
|
186 |
+
if (isset($opt['OKActions']))
|
187 |
+
{
|
188 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
189 |
+
'OKActions' => (is_array($opt['OKActions']) ? $opt['OKActions'] : array($opt['OKActions']))
|
190 |
+
), 'member'));
|
191 |
+
unset($opt['OKActions']);
|
192 |
+
}
|
193 |
+
|
194 |
+
// Optional parameter
|
195 |
+
if (isset($opt['AlarmActions']))
|
196 |
+
{
|
197 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
198 |
+
'AlarmActions' => (is_array($opt['AlarmActions']) ? $opt['AlarmActions'] : array($opt['AlarmActions']))
|
199 |
+
), 'member'));
|
200 |
+
unset($opt['AlarmActions']);
|
201 |
+
}
|
202 |
+
|
203 |
+
// Optional parameter
|
204 |
+
if (isset($opt['InsufficientDataActions']))
|
205 |
+
{
|
206 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
207 |
+
'InsufficientDataActions' => (is_array($opt['InsufficientDataActions']) ? $opt['InsufficientDataActions'] : array($opt['InsufficientDataActions']))
|
208 |
+
), 'member'));
|
209 |
+
unset($opt['InsufficientDataActions']);
|
210 |
+
}
|
211 |
+
$opt['MetricName'] = $metric_name;
|
212 |
+
$opt['Namespace'] = $namespace;
|
213 |
+
$opt['Statistic'] = $statistic;
|
214 |
+
|
215 |
+
// Optional parameter
|
216 |
+
if (isset($opt['Dimensions']))
|
217 |
+
{
|
218 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
219 |
+
'Dimensions' => $opt['Dimensions']
|
220 |
+
), 'member'));
|
221 |
+
unset($opt['Dimensions']);
|
222 |
+
}
|
223 |
+
$opt['Period'] = $period;
|
224 |
+
$opt['EvaluationPeriods'] = $evaluation_periods;
|
225 |
+
$opt['Threshold'] = $threshold;
|
226 |
+
$opt['ComparisonOperator'] = $comparison_operator;
|
227 |
+
|
228 |
+
return $this->authenticate('PutMetricAlarm', $opt, $this->hostname);
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Publishes metric data points to Amazon CloudWatch. Amazon Cloudwatch associates the data points with the specified metric. If the specified
|
233 |
+
* metric does not exist, Amazon CloudWatch creates the metric. If you create a metric with the <code>PutMetricData</code> action, allow up to
|
234 |
+
* fifteen minutes for the metric to appear in calls to the ListMetrics action.
|
235 |
+
*
|
236 |
+
* The size of a <code>PutMetricData</code> request is limited to 8 KB for HTTP GET requests and 40 KB for HTTP POST requests.
|
237 |
+
*
|
238 |
+
* Amazon CloudWatch truncates values with very large exponents. Values with base-10 exponents greater than 126 (1 x 10^126) are truncated.
|
239 |
+
* Likewise, values with base-10 exponents less than -130 (1 x 10^-130) are also truncated.
|
240 |
+
*
|
241 |
+
* @param string $namespace (Required) The namespace for the metric data. You cannot specify a namespace that begins with <code>AWS/</code>. Namespaces that begin with <code>AWS/</code> are reserved for other Amazon Web Services products that send metrics to Amazon CloudWatch.
|
242 |
+
* @param array $metric_data (Required) A list of data describing the metric. <ul>
|
243 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
244 |
+
* <li><code>MetricName</code> - <code>string</code> - Required - The name of the metric. </li>
|
245 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions associated with the metric. <ul>
|
246 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
247 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension. </li>
|
248 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement </li>
|
249 |
+
* </ul></li>
|
250 |
+
* </ul></li>
|
251 |
+
* <li><code>Timestamp</code> - <code>string</code> - Optional - The time stamp used for the metric. If not specified, the default value is set to the time the metric data was received. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
252 |
+
* <li><code>Value</code> - <code>integer</code> - Optional - The value for the metric. <important>Amazon CloudWatch truncates values with very large exponents. Values with base-10 exponents greater than 126 (1 x 10^126) are truncated. Likewise, values with base-10 exponents less than -130 (1 x 10^-130) are also truncated. </important> </li>
|
253 |
+
* <li><code>StatisticValues</code> - <code>array</code> - Optional - A set of statistical values describing the metric. Takes an associative array of parameters that can have the following keys: <ul>
|
254 |
+
* <li><code>SampleCount</code> - <code>double</code> - Required - The number of samples used for the statistic set. </li>
|
255 |
+
* <li><code>Sum</code> - <code>double</code> - Required - The sum of values for the sample set. </li>
|
256 |
+
* <li><code>Minimum</code> - <code>double</code> - Required - The minimum value of the sample set. </li>
|
257 |
+
* <li><code>Maximum</code> - <code>double</code> - Required - The maximum value of the sample set. </li>
|
258 |
+
* </ul></li>
|
259 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit of the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
260 |
+
* </ul></li>
|
261 |
+
* </ul>
|
262 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
263 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
264 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
265 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
266 |
+
*/
|
267 |
+
public function put_metric_data($namespace, $metric_data, $opt = null)
|
268 |
+
{
|
269 |
+
if (!$opt) $opt = array();
|
270 |
+
$opt['Namespace'] = $namespace;
|
271 |
+
|
272 |
+
// Handle Timestamps
|
273 |
+
for ($i = 0, $max = count($metric_data); $i < $max; $i++)
|
274 |
+
{
|
275 |
+
if (isset($metric_data[$i]['Timestamp']))
|
276 |
+
{
|
277 |
+
$metric_data[$i]['Timestamp'] = $this->util->convert_date_to_iso8601($metric_data[$i]['Timestamp']);
|
278 |
+
}
|
279 |
+
}
|
280 |
+
|
281 |
+
// Required parameter
|
282 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
283 |
+
'MetricData' => (is_array($metric_data) ? $metric_data : array($metric_data))
|
284 |
+
), 'member'));
|
285 |
+
|
286 |
+
return $this->authenticate('PutMetricData', $opt, $this->hostname);
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
*
|
291 |
+
* Returns a list of valid metrics stored for the AWS account owner. Returned metrics can be used with GetMetricStatistics to obtain
|
292 |
+
* statistical data for a given metric.
|
293 |
+
*
|
294 |
+
* Up to 500 results are returned for any one call. To retrieve further results, use returned <code>NextToken</code> values with subsequent
|
295 |
+
* <code>ListMetrics</code> operations.
|
296 |
+
*
|
297 |
+
* If you create a metric with the PutMetricData action, allow up to fifteen minutes for the metric to appear in calls to the
|
298 |
+
* <code>ListMetrics</code> action. Statistics about the metric, however, are available sooner using GetMetricStatistics.
|
299 |
+
*
|
300 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
301 |
+
* <li><code>Namespace</code> - <code>string</code> - Optional - The namespace to filter against. </li>
|
302 |
+
* <li><code>MetricName</code> - <code>string</code> - Optional - The name of the metric to filter against. </li>
|
303 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions to filter against. <ul>
|
304 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
305 |
+
* <li><code>Name</code> - <code>string</code> - Required - The dimension name to be matched. </li>
|
306 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The value of the dimension to be matched. Specifying a <code>Name</code> without specifying a <code>Value</code> returns all values associated with that <code>Name</code>. </li>
|
307 |
+
* </ul></li>
|
308 |
+
* </ul></li>
|
309 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available. </li>
|
310 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
311 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
312 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
313 |
+
*/
|
314 |
+
public function list_metrics($opt = null)
|
315 |
+
{
|
316 |
+
if (!$opt) $opt = array();
|
317 |
+
|
318 |
+
// Optional parameter
|
319 |
+
if (isset($opt['Dimensions']))
|
320 |
+
{
|
321 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
322 |
+
'Dimensions' => $opt['Dimensions']
|
323 |
+
), 'member'));
|
324 |
+
unset($opt['Dimensions']);
|
325 |
+
}
|
326 |
+
|
327 |
+
return $this->authenticate('ListMetrics', $opt, $this->hostname);
|
328 |
+
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
*
|
332 |
+
* Gets statistics for the specified metric.
|
333 |
+
*
|
334 |
+
* The maximum number of data points returned from a single <code>GetMetricStatistics</code> request is 1,440. If a request is made that
|
335 |
+
* generates more than 1,440 data points, Amazon CloudWatch returns an error. In such a case, alter the request by narrowing the specified time
|
336 |
+
* range or increasing the specified period. Alternatively, make multiple requests across adjacent time ranges.
|
337 |
+
*
|
338 |
+
* Amazon CloudWatch aggregates data points based on the length of the <code>period</code> that you specify. For example, if you request
|
339 |
+
* statistics with a one-minute granularity, Amazon CloudWatch aggregates data points with time stamps that fall within the same one-minute
|
340 |
+
* period. In such a case, the data points queried can greatly outnumber the data points returned.
|
341 |
+
*
|
342 |
+
* The maximum number of data points that can be queried is 50,850; whereas the maximum number of data points returned is 1,440.
|
343 |
+
*
|
344 |
+
* The following examples show various statistics allowed by the data point query maximum of 50,850 when you call
|
345 |
+
* <code>GetMetricStatistics</code> on Amazon EC2 instances with detailed (one-minute) monitoring enabled:
|
346 |
+
*
|
347 |
+
* <ul> <li>Statistics for up to 400 instances for a span of one hour</li>
|
348 |
+
*
|
349 |
+
* <li>Statistics for up to 35 instances over a span of 24 hours</li>
|
350 |
+
*
|
351 |
+
* <li>Statistics for up to 2 instances over a span of 2 weeks</li>
|
352 |
+
*
|
353 |
+
* </ul>
|
354 |
+
*
|
355 |
+
* @param string $namespace (Required) The namespace of the metric.
|
356 |
+
* @param string $metric_name (Required) The name of the metric.
|
357 |
+
* @param string $start_time (Required) The time stamp to use for determining the first datapoint to return. The value specified is inclusive; results include datapoints with the time stamp specified. The specified start time is rounded down to the nearest value. Datapoints are returned for start times up to two weeks in the past. Specified start times that are more than two weeks in the past will not return datapoints for metrics that are older than two weeks. Accepts any value that <php:strtotime()> understands.
|
358 |
+
* @param string $end_time (Required) The time stamp to use for determining the last datapoint to return. The value specified is exclusive; results will include datapoints up to the time stamp specified. Accepts any value that <php:strtotime()> understands.
|
359 |
+
* @param integer $period (Required) The granularity, in seconds, of the returned datapoints. <code>Period</code> must be at least 60 seconds and must be a multiple of 60. The default value is 60.
|
360 |
+
* @param string|array $statistics (Required) The metric statistics to return. Pass a string for a single value, or an indexed array for multiple values.
|
361 |
+
* @param string $unit (Required) The unit for the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]
|
362 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
363 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions describing qualities of the metric. <ul>
|
364 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
365 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension. </li>
|
366 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement </li>
|
367 |
+
* </ul></li>
|
368 |
+
* </ul></li>
|
369 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
370 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
371 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
372 |
+
*/
|
373 |
+
public function get_metric_statistics($namespace, $metric_name, $start_time, $end_time, $period, $statistics, $unit, $opt = null)
|
374 |
+
{
|
375 |
+
if (!$opt) $opt = array();
|
376 |
+
$opt['Namespace'] = $namespace;
|
377 |
+
$opt['MetricName'] = $metric_name;
|
378 |
+
|
379 |
+
// Optional parameter
|
380 |
+
if (isset($opt['Dimensions']))
|
381 |
+
{
|
382 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
383 |
+
'Dimensions' => $opt['Dimensions']
|
384 |
+
), 'member'));
|
385 |
+
unset($opt['Dimensions']);
|
386 |
+
}
|
387 |
+
$opt['StartTime'] = $this->util->convert_date_to_iso8601($start_time);
|
388 |
+
$opt['EndTime'] = $this->util->convert_date_to_iso8601($end_time);
|
389 |
+
$opt['Period'] = $period;
|
390 |
+
|
391 |
+
// Required parameter
|
392 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
393 |
+
'Statistics' => (is_array($statistics) ? $statistics : array($statistics))
|
394 |
+
), 'member'));
|
395 |
+
$opt['Unit'] = $unit;
|
396 |
+
|
397 |
+
return $this->authenticate('GetMetricStatistics', $opt, $this->hostname);
|
398 |
+
}
|
399 |
+
|
400 |
+
/**
|
401 |
+
*
|
402 |
+
* Disables actions for the specified alarms. When an alarm's actions are disabled the alarm's state may change, but none of the alarm's
|
403 |
+
* actions will execute.
|
404 |
+
*
|
405 |
+
* @param string|array $alarm_names (Required) The names of the alarms to disable actions for. Pass a string for a single value, or an indexed array for multiple values.
|
406 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
407 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
408 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
409 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
410 |
+
*/
|
411 |
+
public function disable_alarm_actions($alarm_names, $opt = null)
|
412 |
+
{
|
413 |
+
if (!$opt) $opt = array();
|
414 |
+
|
415 |
+
// Required parameter
|
416 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
417 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
418 |
+
), 'member'));
|
419 |
+
|
420 |
+
return $this->authenticate('DisableAlarmActions', $opt, $this->hostname);
|
421 |
+
}
|
422 |
+
|
423 |
+
/**
|
424 |
+
*
|
425 |
+
* Retrieves alarms with the specified names. If no name is specified, all alarms for the user are returned. Alarms can be retrieved by using
|
426 |
+
* only a prefix for the alarm name, the alarm state, or a prefix for any action.
|
427 |
+
*
|
428 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
429 |
+
* <li><code>AlarmNames</code> - <code>string|array</code> - Optional - A list of alarm names to retrieve information for. Pass a string for a single value, or an indexed array for multiple values. </li>
|
430 |
+
* <li><code>AlarmNamePrefix</code> - <code>string</code> - Optional - The alarm name prefix. <code>AlarmNames</code> cannot be specified if this parameter is specified. </li>
|
431 |
+
* <li><code>StateValue</code> - <code>string</code> - Optional - The state value to be used in matching alarms. [Allowed values: <code>OK</code>, <code>ALARM</code>, <code>INSUFFICIENT_DATA</code>]</li>
|
432 |
+
* <li><code>ActionPrefix</code> - <code>string</code> - Optional - The action name prefix. </li>
|
433 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of alarm descriptions to retrieve. </li>
|
434 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available. </li>
|
435 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
436 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
437 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
438 |
+
*/
|
439 |
+
public function describe_alarms($opt = null)
|
440 |
+
{
|
441 |
+
if (!$opt) $opt = array();
|
442 |
+
|
443 |
+
// Optional parameter
|
444 |
+
if (isset($opt['AlarmNames']))
|
445 |
+
{
|
446 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
447 |
+
'AlarmNames' => (is_array($opt['AlarmNames']) ? $opt['AlarmNames'] : array($opt['AlarmNames']))
|
448 |
+
), 'member'));
|
449 |
+
unset($opt['AlarmNames']);
|
450 |
+
}
|
451 |
+
|
452 |
+
return $this->authenticate('DescribeAlarms', $opt, $this->hostname);
|
453 |
+
}
|
454 |
+
|
455 |
+
/**
|
456 |
+
*
|
457 |
+
* Retrieves all alarms for a single metric. Specify a statistic, period, or unit to filter the set of alarms further.
|
458 |
+
*
|
459 |
+
* @param string $metric_name (Required) The name of the metric.
|
460 |
+
* @param string $namespace (Required) The namespace of the metric.
|
461 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
462 |
+
* <li><code>Statistic</code> - <code>string</code> - Optional - The statistic for the metric. [Allowed values: <code>SampleCount</code>, <code>Average</code>, <code>Sum</code>, <code>Minimum</code>, <code>Maximum</code>]</li>
|
463 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - The list of dimensions associated with the metric. <ul>
|
464 |
+
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
465 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension. </li>
|
466 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement </li>
|
467 |
+
* </ul></li>
|
468 |
+
* </ul></li>
|
469 |
+
* <li><code>Period</code> - <code>integer</code> - Optional - The period in seconds over which the statistic is applied. </li>
|
470 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit for the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
471 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
472 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
473 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
474 |
+
*/
|
475 |
+
public function describe_alarms_for_metric($metric_name, $namespace, $opt = null)
|
476 |
+
{
|
477 |
+
if (!$opt) $opt = array();
|
478 |
+
$opt['MetricName'] = $metric_name;
|
479 |
+
$opt['Namespace'] = $namespace;
|
480 |
+
|
481 |
+
// Optional parameter
|
482 |
+
if (isset($opt['Dimensions']))
|
483 |
+
{
|
484 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
485 |
+
'Dimensions' => $opt['Dimensions']
|
486 |
+
), 'member'));
|
487 |
+
unset($opt['Dimensions']);
|
488 |
+
}
|
489 |
+
|
490 |
+
return $this->authenticate('DescribeAlarmsForMetric', $opt, $this->hostname);
|
491 |
+
}
|
492 |
+
|
493 |
+
/**
|
494 |
+
*
|
495 |
+
* Retrieves history for the specified alarm. Filter alarms by date range or item type. If an alarm name is not specified, Amazon CloudWatch
|
496 |
+
* returns histories for all of the owner's alarms.
|
497 |
+
*
|
498 |
+
* Amazon CloudWatch retains the history of an alarm for two weeks, whether or not you delete the alarm.
|
499 |
+
*
|
500 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
501 |
+
* <li><code>AlarmName</code> - <code>string</code> - Optional - The name of the alarm. </li>
|
502 |
+
* <li><code>HistoryItemType</code> - <code>string</code> - Optional - The type of alarm histories to retrieve. [Allowed values: <code>ConfigurationUpdate</code>, <code>StateUpdate</code>, <code>Action</code>]</li>
|
503 |
+
* <li><code>StartDate</code> - <code>string</code> - Optional - The starting date to retrieve alarm history. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
504 |
+
* <li><code>EndDate</code> - <code>string</code> - Optional - The ending date to retrieve alarm history. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
505 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of alarm history records to retrieve. </li>
|
506 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available. </li>
|
507 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
508 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
509 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
510 |
+
*/
|
511 |
+
public function describe_alarm_history($opt = null)
|
512 |
+
{
|
513 |
+
if (!$opt) $opt = array();
|
514 |
+
|
515 |
+
// Optional parameter
|
516 |
+
if (isset($opt['StartDate']))
|
517 |
+
{
|
518 |
+
$opt['StartDate'] = $this->util->convert_date_to_iso8601($opt['StartDate']);
|
519 |
+
}
|
520 |
+
|
521 |
+
// Optional parameter
|
522 |
+
if (isset($opt['EndDate']))
|
523 |
+
{
|
524 |
+
$opt['EndDate'] = $this->util->convert_date_to_iso8601($opt['EndDate']);
|
525 |
+
}
|
526 |
+
|
527 |
+
return $this->authenticate('DescribeAlarmHistory', $opt, $this->hostname);
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
*
|
532 |
+
* Enables actions for the specified alarms.
|
533 |
+
*
|
534 |
+
* @param string|array $alarm_names (Required) The names of the alarms to enable actions for. Pass a string for a single value, or an indexed array for multiple values.
|
535 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
536 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
537 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
538 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
539 |
+
*/
|
540 |
+
public function enable_alarm_actions($alarm_names, $opt = null)
|
541 |
+
{
|
542 |
+
if (!$opt) $opt = array();
|
543 |
+
|
544 |
+
// Required parameter
|
545 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
546 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
547 |
+
), 'member'));
|
548 |
+
|
549 |
+
return $this->authenticate('EnableAlarmActions', $opt, $this->hostname);
|
550 |
+
}
|
551 |
+
|
552 |
+
/**
|
553 |
+
*
|
554 |
+
* Deletes all specified alarms. In the event of an error, no alarms are deleted.
|
555 |
+
*
|
556 |
+
* @param string|array $alarm_names (Required) A list of alarms to be deleted. Pass a string for a single value, or an indexed array for multiple values.
|
557 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
558 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
559 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
560 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
561 |
+
*/
|
562 |
+
public function delete_alarms($alarm_names, $opt = null)
|
563 |
+
{
|
564 |
+
if (!$opt) $opt = array();
|
565 |
+
|
566 |
+
// Required parameter
|
567 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
568 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
569 |
+
), 'member'));
|
570 |
+
|
571 |
+
return $this->authenticate('DeleteAlarms', $opt, $this->hostname);
|
572 |
+
}
|
573 |
+
|
574 |
+
/**
|
575 |
+
*
|
576 |
+
* Temporarily sets the state of an alarm. When the updated <code>StateValue</code> differs from the previous value, the action configured for
|
577 |
+
* the appropriate state is invoked. This is not a permanent change. The next periodic alarm check (in about a minute) will set the alarm to
|
578 |
+
* its actual state.
|
579 |
+
*
|
580 |
+
* @param string $alarm_name (Required) The descriptive name for the alarm. This name must be unique within the user's AWS account. The maximum length is 255 characters.
|
581 |
+
* @param string $state_value (Required) The value of the state. [Allowed values: <code>OK</code>, <code>ALARM</code>, <code>INSUFFICIENT_DATA</code>]
|
582 |
+
* @param string $state_reason (Required) The reason that this alarm is set to this specific state (in human-readable text format)
|
583 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
584 |
+
* <li><code>StateReasonData</code> - <code>string</code> - Optional - The reason that this alarm is set to this specific state (in machine-readable JSON format) </li>
|
585 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
586 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
587 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
588 |
+
*/
|
589 |
+
public function set_alarm_state($alarm_name, $state_value, $state_reason, $opt = null)
|
590 |
+
{
|
591 |
+
if (!$opt) $opt = array();
|
592 |
+
$opt['AlarmName'] = $alarm_name;
|
593 |
+
$opt['StateValue'] = $state_value;
|
594 |
+
$opt['StateReason'] = $state_reason;
|
595 |
+
|
596 |
+
return $this->authenticate('SetAlarmState', $opt, $this->hostname);
|
597 |
+
}
|
598 |
+
}
|
599 |
+
|
600 |
+
|
601 |
+
/*%******************************************************************************************%*/
|
602 |
+
// EXCEPTIONS
|
603 |
+
|
604 |
+
/**
|
605 |
+
* Default CloudWatch Exception.
|
606 |
+
*/
|
607 |
class CloudWatch_Exception extends Exception {}
|
app/libs/aws/services/ec2.class.php
CHANGED
@@ -1,3995 +1,3984 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
/**
|
18 |
-
*
|
19 |
-
* Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable compute capacity in the cloud. It is
|
20 |
-
* designed to make web-scale computing easier for developers.
|
21 |
-
*
|
22 |
-
* Amazon EC2's simple web service interface allows you to obtain and configure capacity with minimal friction. It
|
23 |
-
* provides you with complete control of your computing resources and lets you run on Amazon's proven computing
|
24 |
-
* environment. Amazon EC2 reduces the time required to obtain and boot new server instances to minutes, allowing you to
|
25 |
-
* quickly scale capacity, both up and down, as your computing requirements change. Amazon EC2 changes the economics of
|
26 |
-
* computing by allowing you to pay only for capacity that you actually use. Amazon EC2 provides developers the tools to
|
27 |
-
* build failure resilient applications and isolate themselves from common failure scenarios.
|
28 |
-
*
|
29 |
-
* Visit <a href="http://aws.amazon.com/ec2/">http://aws.amazon.com/ec2/</a> for more information.
|
30 |
-
*
|
31 |
-
* @version Fri Mar 25 13:14:50 PDT 2011
|
32 |
-
* @license See the included NOTICE.md file for complete information.
|
33 |
-
* @copyright See the included NOTICE.md file for complete information.
|
34 |
-
* @link http://aws.amazon.com/ec2/Amazon Elastic Compute Cloud
|
35 |
-
* @link http://aws.amazon.com/documentation/ec2/Amazon Elastic Compute Cloud documentation
|
36 |
-
*/
|
37 |
-
class AmazonEC2 extends CFRuntime
|
38 |
-
{
|
39 |
-
|
40 |
-
/*%******************************************************************************************%*/
|
41 |
-
// CLASS CONSTANTS
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Specify the default queue URL.
|
45 |
-
*/
|
46 |
-
const DEFAULT_URL = 'ec2.amazonaws.com';
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Specify the queue URL for the US-East (Northern Virginia) Region.
|
50 |
-
*/
|
51 |
-
const REGION_US_E1 = 'us-east-1';
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Specify the queue URL for the US-West (Northern California) Region.
|
55 |
-
*/
|
56 |
-
const REGION_US_W1 = 'us-west-1';
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Specify the queue URL for the EU (Ireland) Region.
|
60 |
-
*/
|
61 |
-
const REGION_EU_W1 = 'eu-west-1';
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Specify the queue URL for the Asia Pacific (Singapore) Region.
|
65 |
-
*/
|
66 |
-
const REGION_APAC_SE1 = 'ap-southeast-1';
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Specify the queue URL for the Asia Pacific (Japan) Region.
|
70 |
-
*/
|
71 |
-
const REGION_APAC_NE1 = 'ap-northeast-1';
|
72 |
-
|
73 |
-
/**
|
74 |
-
* The "pending" state code of an EC2 instance. Useful for conditionals.
|
75 |
-
*/
|
76 |
-
const STATE_PENDING = 0;
|
77 |
-
|
78 |
-
/**
|
79 |
-
* The "running" state code of an EC2 instance. Useful for conditionals.
|
80 |
-
*/
|
81 |
-
const STATE_RUNNING = 16;
|
82 |
-
|
83 |
-
/**
|
84 |
-
* The "shutting-down" state code of an EC2 instance. Useful for conditionals.
|
85 |
-
*/
|
86 |
-
const STATE_SHUTTING_DOWN = 32;
|
87 |
-
|
88 |
-
/**
|
89 |
-
* The "terminated" state code of an EC2 instance. Useful for conditionals.
|
90 |
-
*/
|
91 |
-
const STATE_TERMINATED = 48;
|
92 |
-
|
93 |
-
/**
|
94 |
-
* The "stopping" state code of an EC2 instance. Useful for conditionals.
|
95 |
-
*/
|
96 |
-
const STATE_STOPPING = 64;
|
97 |
-
|
98 |
-
/**
|
99 |
-
* The "stopped" state code of an EC2 instance. Useful for conditionals.
|
100 |
-
*/
|
101 |
-
const STATE_STOPPED = 80;
|
102 |
-
|
103 |
-
|
104 |
-
/*%******************************************************************************************%*/
|
105 |
-
// SETTERS
|
106 |
-
|
107 |
-
/**
|
108 |
-
* This allows you to explicitly sets the region for the service to use.
|
109 |
-
*
|
110 |
-
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_EU_W1>, or <REGION_APAC_SE1>.
|
111 |
-
* @return $this A reference to the current instance.
|
112 |
-
*/
|
113 |
-
public function set_region($region)
|
114 |
-
{
|
115 |
-
$this->set_hostname('http://ec2.'. $region .'.amazonaws.com');
|
116 |
-
return $this;
|
117 |
-
}
|
118 |
-
|
119 |
-
|
120 |
-
/*%******************************************************************************************%*/
|
121 |
-
// CONSTRUCTOR
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Constructs a new instance of <AmazonEC2>.
|
125 |
-
*
|
126 |
-
* @param string $key (Optional) Your Amazon API Key. If blank, it will look for the <code>AWS_KEY</code> constant.
|
127 |
-
* @param string $secret_key (Optional) Your Amazon API Secret Key. If blank, it will look for the <code>AWS_SECRET_KEY</code> constant.
|
128 |
-
* @return boolean false if no valid values are set, otherwise true.
|
129 |
-
*/
|
130 |
-
public function __construct($key = null, $secret_key = null)
|
131 |
-
{
|
132 |
-
$this->api_version = '2011-01-01';
|
133 |
-
$this->hostname = self::DEFAULT_URL;
|
134 |
-
|
135 |
-
if (!$key && !defined('AWS_KEY'))
|
136 |
-
{
|
137 |
-
throw new EC2_Exception('No account key was passed into the constructor, nor was it set in the AWS_KEY constant.');
|
138 |
-
}
|
139 |
-
|
140 |
-
if (!$secret_key && !defined('AWS_SECRET_KEY'))
|
141 |
-
{
|
142 |
-
throw new EC2_Exception('No account secret was passed into the constructor, nor was it set in the AWS_SECRET_KEY constant.');
|
143 |
-
}
|
144 |
-
|
145 |
-
return parent::__construct($key, $secret_key);
|
146 |
-
}
|
147 |
-
|
148 |
-
|
149 |
-
/*%******************************************************************************************%*/
|
150 |
-
// SERVICE METHODS
|
151 |
-
|
152 |
-
/**
|
153 |
-
*
|
154 |
-
* The RebootInstances operation requests a reboot of one or more instances. This operation is asynchronous; it only
|
155 |
-
* queues a request to reboot the specified instance(s). The operation will succeed if the instances are valid and belong
|
156 |
-
* to the user. Requests to reboot terminated instances are ignored.
|
157 |
-
*
|
158 |
-
* @param string|array $instance_id (Required) The list of instances to terminate. Pass a string for a single value, or an indexed array for multiple values.
|
159 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
160 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
161 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
162 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
163 |
-
*/
|
164 |
-
public function reboot_instances($instance_id, $opt = null)
|
165 |
-
{
|
166 |
-
if (!$opt) $opt = array();
|
167 |
-
|
168 |
-
// Required parameter
|
169 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
170 |
-
'InstanceId' => (is_array($instance_id) ? $instance_id : array($instance_id))
|
171 |
-
)));
|
172 |
-
|
173 |
-
return $this->authenticate('RebootInstances', $opt, $this->hostname);
|
174 |
-
}
|
175 |
-
|
176 |
-
/**
|
177 |
-
*
|
178 |
-
* The DescribeReservedInstances operation describes Reserved Instances that were purchased for use with your account.
|
179 |
-
*
|
180 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
181 |
-
* <li><code>ReservedInstancesId</code> - <code>string|array</code> - Optional - The optional list of Reserved Instance IDs to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
182 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for ReservedInstances. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
183 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
184 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
185 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
186 |
-
* </ul></li>
|
187 |
-
* </ul></li>
|
188 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
189 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
190 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
191 |
-
*/
|
192 |
-
public function describe_reserved_instances($opt = null)
|
193 |
-
{
|
194 |
-
if (!$opt) $opt = array();
|
195 |
-
|
196 |
-
// Optional parameter
|
197 |
-
if (isset($opt['ReservedInstancesId']))
|
198 |
-
{
|
199 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
200 |
-
'ReservedInstancesId' => (is_array($opt['ReservedInstancesId']) ? $opt['ReservedInstancesId'] : array($opt['ReservedInstancesId']))
|
201 |
-
)));
|
202 |
-
unset($opt['ReservedInstancesId']);
|
203 |
-
}
|
204 |
-
|
205 |
-
// Optional parameter
|
206 |
-
if (isset($opt['Filter']))
|
207 |
-
{
|
208 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
209 |
-
'Filter' => $opt['Filter']
|
210 |
-
)));
|
211 |
-
unset($opt['Filter']);
|
212 |
-
}
|
213 |
-
|
214 |
-
return $this->authenticate('DescribeReservedInstances', $opt, $this->hostname);
|
215 |
-
}
|
216 |
-
|
217 |
-
/**
|
218 |
-
*
|
219 |
-
* The DescribeAvailabilityZones operation describes availability zones that are currently available to the account and
|
220 |
-
* their states.
|
221 |
-
*
|
222 |
-
* Availability zones are not the same across accounts. The availability zone <code>us-east-1a</code> for account A is not
|
223 |
-
* necessarily the same as <code>us-east-1a</code> for account B. Zone assignments are mapped independently for each
|
224 |
-
* account.
|
225 |
-
*
|
226 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
227 |
-
* <li><code>ZoneName</code> - <code>string|array</code> - Optional - A list of the availability zone names to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
228 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for AvailabilityZones. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
229 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
230 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
231 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
232 |
-
* </ul></li>
|
233 |
-
* </ul></li>
|
234 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
235 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
236 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
237 |
-
*/
|
238 |
-
public function describe_availability_zones($opt = null)
|
239 |
-
{
|
240 |
-
if (!$opt) $opt = array();
|
241 |
-
|
242 |
-
// Optional parameter
|
243 |
-
if (isset($opt['ZoneName']))
|
244 |
-
{
|
245 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
246 |
-
'ZoneName' => (is_array($opt['ZoneName']) ? $opt['ZoneName'] : array($opt['ZoneName']))
|
247 |
-
)));
|
248 |
-
unset($opt['ZoneName']);
|
249 |
-
}
|
250 |
-
|
251 |
-
// Optional parameter
|
252 |
-
if (isset($opt['Filter']))
|
253 |
-
{
|
254 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
255 |
-
'Filter' => $opt['Filter']
|
256 |
-
)));
|
257 |
-
unset($opt['Filter']);
|
258 |
-
}
|
259 |
-
|
260 |
-
return $this->authenticate('DescribeAvailabilityZones', $opt, $this->hostname);
|
261 |
-
}
|
262 |
-
|
263 |
-
/**
|
264 |
-
*
|
265 |
-
* Detach a previously attached volume from a running instance.
|
266 |
-
*
|
267 |
-
* @param string $volume_id (Required) The ID of the volume to detach.
|
268 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
269 |
-
* <li><code>InstanceId</code> - <code>string</code> - Optional - The ID of the instance from which to detach the the specified volume. </li>
|
270 |
-
* <li><code>Device</code> - <code>string</code> - Optional - The device name to which the volume is attached on the specified instance. </li>
|
271 |
-
* <li><code>Force</code> - <code>boolean</code> - Optional - Forces detachment if the previous detachment attempt did not occur cleanly (logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance will not have an opportunity to flush file system caches nor file system meta data. If you use this option, you must perform file system check and repair procedures. </li>
|
272 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
273 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
274 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
275 |
-
*/
|
276 |
-
public function detach_volume($volume_id, $opt = null)
|
277 |
-
{
|
278 |
-
if (!$opt) $opt = array();
|
279 |
-
$opt['VolumeId'] = $volume_id;
|
280 |
-
|
281 |
-
return $this->authenticate('DetachVolume', $opt, $this->hostname);
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
*
|
286 |
-
* The DeleteKeyPair operation deletes a key pair.
|
287 |
-
*
|
288 |
-
* @param string $key_name (Required) The name of the Amazon EC2 key pair to delete.
|
289 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
290 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
291 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
292 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
293 |
-
*/
|
294 |
-
public function delete_key_pair($key_name, $opt = null)
|
295 |
-
{
|
296 |
-
if (!$opt) $opt = array();
|
297 |
-
$opt['KeyName'] = $key_name;
|
298 |
-
|
299 |
-
return $this->authenticate('DeleteKeyPair', $opt, $this->hostname);
|
300 |
-
}
|
301 |
-
|
302 |
-
/**
|
303 |
-
*
|
304 |
-
* Disables monitoring for a running instance.
|
305 |
-
*
|
306 |
-
* @param string|array $instance_id (Required) The list of Amazon EC2 instances on which to disable monitoring. Pass a string for a single value, or an indexed array for multiple values.
|
307 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
308 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
309 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
310 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
311 |
-
*/
|
312 |
-
public function unmonitor_instances($instance_id, $opt = null)
|
313 |
-
{
|
314 |
-
if (!$opt) $opt = array();
|
315 |
-
|
316 |
-
// Required parameter
|
317 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
318 |
-
'InstanceId' => (is_array($instance_id) ? $instance_id : array($instance_id))
|
319 |
-
)));
|
320 |
-
|
321 |
-
return $this->authenticate('UnmonitorInstances', $opt, $this->hostname);
|
322 |
-
}
|
323 |
-
|
324 |
-
/**
|
325 |
-
*
|
326 |
-
* Attaches a VPN gateway to a VPC. This is the last step required to get your VPC fully connected to your data center
|
327 |
-
* before launching instances in it. For more information, go to Process for Using Amazon VPC in the Amazon Virtual Private
|
328 |
-
* Cloud Developer Guide.
|
329 |
-
*
|
330 |
-
* @param string $vpn_gateway_id (Required) The ID of the VPN gateway to attach to the VPC.
|
331 |
-
* @param string $vpc_id (Required) The ID of the VPC to attach to the VPN gateway.
|
332 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
333 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
334 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
335 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
336 |
-
*/
|
337 |
-
public function attach_vpn_gateway($vpn_gateway_id, $vpc_id, $opt = null)
|
338 |
-
{
|
339 |
-
if (!$opt) $opt = array();
|
340 |
-
$opt['VpnGatewayId'] = $vpn_gateway_id;
|
341 |
-
$opt['VpcId'] = $vpc_id;
|
342 |
-
|
343 |
-
return $this->authenticate('AttachVpnGateway', $opt, $this->hostname);
|
344 |
-
}
|
345 |
-
|
346 |
-
/**
|
347 |
-
*
|
348 |
-
* Creates an Amazon EBS-backed AMI from a "running" or "stopped" instance. AMIs that use an Amazon EBS root device boot
|
349 |
-
* faster than AMIs that use instance stores. They can be up to 1 TiB in size, use storage that persists on instance
|
350 |
-
* failure, and can be stopped and started.
|
351 |
-
*
|
352 |
-
* @param string $instance_id (Required) The ID of the instance from which to create the new image.
|
353 |
-
* @param string $name (Required) The name for the new AMI being created.
|
354 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
355 |
-
* <li><code>Description</code> - <code>string</code> - Optional - The description for the new AMI being created. </li>
|
356 |
-
* <li><code>NoReboot</code> - <code>boolean</code> - Optional - By default this property is set to <code>false</code>, which means Amazon EC2 attempts to cleanly shut down the instance before image creation and reboots the instance afterwards. When set to true, Amazon EC2 will not shut down the instance before creating the image. When this option is used, file system integrity on the created image cannot be guaranteed. </li>
|
357 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
358 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
359 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
360 |
-
*/
|
361 |
-
public function create_image($instance_id, $name, $opt = null)
|
362 |
-
{
|
363 |
-
if (!$opt) $opt = array();
|
364 |
-
$opt['InstanceId'] = $instance_id;
|
365 |
-
$opt['Name'] = $name;
|
366 |
-
|
367 |
-
return $this->authenticate('CreateImage', $opt, $this->hostname);
|
368 |
-
}
|
369 |
-
|
370 |
-
/**
|
371 |
-
*
|
372 |
-
* The DeleteSecurityGroup operation deletes a security group.
|
373 |
-
*
|
374 |
-
* If you attempt to delete a security group that contains instances, a fault is returned.
|
375 |
-
*
|
376 |
-
* If you attempt to delete a security group that is referenced by another security group, a fault is returned. For
|
377 |
-
* example, if security group B has a rule that allows access from security group A, security group A cannot be deleted
|
378 |
-
* until the allow rule is removed.
|
379 |
-
*
|
380 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
381 |
-
* <li><code>GroupName</code> - <code>string</code> - Optional - The name of the Amazon EC2 security group to delete. </li>
|
382 |
-
* <li><code>GroupId</code> - <code>string</code> - Optional - The ID of the Amazon EC2 security group to delete. </li>
|
383 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
384 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
385 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
386 |
-
*/
|
387 |
-
public function delete_security_group($opt = null)
|
388 |
-
{
|
389 |
-
if (!$opt) $opt = array();
|
390 |
-
|
391 |
-
return $this->authenticate('DeleteSecurityGroup', $opt, $this->hostname);
|
392 |
-
}
|
393 |
-
|
394 |
-
/**
|
395 |
-
*
|
396 |
-
* This action applies only to security groups in a VPC; it's not supported for EC2 security groups. For information about
|
397 |
-
* Amazon Virtual Private Cloud and VPC security groups, go to the Amazon Virtual Private Cloud User Guide.
|
398 |
-
*
|
399 |
-
* The action adds one or more egress rules to a VPC security group. Specifically, this permits instances in a security
|
400 |
-
* group to send traffic to either one or more destination CIDR IP address ranges, or to one or more destination security
|
401 |
-
* groups in the same VPC.
|
402 |
-
*
|
403 |
-
* Each rule consists of the protocol (e.g., TCP), plus either a CIDR range, or a source group. For the TCP and UDP
|
404 |
-
* protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the
|
405 |
-
* ICMP type and code. You can use <code>-1</code> as a wildcard for the ICMP type or code.
|
406 |
-
*
|
407 |
-
* Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might
|
408 |
-
* occur.
|
409 |
-
*
|
410 |
-
* <b>Important: </b> For VPC security groups: You can have up to 50 rules total per group (covering both ingress and
|
411 |
-
* egress).
|
412 |
-
*
|
413 |
-
* @param string $group_id (Required) ID of the VPC security group to modify.
|
414 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
415 |
-
* <li><code>IpPermissions</code> - <code>array</code> - Optional - List of IP permissions to authorize on the specified security group. Specifying permissions through IP permissions is the preferred way of authorizing permissions since it offers more flexibility and control. <ul>
|
416 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
417 |
-
* <li><code>IpProtocol</code> - <code>string</code> - Optional - The IP protocol of this permission. Valid protocol values: <code>tcp</code>, <code>udp</code>, <code>icmp</code> </li>
|
418 |
-
* <li><code>FromPort</code> - <code>integer</code> - Optional - Start of port range for the TCP and UDP protocols, or an ICMP type number. An ICMP type number of <code>-1</code> indicates a wildcard (i.e., any ICMP type number). </li>
|
419 |
-
* <li><code>ToPort</code> - <code>integer</code> - Optional - End of port range for the TCP and UDP protocols, or an ICMP code. An ICMP code of <code>-1</code> indicates a wildcard (i.e., any ICMP code). </li>
|
420 |
-
* <li><code>Groups</code> - <code>array</code> - Optional - The list of AWS user IDs and groups included in this permission. <ul>
|
421 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
422 |
-
* <li><code>UserId</code> - <code>string</code> - Optional - The AWS user ID of an account. </li>
|
423 |
-
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range. </li>
|
424 |
-
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range. </li>
|
425 |
-
* </ul></li>
|
426 |
-
* </ul></li>
|
427 |
-
* <li><code>IpRanges</code> - <code>string|array</code> - Optional - The list of CIDR IP ranges included in this permission. Pass a string for a single value, or an indexed array for multiple values. </li>
|
428 |
-
* </ul></li>
|
429 |
-
* </ul></li>
|
430 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
431 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
432 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
433 |
-
*/
|
434 |
-
public function authorize_security_group_egress($group_id, $opt = null)
|
435 |
-
{
|
436 |
-
if (!$opt) $opt = array();
|
437 |
-
$opt['GroupId'] = $group_id;
|
438 |
-
|
439 |
-
// Optional parameter
|
440 |
-
if (isset($opt['IpPermissions']))
|
441 |
-
{
|
442 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
443 |
-
'IpPermissions' => $opt['IpPermissions']
|
444 |
-
)));
|
445 |
-
unset($opt['IpPermissions']);
|
446 |
-
}
|
447 |
-
|
448 |
-
return $this->authenticate('AuthorizeSecurityGroupEgress', $opt, $this->hostname);
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* Retrieves the encrypted administrator password for the instances running Windows.
|
453 |
-
*
|
454 |
-
* The Windows password is only generated the first time an AMI is launched. It is not generated for
|
455 |
-
* rebundled AMIs or after the password is changed on an instance. The password is encrypted using the
|
456 |
-
* key pair that you provided.
|
457 |
-
*
|
458 |
-
* @param string $instance_id (Required) The ID of the instance for which you want the Windows administrator password.
|
459 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
460 |
-
* <li><code>DecryptPasswordWithKey</code> - <code>string</code> - Optional - Enables the decryption of the Administrator password for the given Microsoft Windows instance. Specifies the RSA private key that is associated with the keypair ID which was used to launch the Microsoft Windows instance.</li>
|
461 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
462 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This is useful for manually-managed batch requests.</li></ul>
|
463 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
464 |
-
*/
|
465 |
-
public function get_password_data($instance_id, $opt = null)
|
466 |
-
{
|
467 |
-
if (!$opt) $opt = array();
|
468 |
-
$opt['InstanceId'] = $instance_id;
|
469 |
-
|
470 |
-
// Unless DecryptPasswordWithKey is set, simply return the response.
|
471 |
-
if (!isset($opt['DecryptPasswordWithKey']))
|
472 |
-
{
|
473 |
-
return $this->authenticate('GetPasswordData', $opt, $this->hostname);
|
474 |
-
}
|
475 |
-
|
476 |
-
// Otherwise, decrypt the password.
|
477 |
-
else
|
478 |
-
{
|
479 |
-
// Get a resource representing the private key.
|
480 |
-
$private_key = openssl_pkey_get_private($opt['DecryptPasswordWithKey']);
|
481 |
-
unset($opt['DecryptPasswordWithKey']);
|
482 |
-
|
483 |
-
// Fetch the encrypted password.
|
484 |
-
$response = $this->authenticate('GetPasswordData', $opt, $this->hostname);
|
485 |
-
$data = trim((string) $response->body->passwordData);
|
486 |
-
|
487 |
-
// If it's Base64-encoded...
|
488 |
-
if ($this->util->is_base64($data))
|
489 |
-
{
|
490 |
-
// Base64-decode it, and decrypt it with the private key.
|
491 |
-
if (openssl_private_decrypt(base64_decode($data), $decrypted, $private_key))
|
492 |
-
{
|
493 |
-
// Replace the previous password data with the decrypted value.
|
494 |
-
$response->body->passwordData = $decrypted;
|
495 |
-
}
|
496 |
-
}
|
497 |
-
|
498 |
-
return $response;
|
499 |
-
}
|
500 |
-
}
|
501 |
-
|
502 |
-
/**
|
503 |
-
*
|
504 |
-
* Associates a set of DHCP options (that you've previously created) with the specified VPC. Or, associates the default
|
505 |
-
* DHCP options with the VPC. The default set consists of the standard EC2 host name, no domain name, no DNS server, no NTP
|
506 |
-
* server, and no NetBIOS server or node type. After you associate the options with the VPC, any existing instances and all
|
507 |
-
* new instances that you launch in that VPC use the options. For more information about the supported DHCP options and
|
508 |
-
* using them with Amazon VPC, go to Using DHCP Options in the Amazon Virtual Private Cloud Developer Guide.
|
509 |
-
*
|
510 |
-
* @param string $dhcp_options_id (Required) The ID of the DHCP options to associate with the VPC. Specify "default" to associate the default DHCP options with the VPC.
|
511 |
-
* @param string $vpc_id (Required) The ID of the VPC to associate the DHCP options with.
|
512 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
513 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
514 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
515 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
516 |
-
*/
|
517 |
-
public function associate_dhcp_options($dhcp_options_id, $vpc_id, $opt = null)
|
518 |
-
{
|
519 |
-
if (!$opt) $opt = array();
|
520 |
-
$opt['DhcpOptionsId'] = $dhcp_options_id;
|
521 |
-
$opt['VpcId'] = $vpc_id;
|
522 |
-
|
523 |
-
return $this->authenticate('AssociateDhcpOptions', $opt, $this->hostname);
|
524 |
-
}
|
525 |
-
|
526 |
-
/**
|
527 |
-
*
|
528 |
-
* Stops an instance that uses an Amazon EBS volume as its root device. Instances that use Amazon EBS volumes as their
|
529 |
-
* root devices can be quickly stopped and started. When an instance is stopped, the compute resources are released and you
|
530 |
-
* are not billed for hourly instance usage. However, your root partition Amazon EBS volume remains, continues to persist
|
531 |
-
* your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time.
|
532 |
-
*
|
533 |
-
* Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not
|
534 |
-
* preserve data stored in RAM.
|
535 |
-
*
|
536 |
-
* Performing this operation on an instance that uses an instance store as its root device returns an error.
|
537 |
-
*
|
538 |
-
* @param string|array $instance_id (Required) The list of Amazon EC2 instances to stop. Pass a string for a single value, or an indexed array for multiple values.
|
539 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
540 |
-
* <li><code>Force</code> - <code>boolean</code> - Optional - Forces the instance to stop. The instance will not have an opportunity to flush file system caches nor file system meta data. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances. </li>
|
541 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
542 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
543 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
544 |
-
*/
|
545 |
-
public function stop_instances($instance_id, $opt = null)
|
546 |
-
{
|
547 |
-
if (!$opt) $opt = array();
|
548 |
-
|
549 |
-
// Required parameter
|
550 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
551 |
-
'InstanceId' => (is_array($instance_id) ? $instance_id : array($instance_id))
|
552 |
-
)));
|
553 |
-
|
554 |
-
return $this->authenticate('StopInstances', $opt, $this->hostname);
|
555 |
-
}
|
556 |
-
|
557 |
-
/**
|
558 |
-
* Imports the public key from an RSA key pair created with a third-party tool. This operation differs
|
559 |
-
* from CreateKeyPair as the private key is never transferred between the caller and AWS servers.
|
560 |
-
*
|
561 |
-
* RSA key pairs are easily created on Microsoft Windows and Linux OS systems using the <code>ssh-keygen</code>
|
562 |
-
* command line tool provided with the standard OpenSSH installation. Standard library support for RSA
|
563 |
-
* key pair creation is also available for Java, Ruby, Python, and many other programming languages.
|
564 |
-
*
|
565 |
-
* The following formats are supported:
|
566 |
-
*
|
567 |
-
* <ul>
|
568 |
-
* <li>OpenSSH public key format.</li>
|
569 |
-
* <li>Base64 encoded DER format.</li>
|
570 |
-
* <li>SSH public key file format as specified in <a href="http://tools.ietf.org/html/rfc4716">RFC 4716</a>.</li>
|
571 |
-
* </ul>
|
572 |
-
*
|
573 |
-
* @param string $key_name (Required) The unique name for the key pair.
|
574 |
-
* @param string $public_key_material (Required) The public key portion of the key pair being imported.
|
575 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
576 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
577 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This is useful for manually-managed batch requests.</li></ul>
|
578 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
579 |
-
*/
|
580 |
-
public function import_key_pair($key_name, $public_key_material, $opt = null)
|
581 |
-
{
|
582 |
-
if (!$opt) $opt = array();
|
583 |
-
$opt['KeyName'] = $key_name;
|
584 |
-
$opt['PublicKeyMaterial'] = $this->util->is_base64($public_key_material) ? $public_key_material : base64_encode($public_key_material);
|
585 |
-
|
586 |
-
return $this->authenticate('ImportKeyPair', $opt, $this->hostname);
|
587 |
-
}
|
588 |
-
|
589 |
-
/**
|
590 |
-
*
|
591 |
-
* The CreateSecurityGroup operation creates a new security group.
|
592 |
-
*
|
593 |
-
* Every instance is launched in a security group. If no security group is specified during launch, the instances are
|
594 |
-
* launched in the default security group. Instances within the same security group have unrestricted network access to
|
595 |
-
* each other. Instances will reject network access attempts from other instances in a different security group. As the
|
596 |
-
* owner of instances you can grant or revoke specific permissions using the AuthorizeSecurityGroupIngress and
|
597 |
-
* RevokeSecurityGroupIngress operations.
|
598 |
-
*
|
599 |
-
* @param string $group_name (Required) Name of the security group.
|
600 |
-
* @param string $group_description (Required) Description of the group. This is informational only.
|
601 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
602 |
-
* <li><code>VpcId</code> - <code>string</code> - Optional - ID of the VPC. </li>
|
603 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
604 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
605 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
606 |
-
*/
|
607 |
-
public function create_security_group($group_name, $group_description, $opt = null)
|
608 |
-
{
|
609 |
-
if (!$opt) $opt = array();
|
610 |
-
$opt['GroupName'] = $group_name;
|
611 |
-
$opt['GroupDescription'] = $group_description;
|
612 |
-
|
613 |
-
return $this->authenticate('CreateSecurityGroup', $opt, $this->hostname);
|
614 |
-
}
|
615 |
-
|
616 |
-
/**
|
617 |
-
*
|
618 |
-
* Describes the Spot Price history.
|
619 |
-
*
|
620 |
-
* Spot Instances are instances that Amazon EC2 starts on your behalf when the maximum price that you specify exceeds the
|
621 |
-
* current Spot Price. Amazon EC2 periodically sets the Spot Price based on available Spot Instance capacity and current
|
622 |
-
* spot instance requests.
|
623 |
-
*
|
624 |
-
* For conceptual information about Spot Instances, refer to the Amazon Elastic Compute Cloud Developer Guide or Amazon
|
625 |
-
* Elastic Compute Cloud User Guide.
|
626 |
-
*
|
627 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
628 |
-
* <li><code>StartTime</code> - <code>string</code> - Optional - The start date and time of the Spot Instance price history data. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
629 |
-
* <li><code>EndTime</code> - <code>string</code> - Optional - The end date and time of the Spot Instance price history data. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
630 |
-
* <li><code>InstanceType</code> - <code>string|array</code> - Optional - Specifies the instance type to return. Pass a string for a single value, or an indexed array for multiple values. </li>
|
631 |
-
* <li><code>ProductDescription</code> - <code>string|array</code> - Optional - The description of the AMI. Pass a string for a single value, or an indexed array for multiple values. </li>
|
632 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for SpotPriceHistory. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
633 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
634 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
635 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
636 |
-
* </ul></li>
|
637 |
-
* </ul></li>
|
638 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
639 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
640 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
641 |
-
*/
|
642 |
-
public function describe_spot_price_history($opt = null)
|
643 |
-
{
|
644 |
-
if (!$opt) $opt = array();
|
645 |
-
|
646 |
-
// Optional parameter
|
647 |
-
if (isset($opt['StartTime']))
|
648 |
-
{
|
649 |
-
$opt['StartTime'] = $this->util->convert_date_to_iso8601($opt['StartTime']);
|
650 |
-
}
|
651 |
-
|
652 |
-
// Optional parameter
|
653 |
-
if (isset($opt['EndTime']))
|
654 |
-
{
|
655 |
-
$opt['EndTime'] = $this->util->convert_date_to_iso8601($opt['EndTime']);
|
656 |
-
}
|
657 |
-
|
658 |
-
// Optional parameter
|
659 |
-
if (isset($opt['InstanceType']))
|
660 |
-
{
|
661 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
662 |
-
'InstanceType' => (is_array($opt['InstanceType']) ? $opt['InstanceType'] : array($opt['InstanceType']))
|
663 |
-
)));
|
664 |
-
unset($opt['InstanceType']);
|
665 |
-
}
|
666 |
-
|
667 |
-
// Optional parameter
|
668 |
-
if (isset($opt['ProductDescription']))
|
669 |
-
{
|
670 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
671 |
-
'ProductDescription' => (is_array($opt['ProductDescription']) ? $opt['ProductDescription'] : array($opt['ProductDescription']))
|
672 |
-
)));
|
673 |
-
unset($opt['ProductDescription']);
|
674 |
-
}
|
675 |
-
|
676 |
-
// Optional parameter
|
677 |
-
if (isset($opt['Filter']))
|
678 |
-
{
|
679 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
680 |
-
'Filter' => $opt['Filter']
|
681 |
-
)));
|
682 |
-
unset($opt['Filter']);
|
683 |
-
}
|
684 |
-
|
685 |
-
return $this->authenticate('DescribeSpotPriceHistory', $opt, $this->hostname);
|
686 |
-
}
|
687 |
-
|
688 |
-
/**
|
689 |
-
*
|
690 |
-
* The DescribeRegions operation describes regions zones that are currently available to the account.
|
691 |
-
*
|
692 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
693 |
-
* <li><code>RegionName</code> - <code>string|array</code> - Optional - The optional list of regions to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
694 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Regions. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
695 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
696 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
697 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
698 |
-
* </ul></li>
|
699 |
-
* </ul></li>
|
700 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
701 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
702 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
703 |
-
*/
|
704 |
-
public function describe_regions($opt = null)
|
705 |
-
{
|
706 |
-
if (!$opt) $opt = array();
|
707 |
-
|
708 |
-
// Optional parameter
|
709 |
-
if (isset($opt['RegionName']))
|
710 |
-
{
|
711 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
712 |
-
'RegionName' => (is_array($opt['RegionName']) ? $opt['RegionName'] : array($opt['RegionName']))
|
713 |
-
)));
|
714 |
-
unset($opt['RegionName']);
|
715 |
-
}
|
716 |
-
|
717 |
-
// Optional parameter
|
718 |
-
if (isset($opt['Filter']))
|
719 |
-
{
|
720 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
721 |
-
'Filter' => $opt['Filter']
|
722 |
-
)));
|
723 |
-
unset($opt['Filter']);
|
724 |
-
}
|
725 |
-
|
726 |
-
return $this->authenticate('DescribeRegions', $opt, $this->hostname);
|
727 |
-
}
|
728 |
-
|
729 |
-
/**
|
730 |
-
*
|
731 |
-
* Creates a set of DHCP options that you can then associate with one or more VPCs, causing all existing and new instances
|
732 |
-
* that you launch in those VPCs to use the set of DHCP options. The following table lists the individual DHCP options you
|
733 |
-
* can specify. For more information about the options, go to <a
|
734 |
-
* href="http://www.ietf.org/rfc/rfc2132.txt">http://www.ietf.org/rfc/rfc2132.txt</a>
|
735 |
-
*
|
736 |
-
* @param array $dhcp_configuration (Required) A set of one or more DHCP configurations. <ul>
|
737 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
738 |
-
* <li><code>Key</code> - <code>string</code> - Optional - Contains the name of a DHCP option. </li>
|
739 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains a set of values for a DHCP option. Pass a string for a single value, or an indexed array for multiple values. </li>
|
740 |
-
* </ul></li>
|
741 |
-
* </ul>
|
742 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
743 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
744 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
745 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
746 |
-
*/
|
747 |
-
public function create_dhcp_options($dhcp_configuration, $opt = null)
|
748 |
-
{
|
749 |
-
if (!$opt) $opt = array();
|
750 |
-
|
751 |
-
// Required parameter
|
752 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
753 |
-
'DhcpConfiguration' => (is_array($dhcp_configuration) ? $dhcp_configuration : array($dhcp_configuration))
|
754 |
-
)));
|
755 |
-
|
756 |
-
return $this->authenticate('CreateDhcpOptions', $opt, $this->hostname);
|
757 |
-
}
|
758 |
-
|
759 |
-
/**
|
760 |
-
*
|
761 |
-
* Resets permission settings for the specified snapshot.
|
762 |
-
*
|
763 |
-
* @param string $snapshot_id (Required) The ID of the snapshot whose attribute is being reset.
|
764 |
-
* @param string $attribute (Required) The name of the attribute being reset. Available attribute names: <code>createVolumePermission</code>
|
765 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
766 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
767 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
768 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
769 |
-
*/
|
770 |
-
public function reset_snapshot_attribute($snapshot_id, $attribute, $opt = null)
|
771 |
-
{
|
772 |
-
if (!$opt) $opt = array();
|
773 |
-
$opt['SnapshotId'] = $snapshot_id;
|
774 |
-
$opt['Attribute'] = $attribute;
|
775 |
-
|
776 |
-
return $this->authenticate('ResetSnapshotAttribute', $opt, $this->hostname);
|
777 |
-
}
|
778 |
-
|
779 |
-
/**
|
780 |
-
*
|
781 |
-
* Deletes a route from a route table in a VPC. For more information about route tables, go to <a
|
782 |
-
* href="http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html">Route Tables</a> in the Amazon
|
783 |
-
* Virtual Private Cloud User Guide.
|
784 |
-
*
|
785 |
-
* @param string $route_table_id (Required) The ID of the route table where the route will be deleted.
|
786 |
-
* @param string $destination_cidr_block (Required) The CIDR range for the route you want to delete. The value you specify must exactly match the CIDR for the route you want to delete.
|
787 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
788 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
789 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
790 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
791 |
-
*/
|
792 |
-
public function delete_route($route_table_id, $destination_cidr_block, $opt = null)
|
793 |
-
{
|
794 |
-
if (!$opt) $opt = array();
|
795 |
-
$opt['RouteTableId'] = $route_table_id;
|
796 |
-
$opt['DestinationCidrBlock'] = $destination_cidr_block;
|
797 |
-
|
798 |
-
return $this->authenticate('DeleteRoute', $opt, $this->hostname);
|
799 |
-
}
|
800 |
-
|
801 |
-
/**
|
802 |
-
*
|
803 |
-
* Gives you information about your Internet gateways. You can filter the results to return information only about
|
804 |
-
* Internet gateways that match criteria you specify. For example, you could get information only about gateways with
|
805 |
-
* particular tags. The Internet gateway must match at least one of the specified values for it to be included in the
|
806 |
-
* results.
|
807 |
-
*
|
808 |
-
* You can specify multiple filters (e.g., the Internet gateway is attached to a particular VPC and is tagged with a
|
809 |
-
* particular value). The result includes information for a particular Internet gateway only if the gateway matches all
|
810 |
-
* your filters. If there's no match, no special message is returned; the response is simply empty.
|
811 |
-
*
|
812 |
-
* You can use wildcards with the filter values: an asterisk matches zero or more characters, and <code>?</code> matches
|
813 |
-
* exactly one character. You can escape special characters using a backslash before the character. For example, a value of
|
814 |
-
* <code>\*amazon\?\\</code> searches for the literal string <code>*amazon?\</code>.
|
815 |
-
*
|
816 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
817 |
-
* <li><code>InternetGatewayId</code> - <code>string|array</code> - Optional - One or more Internet gateway IDs. Pass a string for a single value, or an indexed array for multiple values. </li>
|
818 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Internet Gateways. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
819 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
820 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
821 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
822 |
-
* </ul></li>
|
823 |
-
* </ul></li>
|
824 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
825 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
826 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
827 |
-
*/
|
828 |
-
public function describe_internet_gateways($opt = null)
|
829 |
-
{
|
830 |
-
if (!$opt) $opt = array();
|
831 |
-
|
832 |
-
// Optional parameter
|
833 |
-
if (isset($opt['InternetGatewayId']))
|
834 |
-
{
|
835 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
836 |
-
'InternetGatewayId' => (is_array($opt['InternetGatewayId']) ? $opt['InternetGatewayId'] : array($opt['InternetGatewayId']))
|
837 |
-
)));
|
838 |
-
unset($opt['InternetGatewayId']);
|
839 |
-
}
|
840 |
-
|
841 |
-
// Optional parameter
|
842 |
-
if (isset($opt['Filter']))
|
843 |
-
{
|
844 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
845 |
-
'Filter' => $opt['Filter']
|
846 |
-
)));
|
847 |
-
unset($opt['Filter']);
|
848 |
-
}
|
849 |
-
|
850 |
-
return $this->authenticate('DescribeInternetGateways', $opt, $this->hostname);
|
851 |
-
}
|
852 |
-
|
853 |
-
/**
|
854 |
-
*
|
855 |
-
* The DescribeSecurityGroups operation returns information about security groups that you own.
|
856 |
-
*
|
857 |
-
* If you specify security group names, information about those security group is returned. Otherwise, information for all
|
858 |
-
* security group is returned. If you specify a group that does not exist, a fault is returned.
|
859 |
-
*
|
860 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
861 |
-
* <li><code>GroupName</code> - <code>string|array</code> - Optional - The optional list of Amazon EC2 security groups to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
862 |
-
* <li><code>GroupId</code> - <code>string|array</code> - Optional - Pass a string for a single value, or an indexed array for multiple values. </li>
|
863 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for SecurityGroups. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
864 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
865 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
866 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
867 |
-
* </ul></li>
|
868 |
-
* </ul></li>
|
869 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
870 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
871 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
872 |
-
*/
|
873 |
-
public function describe_security_groups($opt = null)
|
874 |
-
{
|
875 |
-
if (!$opt) $opt = array();
|
876 |
-
|
877 |
-
// Optional parameter
|
878 |
-
if (isset($opt['GroupName']))
|
879 |
-
{
|
880 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
881 |
-
'GroupName' => (is_array($opt['GroupName']) ? $opt['GroupName'] : array($opt['GroupName']))
|
882 |
-
)));
|
883 |
-
unset($opt['GroupName']);
|
884 |
-
}
|
885 |
-
|
886 |
-
// Optional parameter
|
887 |
-
if (isset($opt['GroupId']))
|
888 |
-
{
|
889 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
890 |
-
'GroupId' => (is_array($opt['GroupId']) ? $opt['GroupId'] : array($opt['GroupId']))
|
891 |
-
)));
|
892 |
-
unset($opt['GroupId']);
|
893 |
-
}
|
894 |
-
|
895 |
-
// Optional parameter
|
896 |
-
if (isset($opt['Filter']))
|
897 |
-
{
|
898 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
899 |
-
'Filter' => $opt['Filter']
|
900 |
-
)));
|
901 |
-
unset($opt['Filter']);
|
902 |
-
}
|
903 |
-
|
904 |
-
return $this->authenticate('DescribeSecurityGroups', $opt, $this->hostname);
|
905 |
-
}
|
906 |
-
|
907 |
-
/**
|
908 |
-
*
|
909 |
-
* Detaches a VPN gateway from a VPC. You do this if you're planning to turn off the VPC and not use it anymore. You can
|
910 |
-
* confirm a VPN gateway has been completely detached from a VPC by describing the VPN gateway (any attachments to the VPN
|
911 |
-
* gateway are also described).
|
912 |
-
*
|
913 |
-
* You must wait for the attachment's state to switch to detached before you can delete the VPC or attach a different VPC
|
914 |
-
* to the VPN gateway.
|
915 |
-
*
|
916 |
-
* @param string $vpn_gateway_id (Required) The ID of the VPN gateway to detach from the VPC.
|
917 |
-
* @param string $vpc_id (Required) The ID of the VPC to detach the VPN gateway from.
|
918 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
919 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
920 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
921 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
922 |
-
*/
|
923 |
-
public function detach_vpn_gateway($vpn_gateway_id, $vpc_id, $opt = null)
|
924 |
-
{
|
925 |
-
if (!$opt) $opt = array();
|
926 |
-
$opt['VpnGatewayId'] = $vpn_gateway_id;
|
927 |
-
$opt['VpcId'] = $vpc_id;
|
928 |
-
|
929 |
-
return $this->authenticate('DetachVpnGateway', $opt, $this->hostname);
|
930 |
-
}
|
931 |
-
|
932 |
-
/**
|
933 |
-
*
|
934 |
-
* The DeregisterImage operation deregisters an AMI. Once deregistered, instances of the AMI can no longer be launched.
|
935 |
-
*
|
936 |
-
* @param string $image_id (Required) The ID of the AMI to deregister.
|
937 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
938 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
939 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
940 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
941 |
-
*/
|
942 |
-
public function deregister_image($image_id, $opt = null)
|
943 |
-
{
|
944 |
-
if (!$opt) $opt = array();
|
945 |
-
$opt['ImageId'] = $image_id;
|
946 |
-
|
947 |
-
return $this->authenticate('DeregisterImage', $opt, $this->hostname);
|
948 |
-
}
|
949 |
-
|
950 |
-
/**
|
951 |
-
*
|
952 |
-
* Describes the data feed for Spot Instances.
|
953 |
-
*
|
954 |
-
* For conceptual information about Spot Instances, refer to the Amazon Elastic Compute Cloud Developer Guide or Amazon
|
955 |
-
* Elastic Compute Cloud User Guide.
|
956 |
-
*
|
957 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
958 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
959 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
960 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
961 |
-
*/
|
962 |
-
public function describe_spot_datafeed_subscription($opt = null)
|
963 |
-
{
|
964 |
-
if (!$opt) $opt = array();
|
965 |
-
|
966 |
-
return $this->authenticate('DescribeSpotDatafeedSubscription', $opt, $this->hostname);
|
967 |
-
}
|
968 |
-
|
969 |
-
/**
|
970 |
-
*
|
971 |
-
* Deletes tags from the specified Amazon EC2 resources.
|
972 |
-
*
|
973 |
-
* @param string|array $resource_id (Required) A list of one or more resource IDs. This could be the ID of an AMI, an instance, an EBS volume, or snapshot, etc. Pass a string for a single value, or an indexed array for multiple values.
|
974 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
975 |
-
* <li><code>Tag</code> - <code>array</code> - Optional - The tags to delete from the specified resources. Each tag item consists of a key-value pair. If a tag is specified without a value, the tag and all of its values are deleted. <ul>
|
976 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
977 |
-
* <li><code>Key</code> - <code>string</code> - Optional - The tag's key. </li>
|
978 |
-
* <li><code>Value</code> - <code>string</code> - Optional - The tag's value. </li>
|
979 |
-
* </ul></li>
|
980 |
-
* </ul></li>
|
981 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
982 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
983 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
984 |
-
*/
|
985 |
-
public function delete_tags($resource_id, $opt = null)
|
986 |
-
{
|
987 |
-
if (!$opt) $opt = array();
|
988 |
-
|
989 |
-
// Required parameter
|
990 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
991 |
-
'ResourceId' => (is_array($resource_id) ? $resource_id : array($resource_id))
|
992 |
-
)));
|
993 |
-
|
994 |
-
// Optional parameter
|
995 |
-
if (isset($opt['Tag']))
|
996 |
-
{
|
997 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
998 |
-
'Tag' => $opt['Tag']
|
999 |
-
)));
|
1000 |
-
unset($opt['Tag']);
|
1001 |
-
}
|
1002 |
-
|
1003 |
-
return $this->authenticate('DeleteTags', $opt, $this->hostname);
|
1004 |
-
}
|
1005 |
-
|
1006 |
-
/**
|
1007 |
-
*
|
1008 |
-
* Deletes a subnet from a VPC. You must terminate all running instances in the subnet before deleting it, otherwise
|
1009 |
-
* Amazon VPC returns an error.
|
1010 |
-
*
|
1011 |
-
* @param string $subnet_id (Required) The ID of the subnet you want to delete.
|
1012 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1013 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1014 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1015 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1016 |
-
*/
|
1017 |
-
public function delete_subnet($subnet_id, $opt = null)
|
1018 |
-
{
|
1019 |
-
if (!$opt) $opt = array();
|
1020 |
-
$opt['SubnetId'] = $subnet_id;
|
1021 |
-
|
1022 |
-
return $this->authenticate('DeleteSubnet', $opt, $this->hostname);
|
1023 |
-
}
|
1024 |
-
|
1025 |
-
/**
|
1026 |
-
*
|
1027 |
-
* Creates a new VPN gateway. A VPN gateway is the VPC-side endpoint for your VPN connection. You can create a VPN gateway
|
1028 |
-
* before creating the VPC itself.
|
1029 |
-
*
|
1030 |
-
* @param string $type (Required) The type of VPN connection this VPN gateway supports.
|
1031 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1032 |
-
* <li><code>AvailabilityZone</code> - <code>string</code> - Optional - The Availability Zone in which to create the VPN gateway. </li>
|
1033 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1034 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1035 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1036 |
-
*/
|
1037 |
-
public function create_vpn_gateway($type, $opt = null)
|
1038 |
-
{
|
1039 |
-
if (!$opt) $opt = array();
|
1040 |
-
$opt['Type'] = $type;
|
1041 |
-
|
1042 |
-
return $this->authenticate('CreateVpnGateway', $opt, $this->hostname);
|
1043 |
-
}
|
1044 |
-
|
1045 |
-
/**
|
1046 |
-
*
|
1047 |
-
* Deletes a VPN gateway. Use this when you want to delete a VPC and all its associated components because you no longer
|
1048 |
-
* need them. We recommend that before you delete a VPN gateway, you detach it from the VPC and delete the VPN connection.
|
1049 |
-
* Note that you don't need to delete the VPN gateway if you just want to delete and re-create the VPN connection between
|
1050 |
-
* your VPC and data center.
|
1051 |
-
*
|
1052 |
-
* @param string $vpn_gateway_id (Required) The ID of the VPN gateway to delete.
|
1053 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1054 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1055 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1056 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1057 |
-
*/
|
1058 |
-
public function delete_vpn_gateway($vpn_gateway_id, $opt = null)
|
1059 |
-
{
|
1060 |
-
if (!$opt) $opt = array();
|
1061 |
-
$opt['VpnGatewayId'] = $vpn_gateway_id;
|
1062 |
-
|
1063 |
-
return $this->authenticate('DeleteVpnGateway', $opt, $this->hostname);
|
1064 |
-
}
|
1065 |
-
|
1066 |
-
/**
|
1067 |
-
*
|
1068 |
-
* Attach a previously created volume to a running instance.
|
1069 |
-
*
|
1070 |
-
* @param string $volume_id (Required) The ID of the Amazon EBS volume. The volume and instance must be within the same Availability Zone and the instance must be running.
|
1071 |
-
* @param string $instance_id (Required) The ID of the instance to which the volume attaches. The volume and instance must be within the same Availability Zone and the instance must be running.
|
1072 |
-
* @param string $device (Required) Specifies how the device is exposed to the instance (e.g., <code>/dev/sdh</code>).
|
1073 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1074 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1075 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1076 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1077 |
-
*/
|
1078 |
-
public function attach_volume($volume_id, $instance_id, $device, $opt = null)
|
1079 |
-
{
|
1080 |
-
if (!$opt) $opt = array();
|
1081 |
-
$opt['VolumeId'] = $volume_id;
|
1082 |
-
$opt['InstanceId'] = $instance_id;
|
1083 |
-
$opt['Device'] = $device;
|
1084 |
-
|
1085 |
-
return $this->authenticate('AttachVolume', $opt, $this->hostname);
|
1086 |
-
}
|
1087 |
-
|
1088 |
-
/**
|
1089 |
-
*
|
1090 |
-
* Provides details of a user's registered licenses. Zero or more IDs may be specified on the call. When one or more
|
1091 |
-
* license IDs are specified, only data for the specified IDs are returned.
|
1092 |
-
*
|
1093 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1094 |
-
* <li><code>LicenseId</code> - <code>string|array</code> - Optional - Specifies the license registration for which details are to be returned. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1095 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Licenses. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1096 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1097 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1098 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1099 |
-
* </ul></li>
|
1100 |
-
* </ul></li>
|
1101 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1102 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1103 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1104 |
-
*/
|
1105 |
-
public function describe_licenses($opt = null)
|
1106 |
-
{
|
1107 |
-
if (!$opt) $opt = array();
|
1108 |
-
|
1109 |
-
// Optional parameter
|
1110 |
-
if (isset($opt['LicenseId']))
|
1111 |
-
{
|
1112 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1113 |
-
'LicenseId' => (is_array($opt['LicenseId']) ? $opt['LicenseId'] : array($opt['LicenseId']))
|
1114 |
-
)));
|
1115 |
-
unset($opt['LicenseId']);
|
1116 |
-
}
|
1117 |
-
|
1118 |
-
// Optional parameter
|
1119 |
-
if (isset($opt['Filter']))
|
1120 |
-
{
|
1121 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1122 |
-
'Filter' => $opt['Filter']
|
1123 |
-
)));
|
1124 |
-
unset($opt['Filter']);
|
1125 |
-
}
|
1126 |
-
|
1127 |
-
return $this->authenticate('DescribeLicenses', $opt, $this->hostname);
|
1128 |
-
}
|
1129 |
-
|
1130 |
-
/**
|
1131 |
-
*
|
1132 |
-
* Activates a specific number of licenses for a 90-day period. Activations can be done against a specific license ID.
|
1133 |
-
*
|
1134 |
-
* @param string $license_id (Required) Specifies the ID for the specific license to activate against.
|
1135 |
-
* @param integer $capacity (Required) Specifies the additional number of licenses to activate.
|
1136 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1137 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1138 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1139 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1140 |
-
*/
|
1141 |
-
public function activate_license($license_id, $capacity, $opt = null)
|
1142 |
-
{
|
1143 |
-
if (!$opt) $opt = array();
|
1144 |
-
$opt['LicenseId'] = $license_id;
|
1145 |
-
$opt['Capacity'] = $capacity;
|
1146 |
-
|
1147 |
-
return $this->authenticate('ActivateLicense', $opt, $this->hostname);
|
1148 |
-
}
|
1149 |
-
|
1150 |
-
/**
|
1151 |
-
*
|
1152 |
-
* The ResetImageAttribute operation resets an attribute of an AMI to its default value.
|
1153 |
-
*
|
1154 |
-
* The productCodes attribute cannot be reset.
|
1155 |
-
*
|
1156 |
-
* @param string $image_id (Required) The ID of the AMI whose attribute is being reset.
|
1157 |
-
* @param string $attribute (Required) The name of the attribute being reset. Available attribute names: <code>launchPermission</code>
|
1158 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1159 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1160 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1161 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1162 |
-
*/
|
1163 |
-
public function reset_image_attribute($image_id, $attribute, $opt = null)
|
1164 |
-
{
|
1165 |
-
if (!$opt) $opt = array();
|
1166 |
-
$opt['ImageId'] = $image_id;
|
1167 |
-
$opt['Attribute'] = $attribute;
|
1168 |
-
|
1169 |
-
return $this->authenticate('ResetImageAttribute', $opt, $this->hostname);
|
1170 |
-
}
|
1171 |
-
|
1172 |
-
/**
|
1173 |
-
*
|
1174 |
-
* Gives you information about your VPN connections.
|
1175 |
-
*
|
1176 |
-
* We strongly recommend you use HTTPS when calling this operation because the response contains sensitive cryptographic
|
1177 |
-
* information for configuring your customer gateway.
|
1178 |
-
*
|
1179 |
-
* You can filter the results to return information only about VPN connections that match criteria you specify. For
|
1180 |
-
* example, you could ask to get information about a particular VPN connection (or all) only if the VPN's state is pending
|
1181 |
-
* or available. You can specify multiple filters (e.g., the VPN connection is associated with a particular VPN gateway,
|
1182 |
-
* and the gateway's state is pending or available). The result includes information for a particular VPN connection only
|
1183 |
-
* if the VPN connection matches all your filters. If there's no match, no special message is returned; the response is
|
1184 |
-
* simply empty. The following table shows the available filters.
|
1185 |
-
*
|
1186 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1187 |
-
* <li><code>VpnConnectionId</code> - <code>string|array</code> - Optional - A VPN connection ID. More than one may be specified per request. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1188 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for VPN Connections. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1189 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1190 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1191 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1192 |
-
* </ul></li>
|
1193 |
-
* </ul></li>
|
1194 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1195 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1196 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1197 |
-
*/
|
1198 |
-
public function describe_vpn_connections($opt = null)
|
1199 |
-
{
|
1200 |
-
if (!$opt) $opt = array();
|
1201 |
-
|
1202 |
-
// Optional parameter
|
1203 |
-
if (isset($opt['VpnConnectionId']))
|
1204 |
-
{
|
1205 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1206 |
-
'VpnConnectionId' => (is_array($opt['VpnConnectionId']) ? $opt['VpnConnectionId'] : array($opt['VpnConnectionId']))
|
1207 |
-
)));
|
1208 |
-
unset($opt['VpnConnectionId']);
|
1209 |
-
}
|
1210 |
-
|
1211 |
-
// Optional parameter
|
1212 |
-
if (isset($opt['Filter']))
|
1213 |
-
{
|
1214 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1215 |
-
'Filter' => $opt['Filter']
|
1216 |
-
)));
|
1217 |
-
unset($opt['Filter']);
|
1218 |
-
}
|
1219 |
-
|
1220 |
-
return $this->authenticate('DescribeVpnConnections', $opt, $this->hostname);
|
1221 |
-
}
|
1222 |
-
|
1223 |
-
/**
|
1224 |
-
*
|
1225 |
-
* Create a snapshot of the volume identified by volume ID. A volume does not have to be detached at the time the snapshot
|
1226 |
-
* is taken.
|
1227 |
-
*
|
1228 |
-
* Snapshot creation requires that the system is in a consistent state. For instance, this means that if taking a snapshot
|
1229 |
-
* of a database, the tables must be read-only locked to ensure that the snapshot will not contain a corrupted version of
|
1230 |
-
* the database. Therefore, be careful when using this API to ensure that the system remains in the consistent state until
|
1231 |
-
* the create snapshot status has returned.
|
1232 |
-
*
|
1233 |
-
* @param string $volume_id (Required) The ID of the volume from which to create the snapshot.
|
1234 |
-
* @param string $description (Required) The description for the new snapshot.
|
1235 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1236 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1237 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1238 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1239 |
-
*/
|
1240 |
-
public function create_snapshot($volume_id, $description, $opt = null)
|
1241 |
-
{
|
1242 |
-
if (!$opt) $opt = array();
|
1243 |
-
$opt['VolumeId'] = $volume_id;
|
1244 |
-
$opt['Description'] = $description;
|
1245 |
-
|
1246 |
-
return $this->authenticate('CreateSnapshot', $opt, $this->hostname);
|
1247 |
-
}
|
1248 |
-
|
1249 |
-
/**
|
1250 |
-
*
|
1251 |
-
* Deletes a previously created volume. Once successfully deleted, a new volume can be created with the same name.
|
1252 |
-
*
|
1253 |
-
* @param string $volume_id (Required) The ID of the EBS volume to delete.
|
1254 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1255 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1256 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1257 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1258 |
-
*/
|
1259 |
-
public function delete_volume($volume_id, $opt = null)
|
1260 |
-
{
|
1261 |
-
if (!$opt) $opt = array();
|
1262 |
-
$opt['VolumeId'] = $volume_id;
|
1263 |
-
|
1264 |
-
return $this->authenticate('DeleteVolume', $opt, $this->hostname);
|
1265 |
-
}
|
1266 |
-
|
1267 |
-
/**
|
1268 |
-
*
|
1269 |
-
* Gives you information about your VPCs. You can filter the results to return information only about VPCs that match
|
1270 |
-
* criteria you specify.
|
1271 |
-
*
|
1272 |
-
* For example, you could ask to get information about a particular VPC or VPCs (or all your VPCs) only if the VPC's state
|
1273 |
-
* is available. You can specify multiple filters (e.g., the VPC uses one of several sets of DHCP options, and the VPC's
|
1274 |
-
* state is available). The result includes information for a particular VPC only if the VPC matches all your filters.
|
1275 |
-
*
|
1276 |
-
* If there's no match, no special message is returned; the response is simply empty. The following table shows the
|
1277 |
-
* available filters.
|
1278 |
-
*
|
1279 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1280 |
-
* <li><code>VpcId</code> - <code>string|array</code> - Optional - The ID of a VPC you want information about. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1281 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for VPCs. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1282 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1283 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1284 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1285 |
-
* </ul></li>
|
1286 |
-
* </ul></li>
|
1287 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1288 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1289 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1290 |
-
*/
|
1291 |
-
public function describe_vpcs($opt = null)
|
1292 |
-
{
|
1293 |
-
if (!$opt) $opt = array();
|
1294 |
-
|
1295 |
-
// Optional parameter
|
1296 |
-
if (isset($opt['VpcId']))
|
1297 |
-
{
|
1298 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1299 |
-
'VpcId' => (is_array($opt['VpcId']) ? $opt['VpcId'] : array($opt['VpcId']))
|
1300 |
-
)));
|
1301 |
-
unset($opt['VpcId']);
|
1302 |
-
}
|
1303 |
-
|
1304 |
-
// Optional parameter
|
1305 |
-
if (isset($opt['Filter']))
|
1306 |
-
{
|
1307 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1308 |
-
'Filter' => $opt['Filter']
|
1309 |
-
)));
|
1310 |
-
unset($opt['Filter']);
|
1311 |
-
}
|
1312 |
-
|
1313 |
-
return $this->authenticate('DescribeVpcs', $opt, $this->hostname);
|
1314 |
-
}
|
1315 |
-
|
1316 |
-
/**
|
1317 |
-
*
|
1318 |
-
* Deactivates a specific number of licenses. Deactivations can be done against a specific license ID after they have
|
1319 |
-
* persisted for at least a 90-day period.
|
1320 |
-
*
|
1321 |
-
* @param string $license_id (Required) Specifies the ID for the specific license to deactivate against.
|
1322 |
-
* @param integer $capacity (Required) Specifies the amount of capacity to deactivate against the license.
|
1323 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1324 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1325 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1326 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1327 |
-
*/
|
1328 |
-
public function deactivate_license($license_id, $capacity, $opt = null)
|
1329 |
-
{
|
1330 |
-
if (!$opt) $opt = array();
|
1331 |
-
$opt['LicenseId'] = $license_id;
|
1332 |
-
$opt['Capacity'] = $capacity;
|
1333 |
-
|
1334 |
-
return $this->authenticate('DeactivateLicense', $opt, $this->hostname);
|
1335 |
-
}
|
1336 |
-
|
1337 |
-
/**
|
1338 |
-
*
|
1339 |
-
* The AssociateAddress operation associates an elastic IP address with an instance.
|
1340 |
-
*
|
1341 |
-
* If the IP address is currently assigned to another instance, the IP address is assigned to the new instance. This is an
|
1342 |
-
* idempotent operation. If you enter it more than once, Amazon EC2 does not return an error.
|
1343 |
-
*
|
1344 |
-
* @param string $instance_id (Required) The instance to associate with the IP address.
|
1345 |
-
* @param string $public_ip (Required) IP address that you are assigning to the instance.
|
1346 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1347 |
-
* <li><code>AllocationId</code> - <code>string</code> - Optional - The allocation ID that AWS returned when you allocated the elastic IP address for use with Amazon VPC. </li>
|
1348 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1349 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1350 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1351 |
-
*/
|
1352 |
-
public function associate_address($instance_id, $public_ip, $opt = null)
|
1353 |
-
{
|
1354 |
-
if (!$opt) $opt = array();
|
1355 |
-
$opt['InstanceId'] = $instance_id;
|
1356 |
-
$opt['PublicIp'] = $public_ip;
|
1357 |
-
|
1358 |
-
return $this->authenticate('AssociateAddress', $opt, $this->hostname);
|
1359 |
-
}
|
1360 |
-
|
1361 |
-
/**
|
1362 |
-
*
|
1363 |
-
* Deletes a customer gateway. You must delete the VPN connection before deleting the customer gateway.
|
1364 |
-
*
|
1365 |
-
* You can have a single active customer gateway per AWS account (active means that you've created a VPN connection with
|
1366 |
-
* that customer gateway). AWS might delete any customer gateway you leave inactive for an extended period of time.
|
1367 |
-
*
|
1368 |
-
* @param string $customer_gateway_id (Required) The ID of the customer gateway to delete.
|
1369 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1370 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1371 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1372 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1373 |
-
*/
|
1374 |
-
public function delete_customer_gateway($customer_gateway_id, $opt = null)
|
1375 |
-
{
|
1376 |
-
if (!$opt) $opt = array();
|
1377 |
-
$opt['CustomerGatewayId'] = $customer_gateway_id;
|
1378 |
-
|
1379 |
-
return $this->authenticate('DeleteCustomerGateway', $opt, $this->hostname);
|
1380 |
-
}
|
1381 |
-
|
1382 |
-
/**
|
1383 |
-
*
|
1384 |
-
* Creates an entry (i.e., rule) in a network ACL with a rule number you specify. Each network ACL has a set of numbered
|
1385 |
-
* ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out
|
1386 |
-
* of a subnet associated with the ACL, Amazon VPC processes the entries in the ACL according to the rule numbers, in
|
1387 |
-
* ascending order.
|
1388 |
-
*
|
1389 |
-
* <b>Important: </b> We recommend that you leave room between the rules (e.g., 100, 110, 120, etc.), and not number them
|
1390 |
-
* sequentially (101, 102, 103, etc.). This allows you to easily add a new rule between existing ones without having to
|
1391 |
-
* renumber the rules.
|
1392 |
-
*
|
1393 |
-
* After you add an entry, you can't modify it; you must either replace it, or create a new entry and delete the old one.
|
1394 |
-
*
|
1395 |
-
* For more information about network ACLs, go to Network ACLs in the Amazon Virtual Private Cloud User Guide.
|
1396 |
-
*
|
1397 |
-
* @param string $network_acl_id (Required) ID of the ACL where the entry will be created.
|
1398 |
-
* @param integer $rule_number (Required) Rule number to assign to the entry (e.g., 100). ACL entries are processed in ascending order by rule number.
|
1399 |
-
* @param string $protocol (Required) IP protocol the rule applies to. Valid Values: <code>tcp</code>, <code>udp</code>, <code>icmp</code> or an IP protocol number.
|
1400 |
-
* @param string $rule_action (Required) Whether to allow or deny traffic that matches the rule. [Allowed values: <code>allow</code>, <code>deny</code>]
|
1401 |
-
* @param boolean $egress (Required) Whether this rule applies to egress traffic from the subnet (<code>true</code>) or ingress traffic to the subnet (<code>false</code>).
|
1402 |
-
* @param string $cidr_block (Required) The CIDR range to allow or deny, in CIDR notation (e.g., <code>172.16.0.0/24</code>).
|
1403 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1404 |
-
* <li><code>Icmp</code> - <code>array</code> - Optional - ICMP values. <ul>
|
1405 |
-
* <li><code>Type</code> - <code>integer</code> - Optional - For the ICMP protocol, the ICMP type. A value of <code>-1</code> is a wildcard meaning all types. Required if specifying <code>icmp</code> for the protocol. </li>
|
1406 |
-
* <li><code>Code</code> - <code>integer</code> - Optional - For the ICMP protocol, the ICMP code. A value of <code>-1</code> is a wildcard meaning all codes. Required if specifying <code>icmp</code> for the protocol. </li></ul></li>
|
1407 |
-
* <li><code>PortRange</code> - <code>array</code> - Optional - Port ranges. <ul>
|
1408 |
-
* <li><code>From</code> - <code>integer</code> - Optional - The first port in the range. Required if specifying <code>tcp</code> or <code>udp</code> for the protocol. </li>
|
1409 |
-
* <li><code>To</code> - <code>integer</code> - Optional - The last port in the range. Required if specifying <code>tcp</code> or <code>udp</code> for the protocol. </li></ul></li>
|
1410 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1411 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1412 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1413 |
-
*/
|
1414 |
-
public function create_network_acl_entry($network_acl_id, $rule_number, $protocol, $rule_action, $egress, $cidr_block, $opt = null)
|
1415 |
-
{
|
1416 |
-
if (!$opt) $opt = array();
|
1417 |
-
$opt['NetworkAclId'] = $network_acl_id;
|
1418 |
-
$opt['RuleNumber'] = $rule_number;
|
1419 |
-
$opt['Protocol'] = $protocol;
|
1420 |
-
$opt['RuleAction'] = $rule_action;
|
1421 |
-
$opt['Egress'] = $egress;
|
1422 |
-
$opt['CidrBlock'] = $cidr_block;
|
1423 |
-
|
1424 |
-
// Optional parameter
|
1425 |
-
if (isset($opt['Icmp']))
|
1426 |
-
{
|
1427 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1428 |
-
'Icmp' => $opt['Icmp']
|
1429 |
-
)));
|
1430 |
-
unset($opt['Icmp']);
|
1431 |
-
}
|
1432 |
-
|
1433 |
-
// Optional parameter
|
1434 |
-
if (isset($opt['PortRange']))
|
1435 |
-
{
|
1436 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1437 |
-
'PortRange' => $opt['PortRange']
|
1438 |
-
)));
|
1439 |
-
unset($opt['PortRange']);
|
1440 |
-
}
|
1441 |
-
|
1442 |
-
return $this->authenticate('CreateNetworkAclEntry', $opt, $this->hostname);
|
1443 |
-
}
|
1444 |
-
|
1445 |
-
/**
|
1446 |
-
*
|
1447 |
-
* Detaches an Internet gateway from a VPC, disabling connectivity between the Internet and the VPC. The VPC must not
|
1448 |
-
* contain any running instances with elastic IP addresses. For more information about your VPC and Internet gateway, go to
|
1449 |
-
* Amazon Virtual Private Cloud User Guide.
|
1450 |
-
*
|
1451 |
-
* For more information about Amazon Virtual Private Cloud and Internet gateways, go to the Amazon Virtual Private Cloud
|
1452 |
-
* User Guide.
|
1453 |
-
*
|
1454 |
-
* @param string $internet_gateway_id (Required) The ID of the Internet gateway to detach.
|
1455 |
-
* @param string $vpc_id (Required) The ID of the VPC.
|
1456 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1457 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1458 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1459 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1460 |
-
*/
|
1461 |
-
public function detach_internet_gateway($internet_gateway_id, $vpc_id, $opt = null)
|
1462 |
-
{
|
1463 |
-
if (!$opt) $opt = array();
|
1464 |
-
$opt['InternetGatewayId'] = $internet_gateway_id;
|
1465 |
-
$opt['VpcId'] = $vpc_id;
|
1466 |
-
|
1467 |
-
return $this->authenticate('DetachInternetGateway', $opt, $this->hostname);
|
1468 |
-
}
|
1469 |
-
|
1470 |
-
/**
|
1471 |
-
*
|
1472 |
-
* Creates a new route table within a VPC. After you create a new route table, you can add routes and associate the table
|
1473 |
-
* with a subnet. For more information about route tables, go to <a
|
1474 |
-
* href="http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html">Route Tables</a> in the Amazon
|
1475 |
-
* Virtual Private Cloud User Guide.
|
1476 |
-
*
|
1477 |
-
* @param string $vpc_id (Required) The ID of the VPC where the route table will be created.
|
1478 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1479 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1480 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1481 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1482 |
-
*/
|
1483 |
-
public function create_route_table($vpc_id, $opt = null)
|
1484 |
-
{
|
1485 |
-
if (!$opt) $opt = array();
|
1486 |
-
$opt['VpcId'] = $vpc_id;
|
1487 |
-
|
1488 |
-
return $this->authenticate('CreateRouteTable', $opt, $this->hostname);
|
1489 |
-
}
|
1490 |
-
|
1491 |
-
/**
|
1492 |
-
*
|
1493 |
-
* Describes the status of the indicated volume or, in lieu of any specified, all volumes belonging to the caller. Volumes
|
1494 |
-
* that have been deleted are not described.
|
1495 |
-
*
|
1496 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1497 |
-
* <li><code>VolumeId</code> - <code>string|array</code> - Optional - The optional list of EBS volumes to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1498 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Volumes. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1499 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1500 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1501 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1502 |
-
* </ul></li>
|
1503 |
-
* </ul></li>
|
1504 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1505 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1506 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1507 |
-
*/
|
1508 |
-
public function describe_volumes($opt = null)
|
1509 |
-
{
|
1510 |
-
if (!$opt) $opt = array();
|
1511 |
-
|
1512 |
-
// Optional parameter
|
1513 |
-
if (isset($opt['VolumeId']))
|
1514 |
-
{
|
1515 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1516 |
-
'VolumeId' => (is_array($opt['VolumeId']) ? $opt['VolumeId'] : array($opt['VolumeId']))
|
1517 |
-
)));
|
1518 |
-
unset($opt['VolumeId']);
|
1519 |
-
}
|
1520 |
-
|
1521 |
-
// Optional parameter
|
1522 |
-
if (isset($opt['Filter']))
|
1523 |
-
{
|
1524 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1525 |
-
'Filter' => $opt['Filter']
|
1526 |
-
)));
|
1527 |
-
unset($opt['Filter']);
|
1528 |
-
}
|
1529 |
-
|
1530 |
-
return $this->authenticate('DescribeVolumes', $opt, $this->hostname);
|
1531 |
-
}
|
1532 |
-
|
1533 |
-
/**
|
1534 |
-
*
|
1535 |
-
* Gives you information about your route tables. You can filter the results to return information only about tables that
|
1536 |
-
* match criteria you specify. For example, you could get information only about a table associated with a particular
|
1537 |
-
* subnet. You can specify multiple values for the filter. The table must match at least one of the specified values for it
|
1538 |
-
* to be included in the results.
|
1539 |
-
*
|
1540 |
-
* You can specify multiple filters (e.g., the table has a particular route, and is associated with a particular subnet).
|
1541 |
-
* The result includes information for a particular table only if it matches all your filters. If there's no match, no
|
1542 |
-
* special message is returned; the response is simply empty.
|
1543 |
-
*
|
1544 |
-
* You can use wildcards with the filter values: an asterisk matches zero or more characters, and <code>?</code> matches
|
1545 |
-
* exactly one character. You can escape special characters using a backslash before the character. For example, a value of
|
1546 |
-
* <code>\*amazon\?\\</code> searches for the literal string <code>*amazon?\</code>.
|
1547 |
-
*
|
1548 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1549 |
-
* <li><code>RouteTableId</code> - <code>string|array</code> - Optional - One or more route table IDs. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1550 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Route Tables. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1551 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1552 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1553 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1554 |
-
* </ul></li>
|
1555 |
-
* </ul></li>
|
1556 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1557 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1558 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1559 |
-
*/
|
1560 |
-
public function describe_route_tables($opt = null)
|
1561 |
-
{
|
1562 |
-
if (!$opt) $opt = array();
|
1563 |
-
|
1564 |
-
// Optional parameter
|
1565 |
-
if (isset($opt['RouteTableId']))
|
1566 |
-
{
|
1567 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1568 |
-
'RouteTableId' => (is_array($opt['RouteTableId']) ? $opt['RouteTableId'] : array($opt['RouteTableId']))
|
1569 |
-
)));
|
1570 |
-
unset($opt['RouteTableId']);
|
1571 |
-
}
|
1572 |
-
|
1573 |
-
// Optional parameter
|
1574 |
-
if (isset($opt['Filter']))
|
1575 |
-
{
|
1576 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1577 |
-
'Filter' => $opt['Filter']
|
1578 |
-
)));
|
1579 |
-
unset($opt['Filter']);
|
1580 |
-
}
|
1581 |
-
|
1582 |
-
return $this->authenticate('DescribeRouteTables', $opt, $this->hostname);
|
1583 |
-
}
|
1584 |
-
|
1585 |
-
/**
|
1586 |
-
*
|
1587 |
-
* Enables monitoring for a running instance.
|
1588 |
-
*
|
1589 |
-
* @param string|array $instance_id (Required) The list of Amazon EC2 instances on which to enable monitoring. Pass a string for a single value, or an indexed array for multiple values.
|
1590 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1591 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1592 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1593 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1594 |
-
*/
|
1595 |
-
public function monitor_instances($instance_id, $opt = null)
|
1596 |
-
{
|
1597 |
-
if (!$opt) $opt = array();
|
1598 |
-
|
1599 |
-
// Required parameter
|
1600 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1601 |
-
'InstanceId' => (is_array($instance_id) ? $instance_id : array($instance_id))
|
1602 |
-
)));
|
1603 |
-
|
1604 |
-
return $this->authenticate('MonitorInstances', $opt, $this->hostname);
|
1605 |
-
}
|
1606 |
-
|
1607 |
-
/**
|
1608 |
-
*
|
1609 |
-
* Gives you information about one or more sets of DHCP options. You can specify one or more DHCP options set IDs, or no
|
1610 |
-
* IDs (to describe all your sets of DHCP options). The returned information consists of:
|
1611 |
-
*
|
1612 |
-
* <ul> <li> The DHCP options set ID </li>
|
1613 |
-
*
|
1614 |
-
* <li> The options </li>
|
1615 |
-
*
|
1616 |
-
* </ul>
|
1617 |
-
*
|
1618 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1619 |
-
* <li><code>DhcpOptionsId</code> - <code>string|array</code> - Optional - Pass a string for a single value, or an indexed array for multiple values. </li>
|
1620 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for DhcpOptions. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1621 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1622 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1623 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1624 |
-
* </ul></li>
|
1625 |
-
* </ul></li>
|
1626 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1627 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1628 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1629 |
-
*/
|
1630 |
-
public function describe_dhcp_options($opt = null)
|
1631 |
-
{
|
1632 |
-
if (!$opt) $opt = array();
|
1633 |
-
|
1634 |
-
// Optional parameter
|
1635 |
-
if (isset($opt['DhcpOptionsId']))
|
1636 |
-
{
|
1637 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1638 |
-
'DhcpOptionsId' => (is_array($opt['DhcpOptionsId']) ? $opt['DhcpOptionsId'] : array($opt['DhcpOptionsId']))
|
1639 |
-
)));
|
1640 |
-
unset($opt['DhcpOptionsId']);
|
1641 |
-
}
|
1642 |
-
|
1643 |
-
// Optional parameter
|
1644 |
-
if (isset($opt['Filter']))
|
1645 |
-
{
|
1646 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1647 |
-
'Filter' => $opt['Filter']
|
1648 |
-
)));
|
1649 |
-
unset($opt['Filter']);
|
1650 |
-
}
|
1651 |
-
|
1652 |
-
return $this->authenticate('DescribeDhcpOptions', $opt, $this->hostname);
|
1653 |
-
}
|
1654 |
-
|
1655 |
-
/**
|
1656 |
-
*
|
1657 |
-
* Gives you information about the network ACLs in your VPC. You can filter the results to return information only about
|
1658 |
-
* ACLs that match criteria you specify. For example, you could get information only the ACL associated with a particular
|
1659 |
-
* subnet. The ACL must match at least one of the specified values for it to be included in the results.
|
1660 |
-
*
|
1661 |
-
* You can specify multiple filters (e.g., the ACL is associated with a particular subnet and has an egress entry that
|
1662 |
-
* denies traffic to a particular port). The result includes information for a particular ACL only if it matches all your
|
1663 |
-
* filters. If there's no match, no special message is returned; the response is simply empty.
|
1664 |
-
*
|
1665 |
-
* You can use wildcards with the filter values: an asterisk matches zero or more characters, and <code>?</code> matches
|
1666 |
-
* exactly one character. You can escape special characters using a backslash before the character. For example, a value of
|
1667 |
-
* <code>\*amazon\?\\</code> searches for the literal string <code>*amazon?\</code>.
|
1668 |
-
*
|
1669 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1670 |
-
* <li><code>NetworkAclId</code> - <code>string|array</code> - Optional - One or more network ACL IDs. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1671 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for Network ACLs. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1672 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1673 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1674 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1675 |
-
* </ul></li>
|
1676 |
-
* </ul></li>
|
1677 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1678 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1679 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1680 |
-
*/
|
1681 |
-
public function describe_network_acls($opt = null)
|
1682 |
-
{
|
1683 |
-
if (!$opt) $opt = array();
|
1684 |
-
|
1685 |
-
// Optional parameter
|
1686 |
-
if (isset($opt['NetworkAclId']))
|
1687 |
-
{
|
1688 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1689 |
-
'NetworkAclId' => (is_array($opt['NetworkAclId']) ? $opt['NetworkAclId'] : array($opt['NetworkAclId']))
|
1690 |
-
)));
|
1691 |
-
unset($opt['NetworkAclId']);
|
1692 |
-
}
|
1693 |
-
|
1694 |
-
// Optional parameter
|
1695 |
-
if (isset($opt['Filter']))
|
1696 |
-
{
|
1697 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1698 |
-
'Filter' => $opt['Filter']
|
1699 |
-
)));
|
1700 |
-
unset($opt['Filter']);
|
1701 |
-
}
|
1702 |
-
|
1703 |
-
return $this->authenticate('DescribeNetworkAcls', $opt, $this->hostname);
|
1704 |
-
}
|
1705 |
-
|
1706 |
-
/**
|
1707 |
-
*
|
1708 |
-
* The DescribeBundleTasks operation describes in-progress and recent bundle tasks. Complete and failed tasks are removed
|
1709 |
-
* from the list a short time after completion. If no bundle ids are given, all bundle tasks are returned.
|
1710 |
-
*
|
1711 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1712 |
-
* <li><code>BundleId</code> - <code>string|array</code> - Optional - The list of bundle task IDs to describe. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1713 |
-
* <li><code>Filter</code> - <code>array</code> - Optional - A list of filters used to match properties for BundleTasks. For a complete reference to the available filter keys for this operation, see the Amazon EC2 API reference. <ul>
|
1714 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1715 |
-
* <li><code>Name</code> - <code>string</code> - Optional - Specifies the name of the filter. </li>
|
1716 |
-
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains one or more values for the filter. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1717 |
-
* </ul></li>
|
1718 |
-
* </ul></li>
|
1719 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1720 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1721 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1722 |
-
*/
|
1723 |
-
public function describe_bundle_tasks($opt = null)
|
1724 |
-
{
|
1725 |
-
if (!$opt) $opt = array();
|
1726 |
-
|
1727 |
-
// Optional parameter
|
1728 |
-
if (isset($opt['BundleId']))
|
1729 |
-
{
|
1730 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1731 |
-
'BundleId' => (is_array($opt['BundleId']) ? $opt['BundleId'] : array($opt['BundleId']))
|
1732 |
-
)));
|
1733 |
-
unset($opt['BundleId']);
|
1734 |
-
}
|
1735 |
-
|
1736 |
-
// Optional parameter
|
1737 |
-
if (isset($opt['Filter']))
|
1738 |
-
{
|
1739 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1740 |
-
'Filter' => $opt['Filter']
|
1741 |
-
)));
|
1742 |
-
unset($opt['Filter']);
|
1743 |
-
}
|
1744 |
-
|
1745 |
-
return $this->authenticate('DescribeBundleTasks', $opt, $this->hostname);
|
1746 |
-
}
|
1747 |
-
|
1748 |
-
/**
|
1749 |
-
*
|
1750 |
-
* The RevokeSecurityGroupIngress operation revokes permissions from a security group. The permissions used to revoke must
|
1751 |
-
* be specified using the same values used to grant the permissions.
|
1752 |
-
*
|
1753 |
-
* Permissions are specified by IP protocol (TCP, UDP, or ICMP), the source of the request (by IP range or an Amazon EC2
|
1754 |
-
* user-group pair), the source and destination port ranges (for TCP and UDP), and the ICMP codes and types (for ICMP).
|
1755 |
-
*
|
1756 |
-
* Permission changes are quickly propagated to instances within the security group. However, depending on the number of
|
1757 |
-
* instances in the group, a small delay might occur.
|
1758 |
-
*
|
1759 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1760 |
-
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the standard (EC2) security group to modify. The group must belong to your account. Can be used instead of GroupID for standard (EC2) security groups. </li>
|
1761 |
-
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the standard (EC2) or VPC security group to modify. The group must belong to your account. Required for VPC security groups; can be used instead of GroupName for standard (EC2) security groups. </li>
|
1762 |
-
* <li><code>IpPermissions</code> - <code>array</code> - Optional - List of IP permissions to revoke on the specified security group. For an IP permission to be removed, it must exactly match one of the IP permissions you specify in this list. Specifying permissions through IP permissions is the preferred way of revoking permissions since it offers more flexibility and control. <ul>
|
1763 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1764 |
-
* <li><code>IpProtocol</code> - <code>string</code> - Optional - The IP protocol of this permission. Valid protocol values: <code>tcp</code>, <code>udp</code>, <code>icmp</code> </li>
|
1765 |
-
* <li><code>FromPort</code> - <code>integer</code> - Optional - Start of port range for the TCP and UDP protocols, or an ICMP type number. An ICMP type number of <code>-1</code> indicates a wildcard (i.e., any ICMP type number). </li>
|
1766 |
-
* <li><code>ToPort</code> - <code>integer</code> - Optional - End of port range for the TCP and UDP protocols, or an ICMP code. An ICMP code of <code>-1</code> indicates a wildcard (i.e., any ICMP code). </li>
|
1767 |
-
* <li><code>Groups</code> - <code>array</code> - Optional - The list of AWS user IDs and groups included in this permission. <ul>
|
1768 |
-
* <li><code>x</code> - <code>array</code> - This represents a simple array index. <ul>
|
1769 |
-
* <li><code>UserId</code> - <code>string</code> - Optional - The AWS user ID of an account. </li>
|
1770 |
-
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range. </li>
|
1771 |
-
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range. </li>
|
1772 |
-
* </ul></li>
|
1773 |
-
* </ul></li>
|
1774 |
-
* <li><code>IpRanges</code> - <code>string|array</code> - Optional - The list of CIDR IP ranges included in this permission. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1775 |
-
* </ul></li>
|
1776 |
-
* </ul></li>
|
1777 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1778 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1779 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1780 |
-
*/
|
1781 |
-
public function revoke_security_group_ingress($opt = null)
|
1782 |
-
{
|
1783 |
-
if (!$opt) $opt = array();
|
1784 |
-
|
1785 |
-
// Optional parameter
|
1786 |
-
if (isset($opt['IpPermissions']))
|
1787 |
-
{
|
1788 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1789 |
-
'IpPermissions' => $opt['IpPermissions']
|
1790 |
-
)));
|
1791 |
-
unset($opt['IpPermissions']);
|
1792 |
-
}
|
1793 |
-
|
1794 |
-
return $this->authenticate('RevokeSecurityGroupIngress', $opt, $this->hostname);
|
1795 |
-
}
|
1796 |
-
|
1797 |
-
/**
|
1798 |
-
* The GetConsoleOutput operation retrieves console output for the specified instance.
|
1799 |
-
*
|
1800 |
-
* Instance console output is buffered and posted shortly after instance boot, reboot, and
|
1801 |
-
* termination. Amazon EC2 preserves the most recent 64 KB output which will be available for at least
|
1802 |
-
* one hour after the most recent post.
|
1803 |
-
*
|
1804 |
-
* @param string $instance_id (Required) The ID of the instance for which you want console output.
|
1805 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1806 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1807 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This is useful for manually-managed batch requests.</li></ul>
|
1808 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response. The value of <code>output</code> is automatically Base64-decoded.
|
1809 |
-
*/
|
1810 |
-
public function get_console_output($instance_id, $opt = null)
|
1811 |
-
{
|
1812 |
-
if (!$opt) $opt = array();
|
1813 |
-
$opt['InstanceId'] = $instance_id;
|
1814 |
-
|
1815 |
-
$response = $this->authenticate('GetConsoleOutput', $opt, $this->hostname);
|
1816 |
-
|
1817 |
-
// Automatically Base64-decode the <output> value.
|
1818 |
-
if ($this->util->is_base64((string) $response->body->output))
|
1819 |
-
{
|
1820 |
-
$response->body->output = base64_decode($response->body->output);
|
1821 |
-
}
|
1822 |
-
|
1823 |
-
return $response;
|
1824 |
-
}
|
1825 |
-
|
1826 |
-
/**
|
1827 |
-
*
|
1828 |
-
* Creates a new Internet gateway in your AWS account. After creating the Internet gateway, you then attach it to a VPC
|
1829 |
-
* using <code>AttachInternetGateway</code>. For more information about your VPC and Internet gateway, go to Amazon Virtual
|
1830 |
-
* Private Cloud User Guide.
|
1831 |
-
*
|
1832 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1833 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1834 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1835 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1836 |
-
*/
|
1837 |
-
public function create_internet_gateway($opt = null)
|
1838 |
-
{
|
1839 |
-
if (!$opt) $opt = array();
|
1840 |
-
|
1841 |
-
return $this->authenticate('CreateInternetGateway', $opt, $this->hostname);
|
1842 |
-
}
|
1843 |
-
|
1844 |
-
/**
|
1845 |
-
*
|
1846 |
-
* The ModifyImageAttribute operation modifies an attribute of an AMI.
|
1847 |
-
*
|
1848 |
-
* @param string $image_id (Required) The ID of the AMI whose attribute you want to modify.
|
1849 |
-
* @param string $attribute (Required) The name of the AMI attribute you want to modify. Available attributes: <code>launchPermission</code>, <code>productCodes</code>
|
1850 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1851 |
-
* <li><code>OperationType</code> - <code>string</code> - Optional - The type of operation being requested. Available operation types: <code>add</code>, <code>remove</code> </li>
|
1852 |
-
* <li><code>UserId</code> - <code>string|array</code> - Optional - The AWS user ID being added to or removed from the list of users with launch permissions for this AMI. Only valid when the launchPermission attribute is being modified. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1853 |
-
* <li><code>UserGroup</code> - <code>string|array</code> - Optional - The user group being added to or removed from the list of user groups with launch permissions for this AMI. Only valid when the launchPermission attribute is being modified. Available user groups: <code>all</code> Pass a string for a single value, or an indexed array for multiple values. </li>
|
1854 |
-
* <li><code>ProductCode</code> - <code>string|array</code> - Optional - The list of product codes being added to or removed from the specified AMI. Only valid when the productCodes attribute is being modified. Pass a string for a single value, or an indexed array for multiple values. </li>
|
1855 |
-
* <li><code>Value</code> - <code>string</code> - Optional - The value of the attribute being modified. Only valid when the description attribute is being modified. </li>
|
1856 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1857 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1858 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1859 |
-
*/
|
1860 |
-
public function modify_image_attribute($image_id, $attribute, $opt = null)
|
1861 |
-
{
|
1862 |
-
if (!$opt) $opt = array();
|
1863 |
-
$opt['ImageId'] = $image_id;
|
1864 |
-
$opt['Attribute'] = $attribute;
|
1865 |
-
|
1866 |
-
// Optional parameter
|
1867 |
-
if (isset($opt['UserId']))
|
1868 |
-
{
|
1869 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1870 |
-
'UserId' => (is_array($opt['UserId']) ? $opt['UserId'] : array($opt['UserId']))
|
1871 |
-
)));
|
1872 |
-
unset($opt['UserId']);
|
1873 |
-
}
|
1874 |
-
|
1875 |
-
// Optional parameter
|
1876 |
-
if (isset($opt['UserGroup']))
|
1877 |
-
{
|
1878 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1879 |
-
'UserGroup' => (is_array($opt['UserGroup']) ? $opt['UserGroup'] : array($opt['UserGroup']))
|
1880 |
-
)));
|
1881 |
-
unset($opt['UserGroup']);
|
1882 |
-
}
|
1883 |
-
|
1884 |
-
// Optional parameter
|
1885 |
-
if (isset($opt['ProductCode']))
|
1886 |
-
{
|
1887 |
-
$opt = array_merge($opt, CFComplexType::map(array(
|
1888 |
-
'ProductCode' => (is_array($opt['ProductCode']) ? $opt['ProductCode'] : array($opt['ProductCode']))
|
1889 |
-
)));
|
1890 |
-
unset($opt['ProductCode']);
|
1891 |
-
}
|
1892 |
-
|
1893 |
-
return $this->authenticate('ModifyImageAttribute', $opt, $this->hostname);
|
1894 |
-
}
|
1895 |
-
|
1896 |
-
/**
|
1897 |
-
*
|
1898 |
-
* Provides information to AWS about your customer gateway device. The customer gateway is the appliance at your end of
|
1899 |
-
* the VPN connection (compared to the VPN gateway, which is the device at the AWS side of the VPN connection). You can
|
1900 |
-
* have a single active customer gateway per AWS account (active means that you've created a VPN connection to use with the
|
1901 |
-
* customer gateway). AWS might delete any customer gateway that you create with this operation if you leave it inactive
|
1902 |
-
* for an extended period of time.
|
1903 |
-
*
|
1904 |
-
* You must provide the Internet-routable IP address of the customer gateway's external interface. The IP address must be
|
1905 |
-
* static.
|
1906 |
-
*
|
1907 |
-
* You must also provide the device's Border Gateway Protocol (BGP) Autonomous System Number (ASN). You can use an
|
1908 |
-
* existing ASN assigned to your network. If you don't have an ASN already, you can use a private ASN (in the 64512 - 65534
|
1909 |
-
* range). For more information about ASNs, go to <a
|
1910 |
-
* .wikipedia.org/wiki/Autonomous_system_%28Internet%29">http://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29</a>.
|
1911 |
-
*
|
1912 |
-
* @param string $type (Required) The type of VPN connection this customer gateway supports.
|
1913 |
-
* @param string $ip_address (Required) The Internet-routable IP address for the customer gateway's outside interface. The address must be static
|
1914 |
-
* @param integer $bgp_asn (Required) The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).
|
1915 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1916 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1917 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1918 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1919 |
-
*/
|
1920 |
-
public function create_customer_gateway($type, $ip_address, $bgp_asn, $opt = null)
|
1921 |
-
{
|
1922 |
-
if (!$opt) $opt = array();
|
1923 |
-
$opt['Type'] = $type;
|
1924 |
-
$opt['IpAddress'] = $ip_address;
|
1925 |
-
$opt['BgpAsn'] = $bgp_asn;
|
1926 |
-
|
1927 |
-
return $this->authenticate('CreateCustomerGateway', $opt, $this->hostname);
|
1928 |
-
}
|
1929 |
-
|
1930 |
-
/**
|
1931 |
-
*
|
1932 |
-
* Creates the data feed for Spot Instances, enabling you to view Spot Instance usage logs. You can create one data feed
|
1933 |
-
* per account.
|
1934 |
-
*
|
1935 |
-
* For conceptual information about Spot Instances, refer to the Amazon Elastic Compute Cloud Developer Guide or Amazon
|
1936 |
-
* Elastic Compute Cloud User Guide.
|
1937 |
-
*
|
1938 |
-
* @param string $bucket (Required) The Amazon S3 bucket in which to store the Spot Instance datafeed.
|
1939 |
-
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1940 |
-
* <li><code>Prefix</code> - <code>string</code> - Optional - The prefix that is prepended to datafeed files. </li>
|
1941 |
-
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <php:curl_setopt()>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1942 |
-
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1943 |
-
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1944 |
-
*/
|
1945 |
-
public function create_spot_datafeed_subscription($buc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|