From 4ecfac5070b7320e6042c2fc23af3dadb8a5b183 Mon Sep 17 00:00:00 2001 From: Tom Naessens Date: Tue, 9 Dec 2014 22:32:54 +0100 Subject: [PATCH] Add avatar to users --- app/controllers/application_controller.rb | 16 ++--- app/controllers/users_controller.rb | 7 +++ app/models/user.rb | 2 + app/views/devise/registrations/edit.html.erb | 3 + app/views/devise/registrations/new.html.erb | 8 ++- app/views/users/_user.html.erb | 15 +++++ app/views/users/index.html.erb | 15 ++--- config/routes.rb | 57 +----------------- ...09204351_add_attachment_avatar_to_users.rb | 11 ++++ db/schema.rb | 6 +- .../000/000/101/medium/Tomcontrastava.jpg | Bin 0 -> 6545 bytes .../000/000/101/original/Tomcontrastava.jpg | Bin 0 -> 10501 bytes .../000/000/102/medium/Tomcontrastava.jpg | Bin 0 -> 6545 bytes .../000/000/102/original/Tomcontrastava.jpg | Bin 0 -> 10501 bytes 14 files changed, 63 insertions(+), 77 deletions(-) create mode 100644 app/views/users/_user.html.erb create mode 100644 db/migrate/20141209204351_add_attachment_avatar_to_users.rb create mode 100644 public/system/users/avatars/000/000/101/medium/Tomcontrastava.jpg create mode 100644 public/system/users/avatars/000/000/101/original/Tomcontrastava.jpg create mode 100644 public/system/users/avatars/000/000/102/medium/Tomcontrastava.jpg create mode 100644 public/system/users/avatars/000/000/102/original/Tomcontrastava.jpg diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 44c5ca4..e13a3aa 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -12,14 +12,14 @@ class ApplicationController < ActionController::Base new_user_session_path end - include OrdersHelper - include ApplicationHelper + include OrdersHelper + include ApplicationHelper - protected + protected + + def configure_permitted_parameters + devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:nickname, :name, :last_name, :password, :password_confirmation, :current_password, :avatar) } + devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:nickname, :name, :last_name, :password, :password_confirmation, :current_password, :avatar) } + end - def configure_permitted_parameters - devise_parameter_sanitizer.for(:sign_up) { |u| u.permit( - :nickname, :name, :last_name, :password, :password_confirmation - ) } - end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 639080f..3ef7d1d 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -7,4 +7,11 @@ class UsersController < ApplicationController def index @users = User.all end + + def destroy + User.find(params[:id]).destroy + flash[:success] = "Succesfully removed user" + redirect_to users_path + end + end diff --git a/app/models/user.rb b/app/models/user.rb index e6311f4..f4ed8c2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -23,6 +23,7 @@ class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :rememberable, :trackable + has_attached_file :avatar, styles: { medium: "100x100>" }, default_style: :medium has_many :orders, -> { includes :products } belongs_to :dagschotel, class_name: 'Product' @@ -31,6 +32,7 @@ class User < ActiveRecord::Base validates :name, presence: true validates :last_name, presence: true validates :password, length: { in: 8..128 }, confirmation: true, on: :create + validates_attachment :avatar, presence: true, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] } def full_name "#{name} #{last_name}" diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index 802a848..af40aa4 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -12,5 +12,8 @@ <%= form_password_field f, :current_password %> + <%= f.label :avatar %> + <%= f.file_field :avatar %> + <%= f.submit "Update", class: 'btn btn-primary' %> <% end %> diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 1ab8051..d16492b 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -10,9 +10,11 @@ <%= form_password_field f, :password %> <%= form_password_field f, :password_confirmation %> -
- <%= f.submit "Sign up", class: 'btn btn-primary' %> -
+ <%= f.label :avatar %> + <%= f.file_field :avatar %> + +
+ <%= f.submit "Sign up", class: 'btn btn-primary' %> <% end %> <%= render "devise/shared/links" %> diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb new file mode 100644 index 0000000..df67bcf --- /dev/null +++ b/app/views/users/_user.html.erb @@ -0,0 +1,15 @@ +
+
+ <%= image_tag user.avatar if user.avatar.exists? %> +
+

<%= user.full_name %>

+

Name: <%= user.name %>

+

Last name: <%= user.last_name %>

+

Nickname: <%= user.nickname %>

+

Balance: <%= user.balance %>

+

+ <%= link_to "Delete", user_path(user), method: :delete, class: "btn btn-danger", data: {confirm: 'Are you sure?'} %> +

+
+
+
diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index e7b22da..510cd7b 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -1,11 +1,8 @@

All users

