From 0b49eca9e0918a4e9199348f6a9d7d6ffd54bcb9 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Mon, 14 Mar 2016 12:04:58 +0200 Subject: [PATCH 1/9] bring package up to date use draw2d for text rendering --- draw.go | 69 +++++++++-------------------------- draw_test.go | 16 +------- example/FiraSans-Regular.ttf | Bin 194812 -> 0 bytes example/luxisr.ttf | Bin 0 -> 67548 bytes example/main.go | 4 +- features.go | 6 +++ http.go | 23 +----------- 7 files changed, 29 insertions(+), 89 deletions(-) delete mode 100644 example/FiraSans-Regular.ttf create mode 100644 example/luxisr.ttf diff --git a/draw.go b/draw.go index c8408c6..5e29456 100644 --- a/draw.go +++ b/draw.go @@ -5,17 +5,14 @@ import ( "image" "image/color" "image/draw" - "math" "time" - "code.google.com/p/draw2d/draw2d" - "code.google.com/p/freetype-go/freetype" - "code.google.com/p/freetype-go/freetype/truetype" + "github.com/llgcode/draw2d/draw2dimg" ) const tileSize = 256 -func DrawTile(nwPt, sePt Pointer, zoom int64, font *truetype.Font, data *OsmData, debug bool) (image.Image, error) { +func DrawTile(nwPt, sePt Pointer, zoom int64, data *OsmData, debug bool) (image.Image, error) { t := time.Now() // Create white image @@ -72,13 +69,13 @@ func DrawTile(nwPt, sePt Pointer, zoom int64, font *truetype.Font, data *OsmData } // Tile location - err := drawText(img, font, red, tileSize/2, 20, fmt.Sprintf("%f, %f", nwPt.Lon(), nwPt.Lat())) + err := drawText(img, red, tileSize/2, 20, fmt.Sprintf("%f, %f", nwPt.Lon(), nwPt.Lat())) if err != nil { return nil, err } // Tile location - err = drawText(img, font, red, tileSize/2, tileSize-20, time.Since(t).String()) + err = drawText(img, red, tileSize/2, tileSize-20, time.Since(t).String()) if err != nil { return nil, err } @@ -87,54 +84,23 @@ func DrawTile(nwPt, sePt Pointer, zoom int64, font *truetype.Font, data *OsmData return img, nil } -func drawText(img *image.RGBA, font *truetype.Font, color color.Color, x, y int, s string) error { - var ptSize float64 = 12 - - ctx := freetype.NewContext() - ctx.SetDPI(72) - ctx.SetFont(font) - ctx.SetFontSize(ptSize) - ctx.SetClip(img.Bounds()) - ctx.SetDst(img) - ctx.SetSrc(image.NewUniform(color)) - ctx.SetHinting(freetype.FullHinting) - - width := int(widthOfString(font, ptSize, s)) - pt := freetype.Pt(x-width/2, y+int(ctx.PointToFix32(ptSize)>>8)/2) - _, err := ctx.DrawString(s, pt) - if err != nil { - return err - } +func drawText(img *image.RGBA, cc color.Color, x, y int, s string) error { + + path := draw2dimg.NewGraphicContext(img) + path.SetStrokeColor(cc) + path.SetFillColor(cc) + path.SetDPI(72) + path.StrokeStringAt(s, float64(x), float64(y)) return nil } -// https://code.google.com/p/plotinum/source/browse/vg/font.go#160 -func widthOfString(font *truetype.Font, size float64, s string) float64 { - // scale converts truetype.FUnit to float64 - scale := size / float64(font.FUnitsPerEm()) - - width := 0 - prev, hasPrev := truetype.Index(0), false - for _, rune := range s { - index := font.Index(rune) - if hasPrev { - width += int(font.Kerning(font.FUnitsPerEm(), prev, index)) - } - width += int(font.HMetric(font.FUnitsPerEm(), index).AdvanceWidth) - prev, hasPrev = index, true - } +func drawPolyLine(img *image.RGBA, cc color.Color, coords [][]float64) { + path := draw2dimg.NewGraphicContext(img) - return float64(width) * scale -} - -func round(n float64) int { - //TODO: this is incorrect - return int(math.Floor(n)) -} + path.SetStrokeColor(cc) + path.SetLineWidth(1) -func drawPolyLine(img *image.RGBA, color color.Color, coords [][]float64) { - path := draw2d.NewPathStorage() for i, coord := range coords { if i == 0 { path.MoveTo(coord[0], coord[1]) @@ -143,7 +109,6 @@ func drawPolyLine(img *image.RGBA, color color.Color, coords [][]float64) { } } - gc := draw2d.NewGraphicContext(img) - gc.SetStrokeColor(color) - gc.Stroke(path) + path.Close() + path.Stroke() } diff --git a/draw_test.go b/draw_test.go index 074680e..0887e05 100644 --- a/draw_test.go +++ b/draw_test.go @@ -1,10 +1,7 @@ package tiles import ( - "io/ioutil" "testing" - - "code.google.com/p/freetype-go/freetype" ) func BenchmarkDrawTile(b *testing.B) { @@ -12,17 +9,6 @@ func BenchmarkDrawTile(b *testing.B) { sePt := Point{-4.471435546875, 54.156001090284924} scale := int64(15) - // Read font - font_, err := ioutil.ReadFile("example/FiraSans-Regular.ttf") - if err != nil { - b.Fatalf("Benchmark setup failed: %#v\n", err) - } - - font, err := freetype.ParseFont(font_) - if err != nil { - b.Fatalf("Benchmark setup failed: %#v\n", err) - } - // Read PBF file data, err := ParsePbf("example/isle-of-man-latest.osm.pbf") if err != nil { @@ -32,7 +18,7 @@ func BenchmarkDrawTile(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - _, err := DrawTile(nwPt, sePt, scale, font, data, false) + _, err := DrawTile(nwPt, sePt, scale, data, false) if err != nil { b.Fatalf("Received error: %#v\n", err) } diff --git a/example/FiraSans-Regular.ttf b/example/FiraSans-Regular.ttf deleted file mode 100644 index a4e656380614ce51d60cb773c8f8668b81ba797e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194812 zcmdqK2YgjU`aVAG-W1XZA)zKAKqx_a3r$2sqy-Ta5s@mWAP9(vh>8teMMSKN4PC73 z+I3wP(M4BL(X}9U1XNT+K}D?jKkswSN$$P5DG2-hx&PeH`_7y>)6dNNyzk7M6Qz|> zwZWXqII{l{13Le+duye1BZN*na(Kxx6V4ge0M{2OwdT4bj~Uf(&Pi)#DYX{&n~x|t zrd`MJm!9>KQri%w#!s3tVb-I=uDSr%uPIeHd(ynQ`Tge9dRUpA4)dDhe!%dcH_ zJg(nVs@ANj6Xr;|3}wFj1#aTh>1UsO%-XMtl}_%j^ra)FO_?y+E^^N(bM+0l-*p-S z5}$XU;2Qa>X47WOo&QFg3EC|}u7vruzoB{r_L(jgmi;Negj zct$7-JUf&PUN6)bJP&CQ3ne70*UW0=`VSZ~QZ<-#_U!4Z&D7abPE&oRPndhU8jk0K zztU2=Nh(t{j0n+4T}L&F2r;Ub%2JJ0feIad*vNdeHrs?wRX7 zci}fGj1JIO&Qf~ma>Nf|#OkHD@NOc;Og{2$qdFqLJ_>W+=+ezK;F#I2B}5k_mNH8x zOKvMxUAq}0awtaR&a&U$(w|E|z}3&7t)+WQKP%l0zL)pqdN+L=!4ZnQ{-A%XU2^Gq zxSRi2RrGq!>%0GAAIfMIQU~yql1q0&dWA4XvM}CqA+3_VJpV6yw95KtKz0MpP{aRM ze_1FPSirwz;TUfcmW-d&OnmZJ-y4xCxytr1>Oo}5rJL~#Yy9_rQ@5a$z^!rhen&*K zUi2CMl|C5w{OhuwDP0|Xr@~b(pE2YopJ?pumjB03HMaaX*QLwj1Riiu>F($(YV-uX zSrHd2YLq^@$b)f}#iuB<)|;CLkY|7{BGrRzWSo_54Xz^nu_LfNPK|sAP}|7*cx6=# zk#NC$a6x=Q`=8;59#DDhqNPiDA5@-#rF>S+eIK*E-bGESs6kmy)$~qH>sFQ@S}v_G zzmB~M?s#!ZKaxK4!XigQ5Ubp+SQF`E&}QTSO{_fTf6bR(hE4~&2tmA#QJDtl7!_D5 z8suhg{z2cQTnXkhz`v$_BoUzdWGyNKG6zMVglqj z2hudMq#!51N6;@4f^iY2ZP3v-dUG@~^LR0l!_SrE5hvfs+zyUEm>2PKi(lV(F%N23 zIR?n{{xAQzZ`2x&bXI~h{P@3XQv$-F1}dDZ!dPL8M7_KqG13#<=LXfGAn400&V;m zg8T9lw2*O!xrKPXgp@YQGsU=6SQpxek%yd_r`&lk$OE~CB{hC!=t5r><`6NTIlahQ zP`5)&v6@Bl9iTKup5Cel@|8AtHTHYTYpc|?yk5Kg^{pVp>xU3)C^4A>@{+cOynaKz zWo>1=_-&Q`!yj{i6^@_R)-o+o>QP=3zmEIiM5bjuq!enPyu!+trzZvV5HvsxzolLZ zNWw2sF#csZhiRF(dZaPPm@hSKjbKOi^uua&?wj*ik7F}eiXb`lT$d5clFGmux3uZ%>5 zZRNNQMl5XsZ;T@baFzT)<_sL>s9(gia>pCJg5k)=tE)dhRXTWyP6;72?Dsk;|IIiIeQ02mMj%5x-%A zj^%$c`sA;wC+Ec|=bqH|uFIc)O>+oJEYB~#uRLC4dGX`^;X>n#;Qw|VWBNa+LEzS) z_?R606y;AiUKSkdQDwx>B{HqZIPV(rm^w)0-5UAhuG!Qm`ekr9< z>xk4&VpgaRusVP692r^@e@x0iUc|AbDyxg9>y($}Nu^lX6pd|+?Um)1 z7~HS)`OEr6pmotYD=)EzzFcW*L@S2->BhuOKe;Tl+$TG(V)H@fdcUl0B; z8+Xvz48s#?{RiI!GX#4Vr2<-Q<#u9r)NHT8O4gffZJ zOs)|(ki$WGB44F72@t9*c1=Bgj@T!GZvZ5nx8f&tzzIQ-eC4ytlY5wh>9|V?h?ScN zNmy29*{%z75BdUi^zZWY zPmp6!YFVZJAfC8Siv3h|1-XJH-(Chn(F})fD^@zTTjvd62Q1M4zN5^E0 zvhjhED_Cf#56_s!ri&d_7>8vT9VZw6o)<^bmc_=-9?B@ILwPw7^Dr2FK?&SN@M8M; zM4hJe>cUcF?}C42<&_suw&Q@>#FQU>9VcyhF4g!Xt=Av)9nhXaY*B1s&?mTARXrnm zGd7#3>!81)0&8^PJw>k$;>RzdZsl2c&!zmj+$SSJS|PuPP->fzA#yMFIx?ir79 zoQ3fFOio6K%<@TcrazF7{`2QdeXu+~34x>01g5p_qz=qslE1F@j*{_iZQh{l)qr{@d$HX;hV@k1lyR2CyLJklSTR{T}n zi;Np7qawp=;LpP7E7O#a4|IQ&D-``6O_}cRQTiOcRsLK>K15h_xbme%WG;AOaw0DHD|>bl8#aWTRg=@0WBietjgoBYYXBcNx z4Vo5ry!i8Or@ZG^o(Hj0dAvL{p0D&vFVuUc@nTeAgI7D#qWehd%F%{mymdf~DXa&2 zf8HH$jQRdpoR26^(5sN_GFL+g{1t3Z;tlmC}Ov;s*YRTF83qP$8!tC;_*kG(hBn@VfHv^+kv~1jY>HQfgd*INrs~D5a zJ+eQddrDGz`jn?HM^wh&2Mj_`ZW#tj9fI)x8#mDRqDzZxSJa&Ym@QHH)bJv5?A0(y z718477C*F#Y%0CAKRF>T#+b}Ac>GDBj(8Vd#ax7NRu8b)0^POj+IBmA(v~K!DD%X(DA4 z^Trq`50l=F92MoI2l=rCd6p4lCx}&k5|2-bwF&M8ZiV_()8-)E|CSp(N%m)rtL{BN zFFMyyIiI}M)aZWWtl>-wGLL*dL72F);pO?1kCq_JiyK^dxkT29`4I)_MtQ$(O6w^r@P(Y764(EUbdgBCq zTaNbeoky%T$+MTIU-p&|`YRU_3hzJyfp*HOB73Z2H7kTjPGx~nJsi|Q?t>!lMf%GU z*WBYj)1Zfg^#U)0@|MSD==Fk+2eCJ6a*ckAn2(VuDhp@JBO~s&-`C-ndkM=|VQP|* zzxG1>M@@Vbz!Q^p$h)+gWqmQ?`9){y^;g+jiDfq<_Sz-P8v*fhDGw|6mF41TDCJ|P z{6-uf(pUamrJ^_6{+K;Z1khN+bwTq3l0eqt(Uz^-dkU~gl}u(P46I_W0aDLVUkL)i|3PY zPx6!ZyCo-)ZU->8D{V!*8#V6xsKj2Xn6&5*c@yuyQ}ej10#S9U?7~Y~^_&}yG3b5W zp|V_R7#`7j_6~Z4tId>H-q%1Xnf|EqJ}2(E4%OD|U)=Kv~y@R9~2?BM12`*RW;31&eVI#tNd z*VKseK`fEl6(TYK^G|Z+-5~GyG5>p^Ty>4qX=_kapjlNHwPHMJW!#p=%slj2wK6H9 z^yslHvO>PvB7cGWh=_b}y}?tiDpz0k@hr1ID}^2qKMf>vT{IQ1W}>ac^sRqd59LJ2SH_n#e!8F><{3Pjcuz&{ zF+9rV#9m-k&pRUbczH(L4swqUs`9G(9AlH0rzrQu#@UZ+^m(Pvtvs8^-VZ{fpGgoZ zF7C)!^D$4J(!u=m#@xZo@%QBAwTe=o+N}73*;SoRc>LcmBHeghUtYRFG+LBj$58{a>T@RFj8) z+pC+`#+s!luYa}iW9u1v9g{&sEj)|UlU&iMqOO7zvNjNtnSU8Pzxa1!LxcR}*_Pic zf2QSOfiIAhaQzhJd6dP8$SVkoE}=X$2=`7=VZ21)PGr2Q{8gu_`mW>~*_-9DgBHe? z?8zVR?*8?6Y)=16*Hw**|D|^P|GBR5M{N0sj&6H&c=T0t%*d2kCK)kNK|+c7<}UunI_k>l$3jLe{A z)fQd(Y1`_O`ZKS}Xk&2q!1qCPi}o%0V&6AK-J+T)9X=I=|F9LFr)>Bqx;ng2*#!LO zt?**d63|l63XsIT33MB1HRygn-ox-e30ezU588n6u|ybY)$ z@rUP$sejTS`iA@A$NKJA&#h2@zkW#*{dm(7pBG<+dY+y%moWl2sHf-lNm?M~ z2K}12D(QT$f0Hg@Zhn8le+6?{leFA(gZ@hj>Uo2I{}$g3`sL1;>wEq5kNV*c`tIZ6 z;(tEA2Heu>R+A3?H2Ev!eaVj@f1G>+`84u%vVj{pp`Zp3Rsc@)ZopV{LoV-_xr(c>?*dGQltfmsKGsuTB&NYm)gm*)X*^qY|`gKDM)yMR=A#Xy`HtBjB{C$Dd?xt}rbXfSH_)#&-dCnys!$4Ef5`;Z!~Z!(t>LOr zF8p`HZ3b!$Y7auI85eIYhWdd9f`<9=M#7I76B-XX88jW?5BRR+BVn^a^Fb145$GcP zr{wG4UJhEOOlTx%rMfCq5Na7}8(tRb99|~BP~T9G(16g8&bOF%1ly)<+i{5OGC`{{%HgM4H23)07?yWcPGVL!hhpUT`I|G*8(3EZIm zmAOGZ0yn5nWp2>EzK*F_?bu&8Xjf40zzy2Bzi!YULHlFf??SsmKcUZ**KgsJa5$V9t{2YrubaWm z1ho&h4tIsyi{bsk1L+P6kAyo0bTY5Uho{4x4VusE@^p**^nn}1yU33pxIun?`cP26 zpk97`g7C`RvUbFz3kU59+@M|i>t61+C#Y}W2JPBkH)wy*Z!s>U<{w7`@-(ta^dL_I z^0XmU6Fn${8UZyO;j?SjuQJ1)F z$P0;eOX!c(ATIX9Mek_xd$3yVA>w)17+|U3B(YStRQ+I%OK@bY)Za(A6n(;ok@U0?_%OOF&nEB<^z1 z4WL^<>}kySLQB*|2j}j-Iad&RlXZ_opN`|11XQDJXHgCT}|Sl zUeAMGu7Ue{%A;)8=9CZV@;YUE$`=w2_Z#00u4CQ3)!dJYj~svT+wZ%nCVhKqBFJ}B zzJNas@v3oC8z5d5C?9dr&T8Gl)HYIbYGrQ6YVLRU>YW<6K|X!_@czhq5U4VDIPM(_ zs;N5`aVLUK2TcP7*HLcj+|&hZRpsva)!dJp9_3x)w=34YA|`x!>J2O**1aVr{7yez zWv<_^!F(!voq=-^vVRY5S_UY) z25tf3Gy=6uYn!@pKitlKS(Ujxs<~fTy1st80jSFmP-X52+#3z5p)0wjjq~%a)J>Z# z;|?(^b<<9*`hNWM$Z?imcC0%uCVZiP9qTTR318x0SK`+ofcH>gKV-K~E59ljfNowh6O zyR@IuRrPLqxF+$^Q_?fj>#?L<@MaaRx2Ly8czaNFZda6t{!Qxd_iO7&rUt2IH&}H~n&d99DLJ z8OoQR@0N{Q83)&)UX{7QxUQj_z7qMZ0^JRIpj!9Q^rsMKdwS*Wx@zvnPrp6=d8VuA zz8n+&dirLD#JV3whkNrH{lxhl>%xxt-(8FM*00~C9T~ZX-p;c!$*W$epTszx4eG7S zdse1rk49RqFGyG;Ph_!0+eX!AvzcV&(m2`Xko&ef!w6!Xww^z4h+Zw359Q_UP4lSu6L} z=(TT2Z$k)I(p9jwF6-}HVaG~<_)FPpuBR(+ZT%*OT*Vdk){HaC&rS08*3;i%_%8A* z89#DO{|mO1tJuEP&OHO{9C+*RQZ85F)qBi2VwGH1W`#$tjC(eHg;jeMxze3O>-;y` z^tZ7-m8|2NE99;jDKSkh`7z`#Fja5n(3yU&BIrXTM3s)o97AYC!3qi6sw#28Ua94ojncoIl4U#xARv!jE30e!1Gf^8r zB5gK--uFrTTR}TOa&H&tJJ3&3d8~h|K+d-z*FVx)*)tr4&&aG(8$3Vy%P5QbqF?l# zx>Q|k9yed8j}aqL-=*)?_vkfxv;NqA;u<5YpZ<%!S3j%Q>woJP^alNseqFz*-_q~s z&-4ysj58qS(8+s!I-kNKN<5K_e8|G7COYga|8 zyDGpphmKV3)lq7t>Wz~?538%yqv}QU{Yz?#T7#$brFva`rFP@l{i08J=)dqgPd}%h*XQdO@ms84 z*01Rc^&9vt(VNgqm+5!)R(*xuu0PS&>d*Dp`g*-v|Dtcvzu|YUQAX?gj5SvO)g+i? z{eVd~8Tw(9WwP|6Cfnrb$4q_GNIzj(n%4Rsrj2Q@*P4!|lm3_KV!G((OgB@kpEtcs zFa4tFWBTX~rmyL%UowZA!}ZJN2s1#xVg{O_`c-qZIZnT2PB7#2`)0fuueX>fW~%&^q1xmbBW$*mY5~_E3?cj*SpMh<~qIG++=Rj zd(296i~iR9#jMtQ&E4j1z0cfh?$tk<`^^LTC-bm*ME`0YGtcW%^MZNN)HW~SSI4|! z-arfAGCNE|v(tQS+L_&EkLhH-!>^0^0l%*1NBp{(pYiK%O06=*=p<`;+GLw-dfPOc zX8PD{ThAP7o7e)=&$hMgOn=+Kb}|EO7u&@gWxLs8GsyO`z06SC$M!M9>|wT_DY5-+ ze{-}QWQUp&w!{uM$J)_$j2Uew*~#VvJJn7%C%P7{g_-2qy0!+VxKw@fZ?nO?Y`!$# znD5O#t8I!+w;8s!&9rrFd)w09cE|P)9p-*$cA>7ou!nWZ7)>XK42eE zb?lS&NtI=vu^Uuf`<8uA<=GGI$Ewh7x1Xxk_H+BWI>hd>yHs2Ijr~TovwQ3w)!y#4 zdsPR!&+bzl?N9b6)yXMmRA=X0lIrGCU7G6cYP$yNP}dl9@+jBW^;Lu12sc6vcBi;g z)DSnv%~3<$dbeH;b1%3TREc}rZC1lkOXEsI`PfBl7HW=pV^mv=@;fo}@6z``s@|s` zRZc&lpHyl3A9}6Iz_@=_Wns)er?O?ts~n8^|EPKx?VD6CMm*Z2KhPhlrh1FsrkZ2i zf2vyP&kbfK#(78`j&Yu$2FM6k!%dFKQAcBhH&7!?W0R{!nkJ@+I@UBd&DC)j^DWhA z)7rFE$79TQRO3u%(@mXZicPVaBx7DphV8oTsjq@r;udOU$2uJj={7^=Gr(T&q@^>&*@7HjL_<)hfsq$Z2zjxkKHJ zvHh632mMkPQt)x5%##LZ0nJlpjWTAfc^d2b&zfgdf>{p~N|aHqk}$r%RJAa!zgDd= zvUj89-%?x#&`ZJ{X zZK(fJb)Wi|x&fNc2KA778Tj-BB;bd>EPN5N@E7%l`b`_PO*=@$9XeYVLL#=*J#~Wa ztxwVo^#nZ|lJP8kwH~gofgC$c->7fbvrw}Hj3Gc=$c7yDuEU`;6$)j9vQ%0qJCv>J zgzAMFtE^BS##sZ*Cg*mzy`jWVeWdIJ?6?=B=UI%Z3}DE5aNvka5hMYBUB8YI_NIOl z{4MZvRsPp--a`s9NH zfmE7c5O@dE0lcf}iugby-0f|8BmQCLF!=kM{+MXP%rM+N-W-qclgvpfog*v@I5inh zf0~(wXMKt}1!Dl1rD_AU&Q_^Fu7xTS=(PwO2!=5O3vHkVLbFuqw(vZCaI|yEpzZQ92;SEHhyUsA&W4gE>ssG&L#NuP?urMG{=}(3G}=L zW2UEiT0H|ieFNj9C-DDc@K1r9z16Sy)!}Gqs38oM#h6J{4Rn%DQG;}5 zfRKF}J6-xm{WI$Pi~dDrK$t7l+-Rd!PtJrxAZrug$3Z~wWRvXAjS!Hywra;2(vp(6 zCna%D&Xyd?;|9RyhDg=OG(xJzrm<>o3QPgUWi!m59L%3WxpOGFMf2;8e4w)+4s;g85n0~e3@`)WKhi*hgXVG+ zS~SQEL2g6MP=w2D3_+JU1|cKONR&9r9H$zX(PlK_p8yvQ-Ox4st>ru^!65W6jXR2;yo|&ieIg<-S15$^YbIduapE=*0ulf)@ zazz_bea)YMAsx&Wu$l6SB;Cx_=4#cSv-)u0$@K__mV`WIR_8!h!YDPjm|KviAWVC6 zr@0e3LwiC!p*^8)(4N5WH}@meU(H|Pf51F|vSj8LK%aUT@gD;sH6a=$n7^C9LxTL% z{8RNX>&!a%1&4Y7hcH&5alHuL1v(dG+$#nn)@(Ez5$ARDI{a^#H*j~8*#!Q!c^Bc^ z%yxu-Vs;?pOJG<}^OgAuPe+ifCp5G@xC`wJA%bK*%`fIx)f3ZSf#VMx+8H=BGVr!Q zxW>@PI)FnXQ{8NL+a3O5TdbN9;kp6g4paHIA8_t4(aY4K(94FvKhzFI{1RJ&_>=4; zui$9s7>zY~O`W)&)A*hd}6$>__l# zv0GFU^t0`_`-%NT^|GHrS8G9Ct*!mq0^{v&yIZxg-&$b2{lWf#kRR=j2>IFmtlBsY zU2TAKE(D(F62Vhlsyf1Dx-6CHvR$_7;+nhWsweff0o29YJl>>b3tQtZ;XaY&z9Bz?n3uI`ApN2iu9sZv9a(-*b@P6tL zbvS+j>E4mv7|FJjIltN6V*iIG7Z{>CazfGiX*Os zh%1TeJhfOQ0bMRcZWrN~t1iZ`kVw;6U5Z~%XeLV#=Q6cihnJx3i=%R~si8w!ptteS&@xRBJ(duobbb4Y92qv8@BKtrM}WE3qv@ zr|C3kxq@){M7S12xUR4w>p(hZ=`3h8b#-0%1@n3k^U{cUMY@4*pu#}DW~!xb4*W~j zE$~FsiGn?JTMd0gcho%*-b?p_HV$hPnhvZ{@ZKnr7nJR+|E~WI z|5N%YV7VY}F0s}UYdaHbL&Vxbv8fRgHZ{1|7lp7dUIu;(;^q=@JL^~VYY2yxjhqE* zI}>XyQMR#u4=CGOf2cn~9KqULqHH2jHbj&ygeCqt?h4k1h_!{p+J<_U-i6i);&vwD zhKRV0^|$&v#Qz?M+nI=KiMWMg#j8T%ZXR(rA2yDKG#A{hZ4yl)B(EK?Kbvf_5Zo<`Fe(6E*XRnrT4I2T*50 zN@E@|k01xZ%T(fJL-T}r0@{F}W<%I;PvPnO!~6qw!y4Fgg~ZX$u4FQgKb?QEVi&mrV_^E}X6ur`rc8zRc?9M5%f(Y`ZhH0nfDR%1G5$3g2bJP#EDoT*{NC(iQAZ6W*1r~c$`7YGLNX- zSyoQ)tOc7rD>GkKP7qUU%{(G>J_e?NUvN5~IGr!6CCvJ&lOo(hj%y zdZ(FrAXX+( zDwFusfOgL)qSSPvR1>1qu|%oSM5$AVQpW?ME<)N%@XI7JH6St_PkX36&}gM9Q8(jP zpH@)`ai|AzsJD6q2y_?`D1iuc81UyAAgbWaAX-i(K$?%>7yGG%cr%E2qlq_0?SbW; zK-5Vh>eM3Yq!D#$6LqqPIweG%K}4Mrq7F{x!>-EGnLwHzM4BRxbRp8@5oy{JX-bGR18A#-h%qHZm(fI* zPDGS25haCKl1co?q{TLhC~_Q8B$FsInkaG_Ew<*g*hXO`VFR#DP^1A-B$FsIlXjb> z-8PDL+bCj5Cb6Um?Y7ZGluoqUMiEOgX}66cqMSlR8BIhvjaV|8SaKS%WB^ellPEHp zDAI{`TPE$cnM9G}h$5#EKiU&NO0bv_QiEu{wIPa>5I;(YA8B0K$S^4;4cfY3$sk&C zhtQI1i!`5+YM0Q)G%zAHk=?X#e#mG7Taol@ODXh)Lc`O9qgs zJMxiLyhFL_GKeTuLW}TFVpS5cDvcIlF;Obbh(%aTtZGk-u!Ja;MvE}Rl$hbDgV=>7 zv$(~o$;{GWZiHOEyWXwXE{djtb}-$L#uI$ zIn_)@OtBp&5!)J@Gt3zXk#)u*GY1HlLxd|L!nLCvIhHFztMy$z`usU=eVv0>U z5vxNNz<;5+5d31S5##aLy!1M$TYJ&Bmwo|sy~6{k5w))I4{xesx~ zDlMW_T0*OIGOg0F#M+a9wT~i>U~MyE?Es?e0OITMMAl5A=>Vc>3UPD>aWoUF>;G1# z(`Fq-96bfA?Hge4isd>Q>+UbBQ;DgW#MA-A(M;m#DMZjyh@bquL;E05-fyiSbl=C2}Icv>ugxfCDxV@YX=c)2if{IAK`+yB}CjIMBE%A z?hqnw4iPuccD9{W4so}L>%%$3-66!?##}4T!R|v(HJcb*L=4W6-3WCCk+>a^xC{0s z4p*~?$Enz*I6|FlkF-Z2XR)@s5SxpL%|n3AMqgU=c;~okzJ&Y zwCCCLV2dxdi`AL5(T8!DK6yomP8aTJ61PwfCac-iuay2bbp3 z)OgzN18KXrqU~Nnt)&6AmIk!rd%2_C(f%$>FIw}xXwCPcHGep*`4(8PtIg4$#8IBY zQ5)hIbsUR^wCsup#qV(L)E)SHT_H(^HwE5&KlkCLb#rBXjir+!pS{iv9lQ93mvyq^lqD49A@ zGBu!j)Orf3^(0g4DWukuOs%JoT2Ec-JN2mVcx%Uonoc$~oi@~TlBwwwQqxJMrc;-i zP8(`5O{t-@rTyEPdW5DPkxV_J7BvX$qryH-qP|c}eW958LK-!NVrmLW)DF_95foDk zNTU{zMlGP2_@6}NPb2ad6ZzAK{Ha9#Bw~IN(Y_YZzL;pAM4T@ss$(q{tFg&M^+Mu# zGVvU1u_hT7iXb`O6$O$P61@wF-pNGoLZWvvaXXv1olM*|MC^J*>_TF7AyHa()mtDR z!RNZf=VT&tJ)&_T(KwlC+>mH&h{J_M;6fsBGO@QIvDXlF4e?eJZYh~wJEW*kXYJ@D4I;nY)8!OOg!vDB`HuVOBCur6w*YYWa3XUF(;Wg z(}CDhi`Y_&*pg0cDJHhmBC2E%Rf;*UEKwzmsFF%l=|)tMJ-Sz*O~`s^E#gTr@g$Xa zl1eIl8C&`?vjfp3P#FJv;Nj>68A?L6oo)i*K8gf22BAz4@ zPYQ`A$;1=vbi-b&M?6X9oX;Yj)FYl?Z56Al$wZPuB1s`JB$*h}l<3iv_|TO2(3#Sq zfYPA}r9&oVd{avILdx}I%JM@f%kwD3TTzNPqZDsRDPEhByFKM}#|TLrrX)_G3~oRf zoI)AggEBaUGB|-UxB+EwC_)DJpbRde3~o*t+=4Q=h%&f2WpE41;2g@}9LnGv%HY+ZJ-LH{0y3A2(*3>$A{}lJ(cR}yZZ1q!0Ccio-Sy_ zzOKt&uFGDo%U-U_UQXlbf;u=|@U}{Eo84xtz#83z$dgGMz6tTC1M#N=ZTNPy;brZ4 z6xO$8*Rlg`_~VF3y=cP^pbg)hHvAxBR0%PvH!-ReF{%SGssnBKd<;0K{U%Hnx)ZtKa$pa zePUWMF|B}@RzyroC8iY-)9Mh@3TVBj(|T`7yS*h*E`wHjOYVxcB;qxu?cI`AcS~B@ zJ!xql8ewS(d_YPjt;Cx~39cQ;DvrMAuZJYaOC%5v|`*#MoR~zk_N0b|v1X z5^sx$w`s)N`o!B*;%zGNwupF}M!c<0Tem+^w?1v%{>0uSVs8<#w?45qm)KiGD|ZwT zxR_RMf8uZ|t=uDNtM`6PbB`wT;v@nO!!t75}??Y5iBB~b=)r)9Pwj{O}(ULrz z2;YY`e3IobN!K?@gR9BF?7~;fsjyqlxgTMEDLw_*^1J`puO)4~ezY2z5-HpJ+JWr1 zW)m;-iIiInw-ly#{uG$2yeB2qRaQnn#d*5*EJ7BR9DF)~Dq3=( zP0gM@VeaWb8HYHkv=lg}u)mqf{n$fPS9Pd5T8#mwO;=~)?9HWWnYu9|F02IXZZ^Vh zWLxaI_EjU)32HLVaLoh4Ey4NKn!$*Lx7<|~6e6@0D$&h??=kOte^VP-?B}4PozLAKd3r3C@ zoUdE^HMiJBt&3gT7T6yy#$NGAAo9s-CeD^!pf1O5?MlYeY9QTA;(IoBSX%rVvz3+_EUzS738RV)e8S3rYBa;hhW$FBw+p-!1oK)71$BJ z#g7@rX{UPFmu{^(VGsKVHB=p^#;a4X4}A_+@UH~Q-|ELqz@B)0oMtS-?sIQ70H@+c zs|o5<=nxCB3%yibj~!)sLO8kZr%1%pYM`2`HmZy2qmER=vDZCOod$j5Txb$9r7x`ZD--Np`dD^6ob0)cL@|Rs#{FHgnTLa3i6xCZzEq#en0uclTV*H!#zp9 zmV7<=2J+X)H<7EyG?=TATV%o(9YQlNXY=A@4}uoxBfufAT@(!)MN( ze0um;^0DL-$)}N@PCl1>0r~mlm&}r~t{`7degpX}`N~oH=VwLR<3AXjj5y@>9uYkLy7y#vzTgsIlfSa zvi6trZ9ZrnlD6iYZ*@VFkW@A2bs2wuc_XIUAD#y-Yaoz*G_;6m&{XC_ds+hR=_a)b zs{{{YXa8B8mVXnc#XiNmTzg^PhhfEM>s(!k-Se(!6WW#B0A~>3rmgU<5tHF+r|*8@ zyWjZkUf=!Bb8$XQMx)VL8oR2JlkVud?R|HU@1E?ti+va0!(sfDehxR`e3qBjqxyOO z9?mCA9PH$J?wg)#FY;X1*>mMv#S$-ZJ+(}oWPCTv3r{NauCwIKAL3;#0j)x5I!j77 z;12rIRGg#RjjN>*S2}9}W60@>i=cg70?l^`)vM<|L>_+>lea-&IzHZ;JZ`$wd_imsY=}ttP?uhdQR_Xq3pR)h3 zYwSPmTKlwJXMeM$Zi+kEO+}n6#Q7`M^ZsTZv=7;b?IZS4`fYLQ{8E9x|`uncQf5AcZQn{>uat%)6H{dx%uvFx4@m_7P@m$+qFS`<=rLs zj(ZpN9)x;dWG}Xt*h}padzro5{>ffpue3|;Rd$)Z+Ag=(*cJ9#d!4=Beqq0KwOoqp z=sLO1uB+?jy1Qc6!}WB%TyM9?o#)PX7r4dlLU)n7*j?f-bxYi3?sE4hcZIvsEp=D9 zW$tRX++E{VxNF^Y?s|8FyV2d`{_Iw|o82w$R(G4b-K}zWxI5in+-i51yW8F4o_6cp zd+vSrf&0*XZu{prK~srOpc+wbRydK=8t zhPsh%3@MnW^K}zlpquJua*`FNi(2Ydx;5UEY@-i>glwnV>kc@}+DUiTU36F7O?TJD zc!RPhPPQJV`{~1Ve|-c_9UZ9$>ZA10daxd%hw5Rv1n(D((8uVJvhInKNTYG$^#nau zpQy*-J*4qCk2Dc)U{28|<4n>teTqI6Zz4_CGxX_trk zPA4tY=jugxSMz+VoL;Ce(iiJXuzI=#?`K}F|AhB5uhdKRReG7e8mp<-=oNTZ^E$lY zbOTmWZ_Z#^5GhI$SVpVMxPKC^t z(;!$?nUAqEjJC@=Np=DTC zTkgN@dY!zPhBsbs!U+z%L4cJtygR^mU+=)m+F#6Stf}3D6}9`Yo`$oJSV_bCuvkgM zc?|OyR*%|Yr?>;o6m-H_f-Z7~0P9D^I62T0Ye&6tUZ5{lk7U)TKi^&~k^O(14H$~` zqG5KR9c)L~k#>|l)*gqIqT_KQV5}WyPr`c9WULdNY^T{%cVPGH2kd?Qh@G#WUDzdHWiSc5TJ^A-)xb?~yWJl5 zt^3Y>@AkSM+&=fC`^o+6ehH=Ht;J^0j^!!T_{&eyC-28tcNA@n%e|D zdn?{9-v!zJQ%K=W^b{aQJ!m4$LajsXLtR6?Lj6JmL&HKNLt{eYLnnu(hh~T7hZcn{ z3SAyr7P>C9GPEjmcj*4mgP})5Plncn)`ixGUI@J$dM)&3XmjZO(3a5l(2mf~&^P$9 z^S;n8_%3xA-*V0jXNMbw3&JhKZNr_zJ;Hs%1HwbXBf_J@$EBY1Kz<Sa={2x| zFT?50Fs$zXz-E2~R@nKtdI3*(EuQzEa2h5IYy1t^(vM*@EXLIaSl;VkHD8IhF)b|5 zrS?W;VBKB?KHK7p_ONpCz8Xf*a_}?lHQ@8?3h=Y+wczvZb>L^)>;2R>;p+FKHfaB! z@pX=KKnp?Vg0S9z)@Zarqvjg*)u^SxIQ<;_L;I!AHLgQgVfYT~1Hagx;Qz{gZ%gg3 zc!LG$ffNgs!&hZSyI>tnIfjbQ$i`{ha3*8Ky__+vk zYXYt=cKC7$Y+roU0ru}1;7iPIOb*8Cn(e4iLDfn%D2)T$X{9+zkGKdk6eOSx3Rj z%17WE+!pYS?ql#*Wu2muaE)9v^3cdZBfWLMhB6&i{z7%!9`G#pEqGn`9eB3;9=yKW z3*Nx}0N&8;18?Mh1aItq0?%`pF`<0-3wTZ_9lTyB1OMRyEx@k0tU)^LavQv-Exs4& zGx#4HX^@j(?= zt!|s!9m-@%X#1G=QliElGS)*OrOw9JeD>fi?_{19NWthDgB=2cnICy?fE$3bZ}Rn> zRK`eSPM;v2_TupxqZ!vv*mbhf3Ey8WzAl41vhsQvU3q`Z;EeYINFT*>e#t<`WK|0* zL2Xe2R)SPIQ1M(<8wj{owZMAKyV!x3G#5cKDp~PTS+eGZx9U1#t+yVeO>fl@YhCxK zrm`}H?*P4r=X^BMbNy6v%-R8} zP}Un!{t!1@wPMTLVqT6>?J)Dk;_dcvZoKNsnigY3u0g3%-{BZtFW`iQoU<6gb;x7b zf>EeVeZNO9vRC57t5>Hl>=!t>=+&u~s})hFBGjp)>!uq2&YCT9*QlUoPrIk%*6cm^ zAUW4b4#1lCTL7ws2?zzzShYh{OO!f zLMQ=mLC^KeGuVVu}_6kiv*1^+4Gb@haL3p*!k)DHYMsxQ>n z>Q%K{C#kn|E%d-H_P{rod#%)Wn12)1_n3pHsJ)nn3)K%;ZM#+NV=w3}}VFrBc9-OhA#U0fH_9U65{Q|!KSUzr|QGuUlRW#(v5eORu>0%*Y#-SI-;}?ePIT^c*=i`@%nSB|~1YM6`GGx;u*h_l_ zzZA^$H__Lh;g=3c^*Q!kzrn9IWK*)r#Iw0x)!{7YiJAE&zCj^U=upmu!(?q(_2c|J z0`s%28VJeI8DIPA3Jqd}tZl2~I4_Rpj6H!fb}VP?iJY+~amG&OjGe+6dm3l#bj;X$ z)J)FUhcIK;sfRgZALERDoHO#(e`Ivx>5C-mEo&w?-{a6Lm#H`6 z?X95qtf`}yp|=vT209wogFRP|Qyq0L2*+CZu9V0~^fcB=MMnC6hmY*vPpwm_rKPrZ zX)C?VHPGYom7D@X%yjb*oP0bBe3%LZ7rS8c9Y&RWxt~WHgd#VDTRaa5591AgIkoiz z)4^NjiofzdYu~q9u@}<<+Q)jkO`eZ^%Z;(`I*0SypWq2r+_`zjZiiNby&Aj4{R{QV zz^uzr4RHdjkl*bn#(AjTn05Wpd&gpz@_5X_N!Y2JgBf==PDh=GS-;8dcCXk^-52QJ zYkAK3Hq7Vy)PopXPh}PMx1=QOWmpdq8`JJ=o9KmJli+bX1q=GHom6uEqdyE zwHISy14dwL_k!K*o>M#BzuoihMaZ5V?pQqk5g2DVaY7B zx7&N{eXyGzgnhFSwW)*p$r@u*$dOKvBC@}9INCJ{J6hLZm*@`ni2H|o*1e29l^?N2 z-Xizn+;8*F$U8Idth{sb&dqx$@A169=lvsZUEcF~FXg?F_g>z%yf5?i=KYxWbADoe zdVbyf2Kl-91^I>f?elx&_s^e|e|G+&{LAu}=HK5WyGcQl!X|B-jBGNl$w^IaZ1QQ7 z&zpQvU<$$o=>?eubqg94)1k|#1gc9DR$THu=m>gVJALhH$V_(;OS(e z?G0Tskw7AUAVK@X-k1$5;5v7kyVpIAU8R>qx5N%Xv)uD@_vFpWo1Hf=Z+_mwya&ujBO90?X}VN`ekjOjJ6j>v^}&%{j8rL>#_Ur4vzWM80zix_57tg=#)@`e{-LdVS zZGYP~aoY*onrv(Q$)s%~w$<4-M5%2kWm~tcUvB++yPWS(+kPQ`Y=O`n z7--?P$G6?Jt=_hqw+`7lY-=B-w*F`9D_cL?Ito6VZQR;cXlud8KYYAbsgKVC-TiUm zM`<7K`2Z(Cns*G>2{orIgw(@4T8SPw){d33u!1w*o(fxh9`u5Ru!$v%oW2FPS^&$q z><{*M*&kMVHsjRp7M#%i&i;g*OBof7fJCQar*}3iluG}wd#+#s`G2rU=iz#RD=SxS zFswozu#19Jh%G6~Q^7`3Lct$wso<|Vx&4Qc(XKHhq)6C8$k1nj!#mvbdKDz)aA&|S$lRmdbC8Cg+L!emkfXQTTkt$ShAa(1Hl|Y2r$N>iK-%YFu6Oa}WIf3K z63WVvYM2{^^T#tNF{k5n?QuBGvJ|Lr1rXs%V8S&(g}Z-`bo{x_-eEcyTzr?lV48JRDkIqwDrec~g~ zS3sjLL&^AprVXWGy;6me@NLZ0P_2*-IjmrYLI(O~0p4JE!@LO@>}-+^0f&-pf|a*j z|BCl*?#5du9>vPM89P^ z=uM`hej8sPzQ=_0X46@}W4h>fO;`P%>4q;0ch?`_i^LzA9(oJDN&KpH2R%pAighr6y91n5nmV{q`x+U^*7M*cjL>& zd(1F=W4J_rXNK$V&C##`M(7{RG5FT-NPKB{6xOnj)ju12OT&!D*M^VRznL*W?GyAz zrl;Ov`m6cc;KY5YI!kL{dZKM;^UcR*tNF-mvCVC3^BKNF{E7M0K*+Q2vA%VTJCY}h9t5J@?;gM!^ds&ecc1&K``H$YAxoXN20Md@yNapx4d|HV52L{ z5Rz*Fx4B1dG~7au+2i)7!0dx%HQ!3B;8 z*^l71^T>Vzw>_vB;rPxmW*!M|I>W@ zNgYLFl=@0}z)_N<8}8GwaE}JbGn76*#-|hEj`V2~T;MQi8eBrH43Q~xKZxkwM{v^8_?l_O!D{xQp$bJfUyhpGF6r`3%m%*I~lDb?An(Wg` zxKn((4erUHsi1p7Qdgk|L8tii2;5VBdK&I&K0OOp@LK3O&1#ET2At zdj?1l_+yatg^<)=5M1ah(3w8TScMLNH(Q`ufds|TXWGJD;E_&(dyYqT7u z>yiB$E_4DR*B9<>9>K;?z%i2j0PZS}oQ$74JaVn!-szDmg!>ndoQ$j09y#fUyF9|0 zmI98E+zz<+c;udkEBy=7QqFxIxm39KdxZ5f1-v7<5Znhma{q?=H;-U%d(Q^X$8CUL z>|795+Pwc$fM;c2f&WpD+%~w6d4w-gDBvZ@JqPy*kL=rUpY+Im3it0G*_Yuy<&l>D z_=iU>4elC`tn}YMJ+imJUF(sRHp*B5LH|%{olo+-R1r5@{gY=6~7D)PCr~ve$PmSP8AIW&k14(;?x`3pQgxZ5Pf?fr61ij`{J-Gkz z=_t6b`&0r~#)*QZn9z6W|A zbQ(y;rI3vA4}CfguFNH&ouDl~Erlz6Ep$0(t4~+Jm2n`n9JJl1E8%|P)75b0*$Z6* z`pl;r;mSA`x(oEVPq)MU0`w(F=7-cnNXE-oKFPS-1(Nyq1n3)|Zic(tC+XKcK1ttv z>yz~BcRoo!e(#g?#a^GJUw`n(^@F?5C+WW*eUke>`6PM&4EhBm`TgnJju-nnxO!vO)w6f&^U_hpIh-R!ezAne-?4okwy`Uh-w$%iu~p5VT+XD-w^O2jkGS zN6?6s$TG^ao8U@$AZW?h&i4rVGX8m~N6?&=PW1>nG!7?u1Z`UBbdTiSIi2AVG;F17 zdn9XQIN3xJodV~ZNFuj%mPgRU@vmDw61j+z>Lk%k@Rd1|$Um%VlSCiUQZ`6ro|f`J z(BhSD=#j`&jX5bK`iPb?KqB+B!~==GqVqfwxv29!5}id$*&vaHy1*mRX|%KfB=S;A zJwT$r=;j{5W>C7&BhhiRlmQaCsihtuSQJW2ULcWSTFL{#%22wE$>x}8TN7j=7&V4)~2X+R>Ibw`gxpVFN?68Wkn9!T^l-Nhr3m3ZTTB>I$= zGEiTUm%7*^(WkVe0f~InJv~x=;Yu2i$Vc7VBhk6EqydQx)p89Iol8p^kjPOj*C5fq zv`->a_2C|g{-yhSB=S_tHAwU@J-{Q8samc-PIOp)mB?1t6A2nSjE!HR9)uPklmMo8UH^Y)=5CQJ^LXF)HyqD;_U_!7GiT16 zHfI3DE7>9mB#W`d5{O^20SP3pu|WyMQyKjpKr$Mm?*PO{8T}qWav57Dfp{lu+yayl zl*1B;zcTtafaE(yzX1^cWh*3*yv9~aAfC!rNg$by=|DV}(Q^Qj``8&0h##}H5=ahX z>m(3QWa}l6?8Y`oAU?`AN+21KZIVE|nQfLpG99De0EoY`trAEUWb_??cr&B-0Z1NX z+a(ZhW;-O1tjBihfX5j98$dE0+ogjE|{(6-J!z7f13jp+Xg^fyp2Cpzp0?GUE_6eYUn!6>Ctj)6}(7woXB#>;) zJrZc&<5<50%0npsO#&=&3je(X184?0@dOw^Z~Qq42GAJ)ZwUs_34dOK0dvY#VZMnz>mr#7%&c%OEBU~RR?1RJ{u$$fj1R+CoobQW(me*lt~hd zR8qSDV>(LUl)y+O{T^VXciJTwsqHKYMru1K!H5^A#S)CvuL}T&@LMm+?@8c)LU|G3 z5{&I>l$S~1e?fUU;0n|~gYvKr)c%!#n^1oY<;{TG@EJH(ZwK6g&;JMIoq)Rl)Ze>x zpne|FfyR3j@C2U!C(0*vpgupP1L5J1Isg|Wiwhu}QNIa*6Ev$BfDeXu8Zb@*_E(g^ zKLNWHB_1MRXoK_t0*1B?7>@z(VHmpseKO!Z41IxDTmSz9AYlKBGD8A; z0Hs9&`*)O?0L%^h1xn0|!GX`WqjUm5(+qeqfSw81uTg@Y4L*Fn7o{H%z~={1Vjco2`~foR+R044t%D*cS_*-D7z%^Je1vlnRuoE(Y~PIy`b7{F)X z2tF-^Y%?4<#Yr{+oNyD7z-iu=N#GeMha?d1F$_!KSUZLl64?Jixl#h3g7QoW?7vWM zm%yu0?vTKqMY&S~2i^^bC9vC2UMYctE)7>nVBl4Tt0i!npKB#B@GV4m3E;ITezZnMLMfrn8Z zlfd3U`5Otm4drhouz#SuPXeEg@^=#0n<(#>z-OR*2=Fl0&f6#-k-&+TpOV1-iSmyU zIMMaf5;*AI@Mj6^U6lVRffK#|MFM*dCFuuo7DP62!#O2Q+6eTtHB2jG1u-;%&SLrJ&;kPX)Gjs*5OO2Qq0_oE~n0oWHP z2`>P?040qdz`jIDV+QbrC~2Gk_7zGR8-OoDN#g;quTjz%0DLh@>NkMo3K}mQ4g>WGzz0!MKL8|y80g&qz6ASXt^|@tjCm6HQj~rPxCcQY*+R${O(=sB81P{% zmH;ccl7FrQWjD(6B#@4qf4&4|C(45oNI%ZMK!UOhzP_t3u-35E`*^6=?U_U;Wp*#XOiqAHb$0Vp$l)nYs2R!^Y z%HIL*$LD8JVvP_OeJFn~L3N{i9PkvLc>(300neaK;IH7nB&Z&g^m~9>i1IlA+UBpK zd>(+`ap1Gy6#(dvWR?QZ8i5KN7l76XRO|}{z;6N37}bHs3W%;iqXn2-0<{9=7l1EO zkG2ZF0(_0n_)Vc10G!btTbL@rkdHD=0`0qn=@JY@C^G=Ss{ws31da$uhA6a4Alaf2 zxF#T(qtGG2pr8a^3Ug3T-vbwgpdkabLGJ??fagML7jt6x6H0m?Km~3JF@6FScqy!s zK>Jl;1E3MlqfdpPEduqYC_w`RBr6r}0PMl%r%|3Qf%dV&y%K0|ECdY@(4JffS||if zsh^-c7jQ8?KaBDc3A8sBUMhk1*uu*s(B5A7eZb{-9_zXAP6;HBc%2f6UwSbn0>cw1 zF(v{-3(86f#9zH=*Nc9sH=tYy7{ce9Q4UK`uSa=U0__jpD<#mLrRekp$Y8yw^#fy~z6y3ACShL1$jjj^Q4Zpf>{I@kLyM zVKGXh1d@S@OcF@GDZ)GvknB)|`6e)opadNdko-~vnjs)rswi86p$#Qyhk#^_qI?M? zD;1SVAX%vh^G9H4MM>=fNX98zC4uCoqSX>e<|_Jk2_&!iFb@Q@7x{`M(0=8^{1MRp zKYOa6&+PY#DGuKznkTSpx0DuP6Yl zCu23#TLu75$xf!7lmPjceT;}@fY@Up-0#(X&I=$btBP3(z*dwVPALs$CYiAO3>9T| ztJfOvTD>->Bg^H9f_irQMrl z$#gg}E$BR*Z-f?#I63mpmxm`MAt;P>LCJtA)1VG3j16>ijCPP*XDP{e%xtwcq&kdhqNypoXKmQrXG+rNVpBuh7C$WA&w!^sLtKDBI$wxW+?a8l> zRDn#y*iTYy(@{j+|Es8(2{XLBnMH zVK|IF(-Zc@9zZP_cw*0~GY7*dHek!?^O=)9Wd@TYD^y({o!RM2V0 z0(zF8v1 zdh!zt_$!RnqS%ziaD67`xf6Q4DamLWQj%bePGUpoySfNtALv%hX57Fk=beT?e=?Jk z^UAzl>NfM5y)LiA=L#`3#J|%1T%vu_wj9yCPo-*4O;t|5+w__?{o)si7-s){_CI;H z_5<`y_Ce4>208^=Ko?Ld-~h;xc~nVrZ}y7>VPcj+*ckU<0Wc z@wWx(ywxu1_<#ZQFwzZDfY8SIauS#EaCX4&H)4e-PL~-=8Po1Wcj{dxTGOq6}6 zh2=G^or~73T~r7(f3NFHQelF2DPGy8x56|Z_=2K4yS=wja{Gs&WwBn zKfwP)yy^hZJz|*Y_m^b(OH9c*WqvRxCt(%6FRrJd5QnO-#DP*HvV{~?)ugA^WZE4L$AEe9Pc~q%3FA)~AMpb@zE5d< zF??JStN&d22IHnXz@bTimXbi{#bHGCf_A{tz{W5`QQCn6CNnh|&zLb$4naF6ABabl zgA4k6?C|m97v6Gs%AAqiEhBB6{OFaBJ$OA>+mFxs$)=sfcn>kpLA)mo6W$zdFfy!{tjIVp4;WO5m{X~n_(LnqE;{9PV9PQ;`qo=4UpvTlrt;OV z&VF|`);ZoK+7>kG!EcF1FOT*Ocf}L$rh4%DjVNNzQ=eu1$2w1!?a-Xd`cKEy$J_aA zd15<63-Z06D~~3$PkV!`|AOqmvG>y6fO^^+_R`+K67~kBtUBoyc*<2a-Y<{dt04DA**@1d1I#zvQq!)3}Yo z2ZVbi^4Y5;U9qjAI&=aPpnXbn5!)yxg>x_&m=mmL!sA~s*U8GHa1f|sG}lHPB#Cl) z4ictmPF9ks52j?doMkJ$^3hjc9cG&`!T;>h{u6EDIl)&x!L2>Vm3*Zw+yZWBL>^nP zM25@i5iivRZVv9qX~K*HL{@@5!j5G?&INi^zLMv&+5!Q|v%w&VLrNA|U+XIlSp}Dr zO!DU8$x{REm9>LYhnLN%J3IBY>TMkde>nf5x%_ybxG_JcVgJaL-z$82j`r*Pf@61Y zy{R8_OMJ3H&>D?ch1LyuIaW_JCF?&W|0mUJ&x!Hq^+t;_n(#c)lzjekW)R~CPI&@LwrEHb|w zRqR;5;qbI16E~!%rX}N`wLu+%Y=+#hY{(3R#^f=ikW#W-S>Px5kzLRb{gr`Tn$ZLT zz*A~N4le+IqvYMg+DpS79n^^qt&tV6Z!`mShJDkq6@NN5Y|z&SZ&wLdBq*t{N~#2jabp*1Pg6~+b`%`1Y#ttxman3#3d2nm6xq_uW(7oziUbFES-o@!u_*HNF3 z1~UY&pn48oA)Y@8F3!rt{K@){UXu0iqrOq}N!EY*XIYQmvATrkKZE#B?f0YjD|`d; zz1;A5t*p1;3)hD~eoI&7uQ zRea7U^dYo6in*C7aN2+$Le_qn+Kum_Di}jB>`OLbowF|DaF}sOW^&4t%y8e(w9^(! z)9&>#Bzjsk%r4ofeZWi`wXcZ`kdLWNgDyw3fVD<@Gj0aPdsM8oS5Znn^%ClhN%Lx&&R;wY|Sr#zUI$|%SYF7^T_oMlrQ@cbQm16nyZ*^Pv z4+gJKcP(i+_sUDoYhd-iSuv_{b^kB4KZEn6vQNbV6}U(AE$IdRus50B#JXrz4|HQ( zQT$sJi^J+5nbyl73KBzOkYs5p9@pM7nFseVkD7wLq+@5l1`aWLEa&_>wmZfHForHM zKSZD;7yL&Q->9ekU)Fz&2=XYMP@nXA$&-mrPL_+lB1?0)Fe?=&Cs`K|qO?ogV3#I( zaax_(1|TJnWfDuE-p72=PKQLVd6&PVCA+vhhgWIu8_@j&I6j2_7tS20&uy_6)>ZJX zu5F1ULAQy1#W-jk%Km;sIk2%_XwTV?J<+0MlMYQ*CqS&5TJ@I#0|Ecohg!=gNpXu{4zWp!s zbtLN_h_&;j0>%_;pLi+S$2$5-`OV3(+P8{6pU3yBA?$Vqi1z6Ycet`RX90g+F6b^b z38yyIE~kUDjua%KY&U@T1#2AoFz7CD=a&XdU=XAR5<-iy=5$@F z+J%)zn048MKAW`$OT`)Dm2-h!e}QjqN!MJUIFJ{ZTl$Yx^MB@XJy2Tu)9h@%dwY&#!RA1w52MLo97-01M5}S6JBgW0%0P-4 zYZ3$Z^c->F$-1#mV(pGV=}=Yp9Ee%aZ_JBQpoI+TzsD=-*Wv2u50&I(9j`#R{xc>1 zD+Qu0DKPla;9wX6hrcL47aC8F-3o~#=uL%P!yBjHY8NC`r_%-P1#Ng8{;0MHC7507 z3(h;x-F;wQNr2s!s{L26(s3`)J>a`3pvd7xphtlf<1iJGi}j_N+aVW zR1G5##qe??ULJp~(D5AUS$3RTjU-L!GjjxFc#qi1PXOkX%> zhW6i*HYn%calBbrMZ^w|VPena$|gwE@tKQGlA`2!vR(LrBPf=GpR{vG*wLjR^msE( z3wR7Bg*%s&wlr^yEIOa~47km_UhOzBnQVj0{BUIx|T3O;^&LUMu0oPCJRT*w}rlG<`zv zeRTNV^A64G`Q5f#!n5ZrTsXq~+TZxm70bJqxU{F3f9ACIaKl$vQ$!E#g6|EYPqgl& zZ9vx3zC!iTh0j1i&qMy8KFfNNKVHBW$h>{>6PzMBj%Y;eyKa{X83*zXH5s+==-g+y z5OqtGVqZldX5j&PNq=#=^104?qDGQnv5t4vzoN1(&{I~|>27OjTU6V$W%dwC@! zFUVsTrKs-P&AK;kOkonNu^L#9oX+^i_;` z8Fdh2J~yGB#!U4X^E?z{Y!)%LCS_OHSy7(tHW*AGB(6q{Kn94g8Q>*8*g2uOt;TQg ze*{dxH~@_mTbOPXTCRd|K;@yQ5CHZqkHPL4DEC=mKO(#5Y3xUFTT%>7!j_bXPWI*I z72}La=guF4w~n!h-MA@vyjiJlEEdP1IRSUHA4=SPO1L9jYtISX$$FxfqXMTEUizqN_wJ>(A7lqRwTD@2=L^(6 z`Y-w^?iO{_$*SWpM>YzL_e26u4+a-?oSE3rHY*(PuYF;B9im`(qaH%RM=TbD&@@$n`Up{ zKioZYR`S3YyD!e)>5S>DbIObdR>x5t9~b#4am^;QLD*}d?5MB5wB}d88o>@RdW_E!ItOSx8Wj87zKpkx zK1j+Y9}+MZ{TJ;E`q?4rhhp|)^+YGK{!@xMj@1*L$okJHW;9k$bRz4&P(}qFAYI^& zGP2V`&rC7XS;UDnGZ<)XHk;7QR49KEA$E4h4L7ZM`uN66FI#i}U)U7wX{1G-u8lHP zdsMp&%>zHwKH(=x$qVNs86i}}n#cFxVm6ypUwu~DD4Q|z(z;u3UHKAAVz+5`u!Y(H z^te*o@_}}uOb=;`vB^t4)ZhAf4khDD|7>^_^qbJwa2R6z`JzKGn;8U(@$}*=MSkeb#6!kk2Y0)4Y!uN4ia_Gd#ly z%sIg2^G)yqk=fQj_MCPg7_MH!2%(c4KP%%dHi-Ord3k|6Kim=iVlvlCVX~OSeeyTwD*CN@F`kQQ9ER6cC)PV+^{>xOtar!i-)u{) zS7P;V5t=7x|D8Pv_579C^Y0F!Uf?lJ;F0c;nirk}Pnxk1?770q&8AWd$KN1FIMP(b zWL8Zh_>D07VcR6>X(jY7vpMP=EH5vwDG!wbpCvwD@&qp7;AxPXMPhsm!B@rXg_LVk1=CFpg-E3#!^#bKN}1?tE#G+sv7HSCRYZEfP25c z$eIo#xk9R{bj*@xQ%VtI>Dnb|yI2Hdgba1{h|iEjj^S%ZOtYK8n@bj~YF(c1U(zx+ zvQH=X4j3onf;*-x(^^Mh`2cON!YGiN@D(vs{d>HY)c>$u7_dB? zTM@3Jhp)h69AdYxuO4dcZ%FQoG(>Vc!cCpEj%h{QbLIK-_jhzQ^4C(emwUCMm1{Q) z&;Q0tZWgSa2Jo$iKwH_QZG%zas&o9EIo9XCGUjNLKKE?J?f0Lek;Ud#dXsv4{S}@X zZ@8f4*egXf=d16ga z{U1~-)&$ja!yCkoMZYbg-xcI;B}W-G^l``H)ouNG`I@Gnml%}MpMNYZ~Kyr%g)3=6Nj#k`41}bQaQFaX>2iE zr0Mmri;J_mTxkI=J_jvkDtXFC*qVW{X4$brtGp`{tg%Bm4z(xGnmZ}r%M{`n8}o%FoO7WV@l?*i%>sCKpN(A2C44j@nrY3JS^!N{a(Q5M6u`MCZsA3<~=r zR3oxIa;ynh0`%?i$n3_o?JcVtE0(q`otoA-rMq=jT~pS=aA#dB@8LNem3!J7`GN;8 z>)+qexOGm;=Jpw_D}wEXvs`JN)`D4++eU9$ztRybF8;-$2+a-VfM1R|C?Z=lHl_~{ zzg-R6BWFjdWuTLoC)_FfzT$=~aC_LA$;@i52Moi^$;4{Z=gCLzOXDJP+CrBwn{|O8 znI$E$0dQjS`oQi;yuNtiM+MWM=c5}QeBfw~G+U!G6mRmB=U`j3W@l#yvi(6joWnkA zW(ujgP$$RCIr)ccU5=2FIP<)7ZsOEmmvVDtt~MH*e-hbaG;l%Ztkl-g>k_FTN(b+O z=QtoOg~CCya+)M;6`S|guAH%M ztK1o48^YlO^Uvv)yFhfky(f6jjaV0ufp*2$;d?5{K(hYz<%#vglVtrH)%?G_&lw1s;71S+k|$!vHExP7(QA*?{SiuWIOL}#m~gL%16CN@nc=> z2xmxq8W0}F4HQ==Cld47!;C5mr09L^hx*xxEeD|CH%kuZjp-V z$ns4pf?Y8;aY80gYAFB`nNwLFPO&qSF^efCt}E$zB-99@a0zr-kk}$xL`!L~P-}@9B0H!FhX0XMza0$2 zl!Inr`oSN25@^n5ayUZfs3{0yiwwki%YSalS&^Zk#l8LpZ(hY@{)<5I%r0#zd%UZ= zy+1u;Mi%BL`(znhma~+p$_(X(uw^Q4z$?d{+DW{to|(Z73b4edDvCMTtR%zEY$9jG zCTNO`C$W(fmYi%Jz+%P(aBdpF1S0OmXcX*1%vjy&eu`I{4BRxPiTDo(!?uQoh8Ydh zCzaLs?15UpHI<|^lTWuZiLe+9Q~ndYHUy)q9*rhdlBmbWS%+vl3b&MB``A0(HOn?G z^B1ILbS$WyUvXg1!j+}{?v{rBuBp}iGdl8fE6Zw^HMA_KFY#y(H8j@NHEd(=nM#+= zU6qpL$tVj>FP+ox>#Q#f*e6X21RKh7s_gErQ0;=rEY)u7&u^=(Yin(Q(2O-Fa4Xg* z>^)e!ulJyc)zjW8>))J~SYI#eSt|0xF6EYo5RyZ&s$9B{;=iZ0Nx!GH`E!&^oDTkg zzY7~#MYuE*K2fOgmJF_9+hWpuy)quai>ItG`AE|>xp7IdHJR~&WH)w0U!-i(q;PH| z(lW$7i+Z&0u}xDetIClE@9!zv^U&0VT?N^f-h~fnO*qXh-)FaR1IUKfbv`UDs$mgr z^w>lY5r*|Q@*O}XlnUJrG)q;z-wXd&=FjLv_cJ_h_9!6(=wMrfC0a+k#Sr0V|%&U_Y$ zoGIM!Hrd-HewF)ihA#@M&59<`c619n?=&iBHS=xBe*VC+;iWTY%>+3GaOeNLQdV%|2Pq{(-R} zUoy0YVrA7mg$3N$E+d>hG&O7>3Aw}=TOnlrrEnq|je|x^SGK6fBVbk|q%Xw28w}^V z-DzpaH5G7s+@755G*_C_mWh|7Ag<9-X4BUxnFK}M zB^_Lj>%`--{_~UN${z*2K7Wc2ud7TkNMJW$j-W5H5waaNX|lN zP(4C})cTNlIKnzM|K}rTJOb5k)W!-=yp3itcf;_@QM*M#uTT-=eM|Ix$mT|CZ+sjQ zR$(j~I3)dL)8)%RFUq?(8~SgfHgOKAi1HJGw|w}?Sl&YK zoG->l-%}jYQ6Z!2+()#r7(Ni{muLePC1V3RgtqCo>!bDf?c2&z+MRk#(w%xtQU;zW z!ZQxq1F%-H1z0mJ8R=;hpM*@?9VER+RTnhtP_ld!t4A^EG`w00P{MyMGr3Scw77#M zp}Lxa{zzxRYKtu_M*CFZ^blK`s{N&GdW&|_;UHWRJs>wO_zqkNxh`9Zuu)5`&q-2@ zaUjWT!hA06MviTL1IU4_uvADuCVb1u&=dVqvi|}lzsPDY!hZ?uU*D!`^fDwYGcE{n z{Ah1vR&iZHWL8OCeq?S^)3PZYmV%xT_bi@8``4O^D(w;!m6NqgxMj{@bw%YAz3<2_ z=s_gGoMZa7DLZZl`qTj!NmZ42z20k5Vj-(BW&po17-Ab5)KnnUuGnb1A~ki~c7=}0 zjkR=ADK^%*NxA*i30rFgb*i^iw|&YzisWo!^kj3mM6M5X_ya)$RL_lpHWajOs9xA2 zM7`mSHF`a0iN>b4gZ1>v5W#82Gvo5~qq6@j_nsZ>B5`WEl@`)$05u-2Sohr@CGlU4t%LNJbq>oWOWWCKO zV$YMTC+puFNvx;+T-Luu?#|fr@%G=LTu!n2aO}PR)Z?)v4ql11^X`7M11{Nc@&Isi zSj1EX$?ETd7VG!PkSZwQ6Gl{#RVHrOD5Qw0U}4~Yj;Jy~ycQ8vFm52Aiv3pu5b5?5 z_mtK(0-NHK_KiDxpVfY0)!s}ydtv_~pw_t8d5-tMLi%*J^FY~??F$`jr>bpw^1KS| zQph@T+!%+zH^pa+$2ZZ0#NP=l06FeY)Dh4`9yHE!8n>I7P3cLXZ&KscuBfg_@letA zi?A{lwHWi6fk2=V@KwXdW((5l*$>JW=J*01|@NBZSu{DEa%FTh10F zb)cznOH|p{{^i1pFN$gWn>Gm=TenVX{qIX!qdgY7Sr*1(ff&3tY;`%)U{8Z@9%kHR zM8)Y#m8`gsT*#fdbc~r60yY*XmTxp9Dr)5gq7tmQIholA#6cKhRzhr4QL)2p6-(Ae z!-8Jm#JnCG+PHF{Ix^RsH@{+JS8>>#)$Hec2{{1+WRGrXZY83<5kw21t%2K4D;vbN7yURmOPJ)mMm(tgrQGqhwVJkkSXeP+c|9l(i9do zWlF4)@-BELeGT-F{WfOF4B7%1le^4VoN&ki(TSn4mduYLIddipL*|08d2Za2`F~Pb zW^tJ?W_C4cm1B%pQV-lM=w`JXSz4MIW=r8dCx-yppjBDL$@}tu$M8Wh*yseqhaEb; z8Dozdaa-NaDb3c%++;_075A8yn7U_c&v46zre^Rm+N*YpHT`!W4LVUT3e_KVcC#%j-Wme^$$3(UnyBMx-L8r+oi@tYy}j*uk;lE zfJ-+e#16FuWAR%4Ma3n)Hh)FUl<>gfJ&SkG4Ye!?wK!{Q7xYY7T*p26`O~spfx<$+ z)j4~5@BEI&+EQPxFFV88(=cgzfW{^IDaK2R2*wNTIbKh;I$8e)q!BqTix^jfvOk<# z4%<;hHaD2ukoagnjzw#kzCBtCo8Whe)*AEJ{~ys>gi3Z~Mb9`_#G1}Ac&kgqYVW+H z@u6DN#-ecylH<6eeO2P_O~M`F8ni+*A?rzhxKiMhd}Wg$H-(g|B*CY+KqpQt3J%Al z{tuY;qwB$iRV??1B_#hSa6JmH39C1q1*SzF`&t|Xj!V_hlpz-)B*(xF68WvuX>`UNY9yI({W2s_O9MEM{a51PJghY>~W!&Q5ZiZWH_sm>s}K zu#xy+p|KZ|@!KF2q?lPo1Yy;?Snc!~J&{Ocf6Df}B5%N#HfJVl>DrZgewX(9NdZ@@ zn4jo-^XM#DE=$Ih;z}~_%1DPf$xOyZhD{oW6QdR-Y-`EM(H?lR$rMUZm;yVY=teDd zBi0pRB_bQ3-krWa*`e(z>!N+Srfa3>)XJ{I)GN@E?9<1fB^Yglu67J|Qei2YD*Y*h zFWjsMd`(i?!)*b0Qzn%JZ3b>m2CCqNCAW7Dh5)gH<4EWTFpU2r3FA-&{u~ITBWtxD zNEZ)?^oh``*f?~Q;utQg9(%I3qB;S^lczQ(9;jWGI;&|6$_owUG(M~q>bn>p{4z%U zY!~U7Z$j6$K_9YUwxL7HHDf154wwg*9Tb66n0-&!C2L6+009!W+AVc3t%`Mpy+dLzNIIrWkGQz{nBVP|WH>nfJw$jFE2qv(s^ogbl9lK;*V z>s;28yiN6xw>O}OJx_c=)<^x8@_CZCW&K+tiO+lWdKKA!eh_Qt9hKy5`QCr(=OQF- zNZyw1yh|ZUm{P>!37mPArD02cCcGP7X#W%t5=|crKXq7zyFmh#JldZH6q z|BfCnZUi1)LH|#U&4ZyMW&^|5vDmy~q4#GN6$lFW)G>!m`93hz)h9P_eH(5pHMy7 z7^oiK%jcngQa$OJRDW2$mt;>-FXfNX<+6R*A3U$Wca$Viv;%s>{TA7D96Ro zaUopLQ6mGkO4?r}3WBG3QtUbLlSy(F+g^85Z+h zfAUlIcbsu6qBGCfYppuJSp}j^7xhFyRDW0Wd0r#x*Xs4Ri27`_^RTGji+XOf>U5Wn z>AzLf|4h~op@0r+LjA|Q21q$gP9L{0Y-W$m>0=y|)93Qip$E=9zPxnP;=3-snAeQ{ z@nW`IdlSurjz#-wE5_v!@3ozgSWn}X^>%$7$mi=~_0ERG=ksIr+0BXd@%BB5?Q<>m zd>-*I8ZY)?8ZYJXsSAh3=J7#qxk%tcD^BF+af|hot*v4y>dF8 z`Odt6Kj8J5jmXUdMaM@cy-4AiAT^J6&bHgHdOuuwY(c1XMtkcuGrJliz09_CaSyLO zJf$@yzkE`qPa7z%tEqgDW>Ksw-h$cwmb^TzH;daymZX0gVJR^=MEDK{n5 zPuA;kAM$qeLG;~1w;>@jJ>molDNfK!ae{C!euum~xs;a&ae^f#<7xBqM1#=A<>g^d z%$_n%J72LABdZ%T;5?sUtWv%t{YU3ws0pJ7eM`PZ>zT%k`<-cQvHH>&E^?IT=zDQa zFAMaYgd9G_VAfA}N+su;`gh zk$@${7E>phn=e>Lo!GJ^Ec=0*Ur)%M+}iOwfeYgCSt`vx1rlKX`%wT#(LQoE85N9h z!|p+!C(g$sFeDB-fL-DFSUw)CDw&T5i9L|3<)J_P;S=o$>q%kn-QIO?7Zx|YOSCO$ zlY}~Mw4EjUAnS=w%X&NU(b)6UXIY=somfxvE$f|Q>WP2L`s|*>=ZOxeUNz?EIatQ` z$CKC}!PjLwd8_d=!VUO3;U-r>#xjZ`16Pb@-+`c%kWvSDf;<2-g&-v%^N4&p#1tpY zrxVSvbWeWV8y}wbIxzSKP#I(GvL*k{rLBK*G=%QW2#2#@FC zd9bg~U0h;`m$U2##ke8NE;bw{z+Njcw$wV^hP*kZhc))8U@bef`iF6!g^QZy%z zTNrsnP9CvYLp-INJjPf~o_kWY`y;)**pYLny&T}`9zjP-#F%W~ppfqYPp5T^dPcD@ zzd3nO#{wiO8~ z^1|J38Hv2QQAF%DNW(5iB9y%z=t;;b`lK1b7&X3@moa%MDNEdPpJqJ1F z017!r;<@PWUCPV&0)0o09^$*%itp4MJ??I7;$j{sM-L$>8Z!b!jTr+^_jfhtlugdA zh!16IPo1YR%U@SMeoXOx(%O{$q*T$ghOj^I8qnJ*xp}bJ>B48;skwQC080KD^83p@ zPS4FlF(c=1Z*AQ^d-nElc>C<0{sptHzn-_WAB;o}b+liwY{>uz+oTuy%FHo zxGHO%_j@BtFX%9?wQsC=;mRrO$Er5-#oi&Ow%Q=^gmDObZ>4bo-#5m`EqJ%YU!mAD zC4Icf+dz~7%D>};pKpTvJGpxP9Fczq1BHRggC|eTzmpr!zvC9ak@%G( zY2DoA_p&onv}vh7`k}G7h}lMu_O*A;?d|HAm)d?Pvh+|_YFF!~uKH!(uG=u|&tW!{~Hw??|e zYuU5(+ReOXS^T~ACvWESz%R0-wF63q(tb+L9Wh%%amBU3+@;o))4scRW*pT^lT)yI1zMY36H=ntqC4A$iOY2+PIy>jS^A4|> z-`Cik_4PZ*zB#4hVSOL4h;_9K{h@Vro>*7V>0m1-ossI}dM@SKq5jHxk~1E|_Y}VY zTPE;ZtV{`4LMH*=2jRo&O|6P_JAyHbIGQ{mXB8_!e_4PwI$^k>s1t;qIit}Vakpta zd}GRBFqGdGtZa1D*DhMJV^!O_V5n_LZHJ>av}|GZz*OE+R8*hi4*FgB2sfHNbM~@g ze?wDMnWxBO@yu?m=m?6jNxLiY*1ckEHaHB3$H;mbv#igWf_gDFix^v@5)Mx*$HBLX zY`3Z!on+jJMR16-;&d!@1i!%lA}uWCN6j_PL=f8lVB9%1R%L9`9E!tuc;(`8mY(&U zV}?I%40;A5=CL-P!Q{5F$QX;PL>$mQC2`;+91w0GyV3m0dYbniMscRz9Fyc~ zpX?zIz`i&xmkyS;5ESsYo=XSwAIqg| zMNS=bNmXIjp)OHQ9Wq19gA$l!d2|VRwn;-oo*yflF*c`8k?7{woH~S!QOIG`U(5sb zNAwr#)ukK~cv=E^NJTx)kIS4o0x?luW-GFLNiOq?ct`TtgKeSU>ekh3Hb-{viHvMm zKfn%X7acgjc56Tdy-T#IhViZofg9ot*8wAO?8KiTen8J~qkT`p6R|dM4od&txnZL3 z3u51AZx-Kkf&bX=<9+a)whzOxe&#B-$bQOJ;$z__W6$I%7mXbY{zZ9s2!{nqNjP9n z!Ql`Xrih8DNXv%N;eJP9Y2Y($McKY$BaC&Yrq@9>0hwP%V3@1z;kYHLx@yS^LiTTF zEVsur(O`?iymo#R_i>!AjP%l`Se|_^AXYN>e z^RW{rSOqgb{i>(DN2Gb1Q4R#{Itko8V7qsHn92eLl9HnE=eHCgYWcF@m!{1vlrCL^M9 zY_1*ATj9fp-9hBq!7Rpe?Oe#bDcZR#pnb_U&Y9EAZt9tdK8Q9&pMQpTpwAH$v3lA= zWqlTz$z%1T<5NA^j>Y^bZRi_vFu|4?P$nsT;a-H#bT}RPeHP5#m+@#f6TR+zW4a zIZe|Hp4|NW8TH}zf2*C>omZ&cJqP1LOqs&|P2_jV!nyou;YP@K2)a{{Sd!c$lA}i(q%Agjup#KPBi}b$y!wo#ku__Vu3EWr z%9Q)Hi}=wkD~8Y9x_tP|j>|5)th;^m)j8-5;T?QH+=YTWH&7vMPtm-W@TnqrP3FDC zE-FZ%x|`C}iG3rads4<^zBH4#CcP*kdwo3T=8rGEV&5^gD^2@k>Ad;#=SGIvUF+AL zxgH03?$v(QGH+H`dkg&`xsvV#;fU4-s)R4&Bm7&~qbS};?*+cZ`|-E5N12@>sU))3 z53|cN`0(gW{OEidAKGIdQO+m!FL;>pRNWeH7yEjW(s2*=CDz$ z%Bo4Z3DJ2N2b~1mGQNKB7;WMPv%8ETLp7}ZwITLVhW7F>tB#-p)QfZQ8~A!ZJGoxq z*#b>lmw=UCIwLFYU#KSIH0GZYTH$q>nVGIkm(%J%(pI%{w0*(t@q#&;6Z^-`{B%iF`2fjxdA5xfzpmMVK zk+e=Joyf`EK(rtTzfllgPzm_Get(%6xDh087LmOqLB*tXpRZm&sa|9Tk70uwyIb3r zv~KNcJ9E<1@Nie}oSy0FbwTGl z`4f9T4jNGO0*(UW=qzrVP}OP?ZGs-rq**gf=A7uP$;sj~Hs3QeJUo2+st4m2BWN@= zdS7OUcmA6Cf^~aXyc1_0`DDD)BJ$TEN)8B!E>$snk2O=JfrC0!tP%>BvwQjE;pe;= z!ElQ!7|2SkV3+Xa+OzxiHe}7pC?8nP&Xwp893swv&Gt38VfpMBt^9Ul<#T^AEg_bFCPXn8Ugfa!$ z1uknAv@6hEDwqYOqV?4Z%S=5SZkP>&Q=HT`P}-_utD1Jlb&(rx5r2&y*tUJ=7It*Y zw(U<|XXx!U|K$7ETxaO)M7eXTkv(JHeAeGLpS69fQL7+aK?W1~8o9CueP&7t{;dF4 zR?6*4w~7HjI0J>zz~;e_Oo($ZSwX2#x_p^Na1YR`lsTm01)mhogO$&%iEJJ|xU_kg zIlZ}Chgq_w9cpBA(9SCCC5P~iRK*uABt*@X&5C%y#c~UYuQ}Q~&@e%WAHt5&FwE@3 z^RB%XnJus9D@U&v{l-42Hi$L@;UaM`w^|(5H7+LJ7c$aT8;e3fp9ROICh^~@Wv>pt zx-8lpnw*P=Wk1!6(WXVA=nv{A(tyzTA*x}sOYA9W=H^_n&*_bdrqzpkETgre`GgM3 zPD?!0iarC^f*5u5Qsctgi@kJQzj1q6G4Vq}2iwtOIY!8c;et9Y?s&p^S()RyEL;Ma z3^}eb)6f=JEGJNmyZODr7vBw7=6k>BZ|XR*Lf)Bk#r7>UWm+D4;hQ zHG_A*MDpIP%slq(BYg?42T6eL_|tfQ3b>1ldSJ$=jmTDsr9#6N`R@l+Fd>ZF0?uS{ zS)2|#9deg;=H#(sr_D|g$>?bOS6p_*zB`9|*#pDF+7ISK>RcE{0xqu_{fUkUu3%qL zA&V+>6CF5BI(C-0>^mVYTrNeStLR{uM}{7c)t?0Z7oCNKy(a-D{3Yto{fRr#rr!R< zevRFh5>X}TL;WH8XoIy0xz}+&i^0rTl0nA5R(Gc$1(z}i<0|3GZpZob96QpP;d#Lg zto~GN!OvKxHoUG@S2&mWJ7;6#7G?N|2Isz6GlTZEVeNdnP_IzGI*)FX z+q|oH|6W|DM0+uOesBkUBWaIT_r%g3j=UFHtpR^b+LK}) zoic)MD1wP;<3p~5%fEk4cv+yTsI~GJChb#}Vq844B3wMBY-Acge%G-(?<*;q=E?n{ zclRcDZj;YXc*Gh|9>ctHx+@8B0Ux5n6WwhTz4r&F;l-G+8aUNdQFFV#@EO4p4q!h=KAxJn8}_+7q4> zdxpNmgGd)4m=UTQEfk+);@N+?)tGM2Cds><~ zT>z9>PVN%;%p(o}JFn3OfgkvUi~(kVogN@|aG@cg>rt^QPst^mR_eq7^;e|1nGmt^ zQl?X|d+8eemZtBG#WLZU=J^`TGjT|)dl0<1CuD@qVsY{v>THt4rZHR+zo2Z2{$wbq z(RDB9IL@beGV$rh*n24tjn&IB&Hoxz%+WCDROBe8_0B#M^e1fx$FXQN+l9=(S>Us0P2;Zx>PqkF^B zNoK&Y0E`jsiga<5j~;DK%i#u5s z1s|bpjG^;Xh=0<>8Fx}vm_-6xk;+Kjk-`R(?RN*r!_MT z(j)|`36)RipFKU6^6?7j&pNNYc48$|dqwsu1?LJ$53M8rds!(`>EeD>gUbn3JO#Xx zCzHtwsju}L7;yU*j+~8PK=^+dkRpYztohE|yg;xn;+sHET_x1mZCg{PbcUv7*Ci+C=M*%#O_jxCHP)yyOZ_C7 zbrEo%NnYd(I0A%3MMgU$h$O{j2?;n-=7iLy$G1m?LWysza^Tn=;){AL#ZlGqmas%G z*7GaS?vD$k;(b^%q?=~ZUSuc9jczFc55gJ-HNjm069aBN#w(#kMC~1L=E|)Sf0N?i zRdI1ltEU|{1>4s zkM!xIy-LR|@dt}i8ZL&MdRnaNV~b%`ToxEr4X)|2EW|B=bVnd$?YKrx3WA)!EAWm~ zvOAF0V^o%4Ao}(~oCw1Z?F&Vp)`(~wBj8t1%cO;p3{MwfK=Gh9>rcwNYRib<=41OU zEdXJcrGU_}HPd-oQuttv)^8nIMzIo3SsT*j(hn2fc!Rq|OaHT`D1g_94oN42$eAoxe@ke?U8O!4T~*Tpg?E*J2h78}#CdZo&Om_kBEJd50S?7* zgly3!MPM;HHY@4KR>9^4MU7LFL0g2%xT;KqJ4Raup~ZD_I&YWhgzSd|D)eHyx)gR_ zk-v~SL5KM1w6=J=xc;O@SJf%KO7xV!t_SK5iX9iJ6tb)~yVoIlD%5#0IFM-`qDhtu zoCB$ANvqEbd76@;*Y9X*seoed@R-&vm%9D_q>tWDEtC2^=DrDdve8|=nXs!#xek+# z!9d!_GKguPKrD&(l!Z!e@_27do(oZS$3I79x#4kg+)?dM5aZA!@#ahMJ}2b?uz)wG zFcY#Ng913T=;*vaG>)-nJ2G`8%*)s}VmEPw_@$T_Ddph3%Qs+VqVglXcl#PLJDe)} z65Xp+!WMKF9v~a!8={XyJ7iZ8v}1=(0sJFZ0iK5kNFBktfxe;dA@~8rAVE5kc5obt z!mY^tmL(SKnB zH)d|c^XMIN=kxhOR?a4`kIjmGounmk4};heU}RR+hPZnL@~;qnv&r*A!f#PlAf{pp zKYdNTP&~-8Y^(P=L+rt;yY}@Rx=dvc8ip1vTQp_)h5wSS{nT&=6puUh-ZJmkx4J$1 zwzV}b96k8iXBdO%lZr906Vyk;XJ^Z?$vL2UF$adv^q6~LFBi|>EuZg{&(mJpr4HbE z*oVQYzEbWUdxwpjXFNk~N*nTL`q_JV?*-NW7LBQR7ZC=Pfc~B&y+hbHK)62YUR9~ zu2%Nm`CIp2a_x_{Up?%}D$MS12CUYyzRt=Tt*`%#rSqm#hnKCUu_?nq-q#od#SIrx zo)6F)v%(={!S0|!2*-lu2C+>DBSuqv!Gh=H%6y@`d>(T!~HTKGjt&SP+lj&XdV<(Q-=-JU`?hTHR2H2$7!o?8&>157F4 z*(UUDVxMQt|Ao&J5lJRku3`+16>Qt8Z_t zDrqUGD2X(3kGHkFa;hb@dFuRy(;KqgLzRK3x&Rxz7%VT>S<1IL@C!2<*_}Df3#*I|0vBEMJ{8a*yyIKW<(+#hgRSC z@yFcq*S~(EziU*y3sxaox4Ti`T>;G5tI=_j@m;D)N^TNiC!rY=qyh1`D*WvL|%wQ-g=8$UVL%%!?z?a zm^g3p>wu&mpSQzzK{&#<`O0LNOk(sYn0gK3lpLmCW+@N7&&A zdrWJll-KMrNn?6`NKWT%bbdki<#3VPMCgm`(b#*)cqJ@@(Rm;99wu!IW@d@p#U4nd zH?hZhdc-_`OD>vdTe_>)AdH+bPw#imMT7MNMMkWjFbeFsEg0KJ$d8hv1eGbuKzN}W z(ek{qB0tYyG|>_i-S%b~+Hb*Gq# zPe7L>g7ADqeKSSHR&y*5qqtB8N|Lx)MEBPfk~gGCB*El2^p7m;sT^>&7tdSPx2$jS zK;<0m)p|!oxU#Ccf-S9C**eKl?d6`!4;{F6hITTQr4{B*Q{CnWQ+Drp_k?k^0mk#1djv84?76{dIEE2C!etuc91bXyzpt(+%zjtAXBhi&qgYSijf8mN zH^#yxvP|^GMzwt5GbZCYZ^W*9PUM*gS#T^wE?N_sl=RJyi#DTv1F{zcIO` z+58^MbwEZG7qZ`6@uBg@(JuK?PwO|1Eq%WiGN`~b;yK zXUAN&I~Zvm~RyCzLVa4%?D#%&YtLu zy>Ye35*k36D%JyJFKL9tJfE=)N(xyaqggq-^r{+&a9Soi^$jFBgnq5yY)V@0*}IM6hen{ci1$z~UXC#1~G7cqwkM8*}}K4azzs zOtOLAs=vE3di_NF0*r5-ie-bROFghZ!mc3hn&G%FfyPhyT%W_-WMRFX-p^d~ZGL7j z_o$y)2zwLznF}2Go@_F;VF{e-XO@C_-1I>EE^k^>UwcN^$d06;NMty5XJkh6^l9fH z>xQR&Uw`lZnHO#%`SXnPHQ$<5BWs@+f%TAL5z58*a0hbOS}61JBXg+Qp(o`hgLEFE zf8ZvP7IhwH2H~Z^e3RK| zg4dh`QW$(du`(P0y@tWW6D~j{zJ+U!E&-KKCq97~01?XKvF9KLK-jwB(Uvg)I(w3% zz|}xeuQs^(?w$L$A6~E^awzre`p%9vFdMdd@!--W?3vC@sk=KjYp+fI|JeHu__&H| z?>qOdwCZiOT6Jl)t6lZBl2%=-zUs0qt69yq+-=+_24mAqF{T#-4kRR@h5)8H5Fii| zl0foOcn}hj5NbjQp#(yjz54!V=H4yR+LV{P_rBlv8Kl+TGUd#fGpC;>rvqo2;H9}- zAj@PZ7B=WV$w>?C+8PfQ#IDVLof>!HrX#B^*$``tnPBhNmwL{?kp{@ty_A#^x?m7;J4lc+g*IKzdHn8^m(GK@G)e6tYl#0ZPMGL4S}0{eh9vSw{d1 zNI2D#;$EkO=w|U6{-^40JU1W^T($8*3j_aZi`8hgk!N5qGauQr!TJVMC5UoinIGy9!viTf2v&VaT8Z*4+ebQ=y=F1Mne*7NUAB7zSN1XAQyC1f*XAzr*%*_&I3U?IW{`tG=@EvMvpUv+Gmh4s2Uc^A-36 zUl^`02x`9$phg@P0ru-y7zvh==HSkrR{#xY4tzOm!z7a{5q@8!k!UAAp%Ruj?g$j3 z*P`4k6HlzVOP&$-H4iY%uZT)8;I^nOO~1M4T&FZ&wx@-=tok0M{}L}(#(R7?HP+@Wa#o*l>LO)^>#n>R)N ziEO^evG|YP*iv6c-wS&V9@LWh{*?M~0@qT|hly;e$h#G2>t5++>jtoeN}XhTpRIeb zcn>U00pR^bd|;!$l&|8XrcX$ryp5(r_!E)awQ6aH8Dk~Z22caS#is{8L1h{i{u-x)u+b4Bi531rBt8L zK$5V3eL^fII)^JfP()owlu^RmDO?4dB=(!ve$7jNPTNP~Bdd|mkoZxyMjuXa( zHtdynAMy~lVQY)RQ6h*9o3Dzd^nn$7nLkn-eC0;c{Cxj0()_%J@o>8wjYrt!LiB?e zmiIc@9QNaatb40nTo<+oJkMi17l&mWcL)j9Q&B;C^G3YF(*nHUoopQqgZV88G9l; z??>znC~EbUuXwiHb=ShN62FVFt`gU|49w?HAg+UHCD;j_Fu{T@$hvn_{1G|CY0lz$ zV6JeN_xc~Vigq|%;_YXM_M7n`_Aa+!2D4TBA4P$-YRjW^3=v0+QwU~F(FfK?K8yE} ziwg?Y89of^`ac4Cj01G1VEXMnBo7_tG+q2E@hkG$uk`0XOe2shocLo=vy0zQ{NGo7>x3d;8hk*vQnlT-kGh z=k@Z&nu=fW@lgLB#M#Tt&S6I1A3$t*U|g&gSdK@$dD^&DLI30=8;oYZ_oT>`{WL%R zzJgeAoCW|{NWyM>U@b(u_kBWKEc)R|e-_5YYS-1cSj34lGCjw`_Q)QH{@vu?M$tWu zVGsJGm{`<#r2NOhVq$s1M%7+|!1KVESmexrLl__#7!wQK>@jGn?~d&)OG-(EuUB=A z=e4LfLw4q0$v$j!?L6}~q!#${qSxmFhP*^0^(tLx>MmY%H8rbTdyL2wC*PNi2IA{9=&7r?Em@ga_>3YD5 zk;^&Hg@hOFA{>?yKa;7~8xAX^H16=Q$l_~UT6Ah-f9>jqJ?`p^mg4G`mZrMsl8U<0 zV!O-iD4MR9TWl@%jcK9oX2(Ebe`Q)~b#bYqrzFo(l9F1To5RNroaMRaV##MAN{3^V z3Meedo2MFmDcwT6YV?Ihgd2VD(}(`<(Vr5MtmbUv{qj8|uJash0;l8xtmAR)zTR9-s=F+5I-6AoXA;QZ2D|BdwUd+e zkFI{67D}$XDfcLkBk0XKVRiHnr1Ns8rM;2H1V%x7q6eu#5XPbz(Xu4*DnY}Ri zHA6%il%eK~=G(#jcm>XtsV8p+vj+28qF#sncKi9PW27>et8*m=M<-Ud+%WbbYF##`xM=3 z8Wx*_g)NMStgfVxRcP~u=`&Os0}~u7^&zdC5w8?@Utx$eJ@Fe9MWg7pqWMpJ78&Fc z76!$FVvvsbL_x9g{nzZ9*nj!e=i}G0=ci{@PO=@7(=)g3(YaiqdrvuIkFLHRpHt&H zwlidW>cR1;6%&f*QospxjOSF5+4X!~uv*}IE5QLl-iljj--K?EXTRfAErHuNK|){? z6ReKP>cV{%=FQx;q9wD)lG|T4`AVv3X2}abbvg=JETBL>tP|)XFeX-{{O7h!%3VVL z;wXnYogHM?r2pgzoEUSH?{eE_C8d_~fL|qiqW%3_-lk^Tr1Ut@Rq~kFl)#u+j9G1v zH#;}+@W>+=5Kf!7>4)RA7^hN-HW%17!9I9nVzrS{Of0fh`Hz*FR!U*pyqq^rwoPvj zG-?5d2tMZi-oxQQDzIjt({n12y%tV%f<#dC#L=`<3k{%;Om5${{+ybcQ?}nT+1K6LTsimB zOK%&8oXb{pR8>_}VuUit}<&%&adzp_VC-TecYI z$0jvqY~%RY43_a(&u=Q4>l`ohKIvCBV7!PIBpo;OxSxR+8ZR3-Z@+k1XwA2tv1ijwldaqa`px$Cc2@`U0)SA> zpaOx%%gRU>2+l2=WWiX{Cv?FQx;Sb!5E{wAx#aBRtju)0nv{;HSwGI$0+&AFlmuUT zpE6(GM#H*}`JYprEp6=`ZQA(Q+syye;_#}id|BWJa*Pn|31$aP_OpWmUfj@-Vjw%H zFJ=}9>W!TvR@Q3>B|E76=qYEcz4ecilYgA--LnVG`-+ie6JyNi`J-I<%U}M|^Uj7f zKjvqLmj6&@#AuT)05xK8mVL@tS#VowtSq=KHC7e_3l=L&_D}8*Vq#B^*N8e6yxK!! z%UI}df2$j9&#lcaPR$j?EYdS;@|TahXJ?X4H8d_7=V6SC+hRTFT0_sCdv4OdwR%V z;(mQNQ$UL)%I_^xuoUFC_c7RDdB(Mz+%lttDX>XkuXaOjGE$7J0Wq=>I5C68$a?7# zUW1kbgb$U-!^GlKOa&D^h2C5Xk!9~pO>W7rPoBJi9SpmnW`dnMJNm>EThi11!v5rT zf4z#+Cgj}v3t*Xm>{U049J6MqqZY)+YPBgyABM#RFOUqfog3^y(3TXR`HUVWHb8Aq zQNZYFMoykgGw@lk0m71&Zbh%xN+!0Eu!$M9#laiN`2mq^mRhlR4E+ntkOIN$H zOPM|lneO#9us5b8L*Gr#f!@rkdbM_Lp@^Ve1CATvLm{(h1^-Vu{W|H$ zy&~(Yyf5rK$_M<3c1s+^WVb|KRP2p_I9$?h_~LNI@yoL>-f>}EdCtT{PI=r}v)A9w zLNB?5q~$;C-~R{CKRrJ~Gql3!e;N9ZCHhaf4Z))bOGscWF1Qr3Ut+p=1G)l{YK-VV z`X(8*%7L&A-tAkM?xpXBkbM3oN6vTLx;LOl@w}kIc8d2GJQmjrRnA%aSbW}xU@jn% zO!dYN^GYOSZd8kr`1tz~v>(id8Q8Wa=!lldhKaE0fp;g_ZL~_rp-Z9zhY{j%IWNL( zm>Fcl%p@D;C&%HYQygv~;&5?>1U1mBu2~CfQvI;2*v}+yx6kfaRFNtxCsf$s!y+F>MjV;8% zNNUbFbS$)+MnileUo}z$fbp^i*dm2CptRV@pbjW3bXMCYUol6FFC&dWxg+H8y$#!2P*CjI$6x#}Zud%Q2M zgCJfLHebqd5PqCETJJ`sINBUP_-b4x^(L&4P)>|;E(d*%Of5fnkn@<-=j`Yy3;AM# zHTDG6q~U9fn%>8clhr`YmspG;AWqg#@$v+j7%eS@gHw~0mG08XgRk67+Ls@GkF+n) z_Fx>u%X~<>F|`I{GJ->V*Gbo%h6{3tTI}>( zXDDosZlG(Rr)1f#w!To$FXg^Ax#{vtuD#*f{idYp(aP$sW1bbOS0R}#=FG>YU~clA zVs6AdiZ#KQJ-9CP!oFG?T1}E9u)0BGTB+cKPta3iTGLHwDarmZtwGC_h?rIp(&}HS zq+^+$HR+djUKi$hO1B)fxdKX-j89FCd%C}~W*Xz>{3)Lg@uyfTs9kA3TqdMk((*-E zCD;p-b1BQWd^i_5&~abrU1`2TFPhOK-V^##f{(bKQs#esTFMDY-->?tUFwJH33>k{ zBcp%9A>cIl6>jSaW*-C=dl}j|I)}Wmtd=JSdSi!(lO_8gtX|%=xtRBH9xf;$DXM)C zYBHJfSj#+bG_R$~^R*tgmTEhX-s&Jvl!$Oup&c3)P)qet|ou{Z%MjP zT_~PY;zPnv=L-dg?1~cl+OAi3-*PK;Iv^X4{RwXZj`;N|+6->%Y9~nY%tjrY2lHzG z!ahyzSLpc}Qu$!Vo~89AQ|`>gv0F3)N#cORT~)(KeUR))zE=4B4o^ce<+V$Roc<_s^xcmZ2Am#Z{58=FkG0)|t)nX$w;VZ>Qk6LWBMwsK=EUgVL zinW*fIqb-wKo$X!lR1>^ClH-QTBUY3q#6xy$ju&~pbJX^cM6N2!@&OY$TtYtln)WVczE&$Ns8)6PdzjLx3JcLnGhDd-WRouNIQ4#k*xBr%Wz5uPJNlsZDX!@>yP z!Xm>WBf@ohojw%V7l3yJO9O;Qh6I50Q_OCP_T0@Zo}1aN@`{lW&o7oQ_x#5gsN)H8 zs0J+B!W^n6T&y4qb)02VVNE$yW%h^{_TF5mfIZP5%10PQzEfcop#?8Ac=PF@!RRDM zG_K(VSnwR#{jmq}C(_#|#v4Mg{S77~Wvi<)C;-IOKllM_@QlCwGDOwY?=`(OFn~;w zaRUPw2e^}f9IH4*Ws0R=lq;Thh228A;?X{mi>SHc+h$*;q%JSBFm@+T=mPjEk_Er? zXh+zhFbA(8X+gGBw97}o&@vSE$(A8SfA@8hH{H&E9oxHe`_Ap`@V1@Xe{qGby2*5KS`KfTr-|UN=1awR<*V^MiE1juYjxJ33j@L1 z0`EV@GyuRsEio|!gn~gW1kTLLbE_baE3%wa<8S%u{b$d3{x-dIV#WCIG`oAtDUnZp z+xR@w&r3td8h?vtQa>=rMSdsx+=E;kX5tBxP{#p5?y@ZM{`GO{#Neu~t*u$gj!&}1 zC+X3(pcoWlQYEVB@R~Fxd_{-{ci3bPoYz&?bJB}lEvr{d%(b<@xW28fd*6us_>!Bp zY~GVUG?cvW)cyO;-@kir^3ag=>@Aya8YZ}Ke#j|*2fkR?VL1D&KgS2IKLtE_m0uV9 zll2zwbLd2=O(0fC`Sa(Uxd6Bq<#gSb6Q4uoaH0bj_z-Cv@g0&`JE5=T}M0W z^MBsp|2%SM&~@-2|JX&jGi3Jg{6DA=3x9WxV8#3TCN3z*Qw_VY*z*C`KaeiduFLKG z`N!1f9}If^1L;YA9Z^zXKWQ%C!t_#&;R*l@q8q% zr&GQZx=wTX)8afJA}qc9D<&%@ zJOnv=AORvApk3sROy;J#F(hV^q%IzaNf|=>$w)~-P+i=VCy#**k_Y{7kGl*!sxAla z3)BG)B0Ww;RE&bE2Bo5SK?l3)Gv`oi`B4cL3+o(;O&fNm>JpQ(A!3G?@0^@lH&awo zSy|{#GBi8nwBE7nJb%2vm>kv@T9#jPaQ_8+4|Q)`vu5SksoO^|CW=ccKwa2(p{>f7 z;5Cy7_$Bt zR3QHGqzS5R(3?gcwI899FK%30zqEC7%S_Fbb7@=V;P`N5M0r(fbJh0L)*`m|0oST3 z$NSOphpV<0EvfDvj_`b~r+r{ar>mu|Zog*<;%M-X&Hr;g4|e)g*e60Ch)`HDg11Zt zlY;nmfDJMdB@8@sG~>Y3w^Aayv(oBE%SYMkFI~%SGk9WK8*>|C8Y?TBpMS$?1}w!`J9}blAPjPRQSTF#ue+dN}}6E zuJ1`E4hO2u!M#K8o~qg4?$}UwT~%TJkkdJAFU@l1lolseI8r+@+8e8#t!?btopT+h zbTsT3_(ES=TdCD$OG~RYCfKt~*_lb6?y0eAcU5xEs-Dpm1Pkul`ZRFVMmaCQ{J?*h zN!geM^2Ex>7poxW1y}%uVKL!c$14JGOyqTw`+41Dn}oC>X4t;yq)@{VX}I20(1_AD zsScb}1qiFmHg^`MRa?s(HD!&FHI0?^m39}Zfvu{Z-oCH0er~y(R$dbymv6HaxbsW% z%1z1jnc2&_&xj3o6}9%#xNY^Avz?5qY?WIE>+W1@k1y@v~6MFOP}Y)U8DisJCR z#FhdNX%U#zH-5yNos}VnCBn*pfhL(UWo~ofXPZ`5%^8YB9cB}Y*_T>bR@PwYU1l$< zNGK>89_l)OJp0ruBiV*1+5W@n(mHEGLQaLvIcRkyqQYlNQi6GIMg7f(9ML_E9LBx# zh1`GGL^%=T0nNln9Q1Nm0+T!FsBgzp@)$r&dt5tyVI?-$iPHs+#M^zI+Q{4POftbz zg}^n{KRhOCI3YZJ7+ZIw_t<@rvXgsjU(D824cMb>&cX_8N5az(;AteVJ~g-u-szLU zfu{xog;r7~Wz=6uh>DL@>#uN@lpH#F{3%F_no~+uCtQB&u9LQ&wrgu!i;l(UT&=}5 z8H(p4{2{;ly$A3A@v{%z|4i@R%P!k{>;?xuoL`)%O0?Eg z*{7}8s|UvK$d9r#RmRA#)vOvmba-t^PSwV{_j?MHe7`pBx&BO0{RRf*Mm=dPB*^Ncj!VrQ@?~v*%WtGp~hB^fE$9bj3pg zl64ScxkP3ZvnA?jA*#7+$aeXP2e#J^m5s8u-h7Dt$Z+iMue@Gu#?ydZ1@`O{z(EJe z7}x=D%3)FwXpPd9nSuCPJc9W`$D~$9#OB4{4ynS7a3M}DgAkX6o0sRn6jTO##J$W~ zl2K)@s;DXJjB2g#O0KJGaOLo=Y$z#r^%YIF)w)WCYvgy+(rXe8mBnSwzJZ3KDtmHD zZbh!PrPGp)X%)*_maGVm>#8a3El}xxEbuNGm{8=(C*?6iIY-8@g?%fsFsF*PdDPwW z8FQ+@XJ4)YJ|t0(z;6Ych3E*nZRhT>;H?w|D8Xq+Jkl&AliZLi>N{1DH3u0$c)D)5 zHL>3%rDZpk9huC|N{ve`w6RAAFSX_9duVU9QmPB4)4Rh%L2c>Gp8zh>d}Ba85Q#^p z1H!ye;Q`hw;65F7V)g_H?X2T|IH|EIi3wy)&JFdOK4l}pIY7r7jNC@lrf{&YY$=;+ zT~Ru@Wn)d-o|YOz1DL0a_xJ7XX`PoM*&FBW_gL4h`r(F+yDgBOfGoAZC&~qrBf(FN zL?_l|OhoTQJ{VjKu^1eKawKyu=^p~?X$GPB4mL1gEl#U6yWA#cO_|z9%icD(_fifgqO)ZvIuwUpORI#VlM)6Id}w?DtN=`5 zY4NE^l{P|d#`zwNtX7zeGU7Y!Idt$l*!}sHH5tTw7zTU zo{nqII`gW~9?$8|y4R-WkMukPxG>PD{{WsCNRNX24CprsPMK0WU?l2U8FmlZ3uv=0%Vyt}FhZsJjpt^t`vA>`nBT?Q()W~QtScw`*g1r+dLCHY}OKx|t zzqD;=7@V6dFUW4nPn}}to;R_pcEvDg&W&JGC%VtM5a0yfwE*vK#u_I}R;kw&WlcaL zIyF2_aL@@*)QH2gi&xvm(Us;(0>H5kRJ-<|c4Pb-dHFD~(54_SP`z3jMexTa&V9y* z3MPP%GG4y?Sv zPhPp+^TCgbM%?|Qxy}L4JDkrfW*(&!awDfXkGh$0pfb){OKpaJ8(9L=hE@$Ej1mJJFVFv|2;MG>0)1f>OD? zYNuEBs6xa&Ro4VkJLKDQ)-SDbhevlc4bGXYA!gD_LGFAL_*kGw+I8Jq z-xt?^h3l2dLG5}-4yBkB?XbV_cA(3L4!|tE>UW*mq3h85&-y=4?eOa%IV29D9oqA; z)QNJiHy`U)vw#I&!6*g4ewLhN{oYA(kQk>qhOm?u{A0>+&n!>+hT-u4BF!C-qC? zlyz^bGWWvkudfo%i}BO*eEb;aA-{R~uD>o_;CG$INzY@PD@8l0=r@A*%hz4^HWUps zuTbE_$9~see~VwAe-+P{D%6g^6U%qR_4jc-OQHFScHVeST!%J_#qs%y>+b*^U}jM9 z>Kovqi5JTyj|w_?b*v)`4g)Gx4ONgp8iFo}PL~c*J35`!5|_1leJ8-<%w_=@cRM#Vi_AOIFEc4$%j<>M;6n6Nau(yeQ zM)>k~tPABEyq>TB!t1X~`}lQ!K5@L@`y0<+8}$0?(m8(D317tiwh$`{{1WXDzVPe1 zH#YfQ=lCM7zeB1-=rP6f8orcEZ7!FJFTffcz~M?5M-|E#g;OdtRFkC%Ys$+C^KH2~ z*?zba0o-9Hz@3EPC+waeh_pH2)D4bLo=bwB#s8jpooG)4pVxPT;M>A!1w*?a)AFt@ z;U29aaBr659^B&saZk{4;GUr6z$M@y-d}kAb;{fAy$)PbX}^VZso-ZqfdC)EPvN-s zRX?u`pM4d+;!ZfdI1CopI31T2On+;~<0}icjNY?I4flo*&)ZeN8nSfG6sc6ZIb`qYl6PQCC#x%$|%-R!HLDYVIW zpZ~5{Leeo)jb548$K`$T7%X95#kmSg)wGD@;FZsWBb(R03d6XFwBqjT@$6piU8cE~ z@c<68t!n-W$G5F=$6_wmz{!Hr9S5_m2K7%MO&Hi7i=J$&{tgO#%Z7Wu^rbb=F7Qm) zv~9=6-@NpfmKF`R68V2?c2%!S6z-A@QlYhhTt5frJHPlb8R2Ar*(h%#5ev`oJIc2&%Y?5ZI!CDKnZ+Y;@0fytg{*ber_(9k;r1AkjeA>6=c|FsK{!vhv>jj6>{{K(bd+5p1OAZ$@mO8b@jkf9cv32>igo-fu1D_6;Q>zX`WQqT#Lb@ z@pj{T63I=Pot4{Hxd)9zI|N%m7+FCrR3odF00cV=@?aGzFP(PM)Eg6RJ)`dSNj5vS zD&od381MP{bB#?QY^mp-(8fmMA+f$r^j9f20Zxd@GLfE_OaDS~p6+L473*q|a>&SP z6Q2LX55n6vh?P}Hs!(X1x3kI7H1kA#)zaSHWzM=M#%n5FC-=%tZF@(Sug_vVZsW$; z^=sFypIc*e_ptPh%ZJbEP|pQUM?N8r1Y7a9!J{ zJXRLZX>gL2PX3;DF7mtsxKHO8ohdS_;P>&J(|s8>YwCwTPcgxYu=ggc6a9{KfSQG(@t*`?y}E{2Du-WS=ZpTWVEaR=hn`pfQn1zD3&OEpH>K1DlX{N6sUCR$&10+% z!hX^igRz|27$M_`b@{ef7veLY%jGi8kEKVYIL)V!WSvKatRs993BMY!4unTv<#@F4 zdV+eL(|08m&$se*Pn-J{`~(>M1b*f96A;f(n|KDeoG^bxj9VHbKD65?jXH+h?UraTp>1F za$uWFUw}C$5`PqnmSAgX5d3MFdXoIlzkNI`dXY_WpY&V)ZDT)?h~pjm4MEV#H}v4h zx8HZi9rxdV#~t@|pMAv@=bUrJ<>%lW#<|bh z@1P~JdqpIFq)kG!$D5AN=hGnm)aPByn6-RnbxnNsaLq&d* zxha3HNxr>oS!Lt4b5HK?K5)*gv$8(NUgn@PiQ+^)Vvk{*dD41UoGn)t#VlYvWT@yO z2Ac`O4(MP=T0sj88j~Ss1-@kIRDD2Xtkj)PENynTw^T&tRCY8t>@7KE%Qwommkg9N4#tEIyX&T_ii<1T zx*A%myP9fBo$1-mLClYM>yI(N7>YXxVK|ITaz`ElP2- zjnVS*r&G7DZe3SfSWs=w8tU$Djf`ST2r0QgDstD}4!ep)+Ukmp1MnyVe>N=8It@9p zP??LDE~eee2RP=7HQ?Bh0qAhw5bu-TEa-e=C#GPpq*zjN5cZxdnJl@sFdvQ!Ehs#G zVAUlo_gVuH4d`I&hAV1U)}OMuamPSkleM(QJ*;b5o!PXxs3%ovZe$#5d0x4H0CrU0sY)7gg_oLBVPFIL zsRWR#Qpnyn#%m1tc9Rjoci4PP_SJvlaEi~%OH0eE%B!R@P(`4BaQje|dgLynnX^^j zC>uGgnBW6KN`s;Y9TuBPtN#`>1{;=KCm#_sf{nv{w% zcM~hw?HnyH8*w%br>FH-RuAOa`l~D48UL)VD624rrq&gd)*SnltIArQYY0#7u68yO z&J@qT&3=V>8>MV%$`xfopq$up1Xs#?oCxAh0Gj0ZLiXS>8HkUZ%_^FR`@?iV5Kt7j z;I7D*SqRn4X`d9IDP-^t8E>&b2nRys#dnN&sBM@S+;fMfV&gizKmF*kK}5|XvEPX zS~2LM#5D$7eUHatY+_KHGy`qLaD-1*1z!cWdskcAuD(A0+r4U)n||b`j(sauoZs1b z{)!d*I=VM)+rD}8_HCp**3KtYC!-xu94*zO2!97VhuCv;4*iI?K{Ea$m`4ibe)Kzs zf}JyX;nN&488eRD)Az94NYB=b&&q4ADCo4*7p!TKn@W~cR4&;(*x$WsOIKl8t+lYM z3KAd1BOgHS<0jz=xbTb#a(3XIVfBE4BNj%LFToQKRZTz3=>a)7W1_UXzH2Gc+>7I* zwY#Go#|O@bDmp$2XKFC!zT&!}=&<4bx+!sfG`G}uHB^;U8qasFE5>ukaq z0;`VS8G>V4QlMa1c#)OO6~NFSM6*y z8B(XK&F>sJ!MT7#ZCE9~G9z$hNEt{o@ku8GKNxN(uUmL9l$O!Cz}{JSE||ozpq>jK z{ck=OHjOyyRyFL}(s;_yK$Eqix^GlzUYq6GTHKqiAT5gbTsY|#elDCk!Ow+?!jnir zz;iUidB zfWm)X@_y)S<2hI9O@n0%$$Qg*UFY1oF1N#a!K$3X%2lqm)m5JBmTp-&(Ah!C99gOX zzxFr8Igm^epc9_;7e_ve%yH2+@y{!BJpRzVhaYr%C(jGV-v3tjO_AIVy1Rolo7$2t#M}aUi(spwJ!@)eBEq9WXaaoTXLi8Ov zHnd0j^fxh&6w)R7(RVZ{1PsgvkEj9${`@o)zHP=)ch0G-CDOCg8q^)WmbJ`ju7v4F%mrjVE zEZ-?VUOHIXv^-kL@2jYvb(WS?m@VDSXLmK!RyAarolDR)#$JwJ^BDWTL`Jw{fs8<; z{mCb}j8Fj>y^Xa`mtgHB+8!OnWdtv6KcR4dp{7geVEHYJS$>}gr84{vS2vHWtJ~al z>hhY#Xui#mh|_vgV|pJ1d*j?jO`d;V3Kmk%Nv!B z8D*o(GICzu%et%Q44VyL@_FK_oMZ|!fJ?FkRSEn#c=${mkAdGYT3NTc;mxL#hdBS< z13JCR(!2xwy9_%0RQal|o|78b(2lQ7fq%bZ_qb>G_~11ag(nOCs1IX)6Yva`GF@pZ zoyJt!X;D?qU8B*AnDiHyF`ehT?1rdJd6>9#VlGR;=Sh73*pQCB(p6rPof66UbT5NG z8^EC3?Ww7DxJjkjQjwy50T;f2373!0gv(OH#&)d3`PB|cu2s`@HT73CHg|=U<~LS1 z^`y7dCppTxn^?`+wc{0KW3^}0r43fsEy=eJ);W4JnZDLpS(PNG)E8IPAA7nDLV-O# zEV;L)u9?=-0UrDhm=p2f@S^pn!HbyhSy`l@{;a(9>Dzk0aK7>4D|N{O6;&e@^{X2? zopNI+`o;imT_^-0P}67c4(*&655e>;su-g`9vh;$O*IuioC& zw7s{N|LzzYZ*LzTLn5Y*^Cl-tgN){J%^P>de&UFFTbU#*bP2=J!0-l zh8!B7-C5+vXXk-;d=+C5d1|dH4W^pH(B*s@KAUT4EJ69~<56L-*)5Z$-L)M{Yd5*i z?XAh`Dr)b&v^vsO>u#P8$L3 zZan>@rc;&-fyu7vA5+XrE3;d+mx9Y~>0HcZmlg{3OA%+Yu?HRV``OPvBcJ^u6fIA% zFM9cG2jHXwoJh}7NqUx&e~q4{GSBfj^(=N(%_8gSH??LVCIV>^bkomcW9%w~c8{3+Zjqt#(b8lUn+mU3FeBZVsPYA{Pb?Z) zax!UylCzRC<4kc$TpuKcwOAh%Ftk9OP}z6PdG1xE-!a=4>4kPxvprEB_vY=VR(bXT z0vMxDh9UT(#*P=hKETcf0QU0$&nMRq*i_*8%QpKO*>{tVJ+trn^BO!2CXCB>zW;k+ z7kK7d9?#5eA1`<^vvkq9zp*@zG6i`F5dA7{okNV>8N;%5I1aIX=c7=9b+3dY;5!Z45UaD^)-cz;(xqn!_@0`D1 zz5fW>^}Vm%N59JHLEgVleZSIs|C<5tYxn8>VEy0!3H@vLseSQ&VEfwr0`L7t1NztQ zQ~x`IjQ;_@@r(P91-!4_r}xhY^8Q19?~D6^<6C?`uzl@*8`^K;?IUiS!+#i`it-Tq z1wLh|Wd5&g6}yA$29Bru{VbY+#DRgnKKvkuvdw0-+SnaiH*DCpZNrAG_3q^(ZuiIt z=_Hucf?o;j%aCUflk@5Hy-%;oxuk6ISl0K=vs<@s)VEj7&dye|gp?0AY#`SRFKoUH zF00+uLb87plXWl@f;0Du|0gi{p^X$&ca67Ltbz7EA81gQn-VeJXwIqW7;_KRl;k>W zMeg*>+J8i_b?al@O)W!pg?WYf1FtBRd)j zTb#&p$8~mDNmLaSCK-#>DujM4nlRe=+3b>d1RpoqrFJZH4fReht;)|ZXB9eh`3>Qg z=F%KF$Ig=6uGZz7W;X0iEl+T}O5ZFmSW?{9fHAbq{|)I5XkU=5ChT+=KA~K2g)FSL z#=E+1_$G@8OJ>83PEh#*%ylj1nkbo}GlMNSFD)^GpXWi%Z8-@3HEeu;aP#cYjAO)_U$3#_Gy)dki^x+^={ zD|0L3b6n*OH5K)it1{A3Ga^Ic%%+q~&l8sP40EhLwKg+{uT#bR`)nFxH$Y;6cFl-2 zLZ&{%RU$2?)P4fBDo^y5nV5m321xW4)M`e7_DOy=v$%n(O%rh=6Z+Wltjf-j=DaLs zw&mC?ne2|yp5>ccj5Wrt#>AAKCRg9Dikqto?fEd0;LIyQs-0ExBVgk0#-hZ-uSk*~ zX7R$W2n*E$by5P?)%ejiGGlSm`xws@q}j4iwvK!%1Z|7cs2lty(Z-nkFo+gno&9JV zfCQwN@Tokh?(XL#ZSuoGNE@23WO_D%TzU2lEKf~V#e1nX? zZN7x{^YK5Z-47Ul0p4HB-v|7}`-=bkD&}o$n%@Wfg0x@4YC&(_7Vu-O>iV|&;Ky1) zZ(bMh6ZhG}%y-|3`(yllz%R)CO0+-8?*o28?ib+wHT*u{7v#QppZW*b_EqFYiIECj zaY#=Q8HS8?bRHsGf$)GqyV3-FUobvt?f3&J3{p1J+d-NUW@dNjohCio;T{}tue(0& zve=2(%hGRPH&$J6LFFmtrHwazv3Z#p9ZMVLuV-IU>^?awL~$C}(C-J{TCeO$IJ%FX zsgOR99%pBQ-_CNS<4nM{VSY5gKqMRh$l;H??U13v%U)cYmzSB5mzTlL%*)8g&(Fxn z6K%Z-9{PKqv90G^uCg-xuBeSqNcdHHZP&AH7`0gFXODdjI6vHZi~oF zz&u3X^1W!+f?ofQ_wmX8j8ByLU*vNQ`z4qF^(5uS3V95N;YwMAXd$#T zA`A~I@#LZ6R2+(bfazf5+K31hl)qy?^i-|$fs^-BEqx0xh(tewy@yNS!9yOJ7y^@K z>BJo&N1Z9k3ZLqC9bw>0wY##?qq%R!M#aWNqb=dS>A#u^0@n^=H8U}kiijnV>^)jh z8p^RQ_H7ThYmhI?U*WGsKIV4`FRi>7ut1bkALq+-BnuB8bH~L-D@a>E5)~nbg{|Nr zYvb@R65dC7cqS}-tN&ZadER9ck5V)I5h+YReZKn{PX^gnGQ-EXYM&ULXb~kK9 z>97_+hnSiI0KyPW%&?@}g1<#VF;X9?84^}1-5Jn}WaMSoEoQuzR*4oAV6-UBmR(S=A|uaivsRZ5)i)2Hsi>$YKVIn0w>xu88RhxK z6@?8}Q%YWTezCiJ^|7bC!v;QPBA>_I93S&2#|U{7aRWNMcVz|cmE@iyv01P*x^Wu% zl&+hL>UmLiYfiF>!-o`e2|UG=h_04}vla~;@pt4|tGaC=6x;HOI>0H69wW+Mk&e;l zs-tIf+Sragjq&F>bCS|a?fE4Ib(W;$d@+733ifjYyNfNuezhpC!`qtn@$2}_=(_YJ zzK^k%bcMSa!{-ox^VmI%)u33EFU5Am%J)%uLfk-mobGVi^b%eQPMa3dUN|e79v*ya zV7);(GXd?O|M>YG?633RMqggqyOg7pmvU*N2tnpf_E%48^WY%*ci`=B$&VxMR6-pkGE>KJ;tAg9k-@bVBmW8hDM@#JgcNkYF&=xk6H1mggv@y!LgKa4F# z$BZJwl#1bJrei!tJ|1L~;sfF1(gs2&9v|10>Np%lmOQ()$f2~;5UhPUdkq z^e=tNE&cQ;=;kGmPP}d53VDBH9uhUBj8NlBU|Xo}P30}(D|YSr$;o|6WdG4gJc>8- z=C>kGWj|sZLm!9>qx^uJW*|cYPcDUIc5gLWERB_QtzG5iU9ENUFHS$SZtbDneRtn-v z?=QMnfqRVK`(V+%y!kbNUmM>0^9k;K7PC-_@vIxlZI=}3*L_nfHyz3?9LyGcT1=p_N?}1r)UXF_Ah{S zHaOI`a7Mv!$#DSR<&Wvi`a~McK!fFvj}@@lfdRaV`Dkr@x_41Sw8r;t3bV;3cJim~ z*W^L5QLWzw%whCXkC}~n-t_hRx!(osvsp7>bt#mmqpl!a2>j@2M~`^jM#0xy~=4ic%k#&dz~!nIomIqe`&*`SnGgi8J^7*!WhfA*LfkH zpZ|sJx#w)Zk za3GNUC>q5`cbNo+0Ns!A+c|kPMYOdd(3&uD=W5giTKpOb6c!vUwAI4}B!-B}@H+%}v z2tG<09hbl8Y~<{p_uEz8vHgelFZlz%q51tOV9ef@9+p2~k$~OxCP6Rj6JA z3U{L4bz9?R(5o|A{`lz0%9-fZ9Zvl|hJM?XQs`mQT*;(|q0FSALJvbOifa=|??OZY zO$pdLO_8;c<#FYawbhZ;)sgbM_;&PiWxI9(ZwWYt!N#dbB?4+u;OYg~IK(3GkhGOJ z{k0;XQDgHd4`^82L1o|3GwG4q`L*mx)a1*Ms76q91V)yQ%%XAzXO>{R;=w$mdlxR3 za<|o%oIt+I*1!_VerY)=)i1lKd1zwox{1M-YMxB7tFtBBky*qduDmkp(w#f6jlSlZ z@M5G=Tst>6lW2nY56EVqCbU6b2FhiZHoDBo2nE&2EG0G)1}ixtjB<`5wWTRuW*y-Q zEF(hXH_%8iOc8K|O}3g=E){d*P8{OyFg|?YMo|ze?CG|`qFinn)dTvFrAhS#vPS4n z{;be{B^g6`WRDte^iFP{bD*ltRn_ktuv+k|ysfQjz}c63eRFety~|b4;;MU{ec3q! z^jJ&vkaH*}d%)RW*?Ez>rNvD@w04jQ*04V+HBym;{2!?%96gyCVR}qY=B3*y$X42h z8R_8RH%pMGFfxP>+A}ODv;c{~%8LMy=d>`I+U#7ybwauoX}?8;6iE$IEcC*1yGC+n-8v94G9sXFk(mq#0GU|G#un;{$xMh^hkaTMBTRv)Lgj3#V z-E;&~BC*>Pc^b6_L&uQlN<_q}Q%ZB$LB{kUq59dN@1RTdNznUTt0l*r9dAXE)%b*5 za}-oB)dT^jkq3y`5nft_AJrS#27@UtRjIeUGSq8tvD(~4>&{6Wi|t$<+mn3J%<5%U zn=5a(Rhp0e`1P3Qt{6-*3?(FL)KHM56?DcXad8hJl(V!My*EVIY^H=IO^Y{Z zVji+($7{j?$tB_tqu9vbSkI0))!NaNW-l-f504I5Yt0$OrSdJg_U}2eZ!D2frX#IfLT(Nl^8B z5>2YH2IH>CctfrwJ}EvSEIhri+8eJ7vyyM%SOtiQ5ZH__q*|CO(zC*n6W!W6H|`v> zHYQi)mRJ4sr#I9j_IF2Tlop=SuyxtG{DPA7)Y__T4W|;mg@7;^pc71zHa%oOsY{Jf zFh@qnda@Pkr5Wgipsa&}XgZvQg<%qkGENFhGrsD>wg!DtJTvY}#0n=-3U;+7VSGHH z6^vti%)E{r%}1>}^7O?QUp#%_z=0i4ti9!{E1zH!K#}v$2gaaU&o7x>%|D~jR9TnH z`3Q}!$vQB4#AB-aU)BlRs{~t~&Bj~; z=7#mMU~GR^20t5ZLumZxqiug*H8ynSP*wNZ=A|i3_3LL>4h=a5uxOxd9m&m&uHnkl zHbx)1PCwYt*;JQPWC3mK>zIi+bSN~}T%Vm$QIeTQv~7^@bCtF|4%!y_fRSYWPe)yT zJJctr%ldN+Ds{PVR#2Bc7DSs7b-8*er!Hsj0j}&ii>S+8L|vdC1b&A>PirRq5aN5Z zJ?gjR)XfiM=gg~gzVwoJ=bhECd)d0YLhQVn>N6Y8 z2AW}PdW63okcI;JD8x;ivB zyRLzb(;P!$5kF4(*guj>L8EPSo~GbDP5tjXPi_1_jnDlQ=PA!jiUSn~lo3B4^mp4D zb8VdkYxim>fBsbYXo1z%Xy29dx7hc79rMG>2aJhB27`K_rl)HsDwBx8@nFu`bS}Zq zL&N!h;kjfz(Yd6ts+`1sh|N(S>6zu5W7Wv|&PG#ZPI2WAf9TyCIF**JU#1;Oz{hy( zi!7W;pvO^!pYX}!HI-zl7liK?>C5bC_6B5gmvlQMBo{JS#dE#!?T`&&UOYVKl@Tq{ zKk)3?@Mb}564gyn01y&P&?c0^#J!5#9DtcuI}EQrtJO-pE2@?tQ39{6L7{Z0?ScR? z7-pU+N=qsAc9g$Cy$ToSNR4P8%-!Kyrf@mg(OT|PUW`CoZAh(g`Z!0S|@-_n61TQ;0|GrWt z{|NImqiR#cH}Z1QQ{zLFVk&I`j)%B!)o99jZ-*X<+8NCz)F=tf9YgJxw>wweK6lb& zURP^v^Xfb1)(+=%)gAkNc@f*tIW&A=3EOw^kh8*bZQq34dCl@Qx38>sPE=evwC0Xg z6(xh7ukI*hZ|5z$blCIbrI!qM>@M^qA~F#3Z<4;tj`>?zNcX4d6- z#LTv`%)5H7xUBCkf&nNip6>t*x}{9Gbz-GGF9|4Qs!;H}B-R>jN;1`Flx6a7MjU{& zS#iseTyAqnEv}}r%;X4N2o*Wfhb!nET-+oX>*TR8%2d8W*PWM_o-Rpwj=YMJA`-=N zvhjAR&1#DTQu}HX+Wj&=RPc%?5-(sR1Tvi}oRQ<9{GIWlq6t_1+8oPFi%a|4I^*)( z(`8QUt|_gnD`gMjS7nDat*1tgtevi{ov!JqYiJXHwbwVcdhYIQtL*J;YU*V4tG&Gv zwhuP{3)F782?mi=@+-uyRN^RWCJO4}aN*)5^wqPPoHoT>-BP6#)WZ>ex5U0_Kf;lU6eM`DnHd;y@2QvCqnI&8EY{pMRkj^@5II-dB`Kt-ebR2JWV zVaCS(ll#w2Th|Z02ia181RgL6v=LgElmw6u)&*t|x#E3V3~!K($z(E{vI}fBaR8|F zQ%y*MT|&hL5~}SS>0qb(^VMBdt6S?<);dP2O1e`*&p*TXU^6QkD{F3X%3s)g*I7en zc2utEbgix`v~0ZG+IH;hxiwSn_MRcW=Ed``D$(-yv5v98e;Z<{uW=>kjvC8*DG}p&g{5`n>gICbr!zm_vE-M z$8JwcqkMw)a(h{EVVW&1*PIoX8keG`RgVH?H6gmgN{~=}lew{uR~oSJ17`8%pS##k zT%H{(R=B%XtmrDr%`IADEoN^_Ot{^+rhd;VkRL0EnC$PLq@SjS(vrqaC5@inXjhu+ z`4uqnWS|7Bbf@{jszPc6E*|#6D{LXWO0}8C>SL6U_(&)f!$QJmqdCl?ILsm-(dtlf zOQ+*dE5=pa_J>;Fy8+LSyDFNR91abBP41?y_EtxuqoLMmudtT~fn~y{hh?@OxOLnq znhHBuvVDJ^7{u&;71o}OD)5`c=O+PuA@KdyfN0qj>>-(Q52IcMGJpY8WYnIkBy_8NeR8YWT`4huQYNYp?A)c#zYg^I@?+6|`n9C@pFN88{+m zN)~Zqf_s=?Cc*9T^OCqdlX`CUu*=~+cD86M2;HhheUA+Am61~Y5uBdTzNqS@Xd=o& z9nP~=B@o`Ins839p$k6(62$egA$rmzLwjUKeV>;mZk=$mH`<^r;y`$za`x4a677q;o)MD=2JfAg z7J^9+>?B>FEjtEN|Q?p@~o6MP6#{^ zClGj`_x?dSRq&bc9`A&v|2>YK}25?AfoD}zJW67$|+GC!JUef&QPSZTq zJV*QcpVq!$Y_eCr`JDJ-uHvp?#G>uO&vX6#-v*}!oYDAEnOA_6y*y{AFY5xRuby=X z%{RsZqN3O9BlHo;Wbaf(5``E*Kd~eVoiqr^#Pfj06KXOB?Pv7u<;i6oh)=*+;5fm* zYx2w|@V|Ig<9}rxcpmz$@~&Lo#dnRLly%F+eU(R)aiY-k8viEiM)`M*XOdwNp!*tM zAnV4}_r)27vqD`TafT4?%=I2NLpg5_3vzV1u~GD)BVdlkL%~61`9Gt>hSD)8zBae`a9pT5`RRH`&;^gx@O@PPPwKGZ9;ZVSL?c9)cGyJ8cm?5`^58vX&k40LUZ_L~p31DWExfNhR$AXDgRGLNgLnS@;bJmh-NHU91- z=-Ts;$wAln_qC9dpM{(Zx+d;}u00Rg7j%uUBjvMtMgH06l1qI$96GX~(_18$vQU4) zv?n=GFuixjgZumh(;YWj+Kz4Z3Z@~_Qplwh@~?mqnp`^Tnp!NE0vnGjkiwwi6G$}~ z>0c^i{_|7Hm_IFu(u5kXjQM@-N}!DCfQ-4vZ{9-2Jk_;Rox7imsm(o5K=cWhv+e+4 z@qbcM{PhU|bs|aegrHjpLQPV{zM6!b_@9syaRzf-p9IZ%9&+6O+!_3Q@G}@Pgbi|G z1mZj+Nk0ea0g9-0ND>NYEqO?ZU;>gJ4Db#?6;YD@R0)uMUkHHm=A#e+Tlg=Cfd3x( zuN^S_BlN;iq&r(E{{s9^6HNY{tEFff<;2SlcoR9WBh*} z*~*w{cC_}rF%G$8^EBym75LvK>Y0fR<>eTnz8T_Kl{6X!vUhsp-Y^!iEQ#F~ z^0diT#Lg7{D%&vr2#i0P#uGty4#bt1jb`M9M?EnUYferv%JIkE%d%hC=J^vdw6Vi! zrs$!>!fR>~(NtOMH&=$a0-7@}Ktc6mCgZ0VFZ$74fqvk{{y-$=xzpR)q?zA5e4eUCpbTaNt(ZEAgq zHe;hhbr`=j)B>X%jA?LsH!{7c3Pw8R`ZUwAcc=w95iMMb7P^i-^2_wYG%4W1H7xvz zC$`>9<5yt4v|Bl1XhCyfU9J6;%cWf7k%TN z-B3b}KbR0l)g8p1-1>Rp{qE@HHei zhdqQ*623U%&GEVL|6au|_59?87v%en4NkJZbNZo;OV&Nc#|eKvIUMiPIFZTLZ=8Mu zTr{A8O^-gh>Cq3ayz)vmf%uxQdH%qXSfb}oXcB8tgf$z}jiF8W`Fg#Ek&~c=1%K>*i(4ma#`s zuKk*0zop-_CY|$z$`PDTRZ_Dw;TkovFuBGVt|(#oECfk4pziI$Q*Z+aBW)?YP05At+`R*X{w6=+0(g)fa)h3 z4|69Op~&<}W+;3^h%ea$g%FzHtimk{UX-tSa@E|*n&xmrSM|`;u2ls+`8hco`>xq^ z(ye35Z`m=kGNop9^94WNx$~#z=bO#8^U6x($2UE=>D)V-@{4MB&F#G~A<1*B$?@vS zD+X8JyLIbbGdW#}hOIxo=-lT{KX&EFUt_=1%j35cX$fe}eSk+6yk4p#*2h_5li*9)|G{uJ6qS(c6L;h&J5?5+43Eg6$S7M zZ!Yb#{6K!(-dR|`+qa(+FoX}*4ncga|=p6U+XAx zHd(Dt0L_4M6Z84X zWFrY730c@g1f+ndh#M**Qbj~d?SP0&(W2V zL2PZ`e&6r!k1yfQ-OoMu+;h)8&t2^miE;sph&!Cb0SZOlSb#5;)NpxXLtCVh?NXFR z=Pwvsu&RISAfe9(u_@X}@12z$Sc*e9mmZ>k6Lp-)1=ugGV zBuRF=xcJdtW-l$wcV?xhhKvhIicv3s43zWqW7pqpROLHK{&a`jjxTn92+kA@rY=Nd z@5i66Z*07N;iBD*jk_038?LGvo;Gc$s%mIjdI^@dv&R<}WW{Dg*j?2#7dvO>&@)K2 zP^1+(Ty<-wPg_%0w`SV(wRO`XA_@{Ks;1)op8VYQ#gi7HFJtAfTKRyAJMaX}oQg~N z#ltDY;N3l)j|F7|w&$~z5NVJ{0WE>zb5cJmZ75gylVuqhS;p= zNBf|Q&^}Bfy59M*B|X}afrYftqQXd%T%C4Al5Hc^)g#kthpVfHYbRV4q#02_5?drO^k(!#3y1Lc1qXnhdFSM+zY#DY9mHsIsV5p~u zL^Nh)MTTRi6j-J1{A1)LdashNRATird>mG}rWEJfqp?SwiEZkFOS3@1Fmwp~UxGfa zb_v0fF#v#-SJomU{oY1tt_Tq8U#SkU??%0$%zIHY)FbuOhuVq63rY}fQtUw=702Mx zu_mU<0VIW>j3kfsUgDmXGOlvGvn-;hc)|4X$+5938r(A-$rYK|u5edT4cQeY0 zV1jO2sAvK92F(3QubzKJnd z2iNzJ;|V+ONF)kMj#SWICak}Fc1!)N8!{)9eYpCji%f76pGipZ`j6Msc=S19=60-KoxpZCqY;gfng_w_l+900pgUDDUR?->XH_#r}iy0fLuC1$2`awqm2z3Qa9JawKxa7ei9GN1o z-rscp{Y}&|d$gK7G5e;QL%W6j}RxBny?lJHD!?*pIksd-V}oa zC%!aeqD>|_Q73Mbsj&H79%IoikI|O;#km>r4xNK!1E2fx4?kyS-*wmQp93qg$s$zQ zc>YFS$Yz4SqtK&Lp;Z)OzGA9UiyQCfW7JxvbSf*AVdZiK`(G|!H#o4ex7EFD@uJ50 zb7xJft(rWs%vG2(J|i_HHYO_4LPLeZJ(evM2X5tzE{@8G#8yj44R}gQd3uJlOhqD) zXNb_ER9HpDC3vkkJwrjF^b7|tEp|jjr^4fiOf8j=cyzHyT_|%#reYlc*|>yl;)Pef zv3c_wSE|3GCiCLlhT2j?T|@SgpABT^m1WN)>jx_8$Cu}PnP9w|B~%pA(P@R13GALP z|1dX}J+*1h(=7JOyQUXZC9u0m<=m%OEXkS|%bq6JnC@W-)%l~_4D~benrkeVI%mut zePy6>X7sp#?_~Kc zeDt|S^4i|&z50KA`qEV*{LAZ6uoJ}V*y{{n>x@WzLAKp z1RP}-&`U*0`|8u{Y=s%A3lsl%FV1D-SCk+HlcnT@)C=}PN{0IHm zv-cl`7v_f>Mou}tU@9W@KU|E4cCtp6fy9>Np4I}`%^_bTlzY({$OxWv>{ zsg|qzV82!`*N#s8W5wJPzw**fXy(;;?aWH;*Vvt(%(=2jx61CBcyp8ediJ zm>4~n9u{s1lgc@6=nI2#4!X@EH(>AN&#_1HdE6w7J(AQDp-%SUUI0}1Q|Rr1%1m`f z(m&9-3#AwOQm+EDrD*r=dabeK7FX^p@*7i((KVZBJ>+H1!%078?G$Tc0&1d zs;||%#z75(!i7zQOD{;RYGz;6x`;TD>^B`jvQjYHDIaYH9+rrpCuR9P#m~8m%tEYahKj{>OCVqS=E;0)0x*vw>Bh zz0^5v9QuL!i58EBX_`rJU8|+2Se{nuWc}__N2e}>&2{tnQ0+v9LRb2Og zGgR>vDmazP1-Sa=;|_b~1h-EdCb8;pNQ_0{gJ}}13$@X4#vW-44-AP3Dhn@7jYy2JMFs}P*x<3#-8P%W z5*3q>nQsdUv_wWHWQi$96gLIyAK#|mA1mXAibEEVzndQy0!r5RW5~hl$EGQXIh9F2 zE?D7}gP%YSZp6F>&L#w4tpI`$dB=)8KtnH5Zw=POi4=Hi8;z5rt5Wg;CmR<{rk~W5 z230x61(k}4=p_0PWXN@6WXRXbyN~*E=FR)RDepc7t~Yvd6=x`=ybF`E8TaQy;?-sD zn7lpXO8RL|AFu^Q!0XHkdACvWx_I|gT=@ms>6d3|g6)4I)i(M|G~rg;l?6er?L@iW z^M2ppj%Tj`+vyWvqMa_nBcHsU@e}&-+}SHooTw-L4D##AeGZ9HgIbylIzpnM zlZ?@mrV9Bm;*}2>bS+tgG2JTGnKb#}uOXqZi;9NLV?@JRpJ)JX8FZKoG3?0rN4n4% zO&1#0WCQfRBuy8h{5@I647v_*BD`=e+HdD-{dS$!ZviKsPE&4TDTEme=f7nA>K+W% z@7;ruH2S)-=lnyMHG)k126xFxMGI5v>SHD&$$`P+ixXo~VrJW8g6#H1!;!cHK|3^A0t`AIOCUJeB_JQQpN-f!` zsks(aFP&NvWKT#O7gQq8!)HKe>;2!++17m%oh^f2uN?kQ>16J-zJuIK+<9qOmwP>0HZ4mI-sLmldG z|Ar3rf25xa-3MzIv)NUu{Lnh`#dIp!U$M6OkNPV%%lP$IA=g(x_7{zn*;4ke@XG!q zx(|Ba)Uj#g_wPQx@853&$0CfiLdK~dz!$?&ehL{h9JMVTW4?30ec^ZR4bY|XyfT?l z?{_Ysgpd8sy+QwW1kL`USM57j;5zm@x5N+Ee`S0Cq;E7nNS#@< ziQ}8`jov2OUI(K?w2Ggc|F%Eh2;J%kbXBqEK3bfP{f4@#D8%m@_#b|OCtX}urQe0F zn)T0g)e8#p>Z(~|b=8aTwfxrJ=l89B8+28ncmAVq?K{Wns(5QFkB%bG#dTFfRJQN4 zdQ|AD{@>NuWu|^u`*j~QCaK34G;;n+U(lkRc0mVjmFeBo!s1r+>;-^Ze;Qzvle-AiQli2aN zrqhgS^HB8HmWRUbvB$>P?J==--Ije@pL+nF{@)Mk+{0I97bLF#V0HnO^?qNN|4rIo zd~yM@7&UTQFFepTEawWdfO4gDgvVyqrB4ZVqs2sq|HtxN_`eaz?6pC%?QAH(K zzYzl1lti(=NF2P6j*3vX92v!=9QF+02OSR+OGc9o*K}h2KT2+W%gCizXvSnyshn~u z#k`X=E-?XxFcFG?RPm7z86j@{&%ho6EFFv06H$&RR=DM6I)KImwYdGM7@MI=Q3imh zuA-9SQs80AaFvu6qts%7Ct|&6fF3{tl31P*30#;_K?*FjVkf&uEt86sS8N!Kc8Cq6 zrHBT22s2{r3j))f7rBWUz)umK4p8W+W_}k?6#T1iQ^( z2w1qs_UJU+9J~ro!ebr5#Ndc$ro4!R z9HWsmhlZy{g%xKSsC`QAl$@ksTWVftfR(cFIBQUNWMV`>n#pPmOEH)x7UMFMkQ5U$ z23vz@cv?<=sMBPLGV;Xq=+g1V1d7*%EP+wxu<=1I)1;zF=8DO5f;qJ+$jb4qW%<%H z^I~R*tj)x#v^hGQ*MnuO^5^f=}sUZeDy-^Us5(;OQ4?m#ZJ}W# zfzL|0m{Gs1}XJsy#VM6-?-9 zNT>d0h^`)uo1!C8Fr-EVdT@r6OEQsg;b|SY4Q2`zvO{dWaiNPAyU^jq{=m}G=+ctX zB48>fRggyZV+baR`BXeJg&Q)Xqhtk3Gm1+}fenz1ggn46(1q!wRJ=JlDlQW5Bge<38j49tVnAq=1x#wTm_kz{Sa@Pca2%K@AgF&z zB%5T6G+C33_R<`OBQMNi0@FuE1#*^=7-ln=Ei8nv)F7Tnj0FiSq9C22)1<}{OE{r% z(GiJO7FvRi#dwUBhh$o)D=!`0j>X4YIEC9*P$rtjrY_YA|E!5B~z_$I2Ug zIi7_zW6xd;_JU?$7j`jr{!AC=GwLd*losYVv(u9kVxz-@1B^TXJwq^gdIm;VjGox@ z10F6F14l*)elYk%p+A6!GQ3!&YZ zQF4LQ5&i$voBx=4lM#*{A7IP~46+#U8mO-9Bqp(7lQA0|-)2f>K}K^RPdA6sxJ*g| zYy?tqJTru$>rrUK2z-@uSRA>A6lywDs*xJPkN*tol| zoiXxOz#TMIbC9EJNb*#0J2iKQ1a1|=BxkpyG1z-RU-i|IEtPQ}P3D6tnB znt%&%(l25xm@n}+qJE++Mg4_a;3(qlO3pVicxFCF7+g!ajJ&0kU(C=&pz#EyoZbL? z8B99d-@uT$3SQ|2J{OvqSbJzdIBXK9)WZlnki?z;8_XYI-q*s%(Lx!|5%wX>dnD%k zrWU1pguaqy?R%nFm^J zLAk1#4tpN?1>T{%h@tb4u3HJX(9k;Y$u~6Q3~2c?^veqj`91mx;=W=Y1}^>vZ7XSj zx=I`o2R%1}E{4%;@(K8775Hcc&SU)%`G1M|yT2>OZ(``nkSoGuqn`rK#SEPV*oEjP znvJ=^_HSgKM!xryc6PO&T@G9?Gy?Yq$Qsz-1Kq@vwDVuU{2As$gwKbGr`0mvg0N3u z&X6R~G3oqi8Uq-bA*Yb$loF@e!aa}tOo>7pOp$aF0t3s9^Mx2mi_rMmiSjaXZTN5zO!7vxj zrwQ5E4*Mv0;!f4j+mW^rygUW=7Njde_*H=EfnUhPV!*M3W}vMcb1=T39fOgkUD)&( zj3_q;G~tTHi>r>`4JcpWCh*d6(&e*`Pd9K{ig*}Nj)Wob)W>Hrj$RE}3*&{a(?OK2 z8{nzeSK5Ff=ql@ku|mrAYV>CpJS1WWRZ|vkHM|uDsYQ{nFN>uH{d15BtM+I z_z0Y8kp>2Rda-~Z@zlpYL5n=i=|Y6)Ao6(o zs(+sq{Z`-r0~~~&s_CyvpoA-6>#{(%^}ak`nLsZEf4+163yeAC+&EXb;I z5&^yq!I_Tt(WdokI*i+eqHkc`G8pw;Eb?H?EGIw5CEpW~{w>JeR{-xLrGZ)C1`HB$ z{`WAyk?|spFn}TA(XS^+7@|yp&jm)}B+3x+ngPr>7$ac*4(3Cc^Dv?eVSXp^6FBN+ zeT^;3*NyBy*`T3la|+m^&tN>!c|`E69D7Zmh1N&N3us^ee)2=`j4-0FfG_FGibM93 zUbHdNdHG(9^*Y~*bUF_TeMayn_)_OtudVfAiI3KI0T23vFwhaC9szkJ^$4L$oIm4* z>sOY4xw>0VC+%F|c@%j61^x76v~dLL^EV}qMk4$qWMKyC90b#b@cWSNLs?g$<3&h5 zNkF=%kxx&Tk1;r3X@JRrNrEYWDTJ8{QxB5|Qv@U8gx?912_wRUsqk}`VjL+IWg|?$ zO;Wa=Zw8K)?4Z|_YHpWi3%_t@T@Wt9T&zo}CcBkfm`a#Z7#B>IW*5K~@xosS^M5DZ zBj7o+(ye?59BOc;3^q(UeFyeml_FtqNl~zj|0(*vFxTT9xZl8tbjS-6D$ETGfQ0B=;-&Jv)1l!~no&~osbugh6G8O&FAq?nT2;F9i;7#FXTXADQ z{NSIN(wvp?g<>3GS0dl)^RFXbkvvP2qxw}zw4C-Q3LUJMT{&Be<`UjH&t_B72bfh~;a^9`uGz^hpI!`9o^514ZhcQwr8FzYp2_YVj^_E!k|YRK?O>?!by zzkM2Y6aLc(4@ZBRt+Yy8m0M2m_yJ+qIq=38$~=sTi!t6Wp_`Rz$k94B2%ZX5O4(7R zjt@fKCxG8a(RMJP!$tv{zpk_!)+(7W?S|vZT9lO}@``+VT2T*}Sulde!Zd3BYS`7p z2|2I=W(N%Ll=f!G%qQR$aeXkeVG{8TYKOfOaR#}Oy$^Uvz=Bc!hPc7(2{%iFX!o`2w2Y$NUv>cZV`x``e=IQuZo`lw-=1 z%F85|Ou)+@JFo`zHch96xFP9o`XGIre!xmt6`RS{vaM`4+s6*Gh%3Vb#2?Z7kE5Nn0C-g>k3fb~V|8`k%%A6Z9(EJ0C0nL%5Eb_MMXdNSyP zpwDeaTbM1$Hpez-+i2Tq+he=i_JZwo+q!vqJZVz7_g@=qF)KVeMf9VK0XlhS!9@8j%o@8R3ekh^UWfifE4* zh}aPES!8|W=TXL}u&DH?!l<68=b~PVdMD~!v^hE=+8*tUE{m>-J`w#4&KTszOo&+$ z(-m`b%z>EaW6s9%*r?c)SXb;o?2BZH`()U~NwQ+KECOFf)=JoQ|fIV~b> zQCe%-k+hG}M$;|nz3FSyx28XuKAK_42+OF*sLyE1XwMkP*pRU!G96-W#i|MUp&5Z{NVVF<9CkVGyd-J4~~C){OR#$vm&zW zSu?X1Wi8Fxn6)!&U)JHQ<5}-yCuGmbUYy;U-Iu*S`$YCLPU^Hd^X-pl(We@gz${Nem< z`FrvY<)6qumH$TmnS%U+s)G3is|yYl94mOT;Q4~r3VC5>p{uZ>u)eUVa7*E?!o7uu zifl!Tik24bFFI88T+u5oi))T+gKLNDX4k95xy4J0yNZX4?=F6@_|4*Xi_ereOBza= zN?J;~N^UDTSn^59XlZ`w;?k|9$4lQXODJ1Zwx{fka%cH)`G)f6C&Wy!PjF6fO&Ff= z=ETg2y%UEg?w|O=q?k!NCp|NnPA;3=Gx_GpA5Dpyk}_q{lxwG)nrffgGPw)VEVkh++< z`nuJ12kKs~J2%ZWt#8_qX&+9nn!auNuIX>g$egiwM(2zJGY-!TnYni6>oeb;Wtmkn zYs0Kh>a*&*>i5;ZQ2)v7`Loy0-Z%T@Ido3NoGo)6pYz#VWv+GZ^tp|5Tjuu8eRA&e zb6=bL&fE{?e%@egXlPi{(A6;9u&LqNhT9sRY(AdGqHjopIRY7nCjNS}?F+?Sf4U4lX#d;P`@*3(hR~tZ`H0j>g9u z-(6^1IA!66g(nt%xF~ng;G*X)v0M^%$PzuX$vn%-L2I;C}H>!Q}y*1p#Dt=n2}Y~A1bKP*zx1#H>hNk-uWnis>sFSG26?UGZ#hLT`TWq~7VhjlC_s zy}fIDxAuOxa`DQ(mFrh-TY2NkXI4JH@|Bh6`m*{8`RGjV)s|JeR_$H&z^W6go>}$Es<&3XKR9V{*WjVSV}nl)zC8Hm;F-bChWJqH(33;2 z481k<{?O;cb;HBMr$)*~dPiPcUAKC8^@nR3*X&vI=$g;hE?&EP?K|t{uNz+X;rg2O zo7Nv*f9CR;mv6lMg$?N&rf)cQ1-+u?iry<8+-TicwejXFjaOz~dH0o{Y--$eXwyfV zYc?<1+`4&i^OnswZoYf-vCYqHer5AJn?Kq@w}fp;*;2TrYRmjByS8|?d~ntDt2SKq z+}60QleX^NdS>gnZzX+e$+u2?>-}x6Z8h84w+(OGy6xs|2e%#H_UyJ-x4paV>~_9A zVteX#*Y=w2joaI|4{zVP{pRflw;$jB?Do%gSa#&^ShS;S$IUwq?s)y`q^s|~`q`cK zof~%U*m-d0iJhl*zPt16HT)XuH7(b4U9M> z>1#i^j$apco&CCs>sqfHyl%^NJFh!@-E-HyyNm9!@5Vb^zFzxw)Z*B`t7mFv&$rn^J@{_1z{*nNEW>$_jSA?b!2Z}{-Wo*SRL zDf6Z+H|@OX#+&xuboWgU+;r@w&u&(3UV8IwH@|mF)-8p%Ot|H?Jz;wW_pINuWzTJU z-q`cbo^!YITdlV)zIEW%y|+Gl>zlWJbnEB0_1yO0ZO`8J#%fp=wCf%EUZ|=P%_txFJ=-$?Q`|iE*-V^t}e((E- z5)REjwBgW>L&pxidFX>fpWhdAU&(zv_iedv=Y7ZTJ9*!$hn2%S4v*fSb^o&uZ1|4( zI~CvA^qmt&j7Kt$v>)+&clUQsefQjh&IgxxjGhUeD$h*Me9vOfYo2$H+K=`g9X`6@ z=+>jx9^HTRwWA*$a~_+1Z1=Hej=g&9gNMQ%n)%Re4~-rVIi7NS&heh(2ai8>{M^GS z54#?o^KjS0Cmud`!gj)bqVU9$6KhXwIkrS_Yz`q6<5hi{E;8WccIh!>%gZ|y3xw&5&aSroxE!?Pt zC_6N_3FY0Uxy{gjU(nnEc(L;n%^j#jkp#_c^>YVdPOnf4w_&cXS76Ms8vx%$+cY;( z!Z0tXhEvQtmuYUMlwjRa4d;Go448x3poJSTw;;|#2$&|Ni=NQjW~C8lf7I{*r5@i| zsv9rm$#dNzz17bhqztq7wKO)x#h2D}FYg}iUfjt}*cMaR`w-@FY z6z1T^<+L|;b=YV3ukY^db=&LuNBWSqyT8xw?rXO*i`oq4)hO7baJcRgMOY%Mg*P1L-=HP8r^fGDV&RO0H4~QwKPMT8PLogfGJmU_2sW4`N0x7nq2@i8$-f zi278)rRQ28OBn*5V{MBOLsEf!yh;SA9h3N#Hrzx$dmmN~Vu3*grr3(5CAV&vE7Bv)D z^x@AAT2A{$Fuy4*!3)DEYXa`u%Tw0Kzg*dNKCFemA2`$lqc#mYmBUnS5Eu%Ysa!J` z&_oSXe(6KF{eql=$5zXF`C6_(w!fgVfF<~CSf&_@-w?_dJUoEdA>>U4(eQ@Sg$Knd1ggT+gDUDnB7i`7!AKT|ED30Q3j(B9Rfd0;VfpD(A7L zV8Z>#8Ok5=NU{a9svRVdSd~-C^CU?5DY21YWjy5kXV|eEO2U+E5{@+%Cy7*EAW_QC zloyrHm6u2~HvYw8_Aw4K;qgiyZYxYANn{-M5pJ4q%f!~xza#LP&l@^jSV7bK0O zD>sk~<$DU|_>@0mTq!1*WIV}IN=UZyuJQ%$Jy%NVDE(w6nFZc^pVZ?DnCZ#@PA1I()rZJjWff__{+t=gOy%!n zK3PB-vHrCXBW*qIVH_rxpsm;7_M8#i0lS!7N|q?IakbD=We!YtbjxVeaX2WrMOFXQ6uWrr}EE3gswz><5q#3rQd8Cj-hNvP${A zatevE%s~axET^cp7`9cj3k0-Pi|xBe@B4R=1En*cE*n zxgEQs@4z1EJIQ`>7de3a(syG=^+9qkIYjQm4(j{K1K3G@gnXAgNWO<%)kn!O?5;je z9>$C8k6@?uW8`sM+kcWgL7pT(AWvcU^)uv$*oFNg@*MdwIYoYgSK)q2ULZdsFOrwY z%jDnGR2pUPFXf%yc?o{^ESQY%AK z4fA>#G?R{}Su~qEX%5Y$ShJ!9nC&Z~E?P`WXelkD<#Ym_NGH+Bm;;(mkEdpfl+#T2E)wIdm>0){*T|zITOX)J&Lfy2L zw$XOlK|ASk+C{r*4_!ff=}Ov1`{@8(MF;5+9i}66HC;p3(sgt_y_{~KSI~|0O1g<| zrd#M$bSwQ9-A1?59rS9tlU_rwrPtA2^m@9R-av1pH{m6bTj(BoE4_{0PWRF~=stQU z-B0hL2k5sklX(w4NbjYG=za7sy`MfnzeA7E?_z%Qd(?wB2#(Q*=yCcmJwYF#kJ865 z>-l|pl0HG7q(7if(WmJ%^oR6W`Xl-r{V_d7e}Wfqeo9}UKf}%YFVUCj&*>}l7xY#7 zOZpo96@8uln!Z7QL*JyorEk&yqHojR(Rb*7(|76b>3j4K^fdh=eV_h`o}quHAJD(h z59wd&NAzQQmi~=?LO-RS(ZAEr@s`dx`XwEu=fy+OxWuV z#}s}?UBj+r*Rfsfddy7Uz;0wWv76Z~Y!ADY-NtTbd)XbBufCJ*XLqp!?Az>a zb`Lwq?q!GAeVE0*pFP07!;Y};vIp7sn1>x@$Jj%d+kTjxV2`jz*<_zqxdzt;5y~2LMUS+>zud!dT*V(Vx z8|*jiP4-*%7W*&uHv1jEfFf|KZ4^%Q$KcF%9KK@`*gNdM*}Lrb>^=4ecAEW>z0dx{ z&agkT57=MWhwQKHBla;n%l^hbVV|^_$I8Q+^gKqH}ft0D!!F}i*MuG`3`}xAVRH4!)1y$@lZS_yPWHemB2|ALRG)L;OB|nBUJI;NRg#_;>k( z{CnKPkMd*uA%2`c%unz~_@n$WtiODppX5*QC;1QfQ~YWE4F4g2mj4K=GC$_0_)qxr z{HOc{{xkj}e~G`$e~z`9U+`D?FZpZySNwJUYyJlRjq(_Olm8ZLIRAx}FR|(yfN$q( zl%2{pd#Xt;H zJh)*n7>ov!!E6XHSPX#%t0Bl>GXxt#455ZFoJ)%^L}HC8+7M%iHN+X>4GD%sLy}>f z!EQ)4q!=8AR708}-H>6(G>kW78L|ydLyjTWkY~s@6c`E(MFy9l*id39HIy034HJ0Z zNN=yPvURXyb%&{PrMqpgzt2?Jzr4S%V}+@**4;KT+!0va);-uZva++cW38pSy?@x< zhEK#{V-3C<`}<%G_Pd9TwGxK0Rt8#Xy~#|q8q``9YTz^BPl#&9>@d<~rGOKhFx2h~_F>tL*xcv{Nh<{-*V$zS!&SSu93dw?!l3jz3!1=(_9sYz_~-c?x8LfzBGz*a3& z>udrF!rfw`~1?f4m5SY$`$=%xT0UhGO*u|EeF*y2UR$OesGLKYH>q; zxDWZo^I^f3!!o0Jcr0618AntEM#dm8qLFDtW6KfAmLn=#u2G9y<0~#;jh8LgsBF2; z7inClvgLZ2&9dIxVzxFJqO+1srJC2maq&HTDrh8fEvTm5(Pz~fzn;sLYLG=sK z0Q-e#u>C?b@V*f4&K+tCfP{k_l`cs(xNL4;RpGU|byCPwvg&YIv<@PjDpBDyy9Hfk zLP=V<3~mA5qV*p*d8_zo!%u*>ash3!F%cFB2`y!%1*@_Mse*i+SLX57TkFXPv}m0fPTq+hBic;0 zdSMwlg~!k-++31mxtGFzy&ti`{sI90AfF5nc|`?HLKeWb`H2G&CyEHvy1H-&bbH%V z6&4~-_t;u?`_V}OCH3Sgz%9mq}+guuM|IhBFx(l(9gVLNk(|V`3on+7$Kiz z0-ZN`zwmmyPk<`B5N7KiOS67Ing#UhWC|H0d_9D}Ik;yAZ1J>)r4)TovNFmiDS3$mJ7ie~&W*4b;zGj!}>0DZTu@5KLHS8C}h^>kXfRa*Kg4Stmdze$LoJYX0H^EnktAzDUEnNXu8G@k_DJ-+H_TuSjdxVl98M9v(AND$@OWI;~zs8sE9J@?2VZE)8Foj<1&9rQzw)@N{YT zxHSA+8eT3PFCD&aYk0UcJY5=o#d>-jf1M6`c^ck$k4*NbVy)a_t-N9lj!VO{Si`?W z!@pFwHMr$E{WUn{TKVM~oN}$aN{t?sYWiZmUsr1BD)n?){i?L|RT}&%4Stmdze>$l ztjmRJEnl^UZ?#6B8Vyd32B$`YQ=`GD(aNvU%CFJj)N1K#wR+ZS`D(R%wOYPfEnlsc zuTCqkPRn1X<*(E7*Qxo73-t1|cBv_r!=0-rAEI4z7WkZnK4+2FS?qI``=xbx6BHGD zoy9)5#eQi^ya|d*eaU;&)`5@H!3a;}NT<3+0PK^o~DtiaI+`Ot|*ln2R z#@wEvrlWV*ZK@r>c98x)z8Dd#7LnL;GwkLwFqvqWB&Tb-2H;f5@tpBt2%7Bpm^w zAT?ftt9mq8(qoysvSYcHNF>+Q(_k%;?iWKxL7l2%z?PyAwj4rWOA%L4SFQQ0b-x^v z5U!WCg@e0pl^h(?KbtR^k;)z{gxp?{Lbz^cdtP@*)ZB+ zL~Dluv_TsTyoP>3!Th-=?T_6dh&=1{AvyjE9t>^px$5>S!Xqg zR!`|MqlVIV-i)bL}P3C)oSom{S)CDJav2qJUQ;e zmg6g!qQoo-gN|tu`~cf5Swc7@SHNM>2qqE<-hhn>ADLEihzJ)=2iq+91P)9qh~5g9 zVdaSU?UTQ2#Y6|1MfO|~JRky$U?EsRJ}!dKEPWytyadalHMa->M+pl|C4ED}GRww> z!|LTOc!K?T3jPRxzifDs$e+#N54(V~5EOkukT2YJJul72cc9Ss!^~m^5LxX!Y$QD6>z1mv|3+jwZ6L5`bzT-QOM?3nm!7m2z`hW z+>Fx9>pKSfbNh!nO<1Cm_V60%4;b#kRJ#ZFcGhUghPdh1QOtIXMhS%AS59Q zhlB}-MT07EQsGLMge=lY*dm<aLF>nPmpvWC|5YF(l@MnY^q0(3j{Wu znD!D|T!mOHEKolqVM{RwTZ%c@Qk=n-;tjSGSFokHf?XK^SQ4);tE`dg9tspR(%e>A z1r{8LHAmW|7tH8(BFh%a9IH zhHz+Q2&YJnwhbfOHIPAx+^)iPv4Nq6Cr^zH8J>=^9s9~1=jx>1tu4w59%eOA%V zJ`al2J%K1ycL&LWy*^pC?z4*Gy&h4^p^*WJfrRbz0JiQCuywZz+v}6Cb)ST-dxAUG zwn4zR_pj;0&fuYr&{ZQHLxNqrAvO@9RcrxXE_+jupLe)3*xv`PlT4OhCdZ`0{Ic56 z0rw!*#5y{M^#a3Wh}@X12iaP|qGIp$utXtPdSwdf4-x(q9aw$S5`=02z9cqpF)9RK z8Pe|;Ex0DwFIxEhqD6!IM+?7Nr-EWjXZP}v!H#w;16zjrJBPd0Vb!iLuw$hNk>vz- zU^}_)R-;vXe92XOe2|1#3i9)Ur2am{hAkh#B5}t`vHYkJAlw_|BY{jdgta21^-m^) ze96?xsFQt#`PyV(er3KC9BaDUhr5Ob&=?l^n=538mP1aHAcy??hpjbnzEnf%YU}EF z?Z{xiS?m@Nb+WdN45H=R)(MZLy&ucms+<<7WP%}VBkvV!TS#D9r;2Km%s$*1=*m3a~C%?i;haw3tM5uk#6S>eM{jx2c??f^BrNaF(lpIL%{gU#()X=}wMiH_lZ zbT(*{gF)@xtGmV4e!2Ew!s5wF_i&fFW97i`x}lC?joqt*I#!Lidv$&e={tm( zi1_^cDpkhjmq}HxFke;q&^;=x1HB_ddbS|+_wK&#;dPQnEE1$D1y^?WjSQ)xPh?O7 z)p)_67ByZt17y79VyO9p{cF`!sGQA>RSRvU30{k+Si2lC1H5Shv8p6?_lqV8(cIoh zs~0`Q!ZX}~6##7e2LZ*pxNrmshc|<*w|_a#QuOv=#R-uCDwZPi%8}mT?txy(8&*Vn zvxu%Y-0kjd@9yjrc>>W4I!6V=jYXZ2AuO=VQe{;|slwp}9*A1EkF?1m198+sU?6cD z8o?*3kZi(d^QX>mXOJIp1jnhg5d*zwSMZlbrwsb%7{Y)Xy>yXojV$0+NtNMFtB)us z$d4ufuVRgSUW&l&CCG56kW5~B01KTQBF2vzC`=Lqh52Y9l53=ZQ>O%y_y{rF88U_r zAWX17B}5D8w18VUWTsA+-z#HsO8~8Q07R3em z=p%eS3c(jLhDHdmdZ{F1{po}NwTB3xHa}X)Y&x}s$4f7f(2rv9n#2K`H6sJE^B0tt zTBKi!SS_e5Kn95+R0}CrLxgD7LNtA=+@;2h47B%IHNb1Sx`#W0eNd&}<^}2J74W22 z0z2L)a0t!qC>+;a11RqQWX0zAif;HH4Nut7DzaRHQCj6&6+31`c&d{Zn*1 zOFM*ys<~U*-OI61D!ZoY#Db|zqo)@gQB5vfYHFbBODuRRHU%VLJCV{ zt%7uj(ifs4?b{t=)&ta%#pj*A+-uRvjL&R8BCDU$sEqg)4D>=5`!jUPV~W5>cRFI(k5;w@!LUkhf7pNQ8gw^dvU5in`Y-YNvaGye%d| zL?}n)VA< zLqv=g*M>7rGjaFPQQXpklFny~9P|m?q!)kwtm;DwUz)$rU_D%>`peg(`(P|IX7#1> zC{DXaS=dzDY`4#PRI$yQ9MzT=6I;n-fs6i)!^aji;razOLc8q?fgrdk{!wMJDcpDhK8nO zPepUQ-BTu9WzEg@qiP~|yC)Mtn$PaZ7xDQbq!b|A6SZTDCjnpzNI7jYKhDiN-d zmiU(D=H_@0$!>0Tc$9{wj^^eZ4|CdU?H-=y2117Fh9-}}QROi@s(^m8hqUB)xYGf= z?CnPltyOjrqZTfHJ%*OrHV?~6MtHRy$Ls<7Xucs0)tcAT(h%>S-`wPAMr_4`CPc-H zN@*qMcnnUDsXF@@4zNkm7~yqPIY44ZmD@vGJ3XWg<$DZSIUbYKE|A3j;zzmCiX=d@ zqNQ0RX{nJ&nw`f?fl764RaUZ>*a6P5#J8wWNH$QYMvYtSwL2Yd(GZeSO1z+^#~u$P zbu2wB&Ec+5iwOLh?4DHQLS}E({4-ev&p4`%1zK2bQ*yi`xj8F2#}ni{N@=a9-CdL8 zu{luzyWL~0o+;`Dhoh?56C`}|;R}K<#}f=NA(A9^P@oNHdu-J$_MI(uj}1i2@q{>M zH8vgP?KRD*o}doL+8j@)bJo13Sqs#__+*5K%kVJgQ6;!~Vbjsz;A#(XS9yZ71(Skx ztBzX5PY`}QBnmCT(i)nM3eE+ws&=AzMX_1Q4rJ5a@oK!t0^S#~&8W#V;6JSejX0*M zzNP`ug~J^nakWR8a*Plnxgp$%19G&svB?wcsIu330>P9P2l%bZ-h$#E4hbQ66QrtY zXUowrW4327J3a+uia_1MvvWL=&Z9)wQJ}N1qn$^Yuw$G@xv*oMM-9S`a~?GcJKlNJ zBWn~r7qfE z9PToQkX8RM1^6Y$ljCgz66JAbc}Qfwq;jr5RmMi;Iqk&~&wQjIwO{S7kOCJ)ON1*? z$K@DNGsRJMG>=50CIzTB5WQ%Y7I3Y*EXPym%#EIu<0<-QNx@-lNbW*YC{bzlT>CW9 zGeN=`J9kcVOoJq7g3N}@Lw7AABr*c!7ejMAKPZbCnQqW{66ZhY}ri=vrvSvHb*{nq;ezoL0BA zJ3Oq~-3}Q;tKIQ%w=|<;UYN%Xlpu8-b?&lw2TG_zy`N{&9lnNTyQMw^rqk&@*NK+<*J!bS?yS>gaO%x_tt6Y*y zR6wJs(%6)1pM-%=V5|iKn2+SfH27v9$~&~G4fR##YH?^S0~~Wa6EqB}^`>bNWABAk z)SGgm(_zmQRI7v3oz$FrG@C@A<4y7gqcwfOlfA(*wVriMnki0Cakd^a2Iy3$rzCqP zct|kIPISkw6pUuc^<<;`3P~=(fI4*rb2-o}a?wdt94jF#AfUaRs@M0Qv*NUiF~+~c zeS&U6u1s>2#V7lb zO?Vw-Er|&C6e7(ur^f|rx}aJu=xVRSn5ENchEuSkXFA9_(|Jr$D&d#~2N8~X=P~mC z^>pqm4MSlVPDxLDDgj*-2PY{)YXou8S}!4XRC`ft>$RG;-nBY8x(HqLx11n|IFyY3 zD}CS360$t+n4ALT4RtN{7&*LpY;DICsrre47IXQ$*bsS^;(Bc|yI4 z&~?pHY+o>leJMoyN{H&UYYMS?!yxLd5Y;;&s`sv0j@1VSQF}sEABCtsxgQy9Q!|{5 z{8^(r#?Drrxzx;A7_xtA7(f#5cq#vn)xFSC{%24w=J4HQp22hK+Sl{xX*H2ldRVnm zo2i1z*;Cm36xE177>~vx$J3FDaA5}Bs6Vj0_>j)FN?|t9uVS|BH$uBz3TK$U^$UJC lnzADU!xW^&HnYp=b^ca_aJ zW6X|k24)*JqOfGrl<|>_@dR8Q-#B~1yqY&Nr{MSH_&{9aH49TBKD55Tm~k84ziP_7 zsk86QdE^TG{tJGeHg&>+c`TX*GiJI9zuTtHS~}&&Q|CUz@3R-M@~p zcW=e}U8doJHOC|)IP!@T*E=k>lLt{3B+J|A)oo^NjsJB8nO;P>=v@cjMp{ocawN9p-YlGo#tM$B)! zu@qE@SAWXy;L|LKNuefsq5d=LFX(6A%z-J)!&1&lrfTIXcEEfK$B5YGz|V-+5+nLE z7Rh9K#pCdWo2nP_Q^tFe_=Nu(-joeSlQ}3jBs9!o4Y%1N9Ffkb=$P2J_=LoyxPfG zd}MvYsL@wkdDWP)56B{Q@o-%dX^cgc}&7L!N-qrILEL?QW;w4L$H7#GUa@FcJ zYp=a--Ss!D-*DqiH*eg;ZoQ3WcE?sR#GQAuUAy<}y_fB0?EVKHeCXiAk39O=pB_K- z#FI}w&7OJox#$0U&rW~- z#h1)L69)x7M18iBt>&xv?NYq-vh<4dnVc!Fly69JrX;1LrevlRrF2iJOsP(J$d&3U zNR3E!rpBhW{6qRt`qA*~pU+C?z&|X7t!BG$hZyNN?r=)GgDoW{B}Lq!TL*XGKXP#g ze(v14uh~S#&PARZ&6r}x*D&wz-XCd*jD4~0i#xtp_hs)dmVA-<`HU}WKcD^i%+n8? zelB{A?TCGK$jinf+H&@!PxD{ZFY)?}WRPt1>Z1R?W_#InY#n=^-NC+L*RxIRCbpB^ z&+cX4vK!f7*tJ-Jzp}rvjchAh&;HI%vwyI=*#qo5_D}Xb+rtjBSJ=z!Va%eD-O47h z*Vtrsg1yS#Vz09|*qiJJHif;*-e&KxN7z*MFLoRIfW61wXVch^>?gK?&0y2nOg5X% zVsqFoHkVz^=CS!~0b9ftvTN94_A^_;ma(O*iLGGE+0$${TScqJ*06uGU)VG3KkQfb z8~dI8!OpO=td)70!p?DQG%j(O8@Q31xS0p>U>?Flc^J2FD-Y*3Zs!r)!6UhoNAYML z!((|IkLL+IktgwFp2A%`m8bD^p20rknLLZTc{b1Cxjc{O^8#MTi+C|F;ibHcm-8;X zf_LTJcz51|_vF2JCGX8Wybtfot9Ui<#~x*m@&0@OAIJys8a|j0;Y0ald>F6gb$mD< z!7t|{c|C97qxfik1;3JC#mDfmd>kLoC-8~9kx$~2`4m2tPvg_svwQ}h$!GD|d=8(> z=dn}lOZEx-lzqm&U>~v1`4YaAFJpgVkMkz>BzuY-gM>ZAo?tC(EqjsO0Eu(LPzgR` z>=@Q*1=|AZy^pn@jNc!^=XPQRW`iG=VudDv1EO$`n{n@Fu$H^ngSbNjJIM~PyV%$4 z9<0wc+~Fmx;~Q)=+vf?lTEap@f`iN^qd}H9%Zo1TnV&~r_K0ruEgIi#(Oz7zMgJnc zeShCPJW66;3d z%yWG8nkr&_3l9qoG8^M!qnwzq#H`6li3#y> zu`$t6&PYdu-PV4E^$~UUGgqCzEytDv5;)Q-)UQ(6<-pj@Y2qu*;gTILhik>$cVj+o z_-E`-^H$B}=DDlYUt@m8E9H;58+lNJ@;iTSIUn7`pHr&ot4TSqTzw^V<)cBnsprb9g59SaR*vXlbLMEz8RJ=83g z(HY4L^6B%O)&MJ^&Er^ZVRDk~d)xO|(~jm`Tx2Xy%_@&7wP$8!mX}p@slc+AL_0IH z?9oxt_#bpMo6Jsom-4c#%q-b%!jpb}^ph_icxLFRRrNPE-ul>)wPA75VJmx&ST^#; zhl(;98Xs?J8u7q%$+570(yb3p>1SEKylVG|5bsYxHcQapzV+*#SUfzriN{ynJ-poA z3-aznuiLK0MrZTRePTLj{2o+suryZ6s@ObFAI5q*^U9p*3C^%cCssU9GO+Y8&eOvr zm?gyLDtm)Qo^W^9@S>FPpqOx5(Xk@8Er|9s&AJf(R5EC!$Z4%G8=j!rJH zQ%-JVZlq4Y6n3U}OlK$pe<&-oEe`9AE9(zcz*p1d~ zW6`mYV2DnlPXQ4{+h5pE*gKNl=IB!4#7ynB=qPE_iG_FWpa1*~y@rga+_iqwJJ9Cc zp1?{EPbyDOO(DVK2;wX> ziMAC_j35aL6)8)hoVHtX60@eKfI-9u^>>4eIt>F@#m6+zDq_1iavg=mMLgPA4sOWI za+tvYa#jVHqQYo$IwPIfcaXA~X{l!EQ8lW06FHB^Lv%68nvIz${0L%w{nDUgS`^W$~+lCurN3?S-=xuAy^w`>{=*d(E5Be zoJ-orL1apUIF@#gAO9Oyj?~1Ti2UsXKzhM5Y7+)}}_7sy{D9n!_Gck>7P^m$T6`4_UC_z&FOY`C>%Tho~X&A8DNJdJc-A{*`L4hD2XbHPfqTHp|aKUhLM zr4O+KyqVg%nbkoJ6yFftIXGZ%L>w?5y%GKB){| zcR8n2@0m66g_@o-Zv5c2M_yd8phxANesASSbq9CdKW9?Q@r_j#OCBC`^}Ih{J9*me zmCv;t#3=4O_lbNQV=iP6Ww5gu#7B%|w1in;nF?XULxN4lHWI}rQgX3bTo5X})L!aL zvvY`*N4;~U+YTQ;?p@43<9oNrx3(_dt&EYXrQ5Lvd&L@@fYm(L(;qzKjww18BL#C? zXfQWeL3->)un&YcoJc&}5=LubCgzE>0Fnx~z`ewEdLLp`@Q~QywqqI}_3kNtci4_P zNO1eODH_HiSwc2fs#(ZCgKjSE-L`7;h|86(72TwNdSBo{cO1Fx_H%PgkM^i<*vxCq z(%TOy%M4SmJ9lbX69#uV0CpXplf{0PKF5y3m4h8*ai^8MxR{=e$Bb@ zndll-Lj5HUdzc40w^%}=@RxsfH=2{~3nsugmzASEHv7G_{%){$kW?z+x) z9@pFgpV08_G1WNE(B+D->4>a>rg9eFFtNCQQ`7OMufBRxuLXAuowf1i&p%mr{VWe( z^j3BC!Z}q{S9gz_lUFi)_zkP;hW9RCD`yVqGj{ggY12oKx^>NhenW>2U%2(DMT_Rn zeQMXrAvbQ?KDMH3dD*DxqYF;f_Z~QF&1J)?s%DPs(`6`mq?e!jxGhJy+)|=DMCB+c zgj|I-9F-AgP0ltI9Roj^bdCZ~wG~4FE`s1FpNUHpAvNR@?h|%IMHilGx9MJjoUd|J z)7#$=M=3w7-uBdF!BNWRznmqWs+Ioy(DLOU{kU<{OD`!8Da(nYhMjJh-CedSk1NgC zG<#>xqnIOHO&|t3^p?ny#gcwz6LADFTh0lDkgpma$)Kh2(AqhtP zk)-}L`H@5NBhZ`?0~j!%g&%8yQIqj(bjyC_q~QjP#c!*bSehqNLuIU(jBH_;97q7u zNOxpmhG9kVpP{NXL;l1&U)t2jzvn;fR}M>LB}r@=A8M$QM+nLldoqY}W}+M%8=@RW zjKRYNBErdnWV9ny*I6~1I5y)n`4hT7AKKi^=fi;dZ%66i0Nu*DxQ(>QJKs>LL@17Z ze1OE^rb$4pnEWetvkWU>26=8_ZacYcJRuxYS0P{@oRg@*IgsWd!Oo&%PApJjf^Xf! zt*Rx0d9)Sh>aT%jflKg0W(Da{$a0@yAU3g+F9G0l@90OBAMX3&vu9pkxaCM)V_F)4 zKwbW`y5IWEFV!5V=v)8XbJvvg>f2}e9GZvs+$ZKT%)`S5vui!rk~OA;YFlchP3mF` zDX>AVV-HHHJe9d6mJq@F_VFadL`Se7H$;54TbP~$!;`w(O(k{+dc2*N?M{k`jLlmCz2bDoSNY zEq&vrrNEq2-F-)eP!;r^;oD~(Q2z1MQ-EFL_|-h_x#zZS{qTU(9X4{v?4{4|+5JYW zJH(O|zhR|m=ylVk-E+^sm1DpDde`D_ zefZ#ltiCIETsH6PKVEwc!b$R8my}$+>6RzI-L~zIGs;VUx#iY@(jzaqZn@>HEks`j zKoZg|W>_M9Jnj%q7ISb=I0S*p%(NG=NyrQj05yGnSV4i`+<;XG(>zTkAWL>gC2vdF zUv2k3y!`|I>Gy;#^6knLsf)A>tjYF4r@e*eMnd1X*(}eHkd!1m*_{>6d2$la=O|}5 zJSB|5mBJ%wL(vErOA9u|k;cw)B}GMsNM?)GgbwH}I4BNNSS;g~FjC__v*|qBHN)f*Tu8Qu(V0%R2YD;5k_zL%Z#%3U@;&R=?Hd#-nbMUXu*#J*j;L|l(AM9t%fCu}Y+JT$zf9etW z`_^xzr@VvciMG4E<1yPY;FcAFTdpB#7nvwq6NBLo65bXTiX8$jkK$4^8L%uS8Vf|^ z2g}gru*JduF~W5REBMw0x-~WiI;oxP)-)*)%eH_Uw;O1&bk4#{!B_UQa^ni+2c@<3 z*H>QUD}LoM%8?JeA8*^rqZd5!8~lnTLuCVB_UfxuFHZArQ{LXSD}yiHP81~Ga*6dD z;^|5XCY*v&MaN(Y0A?rILNGs*F@BYTrqB>s!U__F)wR!WPnLnQMT2e{598)O;^?LYcvZdSp_3%3Xxzoh zDS06N+5&_J`&LeZoy$YaQV>WFh5}R^97IG9GP@92!&rgi;l94H0-%E7CmbEs`vDTH zxj7g%Je}ePw>(&!eNsu@^S3944y)d6j6Cyig(L=Xdym>fc+qEHS| zO2n3g8ATwPW-Q^^+H7FWP;5k-5kxX~ar==LY3jS)hoonfU%k^oD7SRVTiJR>`oSBa zt&(9Vo@r#=Jeew=3(hj0Pd3;zZRhE8H3WEt#rOa;e19kY5^HZV;;vz=#?vh{2r~(m zL8dUojj-<8Y!H)?C8IeM91Y8l8^c0le5O?3gT(5KNx3j1EIfjf_I>!amG9w(W6G@8 zlqJR!XKyepJ=4|j_}NDdm!BP^jzREWFzf3n7U;bkOwZRJZ$?xt2+uaiG29p&)cLbD zf^uRyJopXi?4dWkCOmP2VKJV#`0NHqQrf?tVgLG(sKg*!VgM2qXNZiuAQDAp1-Ss4 zfG3YK5Q&l#dG8mF9(_T1O8LuE-yS{6JzuX}xpKwlZ#8XSwaWPYyYDHxlsiwJJopj6 zmN&lp?#{h?l~0t<_U*fFFQTvMd-r0D2f$yMVpW`M6vzDcd{Ry|2^sCL~vXlHLmFhYmRe#$!x%V*d4a)04j_;j4 z=6&UD;Qeq25E%cYM&ULO1E8F+lgGf|4_G@4NdUF5LAW1#Si?#q+kWi+Q}Y33Znokn+9s!_Zh z%}rC+DSQ4gwTtrc^UohSg2;B?7hbr%>!8fRzj|N!9MoU=`Il?fOkK6+z=G|eAAf`x z_W1YSd+%Lkhw{p?Ar%QZbBw$8-K%`2oZh!@&mNx2ExTGYox2^YV8IM0din)fNxG9n zhnx@RR$2)d-iTQ0<`=13T#OE<=rSxHLl{1fVDlv`hq`N0$Xqo;7+^tsmZ@u>G=ra* z+oy^DpeV|f%5~p;&^W2C_F3gU;|b-qLks&=cn3@Ky_@9ln!!6)m3P68S^}it6Rb=c z)&)Azk!Y0@Q;UwJN>&I)GL3x}jWajQ7@P#$H4G?ik`3>v8yd)>KZJPRx>S@y1&PpL zRyqVF(3SMG6oLSJu|rqt5@aK!@T$@M?tDdAAtn9o52f`V$}_!s-}C0*$Bn!FwsWkt z?CqQXwY+;lN#9jSVYsRH3yr56$}7sMhD@BWw`IWsl6jHX^lxGXG!K~6P&h;sXpHzL zxk%tDY(xwhmsF_-Ev#$O0Q-hOHi6m)DPe|ZlrUrN&Yfr8$36B#8l>O}v5G?FX2D}DVKG>8ERE25Sa)c2pC*AYhezTA%N(WTN@&0(gb^*O%EtRo z#>EbtbpOk>bx&tyP2cpra&qHFyJ;FI(YKUH}hhmKsqGB zV2sbivOH1PHIfMzHLik`cCO*Jv&#(EL+~y-dlSti0dwh&XNR&1k1GU*A2M;gqasZp{ZHv;w=nF@lL@Lku{M~^~X>mzX4Rr1=UV(<4q@_qcJm%Oh^ z)8%pA5z@id{a!+8CxdI3`YWhq?3WP{9L7!C&l7Ackx_=6+?7Y+`>WggM|$NRuM+D3bb zC?He2Xb%>nR9b{!&s`Ml!AIf{@Yv@cl^Bp1ny?q~a5%lRbA6-2eFYYC-l#aXEp&M~ z-={1(ecF`!`@v>YZnM}IQmwoLG&ZsnPXsJcpzW}{uwT`b9+i1=MMO<-OB(+|`TIWp z9Di=VVTJcyc}eSfjFg?5Wq_ao171=*%?TM|SkSCS(`JBWdn1QKW{4_7>Ika(NrO(mcnw_G7mC2vlAr&`y@(sqmHM@v@~ytC)<8;6dL8a2%tV;wZ8 zIxn}ZPtQTWKe6)0y(2EamS27C^W*o{)zv<#MBZYWWe7$2wY?!Hnc&z^1U*)^8TG1*l-~=wY#3hDOJ zQg=QgaJe}Iq=7?-i2e}?xQw_&43$i3*>O`}toecX^Wr@sq!4qbpE#ykFL=?6fjm#xE zAZ2igBRxo%Q4~lngy!-2!+MUCAatip0VmlksgaNryBxQ%Qu(@T*D))1R$!0aH*Na$ z*Z(|rLQDK0Rz4gdU<;tbqqRB7}=g+NGU`Pn_+u$_S4j z$&g})XG*>fBAMG;1`U|n#3PT#Ck)whmnqjfU~<`D<;m7xq}Q)2DEz@Ir1lyNt3Py& z8i~o)A~Cd|2(mC4X-HW5&f_rpimLzy1wz&!4r8c1`=U{9fv0h9GIB}C%CjKfNMr=a zv`2ttV0A3OF;JsmH6kMzkFxJ7Harp1&CNh3yUN)Xz0JVnP76U|YH;qcKA_(_hBv4&Dq}Tt?K5L-U18d& zias-WS_{8*_4?zttpt^bgId-h{MJ>t7Y@ozB)2V^C(mNf3y znO`uz#%>p3eKBHv<@Moq&iWWu2b>RGV<3u#LkEhiok)My4)I`Aup#2V%h~~2N#Lc_ z?en$x_m`HY9c$NquKbLQ_i#h~wynw^%73MPe+J zxi-~*!^|}AJ@{-wNh1tWKQTdhO)@`%Ig8YkUj|J&$_% z-HRXCy7kSCJ9);!g|FO``Na5LbIQ7p_>32(>?^)uVnOM+@3xK_h0!LS`>RxFjDr0z z*E0kdj9UWVN!%HZYy~VZj2;U)YG6&P1uha?HxP^R+Jzkv4qq5aXmkysCYTt6yvqRF z1MLVc)P9t(vjF(P2&@4*4i-g)up?9pQ;O(WuKd>2)N=A%Oe)wQH%v*MCVd3}E(X%h&X^4Hw zzhFG)p&uB+1UI;sb4D}D`%uii7C_hR_|xtZ}}l*2vH7FhA3xdT|CLaU@5l)KnE3s zsQ3|{+F`whDg=?1rs5oFM9C8pv*#A{H1&S6Bok zu#757icuyJ3rJN&(+b1mQ!F_VmLNGiy69L=d~{H8PI`Q7v=x<9VNA}sO<3u0*zW8ly?(D}P(#Dez4blh=Ct%Kku_7Q>Yl&$+9S19Q)-;$>1oY! z--exo8yW^x?IG!Q6sXDN9a=sR6C?-lJ;3sDU<(~>CZy(f%FbK}Ds9GJml2i9O5ItR zJ}MQ5C#G8RbSmW~MhBJVWhSarVqtO_;Ya@JPpvW4D%7=jVq-gl_KZDhiDVE6A@Z+ckcbBQktjrPTG_L46uV)aj&( ztDaI>|L1Fa^cb~ZWaX6Vgffj-!$vgp8N3^_oyK<{!^Z$LvsmO3n~kAnB$^m45d_$R zP_P*Zxur$Uh1B;a3}UU*ghEf2AnYqjg?cQM;0&}j%Z~2PG)|h=H?e4efqprRU#b!d z7xL$3R2=9xv>@`3_7m{A$jUJNB(gHB$fjT78KY)qL_l&|z-LHodN18u?kB1?n3 z7t~`JC40CW0=O#NA_rMQ5g(K+c8YjeAfPBo({8mOQ3Zr|?NB7U_{ zsnzm6@}Z*#0FBE_?=1O)=Vu|uInHEB7w$-IPKw9{(XXboNeT%}Y6g7KHm;?5{GI2A z@KO}ah~yVgf;=`@Bp1pV@jf-7=fJZ5J$j6+8d}n2+Or+!kep+)rHtZ%)rCdQy6~DY zKrkdVZ^OI}dMTWZ^+29?khy_f6dp#h8|DE5BH&)Ctuu&X!+>;(4)ZvCY)XEbn#4hg z92|-)AeqD4{ikn~BfgXlQ#J3S9Kq-inKru21<)@pHrX=}MJOh#!xV>#0kVx{SCliv zV2QKxHlbp=YL-lw7%ryta{-g;C`_pqIz|}}A&3H*Q$+-fLZ}5jq}*VREtox^vS+uX zKA}zK*!)=od-tqJ=@S|lYBp7mEx95yBW(_TWM!nzq5XChqD`MdYEbMsjb(xBFt3<^ z_%pT?B54-cMFKxFBh@8BTnSo8+K?HRf-q{jg<~)loRBu_3L$Noi?GO`+D!>nUrxw}y9II@E{8-mA4iE$QLz?3P;3Go4; zx8x+uH8H`$H{gvWWWg_OE>Z=L>A7!UWGd3j;^0V{kiYD@loG>Hlb$PfBk#k^^Z{H?7MDy#drNP z?LPHNt-!4_8Bh?6=QMUMeV&kGMT`?%C&t;M!|PS-mJY92y$Ndz1p z!X+|TWRdNtR#K39SKZ9uAPYb;lLeL~;X{;a21%p^f_1=ESC%STq%ZiI7G*7#R|Vnp zl@!<`;^vvGPEhD0RIF<=M*M|`Ir!}=McZ7jLT7@GuAf5J0^fB(IrTo9+FYmS zs@Ff#t_y!mJa?4#TsXpbZu{$13_-CDuAf3D1mAV>T=hPi=sN7EJCH&38E{APOmcw3 z6QYQ+F!E2y9R#!q*M!^zR52i{O09V!Ly-V6Y%oL&9L91ZswXp?84mtojB@~@jG5wgz|WHTZ627?Jw>%dHgNK^al z8^F?Pa9ykKxQL~|w=W&l&@gJnjJoL!qm~XREiEnS->0auwAA>0L;bSl^$q>6y1uEt zp{cZF0N%_ls~u2MN^A#{2pQQYknQ1OS9mI1s3)g->~Ikg7Y;{aFge5^ohz1N6QM>? zO@rhdtBjOpdst{dTty4N1^5}_B|IxsL5ivrD!PsmMb{;$8clOjjjTuz`(yEQa=qOehVdAsW$uz=U`aQgle25Y{21 zq6=0|f`dZhNW=!TCITHvi6m?hY9uxxn-+$)N#A9;s^d?EL!v_12R)W|si1mBsxpU4 zC6vcW#ZL4f6rwGChd=)Kgg1Wll z!>?%^GI4mFp?>)A1@r6b`qr<+RpO;lkPz2nPlU6}J>59C1ULe^FCZ)d-XP>k&#Xk` z9TzNN4u}!J50Xfaf-nZh_`DaG{(5)s79Ms^iGsV=@6h7(aZtrCi&je+io8dRhN9u*KkQmAf|tK${{bd%G* z=E^bu%Laeo+QFk_pVxCj)wT1Widr z$N>jfip?#j$#(w!Z_@VP_=3Ohxa0kUd#~9meIre8YVvNCzEMW<2fYbWtdhYWRU%0C z%tVHb2YX#)*r*c$yOZ}vnpE^{fGasuxR0{tHFm?_T&>xUy(lZ3a2E@3M@*RJF8nD< zJVGKA=0hs4T?V`AJy0E(il%fUCqPzx8BvX6J`M^?zZ646KT)BjebYA-Nffc4#J51v5?w(eUoFb5P_YiRp3>|PdKRI1HL(Mx(6on#=kz*? zeBOT_p7GG*!?JrEJ)#`_?(mck*FN^;%2mTJzy1(@G-P}>W!haWNa=ld-MX)*Ouh3( z<(_xnUA>yy7VO>2)Bbk%)k~0K{ns) zGntZ3po%R(;V22gWWmObjzWcy0jr6>Md%2@F+JibFhuNDZRlzRI)+_NkU#wg2BZJ% z9IYNi_X4+a`8T|;#H${|CZ%=;^fh{UbCdLq_oP(dO=xOft{lLQ-6Ue06h9h4S?eYd zewXYPR3oua89*kYL=r+@Bs@S^3t&=%91>widJLdZj1&d~qD;EMKr#h;KsO~-FCJnQ z(05unNnLx|CM|r_a`&!2eUMV&4RbUUjhDN2%&vyGu;n2~Xp!X!tqoDeTr9BB}i28#(5Rg`sSmK{QZI{fOC zsHzT>QrX)WkX%y`0qJ&5dt?PBqUGCVl@qdFTEf4bGG$~%1+On!I^pV7bAPTd!OAw7 zO7kZsSTkRrP%UpBQ{JWaoBnfp%q@OP`Cu%>+6c#(y6wxyVxBda=WgL!MXSD5q-Hr_ zH>5>B*ILI_cLtiuI? zMKK}i+~7V#6z|I$c*@qJ{26aTSlkudvGs{J4jx%Muxi2Z#vAUq@=9rbL2>c22cLcO znXm4ZB4vB|<16}C{YNB2rXM;W4_oE^Yp+GU-s!ueXG77rrsD3yM_k9}UpqY~2kDba z<@k~vgZdF2Z-JdV5_ELJQ_f;D$kt7B2gkdqlLHz)aGsTt9A!mCPLM96p&*4Zm=SDD z3`Rc@`T(Q?B($zE$=ne(kH6|dmC-tl$lA#;r@_Hdlm19NJJlpgkSOF3!zr93>zBMqLY{FKz=@&gCH<3U@uju>&^zP~GHw%z%a zloRgY`&P`DBMnw2Y#IlyJ*?CkG7v?iD(LxyhKh7po`BvN-~@ONcCtbO>!9&b@?HO{ zGH9R`TCBWXy%%?;l{>T$A8IpIJ`gcJMET0)ik6nWqaWpt`#%5V**COeXhY@kyXY%JP5RF7%mv3RCU0 z;DU+>Btx39?PN2+0=f8={l}bh_;u5kCCzC#RhjktC$GRU{iS)jl%B9NQ+f4Rb88r= zzkoH$-^rg~;-QFp#|DPgJCCu`uF(G#7X_nn2TH4vGsb1KFXHZrSkar54}CA?+n~EQ z)le#Vjqeqny&nCh*#GR=6&yV};r!6|^`vAQ`HjjoFdFc3A_lSOAfM0Y*C^FWb&c;8 zNsHfLgNC4criz*lQmZ)0+(ou0iBW=3VS18cgT^Ju6qzL#fJ}88n4*a;?d!J|{#6VA z^0??B(LzrZF;K*hs50FOZZBz9n-0?!Dj&Q}4@b0?qDLfrL;X!2M3Iz$)7pIc9V+%L_)1yeB)G^Cd)+ z+EYSQa++U;REmLy6qZJ2qMVe7$TfA#v{-FYoGn6%jf|3b6!s@FmQb`ug_IG|QCjB$ zn4>WysKTwZHB#d!)fmDo4!IMYxr}z&J2BB5e+Z8^${Aq?7pp?cSNZR=qbV#O039La zDb3dbAR4ZK?znL+_gJkNO)*Tr_s`0k&pr42^St|$d*l-DF78!i>E_lwb#;$_zI?@s zm8bdT-N$|K0ov`NT6AnTt@K^$#_Rt%Vqfam<3%iIY;m!qaR$3Aj40p94 zDG0uYM2Yw+U<97=8CfK^eWfKn-XY!q|2W9Hf|c9Wx*|9UKuMHQEqxGWr(8F&Du{x#Gd(q`Jq`E>YNLor$G`0S^#e{_2NvSqGdsQaf6<|F zA>CU31-GUSjZYE#==g%FiHCR)zl1iShzUAN;v%dHp^s_l1f+%CM)*RIn(HaDJXOo= zJZyoOkD`}UKY*@6-mU1zNUa_Dy}$n2TL0T`i2sSKKN07<3S!KRXe7)xj7ro%A_5wH<0}CgWy#Ut&t0zs>0%+sP0Cc*uLbjuuwg(*)0yiTW z3MdW7J(U3l&kbi^5IuCk!^?Pv{JY^^^pehnr(exjx+yL}1QR(#I1C>Mbxu8^?bZ-j z+2{~qiBrX$$&q40WRKo+Q1@su0NT1u^ibhH1?o)%F_3v1AoRI8OGJmVDxyioRYZ&Y z!Dusz*i#*9Rv`&Q5g_8TcQoA9+q0u#$HW;kCgO*u_gxJ;8mCX6J`ssceaDaX46mx@ zFW`-7lO|8yF=|Ke-uO0kGG61e(%`D9#_?6vUHZ+LPz95mvl_^w3SoaHc`RxbWZPm$ zngUTySh!L}M+Pn3XFl#T?o#ffTC4MYcB=wv8YI3o=*6t<|UqR+&~q1*>tN01i&3ec*? zYQTzgHxFGs^zugv`cw2Vu(paE9Iz#}QDB9Y6xyOZ!~3_isk1^3?*py%qDn_pgo!!D zusI$C$HJ*1%n@cpvXN{C!h)8+dPx{|e2iM7M8g+Y7vNok6s$&51=NK(Ae7qCG;|9C zT1QVzQl}72D7uP8_$$N;KRtdtyS~Thgy=v0NgaFaAMYEt2HAU-%vS5f{BeEjjE)zgOjk#-ov!}?MlxNP2G8-byKo09_hoLAhGl`rC`bPpq6^Qd|C<%gW(XM%HiIcVK^h zfi&z^Tp8KCy3T)T;jQT1S%3R#?NbK|^8ctNHFDH=Vp8J+2OArQPd)s=q)9-qlpncu z<)9jB!A{rframLC|ETotQWPHMdWVgJYJa`=jxLEh2S(w($!pnn{}#(OGJ_k_LG z&Pzskg?5=QM_Bcf^*!3TD@wHY`^)Vzfl;53mX&61?{gmd>EoZ8Uy)u3Op+zXSvm6R ztHjkufEgvgqYuT{=Xyp1)Ipd7@rm<0dci?*;1~uPwJ$SNJ9&XlFF>bJ@Yh8XME&DG zFGW<0KOjxCb%Af}ng^t2ielhxDcung0UBHXSC9x90mpVkU8|rwE=^S``;Hv-6^MQfx1Po4@s6sow(E-+#1C1=EIL>a0)D&>bxdi8bFGmg)J z`=uuFj8KM7XuvFCM$uG7G*EvQF5_9yo#<*5iVsk*t)pj(FdN0M)Q2MLS+Mk>lS(%q zC!gu+V`9t$6rVY(V>&j%VAJ!VWCyp_92fMn{vxtVH%Ro}gww_alTl5VJ~k@w5~|jZxaEB|KAn z?mWOMClF@2C{Bg7z91&0+$8wm5&$S|R|n1_3*9VA+s-00Lvo4q97^O?({uFMWTAE` za7KRZd7=E9j^Q_rn=Uvt?+ZGkUE=H@OTmNa9o5zN9WbONo+}tjOG`53qiI(XLyX*& zf)jhd6NrV0xCP70jfpnNvBjuLH_3Lg&vUZlV&$SjKxJ6T;-bR5T)INpk@$?wf;=MJ zMT7wKmb=I!6)=+SSs~ET1~<^{;!ovvAaj@9{7-F z!-QSkmo*JGIC8r#-#?Pa=RG-KbXn~^l?7~c_n1C2ior{Z(F2Q_)E`2`j zvkp3H=0#PYWMy?UsekHQue0V}h7`^0x|Fp+el98U0FHu2nDTj5 zs-#h&!UgGrbux?mFCo9^RGK~TgrZq@4{$H1$q;NpI2@TUNR}c0CK?bJvqmF{RhZC7 z_oYrkZGoK53V?z-3t-6Y!V~CShjH9t+zR<|Nxh{A-HVjg8f7&rNX!B>5$6xVDtDu! zGGHm#I`mBpoW6<7WeVFnN>!QJMJs8{$_#39b}1V%wo9&~$u?;09XrRN*kY_ZtJr<{ z^>s5AT!vNq8EvVaLgo?q*`O2xgu0(iI=JJ-6G*d~9QSjJ+P#F$$4tAT4u$l3i3hk& zOkR*Jk8)OpE>AH;rnJvG(NnHPe&u;yomOzG17#zr)UWS&D)s9-u6qt@{kn-#KhrBH z?;GD&FYn8C>*alJN&>!5sTHve2kYrUr9pUJ2#jasI+DEz+d2pNJ@^$T@DVljOi(D| zHopPC?4TTvC#WTN-5aWgP|01p(mLtf8=%OiSUs}jGClB~(RqUM{6zlYc?>O3dooH( z>FcK>%8{RbM4lTp4MUH9s)pn20c8^$DhOlr;Q)n=PRs^vSj1f993n6M62KCoUA~V! zT%|~0)nNJf zq0;*sZ-QYieFvTYXJ1a_DwANn{H&0j-9 zBt!}z1X!jjPLQVsF^+gm29oXovD@LMsGJIRRUu9-porvq9r8rbNG-JYwWp&xd=!k- zRL}3fWB0hV*DkrXuJ-BjbZHwKVUSyRI}2nwR9 zq;k^%R@`pJ@m1W@!bf9`e=DBf(0Vo1D4A?98!C_`8%1KW! zSwf;CZ6mH1B8!&LNWjYEO*tq^sq#NlL4#>XLCYq2CI zKo|r0=b4D7W2mW#YC?g|?r7#n`6QeLTkQC=gjj_hM{~tJYn&*ta##j5m1JpFNrZ5-giHQ{5xw)m5`@-I6y;iMN5mpG;0Oi~MHpOI>Ty#GoDZ3qiG2Zx9Ae{DgMEUh{=reaFBBLVyrK;JNmvI#Bt*zFoV- z*$yu$cL$v9z=tZ2O9ysJ*R?z1L5bZ-vf>&x&(OtC1T?eMlLP?Le||EKI-@#K{{=Eb z^naqUcX5##EQ}U;b=UC4%7*EDF<(4g*&x0t8$N3LE8bNI@>3(%@LMTzUF+$g#jUZU z!h)$=B=R+2YEdG*fszvFI3h?M1dN3s>8P8pkQO4ZJRmkr##dlm`Wx~{+s37Z9p>-M zZiVa{Pcdd%Pn2zhQ$I^_WCCH$G%(f9jEIAw7KM|y43-ecTmckD12V;8(&qy(N`0^U zFmV+(L>eS1m$p6HPxATSOq%4OChf1H%aLf(jy~DS-{a$kj@z$v|)~W#rU2>ao`<5a1kGf_2V4UIDp#1yJ zJGX5k-EjM6>urtqHf-#o*k;UlNtuQ-2e#=M5wLGEnVJ!?k>&}$+D_f%kOM;9IM=xk_-g$3EkAxHFqPJ|7Fj&IPU9CT|kaP;Rn%I)XUa-QQH zI5p}0Kqp$Cqu?-gj-RmK#T*^VCf~VDF^H!1!5p3FE>ClG(7`!v=7&Qi;UuDbTooJE z9O|m$h`7*9HRmp1!l=XRaK?eYU%TiPe?fHxhrSj#$+NX}6E(*WGaRRE5?!nH{uWT{_60lREG04CaX%a* zLK1MSF+1vtu}iF<+AU)vAKz|vE;hx3_X209L5=~ZLj{12+APUTq?ra?Xr^s)MlU#3 zfp=YKx~-3BUigJ(Ouo6$3G(xpb2Jc}=~M?8*xNcOQHqU0&WFFlHB1h4WI^8m5`d!D zbv&cF0oONUash3xk=UU|s+aWN z@F*g$7g{v$11+5`R|`4=3+}ud_9Nv{T}|~dfh!fbMp`zNY9ad83GEKh-`0TB>o6@q z$m&v^H!Zy^zy0|udZT!~b%SrkFslw%OBvhJ(K=x&ZRADAJ1Q<7T<1S;OdfC|Sdr}8ylOeR9^o~1UqBMr|+&;4YAtCA1ws>TX)uPLNq!SiM z+tb@%-AAIfQ#EK+1t5-bi$)q&JT@5`OVEjKp%*yOO%wb+WgtNI^R0g!vFqq;H|aKQ zy5}A8CS9SydLqZ%@Ez=?5ZFyw;K&AQHcsuRT**nMI2c!Ld(mg4BQm3Qqfd278A-C} zNuQpU3^XFc*P5Q}lgtb*)C6@TN209e+oL;&)}EeXOc(7?&wUBTo%gDb7&`Pg@4REZ zVR8@WE_=&^${BF%|0&*^>IKZgy2YV7;5v%yrYG5w#PQJ_Jp!Pm!cZ1OrZG|%>BJI} z7jQF0svo>9Q8u4K=Sbs7bPLQzmtx|)mgZ((qvbZeivO{^rDgfqsMq}MietPUU%z54qXm{RW#BZD z_Z^O-ojc0Df#pky9)7=#N|SL)A>b+yLL|M=??xg8Y-SV*1hl@<&17=e0_r>v&@* zC|@eTSu*}ZA?O+ohA_837y?75vxdQ6zSCeuSV^ne?d*IAe%{nBeqx08A^(i+1IKOI zInLAhAri)y$7EBu?S|SJ3x@hvHCS-tIO+)<9%j5WZVa~?d`V!MGZ)B-dcz2x^l#6J zZL+_-<5~h3v86@RUka>@Os4YTr__Ip_z*sfda`FMq{dkAp%cJCq$3LNcFcn)@1v-# zs>H%`(1SbDfzxqJa!gE^bV)2(*j|-UeAegI1Z=RhHZiRLzWlr2rO~)C(3`1OHpz4z zi9Xja_@s7wPS1Trre25B6p4>MiJ|6eQtl&a8!7iO{C}4Fs2e5$6Z*=hn0>oTQ^@+- z3EM+myDzo16X%o)@63ff;Mr|YD%JcKM8wHV>EOIl-JO9QEM&hpxHK^|N=izQqGDuN zV)1cC%f(JI1%{xz140L=+q8{S(D`Ymx?6C8Q%#jxjWV4bZz}7_t>}J2XQhBnbXH0M za+`2~itn_P{5;8>CBt+%|I8Hh7eK3-Ebug)o|2m*#WC4fKrJu~j-g)HWTwkrovLd-Y;WLEVDdx>J4$uBY~?@wE%^#(Bc~LR>Pz zFSWH)h|c)M&>r2&}*4?j?tJ!=MLeGYy;ZK;|)ZJ0=JHT zn&K!T-6hpe=>30jB9SPTyXdJz%9|~hvU5NOI&Y~~JNr4C?et8;y5?PY*U)ip*fqp6 z?T>;^&dC&upP7kWqkisUI|mI;XyXX99a{)|02!kjKRPE|Z0m?qfY9DV?b4o>3cmPG zId}e{(F+g#_D8qu*>_*xcg#mUJL8YD4~`73s<91~6LZFGBUPgAmsbR*6v1Wy>fRZr zP->_<%Vf!i_{8B<1^L3-BN3ZbARCPZD!b(8xw8y%0WnNrLFWtufs05JECq@}kjPcZ z@n1+>*;g!kahW?y_>dPp&dRh{^(8sl&}sdw)!K?_p5c0Jh3~X&7!<;=KlL`bll z-qN2(&5zU7IFS0Jtu2Kzsi8Atl!@BgOzqW^VHEGl6;P5WfCZE2u1BrP8 z5)8fMz?Cy8H-RFDbT%bMLm39B_{3a9w^Q{!loxYEW7S4mDBZCj7100yE)pklahK6b zfqfZW0t_@C06JFm$3=Whec!0Qi?(m-4AqDV#T~`cAYB3euPjOv)fOAV5vH=l#nMOK ztdq^nbYgmQGtNwxM=56?Fw`&q75|o>eLx(Yj`$lg@x?i5@rdeSbz+jlQCB=J(vCCH zFi$Ex_VxOMcPNS&;&JvBx+S5DndHzq{GrDfw^KR;W`|?3Fc%b-iwLtX--0x@I&N~} z{kAw&C1UhwZP0$Hw!>qm!qC9e)eOR0SJt0@&eXZLp;Bj{rv(l#WOberV3sDJ=0F?b z(M-l*iNujJm@zpOXpm=-;;{_yGLSbwi-+$z>L9{akOX?G0#z1L%?GCucF@rsr4Tip z<#ZyTWvXtM*D0O517oEO7#iz%>T;%!HHby>c$9mR#f*Am3Gq{P)V$58iLE*wHHj|a z#p*&{-3FZveRYdc*U8Y;uGZ~_j&tTv;~|X&9zuDE9?IAH!51IwwbvSTcT{@bndl`{NF37n@_M4`M+VIR`iiXRGQ>AtSUQ%Y=P?$cOj1IOJ{+VK<_tA|d$4v>QO zpTH*$DW{A%;@Rlvi6`aruS8$-HOd${!Z#)}8_HkC`;zEal>zU@0$#h?GYlIs2`RET zvlBuZ-H#;ddV&$)WJRluvt zy#J@YGmo#TI`{tC=bYqZgai`iga9EzKt>@XL;)d?ggKBf1u;1ZArKPGP-Rd{Tc@hM z&|0EN`#gK^b50V1-0Abaf4qeK zTkEX7_S(;S*0Y|y#%FoM)r`s0HjIxIO#qcr%cRu1)UwEW4u=HiBo%{M=J(@nlp#rx;`zJK=N+5bB4%oC0@b6V03Xo_UBaAu)%MiN4ioZuXg#M&Z9 z>5Bcm3qB#ql_Kv{B-Yz_Cm?;~XpGah1g`#MTHxx_w>XMJ^e5H(Z5@wZD*BVtaA?mv zdLw2S0~F z8{kL;Y>bwAPko%@8{uW4tNwV}clyXPXJZeF3b|?4+F$W?h~!B%NlB_Zy5W8sFnBe{u3g@6zFZDkp~&)A&zFgj`V^Z0k=D%g36vaNb-CEMyClOP`i4#|*Mlq1}9h z=kZkA1N!?0r$P9T!2wGa?1fL^mbu750~sQ4T1#O$mPQ_5Ag{GSrA_bJX^d#eGv2Y> zLx#-%=GQxBh~kPqp_n5=Ih#95jZu&HcT}o;^>OyMCXZqXHJgwr0x?t;8j zgMZaKaPR3`r1ik;gGkO`sAKMPKxR;nWeL(>cg{5z8`PZjO$0<62Fr=XaFyi~(i#%= z2Sb^Njwa4+3Pl;9iehV+!mekX3#GFP?$BdbVe0zHa^U&h4!M56!&+*gT8pQz=532^fWpHm7+Zx$NFkJb#{_(@x~tyvWwh3t)k7O1Bw# zJ-bTI_8#rzIU|^p7K}>?I(fDjmu2l(a*md+cht9pT~MA`;T*l%yFW7%GCR>duje`o z{OtZnKiQpVKhN>tzRz`z1dSv$wLVl?F?!GX#bq=G_k2JFk@nIrQp3CBL$x zlk2?Y*)c7$=ko$YS$bS@q19PG5~$K|ts~E`TQ?xr&bqUE$bYhty-N)<7svIInO>QK zU{VP)sG?6$=tBmIO3@KcXBwN8Y4O}*WzWF=XibI*S#*}flgw?q%_9_$H{2HPlzGiQ z{YFvBvLz1PFpLAA-A%kBhB5qX?e}f8o@$!4-TG5UN5`6uFTD3ssAlPshdW-l!)Z=* z>^{<3ly`Q%ulekk{Jl%(@40@;RBNDQ*8PV0p3~ei|0FF7^JOQu^gQp;mfisNINTs} z4nxLXMB9Q)vt)!lR~HelbLPEldkx#n+>x4di674S$n#`9YU6{K`_A3cp4iZ}1=1r+ zqIxyw;>$lKM0H%9wuzq2o@0bN^m6{At0ZKxhwX}?nZAL8{O6Jfj#wP%M<_hjbe0Ir zYs-4(h+yt3gMxhG3OJFaBHR~Uij99n>XiTg||KtE+FN;M;sZkWR&X7L}`0o zgH4lHs1KqGbnQ{!j9&hX;e5J$?A4KzTG-ks9aB~zUX(5UEXMiAB*nyI1~*9*LQ+f$ zV@N4PMEvQ2bUH}ByAl1oDa^#m5ds_-hT7xUGt>1J%$aJ`fv?Xq*>PN zRYhNG@3_{N`R+eDFy?;j(i!(Y^ZRw{zP#HuXBJDvxa8z*f8J3rZqnt~TiMpFGae7U zwqi=&C9@Y)SN+TJmX_FhR~xjllKnQ#J8K)X<(-2Yo%=DYCZpvYo%`I;K6dGK;Q>cW zxjXm5T)>PA2TQ?;_)q0Tr}Z5d!U}J&>C@TaP4-*}M_3pxdlVd=WSEhR1d?}}UH(x+ zP;neXkv+mUG?Tm|@y0ppCTplQa`>=Jh69m+zM~UjM$<=05VJi9e*&kf`G*bYMRZRJ z9*dfhJ;#doJh!sznG){dcWM3ma{z@bc=WQ}dg428-FyF8>l;@exa+QGZr@{#Y;A47 zx6Kv#oCmMm+jvRAvR_-{v-VHCse0Vxb?@D^a%IdADRs@`HH^r-67xr-JC8HN7`K@` zc3gB3M;ES@H*o@`7@Is!vp6L;*DK-NByQzO3CDFWVRznHTXEXJ>9hpi8HxY&k{&VK zJ@7}f?;WJ(mHM1}&Q%G%Y@gZF`GDh|%l?}unp;M8F~)#S;GAdwZQ5&d>cwj^7kdHq zB70<~dZCp91<_eM{BPC^PcM2L>RCoECX}JLP@VctdCZMpKd%) z&~HJfqU@+HM0dxEBKuaE_Vv2#-snoyh#v;iY5ilY^&A#Bd~qE~fnyy>yHqp^rdP~S zLmV+<_U!rOMUjAcMbRf+XJ89tJSWJc)6)IAtc4pnHmmO_A7;LNRyut^Iq*~l_=48x z5yRQB%_7q*z9dZkGC}NYV3#p!HRO6xF508NN$^S3eleKjW}t%6!+>MKnbD&m>1>FX zsbB`Iy!qeok|+9;k(C>|Rw1hU7K6=rCcK$e%}bXFVZInNpn~UOK%c@X9UpJse*C%T z`t_TelkvOGjEL=P75T2a<9Od+-f{L@J9BdrZ|uSp%9)=3Gkg<+^m=M%E@Fx+E}pDJ z6|YQ+OE;dAKAcjT6*D83uH0F z{+;jH*t;pWq2^XOOUNxWw%-rz-w#0>f^k}}0O>b(E;1HTG1RBU#;S!3v1B=9aQ}V* ze}-FL(h6n^K1G&p81r*VEWDUDGL9=Jl+f^xj9#3(oc!TYUSF5eiPMqSu4NKf5FY%c zO|9iYz3a^m&dX(hH#VlXKM1eIsIX8fYwi8LrTIa%qsB=l+%`D_hh&2Kr9+l7Y3o@< z_S&W{_uUeZYDE<~WsP^L5$-A9FYd7ZZO@*LOYS&3Mdmw%_flsvXi--g({B_55hjgOlR2UgUcdCX|4{1<2Hf^#}@7~ToDuY`cq;mMCZU0znz{lI)l`3!> z{6|E-#To2btTh-&Pk*EA6dNC#IU+VUZUlQXIbJPnMQmcuNS1EpW_m`%^tWq3Y_M#d zX8D1WS7$MwGaRkwAj&$Q?5KKI6jX{ei|4W?Crc^LRpeH@EUxI$ z0Gq71a7$G7S+Ar%%0BDYa6MTUtAAtY_Y|?pH#n-BpnEHOnaQHZ*h_z2sGLWM`T29# z-9Fj5@_IHh>fzUTab^bQ*pr9HMagj{ za-5O=pOs_j=|_FG&nds%R)2Jp+^(6O*qEXE5zrr%Gh?O7gM4Q8sf2Kb?E7s*7$f^sM|@=dS~V=i-aC zFfuOKvjUKApf^HB9SBU+5dcRIyl%-@5PE=pJXy3Y1~UF}wd{i%nx5TFU>NR|#md?A zZ#*rRkt;%zBR66`J>yY~2)5GZO`^56dS*f2J{X?zCpt@1=+$$KYO$3;_1tkLWL5v+=J*Z){|c6|Ql)_7~p&#i@4(RVwpJlS!yFe$b&*ih{#s5RqC$tjb)9oZG`oy6wUa6ym`J5!Mpur*0 z*NH@qm1Y|?^!Z|ve8B_;*7)=UEIn|Dsn#f3!|kS?C}xRAG{xUI9wGPmahV@bYSD5z z#-a9A^PMPag_o(6bCEMUe-4g@r|LbPM$OWnkFPSc9cHYzeJ_gCeQr5>^oD!59?el4 ze$yO+W)8LzHWQv|isXd9UO`N7r?7}#7qPG^F_k#<0aH`l<-|yX*ZqskT}KV3u+EdN z6GpUI1TEIH(^GfdeDmTZ|CBZ^Gv!)2HsZi8Ot&3A&^<4ph({V#>yR z(JV50h!SQr$Ld85kWoj}hz=mgEm__{eD@O}`orybF@k^|R>Oeq`a3^b$#lVCx`a&^nc-uyZ_alMZ1TVO9EPu(;1TaHuyOsJOL47Ujp`Z_=TS1^B~KQWp+}{urMI(G?W?q zHU0eEt*}UA*%_Bq!@g9A&gM_=iL#38Tk>JEFU_-pi+svH1ZzIJIhi%Oqi6|^V#yP` zC*1u93 zBW#44sNpSUf9wH`yI=2Dm~VUWxPJ}LrSZ(S@Mi~aHv@5paAgu+OFCcmK{M_k|6?W_ zx(s>Qh`WyK9^O%bs~2%3A8RF?y)-+m6Lu~4)zACy(fCeW@mG+JJm1Q58T|ed{=U$W zh&x35T&2G68LVEJ$8cMP2hb(?mUykWk4j$2OQq0H8bVX|D~d*WuUyc#82Y}+bpzK^ zgegtl{V4ZK_@l2o{gX{IVF$Uka_#gzZI%WWn3eErXUyBCw_HfxYvgYeS3dcZCV5}s zx%gd~P&wjxk)JO~c(>~#c=SFz;2!d|j`aVD>mkzokTfbZtrj!UdyaHkxNhcMALAO2 zSHd5{)>5{T_gefRr3)E_50zZXTTM^OfU>tLI3KmeY$IMNS2JZXRIe6uC-L_2%m%{e zl9tGeJo9Lj`zUd4L2ksga9i4`MUK;;KSNyFEFZ?D<{_zFr-%QW{ z9hN)BC)UvSNwe<;AGCiC9<_hMXjZn}0p{6lAT<0*G$DgX{ zq>|24_>bBTGmVx;-%70KXM%(5ql`xOW`As&NmcA?AI6_%9|Y6wKZ5=27r_2Jm1YLm z&w>N(Bj6zWesHk;3^)W#=c&(u{p}`jkiFmZBjjqZzx_9Gko`^Gnr4SUS@qkWkT0`F zG|m1zC~*c5@&Mz+Y4*)vf0oP-B;+W2`g+@gz*L*x+_340?MiTf{T4XT zehwUDp9KfouYno%*H}%G2DO7pa{@Ssy~sldxe4sgcYFvT-!s{8dI*>TSF_>PU@(WA zW}965ac~l)kZmrpkAZpiB5<1h5SVXo0SoMJfra)waE|>kSfuI9wSS3!p8W<`Y`+Ya zLSeQkgNAIgT*Ft`zrnu}`m@a{N;cc9R)3}XYoI*a)alzd=o_0fo%@uw2kl$Ad(^%T ze1uZYHZN$L7ZqOuMw8fceP4NT_`VEVK`S)p|FiSf_Dz**_(GH&l%@hcx_t z4L_m&cEyt#a!T=eFo!p@pxKOp25cPhmK@&rJ+NBCLyC18vWv3IG3^?1l8}p_@JHaq zc08B|w=YsUFM`h3@lUt!0}Jhc2CFq@Nb#WJA;lAl?civnWj2_?vdYoO%;jLVeIt0W z9Rp4x&C!(6Jz%l@Yj6Q2HQFq+KLN`$q}+Z4|4RF3V6{FQQmmuAMq^o8o^7yy05+>9;Gl2ZafDT z+joIw)YEa~{c*5T15QKBjVJE~V1a!HSZGfGS5lA0L&H5_wWbqNtU+eRQzMRn8}!+o z8grMKPRL;mf3V{W{-Yi5f$jR#New@x_&hifIkCZ1^yEaicLvNs3r&Q_d<~&f!so!l ziE!pLSf(K>(Jd36x%hm zlcX~VdL9Au6!VelNpR*(a5{OP1b^-XtMzV3ahHa)j%Mn`(Cg>!wcTw6kl?U`VyT?j7VJC$b^GFF)ff98PY zb_rNvj{;ZPrQj;N7+h^H1uNBGtu%xb>-4?5H0Eyg@6~thqpszd`;e17bc^KTkm6yD zb3b)9k1q?dh}M$3?TRP$?kUCR!D(>g6)+X;I*q(P1}?Eb0GBE*Q!H1k*1I9aUG}$$ zb4dLs6x+dkQmX?~;D0`8t_L${ljOtO2SAbMd}Qn=U@j7v4_5`JqWAKlu@szR?*)tP zuY;w0JM!TnEho4qA)?{);hVgxl6se~wIE+>K|Z?W1R=ZZY2a>6d9S9n&;9}-_u0+h zL8al4;$e;d2>Lu9E(vW?7xIxYN#~T}^I!q_x)V&X{|u(uUj;L0;S`XsV_-IP7Lc!J zz+9xdfPB3SO1?x=W`T3i00rdhM_?(^RY1Ptz%stM1>{TKvJ$OWz^M}fuv*g$Db~>% zDIj0X;BHz+1?V41Z6B?*0`m10@Sw&#q3VJp@lA<-MBPK59pyxv!%GJg6}bDIV7Nk5JPK;fbWvu6RR-(_ zrP!@zPVeLq;vSGbhaB)m~^i{9Nz{VFv( z6!#K7AIjeXkCMJC^dH(aZZC$vdhu!AAu`Lxt#p| zGnj%FDkr~R2Qx^y9LX1)1GmeG{}*tcVzGvon9B$$CCzfUXn_kDCoPAEiJ+XWSx){W zWQqEhDwgrya;T8I%Qdxf^;hUqE6fbSS5j-r;m_sZYBLX9L-~}$D+yUkZ>k(_3soBx zHz_tKHYzqz;^k(G(s`9)v*K2L`!>bxiaQkd>QnpBb>&Fchu~4>VJcMSE40VD0-k(~ zyk;s+rPsOw&e&iv&#r(2ez1%$%L-_d@CL<3#Vs0VtKQwAxR+YCg12On+oSkbQ3|`j z6vlH`Q40SAN-3<;Qdq^i-oZbYR>3OX_y$;tjIDyhy}&X`c@#L#dJ#aC#X|?iXHMIQ|Kd0e<8x=PxHYjdZY*gH$DO{!4tSEe2ZMG>2_f~6rbv56M ze@8N;CAo&TKMNM~&0517p9h!Ic3OiBJcHcywr>Md;BzJP-wFzEE0wpE%G*j(c$JW1 z@?Hu3Z-BzvN>ckZD7>vy-c~~YJNSjSm6Woe@U{|dBe+FVxJt2EQF>&R&@U+cvP$Te znEUJ}=ut?2zna>229*AOHD8${p!D~v`O5qRl>UA-HGL5%{rzfMiCaMF@6#utzh6x* zJ_e<~Urk9I9d-~N#^>6S?Prn+C@hB)g{c1FW_@zf*%~;K?p!Ddg zwMQRPIzvilNa+kIogt+&q;!Uq&XCd>QaVFQXGrO!*94s*r8A^-hLp~b(iwvDFLPI@ z4JoxDr8cD0hLqZnQX5igLrQH(sSPQ$A*D8?)Yj1BGp3HO_9I{(Jft1RcfSrw-TH5-tPS3qeoZXo_+U=bQ%gSHztXuEL(8u$Z3q}^B#4eg+OJ?o*N-E7p5jT*91 zLmD)sK|>leq)|f}HKb8Pwh;2N*+R&>pnOA{HKbWXnl)rAA+MXQgq#IMlW)_IZ5pyo zL$<@8kIfDjCH@Y*yF>N=4vn*$d_8LR^6X3CYGiLO;V+p3gg*%8(UW3?-@XDYpiguF z&h!GS^=?Q}T5AVrV?1aMsw5m#891mia8PC7pvu5Om4SmQ0|!+GXfGqH2UP|Rstg>` z6b@+$hctyln!+JX;gF_qNK-hZDIC%i4rvO9G=;-jriZmm4{JFxLPp!{2;Ye;kTy72 zfL1<2D)nvzu8t20X~+LV zp1KyK?*-WE7f1EPlXhBb^M<2cKnRh(bA@eWKRb3=?OjxuO0*o?Ga$L z-VG`4VpQ`{p87fKce3Hnah}=+=2O#;^VD--p$!M5%O{ZPcY1eexHJx@%r(M%& z*K}xKqc>==BIoU@H`-Niw5#4|SH01$dZS(SM!V{bcGVm0syEt^eDaLszXghxYgfI| zt{S6VHO5JJ_z3&|L|4$;Lsy*S?QejhB~EGhDGfiRA=GK;mzb z<|o~p^zEeICTAv>B;T6+M6a}7b-iBheM#@Td$*?yOqrE(eaf+vzod>zU6tCBxkkuR#|N`qx2k4=x^jV#vH9cV?K3?HTW7e4Ode?43C{^PF7q1i(x3@sd5JoK|epUs+_wRhNnIcm2=fa=@;E{(Fda@jH=}C ze*OE?=&_^g_;sM zr+$=|o;NRVQ{E5r{yHsV+M;QnnPyM3^K)=D}G5XI($*{aJs%yz25_&c1Z^ zkLJY9Nt<)+9J^>i(aNGHik_L9J9p~bN9GmH`_;U+iz|!YD7mVnqqL&*C-ZaW-!}g@ z3uZ28S#aHg_JwH+uUJ^W@ShicXW@}WeHS$@dT!Bci~BFGSX{mM;l)ob>Aj?M$rqOV zaLM17Uc9t<>2*urSo(h1rDY{$hsw?_t628fvVU7XclnX>QRSDE-&_9Oig6YB6%SPW zc*Xb?(^ovSa?HwySDsikcU9S{AFrOf`tCKo)>N!{qH=cSQ)|browoMS6~nIh!4;3L zo3O5M-H~;VT{-y5mMc$GrB|)2s;N3$^>B53b$a#k>Q}4Z4V8qJhi(Zy8~RI4pPGp^ zi)%LXcU#T7wZYn9wMDgu*C(xCv3~dZ-Sh@nsX)&qh<3sx0T&znbnf{mzqo4#SUKuS z-I3M(5+)eWFURlW=__2nAI(|o`U7a7?XEwD@Y`H}EMphnbp1i}`T^G;#~jj|u0Nh0 z!AGt?(e$;_T|WkktWmW7tpJuX%>iq+>t~~wB{p&;oaHK(?fU&@tS{O12h4C^zUz-6 ze2wdmH7UNETz}9s`tEZ5aVFOv?tGef8Dj+M2K4vSnONZB1=UeO=?sYKJjAvq2d%F4VNy%r;Fl&9>4o ztEaKJ!L*tzjH`s0ILTrlV*-B@@l_Kei;k(psWlBeb2YznxQg*Nn9YQ?@Tm)>_hiA5NoFjr#~+U}k1p?b7Su|PtGJq#68YV# zsnnVpLWMt7_-f&x@^nDcpqLs92a6K)DMvnhX}q5*n@?#?NTY_uXP zGIcbb@|VAHaK9OM3xDG@ACi|A-cm=JGvQdY#5nKS5G66=R2nw3NJO<;kASXp{;@%w z(WqE7UmTh+f$@|iMqhfNJ5$hlePqrZZN@yf86Y#-wCIM=GR{P+Wtm~LVMov&9Ek{A zgpiM>^*e@wycp8QtDsL}e&rJ8E10FAr7JTAGUj+GV?Z;=%q$o(oAJIPMhoX5L?w*0 z%}10LG7hwu@t>uL+cMhK0)GgrdeYO*T~TCY{Do?g`^tvrod zC9Z;%A|7p=!F@HNzLlQPc6vJ3n(NH<=Cfv}`JDN@`GUE@+-PnxH=A3`7tO6`_uI{v zV9qYH8~lp0=}vQ(!!E@=<{P+s%|5jMznFi;|1Ax_k1xP?@f~C@!eMj2dBA+%{D3~g zgS6$3njdlJn0c6O9X~OTm`B-T^0;}z{M7u6R`Zjzd!M3x`E&CN^Ka&9^Ne|xHsmQQ zV4kNv_@a5qylj4ndFWX4ih0$@zP#7X8|FmN;e=~pOd-Hqq zALc#tNAm~szWEcIMiQ+gE7|I0^)_cshm~Tbav*eHW3$sG%}VDKqy8LVJ&?mL2Xl^R zhLvdzwX!fnHQXA(nY{nNcFssEhs`&mtkG7kHO3mt(b?nJku|}ZXic&vn@_AutSQ!1 zE6E=S(lsNn76Fi)*P$InrqFoimei>)S7QCU^~|$Yq7P& zT56S9%dF*Axm97UuvS{Dtku>UbK0E2%G}#lrM1?&!dhotX;oR(R>-QcYOVEFowdQL zw>DavtOjed)o3+YTdb?BW~;?&wc5-(=64pSrDG>(tF_JAZtbwHwXU^R2HB6ty)s#kAHp)YQgqt_n3bHEKwF%lg(0 zTeobeZS1wBwz)1jN=j&K#(zYUP(W!6Ns)eDj3L*dph> zwdy1kg%e4r4SRz{E;Y4|8(ZWgT&qsvya+vsbrFBUyl?^ubzyJPJid3Es~nn>>Y{!m z7Dt{<+z{~ximR)d0~>(Y5{JL_>I6&NoYcEHDRFXA?{KihrMcd5eI=#7`i+UDk#rL` zM*KvSME!_e;4r8`oxlQeA7}t# z7dg*2I?pePdL*ea>PPG%=lMp5!Hrd0nrJsQAx8e9#yWp(V_k5uoB1X;^NXF#H>s1n zctcxbT~%}2=7y@a*5sz>U$JEl4TvsTNh*taZBld8kJvJYhGxfE<~-G+PU5l%>k?Zc z{-otm2_&^f{fJ%eB-5%+V7U}&s}yOuQ>1N9k(Rr;YIAc{?&PXXotX0G`o_ALHo@fb z=sYF2MgIzxyG7sTxQQzw6eeCBBrS`| zVp2=gk3@$P)zSt|bQq!jgmS6=o1_ZFx72Q~4>gfcd{tvpYi&bqeO0WZE8-ff9Z$mg z`non+sZ}i-;;Yuz*H4%*X~MMRtJ;Vz+M>CowkDqTYkjB+#SmZH(n?)ut*r?{C!P)H zCExmnK$%`I)Jf7+VkxJN^^Wuq|59D|JKI=)>J%}4{E(!B4iR1r4{Jz*v;`ha@a9j!V;)Y!blgsbA zk`{h>*1H1VaQxk#k+|OTUfR*WyZXKOUEQwn+~46mx_OnnTjbaObtj*l+^BGmCXW{q zucyoRN+h3Nem&QFUfjSRd8d>?HF<`9)4=spCrrYHF7NWqa^hH{Tw1%_^Wupcj@u=U zyrWw@;Y&2{@JqfVznWGQAHB3iW|SX7Gk*V4$MwP`uj21|sXTbkc>Hr^BCyqouY7Qy z4fKOYT*0xdN0l&_Kf)u4Cv=J&#xy}|l$?s+qe*xnywvy$o%AG4j}MZMnBI;o2gf?` z^gZ$}E-fF|f3DxYSeLG-IFf(m6*T%*yMEy(W#`G8=gRZyhi1u(KG%omxP&fowR|Kk zxk$(Vxbsdeqgv+~&Hq5|^FF0h1c{w?|B{hA)G)g>L{#_usbd7k%$ z<3Xq7Rnj-ZBk6kO)-`=eSFZ5$;&;>ZXi}N#lAd?3s~i1nbpE|ON?2DKyk|UD(u{uA z3-?@4{=&Z{53jg%uX6IEzg=1F_C93N Date: Tue, 15 Mar 2016 11:52:47 +0200 Subject: [PATCH 2/9] added s2 geo index for data access. now drawing is much faster --- draw.go | 58 ++++++++++++++++++---------------- pbf.go | 19 +++++------ s2.go | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 36 deletions(-) create mode 100644 s2.go diff --git a/draw.go b/draw.go index 5e29456..87b77b4 100644 --- a/draw.go +++ b/draw.go @@ -20,41 +20,45 @@ func DrawTile(nwPt, sePt Pointer, zoom int64, data *OsmData, debug bool) (image. draw.Draw(img, img.Bounds(), image.White, image.ZP, draw.Src) // Plot some features - for fName, features := range data.Features { - if mapFeatures[fName].MinZoom > zoom { + //for fName, features := range data.Features { + for _, feature := range data.Findex.GetFeatures(nwPt, sePt, zoom, data) { + if mz, ok := mapFeatures[feature.FName]; ok { + if mz.MinZoom > zoom { + continue + } + } else { continue } - for _, feature := range features { - switch feature.Type { - case ItemTypeNode: - //TODO - case ItemTypeWay: - way := data.Ways[feature.Id] - //TODO: this ignores ways crossing over the tile - withinBounds := false - for _, node := range way.GetNodes(data.Nodes) { - if node.Lon() > nwPt.Lon() && node.Lon() < sePt.Lon() && - node.Lat() < nwPt.Lat() && node.Lat() > sePt.Lat() { - withinBounds = true - } + switch feature.Type { + case ItemTypeNode: + //TODO + case ItemTypeWay: + way := data.Ways[feature.Id] + //TODO: this ignores ways crossing over the tile + withinBounds := false + for _, node := range way.GetNodes(data.Nodes) { + if node.Lon() > nwPt.Lon() && node.Lon() < sePt.Lon() && + node.Lat() < nwPt.Lat() && node.Lat() > sePt.Lat() { + withinBounds = true + break } + } - if !withinBounds { - continue - } + if !withinBounds { + continue + } - coords := [][]float64{} - for _, node := range way.GetNodes(data.Nodes) { - x, y := getRelativeXY(nwPt, node, float64(zoom)) - coords = append(coords, []float64{x, y}) - } + coords := [][]float64{} + for _, node := range way.GetNodes(data.Nodes) { + x, y := getRelativeXY(nwPt, node, float64(zoom)) + coords = append(coords, []float64{x, y}) + } - drawPolyLine(img, color.Black, coords) + drawPolyLine(img, color.Black, coords) - case ItemTypeRelation: - //TODO - } + case ItemTypeRelation: + //TODO } } diff --git a/pbf.go b/pbf.go index 1b2da83..3391044 100644 --- a/pbf.go +++ b/pbf.go @@ -17,14 +17,15 @@ const ( ) type OsmData struct { - Nodes map[int64]Node - Ways map[int64]Way - Features map[string][]FeatureRef + Nodes map[int64]Node + Ways map[int64]Way + Findex S2Index } type FeatureRef struct { - Id int64 - Type ItemType + Id int64 + Type ItemType + FName string } type Node struct { @@ -99,9 +100,9 @@ func ParsePbf(path string) (*OsmData, error) { } data := &OsmData{ - Nodes: map[int64]Node{}, - Ways: map[int64]Way{}, - Features: map[string][]FeatureRef{}, + Nodes: map[int64]Node{}, + Ways: map[int64]Way{}, + Findex: make(S2Index), } for { @@ -119,7 +120,7 @@ func ParsePbf(path string) (*OsmData, error) { fName, ok := way.MatchAny(mapFeatures) if ok { data.Ways[way.Id] = way - data.Features[fName] = append(data.Features[fName], FeatureRef{way.Id, ItemTypeWay}) + data.Findex.AddWay(way, fName, data) } case *osmpbf.Relation: // Ignore diff --git a/s2.go b/s2.go new file mode 100644 index 0000000..12ff202 --- /dev/null +++ b/s2.go @@ -0,0 +1,98 @@ +package tiles + +import ( + //"fmt" + "github.com/golang/geo/s2" +) + +type S2Index map[s2.CellID]([]FeatureRef) + +func (si S2Index) AddWay(w Way, fname string, data *OsmData) { + c := s2.EmptyCap() + + for _, node := range w.GetNodes(data.Nodes) { + c = c.AddPoint(s2.PointFromLatLng(s2.LatLngFromDegrees(node.Lat(), node.Lon()))) + } + + if c.IsEmpty() { + return + } + + rc := &s2.RegionCoverer{MaxLevel: 30, MaxCells: 10} + cu := rc.FastCovering(c) + for _, cid := range cu { + si[cid] = append(si[cid], FeatureRef{w.Id, ItemTypeWay, fname}) + for l := cid.Level(); l > 0; l-- { + cid = cid.Parent(l - 1) + if _, ok := si[cid]; !ok { + si[cid] = make([]FeatureRef, 0) + } + } + } +} + +func (si S2Index) GetFeatures(nwPt, sePt Pointer, zoom int64, data *OsmData) []FeatureRef { + + r := s2.RectFromLatLng(s2.LatLngFromDegrees(nwPt.Lat(), nwPt.Lon())) + r = r.AddPoint(s2.LatLngFromDegrees(sePt.Lat(), sePt.Lon())) + + rc := &s2.RegionCoverer{MaxLevel: 30, MaxCells: 10} + + cu := rc.Covering(r) + + visitCid := make(map[s2.CellID]bool) + visitF := make(map[int64]bool) + ret := make([]FeatureRef, 0) + + for _, cid := range cu { + if v, ok := si[cid]; ok { + ret = si.VisitDown(cid, v, visitF, ret) + + for l := cid.Level(); l > 0; l-- { + cid = cid.Parent(l - 1) + ret = si.VisitUp(cid, visitCid, visitF, ret) + } + } + } + //fmt.Println( len(ret)) + return ret +} + +func (si S2Index) VisitUp(cid s2.CellID, visitCid map[s2.CellID]bool, visitF map[int64]bool, ret []FeatureRef) []FeatureRef { + if visitCid[cid] { + return ret + } + visitCid[cid] = true + + for _, f := range si[cid] { + if !visitF[f.Id] { + ret = append(ret, f) + visitF[f.Id] = true + } + } + return ret +} + +func (si S2Index) VisitDown(cid s2.CellID, fr []FeatureRef, visitF map[int64]bool, ret []FeatureRef) []FeatureRef { + + for _, f := range fr { + if !visitF[f.Id] { + ret = append(ret, f) + visitF[f.Id] = true + } + } + + if !cid.IsLeaf() { + chs := cid.Children() + for i := 0; i < 4; i++ { + if v, ok := si[chs[i]]; ok { + ret = si.VisitDown(chs[i], v, visitF, ret) + + } + } + + } + + return ret + +} From a141d7f2f6d83a96a967acbf4fd687e06fb40b7a Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Tue, 15 Mar 2016 19:21:06 +0200 Subject: [PATCH 3/9] fix big zooms --- draw.go | 2 +- s2.go | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/draw.go b/draw.go index 87b77b4..1fe9ae8 100644 --- a/draw.go +++ b/draw.go @@ -21,7 +21,7 @@ func DrawTile(nwPt, sePt Pointer, zoom int64, data *OsmData, debug bool) (image. // Plot some features //for fName, features := range data.Features { - for _, feature := range data.Findex.GetFeatures(nwPt, sePt, zoom, data) { + for _, feature := range data.Findex.GetFeatures(nwPt, sePt, zoom) { if mz, ok := mapFeatures[feature.FName]; ok { if mz.MinZoom > zoom { continue diff --git a/s2.go b/s2.go index 12ff202..9012c70 100644 --- a/s2.go +++ b/s2.go @@ -31,7 +31,7 @@ func (si S2Index) AddWay(w Way, fname string, data *OsmData) { } } -func (si S2Index) GetFeatures(nwPt, sePt Pointer, zoom int64, data *OsmData) []FeatureRef { +func (si S2Index) GetFeatures(nwPt, sePt Pointer, zoom int64) []FeatureRef { r := s2.RectFromLatLng(s2.LatLngFromDegrees(nwPt.Lat(), nwPt.Lon())) r = r.AddPoint(s2.LatLngFromDegrees(sePt.Lat(), sePt.Lon())) @@ -48,10 +48,11 @@ func (si S2Index) GetFeatures(nwPt, sePt Pointer, zoom int64, data *OsmData) []F if v, ok := si[cid]; ok { ret = si.VisitDown(cid, v, visitF, ret) - for l := cid.Level(); l > 0; l-- { - cid = cid.Parent(l - 1) - ret = si.VisitUp(cid, visitCid, visitF, ret) - } + } + for l := cid.Level(); l > 0; l-- { + cid = cid.Parent(l - 1) + ret = si.VisitUp(cid, visitCid, visitF, ret) + } } //fmt.Println( len(ret)) @@ -59,12 +60,16 @@ func (si S2Index) GetFeatures(nwPt, sePt Pointer, zoom int64, data *OsmData) []F } func (si S2Index) VisitUp(cid s2.CellID, visitCid map[s2.CellID]bool, visitF map[int64]bool, ret []FeatureRef) []FeatureRef { + v, ok := si[cid] + if !ok { + return ret + } if visitCid[cid] { return ret } visitCid[cid] = true - for _, f := range si[cid] { + for _, f := range v { if !visitF[f.Id] { ret = append(ret, f) visitF[f.Id] = true From c916e02a35afb9ebf620bbea1e84c327fb766014 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Tue, 15 Mar 2016 19:58:40 +0200 Subject: [PATCH 4/9] fix add --- s2.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/s2.go b/s2.go index 9012c70..c2624a4 100644 --- a/s2.go +++ b/s2.go @@ -22,12 +22,6 @@ func (si S2Index) AddWay(w Way, fname string, data *OsmData) { cu := rc.FastCovering(c) for _, cid := range cu { si[cid] = append(si[cid], FeatureRef{w.Id, ItemTypeWay, fname}) - for l := cid.Level(); l > 0; l-- { - cid = cid.Parent(l - 1) - if _, ok := si[cid]; !ok { - si[cid] = make([]FeatureRef, 0) - } - } } } From ed3900b25aa998a33ae26e7d260f6913e7a6a7d1 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Tue, 15 Mar 2016 20:04:44 +0200 Subject: [PATCH 5/9] revert last --- s2.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/s2.go b/s2.go index c2624a4..9012c70 100644 --- a/s2.go +++ b/s2.go @@ -22,6 +22,12 @@ func (si S2Index) AddWay(w Way, fname string, data *OsmData) { cu := rc.FastCovering(c) for _, cid := range cu { si[cid] = append(si[cid], FeatureRef{w.Id, ItemTypeWay, fname}) + for l := cid.Level(); l > 0; l-- { + cid = cid.Parent(l - 1) + if _, ok := si[cid]; !ok { + si[cid] = make([]FeatureRef, 0) + } + } } } From d6490544c898b8ec1c819767627873c8c4424105 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Wed, 16 Mar 2016 06:48:09 +0200 Subject: [PATCH 6/9] fix closed paths --- draw.go | 1 - 1 file changed, 1 deletion(-) diff --git a/draw.go b/draw.go index 1fe9ae8..cf2b33d 100644 --- a/draw.go +++ b/draw.go @@ -113,6 +113,5 @@ func drawPolyLine(img *image.RGBA, cc color.Color, coords [][]float64) { } } - path.Close() path.Stroke() } From fee5a50fe458e04973e8f4f117d9bbee2a6a080c Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Wed, 16 Mar 2016 12:00:52 +0200 Subject: [PATCH 7/9] log info --- pbf.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pbf.go b/pbf.go index 3391044..5b39df5 100644 --- a/pbf.go +++ b/pbf.go @@ -3,6 +3,7 @@ package tiles import ( "fmt" "io" + "log" "os" "github.com/qedus/osmpbf" @@ -130,5 +131,8 @@ func ParsePbf(path string) (*OsmData, error) { } } + log.Println("Num s2Cells", len(data.Findex)) + log.Println("Num ways", len(data.Ways)) + log.Println("Num nodes", len(data.Nodes)) return data, nil } From 38710914b8b2f53c15e296078dd083e3a2444f95 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Wed, 16 Mar 2016 12:10:54 +0200 Subject: [PATCH 8/9] fix ways crossing over the tile --- draw.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 15 deletions(-) diff --git a/draw.go b/draw.go index cf2b33d..e8287a9 100644 --- a/draw.go +++ b/draw.go @@ -7,6 +7,7 @@ import ( "image/draw" "time" + "github.com/golang/geo/s2" "github.com/llgcode/draw2d/draw2dimg" ) @@ -15,12 +16,16 @@ const tileSize = 256 func DrawTile(nwPt, sePt Pointer, zoom int64, data *OsmData, debug bool) (image.Image, error) { t := time.Now() + // s2.Points of tile 4 vertex + p1 := s2.PointFromLatLng(s2.LatLngFromDegrees(nwPt.Lat(), nwPt.Lon())) + p2 := s2.PointFromLatLng(s2.LatLngFromDegrees(sePt.Lat(), nwPt.Lon())) + p3 := s2.PointFromLatLng(s2.LatLngFromDegrees(nwPt.Lat(), sePt.Lon())) + p4 := s2.PointFromLatLng(s2.LatLngFromDegrees(sePt.Lat(), sePt.Lon())) // Create white image img := image.NewRGBA(image.Rect(0, 0, tileSize, tileSize)) draw.Draw(img, img.Bounds(), image.White, image.ZP, draw.Src) // Plot some features - //for fName, features := range data.Features { for _, feature := range data.Findex.GetFeatures(nwPt, sePt, zoom) { if mz, ok := mapFeatures[feature.FName]; ok { if mz.MinZoom > zoom { @@ -35,28 +40,75 @@ func DrawTile(nwPt, sePt Pointer, zoom int64, data *OsmData, debug bool) (image. //TODO case ItemTypeWay: way := data.Ways[feature.Id] - //TODO: this ignores ways crossing over the tile - withinBounds := false + var ( + // previous plotting point, nil if already added to coords or first time + prevCoords []float64 + // previous s2 Point. Always present, except first time + prevS2Point s2.Point + ) + coords := [][]float64{} + prevWithinBounds := false + first := true for _, node := range way.GetNodes(data.Nodes) { + if first { + first = false + x, y := getRelativeXY(nwPt, node, float64(zoom)) + if node.Lon() > nwPt.Lon() && node.Lon() < sePt.Lon() && + node.Lat() < nwPt.Lat() && node.Lat() > sePt.Lat() { + coords = append(coords, []float64{x, y}) + prevWithinBounds = true + } else { + //x, y := getRelativeXY(nwPt, node, float64(zoom)) + //a1 := s2.PointFromLatLng(s2.LatLngFromDegrees(node.Lat(), node.Lon())) + prevS2Point = s2.PointFromLatLng(s2.LatLngFromDegrees(node.Lat(), node.Lon())) + prevCoords = []float64{x, y} + prevWithinBounds = false + } + continue + } + if node.Lon() > nwPt.Lon() && node.Lon() < sePt.Lon() && node.Lat() < nwPt.Lat() && node.Lat() > sePt.Lat() { - withinBounds = true - break + if prevWithinBounds == false { + if len(prevCoords) > 0 { + coords = append(coords, prevCoords) + } + } + x, y := getRelativeXY(nwPt, node, float64(zoom)) + coords = append(coords, []float64{x, y}) + prevWithinBounds = true + prevCoords = nil + } else { + x, y := getRelativeXY(nwPt, node, float64(zoom)) + a1 := s2.PointFromLatLng(s2.LatLngFromDegrees(node.Lat(), node.Lon())) + if prevWithinBounds == true { + coords = append(coords, []float64{x, y}) + prevCoords = nil //already added to coords + } else { + + if s2.SimpleCrossing(p1, p2, a1, prevS2Point) || s2.SimpleCrossing(p1, p3, a1, prevS2Point) || s2.SimpleCrossing(p2, p4, a1, prevS2Point) { + if len(prevCoords) > 0 { + coords = append(coords, prevCoords) + } + coords = append(coords, []float64{x, y}) + prevCoords = nil + } else { + if len(coords) > 0 { + drawPolyLine(img, color.Black, coords) + coords = coords[:0] + } + prevCoords = []float64{x, y} + } + } + prevS2Point = a1 + prevWithinBounds = false } } - if !withinBounds { - continue + if len(coords) > 0 { + drawPolyLine(img, color.Black, coords) } - coords := [][]float64{} - for _, node := range way.GetNodes(data.Nodes) { - x, y := getRelativeXY(nwPt, node, float64(zoom)) - coords = append(coords, []float64{x, y}) - } - - drawPolyLine(img, color.Black, coords) - case ItemTypeRelation: //TODO } @@ -113,5 +165,7 @@ func drawPolyLine(img *image.RGBA, cc color.Color, coords [][]float64) { } } + // TODO check area tag ? + // path.Close() path.Stroke() } From 44c0cd6f19c90e54f2c94dc3eb129efb13cc2e86 Mon Sep 17 00:00:00 2001 From: Jamil Djadala Date: Wed, 16 Mar 2016 12:16:52 +0200 Subject: [PATCH 9/9] add/modify some features --- features.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/features.go b/features.go index 0ac1488..0cd13ed 100644 --- a/features.go +++ b/features.go @@ -16,14 +16,56 @@ var mapFeatures = map[string]Feature{ {"natural", "coastline"}, }, }, - "borders": { + "borders2": { MinZoom: 0, Tags: []Tag{ {"admin_level", "2"}, }, }, - "all-other-roads": { + "borders3": { + MinZoom: 6, + Tags: []Tag{ + {"admin_level", "3"}, + }, + }, + "borders4": { + MinZoom: 8, + Tags: []Tag{ + {"admin_level", "4"}, + }, + }, + "borders5": { + MinZoom: 10, + Tags: []Tag{ + {"admin_level", "5"}, + }, + }, + "borders6": { + MinZoom: 12, + Tags: []Tag{ + {"admin_level", "6"}, + }, + }, + "borders7": { + MinZoom: 12, + Tags: []Tag{ + {"admin_level", "7"}, + }, + }, + "borders8": { + MinZoom: 13, + Tags: []Tag{ + {"admin_level", "8"}, + }, + }, + "borders9": { MinZoom: 14, + Tags: []Tag{ + {"admin_level", "9"}, + }, + }, + "all-other-roads": { + MinZoom: 12, Tags: []Tag{ {"highway", "unclassified"}, {"highway", "residential"}, @@ -41,7 +83,7 @@ var mapFeatures = map[string]Feature{ }, }, "major-ish-roads": { - MinZoom: 12, + MinZoom: 9, Tags: []Tag{ {"highway", "primary"}, {"highway", "secondary"}, @@ -49,7 +91,7 @@ var mapFeatures = map[string]Feature{ }, }, "major-major-roads": { - MinZoom: 10, + MinZoom: 6, Tags: []Tag{ {"highway", "motorway"}, {"highway", "trunk"},