diff --git a/figs/centralized_control.pdf b/figs/centralized_control.pdf index 44e923d..6ce5d4e 100644 Binary files a/figs/centralized_control.pdf and b/figs/centralized_control.pdf differ diff --git a/figs/centralized_control.png b/figs/centralized_control.png index b9947b3..cdcccec 100644 Binary files a/figs/centralized_control.png and b/figs/centralized_control.png differ diff --git a/figs/plant_decouple_jacobian.pdf b/figs/plant_decouple_jacobian.pdf new file mode 100644 index 0000000..b53d8d4 Binary files /dev/null and b/figs/plant_decouple_jacobian.pdf differ diff --git a/figs/plant_decouple_jacobian.png b/figs/plant_decouple_jacobian.png index dc7e10e..37a6c17 100644 Binary files a/figs/plant_decouple_jacobian.png and b/figs/plant_decouple_jacobian.png differ diff --git a/figs/plant_decouple_svd.pdf b/figs/plant_decouple_svd.pdf index 5017d94..07382d3 100644 Binary files a/figs/plant_decouple_svd.pdf and b/figs/plant_decouple_svd.pdf differ diff --git a/figs/plant_decouple_svd.png b/figs/plant_decouple_svd.png index 506bce4..59f40dd 100644 Binary files a/figs/plant_decouple_svd.png and b/figs/plant_decouple_svd.png differ diff --git a/figs/simscape_model_decoupled_plant_jacobian.eps b/figs/simscape_model_decoupled_plant_jacobian.eps index 7109d5e..5ef2280 100644 Binary files a/figs/simscape_model_decoupled_plant_jacobian.eps and b/figs/simscape_model_decoupled_plant_jacobian.eps differ diff --git a/figs/simscape_model_decoupled_plant_jacobian.pdf b/figs/simscape_model_decoupled_plant_jacobian.pdf index f2021ce..ad607bf 100644 --- a/figs/simscape_model_decoupled_plant_jacobian.pdf +++ b/figs/simscape_model_decoupled_plant_jacobian.pdf @@ -3,7 +3,7 @@ 1 0 obj << /Producer (Apache FOP Version 2.4.0-SNAPSHOT: PDFDocumentGraphics2D) -/CreationDate (D:20201109105436+01'00') +/CreationDate (D:20201109142208+01'00') >> endobj 2 0 obj @@ -2044,7 +2044,7 @@ trailer << /Root 197 0 R /Info 1 0 R - /ID [ ] + /ID [<49BA97C462E2367EA0B6097C7D052D5B> <49BA97C462E2367EA0B6097C7D052D5B>] /Size 198 >> startxref diff --git a/figs/simscape_model_decoupled_plant_svd.eps b/figs/simscape_model_decoupled_plant_svd.eps index 5d7ea29..5e84a43 100644 Binary files a/figs/simscape_model_decoupled_plant_svd.eps and b/figs/simscape_model_decoupled_plant_svd.eps differ diff --git a/figs/simscape_model_decoupled_plant_svd.pdf b/figs/simscape_model_decoupled_plant_svd.pdf index a1916c9..17207fb 100644 Binary files a/figs/simscape_model_decoupled_plant_svd.pdf and b/figs/simscape_model_decoupled_plant_svd.pdf differ diff --git a/figs/simscape_model_gershgorin_radii.eps b/figs/simscape_model_gershgorin_radii.eps index b167d78..cb124dd 100644 Binary files a/figs/simscape_model_gershgorin_radii.eps and b/figs/simscape_model_gershgorin_radii.eps differ diff --git a/figs/simscape_model_gershgorin_radii.pdf b/figs/simscape_model_gershgorin_radii.pdf index 9fdf46a..f1cde5a 100644 Binary files a/figs/simscape_model_gershgorin_radii.pdf and b/figs/simscape_model_gershgorin_radii.pdf differ diff --git a/figs/stewart_comp_loop_gain_diagonal.pdf b/figs/stewart_comp_loop_gain_diagonal.pdf index a7a42c0..9dfbc85 100644 Binary files a/figs/stewart_comp_loop_gain_diagonal.pdf and b/figs/stewart_comp_loop_gain_diagonal.pdf differ diff --git a/figs/stewart_platform_coupled_plant.eps b/figs/stewart_platform_coupled_plant.eps index 49f7002..26ef196 100644 Binary files a/figs/stewart_platform_coupled_plant.eps and b/figs/stewart_platform_coupled_plant.eps differ diff --git a/figs/stewart_platform_coupled_plant.pdf b/figs/stewart_platform_coupled_plant.pdf index a015f0d..f6497da 100644 Binary files a/figs/stewart_platform_coupled_plant.pdf and b/figs/stewart_platform_coupled_plant.pdf differ diff --git a/figs/stewart_platform_coupled_plant.png b/figs/stewart_platform_coupled_plant.png index b3625ff..62003aa 100644 Binary files a/figs/stewart_platform_coupled_plant.png and b/figs/stewart_platform_coupled_plant.png differ diff --git a/figs/stewart_platform_plant.pdf b/figs/stewart_platform_plant.pdf new file mode 100644 index 0000000..07ca475 Binary files /dev/null and b/figs/stewart_platform_plant.pdf differ diff --git a/figs/stewart_platform_plant.png b/figs/stewart_platform_plant.png index a4bb333..26da5ce 100644 Binary files a/figs/stewart_platform_plant.png and b/figs/stewart_platform_plant.png differ diff --git a/figs/stewart_platform_simscape_cl_transmissibility.eps b/figs/stewart_platform_simscape_cl_transmissibility.eps index 7573356..25a666a 100644 Binary files a/figs/stewart_platform_simscape_cl_transmissibility.eps and b/figs/stewart_platform_simscape_cl_transmissibility.eps differ diff --git a/figs/stewart_platform_simscape_cl_transmissibility.pdf b/figs/stewart_platform_simscape_cl_transmissibility.pdf index af010ba..fde741c 100644 --- a/figs/stewart_platform_simscape_cl_transmissibility.pdf +++ b/figs/stewart_platform_simscape_cl_transmissibility.pdf @@ -3,7 +3,7 @@ 1 0 obj << /Producer (Apache FOP Version 2.4.0-SNAPSHOT: PDFDocumentGraphics2D) -/CreationDate (D:20201109105244+01'00') +/CreationDate (D:20201109142501+01'00') >> endobj 2 0 obj @@ -2111,27 +2111,32 @@ U TE!D i Wx@874 `,C!Hb4̀MbiW ]˒f(hZ4C$=U4q\[ ;brH* IΔ 귢}$lE3KЗwangD3<_}| hv{5n%}&A h}n@ M,4C KFIbh-UmaE3eY_4z-3jP,څӤr4Cm[ %Ͱw%x4C!u=q9Ҍ ʐ!P56Lf48ǷJCkc{H@_"=~(I3֤6\1-ELy6qAbh'1`J#-v9ӊfow8S6L i=A)I3T3w%G+iFuIPOHf%Kˉfs%fح;{LhsK]Z4 בZ4& :S{D3h 'qPf"uZgg1To=Dݸp;K̰7N3P`sNУi\Uh=3CjzYgf"PL{fm=qӓoȺ-cƕ7Z{fKg>YbgFw2Un3 3h&PZW56fcuΨfXc1/QW¢fGYBiԬq%}=jpcM~3YGDLf,Fͺy%SQ3dC7xf^R {P3晞lM3;qSӦriF_3Șf^;蕛) 1M2Ɇxn4CJ+V2(ݕNL3iFi8gi *o_4t5 14%OmQ&)zN1iF٢?3mQJ謷s}2i4M8Kטf9[-M3b$S4CZBg4#k>R:U幑oM3jF5څҦNI)7zF_4Oiv 8W^iM3$c!A{aj o! =ف> iӌ;+UI'6Ic WQ3wpDž5IX02IJ G5C["Imu3Κf)*ߦIL 3Ͱuо֪U֌VccͰʚaʚՃ`R̳fHS5{V֬Tgƕmȅ5+wʚpGą5C ~ZY9qeͰg+kMngdof+kVy[/pgE5CYҟfC$dQ1"Ob5 CR̡f`AxGh;].X6@f7{5Cx5KѮA(/[V:,"5Kh+GX-gQ30qo!Xwi 3fL3Wnf24÷3W,bo=jE$fq4C2? Y)c ir'ژfh)bV,`C`1͎Lz5ͰbGv1io g4;ht,cy׹'̀Ƚb=i =\nE1ǵf=(]DDJx xPN hs^ZA9Sb4˳CֵfGB 5u> k٣fwԵf)!a<9fDei ]8I223fp3dKI゛}7O(v 389d2vzͰ[NjaJ]od,6bခ ͝KGl,V۴jmے79fcyP(N1Ǜ!b9wY"τ1{ Ef m9cwy3oPPyq{*=[ XSfH0II>˛%t$6$I5'=o>s |f( j7KBvh7f vͰD^$N_p +Q_M3zTDYk_4`@[cZhiF [5CAH\dQ3dK"GHnW56fcuΨfXc1/QW¢fGYBiԬq%}=jpcM~3YGDLf,Fͺy%SQ3dC7xf^R {P3晞lM3;qSӦriF_3Șf^;蕛) 1M2Ɇxn4CJ+V2(ݕNL3iFi8gi *o_4t5 14%OmQ&)zN1iF٢?3mQJ謷s}2i4M8Kטf9[-M3b$S4CZBg4#k>R:U幑oM3jF5څҦNI)7zF_4Oiv 8W^iM3$c!A{aj o! =ف> iӌ;+UI'6Ic WQ3wpDž5IX02IJ G5C["Imu3Κf)*ߦIL 3Ͱuо֪U֌VccͰʚaʚՃ`R̳fHS5{V֬Tgƕmȅ5+wʚ\6zNʚF k=k._Y3lUvK˛%t$6$I5'=o>s |f( j7KBvh7f vͰD^$N_p @3YB O86 [m*s+!VXIzQ6cF6sf残 m$䤀6O _h2n;,΄kbAEظv*LTʻf(<ßvq"sG.7<3O'k@\ԺeRN=kڽ*YR̩f(,/1)3Y@Mu2asE5R/UՌ;9,k/e1f8W?Dk*5;нWnu5ft5.)\P3J{R5; jvd)TV OnQ3dIo5C6T9 kP3h[{y,R WP347X6:tj+1E VipiU3NSSBJ5Ax/Y cq 32ZfLLf8qnOf8IԪf0k022e),bɔjcQy[̪f/UG˫ft"L]$T3$QͰޖNWZFR/g\Ofsp˪f8(6rRp 6jq.F5$e(hY3PPɓ),R#Sqp5ۘF5C9̽wLf3o5F5ݓ>8 ١+'\P3,PEb 5CW~y ؃ L|Z /~\5< vAͰc0Q1 j";Y o?C#̘B(-gao7.Sj"ev74A*Z;{L3IQkgM3 P(4c -Rt7Y@ GinN7͐q%L3NUN'iei ocG/5CnݏSvN[yy,P %T34Y|tuyՌz;<L!뚡+.ϚanLfr5C(IkBetӻV5YmҴŗePT²fȽy˖5w-eiÚ$;9 EVI),ޕǩf14k§7q״eP)^iÚRZ h}6Ō) nxCֺf7KHf:WȲfh90Gy̪fHy.>'wjjhnF5 U@iS͐R$$) )1ɨf$T3tϔj T*j??Q%ϦV5 :Aɩf蝆m_Ѵjt!vj~ZT3hrR@L7U~U})1!6SY.]ij)qFa9¶-;5jFNSbX ϐBL\5X/=ҢfOS )bP3>%P3qmNLfq7+Ԍh4DpBH5V8Ռ.~p!yaRYtnq7jy3 V5{ejhJ5ww(fT3|+0cJ5QFvHWݪf# -Q0eϙxT@)-.j'G}jhJ5ÜP=%T3չֺS@Y 3G> U+N5 GڱfY -Lsy sl_g<ʭحi8fL3,eJKLfTZ,9c1 C'L3,ȨYt˔iv02eaq$!Ekf T,Y)1ExF4.t+iExFߩ)ӌϙfxX]oM3<.SҰ-jFc'N -ەFX k]>'=I[5Z 3P3:H5ã1GgP35`Q3l锛[ eM3kr1P3jY?o~5r5ç,vuYz,C.@i`6ݿgP3Ep}bQg;Ӭ_-ou*f))y3Yon4Yf -nCN$&% c'}KVnH3ҤY&%P]^wJh4C 4(fHN]ffh+ϖifDc4CS{ƑfHC$joL3d@MԚfNh)>2eaGYԬ Ӭ ;OFȚfh/3+iF $1e~xl X 7ɝ= -dmiI3S+ !dȀfxa@3TWqKLfI o^ifHRAfR#*[3C3\< +fwvD^ NAv%fH~T ǐzg̨\03|R+i JU<@m7 n0;1% =f(J5Zٟ]^N[fqff,34^C+bei _t-xO|2kC!fh)3\y ʌڵ.و!CҔ,eFM=WMBPfH)xn`(V4Yf82Cr!Xf6 }4se&pc;`fA3L0Y&r(nb93\Hs wp⯑ ÙDӜah '˙5~/{83׷ x9άQ"޸3pg+g\%W|3?f򳯚.n:8!jfhIh43hf#pw`ffT}[n m03 q3C3@`ك'+:j1ғ*N{03'#+e/T7Jc!skeik=Ubfi,xb3× Pqm fw8犙untkk;^K[fTS,5-4cfiF":6]Ҹ]̺ne434/"׺4(7cg\->M:2*]ќYG?<hό23 (Ù!*ϢaTUno439d43@=uDأQJx04Z%="8hf'W0]t9 0i9 -$Ԛ&tNF3z-DfA{034C ,fvyJ10`,13>Nz ow2C -XF2Cuђ5dbc9cdm(,3nɌ9#q(di 4[2Cr*H@@J2C!36!{Õd1$]J/Y !cE ݐy?w,dFhh - dFhJfԊ7aI5dt֐Y$3Qړi 3P/ QZSY^N4bC?Aiuc,3J_ìn(}p~ݖb8>qԖbNj2*f̐6&ݘ%2q7!f9e13$!By!pJLaf2%vcfY$̐-S8k qƔn͌z Q!!ii<3dʜPi<3ʊi3bH=M"Op!V\3V3|9.Q\e)ό尽},=3m<3iA1!Q.:'XfJWq qɚ3tkN4g -{Y3C>ewY f͙!V;5g+IМYCҤKhrf$Hsn͙!6bKe93J53ʿ)ݜb#Ȧ7;c,g<:L=23CdgFyK絬@3+S)@fQ>oc˴߻IHmfHC!r>7bSMV5TDžn ;q k¿`3dXJ6|>H߻m3K\7|.ObZ7C -Ey3E4I|oҼYIzy(}!OZ7\? "Sf2`t3\I -/!v<͐ЇZibt3Đx}T^fk^حQ"`nC_Sfa3n>4\Jht30hu3p(KE<[7,Arnz"=H͐ -t3Xh8n*F3b)dQ{i(Pf4oL@lNKffM8BH3Dyx3egHfHDW2Eś!b"'a 5o,Anrf"jތތQFM5oFV^EB7oF̼Û!5sQy3db DԼbo 1pBXJ돺fuqF"roS$IX$nFIGe"N64nnZqH͟0p32%ڇ.!0q3W HG(_@$!nXag7nQuY S5nCsԸbٷ2V2OW=r[ 1jí nF,oyָ{q363Ɠj ǧfi96bR fdmGZ7L1I:(ͭth݌R݌ݺb҄>UM:v7b7C97C lDn P?@I( ,,4nFiOc4Qd{i܌ Q{Z'&8,O6C.$*x"ݻ}h -xS@m{wjH=%f95.s -*)ls*Xp]7Z LfȎL7r#Iͨ=xoh܌گ0iWq}Ҹ*Kq$7xrpcǖy fnzY ]ݬQDĩfnD\N7Cdf=OF7+$ט͐Œ[\lS>{t3dN$ot3ʜZ G%fK>V7C*oI#p9 }V z9ܬtfHEQ+n;<]/?&ƳΏm;Xg Դ6=arem;??Af*ͦamJV$Y۬ҝ2JpGP9{fhU0TaCO}_{h3Ӷ2& yll3J!pG6Ý=:U<4n 7%p㟹tp[Af#}n?f<In?1R%{t3Ǝp?Gw6!HI-q9 $f>)5IlFQ4k!+ rnnkl34Rӻ.7l`m3dוǼ4@(q3g>"G7C\@k2rίu3$=SnFyU7Cۘ8٧`fcp$f93bB 7qahu3>n{8jnj&?ndH~͐cF<%k͢DNg|أN}Hpwg;˛!R 9hf7C(ҼiKanLfUV7AfksBZތzD!e᎛O}3f: fh}qݴn*?;~̳e'p[ތS8fhT_7#DG]i ':1exN;6t۶rynHnvғnFTrmu3hMf#ETcx3dsͨMR_.F oێk|y I2&7co[͛!Ef{I3,o-yI=5>ى#f])dafȨ;PfQ&ǔo.Hr3wbq,ܰwu*7C>t2٢d~}9ތܸän,QuZx3dKd23 96OT) Rm@(_6A>ޏ6m32c )MJmF֝Qem@|ڶR{m32qD{l3tBڝϦP6pI= >Kyfl3> ̪Z y<6C%7m쥌>J>ې7p3l~&ԐOތ*,:gFBaʖJԌ qvh3%3Gpm3nx3;1s٘S8qψ3sYF/?!7=qm9Vl ;,cg8+! jg|xmDZ78#!b q73JgZjYז8jY 7\Mzf8w;f +Rt7Y@ GinN7͐q%L3NUN'iei ocG/5CnݏSvN[yy,P %T34Y|tuyՌz;<L!뚡+.ϚanLfr5C(IkBetӻV5YmҴŗePT²fȽy˖5w-eiÚ$;9 EVI),ޕǩf14k§7q״eP)^iÚRZ h}6Ō) nxCֺf7KHf:WȲfh90Gy̪fHy.>'wjjhnF5 U@iS͐R$$) )1ɨf$T3tϔj T*j??Q%ϦV5 :Aɩf蝆m_Ѵjt!vj~ZT3hrR@L7U~U})1!6SY.]ij)qFa9¶-;5jFNSbX ϐBL\5X/=ҢfOS )bP3>%P3qmNLfq7+Ԍh4DpB nlQ3`S7B&!Jwөf7`U3\hWT3|xbF5wob3T3mdỎt5ޭj9" sXigJ5 $,Ҫfqb.a~_ݧT3̹ SbJ5\l;,< /:I0}àXՌnQT{j4W0Funj܊ݚfOc42QĔiHU|5/30>1p0qRh4ÂNLfXȍow -S8NRYf!ͰLŒ5S:ڍi4jI3JˑfXg4ڙ2ha? i4>82( [ݢf4{⴨]jEͰ֥s؃QP30c +5OzoP3<Oxt56-n6jQ3<£6N MfH;[ ܳEb +5Jg\u!o>pvm#twӠfܐe5ÞBR:r36ܤ8bکfjDo[Z k)*G+S6Yj ߐdߪf\ddQ3jS 5V>NEͰ+]+4úF+ 5I o᫖:WiP.gi~Q3|HAR/hg[Q72]ff{5^ׇ.53AAYkiqrqۿ7ce&Hl,i64ZJbX 2xҷj4A,MezZ m~H3Kb49e,il HLfhF4iϿH34li8D4CfdMi섆.S6pE +,Л1 +Һdi8Ϛf0n@SЎ%pxC@&_4COȓu˓fLE-iu RYEl; ]ÓLKLf@)U&͐/7//! +L+5F4ʹ3Uqy CƩ) XZdH3j1 > ؒf^!}eHNd \4Cp{L3ǣC; Y7.1eQxc,S ) T>֧]bjr|))ՌՌ5x$ЌjF#1a뗦⩡=5jIZX ,WQbjzZ֬R{UhX3$?ޱ5]]yvf3B5 >f,5/IαYqvݶYҺfH$=0ڥG<㚡V OV5Bf(k7 YլҖ!6*(`i9͘ft$Ӭzn-{LJEL@\4bG/AiVѾg(InOÃ!("ahVoE3d 3h(ʚf핑J;m454iV >cᵑVjU:S"4,zHJw^*֤&-lcfF}炙ʨX\LcfhV jYp5މ)9O̐0ChlU̬r2G#73cZ-K[fvC.gm5V{3Y i685DFKc`PfԮ uaF d)3nj }<2CzNwC]255>ǹ6Rw{ 2XfpYc-343!w3Cf?0.f51贔gFY?w˙BEkcg M ]'27ՠ{,G#g8Yά{Ùܸ(_Hqf gKW̐Tuu؃!=)\)3| +.$Q K]f-N[ {0NfӘlk[03o=W̬vX _C]2pܥb Pnq{0N3fֱrfu.y h gyGA{83Bhi2hgQQ:)q@{fPi=I.!O긻j _맧:f|Rp|Ɣ͐Bh +4T"ˀfȈ/N֜Y{Xsؠ93P͒ݜp,K7rf%5{h B۬93^I҆"&]B3C$Ask ]/˙QЭQLICA6fиqe93a9DQB&<3J_8eqf^D(/O4=h[uMEj4D whs1ȞBͨGOhY:.<%vf%7܉øf_C=!'RAj,emQ>_䲸wyӺbxo(͛!g/iO{"uOד0͛E xԺ\PZ7\?9pO!JjVxY 3V~๬n>H!nxoZ7DD]n݌tKnb%J7C pu3diDRB!YG !nFY/r)ݺe +t3Ƨ׻,մnEbnl0nhAtl!Bu3T1(+HQ%(p,{NnFp]7Cuy3dbcu"_J7C(e%6kBR!Û!-8C7C Ҕ/* *nv:+q3v#j4؍Ej\0)1>tY 1EQb@:ߗ5nFz' p3"_ >q3ffuԞ +q3b3S;-n" nxbJ͐ˈF2fQ[nfp3b10}˓͐C\-1egUfe8>7#OcfH=$op'-Y% ({l3|6Ti6kU*:$!fQ|m;?1ݳ6C͐ w~ wCΏ͐1Y$ȋecQZdwm;?r%6n6HЩjQvf(m̥m?6Í[\mu31Hjt3}u͐:( أ5vn= 9@BnVOjyFfȟ 6I mL*&.g5zX YyXss[cލmpIgk!G7kT3 G7C)f G&~ p3TXu3eT{0at3$C[Vn3{n(Yk%Z wj;w`LCq~|f6y|v١>gc[?|t(=gc>>|x0/oAk}v0+k١n@=g@L3|;vqm><Ƿ`fGv?k|v0k١.>gv>m|v0[k&=mgc?͂l%"LPZ+{>] 2_ՃԵ>|l0 30ϼ`y<Z`YC^UFC=^QFC^MG3=^I3^E3=^Th~Kqh~;k=/ Xj4? Wj4?Wj4?NWz0?ꕱWj0?ѸVz4?Vj4?ѸNVz4?Vz0?ꕱUj0?g"߱Ouzi4Stze4CuzvRU/u҃T/uңT/mzTj4?ԉ-=>Xj4?Wj4?Wj4?~Wj4?Ѹ>Wz4?V`~+cq}X~ cP_WXL?W=c>V/zC^W gV lTW^OO+*/zTT/=23ܯKRG^~8>tv> >{vq>h>{v=h>{vq=h>zvzf0=;8v0=;z4>;ٸv4=;|ޝ|d|d|dUB`>yvA`>{vQAh>zv@h>{vQ@h>zvv0<;٨f0=;hz4>;(v4=;f4=;YU3l4;l;l3Ϟl$h>$iNh>{vCh>{v1Ch>{vBh>{v1Bh>zv z0=;YM3gNVČg'ٳcb}|d5>n'NVn5~d5=̣GNV>}d5> ?Nci`,¨K2 cL~?"H)T/E_O?x(KFggXc_1_q9B~w{ "i "m @n,j*e4گ2ۗy\s o~7om B%>?f]zzKV#Pc{1 Xy<><0XoAC\R_;2\Ϙ)V2Tߨގs,cv|˾qLA}XXRQ;aU_eW%WM?A)Q4LД Hp-3sU{ny}*WeE\gc)I%1(wc?Xj>*>evT9` N-|}b0+ܘRp0r(c'X~O9^ly8A0\b_1{Aiq=8rİСCbVރ poXKJY -90(N[I`*/2=07a8ݩfq!}f0t; ?r~w[F;`0xCX -xjoŰ -3;Pbp* -+9qbN @o}B7ü75Q0l`3+k,1,sµ=rË͓6f"vs:<*9qRAbS\W K31n~0pu8{}bxɲT<),=\k -;^y_uvEc"D6 V$y{xO%u`p~ŠKI5 ,.!Ñq0ߋI`@O㭯XƻKś-5("{ eylF\+=_&.0/!,1r|qg(F닝')=Uhq}p~a0*jpc5#~Պl(bppZ[ox~1aߋyhz?*Xϼ#a#| 20Wx$ؘaas#||^M1܏Ua=L`ѱzxfOAt8jvۃXQ-J p6V)%w>W Z$tZ(Tb^zOj=9\ '`:V1aNzn<B%>!hP4=U1xVP^D]vDx+g|<>$r69T{V= Lf:2;e -շk7̜4 B׫fVx+`AkN) $E[X NW+xD{2oαpv(kH'梭W4sUaB3xh -_UGb~J5H4N2{(9V%X\ufX-KuƮt +<m}"+VĂ>.y8eswL=P+QK0=QcFϳ0OTS&JZe: z`ė>03gz=3?(l<=pPE8p?y`swiPP!kRJ _pKt(˜VR+Չ1l(T -'`Sb75W<O .Co uf*UpDSZa#aF,sk-SF j!L~GX_sk<٩a54=z=aە ;%50DuL5K g $g( 6SC:scq -+2 v ~u@aڂ3&ljexVxXcoqq{W Oc@BN|k^,|+e]bX( eyxOz.j~/]o֙kp0D蕩PѳR+ng0i?BYp%VFG(1 ϺbG( ! :tTX@ #cE#aguL0N,#xȪ XV!ceun35|ZꋜA0XC3!?LjPXaJ薱e^׈߸YÂXO:Yb ->J\9,UFDMW&dB5&ܢSqo IeY .`UWF$fm`xtbSbsa;ɂE KM 2dHų3Մ M%<4*#dӊQ?$`V%R*h{ VqB4Vh8O>x,4jX`8(!f~  ӤxnO,0mV_ MY dѓᡨjؘ S؎@VjU -˽Z`eþjPqz4I 3Ze/Ćܤksı֦(ǂ3̰azƱXԵj }tj)&2UXaGŨU炾h AP+m&{ Za"Ďb¦ʛ on̯j`I} nxN#t }iXÛg Edj 3U` -,ҌbLԊ"BA, 3%ӏ&T 8QσIFab82qU00ba65+<4XdAeưmV+^*}gB$EZC XUgu6{ -o4VVfǭΫQ23 {vF/=,ldXoXխ-xUQ.Hg\`hsFF:T=jEBfߋHf F jpÁ 2718t)<.* X0UZ 9 Gy;205.qod;ZA;Òu=- Q2v6h*QI<:)X6̱t{`X{лCBqK~3f+x+B 0ubU#n%@Ꙟ/H}O6(TZ/V9``EzB'X鋽?5X :ѰjJPam.a0+llav*V>F i[`b%ia}4X30EpI'|9zz`pA{*g(+Uu@Z1b&vjZ.l?G +ʳV0uW,8`kX4E-e- 0/lQ#X`p5YXbpaE?:_9Q0hZ'XBɔj`iFgyPc<[W ,h9{j;Je4tGaŁj8V`0lN6k+DsUS1X^kpt^{lb5\ c.\dXByV9NG +nXIX iJ,` g5x0id(Ҁf6~ Ǩv%M8",* ^[cŃ1ûP#'+Tۊ,{:![ĦE!Ac@K<,UJ`ZxB18paN NΥI5Y _Zj,օ$S'+%Jև} ' ‚Fd_Nz+j`X:N4BYQuʂ?hLUE`Bdfx*WxX؁E16$0<#|AYy2g'dXjӨj4 nd+N`V`nXhm劵,-Q{GcY,tq @H! jùobH #KV(1dѸ -vUlNPsl&^Sr2Dn2ACY>OYYK(c[IYӯF`VK5`ekL|)Hkr=S0)WH7&@+1XȒ.,2}_|qzБ tkoe쳚Օ)t'{Z[KtoIHZM3 cGT U8@(?!+~x 5 #Pfפ >T=IUXboV z٤xkJaPs0`@lM_cؗ>*"Xp -l>oäp5h(ԨI}Y]9Z# i"IHot1|`Z&#A(f$X7`cZ1 5U=϶6z@^9]liHΙfJ*XCZMAk65[ -X̬Rb{2X4,(ă b58_J4W0VU `%FP͑WSX ^Bñ:y^tgj۰*tr=ҵ{ύ=2UD0{hR V"8B7b?E{qpٖVyݒJ: T 40`jsˠS:@ ׂbЯŦy¥f lGf -FHjF;qneQOf_"es i[&qj~-+I(9d5`wCslpz ׶ҳ6FG6(Ð"׆7MynZ,s>oE%I1YUVvвយFF8X,k1f᫄`ͮA-!VXm!+xmbɡeJDߞEX ++ӘόC#Z9lV[D=8D Q̈́+}q :Gg8V3sp$`V:Ři9EN/qbYf@DfB&JIW!rB2͆:E-U8A b_1kH.ߢ_< -1y9 zt烜zؕ7!G%ιf~gTfcI([%7X}*Mق^ -',u I |bIM98/$B>h?Y'դg- d nCD̪ J1UC8MIi: 0H{G0<\h60V8y\L'MNf#0Z9%#f\QE@IiUB~XLNJfT -秳AiM E}AbzIjGȢkA'׋&gZdӁQАӡH4TecQj 8A`xi塜}.HV&B$vP Rm;T цy4< zXd*qL\bx2UO!4Er)ɒ>,/Iĉڜ$Vlba AhOχܒ^%pF߄#*mUzH:]uj2NJ1*k"2yTcDKipn i i!]k c X,VKIܝ'2"Il-E2O q\M{m6c{c4*z!ƨh~dۓ K/h& O&ʰl1tbқy{ƪozكRalrW#YVtr9c#Pci~b%K4o#Cޮa^D9l!I.G,P0:Etii;}9߉9URu6p*da]cRUi $ǨlXQVY (34¯в oYpPw'3|GX:tU刳@ "`%'ä@C Nbg1 xH`bujXLqْd3k4ܔѥ1 Xx`GHI8ZF)G =`o2.(޸L!֤I)W-$ƬʢR%85 KKg"9S8<)Jz -2BJC0zi Yj潩' /U"< -+Q&ޑ1zgD9EɰYOGF8π5W&5Ԡ R鷉eYCk X:Sd04G̩(3x|dN1,[ -0Nh8uY :e--(3:o&su }vh&jNyTj ^tr.4ja؇F42ڃًAK~j%XƤa8% UP^U*;=*om~(!a2T'ȼ6NsA?p3?(3bNscMjaCa@`m,%REYpNu I'F'›#i@5,Ma2ө3gi%:!,GHz4ABgc2Hj+dڧhE~c,K0!qjF3#NAX(!"E*bǜWJ)GtW5-@N"TVpvVc@v?h8@Z%I,y+<̅c殶2#x+,p\e`p hP΁Xغx:> [2L $ KbXnTn ˑA\,cI[IS2{Qd(/0zM 4<2J]LÉ!PZ/J WDt򃺨aU?)<ٖ#Tdb8pSQ a&Eg?ϡH3 +Z:b/ﺠYEFT f%VK9أP#RǨ$F7y^-b'2 6^W G/W`?J(Lɿȷ$]ՕҤ85iq`'l,=5752kQɄ Ab cFxU 9Üa@6(=ʊnqoq8%Uؖ 5#`_aۤL6kNK},"F+fUD0À+dXd=Xt%mg90Ck:`)=" T fX+)"cb:IHv_$]ĸ/)LC=KF>H.;r5NN\ ki ՚+ZʭV鐋qV=B ">хZrjdܒ`וY n@WfѲaVu&V9mNVua;;LOLViuYp%Vؽ:JVK^Xs%V;F\ՠdV^hK ۉX1 b -Ij^),gbuXeNLBiY}%VaBݰXpugb5ڲ-uvb"YXP -: ۉ8^HX ǚ wn`Vrt >sx2lX#{wX|e5 9ag3)αYtݙc F13) -؉dmIM\XxzgwfY ]jO,kl4 9m,k>U1O$kPq+7m$k!WJ$؉dSтq1I֬/8aM K3ɚJ$k: ZsW5s$kiɕqVEy*9BƲqPz&Xchwx&X#Xc5F65&w"X:He</kwX351aF osމ`ͳƆ: *kh5i$j 2:5ppmksJ47>X65K|mcXS7X65Z}m k0:= kK°5k09|\ 8~!X*lATKjkc (w`z 8(L`-H$Ć- k WoNF"ͪ#fw5brj'X k`-HeoFշ1Èv5bBo}!X85|KXi-kYFcDdމLd6R :DʘQmjtүaGl1v~5{(a 1flW%=8mId[8 f[X@PulNƿإذ`'5:nwl#X ҍ1FNs5W6įN}8[+5FyP3haWR9D~gWci EF8IOgga G nNjACqT)gm7p8d]MSA|2ʘ.v5Itz;ZfCNj( xt)'~dZg~5%,-j,tmmj,8󫱀m-jaK3slswz5cfWb8OjL%?tί&C5՘'Di '~!e{'X R`vW#CƌƝ^Z+5-jlxή RZ v5bxn~oW,6` vǙ_-H8wur_:rlW#&cA.I!b;18ӫ up'z5_M9Vg~5b { Zֶj'5NQa[MƼ ZYoՉ`-G7qTcwv`LBHC@$y%X#4laX# *3-|ֈaeXcN1haX#9\/1I'teYa BS45bva͠`ì|"X#Ifwv75bVC8|d1G#-jp=P[Ո̻W 2SίF,rI[ՂL2omW q AjĚ|gv5[d®&9,Th ,2lW,4TuW#X;`ERZ^MyIA0 -c6f, -$9838Fa ?t`O[ٌYM봡īi dq -d^5)VsUӉ#)ƬJw?jo'Fa1qY3rbV+4tLF>6vf5yNl i [2uװYRopìZzgVc9tvf5lbV -20mάVeAvZTάF TFY}oIiRgf5͖gi1?cgVk wĬ/ 15qe'f&] ڞgK `Z}7jmM9JF6f.d-ړޘXҝǤZ?3Zg<%fLո9[NƮ`m2lVcH?e|8;a`lVXxr(Wj5i@$Qj$HE&dۨDg#^j[o6f5ח){4l2f ۘ8[!9$jEh$fop~g\;We7j5GMnj:݀|bհYYK_jz)}&YHEcS pH; -}njE=5;9*٩ՊԅA&r8sr?VYK'n5+6Q[MZD9ʭVXƭQϩ:zV#IAvPnaV#'JsFƮSوZj;wj5ۨT3:w|V+tWQ[15&V*URØO7j"TvPIM՘L?vp)ю[Wk۹02ZIjPojAg]5;^DFʗ.a0fFVD*Ӌat2^ƭPN+Z.AƌQ6f5Rb1qHe5jXwDXvf8D8ck[dR $B&cKbR1 Hj$Vc/,FݪSAN!cDfycVcybzݨefkF1(AjjV㤕Ȍn|P8VM>Nj1Wj5gQh^+GqbVljYʩʀlVHLDWf1+s<}ڨ̘ؖcQU Z=y[՘_+}d;ȸÁWQ-Z;WrVc?ߩ՘Kl>VcTߨ՘hLu+ssfc[áeҮjUj۩jYbZ]Ҝe;szeAVetp߹HYƭ0lk@pU&q%Wcsu?1r5VGVvn*cp{Mrq]Mڮed;՘$3#DI)]A X{+ZQ)MIY3dnejƷ ;ج]i=AvYخjM8 ;{ZlVj2Ac&smѶ\,D!%AvI _ߩ՚Sߨ7j52D&mj-I[;Zc{AɋkbV#91Sj$a0jL.Ft8u.$jAF&7GپzAXՈ1^ԐYuq.ujcl!W Ҟh]j2΂\)Hq#W#&̡c^d` 'e%RVr5bS$^jĨŪWr5bjtFaAiA[-ŎWn5b681Q9n5bqFOwV#FkYdVܳsܰɭxn MI6ՈJ+)̈́haW#Ʈ&1 j`YsngdX#V&>lcX)HR{X#lĻA$ b AU,v 鮏Mv3b4ez3b܅6u7##c0fĴG.g8$M3b Y9H6&Y1e8#)i{Y7֘V3nVpY8Έd8SRg8#d| Ǚ0>x1~䌌̨EHΈY<6 2%n;"@M3btgB/AJhq^Nlgu@FP"׎΍䌬 /$gvH{|!9 cժYi,<#_h΄33&!Z%Z_YΈu&uJrF HΈIwN&1<~5{ 1V8#:n+y5Xz5첑c!fL8p]qF3Y8΄f/W3bs8#R9_)H_Paպ63b<8YWX'70}UV3bjaM3b2&D73x͊^΂0Q3bծጄ"&fle8#\SLyH`$f?pF[aL8J|1)q g_uҌ se8# ֡aengX-M/N3bloa 1S2l\F: -g#8#[ -ǜe#Y Έ*δkM~32xᢽ,([1fq>gdY:# :-gg8ܼu򛑜őNoFli͈W]oF sV~3[͈i7#YEll7# Xf'Mz3buFoFdGz3e;S^&N+q7=ߊQfea[ ΄b>y>NgL31 ?gLc73k@;Y%V6tIU)Θc$@P3z8u4NqedS8ΤTV3ZIf4+Z ;($.uz{+ME38i)ΊlAq&lYDqTyjg,cL*?wP)Teř0U578c>\cpѰ)1q8Z)΄j[)XwTogz>NgC073qE;e63q4drr'3^`c=̕L+tZc8I1}8Htc8c8glPj\+"kh8Θf9vpiK rUh%lr1$s8c~I3!P-g,GJr'3ri|`91#n0,gkSlj匔ذ2$qb9c=MT ,gde}<;YG8Ifs@W*VIC<­,gLb&ݍL$YH#Ќ`qb9v'3 ;XΘqe\[cv3i^IUшV&Cf7 bc9iQ,g(V81=*{n,gMZӱ;Y Zw39I}F;Y2N,gea.7W3?x=繱1+񸱜I|9kҌh9k',4g8ul9cK6c%cq[i8I6i8ste:돌l9cIvCs&$-Klbz9c/4<&b ;hΘcEGҜu P5ҜuZYrYQPX:;QݰIjv3曻NyYx0}R6Y"[]^ޠYg 'lglgC ; 'q{u(Cvg:Ÿ:h-0tS>d:aO1X2?,V7?(YҒ[3Z4tN[0}쟇;հ$Lgմ} PάCu:P}>TgهCu?TgՙBه,P}>TgهCu:P} P}>TgهCu:P}>TgهCu:P}>TgهCu:P}>Tgه:P}>TgهCu:P}>TgCu:P}>Tg3>TgهCu:3Cu:P:P}>TgهCuIu_o>0_ '/bKo\~ >_qgSu&M|@aD>RDTt ;&+KE[1XZ?zT=/U@RFoB-B& 1k| -R_ۇTG*~C*>Iε~ -R5c"j2oD?l#x$iI$6} ->zTrYhWH..ӐjRu9#} -Y>zTk >zTk ԝpmR-B9u> | -UH, -} - nQmB5{j[?yL(MWmBzLljRzH>zTat+z^G&|G -IJۢ5O^!<&ZsR}C3,Sv~ -5i՚'yM[xGy]B[xGy]X[xG?*uybnmBSR"H/ğI9< ^+OJ1DW&a> 9*O>Tl!OFT=r &OF\J ~*742"ɧT["FˤZ?T[*#?Z>T["G%&O&''uԜTG?꛺, jR}S+5[jR}O6yRmTvar!C壟J=ݞYS!u nJ32!On21υC壟J=ݞY`)m&On$tNα2֏~*t{fGT -N yR}Og6@e -I~S3{t܃G?꛺C!On,HTG?꛺#cyCJG^XmI}SSsGqI~SۓiJ_؃G?{=qkaC_mTIJv4jR}O'm śR-T$=J8K,S壟J=ݞN$LJ=ݞ8餮Tiv;&LPG?*}SaTG?ꛚ\09{H~Scg3'Z>TQ_S壟J=9 -e&Of-wi.R-TiP4ɡ壟J543k+AqԾ!S~sNm|S7db%<_31x(z/=}_$p5Mf /~8߰+{^~[86Poyճ`A&{/&ww󇶢w~ Fw֡w۞ smzz8hz8 z8hz8z8oz8y8oy8W'{\ۆ-o--:,[-z.-.-)^%J|MsOtY^q΃.+i$yHћ9"L'z8DDo4|2Y9th@V.s.+ye{9O z8B)C!ΥsU-ߨXxr8zͯ wͯfqW)ߠxȽL]xg9]yg9ϊ]yا9 yʹg9O]yјا9y|ا)qNb7q^37XiN*΋>%i@&k&$RHeP"Ϋ&>#yB*΋F>#y4*΋f>#y&*΋>#y*΋>%i -&k>%i&k>#y*΋>%>pv%g8o7s෋\ uIbn8vqޛ!;\mi&K3OM7bnwqޛ yo.p罹b]bnO5sCx筹]b'iޙaۥyo.o罹]bn6qޜa;\ .{s17\~'qޚ!yo.f٤VNa[N/-88kxٗӱ9+Ho?qؾ\gc!!/.zBB_4 !9o~e,F+o/\8c|V=؅sA7=^M2.F J<[)~}p!aǸ;FuRnQyLNm)O_.o4W @ b td׌ݥu+Fﰞ=4WX8Ã.Wo0z7swXwk ;vj3^פ!98N&-0U۸biv} v} Z ׻sſ3* p- .E%l\NoaE<^XZK!pvzAʗk Kl +O F"K;{w?kga<9a"F~GR='?oV7(GtŷW7W[s6&q1f5I.5)R,)mX-GM]lPX5()e{ }jn2JJk =K[책]celCXن7Xqk q*1ny a6DZވKW.6VĽǾ g%;.TZYdS>7X]l|m)11B-e1OwMظB/kNcX멇k3C}Mb9匱bou xձ_Rpq8w6f7쎍E6߰^3XX:_GjGi_ij<$ba|k57+[oy{YWL~׎15]8Ss7b#2f}m|# \ؙǵ0#1co~o|-*$dzИzB2=*yJϸ3;4ւE}TlU%c3k18]c}l ;UhqcriakaLuWZvv1/X7lu24ظg?]lݨ_eOÏ]lZ;WcIƅ[k#ƕuvz_GvJ_C>\}~DIƥڙWVKm{i,XmL-KjrO;l5b(nƙb#<_0_ϴ:p^}-Ǯcuud^cuJӱtΣOm~Di3Cq9zcry^ƍbc!x8u+ͻX_|αJ-иؘR;;|1 Xy<><0XoAC\R_;2\Ϙ)V2Tߨގs,cv|˾qLA}XXRQ;aU޻J$ˁ{h0! p9;[rqWETfvQ]@Wd[n.X8xJRvI 9cO+Oj* lN(r 'k~ nj̊7&'1T3ܸ; JI+ֱSA6[?hLE&0`W ^p!~Z18i(?o:1,tUk{(|+R9vցkη; J$VA/`JL wNw*'z_HE >B}Űю& >P`+fv[1̎0\;9 +%ldij(P*[)x0 D0MMT*  "p3Ki 9Bpܩpm "aͿYݜOrJNjܼT~qL ;+ =aNz^^,w +KWڱŽWa6@QX8 Ig^eu} a)bRRM,Kkpubo<+XNO sbgj gJOy{Z\')j#~?cJlX k_")\_ewebh0گO'V&,@3Hd_5k0+ 6`_\_1Wa8#|$nc,};Xtl^;^:ٰS/΁]3VtT )£}n/U +y|à0 &.dt?W8@Zw2Wj 屻ULS'PaOqT3#zMO@ Tc9W4Q4F+O* ւ,b + is,*'҉hk͜#xU%f ^1z,UڎM"+f贡x+hB<=@pC̀eJ1d]X^*f ]UX|RE,OGJaX+hgl%V;:KX [3 Ԩx^q.K v3,c#tUSаr#ttM'W]AiDv"v0ʌ\ g? +!=vUx߃R #5MJjA V@8"W|]VKR+|a{)G +D[aŊ4`KN]}8Sc |p`1LOTŘQ,ՔIpRVζ09x`°a, 0|^  +Ol~g/0T;O]T:ڸԨRܒ?7/Jen-2J;hub  +%Bɫ?0ؔXAMi`,P[qB, +uա90F8=gVةdnXZ*/VgȺ=ǘ`Hcӽ2 4a6mk3x(Xv>cY8D][o f V1"b 9x m13*Glef657niV`5֓hVXc$WĄo h\2&#n| + 9δ!GԏtZ xV~H 4a5W0V06 ^7bY?R * 9"*9`xCǍB@i4l,G DØ?:JT +ת(oaQV`Я,nǵ5`#kQ)bӕ ,i&p © hTܛqr{+dV lɢYf+0X9\NuF``9DÒo¹ +Rd5aCg Ϫ@;ʈ-Y@b0U c +* ,c*<+Uf1_3!^+ eVa4sg?3?vax녙DgE4)3^9ۓK+?0sU`S4Y}`x(6&)3Ul¨=reF<+:~(TMRyfBC! ᠆VKI@kYƶUsէqk:b̌f,KO3 ,֛:ֆAuu:+i (q^z{u؟H]yՠdA]{I+~4,ht]1<-: <_Y=E +eD}PwGcM%0R"OO^U!7\Uπzjv{Q`Ajj"RQp`B ';zM,x !] + + վHjaeQ LKY=ζVΰzna kn3Ūn gkT(N + s,Piܒߌb%ފPf?(LoX[b P4z'e &c% +KU !,kQ^up!80Vbe*+V4,bpTXK. +=2kÂ-}i?XkڥflM.(Č2 ?`Q,'Eq aFl?X!=pPް +gUV ۏŠ4Lb%#^h&3W=c3M^a%sW+J4)e۠ZlˆT_c}wq,h[p##.̚¶_M0Tmct/:ӃXjs+WBb{ K686yUؒuEK H ?J, 1xK<w9e܆gX?xQΉl$x1.1_]3h'bUx96A:!X G`a0 q` *8Vb@7%YY5ǙWt Y0eDt%/0 u b6| Dl(}ıb^<(-4q{L.X)8 {fV'+[p4`Xיuѳ4ĶOֵn/L0j^ֺ";MQ 2prYK2f 7[i*fM{l:j\~!'FN@%Vv F2XQYh) |m^ڎR, QG+lq`8Z,L-͚,FJ2Q\T b<]@k<l6˜ PatN)S" +,gV;cb F1؀|?Ù`M(^7 fq5Yp?4Y쥳9꺟1bIzwKJ֘g`Lz*dɊ`E)ձŶ412K"#-9/K1P 1`Xn*:Esib,gRM×VZ(9ƪu!,bI=1!yuu !a_ ȸ`׻ʪZX1{F1VS=PcT9}*p8r`p=,gr%Uov:v`Q ϙMX`5[ U7 +vVBd+~G"Y,jbj XM7PZ_,ȘI 1ӷPIu?0c  &kц+xò_$g+>:\̈S9q5Q4|LgV,@֗fs!o&XI_pHX_YNbRV4"9JG̉7 ŴV [fh$0f1iUBXWcADԻc#O {tdp0R8`DI8il5VJ ΐT"j4S5K aX8UJYF86{狫N &NdcKhzwpJT68m +uٍT7#H`X +e҇C,b3}W1z¦ә * ^̏Ml;tǹj(xX4.鞺7V&V'Wmk枴]êMθd#O  %,82?_Яylb^, 6ڹ4²ǯ$4zĽ4(Z[b-i%@KAdX//$F]6RxCp۷(rDȒ`#JcuL0,Ycb46v5ɭ㔜- -Q c/nPc4AeᓢrV)VRk઻Ւ~ O3LCMo0&z:˅0ok$3l׊SkFXՉ.++vX+Q\]_ί4b(UǦaA/QB-b8D"C+f 0WPG_Kg*`XU^al,u)|X`Ѓ)IaY:h18' 66&&n47I0KEXz_zJr~kF4Ś\}1LU4b : a;e= +u KL4W4_^k)t$e[fue + V[E VSČoU5Ŭ`{ +y]*|` `;/pb(hPB< ݄O$*;OeNJ_sx8^a!%k5),ne!rφq@ 1'z^6)tԩg f:[*eϰ +31V>[A0OgY7Ι"cS3p'zwALJl,UbXoÒ>KKe$0<;֩{Ql V9W|`P ŢYJtcW.n(pw8jNi +N0GFapc0"8YabK ՒUUx:ۆG~eE} >n}]C+F fphSz0[ \& +i7J NA,1* ,wN`DbX.8/\mv)a K=PE*'|* S=.yKlVLze<0و1[> ^<HF+)K veݞ'\*A,xuNkBpF3{b0^yh jehaN:vFx"ްl +J0E5*J af/QWBXljAshD#30)-D;yA 0q6 +5jfiVWlHbĮCBڨe"Rmi0>ƛ]hbwСY! VM0X~XV jgM~ϳ⫍.WN[dsf +֐VSnMV93+0؞: 7 o$J+eXMNM8U7BUX.TsUc"V0=pN޹ݙ6p +E@tscφLga1Z'n(s?:Ϋ ƯOii\fg~^$* 2bzµ+{iGpY2ۑفZEQdvl[&lY0h0aԓYWHٜeCǖI_,JR +;yYy P[&ϋwǔ +&][U +:$L=~fZj^E ȖE`Kq0,E9f8L}sm(1hk9 yI3bXmy z܅!bTE, +h%ټ8LM ` I q +uvN-Hefu+t6sf6V&$U;FY0|R1vI0QSe`Rld^aEa Q$zр J0H;MSu daQIpL'EVU9hEgf:Q1;dV()AY*+6XkPsV[H3^XrrhYR ѷ@VdG"gJm43вƈdQ<#%QB9qT3J_s٨l !XNz1fiZNKX#uYp Rq@PLdQj8h0xb%!NPjzD$p̚A,h&OBLb= '/v dȑa sX1JVIU VJtSr׷‰i-lFBkz2HXqRSΰ0KG&f e&z5 YmKB-ġ&!P"kRL=NzbqRNy* , ڵ +rްIYH5l,lbꈙ(;vT%m2klpRZP#VE㩒lqPZrBuoEXhb,g٪9t`'4dt,UXiBF,N^Zy(g Uɼ13=T$Uya' t7fF-Y>5w\4LpMܨ/yJ#KRq6'&hHc7!(W 7J[3ҴNWݲR 8Z諈F|L"5m$R)(sB6CZHWZ'%Rw E"HR/[KDf'=Wv^)9!M59ުl1E`2,h!6`oF)5<ȓek2,$>`:3s&ǣ=Gv`Hā DX+=X[%l*+aioX"E[{߄ˑdf(o387 '`pQ?]Bb(o_wbAN&3T89AGb ,\ʄ'gXoXTf11;6l0{8?J쌣29p2 <+pi\&I)V&]x#b9,`hz6X0*쀠291}o'a }C4޴9{Xuz$h =L 87%'ftiLo5^tؑ|);k"*a쾖wBn~?؛ 7.w5qh1v\@C-GISU:D% M`abs80愱MGpjF dbВF_ZI 1igCI.c$WtհNxlJH. 2ӜA{3J!n.1̱XS\;f+sZaP4fXX[+KT1zhi2mSG'C҉щDx%A6@yt ęiZNc%D$)MPY☌e:u3)ZK>w@{sܦь2:b/V JH*1ĴeQ2UMK8Ӄ5U yP<gs56ЩVI6mkmj1#O&s!س̈,^91 +4 ms7CEjB:Ds .^~-O:Ȗ2Is7Ò`֤+He%r$q> ҖCbT^= ^641  nn 㷊d~b˙p| { $VuAVe Zb%2kBB&VX$I F_cFga2"ŒAsZf `8tDb2xtIc YLÊ~`ke" 0fl#ˣ&NWEH^Dc݆?̉ދaM8 qQA+>h0sURΆ1(k5T1j& эD{W؉% 1ErB +qA/39FWu46iMZ9[*0KkM#Z)ob2!a,bP%Xe13X~UC|0g+"Jb0d`t1agI0eB9WX6)"0g@*El$ !xъnh1 c0`3YA0V A`IYК(kdb +0rHd,y濮ĘA0N]6d5?I13q +Pmϒ\'W[\D b=_|WrJ\+Z0\`@q.j6%V~V#DjX+}PqyG:3Um6lgVY ډaj| +gb5V&OJ=jUJ \h{^cR̕WmNҪbjK\i| Z=WZ5v ixIӪ37j 9 i8S_i +;UvZ#W)*.jK#=i +'ЪɹjLVdNƑy~oU+LV<Ӫ"hNjKil: M3lUcҪW$.j,)s9ӪJ&.̕VMAӪi+ӪeVz*ۙU-gVWV5xIkk.j*WUV53f YXtʪp6]Yj7ÕU-)a;[Jt\H8Tǔ_Hʢ˕TB]5T's%U]?nH$hn;qH1\HXy󋯤jX(%؉T-@bNu>aסBFu!UcR{R5y먦+FvRX(jP@M+YtߕT-vR5Lqv%Un.j^}DvR5IJFhb9դGu΅Ska;cBDžS5sTE7lTD+N5 9՜!+mj ξwTণ/jkɰS kSg\p%!%qT:DžSS?gN5ΰS &WN5u,gV5zO-uUWf5CF7lVK1&TL਑j|oW-?86~5c6-1k|oWCW~5A1^]krAIzDm#XTq%X[R5Y܅`Yʯٔ]] gWa3 _]dZRC`Wc0K@Ojl̯ƁDa(jABI#6l!XcĿz-v~5oV0MgS;ZXOjA + |3_$õ} Pq[L{mW#4_- '~ N^į&j9n'~5VV\jW~ ; `CMӫC [Ո15ke-%ƯaK&¯Ʊ/¯'Sw~5.ņjh/=qӬ`Zf4x6~5on8]G;1eD&co%;Zl%cڸ8J~-jR4gj!!WcxYgr5il5l!W㄁mXى\-4hhvr5Θ*#y"Wgr5bll*?6r5VOFeBF;^o'W B,tFЉ^-34:DD,TL&ð^u"S^Egz5 Z^-LcqfWZmή]_vj[l] ndRu'mWD8c`ljA+Unj`ȘѸQkq]MzͮDªaBF -j>lWc8ӫ0z=ѫq\YX-jd*z5%=DlW#3[gv5V ĮF)LF >SoA 6Uį!*Lyɘ7~ A+k:֕~5Njcή9Yb!j('mWc`jP/uW#P2j,¯L-k`Aev5U#31=k!!1-k2g65i*5l!XcQXBF,AncڵqUSOj2L6~5bNW~5p¯FJg~032d^-Gj 1ywjAf:# +ՈEa4i Za]jA"ވ6r5N$>\XӘL&S ٞ [Մ:Uԃ maW#O-jsNjR}gWHʶ 6]MuÉ]Md(̮&]Ͱ]Mn ^[qέʮ&O ]Mސ<^M;#ΰ-jU^Mmuӫr&Ad`7^Mٰ 1X)Ыq b=d31VAvЫ:,hW#flj^a0-jAzbՈ~WgwQmje ѫ`٬$j^Ѓ 4s{vv5B/Į&ek:ĮƳwVOdjrW d aSkqW#&Iс-jI2դA L̍]MYpVcƮW`.]N;0tîFy0-j5Z  eAYCwz5ґs.B;LTL&[Ia }q6kWu7jH?jL_-H~ +k2gF. \mkAuƯ&×SҞZ7~5̤mZQ8ѵgۭ@;mp-jfם`MB,\ —0`Ҡ^;d6knHp TbzT^q0j}^ nW xmmj;x`$Xc1%qBg54-w8I5 kh_LdhՂA+qP.F\vW j'~5ǩzkB[ <[?q3kpy6r5{\ՂS{;QSC ⵕ\avggr5U`Nj% 9svƟբR +vVc׆^ոRFFRb l [-gsV2K3ZIݰZ}]ۨȵlZF5Q1ҔBVĬf3`ja)ڈհDو񱝈86.jm8<=B&44b5Vu1 [I~"V 0)ly;tw<%BXͳj/h%V+l >X-&ۈ8Jgb52p!VFh.'b5λ U9%F2h-jZe7^%CubUKlW#ΤLW-W..sn|oUcM<q<:g|'Vr%Vc rKdc` Zvb,#3X-dgb5y{k7j$r)B(Fvb5} +sm!V%ƂmjYFHrq&V#o>jb5.~A_;iGÉVH +;hU.!Ɇ-jR D-9FRX% +߰On#VE1{fDVhHǙYt:9-j +6b5vd*a KX8DNrCjR˕D$+ m!V՝Xʐݶ'bXlAD;ޒݘՊPRa&]6qVc6&3}AVD;v;7j"^KnVcw,øWf5&q2gkA1q,ueVcxY_jp9ZN/jnz5CaT:jEBok3F}ڈ sF#ՐնbaىՊhkMmeVA%8 L-aʬ$T !WunjN;g׏VX+才ucV#MSYV"3uX5 81I W^8F1zjl/AljX._'b*"+aZ")]ժKܮj$lGSicVc_2cAƬVe3>f56-neVc~`V#]E6f5zfɝY GgVc-yYRcVcncխj9oeV#Qɺv0UVk21oo:JogVEF%6f5Is䞖]jYwaZ}V#Ïga:ðBVdFƕ[ X[YE 8ժLe5JA]<r5黖1 WcΌ=Nj ³sVr5R1`]jM&4 &GͰAvp5ߚ6VcvTnm_cr54^jenjMFYtpeNwj9rE6n5a&=6{}gVkbTlZάF"c6ߘHP4>tH1$2n}juN*j.m|_+;ÏfܝYޏYLlVk Q>8j5v: 6n5vC'n5Ir]deVc#0M3lj'ϵ8YqbVkHY1Xf5f@} 2wcV#!0'f5{v01=Zߧd2*~Ȗ!QƬFks'VD+%VcMIcS xCֵ[>a#Vݶ8'b5`u՘WQj؃uVp-&e}V2UZ'.=Wj.tr:sVR0*Zvn520akn^+;s2jLrŔ6j53A vj5'!ZL^LtpcZs1]ؚӵcĭ֥ahjmj:8xn5rع՘ :_[Nloqu58Ȱ[M[ٗjThgVj56/cA,)̏7u[LOf7r={۸պhƥq1yXVn59M6FF{FXljwlFFi&`W#rXyj|cW#KʮF){+Z|c2xjGHtbFI:`%W#|zQCfV#Źerq}C[-H{>vmR: 6n5Nwd č[> j2gZkKƭF]zmp-j2R#,rK +'V#FW,VrL7n5BN jAt,vR6I1APǰZ-h6z+1Z{Β%+G枝Mj5FPiO2-߰IFVM\l$@ 1v5ymՈEnؤW#˚s3*_X48&®86 uaʰFN[d j aK 2 ,fAh_̈́FNw}|od) F.i+ I6x7#}>:u7#0hcJqFEAU6)΂/1((΂qF R sӨBqFg řr:>&[(΄sfS-g$|`FFlg,b ^XoiXqޏ<A8 &1Zs{V3a (.Dc 63b|:PGo[ kGqFR +\3bx;d=pjլd\D EggM3B2HΈq90>Rb8#&Ut V3B4; g/gXg!g`mװqF=v3ol)rgd8\)ΈFύHHbe8#~9pWrΈ\]3b#tBpFUu#PX Έ]Ib6 Έɘ~ 7+:{%8 {gDYΈIHW^638MrMa<63!&nUM3(mngĘF } I32̕%Xz?v3bbc f$638͈1-fpKLɰoFs(ߌd)s;g7#F9oFf4HzdYŸқAld${ ƫlJoFnG:)&Mw7#F_u&1rzXrnoo7#m{ތgWތ\0l24ce7#Ě%6͈5Iib8 ;͘g瓖fL{8bf7ljLR|+қIʞSm7%f81eH +l1ekL͘mtgIX`o&{T8I^GvIƞc8jm7F[͘s-ݾ1e ??v3SKl#8c?ĺo$p:[q"8#+r 7cƾsp$f H pL c'8N)JpF,&KoFʬ3ÍL(8<ʨV~3B)oFʬA͘i[y7#eE13$v~3W8ehߌy̸Ͳ̏ȧ6~3@` cidܠLtd g2RL̖?Lp4`8c2=3bm+Ù2` g,bM; gѓѰL*jhg8cݓ@,+H;Y)ۓLi8RYH>N g,k%i0 gLk7`84 gL7`8iΊlp&\YpTyjd g,cL*?w0)LeÙU57`8c>\cpѰ)1qb8Z΄ja[XwTo gz>NgC0y73qE;e63q4dRr'3!_`c=̕L+tZc8I1}(ȯtc8c8glPj\+)"kh(Θf9AvPiK RUh%lR1$s8c~I32!P-g,GJr'3ari| 91#n$gkSlj䌜ذ2$q"9c=MT $gde}<;YG8IfAs@W*VIC<­$gLb"ݍL`$I#Ќ_q"9v'3 ;HΘqe\[cv3i^IUxV&Cf7 b#9iQ$g(V81=*{n$gMZӹ;Y Zw39ɘ}F;Y2N$gea. 7W3?x=繑1+F񸑜I|e9kB"y,gMZ⤐Ű],gltd$n+CQ2&'sCw`9#Vgр,g1InXd=DuRQ,gƙDas,W.V.BK7Knc92 +jYgǿ65 W`Nr|s)=33vW +6&YdbKb^>? 91$̓lМ`\gu::n3t:g>TgQnDuهCu:P}>Tg3>TgهCu:3Cu:P}>TgهCu:P}>TgCu:P}>TgՙBه,>TgهCu:Cu:P}>Tgՙ`هCu:P}هCu:P}>TgهCu:3Cu:P}>TgهCu:P}>TgهLهCu:P}>TgهCu:P}>Tg?S_o Ks@/X"~R<76ׄ_OWhzS65%*P2To?=/]1I~ +Rіe$֏^ UuKUd<ћP'C~B-BT+!+ߐOrsBTMHs7Z>yL2^!IyZMknBud5^!󺜡z,ZsR=%=4Z?zTy]H"EonB絹D7^!zTy9~^!z=2s7]} + do2<)q +}S)nsH~S)gxI~SE*a%ױRC壟J LHx })֏~(F8Fu~*ֵH2֏~*ֵJHu~*HQod&I~SI 5&On'. 8¤Z?TJփ=Z>T w殨TG?{]ꡜdǐjR}OgTH݂jR̡!fH|S۳LsaajR}OgAeJI~S3 8sLJ=ݞ!B>T $P½hRT31OnP1@uH|S۽p !OntjRđVgRmTQgRT$eW2OnOehWG?{=];Z?TI{[yTG?{=I˔jR}O'A9ɤ)jR}O'ug:'?{AN1&J`X)Of,(LNRTỉaD~*4{WqjR}OGEdYI~Sc 2]TG?{=r!&;frhR L~Jfo2oȔ=ߜ㨓i/T zI> != +︦ uOߧ>/~MY=C{h"79GVM=T/~^,X~?:0ыug\,Ÿ-ڃ---:.[-z.~.xm7z03z8h0z8,z0h)z8%z8h"z8z8׶w~w Fw7֠w 󇞠fw.ws>sI8_AEb]FW`ˬsItRfaN.Ӊ+ye,ћ9 #z8CADofZ&U˜s0t9^qΓ.Æ+ye{9z8!BB<=2P]& Yk&gUˤsQtZ^qNÉ+y(eNћũ4ˀsCtLfqN.#,?"zC!D3y]_mIpsd.)BPGۿrM=IokI&?5^t`d$%;_sI+^+6.oRxme:U(VKg'}0U'Ĺtz.⼪[WCs64n,*T}ɱ!8瑱8/8Y8/8!88鰫8/88axOs󚉰?16qn*\Үh23'Ѯh$3GЮhSfnf3fy"Ϋ>%i&k>#y*΋>%i&k>%i&k&>#y*΋F>#y*΋f>%i&k>#yx*΋>#yj*΋>%i\&k>8͉]yا9 yͤ؟Dj6q ]yg9O]yѨg9]yьg9Ϥ]ypg9]yTڧ9My8ڧ9yg9ϝ]yڧnҼd3œ'ͮҼh3G̮h3gˮh3PEWM}J4M׌}FU͓}JM }*/u HmR9kWƸ7\&śs17}87sCw筹]bn(N5sͷ\ )Ibnk6q^p7s +\ .{s17<'qޚ!ys.$[s178pyk.$[s17~87sw筹"]bnvqޛ;\ g.{s17d}'qޚ-y{i)\ [.{s17487sC \ #IbnO5s\̕$;s1747s\ &Λs17~'qޚyo.$[s17$~8Ŭ}1@x;=Ԫ :lkg /`c:6'}'.W=Kl,2EO_Cx TgKV} u򏏸ECU4\L|| +Y|7$ݼoP"R2%r?ًK+ wP_0ȑ)E-PLnpҿ9 W)׻X#u-)~}p!aǸ;FuRnQyLNl)O_.o4W @ b td׌ݥu+Fﰞ=4WX8Ã.Wo0z7swXwk ;vj3^פ!98N&-0U۸biv} v} Z ׻sſ3* p- .E%l\NoaE<^XZK!pvzAʗk Kl YpLͶ D\XrX }LaՂ~#fFn^Bg3z7bv(Xp9ZQ(>JLM]o^rm[az Cz{}n6 ?K_ʥauWocZ47~Lk5\p$z7a8L9qV+zf{(_ ' w#'37rpM{fƐwNl6ƳlWL Sa7Pŵ" :l>]_{73:]%R-REbNAf`ON>n _ϲ|s{1}>M`vpsc%f+8qY׻EM/fBB9~sH!qI`:(QraA-$UIi֯f9+Հ]:0ri'à. \]1ISjpgn~k`!q%9R+}+a C߮ O`4cq%ro7?jJZf7&\zPj7 7IF٢P-`b9A_E>AabҡYKrs{9f^(&N~+V%ϴ(* ƛۃE?2՛M/5<2Xxq{4b.ViP@GX@7z *ʥCF5QZ̿S\aZW1H xz.(&j4<OPzVn -׺K2|ÀSx¢a Dc \ X|iaV-p K'a&~n:0X|pARmn~.6o P1+8;Ԗ<<LwX aϮXVC,>8Qz7 *gO`)|sgnsOכ˥H08|kJn,FM1@)ϯf LX;Li}N,\k0ˌ nX~Hw*eb6o P1+8;Ԗ<<LwX aϮXVC,>8Qz7 *gO`)|sgnsOכ˥H08|kJn,FM1@)ϯf LX;Li}N,\k0ˌ nX~Hw*ebdI-X6LSIӪ[0RP8qèn M;b"ul%F; ^T\̉=+(1a/N4(%iF(7\Kd#vLT7}GK".ŰcībͯF/<))qł[ikyJWg,8XOb0iUR cԥ"܎\OLyx50+?PyҟXI896 nuL-I0[f^!a67.O vF-5@ c}&C2'\L[J4JR,3yZgd(dXc1݅s8ꭳC+Ay1a<#X5 \JlYR=ˁl[1,3~䨹u]4Icqou}c;H=FSw^cMw W7)aI12=gX"$Y`K>1_K3wtrfӰJS(sK0s90cK֋K6.7TN_$`ŵyM<6V7өV<$\j` /Óܱct(׎3^ oX꧉{93bpb PX`aoce QdO+/0x5aMK4CK6yp$kǣS0l,Ԏb7 ԌjP UQJ遅t!VKrz.ށakFS?Ǯ8ufy ? +4UQ9~ V3g _on+*(3^lХ:cXqZu=T}8a <[|sЫ^) p~Bw]5/BUF )`2,;GS.'y&}uK?/%ɰ7LP5kQfO[62 Y`20XcXf^RaLsi^Lpnhgx~L(X@V G bmD.(7Q:Ԯi܅-ӹĢ]ް(;ְAGMlܪGhCvwX4EC~Z,5"VFybGȻq{!9WR "&oBF]Qhc҄,.؋!^1,qjUl,bNX1ވ$da4ް] Vͷ:,1)a%& #N QјU`,YB^<8-e=Zh3d:qp^&`lxl/ s<; -Ke ^7 ,3>ƭh3_Tbqi +ǰ;5+q8fw9j'`C;@֎H`@.w$vTJŜ& -tiuB H -ɺf8:dE`|RLƥߧfs3 on|h܇K/-h\]^CsU.nv&s#h*yJnF ]8yuW7N -] Uapo }K6 %+'hdX Q)-!dE_;} <}Q7,k[a ֿ~4&=d)g;CF9G涔5O;FO?":yy'NrC#?zu%ܑ(P/Y[$#N[@FB 71Qo\^X-9T=4C]uKqz;iZEo4;qa 9[˱,C U t%.-&@!@-u9 x%&V'uˣ{P^@FmKac[gsfV2G/3R%݊ 4yq+G$sI @knixiFkɋCl6# !lʫTf ogxv'Gspk9:yym͏wH*1PS% -FʾdNS/%V. p{蠗.OLh!NpƨaDdޅ8-]dty],R̂ i(n4 }elM/g[׏_>~=Kd@S+Զ}_PMO^!gM3Lk,SmT`nzUJ^ǣM0NShj x>_ٕM{ ;N8.p`HO?mGN)aJ?)N6ߚ񮹔cOy? - slqFA$-Y*Nj&ߢ gv~z*=l4/J贅7R~:|K.wJo8X葎S_@tО3m:Nѧnit5KMh|k $k}i/f7щdWtD+$cGHq 2TPtJ?=F3MC$ZV$@#6Kul%ZmG[GN7ܜZ&Wshq=Z2z8 uG >uL7dD #!诠Z -?v R˩.YF jNaȎ[;n74MBr貑Qg|'vV >Pуd:geٍJ l( 1n隕o5Eem?%K1Xēnqz4aR}ȫ1`}et<ѝ.0tBt(XD%yjFO3,yR3A%nZ)dT_BÿҍkpZ4¨J!0}XB5=ӆ;W kd۠-vs ~d1dQd$;c餤ln8ErM߆0EW4c 9 ءGFmrvt' -_C"Yd KY$˳} -jd]Vr>t';BސIl{B̵)V=$%;QidL4Ӣ-Tw $8_3s5!g#y4Au[k ݉nZ!;@ t\a0 4Н9C0ħ}rG.J肢/!#flTv+$6UFCK/:@{ĨJ!1H3oӭ;@pbEЏlHf?/јLI*w$D;2Ǿc_fTtK_G/Vaꎏ㔊xeB= eh5VEӿ/>q(hv.+XVm9=p dO{D -hXk>7+|E3м;pz -)F -/Ulv*/DC3Dֱ}uܗinO&ՠuyFK!\:q4pnHdh[P܋>#9 qϩѩQ"VP2>+ͽ:3529R|MV]:C'4$A)hfjNO -#$pGyrS my>U]w8 ,=xڦ'XWstscX=qJ$i-^8V04.A 6(&?&x7Oyղ {T:HqM9i,${͕1=2(wGΦ{л_ aà7nurI Y3z°˔qk9i`,[lSB/ (lFf?YKF7af25Km.a#9+ N-h~<;2pkKD;a7F]4V?8?[<5XP&60lÑpF+Hh t8q*uNӿMJa (oB01 ŹV.hFlť(:,X,$.A>7/=<n v0#:Fy^D;/ԱX`k h%fҝ*L`Brھc/OyqiOrsvPDװd|R=]P)hY3H:CK̢cnQB60AːSvf@69)'ط;j@<Q-pl[N2ٍ/5e4-/̎Ջ~ֈ1]RXQCF1nnвI+9C4a3l©Y'$29 4BL>d;8Y #ӎ634 W6.tBvGa 8mW 牸|!Vd4BKL[,EQ#dɛƹa,9_UlRV1JL;Ͱ8.N\}6A`7}N|sgujȑ t,VXN˰J^sQS.>3WÿaÎȫîȫīNWe&.C>Mެa/{}`hۤmyv%堫a\!U`E^#ְ(yzd s3kW -;ָl YM7rkh#55d;Bm25ս6kȸfhkȪ_UnolאF\C&Kw![KR\/\a"\Æ\CFlp{S\\"5sZV55ս!6p d"Rl^豛L<]x^έ)uW6n1֐ .l֘ƄA[Cf'm|QR`UZC6+V>TswG2Skdb#'!։>Hkf qOGk5hPְ75D +O9ii̪&!Iy6yi ϣ=Ђl=^&qm6%kMqpZAZC^ZTEAZC֭WgQZC&i }| trh2 -bŲZCVz#vR4vY[C%Ym q2[C6y4{ N[s9s5wiM5dax=ơMo*Wrr>xkȆvz ">Y4۸5ңo֐UiFn kesk)S5zJ#[C6;nsqyfU^B縵-ХqM0`!kikhh֐@^^[Ñ"hkRƍ&ƙ֐iI5dk5n0f|.Smp,it%vA[CZM[Cϲg֐:JT C[C65[tVn8cƭ!5,+mK;{n+skȸ"H[ v9*ƭ!Kfi7rk;5u!Ci42,sڛq߭ƭ!ș֐U9Fo;IO7zk+r+Q55nm y\C;4ρk] \C6{'9pr }p7kȴ5dtjHq9t2`o0bfy9p/Rl[ LoxV[ȃkOxp &lIzŁk!0񹾉aUkkayװ&!So t|kfH׸["D&mxq yVLN5d42E !iN\C{ƙ-r -45&5&5dr xr腲k"D|ŵװq3m⚼:9 gݘ/qvaBM\O6sk]|I] -}iƙY (5\ $^]kȊ=ƗRl֫v/'z=w뜺V }#*45dZ]Uodj{`^\.)<5dڕص:7kl?P~ik:lSYytPXtomZyyv ϸwr{OwNG"h6E&|Tσ] ONL&] -؁]Cvg*Ƽ9v .'5La5Oku?5YDm2 ȶkZpF59Xl֮WאѤ\ma|1mcװ"^g]u{9v;eZCahVxםi5d5s-5k5ԵjҖwxK8s7׳W]R#XͳkXڼN=R-5hkX>;x M+؂w kusyt T{<Ơ´<ƻZ5,apkE4vtήx\㭥,52$\3~նkة[ -oy?ěk؆l$k]:\-, }[vsY\;@.)5Yݺ -5RiaǝfN]im|&u !VfuM s]]bk5vrt׶;_tN9wn,U3ٜ&E j]Z(sh$1L]bmtWp0й]b/w -mݵ]] ]C7>a0r?wq?TdFAOHLM^CsvEwWɥkrD"F]2l9w88$Wp׆<߬FTd bv⌟4{M=;Ks5 `#FL,s͛u!wM &vOxA¡fhk͂F#jaKZ*]C]C)$tػkܣ]{588)RLWൾWy;Uk}Qko(]Zu }QZ?W=-Եv -$k|PWpz)k}?;ٵs ]fHϮummg v1Ñgt9op5Ybh].\bװQTVϮugװzmI54^3W’mZxm8kt{#j<^vZ5,qA^Cs༼6y MptT^^c¦^"m -?w 4_9xm*k>~\/(s׸I}傻6t,45@KM&)& fk]C"\rxx 'MנRװI `lPXq54ݾ#k'"5<y 6u;/a;oX k8 H/YD&6y G۬2/k*x ך&xx Kixrk^s^ O]Pd} 4[r[G ^7ƇD>57̰3Pm%Q ^ñ3ݵϺ]Æv -~Megڊ|])ұk(AmٵOjJ6v 'JU5hC)]{\|៰Kv U7k:Fv&4[Z=vٱk|v4W~8evyiְgװ'Gwx=5gנޤP`;sGntN]L =yۏ-urvu ãkxC?-t ]eʹ]ñ>;sA9_k܌ǿ3׀T̍5l8 3*xb͵ʶթzsVL8t 'Z^NVꟻ?i5]G]r2{lG׀%pOA]2^]tbHz㚷YeQO6ltZ<=mТG]]!u̫k+]߀ZZ:X7ѩc]%5GS_Ungl]Ézi4[6~e`UJf]æK{t ~RTMu{Ks%l%7khkfЦR|k5oǣK^]47lY]CW[WLU~ځ(ǮqK) hkع~W׀\d8ukjzu$-ĩkXܩkf`<_Ze֢ǫkp!ߠ5~Z]WװU{Uu͖m5LS2yu 9~Rװ'?5k0gx+bf]cA54=7k*{b8v Wa*j5drή5Ilk̍f]æ~?_yָJϮ5cgẕk%_Ϯq-6"{bm{vۤlϮq\3CŮ?CYήIvvqwO;5tn lkh]Q`$'C{V^^C^45 -Ӑ5̝ۛӀ) 5skXBvx  ,D`K{yFkVg蛯uj?F Zͯ4ᵎv15t;x UZUqif"^Vҹk;ċ]Z5G\/SxhܵέPlk{`8j-_?管xç4nf]C -2cаvzֳkRW1]uwZ+;5tླྀòqsgu Ewt lk|q^o!:+d!M0=mkh_u"o킽kN4[O3tmp 0:ݢc:]!~2llhWVǮ0C;v - rΑڐ{:JR6/֑5dt'kt']^Ʈn9v ][o35(eVs2wl2K;w 8۹k #!7Klk6bk)YڰkvCugאIA7mkP'h^P蛭^Cք~wkչkkM)JAoLmkan6;"׻kC:{Ȟ5d cFcO!>BǪ!=v F@yM]]@A;=8d$&!FE!C.;Nqȹӄja_!;y؆x?8۰3um: ,dK:Z63Pe-uƊ s&ڭ3dTd[g5*>1mZg*.ܭ3v9>r۳|ΐї~ۭ3dj[gaH3`-C:C&`iunD΀*Km!tΐ]ܒA?u v|M G˚[y ?SgV OGUoSSu# -p[gh1R 3Kl[:C=̍u>F95[>F`#v #%uM4[t>sg$âoIaθI;_;wv79 H]wFtP2c-Zh34 &&-^;CL.^ו;゙kIθ` yw 3ŪuzLP/cG0`^FvFf:C1wCuz3[ -fc<:r -fc謳V᭳k~[g75gdged63TH2v 3۔Yg(YSA[#3:u3TT/`T IM:6_\tv}[fK:cGsKg |lIg y(.YݏnGyi3DML:{wf[g\so=tv:CQ*ӺWyLQgeGB'#v u/ u/۞-t6"4 u'YE^:CգKgc?j[]O]=u) lQgg~:۾N{ jS婳RF3.aAٻD:{zY"u +h3~sWG1DG8 v8I!Aϭ-uV [0lJgV)1ĕ0 -mm3dX~Dp0 Kf63)Fmsuu&Dt3&sΐί朁pqlsƼS.O1l:ghfP w!6s9g&3dϵAsBh⬧hssJnvɨ5pٹx d]Yzڝ3$^6~9CIsvy)sv1e9;|svsgփ3g\=UvFsWՊ=q,qYB3Tw6M:CI%5*9C뺞9C ~n9gٛz u41^:CjO};t4.תB悆wP%ϼ,BF -ꉜ74,/9C _%;g7GW9g3E %@U.G1e9C Gosv 4hyf+aWt3gLi9k99Cȸl!8g\ֈ;gؚ_wH8ò霡b{<9 [yYEU9[34%jzsk?)aKsaY:cAKt֤9=v 3_?KufH:7 CO`كN~ٳR9c{a;#s30?^wVpܠ3˹38hάvv *vf⿰7JYQvRhv^3ox3m[E]NmAp:ڼ:}LY/W"5KԙԧtvRt6;qd'u?) -”,=]|Hg:K:c T Ig%>3!}@g:Τ\8i3k,9{T`ά)'sO_0U$3gs)9{|fnE}1gsf-bSk[|9g49{tTUqʥYƭ AΚyhaX:~8g~8g\tk35oLxYtcM~.;gMs K9;uMC9CmY9]/j>3;blK9欶Sfl9o&gl91g ,3ghP5 }h/j̜Ysf_s23gV5RΆRKYVnkL؉>f~svYf9kZTvk3K:βtftFZd :ٰ_t]>3Yz?3T>ު99sE챾Ι_rs֫ P?3-rΆs;rMf̸/twKYEt֪٥:+DŽ>3; e?3Ct`,Hgp˺7~Ig(nEQ*C:#Kg~@gXUE+CgףL_YF}fnUu9YcX3ѷL9{ܗs6yZΉobΖN&Vș}qF~n8_ę8- ęI% Cò@5 ęfp>Lq,gjԅuJiճ\ -v[q&f8g8RC!!ͼpg|8ehyC86fgl#LUۉ kA#8kL}a39YfejάS%]C8Y8;)7}>C8w7/ 4 y? -IeᬡǢdQ8[ Y8>C8YelLr1 gq`3Ek3vgYNo!ϮYx<@͎8S)?Zgz?fl8HaZ 8[ 5k!]>DbRz"P2݊h8[>l6Τr"fWlUY㪻G@ ЪM3oڬl@\3= 7r'YlQDΰ19;OB2r/쒎qLك&c-gS y3! ;(aei2pF״-f쒢 ݲ1.YE3of>t31f< ֿ?fl4'ye6&ٔm?hҮYo|+g扶L&6;N_ٍ\ɒmh>N͂myaYttm[f6}mf7Gm3thf!g6[Pfʄ2m62m[miA ᾙ6{@ͮYkڋ6{c= ٰ6&{h3,fREP)L6ӳn Y%lMf]X/  uE۬EdVVe [-f0tYVliyeM=*f-۲@ʗlHXm6ڬO frxhhڌ*neڬqC`%lu$ͮizX1fl|fҼĚud׌Fe\>^5[Ivl]k6>\3D|550Lt巵dLgYjnQ5y$fUJYj.a(X&Ռ>--ͪYj?T3tyլk/C5OӤmdTͶ5;JS fcNkUk6tޘQMlJJϨZXM}TeܷjÑ:lJjbUyh9fD3jF7~]9ԌPT&f9lP3gLQ3)+ff5@ah5+͚TPG5m$5g*E֌.q%leluj&ʻT5rkG?Ye5̱fUNQ.e5~Qy֬jcͪ7ͪYQDeլIc5CY~Sd,frz5[UO5;1F4cQ`[a^abD0D@atS͎3hU3-,faT֧T3mBYTVWKf5Xs?!ft9 tͰ(n^e͸PHTр6km"m flCT"mvr͐6Sp2G@[͸G'L5YՒdUm3T5yیZ3ʼm a2X6&J֐8f.xa헲l4ohN6CWO#ГlK 65ɶb*9f_ %f+f6Á"mi<"Nj2mFM@ڬФy6 N~fh~T یj!e۬`m{+6{DftyҕhX͚4l[=mL]^w͞;gLy cBeٌOGt˼l -%E 8]˴NwKF lݼo͞2f۬s3(Y1a)ܫx9یU5fslͰc;6['(3mvs>mmg 0i3El>ͼl6o6wKz-g ӗϵDl&lGJ͸tM+ZՑd3e7(ѐݗ$ԃY6rnͤ~^59{$ج}Ԏ[6KQQ+fFN9 m|Y>;GڬK_lF ;9.,@uI6 l+>S=<əa`[7,Lq`3zV6i.\KT0ͼkv{pnȳfh̬kvK5g5{ lhX{;[Tͪ 4GM3Yo-C[4C9[4sYNf'f{f"i T ͤ!t=IH֬@KO:؋f;iFf"H ͰhHGff4Q2a 5kvoj&U{?pU3J̉4;Z٣$ g4]FlqCnhfaqrH3.H1M!4?r4WV#ivr~ΑfOuʉ4DlH4cI%LZjr$ͺ, i94C}d5Eĉf؉nD34FI4k/EsuK2kٝH3TW`Gld4YmQ3,c7Q3鶤YP6rVT3K*ՒT38Z2Tçj!{ 'Vr͡aKP6֣fmLiF4ӎqC4}:TGl'#ivy -:fO:v`4]l]\3$#ͰAҦHS&iZi‘4dG cH%59 |qUivK_Tyy4+:bW ͸Yэ;I3&s=@|fh{i^$d_߲@r%4cENj4R.I3.?œfiƗ4#iD&7fhڮiFDG '  =Q>ka0I:a3cDDի`XpzG+gƇZn߇fv>%hfF|'ͬʫ-N}epyEfV8.'̬%!g6_>83gJ:*aE%Ldv>@@䙕X&L}xfkm؈F3{ήTg>9FQ˚QѝcfFOS5f_>ٙH~g S83W&TNb$άkߗgvyd|f NK#hK6h&20T/zfh6e 4+֖4#1̃fiG Olzdla4[²h&uK4M8L-Ő͢ٳQ4CfXu,fsShFg6IE/T4Zn]_͚#_A[{ɦ_4ڤ4kZg 'ft:ˠ"3h4f,~ZE3hlIU7{fih^hvK4k@_6nЌ;V3I3kBEPȮY&͞uW9f4fΔif 2+2;6 ǔOӇd67Kf!s˂d2'If. Yv,D2sYB,9lϢe2 \,9,d2sY3 ?1|139?13yl"f3l$jf>ϼfgQ3|8=ϼg3Y|=3yg3۲{f>ٞEg3,zf>ϼgg3|==ٞEg4'Ͷ,f>sٞEg;jYD|Q3yl"j3̣f{Q3y %3jg5S|U-Kϼj3YT|U3ylk#Ϛ̳f{Y3yg5۳̻f>sEg5w,f>ϼk3Yp|]3ylϢk3=$lj#șf[I39GN4ۣyf>rG3yG2.I|39lcVv3f!sd]2 \(9,d2sYB,9e2 B,b-HlYf!sYȜe`if!s˂f2if.sgg7lBIf.qYH6,$a'dBe.qxYH6ց. Re)貐mtYJ6,e].H].Re)貐9,e]ƙtY].KFe)2ɴ5XRe!mvY63쪚Be)mzYȜ^M/&,dN/KƗlBeh?lBm|gVN2y,e_l@/KƗlB2ɌR~Y6,dm̐ f)9L'Rf!sY6Č[;,d;bƑֻ,Fa#GIUy0KنlC8;+Y6L@| mG\hFfaif)3pV3Gl#8@fM)2Gl#83t&f)0lО0 #$Ӷ0Kfq& ߈!QlCR!f@qt_C4lC$Ӎqvl"fL#f3X 39L"Ñ=aƙͿ0sY 8kgf@qV۴'$.o$8+zr,f)3=#3ɬ'̐_}(3fKOIm08F0$383.fGoI'8@IV4gmHKs/qTMdx3oIk7/qG43dt~n -fhw8A0NV33ɊT3smgSgMOzy fI7 -fY If`Qd`&g0l/0_fa$~#$co$8/FqvY@!fFIa٥[aƙ -gCa٤.fax>3,T8:g]Iz3k3 1 3L GC"qҚ -^0  P-#m33mgȡPqv,3Τ3ʙ̐鱯7f\63^*z_`N6 oPU63kn3a(!qGv-f5m 3~vYYq kfV:{ ق<`ƙY[ݪ![ԥ8n3QC0k{qֱq6#{8T ~GMO ٍs~Mq~gV2N&_ cky{3F ykY{8Cqvh%v̐n0lj0Co8!kL-fU5m2sVfmm0Cb0 n`h0(f T !f 2$|_֖F1Zm`l`h3ڴ`L;0'k3D^ ̐F ieI}6 z{ zmǙ^\y i^nzg.)eȰ-zːSeU2d4^ŗ!:МM)Ǘ5tt |%x CeP#ːiy3k2dm0/CTPː\M/Ctǭ /ڐɀ7"^FSѦU< /~OFx,%p#dˊ-t.Ou"]&-䓋t쭛2uxF1m/!7S /-CU^~>-cdڼ0}˥ h`Э^jeh(0bϖulf;e /C6d2߳QːoelS^Lk&5[x|(n;^ x2_h[Hg!ُߖ.CF?lj24thyeA- YVbo˸o]9 4[tY<9 ,ppWe߷eJ/+rdC^ =`9ʕde8k4[xYᕖܔ/Cn1UnH/C֞uwxLo -GN/+SQplexQxp2d'!/ːa8VC̚mA/C.f!q)m;^VdCCEFfZ  _7@cf /CFWnQehU/C֌M; ݆^EVN/p(2\Mҡː4kyˤMzVQ^/CyTu^/E4oleNNuv;^*.\0le\Eeqe|Kk<leܑGu|Woː̭pպ7e4[|jJ6:L4ÈbPw΍.ᡃڊ f虄E: q^D`RA1]5uU6#3Je9 E vhZg`>RX ;9 EtLJ`T@ f(nr- *&`NXh[Wf3\xB7c؏- 8DXfr;n_^^y˸'7ڔ_e&7Т0fÎ-7/C,su~Q6[~Zˡ _wd0el˸܄^4҇f -XSֽ/C/[̅#etz>- { R eݺoz sbles|YG^teG1ƬdΗUd _Q-/s8 7 ي+-_7eTx_B+4z p|jԹNleFIéˎ]!&Ce蘌ӵm:d/z"2|#Lx_v`_ <_m+/;-2|V0!0fmB[HsȖ_Ff62|sͽ_!C!VwcCsm62drTa2d">w$Zjt2c spp 0IL0C.e L0gk:v\)!;pGG;a>^ ΫrcNv¬g;}U΍uhfYs a:V1lv3dE$-YjEosmM -.M ]w .ew0"]0q4v:ʁu-c]t}Ԛ pvJG)ѵkv`*uYA{`!@:nݡ~`q[? 090LЍ]G;`FQT|eSzľ07i!_uz &`\u0\;`i!ݑ.fw_lfuo2$S `1^{fKY:k63hՓG84\%Ҡ\s{[) /Pv G1fmRjTN6JsU9Qdu DlbjCG^S*ֹ:7-vZGI =lZje ^YS~W!3R뀩/Sjv -nY-5=\:{HShF#/n(zK E +CR]ʱ)RQkRjxHC\g7Z e!5~Rc|Cjl`_/ap-swH GiB!5!@ 5РCjXGOHm?HH >8Q{Y4!5,,\wH *m];HB*yaYv[vΨI);zfnAj8KS5ᨖe RÑ+z( 5K9:~!5gTLzH 68Ajo^ 5:f԰TJgvJ P1Z/еR(5PQjXYNRùQfKR Yɒ:jkn͖(-KAjX h RCMn蟲Cj Հh 5CjXj Aiӆ-H ܗGftz9|bsԓ?swԸ$:Ț0!)-IofOh0-c] 9.w\UܝRX8J MԳRiJe7CEsq-5{0[o<6x |;6-LmSR*v<[j>z,8Km`-54+HeGaRcoxŲIS`*ysՀ;1evP ٳSp.wP #UlT@5d&m,ƁKT,' X6Pm})wjduH!/j# &T;AS='(xj@XNa#hځKvv+\SCeYW=5-#{jP6i`ü]jP.TL[6" 6{NKl|55{и^hVX8^SW&45Y j^S,͚Ԡt |kj(0Bia_TP!4O{D E@3j'R(X6nWxEE Mp5?/i/*j}ʻugV5LWzWgE s̬C \QCIJ_DP+2mΐ_40s$jƟvW 5`panzCMcָiG60%G%Ck`zڜ|0jr?fFܳ01jE[5ںǗ4Ĩѥu-2j"ǨLGQ3Vj5P{acIF'{Qþ#FQD LV;k'F|eh5КQ+kҖ5ObJ!4=Q[uיQy84svu'#zdF5he[fV7̨n2Q[d2zdFmɌ[Ez͌j&L&1jLfV3̨f2QzSuQxCk5!yFmuɌ*I}UZ#dFƎhKjT|/5&F3}RhLYQt5x?Ka̝v[óvqs[ҚyErMͼviᴀ7dE 5"+jvvΕф )Wf^Q&A]}f^Qo#=O6gDmI6ul-#j4# QC{gYHʈ:tE?#jR ffQ[{XQ6~jtl~6%)liUo𘖱gN3 <jR.c?r_It{Nڰa|^~i]΋s~04|BՅ&i}|Z:4JxUn OӸm5x Oá[_AӸAGpS솄q[{Y?Okmh܌5sz?6Oig< cqYKxjR4>-xڢ3ѽ~ OsЛ:Vg9@Ӥ=EP.D#吲Ly:]=4zWd+i|Y:'93rr-i1de=it;s7iGE}f'ANv9:mz6zd5i4:4itof4l ـJ~[5/̈́.i5ݢP;菳5z\5KVQC݁N%vQԀSi$m-qcާ1kR;f͔=)~36"DcV$JM.EJmuI=M;4s\0Ӿ7IRo+&ImZ孑XQRC] -QRC=;F,0ʞQR&7(MQ%5^T|'Jjmf$cUy$I mxIvm$5l{kE-5dV;05Ѓ'zS=eHEPՐ᠙<pK5WW(~Ր*!vU WC+!YHJ5l5c5VCVxJNwmYh5nN;^9Z Zh5fzZ?d5DJhju/H 2z8ja5>SִUZՐU.,uM6X[!Mj(dP#!w>j{pո P[lsհ\5D bM9Wi̪!maU{IpՐ'wՐְ\5Fdmwոe^ֿ4jfOU^'.UC֭WpkUC]4.Pgq9DaIXjeVC(`Hs@!:,6Z wE6zZ H!Cpf[O^^t5dUzQWCml5$kj+FՐ F[ ,mZ -w"x[ YOoP{cUlՐXVCO++l5d]ոyV5w;vl5dZ.F\Ky9[ոwq5tIcNkq5d_fW{Wm 2sp5gknWC6W7jq5dΪM;j&:h5d+VC/mh5dh5>g@!>]fe7M8sYh5Z`!`덶EYsՐ*CL;V#MfljMj g2qȏ9[&ji`ս_P8j8}o|m5'u15jTWli5F8$8cmV4u5M{^?؁6^+rU;Ԯƫqv멃wGO9^+h -_CV[5Du _`w=W/GNXCzbVE_l3GQE MզPAX7c/-|b^XC6tkHXCH7 -k쒓o֐ɼEMXge9c?cuE'kx4c鹘 kVkHn-6i xbBo$0<:.yb M~ ֐]bGqU?'!鷹^XCF#gVyvIxj ,AXÈs>q/Zar3C54'!co0Vt5dlK-`@ sN(k. Xs!jaجi7jAWÄT;sZݛ$] s9٦!{pwhxA 6\w] -2Y2ljXSհ|"'8s/Ta Nrǫ!հ5Eqa;p5,5[w/IW7jM~W#vdq5,i^Lrp5,Ġau6C o;ݯsV -H^I[fPZٮ(fհL_y5^9 8juq9y5,x~x5!WÆΉbY;KsMjbR|x̊I5tZ];8oհ )76^wK9u5lt5V^u5YWP{+pW;ay5f M}5l,M,j aHK 3v=7FwZȽ_%,* Vv6u6j`8:61zjhCi ~WcH5KE^ US@P+jm]QWv~jMY΂|͎MϦfNWuF^ ;:IC+j˺B!ur)iNW艪fv+#jNpWQWKڹ$_ɆWM5QͲ*5>cB\\քnRnT)=(YyLh{k^XBלWx` M"yXC) &TlVH1Fm^lOeXZ7:6 ]aYCącY(?kmneqѳYsZ֪نl?5(*uʚ5U |ZF?5<\P3emvdW-y=E& @-P3A23w_S'+]'׎Lgt777[; GFcR&ʚJie-r1{=C~'`In@#e-$ϑƛ,4R@YjV(kbUZfbVZYGwu5NɛDYGč5B)fE9NL:+B} k0ɻ(k7M5:!kl6{)t;;Xŕr:W2E1ֺ=3h;t6|YcIPL5)k\9M5Q&韑E[FRK;&Z&ZW DG7XUDYq$an>4"Gk];v)kjc˻x#e- )'VD@YPEwL5NJ!kNmG)`OLKr]aXk=!\ &b /2!+PhZXc7T[u"hNPF*JkEZWF"oe5nek "ݤib>" -12C=t` 5 ڟ0!֘c%hhƷl#blQĚWXXqrkkXXI䥕50ָX61֤19c@9a`:?VҀXc;SibߵkT΁F -ndфGFk.a#cMlj~Q,Aczi크9#d&nv4BxOBBi ƞy/~c:Fw[i+8bހ=5b'0#cͥCddXG}~z=dMT0;Țbd kt*YI3u=5P>~=dhSTFK#bx9]T >>@ k<dPݍ5;@H= OY#d1 J⎾eM]$%fCYsKfG#dg1Bּ|O5KrB N{cҭѴ&ˏYs;P3xή<ӴL/Gʚ:Pք̅UOY#ec:PּUJY#&T:CYA&zʚgI5%x~ц)k<bG̚TR` m±O˙3: 58΀YzJG(B>[^fĬy{[1HYZY/nћ9j6RhpՉbiAsy1ş#f oz@Y7dˀY◜ifq50k$KzRk5r/eKMq@Y> p:Ph$~6@Y$]YcтE9k,[pM9kt,S[➳ƒt]TZìi­,#fM@gQ?f-ȃ+Y ͷwĬCxu0kxgtkYR -:Dz%!sŬu " jwوYcu0kdi\0aĬպ㑲}|cdnWͳ#dn =0Ơd 3Z%YT [Ycc;!k:-q>RhtᥡYSXQvo[YHY/ԈR_RͧFNu^)khVgefMk(\F t4Q֨F"~hF uF)Su(OѣFeֵ:@֨%f Y(~s F -Z1@(:$EiLFXRn^(kQFjsQ bQCLSHbF wc F ߷y5ӪFj:5koCQkCXye5!!0yS5 =G55scM ֭gQrg kԺvF 3QFu)kiZYOdRj灱ڤy 5Tbo`Qc5jaCw9Mk5jKK45CpRF&7@ֈll%k{` qBg`Zc8!Eӷ>'wU^v Q+F -Rl& +AaQJԨ:=LR8 -/k`3.XGlF-PArWP3زg+C60mG63fi8)c3`6&MZ:9̈́ÁLkh3r8n-fԺ#mF ;Zۡͨoִth3;S9ͨYb55:ռP7#ܫ{ |4nF$/Wwv=, _fIL7*DxNv>NYY=0Rjh80s0ҽZ=,Ԟ߁=݌%1X`){fQr3큛ei$ֆ{"FWY3aP'bö=l3ŧvd.#,AsLnnffbBVo$nkEf>GmFRx42ɚR^X.S -4a5h3ڏfbsOlw8\mjm?׳X-c,=l3avITn(l^3m^efe.ml3<#ی23X/f, %g7+S{Op3V<́mVd]] GY"3͊ԯ>_K6cŌZVabF0ֱX0S6c$TabFP1{͊F q8q:֣X1޴mƊ )b@рDjz}5YIrVɡڬLYGxY``Nj3aNF;^'IFY#jg=Xs2m% pK; yIUL0Yp3V4acD]zn` /(V6FmƻuŚFK_m!DG]Kh]=" `dHYmFE( Ot3<#ތ-G(ٸ2ތ-)ůnFMno]J-֚0. ٟfR¢}_3foN#݌~ jQ,~fBJz#ΎdQCԓfp%f -u;̈́;ճͨumFM gf/y֗mF wu1fBfzzֹ6f$Ifm -^l@QCxROMim&@S,t6#Щmm&5-]{ޱ(!f0{ -l6mF 05ͨyxܳ6HԳfIX!.G=`3)$~`39 6cyڑ h&/ -/{f,:RyfRs2V˩0c%R͡d30=~#h{2 ːc=ٌ@yp$9#ڌe7H8cʩ;ę4q&-o]g,LzƙVTqJkabt1X 8DUjw@ʢ[O4u#μT]c3g @]0ƙ,g"!glh#̋97ǥr~|u(g<&o!M)g<{&+<5HQ{SP bS=(gJN)gȯ3ޤrVvfAάo7ޱÜnSDzbXr6ca9lh9 橸IJ6mƜb(s+aC9K33}VʙŴr&ŵ͔3DfYLԆr&˚~nqVA;ƙs{8KfPaF2΂1Uw@N+A3ثrV1șʺ$ rVJI{Y: -9rV7rXݎr&~I19cfٕl\9g5a|Dl0guo1g򐉶bjy]<{RR -:F2mi㜥y+ q8fs+,t7!6Τ&Ftft7fϲޛ6Z}:kd 6@g;]9g'd9G;Y=qĜδs-ŧeؚ ,n!+&v3w3IJi3,a5۴,YJ:;ؐtRukuVO6vaiҴuP061†u&0i3VXgLBme5u&!uVY,ݠդtJ73Њ:lJ:F\L:S r&ҙ+ +"/j3631Cw3׶ SRUY}ʙ7k lqr&r*U gj6-96q&ș8WMVB!r&Ѵ rZw736A|30m)0\rVqx&qng-AȽC5C 6:Oa5_ V0Ě61μqV -\g*W4[g'!Κiqƾgf,?M3a:&YeOgaYgs8tYTmF=qW2ڄ8#P'qfVtTل8㷠38{5+,q~+ lg\t] gW= 2ԭ߂8{l 63*sF-]gX͈3(]k=! -86.B8SFYlY< L+9mgu"!9л"٪޴pd[ β;ęk qVb 3%?AYAEi4#Θ -d̊8KzT|ogּxgxC8x+Lc~ -f8-|7*VYYv}+L,}q^fY 26p3mMp36B#p꫷aI1ƙm&QaҔlͺj,W ̋#Zk5G V&b>0cm6K6͞r ڬ"&I~{Գl֎ G&TFoEYi8lF' _ha`͘x9*mq8#i]iE+ ݟkśƴk֚h7\ ӁNS+L*e9&첉kk%k5{+֬51nfs6BX-`3q `3̘z qS߹k%I#5jj52kfUk Ԭ\Ǫy嚩h ̩ݽ]1m vៀZcB6ca -7d3_Ml!J4Xfv-߀*x5K7m54OW>MfmL5{Wf9jG5FHTZTՊP!+lML+c6mb5Ċ4d3]u{ \=:TB4kd.H3m5mB(m4>Wq ҬlfrXبi6H"ͺ-H3& ͂p6!Ͱ }5#ZĊ4sbE}[ i&F_fnAuiZq̊4[kH횑f"|[foVH3ZG"Bhv  v6 ͤ|Lfx']4{ϸGՎ{4Ijc-HΡVV8F)B[fxFYbc,jky4aaE Ӭѝh3Lםiӌe0ufDfBmVj$W:GmP3,|v -BNi P3uA T3+֌ݡkg&8JkâfRnnƚcYnƚ ʾkl!uͰK>͘/ӘfUe%d(mfaفpKw+ RmX.h3)yA95mF=#+ڬՁdPJ6-h3;6.7KANp /p35o0 7fңdXf) 7ȗAf ͂ۜf͎p37=rn3,[n5 t3k!Jn[\T ,9YtǛq͘{nƎe#>p3`ak{m&jG6li3,ȽbVC{ɫ~y 7Cê`'dno -7m3ܬZYm?DVb q4mqAM]f: 4v\f^fgǗfͦ |3V3m7{LVS1fYpyuo\3߬P|39 \fՐ{}qlgɛfs׽Z^fѲ Lua4HLgx᭐~:fQ딳&L|3f;7xiZf̈́unok/tdi#݌ߞmo3݌_Ot3֔xw3qXfo`@7:2 ->fI:ͼUB7;jͤ t3;ӱt3bvtR&)FEfB74`fǓaҾn,p3N|x3lrUfÂ7cDd Lsg~Û"ɻ0fעo 3mڀ7Kj^]fެ;&Yf#C07N7carݕ |3IHӁIߌrz|3 |mda[^f -x3bzܴovzӡx3iy5ڈ7Hg҃7cu/Xf2o>\[fW-iW;Z:"6c=ݬ3͸`a6E ݌y=fbT ͤXV3#3ތV͢PqތaoF -flelo㳦x3fq\o=Ս/xeOx3$o;Ќ7Kg |C\fNi,J>U7{ -~;xän f"24 -f4Ɍ7NufE,Z[Ng7 ]bƛ[,0oFhS|Y"UŢM|Ztx3/ L7oFr18MbIUoÝg$ki7͸օo6m.ff%Ľ-;͔;ʌ7D]-Ue9g4/|3Y7Fo>l9WYW p{+Gn73-,iΧjތ!eܰ oIxfc:o&}?ZCcn S,tDCof<t:mfO7co/p36LpL_ ی}-T^flmW0 -4-t3jj݌s(j#UB7 O:tum: ތgh~yo›II of-zo; ̂7CbC x'1h>*L7#& ,֚ ݌rƼ\fLWm)`ی[+Xf9~mfnYfI- nFm~n&'Zf깒%;^fkśe5˛f, 707k7Sk(|3\Zefal5 ,=F+i]fO7{7Cx+ ߌŷ>͞"ovYf'a~Q>'0cv?yǘ~0+ 3fwY<RϘÏ19̘Ï1,cz}fGxfy?yǘ^3K_n;F"'oS~}Fs'y ?zǨ^s/;F9NCdc#1~Q`FNlxH^NjVn1>;n;F<^X~zb=~Q:r>m5x̿1)Pw?ӫty#|ou6wOH?ǟ]g|?_Gujz,|9?džO/:>>1CcGЧ@{>=?6|x0cgX|vl-`c3ѧ.O/ڇ>>? }z8l`)-BŸ{>=h -p Ӄύ?;~>>?|z8Si)wKIK>@A ?`fߡŊÙff͇>8L[i[mQ|x sݷKl7wž2Λ|b_ M/ g2gW3;y%KÙ,` p~&ؗ3yoBa8~8or}e8l?7Ͼ2nΛ|g_3; =l7w9;4Yv{,f_l)M޲/ gSٗ3y+ÙcF̶pp&a81}e8Ql?79ƾ2!Λb_d ; =/"&O~8o2}i80&S3 㙚Ŕλi_FM g&?W3y+ÙgɁLpc=p&a8}e8l?7;4\v[\f_*ۏM g&_W3y+g l7w9ɾ49v{,d_lMޱ/ gؗΥ&~8or10[kgb6ľa>٠|,fٳ oGb6Tq8=|,fٳ oGbp>^0ŌY̆8g18Ϟlp>z Y̆7 g18Ϟl~p>zMY̆7g18Ϟl}p>zY̆7g1L4l|p>{MY̶4sK3a8>ِ|,fٳ pgb6q8=|,fѳ ogbV4Olh>{AY̆7g10l(~p>zY̆7 g1`8Ϟ}1(w[ϋ4w`toǟzEӗ|^ZEpwu,_y|gیwn(?OHn!;CǿH!A]4ӝ4%9S_槾?ⵧ?/~n㊞1t* ƷlE}:2<ʾ *|dhJx7Q֗ڙq5>P=ʛ>t3Ɂ7pEioﰐ`:ψi,>G~rn>L1n.3Ynr˻V @CNŗon{qvh4<9amAh.N˘ϼyR;8dh^Pv|i*s7&V.?`v)q^|Nʅ_.sA懧A٥ח]+~+a˃}fk3LGg{9br aLdpx7n=ks x.Wf^́)L.7 xi%9a_5a{O0cuhq]6oX*3,-\pq\rY5!N tLq|%L.siXq4nY5)t[fub -b7c&ՕCC)Rls>-Vh[u\Nãqyϥhis׋G<cm$AK<@(#3l!%m t kxM|" sCK6 ] '7ח E5HLӸt7=_P+w*̩MB xd?mqlHةpn.A6R(nFYD@\ !H\|,Wbu"qmH]/҅Ħw#k ɭ}ZwBS% G6 ;#1{'jص$JsyRhQu$ EgӒ&xȤ~ŲU*o>p1riLiy,rUB쌕ycyި^h9yXw"ELry ˕ryoI;0_?-+L~Uad/LNczzrU?Prj/ 5X, ﵠivu[; s'䙱z{Xc+[ʮG5=NsB\q:Ӱ RixjG}PDXqxWPړ´7sUa*a)U n:ݹi]Rvu;M&ЦT<:Mxd[I9/lx>d׫ }Ѡ%.jO*l_?|{UѳbbiT* љjgL--³W - -OǑL$ғ=jxryU%6`W&#_vM&QjhsD(R4gE~KΤ(=YrrصUd/u[$uᡕ0jC0cg^QѰJcH3-A* l "Sw- KgETi OJMfQ=ZDwnz4=vLWIR:+CfuV.hb?wtG&Q}Ǹ<`^n -W mNE줱JO)I B:%|{wJ(-eiy.x/zLlkj eZ$Gt*qK_9<9Fl$׶BFaomGm)Vǃoߦ㡙H[ι%gWfRL8UczRX p>I,ًVm03%\vU5t=ǒtw b/4|2B#z}^M B'X5WZ:K D -oW aU7ôiju28ͪ1署'UEae`!j =|V40I<-U4K`-Ul7}"ljx(t℆hmV""9:ZN" b},%KrYΤɥ -gCǥ)K*f@  <q5Ar(f\t_m06 /aW[hX]O* pC.VX-05Q 34: aĮzqXVPCwzUBlb5+z{/'XX'J5ϸ2 Kf^̕j<2 -/q/\U9cojb7YO~.<4v^5U4jߛQhrYmG.̙0E]R{ӰU4\&L7sxrZwTo\$^˔lY|>Zdq{Z*aKzMU˶i0ݨaWǪ|כMO-$U\˦IFǒYU(/kDEv -b!-jxPtZ7<i Q'N3e!L尲F*;[YRz{.taF),`4Xf'Js ct*Vqw~֙4˒Lɭt,~ >jj'^]h9,;S)f-̴3saa zGWDc@X5,4 c0uaʖ(vqf\44ܱ8вXxJ#IfZėTWZA -^ Lu2+/d&4)Ȧf-+VV jlݸ‡$U -&Fd*G}I%xQC؇'{iR`MBC$b_8S^Zv ^=ObYou=*ݣCBj>YdT6v*&br(y6ZgN-?դnF,wa` -'LrgW)iXЂNvuTA٭eԈHb<74DWGOMYT -hXWOT4 P aX oUA?"]GrrdW"Jk٫oL~Jg4<1UR㓑}a)\3X%,iqlĽXjnZiκ"_WX5>&b2)5x,}e۪an¯ s^IJȹJ,縼i}A3 8QJeSCT{M_a Dtb+|5M7`w԰f("YUc.y ]t=9 Xb` -D &{rwdK:-اTZUs4U R(y[YZR/穟5ࢦkcAhZТ0o<אٴe -z)%.f|R,6-)=a5l0{έy dfZ“W QR=iJJ/WGmU*·yuxh;,>gn;"1)5ZG<:a[+<RͳYUehwXUj[y'@|W.>l sE^ljp$[T?leMB#F̚>Z)Zhgj>YcU UsK:9Jci1قm<C$@Õk\4<n_8>@49VIj)u6nfڜ2.)۰CX,eX6Ԃ8ʛ$\ )./kez@'yWWaΦTPzq8aU-./[9dMqiYe*qjuĒ$jcH:S;{wowB\Dy+h5MK>qHdGlC5jMzMb!/b0Q?%;Ib1/jU'Za }T!^ :X&cfla6ŏϛl1sTLQb p?}[RKSX t2CSXlx2Kb`N :ȣjo~ ~e9ɯL/H+$-KMOM^"& DD)Mc$ӣe"a!:McIͥ)CN/j=|ISU`9eKTC(}H55LИ# -)k&zE5^W7L^r"q_dɒĴVC-SӆK1hxФ!H RIu%hMqiSh_]wD_س ! vGwFk_a{Ԝ,)|eIas/ Dw!،t)Z Iz~Dc1pmy}%uR'Sj ʒ:!_q2kx aRB `GhKAl)6S)%vju楏Aj -R/, 5_S\0jJО,iq5d4i(GO0OIR$EWJx**ITYxo; h$+$% ,j5.r~Mqcϱ.4h-&q^4.Z})4*Vgqg?\Rj-+w`Qqzq[(hF2w.Ev&irMz!,R./cP5UjL V 3!Z -8z.kґZzJ-`_hd!L]RX:R$S<9fw.\5X(XW_e"Jv)`2ar먵:©Y0%HazȒxo)hJv`b:BӼb \SO#=gx|5|}i'̎ _1W2 Hd=ŧSEeq[&fL_Folٖ b -tKRrֲy$ZQ5,Lzd ̃zL40Qc1C2۔Dggc-Y~Bh=j0aR)r{H 'ђLKe5ѦTgth$B鉓[ԦB -NI\2_Li$.e%SF.#W{Q񜈒f0{ C IbâX%eM{jX vMIw`|<tHeWPZjxԿEvVqTYqi -MbNԂ @TuSˌ$%I:DEM>r=pų?#O5РafĊ90X1>F4XQ4,NM))uAwR` iM?ԀA늗b!: QsLd9jr1 ݒ<5Bq&l!eOɠ%Ĩ$xքWF;)KQ#$)/.(yJqxV:I򈾈=g6RZfO;9xףkjR 'V̑5:̖'bSs"1}[R% aSM׶Sv©閺xcI\dxB/9fF$V̑Y9!j>tbf'KkBE+͵Gr I$E-+DfU|6=ͪa]ǯ}OZ`-mbLOjb^ i-5uE-x:™xl2P%z&;fi]"3|O5a6tZ ʴeFĤE.ieQ%5lt -(o4py}EIoK-kp S ߳:KUSa:KR-L "t'C t.*Sj"%xdS&EpbLկQ,z0!-o mq{jbs.r;}+9ņY 1i{ _PvJxtu_n5k'%eR[&:B[MN2C+[VQljÙv]֗ؾin*@>%ӬWǷZ!aJpYPUF#_IzE$SL;9%Ԃ!JE2DD3fbu֠&V`=:(8_囮x/Qgҩ YxZ&dQA~*未'BŚٿSI|tA#5:a~c^!5R(E|$|x -X4 -R@qBرU?Js+`UtAJN&SjJhИ|[Yr,cO-zj4+ebfyg'Z"+ѯ@ < }lx[cIEaR*lքQ&nE"ȸ8<3{0aNhx^F@Ze/mۤvaEgyR -i -ˆ8jLKZUDS+yӮxFhʰ1E;>WgT3F -6v)?G"g tӝKѱm)[s4Yˎ͝E49`էݙDf8o R$T+bvtrהnvtLY75vj[V -h.+c7]N;,6-֤35ͷ>|cY,:E=ne6nּUXA4|R;`$n]@^DeԵM]\&@[q5ǸS=*.jMe,ȶU˂TW0mĘ%YG̴cW&Ba˅i# /ycDD+,]cS^1f1_̽aς13Ǜ{C1'9M)fs4X)fjM)fOe7ŜY5Yh;bƚX73k/7Y7.ަ3u] 1Ӿ 3oi{1(, 1V3bX3o{1{,]V;ec1k{af;{0sj{3kt_ flN=J0'i{C0s.kH0Ug"3<m&Ɍ&qJ0;ͼP+9,[ fmVYua7q%HUWY7㬹`ֹ,Ú\Df-޿W>h0#̎0hT bU 쨦1;r̎ +Ke ^7 ,3>ƭh3_Tbqi +ǰ;5+q8fw9j'`C;@֎H`@.<bdR M}w:XP\v83bu9ycywňFMzw>UV4ReؙFJ$3cIURb;ɲDZD=3[bbNwI :cvN!B=qȫ:q|hWZ2CHsxck_7e/Y9AF&OjdX~ȰJi$L&+7lh)\+獺aYˠ: KH-41!K?T5 }'<2j1zJ6G;q[ѫ_/xD~ +"PvB2Ҁnؿ}#jqȠꡑS^#I*ى caZ` M +]^9c.qi1 m̭%op/==4:yK_݋m2,2.n[* +ǥ29Յ3$]#kk~ C +P""/W0 +V%pⰞu=})=rم#ǐGCtybB[x}Şvj4F %B .=lJ$ ǐׇbbdLCѤdt,Lk/Od;hb%7xy}8޺~ 'L#xY"sEFWZ}khn}?kg8\C`X<>njsӫjP:hqBS+}6^+qϮDhCpO1=(;͆5{Px, <{/z,فnhD!,Dm5 +$+@!DZ:;g 5'hRs+dى2j7DM m]^=қ5ѯ8nyctY(V.S! lE^ͳtj\&STh#uǸf r,\ 5m4͚OA}=pK\oB[3,a&YHt}4˼LdN$+&Z!<Gc~FU|SrϬ4֞o?mZ$Jΰz\&zɰY=d-:n+ȸ>ޚ=rD4CcגiЯ> +PNp!/c!#$Mݭ qF]ݤlhdcZNw52T\NWCw ++-Ev|2q+i{hF8;==ZITh'9P~0.nT:UXpdCInHhtK׬|)=4P(o)Y%tӣ! C^]ՍiͤD(]?䩍Xp; +u0F@% +/Q7S3w|a /aDtӢFxhN!3MUn,XcY@7-:V?U +8%EO:lōZG4Ü ϐxSFȆ3"ѼJ#lZqv(~oCƵic=%9: UČL;HFcjS7>mE3ŃCd8d%wdZu }YkU>P/{ut%*ᐡP 7Mr@5o_BwʼNqflIqψC+[6=ѭ[RvX3 +prG@]*XupWy[R4f뉌ӪFU +}s2 +6޹XD-7 m) ,2oʱ]MKzw-o up$!$Î"#!yK'%}`[p%([Go6(م ǐ\]`X=2@mK;UP"eh^$YNF_cHVU# +nӀ;yu +=Lb`MٜJN..&)ىJ l g5 mQڍ3fW|%ѷ 9ϣ5 k*]kh)׈Nt + +OdΉJ!>=#lo?vQB}ye u5{P~e[!)5\zщS<'FUA2̜ysnLFpps3!AB9G6ѡ8>XǤY>hG>ԻsVaz4}З|tXo~n su^-IJoׁrnEF-f,>5=hSn6V.r:O:i^]yFe?ϓ7dh&1z=(v(N`y6=Y70źş)S%)Lonʹqv_DZ\A61)KxǨXAhI, `!5k1A8ʶώw6CzN]q~;p`N`Udto <]8[IcYB .fßZ}HD!}XHDa34\2t 4yGXS#|h َ)"Cߴ_yY2ms sHїEM,YA߉%yŠ[;Gt7n_pl4Jþjv#Vy}אah|A2qvʰ!>dW)@Fcb/}Є`Ta-t(XkG 3K3'.y@A +dٷh1>pq賹s⫯8Ю~'W.W;Dl'drZ}P}`q,Ǭ; k kKur)a+I-#N ]N>{ q@fÖOtOMmyNnwz~ΞbGkBGoc0!>m҆Luzyqg;xr#yL.ZW e(4Z9( HѴ thp-2 +.=SAf4"NKN74GFCB8x' +U׉9X4kR7- +OASG)#P d5/6hAv!L.2Xxpyd `Di]4=!;#2);}%aW C?d\UN$V[|V-Z39VmۑMZ-jtma5lg +?EUCiVVœĪQJ ,y3m<&V`ɑUògĪO FZU}j,k?%jIG.)̣jPET gd'j(vFTU;GTMW9)fUvmܖhQ5r<5jTz6Vd3T[زF-ݠL{fS j\q%oX2ՆR̛jrx_y2Ն,SڸWAKUT4Gs"htTqkIMr OgZ&l?HrgIn%R %KTӻ&TnCfPmɠKA>IPw"Ft[lԸnsj|R'NNdD89$NR;qjahMt362̩a4.͢dNOt,Mv<ْ,`jtLYF.ߓF dKR;i(3?] Ϫ]f7{jh}Xɢ(}32#RX:jc̤ѭk{Ī5sڡuҜ5N)jtnڢ:jh JƒI ]IaEoЗxY+&^u#KAO$^muI=O/Fw5IWÄOW撮U*%] ѺxuzJV"63IWÿacv@P~,j('zxլ u5Mr7jX4'jop5)6j[gkE9j7jzsW=(w5,8JXCgZeE˕1/5ncEZCVeHk6o eLɳ7zku/ 2.-m*{k5d֐J$g/tC-xk֊K5Xsװѹ֐ѧ,{c[BhT *x}wuHl䜷VLoMvCux-q\t=5ڤ5t¢Xl֐U1h.[V֐qEe2Lo֐M!Xk8zs^Xm\m ]ZRFn 54Oq~<]7Ov6m ݲ5dU@Q[CZZBm ]H֐wA[\\٦`W9mrt[5 Xo4m285d4ǡlu:q0I(q5dZQFl ٚzlY7!T۰5 +]Z#]֐qVlвq;3 ѤP /hka6m YeaYn[kk|Vo^[C&mI6m w_z4۴5dMQ[Cv1$m *֐ay@݌n6m C!7rkpNZ[CF_[:qYoqsk[ ء/~~[w(m:ykL4xku[C~!PDzo[ϡ֐~yk\}yݗdߺ5d:xڪ\D[2;{kȦ65d +[C/o ٦9oM 8o][ʃ4yo BoxG\C6 @ 28mא-ǃkȖ5ΰep!,Bp O4v5άf!kn&q6E/q6M/!,kM/NjkE/\!3ս5k,lI8xp m +|\h?SHWN5J0wG .g7Zx%_CVs5"5d\-k|=5C^е^5W1D٦![ԦW*zxT߃rIGP.ި!ծթ=]C$UoDمK ]C؎fʣ5~Ƣ~lSsͫkYrսD5k<0£kr`(Ϯ!36v #lcאiә7kumU]8LűkOwo>ص;Fzv _$#X\8v6odאƵmZNu y%k{\.ku2 +oTWE 2,PxtgP0Vu5d3{V;0ͩkv9a +txB]a ZlCאaH?A ]Ղ0Jɹbv=&Js8t 䫏YmE28s,˩k( u kD0k4IC![ak]0wX}ǮaU<ƫ\ęc׸ϼRo^]Ult5,hƮaXE]2.7ٹkXEnZ5w&kXs5,ːțkXs'5&-5޽b@ai \c.ii| װsvo-e O1Q $è\NݚUxr!\6e%\ nAI۲kLqIhUdaJ;$s l<4sMm3kxq7k_vMZ\ᬳL#"vʩk(ѵ5ܞhhنuC ]sZͧ<CO]Q]K0@zusc-j5(=\PװƇy 3 &m7<͖zuddེףhGʠzvl:kٞ]\Y5.V ذ"ax v5ܰO>hkY36E&'|hcPԭ!k̹kW]Y5zA+=om+صcƮ]j +5yv O1Q4صm]᪗Ļk8h<JxmMjReź;Gm^;aO5O)=d?kX鏭yx ysx ^aNGzx %2ik8fy]vU)k`4kL]zL;k[sڵ7 h0~ 6wB"k5|nnrΖ?m1>#`,af9w glsp,OmNU̝ Ϯt6\Q5loT0.[5sZe~lk[U,pk8^=\lkh*SΕNeߑk ʱ\^48%.blNa\] V+NUUNՓk:e™kp>-o7*ҕwǶ̵UIe:c+{|2 Zɴ{xt '׼et --t }xZaCתLw5ni=3θP[=҄ IoU{3;mk<&5^~\áyt >Znƶ/5YMeaWvU[ZdV5l +7m-eڣka|DD׸t;h^V}A|^;mf m-t ]~Ϸޘ]v<5lAs?Ȗ545u ZGrw0g{t UYJC*!z֣kZG׸M@Vq&]UPfz<6r ZǡՅzt [УkhOPUUlkF%]64%yGк@GAy8t {|]C_zu7"i59]]C[m}ָ'S׀xRfK]C*NZJ=/t͖f Mh5lS7k:)q^]Î?=>=vuqGȜx!\2h7k(ֆWO  +5H7?4[3LhW7^]Cㆫ 9O=nF2^qZ:g5\5@\A)۩]k\Zk9H[Z鰽Yﮡ8 蚺]C'>Wl.mwPppﮡK־gd nM1|jZ]uJӦ]ֽ3]Cs khɼsאaZ@]\ѹf!eEy/Oرkץe]C},Wyf]ܩ4ֱs';|J/JϮYj5-#:u *ag&ua5[yu޼C]C3 ދ;,[j.n?wFPt!Ogr&ңkhtA7-*2N`ytsq=5|Uܙk76w7אglknBsy7(hͦ6xN24Ӧ9XG!&ػD143w΀-+#52Yꗯʎ!Ɔ6eu#>S׀ !鎮 )׸kTĹkb]CFwh}Lwm.Sאѵ^!AbpJ-]bPa5!~mo!丱cm}.!ߜm2Opd&l)ƘB h'Twu tڦ u6A5 ٺ5dmMwv ѹ^6dtz$٦ Ffk.-Ry=6 ]C0fyή^m2i)ή(t{j2ak@nJhה5tӃCF[ap2`TY42:٭3;Mֽ繪mz:xQזΐB9n!#e:q\AQghI!91]:C{@Eh;u^c&ulB_:cc9 ,DZ=w }G:Cv^;uv:!2ߩ3deQg6O: HF=Aw -dSgA@ngrMQɞtjT64Qgh1g;u#8-:CSͦuvm +bpT:C=\-Ķ3:\aoc3]ec V1o1](Q]$KnM'IAIM\ݑvO9, $oqF-c(kgoyЀ8igIj+; %3;.>V;CQlή{oN3Tɛxu]ix3.yx fXyP0S:Sg?; 2v edgth3s7Sgx8E`?V㩳M G`X;:ym:g-t{2QnPb{ooPiтI`'Cgh#B[wp>U3Y-=t6; e[ٕKgnp˖t^!zF3t6U^:{x-eDQ:H䤳e/Jgr1V~Q:7):|uIt?}ΐ QL32IgPe\&thr{K\ !ۦ:CG@ bj!PYf9c`Ɯ!9W\ǜAiMDG\9cim@8  No'Лƶ1g;&sމf6 uʿ!z"X3^si_9C\8 *&z +63g.fwXZ眝{Gp Fѕ79C2`33dۘ1g1g'{W6SηP)g'YA/0g`i=Hr5SX.lg40g\{UʢN%Ğ9Cuj3T^R31뙙3T^sVIgP_GC3:6߷;gNr*a.hx e_Ȝq,dꩀyϜ30[2sVyst~5sʡK>_dPYq3Z3}6FkgP@ƛgVθXhqEi=ǽrʔ]ە31i3Vsn,,Ǔcΰ^G9Ϝ5^Tő9CS>3gh<@o>3F/BgMcwΰ_9pYa?nV{sjHp0 +=847=k.36MY_*g85hhg9 ;;m*uf⿬6JhYQחuRhsЂu^3ox3m[%]Nm!pC:ڼ[:},Y/W"5Kҙ'tv)R2t6;qdu? =]|@g: :c +TIg%>3}8g:rΤ\t8i3k,9{Pά)اrO_0TK9ӥ/Y93i3;4̙bNAbΪbn=|ŜHG@љsSUs(f929k>|0gM3sM` qҭYdh\3if9c.sƏ5̜5 gtϑ;rf3/5 mWfv3PάK9-/J:?ڊNY9E/e7AM,0gsMrfC_ʙ)gϩʬYrִ 9" 9/g91qRc'2s6|0gjeKվ_ `Κ|1gݚE s2tևQЙθ$ YkѳVo*9drfs6s6]LO,欷ddh\E9{/sf׾3;jL a#Ĝ\939*],:gV᜵jsviawv1a̎~el|9gFx:3O&>-a,5 Й@?%_ʧf:{T +Ϊc_YM:vt֬tFb:ۅ|osvU]!pfEćs7;g-Cv;/M99s⛘Se춉rf_dѥ["~qf p&|nq&`g8,gvq&EO5g\14 كuaqvZq6??V@ Y"ΆP|grA3/Nl$ΰMuC8Y8H,gv>~g -qvFXfLiY3~ g~`CM/l3 gC:MpvޏBRY8k(Yւf)lvpCbY8\Y~%l-d{ߚ9Lݙb}g|Ƴk3'2,gA&r첖Yޏ8⌞"q5k%l +3p֬mpFwq6A8Ct+Fl88]>yV)gMq6@6ͼqj>yZ9s<#g0P(#gܼșd}?G9jdx3ntoƺd7Sͼ͸DŨ0XќlK dS͚NK~fq6{6'2mFw Hff6;u~f7Jp%KYq85 ue6MRnIfla̶:a͆͢l%lA 7+̶N˴n/ cm6df)6Rfi/졏2,f?DڌFdH@iK6CA3mv^8fL_'dp6Q#ou]`yl3fl3TimjmZYim3l%KKdбf6[}mm6Lqlm6+_>hy~#fc ?h>9DY[>h37i 5󴙶G,f>has6q6LIL Yihʹ>h~ *i3lFLNH!˴,ϴח6/ڌ4ƞڌ i3_l6,U^&IK62_\ͤ[%}f/ 42lF/TBY)Ȱ٬\Ց4fҧblYI"km]3aZp|xelq'5jvͶK,Rpl>dl~fXS3f<ҕkVOkwY3eEl#jV9Wշ+f+ٺ"jF Oj)Q5ۺf(M䚍9ˮVѾycF6)f(>fka5foR=QpߪG)fEV匚-Ϩ(uxP3@YS簙SB͜P3i*dDͤ _p<yԌyԬhC5!ϼjFovʪ64OY]ݝk7kRAq$֬)$֌.q,Y3ΗX{UMI(RLVȍ.scdpF9l<ҒJ3ǚ VU8fGgLEOY"f54fFERU& eMolU=eƔyӌ=G΂ivnjy5ڛQUeN5;ϠWʹXmERZ"PRʹ 5gQ5[]f.5bIѝ;jh3CЉ6ây6BU"mFSYF۬9'i Q5COLMm& +l6Bh3i;4YPZ6b͆6 7zڌw6î3 ?$l|ϴ}g!lh4K6],9Ga +g6Y祝Hm$ڬ,))fgCY|@3GXhrINjRicJ$ڬAUf('^`l<]ϰY25=~fc{L&Flо5+wv͚H~ k׸ȚVWwQ2kƧIY5cM,l% QyLi˟\3S ٩41f،F<+2fx"f*7l3zmba%$n]3gIWa6kv6;m֫n|f 3mv {6{&a3je3 Ve3>э/Z+i3t!.f8-6['@mvg6{eYϛdm*Q60Y4fhUGd^ͮklFCSw_lFSjd˹I6٬EY6㶄O1f:0lͤa?d3z̲t+9l۱Ni@{f!`QlFwS;nE .ElG (]9d3'Ӷ6g<i.~5rݿ.thdZ:le֡'٬ +&Lf$gͶ{Xnݰ|?`3_Y٤pr.Q4}H5"Ϛ1N-u֜EႰcy#frdlS5&8'ӬoU4d}f n6 n̙fZfe:nvd4{]P4tI6fr& Yi/=ic/ 47"iFw-9F΂jK%ԬVH6f`ڍ\GViT͸+Q5C)9Q57frոfN5KGj}̡fg@=ݸY)fphLֵͦZO~iF,T"̀?I32f4PDیxҌ(mM`T0ͮ^M Q2=G=3PlWr4Ћ4*fרv9UޠPZ&kPg*'ՌnT3jfE첊7f\fuu$ =< %ahj9 +NDԌRC͆5~jv@վ;j6O>Qv6I(V41&ӌٹZD #mQÏY{ތk?5CEL.RWjj DӌrPM٣vӌ _4:M3n޾P3 +k7fn]ԊnM4-Yhj5,39Ԍ.bt-9ԌfJYD0jFը]K>]&ԬIj%l.5ӝCͰM2jFҽ1fsͨY=Am57jJhfeh5kw_B@N,zD -_5s .s8@E2͸'4xZ+i [vli{q"iGFҬ̙fciP4[4|l4ۿF4ه:4ævLY-J.VDo[1lfcgJiNO1%Li&܌"i"ڽ,fk}IYE3-j̋fko$_n'7G; Y+0',kM8fҌwQthI A4iG%U.RQ ͤog#i4lҌfL^Yɽg9G=u)' "i:ƯGҌ&H3i"ɑ474s愦{ fgbixY'b'an&ѬmP/fʬew"Py\uIz%lg"jV)NDͰaxDͤے +dA5+E3c#Vaf9RMW"xf<;L6zfW5G-kfbD߇fFw2ۏI=9NHdg"if:2J83\OBh^9t8R98_3㓭 -;f /Yw.N?6C/ 70̋fX:C6fқ~΋fϺoF cA4;a$-NEtbET'fP}g k 4u}4kR enih&>*~ElhЌuk A3,K]/fH:k Ji4 <'eTd2]JzIų/{DЬ}QF,fبk@3zXP&ͬ iFC"f4{ ^I={쇢 ;S-Ȭ$3S>M,If. YȜd2',Hf!%9e2 B,=Yv,D2sYB,9e3{tf,k3|03"f\|1=ٞEg3(rf>ϼgg3|=3ylˢg#{f{=3yg3۳{f>ٞEg3,zf>ٞEg4',f>ϼjgQ5W|Y= ϼkg5w|]=ϼk{\>0C3dq'52d Go*~.2&7gzkr2d z2eY!öQN/CON]0Ǘ!#WːIx_@s6Q_ 7eȖ2de Ɨ!Cݎ\>/C6!2άfː8 QB/COs6 qhN/kXkC +&r߈xMEV$L?2.+f>֕t`O.enheD2OLP.eU']VjY:VJH3Gm첢G/+2̏y2x\S#eRw|eۡėwQr&e2e +`ee;eҲ0eW,ed [G3|ZvC|frj2s,e.T/êȥdXb.zM/ehrHcᤗџ2f =<2 2v!uvMnOvtbomp~6#^ލϭW˰t}˂ːPxYa2DtsF.Cf]"]=nZ42d| .k eHhf')52,o#\L%\ƕ-eȰ髖˸5U] 2vpn]42P1UM.Ch6'Unkr\3Ӱhe|N#A.t2uue .Ì`6 tWf].Cdi\-Yj2Y璷ːjeFx ,ې .Ca\,c.Ñ)4) Y<|3!M .yOeS)2غ* r2;˰}+M'v rrO~\c3'!;G2!CW\=2zp`4jnYO:e]jz [^ U9x8i[-&-CzƖˆ=[Va7e&.CFm<\LZݲ .c#1e*7eq.fVPXGovgr-o]]|26 +,պsrclɞ.AMm^Fj!.CÍs.àư[t`Ce 9 +2t|vyv.ükTʝz 3R˒n gn.|$i,GU-eh|tYFT=]̗k].AheeHGz; ٵgt?ZCC^/CC!Z^ %[z t%"Fx YN-p$- ڴ˰~FE/CFmhwGq%.O}4[x2le\xK#7eh~m!]g?~[v yٲ!N܎qk2dUZ.WSqt4lle2dt]͖]qcSn^x*mBwȑ5Zx2|](Weoq leWZ&rSv #T!9 Y{eRh2]/+8MK: :NEV]G#…ːN/CXN/C'3k ٺ^pxY 1CJQh2|m - ]E +:Uv Z36i2dtz pzZ;L٢p5J^/CvЬU]^/61cZEy Q}֑z Ӽݲŗ!;^/C7;չ2tSd zp>dqڪڮ +0Η-LŗqGWz_*e\/C2F/ÝWrޠoWle[+ /;wl2y Z/C#Fe/C}97_:2k+~'gi3dy)[J[$w8fx6Vi،l>*3-J3ءnk=Ha-3IݮzS}hk'Ri3 &xP4:am]a̸ss0 Ďa?3tl8!c1-Z~zyѓ歷f/㆟hS~?@f/Ø ;޷܌v աE{3lehY.2s|Sߑ/p]/b`>rvz K͂(tc=O9Xz l1:̗ҹ_h2 уH1痡v2APyt͖_vme{iHfΗu>C3:a;_Vْ6v|F-h ]zZۻ24d+h26c|GxRS | +jj .e)GS:ŗa%ef/;:w Ηc2N׶-o0} ~ف_,p^q~f,{`H%[/ÄCØ/C m"![~etž6~_ =ZeːQiː,kfp.]0%$53 T1"3sq|:kWpͦ`Q1YXz5Wg':ʍ9 eTz:7ס f{5 0Xٱْ̐lf͵n6+4I2t3d s|<0voqh]0X({(׵uyydһ fQk2C*Qͦ`F׎[`fa 5YԂbdS0غuuYIdo7_<<3C7v%MDQvuwOzޤu|=`օ{z04YsUm8ww|r Yǧ|;`wGu ~ݲ uԽʐO}tYxYh/],sHf]Nr訮̠EWOiܧphJr Oi}{XU>1kR'vʧQjʱr'Kc( fSIlU5Sè>?e.w@cj-&څ.X.Wk1寔iKS)zMk\bQSCkE 2,`_W45(zd6pjASr8rvO A묐^{=M] +h,[%PvκBamSCh԰Hm=5BWۼ,td԰$595ly sj\`#ރZG5 +%7q\Pdi,m cOH]SCZM 05l +y#j(OUFQ+<5tD:tH/*jlܦy8E o%M~QQC kԤUޕS<ʇ}0f│a*Ӹ>+jdfvHT"Z 5h'7Ըww#P;0cfLC s Swjuo }M;)9*ȌE_#?dQ̴Ĩ73jQ+r2ǨA=Ĩ'F.['mQ+ 9F d:HU3ǨQ N2:Kt5%J`b԰٤^;1jS.C3ǨQTZY̨8D|V2gyHڪΌѦcԤ?K&3j@̇ĨѤG+2dFmu%K&3jLf԰*kfV3̨f2Q[d2dFm5Ɍԛʯ]3Ϩa3jLfVNb#!3j4vĘ]ҏPPZ54}11"铢FcJ`ϊ5]] +E ͸dݺ;5ݕ+jkjK ,E d!+j YQôseE&<|FPd(gTN4󊚵?5 RTNCW4};yy =#jLBVckQL;BRF֡+QoDm0 5ʈڐP%g6.LfCMz3Ǵ=36pIn Pjw#Ƨ JsԆ 㣟Or^ȧaV̧.4O`zסQ蟮zwKxZ<ƍo뭙\Ox + d6= riכ4# OAЩIO{e7ȧa3eTӔ%Ը-(a|no&`vIÅDUڡE5ѻ<嚨]rur,IJ$Imk(5>Ysa5oI$)Y&JB'Qjr)(Rj[Ni԰=GɞId]1Ijo[DԎ*.ov7$56戒/Ry0fI Q<5GIn4Շ(;QRh3$#IjhSLk{ a[+h!q<w)C* )Id +8sz;gո{mX Y}7jh#M5p5dWCq\ =FY*jh߳!M؆y̥цk~_q5:>WCW~AVp\ lq5,CFlV\ mZ Rm5DRf "h5@SbvZ khՐB@qs"j@1gh5Y_ !VbEMV{AZՐQOVCm񙲦 &Xra!ήkj +ijLVC&9W QUC6w؃5^pոުfH!jX'kʹjO[eV6W o mZݫMl=aఆq=6 +%k-Mwpl5d63{\óՐq5GNW |g?jD/jwjT{\ ,2 s:s{[ [z2~t2*ѴLzijȴm-𭱵ոܩ`!r7j\kƝgKcNp5fwZ;v!"4ZݻJ\ =lՐ͇lՐ3q_=[s p5V?p5.0WCވ!/xpV pvn܁VC6@![^q~i@!,0G9>Z :5h5,?i™ՐҖ@v՚[ ِ[oո/͚ Wim5dY䍶gVl5dm24l5d4fVh8VC'g@8'FՐaC~j6VN [TsƑ4{3o?V f&/O1$lqmjhj]E1,v6^[O^L5raR}&ʚe`56WW=CԝYeb\9jc+"Lk]bk:>sϤq(& Tv{ϔ5XރG YcrYvg-g-#ePr8[S `GZ0nFZX#e5̮;5v]_{DY+l q;&c獐5`#bXM'Z%QAq޵ktmb`kZ4CON:ZO4g'(#bMqM"+eFZзw7쀲a5fnŴF!E: |Ok4W4[Xtrn{\ bMK+,vd89?M5{ KZlrbYJkI,LkҘ 1 ֜0[Zbxw+ i@)ŴZzO5ų9 5AR+#a:$K9"-Ɯi%9UxHXsg j==575<&#a- 5G5)tbQL59&"VۼI šaI۵J_{ka63椮6)5'e+sO59= VbHWm$kNԍ70Mz;F%_X#P}Z72h#i\u5z۰&~6mk5B^ Y?C(1s=dﴁ @֜F~^7;@!k<'!ٴYcϼ1fY-1@Oo@ ~R!22x,#c>?NC&G|ld͉ES1Yawz +uO5:}{W:m}i(\~4vY)Q}YUzL@HUBF+F +egZc}d-ޒ`wMYc-g{z_5CD8)k4Ьc)k(YS;DY 7e\jD)ZOY/HYF:/5j43njFk|爦5Z?`HYƆLu(kg}dn\R4WY:tAYĔm:Z'C +~cY2nZ k3PUZY? kUfC֢V4SGY#,)7/Uv(#v59P֨a1P֨!Hu~)k tVYTY<{ƚ` iUxX#ksib57!֨ơ{DQ뼲Ě7#ϗ;nJ/ێp$&XNV" ̛rv|9{9yM35m jL+N&Y]!g~9h9kșfM gPWșvT6A.9Aߊ8C<}Ԉ8{ + +7H !Κ!qFSVY0Κ/qFOgbMgU8+GX@+uq-tgʹw8c߳r3Y҂&ę0i⌬2ݧMx,vڹAy,6#Ξt8K\+mBt8c3Fb+ KJ:*lB[zE=q8c +IʕpN 63.RhngdoA=OqVY3f kΞpLgown!ii#,6w ,Uqp֜6:F] glUoH8s-ԋ[gYO̵8+V ά ΢дDgL[2fE%=*73k^wvr!`p&n1?B|tdR+,V ,Uo&8x6B&UfEWY۰ͤD6(ƿhyi@6fPlS͆lށJ5ހ͚#lmQ+ K f16rE%Y^LfOmVX[eҤ =VD6kDŽ L#iL*[i#̷" ج4 +6@ lWCI_fL6q Zsfu˴rͮ4p͢nok_5Mc5kMم@k&_ysͲTv5˵5 hx=[k֚7XV]a FfL=p85my5mIa5*{5cQjVcռrO@kށ.A6Ofh!J0/&B%,`3DofW%6myU5ÄjB5+ +nIz1mX4A$5ޤ +'fܔMP3M;c2Z_4ŪvLff]dR͢di 9p+L@MT36mսTU# LOfY-*QjƎjfi6p&ɕ161bEuli殺=Xfnf*l!z Ar}26!ZAadf+̸Gi\I6H39,SlԂ4keBYfbMnfA|Lf _fJbEV]"\4Rqg#ԯHV :݂4s8fEƵ yKVvH3 +V-"|+[fUH37+L `NFr#Xf!4i?J;fR>{^&MH3.`Fg#jA$1YlP+LOi# Y-P3]eI#,1U5˵<~eer0"U_iVNiδi2:LP`~t"MP6A͈P 5{+`f>;_ffFktkBЌ53\QL%RԈ5aOX3{7c1_,7cWe_5Y +6: Zf%Ff̗DidfYVd3^0N @mvVKׂ6{,f꼿͜Š6͞mVY(do%˃ ԝpeis['Yzʆ7mlI3Q f܌R2,p3kmˠh3̇ZfARmp3fGF웞f9n-V7uxf 5[J7s֭zofb.[nÜ,V͸Rkr\f=XmB7cDzf YͰﵽ6C~ldI6״nX^f1!=U{!aU܌W77Hc۶݃nVw ܬff"P nvh86͸&M.pSDfT].x^~xK|fͶi=a+ߌޘN3,ڼ:7`Xogb.|jHtof>86|39 ^f-K{|hYpւ: p0U$ pƮp܏Yߞf{bSD6"'?a=~ یvԽ\v^f<+36{ Yh5 ۬(൘6|<+>|dRleaz4hmea@PیVVʹ"Gllg1f٩lYxW;mz2fHυn2#Ht4&t δofblDoF_԰hߌ ,+lě8Ͱ6z͞NovbQ=17::Ɋ7of x7 &/zYzzUWx;^g ]fO&3b/Dy G{>3 `EB+hW3,q`yJ gX)8cja5,Ҋ8ϦfF!qZ̊8cd [gCzd:B8"GgH8Kb_LghB8eYl p,|`ȯ{7|v=.+ SL⛅\ZfXޭv7&at,'Nfjƛhȷ ,ׂoVԽ!({YnG+~nƛ=tś!,hś=Y+߬3VfCF S6j|3PT'͙ovi>+3u|34؅~i*aśƜYy3 ++,׮niOk4B7 t3:iuB7*WY~,Yg[4/]fxXu7Ƌ~něRO*fbśeBڀ7Ô_ndś)68r9*͞*oF>^fZKf]ظڈ7vkgٳ^f5o&"Yf)&YWz#6R3ZfrDWٓ<_fa8Ni7D61nd3,γVՊVYSVoNglGgYMfI+m 31!Zf?6Դmv=0mMb Ѣ ڬ Z,e6 y ,_5 qT׌6{N+qYfb6mv] #Q;{F s ̝kAJ5R+٬X7&Yel[=B6tV%"ޤl Plvh_3 :jO6#KUi=L}JE`3<,|kB6vG/fؾ5L6c[ ٌG3UfFYAfXF9Bl]´lv 60+j^fBfTo$!h\ mvO6ͼLf^fʼnGiZG6T@6sn&ENZ*ܧKl&k +*l ! +5ژf fsMd3&N63 r}gf;3zFWVoFvʹbB˙lvwW>05*u^f]EB6Sfg\$1m GiD6KJKfY YfҨb/L6`@6ld3Wl,d3Md3nZ>pA5_j"a-QNfkٓ"GZfV$]l6fnٌ5TL6TmB%"qF Lo{ߌPh9p\of ;'Yfk-gRu +*g,"oV1ͼ߱"So1gv6 xa1"ZoP?r]Eux3yk76m%5o,x3̑!sƛk'X{ƛ0Jxo^L9qWYY6Ͱ-r +s|`gv1b=nڀ7;xPFhměYk3A1,x3oIɂ7cU-x4+-@ftnVFf ͰRWn<}ݞt31 H^fRh,ov xGבoF]\fw oWtҌ7ax3i26ӌ7YFB\ڀ7Yz'MZ7ihƛ%Gr!.|3o%Y*l= Ra@7I3Lx3dƛox"-\fj{ś.i1X-7#4)i,hb&Y-@gUۗoc79f&Œ73L5ƴf\ [m7 P6rO|3;dΝ ߌ;|f ]f ǭFu9ְ ތ1o +g܀7`D or5͢7}ExX^flafgeƛa ̪iߌcE3zdkR#?G7c +ଫ\gTf 8=p#@śo4SoƐ2n؄7$Pq<31GZfu7-Zf17o +rY7t3:6tar P&Yb寅mӾ*/l3+f RYnι\t5*O`'ͺ6o3f4o7͌_˄73 ov=Ղ7f!tٓ[f4mxsUхnkMnFo9c^t3&y\͊ ɔihmܭ`,p3D6p3unؖnfkk7#6k7HR-tLK\gz/x3DTbvͲMx3vᛩõrf.-2ͰA6oo4®|kk=+:vx3|k7{―o36>]f=ov=7;Pm!d<׆o[]fO7|,|3&Y_fE Tofj3,uԭ o`3ތ.'3ZfmٝfOñ.x3]GI6G{yT.Y 6'}L/_Tw)`LFڣV]uQ?zǨFu5rw)>&:܈/JcTb#\DOƔ^0c?zǨ^i1cL?و;,gGxffGx~1>gs3wyg9Tw,fh݌cz}/Dw᪣ztNC:kCoA|q6-~(ҋ2f6zW~;CbՀ{ߎ1GEO+ᬣQ]?9*SzUߎJj#UG跣|QκZd٨vT?eTt겚:G둵@zeQY먘:Gl]tJA跣L. F跣N)F跣~ aڨnT:=]joGE oG] +ka>WÏ~;,fTQu?~6KuifUߎgstr\?~6K0jtQ?~6f \BiUߎgsxXRUߎgs;=zii6Gù_JmUߎs)_1Qpng/ݩ~Qln`'DF5跣XTlT~;퉗wpoG=:?XvT?C +NUߎgs;~ oG=u^Qu?@/t]?~6@{WmPO~;쬀' oGÙLF跣N/&LبvT?̄&vT?I?!Qu?~68q¤OoG]㉍Jt~Qlfg?Jbu?|_9Ipն}7:p^ubKsYzL'3QxLy>럯x^:5O= ecCѧDΟ[>=?}|0np[SЧA!#ӃVO=@>;?}z0SӃcѧCΟ>=?6 }|0pϽA_4}z8`ELJƟO?̟[}>=)wٴٔ%$\%N |v0bE̎Cg3Y Cd1}v8b7ጮBg3 -CN3꜅>;@h`fKÙ,ff +݃>:#h p&s/ÙlffZ>;{hv#`&ӡن賃͆'.Cg3 ͎C+X }x8Vf+\賃-Wg2>;5h`f@Ùlg2-><h +p +dKH_0>3dϝ'+s\1~ίsĺE@>b|$G]G"ߜ›/]Bɹ/\Gp oJ^7ןw2AȪKDyx叒'yGA}~1rط}KEC PDw<-((g_@GwDJ\$qە"֯]F7o`O~u?ח}NooE$1 McM2*ڼ7M OOC澿m֜?*\[ٵ8,]pn{[]hk46(>ߌx<%Żb_lM> g&ؗ3y3+Ù`Lpb8yy KÙL_70 +l?7о2uΛg_l7M/ gW`λf_,; = g&oٗ3yyKÙLdMpd#pf~8o}i8_0Ǿ2(Λc_MV/ gؗr'l?7þ4 v{\aLbJ ] gv&[W3y+ÙgɈƳp@p&a8ﱞ}i80xξ2cΛf_h.;-. fvG&{W3y+Ù}dP@λd_; = g&ؗ3yyiKRIl?7lŇOMqխ3g1b0lP}p>{aY7 g1*8Ϟlp|p>zY7 g1ڀa8 b|,fCٳ ogb6̿i8=|,fCѳ ogb6\i8=|,fCٳ ogb6i8=@|,fCٳ oGb6|q8=ـ|,f[9 㥙Y0lȀp>{AY̆8g18Ϟlp>zMY̆7g1+o'b6q4=٠|,fٳ o·b6i8=|,f훆ѳ ogbauAY;ĭ{Lm;[^y7̃I{O"w>/wno"A;пq +:fNFxe߉_dž>24| `<aKoG8wߚ_q(Lbgw |B`H@op8xܢPx!&\}x?Ju4wXH?[46|@Ѯ>o,q=|m?}!/Z̕]qiҰJ l.mJikWtn3 Ӂ|n]¯MIݹyŠaSARxŮbrA>˵߳Ì^ vh0o&֌x28GqsyO鵹b+e3& sUTco:g6R}Yl$xoBwbֿsBrw»Tq!# wZڇ_5Z?X<6f +^:ی3iICsDi;s޻csuR! &u #eI6Î +YzwQ + \ +vPخaVK96ȫ3v~{O,gvM6zϝ|4Dw\3gZpt=NˑkOW<^ޤwF;-͏6ꯝ) @i bjR3IlVDM; +~<^{)ŀ(v#G| N&S ;b/aUia9'n$잰BִZ@ Q#..eh>]ʪ"B.ߥz مո} +K ݁w` (",ӂzm(UaK䛹0Sb0۔ 74.a;ź|Ɲ&fhS*beLX2-जoh<hKUcϾh'Yc/ Yi) ZʹtK٩_xIixnc>7q ZڤP5']Ó4NO*#44W u] tQ?KbKH}NvB!zBMx%(u~ )1TU*ixRU'U= N?7IU|2Z9 P nJRΔXYb_V6-=?dL3uY+`{Q'[Ha IWQ5w<*Z[+v}G@/n&L(59"J)"%gR@U|j9EZ*2_:b:JTi߱3k/X h`%zk$_ŖSxvé\q"4'}%s -";i7=Hb;zuA+$)!3dqW4A ;#P{(c\ +Z0 /7~ps+ۅ6" +vJ Q%vϱJRI cIA5%*;,u]V.P5< :[Acl )@l{xėN:"' sۤ!]ػJ %y`q$DƖ*%0Ζ*V >]5<:qBC4w] NTe-N'`%Zi,[gRUXHZsY냳!X%veu[D3.Ư6Ɨ\ǰ+խ4l']!` {+jrF bV8,|+!;=W*!Z RDqLVp=G߽,g\s%3b[/kJ5_ӗ.몜JJy5ijdn§BLv`q;SJb*S pgdM(uO#Oa{LBI|iتaQ&B9VX9rb E-;7.eJx,VtE- =] +ʪe4fn԰ +cxM&ѧvU۪ak.e$qcɬ*jxIxSuXKyS5<(:C qߋϓkNMrXYCͭ,i)={0VS0o@IL91jl;?LeIvn:\?ESJ\A5 .3Jz|fř尰=ǣ+]rrid@s1_:0qeKht;8j.^f،xYXlWhkJhY,vG%ǤRXFm-K+O S&:JJTW}2VidTZL+twj+ W +Tn\KbCઆre#2>$UݒXXpo|.vπXcG4_6i],57-jg]{g`ޯ+DZSb\meJ m07׆9/$%~@X%s\޴SY(i׈2!cb"jU՚fܛf;jRe3e 1K.:Wm,SIku_X9;2W_pjS*xQ-ժ9TWv))t +NlK Ϟf6DX=<ۅsvU3-zS*$l_p,}ui?cӌLjXuYW~iq'/4;*hab{Ϋ /M*ӴxI5<{q1gM`n>ێ%0`5쫼Ւ_qfzjQRs!îZʉDx +w5./ 毘mHx5E ΙkAwJuSC8fbc-@=bQ% 7$ܖK# 5l0țŞ řvi ]]Ub4ۥv֧nq̚fhKSWx+.J9;+rO`ZD& bv σ|kGK5ͺ +TZRVB攢WS`jɃ(TO E4}%#*bX [{v H@ wڧgHZ3x6=ԑ$VOg*9Ĝb/V5g!YWLe9QL%L`SO"H0#ghհyZa!j)mT-8V'&23~ _4QhxCto#kaA?+^z" m8-D&!MMEvfMiU?e-35L 1PLM*@b%alq6InR! 5S.d/ R} $wdcjx7p3mN Cmءi,2,mjGEJRMPIXΔ~aus\5s= {8&ծ3cu= c$%C"LCL%a^+ag fI=jQBY!btS+x,FH$%D~x4$3"Zm9RM`0fgS*b(N4L*Yvc.{Niv%[UKZP5(&hX2R!^,ow$Dp+F0㙆iXrU HǦ +²#)U azmie2*DM­4J IJVjzTCXdI'7H""ӏ%<UG^AsREzu^1gV&RqieIXE5JI,6ճ^ + ,Z4"5Ŏ,\TKtȷ6 <8IMCd*1d8dluWтzR˗KKS82O8X5v:MbI_LQ5l1 $穝=;V;k!jzf<Ώ%^K$]#6U͡srI&1$[5l߾Nl/aHm +1D}h0IVZMYEИ9*(1k +@پ̋-ץ),nl^:Bc),6<%jx10eQGb2v㈍W덗GC&I/ ZLj&1Q2`Að!IQ +5l )q K*9oFzPLrO!d,V!S–gؤDҁ$6Tv^ɠ)0I%,I!í$}Ŏ԰vX, qcIܣi5gRD)`1gU=C +s!~)pꌲH + iISha6'C+2mzueߙyz;zfXt, 1*~,CCHΉ}!×xlB SapԂVD}Y&lj4,C.Ӱ `- W +Q򐚚(&9E;,XtCo +Di;]%l-1h\dE;Dm͒jjX +ECTfSzSp)C"qfq ;q9X2QR5&~h'$kI0V Oֲ%!>V|h̑i5D C=_/髃 ZC&Hxy/9͇8ۯ 2d^IbGšN ѩiʥ4W۵ʀLoZANg&VEBO +,&2f0/,pdf5(V(#ZS`s*TLjY5doۢ91|,ab64Haq_X#5=)Y?B+gg +Xr9A4do +6Td|H`\sЖ:hk)5Ve`ǐ/x8 +ə<.u".my7]A p +~p Nj_xPpLbv!&'/M9_?Guuؔ!Y'=L\KMCAlB(-@MNY\y):.kw>OkVM5HwhY/SNzScD|i/jjt aLuӧ^}pד̩NR+*x{,iI'q^d +7\R)3-<4N؇,i9r8u` +7iP9)s|$(],ؕJ2ٲ-,bj٥/$g`IwFB i*ۉ\hLa=or#:E ђ쪆eLiOٗr=6Qx(iƉgOS5fbqmuD,Ƥ›Mii^.A¸] hVrF!gE ;T&|ԽW5w|ĆxwE;Φ;0_mADDsby\$²TjZ(jC5Y";S8*4L&sDC'ji*ĺ˩eRȒ$ѦL9JWPڟL˧g +hPb0Mb x_wR|f,(RW'͈&B㔔κ;Ix)0A]sԴ +juKRUw9a&xSK5nID~N@D`B +LӧdbSYp>/еL͌Bjk gRʠvlz+P Tǘ")(q$nQqv6 j3;4i&áv\T ~yն)JL*Pj ;B G-sl)Le?y؁֧+vv@{ƶ2= v%>Y ۊ}X6X?_fO5l*hc І•Sh⪆;L.>f^TTo+]46^|ɝ+rZ0bzzQ3=jXgj,eZTZV\| 14.m%5ghWMO-I)S<(]ҡvcL֧p忬ACqS$~+8]@ L.K}@Cl47 nIiVΫ[ge0%,V[]Y(L*qʊ$")KǜEj"X"hCj:k njj/Ç\MWKvYϗ(3AsJ j,@<-Bb( ?FgsNU!wbMߩ$vLbd:Ԡ01Eΐr">W>jSI,B)j8m\iªJ9*pލ^ t%')][`K_4hL~e9C}]tHe=5xȕ2K1JJH3 ʼQK-Wvz ERɆ⋾qz6MM$Ӣ^)Y6GRXk¨YIu͢]Ed\w{O} H`=[ćH'}4 Oh0#̎0hT bU 쨦1;r̎ %WrRv/$CN(3'J;̎baf L[Ϫ 83ś3kR̡i&wj޶͚/ٽ ͎cai:3쨧 -5ݛ6@Zh8C>Mf^fzm 5A5cy\,P3Fk -iF-TKiFuTLL3Q΁iFIIIc24j51ͨi&2LeuQ]0m:!ΤQq&4ZqO3ډ˄8sψ3zqhM唣2"x+]0C_Mgyfg qFM:ę{"q&)ќ™hiѷ* pFMP19i$OgtKbZ8ٴpFgsG:8dXLg?g6d=g5egpRpF"Z ?s}π3j8YHGx\g4mw5ΤO3mgr޴p4,'̋U>N|3JZLfi<ߌP'4cZ89L:Ψ0h N)gR|4 gljD8s=h{qUCpF{={fRH LgrfLgNLbbv 3Ja=8ceȴq&EȆ?Y{Fi[{8Zq8sgԬkg|etψ3&+}B'=b„8o/ -'խޤqƮ g,sψ3f3Cq1v59;!X'ę鵅mD" -g,3{FѠќG /_Gf51΄q8㱺 g37@.F}q6"3=g8EQ:ߴqSqƪggng҇Pm&w5!ΜV:!\uj=#g8ȴq愘epFǫ= g09pUF q68eM33%0m@Q{FЗgt߲gj6@:5.:)Uxx3!X[Q&|zg5qH 3i'3: 3Ā8s- f3FDKgԄR1fH>8;=#ΨUp"ɑh=VDcr 3&+g`9Q@863,& gX_*#O gC8I350ΨiJ̴pv -؋GPu3j4pF  g"дpv!oDgԀĴp&Dg=Ld$1{p&am@QY9fւ~cIcj9cYFΙ獿3rqΤ&6L3/ʃ@gNΨ*u3'I39b)_LgԜ?cN8CggB iCۆ 8f 8c@=貃PDk'{pF3g4i+&TԢ pLΛΘ]ם8cyljoFPiߌ?g1j7f~Lg@qF82uBǃgqv !ģwB9'4}ψ3=mk8cG+gp3⌚u 3⌯qdEۿO38'R UgU!8՛!u!{zy⌚pqҌS~u3.Ʈ&g'qZ863XR4euxψ34388֌&ƙдr5g8?qF<Ңƙ3‰qF qUqv]LŴqF82ΨᶝgԔcZ8f{fQs9lGƙh`1NIgőu3W׿ q&il:;ęhę^Blru$Qzz#Ln1*zzʙRɐ#LX)#LLEnQP0QĀiCj0g +ɁIL^j1bu )gshZG9kD9D93jQOrFI!r&3@9tUȉrߎEƥ L=hRG9r\lX"#@9ԽUO9zt383YzӤr%;8k(g p3GL3FzaZG9{UǓsYg&5bÜ.3f\peu3WuL3 Cku9X鬫9cD|Ts [ 3 g1t73IMDm™8g_5ΜxydPtmC5\?@gܒҫwrAsݡ9U݈9Kkڄ9UȀ9s}9 zP 3q%k'#Lb%z̉)(gv|9ijr&)gN 39Yfz2 nxxkn2ǂn&lxMp3pf}pZf8p$YטL t3f>0m'fYifSjb!^m-9Ll3,ufqMft̕;wJ\g5wOl3qYhڌDf{&ѠL`31I4XN6纛ft$8 4ͤ%9FY,#،=j0%6 Of=Xyhu`(Z>2]ft0Kuh3և mݗ+oId}WρkʼnkU5cYlg5N.YE&Yx.׌pqXW&Y :%j5K}\3`R].&Y\aGYzjlF;fW3,h{A=väv M\3VǫiiL3k&gg\WO\3zniUi,kY?ױhyk7*nF[RG˄6'y6ˌ%4cqh3-<5xfڬMp m&q3m&9,3۬<=޸gdXf{҈6si$qfVk=d3)ʵy$q8t_*ZO6c978TT=X%z'C1Yַ}Od3>vP΁l/N4Ga=Xζ;{g.4ڃ60_lIM+eW0F''< وhڌ%et3x R!t3B}=t3uvV<ͤrJ7#jnFGL8̏ҎnQfb WԠcqRJ0{f\h-cPi%f\+ff݌KKdq=KV*>dmf4{›o1ֲ֪x3ϞP}Fsef^)A7㊪w>x3z[i|3/-a -'W[ת9F}/VL~[7c=#Zz;͸G;'k]̴7cBت<|3я8}=1rr+ g~3:iV=9,=^HLzg_{w,7x?)Q{f&)n"::&߫ s]-xpvѽOW8;c#8;TgHs8XlWlgF#WMydpp8?Lk 8c0,8CrW3e ѝ#+1PgTy8` k 8Cq- 68äfZ }ƅK7;=#as v+oNK߽x3t sꛡʛasZ*ov0fcf3x̛̊;o*yR S>ś|VZy3~B8кxкKw, oS6ʛa0X0'*7C[sKśY1e PNtMN˽⛝&sjVq\30P:>N?;ը&JǥU(pvR&:F?3G8C8i#at _3bˁLUmmK8Cd qgDMg'暆gh^?ӕ8ck8XB8Ce -p/ 춖3Ը龽 1,-Of`93y&pƨe;g(a8 8co'#"+pȰq U, g 6gؒpѺg(!Hޖ7C g 50z]f [p›vg꛳7c^~Nx3SuW a͛GM 5E,kzW֒pаvPwr - 5cԬg!Yv,bIg!3HrP{#+pX3-%8cF;O -pƌXK3lPO1P{b+p*jvG3fwDP2YW 9d͉M =e[Nqopl3cZg6;?_efmf|(5'g+3f(f% }ofgf(=tf/7jW 5lVvTK|3217c&ŴϦofhsS|35Y[3~vPCmf]1M7C=mW g͏2{mf$8 j8CkS8Cj#^~_bvXW %$Gp&ΐY]3ƨ=h?3Qy$gQ󥆮J 5:k 8øJghV玛fUQTЬv3d˾Mq˾R9e HEoFgf7C#P- ,zNeaU;,Wt3n5[e knzmf ,DŽ=x3kYy3\mwI.fqm+7{IQ͐߾.ٸ`_-fHf;/s\#›a87{h"Guk0F{'M"4L?fɛ!M^t3d-Ap3D͵Ul1} -#bax}Ym3m3LG`WE*xHf0@fGKڕ[h344J`U= lā^!fホlftI0 -am^f2fAa^ɵ@5{=q0F]5{ +[e֌Msd1jy<>"a%ӌqmLS9'bZ-ᮨji\TP3E2j 7+jPJ]Q3l1-\fy!\ cA]v׌kaM 5,mk6pf?/ ̋f ?&D6Cu#j 6k4ml`3sgl?`vUhmyzifhpM mV gmal' -!m<"Eu ,{|f3@y@FU6Cy90i"KU6۹ fGcz*q.el0( Ul1Z͐K1^ZfJaJk;lٗK mmo>ਲ6lfA?d :/>mg:Jb"jڲ8X 6 -سEa@>cCWi37բd3L$JUd3tJ(*a4FiG6\J`e0_66T6~G2m-{!u> 8G9QnpӬc 1r4)PJ 8;i-Agl搥gH4t !7cd80*Q츘*7wgl!ymg/SgL ϸxifG|pDu3pn0iodZ}W}3t 3ZCy3w@Ks`Yy3t'M;Oʛ!vʧ1xJ+oO"Z;[[Zqc#:>~Fy3 6#FCDefhkNsix35kS}3ޞɝιi ×sW|҄~N +pv2}> pQ??Jg8D +ND'(G8C?}Fg'}<-3L}8ø)VZֶ3J{mgH!(qI9 qv2yoiq6:]3-F3K{,3TVHg2nk8Ccd k 8c0zmgjP3pݞ3i y12,g PŲp0ms- g<+pmy3THpPo0 'j~9y3o7Cm>Uwּ͐yPxh<\d̲Ƭwe- g mW q'jmOP;N͊pker,+p2$7M 7?gk8U8CmR"hJ3fg(-=1nM SM 'g_6.ox8c?`xG$ )uΐC֜P;9*jS v*g6=FphUFm1mƇR3~2pڱ;oRnߌ,ݿ\P7f{loҳNWoyꛡv`q=PfkG7#c]}3f]Lklf6<7c(Z1gQ/M 5dʈoD]}3v|(צoFà3n,>63:Un/!ju%PBqg yhuU8cڃqC8GBp5_j +Hq_ü3+pfuo^uEU *i7NYڄ!e H[̀T4fhdma|34uxȢXFPryE7CzPf_/{]͐זn ›qL37CV7Cv2o컒yU l›12odcRa:ǵ>"#yxo&›ax4_V cĿw$›Ac^BUK7Cf7Cd\[UjQ٧0"O'6Ü_6äq v^7m8mx4]6CsLO + V qnXճkfoJl2l[fF'xd C<a. +kx\ Q\ SkE]JʚiޙbUf4GfǓjZfHz_Y5C^ZZ<lL^_-fzc b!mib8M m[2͘fÖMӌIoml 1͐ض% EҤf߽6M3fk4ChЃ?L3n+5i6Zɦip@iڝl!.kqiڞ4l1 i̶n뫬%ӌYN$ %M3sq߆R"P?7n4#X&iƠoq#̤j퀛H3RxfLzî޶iƠmw4cE,^H3Ƽa!Bѕ4c۳f{mQu]I3԰T4C&`?I[SLZsf\HzM2f`i1mǸ14,4fr5䮦ž"WJ6ul!vfՃ4C>Vfkk-Nivq|x|DKژrN6M3Į[]Q3Ҹfe kn*WWԌlcf ek5c([B'6=.jX֌mq\e&^(f9q=\3L]W2lfBGlh6ZfΨ-جXfӫ5$0҂05/6Ä>O6CxE`3N'qY6?g"lsJ#ajElsh%T6\;V˲naP/ Z5َc"!cd3͎c'617 +6CGVw$γ/ ]|Qe34m6zْ0ǃ\qɲu6_| #'t6cDeqX+3m6.[g6À}ƆfoEiftIfFgQT6il8?3,amml>\e [y'+03ؼ̅I0ކ1l9C YY+Pi3LslF|4Rf#W.f"^d3>(qf^a +a |M~`3hտLf8rک͈UQpC?n:lԣmppƸޮ囵oVVYf_,7+l+ެxͬVkśoV׊7ۊ7+ެx͊7Zf^*ެx,߶x^YfśoVYfśTYfś͊7RfśoVYfśmśoV׊7cx͊7ۊ7śoVYfśoVkśoVY/ެx͊7+ެx͊7+ެx3/oVYfśoVYfśoVYfśoVYfśoVYfśoVYfx͊7cx͊7+ެx͊7+ެxͼV7V endstream endobj 335 0 obj -155547 +155456 endobj 336 0 obj [334 0 R] @@ -3347,46 +3404,46 @@ xref 0000017881 00000 n 0000017936 00000 n 0000017991 00000 n -0000173616 00000 n -0000173640 00000 n -0000173667 00000 n -0000187234 00000 n -0000187095 00000 n -0000173865 00000 n -0000174117 00000 n -0000175561 00000 n -0000175539 00000 n -0000175648 00000 n -0000175667 00000 n -0000176058 00000 n -0000175827 00000 n -0000176370 00000 n -0000176391 00000 n -0000176647 00000 n -0000179672 00000 n -0000179650 00000 n -0000179768 00000 n -0000179788 00000 n -0000180207 00000 n -0000179948 00000 n -0000180564 00000 n -0000180585 00000 n -0000180840 00000 n -0000186010 00000 n -0000185988 00000 n -0000186108 00000 n -0000186128 00000 n -0000186633 00000 n -0000186287 00000 n -0000187074 00000 n -0000187157 00000 n +0000173525 00000 n +0000173549 00000 n +0000173576 00000 n +0000187143 00000 n +0000187004 00000 n +0000173774 00000 n +0000174026 00000 n +0000175470 00000 n +0000175448 00000 n +0000175557 00000 n +0000175576 00000 n +0000175967 00000 n +0000175736 00000 n +0000176279 00000 n +0000176300 00000 n +0000176556 00000 n +0000179581 00000 n +0000179559 00000 n +0000179677 00000 n +0000179697 00000 n +0000180116 00000 n +0000179857 00000 n +0000180473 00000 n +0000180494 00000 n +0000180749 00000 n +0000185919 00000 n +0000185897 00000 n +0000186017 00000 n +0000186037 00000 n +0000186542 00000 n +0000186196 00000 n +0000186983 00000 n +0000187066 00000 n trailer << /Root 367 0 R /Info 1 0 R - /ID [<78DADD157CD35BD47A29884BD949660C> <78DADD157CD35BD47A29884BD949660C>] + /ID [ ] /Size 368 >> startxref -192811 +192720 %%EOF diff --git a/figs/svd_control.pdf b/figs/svd_control.pdf index 838f800..7993a30 100644 Binary files a/figs/svd_control.pdf and b/figs/svd_control.pdf differ diff --git a/figs/svd_control.png b/figs/svd_control.png index cf36862..81dd17c 100644 Binary files a/figs/svd_control.png and b/figs/svd_control.png differ diff --git a/index.html b/index.html index 60c6cbe..55d2466 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + SVD Control @@ -35,57 +35,57 @@