+<%= render partial: 'flash' %> - +
+
+ <%= render @users %> +
+
diff --git a/config/routes.rb b/config/routes.rb index af59042..07b5e7e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,64 +4,9 @@ Rails.application.routes.draw do devise_for :users - resources :users, only: [:show, :index] do + resources :users do resources :orders, only: [:new, :create, :index] end resources :products - - # The priority is based upon order of creation: first created -> highest priority. - # See how all your routes lay out with "rake routes". - - # You can have the root of your site routed with "root" - # root 'welcome#index' - - # Example of regular route: - # get 'products/:id' => 'catalog#view' - - # Example of named route that can be invoked with purchase_url(id: product.id) - # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase - - # Example resource route (maps HTTP verbs to controller actions automatically): - # resources :products - - # Example resource route with options: - # resources :products do - # member do - # get 'short' - # post 'toggle' - # end - # - # collection do - # get 'sold' - # end - # end - - # Example resource route with sub-resources: - # resources :products do - # resources :comments, :sales - # resource :seller - # end - - # Example resource route with more complex sub-resources: - # resources :products do - # resources :comments - # resources :sales do - # get 'recent', on: :collection - # end - # end - - # Example resource route with concerns: - # concern :toggleable do - # post 'toggle' - # end - # resources :posts, concerns: :toggleable - # resources :photos, concerns: :toggleable - - # Example resource route within a namespace: - # namespace :admin do - # # Directs /admin/products/* to Admin::ProductsController - # # (app/controllers/admin/products_controller.rb) - # resources :products - # end end diff --git a/db/migrate/20141209204351_add_attachment_avatar_to_users.rb b/db/migrate/20141209204351_add_attachment_avatar_to_users.rb new file mode 100644 index 0000000..1d87ba8 --- /dev/null +++ b/db/migrate/20141209204351_add_attachment_avatar_to_users.rb @@ -0,0 +1,11 @@ +class AddAttachmentAvatarToUsers < ActiveRecord::Migration + def self.up + change_table :users do |t| + t.attachment :avatar + end + end + + def self.down + remove_attachment :users, :avatar + end +end diff --git a/db/schema.rb b/db/schema.rb index 90b80a5..4119d8a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20141209192545) do +ActiveRecord::Schema.define(version: 20141209204351) do create_table "order_products", force: true do |t| t.integer "order_id" @@ -56,6 +56,10 @@ ActiveRecord::Schema.define(version: 20141209192545) do t.string "last_sign_in_ip" t.boolean "admin" t.integer "dagschotel_id" + t.string "avatar_file_name" + t.string "avatar_content_type" + t.integer "avatar_file_size" + t.datetime "avatar_updated_at" end end diff --git a/public/system/users/avatars/000/000/101/medium/Tomcontrastava.jpg b/public/system/users/avatars/000/000/101/medium/Tomcontrastava.jpg new file mode 100644 index 0000000000000000000000000000000000000000..194de260464f6d4c5c96e8f38d98eaf250c82a30 GIT binary patch literal 6545 zcmV;C8E)qP*#F=F5K2Z#MgRc;0RRC20RRC1+WJ2L=TN2L=QL1_=fS2nYxW2n7ZS3JC}b2M7oV|G)qX2moXN zVgUgW0RO}Q8~^|U0s{d70000000000000OH2MPrS3j+lI!~i%D009F70|EsD0|NpE z0{{R30RjUA1qKlZ5+MKx2@@hQK@>7kBVlnBLV*gA78oQmQn5p!(f`^22mt{A06zf0 zUmB%&Bo zSvsu>kxjh(lJD2k1R5%bWI*lGmDR0rF(<#YEmljj5 zsZPH7Tvk*u*)~u{HW8xoF+T7XC{v>fOBDx_v29S}#wG3Q^`vWz^wLBm^9xM-^0RQ0;$uEM7xBkZZ7!|~_SWe^bSNf}9Tr7g6m1GCgUmFeo>R(EpN%~M5bI>5SZ z%U-298_aczO*P3fgMm3IEhmsk{PB~F^uOi!;dadi<-07$^xs?HU9`6X9)~WP%Q+<* zfKt5Eu;6kOIO(rw?xaH29WJpoMx9KbMS)(Xvr=j#phL0J;&KwKfs^~=2i$N+Qdd;& z@4L54Rqo__Q=!(CI-teTtd}LChZN}##M{`EGk@TF+@a}&dUT5G^7w$m7UVQD^=_?2OH%gi+yOcF_vuRbscH2x#HeX& zRQ4KX9bV+Mr%7fW(1#SNoke@jI9c^$anByzR*S|Py1VYJ-0r4neXD=n4p}f`ngp7B z#qJSSht%VOI5`a=Y9RiZNI&HCm~H5+RVqnprBq^_6!PoNg0%pB$`k#{{{SPOo`|@W zdwQ7~ksc*wsS{t2*VaCsTBXBl8&KIN)ZxKV#|b=h@7DhSWp^O%pXzh^ooU9C0!TvI zJDE$Zp=v&tFra;4kPo<0R8x*RDQxcT6R6r@s#+^^Sd>aN7NJyPxdI#(^8z(fBq*h| zg$6_Zq^KnA^=D}J6Aqkez1gR<%`&XovRIv`mCBl-RUAN3Zko%9W6zJ}`vS|+((*y} zQd%P^S2m>Zpx27dzsK&QwF-Ua?IKk=xh)ijoye!wUcS>-Y6B3bxa@>g9uBP_APoAlv@1DKNEklk^?O}8sMBXz^oA*E zd8p7*X-Y$h0Z4K=EUXX-#uVBA02n_#Z#`6VTdA6hO1(TA=Ia&gFU#JesC8?CZB^*0 zj_i*Kc)H^-X%Swq6+H~ji`f}WH8}@E`TdulPPEwUA_Y|!0&lu{R9y^p6*3XJBbF^4? z4B?@dUE+Kg&rC~up9zY-*<2@`S*mdR5D3yp5xieX)9f(>`R06!s zi2(a#s1*MIDLr~a()~x5bhTu`wCnP2m8`ayEi$D!pKoEG$5OtW+N)vv^1{2@n?kPB zlDUq>lF-KNy$M^lntR>Im^Qk0b?N8o#b z?nwhZPqnRjo1~h7cUgAxaq3o8b+%Pkrl@XZGRl22W2q!;SU5Ny;HYN@9a(3=VXDQU zK)ZXKgK$No+>q_5uqqKIttm33IvH*>hFv>Smr=DzQ2yQ)3Cf2|OT2r|rAqD#MfLMd zu8ZSNT&vP()k!lb)uAmvSM`euTkG0Xg{`*sxX{`&`P_Q5$A=|33eg*e@kRdtRMY`- zT{SAw-;xLYD~nP>n@8=CRq^+G4ww&BdGQf`k!5Qqggrv5A(%93RdPhBF1dgjWeW>Z zj(;0-)ogrod|5lO?MuXOyR9tkr%96uRE!a~^pu=_ zbDn{{Lh-NH4Q!`rG@j`!+g44{%X&T9CDYsWi)-k0 z&7l;%T+!>DZ9}S599WGi-FeNS$HT=W`4~W2kO(`IxE!9G=V6_UX#D&36rqkz;GjLT`RjJ?)4)5ook)c-7ocfvmpa(u+ z=N@Kuf=}E42R%{SxbF}BYqRgWvWnd@w?3a1OobNR2rfuRn4rpHfKnY&)3*sie&R>Q zI)v(dmFs=Kd@*6(76s34+>FDDu-#RqrO8WpA#JwO$LWYArru-??QzvfFh@O4<;GHk9F}nM&|V$tzeVkOxw2yJ+hMklZwBb^7HB z{GzESc+xBL-zjy5UE74Xf(Rd`cBE(6anysw3hm&-W1DHwz@shVAaYgmqe)Yg2Is& zpC@W35}bk=T7U;R9>SkqIlZ8E_uId5mc4_d^&MA}KxW!SNK)$&q_+LETzO=~EW9_i zfwOi2Qhi>P9+AuUWwMycwyLbTRG_V4#w0SO2@n^+JCp38!S??E-&svO)a_jDdr+sCRW@vA1M%fXSDPL5pLV1+eJccdRFw{_$58Rjw)=qX8lKGREPD%I=*vrY1v(xC zdYc>%tcXrd-<33SQhrK#2Zx1^ij}cnrHfX4_)z4d&VBVb@`zY*#3-Z##?T6t$EcE_ zjAWZ5X}^gTpMA@EhgGDxE+j;y5+7RuNN_0dk}^pk5HXK#dQH9W_g|y-2Xxw1tP=Zw zxv$+Lko&YKGi*vbGU^Q1%c%{ZBWN3!ovGS)6#_cdyjHF|!&@{nOLgN+G0q{c(> zW2whol4()6VJ+dZg*oOZsQN%jKI5n+1?_U*$wJniQ>>hWF=Z|Up3i)p$v;$+E`rs_3hOfN@UA-UgHvholX2IM7504Q*N4;?fP zsBdrBb!{cpy*a*xUffODVpSfLqe_w`qNzQPJ(NgH*3<%7*yBq|!3WX-9{mM<`!l88 z&R+Gq=Ug>4{ZQ4Kq;_FCxz$G5NJ~wS%LqyWQbS4gl&2i2XOc+>rtj@a!l9;BN(^Wg z`wC83^WHAB_$LcS{z?=GJTC`7KK%msEw>ib{-sV7`i#13=}**0LuDw4=6F&!a#BIh zA2{fJS)D?du)uaKphDVs5*$K*AcOJ`BdN1Wdx5R#t;Cy#JS3v6xRpzYvclJ%2ywCc zYe^Xg(iQk4=H4C`da66(hTfG>FG_tqq_PuJfc)>Hex}#}sw;1U<{&GON^nkiJoUSG zK5Ctj>wK#|fuxsjZcx~a)k@lp`-9npjE^awcPenJ2 zOkDzNvu?#GdOfF2S#>2-Dc5~Q;;h>#YGrOX*uYb-goVDZIc_?=z#XYU!QMLgwMM5d z@42-i>Fx^Bkj3XFkqK+LZR$gi;a64ks9Q5$LesgFy2)uFv~0pqoMUpjQ`&)1wB0r7 z)OxkHy80_FshVp_N<(a+=>Z$l!A??^&gEpNka+6q{vRF9So%#=y8A@C^x{^I)Tvb& zbvQmu zIohBI_8=a)>(P8fH2$qNvusAZt%`I2=JiDSlzm#k!b3?(QWTdHo>E3eRq~!k8}qrl zerC<1Of_ z2sy_aNd1GQMm6aRhTNo90+O|*)i9>~wSEa8ALrm4dv&16f@23ug#d+wr8)b)Nd#~} z;2wTQL`QED^&Zx$i`z?Ys@0oyMRfTKhH$00kd*<9culw}?$aoBOObRt zZcS2{Sb8t?=}l4NxI<1U8v?VzK|%DnfN+zP^{RcMTeQs>ulFHKvucQLw=vZjkD)SF z*!t-$IS@v|R+Q!&s8aA$a+Ah*D?4V<&1}`1u|3gOwaZa0nzXz6qix-G@|=-KEJ$jQ z+t3Qs(vlL;Z_7SvP@gOScOBg}7duXq$C)_`^#_-g=W@Xc zIp-&;0!p~GqWVQP0~a2R-HF*7rnYv7 z&>5v#^;oy9csVLVl^Kh~pz_j`md6Q5NlHKfa*_wZ>uS`)Pq?k;+Nn`uS7JWVeb$z) zVYYoMNX~GjCkr{?Wb!&x_jRvOmv62bB1V>o{%lz$N=lSk!iqh9;l(5L%6}*)=b%Pd zk!0O6Xwl^vrc{{TaQcTwt3MXAy0m6$1PN2Ym-O6ml! z^$R5akvLExAzO~l5_6uudv-PFWK`2WJ9A^eOoVx^1dxsB!hj@?Lcuua1Z4D0i~3zo zqZTE@N{e?i>?WOyz2MBHHkIUkJH(_dK|uNmA2`QO-@@w9b5k`sy&K9+%cZm%ey?)e zw94WOW-3~yzS|{1L(#puwPfStL`KBMKZs1 zZ!T3D`fsHuV_{$EGPYFM+(E!bQj^D0e|6pB>1*AmMUQ9d9X@5y<=T}YNT*3*nT$DE znDdHBTU%B752a^mCj^{x)S;wZ+tRy&*GqR#sgJuJ(2sjSq|K($9} znn#kkjj5!=Y%ePV00MA2T$j$F-nBd0@Tnfk{6Que6m+c+sk;gjrg!^K2_~X$41d$H~YX{<| zr9NVtN^n<%kVydgeaRW)fI&y5de=_4;z*(Y08mh?wDN*5ugY^kYGCJ(k1)OK+hhv|Sn6cI_(1wsC84|NTyq9523eYt>Ezmx6$V9Xe1<+oU0=pH(fFD zYPxKm>Sedvrh#17k8EyMXjR&sT9r#*lJx>5HN_$ysyLq zy(_J2x-HJY?^bQJKF&OEdeB{L0kpklYGT@AC9l`9EJ!a+Id-FQ*< zQ)p_BbvkLQRgTQ+4ryQfGR>tjr)b8R28dag8PMdlwDZb#cK-ldZpkYkp&JT4vP}0o zqy7$dA9}HSMun!Gs`kYiO*%vMJBsLHeL_1DP*SK(c`{yUsI54ayr&dN2vQK7`tUbS z@$^>DuzO^*^i#rrzMD5vdx#b2u1&G5T}`CY%=%NUmdt8>GARYa=em`GTrPmM1H2zf z`D?+O{X-L)ZgPY;%6TEu+xo!on%P%7SBHz`w zUB*Z}g<#;1=l1GM?Yi}kN;Mi(w6vJ(NjP;In_fTi=a0DZKRpr`Lm@P|?KvH&jIS$C zn9xzemXWnM9~ns}0|4~9bq)&bOC|Mh-KNVV%7Ed-Q5{={;1se8`p8>x|PQt>#RKZK3i>UzC6lr2s+R_c<6i zIpc%(u)P4%4NTVw)=jJ0&c630S!yb4lVMG5ntOD19C(J`C6$+wRH8r_B#&>;SA6jE z?K=MLXGx@1A>SIErPHc`3x3jVsS1xlN@W#*j0 zcfs2WIv7mNO1r4l3T19xdV9`EVt3nO#-V9aGU= zb=7Sjti39mTz$&3SB2jan4tj-B~3_)O{cRZ)H>t7V|yKx(~YMK$R}vNOj`O=8aiI2 zRiZo)khZ>@x#cSyr+DF5_Rr5;E+)BEmhuql7F!5fgKBF#5BC64agR^WS&KrUO=0$< z)SGTtbt-KuORGxIbLnDPj*J&?*wt2_ZGyssE+#`vr0}qmfUx|IbHZ`y$tT}Do`wxm zq(44emH4Rh8Y6p%X(27gLF6QVzA|~^t;e=XMK)D(h(~4SyU>&PDkO@k#oFsFR(G}b$iJx`4 z{{Y+zy~5Ee3GH#W?dnCdJvIaKC~@RNfXHd3%5jx%ee=rr&nm(|13gZ?vUtI3R)}|_ zrdq*F)XilYISt4Z>#m1(UKIoP$lJ*i(ezb<3!wrkRH^5Y|>w2peP!p}ot>R8#=?H1E1?Sfc6u zjYqw_Sg6u3IFxu%s_sanv|Vy)7(!lB%GyfGi-BbBN=|c-4;^zxrBh=}ols1_HbR?H zQk5x3ASht)IQjf_fqgACCY;h(WQ4iyM<)(#=lKA2fz?NM$)W(;ZKuf25gl(ycp6Sj?!9KN|Hw5g=6Fq?a?WuR`tJJw{@ERu2AW9n$@XJ zg1S3$SqhHZ(jI%vdB(k*U!-6kPrsz~7S!!3Mc3PfjYuADv-md&}`FM(%lbzMiH zQzhI|sWodlZB{dWRLRuHvgE{Rr=8@h^bnTG`3W3#&x^Po->oexH|;{zuiq$omsF7& z5PqN(8beYFTjeMRDG5#vemc-8nk#NqskHj6+U4Ht*(^69Yz#mIfCPis02($Bm<@E+3wlkJk?wya1O86~(SZMz zg@N%L6DvRiqKZfh{#QWipHb9r04*CGyYN*VdXC#JkV}D_3XjuE7({gIy14F45JVMS zAI31AjLa8V**PzB^In&hl~+{0dHe2TeM4hY^QV^9?w;Ph{(-@v;mN7# z?=!P=^9xuUe)Z?t`mc>m;@DfS?!(5oteWnq-*$~*GL-N+Oluj*7V-?!7ILm=rI2b@QVPA45V{7 zn>MT#POwW8Al<;KY|G)dQO72JDt6Nv!W9)Hapk>b>DxE?jc+h-ocw{D`&RITm30;T zck#6J47eXa_k$GFt-h0kZ>ttte| zv`dRqIs=jfS%_n)9g>lH?L_^8N*f1eu;JuRuHU5hA)U$dku{Z!?zvPhPhgDd_TYE_P70*xJ|C*L#~T{DD5J*8XSRfl6hBImuqixgR;L604} z4?#zkB9s>Er- zx%txWWmTfnE9^#9sP;7v-xo1NCiSvMXMkwpyDuf$eSdk}#-q`?h!4>1Z$!Ml$u2wc zJuW%g4#5nzZs=@~Z4FtTz1re>!-V6n*^#bu+ADvZV(9Pd*wFsYbI4ijOcs&eF+wLn zH~X5;?zaU7a3NE`C?H;WYk3-k>5x4GVzMc{PE16Z&iKYNAoZA5J-uMNxyvIo2=qd# zPA^X)m$!}&_M&jPR7hZ@8?hLA7)JU@JRhk0NWSDW1Jin{)um4fSndxeWtbTse#(&c?_zAfU+D9t!JZ*~b%^_NzTUqNX14d-mtLblvg1 zB5%F{C@{Lq1de$N=kC1M`3%i*P@8zQs+02!X!@3Ln9L#H&^%S$n?7)!oBWPNXB7Xv zKBMa@fs?#XUW(GH5&s5Rd?Gz!~jHujQCK(%=3-*pUzh zNjr@Qb%VR9n4+aG14Xam7e0+0e+?~W>DXIaUhi@en8g-K$*~(~_I*n#x*s6zCt*Gs z%KCIzjL(4AWBoG_^|*rUOS&9J7{O+(JPl#?>N*3sf_a_4D}D33?GI{+EAwjjq^)K; z*>st?%_sT!gV)iTm4{Wc9eiX5qIeg4;X+sVi;fG^vVM1@Hk9o5ls5+#ZF3$A?c4A^ z3enb0j^>WmtjEl5Bi1^MB;!WY(%pyFcx5u-ZX`AoxC#P$}CL95@AdFxs zm)yy$rG@I&5+~IWo;f`0)#92(DJ>0ge&f><$_lozEX`Bg7ftHUy3gtj{-bi(Pk5Ao z*921-4=@3&b_VFOdkfi>J|X@+N%+iv;#DlRZag>m3nZ6%bQ{IvygzOO zdvj1C(_1of6)h*ii!^bncePo*gDVuj0ig?H38EAJ8oC){L1HiYLh8_ey`!^iKZJ94 ziO;8%15sQU`o>S=8ZuZ@#oi#3h&LO1ieNEPwVYMhMef00x|L4vM7wsiVHUpxuMlSY zKGRR0^j>^Tiol-%u{-B;9!;vhzvp6H(xyAtTg{p3QN%5X4v^$th?fWL;5u2AAIpWS-2I8Q4yu3%D} zy{)XD|7t$2ej(KFABlV3nXNJ;t(Tsq91VY@qXb$;byGL2byp{tEJgA~V@^46vW>)Z zyEx05bR2x!7t)|m(kx%1w;pUfTQjV6h`FV14ml9!OJWnX$Z}>VhOVkm&ZS^9nXm(7 z_A}rRITajrX=ZlYN$KO3u;Sonq>c1Tg}>|NW- z?{aI%dT)3ioB^9L8;^4P!$j5wCZn&{ayi`yI{D`e=(3c~zK&dmB|Oi(#IGiPqv3bI z0Z%b>ZR{{|xj6QGn@%@5Z1^a{8L!C%h8qs5uty0!{AZ>7d_O;X=Vku8!9Fb&apKd*v<8 z{{nfxirv3|b+Gspd!=7F4;X4Wjnf(d3&f| z-b}FF9MVjgMi7k67GQ_BNodSU;!&P{DUQL*JjAl8*~?MxA-QTb_)b@*cxqt-Xdm9^ zcio9-5KEQ|bI%hj2=()V9Dd07)pNP@3D!= z*|(~w+cdtk=qNhGAlEW<&g|=4|4y;HIfNNk#B=YssQ3LDz`nR_*wVT$oU7)>5tw}7 zA@y8GwW}DqsX}2mz^5e?F-9_m5*2X`?Dw?jCTg6&yS5h2mqkSUME`Kmo)_Zs8Fc^g zT941T>0vRfys4A+q+|7v(q4EIvNa{swLGl2FA z29cZ5UH*SaTb-Dq&iccG=B-s^-koB=aOdDW5d{jM{s%qp2q1DQY82g2yRC;oaQJqJkwQ*x zkSz(Qrr>$$a_`2s1=kovL4u5>kEEnMkaGr=`D}YDL2;I_uHh0q4njq}Gt_i{FaJmBKI$?9V)s4MIL6Py_t$u`gLwZ|5hQLv}|W zpJ*bl_n|J%G>ow#LvPNKHI@9lt~K_mrTJ@l0FMhlYkGtKdQx{>4Z2H+BIt8`t0j~$ z(A6s9G!!DRXCNw>N=yQ`Gm4zQ;xQcCVmP*J5f8vduBDMVAh_Msc3i_5xxP#K z2gQLc>p}6&$@=H$%zJ;PD_l7in;Bc9y6NtmSJ&#?7GnzGo2 zFttGus<*60cS&|gA;)x1%e6pc=uBkL8`AF{_2#ErwbHV(rREFn>Gq6IMaxw_NnX6f zD3l*Wjni8%0u)a)rbIoh$BZOVyA_CyQaMy6J;Qb;9}mO^tj>f~(@XuTIv8PkSSly; zq|bdAo3^w-x*ntri$@deYUfN26$oQnvv_D)Ckxs3J<=L??dNG+LSnn}Z{?hzD5bJC zQ_a}(#*bg`)4tt1!mAZS@w^S4%p_O)Wk2+YD|Nu20^lXi&A_uLVMP8KK?JfcYu>Zf`9FH9_Gf z?#83U`*7D2p52^iu*w*-Xq1gCUDJKSCFvG5ARGqaAE#X**j9%QXlc$+S6~pfGgeCs z3C7Sj1q(R!uiFrQKhZEB z^2*obB}$NFdQGj?Y(D$@=*tQppqa;_K};DhBgVLz2mHO>gJ2Dba1_UR#gK)oeiaIn zqTZPKU28vLnQ5MV%O8(5mfWFLye`4~g&#i-{^Leryy{2zdj{Nt&S#pF-oN!;W+h(q z{km|^!OtilL>QXIsg2q3LPZO*P<`u>mo{u&4F`|2OG{KjKv$6Po}*0U3=WH%F6U{y zXkqVk$&jD5nh!J7VjFL~-3LT%p8<4wq-J~?NdnRXVP{KrpRy{pNzA^X5qPMHr=opV9bB}NBgbCDN!2ZI&i+Y4mDI=*$O=I zTtx0g+?_cv(RA;T;JdLVEHo-8gEh|P=~C4wTzv|hJ|@n_?oh;$>;Xw% z!^;0!w+d9GRMUW~LSso>#> z6b-`$C{yG=lVrsZY&Ak>%5=}*a^o~BZKB32ZXId+xp(gBI{*+>LUl~Ek%}Kri?*~t zk&+|?9-T@NojR~Dc}L2*HLcc7!*?37kb3g}~dSrr@~C*#(nz4>l;ZQx|qix(!jU(gHQ-=}W&^GZwN z19oBwrC+LXAin_3rB#Drs}V|2I6dj|8~Z)%BQA`<(*AK*$U~zZiN;D=JfvXeQntCVG3T35&29<@XC0kX^F4k zMG5zlsK!a7fQIv#Yv5*pHGCXGXvCSNwFW#T8{p0W)<`3wX4SG-$F$aL(8tS<~2F!Xou&b|Zbfuwxu5eeYp3%RL$ke!KD2rOGoFl&!EFYdNsN zh2Hm$#u&QKHJwiw*#P;-LlpGWd9X$gC zk@np)dBF=+CV?8<`_k95Oa`m8yI1isH=Hx)4yo}`{xwIq*>};10_7W=^FsYY4e~s^ z5UpJCDNQpw0B_nJqrVE4S-{HN*D9J#vf?-{m25h{NL;P!Bou zG*3&IEJ-z}3Do2jBpxLkDMFej^qj~<`eC;tdR8}PawhJ%f3($>@kCClk`I%dl$jD= zM7IDygu!+?@m23i<3MakTB?>j=|Tl+L{KGw-Ik=fi*OUq|60W}B-y_j ztq(!JFo)ne`^RDsFtgMKdvu&#LQ=8f#sgEd<`h_I}G`Cs0sRDUkWY_-hJhK;Zomy50)b zIfFT4YD`Zqop+>6tD~P<9qHs?I(zwSvyl_kkw!tjGHXktlRRQ~Vziw^8WmJ7rG^zl zxry*?ffKz*7b4y6m$Y~%xsLHj%X_lovmPn9mb@Q&$>j})t0KG04{dM6T+LcFhs>d& zXwM>gvMMQ}49aR6fkR(J7>CFp>^mPRnu?aCEgKf+a%EW>b31T5$ZMEG1`+H^DWTYz z&XCtDKK1q_&*M!*J(sx?-(;`;SH*%1t_6i+|81syF=V zWZAT=-FN2{LBmU_+U~XwZMZE4X=xbN-yHSQNG7)5aRTeJZmUdOKV7PuYeH`Gm) zjbDRZM7A^*pnF@FlU!(Ss3&n#PPP>o7DqC;GPa5o6j&4MqV*Sm(`~}QKtL>vuWCz! zgMjZnHcO@OlkB@YmwY~0n+C4w*7u)eidI!v{wPdV2pgnd+4_8H2$83C2i>R&BWm$-Ro zT-UyLDPvNRb&uVaHjZbnBzh@&8noNAEcS6`r?1y8cjnLA?PY{4x2Nl-^0tQZDvRS^ zj7v*D2>AO7-<;5{SBrE-1~~n`Gqq!-9I0y*J0iN1WOg;5hfv0DsJc#FfdW*|xhp5L z(wD*8vHT${E{JcFMr3@iIP(CZ6-a+!?g zFd>=ACA}QLYU*mDU=1%Pe{xpteAHI#*;isgAwFlRsd_GWgQqmE5q=MJ&|A3R(pX5b z|4hlUx~@e$GI2)mIebegd7wRNb~^(?3;sZWq>#-@HmzEzEZfKTjoyPjt+e;0JmSgz zt~2|4Y`I1Q0k2|*1|feCX8{RC@+ZAp-sx#-I|3N>l4L5fo9z8}=Y1G^Zrf8d~gaql);wKm+ll6~9v-32b(JhU> zueg^%b7Ur!73Ti*+Q=195lIgSM{glc+?{-9DALnp5J4QLk}?{LJ@Fu3?yGoPDKv#` zCNg(ah-ZlvoU6&pMXZBBlbJ>5N$x|80e*K5A(ma>+7FOABp>c_Z5)l=!25fxFYfe+7*oRg`F5d8C6M*MNf2-aiy19=M&lYW zrD5nkX4=o?$>LHU*Xk`CFq0vuQO~oOpEV%v8~P21lEbBO+mIH!XPYnTSBB51WJ;v4 zSr&SeKcJByOWymz0=I(lp8^ES$s!#WRIGVQ3r@xF%AL>!S=kLvJJl2L4 zbzW>&q5GPd>k@BUkT5S!>mOYh*(B0rL_UoNwDkX0muK+0FUQJM40Uo=@yhFF1=V`t!-RvJ8^4OV}9~z z=Hp_6bM(jZkDnAdh1{d>dPc+L(f6soV~3i|r+s{yg?3M)i?ppL<({~c(D?ZBP`Q|P zwVz8Xb3ex3n2J6hV!{l&c}R4a2R{;7lbQzO#^!dvP(5d)CXsWAG6TD);Ydj6Ird7Z zX%sND_4#1>?%u4g#O&VU7#+x4U_A6#v;HAQNc z91`V$U5Q_y5hx<0F4)^DA=`CWj*^nohXuOd^YVk^Q~}Dlsskx|UlP7Gf1%-Nn8kQD zk6W{-7cI)EJvxNl5wRhIJ$W(h+&Wd(lJUfn34mhcV2hMng zS)s+ZPTZQhdy|)4l><{cT%W6>Yj}3G1!oDb@V-$MBmcD9h{fOL++`}dOy6xIp&=O) znvB8Z9~HBV^{RNdPc@n<=r#3QI!?suG3pL~R8Q98HKNVO6e^B`hdX38795TpU!-m` z4R-5&`Z>RPJ#3}uMUlhOh3p4oJ|Qx3(jx}t$j4l?~|CLhkT9EWBm@i1Q;Pbw=r&P}30p(w` zC*M6S-1+0Pt)WxvFoHu~tG2gpQBjlKc^ zzuJkZ>};GRb0Q8sPU|{^DI+K*QUS5jW<2<9Nm_Rrb{8^G=5%i+ehIjm$Ts(y_o6(p ziC^Nu`%e-8MJ+(Q<-*LY3R@2>`!^qF8of3jDO!USY6tvbzJO543!9Lu-tuhvTA5#= zsy50vaAi7`v6yLDG~>6)me9t@cueZ?AdA7n~!fp5m^+X^Sho0 z>)_eSd%%9QwooB8V$~-sIC&F(If;F0*uO7(O+@f8EyK-n(5hcPa{TJxaB`YCbdq)= z(gMF5S13HLp@RKvZ}Z*jW5zId!wp%)h(c>N(l{)%nA{=}4BzQO8 zt~ScFw2Xky!z)rJ4Bv6d!u%MCCw<=q}HYQ+YD$X*xBJ zvAYmNVf!VNs#r?$B+kqlCxCA78ZO>@QY-5S65SsvhHjrwn7gOp0cICS%{ZB{?JnXj zwc^LyZi(${8?U(^vgCV<2u;+`RQSr!{B&>9N3=O4P&H2~?PZ#TtTI1kJ?<~yJ90->eppu0^LQxm`!-XyJ6MxDy`dnuK97a0A zr6p^~)eO8wx*}*71gzAAlT1t$4U@mzwD+ESIMT4r2|5)apQ9>v3Eg$QR~q;{7cA7r6?11oE-$`G*dTKjg8?KA{p>e={`*JwmXb zW>LQP>+NK|e=F#Hy6m*U8Dkwvi&q;B9II3USt&oAv|o{A-z>O%M>nN<&Mmd)!|#J) z=uOA_qy*!J+zgzbu5vfWh@8XQLEbyY>$PUpKx8ReDDQaBTsa|Y?z|hXSoHN>8q$+r z)=fLJ(&>K$9VE9BGz7yjg?M5yv^2PgSNW~xQk%i5!J8nBolu7khWi{b=|#`UbE3{} zkUU_maY>QF?x$A$gQte?XEx62$Cn+|kt6IExK8qUbI8|i=O(+Y@TfWT6@NCENJd#2 z!c80Y+DYnD<97{3Y|20LX5l-RF6nUZ%V2K`jKqFW%8&|tt^na#1$UDzZ~<(Nq>dvB zS549Td9=H5(!m?cahorf?>mPHfiCe+L!cz1`r83F{BzQG$y~OVPLxtvzyjB*0me`NQ<73 zniEiKg5&(yITf015 zTTaY@HyQ7*6N?$Wh==uxqqr5*CxfBN({B6DKjYU_#Whap05caNpVL%zd1DN-%y{kpxK%HOM<*E-~-*Tq#4kz%^M617S52?~SZ-ryl zEVhDvD0NA6{z3k+2f=Dz^dZ7~jreq(CztuNZHBexhQ18Hxz9pBt`4AHfQEg;4`x0G z=QKaC?RiMQL@04cCO|b?q0W$d!0tdlg7b2ArWajmod3)}Jf1dXGSAB%@(#PLjnX`R zuDJ)A_;#X?#G?2%I?pSmsC0K+oG3Z(FDETiX0l{DpQPY0JgI!xwE%#$!2o{-Xv7!6 zb-*0jeH;*1L%xFfSIIvuz1|- zA+>;Mg_1^h=`@ZpA#?DxU(Dt+2An3H zu*I$8!Ka?fM%k`$lQ)zrm94M71^l|Ghhl>6Q8Nu4(_6JuT^*cL+t`6)ewy{67hbAS OQ;J1haRB;k{=We6t5J2L=TN2L=QL1_=fS2nYxW2n7ZS3JC}b2M7oV|G)qX2moXN zVgUgW0RO}Q8~^|U0s{d70000000000000OH2MPrS3j+lI!~i%D009F70|EsD0|NpE z0{{R30RjUA1qKlZ5+MKx2@@hQK@>7kBVlnBLV*gA78oQmQn5p!(f`^22mt{A06zf0 zUmB%&Bo zSvsu>kxjh(lJD2k1R5%bWI*lGmDR0rF(<#YEmljj5 zsZPH7Tvk*u*)~u{HW8xoF+T7XC{v>fOBDx_v29S}#wG3Q^`vWz^wLBm^9xM-^0RQ0;$uEM7xBkZZ7!|~_SWe^bSNf}9Tr7g6m1GCgUmFeo>R(EpN%~M5bI>5SZ z%U-298_aczO*P3fgMm3IEhmsk{PB~F^uOi!;dadi<-07$^xs?HU9`6X9)~WP%Q+<* zfKt5Eu;6kOIO(rw?xaH29WJpoMx9KbMS)(Xvr=j#phL0J;&KwKfs^~=2i$N+Qdd;& z@4L54Rqo__Q=!(CI-teTtd}LChZN}##M{`EGk@TF+@a}&dUT5G^7w$m7UVQD^=_?2OH%gi+yOcF_vuRbscH2x#HeX& zRQ4KX9bV+Mr%7fW(1#SNoke@jI9c^$anByzR*S|Py1VYJ-0r4neXD=n4p}f`ngp7B z#qJSSht%VOI5`a=Y9RiZNI&HCm~H5+RVqnprBq^_6!PoNg0%pB$`k#{{{SPOo`|@W zdwQ7~ksc*wsS{t2*VaCsTBXBl8&KIN)ZxKV#|b=h@7DhSWp^O%pXzh^ooU9C0!TvI zJDE$Zp=v&tFra;4kPo<0R8x*RDQxcT6R6r@s#+^^Sd>aN7NJyPxdI#(^8z(fBq*h| zg$6_Zq^KnA^=D}J6Aqkez1gR<%`&XovRIv`mCBl-RUAN3Zko%9W6zJ}`vS|+((*y} zQd%P^S2m>Zpx27dzsK&QwF-Ua?IKk=xh)ijoye!wUcS>-Y6B3bxa@>g9uBP_APoAlv@1DKNEklk^?O}8sMBXz^oA*E zd8p7*X-Y$h0Z4K=EUXX-#uVBA02n_#Z#`6VTdA6hO1(TA=Ia&gFU#JesC8?CZB^*0 zj_i*Kc)H^-X%Swq6+H~ji`f}WH8}@E`TdulPPEwUA_Y|!0&lu{R9y^p6*3XJBbF^4? z4B?@dUE+Kg&rC~up9zY-*<2@`S*mdR5D3yp5xieX)9f(>`R06!s zi2(a#s1*MIDLr~a()~x5bhTu`wCnP2m8`ayEi$D!pKoEG$5OtW+N)vv^1{2@n?kPB zlDUq>lF-KNy$M^lntR>Im^Qk0b?N8o#b z?nwhZPqnRjo1~h7cUgAxaq3o8b+%Pkrl@XZGRl22W2q!;SU5Ny;HYN@9a(3=VXDQU zK)ZXKgK$No+>q_5uqqKIttm33IvH*>hFv>Smr=DzQ2yQ)3Cf2|OT2r|rAqD#MfLMd zu8ZSNT&vP()k!lb)uAmvSM`euTkG0Xg{`*sxX{`&`P_Q5$A=|33eg*e@kRdtRMY`- zT{SAw-;xLYD~nP>n@8=CRq^+G4ww&BdGQf`k!5Qqggrv5A(%93RdPhBF1dgjWeW>Z zj(;0-)ogrod|5lO?MuXOyR9tkr%96uRE!a~^pu=_ zbDn{{Lh-NH4Q!`rG@j`!+g44{%X&T9CDYsWi)-k0 z&7l;%T+!>DZ9}S599WGi-FeNS$HT=W`4~W2kO(`IxE!9G=V6_UX#D&36rqkz;GjLT`RjJ?)4)5ook)c-7ocfvmpa(u+ z=N@Kuf=}E42R%{SxbF}BYqRgWvWnd@w?3a1OobNR2rfuRn4rpHfKnY&)3*sie&R>Q zI)v(dmFs=Kd@*6(76s34+>FDDu-#RqrO8WpA#JwO$LWYArru-??QzvfFh@O4<;GHk9F}nM&|V$tzeVkOxw2yJ+hMklZwBb^7HB z{GzESc+xBL-zjy5UE74Xf(Rd`cBE(6anysw3hm&-W1DHwz@shVAaYgmqe)Yg2Is& zpC@W35}bk=T7U;R9>SkqIlZ8E_uId5mc4_d^&MA}KxW!SNK)$&q_+LETzO=~EW9_i zfwOi2Qhi>P9+AuUWwMycwyLbTRG_V4#w0SO2@n^+JCp38!S??E-&svO)a_jDdr+sCRW@vA1M%fXSDPL5pLV1+eJccdRFw{_$58Rjw)=qX8lKGREPD%I=*vrY1v(xC zdYc>%tcXrd-<33SQhrK#2Zx1^ij}cnrHfX4_)z4d&VBVb@`zY*#3-Z##?T6t$EcE_ zjAWZ5X}^gTpMA@EhgGDxE+j;y5+7RuNN_0dk}^pk5HXK#dQH9W_g|y-2Xxw1tP=Zw zxv$+Lko&YKGi*vbGU^Q1%c%{ZBWN3!ovGS)6#_cdyjHF|!&@{nOLgN+G0q{c(> zW2whol4()6VJ+dZg*oOZsQN%jKI5n+1?_U*$wJniQ>>hWF=Z|Up3i)p$v;$+E`rs_3hOfN@UA-UgHvholX2IM7504Q*N4;?fP zsBdrBb!{cpy*a*xUffODVpSfLqe_w`qNzQPJ(NgH*3<%7*yBq|!3WX-9{mM<`!l88 z&R+Gq=Ug>4{ZQ4Kq;_FCxz$G5NJ~wS%LqyWQbS4gl&2i2XOc+>rtj@a!l9;BN(^Wg z`wC83^WHAB_$LcS{z?=GJTC`7KK%msEw>ib{-sV7`i#13=}**0LuDw4=6F&!a#BIh zA2{fJS)D?du)uaKphDVs5*$K*AcOJ`BdN1Wdx5R#t;Cy#JS3v6xRpzYvclJ%2ywCc zYe^Xg(iQk4=H4C`da66(hTfG>FG_tqq_PuJfc)>Hex}#}sw;1U<{&GON^nkiJoUSG zK5Ctj>wK#|fuxsjZcx~a)k@lp`-9npjE^awcPenJ2 zOkDzNvu?#GdOfF2S#>2-Dc5~Q;;h>#YGrOX*uYb-goVDZIc_?=z#XYU!QMLgwMM5d z@42-i>Fx^Bkj3XFkqK+LZR$gi;a64ks9Q5$LesgFy2)uFv~0pqoMUpjQ`&)1wB0r7 z)OxkHy80_FshVp_N<(a+=>Z$l!A??^&gEpNka+6q{vRF9So%#=y8A@C^x{^I)Tvb& zbvQmu zIohBI_8=a)>(P8fH2$qNvusAZt%`I2=JiDSlzm#k!b3?(QWTdHo>E3eRq~!k8}qrl zerC<1Of_ z2sy_aNd1GQMm6aRhTNo90+O|*)i9>~wSEa8ALrm4dv&16f@23ug#d+wr8)b)Nd#~} z;2wTQL`QED^&Zx$i`z?Ys@0oyMRfTKhH$00kd*<9culw}?$aoBOObRt zZcS2{Sb8t?=}l4NxI<1U8v?VzK|%DnfN+zP^{RcMTeQs>ulFHKvucQLw=vZjkD)SF z*!t-$IS@v|R+Q!&s8aA$a+Ah*D?4V<&1}`1u|3gOwaZa0nzXz6qix-G@|=-KEJ$jQ z+t3Qs(vlL;Z_7SvP@gOScOBg}7duXq$C)_`^#_-g=W@Xc zIp-&;0!p~GqWVQP0~a2R-HF*7rnYv7 z&>5v#^;oy9csVLVl^Kh~pz_j`md6Q5NlHKfa*_wZ>uS`)Pq?k;+Nn`uS7JWVeb$z) zVYYoMNX~GjCkr{?Wb!&x_jRvOmv62bB1V>o{%lz$N=lSk!iqh9;l(5L%6}*)=b%Pd zk!0O6Xwl^vrc{{TaQcTwt3MXAy0m6$1PN2Ym-O6ml! z^$R5akvLExAzO~l5_6uudv-PFWK`2WJ9A^eOoVx^1dxsB!hj@?Lcuua1Z4D0i~3zo zqZTE@N{e?i>?WOyz2MBHHkIUkJH(_dK|uNmA2`QO-@@w9b5k`sy&K9+%cZm%ey?)e zw94WOW-3~yzS|{1L(#puwPfStL`KBMKZs1 zZ!T3D`fsHuV_{$EGPYFM+(E!bQj^D0e|6pB>1*AmMUQ9d9X@5y<=T}YNT*3*nT$DE znDdHBTU%B752a^mCj^{x)S;wZ+tRy&*GqR#sgJuJ(2sjSq|K($9} znn#kkjj5!=Y%ePV00MA2T$j$F-nBd0@Tnfk{6Que6m+c+sk;gjrg!^K2_~X$41d$H~YX{<| zr9NVtN^n<%kVydgeaRW)fI&y5de=_4;z*(Y08mh?wDN*5ugY^kYGCJ(k1)OK+hhv|Sn6cI_(1wsC84|NTyq9523eYt>Ezmx6$V9Xe1<+oU0=pH(fFD zYPxKm>Sedvrh#17k8EyMXjR&sT9r#*lJx>5HN_$ysyLq zy(_J2x-HJY?^bQJKF&OEdeB{L0kpklYGT@AC9l`9EJ!a+Id-FQ*< zQ)p_BbvkLQRgTQ+4ryQfGR>tjr)b8R28dag8PMdlwDZb#cK-ldZpkYkp&JT4vP}0o zqy7$dA9}HSMun!Gs`kYiO*%vMJBsLHeL_1DP*SK(c`{yUsI54ayr&dN2vQK7`tUbS z@$^>DuzO^*^i#rrzMD5vdx#b2u1&G5T}`CY%=%NUmdt8>GARYa=em`GTrPmM1H2zf z`D?+O{X-L)ZgPY;%6TEu+xo!on%P%7SBHz`w zUB*Z}g<#;1=l1GM?Yi}kN;Mi(w6vJ(NjP;In_fTi=a0DZKRpr`Lm@P|?KvH&jIS$C zn9xzemXWnM9~ns}0|4~9bq)&bOC|Mh-KNVV%7Ed-Q5{={;1se8`p8>x|PQt>#RKZK3i>UzC6lr2s+R_c<6i zIpc%(u)P4%4NTVw)=jJ0&c630S!yb4lVMG5ntOD19C(J`C6$+wRH8r_B#&>;SA6jE z?K=MLXGx@1A>SIErPHc`3x3jVsS1xlN@W#*j0 zcfs2WIv7mNO1r4l3T19xdV9`EVt3nO#-V9aGU= zb=7Sjti39mTz$&3SB2jan4tj-B~3_)O{cRZ)H>t7V|yKx(~YMK$R}vNOj`O=8aiI2 zRiZo)khZ>@x#cSyr+DF5_Rr5;E+)BEmhuql7F!5fgKBF#5BC64agR^WS&KrUO=0$< z)SGTtbt-KuORGxIbLnDPj*J&?*wt2_ZGyssE+#`vr0}qmfUx|IbHZ`y$tT}Do`wxm zq(44emH4Rh8Y6p%X(27gLF6QVzA|~^t;e=XMK)D(h(~4SyU>&PDkO@k#oFsFR(G}b$iJx`4 z{{Y+zy~5Ee3GH#W?dnCdJvIaKC~@RNfXHd3%5jx%ee=rr&nm(|13gZ?vUtI3R)}|_ zrdq*F)XilYISt4Z>#m1(UKIoP$lJ*i(ezb<3!wrkRH^5Y|>w2peP!p}ot>R8#=?H1E1?Sfc6u zjYqw_Sg6u3IFxu%s_sanv|Vy)7(!lB%GyfGi-BbBN=|c-4;^zxrBh=}ols1_HbR?H zQk5x3ASht)IQjf_fqgACCY;h(WQ4iyM<)(#=lKA2fz?NM$)W(;ZKuf25gl(ycp6Sj?!9KN|Hw5g=6Fq?a?WuR`tJJw{@ERu2AW9n$@XJ zg1S3$SqhHZ(jI%vdB(k*U!-6kPrsz~7S!!3Mc3PfjYuADv-md&}`FM(%lbzMiH zQzhI|sWodlZB{dWRLRuHvgE{Rr=8@h^bnTG`3W3#&x^Po->oexH|;{zuiq$omsF7& z5PqN(8beYFTjeMRDG5#vemc-8nk#NqskHj6+U4Ht*(^69Yz#mIfCPis02($Bm<@E+3wlkJk?wya1O86~(SZMz zg@N%L6DvRiqKZfh{#QWipHb9r04*CGyYN*VdXC#JkV}D_3XjuE7({gIy14F45JVMS zAI31AjLa8V**PzB^In&hl~+{0dHe2TeM4hY^QV^9?w;Ph{(-@v;mN7# z?=!P=^9xuUe)Z?t`mc>m;@DfS?!(5oteWnq-*$~*GL-N+Oluj*7V-?!7ILm=rI2b@QVPA45V{7 zn>MT#POwW8Al<;KY|G)dQO72JDt6Nv!W9)Hapk>b>DxE?jc+h-ocw{D`&RITm30;T zck#6J47eXa_k$GFt-h0kZ>ttte| zv`dRqIs=jfS%_n)9g>lH?L_^8N*f1eu;JuRuHU5hA)U$dku{Z!?zvPhPhgDd_TYE_P70*xJ|C*L#~T{DD5J*8XSRfl6hBImuqixgR;L604} z4?#zkB9s>Er- zx%txWWmTfnE9^#9sP;7v-xo1NCiSvMXMkwpyDuf$eSdk}#-q`?h!4>1Z$!Ml$u2wc zJuW%g4#5nzZs=@~Z4FtTz1re>!-V6n*^#bu+ADvZV(9Pd*wFsYbI4ijOcs&eF+wLn zH~X5;?zaU7a3NE`C?H;WYk3-k>5x4GVzMc{PE16Z&iKYNAoZA5J-uMNxyvIo2=qd# zPA^X)m$!}&_M&jPR7hZ@8?hLA7)JU@JRhk0NWSDW1Jin{)um4fSndxeWtbTse#(&c?_zAfU+D9t!JZ*~b%^_NzTUqNX14d-mtLblvg1 zB5%F{C@{Lq1de$N=kC1M`3%i*P@8zQs+02!X!@3Ln9L#H&^%S$n?7)!oBWPNXB7Xv zKBMa@fs?#XUW(GH5&s5Rd?Gz!~jHujQCK(%=3-*pUzh zNjr@Qb%VR9n4+aG14Xam7e0+0e+?~W>DXIaUhi@en8g-K$*~(~_I*n#x*s6zCt*Gs z%KCIzjL(4AWBoG_^|*rUOS&9J7{O+(JPl#?>N*3sf_a_4D}D33?GI{+EAwjjq^)K; z*>st?%_sT!gV)iTm4{Wc9eiX5qIeg4;X+sVi;fG^vVM1@Hk9o5ls5+#ZF3$A?c4A^ z3enb0j^>WmtjEl5Bi1^MB;!WY(%pyFcx5u-ZX`AoxC#P$}CL95@AdFxs zm)yy$rG@I&5+~IWo;f`0)#92(DJ>0ge&f><$_lozEX`Bg7ftHUy3gtj{-bi(Pk5Ao z*921-4=@3&b_VFOdkfi>J|X@+N%+iv;#DlRZag>m3nZ6%bQ{IvygzOO zdvj1C(_1of6)h*ii!^bncePo*gDVuj0ig?H38EAJ8oC){L1HiYLh8_ey`!^iKZJ94 ziO;8%15sQU`o>S=8ZuZ@#oi#3h&LO1ieNEPwVYMhMef00x|L4vM7wsiVHUpxuMlSY zKGRR0^j>^Tiol-%u{-B;9!;vhzvp6H(xyAtTg{p3QN%5X4v^$th?fWL;5u2AAIpWS-2I8Q4yu3%D} zy{)XD|7t$2ej(KFABlV3nXNJ;t(Tsq91VY@qXb$;byGL2byp{tEJgA~V@^46vW>)Z zyEx05bR2x!7t)|m(kx%1w;pUfTQjV6h`FV14ml9!OJWnX$Z}>VhOVkm&ZS^9nXm(7 z_A}rRITajrX=ZlYN$KO3u;Sonq>c1Tg}>|NW- z?{aI%dT)3ioB^9L8;^4P!$j5wCZn&{ayi`yI{D`e=(3c~zK&dmB|Oi(#IGiPqv3bI z0Z%b>ZR{{|xj6QGn@%@5Z1^a{8L!C%h8qs5uty0!{AZ>7d_O;X=Vku8!9Fb&apKd*v<8 z{{nfxirv3|b+Gspd!=7F4;X4Wjnf(d3&f| z-b}FF9MVjgMi7k67GQ_BNodSU;!&P{DUQL*JjAl8*~?MxA-QTb_)b@*cxqt-Xdm9^ zcio9-5KEQ|bI%hj2=()V9Dd07)pNP@3D!= z*|(~w+cdtk=qNhGAlEW<&g|=4|4y;HIfNNk#B=YssQ3LDz`nR_*wVT$oU7)>5tw}7 zA@y8GwW}DqsX}2mz^5e?F-9_m5*2X`?Dw?jCTg6&yS5h2mqkSUME`Kmo)_Zs8Fc^g zT941T>0vRfys4A+q+|7v(q4EIvNa{swLGl2FA z29cZ5UH*SaTb-Dq&iccG=B-s^-koB=aOdDW5d{jM{s%qp2q1DQY82g2yRC;oaQJqJkwQ*x zkSz(Qrr>$$a_`2s1=kovL4u5>kEEnMkaGr=`D}YDL2;I_uHh0q4njq}Gt_i{FaJmBKI$?9V)s4MIL6Py_t$u`gLwZ|5hQLv}|W zpJ*bl_n|J%G>ow#LvPNKHI@9lt~K_mrTJ@l0FMhlYkGtKdQx{>4Z2H+BIt8`t0j~$ z(A6s9G!!DRXCNw>N=yQ`Gm4zQ;xQcCVmP*J5f8vduBDMVAh_Msc3i_5xxP#K z2gQLc>p}6&$@=H$%zJ;PD_l7in;Bc9y6NtmSJ&#?7GnzGo2 zFttGus<*60cS&|gA;)x1%e6pc=uBkL8`AF{_2#ErwbHV(rREFn>Gq6IMaxw_NnX6f zD3l*Wjni8%0u)a)rbIoh$BZOVyA_CyQaMy6J;Qb;9}mO^tj>f~(@XuTIv8PkSSly; zq|bdAo3^w-x*ntri$@deYUfN26$oQnvv_D)Ckxs3J<=L??dNG+LSnn}Z{?hzD5bJC zQ_a}(#*bg`)4tt1!mAZS@w^S4%p_O)Wk2+YD|Nu20^lXi&A_uLVMP8KK?JfcYu>Zf`9FH9_Gf z?#83U`*7D2p52^iu*w*-Xq1gCUDJKSCFvG5ARGqaAE#X**j9%QXlc$+S6~pfGgeCs z3C7Sj1q(R!uiFrQKhZEB z^2*obB}$NFdQGj?Y(D$@=*tQppqa;_K};DhBgVLz2mHO>gJ2Dba1_UR#gK)oeiaIn zqTZPKU28vLnQ5MV%O8(5mfWFLye`4~g&#i-{^Leryy{2zdj{Nt&S#pF-oN!;W+h(q z{km|^!OtilL>QXIsg2q3LPZO*P<`u>mo{u&4F`|2OG{KjKv$6Po}*0U3=WH%F6U{y zXkqVk$&jD5nh!J7VjFL~-3LT%p8<4wq-J~?NdnRXVP{KrpRy{pNzA^X5qPMHr=opV9bB}NBgbCDN!2ZI&i+Y4mDI=*$O=I zTtx0g+?_cv(RA;T;JdLVEHo-8gEh|P=~C4wTzv|hJ|@n_?oh;$>;Xw% z!^;0!w+d9GRMUW~LSso>#> z6b-`$C{yG=lVrsZY&Ak>%5=}*a^o~BZKB32ZXId+xp(gBI{*+>LUl~Ek%}Kri?*~t zk&+|?9-T@NojR~Dc}L2*HLcc7!*?37kb3g}~dSrr@~C*#(nz4>l;ZQx|qix(!jU(gHQ-=}W&^GZwN z19oBwrC+LXAin_3rB#Drs}V|2I6dj|8~Z)%BQA`<(*AK*$U~zZiN;D=JfvXeQntCVG3T35&29<@XC0kX^F4k zMG5zlsK!a7fQIv#Yv5*pHGCXGXvCSNwFW#T8{p0W)<`3wX4SG-$F$aL(8tS<~2F!Xou&b|Zbfuwxu5eeYp3%RL$ke!KD2rOGoFl&!EFYdNsN zh2Hm$#u&QKHJwiw*#P;-LlpGWd9X$gC zk@np)dBF=+CV?8<`_k95Oa`m8yI1isH=Hx)4yo}`{xwIq*>};10_7W=^FsYY4e~s^ z5UpJCDNQpw0B_nJqrVE4S-{HN*D9J#vf?-{m25h{NL;P!Bou zG*3&IEJ-z}3Do2jBpxLkDMFej^qj~<`eC;tdR8}PawhJ%f3($>@kCClk`I%dl$jD= zM7IDygu!+?@m23i<3MakTB?>j=|Tl+L{KGw-Ik=fi*OUq|60W}B-y_j ztq(!JFo)ne`^RDsFtgMKdvu&#LQ=8f#sgEd<`h_I}G`Cs0sRDUkWY_-hJhK;Zomy50)b zIfFT4YD`Zqop+>6tD~P<9qHs?I(zwSvyl_kkw!tjGHXktlRRQ~Vziw^8WmJ7rG^zl zxry*?ffKz*7b4y6m$Y~%xsLHj%X_lovmPn9mb@Q&$>j})t0KG04{dM6T+LcFhs>d& zXwM>gvMMQ}49aR6fkR(J7>CFp>^mPRnu?aCEgKf+a%EW>b31T5$ZMEG1`+H^DWTYz z&XCtDKK1q_&*M!*J(sx?-(;`;SH*%1t_6i+|81syF=V zWZAT=-FN2{LBmU_+U~XwZMZE4X=xbN-yHSQNG7)5aRTeJZmUdOKV7PuYeH`Gm) zjbDRZM7A^*pnF@FlU!(Ss3&n#PPP>o7DqC;GPa5o6j&4MqV*Sm(`~}QKtL>vuWCz! zgMjZnHcO@OlkB@YmwY~0n+C4w*7u)eidI!v{wPdV2pgnd+4_8H2$83C2i>R&BWm$-Ro zT-UyLDPvNRb&uVaHjZbnBzh@&8noNAEcS6`r?1y8cjnLA?PY{4x2Nl-^0tQZDvRS^ zj7v*D2>AO7-<;5{SBrE-1~~n`Gqq!-9I0y*J0iN1WOg;5hfv0DsJc#FfdW*|xhp5L z(wD*8vHT${E{JcFMr3@iIP(CZ6-a+!?g zFd>=ACA}QLYU*mDU=1%Pe{xpteAHI#*;isgAwFlRsd_GWgQqmE5q=MJ&|A3R(pX5b z|4hlUx~@e$GI2)mIebegd7wRNb~^(?3;sZWq>#-@HmzEzEZfKTjoyPjt+e;0JmSgz zt~2|4Y`I1Q0k2|*1|feCX8{RC@+ZAp-sx#-I|3N>l4L5fo9z8}=Y1G^Zrf8d~gaql);wKm+ll6~9v-32b(JhU> zueg^%b7Ur!73Ti*+Q=195lIgSM{glc+?{-9DALnp5J4QLk}?{LJ@Fu3?yGoPDKv#` zCNg(ah-ZlvoU6&pMXZBBlbJ>5N$x|80e*K5A(ma>+7FOABp>c_Z5)l=!25fxFYfe+7*oRg`F5d8C6M*MNf2-aiy19=M&lYW zrD5nkX4=o?$>LHU*Xk`CFq0vuQO~oOpEV%v8~P21lEbBO+mIH!XPYnTSBB51WJ;v4 zSr&SeKcJByOWymz0=I(lp8^ES$s!#WRIGVQ3r@xF%AL>!S=kLvJJl2L4 zbzW>&q5GPd>k@BUkT5S!>mOYh*(B0rL_UoNwDkX0muK+0FUQJM40Uo=@yhFF1=V`t!-RvJ8^4OV}9~z z=Hp_6bM(jZkDnAdh1{d>dPc+L(f6soV~3i|r+s{yg?3M)i?ppL<({~c(D?ZBP`Q|P zwVz8Xb3ex3n2J6hV!{l&c}R4a2R{;7lbQzO#^!dvP(5d)CXsWAG6TD);Ydj6Ird7Z zX%sND_4#1>?%u4g#O&VU7#+x4U_A6#v;HAQNc z91`V$U5Q_y5hx<0F4)^DA=`CWj*^nohXuOd^YVk^Q~}Dlsskx|UlP7Gf1%-Nn8kQD zk6W{-7cI)EJvxNl5wRhIJ$W(h+&Wd(lJUfn34mhcV2hMng zS)s+ZPTZQhdy|)4l><{cT%W6>Yj}3G1!oDb@V-$MBmcD9h{fOL++`}dOy6xIp&=O) znvB8Z9~HBV^{RNdPc@n<=r#3QI!?suG3pL~R8Q98HKNVO6e^B`hdX38795TpU!-m` z4R-5&`Z>RPJ#3}uMUlhOh3p4oJ|Qx3(jx}t$j4l?~|CLhkT9EWBm@i1Q;Pbw=r&P}30p(w` zC*M6S-1+0Pt)WxvFoHu~tG2gpQBjlKc^ zzuJkZ>};GRb0Q8sPU|{^DI+K*QUS5jW<2<9Nm_Rrb{8^G=5%i+ehIjm$Ts(y_o6(p ziC^Nu`%e-8MJ+(Q<-*LY3R@2>`!^qF8of3jDO!USY6tvbzJO543!9Lu-tuhvTA5#= zsy50vaAi7`v6yLDG~>6)me9t@cueZ?AdA7n~!fp5m^+X^Sho0 z>)_eSd%%9QwooB8V$~-sIC&F(If;F0*uO7(O+@f8EyK-n(5hcPa{TJxaB`YCbdq)= z(gMF5S13HLp@RKvZ}Z*jW5zId!wp%)h(c>N(l{)%nA{=}4BzQO8 zt~ScFw2Xky!z)rJ4Bv6d!u%MCCw<=q}HYQ+YD$X*xBJ zvAYmNVf!VNs#r?$B+kqlCxCA78ZO>@QY-5S65SsvhHjrwn7gOp0cICS%{ZB{?JnXj zwc^LyZi(${8?U(^vgCV<2u;+`RQSr!{B&>9N3=O4P&H2~?PZ#TtTI1kJ?<~yJ90->eppu0^LQxm`!-XyJ6MxDy`dnuK97a0A zr6p^~)eO8wx*}*71gzAAlT1t$4U@mzwD+ESIMT4r2|5)apQ9>v3Eg$QR~q;{7cA7r6?11oE-$`G*dTKjg8?KA{p>e={`*JwmXb zW>LQP>+NK|e=F#Hy6m*U8Dkwvi&q;B9II3USt&oAv|o{A-z>O%M>nN<&Mmd)!|#J) z=uOA_qy*!J+zgzbu5vfWh@8XQLEbyY>$PUpKx8ReDDQaBTsa|Y?z|hXSoHN>8q$+r z)=fLJ(&>K$9VE9BGz7yjg?M5yv^2PgSNW~xQk%i5!J8nBolu7khWi{b=|#`UbE3{} zkUU_maY>QF?x$A$gQte?XEx62$Cn+|kt6IExK8qUbI8|i=O(+Y@TfWT6@NCENJd#2 z!c80Y+DYnD<97{3Y|20LX5l-RF6nUZ%V2K`jKqFW%8&|tt^na#1$UDzZ~<(Nq>dvB zS549Td9=H5(!m?cahorf?>mPHfiCe+L!cz1`r83F{BzQG$y~OVPLxtvzyjB*0me`NQ<73 zniEiKg5&(yITf015 zTTaY@HyQ7*6N?$Wh==uxqqr5*CxfBN({B6DKjYU_#Whap05caNpVL%zd1DN-%y{kpxK%HOM<*E-~-*Tq#4kz%^M617S52?~SZ-ryl zEVhDvD0NA6{z3k+2f=Dz^dZ7~jreq(CztuNZHBexhQ18Hxz9pBt`4AHfQEg;4`x0G z=QKaC?RiMQL@04cCO|b?q0W$d!0tdlg7b2ArWajmod3)}Jf1dXGSAB%@(#PLjnX`R zuDJ)A_;#X?#G?2%I?pSmsC0K+oG3Z(FDETiX0l{DpQPY0JgI!xwE%#$!2o{-Xv7!6 zb-*0jeH;*1L%xFfSIIvuz1|- zA+>;Mg_1^h=`@ZpA#?DxU(Dt+2An3H zu*I$8!Ka?fM%k`$lQ)zrm94M71^l|Ghhl>6Q8Nu4(_6JuT^*cL+t`6)ewy{67hbAS OQ;J1haRB;k{=We6t5