From b22005ff54edbcbc68d3d938d2f763f495e90560 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 19 Aug 2024 15:13:44 +0300 Subject: [PATCH] Visual style tweaks --- source/application.cpp | 330 ++++++++++++++++++++++++----------------- tree.xcf | Bin 0 -> 106522 bytes 2 files changed, 194 insertions(+), 136 deletions(-) create mode 100644 tree.xcf diff --git a/source/application.cpp b/source/application.cpp index c22b0b9..7aad118 100644 --- a/source/application.cpp +++ b/source/application.cpp @@ -19,86 +19,121 @@ #include #include +#include + namespace gmtk { using namespace psemek; - psemek_declare_enum(resource_type, std::uint32_t, - (stone) - (coal) - (iron_ore) - (copper_ore) - (stone_brick) - (iron_plate) - (copper_plate) - (iron_gear) - (copper_wire) - (inserter) - (electric_circuit) - (red_science_pack) - (green_science_pack) + psemek_declare_enum(color_type, std::uint32_t, + (white) + (black) + (gray) + (red) + (green) + (blue) + (cyan) + (magenta) + (yellow) ) + psemek_declare_enum(shape_type, std::uint32_t, + (circle) + (square) + ) + + struct resource_type + { + color_type color; + shape_type shape; + + friend bool operator == (resource_type const &, resource_type const &) = default; + friend auto operator <=> (resource_type const &, resource_type const &) = default; + }; + + struct resource_hash + { + std::size_t operator()(resource_type const & r) const noexcept + { + return util::hash_all(r.color, r.shape); + } + }; + psemek_declare_enum(transformer_type, std::uint32_t, - (furnace) - (factory) + (mixer) + (square_maker) + (hue_shifter) ) psemek_declare_enum(card_type, std::uint32_t, (crossing) - (furnace) - (factory) + (mixer) + (square_maker) + (hue_shifter) (zoomer) ) - gfx::color_rgba color_of(resource_type c) + gfx::color_rgba color_of(color_type c) { switch (c) { - case resource_type::stone: return {144, 128, 96, 255}; - case resource_type::coal: return {32, 32, 32, 255}; - case resource_type::iron_ore: return {96, 128, 144, 255}; - case resource_type::copper_ore: return {224, 128, 64, 255}; - case resource_type::stone_brick: return color_of(resource_type::stone); - case resource_type::iron_plate: return color_of(resource_type::iron_ore); - case resource_type::copper_plate: return color_of(resource_type::copper_ore); - case resource_type::iron_gear: return color_of(resource_type::iron_ore); - case resource_type::copper_wire: return color_of(resource_type::copper_ore); - case resource_type::inserter: return {224, 192, 64, 255}; - case resource_type::electric_circuit: return {64, 192, 64, 255}; - case resource_type::red_science_pack: return {192, 64, 64, 255}; - case resource_type::green_science_pack: return {64, 192, 64, 255}; + case color_type::white: return {255, 255, 255, 255}; + case color_type::black: return {64, 64, 64, 255}; + case color_type::gray: return {160, 160, 160, 255}; + case color_type::red: return {255, 64, 64, 255}; + case color_type::green: return {64, 255, 64, 255}; + case color_type::blue: return {64, 64, 255, 255}; + case color_type::cyan: return {64, 255, 255, 255}; + case color_type::magenta: return {255, 64, 255, 255}; + case color_type::yellow: return {255, 255, 64, 255}; } throw util::unknown_enum_value_exception{c}; } + gfx::color_rgba color_of(resource_type const & r) + { + return color_of(r.color); + } + struct recipe { - util::hash_set inputs; + boost::container::flat_set inputs; resource_type output; }; static util::hash_map> const recipies { { - transformer_type::furnace, + transformer_type::mixer, { - {{resource_type::coal, resource_type::stone}, resource_type::stone_brick}, - {{resource_type::coal, resource_type::iron_ore}, resource_type::iron_plate}, - {{resource_type::coal, resource_type::copper_ore}, resource_type::copper_plate}, + {{{color_type::white, shape_type::circle}, {color_type::black, shape_type::circle}}, {color_type::gray, shape_type::circle}}, + {{{color_type::white, shape_type::circle}, {color_type::red, shape_type::circle}, {color_type::green, shape_type::circle}}, {color_type::yellow, shape_type::circle}}, + {{{color_type::white, shape_type::circle}, {color_type::red, shape_type::circle}, {color_type::blue, shape_type::circle}}, {color_type::magenta, shape_type::circle}}, + {{{color_type::white, shape_type::circle}, {color_type::green, shape_type::circle}, {color_type::blue, shape_type::circle}}, {color_type::cyan, shape_type::circle}}, }, }, { - transformer_type::factory, + transformer_type::square_maker, { - {{resource_type::iron_plate, resource_type::copper_plate}, resource_type::red_science_pack}, - {{resource_type::iron_plate, resource_type::stone_brick}, resource_type::iron_gear}, - {{resource_type::copper_plate, resource_type::stone_brick}, resource_type::copper_wire}, - {{resource_type::iron_plate, resource_type::copper_wire}, resource_type::electric_circuit}, - {{resource_type::iron_gear, resource_type::copper_plate}, resource_type::inserter}, - {{resource_type::electric_circuit, resource_type::inserter, resource_type::red_science_pack}, resource_type::green_science_pack}, + {{{color_type::gray, shape_type::circle}, {color_type::red, shape_type::circle}}, {color_type::red, shape_type::square}}, + {{{color_type::gray, shape_type::circle}, {color_type::green, shape_type::circle}}, {color_type::green, shape_type::square}}, + {{{color_type::gray, shape_type::circle}, {color_type::blue, shape_type::circle}}, {color_type::blue, shape_type::square}}, + {{{color_type::gray, shape_type::circle}, {color_type::cyan, shape_type::circle}}, {color_type::cyan, shape_type::square}}, + {{{color_type::gray, shape_type::circle}, {color_type::magenta, shape_type::circle}}, {color_type::magenta, shape_type::square}}, + {{{color_type::gray, shape_type::circle}, {color_type::yellow, shape_type::circle}}, {color_type::yellow, shape_type::square}}, + }, + }, + { + transformer_type::hue_shifter, + { + {{{color_type::black, shape_type::circle}, {color_type::red, shape_type::circle}}, {color_type::green, shape_type::circle}}, + {{{color_type::black, shape_type::circle}, {color_type::green, shape_type::circle}}, {color_type::blue, shape_type::circle}}, + {{{color_type::black, shape_type::circle}, {color_type::blue, shape_type::circle}}, {color_type::red, shape_type::circle}}, + {{{color_type::black, shape_type::circle}, {color_type::cyan, shape_type::circle}}, {color_type::magenta, shape_type::circle}}, + {{{color_type::black, shape_type::circle}, {color_type::magenta, shape_type::circle}}, {color_type::yellow, shape_type::circle}}, + {{{color_type::black, shape_type::circle}, {color_type::yellow, shape_type::circle}}, {color_type::cyan, shape_type::circle}}, }, }, }; @@ -332,13 +367,12 @@ namespace gmtk static stage_info stages[] { - {resource_type::stone, 0, {}, {resource_type::stone}}, - {resource_type::stone, 10, {card_type::furnace}, {resource_type::coal}}, - {resource_type::stone_brick, 30, {card_type::furnace}, {resource_type::iron_ore}}, - {resource_type::iron_plate, 30, {card_type::factory, card_type::crossing, card_type::crossing}, {resource_type::copper_ore}}, - {resource_type::red_science_pack, 30, {card_type::furnace, card_type::factory, card_type::crossing, card_type::crossing, card_type::zoomer, card_type::zoomer, card_type::zoomer}, {}}, - {resource_type::inserter, 60, {card_type::factory, card_type::factory, card_type::factory, card_type::factory, card_type::crossing, card_type::crossing, card_type::zoomer, card_type::zoomer, card_type::zoomer}, {resource_type::coal}}, - {resource_type::green_science_pack, 60, {}, {}}, + {{color_type::white, shape_type::circle}, 0, {}, {{color_type::white, shape_type::circle}}}, + {{color_type::white, shape_type::circle}, 10, {card_type::mixer}, {{color_type::black, shape_type::circle}}}, + {{color_type::gray, shape_type::circle}, 30, {card_type::hue_shifter, card_type::crossing}, {{color_type::red, shape_type::circle}}}, + {{color_type::green, shape_type::circle}, 30, {card_type::square_maker, card_type::crossing}, {}}, + {{color_type::green, shape_type::square}, 30, {card_type::hue_shifter, card_type::crossing, card_type::zoomer}, {}}, + {{color_type::blue, shape_type::square}, 30, {card_type::hue_shifter, card_type::crossing}, {}}, }; template @@ -517,10 +551,18 @@ namespace gmtk } else if (auto t = acc.get_if()) { - if (t->type == transformer_type::furnace) - map.put_card(card_type::furnace); - else if (t->type == transformer_type::factory) - map.put_card(card_type::factory); + switch (t->type) + { + case transformer_type::mixer: + map.put_card(card_type::mixer); + break; + case transformer_type::square_maker: + map.put_card(card_type::square_maker); + break; + case transformer_type::hue_shifter: + map.put_card(card_type::hue_shifter); + break; + } } map.world.destroy(*entity); @@ -543,7 +585,7 @@ namespace gmtk void draw_grid(geom::box const & box, float view_level, gfx::painter & painter, bool solid = false) { - float const grid_width = 0.05f * std::min(box[0].length() / 3.f, std::pow(3.f, -1.f - view_level)); + float const grid_width = 0.025f * std::min(box[0].length() / 3.f, std::pow(3.f, -1.f - view_level)); gfx::color_rgba color = gfx::black; if (!solid) @@ -573,24 +615,18 @@ namespace gmtk } } - void draw_item(resource_type type, geom::point const & pos, float scale, gfx::painter & painter, bool selected = false) + void draw_item(resource_type const & type, geom::point const & pos, float scale, gfx::painter & painter, bool selected = false) { auto color = color_of(type); + gfx::color_rgba bcolor = selected ? gfx::white : gfx::black; - gfx::color_rgba bcolor = selected ? gfx::red : gfx::black; - - switch (type) + switch (type.shape) { - case resource_type::coal: - case resource_type::stone: - case resource_type::iron_ore: - case resource_type::copper_ore: + case shape_type::circle: painter.circle(pos, 0.075f * scale, bcolor); painter.circle(pos, 0.05f * scale, color); break; - case resource_type::stone_brick: - case resource_type::iron_plate: - case resource_type::copper_plate: + case shape_type::square: { auto box = geom::expand(geom::box::singleton(pos), 0.075f * scale); painter.rect(box, bcolor); @@ -598,30 +634,6 @@ namespace gmtk painter.rect(box, color); } break; - case resource_type::iron_gear: - case resource_type::copper_wire: - case resource_type::inserter: - case resource_type::electric_circuit: - { - bool first = true; - for (float radius : {0.075f * scale, 0.05f * scale}) - { - auto c = first ? bcolor : color; - for (int i = 0; i < 6; ++i) - painter.triangle(pos, pos + geom::direction(geom::rad(i * 60.f)) * radius, pos + geom::direction(geom::rad((i + 1) * 60.f)) * radius, c); - first = false; - } - } - break; - case resource_type::red_science_pack: - case resource_type::green_science_pack: - { - auto box = geom::expand(geom::box::singleton(pos), 0.075f * scale); - painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), bcolor); - box = geom::shrink(box, 0.025f * scale); - painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), color); - } - break; } } @@ -629,25 +641,38 @@ namespace gmtk { auto box = geom::shrink(bbox, bbox[0].length() * 0.2f); - auto p0 = box.corner(0, 0); - auto p1 = box.corner(1, 0); - auto p2 = box.corner(0.8f, 1); - auto p3 = box.corner(0.2f, 1); - - gfx::color_rgba color = {255, 0, 255, 255}; - switch (t.type) + for (int i = 0; i < 2; ++i) { - case transformer_type::furnace: color = color_of(resource_type::stone); break; - case transformer_type::factory: color = color_of(resource_type::iron_ore); break; - } + gfx::color_rgba color = {0, 0, 0, 255}; - painter.triangle(p0, p1, p2, color); - painter.triangle(p0, p2, p3, color); + if (i == 1) + { + color = {255, 255, 255, 255}; + if (t.type == transformer_type::mixer) + box = geom::shrink(bbox, bbox[0].length() * (0.2f + 0.025f * std::sqrt(2.f))); + else + box = geom::shrink(bbox, bbox[0].length() * 0.225f); + } + + switch (t.type) + { + case transformer_type::mixer: + painter.triangle(box.corner(0.f, 0.5f), box.corner(1.f, 0.5f), box.corner(0.5f, 0.f), color); + painter.triangle(box.corner(0.f, 0.5f), box.corner(1.f, 0.5f), box.corner(0.5f, 1.f), color); + break; + case transformer_type::square_maker: + painter.rect(box, color); + break; + case transformer_type::hue_shifter: + painter.circle(box.center(), box[0].length() / 2.f, color, 72); + break; + } + } } void draw_structure(geom::box const & bbox, crossing const &, gfx::painter & painter) { - auto wbox = geom::shrink(bbox, bbox[0].length() * 0.2f); + auto wbox = geom::shrink(bbox, bbox[0].length() * 0.1f); auto sbox = geom::shrink(bbox, bbox[0].length() * 0.3f); gfx::color_rgba color{64, 64, 64, 255}; @@ -663,11 +688,14 @@ namespace gmtk case card_type::crossing: draw_structure(bbox, crossing{}, painter); break; - case card_type::furnace: - draw_structure(bbox, transformer{transformer_type::furnace}, painter); + case card_type::mixer: + draw_structure(bbox, transformer{transformer_type::mixer}, painter); break; - case card_type::factory: - draw_structure(bbox, transformer{transformer_type::factory}, painter); + case card_type::square_maker: + draw_structure(bbox, transformer{transformer_type::square_maker}, painter); + break; + case card_type::hue_shifter: + draw_structure(bbox, transformer{transformer_type::hue_shifter}, painter); break; case card_type::zoomer: draw_grid(bbox, -1.f, painter, true); @@ -675,7 +703,7 @@ namespace gmtk } } - void draw(map & map, float view_level, gfx::painter & painter) + void draw_grids(map & map, float view_level, gfx::painter & painter) { draw_grid({{{0.f, 3.f}, {0.f, 3.f}}}, view_level, painter); @@ -683,19 +711,35 @@ namespace gmtk { draw_grid(v.location.bbox(), view_level, painter); }); + } - map.world.apply([&](path_vertex const & vertex) + void draw(map & map, gfx::painter & painter) + { + map.world.apply([&](vertex const & v, crossing const & c) { - for (auto b : vertex.belts_to) - { - auto q = map.world.get(b).get().location; - float w0 = 0.3f * std::pow(3.f, 1.f - vertex.location.level); - float w1 = 0.3f * std::pow(3.f, 1.f - q.level); - gfx::color_rgba c{191, 191, 191, 255}; - painter.line(vertex.location.center(), q.center(), w0, w1, c, c, true); - } + draw_structure(v.location.bbox(), c, painter); }); + for (int i = 0; i < 2; ++i) + map.world.apply([&](path_vertex const & vertex) + { + float w = (i == 0 ? 0.3f : 0.25f); + float w0 = w * std::pow(3.f, 1.f - vertex.location.level); + gfx::color_rgba c{192, 192, 192, 255}; + if (i == 0) + c = {0, 0, 0, 255}; + + if (vertex.location.up().down() == vertex.location && (!vertex.belts_to.empty() || !vertex.belts_from.empty())) + painter.circle(vertex.location.center(), w0 / 2.f, c); + + for (auto b : vertex.belts_to) + { + auto q = map.world.get(b).get().location; + float w1 = w * std::pow(3.f, 1.f - q.level); + painter.line(vertex.location.center(), q.center(), w0, w1, c, c, false); + } + }); + map.world.apply([&](path_vertex const & vertex) { for (auto b : vertex.belts_to) @@ -713,15 +757,17 @@ namespace gmtk d *= s * 0.5f; n *= s; - painter.triangle(c - d + n, c - d - n, c + d, {255, 127, 0, 255}); + // gfx::color_rgba color = {255, 128, 0, 255}; + gfx::color_rgba color = {64, 64, 64, 255}; + + painter.triangle(c - d + n, c - d - n, c + d, color); } }); map.world.apply([&](vertex const & v, source const & s) { - // float vs = std::pow(3.f, - v.location.level) * 0.01f; - painter.rect(v.location.bbox(-0.2f), color_of(s.type)); - // painter.text(v.location.center(), "180/m", {.scale = {vs, -vs}, .c = {0, 0, 0, 255}}); + painter.rect(v.location.bbox(-0.2f), gfx::black); + painter.rect(v.location.bbox(-0.225f), color_of(s.type)); }); map.world.apply([&](vertex const & v, transformer const & t) @@ -729,14 +775,10 @@ namespace gmtk draw_structure(v.location.bbox(), t, painter); }); - map.world.apply([&](vertex const & v, crossing const & c) - { - draw_structure(v.location.bbox(), c, painter); - }); - map.world.apply([&](vertex const & v, lab const &) { - painter.rect(v.location.bbox(-0.2f), {128, 192, 255, 255}); + painter.rect(v.location.bbox(-0.2f), {0, 0, 0, 255}); + painter.rect(v.location.bbox(-0.225f), {192, 192, 192, 255}); auto pen = v.location.bbox(-0.4f).corner(0.5f, 1.f); @@ -918,10 +960,10 @@ namespace gmtk { if (selected_ && !map_.world.index().find(*selected_)) { - if (map_.take_card(card_type::furnace)) + if (map_.take_card(card_type::mixer)) map_.world.create( vertex{*selected_}, - transformer{transformer_type::furnace} + transformer{transformer_type::mixer} ); } } @@ -930,10 +972,22 @@ namespace gmtk { if (selected_ && !map_.world.index().find(*selected_)) { - if (map_.take_card(card_type::factory)) + if (map_.take_card(card_type::hue_shifter)) map_.world.create( vertex{*selected_}, - transformer{transformer_type::factory} + transformer{transformer_type::hue_shifter} + ); + } + } + + if (event.down && event.key == app::keycode::H) + { + if (selected_ && !map_.world.index().find(*selected_)) + { + if (map_.take_card(card_type::square_maker)) + map_.world.create( + vertex{*selected_}, + transformer{transformer_type::square_maker} ); } } @@ -1326,13 +1380,15 @@ namespace gmtk view_level = geom::lerp(view_transition_->old.level, view_stack_.back().level, t); } - draw(map_, view_level, painter_); + draw_grids(map_, view_level, painter_); if (selected_) - draw_selection(*selected_, painter_, {255, 128, 128, 255}); + draw_selection(*selected_, painter_, {128, 128, 128, 255}); if (belt_start_) - draw_selection(*belt_start_, painter_, {255, 191, 128, 255}); + draw_selection(*belt_start_, painter_, {64, 64, 64, 255}); + + draw(map_, painter_); { float w = (view_box_[0].length() - view_box_[1].length()) / 2.f; @@ -1412,7 +1468,9 @@ namespace gmtk draw_card(geom::expand(geom::box::singleton(pen), step), type, painter_); - painter_.text(pen, std::to_string(map_.cards.at(type)), {.scale = {vs, -vs}, .c = {0, 0, 0, 255}}); + auto color = (type != card_type::crossing) ? gfx::black : gfx::white; + + painter_.text(pen, std::to_string(map_.cards.at(type)), {.scale = {vs, -vs}, .c = color}); pen[1] -= step * 2.f; } diff --git a/tree.xcf b/tree.xcf new file mode 100644 index 0000000000000000000000000000000000000000..eb1af1179f2b17fd8b9b2ede1a7808ea4d128413 GIT binary patch literal 106522 zcmeFa3w)hbmG}RglXG%U(>9kTy*Eum3vKBI3av=6I5;ZB3%+=p;2Q z1*1mS4TuC0rf9hxt`qMbvAqeA`>!`o`_o;SS{C+za3F#w)IS z;~SQ~^Xlu`m%iYI+g>V9W^2%^-+IMWZ(MWLJFb3%_(|x0T6yht?|#c0mtOm}w_N>( zRpl$+bk&t_d&}G2v2>-vns;3F`YV>M)Bp9Wc>MZl9F)4h0;xBKNnH>n4BKCz5dwImZG-9ua z*efIUs))TBd#Q8o5Ga2o{N&pb{|d7ML9^HiCuvVI)jZ$(&zC&$x9}q#7a#E0^l^_Z4|rVl4UcQu4S(fvt-Zfi z^2*=Z)rSA%@ytzzw;TS{@IgZ>vvpGb{H>dBc)H;h!xtI8#_-LCe`fd*!%rFZ82+o_ zcMN~(@vIh)&uQ~`ez(W1n>{}NFFgLi9*-CO*5e=E=kbNx4DJ0FzSX;5H01H(S9{#{ zj~*{M&F~z<7Z|?M@G8T18h*&o*JE(W-<$i(hTk^)iQz8|f9LTfC5H11PxE-`{T^Ry z?#rbu^7p!T8h+K|8?C&q{v+?+{!zofF|_*K?%QE-%?G^ybz41N-{J9H7XCd}zVET} zc+Xz{{5{__{F&je4JSNyR2VKWJj3ughA%dJt>K>-zQ^z;kD1Fo{zaF^56B?Q--q7h z@nhB>Zuu|o{*)iKgTEW}?!UX&(AxdqJ?7n?{ZEhoaGA${k}-(CUQ5pxR(baqzG?VF zL#u}`$l%Z47mEyQ43`^jG`!I8Qo}0^uQhzXVVB`9k9+*M5Zr0c@BFg&zw_H3zxD!; z-%5G>_CAmMtY7W3ezni~)jsQ2-}|8tcaQatA6a?*$olz@zT}_(Xu$BthQBZz_c&B+ zSZ~;3xXJJ$!^;fcWO%*djfS@v-tO@yI*A6sPv?5~&#az)_8adWe!0i}A&z+Wf4|Vs z`tN^VZSHq_{CTnA*&hF=-mt}Rli@{%ml?jv@Or}=4R0~L-SA6>1BO2~{DtAT$NP&7 z>kV5BZTudQIfcKG2MrH-{6)FPU)ucntMk44|E)H(a1Y+?-M_9hTxe+Fetn*~FE;!m z!?zfA7=G07Zw&v*u+Q*64FA*cH-?iQe^Y6=&~UZkd4?Ao{*lMu{*~cp48LgjZyrZq z;c@Ibj}KY6|Gmw-57_*6;78_u!0-`|52p-k4Vw+mGJL+_D-7RYc%9(~4FAgTGlpL@ z{5QiN89re6h{s1#hP58Y-)3n2eEehHeQ=}4Y`0>f>>oTN-|%k3{f484IgjO=&H9X(&62r?4w;SGIc(dVchMzO+H@w?$ zzu~B1&f~mUhKmi?8lG=>iQ(mj+YN6pyxH(J!_OJ^8{TcW-*D70=dody;bOzJhUXhz zVtBdXcEcMCZ#KNm@NXpW#7|i^>e&Z1`t}A2IyA;h3SP6BCPNt;4En z@e;!`4O(k&jBw|ZBk@8{2PIzmb?^VG3XiY#bYh}yfp@og`XOC(y9{?3e!=jYhCejC-|%6NuPZXFF_a_bi-tfzY z-!}Y-;V%t;=kXmShVu+hGd#!e1%|IQyvp#Mh95Hgq~YHie%bKbhCea9UVE+K z`whDccNu=c@SBD|G`!#NVUO1p8P*ssH{57=q2Z;5R~lYx_L9moTRqNwH4fXXAm;|^12<6T+(4R;B|*Zup4!0m%mb@%wc*NAxGkJmU}<9LmW7yfwV@XFzp6EFOydf`9yMeh}h-oF@2gpWR&R7u2PS<=+T z^PY8*sly5>C%KOnWZIWftgv%Zl(E{N0tQNA)x~@Jwk^-sCE*9Qt%y|f`gjY-r2o(H zZx*v+IXSFJRK}WvxMD4#Lh2-6wCc*2y}I(1qpp0lt1DmQ)41Xx zs2vZ~-UezH1GQg8F!T?@h3{!!UY3u!$-YGswGpD((nGp*P&qB1VoAFngr0o)B$ot_ zw086kjb*cAL%kiX>w@g+9m5qaJG^7{89}zCYogj^C%RgQyL~?++Wz(xL9Vuwv8uC{ z{5S7nG}_g?6u(^yu+=UJT<0R^Iu{47eTj4J3xizC{w2KEvLJ9>%be?)ALLd~EOWVu z)s2DMvD~>G;4nDc5V+PA&b7`9TnE?z_JY0O5I6*mfn#76%tkQu55tA;h4E;-#IN5e zd^b$Vd`sJcd}#YwDTDw%&9{Szq>!o3=8Kb@W#C<$614G@Cl-^yNA?EoF>* zWqjb9e(HO6_M6n79CdM~Tj{mWl|GEo@6HRdO$Ws6c47{yIilvcnz@MSef(1&(!WIv z8kt6WKJjPLHy?Gvs_s6q?QnjOnJtvm7p8AcxdZ)Y`mubC3|`f4wTx!70mn#o2AP`c zPM2a6aQ!uIm5hu6uDe#uK{ZFz99J_JF};s}>O<;V8ikL~BKKeNU$rDyf-HITPbK|G z@P>F+GU){QyD{#$H114AW~qgRn3DNvj6qST$!uT)xDb$(Mo2~0`cm-&KD6V&DyB^c z#GccIW`rti8$AP35%R5nwNM94o=peVKo-oRoYq1Kf`i})I0BA?<6sWVMKJUa!-el@ zJZthXueNWUk^lPXmY%s#xkBkm8X<>`2)5);&D~+yFPgrX((%HaQnp(D+Q#mWhnpF) z@(Y(t>K@wYU4d&mA3B+V2!eWG+jE4J+_!Cu5Rd~~MBdx88Iu-uZjh#m#iTKv6BN^u z)ErcEM9pzEa}m?~_@_Q3Z&?&RK8xIc$$!<7U7`)mwiDC7pHw*3Yn#( zEfGt6)@qD`EY*C|6^)K8)oQ04bRk;iiw%-W`)|1~Rw>1>)F^mL*~X^|n$qHYnLi#8 zE-g=c=RNV7jP_1qYU{7cN5=@+GwLexAJe)_y7GKtba`Ebhfl23Wy+OVPNXW+t~8%d zU0aKXUrtL^7Q2#sDe010JbWQCgm#yROG_Bnpt`j5agC@;YX;Z2y0q4C<)(4PL&jr? ze?hB|SoG^*6aUs(u$cKueeO=e){H2ZTcRWZxc`F z+DtJkwDm)X((SfLw@bRs(%Fgt>00M%mpVtfRN9@R9cYtupklX48!RT>1e5N8Nw>hH zJLFC8$7hlIFZr)p5-dSJbwca*XVQUhEam%iU2AOX`{heeN1?C%6;b4ekc_fP28b;NA#^ z{$aTAJ&Pxd8P=743)Yo=9oChmhjeNBU|m^?CGDQ~087F65l|I*E(L7ZC<7yt`s7Uc z%#_cuwVzUWG7i2;?3YO`jP%^I>ABKtHwG2fQ!DAI(p#&vw=VMYkkGgCD|w&2du~ud z&!74$W<*H3Oezf3$l_ui<3l}PsRQfyO0A)+Yl_S+OPbJL3DxfHmC(N_r{4{~KkF|2 zW^}ZXQ70BA40|N3+#JdOCQ>j5_cE}W(QFAgi{Ikoh*oxCdMcNY!_DLaF0ETY$<*_G z!8-hpg!46AkqfbrI;$uA;aEnAi+`zWmQDUVxVOgN2}|vnjEVOKndqK6RiBVl&k1UU@rb=kZZjh{|)L`tH{^6d-0!Hm2n6pLk&kDgdQ z`R_wcmSX!yNPs=_Nyf6FY;T2k_}%sVP%RBomffJ5BWjMTnTwd-ho_0WpngWJAfmmIVI$s?Qs)pQj2*Co zO>1FZFo~uIEc8&J0Wm@Q{-kixP1gaLM{Q?H_~xeQfu39QuC#EzET|J>rRo8&~y`!8(k5>-i zgTv}l)egSbS|QI=;R9EPx>OAWSFgHMIRw{`x>R)p*I3MzjfM2CFcu#&`~tD~#oo1X zdM^}cJQGCPbmL6PMe+Pi5xbreBJDaO%SEhR%L-Kpa}jOVvT7CbT*TY8Zmvk_%wDUc zx)1Yk5LNE<^tz8J7ixKWk{!>%CYe1w#g4PPS@_DHU{_%~?tQqu41NV{W+B*BFpr}L zv0Bdx;WuL$z@uNqk-T%DNo)hnOiGP1YBsSzm~Tr48d5Dwj)lR)(PXkNbmObU%tcJ^ zGqNhkls_*%0&Jkacy+EbVK0g*m$1Rn<612o>&{wXYooy>aiPAoGC+FYxiY9nb?Y=t z^tM_86ji&#L}hD5(1600n!_ss)KgoV#e~C%*{kM|nqz8aBc}J^X{KaXyk&(wC$3g| zA}AFmd0oOC&14Tza1wR$5_2e@_tJI{$vhnd^@*=pdS?XnrV5}GrHb^QUV?gQdBR32 z>741E;qZ^xAv*SE63b`G=kb(1qOQGt^ z(diSca4W$iZjTl2G~7k_w}2`9Jyy78CjB&S!D4<mf$XhabE0}<6i*- zK8lqP2jUiN0%yVejbb$nJaNy4G2BEv=#nT3oBXN%goCJJfuf(p%5DyVz_nU#vnjJV zl$n&Kb8H$)J{Y#8yStQD=?im!;3o8+~g^ou4}lDcZpd==;I#e75jMKn+ZhIVOd zQeF!{$NSzsPjMlXkhm8@9ZCF)XuDFDi>MbVzs1y*l-FX)sDwC|kf%~bNr$*SN?CTDkGOJ9+1*JGFdBKA7$Qh$=RTI^D< zN%ARniBIfvHErHLN9(d&%exwTCExI6Ka0BX_A2~m@vfts#XcK}^J=~~Pq9)(EY+lAK542Z%tF#21o|RyHowK1rXoa3#c%|Q5&5L`CwhqC?>V#q z`JG3b6hU1kc|okMLy@`&yhPZRB&3LJ2wCzq%z|)FeB~!0;yl`*xTj)0 zWgz}_)Y)_>LSjkxT+Kr{{ZaB#LBA5L)PCEj_^$4eAz$(^`o z>nJmwh&AfBfRXP==?iN$siRaQElpZY0TViEg#u`{4KYGX$$Au}fWv3|Q0QKv$^vtV zb8)bg9=gOW4HoBr%Mby}uPIna>z>buc2}%KGsz;}EGQ05r7L8V3&$!Mr(_)Sqh2O8 zi0d5ECh9{Wkk3e`G zqIl0DKN)07r^t?HI3k6u3&F=`%IERcT$B&%5amwOnorpckI6gZe905H;qloa5kf(< z^#8=!6Hhd1D61K6wW*iX1=(%;pcVWk3S5ZmklUz=3CbTmN$AROvk2m!wo&o$n<&_F z(q9A#8SYa+7}Rt?JUpwk8cc~x$5vc}>Qc@at`T*q#1+@Lx>W9pD>scR9x@(F{0lmU z6N`R*O5);aKP+qUoX1OLYMGH;Q`ylXrEpB6=W+V!<(%_*G8xIme=CVZSW6vaQn%01 zIz^pcY7&7gHHeD6)EoNtlo%%Ugh~BiQZJa)N8a>4{;3bCZ)p@hK8xIc$$! z2xPfszj%0=xQM`I16e2%SDWrA(=!q%&mCH-VSNpkN|9?_QZubu0b0+vI@F~k0j^$k zsW2PYkh)YPj%!R^DiX()oyHXp8IL9Yh4|MaDI@KXR7+0e)Q2!fQ!*SckHd;9UYhZe zKCB`RtE$5)GgErulNmaM0n2Em`-Jvw)15#A!i04_DmNW%Q@Lrsn22;`>Fm1I98_~e z&2cqz5!3tlr#>WaSro`&i4UQyMDD-D?j*j7)K-#U33?JU&)cCCo`Jbs6-=mXCK<25 zRVqD~l`utnB!a{PbO=5Pa*{kM|nqz8aBc}K9Pkl)L7BTqP ze9ZP43XyMG0(@#HGE!#Aq}xcMEeo0Ie~dSaC~aKKi74py=O*+}FWKcTt8r22rq0fu z_Td!icBu~=-H1-4!au3L^~m3Cc*4ga2c~F72HSR|ewR+gOL#6jC1;9jrnuxdJ;?ZD zJrnEj)|Gr&d=Om{WH~XbDnfiVs$EFK!hu;(kEm1%F&NU5oGQ_-1Ybx{3hmpe#IY$^ zLO(X|5*jQdC?Q~Kca;mFr%INrs5?b^>j_FBg(`(iH-Zw1v1Pw_c!Co8s!POzA$YH=w^CkqI5DY=KMS6xa9;u=!d7+P&(xW?3_ z1SPKQG_H8acr5WR#J{ctC2^86%t)$nDM1DmsbEJV*?^NlQ1gm@tJ3a`m8E9VH?*jCVbNXx!$A{KB1BE)n(Vux(h z9ZLN=tsQ7O8>YYOR&!9z5jDrv%tcJ^Ga}ms+@PA>XYnqS(?;>?SI20ZI(pO`P_KR4 zM6Lkkw9(Iv0+QN|!Fb^S%}lC&CO@Zo{UBujUH&{k5p>B}fEyA2iSno(tRS>vlJSAF z3_76@X>&p}?`l?>a96ETgPlqZwhO%n&A1GCm+Ml;#A>Ahjb;=fm}{*H)_rPwkze`c^ZjN2(`bf zR;m46&1-yC)*=%{Gj?4*uVLN`<&i1+9rOkYtkLc05SRI#>TC1+*U!lBXANux7 z=~Wlq1M}mai|AFiPp~YWxSiuSTfWaa`ulYA+=csDG48(*@&|1JC?XwyikUm>1NVK7 zCjGuB@pDMj?Ho^fyBwj+0Z|uCEFqqYQZS_vZQR2#rT3&*79vS_DXglO7BR%ZxcoNu zZx=DI!Pq;5{gCKeL6dEV_Sr6aWU!<9u=j~B8PwS?u>ZpBk70kz>^bZ?Z$FJuRKg1C z`}R!ZwRcKH>|$|=E>`%Bw4}+tokA-jOjD8M!P1%(9YxDSLUL_+bLf_YxkjT-%VM#W z4@^@lHMS;OX;Q9M!j!d@I^}OQ!9l0_`hf)ztvWd=>Zp|kiZ6>V@uG`&##a-z&=O1v zLrR`4{QOMv@*GY@kr>;Q&+qNuV>owkyts2fA?jS zhFKR~{2Zwr%RwkA`(f1I-!59*tf_7NCHl82JJJKGMH5_BWE@KEc8LnC$ek9kkgkxy zw0$u)QHx`sTTCmgl+n6t39=Z`iKERd!J|@^-8+^Ns#2ER!<%K<+4>w^7M}{nQ|z!)G#&{vWbwH^`*lf8_D&NMe@d6ly|*eR6vKB3X+rMpsl0&R{yr^^K0w;A|R2ad3_{lXGcY=>RhuF})8r7!sye!*}Srt&8NF!y4y~h4M}L3?Jx{ z2P8nBw=YJ6)pagq4No$gNVxL}&x>1-N(oP(AW%B;!S})E*+TW{C(|yTo%CIzF4BLv zf9A=|i%bTQc~OoIQ>6*Lq(SZrVTEIJf*gj-u4LQ8F9(S6uJV@4S?{p6P#umkI)8=C zHQEM5*u_wyhXKh>pwc{5C9@NQkBRe@Pi=yJRVGoIOr~5J3|aGZm|bZ&vnyR_c4$5~ zCX+P-sqNA)C?v=}8@^>>M1{oDl*Oc#Y186NOG@oqs!3*PD3ZKc+C*_AOmjl01fvm& zU4}f(=ZT{eVUL7TzGo^<(Xl?88iFsZ2hi->whp@A4Ya7f6>CX3jCuw7UJabn zR(LT7)f`cCT+Lj>^gjNn52r20kmhpS^7P)MPClPasAKLliNf<C6h$TV8+^C)*gi%3)UY3FeRa#*bE(bJ4a+m_R7P>Se>HDd?9FUu>K<`oT} z((y)xc*2-Z$CG}~>?!s=rQ_r3WI46Pe{%l!F zm2f5}469PW4V1AT$Mux6zlyO?!1Y(KO^1>faNTm?s2fysM9pzEa}m?~_@_RkzNJz4 z_$+e&CI3}Rf+YyDUNn`?HT|V6rq+}xyCA5Q7C4|++L7`arhM8X^o3+#jx_gTO zoO7+0lE?(E13T?lk3i8GT^lP)FS3Ua)|xD}E*XVDP}OZFW|EFe6=iXe9bDRqagjw_ zst%5eY~xbJaa%o=R${6$&pMoHgowyrfFi_E$e6SO zgLX2WrQYx&gjLASG-Wa5#d%$hg;pI^adJ6SI+NNt3d*~BeQ;X-YtK&Nx=eOstBjhp z@V;#upiRS3)t?yOrsPS#m`J?k#2nYH=AfD*YL2U!io2hEPQ`DD^~Y2&$m%`nW8uzR8d07>k72WRJC_x*-5h_L$}8{9w@doEp1B}YY*S{=^&b)auTrIfL_yNp##EM87{9h7BGVF=)uh7r;94!?u2 zhRYNfglrgrvCRQ_;`TX&^{sAS0Jz4}vYgTp3ikL&no%+wn`QH(xc%^ki|rhRp_u_n z_J;6SYlO#a7{R3tfEihKk>J!eK+J3x!lg9~J8nP@m+)gVF1DbAE=IX+17Sc24SgNd zSWhnDkvc10_$NlnR6Ns2W*Uj;CbGV@o0kr!+)*A*HlK{vSmWJ$=J5okE2YsBU0Ij%Z`8Z>H-FN-wX6H0P%c$qvg8cNOy;)%}X zX4jrnePV3&4K49PUW2`thE(ww8b&v6WzGyo_$?&cD^&~!x{(4zY^+eSkx zwT`Epol6m?^iVa3t?qPagWi*a*6@Q8G#eD6*>Yl&s^)oU@4>Diq?-AvzNeLpL!;9w zW)-Yo(F$gj>%XqG3rAj4C3UOYu0?JrsYi@VZe%wv8H52wp5fv2WH|rwDR;eCiK?Sp ziq{S5T5m*5e+`qI9W~uKE^;=C6oHyOo8Vo$0lmdibgVV2=OR&|6>srdzP4za&6K=M zTBKy+iMLy4g3kDG$85VgsuRw-A6{uxbG$K_M8YcE0#oFHI?}f4w>U2k$ z2)0%BgKJn_Dq%qy(<d~o%uOQ$4};iyX|DqLgg(&-CVR$V%|9p;LM zjK>oHLj3EIl#$Lzs;A~?N`^%npimw(V-b@Vic2JCh0+w6nx2KNC9U$dXhl#n&B)LT zRYl#!E3WqQT`E@(tluXKP(dL?YLxxmoK{ z31X3`L0Ie3Or^B_`HSBr&w9(I<{5?@ssk{?RGz5CB?S_;E-B3t++NtGx-Pn?EgT2V zW@p-_wl1kBb!qFOC9v5U2Bj)s!>~k?w5X3$-TE?Y>YLU-_{Nb3e-`N6yG(bMlaiRK z^j^Syy3^MU$QhN~u`C-$N85B4X}|9GJ&eW`Qw|!Rer`TmEs-h5V3XS&b`G}4Ph=~DR`vdNIqaHk41VuIvu;t? zRjV5bIz=|<+EqPcf6Ee4g6LAm#A*S@Mgw*=49i(w9G@VY7dpyb^9dt1^Yc7zJMgjq)#qUZo_itWx9>dnfkn z-g!+uo0j^rcigm(WcDXu(JB8BoD zZJQGmarGf{p^~Q@>V}KC&`9dJL4weXWlB^ti1+Qrp;WavcH&T?SRB{jPmq9xV*1Jj82@lY{Gw2Cb1`Q z+cL#X@quIdIpxVU*Ebw_tVEF^Peak-je4SmbAV(>I>~kuBoIb7$%Yf5-96DH>thzj zN;1iY6UGB2m}J8VLx9oZBDJ8WD-i6 zWU8d>KOtJm_F*~jH%w2lE-BMCa{R;K$>o-mP!VA&*O;f*! z*)%^X>X(7saw=PjC@C!i*;2$}%m`tQhCEs&v0@H8icXnNz2!e1!}{sTM^1hk6|9-^ z$+ID+E+eFTq`jqvj}2x$SQhJtgvlfOoctb^McDif7O~m(m4#US<`uEY9Rr$RQC&xgqXOlT{Z+w`_YE6k|k;aWQgvL!J6SgJ|HU z1M)tmta%3x&HHl$$oTBMc3~DLI-&A-Eu!MI0%k_Bj7kV4(7mI z1VjHYT=*XGOmsVqcanJdO16KLQ$KTUJsC+wdW3pG0@PW%l&Y!?CTrcUX1Oq7Zg8l1 z7rXUp7g4VeN42tft8)?c4Q(WQkJytWSB3~<5pIKQf?_GIyOr1>qb)`DG06rNX`YZ! z>~LbcjJ7NGKFOvTofc$IRBH+QwP>xfSE?h8wlS>i4(v=RD}{C4i+#xKL)gd6K88JO z_Usfpn`|^52{UBz%e%dj2HLyC*&&Ie#ml!^B@3`fIeF6!i(MFa0C4 zaJ88v4X^kG$7cfJW;=MO$}Z89;rf-6cA!Z)MBQo*s>xm0u&&0{%tcJ^Mqkp|m2<<1!9n5Aq< zmFu_=Z7>T873hXHC@1MGWg?x;#Oiw098z;k&8#;y%-BW=Kh&h}3xlXh<0PhzCjF4G zht5>a&>H#tj@6zUbh@&ER)q{8xpvBPf0AVRMDc!tkHi@)a`R?8+j{o5K*qT)+14|$ zS~u?OP;*#rkKzyjF+0@kRdYzqF*UOh)BE_RKBRw(7}zRAY?#FCzoH-1PrLR^@@w&w z9W5K^R1805Utp&CkCAeP`|lEk{3c#~3UB|Ct!bI$&w^%p-jRQqJM6* zSQunxT|iv(j`+*JW8>F+6Li9FR_Q0GB2iG~q@W5RsX`o< z1~WAgYNZ~ozEA73)^*}r=}b+WI(-7sZ73&D*#WBcDo+4a#sEI;Rr8NtJbLnEL6q+a zEqCq*&d(Povya2^QdOB_XLObSJjj&yi&hS+j3=R*yqS?qZ+tq=H$l09gxn)_LgJRq zhCX*J+O`d3(%*lkvStuf3Hw?u`N5^*4=yhG!KJ+c7nl6t(y<5^m;B(;5eXNU z{NU1Y=`dG3WIUGm7vf(>BbPWeWiSXL+Pbi`W17717@~^4a0()Nz{<{#stLn1h-eX` z^cK-DM&2U_k-_NCtG6TGiK-~0P#0HX&R^(c>=T$JaW&}2RTH`9$Q&9tGA&)@5q*;d zs!z?}QTUQ11&wc$lA|IbiA5vYgykrNNp{lt?4T+_ZV?-(VQ9TL?akz39wZ9O@Ra-M9u-2(;?j17i(1E} z?Mm1>>e6oHLj3EIl#$Lzs;A~i+f^aMEO#gmT}+fc z?arV(r7n-kRIHbi)jO1R->Ztsb~d|LX)XyiArVt^Oid(T`1GpjkEUxa7u9Gxn_ZNc zkq3CiX4P^Q&1$b^je0X81kP&~{c8~`G%uG6f8>aHH0Gb|0dvXgj@(h#JSp8~y_w0* zuNMVvcygNYQ2ATS!h{)exwC84#~rH7?Qb#~stnd6HS{OftI#6r#T#l4scFIt4bxgF zC*X5~lH7Tu!iwq$X|QjVO4=+9B}iPtwCQoamgY1r@uzQMr@bgKWAuwIw)Meg_u}+??7Jt8QeK?e7`XDZ%WX@ZjfHKhcb078A(of05ipnjF1j>J&cX6^ zltQ+PS8_YHucyxm+#)RB#ga?kL#R><<+hv~xGffjN9=k1LE3xCqg?s_hCYAHTYrpC z`Um*@Z#iMk#pgNrByYs$R}I(}J%;VWNuFtFmV#|~Jhn()lc>Ao(I#FypGW6`=YX#X z-%fr4+b0N;YxotCx7YCO9KxIjl0vs-evl|iCE*6Bt09;udi76!erM6Y;G=Oh1i1xc z#ju^-tBGiAe!=}(-1p66`(x3o?@dbp@1YTv=AC@UzlbGFoPMg1kbKH=mRKJ7^he&Y z42D^b2GJtpRAnuVd(u354mmp)AIWm=#^j=cd`x)b#g9ziF;hV=m3U5YDD}~YzS@$YMXV;dnF=gx z$z=^qW8N@6-=$aj-n?CUNcuZGTtuK!`mQ!4DvgdVk9_ABn~VnKdb*EOfobh1)`_yO&n1q1DyFgejrjYt-3_(?*&) z$<#2)62ASaa|cd+x6T&|QnxX(E_f*8l zL}n~#)Z-*Bob|F(I5K1=CeMH%QJx5thY3KS#Fb~j4#N||2dVPcHbljY)$c_*e5~h^ z&H7Bh+Cnp9TR93s9k#thWIm9g5qXfvwqoKUXverf$&TI#YRTEb+8bSd~>Ac;qi9+8Ae`WH>!4I3tdQ-mAnb{dH^?E9VbRVL7i|$$IuKmh-Nhb-ENst~{M7e|;>2(ab(;>{HfXlJBRw z2Fp~w@0i|wDl3d5y_2c9;FwkqnM&kwl*O^EKqQWnMav%Dca%!6s6ctFq>NqNF73HurXhK-C0ujw=2xesS&040S^(f45K(r#FmIknl8D=(E zO4uqz*}p38#e@-D2FFftIjkSSX2d>%D`5Qyo(4})Q0|f6M0_0e#ZM03ET4jMFlPma z(^cB9in~z!Z#}Y{@F#wSFh>eo5J%N`7)4vi#OUEUt#Elb;-?D8JLGd&f8ROk40Y z>OBFrQ1>1yNJA-ZIo(#;l3XAoZA-40leSio#}e9K6K=Vru8HSmigJ~932jpZz{Q{l zg^OwP(q^M5QoG_f+r9MqNN#P`F?tIW2PIGfa6z*u{%2(&Mk&>p2d)iIvc)0U?G>c}&tk$g+M zHAhE<8T<5QGYyp#tAWHn(1OmT7G=biBb9Txx9Al&2S2qAS2p+HWrDeh@5@~`xr1Mg zg7+lMi=`J#9K83-9jD6(oXrhy-^A>Z&Hd+!bBRCq!OBeekJ!hxC-$-2+~4Z`SkL=$ zB^8{Vf88U3xwAhbXPD-m_ped#o`m_G+`%%@vi-~V9+X69w-0kk%BCQD#&9l0Msl@Z zD{`4~F6c|WHF)fTzrO2%2k-jp3(h9?kNr07vcLV<{0%{N@yD|zE<5?L`RfCBKXRqq zo$G9j3&*+;<=AO|&~zD*6Laad>C5>j+TSwzmY*}jL#xAiG@LX2!PYW97v@?&&&J;i z=i*WnNJJ%dG5z-p`ts_?&(8z3!76Bj7UsW7^3Wd3LpARd-kbVdi5{kJ2D@6EX+p|u2lWwDDjHFM+qF>qLX9@X|xn&98uZA`fdP#5*clpY1q0(Q=p{thbM$$%T zF}a#K!8qJNrzv7QYrtJkkB~Wh9w=q!QSzJOS@{$!BQ80AuH3MU_{Ht97JqR|IWGij za7S@2?#1L~4&V1!PWqFK`xS=ejOhv7Wz4m5b!xd`8FRD4JrxfxvqE{jIaXdWcgcyu zA`6#UN@V8^Pyo@N+=C=kfnW*G1=EcFf(9#1C~#gvX5gFijW4NECz47s1}NSN06 zONn2;b2t`jI^-ty)A-4$L#rsM3ev^FwMY0_ODWzP%Xv80$^Gy$_bufoxLE1ta`aDU zsk@PS5&t^sQ|3HRONBI5h^K4mNeK#-64Kkg9-_3H*w4y87rQ?Y-=o;0CEq|U=jj}~ zif_xeWUR{+2eF)Fm^XydkUI1fUr70R6o1|-+Du7>^rZBqkY=17g|4jNTW7_;brfS~ zZ0>qCy*G6pFT0(#c{ZhKbGDzBk7~{q3f9lr8|WJ{XP-mglQ~;zRp#s>F0d}UBmbeo zd@W~<;yy!o7Di+KNasms2y=4vQ}A8$^w z18&}5v&Q)w)Kh+ZZZj%s3+iPHJ6Is|n!@t33< z?V_r8Lx;V)3JR&|UTpVrwc)fj3%4%FT?nO=J9r_-hZbFQkZc{is0bpc=%Sxc>p!`u z=-*FR3>FBNMBbA#vtNT_1 zx6B66`{_FaU97o%=t^zv6>vAz^r1ghe}{m(rdG_IYVKBZkD7ZUruXqreMo&vqww)r zykR^|{8zy)|JS&;>^McGw{+{0TC+(L;{b;0((%iMi-B!9oM{k9kRBxH& zuzK3frd#I7dG(^#SHp?*X!&*2ab|ssG}k&g^O}RvZkorb*Qj6C-!V^)rC(07ZR9w5 za3{DE+zsvq_kerAz2M#mhW=r=@I8wsj2Qwp4)Zh_&Yev{*=7*Ioe`cE|z&tw+dk*E&zk4mEq#98z;k z&1}T>E9v-A6po+e#U>(65vzgQ)bDuL|YatLt*~H{GJsng-q%KdQ%X%`la!W zHgf{G4`X3OlFm{4GU6aZwVN$waX3C*7FEt|18J9Fza>)mO3uw^3_>itZC}bgcIcKM zxaF}d+zkZv6>`2l=YqKbS@9g&_g@bjasx0#8KY2J?Ww?XV&NSlxt?-=L_eCZas@fe zoYG+O?GOC64Q48%7l(9lXLs)4r^C%#`1WG@))R!_NXV^CuFY9+^{4yxa7{6@?#F`{03@ER|?J1&e(Cz0;u0kn;< zjO0^?a`7i26RC_ukGR4^jStEN8nrT*c>4o6SBO$SFFdFJTu~7mltSRd(|oj=V2bdA zl_dCqLkMXH^UpMgX3NLD!g`Cx5-*@BXqOS&&yc0z6WH-Cw~^c zUTCiLfXSSD=!5z_n3<7Q?jL0zD9iIVBM<2UljGDTcYVR~WcN@ZO6>tjcniV=dXU zo_@5KyP@MFy=A;1v5li5v1OAG#btX(MWl<4Amfp3A7ucQT|&&wwu4m8 zvv-|LgPp=SXN>KXW9?l#vtN4|Y*hyC_F{a{L1cJu*dCK-74(V8p-dM=>;pX0n)hXDkZbvb6=xpWtRO3>=Vf=>Y!1|fZo}84Vr8Py_ z%!T`dZ>y%R10UTqsxFQk_vdSw4<7_E{B}7cwf)B&G=M3e& z^)(7@%RMwzZo?oZjkknJ-*bvMV`51C_3Nmr%d z%Q=?+Qb?!s=^5uK%UxC?BFYvP|J0xO%Ra`$6OvhvM}}pRoXz=c`fBpmlx{)bFja6G zDiL{Hh(N9pq31j<0;r$zo2SCis6?7hdxmrhLP5FDR^#xiEc0O+R1v*jU707$ z?!v0d{A8sitEowuQ|0OniI2`?izrcD79Tn5Kz9EhZfBLpChhP^RgimY++hUHo zei=Tpzn1G%q(XBKf4&s87dho6_wYaH;zJfw374})hqxx8er&BF&aAT~hP;<`wu+d> zVM~cwmRTYVmk?D2ufozHEF6-OeV{T{gt8=L5y4U+Eaa45AcW4DYSn7x0#WKjtChXJ zbOWncNNDY_TCb2l+F`X?mDsgPReIR!REX!PR->2;b@$K*{p-G+6Zte$vW3=4h4!6F zAKPQ8;G|K;kA;+R*o#v!f;jBS)Au1!vh~S1HhfBbF*)mq3bwOR2B>CK7ZtWju##~| z)F~fmCZ=_+>g!v@Lc?+>h}`nx8e`) z!4qlX;H7&ODjxFW*gSPaiLeTM;I4%PQRp;K8^bzM zJo!qM*nU!v4Z;;Ns0Q2AG{@bURQZhL{fWez$NGG#r2bgrn|c4#ZnHD>eQMXw@$Nq} z^*vMHVVkP@TrinTrIMS2$C8U**53ZY#cc4)CeIv!&=_cu4SkD$$vHXyGW#qJ0Qv~r zo%L91MzCzdvVk>XF585yHH&Se4BJ+0?mN7w7DRk8jkn6lU@~1%k**`U(yGc_X=)Dp zBroo{@4lWIE{A*h$G`Hu`^tWL=)UiL@h`Td;IgG(mO{ldo2a>yQ#W6nVjujq=hJIIm12o5~fx3XbQkI8l+pS@(6E&xc8u+N17u53|+x zS99>Fc|bkRpM)Fwz#M{ZIHVrWBOBSV?Ppi4%PpHzO$H~`TQl`-PPW_1vY605lje@) zv?>U47juXZ#amilBsqodb}viM4-O<3Uwq@|zccjH`@Z*;n_s!SY)P)JqJ(GnG&WN7 zE#Inhli6Q(R-{>Yxfe7Bx!L~=L$|v^_F%XxISpq$jI<5vdM~bRxc*#S@2L!ub;xU) zALigr?{zV&^?KIrb!@$E_%YtRmvsjk%L2EGYN~@lxS7LECGsq6Irv*ksM?p{{k9S} z@zFPY<3O%FOid2aEoXLpl>q-J%tiw22vXIJucn+$E(ZSc=lVbU$vyMrmC`(9=7yg6=JH# z9{m0naird+2g+4{QMTM^=Uap4Yh@E&HuZ-GWOLqR*-P%4EJxe*V5)lg>%Vy*mqwER zJ4TcxE6!NAZds=Iu2=`1I@&%3_X|Y0{BQZu+g;8mwYT8xBy(Mjt2UcT`VJY!Ffa6`Ij=P z7oL8c5$_)#NxI4Z{n^jxdJNHpXP+o>Dhi=MrVF`g5nfemhx}hvM zShr;5l0u?+Qu6>$F6KZ*Ng?hHhp5;CjRg;>{M=Bg;Nj;tj%2hqPN>_ly5~d1ZsI>A z-5l5`U(G@ZF!5|f$LLV@!Q1AQrkE4Avi}KsfN5=Ow#rR@z3cMT$tBswYRCzEm^PN_ zqgoo|fp5I3PU{WdEAVZdq@HxD*MPU;wc#-)K_v&&>-l)q?4dq{V$d)BY7Snh7vps+ zURp{I%weic{UKF+1zsB-gHsOqFqx`bvZ827Ztbs-xh>;C4Fm^=fX-R*=KE>uBpJWd zi_`3VIgoB_qJEaY@}r-JL-wN1RNRmZs(g6RG+Y%jQho*1#-_2r%^uxHd9* z(@NaO;m(PSHkW!Oz8@-y`?@u7oY%)Z(Y2`P>8n(k^tW? zRYNiqd^yds;$PwZ|0y*V^LFd;?Pq_x_~t%QS1H5+wdV#9V}FnuSb}6!9zDv9#oBI* z0~EnHH;B6!+=n38KCZne9ZcX`@g*Su#8Y}w8s76ju$d2hlh&?&f3AM1-2__$%U*(c zuf~V?#s{Dv!&kFz;8MIEUc?zE;V1C>XZ-#-C4SbQiy?%*%ggRkRLw}}C*kDg!@3wCaUHO(50|%zgs;oaMx4ZD}_wW9jfEd#`QQaQ>yiK^w5fK zNN%2H-Gg(`8?3mMsBh(Ey56GTQ1y#%`ttYgEB|TkXF>?xS^-ri>w$@?d5an=GR0-F zk)I}WJtZ?-2T6F77B?12{m!#JetasTI!Q-!43zE@*cV~{EcQ>M4xM_B43Xc*^$)me z?!ndgFs^o78xGQNrI{RDj;nQ&;V307t!e|hT$92*YFpz#A-7vrkAA6Mg}RMw-7QUL!*ACoA5kV3)pQXC&3;NPAe zxW-bR%BcQ695NV6^L7_g3O)r`-p_k`nXFw8PyUXnddVRypMiL;`!9OO%QjF2pQkDQ zrjDum0tSi~Z4BJs<8em?k5c#Z`p@eK-S|6_Gr63Iq#S-MF@BPW`sYbIp&qLrY?9HF zmS6GzHOrt$yI9%6PzhcJ-fHeEPz|m49Jh2Az)$t%8E=W>rUp~$|qUX~1KvRA{$KKR&w{`99m`!zEK3kn|o z37PuurA3vGRn;sxyvfRewhVlB31CF>^EZ$4{9MJD|@Zp?f*z6J=_D!BvwBt`Uq*T@2*TIjoN`(^`f zU=GUDu1A!n(cV?v>3-3jMmtwksJm-%xIr~X)Erkc7csq$f9gZ(TN(u!AU=!Sf60H< zl3)q4hT{6*|1TyKb&*bmvUVn)%#C5!=Zj}1zM8mB9QRz~B{`UQ|Rgu4Q zt~A4D4!dTct=*+M{GF=2-!5wV=wYe$e%Cw>_&~!-!0l)dbGX4ZqcqhhW`~-+YC`Sf zGp1%XVtOC{)Q9wM5rdB{j9EX!@WwYS0Sr{6W+kd)a!j`-(-KXSuO$mKbIDMcKh*mz z$F%RLx?3jo7hbWsjphDm&vRvp9@r*#L91 z`VnzN?c-|ZBBuB8Pkl(X`Hg@{J$QQN})c4-CZH)_rAYL*nB%c#>_rzq9CcA4eSWD{i~*Ci(UhN4~McBnZl zD)+8cbdFqyn!RccsX3-*Hez}o|I~-{ZxI7=5}S|NKI6Y>3Gk_5q9bLNOxl_x+Oj~) zk_=h)$Z95)W0XHLIONr(CCjppK-xd;P7Yq8Q>=*3403M>4YVo3mn+f!!V=iFz9>1| z!&L*@nC^%{^kwNokTTo$nPx0ay`NJ+2fXquj}J6)OsJlVs@k>P(8q0~1^wGW__%s- zq-x`iu%NSxfmMlj9NJp1bX8XlmtG^Bcj@KA`H*_$u)2uHUr4O3!I-NXmxZJ&9%#a8 z(ZFQxCpq?stQ&2^WuMQv9!S7^+S~w{v~*Kwlt4aHZX2hc9;bs~i(VZ3F25C$15?-l zSJDT4)X`hk2fehZv!ahpk(+L*1YBoT-nY2OrFMukL#$r81r9G~B4jw$+oIsfv3J2M=wp}rKlH9A?A-q0 zmGiL=Vb^=1u#aKa+oG^%r`V%m^!6xwHyURLYj#z(=iPi7;6Z7+3h4|}e)5mM4!#@w zE>G-kR1&xp4QQ#La-<4Wj&A6!?VKeG)aG5fK&{=S3skPRVcFQO3)GhVx>r5eCpah;6{aJ*C_e3NzJOA^i4*7Em{W&_0 zh4itkbrT;74*7E~pn&>hXD<|x?B<06l0Cc#WOiOt58)$wch|7dSAszFuw8eJ4+zD> zHr>_i{vO!iUuMUGr@U1GAZJrkt{w?oZg8J}J2T1Fu%h zl}(V8Q#*S`Q)n;16Da2BE;s>lwwauDArhG~He|6h7I6Kd@W2vUKu)K?yBUYOeF_{3*8hdNW$GChGKj1pGR#_~W+ zV9XAPU*mGXtW^F6986v3BaN}uKj#H0QvjmaSOpx&pd19y_zGH#!QDq5A{PgfLgb;? zl_$K>j)UD<#7Q9`0nUaKp32SiAt7EP&t#ufNRR8*T{)0AB+JniY~EFlho{b~6{CcQZ9j_mk~q; zUIg{S*p;$QLsg?1pcFUu4(v*aWADYT6gu`H>`KLBAB)(tkuYKp-<2?7obqn?Es0ap z;J;;wBS9o0pKeKAK2JX3VUA0ErV0guRFW)*#Z~SLBrHrykJ2iXHBx#?vrrk7y%ct# zx~Ltgj6#i4f3=-*B6FeI5hO~LvaL>;-7?tI613i{;_ZhEfVF|pz@_bE0xtE=uN0Uo zPK6a6VsotKcr>x^Y=ZO&(5*M$%4l z>=T+boc4Xmd37XpQZi)J(ym2EIpnjZC0vuwIaI@F4nujvO}Es@8jF#(le649 z8EHE>!L5Ulc55#uxb<#jq`ip~+HPW`t-qsD7F3L|*DPS+1?~iQB2=%cdA5Bx5d@Eo zWwT>L^m*C3Cqsr%fw$url%V}xaEkP6J3-iL|gstJmi*`NYa04}*V(kV}V(+QN z&f_APb=pR2IXjwH3#fDA5!1a zXpq(tF`ZRDhH?W5KudunA+nWJ8tDWl>Pd_di3{L|P*giB#oVpt9yRwyOz-2L?yTs8 zQoN>I*Aomvcarsh5abM9)<(q`Nnkg@ zSk(?UoKdW{vz9YoAj<1RDW!IoYQ=P_I!wDL!m$2PeVDFBG?iKJ2)G^d#T=f`0sO9Y zftVd?_NqCg=9rq(Cdq21`MHu?j82Ze$+kQ0Wtwc+FW|b8E|bVGvde{=1M*_A!V73RAmF;wVh*Y~qUN}oxzL2R-^3h=Hp9MctlMQ*-2ga$*RUte5Zipna1Q?wA`_ z6Q%|BK{dNKi|)dKCIQ#4$~mLxM{pn`>Jcac43K5FZ`*l+syRTO!fg}UR0RmPY(i}W zvJ?snq7?c{C{oBP=u!A-LX1LPL5ixmQ_bCH5*CGxKEBa+9-@X!aO1HOrz^N91sw0e(yquFsw7?mtfZjl(A&2n5b7X^ytyEwMK<%+2wDk&H z5$HbR(NzmB=)YM{$6ES*w&~>l_$U?SUCa$~@pJ2D)AXaq)>Vs|UG&&GIjuEzY@MET z7d^I)^LbhO2>WXhDCge!lgpMUGDO*NbxXu1r{MY1(3XLECY~Klw@lVaaweWXkPcb) z4t42KY$Dk%6-}~M2yf*|>0x>KBk0tXKY~tO`6KAml|O<`U0GsL9@#Xmc*uAx@h`-` z9!VK_h@?86BQ(I{8IG67VZ{|M&3H+pz80^D!>a1A%A8u;Q<}r$U7j4=cI0*yPM5My zW+FXI%Yg~mD>*cAc`}Kf9~?CH+Cth43@N7AX4*@wvgcZ)rO;H{_phRnC?A%qn}Tn| z*MOl!UD#MG711hZ)`*Sc*G3wf@X|zMP;?xptUu*`$mr^`33p-XDMu&S!jrVf-9x(YR24tDkw{jaqTsif znNn7sa(3n-?7HyO!FQp${P4?a)vr9!5;@SsvQ`(LY$)r7j8;xol$^$Y9Cr@PMNrvc zk#OOA#$4Coo!BA3bjXK7Gd>s8lco=nNz)9qWE?H(`KZ`fMQ? zK2nZ8JE=}_j;rg1^Qv5PP`T}(jv^5Z{ljp|S?77kxz(}jloE!H1QW{c5`|u2cPS^C zZtV4U+m(~ti2xKD6-J4Wg=tO(q*mp{;QD5!kF12Ely6Dls)KB+-?1t@_>78dX79Wz#lyc+^dt<=?a&c!qyv5 zhGUNocB5@N*!3&J@j#QZ1-sQ8RC7elaW!)h)BE_RJ|u6!Oq3`XJc$oxqC^fekuUkL z+SYxTiL#O3w)GeG`NtHWGG&j%wr9mo3wS2%^?#f_{wE`^YhdEdMoro6RCBkQd(_+; zF};s}>O<;Vs@x2_6-{Tlil{w%9cZr)jZT~>N1LiNt4C3s4)v(nai7<%&TyOQOhTrX z2prxH;qba%HHXw3Q!^Vey^nwDL;AN+BZMuCN+G7I7sAdE?yy7g5H^KqA$pZWnC7S_ zvc*Sq72y|)<|4HzdW_VdXf=jPj-k>cDb0&FGi7%L<*c?amg_?=&{X+EbmBGqRFTj$ z{~QX2q7cY_OPB>vVj|MoGr6VZ@7CF(>p7(`I! zdet0Kb4<-_#PmM?sSoMjLYE4;EqYa6#|k=M6t2AX6?2cMVtKtRwi2PEWeQs`LPUMb zl(}SGg=$x*=@n{zi5^&{EIaK41>Kz&Po2C8{%EP{ikmg@keDIK8Iqt+d(yQ0k^lzL zZiLahS-I>1_kerBy%7xk!*D9R=D7*8L-95%8x?r7vM~`jD;pJx3o}@R1dmprI#C$0eRJi~u z7Cmx}GuKvOl6Sdpiww&(=~WK)Ue9O=+%tdk)*RL8NaJ3_&E5yCmc;dVmq8SsO@C|k z@jA|Xx_AoTK0J+xHl7ikXR**+vt(tl2EIJGs@=5~k_^SV&UG;5k?XXthsZ0JRSA|} zlwZ3xpkqqIUOjsk1N9U$7et{3bDhrkYS3~U9ngdgTT!5!e( z21yK-AtLVLOTFub2*lFCr`t(OD{1N^ZNqDY*NkNcoD9!@CJ(D8;Aq(HI}Ts!nj>xA zIMy(oTR0|xBjoeC!*r7N*|hqC6c}2ovsxN?ehCE?NzuS*xgOp1FxsZO9ykF7HL(LtvhBfjt2wCVh??VS<|3x|@lSn7-m)m5(1{NUT_X2i z@?V8amn2w%*q$%R3sdV;pDFb>&J)$HX89gm@h zHkl*e8xg+@;YfoT;(7mS?DDCNpWbiyprQHyt&c15w_!2!I3EY4 z@*xYi!@}+G;SxLM`*?P=7;Z2;-|$6-ml?j^aJ%838Qy5P)9^OK9>Xsge#7u?!=D=d z!tj7$&f|xro=E?P>kXR>*BWjyyvXq7hL;<@+3xvw7{12vO@{9O>AuQ%Lo_-BSU8tyc_&9KMtONQStyxZ`nhQBa8V3_mx z(Q?Cj!zRPEhFc6TGJLt=<%VxIyx#DAhBq62>i=)=4q+3x;s6e36^IH1q5^@aKp+qZ z1fl{_fj}TC5C{YUfk0Fs5Qqwrv5jqPV;f5lhzbOv0zno80#SiLR5S|$fk0GLAjsJ6 z6LT}0yG!1E{^h6c{d12K&bZ*3Tkd$|De%h(V@xo`Eb}a~%o>|)v&#X;oN~?;H+<)T zpMkwAMj2<48Q!tL2Ugi&i%;xx#Am*6$ydH{&kvphzq;lPZ<%I}_bjo(Iv?3#k3&v4 z12hV|* zt5E-XzWDxzw@fp~dzM&XosaCW#~~-2altjW-0{d$;2^>n6HGD7Jc}%|#wOeBa=E^My;k@{N0b@ErK_HE(#!G;_RXi51rQ$PRlPa>5xGTyx7Ek30qb z5@C!9rkG`(MV47(lWlf6;Fwd+x#EWJJn%E{*DFRDXObD-vA_pb*~q9tzHrG` zzH!eFo&!hMyx}d=%<-NjR#@jFJM3}D31?hz%`JC4@)Y=6gfS+VVwQOpS!Rt*w%O%? zV@^5eikrW^ye^*v|GHEvT;U#s4TKGZ4TKGZ4TKGZ4TKGZ4TKGZ4TKGZ4TKGZ4TKGZ s4TKGZ4TKH+w+&qWKy?}U4A=j>2bWRH-~Tac`N!q3Jn9VKUq>zf1c49XJ^%m! literal 0 HcmV?d00001