Commit 422b350a10a5ae5748847e960178b74d03a2af0e
1 parent
193d5352
Exists in
master
and in
20 other branches
rails4: rename contacts, gdata and ezcrypto to theis gems names
Showing
235 changed files
with
10909 additions
and
10914 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 235 files displayed.
lib/contacts
lib/contacts.rb
lib/ezcrypto.rb
lib/gdata
lib/gdata.rb
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/LICENSE
| ... | ... | @@ -1,10 +0,0 @@ |
| 1 | -Copyright (c) 2006, Lucas Carlson, MOG | |
| 2 | -All rights reserved. | |
| 3 | - | |
| 4 | -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |
| 5 | - | |
| 6 | -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |
| 7 | -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |
| 8 | -Neither the name of the Lucas Carlson nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |
| 9 | -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 10 | - |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/README
| ... | ... | @@ -1,47 +0,0 @@ |
| 1 | -== Welcome to Contacts | |
| 2 | - | |
| 3 | -Contacts is a universal interface to grab contact list information from various providers including Hotmail, AOL, Gmail and Yahoo. | |
| 4 | - | |
| 5 | -== Download | |
| 6 | - | |
| 7 | -* gem install contacts | |
| 8 | -* http://github.com/cardmagic/contacts | |
| 9 | -* git clone git://github.com/cardmagic/contacts.git | |
| 10 | - | |
| 11 | -== Background | |
| 12 | - | |
| 13 | -For a long time, the only way to get a list of contacts from your free online email accounts was with proprietary PHP scripts that would cost you $50. The act of grabbing that list is a simple matter of screen scrapping and this library gives you all the functionality you need. Thanks to the generosity of the highly popular Rails website MOG (http://mog.com) for allowing this library to be released open-source to the world. It is easy to extend this library to add new free email providers, so please contact the author if you would like to help. | |
| 14 | - | |
| 15 | -== Usage | |
| 16 | - | |
| 17 | - Contacts::Hotmail.new(login, password).contacts # => [["name", "foo@bar.com"], ["another name", "bow@wow.com"]] | |
| 18 | - Contacts::Yahoo.new(login, password).contacts | |
| 19 | - Contacts::Gmail.new(login, password).contacts | |
| 20 | - | |
| 21 | - Contacts.new(:gmail, login, password).contacts | |
| 22 | - Contacts.new(:hotmail, login, password).contacts | |
| 23 | - Contacts.new(:yahoo, login, password).contacts | |
| 24 | - | |
| 25 | - Contacts.guess(login, password).contacts | |
| 26 | - | |
| 27 | -Notice there are three ways to use this library so that you can limit the use as much as you would like in your particular application. The Contacts.guess method will automatically concatenate all the address book contacts from each of the successful logins in the case that a username password works across multiple services. | |
| 28 | - | |
| 29 | -== Examples | |
| 30 | - | |
| 31 | -See the examples/ directory. | |
| 32 | - | |
| 33 | -== Authors | |
| 34 | - | |
| 35 | -* Lucas Carlson from MOG (mailto:lucas@rufy.com) - http://mog.com | |
| 36 | - | |
| 37 | -== Contributors | |
| 38 | - | |
| 39 | -* Britt Selvitelle from Twitter (mailto:anotherbritt@gmail.com) - http://twitter.com | |
| 40 | -* Tony Targonski from GigPark (mailto:tony@gigpark.com) - http://gigpark.com | |
| 41 | -* Waheed Barghouthi from Watwet (mailto:waheed.barghouthi@gmail.com) - http://watwet.com | |
| 42 | -* Glenn Sidney from Glenn Fu (mailto:glenn@glennfu.com) - http://glennfu.com | |
| 43 | -* Brian McQuay from Onomojo (mailto:brian@onomojo.com) - http://onomojo.com | |
| 44 | -* Adam Hunter (mailto:adamhunter@me.com) - http://adamhunter.me/ | |
| 45 | - | |
| 46 | -This library is released under the terms of the BSD. | |
| 47 | - |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/Rakefile
| ... | ... | @@ -1,91 +0,0 @@ |
| 1 | -require 'rubygems' | |
| 2 | -require 'rake' | |
| 3 | -require 'rake/testtask' | |
| 4 | -require 'rake/rdoctask' | |
| 5 | -require 'rake/gempackagetask' | |
| 6 | -require 'rake/contrib/rubyforgepublisher' | |
| 7 | -require 'lib/contacts' | |
| 8 | - | |
| 9 | -PKG_VERSION = Contacts::VERSION | |
| 10 | - | |
| 11 | -PKG_FILES = FileList[ | |
| 12 | - "lib/**/*", "bin/*", "test/**/*", "[A-Z]*", "Rakefile", "doc/**/*", "examples/**/*" | |
| 13 | -] - ["test/accounts.yml"] | |
| 14 | - | |
| 15 | -desc "Default Task" | |
| 16 | -task :default => [ :test ] | |
| 17 | - | |
| 18 | -# Run the unit tests | |
| 19 | -desc "Run all unit tests" | |
| 20 | -Rake::TestTask.new("test") { |t| | |
| 21 | - t.libs << "lib" | |
| 22 | - t.pattern = 'test/*/*_test.rb' | |
| 23 | - t.verbose = true | |
| 24 | -} | |
| 25 | - | |
| 26 | -# Make a console, useful when working on tests | |
| 27 | -desc "Generate a test console" | |
| 28 | -task :console do | |
| 29 | - verbose( false ) { sh "irb -I lib/ -r 'contacts'" } | |
| 30 | -end | |
| 31 | - | |
| 32 | -# Genereate the RDoc documentation | |
| 33 | -desc "Create documentation" | |
| 34 | -Rake::RDocTask.new("doc") { |rdoc| | |
| 35 | - rdoc.title = "Contact List - ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail" | |
| 36 | - rdoc.rdoc_dir = 'doc' | |
| 37 | - rdoc.rdoc_files.include('README') | |
| 38 | - rdoc.rdoc_files.include('lib/**/*.rb') | |
| 39 | -} | |
| 40 | - | |
| 41 | -# Genereate the package | |
| 42 | -spec = Gem::Specification.new do |s| | |
| 43 | - | |
| 44 | - #### Basic information. | |
| 45 | - | |
| 46 | - s.name = 'adamhunter-contacts' | |
| 47 | - s.version = PKG_VERSION | |
| 48 | - s.summary = <<-EOF | |
| 49 | - Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail | |
| 50 | - EOF | |
| 51 | - s.description = <<-EOF | |
| 52 | - Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail | |
| 53 | - EOF | |
| 54 | - | |
| 55 | - #### Which files are to be included in this gem? Everything! (Except CVS directories.) | |
| 56 | - | |
| 57 | - s.files = PKG_FILES | |
| 58 | - | |
| 59 | - #### Load-time details: library and application (you will need one or both). | |
| 60 | - | |
| 61 | - s.require_path = 'lib' | |
| 62 | - s.autorequire = 'contacts' | |
| 63 | - | |
| 64 | - s.add_dependency('json', '>= 0.4.1') | |
| 65 | - s.add_dependency('gdata', '= 1.1.1') | |
| 66 | - s.requirements << "A json parser, the gdata ruby gem" | |
| 67 | - | |
| 68 | - #### Documentation and testing. | |
| 69 | - | |
| 70 | - s.has_rdoc = true | |
| 71 | - | |
| 72 | - #### Author and project details. | |
| 73 | - | |
| 74 | - s.author = "Lucas Carlson" | |
| 75 | - s.email = "lucas@rufy.com" | |
| 76 | - s.homepage = "http://rubyforge.org/projects/contacts" | |
| 77 | -end | |
| 78 | - | |
| 79 | -Rake::GemPackageTask.new(spec) do |pkg| | |
| 80 | - pkg.need_zip = true | |
| 81 | - pkg.need_tar = true | |
| 82 | -end | |
| 83 | - | |
| 84 | -desc "Report code statistics (KLOCs, etc) from the application" | |
| 85 | -task :stats do | |
| 86 | - require 'code_statistics' | |
| 87 | - CodeStatistics.new( | |
| 88 | - ["Library", "lib"], | |
| 89 | - ["Units", "test"] | |
| 90 | - ).to_s | |
| 91 | -end | |
| 92 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/contacts.gemspec
| ... | ... | @@ -1,14 +0,0 @@ |
| 1 | -Gem::Specification.new do |s| | |
| 2 | - s.name = "contacts" | |
| 3 | - s.version = "1.2.0" | |
| 4 | - s.date = "2009-05-06" | |
| 5 | - s.summary = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo." | |
| 6 | - s.email = "lucas@rufy.com" | |
| 7 | - s.homepage = "http://github.com/cardmagic/contacts" | |
| 8 | - s.description = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo." | |
| 9 | - s.has_rdoc = false | |
| 10 | - s.authors = ["Lucas Carlson"] | |
| 11 | - s.files = ["LICENSE", "Rakefile", "README", "examples/grab_contacts.rb", "lib/contacts.rb", "lib/contacts/base.rb", "lib/contacts/json_picker.rb", "lib/contacts/gmail.rb", "lib/contacts/aol.rb", "lib/contacts/hotmail.rb", "lib/contacts/plaxo.rb", "lib/contacts/yahoo.rb"] | |
| 12 | - s.add_dependency("json", ">= 1.1.1") | |
| 13 | - s.add_dependency('gdata', '>= 1.1.1') | |
| 14 | -end |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/cruise_config.rb
| ... | ... | @@ -1,22 +0,0 @@ |
| 1 | -# Project-specific configuration for CruiseControl.rb | |
| 2 | - | |
| 3 | -Project.configure do |project| | |
| 4 | - | |
| 5 | - # Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody) | |
| 6 | - # if building this on your own CI box, please remove! | |
| 7 | - project.email_notifier.emails = ['opensource@pivotallabs.com'] | |
| 8 | - | |
| 9 | - # Set email 'from' field to john@doe.com: | |
| 10 | - # project.email_notifier.from = 'john@doe.com' | |
| 11 | - | |
| 12 | - # Build the project by invoking rake task 'custom' | |
| 13 | - # project.rake_task = 'custom' | |
| 14 | - | |
| 15 | - # Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked, current working directory is | |
| 16 | - # [cruise]/projects/your_project/work, so if you do not keep build_my_app.sh in version control, it should be '../build_my_app.sh' instead | |
| 17 | - # project.build_command = 'build_my_app.sh' | |
| 18 | - | |
| 19 | - # Ping Subversion for new revisions every 5 minutes (default: 30 seconds) | |
| 20 | - # project.scheduler.polling_interval = 5.minutes | |
| 21 | - | |
| 22 | -end | |
| 23 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/examples/grab_contacts.rb
| ... | ... | @@ -1,12 +0,0 @@ |
| 1 | -require File.dirname(__FILE__)+"/../lib/contacts" | |
| 2 | - | |
| 3 | -login = ARGV[0] | |
| 4 | -password = ARGV[1] | |
| 5 | - | |
| 6 | -Contacts::Gmail.new(login, password).contacts | |
| 7 | - | |
| 8 | -Contacts.new(:gmail, login, password).contacts | |
| 9 | - | |
| 10 | -Contacts.new("gmail", login, password).contacts | |
| 11 | - | |
| 12 | -Contacts.guess(login, password).contacts | |
| 13 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/geminstaller.yml
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts.rb
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/aol.rb
| ... | ... | @@ -1,147 +0,0 @@ |
| 1 | -class Hash | |
| 2 | - def to_query_string | |
| 3 | - u = ERB::Util.method(:u) | |
| 4 | - map { |k, v| | |
| 5 | - u.call(k) + "=" + u.call(v) | |
| 6 | - }.join("&") | |
| 7 | - end | |
| 8 | -end | |
| 9 | - | |
| 10 | -class Contacts | |
| 11 | - class Aol < Base | |
| 12 | - URL = "http://www.aol.com/" | |
| 13 | - LOGIN_URL = "https://my.screenname.aol.com/_cqr/login/login.psp" | |
| 14 | - LOGIN_REFERER_URL = "http://webmail.aol.com/" | |
| 15 | - LOGIN_REFERER_PATH = "sitedomain=sns.webmail.aol.com&lang=en&locale=us&authLev=0&uitype=mini&loginId=&redirType=js&xchk=false" | |
| 16 | - AOL_NUM = "29970-343" # this seems to change each time they change the protocol | |
| 17 | - | |
| 18 | - CONTACT_LIST_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ContactList.aspx?folder=Inbox&showUserFolders=False" | |
| 19 | - CONTACT_LIST_CSV_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ABExport.aspx?command=all" | |
| 20 | - PROTOCOL_ERROR = "AOL has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 21 | - | |
| 22 | - def real_connect | |
| 23 | - | |
| 24 | - postdata = { | |
| 25 | - "loginId" => login, | |
| 26 | - "password" => password, | |
| 27 | - "rememberMe" => "on", | |
| 28 | - "_sns_fg_color_" => "", | |
| 29 | - "_sns_err_color_" => "", | |
| 30 | - "_sns_link_color_" => "", | |
| 31 | - "_sns_width_" => "", | |
| 32 | - "_sns_height_" => "", | |
| 33 | - "offerId" => "mail-second-en-us", | |
| 34 | - "_sns_bg_color_" => "", | |
| 35 | - "sitedomain" => "sns.webmail.aol.com", | |
| 36 | - "regPromoCode" => "", | |
| 37 | - "mcState" => "initialized", | |
| 38 | - "uitype" => "std", | |
| 39 | - "siteId" => "", | |
| 40 | - "lang" => "en", | |
| 41 | - "locale" => "us", | |
| 42 | - "authLev" => "0", | |
| 43 | - "siteState" => "", | |
| 44 | - "isSiteStateEncoded" => "false", | |
| 45 | - "use_aam" => "0", | |
| 46 | - "seamless" => "novl", | |
| 47 | - "aolsubmit" => CGI.escape("Sign In"), | |
| 48 | - "idType" => "SN", | |
| 49 | - "usrd" => "", | |
| 50 | - "doSSL" => "", | |
| 51 | - "redirType" => "", | |
| 52 | - "xchk" => "false" | |
| 53 | - } | |
| 54 | - | |
| 55 | - # Get this cookie and stick it in the form to confirm to Aol that your cookies work | |
| 56 | - data, resp, cookies, forward = get(URL) | |
| 57 | - postdata["stips"] = cookie_hash_from_string(cookies)["stips"] | |
| 58 | - postdata["tst"] = cookie_hash_from_string(cookies)["tst"] | |
| 59 | - | |
| 60 | - data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL] | |
| 61 | - until forward.nil? | |
| 62 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 63 | - end | |
| 64 | - | |
| 65 | - data, resp, cookies, forward, old_url = get("#{LOGIN_URL}?#{LOGIN_REFERER_PATH}", cookies) + [LOGIN_REFERER_URL] | |
| 66 | - until forward.nil? | |
| 67 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 68 | - end | |
| 69 | - | |
| 70 | - doc = Nokogiri::HTML.fragment data | |
| 71 | - doc.css('input').each do |input| | |
| 72 | - postdata["usrd"] = input["value"] if input["name"] == "usrd" | |
| 73 | - end | |
| 74 | - # parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata | |
| 75 | - | |
| 76 | - postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"] | |
| 77 | - postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"] | |
| 78 | - postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"] | |
| 79 | - # raise data.inspect | |
| 80 | - | |
| 81 | - data, resp, cookies, forward, old_url = post(LOGIN_URL, postdata.to_query_string, cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL] | |
| 82 | - | |
| 83 | - until forward.nil? | |
| 84 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 85 | - end | |
| 86 | - | |
| 87 | - if data.index("Invalid Screen Name or Password.") | |
| 88 | - raise AuthenticationError, "Username and password do not match" | |
| 89 | - elsif data.index("Required field must not be blank") | |
| 90 | - raise AuthenticationError, "Login and password must not be blank" | |
| 91 | - elsif data.index("errormsg_0_logincaptcha") | |
| 92 | - raise AuthenticationError, "Captcha error" | |
| 93 | - elsif data.index("Invalid request") | |
| 94 | - raise ConnectionError, PROTOCOL_ERROR | |
| 95 | - elsif cookies == "" | |
| 96 | - raise ConnectionError, PROTOCOL_ERROR | |
| 97 | - end | |
| 98 | - | |
| 99 | - @cookies = cookies | |
| 100 | - end | |
| 101 | - | |
| 102 | - def contacts | |
| 103 | - postdata = { | |
| 104 | - "file" => 'contacts', | |
| 105 | - "fileType" => 'csv' | |
| 106 | - } | |
| 107 | - | |
| 108 | - return @contacts if @contacts | |
| 109 | - if connected? | |
| 110 | - data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] | |
| 111 | - | |
| 112 | - until forward.nil? | |
| 113 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 114 | - end | |
| 115 | - | |
| 116 | - if resp.code_type != Net::HTTPOK | |
| 117 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 118 | - end | |
| 119 | - | |
| 120 | - # parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden"> | |
| 121 | - doc = Nokogiri::HTML.fragment data | |
| 122 | - doc.css('input').each do |input| | |
| 123 | - postdata["user"] = input["value"] if input["name"] == "user" | |
| 124 | - end | |
| 125 | - | |
| 126 | - data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] | |
| 127 | - | |
| 128 | - if forward.nil? | |
| 129 | - parse data | |
| 130 | - else | |
| 131 | - raise AuthenticationError, "Account cancelled" | |
| 132 | - end | |
| 133 | - end | |
| 134 | - end | |
| 135 | - private | |
| 136 | - | |
| 137 | - def parse(data, options={}) | |
| 138 | - data = CSV.parse(data) | |
| 139 | - col_names = data.shift | |
| 140 | - @contacts = data.map do |person| | |
| 141 | - ["#{person[0]} #{person[1]}", person[4]] unless person[4].empty? | |
| 142 | - end.compact | |
| 143 | - end | |
| 144 | - end | |
| 145 | - | |
| 146 | - TYPES[:aol] = Aol | |
| 147 | -end |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/base.rb
| ... | ... | @@ -1,215 +0,0 @@ |
| 1 | -require "cgi" | |
| 2 | -require "net/http" | |
| 3 | -require "net/https" | |
| 4 | -require "uri" | |
| 5 | -require "zlib" | |
| 6 | -require "stringio" | |
| 7 | -require "thread" | |
| 8 | -require "erb" | |
| 9 | - | |
| 10 | -class Contacts | |
| 11 | - TYPES = {} | |
| 12 | - VERSION = "1.2.0" | |
| 13 | - | |
| 14 | - class Base | |
| 15 | - def initialize(login, password) | |
| 16 | - @login = login | |
| 17 | - @password = password | |
| 18 | - @connections = {} | |
| 19 | - connect | |
| 20 | - end | |
| 21 | - | |
| 22 | - def connect | |
| 23 | - raise AuthenticationError, "Login and password must not be nil, login: #{@login.inspect}, password: #{@password.inspect}" if @login.nil? || @login.empty? || @password.nil? || @password.empty? | |
| 24 | - real_connect | |
| 25 | - end | |
| 26 | - | |
| 27 | - def connected? | |
| 28 | - @cookies && !@cookies.empty? | |
| 29 | - end | |
| 30 | - | |
| 31 | - def contacts(options = {}) | |
| 32 | - return @contacts if @contacts | |
| 33 | - if connected? | |
| 34 | - url = URI.parse(contact_list_url) | |
| 35 | - http = open_http(url) | |
| 36 | - resp, data = http.get("#{url.path}?#{url.query}", | |
| 37 | - "Cookie" => @cookies | |
| 38 | - ) | |
| 39 | - | |
| 40 | - if resp.code_type != Net::HTTPOK | |
| 41 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 42 | - end | |
| 43 | - | |
| 44 | - parse(data, options) | |
| 45 | - end | |
| 46 | - end | |
| 47 | - | |
| 48 | - def login | |
| 49 | - @attempt ||= 0 | |
| 50 | - @attempt += 1 | |
| 51 | - | |
| 52 | - if @attempt == 1 | |
| 53 | - @login | |
| 54 | - else | |
| 55 | - if @login.include?("@#{domain}") | |
| 56 | - @login.sub("@#{domain}","") | |
| 57 | - else | |
| 58 | - "#{@login}@#{domain}" | |
| 59 | - end | |
| 60 | - end | |
| 61 | - end | |
| 62 | - | |
| 63 | - def password | |
| 64 | - @password | |
| 65 | - end | |
| 66 | - | |
| 67 | - private | |
| 68 | - | |
| 69 | - def domain | |
| 70 | - @d ||= URI.parse(self.class.const_get(:URL)).host.sub(/^www\./,'') | |
| 71 | - end | |
| 72 | - | |
| 73 | - def contact_list_url | |
| 74 | - self.class.const_get(:CONTACT_LIST_URL) | |
| 75 | - end | |
| 76 | - | |
| 77 | - def address_book_url | |
| 78 | - self.class.const_get(:ADDRESS_BOOK_URL) | |
| 79 | - end | |
| 80 | - | |
| 81 | - def open_http(url) | |
| 82 | - c = @connections[Thread.current.object_id] ||= {} | |
| 83 | - http = c["#{url.host}:#{url.port}"] | |
| 84 | - unless http | |
| 85 | - http = Net::HTTP.new(url.host, url.port) | |
| 86 | - if url.port == 443 | |
| 87 | - http.use_ssl = true | |
| 88 | - http.verify_mode = OpenSSL::SSL::VERIFY_NONE | |
| 89 | - end | |
| 90 | - c["#{url.host}:#{url.port}"] = http | |
| 91 | - end | |
| 92 | - http.start unless http.started? | |
| 93 | - http | |
| 94 | - end | |
| 95 | - | |
| 96 | - def cookie_hash_from_string(cookie_string) | |
| 97 | - cookie_string.split(";").map{|i|i.split("=", 2).map{|j|j.strip}}.inject({}){|h,i|h[i[0]]=i[1];h} | |
| 98 | - end | |
| 99 | - | |
| 100 | - def parse_cookies(data, existing="") | |
| 101 | - return existing if data.nil? | |
| 102 | - | |
| 103 | - cookies = cookie_hash_from_string(existing) | |
| 104 | - | |
| 105 | - data.gsub!(/ ?[\w]+=EXPIRED;/,'') | |
| 106 | - data.gsub!(/ ?expires=(.*?, .*?)[;,$]/i, ';') | |
| 107 | - data.gsub!(/ ?(domain|path)=[\S]*?[;,$]/i,';') | |
| 108 | - data.gsub!(/[,;]?\s*(secure|httponly)/i,'') | |
| 109 | - data.gsub!(/(;\s*){2,}/,', ') | |
| 110 | - data.gsub!(/(,\s*){2,}/,', ') | |
| 111 | - data.sub!(/^,\s*/,'') | |
| 112 | - data.sub!(/\s*,$/,'') | |
| 113 | - | |
| 114 | - data.split(", ").map{|t|t.to_s.split(";").first}.each do |data| | |
| 115 | - k, v = data.split("=", 2).map{|j|j.strip} | |
| 116 | - if cookies[k] && v.empty? | |
| 117 | - cookies.delete(k) | |
| 118 | - elsif v && !v.empty? | |
| 119 | - cookies[k] = v | |
| 120 | - end | |
| 121 | - end | |
| 122 | - | |
| 123 | - cookies.map{|k,v| "#{k}=#{v}"}.join("; ") | |
| 124 | - end | |
| 125 | - | |
| 126 | - def remove_cookie(cookie, cookies) | |
| 127 | - parse_cookies("#{cookie}=", cookies) | |
| 128 | - end | |
| 129 | - | |
| 130 | - def post(url, postdata, cookies="", referer="") | |
| 131 | - url = URI.parse(url) | |
| 132 | - http = open_http(url) | |
| 133 | - resp, data = http.post(url.path, postdata, | |
| 134 | - "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0", | |
| 135 | - "Accept-Encoding" => "gzip", | |
| 136 | - "Cookie" => cookies, | |
| 137 | - "Referer" => referer, | |
| 138 | - "Content-Type" => 'application/x-www-form-urlencoded' | |
| 139 | - ) | |
| 140 | - data = uncompress(resp, data) | |
| 141 | - cookies = parse_cookies(resp.response['set-cookie'], cookies) | |
| 142 | - forward = resp.response['Location'] | |
| 143 | - forward ||= (data =~ /<meta.*?url='([^']+)'/ ? CGI.unescapeHTML($1) : nil) | |
| 144 | - if (not forward.nil?) && URI.parse(forward).host.nil? | |
| 145 | - forward = url.scheme.to_s + "://" + url.host.to_s + forward | |
| 146 | - end | |
| 147 | - return data, resp, cookies, forward | |
| 148 | - end | |
| 149 | - | |
| 150 | - def get(url, cookies="", referer="") | |
| 151 | - url = URI.parse(url) | |
| 152 | - http = open_http(url) | |
| 153 | - resp, data = http.get("#{url.path}?#{url.query}", | |
| 154 | - "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0", | |
| 155 | - "Accept-Encoding" => "gzip", | |
| 156 | - "Cookie" => cookies, | |
| 157 | - "Referer" => referer | |
| 158 | - ) | |
| 159 | - data = uncompress(resp, data) | |
| 160 | - cookies = parse_cookies(resp.response['set-cookie'], cookies) | |
| 161 | - forward = resp.response['Location'] | |
| 162 | - if (not forward.nil?) && URI.parse(forward).host.nil? | |
| 163 | - forward = url.scheme.to_s + "://" + url.host.to_s + forward | |
| 164 | - end | |
| 165 | - return data, resp, cookies, forward | |
| 166 | - end | |
| 167 | - | |
| 168 | - def uncompress(resp, data) | |
| 169 | - case resp.response['content-encoding'] | |
| 170 | - when 'gzip' | |
| 171 | - gz = Zlib::GzipReader.new(StringIO.new(data)) | |
| 172 | - data = gz.read | |
| 173 | - gz.close | |
| 174 | - resp.response['content-encoding'] = nil | |
| 175 | - # FIXME: Not sure what Hotmail was feeding me with their 'deflate', | |
| 176 | - # but the headers definitely were not right | |
| 177 | - when 'deflate' | |
| 178 | - data = Zlib::Inflate.inflate(data) | |
| 179 | - resp.response['content-encoding'] = nil | |
| 180 | - end | |
| 181 | - | |
| 182 | - data | |
| 183 | - end | |
| 184 | - end | |
| 185 | - | |
| 186 | - class ContactsError < StandardError | |
| 187 | - end | |
| 188 | - | |
| 189 | - class AuthenticationError < ContactsError | |
| 190 | - end | |
| 191 | - | |
| 192 | - class ConnectionError < ContactsError | |
| 193 | - end | |
| 194 | - | |
| 195 | - class TypeNotFound < ContactsError | |
| 196 | - end | |
| 197 | - | |
| 198 | - def self.new(type, login, password) | |
| 199 | - if TYPES.include?(type.to_s.intern) | |
| 200 | - TYPES[type.to_s.intern].new(login, password) | |
| 201 | - else | |
| 202 | - raise TypeNotFound, "#{type.inspect} is not a valid type, please choose one of the following: #{TYPES.keys.inspect}" | |
| 203 | - end | |
| 204 | - end | |
| 205 | - | |
| 206 | - def self.guess(login, password) | |
| 207 | - TYPES.inject([]) do |a, t| | |
| 208 | - begin | |
| 209 | - a + t[1].new(login, password).contacts | |
| 210 | - rescue AuthenticationError | |
| 211 | - a | |
| 212 | - end | |
| 213 | - end.uniq | |
| 214 | - end | |
| 215 | -end |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/gmail.rb
| ... | ... | @@ -1,35 +0,0 @@ |
| 1 | -require 'gdata' | |
| 2 | - | |
| 3 | -class Contacts | |
| 4 | - class Gmail < Base | |
| 5 | - | |
| 6 | - CONTACTS_SCOPE = 'http://www.google.com/m8/feeds/' | |
| 7 | - CONTACTS_FEED = CONTACTS_SCOPE + 'contacts/default/full/?max-results=1000' | |
| 8 | - | |
| 9 | - def contacts | |
| 10 | - return @contacts if @contacts | |
| 11 | - end | |
| 12 | - | |
| 13 | - def real_connect | |
| 14 | - @client = GData::Client::Contacts.new | |
| 15 | - @client.clientlogin(@login, @password) | |
| 16 | - | |
| 17 | - feed = @client.get(CONTACTS_FEED).to_xml | |
| 18 | - | |
| 19 | - @contacts = feed.elements.to_a('entry').collect do |entry| | |
| 20 | - title, email = entry.elements['title'].text, nil | |
| 21 | - entry.elements.each('gd:email') do |e| | |
| 22 | - email = e.attribute('address').value if e.attribute('primary') | |
| 23 | - end | |
| 24 | - [title, email] unless email.nil? | |
| 25 | - end | |
| 26 | - @contacts.compact! | |
| 27 | - rescue GData::Client::AuthorizationError => e | |
| 28 | - raise AuthenticationError, "Username or password are incorrect" | |
| 29 | - end | |
| 30 | - | |
| 31 | - private | |
| 32 | - | |
| 33 | - TYPES[:gmail] = Gmail | |
| 34 | - end | |
| 35 | -end | |
| 36 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/hotmail.rb
| ... | ... | @@ -1,124 +0,0 @@ |
| 1 | -class Contacts | |
| 2 | - class Hotmail < Base | |
| 3 | - URL = "https://login.live.com/login.srf?id=2" | |
| 4 | - OLD_CONTACT_LIST_URL = "http://%s/cgi-bin/addresses" | |
| 5 | - NEW_CONTACT_LIST_URL = "http://%s/mail/GetContacts.aspx" | |
| 6 | - CONTACT_LIST_URL = "http://mpeople.live.com/default.aspx?pg=0" | |
| 7 | - COMPOSE_URL = "http://%s/cgi-bin/compose?" | |
| 8 | - PROTOCOL_ERROR = "Hotmail has changed its protocols, please upgrade this library first. If that does not work, report this error at http://rubyforge.org/forum/?group_id=2693" | |
| 9 | - PWDPAD = "IfYouAreReadingThisYouHaveTooMuchFreeTime" | |
| 10 | - MAX_HTTP_THREADS = 8 | |
| 11 | - | |
| 12 | - def real_connect | |
| 13 | - data, resp, cookies, forward = get(URL) | |
| 14 | - old_url = URL | |
| 15 | - until forward.nil? | |
| 16 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 17 | - end | |
| 18 | - | |
| 19 | - postdata = "PPSX=%s&PwdPad=%s&login=%s&passwd=%s&LoginOptions=2&PPFT=%s" % [ | |
| 20 | - CGI.escape(data.split("><").grep(/PPSX/).first[/=\S+$/][2..-3]), | |
| 21 | - PWDPAD[0...(PWDPAD.length-@password.length)], | |
| 22 | - CGI.escape(login), | |
| 23 | - CGI.escape(password), | |
| 24 | - CGI.escape(data.split("><").grep(/PPFT/).first[/=\S+$/][2..-3]) | |
| 25 | - ] | |
| 26 | - | |
| 27 | - form_url = data.split("><").grep(/form/).first.split[5][8..-2] | |
| 28 | - data, resp, cookies, forward = post(form_url, postdata, cookies) | |
| 29 | - | |
| 30 | - old_url = form_url | |
| 31 | - until cookies =~ /; PPAuth=/ || forward.nil? | |
| 32 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 33 | - end | |
| 34 | - | |
| 35 | - if data.index("The e-mail address or password is incorrect") | |
| 36 | - raise AuthenticationError, "Username and password do not match" | |
| 37 | - elsif data != "" | |
| 38 | - raise AuthenticationError, "Required field must not be blank" | |
| 39 | - elsif cookies == "" | |
| 40 | - raise ConnectionError, PROTOCOL_ERROR | |
| 41 | - end | |
| 42 | - | |
| 43 | - data, resp, cookies, forward = get("http://mail.live.com/mail", cookies) | |
| 44 | - until forward.nil? | |
| 45 | - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 46 | - end | |
| 47 | - | |
| 48 | - @domain = URI.parse(old_url).host | |
| 49 | - @cookies = cookies | |
| 50 | - rescue AuthenticationError => m | |
| 51 | - if @attempt == 1 | |
| 52 | - retry | |
| 53 | - else | |
| 54 | - raise m | |
| 55 | - end | |
| 56 | - end | |
| 57 | - | |
| 58 | - def contacts(options = {}) | |
| 59 | - if connected? | |
| 60 | - url = URI.parse(contact_list_url) | |
| 61 | - data, resp, cookies, forward = get( contact_list_url, @cookies ) | |
| 62 | - | |
| 63 | - if resp.code_type != Net::HTTPOK | |
| 64 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 65 | - end | |
| 66 | - | |
| 67 | - @contacts = [] | |
| 68 | - build_contacts = [] | |
| 69 | - go = true | |
| 70 | - index = 0 | |
| 71 | - | |
| 72 | - while(go) do | |
| 73 | - go = false | |
| 74 | - url = URI.parse(get_contact_list_url(index)) | |
| 75 | - http = open_http(url) | |
| 76 | - resp, data = http.get(get_contact_list_url(index), "Cookie" => @cookies) | |
| 77 | - | |
| 78 | - email_match_text_beginning = Regexp.escape("http://m.mail.live.com/?rru=compose&to=") | |
| 79 | - email_match_text_end = Regexp.escape("&") | |
| 80 | - | |
| 81 | - raw_html = resp.body.grep(/(?:e|dn)lk[0-9]+/) | |
| 82 | - raw_html.delete_at 0 | |
| 83 | - raw_html.inject do |memo, row| | |
| 84 | - c_info = row.match(/(e|dn)lk([0-9])+/) | |
| 85 | - | |
| 86 | - # Same contact, or different? | |
| 87 | - build_contacts << [] if memo != c_info[2] | |
| 88 | - | |
| 89 | - # Grab info | |
| 90 | - case c_info[1] | |
| 91 | - when "e" # Email | |
| 92 | - build_contacts.last[1] = row.match(/#{email_match_text_beginning}(.*)#{email_match_text_end}/)[1] | |
| 93 | - when "dn" # Name | |
| 94 | - build_contacts.last[0] = row.match(/<a[^>]*>(.+)<\/a>/)[1] | |
| 95 | - end | |
| 96 | - | |
| 97 | - # Set memo to contact id | |
| 98 | - c_info[2] | |
| 99 | - end | |
| 100 | - | |
| 101 | - go = resp.body.include?("Next page") | |
| 102 | - index += 1 | |
| 103 | - end | |
| 104 | - | |
| 105 | - build_contacts.each do |contact| | |
| 106 | - unless contact[1].nil? | |
| 107 | - # Only return contacts with email addresses | |
| 108 | - contact[1] = CGI::unescape(contact[1]) | |
| 109 | - @contacts << contact | |
| 110 | - end | |
| 111 | - end | |
| 112 | - return @contacts | |
| 113 | - end | |
| 114 | - end | |
| 115 | - | |
| 116 | - def get_contact_list_url(index) | |
| 117 | - "http://mpeople.live.com/default.aspx?pg=#{index}" | |
| 118 | - end | |
| 119 | - | |
| 120 | - private | |
| 121 | - | |
| 122 | - TYPES[:hotmail] = Hotmail | |
| 123 | - end | |
| 124 | -end | |
| 125 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/json_picker.rb
| ... | ... | @@ -1,16 +0,0 @@ |
| 1 | -if !Object.const_defined?('ActiveSupport') | |
| 2 | - require 'json' | |
| 3 | -end | |
| 4 | - | |
| 5 | -class Contacts | |
| 6 | - def self.parse_json( string ) | |
| 7 | - if Object.const_defined?('ActiveSupport') and | |
| 8 | - ActiveSupport.const_defined?('JSON') | |
| 9 | - ActiveSupport::JSON.decode( string ) | |
| 10 | - elsif Object.const_defined?('JSON') | |
| 11 | - JSON.parse( string ) | |
| 12 | - else | |
| 13 | - raise 'Contacts requires JSON or Rails (with ActiveSupport::JSON)' | |
| 14 | - end | |
| 15 | - end | |
| 16 | -end | |
| 17 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/plaxo.rb
| ... | ... | @@ -1,130 +0,0 @@ |
| 1 | -require 'rexml/document' | |
| 2 | - | |
| 3 | -class Contacts | |
| 4 | - class Plaxo < Base | |
| 5 | - URL = "http://www.plaxo.com/" | |
| 6 | - LOGIN_URL = "https://www.plaxo.com/signin" | |
| 7 | - ADDRESS_BOOK_URL = "http://www.plaxo.com/po3/?module=ab&operation=viewFull&mode=normal" | |
| 8 | - CONTACT_LIST_URL = "http://www.plaxo.com/axis/soap/contact?_action=getContacts&_format=xml" | |
| 9 | - PROTOCOL_ERROR = "Plaxo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 10 | - | |
| 11 | - def real_connect | |
| 12 | - | |
| 13 | - end # real_connect | |
| 14 | - | |
| 15 | - def contacts | |
| 16 | - getdata = "&authInfo.authByEmail.email=%s" % CGI.escape(login) | |
| 17 | - getdata += "&authInfo.authByEmail.password=%s" % CGI.escape(password) | |
| 18 | - data, resp, cookies, forward = get(CONTACT_LIST_URL + getdata) | |
| 19 | - | |
| 20 | - if resp.code_type != Net::HTTPOK | |
| 21 | - raise ConnectionError, PROTOCOL_ERROR | |
| 22 | - end | |
| 23 | - | |
| 24 | - parse data | |
| 25 | - end # contacts | |
| 26 | - | |
| 27 | - private | |
| 28 | - def parse(data, options={}) | |
| 29 | - doc = REXML::Document.new(data) | |
| 30 | - code = doc.elements['//response/code'].text | |
| 31 | - | |
| 32 | - if code == '401' | |
| 33 | - raise AuthenticationError, "Username and password do not match" | |
| 34 | - elsif code == '200' | |
| 35 | - @contacts = [] | |
| 36 | - doc.elements.each('//contact') do |cont| | |
| 37 | - name = if cont.elements['fullName'] | |
| 38 | - cont.elements['fullName'].text | |
| 39 | - elsif cont.elements['displayName'] | |
| 40 | - cont.elements['displayName'].text | |
| 41 | - end | |
| 42 | - email = if cont.elements['email1'] | |
| 43 | - cont.elements['email1'].text | |
| 44 | - end | |
| 45 | - if name || email | |
| 46 | - @contacts << [name, email] | |
| 47 | - end | |
| 48 | - end | |
| 49 | - @contacts | |
| 50 | - else | |
| 51 | - raise ConnectionError, PROTOCOL_ERROR | |
| 52 | - end | |
| 53 | - | |
| 54 | - end # parse | |
| 55 | - | |
| 56 | - end # Plaxo | |
| 57 | - | |
| 58 | - TYPES[:plaxo] = Plaxo | |
| 59 | - | |
| 60 | -end # Contacts | |
| 61 | - | |
| 62 | - | |
| 63 | -# sample contacts responses | |
| 64 | -=begin | |
| 65 | -Bad email | |
| 66 | -========= | |
| 67 | -<?xml version="1.0" encoding="utf-8" ?> | |
| 68 | -<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 69 | - <response> | |
| 70 | - <code>401</code> | |
| 71 | - <subCode>1</subCode> | |
| 72 | - <message>User not found.</message> | |
| 73 | - </response> | |
| 74 | -</ns1:GetContactsResponse> | |
| 75 | - | |
| 76 | - | |
| 77 | -Bad password | |
| 78 | -============ | |
| 79 | -<?xml version="1.0" encoding="utf-8" ?> | |
| 80 | -<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 81 | - <response> | |
| 82 | - <code>401</code> | |
| 83 | - <subCode>4</subCode> | |
| 84 | - <message>Bad password or security token.</message> | |
| 85 | - </response> | |
| 86 | -</ns1:GetContactsResponse> | |
| 87 | - | |
| 88 | - | |
| 89 | -Success | |
| 90 | -======= | |
| 91 | -<?xml version="1.0" encoding="utf-8" ?> | |
| 92 | -<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 93 | - | |
| 94 | - <response> | |
| 95 | - <code>200</code> | |
| 96 | - <message>OK</message> | |
| 97 | - <userId>77311236242</userId> | |
| 98 | - </response> | |
| 99 | - | |
| 100 | - <contacts> | |
| 101 | - | |
| 102 | - <contact> | |
| 103 | - <itemId>61312569</itemId> | |
| 104 | - <displayName>Joe Blow1</displayName> | |
| 105 | - <fullName>Joe Blow1</fullName> | |
| 106 | - <firstName>Joe</firstName> | |
| 107 | - <lastName>Blow1</lastName> | |
| 108 | - <homeEmail1>joeblow1@mailinator.com</homeEmail1> | |
| 109 | - <email1>joeblow1@mailinator.com</email1> | |
| 110 | - <folderId>5291351</folderId> | |
| 111 | - </contact> | |
| 112 | - | |
| 113 | - <contact> | |
| 114 | - <itemId>61313159</itemId> | |
| 115 | - <displayName>Joe Blow2</displayName> | |
| 116 | - <fullName>Joe Blow2</fullName> | |
| 117 | - <firstName>Joe</firstName> | |
| 118 | - <lastName>Blow2</lastName> | |
| 119 | - <homeEmail1>joeblow2@mailinator.com</homeEmail1> | |
| 120 | - <email1>joeblow2@mailinator.com</email1> | |
| 121 | - <folderId>5291351</folderId> | |
| 122 | - </contact> | |
| 123 | - | |
| 124 | - </contacts> | |
| 125 | - | |
| 126 | - <totalCount>2</totalCount> | |
| 127 | - <editCounter>3</editCounter> | |
| 128 | - | |
| 129 | -</ns1:GetContactsResponse> | |
| 130 | -=end | |
| 131 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/yahoo.rb
| ... | ... | @@ -1,109 +0,0 @@ |
| 1 | -class Contacts | |
| 2 | - class Yahoo < Base | |
| 3 | - URL = "http://mail.yahoo.com/" | |
| 4 | - LOGIN_URL = "https://login.yahoo.com/config/login" | |
| 5 | - ADDRESS_BOOK_URL = "http://address.mail.yahoo.com/?.rand=430244936" | |
| 6 | - CONTACT_LIST_URL = "http://address.mail.yahoo.com/?_src=&_crumb=crumb&sortfield=3&bucket=1&scroll=1&VPC=social_list&.r=time" | |
| 7 | - PROTOCOL_ERROR = "Yahoo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 8 | - | |
| 9 | - def real_connect | |
| 10 | - postdata = ".tries=2&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=" | |
| 11 | - postdata += "&.partner=&.u=4eo6isd23l8r3&.v=0&.challenge=gsMsEcoZP7km3N3NeI4mX" | |
| 12 | - postdata += "kGB7zMV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&." | |
| 13 | - postdata += "done=#{CGI.escape(URL)}&login=#{CGI.escape(login)}&passwd=#{CGI.escape(password)}" | |
| 14 | - | |
| 15 | - data, resp, cookies, forward = post(LOGIN_URL, postdata) | |
| 16 | - | |
| 17 | - if data.index("Invalid ID or password") || data.index("This ID is not yet taken") | |
| 18 | - raise AuthenticationError, "Username and password do not match" | |
| 19 | - elsif data.index("Sign in") && data.index("to Yahoo!") | |
| 20 | - raise AuthenticationError, "Required field must not be blank" | |
| 21 | - elsif !data.match(/uncompressed\/chunked/) | |
| 22 | - raise ConnectionError, PROTOCOL_ERROR | |
| 23 | - elsif cookies == "" | |
| 24 | - raise ConnectionError, PROTOCOL_ERROR | |
| 25 | - end | |
| 26 | - | |
| 27 | - data, resp, cookies, forward = get(forward, cookies, LOGIN_URL) | |
| 28 | - | |
| 29 | - if resp.code_type != Net::HTTPOK | |
| 30 | - raise ConnectionError, PROTOCOL_ERROR | |
| 31 | - end | |
| 32 | - | |
| 33 | - @cookies = cookies | |
| 34 | - end | |
| 35 | - | |
| 36 | - def contacts | |
| 37 | - return @contacts if @contacts | |
| 38 | - if connected? | |
| 39 | - # first, get the addressbook site with the new crumb parameter | |
| 40 | - url = URI.parse(address_book_url) | |
| 41 | - http = open_http(url) | |
| 42 | - resp, data = http.get("#{url.path}?#{url.query}", | |
| 43 | - "Cookie" => @cookies | |
| 44 | - ) | |
| 45 | - | |
| 46 | - if resp.code_type != Net::HTTPOK | |
| 47 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 48 | - end | |
| 49 | - | |
| 50 | - crumb = data.to_s[/dotCrumb: '(.*?)'/][13...-1] | |
| 51 | - | |
| 52 | - # now proceed with the new ".crumb" parameter to get the csv data | |
| 53 | - url = URI.parse(contact_list_url.sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2])) | |
| 54 | - http = open_http(url) | |
| 55 | - resp, more_data = http.get("#{url.path}?#{url.query}", | |
| 56 | - "Cookie" => @cookies, | |
| 57 | - "X-Requested-With" => "XMLHttpRequest", | |
| 58 | - "Referer" => address_book_url | |
| 59 | - ) | |
| 60 | - | |
| 61 | - if resp.code_type != Net::HTTPOK | |
| 62 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 63 | - end | |
| 64 | - | |
| 65 | - parse data | |
| 66 | - | |
| 67 | - parse more_data | |
| 68 | - | |
| 69 | - if more_data =~ /"TotalABContacts":(\d+)/ | |
| 70 | - total = $1.to_i | |
| 71 | - ((total / 50)).times do |i| | |
| 72 | - # now proceed with the new ".crumb" parameter to get the csv data | |
| 73 | - url = URI.parse(contact_list_url.sub("bucket=1","bucket=#{i+2}").sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2])) | |
| 74 | - http = open_http(url) | |
| 75 | - resp, more_data = http.get("#{url.path}?#{url.query}", | |
| 76 | - "Cookie" => @cookies, | |
| 77 | - "X-Requested-With" => "XMLHttpRequest", | |
| 78 | - "Referer" => address_book_url | |
| 79 | - ) | |
| 80 | - | |
| 81 | - if resp.code_type != Net::HTTPOK | |
| 82 | - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 83 | - end | |
| 84 | - | |
| 85 | - parse more_data | |
| 86 | - end | |
| 87 | - end | |
| 88 | - | |
| 89 | - @contacts | |
| 90 | - end | |
| 91 | - end | |
| 92 | - | |
| 93 | - private | |
| 94 | - | |
| 95 | - def parse(data, options={}) | |
| 96 | - @contacts ||= [] | |
| 97 | - if data =~ /var InitialContacts = (\[.*?\])/ | |
| 98 | - @contacts += Contacts.parse_json($1).select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]} | |
| 99 | - elsif data =~ /^\{"response":/ | |
| 100 | - @contacts += Contacts.parse_json(data)["response"]["ResultSet"]["Contacts"].to_a.select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]} | |
| 101 | - else | |
| 102 | - @contacts | |
| 103 | - end | |
| 104 | - end | |
| 105 | - | |
| 106 | - end | |
| 107 | - | |
| 108 | - TYPES[:yahoo] = Yahoo | |
| 109 | -end | |
| 110 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/example_accounts.yml
| ... | ... | @@ -1,40 +0,0 @@ |
| 1 | -gmail: | |
| 2 | - username: <changeme> | |
| 3 | - password: <changeme> | |
| 4 | - contacts: | |
| 5 | - - | |
| 6 | - name: "FirstName1 LastName1" | |
| 7 | - email_address: "firstname1@example.com" | |
| 8 | - - | |
| 9 | - name: "FirstName2 LastName2" | |
| 10 | - email_address: "firstname2@example.com" | |
| 11 | -yahoo: | |
| 12 | - username: <changeme> | |
| 13 | - password: <changeme> | |
| 14 | - contacts: | |
| 15 | - - | |
| 16 | - name: "FirstName1 LastName1" | |
| 17 | - email_address: "firstname1@example.com" | |
| 18 | - - | |
| 19 | - name: "FirstName2 LastName2" | |
| 20 | - email_address: "firstname2@example.com" | |
| 21 | -hotmail: | |
| 22 | - username: <changeme> | |
| 23 | - password: <changeme> | |
| 24 | - contacts: | |
| 25 | - - | |
| 26 | - name: "FirstName1 LastName1" | |
| 27 | - email_address: "firstname1@example.com" | |
| 28 | - - | |
| 29 | - name: "FirstName2 LastName2" | |
| 30 | - email_address: "firstname2@example.com" | |
| 31 | -aol: | |
| 32 | - username: <changeme> | |
| 33 | - password: <changeme> | |
| 34 | - contacts: | |
| 35 | - - | |
| 36 | - name: "FirstName1 LastName1" | |
| 37 | - email_address: "firstname1@example.com" | |
| 38 | - - | |
| 39 | - name: "FirstName2 LastName2" | |
| 40 | - email_address: "firstname2@example.com" |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/test_helper.rb
| ... | ... | @@ -1,30 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -$LOAD_PATH.unshift(dir + "/../lib/") | |
| 3 | -require 'test/unit' | |
| 4 | -require 'contacts' | |
| 5 | - | |
| 6 | -class ContactImporterTestCase < Test::Unit::TestCase | |
| 7 | - # Add more helper methods to be used by all tests here... | |
| 8 | - def default_test | |
| 9 | - assert true | |
| 10 | - end | |
| 11 | -end | |
| 12 | - | |
| 13 | -class TestAccounts | |
| 14 | - def self.[](type) | |
| 15 | - load[type] | |
| 16 | - end | |
| 17 | - | |
| 18 | - def self.load(file = File.dirname(__FILE__) + "/accounts.yml") | |
| 19 | - raise "/test/accounts.yml file not found, please create, see /test/example_accounts.yml for information" unless File.exist?(file) | |
| 20 | - | |
| 21 | - accounts = {} | |
| 22 | - YAML::load(File.open(file)).each do |type, contents| | |
| 23 | - contacts = contents["contacts"].collect {|contact| [contact["name"], contact["email_address"]]} | |
| 24 | - accounts[type.to_sym] = Account.new(type.to_sym, contents["username"], contents["password"], contacts) | |
| 25 | - end | |
| 26 | - accounts | |
| 27 | - end | |
| 28 | - | |
| 29 | - Account = Struct.new :type, :username, :password, :contacts | |
| 30 | -end |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/test_suite.rb
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/aol_contact_importer_test.rb
| ... | ... | @@ -1,39 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -require "#{dir}/../test_helper" | |
| 3 | -require 'contacts' | |
| 4 | - | |
| 5 | -class AolContactImporterTest < ContactImporterTestCase | |
| 6 | - def setup | |
| 7 | - super | |
| 8 | - @account = TestAccounts[:aol] | |
| 9 | - end | |
| 10 | - | |
| 11 | - def test_successful_login | |
| 12 | - Contacts.new(:aol, @account.username, @account.password) | |
| 13 | - end | |
| 14 | - | |
| 15 | - def test_importer_fails_with_invalid_password | |
| 16 | - assert_raise(Contacts::AuthenticationError) do | |
| 17 | - Contacts.new(:aol, @account.username, "wrong_password") | |
| 18 | - end | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_importer_fails_with_blank_password | |
| 22 | - assert_raise(Contacts::AuthenticationError) do | |
| 23 | - Contacts.new(:aol, @account.username, "") | |
| 24 | - end | |
| 25 | - end | |
| 26 | - | |
| 27 | - def test_importer_fails_with_blank_username | |
| 28 | - assert_raise(Contacts::AuthenticationError) do | |
| 29 | - Contacts.new(:aol, "", @account.password) | |
| 30 | - end | |
| 31 | - end | |
| 32 | - | |
| 33 | - def test_fetch_contacts | |
| 34 | - contacts = Contacts.new(:aol, @account.username, @account.password).contacts | |
| 35 | - @account.contacts.each do |contact| | |
| 36 | - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 37 | - end | |
| 38 | - end | |
| 39 | -end | |
| 40 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/gmail_contact_importer_test.rb
| ... | ... | @@ -1,39 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -require "#{dir}/../test_helper" | |
| 3 | -require 'contacts' | |
| 4 | - | |
| 5 | -class GmailContactImporterTest < ContactImporterTestCase | |
| 6 | - def setup | |
| 7 | - super | |
| 8 | - @account = TestAccounts[:gmail] | |
| 9 | - end | |
| 10 | - | |
| 11 | - def test_successful_login | |
| 12 | - Contacts.new(:gmail, @account.username, @account.password) | |
| 13 | - end | |
| 14 | - | |
| 15 | - def test_importer_fails_with_invalid_password | |
| 16 | - assert_raise(Contacts::AuthenticationError) do | |
| 17 | - Contacts.new(:gmail, @account.username, "wrong_password") | |
| 18 | - end | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_importer_fails_with_blank_password | |
| 22 | - assert_raise(Contacts::AuthenticationError) do | |
| 23 | - Contacts.new(:gmail, @account.username, "") | |
| 24 | - end | |
| 25 | - end | |
| 26 | - | |
| 27 | - def test_importer_fails_with_blank_username | |
| 28 | - assert_raise(Contacts::AuthenticationError) do | |
| 29 | - Contacts.new(:gmail, "", @account.password) | |
| 30 | - end | |
| 31 | - end | |
| 32 | - | |
| 33 | - def test_fetch_contacts | |
| 34 | - contacts = Contacts.new(:gmail, @account.username, @account.password).contacts | |
| 35 | - @account.contacts.each do |contact| | |
| 36 | - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 37 | - end | |
| 38 | - end | |
| 39 | -end | |
| 40 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/hotmail_contact_importer_test.rb
| ... | ... | @@ -1,41 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -require "#{dir}/../test_helper" | |
| 3 | -require 'contacts' | |
| 4 | - | |
| 5 | -class HotmailContactImporterTest < ContactImporterTestCase | |
| 6 | - def setup | |
| 7 | - super | |
| 8 | - @account = TestAccounts[:hotmail] | |
| 9 | - end | |
| 10 | - | |
| 11 | - def test_successful_login | |
| 12 | - Contacts.new(:hotmail, @account.username, @account.password) | |
| 13 | - end | |
| 14 | - | |
| 15 | - def test_importer_fails_with_invalid_password | |
| 16 | - assert_raise(Contacts::AuthenticationError) do | |
| 17 | - Contacts.new(:hotmail, @account.username,"wrong_password") | |
| 18 | - end | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_fetch_contacts | |
| 22 | - contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts | |
| 23 | - @account.contacts.each do |contact| | |
| 24 | - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 25 | - end | |
| 26 | - end | |
| 27 | - | |
| 28 | - def test_importer_fails_with_invalid_msn_password | |
| 29 | - assert_raise(Contacts::AuthenticationError) do | |
| 30 | - Contacts.new(:hotmail, "test@msn.com","wrong_password") | |
| 31 | - end | |
| 32 | - end | |
| 33 | - | |
| 34 | - # Since the hotmail scraper doesn't read names, test email | |
| 35 | - def test_fetch_email | |
| 36 | - contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts | |
| 37 | - @account.contacts.each do |contact| | |
| 38 | - assert contacts.any?{|book_contact| book_contact.last == contact.last }, "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 39 | - end | |
| 40 | - end | |
| 41 | -end |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/test_accounts_test.rb
| ... | ... | @@ -1,23 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -require "#{dir}/../test_helper" | |
| 3 | - | |
| 4 | -class TestAccountsTest < ContactImporterTestCase | |
| 5 | - def test_test_accounts_loads_data_from_example_accounts_file | |
| 6 | - account = TestAccounts.load(File.dirname(__FILE__) + "/../example_accounts.yml")[:gmail] | |
| 7 | - | |
| 8 | - assert_equal :gmail, account.type | |
| 9 | - assert_equal "<changeme>", account.username | |
| 10 | - assert_equal "<changeme>", account.password | |
| 11 | - assert_equal [["FirstName1 LastName1", "firstname1@example.com"], ["FirstName2 LastName2", "firstname2@example.com"]], account.contacts | |
| 12 | - end | |
| 13 | - | |
| 14 | - def test_test_accounts_blows_up_if_file_doesnt_exist | |
| 15 | - assert_raise(RuntimeError) do | |
| 16 | - TestAccounts.load("file_that_does_not_exist.yml") | |
| 17 | - end | |
| 18 | - end | |
| 19 | - | |
| 20 | - def test_we_can_load_from_account_file | |
| 21 | - assert_not_nil TestAccounts[:gmail].username | |
| 22 | - end | |
| 23 | -end | |
| 24 | 0 | \ No newline at end of file |
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/yahoo_csv_contact_importer_test.rb
| ... | ... | @@ -1,32 +0,0 @@ |
| 1 | -dir = File.dirname(__FILE__) | |
| 2 | -require "#{dir}/../test_helper" | |
| 3 | -require 'contacts' | |
| 4 | - | |
| 5 | -class YahooContactImporterTest < ContactImporterTestCase | |
| 6 | - def setup | |
| 7 | - super | |
| 8 | - @account = TestAccounts[:yahoo] | |
| 9 | - end | |
| 10 | - | |
| 11 | - def test_a_successful_login | |
| 12 | - Contacts.new(:yahoo, @account.username, @account.password) | |
| 13 | - end | |
| 14 | - | |
| 15 | - def test_importer_fails_with_invalid_password | |
| 16 | - assert_raise(Contacts::AuthenticationError) do | |
| 17 | - Contacts.new(:yahoo, @account.username, "wrong_password") | |
| 18 | - end | |
| 19 | - # run the "successful" login test to ensure we reset yahoo's failed login lockout counter | |
| 20 | - # See http://www.pivotaltracker.com/story/show/138210 | |
| 21 | - assert_nothing_raised do | |
| 22 | - Contacts.new(:yahoo, @account.username, @account.password) | |
| 23 | - end | |
| 24 | - end | |
| 25 | - | |
| 26 | - def test_a_fetch_contacts | |
| 27 | - contacts = Contacts.new(:yahoo, @account.username, @account.password).contacts | |
| 28 | - @account.contacts.each do |contact| | |
| 29 | - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 30 | - end | |
| 31 | - end | |
| 32 | -end | |
| 33 | 0 | \ No newline at end of file |
| ... | ... | @@ -0,0 +1,10 @@ |
| 1 | +Copyright (c) 2006, Lucas Carlson, MOG | |
| 2 | +All rights reserved. | |
| 3 | + | |
| 4 | +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |
| 5 | + | |
| 6 | +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |
| 7 | +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |
| 8 | +Neither the name of the Lucas Carlson nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |
| 9 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 10 | + | ... | ... |
| ... | ... | @@ -0,0 +1,47 @@ |
| 1 | +== Welcome to Contacts | |
| 2 | + | |
| 3 | +Contacts is a universal interface to grab contact list information from various providers including Hotmail, AOL, Gmail and Yahoo. | |
| 4 | + | |
| 5 | +== Download | |
| 6 | + | |
| 7 | +* gem install contacts | |
| 8 | +* http://github.com/cardmagic/contacts | |
| 9 | +* git clone git://github.com/cardmagic/contacts.git | |
| 10 | + | |
| 11 | +== Background | |
| 12 | + | |
| 13 | +For a long time, the only way to get a list of contacts from your free online email accounts was with proprietary PHP scripts that would cost you $50. The act of grabbing that list is a simple matter of screen scrapping and this library gives you all the functionality you need. Thanks to the generosity of the highly popular Rails website MOG (http://mog.com) for allowing this library to be released open-source to the world. It is easy to extend this library to add new free email providers, so please contact the author if you would like to help. | |
| 14 | + | |
| 15 | +== Usage | |
| 16 | + | |
| 17 | + Contacts::Hotmail.new(login, password).contacts # => [["name", "foo@bar.com"], ["another name", "bow@wow.com"]] | |
| 18 | + Contacts::Yahoo.new(login, password).contacts | |
| 19 | + Contacts::Gmail.new(login, password).contacts | |
| 20 | + | |
| 21 | + Contacts.new(:gmail, login, password).contacts | |
| 22 | + Contacts.new(:hotmail, login, password).contacts | |
| 23 | + Contacts.new(:yahoo, login, password).contacts | |
| 24 | + | |
| 25 | + Contacts.guess(login, password).contacts | |
| 26 | + | |
| 27 | +Notice there are three ways to use this library so that you can limit the use as much as you would like in your particular application. The Contacts.guess method will automatically concatenate all the address book contacts from each of the successful logins in the case that a username password works across multiple services. | |
| 28 | + | |
| 29 | +== Examples | |
| 30 | + | |
| 31 | +See the examples/ directory. | |
| 32 | + | |
| 33 | +== Authors | |
| 34 | + | |
| 35 | +* Lucas Carlson from MOG (mailto:lucas@rufy.com) - http://mog.com | |
| 36 | + | |
| 37 | +== Contributors | |
| 38 | + | |
| 39 | +* Britt Selvitelle from Twitter (mailto:anotherbritt@gmail.com) - http://twitter.com | |
| 40 | +* Tony Targonski from GigPark (mailto:tony@gigpark.com) - http://gigpark.com | |
| 41 | +* Waheed Barghouthi from Watwet (mailto:waheed.barghouthi@gmail.com) - http://watwet.com | |
| 42 | +* Glenn Sidney from Glenn Fu (mailto:glenn@glennfu.com) - http://glennfu.com | |
| 43 | +* Brian McQuay from Onomojo (mailto:brian@onomojo.com) - http://onomojo.com | |
| 44 | +* Adam Hunter (mailto:adamhunter@me.com) - http://adamhunter.me/ | |
| 45 | + | |
| 46 | +This library is released under the terms of the BSD. | |
| 47 | + | ... | ... |
| ... | ... | @@ -0,0 +1,91 @@ |
| 1 | +require 'rubygems' | |
| 2 | +require 'rake' | |
| 3 | +require 'rake/testtask' | |
| 4 | +require 'rake/rdoctask' | |
| 5 | +require 'rake/gempackagetask' | |
| 6 | +require 'rake/contrib/rubyforgepublisher' | |
| 7 | +require 'lib/contacts' | |
| 8 | + | |
| 9 | +PKG_VERSION = Contacts::VERSION | |
| 10 | + | |
| 11 | +PKG_FILES = FileList[ | |
| 12 | + "lib/**/*", "bin/*", "test/**/*", "[A-Z]*", "Rakefile", "doc/**/*", "examples/**/*" | |
| 13 | +] - ["test/accounts.yml"] | |
| 14 | + | |
| 15 | +desc "Default Task" | |
| 16 | +task :default => [ :test ] | |
| 17 | + | |
| 18 | +# Run the unit tests | |
| 19 | +desc "Run all unit tests" | |
| 20 | +Rake::TestTask.new("test") { |t| | |
| 21 | + t.libs << "lib" | |
| 22 | + t.pattern = 'test/*/*_test.rb' | |
| 23 | + t.verbose = true | |
| 24 | +} | |
| 25 | + | |
| 26 | +# Make a console, useful when working on tests | |
| 27 | +desc "Generate a test console" | |
| 28 | +task :console do | |
| 29 | + verbose( false ) { sh "irb -I lib/ -r 'contacts'" } | |
| 30 | +end | |
| 31 | + | |
| 32 | +# Genereate the RDoc documentation | |
| 33 | +desc "Create documentation" | |
| 34 | +Rake::RDocTask.new("doc") { |rdoc| | |
| 35 | + rdoc.title = "Contact List - ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail" | |
| 36 | + rdoc.rdoc_dir = 'doc' | |
| 37 | + rdoc.rdoc_files.include('README') | |
| 38 | + rdoc.rdoc_files.include('lib/**/*.rb') | |
| 39 | +} | |
| 40 | + | |
| 41 | +# Genereate the package | |
| 42 | +spec = Gem::Specification.new do |s| | |
| 43 | + | |
| 44 | + #### Basic information. | |
| 45 | + | |
| 46 | + s.name = 'adamhunter-contacts' | |
| 47 | + s.version = PKG_VERSION | |
| 48 | + s.summary = <<-EOF | |
| 49 | + Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail | |
| 50 | + EOF | |
| 51 | + s.description = <<-EOF | |
| 52 | + Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail | |
| 53 | + EOF | |
| 54 | + | |
| 55 | + #### Which files are to be included in this gem? Everything! (Except CVS directories.) | |
| 56 | + | |
| 57 | + s.files = PKG_FILES | |
| 58 | + | |
| 59 | + #### Load-time details: library and application (you will need one or both). | |
| 60 | + | |
| 61 | + s.require_path = 'lib' | |
| 62 | + s.autorequire = 'contacts' | |
| 63 | + | |
| 64 | + s.add_dependency('json', '>= 0.4.1') | |
| 65 | + s.add_dependency('gdata', '= 1.1.1') | |
| 66 | + s.requirements << "A json parser, the gdata ruby gem" | |
| 67 | + | |
| 68 | + #### Documentation and testing. | |
| 69 | + | |
| 70 | + s.has_rdoc = true | |
| 71 | + | |
| 72 | + #### Author and project details. | |
| 73 | + | |
| 74 | + s.author = "Lucas Carlson" | |
| 75 | + s.email = "lucas@rufy.com" | |
| 76 | + s.homepage = "http://rubyforge.org/projects/contacts" | |
| 77 | +end | |
| 78 | + | |
| 79 | +Rake::GemPackageTask.new(spec) do |pkg| | |
| 80 | + pkg.need_zip = true | |
| 81 | + pkg.need_tar = true | |
| 82 | +end | |
| 83 | + | |
| 84 | +desc "Report code statistics (KLOCs, etc) from the application" | |
| 85 | +task :stats do | |
| 86 | + require 'code_statistics' | |
| 87 | + CodeStatistics.new( | |
| 88 | + ["Library", "lib"], | |
| 89 | + ["Units", "test"] | |
| 90 | + ).to_s | |
| 91 | +end | |
| 0 | 92 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +Gem::Specification.new do |s| | |
| 2 | + s.name = "contacts" | |
| 3 | + s.version = "1.2.0" | |
| 4 | + s.date = "2009-05-06" | |
| 5 | + s.summary = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo." | |
| 6 | + s.email = "lucas@rufy.com" | |
| 7 | + s.homepage = "http://github.com/cardmagic/contacts" | |
| 8 | + s.description = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo." | |
| 9 | + s.has_rdoc = false | |
| 10 | + s.authors = ["Lucas Carlson"] | |
| 11 | + s.files = ["LICENSE", "Rakefile", "README", "examples/grab_contacts.rb", "lib/contacts.rb", "lib/contacts/base.rb", "lib/contacts/json_picker.rb", "lib/contacts/gmail.rb", "lib/contacts/aol.rb", "lib/contacts/hotmail.rb", "lib/contacts/plaxo.rb", "lib/contacts/yahoo.rb"] | |
| 12 | + s.add_dependency("json", ">= 1.1.1") | |
| 13 | + s.add_dependency('gdata', '>= 1.1.1') | |
| 14 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,22 @@ |
| 1 | +# Project-specific configuration for CruiseControl.rb | |
| 2 | + | |
| 3 | +Project.configure do |project| | |
| 4 | + | |
| 5 | + # Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody) | |
| 6 | + # if building this on your own CI box, please remove! | |
| 7 | + project.email_notifier.emails = ['opensource@pivotallabs.com'] | |
| 8 | + | |
| 9 | + # Set email 'from' field to john@doe.com: | |
| 10 | + # project.email_notifier.from = 'john@doe.com' | |
| 11 | + | |
| 12 | + # Build the project by invoking rake task 'custom' | |
| 13 | + # project.rake_task = 'custom' | |
| 14 | + | |
| 15 | + # Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked, current working directory is | |
| 16 | + # [cruise]/projects/your_project/work, so if you do not keep build_my_app.sh in version control, it should be '../build_my_app.sh' instead | |
| 17 | + # project.build_command = 'build_my_app.sh' | |
| 18 | + | |
| 19 | + # Ping Subversion for new revisions every 5 minutes (default: 30 seconds) | |
| 20 | + # project.scheduler.polling_interval = 5.minutes | |
| 21 | + | |
| 22 | +end | |
| 0 | 23 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +require File.dirname(__FILE__)+"/../lib/contacts" | |
| 2 | + | |
| 3 | +login = ARGV[0] | |
| 4 | +password = ARGV[1] | |
| 5 | + | |
| 6 | +Contacts::Gmail.new(login, password).contacts | |
| 7 | + | |
| 8 | +Contacts.new(:gmail, login, password).contacts | |
| 9 | + | |
| 10 | +Contacts.new("gmail", login, password).contacts | |
| 11 | + | |
| 12 | +Contacts.guess(login, password).contacts | |
| 0 | 13 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,147 @@ |
| 1 | +class Hash | |
| 2 | + def to_query_string | |
| 3 | + u = ERB::Util.method(:u) | |
| 4 | + map { |k, v| | |
| 5 | + u.call(k) + "=" + u.call(v) | |
| 6 | + }.join("&") | |
| 7 | + end | |
| 8 | +end | |
| 9 | + | |
| 10 | +class Contacts | |
| 11 | + class Aol < Base | |
| 12 | + URL = "http://www.aol.com/" | |
| 13 | + LOGIN_URL = "https://my.screenname.aol.com/_cqr/login/login.psp" | |
| 14 | + LOGIN_REFERER_URL = "http://webmail.aol.com/" | |
| 15 | + LOGIN_REFERER_PATH = "sitedomain=sns.webmail.aol.com&lang=en&locale=us&authLev=0&uitype=mini&loginId=&redirType=js&xchk=false" | |
| 16 | + AOL_NUM = "29970-343" # this seems to change each time they change the protocol | |
| 17 | + | |
| 18 | + CONTACT_LIST_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ContactList.aspx?folder=Inbox&showUserFolders=False" | |
| 19 | + CONTACT_LIST_CSV_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ABExport.aspx?command=all" | |
| 20 | + PROTOCOL_ERROR = "AOL has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 21 | + | |
| 22 | + def real_connect | |
| 23 | + | |
| 24 | + postdata = { | |
| 25 | + "loginId" => login, | |
| 26 | + "password" => password, | |
| 27 | + "rememberMe" => "on", | |
| 28 | + "_sns_fg_color_" => "", | |
| 29 | + "_sns_err_color_" => "", | |
| 30 | + "_sns_link_color_" => "", | |
| 31 | + "_sns_width_" => "", | |
| 32 | + "_sns_height_" => "", | |
| 33 | + "offerId" => "mail-second-en-us", | |
| 34 | + "_sns_bg_color_" => "", | |
| 35 | + "sitedomain" => "sns.webmail.aol.com", | |
| 36 | + "regPromoCode" => "", | |
| 37 | + "mcState" => "initialized", | |
| 38 | + "uitype" => "std", | |
| 39 | + "siteId" => "", | |
| 40 | + "lang" => "en", | |
| 41 | + "locale" => "us", | |
| 42 | + "authLev" => "0", | |
| 43 | + "siteState" => "", | |
| 44 | + "isSiteStateEncoded" => "false", | |
| 45 | + "use_aam" => "0", | |
| 46 | + "seamless" => "novl", | |
| 47 | + "aolsubmit" => CGI.escape("Sign In"), | |
| 48 | + "idType" => "SN", | |
| 49 | + "usrd" => "", | |
| 50 | + "doSSL" => "", | |
| 51 | + "redirType" => "", | |
| 52 | + "xchk" => "false" | |
| 53 | + } | |
| 54 | + | |
| 55 | + # Get this cookie and stick it in the form to confirm to Aol that your cookies work | |
| 56 | + data, resp, cookies, forward = get(URL) | |
| 57 | + postdata["stips"] = cookie_hash_from_string(cookies)["stips"] | |
| 58 | + postdata["tst"] = cookie_hash_from_string(cookies)["tst"] | |
| 59 | + | |
| 60 | + data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL] | |
| 61 | + until forward.nil? | |
| 62 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 63 | + end | |
| 64 | + | |
| 65 | + data, resp, cookies, forward, old_url = get("#{LOGIN_URL}?#{LOGIN_REFERER_PATH}", cookies) + [LOGIN_REFERER_URL] | |
| 66 | + until forward.nil? | |
| 67 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 68 | + end | |
| 69 | + | |
| 70 | + doc = Nokogiri::HTML.fragment data | |
| 71 | + doc.css('input').each do |input| | |
| 72 | + postdata["usrd"] = input["value"] if input["name"] == "usrd" | |
| 73 | + end | |
| 74 | + # parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata | |
| 75 | + | |
| 76 | + postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"] | |
| 77 | + postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"] | |
| 78 | + postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"] | |
| 79 | + # raise data.inspect | |
| 80 | + | |
| 81 | + data, resp, cookies, forward, old_url = post(LOGIN_URL, postdata.to_query_string, cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL] | |
| 82 | + | |
| 83 | + until forward.nil? | |
| 84 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 85 | + end | |
| 86 | + | |
| 87 | + if data.index("Invalid Screen Name or Password.") | |
| 88 | + raise AuthenticationError, "Username and password do not match" | |
| 89 | + elsif data.index("Required field must not be blank") | |
| 90 | + raise AuthenticationError, "Login and password must not be blank" | |
| 91 | + elsif data.index("errormsg_0_logincaptcha") | |
| 92 | + raise AuthenticationError, "Captcha error" | |
| 93 | + elsif data.index("Invalid request") | |
| 94 | + raise ConnectionError, PROTOCOL_ERROR | |
| 95 | + elsif cookies == "" | |
| 96 | + raise ConnectionError, PROTOCOL_ERROR | |
| 97 | + end | |
| 98 | + | |
| 99 | + @cookies = cookies | |
| 100 | + end | |
| 101 | + | |
| 102 | + def contacts | |
| 103 | + postdata = { | |
| 104 | + "file" => 'contacts', | |
| 105 | + "fileType" => 'csv' | |
| 106 | + } | |
| 107 | + | |
| 108 | + return @contacts if @contacts | |
| 109 | + if connected? | |
| 110 | + data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] | |
| 111 | + | |
| 112 | + until forward.nil? | |
| 113 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 114 | + end | |
| 115 | + | |
| 116 | + if resp.code_type != Net::HTTPOK | |
| 117 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 118 | + end | |
| 119 | + | |
| 120 | + # parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden"> | |
| 121 | + doc = Nokogiri::HTML.fragment data | |
| 122 | + doc.css('input').each do |input| | |
| 123 | + postdata["user"] = input["value"] if input["name"] == "user" | |
| 124 | + end | |
| 125 | + | |
| 126 | + data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] | |
| 127 | + | |
| 128 | + if forward.nil? | |
| 129 | + parse data | |
| 130 | + else | |
| 131 | + raise AuthenticationError, "Account cancelled" | |
| 132 | + end | |
| 133 | + end | |
| 134 | + end | |
| 135 | + private | |
| 136 | + | |
| 137 | + def parse(data, options={}) | |
| 138 | + data = CSV.parse(data) | |
| 139 | + col_names = data.shift | |
| 140 | + @contacts = data.map do |person| | |
| 141 | + ["#{person[0]} #{person[1]}", person[4]] unless person[4].empty? | |
| 142 | + end.compact | |
| 143 | + end | |
| 144 | + end | |
| 145 | + | |
| 146 | + TYPES[:aol] = Aol | |
| 147 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,215 @@ |
| 1 | +require "cgi" | |
| 2 | +require "net/http" | |
| 3 | +require "net/https" | |
| 4 | +require "uri" | |
| 5 | +require "zlib" | |
| 6 | +require "stringio" | |
| 7 | +require "thread" | |
| 8 | +require "erb" | |
| 9 | + | |
| 10 | +class Contacts | |
| 11 | + TYPES = {} | |
| 12 | + VERSION = "1.2.0" | |
| 13 | + | |
| 14 | + class Base | |
| 15 | + def initialize(login, password) | |
| 16 | + @login = login | |
| 17 | + @password = password | |
| 18 | + @connections = {} | |
| 19 | + connect | |
| 20 | + end | |
| 21 | + | |
| 22 | + def connect | |
| 23 | + raise AuthenticationError, "Login and password must not be nil, login: #{@login.inspect}, password: #{@password.inspect}" if @login.nil? || @login.empty? || @password.nil? || @password.empty? | |
| 24 | + real_connect | |
| 25 | + end | |
| 26 | + | |
| 27 | + def connected? | |
| 28 | + @cookies && !@cookies.empty? | |
| 29 | + end | |
| 30 | + | |
| 31 | + def contacts(options = {}) | |
| 32 | + return @contacts if @contacts | |
| 33 | + if connected? | |
| 34 | + url = URI.parse(contact_list_url) | |
| 35 | + http = open_http(url) | |
| 36 | + resp, data = http.get("#{url.path}?#{url.query}", | |
| 37 | + "Cookie" => @cookies | |
| 38 | + ) | |
| 39 | + | |
| 40 | + if resp.code_type != Net::HTTPOK | |
| 41 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 42 | + end | |
| 43 | + | |
| 44 | + parse(data, options) | |
| 45 | + end | |
| 46 | + end | |
| 47 | + | |
| 48 | + def login | |
| 49 | + @attempt ||= 0 | |
| 50 | + @attempt += 1 | |
| 51 | + | |
| 52 | + if @attempt == 1 | |
| 53 | + @login | |
| 54 | + else | |
| 55 | + if @login.include?("@#{domain}") | |
| 56 | + @login.sub("@#{domain}","") | |
| 57 | + else | |
| 58 | + "#{@login}@#{domain}" | |
| 59 | + end | |
| 60 | + end | |
| 61 | + end | |
| 62 | + | |
| 63 | + def password | |
| 64 | + @password | |
| 65 | + end | |
| 66 | + | |
| 67 | + private | |
| 68 | + | |
| 69 | + def domain | |
| 70 | + @d ||= URI.parse(self.class.const_get(:URL)).host.sub(/^www\./,'') | |
| 71 | + end | |
| 72 | + | |
| 73 | + def contact_list_url | |
| 74 | + self.class.const_get(:CONTACT_LIST_URL) | |
| 75 | + end | |
| 76 | + | |
| 77 | + def address_book_url | |
| 78 | + self.class.const_get(:ADDRESS_BOOK_URL) | |
| 79 | + end | |
| 80 | + | |
| 81 | + def open_http(url) | |
| 82 | + c = @connections[Thread.current.object_id] ||= {} | |
| 83 | + http = c["#{url.host}:#{url.port}"] | |
| 84 | + unless http | |
| 85 | + http = Net::HTTP.new(url.host, url.port) | |
| 86 | + if url.port == 443 | |
| 87 | + http.use_ssl = true | |
| 88 | + http.verify_mode = OpenSSL::SSL::VERIFY_NONE | |
| 89 | + end | |
| 90 | + c["#{url.host}:#{url.port}"] = http | |
| 91 | + end | |
| 92 | + http.start unless http.started? | |
| 93 | + http | |
| 94 | + end | |
| 95 | + | |
| 96 | + def cookie_hash_from_string(cookie_string) | |
| 97 | + cookie_string.split(";").map{|i|i.split("=", 2).map{|j|j.strip}}.inject({}){|h,i|h[i[0]]=i[1];h} | |
| 98 | + end | |
| 99 | + | |
| 100 | + def parse_cookies(data, existing="") | |
| 101 | + return existing if data.nil? | |
| 102 | + | |
| 103 | + cookies = cookie_hash_from_string(existing) | |
| 104 | + | |
| 105 | + data.gsub!(/ ?[\w]+=EXPIRED;/,'') | |
| 106 | + data.gsub!(/ ?expires=(.*?, .*?)[;,$]/i, ';') | |
| 107 | + data.gsub!(/ ?(domain|path)=[\S]*?[;,$]/i,';') | |
| 108 | + data.gsub!(/[,;]?\s*(secure|httponly)/i,'') | |
| 109 | + data.gsub!(/(;\s*){2,}/,', ') | |
| 110 | + data.gsub!(/(,\s*){2,}/,', ') | |
| 111 | + data.sub!(/^,\s*/,'') | |
| 112 | + data.sub!(/\s*,$/,'') | |
| 113 | + | |
| 114 | + data.split(", ").map{|t|t.to_s.split(";").first}.each do |data| | |
| 115 | + k, v = data.split("=", 2).map{|j|j.strip} | |
| 116 | + if cookies[k] && v.empty? | |
| 117 | + cookies.delete(k) | |
| 118 | + elsif v && !v.empty? | |
| 119 | + cookies[k] = v | |
| 120 | + end | |
| 121 | + end | |
| 122 | + | |
| 123 | + cookies.map{|k,v| "#{k}=#{v}"}.join("; ") | |
| 124 | + end | |
| 125 | + | |
| 126 | + def remove_cookie(cookie, cookies) | |
| 127 | + parse_cookies("#{cookie}=", cookies) | |
| 128 | + end | |
| 129 | + | |
| 130 | + def post(url, postdata, cookies="", referer="") | |
| 131 | + url = URI.parse(url) | |
| 132 | + http = open_http(url) | |
| 133 | + resp, data = http.post(url.path, postdata, | |
| 134 | + "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0", | |
| 135 | + "Accept-Encoding" => "gzip", | |
| 136 | + "Cookie" => cookies, | |
| 137 | + "Referer" => referer, | |
| 138 | + "Content-Type" => 'application/x-www-form-urlencoded' | |
| 139 | + ) | |
| 140 | + data = uncompress(resp, data) | |
| 141 | + cookies = parse_cookies(resp.response['set-cookie'], cookies) | |
| 142 | + forward = resp.response['Location'] | |
| 143 | + forward ||= (data =~ /<meta.*?url='([^']+)'/ ? CGI.unescapeHTML($1) : nil) | |
| 144 | + if (not forward.nil?) && URI.parse(forward).host.nil? | |
| 145 | + forward = url.scheme.to_s + "://" + url.host.to_s + forward | |
| 146 | + end | |
| 147 | + return data, resp, cookies, forward | |
| 148 | + end | |
| 149 | + | |
| 150 | + def get(url, cookies="", referer="") | |
| 151 | + url = URI.parse(url) | |
| 152 | + http = open_http(url) | |
| 153 | + resp, data = http.get("#{url.path}?#{url.query}", | |
| 154 | + "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0", | |
| 155 | + "Accept-Encoding" => "gzip", | |
| 156 | + "Cookie" => cookies, | |
| 157 | + "Referer" => referer | |
| 158 | + ) | |
| 159 | + data = uncompress(resp, data) | |
| 160 | + cookies = parse_cookies(resp.response['set-cookie'], cookies) | |
| 161 | + forward = resp.response['Location'] | |
| 162 | + if (not forward.nil?) && URI.parse(forward).host.nil? | |
| 163 | + forward = url.scheme.to_s + "://" + url.host.to_s + forward | |
| 164 | + end | |
| 165 | + return data, resp, cookies, forward | |
| 166 | + end | |
| 167 | + | |
| 168 | + def uncompress(resp, data) | |
| 169 | + case resp.response['content-encoding'] | |
| 170 | + when 'gzip' | |
| 171 | + gz = Zlib::GzipReader.new(StringIO.new(data)) | |
| 172 | + data = gz.read | |
| 173 | + gz.close | |
| 174 | + resp.response['content-encoding'] = nil | |
| 175 | + # FIXME: Not sure what Hotmail was feeding me with their 'deflate', | |
| 176 | + # but the headers definitely were not right | |
| 177 | + when 'deflate' | |
| 178 | + data = Zlib::Inflate.inflate(data) | |
| 179 | + resp.response['content-encoding'] = nil | |
| 180 | + end | |
| 181 | + | |
| 182 | + data | |
| 183 | + end | |
| 184 | + end | |
| 185 | + | |
| 186 | + class ContactsError < StandardError | |
| 187 | + end | |
| 188 | + | |
| 189 | + class AuthenticationError < ContactsError | |
| 190 | + end | |
| 191 | + | |
| 192 | + class ConnectionError < ContactsError | |
| 193 | + end | |
| 194 | + | |
| 195 | + class TypeNotFound < ContactsError | |
| 196 | + end | |
| 197 | + | |
| 198 | + def self.new(type, login, password) | |
| 199 | + if TYPES.include?(type.to_s.intern) | |
| 200 | + TYPES[type.to_s.intern].new(login, password) | |
| 201 | + else | |
| 202 | + raise TypeNotFound, "#{type.inspect} is not a valid type, please choose one of the following: #{TYPES.keys.inspect}" | |
| 203 | + end | |
| 204 | + end | |
| 205 | + | |
| 206 | + def self.guess(login, password) | |
| 207 | + TYPES.inject([]) do |a, t| | |
| 208 | + begin | |
| 209 | + a + t[1].new(login, password).contacts | |
| 210 | + rescue AuthenticationError | |
| 211 | + a | |
| 212 | + end | |
| 213 | + end.uniq | |
| 214 | + end | |
| 215 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,35 @@ |
| 1 | +require 'gdata' | |
| 2 | + | |
| 3 | +class Contacts | |
| 4 | + class Gmail < Base | |
| 5 | + | |
| 6 | + CONTACTS_SCOPE = 'http://www.google.com/m8/feeds/' | |
| 7 | + CONTACTS_FEED = CONTACTS_SCOPE + 'contacts/default/full/?max-results=1000' | |
| 8 | + | |
| 9 | + def contacts | |
| 10 | + return @contacts if @contacts | |
| 11 | + end | |
| 12 | + | |
| 13 | + def real_connect | |
| 14 | + @client = GData::Client::Contacts.new | |
| 15 | + @client.clientlogin(@login, @password) | |
| 16 | + | |
| 17 | + feed = @client.get(CONTACTS_FEED).to_xml | |
| 18 | + | |
| 19 | + @contacts = feed.elements.to_a('entry').collect do |entry| | |
| 20 | + title, email = entry.elements['title'].text, nil | |
| 21 | + entry.elements.each('gd:email') do |e| | |
| 22 | + email = e.attribute('address').value if e.attribute('primary') | |
| 23 | + end | |
| 24 | + [title, email] unless email.nil? | |
| 25 | + end | |
| 26 | + @contacts.compact! | |
| 27 | + rescue GData::Client::AuthorizationError => e | |
| 28 | + raise AuthenticationError, "Username or password are incorrect" | |
| 29 | + end | |
| 30 | + | |
| 31 | + private | |
| 32 | + | |
| 33 | + TYPES[:gmail] = Gmail | |
| 34 | + end | |
| 35 | +end | |
| 0 | 36 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,124 @@ |
| 1 | +class Contacts | |
| 2 | + class Hotmail < Base | |
| 3 | + URL = "https://login.live.com/login.srf?id=2" | |
| 4 | + OLD_CONTACT_LIST_URL = "http://%s/cgi-bin/addresses" | |
| 5 | + NEW_CONTACT_LIST_URL = "http://%s/mail/GetContacts.aspx" | |
| 6 | + CONTACT_LIST_URL = "http://mpeople.live.com/default.aspx?pg=0" | |
| 7 | + COMPOSE_URL = "http://%s/cgi-bin/compose?" | |
| 8 | + PROTOCOL_ERROR = "Hotmail has changed its protocols, please upgrade this library first. If that does not work, report this error at http://rubyforge.org/forum/?group_id=2693" | |
| 9 | + PWDPAD = "IfYouAreReadingThisYouHaveTooMuchFreeTime" | |
| 10 | + MAX_HTTP_THREADS = 8 | |
| 11 | + | |
| 12 | + def real_connect | |
| 13 | + data, resp, cookies, forward = get(URL) | |
| 14 | + old_url = URL | |
| 15 | + until forward.nil? | |
| 16 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 17 | + end | |
| 18 | + | |
| 19 | + postdata = "PPSX=%s&PwdPad=%s&login=%s&passwd=%s&LoginOptions=2&PPFT=%s" % [ | |
| 20 | + CGI.escape(data.split("><").grep(/PPSX/).first[/=\S+$/][2..-3]), | |
| 21 | + PWDPAD[0...(PWDPAD.length-@password.length)], | |
| 22 | + CGI.escape(login), | |
| 23 | + CGI.escape(password), | |
| 24 | + CGI.escape(data.split("><").grep(/PPFT/).first[/=\S+$/][2..-3]) | |
| 25 | + ] | |
| 26 | + | |
| 27 | + form_url = data.split("><").grep(/form/).first.split[5][8..-2] | |
| 28 | + data, resp, cookies, forward = post(form_url, postdata, cookies) | |
| 29 | + | |
| 30 | + old_url = form_url | |
| 31 | + until cookies =~ /; PPAuth=/ || forward.nil? | |
| 32 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 33 | + end | |
| 34 | + | |
| 35 | + if data.index("The e-mail address or password is incorrect") | |
| 36 | + raise AuthenticationError, "Username and password do not match" | |
| 37 | + elsif data != "" | |
| 38 | + raise AuthenticationError, "Required field must not be blank" | |
| 39 | + elsif cookies == "" | |
| 40 | + raise ConnectionError, PROTOCOL_ERROR | |
| 41 | + end | |
| 42 | + | |
| 43 | + data, resp, cookies, forward = get("http://mail.live.com/mail", cookies) | |
| 44 | + until forward.nil? | |
| 45 | + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] | |
| 46 | + end | |
| 47 | + | |
| 48 | + @domain = URI.parse(old_url).host | |
| 49 | + @cookies = cookies | |
| 50 | + rescue AuthenticationError => m | |
| 51 | + if @attempt == 1 | |
| 52 | + retry | |
| 53 | + else | |
| 54 | + raise m | |
| 55 | + end | |
| 56 | + end | |
| 57 | + | |
| 58 | + def contacts(options = {}) | |
| 59 | + if connected? | |
| 60 | + url = URI.parse(contact_list_url) | |
| 61 | + data, resp, cookies, forward = get( contact_list_url, @cookies ) | |
| 62 | + | |
| 63 | + if resp.code_type != Net::HTTPOK | |
| 64 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 65 | + end | |
| 66 | + | |
| 67 | + @contacts = [] | |
| 68 | + build_contacts = [] | |
| 69 | + go = true | |
| 70 | + index = 0 | |
| 71 | + | |
| 72 | + while(go) do | |
| 73 | + go = false | |
| 74 | + url = URI.parse(get_contact_list_url(index)) | |
| 75 | + http = open_http(url) | |
| 76 | + resp, data = http.get(get_contact_list_url(index), "Cookie" => @cookies) | |
| 77 | + | |
| 78 | + email_match_text_beginning = Regexp.escape("http://m.mail.live.com/?rru=compose&to=") | |
| 79 | + email_match_text_end = Regexp.escape("&") | |
| 80 | + | |
| 81 | + raw_html = resp.body.grep(/(?:e|dn)lk[0-9]+/) | |
| 82 | + raw_html.delete_at 0 | |
| 83 | + raw_html.inject do |memo, row| | |
| 84 | + c_info = row.match(/(e|dn)lk([0-9])+/) | |
| 85 | + | |
| 86 | + # Same contact, or different? | |
| 87 | + build_contacts << [] if memo != c_info[2] | |
| 88 | + | |
| 89 | + # Grab info | |
| 90 | + case c_info[1] | |
| 91 | + when "e" # Email | |
| 92 | + build_contacts.last[1] = row.match(/#{email_match_text_beginning}(.*)#{email_match_text_end}/)[1] | |
| 93 | + when "dn" # Name | |
| 94 | + build_contacts.last[0] = row.match(/<a[^>]*>(.+)<\/a>/)[1] | |
| 95 | + end | |
| 96 | + | |
| 97 | + # Set memo to contact id | |
| 98 | + c_info[2] | |
| 99 | + end | |
| 100 | + | |
| 101 | + go = resp.body.include?("Next page") | |
| 102 | + index += 1 | |
| 103 | + end | |
| 104 | + | |
| 105 | + build_contacts.each do |contact| | |
| 106 | + unless contact[1].nil? | |
| 107 | + # Only return contacts with email addresses | |
| 108 | + contact[1] = CGI::unescape(contact[1]) | |
| 109 | + @contacts << contact | |
| 110 | + end | |
| 111 | + end | |
| 112 | + return @contacts | |
| 113 | + end | |
| 114 | + end | |
| 115 | + | |
| 116 | + def get_contact_list_url(index) | |
| 117 | + "http://mpeople.live.com/default.aspx?pg=#{index}" | |
| 118 | + end | |
| 119 | + | |
| 120 | + private | |
| 121 | + | |
| 122 | + TYPES[:hotmail] = Hotmail | |
| 123 | + end | |
| 124 | +end | |
| 0 | 125 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +if !Object.const_defined?('ActiveSupport') | |
| 2 | + require 'json' | |
| 3 | +end | |
| 4 | + | |
| 5 | +class Contacts | |
| 6 | + def self.parse_json( string ) | |
| 7 | + if Object.const_defined?('ActiveSupport') and | |
| 8 | + ActiveSupport.const_defined?('JSON') | |
| 9 | + ActiveSupport::JSON.decode( string ) | |
| 10 | + elsif Object.const_defined?('JSON') | |
| 11 | + JSON.parse( string ) | |
| 12 | + else | |
| 13 | + raise 'Contacts requires JSON or Rails (with ActiveSupport::JSON)' | |
| 14 | + end | |
| 15 | + end | |
| 16 | +end | |
| 0 | 17 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,130 @@ |
| 1 | +require 'rexml/document' | |
| 2 | + | |
| 3 | +class Contacts | |
| 4 | + class Plaxo < Base | |
| 5 | + URL = "http://www.plaxo.com/" | |
| 6 | + LOGIN_URL = "https://www.plaxo.com/signin" | |
| 7 | + ADDRESS_BOOK_URL = "http://www.plaxo.com/po3/?module=ab&operation=viewFull&mode=normal" | |
| 8 | + CONTACT_LIST_URL = "http://www.plaxo.com/axis/soap/contact?_action=getContacts&_format=xml" | |
| 9 | + PROTOCOL_ERROR = "Plaxo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 10 | + | |
| 11 | + def real_connect | |
| 12 | + | |
| 13 | + end # real_connect | |
| 14 | + | |
| 15 | + def contacts | |
| 16 | + getdata = "&authInfo.authByEmail.email=%s" % CGI.escape(login) | |
| 17 | + getdata += "&authInfo.authByEmail.password=%s" % CGI.escape(password) | |
| 18 | + data, resp, cookies, forward = get(CONTACT_LIST_URL + getdata) | |
| 19 | + | |
| 20 | + if resp.code_type != Net::HTTPOK | |
| 21 | + raise ConnectionError, PROTOCOL_ERROR | |
| 22 | + end | |
| 23 | + | |
| 24 | + parse data | |
| 25 | + end # contacts | |
| 26 | + | |
| 27 | + private | |
| 28 | + def parse(data, options={}) | |
| 29 | + doc = REXML::Document.new(data) | |
| 30 | + code = doc.elements['//response/code'].text | |
| 31 | + | |
| 32 | + if code == '401' | |
| 33 | + raise AuthenticationError, "Username and password do not match" | |
| 34 | + elsif code == '200' | |
| 35 | + @contacts = [] | |
| 36 | + doc.elements.each('//contact') do |cont| | |
| 37 | + name = if cont.elements['fullName'] | |
| 38 | + cont.elements['fullName'].text | |
| 39 | + elsif cont.elements['displayName'] | |
| 40 | + cont.elements['displayName'].text | |
| 41 | + end | |
| 42 | + email = if cont.elements['email1'] | |
| 43 | + cont.elements['email1'].text | |
| 44 | + end | |
| 45 | + if name || email | |
| 46 | + @contacts << [name, email] | |
| 47 | + end | |
| 48 | + end | |
| 49 | + @contacts | |
| 50 | + else | |
| 51 | + raise ConnectionError, PROTOCOL_ERROR | |
| 52 | + end | |
| 53 | + | |
| 54 | + end # parse | |
| 55 | + | |
| 56 | + end # Plaxo | |
| 57 | + | |
| 58 | + TYPES[:plaxo] = Plaxo | |
| 59 | + | |
| 60 | +end # Contacts | |
| 61 | + | |
| 62 | + | |
| 63 | +# sample contacts responses | |
| 64 | +=begin | |
| 65 | +Bad email | |
| 66 | +========= | |
| 67 | +<?xml version="1.0" encoding="utf-8" ?> | |
| 68 | +<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 69 | + <response> | |
| 70 | + <code>401</code> | |
| 71 | + <subCode>1</subCode> | |
| 72 | + <message>User not found.</message> | |
| 73 | + </response> | |
| 74 | +</ns1:GetContactsResponse> | |
| 75 | + | |
| 76 | + | |
| 77 | +Bad password | |
| 78 | +============ | |
| 79 | +<?xml version="1.0" encoding="utf-8" ?> | |
| 80 | +<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 81 | + <response> | |
| 82 | + <code>401</code> | |
| 83 | + <subCode>4</subCode> | |
| 84 | + <message>Bad password or security token.</message> | |
| 85 | + </response> | |
| 86 | +</ns1:GetContactsResponse> | |
| 87 | + | |
| 88 | + | |
| 89 | +Success | |
| 90 | +======= | |
| 91 | +<?xml version="1.0" encoding="utf-8" ?> | |
| 92 | +<ns1:GetContactsResponse xmlns:ns1="Plaxo"> | |
| 93 | + | |
| 94 | + <response> | |
| 95 | + <code>200</code> | |
| 96 | + <message>OK</message> | |
| 97 | + <userId>77311236242</userId> | |
| 98 | + </response> | |
| 99 | + | |
| 100 | + <contacts> | |
| 101 | + | |
| 102 | + <contact> | |
| 103 | + <itemId>61312569</itemId> | |
| 104 | + <displayName>Joe Blow1</displayName> | |
| 105 | + <fullName>Joe Blow1</fullName> | |
| 106 | + <firstName>Joe</firstName> | |
| 107 | + <lastName>Blow1</lastName> | |
| 108 | + <homeEmail1>joeblow1@mailinator.com</homeEmail1> | |
| 109 | + <email1>joeblow1@mailinator.com</email1> | |
| 110 | + <folderId>5291351</folderId> | |
| 111 | + </contact> | |
| 112 | + | |
| 113 | + <contact> | |
| 114 | + <itemId>61313159</itemId> | |
| 115 | + <displayName>Joe Blow2</displayName> | |
| 116 | + <fullName>Joe Blow2</fullName> | |
| 117 | + <firstName>Joe</firstName> | |
| 118 | + <lastName>Blow2</lastName> | |
| 119 | + <homeEmail1>joeblow2@mailinator.com</homeEmail1> | |
| 120 | + <email1>joeblow2@mailinator.com</email1> | |
| 121 | + <folderId>5291351</folderId> | |
| 122 | + </contact> | |
| 123 | + | |
| 124 | + </contacts> | |
| 125 | + | |
| 126 | + <totalCount>2</totalCount> | |
| 127 | + <editCounter>3</editCounter> | |
| 128 | + | |
| 129 | +</ns1:GetContactsResponse> | |
| 130 | +=end | |
| 0 | 131 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,109 @@ |
| 1 | +class Contacts | |
| 2 | + class Yahoo < Base | |
| 3 | + URL = "http://mail.yahoo.com/" | |
| 4 | + LOGIN_URL = "https://login.yahoo.com/config/login" | |
| 5 | + ADDRESS_BOOK_URL = "http://address.mail.yahoo.com/?.rand=430244936" | |
| 6 | + CONTACT_LIST_URL = "http://address.mail.yahoo.com/?_src=&_crumb=crumb&sortfield=3&bucket=1&scroll=1&VPC=social_list&.r=time" | |
| 7 | + PROTOCOL_ERROR = "Yahoo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts" | |
| 8 | + | |
| 9 | + def real_connect | |
| 10 | + postdata = ".tries=2&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=" | |
| 11 | + postdata += "&.partner=&.u=4eo6isd23l8r3&.v=0&.challenge=gsMsEcoZP7km3N3NeI4mX" | |
| 12 | + postdata += "kGB7zMV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&." | |
| 13 | + postdata += "done=#{CGI.escape(URL)}&login=#{CGI.escape(login)}&passwd=#{CGI.escape(password)}" | |
| 14 | + | |
| 15 | + data, resp, cookies, forward = post(LOGIN_URL, postdata) | |
| 16 | + | |
| 17 | + if data.index("Invalid ID or password") || data.index("This ID is not yet taken") | |
| 18 | + raise AuthenticationError, "Username and password do not match" | |
| 19 | + elsif data.index("Sign in") && data.index("to Yahoo!") | |
| 20 | + raise AuthenticationError, "Required field must not be blank" | |
| 21 | + elsif !data.match(/uncompressed\/chunked/) | |
| 22 | + raise ConnectionError, PROTOCOL_ERROR | |
| 23 | + elsif cookies == "" | |
| 24 | + raise ConnectionError, PROTOCOL_ERROR | |
| 25 | + end | |
| 26 | + | |
| 27 | + data, resp, cookies, forward = get(forward, cookies, LOGIN_URL) | |
| 28 | + | |
| 29 | + if resp.code_type != Net::HTTPOK | |
| 30 | + raise ConnectionError, PROTOCOL_ERROR | |
| 31 | + end | |
| 32 | + | |
| 33 | + @cookies = cookies | |
| 34 | + end | |
| 35 | + | |
| 36 | + def contacts | |
| 37 | + return @contacts if @contacts | |
| 38 | + if connected? | |
| 39 | + # first, get the addressbook site with the new crumb parameter | |
| 40 | + url = URI.parse(address_book_url) | |
| 41 | + http = open_http(url) | |
| 42 | + resp, data = http.get("#{url.path}?#{url.query}", | |
| 43 | + "Cookie" => @cookies | |
| 44 | + ) | |
| 45 | + | |
| 46 | + if resp.code_type != Net::HTTPOK | |
| 47 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 48 | + end | |
| 49 | + | |
| 50 | + crumb = data.to_s[/dotCrumb: '(.*?)'/][13...-1] | |
| 51 | + | |
| 52 | + # now proceed with the new ".crumb" parameter to get the csv data | |
| 53 | + url = URI.parse(contact_list_url.sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2])) | |
| 54 | + http = open_http(url) | |
| 55 | + resp, more_data = http.get("#{url.path}?#{url.query}", | |
| 56 | + "Cookie" => @cookies, | |
| 57 | + "X-Requested-With" => "XMLHttpRequest", | |
| 58 | + "Referer" => address_book_url | |
| 59 | + ) | |
| 60 | + | |
| 61 | + if resp.code_type != Net::HTTPOK | |
| 62 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 63 | + end | |
| 64 | + | |
| 65 | + parse data | |
| 66 | + | |
| 67 | + parse more_data | |
| 68 | + | |
| 69 | + if more_data =~ /"TotalABContacts":(\d+)/ | |
| 70 | + total = $1.to_i | |
| 71 | + ((total / 50)).times do |i| | |
| 72 | + # now proceed with the new ".crumb" parameter to get the csv data | |
| 73 | + url = URI.parse(contact_list_url.sub("bucket=1","bucket=#{i+2}").sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2])) | |
| 74 | + http = open_http(url) | |
| 75 | + resp, more_data = http.get("#{url.path}?#{url.query}", | |
| 76 | + "Cookie" => @cookies, | |
| 77 | + "X-Requested-With" => "XMLHttpRequest", | |
| 78 | + "Referer" => address_book_url | |
| 79 | + ) | |
| 80 | + | |
| 81 | + if resp.code_type != Net::HTTPOK | |
| 82 | + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) | |
| 83 | + end | |
| 84 | + | |
| 85 | + parse more_data | |
| 86 | + end | |
| 87 | + end | |
| 88 | + | |
| 89 | + @contacts | |
| 90 | + end | |
| 91 | + end | |
| 92 | + | |
| 93 | + private | |
| 94 | + | |
| 95 | + def parse(data, options={}) | |
| 96 | + @contacts ||= [] | |
| 97 | + if data =~ /var InitialContacts = (\[.*?\])/ | |
| 98 | + @contacts += Contacts.parse_json($1).select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]} | |
| 99 | + elsif data =~ /^\{"response":/ | |
| 100 | + @contacts += Contacts.parse_json(data)["response"]["ResultSet"]["Contacts"].to_a.select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]} | |
| 101 | + else | |
| 102 | + @contacts | |
| 103 | + end | |
| 104 | + end | |
| 105 | + | |
| 106 | + end | |
| 107 | + | |
| 108 | + TYPES[:yahoo] = Yahoo | |
| 109 | +end | |
| 0 | 110 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,40 @@ |
| 1 | +gmail: | |
| 2 | + username: <changeme> | |
| 3 | + password: <changeme> | |
| 4 | + contacts: | |
| 5 | + - | |
| 6 | + name: "FirstName1 LastName1" | |
| 7 | + email_address: "firstname1@example.com" | |
| 8 | + - | |
| 9 | + name: "FirstName2 LastName2" | |
| 10 | + email_address: "firstname2@example.com" | |
| 11 | +yahoo: | |
| 12 | + username: <changeme> | |
| 13 | + password: <changeme> | |
| 14 | + contacts: | |
| 15 | + - | |
| 16 | + name: "FirstName1 LastName1" | |
| 17 | + email_address: "firstname1@example.com" | |
| 18 | + - | |
| 19 | + name: "FirstName2 LastName2" | |
| 20 | + email_address: "firstname2@example.com" | |
| 21 | +hotmail: | |
| 22 | + username: <changeme> | |
| 23 | + password: <changeme> | |
| 24 | + contacts: | |
| 25 | + - | |
| 26 | + name: "FirstName1 LastName1" | |
| 27 | + email_address: "firstname1@example.com" | |
| 28 | + - | |
| 29 | + name: "FirstName2 LastName2" | |
| 30 | + email_address: "firstname2@example.com" | |
| 31 | +aol: | |
| 32 | + username: <changeme> | |
| 33 | + password: <changeme> | |
| 34 | + contacts: | |
| 35 | + - | |
| 36 | + name: "FirstName1 LastName1" | |
| 37 | + email_address: "firstname1@example.com" | |
| 38 | + - | |
| 39 | + name: "FirstName2 LastName2" | |
| 40 | + email_address: "firstname2@example.com" | ... | ... |
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +$LOAD_PATH.unshift(dir + "/../lib/") | |
| 3 | +require 'test/unit' | |
| 4 | +require 'contacts' | |
| 5 | + | |
| 6 | +class ContactImporterTestCase < Test::Unit::TestCase | |
| 7 | + # Add more helper methods to be used by all tests here... | |
| 8 | + def default_test | |
| 9 | + assert true | |
| 10 | + end | |
| 11 | +end | |
| 12 | + | |
| 13 | +class TestAccounts | |
| 14 | + def self.[](type) | |
| 15 | + load[type] | |
| 16 | + end | |
| 17 | + | |
| 18 | + def self.load(file = File.dirname(__FILE__) + "/accounts.yml") | |
| 19 | + raise "/test/accounts.yml file not found, please create, see /test/example_accounts.yml for information" unless File.exist?(file) | |
| 20 | + | |
| 21 | + accounts = {} | |
| 22 | + YAML::load(File.open(file)).each do |type, contents| | |
| 23 | + contacts = contents["contacts"].collect {|contact| [contact["name"], contact["email_address"]]} | |
| 24 | + accounts[type.to_sym] = Account.new(type.to_sym, contents["username"], contents["password"], contacts) | |
| 25 | + end | |
| 26 | + accounts | |
| 27 | + end | |
| 28 | + | |
| 29 | + Account = Struct.new :type, :username, :password, :contacts | |
| 30 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,39 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +require "#{dir}/../test_helper" | |
| 3 | +require 'contacts' | |
| 4 | + | |
| 5 | +class AolContactImporterTest < ContactImporterTestCase | |
| 6 | + def setup | |
| 7 | + super | |
| 8 | + @account = TestAccounts[:aol] | |
| 9 | + end | |
| 10 | + | |
| 11 | + def test_successful_login | |
| 12 | + Contacts.new(:aol, @account.username, @account.password) | |
| 13 | + end | |
| 14 | + | |
| 15 | + def test_importer_fails_with_invalid_password | |
| 16 | + assert_raise(Contacts::AuthenticationError) do | |
| 17 | + Contacts.new(:aol, @account.username, "wrong_password") | |
| 18 | + end | |
| 19 | + end | |
| 20 | + | |
| 21 | + def test_importer_fails_with_blank_password | |
| 22 | + assert_raise(Contacts::AuthenticationError) do | |
| 23 | + Contacts.new(:aol, @account.username, "") | |
| 24 | + end | |
| 25 | + end | |
| 26 | + | |
| 27 | + def test_importer_fails_with_blank_username | |
| 28 | + assert_raise(Contacts::AuthenticationError) do | |
| 29 | + Contacts.new(:aol, "", @account.password) | |
| 30 | + end | |
| 31 | + end | |
| 32 | + | |
| 33 | + def test_fetch_contacts | |
| 34 | + contacts = Contacts.new(:aol, @account.username, @account.password).contacts | |
| 35 | + @account.contacts.each do |contact| | |
| 36 | + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 37 | + end | |
| 38 | + end | |
| 39 | +end | |
| 0 | 40 | \ No newline at end of file | ... | ... |
vendor/contacts/test/unit/gmail_contact_importer_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,39 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +require "#{dir}/../test_helper" | |
| 3 | +require 'contacts' | |
| 4 | + | |
| 5 | +class GmailContactImporterTest < ContactImporterTestCase | |
| 6 | + def setup | |
| 7 | + super | |
| 8 | + @account = TestAccounts[:gmail] | |
| 9 | + end | |
| 10 | + | |
| 11 | + def test_successful_login | |
| 12 | + Contacts.new(:gmail, @account.username, @account.password) | |
| 13 | + end | |
| 14 | + | |
| 15 | + def test_importer_fails_with_invalid_password | |
| 16 | + assert_raise(Contacts::AuthenticationError) do | |
| 17 | + Contacts.new(:gmail, @account.username, "wrong_password") | |
| 18 | + end | |
| 19 | + end | |
| 20 | + | |
| 21 | + def test_importer_fails_with_blank_password | |
| 22 | + assert_raise(Contacts::AuthenticationError) do | |
| 23 | + Contacts.new(:gmail, @account.username, "") | |
| 24 | + end | |
| 25 | + end | |
| 26 | + | |
| 27 | + def test_importer_fails_with_blank_username | |
| 28 | + assert_raise(Contacts::AuthenticationError) do | |
| 29 | + Contacts.new(:gmail, "", @account.password) | |
| 30 | + end | |
| 31 | + end | |
| 32 | + | |
| 33 | + def test_fetch_contacts | |
| 34 | + contacts = Contacts.new(:gmail, @account.username, @account.password).contacts | |
| 35 | + @account.contacts.each do |contact| | |
| 36 | + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 37 | + end | |
| 38 | + end | |
| 39 | +end | |
| 0 | 40 | \ No newline at end of file | ... | ... |
vendor/contacts/test/unit/hotmail_contact_importer_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,41 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +require "#{dir}/../test_helper" | |
| 3 | +require 'contacts' | |
| 4 | + | |
| 5 | +class HotmailContactImporterTest < ContactImporterTestCase | |
| 6 | + def setup | |
| 7 | + super | |
| 8 | + @account = TestAccounts[:hotmail] | |
| 9 | + end | |
| 10 | + | |
| 11 | + def test_successful_login | |
| 12 | + Contacts.new(:hotmail, @account.username, @account.password) | |
| 13 | + end | |
| 14 | + | |
| 15 | + def test_importer_fails_with_invalid_password | |
| 16 | + assert_raise(Contacts::AuthenticationError) do | |
| 17 | + Contacts.new(:hotmail, @account.username,"wrong_password") | |
| 18 | + end | |
| 19 | + end | |
| 20 | + | |
| 21 | + def test_fetch_contacts | |
| 22 | + contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts | |
| 23 | + @account.contacts.each do |contact| | |
| 24 | + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 25 | + end | |
| 26 | + end | |
| 27 | + | |
| 28 | + def test_importer_fails_with_invalid_msn_password | |
| 29 | + assert_raise(Contacts::AuthenticationError) do | |
| 30 | + Contacts.new(:hotmail, "test@msn.com","wrong_password") | |
| 31 | + end | |
| 32 | + end | |
| 33 | + | |
| 34 | + # Since the hotmail scraper doesn't read names, test email | |
| 35 | + def test_fetch_email | |
| 36 | + contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts | |
| 37 | + @account.contacts.each do |contact| | |
| 38 | + assert contacts.any?{|book_contact| book_contact.last == contact.last }, "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 39 | + end | |
| 40 | + end | |
| 41 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,23 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +require "#{dir}/../test_helper" | |
| 3 | + | |
| 4 | +class TestAccountsTest < ContactImporterTestCase | |
| 5 | + def test_test_accounts_loads_data_from_example_accounts_file | |
| 6 | + account = TestAccounts.load(File.dirname(__FILE__) + "/../example_accounts.yml")[:gmail] | |
| 7 | + | |
| 8 | + assert_equal :gmail, account.type | |
| 9 | + assert_equal "<changeme>", account.username | |
| 10 | + assert_equal "<changeme>", account.password | |
| 11 | + assert_equal [["FirstName1 LastName1", "firstname1@example.com"], ["FirstName2 LastName2", "firstname2@example.com"]], account.contacts | |
| 12 | + end | |
| 13 | + | |
| 14 | + def test_test_accounts_blows_up_if_file_doesnt_exist | |
| 15 | + assert_raise(RuntimeError) do | |
| 16 | + TestAccounts.load("file_that_does_not_exist.yml") | |
| 17 | + end | |
| 18 | + end | |
| 19 | + | |
| 20 | + def test_we_can_load_from_account_file | |
| 21 | + assert_not_nil TestAccounts[:gmail].username | |
| 22 | + end | |
| 23 | +end | |
| 0 | 24 | \ No newline at end of file | ... | ... |
vendor/contacts/test/unit/yahoo_csv_contact_importer_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | +dir = File.dirname(__FILE__) | |
| 2 | +require "#{dir}/../test_helper" | |
| 3 | +require 'contacts' | |
| 4 | + | |
| 5 | +class YahooContactImporterTest < ContactImporterTestCase | |
| 6 | + def setup | |
| 7 | + super | |
| 8 | + @account = TestAccounts[:yahoo] | |
| 9 | + end | |
| 10 | + | |
| 11 | + def test_a_successful_login | |
| 12 | + Contacts.new(:yahoo, @account.username, @account.password) | |
| 13 | + end | |
| 14 | + | |
| 15 | + def test_importer_fails_with_invalid_password | |
| 16 | + assert_raise(Contacts::AuthenticationError) do | |
| 17 | + Contacts.new(:yahoo, @account.username, "wrong_password") | |
| 18 | + end | |
| 19 | + # run the "successful" login test to ensure we reset yahoo's failed login lockout counter | |
| 20 | + # See http://www.pivotaltracker.com/story/show/138210 | |
| 21 | + assert_nothing_raised do | |
| 22 | + Contacts.new(:yahoo, @account.username, @account.password) | |
| 23 | + end | |
| 24 | + end | |
| 25 | + | |
| 26 | + def test_a_fetch_contacts | |
| 27 | + contacts = Contacts.new(:yahoo, @account.username, @account.password).contacts | |
| 28 | + @account.contacts.each do |contact| | |
| 29 | + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}" | |
| 30 | + end | |
| 31 | + end | |
| 32 | +end | |
| 0 | 33 | \ No newline at end of file | ... | ... |
vendor/ezcrypto-0.7.2/._CHANGELOG
No preview for this file type
vendor/ezcrypto-0.7.2/._MIT-LICENSE
No preview for this file type
vendor/ezcrypto-0.7.2/._README.rdoc
No preview for this file type
vendor/ezcrypto-0.7.2/._README_ACTIVE_CRYPTO
No preview for this file type
vendor/ezcrypto-0.7.2/._rakefile
No preview for this file type
vendor/ezcrypto-0.7.2/CHANGELOG
| ... | ... | @@ -1,85 +0,0 @@ |
| 1 | -0.7.2 March, 2009 support for base64 encrypted attributes in ActiveCrypto (Micah Wedemeyer) | |
| 2 | - | |
| 3 | -0.7 September 12th, 2006 PKYP services support | |
| 4 | - | |
| 5 | -Marking the release of http://pkyp.org a new no nonsense Public Key directory, this allows you register your public keys and certificates on a public server. If you have web applications with certificates or public keys you can point your users at http://pkyp.org/{key.digest} for more info about a certificate. | |
| 6 | - | |
| 7 | -Register a public key or certificate at PKYP with the new method register_with_pkyp like this: | |
| 8 | - | |
| 9 | - signer=EzCrypto::Signer.generate | |
| 10 | - signer.verifier.register_with_pkyp | |
| 11 | - | |
| 12 | -If you have the public key or certificate digest you can fetch the full public key or certificate like this: | |
| 13 | - | |
| 14 | - verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a" | |
| 15 | - verifier.verify sig, request_text | |
| 16 | - | |
| 17 | -This allows a simpler way of transfering certificates. The idea of including certificates with every request is not really necessary in an online world. For example you could pass the digest in a HTTP header for a REST web services request. | |
| 18 | - | |
| 19 | -0.6.2 August 15th, 2006 Trust something release | |
| 20 | - | |
| 21 | -Now comes complete with a fairly trusted list of root certs as extracted from Apple's keystore. With the addition of CACerts and GoDaddy SSL Certs (Buy from http://widecert.net). If you feel any important ones are missing let me know. | |
| 22 | - | |
| 23 | -You can create a trust store from this with TrustStore.default_trusted. Note many of these CA's are useless and you shouldn't really trust them, but this makes it easy to emulate the browsers support. | |
| 24 | - | |
| 25 | -0.6.1 August 14th, 2006 Subject!=Issuer bug fix | |
| 26 | - | |
| 27 | -I discovered a not so little bug in the certificate handling. The issuer method of the Certificate mistakenly returned the subject. | |
| 28 | - | |
| 29 | -0.6 August 10th, 2006 Certified PKI release | |
| 30 | - | |
| 31 | -Finally I have had a good reason http://www.tractis.com to add Digital Signature support to EzCrypto. We have support for RSA and DSA private and public keys as well as basic X509 certificate support. All in typical EzCrypto simple Ruby like methods. | |
| 32 | - | |
| 33 | -KNOWN PROBLEM. The DSA Signer.public_key method has some sort of problem but will be fixed for 0.6.1. | |
| 34 | - | |
| 35 | -0.5 July 19th, 2006 Good citizen release | |
| 36 | - | |
| 37 | -I have cleaned up the ActiveCrypto namespaces. It now does not use ActiveRecord::Crypto, but ActiveCrypto::*, if you have called stuff directly please update your code. | |
| 38 | - | |
| 39 | -The reason for this is to really be a good citizen in the world of rails and not unnecessarily pollute the ActiveRecord name space. | |
| 40 | - | |
| 41 | -I have also created much more thorough unit tests and refactored some things that did not work in version 0.4 that the world thankfully did not see. | |
| 42 | - | |
| 43 | -0.4 Flawed internal release | |
| 44 | - | |
| 45 | -0.3 February 25th, 2006 new encrypted file support by Dirk (dirk.barnikel@gmx.de) Thanks Dirk. | |
| 46 | - | |
| 47 | -* Added test case for the file-related stuff. file-stuff | |
| 48 | - seems to work fine | |
| 49 | - | |
| 50 | -* Replaced hard coded IO buffersize (512) with class attribute | |
| 51 | - Key#block_size and default value. | |
| 52 | - | |
| 53 | -* Modification to create {De,En}crypters only via the factory methods | |
| 54 | - Key#{de,en}crypter. | |
| 55 | - | |
| 56 | -* Added Key#{de,en}crypt_file methods that take a file and de- or encrypts it. | |
| 57 | - | |
| 58 | -* The methods are implemented to call the cipher with small chunks of data (512 bytes) to keep memory usage low. | |
| 59 | - | |
| 60 | -* By default, the original file is first overwritten and then removed. | |
| 61 | - | |
| 62 | -* This overwrite is not really safe but should make it harder to restore the data of the removed file from the filesystem. | |
| 63 | - | |
| 64 | -* Added Key#{store,load} methods that read and write Key data to/from files. | |
| 65 | - | |
| 66 | -* Added Key#safe_{create,delete,read} methods to encapsulate the handling of files inside EzCrypto. | |
| 67 | - | |
| 68 | -0.2.2 January 4th, 2006 Bug fixes and unit tests for active_crypto | |
| 69 | - | |
| 70 | -There were some serious problems with ActiveCrypto's support for having keys in associated classes. I also added unit tests to active_crypto. The support code was brutaly stolen from Rick Olson's acts_as_paranoid library. Unfortunately I disabled the schema stuff for now, but will add it in the next release, which hopefully is soon. | |
| 71 | - | |
| 72 | -0.2.1 November 2nd, 2005 New method in KeyHolder | |
| 73 | - | |
| 74 | -Added set_encoded_key(enc) to KeyHolder for setting a key with the Base64 encoded keyvalue. | |
| 75 | - | |
| 76 | -0.2 October 30th, 2005 Ruby on Rails integration | |
| 77 | - | |
| 78 | -As promised I have now included my first version of ActiveCrypto the crypto layer for ActiveRecord and Ruby on Rails. | |
| 79 | - | |
| 80 | -0.1.1 August 27, 2005 Minor fixes | |
| 81 | - | |
| 82 | -Thanks to Jason Vasquez mugatu at mugfu dot com for noticing that Key#to_s | |
| 83 | -called the nonexistent encoded method. | |
| 84 | - | |
| 85 | -I also made a few slight changes to the documentation. |
vendor/ezcrypto-0.7.2/MIT-LICENSE
| ... | ... | @@ -1,21 +0,0 @@ |
| 1 | -Copyright (c) 2004 David Heinemeier Hansson | |
| 2 | - | |
| 3 | -Permission is hereby granted, free of charge, to any person obtaining | |
| 4 | -a copy of this software and associated documentation files (the | |
| 5 | -"Software"), to deal in the Software without restriction, including | |
| 6 | -without limitation the rights to use, copy, modify, merge, publish, | |
| 7 | -distribute, sublicense, and/or sell copies of the Software, and to | |
| 8 | -permit persons to whom the Software is furnished to do so, subject to | |
| 9 | -the following conditions: | |
| 10 | - | |
| 11 | -The above copyright notice and this permission notice shall be | |
| 12 | -included in all copies or substantial portions of the Software. | |
| 13 | - | |
| 14 | -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| 15 | -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| 16 | -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| 17 | -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
| 18 | -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
| 19 | -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
| 20 | -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| 21 | - |
vendor/ezcrypto-0.7.2/README.rdoc
| ... | ... | @@ -1,152 +0,0 @@ |
| 1 | -= EzCrypto - Easy to use Crypto for Ruby | |
| 2 | - | |
| 3 | -EzCrypto is an easy to use wrapper around the poorly documented OpenSSL ruby library. | |
| 4 | - | |
| 5 | -== Features | |
| 6 | - | |
| 7 | -* Defaults to AES 128 CBC | |
| 8 | -* Will use the systems OpenSSL library for transparent hardware crypto support | |
| 9 | -* Single class object oriented access to most commonly used features | |
| 10 | -* Ruby like | |
| 11 | - | |
| 12 | -== Installation | |
| 13 | - | |
| 14 | -Download it from here: | |
| 15 | - | |
| 16 | -http://rubyforge.org/frs/?group_id=755 | |
| 17 | - | |
| 18 | -or install it via Ruby Gems: | |
| 19 | - | |
| 20 | - gem install ezcrypto | |
| 21 | - | |
| 22 | -== Simple examples | |
| 23 | - | |
| 24 | -==== To encrypt: | |
| 25 | - | |
| 26 | -Generate a key using a password and a salt. Use the keys encrypt method to encrypt a strings worth of data: | |
| 27 | - | |
| 28 | - @key=EzCrypto::Key.with_password "password", "system salt" | |
| 29 | - @encrypted=@key.encrypt "Top secret should not be revealed" | |
| 30 | - | |
| 31 | -==== To decrypt: | |
| 32 | - | |
| 33 | -Same procedure as encrypt. Generate a key using a password and a salt. Use the keys decrypt method to decrypt a strings worth of data: | |
| 34 | - | |
| 35 | - @key=EzCrypto::Key.with_password "password", "system salt" | |
| 36 | - @key.decrypt @encrypted | |
| 37 | - | |
| 38 | -==== One liners: | |
| 39 | - | |
| 40 | -These simple examples use one line each: | |
| 41 | - | |
| 42 | - @encrypted=EzCrypto::Key.encrypt_with_password "password", @salt,"Top secret should not be revealed" | |
| 43 | - | |
| 44 | - EzCrypto::Key.decrypt_with_password "password", @salt,@encrypted | |
| 45 | - | |
| 46 | -== Keys | |
| 47 | - | |
| 48 | -The only class you need to know for most uses og EzCrypto is the Key class. You don't need understand ciphers or the encryption life cycle. | |
| 49 | - | |
| 50 | -==== Generating a random key | |
| 51 | - | |
| 52 | -The most secure type of key is the randomly generated key: | |
| 53 | - | |
| 54 | - @key=EzCrypto::Key.generate | |
| 55 | - | |
| 56 | -==== Initializing a key with raw key data | |
| 57 | - | |
| 58 | -If you already have a key from some other source, you simply have to call the constructor with the raw data: | |
| 59 | - | |
| 60 | - @key=EzCrypto::Key.new @binarykey | |
| 61 | - | |
| 62 | -==== Initializing a Key with a Base64 encoded key | |
| 63 | - | |
| 64 | -As seen above you can create a key from a password. This should be used if you don't want the key to be stored on disk for example: | |
| 65 | - | |
| 66 | - @key=EzCrypto::Key.with_password "Secret password" | |
| 67 | - | |
| 68 | -==== Initializing a Key with a Base64 encoded key | |
| 69 | - | |
| 70 | -If you already have a key from some other source in the popular Base64 encoded format, you use the decode class method: | |
| 71 | - | |
| 72 | - @key=EzCrypto::Key.decode @binarykey | |
| 73 | - | |
| 74 | -==== Exporting the key | |
| 75 | - | |
| 76 | -To export or save a key use the encode method (or to_s) method for a Base64 encoded key or raw as the raw binary data. | |
| 77 | - | |
| 78 | - puts @key.encode | |
| 79 | - puts @key.raw | |
| 80 | - | |
| 81 | -The raw method could be used for storing in a database using a tinyblob column. | |
| 82 | - | |
| 83 | -== Encryption and Decryption | |
| 84 | - | |
| 85 | -EzCrypto is optimized for simple encryption and decryption of strings. There are encrypt/decrypt pairs for normal binary use as well as for Base64 encoded use. | |
| 86 | - | |
| 87 | -==== Regular raw use | |
| 88 | - | |
| 89 | -Assuming you have generated a key using one of the above methods: | |
| 90 | - | |
| 91 | - @encrypted=@key.encrypt("clear text") | |
| 92 | - @decrypted=@key.decrypt(@encrypted) | |
| 93 | - assert "clear text", @decrypted | |
| 94 | - | |
| 95 | -==== Base64 encoded use | |
| 96 | - | |
| 97 | -This uses the encrypt64 and decrypt64 methods. Otherwise it is all the same: | |
| 98 | - | |
| 99 | - @encrypted=@key.encrypt64("clear text") | |
| 100 | - @decrypted=@key.decrypt64(@encrypted) | |
| 101 | - assert "clear text", @decrypted | |
| 102 | - | |
| 103 | -== FAQ | |
| 104 | - | |
| 105 | -=== What algorithm does this use? | |
| 106 | - | |
| 107 | -It uses as the default algorithm the AES 128 bit standard. This is a very fast and highly secure algorithm specified as the national standard in the US. For more information see: | |
| 108 | - | |
| 109 | -http://en.wikipedia.org/wiki/AES | |
| 110 | - | |
| 111 | -=== Only 128 bits. Is that enough? | |
| 112 | - | |
| 113 | -While it might sound like more would make it more secure, there is really no real security advantage for most commercial applications to use more than 128 bit AES. | |
| 114 | - | |
| 115 | -=== What is Base64 encoding? | |
| 116 | - | |
| 117 | -This is the most efficient and commonly used encoding scheme for binary data. This is used amongst other things for email attachments. It is also very common to use it for encrypted data. | |
| 118 | - | |
| 119 | -=== What is a Salt? | |
| 120 | - | |
| 121 | -A salt is just a piece of data we hash in with the password to create the key. If it is a server based application you could use store a salt within your source file. The salt must be the same for both encryption and decryption. | |
| 122 | - | |
| 123 | - | |
| 124 | -== License | |
| 125 | - | |
| 126 | -EzCrypto and ActionCrypto is released under the MIT license. | |
| 127 | - | |
| 128 | - | |
| 129 | -== Support | |
| 130 | - | |
| 131 | -To contact the author, send mail to pelle@stakeventures.com | |
| 132 | - | |
| 133 | -Also see my blogs at: | |
| 134 | -http://stakeventures.com and | |
| 135 | -http://blog.extraeagle.com | |
| 136 | - | |
| 137 | -This project was based on code used in my projects Agree2, WideWord and WideBlog. | |
| 138 | - | |
| 139 | -Agree2 lets you create legal business agreements instantly. | |
| 140 | - | |
| 141 | -https://agree2.com | |
| 142 | - | |
| 143 | -WideWord lets you collaboratively write and share documents that remain 100% encrypted on the server. Only you have the keys: | |
| 144 | - | |
| 145 | -http://wideword.net | |
| 146 | - | |
| 147 | -WideBlog is a secure private blogging system designed for private project blogs. It uses the same encryption technology as WideWord and is very easy to use: | |
| 148 | - | |
| 149 | -http://wideblog.net | |
| 150 | - | |
| 151 | - | |
| 152 | -(C) 2005-2009 Pelle Braendgaard |
vendor/ezcrypto-0.7.2/README_ACTIVE_CRYPTO
| ... | ... | @@ -1,122 +0,0 @@ |
| 1 | -= ActiveCrypto - Easy to use Crypto for Ruby on Rails | |
| 2 | - | |
| 3 | -ActiveCrypto is based on EzCrypto and provides application oriented crypto support for Ruby on Rails applications. | |
| 4 | - | |
| 5 | -== Features | |
| 6 | - | |
| 7 | -* Transparent encryption/decryption | |
| 8 | -* Ruby on Rails like domain language | |
| 9 | - | |
| 10 | -== Installation | |
| 11 | - | |
| 12 | -Download it from here: | |
| 13 | - | |
| 14 | -http://rubyforge.org/frs/?group_id=755 | |
| 15 | - | |
| 16 | -or install it via Ruby Gems: | |
| 17 | - | |
| 18 | - gem install ezruby | |
| 19 | - | |
| 20 | - | |
| 21 | -== Simple examples | |
| 22 | - | |
| 23 | -==== A simple encrypted class | |
| 24 | - | |
| 25 | -You specify in your class which fields are encrypted: | |
| 26 | - | |
| 27 | - class Document < ActiveRecord::Base | |
| 28 | - encrypt :title,:body | |
| 29 | - end | |
| 30 | - | |
| 31 | -Two encrypt it you need to enter a key. For ease of use there is a method called enter_password which sets the key based on a password of your choice. | |
| 32 | - | |
| 33 | - doc=Document.new | |
| 34 | - doc.enter_password "This stuff is secret man!!!" | |
| 35 | - doc.title="Plan to take over the world" | |
| 36 | - doc.body="Write apps in Rails" | |
| 37 | - doc.save | |
| 38 | - | |
| 39 | -This needs to be done as well if you want to read your document: | |
| 40 | - | |
| 41 | - doc=Document.find 1 | |
| 42 | - doc.enter_password "This stuff is secret man!!!" | |
| 43 | - puts doc.name | |
| 44 | - | |
| 45 | -If you don't remember to set a key it will through a MissingKeyError. | |
| 46 | - | |
| 47 | -==== More realistic example with KeyHolder | |
| 48 | - | |
| 49 | -It probably isn't much use if each record needs its own key. The solution to this is the KeyHolder. A KeyHolder is an object that holds keys for use by other objects. A typical example would be a user. | |
| 50 | - | |
| 51 | - class User < ActiveRecord::Base | |
| 52 | - has_many :documents | |
| 53 | - keyholder | |
| 54 | - end | |
| 55 | - | |
| 56 | -We use standard ActiveRecord associations to associate the User with his documents. We also need to specify that he is a keyholder. We now modify our Document class as follows: | |
| 57 | - | |
| 58 | - class Document < ActiveRecord::Base | |
| 59 | - belongs_to :user | |
| 60 | - encrypt :title,:body,:key=>:user | |
| 61 | - end | |
| 62 | - | |
| 63 | -We have the standard associations going on here, but we have also added the option :key=>:user to the encrypt statement. Now we could do this: | |
| 64 | - | |
| 65 | - @user=User.new | |
| 66 | - @user.enter_password "This stuff is secret man!!!" | |
| 67 | - @user.save | |
| 68 | - | |
| 69 | - @doc=Document.new | |
| 70 | - @doc.user=@user | |
| 71 | - @doc.title="Plan to take over the world" | |
| 72 | - @doc.body="Write apps in Rails" | |
| 73 | - @doc.save | |
| 74 | - | |
| 75 | -You could also do ordinary rails like stuf such as: | |
| 76 | - | |
| 77 | - @user.documents.each do |doc| | |
| 78 | - puts doc.name | |
| 79 | - end | |
| 80 | - | |
| 81 | -Decryption is done transparently. | |
| 82 | - | |
| 83 | -When doing this within a rails application, active_crypto automatically maintains a list of keys for each user session. Besides the 2 steps below you don't need to do anything special within your controller. | |
| 84 | - | |
| 85 | -1. When a user logs on with a password enter his password like this: | |
| 86 | - | |
| 87 | - @user.enter_password @params['password'] | |
| 88 | - | |
| 89 | -2. When a user logs off call the following | |
| 90 | - | |
| 91 | - clear_session_keys | |
| 92 | - | |
| 93 | -== Usage as a Rails plugin | |
| 94 | - | |
| 95 | -Just unpack it into your $MY_RAILS_PROJECTS/vendor/plugins folder to use it as a self contained plugin. Otherwise you can install it as a gem using: | |
| 96 | - | |
| 97 | - $ gem install ezcrypto | |
| 98 | - | |
| 99 | -Then make sure to require "active_crypto.rb" at the end of your environment.rb file. | |
| 100 | - | |
| 101 | -== Database Schema issues | |
| 102 | - | |
| 103 | -ActiveCrypto doesn't really care about the schema, but that said you do need a schema that will accept and not mangle it's output. On MySQL I normally use TINYBLOB instead of VARCHAR and BLOB instead of TEXT. | |
| 104 | - | |
| 105 | -== License | |
| 106 | - | |
| 107 | -EzCrypto and ActionCrypto is released under the MIT license. | |
| 108 | - | |
| 109 | - | |
| 110 | -== Support | |
| 111 | - | |
| 112 | -To contact the author, send mail to pelleb@gmail.com | |
| 113 | - | |
| 114 | -Also see my blogs at: | |
| 115 | -http://stakeventures.com and | |
| 116 | -http://neubia.com | |
| 117 | - | |
| 118 | -This project was based on code used in my projects WideWord where you can securely share documents and StakeItOut, where you can securely share web services with your partners. | |
| 119 | -https://wideword.net | |
| 120 | -https://stakeitout.com | |
| 121 | - | |
| 122 | -(C) 2005 Pelle Braendgaard |
vendor/ezcrypto-0.7.2/README_DIGITAL_SIGNATURES
| ... | ... | @@ -1,55 +0,0 @@ |
| 1 | -= EzSig - Easy to use Digital Signatures for Ruby | |
| 2 | - | |
| 3 | -EzSig is based on OpenSSL and allows you to do create and verify digital signatures in Ruby without learning too much crypto goobledegook. | |
| 4 | - | |
| 5 | -== Features | |
| 6 | - | |
| 7 | -* Simple Signer class | |
| 8 | -* Simple Verifier class | |
| 9 | -* Certificate sub class of Verifier which lets you read the certificate data in clear ruby. | |
| 10 | - | |
| 11 | -== Installation | |
| 12 | - | |
| 13 | -Download it from here: | |
| 14 | - | |
| 15 | -http://rubyforge.org/frs/?group_id=755 | |
| 16 | - | |
| 17 | -or install it via Ruby Gems: | |
| 18 | - | |
| 19 | - gem install ezruby | |
| 20 | - | |
| 21 | - | |
| 22 | -== Simple examples | |
| 23 | - | |
| 24 | -==== Load Private key and sign | |
| 25 | - | |
| 26 | - signer=EzCrypto::Signer.from_file "testsigner.pem" | |
| 27 | - sig=signer.sign "hello" | |
| 28 | - | |
| 29 | -==== Load Certificate and verify | |
| 30 | - | |
| 31 | - cert=EzCrypto::Verifier.from_file "testsigner.cert" | |
| 32 | - cert.verify( sig,"hello") | |
| 33 | - | |
| 34 | -==== Query Certificate for information | |
| 35 | - | |
| 36 | - assert_equal cert.email,"pelleb@gmail.com" | |
| 37 | - assert_equal cert.country,"DK" | |
| 38 | - assert_equal cert.state,"Denmark" | |
| 39 | - assert_equal cert.locality,"Copenhagen" | |
| 40 | - | |
| 41 | -== PKYP integration | |
| 42 | - | |
| 43 | -http://pkyp.org allows you register your public keys and certificates on a public server. If you have web applications with certificates or public keys you can point your users at http://pkyp.org/{key.digest} for more info about a certificate. | |
| 44 | - | |
| 45 | -Register a public key or certificate at PKYP with the new method register_with_pkyp like this: | |
| 46 | - | |
| 47 | - signer=EzCrypto::Signer.generate | |
| 48 | - signer.verifier.register_with_pkyp | |
| 49 | - | |
| 50 | -If you have the public key or certificate digest you can fetch the full public key or certificate like this: | |
| 51 | - | |
| 52 | - verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a" | |
| 53 | - verifier.verify sig, request_text | |
| 54 | - | |
| 55 | -This allows a simpler way of transfering certificates. The idea of including certificates with every request is not really necessary in an online world. For example you could pass the digest in a HTTP header for a REST web services request. |
vendor/ezcrypto-0.7.2/init.rb
| ... | ... | @@ -1 +0,0 @@ |
| 1 | -require 'active_crypto.rb' |
vendor/ezcrypto-0.7.2/lib/._active_crypto.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._ezcrypto.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._ezsig.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._trusted.pem
No preview for this file type
vendor/ezcrypto-0.7.2/lib/active_crypto.rb
| ... | ... | @@ -1,325 +0,0 @@ |
| 1 | -require "ezcrypto.rb" | |
| 2 | -module ActiveCrypto # :nodoc: | |
| 3 | - | |
| 4 | - def self.append_features(base) #:nodoc: | |
| 5 | - super | |
| 6 | - base.extend(ClassMethods) | |
| 7 | - end | |
| 8 | - | |
| 9 | -=begin rdoc | |
| 10 | - | |
| 11 | -Usage is very simple. You will generally only need the two class methods listed here in your ActiveRecord class model. | |
| 12 | - | |
| 13 | -== License | |
| 14 | - | |
| 15 | -ActiveCrypto and EzCrypto are released under the MIT license. | |
| 16 | - | |
| 17 | - | |
| 18 | -== Support | |
| 19 | - | |
| 20 | -To contact the author, send mail to pelleb@gmail.com | |
| 21 | - | |
| 22 | -Also see my blogs at: | |
| 23 | -http://stakeventures.com and | |
| 24 | -http://neubia.com | |
| 25 | - | |
| 26 | -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners. | |
| 27 | -https://stakeitout.com | |
| 28 | - | |
| 29 | -(C) 2005 Pelle Braendgaard | |
| 30 | - | |
| 31 | -=end | |
| 32 | - module ClassMethods | |
| 33 | - @@session_keys={} | |
| 34 | - | |
| 35 | -=begin rdoc | |
| 36 | -Turn encryption on for this record. List all encrypted attributes | |
| 37 | - | |
| 38 | - class Document < ActiveRecord::Base | |
| 39 | - encrypt :title,:body | |
| 40 | - end | |
| 41 | - | |
| 42 | -Options are: | |
| 43 | - <tt>key</tt> - to specify an external KeyHolder, which holds the key used for encrypting and decrypting | |
| 44 | - <tt>base64</tt> - set to true in order to base64 encode the encrypted attributes. defaults to false | |
| 45 | - | |
| 46 | - class Document < ActiveRecord::Base | |
| 47 | - belongs_to :user | |
| 48 | - encrypt :title,:body,:key=>:user, :base64 => true | |
| 49 | - end | |
| 50 | - | |
| 51 | -=end | |
| 52 | - def encrypt(*attributes) | |
| 53 | - include ActiveCrypto::Encrypted | |
| 54 | - before_save :encrypt_attributes | |
| 55 | - after_save :decrypt_attributes | |
| 56 | - options=attributes.last.is_a?(Hash) ? attributes.pop : {} | |
| 57 | - keyholder | |
| 58 | - if options and options[:key] | |
| 59 | - module_eval <<-"end;" | |
| 60 | - def session_key | |
| 61 | - (send :#{options[:key]} ).send :session_key | |
| 62 | - end | |
| 63 | - @@external_key=true | |
| 64 | - end; | |
| 65 | - end | |
| 66 | - | |
| 67 | - base64_encode = (options and options[:base64]) | |
| 68 | - module_eval <<-"end;" | |
| 69 | - def self.ezcrypto_base64? | |
| 70 | - #{base64_encode.to_s} | |
| 71 | - end | |
| 72 | - end; | |
| 73 | - | |
| 74 | - self.encrypted_attributes=attributes | |
| 75 | - end | |
| 76 | - | |
| 77 | -=begin rdoc | |
| 78 | -Creates support in this class for holding a key. Adds the following methods: | |
| 79 | - | |
| 80 | -* enter_password(password,salt="onetwothree") | |
| 81 | -* set_session_key(key) | |
| 82 | -* session_key | |
| 83 | - | |
| 84 | -Use it as follows: | |
| 85 | - | |
| 86 | - class User < ActiveRecord::Base | |
| 87 | - has_many :documents | |
| 88 | - keyholder | |
| 89 | - end | |
| 90 | - | |
| 91 | -=end | |
| 92 | - def keyholder() | |
| 93 | - include ActiveCrypto::AssociationKeyHolder | |
| 94 | - after_create :save_session_key | |
| 95 | - end | |
| 96 | - | |
| 97 | -=begin rdoc | |
| 98 | -Clears the session_key array. Generally this is handled automatically as a filter in ActionController. Only use these if you need to | |
| 99 | -do something out of the ordinary. | |
| 100 | -=end | |
| 101 | - def clear_session_keys() #:nodoc: | |
| 102 | - @@session_keys.clear | |
| 103 | - end | |
| 104 | - | |
| 105 | -=begin rdoc | |
| 106 | -Sets the session_keys array. Only use these if you need to | |
| 107 | -do something out of the ordinary, as it is handled | |
| 108 | -=end | |
| 109 | - def session_keys=(keys) #:nodoc: | |
| 110 | - @@session_keys=keys | |
| 111 | - end | |
| 112 | - | |
| 113 | - def session_keys() #:nodoc: | |
| 114 | - @@session_keys | |
| 115 | - end | |
| 116 | - | |
| 117 | - end | |
| 118 | - | |
| 119 | -=begin rdoc | |
| 120 | -This module handles all standard key management features. | |
| 121 | -=end | |
| 122 | - module KeyHolder | |
| 123 | - | |
| 124 | -=begin rdoc | |
| 125 | -Creates a key for object based on given password and an optional salt. | |
| 126 | -=end | |
| 127 | - def enter_password(password,salt="onetwothree") | |
| 128 | - set_session_key(EzCrypto::Key.with_password(password, salt)) | |
| 129 | - end | |
| 130 | - | |
| 131 | -=begin rdoc | |
| 132 | -Decodes the Base64 encoded key and uses it as it's session key | |
| 133 | -=end | |
| 134 | - def set_encoded_key(enc) | |
| 135 | - set_session_key(EzCrypto::Key.decode(enc)) | |
| 136 | - end | |
| 137 | -=begin rdoc | |
| 138 | -Sets a session key for the object. This should be a EzCrypto::Key instance. | |
| 139 | -=end | |
| 140 | - def set_session_key(key) | |
| 141 | - @session_key=key | |
| 142 | - self.decrypt_attributes if self.class.include? Encrypted | |
| 143 | - end | |
| 144 | - | |
| 145 | -=begin rdoc | |
| 146 | -Returns the session_key | |
| 147 | -=end | |
| 148 | - def session_key | |
| 149 | - @session_key | |
| 150 | - end | |
| 151 | - | |
| 152 | - end | |
| 153 | - | |
| 154 | - module AssociationKeyHolder | |
| 155 | - include ActiveCrypto::KeyHolder | |
| 156 | - | |
| 157 | - | |
| 158 | - def save_session_key | |
| 159 | - ActiveRecord::Base.session_keys[session_key_id]=@session_key if @session_key | |
| 160 | - end | |
| 161 | -=begin rdoc | |
| 162 | -Sets a session key for the object. This should be a EzCrypto::Key instance. | |
| 163 | -=end | |
| 164 | - def set_session_key(key) | |
| 165 | - if self.new_record? | |
| 166 | - @session_key=key | |
| 167 | - else | |
| 168 | - ActiveRecord::Base.session_keys[session_key_id]=key | |
| 169 | - end | |
| 170 | - decrypt_attributes if self.class.include? Encrypted #if respond_to?(:decrypt_attributes) | |
| 171 | - | |
| 172 | - end | |
| 173 | - | |
| 174 | -=begin rdoc | |
| 175 | -Returns the session_key | |
| 176 | -=end | |
| 177 | - def session_key | |
| 178 | - if self.new_record? | |
| 179 | - @session_key | |
| 180 | - else | |
| 181 | - ActiveRecord::Base.session_keys[session_key_id] | |
| 182 | - end | |
| 183 | - end | |
| 184 | - | |
| 185 | - | |
| 186 | - | |
| 187 | - def session_key_id | |
| 188 | - "#{self.class.to_s}:#{id}" | |
| 189 | - end | |
| 190 | - | |
| 191 | - end | |
| 192 | - | |
| 193 | - module Encrypted #:nodoc: | |
| 194 | - def self.append_features(base) #:nodoc: | |
| 195 | - super | |
| 196 | - base.extend ClassAccessors | |
| 197 | - end | |
| 198 | - | |
| 199 | - module ClassAccessors | |
| 200 | - def encrypted_attributes | |
| 201 | - @encrypted_attributes||=[] | |
| 202 | - end | |
| 203 | - | |
| 204 | - def encrypted_attributes=(attrs) | |
| 205 | - @encrypted_attributes=attrs | |
| 206 | - end | |
| 207 | - | |
| 208 | - end | |
| 209 | - | |
| 210 | - protected | |
| 211 | - | |
| 212 | - def encrypt_attributes | |
| 213 | - if !is_encrypted? | |
| 214 | - self.class.encrypted_attributes.each do |key| | |
| 215 | - value=read_attribute(key) | |
| 216 | - write_attribute(key,_encrypt(value)) if value | |
| 217 | - end | |
| 218 | - @is_encrypted=true | |
| 219 | - end | |
| 220 | - true | |
| 221 | - end | |
| 222 | - | |
| 223 | - def decrypt_attributes | |
| 224 | - if is_encrypted? | |
| 225 | - self.class.encrypted_attributes.each do |key| | |
| 226 | - value=read_attribute(key) | |
| 227 | - write_attribute(key,_decrypt(value)) if value | |
| 228 | - end | |
| 229 | - @is_encrypted=false | |
| 230 | - end | |
| 231 | - true | |
| 232 | - end | |
| 233 | - | |
| 234 | - def after_find | |
| 235 | - @is_encrypted=true | |
| 236 | - decrypt_attributes unless session_key.nil? | |
| 237 | - end | |
| 238 | - | |
| 239 | - private | |
| 240 | - def is_encrypted? | |
| 241 | - @is_encrypted | |
| 242 | - end | |
| 243 | - | |
| 244 | - def _decrypt(data) | |
| 245 | - if session_key.nil? | |
| 246 | - raise MissingKeyError | |
| 247 | - else | |
| 248 | - if data | |
| 249 | - self.class.ezcrypto_base64? ? session_key.decrypt64(data) : session_key.decrypt(data) | |
| 250 | - else | |
| 251 | - nil | |
| 252 | - end | |
| 253 | - end | |
| 254 | - end | |
| 255 | - | |
| 256 | - def _encrypt(data) | |
| 257 | - if session_key.nil? | |
| 258 | - raise MissingKeyError | |
| 259 | - else | |
| 260 | - if data | |
| 261 | - self.class.ezcrypto_base64? ? session_key.encrypt64(data) : session_key.encrypt(data) | |
| 262 | - else | |
| 263 | - nil | |
| 264 | - end | |
| 265 | - end | |
| 266 | - end | |
| 267 | - | |
| 268 | - end | |
| 269 | - | |
| 270 | - | |
| 271 | -module ActionController # :nodoc: | |
| 272 | -=begin rdoc | |
| 273 | -This includes some basic support in the ActionController for handling session keys. It creates two filters one before the action and one after. | |
| 274 | -These do the following: | |
| 275 | - | |
| 276 | -If the users session already has a 'session_keys' value it loads it into the ActiveRecord::Base.session_keys class field. If not it | |
| 277 | -clears any existing session_keys. | |
| 278 | - | |
| 279 | -Leaving the action it stores any session_keys in the corresponding session variable. | |
| 280 | - | |
| 281 | -These filters are automatically enabled. You do not have to do anything. | |
| 282 | - | |
| 283 | -To manually clear the session keys call clear_session_keys. This should be done for example as part of a session log off action. | |
| 284 | -=end | |
| 285 | - def self.append_features(base) #:nodoc: | |
| 286 | - super | |
| 287 | - base.send :prepend_before_filter, :load_session_keys | |
| 288 | - base.send :prepend_after_filter, :save_session_keys | |
| 289 | - end | |
| 290 | - | |
| 291 | -=begin rdoc | |
| 292 | -Clears the session keys. Call this when a user logs of. | |
| 293 | -=end | |
| 294 | - def clear_session_keys | |
| 295 | - ActiveRecord::Base.clear_session_keys | |
| 296 | - end | |
| 297 | - | |
| 298 | - | |
| 299 | - private | |
| 300 | - def load_session_keys | |
| 301 | - if session['session_keys'] | |
| 302 | - ActiveRecord::Base.session_keys=session['session_keys'] | |
| 303 | - else | |
| 304 | - ActiveRecord::Base.clear_session_keys | |
| 305 | - end | |
| 306 | - end | |
| 307 | - | |
| 308 | - def save_session_keys | |
| 309 | - if ActiveRecord::Base.session_keys.size>0 | |
| 310 | - session['session_keys']=ActiveRecord::Base.session_keys | |
| 311 | - else | |
| 312 | - session['session_keys']=nil | |
| 313 | - end | |
| 314 | - end | |
| 315 | - | |
| 316 | - | |
| 317 | -end | |
| 318 | - | |
| 319 | -class MissingKeyError < RuntimeError | |
| 320 | -end | |
| 321 | -end | |
| 322 | -ActiveRecord::Base.send :include, ActiveCrypto | |
| 323 | -require 'actionpack' | |
| 324 | -require 'action_controller' | |
| 325 | -ActionController::Base.send :include, ActiveCrypto::ActionController |
vendor/ezcrypto-0.7.2/lib/ezcrypto.rb
| ... | ... | @@ -1,612 +0,0 @@ |
| 1 | -require 'openssl' | |
| 2 | -require 'digest/sha2' | |
| 3 | -require 'digest/sha1' | |
| 4 | -require 'base64' | |
| 5 | - | |
| 6 | -module EzCrypto #:nodoc: | |
| 7 | - | |
| 8 | - | |
| 9 | -=begin rdoc | |
| 10 | -The Key is the only class you need to understand for simple use. | |
| 11 | - | |
| 12 | -=== Algorithms | |
| 13 | - | |
| 14 | -The crypto algorithms default to aes-128-cbc however on any of the class methods you can change it to one of the standard openssl cipher names using the | |
| 15 | -optional <tt>:algorithm=>alg name</tt> parameter. | |
| 16 | - | |
| 17 | -Eg. | |
| 18 | - Key.new @raw, :algorithm=>"des" | |
| 19 | - Key.generate :algorithm=>"blowfish" | |
| 20 | - Key.with_password @pwd,@salt,:algorithm=>"aes256" | |
| 21 | - | |
| 22 | - | |
| 23 | -== License | |
| 24 | - | |
| 25 | -ActiveCrypto and EzCrypto are released under the MIT license. | |
| 26 | - | |
| 27 | - | |
| 28 | -== Support | |
| 29 | - | |
| 30 | -To contact the author, send mail to pelleb@gmail.com | |
| 31 | - | |
| 32 | -Also see my blogs at: | |
| 33 | -http://stakeventures.com and | |
| 34 | -http://neubia.com | |
| 35 | - | |
| 36 | -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners. | |
| 37 | -https://stakeitout.com | |
| 38 | - | |
| 39 | -(C) 2005 Pelle Braendgaard | |
| 40 | - | |
| 41 | -=end | |
| 42 | - | |
| 43 | - class Key | |
| 44 | - | |
| 45 | - attr_reader :raw, :algorithm | |
| 46 | - | |
| 47 | - @@block_size = 512 | |
| 48 | - | |
| 49 | -=begin rdoc | |
| 50 | -Set the block-size for IO-operations (default: 512 bytes) | |
| 51 | -=end | |
| 52 | - def self.block_size=(size) | |
| 53 | - @@block_size = size | |
| 54 | - end | |
| 55 | - | |
| 56 | -=begin rdoc | |
| 57 | -Return the block-size for IO-operations. | |
| 58 | -=end | |
| 59 | - def self.block_size | |
| 60 | - @@block_size | |
| 61 | - end | |
| 62 | - | |
| 63 | - | |
| 64 | -=begin rdoc | |
| 65 | -Initialize the key with raw unencoded binary key data. This needs to be at least | |
| 66 | -16 bytes long for the default aes-128 algorithm. | |
| 67 | -=end | |
| 68 | - def initialize(raw,options = {}) | |
| 69 | - @raw=raw | |
| 70 | - @algorithm=options[:algorithm]||"aes-128-cbc" | |
| 71 | - end | |
| 72 | - | |
| 73 | -=begin rdoc | |
| 74 | -Generate random key. | |
| 75 | -=end | |
| 76 | - def self.generate(options = {}) | |
| 77 | - Key.new(EzCrypto::Digester.generate_key(calculate_key_size(options[:algorithm])),options) | |
| 78 | - end | |
| 79 | - | |
| 80 | -=begin rdoc | |
| 81 | -Create key generated from the given password and salt | |
| 82 | -=end | |
| 83 | - def self.with_password(password,salt,options = {}) | |
| 84 | - Key.new(EzCrypto::Digester.get_key(password,salt,calculate_key_size(options[:algorithm])),options) | |
| 85 | - end | |
| 86 | - | |
| 87 | -=begin rdoc | |
| 88 | -Initialize the key with Base64 encoded key data. | |
| 89 | -=end | |
| 90 | - def self.decode(encoded,options = {}) | |
| 91 | - Key.new(Base64.decode64(encoded),options) | |
| 92 | - end | |
| 93 | - | |
| 94 | -=begin rdoc | |
| 95 | -Encrypts the data with the given password and a salt. Short hand for: | |
| 96 | - | |
| 97 | - key=Key.with_password(password,salt,options) | |
| 98 | - key.encrypt(data) | |
| 99 | - | |
| 100 | -=end | |
| 101 | - def self.encrypt_with_password(password,salt,data,options = {}) | |
| 102 | - key=Key.with_password(password,salt,options) | |
| 103 | - key.encrypt(data) | |
| 104 | - end | |
| 105 | - | |
| 106 | -=begin rdoc | |
| 107 | -Decrypts the data with the given password and a salt. Short hand for: | |
| 108 | - | |
| 109 | - key=Key.with_password(password,salt,options) | |
| 110 | - key.decrypt(data) | |
| 111 | - | |
| 112 | - | |
| 113 | -=end | |
| 114 | - def self.decrypt_with_password(password,salt,data,options = {}) | |
| 115 | - key=Key.with_password(password,salt,options) | |
| 116 | - key.decrypt(data) | |
| 117 | - end | |
| 118 | - | |
| 119 | -=begin rdoc | |
| 120 | -Given an algorithm this calculates the keysize. This is used by both | |
| 121 | -the generate and with_password methods. This is not yet 100% complete. | |
| 122 | -=end | |
| 123 | - def self.calculate_key_size(algorithm) | |
| 124 | - if !algorithm.nil? | |
| 125 | - algorithm=~/^([[:alnum:]]+)(-(\d+))?/ | |
| 126 | - if $3 | |
| 127 | - size=($3.to_i)/8 | |
| 128 | - else | |
| 129 | - case $1 | |
| 130 | - when "bf" | |
| 131 | - size = 16 | |
| 132 | - when "blowfish" | |
| 133 | - size = 16 | |
| 134 | - when "des" | |
| 135 | - size = 8 | |
| 136 | - when "des3" | |
| 137 | - size = 24 | |
| 138 | - when "aes128" | |
| 139 | - size = 16 | |
| 140 | - when "aes192" | |
| 141 | - size = 24 | |
| 142 | - when "aes256" | |
| 143 | - size = 32 | |
| 144 | - when "rc2" | |
| 145 | - size = 16 | |
| 146 | - when "rc4" | |
| 147 | - size = 16 | |
| 148 | - else | |
| 149 | - size = 16 | |
| 150 | - end | |
| 151 | - end | |
| 152 | - end | |
| 153 | - if size.nil? | |
| 154 | - size = 16 | |
| 155 | - end | |
| 156 | - | |
| 157 | - size | |
| 158 | - end | |
| 159 | - | |
| 160 | -=begin rdoc | |
| 161 | -returns the Base64 encoded key. | |
| 162 | -=end | |
| 163 | - def encode | |
| 164 | - Base64.encode64(@raw).chop | |
| 165 | - end | |
| 166 | - | |
| 167 | -=begin rdoc | |
| 168 | -returns the Base64 encoded key. Synonym for encode. | |
| 169 | -=end | |
| 170 | - def to_s | |
| 171 | - encode | |
| 172 | - end | |
| 173 | - | |
| 174 | -=begin rdoc | |
| 175 | -Encrypts the data and returns it in encrypted binary form. | |
| 176 | -=end | |
| 177 | - def encrypt(data) | |
| 178 | - if data==nil || data=="" | |
| 179 | - nil | |
| 180 | - else | |
| 181 | - encrypter("") | |
| 182 | - @cipher.encrypt(data) | |
| 183 | - end | |
| 184 | - end | |
| 185 | - | |
| 186 | -=begin rdoc | |
| 187 | -Encrypts the data and returns it in encrypted Base64 encoded form. | |
| 188 | -=end | |
| 189 | - def encrypt64(data) | |
| 190 | - Base64.encode64(encrypt(data)) | |
| 191 | - end | |
| 192 | - | |
| 193 | -=begin rdoc | |
| 194 | -Decrypts the data passed to it in binary format. | |
| 195 | -=end | |
| 196 | - def decrypt(data) | |
| 197 | - if data==nil || data=="" | |
| 198 | - nil | |
| 199 | - else | |
| 200 | - decrypter("") | |
| 201 | - @cipher.gulp(data) | |
| 202 | - end | |
| 203 | -# rescue | |
| 204 | -# puts @algorithm | |
| 205 | -# puts self.encode | |
| 206 | -# puts data.size | |
| 207 | -# throw $! | |
| 208 | - end | |
| 209 | - | |
| 210 | -=begin rdoc | |
| 211 | -Decrypts a Base64 formatted string | |
| 212 | -=end | |
| 213 | - def decrypt64(data) | |
| 214 | - decrypt(Base64.decode64(data)) | |
| 215 | - end | |
| 216 | - | |
| 217 | -=begin rdoc | |
| 218 | -Allows keys to be marshalled | |
| 219 | -=end | |
| 220 | - def marshal_dump | |
| 221 | - "#{self.algorithm}$$$#{self.encode}" | |
| 222 | - end | |
| 223 | - | |
| 224 | -=begin rdoc | |
| 225 | -Allows keys to be unmarshalled | |
| 226 | -=end | |
| 227 | - def marshal_load(s) | |
| 228 | - a, r = s.split '$$$' | |
| 229 | - @algorithm = a | |
| 230 | - @raw = Base64.decode64(r) | |
| 231 | - end | |
| 232 | - | |
| 233 | -=begin rdoc | |
| 234 | -Create a file with minimal permissions, and yield | |
| 235 | -it to a block. By default only the owner may read it. | |
| 236 | -=end | |
| 237 | - def safe_create(file, mod=0400, mask=0066) | |
| 238 | - begin | |
| 239 | - old_umask = File.umask | |
| 240 | - File.umask(mask) | |
| 241 | - File.open(file, File::CREAT | File::EXCL | File::WRONLY) do |f| | |
| 242 | - yield(f) if block_given? | |
| 243 | - end | |
| 244 | - ensure | |
| 245 | - File.umask(old_umask) | |
| 246 | - end | |
| 247 | - File.chmod(mod, file) if File.exists?(file) | |
| 248 | - File.size(file) | |
| 249 | - end | |
| 250 | - | |
| 251 | - | |
| 252 | -=begin rdoc | |
| 253 | -Overwrite a file with zero values before removing it's filesystem inode. | |
| 254 | -This is not very safe :-) | |
| 255 | -=end | |
| 256 | - def safe_delete(file) | |
| 257 | - begin | |
| 258 | - to_clear = File.size(file) | |
| 259 | - zeroes = Array.new(Key.block_size, "\0").join | |
| 260 | - File.chmod(0600, file) | |
| 261 | - File.open(file, File::WRONLY) do |f| | |
| 262 | - f.rewind | |
| 263 | - while to_clear > 0 | |
| 264 | - f.write(zeroes) | |
| 265 | - to_clear -= Key.block_size | |
| 266 | - end | |
| 267 | - f.flush | |
| 268 | - end | |
| 269 | - ensure | |
| 270 | - File.delete(file) if File.exists?(file) | |
| 271 | - end | |
| 272 | - return !File.exists?(file) | |
| 273 | - end | |
| 274 | - | |
| 275 | - | |
| 276 | -=begin rdoc | |
| 277 | -Open a file readonly and yield it to a block. | |
| 278 | -=end | |
| 279 | - def safe_read(file) | |
| 280 | - File.open(file, File::RDONLY) do |i| | |
| 281 | - yield(i) if block_given? | |
| 282 | - end | |
| 283 | - end | |
| 284 | - | |
| 285 | - private :safe_create, :safe_read, :safe_delete | |
| 286 | - | |
| 287 | -=begin rdoc | |
| 288 | -Load a key from a yaml_file generated via Key#store. | |
| 289 | -=end | |
| 290 | - def self.load(filename) | |
| 291 | - require 'yaml' | |
| 292 | - hash = YAML::load_file(filename) | |
| 293 | - req = proc { |k| hash[k] or raise "Missing element #{k} in #{filename}" } | |
| 294 | - key = self.new Base64.decode64(req.call(:key)) , :algorithm => req.call(:algorithm) | |
| 295 | - return key | |
| 296 | - end | |
| 297 | - | |
| 298 | - | |
| 299 | -=begin rdoc | |
| 300 | -Save the key data into a file, try to do this in a secure manner. | |
| 301 | -NOTE: YAML::store & friends are not used to encance control over | |
| 302 | -the generated file format. | |
| 303 | -=end | |
| 304 | - def store(filename) | |
| 305 | - safe_create(filename) do |f| | |
| 306 | - selfenc = self.encode | |
| 307 | - f.puts "---" | |
| 308 | - f.puts ":EZCRYPTO KEY FILE: KEEP THIS SECURE !" | |
| 309 | - f.puts ":created: #{Time.now}" | |
| 310 | - f.puts ":algorithm: #{@algorithm}" | |
| 311 | - f.puts ":key: #{selfenc}" | |
| 312 | - end | |
| 313 | - end | |
| 314 | - | |
| 315 | - | |
| 316 | -=begin rdoc | |
| 317 | -Get a Encrypter object. You have to call #final on it by yourself! | |
| 318 | -=end | |
| 319 | - def encrypter(target='') | |
| 320 | - @cipher = EzCrypto::Encrypter.new(self,target,@algorithm) | |
| 321 | - end | |
| 322 | - | |
| 323 | - | |
| 324 | -=begin rdoc | |
| 325 | -Get a Decrypter object. You have to call #final on it by yourself! | |
| 326 | -=end | |
| 327 | - def decrypter(target='') | |
| 328 | - @cipher = EzCrypto::Decrypter.new(self,target,@algorithm) | |
| 329 | - end | |
| 330 | - | |
| 331 | -=begin rdoc | |
| 332 | -Create a Decrypter object and yield it to a block. | |
| 333 | -You must *not* call #final by yourself, the method | |
| 334 | -does this. | |
| 335 | -=end | |
| 336 | - def on_decrypter(target='', &block) | |
| 337 | - decrypter(target) | |
| 338 | - on_cipher(&block) | |
| 339 | - end | |
| 340 | - | |
| 341 | -=begin rdoc | |
| 342 | -Create an Encrypter object and yield it to a block. | |
| 343 | -You must *not* call #final by yourself, the method | |
| 344 | -does this. | |
| 345 | -=end | |
| 346 | - def on_encrypter(target='', &block) | |
| 347 | - encrypter(target) | |
| 348 | - on_cipher(&block) | |
| 349 | - end | |
| 350 | - | |
| 351 | - | |
| 352 | -=begin rdoc | |
| 353 | -Helper method, yields the current cipher to a block. | |
| 354 | -=end | |
| 355 | - def on_cipher(&block) | |
| 356 | - begin | |
| 357 | - block.call @cipher | |
| 358 | - ensure | |
| 359 | - @cipher.final | |
| 360 | - end | |
| 361 | - end | |
| 362 | - | |
| 363 | - private :on_cipher | |
| 364 | - | |
| 365 | - | |
| 366 | -=begin rdoc | |
| 367 | -Encrypt a file 'inplace' and add a suffix | |
| 368 | -see #cipher_file. | |
| 369 | -IMPORTANT: The inputfile will be deleted by default. | |
| 370 | -=end | |
| 371 | - def encrypt_file(src, tgt=nil, options = {} ) | |
| 372 | - options = { :suffix => '.ez', :autoclean => 'true' }.update(options) | |
| 373 | - tgt = "#{src}#{options[:suffix]}" unless tgt | |
| 374 | - cipher_file :on_encrypter, src, tgt, options[:autoclean] | |
| 375 | - end | |
| 376 | - | |
| 377 | - | |
| 378 | -=begin rdoc | |
| 379 | -Decrypt a file 'inplace' and remove a suffix | |
| 380 | -see #cipher_file | |
| 381 | -IMPORTANT: The inputfile will be deleted by default. | |
| 382 | -=end | |
| 383 | - def decrypt_file(src, tgt=nil, options = {} ) | |
| 384 | - options = { :suffix => '.ez', :autoclean => 'true' }.update(options) | |
| 385 | - unless tgt | |
| 386 | - tgt = src | |
| 387 | - tgt = tgt.gsub(/#{options[:suffix]}$/, '') | |
| 388 | - end | |
| 389 | - cipher_file :on_decrypter, src, tgt, options[:autoclean] | |
| 390 | - end | |
| 391 | - | |
| 392 | - | |
| 393 | -=begin rdoc | |
| 394 | -uses either #on_decrypter or #on_encrypter to transform a given sourcefile | |
| 395 | -to a targetfile. the sourcefile is deleted after sucessful transformation | |
| 396 | -the delete_source is 'true'. | |
| 397 | -=end | |
| 398 | - def cipher_file(method, sourcefile, targetfile, delete_source) | |
| 399 | - raise(ArgumentError, "source == target #{sourcefile}") if sourcefile == targetfile | |
| 400 | - safe_create(targetfile,0600) do |o| | |
| 401 | - self.send(method, o) do |c| | |
| 402 | - safe_read(sourcefile) do |i| | |
| 403 | - loop do | |
| 404 | - buffer = i.read(Key.block_size) or break | |
| 405 | - c << buffer | |
| 406 | - end | |
| 407 | - end | |
| 408 | - end | |
| 409 | - end | |
| 410 | - safe_delete(sourcefile) if delete_source && File.exists?(targetfile) | |
| 411 | - return targetfile | |
| 412 | - end | |
| 413 | - | |
| 414 | - private :cipher_file | |
| 415 | - | |
| 416 | - end | |
| 417 | - | |
| 418 | -=begin rdoc | |
| 419 | -Abstract Wrapper around OpenSSL's Cipher object. Extended by Encrypter and Decrypter. | |
| 420 | - | |
| 421 | -You probably should be using the Key class instead. | |
| 422 | - | |
| 423 | -Warning! The interface may change. | |
| 424 | - | |
| 425 | -=end | |
| 426 | - class CipherWrapper #:nodoc: | |
| 427 | - | |
| 428 | -=begin rdoc | |
| 429 | - | |
| 430 | -=end | |
| 431 | - def initialize(key,target,mode,algorithm) | |
| 432 | - @cipher = OpenSSL::Cipher::Cipher.new(algorithm) | |
| 433 | - if mode | |
| 434 | - @cipher.encrypt | |
| 435 | - else | |
| 436 | - @cipher.decrypt | |
| 437 | - end | |
| 438 | - @cipher.key=key.raw | |
| 439 | - @cipher.padding=1 | |
| 440 | - @target=target | |
| 441 | - @finished=false | |
| 442 | - end | |
| 443 | - | |
| 444 | - | |
| 445 | - def to_target(data) | |
| 446 | - return data | |
| 447 | - end | |
| 448 | - | |
| 449 | -=begin rdoc | |
| 450 | -Process the givend data with the cipher. | |
| 451 | -=end | |
| 452 | - def update(data) | |
| 453 | - reset if @finished | |
| 454 | - @target<< to_target(@cipher.update(data)) | |
| 455 | - end | |
| 456 | - | |
| 457 | -=begin rdoc | |
| 458 | - | |
| 459 | -=end | |
| 460 | - def <<(data) | |
| 461 | - update(data) | |
| 462 | - end | |
| 463 | - | |
| 464 | -=begin rdoc | |
| 465 | -Finishes up any last bits of data in the cipher and returns the final result. | |
| 466 | -=end | |
| 467 | - def final | |
| 468 | - @target<< to_target(@cipher.final) | |
| 469 | - @finished=true | |
| 470 | - @target | |
| 471 | - end | |
| 472 | - | |
| 473 | -=begin rdoc | |
| 474 | -Processes the entire data string using update and performs a final on it returning the data. | |
| 475 | -=end | |
| 476 | - def gulp(data) | |
| 477 | - update(data) | |
| 478 | - final | |
| 479 | -# rescue | |
| 480 | -# breakpoint | |
| 481 | - end | |
| 482 | - | |
| 483 | -=begin rdoc | |
| 484 | - | |
| 485 | -=end | |
| 486 | - def reset(target="") | |
| 487 | - @target=target | |
| 488 | - @finished=false | |
| 489 | - end | |
| 490 | - end | |
| 491 | - | |
| 492 | -=begin rdoc | |
| 493 | -Wrapper around OpenSSL Cipher for Encryption use. | |
| 494 | - | |
| 495 | -You probably should be using Key instead. | |
| 496 | - | |
| 497 | -Warning! The interface may change. | |
| 498 | - | |
| 499 | -=end | |
| 500 | - class Encrypter<EzCrypto::CipherWrapper #:nodoc: | |
| 501 | - | |
| 502 | -=begin rdoc | |
| 503 | - | |
| 504 | -=end | |
| 505 | - def initialize(key,target="",algorithm="aes-128-cbc") | |
| 506 | - super(key,target,true,algorithm) | |
| 507 | - end | |
| 508 | - | |
| 509 | -=begin rdoc | |
| 510 | - | |
| 511 | -=end | |
| 512 | - def encrypt(data) | |
| 513 | - gulp(data) | |
| 514 | - end | |
| 515 | - end | |
| 516 | - | |
| 517 | -=begin rdoc | |
| 518 | -Wrapper around OpenSSL Cipher for Decryption use. | |
| 519 | - | |
| 520 | -You probably should be using Key instead. | |
| 521 | - | |
| 522 | -Warning! The interface may change. | |
| 523 | -=end | |
| 524 | - class Decrypter<EzCrypto::CipherWrapper #:nodoc: | |
| 525 | -=begin rdoc | |
| 526 | - | |
| 527 | -=end | |
| 528 | - def initialize(key,target="",algorithm="aes-128-cbc") | |
| 529 | - super(key,target,false,algorithm) | |
| 530 | - end | |
| 531 | - | |
| 532 | -=begin rdoc | |
| 533 | - | |
| 534 | -=end | |
| 535 | - def decrypt(data) | |
| 536 | - gulp(data) | |
| 537 | - end | |
| 538 | - end | |
| 539 | - | |
| 540 | -=begin rdoc | |
| 541 | - | |
| 542 | -=end | |
| 543 | - class Digester | |
| 544 | -=begin rdoc | |
| 545 | -Various handy Digest methods. | |
| 546 | - | |
| 547 | -Warning! The interface may change. | |
| 548 | -=end | |
| 549 | - def self.get_key(password,salt,size) | |
| 550 | - digest(salt+password,size) | |
| 551 | - end | |
| 552 | - | |
| 553 | -=begin rdoc | |
| 554 | - | |
| 555 | -=end | |
| 556 | - def self.generate_key(size=16) | |
| 557 | - key=OpenSSL::Random.random_bytes(size) | |
| 558 | - digest(key,size) | |
| 559 | - end | |
| 560 | - | |
| 561 | -=begin rdoc | |
| 562 | - | |
| 563 | -=end | |
| 564 | - def self.generate_key64(size=32) | |
| 565 | - key=OpenSSL::Random.random_bytes(size) | |
| 566 | - digest64(key,size) | |
| 567 | - end | |
| 568 | -=begin rdoc | |
| 569 | - | |
| 570 | -=end | |
| 571 | - def self.generate_hexkey(size=40) | |
| 572 | - key=OpenSSL::Random.random_bytes(size) | |
| 573 | - hexdigest(key,size) | |
| 574 | - end | |
| 575 | - | |
| 576 | -=begin rdoc | |
| 577 | - | |
| 578 | -=end | |
| 579 | - def self.digest(data,size=16) | |
| 580 | - if size==0 | |
| 581 | - "" | |
| 582 | - elsif size<=16 | |
| 583 | - Digest::SHA1.digest(data)[0..(size-1)] | |
| 584 | - else | |
| 585 | - Digest::SHA256.digest(data)[0..(size-1)] | |
| 586 | - end | |
| 587 | - end | |
| 588 | - | |
| 589 | -=begin rdoc | |
| 590 | - | |
| 591 | -=end | |
| 592 | - def self.hexdigest(data,size=40) | |
| 593 | - if size==0 | |
| 594 | - "" | |
| 595 | - elsif size<=40 | |
| 596 | - Digest::SHA1.hexdigest(data)[0..(size-1)] | |
| 597 | - else | |
| 598 | - Digest::SHA256.hexdigest(data)[0..(size-1)] | |
| 599 | - end | |
| 600 | - end | |
| 601 | - | |
| 602 | -=begin rdoc | |
| 603 | - | |
| 604 | -=end | |
| 605 | - def self.digest64(data,size=16) | |
| 606 | - Base64.encode64(digest(data,size)) | |
| 607 | - end | |
| 608 | - end | |
| 609 | - | |
| 610 | -end | |
| 611 | - | |
| 612 | - |
vendor/ezcrypto-0.7.2/lib/ezsig.rb
| ... | ... | @@ -1,535 +0,0 @@ |
| 1 | -require 'ezcrypto' | |
| 2 | -require 'net/http' | |
| 3 | -=begin rdoc | |
| 4 | - | |
| 5 | -These modules provides a simple ruby like way to create and verify digital signatures. | |
| 6 | - | |
| 7 | -== License | |
| 8 | - | |
| 9 | -ActiveCrypto and EzCrypto are released under the MIT license. | |
| 10 | - | |
| 11 | - | |
| 12 | -== Support | |
| 13 | - | |
| 14 | -To contact the author, send mail to pelleb@gmail.com | |
| 15 | - | |
| 16 | -Also see my blogs at: | |
| 17 | -http://stakeventures.com and | |
| 18 | -http://neubia.com | |
| 19 | - | |
| 20 | -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners. | |
| 21 | -https://stakeitout.com | |
| 22 | - | |
| 23 | -(C) 2005 Pelle Braendgaard | |
| 24 | - | |
| 25 | -=end | |
| 26 | -module EzCrypto | |
| 27 | - | |
| 28 | -=begin rdoc | |
| 29 | - The signer is used for signing stuff. It encapsulates the functionality of a private key. | |
| 30 | -=end | |
| 31 | - class Signer | |
| 32 | -=begin rdoc | |
| 33 | - Initialize a Signer with a OpenSSL Private Key. You generally should not call new directly. | |
| 34 | - Unless you are interfacing with your own underlying OpenSSL code. | |
| 35 | -=end | |
| 36 | - def initialize(priv,options = {}) | |
| 37 | - @priv=priv | |
| 38 | - end | |
| 39 | - | |
| 40 | -=begin rdoc | |
| 41 | - Generate a new keypair. Defaults to 2048 bit RSA. | |
| 42 | -=end | |
| 43 | - def self.generate(strength=2048,type=:rsa) | |
| 44 | - key_class=case type | |
| 45 | - when :dsa | |
| 46 | - OpenSSL::PKey::DSA | |
| 47 | - else | |
| 48 | - OpenSSL::PKey::RSA | |
| 49 | - end | |
| 50 | - EzCrypto::Signer.new(key_class.generate(strength)) | |
| 51 | - end | |
| 52 | - | |
| 53 | -=begin rdoc | |
| 54 | - Decode a PEM encoded Private Key and return a signer. Takes an optional password | |
| 55 | -=end | |
| 56 | - def self.decode(encoded,password=nil) | |
| 57 | - begin | |
| 58 | - EzCrypto::Signer.new(OpenSSL::PKey::RSA.new( encoded,password)) | |
| 59 | - rescue | |
| 60 | - EzCrypto::Signer.new(OpenSSL::PKey::DSA.new( encoded,password)) | |
| 61 | - end | |
| 62 | - end | |
| 63 | - | |
| 64 | -=begin rdoc | |
| 65 | - Decode a PEM encoded Private Key file and return a signer. Takes an optional password | |
| 66 | -=end | |
| 67 | - def self.from_file(filename,password=nil) | |
| 68 | - file = File.read( filename ) | |
| 69 | - decode(file,password) | |
| 70 | - end | |
| 71 | - | |
| 72 | -=begin rdoc | |
| 73 | - Returns the OpenSSL Public Key object. You normally do not need to use this. | |
| 74 | -=end | |
| 75 | - def public_key | |
| 76 | - @priv.public_key | |
| 77 | - end | |
| 78 | - | |
| 79 | -=begin rdoc | |
| 80 | - Returns the corresponding Verifier object. | |
| 81 | -=end | |
| 82 | - def verifier | |
| 83 | - Verifier.new(public_key) | |
| 84 | - end | |
| 85 | - | |
| 86 | -=begin rdoc | |
| 87 | - Returns the OpenSSL Private Key object. You normally do not need to use this. | |
| 88 | -=end | |
| 89 | - def private_key | |
| 90 | - @priv | |
| 91 | - end | |
| 92 | - | |
| 93 | -=begin rdoc | |
| 94 | - signs data using the private key and the corresponding digest function. SHA1 for RSA and DSS1 for DSA. | |
| 95 | - 99% of signing use these parameters. | |
| 96 | - Email a request or send me a patch if you have other requirements. | |
| 97 | -=end | |
| 98 | - def sign(data) | |
| 99 | - if rsa? | |
| 100 | - @priv.sign(OpenSSL::Digest::SHA1.new,data) | |
| 101 | - elsif dsa? | |
| 102 | - @priv.sign(OpenSSL::Digest::DSS1.new,data) | |
| 103 | - end | |
| 104 | - end | |
| 105 | - | |
| 106 | -=begin rdoc | |
| 107 | - Returns true if it is a RSA private key | |
| 108 | -=end | |
| 109 | - def rsa? | |
| 110 | - @priv.is_a? OpenSSL::PKey::RSA | |
| 111 | - end | |
| 112 | - | |
| 113 | -=begin rdoc | |
| 114 | - Returns true if it is a DSA private key | |
| 115 | -=end | |
| 116 | - def dsa? | |
| 117 | - @priv.is_a? OpenSSL::PKey::DSA | |
| 118 | - end | |
| 119 | - | |
| 120 | - end | |
| 121 | - | |
| 122 | -=begin rdoc | |
| 123 | - The Verifier is used for verifying signatures. If you use the decode or | |
| 124 | - from_file methods you can use either raw PEM encoded public keys or certificate. | |
| 125 | -=end | |
| 126 | - class Verifier | |
| 127 | -=begin rdoc | |
| 128 | - Initializes a Verifier using a OpenSSL public key object. | |
| 129 | -=end | |
| 130 | - def initialize(pub) | |
| 131 | - @pub=pub | |
| 132 | - end | |
| 133 | - | |
| 134 | -=begin rdoc | |
| 135 | - Decodes a PEM encoded Certificate or Public Key and returns a Verifier object. | |
| 136 | -=end | |
| 137 | - def self.decode(encoded) | |
| 138 | - case encoded | |
| 139 | - when /-----BEGIN CERTIFICATE-----/ | |
| 140 | - EzCrypto::Certificate.new(OpenSSL::X509::Certificate.new( encoded)) | |
| 141 | - else | |
| 142 | - begin | |
| 143 | - EzCrypto::Verifier.new(OpenSSL::PKey::RSA.new( encoded)) | |
| 144 | - rescue | |
| 145 | - EzCrypto::Verifier.new(OpenSSL::PKey::DSA.new( encoded)) | |
| 146 | - end | |
| 147 | - end | |
| 148 | - end | |
| 149 | - | |
| 150 | -=begin rdoc | |
| 151 | - Decodes a PEM encoded Certificate or Public Key from a file and returns a Verifier object. | |
| 152 | -=end | |
| 153 | - def self.from_file(filename) | |
| 154 | - file = File.read( filename ) | |
| 155 | - decode(file) | |
| 156 | - end | |
| 157 | - | |
| 158 | -=begin rdoc | |
| 159 | - Load a certificate or public key from PKYP based on it's hex digest | |
| 160 | -=end | |
| 161 | - def self.from_pkyp(digest) | |
| 162 | - digest=digest.strip.downcase | |
| 163 | - if digest=~/[0123456789abcdef]{40}/ | |
| 164 | -# Net::HTTP.start("localhost", 9000) do |query| | |
| 165 | - Net::HTTP.start("pkyp.org", 80) do |query| | |
| 166 | - response=query.get "/#{digest}.pem" | |
| 167 | - if response.code=="200" | |
| 168 | - decode(response.body) | |
| 169 | - else | |
| 170 | - raise "Error occured (#{response.code}): #{response.body}" | |
| 171 | - end | |
| 172 | - end | |
| 173 | - else | |
| 174 | - raise "Invalid digest" | |
| 175 | - end | |
| 176 | - end | |
| 177 | - | |
| 178 | -=begin rdoc | |
| 179 | - Decodes all certificates or public keys in a file and returns an array. | |
| 180 | -=end | |
| 181 | - def self.load_all_from_file(filename) | |
| 182 | - file = File.read( filename ) | |
| 183 | - certs=[] | |
| 184 | - count=0 | |
| 185 | - file.split( %q{-----BEGIN}).each do |pem| | |
| 186 | - if pem and pem!="" | |
| 187 | - pem="-----BEGIN#{pem}\n" | |
| 188 | - cert=decode(pem) | |
| 189 | - if cert.is_a? EzCrypto::Verifier | |
| 190 | - certs<<cert | |
| 191 | - end | |
| 192 | - end | |
| 193 | - end | |
| 194 | - certs | |
| 195 | - end | |
| 196 | - | |
| 197 | -=begin rdoc | |
| 198 | - Is the Verifier a Certificate or not. | |
| 199 | -=end | |
| 200 | - def cert? | |
| 201 | - false | |
| 202 | - end | |
| 203 | - | |
| 204 | -=begin rdoc | |
| 205 | - Returns the OpenSSL public key object. You would normally not need to use this. | |
| 206 | -=end | |
| 207 | - def public_key | |
| 208 | - @pub | |
| 209 | - end | |
| 210 | - | |
| 211 | -=begin rdoc | |
| 212 | - Returns the SHA1 hexdigest of the DER encoded public key. This can be used as a unique key identifier. | |
| 213 | -=end | |
| 214 | - def digest | |
| 215 | - Digest::SHA1.hexdigest(@pub.to_der) | |
| 216 | - end | |
| 217 | -=begin rdoc | |
| 218 | - Is this a RSA key? | |
| 219 | -=end | |
| 220 | - def rsa? | |
| 221 | - @pub.is_a? OpenSSL::PKey::RSA | |
| 222 | - end | |
| 223 | -=begin rdoc | |
| 224 | - Is this a DSA key? | |
| 225 | -=end | |
| 226 | - def dsa? | |
| 227 | - @pub.is_a? OpenSSL::PKey::DSA | |
| 228 | - end | |
| 229 | - | |
| 230 | - | |
| 231 | -=begin rdoc | |
| 232 | - Returns true if the public key signed the given data. | |
| 233 | -=end | |
| 234 | - def verify(sig,data) | |
| 235 | - if rsa? | |
| 236 | - @pub.verify( OpenSSL::Digest::SHA1.new, sig, data ) | |
| 237 | - elsif dsa? | |
| 238 | - @pub.verify( OpenSSL::Digest::DSS1.new, sig, data ) | |
| 239 | - else | |
| 240 | - false | |
| 241 | - end | |
| 242 | - end | |
| 243 | - | |
| 244 | -=begin rdoc | |
| 245 | - Register the public key or certificate at PKYP | |
| 246 | -=end | |
| 247 | - def register_with_pkyp | |
| 248 | - send_to_pkyp(@pub.to_s) | |
| 249 | - end | |
| 250 | - | |
| 251 | - protected | |
| 252 | - | |
| 253 | - def send_to_pkyp(pem) | |
| 254 | -# Net::HTTP.start("localhost", 9000) do |query| | |
| 255 | - Net::HTTP.start("pkyp.org", 80) do |query| | |
| 256 | - output=URI.escape(pem).gsub("+","%2b") | |
| 257 | - response=query.post "/register","body="+output | |
| 258 | - if response.code=="302" | |
| 259 | - response["Location"]=~/([0123456789abcdef]{40}$)/ | |
| 260 | - $1 | |
| 261 | - else | |
| 262 | - raise "Error occured (#{response.code}): #{response.body}" | |
| 263 | - end | |
| 264 | - end | |
| 265 | - end | |
| 266 | - | |
| 267 | - end | |
| 268 | - | |
| 269 | -=begin rdoc | |
| 270 | - Certificate provides functionality to make it easy to extract information from a Certificate. | |
| 271 | - This also provides all the same functionality as a Verifier. | |
| 272 | -=end | |
| 273 | - class Certificate < Verifier | |
| 274 | - | |
| 275 | -=begin rdoc | |
| 276 | - Intialize with a OpenSSL cert object. | |
| 277 | -=end | |
| 278 | - def initialize(cert) | |
| 279 | - super(cert.public_key) | |
| 280 | - @cert=cert | |
| 281 | - end | |
| 282 | - | |
| 283 | -=begin rdoc | |
| 284 | - Returns true | |
| 285 | -=end | |
| 286 | - def cert? | |
| 287 | - true | |
| 288 | - end | |
| 289 | - | |
| 290 | -=begin rdoc | |
| 291 | - Register the certificate at PKYP | |
| 292 | -=end | |
| 293 | - def register_with_pkyp | |
| 294 | - send_to_pkyp(@cert.to_s) | |
| 295 | - end | |
| 296 | - | |
| 297 | -=begin rdoc | |
| 298 | - Returns the SHA1 hex digest of a the DER encoded certificate. This is useful as a unique identifier. | |
| 299 | -=end | |
| 300 | - def cert_digest | |
| 301 | - Digest::SHA1.hexdigest(@cert.to_der) | |
| 302 | - end | |
| 303 | - | |
| 304 | -=begin rdoc | |
| 305 | - Returns a Name object containt the subject of the certificate. The subject in X509 speak is the details of the certificate owner. | |
| 306 | -=end | |
| 307 | - def subject | |
| 308 | - @subject=EzCrypto::Name.new(@cert.subject) unless @subject | |
| 309 | - @subject | |
| 310 | - end | |
| 311 | - | |
| 312 | -=begin rdoc | |
| 313 | - Returns a Name object containt the issuer of the certificate. | |
| 314 | -=end | |
| 315 | - def issuer | |
| 316 | - @issuer=EzCrypto::Name.new(@cert.issuer) unless @issuer | |
| 317 | - @issuer | |
| 318 | - end | |
| 319 | - | |
| 320 | -=begin rdoc | |
| 321 | - Returns the issuers serial number for this certificate | |
| 322 | -=end | |
| 323 | - def serial | |
| 324 | - @cert.serial | |
| 325 | - end | |
| 326 | - | |
| 327 | -=begin rdoc | |
| 328 | - Returns the OpenSSL Certificate object | |
| 329 | -=end | |
| 330 | - def cert | |
| 331 | - @cert | |
| 332 | - end | |
| 333 | - | |
| 334 | -=begin rdoc | |
| 335 | - Returns the certificates valid not before date. | |
| 336 | -=end | |
| 337 | - def not_before | |
| 338 | - @cert.not_before | |
| 339 | - end | |
| 340 | - | |
| 341 | -=begin rdoc | |
| 342 | - Returns the certificates valid not after date. | |
| 343 | -=end | |
| 344 | - def not_after | |
| 345 | - @cert.not_after | |
| 346 | - end | |
| 347 | - | |
| 348 | -=begin rdoc | |
| 349 | - Is this certificate valid at this point in time. Note this only checks if it is valid with respect to time. | |
| 350 | - It is important to realize that it does not check with any CRL or OCSP services to see if the certificate was | |
| 351 | - revoked. | |
| 352 | -=end | |
| 353 | - def valid?(time=Time.now.utc) | |
| 354 | - time>not_before && time<self.not_after | |
| 355 | - end | |
| 356 | - | |
| 357 | -=begin rdoc | |
| 358 | - Returns the hash of extensions available in the certificate. These are not always present. | |
| 359 | -=end | |
| 360 | - def extensions | |
| 361 | - unless @extensions | |
| 362 | - @extensions={} | |
| 363 | - cert.extensions.each {|e| @extensions[e.oid]=e.value} if cert.extensions | |
| 364 | - end | |
| 365 | - @extensions | |
| 366 | - end | |
| 367 | - | |
| 368 | -=begin rdoc | |
| 369 | - Any methods defined in Name can be used here. This means you can do cert.email rather than cert.subject.email. | |
| 370 | -=end | |
| 371 | - def method_missing(method) | |
| 372 | - subject.send method | |
| 373 | - end | |
| 374 | - | |
| 375 | - end | |
| 376 | - | |
| 377 | -=begin rdoc | |
| 378 | - A handy ruby wrapper around OpenSSL's Name object. This was created to make it really easy to extract information out of the certificate. | |
| 379 | -=end | |
| 380 | - class Name | |
| 381 | -=begin rdoc | |
| 382 | - Initializes the Name object with the underlying OpenSSL Name object. You generally do not need to use this. | |
| 383 | - Rather use the Certificates subject or issuer methods. | |
| 384 | -=end | |
| 385 | - def initialize(name) | |
| 386 | - @name=name | |
| 387 | - @attributes={} | |
| 388 | - name.to_s.split(/\//).each do |field| | |
| 389 | - key, val = field.split(/=/,2) | |
| 390 | - if key | |
| 391 | - @attributes[key.to_sym]=val | |
| 392 | - end | |
| 393 | - end | |
| 394 | - end | |
| 395 | - | |
| 396 | -=begin rdoc | |
| 397 | - Returns the full name object in classic horrible X500 format. | |
| 398 | -=end | |
| 399 | - def to_s | |
| 400 | - @name.to_s | |
| 401 | - end | |
| 402 | - | |
| 403 | -=begin rdoc | |
| 404 | - Returns the email if present in the name | |
| 405 | -=end | |
| 406 | - def email | |
| 407 | - self[:emailAddress] | |
| 408 | - end | |
| 409 | -=begin rdoc | |
| 410 | - The 2 letter country code of the name | |
| 411 | -=end | |
| 412 | - def country | |
| 413 | - self[:C] | |
| 414 | - end | |
| 415 | - alias_method :c,:country | |
| 416 | -=begin rdoc | |
| 417 | - The state or province code | |
| 418 | -=end | |
| 419 | - def state | |
| 420 | - self[:ST] | |
| 421 | - end | |
| 422 | - alias_method :st,:state | |
| 423 | - alias_method :province,:state | |
| 424 | - | |
| 425 | -=begin rdoc | |
| 426 | - The locality | |
| 427 | -=end | |
| 428 | - def locality | |
| 429 | - self[:L] | |
| 430 | - end | |
| 431 | - alias_method :l,:locality | |
| 432 | - | |
| 433 | -=begin rdoc | |
| 434 | - The Organizational Unit | |
| 435 | -=end | |
| 436 | - def organizational_unit | |
| 437 | - self[:OU] | |
| 438 | - end | |
| 439 | - alias_method :ou,:organizational_unit | |
| 440 | - alias_method :organisational_unit,:organizational_unit | |
| 441 | - | |
| 442 | -=begin rdoc | |
| 443 | - The Organization | |
| 444 | -=end | |
| 445 | - def organization | |
| 446 | - self[:O] | |
| 447 | - end | |
| 448 | - alias_method :o,:organization | |
| 449 | - alias_method :organisation,:organization | |
| 450 | - | |
| 451 | -=begin rdoc | |
| 452 | - The common name. For SSL this means the domain name. For personal certificates it is the name. | |
| 453 | -=end | |
| 454 | - def common_name | |
| 455 | - self[:CN] | |
| 456 | - end | |
| 457 | - alias_method :name,:common_name | |
| 458 | - alias_method :cn,:common_name | |
| 459 | - | |
| 460 | -=begin rdoc | |
| 461 | - Lookup fields in the certificate. | |
| 462 | -=end | |
| 463 | - def [](attr_key) | |
| 464 | - @attributes[attr_key.to_sym] | |
| 465 | - end | |
| 466 | - | |
| 467 | - def method_missing(method) | |
| 468 | - self[method] | |
| 469 | - end | |
| 470 | - | |
| 471 | - end | |
| 472 | - | |
| 473 | -=begin rdoc | |
| 474 | - Wraps around the OpenSSL trust store. This allows you to decide which certificates you trust. | |
| 475 | - | |
| 476 | - You can either point it at a path which contains a OpenSSL trust store (see OpenSSL for more) or build it up manually. | |
| 477 | - | |
| 478 | - For a certificate to verify you need the issuer and the issuers issuers certs added to the Trust store. | |
| 479 | - | |
| 480 | - NOTE: Currently this does not support CRL's or OCSP. We may add support for this later. | |
| 481 | -=end | |
| 482 | - class TrustStore | |
| 483 | - | |
| 484 | -=begin rdoc | |
| 485 | - Create a trust store of normally trusted root certificates as found in a browser. Extracted from Safari. | |
| 486 | -=end | |
| 487 | - def self.default_trusted | |
| 488 | - load_from_file(File.dirname(__FILE__) + "/trusted.pem") | |
| 489 | - end | |
| 490 | -=begin rdoc | |
| 491 | - Create a trust store from a list of certificates in a pem file. | |
| 492 | - These certificates should just be listed one after each other. | |
| 493 | -=end | |
| 494 | - def self.load_from_file(file) | |
| 495 | - store=TrustStore.new | |
| 496 | - EzCrypto::Verifier.load_all_from_file(file).each do |cert| | |
| 497 | - store.add cert | |
| 498 | - end | |
| 499 | - store | |
| 500 | - end | |
| 501 | -=begin rdoc | |
| 502 | - Create trust store with an optional list of paths of openssl trust stores. | |
| 503 | -=end | |
| 504 | - def initialize(*paths) | |
| 505 | - @store=OpenSSL::X509::Store.new | |
| 506 | -# @store.set_default_path paths.shift if paths.length>0 | |
| 507 | - paths.each {|path| @store.add_path path} | |
| 508 | - end | |
| 509 | - | |
| 510 | -=begin rdoc | |
| 511 | - Add either a EzCrypto::Certificate or a OpenSSL::X509::Cert object to the TrustStore. This should be a trusted certificate such as a CA's issuer certificate. | |
| 512 | -=end | |
| 513 | - def add(obj) | |
| 514 | - if obj.kind_of?(EzCrypto::Certificate) | |
| 515 | - @store.add_cert obj.cert | |
| 516 | - elsif obj.kind_of?(OpenSSL::X509::Certificate) | |
| 517 | - @store.add_cert obj | |
| 518 | - else | |
| 519 | - raise "unsupported object type" | |
| 520 | - end | |
| 521 | - end | |
| 522 | -=begin rdoc | |
| 523 | - Returns true if either the EzCrypto::Certificate or OpenSSL::X509::Cert object is verified using issuer certificates in the trust store. | |
| 524 | -=end | |
| 525 | - def verify(cert) | |
| 526 | - if cert.kind_of?(EzCrypto::Certificate) | |
| 527 | - @store.verify cert.cert | |
| 528 | - elsif cert.kind_of?(OpenSSL::X509::Certificate) | |
| 529 | - @store.verify cert | |
| 530 | - else | |
| 531 | - false | |
| 532 | - end | |
| 533 | - end | |
| 534 | - end | |
| 535 | -end | |
| 536 | 0 | \ No newline at end of file |
vendor/ezcrypto-0.7.2/lib/trusted.pem
| ... | ... | @@ -1,2363 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx | |
| 3 | -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH | |
| 4 | -RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl | |
| 5 | -MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP | |
| 6 | -QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe | |
| 7 | -Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ | |
| 8 | -MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF | |
| 9 | -IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw | |
| 10 | -IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B | |
| 11 | -LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB | |
| 12 | -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679 | |
| 13 | -tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM | |
| 14 | -e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2 | |
| 15 | -4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ | |
| 16 | -W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6 | |
| 17 | -2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID | |
| 18 | -AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV | |
| 19 | -HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG | |
| 20 | -EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK | |
| 21 | -EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0 | |
| 22 | -aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD | |
| 23 | -VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0 | |
| 24 | -LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G | |
| 25 | -CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD | |
| 26 | -CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq | |
| 27 | -KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0 | |
| 28 | -aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h | |
| 29 | -LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m | |
| 30 | -b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93 | |
| 31 | -d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt | |
| 32 | -Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF | |
| 33 | -BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK | |
| 34 | -Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG | |
| 35 | -HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW | |
| 36 | -3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW | |
| 37 | -msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG | |
| 38 | -J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg= | |
| 39 | ------END CERTIFICATE----- | |
| 40 | ------BEGIN CERTIFICATE----- | |
| 41 | -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb | |
| 42 | -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow | |
| 43 | -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj | |
| 44 | -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL | |
| 45 | -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE | |
| 46 | -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM | |
| 47 | -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP | |
| 48 | -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua | |
| 49 | -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe | |
| 50 | -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 | |
| 51 | -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR | |
| 52 | -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm | |
| 53 | -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU | |
| 54 | -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF | |
| 55 | -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v | |
| 56 | -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t | |
| 57 | -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF | |
| 58 | -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q | |
| 59 | -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz | |
| 60 | -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 | |
| 61 | -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi | |
| 62 | -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 | |
| 63 | -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== | |
| 64 | ------END CERTIFICATE----- | |
| 65 | ------BEGIN CERTIFICATE----- | |
| 66 | -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU | |
| 67 | -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 | |
| 68 | -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw | |
| 69 | -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML | |
| 70 | -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD | |
| 71 | -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA | |
| 72 | -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul | |
| 73 | -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n | |
| 74 | -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl | |
| 75 | -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch | |
| 76 | -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC | |
| 77 | -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O | |
| 78 | -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E | |
| 79 | -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl | |
| 80 | -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk | |
| 81 | -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB | |
| 82 | -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X | |
| 83 | -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz | |
| 84 | -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY | |
| 85 | -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl | |
| 86 | -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA | |
| 87 | -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= | |
| 88 | ------END CERTIFICATE----- | |
| 89 | ------BEGIN CERTIFICATE----- | |
| 90 | -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU | |
| 91 | -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs | |
| 92 | -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 | |
| 93 | -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux | |
| 94 | -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h | |
| 95 | -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v | |
| 96 | -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt | |
| 97 | -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 | |
| 98 | -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX | |
| 99 | -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX | |
| 100 | -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN | |
| 101 | -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 | |
| 102 | -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD | |
| 103 | -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 | |
| 104 | -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU | |
| 105 | -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx | |
| 106 | -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN | |
| 107 | -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH | |
| 108 | -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 | |
| 109 | -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC | |
| 110 | -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX | |
| 111 | -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a | |
| 112 | -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= | |
| 113 | ------END CERTIFICATE----- | |
| 114 | ------BEGIN CERTIFICATE----- | |
| 115 | -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU | |
| 116 | -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 | |
| 117 | -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx | |
| 118 | -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB | |
| 119 | -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV | |
| 120 | -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC | |
| 121 | -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV | |
| 122 | -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX | |
| 123 | -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP | |
| 124 | -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH | |
| 125 | -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF | |
| 126 | -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW | |
| 127 | -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw | |
| 128 | -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL | |
| 129 | -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU | |
| 130 | -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv | |
| 131 | -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 | |
| 132 | -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ | |
| 133 | -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao | |
| 134 | -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh | |
| 135 | -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm | |
| 136 | -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= | |
| 137 | ------END CERTIFICATE----- | |
| 138 | ------BEGIN CERTIFICATE----- | |
| 139 | -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU | |
| 140 | -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 | |
| 141 | -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 | |
| 142 | -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK | |
| 143 | -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh | |
| 144 | -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B | |
| 145 | -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq | |
| 146 | -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G | |
| 147 | -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i | |
| 148 | -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U | |
| 149 | -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 | |
| 150 | -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G | |
| 151 | -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T | |
| 152 | -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr | |
| 153 | -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL | |
| 154 | -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm | |
| 155 | -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv | |
| 156 | -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm | |
| 157 | -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X | |
| 158 | -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 | |
| 159 | -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y | |
| 160 | -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no | |
| 161 | -xqE= | |
| 162 | ------END CERTIFICATE----- | |
| 163 | ------BEGIN CERTIFICATE----- | |
| 164 | -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc | |
| 165 | -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP | |
| 166 | -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 | |
| 167 | -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft | |
| 168 | -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg | |
| 169 | -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP | |
| 170 | -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk | |
| 171 | -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym | |
| 172 | -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW | |
| 173 | -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb | |
| 174 | -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko | |
| 175 | -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw | |
| 176 | -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU | |
| 177 | -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB | |
| 178 | -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF | |
| 179 | -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb | |
| 180 | -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir | |
| 181 | -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C | |
| 182 | -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds | |
| 183 | -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 | |
| 184 | ------END CERTIFICATE----- | |
| 185 | ------BEGIN CERTIFICATE----- | |
| 186 | -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc | |
| 187 | -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP | |
| 188 | -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 | |
| 189 | -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft | |
| 190 | -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg | |
| 191 | -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP | |
| 192 | -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC | |
| 193 | -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci | |
| 194 | -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 | |
| 195 | -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 | |
| 196 | -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e | |
| 197 | -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B | |
| 198 | -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 | |
| 199 | -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq | |
| 200 | -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ | |
| 201 | -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 | |
| 202 | -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj | |
| 203 | -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj | |
| 204 | -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE | |
| 205 | -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn | |
| 206 | -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 | |
| 207 | -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc | |
| 208 | -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 | |
| 209 | -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe | |
| 210 | -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA | |
| 211 | -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F | |
| 212 | -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX | |
| 213 | -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb | |
| 214 | -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl | |
| 215 | -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw | |
| 216 | -RY8mkaKO/qk= | |
| 217 | ------END CERTIFICATE----- | |
| 218 | ------BEGIN CERTIFICATE----- | |
| 219 | -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx | |
| 220 | -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh | |
| 221 | -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 | |
| 222 | -aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1 | |
| 223 | -MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg | |
| 224 | -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M | |
| 225 | -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw | |
| 226 | -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U | |
| 227 | -0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI | |
| 228 | -TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf | |
| 229 | -RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF | |
| 230 | -zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh | |
| 231 | -BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA | |
| 232 | -AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY | |
| 233 | -PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/ | |
| 234 | -BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn | |
| 235 | -9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT | |
| 236 | -Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF | |
| 237 | -Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX | |
| 238 | -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW | |
| 239 | -H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S | |
| 240 | ------END CERTIFICATE----- | |
| 241 | ------BEGIN CERTIFICATE----- | |
| 242 | -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx | |
| 243 | -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh | |
| 244 | -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 | |
| 245 | -aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz | |
| 246 | -NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg | |
| 247 | -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M | |
| 248 | -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw | |
| 249 | -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ | |
| 250 | -7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb | |
| 251 | -m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY | |
| 252 | -xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ | |
| 253 | -YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq | |
| 254 | -JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx | |
| 255 | -I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz | |
| 256 | -kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh | |
| 257 | -EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S | |
| 258 | -Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM | |
| 259 | -gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu | |
| 260 | -rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE | |
| 261 | -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO | |
| 262 | -1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu | |
| 263 | -h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP | |
| 264 | -yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q | |
| 265 | -7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT | |
| 266 | -RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ | |
| 267 | -ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB | |
| 268 | -M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ | |
| 269 | -my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO | |
| 270 | -AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT | |
| 271 | -9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H | |
| 272 | -hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5 | |
| 273 | -fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg= | |
| 274 | ------END CERTIFICATE----- | |
| 275 | ------BEGIN CERTIFICATE----- | |
| 276 | -MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx | |
| 277 | -HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD | |
| 278 | -b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv | |
| 279 | -b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx | |
| 280 | -MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl | |
| 281 | -ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0 | |
| 282 | -aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 | |
| 283 | -eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e | |
| 284 | -eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq | |
| 285 | -wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV | |
| 286 | -WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO | |
| 287 | -2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+ | |
| 288 | -H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU | |
| 289 | -yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ | |
| 290 | -MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH | |
| 291 | -lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB | |
| 292 | -MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj | |
| 293 | -YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu | |
| 294 | -Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl | |
| 295 | -cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k | |
| 296 | -IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp | |
| 297 | -ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz | |
| 298 | -aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu | |
| 299 | -Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw | |
| 300 | -bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG | |
| 301 | -SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS | |
| 302 | -9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y | |
| 303 | -m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv | |
| 304 | -Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961 | |
| 305 | -kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH | |
| 306 | -CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj | |
| 307 | ------END CERTIFICATE----- | |
| 308 | ------BEGIN CERTIFICATE----- | |
| 309 | -MIIDwzCCAyygAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCQVQx | |
| 310 | -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAGA1UEChM5QXJn | |
| 311 | -ZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBmdWVyIERhdGVu | |
| 312 | -c2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVuLmF0MB4XDTAx | |
| 313 | -MDIxMjExMzAzMFoXDTA5MDIxMjExMzAzMFowgZgxCzAJBgNVBAYTAkFUMRAwDgYD | |
| 314 | -VQQIEwdBdXN0cmlhMQ8wDQYDVQQHEwZWaWVubmExQjBABgNVBAoTOUFyZ2UgRGF0 | |
| 315 | -ZW4gT2VzdGVycmVpY2hpc2NoZSBHZXNlbGxzY2hhZnQgZnVlciBEYXRlbnNjaHV0 | |
| 316 | -ejEiMCAGCSqGSIb3DQEJARYTYS1jZXJ0QGFyZ2VkYXRlbi5hdDCBnzANBgkqhkiG | |
| 317 | -9w0BAQEFAAOBjQAwgYkCgYEAwgsHqoNtmmrJ86+e1I4hOVBaL4kokqKN2IPOIL+1 | |
| 318 | -XwY8vfOOUfPEdhWpaC0ldt7VYrksgDiUccgH0FROANWK2GkfKMDzjjXHysR04uEb | |
| 319 | -Om7Kqjqn0nproOGkFG+QvBZgs+Ws+HXNFJA6V76fU4+JXq4452LSK4Lr5YcBquu3 | |
| 320 | -NJECAwEAAaOCARkwggEVMB0GA1UdDgQWBBQ0j59zH/G31zRjgK1y2P//tSAWZjCB | |
| 321 | -xQYDVR0jBIG9MIG6gBQ0j59zH/G31zRjgK1y2P//tSAWZqGBnqSBmzCBmDELMAkG | |
| 322 | -A1UEBhMCQVQxEDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAG | |
| 323 | -A1UEChM5QXJnZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBm | |
| 324 | -dWVyIERhdGVuc2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVu | |
| 325 | -LmF0ggEAMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQE | |
| 326 | -AwICBDANBgkqhkiG9w0BAQQFAAOBgQBFuJYncqMYB6gXQS3eDOI90BEHfFTKy/dV | |
| 327 | -AV+K7QdAYikWmqgBheRdPKddJdccPy/Zl/p3ZT7GhDyC5f3wZjcuu8AJ27BNwbCA | |
| 328 | -x54dgxgCNcyPm79nY8MRtEdEpoRGdSsFKJemz6hpXM++MWFciyrRWIIA44XB0Gv3 | |
| 329 | -US0spjsDPQ== | |
| 330 | ------END CERTIFICATE----- | |
| 331 | ------BEGIN CERTIFICATE----- | |
| 332 | -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ | |
| 333 | -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD | |
| 334 | -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX | |
| 335 | -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y | |
| 336 | -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy | |
| 337 | -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr | |
| 338 | -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr | |
| 339 | -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK | |
| 340 | -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu | |
| 341 | -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy | |
| 342 | -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye | |
| 343 | -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 | |
| 344 | -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 | |
| 345 | -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 | |
| 346 | -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx | |
| 347 | -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 | |
| 348 | -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz | |
| 349 | -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS | |
| 350 | -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp | |
| 351 | ------END CERTIFICATE----- | |
| 352 | ------BEGIN CERTIFICATE----- | |
| 353 | -MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn | |
| 354 | -MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy | |
| 355 | -NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT | |
| 356 | -D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB | |
| 357 | -AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS | |
| 358 | -J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB | |
| 359 | -MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy | |
| 360 | -v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S | |
| 361 | -dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh | |
| 362 | -pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD | |
| 363 | -VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW | |
| 364 | -IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW | |
| 365 | -m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU | |
| 366 | -EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP | |
| 367 | -lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC | |
| 368 | -wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/ | |
| 369 | -M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr | |
| 370 | -8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6 | |
| 371 | -7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe | |
| 372 | -4r50ErAEQyo= | |
| 373 | ------END CERTIFICATE----- | |
| 374 | ------BEGIN CERTIFICATE----- | |
| 375 | -MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX | |
| 376 | -VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD | |
| 377 | -QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX | |
| 378 | -DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl | |
| 379 | -ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU | |
| 380 | -ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT | |
| 381 | -CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P | |
| 382 | -6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM | |
| 383 | -jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX | |
| 384 | -2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N | |
| 385 | -R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j | |
| 386 | -rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV | |
| 387 | -HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa | |
| 388 | -gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1 | |
| 389 | -bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0 | |
| 390 | -ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy | |
| 391 | -YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl | |
| 392 | -ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl | |
| 393 | -cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0 | |
| 394 | -L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx | |
| 395 | -CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV | |
| 396 | -HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ | |
| 397 | -KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo | |
| 398 | -Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2 | |
| 399 | -jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe | |
| 400 | -1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5 | |
| 401 | -mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc | |
| 402 | -tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4= | |
| 403 | ------END CERTIFICATE----- | |
| 404 | ------BEGIN CERTIFICATE----- | |
| 405 | -MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV | |
| 406 | -MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg | |
| 407 | -UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw | |
| 408 | -MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD | |
| 409 | -ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD | |
| 410 | -EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb | |
| 411 | -4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+ | |
| 412 | -fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp | |
| 413 | -EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf | |
| 414 | -JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF | |
| 415 | -uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm | |
| 416 | -l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw | |
| 417 | -AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF | |
| 418 | -BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex | |
| 419 | -N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2 | |
| 420 | -s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn | |
| 421 | -8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI | |
| 422 | -LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA | |
| 423 | -AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4= | |
| 424 | ------END CERTIFICATE----- | |
| 425 | ------BEGIN CERTIFICATE----- | |
| 426 | -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ | |
| 427 | -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh | |
| 428 | -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 | |
| 429 | -NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD | |
| 430 | -VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp | |
| 431 | -bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB | |
| 432 | -jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N | |
| 433 | -H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR | |
| 434 | -4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN | |
| 435 | -BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo | |
| 436 | -EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 | |
| 437 | -FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx | |
| 438 | -lA== | |
| 439 | ------END CERTIFICATE----- | |
| 440 | ------BEGIN CERTIFICATE----- | |
| 441 | -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ | |
| 442 | -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh | |
| 443 | -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy | |
| 444 | -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp | |
| 445 | -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X | |
| 446 | -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw | |
| 447 | -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg | |
| 448 | -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo | |
| 449 | -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 | |
| 450 | -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB | |
| 451 | -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK | |
| 452 | -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm | |
| 453 | -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID | |
| 454 | -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J | |
| 455 | -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul | |
| 456 | -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 | |
| 457 | -DzFc6PLZ | |
| 458 | ------END CERTIFICATE----- | |
| 459 | ------BEGIN CERTIFICATE----- | |
| 460 | -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG | |
| 461 | -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz | |
| 462 | -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 | |
| 463 | -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV | |
| 464 | -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt | |
| 465 | -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN | |
| 466 | -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh | |
| 467 | -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 | |
| 468 | -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G | |
| 469 | -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg | |
| 470 | -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc | |
| 471 | -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY | |
| 472 | ------END CERTIFICATE----- | |
| 473 | ------BEGIN CERTIFICATE----- | |
| 474 | -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw | |
| 475 | -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns | |
| 476 | -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH | |
| 477 | -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y | |
| 478 | -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe | |
| 479 | -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX | |
| 480 | -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj | |
| 481 | -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx | |
| 482 | -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | |
| 483 | -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B | |
| 484 | -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM | |
| 485 | -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw | |
| 486 | -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC | |
| 487 | -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji | |
| 488 | -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX | |
| 489 | -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn | |
| 490 | -jBJ7xUS0rg== | |
| 491 | ------END CERTIFICATE----- | |
| 492 | ------BEGIN CERTIFICATE----- | |
| 493 | -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG | |
| 494 | -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz | |
| 495 | -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 | |
| 496 | -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV | |
| 497 | -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt | |
| 498 | -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN | |
| 499 | -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE | |
| 500 | -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is | |
| 501 | -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G | |
| 502 | -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do | |
| 503 | -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc | |
| 504 | -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k | |
| 505 | ------END CERTIFICATE----- | |
| 506 | ------BEGIN CERTIFICATE----- | |
| 507 | -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ | |
| 508 | -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh | |
| 509 | -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy | |
| 510 | -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp | |
| 511 | -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X | |
| 512 | -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw | |
| 513 | -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg | |
| 514 | -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo | |
| 515 | -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 | |
| 516 | -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB | |
| 517 | -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 | |
| 518 | -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 | |
| 519 | -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID | |
| 520 | -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk | |
| 521 | -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i | |
| 522 | -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY | |
| 523 | -oJ2daZH9 | |
| 524 | ------END CERTIFICATE----- | |
| 525 | ------BEGIN CERTIFICATE----- | |
| 526 | -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ | |
| 527 | -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh | |
| 528 | -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy | |
| 529 | -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp | |
| 530 | -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X | |
| 531 | -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw | |
| 532 | -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg | |
| 533 | -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo | |
| 534 | -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 | |
| 535 | -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB | |
| 536 | -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM | |
| 537 | -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK | |
| 538 | -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID | |
| 539 | -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj | |
| 540 | -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y | |
| 541 | -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP | |
| 542 | -T8qAkbYp | |
| 543 | ------END CERTIFICATE----- | |
| 544 | ------BEGIN CERTIFICATE----- | |
| 545 | -MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY | |
| 546 | -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT | |
| 547 | -A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz | |
| 548 | -MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu | |
| 549 | -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD | |
| 550 | -ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB | |
| 551 | -gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT | |
| 552 | -XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y | |
| 553 | -Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV | |
| 554 | -HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG | |
| 555 | -9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc | |
| 556 | -c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/ | |
| 557 | -L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg== | |
| 558 | ------END CERTIFICATE----- | |
| 559 | ------BEGIN CERTIFICATE----- | |
| 560 | -MIICZzCCAdCgAwIBAgIBGjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY | |
| 561 | -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT | |
| 562 | -A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDYxNTAx | |
| 563 | -MDBaFw0wODA4MDcxNTAxMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu | |
| 564 | -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD | |
| 565 | -ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB | |
| 566 | -gQC5arG1dp5gWLAG69GfVnf0laK3aCAXLKGE65A72UGYsJQ3ENGaE9lW/JoDaLV8 | |
| 567 | -wrjQIL87bVC34jTvJs2aPjd7oeUaUXjeddt8bYjwRV/fwXl/oUoGx9umpJUuNvEW | |
| 568 | -1H9P6xJFyzB9jpm+HGW+Oid3wtWKqNq1xsSuMByHlpoXtwIDAQABoy8wLTAdBgNV | |
| 569 | -HQ4EFgQUxVnSzvGYlVBmqG3eMkvWYTXiRrMwDAYDVR0TBAUwAwEB/zANBgkqhkiG | |
| 570 | -9w0BAQUFAAOBgQAyPjGMqsgKSbKHr38GlCT6WmkKtCWX6YX/3S3vaf39asluzJX6 | |
| 571 | -3sTcMByqi0jy7BLYbgKzPvxmuW3yVUlLl6rV6YrId62ezjPmaIqkDI8snEM0BWSW | |
| 572 | -2ousTPara2J0xvzdC5lj/+ke6LHrO9yhSLRFMk8quccSXtFW6H5ei0+sGg== | |
| 573 | ------END CERTIFICATE----- | |
| 574 | ------BEGIN CERTIFICATE----- | |
| 575 | -MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw | |
| 576 | -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD | |
| 577 | -Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa | |
| 578 | -MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE | |
| 579 | -AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB | |
| 580 | -AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8 | |
| 581 | -RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy | |
| 582 | -cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE | |
| 583 | -J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC | |
| 584 | -YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0 | |
| 585 | -E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD | |
| 586 | -VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE | |
| 587 | -G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45 | |
| 588 | -g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY | |
| 589 | -AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV | |
| 590 | -mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu | |
| 591 | -8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/ | |
| 592 | -Vv4AEbT8dNfEeFxrkDbh | |
| 593 | ------END CERTIFICATE----- | |
| 594 | ------BEGIN CERTIFICATE----- | |
| 595 | -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw | |
| 596 | -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp | |
| 597 | -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE | |
| 598 | -CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B | |
| 599 | -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx | |
| 600 | -ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO | |
| 601 | -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 | |
| 602 | -IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx | |
| 603 | -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN | |
| 604 | -AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf | |
| 605 | -WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK | |
| 606 | -xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE | |
| 607 | -zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F | |
| 608 | -5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv | |
| 609 | -OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG | |
| 610 | -9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz | |
| 611 | -ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME | |
| 612 | -lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG | |
| 613 | -Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q | |
| 614 | -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k | |
| 615 | -Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== | |
| 616 | ------END CERTIFICATE----- | |
| 617 | ------BEGIN CERTIFICATE----- | |
| 618 | -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw | |
| 619 | -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp | |
| 620 | -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE | |
| 621 | -CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B | |
| 622 | -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy | |
| 623 | -MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO | |
| 624 | -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 | |
| 625 | -IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx | |
| 626 | -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN | |
| 627 | -AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV | |
| 628 | -p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw | |
| 629 | -BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl | |
| 630 | -5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi | |
| 631 | -3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ | |
| 632 | -QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG | |
| 633 | -9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ | |
| 634 | -2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN | |
| 635 | -I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL | |
| 636 | -553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q | |
| 637 | -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN | |
| 638 | -uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== | |
| 639 | ------END CERTIFICATE----- | |
| 640 | ------BEGIN CERTIFICATE----- | |
| 641 | -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML | |
| 642 | -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp | |
| 643 | -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 | |
| 644 | -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp | |
| 645 | -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy | |
| 646 | -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 | |
| 647 | -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp | |
| 648 | -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG | |
| 649 | -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp | |
| 650 | -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq | |
| 651 | -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe | |
| 652 | -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX | |
| 653 | -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT | |
| 654 | -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ | |
| 655 | -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH | |
| 656 | -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA | |
| 657 | -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G | |
| 658 | -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA | |
| 659 | -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo | |
| 660 | -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ | |
| 661 | -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 | |
| 662 | -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN | |
| 663 | -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy | |
| 664 | -vUxFnmG6v4SBkgPR0ml8xQ== | |
| 665 | ------END CERTIFICATE----- | |
| 666 | ------BEGIN CERTIFICATE----- | |
| 667 | -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC | |
| 668 | -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u | |
| 669 | -ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh | |
| 670 | -Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV | |
| 671 | -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe | |
| 672 | -Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU | |
| 673 | -MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D | |
| 674 | -bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl | |
| 675 | -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq | |
| 676 | -RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G | |
| 677 | -CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo | |
| 678 | -6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux | |
| 679 | -5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm | |
| 680 | -AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC | |
| 681 | -ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 | |
| 682 | -cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m | |
| 683 | -by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp | |
| 684 | -IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg | |
| 685 | -Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg | |
| 686 | -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV | |
| 687 | -HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E | |
| 688 | -BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE | |
| 689 | -FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA | |
| 690 | -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 | |
| 691 | -pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz | |
| 692 | -wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a | |
| 693 | -EkP/TOYGJqibGapEPHayXOw= | |
| 694 | ------END CERTIFICATE----- | |
| 695 | ------BEGIN CERTIFICATE----- | |
| 696 | -MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML | |
| 697 | -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp | |
| 698 | -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw | |
| 699 | -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu | |
| 700 | -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy | |
| 701 | -MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 | |
| 702 | -LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp | |
| 703 | -YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG | |
| 704 | -A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 | |
| 705 | -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny | |
| 706 | -Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0 | |
| 707 | -iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn | |
| 708 | -5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd | |
| 709 | -BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0 | |
| 710 | -MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy | |
| 711 | -ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l | |
| 712 | -dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh | |
| 713 | -dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy | |
| 714 | -MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY | |
| 715 | -MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF | |
| 716 | -fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w | |
| 717 | -AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS | |
| 718 | -hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/ | |
| 719 | -GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd | |
| 720 | -zmVml64mXg== | |
| 721 | ------END CERTIFICATE----- | |
| 722 | ------BEGIN CERTIFICATE----- | |
| 723 | -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC | |
| 724 | -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u | |
| 725 | -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc | |
| 726 | -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u | |
| 727 | -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 | |
| 728 | -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE | |
| 729 | -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j | |
| 730 | -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF | |
| 731 | -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg | |
| 732 | -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA | |
| 733 | -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ | |
| 734 | -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 | |
| 735 | -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC | |
| 736 | -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb | |
| 737 | -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 | |
| 738 | -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p | |
| 739 | -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk | |
| 740 | -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp | |
| 741 | -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu | |
| 742 | -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 | |
| 743 | -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi | |
| 744 | -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa | |
| 745 | -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI | |
| 746 | -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN | |
| 747 | -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd | |
| 748 | -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= | |
| 749 | ------END CERTIFICATE----- | |
| 750 | ------BEGIN CERTIFICATE----- | |
| 751 | -MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML | |
| 752 | -RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu | |
| 753 | -Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg | |
| 754 | -RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl | |
| 755 | -IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa | |
| 756 | -Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE | |
| 757 | -CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p | |
| 758 | -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk | |
| 759 | -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp | |
| 760 | -b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO | |
| 761 | -8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB | |
| 762 | -bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2 | |
| 763 | -dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4 | |
| 764 | -QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT | |
| 765 | -C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp | |
| 766 | -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw | |
| 767 | -IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy | |
| 768 | -ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw | |
| 769 | -KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD | |
| 770 | -VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud | |
| 771 | -DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2 | |
| 772 | -fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia | |
| 773 | -d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF | |
| 774 | -JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U | |
| 775 | -yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== | |
| 776 | ------END CERTIFICATE----- | |
| 777 | ------BEGIN CERTIFICATE----- | |
| 778 | -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV | |
| 779 | -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy | |
| 780 | -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 | |
| 781 | -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx | |
| 782 | -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B | |
| 783 | -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f | |
| 784 | -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A | |
| 785 | -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC | |
| 786 | -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ | |
| 787 | -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm | |
| 788 | -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw | |
| 789 | -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj | |
| 790 | -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF | |
| 791 | -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA | |
| 792 | -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y | |
| 793 | -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh | |
| 794 | -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 | |
| 795 | ------END CERTIFICATE----- | |
| 796 | ------BEGIN CERTIFICATE----- | |
| 797 | -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc | |
| 798 | -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT | |
| 799 | -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw | |
| 800 | -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j | |
| 801 | -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ | |
| 802 | -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo | |
| 803 | -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu | |
| 804 | -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw | |
| 805 | -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD | |
| 806 | -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK | |
| 807 | -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM | |
| 808 | -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ | |
| 809 | -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN | |
| 810 | -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== | |
| 811 | ------END CERTIFICATE----- | |
| 812 | ------BEGIN CERTIFICATE----- | |
| 813 | -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV | |
| 814 | -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj | |
| 815 | -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 | |
| 816 | -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD | |
| 817 | -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B | |
| 818 | -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G | |
| 819 | -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ | |
| 820 | -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C | |
| 821 | -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX | |
| 822 | -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl | |
| 823 | -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw | |
| 824 | -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq | |
| 825 | -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF | |
| 826 | -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA | |
| 827 | -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy | |
| 828 | -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 | |
| 829 | -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN | |
| 830 | ------END CERTIFICATE----- | |
| 831 | ------BEGIN CERTIFICATE----- | |
| 832 | -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc | |
| 833 | -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT | |
| 834 | -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw | |
| 835 | -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj | |
| 836 | -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l | |
| 837 | -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC | |
| 838 | -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc | |
| 839 | -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ | |
| 840 | -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH | |
| 841 | -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr | |
| 842 | -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA | |
| 843 | -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA | |
| 844 | -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv | |
| 845 | -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV | |
| 846 | ------END CERTIFICATE----- | |
| 847 | ------BEGIN CERTIFICATE----- | |
| 848 | -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT | |
| 849 | -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i | |
| 850 | -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG | |
| 851 | -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg | |
| 852 | -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 | |
| 853 | -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq | |
| 854 | -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv | |
| 855 | -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU | |
| 856 | -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ | |
| 857 | -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW | |
| 858 | -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA | |
| 859 | -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l | |
| 860 | -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn | |
| 861 | -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS | |
| 862 | -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF | |
| 863 | -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un | |
| 864 | -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV | |
| 865 | -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== | |
| 866 | ------END CERTIFICATE----- | |
| 867 | ------BEGIN CERTIFICATE----- | |
| 868 | -MIIDIzCCAgugAwIBAgIQMDAwMTAwMDQ0ODczMzAwMDANBgkqhkiG9w0BAQUFADAf | |
| 869 | -MQswCQYDVQQGEwJGUjEQMA4GA1UEChMHR0lQLUNQUzAeFw0wMTA2MjYwMDAwMDBa | |
| 870 | -Fw0xMDEyMzEwMDAwMDBaMB8xCzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdHSVAtQ1BT | |
| 871 | -MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBvz+ogB2ovWM18JmOtizrL | |
| 872 | -Y2KgEZ8TpU6H7zu+r6cT1Q8xgLm8BPOfeW3eI/e0PLmZN+Sp+LZ4wyFMecJmp/FT | |
| 873 | -M9/9Gp23vpMePge/tJctwu0mihabVcUHFoIMtpKgSJ2+Xlywk16AjsHN3DONcWBa | |
| 874 | -xV4wa4Tt/BtaEkf9148pDn074lZZ2mKmANu9zNDm/buSgRkqqS1eVCbLxkRaMBSp | |
| 875 | -dwGAjsBYEqPjmI4So915ab3Eqqz5zawQwC4T+O41wRgpD9bDTo+9xAFiZz8PqYs9 | |
| 876 | -pc2tHOKhIlRxJbQqcWQW+St9I7Y+rRx2lTMrt6DD7CMoxrt1TuGzxdN777w1GSfx | |
| 877 | -AgMBAAGjXDBaMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEBMB0G | |
| 878 | -A1UdDgQWBBTnqP2NPQkWlq78dWMnkCN5XlvZtDAVBgNVHSAEDjAMMAoGCCqBegFH | |
| 879 | -AwcDMA0GCSqGSIb3DQEBBQUAA4IBAQAc9sFFWGgFJ14VGI91Cf1h9KYuuh1m2y2u | |
| 880 | -xF/mVb58IYBDE0fwG371XwpOHd6d9cM3ANSpK51V5EOmwgFDGkNGtDYcPXR+Ndli | |
| 881 | -rhD8aSq0Yv2p3h78o5O6y4GMRycFPsTfWpE9h7fGmsfZXWnYJGRAGM2iKYn7x3f7 | |
| 882 | -+kOrtbVj+XAvws7PqO2lLh/HjWCek4efnU9EaG6SDqu7srTuhyILFRBJ+sfOr68t | |
| 883 | -5bwyjufk391dbPBYcQ1AK9CQrnaorhPo+S7iNekX1e5iJShETVrZJkH/AAido34c | |
| 884 | -3ohHWmmZPyNW+5CpxZlRL6J6mlcAxIDqkXXsxj/r5zxGrW/jGwxo | |
| 885 | ------END CERTIFICATE----- | |
| 886 | ------BEGIN CERTIFICATE----- | |
| 887 | -MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG | |
| 888 | -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv | |
| 889 | -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw | |
| 890 | -MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i | |
| 891 | -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT | |
| 892 | -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ | |
| 893 | -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp | |
| 894 | -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp | |
| 895 | -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG | |
| 896 | -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ | |
| 897 | -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 | |
| 898 | -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU | |
| 899 | -YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B | |
| 900 | -AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 | |
| 901 | -5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q | |
| 902 | -gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR | |
| 903 | -rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 | |
| 904 | -ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o | |
| 905 | -Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== | |
| 906 | ------END CERTIFICATE----- | |
| 907 | ------BEGIN CERTIFICATE----- | |
| 908 | -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh | |
| 909 | -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE | |
| 910 | -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 | |
| 911 | -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo | |
| 912 | -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg | |
| 913 | -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN | |
| 914 | -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA | |
| 915 | -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w | |
| 916 | -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi | |
| 917 | -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY | |
| 918 | -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ | |
| 919 | -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE | |
| 920 | -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h | |
| 921 | -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 | |
| 922 | -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj | |
| 923 | -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD | |
| 924 | -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy | |
| 925 | -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P | |
| 926 | -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ | |
| 927 | -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER | |
| 928 | -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf | |
| 929 | -ReYNnyicsbkqWletNw+vHX/bvZ8= | |
| 930 | ------END CERTIFICATE----- | |
| 931 | ------BEGIN CERTIFICATE----- | |
| 932 | -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD | |
| 933 | -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv | |
| 934 | -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv | |
| 935 | -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV | |
| 936 | -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU | |
| 937 | -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds | |
| 938 | -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH | |
| 939 | -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS | |
| 940 | -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 | |
| 941 | -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r | |
| 942 | -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 | |
| 943 | -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P | |
| 944 | -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ | |
| 945 | ------END CERTIFICATE----- | |
| 946 | ------BEGIN CERTIFICATE----- | |
| 947 | -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 | |
| 948 | -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz | |
| 949 | -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y | |
| 950 | -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG | |
| 951 | -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy | |
| 952 | -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y | |
| 953 | -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs | |
| 954 | -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw | |
| 955 | -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl | |
| 956 | -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY | |
| 957 | -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 | |
| 958 | -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS | |
| 959 | -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v | |
| 960 | -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu | |
| 961 | -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC | |
| 962 | -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd | |
| 963 | ------END CERTIFICATE----- | |
| 964 | ------BEGIN CERTIFICATE----- | |
| 965 | -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 | |
| 966 | -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz | |
| 967 | -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y | |
| 968 | -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG | |
| 969 | -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy | |
| 970 | -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y | |
| 971 | -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs | |
| 972 | -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw | |
| 973 | -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl | |
| 974 | -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y | |
| 975 | -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ | |
| 976 | -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y | |
| 977 | -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 | |
| 978 | -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW | |
| 979 | -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw | |
| 980 | -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI | |
| 981 | ------END CERTIFICATE----- | |
| 982 | ------BEGIN CERTIFICATE----- | |
| 983 | -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 | |
| 984 | -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz | |
| 985 | -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y | |
| 986 | -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG | |
| 987 | -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy | |
| 988 | -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y | |
| 989 | -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs | |
| 990 | -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw | |
| 991 | -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl | |
| 992 | -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD | |
| 993 | -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs | |
| 994 | -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY | |
| 995 | -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE | |
| 996 | -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ | |
| 997 | -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A | |
| 998 | -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu | |
| 999 | ------END CERTIFICATE----- | |
| 1000 | ------BEGIN CERTIFICATE----- | |
| 1001 | -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT | |
| 1002 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1003 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1004 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq | |
| 1005 | -SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD | |
| 1006 | -VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx | |
| 1007 | -HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa | |
| 1008 | -Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl | |
| 1009 | -bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg | |
| 1010 | -cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu | |
| 1011 | -ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD | |
| 1012 | -QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp | |
| 1013 | -bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP | |
| 1014 | -aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ | |
| 1015 | -iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi | |
| 1016 | -kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo | |
| 1017 | -9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O | |
| 1018 | -BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs | |
| 1019 | -CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE | |
| 1020 | -CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ | |
| 1021 | -bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt | |
| 1022 | -YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD | |
| 1023 | -aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT | |
| 1024 | -IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI | |
| 1025 | -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E | |
| 1026 | -BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG | |
| 1027 | -CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB | |
| 1028 | -BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw | |
| 1029 | -EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD | |
| 1030 | -BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg | |
| 1031 | -aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu | |
| 1032 | -aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu | |
| 1033 | -ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6 | |
| 1034 | -Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB | |
| 1035 | -hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o | |
| 1036 | -dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv | |
| 1037 | -cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz | |
| 1038 | -LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj | |
| 1039 | -ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw | |
| 1040 | -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD | |
| 1041 | -gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ | |
| 1042 | -ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL | |
| 1043 | -NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q= | |
| 1044 | ------END CERTIFICATE----- | |
| 1045 | ------BEGIN CERTIFICATE----- | |
| 1046 | -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT | |
| 1047 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1048 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1049 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl | |
| 1050 | -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl | |
| 1051 | -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 | |
| 1052 | -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx | |
| 1053 | -MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD | |
| 1054 | -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n | |
| 1055 | -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g | |
| 1056 | -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv | |
| 1057 | -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv | |
| 1058 | -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN | |
| 1059 | -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h | |
| 1060 | -M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P | |
| 1061 | -l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j | |
| 1062 | -LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C | |
| 1063 | -QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk | |
| 1064 | -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE | |
| 1065 | -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT | |
| 1066 | -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC | |
| 1067 | -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g | |
| 1068 | -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g | |
| 1069 | -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD | |
| 1070 | -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr | |
| 1071 | -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB | |
| 1072 | -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC | |
| 1073 | -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB | |
| 1074 | -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp | |
| 1075 | -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB | |
| 1076 | -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W | |
| 1077 | -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG | |
| 1078 | -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 | |
| 1079 | -aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu | |
| 1080 | -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo | |
| 1081 | -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV | |
| 1082 | -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy | |
| 1083 | -Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy | |
| 1084 | -L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT | |
| 1085 | -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO | |
| 1086 | -X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN | |
| 1087 | -foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt | |
| 1088 | -K15I/jRAHfyJywwUrwtmklZIX0E5Og== | |
| 1089 | ------END CERTIFICATE----- | |
| 1090 | ------BEGIN CERTIFICATE----- | |
| 1091 | -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT | |
| 1092 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1093 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1094 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl | |
| 1095 | -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl | |
| 1096 | -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 | |
| 1097 | -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx | |
| 1098 | -MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD | |
| 1099 | -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n | |
| 1100 | -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g | |
| 1101 | -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv | |
| 1102 | -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv | |
| 1103 | -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN | |
| 1104 | -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB | |
| 1105 | -JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2 | |
| 1106 | -pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs | |
| 1107 | -XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7 | |
| 1108 | -4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk | |
| 1109 | -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE | |
| 1110 | -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT | |
| 1111 | -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC | |
| 1112 | -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g | |
| 1113 | -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g | |
| 1114 | -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD | |
| 1115 | -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr | |
| 1116 | -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB | |
| 1117 | -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC | |
| 1118 | -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB | |
| 1119 | -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp | |
| 1120 | -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB | |
| 1121 | -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W | |
| 1122 | -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG | |
| 1123 | -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 | |
| 1124 | -aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu | |
| 1125 | -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo | |
| 1126 | -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV | |
| 1127 | -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy | |
| 1128 | -Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy | |
| 1129 | -L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT | |
| 1130 | -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw | |
| 1131 | -3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq | |
| 1132 | -ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1 | |
| 1133 | -5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA== | |
| 1134 | ------END CERTIFICATE----- | |
| 1135 | ------BEGIN CERTIFICATE----- | |
| 1136 | -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT | |
| 1137 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1138 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1139 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm | |
| 1140 | -SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT | |
| 1141 | -JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI | |
| 1142 | -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5 | |
| 1143 | -MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ | |
| 1144 | -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp | |
| 1145 | -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G | |
| 1146 | -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh | |
| 1147 | -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj | |
| 1148 | -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw | |
| 1149 | -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM | |
| 1150 | -UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0 | |
| 1151 | -b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb | |
| 1152 | -r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN | |
| 1153 | -EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h | |
| 1154 | -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ | |
| 1155 | -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp | |
| 1156 | -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G | |
| 1157 | -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh | |
| 1158 | -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj | |
| 1159 | -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC | |
| 1160 | -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF | |
| 1161 | -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB | |
| 1162 | -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg | |
| 1163 | -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud | |
| 1164 | -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD | |
| 1165 | -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg | |
| 1166 | -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG | |
| 1167 | -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB | |
| 1168 | -MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy | |
| 1169 | -L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov | |
| 1170 | -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB | |
| 1171 | -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB | |
| 1172 | -MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy | |
| 1173 | -MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw | |
| 1174 | -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw | |
| 1175 | -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD | |
| 1176 | -gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9 | |
| 1177 | -N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd | |
| 1178 | -Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo= | |
| 1179 | ------END CERTIFICATE----- | |
| 1180 | ------BEGIN CERTIFICATE----- | |
| 1181 | -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT | |
| 1182 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1183 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1184 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm | |
| 1185 | -SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT | |
| 1186 | -JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI | |
| 1187 | -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5 | |
| 1188 | -MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ | |
| 1189 | -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp | |
| 1190 | -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G | |
| 1191 | -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh | |
| 1192 | -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj | |
| 1193 | -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw | |
| 1194 | -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f | |
| 1195 | -MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU | |
| 1196 | -Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV | |
| 1197 | -gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L | |
| 1198 | -ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h | |
| 1199 | -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ | |
| 1200 | -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp | |
| 1201 | -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G | |
| 1202 | -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh | |
| 1203 | -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj | |
| 1204 | -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC | |
| 1205 | -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF | |
| 1206 | -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB | |
| 1207 | -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg | |
| 1208 | -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud | |
| 1209 | -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD | |
| 1210 | -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg | |
| 1211 | -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG | |
| 1212 | -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB | |
| 1213 | -My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy | |
| 1214 | -L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov | |
| 1215 | -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB | |
| 1216 | -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB | |
| 1217 | -My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy | |
| 1218 | -MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw | |
| 1219 | -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw | |
| 1220 | -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD | |
| 1221 | -gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc | |
| 1222 | -7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ | |
| 1223 | -BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs= | |
| 1224 | ------END CERTIFICATE----- | |
| 1225 | ------BEGIN CERTIFICATE----- | |
| 1226 | -MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT | |
| 1227 | -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE | |
| 1228 | -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE | |
| 1229 | -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr | |
| 1230 | -SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG | |
| 1231 | -A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 | |
| 1232 | -eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0 | |
| 1233 | -M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy | |
| 1234 | -Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l | |
| 1235 | -dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw | |
| 1236 | -cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh | |
| 1237 | -bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU | |
| 1238 | -aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B | |
| 1239 | -CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA | |
| 1240 | -0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU | |
| 1241 | -Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE | |
| 1242 | -GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G | |
| 1243 | -A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR | |
| 1244 | -2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ | |
| 1245 | -BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ | |
| 1246 | -UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp | |
| 1247 | -cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg | |
| 1248 | -Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD | |
| 1249 | -EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w | |
| 1250 | -HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM | |
| 1251 | -BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB | |
| 1252 | -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB | |
| 1253 | -FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD | |
| 1254 | -VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw | |
| 1255 | -cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl | |
| 1256 | -IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto | |
| 1257 | -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz | |
| 1258 | -Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG | |
| 1259 | -CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 | |
| 1260 | -aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3 | |
| 1261 | -dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG | |
| 1262 | -SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l | |
| 1263 | -c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz | |
| 1264 | -LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz | |
| 1265 | -Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy | |
| 1266 | -bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l | |
| 1267 | -cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH | |
| 1268 | -I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4 | |
| 1269 | -rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg | |
| 1270 | -olkTZbQ= | |
| 1271 | ------END CERTIFICATE----- | |
| 1272 | ------BEGIN CERTIFICATE----- | |
| 1273 | -MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD | |
| 1274 | -VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT | |
| 1275 | -IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD | |
| 1276 | -Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz | |
| 1277 | -MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT | |
| 1278 | -MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE | |
| 1279 | -ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw | |
| 1280 | -FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu | |
| 1281 | -aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY | |
| 1282 | -XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1 | |
| 1283 | -gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4 | |
| 1284 | -Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY | |
| 1285 | -JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU | |
| 1286 | -dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14 | |
| 1287 | -cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC | |
| 1288 | ------END CERTIFICATE----- | |
| 1289 | ------BEGIN CERTIFICATE----- | |
| 1290 | -MIICeTCCAeKgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJVUzEY | |
| 1291 | -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT | |
| 1292 | -A1BLSTElMCMGA1UEAxMcSklUQyBEb0QgUEtJIENsYXNzIDMgUm9vdCBDQTAeFw0w | |
| 1293 | -MDAzMjExODU4NDBaFw0xMDAzMTkxODU4NDBaMGoxCzAJBgNVBAYTAlVTMRgwFgYD | |
| 1294 | -VQQKEw9VLlMuIEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJ | |
| 1295 | -MSUwIwYDVQQDExxKSVRDIERvRCBQS0kgQ2xhc3MgMyBSb290IENBMIGfMA0GCSqG | |
| 1296 | -SIb3DQEBAQUAA4GNADCBiQKBgQDRUOCEGYuPE/hkf/1670GY5DbacmoHjcfVOUNC | |
| 1297 | -HvEYvrUbF/V62q+oY63BWDeAMWoVSjsTYFGLW9VPLhpDh0QeKhBNrpjOhTGEsJE0 | |
| 1298 | -ijKnolTQx/LsR00ZIWyZBGsQH0s3cu4QsM8uWKiBBuV9C5sMmJXFwMlarhfJToAg | |
| 1299 | -/ViPKQIDAQABoy8wLTAdBgNVHQ4EFgQUa5/49j2w6Ko9iPJjHSDv3Gwbd04wDAYD | |
| 1300 | -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCU8gI7V8QVwl4lMkGPJ3SaEqZB | |
| 1301 | -g2p/aFqmAYoRjZoun2CYUl6Zy/dJMYaWIC8lVedDui2u9v6/4JNmx8yU6JtpDjGW | |
| 1302 | -/HpLAwEuZjiWPIm+Wqiuz9LWDGXCLSS7XraHliW6YgPkgxeGoZllwdwFLZQ/j5fX | |
| 1303 | -UxtL7uDwQbYehVaw4g== | |
| 1304 | ------END CERTIFICATE----- | |
| 1305 | ------BEGIN CERTIFICATE----- | |
| 1306 | -MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE | |
| 1307 | -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D | |
| 1308 | -QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz | |
| 1309 | -MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E | |
| 1310 | -LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ | |
| 1311 | -KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6 | |
| 1312 | -p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju | |
| 1313 | -jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub | |
| 1314 | -tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc | |
| 1315 | -X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt | |
| 1316 | -LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW | |
| 1317 | -MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+ | |
| 1318 | -DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN | |
| 1319 | -AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY | |
| 1320 | -42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER | |
| 1321 | -qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG | |
| 1322 | -zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A | |
| 1323 | -v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg | |
| 1324 | -Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw= | |
| 1325 | ------END CERTIFICATE----- | |
| 1326 | ------BEGIN CERTIFICATE----- | |
| 1327 | -MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE | |
| 1328 | -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D | |
| 1329 | -QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4 | |
| 1330 | -MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV | |
| 1331 | -BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy | |
| 1332 | -MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN | |
| 1333 | -AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp | |
| 1334 | -/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy | |
| 1335 | -Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD | |
| 1336 | -36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky | |
| 1337 | -0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY | |
| 1338 | -12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD | |
| 1339 | -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9 | |
| 1340 | -GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB | |
| 1341 | -9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo | |
| 1342 | -XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze | |
| 1343 | -ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3 | |
| 1344 | -XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ== | |
| 1345 | ------END CERTIFICATE----- | |
| 1346 | ------BEGIN CERTIFICATE----- | |
| 1347 | -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx | |
| 1348 | -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 | |
| 1349 | -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD | |
| 1350 | -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X | |
| 1351 | -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw | |
| 1352 | -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u | |
| 1353 | -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr | |
| 1354 | -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN | |
| 1355 | -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA | |
| 1356 | -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC | |
| 1357 | -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW | |
| 1358 | -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P | |
| 1359 | -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW | |
| 1360 | -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 | |
| 1361 | -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz | |
| 1362 | -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO | |
| 1363 | -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB | |
| 1364 | -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs | |
| 1365 | -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs | |
| 1366 | -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s | |
| 1367 | -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg | |
| 1368 | -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g | |
| 1369 | -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 | |
| 1370 | -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg | |
| 1371 | -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg | |
| 1372 | -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY | |
| 1373 | -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g | |
| 1374 | -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 | |
| 1375 | -Fp1hBWeAyNDYpQcCNJgEjTME1A== | |
| 1376 | ------END CERTIFICATE----- | |
| 1377 | ------BEGIN CERTIFICATE----- | |
| 1378 | -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV | |
| 1379 | -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe | |
| 1380 | -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 | |
| 1381 | -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB | |
| 1382 | -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 | |
| 1383 | -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC | |
| 1384 | -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu | |
| 1385 | -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL | |
| 1386 | -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG | |
| 1387 | -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD | |
| 1388 | -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi | |
| 1389 | -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 | |
| 1390 | -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY | |
| 1391 | -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi | |
| 1392 | -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC | |
| 1393 | -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 | |
| 1394 | -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 | |
| 1395 | -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz | |
| 1396 | -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu | |
| 1397 | -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm | |
| 1398 | -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg | |
| 1399 | -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs | |
| 1400 | -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv | |
| 1401 | -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 | |
| 1402 | -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 | |
| 1403 | -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 | |
| 1404 | -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg | |
| 1405 | -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs | |
| 1406 | -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G | |
| 1407 | -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO | |
| 1408 | -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP | |
| 1409 | -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ | |
| 1410 | -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk | |
| 1411 | -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK | |
| 1412 | -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI | |
| 1413 | ------END CERTIFICATE----- | |
| 1414 | ------BEGIN CERTIFICATE----- | |
| 1415 | -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx | |
| 1416 | -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 | |
| 1417 | -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD | |
| 1418 | -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 | |
| 1419 | -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G | |
| 1420 | -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh | |
| 1421 | -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l | |
| 1422 | -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG | |
| 1423 | -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK | |
| 1424 | -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX | |
| 1425 | -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc | |
| 1426 | -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E | |
| 1427 | -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G | |
| 1428 | -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu | |
| 1429 | -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh | |
| 1430 | -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv | |
| 1431 | -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln | |
| 1432 | -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 | |
| 1433 | -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh | |
| 1434 | -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph | |
| 1435 | -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo | |
| 1436 | -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP | |
| 1437 | -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj | |
| 1438 | -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo | |
| 1439 | -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA | |
| 1440 | -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 | |
| 1441 | -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa | |
| 1442 | -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS | |
| 1443 | -NitjrFgBazMpUIaD8QFI | |
| 1444 | ------END CERTIFICATE----- | |
| 1445 | ------BEGIN CERTIFICATE----- | |
| 1446 | -MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN | |
| 1447 | -MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g | |
| 1448 | -Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz | |
| 1449 | -MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV | |
| 1450 | -BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC | |
| 1451 | -cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8 | |
| 1452 | -52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL | |
| 1453 | -yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2 | |
| 1454 | -agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi | |
| 1455 | -MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA | |
| 1456 | -UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR | |
| 1457 | -/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E | |
| 1458 | -BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE | |
| 1459 | -CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ | |
| 1460 | -S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC | |
| 1461 | -SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG | |
| 1462 | -A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj | |
| 1463 | -grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG | |
| 1464 | -SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg | |
| 1465 | -HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R | |
| 1466 | -8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M | |
| 1467 | -Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58 | |
| 1468 | -IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih | |
| 1469 | -bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y | |
| 1470 | ------END CERTIFICATE----- | |
| 1471 | ------BEGIN CERTIFICATE----- | |
| 1472 | -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC | |
| 1473 | -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 | |
| 1474 | -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 | |
| 1475 | -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz | |
| 1476 | -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw | |
| 1477 | -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR | |
| 1478 | -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG | |
| 1479 | -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp | |
| 1480 | -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D | |
| 1481 | -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ | |
| 1482 | -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug | |
| 1483 | -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU | |
| 1484 | -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC | |
| 1485 | -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv | |
| 1486 | -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw | |
| 1487 | -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl | |
| 1488 | -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh | |
| 1489 | -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy | |
| 1490 | -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh | |
| 1491 | -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI | |
| 1492 | -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T | |
| 1493 | -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq | |
| 1494 | -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p | |
| 1495 | -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD | |
| 1496 | -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL | |
| 1497 | -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk | |
| 1498 | -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 | |
| 1499 | -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R | |
| 1500 | -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y | |
| 1501 | -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW | |
| 1502 | -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK | |
| 1503 | -SnQ2+Q== | |
| 1504 | ------END CERTIFICATE----- | |
| 1505 | ------BEGIN CERTIFICATE----- | |
| 1506 | -MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6 | |
| 1507 | -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp | |
| 1508 | -dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX | |
| 1509 | -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx | |
| 1510 | -MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O | |
| 1511 | -isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY | |
| 1512 | -78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9 | |
| 1513 | -zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G | |
| 1514 | -A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd | |
| 1515 | -BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA | |
| 1516 | -Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN | |
| 1517 | -T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD | |
| 1518 | -mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E= | |
| 1519 | ------END CERTIFICATE----- | |
| 1520 | ------BEGIN CERTIFICATE----- | |
| 1521 | -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 | |
| 1522 | -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp | |
| 1523 | -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX | |
| 1524 | -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy | |
| 1525 | -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp | |
| 1526 | -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg | |
| 1527 | -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl | |
| 1528 | -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh | |
| 1529 | -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 | |
| 1530 | -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu | |
| 1531 | -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB | |
| 1532 | -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR | |
| 1533 | -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc | |
| 1534 | -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ | |
| 1535 | -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ | |
| 1536 | -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO | |
| 1537 | -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch | |
| 1538 | -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 | |
| 1539 | -7CAFYd4= | |
| 1540 | ------END CERTIFICATE----- | |
| 1541 | ------BEGIN CERTIFICATE----- | |
| 1542 | -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb | |
| 1543 | -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow | |
| 1544 | -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp | |
| 1545 | -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow | |
| 1546 | -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G | |
| 1547 | -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV | |
| 1548 | -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB | |
| 1549 | -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM | |
| 1550 | -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S | |
| 1551 | -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 | |
| 1552 | -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk | |
| 1553 | -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz | |
| 1554 | -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV | |
| 1555 | -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud | |
| 1556 | -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv | |
| 1557 | -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw | |
| 1558 | -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww | |
| 1559 | -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 | |
| 1560 | -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj | |
| 1561 | -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI | |
| 1562 | -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ | |
| 1563 | -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl | |
| 1564 | -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= | |
| 1565 | ------END CERTIFICATE----- | |
| 1566 | ------BEGIN CERTIFICATE----- | |
| 1567 | -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG | |
| 1568 | -A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD | |
| 1569 | -VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 | |
| 1570 | -MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV | |
| 1571 | -BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy | |
| 1572 | -dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ | |
| 1573 | -ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII | |
| 1574 | -0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI | |
| 1575 | -uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI | |
| 1576 | -hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 | |
| 1577 | -YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc | |
| 1578 | -1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== | |
| 1579 | ------END CERTIFICATE----- | |
| 1580 | ------BEGIN CERTIFICATE----- | |
| 1581 | -MIID+zCCAuOgAwIBAgIENuWNnjANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMC | |
| 1582 | -VVkxKzApBgNVBAoTIkFETUlOSVNUUkFDSU9OIE5BQ0lPTkFMIERFIENPUlJFT1Mx | |
| 1583 | -HzAdBgNVBAsTFlNFUlZJQ0lPUyBFTEVDVFJPTklDT1MxLDAqBgNVBAMTI1NFUlZJ | |
| 1584 | -Q0lPUyBERSBDRVJUSUZJQ0FDSU9OIC0gQS5OLkMuMSkwJwYKCZImiZPyLGQBAxQZ | |
| 1585 | -Y29ycmVvX2NlcnRAY29ycmVvLmNvbS51eTAeFw05OTAzMDkyMTA4MDdaFw0wOTAz | |
| 1586 | -MDkyMTA4MDdaMIG0MQswCQYDVQQGEwJVWTErMCkGA1UEChMiQURNSU5JU1RSQUNJ | |
| 1587 | -T04gTkFDSU9OQUwgREUgQ09SUkVPUzEfMB0GA1UECxMWU0VSVklDSU9TIEVMRUNU | |
| 1588 | -Uk9OSUNPUzEsMCoGA1UEAxMjU0VSVklDSU9TIERFIENFUlRJRklDQUNJT04gLSBB | |
| 1589 | -Lk4uQy4xKTAnBgoJkiaJk/IsZAEDFBljb3JyZW9fY2VydEBjb3JyZW8uY29tLnV5 | |
| 1590 | -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiov7CtZakOTiUYqiuXs | |
| 1591 | -+gX64sjeQWuvA9sAWu9IN89XifvdyZIQ3ncDlRyQPse2ZyU7VZjv2Tz+JuSKO0Sp | |
| 1592 | -dDeDCncndLipca3dlxPSyqIuuLqdyb5Z6Nly8oqFZhxHXrSHgtYP32cmpr02sfNd | |
| 1593 | -kFBRdjIsOy+qX2Fe41TVEl3/DY0Rx4J6Nt/hTBbEdN0tau/QsfAzp/6/N2dDEi55 | |
| 1594 | -SpSvhPsHEQhOMJN16QFUzsXeFIbwrq6bciUPRHfi82yveZwuSceemHYyFpq8AN7g | |
| 1595 | -tCAFkRfdgBUU7jZBxCGP7tkAShnGcWGlEV0AO+SndGw6Sm6D4HoxXCFl+AiHQodn | |
| 1596 | -5QIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCZ | |
| 1597 | -H0kiXPhlf4NukGYvAs+09lY6Zjaht5INNsNFWDZL5szxWsxzMp6aqK7Tduvv/oAs | |
| 1598 | -4xA0skefHCVq6ES1j0y+gfPQwMELzQMWoEJVVk7B47QgrV+btlVfSBAS7ySzVnzM | |
| 1599 | -BRuyySqpaBGSfi/pP0Tx0MaQG0vd92Ei7GmGFUCz4qVqd/Oz8lQn2kkqZBn0Od58 | |
| 1600 | -dobZnHJXCjT19S/QOWgb20WlGOOAVDuTEJAUwhQBqqV2LX0P5Fbz/3Mqb47B2ID7 | |
| 1601 | -u5AdGxpJnARjxEId82+7s0lK3UftSboCLSqMxwNWueJo0MGwhrWMSzqujRyIhEz9 | |
| 1602 | -UK+ZJnYIwoCtKHlV0y3m | |
| 1603 | ------END CERTIFICATE----- | |
| 1604 | ------BEGIN CERTIFICATE----- | |
| 1605 | -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP | |
| 1606 | -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx | |
| 1607 | -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV | |
| 1608 | -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI | |
| 1609 | -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG | |
| 1610 | -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk | |
| 1611 | -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk | |
| 1612 | -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL | |
| 1613 | -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN | |
| 1614 | -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw | |
| 1615 | -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG | |
| 1616 | -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX | |
| 1617 | -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H | |
| 1618 | -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO | |
| 1619 | -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv | |
| 1620 | -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w | |
| 1621 | -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa | |
| 1622 | ------END CERTIFICATE----- | |
| 1623 | ------BEGIN CERTIFICATE----- | |
| 1624 | -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP | |
| 1625 | -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx | |
| 1626 | -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV | |
| 1627 | -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI | |
| 1628 | -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o | |
| 1629 | -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt | |
| 1630 | -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s | |
| 1631 | -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej | |
| 1632 | -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu | |
| 1633 | -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw | |
| 1634 | -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG | |
| 1635 | -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil | |
| 1636 | -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ | |
| 1637 | -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD | |
| 1638 | -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 | |
| 1639 | -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 | |
| 1640 | -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M | |
| 1641 | ------END CERTIFICATE----- | |
| 1642 | ------BEGIN CERTIFICATE----- | |
| 1643 | -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl | |
| 1644 | -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp | |
| 1645 | -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw | |
| 1646 | -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE | |
| 1647 | -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp | |
| 1648 | -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 | |
| 1649 | -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf | |
| 1650 | -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN | |
| 1651 | -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 | |
| 1652 | -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa | |
| 1653 | -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA | |
| 1654 | -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G | |
| 1655 | -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR | |
| 1656 | -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 | |
| 1657 | -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD | |
| 1658 | -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w | |
| 1659 | -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 | |
| 1660 | -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D | |
| 1661 | -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl | |
| 1662 | -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp | |
| 1663 | -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY | |
| 1664 | -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= | |
| 1665 | ------END CERTIFICATE----- | |
| 1666 | ------BEGIN CERTIFICATE----- | |
| 1667 | -MIIDXDCCAsWgAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF | |
| 1668 | -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU | |
| 1669 | -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI | |
| 1670 | -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcN | |
| 1671 | -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla | |
| 1672 | -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy | |
| 1673 | -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y | |
| 1674 | -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 | |
| 1675 | -c3RDZW50ZXIgQ2xhc3MgMSBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA | |
| 1676 | -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALAp67R2 | |
| 1677 | -s67Xtlu0Xue947GcSQRXW6Gr2X8TG/26YavY53HfLQCUXVFIfSPvdWKEkDwKH1kR | |
| 1678 | -dC+OgKX9MAI9KVLNchpJIZy8y1KOSKFjlsgQhTBpV3RFwFqGxtU94GhXfTFqJI1F | |
| 1679 | -lz4xfmhmMm4kbewyNslByvAxRMijYcoboDYfAgMBAAGjazBpMA8GA1UdEwEB/wQF | |
| 1680 | -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 | |
| 1681 | -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G | |
| 1682 | -CSqGSIb3DQEBBAUAA4GBAE+ZWYXIZFaCxW892EYJLzxRwadwWIGSEur01BYAll5y | |
| 1683 | -KOfWNl8anK8fwoMatAVVmaZYXDco8lce612/sdNFD3IcA9IAxyxV2v5fiXaL4tR3 | |
| 1684 | -9U0JF6/EuqswK0+4HerZ/1nwUHRGul7qNrDrknsPWNoy4VK9IzcP9fMASq6wXt5u | |
| 1685 | ------END CERTIFICATE----- | |
| 1686 | ------BEGIN CERTIFICATE----- | |
| 1687 | -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF | |
| 1688 | -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU | |
| 1689 | -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI | |
| 1690 | -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN | |
| 1691 | -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla | |
| 1692 | -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy | |
| 1693 | -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y | |
| 1694 | -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 | |
| 1695 | -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA | |
| 1696 | -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y | |
| 1697 | -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw | |
| 1698 | -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8 | |
| 1699 | -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF | |
| 1700 | -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 | |
| 1701 | -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G | |
| 1702 | -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/ | |
| 1703 | -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms | |
| 1704 | -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk | |
| 1705 | ------END CERTIFICATE----- | |
| 1706 | ------BEGIN CERTIFICATE----- | |
| 1707 | -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF | |
| 1708 | -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU | |
| 1709 | -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI | |
| 1710 | -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN | |
| 1711 | -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla | |
| 1712 | -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy | |
| 1713 | -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y | |
| 1714 | -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 | |
| 1715 | -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA | |
| 1716 | -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF | |
| 1717 | -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw | |
| 1718 | -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW | |
| 1719 | -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF | |
| 1720 | -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 | |
| 1721 | -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G | |
| 1722 | -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE | |
| 1723 | -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD | |
| 1724 | -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0 | |
| 1725 | ------END CERTIFICATE----- | |
| 1726 | ------BEGIN CERTIFICATE----- | |
| 1727 | -MIIDXDCCAsWgAwIBAgICA+wwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF | |
| 1728 | -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU | |
| 1729 | -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI | |
| 1730 | -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcN | |
| 1731 | -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla | |
| 1732 | -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy | |
| 1733 | -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y | |
| 1734 | -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 | |
| 1735 | -c3RDZW50ZXIgQ2xhc3MgNCBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA | |
| 1736 | -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL8vY9Y2 | |
| 1737 | -e7IN01X1ZGzmJV3GtMgUuiU4g+tWYqVVqWWj9COZwku50M1UZ6ajoKOpMyt25L2t | |
| 1738 | -d7LtXBJ0w8W2D1KacpNDkGJmFQ9Fpd3g3bhvQG5XwXlyo2CqunYdEolTWvwCvuEJ | |
| 1739 | -E8VKL9w9ixmt14skRftM9M1cNR0pTFHz8mxVAgMBAAGjazBpMA8GA1UdEwEB/wQF | |
| 1740 | -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 | |
| 1741 | -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G | |
| 1742 | -CSqGSIb3DQEBBAUAA4GBAHIR5ZVBRTK6HPiAFPtmt+uums51g1HAroq7F9Eo53Yf | |
| 1743 | -E8YrRnGmFXcEmedespEkbwMMc+cjnnbKvgzFy8SQGPxtOm7gVoAbw9+MNhNH+WXB | |
| 1744 | -g1LVXFy92UJm4TUhaBIQpGCQPj+B6MOMobAVBFrO6yxUVkv5BHktneqMWS+teb1I | |
| 1745 | ------END CERTIFICATE----- | |
| 1746 | ------BEGIN CERTIFICATE----- | |
| 1747 | -MIIDQzCCAqygAwIBAgICA/EwDQYJKoZIhvcNAQEEBQAwgcExCzAJBgNVBAYTAkRF | |
| 1748 | -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU | |
| 1749 | -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI | |
| 1750 | -MSgwJgYDVQQLEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYD | |
| 1751 | -VQQDEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMB4XDTk4MDMwOTEx | |
| 1752 | -NTk1OVoXDTExMDEwMTExNTk1OVowgcExCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdI | |
| 1753 | -YW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRl | |
| 1754 | -ciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSgwJgYDVQQLEx9U | |
| 1755 | -QyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYDVQQDEx9UQyBUcnVz | |
| 1756 | -dENlbnRlciBUaW1lIFN0YW1waW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB | |
| 1757 | -iQKBgQC2S+Q2apwDjOkZb76H+fcwjD4vGE1U3ujMLAg9fEYvhAyd6+/7EZRj5+y0 | |
| 1758 | -zRP9mvYwZcWKfciC0aO9EXsefr8v3GeBBFtwS+rhs7aYPbW+cNM+eV0LN5hYisP6 | |
| 1759 | -mSiPAQRjHoB/d3LEXX//T1f/qslWd0Ot/BY3ajgvdEEZN6f/wwIDAQABo0gwRjAP | |
| 1760 | -BgNVHRMBAf8EBTADAQH/MDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0 | |
| 1761 | -Y2VudGVyLmRlL2d1aWRlbGluZXMwDQYJKoZIhvcNAQEEBQADgYEALqyPthmgpIxe | |
| 1762 | -AbsJadYuBft2K2k118hvBqgb8tVfC8xL88FT9JW/nI5ss197C8bmnKfQLAM+1Tnh | |
| 1763 | -nG7rQfjJZEO4PaJK4R5PhZLXG0duPxfar+wWPo4aiS1BidZpL0OqXS7y6NBU7g0W | |
| 1764 | -xdpw2BJ0RK4WS3TtjAurNQpIaOxpAyk= | |
| 1765 | ------END CERTIFICATE----- | |
| 1766 | ------BEGIN CERTIFICATE----- | |
| 1767 | -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE | |
| 1768 | -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg | |
| 1769 | -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV | |
| 1770 | -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl | |
| 1771 | -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA | |
| 1772 | -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu | |
| 1773 | -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a | |
| 1774 | -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 | |
| 1775 | -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN | |
| 1776 | -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD | |
| 1777 | -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG | |
| 1778 | -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu | |
| 1779 | -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME | |
| 1780 | -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 | |
| 1781 | -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw | |
| 1782 | -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ | |
| 1783 | -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO | |
| 1784 | -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX | |
| 1785 | -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ | |
| 1786 | -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 | |
| 1787 | -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 | |
| 1788 | -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 | |
| 1789 | -aQNiuJkFBT1reBK9sG9l | |
| 1790 | ------END CERTIFICATE----- | |
| 1791 | ------BEGIN CERTIFICATE----- | |
| 1792 | -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE | |
| 1793 | -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw | |
| 1794 | -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU | |
| 1795 | -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A | |
| 1796 | -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr | |
| 1797 | -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s | |
| 1798 | -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU | |
| 1799 | -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj | |
| 1800 | -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r | |
| 1801 | -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ | |
| 1802 | -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB | |
| 1803 | -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv | |
| 1804 | -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl | |
| 1805 | -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu | |
| 1806 | -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg | |
| 1807 | -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud | |
| 1808 | -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD | |
| 1809 | -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny | |
| 1810 | -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy | |
| 1811 | -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ | |
| 1812 | -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG | |
| 1813 | -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom | |
| 1814 | -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO | |
| 1815 | -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y | |
| 1816 | -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB | |
| 1817 | -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ | |
| 1818 | -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 | |
| 1819 | -BKNDLdr8C2LqL19iUw== | |
| 1820 | ------END CERTIFICATE----- | |
| 1821 | ------BEGIN CERTIFICATE----- | |
| 1822 | -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx | |
| 1823 | -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD | |
| 1824 | -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT | |
| 1825 | -ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj | |
| 1826 | -IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X | |
| 1827 | -DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw | |
| 1828 | -EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE | |
| 1829 | -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy | |
| 1830 | -dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD | |
| 1831 | -QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN | |
| 1832 | -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 | |
| 1833 | -dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK | |
| 1834 | -wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 | |
| 1835 | -G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF | |
| 1836 | -AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 | |
| 1837 | -c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P | |
| 1838 | -9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== | |
| 1839 | ------END CERTIFICATE----- | |
| 1840 | ------BEGIN CERTIFICATE----- | |
| 1841 | -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx | |
| 1842 | -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD | |
| 1843 | -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT | |
| 1844 | -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt | |
| 1845 | -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu | |
| 1846 | -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT | |
| 1847 | -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa | |
| 1848 | -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp | |
| 1849 | -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG | |
| 1850 | -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh | |
| 1851 | -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY | |
| 1852 | -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E | |
| 1853 | -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq | |
| 1854 | -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN | |
| 1855 | -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP | |
| 1856 | -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa | |
| 1857 | -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei | |
| 1858 | -gQ== | |
| 1859 | ------END CERTIFICATE----- | |
| 1860 | ------BEGIN CERTIFICATE----- | |
| 1861 | -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx | |
| 1862 | -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD | |
| 1863 | -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT | |
| 1864 | -ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p | |
| 1865 | -dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv | |
| 1866 | -bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa | |
| 1867 | -QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY | |
| 1868 | -BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u | |
| 1869 | -IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl | |
| 1870 | -bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu | |
| 1871 | -Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs | |
| 1872 | -Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI | |
| 1873 | -Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD | |
| 1874 | -ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG | |
| 1875 | -SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH | |
| 1876 | -b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh | |
| 1877 | -KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ | |
| 1878 | ------END CERTIFICATE----- | |
| 1879 | ------BEGIN CERTIFICATE----- | |
| 1880 | -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx | |
| 1881 | -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD | |
| 1882 | -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv | |
| 1883 | -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy | |
| 1884 | -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t | |
| 1885 | -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB | |
| 1886 | -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG | |
| 1887 | -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp | |
| 1888 | -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl | |
| 1889 | -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv | |
| 1890 | -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE | |
| 1891 | -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ | |
| 1892 | -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR | |
| 1893 | -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG | |
| 1894 | -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI | |
| 1895 | -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM | |
| 1896 | -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== | |
| 1897 | ------END CERTIFICATE----- | |
| 1898 | ------BEGIN CERTIFICATE----- | |
| 1899 | -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx | |
| 1900 | -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD | |
| 1901 | -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv | |
| 1902 | -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm | |
| 1903 | -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx | |
| 1904 | -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT | |
| 1905 | -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 | |
| 1906 | -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl | |
| 1907 | -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 | |
| 1908 | -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD | |
| 1909 | -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 | |
| 1910 | -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX | |
| 1911 | -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj | |
| 1912 | -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG | |
| 1913 | -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e | |
| 1914 | -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ | |
| 1915 | -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= | |
| 1916 | ------END CERTIFICATE----- | |
| 1917 | ------BEGIN CERTIFICATE----- | |
| 1918 | -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb | |
| 1919 | -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow | |
| 1920 | -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 | |
| 1921 | -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla | |
| 1922 | -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO | |
| 1923 | -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD | |
| 1924 | -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B | |
| 1925 | -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW | |
| 1926 | -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt | |
| 1927 | -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL | |
| 1928 | -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW | |
| 1929 | -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 | |
| 1930 | -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G | |
| 1931 | -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD | |
| 1932 | -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v | |
| 1933 | -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo | |
| 1934 | -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu | |
| 1935 | -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ | |
| 1936 | -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 | |
| 1937 | -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS | |
| 1938 | -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ | |
| 1939 | -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn | |
| 1940 | -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi | |
| 1941 | ------END CERTIFICATE----- | |
| 1942 | ------BEGIN CERTIFICATE----- | |
| 1943 | -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB | |
| 1944 | -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug | |
| 1945 | -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho | |
| 1946 | -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw | |
| 1947 | -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG | |
| 1948 | -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD | |
| 1949 | -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu | |
| 1950 | -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN | |
| 1951 | -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 | |
| 1952 | -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ | |
| 1953 | -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK | |
| 1954 | -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq | |
| 1955 | -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW | |
| 1956 | -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB | |
| 1957 | -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT | |
| 1958 | -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js | |
| 1959 | -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr | |
| 1960 | -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB | |
| 1961 | -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft | |
| 1962 | -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj | |
| 1963 | -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH | |
| 1964 | -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv | |
| 1965 | -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 | |
| 1966 | -mfnGV/TJVTl4uix5yaaIK/QI | |
| 1967 | ------END CERTIFICATE----- | |
| 1968 | ------BEGIN CERTIFICATE----- | |
| 1969 | -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB | |
| 1970 | -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug | |
| 1971 | -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho | |
| 1972 | -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt | |
| 1973 | -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa | |
| 1974 | -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV | |
| 1975 | -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l | |
| 1976 | -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE | |
| 1977 | -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls | |
| 1978 | -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B | |
| 1979 | -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 | |
| 1980 | -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l | |
| 1981 | -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm | |
| 1982 | -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM | |
| 1983 | -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws | |
| 1984 | -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud | |
| 1985 | -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw | |
| 1986 | -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 | |
| 1987 | -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH | |
| 1988 | -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u | |
| 1989 | -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 | |
| 1990 | -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ | |
| 1991 | -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim | |
| 1992 | -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk | |
| 1993 | -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= | |
| 1994 | ------END CERTIFICATE----- | |
| 1995 | ------BEGIN CERTIFICATE----- | |
| 1996 | -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB | |
| 1997 | -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug | |
| 1998 | -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho | |
| 1999 | -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt | |
| 2000 | -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG | |
| 2001 | -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe | |
| 2002 | -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v | |
| 2003 | -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh | |
| 2004 | -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn | |
| 2005 | -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ | |
| 2006 | -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a | |
| 2007 | -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd | |
| 2008 | -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI | |
| 2009 | -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy | |
| 2010 | -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD | |
| 2011 | -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 | |
| 2012 | -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy | |
| 2013 | -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF | |
| 2014 | -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM | |
| 2015 | -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli | |
| 2016 | -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE | |
| 2017 | -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t | |
| 2018 | -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS | |
| 2019 | -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== | |
| 2020 | ------END CERTIFICATE----- | |
| 2021 | ------BEGIN CERTIFICATE----- | |
| 2022 | -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB | |
| 2023 | -ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug | |
| 2024 | -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho | |
| 2025 | -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt | |
| 2026 | -TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 | |
| 2027 | -NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 | |
| 2028 | -IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD | |
| 2029 | -VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS | |
| 2030 | -Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB | |
| 2031 | -DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 | |
| 2032 | -N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH | |
| 2033 | -iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe | |
| 2034 | -YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 | |
| 2035 | -axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g | |
| 2036 | -yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD | |
| 2037 | -AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh | |
| 2038 | -ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V | |
| 2039 | -VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB | |
| 2040 | -BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y | |
| 2041 | -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs | |
| 2042 | -QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 | |
| 2043 | -ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM | |
| 2044 | -YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb | |
| 2045 | -QErNaLly7HF27FSOH4UMAWr6pjisH8SE | |
| 2046 | ------END CERTIFICATE----- | |
| 2047 | ------BEGIN CERTIFICATE----- | |
| 2048 | -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB | |
| 2049 | -lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug | |
| 2050 | -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho | |
| 2051 | -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt | |
| 2052 | -T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV | |
| 2053 | -BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc | |
| 2054 | -BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 | |
| 2055 | -dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC | |
| 2056 | -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP | |
| 2057 | -HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO | |
| 2058 | -KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo | |
| 2059 | -5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ | |
| 2060 | -pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb | |
| 2061 | -kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC | |
| 2062 | -AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E | |
| 2063 | -FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov | |
| 2064 | -L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV | |
| 2065 | -HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN | |
| 2066 | -AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw | |
| 2067 | -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB | |
| 2068 | -mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU | |
| 2069 | -4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 | |
| 2070 | -81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR | |
| 2071 | -Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= | |
| 2072 | ------END CERTIFICATE----- | |
| 2073 | ------BEGIN CERTIFICATE----- | |
| 2074 | -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw | |
| 2075 | -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl | |
| 2076 | -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu | |
| 2077 | -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT | |
| 2078 | -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp | |
| 2079 | -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD | |
| 2080 | -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT | |
| 2081 | -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ | |
| 2082 | -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu | |
| 2083 | -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | |
| 2084 | -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 | |
| 2085 | -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO | |
| 2086 | -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV | |
| 2087 | -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb | |
| 2088 | -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 | |
| 2089 | -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr | |
| 2090 | -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a | |
| 2091 | -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 | |
| 2092 | -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 | |
| 2093 | -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs | |
| 2094 | -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 | |
| 2095 | -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== | |
| 2096 | ------END CERTIFICATE----- | |
| 2097 | ------BEGIN CERTIFICATE----- | |
| 2098 | -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ | |
| 2099 | -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy | |
| 2100 | -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s | |
| 2101 | -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp | |
| 2102 | -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 | |
| 2103 | -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV | |
| 2104 | -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp | |
| 2105 | -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu | |
| 2106 | -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g | |
| 2107 | -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt | |
| 2108 | -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU | |
| 2109 | -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO | |
| 2110 | -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY | |
| 2111 | -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o | |
| 2112 | -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN | |
| 2113 | -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E | |
| 2114 | -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe | |
| 2115 | -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u | |
| 2116 | -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU | |
| 2117 | -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI | |
| 2118 | -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP | |
| 2119 | -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q | |
| 2120 | ------END CERTIFICATE----- | |
| 2121 | ------BEGIN CERTIFICATE----- | |
| 2122 | -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw | |
| 2123 | -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl | |
| 2124 | -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu | |
| 2125 | -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT | |
| 2126 | -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp | |
| 2127 | -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD | |
| 2128 | -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT | |
| 2129 | -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ | |
| 2130 | -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu | |
| 2131 | -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | |
| 2132 | -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b | |
| 2133 | -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t | |
| 2134 | -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu | |
| 2135 | -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm | |
| 2136 | -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ | |
| 2137 | -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu | |
| 2138 | -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te | |
| 2139 | -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe | |
| 2140 | -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC | |
| 2141 | -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p | |
| 2142 | -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt | |
| 2143 | -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== | |
| 2144 | ------END CERTIFICATE----- | |
| 2145 | ------BEGIN CERTIFICATE----- | |
| 2146 | -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw | |
| 2147 | -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl | |
| 2148 | -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu | |
| 2149 | -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT | |
| 2150 | -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp | |
| 2151 | -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD | |
| 2152 | -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT | |
| 2153 | -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ | |
| 2154 | -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu | |
| 2155 | -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | |
| 2156 | -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 | |
| 2157 | -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ | |
| 2158 | -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd | |
| 2159 | -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm | |
| 2160 | -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY | |
| 2161 | -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ | |
| 2162 | -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 | |
| 2163 | -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq | |
| 2164 | -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm | |
| 2165 | -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c | |
| 2166 | -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ | |
| 2167 | -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== | |
| 2168 | ------END CERTIFICATE----- | |
| 2169 | ------BEGIN CERTIFICATE----- | |
| 2170 | -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr | |
| 2171 | -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl | |
| 2172 | -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv | |
| 2173 | -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw | |
| 2174 | -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h | |
| 2175 | -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l | |
| 2176 | -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h | |
| 2177 | -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E | |
| 2178 | -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV | |
| 2179 | -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq | |
| 2180 | -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t | |
| 2181 | -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL | |
| 2182 | -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD | |
| 2183 | -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF | |
| 2184 | -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR | |
| 2185 | -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 | |
| 2186 | -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd | |
| 2187 | -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw | |
| 2188 | -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt | |
| 2189 | -398znM/jra6O1I7mT1GvFpLgXPYHDw== | |
| 2190 | ------END CERTIFICATE----- | |
| 2191 | ------BEGIN CERTIFICATE----- | |
| 2192 | -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC | |
| 2193 | -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD | |
| 2194 | -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v | |
| 2195 | -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 | |
| 2196 | -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww | |
| 2197 | -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G | |
| 2198 | -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi | |
| 2199 | -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 | |
| 2200 | -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE | |
| 2201 | -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O | |
| 2202 | -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu | |
| 2203 | -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE | |
| 2204 | -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB | |
| 2205 | -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB | |
| 2206 | -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw | |
| 2207 | -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo | |
| 2208 | -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ | |
| 2209 | -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 | |
| 2210 | -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx | |
| 2211 | -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ | |
| 2212 | -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= | |
| 2213 | ------END CERTIFICATE----- | |
| 2214 | ------BEGIN CERTIFICATE----- | |
| 2215 | -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB | |
| 2216 | -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk | |
| 2217 | -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY | |
| 2218 | -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx | |
| 2219 | -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 | |
| 2220 | -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy | |
| 2221 | -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB | |
| 2222 | -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 | |
| 2223 | -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP | |
| 2224 | -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q | |
| 2225 | -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 | |
| 2226 | -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa | |
| 2227 | -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi | |
| 2228 | -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P | |
| 2229 | -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs | |
| 2230 | -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 | |
| 2231 | -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD | |
| 2232 | -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR | |
| 2233 | -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt | |
| 2234 | -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa | |
| 2235 | -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy | |
| 2236 | -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ | |
| 2237 | -O+7ETPTsJ3xCwnR8gooJybQDJbw= | |
| 2238 | ------END CERTIFICATE----- | |
| 2239 | ------BEGIN CERTIFICATE----- | |
| 2240 | -MIIEQTCCA6qgAwIBAgICAQQwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh | |
| 2241 | -bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu | |
| 2242 | -Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g | |
| 2243 | -QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe | |
| 2244 | -BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDExNDIxMDUyMVoX | |
| 2245 | -DTI0MDEwOTIxMDUyMVowgewxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25h | |
| 2246 | -MRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5v | |
| 2247 | -bG9naWVzLCBJbmMuMTAwLgYDVQQLEydodHRwOi8vd3d3LnN0YXJmaWVsZHRlY2gu | |
| 2248 | -Y29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0YXJmaWVsZCBTZWN1cmUgQ2VydGlm | |
| 2249 | -aWNhdGlvbiBBdXRob3JpdHkxKjAoBgkqhkiG9w0BCQEWG3ByYWN0aWNlc0BzdGFy | |
| 2250 | -ZmllbGR0ZWNoLmNvbTCBnTANBgkqhkiG9w0BAQEFAAOBiwAwgYcCgYEA2xFDa9zR | |
| 2251 | -aXhZSehudBQIdBFsfrcqqCLYQjx6z59QskaupmcaIyK+D7M0+6yskKpbKMJw9raK | |
| 2252 | -gCrgm5xS4JGocqAW4cROfREJs5651POyUMRtSAi9vCqXDG2jimo8ms9KNNwe3upa | |
| 2253 | -JsChooKpSvuGIhKQOrKC1JKRn6lFn8Ok2/sCAQOjggEhMIIBHTAMBgNVHRMEBTAD | |
| 2254 | -AQH/MAsGA1UdDwQEAwIBBjBKBgNVHR8EQzBBMD+gPaA7hjlodHRwOi8vY2VydGlm | |
| 2255 | -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvcm9vdC5jcmwwTwYD | |
| 2256 | -VR0gBEgwRjBEBgtghkgBhvhFAQcXAzA1MDMGCCsGAQUFBwIBFidodHRwOi8vd3d3 | |
| 2257 | -LnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkwOQYIKwYBBQUHAQEELTArMCkG | |
| 2258 | -CCsGAQUFBzABhh1odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNoLmNvbTAdBgNVHQ4E | |
| 2259 | -FgQUrFXet+oT6/yYaOJTYB7xJT6M7ucwCQYDVR0jBAIwADANBgkqhkiG9w0BAQUF | |
| 2260 | -AAOBgQB+HJi+rQONJYXufJCIIiv+J/RCsux/tfxyaAWkfZHvKNF9IDk7eQg3aBhS | |
| 2261 | -1Y8D0olPHhHR6aV0S/xfZ2WEcYR4WbfWydfXkzXmE6uUPI6TQImMwNfy5wdS0XCP | |
| 2262 | -mIzroG3RNlOQoI8WMB7ew79/RqWVKvnI3jvbd/TyMrEzYaIwNQ== | |
| 2263 | ------END CERTIFICATE----- | |
| 2264 | ------BEGIN CERTIFICATE----- | |
| 2265 | -MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 | |
| 2266 | -IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB | |
| 2267 | -IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA | |
| 2268 | -Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO | |
| 2269 | -BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi | |
| 2270 | -MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ | |
| 2271 | -ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC | |
| 2272 | -CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ | |
| 2273 | -8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6 | |
| 2274 | -zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y | |
| 2275 | -fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7 | |
| 2276 | -w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc | |
| 2277 | -G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k | |
| 2278 | -epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q | |
| 2279 | -laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ | |
| 2280 | -QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU | |
| 2281 | -fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826 | |
| 2282 | -YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w | |
| 2283 | -ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY | |
| 2284 | -gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe | |
| 2285 | -MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0 | |
| 2286 | -IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy | |
| 2287 | -dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw | |
| 2288 | -czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0 | |
| 2289 | -dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl | |
| 2290 | -aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC | |
| 2291 | -AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg | |
| 2292 | -b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB | |
| 2293 | -ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc | |
| 2294 | -nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg | |
| 2295 | -18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c | |
| 2296 | -gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl | |
| 2297 | -Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY | |
| 2298 | -sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T | |
| 2299 | -SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF | |
| 2300 | -CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum | |
| 2301 | -GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk | |
| 2302 | -zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW | |
| 2303 | -omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD | |
| 2304 | ------END CERTIFICATE----- | |
| 2305 | ------BEGIN CERTIFICATE----- | |
| 2306 | -MIIFEjCCBHugAwIBAgICAQwwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh | |
| 2307 | -bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu | |
| 2308 | -Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g | |
| 2309 | -QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe | |
| 2310 | -BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MzkxNloX | |
| 2311 | -DTI0MDYyOTE3MzkxNlowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVs | |
| 2312 | -ZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAy | |
| 2313 | -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0A | |
| 2314 | -MIIBCAKCAQEAtzLI/ulxpgSFrQwRZN/OTe/IAxiHP6Gr+zymn/DDodrU2G4rU5D7 | |
| 2315 | -JKQ+hPCe6F/s5SdE9SimP3ve4CrwyK9TL57KBQGTHo9mHDmnTfpatnMEJWbrd3/n | |
| 2316 | -WcZKmSUUVOsmx/N/GdUwcI+vsEYq/63rKe3Xn6oEh6PU+YmlNF/bQ5GCNtlmPLG4 | |
| 2317 | -uYL9nDo+EMg77wZlZnqbGRg9/3FRPDAuX749d3OyXQZswyNWmiuFJpIcpwKz5D8N | |
| 2318 | -rwh5grg2Peqc0zWzvGnK9cyd6P1kjReAM25eSl2ZyR6HtJ0awNVuEzUjXt+bXz3v | |
| 2319 | -1vd2wuo+u3gNHEJnawTY+Nbab4vyRKABqwIBA6OCAfMwggHvMB0GA1UdDgQWBBS/ | |
| 2320 | -X7fRzt0fhvRbVazc1xDCDqmI5zCB0gYDVR0jBIHKMIHHoYHBpIG+MIG7MSQwIgYD | |
| 2321 | -VQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD | |
| 2322 | -ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAyIFBvbGljeSBWYWxp | |
| 2323 | -ZGF0aW9uIEF1dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5j | |
| 2324 | -b20vMSAwHgYJKoZIhvcNAQkBFhFpbmZvQHZhbGljZXJ0LmNvbYIBATAPBgNVHRMB | |
| 2325 | -Af8EBTADAQH/MDkGCCsGAQUFBwEBBC0wKzApBggrBgEFBQcwAYYdaHR0cDovL29j | |
| 2326 | -c3Auc3RhcmZpZWxkdGVjaC5jb20wSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2Nl | |
| 2327 | -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5L3Jvb3QuY3Js | |
| 2328 | -MFEGA1UdIARKMEgwRgYEVR0gADA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY2VydGlm | |
| 2329 | -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkwDgYDVR0PAQH/BAQD | |
| 2330 | -AgEGMA0GCSqGSIb3DQEBBQUAA4GBAKVi8afCXSWlcD284ipxs33kDTcdVWptobCr | |
| 2331 | -mADkhWBKIMuh8D1195TaQ39oXCUIuNJ9MxB73HZn8bjhU3zhxoNbKXuNSm8uf0So | |
| 2332 | -GkVrMgfHeMpkksK0hAzc3S1fTbvdiuo43NlmouxBulVtWmQ9twPMHOKRUJ7jCUSV | |
| 2333 | -FxdzPcwl | |
| 2334 | ------END CERTIFICATE----- | |
| 2335 | ------BEGIN CERTIFICATE----- | |
| 2336 | -MIIFBzCCA++gAwIBAgICAgEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCVVMx | |
| 2337 | -JTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsT | |
| 2338 | -KVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2 | |
| 2339 | -MTExNjAxMTU0MFoXDTI2MTExNjAxMTU0MFowgdwxCzAJBgNVBAYTAlVTMRAwDgYD | |
| 2340 | -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy | |
| 2341 | -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTkwNwYDVQQLEzBodHRwOi8vY2VydGlm | |
| 2342 | -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0 | |
| 2343 | -YXJmaWVsZCBTZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxETAPBgNVBAUT | |
| 2344 | -CDEwNjg4NDM1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4qddo+1m | |
| 2345 | -72ovKzYf3Y3TBQKgyg9eGa44cs8W2lRKy0gK9KFzEWWFQ8lbFwyaK74PmFF6YCkN | |
| 2346 | -bN7i6OUVTVb/kNGnpgQ/YAdKym+lEOez+FyxvCsq3AF59R019Xoog/KTc4KJrGBt | |
| 2347 | -y8JIwh3UBkQXPKwBR6s+cIQJC7ggCEAgh6FjGso+g9I3s5iNMj83v6G3W1/eXDOS | |
| 2348 | -zz4HzrlIS+LwVVAv+HBCidGTlopj2WYN5lhuuW2QvcrchGbyOY5bplhVc8tibBvX | |
| 2349 | -IBY7LFn1y8hWMkpQJ7pV06gBy3KpdIsMrTrlFbYq32X43or174Q7+edUZQuAvUdF | |
| 2350 | -pfBE2FM7voDxLwIDAQABo4IBRDCCAUAwHQYDVR0OBBYEFElLUifRG7zyoSFqYntR | |
| 2351 | -QnqK19VWMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtVrNzXEMIOqYjnMBIGA1UdEwEB | |
| 2352 | -/wQIMAYBAf8CAQAwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi8v | |
| 2353 | -b2NzcC5zdGFyZmllbGR0ZWNoLmNvbTBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8v | |
| 2354 | -Y2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvc2Zyb290 | |
| 2355 | -LmNybDBRBgNVHSAESjBIMEYGBFUdIAAwPjA8BggrBgEFBQcCARYwaHR0cDovL2Nl | |
| 2356 | -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5MA4GA1UdDwEB | |
| 2357 | -/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAhlK6sx+mXmuQpmQq/EWyrp8+s2Kv | |
| 2358 | -2x9nxL3KoS/HnA0hV9D4NiHOOiU+eHaz2d283vtshF8Mow0S6xE7cV+AHvEfbQ5f | |
| 2359 | -wezUpfdlux9MlQETsmqcC+sfnbHn7RkNvIV88xe9WWOupxoFzUfjLZZiUTIKCGhL | |
| 2360 | -Indf90XcYd70yysiKUQl0p8Ld3qhJnxK1w/C0Ty6DqeVmlsFChD5VV/Bl4t0zF4o | |
| 2361 | -aRN+0AqNnQ9gVHrEjBs1D3R6cLKCzx214orbKsayUWm/EheSYBeqPVsJ+IdlHaek | |
| 2362 | -KOUiAgOCRJo0Y577KM/ozS4OUiDtSss4fJ2ubnnXlSyokfOGASGRS7VApA== | |
| 2363 | ------END CERTIFICATE----- |
vendor/ezcrypto-0.7.2/rakefile
| ... | ... | @@ -1,200 +0,0 @@ |
| 1 | -require 'rubygems' | |
| 2 | -require 'rake' | |
| 3 | -require 'rake/testtask' | |
| 4 | -require 'rake/rdoctask' | |
| 5 | -require 'rake/packagetask' | |
| 6 | -require 'rake/gempackagetask' | |
| 7 | -require 'rake/contrib/rubyforgepublisher' | |
| 8 | - | |
| 9 | -PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' | |
| 10 | -PKG_NAME = 'ezcrypto' | |
| 11 | -PKG_VERSION = '0.7.2' + PKG_BUILD | |
| 12 | -PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" | |
| 13 | - | |
| 14 | -RELEASE_NAME = "REL #{PKG_VERSION}" | |
| 15 | - | |
| 16 | -RUBY_FORGE_PROJECT = "ezcrypto" | |
| 17 | -RUBY_FORGE_USER = "pelleb" | |
| 18 | - | |
| 19 | -desc "Default Task" | |
| 20 | -task :default => [ :test ] | |
| 21 | - | |
| 22 | -# Run the unit tests | |
| 23 | -Rake::TestTask.new { |t| | |
| 24 | - t.libs << "test" | |
| 25 | - t.pattern = 'test/*_test.rb' | |
| 26 | - t.verbose = true | |
| 27 | -} | |
| 28 | - | |
| 29 | - | |
| 30 | -# Genereate the RDoc documentation | |
| 31 | -Rake::RDocTask.new { |rdoc| | |
| 32 | - rdoc.rdoc_dir = 'doc' | |
| 33 | - rdoc.title = "EzCrypto - Simplified Crypto Library" | |
| 34 | -# rdoc.options << '--line-numbers --inline-source --main README #--template=jamis' | |
| 35 | - rdoc.template = "#{ENV['template']}.rb" if ENV['template'] | |
| 36 | - rdoc.rdoc_files.include('README.rdoc') | |
| 37 | - rdoc.rdoc_files.include('README_ACTIVE_CRYPTO') | |
| 38 | - rdoc.rdoc_files.include('README_DIGITAL_SIGNATURES') | |
| 39 | - rdoc.rdoc_files.include('CHANGELOG') | |
| 40 | - rdoc.rdoc_files.include('lib/*.rb') | |
| 41 | -} | |
| 42 | - | |
| 43 | - | |
| 44 | -# Create compressed packages | |
| 45 | -spec = Gem::Specification.new do |s| | |
| 46 | - s.platform = Gem::Platform::RUBY | |
| 47 | - s.name = PKG_NAME | |
| 48 | - s.summary = "Simplified encryption library." | |
| 49 | - s.description = %q{Makes it easier and safer to write crypto code.} | |
| 50 | - s.version = PKG_VERSION | |
| 51 | - | |
| 52 | - s.author = "Pelle Braendgaard" | |
| 53 | - s.email = "pelle@stakeventures.com" | |
| 54 | - s.rubyforge_project = "ezcrypto" | |
| 55 | - s.homepage = "http://ezcrypto.rubyforge.org" | |
| 56 | - | |
| 57 | - | |
| 58 | - s.has_rdoc = true | |
| 59 | - s.requirements << 'none' | |
| 60 | - s.require_path = 'lib' | |
| 61 | - | |
| 62 | - s.files = [ "rakefile", "README.rdoc", "README_ACTIVE_CRYPTO", "README_DIGITAL_SIGNATURES", "MIT-LICENSE","CHANGELOG","init.rb" ] | |
| 63 | - ["lib","test"].each do |dir| | |
| 64 | - s.files = s.files + Dir.glob( "#{dir}/*" ) | |
| 65 | - end | |
| 66 | - s.extra_rdoc_files = ["CHANGELOG", "README.rdoc","README_ACTIVE_CRYPTO","README_DIGITAL_SIGNATURES"] | |
| 67 | - s.test_files = Dir.glob("test/*") | |
| 68 | -end | |
| 69 | - | |
| 70 | -Rake::GemPackageTask.new(spec) do |p| | |
| 71 | - p.gem_spec = spec | |
| 72 | - p.need_tar = true | |
| 73 | - p.need_zip = true | |
| 74 | -end | |
| 75 | - | |
| 76 | - | |
| 77 | -desc "Publish the GEM" | |
| 78 | -task :pgem => [:package] do | |
| 79 | - Rake::SshFilePublisher.new("pelleb@rubyforge.org", "/var/www/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload | |
| 80 | -end | |
| 81 | - | |
| 82 | -desc "Publish the API documentation" | |
| 83 | -task :pdoc => [:rdoc] do | |
| 84 | - Rake::SshDirPublisher.new("pelleb@rubyforge.org", "/var/www/gforge-projects/ezcrypto", "doc").upload | |
| 85 | -end | |
| 86 | - | |
| 87 | -desc "Publish the release files to RubyForge." | |
| 88 | -task :rubyforge_upload => :package do | |
| 89 | - files = %w(gem tgz zip).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" } | |
| 90 | - | |
| 91 | - if RUBY_FORGE_PROJECT then | |
| 92 | - require 'net/http' | |
| 93 | - require 'open-uri' | |
| 94 | - | |
| 95 | - project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/" | |
| 96 | - project_data = open(project_uri) { |data| data.read } | |
| 97 | - group_id = project_data[/[?&]group_id=(\d+)/, 1] | |
| 98 | - raise "Couldn't get group id" unless group_id | |
| 99 | - | |
| 100 | - # This echos password to shell which is a bit sucky | |
| 101 | - if ENV["RUBY_FORGE_PASSWORD"] | |
| 102 | - password = ENV["RUBY_FORGE_PASSWORD"] | |
| 103 | - else | |
| 104 | - print "#{RUBY_FORGE_USER}@rubyforge.org's password: " | |
| 105 | - password = STDIN.gets.chomp | |
| 106 | - end | |
| 107 | - | |
| 108 | - login_response = Net::HTTP.start("rubyforge.org", 80) do |http| | |
| 109 | - data = [ | |
| 110 | - "login=1", | |
| 111 | - "form_loginname=#{RUBY_FORGE_USER}", | |
| 112 | - "form_pw=#{password}" | |
| 113 | - ].join("&") | |
| 114 | - http.post("/account/login.php", data) | |
| 115 | - end | |
| 116 | - | |
| 117 | - cookie = login_response["set-cookie"] | |
| 118 | - raise "Login failed" unless cookie | |
| 119 | - headers = { "Cookie" => cookie } | |
| 120 | - | |
| 121 | - release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}" | |
| 122 | - release_data = open(release_uri, headers) { |data| data.read } | |
| 123 | - package_id = release_data[/[?&]package_id=(\d+)/, 1] | |
| 124 | - raise "Couldn't get package id" unless package_id | |
| 125 | - | |
| 126 | - first_file = true | |
| 127 | - release_id = "" | |
| 128 | - | |
| 129 | - files.each do |filename| | |
| 130 | - basename = File.basename(filename) | |
| 131 | - file_ext = File.extname(filename) | |
| 132 | - file_data = File.open(filename, "rb") { |file| file.read } | |
| 133 | - | |
| 134 | - puts "Releasing #{basename}..." | |
| 135 | - | |
| 136 | - release_response = Net::HTTP.start("rubyforge.org", 80) do |http| | |
| 137 | - release_date = Time.now.strftime("%Y-%m-%d %H:%M") | |
| 138 | - type_map = { | |
| 139 | - ".zip" => "3000", | |
| 140 | - ".tgz" => "3110", | |
| 141 | - ".gz" => "3110", | |
| 142 | - ".gem" => "1400" | |
| 143 | - }; type_map.default = "9999" | |
| 144 | - type = type_map[file_ext] | |
| 145 | - boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor" | |
| 146 | - | |
| 147 | - query_hash = if first_file then | |
| 148 | - { | |
| 149 | - "group_id" => group_id, | |
| 150 | - "package_id" => package_id, | |
| 151 | - "release_name" => PKG_FILE_NAME, | |
| 152 | - "release_date" => release_date, | |
| 153 | - "type_id" => type, | |
| 154 | - "processor_id" => "8000", # Any | |
| 155 | - "release_notes" => "", | |
| 156 | - "release_changes" => "", | |
| 157 | - "preformatted" => "1", | |
| 158 | - "submit" => "1" | |
| 159 | - } | |
| 160 | - else | |
| 161 | - { | |
| 162 | - "group_id" => group_id, | |
| 163 | - "release_id" => release_id, | |
| 164 | - "package_id" => package_id, | |
| 165 | - "step2" => "1", | |
| 166 | - "type_id" => type, | |
| 167 | - "processor_id" => "8000", # Any | |
| 168 | - "submit" => "Add This File" | |
| 169 | - } | |
| 170 | - end | |
| 171 | - | |
| 172 | - query = "?" + query_hash.map do |(name, value)| | |
| 173 | - [name, URI.encode(value)].join("=") | |
| 174 | - end.join("&") | |
| 175 | - | |
| 176 | - data = [ | |
| 177 | - "--" + boundary, | |
| 178 | - "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"", | |
| 179 | - "Content-Type: application/octet-stream", | |
| 180 | - "Content-Transfer-Encoding: binary", | |
| 181 | - "", file_data, "" | |
| 182 | - ].join("\x0D\x0A") | |
| 183 | - | |
| 184 | - release_headers = headers.merge( | |
| 185 | - "Content-Type" => "multipart/form-data; boundary=#{boundary}" | |
| 186 | - ) | |
| 187 | - | |
| 188 | - target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php" | |
| 189 | - http.post(target + query, data, release_headers) | |
| 190 | - end | |
| 191 | - | |
| 192 | - if first_file then | |
| 193 | - release_id = release_response.body[/release_id=(\d+)/, 1] | |
| 194 | - raise("Couldn't get release id") unless release_id | |
| 195 | - end | |
| 196 | - | |
| 197 | - first_file = false | |
| 198 | - end | |
| 199 | - end | |
| 200 | -end |
vendor/ezcrypto-0.7.2/test/._active_crypto_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._dsig_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._encrypt_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._sf-class2-root.crt
No preview for this file type
vendor/ezcrypto-0.7.2/test/._sf_intermediate.crt
No preview for this file type
vendor/ezcrypto-0.7.2/test/._test_helper.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._testsigner.pem
No preview for this file type
vendor/ezcrypto-0.7.2/test/active_crypto_test.rb
| ... | ... | @@ -1,211 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + "/../lib/") | |
| 2 | -require File.join(File.dirname(__FILE__), 'test_helper') | |
| 3 | -require 'test/unit' | |
| 4 | -require 'active_crypto' | |
| 5 | - | |
| 6 | - | |
| 7 | -class User < ActiveRecord::Base | |
| 8 | - has_many :secrets | |
| 9 | - has_many :groups | |
| 10 | - keyholder | |
| 11 | -end | |
| 12 | - | |
| 13 | -class Secret < ActiveRecord::Base | |
| 14 | - encrypt :name,:email, :key=>:user, :base64=>true | |
| 15 | - belongs_to :user | |
| 16 | - has_many :children | |
| 17 | -end | |
| 18 | - | |
| 19 | -class Child < ActiveRecord::Base | |
| 20 | - encrypt :email, :key=>:secret, :base64=>true | |
| 21 | - belongs_to :secret | |
| 22 | -end | |
| 23 | - | |
| 24 | -class Asset<ActiveRecord::Base | |
| 25 | - encrypt :title, :base64=>true | |
| 26 | - has_many :caps,:dependent=>:destroy | |
| 27 | - | |
| 28 | - def self.create(title,email) | |
| 29 | - asset=Asset.new | |
| 30 | - asset.set_session_key(EzCrypto::Key.generate) | |
| 31 | - asset.title=title | |
| 32 | - if asset.save | |
| 33 | - asset.share(email) | |
| 34 | - else | |
| 35 | - nil | |
| 36 | - end | |
| 37 | - end | |
| 38 | - | |
| 39 | - def share(email=nil) | |
| 40 | - Cap.create_for_asset(self,email) | |
| 41 | - end | |
| 42 | - | |
| 43 | -end | |
| 44 | - | |
| 45 | -class AssetRaw<ActiveRecord::Base | |
| 46 | - set_table_name "assets" | |
| 47 | -end | |
| 48 | - | |
| 49 | -class Cap < ActiveRecord::Base | |
| 50 | - belongs_to :asset | |
| 51 | - encrypt :shared_key, :base64=>true | |
| 52 | - | |
| 53 | - def self.find_by_key(cap_key) | |
| 54 | - cap_key.chop | |
| 55 | - hash=Digest::SHA1.hexdigest(cap_key) | |
| 56 | - if (cap_key.length>=20) # Sanity check | |
| 57 | - cap=self.find_by_key_hash(hash) | |
| 58 | - if cap | |
| 59 | - cap.set_encoded_key(cap_key) | |
| 60 | - cap.asset.set_encoded_key(cap.shared_key) | |
| 61 | - cap | |
| 62 | - end | |
| 63 | - else | |
| 64 | - nil | |
| 65 | - end | |
| 66 | - end | |
| 67 | - | |
| 68 | - def self.create_for_asset(asset,email=nil) | |
| 69 | - cap=Cap.new | |
| 70 | - cap.email=email if email | |
| 71 | - cap.asset=asset | |
| 72 | - if cap.save | |
| 73 | - cap.set_session_key(EzCrypto::Key.generate) | |
| 74 | - cap_key=cap.session_key.encode | |
| 75 | - cap.key_hash=Digest::SHA1.hexdigest(cap_key) | |
| 76 | - cap.shared_key=asset.session_key.encode | |
| 77 | - cap.save | |
| 78 | - cap_key | |
| 79 | - else | |
| 80 | - nil | |
| 81 | - end | |
| 82 | - end | |
| 83 | - | |
| 84 | -end | |
| 85 | - | |
| 86 | -class Group < ActiveRecord::Base | |
| 87 | - belongs_to :user | |
| 88 | - has_many :group_secrets | |
| 89 | - | |
| 90 | - encrypt :name,:group_key, :key=>:user , :base64=>true | |
| 91 | -end | |
| 92 | - | |
| 93 | -class GroupSecret < ActiveRecord::Base | |
| 94 | - belongs_to :group | |
| 95 | - | |
| 96 | - encrypt :title,:body, :key=>:group, :base64=>true | |
| 97 | - | |
| 98 | -end | |
| 99 | - | |
| 100 | -class ActiveCryptoTest < Test::Unit::TestCase | |
| 101 | - | |
| 102 | - def setup | |
| 103 | - end | |
| 104 | - | |
| 105 | - def test_key_holder_in_record | |
| 106 | - user=User.new | |
| 107 | - user.name="bob" | |
| 108 | - user.save | |
| 109 | - assert user.kind_of?(ActiveCrypto::KeyHolder) | |
| 110 | - assert user.kind_of?(ActiveRecord::Base) | |
| 111 | - assert user.kind_of?(User) | |
| 112 | - assert_nil user.session_key | |
| 113 | - user.enter_password "shhcccc" | |
| 114 | - assert_not_nil user.session_key | |
| 115 | - assert_not_nil user.session_key.encrypt("test") | |
| 116 | - end | |
| 117 | - | |
| 118 | - def test_encrypted_child | |
| 119 | - user=User.new | |
| 120 | - user.save | |
| 121 | - assert_nil user.session_key | |
| 122 | - user.enter_password "shhcccc" | |
| 123 | - assert_not_nil user.session_key | |
| 124 | - assert user.kind_of?(ActiveCrypto::KeyHolder) | |
| 125 | - assert user.kind_of?(ActiveRecord::Base) | |
| 126 | - assert user.kind_of?(User) | |
| 127 | - | |
| 128 | - jill=user.secrets.create | |
| 129 | - | |
| 130 | - assert_not_nil jill | |
| 131 | - assert jill.kind_of?(ActiveCrypto::AssociationKeyHolder) | |
| 132 | - assert jill.kind_of?(ActiveCrypto::KeyHolder) | |
| 133 | - assert jill.kind_of?(ActiveCrypto::Encrypted) | |
| 134 | - assert jill.kind_of?(ActiveRecord::Base) | |
| 135 | - assert jill.kind_of?(Secret) | |
| 136 | - | |
| 137 | - assert jill.respond_to?(:session_key) | |
| 138 | - | |
| 139 | - assert_not_nil jill.user | |
| 140 | - assert_not_nil jill.user.session_key | |
| 141 | - | |
| 142 | - | |
| 143 | - assert_not_nil jill.session_key | |
| 144 | - assert_equal user.session_key,jill.session_key | |
| 145 | - | |
| 146 | - jill.name="jill" | |
| 147 | - jill.save | |
| 148 | - | |
| 149 | - | |
| 150 | - assert_equal "jill",jill.name | |
| 151 | - | |
| 152 | - jill=user.secrets.first | |
| 153 | - assert_not_nil jill.session_key | |
| 154 | - assert_equal user.session_key,jill.session_key | |
| 155 | - assert_equal "jill",jill.name | |
| 156 | - | |
| 157 | - child=jill.children.create | |
| 158 | - child.email="pelle@neubia.com" | |
| 159 | - child.save | |
| 160 | - | |
| 161 | - assert_not_nil child.secret | |
| 162 | - assert_not_nil child.secret.session_key | |
| 163 | - | |
| 164 | - | |
| 165 | - assert_not_nil child.session_key | |
| 166 | - assert_equal user.session_key,child.session_key | |
| 167 | - | |
| 168 | - assert_equal "pelle@neubia.com",child.email | |
| 169 | - | |
| 170 | - child=jill.children.first | |
| 171 | - | |
| 172 | - assert_not_nil child.secret | |
| 173 | - assert_not_nil child.secret.session_key | |
| 174 | - | |
| 175 | - | |
| 176 | - assert_not_nil child.session_key | |
| 177 | - assert_equal user.session_key,child.session_key | |
| 178 | - | |
| 179 | - assert_equal "pelle@neubia.com",child.email | |
| 180 | - | |
| 181 | - end | |
| 182 | - | |
| 183 | - def test_caps | |
| 184 | - key=Asset.create("title","pelle@neubia.com") | |
| 185 | - assert_not_nil key | |
| 186 | - cap=Cap.find_by_key key | |
| 187 | - assert_not_nil cap | |
| 188 | - assert_not_nil cap.asset | |
| 189 | - | |
| 190 | - assert_equal "title",cap.asset.title | |
| 191 | - assert_equal "title",cap.asset["title"] | |
| 192 | - assert_equal "pelle@neubia.com",cap.email | |
| 193 | - assert_equal "pelle@neubia.com",cap["email"] | |
| 194 | - | |
| 195 | - # Non decrypting version | |
| 196 | - raw=AssetRaw.find cap.asset.id | |
| 197 | - assert_not_equal "title",raw.title | |
| 198 | - assert_not_equal "title",raw["title"] | |
| 199 | - | |
| 200 | - bob_key=cap.asset.share("bob@bob.com") | |
| 201 | - bob_cap=Cap.find_by_key bob_key | |
| 202 | - | |
| 203 | - assert_not_equal key,bob_key | |
| 204 | - assert_not_nil bob_cap | |
| 205 | - assert_not_nil bob_cap.asset | |
| 206 | - assert_equal "title",bob_cap.asset.title | |
| 207 | - assert_equal "bob@bob.com",bob_cap.email | |
| 208 | - end | |
| 209 | -end | |
| 210 | - | |
| 211 | - |
vendor/ezcrypto-0.7.2/test/agree2.com.cert
| ... | ... | @@ -1,31 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIFIzCCBAugAwIBAgIEdjTPCDANBgkqhkiG9w0BAQUFADCB3DELMAkGA1UEBhMC | |
| 3 | -VVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNV | |
| 4 | -BAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOTA3BgNVBAsTMGh0dHA6 | |
| 5 | -Ly9jZXJ0aWZpY2F0ZXMuc3RhcmZpZWxkdGVjaC5jb20vcmVwb3NpdG9yeTExMC8G | |
| 6 | -A1UEAxMoU3RhcmZpZWxkIFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTER | |
| 7 | -MA8GA1UEBRMIMTA2ODg0MzUwHhcNMDkwMzEwMTUyMzQ1WhcNMTAwMzExMjAzNzE0 | |
| 8 | -WjB6MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN | |
| 9 | -U2FuIEZyYW5jaXNjbzEYMBYGA1UEChMPRXh0cmEgRWFnbGUgTExDMQ8wDQYDVQQL | |
| 10 | -EwZBZ3JlZTIxEzARBgNVBAMTCmFncmVlMi5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD | |
| 11 | -gY0AMIGJAoGBAPNfoI6m+NIm69qkuOgOwlRI64W6SmJ+xlxz/fduK/0XtqRlANL9 | |
| 12 | -aENxkAEvJz6tpsinNOAry96ucajZP9WUMWfy+wmXkTWLQN1jVPZUJs2mBBw6ajgm | |
| 13 | -8xLgPWn3czRve0Q34poWGLFb+CZdcZScbnHcn6Dkt8SwMsFFBhLB0FM/AgMBAAGj | |
| 14 | -ggHQMIIBzDAPBgNVHRMBAf8EBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr | |
| 15 | -BgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwOAYDVR0fBDEwLzAtoCugKYYnaHR0cDov | |
| 16 | -L2NybC5zdGFyZmllbGR0ZWNoLmNvbS9zZnMyLTAuY3JsMFkGA1UdIARSMFAwTgYL | |
| 17 | -YIZIAYb9bgEHFwIwPzA9BggrBgEFBQcCARYxaHR0cDovL2NlcnRpZmljYXRlcy5z | |
| 18 | -dGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5LzCBjQYIKwYBBQUHAQEEgYAwfjAq | |
| 19 | -BggrBgEFBQcwAYYeaHR0cDovL29jc3Auc3RhcmZpZWxkdGVjaC5jb20vMFAGCCsG | |
| 20 | -AQUFBzAChkRodHRwOi8vY2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3Jl | |
| 21 | -cG9zaXRvcnkvc2ZfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBRJS1In0Ru8 | |
| 22 | -8qEhamJ7UUJ6itfVVjAlBgNVHREEHjAcggphZ3JlZTIuY29tgg53d3cuYWdyZWUy | |
| 23 | -LmNvbTAdBgNVHQ4EFgQU8U68CbJHeGRhPSl2LRtx9IaocA4wDQYJKoZIhvcNAQEF | |
| 24 | -BQADggEBACFngInbvv6YmtiwHFWZswcY7eoqMpUggXC2jmX9ZT+w9CcdgVlygow6 | |
| 25 | -jeR2HY7FPSKkm0YaDEAYYIoYeFHwaG6E4B6ykGvw5OQ4FESsQT/lxVlbeF0J1ERh | |
| 26 | -YEpvwrVrVK/ppRd5En2hvl6kKvRyqjTcHKT/MKZ2xQXUZ6JEVKIME3HLS+IHR/Sc | |
| 27 | -uo1aH3dXS73lFmWLH4P12KIfqnzQ938FDynW875bvKgl4HAzJj66wnMOoL5INOuK | |
| 28 | -d+r9xUBD/uWXJPaXLzC8vuORHInLWNE4M2cpNeVNsU8siX4c9mC/Hj+Ss1nYBW0D | |
| 29 | -4b8GcJ+tY+2Y+ODBKJn/s0qhB6TXoKM= | |
| 30 | ------END CERTIFICATE----- | |
| 31 | - |
vendor/ezcrypto-0.7.2/test/association_key_holder_test.rb
| ... | ... | @@ -1,38 +0,0 @@ |
| 1 | -require 'key_holder_test' | |
| 2 | - | |
| 3 | -class User < ActiveRecord::Base | |
| 4 | - keyholder | |
| 5 | -end | |
| 6 | - | |
| 7 | -class AssociationKeyHolderTest < KeyHolderTest | |
| 8 | - def setup | |
| 9 | - @key_holder=User.create | |
| 10 | - end | |
| 11 | - | |
| 12 | - def test_should_retain_session_key_on_reload | |
| 13 | - key=EzCrypto::Key.generate | |
| 14 | - key_holder.set_session_key key | |
| 15 | - assert_not_nil key_holder.session_key | |
| 16 | - assert_equal key.raw,key_holder.session_key.raw | |
| 17 | - | |
| 18 | - reloaded=User.find key_holder.id | |
| 19 | - assert_not_nil reloaded.session_key | |
| 20 | - assert_equal key.raw,reloaded.session_key.raw | |
| 21 | - end | |
| 22 | - | |
| 23 | - def test_should_retain_session_key_on_reload_for_record_with_key_set_before_create | |
| 24 | - key=EzCrypto::Key.generate | |
| 25 | - key_holder=User.new | |
| 26 | - assert_nil key_holder.session_key | |
| 27 | - | |
| 28 | - key_holder.set_session_key key | |
| 29 | - assert_not_nil key_holder.session_key | |
| 30 | - | |
| 31 | - assert_equal key.raw,key_holder.session_key.raw | |
| 32 | - key_holder.save | |
| 33 | - | |
| 34 | - reloaded=User.find key_holder.id | |
| 35 | - assert_not_nil reloaded.session_key | |
| 36 | - assert_equal key.raw,reloaded.session_key.raw | |
| 37 | - end | |
| 38 | -end |
vendor/ezcrypto-0.7.2/test/database.yml
| ... | ... | @@ -1,18 +0,0 @@ |
| 1 | -sqlite: | |
| 2 | - :adapter: sqlite | |
| 3 | - :dbfile: crypto_test.sqlite.db | |
| 4 | -sqlite3: | |
| 5 | - :adapter: sqlite3 | |
| 6 | - :dbfile: crypto_test.sqlite3.db | |
| 7 | -postgresql: | |
| 8 | - :adapter: postgresql | |
| 9 | - :username: postgres | |
| 10 | - :password: postgres | |
| 11 | - :database: crypto_test | |
| 12 | - :min_messages: ERROR | |
| 13 | -mysql: | |
| 14 | - :adapter: mysql | |
| 15 | - :host: localhost | |
| 16 | - :username: rails | |
| 17 | - :password: | |
| 18 | - :database: crypto_test | |
| 19 | 0 | \ No newline at end of file |
vendor/ezcrypto-0.7.2/test/debug.log
No preview for this file type
vendor/ezcrypto-0.7.2/test/digest_test.rb
| ... | ... | @@ -1,51 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + "/../lib/") | |
| 2 | - | |
| 3 | -require 'test/unit' | |
| 4 | -require 'ezcrypto' | |
| 5 | -require 'base64' | |
| 6 | -require 'digest/sha1' | |
| 7 | - | |
| 8 | -class DigestTest < Test::Unit::TestCase | |
| 9 | - | |
| 10 | - def setup | |
| 11 | - end | |
| 12 | - | |
| 13 | - def test_digest | |
| 14 | - ["hello","","test"].each do |data| | |
| 15 | - assert_equal Digest::SHA1.digest(data)[0..15],EzCrypto::Digester.digest(data) | |
| 16 | - end | |
| 17 | - end | |
| 18 | - | |
| 19 | - def test_digest64 | |
| 20 | - ["hello","","test"].each do |data| | |
| 21 | - assert_equal Base64.encode64(Digest::SHA1.digest(data)[0..15]),EzCrypto::Digester.digest64(data) | |
| 22 | - end | |
| 23 | - end | |
| 24 | - | |
| 25 | - def test_hexdigest | |
| 26 | - ["hello","","test"].each do |data| | |
| 27 | - assert_equal Digest::SHA1.hexdigest(data)[0..40],EzCrypto::Digester.hexdigest(data) | |
| 28 | - end | |
| 29 | - end | |
| 30 | - | |
| 31 | - def test_generate_key | |
| 32 | - key=EzCrypto::Digester.generate_key | |
| 33 | - assert 16,key.size | |
| 34 | - end | |
| 35 | - | |
| 36 | - def test_generate_key64 | |
| 37 | - key=EzCrypto::Digester.generate_key64 | |
| 38 | - assert 24,key.size | |
| 39 | - | |
| 40 | - end | |
| 41 | - | |
| 42 | - def test_generate_hexkey | |
| 43 | - key=EzCrypto::Digester.generate_hexkey | |
| 44 | - assert 40,key.size | |
| 45 | - | |
| 46 | - end | |
| 47 | - | |
| 48 | - def test_get_key | |
| 49 | - | |
| 50 | - end | |
| 51 | -end | |
| 52 | 0 | \ No newline at end of file |
vendor/ezcrypto-0.7.2/test/dsakey.pem
| ... | ... | @@ -1,12 +0,0 @@ |
| 1 | ------BEGIN DSA PRIVATE KEY----- | |
| 2 | -MIIBugIBAAKBgQCGwFYmCsY6XeXmC2vB2VwGy7N4jV0vjwTh22VAXLlMtKrjJJ0k | |
| 3 | -WW/QI7wYWqttUIDQ1//ETRlW5+uV9E9WF1EtMo/Dv48LU/c1YCDjA5EAp2Wu/CnU | |
| 4 | -Qgd6ibLNTvkzSDdiZhryuq3nv0s1hLR6cysMOWg/l6usiwU5jgWDXrMK2wIVAJS8 | |
| 5 | -gadASb6W8ZL6Ua4EqIFdYCdbAoGAWzwV5WF157O/oZeOmNv6IuV8MLD0m3JkJNkZ | |
| 6 | -DrY0G0M7YIVryCkmvCOuu8PLu7M+GGp9hEKV/wrpWJgiOlWAz0C0yxwxMyz3GFbx | |
| 7 | -ipqEL0CqKkl4QVMpKAhL1h2iIL+yI7p/8whcfeMnQXb0iIMD7AVvF++AJ/LAzulb | |
| 8 | -zZXdfP8CgYApedgToseniE9KWVrV3CMXrkwf3Er5CgcVF2JJWAfBbm8/PI2wX5GU | |
| 9 | -zT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC/4KhgHbK4nCJ3ReLiy2+MkHi | |
| 10 | -msgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ2d30ggOqCHTBtgIUZ6jIgX60 | |
| 11 | -PmOeqfRh32svQkP1p/E= | |
| 12 | ------END DSA PRIVATE KEY----- |
vendor/ezcrypto-0.7.2/test/dsapubkey.pem
| ... | ... | @@ -1,12 +0,0 @@ |
| 1 | ------BEGIN PUBLIC KEY----- | |
| 2 | -MIIBtjCCASsGByqGSM44BAEwggEeAoGBAIbAViYKxjpd5eYLa8HZXAbLs3iNXS+P | |
| 3 | -BOHbZUBcuUy0quMknSRZb9AjvBhaq21QgNDX/8RNGVbn65X0T1YXUS0yj8O/jwtT | |
| 4 | -9zVgIOMDkQCnZa78KdRCB3qJss1O+TNIN2JmGvK6ree/SzWEtHpzKww5aD+Xq6yL | |
| 5 | -BTmOBYNeswrbAhUAlLyBp0BJvpbxkvpRrgSogV1gJ1sCgYBbPBXlYXXns7+hl46Y | |
| 6 | -2/oi5XwwsPSbcmQk2RkOtjQbQztghWvIKSa8I667w8u7sz4Yan2EQpX/CulYmCI6 | |
| 7 | -VYDPQLTLHDEzLPcYVvGKmoQvQKoqSXhBUykoCEvWHaIgv7Ijun/zCFx94ydBdvSI | |
| 8 | -gwPsBW8X74An8sDO6VvNld18/wOBhAACgYApedgToseniE9KWVrV3CMXrkwf3Er5 | |
| 9 | -CgcVF2JJWAfBbm8/PI2wX5GUzT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC | |
| 10 | -/4KhgHbK4nCJ3ReLiy2+MkHimsgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ | |
| 11 | -2d30ggOqCHTBtg== | |
| 12 | ------END PUBLIC KEY----- |
vendor/ezcrypto-0.7.2/test/dsig_test.rb
| ... | ... | @@ -1,288 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + "/../lib/") | |
| 2 | - | |
| 3 | -require 'test/unit' | |
| 4 | -require 'fileutils' | |
| 5 | -require 'ezsig' | |
| 6 | -require 'base64' | |
| 7 | - | |
| 8 | -class EzCryptoTest < Test::Unit::TestCase | |
| 9 | - | |
| 10 | - def setup | |
| 11 | - end | |
| 12 | - | |
| 13 | - def _test_generate_key #very slow so not run by default | |
| 14 | - signer=EzCrypto::Signer.generate | |
| 15 | - assert signer.rsa? | |
| 16 | - assert !signer.dsa? | |
| 17 | - | |
| 18 | - assert_signer(signer) | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_from_file | |
| 22 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem" | |
| 23 | - assert signer.rsa? | |
| 24 | - assert !signer.dsa? | |
| 25 | - assert_signer(signer) | |
| 26 | - end | |
| 27 | - | |
| 28 | - def test_dsa_from_file | |
| 29 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem" | |
| 30 | - assert signer.dsa? | |
| 31 | - assert !signer.rsa? | |
| 32 | - assert_signer(signer) | |
| 33 | - end | |
| 34 | - | |
| 35 | - def test_from_password_protected_file | |
| 36 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/protectedsigner.pem","secret" | |
| 37 | - assert signer.rsa? | |
| 38 | - assert !signer.dsa? | |
| 39 | - assert_signer(signer) | |
| 40 | - end | |
| 41 | - | |
| 42 | - def test_public_key_read | |
| 43 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem" | |
| 44 | - verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testpub.pem" | |
| 45 | - assert verifier | |
| 46 | - sig=signer.sign "test this rsa" | |
| 47 | - assert sig | |
| 48 | - assert verifier.verify( sig,"test this rsa") | |
| 49 | - | |
| 50 | - assert !verifier.cert? | |
| 51 | - assert_equal signer.public_key.to_s, verifier.public_key.to_s | |
| 52 | - end | |
| 53 | - | |
| 54 | - def test_dsa_public_key_read | |
| 55 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem" | |
| 56 | - verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/dsapubkey.pem" | |
| 57 | - | |
| 58 | - assert verifier | |
| 59 | - sig=signer.sign "test this dsa" | |
| 60 | - assert sig | |
| 61 | - assert verifier.verify( sig,"test this dsa") | |
| 62 | - | |
| 63 | - assert !verifier.cert? | |
| 64 | - | |
| 65 | - # This fails as it seems like it returns an incorrect public key | |
| 66 | -# assert_equal signer.public_key.to_s, verifier.public_key.to_s | |
| 67 | - end | |
| 68 | - | |
| 69 | - def test_certificate_reader | |
| 70 | - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem" | |
| 71 | - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert" | |
| 72 | - assert cert | |
| 73 | - assert cert.cert? | |
| 74 | - assert_instance_of EzCrypto::Certificate, cert | |
| 75 | - assert_equal signer.public_key.to_s, cert.public_key.to_s | |
| 76 | - | |
| 77 | - sig=signer.sign "hello" | |
| 78 | - assert sig | |
| 79 | - assert cert.verify( sig,"hello") | |
| 80 | - | |
| 81 | - assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.subject.to_s | |
| 82 | - assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.issuer.to_s | |
| 83 | - | |
| 84 | - assert_kind_of EzCrypto::Name,cert.issuer | |
| 85 | - assert_kind_of EzCrypto::Name,cert.subject | |
| 86 | - assert cert.serial | |
| 87 | - assert cert.not_after | |
| 88 | - assert cert.not_before | |
| 89 | - assert cert.valid? | |
| 90 | - | |
| 91 | - | |
| 92 | - assert_equal cert.subject[:emailAddress],"pelleb@gmail.com" | |
| 93 | - assert_equal cert.subject[:C],"DK" | |
| 94 | - assert_equal cert.subject[:ST],"Denmark" | |
| 95 | - assert_equal cert.subject[:L],"Copenhagen" | |
| 96 | - assert_equal cert.subject[:OU],"testing" | |
| 97 | - assert_equal cert.subject[:O],"EzCrypto Test Certificate" | |
| 98 | - assert_equal cert.subject[:CN],"EzCrypto Testing" | |
| 99 | - | |
| 100 | - assert_equal cert.subject.emailAddress,"pelleb@gmail.com" | |
| 101 | - assert_equal cert.subject.C,"DK" | |
| 102 | - assert_equal cert.subject.ST,"Denmark" | |
| 103 | - assert_equal cert.subject.L,"Copenhagen" | |
| 104 | - assert_equal cert.subject.OU,"testing" | |
| 105 | - assert_equal cert.subject.O,"EzCrypto Test Certificate" | |
| 106 | - assert_equal cert.subject.CN,"EzCrypto Testing" | |
| 107 | - | |
| 108 | - assert_equal cert.subject.email,"pelleb@gmail.com" | |
| 109 | - assert_equal cert.subject.c,"DK" | |
| 110 | - assert_equal cert.subject.st,"Denmark" | |
| 111 | - assert_equal cert.subject.l,"Copenhagen" | |
| 112 | - assert_equal cert.subject.ou,"testing" | |
| 113 | - assert_equal cert.subject.o,"EzCrypto Test Certificate" | |
| 114 | - assert_equal cert.subject.cn,"EzCrypto Testing" | |
| 115 | - | |
| 116 | - assert_equal cert.subject.country,"DK" | |
| 117 | - assert_equal cert.subject.state,"Denmark" | |
| 118 | - assert_equal cert.subject.locality,"Copenhagen" | |
| 119 | - assert_equal cert.subject.organisational_unit,"testing" | |
| 120 | - assert_equal cert.subject.organisation,"EzCrypto Test Certificate" | |
| 121 | - assert_equal cert.subject.organizational_unit,"testing" | |
| 122 | - assert_equal cert.subject.organization,"EzCrypto Test Certificate" | |
| 123 | - assert_equal cert.subject.name,"EzCrypto Testing" | |
| 124 | - assert_equal cert.subject.common_name,"EzCrypto Testing" | |
| 125 | - | |
| 126 | - assert_equal cert.emailAddress,"pelleb@gmail.com" | |
| 127 | - assert_equal cert.C,"DK" | |
| 128 | - assert_equal cert.ST,"Denmark" | |
| 129 | - assert_equal cert.L,"Copenhagen" | |
| 130 | - assert_equal cert.OU,"testing" | |
| 131 | - assert_equal cert.O,"EzCrypto Test Certificate" | |
| 132 | - assert_equal cert.CN,"EzCrypto Testing" | |
| 133 | - | |
| 134 | - assert_equal cert.email,"pelleb@gmail.com" | |
| 135 | - assert_equal cert.c,"DK" | |
| 136 | - assert_equal cert.st,"Denmark" | |
| 137 | - assert_equal cert.l,"Copenhagen" | |
| 138 | - assert_equal cert.ou,"testing" | |
| 139 | - assert_equal cert.o,"EzCrypto Test Certificate" | |
| 140 | - assert_equal cert.cn,"EzCrypto Testing" | |
| 141 | - | |
| 142 | - assert_equal cert.country,"DK" | |
| 143 | - assert_equal cert.state,"Denmark" | |
| 144 | - assert_equal cert.locality,"Copenhagen" | |
| 145 | - assert_equal cert.organisational_unit,"testing" | |
| 146 | - assert_equal cert.organisation,"EzCrypto Test Certificate" | |
| 147 | - assert_equal cert.organizational_unit,"testing" | |
| 148 | - assert_equal cert.organization,"EzCrypto Test Certificate" | |
| 149 | - assert_equal cert.name,"EzCrypto Testing" | |
| 150 | - assert_equal cert.common_name,"EzCrypto Testing" | |
| 151 | - | |
| 152 | - assert_equal cert.issuer[:emailAddress],"pelleb@gmail.com" | |
| 153 | - assert_equal cert.issuer[:C],"DK" | |
| 154 | - assert_equal cert.issuer[:ST],"Denmark" | |
| 155 | - assert_equal cert.issuer[:L],"Copenhagen" | |
| 156 | - assert_equal cert.issuer[:OU],"testing" | |
| 157 | - assert_equal cert.issuer[:O],"EzCrypto Test Certificate" | |
| 158 | - assert_equal cert.issuer[:CN],"EzCrypto Testing" | |
| 159 | - | |
| 160 | - assert_equal cert.issuer.emailAddress,"pelleb@gmail.com" | |
| 161 | - assert_equal cert.issuer.C,"DK" | |
| 162 | - assert_equal cert.issuer.ST,"Denmark" | |
| 163 | - assert_equal cert.issuer.L,"Copenhagen" | |
| 164 | - assert_equal cert.issuer.OU,"testing" | |
| 165 | - assert_equal cert.issuer.O,"EzCrypto Test Certificate" | |
| 166 | - assert_equal cert.issuer.CN,"EzCrypto Testing" | |
| 167 | - | |
| 168 | - assert_equal cert.issuer.email,"pelleb@gmail.com" | |
| 169 | - assert_equal cert.issuer.c,"DK" | |
| 170 | - assert_equal cert.issuer.st,"Denmark" | |
| 171 | - assert_equal cert.issuer.l,"Copenhagen" | |
| 172 | - assert_equal cert.issuer.ou,"testing" | |
| 173 | - assert_equal cert.issuer.o,"EzCrypto Test Certificate" | |
| 174 | - assert_equal cert.issuer.cn,"EzCrypto Testing" | |
| 175 | - assert_equal cert.issuer.country,"DK" | |
| 176 | - assert_equal cert.issuer.state,"Denmark" | |
| 177 | - assert_equal cert.issuer.locality,"Copenhagen" | |
| 178 | - assert_equal cert.issuer.organisational_unit,"testing" | |
| 179 | - assert_equal cert.issuer.organisation,"EzCrypto Test Certificate" | |
| 180 | - assert_equal cert.issuer.organizational_unit,"testing" | |
| 181 | - assert_equal cert.issuer.organization,"EzCrypto Test Certificate" | |
| 182 | - assert_equal cert.issuer.name,"EzCrypto Testing" | |
| 183 | - assert_equal cert.issuer.common_name,"EzCrypto Testing" | |
| 184 | - | |
| 185 | - ## Extensions | |
| 186 | - | |
| 187 | - assert cert.extensions | |
| 188 | - | |
| 189 | - end | |
| 190 | - | |
| 191 | - def test_in_memory_store | |
| 192 | - trust=EzCrypto::TrustStore.new | |
| 193 | - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert" | |
| 194 | - assert !trust.verify(cert) | |
| 195 | - trust.add cert | |
| 196 | - assert trust.verify(cert) | |
| 197 | - | |
| 198 | - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt" | |
| 199 | - assert !trust.verify(sf_root) | |
| 200 | - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt" | |
| 201 | - assert !trust.verify(starfield) | |
| 202 | - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert" | |
| 203 | - assert !trust.verify(agree2) | |
| 204 | - | |
| 205 | - trust.add sf_root | |
| 206 | - assert trust.verify(sf_root) | |
| 207 | - assert trust.verify(starfield) | |
| 208 | - assert !trust.verify(agree2) | |
| 209 | - | |
| 210 | - trust.add starfield | |
| 211 | - assert trust.verify(agree2) | |
| 212 | - end | |
| 213 | - | |
| 214 | - def test_disk_store | |
| 215 | - trust=EzCrypto::TrustStore.new File.dirname(__FILE__) + "/store" | |
| 216 | - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt" | |
| 217 | - trust.add(sf_root) | |
| 218 | - assert trust.verify(sf_root) | |
| 219 | - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt" | |
| 220 | - assert trust.verify(starfield) | |
| 221 | - trust.add(starfield) | |
| 222 | - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert" | |
| 223 | - assert trust.verify(agree2) | |
| 224 | - | |
| 225 | - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert" | |
| 226 | - assert !trust.verify(cert) | |
| 227 | - trust.add cert | |
| 228 | - assert trust.verify(cert) | |
| 229 | - end | |
| 230 | - | |
| 231 | - def test_load_combined | |
| 232 | - certs=EzCrypto::Verifier.load_all_from_file File.dirname(__FILE__) + "/../lib/trusted.pem" | |
| 233 | - assert certs.is_a?( Array) | |
| 234 | - assert certs.size>1 | |
| 235 | - certs.each do |cert| | |
| 236 | - assert_instance_of EzCrypto::Certificate, cert | |
| 237 | - end | |
| 238 | - end | |
| 239 | - | |
| 240 | - def test_load_trusted_truststore | |
| 241 | - trust=EzCrypto::TrustStore.default_trusted | |
| 242 | - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt" | |
| 243 | - assert trust.verify(sf_root) | |
| 244 | - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt" | |
| 245 | - assert trust.verify(starfield) | |
| 246 | - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert" | |
| 247 | - assert trust.verify(agree2) | |
| 248 | - | |
| 249 | - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert" | |
| 250 | - assert !trust.verify(cert) | |
| 251 | - trust.add cert | |
| 252 | - assert trust.verify(cert) | |
| 253 | - end | |
| 254 | - | |
| 255 | -# Disabling these until pkyp is back up | |
| 256 | -# def test_public_key_load_from_pkyp | |
| 257 | -# verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a" | |
| 258 | -# agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert" | |
| 259 | -# assert_equal agree2.cert.to_s,verifier.cert.to_s | |
| 260 | -# assert verifier | |
| 261 | -# end | |
| 262 | -# | |
| 263 | -# def test_register_public_key_at_pkyp | |
| 264 | -# pub=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert" | |
| 265 | -# assert_equal pub.digest,pub.register_with_pkyp | |
| 266 | -# end | |
| 267 | -# | |
| 268 | -# def test_create_register_and_fetch_public_key | |
| 269 | -# signer=EzCrypto::Signer.generate | |
| 270 | -# assert_equal signer.verifier.digest,signer.verifier.register_with_pkyp | |
| 271 | -# verifier=EzCrypto::Verifier.from_pkyp signer.verifier.digest | |
| 272 | -# sig=signer.sign "hello" | |
| 273 | -# assert sig | |
| 274 | -# assert verifier.verify( sig,"hello") | |
| 275 | -# end | |
| 276 | -# | |
| 277 | - | |
| 278 | - def assert_signer(signer) | |
| 279 | - assert signer | |
| 280 | - assert signer.public_key | |
| 281 | - | |
| 282 | - sig=signer.sign "hello" | |
| 283 | - assert sig | |
| 284 | - assert signer.verifier | |
| 285 | - assert signer.verifier.verify( sig,"hello") | |
| 286 | - end | |
| 287 | - | |
| 288 | -end | |
| 289 | 0 | \ No newline at end of file |
vendor/ezcrypto-0.7.2/test/encrypt_test.rb
| ... | ... | @@ -1,41 +0,0 @@ |
| 1 | -require 'association_key_holder_test' | |
| 2 | - | |
| 3 | -class EncUser < ActiveRecord::Base | |
| 4 | - set_table_name "users" | |
| 5 | - encrypt :name, :base64=>true | |
| 6 | -end | |
| 7 | - | |
| 8 | -class RawUser < ActiveRecord::Base | |
| 9 | - set_table_name "users" | |
| 10 | -end | |
| 11 | - | |
| 12 | -class EncryptTest < AssociationKeyHolderTest | |
| 13 | - def setup | |
| 14 | - @key_holder=EncUser.create | |
| 15 | - end | |
| 16 | - | |
| 17 | - def test_should_be_base64 | |
| 18 | - assert EncUser.ezcrypto_base64? | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_should_retain_session_key_on_reload | |
| 22 | - key=EzCrypto::Key.generate | |
| 23 | - key_holder.set_session_key key | |
| 24 | - assert_not_nil key_holder.session_key | |
| 25 | - assert_equal key.raw,key_holder.session_key.raw | |
| 26 | - | |
| 27 | - key_holder.name="bob" | |
| 28 | - key_holder.save | |
| 29 | - | |
| 30 | - assert_equal "bob",key_holder.name | |
| 31 | - | |
| 32 | - found=EncUser.find key_holder.id | |
| 33 | - assert_equal key_holder.name,found.name | |
| 34 | - | |
| 35 | - raw=RawUser.find key_holder.id | |
| 36 | - assert_not_nil raw.name | |
| 37 | - assert_not_equal key_holder.name,raw.name | |
| 38 | - | |
| 39 | - end | |
| 40 | - | |
| 41 | -end |
vendor/ezcrypto-0.7.2/test/ezcrypto_test.rb
| ... | ... | @@ -1,212 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + "/../lib/") | |
| 2 | - | |
| 3 | -require 'test/unit' | |
| 4 | -require 'fileutils' | |
| 5 | -require 'ezcrypto' | |
| 6 | -require 'base64' | |
| 7 | - | |
| 8 | -class EzCryptoTest < Test::Unit::TestCase | |
| 9 | - | |
| 10 | - def setup | |
| 11 | - end | |
| 12 | - | |
| 13 | - def test_generate_alg_key | |
| 14 | - assert_generate_alg_key "aes-128-cbc",16 | |
| 15 | - assert_generate_alg_key "aes-192-cbc",24 | |
| 16 | - assert_generate_alg_key "aes-256-cbc",32 | |
| 17 | - assert_generate_alg_key "rc2-40-cbc",5 | |
| 18 | - assert_generate_alg_key "rc2-64-cbc",8 | |
| 19 | - assert_generate_alg_key "rc4-64" ,8 | |
| 20 | - assert_generate_alg_key "blowfish" ,16 | |
| 21 | - assert_generate_alg_key "des" ,8 | |
| 22 | - end | |
| 23 | - | |
| 24 | - def test_with_password | |
| 25 | - assert_with_password "","secret","aes-128-cbc",16 | |
| 26 | - assert_with_password "test","secret","aes-128-cbc",16 | |
| 27 | - assert_with_password "password","secret","aes-128-cbc",16 | |
| 28 | - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-128-cbc",16 | |
| 29 | - | |
| 30 | - assert_with_password "","secret","aes-192-cbc",24 | |
| 31 | - assert_with_password "test","secret","aes-192-cbc",24 | |
| 32 | - assert_with_password "password","secret","aes-192-cbc",24 | |
| 33 | - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-192-cbc",24 | |
| 34 | - | |
| 35 | - assert_with_password "","secret","aes-256-cbc",32 | |
| 36 | - assert_with_password "test","secret","aes-256-cbc",32 | |
| 37 | - assert_with_password "password","secret","aes-256-cbc",32 | |
| 38 | - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-256-cbc",32 | |
| 39 | - | |
| 40 | - end | |
| 41 | - | |
| 42 | - def test_encoded | |
| 43 | - 0.upto 32 do |size| | |
| 44 | - assert_encoded_keys size | |
| 45 | - end | |
| 46 | - end | |
| 47 | - | |
| 48 | - def test_encrypt | |
| 49 | - 0.upto(CLEAR_TEXT.size-1) do |size| | |
| 50 | - assert_encrypt CLEAR_TEXT[0..size] | |
| 51 | - end | |
| 52 | - end | |
| 53 | - | |
| 54 | - def test_decrypt | |
| 55 | - 0.upto(CLEAR_TEXT.size) do |size| | |
| 56 | - assert_decrypt CLEAR_TEXT[0..size] | |
| 57 | - end | |
| 58 | - end | |
| 59 | - | |
| 60 | - def test_decrypt64 | |
| 61 | - 0.upto(CLEAR_TEXT.size) do |size| | |
| 62 | - assert_decrypt64 CLEAR_TEXT[0..size] | |
| 63 | - end | |
| 64 | - end | |
| 65 | - | |
| 66 | - def test_keyfile_store_load | |
| 67 | - | |
| 68 | - algo, size = "aes-256-cbc", 32 | |
| 69 | - keyfile = 'ezcrypto-test.key' | |
| 70 | - | |
| 71 | - FileUtils.rm [keyfile], :force => true | |
| 72 | - key = EzCrypto::Key.generate :algorithm => algo | |
| 73 | - assert_file_not_exists keyfile | |
| 74 | - key.store keyfile | |
| 75 | - assert_file_exists keyfile | |
| 76 | - assert_file_permissions keyfile, 0100400 | |
| 77 | - | |
| 78 | - key2 = EzCrypto::Key.load(keyfile) | |
| 79 | - assert_equal key.raw, key2.raw | |
| 80 | - | |
| 81 | - FileUtils.rm [keyfile], :force => true | |
| 82 | - end | |
| 83 | - | |
| 84 | - def test_filestuff_with_defaults | |
| 85 | - | |
| 86 | - clearfile = 'lorem_ipsum.txt' | |
| 87 | - keyfile = 'lorem_ipsum.key' | |
| 88 | - algo, size = "aes-256-cbc", 32 | |
| 89 | - | |
| 90 | - File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) } | |
| 91 | - assert_file_contains clearfile, CLEAR_TEXT | |
| 92 | - | |
| 93 | - key = EzCrypto::Key.generate :algorithm => algo | |
| 94 | - | |
| 95 | - # default behaviour: remove clearfile, append '.ez' suffix | |
| 96 | - cryptfile = key.encrypt_file(clearfile) | |
| 97 | - assert_equal cryptfile, clearfile + ".ez" | |
| 98 | - assert_file_not_exists clearfile | |
| 99 | - assert_file_exists cryptfile | |
| 100 | - assert_file_contains cryptfile, key.encrypt(CLEAR_TEXT) | |
| 101 | - | |
| 102 | - # default behaviour: unlink cryptfile and remove suffix from filename | |
| 103 | - clearfile = key.decrypt_file cryptfile | |
| 104 | - assert_file_exists clearfile | |
| 105 | - assert_file_not_exists cryptfile | |
| 106 | - assert_file_contains clearfile, CLEAR_TEXT | |
| 107 | - FileUtils.rm [keyfile, clearfile, cryptfile], :force => true | |
| 108 | - end | |
| 109 | - | |
| 110 | - def test_filestuff_with_options | |
| 111 | - | |
| 112 | - clearfile = 'lorem_ipsum.txt' | |
| 113 | - keyfile = 'lorem_ipsum.key' | |
| 114 | - algo, size = "aes-256-cbc", 32 | |
| 115 | - | |
| 116 | - File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) } | |
| 117 | - assert_file_contains clearfile, CLEAR_TEXT | |
| 118 | - | |
| 119 | - key = EzCrypto::Key.generate :algorithm => algo | |
| 120 | - | |
| 121 | - # with options: keep the original file, auto-create a | |
| 122 | - # new filename with a user-defined suffix | |
| 123 | - cryptfile = key.encrypt_file(clearfile, nil, :autoclean => false, :suffix => '.Encrypted') | |
| 124 | - assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was added' | |
| 125 | - assert_file_exists clearfile | |
| 126 | - assert_file_exists cryptfile | |
| 127 | - assert_file_permissions cryptfile, 0100600 | |
| 128 | - | |
| 129 | - assert_raises(Errno::EEXIST, "the original file would not be overwritten") { | |
| 130 | - key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted') | |
| 131 | - } | |
| 132 | - FileUtils.rm [clearfile], :force => true | |
| 133 | - | |
| 134 | - clearfile = key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted') | |
| 135 | - assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was removed' | |
| 136 | - assert_file_exists clearfile | |
| 137 | - assert_file_exists cryptfile | |
| 138 | - assert_file_permissions cryptfile, 0100600 | |
| 139 | - assert_file_contains clearfile, CLEAR_TEXT | |
| 140 | - | |
| 141 | - FileUtils.rm [keyfile, clearfile, cryptfile], :force => true | |
| 142 | - end | |
| 143 | - | |
| 144 | - def assert_file_permissions(filename, mode, msg='') | |
| 145 | - fmode = File.stat(filename).mode | |
| 146 | - assert_equal fmode, mode, msg | |
| 147 | - end | |
| 148 | - | |
| 149 | - def assert_file_exists(filename) | |
| 150 | - assert File.exists?(filename) | |
| 151 | - end | |
| 152 | - | |
| 153 | - def assert_file_not_exists(filename) | |
| 154 | - assert !File.exists?(filename) | |
| 155 | - end | |
| 156 | - | |
| 157 | - def assert_file_contains(filename, expected) | |
| 158 | - assert_file_exists(filename) | |
| 159 | - content = File.open(filename,'r').read | |
| 160 | - assert_equal expected, content | |
| 161 | - end | |
| 162 | - | |
| 163 | - def assert_key_size(size,key) | |
| 164 | - assert_equal size,key.raw.size | |
| 165 | - end | |
| 166 | - | |
| 167 | - def assert_generate_alg_key(algorithm,size) | |
| 168 | - key=EzCrypto::Key.generate :algorithm=>algorithm | |
| 169 | - assert_key_size size,key | |
| 170 | - end | |
| 171 | - | |
| 172 | - def assert_with_password(password,salt,algorithm,size) | |
| 173 | - key=EzCrypto::Key.with_password password,salt,:algorithm=>algorithm | |
| 174 | - assert_key_size size,key | |
| 175 | - assert_equal key.raw,EzCrypto::Key.with_password( password,salt,:algorithm=>algorithm).raw | |
| 176 | - end | |
| 177 | - | |
| 178 | - def assert_encoded_keys(size) | |
| 179 | - key=EzCrypto::Key.generate size | |
| 180 | - key2=EzCrypto::Key.decode(key.encode) | |
| 181 | - assert_equal key.raw, key2.raw | |
| 182 | - end | |
| 183 | - | |
| 184 | - def assert_encrypt(clear) | |
| 185 | - ALGORITHMS.each do |alg| | |
| 186 | - key=EzCrypto::Key.generate :algorithm=>alg | |
| 187 | - encrypted=key.encrypt clear | |
| 188 | - assert_not_nil encrypted | |
| 189 | - end | |
| 190 | - end | |
| 191 | - | |
| 192 | - def assert_decrypt(clear) | |
| 193 | - ALGORITHMS.each do |alg| | |
| 194 | - key=EzCrypto::Key.generate :algorithm=>alg | |
| 195 | - encrypted=key.encrypt clear | |
| 196 | - assert_not_nil encrypted | |
| 197 | - assert_equal clear,key.decrypt(encrypted) | |
| 198 | - end | |
| 199 | - end | |
| 200 | - | |
| 201 | - def assert_decrypt64(clear) | |
| 202 | - key=EzCrypto::Key.generate | |
| 203 | - encrypted=key.encrypt64 clear | |
| 204 | - assert_not_nil encrypted | |
| 205 | - assert_equal clear,key.decrypt64(encrypted) | |
| 206 | - end | |
| 207 | - | |
| 208 | - ALGORITHMS=["aes128","bf","blowfish","des","des3","rc4","rc2"] | |
| 209 | - CLEAR_TEXT="Lorem ipsum dolor sit amet, suspendisse id interdum mus leo id. Sapien tempus consequat nullam, platea vitae sociis sed elementum et fermentum, vel praesent eget. Sed blandit augue, molestie mus sed habitant, semper voluptatibus neque, nullam a augue. Aptent imperdiet curabitur, quam quis laoreet. Dolor magna. Quis vestibulum amet eu arcu fringilla nibh, mi urna sunt dictumst nulla, elit quisque purus eros, sem hendrerit. Vulputate tortor rhoncus ac nonummy tortor nulla. Nunc id nunc luctus ligula." | |
| 210 | -end | |
| 211 | - | |
| 212 | - |
vendor/ezcrypto-0.7.2/test/key_holder_test.rb
| ... | ... | @@ -1,44 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + "/../lib/") | |
| 2 | -require File.join(File.dirname(__FILE__), 'test_helper') | |
| 3 | -require 'test/unit' | |
| 4 | -require 'active_crypto' | |
| 5 | -class KeyHolderSubject | |
| 6 | - include ActiveCrypto::KeyHolder | |
| 7 | -end | |
| 8 | - | |
| 9 | -class KeyHolderTest < Test::Unit::TestCase | |
| 10 | - | |
| 11 | - attr :key_holder | |
| 12 | - | |
| 13 | - def setup | |
| 14 | - @key_holder=KeyHolderSubject.new | |
| 15 | - end | |
| 16 | - | |
| 17 | - def test_session_key_should_not_be_set_on_new | |
| 18 | - assert_nil key_holder.session_key | |
| 19 | - end | |
| 20 | - | |
| 21 | - def test_set_session_key_should_set_session_key | |
| 22 | - key=EzCrypto::Key.generate | |
| 23 | - key_holder.set_session_key key | |
| 24 | - assert_not_nil key_holder.session_key | |
| 25 | - assert_equal key.raw,key_holder.session_key.raw | |
| 26 | - end | |
| 27 | - | |
| 28 | - def test_set_encoded_key_should_set_session_key | |
| 29 | - key=EzCrypto::Key.generate | |
| 30 | - key_holder.set_encoded_key key.encode | |
| 31 | - assert_not_nil key_holder.session_key | |
| 32 | - assert_equal key.raw,key_holder.session_key.raw | |
| 33 | - end | |
| 34 | - | |
| 35 | - def test_enter_password_should_set_session_key | |
| 36 | - key=EzCrypto::Key.with_password "test","onetwothree" | |
| 37 | - key_holder.enter_password "test" | |
| 38 | - assert_not_nil key_holder.session_key | |
| 39 | - assert_equal key.raw,key_holder.session_key.raw | |
| 40 | - end | |
| 41 | - | |
| 42 | - | |
| 43 | -end | |
| 44 | - |
vendor/ezcrypto-0.7.2/test/protectedsigner.pem
| ... | ... | @@ -1,12 +0,0 @@ |
| 1 | ------BEGIN RSA PRIVATE KEY----- | |
| 2 | -Proc-Type: 4,ENCRYPTED | |
| 3 | -DEK-Info: DES-EDE3-CBC,C730C2D8284C5EC8 | |
| 4 | - | |
| 5 | -DU3RsKWpbDaiFA4DUu+5VBCbF5FQvNxQJXZ9s7qw8Odk/gTbI3WFWygaZSS1FGxr | |
| 6 | -lFYz04hQB6Zm31EKqwBlvhJdEkDlpWAI1VCTOHFjfzA/fmiv1W5v0Cj7jm3KHQqo | |
| 7 | -lmmDyIT9fbUKgiHBb9oCLn0N34DhbqQ4lSsGzwI9bTl+CWd593f+SFqq2SLAZ+gw | |
| 8 | -wfaedG0PSjdylXMyUuLQtOe5T1F0Y+MfFmVE4CvBYlKl/qnVz3nn8iL1RkdQkvHB | |
| 9 | -Z/JZEhjtu/FD0AvjCZD8frO+Le1vBxBCO+vx+tKiDeFpJTxWZM6kLBHvvFYtdvce | |
| 10 | -ktQhyLLn40LiP4lj7Dq/IbqW+OWEge91ioC8uOAACTqmxLVyKPE9IiOHqoDb3gfw | |
| 11 | -jCgYGLJdDhYdnD/f/8nuDJErflhKyAHh6OdbqREMRMg= | |
| 12 | ------END RSA PRIVATE KEY----- |
vendor/ezcrypto-0.7.2/test/sf-class2-root.crt
| ... | ... | @@ -1,24 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl | |
| 3 | -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp | |
| 4 | -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw | |
| 5 | -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE | |
| 6 | -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp | |
| 7 | -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 | |
| 8 | -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf | |
| 9 | -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN | |
| 10 | -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 | |
| 11 | -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa | |
| 12 | -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA | |
| 13 | -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G | |
| 14 | -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR | |
| 15 | -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 | |
| 16 | -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD | |
| 17 | -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w | |
| 18 | -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 | |
| 19 | -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D | |
| 20 | -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl | |
| 21 | -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp | |
| 22 | -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY | |
| 23 | -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= | |
| 24 | ------END CERTIFICATE----- |
vendor/ezcrypto-0.7.2/test/sf_intermediate.crt
| ... | ... | @@ -1,29 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIFBzCCA++gAwIBAgICAgEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCVVMx | |
| 3 | -JTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsT | |
| 4 | -KVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2 | |
| 5 | -MTExNjAxMTU0MFoXDTI2MTExNjAxMTU0MFowgdwxCzAJBgNVBAYTAlVTMRAwDgYD | |
| 6 | -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy | |
| 7 | -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTkwNwYDVQQLEzBodHRwOi8vY2VydGlm | |
| 8 | -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0 | |
| 9 | -YXJmaWVsZCBTZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxETAPBgNVBAUT | |
| 10 | -CDEwNjg4NDM1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4qddo+1m | |
| 11 | -72ovKzYf3Y3TBQKgyg9eGa44cs8W2lRKy0gK9KFzEWWFQ8lbFwyaK74PmFF6YCkN | |
| 12 | -bN7i6OUVTVb/kNGnpgQ/YAdKym+lEOez+FyxvCsq3AF59R019Xoog/KTc4KJrGBt | |
| 13 | -y8JIwh3UBkQXPKwBR6s+cIQJC7ggCEAgh6FjGso+g9I3s5iNMj83v6G3W1/eXDOS | |
| 14 | -zz4HzrlIS+LwVVAv+HBCidGTlopj2WYN5lhuuW2QvcrchGbyOY5bplhVc8tibBvX | |
| 15 | -IBY7LFn1y8hWMkpQJ7pV06gBy3KpdIsMrTrlFbYq32X43or174Q7+edUZQuAvUdF | |
| 16 | -pfBE2FM7voDxLwIDAQABo4IBRDCCAUAwHQYDVR0OBBYEFElLUifRG7zyoSFqYntR | |
| 17 | -QnqK19VWMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtVrNzXEMIOqYjnMBIGA1UdEwEB | |
| 18 | -/wQIMAYBAf8CAQAwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi8v | |
| 19 | -b2NzcC5zdGFyZmllbGR0ZWNoLmNvbTBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8v | |
| 20 | -Y2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvc2Zyb290 | |
| 21 | -LmNybDBRBgNVHSAESjBIMEYGBFUdIAAwPjA8BggrBgEFBQcCARYwaHR0cDovL2Nl | |
| 22 | -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5MA4GA1UdDwEB | |
| 23 | -/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAhlK6sx+mXmuQpmQq/EWyrp8+s2Kv | |
| 24 | -2x9nxL3KoS/HnA0hV9D4NiHOOiU+eHaz2d283vtshF8Mow0S6xE7cV+AHvEfbQ5f | |
| 25 | -wezUpfdlux9MlQETsmqcC+sfnbHn7RkNvIV88xe9WWOupxoFzUfjLZZiUTIKCGhL | |
| 26 | -Indf90XcYd70yysiKUQl0p8Ld3qhJnxK1w/C0Ty6DqeVmlsFChD5VV/Bl4t0zF4o | |
| 27 | -aRN+0AqNnQ9gVHrEjBs1D3R6cLKCzx214orbKsayUWm/EheSYBeqPVsJ+IdlHaek | |
| 28 | -KOUiAgOCRJo0Y577KM/ozS4OUiDtSss4fJ2ubnnXlSyokfOGASGRS7VApA== | |
| 29 | ------END CERTIFICATE----- | |
| 30 | 0 | \ No newline at end of file |
vendor/ezcrypto-0.7.2/test/test_helper.rb
| ... | ... | @@ -1,35 +0,0 @@ |
| 1 | -$:.unshift(File.dirname(__FILE__) + '/../lib') | |
| 2 | - | |
| 3 | -require 'test/unit' | |
| 4 | -require 'rubygems' | |
| 5 | -require 'action_pack' | |
| 6 | -require 'active_record' | |
| 7 | -#require 'active_support/binding_of_caller' | |
| 8 | -#require 'active_support/breakpoint' | |
| 9 | - | |
| 10 | - | |
| 11 | -unless defined?(Rails.root) | |
| 12 | - root_path = File.join(File.dirname(__FILE__), '..') | |
| 13 | - unless RUBY_PLATFORM =~ /mswin32/ | |
| 14 | - require 'pathname' | |
| 15 | - root_path = Pathname.new(root_path).cleanpath.to_s | |
| 16 | - end | |
| 17 | - Rails.root = root_path | |
| 18 | -end | |
| 19 | - | |
| 20 | - | |
| 21 | -require 'active_record/fixtures' | |
| 22 | -require 'initializer' | |
| 23 | - | |
| 24 | -Rails::Initializer.run(:set_load_path) | |
| 25 | - | |
| 26 | -ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log") | |
| 27 | -ActiveRecord::Base.establish_connection( | |
| 28 | - :adapter => "mysql", | |
| 29 | - :host => "localhost", | |
| 30 | - :username => "root", | |
| 31 | - :password => "", | |
| 32 | - :database => "crypto_test" | |
| 33 | - ) | |
| 34 | -#load(File.dirname(__FILE__) + "/schema.rb") | |
| 35 | - |
vendor/ezcrypto-0.7.2/test/testchild.pem
| ... | ... | @@ -1,15 +0,0 @@ |
| 1 | ------BEGIN RSA PRIVATE KEY----- | |
| 2 | -MIICXgIBAAKBgQC6tQ2LfDcjyqlOLodJUUux+l4Gw/jkacpW6kwhfvV03QJzRaz8 | |
| 3 | -OrGkf+WKLPfQnCLma40aL2hpleTTd7SEiLSd3d77hySJ842rcYFlBfj0ldFyf9D3 | |
| 4 | -PUf1qpK/9f24C19bQwcSIDHBJOj7vlaW8rWtk0J5YOfRCTKD+tqTA400eQIDAQAB | |
| 5 | -AoGBAJWqgxQYW78mOvfAFpSwRWSDVZJI0CCRqTBpGuQS+MJYVBmBdfyvNC2wlJli | |
| 6 | -GLkyIEvjVTXzYNia3tahc6R2TYmL/9vQxXfoOOgbhJ0VgNofvXsU0vEcuomqDhHS | |
| 7 | -ZeH1EJnM27/Yk5o2/WOY3iexRY1urjrpBMNWLiH7wizfmM9tAkEA5x0ViHInGzv5 | |
| 8 | -X2GB3TpJNhE2+5Kxw+keuBWsEiyBjOarJfHOPMHGBlssIIKM0k24pDOPuyhc5N6h | |
| 9 | -F4XOMPdLXwJBAM7P2v0d2cVJTENi8OK7DjbBu/YBv/AHPyC5bz7cHySlUeNewWYy | |
| 10 | -HXYBdSnpdVHJizMYjajjO+TQ+9BKsYHi5ycCQDm/0rmdjJgJjG6A9upIvjJ8arjC | |
| 11 | -FxlVDxAAmlaQOG701J9OpLIZ2VmNPqGA/Z8vPIwLNkcV9uBZoPc3wCYMJRECQQDJ | |
| 12 | -1rBaIjz8P4oPpkuEbJz1seRYtuJ1Rw1ESdYZmklGwZYG+t5zd+uq1MddTTyzwqh5 | |
| 13 | -CLiQoJ0+tvtcENnm8uU3AkEA2EIbaxJaadxUO71+banckjCFmv8H2fKAA391ev1/ | |
| 14 | -HTI088ych8V3sIUIAELhEo2K83fticAGgIdf7nPhDVgdpQ== | |
| 15 | ------END RSA PRIVATE KEY----- |
vendor/ezcrypto-0.7.2/test/testchild.req
| ... | ... | @@ -1,12 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE REQUEST----- | |
| 2 | -MIIBujCCASMCAQAwejELMAkGA1UEBhMCREsxEDAOBgNVBAgTB0Rlbm1hcmsxEzAR | |
| 3 | -BgNVBAcTCkNvcGVuaGFnZW4xETAPBgNVBAoTCEV6Q3J5cHRvMRAwDgYDVQQLEwdU | |
| 4 | -ZXN0aW5nMR8wHQYDVQQDExZUZXN0IENoaWxkIENlcnRpZmljYXRlMIGfMA0GCSqG | |
| 5 | -SIb3DQEBAQUAA4GNADCBiQKBgQC6tQ2LfDcjyqlOLodJUUux+l4Gw/jkacpW6kwh | |
| 6 | -fvV03QJzRaz8OrGkf+WKLPfQnCLma40aL2hpleTTd7SEiLSd3d77hySJ842rcYFl | |
| 7 | -Bfj0ldFyf9D3PUf1qpK/9f24C19bQwcSIDHBJOj7vlaW8rWtk0J5YOfRCTKD+tqT | |
| 8 | -A400eQIDAQABoAAwDQYJKoZIhvcNAQEFBQADgYEAYKpGkiS4mXsD9SWtS0bvaMG8 | |
| 9 | -4UzHnZmhL4B6x3f45r5guy4c7/xIJUkxixFr/oAkOF86MGiFxNY4sZjBnrckWNzD | |
| 10 | -CWirSMYmrc1XQwA3C9Nu5LYqUzJ6bVlXh1ySzXJo08+9JJb1vklBh5QMl/KvGsee | |
| 11 | -RFW1LcQJ7XdwRxPyUlo= | |
| 12 | ------END CERTIFICATE REQUEST----- |
vendor/ezcrypto-0.7.2/test/testpub.pem
vendor/ezcrypto-0.7.2/test/testsigner.cert
| ... | ... | @@ -1,20 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIDWDCCAwKgAwIBAgIJAKV7PmO5YH5XMA0GCSqGSIb3DQEBBQUAMIGmMQswCQYD | |
| 3 | -VQQGEwJESzEQMA4GA1UECBMHRGVubWFyazETMBEGA1UEBxMKQ29wZW5oYWdlbjEi | |
| 4 | -MCAGA1UEChMZRXpDcnlwdG8gVGVzdCBDZXJ0aWZpY2F0ZTEQMA4GA1UECxMHdGVz | |
| 5 | -dGluZzEZMBcGA1UEAxMQRXpDcnlwdG8gVGVzdGluZzEfMB0GCSqGSIb3DQEJARYQ | |
| 6 | -cGVsbGViQGdtYWlsLmNvbTAeFw0wOTAzMTAxNjUwMjVaFw0xOTAzMDgxNjUwMjVa | |
| 7 | -MIGmMQswCQYDVQQGEwJESzEQMA4GA1UECBMHRGVubWFyazETMBEGA1UEBxMKQ29w | |
| 8 | -ZW5oYWdlbjEiMCAGA1UEChMZRXpDcnlwdG8gVGVzdCBDZXJ0aWZpY2F0ZTEQMA4G | |
| 9 | -A1UECxMHdGVzdGluZzEZMBcGA1UEAxMQRXpDcnlwdG8gVGVzdGluZzEfMB0GCSqG | |
| 10 | -SIb3DQEJARYQcGVsbGViQGdtYWlsLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC | |
| 11 | -QQDBgez5h2DRFKs8abR3zQ08y8S0Wu4iI+2hCjp/qM6i1AwhaOVE0uUpGU3VL/xQ | |
| 12 | -mFwDX80mYA2Sxi2QfGRybgpBAgMBAAGjggEPMIIBCzAdBgNVHQ4EFgQUNdcj4z5p | |
| 13 | -YRKfpdfN+Y+EeklG7n0wgdsGA1UdIwSB0zCB0IAUNdcj4z5pYRKfpdfN+Y+EeklG | |
| 14 | -7n2hgaykgakwgaYxCzAJBgNVBAYTAkRLMRAwDgYDVQQIEwdEZW5tYXJrMRMwEQYD | |
| 15 | -VQQHEwpDb3BlbmhhZ2VuMSIwIAYDVQQKExlFekNyeXB0byBUZXN0IENlcnRpZmlj | |
| 16 | -YXRlMRAwDgYDVQQLEwd0ZXN0aW5nMRkwFwYDVQQDExBFekNyeXB0byBUZXN0aW5n | |
| 17 | -MR8wHQYJKoZIhvcNAQkBFhBwZWxsZWJAZ21haWwuY29tggkApXs+Y7lgflcwDAYD | |
| 18 | -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAGF11JQ6+PaaklljorNsSMsvikM4 | |
| 19 | -xD8CiqYnM/TueQR6N5eWHL5L7tElfM2SxecwBtwiHpCzhPoXXBfRjCzj3Dg= | |
| 20 | ------END CERTIFICATE----- |
vendor/ezcrypto-0.7.2/test/testsigner.pem
| ... | ... | @@ -1,9 +0,0 @@ |
| 1 | ------BEGIN RSA PRIVATE KEY----- | |
| 2 | -MIIBOgIBAAJBAMGB7PmHYNEUqzxptHfNDTzLxLRa7iIj7aEKOn+ozqLUDCFo5UTS | |
| 3 | -5SkZTdUv/FCYXANfzSZgDZLGLZB8ZHJuCkECAwEAAQJBAK9EHb54xtE49ku2tjWY | |
| 4 | -LPg228g7X9reTdoBqLB91gMVlXwNAVyHMTHakhIC73K3qq9k4H1D59w1wjzx4nXJ | |
| 5 | -/v0CIQD1R0vhhdlY2GqC+1EFCm+rPjamixcszDF2XSNp4WcwXwIhAMn3Td4aIpf6 | |
| 6 | -A9O4SIbisZaOm0DlfO2O5GMkaF+eqElfAiBHcjcmQCjpelC8Spx1DW8twHeG16ku | |
| 7 | -gWQ/CC5SnzfBnQIgIvo3fB2enB9qhkJGHUYpZ1+vN6AG8MVsfFcT1GuPzZUCIEbx | |
| 8 | -VUGyBYwuUfvCG88KM0NznR8xFtWD4WQ8SQejX5AN | |
| 9 | ------END RSA PRIVATE KEY----- |
vendor/ezcrypto-0.7.2/test/valicert_class2_root.crt
| ... | ... | @@ -1,18 +0,0 @@ |
| 1 | ------BEGIN CERTIFICATE----- | |
| 2 | -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 | |
| 3 | -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz | |
| 4 | -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y | |
| 5 | -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG | |
| 6 | -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy | |
| 7 | -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y | |
| 8 | -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs | |
| 9 | -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw | |
| 10 | -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl | |
| 11 | -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY | |
| 12 | -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 | |
| 13 | -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS | |
| 14 | -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v | |
| 15 | -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu | |
| 16 | -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC | |
| 17 | -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd | |
| 18 | ------END CERTIFICATE----- |