Table of Contents

-
-

1 Gravimeter - Simscape Model

+
+

1 Gravimeter - Simscape Model

-
-

1.1 Introduction

+
+

1.1 Introduction

-
+

gravimeter_model.png

Figure 1: Model of the gravimeter

@@ -93,8 +93,8 @@
-
-

1.2 Simscape Model - Parameters

+
+

1.2 Simscape Model - Parameters

open('gravimeter.slx')
@@ -125,8 +125,8 @@ g = 0; % Gravity [m/s2]
 
-
-

1.3 System Identification - Without Gravity

+
+

1.3 System Identification - Without Gravity

%% Name of the Simulink File
@@ -148,7 +148,7 @@ G.OutputName = {'Ax1', 
 
-
+
 pole(G)
 ans =
       -0.000473481142385795 +      21.7596190728632i
@@ -173,7 +173,7 @@ State-space model with 4 outputs, 3 inputs, and 6 states.
 
 
 
-
+

open_loop_tf.png

Figure 2: Open Loop Transfer Function from 3 Actuators to 4 Accelerometers

@@ -181,8 +181,8 @@ State-space model with 4 outputs, 3 inputs, and 6 states.
-
-

1.4 System Identification - With Gravity

+
+

1.4 System Identification - With Gravity

g = 9.80665; % Gravity [m/s2]
@@ -199,7 +199,7 @@ Gg.OutputName = {'Ax1', 
 We can now see that the system is unstable due to gravity.
 

-
+
 pole(Gg)
 ans =
           -10.9848275341252 +                     0i
@@ -211,7 +211,7 @@ ans =
 
-
+

open_loop_tf_g.png

Figure 3: Open Loop Transfer Function from 3 Actuators to 4 Accelerometers with an without gravity

@@ -219,12 +219,12 @@ ans =
-
-

1.5 Analytical Model

+
+

1.5 Analytical Model

-
-

1.5.1 Parameters

+
+

1.5.1 Parameters

Bode options. @@ -256,8 +256,8 @@ Frequency vector.

-
-

1.5.2 Generation of the State Space Model

+
+

1.5.2 Generation of the State Space Model

Mass matrix @@ -358,11 +358,11 @@ State-space model with 12 outputs, 6 inputs, and 6 states.

-
-

1.5.3 Comparison with the Simscape Model

+
+

1.5.3 Comparison with the Simscape Model

-
+

gravimeter_analytical_system_open_loop_models.png

Figure 4: Comparison of the analytical and the Simscape models

@@ -370,8 +370,8 @@ State-space model with 12 outputs, 6 inputs, and 6 states.
-
-

1.5.4 Analysis

+
+

1.5.4 Analysis

% figure
@@ -439,8 +439,8 @@ State-space model with 12 outputs, 6 inputs, and 6 states.
 
-
-

1.5.5 Control Section

+
+

1.5.5 Control Section

system_dec_10Hz = freqresp(system_dec,2*pi*10);
@@ -580,8 +580,8 @@ legend('Control OFF','D
 
-
-

1.5.6 Greshgorin radius

+
+

1.5.6 Greshgorin radius

system_dec_freq = freqresp(system_dec,w);
@@ -627,8 +627,8 @@ ylabel('Greshgorin radius [-]');
 
-
-

1.5.7 Injecting ground motion in the system to have the output

+
+

1.5.7 Injecting ground motion in the system to have the output

Fr = logspace(-2,3,1e3);
@@ -684,15 +684,15 @@ rot = PHI(:,11,11);
 
-
-

2 Gravimeter - Functions

+
+

2 Gravimeter - Functions

-
-

2.1 align

+
+

2.1 align

- +

@@ -721,11 +721,11 @@ This Matlab function is accessible here.

-
-

2.2 pzmap_testCL

+
+

2.2 pzmap_testCL

- +

@@ -774,11 +774,11 @@ This Matlab function is accessible here.

-
-

3 Stewart Platform - Simscape Model

+
+

3 Stewart Platform - Simscape Model

-In this analysis, we wish to applied SVD control to the Stewart Platform shown in Figure 5. +In this analysis, we wish to applied SVD control to the Stewart Platform shown in Figure 5.

@@ -791,7 +791,7 @@ Some notes about the system: -

+

SP_assembly.png

Figure 5: Stewart Platform CAD View

@@ -801,22 +801,22 @@ Some notes about the system: The analysis of the SVD control applied to the Stewart platform is performed in the following sections:

    -
  • Section 3.1: The parameters of the Simscape model of the Stewart platform are defined
  • -
  • Section 3.2: The plant is identified from the Simscape model and the system coupling is shown
  • -
  • Section 3.3: The plant is first decoupled using the Jacobian
  • -
  • Section 3.4: A real approximation of the plant is computed for further decoupling using the Singular Value Decomposition (SVD)
  • -
  • Section 3.5: The decoupling is performed thanks to the SVD
  • -
  • Section 3.6: The effectiveness of the decoupling with the Jacobian and SVD are compared using the Gershorin Radii
  • -
  • Section 3.7: The dynamics of the decoupled plants are shown
  • -
  • Section 3.8: A diagonal controller is defined to control the decoupled plant
  • -
  • Section 3.9: Finally, the closed loop system properties are studied
  • +
  • Section 3.1: The parameters of the Simscape model of the Stewart platform are defined
  • +
  • Section 3.2: The plant is identified from the Simscape model and the system coupling is shown
  • +
  • Section 3.3: The plant is first decoupled using the Jacobian
  • +
  • Section 3.4: A real approximation of the plant is computed for further decoupling using the Singular Value Decomposition (SVD)
  • +
  • Section 3.5: The decoupling is performed thanks to the SVD
  • +
  • Section 3.6: The effectiveness of the decoupling with the Jacobian and SVD are compared using the Gershorin Radii
  • +
  • Section 3.7: The dynamics of the decoupled plants are shown
  • +
  • Section 3.8: A diagonal controller is defined to control the decoupled plant
  • +
  • Section 3.9: Finally, the closed loop system properties are studied
-
-

3.1 Simscape Model - Parameters

+
+

3.1 Simscape Model - Parameters

- +

open('drone_platform.slx');
@@ -864,14 +864,14 @@ Kc = tf(zeros(6));
 
-
+

stewart_simscape.png

Figure 6: General view of the Simscape Model

-
+

stewart_platform_details.png

Figure 7: Simscape model of the Stewart platform

@@ -879,15 +879,15 @@ Kc = tf(zeros(6));
-
-

3.2 Identification of the plant

+
+

3.2 Identification of the plant

- +

-The plant shown in Figure 8 is identified from the Simscape model. +The plant shown in Figure 8 is identified from the Simscape model.

@@ -903,10 +903,10 @@ The outputs are the 6 accelerations measured by the inertial unit.

-
+

stewart_platform_plant.png

-

Figure 8: Considered plant \(\bm{G} = \begin{bmatrix}G_d\\G\end{bmatrix}\). \(D_w\) is the translation/rotation of the support, \(\tau\) the actuator forces, \(a\) the acceleration/angular acceleration of the top platform

+

Figure 8: Considered plant \(\bm{G} = \begin{bmatrix}G_d\\G_u\end{bmatrix}\). \(D_w\) is the translation/rotation of the support, \(\tau\) the actuator forces, \(a\) the acceleration/angular acceleration of the top platform

@@ -923,6 +923,11 @@ G = linearize(mdl, io); G.InputName = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ... 'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.OutputName = {'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}; + +% Plant +Gu = G(:, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); +% Disturbance dynamics +Gd = G(:, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'});
@@ -940,7 +945,7 @@ State-space model with 6 outputs, 12 inputs, and 24 states.

-The elements of the transfer matrix \(\bm{G}\) corresponding to the transfer function from actuator forces \(\tau\) to the measured acceleration \(a\) are shown in Figure 9. +The elements of the transfer matrix \(\bm{G}\) corresponding to the transfer function from actuator forces \(\tau\) to the measured acceleration \(a\) are shown in Figure 9.

@@ -948,25 +953,25 @@ One can easily see that the system is strongly coupled.

-
+

stewart_platform_coupled_plant.png

-

Figure 9: Magnitude of all 36 elements of the transfer function matrix \(\bm{G}\)

+

Figure 9: Magnitude of all 36 elements of the transfer function matrix \(G_u\)

-
-

3.3 Physical Decoupling using the Jacobian

+
+

3.3 Physical Decoupling using the Jacobian

- -Consider the control architecture shown in Figure 10. + +Consider the control architecture shown in Figure 10. The Jacobian matrix is used to transform forces/torques applied on the top platform to the equivalent forces applied by each actuator.

-
+

plant_decouple_jacobian.png

Figure 10: Decoupled plant \(\bm{G}_x\) using the Jacobian matrix \(J\)

@@ -982,31 +987,27 @@ We define a new plant:

-
Gx = G*blkdiag(eye(6), inv(J'));
-Gx.InputName  = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ...
-                 'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
+
Gx = Gu*inv(J');
+Gx.InputName  = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
 
-
-

3.4 Real Approximation of \(G\) at the decoupling frequency

+
+

3.4 Real Approximation of \(G\) at the decoupling frequency

- +

-Let’s compute a real approximation of the complex matrix \(H_1\) which corresponds to the the transfer function \(G(j\omega_c)\) from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency \(\omega_c\). +Let’s compute a real approximation of the complex matrix \(H_1\) which corresponds to the the transfer function \(G_u(j\omega_c)\) from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency \(\omega_c\).

wc = 2*pi*30; % Decoupling frequency [rad/s]
 
-Gc = G({'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}, ...
-       {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); % Transfer function to find a real approximation
-
-H1 = evalfr(Gc, j*wc);
+H1 = evalfr(Gu, j*wc);
 
@@ -1094,9 +1095,9 @@ H1 = inv(D*real(H1'*

-Note that the plant \(G\) at \(\omega_c\) is already an almost real matrix. +Note that the plant \(G_u\) at \(\omega_c\) is already an almost real matrix. This can be seen on the Bode plots where the phase is close to 1. -This can be verified below where only the real value of \(G(\omega_c)\) is shown +This can be verified below where only the real value of \(G_u(\omega_c)\) is shown

@@ -1174,11 +1175,11 @@ This can be verified below where only the real value of \(G(\omega_c)\) is shown -
-

3.5 SVD Decoupling

+
+

3.5 SVD Decoupling

- +

@@ -1187,16 +1188,16 @@ First, the Singular Value Decomposition of \(H_1\) is performed:

-
[U,S,V] = svd(H1);
+
[U,~,V] = svd(H1);
 

-The obtained matrices \(U\) and \(V\) are used to decouple the system as shown in Figure 11. +The obtained matrices \(U\) and \(V\) are used to decouple the system as shown in Figure 11.

-
+

plant_decouple_svd.png

Figure 11: Decoupled plant \(\bm{G}_{SVD}\) using the Singular Value Decomposition

@@ -1204,22 +1205,32 @@ The obtained matrices \(U\) and \(V\) are used to decouple the system as shown i

The decoupled plant is then: -\[ G_{SVD}(s) = U^{-1} G(s) V^{-H} \] +\[ G_{SVD}(s) = U^{-1} G_u(s) V^{-H} \]

+ +
+
Gsvd = inv(U)*Gu*inv(V');
+
+
-
-

3.6 Verification of the decoupling using the “Gershgorin Radii”

+
+

3.6 Verification of the decoupling using the “Gershgorin Radii”

- +

The “Gershgorin Radii” is computed for the coupled plant \(G(s)\), for the “Jacobian plant” \(G_x(s)\) and the “SVD Decoupled Plant” \(G_{SVD}(s)\):

+

+The “Gershgorin Radii” of a matrix \(S\) is defined by: +\[ \zeta_i(j\omega) = \frac{\sum\limits_{j\neq i}|S_{ij}(j\omega)|}{|S_{ii}(j\omega)|} \] +

+

This is computed over the following frequencies.

@@ -1229,7 +1240,7 @@ This is computed over the following frequencies.
-
+

simscape_model_gershgorin_radii.png

Figure 12: Gershgorin Radii of the Coupled and Decoupled plants

@@ -1237,30 +1248,30 @@ This is computed over the following frequencies.
-
-

3.7 Obtained Decoupled Plants

+
+

3.7 Obtained Decoupled Plants

- +

-The bode plot of the diagonal and off-diagonal elements of \(G_{SVD}\) are shown in Figure 13. +The bode plot of the diagonal and off-diagonal elements of \(G_{SVD}\) are shown in Figure 13.

-
+

simscape_model_decoupled_plant_svd.png

Figure 13: Decoupled Plant using SVD

-Similarly, the bode plots of the diagonal elements and off-diagonal elements of the decoupled plant \(G_x(s)\) using the Jacobian are shown in Figure 14. +Similarly, the bode plots of the diagonal elements and off-diagonal elements of the decoupled plant \(G_x(s)\) using the Jacobian are shown in Figure 14.

-
+

simscape_model_decoupled_plant_jacobian.png

Figure 14: Stewart Platform Plant from forces (resp. torques) applied by the legs to the acceleration (resp. angular acceleration) of the platform as well as all the coupling terms between the two (non-diagonal terms of the transfer function matrix)

@@ -1268,15 +1279,12 @@ Similarly, the bode plots of the diagonal elements and off-diagonal elements of
-
-

3.8 Diagonal Controller

+
+

3.8 Diagonal Controller

- -

- -

-The control diagram for the centralized control is shown in Figure 15. + +The control diagram for the centralized control is shown in Figure 15.

@@ -1285,19 +1293,19 @@ The Jacobian is used to convert forces in the cartesian frame to forces applied

-
+

centralized_control.png

Figure 15: Control Diagram for the Centralized control

-The SVD control architecture is shown in Figure 16. +The SVD control architecture is shown in Figure 16. The matrices \(U\) and \(V\) are used to decoupled the plant \(G\).

-
+

svd_control.png

Figure 16: Control Diagram for the SVD control

@@ -1314,31 +1322,31 @@ We choose the controller to be a low pass filter:

-
wc = 2*pi*80;
-w0 = 2*pi*0.1;
+
wc = 2*pi*80;  % Crossover Frequency [rad/s]
+w0 = 2*pi*0.1; % Controller Pole [rad/s]
 
-
K_cen = diag(1./diag(abs(evalfr(Gx(1:6, 7:12), j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0);
-L_cen = K_cen*Gx(1:6, 7:12);
+
K_cen = diag(1./diag(abs(evalfr(Gx, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0);
+L_cen = K_cen*Gx;
 G_cen = feedback(G, pinv(J')*K_cen, [7:12], [1:6]);
 
-
K_svd = diag(1./diag(abs(evalfr(Gd, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0);
-L_svd = K_svd*Gd;
+
K_svd = diag(1./diag(abs(evalfr(Gsvd, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0);
+L_svd = K_svd*Gsvd;
 G_svd = feedback(G, inv(V')*K_svd*inv(U), [7:12], [1:6]);
 

-The obtained diagonal elements of the loop gains are shown in Figure 17. +The obtained diagonal elements of the loop gains are shown in Figure 17.

-
+

stewart_comp_loop_gain_diagonal.png

Figure 17: Comparison of the diagonal elements of the loop gains for the SVD control architecture and the Jacobian one

@@ -1346,11 +1354,11 @@ The obtained diagonal elements of the loop gains are shown in Figure -

3.9 Closed-Loop system Performances

+
+

3.9 Closed-Loop system Performances

- +

@@ -1381,11 +1389,11 @@ ans =

-The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure 18. +The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure 18.

-
+

stewart_platform_simscape_cl_transmissibility.png

Figure 18: Obtained Transmissibility

@@ -1396,7 +1404,7 @@ The obtained transmissibility in Open-loop, for the centralized control as well

Author: Dehaeze Thomas

-

Created: 2020-11-09 lun. 10:54

+

Created: 2020-11-09 lun. 14:36

diff --git a/index.org b/index.org index 2d30e08..daf79ab 100644 --- a/index.org +++ b/index.org @@ -713,7 +713,7 @@ The analysis of the SVD control applied to the Stewart platform is performed in - Section [[sec:stewart_diagonal_control]]: A diagonal controller is defined to control the decoupled plant - Section [[sec:stewart_closed_loop_results]]: Finally, the closed loop system properties are studied -** Matlab Init :noexport:ignore: +** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> #+end_src @@ -820,7 +820,7 @@ The outputs are the 6 accelerations measured by the inertial unit. #+begin_src latex :file stewart_platform_plant.pdf :tangle no :exports results \begin{tikzpicture} - \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G\end{bmatrix}$}; + \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G_u\end{bmatrix}$}; \node[above] at (G.north) {$\bm{G}$}; % Inputs of the controllers @@ -835,7 +835,7 @@ The outputs are the 6 accelerations measured by the inertial unit. #+end_src #+name: fig:stewart_platform_plant -#+caption: Considered plant $\bm{G} = \begin{bmatrix}G_d\\G\end{bmatrix}$. $D_w$ is the translation/rotation of the support, $\tau$ the actuator forces, $a$ the acceleration/angular acceleration of the top platform +#+caption: Considered plant $\bm{G} = \begin{bmatrix}G_d\\G_u\end{bmatrix}$. $D_w$ is the translation/rotation of the support, $\tau$ the actuator forces, $a$ the acceleration/angular acceleration of the top platform #+RESULTS: [[file:figs/stewart_platform_plant.png]] @@ -853,6 +853,11 @@ The outputs are the 6 accelerations measured by the inertial unit. G.InputName = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ... 'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.OutputName = {'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}; + + % Plant + Gu = G(:, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); + % Disturbance dynamics + Gd = G(:, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'}); #+end_src There are 24 states (6dof for the bottom platform + 6dof for the top platform). @@ -876,15 +881,15 @@ One can easily see that the system is strongly coupled. hold on; for i_in = 1:6 for i_out = [1:i_in-1, i_in+1:6] - plot(freqs, abs(squeeze(freqresp(G(i_out, 6+i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + plot(freqs, abs(squeeze(freqresp(Gu(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... 'HandleVisibility', 'off'); end end - plot(freqs, abs(squeeze(freqresp(G(i_out, 6+i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... - 'DisplayName', '$G(i,j)\ i \neq j$'); + plot(freqs, abs(squeeze(freqresp(Gu(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'DisplayName', '$G_u(i,j)\ i \neq j$'); set(gca,'ColorOrderIndex',1) for i_in_out = 1:6 - plot(freqs, abs(squeeze(freqresp(G(i_in_out, 6+i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G(%d,%d)$', i_in_out, i_in_out)); + plot(freqs, abs(squeeze(freqresp(Gu(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_u(%d,%d)$', i_in_out, i_in_out)); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -898,7 +903,7 @@ One can easily see that the system is strongly coupled. #+end_src #+name: fig:stewart_platform_coupled_plant -#+caption: Magnitude of all 36 elements of the transfer function matrix $\bm{G}$ +#+caption: Magnitude of all 36 elements of the transfer function matrix $G_u$ #+RESULTS: [[file:figs/stewart_platform_coupled_plant.png]] @@ -909,22 +914,16 @@ The Jacobian matrix is used to transform forces/torques applied on the top platf #+begin_src latex :file plant_decouple_jacobian.pdf :tangle no :exports results \begin{tikzpicture} - \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G\end{bmatrix}$}; - - % Inputs of the controllers - \coordinate[] (inputd) at ($(G.south west)!0.75!(G.north west)$); - \coordinate[] (inputu) at ($(G.south west)!0.25!(G.north west)$); - - \node[block, left=0.6 of inputu] (J) {$J^{-T}$}; + \node[block] (G) {$G_u$}; + \node[block, left=0.6 of G] (J) {$J^{-T}$}; % Connections and labels - \draw[<-] (inputd) -- ++(-0.8, 0) node[above right]{$D_w$}; - \draw[->] (G.east) -- ++( 0.8, 0) node[above left]{$a$}; - \draw[->] (J.east) -- (inputu) node[above left]{$\tau$}; - \draw[<-] (J.west) -- ++(-0.8, 0) node[above right]{$\mathcal{F}$}; + \draw[<-] (J.west) -- ++(-1.0, 0) node[above right]{$\mathcal{F}$}; + \draw[->] (J.east) -- (G.west) node[above left]{$\tau$}; + \draw[->] (G.east) -- ++( 1.0, 0) node[above left]{$a$}; \begin{scope}[on background layer] - \node[fit={(J.south west) (G.north east)}, fill=black!10!white, draw, dashed, inner sep=8pt] (Gx) {}; + \node[fit={(J.south west) (G.north east)}, fill=black!10!white, draw, dashed, inner sep=14pt] (Gx) {}; \node[below right] at (Gx.north west) {$\bm{G}_x$}; \end{scope} \end{tikzpicture} @@ -941,22 +940,18 @@ We define a new plant: $G_x(s)$ correspond to the transfer function from forces and torques applied to the top platform to the absolute acceleration of the top platform. #+begin_src matlab - Gx = G*blkdiag(eye(6), inv(J')); - Gx.InputName = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ... - 'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; + Gx = Gu*inv(J'); + Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; #+end_src ** Real Approximation of $G$ at the decoupling frequency <> -Let's compute a real approximation of the complex matrix $H_1$ which corresponds to the the transfer function $G(j\omega_c)$ from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency $\omega_c$. +Let's compute a real approximation of the complex matrix $H_1$ which corresponds to the the transfer function $G_u(j\omega_c)$ from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency $\omega_c$. #+begin_src matlab wc = 2*pi*30; % Decoupling frequency [rad/s] - Gc = G({'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}, ... - {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); % Transfer function to find a real approximation - - H1 = evalfr(Gc, j*wc); + H1 = evalfr(Gu, j*wc); #+end_src The real approximation is computed as follows: @@ -979,12 +974,12 @@ The real approximation is computed as follows: | 220.6 | -220.6 | 220.6 | -220.6 | 220.6 | -220.6 | -Note that the plant $G$ at $\omega_c$ is already an almost real matrix. +Note that the plant $G_u$ at $\omega_c$ is already an almost real matrix. This can be seen on the Bode plots where the phase is close to 1. -This can be verified below where only the real value of $G(\omega_c)$ is shown +This can be verified below where only the real value of $G_u(\omega_c)$ is shown #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(real(evalfr(Gc, j*wc)), {}, {}, ' %.1f '); + data2orgtable(real(evalfr(Gu, j*wc)), {}, {}, ' %.1f '); #+end_src #+RESULTS: @@ -1002,31 +997,26 @@ First, the Singular Value Decomposition of $H_1$ is performed: \[ H_1 = U \Sigma V^H \] #+begin_src matlab - [U,S,V] = svd(H1); + [U,~,V] = svd(H1); #+end_src The obtained matrices $U$ and $V$ are used to decouple the system as shown in Figure [[fig:plant_decouple_svd]]. #+begin_src latex :file plant_decouple_svd.pdf :tangle no :exports results \begin{tikzpicture} - \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G\end{bmatrix}$}; + \node[block] (G) {$G_u$}; - % Inputs of the controllers - \coordinate[] (inputd) at ($(G.south west)!0.75!(G.north west)$); - \coordinate[] (inputu) at ($(G.south west)!0.25!(G.north west)$); - - \node[block, left=0.6 of inputu] (V) {$V^{-T}$}; + \node[block, left=0.6 of G.west] (V) {$V^{-T}$}; \node[block, right=0.6 of G.east] (U) {$U^{-1}$}; % Connections and labels - \draw[<-] (inputd) -- ++(-0.8, 0) node[above right]{$D_w$}; + \draw[<-] (V.west) -- ++(-1.0, 0) node[above right]{$u$}; + \draw[->] (V.east) -- (G.west) node[above left]{$\tau$}; \draw[->] (G.east) -- (U.west) node[above left]{$a$}; - \draw[->] (U.east) -- ++( 0.8, 0) node[above left]{$y$}; - \draw[->] (V.east) -- (inputu) node[above left]{$\tau$}; - \draw[<-] (V.west) -- ++(-0.8, 0) node[above right]{$u$}; + \draw[->] (U.east) -- ++( 1.0, 0) node[above left]{$y$}; \begin{scope}[on background layer] - \node[fit={(V.south west) (G.north-|U.east)}, fill=black!10!white, draw, dashed, inner sep=8pt] (Gsvd) {}; + \node[fit={(V.south west) (G.north-|U.east)}, fill=black!10!white, draw, dashed, inner sep=14pt] (Gsvd) {}; \node[below right] at (Gsvd.north west) {$\bm{G}_{SVD}$}; \end{scope} \end{tikzpicture} @@ -1038,13 +1028,20 @@ The obtained matrices $U$ and $V$ are used to decouple the system as shown in Fi [[file:figs/plant_decouple_svd.png]] The decoupled plant is then: -\[ G_{SVD}(s) = U^{-1} G(s) V^{-H} \] +\[ G_{SVD}(s) = U^{-1} G_u(s) V^{-H} \] + +#+begin_src matlab + Gsvd = inv(U)*Gu*inv(V'); +#+end_src ** Verification of the decoupling using the "Gershgorin Radii" <> The "Gershgorin Radii" is computed for the coupled plant $G(s)$, for the "Jacobian plant" $G_x(s)$ and the "SVD Decoupled Plant" $G_{SVD}(s)$: +The "Gershgorin Radii" of a matrix $S$ is defined by: +\[ \zeta_i(j\omega) = \frac{\sum\limits_{j\neq i}|S_{ij}(j\omega)|}{|S_{ii}(j\omega)|} \] + This is computed over the following frequencies. #+begin_src matlab freqs = logspace(-2, 2, 1000); % [Hz] @@ -1052,29 +1049,23 @@ This is computed over the following frequencies. #+begin_src matlab :exports none % Gershgorin Radii for the coupled plant: - Gr_coupled = zeros(length(freqs), size(Gc,2)); - - H = abs(squeeze(freqresp(Gc, freqs, 'Hz'))); - for out_i = 1:size(Gc,2) + Gr_coupled = zeros(length(freqs), size(Gu,2)); + H = abs(squeeze(freqresp(Gu, freqs, 'Hz'))); + for out_i = 1:size(Gu,2) Gr_coupled(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end % Gershgorin Radii for the decoupled plant using SVD: - Gd = inv(U)*Gc*inv(V'); - Gr_decoupled = zeros(length(freqs), size(Gd,2)); - - H = abs(squeeze(freqresp(Gd, freqs, 'Hz'))); - for out_i = 1:size(Gd,2) + Gr_decoupled = zeros(length(freqs), size(Gsvd,2)); + H = abs(squeeze(freqresp(Gsvd, freqs, 'Hz'))); + for out_i = 1:size(Gsvd,2) Gr_decoupled(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end % Gershgorin Radii for the decoupled plant using the Jacobian: - Gj = Gc*inv(J'); - Gr_jacobian = zeros(length(freqs), size(Gj,2)); - - H = abs(squeeze(freqresp(Gj, freqs, 'Hz'))); - - for out_i = 1:size(Gj,2) + Gr_jacobian = zeros(length(freqs), size(Gx,2)); + H = abs(squeeze(freqresp(Gx, freqs, 'Hz'))); + for out_i = 1:size(Gx,2) Gr_jacobian(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end #+end_src @@ -1126,15 +1117,15 @@ The bode plot of the diagonal and off-diagonal elements of $G_{SVD}$ are shown i hold on; for i_in = 1:6 for i_out = [1:i_in-1, i_in+1:6] - plot(freqs, abs(squeeze(freqresp(Gd(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + plot(freqs, abs(squeeze(freqresp(Gsvd(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... 'HandleVisibility', 'off'); end end - plot(freqs, abs(squeeze(freqresp(Gd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.5], ... + plot(freqs, abs(squeeze(freqresp(Gsvd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.5], ... 'DisplayName', '$G_{SVD}(i,j),\ i \neq j$'); set(gca,'ColorOrderIndex',1) for ch_i = 1:6 - plot(freqs, abs(squeeze(freqresp(Gd(ch_i, ch_i), freqs, 'Hz'))), ... + plot(freqs, abs(squeeze(freqresp(Gsvd(ch_i, ch_i), freqs, 'Hz'))), ... 'DisplayName', sprintf('$G_{SVD}(%i,%i)$', ch_i, ch_i)); end hold off; @@ -1147,7 +1138,7 @@ The bode plot of the diagonal and off-diagonal elements of $G_{SVD}$ are shown i ax2 = nexttile; hold on; for ch_i = 1:6 - plot(freqs, 180/pi*angle(squeeze(freqresp(Gd(ch_i, ch_i), freqs, 'Hz')))); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gsvd(ch_i, ch_i), freqs, 'Hz')))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); @@ -1180,7 +1171,7 @@ Similarly, the bode plots of the diagonal elements and off-diagonal elements of hold on; for i_in = 1:6 for i_out = [1:i_in-1, i_in+1:6] - plot(freqs, abs(squeeze(freqresp(Gx(i_out, 6+i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + plot(freqs, abs(squeeze(freqresp(Gx(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... 'HandleVisibility', 'off'); end end @@ -1228,14 +1219,6 @@ Similarly, the bode plots of the diagonal elements and off-diagonal elements of ** Diagonal Controller <> - -#+begin_src matlab :exports none :tangle no - wc = 2*pi*0.1; % Crossover Frequency [rad/s] - C_g = 50; % DC Gain - - Kc = eye(6)*C_g/(s+wc); -#+end_src - The control diagram for the centralized control is shown in Figure [[fig:centralized_control]]. The controller $K_c$ is "working" in an cartesian frame. @@ -1243,7 +1226,7 @@ The Jacobian is used to convert forces in the cartesian frame to forces applied #+begin_src latex :file centralized_control.pdf :tangle no :exports results \begin{tikzpicture} - \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G\end{bmatrix}$}; + \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G_u\end{bmatrix}$}; \node[above] at (G.north) {$\bm{G}$}; \node[block, below right=0.6 and -0.5 of G] (K) {$K_c$}; \node[block, below left= 0.6 and -0.5 of G] (J) {$J^{-T}$}; @@ -1271,7 +1254,8 @@ The matrices $U$ and $V$ are used to decoupled the plant $G$. #+begin_src latex :file svd_control.pdf :tangle no :exports results \begin{tikzpicture} - \node[block={2cm}{1.5cm}] (G) {$G$}; + \node[block={2cm}{1.5cm}] (G) {$\begin{bmatrix}G_d\\G_u\end{bmatrix}$}; + \node[above] at (G.north) {$\bm{G}$}; \node[block, below right=0.6 and 0 of G] (U) {$U^{-1}$}; \node[block, below=0.6 of G] (K) {$K_{\text{SVD}}$}; \node[block, below left= 0.6 and 0 of G] (V) {$V^{-T}$}; @@ -1302,19 +1286,19 @@ We choose the controller to be a low pass filter: $G_0$ is tuned such that the crossover frequency corresponding to the diagonal terms of the loop gain is equal to $\omega_c$ #+begin_src matlab - wc = 2*pi*80; - w0 = 2*pi*0.1; + wc = 2*pi*80; % Crossover Frequency [rad/s] + w0 = 2*pi*0.1; % Controller Pole [rad/s] #+end_src #+begin_src matlab - K_cen = diag(1./diag(abs(evalfr(Gx(1:6, 7:12), j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); - L_cen = K_cen*Gx(1:6, 7:12); + K_cen = diag(1./diag(abs(evalfr(Gx, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); + L_cen = K_cen*Gx; G_cen = feedback(G, pinv(J')*K_cen, [7:12], [1:6]); #+end_src #+begin_src matlab - K_svd = diag(1./diag(abs(evalfr(Gd, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); - L_svd = K_svd*Gd; + K_svd = diag(1./diag(abs(evalfr(Gsvd, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); + L_svd = K_svd*Gsvd; G_svd = feedback(G, inv(V')*K_svd*inv(U), [7:12], [1:6]); #+end_src diff --git a/stewart_platform/simscape_model.m b/stewart_platform/simscape_model.m index f282ff5..e1a0276 100644 --- a/stewart_platform/simscape_model.m +++ b/stewart_platform/simscape_model.m @@ -6,42 +6,14 @@ s = zpk('s'); addpath('STEP'); -% Jacobian -% First, the position of the "joints" (points of force application) are estimated and the Jacobian computed. - -open('drone_platform_jacobian.slx'); - -sim('drone_platform_jacobian'); - -Aa = [a1.Data(1,:); - a2.Data(1,:); - a3.Data(1,:); - a4.Data(1,:); - a5.Data(1,:); - a6.Data(1,:)]'; - -Ab = [b1.Data(1,:); - b2.Data(1,:); - b3.Data(1,:); - b4.Data(1,:); - b5.Data(1,:); - b6.Data(1,:)]'; - -As = (Ab - Aa)./vecnorm(Ab - Aa); - -l = vecnorm(Ab - Aa)'; - -J = [As' , cross(Ab, As)']; - -save('./jacobian.mat', 'Aa', 'Ab', 'As', 'l', 'J'); - -% Simscape Model +% Simscape Model - Parameters +% <> open('drone_platform.slx'); -% Definition of spring parameters +% Definition of spring parameters: kx = 0.5*1e3/3; % [N/m] ky = 0.5*1e3/3; @@ -51,31 +23,53 @@ cx = 0.025; % [Nm/rad] cy = 0.025; cz = 0.025; + + +% Gravity: + g = 0; -% We load the Jacobian. +% We load the Jacobian (previously computed from the geometry): load('./jacobian.mat', 'Aa', 'Ab', 'As', 'l', 'J'); -% Identification of the plant -% The dynamics is identified from forces applied by each legs to the measured acceleration of the top platform. + + +% We initialize other parameters: + +U = eye(6); +V = eye(6); +Kc = tf(zeros(6)); + + + +% #+name: fig:stewart_platform_plant +% #+caption: Considered plant $\bm{G} = \begin{bmatrix}G_d\\G_u\end{bmatrix}$. $D_w$ is the translation/rotation of the support, $\tau$ the actuator forces, $a$ the acceleration/angular acceleration of the top platform +% #+RESULTS: +% [[file:figs/stewart_platform_plant.png]] + %% Name of the Simulink File mdl = 'drone_platform'; %% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Dw'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/u'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Inertial Sensor'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Dw'], 1, 'openinput'); io_i = io_i + 1; % Ground Motion +io(io_i) = linio([mdl, '/V-T'], 1, 'openinput'); io_i = io_i + 1; % Actuator Forces +io(io_i) = linio([mdl, '/Inertial Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Top platform acceleration G = linearize(mdl, io); G.InputName = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ... 'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.OutputName = {'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}; +% Plant +Gu = G(:, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); +% Disturbance dynamics +Gd = G(:, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'}); + % There are 24 states (6dof for the bottom platform + 6dof for the top platform). @@ -87,176 +81,59 @@ size(G) % #+RESULTS: % : State-space model with 6 outputs, 12 inputs, and 24 states. +% The elements of the transfer matrix $\bm{G}$ corresponding to the transfer function from actuator forces $\tau$ to the measured acceleration $a$ are shown in Figure [[fig:stewart_platform_coupled_plant]]. -% G = G*blkdiag(inv(J), eye(6)); -% G.InputName = {'Dw1', 'Dw2', 'Dw3', 'Dw4', 'Dw5', 'Dw6', ... -% 'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; - - - -% Thanks to the Jacobian, we compute the transfer functions in the frame of the legs and in an inertial frame. - -Gx = G*blkdiag(eye(6), inv(J')); -Gx.InputName = {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz', ... - 'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; - -% Gl = J*G; -% Gl.OutputName = {'A1', 'A2', 'A3', 'A4', 'A5', 'A6'}; - -% Obtained Dynamics - -freqs = logspace(-1, 2, 1000); - -figure; - -ax1 = subplot(2, 1, 1); -hold on; -plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Fx'), freqs, 'Hz'))), 'DisplayName', '$A_x/F_x$'); -plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Fy'), freqs, 'Hz'))), 'DisplayName', '$A_y/F_y$'); -plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Fz'), freqs, 'Hz'))), 'DisplayName', '$A_z/F_z$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); -legend('location', 'southeast'); - -ax2 = subplot(2, 1, 2); -hold on; -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ax', 'Fx'), freqs, 'Hz')))); -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ay', 'Fy'), freqs, 'Hz')))); -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Az', 'Fz'), freqs, 'Hz')))); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); -ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); -ylim([-180, 180]); -yticks([-360:90:360]); - -linkaxes([ax1,ax2],'x'); - - - -% #+name: fig:stewart_platform_translations -% #+caption: Stewart Platform Plant from forces applied by the legs to the acceleration of the platform -% #+RESULTS: -% [[file:figs/stewart_platform_translations.png]] +% One can easily see that the system is strongly coupled. freqs = logspace(-1, 2, 1000); figure; -ax1 = subplot(2, 1, 1); +% Magnitude hold on; -plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Mx'), freqs, 'Hz'))), 'DisplayName', '$A_{R_x}/M_x$'); -plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'My'), freqs, 'Hz'))), 'DisplayName', '$A_{R_y}/M_y$'); -plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Mz'), freqs, 'Hz'))), 'DisplayName', '$A_{R_z}/M_z$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Amplitude [rad/(Nm)]'); set(gca, 'XTickLabel',[]); -legend('location', 'southeast'); - -ax2 = subplot(2, 1, 2); -hold on; -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Arx', 'Mx'), freqs, 'Hz')))); -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ary', 'My'), freqs, 'Hz')))); -plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Arz', 'Mz'), freqs, 'Hz')))); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); -ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); -ylim([-180, 180]); -yticks([-360:90:360]); - -linkaxes([ax1,ax2],'x'); - - - -% #+name: fig:stewart_platform_rotations -% #+caption: Stewart Platform Plant from torques applied by the legs to the angular acceleration of the platform -% #+RESULTS: -% [[file:figs/stewart_platform_rotations.png]] - - -freqs = logspace(-1, 2, 1000); - -figure; - -ax1 = subplot(2, 1, 1); -hold on; -for out_i = 1:5 - for in_i = i+1:6 - plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', out_i), sprintf('F%i', in_i)), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]); - end +for i_in = 1:6 + for i_out = [1:i_in-1, i_in+1:6] + plot(freqs, abs(squeeze(freqresp(Gu(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'HandleVisibility', 'off'); + end end -for ch_i = 1:6 - plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz')))); +plot(freqs, abs(squeeze(freqresp(Gu(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'DisplayName', '$G_u(i,j)\ i \neq j$'); +set(gca,'ColorOrderIndex',1) +for i_in_out = 1:6 + plot(freqs, abs(squeeze(freqresp(Gu(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_u(%d,%d)$', i_in_out, i_in_out)); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - -ax2 = subplot(2, 1, 2); -hold on; -for ch_i = 1:6 - plot(freqs, 180/pi*angle(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz')))); -end -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); -ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); -ylim([-180, 180]); -yticks([-360:90:360]); - -linkaxes([ax1,ax2],'x'); +xlabel('Frequency [Hz]'); ylabel('Magnitude'); +ylim([1e-2, 1e5]); +legend('location', 'northwest'); -% #+name: fig:stewart_platform_legs -% #+caption: Stewart Platform Plant from forces applied by the legs to displacement of the legs +% #+name: fig:plant_decouple_jacobian +% #+caption: Decoupled plant $\bm{G}_x$ using the Jacobian matrix $J$ % #+RESULTS: -% [[file:figs/stewart_platform_legs.png]] +% [[file:figs/plant_decouple_jacobian.png]] + +% We define a new plant: +% \[ G_x(s) = G(s) J^{-T} \] + +% $G_x(s)$ correspond to the transfer function from forces and torques applied to the top platform to the absolute acceleration of the top platform. -freqs = logspace(-1, 2, 1000); - -figure; - -ax1 = subplot(2, 1, 1); -hold on; -plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_x/D_{w,x}$'); -plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_y/D_{w,y}$'); -plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Dwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_z/D_{w,z}$'); -% set(gca,'ColorOrderIndex',1) -% plot(freqs, abs(squeeze(freqresp(TR(1,1), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -% plot(freqs, abs(squeeze(freqresp(TR(2,2), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -% plot(freqs, abs(squeeze(freqresp(TR(3,3), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - Translations'); xlabel('Frequency [Hz]'); -legend('location', 'northeast'); - -ax2 = subplot(2, 1, 2); -hold on; -plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Rwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_x/R_{w,x}$'); -plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'Rwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_y/R_{w,y}$'); -plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Rwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_z/R_{w,z}$'); -% set(gca,'ColorOrderIndex',1) -% plot(freqs, abs(squeeze(freqresp(TR(4,4), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -% plot(freqs, abs(squeeze(freqresp(TR(5,5), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -% plot(freqs, abs(squeeze(freqresp(TR(6,6), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - Rotations'); xlabel('Frequency [Hz]'); -legend('location', 'northeast'); - -linkaxes([ax1,ax2],'x'); +Gx = Gu*inv(J'); +Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; % Real Approximation of $G$ at the decoupling frequency -% Let's compute a real approximation of the complex matrix $H_1$ which corresponds to the the transfer function $G_c(j\omega_c)$ from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency $\omega_c$. +% <> + +% Let's compute a real approximation of the complex matrix $H_1$ which corresponds to the the transfer function $G_u(j\omega_c)$ from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency $\omega_c$. wc = 2*pi*30; % Decoupling frequency [rad/s] -Gc = G({'Ax', 'Ay', 'Az', 'Arx', 'Ary', 'Arz'}, ... - {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}); % Transfer function to find a real approximation - -H1 = evalfr(Gc, j*wc); +H1 = evalfr(Gu, j*wc); @@ -265,55 +142,58 @@ H1 = evalfr(Gc, j*wc); D = pinv(real(H1'*H1)); H1 = inv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2)))); -% Verification of the decoupling using the "Gershgorin Radii" +% SVD Decoupling +% <> + % First, the Singular Value Decomposition of $H_1$ is performed: % \[ H_1 = U \Sigma V^H \] -[U,S,V] = svd(H1); +[U,~,V] = svd(H1); -% Then, the "Gershgorin Radii" is computed for the plant $G_c(s)$ and the "SVD Decoupled Plant" $G_d(s)$: -% \[ G_d(s) = U^T G_c(s) V \] +% #+name: fig:plant_decouple_svd +% #+caption: Decoupled plant $\bm{G}_{SVD}$ using the Singular Value Decomposition +% #+RESULTS: +% [[file:figs/plant_decouple_svd.png]] + +% The decoupled plant is then: +% \[ G_{SVD}(s) = U^{-1} G_u(s) V^{-H} \] + + +Gsvd = inv(U)*Gu*inv(V'); + +% Verification of the decoupling using the "Gershgorin Radii" +% <> + +% The "Gershgorin Radii" is computed for the coupled plant $G(s)$, for the "Jacobian plant" $G_x(s)$ and the "SVD Decoupled Plant" $G_{SVD}(s)$: + +% The "Gershgorin Radii" of a matrix $S$ is defined by: +% \[ \zeta_i(j\omega) = \frac{\sum\limits_{j\neq i}|S_{ij}(j\omega)|}{|S_{ii}(j\omega)|} \] % This is computed over the following frequencies. freqs = logspace(-2, 2, 1000); % [Hz] - - % Gershgorin Radii for the coupled plant: - -Gr_coupled = zeros(length(freqs), size(Gc,2)); - -H = abs(squeeze(freqresp(Gc, freqs, 'Hz'))); -for out_i = 1:size(Gc,2) +Gr_coupled = zeros(length(freqs), size(Gu,2)); +H = abs(squeeze(freqresp(Gu, freqs, 'Hz'))); +for out_i = 1:size(Gu,2) Gr_coupled(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end - - % Gershgorin Radii for the decoupled plant using SVD: - -Gd = U'*Gc*V; -Gr_decoupled = zeros(length(freqs), size(Gd,2)); - -H = abs(squeeze(freqresp(Gd, freqs, 'Hz'))); -for out_i = 1:size(Gd,2) +Gr_decoupled = zeros(length(freqs), size(Gsvd,2)); +H = abs(squeeze(freqresp(Gsvd, freqs, 'Hz'))); +for out_i = 1:size(Gsvd,2) Gr_decoupled(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end - - % Gershgorin Radii for the decoupled plant using the Jacobian: - -Gj = Gc*inv(J'); -Gr_jacobian = zeros(length(freqs), size(Gj,2)); - -H = abs(squeeze(freqresp(Gj, freqs, 'Hz'))); - -for out_i = 1:size(Gj,2) +Gr_jacobian = zeros(length(freqs), size(Gx,2)); +H = abs(squeeze(freqresp(Gx, freqs, 'Hz'))); +for out_i = 1:size(Gx,2) Gr_jacobian(:, out_i) = squeeze((sum(H(out_i,:,:)) - H(out_i,out_i,:))./H(out_i, out_i, :)); end @@ -334,31 +214,55 @@ plot(freqs, 0.5*ones(size(freqs)), 'k--', 'DisplayName', 'Limit') set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); hold off; xlabel('Frequency (Hz)'); ylabel('Gershgorin Radii') -legend('location', 'northeast'); +legend('location', 'northwest'); +ylim([1e-3, 1e3]); -% Decoupled Plant -% Let's see the bode plot of the decoupled plant $G_d(s)$. -% \[ G_d(s) = U^T G_c(s) V \] +% Obtained Decoupled Plants +% <> + +% The bode plot of the diagonal and off-diagonal elements of $G_{SVD}$ are shown in Figure [[fig:simscape_model_decoupled_plant_svd]]. freqs = logspace(-1, 2, 1000); figure; +tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); + +% Magnitude +ax1 = nexttile([2, 1]); hold on; -for ch_i = 1:6 - plot(freqs, abs(squeeze(freqresp(Gd(ch_i, ch_i), freqs, 'Hz'))), ... - 'DisplayName', sprintf('$G(%i, %i)$', ch_i, ch_i)); +for i_in = 1:6 + for i_out = [1:i_in-1, i_in+1:6] + plot(freqs, abs(squeeze(freqresp(Gsvd(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'HandleVisibility', 'off'); + end end -for in_i = 1:5 - for out_i = in_i+1:6 - plot(freqs, abs(squeeze(freqresp(Gd(out_i, in_i), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'HandleVisibility', 'off'); - end +plot(freqs, abs(squeeze(freqresp(Gsvd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.5], ... + 'DisplayName', '$G_{SVD}(i,j),\ i \neq j$'); +set(gca,'ColorOrderIndex',1) +for ch_i = 1:6 + plot(freqs, abs(squeeze(freqresp(Gsvd(ch_i, ch_i), freqs, 'Hz'))), ... + 'DisplayName', sprintf('$G_{SVD}(%i,%i)$', ch_i, ch_i)); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Amplitude'); xlabel('Frequency [Hz]'); -legend('location', 'southeast'); +ylabel('Magnitude'); set(gca, 'XTickLabel',[]); +legend('location', 'northwest'); +ylim([1e-1, 1e5]) + +% Phase +ax2 = nexttile; +hold on; +for ch_i = 1:6 + plot(freqs, 180/pi*angle(squeeze(freqresp(Gsvd(ch_i, ch_i), freqs, 'Hz')))); +end +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); +ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); +ylim([-180, 180]); +yticks([-180:90:360]); + +linkaxes([ax1,ax2],'x'); @@ -367,53 +271,135 @@ legend('location', 'southeast'); % #+RESULTS: % [[file:figs/simscape_model_decoupled_plant_svd.png]] +% Similarly, the bode plots of the diagonal elements and off-diagonal elements of the decoupled plant $G_x(s)$ using the Jacobian are shown in Figure [[fig:simscape_model_decoupled_plant_jacobian]]. + freqs = logspace(-1, 2, 1000); figure; +tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); + +% Magnitude +ax1 = nexttile([2, 1]); hold on; -for ch_i = 1:6 - plot(freqs, abs(squeeze(freqresp(Gj(ch_i, ch_i), freqs, 'Hz'))), ... - 'DisplayName', sprintf('$G(%i, %i)$', ch_i, ch_i)); -end -for in_i = 1:5 - for out_i = in_i+1:6 - plot(freqs, abs(squeeze(freqresp(Gj(out_i, in_i), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'HandleVisibility', 'off'); - end +for i_in = 1:6 + for i_out = [1:i_in-1, i_in+1:6] + plot(freqs, abs(squeeze(freqresp(Gx(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'HandleVisibility', 'off'); + end end +plot(freqs, abs(squeeze(freqresp(Gx(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.5], ... + 'DisplayName', '$G_x(i,j),\ i \neq j$'); +set(gca,'ColorOrderIndex',1) +plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Fx'), freqs, 'Hz'))), 'DisplayName', '$G_x(1,1) = A_x/F_x$'); +plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Fy'), freqs, 'Hz'))), 'DisplayName', '$G_x(2,2) = A_y/F_y$'); +plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Fz'), freqs, 'Hz'))), 'DisplayName', '$G_x(3,3) = A_z/F_z$'); +plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Mx'), freqs, 'Hz'))), 'DisplayName', '$G_x(4,4) = A_{R_x}/M_x$'); +plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'My'), freqs, 'Hz'))), 'DisplayName', '$G_x(5,5) = A_{R_y}/M_y$'); +plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Mz'), freqs, 'Hz'))), 'DisplayName', '$G_x(6,6) = A_{R_z}/M_z$'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Amplitude'); xlabel('Frequency [Hz]'); -legend('location', 'southeast'); +ylabel('Magnitude'); set(gca, 'XTickLabel',[]); +legend('location', 'northwest'); +ylim([1e-2, 2e6]) -% Diagonal Controller -% The controller $K$ is a diagonal controller consisting a low pass filters with a crossover frequency $\omega_c$ and a DC gain $C_g$. +% Phase +ax2 = nexttile; +hold on; +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ax', 'Fx'), freqs, 'Hz')))); +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ay', 'Fy'), freqs, 'Hz')))); +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Az', 'Fz'), freqs, 'Hz')))); +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Arx', 'Mx'), freqs, 'Hz')))); +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Ary', 'My'), freqs, 'Hz')))); +plot(freqs, 180/pi*angle(squeeze(freqresp(Gx('Arz', 'Mz'), freqs, 'Hz')))); +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); +ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); +ylim([0, 180]); +yticks([0:45:360]); - -wc = 2*pi*0.1; % Crossover Frequency [rad/s] -C_g = 50; % DC Gain - -K = eye(6)*C_g/(s+wc); - - - -% #+RESULTS: -% [[file:figs/centralized_control.png]] - - -G_cen = feedback(G, inv(J')*K, [7:12], [1:6]); +linkaxes([ax1,ax2],'x'); +% #+name: fig:svd_control +% #+caption: Control Diagram for the SVD control % #+RESULTS: % [[file:figs/svd_control.png]] -% SVD Control -G_svd = feedback(G, pinv(V')*K*pinv(U), [7:12], [1:6]); +% We choose the controller to be a low pass filter: +% \[ K_c(s) = \frac{G_0}{1 + \frac{s}{\omega_0}} \] + +% $G_0$ is tuned such that the crossover frequency corresponding to the diagonal terms of the loop gain is equal to $\omega_c$ + + +wc = 2*pi*80; % Crossover Frequency [rad/s] +w0 = 2*pi*0.1; % Controller Pole [rad/s] + +K_cen = diag(1./diag(abs(evalfr(Gx, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); +L_cen = K_cen*Gx; +G_cen = feedback(G, pinv(J')*K_cen, [7:12], [1:6]); + +K_svd = diag(1./diag(abs(evalfr(Gsvd, j*wc))))*(1/abs(evalfr(1/(1 + s/w0), j*wc)))/(1 + s/w0); +L_svd = K_svd*Gsvd; +G_svd = feedback(G, inv(V')*K_svd*inv(U), [7:12], [1:6]); + + + +% The obtained diagonal elements of the loop gains are shown in Figure [[fig:stewart_comp_loop_gain_diagonal]]. + + +freqs = logspace(-1, 2, 1000); + +figure; +tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); + +% Magnitude +ax1 = nexttile([2, 1]); +hold on; +plot(freqs, abs(squeeze(freqresp(L_svd(1, 1), freqs, 'Hz'))), 'DisplayName', '$L_{SVD}(i,i)$'); +for i_in_out = 2:6 + set(gca,'ColorOrderIndex',1) + plot(freqs, abs(squeeze(freqresp(L_svd(i_in_out, i_in_out), freqs, 'Hz'))), 'HandleVisibility', 'off'); +end + +set(gca,'ColorOrderIndex',2) +plot(freqs, abs(squeeze(freqresp(L_cen(1, 1), freqs, 'Hz'))), ... + 'DisplayName', '$L_{J}(i,i)$'); +for i_in_out = 2:6 + set(gca,'ColorOrderIndex',2) + plot(freqs, abs(squeeze(freqresp(L_cen(i_in_out, i_in_out), freqs, 'Hz'))), 'HandleVisibility', 'off'); +end +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +ylabel('Magnitude'); set(gca, 'XTickLabel',[]); +legend('location', 'northwest'); +ylim([5e-2, 2e3]) + +% Phase +ax2 = nexttile; +hold on; +for i_in_out = 1:6 + set(gca,'ColorOrderIndex',1) + plot(freqs, 180/pi*angle(squeeze(freqresp(L_svd(i_in_out, i_in_out), freqs, 'Hz')))); +end +set(gca,'ColorOrderIndex',2) +for i_in_out = 1:6 + set(gca,'ColorOrderIndex',2) + plot(freqs, 180/pi*angle(squeeze(freqresp(L_cen(i_in_out, i_in_out), freqs, 'Hz')))); +end +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); +ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); +ylim([-180, 180]); +yticks([-180:90:360]); + +linkaxes([ax1,ax2],'x'); + +% Closed-Loop system Performances +% <> -% Results % Let's first verify the stability of the closed-loop systems: isstable(G_cen) @@ -433,69 +419,61 @@ isstable(G_svd) % #+RESULTS: % : ans = % : logical -% : 0 +% : 1 % The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure [[fig:stewart_platform_simscape_cl_transmissibility]]. -freqs = logspace(-3, 3, 1000); +freqs = logspace(-2, 2, 1000); -figure +figure; +tiledlayout(2, 2, 'TileSpacing', 'None', 'Padding', 'None'); -ax1 = subplot(2, 3, 1); +ax1 = nexttile; hold on; plot(freqs, abs(squeeze(freqresp(G( 'Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', 'Open-Loop'); plot(freqs, abs(squeeze(freqresp(G_cen('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', 'Centralized'); -plot(freqs, abs(squeeze(freqresp(G_svd('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', 'SVD'); +plot(freqs, abs(squeeze(freqresp(G_svd('Ax', 'Dwx')/s^2, freqs, 'Hz'))), '--', 'DisplayName', 'SVD'); +set(gca,'ColorOrderIndex',1) +plot(freqs, abs(squeeze(freqresp(G( 'Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'HandleVisibility', 'off'); +plot(freqs, abs(squeeze(freqresp(G_cen('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'HandleVisibility', 'off'); +plot(freqs, abs(squeeze(freqresp(G_svd('Ay', 'Dwy')/s^2, freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $D_x/D_{w,x}$'); xlabel('Frequency [Hz]'); +ylabel('$D_x/D_{w,x}$, $D_y/D_{w, y}$'); set(gca, 'XTickLabel',[]); legend('location', 'southwest'); -ax2 = subplot(2, 3, 2); -hold on; -plot(freqs, abs(squeeze(freqresp(G( 'Ay', 'Dwy')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_cen('Ay', 'Dwy')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_svd('Ay', 'Dwy')/s^2, freqs, 'Hz')))); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $D_y/D_{w,y}$'); xlabel('Frequency [Hz]'); - -ax3 = subplot(2, 3, 3); +ax2 = nexttile; hold on; plot(freqs, abs(squeeze(freqresp(G( 'Az', 'Dwz')/s^2, freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(G_cen('Az', 'Dwz')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_svd('Az', 'Dwz')/s^2, freqs, 'Hz')))); +plot(freqs, abs(squeeze(freqresp(G_svd('Az', 'Dwz')/s^2, freqs, 'Hz'))), '--'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $D_z/D_{w,z}$'); xlabel('Frequency [Hz]'); +ylabel('$D_z/D_{w,z}$'); set(gca, 'XTickLabel',[]); -ax4 = subplot(2, 3, 4); +ax3 = nexttile; hold on; plot(freqs, abs(squeeze(freqresp(G( 'Arx', 'Rwx')/s^2, freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(G_cen('Arx', 'Rwx')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_svd('Arx', 'Rwx')/s^2, freqs, 'Hz')))); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $R_x/R_{w,x}$'); xlabel('Frequency [Hz]'); - -ax5 = subplot(2, 3, 5); -hold on; +plot(freqs, abs(squeeze(freqresp(G_svd('Arx', 'Rwx')/s^2, freqs, 'Hz'))), '--'); +set(gca,'ColorOrderIndex',1) plot(freqs, abs(squeeze(freqresp(G( 'Ary', 'Rwy')/s^2, freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(G_cen('Ary', 'Rwy')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_svd('Ary', 'Rwy')/s^2, freqs, 'Hz')))); +plot(freqs, abs(squeeze(freqresp(G_svd('Ary', 'Rwy')/s^2, freqs, 'Hz'))), '--'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $R_y/R_{w,y}$'); xlabel('Frequency [Hz]'); +ylabel('$R_x/R_{w,x}$, $R_y/R_{w,y}$'); xlabel('Frequency [Hz]'); -ax6 = subplot(2, 3, 6); +ax4 = nexttile; hold on; plot(freqs, abs(squeeze(freqresp(G( 'Arz', 'Rwz')/s^2, freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(G_cen('Arz', 'Rwz')/s^2, freqs, 'Hz')))); -plot(freqs, abs(squeeze(freqresp(G_svd('Arz', 'Rwz')/s^2, freqs, 'Hz')))); +plot(freqs, abs(squeeze(freqresp(G_svd('Arz', 'Rwz')/s^2, freqs, 'Hz'))), '--'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -ylabel('Transmissibility - $R_z/R_{w,z}$'); xlabel('Frequency [Hz]'); +ylabel('$R_z/R_{w,z}$'); xlabel('Frequency [Hz]'); -linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'x'); +linkaxes([ax1,ax2,ax3,ax4],'xy'); xlim([freqs(1), freqs(end)]); +ylim([1e-3, 1e2]);