mongo 2.0.0.rc → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -1
- data/README.md +1 -4
- data/lib/mongo/client.rb +1 -1
- data/lib/mongo/collection.rb +1 -1
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection/view/writable.rb +26 -10
- data/lib/mongo/database.rb +1 -1
- data/lib/mongo/grid/file.rb +12 -0
- data/lib/mongo/grid/file/chunk.rb +1 -1
- data/lib/mongo/grid/file/metadata.rb +13 -0
- data/lib/mongo/operation/aggregate.rb +1 -1
- data/lib/mongo/operation/write.rb +1 -5
- data/lib/mongo/operation/write/bulk.rb +17 -0
- data/lib/mongo/operation/write/{bulk_delete.rb → bulk/bulk_delete.rb} +1 -1
- data/lib/mongo/operation/{bulk_delete → write/bulk/bulk_delete}/result.rb +3 -0
- data/lib/mongo/operation/write/{bulk_insert.rb → bulk/bulk_insert.rb} +1 -1
- data/lib/mongo/operation/{bulk_insert → write/bulk/bulk_insert}/result.rb +3 -0
- data/lib/mongo/operation/write/{bulk_mergable.rb → bulk/bulk_mergable.rb} +0 -0
- data/lib/mongo/operation/write/{bulk_update.rb → bulk/bulk_update.rb} +1 -1
- data/lib/mongo/operation/{bulk_update → write/bulk/bulk_update}/result.rb +8 -1
- data/lib/mongo/operation/write/{legacy_bulk_mergable.rb → bulk/legacy_bulk_mergable.rb} +0 -0
- data/lib/mongo/operation/write/delete.rb +2 -0
- data/lib/mongo/operation/write/delete/result.rb +40 -0
- data/lib/mongo/operation/write/insert.rb +2 -0
- data/lib/mongo/operation/write/insert/result.rb +32 -0
- data/lib/mongo/operation/write/update.rb +9 -4
- data/lib/mongo/operation/write/update/result.rb +160 -0
- data/lib/mongo/server/connectable.rb +11 -0
- data/lib/mongo/server/connection.rb +1 -0
- data/lib/mongo/server/connection_pool.rb +1 -1
- data/lib/mongo/server/connection_pool/queue.rb +1 -1
- data/lib/mongo/server/monitor.rb +16 -0
- data/lib/mongo/server/monitor/connection.rb +1 -0
- data/lib/mongo/socket/ssl.rb +30 -8
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +1 -1
- data/lib/mongo/write_concern/unacknowledged.rb +1 -1
- data/spec/certificates/ca.pem +17 -0
- data/spec/certificates/client.pem +101 -0
- data/spec/certificates/crl.pem +10 -0
- data/spec/certificates/crl_client_revoked.pem +12 -0
- data/spec/certificates/password_protected.pem +51 -0
- data/spec/certificates/server.pem +34 -0
- data/spec/mongo/collection/view/writable_spec.rb +175 -0
- data/spec/mongo/crud_spec.rb +42 -0
- data/spec/mongo/grid/file/metadata_spec.rb +23 -0
- data/spec/mongo/grid/file_spec.rb +34 -0
- data/spec/mongo/operation/write/delete_spec.rb +8 -0
- data/spec/mongo/operation/write/insert_spec.rb +21 -8
- data/spec/mongo/operation/write/update_spec.rb +52 -1
- data/spec/mongo/server/connection_spec.rb +33 -10
- data/spec/mongo/server/monitor_spec.rb +14 -0
- data/spec/spec_helper.rb +2 -17
- data/spec/support/crud.rb +203 -0
- data/spec/support/crud/read.rb +144 -0
- data/spec/support/crud/write.rb +214 -0
- data/spec/support/crud_tests/read/aggregate.yml +43 -0
- data/spec/support/crud_tests/read/count.yml +37 -0
- data/spec/support/crud_tests/read/distinct.yml +33 -0
- data/spec/support/crud_tests/read/find.yml +50 -0
- data/spec/support/crud_tests/write/deleteMany.yml +36 -0
- data/spec/support/crud_tests/write/deleteOne.yml +49 -0
- data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
- data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
- data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
- data/spec/support/crud_tests/write/insertMany.yml +24 -0
- data/spec/support/crud_tests/write/insertOne.yml +19 -0
- data/spec/support/crud_tests/write/replaceOne.yml +96 -0
- data/spec/support/crud_tests/write/updateMany.yml +83 -0
- data/spec/support/crud_tests/write/updateOne.yml +80 -0
- metadata +64 -20
- metadata.gz.sig +0 -0
- data/spec/mongo_orchestration_spec.rb +0 -70
- data/spec/support/mongo_orchestration.rb +0 -61
- data/spec/support/mongo_orchestration/requestable.rb +0 -109
- data/spec/support/mongo_orchestration/standalone.rb +0 -57
@@ -0,0 +1,160 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Operation
|
17
|
+
module Write
|
18
|
+
class Update
|
19
|
+
|
20
|
+
# Defines custom behaviour of results for an update.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
class Result < Operation::Result
|
24
|
+
|
25
|
+
# The number of modified docs field in the result.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
MODIFIED = 'nModified'.freeze
|
29
|
+
|
30
|
+
# The upserted docs field in the result.
|
31
|
+
#
|
32
|
+
# @since 2.0.0
|
33
|
+
UPSERTED = 'upserted'.freeze
|
34
|
+
|
35
|
+
# Get the number of documents matched.
|
36
|
+
#
|
37
|
+
# @example Get the matched count.
|
38
|
+
# result.matched_count
|
39
|
+
#
|
40
|
+
# @return [ Integer ] The matched count.
|
41
|
+
#
|
42
|
+
# @since 2.0.0
|
43
|
+
def matched_count
|
44
|
+
return 0 unless acknowledged?
|
45
|
+
if upsert?
|
46
|
+
0
|
47
|
+
else
|
48
|
+
n
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Get the number of documents modified.
|
53
|
+
#
|
54
|
+
# @example Get the modified count.
|
55
|
+
# result.modified_count
|
56
|
+
#
|
57
|
+
# @return [ Integer ] The modified count.
|
58
|
+
#
|
59
|
+
# @since 2.0.0
|
60
|
+
def modified_count
|
61
|
+
return 0 unless acknowledged?
|
62
|
+
first[MODIFIED]
|
63
|
+
end
|
64
|
+
|
65
|
+
# The identifier of the inserted document if an upsert
|
66
|
+
# took place.
|
67
|
+
#
|
68
|
+
# @example Get the upserted document's identifier.
|
69
|
+
# result.upserted_id
|
70
|
+
#
|
71
|
+
# @return [ Object ] The upserted id.
|
72
|
+
#
|
73
|
+
# @since 2.0.0
|
74
|
+
def upserted_id
|
75
|
+
return nil unless upsert?
|
76
|
+
upsert?.first['_id']
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def upsert?
|
82
|
+
first[UPSERTED]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Defines custom behaviour of results for an update on server
|
87
|
+
# version <= 2.4.
|
88
|
+
#
|
89
|
+
# @since 2.0.0
|
90
|
+
class LegacyResult < Operation::Result
|
91
|
+
|
92
|
+
# Whether an existing document was updated.
|
93
|
+
#
|
94
|
+
# @since 2.0.0
|
95
|
+
UPDATED_EXISTING = 'updatedExisting'.freeze
|
96
|
+
|
97
|
+
# The upserted docs field in the result.
|
98
|
+
#
|
99
|
+
# @since 2.0.0
|
100
|
+
UPSERTED = 'upserted'.freeze
|
101
|
+
|
102
|
+
# Get the number of documents matched.
|
103
|
+
#
|
104
|
+
# @example Get the matched count.
|
105
|
+
# result.matched_count
|
106
|
+
#
|
107
|
+
# @return [ Integer ] The matched count.
|
108
|
+
#
|
109
|
+
# @since 2.0.0
|
110
|
+
def matched_count
|
111
|
+
return 0 unless acknowledged?
|
112
|
+
if upsert?
|
113
|
+
0
|
114
|
+
else
|
115
|
+
n
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Get the number of documents modified.
|
120
|
+
#
|
121
|
+
# @example Get the modified count.
|
122
|
+
# result.modified_count
|
123
|
+
#
|
124
|
+
# @return [ Integer ] The modified count.
|
125
|
+
#
|
126
|
+
# @since 2.0.0
|
127
|
+
def modified_count
|
128
|
+
return 0 unless acknowledged?
|
129
|
+
return n if updated_existing?
|
130
|
+
return 0 if upsert?
|
131
|
+
n
|
132
|
+
end
|
133
|
+
|
134
|
+
# The identifier of the inserted document if an upsert
|
135
|
+
# took place.
|
136
|
+
#
|
137
|
+
# @example Get the upserted document's identifier.
|
138
|
+
# result.upserted_id
|
139
|
+
#
|
140
|
+
# @return [ Object ] The upserted id.
|
141
|
+
#
|
142
|
+
# @since 2.0.0
|
143
|
+
def upserted_id
|
144
|
+
first[UPSERTED] if upsert?
|
145
|
+
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
def upsert?
|
150
|
+
!updated_existing? && n == 1
|
151
|
+
end
|
152
|
+
|
153
|
+
def updated_existing?
|
154
|
+
first[UPDATED_EXISTING]
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -32,6 +32,9 @@ module Mongo
|
|
32
32
|
# @return [ Hash ] options The passed in options.
|
33
33
|
attr_reader :options
|
34
34
|
|
35
|
+
# @return [ Integer ] pid The process id when the connection was created.
|
36
|
+
attr_reader :pid
|
37
|
+
|
35
38
|
# Determine if the connection is currently connected.
|
36
39
|
#
|
37
40
|
# @example Is the connection connected?
|
@@ -82,6 +85,7 @@ module Mongo
|
|
82
85
|
attr_reader :socket, :ssl_options
|
83
86
|
|
84
87
|
def ensure_connected
|
88
|
+
ensure_same_process!
|
85
89
|
connect! if socket.nil? || !socket.alive?
|
86
90
|
begin
|
87
91
|
yield socket
|
@@ -91,6 +95,13 @@ module Mongo
|
|
91
95
|
end
|
92
96
|
end
|
93
97
|
|
98
|
+
def ensure_same_process!
|
99
|
+
if pid != Process.pid
|
100
|
+
disconnect!
|
101
|
+
@pid = Process.pid
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
94
105
|
def read
|
95
106
|
ensure_connected{ |socket| Protocol::Reply.deserialize(socket) }
|
96
107
|
end
|
@@ -80,7 +80,7 @@ module Mongo
|
|
80
80
|
#
|
81
81
|
# @since 2.0.0
|
82
82
|
def inspect
|
83
|
-
"
|
83
|
+
"#<Mongo::Server::ConnectionPool:0x#{object_id} queue=#{queue.inspect}>"
|
84
84
|
end
|
85
85
|
|
86
86
|
# Yield the block to a connection, while handling checkin/checkout logic.
|
@@ -110,7 +110,7 @@ module Mongo
|
|
110
110
|
#
|
111
111
|
# @since 2.0.0
|
112
112
|
def inspect
|
113
|
-
"
|
113
|
+
"#<Mongo::Pool::Queue:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " +
|
114
114
|
"wait_timeout=#{wait_timeout} current_size=#{queue.size}>"
|
115
115
|
end
|
116
116
|
|
data/lib/mongo/server/monitor.rb
CHANGED
@@ -29,6 +29,12 @@ module Mongo
|
|
29
29
|
# @since 2.0.0
|
30
30
|
HEARTBEAT_FREQUENCY = 10.freeze
|
31
31
|
|
32
|
+
# The minimum time between forced server scans. Is
|
33
|
+
# minHeartbeatFrequencyMS in the SDAM spec.
|
34
|
+
#
|
35
|
+
# @since 2.0.0
|
36
|
+
MIN_SCAN_FREQUENCY = 0.5.freeze
|
37
|
+
|
32
38
|
# The command used for determining server status.
|
33
39
|
#
|
34
40
|
# @since 2.0.0
|
@@ -66,6 +72,7 @@ module Mongo
|
|
66
72
|
#
|
67
73
|
# @since 2.0.0
|
68
74
|
def scan!
|
75
|
+
throttle_scan_frequency!
|
69
76
|
@description = inspector.run(description, *ismaster)
|
70
77
|
end
|
71
78
|
|
@@ -155,6 +162,15 @@ module Mongo
|
|
155
162
|
end
|
156
163
|
end
|
157
164
|
end
|
165
|
+
|
166
|
+
def throttle_scan_frequency!
|
167
|
+
if @last_scan
|
168
|
+
difference = (Time.now - @last_scan)
|
169
|
+
throttle_time = (MIN_SCAN_FREQUENCY - difference)
|
170
|
+
sleep(throttle_time) if throttle_time > 0
|
171
|
+
end
|
172
|
+
@last_scan = Time.now
|
173
|
+
end
|
158
174
|
end
|
159
175
|
end
|
160
176
|
end
|
data/lib/mongo/socket/ssl.rb
CHANGED
@@ -51,12 +51,11 @@ module Mongo
|
|
51
51
|
# @since 2.0.0
|
52
52
|
def connect!
|
53
53
|
Timeout.timeout(timeout, Error::SocketTimeoutError) do
|
54
|
-
|
55
|
-
socket
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
verify_certificate!(ssl_socket)
|
54
|
+
@tcp_socket.connect(::Socket.pack_sockaddr_in(port, host))
|
55
|
+
@socket = OpenSSL::SSL::SSLSocket.new(@tcp_socket, context)
|
56
|
+
@socket.sync_close = true
|
57
|
+
@socket.connect
|
58
|
+
verify_certificate!(@socket)
|
60
59
|
self
|
61
60
|
end
|
62
61
|
end
|
@@ -76,7 +75,25 @@ module Mongo
|
|
76
75
|
def initialize(host, port, timeout, family, options = {})
|
77
76
|
@host, @port, @timeout, @options = host, port, timeout, options
|
78
77
|
@context = create_context(options)
|
79
|
-
|
78
|
+
@family = family
|
79
|
+
@tcp_socket = ::Socket.new(family, SOCK_STREAM, 0)
|
80
|
+
@tcp_socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
|
81
|
+
encoded_timeout = [ timeout, 0 ].pack(TIMEOUT_PACK)
|
82
|
+
@tcp_socket.set_encoding(BSON::BINARY)
|
83
|
+
@tcp_socket.setsockopt(SOL_SOCKET, SO_RCVTIMEO, encoded_timeout)
|
84
|
+
@tcp_socket.setsockopt(SOL_SOCKET, SO_SNDTIMEO, encoded_timeout)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Read a single byte from the socket.
|
88
|
+
#
|
89
|
+
# @example Read a single byte.
|
90
|
+
# socket.readbyte
|
91
|
+
#
|
92
|
+
# @return [ Object ] The read byte.
|
93
|
+
#
|
94
|
+
# @since 2.0.0
|
95
|
+
def readbyte
|
96
|
+
handle_errors { socket.read(1) }
|
80
97
|
end
|
81
98
|
|
82
99
|
private
|
@@ -87,7 +104,12 @@ module Mongo
|
|
87
104
|
context.cert = OpenSSL::X509::Certificate.new(File.open(options[:ssl_cert]))
|
88
105
|
end
|
89
106
|
if options[:ssl_key]
|
90
|
-
|
107
|
+
if options[:ssl_key_pass_phrase]
|
108
|
+
context.key = OpenSSL::PKey::RSA.new(File.open(options[:ssl_key]),
|
109
|
+
options[:ssl_key_pass_phrase])
|
110
|
+
else
|
111
|
+
context.key = OpenSSL::PKey::RSA.new(File.open(options[:ssl_key]))
|
112
|
+
end
|
91
113
|
end
|
92
114
|
if options[:ssl_verify] || options[:ssl_ca_cert]
|
93
115
|
context.ca_file = options[:ssl_ca_cert]
|
data/lib/mongo/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICnTCCAgYCCQD4+RCKzwZr/zANBgkqhkiG9w0BAQUFADCBkjELMAkGA1UEBhMC
|
3
|
+
VVMxETAPBgNVBAgMCE5ldyBZb3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MQ4w
|
4
|
+
DAYDVQQKDAUxMEdlbjEPMA0GA1UECwwGS2VybmVsMRowGAYDVQQDDBFNeSBDZXJ0
|
5
|
+
IEF1dGhvcml0eTEbMBkGCSqGSIb3DQEJARYMcm9vdEBsYXphcnVzMB4XDTEzMTEz
|
6
|
+
MDAyMzU0OVoXDTIzMTEyODAyMzU0OVowgZIxCzAJBgNVBAYTAlVTMREwDwYDVQQI
|
7
|
+
DAhOZXcgWW9yazEWMBQGA1UEBwwNTmV3IFlvcmsgQ2l0eTEOMAwGA1UECgwFMTBH
|
8
|
+
ZW4xDzANBgNVBAsMBktlcm5lbDEaMBgGA1UEAwwRTXkgQ2VydCBBdXRob3JpdHkx
|
9
|
+
GzAZBgkqhkiG9w0BCQEWDHJvb3RAbGF6YXJ1czCBnzANBgkqhkiG9w0BAQEFAAOB
|
10
|
+
jQAwgYkCgYEA1xymeY+U/evUuQvxpun9moe4GopN80c1ptmaAHM/1Onwaq54Wt27
|
11
|
+
nl1wUVme3dh4DdWviYY7mJ333HVEnp/QhVcT4kQhICZqdgPKPdCseQW3H+8x6Gwz
|
12
|
+
hrNRBdz0NkSoFxDlIymfy2Q2xoQpbCGAg+EnRYUTKlHMXNpUDLFhGjcCAwEAATAN
|
13
|
+
BgkqhkiG9w0BAQUFAAOBgQDRQB3c/9osTexEzMPHyMGTzG5nGwy8Wv77GgW3BETM
|
14
|
+
hECoGqueXLa5ZgvealJrnMHNKdj6vrCGgBDzE0K0VdXc4dLtLmx3DRntDOAWKJdB
|
15
|
+
2XPMvdC7Ec//Fwep/9emz0gDiJrTiEpL4p74+h+sp4Xy8cBokQ3Ss5S9NmnPXT7E
|
16
|
+
qQ==
|
17
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,101 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 7 (0x7)
|
5
|
+
Signature Algorithm: sha1WithRSAEncryption
|
6
|
+
Issuer: C=US, ST=New York, L=New York City, O=10Gen, OU=Kernel, CN=My Cert Authority/emailAddress=root@lazarus
|
7
|
+
Validity
|
8
|
+
Not Before: Aug 23 14:55:32 2013 GMT
|
9
|
+
Not After : Jan 7 14:55:32 2041 GMT
|
10
|
+
Subject: C=US, ST=New York, L=New York City, O=10Gen, OU=kerneluser, CN=client
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
Public-Key: (2048 bit)
|
14
|
+
Modulus:
|
15
|
+
00:ba:16:42:d4:8b:3d:5e:8a:67:9e:a7:c0:cd:4a:
|
16
|
+
9c:9c:fd:95:b9:83:bf:f4:cf:03:8c:2e:db:a9:c1:
|
17
|
+
35:58:80:f6:e2:e9:87:28:84:e3:d0:9b:68:60:51:
|
18
|
+
0e:42:84:d8:6f:e8:34:cc:18:97:79:d3:8d:d8:2f:
|
19
|
+
23:11:25:6f:69:7a:38:bb:8c:b2:29:e9:91:be:79:
|
20
|
+
8c:cc:1b:56:98:98:d3:83:2a:c5:f9:9c:86:0c:2c:
|
21
|
+
24:0e:5c:46:3b:a9:95:44:6c:c5:e0:7c:9d:03:ae:
|
22
|
+
0d:23:99:49:a4:48:dd:0e:35:a2:e5:b4:8b:86:bd:
|
23
|
+
c0:c8:ce:d5:ac:c4:36:f3:9e:5f:17:00:23:8d:53:
|
24
|
+
a1:43:1b:a3:61:96:36:80:4d:35:50:b5:8b:69:31:
|
25
|
+
39:b4:63:8b:96:59:5c:d1:ea:92:eb:eb:fa:1b:35:
|
26
|
+
64:44:b3:f6:f3:a6:9d:49:3a:59:e5:e1:c2:cb:98:
|
27
|
+
be:29:b3:22:dd:33:97:d7:50:4f:db:c2:58:64:18:
|
28
|
+
b5:8c:3c:6b:2d:21:f6:bd:8d:e5:d2:da:8d:79:fe:
|
29
|
+
a7:80:75:a8:15:b9:ee:79:7f:01:31:1d:e5:e7:15:
|
30
|
+
76:53:65:f6:fe:f0:93:7d:20:3d:cc:ff:9b:ca:b2:
|
31
|
+
50:2c:1b:3a:69:d5:e6:70:cf:ac:be:7e:5c:33:c4:
|
32
|
+
6e:a7
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Basic Constraints:
|
36
|
+
CA:FALSE
|
37
|
+
Netscape Comment:
|
38
|
+
OpenSSL Generated Certificate
|
39
|
+
X509v3 Subject Key Identifier:
|
40
|
+
4A:8B:EE:22:42:E6:F8:62:4C:86:38:8D:C5:78:95:98:C1:10:05:7C
|
41
|
+
X509v3 Authority Key Identifier:
|
42
|
+
keyid:07:41:19:3A:9F:7E:C5:B7:22:4E:B7:BC:D5:DF:E4:FC:09:B8:64:16
|
43
|
+
|
44
|
+
Signature Algorithm: sha1WithRSAEncryption
|
45
|
+
13:13:a8:f0:de:78:c6:b1:e0:85:cc:27:e6:04:28:44:93:1d:
|
46
|
+
f1:ff:5e:81:69:33:1f:f3:76:e0:49:ca:d9:ad:aa:db:f5:a5:
|
47
|
+
f8:a6:50:bb:a1:a7:40:14:e4:2f:8d:b8:21:7f:35:04:60:db:
|
48
|
+
af:f0:9e:dd:a1:ca:0b:7f:03:2e:2f:19:1e:32:6e:1e:2d:87:
|
49
|
+
68:e3:37:47:a8:5b:93:d1:88:41:73:da:88:21:59:27:d4:35:
|
50
|
+
1c:6a:27:b5:c0:c6:17:ba:f3:87:c8:e1:f4:8f:43:12:bc:fa:
|
51
|
+
8d:90:d5:86:83:df:51:a5:c9:e0:92:f0:66:d0:37:61:6f:85:
|
52
|
+
24:18
|
53
|
+
-----BEGIN CERTIFICATE-----
|
54
|
+
MIIDdjCCAt+gAwIBAgIBBzANBgkqhkiG9w0BAQUFADCBkjELMAkGA1UEBhMCVVMx
|
55
|
+
ETAPBgNVBAgMCE5ldyBZb3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MQ4wDAYD
|
56
|
+
VQQKDAUxMEdlbjEPMA0GA1UECwwGS2VybmVsMRowGAYDVQQDDBFNeSBDZXJ0IEF1
|
57
|
+
dGhvcml0eTEbMBkGCSqGSIb3DQEJARYMcm9vdEBsYXphcnVzMB4XDTEzMDgyMzE0
|
58
|
+
NTUzMloXDTQxMDEwNzE0NTUzMlowbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5l
|
59
|
+
dyBZb3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MQ4wDAYDVQQKDAUxMEdlbjET
|
60
|
+
MBEGA1UECwwKa2VybmVsdXNlcjEPMA0GA1UEAwwGY2xpZW50MIIBIjANBgkqhkiG
|
61
|
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuhZC1Is9XopnnqfAzUqcnP2VuYO/9M8DjC7b
|
62
|
+
qcE1WID24umHKITj0JtoYFEOQoTYb+g0zBiXedON2C8jESVvaXo4u4yyKemRvnmM
|
63
|
+
zBtWmJjTgyrF+ZyGDCwkDlxGO6mVRGzF4HydA64NI5lJpEjdDjWi5bSLhr3AyM7V
|
64
|
+
rMQ2855fFwAjjVOhQxujYZY2gE01ULWLaTE5tGOLlllc0eqS6+v6GzVkRLP286ad
|
65
|
+
STpZ5eHCy5i+KbMi3TOX11BP28JYZBi1jDxrLSH2vY3l0tqNef6ngHWoFbnueX8B
|
66
|
+
MR3l5xV2U2X2/vCTfSA9zP+byrJQLBs6adXmcM+svn5cM8RupwIDAQABo3sweTAJ
|
67
|
+
BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0
|
68
|
+
aWZpY2F0ZTAdBgNVHQ4EFgQUSovuIkLm+GJMhjiNxXiVmMEQBXwwHwYDVR0jBBgw
|
69
|
+
FoAUB0EZOp9+xbciTre81d/k/Am4ZBYwDQYJKoZIhvcNAQEFBQADgYEAExOo8N54
|
70
|
+
xrHghcwn5gQoRJMd8f9egWkzH/N24EnK2a2q2/Wl+KZQu6GnQBTkL424IX81BGDb
|
71
|
+
r/Ce3aHKC38DLi8ZHjJuHi2HaOM3R6hbk9GIQXPaiCFZJ9Q1HGontcDGF7rzh8jh
|
72
|
+
9I9DErz6jZDVhoPfUaXJ4JLwZtA3YW+FJBg=
|
73
|
+
-----END CERTIFICATE-----
|
74
|
+
-----BEGIN PRIVATE KEY-----
|
75
|
+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6FkLUiz1eimee
|
76
|
+
p8DNSpyc/ZW5g7/0zwOMLtupwTVYgPbi6YcohOPQm2hgUQ5ChNhv6DTMGJd5043Y
|
77
|
+
LyMRJW9peji7jLIp6ZG+eYzMG1aYmNODKsX5nIYMLCQOXEY7qZVEbMXgfJ0Drg0j
|
78
|
+
mUmkSN0ONaLltIuGvcDIztWsxDbznl8XACONU6FDG6NhljaATTVQtYtpMTm0Y4uW
|
79
|
+
WVzR6pLr6/obNWREs/bzpp1JOlnl4cLLmL4psyLdM5fXUE/bwlhkGLWMPGstIfa9
|
80
|
+
jeXS2o15/qeAdagVue55fwExHeXnFXZTZfb+8JN9ID3M/5vKslAsGzpp1eZwz6y+
|
81
|
+
flwzxG6nAgMBAAECggEBALYw92urjAFVFxCiA8W7aEzYhtAkaztft4R3mD/C19z4
|
82
|
+
H0CZDeig+3+RuIactY5xDIu8WHz/EseHVlg0BmxSL5ugu4z8uq8IbNaFoVFw7r7m
|
83
|
+
2ieRKFY0ZpXiXcbllynw5iEhMjeRKhWhQmH5Qb2kTTINV5j4xKa+f9Lblx7Y2Uh4
|
84
|
+
tsaOtlMwb98D2/KYJdTv5Nj1nyuSqRVhECsd00Cb6JUBGQBx8Ja0wFy9gEygq6kU
|
85
|
+
w3s1XNOSnYNEo4FaVZwp5KZyCyBENcKpNUq4nXt/7ncEfVYdJck0Li3wN4Jr2J9S
|
86
|
+
eHqRzh8QkHxc1Ro8ktcXaUSs9kFuwvVvb4rcGUpOMWkCgYEA9xxp8yDtFVgzMtc/
|
87
|
+
vS8xgM1Wj4SrgKKYhE2wS05BJh/41oFMzfH1FpZ1GCM983r4QgYWoT71XsBgiOMC
|
88
|
+
yN2p2IbV4V44bMGKJqaVMkB91CVCUWI6piaCQb/1CJTwaXE7zPim6dlUSxxBBnRn
|
89
|
+
LP50NTscRLFcCZELD3Yl7jR8XFUCgYEAwMfkNFmGtBKAwlHZ3Y3XOwPWg+jCll7s
|
90
|
+
9nhv8TU2IB9pcCRGqyOT7k1YymvYkDT2Je4JUPWEBs4cW7yD61LrQ8w8+DrE9dGo
|
91
|
+
czzGPyjOAANSX0asG74UjkNIQThmyEOltVHIxYMaSqowjHRSPdA+R4Od9EdcDdfS
|
92
|
+
q5SfSVFxmwsCgYBtl1thqUOcCL7EGHQ7KdfxgJ+YDMWmyfWMD4xVCYKZLurD7xop
|
93
|
+
59nDR7zslIygE/RQC7Uzk+FsQTNO4ibVAIGX9syaI5gwm3DyjURzwehMEq4ju8W4
|
94
|
+
9DEmicRZJvysNrzHvasA4RKiMQihnTQ43yyYgvuZd3MTBxF5rPNLfll89QKBgQC9
|
95
|
+
SsmiOZIR+OUjaTmS2bbQBNm7Fm8TNcxZyzKn1wb5jb57VbNqUfnskVgxEqpIFyjn
|
96
|
+
X48YRqtH/1RLI5UpGXdXUBFB8Hr7oM1VsgQ7ejakPp7AXOWcLA2FDz3AhMAvvnTU
|
97
|
+
0KRihHPpgqk/EOy8M2Ej2XHcrcEO+q+quLmbRXRWtwKBgHacQiwci/2J+v0e9i52
|
98
|
+
re/2AJHKP5MwNHFe1e01iNc5EEN0G+/Ut8XW19DWf6bsxqie0ChC+xN8TUst8alT
|
99
|
+
F+tXTsHHmt/lRcjTROjT5XVuoqjtU2Q0QeVeGLgvObso+fZy3ZNeQuSJjWukdMZ3
|
100
|
+
57rGT6p0OuM8qbrTzpv3JMrm
|
101
|
+
-----END PRIVATE KEY-----
|