From 9938c0ee873a57325c745604c44ecd93490bdcc8 Mon Sep 17 00:00:00 2001 From: prescientmoon <git@moonythm.dev> Date: Tue, 4 Mar 2025 18:05:30 +0100 Subject: [PATCH] Start working on angelfold february report --- .../echoes/angelfold-2025-february/index.dj | 143 ++++++++++++++++++ .../angelfold-2025-february/tokei-output.png | Bin 0 -> 50863 bytes content/echoes/angelfold.dj | 19 +++ content/echoes/arcaea-pookies/index.dj | 6 +- content/echoes/arcaea.dj | 1 + content/echoes/games/index.dj | 5 + content/echoes/yugioh-my-beloved.dj | 12 -- src/html.rs | 42 ++++- 8 files changed, 208 insertions(+), 20 deletions(-) create mode 100644 content/echoes/angelfold-2025-february/index.dj create mode 100644 content/echoes/angelfold-2025-february/tokei-output.png create mode 100644 content/echoes/angelfold.dj delete mode 100644 content/echoes/yugioh-my-beloved.dj diff --git a/content/echoes/angelfold-2025-february/index.dj b/content/echoes/angelfold-2025-february/index.dj new file mode 100644 index 0000000..4b91444 --- /dev/null +++ b/content/echoes/angelfold-2025-february/index.dj @@ -0,0 +1,143 @@ +{ role=config } +``` =toml +``` + +{ role=description } +::: +Rewriting a game from Rust to Odin, smooth screen transitions, plenty of UI rewrites, and planting the seeds of procedural animation. +::: + +# Angelfold progress report — February '25 + +Angelfold is a non-euclidean action/puzzle platformer I've been working on in my free time. For more details, check out the [main post][angelfold] about the game. I had been working on the game on and off for months, although a lot of it was (and still is!) exploratory work, or simply pondering the implications of the games' rules (ala [this talk][Jon Blow — truth in game design]). + +[angelfold]: /echoes/angelfold +[Jon Blow — truth in game design]: https://www.youtube.com/watch?v=C5FUtrmO7gI + +::: toc +::: + +## The Rust → Odin rewrite + +Most of my time last month has been taken by an effort to rewrite everything I had from Rust to Odin. While the number of lines of code is not a great metric for anything, this picture should give you an idea of the relative scale of the rewrite: + +{ src="tokei-output.png" alt="7413 lines of rust code (out of which 5959 are actual code), split across 36 files" } +::: image-figure +Summary of the lines of count I had as part of the Rust version of Angelfold. Generated using [tokei][]. + +[tokei]: https://github.com/XAMPPRocky/tokei +::: + +### Why??? + +The main reason I went ahead with the rewrite is Rust's terrible compilation speeds, and the ecosystem's blunders when it comes to hot code reloading. When looking for advice on how to improve said compilation speeds, I came across two different styles of posts. + +For exhibit A, we have discussions like [this one][rust forum compilation speed discussion], where the general consensus is that compilation speeds are either not an issue in the first place, that they shouldn't matter (as the only important bit is the speed at which [RLS][rust-language-server] (in modern terms, [rust analyzer][]) or [cargo check][] produce their output), or that (and this is a [quote][perhaps we should practice the discipline of the mathematician]) "perhaps we should all practice more of the discipline of the mathematician and practice less of the "hack it and see" style of the JavaScript programmer". In particular, the sentiment of spending hours without compiling the code and relying on compilation errors to guide correctness is something I've seen echoed all over Reddit and similar platforms. + +Truth be told, I do think there's some truth to that! I am studying mathematics at uni, and there is a given discipline one forms when formalizing proofs (although that's not to say said discipline is perfect — that's why we have TAs checking students' proofs, or peer review for academic papers). Having a functional programming background, a side of me is sympathetic to the whole type driven development / "make impossible states unrepresentable" style of coding. At the same time, the truth is that a lot of coding just _isn't like that_. + +For instance, tweaking gameplay-related values / logic is something that requires countless modifications to the code. A 2x speedup in compilation speeds might sound insignificant, but it makes the process so much nicer! The rust ecosystem does provide a way to tweak inline values via the [inline_tweak][] crate, although that does require the foresight of including the macro in the code in the first place. Still, I just wanted to be able to modify behaviour code and be able to test the results instantly — something Rust fought really hard to prevent me from doing. + +[rust forum compilation speed discussion]: https://users.rust-lang.org/t/why-is-compilation-time-such-a-big-deal-for-you/41063/ +[rust-language-server]: https://github.com/rust-lang/rls +[rust analyzer]: https://rust-analyzer.github.io/ +[cargo check]: https://doc.rust-lang.org/cargo/commands/cargo-check.html +[perhaps we should practice the discipline of the mathematician]: https://users.rust-lang.org/t/why-is-compilation-time-such-a-big-deal-for-you/41063/18 +[inline_tweak]: https://docs.rs/inline_tweak/latest/inline_tweak/ + +The second kind of posts I found were those giving concrete tips on improving compilation speeds (here's a good [example][tips for faster rust compile times]). I followed as many tips as I could from articles of the like. I removed big dependencies like [`serde`][serde] in favour of smaller alternatives like [`nanoserde`][nanoserde], I moved to compiling using [`cranelift`][cranelift], I switched my linker to [`mold`][mold], removed lots of uses of procedural macros (in my own code, at least), enabled experimental parallel compilation, played with different optimization levels for dependencies/dependencies that include procedural macros, and more. If a tip is missing from this list, it's likely because I forgot to include it, not because I haven't tried it. In the end, I ended up with compilation speed of around `3s`. For context, I'm coding on a laptop with an `Intel i7-8565U` and 8GB of RAM — a bit dated, but it is what it is. + +[tips for faster rust compile times]: https://corrode.dev/blog/tips-for-faster-rust-compile-times/ +[serde]: https://serde.rs/ +[nanoserde]: https://github.com/not-fl3/nanoserde +[cranelift]: https://cranelift.dev/ +[mold]: https://github.com/rui314/mold + +### Rust hates hot code reloading + +Ok, the title might be a bit of a hyperbole, but hear me out. Even if compilation speeds were instant, having to recreate the same conditions to try something out after each tweak would be horrible. Hot code reloading allows swapping out most of the codebase for a newer version without throwing away the state. In Rust land, this is usually accomplished by compiling most of the codebase as a dynamic library, and having the static entrypoint swap it out between frames when changes are detected. An out of the box solution is provided by the [`hot_lib_reloader`][hot_lib_reloader] crate. + +[hot_lib_reloader]: https://docs.rs/hot-lib-reloader/latest/hot_lib_reloader/ + +While the aforementioned crate works nicely in isolation, a lot of the ecosystem is... just not built with that in mind. The rust version of my codebase was using [`macroquad`][macroquad] for rendering (I'm planning to write my own once more of the gameplay is actually there), but macroquad holds internal state that simply goes away when swapping out the dynamic lib, oops! Were I using [`raylib`][raylib], I could simply enable the compilation flag that turns raylib into a dynamic library and have everything working (of course, all the changes I'm talking about here would be disabled in release mode)! Turning macroquad into a dynamic library is a very difficult task I'll talk about a bit later. The recommended solution (for example, the one described in the "If necessary, create indirections" section of [this article][hot reloading rust]) seems to be creating a layer of indirection, where the dynamic section of the codebase defines a `Renderer` trait, and then accepts a `Box<dyn Renderer>` from the static entrypoint in order to do all the rendering through. This way, all calls to the renderer are technically made by the static entrypoint, thus `macroquad` doesn't have to be reloaded each time. + +:::: figure +``` rust +pub trait Renderer { + fn alloc(&self) -> &bumpalo::Bump; + ... + + fn is_key_down(&self, key: KeyCode) -> bool; + fn mouse_position(&self) -> Vec2; + ... + + fn camera_stack(&self) -> &CameraStack; + fn push_camera(&mut self, transform: Affine2); + ... + + fn clear_background(&mut self, color: Color); + fn draw_circle(&mut self, center: Vec2, r: f32, color: Color); + ... + + fn screen_dimensions(&self) -> Vec2; + fn set_cursor(&mut self, cursor: CursorIcon); + ... +} +``` +::: caption +Example `Renderer` trait for creating indirection when calling `macroquad`. +::: +:::: + +[macroquad]: https://macroquad.rs/ +[raylib]: https://www.raylib.com/ +[hot reloading rust]: https://robert.kra.hn/posts/hot-reloading-rust/ + +Notice the [`bumpalo`][bumpalo] usage in the code block above? `Bumpalo` is a crate that provides an arena allocator implementation. An arena allocator can be thought of as a preallocated block of memory, where allocations always happen by moving a pointer that tracks the amount of memory used so far forwards. At any point, we can trivially clear out the entire arena by simply moving the pointer back to the beginning of the region. This is super useful in games, where lots of state exists until the end of the current frame only. Moreover, bumping a pointer is much more efficient than asking the OS for more memory each time, while also simplifying memory management for the programmer (at least in theory — more on this later). + +[bumpalo]: https://docs.rs/bumpalo/latest/bumpalo/ + +But guess what, it turns out `bumpalo` uses a static `EMPTY_CHUNK` pointer which it compares things to on cleanup, which means bad free errors start occurring the moment you try hot reloading it. I asked around in the official rust discord server, and people told me that is the intended behaviour, thus I didn't bother opening an issue (maybe I should've? Maybe the people in the discord were wrong?), and simply forked away the repo and fixed the issue myself. Having to fork libraries is a bit of a common theme with this project (I also had to fork `macroquad` for various issues, but those are less fundamental and thus beside the point). + +While [`egui`][egui] is one of the prototypical [examples][egui hot-reloading example] for hot-reloading, I couldn't for the life of me get [`egui-miniquad`][egui-miniquad] to hot reload without errors, and thus gave up on trying to use it for UI. + +[egui]: https://github.com/emilk/egui +[egui hot-reloading example]: https://github.com/rksm/hot-lib-reloader-rs/tree/master/examples/hot-egui +[egui-miniquad]: https://github.com/not-fl3/egui-miniquad + +The obvious solution to all these issues is to try loading the various problematic libraries dynamically. Heck, the [aforementioned article][tips for faster rust compile times] even recommends doing it to improve compile times! Oh, sweet summer child... If only it was this easy. First of all, in rust land, the consumer of a library cannot decide to simply force the library into being dynamic — the library has to declare that by itself inside `Cargo.toml`. Thankfully, a tool exists to automate the creation of dynamic wrapper libraries around crates — see [this article][speeding up incremental rust compilation with dylibs] for details. In reality, I couldn't get that to work for any of my important dependencies. + +The article does mention the [diamond dependency][] problem as a limitation of the tool, and for good reason — it is one hell of a limitation. The rust compiler does not allow a static library to be included more than once in the resulting artifacts, i.e. a dependency cannot be statically included both inside the main entrypoint _and_ inside one of its dynamically linked dependencies. This is... problematic to say the least. The rust ecosystem is filled with tiny NPM-style common dependencies that appear many levels down the dependency tree. The article recommends either forking all the libraries involved and making them point to a dynamic version of the common dependencies, or trying to PR the upstream library into enabling dynamic linking as a possibility for their library. Either of them is unfeasible when the issue occurs for a dozen of libraries, all many layers deep inside the dependency tree (that is, I would have to fork dozens of intermediate libraries, which is just not feasible...). + +[speeding up incremental rust compilation with dylibs]: https://robert.kra.hn/posts/2022-09-09-speeding-up-incremental-rust-compilation-with-dylibs/ +[diamond dependency]: https://robert.kra.hn/posts/2022-09-09-speeding-up-incremental-rust-compilation-with-dylibs/#limitation-the-diamond-dependency-problem + +If you do want to try hot reloading in rust, beware of the many footguns. For instance, my main binary depends on `macroquad`, while the dynamic library depends on [`glam`][glam] (a cool linear algebra library that `macroquad` depends on as well). "Everything sounds fine so far", I sense you thinking — WRONG. This will lead to horrible memory corruption and break all your rendering code. Why? Because `macroquad` disables the SIMD support in `glam` (in order to perform one less conversion when giving the data to the GPU, I've heard?), which in turn makes `glam` use a different memory layout for its vectors (since the memory alignment required for SIMD operations is no longer there). But guess what — since the dynamic library component of the codebase does not depend on `macroquad`, and SIMD is enabled by default in `glam`, the Rust compiler will simply compile `glam` with said feature flag active when compiling the dynamic library by itself (which is obviously something you'll be doing a lot of when hot code reloading), thus causing the two sides of the abyss that is dynamic linking to use different memory layouts... + +[glam]: https://docs.rs/glam/latest/glam/ + +### You might not need the safety rust guarantees + +Rust's safety guarantees are super nice, but over the course of the last month, I've kind of came to terms with the fact that... I don't really need them — not for this project at least. I'm sure memory management becomes a real problem in non-tiny teams, but it feels trivial when working on a project by myself. I haven't encountered a single use-after-free error throughout my time with Odin. Although I've used Rust for many projects before starting this game, and I feel like I've very much internalised the way Rust treats lifetimes, I still have moments when I'm refactoring and Rust starts yelling at me for doing things the wrong way, only for me to have to spend way too long thinking about the best way to make the compiler happy. Now, "that's a good thing — it means the compiler is preventing potential errors", I hear you say. I'm sure there's cases when this is the case, but for this game, that just hasn't been true. Heck, my experience refactoring Odin code has proven that memory management bugs are like... not that hard to avoid when working on a project by yourself. + +The usual counter-argument to what I'm describing is that future-me is almost a different person than present-me, and that things will become a lot more dangerous when I'm revisiting pieces of code a few months into the future. I guess we'll have to revisit the issue in a few months, although I feel like the set of practices I've picked up along my Odin journey should help alleviate that a little, oh well... + +The other counter-argument I heard brought up is that unsafe-rust is much safer than the language's alternatives, and that I can always just throw `unsafe` at the issue. I disagree. Unsafe rust is incredible unergonomic to work with. I have considered just always using `*mut` instead of `&mut` throughout my codebase, but things as simple as accessing a struct's property are not possible with `*mut` without casting into a `&mut` first, which is just incredibly verbose. + +The other extreme I've heard people recommend is always wrapping things in `Arc<Mutex<_>>` or whatnot and calling it a day. While this does solve the issue to some extent, it's also incredibly unergonomic to work with, while also impacting (to a very very small extent) performance for no reason. + +There's also patterns you just... cannot express (nicely) in Rust. For instance, I cannot have a struct which stores a custom allocator together with two vectors allocated with said allocator. Ok, it _is_ possible by instead storing a reference to said allocator, and taking in a lifetime parameter and... let's stop for a second. This is all incredibly annoying to do, and trivial in Odin. That's not to mention how the [`allocator_api`][allocator_api] seems to have [stalled][allocator_api has stalled] long ago (which is fine by the way — this is a volunteer run project), while custom allocators are integrated into the language out of the box in Odin. + +[allocator_api]: https://doc.rust-lang.org/beta/unstable-book/library-features/allocator-api.html +[allocator_api has stalled]: https://www.reddit.com/r/rust/comments/18yhmij/comment/kgb3jbt/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button + +### Why Odin + +## Undo/redo + +## The many UI rewrites + +## Smooth screen transitions + +## The entity system +## Further work — the seeds of procedural animation diff --git a/content/echoes/angelfold-2025-february/tokei-output.png b/content/echoes/angelfold-2025-february/tokei-output.png new file mode 100644 index 0000000000000000000000000000000000000000..d3796de863c57c7ece294b1b0410bb596969cbdb GIT binary patch literal 50863 zcmeFZcTm&Y`!0%`t!za>L_qo$3jzX4?^q}T0!r^Fy$7U(8m#mp(xjvG5_%611?jy8 zNa!U%fJhAxLhe$(zjNlEbLP(Z<IbIXXD$QGXC$At*1O*Kd7tN5hCb6!zI1`*0tE%d zC6y-%S`-xLcqk~&kpB4#{L38V9|#4-zZ5D84|Tj#H>RQ9I=aW-wxPGRhyBj}_2oTF zp-1);UAndlt5ekLj3`r-scBCMuHn=R)xda_;qJuc=MNu#Wcj!1vP1rx2fmt5(t52{ z2p#G{FNMzE6plT=MD+3J7{K_=_zisUtB1}=64-QA409;di+cEbIV5Wfs@EULlZg<T zlTCKsNPXj)Zua$xor(_3%i3pXgz+Ff;m|~O=7##)_@S>-&vL|%^LqxuY8pK(iu*0- z!VN}w<MUF+OPY?e{2R-gF`_1VCzG*}XTW<6-nW;Trl^AQazf(U)jXuCYc)Ki;?0U^ z_Vktic3hCcDbwsFNjzG{F0P3+gw)n{&!YIGp3*avtkD&5#$<9P&5iL4kMzAYP^jYV z`PaO)gg4`f^YrU}Bf94W3b$^igIiE!Hfayx&;L52pm6zm;6eH4&~=iF@b{lX==J}_ z(aUt{0isJ{@zaE#6i54GS6Elp#{Yc0PJ^mXmVa76P@qT<Le4u}l^Oq}Ua)h5+FyRh zyhDmzP&60${Ylq)JHh(A6Cs|vOmsuuD)?)fwYis^rM*g0pWkFwyuvhJ|6f<s3D{aQ zN0Y0BZM7H2XlY435p^k3ne66H@zG)-A@2{n+L6`YY0%VY1>@Jz9v2QwwEsMc3H+2) z5*&OosfnBQ-sh$w>uYIG)Tpl;*hGJ<U%dHEd4X#w9-)x8@A2+GC*;Wyt}d{{AT5iL z`ufa#@))uMTCBiwTdPOA(z=HlJibt2VxIAzL7LOTwpXWL5qEsD)Y&dtV?+9sim1Mn z@@Lpy_x$j2FO(J9vu{e&TvWwx5^KMdG{BSp`(Jl4ipO3J?%%RFHv-#Av>xjAV+-)J z(m(H`wus4zHxWNzFI93bp2oiGevIf@P-cg8Sj31Dt^4F8y_LfF+LXD6z6+JqV#M?; z9vMy6kn)!MYu9@O`(l$?*+%ahFJS|AdSH^DueZg2)m76ei`cm3-u@&y|90)kn3#`! z{i3dT#78C<N9%XLB8`G#>U!if*3l2sa0{1sLy@?VQ2LZ;VX+ax@jU=t_>!q8--Lr` zK$9w0n>~KhTKAQRu^gIL(}df-y~d`}-Ur*geV>MRDXtUG)Dz>BLJCXmjg9rG5K-ay z%oVKx>4W{bi2%0)Vt_aPSp0FunD5$VLJI#1RLe}rxYv2CEL_W!kI>|2w$P;qe{N<Z zpjKOJ(?c~d$|PboEZYKeeqN8+Kky0VHukjffx!LCnnj6ce?NI$>IA{>N=*M5Q|v*& z+{j}HnqQMocE@r`ztXqQeXKdqTkGzn<yu%mw0Ky^-^A`ITXr2i$*C5yo|^B&07>2_ z97zK28dM+F7f*8cc#R4MT7QVZ^9_CHcQhW}K5qF|^3{1ScyIVsmtc`#^u{g1(@!%) zT84anBg>H)*>#T;mZn8t?O$HI;=t+GV^_a@a(x=xD8RkDQS|4XP0no)WqDje$nmWx zoSbGrY1x#u{S~;9$0f3l=u(1Cp*yuR*)f%(Fh9onQb6+8w@b0Josl<kY^x%o60t6l zgl=O`xPLX=`Vu-ot0D~7GeR|4Dr<TNM>C!XVZMczzqxq)MB(EP#m)`7iaodU2Ml!g z$GV1ZQn3=W(45IrFU>Cf9;UfrtOQ{xXXkjc%vRKa=&z}6Iz}X(Zl3Cy#`P6wSr!Y< zy5$56<ocC<dPY9pVId9`C0o{X8W-VuSgN10+nK-g3^TaP#r5*cPO#xuDS7v+9Crw2 zy5=)pRcHTeCQc;!Wka8sJUjWhx*eH_?^fxR@#{`gZ!jPZr1F`|x4_^UH}q)>1Z^4B zRF)N;M=W9j0|j|5bwC%NgkG#Dtt@?s)V}g#0A_NRE@u0ZZ2R!e54(nZ(yts(L1B`> z7D33Ca2IoiZY8w$1S>_ZU748vb@il6rEO;qpM+$*yI|TnP_$7N^|e@4gXxJ;x__l9 zjm@aw9w9-Qtxq@6(7^oK#Mt(@RPY$ndhe?mqn5vtF@nFZ{%yI>ZL7=aKC&9C7&~cK zYl2-S{ro78K<YB(G&VF}rdzFh>zsJYak*WIJof!jlio}t%55sYF}L~WhW^fmK9ikQ z&KnH<?`y5ru_4_Ft)YTZiEIvyCkL?I8v)Yw^(y?i4i?2O@yjNY7H%eaJo=YD^7%@b zS&P-ake-=J*kt;B^4zP1%vo)(wj@CsLA%CAzh`*Erj>fcL#B+I7k(B9UX7D1`51U$ zA~{I-%UHYM<_}GW2rcW&bcP7?t&F=(mTaRJ4`PRT>0+AGvTgUyisA6?Z+=xx@RfL< zh>2Ca3(0HLF}5u;F3~ICWIxcaF6=7rO3QY(d*T!Mx%X>*2+4y6E|>~W80J0i5@#x< zZKW-l-L-jg7<XuQYf!n0#nA6T`k{hCcK=;6p~?TS?A@{Hjhjsm6u_gHz48;F`F*ds zD>fO6h5<V%qb;(LxV{a^JbhPrLiLTZFM-d}428mz;ZrYOY}D`2A~sPh>J_{>%@`hq zN2C;t#%JXFv!mR|+)Hr}r`Hql8nL28_EFBs%H}fC`)nIC9qm8MN-B5vmF8Jp$qY7s zgj<elMn0N20Ckl1oosBZd9kVZ;pv9panMj)f>XlD?rbB`yYj03Xrk>!`-f_$A~=(y zcm|6yPKc=uP0?&=8yE8QnZ{Dhi^boMPQf0AGEbKh??VSd<<bmeX6l9)Z=4Q^mf0>Y z3tXkU!{?>;;i1BkLdk|a|HEbrvG7T*v&*k|HMKNU2zQ>NFY=Y3RA1J!^<JhcxYsF2 zb+c1{&q$>wwvBZ;>(c&MWA)BLs{6agJX*rmyYt68l-de7PZwRCvefRxDjB+%Fcwg3 zLUw7VmAR{LtH|+ifwVZg^-=rmLKb~^h}n%ChF66TXwqW>@^T=y#MUZ<A5L^VN92Ge zQ&nCC1>cU&AE#KjmiYY$soyX2?bbtGExm%c@iepT@$^8ElKUmQquff(qvzBO10QgZ zv+FO&%X+#*a4YJ<d;OYVdpWr>0a?Awj!4%vFCRC<03V`!n=*7}s@Eck#CbniL1EA6 z=v4EH`>E@5oA8rudc(l7dQzco#cq!KqJiiP{_NSq&IBfb8lm5}e;}<x?l)CYpZ`i( zDr&Y_w2ufJ<ebXoiKXf`rB5mPsOyCMq0h}JclUgGltcKc$PSj3?Pj__zFK~-V~EhT z<#>hzhEZOhWdR?L25-kreZwSv8kUQ{FFp8W6xw50Mj-P>GDPaniq6$upP6?aPnI|1 zM$yFMy}C|EKIz_#KR0B5v)BC5$*o@Vy@S}D(2)03-L}a1F`^YHq;c18#eYSqJ}rw_ zyW!qGL5OYerqzhYL)8r9LprA@EBN|O`=qN?S2SZK7p>Y{CgX2+yvi<Cb#PG3qmzfM zUA>#us^D$;C*nPvuru}lK~E-X0rR|ng6TogN54P$>owy4i$`_}KP<`(?j|sPC>YyU z;j;+6m0<8c{c;XdQmAoKfd$SdGI7#hW&1gvGQem3KYi@?sm>Shm_JMSn`x))e;w)E zvW`!8`OokPXzu-Qj+vdp&HHWyA~mw{@N?$e>)IKAGah=iyX8Nw{Exq!v{(NZF!p(T zoUYMb#@K=q#g|5KC7#Rw<7vMy<)r=V@%X3yWOoYJ7;o&KIj7iqwDlkC{QuIUuiF68 z&t0kU*)4$^L#fW4oq5$0k>Ba6DNgnCTFEZ}CGr7Ottu^5)%6zIX07f#4Vx3<tY+aD zjZ|#O?8hp*A)#Pn@6BptQ1FMk^3Vq<b)Al99-zI6X}8d|c_B}tx5@*_M9Xv+8VVC3 zfg!9H+9t5<=dC6)?Bs#OkF4tyRl{%Ibrdf*p0qTcaM6mL`}r@p?Q5#|tBGl<12XaH zKDTe6N1V^heWpH^HFS3}Gh1&9KixbzcjlWqFK;1-&t83aDH$V-jKWVh6;zj(-yg3i zEroj9m1##(PJML5Pn%G`4q=n_a)78htj||{`c$zKrV7`izj}30v}Skk3rQ*JTK1T| z?DPZgi`XCp{Ky*D9gkDI`R_M;S}l2NZROi8o0s{{j#lu8p!dq}e<&zxq)FANCE7(- z!CM#7q$%ujLg|&Ptd^Xn8>H{tncG4@T-GPuhJQR?EM<F1`kd-Nw+T(C(q(;9;~Ind z%e7urbHHflh*mi&ds0AzMO{}{R8sP+wAU8t04++8cQq!%WM#)5d0)Vu8-$IHCGAp& z?NEnlX=@hGe)MQ#IKRu8jN63Q!du-DM369E>uD8@L8m2&CDOL$WyzZp;$|#@;<eOv zj!ZuM6p1<02-?QVId@BVd6Lx8S;f-Eoq6E_nJL*4wG`2d93Ay%s*D-KtqEI{jN!}W zv(s>`g5n+@7bxc|O$w>}V2)I2yJs0IxWgl2jk+a(2wyEbG)Q>3W}i*v&V2z;D|i-< z_wmeEt{OP!t4q5b6B%&B8mWviA)Oxw=l+crV{{I4r?jITb=XgV$P~q?-_~|>Gjv!F z6?MEakf0y-<kil1cIksC4%yKx=Z!mHy{~4T_y@dw`<Kl01&VJu-7oGn61TA9OD%ok z19kJq1>>^=)l!>a*66SJA_+5zK1XK*VXvCyk+vS!Qdu8Jf6)rvqzp7Lc;fGm37MzN zAfj2%J%)#{$tGxQ6*zm#5p+zQKa+n7vqUBuZRU)59~~W?`}-J*8|QiX;N;^MlBk)w z*DL8b--YEwrjRF3>;_Xx<sI)`8!w(ru9D5k&;QZW!&jr`k<lz`+t*l_^qjlbW_P6z z@u?=y%6eH>S2sB5Z^A0G-==8n!h#g{?X6!aZ^6!GiogU*`dnwM(BKhzic-^@a26Is z{tV?d)9a3w_rjO)ovT~-PP4C!Z?l*zx5W3SQE8-iOBkDd+13hve~xyQQ{HpuvqoB0 z@~r4<bJ*nZHg^wu35z`J@G)(_CvGOK9u`^Mz9dVft*vQggJoj4s;`T>7O5mC7>Ue? zMj|ti$blsuOQlG*h4F*MSHtU$-;exiUHLPoCmMb9Up^1jN|*8J-C)fXEy)^lfRS+0 z4vvxPecsOH23}iJwU)%ws#x3Z9=<&(Qv-vanQsDaYqFzHtY)yX^m?fGAI=dr(U#-I zT`_bonMS<R&rf&Xz_uqvY#>kfb?MIk^V5$ANAi<w#uDIN@eE@DL=PnS)cEn^cc@|& z6O#MFWM%yQ`}5+n9{V4!lT5BSqE-^p_2JEeGN-|b7pTKG850uqXM7S#Od@n^(+Fba zz{%80$~r-h2We8u`<rO@+2&TRSH}_ISf#xeuq<Y7jchXMLv7qnEA6bD%SKtdCnkXZ z*UW2a*_0bZD8+_!z4#c`T?jG`J@+sQj%K{V;(?zQr)8f)9`WnM=_mKCpv=wve-66g zT1H##3xY?yHYSL~j;+YhP}j@4&-XLPcV&EdTN`c)BJT+zU9tTENK&7v?SNk0I>n}h zd!t58eOdm}K8h(rF3sB1;%Y&EcTaz}ajgq_AEjA;l*`=D`7Z_3b>(=v#(BV2tyxg8 zw942_U*Fio*w{qtHkW0G*?evSB~A6#48IAro#uE6I``_H@3eYlp17`hj+SV=$sInv zz|F|E?r{AJSwlL{4Ly&a9;{azZ+#Yb?2ap^q2%K&I^E6qz^$3?ce}Tbzq5~jqS}$X zJ8*jNmLHomI4$Gt67ob*aV%F|TEEz!)E^T#w@SnZN?NwR*OVuk8GcGn-(Pp+B+Zg# zndzO$f^gw-jo*_Z@s9W?czIb@K0mexkS02?EFVL|qw!bzDQltdsX3!(=5=8yJi+tN zRNN*VO9iJIMC*_EuSMnt5Thne+YGF2v4UnN>Wj-D-Hf5+D%2OAv>xf}+nSwh*WSue zujy8S%b9VbP4x6mTjXadnwTeqQu<~CY7c@La032-hDa4g;iJ<0W=((kEV72CmHk|S znNpdQFc4hkjUM=EnV2NUnv(CxTOJ=~&M_i?INuvR-OYhI#ZuQqRJXTr1|ndOwH9^3 z-NE#rZ>ML^CzVxH9EX?ci6PBF<o3P82DMm}7aKL%|D1!Bm+xzL=5c5cw-D8jgZ9G1 zF4m4uR#?|kTc*jE8bQrn&k;V*6xG#@N)fHd@67~e>bQ4UnLLCxBeVv+eMB`(tNW_w zj$oPr!~<`z2ACt2vWBcglDoURsj1bp4svs|vjMsYZ`&FAYJHy4SDajWK$s<eMd2U~ zZoU~aZm`p4ZcQ8i{juooSzl1RNK{cYEZ#FAEylH5k}w%l9^$d@tUIBPL?rC&?sj!| z6AuugexGQaXBsP;*h^!bPY)NDZ?)|wJ|v$u*_iq1q9#5&yqiBP-z#l4Du}4AIYEnN zDbv<>mP|dM67kvj97?Y|Dd4kGkE*EL!8DoMmdutSjjZ_z_*uuLkcZO^o;&;7+XqA8 zs@BD#dV0G0Iy(ESbhxdoZ_7V!p&qH>r(3FDA1oQPYA1#4abBJc<G)L?(bdp+qeXM+ ze8XBUbCa(ZACEM`y<_GQEA&o}JlVf(?qNV{f8cjs9-igZp;*=WZQ=PhlpS1Lk5VQD z2i|Y3e0Oi<m6O|gLxj-BbZ`)r-Bgm=EY@a`*i=bW()v0F?9kBqbIRART1@Q?ON|ag z0rT=?*sw)`U|^-wn5Mk*6}rH{S@Bu#lI;ZNmHX1c#7D}OVkv4p-O+3s#;4O$g@r71 zDo<7e#*PMr`*)wf7T?maN#$Pk-P<S}ny`H{wPN(se@kU?nc><hgmjIS^#)h$?MNw5 zA>_$E$dZ1rWDzeH4<;+w8*e-RT7~lFCy(<qV!At4S3@QyGzMgdg+eW}Ls{ILr!HbH zg=Br>qA?j_FQmbvU;qaS&k+HMz`|?grt2M%IGSx45dXGQsVT-~(nqgBTDISlCCn6G z^tyKU3O)OMP>l1^Pa%qm@dYI=q~q**_Y(K%`M(kw5Qh4S3Y$L-+jCOuVd3Fw05!zz ztPVX6B(1V<x$sN<lW0QC-vo8%&ou2C5UfbZ`f8M#RZv(mS@z|0NI>M~YCRT~b(2mC z8mfBjGA9d5;|4lI@yCmNlC|k@D!QaPa=I?Yw#Dn$@)-N}rYZgr$|WrhUqpH3I3%RK zhfl0#B$R%QOUux3v(P|4O`pF(Z~_*nSA^>rd|seqw5b@-y4*bY5WpFBnlmfQIn4*_ zq2e<VrpxQWKG93!$<V_mMh_p7=IpYRXex}+HmJAQ*?PzB*QZVGViB+7lYPG)b<=Z4 zRGqfnv9QcScy4CL?e2y->FesVMzKrh#3@IyIW@iH)8QT4$er!>%2<g;b%{Y{n^6|! zAy1yUe#7`wZU~gk&3(h!Xy|oQ9dNoY{QFu>#Zz4!3}q|%si$YU%d}*_2~u?IoMXK* zLBPd@XHba00ZNVfYbvR`n>QzO$gbtlJ7bn+@mtk3HF`V)pYMM!A$0d9>7PA!$g`X# zeK1)fbnT)ti<Ip4(+N4BbxheZ9zt3-ChKo(!u2m0^_|TXb5JZU>Mu%|VM_fT@TGNq z=*EFQ6!UYPPjgnx)&|$U>B3G}7EiV<H)uYxsn$B!(Tcw2lHuo2>G*}TlCF^LXF`f$ zVlscRmjfgDiI`pEFq@s7a5?wBH^NEnF;yR5Dcg+1Ju$H<7IZ?gB*>!vjq{${^R4HO z4_8_BuL;$`O2T@JO=7!7TY@MPv(MrKwmY*1Bv0^jZ@l)tZT9Z7(lOg?rdC)iAA{9d z2jM!KnPcREXDm5eB`hksKY4~sF{^jtls<lMFDN8}6GFDj8*@;KE+B_}GJj?zeNNd% zNnqgpW@=vlCE8bGK4Zhgx5A)I8!#u;vx;vX9*!*Y=@pk2me}{0B6yHP7eU^ew4F8f zD}S0Q!FzKQ=Cm({V3Z;Er*VnbzL;&k(bkrusA#>+z;Nai_U7Rk#Y@_;db-kEbPfz0 z>vOucr9nR$C!NYo&7K)p@GC1yZBel@GHy%-PH$B0d8av5R^uQ8>89*@AtA+NN|BVl z`1rAh5BWLh>0YNuxRV^Jlie1BZr$EujM>@gj+QfOup1ILZBW?9p^G5MbV_<(<G`-J zr_92)e&sZ;b~FO!EA%+>%TY3op}FhN{e2p{)pm=X15^0PTQ0}6zfyu_)6b*1HPcu* zmI`+Za|mZ`UCmej{R4a*Np>PEyVR;toYK|4`zx|t!FnYo@_q+ZjwMN}JER(GSXMbe zB$(8b;^LEi)=$Os+K0#9vmRORqRO4Ueu0;`m>7ir(EuWr)+n&m{wxH74=**blz_7S z<FdfnoSPtB>e+#_N-1J#IBiD$>;Z7o=S{%aHSd0kDO&E*Sp>eJprpUi8O^br)n?Jv z+1c0GX<F$Ou2;l-FOx8)uX$~7wvFDOf+<V!cOjKt#NvvsIyg8uIy!nvnTEIU6|Dz4 z(bBldG(ki9b_xsKk-hq3Kc7y_fI$EG@2?f#Bq$LIa%-km==2dI2gelBe1J#0LyowC z`|zPHBe0z7-e4f6j?bjJqh<gy;WPI=k5zDVy((HBX0DxRhBl$*=$B<+WJI3qAZ*b! zmHGAk#aDHB<53^Xyj`~2Q~Dm(9RHft`dip04YU`e=`W7GLrVe;!s2zFvD-@xGo)|R zR!lG?<G!W;a7`R&d#*C3;S}sek`K1jrxD_w!`aUXv(O^PWa_$0U{S}Hl^whJ-(~Ds z+bcetnKrIX%Qfq&Fm)oH&F!~y_-84pENy4Be*R(Ns!v<Mmm9l;-6mZBWNGt3Oo)Ho zY6{(rb2TFB8y}THy<ZG_c|L$B<sGd#B!+s+?XC&XMKy|%FYvyc+%dE8?TBml?}^-; z=;%Pd$cGmcOajoSZ%$s?AsNMnFox$8S2b?4MssNy>CH4mCW@0>vW0(5CFKbT^tTGx z#<l&XQp%!%|1`s#kKa+gUa4O?-W-yxQ6@}CZ`H|h*ZwQI@4fzoz93lhP6|UzBrEiX zCr-w?+W=L==E@J&E}yK^48Q6mv@Yl9to-b;c2(6<aqER!x3Ef-+q=8v2|l--$TFTT z-p`1VrA9Fki_L>C+XzwG7ut=ogzYW(G?&HMv<h_2oHkc0X{$#*RPfruKuN`2-PwNX zZiMQ&E{wL()S58!r0NlE^eiMLcz1vQ0DNz|^~gVc^AMXWbC*}Z&3iyVK){(7BW0D@ z`gfp8!D7mL2`B){lDtw}+_euB{`%_#RPuw|!ZUW1W`*wZ+9;L?regdQPW-kM*KH|_ z?xk{@N}rCX0KDLdD)Wx8o1@Txt{t|Haj*n*<bP99B_yOX#Pp>=r(H=pP0eSKNy-YN zw3FI~hNjP-FXQo!`qu@?7!f5pG0R}8bLp&@VB401E^TZOmCs4zu*lw-;=;m$B4IzD zYMV#=Th#24iN_dWA0@q#R*ZIdI$Ab<wrsbXPjk&vN?x8bQmN7%bxJ1T>FMsL^kw)T zPn&1JmMm)Kavi_N?qaO1m-#+?9Q-$!{oAlcx_#rI&$NZKVUG%${i%9#e3HJMa7}I6 z+}wklXA7&%>Av}0Ygf{KrE8}ENx(-e<_!y{6rRhxwCcPPSpV7ZCdPwQIJSP@GU)cr zAAFqd6+0%?*5A~@o6kH=7E$Gii;oYiSt2sF9c<7!@`IMM!q`zL>C-2zxL4lZb}#1Y zXa7a)JoV=J*$JYVL%y__gzU9(hry_GGoT^FM^rC~o6<79-zR2<Td-bWvN!%dd+zVE zXF<ZEW0tgdR%+(fy>ml(*lWYX6=fIXSbA1-C0%6d*i1jj;ql^Dj6Ju8F%{w!9I$Hw zreEWCR{EsF!}<}j#&;9&&F1K*(7x6De{!CgI!_?P$GmjiR3<?esD4)JSC{0oG4awU zO|Rf+mVCFjx7WGwHU%_1L;?yyR};UT#Ub#=qGMx*SheAGbk7|11MT1MoF+3~JFmO} z;{2{rW3Qdls~vCY$H6qu`fce9N$wV1N4w7CDu>v8wf@!T@0|2Myg%3G5vJ2ELtkUe zAt^5NaN*GRzq|mQi&))60qo38qtj^?taxX@e1$%Mb3bkiV(LSoipG1Gt%4J!-K{#3 zl;csjpdO2(;K}$0ekL>O5`Qev=5grP>RO>l^MH<_l1mU)Jzdn@qmy9CTC<{)6zhAV zCFU7>(@;m{i<}-(H>A0xXRU;C(j?e9=++DC#cpe`)mwGZa%pK>dY?idGtdG4fa8Oo z+e5at*g)cDa$Hlv{rhx)8KSZDI|$J&(CO}~nrjktsXtmjLt0c^S}KSTY&Md7@t`y= z?)d%aDW&qh+_6AfR-BErPh)?TB*?ZaqOr|H7(67Eztn$aQXgO>|K+;*n3yluuRk2q z6>Ym^4Js_CiuBx39$gvtT#o>c8;R#)EH^+U_t~Iz9jX_XU<%%L3JP`)AC`xl?DXiR zjpM@R-#vQ#&Y|#<q~uX>bhfGZF0Uh5)otq-o?m>t-4PiR^OBD4%lC(8X5@U~N|yO> zcz(XBe0;tANPltfafaXmE9}Zc<&j~(+PW<xJ06gr#2<b?Lzsc~pdo>|{w7E{d(G}I z1+g78PgdFK+2?UMQ&Y=3e3E|0PxW@vN6lmr{h#m8u;6ewS^I_jYRB4;CvI+Q)MRhm zN=oV0WRatx{m}utAL#3Ibw<`av~!~>(fI81S<Q#9K8TQ>PUNV0Xq%scq{j+09GNx{ z0vU&OgM%-Yoky~><HB~j*G4*&m4c3rj&)F@sj|k;4Ge@FMlYkG+W^a4_8O4%^z>9z z%mJ%ZuXy4`-!ydX3j4SMGLKQV*6$v2D8j610q`spmRK`79$sF<?Zu!JmsA(yFMTCv z^;gmXU34Q_4&|TrUu-mV{VD?!N>Wx<O#yZ)>9)I)785fc&!DT=mec)slcAM<XXk=q zcEi-qTBcKOE<kSzl6Ir}#XZ;K$^oc)c6zy|yW8B)GA0Bp*k#%F_h+_G&z!0+yGeOQ zu}FJOjKjNrp>h%+jNnB89%IlpM(&!pafop(49%c_^W?PLFI66N9Cx|Ir$uCM2y;sw zWrhHp9{WkFnB?h<mUqG2%kkr&kY*KgF|V>S)OM_OQkkh(HmOxMH^&ng8&}J6RdbSk zHnTx<&Bq0j^l~(-{%PG%P0LTdD^Bj33qST#QjF_fEgw^JBpbogC3g#{^;)e9atJPN z)766)0KoxKie`CLQ|#Y`<%^4RwC|dPB*0H?CfD0VdsGLeR+tp5`khg1GOjwzxAFk7 z(nLVov3U|3aV*I5Le5il>M2kwTdW%Wz<X1Kr$g@I`GNP&tv7z9_JhXZ^(yG;dXV_c ziNTTg+*~;&RrKUoXmm74GvYFgpnG3<J0J--<zS9v^yt)o=CBdHViMbk&3qMYaI_e7 zo?dC<6gLEV67Jdh-5o9Y<Id9Jg64IH*0mAC4~n<C&3l)+EWs;$CCEXn<g`uG)V$zB zcIhW0kJDIu@1h_Wt1EO(W>9o$5~Di_U+W-96^rUm6Rz|#No?<dG;L1(BKBC+2fG$M zEBbij*8vS1u&XYdoFp@BQGRuaNxYizb<xvn@)m>N<kaE(cgi^Pvc^!5m-8P=SHDpp zXXU*#1yfXfUVDW*p4lASTU#WbEIp>lxagcF;nTjQPSs>a-W!SDD`UoVB<K~@@9K+7 zu#M@0F7zmm%F=?%iD^oX{v6d=v8alLq_Vy$(w{mJM9b;DDN3JGkm+GszR*lTcmCo} zzt!*cedgIrWX#rgkQljcwB)K6;cwd)i^8^#E}*M_Vbw!a#OKc;`lrN1-6Ao(y!Tys zWLaV1ZIPS#YKf~|u^ktmuJUvFHl4m@wND%Tm>Jl77`)F~gP*FF=i@8QZNGel?dq)b z*0G_slxNso{-TVMepJUp%D3+*GXhVcMS2i9@3|*7Ug_oI6ZLAn)d0E5`Dcb49v@x1 zSiL3jJCJ$f9S%0^wezCT71q%8d3t8sSG>GM7lVx8dbq_bT3YJRkc+WFh9?wt(Rz6S z3!zlwkS9~I{&%GFGOMzm;^Dj7+o4ex!f_m|*ws^115W&=gzH}Zb&&6F-Lf7FGKw9# z$;AS1S1zTdrd}JB<bC-7A9I6BZ1?j&RpKC;gO3UL{T6DZrfjO0D>>#yhXw;vqOOik zQlICUGp8UiJ|CKYN43u`Q5NlanX?EqrAS#a0<hpNv*q~Fu82SK1S6x6>kE8=cKhVP zP#HZV<IVsRx$b4wqHRkf=C*VTpZ9GiVdp>>?~fe=MLxSWk<7wQ?h7UK9V65i!W<ng zvcPZOx%cnCgYx$}HH&2NDS{x>)c}dXLC3<tFq5UcA*!#rXTN}`)cu8SKF`|CTtaE8 zV;YOTR;U7mH<jTl0S`o`cNc<|?3cKu;j&P%N9-UMG?FE4dIyy`>sv?q>hC04r2JOs zfIA`<kEu5PwH%&!a$P}JYwyORL)FUreyf~w70O#(Zy5N-jctF1;wSqmBkQ01w^Oa7 zC;9p<%MJA4Q;qf`G|QGcR^AzM)3WGn>V~W6KVq&_2u-q|&^XKPPPjv)QtXh9qexOj zdsx`|h;2m_hold$?1<53g0W5hRG&one_i<j73!h8rq7Y0rYvc81@|<=3ouNN(Ydlr zi&{>?zaMOMPReep3o)5=_1!y4NTdDnl1di3`2YL?hpjGS{Bq8?U6oXtQqhoIwGl{s z-!fl=D2E03(XdS@7db-%h5q|p^LTlR_B>es=)0~yT7C_GR7{FGr<ngu-SYn)CHVi> zX0NFIe_Weo0|E_d9FCxT_ZOtzT1m&ME-&Se3jSKp0a~9I7dQHW(?2IpGp+ZKfXvV- zT1)-odUI8AfZC^la%b4%bMyf$0uHA?ONk<N{w+*1oKesiDW}3iBpx*%t+*R)`lQJI zQN8Xgqs)ko-Ud&Ejl&}&%M$_unpz*fOM_ge@Nl)Ml-zfns&Vc@KsobEfVZ-=l;B5g zw&#JMU;+}u6IuU-i6QL|ia7vS0`wZ_yYRhz?A5Ca=_k8nQ&&fz2bF?4xe#RYSIJWD zt`9M)34$agX`Q~9SMzNuiQl9YpkoZb#lPvHH9WJ}F%ll8b}48oBxJBNzii9Rv?Trh zceF8n?c86^9d;scW27@6iIS4)85nfU%*;T8>NbtI$c%x2uEI+tUC(t}8p;r_>!(E% z$s$=dX8c*=rGk=DKN!q+Z~xkACfdL?a4jom9w@u-SSe{~sSZcQRSdt<tUc>`D{H9A z8J*4<IQ21B`vn5i)6?@Z0MKT)H~*S?8;jkYsy3#{Nxw`dFP}lh`FZiH(wW51#l4Nu zjDhYO6Fle-;F-WT;NeL-JwREviDZ@T)$XI5(gGBITR5^jAXg~q>A81b%JQv%@Y;hk zCQevFq0zX7UI7#NnGv8Trgq5|jIATKQUg$Fm8KInDOSr)iQQDo%fJM2cFv+BI?WfC zb_<Mhq`t16p5(>*EM2nmJM&9NjiNlaHh<XDsa(5^|H=rS3j~Px?8$_VK1%09Ma2$b zhR7u))o2@C;yigTa})4izZA+oojbg|K1b%%r$+<w?}LMDd<9DeWZ7lBi?i$Q-W2Iv zHa<sDmE7Lr_}~#FvYih=#60w064ro#)|4|f)3?==^Yz0iN3vk@pwa2Fh@cN=#rG4Q zrK!uu<el!g`unH0I<Q18x@bQ@Ec6~ZiKPsrcIkDyxus1HN@X_j36}a3(*}w|^Ujd` z)RUx2prsN`wE}`jJ5odTCDvNw-wMfmu$uWv$Kq4ihaLkUEq#qn<gt!d6%9C!x9qrx z!$?+aIJI?E37ZR=>OOmRmrHj{G=u+Wo)A4fvd&&FN3ar0sdZ9M7j>-Ysl7;H$5U;T zcJE)<X#Vw9<%@fSUD6R&;gx1x_9hzYz1=YjL>aoF^(w$n2ON)<`;tBcFWpP-C)I5( z;x<pp&c3FSbeF@fT)pNPsVZ55&=!0~k(mFQ0(rEHZQ4Dsbr3A2+CqBve*QA9JKf;b zK$uBsYVwqaPu=8VW|owkJe!74@F^*O?FTojob=WHEFYM@FFVrtPk@!eMA=Kq^nk7X zjSYV~6%`eJepyyFwuuJz`kn855)y+>Vi~f=<&tiwHf%Z!7!^7)?n3JvP7dd3WhGGa zg@x<MdFjWc!;^A1MOK#sNnNN8bV>huhPa^N&O5E<#RFVvvu}%{*m(*8Rx)8H76z01 z6;3SHIm`IQN(B`eKxNDBkKO<@sJT_~=Anetr7V?&;g#Ma|8<XqYBp3PhF&V4u9Zse zU}Ab^=D0b)Pt44(Pn13$6B}ZMU5WK;vA%1Kf0=W67U8#err$$qnjP@lKrX#XS2^jw z;eFgm_s*#HhW-J^MQYlldoQy?mR1<q<O6%f5_k8vVL#uX<6eQuO*AhqEBa{utjc4} zAqNA9L}uZ3M71o%pj?c1%d*w}KuTeuqk;llkGvgCYvRA4qVTlcounWlWmepp)0eah zx+!g*!^71ZH(E_5@6LS^vU(C29Li01o`$AM<5gm!@mv{=EAzdir;?LLsy;uz$<g5U zHb+czw0M?_dog<Wo;FB{#^-yFc$`!*%TxT~2_Faj00E`y)7s8XMay1mN(9jem{G+a zs1Co=6Q6PUyA%|zJb?bkjdSxX13SpxDjoW(t7Y1dQSL0gfM<W|z}nhADSe^AbN)QD zUD$Ako&w7$tw|6sUm<)s|4s)|Y1N~FB5?NjSa*yDXL6B=*6T7oJKZdTxNVtN1DS<l zOKrqOXY$|xKm)eC+p9}>peZ3O9(o^<B93pMq>5T$x*FOU%qb9XWUhI~4^!r*?67`5 zr(c$UVPj#zEZhJPWV351E3dHVlB&<nQaRTrUy04cYGWZG_nz*4C1pjA&`1tx8-quW zAi?uBBn6mB_4a5%Z)0Oiceg{D20aI3^2f`8)1I-Ef1OOtJ)po=AN$uB+|AQO5&SI5 zxHEY`ZURmVEtmaOu?Ivf4hNhhaZepR)#0sD=N>!zD8^S~)&uHcnSG&)%53spz}c~Z zsSgCP%T!#dSG0MX=9&4P;5|U%ey74V?v+CM8P#6C+(wy`J+Nt&YGFOihhJfz^Pb-b zo}gi;qM#6X9vq#jbK&%~8K{!SOC$L4l4%Q5KVI2g9p9A%{;rYSs1#{JL;GXF6sLBZ zQ?R~MmUD%5CvAl)YMmwnP}Aa|DomtNovBkQ8o-{Ma5>V5m$1fS&P1_GxQ-faG0gV8 z<3EE@EgCs@mMShGl_6$CEbGjal<!_#8^bi&MBaEQ|M|Q4e&rN;XoLS^BrqbhN+pa; znb&a0`tD@4^~Cu(0Q*Q2VFq)~89>1;uZEW&lRG=hF0s}C-MJVr&&k!suw#46Mco=p zVZMzWZQCBcSznwsLjUm1LBSZ--S=@GH{BYCGLrjSd0z?++10L~49HIJn)|Pf6_r2m zedr5C0Cr$=oaJH=5bgVq%eOB=m<B+cH8$<vP^M9RiV0Zi>;gUqVCYK3xAZ&Lnp8r_ zF{vB=Kzae{zOL?ANQi2V@9G=Lixt!q-<H38{erAD+T34^W+fhMO5z&2(xjD-iNuwq zt1eTG?$Zs<-S}60ff(1ZrTcHNNLL+OF-K1$ps$u&21T*mm*C~a3=HH|R7l;pfkoiQ z*&Mue$s?MH$h`sX#zqtJBHP>}xLn4_NM-z6v(oUWc~;T62OvywiXzTa5(8rATx-uS zDsxD_(oz6oJrem7Y3$Nu^MGsy=p+CtI->IgjcXd9865SOZfp@nFP@BE0A(t)^ZoXX zEA-ItCl(7^#xBiM?1-|QF?+1M2;l?M46qNVf&`JPj;JW0<D{VYb}R2|g&e_SLE#v5 z?ORP)6VyswUB8=~xRUY*K&1N76%^dxm`Df2LVV5qNS>)A>EssI0v0<`3yDUaEYH)* z8#TBs($IDF_s^y^299=K-;%xdO%l8poJ582!u38_d|(MoUDWc2Mm!xq6ihtF>;`J6 zTx<DC8!g7x)j<j1(lRrvU(JFzp&Ue#*R(raX4Aj=??Jf;O9>hK$9rpEJfNzW#-3Y{ zb7s#5I7~}ZeB$>lfu`&ZLDXD2paw1oC3SVuzoH=cYX=Y|ZXfJN+5ykW159*Z8J$lK zd{D&0QO&%xB%kN>=@grK!XTDfT{#+EsYGlFi~OM9Kee=2&~5K%%|h{TmPq4c2a3&L z)tuu^2tF*_{oY@hN?Avnkga0j47If%o{prZR{nbKc-5Q;Au|)Laht{43QFlIbc0sK z!eD1cr8(G$l+e)OIfUDfOe`8(pAZ;Ql@u(suIJ|D3`m^NP?Z!%!OAG-hKEOwOiWCS z%*+bn5bf=sS<5H<zvm05^x1Ia4ZQ)B(`<lk*GyAze01$V%2+Lgc0laB9qauex&e7I z0tnr#LfL`d1|eppxKT+5kd6h(xX_oa=hz&ctgY@hxM)1pnlF*rI^1qe3?Nnl9~A)3 z*(zC>DyAavwmB(HT*yqju1}m>2)rH?54`kMm(n!2wRpJZ=dY`eZEu%wV#_NE8*<RJ z)R*+q;bCEF#;8Y`Bv)^_ybLMv;2|nb80mYkxp?J=qumU;7;O5Hr$2tn#o^{4Oh-?T zj1S~A4)#e7XsrVLp<j*41LI+DpT1N{`;}f5ubxOH?S+JCRmtmLYK18+8u$oTSy)o< z{d@ZDyJc4wRS>PF>xkJ^;KTdwXU=Q7T`dJKAHT!JDz<e^%;_62MNKz2f<YGZ4`>Px zQ&0#C>q#z*O*EHhwE1?lNas%)iw0aS*A-M#&zSISi3omP-h$Z}diOdC=gcweE>DWe z7KK5YO#F7gv|1c<GhhMXwI;%j<5rsD7wnjT5(#Pg(%b0uNjT-zqKE+f?TE{C006&Q z_9bj8D!@+cM}T=j5ma0GeeBV6!#Lso>0E2hIIIn9tot-x?@l6mtgR(gS64^!T}_O$ zwjQH(9;u%HaHFl9J`Y%)Dm~HZAm>SAymdX*ZET{nY^0p4-2bEjws9({yV|DHJIjt{ z-t&QAp_ZcL4-g0ynKNPPDP96(7r2%Npn*9#vAyFM39l)J)+=$7X4AeI(y=j3PLmEf z{s4U}EH17LWDqdBkk3zZ0mhAH4A`B(Z+XqmoS}GtUPad;g!;NCD;atcNHUO_yXb15 z&+Xpg15U6Vx7ER2DY*{9df~~___VZ)xHuu3-e-tNLDPo9h6dQ(-S6*+4QrPv67BYn zPCDc<sFQ?R`~>j;ox!tA%h;Ta!kLWQWs)Y5<WAt@8t5v(-(%(E6eoYFfBt+v-I-yK z0}M$3m>}cY&F6AKL4V821g6KLJuJ6WibjCz(F3H^zR_R2J9kTENL$0WOT^>q<Hjf> zr7ZjJZwJ(G$A%~<ewg)Nyhs-s8Ck#GZm*VDawP_+n>TN7>7A3KdL5MuJSc!6M*y=1 zo*!7TfoSNY4{VM1X2qr|foc@6-KM(Cc4|MC3$jBJ>gfjNR=d;v49VC^peHLwrRq3n zq)JpMM;o9gRP-ZHtxZ4e_?`l*uau9F<;nYb;OVoeyv4@{1+?zLhGh0An^3m-qeu7} zS)oj8iHtK?xKZ`muArWQJPij1|DDQZcW0-<PfBamgC#9W=dOS|2#k8458P21GqvPS zu)N^~pXWY)>)=ER-nsLwYZC$O?*y(Ru?)YdGB@H^#hzp%gtgiZsNmz#&CN4-es91e zi}&bRTP=lwTGarYgJ5}7oHQiqZ>q?}dF@1m_#aR107FDju&AT}4~0pIMs6BxzO9zM zq_9LxW@pvCM$OD`v-Cte^q?2jL5z}iIb6-k>F!usdI#1Xt3LI`y$orB6yn44n0W%m zefRCzjPQ^lJ0sHW%9uRFg{=sM!`BmU>x;9w-tV{l=3_g+nPLq*hsdMN*_1;6)=S!u z`XdK|_=TSlKqoWv*}t*OeM$N}<pQVAQq;Exfmp&q`}S}5M&iVTow)N!XH1oD(K@6` zU!7&T6rzdatu~Sc5u?gm2x$IOKXb7yQ_#Z;@Pog5VoP0qImvYA!}zY8Znxk`B!AXY z7ICkMCc^ZUtC*!yFW@cnpNAl+Z%~G-oxuuIeA7K4kv6Vq0v7beBmA$51&m6~YF9KD zwqTlELN8l7Z>hmtk8FyHF5yM3;vPME$3kvl9^u&;Pbt-t(&CW&R0Avuzl{kt6cn#( zL;{Wv=Ub^tX3I!F=c_Q7x4<wZDCqejGjJe%x`a*K3HapterTkN9Cw$uj>FYd)ucgg z`kY~IB{FvQkm!k@vEIx7o~4YYO{T1}O&tIx;(w^Aw-3gH-~S!-{_i#g<pbPomieq% ziK?Vwfok{X^Z)VAyUfo(xBif5gE9Zl5@-L{^qXC3MBwsRH1HKTKksxOIFV|GLJ=R% zJ>DF5?g9~2S-I2GpMdjh$o%*kbhOdz(p8|{rm5XsEzS7l^n{(@MxqY@Ts+<eCSx{L z*_R{<$V{<gX_6hO4)%B$tO11|J!(zfLrCLM7)4zb*j-UoHKL;87tN_D$SWXv&EW>u zqZ?T*pyt;5w*L)*H081WQ}+#sUb8TwaL&p1mc%{ZG|#a=4%{(D=gmTutY2kMzlPTJ z-QHd?FbdP=q~8(Xl?4uCl>LpC$DmW<R%c22IEXl!07ew^aTnPbuiVVc{Iasq4t-8K z4n{gUA=pXC8>X<c0>Zx>hH6vpJ331ChV`{(OpJ^&9;>faVwFAw{q56W{{VfTMIA^? z=vw>}8ygqkuu4qSe~pBg5Ck5dBd|()eb&P{ZFNq1Cq9u)t@%k3qz+dtR*O*5R<zdD zvzbX24F!s1Be9>gTFQBsRr1x%KEVAZJ?+p)^|A~<Gj}B>K8Y~200G7?Ys5WaVR2z$ zsOHWWV2c(5!{}xi>{ICTKn-q+P&{((8W_NSr&_7A7X&s(&yj>PiJd)yK*;2T;^kf- z1`QmG^Yf+R)9Wp<GeEaH-OHo$4`^f$Dm`&qB+Qn=3+@{vj*gEf#3y7(#H7c?4Hwy> zK$EYitXxO9_S!2GI7ic<i5s(lKN@}*INlX3eG0t&O}-;d1dNc)#ac>_e}H+IQSkIO zciy*#A67!l7lT^9egfJ1F4<+%GJ1Miwj^8_@$*C)3U&jK2=TN|^qO8`&QnM2WV!oe zW1`5k*5HBtS0EL)8aR3w(w~_dj{EfKxVN%&>Q=f_e0)5xz%$u%4^&wfQP?`EtEy<o zf&B($b@`*}h<`57tfETuQp9K^@IONLfX0w(x=`Sj2Aw5gEXqa9;y>3Bi%RvTZl`Zp zj`TMk9DlXprAVZT?b<tL4F}Ir13E>#z@h&@`eSDd?{BK;6os6rR+pIsy5=vk2zay8 zCc`U9=^Q?XURgtOJ-d0_<|Tj@?A(|f$<<(XtQ{YiMHz`*bC`ueLq#=3U?)GBM>?Qk zp~YgO95SwZxSXP}FjWOBkW7p8xy{7gwS@U4)4kg5M0jMs({O6I@6=JuY3ZAp9UVw# z7}66cj|s^_o+fxRH(!XU8Eoj-Qw6A!wFZD7T5hFHY(9+c7;_jPvz!qb08EKwEIe*; zL8{h*npWQ5ujTb&d(ZC91@iU+TGa=jcHa0xmsU{#rvLoE0ArDVW1Odtv%`Sb4+D41 z>(cI^VH=c|xRbfzbd(-93W&=3iV7nIu<HBzyYZM?-D2Y}@=f=)g>s6wcaq)q54RVU z6cmDV^qGNm|Iq6Qbo_=~pVHFEBwE}G#tT@lm<MygJ_6sRPL&)?r827C-S%LW&REy5 z(i*pA-2)Q?UWdC0wDKnnf#f{qOp3(vPYXi0fQLC+>KU-*iTkZm(5So8#%@BJy(l$( zhO1Y@pXhq_*{Z<~NtT2vU*-OlbN~<)H~e;uGA8`}8v)CieBQj;LEFB|Fvq{APk+|6 zRVSx-%)TRv9WWZidhG18VNLmyvICGFPEPz;AWJ}XgBg_f8#q2ylg?`N%G-O>un_h> z74vqZSSBy(GKGNpnKQ6m?0_G3b70iWj207E<eazdVk$lDhwq!2X~@uXz7i7=k(#>k z7Xr`yKsqi(`vs|qx5Up;3PwCSmhcyvtaA&lmhsyAI4(+S$4V=APdP{H)~!v_SZPUy z|JXI$JE*t!>YlxRP;gM=K|7aqSC=-k7r7=wD&D>+#HDG|2<MtFmFBWKcna#?2~N25 zj=8W#>Jvyx>lv9A14ol`i!`mRQJ$T(JkIeo53a8xYb6MmS5KY{z9lqYj;UOZcLc^& zzyflkFVu~!i>AN{0M26#I~GDB29=fGUt$%To5Y$8^!GEx0OoXfxbpk=H*j=JaNx4W zQw;p7g{5T)5*9W+_3Z%}u(R+uP({@}`L`HRhRjr3oiQTi%p3NDbInGAg5uR|6jR9m zkY#`ghXrRbm{<x^KK62fvDQ%A<!I+s7BAPiXk3zdVT(SvnsXVL<|_5YnOvA%C991{ zbCm98$5_t1ryS_I=$Xvx0iwyr=82ci5eX|o!tTY(pi`cJ?{5#$a>_m9v9((I$Ms0c zb?$RDc`g-g!yC$7<hEF{IwY&d!!3&W_jQj}_e`tm^=2rc{oS{9j|N~Jd&ra0w_@2b zV%&5CSbF-ctguX1d6o;b*)h_JR$zc%zPzsLgDoM^)MjaQy?*a)zq)0`zG43WX|`o2 zMq%<O=;GRJZRui+BhY5y0iC<AQvAQO+Q|=(2*<yTj+PS=>eWpFHpB9RPaNub+$I-v zcy*sfES7)c>nVDAJ63CJsycRh3K%bNjC)ZwJKOekf(DL%CFaBh?7LS3S%QXnxYX@~ z+u}O%J$SpTObEyK55HADy{)a`MG_o*M|I$4kO#@w8aGkbvvDaREO%i>3SyJScQS8B zY3FENVl$8*z}csmOK)CW<rKX1SdQnN?1!Lp%8DNl74;OZljSszadr|$nbXgezS70i zxtN+r+>G6XOj)*n^lQm+c3%+48H5{S%_60?_qV1^nL!U(zTvQ^`licD)#aL@4;Uce z5uQ_Fwq5r-*bj?#msqmSkdrN57PehI7t*6`tyo>n#;|;-FPo;pG<eSjYOPz{D#g?~ zxt*RGlcbv=ybBOeaIlyz+|emQ3vB0*H#TFwHixRyAj6sz6qt8Z)<_~RDALj?G9~{T zwU&Z@kOG<oK)R6~#=d?}Z}5nM5z?6ADr%$OZClhrW{a*`NGW<nR^z$<GT{Xj6HqD= zV3n#0psI1!k!#v#^GT!td^0W=n15f2rO2PGro4T-5R-K-IQX1CtHVHQ|M7gVXE&q? z@YcxzBpq5d%0ayf_jLrqYkjGX`inEF1yIw$0a>rr(n?EfRdcjpktHPso(3H+^7%{i zD-w*G1VJ#VhT)W%qeJY3wr_IL(P4)nIXTue?wZ%XJpAKnqM~8bJ?E$8`{)cs@~gRT z&mHUaWhgP3O+5pGS~f!rU^@6eFKNK_i0IyOM{b~JSX)`sF-uQ<@3ebB)Hm|=0%7S0 zoB5PzeuvA{Qkt|P4i($in)!VHG1yfkN7_RGSr}<pbDUyb<cwP1Zvc!eFkEQkRwHHR zc3u>V8bR&=4-}V{zU?VU)I2-|58s^DVtmyB+2SdchRi4xx;;9%^GZ{U$(0qZ!FrV~ zvzI(R>Sv=IonBG5z;GVCq615i{NBFjJ-@X0QhdG7o<rfL^3$sIS$R3`yt&|@$qUEA z6Z8}!j=<2Pdi|G&acW!tY9{H4e8842Y0FK3)lSB~!_3j=>O0x_Pg>xWh8C<1lYCUW zRTRM92Tp%i4dm^hqssM>ypC|e)0em!S!yPjp}uX60DdwHhvz^TC$&=5MKH72>|ddS zG?^)k!)Fg#X>kfSA1^&s>c^GJf}LD@GrqS7I@;66%^VM;nb;XhmeR$zw;EQ~&wJfq z0$}7fYd8c{0=d(#KCc?N9RvB{HT73NZ)Q`9s(Vn<$DE<;_w)!04gKf*a>;oLbyam) zw>$gqwbI3$Q*Bu(O(OR8oN_WzxUVUzgF{+?zW@eJRY`#oVHE=tBT!NZo6=6|GNDf% zKHOI34A>ph=Y!LGOU41@0k*!GmCd=Mf5e7lr^)Pg$e-dO#pU&ygDDb=rl#D@dE-mJ z+S}U}tM#YD@0<i4Y)K1*Ig&UJ4JVpMt=Im|e=TzMYR-h8=Bts2WChDThhy>kU480J z;OA&LS6N#m8S~j9{Qi(Z`IoC_9zK7T4K+BfKsdc55IVlqO};HdP$moz<K=0DvAw;? zNt2Vd{XS7uAFiFK>N;Nbduu!%*F~TIRtfI23m=G1>$J0T8qOE>^c>dCt1$E5CZA<( z{7G-P^#o@6coHAl>Xm(AdTL9q(7qbgGR#)eMi~|H&lhE0C8ZbN*ePBsUQk5k_DSc1 zU8&f;wa~|YG8CleL(*N-W&Z~H-C_}JG?^M7-({8N8S*xJ`I?n2xD{r#+@!7!XWy(? z89!)gxl(OpYA!fkOa76xhvDW7ym!~B&b|n4?8Pn}^YEXS<py9sN_cqq-p;2x4BhMN z$MUqPajM1@mAm0#-Q%T!ap{&EbBwJkCahY8V_x)+PDo8_xBTS>9xo{UGvwf#8?oei z?{5YdLvR&o*Pm9py6o2#ZpT8VD|%e{Q~J_{`6RQTdI@r$u9={owWlARq@Nm@nldU6 z#~}X?_TDlo$}j929WVfCkuE_(Q9wYt6qOF?4w3Gz0S2W+x_gi=Dd|>`?v9~rXe5W` zZ2s}Qb>8=RKAiL6taWD1at&+Y;+}o)d++P|)joF4$i2nOcpr;Nj$)j_n$hofy98pL z3=Lw#J+-sL-h5V;pYKnwxVBch5qUnbm43knS<Bs@eR11`$}T?AJB+1N<C~u!$MMv& zA72v%oY8gF@>Mi7NnsOJ66tFe*5=oT<-2pR>$l8<`rgb&#>nB1xkvp)UxI4mMEHd~ zmq+rkfCM+^)32zou)f~p>gLN`WKZAq9lLU(KgGD;fbYaF!rhTsU40z6N>WqD$FA>< z!M!g&iV*(Nk4&1u`@!ndY6$4A7D`^5OjDwqvdOJnxM!ZWE9<1PUBpqp!Ru3K%VajQ zrJJLpCGBWZQgIP?vRTS8iW`4o<p)SZQk|KpW9Pj}h*y`qthHKS{PTy<ix;hiu%e=( z)5xJf=-GgJ?l8IP0HqL_^QMzP>P}sAV&%+?rlzoCPhh}Zs9OzU*9|QI65gKt!d&NF z#5E8=roVG>c5=G9f_8n+4#wTwnt{f!Ffjb4xC?(wg$EtYL<wJCK>Z>L3eFsnY_09# zG%3CqWU^Fjf!!-gk9M`R5m<COY^c5VILfiXJnqy+M<~DG(b1y^^Crm6rPDS_1zLdw zk5g%LXVuhi$~$!S;bhznR~JuaXK%U^#ZfmQn}L^1P!7(RvRt28cqlceyM#n;aB%db zh3e>$%Ex|WP^*ovlN|(7O;xLNdWxJIHiz%jIUc9*M+Y89K+f_Twx;T9dgpc~F1Eu& zSW0xyS?HFJ)YCAzdFMa7a5R7J3ySu8wq#d`iE~I!MD!{&{BfO@O^tN!@aWia&r@2F zu8YxyZAN=%M;qH{La~CvO+xTI#-^n)k9KEP=~+~XdA;Tmu8vPDsh$*oRO3`-F8%T! zCSgl4snE$B%z^jibPW!^4+|S}4WRC_sR-aGzX*OCSFobrAU0mD?u`NQLCBeFj#6Hq z#oQAr)A)A2t8LdW>==0V6>?VCV-O_>mD-ilo1dS5{$4C(rW*gb3V2@f#B}9+7aTML zb%v9h#SPqx={@dl<cI_^L8eF0(LM9T>=kP#PnUwfNUwi~Jv3CXOP;FUB@>plUif5Q zWo7aBg96xXob+=uC5C&(o;-e*Uud1xwYL<}iUl$FQ86<EJ*M*BEb6DENW!EOqS;N% zRez=@^dT=C+W;c#NH8IpIkvp4lhG9!Nf#%ee``8KTBa}$UExo>Y(70R+9geOLBW`n zcBR(LyE!g<ICdNP&mv&RGVL)Bl!d3kS}T67a|vUid3gynHZtT8Lu}lED|F@nL0CXV zO-({UVbwhr;Lwxm>-*YaXu>y8o>1&da5p|Jzp&{sL(9E;#^bKq(C^>MC%1mzJ`BWw zkR@P~ve};7+v@5n!1f0Q<||>a9|+3ucXrX5*V6?}PmPRLttU!DS!`zy@xonG8%mM; z_wp{j`$c5^=0k)N%-@ZSOq5_g;!4U3>ovi+bE+6Q9rIy**p$KD-GhvKuIvDks=&&? zkg(Tshm4-%1O1674L5R>9f5lL#?Ov#+?&GGXcZ{xlvi$FVEQ8zWGv6aw$J;sj@}rw z?i6p1u~ph9zZR+<q;~C*6;5T0e~LwisM;<nvQFW$%!m(vQ#7Q*@_4Fj>80213Bvs# zr>3@k;u3P`A%=`7|NJ&22NMla^Ms1eZa+8e`s;N_P>@FXnYV<5L^(>BEncp71Km!r zqoX79o)r%zx%K?2lB#O6Y5zh;M`Vk{Z4ao_ZS*Gi8Ui7(v5^Iaxwot7CH})CZm!9^ z?N6t}Jl>~|=-%Y3G@h;^U1vEQ4-@Qy0-@^h1yxlG^XVg7TkzW#-rjnd5`nm@NOUq; zPZ3)%h3a9#Z!q%<3Sg+ql6c|L=X`uG(^axlJ15Hy6bh2wb)*U6cXBLLeFb(q%A_wP zYAMZjfPabb#$Q<7+21NJ)X`0~p1vYzho_{zh3OysFinF2qyO;c(UT|UPo9|Eo%0XC zy+-JkC-6a1<xvw$B`DqY(caVG{#gUVT?iy(V=a|5#No<wAzGo)JbypcwXY5ZckiKn z@MA!kMHShPa>5}e;*x$`k#KT%{;rDlctorh-P3cixzW|WR4Qs~Dj{j<FWt><jNIJG z1Ve*^r!7^Dep}qu-3tzIkNx*}@gGV)+^s=l)p^d!UQ(J>5k=ronYYzj-SoWRhhZ6w zraQg|-4E8?{go(u(J3+KTQBZY6Q50d=-!S>GI)F-tk@P7>an^WTWmv;X@*5)sHf3P zVY>wQ?jLMm6I>7JmLiiy<4qPfmzg8JjXt}-;wn^gAzyB(UR(pn`+Tq8vFNwF#zj$& zQ-jFo)mp(tX<wTe{gy1ZbQjvmEZmX#{ne@lmybUv1YO}7iKUa%gbaJpdAsP?)KlhF z0u(gkck5ekf-9ws^>2>+q?;RA-{tuOTU?wSgD`0mQy%bIjC@WPc?p2b8fPP;;~u;A z6^Et8jDTYU$Xyn1tBOqD*HZRxbsJUK)L9-#7gcF*?QAS8tkT(I<5I$(i-<Ga*RbeY zafoNt1>{9cW}t%lIL`~|<m}KQbh`d-nZ=bSVWC(GlAl{ghU}8<>`59Ahw8p<T^t@x zfB(J_hDRRXy+=^r-X<=a27eg&Iq(dEcGovBP%y3E(bd)7)%ECT@5^T@LPDEsa}AB6 z?fuR1ztd>I^^(=3(>emG{qI*b%kRGe0dIctdGh(6WESv)GQmHhM({c3;qgDIfDnl6 ztF3>sPau$lPoNn7=k@$f8S}rN4el8#{QLRGga2>-fn)+;*go>O^hx69JG@;qKw>@k zzj?F1ClZrS>pL|WX1}yu+E~44HMM<bT=7=>fA^MozWNUs{yz<&|L7DO?FI<s`1|Ff zO?3AE-;lq@;(tG-w$ep>=*FgoX2<9r`SA$|;9wt8ZnXTP&4tutPtYA7UY+afH#m(t z@rSn`?Zus(xcU3xB=bKCYFU|RVy_qUJnU)mYR9DO>&pnGoTa+?-=%pC4NS=CR+&4k zti9IM-{ooIm!1$p-KBEmk_o7(dA`bxj>}-*3l1)h;pVQctf)9W^Jw~WK@osQX~Pk# zS_u+a27Qub)8a}kM!hcc6C)F=-?#7-G`J573ek*Pai_|wztf0{i;GT8Em0}Jq!XjN z-Yl8j>1W$=qedeT1N#j7)zamr8WafGiHHn)i-*iAp0p43r8NUuaBec+&dJHi<^ElK z{Li65lJYd&3kfha+JZ~;=Re~PChMv~yyMX(@|27DJeFncrLt9~rbkAY2=;{-Y2fgk zXy$NQuSV0@kFyAj11*C;(6`x2>MCPuDq|+_UO}gm!|%qy?d{<vHm;x`EC^`J0U&%@ zYN~C`yUZ~s7nZKBLazQ*f4|$!e|}k{`^=$SUQk$TP1Rn)Xi5sBDcD?{oGPwg-8z(( z4dK#qSngN{W9UZ^DOqZA6m?}=P*K4mEX*s+Roy7ZGtg2x?tI%ovT$^2sNrkra{aCg z`D}EhR*`hJg@sKo&|(}QB2D3%9725aZIkQ}A}jth>jsju{=<44AFT7^w269@q<Z`p zy$rQN1j4Abb!C0MmhMp?pb19W+lQ?XKWnSCy;yOSnsRe;;(+2nUr}*#ehUvWAE&6J zb5+7C!gco3N(<S|4jbA$@*1htQaQfB-nG7R2~?a9BA}0dx@GqjvRYHeFYzYig_awW zFfTLGP`<A<ZnX-{db^p{M#OC`hWH~hR96Bb{(@o?hRVq?X+GbH&p{b!IXZ4acfChP zMjV#5NPV!XQu?bZwnfY5j3F-ZNlA@f=OQgXq9YfhKv>MAMb)qQX@qqx$=2kq`BqJy z>eJoq>#Yr?(J>wxIjMTP1x~s*CF8Jz-ecEU_pom6Ie!|k7H3n*>~4kP-oZUc=6LGv zq>_+a=m-tm(y{qj(o7T89qSj-(C}$0N&FgOTTaRE^6U~Oy0yMDrU=_VZSeC;P<;PL zJdA2}VZp@Qi0I|qSdlgfHL*oqLwfr9oUQHGF0kza?0P{9Ojb=znOI-n%OV6fVvvJH zAf(r&r?Yk<?aZY%3?l1Hd02abl-UFhvR<_h<)QWQRaF(Xm)^XpAezN-RaRP_Vsm$Q zbaqfvO9_xNX!#ZX1R3vKtk3sQ*HDuc-0%7jCJiqU#6+Coj4Qd%OumZ6*;S8=Q;MMN z{&LWgaN~6BJylTOmq77i<HrfaEG#KeSMcx4S9b!ew;gOv&$LQSw}QGC>goiBVc;Jq zRAzCJ{u<R{3z%>wzZWlfQiYR6&4>5|cOF3I$EpChLJ}Mchok0wU3(JXZ{~Iw@9(8d zMl%?q!bNAKS)Z^La-JujUY!2gZMu%#=>56iaCKbG?`Xn!;MVZ!9Mi7wKGvOpx$_Dl zX3lj7hYWk0urq;t@uKvupDh?;dx)Pu=>%9_(9!XDUzjmR{sEbF-feKJ<}gUlkXilu z_m>^Ju%s;CK!rilUsIJb%uM0gU3zdKc7^b=51D$<%jl^oaWP37n^)S}fyv3;p{4)R z@WjTd4x^CgJNl&tS1JWPH-!g%ON&I){zjk*W`0f0bY79}&bF*Rwr`}wpR4oLG$D62 z5RD}USQ*?83UgLxf0b<a3FZ%W1p6tut<0=Eu1-;T`{n&YoGv;sliQXfNhyw`z;aS( zNtv9@de1msJk#FENHFNOygWTK^Ush(DJ-JmOG@GMX~7)fUL(%a*Z7pQ5ITluRwtGv zA{_JmI1mG7JUl#0HFnJgvz(HW#PpdDhAop;Jh59ZvpI*as~Y91?3cn-<~v(85Bp&v zBn0y<ha4@|Y^;ysStJ=2Bk5j=TXwTptU1^X{4iA5ZAN8CGL$YxST%$}o^kYWw;1Ca z=%r3Kh!qe}@T6Qt+F2{>?0_23`_E4%vCs0kPwTWq-d`k8zHf%emI6s*nf2V+72B=S z`i%{NIw9kIx6Dd(G<Fg1!;iO^vFKD)oy9H58><nUT4W&;L}~p82M1XmpDQcz`6OP? z4Gr~KpWBznGVyB7&J@`w7HVsOe!R1D&HN68mjl3K#~566Z`hOv6m(kxP7~Gm+}5(h zCf{P(+u3O}dvl{J{HQ1Z8i1s`1u14bD;n;A_b0$~)6=85HC5yMk@*YjIH3=tR&S*U zsg(^3X+2<3>0BAA!f$f;xZL@d1TM&p7)ka`+VC)Z0Hw&dS>fvrCXcJUYIbfO70|e= zd~7w`t1&^(M;GbOWAYz_)>D`Gzv|+a@23F!8&{#^>SP0eZ8~54G5Y;_(WX5W9Wu=) zpKYS(|MlTDK{P2LODxNZhJY$u!1&@b;YVK&J3DRZT`zudOetwjO6bNq>H*aQJKwDS zwQ~XVHQyZV*YW3bNU_=ctnS&_)kmc|Y~zzs6UzGOFSG<z&hHp}az>VKTc6v_>~cct zv9T%T8$W=qM3bpJ)2wnT#W6n5K}RQRfkk|G+ogfzZsuIHUP;LgZmhdo&6It&U={7x zZqO1FwS{Bd+b6nr+Y>FkRD+^Yy!f4q3rmQ%jn|)Ry)5RkN#G?;gTWd6`1r9z&kvo4 zb*IS`fOe_v(Bm@lQLgKbz)MWRdnbjojdMSLo;d%CeQGRi+z-hh=ZeCjyW`I&5uO5s zBp`6%&)zW(=Ao241tr+kJ23EhOCYc`cHXA9v8U)<nk}51`+1*A(#A_)E{VMHXl%;J z$ekO087<6_E;>&5k{0J&XG_#B<J-5o^mHjUb%$E3pg>TAI1Ofy_w~_ds)^C1d0&6q zQc9lrE}b3c%(Axs_hRQNf*2ZW0|Ueau3ufq69u9Jz74N8&3u<(u}+L2ctlwLM0KO< zOVS)nAwMsV&hIwvLH%Z!W&o~rZ8iRC<#Vz!U=pba3zILPx^GcE9>mIO9Xe!Ekdi=# z`n}YBJ{i&5bevC3<>6uSUE|qPrC~G(PE%D?Sh*%C9<9L4z{DF&a*{RFax{J-wXBL; zZ43*z4&P4~Yl*avjaNp&J68eO1LxlRh(WSIgL%0Cu#=JV*&Y=s`#Z6Bq6wl>$V|1; z%gPeN0`FpI@^_}{9$w!}j<JXRd+D$9?{-(lewpejm>SM4r`5A}{pCm2qDI9A`p?>; zN?!t{_Yr8l1K^f;oEfj<0;wUB#(xY*00U!dP;0U1#UJgr#@od+7_QqQW;Jo`OY*6l z3m+M=`C-(NrrnKR&r9yyg_-B6Y@7w;0037>sqdW(Xo;5=dyv@GV)6T0JOhNhKkAhs z5b?@NXRAvaS2^cfN6Lu=i|bGH%1xx+oJh*Zv3L+|y1BbkiNfELxn-;$owZ2F*VpjP zxFeqpS3+(@!4oCoiF%lz8{3Cqz-WYS&&{amNI<-v_c+Qf*iBIMR{B$Oo|5WcJUj~= zFk7^swZ%FTTu`wXyKq--Xk-kqRAm{(M|fvmXGN>yoO+`r7#y8iebAOEKG(hbBSkS& zyy5cL(G;vNQ-?CH)nR%f4!=ut(=_Q^ctt}((xLTUC3m20a86DKE*$Y&6aW-1RGaN~ zsnEX5r@)Snfq{`KFM)abVUDB8N7TkD1^{}ERrnCQ*MvcS$bM1^Z!D>7R_&^-FSMkU zc7r&~k%{Ugsf}Ki)KpZcT~R_B5r@4D@~bO7dHG*;bve<weIU3>arfo%wy21gcvP@I z-ZtbieSDLPt6zC#-T<ag%jNaCtJ^Xk9aPceU*yIA8j7{Cbv~W2=;-JCPi%gjklES> zNisxq$ATrb`O@V?=@p0Sb|CF>!$BI7nz|%(Errwl*GhM`A3><r!K!xJ9CYp?uY;g0 z*;3gNF<Q6+97s5n+!;-J(yAnh4KXx-RkRxilOS*W2nlLFeh{<)MbTu>MGQ(yKOHZD z@$&E(w!VfrI=XUbb^mUh*%|-!Ftl|3z#U)MZG6Ih;p1(yf3*NEo8Tsby9Q(^a&o;) zejP^ptlBO%Gj&fN{t%=WVh}Q1UR!%EGS}nw7UGlq;J<{}D@Mz^D{O&1*Rw4oOG0h- zb;&)vV|=`;<nU@EL^u?SPFJ^}CuDlEoEdkj{iC+R!pcxp6<$F~jG0g~yZ=rw@3Rh= z<o!@>dup`9_kCMZj<P!`^pOvRJb&My5iZ?*pu)hS10u{xe$x9)I#6>V^P!qs7z#=U zM%_mHfGr@m`PggHpBO9KJj_i^!134mJBln1weH>McO{3suCkeQ-g<MF&ac%_F6jkG z>lo^m$xwM*Sh#sDWT(Vp4fM|JEG*j1SA&Et*HJ@BLD2e{691o)d7Vr40HtqzqTGh? z>V8VoB*=d{)eQ9AB?Sedp38@(X<pYSM7EwMgCqhYxDY$+1Oew?!l)iEqtV9x5}4Cc z0Pon9SN^*WX1|K63fS2s$|);oY;=^1XR=eO#%i5@7`G2DJg7T8>{^{(me~0rP+MR8 zjQ<82x_`f?e@1&YIlw^j?zG}v4{9_G>&YR(+l~3!g@u$j>Hy!(g?sSvO~{UM@g!f4 zMB_Ve7BjA5;!#W-ao!Ao7%h^E$ol*MJY#;}wmb#?R9w}n-auq0CmgR@E`GI0^d)ic zU83|tLdc{r*Vopj8{7rCFM`|tnm?a}KPY@?f9th(N_hwiFVYrgRnH$`WQ<j_dY4-- zpYxg~{CuL$*tY4kr=eDvfo3P55VSvfdOxANUPs$;scKskkomjqOM8GmL4gb?r4Lnt z0s^pW;Z~)Ug`a3b@WkS;pfdW1CZbZCj#kE83a_dcd|GHKG7m`e@MiBP%34}eMx6Yr zG$d<<T<N?gv%6#KA@IV4=U+E54Zhw+*L%79?d8!?+pWi*UP5zjOY0bM&%T6)#<<lS zxao+(b`!ax=AfukP)f4t)=8@_?bW=xCEFwV*TBpn%e@fCHxCls%~Ny_3#$xJx8j!k zRL2DpyO~|8sz=B^UCsi7IjA7f_$T4^X?uPhkmGmOpOsb9*h~xXRtCSVNk=|!ox_*V z@oo>(_D#g+g^!N{Fxd3HC3G7rzRp|x%wGKT%TS=ZGl(eh=c_9&Qzld+Vb2;Ggg5iY z%QW!!RA{F%3RlD}YjxP@9K=4qG2Fv`{e$$~om#QZ5yfBD^M>ApGanvzit%*qf46ij zvAS|;U$u2TEc;n$sn6)waJ4~{-h=;X6I3Im{(%#r9<#PK=3KhnE>1c%c2j^i2#K?N zF*PzgslqQH@J&?8!X^S#P3gM_lVN{Pirb){(MAk&vwOyzGSk|!2NfneLX$%Xlyr4z zX+@{<K2h&(%j#g`tU`hCHkhRE1Ry&%<V@XGO7N20mGhceOrOqLZl$Z+d(qP~x3e?1 zzLZF?dvkL2!^+JCx%XaeBvQ$gG4s?jqiV$lM`wy!)Sp47o&M$=LhVf*(j(@kWijb` zS-0bocwZbZQ#*<4;g`Phu)U9lff0zcn)8#%FNR#!!8LPz34BYV_Tx*|qHVv3`31Ct zRe28W+}he$796v_8j!y@h)c?r;NtsFhw0Kxa&|NEZ)*moz|#~BPIZXy-BH=f&qw{< z!G8+60v+t00IjH~rQe3U1r4VC?}wY-+Smw_PignIrem{dCKh#q?&Zl7Hi0@*nqCq3 zqqiAw(kp?~V!~Q^$UKvZmeyNhH}oY%=c_B>rS-1v!cmJ#b41+Oanh{da_Ox6I^<Ti zqNRg_2SC@w12mExs~Q^Gw)QDs(cV<KZ(E7MZkH-0=z8G>$n<;0>dwy8syo*>ul`5! z!t>v+bKFRBc6#%5BBOnF;+0iZEvv$`ifq=X1vVB(<~s9>YO1-MSf2~_QzHiLe_rH| zFi4x!i=4WlrqN@hfq(Rsl@&u{L3ZWkVIozbYti;j98cvtW4!PW`C2c1*mY+Q5DV?J z+BQctXpp=5;wHdwN~g+`^yd@7eHxJz3h|M_!CELPJzIv9vUqg!Nc8dq<1&nqjV%hI zv7)2*QF=6bLgWcYpHd}YFgKur<caQ-JXV=q$-Ip%OZMB&e&aK?e|_(Cx|U*{Cyah0 zV>~&zNG3+|G$0P7dB*}}3r$G)vuRVBUFikxvFVV<Q2mz~-SHw_kAES9{}=(DWa<aY z5{=n1{Bbwib9`=~Vk)&D{y_fo*J7Va>Oo?|HjXZKPa7PQZa9bWq6&o>>(%*UbGU=> zBT&+9;2({Si_Ss&8}d5diAjQHx*t$4Z~cK&?;SV$vi<^=8`{;ZlXSj(t>N_*5$I0f za6?{o(<Yzx_vNY<&ZfB;4c~ybrkuOck=#$~ik6Gzg~l@%OLOx_ep$Ilm#$^d=O6Fy z6JXuxDlP`pZBEXZpPxoZ>n)%3|C~&5eUfU-S;P0le5+q{S2=&gF9OirpfA<qgB8Gh zO5{rlzkNfLBL_g`pwgSK%p5}YF>Tr)J0wJ?;D<@MTsi&(D4*o>w>WjgQW1Uxjd}`5 z_pHxv&|8qW+Qp9`GC6VzLP=5by^rh64~~b13Obb+8-;|O1iXOZrs=YMU8l6Hj1Vx4 zCcFSh`XA_)E8TzS798b#yuT{A?o+FH%a1&K0LF=XmLO`q6fb&TEJk`X+1A?|NzEk@ zjur1#<LaCbKngq>>E6B_sjF=ylH22jFUlpL_)gmg1tA(&u+=y3@XPi%d+i^f<mG9g ztFm~YhgA2zZWcadAqhVEaf!V?q1;tg5%a-(sqO9c9M{u)#-k&-^JD7z9W*{ZzGpgo zGecT<@dpFGuHImK9Z5SS4c=!bAs@xU#XUZJfLba?hfL^O>%LYy_W!np?WLY9==y#A zb?mzz`b`&otc}B7tIIk7#4(#1Yi(Tzb^hdv*#b|NN<m-R?)r-tOeQh!_<WW*Zz*Xh z?TsNQpHa7b2yeEjSzZd)=SYE!$8BQ%xNpne*%gZdNu~;*pc9Aw8OR4rW1`y9p4(IP zY3sU+f5@FnE1rMI9adaNvVT#^Hp`y_U%ledG@@c2#KZPLzCI6KR%Yfwpfwb0(o!q5 zWku*{xrM5DZ-5OtgGj6=Aqy8K6f^0ES6ufKjdV*57c1aD)6~!&ey3)W0y}IvCp|fZ zf<5r8C?_&!md@D=&?ZHCjSNQ1r6L=@+r#yq!#2_|<h2SO##Y@B8n3ezJyM~mFMrgZ z@6^UAS;?oxeN`-kUAd=K)g!EcMlFNZdyS2m@P4Ro><#4<nJk6HyY}rRkDdf1PF9wt zP^l1hc|;I<F{<Kr(jlQXZSCS>!OR>v7=D{1n3$Tl&TbH7u18Qh-e3?bo>kdJ>B)=r zI5zHJY_^vf1d^h16fJwy0A;QVZio+rc3AbeuA0l06-Rulvr~%CON*Y^uehL~yRQ>$ zO96VDtE>ArR6n2FhT+x9#?;+VttHy|dV|>q1&;CW7)l>N9b6ryWIq=bT3T6Ks~3!D zg~k#5S}naJ1WrS$PiuB{Qkn3>%B-E<G!53MbFx<&no!QyY*p{h9*QewBTfe7mc5IM zy@NfmJ)iGh$!&;%+Qo#K1V&)g;+Hy)e4S#I$1z&g)e|$LEiJvT7fC31gx-7N2wQ*B z1do0gfRwk~#NWS{@@iB`UvqGBva`3R;O8_O`h8Pk_#SJ{$HhcWauMB&?*_USiYec+ z-^XAIMUfBRXJ!nSlagY8k`JDE3oENJv-;H3H!Xn}3{1ZnwEAKe78d%D2h%gU;O*tr zKu<66#t;8t_U5~70II5`_48C^&penjw(DMUsO^qpgY(*U4YuS0=!zn{cc@M6V+3-A zac}=Ydz&9KkX#%uaTt|A1s%uH3oCVP+I#;c3Lpa!V*iAD{7<aR|0~4SFB8K|;@C=o z)Gz{i7grEIWn%dEK`?;suv_}TaD3P&NJ;#KO{`-mJD9X5t?M`2KdcaBzAcagAoG8} z{zrN(B&7Bh6O|ym$$8V}U#=mHa;|i*JtRa&tOHbPpl%JJ244BUU)5ay9=QO1&Y8{u zqHowDZlbLG^=Vgkcwk`o*K5z+#u7H-2g5M>4+0Pz{zg50C8bC>-1W%9-BBi4IvXrC zP<JQ}K3)Q^>%Fx8&3botce%dW;P`uAw3845MyWz<?aK7W`%$vVJahsAR(2xjKb(#K z5fk871nxQ`#zv(;2*COHOdpYgP(lI$;`$POx}k4HM_NWyT}y3rjBV+lhK9z*-d+*x zY@cUz1J4E^9*5V^pBo3Y{|AmE)RduS66Y|n`Fp`}thxxr09%fNj7H^#$kVWGo={=( zTF+X)Fk$n`sf@)h>B0a{f6YCLtKEbEsXit(rFC^pb#+%dec3?Y5yz%0#NqyJvI;j; zuKD7-sG#7SUAlPD`j$#ethy<@7aI%9d%=HH3@z;^KI9L`WJ}4J-TVCJ6L(=ej=Xk} zn&4MzwCP{V4l8Z!um*tTH@?Xn1MTPjev&VSg2?y%Sx{cn2?^EUPVP4vbe}fZUI#To z!=0S-*BC7->l)?MbadcwI3=gU1i*{EJcTf>K0@vyz6u{OGijaP`N-kwN1&wPRur#n zZXPRMME=Vc4e~rDS^E!g1C!r@<5X66H(i|}qlTo1RRKqG?Xkp_$xb&cpznPOz_;p_ zGW5fKph8PY3FhY~1$XUkQIWVWpmyo}0Ai;gGGlS_dL}|C|7^c7tuM9yMTf+lYJN~| z073(_<G>HXg(F1%gf0K#B)Z5;1yb`0XNs#C)YNZ&OKwhO%n{M~>9FRHm{m~WC4<Y< z;2a6O1sQk^)Myhma)=qZOLAgzPRFs|r4a@+X^4Rd&u5I6CqX!kdL`qV07F0`uD!>8 zF0k7^PzuX-?IKp;H%pic(d^93{57qUiV!qHI$(QW9!2OBGx#m95RZ(#IKyzm-_P|$ zM9b%bx*@yk=g%wOu`0yZxnWU#Em9zjsiH{U=KI=<KJA1@E8=+S@I;k{-*Dm<{xd2L z`ge4@0$xl|)XwXv9UG9bwOuVp|46@S$HxXzU%E1Db9DMmDZko#jw_r9l$<*aozcu; zs6z*J7L{ycRj{Y4=;^)2%rCN@K8JQios&+S(V-<6#hYF^Z^i+4cM_Yenb{c%L7C_9 z%TEJf$1|^Hcgk`FN%}7?!ykldDJv;S;nruKy$q!!)m3LNDl#YAxOLkHkyKu8wmp?i z$!q0k=cIGF<`t0I<{NM-yx$@0DT3<%2gG)+RLb0q0+S9%@D2|fFlZY-v>h^>6^hXl z_9qHU(Ysuq3>S?=4Sffszk%JzxYYVp>(7>3H@6!h7k@`g<meaHyi2B{<<-d}f0px8 z_r{BT0k(J<%ms(qV3J-tSJ%sp%`_}JfO$neG9_V$bHudYtH%9%DgcY<q5N(=3@vpw zzI&yu^=&|4xaZ0!e)bTF7|8OgWlh5~AedN5)Mt25QzwwjCTdR~&Bn~El}2>n0{e6C z-Z5!?eN{!3@{_bRBZUu!zml_9<FuZ{7F2HP8JAN7%!=PiB2sc~Yw-aHPopNLpd{^d zd2!vPlC4ytckq4TzJx>|>s%9Ze*Wt_m+jM|KiQuOLqmIQirJdH^@2&|@UbaHzV?G8 z`KwiJ{dX(ib|f;v2G^Z(<&CpVm&Zn4JdV+&F{}n^zhKh-Kl_Jk{l|d)pZs=^NKOi% zCgU3hcynQa$K)`NygZ7LW+&%J-+QGQbj*Gcfi!iNprZ4OC}tZ?YHk)Q^4cC{&clBk z-AN0UQ;P*Ig_6(Vv~scR#1DYAN8OLWwQSQgtszG#AI!gKcqC$adSh*kjBK8Z#dCSl zf0$pV&*v%@Vk5A$Bq4gxb5A6Vl*T5<ck|*@Ie&tPE~{$xL^#0Lw<T#*hJ-z7ebbUj z^=HC_9Z#|x<4?u>fi$YSQkrjZb@A{hG%h;gssc{oHCCRkKdf0qn?HN=HZ5QIkKj8` z{SI0Je_mHh?JcHMf5+P`th<4uC>QNM<bQA^tk}03PEH0fJoI;ut|K4;w=?@M%*kt2 zUeObV<6wP1duWTAAPRn)k?~qtxf~lic(=}yCw1!y3;puM;0u`|pj$lhXcW(6d{d|t zDPNnBUIu_NAx6et-L12ZFHk_yotL9_Y;-Lx>!YLpfEC&Tqy{*1zu*CH-5NXhl`be) zu-C3l^YhKKx?9k_LdRUXh-p1b^D8R8=qc&57nQ`D80)$%Rpu7g?;X2Lwx@Zk8%Fr+ zW)6bi1G_6mc#2+=(_T+vr?}ko%uL>dvIIC^>x~6LpQV*mx}n1MHm65=e0Abuja=E{ z;dPPI<@(_G;vsD8douU#$#8NVT<s=G^ynEts-q?}f~z0!@{)?ANf^_c<;5qd8I)<n zfv#Bg)inhzPftIM#63H&m6cJIR}bgi-H$d`0(GY>xW~_g%WBCqFsk#X5ALY^lwt@8 z4Sinp+<sAGquN7NRaZtPS!0VQuN|YB@$aX|3B=&<^)&VX_rzd}Dunk=0Q|JDU}J62 zAc)7wgT8}X9y90*4rAk!v^*mP!?NV+>a1`kfDOc{RRWmpqH~PP)Zwfau+U?3-hyIx z;J`&SBPgFcygg9{d#TwkBjdq|3!bJ>c|owYbu!P9-v#|*SQwrk0T6y39D8}$YGx~4 zBU3{eNph}-^SI}{t~bk;*2TMpe+v^ObxlDH6~I$<I3;ebP+L^wt7le)5htE047>XN zem+P|8*wt@T7M?u=A%uM%4zpC|CYkPJQJm!Ap{3A_Lc8V6yWoL7__R2Q78R#>9@_y zHP))C$A|NnShzgWgp%ak7PobazrAtAC&N*jLs;{twfqVQeuFLsG6MQJI|sgvS~z-e z#h}X7(SG1|$C+Lo&dMtQ86rcnp+YsZnORKI=nW>FpY-V)M(CF>_txvB+)h5@>R-rY z4w}8t3Kd7pvRPVK^!7dl(N<rhu52dj1O-@nMz`5B8G$k^&UP-di@os>jo8y1{Fbo( z+RA#F)#T#m&jc74W9-da3jA^6m|)}2%0_|{gVNJz8LpKGRmnIU$dWJPugih{K)v{o zVS(u0DJb)a$jRyNV_8^GcwcVYd3#6Z=GKI>?oK;@EiTR#^`DqI+Nnndgy2|M@A4%l zx;D7}K`Mw|5^^z3w;24PzWnkvQ(2xkZz5V_Yiwvpyghx*TY-&DK2Aw%2MCDUmu4=j z`7?igdMp16w6xm@lrrHDAe+WMRc{NS84ZWg`DjPTG6C>XWwN(7JFVz{WyZFMD1BxC z>+$6a9EG?gH(?~By+7`)aE_ny_-UbynHf+J=&)%o-pmi(3bO#P2YpSxQ&T%KcGS>x ze86?>G5zP#*xEXCvWWrWV$|I@1GFaq-CbO$Z$3LS1**gCI9(<4Za+V=pb5ErC3Urt ziz}$~+qbxM3}6q}b?u=TP(+*ND?aa`o!>oJX{*lT)HhgdcM}(<QT=mtKtW<Q%omg% zBCPm6361;x;&^2J#OU~Vd9i#_8q8n%_|1{u#x2C)U~6m871#5DcmhsqtzX%n7V$++ za_Y5n)e6JYI%+nHC&h8sdvcxy!arY)F5b%)JKA^}K0KJV(oK?^jeH!-0?-h1RnZR$ z{_!$vgw|L@ZDd8+!@l->TjP3OoDY8lo^d_yxW0z#owkySru5bsn0Ev9?B0@aFA%1d zG+!|g8|>r%2@AVN96aN4?eUo)Ln%KzCyTNVZDD72csIY%wMRD-2p%{&p6rBQwo^jG zt163_kC)AB1FZqW1)KHm>+cUf8*Xn0-(eS=o-(xV<QMT&T^dNF5o+F7#C25nJuXpX z*4EUf<!n?UPIc*JK?I!726j7{X@C7tC3^uL$PrR1ItD&7gJ|-}p*VsJ?hbD6wRZ(S z9jvo6szCL7xV{yrKArlU&g851-5O1^5sEYV4ES(ey)&p-K%qFlvFNnxbs!N&*0$o1 z`bLZ;P(Dz0Y<v~6^>YJSzm0TMQcBU-I%~miR#h3>newt5-|-E&5mJskA)?XvPOxsg zU^3Eg>J2C<X6E$l(3l761Fr&>fAh(Vo|yxoG$0c_%h%(t#$BBquNKRB6ZoP!ItJ<l z)^{7r8Quw}e<L6!k4h2Zxsj48y?bXx0p*O1imI|&H*B$ypkiZwIIwG>NKThk*}FI| z^4g=(d%PG9&CbkhIXP+m4F}N|D_{*EV){Msk@;S5Yu#oszt?a0z618i23(KW5h=fS zVyU&~kDW`)?@;%eiP<luSLix^LU}i#zOQ)|`h`Z=VlIt23oO=0A+-lpRL~>=V{~e_ zjN5n50PhL{Oo4`k=Y_TzhTW#1^TsnUH}?*Y%E*8YWpm<eW+!Rm?#5=|zr><n?ZpbD z=gF>Dt=tV|Sc*baRWQPOx#j;C!f@+$3#1wn`-&4oBwPYhia+l7eD{f81dA9;;fBcR zi7H-T@6tiu+=j07(K~9EX_0SD)rb`!o3{9kuoZP>+MdplYj$$oTw8f0fdf5DBwn0V zUx)BwpNkyinywD6+(twR6Nc1gf~bj{tV1Ib)X`CvFOwP>4b{t5xR%x#F%N*ZgRt7J zNrAxZ;<5pg&bvu(mEzK0uVk*u+E!7K{0Ir$7~<{vx~d8&_T(2&W}UD<eiXSMlpyb7 zla<9A`hd=8-)L!-3Qv&3d~2a4-!DSk9C-P1F`l{Aph9Xbch}rIU*dA%VE(apbu>4( z9?#>ZV#_V6o>Qhxyz_`&B7rSN^0&%X=TPLW>HT~6zJU5jc?ED~$BN1f_u-=YW+(3$ zW2>wtzd!ZX8Ts{=E9DJ|zAI!x-QAs4b$+i#<kps*sf@OmWVL+zf<sD*U#FBkQCqtk zROSu+N1bAj{eHe(-Ex?H*n$t8J?%eGk$&T&jdRHpdFax{>)Erpwq_Mob#mrDczHNV z@f+@A54M|a2a((ylU=aBUd75keNv>;d^IyM@tGL^vbVRfnI9JtkV2hydgS3{vg%$y zMYT28F0<n;wiQGmM*m0*Y_`N-gF@DJ5q)PK>!%0t+FDad$q3`r)INE7Qg!6&s+vWS zSpHVOcuzpxY7g9LCLq<}t(WcxIk_dU$vWM)PxpbL=2po@V<`Mgo*l97|FJ87@H0L7 z6Slu+dC>C)T&7&h7@lG0X<-kMc(K9kQ44Bn>f|J?Q%^V`e?cvfU8&1ry?21J+3n@F z;Thz6OYg#~yVkLjm@S!0Y4FL|NBfi5V5Rv1UcuJpCcl@5A#E(+ejYvDwYIR>HjC%3 zt|BFg%NyMQm)~^B+?Ry}^U!ysAsQlExR%;urV(-dGTI*jmKaW8BN#4GkCY^!5n0TR zAM>g=X66=Ytg7M=M2h{ot*yU<HtjQ!V);5SPciT6YWDEHNE(vP{*j*<^!%0sADPAN zkn*!xoAc8K=kDSU%$%5XK!iP%Wp8gEsi${8TTD||_Zs;zTFG3-#l;(l_RfyN!^mjN zdQESUIk|YQ0)LgX0(M*s-`Md7%C3pw<<7mFOS1q!NrnVqx{0ocCAbe_ie}D0c@AtC zU46BD1D>impkFM}@BF>N&7RD*Y{%a(Qr|Ud<oktf)Y)~s{e1_quCVhnCjn<(jpDT; z*&F$Y5KVm7r|BokYeyacY$IJ(z}!2Ie4xi>9>a4Ej#@i9{=ymZo_yipG)@g|8V)=k z`rb#6h&f%HoHUL)yu`V15;$dPa+UJGe`mWYwGIbd(A3b?y6GG^DJ^*I^0x2Sh742A zM^EqeP7WQ{#j!R%;^GRIrdHCOi5Qr37lGI?q0_{(fq-wZj)vN3z}Y%FV(aLp#Ira1 zcCXwQQ)!%$I`J%?+=fg<g36t;ANe0_CkMy)Pz1nlQUtgcny+V6-e~}Zey#h#arN~j zm5K4kWdBC^Dc4ZH;vFD_i!ex0oVvG$8d=)4q**iV1yV^6C>hmdXCz2UYH6qdk}fH! zX>3fav|MdV(^?G&z5Kr!tPA@s7-kxPZ9!TtVtjCNGFydE%(H>fkAU44Yd!V2xUsT& zE_wwZRR($W+NhN_T42-97X^ZMtK+HNTmM^k6gi)UkL3*o+BgRXC4c@YJ<dArS((d? z)hf(;tUB8ohIv~^VA9a5ac>^mNBdSFFdWp5NM?_XxrkxLcY9rwtpqr~u#hv&{lp?D z_<mKwAddB~!BJUB5BOIL0MHdBf51<){7~+1<KI#ZpG939>;h*}!A5^-{R6-Pp7mor zfAh_Ib=<|()ObaC1+cT3S^Z<Lw#*GcA=OR`lehy1zJuvn<+gBIRu@+y%oCQ_y28Sz ztlQJa)UaciuUPtz4PT(y=#v+#6i19^)BB|eL$AVGx$>k?ID@GHhaO(g<Q^-Y!YY^G zgM`n1!o3I&-#6lUP%j1JL4A?1iALVzky)t~=L{g73b^8y)_!3TdLt}bu;b4Wu7doC z(J8(FSG_*{0-O{H?Mvw#vu1fdU@9vM0#VuMveqnW8^Z{GMD2g4sB1VyP$xIf3`(s0 zHxBiEi?tO(0rb3uegtAk+EZt9_vTkYB%0>m2u6HT(Yv_;*=Fg(gCiboj30Vd4M0mP zvguSeHFdXu3Rt>${j1}D14&P#oH%BFak0b}mW`g8(1Csrdq&hDkyw;fAE*4ycu7lx zpl*--1!2@yW`Gy2pIFno4pPj!d;(TKu%2SlEw|ubcP=@+rAJHd6-jnpIOxBYzyzK7 z_4z`zx}JAW-uK|{N-~(EOyT5&a_|b$s(<!{tV8Yha^?2|cRsvcsx)5}Vl-?~H4KM4 zEm2das?0tvn2UC`ZDtn0t&NYL__9n5sZJjHUJyzNvobTI_XFt2`A%xH+a8WK&)V)B zSNbbp1fvea|EgeoH<}#RL|d!_c#r;4`2lofwKvtU3NN)xk#C^H!6#Ybr4Rm*c4JMR zPRV$(h!<!xhm5aZg55)tXBGkSuZ*c3JmAA3-c4Bk=q$%0Bj<O}?4l{wxL_XQY^rv4 zb_vhv+SuBC-WT3dRvwllo^CBR!KjUiQA=X05L72M1!Ox*W4GVl2Qjfv`7814@kVfA zTNQVWue7@I{m=DeF!S?m%q+gUiBj_~YFRXnj6BN(a%mpnMq~rnOF?%KV7adH4(Qb_ z{HS9`^1)WimD<>YkTF~b{tkkS?VZ_j<R5KYFZnxgH=$VoOq6o`d4rj5$}*4TRz*Yq z<LF&8!QEz7x~#mKMcJuZE^}lUZU1xaSLs^?#l@LjRsGB8b}e5*x5>3f=%SHGeU2i# zGg*aC`1-U8LU6R<zvoDB%5A5w1qIa~J`w`|+JN9~#GNID1t#9Frrx1i(b0}UEPxv( zyKJkbI1|RjsdtT%k5w|J&|!a4EGZ+%dm>TkIhnybclL?p`r@FetSpjhr_!AYj1)j} zfHcxCLOHjOEkU%^t|mvX<l1^SQY0#;z4fhq4OOVtYfOH($J`urW2MLuK=y!@SZU== zG>*~YY!a9nO6J(>p&WasLh9<swzjyjs#$M^IOf`0K7X6v*ttJ}jRPE$cD#%K?h?cL zFH2kKuiI?TF~>x!3wH1Q_XICj$0N&|;=`<?6cp=!iF82oCnaSs-s`#}^pcT++3)vn zKYe60WV*tz?aiN4Ar{@1zx{3lTmwX6oSX;1k(civhHe7A-8SiFTYctfQa<_WmAA_B z(-n=gLvpDcQE`_op_j<CjJZQ#5WIWV17j=k>6%jj%FGwuM&ECSucvg@N*XjI;i8xF zZ;dcP0Ls~qkI~n=zH&=T?Vz|J6syp(23Dl{S2W;w-jdC?YwyB$ro@J~JT4#Hzc1T= zcV>F}to>?9oH$2L>gzqASK_@onygKcai~?w9adEzhh3fG1NG4@bkAqjI**qXlBb3n zva`2~U@-eLCwbk*!~K;ZAd_}R_T3s`VT%`Z9D9>lWr%`vxN;^oC{Fb(I80CL<}m_B znW8c$!_^R*ot*;>;)qAZclr~?3*5gTaorTIM|U4fP>?w1Iv>jHn69Ea3Ok;>22pCt zN?MbX`D;64=Joa9zzKG}XH%u`5$gJvZ`xB$du3_1@b5nV4CvkE1E}7i^;E;n%3SiT zV0%O9$pc;WlDHd4BvYdQo#lrQk1{e_0(K<P5?YZ5By0)du>e=Ofj1Tx9g5TtbkVdz zZX1BaO;^M6zo<R<Cd-8R+zj{)NPBjH%&=hA^WdN*P<eABn<7+=DO$f)=?rY-v;sh8 z@aN!wLYQI>+wOJwE*I>kc{M1Xbm?&l@K(6BghWzPZ7H;N;8RNrJ8yi8kAE|pZ)Rhj zdF2`w9G)Zo`*CamtnrASj^X(LD)sssv!CbT-dIBedL}LnFoO5)NMVAbR^3sl$Rfeg z^Z1^Aepki9(feXIB0b|Sw;*s56DXMBLb00K2uVzH+jy^wbu}@}<ldYO2?>8Z?ES*x z;_8Y$MpS=u0xY{&Pa4zQ0vs`zoF=#VOuJ6fFzOP%gHo}}uW6K9Mee>uJvcZ%uJNc$ z*<mt);^X;f#}0l=0$M_m(~;yjmN|FiHz<I_t~LLg8?Zh>(3R8Ms->tGA@ki~MOfeK zh=}e@<{*ub)5d(dat<&b&vp^J;-3wo;S~5|=d7#{E1A<5lf({sA<dtWY(~bS4ju2? z_@o;jou>TX5y5p{faC@uFUqhdXf<e)dx`q_DygD#!%`NqJ&)4|Y^0tK?wT6_(<=>Z z>y?K%Pqvb(qT=w#wDcXgNspwo?B|ue>mgDV#EdW|#_GyC2h>HO`Vmkc9w@-bidXC= z*qch*#!>88&+>i{g||1tI>mU^<3)J-miF|#Ps<1&^|<yg*-ZdBAyU>6O~ut-p*a_H zIeI0$IL{T0EgsTvbeQ2mTt+6KL7Magf8yAimwv9e;`Qx8aMFW1KhSDAmlP(q@~hqm z^p8q%w>g8K{|F5M+;;WVV8`c3lkt7GX$ke2c(dkLB#@BrE1r6_i#w+WxyOX+_W(0| zJ)P-=Lx5KEYGN-D&`xQ6ztfDye~z!AUKlhr!D+8h*|#v{b!#+6CML4pIR(w=g69-` zZ3=2?am<Ci04C$zRM#G9;n=rw{%$;*Vz1r@E$B|Pv|NhXmWX=OKYF?;CMWk=J-%zE zm;1%D6HuI7UNlfV>yeRmbaXr&r&KUCSv59-vp+40a_-`%stOD|UmJX1ZX$np_(IgM zZ&Ipbp>*AG{CP`S_$#U}t%gzzZetjw%_n7pVR(3qt;EhpO0_!q?;cl9*_7261_mYv z{$_n)<pzYJk&@3x0<oS;n#jte#0c>)GB##qeFq3}S(#?$wu{SsTw0ol1Oi`Lgx&dn zW`BH0gg!0%O(d;WX9w8pk-f<dhkw>LrUJliswh)^xa{sO)gaVb#<2k8ZV5q@HupdS z(ciI^C>8P-PcgaoQ1dT~B*j<2HK;zW!=#gmX9H@10^k(?hbRR=ETC5Z{o%jlhxCus zS^D=sKyF|DH<u;<|6?x8<XSmb*UfwPg8SjZ`f6%3W3z*Uv!_!}!vh0wO>M%f8}P5{ z*Slgl0d5@>sBL9sba66xA0L%2^7!8i3r_eV3^J!+sF|HQk0-AY&E(X7v&ZFyB3CD| z-r|ueEY7cAE5Cj{41l#X?<;U1bP#GrQ2*il<dNjR-1(Mo<is#sI1o1DIAKN?*lllD zvk-6s0O@Myj=#|57WB)2GrMBn_7$K;2kM;5{PE3jDt@n>>Fk>dZ&+EVqW$ha*JRLj zRhBDyOv{TS6dF#;Wi0I}DOnmFJ&?B=NNe5M{giB=O&@lIbsjeLKl%15mf{ls91cIN z&?>6P=VlhX?ij3yi{lZK1U@XmUC-00O$DH>y0OYa=1J5wRnNPg(&FZI9-3nns?C^I zl>Q%>WNK;?b7hbeLVCS-<%~M{O@z<H^gBt{c*Yy;S=nU@;5PqD-n{lOq>&fUNS4;D zNoy)QY6J8i#D`$_mv9uBoIBtCaa+6CA8^9JdjpV=>K9=21l)DPa^GyNFedU?i&d!h z^Z)l1$dY~0siYsU0mFeM&voY{ng!ec0?65Dh=|_L=}tG~$jK!LnG0Q-%FAB`go@%h zJ+k6KjJG=ia{`wMlkKUC`s$>Rn544fX7${T=fdgev5*e92~f!!<KFlGjDwcr1@MD4 z|NTM~wn0!R(&*LuPS?5Zg2MW^EV07T0+oWC)v>Lu3*lyJ_tiw=7T;SoDL{t#n+=&I zo+&3ISbg2U6o8<+acm|P*)H9D`@$0c|IBP?>(UI!^(K{fpgj+|4eUjLNZWYd|H=*= zJyc&*pHKLn3h#XK8hZO9^J}281&s4mf28#l(}aQ;+Vx(0d~54lC751~-Q=1Oc$&!^ zif#G`2_NCcXXTiHb7lLVLyWR&vi6r0s*;Mn4r*Kr{*1ds*Dze-Ki#R<r?`~l83D!8 zY`s1=cjYwSjnzfBue0#2aewolS)fo&u#sR>Pp~%Z{^!dqF7Cq`_cZ6wK7vo|%@;xP z^B<OFJ#2t~5K!&FR;otj4x1>SQwFLTb4_AZxG2m5D2bXjMXPKQ#WOjyPJRXNJ^=uA zhpuZc9Hb4H6?GWR&u;hp{JF3TgBe_&xjwj2h+K&(w1Lc!4PSJSgV9>&+?|mrCKu29 z;>G3pHm(Z)d$DK1tr_b1DjP*}DB1d-{}o@Ixb_Z@o5W>*{1`~rN)~=z)rp{{yt&b% zNFz%bK`;658sGRGnHZTvk5DL!-L+?|`O{?wJ}OgUn2L|<t1eH@uZ7F^?@qG&%uKGN z2>qX&hcOYO<AlK3Sxa)m?;p2m0A9N{Ayx>GGQFd<jjvtUs^`b`@jF+f#Uz2C(^@VQ z=2Jab49+h#HfB}D!#g%zyEVmi9OEGn%mO4At-&Tb)u6#-{$0~fdg;eP@JClSb=%FY znt?geZsFHD&|N<Cdq5gLJ}TqIp#i4*U4O~P&(Gz&7T+-G%FAEKgoS+nZV_6CtQ_`2 zv1>esv8b*()B;#)Vd0U!`_b!-!2;m0bLytB=G7&^JiS!7e!q0H3Y?_~xt%=lk}uY+ zcQV}9DA-!*JlH=Z6Xe;b92W(803c3SC8?-%uBok^#yr1MDv0RsJV0VMpI?o`fAZ?| z&0X=B_I)#=**!b((e|Q714drU_q`j8&q$sM3xfpS-2@KdAiM(LjpHw8mioOz3#*IO z0;h`_Q$Pz!qKE47X!=HcEbDa*JQ_s=&*@cxAgdRte{E5{RNQZp+TT<2PD$%YwDW$A z4nBT0N2UZA;%9qyyhYbrj=KrRO3|Im_`(+r<}0P83nh(beuHA!N|i1%g;rIWzP^tF zw;$ifO4UvI^yvc3tq)7|lO*B~xQvFfPIT+>lw1+tzG1sQgYzdqL9W2_sJKWOVut&B z9T5*(R7Xdho!q;Y_m)e5a^3S{4OA=lZ%~%cSS{03Iy|}8fkyufUr+DTtb6J2Th?jG z#(7#-fSw$QL2E_t2aZqxYH{EPt0g?fHgM&EM{iqy2d#XT_q|%aU~sfaI|yqztF<gF zc?4maa9{=6$ZwjBMtd2FO-&{q86iQqrsb0(SS3n{oviQF6ko^t`r4dKfb-m9<Rb}0 zZT^UR19^<d)nR?q;ysTb@yzX*rz|X%_%!^Dp6iQ=Ot(;0<5N?`<D1+RtaMtjU!1y# zfd~kwXh6)yj^Q|v{k_h8PjTDOb)2x}mW(vWB>_SR-zpHF4gqpy=Spty1ab_z89pqV z2nEqd&uGSbe4D<aW{7o%Bh(zXskxH{eRzd=c1VBR-|UkrQqx9VBkB)M@(SwrmP|Rd zO}>}-MZDDbg!btfI-Soa#VnG%u@%MXqN*=b$GJ+h!D<K*i^`%5k<VjyvOibSe~x+k zgW%yu0!a-<tI3CSMsuc2<;LEyX(KWwE;=KVD4`Sg<};5Yqn*oHuAf|vwoRy%UDlGQ zsiii(6^FE}!hkL#&UN+;M`Pk&Pf#Ngm*}%ArwJD}-SUm;s+bE%Bx<WX+(mScL5MFG zqK7;+eZ>@AD=UOW=hW)~&2j!SKhY-$Y-zcKFDO9X(VK8@Uzr1~qCGCW{O@{Dwtzu1 zkE2TCupnj$ljzfOV#{h%BWUAX-I=&+^2R1be8c7X&WyX>ZUr_L_4PdCGANn6Sn59v zMHA3-kMg5lI4lqNKtc(AnUrtust^tvmMv5BF;(i$wsL5*#{@NegO1P~W7iCqbL3lc zOdxLEt!e54tKKVWXL)B2-{G;Q4bnes`0ZJPX0mg$SJksUn@sqWBrwfJ)JY1uTdG2H znyYaYsRRY5(ZJ_m<}8`4f_SmdesuO>#sZDq&;vNjRB#!_U5nRZ(0uvfjS^l&@Q=Vi z|7jOQ3Smp&2rtieH-F5aqSYb@cH`RF$ifV4b%mX8Ivy|X=$A}_GtmC8>b^6m$*o-* zb%P2jC@KO18*zhxfS~l|Mi2q%O}g|BQUin{3W6e_()&hwuc4Drq)7=qQbP|l^aKbA z-@@(tzBA{%bIzG>=9@WRelX846L_Arp0)1#zOH*+m&%GGg3zawQvd3ZFD?4fdSg}q z@UOP2XmhA~BqW3y9%hk<4%m7L2frF~=$1B$lCZKUA&P(NsOC7Zw_EGAqOy-ULnd`i z_}&uHG9Y%G#6Y*UhQ~_Y6{Ki?N*w`#SKqvq>j&Icqz*a|<KyE}dL+<SI29cY_O5h_ zjFt5Sw>4CbQg!*eOA(Fx*211rHS?0I;Ykp%8*1x}F1u62C|;$%nwp#};%uz1ruG=~ zn3_O7xiS_%Y)9O{7hf)7kCPW-Q10dNf!3$(QF+CMnC~ofnXPbY%Y;@|+RB6;&j+KO zySaD@Y#bau(9_(YV|mEqVdlE?EKVM~ElR#6#^NVE;ZWr`QLYovsCOZK<N&xX1{@xW zs!ErSIav2qs+w*am2u3rO-8}lwnyzR(lw?FvSmm%UuV9#GpMAha54K&mvdh_?!F5N zDb}l(yI}e#5w42#^tB3?aha{g?b@dqaYl93rIo99E&_>99LxOtc}iBRUPaMZldWom zpAD=k;d%B)Ca80xN0mInw3=Kz+DGt~e$4kKUQY_LzdDYOkIzm?yH%CWeAFs4xWMnY z`db_!Gh5{XHML%?>r_I;qDjdic1;j1>ZDzu{jem-6>sDgQ>@djcYC$PY3$3&R^4JD z{Mf<PTSo_bj(R#)z%m)~_aJKJM+2qA%lpc6b6MviR8sGI;_t3Yt^a%{7q)5TG}s=f ziCa8dm)0$wsN(5{!)h`MYclV1b35b0hc@9*V+>+nLNteLdU1af^X^@?A0g6V>Wj9X zHe1lG+bo1(O?<s!v@SRyft+Q(v_0|!8$^eiq`y?8(TYYN4tPkpF296#4X17-J;c<7 zhIM~Hra=8($;bMb^vzCtD*>m=_)+y6z}E3Eh}aDon@4n{-u<2k3bMV=>&Z`Wo{BkU zs-C(=g6lE5souxi(1o3_;wSH@8IMs25}t@hukxN*ctNK#w^uEzS>d!Y7$bdKd;_G% z5FZJ4a|&6-aH9kQH@AIq6+?J?Oj=3BN$!Y<i4k5K@fzhVz>ajkp7%Z?qO<eITD(^| zc>N8kEgi=zGj`djk({p~-iw6V^mN;<i8NmQy`z$VT}%u&N?T_HFq?eF4O=6+X)d~# z^A~!8>m;R$QWs#}s_f<jSG}08aW{Q$+)Ra4mo$2Q8Pdtp;1~3m8!bwZ3C&*}U$QdV zd>(&0ktQx7fjcO-z|Da6``Yjo^cVJu+AtuyvUN47H+IOSf`iqxzv&h#PDCcOr)Lrf z1{>F1#pISQuU8;Rmd6L`)YB)s{SW9=J*%r=oZ8=;9&c0*U({reWPI?u!0(SUhUgWQ zkR=Ay`!70-(qgy~-WwxwDi_&RkHE^>j&Hz@b8@I$zsTCdzMDomMnERLcjE_uboUcG zJ4Tf>UcHK?`p>$T3zl<juJ+rOo0{xXd8KfemuHz1Kc}Vn&bKouD70dbN{o;0i9Jw* zl6-snj0l56_-DJaLJmDOQapkObBObj5~r_C%qHeF*~V;ZN71Mdfg1$o?zjNSl|+6w zOcpssO(+*9XB>kajH_MQ|2ua>EQbc6AoE?<uu^Sg{;Gan`p8jz54Y&(a(;gCz7IC< z>(`^LSy~T|%iwHcFAvY3foGao|AfKz2Xz|L@k=Z)vEw9A1Q@S@rsn#2jt>kBiJ6|O zS{Und6Ml8aYa8M?N>&Sjv5)kq=kX83#KZ>w5{{11b{KD{sH@`@#xLh-wjremou%o0 z+UCxQlJnVP50i~AUFg62$7Lw#utQo8?$Z%*n^o4^Tia>+b2KNNa>GuhNmB}QWEcIz z;<4kYzQMs=nb0Mxshn<vr^FkX^qQ4+Tc|h}9%8&au1h>?jOmJZ7=U3?DJc~P2Q@&a zzb7F(DCp0N7o{WVX$}wbor7tLirSMK&s&=u=WQ>XMhIPaT8v^_EA^DRrY3s$hoJ%5 z>)0#3%OXEFce>Q21H1lKRni6B`T0qT%=+&6^VIYU^)mA<VfNTc{qW%jl~q1#@kT={ z6XKMYsa$HG#J8^bGzz1&ZEf4?H;cWnh?67mUxgi~6Dl^<{QdvzgSSppSu!nqsi`=Z z^LbsDu@Ow14ggildau;)f))aLK#mntzKN8yQzerm^zixbch_^M*7<bK{K(9l1tw?2 za8w$jq+Jco*Sx&N`N)&0(b1)y-?5VwGuDX_I~YsLn8s1Q85KHn4fZJF5sLcm-J0CO zbhUf_#9`uS6_uRiwReWocS1qfTt1`PZeec^{hSEiZb_;o52+TQ1>V{+adNk?Fu$=- zc(e_3VT;_^Pa2slx`>;=NF0ZW-;^YDmg9~6*LA5X^#fRC{fy?tH;YTH9X1rjzAGKN zH>YgbVe|Z&P5t~fiv*);x_d?8>uq1(3krIGt{M_)GJ}{yWA4{+Bn7tYfpP&Bvi^zt zI%_1Ne3qw~*&EHPPwP(?qg`g^M;2kH=+ouB9VU;B9?#0U5eF5Q&rt91kkBjnI`=i$ zLu!NWRZbW`XV9%%wEH{Vh+0Ci_k2erQ1sL+&@OvRG5JYoV;^xpQN*REEaKWjJD6Rk z<;{SN0{_6&ZQtitltVQOj3j(UkVrnMVq)M-43NHut{%DlcJKy;NE@-+2k&viL5rq_ zUoPNI_t%D)Ah`whHcq1o8_nD2CdA4_?=}=VI;Kvh?T#nb|M+o6qxI#3(Gfx5$>+1y ziT%y}u3o0yR*I-q^Vze!{EWFt@9!q{R#|jeEBA`A20hJ41zR?-2zwV2Z1;%tG$RiN z^FXGaJ0aO=R{NjX<P_Is6{NTns@1vJI4Mp>CVgAd5)l=<n*H6&z`(%Un@}{LS&*FL zt3)9y|1O9^Q0NgA>-X<m;Cw1n&zbFxgjOAIL6QA(FW9UNBNW7g4W%I1LLg%<+UO)? zAW-3&<>|W9$$UL=<#aeeHlUTKC9@0!eLfdEdtG3CMA`_TSmix=|J*1bg3M&A4e#db z+cPr%RAFsjC56{zQcJ^kHo=D_U}vNQXo0u6FhkenSi$jTse~W4v&IlF9{eMVXN8SM zFSN#~YIAaPajq(2Dd|~qXz#X+`G)VOCRgXx?~Okc^zj2SL7rVFLBYY+eX&)jIUo-w z|K-cOF=1O6Nxuk@Jwg53=WgD+@7H6-q1m~mT6UM{dp0=99<y{}?>(NuV1(Ox=W~;i z+^yUQPlD@2jO<_xoaeQM)MeCnMi9cIBf^xd*WR@gE&4oo%{R2^n9@$>OcAfeC7Gk* zDotBGp)-?deXAVAvyCNd{COiss8LE**&;%YgtiV0Wp$<QphOPscRB=H1n>U8Z1P-4 zlX6tg!kCy{G4{swNmrR}n3g1_#zBV-LN;2qOz9K@t*o$+al5h?<rNbpZ-H3@aH}<9 z{wBqeUsP0-&uIS|nNskD!E}}tWX$y~Un^2f+!cyyAMjP?<z*$Qr)X=V#)nK>->Ea- z0868X-ObpTAO;)Akgt)%P}r>t-d7UuGgJZ6+Lj%I?`E39n6J6!&-7p=&wFl)e)?R7 zvMikL*VpkhwiB1KM7I7Ns_U!VFmUHl$EfkHE;d?P+9L(TW4`)@_}h<i{UnVP6cV~D zR(*r&j@sRr0&J-xB0VM-GLTnis8R!@>2AP~Ixamj7g!Y)`)bFhI2wdD71*Pc6MSJ> zoewvg_*42`by+$wCq6L!sFC$3sYfPsv&uq6nclhNE=SOhO79%W^oJwLZJMmIhLew> zgd`7xv=?5^s1&Z~jT5t{ZwG))=|~{oeUS=lWS|rLBsZ5z^9dfq?2*v58qw2(%L9Cq z!v_NTIvE*@=&O5Z8wb9FL@|#y^;6d=+di?D4Qi_#;nvrNG%_;oB&#^i3jCuN0C#A& zZw2KHyvla%w(uVjw|sXjKGS?{Xy6hjytK=AlP}P97P>W#Zm)4sm|g|@NQe1g3K)SB zQlkr`qs_wWMdy4Z&$2XlFS3)&1vqVUD?jGu<yrP7@=)FEflS&}jKN>*vk)3kz;ayN zY5(YSt1R)A-s}~1U+#Cw+t_=6woW^2`@<X!-E_+%Zp)YCjpTQ4OsSBLH%*pZN~4;{ zPNRA-&CRe8b_Xyo&{v;;^^%eajd_Rhh=-JFp4KCws_QpWZphraR7AkDT)uQkEk7Fb zolDrE=SL~)lX2xN4dQB9{YK=h+qIhv$q6wWk{rc_g<ogf6&}B?D(W4za<sRx;o>V1 z^DY+=@_e0U0*z2$mp#Hcum+8p4KV7<|8W`g^vhg0bx<`J<>=N`O@7dBXK!yi+O_DP zAs_y!dyz!qU7fzjTB)x*ij`=b{ypd(FYiP8a1uiRD=j#;n4@yT8QIA!Au?)IXr!sx zU2a)$|7HP=nbzQzs9W)dPXHNNgA*9C#YJtI3&Aqm-SV3nTvO9yg9ii<;<!#ZdvIc1 zgKJ@&tO%iBgkn@w{I26yHZAp8R7l9Dd1`mzirl4)udR@calVwDD@;<;gI}pHQ)v`v zvqxoRX0E4kBgPuVRma^x##TKoFkwJEi}ey<-+0bGRJ-%Np@C)8k3jrz!ycLHn3hP# zaPzolDDvAkSzMa`nY7jBcpw-$4w7;^7$vI;U9u>&O5%<LAh~WS1EJyy7Qem4+18B! z=hNu-jxk%b-DeTR1{rE8DiDjfbqXDwoXReyYj7>PdM6bX!Qo}Ox$gU`y=$ld^r*VP zaUj7tJi-%x4i#MPb_2}c=W%Jm*kxRzoaFBX&cpj6H5Dh`i;bE&AA)HpYkdbc{ed=6 zXt!hwIFFf&s-|SUc|ZPSD9PHhv0}jHxRqsE%0zvtO$snpNkequQInGyn+^3}!<eRh z++4J@ptbi3U>lJEJ{?jIl{3_V1nR2(9?avi25g5Tt-*PyovG~)x>)7*4r<?x5o;r6 zQAt0fHTP)U8a}v<D(cHS$aZ_-XjOHrFHm+<Sm{9X`0T9~D0H18^NDGG>ARB`mqmC= zTSC9P=gfljIiZ$58k90eF=Z(pVx&nz#q+bWp7r?K2QzQ^>LP$yy>kORclRw$VukKi zM-;#Joa}6pGf%bj-D&lm_;0~fn;zA^Fi?d0Hb?O%l(AVK?u;0*NQ;PUg$t)vphC)a z7f#1HQkqJXa0Qrq?R@D-dx#k)U>g_9r@zo)B)uJbQx?+CJ43grl|V%d(uev@->O%$ zjq@Gi(p^8ohVAy}+Nc2Vkmq;!l`Tud1ypnODge&_!I1!l6xbsUO<e)0GHx=;5R3oT zLNNAo)H64)plNyeAXU`OG}uC4e|0!|du0WByOl?$pq|YHvatY+JDEg%29*)}3Rq1A zpC@ZT-`i4E0tj%#exoJ(3%|I;3@fpDrtCrt5|;<_WbpE36MhAnslA)h)<NBXpEfXL zf1RzGWb-Hi_+Q?+LB4sP)Apd1dU|Om^0(8<VcX(41qFo&F_1N?3zWlsDRG`%6V-kr zd|)U3*tKSz6|bBfK(v2bkEkuKWj_Qj*haF~wbaw-w7hMdo?lnI#%BL$b;2oWzPQkT zbITRWDdj)&hJ072NS`mLpHUy}yB5V6Rgx<D@DG0eKQn5-?UbcnynLB7-;L<%60H=* zymC>ubqiC;(~^}93TF}r2UD{r+@2a4l)m)0Tm1%#Jt~zr;7$yyVz{9w_w1FL+N+nZ zp1mF#4-7n)F?~$f1^%XDJFP(emZ1?YC~^NTFE2X}kB7s~Gu9yesVTHpo(3rOmT@1~ z&v|!zN9qa>3+EHH8N%7E9?Q1$9|Q%}^szcRIts$}33#TdI-Y{!dDFCWU)flEXE0Oi zAO!G@Ck>G-sDYQTX-m8kwnQTjtM}l9L%J4ADAKcBjL{x}jcD&P6oJ}9K#a@xxF$0? zdRt}jI#X6}qL}&kx4pgfmX?YbZ9#2qm{pkIy$3Is`)l$z=d<fdgcg5g1y`?{l1Qti zr8A|ap91*@GM-X1#w=861)QwVZHZBLEGP>biQ5kT*q{d%Pkg|VXmrhB(G@W>(=^)} z(i1P`GFek>C9`+%>lKb-XYVE+Q&ROMm*kGFT=HpbHY)=e9~j@KvhUa<ZYK(OCzq_b zn0$#tO)89@aQJ~8M1?PZBp;I&;QMW>*?1G%VGas!0*>YLP5c-*+m9&qVm<WwNvri! zdwWkuEm-e5KYRZC!2J*v5fcxb@_LD@58Xr3VI%z8ccZ$j&?3Y>ac8)Ng6q#Oy_TAd znvD9nM+3t#NXL#U5N^+`$*oK;tIf-6llLR$g2sr_{+ZCueqfWMoZu=rl=AbNj{}yX z1b>}TeNEF+QiA^ZYcjIp7pJJ+>1T%ff9Dk?YtT;sF7Cz>29;WQC-#Ne`#=8E56E?y z(89t7u)UQN_yMe=g!a?3qgA?J_U+n#{81=g_=`DyUGh%{vXahKMh`zCICFaXd1Yxf z{YyyKH+b^Dx{_lJ>g?$uZe{S*v(R2+sN9>1%M$uG{}kLvU2DTHLEZz(+J9VqD1@s6 zI2`m{SO#;(Q0D#l@9y}18TRz{;zoYmNx$;HdxC#G%m2=+dq+o?k69`t*$6|bsG7-2 zi!LhQdf0gE|M!?5RdBQ7wM<Yy`iJiaed;DsbadeMC;n!%AB(HHsXD`9$NlNY-IU%d zZ5*`nSN2Oy<P8w$Mo<Z`%Bra~mE%bZZEWWrpQvlN@@_U!ckEED+A$_38Vqw;YFT)> zyDt>#X?}^4_hhmcG8nAh6!krj)zgzx3Nz-7J5O#$`>s8lMc8h<^1b3>%qy0&jq?t+ zhg5tG9(t@Oq~c*4AGY$ui{!iSc0z3bBO}#!2M%^0afDOF7$p_b!kR_QuP(EyxY_0r zSm^T9p|=ug@KK_uLqfq6Q-7;}AhsYkw@=#m)vASyvf~pYqt>QCb%eoQH!n{56U0Fk z7x;B<@LjuA0F3L-9ru<X{tBzCppf7is%>A1Y8Y&hg>SNggHITr+x!v$4=~cn!Ay)2 zGwqg`YI_AHjlB4CKN@6DP~6nCIO>^iEHAP!ffLmi?{LD;x48`M*4dvWoY^v0)6?Ev zjAL|jixh*~2qhTk?*T_s5URs(ecq}^OXiOp)L%kM8y}2Wo1{sbI0m$tmE8(&PaHo2 zISaaQ0ylw{5_!bhSB*I5|1Dc3W#%BG&1_{my)Q<a_hfwyBt%Rm_qhweStXHAkafZ) z{yw1Vjw;{tnoF+GEnle^D+iTAc#^<v1ORhfYbT9DRjgm&Ncn8?DuyDVU6YfA+?=BL zDTp{ge<Fs5FY=y~q({ohWsQxUuW-8}B=iV>@cU~zZ-G?FV<!y5MWS+KM<xe)qtPu~ z7Q3=@0NgkajqdgH>ee*IlaZC&yLZofw|9|8%nwCqI3dv?C5WZZ+1<vY6A}os@+O{F zK{0-EWFqCYKVp4{t+jE>GcXL;`-U?JPHx|*s0~30pQl~|(y^3bBdbm!?d?ke$MYuq z{GVGxE@K;D9mKO!E=OA1gO&xWs|;e!gSCfefkm1#Vt3^|tsHMP!=-k-^npx~j&ia{ z_O6a<`z{)NTvMxunt#=_CP9x({pK1TL~4)XU+IECHx1dm6QTMC2a<qlSZPB`;_DtE z)<zAi(O#{Oa*ECb>Qjr8zh;Tt+Ze-r8~W5-W-F}1C~jq8^GwZLb2sqqA+XyTSh*w< z`Xpqh8>xNy1LMps0~6H2$_HErTc<^Nl2al-kH_3!e-4Bz^T-8TBlH_<>*`c4qzhO2 z!|jMCgpDVSM`5!kaNrlp;r-kUg96Yn2@`|Q^!yH@FsFJ!Ya<LTec}ahp6<8Yyzu&= z$wH{}7zW%8Ku4WwT!7{LMY{lPOYIHZ-a5eZ9fbgsLRg3zDLF<CMF@WY3FUIc#ze(Q z?G9rBO!;U4ZIbdu0Gt20^&K?}&_&PJDKLEMI8`^1>ct@Cur&oiG6~%`F0t<&PpP-+ z1%(!<+Q4zpf`JS=i1G8)nC-$(-5qx$weEptB5C(cI&$BZsO`!57e5z*{d3$*eIum! zvqUdY6ClZml<bt6SOTa9_(L#zo*|RALiq0SCOnT#@mq!y{9`@+@`+SJ0s_YX)da$= zu?@R<dy48Vd79W2(8JJ^jhi?ZDOuG7zsV`4$i#Gm-(@adx?#`L+dGD4Zl?JdVE_I7 zGsZ_nujDTD+Zm=VLe@LWs&kY*im6^!8OGOS4je%$qMw2-$~=<i1#TMS?|PUKIk{3p zV+*js5El3p+5{W{QDK#}1!q(iM^w^+nekMHg8&(pHYgjls<_A+&9#UO@E=kZR?#e& zie-+9S6(_f<}k7Yg7bXF$2E#s*JMEC_ud_BX^}Z)n}TSRd+Qu0JdtT>OSiGjUbx*| zCGf2;0{(*wWr1hLc?<-)B-5S2Qi9&@7QA-E2xz#!SJJQvZv*H`ffGaAaLk<d#lTVM zuR3|aE2)GTsy!Y)bcd})Z1ZIAVF{2?7H#}7Sy+D(D3<~OZsN-<#=e6qa&Mate$4Z6 zU3Zn1uGL_rzR(Yh-LKGJOOjxBISv}2#B=YS`AZnARN~G+{Sva?bfzh{&!B`kEmQ4Y zrrh|`i~-xV<|iFlPv<(*Q^IDzQ$aTy7o7tL&n^sr69ud8UC~{-&=b0*NMvf``K+fF z76)5bpCng_jb2ydjGmHSUr;a)AWWPm5=Q_MFYXLHAQCh{)26!dti<{LDE~lSaB_^# zph{6ug8V%BF$qsKKWA1)>$SJcNk|^8C)pQAdzB|i5fh6HDu6k4FwGd0+Otm*j1=07 zSo@l+*D{z)YO%`;>vA9UY}r}jc2ufwHNH<!1JNldC?v$^jj3pP^AM-oW2F?P60qcO z2$?9y8a+69r$U97&^1BZRE+glh0)y1P_JCx1L-U|`5&NGX=!=F?7xKrfCRKrlWh4+ z!t*6y>J`*4xVB*(*8J9-Nf_up?=EU<Kqr3`7{22$64YXkQV0-C;Vz&t)NMA;%EEwk zuegzy!Y+A{_5KnSe)M{Ncm2>q|Aq-oHyfK$1fmW$axW;iFc;hK7C>fL-)hU8>3*&t z&?^hYjmg(1cwLjZEip+-UTz}WIM~h*+kD`6B+H4{()WQE7XvMfVV44q`Gjw@M~tfN zZb-A*r!oQahw*z0KNnhZ0qdSr#=zdHefMoz)d)bIfD+XS*@^Q(c<hH`g+@?<yxxSN zsruc9X-+aPRB;bc!@Tp;pKQFTFTegx4$IbD`biE89=Q9w?e=@!{bh=OMd8Bd#ML`^ ziz?%Lv@26k`@xZTny>RG&^(i48~X6}y^Rf2E+G9R9A5b1&6SX;aSXtsUM!A-RtEUN zKY$V(I{G|6S{o{W4OcR3@ib(hBf6$VbM}Z0IU^>{RnmVxkhs54HL>*ZmQ*IZ%+{nY z{bR(Nt0unNfWhLB6S)s3OqirqnCSU8TJ2^liwDyL2986}-g$0xDXE0JK{VhUn>IL- z2Mn2z0hn@gb2p%1)%@fTgbt-P#khbvcJH3fPim{$XO<(uvZ`{_D?m)&59+r&X7O7< zB$IpwPO03dmjIP}9@x2_Qn?cy&h)x(YX0Qk<RerJ<4`rZHWiRf);#_PLO!p29YFi? zCQ!3z$f&6)EH8hW^DtNILucsL!ooMO{NKDe%Zm>e6kc05|6!?pg=IgCr6P(WEGuX2 z0_)&l_C?m6NIHK6PeEnj*RnEBtH)Y~zCD%0?*WD--VvMToW^{Mam`1+VBQ_Iv%{5B ztNw4t&IPOBY}4Cmqxv8?B)DO3P*dZLt=i=41^)N5v+4GuPFH1ag=cRLRcs!Wq>Z1u z@qub{5?SJ>6aSoj&0p_+up#s9+cqcsQvQF@n2i=jn;(*c^%|mMpVVdX{YM!dL_O#p z<Js5Mf{z|;Oaxf0#TI_gXJGv{bMPZ4wGOfSRU%7~{u;xu8X9N~yDcSmKS`0$b8r)t z`|VXL-~;-JyLMDmeb1;(ugW}65^G+Rx*6gVYfxn&*5D*sz$a~>pBfWGXnI?n^_(7} z=e)i=5QW2q%3|(l!q@1etvbY0HRx{TG6~$prE#MiCt@wp`i2@hh8nRkF~WrQ6$n}q zxy>-*ATSZ71DqRWE)>8VH-rtYF!xYjywWh=mlQ(H2=qwKo~zVQ&dpx3$|<Ht)_m~- z`|QoreKrZs6xHaavNA6S3AwVA^n8Q99-wVuU@8wLYf<MR7AV}}ZEQ;QBLFDbGQ~9R z>{9vUXp+@rf*A9Mb3mQVz#4+oo2FZA2>K;yZ`^=;ZMW!}__Z4e=Ek4-tYNOZMEd@n zA*Tq)gD+y%)}`$P`>1)yd38PeSfS!=+GQLrE|N;`hx{_Kt)>RExC2BykIL(&VfJam zfQS)%(B8(;B2S#_SbwgNFdX`y`QO%Uxr~*TRf+(Z{)NwQKjhK=3fOs0|4LDHY*Oz{ z)}V2OpPgwz^C3xSo?iDF*eN2-Pj`x;5c6_KAE%$hW?t!5VWZy$EGoH*E9OI99&NQ# z?{yh1ZIqDknveC)R)0`UPmdw1tWnBDq8eF$_t~?RA=E6@`V;FV0KVWcA?;_{xA&yP z-Mlqp#`WC;r6TI`_1Ohep@fq?%t<4dfR2yMSD6_!G$&pixpyTBqQe{PUdYL7FOlJ+ z^j>32#~ehNgg;!nMp65m>>?{5ffQo|0MF0k(GuM?4@eupX)e3J17zjesH5bl3(9)& zyR$LW<Fny(QIf^sAvvyTtRe@mk2v^jzw&}GgW*8exX5b^ZXNCpQe6IU<<c-XCR^c# zg757~4oa?GW_(zzssux8z|h_|m{9nLxNpkJJc1)0=gc!U;z;ZjZrJzRAGzOi%-435 z8M37#R$BST#4*uQeUgApP`q3;incWFD(lnH_9#NRsouCT5<;B@sI1%~M+Ya{i<Flx zT)7CyiMXoO%UUt#`c3Y|d<bEw%gD}#=atn~!M6{#Wum&Y)YThJ=Od=Z&Zqgz!9TNw zhz0k=yYwz?dd9}4(#bp$UXwB+!RB>>Wn6~Bhj5-+@33a9H~N`6RIh_IsIW1d*N3F2 zs<*{`OtM10^5OseaTMs5ImED>SRAf0iMs~T0Fb!WTV5l(CRJkbS&1`odA=kQ2MQdN zi8KsyM4n0RA`|-N&6mo`VQ_a-a86cJHJKJ9XhZOauNtt*+86L!Z#IuHv8kmusC8-U zuRO5nCnInJEGM*64JhSK`m^chxfdUQ_iB&%_RlnLZ#I5C#Z8d~O);=ykoDB&MQAru z%WY#6WPSYxfO$9J^>ei+q%}+de5%shx)1&Y%pRz9oF`&EW}5i<Jbxpb7I0gNo^Vdv z-QvT(*js1oo`xQlneg=65rb*=J;DJ>+d|U)l=7UNuwTOR?Afj1Lp93aIh5*@vtxa! zjfCm5WL308u@|(0`WevZiv2R!YORj`$>v^L0&H&FB-#uHKWWZSOa!bUfGfj7Hr)#^ ztknCT0ncm??alth-cFn1)>lktH{!};v|%`upj}L(<0FP(8tDW#N4wSE0s{75FL!d> zoG#GF3!-U{SWzdD=y01?+8-9*P5p@B{TYjgoI5hB!3sM`7JuI@KX8%twh7M6v?wvL z4rLO6$kW3Vojd!OPqSd;p_So7i_X7vjrH<{D}@AMg(hkK$Tx>7^_M@s_c>fdI~?-v ze(U;LKDgV<Qy1D<s;+w(ak#VwmWE-4l~Tum){}QNA|q#}EXwqOXf+oMkW$H%BA#ha zGr;*7Nx%FT7u3~f4cD9AkBs9;<=P=vnBx2!tecNBGfj;`ys}K1y844eVB>A(EX3pE zxp_0tXckNp6GP{!su-h@rJ=yRxw^&}Ov4qk`aT#h)}E+rMM#AI)zqDIfc!Q69zQd$ zBTW3>sAyKCo9dZy+%-K7IecH{t_z{>Ok#25XzxOFua!ah!b8sO%z<1?Pp#9=LfNco zIzu>Oz{bweajF8-gg}fB7lF3GBduTj=&rLW;74mCWq8xXA)}ME70JfJNjwR9wHo50 z-gn9WoO#a@ky?&yQ1Z~UY)HD(@+3<m76A1|>)Au}Bz%DG4||$PpYHV}r@AV-Bl2}E zt{56IR#}V835$Yu1aU_@2a)^biGzcdLYF9Ll#t)P!T}_4aNH9=0?!#@hsb|TXYt<~ zrgTT9E||__AemyvhshkG*Vo@m(d7~AQ;qm=3F1u?EW<0fcccTTgD)ra0D(y6;fWgu zC2r`vq(;%GNx?qKz22t5kiEKE`KcQn^z7@%OAOa}1pCtJ8x%@`C~9?FbrNAnZ`x1y zpsed3bS#n03vq;R2MvI%0M)HY>#6Nql){;gwLLThxo{kh!5@<3PuZiUygPb#F*zRF zxCVf5KP%WTDY_vOs*hLA$t$!|<smonjbWstV_Qt6REhcFAf%V`2N|H7#wOm*@qL%% zPj&fY+d_hXt!O$eJka4?#^O19E?C=x(gR1P4FIMIqa}u13fj!N`kWB4;U9sN-4%Cl z8iH?bRaI4fzCHxWP%REAR<sKW4yj2_HhJM*wHwBpCrG!XD=Y~6*8UXokcO-w3qYZE zBK~YfK;D)B*F%xWlanO``1zaHoG(c;TSWouwnnYF<pH+Il#*bY9Lm0A3B9|3Bja@Q z_RA2ijEzZ&8|O`nwl32@sgNR0?4y;CzFGw%R4gX1dIh_T5KoW<axu{5^OTFyKtsby zAR+UPa>VK?Bhq8?25A3UtFZ;dmY$xsOehGo0~s78aIr2<A$th)3@nge9U$XO!v7eF z<-bQFE#l`$Y_B&1$&-898>-j?CnYOl8zfxFae8cc_zo<mu0)@KPPl)XWHmLa<e9(h z^|EN-<$A;OlG2%;RLS#o+ta}`ceqwtuCEbm<?HFm$)?MNF`pWL^p>V?PhHF_a6Se+ zj}&Qvdxh#W@7?aWd9cMZCqL7a?we;^PIJd&HHa7Y{5Jm!yXZLGF=swe{YIaP=6?TN zm-*xq25HxYZ*y${CWKxc&h2QRlMB?eO$4?Vyb-UJ6cjd8>40WIS=?+XNQO-ck0NX5 z^*m_VKYC7zVOPP9wIO^7evGFeIDKgp4FOF)nVyOtcJJu?{nlHT1l+7S%@e51%Taxt zJD7kInaH<OW2L6`?i5Voxcp)_SH&!lvu5Qk7Xq%wW(sj)^YZ0ujVuXWomx}#_IH=* z2c5v4p&L0>G*VZLzy6a}wSG`ZdD>b*sS@|wZ#EO-4vwQ$Ad}kJ$p=ZXx%v5nLzt>n z?8VP;NrMZfRWJ75jjAiOF1pszwAefXx!-=*&Im2X$FlKp{X`GfTJ*9y+k$H?ajxmT zPC?grN)C!Kh^DR0l09R<WS-CBD;&NuoHw^YKlb)~M_m~CYwSIqq8DXmj&5#Y$`@iZ zIODn}931!e!vUfNC~RW{iBJ_`Z7lKXq-bE^DlfH}Ktf-P?$RQ$6g#o0TlfNsb0E~s z_m|FCr~2PzXCJh@-mh#w>cGiYa!uym^$#XeK5-f=o;n^{?gzz2gshP7EMmS5S#m54 zH#2pB^*5N3F=<`@3MeGC5(5f4r$);v^Yx`(@ssV@INWOYe0#W$*=(a742YXUNNF@e zD+^dKlj8jR>Y&X@uSkdW+sd1V*2q}-pb(o!3>jToYF@aENVtS=4RN}uCqdJx#x&8q zP$u1`qKZk{_+F5Won4o-y2w2tF%gkcIcv~6NI=G*D`Bux68eNAwLx{nB}Zqj%d1L% zV$bL8d`Q+`Gtd3~18HQ^KbZvh<<GNcX$*Mt|334?vQ-Ei1K?GV{Zq>*^`mu(Z?zl1 z%CgUc&f`s-asAUTBf>r>dd`uOq_4(kuAmpdc1M-Z_$eyk7u~v<-S_pBWpooW74Pbm zJnF0GuKO`tBupnS2a5|U*PkFA<Ule7aWWUep8~y(Jo^FEsNl1)Z~x?5Epb~12Z5mN zzOb7uCuj4}p-mq`gqM1mf<%vZ`WBfxk2QKWOG($*6_^keH*QWFh#~y{!IfT^{Kb`S zn0a6CXQFt!-IZe;ixpLFu<98?_|>ctA)BIG&F4+r8zc3L{O9-ORH(ZNc-<r+hac0u z5RYyi;b|9wYQrF3fAB{p(eAhstWO#ssf4G!cpo&?=I4!B`0vB;_4oFFkLpT&;f2)F zb-M_aNL5YaBJFZ-dNA2kpF-=tw`ZWKzS7WZKkE+WNCj%d1Qf%N7r6!yf`9R>jTZ0! zFL>5Ixb=U-v-Y@C%mn7I))hngZHB9-ggT6Do0^))a%e#r2%snti19c;4jXX1+ibB( z&|$dYJ=oCPUw!{1SqFdgue*kT#yM(fuOt-hW5A^rI{+Y_Kk50&5sCtW`hYTwI&LCX zd!Ew603UmZl-ijd3|L~}TW`=V(wPcC7xB`nz5&^F7{~lr)K6q^Z{%mnh{mJ_(WIw0 z2lyTei;9NemTvR%aydE;aK?NH4J|D*m!I}(b%*xl+Jk-(Rppc#ZnuEul`pHSb)z~N zGI<v+UZJGCa_P#&SBWRmuU-x(1qAr-E*Z)Di)d?WXP~M9NBFI+Ei)@CLYbK}NUfm0 zUQOk{Wly__C^9nn{|V(t{7jVsELs7v(Ax5*wMB-aT{e<I(m_i@H|wv!ZkTXR<D=J# zS)i%sIYegAN;!q!(aguk({y(1dwwE_o)v8j*Ka*=x0xJ{cEOT<;0#Un!?-8@duCMK z=o`g(a*31Ud4gM{l{L$K-c!{!oxJF)v!<YPua0yS{Y*I0EB3+P;T<m$Ykzl7*iVEV zI-5NAFYa-97c==cr!zzO6#L7#5-#)q;ni0f8Iao~^?K@=`ulGvaQ{12((Jv5JRk_a ze<%FU2*O0rEqMC*4+J3!wfXC0r!M=_F9XUZ-Om5=3h<$zJNkddhxYt(7X6QWD0n)v zGGm>1jl53`|CvWUWh&Pq0DlS5`-ds!)VF{01pgvC|KDAGKRF-uJZlsw*74(X{1oI= KWQ%29zWG1T{kIVS literal 0 HcmV?d00001 diff --git a/content/echoes/angelfold.dj b/content/echoes/angelfold.dj new file mode 100644 index 0000000..976422e --- /dev/null +++ b/content/echoes/angelfold.dj @@ -0,0 +1,19 @@ +{ role=config } +``` =toml +created_at = "2025-03-04T11:46:53+01:00" +``` + +{ role=description } +::: +Angelfold is a non-euclidean action/puzzle platformer I'm working on in my free time. +::: + +# Angelfold + +Angelfold is a non-euclidean action/puzzle platformer I'm working on in my free time (read: god knows if this will ever get finished lol). This page is still under construction (I need to add more details and whatnot). + +## Progress reports + +I try to write articles going over the challenges and victories I encounter each month. Here you can find a complete list! + +- [February '05](/echoes/angelfold-2025-february/) diff --git a/content/echoes/arcaea-pookies/index.dj b/content/echoes/arcaea-pookies/index.dj index d672aef..e6c1d05 100644 --- a/content/echoes/arcaea-pookies/index.dj +++ b/content/echoes/arcaea-pookies/index.dj @@ -22,21 +22,21 @@ Our server features a bunch of tweaks to the base game: - _Hikari & Tairitsu (reunion)_ now defaults to dark mode (namely, the _Arcana Eden_ background) on charts without a predefined inverse (i.e. you can finally play _Fracture Ray_ in dark mode!). The only known chart where this doesn't work well is _Ether Strike_, where the field doesn't change colors for some bizarre reason. { src="darkswansong.png" alt="Swan song played in dark mode" } - ::: figure + ::: image-figure _Swan song_ being played in dark mode. ::: - When awakened, _Hikari & Tairitsu_'s world mode stats will be greatly improved. So is the case for _Lagrange (aria)_. Note that _Lagrange (aria)_ does not have an awakening in the base game, which means she'll be invisible when initially awakened (because of the lack of art). Use the button with two arrows as the icon to swap back to the original art. Together, these two partners can be used to blaze through any world-mode section no matter the preferred theme (i.e. light/dark) of play. We considered unlocking everything right away, but some people preferred to still have the ability to grind / experience the story as intended. { src="oplagrange.png" alt="Awakened Lagrange (aria) with her incredibly OP stats" } - ::: figure + ::: image-figure WYS- _gets shot_ ::: - PTT is computed as `B30 + B10`, hence it can never go down. For many long-term Arcaea players, this is a dream come true. This does mean your PTT will likely be slightly higher than in the base game, as the lack of a recency element removes the variance. As an upside, this does mean you can now play silly stuff without the constant fear of losing PTT. This also makes the server a perfect way to practice hard stuff, or to let someone new to try the game without starting to worry the instant you realise you forgot to turn on airplane mode. { src="insanepttgain.png" alt="A screenshot of a single play gaining an insane amount of PTT, implying the account is still new" } - ::: figure + ::: image-figure Remember how easy gaining PTT was on a new account... ::: diff --git a/content/echoes/arcaea.dj b/content/echoes/arcaea.dj index e3a0f11..1e7575d 100644 --- a/content/echoes/arcaea.dj +++ b/content/echoes/arcaea.dj @@ -1,5 +1,6 @@ { role=config } ``` =toml +hidden = true ``` { role=description } diff --git a/content/echoes/games/index.dj b/content/echoes/games/index.dj index 3e147d4..10c80d1 100644 --- a/content/echoes/games/index.dj +++ b/content/echoes/games/index.dj @@ -1,3 +1,8 @@ +{ role=config } +``` =toml +hidden = true +``` + { role=description } ::: A subjective tier-list style ranking of the games I've played, together with extensive reasoning regarding my choices. diff --git a/content/echoes/yugioh-my-beloved.dj b/content/echoes/yugioh-my-beloved.dj deleted file mode 100644 index cf273b1..0000000 --- a/content/echoes/yugioh-my-beloved.dj +++ /dev/null @@ -1,12 +0,0 @@ -# Why I love Yu-Gi-Oh! - -Lorem ipsum odor amet, consectetuer adipiscing elit. Per lacus at sociosqu curae varius nunc; magnis elit. Dictum dis tristique semper velit montes eleifend suscipit taciti. Himenaeos nunc morbi litora mi at molestie porttitor non sit. Convallis cursus ante tincidunt suspendisse class lobortis. Sodales fusce congue aliquet; eros lectus enim ullamcorper. Aptent fames laoreet odio pretium fermentum pharetra nisl fames sem. - -Phasellus hendrerit eleifend nibh cubilia accumsan bibendum donec. Etiam torquent consequat hendrerit rhoncus fringilla elit sociosqu habitasse. Sagittis interdum magna bibendum consectetur ante. Vivamus non ligula fusce parturient mattis vulputate potenti. Eleifend aenean imperdiet augue, velit cras ornare nam. Sociosqu malesuada potenti mattis primis sapien condimentum tempus. Magnis pellentesque gravida conubia mattis adipiscing dis pretium facilisi orci. Et interdum sodales curae porta facilisis; vehicula curae euismod. Cubilia diam sociosqu neque aliquam, elementum ullamcorper per iaculis. Ut conubia duis maximus hac urna amet euismod. - -Quisque rhoncus vitae scelerisque nostra sit eros est congue conubia. Ligula fusce vehicula rhoncus hac vel lacinia nisi porttitor. Gravida nisl neque rutrum efficitur sed leo ligula adipiscing. Eget et habitasse semper cursus, dictumst ex dis. Erat habitasse natoque adipiscing nulla lectus metus neque. Dolor vehicula consectetur aliquam quam sem cubilia purus elit. Himenaeos mauris vulputate facilisis at maecenas lacinia arcu nisl. Eu euismod ac metus suscipit ante. Interdum vitae per pellentesque rutrum finibus nisi feugiat. Duis dapibus amet condimentum; platea vestibulum laoreet. - -Eu facilisi in risus nulla posuere ultrices curabitur. Pharetra curae euismod dapibus venenatis lectus netus metus. Conubia conubia arcu dui, tempus quis mattis. Inceptos magna pretium consequat eleifend condimentum nibh. Neque lacinia suscipit dapibus nunc consequat. Rutrum leo senectus purus primis donec ornare faucibus sem. Maximus vitae inceptos ligula; luctus fusce eu. - -Ex metus dis est nisl; elementum fames cursus ligula platea. Quis porta enim conubia fermentum suspendisse a. Conubia eros fermentum vestibulum ultrices cubilia vestibulum. Himenaeos himenaeos conubia nunc curae netus nibh ante? Dui ex scelerisque praesent ultrices libero nunc lectus mattis. Arcu suspendisse dictum orci vivamus pretium taciti iaculis. Cras tincidunt ullamcorper litora lobortis hac cras maecenas ornare. - diff --git a/src/html.rs b/src/html.rs index be10bf5..2d7b4a9 100644 --- a/src/html.rs +++ b/src/html.rs @@ -8,6 +8,7 @@ use anyhow::Context; use chrono::DateTime; use chrono::NaiveDate; use chrono::TimeZone; +use chrono::Utc; use jotdown::Alignment; use jotdown::AttributeValue; use jotdown::Container; @@ -42,7 +43,7 @@ pub enum State<'s> { TextOnly, Ignore, Raw, - Figure, + ImageFigure, Strikethrough, Math(bool), CodeBlock(String), @@ -276,7 +277,18 @@ impl<'s> Writer<'s> { // {{{ Post list Container::Div { class: "posts" } => { write!(out, r#"<ol class="article-list">"#)?; - for post in self.pages { + + let mut pages = self.pages.iter().collect::<Vec<_>>(); + pages.sort_by_key(|page| { + if let Some(created_at) = page.config.created_at { + (0, created_at) + } else { + (1, Utc::now().fixed_offset()) + } + }); + pages.reverse(); + + for post in pages { // Skip non-posts if !matches!(post.route, PageRoute::Post(_)) { continue; @@ -414,7 +426,17 @@ impl<'s> Writer<'s> { // }}} // {{{ Figure Container::Div { class: "figure" } => { - self.states.push(State::Figure); + out.write_str("<figure>")?; + } + Container::Div { class: "caption" } => { + out.write_str("<figcaption>")?; + } + // }}} + // {{{ Image figure + Container::Div { + class: "image-figure", + } => { + self.states.push(State::ImageFigure); let alt = attrs.get_value("alt").ok_or_else(|| { anyhow!("Figure element encountered without an `alt` attribute") })?; @@ -559,8 +581,10 @@ impl<'s> Writer<'s> { } // }}} // {{{ Figure - Container::Div { class: "figure" } => { - let State::Figure = self.states.pop().unwrap() else { + Container::Div { + class: "image-figure", + } => { + let State::ImageFigure = self.states.pop().unwrap() else { panic!( "Arrived at end of figure without being in the approriate state." ); @@ -569,6 +593,14 @@ impl<'s> Writer<'s> { write!(out, "</figcaption></figure>")?; } // }}} + // {{{ Figure + Container::Div { class: "figure" } => { + out.write_str("</figure>")?; + } + Container::Div { class: "caption" } => { + out.write_str("</figcaption>")?; + } + // }}} Container::Heading { level, .. } => { write!(out, "</h{}>", level)?;