You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2010/08/04 12:19:29 UTC
svn commit: r982192 - in /incubator/deltacloud/trunk: server/
server/lib/deltacloud/drivers/ec2/ server/lib/deltacloud/drivers/gogrid/
server/lib/deltacloud/models/ server/views/instance_credentials/
server/views/keys/ tests/ec2/ tests/ec2/step_definit...
Author: mfojtik
Date: Wed Aug 4 10:19:28 2010
New Revision: 982192
URL: http://svn.apache.org/viewvc?rev=982192&view=rev
Log:
Renamed 'instance_credentials' to 'keys'
Fixed typo in HAML view
Added:
incubator/deltacloud/trunk/server/lib/deltacloud/models/key.rb
- copied, changed from r982191, incubator/deltacloud/trunk/server/lib/deltacloud/models/instance_credential.rb
incubator/deltacloud/trunk/server/views/keys/
incubator/deltacloud/trunk/server/views/keys/index.html.haml
incubator/deltacloud/trunk/server/views/keys/index.xml.haml
incubator/deltacloud/trunk/server/views/keys/new.html.haml
- copied, changed from r982191, incubator/deltacloud/trunk/server/views/instance_credentials/new.html.haml
incubator/deltacloud/trunk/server/views/keys/show.html.haml
incubator/deltacloud/trunk/server/views/keys/show.xml.haml
incubator/deltacloud/trunk/tests/ec2/keys.feature
incubator/deltacloud/trunk/tests/ec2/step_definitions/keys_steps.rb
Removed:
incubator/deltacloud/trunk/server/lib/deltacloud/models/instance_credential.rb
incubator/deltacloud/trunk/server/views/instance_credentials/index.html.haml
incubator/deltacloud/trunk/server/views/instance_credentials/index.xml.haml
incubator/deltacloud/trunk/server/views/instance_credentials/new.html.haml
incubator/deltacloud/trunk/server/views/instance_credentials/show.html.haml
incubator/deltacloud/trunk/server/views/instance_credentials/show.xml.haml
incubator/deltacloud/trunk/tests/ec2/instance_credentials.feature
incubator/deltacloud/trunk/tests/ec2/step_definitions/instance_credentials_steps.rb
incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.6a3266ae8a1b4bbb036d5e207301f1753f888247
Modified:
incubator/deltacloud/trunk/server/deltacloud.rb
incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
incubator/deltacloud/trunk/server/server.rb
incubator/deltacloud/trunk/tests/ec2/step_definitions/images_steps.rb
incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_delete_keypair.ea562e354ea8280c8e3f9c054f485ab6d9e5b41f
incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.da39a3ee5e6b4b0d3255bfef95601890afd80709
Modified: incubator/deltacloud/trunk/server/deltacloud.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/deltacloud.rb?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/deltacloud.rb (original)
+++ incubator/deltacloud/trunk/server/deltacloud.rb Wed Aug 4 10:19:28 2010
@@ -9,7 +9,7 @@ require 'deltacloud/models/base_model'
require 'deltacloud/models/realm'
require 'deltacloud/models/image'
require 'deltacloud/models/instance'
-require 'deltacloud/models/instance_credential'
+require 'deltacloud/models/key'
require 'deltacloud/models/instance_profile'
require 'deltacloud/models/storage_snapshot'
require 'deltacloud/models/storage_volume'
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb Wed Aug 4 10:19:28 2010
@@ -36,7 +36,7 @@ module Deltacloud
class EC2Driver < Deltacloud::BaseDriver
def supported_collections
- DEFAULT_COLLECTIONS + [ :instance_credentials ]
+ DEFAULT_COLLECTIONS + [ :keys ]
end
feature :instances, :user_data
@@ -275,33 +275,33 @@ class EC2Driver < Deltacloud::BaseDriver
snapshots
end
- def instance_credential(credentials, opts=nil)
- instance_credentials(credentials, opts).first
+ def key(credentials, opts=nil)
+ keys(credentials, opts).first
end
- def instance_credentials(credentials, opts=nil)
+ def keys(credentials, opts=nil)
ec2 = new_client( credentials )
opts[:key_name] = opts[:id] if opts and opts[:id]
keypairs = ec2.describe_keypairs(opts || {})
result = []
safely do
keypairs.keySet.item.each do |keypair|
- result << convert_instance_credential(keypair)
+ result << convert_key(keypair)
end
end
result
end
- def create_instance_credential(credentials, opts={})
- instance_credential = InstanceCredential.new
+ def create_key(credentials, opts={})
+ key = Key.new
ec2 = new_client( credentials )
safely do
- instance_credential = convert_instance_credential(ec2.create_keypair(opts))
+ key = convert_key(ec2.create_keypair(opts))
end
- return instance_credential
+ return key
end
- def destroy_instance_credential(credentials, opts={})
+ def destroy_key(credentials, opts={})
safely do
ec2 = new_client( credentials )
ec2.delete_keypair(opts)
@@ -319,14 +319,13 @@ class EC2Driver < Deltacloud::BaseDriver
AWS::EC2::Base.new(opts)
end
- def convert_instance_credential(instance_credential)
- key=InstanceCredential.new({
- :id => instance_credential['keyName'],
- :fingerprint => instance_credential['keyFingerprint'],
- :credential_type => :key
+ def convert_key(key)
+ Key.new({
+ :id => key['keyName'],
+ :fingerprint => key['keyFingerprint'],
+ :credential_type => :key,
+ :pem_rsa_key => key['keyMaterial']
})
- key.pem_rsa_key = instance_credential['keyMaterial'] if instance_credential['keyMaterial']
- return key
end
def convert_image(ec2_image)
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb Wed Aug 4 10:19:28 2010
@@ -45,7 +45,7 @@ class GogridDriver < Deltacloud::BaseDri
def supported_collections
DEFAULT_COLLECTIONS.reject! { |c| [ :storage_volumes, :storage_snapshots ].include?(c) }
- DEFAULT_COLLECTIONS + [ :instance_credentials ]
+ DEFAULT_COLLECTIONS + [ :keys ]
end
def images(credentials, opts=nil)
@@ -176,15 +176,15 @@ class GogridDriver < Deltacloud::BaseDri
end
end
- def instance_credential(credentials, opts=nil)
- instance_credentials(credentials, opts).first
+ def key(credentials, opts=nil)
+ keys(credentials, opts).first
end
- def instance_credentials(credentials, opts=nil)
+ def keys(credentials, opts=nil)
gogrid = new_client( credentials )
creds = []
gogrid.request('support/password/list')['list'].each do |password|
- creds << convert_instance_credential(password)
+ creds << convert_key(password)
end
return creds
end
@@ -220,8 +220,8 @@ class GogridDriver < Deltacloud::BaseDri
return login_data
end
- def convert_instance_credential(password)
- InstanceCredential.new({
+ def convert_key(password)
+ Key.new({
:id => password['id'],
:username => password['username'],
:password => password['password'],
Copied: incubator/deltacloud/trunk/server/lib/deltacloud/models/key.rb (from r982191, incubator/deltacloud/trunk/server/lib/deltacloud/models/instance_credential.rb)
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/models/key.rb?p2=incubator/deltacloud/trunk/server/lib/deltacloud/models/key.rb&p1=incubator/deltacloud/trunk/server/lib/deltacloud/models/instance_credential.rb&r1=982191&r2=982192&rev=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/models/instance_credential.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/models/key.rb Wed Aug 4 10:19:28 2010
@@ -16,7 +16,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-class InstanceCredential < BaseModel
+class Key < BaseModel
attr_accessor :credential_type
attr_accessor :fingerprint
@@ -24,4 +24,12 @@ class InstanceCredential < BaseModel
attr_accessor :password
attr_accessor :pem_rsa_key
+ def is_password?
+ true if @credential_type.eql?(:password)
+ end
+
+ def is_key?
+ true if @credential_type.eql?(:key)
+ end
+
end
Modified: incubator/deltacloud/trunk/server/server.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/server.rb?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/server.rb (original)
+++ incubator/deltacloud/trunk/server/server.rb Wed Aug 4 10:19:28 2010
@@ -300,38 +300,40 @@ collection :storage_volumes do
end
end
-get '/api/instance_credentials/new' do
+get '/api/keys/new' do
respond_to do |format|
- format.html { haml :"instance_credentials/new" }
+ format.html { haml :"keys/new" }
end
end
-collection :instance_credentials do
+collection :keys do
description "Instance authentication credentials"
operation :index do
description "List all available credentials which could be used for instance authentication"
- control { filter_all :instance_credentials }
+ control do
+ filter_all :keys
+ end
end
operation :show do
description "Show details about given instance credential"
param :id, :string, :required
- control { show :instance_credential }
+ control { show :key }
end
operation :create do
description "Create a new instance credential if backend supports this"
param :name, :string, :required
control do
- unless driver.respond_to?(:create_instance_credential)
+ unless driver.respond_to?(:create_key)
raise Deltacloud::BackendFeatureUnsupported.new('501',
'Creating instance credentials is not supported in backend')
end
- @instance_credential = driver.create_instance_credential(credentials, { :key_name => params[:name] })
+ @key = driver.create_key(credentials, { :key_name => params[:name] })
respond_to do |format|
- format.html { haml :"instance_credentials/show" }
- format.xml { haml :"instance_credentials/show" }
+ format.html { haml :"keys/show" }
+ format.xml { haml :"keys/show" }
end
end
end
@@ -340,12 +342,12 @@ collection :instance_credentials do
description "Destroy given instance credential if backend supports this"
param :id, :string, :required
control do
- unless driver.respond_to?(:destroy_instance_credential)
+ unless driver.respond_to?(:destroy_key)
raise Deltacloud::BackendFeatureUnsupported.new('501',
'Creating instance credentials is not supported in backend')
end
- driver.destroy_instance_credential(credentials, { :key_name => params[:id]})
- redirect(instance_credentials_url)
+ driver.destroy_key(credentials, { :key_name => params[:id]})
+ redirect(keys_url)
end
end
Added: incubator/deltacloud/trunk/server/views/keys/index.html.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/keys/index.html.haml?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/views/keys/index.html.haml (added)
+++ incubator/deltacloud/trunk/server/views/keys/index.html.haml Wed Aug 4 10:19:28 2010
@@ -0,0 +1,26 @@
+%h1 Keys
+
+%table.display
+ %thead
+ %tr
+ %th ID
+ %th Credentials details
+ %th Actions
+ %tbody
+ - @elements.each do |key|
+ %tr
+ %td
+ = link_to key.id, key_url( key.id )
+ %td
+ - if key.credential_type.eql?(:key)
+ = key.fingerprint
+ - if key.credential_type.eql?(:password)
+ = "#{key.username} - #{key.password}"
+ %td
+ - if driver.respond_to?(:destroy_key)
+ =link_to 'Destroy', destroy_key_url(key.id), :class => 'delete'
+ %tfoot
+ - if driver.respond_to?(:create_key)
+ %tr
+ %td{:colspan => 3, :style => "text-align:right;"}
+ =link_to 'Create »', "#{url_for('/api/keys/new')}", :class => 'button'
Added: incubator/deltacloud/trunk/server/views/keys/index.xml.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/keys/index.xml.haml?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/views/keys/index.xml.haml (added)
+++ incubator/deltacloud/trunk/server/views/keys/index.xml.haml Wed Aug 4 10:19:28 2010
@@ -0,0 +1,4 @@
+!!!XML
+%keys
+ - @elements.each do |c|
+ = haml :'keys/show', :locals => { :@key => c, :partial => true }
Copied: incubator/deltacloud/trunk/server/views/keys/new.html.haml (from r982191, incubator/deltacloud/trunk/server/views/instance_credentials/new.html.haml)
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/keys/new.html.haml?p2=incubator/deltacloud/trunk/server/views/keys/new.html.haml&p1=incubator/deltacloud/trunk/server/views/instance_credentials/new.html.haml&r1=982191&r2=982192&rev=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/views/instance_credentials/new.html.haml (original)
+++ incubator/deltacloud/trunk/server/views/keys/new.html.haml Wed Aug 4 10:19:28 2010
@@ -1,6 +1,6 @@
-%h1 New Keypair
+%h1 New key
-%form{ :action => '/api/instance_credentials', :method => :post }
+%form{ :action => '/api/keys', :method => :post }
%p
%label
Name:
Added: incubator/deltacloud/trunk/server/views/keys/show.html.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/keys/show.html.haml?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/views/keys/show.html.haml (added)
+++ incubator/deltacloud/trunk/server/views/keys/show.html.haml Wed Aug 4 10:19:28 2010
@@ -0,0 +1,22 @@
+%h1
+ = @key.id
+
+%dl
+ - if @key.is_key?
+ %di
+ %dt Fingerprint
+ %dd
+ = @key.fingerprint
+ - if @key.pem_rsa_key
+ %dt PEM key
+ %dd
+ %pre
+ = @key.pem_rsa_key
+ - if @key.is_password?
+ %di
+ %dt Username
+ %dd
+ = @key.username
+ %dt Password
+ %dd
+ = @key.password
Added: incubator/deltacloud/trunk/server/views/keys/show.xml.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/keys/show.xml.haml?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/views/keys/show.xml.haml (added)
+++ incubator/deltacloud/trunk/server/views/keys/show.xml.haml Wed Aug 4 10:19:28 2010
@@ -0,0 +1,20 @@
+- unless defined?(partial)
+ !!! XML
+%key{ :href => key_url(@key.id), :id => @key.id, :type => "#{@key.credential_type}" }
+ %actions
+ - if driver.respond_to?(:destroy_key)
+ %link{ :rel => "destroy", :method => "delete", :href => destroy_key_url(@key.id)}
+ - if @key.is_key?
+ %fingerprint<
+ =@key.fingerprint
+ - unless @key.pem_rsa_key.nil?
+ %pem<
+ =cdata do
+ =@key.pem_rsa_key
+ - if @key.is_password?
+ %username<
+ =cdata do
+ =@key.username
+ %password<
+ =cdata do
+ =@key.password
Added: incubator/deltacloud/trunk/tests/ec2/keys.feature
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/tests/ec2/keys.feature?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/tests/ec2/keys.feature (added)
+++ incubator/deltacloud/trunk/tests/ec2/keys.feature Wed Aug 4 10:19:28 2010
@@ -0,0 +1,51 @@
+Feature: Managing keys
+
+ Scenario: Basic key creation
+ Given URI /api/keys exists
+ And authentification is required for this URI
+ When client want to create a new key
+ Then client should choose name 'test01'
+ When client request for a new key
+ Then new key should be created
+ And this instance should have id attribute set to 'test01'
+ And this instance should have valid fingerprint
+ And this instance should have valid pem key
+ And this instance should have credential_type set to 'key'
+ And this instance should have destroy action
+
+ Scenario: Listing current keys
+ Given URI /api/keys exists
+ And authentification is required for this URI
+ When client access this URI
+ Then client should get root element 'keys'
+ And this element contains some keys
+ And each instance should have:
+ | name |
+ | actions |
+ And each key should have 'href' attribute with valid URL
+ And this URI should be available in XML, JSON, HTML format
+
+ Scenario: Get details about last key
+ Given URI /api/keys exists
+ And authentification is required for this URI
+ When client access this URI
+ Then client should get root element 'keys'
+ And this element contains some keys
+ When client want to show first key
+ Then client follow href attribute in first key
+ Then client should get this key
+ And this instance should have:
+ | name |
+ | actions |
+ | credential_type |
+ | fingerprint |
+
+ @prefix-destroy
+ Scenario: Destroying created key
+ Given URI /api/instances exists
+ And authentification is required for this URI
+ When client want to 'destroy' last key
+ And client follow destroy link in actions
+ Then client should get created key
+ And this key should be destroyed
+
Modified: incubator/deltacloud/trunk/tests/ec2/step_definitions/images_steps.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/tests/ec2/step_definitions/images_steps.rb?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/tests/ec2/step_definitions/images_steps.rb (original)
+++ incubator/deltacloud/trunk/tests/ec2/step_definitions/images_steps.rb Wed Aug 4 10:19:28 2010
@@ -35,8 +35,8 @@ When /^client want to show first (.+)$/
path = '/realms/realm'
when 'hardware-profile'
path = '/hardware_profiles/hardware_profile'
- when 'instance_credential':
- path = '/instance_credentials/instance_credential'
+ when 'key':
+ path = '/keys/key'
end
@element = output_xml.xpath(path).first
@element.should_not be_nil
Added: incubator/deltacloud/trunk/tests/ec2/step_definitions/keys_steps.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/tests/ec2/step_definitions/keys_steps.rb?rev=982192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/tests/ec2/step_definitions/keys_steps.rb (added)
+++ incubator/deltacloud/trunk/tests/ec2/step_definitions/keys_steps.rb Wed Aug 4 10:19:28 2010
@@ -0,0 +1,58 @@
+When /^client want to create a new key$/ do
+end
+
+Then /^client should choose name '(\w+)'$/ do |name|
+ @name = name
+end
+
+Then /^this instance should have id attribute set to '(\w+)'$/ do |name|
+ output_xml.xpath('/key/@id').text.should == name
+end
+
+Then /^this instance should have valid fingerprint$/ do
+ output_xml.xpath('/key/fingerprint').text.should_not == nil
+ output_xml.xpath('/key/fingerprint').text.size > 0
+end
+
+Then /^this instance should have valid pem key$/ do
+ output_xml.xpath('/key/pem').text.strip =~ /$-----BEGIN RSA PRIVATE KEY-----/
+end
+
+When /^client request for a new key$/ do
+ params = {
+ :name => @name
+ }
+ post "/api/keys", params
+end
+
+Then /^new key should be created$/ do
+ output_xml.xpath('/key').size.should == 1
+end
+
+Then /^this instance should have credential_type set to '(\w+)'$/ do |type|
+ output_xml.xpath('/key/@type').text.should == type
+end
+
+Then /^this instance should have destroy action$/ do
+ output_xml.xpath('/key/actions/link[@rel="destroy"]').should_not == nil
+end
+
+When /^client want to 'destroy' last key$/ do
+ get "/api/keys"
+ @credential = output_xml.xpath('/keys/key').last
+end
+
+When /^client follow destroy link in actions$/ do
+ @link = output_xml.xpath('/keys/key/actions/link[@rel="destroy"]').last
+ delete @link['href'], {}
+end
+
+Then /^client should get created key$/ do
+ @credential[:id].should == @name
+end
+
+Then /^this key should be destroyed$/ do
+ # TODO: Fixme
+ #get "/api/keys"
+ #last_response.status.should == 200
+end
Modified: incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_delete_keypair.ea562e354ea8280c8e3f9c054f485ab6d9e5b41f
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_delete_keypair.ea562e354ea8280c8e3f9c054f485ab6d9e5b41f?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_delete_keypair.ea562e354ea8280c8e3f9c054f485ab6d9e5b41f (original)
+++ incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_delete_keypair.ea562e354ea8280c8e3f9c054f485ab6d9e5b41f Wed Aug 4 10:19:28 2010
@@ -1,3 +1,3 @@
-BAh7CCIOcmVxdWVzdElkIik1NmE3NWJhMi04MTFiLTRhNzctYTgwOS04ZmEz
-YTQyNzA3ZmIiC3JldHVybiIJdHJ1ZSIKeG1sbnMiLWh0dHA6Ly9lYzIuYW1h
+BAh7CCIOcmVxdWVzdElkIik2ZjJlOTBiZS1lOGI4LTQ2N2YtOWY1YS00ZjY2
+MzAxMDA1NWQiC3JldHVybiIJdHJ1ZSIKeG1sbnMiLWh0dHA6Ly9lYzIuYW1h
em9uYXdzLmNvbS9kb2MvMjAwOS0xMS0zMC8=
Modified: incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.da39a3ee5e6b4b0d3255bfef95601890afd80709
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.da39a3ee5e6b4b0d3255bfef95601890afd80709?rev=982192&r1=982191&r2=982192&view=diff
==============================================================================
--- incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.da39a3ee5e6b4b0d3255bfef95601890afd80709 (original)
+++ incubator/deltacloud/trunk/tests/ec2/support/ec2/destroy_describe_keypairs.da39a3ee5e6b4b0d3255bfef95601890afd80709 Wed Aug 4 10:19:28 2010
@@ -1,5 +1,5 @@
BAh7CCILa2V5U2V0ewYiCWl0ZW1bBnsHIgxrZXlOYW1lIgt0ZXN0MDEiE2tl
-eUZpbmdlcnByaW50IkA4OTo0OTo0MzphMDpjOTo3ZTo5ZjpmYjo1ODphZDox
-Njo3MjoyOTphZDoyMDoxMTpjODpmZjo2NTpkYiIOcmVxdWVzdElkIillODlh
-ZGY0NS03ZTExLTQ5ZDUtOTY5MS04ODg4ZGE2YjU1NTUiCnhtbG5zIi1odHRw
+eUZpbmdlcnByaW50IkBkOTo0ZDozMDoxZTo1MDpjZDo1ODozYzpmMzpjNDo3
+NDplMzowNTo1NDplNjoxYjpiZjoyZTo1MDpkMCIOcmVxdWVzdElkIilmZmNi
+NDYyYi05MjI0LTQyMTktYTM3NC0wOTFhYzFmNjU4ZWYiCnhtbG5zIi1odHRw
Oi8vZWMyLmFtYXpvbmF3cy5jb20vZG9jLzIwMDktMTEtMzAv