From c618a295b80d1b0ed7e42b30282d2c86e156f13d Mon Sep 17 00:00:00 2001 From: bohung Date: Tue, 23 Mar 2021 17:50:53 +0800 Subject: [PATCH] Add description field. Upload template files. --- .../admin/archive_files_controller.rb | 4 +- app/controllers/archives_controller.rb | 8 +- app/models/archive_file.rb | 1 + app/views/admin/archive_files/_form.html.erb | 9 ++ archive.gemspec | 53 ++++++++++- config/locales/en.yml | 1 + config/locales/zh_tw.yml | 1 + modules/archive/_archive_widget1.html.erb | 18 ++++ modules/archive/_archive_widget2.html.erb | 28 ++++++ modules/archive/archive_index1.html.erb | 24 +++++ modules/archive/archive_index2.html.erb | 36 ++++++++ modules/archive/archive_index3.html.erb | 23 +++++ modules/archive/archive_index4.html.erb | 34 +++++++ modules/archive/archive_index5.html.erb | 40 ++++++++ modules/archive/archive_index6.html.erb | 46 ++++++++++ modules/archive/archive_index7.html.erb | 42 +++++++++ modules/archive/archive_index8.html.erb | 48 ++++++++++ modules/archive/info.json | 86 ++++++++++++++++++ modules/archive/show.html.erb | 21 +++++ modules/archive/thumbs/ar1.png | Bin 0 -> 2392 bytes modules/archive/thumbs/ar2.png | Bin 0 -> 2510 bytes modules/archive/thumbs/ar3.png | Bin 0 -> 1993 bytes modules/archive/thumbs/ar4.png | Bin 0 -> 2439 bytes modules/archive/thumbs/ar5.png | Bin 0 -> 3758 bytes modules/archive/thumbs/thumb.png | Bin 0 -> 4075 bytes 25 files changed, 519 insertions(+), 4 deletions(-) create mode 100644 modules/archive/_archive_widget1.html.erb create mode 100644 modules/archive/_archive_widget2.html.erb create mode 100644 modules/archive/archive_index1.html.erb create mode 100644 modules/archive/archive_index2.html.erb create mode 100644 modules/archive/archive_index3.html.erb create mode 100644 modules/archive/archive_index4.html.erb create mode 100644 modules/archive/archive_index5.html.erb create mode 100644 modules/archive/archive_index6.html.erb create mode 100644 modules/archive/archive_index7.html.erb create mode 100644 modules/archive/archive_index8.html.erb create mode 100644 modules/archive/info.json create mode 100644 modules/archive/show.html.erb create mode 100644 modules/archive/thumbs/ar1.png create mode 100644 modules/archive/thumbs/ar2.png create mode 100644 modules/archive/thumbs/ar3.png create mode 100644 modules/archive/thumbs/ar4.png create mode 100644 modules/archive/thumbs/ar5.png create mode 100644 modules/archive/thumbs/thumb.png diff --git a/app/controllers/admin/archive_files_controller.rb b/app/controllers/admin/archive_files_controller.rb index 647a333..6282676 100644 --- a/app/controllers/admin/archive_files_controller.rb +++ b/app/controllers/admin/archive_files_controller.rb @@ -87,7 +87,7 @@ class Admin::ArchiveFilesController < OrbitAdminController respond_to do |format| if @archive_file.save - format.html { redirect_to(edit_admin_archive_file_path(@archive_file.id)) } + format.html { redirect_to(admin_archive_files_path) } format.xml { render :xml => @archive_file, :status => :created, :location => @archive_file } else @tags = @module_app.tags @@ -106,7 +106,7 @@ class Admin::ArchiveFilesController < OrbitAdminController respond_to do |format| if @archive_file.update_attributes(archive_vars) - format.html { redirect_to(edit_admin_archive_file_path(@archive_file.id)) } + format.html { redirect_to(admin_archive_files_path) } format.xml { head :ok } else format.html { render :action => "edit" } diff --git a/app/controllers/archives_controller.rb b/app/controllers/archives_controller.rb index 6ec1756..8da3c05 100644 --- a/app/controllers/archives_controller.rb +++ b/app/controllers/archives_controller.rb @@ -48,6 +48,7 @@ class ArchivesController < ApplicationController end archives << { "archive-title" => archive.title, + "description" => archive.description, "created_at" => archive.created_at.strftime('%Y%m%d').to_i, "archive-url" => archive.url, "url" => archive.url, @@ -103,6 +104,7 @@ class ArchivesController < ApplicationController end { "archive-title" => archive.title, + "description" => archive.description, "created_at" => archive.created_at.strftime('%Y%m%d').to_i, "archive-url" => archive.url, "url" => archive.url, @@ -190,7 +192,8 @@ class ArchivesController < ApplicationController end end { - "categories" => cats_last + "categories" => cats_last, + "extras" =>{"description-head"=>I18n.t("archive.description")} } end @@ -236,6 +239,7 @@ class ArchivesController < ApplicationController files_by_category_tag[t].each_with_index do |archive,index| a = { "archive-title" => archive.title, + "description" => archive.description, "archive-url" => archive.url, "archive_url" => OrbitHelper.widget_more_url } @@ -309,6 +313,7 @@ class ArchivesController < ApplicationController end { "archive-title" => archive.title, + "description" => archive.description, "archive-url" => archive.url, "archive_url" => url } @@ -323,6 +328,7 @@ class ArchivesController < ApplicationController end { "archive-title" => archive.title, + "description" => archive.description, "archive-url" => archive.url, "archive_url" => url } diff --git a/app/models/archive_file.rb b/app/models/archive_file.rb index fcd9d63..715dd3d 100644 --- a/app/models/archive_file.rb +++ b/app/models/archive_file.rb @@ -18,6 +18,7 @@ class ArchiveFile field :title, as: :slug_title, localize: true + field :description, localize: true field :url, localize: true field :create_user_id field :update_user_id diff --git a/app/views/admin/archive_files/_form.html.erb b/app/views/admin/archive_files/_form.html.erb index fd76711..bf20d54 100644 --- a/app/views/admin/archive_files/_form.html.erb +++ b/app/views/admin/archive_files/_form.html.erb @@ -121,6 +121,15 @@ <% end %> + +
+ +
+ <%= f.fields_for :description_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t("archive.description"), value: (@archive_file.description_translations[locale] rescue nil) %> + <% end %> +
+
diff --git a/archive.gemspec b/archive.gemspec index 0e7de18..24fa5ab 100644 --- a/archive.gemspec +++ b/archive.gemspec @@ -2,7 +2,58 @@ $:.push File.expand_path("../lib", __FILE__) # Maintain your gem's version: require "archive/version" - +env_pwd = ENV['PWD'] +app_path = File.expand_path(__dir__) +template_path = env_pwd + '/app/templates' +all_template = Dir.glob(template_path+'/*/') +all_template.each do |folder| + if !folder.include?('mobile') + begin + next unless File.exist?("#{folder}modules/archive/info.json") + info_json_file = "#{folder}modules/archive/info.json" + info_json = JSON.parse(File.read(info_json_file)) + check_files = ["archive_index7","archive_index8"] + file_infos = [ + { + "filename" : "archive_index7", + "name" : { + "zh_tw" : "7. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 檔案簡介, 下載連結 )", + "en" : "7. Table list (widget-title, category, filename, download link)" + }, + "thumbnail" : "ar5.png" + }, + { + "filename" : "archive_index8", + "name" : { + "zh_tw" : "8. 表格列表 ( 模組標題, 檔案名稱, 檔案簡介, 下載連結 )", + "en" : "8. Table list (widget-title, filename, download link)" + }, + "thumbnail" : "ar5.png" + } + ] + flags = [] + check_files.each_with_index do |check_file,i| + flag = (info_json["frontend"].select{|h| h["filename"] == check_file}.count == 0 rescue false) + if flag + info_json["frontend"].push(file_infos[i]) + end + flags << flag + end + if flags.select{|flag| flag }.count != 0 + puts "updating archive index page" + flags.each_with_index do |flag,i| + if flag + Bundler.with_clean_env{%x[cp -f #{app_path}/modules/archive/#{check_files[i]} #{folder}modules/archive/#{check_files[i]}]} + end + end + File.open(info_json_file,"w+"){|f| f.write(info_json.to_json)} + end + Bundler.with_clean_env{%x[cp -f #{app_path}/modules/faq/faq_index2.html.erb #{folder}modules/faq/faq_index2.html.erb]} + rescue + puts "There has some error when updating archive index page." + end + end +end # Describe your gem and declare its dependencies: Gem::Specification.new do |s| s.name = "archive" diff --git a/config/locales/en.yml b/config/locales/en.yml index 1ec522f..c45b0f5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2,6 +2,7 @@ en: restful_actions: categories_order: Categories Order archive: + description: File description category: Category sort_number: Sort Order save: Save diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 695fd11..e09534a 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -2,6 +2,7 @@ zh_tw: restful_actions: categories_order: 類別排序 archive: + description: 檔案簡介 category: 類別 sort_number: 排序號碼 save: 儲存 diff --git a/modules/archive/_archive_widget1.html.erb b/modules/archive/_archive_widget1.html.erb new file mode 100644 index 0000000..2761be5 --- /dev/null +++ b/modules/archive/_archive_widget1.html.erb @@ -0,0 +1,18 @@ +
+

{{widget-title}}

+ +

+ <%= (I18n.locale.to_s =="zh_tw") ? "更多資訊" : "More" %> +

+
diff --git a/modules/archive/_archive_widget2.html.erb b/modules/archive/_archive_widget2.html.erb new file mode 100644 index 0000000..3bdcf62 --- /dev/null +++ b/modules/archive/_archive_widget2.html.erb @@ -0,0 +1,28 @@ +
+

+ {{widget-title}} +

+
+
+ +
+
+ +
+
+
+
+

+ <%= (I18n.locale.to_s =="zh_tw") ? "更多資訊" : "More" %> +

+
\ No newline at end of file diff --git a/modules/archive/archive_index1.html.erb b/modules/archive/archive_index1.html.erb new file mode 100644 index 0000000..725165d --- /dev/null +++ b/modules/archive/archive_index1.html.erb @@ -0,0 +1,24 @@ +
+

{{page-title}}

+
    +
  • +

    {{category-title}}

    +
    +
    +
    + {{archive-title}} + + {{status}} + +
    +
    +
    + {{file-name}} + {{file-type}} +
    +
    +
    +
    +
  • +
+
\ No newline at end of file diff --git a/modules/archive/archive_index2.html.erb b/modules/archive/archive_index2.html.erb new file mode 100644 index 0000000..70fe62e --- /dev/null +++ b/modules/archive/archive_index2.html.erb @@ -0,0 +1,36 @@ +
+

+ {{page-title}} +

+
+
+ +
+
+
+
+ {{archive-title}} + + {{status}} + +
+
+
+ {{file-name}} + {{file-type}} +
+
+
+
+
+
+ {{link_to_edit}} +
+
\ No newline at end of file diff --git a/modules/archive/archive_index3.html.erb b/modules/archive/archive_index3.html.erb new file mode 100644 index 0000000..fc78836 --- /dev/null +++ b/modules/archive/archive_index3.html.erb @@ -0,0 +1,23 @@ +
+

{{page-title}}

+
    +
  • +

    {{category-title}}

    +
    +
    +
    + + {{status}} + +
    +
    +
    + {{file-name}} + {{file-type}} +
    +
    +
    +
    +
  • +
+
\ No newline at end of file diff --git a/modules/archive/archive_index4.html.erb b/modules/archive/archive_index4.html.erb new file mode 100644 index 0000000..48ebcf4 --- /dev/null +++ b/modules/archive/archive_index4.html.erb @@ -0,0 +1,34 @@ +
+

+ {{page-title}} +

+
+
+ +
+
+
+
+ + {{status}} + +
+
+
+ {{file-name}} + {{file-type}} +
+
+
+
+
+
+ {{link_to_edit}} +
+
\ No newline at end of file diff --git a/modules/archive/archive_index5.html.erb b/modules/archive/archive_index5.html.erb new file mode 100644 index 0000000..5263026 --- /dev/null +++ b/modules/archive/archive_index5.html.erb @@ -0,0 +1,40 @@ +
+

+ {{page-title}} +

+
+

{{category-title}}

+
+
+
上傳日期
+
標題
+
檔案下載
+
+
+
+
+
{{created_at}}
+
+ {{archive-title}} + + {{status}} + +
+ +
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/modules/archive/archive_index6.html.erb b/modules/archive/archive_index6.html.erb new file mode 100644 index 0000000..2c46edf --- /dev/null +++ b/modules/archive/archive_index6.html.erb @@ -0,0 +1,46 @@ +
+

+ {{page-title}} +

+
+

{{category-title}}

+
+
+
上傳日期
+
標題
+
檔案下載
+
+
+
+
+
{{created_at}}
+
+
+
+ {{file-name}} + + {{status}} + +
+
+
+
+ +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/modules/archive/archive_index7.html.erb b/modules/archive/archive_index7.html.erb new file mode 100644 index 0000000..f004a98 --- /dev/null +++ b/modules/archive/archive_index7.html.erb @@ -0,0 +1,42 @@ +
+

+ {{page-title}} +

+
+

{{category-title}}

+
+
+
上傳日期
+
標題
+
{{description-head}}
+
檔案下載
+
+
+
+
+
{{created_at}}
+
+ {{archive-title}} + + {{status}} + +
+
{{description}}
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/modules/archive/archive_index8.html.erb b/modules/archive/archive_index8.html.erb new file mode 100644 index 0000000..6e6ef93 --- /dev/null +++ b/modules/archive/archive_index8.html.erb @@ -0,0 +1,48 @@ +
+

+ {{page-title}} +

+
+

{{category-title}}

+
+
+
上傳日期
+
標題
+
{{description-head}}
+
檔案下載
+
+
+
+
+
{{created_at}}
+
+
+
+ {{file-name}} + + {{status}} + +
+
+
+
{{description}}
+
+ +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/modules/archive/info.json b/modules/archive/info.json new file mode 100644 index 0000000..3d25987 --- /dev/null +++ b/modules/archive/info.json @@ -0,0 +1,86 @@ +{ + "frontend": [ + { + "filename" : "archive_index1", + "name" : { + "zh_tw" : "1. 列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )", + "en" : "1. List (widget-title, category, filename, download link)" + }, + "thumbnail" : "ar1.png" + }, + { + "filename" : "archive_index2", + "name" : { + "zh_tw" : "2. 手風琴式列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )", + "en" : "2. Accordion list (widget-title, category, filename, download link)" + }, + "thumbnail" : "ar2.png" + }, + { + "filename" : "archive_index3", + "name" : { + "zh_tw" : "3. 列表( 無檔案名稱 ) ( 模組標題, 類別標題, 下載連結 )", + "en" : "3. List(no filename) (widget-title, category, download link)" + }, + "thumbnail" : "ar3.png" + }, + { + "filename" : "archive_index4", + "name" : { + "zh_tw" : "4. 手風琴式列表( 無檔案名稱 ( 模組標題, 類別標題, 下載連結 )", + "en" : "4. Accordion list(no filename) (widget-title, category, download link)" + }, + "thumbnail" : "ar4.png" + }, + { + "filename" : "archive_index5", + "name" : { + "zh_tw" : "5. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )", + "en" : "5. Table list (widget-title, category, filename, download link)" + }, + "thumbnail" : "ar5.png" + }, + { + "filename" : "archive_index6", + "name" : { + "zh_tw" : "6. 表格列表 ( 模組標題, 檔案名稱, 下載連結 )", + "en" : "6. Table list (widget-title, filename, download link)" + }, + "thumbnail" : "ar5.png" + }, + { + "filename" : "archive_index7", + "name" : { + "zh_tw" : "7. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 檔案簡介, 下載連結 )", + "en" : "7. Table list (widget-title, category, filename, download link)" + }, + "thumbnail" : "ar5.png" + }, + { + "filename" : "archive_index8", + "name" : { + "zh_tw" : "8. 表格列表 ( 模組標題, 檔案名稱, 檔案簡介, 下載連結 )", + "en" : "8. Table list (widget-title, filename, download link)" + }, + "thumbnail" : "ar5.png" + } + ], + "widgets" : [ + { + "filename" : "archive_widget1", + "name" : { + "zh_tw" : "1. 列表 ( 模組標題, 類別標題, 檔案名稱, 下載頁面連結 )", + "en" : "1. List (widget-title, category, link of download page)" + }, + "thumbnail" : "thumb.png" + }, + { + "filename" : "archive_widget2", + "name" : { + "zh_tw" : "2. 手風琴式列表 ( 模組標題, 類別標題, 下載頁面連結 )", + "en" : "2. Accordion list (widget-title, category, link of download page)" + }, + "thumbnail" : "thumb.png" + } + ] +} \ No newline at end of file diff --git a/modules/archive/show.html.erb b/modules/archive/show.html.erb new file mode 100644 index 0000000..11a8c05 --- /dev/null +++ b/modules/archive/show.html.erb @@ -0,0 +1,21 @@ +
+

+ {{title}} +

+
+
+
+ {{archive-title}} + + {{status}} + +
+
+
+ {{file-name}} + {{file-type}} +
+
+
+
+
\ No newline at end of file diff --git a/modules/archive/thumbs/ar1.png b/modules/archive/thumbs/ar1.png new file mode 100644 index 0000000000000000000000000000000000000000..e7cc1001ec63e7ddb7df020eb853648bc20311d8 GIT binary patch literal 2392 zcmaJ@dsq_b8Xwf2WGl61pK^0cM2~Ex3?M3?R4Q7uLW*{@%nD&tFc<<1v0f=6l}v_uhW*Jd+y0 zT`}vs`QHHmFpIsC#Y5L~=zYQ51bwo95g$O8AC$hK${-|Csp89Fz)Ofkz&N&q9|iMZ zzA$dfUDy)Z z$i#=Za!4GR4;(F8883%};<>?s_!t3Qh+no8=c#6(01{Zq$EhWor3!|ci66&hpnKyn zgvX7mC}WuTiJ(F`0XQE-4&z*jBxeE1jf``n63J8&ol1AYQAlJGM5aI_cV{w*;p)yH zk#Un39`z;{MlyITze!){8xtR`RLU3-q*AGfDiH0Nye0>6giy# zuPTvz(N-vV@Yi_%C$J(oP6k6fSb@aK1!&_U?TxNv3?DhnS0eIY1lc@Q#eir;i728G z8O|rjl}N^gh@?V9r5M-ea2RZuJU{WD-PZUb$LPW_v@)$D~Cz%3UgUQ9n(_*-8MJp&IbYXjAjL7c}AYtHNxs+ zJsMto?@B;P`L$KOzz|B!^3<1k!He6?bbogCyk==*Q~1`lEsF3fa{qTvT`mzzZq(me zoA+UTTtoA-4yW$xPfFLMG}-lxzV(j&V_{}b^-g1}>)!9T8m+z<`e}~bT+__|wP%&? zttaxj-sb#?-26SsNwn&;tdawoVWH({Qz)Jn()0&h<}KrxtwqDA6$UW|ke%j#*kJ@AG#IZ)jFU zL`9|S)*=-jFm)E6IK5Ru%IN6mysjW@D=kAqa=57xBFF=3ZDV6&b*Hv;>>yaxM|X>)UJwMB+n38a>%A%Qzu*zq(f|Me literal 0 HcmV?d00001 diff --git a/modules/archive/thumbs/ar2.png b/modules/archive/thumbs/ar2.png new file mode 100644 index 0000000000000000000000000000000000000000..751fed282f0c304d0f01dc49e5fcfb2d5ac0ff8c GIT binary patch literal 2510 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 literal 0 HcmV?d00001 diff --git a/modules/archive/thumbs/ar4.png b/modules/archive/thumbs/ar4.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7c106f52a4cc695fe8ce7e768763d51e9847fc GIT binary patch literal 2439 zcmaJ@2~-p377m+;g`h@(`do&fXf0$JAdmnek|4nZk-aQRNCwD*WI{3!z#artG>=CF z6l-unumV!Whgug9(P~9jfuP6|P!JG>Q2G#YK|2w#?K#gk_ssmux!-s1{qHw(M&|9c z*=WJC1sDv*i0MK1LB|U8zBpeSeKL3dQ-Ka&Ba9%#7mh@v95IA(<-rjUz!Y$zARmas zONy(5oG=(2Jl`(}31YKoTv$NhXnY8X0uhSFV4PeMMI3Gnga8px6kq6!AFryx1ALw{ zKG2R$VvF3MXue0X81hZ_^5Z7QaH%}J%Lc$Hk%kfoAcO-X3Sxy4TB0-lBQFh|Yqp7a z;G+u?kxZphi6oE+g4U>qwIoT1a1yPB z5{o$oIwawW`67f53jqxyCjyQ~obhO;vn2>bpJ|1XPsfBF7%`C}B9aLtO-XZ(Z1(?m z6$n0iOAsIE&wT$UvBWP)1QC582^=rxqK%8R(1a4v+{6$EfyI6>96NW4-qA1uOQK;B z;O1*bAOnGXArF>HKKirSG^S93aD-flNq5Gh3?3m_pfhvof=rF;>qk%B;kMy5kzegedE7sCSJW63oBmvgcC zBHt%0@5{N^ei2JVlObvv`X+fG^Ldi|PiZ38VaO{ZNg4P$;#Y#J#FV}EtJ>b<_|=c->; z176=o+Y>zFF6j*14KTWKxaH3EBRxlc?6|YYh<4%#?&XnjeFO7>)xY%=3{!`1{JLnt z-j$d&N~Ln@)W!Y>;Uo|KvX-Ht;u$mSzOf*O`T;r>h~^~#^;`2x^_nU2gDgWsL+?e$ zB97gZ`K@PIio6QF0o>Kpju&fi;TyC-Eif&Z%1AjAWL19d+?ZP3wRN4Ms7Ltf@#B-V z133p}9;+`@R(gJyXL6uca;@jtv(jU|aU#)1_IR4I+GjE7+7K=`0JXAZ^Hh)6Y@Rkx zdlH*%(4$*2eg4hN`{rgZ&*Gw{rlue(ODe9Ik2N;-4Q0HXnrd!pVyagN1OmT+u*&kC z)!T<~4z*82*#_;q2-Q%Ko`qjv)A4gV&THq$Jp@(GOZ`f)sBH&6)FmoOV7G=C@b4SCXIdKNMl%w-ZLtFAf(skJfEo)#Vb~o^P6UV06_G?&?HVQ&K?b z@+{jdR%&lrcd&G0WyBNU=!x^Sl>^IsJA!Q{2LB72e3(9%6`Z%%w8rnc&%F;v-;D1Z zS%nh6GXW=Fy}A2S$NA32#J1Q7!3_F4Yo#mNrjvAEc3V18&dRfDuIM=4)%9S7Lc%^5Hidv&V#i46z zQI+a2)O7#86hX`~TxAb(y-LPdOEMWH%5SW3x57nHQEN>yJ5TAY2{=^DpP89y0}Efg znVxolAWhSbMW%fH6st?UwI|1k8}t2JIVmeA0+2l_5EGgC%S z?=Ne3@lu|ZB|Emsyxs9(M~A_l=cCr^65nKcTVCk2va8nD4RMjMP)%4)|4iT&<;=sV z_s;)&h;{%8on+QcO;MzU-oZO|6kK8*dOed;U+)m7M_BK-e_Hy;5gy{+T#ox!RC>(* zZ3=?`+(~IFYt~MlD0>vOCax~H=E3>uj51}f|69R}D;s}$rN)#fMuGBh+>df;a}-6y#KgqM`*%5TYE*4)iy{A%A|Syy;jTe8YAueUZ_3T*RqF%_W6QtQ zS754j8p(0{9u}o-3{OtZ&!>1IcXmDS$|&YX?U2l zA{P6kSY~8olsck?8_Z_;I9c(SvbeNSw~a*;!0u0Mb3a<@vA<$kJht+&DuOq0mv@_V{L znd!Z0W%F0w0dN2+dQj`(iqgE68)LugxeQh-ybn$Lhxmu~wJMdq>z1G`dFh|YF$)U| z%dM4N$jMpsyrEKur>%j`TK4(Maq|sMPEXqfgI7b#hlV2S6dtF2TBB`O9)M$Gy(5rO;PUf$9h$3w%qySqa|LK3X#V4PFILZ?0T*WNu}4?Er(w;9;3 z6Rv8#S!TAj1#sAGI*D!3$ax$iVU@N!h7x|@=co70Pj@Ws-$LnSN83pAM#smAM52UH zBR0HkwtRUk`f=d%a}LYEg8TM%b_|(EtV|ED`2x&Jq7Y-2*uvMd$;*Nrae1j z1C*CKJ3EzbTd;3CovXesyZwaZDG#w2&InU;n6%@)eSKGkjfcUB)SXW$l%1?59+$xg4I8sHljV?{Y2}!6LL#K3=_w+o zrxsF(nnZYVDw-U=MEFiUJ_{XA+)x z_H-Kw1psV;kX?>3k6|5<1R7Nvzp10mqS6J{007FIMaL8TNKCL7$%hB>9qULKvhYA&xGD5I=%35n^rzMzN3r04j-z2eYXD0f9)CDdZb2QqbQN z!yw>qDoj69$oHU*VGn^VX$%rrUmL!k05{M98z8iG5O8CJu@+btt^%V*nMy3#7CXwS)DvX$&8jjGjSnU6=N~Qj-9msSh{S)v12^{EhmQI2>lLBc$41!?cywx^c(UF!65}rw8 zxX@_+KW6ceFO5kH^rg|kmPhopb-+i-0YqAG;5U6N7HJz0$ixQ_NVXVLhyX#GOeP}H zhI&>ABSW~Zl@3Bj#|mwXurf3@*0X@aE%Yo5(dZwx7#bmnN(x~9uqFOutMgOa%~GJ! z1)eb^2Kfw$Xw9He!QWCwl7AYDfz?m({<0+; z*?fR1?=K>M&P#21qJi&{77k67SLGoIk$3*e5vE7ejLQe6Hr|od| zb@yDxa>P+CFE0FgBJlu_JM=Z989Fj6NMw;Wdv8= z+2{8qfQHQ~Dl9<5LhWO^2%+5xkG;A?4wyv>3FiW27Vd)&fB*zhU&Znfnw)s7S9L<> zhums4mE`*siT(!m#K>3E(nR-wGT=pJKrWz5!;;;in|V<^^ki!Ged<& zWM8@Tj4jy;Hb0R`QbkAXjv2(Hsi(T>V$=WCn4YAz@#a>iHArx+t*s4(k1&z@#VjDH z2i~b-_GMhKE|#*FSakRF^gMB*l_ylMXyV_#`$lHv3m1c+PiB$k+cNyr-L-O6wZalS z%ICgvUMwudtD@X=FFm~6TBF{sH{{zg+T%Sn7`iK+mX{L4Rdb$f-fi)E@wIj%@Hdwn zle6{KAUF5UTaPe?$+Fxy=xzK^cf)Mj>j<=X?~<$BSXSe*@k)bT7QDqsobZ;L z`tYnU_^4V(kA!(sQq4*mTEpy2tU&>;3g{vo6$6e<`rX(uyEMlE`WsX(JiJC8FON4c zH0*z@YS5Xn*#(Q<A>-@ddgs^g`umL&#gRb$z+$lSdRG*K$Tf;-+gy{sR!jP+^ z(+=6Mm4u$Hyz2qbMcs5*x!Bv2h?i(o`s3_%jWj0dJ$$XJl%$W>Px)Et9 zmI-|>wUnBCL!LP@HlJcK2;ZiXQ$I!(61gRrdl6)BZ|~u0hs?K*=-rdmk*Y}6^ifb$ z#Fr=b_q#jwoey$b@7;^kt0sNqqLAf*z9Gfd}83$V?iD)>y2dqeGw z9jUHY=qMG{giaNcsH8m(zY~TFU;Qz4EFlclP*|JJZ4-?ui{5@ViKAgnuh?3Lex`%A zgha~^sP1(;dbC_6>t#zA7Q1vLu zzVt~U^_Pfd46I$dN{RZCoBPR9&Z?(;9dTH8K2eEns85wZE)NAKE1TTqX8<#6Gd2jd z%ol5CS@=TpbIqFAufK6lX>ip-sSy(UqujybB~RZXly+{lv`4P=Lx>JvT>EK676n#(USw-MEk9(}S@KJpT= z5S~AfR@3w3iM8fl#a+9+N)xNAb(Y=lWsQxEjf{-AeaJpJahp@oyZ2l{D@P`2wT*4g zIO$Vz(@=};WvB&<$ynE865>}+kI;<6`*EDo@jH<4h$dq~L-lfSZ>3nodPhrE@Ot&e zgSyXt6+v!MM%K3yS617X=4hQ?EeL;}Ep*a1MvXDkHFJrwTRfHkU3(jC~1eLwoF{6QKJNzucU-CZa1Jd>LYdqB1gN**!jbf`2_z z=$4a9_zsxzh3x68$?cA43t7yu06tYJ{<8Vk>+0s1Zf;S0zu&b(8a&`I(Pp7;2d;K7 zg+9%lNd{?ZYAPuy4b8MwcSf8tYn#D7?X6st=cb>lT+zCJ9T?i0Omd&(7_`jSyA@@m zr<`LFEQgj2pK!U|zcyt2Q3(7-(f};LS6D#r-+B8$lkZ8cf5S6rVYw|LMMbHh1T2x` z4w0zw4hDBHEU~!hZ}fgZFPGjJudr|dD%dV|2@9nApIOxoHbkOcu&+IB_hx@5`r$L! z!(sD5A2HL=H1))qH0p*`Y{T480M#HjJ3IS)fomv!aj5CuJ^hQyO?lO=aq8D7Z7U9> zBNLxM%b@P#CTy?nuecG*1-p!if^hG5njQ9~r?VK@nPnaum|`H?KCdL0UwyjT!KUTU zZROsLWw$?8ojM0{F4GO3V_kw)-pxG`o*1CACrJu>vbDZAbj0+2m1L%Q=`{_WR$bQe zfoB^7*%qMfFFG}P`V?i}y@~C-rkxgjC~R7sYS!!lD%&jrM2jm^1FyibdN~fx4jPlx z^6W-?XQ?NMw|XJ*P>nOpbGF zJ5i$h{+mpFY00!t?LTAc(dD5g+*tM|QSVj~okSmgz|^?Au{`6%ub=zyQC4JR;cepm zcXjm}EQ6rT4-Jtui$EmS|8l!+e&;VmF~p+RCMMjwDJl*GLq>?Q2hj+3vnkx$( z(4iml8)a%?%&vNLy>0vR{T6gDIuXTnms2z96F#M#%`g3BF;UWE0p*AYlY3NGXSev^ z%Fb~=N?o#7bs70MG@ZO6SzKH!ms{3Y6-J@7e}r9Zh9x;oY@d`Q9M7vlOFiG zHM-&cxACC5=qyfjbyNh!%VQhP;@-{RSa)7%49{wf z9`qS*ezXO}TN0KzGfdg8P-!%>MPMX>;su`<4K0QX3B)D>-wFcXsB$MJF$pO1uYI$) zMi~_EW>d5>^Z4dQH`4q`>AOrxfOCkgsxmDl$Ys+@gV`)jMi9N|j6Vd$|L0^TNWBWJ z44RIMzc9m4-`?MiF-u;PJFiB0>e|E;l2$O;xpSvuKC;jBon2bX2pkwUIUF}xr+r~` zbku7xb*IxgNYrF0tZlyD8SmqJIR&n4rmE5vqrA7v+EgO3d|+Sz1Du~X eiGy#*;{baX*ddwk3rsivAZ@K2F}E#nQU3m?>ZoCb zunI6C_z=xP0tt2@SbL8Ul825b)X)H;M@Iny{0US%gzoQ04nooOq2J}A0DAj1918i) zLM7=#|1t_^Wdkvx1QH+`FocQ+LK6wmREHte5jyHR$`Dlq5&=i5!Vy|3NCZkl3xz;J zeq2yMTcD>G$`+0Jp$nMlLw%^!02CZfqtReAH5et(8;;b`(SajW;i{@C0EbEtgG|NK zRmedyKP8|EK^}p`04k9}hHOj3yHkRx`cS~qzn0)1U}g2UU~4vB3<+^0l07N3pzZMdwOTYGka&sUi3z0mL%#bLMf?Z- z>ZS-JMhk;Ms+p<-HXx1FOpGw9+S;btnx?86+SLrFqmAt8Lvxw>O#9Ok(U(6adi=}!UB|h@GFIv~ z3by;zyIaw_j2w*cMtljDe@vCYYBBN{3B_}Vjo?=y5{HRi5Qzi{pS+umos~BYBNJa& zkB#!~P<#uqTbUmXSksK04_O}zQA=O@9o_oaC^d(oz7rtA`(Fz|ZJl&3e@9oBUHof} zii!$-7EjmN-Q6)UF+u6`U4kzeZoO$!*c@J5RNonGEUj;m*6pneu6?<%aM4#VPAhUf8>TQU zggnVU*>r`u;}8-A-Gko$zozhV-1BvXNA*K07ecJnTNzBq!E9)tfjr4yJM48svB1DR(~qCqDFK6W{c3 zH6;U@u$qM5KnN;IP3F7D9z3f3I$hbkK$rIMoRCAwHLHipoCjs(ktYRPYby(rqTtfW z7fFr>j_DmvnAA>kT~$YLGg+S9*wr7Xw)3Wu%pe!sRi1%Rt_BUV0-C(c?B3zSEr zhH7b)e3<)El-#ka)_#IVH0^z&`U1{dmX%seHb(vOMs!!~hq<>EFU{{XL5-qiu9m3X zFi*!wq?oQAXfH&aIseu9xKWe7vpau}vc;d8={1&3PO#V}#$-#v`?2zx+$FnvMUGs| zhQY zv|2uUKg)>djjunlqw$VPb5YP@ElI^eek&T)dwhI1&|~8+I@^icFhGv8YH{sS`ceUPyi9m3ekAZ*W@Ati|`yP&xel^fU=*AW>a4 zZd+$%EfR$e`To`2gg9oV&u7IB z#kt*zr*$^sOlv~URCa1ng@WEaP4^*orb@Z^)1CXE(e8Gsbz+utIg27K!o$f7J@3wY zv7@|OQj)MC7FL>e`PN|K+=^ZIcmS!ofLH8wBz(!GNSAiWMlF@>x3BuHDEoOS8&z6< zpPc=oigpP$V+ES6>G{z?!vor#COgNcSD`y-ofGsk~b~sChbDiXtak z(l;uY@`kK%IhUv~48$w>qUehm1rA^4`F_RsUs-8Yp&tj!JWP)&B_~~D){0ovg8BV@ z7M9oRPUqk&q@dpz$#hv&FcYhKM542fki29$&)6rmJ0~Cz?l)Q2cB>GaGDZt=+bis? zXqNo~cTbhFQzAAtbD3}Ng3pPDmj+L>BpqG_hS|y_=(8HvpJnz&E=LZt`J`AK&|?`r zox)c%&@*rB8F{&HH~K$^)NzW|gdTzo`(~a^TxZ<6o4=77#<$TLhr7L+<6&`wk)Svp zD}vr1rqJ~~ue|>JvtoHRlP(&Y@75|OAl21J3K`wo5IEHq_tN$4Dxr6GKR3CF*BIZH z`ut1YTvC9_eWpp|>Ym~BPC)9;e2iU$tybvJ<->-vV?vcch8R{jw$sK{7C5ty zf`oNblLmwJ>JQxZqE|Gr#EY&C5~uB*i`%3gY8Ck3y>}_P`#I73Lhw$I5Ff-Hgx=3Q z3{dYn3;&2)UHv-U*2A(^k}?eU+o-!VKh*XzS>ZBvxxd&YWxItZ9@V*8erUm>vXwW{ z98VbYAF57n z524D!g-bbHbpCSq#jQ;qX47-ZZs1M9zsB&QOx(`Vy34f5icu@Y@{(_1x@Pt~k$_si zvHH3%z#i06u(POF0od>&Oj;?UPl<83yztEpM$dH0(r7isjR5Qn?aDb>va)`P)d%p3 z`ax%V%{^B|J2l%YXZe)wH6%{Ar@^bFau(K?KaD9R9n*JCJviki+4;?AwxZ2rwe+d@ zcyQxdsXEV0 z+UkxzW!Q8li3R$euYdX9dw%Fdp*GY zog?xFXZ#%Ww<{`H5~T&!%?l3tnu{@+T64SD>Qmv2=*NqL{156qSS@P5RC;%1JxuaT zsPZ4KYB>a;##o$Eil@f?iR-EDs4LZ1oKm~uUrm?=@D4|HbUQnFtoA?hXlJ}PP?QWR zTeQ`azZ6#abhJC2>l0qYbMtmOvwCaPvE$39-rp`wN=HxBhpv`O?}1||BTG*852Fdi zf=bq!Y)hxw^KZ}{@?OYaIJ4|?Z86-WfT&Z+h7^$wIQ)6H8xhTE`Qp%t27{yI5x&}n zjGJe_fr|$Pt|~uDnhZ1N{|vMz!Q7S573!lkX`w*`M_tsqp5B&;jQ4iu-%6ZvY&d?S z(Yb!KKCBjcBfE4hloZ^UW{2r=yHy0PzyN)UnCjQ^&}bh?xwb$$BT+V%+b{b zq?WOa<=b6)e-`d$?21O2jFEohz$tKYMmUzXr zv!G#9d=mkj!$T|>;o(^`Q6(9fne#dcS*H7Knqnn^b1|?Q$