From e6f824aedd34ee413a3e16eef1db8f7c43d3d436 Mon Sep 17 00:00:00 2001
From: DuckieTM
* Call this when a time-based wired trigger is placed in a room or when * a room is loaded. *
- * + * * @param room the room the item is in * @param tickable the tickable item (e.g., WiredTriggerRepeater) */ public static void registerTickable(Room room, WiredTickable tickable) { WiredTickService.getInstance().register(room, tickable); } - + /** * Unregisters a tickable wired item from the tick service. ** Call this when a time-based wired trigger is picked up or when * a room is unloaded. *
- * + * * @param room the room the item was in * @param tickable the tickable item */ public static void unregisterTickable(Room room, WiredTickable tickable) { WiredTickService.getInstance().unregister(room, tickable); } - + /** * Unregisters all tickables for a room. ** Call this when a room is unloaded to clean up all tick registrations. *
- * + * * @param room the room */ public static void unregisterRoomTickables(Room room) { WiredTickService.getInstance().unregisterRoom(room); + if (engine != null && room != null) { + engine.clearRoomExecutionCaches(room.getId()); + } } - + /** * Gets the tick service instance. - * + * * @return the WiredTickService */ public static WiredTickService getTickService() { @@ -771,7 +807,7 @@ public final class WiredManager { ** This uses the new tick service for managing timer resets. *
- * + * * @param room the room */ public static void resetTimers(Room room) { @@ -804,9 +840,9 @@ public final class WiredManager { if (item instanceof InteractionWiredEffect && !(item instanceof WiredEffectTriggerStacks)) { InteractionWiredEffect effect = (InteractionWiredEffect) item; WiredEvent event = WiredEvent.builder(WiredEvent.Type.CUSTOM, room) - .actor(roomUnit) - .callStackDepth(callStackDepth) - .build(); + .actor(roomUnit) + .callStackDepth(callStackDepth) + .build(); WiredContext ctx = new WiredContext(event, effect, DefaultWiredServices.getInstance(), new WiredState(100)); effect.execute(ctx); effect.setCooldown(millis); @@ -823,12 +859,12 @@ public final class WiredManager { /** * Asynchronously drops/deletes all rewards given by a specific wired item. * Used when a wired reward box is picked up or reset. - * + * * @param wiredId The ID of the wired item whose rewards should be deleted */ public static void dropRewards(int wiredId) { Emulator.getThreading().run(() -> { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM wired_rewards_given WHERE wired_item = ?")) { statement.setInt(1, wiredId); statement.execute(); @@ -1066,4 +1102,3 @@ public final class WiredManager { return false; } } - diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/wired/tick/WiredTickService.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/wired/tick/WiredTickService.java index 144f73d7..070718dd 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/wired/tick/WiredTickService.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/wired/tick/WiredTickService.java @@ -9,133 +9,110 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; /** * Centralized tick service for all wired timing operations. - *- * This service runs a single 50ms tick loop that processes all registered - * {@link WiredTickable} items across all rooms. This replaces the old - * per-room 500ms cycle approach and provides: - *
- * - *- * WiredTickService (singleton) - * └── ScheduledExecutorService (50ms tick) - * └── For each room with tickables: - * └── For each WiredTickable: - * └── onWiredTick(room, currentTime) - *- * - *
This version keeps a single global tick clock, but distributes room processing + * across multiple single-threaded shard workers. A room is always processed on the + * same shard, preserving in-room order while preventing one heavy room from delaying + * all other rooms.
*/ public final class WiredTickService { - + private static final Logger LOGGER = LoggerFactory.getLogger(WiredTickService.class); - - /** Default tick interval in milliseconds */ + public static final int DEFAULT_TICK_INTERVAL_MS = 50; - - /** Minimum allowed tick interval (prevents CPU overload) */ public static final int MIN_TICK_INTERVAL_MS = 10; - - /** Maximum allowed tick interval */ public static final int MAX_TICK_INTERVAL_MS = 500; - - /** Singleton instance */ + + public static final int DEFAULT_WORKER_COUNT = Math.max(2, Math.min(8, Runtime.getRuntime().availableProcessors())); + public static final int MIN_WORKER_COUNT = 1; + public static final int MAX_WORKER_COUNT = 32; + + public static final long SLOW_TICKABLE_THRESHOLD_MS = 100L; + public static final long SLOW_ROOM_THRESHOLD_MS = 50L; + public static final long SLOW_SHARD_THRESHOLD_MS = 250L; + private static volatile WiredTickService instance; - - /** The configured tick interval in milliseconds */ + private int tickIntervalMs = DEFAULT_TICK_INTERVAL_MS; - - /** Whether debug logging is enabled */ private boolean debugEnabled = false; - - /** Thread priority for the tick service */ private int threadPriority = Thread.NORM_PRIORITY + 1; - - /** - * Global tick counter - increments every tick. - * All repeaters use this to stay synchronized. - * Repeaters fire when (tickCount * tickIntervalMs) % repeatTime == 0 - */ - private volatile long tickCount = 0; - - /** The scheduled executor for the tick loop */ - private ScheduledExecutorService scheduler; - - /** The scheduled future for the tick task */ - private ScheduledFuture> tickTask; - - /** Map of room ID to set of registered tickables */ + private int workerCount = DEFAULT_WORKER_COUNT; + + /** Global logical tick counter shared by every shard. */ + private final AtomicLong tickCount = new AtomicLong(0); + + /** Schedules the global logical ticks. */ + private ScheduledExecutorService coordinator; + + /** One single-thread executor per shard, preserving order inside the shard. */ + private ExecutorService[] shardExecutors; + + /** Highest logical tick requested for each shard. */ + private AtomicLong[] shardRequestedTicks; + + /** Last logical tick fully processed by each shard. */ + private AtomicLong[] shardProcessedTicks; + + /** Whether a shard worker loop is currently scheduled/running. */ + private AtomicBoolean[] shardScheduled; + private final ConcurrentHashMap- * Should be called during emulator startup after WiredManager.initialize(). - *
- */ + public synchronized void start() { if (running.get()) { LOGGER.warn("WiredTickService already running"); return; } - - // Load configuration from emulator settings + loadConfiguration(); - - LOGGER.info("Starting WiredTickService with {}ms tick interval (debug={}, priority={})...", - tickIntervalMs, debugEnabled, threadPriority); - - this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> { - Thread t = new Thread(r, "WiredTickService"); + + LOGGER.info( + "Starting WiredTickService with {}ms tick interval (workers={}, debug={}, priority={})...", + tickIntervalMs, + workerCount, + debugEnabled, + threadPriority + ); + + this.coordinator = Executors.newSingleThreadScheduledExecutor(r -> { + Thread t = new Thread(r, "WiredTickCoordinator"); t.setDaemon(true); t.setPriority(threadPriority); return t; }); - - this.tickTask = scheduler.scheduleAtFixedRate( - this::tick, - tickIntervalMs, - tickIntervalMs, - TimeUnit.MILLISECONDS - ); - + + this.shardExecutors = new ExecutorService[workerCount]; + this.shardRequestedTicks = new AtomicLong[workerCount]; + this.shardProcessedTicks = new AtomicLong[workerCount]; + this.shardScheduled = new AtomicBoolean[workerCount]; + + for (int i = 0; i < workerCount; i++) { + final int shardIndex = i; + this.shardExecutors[i] = Executors.newSingleThreadExecutor(r -> { + Thread t = new Thread(r, "WiredTickShard-" + shardIndex); + t.setDaemon(true); + t.setPriority(threadPriority); + return t; + }); + this.shardRequestedTicks[i] = new AtomicLong(0L); + this.shardProcessedTicks[i] = new AtomicLong(0L); + this.shardScheduled[i] = new AtomicBoolean(false); + } + + this.tickCount.set(0L); running.set(true); + + this.coordinator.scheduleAtFixedRate( + () -> { + try { + dispatchTick(); + } catch (Throwable t) { + LOGGER.error("WiredTickService fatal coordinator error", t); + } + }, + tickIntervalMs, + tickIntervalMs, + TimeUnit.MILLISECONDS + ); + LOGGER.info("WiredTickService started successfully"); } - - /** - * Stops the tick service. - *- * Should be called during emulator shutdown. - *
- */ + public synchronized void stop() { if (!running.get()) { return; } - + LOGGER.info("Stopping WiredTickService..."); - running.set(false); - - if (tickTask != null) { - tickTask.cancel(false); - tickTask = null; - } - - if (scheduler != null) { - scheduler.shutdown(); + + if (coordinator != null) { + coordinator.shutdown(); try { - if (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) { - scheduler.shutdownNow(); + if (!coordinator.awaitTermination(5, TimeUnit.SECONDS)) { + coordinator.shutdownNow(); } } catch (InterruptedException e) { - scheduler.shutdownNow(); + coordinator.shutdownNow(); Thread.currentThread().interrupt(); } - scheduler = null; + coordinator = null; } - + + if (shardExecutors != null) { + for (ExecutorService executor : shardExecutors) { + if (executor != null) { + executor.shutdown(); + } + } + + for (ExecutorService executor : shardExecutors) { + if (executor == null) { + continue; + } + try { + if (!executor.awaitTermination(5, TimeUnit.SECONDS)) { + executor.shutdownNow(); + } + } catch (InterruptedException e) { + executor.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + shardExecutors = null; + shardRequestedTicks = null; + shardProcessedTicks = null; + shardScheduled = null; + roomTickables.clear(); LOGGER.info("WiredTickService stopped"); } - - /** - * Checks if the service is running. - * - * @return true if running - */ + public boolean isRunning() { return running.get(); } - - /** - * Registers a tickable item with the service. - *- * The item will start receiving {@link WiredTickable#onWiredTick} calls - * on the next tick cycle. - *
- * - * @param room the room the item is in - * @param tickable the tickable item - */ + public void register(Room room, WiredTickable tickable) { if (room == null || tickable == null) { return; } - + int roomId = room.getId(); - Set- * Should be called when a room is unloaded. - *
- * - * @param room the room - */ + public void unregisterRoom(Room room) { if (room == null) { return; } - + Set- * Called at the configured interval by the scheduler. Processes all registered tickables - * across all rooms. - *
- */ - private void tick() { + + public long getTickCount() { + return tickCount.get(); + } + + private void dispatchTick() { if (!running.get() || Emulator.isShuttingDown) { return; } - - // Increment global tick counter - tickCount++; - - long startTime = System.currentTimeMillis(); - int tickablesProcessed = 0; - + + long currentTick = tickCount.incrementAndGet(); + + for (int shardIndex = 0; shardIndex < workerCount; shardIndex++) { + shardRequestedTicks[shardIndex].set(currentTick); + scheduleShardIfNeeded(shardIndex); + } + } + + private void scheduleShardIfNeeded(int shardIndex) { + if (!running.get() || shardExecutors == null) { + return; + } + + if (shardScheduled[shardIndex].compareAndSet(false, true)) { + shardExecutors[shardIndex].execute(() -> runShardLoop(shardIndex)); + } + } + + private void runShardLoop(int shardIndex) { + try { + while (running.get() && !Emulator.isShuttingDown) { + long nextTick = shardProcessedTicks[shardIndex].get() + 1L; + long requestedTick = shardRequestedTicks[shardIndex].get(); + + if (nextTick > requestedTick) { + break; + } + + processShardTick(shardIndex, nextTick); + shardProcessedTicks[shardIndex].set(nextTick); + } + } catch (Throwable t) { + LOGGER.error("Fatal error in WiredTick shard {}", shardIndex, t); + } finally { + shardScheduled[shardIndex].set(false); + if (running.get() && shardProcessedTicks[shardIndex].get() < shardRequestedTicks[shardIndex].get()) { + scheduleShardIfNeeded(shardIndex); + } + } + } + + private void processShardTick(int shardIndex, long currentTick) { + long shardStart = System.currentTimeMillis(); + int processedTickables = 0; + int processedRooms = 0; + for (Map.EntryWv2vM#R21I z9^r1I*E>8zu^A{y{rv@W^8)vV_umJ}{75cGDc*hh8w&|!As6%go~@0`pd3O9 `%NE9xSd9)S6?uNHUx&IdcUWN*m+>@YRWTV9xc z@v|eUv#9H8+V|p$^@VYt8GZHqrSufF_fM&wpY)<;(Z>Q{?4 ky~AiV5(83#&uomRPrKtzP2HkB)>_dHlNDo%as zeTP8j;)2|ew1#br?i*%ihrLaKDo3YKJ2gRkfd?;J2hLwO1mVnIO P@R{-l9)6RhT3$nDJ1@#(=+{a-2ixMi>BkrF>>h4TCRZSfi zID~75#aBEsr}qbbt4}GJ!YbwCbvf|r o+|yO+aDMQF-Z`^V(0-xfATK(bJ{3{qb`kL(ZF zo+GBf^$u(TE8OqjctbU9=%HN6!}F^Hf7+DJfVtn;OsYV>QZr?e1JAx-g?+;8Yh`A$ zVx!&z`si?n)kg|9tKq-SKTs0N1c-ld4DDmw2+*n+ou)l?TucjpMNPQeHt@~dBLUG% zg?x%6vcH5mglnJp-HUyZU z@(r`ti+){=@hS&H_1#JQ4U*N3kBA!|CAS{sB<_XcA>Z$>!QT)jUt^E#r)H=#eEnEv z-omgl+U*o<9QWP1*{?#=m{R8`7wyHI^i01<*qASG)At3rjV^h)0cNz*kH*FF^{D2+ zjgEhj@d7)>2g>*_GNS9b62)!n!4&nWDb%<%hj|fr$Y`RCZBOMtLl&!hsYJ6T?O#*8 zMr=Diac|kYes(}b&X> ikyQQ(I6f=iVeRwJ>-V!FjI cDQMu)IUOm+wA{j5~Aa^~z_;W+yO*t57)CeJyP8 zXE+yLBDj+VWtL<>xlK(i*DU`{Cxg?@GY@hz+KgRQ59~lAm*N^!OG1mniUC2dn3n8n zqN`c&4VgA`2}KJc%_*!6qb1HDP2o4qyG$NwZYhWkaTFT<+kS2O6UED0!(Q(y3*6rq zc|{%+if_BYif_nQ8S{p>I~p~QO58^ycieu6tb*yGh5p+O7nDCt+AM+;*YqKdT^Vw# zPE?Ym#M4)Ee5$41Udpcdk#lx?`d?@1_jF$9nW@B;tzNXi#72Claq@bhI%_4=6<>Et z_Tnx)FHs~5J{8-~`(I?i(#-Xs(>0bNP~nJajHe&W!=10tDSFm=1#hyoRk{|KatYpg zQGl@?N6yLdpll0hU6x1IMMag$HxnW3Yh9wMDdhFoZE9bV5?K!>?|F=wJ+!YVna8mt zdf8&(rYnt Zc6vnH>xe~Y|gFD4_s4e=BxFA+crBTT;=^s zwAPDUi4G6dI8$U6Wf+ 8<$BQEgcDoB*KhArY&+@$SLedc+MR4($>8{xW6XiG zdht-8b>sVA2xVzd^rKm{ibNiL4vhS5kPtuZq&t3^^g=N$ZX;Kd$|~iB9d=$H2{xYB z(Rz>Mvx Z-ATDmNIR`+9SFOLxqGsg&X;toV}eu3GSok1I|_pk z$)3E9O7K1?5$H>5iZAICK`PdL0)kW(y9m#Z()jk5Y<-@wVhcmClf})p8!?Nd)p_~R zrpNmISFSkv)cOwzqaj<{L$ 3 zqy3m4WYwG@V?1M0Udjn?_r{5_KF!)dWu)My+DRXwSKV6Bc?i*h4Q`%QGodIROWhAL zdWmS!b8`LOp?@nZYdG78R(uUK-Io{P`;dn`*TJ_C=?U7Y$&xG^F%uRE;(IVN$_$bR zraDR3&J*77Jq2FDS5}RRm?aGZb#tJB2LuJBkG?xZk}8Q0oN9G$=D9HMVnJVyOQv&N znz%s2>#2)^O3Y=-5M8^JGJA`wbiu(dY&0*$I>sly5$S$D(R65IeIT9B_JtEGRIVLU z&3k2SC?wt8>uW4$+h-v@4=yV3PV!YHd%_iE(iL|_+7f-&GCdB%6C7%~f_x>Z=w}Kw z0RgLvVQ2Tze)J=z)f3LfX>wB0auG|XqYn_O>8li3i;?m~4brovv)Ik(@hWkn8^ )9jiv!I4|suU>5NKMnReeBAaeKH!sUhiY@@ z`rHa$*F (dc> jY(VKS^-T0Jxmb_%>*JH*$gN}K!-AfejPH+297ycC zh-+l!y@ore27Bp0g!W&)+MnnSswuFt4*Rrb^>F)Ta9ax2hjZ>d!N(lx;6$uNNer>i zd`sICQpRCDG$H9YCxHeQ3``S>E0Vsl8DIq)?Uu7=fJ(9>#OY1NJKkA{BbGR z(zD*qA`|Ne@}=gH&aoKh(+IE#&+msf%&BM0^+QL!9LE*l?HNyfp{?Zg!Tlur1@qyE zc5;#5RZ{OG4idn?7pnN*+P}wpSl7lPR DMAxf7F&e4nkkpKdCQ6Q}B0KnhOnQ+tJPu9h{R*D#uVvCV!fPT?WE$` YbkK=73@j33}kVdV2z3OC?vL(1h!2RLmcUl==X|Eo|_Xl zu3Ja48s{P)o*(V)S01n_CZg4_R+u-MNnBCHR2j7jR>T$qK33t62tLfJ{;#CSinLGo zc4x#miz_}v;(jniFChe1;rbWpJ@JdCdt8L`Qk4(%_N@|@YlfI;o}$QD@W)?IjcUjn zj&jNG_Z7DCcF+ySgrbkf^p-tk$CypiMn_od?CUD$TJ-%+V)+>fEM!4oS(B+lksggj zdrI#zL?D8vNoyRCG5G4MRTo%2c|#$C(>$MX!`7J9eA?6q^Nh{0@rx>GyjW+P=u=Bm z!~$uqZ$Q--9Oj)2tWi?bYRn?BacTvdQseU>< OR;yppy!vH*d9`2SQ=#mw z&+6AMKiH>~)(_$ff?Ji;T{D&niaF&RGbZ>-jn*eQuKPo+kmcsHVhP4s`^F;YROAD& zDNOiN(m8&G>vyRl_Cp w zL=;EgmL6nL91a%e>1PQMWJ9oziq2z6$30io-%bQK?|)JU9)F3GE6freT(mQh=GwXh z@9MA*csFj50vOdSpZsdD8swVi|Ycw^Y6zqxUzcc^}G?bX+76^SPSQ`o2~E=lKn> zU`40jp&nGu6n&4TI3l;jqNztt`PK9*%& A;O z`HQk*J?lt7{O;G=MoTKH>r^NzbFFGfB09(JRT=j!uC|8bnX(7c9LM_3QUuk_3{H0_ zt&8rs!E2|f2(k2p^B6Xv{Adl1)E%Yt?P}elb^0+U{DO!<~<3f>A zX^$uADXoxd+92r-5k(Y5M6HS&BBfinbM%0;#T(& Wl|rKde6^VYD}EK$yw+GA3<~E{*9`vSv=MX!a9LYH**X24;qB4 z@ k`BBm$=d~#l^r|}{P2QDJwyEG6wtgK!9pjp2$~a-&mYSMvOZ{`>ehwj z{d_hRWGl6_&*R|aG==)?*DDSl7~b>fH-wAV)!$l54KGT$eH-4qYg012W-!vQq9#fy zt?|*-e!Z0KvX=e9{LO5-s^wFc0 zkfK3#pk4}gztFmmeJOlZqOljy|57WO<|#h*9GVyYxPpn`JpGYrv<`i?Ec=e0G4k t#Tw&@tdIR&%}QH5bLL>L`(STQTsO zC6fs{H3RnoS3?1Nd%4&?lXdsvvT?EU^lUQ52+-S3{tX@8Wa1}5MXLb~1cS~)@nl|N z9wX55ffzt~wSN4qDiLaS8`)$u#%oo2CQVgMp*2g!MO9UtPLW6-lq%-mF8egEn)$3& zT{|q8z4NACRq}08fc-woP9I}{@Ep~Q$BnIA2Ywa*8t@f-Gr4))d$lJ0gD%+n?9Br% zLPwSl+Mzl!-aJdk`~;om1r7Xr0pAoi?G_ivVuk|t3p`|YN3<9SEjZJR9xS?3@C4ND z_jOX*ap1)^XL^8Fxd!UhPT5H~O0lw{=pQHbA)56uP(pYWYM*W}zV=&ebkSeoofWfu zJ2?I;ZT;pUSd-y%l*u$=am^a(dYfTQjSau_ax|zbqAXODK&wSNgstdOKt{W2Ndehz zC#~$$qfo2a+LaUQw-KUZ6Ma8IcSVie4m87K{O0ieUW|Q5p?C8l=hfxuddszNa8q zB4hA)5V`aNkLFN-DNC9-Z>yz_>O+44E94)YJd7JCo8T$h*|W j2W9!7_B#TA#h z^MbYLDKLNiN87=lwuW?R^PRl4b*%+$oiAo%U0vtBeo8Gb^Wvmfr$;>UHjNlXPPQRK z^*WCyQv>&pvlA2xvXrXR3cAR@P_}zXC;6)_VExh(IYZ#PcV&OM%O^5?8IOJm!e-uQ z>SP~IIwmQi%U )W+{4xv#dq4i~5&hK0uZwX|imHFra*F8I@}-K$$@L05y{3 zXMRAyRW#-7R0`sC8rfv1fx3+H1xS`7Lky$<@k zL(AwHOrLy9i{?KJ#?we!ZX=2|Zg9=WKdC@Hn!}SP=@5+1t=w+1AsQ< 2ZFOOw `k7J3Hr~3vBYhZ!k@SUw zUh1fKm0YTNlc2>uv>fs-?Q|SL^^rMWP~a$g!x6b{^|e<3K9nw8_Y3*(X9E6u{Z5M^ z`x7vNWX&_r-ukqYd(*j}w-$TVKH;HPyf~qWbr31vq?O<>^g6N~?@(-y(Gq%LNIt?6 z)R3<;>=2NL#&noA$yC^{ DC5JGY)ZHK;z)(xi$)DM;A`d)g7CxPB9&w-yPxBJ$A^`aMwjI7<9b z! 2uRc6sc*(Q*bka~R1 HuHs3vnHM7IL qUToqpGKE7{S% K9m|06!KU>5sg3@K z{kI2!Oo6>8OO$V}&QyNzQ0Y4VRvUtDa<_o%g6OFZ1Z_5x>YW8{iq;b;9^-@)Nanqo zlz3Rv&lmIbos&Dq{J5JQfzvzpo$t;~W<)OU^jdYjPfNr;^{=sY$!E#DBeNQoi0OKa zbs&xUmT=04gs{Gft;_$^lk)egW<%c6As>?;ghKj}(ri*XnWMA?b-&5noxi_~1@~|x zgU=^gLuD2z>(!R=eLhb#_vT!FO+6lCEx4(O1?$#cgj =pV;Dl;ag;6CLxkvkB5GLHlyRGi1}6(wXAMW>%8yd_+1@)eZeS& zm(=p@(@jY|M?Z_Fj@TuB+z)oS@<;6%>F~h%5lVY%k9LAv(?2R+nv6BOyj18PsPSrZ zi}6y@x8q>3Ww-7!c~c}0(J>RyZ{%Wonr(Te{8DFcx>Kh*%0!|uai%7jGXb~RKAgD= zKb>RI+(DF*y2EHbas5*HrP_R oMliE$s2_GxU##X7*oIWOy# zWnR>+zdt6JL6!qIPAYYk$ZlGjrMzbh_l i5(OxT_%>H zH6J9dW|$U@&iBr?x=TEudZK>xOsD~DB57BCNjRdbq&!f&N?J%8BO7cXvUBcbAfY;J zZdRR)bBao8j}$u_ddLRZKeI) $mPE}!zr0@v4@}d^8iH& znkq~t i6{5j95-v{=$Wl$=yhhY&DA@wn1!N= z`s;!5X)g3kd{l+8s@K0XX7{u{J6g~o#hh^Up_g6FS$eb!%L@~mo~0>Rvqh sv|3P3Hv=9L`rUytZZrC zCZdwZ3d|3P%X#^o13w^R+1qa!gP%R6aUEx*UVJU_O1ssP8ZUk$53d4I+cxsdfq}?D z!k7@>-bl%J5RtOGz2GKiD1*_1z8KS(x6Mu~&n+x+yPC4Rt^B$&|CgaAj96;EjQjfc zh3E?Tr6_4r8=udlB#iaVuM4Y%E6^2tS~m9CrQJ=gqhe`qoATqmZ?Zxs3}7jz8uoL2 z-t9!mAC1=?$PTuPJI4onPJExLjPkLEZNyv5e0rlUZF93KSmo&SAnBu$6<;CG>T!}xi$O#;jor_P#OGQa%T`?*%^$st*DfLUkWut(0}w$a-X`fDr& zZ29Z4xwqMyK}=25!$N9rrtoSqu)hThf~daZBmOY{ sg-HX`kaTitS!FzH7^cT%OdeR9+TC%^D@()+7P8- zDM2=?B$>H2;~y)N3G;<|7e$v?%rrx;8K}~$-*$c!X0dBajXy1Y^02yj`ADaZL9yCH ziUhJ5Jl>Q=Z`0yb&^kd6-oEi@VcJ3vO&*m|^Ym*qes6IJ>+&N$THxI!WUH168Tq>Y z#UFn*l860utIC{98MR^u&6L*jQywmlyebdUQDmjM_PS@6JRjP$T4`Uan`qKLL@~*H z(=iYgQR^!F(J$%&yDzp)GltwEB)sl=@#C>TX9W2(ODd5FQIj7+oZz2d9NEmbI5n() z=ckgJ_uWKT$ @;k1 NkZ??*P|eL40*8K=Vc`rvCY()Uh(M(al3*W z@|IBNZkDIPCk@x*b!FjVgZ4NK0RacYa;t&z;D}ERY2h1Vxc6zmH&dTp7TQP6G)(BJ zd`KG2At$q_vFeu73S_`yGgaoCi~AC+OsiLq`$AN>EsLHySv(tAq08D-osN8Aj@je9 zp+)j_oFtO4#Ze&Tz|g!UKGaQlqd`TYw}e4z!B{+;nY}Bke>O5sVvp_X3V%(j>DzYu z$OJ+bB !7YdRe D;;X(UBd6d*9D952@WPemN Yb9U46V>Q-*(5R%eChVl2AK$w^4PH(QTi(EQ zi=td9CucUJcbY5-3)$Z>4NI?u?A_-jF)OvXXAwem&$p}NrEQXl($j$0hb#u 2 z9~fFovvymz955r-(fRW$#0#=OhWL$^>>&vH$vL#V&@e%r8zp-e?xsw2DQL5Q4EKA2 z8>zTs3;KDIZBZ#n#-Z=~5`izfm{qign`%Z_pXW82nkS`hFQ5Fv{^t{!p4{uS+y67! zY+82BjC}hW(fPjgX}Z+t>T5&da9mUo77-dtA<~EF8KoR5!Bc1^_XJX5)z@lZC7d8o zH-6O!1{SiI1PZz~LupIziXBS6T|0Aa+devb5;36}>1(AK5)AZmXCXiBXnaa@#3G&u zb@#P&RTJKxMJ=ZE#*N)r {P_!AAn z32*a5;>q^;=_Ngc@(m 5H!y_m~h!pZSReu(;M-689H+oL8Q z(AdIWKhdNiI?Mqp(4_5rE+4ecq7`9&G et#FZk>2H*#*K&uWzR zWNFc?p=WuVC &Y^vg4<3CU(xaTk%nIApn^G1<0_P~Vi_?lU zi`hH+i;;caSXVw2{@|i@o$0u4s>i z%VKFR4`I_-A)jJ*H-(@aj*?E`>!j@giL4Tv&JbbCkX)y<5M%4~(sT{2n;9zhRhQy% z;F=t*SbqU2QXTW1T*yI|BA9z(2w99AQ(!~3CuzDw*E&_kpALd~>R&v%q3St=%}%xx z vApy`cEvrLGu66n()L&DD(Og1@CajJ8t!yIPoM!KCU@zlgl^+K!;Yh}|Ln}lo_ zebJe=j-F>HkI2s+rsTI^ABu@#RzCi0{QQRS#j};A1g=5F5Ms0n ^qJ^^iUGz1s-kpg>6gJc|{z~m_*)-fYg~`Vnl5sJ4^|b^jN vqOI{(VMxfy|EcsL*g1?-T-E@3R%?BL z8|}`=FWKQJegDS5N8V~a8Kt^+o^Vo?N#AcF7W+}_O4KQF#5r0%oujKT ^4+x4LO1a@3EXpd^7e7YNZ!BQ0)Jgi0Mh@3U8HlsKAlmNf(i%*YU=J5f? zyN`hhlm-HV?}QsgQ&5%K=nd)}c(cIf?e~x8Po;>|j;T`;G6~4YRgtYctEIBtHnz>a z2gl-&w>+TEC(=-tus1OpVIH>PD#@@*?mH4Zu?h&EsLgluTn6ub`Cwbcrv1p1SBh=N z*=+t(eRbbjTe*$5)RU@jL*r@s$8r5E@*UF2LXh2YM*~uq0odNpUHPSGH|$Jt-OFDN zbd9zRO$FStixsEthWMsyGe 6s8kMGVjm7GXwIe1Y^Uwov$VI{@6Z9BzKIM*(y-RV@mksRcwvtf9)NCa+ zH(XuXLp@33(g(y?rH89-?rn?eEv=}0|$34uc&R`hO z@0yrNaRDn1ac51mb<;6k8+y~tHt36Vo|#B{G$Z2lrQ{-1m3msJbp4(m5vtaXLW_ z?=nFSFYWykdLZcQUB01PHl9C2La56njAWjtns`KUxxHL-I8 FUkL{gb41%D0C;OW=+;~ zdiG|pSYBZ7gJ_W-9{29|sF1D=cdwNINRoYFt7{6(9vfV+dBLV|K5wYv0E-MsJ=J96 zP>*{8^4=&PWSYu;y-cBJ`I4S?Dg0hXD0u%nHDb+%VDSOL(*m{C1P9}uS>*WwU5UE> zHw(Nuj`E}ls|kL7Mhs>BIXo_@6^CPviVr$;XsFE4u~>BmD whJL&1JU z^6hO&
5yAANWHn@iQtXn4O_}I64y~|+=M2AP{e5g+M<<}04U+4yZX(T> zw8fiXV?A;&D=t;h%iDjv?O?6K=Xivvs1q((mcRTy+{KnZpanl8OGXnHx?aBkv1u4s zruiPb!TGG1)_(YjF;C7b6IVO2xlxxFe9*=I?xY4V*6FAo9g+9ZQD&{!*!QC!suR3V z+QxDNn+?SeRsFsT=qv3#<3cQC&Os}LVD3E}JJ@v7?Ffk_3P_B9Y?q&_=TxMT`a;gG ztd#SCVwg6CN>e{ k>ZR-cD=p9NP13tiomW zA%SEk@Xd35{+9RE4o~uEzm6hn>{-|k_PsXL&}n!q*74Sj9II99b0#xU>&)56K)rJ6 zKm><&yfN=HWCd+|)Gz7yj)`_=#+XJ-qsWlMbhf_xX(reBDiG5CCH@>k>bTMZrSrrI zpPr9B+Fz&9t6Cj{c!Y_?nsj^4&5dYX$4Kf`KZ9YaN2!#~m`3az8mcp|KZtx4XHL(c zFn1H)^?l-wdSG_?bXc;vAQ;DJb35nL6Xg<@4XJmP7e1qO0p@zynmgFd(;|D8<0ICs zN#gl9E>vUa0(S3pPR{J)gfMXQY`q!<4fu#vid?!UGEs$DM}5ff6Kf%;3-bJu33+1f zgUaC2-G(8=zG7|ADt*N>-<+lxBJC06)Sfi+NzDi9S*Xt1kala8ntBk9=@pce=9y*r zX`|Mb*XWJ<$fLK)dZ}r&9<*wjz~~<&B{m-XT)ICJz 8r4bC3|(_K(BZ%<&B N)r6Tju(hC*_))TSm_?CY$TpnH8?yT6w-deFAPW zZWZl46aTuG_h}N*x??Tf8H|%dbDm8w59Zaj+A@m>c*xl3F;PT(J`yVf*3 ?FAwzs6gil;|L3Z*q;b7H6CA&Vth! zs=R)jSa0@9+#j6 74<9djOQYs&EG zC8bhSLoWuG1ZC3 $`jZn8<_E2xes1 z7^{KykcGRej?iT|{VK=4go#U3ESX2W6=&ucRh)!M%IV&h-l{KA_(yROQJTU<;A!1? z?@u!>^QMdYS+DG~W+q6-Ovm+oT-AgNC)G$}>BO(=mH7g{qnxL!l)d=OYRJE)Y8E7T z6RC4md|X*dwvV1Udv5p?)=nEwCGlySwmMq>A^SAWS#<0~sM7Gh=CQ!9HuZxKnLZ5r zc?YY#iL=GRu!ygyAHKY+ky2-wkp<_`c0P}Pc*@xsznyeW-?s4M(8Ean`KRxAWR7nW zV<+kb5|m43R2pi=Rj-(O%g~=Mr_ntJ?uLJq&~lGp5S $9UlA}phE{L 4SU_6qGmy5C_XKV ze6PlR%1RWrl(DH)_Qk=U!L@8`X2glc@v()0>cSx3hNh!`n~(;N?M2xhH|@c2+M8z% zd&P*5IjC~2pvq5Hki68uTPCO?_%+NZ;*hURjrNVm8E#jv3(?8p|Hsu^N5%C+ZKJrm zySqzqE5+Rk#bJQrP~2f~Dek2}aV>5G#oZlR+})u#Gw|^%@4fGL?^^tkmHlMrNlr-4 z$!w`!#T0__cXp5%;TI2fPQ`t2Z*qs~fX*@sjBsE%5`sR`+(q-+km7Dh*;LMot>3}+ zRUY0*m)qs_``OudUvZtBQ`-67Nr dJga)>RZ? z>M^ktKLzy*wZ{3pw#16OyCusv%#^eEo!7lyD&!pria&)3Kmtd6a`Tb)o9YZRpVJ;o zK O`Ir5n2^hSS(bXP4 zZxGkuT2JF5JKBa1dVIJ2#l5JU`sQD<9*)Km(#Klg^V%;EiG?ZlR8Z_7Iii!5#I5L8 zU(u(7JgpkE)5tvB%<29+={{%t^*@{B&57qOZKQWs5N^>(waZgU350}hS00UGT82g* zxe0UNi&mX{FxZ%t^fPW}PD+ja?j3)Ne%0>XwoAxLpF4b$!D^_D-w!F<* feb|^3pVw8PD}ya#VlR4>b}XYD84$Q^eB-mK=0X0yv(#Lh{4^N)P%G$HVhr zqcSg&>4pAf)_C9J_ht79;hkpi-(5>Xs&knTU>hajFs!actGfWXKg#c+00cv5`d|78 zJ5)xUWR&SrS3<&%k}1RcyQpp+=&3Hc6a^=fo8xC+OPrEhw-l~LSce9U@`8Jii5_UY z#bV3kxMc=;$R){-Cw6H)VzN-&Q!sDqFjq7x?(wZBLV3Jg7z7I*SrbmIB|YYdS$3v0 zf#ex=1sCX=*(H$l4CiH&Bu qu>vm{HwJ8hcMfcJJW=?Yug@UgESca2g{@plSrtt)h_66yES4F;tx$* zHibSpB5XpP0g*4b1G`m=-0a(yS6?960_R0V9>M4`<>o!65!1O(U;Tce4CePbE)<7H zI2=g>GARg}4zU5Pgyu^p-zq@nN%!4GVp1oiu1@Cwrr5P`-}^SooIWYP_`&@P_m0jG z$}L7e-%C4i*m?RTOWY+oGqyQb&983=ftFRa)V7@FLu`W&x 3we1 zhj&|^SN7!kWAGA&eP)m0xv;&u2pqfATfJG-9Jy%r8^6>e&fOU^Yjz*vhrKTfk8KeL zlZucFa)4vDf56^nUn%^Oi`u5R4#XLREf;-~z0AaIQLM_rJ1J0giE1m3&$W zHeT-dYcuaUwYB7eb85Go W>2nYIU;VWLTXN)}9&f9~Wt`f%OS)#IhhPQh pP0D+B#@ykniVvkkKxY&J;>ik3hEt$3 zWSQ86>3Bu%lp2HUq02PB9eC?fFH2@r5{#KI(xCc12EHqeMx5M*xBwIPui*Q|+snO5 zf3(C{x8?RR7-;j%wg2os{>!34kysRAAyaZ?1;5fdFgh|6fP6c8BsHUYd;IiSs?&a@ zJ-4C!8n&*b{Np%y%fGIp+|9)+NaHhJ0G`MCr?U^vsh5%;b-ZtfdVV>(D0CV&$yt(P z{Y}u#mi{{|{w39_^ZFV%iXR^}&*|?Q{?S=pGuz(s@pB2yE!zI==)58i!FY;Qr{OH; zABUY35M|QpYcLIvW9P~o=eb3J$(k6^8v5ssI_E2Kksi_!|6PjoQu4iys}GsYPa5wQ z9S-<;?+We%Pn <6FGxo0zo~DF%tz&_pQYrC{H U}J?(Rj(3U zaQdZAaVTgM<|GL*Y=ND?G37L!vG<9QxIa5(55oa^t&+X}=``U1iKRK r@X_0LcI0!-q989~ zjKEKOT?byv{51xhsq2#RH{K8JN{vcE;_Drc0S{F1@slgj-1cj(d+k$VzMFvOkjz1{ z8RE=_bv=trI1eRa<&)o(JMnn38TnXCef?k8b9Ug<*JT_%m^A3EPoW=%I Cs{@v6X&8!R9S>cnDIuHLP{V$oc&MOZ+@_Y)-vTCuYRGEIO&&@U@DN~(9;#-KOb8mwutAA*EWbb z>d17^c>e|5OrM&4!p*5}l!QhF)lEGez1i30%s%bB8R>=pdEz1bXMNXt_Ehuc;OY4I z1cUU?q^^qWVJqTQVa2OME;5)erv@YmjR^V$15SL?qY4k^d-I?TM+Tq2T|6JtZe8br z0x-cM48WS&A=g&dZ=89A1o(O4$gO#Ms~)P$lq7j=Ga-g8$7f7#oshq#am?1jx)NA> zbphz+Y4K4PFvGMBfE@26( %V~Ai-xM&FQA3z+8R~o}1b0R3K4ns9E}VpZboOJd?PSA41oxi3S|y zH&3LnQap!??+m4nu`i3pe^&mP)-Coibyc>c??1|f?M`HE&rs4Jv+&_LPNWfKZ8Il( zq{If~t0fq)*f5miWjue*xNdL@V7T?*GvjitGXzgYP1|8BWU%ga;@#JkFnAUn{P~Hi zU<6!SQte_QdyGZHAoU3M$@r|C{lzA^#OCJPUhywpF?XfR<3aL(ojy^1%a$+1FnbK? z0rdgVd0*b$7`XR=^QQL_`X4`e{Z+(c*n0Fz3xixM+|<@unJaWxS+JMfd@wTAjau)_ z7n=S&6~|J3tQV1D _ D9WRA?TsZK-J$}}|-c{}W0m?_{0nOe|>bk06}X-=4I%k&(>+Bz&Z5OFR= zytmWU`8(8PaOi#)^rRF*Tc8q{W~WQZ39c;$$_HL?Q(F+jIK )Bn`fo>_`|kpC3*R0)mTsrokcRt;_i>(O5v)y;_+CJx}$hau?C zSkWJpLmuo(usOup1ti?;RJvTpzdw(^KPLf$FkV&zUmSaYqy-_Am<-PlB%dxu!C1B0 zzmr&l;&N?|FyTGvTreHM)4&TgB3KjiMPN7Gy)61n!!Hn`P)b1b7|C}*iinf0`F6my z&NtHFWryap1$E9 z0I`iMxU(|i*;zqk)4~4ioZ8D%LzT{G1k0}(sUWBH;1M=+`Q6{e0^kLIu^+z5!>`@0 zB1Z>-nBuC=&r>iN55n{o(l}#&y_K!8Sm1--o-OpL{g=;Xsq;+Kv`MC#pFygh8;x38 z0Tzy|CnYhG4>$#fo23f)t0bw(t@^oE#DImM6`cV%i->Q(zvdH;aIGcha#Kq9@WN^2 z_$iq7pM4|Uz8F#EHw8MsBQOhL;z^ O+W>Sx`JA6WvgW8iD>oC z<~aJ= 4j4NN(icu96wm)N%lz~X$fm@u4BFfwtL`x(rtSaVJAVi8`~Z1 z9?k9Ix5Z?ma!BdDDy2uqEiMl2pMa*wF^*2m(Vv=2oRQs6++WBG$-7kDVIPUO76O?O zPTp;B!$QO30)as`p9K$L6JTVYVBj#qfn*Y}n1pugstw9fEVHl;_dL@uylD4)HWGs9 zX?2(c)OkiY)D0+bkwIEUu|$c}BXz`~3hbG 9MB0+@fDU*8*+s#j;~9=oemS3VAVEO@A)n$p9Dw zajQapELAUkiPX=eA}>3H3dn{sHiAr%OgKd6OGMQ_M&wI`;wouh4=%c8J`3jMtGKu8 zR!*ccn9hD*{oeKa;|~r8{ni-k(^95qIV1-OJR*C=g6@$!Nm*Zg#rI!Mt(m!N=|f_e zO?QDL60lk+;cy<_-@3eL)8?IZ{GE3ZnP8%^G?8frcpAPW{!q2~>`oxY%wwC|(_(Y- zk>1Rsu4_vkPU1WM%=VzoX8b%sOD(TQjVssVlhZJ2FFXfIiDABGQ~jv^Vk%5RtcfFT z59l)V!T~X~>lsf8Nrx>QtIo4`%05$krHBZqgg%({S*S&qF2cG LmOTQRd04`z zWe=JT++dBK`mkkhls(2=t(mo@D}Y@Dfy0#ENhqxagZa#(;xAM9B;cMqe7%l%;kFjY zBr=jQyjLr3-_dg(73tc$fe_XWGk6zs8(T#!Tik6N){S;J+hZzg=K!eb8JCrRKo7_M zUgOi(XhMY*Z|31M$YhBhnXfDOX`#g #V?S1J9nkTt^Cj4Kw7LslfJCas 7uzbTcf0!UvO>MUNFGIfHeDn1QyF* z7glDnuzVT&*5Y5S(HDeC+Vb5R(7q4n>N1^$8|&`Fk_kTLruvU*oSZreIWcNXBi%zk ztwh)5Gb#qQa|NQCEfP_VGSm(esab{DQw$K+Y%eMhsrB^V$&?;o5QTZwL7_EaxyFTH z+avGPZUclxpe@ZF!YWYGYLmNxgXNp{doup^#D+t*iC DhJ?wW5k8kJuJWez x*yeHSUc^$Lk(F9=PO7r|i8U(+>{8 454^etV7jExQ} zg2ZyMw|su_qoOv>!`pa$`AEZ|=l0|#XQsXei)t`SHc!2!BxRf2x^ 1<#s48ps z5(SA8(=b(jv`@%DQ0+1FoHpYJ{2n0ZJKBk?uub)5qP%)S{w{}w3F8JO5Ebqks#-Vi zg=n}~3d0ra*3`cBGR*UnY#7Z^8{il_y()s@M3!iTpNeA@4tH^!D|Hn{`$WgO>%RYl ze b*>vyo|)dZ5NN~lazhbSJfs^Mn0 Od1s7Cc}XF_N>M%|3H} z1f#FCr$|T 0P^0ulxGn0v5AJhSk1l^Bvc|Eo zJOC)$@Qae67BLr2=FcUON!aEC(OS%AJJIV^HMQ?j@RlcQ+sKCt@nwqMVnzED5*RDy zOZoB>F@8k|A3~A1b+qQ|?-Y5`#9bS3O!Gl0$J0%~N9sI0sc;I}GEBA sj!7B z-wWgEiJ=P+7{BD%L}qiEi8Dvz_D|-J&25kAJ=)8ejPckvy0an8h4*uG5p`@cT#5VS z6LEAvJj?p22^gI*Mdk(#FXW}OE)TOaDcvgo(Kv d001WucMbes?5n3qukI z!6qF>?Co@*J0C?@3J4$O4hT0lPXM#XO9W~ImuVjYbgeI{5za%z!9dE@FVW7k3Ul5; z4$}6dfV`*D{vy1X_Z20&Y*)!bwPQ(hHlpJnUP?c;%~ytrAv_4@SWtyuUi-d>R0sM! za{U${=v`sC^9J@g1sbSr`={bB$SL#a=MvIi*N=S=8kQHR7*WzTItD^6DGx ZVtRIu7B@p;RpxqW0gA~@$I$L0gUr)qBvcD28E4dR zc6!D4q*qk(D60o|$$MpMdb!2n*?;H}QFiYY@HM7;FQWX;Wow*W%#fE5Tj(#1f@zI0 zlA+cdYb@2ywe03sC)z*vf_F9PC#lW@hW!<8x V)9dTiS4^_fylL9~x;f z6EZuSj*aiwpK!6g&{XaeH^OU?Ky6xS93|z>9t&8Nwv-*{-hgmw(KYx9k^C|bpxYm6 zz5Xd9w$Cz#8~mSTv{TTry)`Xa`%I`fRGX0OT@bG<)D65p*k0^-@qM#mark^d{j>YU zASM8Mjw(gxJ#KkV-@&BhUmMON=HpG-B7}8#YBbLtb8FE=60m4np Iu` zbNAG0Ebf=6$Ole~>vgJv7XdcYb)Y2rz-0FY588PTSLo(nd(O7db 6Oi$z3i?(x`H|!xTVlD@|sW)*|8)s 0V~4t{WFYgs@seX`;4IBN(Nv8`!ZC!4b=6i z7BaQ5Tpkei8qMlnsx7K#58Y|O`UZRJC)@lxhj*@aA2DPeZOO)o7uNNnL4RFK>ya$x z<5 _JFxkJX&URX z$dfdF9n?D`OQWAo!wS+Bu0_+oYc*>p0eb?fW%=`Kul$%RCewi^r}YL8-qyyyc5(Y; z6PIyh_nWRziG~ci5}LtgIF}YByWih89XBjE{#u!fn#`wtCL7J_XV@8{O>~OulcYqJ zE2|M8Lv0+gAfZAk0UUf-zA{9!yW|Wbr0MLyk%HnRS?M%;ykWtc4j~51AB;2hni>Z( zalw1{XmFw1yyybO(c6fAn?2v$`@`m7u=`nt!rmcto_aWSr}D42Q-`0g;p<(s&gJXF zdBf9Db_E%*()UupRejqL=SnJ}K36oGfbGLEA1#H!-XpEF;Wc65q!IGi+-YX8m-T~k zjyD)ixnRxjqxDN4KeS{bWPXo%Re6W`G=CmXW g5a^L;g;YsCPT1wJ1C`czgY> zwf(b)FKzyhfB@`}6GWl%FO^`HIAB#T3w3~$p+s5Vj2Cm25^=M)5Ks5aH*q=XN3y&- z2Azl#wsutiwV5z+)|yGh6IbM0y=loDVx625$#+W?;*{@)urkzAFzbB@P<1pEvpG3v zzYi}A3%te{$({v@bXKN Eiy`#%rKQnQC~TpoHLk8CP%)e8Gc|ZDc_uKdsbQ zo)sJ3{-_2xuHb`^^1gK@N@IvhN%qIDYm{1ZHvIljajsNPLljmNLD~0Y4lhmpBY(}~ zlx> ;UA&eiNX_vBK04`!GPW zu?+d@2m8rqQBme&Hd@`HHA%CN5y!gJ@byvB0IH%?TBvWKS?GNA9||G^3J@D6hnqZF z>$#6F?eTu70bqftnKXZE?sxbiqy9+pm>`M)A8xo3)+1eiA$#wQbAA01O8em8gx5)K zc|q{4|2#%ANGOqbT%+FND7qP5&QDC=ffbogiSYs=sKoy#7FR@>($bEJ(TrC*G-rfa z Giz3iV`i^mGu&Ej#yQugM`PpWHQa){mJR6L*tp*rZuJ72 zaVX1izVn9}>O(4VU5`yI-^m8N#(1?Bi*d-jWo}yFKUK2#2EV!jKBXd_96tjFKgH;X zAbSg5_y+xzDDeA5DbxkamHkEb-Z99w1OM|ZzhF+p2Fx0Y=OyB%`!kl`m}mb*rJBQn z>%A@|MK?q8SP;N|C_%ClsvPza$-fW?Z|lHtMb@CH-a76neI4vqvYau{nOF%nfPUZr zDHW624)&hT)TPF4cpM7dMkI2aipqJNkDV$`n|H*zt#Tx8y@wAxN4FA0Tso`-TZQW* zgqO1HFt#MyD_!Nhi(9Yw8&kZTaz?kv5_mgZ_TA>Rldd)SbZhjWLE9yBR!0oDBIePH zeMW(-s!boErY)pz>K34;PuRUGmU=r4 CeeDr{7Z&uobw<>O?X|zPGM$upEDF$dpDV zPJ~NlX;op#Y#2Q)tW!0Z2afd3yJ_lK^%aGrt}1-|9roL~+OK4$>ow8FhDYxA;@een zYMm_)UHjhCW=ifOvHMtV9SjjY0uh+oy0VJMamh+^+MgElL=s`yBf&(Sq1odcgZF$V zvL3t+N_8qjnRj)AizbWpBYKYrPk7rV_3bB&F{m6Z*g}2o0#|q&YCy9it |@c zfs4*AY;g6fxuFy?5Fu`RlEz&WvE*uh6YUu$Yt$rE>0ZeR9Z1Z7^~sbMi0^UrXM_1! zxUGLZ@b2E=g7ihi9PGewFTw`jIeYKR77ZMV+o-Nne8$unH?g$(8^5> 7o={{PU z2$vPiTsk)FxS3wl<~M!p=(=^Zn8`3xTK}fR^Cu0?9?F*Bvyj@(S&vKjFQ4~ko02RI zh3_#N)7J9{E`efO;5DMNAH<0j8EF>UE96fSf%B gNY zf~)KWN@udfxPm6cw95U_4DGG-iiE6*P{io6xV2r_B;1`<<-eu);wl$S-b~RBvaHm@ z&k+`_AvoT!t6`MPnc7+3e4f4ISN p${? zh_dB<_sI<^i|>cR@(@Lu?442P`)NXzXq{;j@=uypaXo_>G#C|aSv4Q@(xPp(tAf2K zVN4v^`lNtn>Z3vX1{f< B?!t!o+g!}|aR{X^~vK_ v(|4|IJi< JEDL~dzxk>z)2-_ke!$+LjW zL(MgW`WgD)53A!FeL_uL*g6gTMSJ{kMdaS mDW$$xsvdJ0jWoS;E<2=-=9tYF zneEc+)XuYXjPQGOa=#oOkbTvMV{I8gYKmW#+DBFSW|R2?mr1sZuM5AEcE!L9uRy^v zqbjYD;@p*FIxjZSXXdnN*-QE@q^(OSA2Bl&6_yl^#y;NsHuWu|r=_v*m7=kz)(GGP zdU8g)-S|9e#;sOgY4sO2TsM$;+R8VC_l1z&Xg>N0s)*v?#8*Wadz>K0RGL4)DUB&^ z|3r>!Uv1}RPR&n{~-KD*}Xim=NgqMXTC3o2upY>~T(oH8%S)cXG z2S<>IN?Qd+8irem0rq7Z5#@8zb`*LJ@K1Upnb-HWx-D(Cc@es`+*^;{`Lh@ 3+2$=B?6F&c&^RmSrHt RhcO%#t#2`u{Yz@E+ML;uT}74t zJxwX)v_SY`)OhyRf`YK5qN;1jFJD?ZUnOu!?5Ei@-oLX3P5>TzUMeY@E(d*=lJmpn z8=`~Zmb2>ww))&pEeqKlMjQ=a&46IRnCMfNsO&)Pxm;D{ Mb-`W5}KUG8QVciZ0D3m_Q!> zJG&zTVikS;USEM$8|dHboA9Fl?lCtAr%3mMmJ{`FmSEOTwd7Bx8XED23@SilnKf_% z823`!+krDp>Pn-k75%Y=Z<>Ld?#s}hE&XNcFCL*g Vp1F%0U()axotm(8R?MfV zs?ORmN5)HyO_!Q3$Ue9{318?%m~6@SXMaDF_nc|=*t-*#5BTNph2ZQ$SlM5d;77(@ zzUH V{8DE=>j0;! z7TTpDDa+-PA%A!ScJq966kJwxE}^YiTSPDM5FdE8Y3#E^YP<5^qPe2P<}edTk&Fd~ zZcnP$sGn#C6!VYxw9eKJ5Z-%cf(a#0*V!-h+&-+YL1$K;MJa^u+(`o$vayUKq)t)l zuu_2e5}h+S>l7)7>H{-yo%GE^2?I7}hwo}HeD;>E%aNmv4XB<>SxJls{?6!*PTn{4EVAL|iL$Du^5>6S zL*@8)*1{WUhtcdhZKYKpl#R!)uL!RnoGAM;C?!98LYP742nXgR$)VZ`l1oXw@z1TB zYAhcoswDc<+xdqS|Af cj#y#l5!g)|+jf`KBMhE(sqv|_Ekev? Yf!r7Jf8sC=D8SQz#G!W7kKcuwmCHQC!-+Y2+(*hxP5UG!DubHp464nig zXEpg!(WUp+2*FgMIg`alq;USQ=$hE0!qL;ER5(|h9)wFS;HjEp0WZaG80H5^54LBg z5oVWZi(CMm#OK`sgl&&)RUM3Rr)a&1&D9ImFlDR3awlYi>K=m@NouuCR&6hWPW>>_ z9aWUw p$Y z`|l4;yAuzn*@>swNmL%d{SjhT`q;026HR^ViygK%zt>n!`I+yl+=j`$C*3ucUIMdh zH&!BSfi#6Ou6dqeRj7;^nf?^+rnIx*96*$bArC(r^QSa)7Ikr#zB67HXK_#1mUTmU zNjJOh9tSu183FI~8B_3JADfrzSh&fqVsVs^GT|Vw#yCF|9lPj6SJ{AVWC2H`Ta_Sn zjFEt=Q@3vdYp^!D->iw^ufSLO6CI6y{-~k~?T_{GGU!kGUW;mG!~#2tYg%mk%v*SC zaupjP(qag6<-X-mYwSl?MJN$TTFAja^v*e%jDvsVgL7sUr+Qo@L5txE zy&A6PXycZ#cU7~RG4)ycpJ>FLQ?uw5x~7qApi7b82m55TujDTAUg`mK6p1-sv#(q) z6Tp(96*gNM D=tO+(xO%9_-Zz|{f-XB3kB?0z XXze@}+-QTR%UAX;am;Aq!S5Eu! zE_I{ye~m&u2iY}=j<^SlF6}1H8txArRw?bG{lRxhJ9ZRWzDdYB_W4Ay{ivAMd |QFwkK!i( zNYqv^8A(nKNc>T_ZqdkW5qp?q%&X18`!uq i%$EixRW z6RLyNYi1PN!eR_b9Q@tnj}~H-JUcE#MTDlSYgevBx!@_{Ypw5(iH~^7%dqE1a)(;f zMlZ-HHw8B~Q_Baa5r?yvtgEFV@BG6RTggL> YFPgWI^Mm8!tT#LmckmaHX3~%DfOJ#V_Avy~Bm|+J9ts(7ezvl#$;kPD z_ILM&h?zK$-{rkKOq{Wn38NY1ud99)_*H!g2%S90GTNlQvi4Y8&;!V)3fUPF6r1WL zN$$Y&NxX{#BJPT5GNRw3GmzLrnLllMHDR*&s4ZZ+BkVLMle=<{_aB@?@gG24=hXxJ z=kQy6(Zu5u?F{DoW_Gp_q!@U!)L$SQ>VFO&Nx-c9M^Jb{t*H35D5;D<LQgwzjrl zwH-iP7uGpC7 SN _{DhBvWQ0Uo6JQ-GJ4SN+1_o)gOgX3Xhhj1XtJM z`E7p>C)@^Qomykv_P;4qLGNJvnVenpR{ia=fm`nG>+s9N FeGB=)Whs(Csr(6p$_WEpPsi*Umgqz4Kw)phBi5>dfbs(EN88o{ zxzoGBILhpHZC|FC3Rk7+xzVA;^3$F 6e9 t`voG*laVG&D2sA@HCSMJ81AV&S)B*TJ79TJQa{ zs|r2T=svl3i}~Q#z`0~!meyrqd*f87Ya d)$#>gVw@JqHQ7}=0&sT- zPWftOd_!(eb+4VsVx)L-0uy|Z(k}rCk0dhlK&vCW`M9jP$*sGK*d^3QAtFxL^bY98 z%JswjqfSsKM~t6Qj0uQVpjjEx{+hf)5dukm^o?cl% (`D)IL z@_%Ilas+@!|0jQp19;~xiH);|Jj$n6^WrwR9F2SeXo??AlCOy=O_AxL;Xo$tV7oUX z<8e>0*PD^CydSv!t?oGhyz&+_bTte-_*PdE3C?{hDMo|;!2B~{CYI2+@p|o{4=!hu zodO#7)g+n}WE2N3coWaS^ar@V5dfsTMi>20oc=0C%Ta6pFF~6@A{h9lay1#e_Ezdh z1G~MoR($`oK=s=C4mSOg@rfdRDiVwZa?Airya8)6!830_y*P0nhgV<@T+Y9w_y1UQ z`~b(l0oC)sJ#Ron%Xlm9*FdSNXzAGfPgJ1yg<#9KVV0GHOWrU%#^{K;ugbo>PTH%L z_Z#Q;HDH7s#%@VyEKq(W*z8R&Vhy zn F#HuH%^o<@c4yd~k{Qgb6GN*~~{}<=1z3RYCM@NC6f=rshG;c^5 zcjI--S4Bzx7dKG*FL3x9A=!3tJIsG6>Olxy;0hS@*OK99d LRL*UOa82{-zS7a>S zeNAVS4f{5hu5mDN&QiZ5G#aR26nqZ-4-|8`n{f3Cs)WtCeC_qsN`44T4w@PV l@gSO9b}1NL|m+suRO-bxe;uY~@MXle=E^~M01%3 ~GQ5*el4P+gIW8UDbXW&7ie*|w3AbtO%0vVG0Hj7~= zX*K^nudnGZ2oNq%3>qZp4T6RF3i;Qp7#q_128Q#u*tB{DNBjro1ZCqvLf(krlFmX0 z)4t~X`t<+)A0Xv)D8Hs(2AL8 &rVV-30T3N1T z2=Uf~pVlQNq1p1w0g-?)`;QbU4u4kgny!QCw&a~oX1nval`|ZB6Y?|&ckAqcYyuw) z;Hn05=PhbDDB;C>FWrhSzNQ@d%tT^*3Zu218MTq;A!Eo3cVY?f(0V?yY6ZB*xWpVT z#5;%6Rtqc)a3YJOpt&CQNL|)**>BFpm~H5(vZpVO&Lo(bw$L$f_j6Zni;-Cnou`@0 z->WR65UJkO`Fe74M%`UP4+6-6lv_wrkNAHItX9zr9Zo{O>@36ec8sQ(!+?xGR6?{3&76FyDe86BkF=x@n2NPD=#MR37A$S5q{Z&l44>L^p*Q;Kb^RmoBA zNJX$b< +SzPud5Dx6mP zLGg$EQcvM?%Z#4i!>^04z^f8<;o`BI?Yo02fMKtDT($ek`=HIO%)hDxA=-yebCXJd z7JDTW;aXi?V*@K)qK&oNBRK(YtwDiinM;T!2wY5pFW~d;PwV1jir{aeiO$;I^f`DL zftKatTDRgptjSh<#fRtM-JwiC0b9GfWHGTO{2x3I1+TQFFTC5(!2b8cC&v!JE;5yL z;mVOQ#b4DyYp(hGCyVNh^W2IP?Ufo=rOcw!xseP$Q0jj*V83Pl%qI?;bk4y_r_87$ z)~(uh{Z@Fd>2McX_|@?s!=+zyTJ?NbMu&Nm$Z nU&p>dg z#~$@Br&CG$gSGDiZh8P>yo9XiEg=VU@rMcKok^3g;BfB#=cI*r?))Jc8iOH;{&@nO zZ8bABBu0V<0hQ7&BH2SoMz>&qG|FdXnU0AD$l|TGhNm; )WPoM7d$m9)c8Q9R5qi2v(c_22R1 zoC%3|+Yp{|A+QMlwgKo8h{D^3pi&OGdkb(bR|9E+{ urVvKZ?a6 I1^N9(a`+ZP|5kVT z1j&Q_*RI3HHt*)Ohj`q#6Cs^z4T6^*kNFG_8he2dBmGlxfcWh4)}ayRv+`SA1>rOP zTi4I>dljRvDkQQ0b)Cb$ED4PRLZWz{e`~Wr|J?l6Z6@pU!5fuu&S(BNX(#`)8QecA zKK*zntgnd&?~wm@u*e`Ck!N|he=PDOo(JEyX* Mx8FYf zb?e4LdeegSioypi89e8`u?;YJCi$NcSUg9+v0=7(rhOZMn$xq#TiuY`bNm}l-{+bA zZJxdcKYP4A%*g=azk#pw^aVRT(ChUP@kKrtylGgDf5v(%ouxek-i{Mqr-cKS*O48e z|Ci*EF`X*?87{|m`@grateod}Z&QESmdJdI`ug%j_K)~KPt)GcFL-3vV9(S*>ny z(H 7ENIs36V;@|)eLt_eyqyMriNR<>9Xxl2mg<@ zN|pLX#_Wx^06Pb}( <2mTJ=G+gFdQ$#jOTAOZ2cC=;*NK+>A1|HzSt6phJ(tN) z`Zn>H^l(DoBTrSB()fV6H_HKD>I~hiQo-@+_ 7jM*?3PkBZCK9@j(<<$vu(~x+UJA~_V1zFyh z;s9S}jbP5I*!Cd!Ta+G-u*@so8KiS8*fS;G@9+!DFzET%ezum@-dxgD=M|ia$ zsuFvEj!<|Wg8Xo gGN-7!vHee}(@DwpWJ*ecF95{3b*k9|n zNXEjgCGCwQyGbeft}}#fp-zI#N86yTGRsA7jHLSRD7^jC;?EKs|8l*!U0v!tg#mBD z9H(dL-zvTGx_KNO;fVOHT8(TB$_C}toK-wpqxvFCtv*PsjMr5O;!^E6go?WK+cfWR z2?%PXgByVA^+_<_*}X5kyn%5@3|=+*1O29taDo>wkski?yy#+^xwVB*aOR=jM#obu zc`C9*$HeV4H%R*zW7q~NF(;#+;VtKNr%-ky|F)6VX!I};W7{*#5mpXsjE}K36EIt< z?&%`}0;sEQNSVd !X{ijPGL`(iX`wT<9(TMMNhz0`Pm3D(`z_6h`H9z~nZ2mry!=p( z(<9oxAwpfBv2-T-({MAHuh1^ja3PD!WL gJA+n(o(;$e=%)^|AH?6&0h$ zG@TiIxg{T(Y|zT`LX&_NrWM`llMEdmED92jwaXE#f`Z&@RR4#ow+xD_>7qvQFu23u z?(QDk-5mzEAi*Ip!QI{6-5r8UaEAcFT|*KaE>C!G-S4}9sIJpJySvY!YWG@u?cL56 zE1|qTD=mf9)rE##ixzk?zsM8l4%R9RVq5 TYKMtuxh$Cl~btyvqj-L#}4)LJHFgRZRjl zuvzq*a~uFrSje_T% Qe4p8#s^8K0m!}X|DOXqNMZV8mw!N{?ctUOyCr^y=^-sOZyWJ zZ#WYMy_SY^|GO{j%63s3s7rEK|C)OkOnL%Gt!x9l?$+lD)!;~^)0YVN(iuf?jdI~A zQOj;!AvdvYx1odS{?~9cdCdXOdD{dc$YactXLF#EQ=NZ%yu(y&a&_(rhWYSwD?{-q zLTJ|VweULS_H%!9=7y=4)(D{T^w;XRLR d{|0e-Y~k0dohtgJcUg8<-Qn zxjyc?NFPhF@7iw(ud{4J0&|DoN^;l@N3yPZ(b(_1FU$Vy43^RxMkl25bhYwy?Vl{- z1B^8KW}C(0s?Rg0sQH`SMOjzHJ~$;nsJfA)Tzd(MT}h{Nx14Cr=@=H_xl5DZ%SofR z@vj9K7$;p*eM#T_eiwqRA5H*Gk;a3ar@fGj9KEz{{u}#?X1^JGPsj)&C%EQ*kq@3c z)lnwBV;HHDIW1X2_aP+8aR*SNA-)6APtPGGO2ob6JREomANWk!!?Z2H-V=GrW`7@q z=kUXtOVL8-H+mro9?(RR`q4j%WJfyabBqq|EsGR+C~S R_z#Rw{-c)$Xz r-{BJBsN>E{!|)im^w;|#BRsye(;8ft(E zpg43@UJ0wuO%!ND1AlT;DikWnipUuWqrc9MC=WlJ$QvQX@+z{~VdU Z`=SFHZTR+M%_Y@BD9=#3xnWh%ebUi=caXWULX&a&VelfNy#VjkQ6$bRmD% z1UUh-2EG<<;`mbCz3fH{#>NPKjAr-=0C9@g&gc)k-r4 731wWVt5%n&5kH zrv8>M{OvLp!r)BBtW=j}%9$Gv0y>TghZz_$`jN9ODNtIaT_)(QKzHt$#{`YK>Ll$|5t9hw4O4Xq6RG$unyoMd8 zI);V00`nggO#?Bo$5NeK95%+_J7VlVub3{n;tls`u!Bi})GAn+q_Lhkmc@Qu;dL0X z9vnbDPgx?rlcH*jPl+}HhW!&HG#lG!nWdT!jffR8d%{95<1DpzsTWDXZivA_jph=E ziSE2p3TjN@-cm&LS X$Y3Ct89-d?M6g=E9O?&C9k~c5A16w z*4!-NWJc`DVCnwQ?Rqp+8fanjo6AQzFE<%3vp5fH2I_H6=B@BcG9-gbDhB4oAz
U< zt_O|QHY@WEAoH44?+V85t3kA?ttb}Rmpi}3QE 70TR3*@o%ZfNMBSo8zzz|DA$#> WbULCIN{9U!;J2WuP)F1fu5YvwIl vGaor6v_0a>On$!eJiq68w!eF{?u<|9t-kY fMzjyfoxd< z{)~JcP}3Y??HRZYxlr{8Nm)`N{l2A6Eb2DNi73nkmLC*Qn>i$ynu32CDA?U;3%2qv zv%1ws@xl`qI;?Fom1eurol9MT|8G2s*zn@}jzS~bULxNygEV_}OWzx2utIxBV$XYT zI0sy;?d5@~iS^n&=RU^@#RRK?wTggjSVF&}CL!OUV}sa2C8xS;{wo9N?f$9>80Vk2 zzO4}m4s8sY;;@phH-sMpM;y0suRI4IEfY9DC34#;KO9W@cz}C-er6lL3cJCH;QFED zMdT~V4;9i072Anw6iSIzBLN^ourrd?Jf*<074>Pwzl+#IPV~6NN&7Zb{Z`!YmUu$p zELCh$Cb1n|RJaylS_Pot*{jG4l5B^w{{}uOm3GS%M!8Tj#@Azg$6K0U`L0c*8jWPN zvLNUrB2+{lVoRNbzPvOkVP$=x27!!J#Stb|6<4P=OrQ0=&Yqh{JUWrvH5KGS*Zv4T ztbuhF){<`%84lJNm=PRsbyUz}=1J;0lv~MVU2s@d+}IEmq|!*9!HR&X$2p~}O09<^ z0Iq#MmMf#H0rK-0N*@<`tz Veg%3A&U?aW=|GY7j5|mgW)bBX$q`sTIza+mWMYQ-e8>64SV|Jj Fi1dR#?7_ef)!LW6M*QQwhqRi<9QmwAa@cQhB1r^HT_k9u ztKOrH%_vk9Np^+F4AmixW^A-4>4LYzf`2@xKMQ1|%}YqMCWKFPMskLF>&n5IRDqw# zN^XYb1DukrP^$lmT|C2u^DP>TWcOW m!e0^KFx*bWMR%JiA$6YW%;Aua zuPi%vc+S?OnUXBb2cnGlL0QIbI)f*M?V`3wRD^NGq5&(5oyvw%G29HJzvyHMYvFMQ zv24IX%P&52+agq63dO7Qd+Hp5R-Zsq@um=KGL1XdC1=O^?Seun{8mixIxRhPiey#v zB-NaFRx-taWC(m%({h8Ex8T%d9jIOQa;|Lp#=>AjMXF6+!DFi~NWfw}xYKG`G1k^V z+5E`#^bfI*O)!Xx3`9fqS5(}?fH*g$w_XE(LW4HInFY3kQEd3eQo1>7oqs*{1EnDC z+YM0@PR~!$Nr(JJ_}&I!H$a8l<~JEoxs&*^bO+o+XQz};L1*Zb0x4-!c%iSxuo?Nu zB2>00`!)cmyhGQ)^*Ny(jMK`gt)coI*3#ckB KLlDPr2KWqeptr osh1`=FN89{cg?%xfYzskDl)Rcdc2^x`5}Rknb`Ib z)^4z1rdbhu)KRcq!Pug_v&QIM`Oy*6hXkaVv*%4tccy4c8o3RKiZFcLSNy#%OOeB= zJoz^yb4{??EU}F%@(v~iK7vw}aKw~NNMzo$89C&w#)}n)Z{s-~VMbcZeh#_*XFtWA z9>C9BLNldLII#-b*SqisDUF`|BdVmHJ^P$Sn>1Qr<();w&9s;W8^W>b-o&9!-L71o zt-IGNr<}BT0P`;;FC+#V1Ajg5xkGZTT|s-Q1$&CFvv2q(s4V@g*t*#>zky4b({N7_ z(Rav-cSM=1?3|5m@bxGUpVxwM{xa&V-l(jM99^k22FKM$5DoL(rEp?MeZE6)yo|$6 zD_E7)S3pncDcv{IdBSaxU1@q?d{AN9#st_=WffpE7Kn;bJWtJOKTdR?^b8zjBjsO2-u9MLy2F0$B|G9{zu Ad0wR2i|p?_!cve#cQ z-xEg zQgIeXhL1o*h;aOdc!%KUN1Kz`G>@Yu)BKaOz5RZg?>6f(*TrG##pQ|eE8G)tA8SZh zhNAoauM8YXco0C6ol*jCT$6&}@ZJ-wcYMLUBj4bqSdW}|Md#3ZUEMOoTF$>D2vLkr z9oxyGk7X$9+$bDCJAemefh}aS_-XG)RfljOdrbnX+AwVrYgBI+{q*O~f_=V$q>}^W zaZ9QiI&b=%y2+@VidaK_Y*9Ms%2-p*ajK|zHk@VFB!eh3czr%5GY*A6^PLyqxpvwb z$>N|>^QZyOkP}FGk6N371HG>0YtKR+6I#8vS&qNel)Gl*BWhJb5vOdb{ggl+6L#?p zlNL3(luEsj(-v%Fsa+|Lv*1tdUjetwYju7*UXhtv>#zwv>a3b#%~5zIZ0l$uA)*(} z^F_6#BN-+wFllFtrX4~2K<5c?o&{Wz8J;XR!A*&5Obfo07Mht;B{f-9+qd|>^fW3^ zOV}|X`LAS2yo1Nj%rd+bX(O!laWLzg$c=HZZXF ;d ftYqunwpR@N`H1wb%wGoDUe6{s!m_GS!EK6Sfl-py=4rkbKV=KS8~sd?b55!~ zo%*{;kJ}*!RMnr5T%dy<)x1(c^5%>~?7tl4`OWqvLTY~luEFypcCmTK?4r1-%#n7d zLt 4QA@TQ3~9-+*(eN7@77&^Z!xt3(w45b(_B>GKEk;vHFQb3+=jARvU#B7pAn-eU=uP@iZIF{wbIFh955CXM=r!a*v-Y zR#mVC%#K6@XH#a|Dl7Fv5GvdYWtPb)+N&4qe6S{wa5TsLjeu%x#B>0gSsM0Ky00%g z4xX6>EAWb9S|KRA?68kJqn=b!cZ)?VT*#`*n2Vwmvz$R`p91K>eF-26k}wgmD6)+D z3yr2|xmHioj{?ED`sVi71awDTE368T(ObeHfWUgXLPxD8B<#FL*<$^#uC}C_ wU9NslvB zcR#L6y{LOk0y$H_S9k-z$*`l~b4>8G;iHnZH64(vFwq5voHR8fPGue3|45YJOpkiv zOnb?;PWVc<1ab+XDka~+cF}HA0a?sY#Tn};iEPUZ7Locik`%h>ce&1ral|J@XR9Lr zy1L!M)vW!gpMu{c#qr!+D&|;)-#odUP@Mg^nQ|RtO)Oan)@p6x ;?BBT?;C6Kc69EJcV?baLU~@!6LQ7iQeW z{32IM840!eUHcXbPa<$McDlU8_&TdS _kd0#p+-}8guFg?HE?^z@q_BvIIp>Otkb**N_=;I^S>CE%HOS=bZwGH-%5Jub zK;%>A(oo_zP2_4M>r=W=A;O6nbm 7}HhB;Q|4xk97mDP9&7&!gG15UnWND^!LFc2XF$`fWr065@Y?-;;NW?yV<5 z;t_RGSeo2mhG(RAW+HLCh%z2iu!D&EOl4T;`a!B7ivL`jGeHRW1v&HrN!mFIt;lgj z7Hi&$eC1*-aob}h2LA&lp$1=BIr5~d({9DF6|1NMg1$>|b>=!Q4@qA&3Qj1BGA;|M zi9L%Ym=A<-Nm%7nH$G1%HP%k%SX0fqoRUSrjGFv(!#tc6+W)AkMvQ|xw7-4z=$mr+ zyMDb@;{y?_uLrJF1oVZ;z@#L$WT|sr!KkPM%U|TU&voquM-VlqT#brps~73cS6>hP z hpTW4hWqrFq@dtPPY>>-kG|3STI3((70OL}?9=Smg4Z^d1NeqF(7P$t)yzv7Y zg`PkAL_d&(qJ*N%Um$sS)M1((>4lK5HP>_26rB N1{>%yfzZe!ISS!HZS?A)Z$faLanTANh;64U@> zGMm6s0&->BjQUxAr^NqKG_|!1((LTjdyvIb>_u!MC2< TU`>B zaAn9A-Kkw%Zn9l2_-+Lb*Rx(9=jR~~c2dzE*n$>Z<<+U}sQckbX~~pBg3tz7HI>05 zp4=%a8JT}p0$jO^bvi`vv>dpuxWAj@Y2#O)`>VMHj%0 OKjDHRZFK#ACQj}vXwyv&kv!HBVsyNzLC&OZ| zt6&W=O$*v)molLo$dh+Q66Hvg(?bF$cKzOTzc;{JE|BSWW0wMPird5%3oHjYTx&2M zdRDCwvF=UE*~;2+k9ns3s>Aw(WQH^>heu;3NX@G8*RoPm)`cs1FT-LOXSQt(*a^~S zH0ke_=dQ~1T-pl(x_sT+lu$@ep{Ix#L)!HnWgX=c;9B$UV7jrA|2k&GM^6dX7!TX_ z)+ Wr?8kQ<7JXW;==XiS~km#NnHCq zVS5Ecjw#=D{F9NOWx_q1