From 828d84f1a9febca19283db17c3b51444cc7619a1 Mon Sep 17 00:00:00 2001 From: Helge Rausch Date: Wed, 4 Jan 2023 09:58:25 +0100 Subject: [PATCH] Refactor Zipfulldata worker (#541) * Breaks up Zipfulldata worker into service classes * Fixes N+1 queries for phenotype and picture phenotype CSVs * moving phenotype CSV generation into database for performance * Fixes unintentional deletion of unrelated files * Reduces the time it takes to assemble the zip file from about 10 to about 5 hours, with the bottle-neck being zipping the genotype files --- app/models/achievement.rb | 3 +- app/models/application_record.rb | 16 + app/models/genome_gov_paper.rb | 3 +- app/models/genotype.rb | 5 +- app/models/homepage.rb | 3 +- app/models/mendeley_paper.rb | 3 +- app/models/message.rb | 3 +- app/models/open_humans_profile.rb | 2 +- app/models/pgp_annotation.rb | 3 +- app/models/phenotype.rb | 3 +- app/models/phenotype_comment.rb | 3 +- app/models/phenotype_set.rb | 3 +- app/models/picture_phenotype.rb | 3 +- app/models/picture_phenotype_comment.rb | 3 +- app/models/plos_paper.rb | 3 +- app/models/search_result.rb | 3 +- app/models/snp.rb | 3 +- app/models/snp_comment.rb | 3 +- app/models/snp_reference.rb | 3 +- app/models/snpedia_paper.rb | 3 +- app/models/user.rb | 3 +- app/models/user_achievement.rb | 3 +- app/models/user_phenotype.rb | 3 +- app/models/user_picture_phenotype.rb | 3 +- app/models/user_session.rb | 1 + app/models/user_snp.rb | 3 +- app/services/data_zipper_service.rb | 114 + .../generate_user_phenotype_csv.rb | 68 + .../data_zipper_service/zip_genotype_files.rb | 27 + .../zip_user_picture_phenotypes.rb | 71 + app/views/genotypes/index.html.erb | 2 +- app/views/snps/index.html.erb | 2 +- app/workers/data_zipper_worker.rb | 13 + app/workers/zipfulldata.rb | 227 - config/locales/en.yml | 5 + db/development_seeds.rb | 2 +- db/structure.sql | 3687 +++++++++-------- lib/tasks/dump.rake | 2 +- spec/factories/genotypes.rb | 2 +- spec/factories/open_humans_profiles.rb | 7 + spec/factories/user_picture_phenotypes.rb | 1 + spec/fixtures/files/genotype.txt | 1 + spec/fixtures/files/image.png | Bin 0 -> 198900 bytes spec/models/application_record_spec.rb | 14 + .../generate_user_phenotype_csv_spec.rb | 165 + .../zip_genotype_files_spec.rb | 33 + .../zip_user_picture_phenotypes_spec.rb | 146 + spec/services/data_zipper_service_spec.rb | 105 + spec/workers/data_zipper_worker_spec.rb | 19 + spec/workers/zipfulldata_spec.rb | 112 - 50 files changed, 2703 insertions(+), 2212 deletions(-) create mode 100644 app/models/application_record.rb create mode 100644 app/services/data_zipper_service.rb create mode 100644 app/services/data_zipper_service/generate_user_phenotype_csv.rb create mode 100644 app/services/data_zipper_service/zip_genotype_files.rb create mode 100644 app/services/data_zipper_service/zip_user_picture_phenotypes.rb create mode 100644 app/workers/data_zipper_worker.rb delete mode 100644 app/workers/zipfulldata.rb create mode 100644 spec/factories/open_humans_profiles.rb create mode 100644 spec/fixtures/files/genotype.txt create mode 100644 spec/fixtures/files/image.png create mode 100644 spec/models/application_record_spec.rb create mode 100644 spec/services/data_zipper_service/generate_user_phenotype_csv_spec.rb create mode 100644 spec/services/data_zipper_service/zip_genotype_files_spec.rb create mode 100644 spec/services/data_zipper_service/zip_user_picture_phenotypes_spec.rb create mode 100644 spec/services/data_zipper_service_spec.rb create mode 100644 spec/workers/data_zipper_worker_spec.rb delete mode 100644 spec/workers/zipfulldata_spec.rb diff --git a/app/models/achievement.rb b/app/models/achievement.rb index b3b0d99..4d32ffc 100644 --- a/app/models/achievement.rb +++ b/app/models/achievement.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class Achievement < ActiveRecord::Base + +class Achievement < ApplicationRecord include PgSearchCommon has_many :user_achievements pg_search_common_scope against: :award diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000..635c883 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true + + def self.copy_csv(sql) + Enumerator.new do |y| + conn = ActiveRecord::Base.connection.raw_connection + conn.copy_data "COPY (#{sql}) TO STDOUT WITH CSV HEADER DELIMITER ';'" do + while row = conn.get_copy_data + y << row + end + end + end + end +end diff --git a/app/models/genome_gov_paper.rb b/app/models/genome_gov_paper.rb index 7c5c40b..32b5bc4 100644 --- a/app/models/genome_gov_paper.rb +++ b/app/models/genome_gov_paper.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class GenomeGovPaper < ActiveRecord::Base + +class GenomeGovPaper < ApplicationRecord include PgSearchCommon has_many :snp_references, as: :paper diff --git a/app/models/genotype.rb b/app/models/genotype.rb index d72a5bb..ebde198 100644 --- a/app/models/genotype.rb +++ b/app/models/genotype.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true + require 'fileutils' -class Genotype < ActiveRecord::Base +class Genotype < ApplicationRecord belongs_to :user has_many :user_snps, dependent: :delete_all validates_presence_of :user @@ -20,7 +21,7 @@ class Genotype < ActiveRecord::Base end def fs_filename - "#{user.id}.#{filetype}.#{id}" + "#{user_id}.#{filetype}.#{id}" end Paperclip.interpolates :fs_filename do |attachment, style| diff --git a/app/models/homepage.rb b/app/models/homepage.rb index b293202..48c54f6 100644 --- a/app/models/homepage.rb +++ b/app/models/homepage.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class Homepage < ActiveRecord::Base + +class Homepage < ApplicationRecord belongs_to :user after_save :destroy_if_blank diff --git a/app/models/mendeley_paper.rb b/app/models/mendeley_paper.rb index 13cabd5..b2b4dae 100644 --- a/app/models/mendeley_paper.rb +++ b/app/models/mendeley_paper.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class MendeleyPaper < ActiveRecord::Base + +class MendeleyPaper < ApplicationRecord include PgSearchCommon has_many :snp_references, as: :paper diff --git a/app/models/message.rb b/app/models/message.rb index b8bce8e..bdcf78a 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class Message < ActiveRecord::Base + +class Message < ApplicationRecord attr_encrypted :body, key: ENV.fetch('USER_DATA_SECRET_KEY') attr_encrypted :subject, key: ENV.fetch('USER_DATA_SECRET_KEY') diff --git a/app/models/open_humans_profile.rb b/app/models/open_humans_profile.rb index 44e8c0c..5eb4cda 100644 --- a/app/models/open_humans_profile.rb +++ b/app/models/open_humans_profile.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -class OpenHumansProfile < ActiveRecord::Base +class OpenHumansProfile < ApplicationRecord belongs_to :user end diff --git a/app/models/pgp_annotation.rb b/app/models/pgp_annotation.rb index cd1a621..c7fb5b4 100644 --- a/app/models/pgp_annotation.rb +++ b/app/models/pgp_annotation.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PgpAnnotation < ActiveRecord::Base + +class PgpAnnotation < ApplicationRecord include PgSearchCommon belongs_to :snp diff --git a/app/models/phenotype.rb b/app/models/phenotype.rb index ffbec70..536454d 100644 --- a/app/models/phenotype.rb +++ b/app/models/phenotype.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class Phenotype < ActiveRecord::Base + +class Phenotype < ApplicationRecord include PgSearchCommon has_many :user_phenotypes, dependent: :destroy diff --git a/app/models/phenotype_comment.rb b/app/models/phenotype_comment.rb index 96a483d..1d450c8 100644 --- a/app/models/phenotype_comment.rb +++ b/app/models/phenotype_comment.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PhenotypeComment < ActiveRecord::Base + +class PhenotypeComment < ApplicationRecord include PgSearchCommon belongs_to :phenotype diff --git a/app/models/phenotype_set.rb b/app/models/phenotype_set.rb index b1a964f..db1e1ac 100644 --- a/app/models/phenotype_set.rb +++ b/app/models/phenotype_set.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PhenotypeSet < ActiveRecord::Base + +class PhenotypeSet < ApplicationRecord include PgSearchCommon has_and_belongs_to_many :phenotypes diff --git a/app/models/picture_phenotype.rb b/app/models/picture_phenotype.rb index 6a49cb4..a6d5f21 100644 --- a/app/models/picture_phenotype.rb +++ b/app/models/picture_phenotype.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PicturePhenotype < ActiveRecord::Base + +class PicturePhenotype < ApplicationRecord include PgSearchCommon has_many :user_picture_phenotypes, dependent: :destroy diff --git a/app/models/picture_phenotype_comment.rb b/app/models/picture_phenotype_comment.rb index 518f99f..501cec2 100644 --- a/app/models/picture_phenotype_comment.rb +++ b/app/models/picture_phenotype_comment.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PicturePhenotypeComment < ActiveRecord::Base + +class PicturePhenotypeComment < ApplicationRecord include PgSearchCommon belongs_to :picture_phenotype diff --git a/app/models/plos_paper.rb b/app/models/plos_paper.rb index 29527c8..6775347 100644 --- a/app/models/plos_paper.rb +++ b/app/models/plos_paper.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class PlosPaper < ActiveRecord::Base + +class PlosPaper < ApplicationRecord include PgSearchCommon has_many :snp_references, as: :paper diff --git a/app/models/search_result.rb b/app/models/search_result.rb index 27d00dc..61bfb3e 100644 --- a/app/models/search_result.rb +++ b/app/models/search_result.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true -class SearchResult < ActiveRecord::Base + +class SearchResult < ApplicationRecord end diff --git a/app/models/snp.rb b/app/models/snp.rb index 987db22..963e9bd 100644 --- a/app/models/snp.rb +++ b/app/models/snp.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class Snp < ActiveRecord::Base + +class Snp < ApplicationRecord include PgSearchCommon has_many :user_snps, foreign_key: :snp_name, primary_key: :name diff --git a/app/models/snp_comment.rb b/app/models/snp_comment.rb index 6f9c2e1..df8fc4e 100644 --- a/app/models/snp_comment.rb +++ b/app/models/snp_comment.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class SnpComment < ActiveRecord::Base + +class SnpComment < ApplicationRecord include PgSearchCommon belongs_to :snp diff --git a/app/models/snp_reference.rb b/app/models/snp_reference.rb index 8f8ad9e..6184e25 100644 --- a/app/models/snp_reference.rb +++ b/app/models/snp_reference.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class SnpReference < ActiveRecord::Base + +class SnpReference < ApplicationRecord self.primary_keys = :snp_id, :paper_id, :paper_type belongs_to :snp belongs_to :paper, polymorphic: true diff --git a/app/models/snpedia_paper.rb b/app/models/snpedia_paper.rb index 46edd33..f80c37a 100644 --- a/app/models/snpedia_paper.rb +++ b/app/models/snpedia_paper.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class SnpediaPaper < ActiveRecord::Base + +class SnpediaPaper < ApplicationRecord include PgSearchCommon has_many :snp_references, as: :paper diff --git a/app/models/user.rb b/app/models/user.rb index 001d762..515e56e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class User < ActiveRecord::Base + +class User < ApplicationRecord include PgSearchCommon has_attached_file :avatar, diff --git a/app/models/user_achievement.rb b/app/models/user_achievement.rb index 84c6472..ddd3fbc 100644 --- a/app/models/user_achievement.rb +++ b/app/models/user_achievement.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class UserAchievement < ActiveRecord::Base + +class UserAchievement < ApplicationRecord belongs_to :achievement belongs_to :user end diff --git a/app/models/user_phenotype.rb b/app/models/user_phenotype.rb index c4e8ddb..cb85da7 100644 --- a/app/models/user_phenotype.rb +++ b/app/models/user_phenotype.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class UserPhenotype < ActiveRecord::Base + +class UserPhenotype < ApplicationRecord include PgSearchCommon belongs_to :phenotype diff --git a/app/models/user_picture_phenotype.rb b/app/models/user_picture_phenotype.rb index 94898a3..333eaa8 100644 --- a/app/models/user_picture_phenotype.rb +++ b/app/models/user_picture_phenotype.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class UserPicturePhenotype < ActiveRecord::Base + +class UserPicturePhenotype < ApplicationRecord include PgSearchCommon belongs_to :picture_phenotype diff --git a/app/models/user_session.rb b/app/models/user_session.rb index f3c524b..68da1be 100644 --- a/app/models/user_session.rb +++ b/app/models/user_session.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + class UserSession < Authlogic::Session::Base after_persisting :raven_set_user_context after_destroy :raven_clear_user_context diff --git a/app/models/user_snp.rb b/app/models/user_snp.rb index f8454da..728a6c0 100644 --- a/app/models/user_snp.rb +++ b/app/models/user_snp.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -class UserSnp < ActiveRecord::Base + +class UserSnp < ApplicationRecord self.primary_keys = [:genotype_id, :snp_name] belongs_to :snp, foreign_key: :snp_name, primary_key: :name, counter_cache: true has_one :user, through: :genotype diff --git a/app/services/data_zipper_service.rb b/app/services/data_zipper_service.rb new file mode 100644 index 0000000..3b08a74 --- /dev/null +++ b/app/services/data_zipper_service.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +require 'zip' +require_relative 'data_zipper_service/generate_user_phenotype_csv' +require_relative 'data_zipper_service/zip_user_picture_phenotypes' + +class DataZipperService + CSV_OPTIONS = { col_sep: ';' }.freeze + PUBLIC_PATH = '/data/zip/opensnp_datadump.current.zip' + DEFAULT_OUTPUT_DIR = Rails.root.join('public', 'data', 'zip').freeze + + attr_reader :time, :time_str, :zip_public_path, :zip_tmp_path, :tmp_dir, + :link_path, :output_dir, :logger + + def initialize(output_dir: DEFAULT_OUTPUT_DIR, logger: Logger.new(STDOUT)) + @output_dir = output_dir + @time = Time.now.utc + @time_str = time.strftime('%Y%m%d%H%M') + @tmp_dir = Rails.root.join('tmp', "opensnp_datadump.#{time_str}") + zip_file_name = "opensnp_datadump.#{time_str}.zip" + @zip_public_path = @output_dir.join(zip_file_name) + @zip_tmp_path = Rails.root.join('tmp', zip_file_name) + @link_path = @output_dir.join('opensnp_datadump.current.zip') + @logger = logger + end + + def call + # only create a new file if in the current minute none has been created yet + if Dir.exist?(tmp_dir) + logger.error("Directory #{tmp_dir} already exists. Exiting...") + return false + end + + begin + logger.info("Creating temp dir: #{tmp_dir}") + Dir.mkdir(tmp_dir) + logger.info("Creating zipfile: #{zip_tmp_path}") + Zip::File.open(zip_tmp_path, Zip::File::CREATE) do |zipfile| + zip_user_phenotypes(zipfile) + zip_user_picture_phenotypes(zipfile) + zip_readme(zipfile) + zip_genotype_files(zipfile) + end + + # move from local storage to network storage + logger.info("Copying #{zip_tmp_path} to #{zip_public_path}") + FileUtils.cp(zip_tmp_path, zip_public_path) + logger.info("Deleting #{zip_tmp_path}") + FileUtils.rm(zip_tmp_path) + logger.info("Creating symlink #{link_path} to #{zip_public_path}") + FileUtils.ln_sf(zip_public_path, link_path) + + # everything went OK, now delete old zips + delete_old_zips + ensure + logger.info("Deleting #{tmp_dir}") + FileUtils.rm_rf(tmp_dir) + end + end + + def self.public_path + PUBLIC_PATH + end + + private + + # Create a CSV with a row for each genotype, with user data and phenotypes as + # columns. + def zip_user_phenotypes(zipfile) + logger.info('Zipping user phenotypes') + zipfile.get_output_stream("phenotypes_#{time_str}.csv") do |f| + GenerateUserPhenotypeCsv.new.call.each do |row| + f.write(row) + end + end + end + + # make a CSV describing all of them - which filename is for which user's phenotype + def zip_user_picture_phenotypes(zipfile) + logger.info('Zipping user picture phenotypes') + ZipUserPicturePhenotypes.new(zipfile, tmp_dir, time_str).call + end + + def zip_readme(zipfile) + logger.info('Zipping readme') + # make a README containing time of zip - this way, users can compare with page-status + # and see how old the data is + zipfile.get_output_stream('readme.txt') do |f| + f.write( + I18n.t( + 'zipfulldata.readme', + time: time.ctime, + phenotype_count: Phenotype.count, + genotype_count: Genotype.count, + picture_count: PicturePhenotype.count + ) + ) + end + end + + def zip_genotype_files(zipfile) + logger.info('Zipping genotype files') + ZipGenotypeFiles.new(zipfile).call + end + + def delete_old_zips + forbidden_files = [link_path, zip_public_path].map(&:to_s) + Dir[output_dir.join('opensnp_datadump.*.zip')].each do |f| + next if forbidden_files.include?(f) + logger.info("Deleting #{f}") + File.delete(f) + end + end +end diff --git a/app/services/data_zipper_service/generate_user_phenotype_csv.rb b/app/services/data_zipper_service/generate_user_phenotype_csv.rb new file mode 100644 index 0000000..001f57e --- /dev/null +++ b/app/services/data_zipper_service/generate_user_phenotype_csv.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +class DataZipperService + class GenerateUserPhenotypeCsv + def call + # Build a pivot table with characteristics and user genotype IDs as dimensions and + # variations as values. + # + # PostgreSQL docs: https://www.postgresql.org/docs/9.6/tablefunc.html#AEN145056 + ApplicationRecord.copy_csv(<<-SQL) + SELECT + user_id, + fs_filename AS genotype_filename, + user_yob AS date_of_birth, + user_sex AS chrom_sex, + oh_user_name AS openhumans_name, + #{characteristics_headers} + FROM CROSSTAB( + 'SELECT genotypes.id, -- unique key, must be first + genotypes.user_id, + genotypes.user_id || ''.'' || genotypes.filetype || ''.'' || genotypes.id, + users.yearofbirth, + users.sex, + COALESCE(open_humans_profiles.open_humans_user_id, ''-''), + phenotypes.characteristic, -- column headers, must be second to last + user_phenotypes.variation -- values, must be last + FROM genotypes + JOIN users ON users.id = genotypes.user_id + LEFT JOIN user_phenotypes ON user_phenotypes.user_id = genotypes.user_id + LEFT JOIN phenotypes ON phenotypes.id = user_phenotypes.phenotype_id + LEFT JOIN open_humans_profiles ON open_humans_profiles.user_id = users.id + ORDER BY genotypes.id, phenotypes.id', + '#{phenotypes.to_sql}' + ) AS ct_variations( + genotype_id integer, + user_id integer, + fs_filename text, + user_yob text, + user_sex text, + oh_user_name text, + #{characteristics_types} + ) + ORDER BY user_id, genotype_id + SQL + end + + private + + def phenotypes + @phenotypes ||= Phenotype.select(:characteristic).order(:id) + end + + def characteristics_headers + characteristics.map do |c| + header = c.gsub('"', '""') + "COALESCE(\"#{header}\", '-') AS \"#{header}\"" + end.join(', ') + end + + def characteristics_types + characteristics.map { |c| "\"#{c.gsub('"', '""')}\" text" }.join(', ') + end + + def characteristics + @characteristics ||= phenotypes.pluck(:characteristic) + end + end +end diff --git a/app/services/data_zipper_service/zip_genotype_files.rb b/app/services/data_zipper_service/zip_genotype_files.rb new file mode 100644 index 0000000..8e4fde2 --- /dev/null +++ b/app/services/data_zipper_service/zip_genotype_files.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class DataZipperService + class ZipGenotypeFiles + def initialize(zipfile) + @zipfile = zipfile + end + + attr_reader :zipfile + + def call + Genotype.includes(:user).find_each do |genotype| + next unless File.exist?(genotype.genotype.path) + + user = genotype.user + yob = user.yearofbirth == 'rather not say' ? 'unknown' : user.yearofbirth + sex = user.sex == 'rather not say' ? 'unknown' : user.sex + + zipfile.add( + "user#{genotype.user_id}_file#{genotype.id}_yearofbirth_#{yob}_" \ + "sex_#{sex}.#{genotype.filetype}.txt", + genotype.genotype.path + ) + end + end + end +end diff --git a/app/services/data_zipper_service/zip_user_picture_phenotypes.rb b/app/services/data_zipper_service/zip_user_picture_phenotypes.rb new file mode 100644 index 0000000..8804b01 --- /dev/null +++ b/app/services/data_zipper_service/zip_user_picture_phenotypes.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'csv' + +class DataZipperService + class ZipUserPicturePhenotypes + CSV_BASE_HEADER = %w(user_id date_of_birth chrom_sex).freeze + + def initialize(zipfile, tmp_dir, time_str) + @zipfile = zipfile + @tmp_dir = tmp_dir + @time_str = time_str + end + + attr_reader :zipfile, :tmp_dir, :time_str + + def call + picture_phenotypes = PicturePhenotype.order(:id) + csv_head = CSV_BASE_HEADER + picture_phenotypes.pluck(:characteristic) + picture_zip = Zip::File.open( + tmp_dir.join("opensnp_picturedump.#{time_str}.zip"), + Zip::File::CREATE + ) + + user_picture_phenotypes_csv = CSV.generate(CSV_OPTIONS) do |csv| + csv << csv_head + + User + .order(:id) + .includes(:user_picture_phenotypes) + .find_each do |user| + csv << build_user_picture_phenotype_row(user, picture_phenotypes, picture_zip) + end + end + + picture_zip.close + + zipfile.get_output_stream("picture_phenotypes_#{time_str}.csv") do |f| + f.write(user_picture_phenotypes_csv) + end + zipfile.add("picture_phenotypes_#{time_str}_all_pics.zip", picture_zip.name) + end + + def build_user_picture_phenotype_row(user, picture_phenotypes, picture_zip) + user_picture_phenotypes = user + .user_picture_phenotypes + .index_by(&:picture_phenotype_id) + + [ + user.id, + user.yearofbirth, + user.sex + ] + picture_phenotypes.map do |picture_phenotype| + user_picture_phenotype = user_picture_phenotypes[picture_phenotype.id] + if user_picture_phenotype && user_picture_phenotype.phenotype_picture.present? + extension = user_picture_phenotype + .phenotype_picture + .content_type + .split('/') + .last + extension = 'jpg' if extension == 'jpeg' + file_name = "#{user_picture_phenotype.id}.#{extension}" + picture_zip.add(file_name, user_picture_phenotype.phenotype_picture.path) + file_name + else + '-' + end + end + end + end +end diff --git a/app/views/genotypes/index.html.erb b/app/views/genotypes/index.html.erb index c3abf69..4561a13 100644 --- a/app/views/genotypes/index.html.erb +++ b/app/views/genotypes/index.html.erb @@ -12,7 +12,7 @@
- <%= link_to Zipfulldata.public_path, title: "Request download", class: "btn btn-default center-block genotype__download-button" do %> + <%= link_to DataZipperService.public_path, title: "Request download", class: "btn btn-default center-block genotype__download-button" do %> Download all data <% end %>

Includes all genotyping files, a CSV with all phenotypes of those users,
and all picture phenotypes. A preprocessed dump of 5,000 datasets
from February 2020 exists on GenomePrep

diff --git a/app/views/snps/index.html.erb b/app/views/snps/index.html.erb index 86a8a73..e5493d1 100644 --- a/app/views/snps/index.html.erb +++ b/app/views/snps/index.html.erb @@ -4,7 +4,7 @@

Listing all SNPs

- <%= link_to Zipfulldata.public_path, title: "Request download", class: "btn btn-default center-block snps__download-button" do %> + <%= link_to DataZipperService.public_path, title: "Request download", class: "btn btn-default center-block snps__download-button" do %> Download dump <% end %>

Includes annotation for all SNPs from all sources

diff --git a/app/workers/data_zipper_worker.rb b/app/workers/data_zipper_worker.rb new file mode 100644 index 0000000..bee435d --- /dev/null +++ b/app/workers/data_zipper_worker.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class DataZipperWorker + include Sidekiq::Worker + sidekiq_options queue: :zipfulldata, retry: 0, unique: true, dead: false + # can't do retry => false. + # Note with retry disabled, Sidekiq will not track or save any error data for the worker's jobs. + # dead => false means don't send dead job to the dead queue, we don't care about that + + def perform + DataZipperService.new(logger: logger).call + end +end diff --git a/app/workers/zipfulldata.rb b/app/workers/zipfulldata.rb deleted file mode 100644 index c92f6e1..0000000 --- a/app/workers/zipfulldata.rb +++ /dev/null @@ -1,227 +0,0 @@ - -# frozen_string_literal: true -require 'csv' -require 'zip' - - -class Zipfulldata - include Sidekiq::Worker - sidekiq_options queue: :zipfulldata, retry: 0, unique: true, dead: false - # can't do retry => false. - # Note with retry disabled, Sidekiq will not track or save any error data for the worker's jobs. - # dead => false means don't send dead job to the dead queue, we don't care about that - - attr_reader :time, :time_str, :csv_options, :dump_file_name, :zip_public_path, - :zip_fs_path, :tmp_dir, :link_path - - def perform - logger.info('job started') - run - logger.info('job done') - end - - def initialize - @time = Time.now.utc - @time_str = time.strftime("%Y%m%d%H%M") - @csv_options = { col_sep: ';' } - @dump_file_name = "opensnp_datadump.#{time_str}" - @zip_public_path = "public/data/zip/#{dump_file_name}.zip" - @zip_fs_path = "/tmp/#{dump_file_name}.zip" - @tmp_dir = "#{Rails.root}/tmp/#{dump_file_name}" - @link_path = Rails.root.join('public/data/zip/opensnp_datadump.current.zip') - end - - def run - genotypes = Genotype.includes(user: :user_phenotypes) - logger.info("Got #{genotypes.length} genotypes") - - # only create a new file if in the current minute none has been created yet - if Dir.exists?(tmp_dir) - logger.info("Directory #{tmp_dir} already exists. Exiting...") - return false - end - - begin - logger.info("Making tmpdir #{tmp_dir}") - Dir.mkdir(tmp_dir) - logger.info("Starting zipfile #{zip_fs_path}") - Zip::File.open(zip_fs_path, Zip::File::CREATE) do |zipfile| - create_user_csv(genotypes, zipfile) - list_of_pics = create_picture_phenotype_csv(zipfile) - create_picture_zip(list_of_pics, zipfile) - create_readme(zipfile) - zip_genotype_files(genotypes, zipfile) - end - # move from local storage to network storage - FileUtils.cp(@zip_fs_path, Rails.root.join("public/data/zip/#{dump_file_name}.zip")) - FileUtils.rm(@zip_fs_path) - logger.info('created zip-file') - - FileUtils.ln_sf( - Rails.root.join("public/data/zip/#{dump_file_name}.zip"), - link_path) - - # everything went OK, now delete old zips - delete_old_zips - - ensure - FileUtils.rm_rf(tmp_dir) - end - true - end - - def create_user_csv(genotypes, zipfile) - phenotypes = Phenotype.all - csv_file_name = "#{tmp_dir}/dump#{time_str}.csv" - csv_head = %w(user_id genotype_filename date_of_birth chrom_sex openhumans_name) - csv_head.concat(phenotypes.map(&:characteristic)) - - CSV.open(csv_file_name, "w", csv_options) do |csv| - csv << csv_head - - # create lines in csv-file for each user who has uploaded his data - genotypes.each do |genotype| - user = genotype.user - oh_name = user.open_humans_profile&.open_humans_user_id || '-' - row = [user.id, genotype.fs_filename, user.yearofbirth, user.sex, oh_name] - - phenotypes.each do |phenotype| - if up = user.user_phenotypes.where(phenotype_id: phenotype.id).first - row << up.variation - else - row << "-" - end - end - csv << row - end - end - logger.info('created user csv') - zipfile.add("phenotypes_#{time_str}.csv", csv_file_name) - end - - # make a CSV describing all of them - which filename is for which user's phenotype - def create_picture_phenotype_csv(zipfile) - file_name = "#{tmp_dir}/picture_dump#{time_str}.csv" - logger.info("Writing picture-CSV to #{file_name}") - - list_of_pics = [] # need this for the zip-file-later - - picture_phenotypes = PicturePhenotype.all - csv_head = %w(user_id date_of_birth chrom_sex) - csv_head.concat(picture_phenotypes.map(&:characteristic)) - - CSV.open(file_name, "w", csv_options) do |csv| - - csv << csv_head - - # create lines in csv-file for each user who has uploaded his data - - User.includes(:user_picture_phenotypes).order(:id).each do |u| - logger.info("Looking at user #{u.id}") - row = [u.id, u.yearofbirth, u.sex] - picture_phenotypes.each do |pp| - - # copy the picture with name to +user_id+_+pic_phenotype_id+.png - # logger.info("Looking for this picture #{pp.id}") - picture = pp.user_picture_phenotypes.where(user_id: u.id).first - # does this user have this pic? - if picture.present? && picture.phenotype_picture.present? - picture_path = picture.phenotype_picture.path - basename = picture_path.split("/")[-1] - filetype = basename.split(".")[-1] - logger.info("FOUND file #{picture_path}, basename is #{basename}") - - list_of_pics << picture - row << "#{picture.id}.#{filetype}" - else - row << '-' - end - end - logger.info('Putting a line into CSV') - csv << row - end - end - logger.info('created picture handle csv-file') - zipfile.add("picture_phenotypes_#{time_str}.csv", file_name) - list_of_pics - end - - def create_picture_zip(list_of_pics, zipfile) - pic_zipname = "/data/zip/opensnp_picturedump."+time_str+".zip" - Zip::File.open("#{Rails.root}/public/#{pic_zipname}", Zip::File::CREATE) do |z| - list_of_pics.each do |tmp| - begin - file_name = tmp.phenotype_picture.path - basename = file_name.split("/")[-1] - filetype = basename.split(".")[-1] - logger.info("Adding file to zip named #{tmp.id.to_s + "." + filetype}") - z.add(tmp.id.to_s+"."+filetype, file_name) - logger.info("Added #{tmp.id.to_s + "." + filetype}") - rescue => e - logger.info("create_picture_zip: #{e.class}: #{e.message}") - end - end - end - zipfile.add("picture_phenotypes_#{time_str}_all_pics.zip", - "#{Rails.root}/public/#{pic_zipname}") - logger.info('created picture zip file') - end - - def create_readme(zipfile) - # make a README containing time of zip - this way, users can compare with page-status - # and see how old the data is - phenotype_count = Phenotype.count - genotype_count = Genotype.count - picture_count = PicturePhenotype.count - File.open("#{tmp_dir}/dump#{time_str}.txt", "w") do |readme| - readme.puts(<<-TXT) -This archive was generated on #{time.ctime} UTC. It contains #{phenotype_count} phenotypes, #{genotype_count} genotypes and #{picture_count} picture phenotypes. - -Thanks for using openSNP! -TXT - end - zipfile.add("readme.txt", "#{tmp_dir}/dump#{time_str}.txt") - end - - def zip_genotype_files(genotypes, zipfile) - genotypes.each do |gen_file| - yob = gen_file.user.yearofbirth - sex = gen_file.user.sex - to_zip_file = "#{Rails.root}/public/data/#{gen_file.fs_filename}" - - if yob == "rather not say" - yob = "unknown" - end - if sex == "rather not say" - sex = "unknown" - end - - zipfile.add("user#{gen_file.user_id}_file#{gen_file.id}_yearofbirth_#{yob}_sex_#{sex}.#{gen_file.filetype}.txt", - to_zip_file) unless !File.exist? to_zip_file - end - end - - def delete_old_zips - forbidden_files = [link_path, - Rails.root.join('data', 'annotation.zip').to_s, - Rails.root.join('public', 'data', 'zip', "#{dump_file_name}.zip").to_s] - Dir[Rails.root.join('public/data/zip/*.zip')].each do |f| - if (not forbidden_files.include? f) and (File.ftype(f) == "file") - File.delete(f) - end - end - end - - def self.public_path - '/data/zip/opensnp_datadump.current.zip' - end - - def self.gb_size - file = Rails.root.join('public', self.public_path) - if File.file? file - "(Size: #{(File.size(file).to_f / (2**30)).round(2)})" - else - "" - end - end -end diff --git a/config/locales/en.yml b/config/locales/en.yml index 250291b..e1ba9eb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -10,3 +10,8 @@ en: attributes: phenotype: taken: 'has already been entered.' + zipfulldata: + readme: | + This archive was generated on %{time} UTC. It contains %{phenotype_count} phenotypes, %{genotype_count} genotypes and %{picture_count} picture phenotypes. + + Thanks for using openSNP! diff --git a/db/development_seeds.rb b/db/development_seeds.rb index 2ee2b57..33fb9f7 100644 --- a/db/development_seeds.rb +++ b/db/development_seeds.rb @@ -34,5 +34,5 @@ PROPERTIES = %w{ }.freeze 100.times do - Phenotype.create! characteristic: "#{BODY_PARTS.sample} #{PROPERTIES.sample}" + Phenotype.find_or_create_by(characteristic: "#{BODY_PARTS.sample} #{PROPERTIES.sample}") end diff --git a/db/structure.sql b/db/structure.sql index 5ed7cd3..a7aed5d 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1,1843 +1,1844 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.5.13 --- Dumped by pg_dump version 9.5.12 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - --- --- Name: hstore; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public; - - --- --- Name: EXTENSION hstore; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs'; - - --- --- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public; - - --- --- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION pg_stat_statements IS 'track execution statistics of all SQL statements executed'; - - --- --- Name: find_bad_row(text); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION public.find_bad_row(tablename text) RETURNS tid - LANGUAGE plpgsql - AS $_$ -DECLARE -result tid; -curs REFCURSOR; -row1 RECORD; -row2 RECORD; -tabName TEXT; -count BIGINT := 0; -BEGIN -SELECT reverse(split_part(reverse($1), '.', 1)) INTO tabName; -OPEN curs FOR EXECUTE 'SELECT ctid FROM ' || tableName; -count := 1; -FETCH curs INTO row1; -WHILE row1.ctid IS NOT NULL LOOP -result = row1.ctid; -count := count + 1; -FETCH curs INTO row1; -EXECUTE 'SELECT (each(hstore(' || tabName || '))).* FROM ' -|| tableName || ' WHERE ctid = $1' INTO row2 -USING row1.ctid; -IF count % 100000 = 0 THEN -RAISE NOTICE 'rows processed: %', count; -END IF; -END LOOP; -CLOSE curs; -RETURN row1.ctid; -EXCEPTION -WHEN OTHERS THEN -RAISE NOTICE 'LAST CTID: %', result; -RAISE NOTICE '%: %', SQLSTATE, SQLERRM; -RETURN result; -END -$_$; - - --- --- Name: upsert_user_snps(integer); Type: FUNCTION; Schema: public; Owner: - --- - -CREATE FUNCTION public.upsert_user_snps(current_genotype_id integer) RETURNS void - LANGUAGE plpgsql - AS $$ - DECLARE - temp_table_name VARCHAR := CONCAT('user_snps_temp_', current_genotype_id::varchar); - query VARCHAR := FORMAT('SELECT snp_name, local_genotype from %s', temp_table_name); - temp_record RECORD; - BEGIN - FOR temp_record IN EXECUTE(query) LOOP - BEGIN - INSERT INTO user_snps (snp_name, genotype_id, local_genotype) - VALUES (temp_record.snp_name, - current_genotype_id, - temp_record.local_genotype); - EXCEPTION WHEN unique_violation THEN - UPDATE user_snps - SET local_genotype = temp_record.local_genotype - WHERE snp_name = temp_record.snp_name - AND user_snps.genotype_id = current_genotype_id; - END; - END LOOP; - END; - $$; - - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: achievements; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.achievements ( - id integer NOT NULL, - award text, - short_name character varying(255), - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: achievements_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.achievements_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: achievements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.achievements_id_seq OWNED BY public.achievements.id; - - --- --- Name: active_admin_comments; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.active_admin_comments ( - id integer NOT NULL, - resource_id character varying(255) NOT NULL, - resource_type character varying(255) NOT NULL, - author_id integer, - author_type character varying(255), - body text, - created_at timestamp without time zone NOT NULL, - updated_at timestamp without time zone NOT NULL, - namespace character varying(255) -); - - --- --- Name: active_admin_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.active_admin_comments_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: active_admin_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.active_admin_comments_id_seq OWNED BY public.active_admin_comments.id; - - --- --- Name: admin_users; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.admin_users ( - id integer NOT NULL, - email character varying(255) DEFAULT ''::character varying NOT NULL, - encrypted_password character varying(255) DEFAULT ''::character varying NOT NULL, - reset_password_token character varying(255), - reset_password_sent_at timestamp without time zone, - remember_created_at timestamp without time zone, - sign_in_count integer DEFAULT 0, - current_sign_in_at timestamp without time zone, - last_sign_in_at timestamp without time zone, - current_sign_in_ip character varying(255), - last_sign_in_ip character varying(255), - created_at timestamp without time zone NOT NULL, - updated_at timestamp without time zone NOT NULL -); - - --- --- Name: admin_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.admin_users_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: admin_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.admin_users_id_seq OWNED BY public.admin_users.id; - - --- --- Name: file_links; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.file_links ( - id integer NOT NULL, - description text, - url text, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: file_links_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.file_links_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: file_links_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.file_links_id_seq OWNED BY public.file_links.id; - - --- --- Name: friendly_id_slugs; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.friendly_id_slugs ( - id integer NOT NULL, - slug character varying(255) NOT NULL, - sluggable_id integer NOT NULL, - sluggable_type character varying(40), - created_at timestamp without time zone -); - - --- --- Name: friendly_id_slugs_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.friendly_id_slugs_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: friendly_id_slugs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.friendly_id_slugs_id_seq OWNED BY public.friendly_id_slugs.id; - - --- --- Name: genome_gov_papers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.genome_gov_papers ( - id integer NOT NULL, - first_author text, - title text, - pubmed_link text, - pub_date text, - journal text, - trait text, - pvalue double precision, - pvalue_description text, - confidence_interval text, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: genome_gov_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.genome_gov_papers_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: genome_gov_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.genome_gov_papers_id_seq OWNED BY public.genome_gov_papers.id; - - --- --- Name: genotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.genotypes ( - id integer NOT NULL, - filetype character varying(255) DEFAULT '23andme'::character varying, - user_id integer NOT NULL, - created_at timestamp without time zone, - updated_at timestamp without time zone, - md5sum character varying(255), - genotype_file_name character varying(255), - genotype_content_type character varying(255), - genotype_file_size integer, - genotype_updated_at timestamp without time zone -); - - --- --- Name: genotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.genotypes_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: genotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.genotypes_id_seq OWNED BY public.genotypes.id; - - --- --- Name: homepages; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.homepages ( - id integer NOT NULL, - url text, - description text, - created_at timestamp without time zone, - updated_at timestamp without time zone, - user_id integer -); - - --- --- Name: homepages_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.homepages_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: homepages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.homepages_id_seq OWNED BY public.homepages.id; - - --- --- Name: mendeley_papers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.mendeley_papers ( - id integer NOT NULL, - first_author text, - title text, - mendeley_url text, - doi text, - pub_year integer, - uuid character varying(255), - open_access boolean, - reader integer, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: mendeley_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.mendeley_papers_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: mendeley_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.mendeley_papers_id_seq OWNED BY public.mendeley_papers.id; - - --- --- Name: messages; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.messages ( - id integer NOT NULL, - subject text, - user_id integer, - body text, - sent boolean, - user_has_seen boolean, - from_id integer, - to_id integer, - created_at timestamp without time zone, - updated_at timestamp without time zone, - encrypted_body text, - encrypted_body_iv character varying, - encrypted_subject text, - encrypted_subject_iv character varying -); - - --- --- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.messages_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.messages_id_seq OWNED BY public.messages.id; - - --- --- Name: open_humans_profiles; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.open_humans_profiles ( - id integer NOT NULL, - open_humans_user_id character varying, - project_member_id character varying, - user_id integer, - access_token character varying, - refresh_token character varying, - expires_in timestamp without time zone, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: open_humans_profiles_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.open_humans_profiles_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: open_humans_profiles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.open_humans_profiles_id_seq OWNED BY public.open_humans_profiles.id; - - --- --- Name: pgp_annotations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.pgp_annotations ( - id integer NOT NULL, - gene text, - qualified_impact text, - inheritance text, - summary text, - trait text, - created_at timestamp without time zone, - updated_at timestamp without time zone, - snp_id integer -); - - --- --- Name: pgp_annotations_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.pgp_annotations_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: pgp_annotations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.pgp_annotations_id_seq OWNED BY public.pgp_annotations.id; - - --- --- Name: phenotype_comments; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.phenotype_comments ( - id integer NOT NULL, - comment_text text, - subject text, - user_id integer, - phenotype_id integer, - reply_to_id integer, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: phenotype_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.phenotype_comments_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: phenotype_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.phenotype_comments_id_seq OWNED BY public.phenotype_comments.id; - - --- --- Name: phenotype_sets; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.phenotype_sets ( - id integer NOT NULL, - user_id integer, - title character varying(255), - description text, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: phenotype_sets_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.phenotype_sets_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: phenotype_sets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.phenotype_sets_id_seq OWNED BY public.phenotype_sets.id; - - --- --- Name: phenotype_sets_phenotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.phenotype_sets_phenotypes ( - phenotype_set_id integer, - phenotype_id integer -); - - --- --- Name: phenotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.phenotypes ( - id integer NOT NULL, - characteristic character varying(255), - known_phenotypes text, - created_at timestamp without time zone, - updated_at timestamp without time zone, - description text -); - - --- --- Name: phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.phenotypes_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.phenotypes_id_seq OWNED BY public.phenotypes.id; - - --- --- Name: picture_phenotype_comments; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.picture_phenotype_comments ( - id integer NOT NULL, - comment_text text, - subject text, - user_id integer, - picture_phenotype_id integer, - reply_to_id integer, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: picture_phenotype_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.picture_phenotype_comments_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: picture_phenotype_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.picture_phenotype_comments_id_seq OWNED BY public.picture_phenotype_comments.id; - - --- --- Name: picture_phenotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.picture_phenotypes ( - id integer NOT NULL, - characteristic character varying(255), - description text, - number_of_users integer DEFAULT 0, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: picture_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.picture_phenotypes_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: picture_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.picture_phenotypes_id_seq OWNED BY public.picture_phenotypes.id; - - --- --- Name: plos_papers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.plos_papers ( - id integer NOT NULL, - first_author text, - title text, - doi text, - pub_date timestamp without time zone, - created_at timestamp without time zone, - updated_at timestamp without time zone, - reader integer -); - - --- --- Name: plos_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.plos_papers_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: plos_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.plos_papers_id_seq OWNED BY public.plos_papers.id; - - --- --- Name: schema_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.schema_migrations ( - version character varying(255) NOT NULL -); - - --- --- Name: snp_comments; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.snp_comments ( - id integer NOT NULL, - comment_text text, - subject text, - user_id integer, - snp_id integer, - created_at timestamp without time zone, - updated_at timestamp without time zone, - reply_to_id integer -); - - --- --- Name: snp_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.snp_comments_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: snp_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.snp_comments_id_seq OWNED BY public.snp_comments.id; - - --- --- Name: snp_references; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.snp_references ( - snp_id integer, - paper_id integer, - paper_type character varying(255) -); - - --- --- Name: snp_references_backup; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.snp_references_backup ( - snp_id integer NOT NULL, - paper_id integer NOT NULL, - paper_type character varying(255) NOT NULL -); - - --- --- Name: snpedia_papers; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.snpedia_papers ( - id integer NOT NULL, - url character varying(255), - summary text, - created_at timestamp without time zone, - updated_at timestamp without time zone, - revision integer DEFAULT 0 -); - - --- --- Name: snpedia_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.snpedia_papers_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: snpedia_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.snpedia_papers_id_seq OWNED BY public.snpedia_papers.id; - - --- --- Name: snps; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.snps ( - id integer NOT NULL, - name character varying(255), - "position" character varying(255), - chromosome character varying(255), - genotype_frequency character varying(255) DEFAULT '--- {} -'::character varying, - allele_frequency character varying(255) DEFAULT '--- -A: 0 -T: 0 -G: 0 -C: 0 -'::character varying, - ranking integer DEFAULT 0, - number_of_users integer DEFAULT 0, - mendeley_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459467'::timestamp without time zone, - plos_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459582'::timestamp without time zone, - snpedia_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459627'::timestamp without time zone, - created_at timestamp without time zone, - updated_at timestamp without time zone, - user_snps_count integer -) -WITH (autovacuum_enabled='false', toast.autovacuum_enabled='false'); - - --- --- Name: snps_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.snps_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: snps_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.snps_id_seq OWNED BY public.snps.id; - - --- --- Name: user_achievements; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.user_achievements ( - id integer NOT NULL, - user_id integer, - achievement_id integer, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: user_achievements_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.user_achievements_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: user_achievements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.user_achievements_id_seq OWNED BY public.user_achievements.id; - - --- --- Name: user_phenotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.user_phenotypes ( - id integer NOT NULL, - user_id integer, - phenotype_id integer, - variation character varying(255), - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: user_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.user_phenotypes_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: user_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.user_phenotypes_id_seq OWNED BY public.user_phenotypes.id; - - --- --- Name: user_picture_phenotypes; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.user_picture_phenotypes ( - id integer NOT NULL, - user_id integer, - picture_phenotype_id integer, - variation character varying(255), - phenotype_picture_file_name character varying(255), - phenotype_picture_content_type character varying(255), - phenotype_picture_file_size integer, - phenotype_picture_updated_at timestamp without time zone, - created_at timestamp without time zone, - updated_at timestamp without time zone -); - - --- --- Name: user_picture_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.user_picture_phenotypes_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: user_picture_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.user_picture_phenotypes_id_seq OWNED BY public.user_picture_phenotypes.id; - - --- --- Name: user_snps; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.user_snps ( - snp_name character varying(32) NOT NULL, - genotype_id integer NOT NULL, - local_genotype bpchar -) -WITH (autovacuum_enabled='false', toast.autovacuum_enabled='false'); - - --- --- Name: users; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.users ( - id integer NOT NULL, - name character varying(255), - email character varying(255), - password_salt character varying(255), - crypted_password character varying(255), - persistence_token character varying(255), - perishable_token character varying(255), - has_sequence boolean DEFAULT false, - sequence_link character varying(255), - description text, - finished_snp_parsing boolean DEFAULT false, - phenotype_creation_counter integer DEFAULT 0, - created_at timestamp without time zone, - updated_at timestamp without time zone, - avatar_file_name character varying(255), - avatar_content_type character varying(255), - avatar_file_size integer, - avatar_updated_at timestamp without time zone, - help_one boolean DEFAULT false, - help_two boolean DEFAULT false, - help_three boolean DEFAULT false, - sex character varying(255) DEFAULT 'rather not say'::character varying, - yearofbirth character varying(255) DEFAULT 'rather not say'::character varying, - message_on_message boolean DEFAULT true, - message_on_snp_comment_reply boolean DEFAULT true, - message_on_phenotype_comment_reply boolean DEFAULT true, - message_on_newsletter boolean DEFAULT true, - message_on_new_phenotype boolean DEFAULT false, - admin boolean DEFAULT false NOT NULL -); - - --- --- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: - --- - -CREATE SEQUENCE public.users_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - --- --- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - --- - -ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id; - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.achievements ALTER COLUMN id SET DEFAULT nextval('public.achievements_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.active_admin_comments ALTER COLUMN id SET DEFAULT nextval('public.active_admin_comments_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.admin_users ALTER COLUMN id SET DEFAULT nextval('public.admin_users_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.file_links ALTER COLUMN id SET DEFAULT nextval('public.file_links_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.friendly_id_slugs ALTER COLUMN id SET DEFAULT nextval('public.friendly_id_slugs_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.genome_gov_papers ALTER COLUMN id SET DEFAULT nextval('public.genome_gov_papers_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.genotypes ALTER COLUMN id SET DEFAULT nextval('public.genotypes_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.homepages ALTER COLUMN id SET DEFAULT nextval('public.homepages_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.mendeley_papers ALTER COLUMN id SET DEFAULT nextval('public.mendeley_papers_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.messages ALTER COLUMN id SET DEFAULT nextval('public.messages_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.open_humans_profiles ALTER COLUMN id SET DEFAULT nextval('public.open_humans_profiles_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.pgp_annotations ALTER COLUMN id SET DEFAULT nextval('public.pgp_annotations_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotype_comments ALTER COLUMN id SET DEFAULT nextval('public.phenotype_comments_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotype_sets ALTER COLUMN id SET DEFAULT nextval('public.phenotype_sets_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotypes ALTER COLUMN id SET DEFAULT nextval('public.phenotypes_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.picture_phenotype_comments ALTER COLUMN id SET DEFAULT nextval('public.picture_phenotype_comments_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.picture_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.picture_phenotypes_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.plos_papers ALTER COLUMN id SET DEFAULT nextval('public.plos_papers_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snp_comments ALTER COLUMN id SET DEFAULT nextval('public.snp_comments_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snpedia_papers ALTER COLUMN id SET DEFAULT nextval('public.snpedia_papers_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snps ALTER COLUMN id SET DEFAULT nextval('public.snps_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_achievements ALTER COLUMN id SET DEFAULT nextval('public.user_achievements_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.user_phenotypes_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_picture_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.user_picture_phenotypes_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass); - - --- --- Name: achievements_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.achievements - ADD CONSTRAINT achievements_pkey PRIMARY KEY (id); - - --- --- Name: admin_notes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.active_admin_comments - ADD CONSTRAINT admin_notes_pkey PRIMARY KEY (id); - - --- --- Name: admin_users_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.admin_users - ADD CONSTRAINT admin_users_pkey PRIMARY KEY (id); - - --- --- Name: file_links_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.file_links - ADD CONSTRAINT file_links_pkey PRIMARY KEY (id); - - --- --- Name: friendly_id_slugs_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.friendly_id_slugs - ADD CONSTRAINT friendly_id_slugs_pkey PRIMARY KEY (id); - - --- --- Name: genome_gov_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.genome_gov_papers - ADD CONSTRAINT genome_gov_papers_pkey PRIMARY KEY (id); - - --- --- Name: genotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.genotypes - ADD CONSTRAINT genotypes_pkey PRIMARY KEY (id); - - --- --- Name: homepages_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.homepages - ADD CONSTRAINT homepages_pkey PRIMARY KEY (id); - - --- --- Name: mendeley_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.mendeley_papers - ADD CONSTRAINT mendeley_papers_pkey PRIMARY KEY (id); - - --- --- Name: messages_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.messages - ADD CONSTRAINT messages_pkey PRIMARY KEY (id); - - --- --- Name: open_humans_profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.open_humans_profiles - ADD CONSTRAINT open_humans_profiles_pkey PRIMARY KEY (id); - - --- --- Name: pgp_annotations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.pgp_annotations - ADD CONSTRAINT pgp_annotations_pkey PRIMARY KEY (id); - - --- --- Name: phenotype_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotype_comments - ADD CONSTRAINT phenotype_comments_pkey PRIMARY KEY (id); - - --- --- Name: phenotype_sets_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotype_sets - ADD CONSTRAINT phenotype_sets_pkey PRIMARY KEY (id); - - --- --- Name: phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotypes - ADD CONSTRAINT phenotypes_pkey PRIMARY KEY (id); - - --- --- Name: picture_phenotype_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.picture_phenotype_comments - ADD CONSTRAINT picture_phenotype_comments_pkey PRIMARY KEY (id); - - --- --- Name: picture_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.picture_phenotypes - ADD CONSTRAINT picture_phenotypes_pkey PRIMARY KEY (id); - - --- --- Name: plos_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.plos_papers - ADD CONSTRAINT plos_papers_pkey PRIMARY KEY (id); - - --- --- Name: snp_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snp_comments - ADD CONSTRAINT snp_comments_pkey PRIMARY KEY (id); - - --- --- Name: snpedia_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snpedia_papers - ADD CONSTRAINT snpedia_papers_pkey PRIMARY KEY (id); - - --- --- Name: snps_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.snps - ADD CONSTRAINT snps_pkey PRIMARY KEY (id); - - --- --- Name: user_achievements_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_achievements - ADD CONSTRAINT user_achievements_pkey PRIMARY KEY (id); - - --- --- Name: user_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_phenotypes - ADD CONSTRAINT user_phenotypes_pkey PRIMARY KEY (id); - - --- --- Name: user_picture_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_picture_phenotypes - ADD CONSTRAINT user_picture_phenotypes_pkey PRIMARY KEY (id); - - --- --- Name: user_snps_new_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_snps - ADD CONSTRAINT user_snps_new_pkey PRIMARY KEY (genotype_id, snp_name); - - --- --- Name: users_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.users - ADD CONSTRAINT users_pkey PRIMARY KEY (id); - - --- --- Name: idx_user_snps_snp_name; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX idx_user_snps_snp_name ON public.user_snps USING btree (snp_name); - - --- --- Name: index_active_admin_comments_on_author_type_and_author_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_active_admin_comments_on_author_type_and_author_id ON public.active_admin_comments USING btree (author_type, author_id); - - --- --- Name: index_active_admin_comments_on_namespace; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_active_admin_comments_on_namespace ON public.active_admin_comments USING btree (namespace); - - --- --- Name: index_admin_notes_on_resource_type_and_resource_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_admin_notes_on_resource_type_and_resource_id ON public.active_admin_comments USING btree (resource_type, resource_id); - - --- --- Name: index_admin_users_on_email; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_admin_users_on_email ON public.admin_users USING btree (email); - - --- --- Name: index_admin_users_on_reset_password_token; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_admin_users_on_reset_password_token ON public.admin_users USING btree (reset_password_token); - - --- --- Name: index_friendly_id_slugs_on_slug_and_sluggable_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_friendly_id_slugs_on_slug_and_sluggable_type ON public.friendly_id_slugs USING btree (slug, sluggable_type); - - --- --- Name: index_friendly_id_slugs_on_sluggable_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_friendly_id_slugs_on_sluggable_id ON public.friendly_id_slugs USING btree (sluggable_id); - - --- --- Name: index_friendly_id_slugs_on_sluggable_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_friendly_id_slugs_on_sluggable_type ON public.friendly_id_slugs USING btree (sluggable_type); - - --- --- Name: index_snp_references_backup_on_paper_id_and_paper_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snp_references_backup_on_paper_id_and_paper_type ON public.snp_references_backup USING btree (paper_id, paper_type); - - --- --- Name: index_snp_references_backup_on_snp_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snp_references_backup_on_snp_id ON public.snp_references_backup USING btree (snp_id); - - --- --- Name: index_snp_references_on_paper_id_and_paper_type; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snp_references_on_paper_id_and_paper_type ON public.snp_references USING btree (paper_id, paper_type); - - --- --- Name: index_snp_references_on_snp_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snp_references_on_snp_id ON public.snp_references USING btree (snp_id); - - --- --- Name: index_snps_chromosome_position; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snps_chromosome_position ON public.snps USING btree (chromosome, "position"); - - --- --- Name: index_snps_on_id; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_snps_on_id ON public.snps USING btree (id); - - --- --- Name: index_snps_on_name; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_snps_on_name ON public.snps USING btree (name); - - --- --- Name: index_snps_ranking; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX index_snps_ranking ON public.snps USING btree (ranking); - - --- --- Name: index_users_on_email; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_users_on_email ON public.users USING btree (email); - - --- --- Name: index_users_on_persistence_token; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX index_users_on_persistence_token ON public.users USING btree (persistence_token); - - --- --- Name: snps_position_idx; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX snps_position_idx ON public.snps USING btree ("position"); - - --- --- Name: user_phenotypes_phenotype_id_idx; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX user_phenotypes_phenotype_id_idx ON public.user_phenotypes USING btree (phenotype_id); - - --- --- Name: user_phenotypes_user_id_idx; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX user_phenotypes_user_id_idx ON public.user_phenotypes USING btree (user_id); - - --- --- Name: genotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.genotypes - ADD CONSTRAINT genotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: homepages_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.homepages - ADD CONSTRAINT homepages_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: phenotype_comments_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.phenotype_comments - ADD CONSTRAINT phenotype_comments_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: picture_phenotype_comments_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.picture_phenotype_comments - ADD CONSTRAINT picture_phenotype_comments_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: user_achievements_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_achievements - ADD CONSTRAINT user_achievements_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: user_phenotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_phenotypes - ADD CONSTRAINT user_phenotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: user_picture_phenotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_picture_phenotypes - ADD CONSTRAINT user_picture_phenotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); - - --- --- Name: user_snps_genotype_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.user_snps - ADD CONSTRAINT user_snps_genotype_id_fk FOREIGN KEY (genotype_id) REFERENCES public.genotypes(id); - - --- --- PostgreSQL database dump complete --- - -SET search_path TO "$user", public; - -INSERT INTO schema_migrations (version) VALUES ('20110608000645'); - -INSERT INTO schema_migrations (version) VALUES ('20110615045458'); - -INSERT INTO schema_migrations (version) VALUES ('20110615173154'); - -INSERT INTO schema_migrations (version) VALUES ('20110616192820'); - -INSERT INTO schema_migrations (version) VALUES ('20110617144145'); - -INSERT INTO schema_migrations (version) VALUES ('20110819233120'); - -INSERT INTO schema_migrations (version) VALUES ('20110820195410'); - -INSERT INTO schema_migrations (version) VALUES ('20110821112909'); - -INSERT INTO schema_migrations (version) VALUES ('20110822071221'); - -INSERT INTO schema_migrations (version) VALUES ('20110822110806'); - -INSERT INTO schema_migrations (version) VALUES ('20110823032055'); - -INSERT INTO schema_migrations (version) VALUES ('20110824164934'); - -INSERT INTO schema_migrations (version) VALUES ('20110830134100'); - -INSERT INTO schema_migrations (version) VALUES ('20110912190409'); - -INSERT INTO schema_migrations (version) VALUES ('20110914100443'); - -INSERT INTO schema_migrations (version) VALUES ('20110914100516'); - -INSERT INTO schema_migrations (version) VALUES ('20110914151105'); - -INSERT INTO schema_migrations (version) VALUES ('20110917193600'); - -INSERT INTO schema_migrations (version) VALUES ('20110926092220'); - -INSERT INTO schema_migrations (version) VALUES ('20110926172905'); - -INSERT INTO schema_migrations (version) VALUES ('20111005210020'); - -INSERT INTO schema_migrations (version) VALUES ('20111006133700'); - -INSERT INTO schema_migrations (version) VALUES ('20111006163700'); - -INSERT INTO schema_migrations (version) VALUES ('20111007141500'); - -INSERT INTO schema_migrations (version) VALUES ('20111007145000'); - -INSERT INTO schema_migrations (version) VALUES ('20111018040633'); - -INSERT INTO schema_migrations (version) VALUES ('20111028190606'); - -INSERT INTO schema_migrations (version) VALUES ('20111028212506'); - -INSERT INTO schema_migrations (version) VALUES ('20111029180506'); - -INSERT INTO schema_migrations (version) VALUES ('20111102033039'); - -INSERT INTO schema_migrations (version) VALUES ('20111212063354'); - -INSERT INTO schema_migrations (version) VALUES ('20120208020405'); - -INSERT INTO schema_migrations (version) VALUES ('20120324143135'); - -INSERT INTO schema_migrations (version) VALUES ('20120509234035'); - -INSERT INTO schema_migrations (version) VALUES ('20120902113435'); - -INSERT INTO schema_migrations (version) VALUES ('20120902174500'); - -INSERT INTO schema_migrations (version) VALUES ('20120902175000'); - -INSERT INTO schema_migrations (version) VALUES ('20120902175500'); - -INSERT INTO schema_migrations (version) VALUES ('20120916211800'); - -INSERT INTO schema_migrations (version) VALUES ('20120916212700'); - -INSERT INTO schema_migrations (version) VALUES ('20121006230458'); - -INSERT INTO schema_migrations (version) VALUES ('20121020153113'); - -INSERT INTO schema_migrations (version) VALUES ('20121023032404'); - -INSERT INTO schema_migrations (version) VALUES ('20121123234958'); - -INSERT INTO schema_migrations (version) VALUES ('20121123235228'); - -INSERT INTO schema_migrations (version) VALUES ('20121124201111'); - -INSERT INTO schema_migrations (version) VALUES ('20121210131554'); - -INSERT INTO schema_migrations (version) VALUES ('20121213120010'); - -INSERT INTO schema_migrations (version) VALUES ('20130124085042'); - -INSERT INTO schema_migrations (version) VALUES ('20130608135719'); - -INSERT INTO schema_migrations (version) VALUES ('20130904010945'); - -INSERT INTO schema_migrations (version) VALUES ('20130904010949'); - -INSERT INTO schema_migrations (version) VALUES ('20130904010950'); - -INSERT INTO schema_migrations (version) VALUES ('20131117101353'); - -INSERT INTO schema_migrations (version) VALUES ('20131130123430'); - -INSERT INTO schema_migrations (version) VALUES ('20140120005457'); - -INSERT INTO schema_migrations (version) VALUES ('20140221060607'); - -INSERT INTO schema_migrations (version) VALUES ('20140509001806'); - -INSERT INTO schema_migrations (version) VALUES ('20140820071334'); - -INSERT INTO schema_migrations (version) VALUES ('20150524081137'); - -INSERT INTO schema_migrations (version) VALUES ('20150916070052'); - -INSERT INTO schema_migrations (version) VALUES ('20151019160643'); - -INSERT INTO schema_migrations (version) VALUES ('20151028130755'); - -INSERT INTO schema_migrations (version) VALUES ('20151119070640'); - -INSERT INTO schema_migrations (version) VALUES ('20160207043305'); - -INSERT INTO schema_migrations (version) VALUES ('20160626121340'); - -INSERT INTO schema_migrations (version) VALUES ('20160806143618'); - -INSERT INTO schema_migrations (version) VALUES ('20161226175703'); - -INSERT INTO schema_migrations (version) VALUES ('20171113104813'); - -INSERT INTO schema_migrations (version) VALUES ('20180118100003'); - -INSERT INTO schema_migrations (version) VALUES ('20180521160808'); - +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.5.11 +-- Dumped by pg_dump version 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: hstore; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public; + + +-- +-- Name: EXTENSION hstore; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs'; + + +-- +-- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public; + + +-- +-- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION pg_stat_statements IS 'track execution statistics of all SQL statements executed'; + + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- Name: find_bad_row(text); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION public.find_bad_row(tablename text) RETURNS tid + LANGUAGE plpgsql + AS $_$ +DECLARE +result tid; +curs REFCURSOR; +row1 RECORD; +row2 RECORD; +tabName TEXT; +count BIGINT := 0; +BEGIN +SELECT reverse(split_part(reverse($1), '.', 1)) INTO tabName; +OPEN curs FOR EXECUTE 'SELECT ctid FROM ' || tableName; +count := 1; +FETCH curs INTO row1; +WHILE row1.ctid IS NOT NULL LOOP +result = row1.ctid; +count := count + 1; +FETCH curs INTO row1; +EXECUTE 'SELECT (each(hstore(' || tabName || '))).* FROM ' +|| tableName || ' WHERE ctid = $1' INTO row2 +USING row1.ctid; +IF count % 100000 = 0 THEN +RAISE NOTICE 'rows processed: %', count; +END IF; +END LOOP; +CLOSE curs; +RETURN row1.ctid; +EXCEPTION +WHEN OTHERS THEN +RAISE NOTICE 'LAST CTID: %', result; +RAISE NOTICE '%: %', SQLSTATE, SQLERRM; +RETURN result; +END +$_$; + + +-- +-- Name: upsert_user_snps(integer); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION public.upsert_user_snps(current_genotype_id integer) RETURNS void + LANGUAGE plpgsql + AS $$ + DECLARE + temp_table_name VARCHAR := CONCAT('user_snps_temp_', current_genotype_id::varchar); + query VARCHAR := FORMAT('SELECT snp_name, local_genotype from %s', temp_table_name); + temp_record RECORD; + BEGIN + FOR temp_record IN EXECUTE(query) LOOP + BEGIN + INSERT INTO user_snps (snp_name, genotype_id, local_genotype) + VALUES (temp_record.snp_name, + current_genotype_id, + temp_record.local_genotype); + EXCEPTION WHEN unique_violation THEN + UPDATE user_snps + SET local_genotype = temp_record.local_genotype + WHERE snp_name = temp_record.snp_name + AND user_snps.genotype_id = current_genotype_id; + END; + END LOOP; + END; + $$; + + +SET default_tablespace = ''; + +-- +-- Name: achievements; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.achievements ( + id integer NOT NULL, + award text, + short_name character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: achievements_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.achievements_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: achievements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.achievements_id_seq OWNED BY public.achievements.id; + + +-- +-- Name: active_admin_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.active_admin_comments ( + id integer NOT NULL, + resource_id character varying(255) NOT NULL, + resource_type character varying(255) NOT NULL, + author_id integer, + author_type character varying(255), + body text, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + namespace character varying(255) +); + + +-- +-- Name: active_admin_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.active_admin_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: active_admin_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.active_admin_comments_id_seq OWNED BY public.active_admin_comments.id; + + +-- +-- Name: admin_users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.admin_users ( + id integer NOT NULL, + email character varying(255) DEFAULT ''::character varying NOT NULL, + encrypted_password character varying(255) DEFAULT ''::character varying NOT NULL, + reset_password_token character varying(255), + reset_password_sent_at timestamp without time zone, + remember_created_at timestamp without time zone, + sign_in_count integer DEFAULT 0, + current_sign_in_at timestamp without time zone, + last_sign_in_at timestamp without time zone, + current_sign_in_ip character varying(255), + last_sign_in_ip character varying(255), + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL +); + + +-- +-- Name: admin_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.admin_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: admin_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.admin_users_id_seq OWNED BY public.admin_users.id; + + +-- +-- Name: file_links; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.file_links ( + id integer NOT NULL, + description text, + url text, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: file_links_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.file_links_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: file_links_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.file_links_id_seq OWNED BY public.file_links.id; + + +-- +-- Name: friendly_id_slugs; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.friendly_id_slugs ( + id integer NOT NULL, + slug character varying(255) NOT NULL, + sluggable_id integer NOT NULL, + sluggable_type character varying(40), + created_at timestamp without time zone +); + + +-- +-- Name: friendly_id_slugs_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.friendly_id_slugs_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: friendly_id_slugs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.friendly_id_slugs_id_seq OWNED BY public.friendly_id_slugs.id; + + +-- +-- Name: genome_gov_papers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.genome_gov_papers ( + id integer NOT NULL, + first_author text, + title text, + pubmed_link text, + pub_date text, + journal text, + trait text, + pvalue double precision, + pvalue_description text, + confidence_interval text, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: genome_gov_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.genome_gov_papers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: genome_gov_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.genome_gov_papers_id_seq OWNED BY public.genome_gov_papers.id; + + +-- +-- Name: genotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.genotypes ( + id integer NOT NULL, + filetype character varying(255) DEFAULT '23andme'::character varying, + user_id integer NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone, + md5sum character varying(255), + genotype_file_name character varying(255), + genotype_content_type character varying(255), + genotype_file_size integer, + genotype_updated_at timestamp without time zone +); + + +-- +-- Name: genotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.genotypes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: genotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.genotypes_id_seq OWNED BY public.genotypes.id; + + +-- +-- Name: homepages; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.homepages ( + id integer NOT NULL, + url text, + description text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + user_id integer +); + + +-- +-- Name: homepages_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.homepages_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: homepages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.homepages_id_seq OWNED BY public.homepages.id; + + +-- +-- Name: mendeley_papers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.mendeley_papers ( + id integer NOT NULL, + first_author text, + title text, + mendeley_url text, + doi text, + pub_year integer, + uuid character varying(255), + open_access boolean, + reader integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: mendeley_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.mendeley_papers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: mendeley_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.mendeley_papers_id_seq OWNED BY public.mendeley_papers.id; + + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.messages ( + id integer NOT NULL, + subject text, + user_id integer, + body text, + sent boolean, + user_has_seen boolean, + from_id integer, + to_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + encrypted_body text, + encrypted_body_iv character varying, + encrypted_subject text, + encrypted_subject_iv character varying +); + + +-- +-- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.messages_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.messages_id_seq OWNED BY public.messages.id; + + +-- +-- Name: open_humans_profiles; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.open_humans_profiles ( + id integer NOT NULL, + open_humans_user_id character varying, + project_member_id character varying, + user_id integer, + access_token character varying, + refresh_token character varying, + expires_in timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: open_humans_profiles_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.open_humans_profiles_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: open_humans_profiles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.open_humans_profiles_id_seq OWNED BY public.open_humans_profiles.id; + + +-- +-- Name: pgp_annotations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.pgp_annotations ( + id integer NOT NULL, + gene text, + qualified_impact text, + inheritance text, + summary text, + trait text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + snp_id integer +); + + +-- +-- Name: pgp_annotations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.pgp_annotations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: pgp_annotations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.pgp_annotations_id_seq OWNED BY public.pgp_annotations.id; + + +-- +-- Name: phenotype_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.phenotype_comments ( + id integer NOT NULL, + comment_text text, + subject text, + user_id integer, + phenotype_id integer, + reply_to_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: phenotype_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.phenotype_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: phenotype_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.phenotype_comments_id_seq OWNED BY public.phenotype_comments.id; + + +-- +-- Name: phenotype_sets; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.phenotype_sets ( + id integer NOT NULL, + user_id integer, + title character varying(255), + description text, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: phenotype_sets_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.phenotype_sets_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: phenotype_sets_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.phenotype_sets_id_seq OWNED BY public.phenotype_sets.id; + + +-- +-- Name: phenotype_sets_phenotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.phenotype_sets_phenotypes ( + phenotype_set_id integer, + phenotype_id integer +); + + +-- +-- Name: phenotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.phenotypes ( + id integer NOT NULL, + characteristic character varying(255), + known_phenotypes text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + description text +); + + +-- +-- Name: phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.phenotypes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.phenotypes_id_seq OWNED BY public.phenotypes.id; + + +-- +-- Name: picture_phenotype_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.picture_phenotype_comments ( + id integer NOT NULL, + comment_text text, + subject text, + user_id integer, + picture_phenotype_id integer, + reply_to_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: picture_phenotype_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.picture_phenotype_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: picture_phenotype_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.picture_phenotype_comments_id_seq OWNED BY public.picture_phenotype_comments.id; + + +-- +-- Name: picture_phenotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.picture_phenotypes ( + id integer NOT NULL, + characteristic character varying(255), + description text, + number_of_users integer DEFAULT 0, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: picture_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.picture_phenotypes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: picture_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.picture_phenotypes_id_seq OWNED BY public.picture_phenotypes.id; + + +-- +-- Name: plos_papers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.plos_papers ( + id integer NOT NULL, + first_author text, + title text, + doi text, + pub_date timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone, + reader integer +); + + +-- +-- Name: plos_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.plos_papers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: plos_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.plos_papers_id_seq OWNED BY public.plos_papers.id; + + +-- +-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.schema_migrations ( + version character varying(255) NOT NULL +); + + +-- +-- Name: snp_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.snp_comments ( + id integer NOT NULL, + comment_text text, + subject text, + user_id integer, + snp_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + reply_to_id integer +); + + +-- +-- Name: snp_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.snp_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: snp_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.snp_comments_id_seq OWNED BY public.snp_comments.id; + + +-- +-- Name: snp_references; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.snp_references ( + snp_id integer, + paper_id integer, + paper_type character varying(255) +); + + +-- +-- Name: snp_references_backup; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.snp_references_backup ( + snp_id integer NOT NULL, + paper_id integer NOT NULL, + paper_type character varying(255) NOT NULL +); + + +-- +-- Name: snpedia_papers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.snpedia_papers ( + id integer NOT NULL, + url character varying(255), + summary text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + revision integer DEFAULT 0 +); + + +-- +-- Name: snpedia_papers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.snpedia_papers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: snpedia_papers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.snpedia_papers_id_seq OWNED BY public.snpedia_papers.id; + + +-- +-- Name: snps; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.snps ( + id integer NOT NULL, + name character varying(255), + "position" character varying(255), + chromosome character varying(255), + genotype_frequency character varying(255) DEFAULT '--- {} +'::character varying, + allele_frequency character varying(255) DEFAULT '--- +A: 0 +T: 0 +G: 0 +C: 0 +'::character varying, + ranking integer DEFAULT 0, + number_of_users integer DEFAULT 0, + mendeley_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459467'::timestamp without time zone, + plos_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459582'::timestamp without time zone, + snpedia_updated timestamp without time zone DEFAULT '2011-08-24 03:44:32.459627'::timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone, + user_snps_count integer +) +WITH (autovacuum_enabled='false', toast.autovacuum_enabled='false'); + + +-- +-- Name: snps_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.snps_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: snps_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.snps_id_seq OWNED BY public.snps.id; + + +-- +-- Name: user_achievements; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_achievements ( + id integer NOT NULL, + user_id integer, + achievement_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: user_achievements_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.user_achievements_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_achievements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.user_achievements_id_seq OWNED BY public.user_achievements.id; + + +-- +-- Name: user_phenotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_phenotypes ( + id integer NOT NULL, + user_id integer, + phenotype_id integer, + variation character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: user_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.user_phenotypes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.user_phenotypes_id_seq OWNED BY public.user_phenotypes.id; + + +-- +-- Name: user_picture_phenotypes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_picture_phenotypes ( + id integer NOT NULL, + user_id integer, + picture_phenotype_id integer, + variation character varying(255), + phenotype_picture_file_name character varying(255), + phenotype_picture_content_type character varying(255), + phenotype_picture_file_size integer, + phenotype_picture_updated_at timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: user_picture_phenotypes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.user_picture_phenotypes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_picture_phenotypes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.user_picture_phenotypes_id_seq OWNED BY public.user_picture_phenotypes.id; + + +-- +-- Name: user_snps; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_snps ( + snp_name character varying(32) NOT NULL, + genotype_id integer NOT NULL, + local_genotype bpchar +) +WITH (autovacuum_enabled='false', toast.autovacuum_enabled='false'); + + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.users ( + id integer NOT NULL, + name character varying(255), + email character varying(255), + password_salt character varying(255), + crypted_password character varying(255), + persistence_token character varying(255), + perishable_token character varying(255), + has_sequence boolean DEFAULT false, + sequence_link character varying(255), + description text, + finished_snp_parsing boolean DEFAULT false, + phenotype_creation_counter integer DEFAULT 0, + created_at timestamp without time zone, + updated_at timestamp without time zone, + avatar_file_name character varying(255), + avatar_content_type character varying(255), + avatar_file_size integer, + avatar_updated_at timestamp without time zone, + help_one boolean DEFAULT false, + help_two boolean DEFAULT false, + help_three boolean DEFAULT false, + sex character varying(255) DEFAULT 'rather not say'::character varying, + yearofbirth character varying(255) DEFAULT 'rather not say'::character varying, + message_on_message boolean DEFAULT true, + message_on_snp_comment_reply boolean DEFAULT true, + message_on_phenotype_comment_reply boolean DEFAULT true, + message_on_newsletter boolean DEFAULT true, + message_on_new_phenotype boolean DEFAULT false, + admin boolean DEFAULT false NOT NULL +); + + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id; + + +-- +-- Name: achievements id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.achievements ALTER COLUMN id SET DEFAULT nextval('public.achievements_id_seq'::regclass); + + +-- +-- Name: active_admin_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.active_admin_comments ALTER COLUMN id SET DEFAULT nextval('public.active_admin_comments_id_seq'::regclass); + + +-- +-- Name: admin_users id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.admin_users ALTER COLUMN id SET DEFAULT nextval('public.admin_users_id_seq'::regclass); + + +-- +-- Name: file_links id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.file_links ALTER COLUMN id SET DEFAULT nextval('public.file_links_id_seq'::regclass); + + +-- +-- Name: friendly_id_slugs id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.friendly_id_slugs ALTER COLUMN id SET DEFAULT nextval('public.friendly_id_slugs_id_seq'::regclass); + + +-- +-- Name: genome_gov_papers id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.genome_gov_papers ALTER COLUMN id SET DEFAULT nextval('public.genome_gov_papers_id_seq'::regclass); + + +-- +-- Name: genotypes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.genotypes ALTER COLUMN id SET DEFAULT nextval('public.genotypes_id_seq'::regclass); + + +-- +-- Name: homepages id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.homepages ALTER COLUMN id SET DEFAULT nextval('public.homepages_id_seq'::regclass); + + +-- +-- Name: mendeley_papers id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.mendeley_papers ALTER COLUMN id SET DEFAULT nextval('public.mendeley_papers_id_seq'::regclass); + + +-- +-- Name: messages id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.messages ALTER COLUMN id SET DEFAULT nextval('public.messages_id_seq'::regclass); + + +-- +-- Name: open_humans_profiles id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.open_humans_profiles ALTER COLUMN id SET DEFAULT nextval('public.open_humans_profiles_id_seq'::regclass); + + +-- +-- Name: pgp_annotations id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.pgp_annotations ALTER COLUMN id SET DEFAULT nextval('public.pgp_annotations_id_seq'::regclass); + + +-- +-- Name: phenotype_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotype_comments ALTER COLUMN id SET DEFAULT nextval('public.phenotype_comments_id_seq'::regclass); + + +-- +-- Name: phenotype_sets id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotype_sets ALTER COLUMN id SET DEFAULT nextval('public.phenotype_sets_id_seq'::regclass); + + +-- +-- Name: phenotypes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotypes ALTER COLUMN id SET DEFAULT nextval('public.phenotypes_id_seq'::regclass); + + +-- +-- Name: picture_phenotype_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.picture_phenotype_comments ALTER COLUMN id SET DEFAULT nextval('public.picture_phenotype_comments_id_seq'::regclass); + + +-- +-- Name: picture_phenotypes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.picture_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.picture_phenotypes_id_seq'::regclass); + + +-- +-- Name: plos_papers id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.plos_papers ALTER COLUMN id SET DEFAULT nextval('public.plos_papers_id_seq'::regclass); + + +-- +-- Name: snp_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snp_comments ALTER COLUMN id SET DEFAULT nextval('public.snp_comments_id_seq'::regclass); + + +-- +-- Name: snpedia_papers id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snpedia_papers ALTER COLUMN id SET DEFAULT nextval('public.snpedia_papers_id_seq'::regclass); + + +-- +-- Name: snps id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snps ALTER COLUMN id SET DEFAULT nextval('public.snps_id_seq'::regclass); + + +-- +-- Name: user_achievements id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_achievements ALTER COLUMN id SET DEFAULT nextval('public.user_achievements_id_seq'::regclass); + + +-- +-- Name: user_phenotypes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.user_phenotypes_id_seq'::regclass); + + +-- +-- Name: user_picture_phenotypes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_picture_phenotypes ALTER COLUMN id SET DEFAULT nextval('public.user_picture_phenotypes_id_seq'::regclass); + + +-- +-- Name: users id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass); + + +-- +-- Name: achievements achievements_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.achievements + ADD CONSTRAINT achievements_pkey PRIMARY KEY (id); + + +-- +-- Name: active_admin_comments admin_notes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.active_admin_comments + ADD CONSTRAINT admin_notes_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_users admin_users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.admin_users + ADD CONSTRAINT admin_users_pkey PRIMARY KEY (id); + + +-- +-- Name: file_links file_links_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.file_links + ADD CONSTRAINT file_links_pkey PRIMARY KEY (id); + + +-- +-- Name: friendly_id_slugs friendly_id_slugs_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.friendly_id_slugs + ADD CONSTRAINT friendly_id_slugs_pkey PRIMARY KEY (id); + + +-- +-- Name: genome_gov_papers genome_gov_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.genome_gov_papers + ADD CONSTRAINT genome_gov_papers_pkey PRIMARY KEY (id); + + +-- +-- Name: genotypes genotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.genotypes + ADD CONSTRAINT genotypes_pkey PRIMARY KEY (id); + + +-- +-- Name: homepages homepages_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.homepages + ADD CONSTRAINT homepages_pkey PRIMARY KEY (id); + + +-- +-- Name: mendeley_papers mendeley_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.mendeley_papers + ADD CONSTRAINT mendeley_papers_pkey PRIMARY KEY (id); + + +-- +-- Name: messages messages_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_pkey PRIMARY KEY (id); + + +-- +-- Name: open_humans_profiles open_humans_profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.open_humans_profiles + ADD CONSTRAINT open_humans_profiles_pkey PRIMARY KEY (id); + + +-- +-- Name: pgp_annotations pgp_annotations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.pgp_annotations + ADD CONSTRAINT pgp_annotations_pkey PRIMARY KEY (id); + + +-- +-- Name: phenotype_comments phenotype_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotype_comments + ADD CONSTRAINT phenotype_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: phenotype_sets phenotype_sets_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotype_sets + ADD CONSTRAINT phenotype_sets_pkey PRIMARY KEY (id); + + +-- +-- Name: phenotypes phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotypes + ADD CONSTRAINT phenotypes_pkey PRIMARY KEY (id); + + +-- +-- Name: picture_phenotype_comments picture_phenotype_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.picture_phenotype_comments + ADD CONSTRAINT picture_phenotype_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: picture_phenotypes picture_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.picture_phenotypes + ADD CONSTRAINT picture_phenotypes_pkey PRIMARY KEY (id); + + +-- +-- Name: plos_papers plos_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.plos_papers + ADD CONSTRAINT plos_papers_pkey PRIMARY KEY (id); + + +-- +-- Name: snp_comments snp_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snp_comments + ADD CONSTRAINT snp_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: snpedia_papers snpedia_papers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snpedia_papers + ADD CONSTRAINT snpedia_papers_pkey PRIMARY KEY (id); + + +-- +-- Name: snps snps_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.snps + ADD CONSTRAINT snps_pkey PRIMARY KEY (id); + + +-- +-- Name: user_achievements user_achievements_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_achievements + ADD CONSTRAINT user_achievements_pkey PRIMARY KEY (id); + + +-- +-- Name: user_phenotypes user_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_phenotypes + ADD CONSTRAINT user_phenotypes_pkey PRIMARY KEY (id); + + +-- +-- Name: user_picture_phenotypes user_picture_phenotypes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_picture_phenotypes + ADD CONSTRAINT user_picture_phenotypes_pkey PRIMARY KEY (id); + + +-- +-- Name: user_snps user_snps_new_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_snps + ADD CONSTRAINT user_snps_new_pkey PRIMARY KEY (genotype_id, snp_name); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: idx_user_snps_snp_name; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_user_snps_snp_name ON public.user_snps USING btree (snp_name); + + +-- +-- Name: index_active_admin_comments_on_author_type_and_author_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_active_admin_comments_on_author_type_and_author_id ON public.active_admin_comments USING btree (author_type, author_id); + + +-- +-- Name: index_active_admin_comments_on_namespace; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_active_admin_comments_on_namespace ON public.active_admin_comments USING btree (namespace); + + +-- +-- Name: index_admin_notes_on_resource_type_and_resource_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_admin_notes_on_resource_type_and_resource_id ON public.active_admin_comments USING btree (resource_type, resource_id); + + +-- +-- Name: index_admin_users_on_email; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_admin_users_on_email ON public.admin_users USING btree (email); + + +-- +-- Name: index_admin_users_on_reset_password_token; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_admin_users_on_reset_password_token ON public.admin_users USING btree (reset_password_token); + + +-- +-- Name: index_friendly_id_slugs_on_slug_and_sluggable_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_friendly_id_slugs_on_slug_and_sluggable_type ON public.friendly_id_slugs USING btree (slug, sluggable_type); + + +-- +-- Name: index_friendly_id_slugs_on_sluggable_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_friendly_id_slugs_on_sluggable_id ON public.friendly_id_slugs USING btree (sluggable_id); + + +-- +-- Name: index_friendly_id_slugs_on_sluggable_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_friendly_id_slugs_on_sluggable_type ON public.friendly_id_slugs USING btree (sluggable_type); + + +-- +-- Name: index_snp_references_backup_on_paper_id_and_paper_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snp_references_backup_on_paper_id_and_paper_type ON public.snp_references_backup USING btree (paper_id, paper_type); + + +-- +-- Name: index_snp_references_backup_on_snp_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snp_references_backup_on_snp_id ON public.snp_references_backup USING btree (snp_id); + + +-- +-- Name: index_snp_references_on_paper_id_and_paper_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snp_references_on_paper_id_and_paper_type ON public.snp_references USING btree (paper_id, paper_type); + + +-- +-- Name: index_snp_references_on_snp_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snp_references_on_snp_id ON public.snp_references USING btree (snp_id); + + +-- +-- Name: index_snps_chromosome_position; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snps_chromosome_position ON public.snps USING btree (chromosome, "position"); + + +-- +-- Name: index_snps_on_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_snps_on_id ON public.snps USING btree (id); + + +-- +-- Name: index_snps_on_name; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_snps_on_name ON public.snps USING btree (name); + + +-- +-- Name: index_snps_ranking; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_snps_ranking ON public.snps USING btree (ranking); + + +-- +-- Name: index_users_on_email; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_users_on_email ON public.users USING btree (email); + + +-- +-- Name: index_users_on_persistence_token; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_users_on_persistence_token ON public.users USING btree (persistence_token); + + +-- +-- Name: snps_position_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX snps_position_idx ON public.snps USING btree ("position"); + + +-- +-- Name: user_phenotypes_phenotype_id_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX user_phenotypes_phenotype_id_idx ON public.user_phenotypes USING btree (phenotype_id); + + +-- +-- Name: user_phenotypes_user_id_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX user_phenotypes_user_id_idx ON public.user_phenotypes USING btree (user_id); + + +-- +-- Name: genotypes genotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.genotypes + ADD CONSTRAINT genotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: homepages homepages_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.homepages + ADD CONSTRAINT homepages_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: phenotype_comments phenotype_comments_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.phenotype_comments + ADD CONSTRAINT phenotype_comments_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: picture_phenotype_comments picture_phenotype_comments_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.picture_phenotype_comments + ADD CONSTRAINT picture_phenotype_comments_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: user_achievements user_achievements_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_achievements + ADD CONSTRAINT user_achievements_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: user_phenotypes user_phenotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_phenotypes + ADD CONSTRAINT user_phenotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: user_picture_phenotypes user_picture_phenotypes_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_picture_phenotypes + ADD CONSTRAINT user_picture_phenotypes_user_id_fk FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: user_snps user_snps_genotype_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_snps + ADD CONSTRAINT user_snps_genotype_id_fk FOREIGN KEY (genotype_id) REFERENCES public.genotypes(id); + + +-- +-- PostgreSQL database dump complete +-- + +SET search_path TO "$user", public; + +INSERT INTO schema_migrations (version) VALUES ('20110608000645'); + +INSERT INTO schema_migrations (version) VALUES ('20110615045458'); + +INSERT INTO schema_migrations (version) VALUES ('20110615173154'); + +INSERT INTO schema_migrations (version) VALUES ('20110616192820'); + +INSERT INTO schema_migrations (version) VALUES ('20110617144145'); + +INSERT INTO schema_migrations (version) VALUES ('20110819233120'); + +INSERT INTO schema_migrations (version) VALUES ('20110820195410'); + +INSERT INTO schema_migrations (version) VALUES ('20110821112909'); + +INSERT INTO schema_migrations (version) VALUES ('20110822071221'); + +INSERT INTO schema_migrations (version) VALUES ('20110822110806'); + +INSERT INTO schema_migrations (version) VALUES ('20110823032055'); + +INSERT INTO schema_migrations (version) VALUES ('20110824164934'); + +INSERT INTO schema_migrations (version) VALUES ('20110830134100'); + +INSERT INTO schema_migrations (version) VALUES ('20110912190409'); + +INSERT INTO schema_migrations (version) VALUES ('20110914100443'); + +INSERT INTO schema_migrations (version) VALUES ('20110914100516'); + +INSERT INTO schema_migrations (version) VALUES ('20110914151105'); + +INSERT INTO schema_migrations (version) VALUES ('20110917193600'); + +INSERT INTO schema_migrations (version) VALUES ('20110926092220'); + +INSERT INTO schema_migrations (version) VALUES ('20110926172905'); + +INSERT INTO schema_migrations (version) VALUES ('20111005210020'); + +INSERT INTO schema_migrations (version) VALUES ('20111006133700'); + +INSERT INTO schema_migrations (version) VALUES ('20111006163700'); + +INSERT INTO schema_migrations (version) VALUES ('20111007141500'); + +INSERT INTO schema_migrations (version) VALUES ('20111007145000'); + +INSERT INTO schema_migrations (version) VALUES ('20111018040633'); + +INSERT INTO schema_migrations (version) VALUES ('20111028190606'); + +INSERT INTO schema_migrations (version) VALUES ('20111028212506'); + +INSERT INTO schema_migrations (version) VALUES ('20111029180506'); + +INSERT INTO schema_migrations (version) VALUES ('20111102033039'); + +INSERT INTO schema_migrations (version) VALUES ('20111212063354'); + +INSERT INTO schema_migrations (version) VALUES ('20120208020405'); + +INSERT INTO schema_migrations (version) VALUES ('20120324143135'); + +INSERT INTO schema_migrations (version) VALUES ('20120509234035'); + +INSERT INTO schema_migrations (version) VALUES ('20120902113435'); + +INSERT INTO schema_migrations (version) VALUES ('20120902174500'); + +INSERT INTO schema_migrations (version) VALUES ('20120902175000'); + +INSERT INTO schema_migrations (version) VALUES ('20120902175500'); + +INSERT INTO schema_migrations (version) VALUES ('20120916211800'); + +INSERT INTO schema_migrations (version) VALUES ('20120916212700'); + +INSERT INTO schema_migrations (version) VALUES ('20121006230458'); + +INSERT INTO schema_migrations (version) VALUES ('20121020153113'); + +INSERT INTO schema_migrations (version) VALUES ('20121023032404'); + +INSERT INTO schema_migrations (version) VALUES ('20121123234958'); + +INSERT INTO schema_migrations (version) VALUES ('20121123235228'); + +INSERT INTO schema_migrations (version) VALUES ('20121124201111'); + +INSERT INTO schema_migrations (version) VALUES ('20121210131554'); + +INSERT INTO schema_migrations (version) VALUES ('20121213120010'); + +INSERT INTO schema_migrations (version) VALUES ('20130124085042'); + +INSERT INTO schema_migrations (version) VALUES ('20130608135719'); + +INSERT INTO schema_migrations (version) VALUES ('20130904010945'); + +INSERT INTO schema_migrations (version) VALUES ('20130904010949'); + +INSERT INTO schema_migrations (version) VALUES ('20130904010950'); + +INSERT INTO schema_migrations (version) VALUES ('20131117101353'); + +INSERT INTO schema_migrations (version) VALUES ('20131130123430'); + +INSERT INTO schema_migrations (version) VALUES ('20140120005457'); + +INSERT INTO schema_migrations (version) VALUES ('20140221060607'); + +INSERT INTO schema_migrations (version) VALUES ('20140509001806'); + +INSERT INTO schema_migrations (version) VALUES ('20140820071334'); + +INSERT INTO schema_migrations (version) VALUES ('20150524081137'); + +INSERT INTO schema_migrations (version) VALUES ('20150916070052'); + +INSERT INTO schema_migrations (version) VALUES ('20151019160643'); + +INSERT INTO schema_migrations (version) VALUES ('20151028130755'); + +INSERT INTO schema_migrations (version) VALUES ('20151119070640'); + +INSERT INTO schema_migrations (version) VALUES ('20160207043305'); + +INSERT INTO schema_migrations (version) VALUES ('20160626121340'); + +INSERT INTO schema_migrations (version) VALUES ('20160806143618'); + +INSERT INTO schema_migrations (version) VALUES ('20161226175703'); + +INSERT INTO schema_migrations (version) VALUES ('20171113104813'); + +INSERT INTO schema_migrations (version) VALUES ('20180118100003'); + +INSERT INTO schema_migrations (version) VALUES ('20180521160808'); + diff --git a/lib/tasks/dump.rake b/lib/tasks/dump.rake index 43457d1..373c2a8 100644 --- a/lib/tasks/dump.rake +++ b/lib/tasks/dump.rake @@ -2,6 +2,6 @@ namespace :dump do desc 'dump all the data' task full: :environment do - Zipfulldata.perform_async + DataZipperWorker.perform_async end end diff --git a/spec/factories/genotypes.rb b/spec/factories/genotypes.rb index a168cdd..f7f0767 100644 --- a/spec/factories/genotypes.rb +++ b/spec/factories/genotypes.rb @@ -2,7 +2,7 @@ FactoryBot.define do factory :genotype do - genotype_file_name { 'foo.txt' } + genotype { File.new(Rails.root.join('spec', 'fixtures', 'files', 'genotype.txt')) } user end end diff --git a/spec/factories/open_humans_profiles.rb b/spec/factories/open_humans_profiles.rb new file mode 100644 index 0000000..6350943 --- /dev/null +++ b/spec/factories/open_humans_profiles.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :open_humans_profile do + sequence(:open_humans_user_id) { |n| "oh-user-#{n}" } + end +end diff --git a/spec/factories/user_picture_phenotypes.rb b/spec/factories/user_picture_phenotypes.rb index 2c7ee8c..858193d 100644 --- a/spec/factories/user_picture_phenotypes.rb +++ b/spec/factories/user_picture_phenotypes.rb @@ -2,6 +2,7 @@ FactoryBot.define do factory :user_picture_phenotype do + phenotype_picture { File.new(Rails.root.join('spec', 'fixtures', 'files', 'image.png')) } variation { 'pink' } end end diff --git a/spec/fixtures/files/genotype.txt b/spec/fixtures/files/genotype.txt new file mode 100644 index 0000000..a2aa755 --- /dev/null +++ b/spec/fixtures/files/genotype.txt @@ -0,0 +1 @@ +assorted genotype data diff --git a/spec/fixtures/files/image.png b/spec/fixtures/files/image.png new file mode 100644 index 0000000000000000000000000000000000000000..b13988fcdec0aa41f2d4a6406e4df3a0dfbfd06c GIT binary patch literal 198900 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

PcaR;cE#oj10_A`VH; zj1^f?YT+Bel4u-b?}$R69*k$;rUyFlr-Yo}V+fctAUOC===yGkKuKT5$7 z?s_}KE+Yj?=#jPOyY|i8gY&T{(d^Yv@PLz0WOV41iCE$W{&|2UnveY;O42*=1(R^9 zk_0Lq@{h(LnpH{fof03b7tY6$2J{lT;(RQIObF$R#}G{DPW0cwj`u@xDgh-OA(*4k zMM%x<;O0jfaXRNsc7$<<5Rnxn4Ua;n4;wKbpLE{Sa2B5A+zw^bm50j!OJ=`o-(|ic z&u;Z&7yS$6ydQ^UyxX;zwH?fh({~sJP_+ihzAy?F{-AqkIGd$G&R*TZ)oS(DZR{J= zqsXf`Ief&R<(MB?qaEd}35wpQbS5ruGc&^?MkMZNdIPt&V@(2IR*KQU@b_4^YW zFc@wvKGw_&RRX2~b;z1XFbdqni#*mof50}~Po z_aK=&s&mq$(&=IYJO*8wDEI@HgpwCQ#<*fEC+g7L#KzD7tL6w7+)15c(iHhYG){Te z1J|&-cy!*XdF}ybZ_$1?<2I>0$S`X;ionvM21UCJpT^@s;?lMT7bdPjJ5%I-r)tB< z&o~Q@64fk#cbNX2v2WNM+}C3*9U^B@=3;|{6QxJottA62nbpI-0#=4)gemk@!JiTN zIoeV|FZLb<(;%Po$^ex5nlOFnxlPRO0e3uY|LTMtEiEH6juoWGit5 zZQn#Yo!*^pkKbx-3(cCQH`YPhUe{%bqcW?HeNAiVx24szaOcMw4KWp*;xn_-d&&y< zYs~^OO)d zrZw>S3C@95rPFHgy!QoEUP-Fue5pg3SZhDZ$6|Cs=}z$ep!zHkrgJH=Jr& z=$bSEb>`7c$(ANN_MxF^pQ>nM^Ea3th$y{_G<^emrCrl(oQZ8~V%rnjwry+2HYT=h z+qP{^Z0qECzw7*hef7Rq*Xq?(T}{XNi3!tit19C-O^>q*J{HK(Mok(VtrH(LPPw4(w-=GL`}5mab{p9prH7)*hlx4SR^CD>4h?K*Tbww%@^D7{?3 zb?d}eDUVnm>blzKGUdEAllqIo_PRZA*YP*riIGVxA2qVc(r#Dnrc9{eP!8IGaRABx z*8(601Fnie6@a{xeDO106{RTtdvI5K(@*6U9@n5Rr|EFyR0Oq#)zdk3r!F@NGh{EE zkrh4p1da)zT6R49m52jtP&qTKpk~@RKq&B{>u`kehVwTi*K)6!!R-Yy4)Kz$jRjo3 zOj6Eqz|Ep{WG0s81O_O`&EKxcrJfqUAj8-*8=DLE?<#H9ZI$m%PfTZOx3#9ouZ3tu zX>Y1oKQ80gsY}cZJI~ohWIQ(NA5GA51W@$g{b?DSVHNvT_6FxaJ77#TQj-O)gC^bKakn`UT^rf1GksRTsX=n28M z{ka&#Y7UIL??UDnZ=-?Fb<;&Y7S+x=@dq1y2_J2zK~p2gH&g7 zOxMnf8}Zx*xX-Bfgb&&;{gu$JSdp^%cXS2B;DC;K`LQuq%`H}}3$|AsM>u|~iQK~K z%rOk3Jh(myoi^?bwE+iCSDwV;E-VG;cHhq+_5X!(N#1MtuPa3(DIPK|6?JQtm0Fs? zmQ&=}c5Zs3s5tTv>OEfReRhD9q|^pGhLJU6ZHyrwU8DyK+t*Yx=n)fF%xZIqPTYBK z`I&Y0Cm=h_Ji!8|;o|%jik!dyc-o9@Jy9Ljn4!JhVIQujlYJq92#axHo#)+9)(N_ zq5@9vQ|F<@$axPT(!!j--xR!P{{yQ9b^K(t0jQ%JbjVG#MAm8SPy(G8MSRSe%?5cx zg~0rP>~tGpM1LsJuyiwOy*ZQzfaLJgB6VP7)5@BHKx_yOoqz5^JNAs--w!8Xsk@dC z;NIY&R_ht1Q(EQAj!=5#&A+f=#}|Q0j{M6HpDH4QTYugkKvO%|vb|q}#_{U)*P`6v z5gaCjM|(610%7dll*#B*S*4KLbf4*e2{)KMmiSaMPdfVG?H@1Mu-B6(4IS|YrH zDBs>d4ZvV|VQc)U6jgtwbk*St-c+*P{{CFE@HvDel#ne62<@*(Ujs|>_wBQTVF{oX zFLkpU3RpK9bHLXSUeh$<%@=t=_0$KyAzMjbwlzLX;`p&^F%#HYdKq~vK=_>Mi8=WD z3qz)U35{VpO++Q?P)PaZ4V5AFg*U8i!ofOZY}51iIHGnWXxD4=qhzMGO(HP%%TE~z zgo7WMdqpbNM3?<0d+nMl?tWWeKze;eqK{W@4Cs6|7FsBfG)El%7hcnJgrBGzAAedf`;m(`6IW$%j*e0;;^~L6ca0Z3B@~UEaT=kwxC$SG#om{${VCs z?sQ|R;c#Nuoi4?BC{-)%4ruCkEHtZQbz8vg(a#qN1dc?Gg`e1fVJd#j!{aI6zi*qZ z#iCPHZQte;iK|CMFwg1g#^Y~y;mYVBqU%21X5iRDsY2tm_SVHTrRgin7v}3OGuk7O zD+H0apk`|uFfJl~QtqV6)&pAI_IH|FAP_n&C(evDdFV&OWnU+Oi-1^ZF-~W*cwt46 zflz0vC~?3Nn*m8w8_hG$$jm#DCb1p!*nPj~M%SC&i2N&6+6l&0?tsfQBL$QKF}kNH zz{EOxd&$O$i;IJ5ie0DCWqbY-3sFfwo!H#;^kFF5HnDEpP&oC*F+po9)3h6htLuzZ z9GR8dYdZ=7Kzf55&fe*5WANyL)v-LX*Tf5_r?h7G#o!_)vvA$}I?&ZmsA_$Js_qs- zy+tR{D9=i3DuIABqsgzr+n8$T?J*K@IUJXQ>2Ce6IQ&7Yf^-rdP<_Ddnjt_8PBN_1 z8{Om&ld?}I{RM}~-jL? zC}|9Lo5uPp0wm2Csy z?ok!v^EVgT>^6?WnNorqt<(D07A&!|8a4|bs%*IuTLp16&gU9@`xpwFNQYWQ5$NlB z2{sWU9@pOJn)t}x1tL(<272dO84OV=Pa@YQKo6dhfTsv0{zrv$W`V0CXnJ_4I{*u} zvgfxLv}Du~0)KVjU(c`7Ay>VhV`g`)sMzRxx98e&3!_zae_EKMKu@a! z>5#7Su4d}2DfI>DO%OycqnPQ{eoBB;Z^FBoaqO;Y9?l_XCy*#s?DryusDk=wsks-b zIGZxMft1rz$!IyoQtUvrM-QLNOQH$p?m)`P+T}!6gY#_)+@+Jl0|M9w+=ZKPDl-Lc zt4La|S!fnM?nM4e3Ed}{C0zVdMMC$eA{f$|_f4AAs2ubVPe2e%tSx1Mj3IuSrcdG8 zKb}MBxeR|(JoY>Q%@|=t{_f;I!>4)0JM~Rq^=7r0S0m;vU)8Dj%>6La+c4dzV_9JJ zMweuANza>AP{c-OQT+CDm=hhS?KVn0l7Q{Y)uk!);Rd%ytOP9x0y&z^iRFD_3ppx- z@#K^Ae^Ub+n&5plzp3`s$IM51vofqbTHE@Jr2MxWT@IHi`6nYz8_|z=#HUT+S2usw zH}#YqkN&S}?@^p0TEnfY}Iu;cM z7h8t!R>IoALK%!7_L4p4%2qaV`lXn4Z_A=O=l_ius~;~p~)xQrkr@f%s!^w!McuH2-lGe9&E8enXfnObdsnz zq8PKB`^NVzUa{)(!jeqTi4xzI=;etW*;~e2opHQ&K8Y@)5$QJVF15iM?b<{48T%jT z(!Uo?rgTThDeie~{=GxBBS)QF>YIX(h8G&-(;_XGSc1n4Sb&yWTw}IVh58Og!WW{G zyJmwGH4xvAuWo@H?{N1*%Bu4v)&h+r*6{u_;}lYza>Z(>Lt)?fq95egr{ zt|P3pg*%G{voh>wbPr5XCPgH7O);4y&aiP%cf6D_n0w9 z=squy&Febn*Tu#lW|u*nA(Tzw7VU81yjBG|jk%#m$;ayn`fi;H5n%( zn`4GHBm|vIMQtF+3pt4E`q~_%7FOW&Qa024+eXEs z+ce}|>_U!Q?!um*1mlfrh%aUms*9)dKyB9Os0>WCG}^Rp`gpL6b!rP#u?*>qM!l;9 zFAqy^9n3w-8%r5>woEapXdcWHd7FEAs9b2h&a>vQ>?*5NR3m2`RO1XJR34!{yM+G( z;LuO(+R~BFK85Sy=vn<8^&j8w*e3i<{1@EIJa=}S?fQ04f{xnc@fJ;NP_hZv`YTz< zE>Tw$t2JKXwisn~fT5gyNebu1+HJiVF56^kck?U37)OLN6xl@oef+K$h(z(cD2bgq zbozdTVflTh6ISLBCCQVQo?K{m8#IOe$jhWtFfzZhf=2~g3;>zOJDIE8SlPlQHz&7< zi;A74e5-W{NEa(lV86YSFCAEA2%5vmr}sddqBEQwUfJ?H2C?z+&zTtfObP^0V^{|U z3CYc04c?0s!Sea12|K=sKny3{_vjh)fOEx3Zo#k*;-8%a2>Yz1(1c^Zw&wAf+hajN zC$Z`3XxH_5;vJDG^*{03wo6cVgfB3k#UP>YmkR)7MjpPT4v#RW>)$p zI6Vros()RtOw807qxM71jz5miD7e<_`;2`3r*z~Ji;EbXFNp7jxM08Fh7Wt3WI6oP zHV$H&>`|pVf=55ggeEu@K%QwWFKBp^3FRD#}Gbwc-)%TmXb({ zlWtd?jC_SN=@}sR_Cv=A>TV-ax&>l$jcj7@N)GWp)McC#Y11NhoaecPhxY4oFNB?B zwq88?hZI+j{JK-{5In*MkPeagqvhRE0C6iLQ($cz*u}Te_Vx6I3z4`Cnbpb0#+7i9 zFI!B~4`(BMNQtwC-p=|eUk&~*>5X=joxtWs7?J`)SAs0RI5T6(7S(u9Da7ykHsRhJ zR&oKf=p=Dc_w~P`c1LR~&gu0ITS3nMc%TlssDsp0yXx2I1-)?@(SrNp>T8&T2F;w# z_ks3}hqwY|0T5M{=x0Xcn|;uV$H-$1dmW>(#mH}hTo0#@%FS0Yw^u+?Bgfb%=B|P7 zUC+xJDk{S_>m==cFAu`?a8Ra5VivWhOk!zEs@=vGA2xLXY|2aUe6-hPem62*J&dVQ z(*kX}%6SFS$3I=g27+=-|%$W|FBNVdWhUy1n%*@$het zT!P{+<8)zgv_u=){z@bE31_KRp6dxEo8*_!(tOnosf0W+8e7s4zWkL2!a!TshS_Y+ zg0}wQ!Ym1;sCb8W*!4E@rvx$b!@3vqIMqH*(p;&F8A+d72esQ8tHn8<-*vFJi;7I6 z{BtV*11)cG8uAea1?wg2HxY+V>0yjbH>krqm9YL^Ir)ZAtqE zZ;sX6LA4QWC@>12F&FPvR=QO#Ro^V-y z)bJhDfex3BE#gRao}$ccu6`Bkokf_?*PEa(1AM&LDFyUKGD4sUcKStaQRwA<15~w! zPb-bCPygbdOM#cLwiUOd3AQbhA1J^kqgmathVIoTt3*+lJ0nwe+5Lxf5)B8|V4CTN z@2~(zFleudBN4(^5^|-`zZr*-3*-jbk}Rae4QZyJGrUtkietB$$T-^o*7f!uLDUZ(vmJV^>)r*aSU!a9qHkU8`Y-ymDL$* z^dR_iFjJ#kEpqT8a!`0{aL_TQgf&VAZpb_Cm7tbI#=f~yJIg~CBuvT$mrauDeMUVp znB{;K2%r(k($AZ#iQYS+;@?L)yf@I$rgcWa2?Ui63&-HDDGmm4`&(Cd6(1|L%W+I; z^gl1)ZeZ15!4oqh`ZUvNLtjaY9E=eZZ9TLCKd+C-HM4sISRY?5T+ijroh?B;)(SVD z=7CQjO?>%Bl&O&?8GDULv%`Di>b!qjGn{e0`nL_n#T`X{Dr~NaX|B}MX4qzM{;?4` zq>*PcC(e1)vS>*(i8H{;)w6wOJ0r3en~?)^S1UqbF+yz%b+n;{w;ArEX^K5o)3NKp zPQ|}8GRP=wCh?53n%1&$!ny=NGD6RxTiA0ai_0`KOgWwUqen%1WJb***azpYn}Al8PkJ%O}v+l~Wzr8V#K zq4|H^7D#;w>+3o0x^>?lqr*CHv=`T9Ht-;5k*SU$b+a)i+pZoE;k_|0q#{s_mWwhY zA6m12FOeom>v(nf(gg=5$@?2azV$y1J|-$l?moEvRNm%n%-??DU`gwgTLRgrZ?9 zz*Y8EI@392;;b?q7lAtLy(jen>)&vm(` zpoEd3z8SD#%Y6JqOI-R|T;$O1kp)}^uU6I8pi}q>_BDp zoKBRv3%v4TK^?B?n6jxc=ICtMGphQ>$QW)ekglX)1y1(tsIFp;*SS6gm}bxZ4QU2( z*0VZn*>|xboHcdJrZR9_49=34S+$ijcbc@OhFZIGI}Zta$S5jOpNkJi@PR+f#fp`S z<%6sF|2i;3GhEl&v_hTHK^JsUmjak8%xbzZThe?TsOvoD!DA!52#4HuD&zOU1_jx_ z^AmdAS{-+DJ3ySu@W$U zZ+@PI8Xd+;bD`kRL{7mOm!rOJ!6GQj#6#9VSbjlQZL_^RwYuqTO-HPxs>d^}K2d1N z(D9OZhdmSi4+V~S%llV2^60;pKf0lJ zaF1EL4O01`z#|jN7o6zzZ4?Vc_RJkD6!OkTr33N&VGJjr##r#)y#D1MQ^kPA&1#uu z$Ye_@60De>Vy7z52Mu^deWG&$0fl2}^qhVpieDCMaNvs=t`eF9{0$Ea5^ZXJisy_n znP^f-Z+?DswZ96sTJab{*@(<_WY^vL*{8cSTZbO0bh7nk4HZDHr)T-UY=c{vpqRvF z!5Bw%s7aruC+Tw|?Ve%5=RFLW&IP zVm4oXy`+Vj^x@Cq2eNtxHj!k1Xkj4-P-gxzfXMTIWt~OO?!fxB@>*v&es=*xn!uhI zudJuOD=Kbh9sb`soF-8Bc7#i63C|qJXI;qo_`kj9^dKk9Icj@qPfmL0=sD+ug$(*x zAPg^1wXPvT;i$Df@aR6D4Oax=4R=d=d5QV07=gr5E^yjUncu6Vx=Uir3|);M6AltX z(knL-N^3`qiR;-2K~i|^ModB~pqQJcCnR#NC;6XdN<>cOJlR`Ukh_~rGCUnB^|Ma# z+I;*pb46ThYWAnY;%pKGLU^S7>W|gLnZTm>fvV?49vo?pcLR}oA*r9~^T4q>`ZtdF zZypOfIS9d2FrV}!|09-};Pn|Nubv{28(WC4AUt1xmW!6Cab6(9hEVb0CiP#BCr9Tm zHXIDa9u=WqIO0kMXN49;phO}`K{3A_lx$4<{}je~w?d}VjhwC8;@_0|b+YFh{5vZY ziLX!OpW8Q=@;lt}EWOt_WL0m#IleC$RtE1>n#OM+BSP$xS2%xfF}?quId_^LoU!oY zF@I4=YwsHesyJbCQCG+tcfp*XzQB24;I#P-Wan(GYtX!@3$KQ^S+Kvo-M3g7s=^%~ zm&nG4`@A^bU~Z%Un{nE5C;%Kb0oYGtnP`ZNl8U%QXPA}9+K`OHjK&;ZK@9= zNzjK80`>Fj_I3HMjqW&fXZd(oU*F-k$BZ*ohUk@=9LDn!k)*q-_4SiV%%jKk_4P+) z+dT18J4~_^6n_MSo(NrqdLGnWyksB5^^>kZlc}q^v^ftEcxGTpQaY-2eq>iS$Jb8u ziNSmH5dW78AeKgL1vy{$HGlm^iJVIq2y~rQmCVk3h?zgnVTW&Z+#^L>G}7)pUO<+` z&MHZ#nW`%a8lA?82Om-}^alhSGIxP(2$FwWtN+W;&x;h)vB^iOfh^C{unvFQ4xj<5 zdB(pW3cB$emp%u?o10rulNo4xnX=nZJ3jB+|8`BHhd&PWcg#duA!KdoU?)^>6Ii}+ zdJTtHfYF7TArf`Ik-2wmQa3uTa-N7hanfDxrzV}-x>lE`TwSdz?H;@76_|9ZGej3K zjV1!fJ?~sf=j{VCF1w_L)6(jO$!r$RK84FJ#}k26N8NhY8T3}DK8zr7^Wt!DP!XFa z(UHO#Kb4r6C&h?u!9p@`5JqWUtOtv?NS<9uL#*_KC>;{b;iaZ=72-qleHYCgCF^V6 zg+G{HI||=UvsQ57=QSY4lE5qGMA3yD-;W{RV{QgR3oCS>3zVqUeei@ll!Qo_Bx|H9 zV*hu?uGIiViXHwPtYbV`t^mdem_nuIgB1&)2X-tUoK@*BaHSb8S6bm&HkCqYT z&p@!QlaYL6r)duK7?sd3^-)`4$cT&{?YXTbMerP{@mpGCb-zu)A1?tJ5y$4)z<5*b zI8T>cb3zs@$loj=^Zk`y7$y?Fu6{qSPYGOXGFAqxcsih?R=y<#a{eph&$%!!0i|R$ zoddYQ-ut!LnaMdbJC8vsgeT06GF5t@494R4;m|kUWX<-8AJYnpR}2qr?L~C+$mJGW z3yPTD0H+dk^v61RNX*@wKt}lK?Pt~Asr{g5IjWvPUJ}nQ1JcI}c^v5O(7K7T>OD8q zdR2>jfVydK8SKAjTpjN6@|H#h&qf8@r2lJhq36X}nE=&pamRc*CRe20LbtaKI)Ci9-;iiX-EE-Ayca5+1I zOjt>_rolte)L9YC2ni8HusQL0HvPg7zFLCQS}t&k{|`s_-{}PV=!z)MVB~LXD~Y@7 z_`;%3+>Xqr*e$d5yZ$XeeUL7L^(Dp@cs7KYU?%v0_W~BZv@yv$J#nHS`C`N}1}j9N za3Omhi0zd8 zEMLvh83qKy>etC9))@A|=)i5(OI;|=uGiCDL|S!P#_fY8*VXM&q?EpZj-w@#P&x~K8<*6b_ia(d;N|R?@YjRs8L2n)pVz&w3N->|DlK_IQ{D}jYN4Tc!Te3L zJEA0nxT+q+`J7-daj!x z?{>|8xFb4rvI-6 z@XR9KZIA|r9SrvRj$bM}7B}6BY$`Mor>+?NYgO;CGo%Rwnc>=(LVqR1*V>a7RyH>V z9rpTuYz4RIY32E4897}cKaD!K`j-%M$r-()G6I{|DWs6r>QVtea0Ix@^&Qein8;9a zTMAIgc$Ya@v6U=)Vyin+&bdMAp0m`5&;b&r7_7kHy^^Yqbx=BaX0St%Ktdubzw8Po zWcild)|gDrk!CMMk(t3EfTt3}g4sbaG^YO-+Y>0rCXnzfo;)xeL)HIY&mt2yFO&3q zv>yjdC1y279T@_*_igOu8>05k&RvpOvdAxqGo9SUt>R{ta~|8H=phj-KZi+-4oVLI~2#jD*{ybli^c zSi6N9V9Jm-PHgy`$x`Fbp4UU5gsf?-opC=yC0Z8#9bx%R08 z{kJYCdxjAE3F;4;67+ru5B|ncAw=O)H{{-N!^3VyIA!v{Z(&~P+&s2nwEkp6lZeKL zDGVlDApmwkLwsxx5P=gmksz~&$P%Z%W71zaMnYjirKxz0t_yB`aD0nWqgV_J-V&Ur znMdOt_cPFllfbN&;@{Bd32dry0F^bEtq4n)N)k2;Ns{$S)gc++I$u@_!S{zKxrDMO z2{bvHfXa2<4;|JM7=2!E+m5NKX{v2e=r2}%7gQh43HIVK=EF0-2`vya?At<#7<$7- zL*%SNIe9#NJmk&S1VV}M`O9x){oAQ_$ApPRxiom|!&86c#ecFwVQn)OWKHb`V@nbUNc!t~NNPjOCzdK{r+?edL6W?ba;^?ao#FL1|x+zQ6jknh_eBkKo zSbU(>;(lrUOmT7_<||T7`Xm|NupuwzYeq_Of_9*s87q^!Zvl40tE$ zw0^h!NTx2hR{1>l47bukLDnPK-^nF)%gwz~sOT@cLE+gB^LX&Lk1Py-ZG{Xvm(K7g zJtfTMD(Iv+>g3%;*u$#Bb%QR;#?l{jBdt}w!K(+pm!c$5_s$@4YJ}jvTJim)fdr7$ zZ4aC}z~{!D41XJPCL2ZoEef(7z-!mc_nEmMDPG_xu*SuCF>oU)>yMwlI%N2^3KeBm z;g}Tp+cFfPbDEQA3Sqd|4wXSf1Fykhf#YiJd7R>3(ID1g>aRveOrBpBM>xC*Bb*s3 zZ1og*Kd7g-fNkhm4hJFb6Wd}6b^6cv17xQV)&upItoIz~9}iM)tYKDu|C|~4-@VVi zg9Ab%O@6ZtzTCCXZdk}5yYoH(o{npNs;PJ&)#wKWld!v1Js{N~w_Z)A%#?TH1xl-r z=`WZ=sD^-VU-%y-;6|*QkOPb3;8MA__<7gM-D@f?9=8`uvHcR@FD$hjUGF2u6SF{t z)iVTUJ)K-&ZOXyHS`8!-GYhcv4(-Vv3oWmX&vNF9brya|=>-r&%8Rk&D7j zn{|+%!Y3I-)h}_}kLaz#TK}U5gvKJVHuy#ts8v?wSssze#R3lR-#1n-$o_ zS{vX_u~BK52=J<`IwOsq`Pfg?-uj!2nBh;|FX9#FnJ3t9QFn8$iD}KMgqRFg5b8}6N%&9ZLDwoptVkM$)qsITW&8(8b`_!4VRcYOx?O>5aXel zAGM12j5E2TF8P(Qv8$SB4zm?pX1Z%Z^c|$Y2Rza%)0r+z02mtw zK_r#9J$Qd{{x-hD8Ed%yn?LKAFPORv3Qfng3!(6(0^;`$=(6_SC!qU0<%HeK$*Xmr z_Vus_L7h;RkFaHX-uZ(Dl~+an1_r2a1pc2?!bA#KV0=WfF~vJN5Ty)#LmPityQh|d z@B&>XLv=6~ScrZVRNmX8;>&9Jk|8>@!n%DkGbZe_Q03T}qg&ITXIAu{qRA@T&*E** zZGXHFBq~(MzOqM8>oX$BLjp0Ol06@O5#0Z#1U%Pg$~he&CkbByL7^|*C(~`u99K&i zr(5Z;k{nvm+MveU2Zj=wJuTmpPy)RT=;kHGak=VwOfPtH1}ZGP#rjQ?$Xy#`fv7xPMB zUgd4uy?{WCw0fA{Wc=U={mp1wFE!lP^m6CXNa>5Mg4Kj8XZ{I)KkgTEXD+Z}=4qbi zN>2cXI)ryq=KN-HK!fI7wV;)~(Eja_(rtBoH7(WMr=>lGY=@~S*G3<28n zYgk`zzqAL7--L5y^NwhArjT&LDF;uot5px^zFaDZpNoQ1XGGIj6UP6PpCe zWul@|Z(sWauYK78o>=^N$4CE8qZ(^VAR4W#W{a(l2ZZM!G8DmBkbFVazRVu<0I4q@ z@LH^gbh-83Bbs#z&M!rh`w3#u4(!pmGUY%2py7`^ZlSr*-O5V-=KRQpesfO3@Q zFm-Xz5rPVu)g^<9`PqUJCis1}|8u(YuPC$n4prkKUx#v-i0e?!FHEeS4R<~e4h=k$ zHQr(v2AvNghuh(ePXo=gjM%Tb!^Zr-_m<*zw;-SOCQ^3Fb? zt8iIf^Q!6UdDlE|ufA3TRmXl8IjCh_g|r?It#kY+PSn$dXV?gMmPmk}z>x%}KrG~6 zg6lk&XbYUp0u}?!Y8eABOGZdixVr<~rE@YG;tvt@avO_dZ2|K;72aD)pOqSFay5#OJ6yQT_`#Zw?NhP6e6n^Sl}t(;^gm)GpF`E4R@$}qM?&(3 zbj2N&t8qqV)5g0KF2ZgSR1~ovy+vLl8t5|TQ7SwHKaiD%@T>sJli8B$wq&p%X@+a7 zOP!(!y-|<6YbR{&u?U=w8iYEAG3(lh!ZxcGQnh^jw;8QA(<=-o4VO+AY;7X~rP@wE zEai7{5{Rn%M0}!R)gI+|97;{=>L48wIYpudvwM_Jp_u+fK$n#~SUh?#MV>x?g0fMV zn4F1jOWl*X%D*|ays*JnbyyQ@VesisFOur5GA@0`n*@GO{ikySqWnu=ADgOy=-d}u zzFM%%ukwYg^B##5e3ZJENM`-82@0*WSAvX*u~JsQqB=chczuPlxx=MuNGLdG``XU! zYKL1hKF2nkUp5QAqwiz2m~-*k{M$V-C>Nzu8vhuTdqmFSPj329Y>v&h0GL#P8o-;g zsj5ATU*rIgXGTC8{jxvicexd~Byf9US3K20k~dd3p2g1BScTYfz^52p!*}yls%M+^ zsvi+#lN9hofy5c{lH9;wG1n$(js^ZE@3U$ofs&80Pjaz|$Y8_fu71VZ@8Tpnr~*lF z%YSdP_Vzs?6HIzfIjEav1hyto9UOs&c<}dRE8g+I9y&+nGYrSa1H$5SVkT+JR`0QY z!QfZJL28{(SG%V9Fyi~E$d-1ZBLbBxWvbpEM&r3_)9FVWOu`Y2b^B5m9)@*K_$X}D zlZX|}m?-QL@vq@o1NMQo7|4qb71eCL)zi#(9?( zomr386P(q&-p1F9(3tcP@9xT$<@L&&^USF8PCgr%d_OHrJo;Lj_&vrbeAA^8hNQ(} zxSc%3!^ouv=iqdL_|Er4rnuW8VaLUvEyDWm!;6z;OMVs$ZN{rSZJL%fTF4dIcu(Hb zm87Tz7(OkeY--a}{}%%bpK3cZJ7IoYHekfu=`ri?kMC4g zD8`8L>5zl8*_h49%BBXfyBX99<+V5OEGi!d?(=&jU^ZBz!y3YI=&?ovj`Wr%sM0lO z<$St@sE%U7^5{3M->^~+AF0-y@#-tWk7RKBX}UwU#bof~!lY+x<63P6K)AXTm$;rIQqYa|@F?ns+fwzE8`|JydA-ha z;H{&;M`E+ZFjNKLZJiGOF^f%-+x6iIc^JPunh_;K=?;CYkv;vM?Y0Z}94GufSp5lW z(0yGl4PrW4fwMMwI=6e;R?UN;+Gm)0{JoivF9P@7t}cd}LEb&p`W)1Id!I2#O>wg` zc0UiC>sb+~-M|Gmujb2WbmRj%=yrowN-<1HWDV+^ccH4!CA&6ZI)Vq&UvWB2yJR?$ zFCX$*MZF4`Ci*k~GiYIpxN6yWs0EuMPkzLYm7SE^y#!6g&ron(-j1_#@0XCz-Oz5hM}XKNC!Oh8xP_9-TnLa1QHnCYH9@N zLm_y@VT+@6l^2hQ?|>ge|DWRIO#d63f$Y7G`#9S(3@JllId4R`IK5n;>R0xv+ak`7 zo57Q)w=Dz+_k$8-POz2s&Eg@COLp6GQ96A4pOq9d*-RH!yx6J*cFW^~DVHV0s3bYya#EGy6?#Qpiiz+wjUF^)!@eP;>mO)-YR+ypW~TIja4p_r z4Rrq15LA3jLu(Xnn-MY4PQUmZMNzHKJm{Lw6rl4T&2}wj`}FT|a>rk>yo)tz_MJ;! zzKz00#UrLNS1hn9JW7`QGc4bI62Jk)g}>YCW{|a*36CDYrKGm|X`1>)qTgMY_4dHkD6kY%85d4fe!kW{(qNwGH_pvh;b+{J$$kPsFXbn9J1&QRNiwY^xr z4ff7Nz%s54$tkYARy=DDD!VE zkTlC|C4Uar2DWY`CjWAD@;eq%b`y)F?MqdiLB(GuEpYv+FJbFz75f4k;kqx+oe-Or z)IWMBqOKKsAB6#|+a4y&)_Pyu?LEc&U_Lvi1RhTN^=1G2GdcmYFug2IJ_Mx}8J8YO)vu7rHi zj!di9J&%9bI9ai>*t>YVn}r6|s!?$VR+oHtsMYfSi;!NkZ4!eRK6e>H$BiR)Z>(eS z%YKw+4-Fn+jMwl&QP>;Fg*$%uA5CORqsYgRu-i%zV;^|z&2(i>%?_XeHnYYe)tGmP zx1V!D>|+O%CPdo{eJTa*lZ+a)vPAn^QOe54Ue&8pl(}*HFVNn^uRF=YWjbDi&Gm^* z7?E&0DL>Z@#AldCW_5^o$RDBEQhoPYn$GNxyPgm&I)~^*Pl&9>KeJn4=+P!#pDr#sy^S=GJ@Vzfgg^Oi_{h&#P6L`OBhN&BUN#7g-g09p zG$(G<&bQTkUf)9COPSxDjK&Hf_ZZv6k13Tr3wYNC^z8*V*d6`B6XTNe!{LKw)hZ(^ zBxZ{Zt-FJ);)+^dv%HF@x;T*~@iq;Ew;diScH=Q-m;2Sa72``$q$+gnT50(0bbmt0 z?Uts?%oYU1@q;k=fF)FoZ8ACNt&LFPP1u42n8Z{zWLZ#d+b)VwIsu(rR?1E+Pt>Zz zr&kBce%i1^ZAm#;^S0E<{DgEcCh!8WZH8d5OFfttI7^Wwfh0Pn=(vr$To8eM0^Wel zx|ou4#zImWcfc#-d=B8k4DQ=2 zg{e8@sk<~qHA9q|R;b$1Nw6%}+`vHaBMR=vVtI$d#qq_p5z}ZMvMEgIutp@DRC;>K zEEuYIb3)8Q_E`W2!yPi~z!2`GgAWXrO&aw*nD5fB{-`Btn|JDDkT7qSTkRIvNnJ^)c9$2=DGtw zkh-v)#ozFo{(c}eG%Q^(hMH+9F(RYBvv&GrKH>^(qFU~zsI6N2bfJ+zVQ-D-}XScZMiMUoc zVY3$Y-9pfh_hs#C_#UjKcbg*3#P#?Bn3F_&BRAVJXpsQcB)XKgSdmkT`Gp0Z8W#;F zBeD~_vK<=kZEhIk4yV>ZpLYcjG@7S%S(Ep^UJAb2QS$_-W`NKPKLb5j86Tnge-9_L z_bUTnn(KNrr=CsLU`8`dDIPNfJ>C zDO$z@aSaP4>=`o}#7WxTfM%6606Z^erj5aq+UkiJ&Ph(zm;2k=+YxNgL5oEAk%pLg=rQXezoMYFFtb$Nj6DLgNT*8*cZn+ExnJObrmbu1#8YLtMuw?#T}QS>{x~z zLE=>5dwoc5y+~@INcDVVxRb;87z!2*0UoS2i7bsEFE|1yw}87xtjXg`T$DR`5TUs* z$h^6eiJt;;`La|B(A7{+li$LIT0;ZtfL4Lz8u&G@>38&o|=Dh3j*hDx7*pse_i7Sc)Uu9i2__InqxVGmwSZk*&5BCVcL zBMnKEV+w>(8LjNg4pO_hsHg=g<0-cIDljkpno^L4KhhQe0KXYX$hk_5;P2K;(9XgN z6&Dp%+VPy|w2^Rdi%c0G8C4Yil&y+y1&}CvZxXA@DcF&a5jfZ@)rOKpMBr%YT4{8X zg2id@Jr3F~B+eP^csjF+R;>&NkH}uuA&Fd>-$iC$VQ@F@jq)h%cbqqOFY zqas_{x(c9(N^M6?OqNTvw&laxxQ|n|+CdQ?mpoO0BuN$jVw4DUUJ?%0`XbJxYInVI zB&Z=7Tit-ctRv+zR0KM)#w;KE??7s_O{Qe!b{nNKUBhgTlHuV*Yj8Rce8mA|N{MTE z{~Pr7-C#^+E;(pl&+=-}8HlCr|4P-rxHE$XfB*5_H?p;*k7>M!fG-d%?pU-H&DA)i zLLV$yP=3?hBfQlesul|I91592DGyfGxc5lDEILC`oCre9va-6Lc#R{GtwcoJS+hoP zN&KW)!$kiG_D(ls(;CZ-J-Ex`yU2-&W+8>}E$^)b_gf4lQeD^;BepXmO3jK@D;kB+Y1Hqz%n6I z-W~pr2mV!8katV&HUc%%Km^v6|A&Fbi|LMgS(8iqRpOd&Dv84evgRQK#wL9i`RC|t zqSG)a6ZB_7k>P2_k!D$2ei9JoEyN$$*rm&-!@{J8{Vu1;sb58yz0}hdk@NU;C>l_j z?ZdxP8q?m2D%?&lXYn*R6qFH5R?1XD4lq|2NeR?&+$t{!Aj>0Z;xre>^7>pxVyFlu zH*{wzt>@IdrQLcSdCyYSx5^bR!FcbOjNu;t?De$Z23KIHaKdwhl+vn7n%)i)L-+lSZK4OILOm9ChtF%0X`ZO$Lj{la-&2r*2keNwA{5pmHpAX9+ zIolRJcBp9D&U$SN*TDdS#x}4}wpFz-4oe^@qaJfKlkSTVE{~&<$r1L2h!b5SSC(Dm zs9HYNj70qf?kRhNygmX`0XEf^(7a>pSaNO-*Y>E;D~x0^M+Dw+qB7%-LbO$QUhjhu zub=U4^c2GK`+qhv8!WsjWZ{@P!lly+Qgx(!b#o1+yGa|$GxRX(hDB4JoTomolYdGjjj=x_|D|rH2UE~L}K*U4wRa-OgM5u(p^c2U+m|>qbGngyo&j@ z(Y1=84>2+t&GSx}!1*0J{{OE9xY;UiQUMvv?peyrd;Wg_;y@k0wtN8R&n`sgltk&+ z@$!^?ZHkV%+CCDLA96WGa#6llamrCHA_$3bUgw$dN4Vtq?1y3|bq>iJVT=3$r|3Lge@^!cVjKA}B81|-i zPH+fx?D-NOpGnc~p{6@pVC7Z8zU?xHA;?iv@+qVRsJ7uhf3sT2NdD>Xm!c;u*kuQ5RLNY8~x#N4}vaB?R zR_Q&@9qQ)@DyBA3;#<4PP4ksQbmiQ-J;N!hCP`x7AT0;hJcl?t50`S0oz{5!=xMt# zoBX&#?_B%nU;(_*k@I3A*W1FhL2~TBZRjO)`)dxag!Vr<#LLY{z>5l2-2u=`PmX#s zYs{f-5*}JmG!S6gI{A06P6JpP`$enB*1$f5>7mNen|NI;E`WHF0ai;O%mi`fjMS<) zbbZ$iT$|#6HbbrzdSRJ6w$HtG>@D4a*PPT1+P(i&9<*c+?b{E)(rXFR&UZO??%esu z<08Q4_GOil)&bVXl7Ul6X~u#@PguBKwcX32$QlO_8Ihv7>>_W;S@u(1{pBDsoRBt;| z;l59Y_xt+w1&G_*Om#Sa&$b20xAIdcFMei-$pv_R{`_%X;@Wg5{Q7DGZf)TPnV0be z5t5=z$?fU=u<#$zy8u?b-eJlgokKA3&u@r(i(Qr85PMI0c#r#fkdlsW;Pzo8nlK^R z=mh4cI&gQ?7;2mc@NDlV6ZDSJ>ILy5Zloj6i;M#BK2iU>mbC`3H1>;zRC9KY2FSay zR*#zpWiT%nig&F-IuV3f9}3{y%nrFtMN@A(yq|}-8z|N9;?%9?w=Xf=q0^V0I$vP5 z>?UWWLW$q1X#j;o(!ZU5L~Y&({jKXQkDWi z8~$OdFd{8t)ky|w15irtRLx z<@VRc@>5eebJizRD@%#`VA%gFKb4Qh@jSYvPRp#o^_aUMpiWCO@$3LR zVLRK8mA#D}3!UUH&o?oe0p#d}-`IV_d)@_E(qO zE>`S7u_r2BJg~qmvL>p8X6Tm>iDnU)^GzyEo7BhcGmq(EXPtqw!Y85PIz}MyOAS^O z;|zKE(N3pDVI}1sZvI9j2CtJUPc1oA`~y~4kdQTCy%=h5&OQjHH}#luz}iL2leVt4 zlhh(Lqsr1_OY5lNc?~sSd6u5`l{n`wrGQmITQ$+2|ZgtAm_C>RSt2ezOP zu~bWVE846v0y3eYv?v3jzLg!G2Cy{ti-rjNggWUa%OLk{395?quxK3tA#3n`W^KPE z1g2kUh$Zdp3c%;<9Bx7pk?JLPgYCToaKMpCRf5xQ9C`AvziAu%w8TaIyfBZ3%EXY> zRRvfsr#Y|!6W6jIlumihf|x9OUFr9$JgjnY34@z)O0|at$`GsN%a>ba+d^R8Ufmyn z#gLI1Wq=iKx?I(VwZzdcbX9;g$@&Lits+~tD`(dHo(QVlT}on9g#vCNQKgd8&usRW zUxSJ=Uv$+hh#Y*s3f`L9JTvO>(tXv?hLG_<5p-E<%%Js^?^$oz-1Qqh&>(u}Vd&ax zF?ecfPZNhNF2QV7B&}tE<%BEUu~^ukJ0NPikz0kuI6NmH4 zy_-J}nZ0rmqT}0eC;~<_EX7|9U}@|Z?I(<*`y->mo)5>n5k1C47aqiq1^aM~3k!)) z)#9uK7@~8+$=U5s9lX0m+MC%r?HGnOkd=g$!wa!3RWcQKG1j<(pNY#sbz6 zx%!NRWY0>~ru#fIF$9-}6NG73cGcHc=V5U@tliEK_&s5@$@BB+Di5n$Ohv#V!@VKv zQR#&f*31lU>!S5p2B#Mp3|bU0a^%LYe{3lysX>gRCf7SyLJKV5Ahi3MVkwI+B>!ne`*+29aZjE`cx1Nx+i3H`0N82XYg6tqun%0n8GpQ7e zz7(netHyvV2)-#4G7OXRZbre%`Z^vJ0PC`P59{V+u}|U`EiJZ>mR2j+;m-#wI@}dH z@77W)R{5O*IBiV#^@Jt5rAsWAy?st|(;D7=$1h@R<+FVDVBXSA{$3H+-U3ew`P)a~ zJfj+3bdg7sXPSR)gU4u^AQC&S)xw>1%q7$AS|gvBdLHv}i@U1L8@h39C@8Gj}<+6{SfBXF>j%#d@fEOL}rc z$DKhO`u9zCDOl^Vl{&3~=V7@V=@Y*C?0(j9G3@wU5^_+F$m>hO{yeTq?zlH2_NSZf zr6*%?b6GZw@SxmNr-I=-U}gU*3^#Ho+|po1MC2lzNkZ4vty8Gnib&yU)uR)_AiFEK z>VVRiTF=1!Kn$w*j5+!7Q_G+MXwRGque^Kj<}*70)q$?~^r=Yu7n1#Dx0ZyXvQBuzHHZGUApIry6GQ2r2oZ!rkX>E zPJ@te@iDBrl~k+#1<4Wg6cCGU0@G)LPV;MXWl};XG*t7S{bf!zlp{ zb}`md-IRB_6J~%y3~_r(N6_vB3T0588^;?r_!?#QM;eO_&JaGggwm>io0Sq^vVf(O z%$j=R`0=rqe8A`8FiQKeU?MR;e*E~2SI?BNAo<6VkRkKE!CS>WQGL2M$Rx!NKTc>T zQzq2ZBL=<1T)+~NdkGM(bZozD*^%cm*zQ7z)>%+0`<%Mbcx+!ch`O}2{6w(`1!c6p z!n2ONY)-+KP`HD+U)YP6?y%q_O-9d`3s==yh&~Cs1F1;8L z${C}G*i)YnlY)@=H|y-fONo=y8qZ-hW}8t>*bJCB;9xqMFu@Tq%)E+MoKmvcJL~-6 zkwgPnmCo3iNLte|MG@{J4%x`O_^@r$7X08>CMyT56&!Dhn6O^Rv)+gjm%VwHLGFPs zm{*s)6M^lklXjT9VP6I`>wzQ+7~)?HuwW6|ETKd&2@;LgaI;g{))!(3J3Ku3m68Rl zTST3M;Bh>X#h!3cIQu^cx=&b~5sAjB>0pvidBL#&L0R#$Lc|*D=gqyxer>>{P&1IJ zT0~0LrO_dJeZ}H&rGT|R7-o)FIU>o;yg{sF$7LP5W7_N!|0hiP4p>9ORe+`c+7^KA zA_`}RN!4T5bWPj=#H#O7NWgY&IrASMu!!*8ZTIK3>Q%w3vGI384)^F`jC|3eueS## zjJStgoAf%XGmq^rLMuID*g6P`PjZD#*||OHE*3|B!dj}N%_Q@gSw|^u_W#rSRKH<} zyMdUz2!vx@_aW+8BCR{{jwoaWCh%H2`;OAPeHG+mk$blzz~{s@dQAgZmCYqw#kS6~$}0|B+4!@h z9I)6{-~M@)Wtk14PR6w1xhT=Vl2Qb$dfrUAS4Ra{k*5 zrrI;a_b-4YrGV8Y53)8BRgS02Ij_<#aRse%2=V*qb+J53xMCtSQKk1c?B(cM+Q*^2 zs=$(J9krP#DogOXQ(i9lGhISzp!fEUSvxEYM1{9f9J~Wtqxxupo}T|DpZ?evmF85r z=+n6+4s#HX76~$&?%1I<+&wW|;@S@n;+He0onkj0f>QszPF^o~%QJjW~hC&yI#QMeql||xci<0*xOuR&gpDjbf_3p4P$Gp3`cPwqaWsIIxb-cfcaVbAwTKh-L81S(e8x8_JK4 zjvIGhUIu3V?=$N7ssO85!$(#LvrK2jAG%hyQlj0z#?LZkZPqf?CU?&Ckf8Uat0n8r zHqZB|e`Bhjvt&DjOskouFH}9Nb?TSrVRgSfvA611Ve+7>A?zq2xyQ>~O`V4QF0fx^ zI?FP#M+_~$u0Ih{W!H~JZq5gdEzoN~z9|ggJbK1i^Y{R7n(st;0z~>1AbVdm57eyp z5HjX(KmtX?;HeoXZW!}+^*xU{9~orlg7dK&_Jl(LgBqeK+c~ulNb-6c;JdiqG=+OD zJT{Tm3xSyvlF|GcR$nm?W;fpyq+uMbRL0bdRG}4=d03B?VhKp%A644AV5NZ+!-tFj-uU$m$kHg|r{>a@OBQr@UvI?NBI3cnSq zPu(xN{@vgBDPU0{*=On1?)hK_t-9t|*?I@<;?@4?y|IlS^EwTMA`DM;_KM73-IV*# zGvug4^yv#dxD&>ZdLgzmbF;_#q78XL(*?yTW6oizXz3Z-ILCrWf`obKT%NZN_gDr@Rmj;W29PN>fA49U<3H)2rln5Dfh!U9j!D!o>FQs(wvcHCx$ zeiVr#mXzT8pXwL|0lcCW+f}Vo-i}sP>iqyL_2b0M;Zrx0GH<9f)BR_E!@vEHeM%qM zpLMLDJ%Jl4j-v*w7TAyUe0ek<2H@Rsy<7cG9*Ru$K+W=Ny(d9%w`yq9{QAl9uVTG= zpqB%!F?{%9_i6i4YnAo2x1EN_CwOeZqS}37hd&xbI;`J&ABaX(>Xi789~&*|KyaFt z$0|#J`cjnj;L&v34)}`Tm%SM__WLZ;$b3~U^IKKSx>U}mK3cIqg07KUt-G8f3EQ(|a?w zuJ{YtvEPM=QyJdS@{1tmdRV0(QC1wnsS#0Y*Qja<)$|0E_qU1yI~2iFg+3Jy>R{?tGurm zGM8!d1{tdi8-chRSi5U0$?A(rJK2A1%$0Sj(*u*q#vE`LpYBo@rN|R$HyHZR0VfNTvwY6~ORo#q6 z9~;*);lhmJs^>}sSmfu9P1zw@jFU9}XPw$|PWQwfew-X8O7-rJTAuxIs|C7Ff>8ht zPm)p0O-Ry4m_>XZCastrMHyyL|Mv+jv@;wwEr!vn8P}-s$rvs#KV!IR`e-;^jo|6s zQ@>@F?PkQ?z${IjVXJ6cBt)}Y{o~{5c~)!jgvIQBVFRJnxs(pn@Mf0*o#I+mMOk>v zzE<64YLnuzO19AA&pUA^h3M<>ga_%|XGQxZfr{0zl z-BxWsXWN`Knj!6RZ+8W|C>Zb?nr#p zl&mj=tb=%XsbP%^s&Yv*G)elDFS>{Wchu0YccLkei=7Ar{Q^aGFe|)VQ1zTc_*mST z@w4{m0w;K9V`%tF9AbnMU<5JpO?{kjJe2*$qFEZisywFlu)NPDQ(`zuBq;-|wAE1{ z{<~5GmJ&in>aGSbU&`I2U}AD|jwp)PBNAS}BtN4laCm2rmUIHGMR7j;OZ>TEExF&Y z=MX+Ajr+Y)0|VU=uzgSS9CTe&o<@8RRKX$~Ap5rf%lGk^TK`8~|7%7`*HYD-(JvQW z^F_{}Q4nOl9fqo7{QNq&&3w8@7rT+e4&~20x2VL9GYORFb+P??zhoURAFB>ny}XA3 zfijO`Mb&Vnl<^LDU9y3vpv%-P+`i{t5?TzaWWI9OCh-b7hMQ%5 z3()6w*2sKSE>i>6hpOz<362Mr0v7vdHZ2D6<4O)#xps!f==34{^S^%#Qbp>XwFMg@#Yeq9PX{AS0xOscU%de(o##-vcbR zziu_(f8Fc9YDwSBKrERYUu+Yfk5zM$77w+I8;a--DB1ITmQA}S*m1Q^zBePzGV=q{ z(PI2heTVd4Bd!Z--SdgW+7cARdUtx^KSQZ@z|H)q<5f^D5cPW*DucQD$VaeVak($VentGb zR9LNxEyUNe;1Z+Iszt4X#Kmtp>zaQTu>NtQr1xo&7$W}OSMZU#NBP}*=bq)Wd zo5Z~!Cikxl&vO{!$vevx#{h-~;DBSpqN|dGEB5H}RbSNK4YE(->`(iEjv??+Hwi^h zzPswSd?t&>s$YXjZ_wMm~8%Sz@q=-j{N@}qol@* zEP&W~gj}&yWZz!JdG=Lh+wO|z7Y=LTGcuS9g-`Uj2hUK!V;@=PNrP~_mTa?iPHedz zpK0wtWqAI4UUagdm8{)^u~>lH|^HNund{SIN8L33(rMMIi0S3pML>t(gKBW6*M4Yje%P-7=@53DwnA|EHS90qx{Y) zS-={pA`Q7_3gXfIDs@^zDO&?2_l~@d6u02@&{-A<&=;3*vo~jZv5h`IyI^Z)=);Q- z?Yr7G%BwcP&jqo2E|Imu1tOFfjDXJ-#ezYUdw-c%5@TCBPp%?~Rb&R?ll$^Lms0v6CNS zeg)Q61jXLON6miaau6>^x3g+Vab8?}6SJNYQXine|Hmz&0j$bpYL)|uIAmT9na%=M z{0c$_ZA)D#mNe$cyHytB$b3l!4Nt?xRc*L89z*mS0o>^!#b_hE3h{?~AR=Uj4i-UF zowvR>pkM9Y{uDkxbQ}-JJR+}Xe(D^2#ma1+X2BCL* zb87A=jai%kL%(gRg6YK?h*vha*>Mo^k4grHgJQ-oIrezYd&$}wz2s&rFhqACBo1Dm zgN}&`p2$oO&v!x0WweP8cu#1E($$6ZS~Tq4dLMB&P~9gN6JUAQ71CmdhgQSB9SLq` zCoIAFu@GH!X_Eb6OXUMB`9=-qnLAF-EkeyPdRtZpM!za&3)BEsWizTXLRI_h<)Bhg zQF^;N1hYQ^GY|eAfW^Mwb&}t}g?s2=86Ew@(X#yUIBU?uV)Hb~%txrzFWqxR9$du) zD2DcSCt}@tp>zYOMU~`HFm!1;;)U={_gvK{w|uqp8v@qgJ`%`UtR`=u#CN(3;y2@M z0T0iPX3iaw^|)u1W4}2Xl&Ls(OKyK}IsBQXixy*K=U)Jh0mwaKbUcqk?tSdnQ?1=W z(D{Ii9=F-r;$;Z5uYuDT1ommiU~ZZxZ*`E<9@;I{H$VrNW6`6J?IRZ*wA(LynF(I) z%Ls`yfK|ziorWWmJ9AX1#L8#27N!5|kN!i37)ROvyb5-{ILCq)7Eg5(pB~QJa?$Eh zptzy!fkRUEjUYNzn-{1uJ_O^|+4FP}S{FJE9aqA;hc72gK50@KLH`W_>!Sq3l8If_ zGGCN@%Jgy@y@i)1(5Be6-SSnqr1)N*cT{vLj}gYVrT252UWk>L`b~FmDExqP9tgRa z;TpQe9w)sUJbLCZEqj**nwmi=eeNW_^28GsbI!rCxZ8ECgF}uwW#%tI+mvkc#-XBF zr{{5dGi2TJnGt<%lsak}z^ZgcSM<0Vs8;v{H7S--9JHHP6H$qbr+II>H z^O5~4eZo(#L6LQaXw7$T*J&O%ST3ZV4}2smQ+eTeGCjg_;h%$$%omfken{-h^%ND? zQTrC|qg!@WFCl+Jz&aexKAFMuN>7!hjbG*}vl=f)VZJI`jM_n}HIC~k2>DWU!}`X~&X15v38i`mOaZ3npdA98EjJgyXJ54- zj|Q+Rqv^M|g)${|6>Jp`!iwRQ$#|UZlr%h_1B|A$YoS=7 z_2#+@VYNMuATn3(?hTLrNxj^aJ`OzAa6_Dd~_E z_5K@@R-n|SSzNbejmL8xH5Lr-z=PCnTE8t|iQdfl5zxO^3^2O47LTpxE1Z6^+Y_C+ z@I64}E^SPhPK|t=dmWy`bw(NbawUilEk(RCLgHx!NIj3uvnk_ja2#y zGV3qiNswC?@K<>3ABRh@|5kn3sd&hqAA`IpgTWJ_;Nb!84hTb}F8~}KrZbENuqvZb zq13nLhnB2;xY)x`E*Dm2p|79He5G}{6eL^SMvHsz>b{!WZH!GnoZK!LJUd&I*@C-e zOXaI(pSTdxn3s@v<^8z8h!NM(13;=?Z5bkakE%?lPU@v+%4ch1i1fDvED2=I`yun? zGGVTzq!*?&AX;@TCCbx-IL-W7T1HEMm z$Y{+i@1QaEzMC^_+v9{pzntsOAp8klOh`S_Kfr~qOFg)oVIEb^0OUXNqxEHKnXljG zHZKFL@YX+W0I7#=TWGYl-adOSSo^*+g}8aQxXvgw(EHLz;(g?0ckathE6MJw+1Wko zH*)gW4L$DV!|dMci+Gps4M5)3TZpBBY#Iu-pQfM+!WfS$4}5GVY-!HT^)mEWF%(8@ z-e`!p5Q$D-SpN13;%*>0Qza0sQnci>8YFdf&id4*Iw@7nIfdy@HTF+h%!cN6gN)TS zD9w(wG&`QgNu{xJ)tu(sH+;;fTr;c7H4O2M)zKmERzs|;PWC^K6J-u3cn4&ixh$}~ zE?Q&|&$bE9Z|=Ep(@@#Ba4S>Ol{*HZgA;z67Ac#y$zXy~3>i~?pW9pwSYk=Y+ln$@ z%)^jutGGN&Y+%r$T}W6$T}&?_AD?I$RLINVqjr-rGFE=&+)>8l7mz9huUD`H_l= zH+gZUq8$lNaj(+Jb$1r9&hzxIHTF*#dy~{o%xyQZ+}u?*k+)f0X^aJ|6DmHeBJS3T z)WvQmVD+7q_ugf6{)t{4AH_CgzFIpGsq&*4) zr*_$rz8r3mHKT9W+6%%5C!wMl-|p)} z;FDeq*ViM`%g+H$RQKS{y1+kR64-Q4GST5uawV_(=;OM^!-R7-)YEu(nAq~I2a+*N z>i+UHc(<~j5&~j)%_pSL*gs@cI{dT*uvO|z_t!EBM12^EGkKC<*@m0nvgU4N5sPJg z#8$mMw9x4oc0HYayS278cke>J=Yq2Em98HeTKcz}%(>ejYn+gEvrlZ|>@S!$D`}pk zI6nkH?6dHGWxa|#qoiiASgc5_#}gfjvmHIImLK<`k`;Ne3d?thpM~{vXT-K!J=Gt% zsM1qWSz+cg7U7F=bf#;{Ut6T;8`o#V+U5-$%#r9~2TX4imEH3=)*I7Z9hEi9{5{g? zA@pJA%q6!6UcwX*{hTJR{?PL#5-jkjHPOwn(_y@-khWPEkuWYXi=D~BT|6gUWB-sb zn@&r_T$3o3V=FCSu?vAU4_Ifw=h8+F0XJnxl~*P!Nn_fiW*m9z#`ICs{LWxeyEv}evf-i@-kLHzxkCig8lv(w z`OD*deL@1z=`&Z)h;xRJ;pkfDzw=?rO0#uT7QsDk7sq#pxdY0Mk}5 z#3d9Ye`?|Wg07>L@!vd9DtmQ@W|L1QlpDA$PV)o>xfAw;6+dvV(ZNK`qBEj55u zDU1@mwjjpq!HCed!~gYX|2Y#rRIv9@RF}5_n7hw-D8Pb!XraQshd;yV!Ryh!DkVn% z`m``XccPG-j50g&));r*k_l0Z@f}Uc&I@p9^7`l zA%$Rda6E61y$(RwviUo?tqj=|>pf&!8qUXR-Zx6Lchwb~6jyCD9Ba}Pp&`5K?*d~M z59ihT3;|gAEgj|DP|`a%cIu;bxOGFFLz#!JBgCS_dTeIT-Fr|z3Nf6Q3+>+Z!2I;& zu%gt%`k(=MlLcJJmL74>Hf zT0`poy(2gFga=Me6)d*&i7gn01ii>3^L)3$m)QHICAUv!IyWF_5V^JXgrF0{cqi(6 zV_e?olL9n|z{vc$SLQeFJ{BeOAEcbNW!-rVU{ww)1+3WHMb-Uld^i8(N)1<~fCb?} z&n8E_M->}_^zN^s!#km5Lc*9d9vbJ9i=`Fxs_Czf&uoD=TVs;19E$2Z1W^@O>o?zP z8QFIo-jAERa#EYsE;R%Ql@{O z!ifWi@h0JmlcKn{A-)&ZxO+#eJjx@at!kqItV&}lz!JkT-Ext1zNC3&G&Nv3-6BV1 zfuk?Z;oM2=o%}6p^68c%xu0OWw6T;GFX_ll*b&loLuJaa!#s_toVgG;`b-rxwBOk% zS?on#J{Gy@ZFc$?M~0ofhTncmz!ED&KC+1IMR@mF_eP-Gn1x)KGjq*%&c1 zQtN9k|5|Bv3X>u+##1IJBiG0=-HiRWKyciIS(CM!b|`@M$k}6P!_gYRsx(##Se^8L zuh}RCtSz*pts4Z^V^EpjMx#;AS;HxQ+g4e&5}=izl%thSO!nW%gKkMe?uHdH9KT%& z(*~iTeeO!7Ki>Q7FQ0x#z=H6~V^wqswp@Td z=MOjJelhDzxk32FA#1oaQ4E9>4EVW0q*q&+oKJ6=2lObeCEb=bRf*SG9+ zp=SLfCuS*{VKR0`?srC_w5fuQ!*ErvMlz>mI8-9M)#Z|RpSAe3g!1(EnX;+Ksbi$R z-)8wJQ__*Qmvi_1cF}2<3TLAMtV(4pV0}=LVD0?ZT`Q6O04$-rniVL|AqF-^V5oIY zG6EH>QYyEeDuJPx+e)q_SZg-3DSqVS(kq$ZHW+`kmOwudy1iV%{Ys%+`yznj%kmwU z-x#nMB9&JOg}yKMUCZJA-S^2#c)o2BmuZE{4Zlg^I+h@QbxP~yNn*!dY15r^q2%(C z3{dX9b&s2mC6rgW4Xf9$;8D823xoI$i;(J}K>DRXJoD4is^}FXzh5Yu(55?YRp|Ku zF0G$~clAB?0=RF+5deYwt}?9SeTxbmHGox#jFO}}?IOW___{e3cTLTvRFrUh`x#Jp&Wn}f*x66%g_Xt%GlKqa)cVs_BY{f*r z#ymG8)Aer;?seKQaN;vdhuQk*TIY;vH_J8U7N#!K`&8gwn9t*O6?|D9F*EEFcMFOk z#^YusIMfkPv|dkYHgQ(qF>byBC4%GmD`nZW5xoZ`z3=2YB{a}3UlnQqtCE?t#=Tae zsCHw<6j!wTCY3q0p#or0`L)@RA?-$RX?WQs?W^d7XA5qj40Ni$qL$-C$CJ2oOjk$K zY|Q9K{a#*(b{~3`TMNQ|X78&VNl?hAnHxm1g-pV_h)vx{E8n8;Oi6XZMog#ZK>odhs z2YJ_nq$fga0axOI?X9<3B%7qozkI2RlxlKbI-8LfOn!+kDkZ~A-HIEvutt8+x&o1? za9IoX$a8x?~8|QWQzH@00Zq|8M==1y}FAO=SU3hqZ>#|!!16Y;HD2bW(=8g<7 zU4x`Dvo&x5i?zEEfrrjuMND$j8$=hH;)Eh{Z;aS##%{bJFF$z)LM{&B=6A5aHxpa7 zoZgT(h>@G^xV=rWPEWl|kc{3eCBHvlQHC1%*p7S6l_DYx-5d#`9hck{uhZW$C&O^*bvsOra?7X|d_BX~8BrIzEd{Eo`3mZBSasr2(u;Wt8Z& zR5?@{ayWhm1++1z2s~2WZ*amJw?La z6D~!JW4lC4cx3FXqua3n`s(qnWbH(8^jHhry#Cef zaEGP*K}s?~gd->{BH3?;Ry@%h;x_|edlmH!RSH-dwuVY#rD+YAt|4OF-g^J~v;Ul7 z4@)Y%6&d~>@hh;cX=6ZEpCD*rq<&u^@5WkRgf`Y^0OGzO?rtiT?#{A(!i}t}E}QY| zEa*G@!3hWVELLXLwZ}K+KG3>b11<<_THjrXaFFlNZ}fMRzu<)-S(1U{O-N zi+O@=L?>;uQDk^{L4Itb?nuy!Nart~ndQ_E`MG4vhaD>?zvX?G|L4wb!H*IDAJLn7 zAvdb6FM4SZ=3S5|;@KSJ^fMig<%tsTP5>o~CN+xoen;`D(Esd(kk}C(sI$&g^GjA) zV{lEj!MvWQz2a)B1IMb;oJaluhDh-!eVbgcF6w}V{`)6v!x zWA_~341O(2lhQ{(3QtOe#=LWaJ{_uYsX1tlZ*4ELts77VDfRQ6lMgR+@%gb+(-+Jy z*WfZ?F-h7c4HRK(8|rZn&_Iv98Z$p7sh9w5Kzw^+C4VIT|6--3If+F$ep0y~GrosK zqzy~jg3T~pl#p0s-C2;O?Bn~3d(6B#?nG)6MC(x|gndIPki>e>tw!+LUmMlR65)%& zti;0&;lj*+?38f)V@&_3o9 z_^^g2W>sVc6ei5-IfyqUYvUp;^S-OIa!AjF7Ewn0rU zuX2RUZ%EFWYE4<9%xu)GDq{3w&t^b)bWJ#b8rRO#2+9Ufv=QhWT?(U5Ti z>D*Dj%WvDlj;g#t$kABQMN}9^*l+B=67F2gm;Hu}qsYS|Dk-8^1qOUVJbSl}hh6-0 zOPUSPiT7;NYZt*Bv+fa+_C^6tQ}9*o-Zj<1hqvj)5En;)sXX7`@MR+W!P69EF0Yn> zBW9LoZJW2-+>N|eow}Kl?5@1#o!KC9YS46|D(OcPC9E8#iV{lTSe4&vHq?OS{5lOE z^=8|wQ#e-0uKrv_ldkgz(cccE2RuUZcSPD3!08iS6%z7M68Qv|+fuq>M0mvPhqo}0 zZFC3tJvrSW>M3_YCnQ@YgRJK*?3NIhI}lnQT|S2D%>}XLJFExKkg*VVcI+UWxAraq zY}r{vi$(JPu=nP1HSOR3`0La;4Lc!2$dDpZL|UPV&^dHCsE*1M8bqW*$51aS8l+Gv zW5|#x5}9WqLmY~XWhgS0p$r-FJLTT@wb#D){rmjB_wo4L?)P`rA6LEFckTUp?Y-At zueF}*xz;8KufN}h(NW1i5+HYMM>fqhLp*Dsyyf#&tn4Huo(tuWHsa*TPU!RHaUooO z{P`9Jq42y~1uJw9U~}2idhHPlp|9{DGY;rygzN#6wnZLB+3B|HPCxLdV@+?1VP|=%UZF5`U=T z%=)`oLW`4|P{fLolJkqLgkw+DY%I}qf^*aC@l72tDxRm z-XF~(CUKI22Rj4?+Be2et!GST7A)R?M@?0Zi^a7DYZ-^O=l3Y#pAY|o!qATjgXMl` zC|=Z<9!YR~=TuxXqt)ID-b_a9|1_rX;}gjHgk4l`)4?|GW1Ap)F`iEPqCodWcvI~e zqd5-7Ejzb`ofM%lIz1uk*mp!X8@Ob%L93MKrIV2Z;vpMQ5tbxIeK{OIcN3AM z67vTDj?3^fVp=$+uH6ZI#`zhg{6j*iS2GZbg9en`*3>bXbmz_;&DxaPByPl^9?8$H zIikCU=+}827d90ClKuuSz8>E7MzV;2PznP*41JjqHdt3&D?Ahn?i@j zsw$d)A}UUvMt}N;e^6A6j=9vnn=S!o+5KlIfB*KeHnKJ9_%^6zyN2dH*@7*Cj{5Ax z(gAp#bQ<311`cmgK7%mZ`?v>Qz*|UW-_Y|yNJKR~ifz0`Yq!9WST*6_FG%%UiVrqz zaAyUy_0dOnU824HGFVPUrjSv|^jYc`F%qH6n8J?niZv0s_AFFx3G0I>J~-KVzZK+! zRmki9*;|$y2)i2eTA9UwJgMTb9; z6>Zkt7&7Zm|MU;aiVE4!2ch`36YlfX_pLPHX(8@{>TDMXaUId7OYvJnf7t|coX#L> zePnQ2U5AZKP%PgySm9HMPe{62ga^G#=JcDsQRHwhSuFpxpV z!mw*%C_UXd9q$`XgxY-8qZ|mr{2XzcMLQ9hGHK_Sn$+j0H`2iyHeF${IB{0p&O)o| zTMhAUhYYaEpV@3a+jXdI^TlbY{U3>+75bNd`)5TcmD>-$a0e5*cQkXE`S~!z4#<;{ zk#bSD$%vnY(!#BlZ~A;PMKCDd>~8XeC3Cb=BCJn)-IDjoVR$63VWD8e|H~oVB2=+jP%Znw+UsH@7QN#=*Tox0tj0G03ZNK zL_t(>YH<^WJ#|ueGy#OhU6n!idLasfwFLgdDf8PuiZ2SBsrLpee)8nIOTwYF6Jh81 z=*mx*jlVS{_;K97(FIZ`uoY3NdSK&pXp3rh7{WW3Bn&uX&U%X&%Fk#tPg-GumWI;I z5oSWO0l$W~XkBTJ5YzVjA%Fdse^3+`EPL?vS}KHOpcSVZmM#p*e}PB0H=mXV{-ZhZ z9e$H9D-3>McohHp*HO}m4Y86Nz0RhF*LdJzqPi|mob?^MZ~6zutcM}kAxqvmKvBOeGh~ZZZ9WtY`y6{-B%FaXGo){ll3u3XNNpn8fb*4&TmJ3) zKYeBYO@11zErcu;f!Q2Ri(%qx<$fL~yC_j<>I&mle@6_HB)LE2z8=Zhz`TXp=bxkG zqjlui#vXWdvIWQ%nXraPuQ;JtDE{fNip3oMo47Te@a5ONN)Vo#f4lDby#aGg#5@DBaaPS7z37 zbS&#pXXy4mapFTwCg~!0gHg{iNB8oa$lp-$B^ z$K_mThuRoUtyx}{P&xX8=^sPn#LtM(pKlBQdb9XH7x7;x`CGbWjRefpDOdC2#z@!* zO{zZPYC@d*gZ=EzT~yz0dBombrVQHA(ZQCXp;m|4L}Co>y*Mc{q$9y7x1mF9tV1vA zu(}FTy8q=GV`*DHHa6a`$61OVWnzx9P2Ctb=pVa6hQyXDJ{ZwsltK4@TK@AqCZ{N5f34L0tN4#|y*5`r4OZxy9fTCB zb}9>Waczlm*ODFc-WXV1!d??qYcNPEo`oJ>MqjgIh0GDN%z0@Z@wbZ3>xhv#+A6XB zfvwQa!&_xvk7_fEdB1+(KPFig6cp6Lq}?4K)&BU4*egb5bNwH&M+=G_MM7cT`dl>ztc!Kn7mUY=(exb^9#@IWbUalx&Vum4KKAVunD^CeC7k#R zHjg1YiWHxKMf;WJsvgL19I*d75j>ZH)z3l-!81#MKKpRTmcAZCV4#UJPHU0(GB9|@ z#~T&X@n#N3R8Y+`(cPH_!dG~d5VfmtS;Ghcib!D%K(`IQxDHxFJrr`@MhKB#)7yFc zDw*$H0UXZE|B%TZ_E{DW@~Uk&Oxpc&e5PLS0)RD>Z>0Y+nyL40Z(5wfBT9Q+f|Rs$ z5rSc>5)byM#-~V#Yr5rWrpK?U)pv#|bUf&-`1!ZtpdrJK=?sg0#mHQQ#px35wHu_O!Bj#W3ZMHzGdr-kt@{Nsxz&~b8dDs(cH#5g(e6n`@)V<-x}T7pqO`HNA;UqNgdlXX4hZ|NJ&JfEbR;4LlUM(H8@lv*NY0aKV9Im1UIRq)ci!z^s=45 z?=chxYp%jzU35|!tbbG}F~56lFt7GIC(-43W-dHCZ(hx{?5QWO&AX@L+1GAV{SUfF zzpLGlkeC*a*9ct~V1hXMVN+Xi>3jr=rjuUGaS6$gAf9*HcW18zXwOIAVDodmEFqwm z7JB}98IP}nrG_UvM$Er)uWe|4O^-iv`E>;^WayrrZo;GtM(}GD3~8{bVGq~(4&bs?m(QxOA?hFP@}OX=H@ohp?~wz| zi(!!yTebeq#=AR!#aPwxhs};nmmI))HG*Q2{YTEk!w*l?HHUbA zoU8DD&C#j~4xZW!{(7D`wYcG|6kOhM;3z8DhK4)&n3!MdtHL!Li{V)2=U)56JTH!F z(ozObwtMpMc)xs6pADWk)^GmBr52C%^OV0EEM*AmpA|~f+rauuy9EcHUKvuPDT z=>$$|1#-;VZ(0g+KM2`=K3sHt;b>OKQE|pQwji`T!l^_`J`1*wxqF+-02T`xV5|~3 zl^S`rE}5uY#wf!-euuFa+`V9$nOJTAwjE?KaP z9kFG|?F0~Z>wL71Ojc>I>W3%{)+(V?c-)!jkCIEJ@;bbzP*|Hm7uWv!Z))?!kgj5I znKl$TQ*_eV)WEi_=Hm}&-x-6-ueLzm6m|M^@nO=sBgh?~{I&oAtyEB0glVy$yN%gJ z6a2cQ+kFe@J#>7U$@`FRq|*%+**Nt7$`NXogzA; z`XCpfc!7XTjZRZ$T#SIr5=^k*-O(22j#p!l?sK_f2)NAwm)&0ME*9;^t%yusO(~WA zz!jC$>u#Pk)^HF+p>~VMZMU(K%8%+3S1$c@? z`)=n!#kt5RQ))V(^V@-QvpF~H{@Cs=((uNZ$!7b6%J|fcxMHhscC)#uu-vHjXr;lb zAEJ2FXNjdSQ(>@byXFZ01H=*kgpd9UN^|}&SajDw%W#)H_?08+r)^TDO$BI}5$LuR zc1C$c!U()C$)w%bbOMTZ>ve~T;&}Wv6A8U<4{;sQWl;gsw~O=y2c{@cc_2>h&-v^N zJhR1)O;E8Al`yYUA?E|fe%vgRyKKb^K}pJIGkAdeB`YQ~1M`1upOdg2jgD}ifz@+5DH=J`*?9uGfYQdFgSinCr5yFmPek=*I&DG%t&gTi3 z%>Fi^$QP}hjQJdknV5BtdP;QX2rDptPO+$hCa!rnu16%yVGBsTh}a?&PF6}6=pT!o zbVi_c7U1FJ+A1BT!KxoZNke}Cn}upbzxvPMI0+ckT(1OEB%A6tNt2%Zz^>U$H7eAzu>sFTrBk=fBn7~VrR?3F^xsT%Cq3PZGup|W>7 z)Mu0=k9C7ClQ($dhyGrWFzUc*y8Z=-}emE7#$cI)Z0cDTK=&qWtm_ZG2* zs0Gj&3&`3P>xDca?@d9D{ic4DDc8z58N2&kb`XAjdav> znW~NP%i6VasyWKKc^{cBj&E*+J;NQVWNs5a_#kJrwll?`XCAsZbEmd3p%0p(LYUS8 zFnw?#CTSoe4fBuf&}I)aq-0=(S?H8@6x|xNi)QY9CgD-L~yIrNhst=;@ zsplmGjPQ^UuR%Fj0^%!nd)4Rr!{v0Jv?{*H;MP85KK56~8z+nyisSK;Tk!=+!w<4w zMCzHH5Re%3a2Gz=9OdXE`5HMCJ37U6WLCx}2KDDe@bvE%6-7N__p?+O z4ewJ2DvAV_J~D$KfIwzty5syD)$lyO+SHc7bs8J4Hd zd~vg;`X$^pUrw3 zMzO;b+nOJyNC~gU;pH%7pEo-I!Z*3O@=D-h6H^4eRiB!jFD#yo!CU5c_85!Do1z{u zP8-fSf_*mb)8d(Va0#qX_r`TFeXqzMtdln)P1t|ub)4&DQw&ehX&epGSDZp5=4KXL z@ZzD+k05;}Kvo0n!f5!ugo>4>xQmclwhiR(j=|VB-moC?QanY%-%iZ@j1^`LTulE>j%@(^A_oED9z##dzbo!XD!w|C>7Y$b7DZhd$tz zc4&2V6Hgp1VW`qz)d!)(sD1y@|0PaUuW!$vbj=|#H8Nr3wEdi88-=>H)!Tqvccla!lm9W?pZc<{K848rY@#ChRu(tWWj7_Bt7j zYG%o;qfRft%g4Nx1ut1VZ!J3I&_Om1S8Lv3o{Z#16<0@9AH^hFno08M{g=#PXH^+0 z86lOMeN)G?8G0c+eAc2HY#jn}KUgj<-pNyXSoK0EX_y4h>tZc`%9s03U*CThNzYn? zmB9+zc#mGU93mH_uuI(-`r$`S^yf?lb2s$8WdU$Y@@q0*F`Dw&E&|T$B3=~YIk*_& zd+8%3l3neWK=33?3&Gr}3JI0xp@{B3D!F9FVh>37`t5YDQhG+*+7S6895y)(*c zdEQ?xhxprA^@ktd93XT&4%4eQpOym!gAsjb%F&Y#q2d(wv0|3pT@Ds=G}%fdv)dm} z%^!ref0X*Rx)2F7dn2wMk49&nJHo>Q>;gTae_+D8y-}ZZ*ikm8O=G^y1jh|HRF~2I zZlz7?3v3@UKTWfTt1Ym_(m(J%0xF#dUcQa%g)rR&DUr-RGs-%62TpzvkBc^7Jpiw& z#?ooQu>KsGq%>IdKop<$y~2&y!T8sRT`dmlF#0Ak^RHV+ZNP^LXp3mq?|77wea|hR z17=ZS1To#A+c2~$lc=bTfjLeZ=9FGuGmRpG65n@1pCV62|B>z}&`O=*~!Jd!cbxCp^l06}!B`kTb@U z_70ZL`*D~JW0z2ki6C4xTYzu6={4x`sw4Z13=`8?@kM+4DUEqcS<5~n z+2#Vm?l`k3pc>@>-DaHk1EJDj{nJtlYk+^N!4iBpE(eGlqs{h&7_wDlcIMpH5;k`O zdFPgTY4DK`d}LPk-SUIYyEE8bKZ)c=JQOs3XT){~_(zK%@zb(%dMGT?dzKgsFJe6SxvvED7~h7DFl}6neT*>g8Z)6-*h=PnY|k$f{zmc(%SFCfTw4ht@Eet+`#q* zNXeAb4}xSvkfTP7PM)4CE?9=oSa<~>>XaJJ+%;M3A7?hFAuh#RSyg6bZHIACK5YYq z*Iqo+MLJ?m9Ip^|;C65vU7Q-+Tob$Qvq!a=+g_F6GY(x8mm2z>qBE+t99{}p-w~XR zNV+DZ%5qk#vTvB=z~W+SS;%M%yjojxyxQ1(BkMvaE%|o(ba3^@o8Ih$jmFMQ5Q{>^ z07`@PPs_j9U{S(rCaWdDvq$9K47o9DuDzkzMn3!D{ZRI>i*f!pRI*E{`P-22z(;z> zKk{1l#K7T=FH)_$`bm_lSz2o}EO^%@%1nf-0w^7N)YAVU4!v8tjn_ws{3c`7%-R*9ab^hXNF-if+BL#H>{c)et5@jNQYyA&13M`7>{SpT zeaLAH#48+D3a*XO)e+Ca9#@4Y@kKM+N7dF&A{0BJI?3;0VhfxXpt_%IgvRgCDDf`r zWMK9KwR=<;s&>`kFa*OjVOK0)*I*Dv9Y&+3IvJMo&~+FY#`j8YI8OK; zP2JPWOJ#}7W-)5>B`7p+6)diU`6vz6KP>-lgLSr+%M-$TX*jdLEhqfr~@;;Vqp<2Y{>| zI8C*$-DQYqp^ohe>F5CY$8c0hOJi8Pyir5;u8>m6eZ>@~q~pmD?@B0Jsi%ioKAWdO zUK4e8(wEWHSS|9qr-y?23TJA)IQ6-Q3N97gR|d^8hpMyB$ZY=>2uZ$uIjrlC?Pcq? zHAEe{$gn7IXs*#t6SsL@A$7IGXC#7li);dGCiTTVY|PJtWp8ynMXg=|;M!VGAKe<= zUF&6~>zq00+2rdmVrUA^p7QztIS~vC=Fux(}y)75VBG_GbAFbRD!`j!Q`H5e(WU9$gG4cAKDzb~O!FIf(KKn)OBT zs+d7$L1o?6pzI{Ge@a{LjY_%G*sN6x?X!%Sl9U{~E;0z)|#;4^= zl?Lmdmw&gxI{Q1T<{{LJix$q`IuIfUsi0xc4gCS;;;a$%n0+hUuLT~Z+S{53!5Ivr zR6Y2j;J3u;ufwL#n)HV-8uWMTXzmMZ@bCaZsDWxvZw57($Ufp72Z(lHD7VY zv{#7Pr10>bfns>l4hPL+&y76k5Z(mqZt(84z32tL4$aw3?pY?B!tRmj;g4(JI;K+L zJv}%2qR;@dc9P8REk&tUKj56QX2z#H@ellD8D%t{4$udiChxUP7Q;AB*%HmHk%943 zJlt;AMzcV?e3WR7w*uHm@%8aC*27Cqc>#ZFlWWioBV7bLmVIAXT!Ig#df!ikDTD6+ zy!>Xc{;Dr=eFipAA{n_#4&XKH~)@0`#f5u&1t#M%4kE5H}wHL3rn7V-y{uN=+#a3M19rF!4nTdkK=iH04H=X{+;OXWUS;#AY%+EMDMEF~X<|^AX&ai65OfNB4w?360s@ zFN$}+y&T+Hs^f#1?N{QY{hvzERjZt-3|f9)fKsYV@<7Ns^McLYK&kGLm&?U-OAsiD zp;Nny;yQb7{E1C%BE;f9)G16jGJS&89F-){MI?6Tp@k; za!H{3A!P6=4#$b&D&&R0Twmu_90u{gI&8 zW#yF37VemQfRcR+?cGBUaX99@J~_&-W84)bTOZ0oqt^8!*3C?Jg@14FV(EVEp8kX>k#stVKk!k_Y{6~?rcq=9w?FLpNjgpx6e$Zj^4t7C1Q)q4n!ADj;V>ghX zWd0MmMc1ip$CZ+2ZKSeWPuF^&QbCWJKsdc69q04ZvP;G5m+e4o5#(_WK z=SnSRJk>x(oSIxy_-`f>PK<0GtlCn-P8blXSU#9O`9ECj|B=H5^0co;cz8#3dE}tA zc=?E0XEWjTE$OCz3@Z&*{g66?_22qI-L20CYly;N8E5br@?vgYd~nVTHIzszX%l8; z^)>~)7ZQ)|r2(aV_8~{8a8O>b{fZB`GsU`KtDLauTQKr)vSUJVQTz!u44d394vUX3 z9nlv(|N9q*mA{F8kiy1=>9maw4$jGYg0fv?MqW`tLKOC5yaz;B#pm2rLr~ETZLEqP zmY&C1Qqtf`e0*)BpF#*y-snfA!2v%IxPd?4zcfB4 ztjZbf==4UF=A;cw!NDfAY>QC)H*83`!bTo-w2;N`K~p52^B-Be=H2o}P*G<4;_$fh zoXC{-oZ$G<&1}ATg`9|wlscY6fk(w2cT0gZ%ND@(m?F8(U@5kQebNclzHwu)EtIxmZ3QSzzTIS&+|>>TlXvX= z`Ilij8-YM1CikDUOa;S_?AJwc#+%3N<*if;*``Tt>YfTHoxyg~X!6wg_pih0?P{1a zL2nd5;(fg1R9~ANm%mjXwc+c#@~8#C33M!R+A(rE4C?E}wn5%ICM#UStaN0QY3BSv zFn0%roDtRcB5?Sqk3dsKD^EpBXE+z4gFPod1h~fO{zcQP;en5l5qqH|?LN!_VQ`20Is`=T>)Q7qQj4zFK%mCXIvZ4YaUlJ@n~VD0=qCLMaVa{g66?CH@O@ zB^FClTh(`i75(XF?_bRoa;U=GZba~GI4m}juwNs^Z?8llBlI|wZz?Cv+*(LDVWn8( z)Gm_+9OR+bX8GLZb8uWFrqWt$c#%WJLLP?}XmC}3G)oov&lcc=(<`KJW-dj%zeJ@> z235)23u&1ey!ir~r&;lfoygkdcr2o5CuDY*yMO<4_>AduQ)R6@5$g>lPUBK-m$y_w zRWOPvriNVXi%WXQF&l>=C1{Qe+2fL$?_YfYH`+Ftn`$}kwJB1aQkH6+GXdW)N*1IB z96w#t{ET7!m6*Le7W@CM;~$dWwuE)4D$3B97Znh+)D-iVlPeG~q^AaYo0*lT z2IW*Wz(nOl`@KckXCItmWLh}BGulzUXK&HO>4kDSoh$mvqFbv9CT&oA$jWN zi->K8Zhw62ivif4@@9L#<{wWKK*9_y_R&sFJ{|3Eu()YEvvW~-001BWNklEYs~$+5!78};r*h@r6h!mc{gMIB51wfbC+&0)-3!odWX;VmR5v1MZs5V(-ZN?#EC#2mI5N5T& z9Wr=d6QOu34q+40Bnb+*H>J~>R0tW#873wVp}#NonpB!9wtt5>lhHlu2#axpX2t*e z${mVs_4yNFLVSK zGgV>>!jm{kPf6h-Id_VLyaWjTVZ_nhQD#4_c@I3B?T6y5=lxE$p)^?aL+XH|J-vC} zygw5@E^Vn#!Zuj7?m#nupkC)t1tFh*D%5b}PE40VGy90dhmK5Tb2l(#e=dyr*e`UsXAsSA*+YkpTi950 zhVn;1!LiBC$mtZED}cQ0!FrfSY^N*4UCBi3@1CC9i=k@I4O4^wOP&x0{)#E0VctTB z>N;5!tNvsShS|<|=G13izI81giya^=(5!oLzh!qlF{=^4|KN_`prOi zEQa1#VGW_p(h)H~-G0bSI&VPlx|^UhSoK5d43^!$@*ZG=MQGP<=1EENoNig=ZWB2%6x}^tqC=vOpof^>;&^Uw z+9ymlliB}~v7gH#)ZKz<*x5fpdK&vS#Ot*|>hzDOpoEfhYx=^^EqzKiN^ePeAF-4BhD58WS`8FIm8Mwk4H zTq-e&ozXgDB^+mt52lY-S^7onz{5?JN2JOFC5-nC0I^HW7E$7Nb9TDmzvHT<0*=sWu!7Z$6~pK3_4}sZh}bZ*iSe zmRW@MLOc(Y2yRRSSmdFJnB`UUu0j9IeJBk{R2R5GL~p!h(og9X8hNAvekJ*{ABu$& z8XB=x$2d=Y0@H>f)&(kY)))n4A5w5}k^VZjhc_BFL|H+#eFF^5jx<2V+DYa66RF=_ zeVp!5IK| z#&v+)Ndl$8syFiQE`DYktXjD}(dL*ICyv#(gA@*FI$>{$yfh4$xEL1}GVeq3LuY;9 zWbQ^s+iy!oU?2fmSz+UDb%MjXuDUtZ{uS42n&K8ZJTsXSTzPE~T~YQOv#xhc%a_eP z!l`83@lc-l*xU&vwba*`xdl9ItASw!3k~BVs(sO9sLDx~&{b=b@j{(Tu*jX&5$E%C zhZVR)y~&P2?wk2IhoFi>4RJh(E^v3V9sUfb`HUtMCFQQ4j32ZcwviQ&8sXMV{NDa@ z`!QPh4lo|`tRrm)vIAKRWxn`DM~u78d4}J;aZK97L#`&CUAI9ME zzD-(%!BPoI;%aVNngEI8*&PTOBKY1$9M)cqk9V^rL#)AmK5plnKJug}au@EV$f&l8 zgh!(#=!Tik9$yU2ym)Bp-t+q{hV__c)pP33&!X_f>5Q^3VLg%ms|;4%H}PHs%x#Y8 zQh2*oABR~8kXS3LMP{FI8(>1TPrAzPaZYFcBMsIM;~dO8_ef~`1GAUVjJ;rS5*Nl1 zlKEL?#Z9^qqgG)u+(264ksS*VPyZ;vpZ#-RXTjz_p@leM4Z*lGG9h}?;=(Ww1tt65 zTR`evjvGnzuY==JQ*7S^l@Qd5o3p%qP58zH$J2<%XB&_$?}Wb&M8i^?H4+;eqS8$Y z7cpdtdTyHq*Ke*y)LRT`WeqkQ>I+Ib*@spma@g89o3SvIQ&Fk7j}O4Hsu!F6z4n)E zdB_58(sJk}oABz}3SU}juSUtq9MzZKrShY+>k7`v&lVk__k@}~7_hn{qL`>fRF z+l1a2Sb8G|j%R0hqK~szs~qUI@tzhsSaBJUGXr^3M53@*(N|`e;1_gHet5GPD+PGC zT?ABTk2Xb~hPoxdn@uqcMu1&`qNb}=@MJpKRR=d~H3>CbAQ@)vRoU|;sNO{}Mfuf( z1mPuV%mGIzdK|;PsBuKljq)N7idLeaPbL{@D25X*B4vsw#A&Ktp zid3-y?z%;rEcO?S_bidzW-IO*^=!%tm++;5`-Hu|RK`g=*-=9@S(Ms&wl2ptFD=oYi=ja+Q?4%?vF{o9y@ zp7%kchkukzOA`-#iYb=W?4lv-9eXcE^luGcGF@EW15HuV`gH%RfpHkP#t@S}4(=n6 zjijXE+nG7?3v4%+5~Ewg4P@d+?Qj}KK#!Ouq;p0|Mw&2x4_>}IhdQ`PuTA>Nhjjsy z8Y<;~SAO;-{I?pcYYGo5?*&e;@!kVOKgK<)O_K+^SZCvn6s2pU0Ip#Ksi)Jv)3Bt) z4xC;yItwrhv)WM|t*=tIPd8DroDpm_19?xJp65C3D1s{)2&PD=`Xv|08tlv7%nF>G zUqZy--ksP~ER1)@3W(%Pk&-*hQ^n^GvfHo|esb(1=-=YtN>)v!XL8DQfUI-AxG4v3 zBS6Bbwfj*XZE!I-wC|1JY~Eh)5-a4#@VpBBM7Nj*j&;u)Q+E)$BNBXi&7UQ(hTA66MVp6FrH;8!ce5RKyoa|1rF^uhVR1qO+EW!r}SY7`W% z&BnPF1-mjc)zFIVd=k;-(Wgx9U%dy0JoS$%N_=0Ef_#d7-Hn4vM}6=?**Nu!LAmSq zwqQrR34QJOW^a+>Q8p0;iFxtJxM($+BBlIiGZPKsYfMlc()pV~mu|r;P(GC3(x50P z-hUWkbSDRFqYMIUU$9jW-m>DvpqyJNC=TA^fk9NlAUzx%FMJv0>c05~CdkrX=NOdp zs5gG;`;|u}I380&@vYnaZHs~eX0REL8KTlZs3>4j57cFmNNyPzgmrtzt_>%GFA-tk z(YE7JziB!^MndrUU zzazboy(PP*hccRXN46oZ5|i6Fl*&C(_}m_iP}@gnSiy`tonv7|?J3Fe(I_qHb(XeEYP}bqL0Bw_vdNj{> z_{b*Zp;R^VV-DnvN7mOXHumXWxNIK7wh_8RcbHrWtkFP*U2((g4CVd@*}9pO%<<6x z!AsTH9|EuR4forGv_k%pj>)7uB_nL6u9JAGlvKvU@eF4fNZgF*s9AxUiF9&!mSuSJ7`Y$?+W0Omo5f8@vm4z zQYHrwKw5_;`g-E)An(E;{GKQ0jOxYWhy#eCj}qt8Qn;qV=T!N<5|{1cp72MUOtj(# zhWnHI@o}rZd-KsP=wT^@mO4Bh8rH3GcU->EhjYVzxZ5n!uQK<>pnDta4C)^#r;noy{EOn?QTM|Nl+$TdR|Jzc}0quV&lz1MPE?1Z< zvAEzPMqUx!?!qUBW;mnmg!gBuytJhX;xDJ9b-r7lmQxWKJJ}T}4&8ho1BWpg9Vjo{p*={q4RE>Pjw<*3#Z7PE8@4S3q_egmigseuZ{2i&2l&=_@9MfD?29>i z78rW_tabk9Oh&*SPQMUW`)$k}h7lM_QOf^RB!kz>>u7Mq7x^efM|u5Pb`Tb;qePnS zxswkdLIW$JE6*H?G~9}FU_H(>%aflVn6XB+>%syU#cr)Yh*QV0?}yu-;E)Br+gNQK zuokPHKj;0SoU^ew*)?>=r6BoTba6zpYs>dZ!tOZ6uKRIp7DP|rkPqB{f7Zcl8=j-@ ztDc=5k59$JeY-9!k}u%6N2V`&`p$!(qN8-Z1Z6Z znxciL9>P3~l+!foE zU0heikdv^NP1j#{{GEAH`z@TwY`@~7uvp40p;G>a@NY>00{x>Q>DV@$E0plZ2!nAV zje0WAR^-?X*tCKDih7bA@$mV;N(2)Sq`!gc1GpI%BhhLLmbKl#SVqW`Cm1h_{<0O} z*ga`KnN7<9h{;#LV`3fUH5<@`1cH>SaQ)uyU94K4TGb0+;-_0A$#1--oG%RC>S=`9^^HR zZ?dSJRwxj5>~fO{TzYd)#J{iPR;*Yeq;D~ptU36=8q zMDRQn!0O}JVgu`n(d^b(iXZ#gLeThUDHw6xsX8eyA7Q)|`@FMHtin&<=Cfam{huEN zyRW&)V-uqg-ia_M-g=w!wVhq|&?OBOUsKY1#dQ0?&OV%4m3e`(s&rgA;?=Y`!6tk? z_B6<2f7^V6P6XGVw8*t~{o#zkWxmyx(fJtTO^H!w2U+-HRfHflonsjln%fYe*$6q1 zm@2Y5h=(VyDR;wDtjo2ELId9-GIrWvk)^$G`BXGVYI-J3D$4c2s!w$b66dW(i^|Z$ zYs&o`KH<6e9xr~BBbtJktBLcaM>+0$5Asmx%)7ATo4~|V$l5T1*_(6y+>Ww!*Op3k zw{Q?0VgN^Vi9-Iz_8&S@ZN`@{ni(7~T z#}ZASLjcB;IdlhoUyIx@Jt3w1b75eCrbtLk${l|g5vz{so48b2ei~?tkmSCKL zFNErBnhT-LF)u{2_O598s||QXB)-+5&>c5~;HPAcb(QYzg!_D%Pl$$uU1*9_zwe8Q z)(NX|$+*t`7DaHrWP=840ZkkDZ0HUho@%f?YtMZ?b{6vG+y=1TU9G|R6!IfU%>K#o z&@>ifHJIDE0Gl(}Aw#9XQp(?zpB`3*!cv^bkKAgc;>7kHVm{gmVWV?0MqI~?3iWHM zi9L##3-)nWCz)eQq5V==^g&efyrXJHt=zJ)G+F}4}YrVrL+votUywm=Hcoi+7Q{?Bw?h{43F9+;&;{i03a z@mO<=V?XNW-r=BX3~~W=4n+8spHfLibKKq~WNt)L75t9x7$|b=)jJttb z5gE-$3(cKvgj#eF?>%{tv$PN|YQxR0QI-`o+Q?S$n%W0Mj2eo4QO)))bDx(phRO;NKwQ_9$`N@Mx$Kg%-a5nAXOSHrTl&Q>0xbAJdWpFt;;)f`@!y- zL%fefi4EGEVLxP)dOqDObQ^>@E%_zAUs@GZv%BUf9@$>uHtY9Z9mX0Kkb7-T7C}&B z>^8;BeghCPjYUmLDR2IIaq#*p=#0ekyf|%EnZ3_XP5L#C;o5|x~6zW1vbnj&Jf&8ld ze+(-PmQwz{NP5b^FI%xap?Zz&0syLFaPi-=MoF;P9Al}-;bV*K7o>3T92ys8W*PX4 zJ?Yd!Lx8VrKmg60opK-uT5@;|JSTr$0ec&uIFaCc*J>#DL8=9vx;7saZZ@0ZB%SjF zS7Dp)95U2??I*$_9W=$l+9}q)&3KNni^OwpQyi<)xMBn0tuZ>v=kfDkXvJA3;HQVZp#kUUsomYd{vg4?FtQ`qrUeeZ5$9|_06RW{LKwX`^9H^-aW7Qdyd!3rBbNa3UcMemk&=$G$cuMT*CU1u^MmmIh>E3_`(-_Bo^XymMTQz(1+Z<6 zES6%zZ^8KO>xS4^cMS!z&U)DMVs3_|&O0+76Jp#+0O8(^{qUk{9fv2+HzALQ3MRJ! z`}41n!zf@jSsPwx-~KQ=MkXM4f`!%XU+rNT7s{x8wE~D*iiqARe{>hfQ|QKf$OGXZ zYW5%Q2BpDL%HNc_R`p^q>|6&+Ry^vTic+OnoX>E-DYL>2o-r7|`0Rm=b=(0AvAXlN zk5$}P33fpCz0Z@$FoPX&Ix+82>Ruz96cj8gmZs+1z-K&oaiC#Z6OJ83EI|BnKN{!r^opSo_e>4SKzL0HJ*$kV)-5nN@&Tou7{R$WkoF8K z(be7J7ygRF=;!IZy&Ejyv{r~w83HrkO~T+Z(;qnywG7A1y}eh5L*N7)RnqmoQ3P>k z&zZnS)1lPcbgP?9S6tVk%bPSXKX4%imI`#7 zk}KhYH)mAql2F(MRa8>bn61;L2_KLS!sFjhgYdT+2tVg!s&EZ!GSR^j)4s<+I1Vp1 z^)6foi65V$>!yOGGB7-W%c^vF^R2|w?*GO_p)^=Z`P;&zUz39T&CR-Jh!W;Z2vls- z!&n0{*&u9FyL3&obDKIVKGdP9Hg*TJ&IZ0rH))8d;IuB?Eohf z0MTs{VbM{~1W_rFk|dc+dyoBSqes*#6NA4^^+8rh_qkbUWVdbJNOjEk9C^{6?dIsM zY4XG%DCe#@4ipU?Clg+X?TZWdd``oXNey^7Y;z`3y7#aTo(vh5C{BFggmbDl3#4Ja zGBq&~;q50N`s^d&M1-00Y5?;MMF>%9&W&`d&(yNfF9uY zDm=VW1J{=oE--{{y?u1>g={KM@QXU?g+O3XGG&I>>8g9F?Fcs06hjLyl?FZh zhLC8K+5bKy&bExrrmS#9z3vssikhHj=r9GOz7whwneQ>-niRA1mYaY+v} z%4oK?7jdS@kZli3D{?<#9fj$$*TWP|JnWgiC_I0j2ZF8$^hTr^M-1P9k5-B87$r5p zJlCps_H>b2tusOg>y-4qCUUr_|8r_egQb+eC3OUTLLtO&`Ry5^B<21WKbXE%7kw$6 z4j*^|7dc;B=IIJ>eT$0h=MJSKuc_JnITH1ii3vYZz(*p^@PdvP+-c6F1Y z#m6K{*p-KM>+YHeR$sh0o?&c%$kM1iqtak0Y509WYI75ua zLDXu*FTxOJ3P9v}yep*Slh|eEl(iU8^uh&Xv+m>cRc$-?+aFzscKe=VJp$-M6;EBkhi{US2tnH8j#_oHZvRAo67^}mY>TNDd25L{2c zG{JA;YN_G4wkXcVkb8z;oiyqrgC>)%nBtJuct5P$nGq1yectB}Xs<{b zhsUj{yn)huWQ&FLYR#yQxEGOg7qGn63*+a!Gm;d`_fi8dpGlR_VR>aIq=QU$m91zy z8v|TPgGaD_$ZJe}p_v6>^$J-mhDxS^#p#9Hsj_R1QvR;gHK7oL%iBMKyp%Tlaybet zx1tg=TG)Cn%so|zN&=Z>3pxl5=U~hOz4?4pzHk#JW51LA*-yTd11QpbeclnOl2Mv3 zdG)0N$a}5NMo?49$To5a^Tp}4`S1IOx=%r&V@mbb9SQ+EoX=};_evBLY{lIJ3wJL_ zg3`MjMy@UI`={C?jy_7CzVDL{i&sj}6gMuok^sd!*=#dJrR&SN5ODw#EC`mhoCP88 zal4OmO=rr$hO?vdwVUD!4{o4ToL>8B=ZjzjrrvTIf4&?7nqv-9GJ3&Gh@Q&n)3ae- zKBP9rEdD*teD)I}!cy|Hl?W^`XSdlPPDfuRK^E?PO9Z>-beE=msDqj)4VF^=j{Md& z$M4IpVGTx7_O)% zo-t+!6gNSSF%@|4DS#Z@Oo|~Hv*eKzaKAADlUWrgp0fKe+a@pqqgV06pK?y<^x7E8 z@f4{<@;ysv|NaI0x+$NwFbsdY`!?Ittd|M&001BWNklZo*2tbtynvH~M_y)R<--20LwSMHl^be= z?uf8np3E+nxLfzqiPB&xHSc$i}GH~op|8;w!S!y)u~Un zpj#ROv}GE4);;jTu-iD&;j;#=HCc(_^pYPdChqMwUlk|2_E?I8yK18Rm1oARRM(TU z+u=Q$$A!H?HlMX{4$P~4RG*zUlaUgyu8Hubc8UnBv@1y(S9$<3>5&a*lY-6G5v;o5 zXTO?ZzPd<9@|ZPI(&E85R~U1^77|Ljm9?a z*tX5aHX9pF(#E!J+iGmzvF)8c@BV(mn(LTD*EP;rMI}>#>xReNm%_M?_x;AcS3)|W zyMoF=3J__Za=87$T6y-keUQ#ZPRn>R18J7dSop^GykV$C@OF=5Ox69qu51ZP**S!# zm<3FBK(a@6x%W-{rem~_kdW$#Xcx6?qYb}sl7Wq{)k$=mqd(=op7N%}CC z4&DqIdTXX2+?Qsu!E9BVE*5b9>$LFnY&}PNp99=m&I)1k zRVwkq1op^u0mu=5MKC=(|5hVJvpSA?Qpw>;I&e>3EB0S*A?e1esOhDm%S>2NQ{`EM zcJ?2Nb_YFWZApqwNa~!?(ise|6g5jFqO! zzWn!FV_6gC+U(5vh8R57L#YuW%(Tqnu(yR(-W48eKSVUE>LW%SlKcg(oq&#OHX29w zBhkT@+DdWU%Uy};_l=nmYm^fNSM|G<>&Mm0-T044bjkA>`H2o^M=AZ4N-vhG024-LW zalT9vRB#QSRA7>w?w^eEMdt9E8 zNm6SMEdlkDSdz=#caCiRpcPW|_CBoxR*eavb%c(7Gtxb^>;QB(L@o(z)~zo#@JW}5~1pyDX}>R6#m=7ml^?Fi4wNkPLc*_e^!c|B!N@_W7 zkGsjl$@KVa8M(0MSNF>rr6@j$%T2RqrSx|2Z~q0|xP#(eWq{~k1~MhuM@a9w{_RPL z;Mi4n(?{md5@3tBv}_dEUNG`P5P{Aw7arGYXR9}DT_bfC!(0*Y;PrZ98EA;3dh zCdPs4zh$sr?nnF`qrFEpCu`=*Q`9S2$@wK}L~%uev{5v$Xlq866~ z60*r2(7mqGpElWW)@cv@BN40At66>bF`_J(=1x==*gT*;z;F8ep+4?1o%|0>U9r4k zk<{|yYXE7JKRt=bd(2SO-_eNAgkN(#TuNR2Cc))pY;V{=<-6@yk<1JuR>3s4>e#Eo zDi&-3M{qjLyHgpG|ILEvpX0(H9Nwsj(CCi*5H$JyIB0P5Ln52GPgGfg+)VZzQkQ{$ zc)U|`-OEHapgaw)Ft3?@dR8Kxk}g;oh|2{ZP@`)s+4_F7tX5-|>aQZN9mKKSUsYVq z7dPcAgjxet;)-@I%ij@(7n>sNR_eLQ-|Acz)f0Vml*6hKs73O|g_5YKgFfL}^d76to-dHg5X4jpSjEj3R^m`&-|MbY0owj3%E29`g}EO96#--Sa9sOra% zQ{Sr|?*ZM16}KNt-R|$#K7?zvkNSsM^;4_XzDw>aaYN{V4G&`>-LS=5=rxbIinWM{ zZbOcILbnET6eO8<*XPzm>B+k#T&ndFv;xt-njSWkK)a*G1DO<7_#ROX9ubPA{$BhE zY;nqkkzOYxF{%zdJ`OG_6HRH$fH!8%UeHcDzAdMhG}L6^3;JMd00F=zz@`Q(*o&KEa+MFER^`rUSO*161F zpvt(oe#<-Nfa;hxR8ymd9Vb>Iq=f>94v>&k)c`CV?l9n<_H zuzw@IgoFIP4nsVGQvK}qkAof2y^FCuFnw|kx zDA8L${+&6$IpbuxqccffLdzQASGl@2JYK?ta1RJt^`Qpxvw?2k=%agTSj<5Px1L>g zNP!xTlF+G10qnl)Z~wj@G`7h0@dRQn8MvrUOhjvfQ*g;4mdfiJ!+F!T+>`>^ z-`}EV@B<%$=)=e-#pwYfeBTjesOf(RK$efm%|2f`f8qQ zGX!7bgQVJs5H(R6oy- zrOYdfTU6g#&&?uGE>d;1KU83z5!;IPwR0F zTg1BD-~$A%Cf~@#Tb9^mR+I*{_b)q0p`;k;z0N$?uJhzfY1%4%Z0Pp8IW*QEf1eO< z4@#`FilYjA_$vaUaMvt(>YqwsE;P%3gl%5*AR+4~<5{>Rws>FS6u!XnONFd~+l^5& zq&j$8KWMX;5L8%A{5^esTxye2$4&OGBFA9Wv1~{)w^drH+oKwqK)&>b8!E&1VEs|4 zpz~9ghC7JsjeJu0ncrzP7HV>NRll$CJ+RsbF@?!7X@4{%2J>iEMwj&0l4~!HtuPM^ z*s$Xv_8y7UiUT@S&}hKZRgg*h-V%4WDk-d0dO&f}t(fZ%_9rSAS$)ZULIF8$u7HP+ zgEgcp*$run!$xW~HjBl&+?ovJR9ce8x%86M^syd(p?33MXj z;=SZ|+DwS{;Pb}D#HHTi;Q{Rat$@zsR|}PbmnjqKU&Ym$JHE1!bXyNbNKnMgpQZq~b z&d@YpjiEM`Km4CcLL=;=wHv2+&Uzs(`26ctB9}vdV^%$u=#`HpPlxy~a!Bdr(<=mW zvk&H2K65J=D)0e6teB8%KaKZ}ClX1yiWQPC012Q@gfGobgue-H38&Z%OXH^j>pG0+ zooiGcBaq)ey!)UQtLl@lG(W%7^YqY>ofYSJg!_`Yp6?@r zhI!rilM*s*tHq?7YWWC5B5k*5RM+VR@oKqP*ag2epDF%LXf8ROVYv(lR|_I(B*GUB z?NnMJKK=QF7nK5uu>8jzL5FTWP)c0+l9H0)MeY zWakpL|B56!GX_~^eDY88`I^%I?`{xY;aN%@=NfZjvzrmFaWQ|Zk8p69u$BJ|uWUlD zGxp|(onm=KAmG%V?CU9C`@X&MsE5iBG^z`hr^cxke;NP84$BeKQ5v`Dbd7VEv*{Z@ zERsr;pH(mgC>xHgRJ@@>0Hkv`<6c;z_ncfyiU~t#fZ)2NlSFg&XV8^f^IL_DKpok+ zOCJA(aizlXfQ#*1s|Z}DNVfb?O#40r4*7RhvAZ#jA91Jgcfc$1R3(KM5Txk`ig31tQtZ&w))6~-(975^ls4Z>u7)N&k~h)zNxdk(teh|`BVNRM_2g*}I9HCgM1MmnxwYqc&uYILt` zK|MO`Ix1occ6d+RBs#qX)&(6Qx9FKQh zwDdG8X*={o<;we|YG&4Ll0QQToz5yr(_d~teyu}-~> zei7lqDQuxrf8G6mhtb^oQmmQcxmr~n^fsiTia%swd;P_W;>{TR$|xrh&XjWS$ZPP0 z5dw?Vp)HnWXHmY*&FzHO2bF}e&QE-rK*gpVigfM7*tKSRA?-j?lx@5Mr^c#vJ23MD(LmmwJi|bnj7{y?%-1x3fTHayZXAgKbc+y&Lvpu+@ z`?p<==8AvP`<}HT6i`2>K<;dDVFr}Yqa%C_P}dmoM2_9Gc(UDSen5xx`j5kW)@`G- z;!nKx2uiv4tu(F*q3D{-)a*|C?!ZCD)99w(W+BJ5OHh5-7MeY1SHNWZ(19vM3o3@s z(qMOV@V@k-`!AE0o{m})3Ca40((Ub=VLV!DdiAm}ERL&T5ytGO7yKQJFTOSyOoIF> z#S=b_YOs}4LHYvu&raCK4%aF}e^z5L@71zl5`QGYoiz2uR~h;i&w&Eks`1C-7FeDj z?xTL9*gn40{S@~}c?EzPCsm`rwnUi2n+cW1F zAu>lfyHTy+45ef&l*IWM_o~^fQ-G^phW{AnZ5&E%uj~c6Ve}oa(A?`ZyTPM{eEx-_ zr;=NA3PUy_vJ6IQ-lQjhSou`dAKbQk&%KQ8mY(igvBgNc|GwJE9vs&FAo;6bv-V?^ z;+LZidjn~AJ;VIurD>!BuzfOLqPlxrsu7of;}3pDumTY0okE|(v*)?DpqlvOtcwFa z|12#(33Kd|Nizx2Mmt$C)N_Su7SNtc;*(2@=PCIlqCPCL${#&U>Wtfe0DN6ZR5WIH zi3vg|E{d_jID~+yHgr>oI>;@pL3S6U*yWstlF;~WbQnN6m6;Wr2_CwRx3*c}x-EGs|l?E3=X)S?%4vn}3A+yWoVk{bd<#HA6~lrXAe`x8q< z@5YwD;=g1esW|iA-KTQ-fc){25=7|Q75AZa1^fxA7yTe6xU=USw#@j`aGL(t(LGS) ztbCH~-FQ1T8)#K{?!O> z;@PW#CQ8;xt%+sLIH1MZBxWhm6BNi09cU)sl!Pc1;>e1ixrGL?$aim|i^7^@NQvL@q%Qr^I?^QLOzeRu8sT)?-glZstYe!S*Mo~m!n$6nYX*g8@m@TK@SIK z89pM?u`^(7<*UEFE%pR@`BuP`S4&@~31922iA7Y4-Hlj9RG&2j4`} z^}MBb78D%P?6$WP*W8z3lkV6cl^a9H`wlzg`64SDQ~lDD+i7{bDZo{*WD6J`xyuQs z#K-W}fP|GH4Xq&{3ANa$k!L0fe$uDTo$G@yOK^@?Gtw_^g#&BK_i_uBEoF@MaEi3$ zel~TJ(^Tx3Q%!Oqwla|3olC|S%*J+XHZg*{?&NaDqiQcq`lY9< zST*zY(sjfnyIRKCjdt5Q3f*B2HWIf>yGo!b*Jjvi2b5*J7pjCh>g7322uj$@LYJR6 zBbSIMDr`&qq81-tr875)O?H#x_KNyXbyWji0OTfV1*iywmM2Jg%*=d8W;12qL1x5L zyqkp<>{Io?Y~@4+hN~H6A@<|RT9-DsFRP|3EG))55A8Zg-=1{iIldd9l(AT^jPnf`s?Z|$La|Pytzab06B{xF~Tp-sJ&dmebml17n-l=%g z1baWM+H7Rj26@qc*M^Z5X;)!Kezx15$floLCgd$a)XqYJ^$`Q$wSk9Mbacg$;rq7cxi7 zrenZw+jCN(h(uq|P0I5OkUraSeiCE!lfMifPRYq7nXGE9i1B`w;h2;`RIu$%*hE7X z7pc}mVEURy_G9-BCnfab`Y&|^?Ae^xhJO#3hnrLD5i6oD^UugXpIi>Vj#19>F-uD$ zuq(T>9w)4 z>skR>qJ{*$90~TRA0nTKNKERgZLh9`E!~0+9M?(p5P3=EU;pI23r>Zin=6u_QG^y# zqnB1T>vGO_6;1MVKgcO$m%5(=`*8q9Gt`F`4B1aO3DM=Sc@`$`Z>I;@i=N8PqMbp9 zal6nvXp$UN(qGc&J)?*owJ-)3SD5C2A1ELL25nc-Qt&Zp0Vb?Duig?oqwu)#7kG{7(FnBm>)Xx5B^Z>*|Az%#mW`w@V}uCt?yM5ltS{ z`174J6K~Wea_hk}GzfNMr^91s`f)_tI_>MiDu(47$g`uZK}InH#cp+I0JuSX;-O1^ zF*UMZ+_irrPum*N*>U&7x_%VpExY`U{m~NJpcY|?`)>fRFgVQ;`$5K3$2F-leuFNY zz+~aD(sq$ z23jRn_W)^i+>zvUu?^$Ft}3*gZK3aYNkS1_ee5n?KUEC7c(yY5+NNsz-5x}lxC~B0 z^Zvr)`~cY!;2VsHaqFm}V`xYIA|OAAKbd_iWi_<8`h`eNV4qoot_ukLnxCo+CFlK+^AK?TPu0^x;# ze!yAvG>%Ejn+MVuvdXd1kHWCRB+Svz=4WZl-_;PFi)uv5tnnY)cM+2yNn z&sCDnf`C?8?;-(Ejy|IrT|ECm3)<~uccEj<983$&rO`2#&M?7r1bH*zP!kK)69okC z1JfYa+L~HwsTW?9G1NaY^~&-TYfE~&&z`@0nC34KxXBsCP%bVf)p#{K)m zriLilwcL7|8U?X8MxXZX&it`0xB`}>L;VX_V3`2P+fLDl_t+;wm=+QhywKJtL*Gk- zdJo3!{P)~{Qdkt7r!xDyOl0EW_!eBUK6fJzvjeW@lD@m zRi2Jw)?TS@n7Vu;wB5ZyD+t2`0JdMd*L#0Cp2Frca1ns#R|+PxUWK*)npB7zs6|6x zyIGoPO?qFsjPUGx9Nfj1?IlUq_#mTWeL0SPXb~Q~Wzj66IZ(d(IURllA&3uY4}aQ1I;JNCDbxz3u+?ri z&{@Z)acv2GUh;Vke|w|tIy|Edb)cQg?V!Zn(=tU*aJKF*<-!BTbbu(PH>_CYDbJ+J zn%bkFt;a43)hmNazbuI8+*wj1Gx>Nf8|H8axzP>8BuzP<9X&~j;J-x2rBD-gxkospEosCTFa?nSs^BTY<}L zg(IvlMXSM^jK2Qlhg9jY9r?qvdRZDjn;F;mQa8~j!EA&|O#laSGk^8vi_*6E5dyQu zvtM6~=|krbnlxI(MO^T%4lH>sMCgLM)nb52yQ6*Nt$x6V0kfu0&l6Xw_VX4$@ zfdX1!I^XCW4?3@@*tHE2943=*Ic~+HqWyQ!D8Dm;bU4abgy_P{_jK=G0`{N5XM4Fb zh-5oH)q9Rq_@AJ33gEu0uwM_FIwuY=tH;#~ETsOzXYdYbsS1^#)Z8pgs1%~6Px@r^ zQ}-d!NRx=;PYpI%zJ&#q7f9TdnE1gii_MZHw>p5F-3^lQ0p&SbU3W&WqhnIf0)QB+ z20DZjauoM1`~3!BGDVZDz6+t(g!OyToWsR*Kjrt}pt_mS#f$J8$ZtNkq?i73+6VcS`LC!)t|{du&Xa#|c8% zuazU$Z~K{AqfK(~Qg0y0^HKz#M~RDqeJj3RTtp|$Z!$Br+K?(dEr>L4H$W;L4CUmi zkQoo91B2Lt|IM)&n;@mL{g%ybofCXPMVw!%A`{{JJU#N9JybjQAQ6)2mY)CU(ns14 z9}{v}+8kd76V?%NCLjG7k3rO0zqE_w1*(|lf^w22D@qGOS-jm4(!bo>}fhijWXKUDHFgNQi)YM~(F`JEHJFpij0)K8bNO zkumfPo7c*=?lQsm0*jDo2ASa)8+o3=z?WOd5qwJZ3)5E)<$K3sBUiIU8+9J}iYmt~ z+%KAUYCHTr3997zT?2;o8b;YkrV7E-rd`aY!h3sjkFyiKj#z0(=&A0=>qx2Xl;S6a z^u{B~Z)Oe6hWcOc+T-Fsl?Wz_r$ZE@c~p?IfB_)b<4UuVdo#>~Yd*=ofAjfqs}Ht2 zF)u|Vd=t8_mWI`_FO;;tF=4sqVwMvvgTQg_?GdSIaH)hO&YYY0_@rg#KU5ADsjN>S z2S>G5glrJ@)~<1K*5mP_W@^~QH#cJrFY8Se2ye%Fer9C<{x{)49|${m8SExEsw13Y z!5J)SQ7AbeF-6ltR!i3F9>(g#p$RBesKYaOAKK#l<^hXixy>4%NVX;hiX|GN<7vfQ^)a%j73TF-|y1Df>|%tX>>GWlt92@uDOa;Mv!c%kt}!p?UAlWu=bl$ z?Na>#YRy?tvAW)xjejcNOFKGaxgMa$36n|hx~Xmby%qtOCmufUemiSQm0cbXYT2xT zn3Z40=7>LTA%+{SzKszBjIsY&1&(z4Ixo1dHIE;5W7W(l%|NQ)etk)J$g*x@N zJo++A3eTO-@6PDe&n^q9&g?zQ!IZ%Tr$u+%L!tGoiAY%9xKNMbn*6xSn|FOzz+P}E zGPJt8axLWvQ;mX0bS+m`mj=Bcg;U}x-duq=HI@4~6DfMWNBwwp;s2@iuU!`wBK)%} zppm(=C`j!Ub8*oP)N;}tbCjuz7MptaP`(RT^2A|WEeVwH+`|Kv|8e7B6KUhZkvf>^ zRi0Z?r5vfLik>Ad^(>PGVvvbO3~!J{GRO~apLZJun+38{IqJg=;O@~pAA<>&$WyDu*`U>|eCxCgjU1w^13Q#DUG- ztf-sM{K?NZ%)^JTp6r|DoFlBefooKTzfhadYXU++NwYgRq}~!>$?J<9Qi@Kp^{JrM zbpf1&B{-tKDvcdN)K4Pi^~pc;;z`-BuQ2~p2y1%tb|XN3CGt-6!*p)O)+r?ejfiAi zHOcWiZloYGRdwaImEv%)0}a_giO&zcZNVWE>;hU&FWYmyu!c?}zesv-1g{X=b9CM# z?aD4yf#-5s8C=e-xe}~)9x5nsL&K5!4dO0PTE!%GXDs^&O#9(vAa_Jx=>M0O8o7Ml zhjGK|Bi_HS>azo^;qATde<`3}9Bj2wy%GH`T&WbgT=0lCShmu6!{pbe$HCFOE6IKyZPZEAF=Zy zddyzPKu$tSb4#gJ@J?ZVnIK0;<9JxLUiZngOrn^~+H{oeVc%qf{a0v)^j+7aFl$u# z)lz>3r)mOSk9e23o;m!|S-UaW1yOh;ent9;C4VE0S0mwxtJc-~9+4I{3gxEP>BZLx zT~CZWS1-4c@aoa9@JhSXu>(nI)4%1v(pp2r!vYg((C)HYkGNp3;?you7xZI}uVQzt zizslL9?>Q-l0*#^dJrPEtCKOLj|~6HT>Zf}>)QpEBk*En?evoe_nkF^n|=)^lKH*H zYb|2)DrB6jX|E3XLnh|q5`(gn#zFQ;@+y+|aP{X80Yt&cydTT<7_);Ili7^@LK;ao z?5Doe3NBiBKagQsv1p^M>2i^_Y*n$|AN3m za(oK^oy+M=N2O* zMkQz%BvwohIsQbqJ6lC#xl8EiPa9tG^8*7syc?cr7~|rHq6zZzB7AAd=A)9E)~51& zluWL1#Khz=bXnck-YLX@Yq#Zw9j9vdZ)~z_ zm2eH!+SB5kiY$~a8=;}4Ef|nyh-`(c5`II_p7*ot2!u~2c^;zX*t~7*n`C1g2GW+L zZ_^wG9iG!6z;V^tumoIRNoFMLz9c!-{Ch2>Wzr07%n@3me<@GpcjY z_O9*T1@A33W;k!2%D)`1AXY+2Fx#=d0{3lgr=Pm;(FLQ5#Eyx265xQ51sIp$jJ&+n z-@(0jI?wx03M2oV>nD9%Kb}I=VDVik6871SVg)}+RWl@4;PuDbD2ynv1@la%K%cs* z6odlredxJj#lYyIiYsE?P_l5Yh+&krzHS!frLcb(G^1bzWXM#g(!~EFZ=MT8Fm7`S z53MBpttHy&gs4ekSC?z)6JwZZpME0is%=~h#~r6NRE5!7*tWU zZtQI9ANdJ9En5Y0aQ zjC0|k7q>T^K(LaRHid8a!U~pa13?)isVg#G^pa!n3-x`J`rub>Jy(H+9s*fr7SUkp zwzC~Ikhy(w;=k*W=ns$Sb!8`yB~ITlAYYB*booPiv;;+_DWB12>dTV(4wYfp4cahS zKq4PUf#oBX>wbOlL1B_;kiVX&bubQhGjc3;mW8a^aT`Qew=_+MZoH)P%-?nAbwj!6 zD6wZ5I zIWaB=Wdp1q_2HU_b6F3YGWDkNehj14en+c%GP;0leD7^MEc$3@7dS zV&tHPB+X(jV$Iv%(xasUL;ChtCK15a&)5$lbW{LetEq@pm{@U1>K)gbe+L?!Jso{j zlLXV5~?I;>6TO5d8R!13%m0z(ZUIaM=;4gy zxuf?0l|R3bVSdR8~u^#PHA@!rFw^yC(PQ>XmLFj=L;H-RG zF1h136}Eo#Mc!wVhnKE#VxsG{MT1%SO$oK8Ei2b{Cl`06Dlj!zz#^0sIJ#WgXAIE` zCmlb?a(a$XBb43mB^??rd<*l#|Ip^A$j}t>0@g=g@{w@}$w&tT>AK)c^Pqj;T@z0R zZ`}jivhiQn(6h6hl)tLusr~mpfmBJ()e&PbmnZKTH%{gXAmkatjl8fcJDBgF*%KIq zD?8xRQ0q~wM4;$%-v2)K&j?Y_fx%mhT%i2mzOjq+EDpzW@h;rfOJ&gh-D%X>{DyxC zI$~E>I05o;kf3BcD;bf3FLvG^e-r0gs;*ae%BWx&uLmJJ7*8vBh%j1emdqD8WfH>^ zNsib65*~k{g}QzbC&iNsJ?a(=f9pwoC0V!P0(5^q-BCmirSoRQnw|Uk9e$hioRthW z>*e|3625jrQ$BDx-iVS}oHTZl%9g`GZPQ?eo9vMp!GG=xUcP z3zk=ZN{iW+MbSHcCzH5pv9?cR6;5=3!thN^cSKCB>hs|n^}HLIEc<$ezdTbxV{_=D zd3txe2W58%tOKHK6+8r7db=*G15!+_58bDaYWb2$r)cZyVIh4o_o6!ZvYRZKJb>)( z-}g$CwTb2W7Gb+Rztr@4ZqSMH_gM4twfeg} zFr1yq;kH!)4$irfB-0=H=5@(i$;7VnIjS-JA{;koAS*2%PItDi5^#01TBk$a0IWx~-eVuNnyzim5E0qrzBbt;|M99Q0!hUGqO(1pUuesJB zk*4juvh+C6UVrjNHHE-rcDLjhz4t>Pd>*IuV}2A<#+rrTvphr-;!5apI3K(-p& zI0@G~R{54uOv8*nkur7x`4zNY2jC1~l<85SPV&kOFZ_Djqp_Y;dnNg;Jt(_zWF{#` zb?%AlS2<<9?js zfT*@dvd=Nr2qkT28A>tB3*6D8wb%Kx=w%4VroO^m@N4|eBy^~nH zM1qWLvIC$6HFDdyobC(ARc$3**ovi-^ql_*CdJmVBkzrt6w;|m)ruB3)*(b4TE2Ux z#g$Gq7&n&k&Q<(M0Yrm^%sV8nLzcu~l>BM1QSO9&E9CjHkV9xcoYl$a1X0`Ou@v50 zGbwanlL?*1Q@l{P17Ra@$;A90*BL_u;E8W&(KeM@|Ts?9LIT1@Q2;E z&snHHL(~e$Z(Y)Kqz$lq8gqh-?!wz!RO1mNYNJ1UDKehU8`Sg>VQM$RgzU85gOmY0 zjsU`i@3WzUdslJ?opNzZSuXi2beoF}dn|5+&PEjWWpO~FJaf$etOvacP-_Gudoxkv` ziYDbv9VD5uN&JRz6Th8{+)*s6^2-wq?QUVfx)5bd>i)@{H#lLgBINp z%Hv^YDJb~u96-0y4saaBoAkil`;W_}$-Q<4hD~C7U)vifgXiKhfTD;lI;f*;`Ry9$ z8ux{q!>&B^1(^=Cd(u+8Upw0TBvaR8KbHJ@TjSpV+`ZiE(~JTnf3-%+Bf{n3DO=I^ zr}0+q!kb|Yj>2`Z?rnjui#+>#>coN$R(OF zzOTv(FLop=7dAz&1y|+tVGVIZm$td04EH*!H~vWztMU~22JS((hp~^w^RP%zm-+VE z@OnEU+(HX&!UJ%pT)^oO2F%BZ6JNNXrXOu&Z zh#hpyO_kmM1oSmS90eR$vtz!{oi6A7=;HV3dN8H8pb8f>F@cP3I3;T2PMXo+*?!;I z!FpLy)XR&E+kgi9)ZPIIx00i5zm5wWoc1TO&0%!Bbd>7YU45QuVbPs7=b2Zj(p6!l zp0zGLwG}3o-mH$gJCkZ|IrKKzdjBp#8X8~~e4>Dl_c`czW}a%NEsySn_Y~CNv2S-c zr2j?a8r3b$t#Fl|b~GKoNYkpvKv$;=`ZG~wTQE6ecN?n63_H>Aoxd7j0J=5QoT#V8 zL<0f;G+Sf)?)fi)z`n_B6d`f;W>_ywCq5-~CkN{HyOG>OQnZTQOW2@vG*bS@vrwL! znfBVc7P#>j;&J)ICy8wRF0AkFzyAdUmgl%$C&=4_A~HtTR+4fN6fTL-@9og3oM*-9{gMyZ z{qu+?Og#IZ-&cn#UhR{S^ydhJ5>OvI+gLllT;8~{I28A8tDr6=n-D2lND=i{XD1|PIf;cj`r$^BJlh|P`u*wC+?J(iw`b6)&S0#fu4s__Oa5} znh!m3?}0Z13TTFQyz{uJm$VkQ_*wNZSBp`!4 zuR)XYS@)hjlPd+Q`B84!gh8!<+f1E;2Q>5kc>S^WDp{8kEa52<@sgfVZ(_;%z&f%` z+*0*2{-dS+-s<$5uluHf3&|U1C zp$ethrgcR2BE`bV)rdXdt{;aDE2zHfd_R~ICrlmg`fhxD#+I`F&VffjirLat1-5bT z{V}Lr{h#x<#tJ4bJ!#OEZC7x{nL+}~-zEl42txxb$aH#b8<4i0&OR_vDwvrwQcOd& zUOc+3GE_x{yqYlxj?6u}`Mr)*c1WJ)k62$Q9VkP~yBbu$WldtvmF?F8FSzcOL&a`slO!i&ol55h{AePb z+HqI0XneAL_sKj2>qf4J}fJ_o}Be_9~&Jey{4yNxDwUz-_|MJc2eLJA?)2@9#C-b)u2ej{zWz9o@x3 zyYoacn2l`chs-iT2f?bcTw(}<^2~f`uAO@fK1Y#Z^c;VJ?N@_X-RHlEuJM`u?d2og zzHn`t+fjpFi7J)piUN!wksJDy!H<3LaM9B*#K?sTLWvgU7kXHKLV0^o>p9#RMIGq9 z%h!BLcw+aq#h>-~#F!Okag^&DH_%UoIaY@JftwcyOgJW;;I@$Rp)h{hbko|`f?8C% z{ZIa`o&Oox6qjufI;J)aKR4y|Cc1*J+dz@->6o~`9iRMh+DpaFGbZ8xVT136U7F`d z%cHX~-rinjUek$@J?Wg)qsEKC#>w2CX8hz?3^8P4#(=dlr9LNkq#9M9WtQ$%+DiP{ zZxh`-`Aq}C^)9q63$dDaEwbF01>B&dQBbZXeD<~OuG4B+*`kXXvk-n(kOtNAm1cSO zB#3||`IKec((R>1y!swO(>XamZ=+)=>!O{THo^Pe4D#IN%A4Wh7QC%tc0l}SkB8}O zEiFBO@8F{4oFa_QuY)}$8`*)OO78xwcqdTeobaVsw5zV)`4(#pk2BV=dF?$@=#Dc^ zzh2|q-XZHhji~PnaiuEreQGh+p4*jT{9rNHS&sR&r{W;%AiapOue6=dwQd|vMx#a^ z8oo7|!KcCD-gn(t%~?ciq-+7r89A!RpsxNk?YmF03(x;~0eG+Z7n9pV>~y$b%o_Dq zleqa)X9#W$UYhKqH8puA11FEF>YBSHb4d@6I1Ct^ps`<3N+k)C(xIqSMOCb;nv+$N zyNtr7u=6Tu?LA`E3OXua6g9Nj5Wi21ut`1i)}~+ck4U=@OXLHIo1oJi2SCamuCF>D zRwx{4I!%J@!lxA@>Wxs6qc`kQO`bwmJT&*Z3X4ZclbpBb)?GYJs!38P3=UTc=1AkL zxp+snR-Tnx9KJ0Ad*bLF&4P$7etc}E{yQ77z^59Qp+|2Y0>Vb|U(~BV-cfV+rnTQv zjx*E$fP8I-OyPQRAsCXr+7?-nZQa5BM8Q0QU`oHUO~>D5p5^s)JJD|Vl!I4UU$<)| zkwjMEUf^vsHi4eN$}u9vX2sqnE-FmuN_Ql%v)n7SuQotMxH!MAS!!i?$W!6Ml3>#) z0J{@ZRNAd?&%Ut7V4kX<7A8^M`3acRcKpus7nX6P!D|Q9%>Ih0bomF!xW|*+W9Iw= z_YrUpezyuEQ7njgyir&if#tF15FowU0kFxb(X?1UI(Qdnx){E$9jRw@YM!m+N^Cya z-S$gjE#p}r7@PV8b^V8`(Wd$g>ah<6lojKKU3-*sYs&YzMJKFcOJ2Mn5@E(H{yduX zo2m`f4M=gLdD@_??kBNhE>22zd2sKz0a8PfSH%Qg9m}*bO#^25e7=2e4`0y*IW?cK z7a5U~+Q`K4vWT}q2u&)2_>Jw_+6oGLVK1>FWn7CW+U%C2J{;-K{nAZShk)}gH>3|B zhq*LK?yeX{HXXrcS;Nhsq#LXl5Eb}pnfU|kXx{aj&>uoK1YVja;(sun{y&<&DZH|1 z={D&k9ouHdwylnhj&0kvZS5ExTOIG%wrx8%=bZn(t>^j8xvFZ^K(Ok5(uzx835(uS zEy6-F@oRfL#~nC*b7FTD6-o&VF}-UN!B@9_%$S^d^+bO3WcVjz|QsK!0sV5 z{F45B5hfXX>)uJ&J8coFPc(^s*ir>H4?QJ;()FL-L;It(YvzsGTj@gJK*nZ_%oqIk{|C_j)jI9ZO z@=vY4lUoXnnjYIEZx%ObJyBfm8JlH0<9X{brl3JrhY&YWovI`oUEsdv(l&tg=;|w1 zUEraYlU19G!`0Dy2J}(Z#Qf}_Gzbtvxcpm43f&1YHO!RxIJWHjg(034h1!@M8R04c ze2Hq33OvW;wIu!>HjJ>BJ-#y-D7;<@fPQ=Lf6IzO_6!sU6Hf96d@6pn$9g;#llx?1 zd_E~*Hl5W*f>Bo3+hn;~G0?XZcaz$P32iVDj4hFnj;(nM=R&r2L9F87^LgS!EC1@!!AU<_f0Db9OCDIkwfz*I>%Pu;VNEmbJMpPZ zubbi<28kVBkk?7N&Bpb>#w)*JH%G(pu`<1T~Px6-P57jpJWf?QY zYO2@=ilV^Y#5AGq9=PMTeQfP06 z7tcpcu|s(9y1j`knk87zV!57gY}UO8Wc{>lulnlcrnLn*5|jxO+Ee~s<5-<~aB*Jr zLe+{!MLBHyilf#n+X%Ocgo)sxPZ%29a;k!6W@bQ{6l=b4KcC(h7|`75FzTLb=0hP^ zX>Okiu%Tkj{}G9%U(B<*AlLLk>|aUe2n}dyYNSzk{uC88?u+m~2cY~LGk7pqTHQ{R ziW>O^4YXX_R;hf2MO6GMjzs@&3z7V_z!nD8{DjDG<2&dpL#1dJ$y!a{+;dd9m^MC! zD_&P15-H)NrxVx$4FD?<1K} zD*+iaL!-G2hvCrZKP*!i;7=)aL8S;acGr4a4+X|q!u=2WOZot^VFwRQ(Pb1C|GY!)|o5h zw70yhjAdL2VlCx1B6#6pqZcd&RryOaTmDIB+dep_rS>sU9Pfv1|meLEV_gRhH+As5=%@dQa8X ztGRMU;enYI`TTskIeI*=S2wcnEwRbwU&|Vh@{b+0>O~k=kNCj=I2M-2$la{9Y@nq+ z`e2(A|GOGfLK8rE5Fu2dJI?8iI<`o9@r|4W-z7Fq6O!*<^|?whW$mq{*V3jzw5o8! z+u%{DillC>As=D!%}_A)DuNYCvzJPT!kGlkyxd+AXL5|_n4H2OpPOyDTPdXUT)OOA zH1W;3fXG+Gibn?dyy7BrFRC2gtDwd)lBAHg*T#=Z*xI+?u6pUt+ZawFeu*KfI4uff zNF5TMo?cd`MR6W9hcvU#(q+XJ*rtK!+JsRhWxQrI?T{8HOczQu1$x?rjHF2;|V zEozbz$U_JxfpMYZDSQGVJ=6}cmM^Jw%Z_s3GD~X+)fdlzJbzXkJqD&o-*ic=^(pKq zg;o$>i>!9!jYiR;R^#CtGW%_$JhK(ZtZxP~S~sS5*gS(yqvCz;KQV+EX-49od7V*c za?kHUHO5v7Qe*qy!z#0hKwNkK7J?_1()$^RXUSWqp9aTG79qg=>lrXMfWp}-5#m#~ zSfl>a{tR_23!vgOxPTRY>^Ph9Q55CY*_A|llh;pAg!XmJd{Jt!qQKrBFq>18_7LN4 z8xq9znp4d!B+>!%ILLptI! zAomgYG;GKUrJqci?mt|xy80&3_0P!|H2e2~+~C>ujJ%DIjhp#-7fW_QAdGXK_oAK; zxWPo(a@MsQgO^6CC!)L(m(8l%9^#%ozw`P_>}C8?2HAhR4idj(llrY%5&Yzx8LHID z!@U_Apqc9s4!1tLy!fbjS}K?PzyS?qrL{=$pQ))b!XE%$2Hvq;Ly4nH9+II7XIA zfn@ZIov1-m{LvDpo)ox^W4KgUMuF7ycl%l(dP-#0Yn9Y~TS5b0_YC~<;v3~qW|j_! z{c1%}4%T57Zv{4m{LA>LWWxL1HQ8fr`s8gW0b=eBSk7QAH)ks>HtHzZBOU5P-Z$cB z^D;iBf44-VSgmjql(E`p#xN;9|5H<%-8v^D-xyC-3U>dB94$n|o*2^N3Zx#h0&l>@ zmK%*hsxRfm6%sw~Ba1hCVYc(f!&?IqiGKy$4@vjvC}&E|WR#C~Cyw)*DtJ)EZX0bASv@X?#yH#x5pt?6%9Nr$ZUn=Q zPyZpEHairJHY_wPr^PD2gTqwIrS;7~j)3mOqc2~l!%~q?Z&Cw0I%hA;E^l&2sWdqg zAN|}%5;IthD-5rjQR**$6ZYn^9W+Bg#ZWiAu zDa1~p>X{RNb}Q_%=N?-c^1i0Qn+-vL^JU37$dE%ifq8!S=kNv|*(f>Me+a*G!GLSX zHwG-rrgDWt0d&wvti-(RTw4z@NFDFvj(~sG^x_(dC)jK8?Lofhy4r9jwpRE$%lHcj zEceeQd-?6n-&TkPO@*^#V>LU7TrO>BdAT2AusM8KupK^3S)0U*a-p$Rh;{55H4%rL zIPuhXwfu2-@S{(W@boQt7^2{hh!v;No4wH@7aSoH#00{F z@E&URD?B@N)L58r8w%_51jDaN-HL~S+#VpeYGvIzPt+dXcIRys+Eu@4qHzMnJ(5zR z89+1idQ^L& z2IF&5=~-Zc`6;+gD1MXK>=32V);A#e46*kx7C3=j;+M$Cji2sdC1$rQ8e7)6%_nS7 z4@wf*;N!$y&3)i<8JVjANssZq2v6XZ(`#B_c617R_zkvqiNC0Tjmxko-8qJXy>4yt z-78dnS6rFqwxnH5A@Lt$Wr0oTY1v|Nq6*H#5JxkPsl!A>OOQJXELM8qeYWjHR%MDj z_QrwNP+<}|EgTas{D0z+PO8i*4a}_?0nVvg+LSgIeJAbbvudf9DFF$n5iILO#x$2C z$?1261c#Lc=o7aK=)is5KWIET)rAIgU2xh=)n6ny?@vaV-XCD3XMKcw6u~Gw8_cbi z`+**t9;m-a+si8p&4~Suyoo8_P^gQ4-NuEXZ*qR%+8$E)l%AzOW(M8v$2{KWxjJKC zT3k2rUfh=z0B;(WS5}Ssl~~|DJ2#N<31(uGXgQ=1Vl^K~2obls2&}taHRy6*)f-=y zS4CBZhvP@@w=+-hwma2jBb`=5bC1b>`C#Il-@ns!2xg+R-*puJyPR$^Prq+gk9Jfc z%fdZq;U})_qxefNfvDSs4EYFkrQxoj%S1j)s*JCs?j}mD#J`e)-%0KP6IqK|$qKYD z-2u0|nr8p~9-6z1m;NDBM@1!WCN}7UV`!A)hW`->x00qnkoF`O$u4`zN44}(PXZQl zGVzE9XS>`CcLY=XyAGbCgrP0Ug%|xqqvU^j3Zq)zJeaW7{CmQNkNL9shO*S?TU+{I z?u}ZivKObza;KnmJc->?wu=Na5oZBEVeEl%)UApF%P#B+w0TWdBiz<0H?e->$As8P zMG1$doymyY-onVoUCxA!vFdLVKuqF4RqqQ>j5;xVGRHFy97NMmy-Dehk}n&Fu;@z} z{L3gO&maqu->+DfnAKNUAU;STKH!YOL%JnJ=v^@T@U7Jj&{>3X6|}k$0lve) z|7vhfupSpc2mXt~Vldq^B=WVaUfJ7uu-iy+sWCn!-*@BfCuE$&L7KCE2apf<$Ky6Y zG3Mhe>uxto@q`=MPM`^Cm)<}eE^*!mFm8mnxpheDR-YpDU)50$&Te&=J#`R6>rTxs z){W}zaO}3k$D_Zw;{Ec(u_ZqfTP=2wx_)?Wgyd{Mm`Fn)WQ#uY5!67u1xP@vvEq*M zIRd@+=5vT*f$#A(Vs3aaO#h(dK zYPz9~5a}*L4sS!l0Ke|mh^JB)pdWZ>2$iiQjgH1#ZttqXiDS6m1H6YaoCo6ejCxjs zp%;fHY72S-%72w3gh8ro3T9|M+lMz5!_q`Y1;)K%>dk3A@jFzJBKuDh=W#3|ZY5lp zHabx=ik?BB!hf->ZBTgnlAI8Si0TFF-!P2*bXMRO7H624!%Pr68STbqRgh%)Z{Y~_ zsXfKftvA|-!*X=*Y;b=p zi#Az&Ucc|t%aGEUV}izafjkM5apa{zZ0)exbv;eD_Xj21)iQ@&k^u$IH?fgvk+!f^ zk!IE)JcNzMQN!E+DdFN~t>CKY-oMVFjIMOgO3Irn&W? zOT3FV8RgCtzkF|oert^!s4c&tN4Ncw76Q72NKTk~^_z_kR&!?7AjqEtWFVFg)~dX? zcxO?fcczNC3Y>>lk~K4cB96lfVb`3o=i;yYiW>d%y*X6)EdNzh{Z|g#zd!O%u+jC% zdWSgH%WEzM&EMiVsk2;YJguyLIc8{;tG_=yZe5iZ3q(C7wY)NE^=Aaxs}h(j?_{A6 zCYo%P2+FZ}o=@q4E)H#ZeH4)By9w+7rTEIOw9{a41#BJJBA^uj04T|w+ zO!OknPeBnQHC}K_^q33KCDRn?T7j_7@3vbksp0S3(kruTBv)9tQ3ai%rXOxlIJN$( zwYeZh8{hfY5W0mCMW>`Hpd;DMh0uT>j=3E4J%m|Pq4@o-a?3L8AmK!ZtM5-&2t(>P zi#-^eT6R(f%(dX%zDD)uI@$^!MUBF-}kq#_0 zY8d*U!Tyh9^|vdC-%UfGQk7&2+>Nil&gYlW)!3fp>gLx{xm>@kLZ~Brakykc?le&W z>Y$Lze1vEcu~LDErQ!@xh!S$FF{Kmr9aaHS`S7xSI2?Ml$9vA@hd2LLN1l&g&61DK zSMJfL6W!RV*G1QoQ|`?N#w8=F=8)T?gh>$F(w-9h78MbNq!~aW#Yhqq^2Ys7n~BCN z0z!^cg`$f42hFeji|1s|&|3swyJ}(DODkg0yT4rNEl(oocp)j8I|?0y*v7UZ zuIJDQUoms^15=Y{2z6i|)1)JM?K0FC5f!-Rm|br*y8r^mTG}73qq@r!+9r0dzOyPC z7XIB3efx1B;UCf}deyc2w^6t1?$|35MavC<%UmkCn@V~6@@wWpCrhW2@WL?HVIZL% zgOlR;(UY*X1+UygXU|jrqSWpVRN8Vis5@tVN13Y_;yE+2U4(QF^%f$7Pv_|IP%&w% zr=o*XY~vcOPG{pPciMJgPA#d}Fmu}7sJFFw{P~Jv^OZN}k<|?9jsKHxdQzQUy72`9 zKai+WQ$g_q%qSkEy^#XkgEZz>l7(un$*VWsH4V;w0`JZ&0bbSIOf1OO2cBqkWcB6B*y8$JKF_QI6sVZOi4yWi+k z?zb1o*e5Ux7txqcFYfIYwDbv6pE!YeK#{X4?P zGW#>g&7D^|+#%n* zJtThyHt1N~g|Gp#(mbaAJRJCM!4H{^{@xoW4VzXQ;(Bsq-kC>xEY{jW zH(E$hb%hMTxi%VlPk5*G{DH)K8VKjvPEl6gmW0r1m^g>C*S!Ipimcu$gqP9pN&A~+ z&T-uoi=VYO2!wg2o1&EIyb_Q$30$Os#|s>=HzGNBn0H#g9KEp}S#a`YAU0Tk4Q=QT z0IcPL6`$A!2=wBnO_P&#+k&ILE&VA7sa&A>RJaDhbhO1)rYK-HPfYe8i$9rfHFZ%A zOUU0DP~4d({K05E1t<@lO^AHG<(2bypT5ZG|Mx=tz!G>%xB;4L=X?!UzEl|lS+99RGkku$E#O4%18!y)TYMU?eTP$*%aaZo z-QV>(_AVD2yLFI(PRm&LSw{viySi0Nku!CpeNAfk6KrIZ94G7#^Xmt{`B0ClzVC$H z?P!BZVLs*Tb)U_6OQT^SdQ!JV@#N$wOaNx8K*i$5$zq;KzhlU+G(9x>2~5>-K3wBD z1kikisPz%#T5Jv7Es)+aJhGv17=hjH;__cQB3Q#BV`0Oe`EU1)zl!3VZ8Eld%_!GnKtLJa)}J zJjUA1HV&@y3hVI~Emm@u%)s3YPIyh{BeT{r7m6QI3Trveyy%m}0QJlp_oq7O+^iWV zsqqcIBk|(_oz_RErR<`?LtKZ%AXEO&V+5OjjOTQd!@Bdpp|0)p!}e>D@B`qRMx zzWR46emq4|4D3R$v<8Gcn+-yHKiS{L@E6mE&b4YIbgtN|gf*~s!Nf{jaD_AOx7kS9 z{hFKw3WKBPaE|;oOhCBv$PTl#7ol~?I}Qzc-H%r;Q|E6d$~$+%JizNkOiAP-R_xa5 z{<;0evT2^=D3{Za6_7X9g13-%A^yKY>Bg!zZ}4>IKKBwIK zJ6))W7xQVr^fxb|^H%Vb*iJqLu34Vh9^Huc0Pyd$+u(}m{G=IoHyT`5Ge&_g>nFO< zNCiT`Gyf}ojFj$L9SSo2H0i+)p{+-22{Bicg>hr8_tVH!_Kg-l!BIxPN8?atWzl*% z1W~ObO{VSpZ7P_|yO9#}vUHAY7qON7XqzU5w`nv6ojW;&Gd4K8nHm`)#;fYc8EEX3 zK`LAx5_epwg>GKtbXoCOhCJ#bSe(vpLfCf%fmiYHMF3ANS z(_wUF=-v8fk~*9D#Xu)&;Vz`R)eh#OCV2DJ50fVbbq&WCwimC=ngR7D`dW-aIB;IV zMbvh5$L%nh($yYRwAuXok7PG-fR{Nl>6}I?$QU+SxMKF<1#E+ry=Am!gBbWk8)fIO z?E6P2u@{@b6oY?-BSiesq{;yTH5#zGhBPtrjW!M)O!Q|I#*Ap&iBx^-S4@lKkV51N z^}eqioM}^6GuRXvL3rTy38?rS3#m24wCAP_{nY!4!?#II-lZwV%-V`m2-IYWVym(@Ar zQLwYo7f8*S#}+&hJ$O{vEId_H!>>`B*4zrJ;B_1%usQzmqyKNEJe)BNvp|Iz!NSo# zkhsb`Jzf(BfgbTEgD|`&hL*|e-X75FJXfq@jb`ywyR@JByx8UGJ|tUmg%)?WM^vn z_rD#){y$c|7e6*zcTUC2-dQJ38z1ofOejg^O)FfG5h=f>^7tXrn;;E*_{TSdf z0!5vB*QL0HV-TWORD>S8T$vM`=3jp;il^9(Pco>Wx}@{EjVhZY2GX?2qvHlMQ$R70znI4wcD?LUbrRp6_LtN|ON9`dYPc7^JNQU|0xr`rYFS=%$uAVW zhbme3PPv&f8w&Lrw5a-27Gws~9y+P~H4N*?;-%~dtsq|wxb`a%6rm1S6up&!ST$b| zTKEmMzlXeoP-$#0v1G?|$VaV3%&V`KJ=alTC~N6gw7bSTmK!tkUbTdfgAtL}(R=i` z{IoZjfB@Ks+=*Pn4KF`E=1Vr{XI5W6uvO+!KDyfPl8Q-tiU5^F0xxBZVc3r-@mDbq z*M&jDI5D7-8RoO>tOc>$T&f-zK{R+d;-G#T!r6)53N96Q(YMTC>yr=A%0-~qdiKqg z_|n!^6|`Ln%#TLpGBUOHcl#Z{YfJ`(DIp59p5CkKVv(7xWkJqM`t6|a)S^dBFQ=-Z zsYO@^H>Gw?u%md;gsa?kw>D^_*$yiLnPhX z1I&HD^h*a!1v=t|N|zd_3;DV&g~sWj->;-WvWVjf4_k%XEY(#d?d|Q+`x+jT~b`117Dz> z8L?*>HXy_cVaTcXv7O@rktqWySj@o=*Mwm!f&lH+zL>js{6uGI^4&|^k)nJW6%k4X zhWR*xMMcbRq3SrTQR& zZK<+M8fa~$s-)Gc;+_-nkKf|~7NVoFu5vorNhxs7G zdHp#==9~WNSTSKC$1YUTd}YR;l!(l%_|MIR`W597u+(97fA zF8S3?AX)cv8hH}<1LFZ*lh9E_o$S4+pq3BSE|fXsTTPjF+uA--53ptS^~T5&f9*3= zZ)6og^$U08*2;g2Ke?Vzh$q|*6F;%ka%aXqLk;bW!{lVpo(SzUl+?FRZVW;=y2X<#kgiJxaa_*jGVd05!Cg3dW1eW+c9zv>M zuK2F2Xea$Js;#Z9qtqFk;;!a(bPdT9X@9XS2Y-I|2gkgkeEwDl6>h0- zmE#!MuZ0uwJ)dKi5OdJPNN-A)RT$m39>v5YF-wK|3%%@Te41BAy$TbmqBF5vdFl_56KhH2Ze9JU=0 zZ(JH_>LzUNmb^a&mLAn>isd_WrT=sQ(q~v|%;ewCr9FKj;mV!y1)slFT{)ug{s83_ zZ@}!;H>4hAzt49g3R~nd=b!`AIWn=*W0a@YiV1HEarXJYwnM-KKGe-!3zg`(M;6R@J!t|7 z;4_zg!NGX%!R$W=tBMeE0yQ@I_WDx5#yU1`K;6Q~cY}J5FF=7@`t?{7g?Q$vjOyhq zKT&mrNYz)Y`ynSLB+=#DdckC*nJsC^MwOs5Z_>`j2PYGIwmnzhKmd3nR1~ryf0D3~ zly8e({uWH#!h}RN#gw(m+(`*J-|S~#<%zl3%kwCXXoBs#*qm9Y?|9gTW3-D>a;hC=n;9ldcn9j=9;944zWjQzEB2yS zvd-q_{wtGw?exr@lKKMwjj0L8@BE_l$bXfEBPDCZ< zb|oHkG)%JJQ+Bd-XFp3nYq<1e%sY9Z15@bMwiCT##BdW6fFm}ns@Qhd=O9!_zUxMH zdtv}Kff@qx`spLEsEoFq>f4Ryh^&r?uEH;4I&n++UFp9S>>NlNYzWYib~J@xm~KNQVI=Z@|A_Xyh%*o-g&% z-6{hyf@AVb$>OK($GpN}ER!*WXJ-NO{HD^wPK|(&2Lf{%dMhsS1}~@P8WV!{KeLm4!rK5I-4~?7}~Rm0@iFhb2fu)JkSH)=_7!JcU0k`W%n6dR*M>44k29 z1bf5@L#6UYYiQoHQ*zo?E(lA8Fu0iQoQ(v7Wu@um)R)j`^GGPe+L-Us_* zil-hmi8Vg=lb${0KG4*HL;MQfPa{37v(cY*iP$*6TxflQA?=-ie!gf*91iZLtUMh- z?rikk3S9QwKMq+as$a(}$OY&90G3@NgaOz!_c!q&dV|G2S4s z*)BDU;X8{RjN}9ozh*P#{e5tMdWs8K*1>ZWsh?xF>@oUzq3Ci{%Q<3M5YK1*wPRnZ z_Iwxz7TrgR3&GVgKMiYylSha?2sfDiS~NCkATGBm9IIKHg20$iXn&k#WxtW)Rzokv)`?@RBa9ZQU*%Xz+jh0d4On zX&^<(8w-7AEy^nUMB{ctjQl35vngh`wGGdlvb8=6W;UJ8XHe$84odjIUbm{C{D}0o z@c5kqA_5-NE(WQ3X)=yf9l=2p=XDJK!=p01)B-8>9@`g*W*}A89=!gG#p{=2$p4@{ z3<8YePq)7XJC|54u6$|}mLg?&{D~WzLR5Z>QHB)2v6r&gz>|mu!L-RtzS~jlcTBgXhr`rcalYQCxE3#LXK;Nz@K$WTa zOtRZfVBqf(%9zxd6J@>M!!%-@gZ2D~iKwCZyUgv4{pItOl}Xc#D{R)T;YGiP>DP-g zl-paDTkl27u378OQmg>oFv~yDE|)LKJOMxg)8lLe8q%D}-7V4zuBF0069C~y%`ugjV}U*y(gJtmlC7V`{A(%5TNG)w!_*2w?P32xiW+kC#W%&P1*@|K^zwnFM9 zygbL*#crz%W{_1+sy%Kh3+Q}=Mf3+h@?v01K_-t$w#uTSzD`Pb5k%g?u9g*Ci@m+` z4L4^%+^p_|(P{Z97r??PWoKE@3J|W{fG?NRl}*hV6CO7fcXs;|G03Imps_0dRIW3q zsSR3ERJ5=p=8dhFQ0hv)et;`(SkPYG0)9=2`%>SDvvET}z;QF%-dFrf>8|1VF<6Sa z*FFd=2I$0t7-)q>5%lx=r+P5&k-y}$1^f0h#t}@4GY7UXb{2TkMKxNgL|?D$cVc3^ zxo36XHHci(=^|xUop+!`cd~P`XId2fC+3vQe@jUqI)=+b9%56{PXKso>}w@f?PQ+? zU7t#GZ!($zg`+muawl$BKFD*mEsg%34+%I&yqzVs(5m~3UU+*|%w0EZ5m<^$tadKat6p$3?-jhc^fC_g->nBL`;;{t5uul1(W(_QwxU55c;$iqy~x6B@fvlp=c}UYkPh=VenN!1 z;k!_zjvcn=@ujRTa9qXH*r%{}ogYq!Gehio63;#c-O3D$q(~R~oaxfO(U?czwi(-|!OfVl~zer>B1n z>U-Id%-DZ--lw!;;Dc>z=m?*Xs8qpjTdLaco~*5Z{GoJKyUZ|T&N?#AJ;3-G!n|6T zx2S5BR10m*YBI`js$huX$_TAD^CjwYU-+T1RQ9(2&{(G(9Z;KW8tZ9jUf=fvJ_!&d z-dqluG!0fT)ZxkXOfM#_T*0$K&)qCQ7&ob@Z^U{a&m;SPr@^Y1!2u}|DPQYnL#4Xh zNT)lkhpFz@KIz?n?2AQu7vx596=qyO9Y*c5BqmY2P9Yj)zVV)}-v(URO703Dd_}yu zUL;A_cuSjUHT$dIY)HaGEaq}`eum)k%2p;!@}+Tv)gh%G>?+92(G(TM9RLs0R4g)- z+(+@anmj)~)1kPdS)vp~viZ^_5p-o^d^Y1C(#-wmw5`HuE~D``*EAGXDK2Hhw3OV?yccp_2^&kdHtu>BMu2OoL)Vrbw8&|JUAxS*TYn19qp93&ywBmcwcW92VE zVyOfvtviYnwW*@O7q|aq-rP;nee4D&e5xaV3=a+ma7!Z2i;g;tnmAM5Y`YL7XN?$& z5<)j!|M80+WKWK?4zInLgZ=>ruL01@jeAo!8MUMvKMIvJ?IE^un9zHlg&Nd*5yWf33(7eK{DJ zI-DK-NzQ0j-7HY8m+f+_dAhLWx}$u*Ok@10hQKeKMk6^CK(c%-gQgf0*G1IO&RT#gT>>vE_^g)_g5 z-_Mf}N?!UoyFnCt_n;bgug{KayY#s*ltBXokhBjZlqjtwmWk_0!oNc1Z`&}}vWAdd zlzub!s=qd|OjBlk(<%gmQ9P4>`g-SpXr)~54W%qvwi5?kqmpS^dUMI8sy3uc0F%bbC@m~%ae zeJk~22Y8K6)s{iMTO@)FFo4ic1p@n}w(_0f-JIJ%P8ktWt-WQ6yuzx(vBDF3B4TS3 zlW52?To}>WyuZB!4ZzWGw-u%0s)D9jIPpg*L`VwhcNc%Jn5K60|H%HZ>bP3bU)Up9 zn>L~JONXM>BgwQLrSMFM%~3U8ivQ1@Pki????w{`UCx;{@;hf`(&r8~nHU`ax&nov zba+b$Ke0Cz5!9dV`?+f0G5jH}60Ckl)GFg>{AK!eevk9zK`ZK)QPs;H`~$^naQV@^ zCU9x^;*)mPM6i$^W*W<#M+V>HJx1Ug>Ms3TV6uvf-zn);6FTp70XBo^iZOK zNlrZtp-@JR@1MnJZq>OBG^+Tevc#$Sk*N1a1e@2n!w)sP!S?4tYxl@zz4X{A;n%9R zzroGA^B$HqH%tU#0kk`f?iR@#aB#4kLsn7w##F%5aXO4J`ZT`zwg0va3173`@WzPb zn-z93_BCG7UZR%^V&K?^J5!3!hxs{8Z#vDOBu+5ugQ>VKW`vHR6@SfdlKGb>fF-iB zUuXd=6bVCFrU%v*eAru$309M-T(V`gnbhTPcrGn%kvB$IdnQ_cHs&5?tb+{VNJz90 z@~?4a@BNgwkw5Wtrd51CVuFYH!-*1ZeLByTY-$S2;Po~p{H#<}!7S~Isy{0C_6*Yi zM=D7LW~SH{Tv!2hSDYGKhG=XMS}xxpHZsZ`GE{O3({(i>%V{V)Tg6-LATxphf5zD% zcj4w87{S6s`V0s8E!&~%o|$>-Z*l#?q)}a2tmO6Her{|Y9DsnM)J$*;Dqvi%GM?;+ zJtU+*(J^66Ao+UoEe{9IiaH@=sYkRgdpB zV%^*eeVGsg%adh_^QrA5Mb^we?QI_Nxx5d|&p%#OITO00bwaj$%z}q-L*u%> z{}<82Egz0hQXlFXJ+mX@o&7PC=0E0$X0!x-?&w8|x4yTh|E1|I8h$BZCSi_}0`DWRl98&iy6u^!qNRlU39;(OQ)LF_h^UjF zq=Hq0R`KfxV?yXOMb1%cn>e^hp|gr z4KL6tHA3dd8JPU{mj1~TZ0Exnld=69J@pYe{=Z6|@(7=GNC;ljKNK=}2obVx{JWE8 zuKb6JYU(i;u`d#g&zJRJp!=8M%gG!hYH$Gp8r|TFdYol7|9M?#2AjPw_Q>gRKtG`o zdKx5mr^uf!Ppm!DAeWeKC4iVepfw3^BSXdrFayJr2MAVBV&Pdfzmf=*dryN1Gi7De zL96;EW5=8)H^}26pe!B#yV_0-Dl)*6zZW{ZdD|=HlP8Wg zvPVv9Wb|RolA$Py`@z=VB!WdSTKC=e{xAsNzln;Gg1@k5?46TP>jZh_T1_qr-}zp` z;({^;B;^|85VkgcaKh-LAB~KP(SNBNV_V=p-E~w+8Q&;;c=`wFE!9Hf80YO>ZFhLc z{5-8L^qT7}Jh|r7CZFb?zuEmQS2J2Itx8X7>%^)yF@3%-XxyEHW{*bIRW4+FkouY6J}=?&J}RrNALsdSM}{ zWoDM&$VhZUetn>TFsKAv3+z4|H(t21TboFsDC*nJ=a7y> zWsx-h<#xdcj%n>jiY~~vv58)7CdZdQ4#6ey+O9ObF@V`vQS~;ZY7MKSfJw#_w`+Tc znR!FbK*5VQA!og~-K@i|{EA5l>>@!$F1}e)BXH_JWyg=sQvN5w|K|eqk*}!lqj_(* zT_6#xMKXBvJq+>UvY-z{4{GUj)@z+xMsE;hyL|r1?k7NSA6Zt;lTIZw$PMqAS%a6T z0_M>@d|k|c2Td|vGuwUn)2S}H!OjrlD8G9I1ljnVyRuE{;u7qI0A7{4$2LW-wf|4OSfvPC%c#n21c~f0KUWrR6BBtR#De`Z(J3` zqtr+%{_kF-IEjN?c!o^m7FC6NzgaU1sPoo;?QSVzWmB{BU8CzQ^$wcMUqy?q^MaXB zoMeJ(k!e%Yd%gj=tx6fdH@@%jgwZIz_%=$TUIKT@ zsZO7wJtI)vguxcv6cG=%4R&kXxji-m9-xTURXsAXl#mipXA~KAaTEh2-;DVy2lsx& zXRpQ>et3fo@+0wDkZa8_pIYXC;>1H!I=Rw@da2x-Hv%K8+@J*A&e5r<;yQljAs2gR z4GADB@IbRqPLk~Wyb`hpS04a&6ZkRpA6HV?^UE?3$=)?oSzp>3)--< zp6B$QB)=korfSM7LU_j9bcZyX+0rkVg?0U)JxuP4+M7>X8GIU8iGS^*KiaF-a1AW$HUTeF zEP(szcCVJ$~rir=3!i6vQfF>*D-nr8|s;yWhh@>(|`X`en5ym%GPFS6qIcfoaU*{KwXG`sEB z8;^2!=%y}>8u3G}O*=VBs*yec^7n63v;Pnk5(UuIp7|?wY?ighWA~Lt%WPuNQZ9R9 zn(lq8{=zy7exfh@{?qt99|%(!m=8TvGDe=tbG) z2%n~PG%3}wny+J|MoJXC$NT|11ZEtdeB=sWHd-g>s)FJ%hR1UKlpuIUg4=_rL`<#z zUyS{}bym?hQT${y-?WL>prR_brFsR-@{Q|n$aqh9JBOK>p1?C9c6A%ivc^}gB9eD> zn!?FX0ag^#R|UwxkqE4ulConNH`Wq_kQ){i2|HLpcMVCWxkt3)twQk880hCuB2XwmYr>UP@v$IKX=Do=8ih+?=t_ztGZ9c?f zgDDe>f<*^w_J@s0c(>9fDuO%}ckZXv1;JS=$>6ka>=O}1)TGlMNBO1|YE&t0{X@t! z%JPZR7$VBUyzzeQ+@)WwDH-Dhl?ipM>yZML-F_tRUI-}H6J|9%h7g^OvF1 zKU{`?i<}shqYF;PMKxD{9TV_h(+;FuV(tDoA;yUGufpK0Rq8x%cJW$6DPGe3y!`4> z73*!}|7Y^@YX`TDe_C^(S1TS-`JWtW^{5w0%GH*syGVpSK}S_6Li1l#oIdEu0ih%~ zCNVu78t6dAOPw7%hkc`j6u5^+hj=6X%Ve!no}{prLv`@kQ(PJpYI%Wh%J~o4Do6=b zcKz5lsG$HHZ9}248eS1=mq&2}lpRlne}v#)kycl<8hubx!DNfb8Cv={sW>Jx6J-Q2 zvHYWZYa+C9G1{M?VWzaSU?#2i4*vSSnEGpYrR%8G{91%xx~ABz02iAtj-XRXo8A?; zBt(yNWq`zbQDNjZ5&)B)0N&um1{nl)paMzqfsTXIgJgf*+mHc8w@5icnkGv(g<+>pYr7Oj&55_ zyy{%psflCN6dbtW!B7p7I|r$ZvKf3in$Q89LPKaKLA(d)DB|7-MKFh&Z}OjQcDJu7 zWnch_t>!On;|UR~TPUde0sdP)=}qmWq&}R7O)ZQOa%YcRpyizC_GBCIHJCw7 zXK6LAIE<@%5OoopW6nNV#M`i>)m?}qtVz2soLT2lkAp=ONAh}Nv4X@6lEG~(GjlS2 zLj(Q$cc;InWIsX4p4vKXHMN;W$nLT+O%+?ma^*l{1Gnr)50nc_M_m5W|UD6Zx7W{)e!4I&#NvGnxcpg3wG_Lg#c@mXW1 zuth=VVI3hnjg79m!IDCZNle3-7NeNTC#JRPo*Rw{Hb!DQ9V@~2`oe#{?EfMRP$p4Q zwSStw@&*Wp=$!U0+3(GU0z@hfPRzyEA|`=je3a>gxjl~KLUmYn=pe51!&4#TJ@{5y zE;jj*a}#v#EBj1v1S=1z-pXaA!gHorag6zHHIwkxh2h1x#^!DtD=>QuLRED0eQjUo zNFWya>&W@+tJ(?;*eHvfFB44&ZQ8@0)2k+Ol@YQ9QXn}i4_D+uV#~=yTm|sxM(yc> zzXxWg)O;W*k{bHWt20r+4X#qjC6}K&uiT9z98(#CrhJo7`j)(%=P;%NwhKIY7-`=# zb!OH8My*IDUbqeo8(k?1-SD@pfC3}Z->CV8T85Q0)tew#p1TPQ!=bP~0y~bYwk9L+ zf+!M}R9s2hwRO{5RA5cXKk@JcO)TC<@OAFR~7cVeOpnGKk_X`#W;r zem>5kuW{*?f$2Y2YiHxRRe{ZJ#?r*IHcBGcM};38`)py%l+VSfzf#BcRq5UFBcE7L zN>?-Wqk1UHIG=?X)h{6LkA`eg<6pEPN6$ZPBw{b7Kxf8bfR|LBxJA5^pxhizMn*@ew~fK;Ir`KnT|3P{Pu9joY-IL-F3J}D z)uVtA-9DkF_=N_P3@E54$TnJ1vDB0sPvr|;SA{e`_UH>$^Cgy936rRgIvAAATF9^a z52RPid~+UIISRUnoN^0;zRu577;;^f_ZZ2~#1vqH+q6`F(Ex9Y^)>8ESyy&c9gL>wrCzZg zFz9LybJbSveduP3(7*XUASN5s|KhkrY*5%;%X7vhBj5{XW`BI{Ha@PyI0Scb-YPIp zO_p1*M-eQ+cAL>!qB9@D{)k76D7XdWAF*-Z|M#oZ(@;w$>87lU+7Pja8*U9^=EGk| zkwy}+r3s2DMN3a;F}I;tKOp+j`i~dZhtvVThrLX6n=iWSmDROBKv)C0pRby|@?=-)o za1VxKDtML4Llc`eO#*MJvEe?Bn3Rxxn0>oTzUW}VzWICT2408Lw+=(#HWDd_$r1JR zxkhFTFoS}$9A-DTPqljT)G3d-83pVk@KW=~J)2@Ejr--%Eh|533rhnJ4(T^q^iNRG zUQJXlDAFCQeu3#Gm;RW|V2kd6(gXT`$Hz~LzZ+jLk63Nrx!U3sdO8Jk-Xq?^C_$0; ztD*{}*iWiM;DC7*d$g#NA8o87cOql@T^$m-H|1e%A~bhF6L_hBvtp4vu%KR0po&*}*~Y);TT;SyL) zq0pZ-+*Cy3#O+ zx3Wi$sJcY!n|?glLuppckR$xgR6Gh+kTt^&Hwk6h7D-~1WV!A1Kk0@h^Ax~?N5ZeL z=E6vNY0e>R^v!8fkfuX<$InHOuu9itqi8rv)@0iLF^-Et+o6sjUw-+e;8s8L*2-+B z5WmI~2$21(V*p>r_tij@RB5(~+Va_iTH!U=FX1RAf|heJ`Zs=m&jVbdKe83%b)s}M zBSkoZT85OZpCb{ijyD7f4kQq^`1MYt3f-k)_&7u;^pcyFIh7M+MMAZgdQF=%$Jg09 zSLBg-vb|#X=l%=c$r8%knheM!?3)+px~lv$;>bn?r4iRL+)ebJ9CBiGpu}nPUhpbB zcu>HU&+7>$1+gJ$eMJOs_arOUq4hlESppTizH;{254ynb1)Qx~`uErT*qIA`ORdo*=5y?e~hO&Ec>68j|tQK$gx9~Q^RLW?s8yORot6beTp9eF;Ey-?9M%`saNLj4Prp}zb{yC?ZCI(cvgbcX>XMSyIkDV9 z8_g6imts$iB34B&TPVnB-o-&$T&W%$(O1{Uu!sSycJ9%qX&*hr9or$NO8db?Lfhf~ zy2BDr_A@P5(^*!Vl+UCqnpIh#WA!W7X(IW+DKw37r`Y9M)R>f)q(5|a>7ib8T~KHS zVOG1^p0|JtS>432p>f@gYKBnKTvLQ7g%8I+d_2=KS>sMh)S${{E-@vz{4P=rIyUFZ!ZWdvL5s7i}!sW`cH2(^Q^%?TO)J=qQ(b+AaMLZ&5HIU!+ zXP|qwZQI>XXUkMMi_*(m3jAp5QwMtVQ+c-+nXJB_aAN_zHix_4l$e!sIq79hU;sJl z(||E;&L<=LREqYW=8vcWBIQ-9Q5Cy499#pq@2=ZQF-zQI^F8etHwy0$R7z|~kdP8A zCqM_&Q%^t!(!gVLYc?57u+-EO1pZvvl8TtDMDV?@g3XSDh>Ucb(5&mD*fZV3q1G5J^R)oG8(-3-ZjntCZS3mp9s-w#9r=cD1J8uULS|AkP*s%%7&*>F zl1;-QhfK20T@`h$J^CdNaF&ctD%Zry&SX6x7qjeEqt@%k1hd-9QKro_&|4A<_)&N8 zFI2ctTCd%Q8q~n_9opUGoME4L{7-?`$YBh#Lk5n23v_}^&n`jGhIXP2`gNy+0JcK7 zXexdN*t(?Y7T+!K%#H^WNQqv*<9n8>nbuws9K*6Jp>EM23Vu)(5=MiQ0F3bUpjzuV zA0@Zo5Hi>L7Khk>Mi3R9s{}QuZUwsbGT%rlCA77J|C;}AxZbB$*-t2XIIpi6?SH6! z@&!CsCX^PWB9-#H6+|DfnzYc#Dlhs#Z~g&-AZB_gBf9 zzASwsIWaF=&Zi*)*Isx!xWH2kZs}N>$A@Ikl*hCg5V^9_k98Rop{CnmHMb;UcWwM0t(l~#I0ioz@@^iq2{iQ z?T957o03dQ;(w~atx>*If+g)9m(9?VI85&U0o<09P{swZaD9)NoOcXT;1tEK=8XsR zXLNs@xD{0&hg52h3L_7EcQI+Mp-|H3qVJ4q1&@0_y}VL@2vLTc#0v+YYeu#4HmI(% z3LrN}JMx<^$JGEKs+C;n?Rv5Q;n;r3qT^sdn@OMXAA2WY(goPn8hQQI7PJX=N^)qj|J#QrUsu-Db-j)jJQ?j$6kvAi{%F}G z7uiP;a1%0_$bZFy_E&*l-(DC3h{~w8HZXy+UOI-rhzs2xW!p0LkBu&|ZwC-P4RqH2I z3`j;R{c)nn*lwRSFrsDeS8}m>gi*mN@waX=8dO(q*_2nJJMzg*$wE4*GMUynS8;4XSIgcVGigK zR;XWfnq3jQEsz#N17Qc1|9 zPqY}4L!uii?jqQ>BG(kva&$dQToE%%y1d#{JK=`H7wQ?!CN5=Dt+60KVh zTgndNkUI_Sso+mJ>ldn(y~1dRncqTyqCbVrbXIHWkHfPqg`&@rw8$yZ5+M~^Kr``G z-dPa;6_2&Oj&jK;{U^x^@t8z`US-!G_Drn&f~$>nF8xuyDX_1D=kz|Itl>mw8|ph@ znRv-6WHsdC?f%^LsobW=Hw>6#eumsbnaJ!qx=!U}bITqu=e)%}gT)UN_GmTocVEo7v@_znQ!XPe#$(jgjl!F$k8nl zK5tz6*jT28z>g((oibWbyD{1Y&y$XAy6)769j28?>wr4VeO#BPhG8I2Z5#49v?U0Y zMoh!=b^`}}9=FhvcxZZMXW)M=5nYzSnGy5&`{gN-ysuU~ik`?`NN8h#C&R39YMH!r zHp(9SGc)&{djo17)yQHBDp7cX)3?2|RHlO2Y1>5QDcdpXxe<(a6%_H$SS$MG{Z~*h zvBs8>1umx()Nrue8LG0|_A-pz?L2**7;ZLrclg-J^X?|G^K+*jNF|;Y-S(8=z;M&%5{H*okVTDI0A(cu>1Wgn_Cmwar?z&4SImvx`vQ-z^r^# z2iZWlBr0lmzyO(V1;u9S9RDe#X~J2utN0jzw1hdpQQL1OGpEM^qMDC%Lu5oD`Xecp zdXSOzamv5}KVVJ!Q^4qG#hyLpoBN>mqzprQ^u&6)@Xsc}XqFariJ!=T1zR#txfU+|Pq>}%;d>fH z+hosypQh8q-C|Od_D}m)nSF9%wXuCyv>X6Ir__*Gd-2Hk0ifp#yFU+L&gGr?gj4L~ z-*Nz4heFn1Yj|DoIJoW8V82_aM=%dq7w&l%_w z*))y{X~snmeL*{Kfkg5}&&OYF!O-Cj!b8Fz)>NDMLu|Ng#6&(;$tN3o5?wAnnfeE9 zTvq}ezfhs=$I#r(GEU0Xi0j3J{IMBlmM=tg7akL}E~3cvgpM`(c;6s~b?9m8I?fQA^4HR61_Y z-lVZTRXP(~qR}g#y->3Gw8xErJ2vUCJbQF88}dTVWGiIL8cGV|<7~&??>==ge~xwO zSXsz~R_W>i?>o7|p`Axi>QW2}14SaNlaX4_b??EOdO8bBfZu<9=3fbNUDr5~Fg!!nl6Xm0WfZ{uWRVlgLc z@k^ZdpzAJO;cX8xnV#uZ{n(l=p3~4s|D$MK-tz_+UAns`x+*W45xxUoves%=x?n_t zLN34}>qvl_0>;9s@AZ^uB!u3S7-O2<3WCZ;eYG!C&X-qtoS8m6Q<77fRiT85fFOaAEhN z=HJ3)N5=BwMY%02ort%_4?(=-O@UUNH6RA>j0>zbQNtXeo~>YRA~iXbwUhHqfLpLX zY4T0Qorj^dBSps#6%l4d>=a(!kmCZ^k3_AbJ65VuQ*KAY=_7vZRzyI%huLqtqF*2R zxsg@kKPsrKYRl6vJzv=GIQyH zc;dUZl2B@KqP9)`V69j$+@igXtKZ)`np!|SPT49>>{^BaeVsZ9D(O%YjD5MI4tuMN z`~Zsn6OrV^ur2`oan~+A;cNpNZi;K26n3*L@qTx%^M8cW@jql#p(R^)&I~!2BX2i5 z9!X8ydWS)biQQ~{+~#8lpnKD?tTp`8js*6&m$r??-)+x0kuUHzEKa(4u^*`s6!641Ke1uLrZ00>C+?D5N zp7l^n6XaXoaf^nHxLWbvO^p{8tMh=pT@Sks5zH0%2Qjyru7&QNtXl|F1A-C^H6HGP z>)LDniL33s zAOFYQ)A}8gFn6~8eDC4k)yr!0s3i|b~KtFrj_Gpe`D z0oxfMXi6aoY@r^S7(7!jC=e7W4J#Z9l~b&%%$zS@Ax+?fOsQmQ($gMR48zu*tdVj0 zcHI`#{qp(!zBT*&efo2w5jXmI-=llo^x}K{y3%-29KHRH&>x^elw;&<|%7m#Y7G!rSd^E_MJ;4+-8~zzWuA|!mDT`dF z(BIwfIo#Bg?Q(oUiP$%DB%XaMl2a}PXu-Gvkxlj0t`fo)g5i{l?)Wx4nv95elQ z?o>C=XfSN78a1M0S2burpWRxrppI1W2e%AG6(2oaeO7ua|ZREX> z3;x~Q)DuwB2LUYXJ1mYT*=HmrI@sDN5odpRK-`qVeGi$lGi1vg!llUcU}QRa+%Y_B z)~R%iz-!X&k4I4~*4D5^-A?|=gs~5`_{GCh!>R^@TJlB`Uxom}_A6gs^nkj@6TB!Ogm;z*v&y`FM)cS21?C@LrAj94_@1J!q0!ZrTGv<H9%sx&tP}P^P)ccF$omiqwj9w+RrAdH^HS^POmMy9$>6S35r5nIzGJb4|8NN zDFQy)w&~Rc>NBTUaQH3HJ}vGGbtwuUAWAwMCA(6x{4MTGTWFy+#>4{sWYPe-UuZh;tG@>e6+Va{>J`UK7CvUOwVeqOrU`%pU#a7!gguR13>{1Wlr(bBdm~NquwF2-pS7F0j~)6 zmgfGbK*b%5OaeJy2Ggjus1mJz?6a?%jXGQlE5=w8snv_`4H2#Amtk_b4|g85r~jt6 zg`f5wRag{;vOzua!$09RTvQ=8zg(PyF6bi6@wxUJ$8lyDma=LTr0*drP>CzdOcI98 z84ROovCSV-T!Y^rljelSMglM)5e?u(15&#f7N(_Z5OMkfq|Y5jG6NF2fth$zMu@88 zD%v`V&4ESkrvZB{b)8sUQrF0^gWJ>Qp)H>UEFR%Y`qC&C3E+=5zrHz|mlu>U=^6$(}0^jXDJOIF>-r?Y%TjZE2asFn}$!_fon4PFxg-A(lcp z&_wc>M+8DqlH?6I5?g&VlBYrS1bK7W%x&Hm^P5NpAkN{PbSX1G^mKpF2+sz6XFFh- z3Ile0Gtx}Cp_cD{)Up9pYq>hwVqdk3xfPWJ7wdMOofS1Bj#CD{VoUO=X$ zB%ij_X0zq=>QL_v`%1)mTDW7?)D86%%||JgHWk6h&K81(i<|^vc{*XSkMZ zT)fWcuini1Pmz^-iB;O*!QB^DQKhfq?&E{WXxxuiMx6stIMdWQ24q!YxnLw(rs!as zCAfkW5Z|FF1*I%r2^=L$-pUg8F9;xiQ7)V#=%aDNeH2XXguUx^tl2XOF?^~jiJdVz z;3(PG#y6{+f!PX1<%2>B3RtdL5^7L8ESekt=FB+7QI3R}PVXTaA|z402o&@lFo7XU zcSA4~p%!t{8uSCvt(Qt?v$4`zE2tT@=->l;a_U#|U`g|KQYWl>=^q zYvZre&yGW6zrH(d(^Vd{JR8JRKep>Puxiuqn@iM0ZA zIX(}+l_?rbV+>y-;IG>0ot}|bh239u6#2MQ{cr(tt+k-T_1yE zLvJzADwtYU#Q!Uu1uPY5*$~6s4UbZ|Nx@e2q@fIzkG{~WYpTh_(_daesyrSq_1{u( zAjnJFl>+qMah+zcdTissJLAC%0r|x^ z_lX%9dC@}x-PB|d&2%WS9Q#raTGqV!V& zCcVkXs7~$Mk-Z8nRHHMMv%lJI&l=jM6HO_V8>d;>z?XxU$n7frOj# zZKYHcm6qBovPFkFS!q;Br+a)+s@&_U8to=-muyuce64|Ze@)We1}`lRSBmb!)gV=Q z_xqR(K4579w^x8kz6I;whCMx|ZfE7ws;PHNkoru24tWgvBy* zDuoOB?rgT4TBAK6>W`j+_g{h0YUi|I>?r}&1DHv$$US#~8mxY|JMe59$id-6*oG8o zElh@q3a`^u7L!k{nDzx@s<#Gd4N5?9(p`Iim)`Z6c=EjRA3>XBQ!#UR_ifrz4$Hge zn5OFQVw73o;C&c;9^ zM&*yfP6-H6^9Gz1vd(NV9N8y(ea4=2$-Q_?R+F^Z#}U|E?ET36V9@x2r3rnpPSkMc zXNo-t0{NwCi;Br+@EMPQjq}dglhfdB>XGTT zV&F=J4?QhbTyjsI$V%-?mK}_WhwL6C)u*Kh7>mtRjj3Qbii)Q_=su<3TO6c3gN+SY z`f6w(DrOPB74|lfR}+y+1RUo%xBRkrJ`5D6%DTx%$Kz9P@HK4*IteV9^k>syl?Vlj z|2s3{yJh{>sksARBn(FC(U+l-E?lMVCMpG1f}1xk8GxY0NYoEx)#C=-;t}rEDj~9A zC*0y*2XNp_Pkdtw9%Xe&v3C-P;Rf9Z21O2ZYT;{`XTekEGdkJYQVRjjIRbWF&{~m5 zEV+L3A?li~dr^>^QBtbASKcLdc$JYd>yzB}67*re%B!eQCs|Q@X&}4&2Et;r``C@0H^aLY408u`a7+ z8)m?hBv^Y_2JZuB%_ps72vr$<_OzWh$PnD#3Do+0p(pwCxmvi)+a)b8EP=EwD>(k-rsB1ZRbLrK?4cwKi$$D!hdhDL%Lq7SpQ zLCVKV3fns!t)CagPTEca#PWec(|c^fl~~4kswl3!04@9=@w-Z#$IZL{XW?lSva$RF z4m+ImleO*wIqTP79!K=sKY;}y>^F^stDC^2F}90U&(@6E41-CeyY^7TV#x^{U&mZ7mqZlHMM`&U5IHehk!sALXLm`9-p-V>fOgZX zdf-{`*tV_6n;Vci$BkdR$pylA*sii*Wi6}eaU=?E>X5H|dOFNa@9{xzA9=VO^BOoP zjv}L&3gP6;!8M1Kt~aq+^P+OwI**(%wld+2j~0<*vZEavIkP+%zb-!o43jL(`y?nq zT*_`}N7+o32m_d-nuIsQc7Q<{@KG)kzUf1Uc-M3sWIeW0|4u&wO$z~&)LU!^Y;K2u zn#m5Sj1O~oV{b;1&TV7ZDb^-F!p_Q$GCot(sqSkGJ9Zf~F2PQ;;Y=31u%tlC(;_R{ z<;p!?_DU(49Ku@s3+RhXwG2tHwRyN>WoNyR3@^-k`@mbW4VT#dR-gx*+ilP70V*L0@GM zCrsE>@IGYPk$4{)DlJ+{4z9pSuJO6Z6Ajr`-TSp6mkBOT@ZUtglFZR0Kv|?>O_z(Y zl+sIFq88-JzwSF!;zDiCge<)r;?!7exV;~sUNl7=`?`wChYwviWw@jdU3Tyi({ju}g?(*}28!e?O?`-jwmm4v(@n5N@W=B`p(7+y3XH#ui zaok>yK!TiBu^y^%-O+KZ?%lJp%zr*TGn<3z_ygeu@s*{w{hX4`sEpyrOE~FB;s=y; z+~0!~ru4ynJ#_4n1&y36Z<6leVP?Z<&(r@2)Tj99o3;tm%w3$MlP_Aa=Z=_bvsqdP zRQ&gpejcQ$(SV0r`HCQI2q%q-C3*mPyE#z=MmX=>r!}U}UWT}X7cDd#DV8FOY3b}{ zO3Hpncw85d)&)s{3F4LwZqN2Fx>Gneeg{%>s)ehV!PG-u{?+T-lz4{^?hxXxCOU71 z45fOUVRwnxdKbj{!E&CXwFD2E6<_jMZ^alSiCCz;7-_}eiuMhOE3_3!bLW)_t@?+_D*5RskDRXkrIeSxmJg z`f&_BiXfV;nKp>OFj0`mW78f%5NDi0Td1Wyyiz6~G_MAu=RTTM`Ua@P^-&N*zCJQW zRsSuf`-ah)Oq(~n-NoV2+Z{#~=EvfE*@`u9ptf>aCecWyA4IRX688CmJeTXC0%pwXpA#Ha zZulE>3^ty!&|r9hw&4?%7NLtak@Ampm3qvhr@~LzT|TBK@6k{^a}BEDxN9#(L4>9m z`aSOwPy8%XV7vjIeLc4)8Hf;-A-x4)yKG!6|TFpw75j> zU6QqSK1N5EPzuJ9|Mul96rQ&lyGQP)0$wx(zVA|rPZe(IKWn?N(>ED9sejdj;w~al zz|V;d+!G+257lC+=O)>6n=8kPdHCESFM1(HjXb;v)FZ1!1)JhmoFLe~?E{CB1geDj zz=e&k5A9ehcz2QBgILR$N3~_`MCD?J2B{m)I zo^GcpP?C#$Bfr8_R@bLF9IxHd^lpvHA(;4(!eqKj4@fM_d>DuICQ_-&W~3f_yYRwP z`CqhR3fimOuoZeBPGRp0^u7hbhc5~9GxiZ728u*U1~8QQ$UbODP@o?%-KP>Mt>Rn{ zKzt|A0Z7tUrm0bFd#gHD|0+#w(gZrUs4ZN%{+Zg_(jtUaaft>tUyEY~{{oylXl>@x zi{OT)*Tk*w!ILf+U=i(!GKFVn)+mwy44V6tcXqmZFSgRQJm6g9Sep_{l&^s(`J_g` zUsh6jia3?*v{@kC4GEppqlNDkvye@N>kvll3CIC3-gXwLd`I0jhP5!KD*tZUP zP4O95$@|ph@=50|nc4p#I0N8}-2C<)6OpE2B@lmohN7TtWouoz6$=NO)jZIT)Rx09t9M~suYj{UI>gi zA9D8ee_hDQw4F)T-K!`GoKpZjpFwFBD+er155W8`dWXQt+)+CT_!jPURLr*?V6IL| z{iq`%tAu?2$Y9%Z^^82hzFe$rqU9hk=SfiwA~YX_=a)mL7v_MxxqEoIVn(KPJ;OfA zUQZR>-BZa`jgQPAD>UMMFit&k&%n$LERr}h^^6+*uY_o0I;b;j-y#|M*fE-MmSqAI&Y0>_U63A6;~iL`M_FB@GC>W!$OvXzr@qL<8LDC8vA!pI!Or z8kY{bu|-AQ5+s)Np6E*AG=XyPtRa{x(sC!vE%L|_c3u#~8*N>X6UNBQ5$d;0bjKgx zd~m|THNS}WTA&Lk9|jfz^NOU&)8!7v|Aooaus5%bK{E?q>>H*kQowHeqY=Sxe}4t( zg6}@^o0aeWHOgD+h(wibex+jJ)55lkgC}UpF_tGU)ITfNCg9rn%I?k7=M&YTe5VEf z)l~&V-g@w~kxZkBxdCr|8dS<-lV58)^7bclF3sWriB8Rs=h3L-fQ{w20QvH70Fm_7E=IGku38rn4*3Z^s>w5BMzHFf9 z?p@XV&tm7Mb42@}2&M5imq_qN!O;8@tYix(U2K-mM<-_-&Trel;bErXrBRg^I5%J= zyySP~S(_d#ATmsSl~i244HP^L=vpYv{c%=%6O2pVLYK;`5cY2<0wNJslQR|ot?u1a zdaqmn_W|7Up@-f?;qOKK68`~$hYRNQggpcK6b?2U7pTR~GGbwKIq+bS12>4c(pE7_ z*tYG`<2OY?g$AUOkBHZ~L4pOoY5;Z>H`)}ppw;0tJ+8@$fkKy?mHQ zpIVG=`2Ao|O#U4cg}zmEwJv!ZC@ujmsbzNi;L#HI{n>Fr_{SWv4u|W-i?a>8VREN@ zyG#7~cOO1!*dR5j0Zg#vBk(JPmsj0>4UiY~&V~DTu>ii3O>|gBs6;L%V;1zr#Bc7I z>c4JNyO^~Xt6J1ed<1V+dE}2QDXbO%HsA+J)MV{qMjGe&%%_1V>#^v6^rcHQb z+PxnVRL?g;0bWTUn!Kmu7eQ@R|D2c6F+<$Oi9O%Cq9+HI@i!t+4x;6z@W54^XB!M@ zz6Fl(l}|V$u;NKg`N=&mw}`M`>Zb-l4*gxR&&zycj=dTC74iVC;0l;|Oq6Zyan9ay@#THi& zyewvjrsTI-jcWu$R-{*-RU1aDk#)kY{Qy*&b5v#22=?9ZIph6d#n+WBd?*qe-5ZIq z4rlnZe&pzNW+GGeIvCN`n!4^bOIXtS%@^MgGiO9nD$>=CPO^|S2nBfR9D&Is9$X0q z>8(PSzhVnl1?tZQ8fG~}^lrc@H&gHu4;=#XBu2-{QMv^G4fclJeUn_pYp^(ZxxwxeOF6td_R=KfW0y&%gy&%K}pP2%qDh!y8ATc!n&t}#ek^W0Uu;<98n z!OZ#aZt;`^aE)npRw%u!aoi5Cmi^Gu@LKF;*6nfs_etQPX}rlk2lZJf7Fk65Az&DgJ1E(}g^)wr1w1C zz_d?M!i(L|;a=+6N+Vc!YDehwN35nsrJuDX@jr0YKnqaM_hlux_ee`pm;gi#s7v)a zMzq~~amWbE{q(fjhKW4O=eV)|I2(~)*!F*@%kDJ*YG4&6+qyu@8m*vCn0H?SOWpNH zS4{wycUHtMG%K_DWTbt_gbTJ{JFheAHT|l9ZrIBxR(tXVS10$wQ18tUw!H_ z4@>Q`AveH0F!ao{$`206t6H`(=aq=MjQ%L8asijn%>N%vawr(#OXU`K3!_@J1^sB7 zm=Ft}?GCz^(!sES#d4A>8sj9i1slA63F?y7>|t?Vh)}0A!A%;{rLeKNt$ z!$(S7`i}*6s?O}2;Njf&T2QUn%h)`1dr{@w+$`CNYm94CY#UuCzaPo#)s)kg9j(BX z*3?B-lz=u&JJT?2!vIRP;-b$0Bg(j?j{i-m8wIP}LlHcVpHxN|P5 z&V$x6_x34u;{41@m~>kZACvEX-hz--ztZw3`=B_7SmX$E~} zEe1;iufFSc|ILD`_&E-srOGv+brm@FI$dBwhwtkkQ46AGdme}hW9bPV-qz&>=+2WK zu5f9s^Zo?-|5^a>T5o@J#Xn3~ta23^uNhJ{(ixp}G=ECrGlbhD!zU!t&T~?44>Wm3 z+C&=Hh>qzSr7P3$GRFrynjcO{QJ?8%p%`@Dli+-V$l#!C-0l~+otOWd`bfmTnnwgl z{>TvF`^u@=Lh*~kgpMvXdj(LiCp&8PAd9%1nvk{PWoIBe|A|9dZ8eY^y&1qqaAj>R z=$0fD3^+5>Z47JLWbpXeo`(Jqo`y=M{6L~S5({BbcM@?tGQg1Ib%vI#EizHL_dZND zRIixUvc@TOABrAe2{8WLGs=C4dDCy6ml??aAc!;OkKcsleLpNZ&)na84o^#{r0zg? ziQLr}GgH5O^G^P2Tr+V*T3R1)>OpaBmj#xk{AM?kMqUp+G^iyv9pSJsJNbj52On77 zoE|p7Z+DKuPB+X6(ta&WuLUX+oW3doy??IbOfR%FlNRuZwR8NAC;PHzlPfVCBkzw` zzR2CMmgj~S+KGs}bSVXs+(XKZ*33=5kH0b%KP4ZpGnxS4nkd$H7aqreoAXjE8qO_7wAHInZ{W-Ga#s?=rw62c-vB#(v^r6e9C~_@-4f9Pm3(Dp8rZk zch<0iYSNS$@gEvO4YfDvuhVvC75YLIyppSFX6QP7P>1kzxx#Eg=8859wI&~RmJ;>> z^BN(XNsUlRcR(%8n-RhQc!>^LqiC7o-+_YFCT{xbBKU*n!^BwWR&}b)XcD?qDyaHn ztb0gXqSNyX?aQ(!U&JKL3EFqVu5X z3+m=kR{biePqRhuV+-D}$ z1u(J~#PR|M8LFlYW-h7BHDl8&dt?=>n6VIc&E?@`(}yNF{sMf{NYLgRiOh?O1a%v4 zL6~V3_9plRD;+5_{=@7sVVEsoF!p2J2MH_LDtl?0<&xO;PX6}Wb`d>f^;dEPi_c;7 z8Ua*9-S11H4sOM`+w>$;TUG(=92S+Ju88TQ(us&Ehxr@B-;zMhU1yqjIFdK5E8=SBHe*mUHS-+&avmHbp8@8K!f%=KP zg5kUxo}z`$1uqyo_%fG}S!kj9rDVm%Vc{H598FBuy$-hHG1+K<#Y0Olnm_t3HweWL z^E&Y8{~Fg7T3C07`x`fNZxjsTZ7Q~$xee7UGW5ASh`Q(@#ty%Lt+B93 z@0h1Z!8odrACRvGOC*w1)r<*iA(VUyQ1RnZsuzJnNcj;;_w{+gS-8E724wvv^T#XyiLh1hG;XF(ck{IKQ>R z-rJ$=CR^aG(T&>Le`Iadq}lWy=#a_`mwRT4;ho=uTQ z^h3HClG~{+!LDxx8l9Rpqdp~Q0oNm=#O;-DimjzcL6NMG9}(7I6*sOSktuG@uBmmZ zM?!GPb(D4!l&^?)D7}E{<&+A{i|xy5?qlSY_Gw$E=-DW}#;EqSwY5u*;8LR#>Z+r2 zd4)SB=}Rm$+2dhZdWM_gr_v6+y=v_G^9byWb=C$Y^x$&RvAe>;0b!Dq=Xml;BYh#V z!OUjpfzQqS4?0)w$y<04SYsYu`fESt*b6N zVZf=U>=ZRBFapf)k#n(*za~x?9JPdG6aE=*W|ubjtKurjHPvO7*R6TX^2Xie3k)>V z@f_b}!NrOGni!*!Rebx#orU=EyfaEKFE~5bFH|t$F&X|RJ zS}q?l5(VCg|0+A#?e|Z(0bYh?49}X;yR`w@WYEh4Wy$XsSYg%IWi=<>RbsXXEt|Nc zl|zPckfn`$^VPCF3y z`NHA>T>4O|Ji5iY+r67$GS7hU+p!CK&*!GssPrH^#h;7Y2O|G%YrpxaX;Z=x%B{_^ zwN>q2^>2~LJ=ni#gebQE7k~7;X!*t^VMm&6=MMYb+t)b9m;2G9aU4@7o;~Umcdy70 z*W;$(+r3F5(k(UV+_(2$4RoIbweRH#CoWv$4m0FQnTNt){mX=YmH#mIw>2^kvc7rh zRXi>c!N?C|p@$BaTa)Uy?AqJzDhgq^(5$hWcD(lmL2k&rjLj9^^Wcd{)o~3e&MZq%U$qpj440b zb3t6$DIA$18rPldF?Rzcssns(K{57&(szAH6WRG-(pX9sx6cYiNx?=fxnU6UD~792 zTxDYjd-1`ApVu@Q#xqgQJq>WAYOAXmhi7yj&qADyv~ui*P&{O6Gt=9xlaWcXannd*Ugw zcCn&LK#3>oR}edaJq94nCS|1N3t%s1op!!Qqp?dsg%w8gF+0NVRq_z;LUbCp1>71Q+F)@l&o#eo&Nq*>+^Y6Pl z!u!rLj1{E=93YjQBJu(0!x+1xlTob?rIV&~ijG=KunvP(aijDq{V3P#wAdRBD_SNp z*xM_bA-2!nj4@Wvd#`Z!d`K{iOszPmRl{9B^au*Oq{Z7W#AIL8qGzhio^=h;ZgIfC zdV8l2%2@Ti-ubpMPmrHWCQaEB=~0YfxzyNZd4zp;V~SKO{W`FR*n!tv_RXeWW|#C; z#@9D>$n2V^&x-}z$EYw^|1Qzp=n|Bj9dsmo@gECVE7Ql$$tk*Tt}vu$wcwc6+U_{c6eI4(3O7y5HAGcipl=%tVn}B?;-OWx$K<{Ss|z(?J6>-?w?!C+ht*KO9i_;uUrOo^}QDnn;6- zU8rGGUie{RT2{~o4b1LuFgFGUZq@kC$5I%qf0fXWSAym6O+2o&WEy!_T+h4zHUfQ` zEB~!H)>nfSwwe7eJ-a>*>o#J_$eg;Ukd)R43D2JSl6}do`XL-*19tS4I4L`Jc@9Di zlDBbjb*rCq)89g}%+_8G$>VXy1@l;OUAH^uIhD1PPE3nRvh#iEh8DYUep15I{*^c& zr0nD6<=bu-H@T0V$K76ctB7#LIOm~*D6D=0*P_yZUfpEDJs#oa8?L>*?XL9rg&S6)j83IbpDZ&} zl1;UyHi?#mn(afKqFswpld5{GMI2?+V(aDp+0~yA`zouuxwp9cMD9gXn(?5_yROqV zJZxQAt(vM0q91 zyc>r+Bw+LtzfArw$nOS=p=!&%q=G|JPJEYLq&xO?-c!=VAAN0=_P0GDhxl4Way4>tUfPuR{@OCIR2wei$^>;f%a0Q-C`ZY0Zy=q+j(h z69v)QBdOo#ih_oO=BB|SO@Ti5t}<)-9RQcDet)P|7_5Jhu#fn(NRoVY=GwJ0e`dE* zQB7DE%V2GoWcJ?cYp-{#XBR>Vzt6#65UI^KgVp%cf_5S}z}sFC@<^2Wg}=(CF7ojD z$&oiaGD!BBhx{f6*TW=ld87UUd4*6g{ItHbfCbJnKw%P^6c{~=TGJ@-}>r6`!q?HtZ8 z=sOhWGCN1bO?i;{`@sr>^>31ZVP+Dzqr>?52^TNy12J8NM0syCz=8^?pHT4TY?jEB z$K&*u;GXTjmm2n=81Qv(%`DrW4y3xBn2SR&SqJ$YkI^2P= zttVsTVfv~ID@5(wa2`$Auu=l0CR|DfO79Jn7(H`D=`|rS$p(4W94Ue?7G6ISE9&tO zb?u`To!OVhOdV5B3|j|It;QqsOKISoA=$F-+_nwu6dxb36>WO%hg7S6NPy`hF)4iF zp$k{Qj@MF~j(l{)*?Eu^x~rFM`g=#cx`ywy+R5g@Su6FFxZbb!$@8b{&rTSi!adlc z^Mcu;(vFDwkkLCmt=QeU{bHm#r`5BcN@RVxMUs?gb$nMR=~2WD)v>$QU(a8ZtU#0# z>}PND@ECb?Iiic8Q*B1YS>E_PgRL-F{~n>l`iKbJFEn}vlsqqC4VILc7>Ybx_I=&3 zNPVKFiq}kgOYI!9XF+&5nRH^NJgkR7er||8Ak=< z2P4iHp-O)cUDCjqGpXN92yVK+03A*a$-r_i=BF1j_rkJHkNl0^QDLzDJ;EBS zfuhLsj*ZKT(wpB5RBA;bo zS_tBQ#{JX5-Ac$c)IAmiS9%F4PB^|<;ou(HfcVA8&J|TL&Koiic#8}j7$tTtzWcQS zx58lkdxSMuv!H*QZ&roO`)05*_mouq_JuZnN`O6W|*crw7`uHl(uyWj&})e&)M!U)VR2$Tf5Lj6LFmAad3R<^l%IAl4ewURt1Op z4#V>`nO;&Ak$O_dO+!lWjSY(r9fX5kRP84tqu|wBQF^U#OsHY%>}yzcMbjRJ@xBA_ z@cMRkNs%+TK`%-LmA}M9mVDv{y%?%H&D1dUXFglR^_ryM>6^Kl8M4fwG^PZB%P0*9 zU+0}2x)*W35am%NRiURbeV3os-7Z1Fo4Acv87gdTSR=lTxyV@O_iTz`EGERD78B=n zi<^mEKq}pSE1;(zbP zPKip+Qd_7hLcs`?oGniwx+{ig2HZ6n4lrGZgZn0a=9e=E!JTnvqr#}aJ{BS|n}>7| zmC6Ar@T9_mYYhz+pK<|cpN_l%snx*~FkFonPtzG;4|ct9j;=7LYnkV^3S0uG+tw32 zIwH$SU9ahx!3bju$!Kkw+!zWyT`kb% z>F+-)fhl;3N>&Gdfmv;Ic`3S{mXMr_&!|<|)hKS8E(W<-FV=H`ll(^8s@)~;R9txk z3+kWX%D9Sj^nA54*JiJ*)y3W=(cf8ZScD%K@$2;z9vLSh)xzBe=fa9{x_%0S_5V+y zj1bG$$1AAab?s};hLX%pVi0%zZMje~uK9^er2sBPyf$=yMWi+|NNDlL*R_$1-4N_& zO7U@mVRxWQ0B%-8$OySS?%hP*5=7BUMX=nq>t~ll1W)BR^93*xqybrT#b3 z^^t}I?-jj=;Y}+koDS6|TBjq|(CwngWz#X7T_DUD58JeN9f+c9&Oc3f(SUD*-@m|= z?A|+VelxE0;%;=v8zT_KG#ae0G!2ViMFFtupcAk0@m~_*0~vTV`?IizGRkXfrxzjb6r&humm@!*6lZ;6Rgl6_<@=Hk_Fjoh)}37 zSpPV|PwMvt@|zi;Wcxd3i5$uDnMXeyFZ^om*#F)9I5$Kj8Mx;6J>0MM5)Zjt0wo`L zU6=mCDtstZahs(Wi9+FDQ^GJxnUAGwOILFre3!V#6J!uEGN8)l9M#xNn``8JlLh|J+ zf)3day7i@V%-q%{sH+6sT@CLuv3DtC1PkFjb^uv#s*6nCP6u0dA=wur9)p{w3CVs> zh`NDSC_}XFz*rN4rQ%RLROMl>j*<3-(pJCX+ed1b$ShAcGU_M{);~$;(0=o<6(FR; zu6_^o{-^*pKj#cQ$%;v`kGTBXQ#M&G7K3coW#)H-Ws>FrUtKJhoWEhPlwQguT!Y1m z=7(gMu_~OqRiOcb31Is6%`QZQOm239r1|~Us=23L>%Jr zybF7+7P()YNYT;eXI9s|vqI@LN`}@!|Ga~k=iPX1?-|`D^ERARui9bhNNuco+mMwh zK0NdQ+2#b|sH+&%rEGI4Y}0Gp4Vy4aOZGI~rpje4B!UqDcH=FO5n@-&flcwPv~ikm z_qo-cQ;H^WkETR*j4ccwkc%rm6I=8@d%MXg%!GVuRPhN18!gl-iB=wo5?^=|$SC>} z{)2=ehx?e#L)v;NK`Vf(Hpa{+P^6a!2aSlZllJZ zQ2P3QUA1qJ2vYv8Pba!Jz7rnBk7drJzbnlf9D+H*?R(kcW5Tje<_$SB|;2M=TEU;nJlr zv~Y-nmkd#(H*PIk#n~sF9mjb=8S3|8MzGvrD^^XZ$qH{TjE*9H7Q5SdcSM5>)fnQC zEPl@emjzf%keKzt={3f$Xhw)3H-ktTyXMR@44G+-ci`9d*aNh}2TKDCu4cbqj7=d) z{1_UuZZ{efT=$)k;_zlGPXFl#nEQ%-G`OSe6xCnZmi4}iCuuO>w1+IyezRt^dceQf3SX?%rtXCMUe~Pe=NV8RzyxaFpeiI!tmn1hi@!3=|6LB^srEqa-yQP zD#~`54yO|XrK&o|y+F)kVzE%W*#nx7)4-p7_2mHhTXDp;Kz#w!m-DVPeL@VlA8v!# zW>hB*wiA7sh@1IIP2vHjV3?wQ#^Ql6{PlKq#L`z_69mC}YN(Heo6g~wpi?@i*+e5< zajNL?_72*}-elxMd#j;p+>Du^@a`vA_qvdmN6Sl)U)jdft&}Hr9^a;e8@eS{o#a7} zF~C*udQ)=9lnz7HaEjC5QPhdoIv7>pZv!QxCl2LM`%vQ!69*&*xvX`=?wiIynfujo z1=yrc91h<7x8jmT4fST=uyZ0tfRQ41D0_klF$mcn3o|F8*-+sc2Y}wYhovYONB=28 zRVUcVp!ClG1SQw{*M|V>;50UC1EX_l45ft|O1?w|M!(ZcMoBAl+inIJuBI7Xj|Xz*9xTYvagYQ zYZX`I9ubZAaq+iKt8vR+i1dtCh-L94Rs71eFbWx1sfq~Q$-|Vm>}s#8`K?hHTqb-RlzgRoIl>yyg6qki^__NLPF9n6&l%m;b>zIUl(7h3XBmp7 zNQvM2=R*v;-7ZE6J%%g|ioP;%4Njgmjjp-UZCz8GoeaF~Y+t&R+Zc#aL9f-anp=;! z8&QTzFL;F{byvq*NOH*1xjGGf(-?Zn(8xP>0AeN;(xJ26eW$-rMmh>syGN!@uNEsf z-Tw(fDMK|MC$R2t@}J;NhU}02YON%q#%&;2e$r};@$4Kn`aj62Tmy1wY;~4MVt-)w zH;0=N^8?E-jr^*fUB+!K!D;f}SPAq6yT|n2Q;w-Mm7li=hN`9l?n+n5-Dg&J|2jfe zQ;U0gi@>sdA$M3qWqQ4{3P*;{*#f_)7q)m))#_5CUOmh>by5*Q1cjJ z$`j}9nA|^T_Br%6OLKPYoD*WHhht4@EkD*k^)3`yDcHQU1mc@wRzO{oH+ukPPvj~I zSaWLFJ21VAIcT|A1cYFS8HNaeqdsVu;Y)N!qd{YS-Hw3^G z^^_;HL&LEo_tAJ%ecP94fCp0U-J{kwi&nrheT>PFma|h_iMi~BIir8_NV$d%rqpqR zB}DbZN$!l?RVfg$5ihw4lcMS1WP_rEi3fL#eDyWhsxVmp1krl@DGWps2>ZieQ8KA_ z8EdSd$A@OwUxVglXFB{(Pm;ON$a;0I#ogb6F_g?p29J;5e!(z@EJZcpe`6&Gzc!)B zO54x-i*Dz})(Tjq-?CePqc)9F`LiV6iZ^V2APGW-;ZJs(@Yd5Y-!044Zz6|o**1P{y-ss&}ko4tE zkti*KJ7+#(>Mf-yAgXD_%lVS=Nk%`9L7gNU6Bm(L%TEu(xZ%X(5fIxH_d+E4qX1T8 z;xbm6#7GofbN&f(xo3;>mW{D(j=`!d{@Sj__Xgwk;Y^oX?6b^nXk5DgS(rw88E_w@ zLxjv%VPA=PrXugRjrsCMa0KgN*>XHAF2L)*iFDgV`B!tfdOxDpWJux(=(M(o%eu~v zzJ%Dl4~;QN0~sIX)anqowE`8A(as=#c@1R{88S2;-p>q24fkk9Cx976x>z+c23$^d zE<`$LUjWamItV$$(C|q6_FXe^V&Ga8KpIBEGbCUM%)XAMNU8qA)3aUXj92IAW>v4U zcV93bF>*0<_p2n2S8op@a4NOl5d6!BZGH$`rn$6B{nK6g$XlU)t-$bcXJrgw$~}D| z$)o*xgj-{Vo+}geKiUw$z3PH7o{)wKF$mRfdhRwPd~oAdBM5GE=_HA3b{KOv)GqM= zS@Bey^39m$4q$c)Q#x3*?NaZuF`e_k*bQgrbM0nqXgd*O^NwaIJgk3&v=WQGzkXZ( zG+3-*@`;f^RJ-CEiG)!~3^>L<%!Kg&${EUjwhpF2jg7(gL-R}_>+`qoZ)Lv&QAxf3 zggyQKn*1+Ti~Z7ml1si}CkCNBJo~rSVOjPo)HpyMc69ux{FolNPZc4(_GEb{EaRen z7+QH?xuF#=3UY1i#_Z*Y{JDe66Upu=NK+v2CR_>-mcVKhpKPP0o9-k)%6 zFyq*w8QwqhdbjEa3~QHFhszDwDGu)w<(Y?6)7tjKvt=`}4(iw}2;@U}m#rUg6_yv^ zqm=@lINPV(#LpmnVVbkTVEqGR!S9iEj={2#i@4#-@1J;;0a*dGRwiOcD9GtmR@~?dgBMxrI8%uw!&yb&qGl>4G z3*gSF%lA-{N!RswmQf1~x=i%fOOWrqhnZsZ{dcc~DJE82OCi-%(L4_qO_2RyT&?Fo z@G1Q2vws*I=h1PE7T4M{CSTbaL`exX-z2)mG*3!0Z?QJ7 zETK_iKxA)b{^vqSRBmaO9qrU*qNA20CY$1@RT{z?ERUxHUd6;j&VG$b&q(_9Y5ESKLwu?JTRaaFxOW+uW?JF$~pIv%uJ{Jo_ zmF_LK6qkKQt``-mcj;5+ySyc0Hdd?sk_<_R6_8Tnsr{a&tUJmvZVDnV>mr^ab)34iq-y#bfI*&Jh4MZV0@kS-EYwe1V3W>i2FZ`@qcC41w9>(4wJ4E3>a8dzdx8 zK-Ivu(J;Xcp+o#DPt}9%9F8B!PzBQcA0c-K4<5W_*_%DAY52on>5q?>Ky=sN3zjL# z^AbT)=l{uIc|>_f{U%~>_oeJ-J7Dx3nb=+~kw~({vQ2-4j?;T~f6DGc8?h3Na%UMP z6ZuZ|-^|_HLrnYE` zsLo1&2_SSH#em#wCw9I3m)e&7s)W&tBqI%=y@3D&13(V9Vzf5eJhF5@GF5Xw+k1FCoz)ff=^@r9yyZ?W zzHjBEU~BkCiSWRm28(s+--$#Jd+m=$M~9v+1Iq#b-C!9HA2@#1AF}kQIyMTee@wD|2v-PXbE?o;$_6Dkpj57GLK8BOqeo-8>08Tn=*jQ-M|=ssexNl z_Mui>RB7AWP7pZ_g?{vN$B&Y@FM3pqRGS|F@8KghqrI$p+wrX(u1v`jaBrXWuGV+z zUv^dH9_>GR)$Gtu?OS!=&e3npszcM9jh>?dJ+ggctI|&A!nvskW@2Zb6u5H(6PEg) zdbV=|ylF z^Bt9}!eIS_gi=3buvn84`)BnZB|9U*`F}82iA^yh!f!J5+4=JeUVnF_%KgSTy4R4? zgBGl4#D2*i|E~tC5!*!C!3z14Oeh?W$BJ*oxptzZahrL z#0y4Q-BHAal7f>jL!mtmC>u8!Gz03I@`HW3n?$j=xQ>v(?jg`;BQHBSW??q;MMh&2T3<3Zk$r=#LyDm2Ib4txA*3H0Dm zq*C%m9BakD>QkPLpHH3=^>r{1b2qTx&BHEGy^(+WTCNt&_%1`CFj)T}VSSQDgO&W> z3>HK6{wIUQicrV_X8op?Qbr&U_zC|UAu7v75>ebwT7LS{hJ1Ec_}2_p;|X-kVD8|4 zn>p1MjGsVo26~K?A{|t)>k5>t9n8TuP^rFjnR}GY4io{A3bzl5KD`U2)`e1?K}PV) zzMCk}EKPr63U^wJbVHto-$zNFaSV%~o4 zJHto?KLLd9<8`kh$K_6Im$gBobW0?}{Ddo5q|)8D;8jsAH;uqh>pcM7S|W?ZGF#rzZk5)d?J%$5eS`GinGGsNxEGR1kM6i>Y|P(XEhVA0hkHi*^fmcvR6;&ywNG?6X-lKs{Hxx5 z`b)bcvODu5lLOkzC4)^xUsfFH`BWxt8KyjRSG&&7BQ-s)-xbZ1^QO~l^RFIrpC?_3 zWoFfbUde|g3m71frEvkE5alU?HR#c?Qh)V!M{5duMsftmBdvP>}&a0omfh; z+6)4f{+_)zV7*G3#eZjqMLCV}mzcJzTl`w!>7~-8ms57lxb8ke(ojQS!GzTvCI#$} zuA0^DM8!U?@48DTG}b+h@8UYv!1Tb)RsrgxF zb&{sVE=TtoP`a!g4qsFp##IQG+*^!)(tdbtbFL8MgMr=jy)dS}$z<2s@q^G^0aY=btNB!0CsD; zZjVboU@Lj&PS&wmI2~+PDlV2fUAomP=Hz-&+K)~#u(&3|OJvon>IqjqqtzGZIl4k z+(@W)z$VbfAF5cFw*U3l5F6a#MzZZGEb|Xj0D!dM7I`~eS zv1yKEoJf|`*his`za+g~Y~JjJH@8T?Y!lot+Vjcf3(|&~{8USB*o>pnwHvyRib^c= zc9pb$mFIqprf2Oo5)Z2!MTRL@@?Bcv=A~bgYjDH_$)^<mJLvez2jFn*jcVC@WF?d@5TEFz2YTN>=0A$czdU$mqn zalY?5O0FKV9WdCp%BVJy@7eWxM;#2+?f^`pS1*e9aZ#T`7zAGa+ z*jTXepK81I2XZrNNz&1LYoYda4(_v*CeLE&Rp`9KXlZnuw-z+j zY$jPQ6M>Gqs(WaQnWW5STyOTt7OAI~OS_u!aJTfcs|b{Dq=b8?N=K$%-DvFVe#*r3 zl;?w?=7Z$5X^`{c`Y!OWN;(eXuyi&@KCNIJqs6mrC)m@{*9s9>^+yy8950EH0VOXC z({7axz5$!*&JZ4uj!gNrs9Budo>TfFGyoTTp|fBIuwSp=n6G8kxZIC zx4vu-X)6sgWIpU^I%nCvwzl;llh?Ztcs0zkuk^dpxc^tI4|~>h^Z{+W2m7t1g7u3b z3Ra%~fnd4Z=)=2>vMi^Cw_B}Wm9bG1!6JT8n{Pu!nZ;7?MUdk%9BOhtQvC(t*!Pmf zMzN6((EGXck*PgQds0NR2Ss0`_@OSt40THuEwJ|EJUv$wCyMaG>_Y zL&<`ExEVP&0QQreA}344vv+0Mav-RY4E~bcdondfk(B#&UlJ({hy0z)#cIPom zq>5$rywTqI^=nDz3T2(PU*#esA8^EnZ(JS4`p%O!FS`|-5ko!o7O^*AUvyvMaN z`GP=ts!Rk609A_ZZdldiqj)9HuBnrJQtE+#ViW$vv8*IZ}p{OWShxzkLeDKix7x9}!(-66dbEmEeQj0uu{%fTTf>7^GuS$MSZ zC6U|ZJON?FXT}p3j9s}$&amn05Q!qVBrJ|sgmtcEZQRavNa>yidu*;|JgBcq2zEQ6 zZE#L9XUW9+|DpArVJlS|7r$}70fo-wku(jNHZf2=G>;^Y4zZOU!-CHw3-coodJn>$ zj^wg3mRov3r^;v6(a(JSLYN5FCTQ&G?pMeOhR@5cqKvi9+kI5& zI$>C|Sm<-8LN`xD^-%t+cz1ZO`Eq!`Uwil!qXJ) zb-UV1R(a{xH!^wu`MlBz$9j!pB2Uh2Zsb*fn{W9>LU^r-beZ?q)GH%XSIv=1h5YX2 z(tC&7N~T1a^JBujj&?69{g(TbW^i_`Bx%0Rfw^y~30s`P1ES?X&5m^*a_ zx9^%uItg3tMbj%Df3KB%E{K_XWu)@zvRFxke)+mgJlG^wnhuAL71e{s{we9Tf^{cG zlpbqua>p~zTPt^WlYZb#HY?4$SG!eGR}IiVTAkQ*q2w}wC99pIVjQJ{56U$w-Dl+X zC6ceT+3X)!XJEwa0@5}Aw_ZElFTSjFAt0CWRjxQsx?hh9)~|z9utJ7M8NEvg_N6J< z#D&>Xlqvk%`i%9GMb870$$Fy6N6oA-ETlsatVPE6g)Hes>%O)>TDf>BdGeleXTuyA{2QEdfGOP}*$9wo!T^_foTeJSMzOl~6H z;`IvGoCsMhoNqF)pi31mSR=a0B~7qZ%Xg}eol!}KT&$lxbb^tUrL#;{wem;9p|Mg| zD$80`Ae^yQZrq)acU}Av&hBU_ZS&b4j)P(Qq>CWn3=C6mkehrbB6Tc;!$VZko{H)v ztewMTxr5Q8H1LWvi%g|w&pnUbm4`@|UD!Mp#uc&%kxq!NT@A zWXU_1pH;ip0~J?xxkydR&-8=tjwbC$U|kUQ>Z&qnr0=^8eJ)y>OgUOV*5;R+ zIP&E=$ila=ujm4PzX}q;!vD_IK&KZ;Nc&?i)E>||Z<)LMAnIX8R(o{S7$jT7L$TYA$&2mrP ze#$MzD43DU?EYp;zc@5>4r5?KE|Wi3voTeBoI`?bVMTm~yl$S{pu&NDmIjHF$yMuS zC2ETweOtL4BR4dXw>S$+|J8nqVJJ5BaT*u#;?RSxNS2;JM$Wuf!|-=chZtu@zUpvP zRNo`5%Gw#H?@m(|-u!JFA4*cj=aoUh4In)BZ+ly#gXInj=EKB6XGb%}rokI!>rqEq z8DBoRJap(_mOZ`H()eJ;<;E4*rQoA-Mn+VO<-aU+4>Haoz9Qfg8&-RGH%YKO>8X!$ z#-Rd6re!KwrN?ZUBgR?8c?>-b*|b(wov2{_BA5skb6>+j_wr=8lgu-f(m;6oV}@(G zXCa<)d-if=cGi!@w-AGG_&gP%HgmxuQ;Cu9rb>3%RtRJjWu!|4)T?Yi0v6wSF@$-& z^I_e(b?3Gp4MvxGxPLE}y@@-dqa_9E-ovVVD6b^Ah?a$(&G;pS<*Cn!8O+1JN;2M7 zd~RJs=C=PW0Eb?8>}1^Uvde$=DhF>r6vxvn>+`8;Up<;ER1tTgy^)dURkYZKvO#Cw z_QP(VL=!vEVrS>tQDo`r(_8eH#&YG{x^p`>_9kmw>^*E`r2T`jBsAtgXXEr$Kgi*% zd)7X8cbVRds!8X`S{$mLFUidMW+X; zWgKJO&d2fP3zuZE?!yThVp?+f>URDo5I?UfKCde|`lMigKL7wA07*naRB0bGLnT?9+xfw5{YsNmuzm$h1PcY>o5<_w zJhFm;{8_QxxE2mxmMvZldG0~ACao<0>PfkUvnG-^3o{oitQ6X+#f-`SGz^Ef+-4kl zW83>^sL-Spd2>yp^u$E|wc)RDPfw1BO~m>Yy9^KBwQc%#1%zIWHy8%*S}}&`N7SHQ z_-DQ@3f>Gx!8^MuJSC_}utGc5*!HeYHP>(~9JZ5$?ppDoi;x;mGGYf=jl_mgsPe?T zRy8h+o9*eT;d2hJzRAB!NLbA$`WPXrmZXC-7b@C@>IUzM7ZT0n&v#YLuLR4QWQLCs za?&hv>7iu`ZMbl?)rw-fHvHK~C>cp+l%5K6S@aavo;4q%RvIcq$(hZJX%+?BCNYXd zW7f1uj6xo%VEr;k$FKm(KZ#V*xEDia-q|-hQp0hPtEH`+uZt*W8B){hq~1AmYHHGw2rjUk4M)F?;Q$}iaYc)q|#9u6@^pzaz%kNX031s;QeU<6; zI1_LRSrgk>;8@m^5A}`wA~U)a`>M72^kXAheZusa$|^WFn)FMh%+w5LO8{T7FBWwo~lwj4mB zXl-9lI!3EMST9&vh7}NgeSP(1)6s7m?#{Xy^XP5qEt)f(+3ETme?GsTO^u;pR(H-f zSTUbq!S*+q`3_LQ`W3)}^&5n13?1|Q%3d*e6vxF>$@Ig|UykhjiMaGi524fW48Qgz zeC8{oyCZ|j4vkeM{XWa!VAF7eqd#-!XJ*?l^h?bcm@;QND`qlD-`AUg*<|Kt<^UC} zUjQsvtrUvY27-k^Y}rW)jh3&PT1DUScT+MmkOi1(wG|o#$5(nz8|Anzlkc-y{Kb9c zjiJSHunOFjRp9Q>SKnM(4L+TKuLK{!DZa*-R$~lFl|rH5ID8$n#Q2vPm739^P2Y*H zE2sU8v5d@UbXmoz;g7*7)Sbhb_9H)ICNs3zW9GY1feO|y00K<;ac|lfdNd;tJbv7` zzG__mJzsVzpW&x%zJl)Kwg!1a^4Xk-0mX`DTt5(yEtr9C>#V~nYZuzpIQs1LDihvJ z@3ejd`!z5=puI4vDEamuQ z@8}rR<4w-b8Qyr-@hcemygLA)^KyW8%dw4=Vne^iNRWMdgC*gMwzm&*v|otI6~TYA zW~Q^XBvT)^@Gg{#3xKs{`BxWn=KHMCAp7;wcMf%QzwgMG5yo=M({^+AWM*t==T#Y) z(NnI-ec}6v^6}zH_Jwafv^O?Wx6Twm}m8Z@{wxH}B)1a}D*2n;@W0t9z=3GTrI1PDGrg4^Kk?(Xguxbr*zI#svs zIbYzunyQ(-_UzSbt?s9v?%w@kF+EChqAmQ}!sIKXSb5svoa|1qyo4>I`Obf9n$X6d zBb~3ooPzOSub#unpUsXvbmF;kgwW29ymEo)_d^!vRQEkZ_FwIYqk)t`U zsjkK%>JY+AmJWK9P|;<=aZaq?U+Zln!-(y4JFuztEIZ;@0lOvgYyY;_NoAl*dF?wz zW=j(IaU$KGm0|RpbrTipxY>!CGn&DAy-luQbK8J3Kpv z2j2$XD*H^KU+?G-BLVX2Bp*}3olV9MUIY&hR$A&njm!OqI~Qde3ZO2WdbaR@*FV$) z-tSi~!JWtbMNCi9Uw|OU&>r5b4z6?&m2%0;5*K(+aiEui*vM5X^@k8g*%7<2G{<$e z@Yt+hK)<#%&`ROkLFb3veZ(L^!l&iW zjw2*EBzP9df8PF6q+oaBSC!DG%#&XEUvDTp z&8=mK?huex?(YtzW=&L2{A-Z>X=_lai*MRpJBNs622C3O-1SHJr|+(G zs#XYGVSzs|h3ezpa5|laE)xg^WY2*W=0I$ll8Jk39`L1^Wf2qJh4e(c`%M~)kbwMT znlSJ#muqYE3d^R*>b#KV^@c?5G53d02Cc0vJ29$G6Zg=~xRQ$-2cw0HGm8XqYQPyz z=lyN@sa1Zn4Bk+S5&}PWlxEL))$M}btAt2c%G)_eZO}5#tzbMj2+ZBtfmYQpv`k6N zl(u_hSb)9qMjxr133D;~BndErbVDdUkk> zD;9k^9CYHU;H7B#<;#R~FjwXdJ(DN=$Y{&^o5X73_Ylhq*+Vr)dA=~8r9d>osoS*4 zC@M>Khuy16>r5EdeNYuU3{tXku_mY6Bz$BryYX_SH!u5_jPVx|MD-4!07Lw9ahSRl zjY8#uI~&wTbCQqZ)Wy%J{4oY!K~QoXEM^YYPv_VIJ6_Gui0N8+NBx-KX*EGY;3QW# zToYv@BP@6zCt0f^MP?X-j{6&coJ07)tp4`GhHy4kNikM?vC)MC1Vvm_|0wYq;OM|M zr+LOE1PCa!9DXVg-NCYpY9GJYfF!yU1Rl*{SK);J!rsc8KmRu zSwlW-;{d?gEcrY)=5ZS)?q{`vtI$fW+~jf?Oz0ep24HxO!Zd2|y_1}BhWxvC!=5~a4GB`khZ~w`d4AIIR zG#yPxdDs{Hmk(Kb?D|~z#l0z~9W?R%9dDBP4#?&tf*-RhUBH4MT9X}Ac$Xh?CLzo` z*XJ;N^l)4Sv}Ojy?7mkw6ii~XYtF#0~(QiaZx0SX9@jDC+>OYqhw@8Za!BXzu3qc4t|~ zFYgahbO!A9he&pfr7chQ@CV-nhXq#H5h0<^5=vj{3?#6}I*K`o%OD=BnWb#EEAOO_ z1y@wz6|>{YBL?rsy{y<^qD*v^SYRUmi8e*jMWTaBtE|%8jJ)ru+>1rXrv_yNcgnam z!`jRdu5S+n{;WfogV-I@DOq@~TOBXzdYW|I5kEomMwsE=1mmnPbw)-1JiQ7L zC%9lvvhrNp0znFj&qo?APLa0Pi2OH;+VFwO4&8oaGZYv460CvmwC0mBMU&F)K&MTZ znkR`xQaQdo6B`E zq;Q&8t=@|k(YW|N;mlPaT3TpNb?0nu?6#sol+{fU4;{aL2R0gUBJLp65frR!mB28D z2$>qLf*_O|r^_Xwcii1SCH(Y=7qEa&>~U0)9rYy>bR${5x2x~2?fB9C;^N8;y$o;7 zv+wj5aiFqoFD=g7RKhyi{?`Ypqpv*eGEJ3Nje7I-@#Rf3!D%A9!%`}7xxRu{Bg9i@ z^QZv$dKn|rD~_CKYWV!O=Gvj33FF%Ah?zIRW2vEqKX9_lCJO+4AAf5E&rDUR>gl*# zDHc>q|Dc5dtHG&FZi{HXOT7K6e`6U%7AR+U;;kpXCl(#dU(szP*07kX%Si%J(zHHk z@MeqbwmW;6SIJwCL&H|r8C(0ifb0q+ z#!n}&(hOIScYwf}6h1m@3+%3}45hAwu$8Gnh#@q{!@6a!#62I|P&fV4$HmcQ_Hrok z%Or+s7Y_T?DJA^z{FwPbawG1`(QF+&YT2~?q=c0C_*EWv!Iks-KM}4aF#5*d{u#cV zVHP0h2|*Php!Kc7X(To@BJB?eOZ^LU<8_vJ!Vfc~m#6IC&Np=4Ep+J1Ydn?tEUL~g^}ItF8-A>dsU)4WsoSMk zeX{htC!7!ile;vSLr%N}Zam?{hc?^i7z4NAg=j&Yr!##jWNwD~;!B@|M0Zx;$$h^< zKmL2N20`p)R{UZxdj7M&McG}I(;jG{-%akmnaB_#l?R7x@I(sW zL6=xspT`5QU}8faLDhLL6ObI6JR1y#6>`&pj_zf92Hw*C_OVxpNdoT};XF-L^$${j zmkhzZs@~T~g=ZPmXmhwkll>V)70=GBAPM|E#PaGO6;1?WA6$uw3N%2A@tDJ)1{@IN z$U!ImSH}$cz2YN!P7*`=@332gIEQjw5hxlr9*~5vA}?wj6)?0Ye8z^TV(?VJb<`Uu zP?>KvC7RW79Fex8RApVyF@rglBfWp>0F^Xso+%9!k#(Bp;H#} z%OB*TCS(85fN2U_Kte8D;G#bcgE9dSQCv=HJeRlbGsM{10l@s`_Yu)nltdqL zPjpx8`<-CUwIuj9uRj~?G~vVe_E)Mxmmxx4I{t}6uT~K$I%)I=icS_v+HCXqRh>#r zUET6gMVQ?V87t@wn~SibyU|dd1BWOt)-S+dSWPrJ^%G194!Y9^BL%+2EdxW_8mUuESaR6P<-Z7Q!L@)doK*yCbLH^8ZorV@g1gw7Xc7dUli7fP$q{~5q@4`3(C83#v)fl#BU3uni z>=ixov21=V30yy)xlyvJAOwYmj$~QlZ1}t7ULjCIvR^|T!hj*cAf#iHv>bvs`|9r+PVnhz~dNcR~A|r z_OCP&U`9m{iEGkx$_=r1-C4Ptp0Bn~J!BkFI5){PyF9JYXh#KtzR_eGPHjwDnhO4{ z{^aW_Y|?>~Z5jQo3tVlv1wcT1==^=@4P6p?+uK1}Om-c5W5WBMHb6*=%9b&cT_SsC z_q~T!H|p2Tew_-3-G_f<>S?xhJbG#{un#_5=x_RYsjz3c@2=j=W7d-@K7VDi}hqITruG?ZPUuVS9;KXDw=UQ zk7W_m!b~vqCNUzG-+nr1=}Vc){C{U3{;!n8|LeHA~4S4%7{y^__&|pzu$Pm z4z#4R!b^!biv{e=uM4$gVB7^sh~#81I;+X0v$LDq6|0fUV}HC0xxZ^BjPd9d^@^AE z3}p#D@A}eBD{6nP{u5n5i#a6^rzgcW^`p20yZ>(HOI;f!ArSUY*FlnJg_VOI(!%SG zF`Nqi$mC-(NYT>yFRs)RqL|02X}6TkZp$}DGUgZRfch%1$})%mZI=llh~>T;gr(-3 z-HyeD0lMG&>JZs*@1E{^6vlmi5_l08^D#>p&eB;FHU$eT_!8x9WSv87_uy7)@b$j& zK#k8hIy(@`qLM-x1%F6UpD^fA(PJdPi5wA-*9xO%-h@C9Mk#>6-Sqvt#MS3D(lMX( zSSWYk;gg;DW);RO4Q|#-dTve>l05CN=h;?A1`9~YOKOfu`_Bt63!8A5*u>+RL3e4$ zGCHVI6f}I4w4hp^4^g`<&H#W{zbtMfUsh)gEfTNg~ZYSTb3*1?tA8N^2n(^7yQ%Q&^PBHWAJ<^L^j+;tdOAJ=4lhe`wt22b&!sE>6 z4or6lGCHD4WSc4@H;41~l~gdsgE^&w7HtlpTL4?Xp-HDQ!`^c}Da{5YzOu9sSL_d; z+tvr+$o*B}v6jqQ;N?oQ-$f-?Wn^HMIq^)3D@*n0LjMIcjjRgAwCCe=ZZEM2x>CMI zEefDQ93&&Jt(I8+3qJ@2*p4Y&pa3kH`0@vM#?nBE_kK10YAK;!WL_!)8 zo2PIV)%S%*=cn4CUobT$QpB41Zguk6^#Df5S>PfL-7^-<^tXGn*tU)yP;c*UEP|%! zw}gI^&%ACTDyE>=D?>kpbXH1ja#5tYP$fi+Anf_){=UvQ*9ia9A$rc<*&k7H(AChh z@iKNzm@w^JcV8-=B>+1(-0(q$5#2RrPPwG>2-DX_crtQC5!Se^PZ*TDjfz#xt}vmC zU)_k;mOQUJO*EY6>x3d?HG>D){N7U|SCB?xD?Oh|mg^`C6ID&jzgJl_1p3>v=clhKa2^*8q7CyLnUMgyp|M!Suj%F_ybo*1I(>5{Jc#7<{4^bG39 zvx1;KG#1KKkpJG98%?Uo7`8oR282luvVP2!5q~)ler4k6T>ilQb9P39L{bDAoIW2l z6s+^_G>lB4?gRV;g7hi0bW5mZMH2^z{O3clrQSJubI_yxKLQ*q$$`yTse!OJExe0Z z!Q$->aiHCy`hVxu0=I%xEWFeMhM?Xft+?{tu9^zHdhnO$|p44TFNzT*;{j4ESp>>xCbL ze-5f8I=}n|_8zbux-T%h;x=(4<|1 z!#+d_+lU7k%k0zIFoW_iDwEqc8BA+69T)I67x-BJ({OCiA=>0}3t^7dFK!ypF32S_ zKGaMS*08qwk4>yj`7Yuh4=1Rn2;EMUk#BhbZDdEn7po-DuS^sA-&|<#`~5ohxfkSX zP;1<3>O=nyR)qDY2$63LN0oQ#o=jwoDndNVW*Kd{x*NBX+rY9B(_LQ&Ig4R*C2Vvc zT=et9ialJ9DeL8GwwKReh?^>zQ<`IyzrZ*cZ_o2#bvO}f1LC+U*lN$6@*T1gVb_AwVD>?(+xhJkQBc*Tv?8}sc8h(!4 z2x!+KXWmA*)~GdLIEAgBgozH51#&LRLId6w)S#;~KLrfmo0YPvev!jtZK11#s zb<9w>(;jYM)i@pcYD*Y{2Ud6RtaT!*2^E(2M^04YP+}721hh0qAq0S@WSq~~yAH;$ zj#G3hreipRKT?o!#s>bEA+tb2l)itTg!Hl_>x1(ai{cgS$)nP!%>=qQ$MI)ESP_Zu z=|5XFP3A&&zKCMS5nal75{%kD_(+dXstJM=vnQh;H+Z~sqkE9Q=R#Td2sX`A@RtNZ z8QqTw(`=R28GgYQEX2e(+>%Mx-ns;vO|h?J>K|m`nE(C~y)`{sZp|{ckq*$f5^1%0 zO0oMe!T4B(*MPi#=2>X_jaKtAY_Ml5gDh){x9g(vzTMN)0R&uLt;)h!7XBD@|~o^b=O7*ozSl(Iv7b$eVr}uE|zM&*o9VM$)L$;e9TM; zPz$*`?TdG~UlUdyHBG(Zn5}BU$QB9bS8eg`o+>hU>XX|FPv2@o5=h~>|B+_?Oz@T4 z-#4f^s+|;oEZUGCEC;h0$VqLaQY!@n+-vY>XYDww@#86U|GYsOxRKp$IRm!gaL49R z6AQ`3>G+J&9_e~=V7&Qwbc1f2+~rf-eKT7`U{hn`v-JxJiY!=YXrj_zF-oENsRx% zO2#!C*)#JDDctU`u=MYPL*pTD)BQHjYJKkde*lBkPOXE7h&5mEp`L+rkcJOaSl_kS zSKrbhLGqpG(cgsE(MD+8#3e(inNQ5B`8sUjVuqmjI1`vruMYN2f_%xRpc2Ow_bqEu zeBp9=Di_}6*lMHtKEhV=mcaX(RR_Yw1Fa)dlMH&0`&S$LN1f8cJ4U0Ac%r~f172D|M4 z48;Ba^2;GkIB5wHr2hcAa6;f~gjy3uz#GKX?=Wcn12;^R1_O6Kd<+a(n4g%}qo`h( z|BbyIq)FE&S1w8cScoNBHYnsOPF@Di35dc^G%h=|r2S`7lNS>Y*u|;Dlz!*D1SHVH zZk;-CQoBnj*I6{(5nyVJmC0ASsPa0${$W1pZg~d5vwzqs?4_0_vswu>Ul?NidV3z8 zFitUW6L2}-p^#=V+fK6wUzck!^oAU|!>Xd9l6oScFOM;pvrDwTy8gGyYB(owCk^Xr zG6IWpC=M}bqh2G>vbW>HiGddOmf45VGGS=^Z{jaUs0>m5$tJ~8Uf4zZPX z1BiRLB=!k=OUrhJT))Ks)RhonSVuyfGxD@?2=Fu>NS{AA*U?xsC5G!DQ$Gz^E5#?W z4uP>jvPCenY8>qey@GyNprQq#aD&T<@~TFVq6gk+X#a-PF@uCnBv^0uaL2Q-hkJBZ zn#tr?(Ssb&+LHWKkeS!9^)?lF75Q)NF4lo`$N!8q@`KFn+AHLTjdzbZ-|QO>_7te} z8-24-5wCh=bjkx8I?}<=EC&Cd;HYmJ%XEo(xWHG*Vfzksa2<^PaCJZv4$IsqCDHjF zj}TF&6W0GKve1Cf)jTE_Kxkubb&h5-2(AAeHNf^b4+ry?CFGKqD{r?ELu>u#f$k z6Ltlyw$hQ|QXK3gW9KDSd$j zcVK>cM3Pw&$gf9#GX6?RH)I_i9QIQAEjs6ng5`^yPD?0B1fCq$LH0DY=+~4q zOMX8c*Bk3vv$GClK*gBN?^FKk5?iYwb=6PW{R}$nqf+is1GC2}FnBVn!NeX@ zp?~^;fB<1`EL`7xR2MxBu1GY$K=;v3F=Y{ub}juOdnwg4u|2VUsDAe~A{79qSF$*N z%=~C!!3aWW;y-h9toAgVLyE@fF^!G$a!8Os)+65p5l>E>WjS9ShalOuC51(e`}07h zN6JYO+oy3uSZ6OzYtAGdHB2=o`%O4NSe#Dy+seu3nx-TPEiolbf{(T>p*$)^kJJ(S z%AOVe$^zPq2+%1TMA4@5Q6)T?{ZrQZa!}0`U@K7(mWn@@81vR!B9HP%JMkCSi@H;- zo(G1RYs6Man51*ciZ2~HTvOq~!tkH4Fv+vJkZEgy4rvHZ(xUmd@1?dNa+HU*-XK+l zkUZD$lK><@h1lSCQ=*puSLqn3pUajEA35j|s2}db_I9m>`x#qkp71ZXV8<>?;Z7<}O6;m>^Vs+7ae}%ZP6p9U z-+zw#%R#sDJD|S9x_=x_>dAdwoT!vKdIl$!??*R&+l8%RMTp2;VD@WgwT&r_LWL^6 zdeBWjpTBWsV>m)}_VXYqK;j+Wbyv4qQ-CWgJ+*cRzc$uUna{h|g&AKa;y?qC;rJyW zgS^Hj*Z(JSj!nnKhq&F;^#`|65Rf|hITs&EpYdKCCxI9{1!dw-<< z&mI9<)t0!w4u0ywkx0a*>fT&(EjO389>I2mE7u>FuB`fsojc(7&F82wnx@=P_VY;Gz2I zjt9J|isCcCQxVdL>YiWgPmM6Rb9KHS5oTd>oV)yQGJ4BM4qE#XGTT+NTB`uDa}B;V zwilwV@*t;>U6Mv2ATFM}!sIS;_!T@Kc|rJ2v_(~I4@`<%VW#QJbQ;9)jw2*=E`DiV zceHD+x+W;)31Jqk4eKjECE4gN6FbwIymLJF)~G^NDt8qkAhI3DDakHb343zJ$;Qo$ zl`ye?K~f?ZDX&Mznk?L}S5Cl#%`*PHb>{nK@nfR+^<^e9-QaqRnV`rh*B!?8uRbi5|@eTUWilMmOOo0(*EMK!P zVP#6lbp}@WcG>QA!jC72KP;*rS@^H5%l7!9r;2lks^BC$qy#SFTbtjj$}0`_fS(dO zt1_5Dav1PlFr$#efpzB-hD4s~tNtQ{`2+@PpTmQls7dUVVey9usxHi#1AMmA`{k^VlOO|5w@?qK zgfe|P6dypUrK6R6`jY6!zwKS@)er~c6egAk9Hw(2w8a6DdnP z!VSp>oh#BRFIkiI91zVKWROli%?vcRE?Hz}d{;saVtLj3MiRDT(>}J7og|lhaywg3H{dl29plJSj99hBv8OF^6NIJoxu`7N z;@i_$DNuc~fI$`Bi`P~nfE#$l7^d9s6TPA1@4P#)m+=u9WP02bgY0I}B**(Ys`?2* zagsn)zXYB-KijEPcp)hZs_HGIpOs=U7Q?+8sp(6H$h4~zz%n5Lx*w+1{q#GEzBl}; z!KA8ojmyScK73b8o(ePcGV9x|jG>Os7Iu2;jw?5j|D0TO_>tcXenm9nZmRqjbJeXn zEM$@mu!?e7cGa()+obPHksVqWrE?^@gxLegjemJdCD*{tx7UarB4En+*>UFpzb2D2#Ko=(vv^h?thAb1fy#Db4HeNzJHW z0t8JmU|^X}q)3Sa%YV>hGpV3r)nBT(Rg~C%rB2`20JT2=@$rIDYhGlQgY4*qBKv<4 zoIP9MG{Iq**ZHiwxI^Pm1s)_nT!}}8fF(hw2*L^Ls2Lv!X;MwPmi9kaonx!w+VQ$W zQLpD-W(^rdZAw^`nhDCWwZCQ0jRJ2;a9Tk6QKjQ`wOZ8FWX`gT$Wd=pDLfEeC&x*a{F= zA8+EE=zi7eeV}N<9Nl2H|I1*71+o^wjyAOW1h^6NtnSE*KI76;mUdLOHe@5voioH7 z`g->@CK{M;)%&m*tM<5vLTi}_yGf-&fXXjr#or!xN4d^W|8NIFx(uU>=iJLWTXofo zmP@V%sc2?;%WEayTdVOaK|_modP}=vT+bUmf-N7{(WDtvHnrYPGc}x-Pv~C0Bp2nW zO2_?ldSQ^}Kpp3x%5EKR>`b%_dKB9(*FGf41E3b7We~agK4#8#-W!6ev37SOwYx); z_&pXbbUqI=YR6PNJ4PVH#n*r|Ta|mahh_WW)5-pojjZ`8I7hKVYz*V6)Cqm$~Reyy!wdX3Vztin7iVtu$0_$W_KlvZ>KXn=zu8i!3)AJ-x18Tc>?u+Z^qb0!Ct{Qc>`zf{g@f2kY|K2K;H(=wU+=s4f;pvP95!0u4R&1e4SGymXn z!|K&X_FjwXrxJ(4RfJxr;U6Vd*&#T!Vl!7)pjHEyi=7uWiy8g73k%r1;k{20Jl^d2 zy2-pfq*k8)lIeJY`}Y5dpB6vblJx7muU+4fYDhaGBeEwncX zd<0-SY-<&6dEB2OSgUVZkJxxLibC5wEQy@;Ux)b}Ppc-oKsQe&>QpJW>=yOsh`E1_ z@R?S^miW;n-%evW1donI?d;KNo@!_%1`H>{geX@VrTwW0_8&Y_`^ZeGVw3D1`}87h zw_H;fCwFLiAJHLE9vQy_yzcqPU98*te3y(O4C`u1-1v!NzvEr!SH=j=Q=nOF785v= z=-5|F#k32GCVzdXLe9IYvCMt4cKL|70H5(N%^$bEsL(zTsn(DVr<#9xiM64Q(9ks# zU#8XZ{mrcOdVqc6OiJTmzpEXJJxT7mOJJ+@AF_KBvjF@gfyyVb_7q3PLQ3ZEaa!JQ_lvmFZ?F*Y0WbbcKVNzPe+uAux>AzD>;y1$0*8fPcngy_W zE!(m^p-|gLBS~__VVGpv z6zok!xq4#t&EpxE8)&Qo4>vz zkbZp}M#{f83W2t<+y&w2EP8D^5(kX-d?iIB@0$A4~Vh4hQ!+xtx9&crdMi2+Gu!9%%SLF_IC3zd@@Xn^>W>tF`@ zb!~`_EZQS=d_9J`OF2nU9YIaRdFOtcW}S1pFaJ6@gBHr9Afg0TLc^H}Wks-2j@C?h zLMs2Cl^E}xDLcy7vG>ksLQu?7v}&697_APdrUBnaeAy*)7w;7>cVyO~R@Kx+aZGbz ztX#(6zdsc|GsR7d$0BjCWnK~Gps!~-*;tOF{r%iRS&RH2Qd{9nsU$O|9uaq=T^A&C z%>yoS80cg_k?;K8K@!K+=WE*}%^ z-;Q4pXPnif=C)8VAQVSsUtJr+5SX0^_pP>=B%pDly?S+ zuh}~wkjFV1_V@^1A6ow?cs8QZ-KF#AJ86xjtLkd#E!K(c;htfjl&CHYBa?Y7QG+;E ze_4}+ML`>A#s{$yC+fO0F#h~px+ZFrTi8F%|GD=r+xrQNh`^@^Cty?XgHCTMUc1}i zBMZEa@X`Z)Q$U{n(>N*PTGZ0FCz}KxKaA|V`h4G0J&!ao3pEJNk0tYu7}}yrg!0s9 z+1k?M+v67qcdCb5*xqI#nj~mxZeeqcC086jJUaS^7v+L4TdnJd1{(QiU-2`*WK+7`mscv*;sC+)GbY-PAfuWw=fVrAg z%)S>VWlm7+$vfti_-B7u((1@;&@^dlRtiYWT-OwF?3OlmFl)L2oQZKCr-Iclo5TcZ zv!9W*Pt+#2*|Z6`tY>c^(~a}-y&vNFMdzg=QjK9Q6vPep>D4-6&o;L>Dv0_;4jTzzd--cXfvDJ&Q+xq{)lmCBC5Cg z^qbutb5Co#UdTj?n5ZS?QzMhW3EgjxFAJf_=ViGon+nJ#A`sYc4*SKnoq z^jJy*9P3UrVql0Ma5s54@h@P-|8r{<5>e`zd4^H8m91UhFSFejg8)_LC=eF z=egxW%;f$}0gQpoA1K(kP-(0NQia5fyyYV2{v`(2?>ZYLUid~M`C^929_ns1axSF% z#drGo1J3P-r{!){c45h!9n}^vH~!JHQ0POgpMAx;LQN<32-m;Um1L&3<-VkYO;X?W zzWvQx_g4IM$;&rC@7S!*WFvjppWDEjzV?dK#>>X^OzXGb2(fZVtv2+-EM5(qtg8ja zFvJ(93g!rDHM@xGL%K`bJdfWAnUIdz?-NZ0aL(M=z>i^DunBw#j0QDX6`locy>V&! z`Er*gA46`)xjML_ih9{znCtHGrz3ec>d+VK7rai^t`g$Q{dft0aB>y}8P?rvHosI05CGqNEL0kOBu^f29~dE&ZG7z>Gz}@%lp0zn3!`M0 z7Nwt+yXP9IN*zoqjN<3 z+ychpr7!|39C}N4=9Bn*2Q(Xs=54cIH8^&sjI;krctWKI&bK7he0%^ItEEd3FV?n%2PRrTxD+yjtg__}PuwG;-6~D1dXP$mn8#{i&?z z)%J%P>%S0|L%c0pXMVkmhwRo#8iyDp+aF$nih64<$EoJyU^zLSlsYQy&PA_>>F0(% zLi_0?-?ldUDp!@pNS}*LJs$2&ceeMnj#a4?gWOAVnIUT1yuWWSzW5uJhlQN<@D8#n zL29Ul8Wm1r8r0fJiQF+g#GoYBzkwjz!5j0owD(Nfu&Qwb?Se^XB1r9gdUDYH=sY#w za#t4!n2mD3hEq(QF#DeKpqXcX?9Z{Kz>s8IvlPUkD^$oLV_QG28r+A!WY#QjSG0H#|JQk=hO$_Ia@VCyg_4({!$udj859?^__ zMhgyGPQ=BhlbtU;rw0lBZDPMfn6waII{4%AD`=D7Zh<>k0nya%-MObz+9WKuQwGsC zQw_4hD9KSvA~6z_wRbQ2HzbWu^xuvW_sYS^5*e#|75nm^d7hU8&cJ2khF)%9#K z`#zEP@X2O1$M0-aSt1?IAjv6lr2!WiAw-5@GcF z=1)c-N0s!XA3yS|T8||mZbgSo=yQV)=SumDc_oH|gIi#jU#{MT%R5=f>!ODD4w~&t zAe9)ZO?OC-;8OU^q;#d9uzz#DU(dp_?bzlop!}TJ;(z0sxPjTw68!hw ze|nol`4P}Anq_9KTNRrk3pBs;tNk8Wn@y9q{I=cpW6sB?y(QaNTLjsC;W zpo!8bl5Octj;>Yxg*oiYamJhPD07;Z&BN(l3Ca}zcD%{ZJB2E40+*mZ$18^aCgB2W zH@P&)U9Br9!=1jf$vB=9x&jM(*!k*$!+`oXpS~3*cUWq?>7Jkp7MEQTZh*DW}8E$Pue7|9jkiiFN!?R}o>)pmlu49Z`w z^r7<}601VxL!{_G5TRZrrxQws+Yrb)TdJqH|Bu+5y;hH93bxLHbRS83v&$f{<*n3G1I>)ip17AEXv+xxL1Q zI0@rJ#UBwrJUTBS5Gy98x9h)!ziCDlh~81sL`M13o5{(Y zabK0Q58KJH;`i%sLj#m(Yd(%>wi7M@tFnoagB0T4<2xycxa?-8n64*Fl2kkfV)+VH z#hwk^2V?!DNH9MgY#Hy2W<%ffKE?2y@5Syrx*(T|S6%M5_FZP`3nqr>0y1w;WM2y} zuG@_wCj?Z>;5TDREi$$2Oid{{V|x$3q@(za@8R;+a%F}M=FIa*d(F}-jesDmn`>!T zfjOYYUtxqSqRa{1=bux4(PP_t$pH+6@vG?@_SyjZjvec?CgeB9j5C7?=nYOp)cijz zeCewClzraw*3ev>6vLM_9M!MO;zlGbFG(>dm9|1jce0dVnPPK>)Z$h{Oi9^nZBrb` z+XgB+lpgGeP%~*#_nX;5I6ijp)HI z8hj|as?b&X_P=uhyo{DYLd$;<0d>wjpZ+1LkV6J{Dz0O<9F_0LI{238k)_Aeqg|P3 z|Jd_eY!iJzDOmu-m~NU#ufB_}M~@CO+Ai|5q4Rf}$vOoNs!p15iRyG@gP}(}77lUo zyO?|dhu`xiB|RUCpU@VgO;nIWhqlB9_ujAKig-+=6ToU{Qq7ty*$eIsuwd$K+<=q17-pI(^8g(jsJb239Y8>jt;nFuSiuV;JP5;x)%H13)#bRu-Ph_1d}(|pQ5mzVx=ZMJLKW&rcCgxHdh%jQ=L|?F^nDi)%xw8Ve8E>d`bv^`i7mZgX z!4fw7w?q%${(4Y2YLc%9Bz#Dblhejw`_91pyzVG)ty!Wf!M-Uk3^zF@&{GId-Pe+$*qR=&Tsv$1kL2MRKJ9_N#wis zaAS_gVgeIFWIqBYf4Z`cyg&q3w?Z4}vWMygN zg$I#64(!i#`O{QLH47#wkQFc9oKqv7_@gLFAQEoou+*o^L3e&oH|I3!6^4chyj}8>sG_s((#lGdzGZnP zLPAH!lkBdDlt7Cp!x(V^NT#3dp7cWHjz;Hp;3ku0ir5S- zSg8B-L>T+H^mk8p<+6kUANG6bixbWeKt3@TMLw=vj}yRr5xd6Rb6>K0KV~Wksxy@ z7D(|!AcgMd9|5C-^D7tOZ_|5hFofL3i{425jY*^@DxFtRfacxonw}j?-`W^u1)P0` zu;o-UCfQe7;BTwd&k+YImospYztZ=pc~4W(kd@e|gOxoCa8F}NZ@-R|)_3g}+OsFQ z;L?b9VM*VsH(RkH7G_!uJ=)0&p1YB$9GSE58X*GsLtp-}OHGD;n91 zX`yARHr&?g{&rzys6e^!YtHPLw1*=ZV4qWW_UBG%U7SK<2lPDi_DSz>4}N%c6`OJ? z<7ex6T{yz-eljSh*Oy{Ovq1|jk`+{vaJ*+*Kw0nFz3yxXzWCvtk{kBBhBuoN$Eou0 zl~Bhf38}yUfdN=F!StynPX*LbK#o#==}~RmmI1CIzl|Cr1qxmrn6Z_@iZnnT zz0N&s4vD-o(8uEnQ8kjNH$0Hpoe?-X&J)lX|G)cU)y%NQ0o-A%hnJ zu3R)ws(h>rak>waPTxuO^Uk*!1)iQ2^ale^hCig6o5kQ;_;JDCqXJ%DU}x*%DTDpQ zmUr@qhkY8sZZw}?;Sp3f zJ!bIyeyw$>;xSCW08lV62GaWk0ksu>*GU2hlPo{Z{fCy&scrBQ;$h>;-+ z1NPghGIJUEQ=t&)Bx#0#1ewtYQ9j4wC3z>&@j$!T%b-fpvd=y8#;l9kuJ-x3A6%?q zu6TA!*>?WNXS8Mh4dFnSnH=h>Q*!CZ+#&>?PK5pMc_I*>h#3RS&6f`7-Mr_-Qcqt^ zOx-M??HLL5+MM=_Xe-(5p@%Hc6afeQI$HnAN%yShaxPZHvEVL+eW*C{k$ZISM*U^1 z&5OR_^~fpMLrOQ`=yJQTugaVDfrD0OY&H+cUABAa?_btr2H7osL*v~R3c;e2!BcGD zwTJnfB`vk!ZLc;=bl}9hRtb5_T~nmKFVU}RBm7JS)|24ItT%DOw;c;rApSMVu!ymf zg0+?o&wBXICh(}Lb*X*(EgYzeB)%69fyWA!2_-zlw>oz`x$7rDVTXzARHFST*zR#M z&yWx(Ptg2Sa5-C!b*yf;U0fR3wWfv8m)^}lyqy>Lm)b67-cwM%(NCXJOdP{NOnEv61Ct1Z6g1f3UbsB-SNYJ&S75iq8BJtS&g20e3!a81afyD zH&<{$E}8RNb`ek@Ix$#l>dR25?1wfj>Z;4KL>$0&A)aR zBn$!eT1plLW-oROY~|4r&6WqG-K8-*KS3k?^V=e}L*~SXHYvp;z3-pAeRfmSN+~?> zHoX~h@D2P5@qZ3Ebx>8Op#5qJhZmFHo^Q*F#lx<>He*o(x3NXq3p4p}G-Ih{8(Yzbq5w_kGM)Y}7;{%!#9TcDwfr2Tfd-Z+yd1i zq*I*1pFsBmA*YM`4n=(V%^U@*Zv4zL05`bL1zzg24aqUHpe|zV+pIy0U6#et@GBbC zP()9$T^!qB%D858Md4~nP>}Se|3ocotO|Y&0(!zebgnqyTTjcat3?}jy=OZ$28fPA z8lZZz3ZSkc-2_-_a#@m%=4CY%qrxKu4N|mT1KCq2Ff$YDD}tC@-;6hHtC1MV(i*?_ zFFZzv16fo$iGNDkR{u-rpbfMm1ZS!TCz_MLqCi1Hh_{3q2z^{!@;~{SX+>Ifg5vP6 zrijeRd!0Lc@{YK1e46kqdhhh&E*F-&09Q0&GD%+6Y_ zRv4NXFziBRn!&KibGlDWhP>adrEq8OM*ptRAkCuACR0@}STS3gI$$2{R{^-nrF@6wG>&001mdbRRFkrm z;XrOACE1jp_|8r;vG{D}lB@~FIgBsvjE?(6Ij_UInhY6}$ii*;;zO{pM>|UvfcD)f z28<*=gY{;e2;mGUOsbiBE=Xv?fkr;eLLzDX{R7%y*y~O_$G(``u$p-^4P_2!^XACv zR!U|9iYlYH`YJIQ?Q1pFnARMuK9K0Hp>bL>W>ezjSq*Q)zWFOA{ad15 zlcAXN5iW?+ZY}6!%Vk0Vz*xg>Wft-k4>EQTRR{_;a(%t>G-V7;MT?IHvebKaR=!kf zE>NGbCQ6K&KZ=@xKxMPs82a&t8B7|v&+*HHuu&({N z&*;iN-KtmYM9m@|ITE(@m5Syc-YTbz!8M(0W~oAH^y zP;h9x0QjMT19ytp6VIKQ^v9fqv}(2}yu2%}ab`W@(7f_b&=2U$k;aWOZ3Z1a7Re*( z7VxGKi^lpwBKmnF>UoN<`D9~eJN1WPM4l>1k1P)iV@{0l*QXieyZ%B;ac{?Lnu_|~ zBRs3RNgo{ShH!L$%S$@*Qg0{7L>ZbkV*eS`MHZm`d9JV%MP{-z>0QX^P>`;+xrvk8 zu%bp^q(4C+m)>bLLL+Of-zU(tD`+~Hv}qq#IWP#ajU zVx8>y9X&;J;kUZDEgGj>6mg<{?LG1}@zwF=amIm*@lPii?Y>D8&@f!(&yqmWpl?(l zqrOuaHf=$@egh%k2)k7BUpv@m8;}%e+=QF~x;V_y0RrEYtjcD`lrF4}u|f+WzKTgV zTCLYNe#Q1CV)R$Y4|3aI^RK6rJyXG^{^LIIS%N%uE4))fK}8MITPv*N(5#x7#;}?t@vAA> zdj3PQ*gGJ)p%?3|xcTQ#Hn?YeBB+{&lwUqasGu9)t#RBnxtCIN+V<>zc{@X;ori6l zu%ymZIb|pA3ut4X6UeWIoS`Ru)>YT@_$q@l^zK{M@j!X>lbP88m4-eGCqvA7^ArS#t-dEy^0kw0qgMcqGL8iZJR+I|vD}(Y7PLQ@v zNxi%ylJ+mbG${m9(HFnTL`ql5HzhwWcE+=GpFmM(P$KB&odGpar0itH`WISrWXFXj z;+Y5V>IzP3f4BnFb?)B|vd~&h~ZqdQtf35o(7E$T!p}O*N=ZO z?myFlZwqP>(mgSy)6LKq*?+n6*99R6E3iRLxcfh7>iZi&fx4)R7_@%8*5SaT`lq!e zRf*8Qgl|AV*ykYCQvfRYb0VDe_uQC!U%M2hBME+CY*0k;wBwoDc#uR0YrK8mqttIr z>zkLyx$>29j#6243B{gdk2;!^;OGpQJ@QXG*(7ctnX(V{aj$PIri;mKFqlQBs8{-` zw?~;SBoC)Slu{m_A|TB$Ku5jAW!9S;0c-s$b`CoDhroCx7Hn&$d&aAa~TCfKfEEM z$d#U_1De?o4eC>56t|)K=v|EB>70^$!AFj4l}}0P%e|w~x4jTnH*v|x37ko$_{eCY z_e00#oueb-`K!uLcbI6?^bZ5w5DuF^DyC5`++`x$zyuc-q%IzvylmDJ5~II>Q1V#OJQ6(icb|g3ST1yoK{=R3 zzcmgGwvu-vC_Eki@nMo2ud{wQr{7bH4!jWQV%|{iNk>n-zb{@3H=Bu2o^D^3j<`$N z#`?+!86<^g9CE(6HKv)vMWIbK;#B2LS_Oqfdke9|;Toy$+kROQrB2(* zG|=HX!Bz|<5TULZm82wImh}eq?}4fhB}R?TIu!Q?*x{xB5^(l^tt&Xn#85N*FtNme z`j?En z5n2>g_hg1$GhsL!`sdHELsfS2l|nxO6o-4XD{3G@xJcCY)nwGgJk|6mealxazfR29 z(*z?X^u+~!?#S58RcE-3_`|j0<*H$ft<}PX;`i-7$C-aMHP;w;J91EH-zfQ&9a)Uj zgTrAWNE=gMHai6j9^Vc|Wy-IEri~*zqbtcB3zTbJ=aCUKf$ph}=}oTUf_$)J!5Xz;B>kn0%0a4;U%+231ZHC-W(#mM`br1lL$24 zy!1hFrKwBoomO&_zd7%>h30<1+s{E-Mru}Uwh+-SdM5hsj$swJvKQeRJbL519L}PX zqT?&Juf!nEnP*0NXRmG;!BUwSavW`b-wFJ}Q#cnL97~IcS!q5garbPVujq4t4}Wb{ z0O1)~eh;3==EFTlcS!lrKkC&(^gr8E$EZzI`0y=?Y7(Bv+tK1xF&wQ1q}E{F-ulHiUtVrmt_~!)GI`Q&fFTaN1HD!V!FU7LYDb9B-qk2eY7|4&ZYcqkxhv z=@VW0#zdLeXt<%ONm2uc*nCA5H%G-Lo(V%Gkag1syjwl_hs#f)58K{?Cm%Oreql1J@X$M=K6&9WvA0^l zim|6u9|ry;%$Md@MT_ljObMPcURplT@S$)eF7yJCSnQ9;NCHfutJSUx4lChdjQINs zmgC`(r+0mAT$KY#Le=V-yEy2Sz$<2WPGE@7#(0&2PxCl+xog+8?BH@ZvEy}gm%h@^ zf^FfGnN)nDed+hE#>h~J`Q0V^)$TOdGZypXFmORaY8bRyg=AXQV!5Mu9gaPuKy768 zx~tiBPhuD9`7uu9=xmvLrMGd57yM8xEnTC*zfk~#6Ri_dyXz8br$UO{aL3=b0CZ&*Z9Q3Y+@_2z zOdB^Y-e1nKNRq#i1L1XdF50ykB&nxNHn^`}aWKqY32N>SB_;yqp%;^;=q~rNad@~q zIRX&1abr81MFEfTlmESoR4 zCZtg_kXzQctq$`brkYSZBz!teRb_yUHJM~1>v%YvxP^Eg7 zfgqlhp;4i}8ht-^3SX29&XswSFU6RgT7mF7l2V7D7Cj+e(BiH(=-&20wN~5`Dyt&M zrZ;|G#I&p2l)H{ucp$#j2`Pb_KP-2(u)_`6>(^M0G=NZ%E2BXRZah-O9~d{02g2i@ z!6h>$M=F@HrUv!N4LKYP!_JcTAm0Q@^kX)34|WYI{4V2F+~b(>+t0N+))ggBYH{&G zR$5&@nwk*^i%*9g&k?$VDVQ*7mx3T6TPc{)!^1Gv3<|N7*F#IZAbTjhnZI)vd}}k4 z-*FzjwKE4BHPe?W^9uYbX@7t6=sDqX9*~gTcpR3)T);#O8IuIPWR$L;ahI15HYB5V z6SMiWZ8qzGO$vV&eGiPRJd@zHinAX^O4(9ct5AzLf6ViFcS5TWQb_DO zzQLGO!xG4f2&7DSB1Xc+mR`$w6lH)}Q!$#&M!$G=_`s;e@9{@$|L~(buiGb{CqaW+ zC@FuA+!gR!IFDq#oaqpyF}#2)#y@M$1;En-hyrs(T zXNV4xq=I*YQ#>EBq7X;H-QSQ5s$%GKhq~2dYxZ=<>M!_&RwvIKIsMKv+#F1OHqIh6 zn+{y9*2omxK~z1+IH*V_{el$Xh4&IWi*{-Y+s6Bi-7{#VA>$aOqhwu?KJ#bHW&chf~tWae4+#I4af$X5E@(|@8w#Lic zIfT7ZW@{X`a8j$xuFSDacy_BFD-pxVGVUPZtiL2ySAtv3cn|jWvQhE!m@C4QQ!IZA zVQs+6J*p*@kq}R?NKx zTH)~3f7DAV4%jO2){fXLzmPa5P*gIXk#Xa8d-ru)2=Ia76(&>@F4&m&oEQiSHsHNL^5|+0B1u zmbxQDaxRLzRN;q)wDWup7pXYOwjwH;maXD%N2q29+inp}pWuWWkSue7;^0Nwhh2e) zqMM~&JVjNW9)m81!f*-Q4mY?*^jIlHm&`z_HJw1EO0r1Qx5#cErc86i|V1?=(4$dFlGtF;zpn6)cw<^GRS@D ze)bR>zUK4O@eE@2l(Y`566SVn;U>rJyY|J*L4oKAj6K%J0+5T}#Vlj5BEQ;`mFJ z{DiLn6fzKICNY>Ydn{3h(v(9&Y^QORM!NmG8haI!6_y1)Djw?lZL{(4n5C5>_Qp7z zAzDU37b~n9_>B4FqG%v|aK)X+XPAf!;a_XFWRZQ(vZ%O)e_bulPn3B}6Pb){J?e0T z3*q(&F_GX80r3FH=BsW zt7@m(FU)L+8tYOv9&V{1&NLE3(%ws5*K?`M)cv<(gS6iJA>5GXsqs7ciwh18WYTYV zp&BeSyz*H*QK**P*uXIG=nGYB*p!g}M0hNCC6q8}!US+{x%JNN`gfqUXVdqy=} zYu-;blLkZ5X=MA8`SRP6Ow2NZ!aeT`j{PRdmB?O>qyWqETj0^ooQovUFfTu0OOGIB zOeMN+Yv7Lca5P9?MHE2IrLGrolTyY0gx;H1oghi#?C-T2Whc*cS+QBMl^1?wxbJQ5 zjUuhxGZ^0afG_dh)t$kSGH(59RWC~H;gyhsi)QE z#T!MR#I*j?fCu7NR3mkpwKr<4s`X2W`)`6<5#h!r(3+(Ma;@1ENff;o@}SP!59;6H zyRVX>;#;2F6oM6ilk`hqE`ZF+LxQS+3Ija-Y37PJ2cow${M5&B5*Xrtd}}3rPyqo1K5IgM9WvI%yfa z1>HgDO6T{P31%cLHp4**SY68aM%0;VpYZ2iO z#+U8ZuGkgmf?XFvp^4Og?X<-4Iql1XD~_+C^x30@pP{CG(q+ak_1rF88S708vC^)Q zRZpXdvI?u1B+Uv(6fSzh|0X9h*eC0zGAqMN^cfwJC-jFa)(9v8*C+L0(~NqvAl>nl zk%KDN_Zs>(w2@k4l*{#JyTG>7RI;WN$JRj%4P(PgHe~&IN(RO%xxh_X-2jEs{_zp)xZTE8mpJ-wpFjEf^|>YmFom!sP(4Gn7$Caw0{Di9`}r4HaEV`-+m zWF4pbYAE*gBXzKJrW7jEhsYTiY+A)bjEE79`9(wFLA84Jiir%jUA(c{)49NY7Ouqp zh_fU?e43}M%2T4b;Sdpm%p&7aTR6{6yahS{;GtsXkE;(Uw?v_`oIIaloNIlh_2~E0 zcmFyunWc=H+d$yF>^b@pJgZ8;-Lsxtt&oe;k3|f&DD-M7=9U99N$p8sb~doU0FrWq6w>1M~w`!~u20a5$uAvsTSqX6ceyBO|2@@Sf|ny?^QISCdmeWe3D zQICotXwRYvE@8H&!Mpb7H{f$M0|pa2u3Cvnf#Wq@X%Qg9o#(C`s;mkA%ly!zH^=;@ zEyyo%C6cXBJ2%`-`3;l54T@Pnf*B1jv#1nBp& zfq|u=Ab~nInL)kPA7K-%a(K`+hhv}r0p*%&(X&t9pTVjqEqI?AUgZ75-!*4Yvsx_! z-3-5M8MNKoh~q@edPm!2X~Uw?A)jt+e-JbwVA~ZG3-0SW#+>WPG{)`G4r7D=Ts3M6 zS*w0ekP~QPk9Bev6x7TUY#DdG^8L~>J+`K`2>|igu>IbSL*(x>E=Y@&AvtZwbN0;B zuQt?!w`f!+y)-JmJitr|;f{1Of=XC_M;)#6BHyPw!B&sCGbq3H(rM*QVKXs|Z!$)v ziDw#PVodBz*T5fdEQqaYYP~3Bm0*jKxexz?vBEaYd8*E~?Yt*ecO;`%g%vwtFNT+) z%iXyK!&y5iGpU3^?i8}ofF!GfHIcDUSAXI|$*%r$;N%U9_LIaPboeYjNnf} zeBTu(vs^(BlRbD`+p20-iSKXI!j^|W8?X74ZFF-LWkMDZ#{HKrp?((zk3GeTY}|xz zm)kj^*cx&YM?^70Mm4uWig!QRqhSZiz6nF#Z(c_v6hQ4U5fOhj^w_EO_tcuPeM|z@ zxq~?S!1@V)Bg<3l=0cnOO;O+&YFKbc{*3IknDW#cVN?bc>>J0;u`Cyn*@#bc4RU{PKsFFt(O z^ZNVu6O%<-`NOHIZ&x_uotkm6OpdtvO&G>eYPW*#&CNq>h?(<5Ka*7*->g$pOA){ zLeo`L|0Wu9@V-{u89{)vabxRiWHx<9i3I?hJ!|(Y z|6D}QN&2Fm3L_az#YHT@458*NM7wG1N-_VV;fX!q!|?7bO>y@K;FpMPvBwN08QFt} z4F(1&XTnDbQBAkxo&&$V_Nn&$8y?$-ac`N9knab@tAL%aS%s0>neh5!t_usmAs4$2 zp9Sd4XGprI^5}^)UZ={4y4Xe@&rm+V&1N_ncWp1Z8Esw&Kz6ep##jFW2T(QQY>`;_2V-$6!W z{wTshmn`jhDVdC(maAIUA%OOleu9BT80>`jVMYu4Bk&*!@`!=Y_`lsjOHQ%_!W=&4 zZ1V4-uHQO;HRbqIBVBD?*wAwWlX=1O=@(F zi#HJC3(&kxG_9aMB$ztKH-YW9GHKL}!VF$L1~y6StmVp4*uNV*LN*gG$25pj*+coX z4KW>F2u*89kk%6=-^w;Nwtw zt<3RHi6$@M2;P)%V2~89b4C4-Ti`v}f6JlFo3haxcK7-5#5qF#ZZ`3isA0yN!==g_ z96dQ)eJ4vmK#*E>8e)|>5kVd}6%^p_{S1eWtpQLvwsB%fjf^%@3Lh^j%dOWQ$81dS zwDvcUSqY&0V!99&df{-q>eU7lL!9c>5i;BbMiMY(&*z>6ZK&U!3VakFe=88|rQ?Vj zGM)7c7^>6`R^A_EFsKu#Q*st$g$B%Vt2Ji!Y>!I|wKL?*qE;>YUz7XZZjI~^FR)NT zj2r4#dvHHUn^@~+0sQS3Y0Qa762$7nzAL@@*)E+^^<>nGi+e2v&;|ffLGafzr{bWOxP_`9 zbk~yL1%`Tcz)U~QLCmSBa*xj2?m(@)M7*vsUC}}()P;ooR=1_R-D?4Yr3;$5eN@O+ zcas^BE#?%#BHH(fJx9q8f%_*{OSd$w-~RC5T}$NwUtFX73-gWu=#i~J;?VbO${=v6 zTYODxXWpsD3Guyx=Xq|YAFWGv@WyT%cV7szSo3)2Fv3}b-C_#%Z=H8=cHgK$+wZfx z+Jql0&bpF&1W7+o5!=D03VXt#mx6;~INn`+8}!g-1_vq;$2?txrP4ecwkjWrzE6_Q zSS>i%{jg{@Z*pI`h&gZuw^8x&2LjK(U2tKaI870)XI5j&87cWEWRvtJo5A$Z;a9Ib zQ2h;O7W(va2$aPEyHA|CQlTr$8sWCmpgDqZjT?}Q!X&C7o-?(1Ioa;^_dtfAx=V$V z3yETekIEV&?y|@eFJ6*D(q(T{gMPjp>57Dx1^2D&EhaOIHUvB|iWpGaCGeaUZV>>I-( zQmmRLXVd6s>3Pt^K10$#xrAltrJ~Ny6V|@io2%gjR zHlw54i<0x1hb`mWEp%FR<4ThmwpwQfqfoz?3{bQC@{9CzR5_1ik)m=`Z>QOVZbv#E zxT>M`gJ>3)wC{?Q_wNscSWaE-=9JCC8zRLQ^3QMBHERDDZ@4ziAD-&|a%_QApl5Fq zPidlE!`OxQ1eANp81Zt72n0%`$=(+>gket`9_+@yer(J`W2khqPu=n*i3_e(5e`di z6!PnNL?3@^W%>e)T~t#Td>#@-$QYv1QoP^uZrnHRg0Z-3z$h7@Eh8<$SX{o^cWH1l?+dZSF=5!irY!L`3n@26bp z<6z`Hc$Vzyflh{wjg}UZa*Ga!uydDiD|{P3rGD^fCEj=;{44sqpwF+hM+Tf{7ZHC~ z%s~Z+Gwp6kteg{KhrS&2#gqpya2JZ`zr_Gk0nOVN-VmyDc{uB~{|TQXi#s(b1DBI8 zoFEg;3u<4$mVOS-rnR>MnI3OL3qe9H|-2-*(}f}usorp(Xs^wQ8UGJmU`%u5H17S z%HJnxxiv?Ln=9^bjivs1b~D?iL~p0Icj}LRbiH*P#?iI5stp(I(? zcA?-93JGxDcrXli+6#@Xv5WS(vykyE&O^kt7{kyPi}4H4JriV;|JMB`Rx`^8=;@(@ ze|t)|AUa1sQ>~*`a*26wRu2sUbg$HK_*$o$oWLQ1;-U>CRQrBYO%2VHY+0hgz^%*-2PUAz zkqGjgSw2HZb-{f<*Qc;U7HxPZz46xEi5VZtJD|s7>*i0Z2~{UudtskN7Op^l zQ9OX7w;(_r`e(PWF#9Ld2XQ;CE1sWawHm@=JyhZHPF-^|tc1)|i!SlG$H2ymVIO-u zJ_tgY9|2129X|bG^jG8Gz%afR+n}uTjux1sI*G}xop-ntKuJU$zhQapqku}$QeTWi z)Y6&KrjQEvwbRmpNYM>slqaeLK}r$&L9M*cS-n)rqRkS<;8UBs;dKlCR_T(2o{F+s zzboB4%D24)QZdP??}?m z*>j#*ztJd&L;)2=1dDK$)EY5J_9CK$v-#vT~vv1S@D_LO%CvX-O)fIo>$&fq}}L43k$Ilvnj(Np|(>jv#Fzk+UHS= z2{YqzMK(LYs9H()W_e^kUEr$|#&2UN=K8Euy%XKQD+$QlPik|@jYzkP@eK31=|<8B z`&EDcEkQ-DslqtdYR>fHdE$vRUHs2w5rT;_8YAA>Hmv6$!l($rZykSs*2-oMhXsV> zuEEKw{ZnRbq|a8#mWU64)HhJg~_a z$0H7@p_l^`{|bMzpzO-(5a%eXyK+mI=TD3+Rz;oz?C#0=VTBuCpwxi?X0S$T^IGUL z!ay+Qby-s;tWME`$pKLq`XoGi!`dn`Zh zE5~bC4#}w*YiX`5ElG(qiMTQG`@~0%;#z|PU|jWA=ot7mLE4`aV=pVSZ&}N$~<0CKS};X(XuH+}3lvOOX&WaWL^Lb}CaKql;5o zdT8zN69Tp0Yk8`cY9k*BFh4jTNdGEl)M`7SRS^yADgExR{L25VVi?jYfuQ6I0=QEh zkZh_%zq7t5;7oC|z)bT1eEg^0fl&(fkOd16 z#@4-b{+Dr=0(* z`f#dkz$TWoLHuAHUk=u~dj;KpO&R+lSMHE=PVn46_}+{f{EwYGn38Nlc^Sc3TDDgv z?pfDnXybtf_~@s|0ppjN!5rCp!(RSlxfw7g@{$tDkm;C-BL-~Q{SLxeTMZ9dNS3!O z@aE~%38g@R6$PMPiH+vEa$=?p`}`rhEZNpbA^xXX1FwiY9TMMT0PmBx(U%1j_YFAp zHYTN08WGtDp*;KRUgS`E{!Jy5Lx4q)fb%54aO4j z>>sT2{6vB%t0m{0pC1m29b^pS$Moj<$}Gx3`6Z7*$iCZ){u}fqLIZiw|A>z)f7-*d z$^Je2!S(hFJO^m^3@Q7YSykuDfX0X*QdE zImpF%7kW9tq)<(CUpD#_uuiB2*wIq>NDg*H z^_4Z+wQLize+^mjVV7WLATj_xKOBI-UKf%*%jz7*u51M&Y@;hgNL1n z`M@xDBs4a&!ras62fXST#~B?v!;qcjAD)nZWP{42NA2BQDE+#|gT)eHnI|HbCWZ`j_V z$r{{w552hh4o7}rKSRTQ${hk9gorYINhwK(Fjn7hDqUnh6mp&LS=L?Sh`mxw!j5zu zKl0>ab)&*-UuKd1d`!+ttSNrJ6jCGLtNs;S9yAza@@5lm+3Yr|)bkF&Ya~T@tj!>Ai6KY_O}Tg*N?N+Ovg9t*ud+Yv zbhRC#T^4@ML}!R3&(*}xs{BKI{u&c=db_gUdFOfx&ZtYy4EMXMG8d?wt$JWQTbx== zBOPA1cRI4kmGJQCvcMc?Mc7J#P~KK~KBAG>%B=<@+6En7c&I z-D>Otz|ju5FG%kb7uN76c+B~uwd_QshiA#j>xL~8FWRrW^=xC#7=X&>$_P+h1=3T9rb1otjQ`U~|wEoflxLRul9+~_Z zDDam~l3~RaVp#9kxH~Akvl7{8=U?-R$fl{URiF2#E~(Zy>nd^Yl#ao748xzlcnVZs zK67HxQ*^9Tb^%*s@7sryG?y|dwL_g!(%}(5O?V&)=g0n2@IokTbLJ|%aK2kqF%zTO zr?&C&`BTq{^dwPVUsj}G0wc{Tfib8-SM2KJJ`i~>sEi7AXyWTQ z1~0O+Vz+9l!!EO49e;+!lC-e}esNcWzU7a@sjmf5L_ z7DJ9qH`&fB6NH^NMlgoUUIK{P99aDdWTO|}6>=@xo^bB}MD0Fd) zB&MVKpMeI3X!R$3|KBC!8DEh;D-I4pa9e1}Y_Kltg&ryV>W;C0-$5t>S(droE9u;X z8MDUnGL806i>~7+kR&~;p3_$DNqgEXD|~5XHB5_(BP$Vln2a(P7X?&T9+hvzeJ{L3 zFb=Y|bw>b&u2i4r_(A^x(sIo<>4$f`FtJeED6Gp$DB>WJ@vAN>y^fC_{t^b4-X zWo=6j*2-13d2iB0<}l>kpq_jt%$d+*V(a-Lwgnc5@Cd0P^n~FyY*?j^I(5Ci3S!7f z`VXsrt5zxyBqA-)|5Q|XvZ%)%w23Bpx+n}`{tw50lJiq`ngLu{nNWH}a=J5V3+)RB z_UZ92GR*kAS^n<{1V80IGim_W!((S|O2t3?zXTjv7s9MsB>%HkznPAwb_TYcIBX0u zk@)Il%}g$6&)PTP5BS(?*YSIv8g2@!6zZPjGu4sSfhrO8+&{GH~t54vK>wG zzi`5bAj>Fs>2)h>APp;wH-RZCG{|Bbpw0$`wLqf