From b8ecf7c744109fa66f18adda0a6bcc3c763f4d69 Mon Sep 17 00:00:00 2001 From: prod2 Date: Tue, 27 Dec 2022 23:56:54 +0100 Subject: [PATCH] initial commit --- display.nim | 217 +++++++++++++++++++++++++++++++++++ input.json | 8 ++ input_type.nim | 11 ++ instruction_sets/any_bit.nim | 105 +++++++++++++++++ main | Bin 0 -> 222344 bytes main.nim | 67 +++++++++++ map_type.nim | 54 +++++++++ mutate.nim | 14 +++ score.nim | 38 ++++++ select.nim | 36 ++++++ turtle.nim | 75 ++++++++++++ turtle_type.nim | 13 +++ 12 files changed, 638 insertions(+) create mode 100644 display.nim create mode 100644 input.json create mode 100644 input_type.nim create mode 100644 instruction_sets/any_bit.nim create mode 100755 main create mode 100644 main.nim create mode 100644 map_type.nim create mode 100644 mutate.nim create mode 100644 score.nim create mode 100644 select.nim create mode 100644 turtle.nim create mode 100644 turtle_type.nim diff --git a/display.nim b/display.nim new file mode 100644 index 0000000..0f8c7fa --- /dev/null +++ b/display.nim @@ -0,0 +1,217 @@ +import input_type +import map_type +import turtle +import turtle_type + +import math +import sequtils +import strutils +import strformat +import terminal +import algorithm + +const blueCutoff = 0.05 +const cyanCutoff = 0.1 +const greenCutoff = 0.205 +const yellowCutoff = 0.335 +const redCutoff = 0.505 +const magentaCutoff = 1.0 + +proc setHotnessBackground(hotness: float, maxHotness: float) = + if hotness == 0: + stdout.setBackgroundColor(bgDefault) + else: + let hotnessFrac = hotness / maxHotness + if hotnessFrac < blueCutoff: + stdout.setBackgroundColor(bgBlue) + elif hotnessFrac < cyanCutoff: + stdout.setBackgroundColor(bgCyan) + elif hotnessFrac < greenCutoff: + stdout.setBackgroundColor(bgGreen) + elif hotnessFrac < yellowCutoff: + stdout.setBackgroundColor(bgYellow) + elif hotnessFrac < redCutoff: + stdout.setBackgroundColor(bgRed) + else: + stdout.setBackgroundColor(bgMagenta) + +proc printHotmapLegend(maxHotness: float, x,y: int) = + template line(num: int) = + setCursorPos(x, y + num - 1) + template showColor(col: BackgroundColor) = + stdout.setBackgroundColor(col) + stdout.write(" ") + stdout.setBackgroundColor(bgBlack) + stdout.write(" ") + + proc writeNumber(num: float) = + stdout.write(fmt"{num.int()}") + + line(1) + showColor(bgDefault) + writeNumber(0.0) + + line(2) + showColor(bgBlue) + writeNumber(blueCutoff * maxHotness) + + line(3) + showColor(bgCyan) + writeNumber(cyanCutoff * maxHotness) + + line(4) + showColor(bgGreen) + writeNumber(greenCutoff * maxHotness) + + line(5) + showColor(bgYellow) + writeNumber(yellowCutoff * maxHotness) + + line(6) + showColor(bgRed) + writeNumber(redCutoff * maxHotness) + + line(7) + showColor(bgMagenta) + writeNumber(magentaCutoff * maxHotness) + + + +proc displayGeneration*(generationNumber: int, timeSeconds: float, seed: int, input: Input, map: Map, turtles: var seq[Turtle]) = + + # SCREEN INIT + stdout.setBackgroundColor(bgBlack) + stdout.setForegroundColor(fgWhite) + eraseScreen() + setCursorPos(0, 0) + + # STATISTICS + let scoreCount = turtles.len() + var scoreSum = 0 + var stepsSum = 0 + for turtle in turtles: + scoreSum += turtle.score + stepsSum += turtle.steps + + let scoreAvg = scoreSum.float() / scoreCount.float() + let stepsAvg = stepsSum.float() / scoreCount.float() + + let variance = turtles.mapIt((it.score.float() - scoreAvg)^2).sum() / scoreCount.float() + let stddev = variance.sqrt() + + # PRINT BASIC INFO + echo &"Generation number: {generationNumber}" + echo &"Computation time since last stop: {timeSeconds} s" + echo &"Seed: {seed}" + echo &"Population: {turtles.len()} turtles" + echo &"Mean score: {scoreAvg} (in {stepsAvg} steps)" + echo &"Standard deviation: {stddev}" + echo &"Top score: {turtles[0].score} (in {turtles[0].steps} steps)" + + # PERCENTILS + turtles.sort(compareTurtles) + var percentils: seq[int] = @[] + for i in 1..9: + let index = (input.population div 10) * i + percentils.add(turtles[index].score) + let percentilsString = percentils.join(", ") + echo &"Score of every 10%th percentil: {percentilsString}" + + # CHOOSE NOTABLE + var top10Paths: seq[Turtle] = @[] + var notables: seq[int] = @[] + var i = 0 + while true: + if i > turtles.high(): + break + + if top10Paths.len() == 0 or top10Paths[top10Paths.high()].score != turtles[i].score: + top10Paths.add(turtles[i]) + notables.add(i) + + if top10Paths.len() >= 10: + break + + inc i + + let notableString = notables.join(", ") + echo &"Notable turtles: {notableString}" + + # HOTNESS MAP + var hotness: seq[seq[int]] = @[] + var top10Hot: seq[seq[int]] = @[] + var topHot: seq[seq[int]] = @[] + for i in 0..input.size-1: + hotness.add(@[]) + top10Hot.add(@[]) + topHot.add(@[]) + for j in 0..input.size-1: + hotness[i].add(0) + top10Hot[i].add(0) + topHot[i].add(0) + + template populateHotness(turtles: seq[Turtle], hotSeq: var seq[seq[int]], maxHot: var int) = + for turtle in turtles: + let path = turtle.path + for i in 0..path.xs.high(): + let x = path.xs[i] + let y = path.ys[i] + hotSeq[y][x].inc() + if hotSeq[y][x] > maxHot: + maxHot = hotSeq[y][x] + + var maxHotness = 0 + populateHotness(turtles, hotness, maxHotness) + var maxTop10Hotness = 0 + populateHotness(top10Paths, top10Hot, maxTop10Hotness) + var maxTopHotness = 0 + populateHotness(@[turtles[0]], topHot, maxTopHotness) + + # DISPLAY HOTNESS MAP + echo "Hotmap of All/Notable/Best Turtles" + + const yOffset = 10 + let xOffset = input.size + 2 + + for y in 0..input.size-1: + for x in 0..input.size-1: + let hotness = hotness[y][x] + let top10hotness = top10Hot[y][x] + let topHotness = topHot[y][x] + let symbol = map[y][x].tileToString() + + # hotmap + setHotnessBackground(hotness.float(), maxHotness.float()) + setCursorPos(x, y+yOffset) + stdout.write(symbol) + + # top10 map + setHotnessBackground(top10hotness.float(), maxTop10Hotness.float()) + setCursorPos(x+xOffset, y+yOffset) + stdout.write(symbol) + + # top map + setHotnessBackground(topHotness.float(), maxTopHotness.float()) + setCursorPos(x+2*xOffset, y+yOffset) + stdout.write(symbol) + + + stdout.setBackgroundColor(bgBlack) + stdout.write("\n") + + echo "" + + # display legend + let legendYOffset = yOffset + 1 + input.size + printHotmapLegend(maxHotness.float(), 0, legendYOffset) + printHotmapLegend(maxTop10Hotness.float(), xOffset, legendYOffset) + printHotmapLegend(maxTopHotness.float(), 2*xOffset, legendYOffset) + echo "" + echo "" + # FINISH + echo "Press enter to continue." + discard stdin.readLine() + stdout.setBackgroundColor(bgDefault) + eraseScreen() + setCursorPos(1,1) + echo "" diff --git a/input.json b/input.json new file mode 100644 index 0000000..44a834c --- /dev/null +++ b/input.json @@ -0,0 +1,8 @@ +{ + "size": 19, + "treasure_count": 7, + "lifetime": 500, + "population": 500, + "instruction_set": "anybit", + "bits": 12 +} \ No newline at end of file diff --git a/input_type.nim b/input_type.nim new file mode 100644 index 0000000..a6594f4 --- /dev/null +++ b/input_type.nim @@ -0,0 +1,11 @@ + +type + Input* = object + size*: int + treasure_count*: int + lifetime*: int + population*: int + instruction_set*: string + bits*: int + + diff --git a/instruction_sets/any_bit.nim b/instruction_sets/any_bit.nim new file mode 100644 index 0000000..0f29d99 --- /dev/null +++ b/instruction_sets/any_bit.nim @@ -0,0 +1,105 @@ +import ../input_type +import ../turtle_type +import ../map_type +import bitops +import random + +const opcodeLength = 3 +# 3 if there are 8 different instructions + +# anybit +proc genAnybitTurtle*(input: Input, bits: int): Turtle = + # generates a turtle of bits long memory cells + let maxAddress = (1 shl (bits - opcodeLength)) - 1 + let maxValue = (1 shl bits) - 1 + + new(result) + for i in 0..maxAddress: + result.memory.add(rand(0..maxValue).uint32) + +proc executeAnybit*(instructionIndex: uint32, turtle: Turtle, map: Map, input: Input, bits: int): int = + let maxAddress = ((1 shl (bits - opcodeLength)) - 1).uint32 + let maxValue = ((1 shl bits) - 1).uint32 + + var newInstructionIndex: uint32 + + let + icIncrement = 0'u64 + icDecrement = (0b001 shl (bits-opcodeLength)).uint32 + icJump = (0b010 shl (bits-opcodeLength)).uint32 + icMove = (0b011 shl (bits-opcodeLength)).uint32 + icDoubleMove = (0b100 shl (bits-opcodeLength)).uint32 + icCond = (0b101 shl (bits-opcodeLength)).uint32 + icNand = (0b110 shl (bits-opcodeLength)).uint32 + icXor = (0b111 shl (bits-opcodeLength)).uint32 + + let instruction = turtle.memory[instructionIndex] + let instructionCode = instruction.bitand(icXor) + let instructionArg = instruction.bitand(bitnot(icXor)) + + template addTo(target: var uint32, delta: uint32, subtract: bool = false) = + if subtract: + target = (target - delta).bitand(maxValue) + else: + target = (target + delta).bitand(maxValue) + + template nextBlock: uint32 = + turtle.memory[(instructionIndex + 1'u32).bitand(maxAddress)] + + template mapBounded(i: int): int = + max(min(i, input.size), 0) + + if instructionCode == icIncrement: + turtle.memory[instructionArg].addTo(1) + newInstructionIndex = instructionIndex + 1'u32 + elif instructionCode == icDecrement: + turtle.memory[instructionArg].addTo(1, subtract = true) + newInstructionIndex = instructionIndex + 1'u32 + elif instructionCode == icJump: + newInstructionIndex = instructionArg + elif instructionCode == icMove: + let direction = instructionArg.bitand(3'u32) + if direction == 0'u32: + turtle.y += 1 + elif direction == 1'u32: + turtle.y -= 1 + elif direction == 2'u32: + turtle.x += 1 + elif direction == 3'u32: + turtle.x -= 1 + if turtle.x < 0 or turtle.y < 0 or turtle.x >= input.size or turtle.y >= input.size: + return -1 + newInstructionIndex = instructionIndex + 1 + elif instructionCode == icDoubleMove: + let amount = (instructionArg.bitand(28'u32) shr 2).int() + 1 + let direction = instructionArg.bitand(3'u32) + if direction == 0'u32: + turtle.y += amount + elif direction == 1'u32: + turtle.y -= amount + elif direction == 2'u32: + turtle.x += amount + elif direction == 3'u32: + turtle.x -= amount + if turtle.x < 0 or turtle.y < 0 or turtle.x >= input.size or turtle.y >= input.size: + return -1 + newInstructionIndex = instructionIndex + 1 + + + elif instructionCode == icCond: + # jumps to address if the next block is even + if nextBlock().bitand(1'u32) == 0'u32: + newInstructionIndex = instructionArg + else: + newInstructionIndex = instructionIndex + 2 + elif instructionCode == icNand: + # bitwise nand of the address with the next code block + turtle.memory[instructionArg] = bitnot(turtle.memory[instructionArg].bitand(nextBlock())).bitand(maxValue) + newInstructionIndex = instructionIndex + 2 + elif instructionCode == icXor: + turtle.memory[instructionArg] = turtle.memory[instructionArg].bitxor(nextBlock()).bitand(maxValue) + newInstructionIndex = instructionIndex + 2 + else: + raise newException(Defect, "Bad instruction code.") + + return newInstructionIndex.bitand(maxAddress).int() diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..68be78c4aab993f3a3d59b607681a9a9fb376cb2 GIT binary patch literal 222344 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
`NhHZR8Uou~f%en~ z11TS$lcW6xWU6T5Py^zB=Bx7;bjUtc|?#Yoxy5S!uBE=*>8ir%E<&qa|F<>dm}Q)x^K>??t!? zjDgiNPoe3clQJc%IaixmGq`>i_P#E&a`=}{6t3DZc;oI- zCaE?&7^qn3$IXUUIk1VL7PEH-KZm(_ z*k(6)!S0%M_-!r`ewUFnZP(jXGBhu~H>)=ds{lFCZDXj-5s9=0^FeHO^yB|>gfnqZIo-MeLTqje^s098oHTRbB+|^azx`O_jAQx z^Y4c&D<%4UU@nm|tj5={V;qfl=;i;0@r@?1yuw$&VcNlm_yJkqaV5M*y4f3kbTB{5 z)9c7d_+mC!vgPGfG*@EKsODH>RmroH4`bBo4`#VNF%n@J=R0Q&1ur)h*`urrZDqW?wl4{j4y}uT3v& zsXY$;s$--)zO3Pcoywd2_UKH_!@SuY+Le3vFT3uoSm~Ch7%VQD->AFG2W9Gym42WP zp$(#THGU~M*td8I|Gj>H`#YMQcc`Kt*6#-)}ri>}h<#{BK3D|A+MZpR(7G ztKT1w2;r3GlYdyhf93)ahV-orQEYo2;795AS5#|yNx$D2TU@Sw|LveQ`aSU|gkSm8 zrL8B$TEpB9FV>SH|H-$7-Q(q+<~7N~$*d=`bL3c0J{IRlPV{zQJ^3$8gu?DMta3Vd zq!8RK9wGM%IV0wn3g!}-JUP7LIJUiDE*X2Bg%2PiEniHHAlD(z33_wPeDES|Ak#khbF}tqya{1uEK4`oBa-A-VI0T zD)|bs8&R;unAzW2+U@{sD^s)<;FUxHTg^1Ap z>8DER&j*?Ql%I_<)oK>C_(}_6I_>jKof!Gqx14T99JHS__(mg3D|&T4P}YIz`-?!H z=>FSH$TG>xdlh2=*u{7%;v%`a9)f3lubt)9m8|X6nG`S2e`f90)^cd#veu#6gOK6V zk82MUX#yz-@>6=_eKg4iMkV~Q^e{1_9EbJGQgF-{~y+&f7ZIv8ilpdWt`=0owhV{jC$LFXC4biHuhpJpnogn5+VdHf?wU_p$);EA9g<dy(XP|mxKr%ukjbd zkj=sZ6S1Fu z6s)}D^V;j|(Da&95?~$MO}(`@HMc#ShQjvl;HWs(#Ay2t zy=qR=Xa{>x)L&2n4yUE@pTkdb-C=U&mmGWZ%3+WrVoa+)ky?VKChDfuzz1JwBsKPYYZ$&k?TIX+eSILsayQveOgwLkc;1f{{LmLm(avN^uVTd<- zcTOg*sJ#$NNxPx_-l^o)`TQ;3^mq7JS+d2uNk^usRsNSv@`0+-)=-lYMHTXTIte+h zaKVR>icZgICdqZR{&MZkTqHg;fG?dEj#*(nL8>iHJ_bm21IMheF1^(6_4xV)eqq1$ zW17c4muiYHT<}@fe&p}}$YTrR%k^b>s#`c75(;leb`3W=5j3T@a}L{|Mrz9U=N`w8 zZUmds$M8W6XkZUIFu46zq;8d%kY@o8$|aBG1wYXT-J*8|50W42_lYKl$)FtdDwbMo zt(KrWLmkfF&m;auwqnBe%g-df3ybK}T5Qscin%daGi7RI>XE^8K4ceMP>fVzGsQ;67osVRq zY54#z-e#lLjqk=+Q*h8l&_ZkK9d}-wJ2lY$b;14joLo1dL%dm{kpBYe8v8>BKFt}B zp^YDVO`0^-x@wSH?80tCN4^empIgnAyA0C%<0u;Lv#%=m?p|CTA;OHE$VgOM=eeIA zUqIJ+7Ae2(;;NEsi|Wo*=kbTU5&JJJA0*c8SFXr08ou5Y@zpsidWH{baRWUBDZ)=6 z;_rh4sIx`LTm-7-g>=0rziR(Qa(tY5BYo%gX{}3#BOAv`-+zQQYJaWug!P4E7+HGO zdIf$=(k?%fogz-sml;5x7y9FoPD7!)`8}PmS;8h;;bW|0elP6W61s0)7Yf}gbA;~O zRRQbJ{zZ|f>t8^VO+rb@}X-i%wV5aAu&6lo5r z#A|$<52BO{jZ#L6KyZg+hQzz{5}_PKwCgF?R4OuLa>ShlB7b%QlO2|4_Gm*oXaU8V zRA2h*iFq1Lbm=8>(WH7ta#VUgz3a`ar|;pMDnRVS|NXCYj4%O-gOR#sT78ws(qvlY ze}qJ}y)Osy&qhQbU*{Xq+E@Qu{2>m7il2Yx7PU7_?Ria#rTGJh{CitO){hewuB~&!@a7PKrG~)cwnZT4J(xvl)T~_H7Bz=w=qZDrslN+x6Cl{cN`Lzo;ii}2MnD{^ z4HJ!`WFlmO_{-x1{UO;PWOoS$e@H>>5GXxEymE}5dk}WIO7i)bYV0E1L#871< z#lo_N{KP+@zt)@=bZVpSV^wBT->>KgI4}66=$EM_IsCzn$FvM92Du!|>*#eGR;VSm zK03CwJfo!l; zmm#Ir7Z4kP{eAPeTIW!coa*6BgO>O zlXpWwC1&{|9iA>0dRZeVy>W7hg7H9G^NqgZqluR^jvO|kX|T~)q`#Y9vM%UDou)U) zYTSdDoUv58ad?o@J34kyyEf{Hjj+4+Oseun>YW89^&{7*)8O!whz0_--v!I!@FI6IwktQV;3R3*+coPpX! zk-XYcXc7@(Bj2X_eh+F(J(^wra_PyRd3;V&&i+!FPaN&f={Kju;_p{3_@MnM$qt>_ zNjRNjN@Z}gGP6>6eNfqlU~}qRT$QMdoGo>g*|$o@>fZj9aK~8b$Oq}+$aB4>BN!H^ zVSUjHHDoIiS5|*Omm94;iB4qlA3=%>T64d*(JukvU`2Fml<#RZdb~mk`rxmv}C2LpgSZ+zHnePW=fd+aCRdGKv0w=f|%=r;e3=^9O^>xgsAO9s3ezTomG(4i@Uh zFfVqG-cbK;m7E*x!!0*S9%7|WsbpQ9bNrUdqmg{s#GQNX)43)uWk!KBF}~t8#Y(5? zGeS_^0OPeA*;)LsI=-26GV8hb&^9Ml`B&I_f0nY2JhzUUGk^!ne$ADvP&}nKD9je^ z&w+`>O8Z!|A6c`hKcv@B<;8-EPfKPY$Qjm`Piy839=*tNAB&0go9_$E`JVN==ly_vrS^XHaRVqV{# z$it0%VPh1oHe@u7p_)0q?5E87x|n+s6&s!NI7rxrsBP*$QT4z7Mp%E}ZR_vl>Stk~ z{*oahy}O&kW?Vn~hBoaSk;d2d6KlJkjZ@2)r(3>o+m`>#7kV~~jk=M@3!^dQNBewV zQ-e1}rFYs|a5IJL)3;730An{m17GC(Phc+-bQpQu;AH&={dcZ`JFIQ{)$DsiE*9rc z)(&8*ukmXQp4=+@`wmvg)Z&~K&HQok`e`$8CJQM(oJ|9hgjl<56um~t-|BDe>mjD6 zY}?j2nd+>aKOu0hXu0&4DNae zG&YM`p8e2jd5)j?BWXSuKsD*{aYchAHE{dpgW&e3L9h5V1&{M0yvRIl=lVnDsNRW! z)WKQS8Hsx74%SXk=Wbsac5ckJoqLZjbdK{N!$&GU-5MJY`Y?K%ehpT?GdaPIQt(wnu>6`eCBoa(dr}{Jv3B zGEoj0t=oWxjOOC|42Fi-$diA_rqrOco-VqdkJ~}U53>A1$t!+}11J5~woR41276r( zL084UNxh(aix35%?$`afk_okO~zlTHej*;EMSv6jV~m?081XI?4RzBJ_HZUAMDM;4Fx$Ec6($BwQc=>OQ! zsp;wYmZ@|&?zN8ZxamB@2DP6CHGqs;{i84}2H3XArSZxvH@5otm!l|I;DStr?a1$c ze*nqT8N76RZoIxvUz4>G_WwL+sbvN-I5t#c!=chWu$i&aB`q4O7hXw^m3(-%9jjfq zE=^~m~aHnM*ITzs z_?wmOhmLl$uQEQAsq{Wwby#PuL|?t0WHh9&QjuByQ>?}EQhGCu*l-=ae=LLj=`7fr z(b5Qv{cSTj`jFP(AGh5{aJkNpX(HX>pF<15Oii%U^wg-q9?DaSP1w)`Z1-4$%niEa zYnY7_VF%+p$uh|BWi@W2V{W3=I^*t=*4htII(Yn@X*B19|4uP2&GBE;&r73bwO%_2AI>Q}zFeaAXlk^e z;>~l`yOiFKo>-pe?NKlQ*_aH`yi#7f4T&i7c=Md*6YS$p_$Vpd5}`oy7r7*%kFggY z%Z|Tnq!FvH;F-IK-!wpN7d*$K#6})lc+?+{FNBYTKl&Yypa#EW?VpB30TNH^i#LuG zS}&%(UDz;jCpLOB<*DQZGemqnW9m4j_AJ|O+`pYNqN`wlXDO)V;tIHhkiA7}1~#Y7ud0_5by4z;I%C+*T# zB`<>*aY+BvKg@K53tR;^D_1^Y%D+>G6T|Ts)c&MaA)V%#In`=e(#qAFBvmEG7RqH8 zQ%dP4oQ(pePxp-Ra&`(u8^q9Th-Vru_SMS6TD-K!UV82_` zyPtDI4sv`VaDjNCa_sl*YQ`B~8>W)+t>T?4*!`rELIssyqW(g-`5N_Qqr7noygqDR z4u~dp#}eYSQ@{K>sV&#uP8D9$opb>Ad~c>s0a;Jt2)%S|8UmDrW30ELl;C-cG`0?v z{=)U~m+E63x^}GeAk|ezq&RTyhP?(zt}6_>Ig_YqMV)Vn@Rt)+VQRZ9d=W=*t*oOR5-PuQiI6!GX$}j zQ(r(|Cmk$i!R!lQ)j5uKYO5cLwRQI}x}OFx+^-k1>m0I+1{;J`G~!~DBR@~T;J9JR zNidM2Sbbz&-7)B>`L!3t>N`DE*PG{dwI{^tJI}Af-2$U&Lo?xrVJ`5qlbDda9md-L z=2EymSU-dA=;X$)%sGBOGbAs_CoLGbk3N)XXBXV(1)rbLh9lw6U?IX}s9@(ltITnp zLVgTpjWKyOIk8yu|JTj*w`GVKEch)WPu^GM-uR(nB2hh66U*}yL?zbQ2l;3V+}eEq zBbmLD6PZU#{hipQuu;RH)G}m%>fpDx0QBE69sN7`pw=BF4wR9cf@Y|Mx%1YWWKZ;e zn;*aDTcWF%l-p~Rs-Y4g&kFf@={YX{xyrv5wUhbp@?(M4n&t9YOFOu4DmWRbHfvu4 zOW%W~uT14loYYq~8TMy~<4Uw>@(B*!<)$o$o=XHbkTz>qYS^N81@A_iVMlZIa zla@%&S!Gs*Jo~yU`=@0!pzDIN^rjKp#drH-_d=dnkz(^JCcJ44(eeQ=6=8vN?b})W zqG@`7%22OjlX^$G)8QTLRe4sZRl+a;56; ze=66>#-_Q|i@xzFv=}RW<(Gp0e(dY*$Ci1s zn!VT^2E|zL=IB%#9!!E5$$8NehV-4fYi*gj+9o|w`uEoiuE+GF-73Es%^CZ*>i3!k ziMUK8Eun^HsM2LR)PSf`Cj0C)byv>zL&|Cn1r-?}IIQ`hWVFBRDMSSS)bl;=nT4v= zzm4ZuX$RF)`zjfpBoX{+tqh4xW2Lh!V+THkD}Hv|R{2lE6*X>Ye&eV1 zu!NOqd?re7a82K+rjsbGvC2<8~_> z{q`HIo!|nHnIllniXJ*)K+WFKIT}m;Vo+c$K62}$8{dq2(WQ$_k~+!CYBDau>7h6{ zctd9Vjl*e6zm3paX+qrTCiEsJ7WoJ5!Vo5LS9s6Us81ZwHaoGTk@ELZb_>17x^-Ug zWf73h@>Bez=AIWUf(-n5{F8b(7ycjD{sUdZ_AmJH?O*HK9~-tmMD3rrnSs!lF|8U!0(=tsph<3YZv-#^VR-EbYrk0vrm0@_U>wB<{O+@NVW`(0*dQYME6LuI1-UzO6* z5Ce_0l;?k4jo-%f`|su1x)zGv>Gt zY4AG@JZM5^cdql|V);Bwj6ky)d#Ysb)bly-ZqK91R^jWDz=qyi_o5S{T5q^dO!>Uv z0pzdrytX}(I^%-F!u++%70V(sa<5?k+oM1Jj83lzRPN@BX+y0 z6~Mkf1NOkKUgJVado$(C)!6Jc{(;|toxLV!@3b~Qu+?(Ktqw-73CkS#F*MxpXn+HN z_@`^(Q9)9&l~Y7Y6=JBXQ5%+OX#l@!15rs30q@qjw}V}I8#Qa-AqZlw50fv}DtBaU z9T*ANZ!x(_`GZ0B5~Gp4r9*Cv1og(d?cKHL~JMhbpSujWZg_Rq6s zhSyl_MAeMU?R$iRix(~}Ysb{JKC$a051!n*g+Z&I;#PlK>@6XC278+@1z1hnVXxoz z*xPqI?3vt~S%1fBMNsF2vm0sLKZlecVjV-jj(vZG*L0zPg5Nky*5|Y@Odb(-E5ByX z?b`RIv39ol1*%i?qayBeetY0hujxbxLcPv(YyX^T+Yp5p+fQ?H`vHpBR0XA|p}0qL zzQ*@vEE8toSDb#SJp}SQYvr^LWi_uGk!k4(tXWwETGW0U7lc(!k{z`4CndXG0JYQ( zX658@nw)YDbro@uE7WepKH;)VOVv3om9-&sr1fnHy=S@wc{oz>)CbcFV|T0s{sPuc zeNk^yw^X4o$H#`c33g%s_k0e%WJ3FQ=;^06fb?aLSn1YVKoowec;!~`G;o+Vvxk1m zyqV+p)xi^<88~OhGf?ZD!+%y3%pxqD3dquS*yGuI6K;DS?YJQ(%&as zyUjP(xW&VY@4+{N+MBtUS`31(cp!{4QDr(!IF^H1VYPj!))oCw?Zx*9^?f|zsiYaa zoE_U-;N9$tWoFK1m4U;lJqDId9hp4c;ciRkxs(UsAq!cm@bf=CTYgK&?6PBQ@s-xPO zHgfIGnglHWk`HLc(Q_OB2?D%cX?GKQv18hU$NBfFk1l9s{97WLdQGAu5u_CR>Gul* znuA&sGzVc~moo=r-?1uQN=|pbf&54tkLHyREWz>zG7oz05BW;V+G$OeQqc=Ym(<~K zkY+rsJq5DnyPGTNk@0= zKbZS&vg^;_ZGb-@3;YX$a(m$asbrW=aHkDsOh6zH>?GH(u^P4k>E$mQmpnvd|Mfy- z$40BcA<}CS|IH%vF$`JYg6H9F+4&#hx{i2JOY+^|uypLG{Vx%(a^cUx=e=rZdwiNhnwWT| z>VLSdv3_U!_1kUgJwJn&m?HP>pxy_S94-#QYP#d^!SWe=@*V#6{?0tQew-q#ezy}} zzSYy0deY+P>=S7shnfzF_}z1WXtQn*;E0*H10epOWPot9Qww7JlVCg`WP8@UcNSx9 z7TB7zv*Wuh+K|W`%G!Yk%tsos$J$goCZ}4713RY?cFkjcS2~$m7!GPJR)X|YK4zOj zb?HK0Ot*vWpo5Qw9pn=i#7rg{&&0yK`ML;3QHqOd2|RJ5HrF^Yxsz!Rk!g^jU2eLk z;FZ^tkaS=k*7ay<9_Bl*$u`RIeZ<@~+?l(6rDjT263)ZG7=kIPcLYXor(PAhyW|Zo z8RI3!Hfo*M)Sz^NyhM}ru609^-)I7QQw$KirrW=z{rJLZA6nDXw&bC#c};t&Bv8#z z)RW3-p9`Ys;rdp&;N#AfofcP4WA);;hu9O)RER^bX^AEmK3>HTd7kVRF}?NHTU9<$ zQ~YAD={vYk1#?*FTp1c~uEoVIU1#XdpB4 z$6Iq*CQgJ^O-U?;)27nTU|Ab}kS*74n{qk)>Lit$rE>7wG=;6efM8XJ6rEixrs-BA zi;a<+|M%PE?~;XU4fGTA-KPF)x5=N;VZ3QiD1TmnQs(KP8_9EdK+88cm)uIy?lyPG%&K(KO31H5(-99v`WQf7$Ti zs)oIL_HseXxU->->poVi-**!T*`w2Jog5F7s;M=E7E|Mq8GGs+h3< zy3~(uf@=~W(Ema!Bz@QIADS0*j>dbx5HF3_Nit^i=7c@FWzVINyw~-eVw(vz^?R~b zCGnw%n7ri_-^+V59;-8vs=V@KMK9Fg>pLPAj2$zaK7l4cw(#M*I09 zXw2Z7*NSO8HxWKlhlBM*2-}Px^*@nO1$|OHaX@79gv+o242TfmtE|^xyg*|h0#=Bh z&l_kx+6b3?ONDo^+{H?7unPTjZ`thb;5AAypwuD(S9tA`ew}TvJEvbCwAV=b^$vUOlzxq?=Z}0X zaHifUa2jQhIB(G$p7Vmy>2;rOUtKqD+?<_A^%}LYKuYbkbyrxNPOotgDOm3Zr1OXN z8QV2#_`C*3>sw?x#SGdzR=S58+RkZR%R?b~Y}F`AKNP1QY~}F!5OU0GvW;O2Bk%9V z?pUmJ@eQgmF0XUE)xD;}^_t+KN<~z&*gC}2@t^S3%{yG)7SFRe-E~~u)f0?{Fm-A^4jg_vOV1uf|3B!x) z`lq+G95Y!}K1Ww0pZDayC~(2tR{kwNf1XOS8GkoYo70n&*>yJ8qh-{rvH=t7YY!;% zW^aft__RYbadTO3KuG*1s-O7M(AT>xFCZ3@`Xm33(f=@{ckSE4XtWg6F?(xHF+Y%- zcq}}Wk}U;OHK+OGu`&DDNqMU*?;bo}?DFoG%}|tm{2jAny{q@nJl^Z_KBzh4>iui@ zh=0lVJbK-_&bFU|@%*Iy020`^*gc0LXS_o(4Zv`D^M4*m9Uy+keuo!(TNRpT?U{5Q z3e>47cE|8)oAjpb6|JR~O>+2|@S->Sr2K&ewbcVV){Yt2q4vyJ>8a8`ISNWi8){dI zI{at8gBlWHr6sRU`kNehI-0K&=QzyEHa$L^7#*~jMVM3f6+ojCr1yM<3(LLP_amXH z^!=C=c5QL&=z`$Df6-2+YPMAzn`;TW@WDS01ttwefUi@I{uXwokj@-NXJlB2fedRu z_}e0ldG_4{p4|6)SSZ?8Yl_ z;L&m#!gHnIc|O~I3xm=IKEd;s^N=^UZi~;1ecyJ0ZMRPMDAbSL=tXWgkK6 zWw~9JUC-J7zK)S#YoVy_6DwT6eQ_#$!gWP;uV&UNS)TM_>s3`^e9i@CiSd9iJY|K0ZK~^TN=RDb2s6Yzk zaA0q_-rBJRcE)ZoHo5Fts_>d_qm(y$NIrg2>MP(XdZ`O6!R{cs=yfbf8~w)^lvwF) zuF!>K(H77R+ZCSKwlD=BVwQ6L%N0D(J`Yg!5&tw3oXXsnox>^*QVyB2u+Omf)bjv7 zs}qr>1$!u`A2;YbyHdJA-F5Nz1n`;O^XqH!^BM_rFp6}Is}o0hY2q0@SsyWTXA+->OT@g|)1=bF=rQzOw5m*GPiRee^zgV*#|`_2i_lC!|Pu0Mcf*8U=z zxV{ish3yoAYltO{d%!$&Y2se;jGATT+q?4I@pTd>%Z?ZpnM-YX-kr_f(1k(0@@4lM z6K5fxo~lau#lIzoLW7GSzchbIl=fq7hc=JW545@K0VY}XF~Ipy+E2?5-}S@yFHMLI zI%U59-IaeVEWg5i576W^Pq(Z8G51|T6W#X@7F+!v>WBJ&>ApWCP0$VB*}71|e~yJQ zR(gt_y{7r$*FygzBK0gSI7Z3ANetIhJmlH9ghyuA`4^+xK@i=@6MP2PR;_=d)%Wdq ztIrvPMDe##AA;o}Y9LWM)WJ54A8+<@e*;XNnp!Ai<3f&~xE#I09P-a4#~+nrilL}c zV?@x<){YbQX8otu4&Ub;uEl@%@0;Nwu&)Xtf)HFfS7LDdh{L2Tq;ePgO8UqumeU&l z3(i| zs+Eb{{}-ep=8#3FATRd&{9OZlRk~p(7}s5Ce1CqKK-&`!hw?cJ5c}i?1h08(kCF(K zSGHPB5j8@7%ZPNAjI9Pa?(Cwut1VN=F9Q@=`dygq#sp@ zE6jh;uKbaRD?P*pys`zE#XO$t+aD?+D5ft_Y zxnTr_(D^V2@L)Ff0>=;gH4{0dhcU|-t+YMokhNUYwbESt>(np&eIy%f8&9DliFONI zaGa#2Ec==zcbVN{Q}YYBh7*1mygT3FGkrhgznLHXuxG?d56})C*Pgl6q3LP8F?Jgk zep`1!BX>1x`Emn^x;=^)2J<8+lEIAXC%4jZWR z-OTD2J{9^0^ThoJSJ_A%AC3@%({vex75obXLu`(J=5T>-!1{0I%fbRTUk>@p4(5yY zTQl=TTc2&_3o%JFU%ct_^pKe|#mL{x887y-75ES4&6JG)7A6_iV{Gcs7Z$h-zj!*s zFZ!21P2-8~gY~mbu4DVOnSUE>fr$ZC8+sLg`2kDfCrJ0q$KY7WNLqLNhA)_xpU)CO zM*Qn}aq|&>(KhojJWoONAr_=>?5ZYKrB_*y*bF^H#NL*t{+pTMpPtVE>geI{$h<2A zyWBxq@{YJ}%#EYsH7LjJF-sJ1AOT(!jklLj*VuvQ*yMbq%q=V=Owy;G(ogrN^^=?& z@t=B1G=A7Iwm$55g_}hGnmPLEevN(vTUi>mN6e)g zlUcFXBxWnviUr%L80tCyug_l78ClpKU`WGj&sO;*1{*GyAjlk~t^;VM#ie6vxydCv zE#?Xe!&_}H2bV-a;F|M%9vX^-nwDivIPflI-~Z~I1|eSNus zHrt^I%=tS58iMS*d=T62y|iGt^7un+2Ys=gab{Ns{l1p;cS|~5Nkx87OS;>VN|jXT zcebR2B^{z9;;EUzy55rZl+o~0OSsY!I!^C-5f8Aya68}h{C*p_|6AW}hBxkum~MQ` ziT!f!3GF;N_Cy&*KgS$Nce+wEIE-BVHU#4+n^|9YZ{6nIHqO%P58oy2Wb>~L{=mD% zPYBLMBKMCcl0uNuQ(rwTfH(UG>FGx5^?T^4o6>gG)1bEOmHjsPpR^1!S$vcQ4cSE4 z96P4>p@Qe|Ka{kzjS+h}lC6K)77a4zu@#x90gn~efBE-*H(%8mzZP>I?!Up9x|459 z%kptV=ZXvtaFrLShBvhosc<7%<+Zzgd0<4o-X;{Muk)+naXR9uhV^cj>s>ZcV5J>; zEp3lEJ zOVBiB_fI4vS@OBcQoXhI()Sx#hMq2iW~^NK{dv{bxqjpEz4;e5`cu zOEg)$p>Jx4v*YXV?aDX9c;<>itONZ736v*I#MX4bn8AoD-iB%j<>1`$KuqsgOPq(& zJs+c~ME@dw{1nq8R(jXP8is4LT2seb&asqUh~7fRi}Yh765Q2I6S)lW%g)XY#Rl9Q zsVU>I#HLv3Syszo%E~@A-TMMl>{U$TtiphhP`51gUWR^MwTt{e5F9Y|jEm=&+0%^1 zrq*|zz!gd-)w9W08GoTX{tYf!U$SL40JYWNNc8XXcLCY`5PtmMtpS^gJ`rWlAuY7w zU6g4LQ`~55b2V8S@W-%20V=r|z&0M3YA|E}RW^0F|KTFxq}}?+@Qk z$X?}7{0Lf`k*U9|af8?RMn_h)?HbyFrg1fuq??7+3kuraLB^p#!?dg-&(OU5Sn1~% z0+-jV8UY1WFBiXnpqS8CdNw8wro>47 zfS^MEfqOMnXS@1JsLz{yCJqpMioZfYe|exbwsU3geALR`#gBg)TBkR=pqO&9jpb1= zHnF~|*QBe71?Rr2EqZ6^*7KZnQ@pg`OCIz5E12i8(ogm5HFc#o5>)#7Q{LLjsgcr` zN#`m{uW^iqUzbj0=4WR7AE#*U__Ni}FNeE2-l}+*j<+smJ0n(Frv~A52;IM-R)IKi zl^{9aL847Tda$$C_-C-ENXs^SUQG5MkiP^AQ{tFjj0@f_l+KWe-$5lyySr*`m+&v* zvrX#0{&C0-vC>WFT5oUUqr;L&SRibAU(;4$P7hy6o}~pZDW_llsY)$$r2?v`n11*_ zc^lfemf+H=Qjj){V>)FNgYU&Up5a?szQ{t@4#CB>a^QGtWwf>OjuGAYt`&JoRZKtd zG;4)mtJj6C)XhoV<@kZR#ZdM3KQe;v<;rzbPe6d`3_?^T%)}e5nk(jqJKYZ_~bi^AHT`+&35?;pqJqFbiS!f zv+HX7qwf*6ex)3BM`Z~EVW2}Vf7nJ75IXeY{I_yI9qr*SCMkH0)9Gb2Q4r@#G{Jvi zD56?gUVcyM`Duu8%ug*OjdYBj69l7w(87{5Aj2Kb$c79J~2 zSgyv0fhxQ@rV)^Z&=6nu-z9uqu59=y)*YOM-7i9hkCj&H6No}KTv8Rkn5E%jbw5#X z2_JItR3#|D(}G*mcsgDw+u*4^SX3yKefgGcD~qSM&)zYfb}ssnc>2(6KjY6&<0-BR zy>1r(_?sfEKcZMG9z44kSL>7i0dpl*dZ}e=it}}8!I`||2a|agkr(^(EXyF5MVC&A zk-tUkp^UNMR@g^S#g|ZCD|g4zJ=lTrPPPiRo+VHk<#ZPmlh?ogUHF_gyYy2&1Rp_u z8U7}HUE#?z8{1rJ!!wVuLiR>L5oDuy&Q?1Agb^ zNc4)Yx}Gy-@fU|<6wcR4M*t zR{j)#(i^#s7hj;l|A)OVfsV4s_V2LSD)>bOjSe`i1_=t70D(kk=|F&PXe26XR8#^4 zh=e329S9n+og|u`CcwCi=r|)TGlR>F%#4G82mx8$SQNw+bX2O13T}WX>HqI{tG@0| zfLWgJym!t!|2~lW)qd;Nty@*Ms&3KDgjyT|<5S-8VaLr64Vs0c;HZKZ$AY0`V0&TM z@P_dpr7&EuCQv70d^tF}0=A{MRN$qD-?(xw{D0FdZ5eInj+-hiRe0`)g zVpzr@IIfA}`}a7s_jw+YU&7?D>v| zq8{go4{UwPi6L#r8b_;<|2q^n;0(dem%YyVg%>lCn$MD~(0r4X=9YNo!&5Gjkl`** zKjg7-xbRKRvinbl7C((%p?xbZ23+-5l%c#lLM8pZd8__PR^RfgW?dfl3+;6XC<2~p zpCj^b@FBG%Nf;=vML4iXmzwF>fe3rn+asR%@bW|Te~>cvlPe621mYitA zK`rcMb;#K`+)-3Axe%~zVU-I9yH7#Bi~%c3kefL8W}Yq&$@3IhdUuNxc+u9o1d9!F z04{JhErfq#1wHV@0l4#>IQ>>q8gLbrxOn=_yR5{O?&{OWh0$er2fSa0n`51xaA#mHKWbz*t-DiokkWA6?rnObsZjCpe5G?TW+J{Vy3x|r z5PqQ}x!C_ij<^tCxJ{VM8@ejR8yfD4L^v0beyEyuLQT{hbBhE~JK?GI^Z$Uvkag+` zkeI)g=jM(e91rcq&r=>}KVXN%`zAtlzb>}|MSv_3G*eVffum`+x``mc_^s~$c<|zl zMq564@g}Gkw(gkh%~CM3FS}%9S(YI5uC+qZPK(?NM7cAoP z3+G=L8`=0mhnW+U%peio`ix?*@hyMl@b8-BuWXFa~TqJs~;KjSS^AeSVq z%0f9c-+L;z`<9>g;8S;n+fCn<0pUYA_n)O76KdlN-Rev{uSk6z_9$6)LGuOO-K2aRn4_GRQlx2Gm*3^CE77lsLHhu|w2mrB9z9<9e18Kr#GtLY z$rnD+7rw=b1=q8eF>w@D>bUH>6Un{$YGB58@4r*da&0)HUKuke~fw#fw; znJjQe5mZ>yv^k+Q*`Huj;5Lx37#H>eH+#dKny^iP`NHP_Bxd!|#LS2ha~mEjZ%xcK zHZi@SPLD7zG(afxxBN0Rm3{!a;tcbl1pDaVEGH%aFYJzutujAqaXLlYcYrlXD2a_G zkXwN`)wI)^{~%CBO&;^3sGi?cb|d;95`B!*ep`EHw+~taXWq~ZKVVsnjSH#l-&$7o z8#ISqSu&kw8#X&>irOS?WMyBH=J>`3-GUE$Ft8!s>q3@!Jqp!k9%P(!-|{%+OlCQN z8oq$z)`8LNrXJckti2i?*B3?>JZUCq)!hOww583wWJ4PT-IjC7p8=q-&WTrH;^ieY zu}vy%)CeXL=02p!bQ{X{_WYsp43der-|@t=t%`@70w;WkP7IytM+8EqM#N%lY+faH zFp|mUTAD-9EGse>=t2l5ZAc&!*rJ{}hTI_lJpa|jas3S_8=C+!uE2iKV?w7<0IJ)3 z(&_b4q?1?ZbQOsb?v$&M8*U?4H(e9!_>6y-;k&@wcvHkK66jlR4_ zk0IAfkvV))f&Kooj#8gBo4d*wG8Vn=1lvf>{vqBI*V541+OMtg?FV6z@wIjB8Z)ou zlrwRHih_2@G}KD&l#HlTtcwvdZ5w8yTW8%2*E_Q&W1e0pVxrR&0@!c&W^AME!TEn5 zDKSyddKpvG1hk-k=`?`xLtT0hV2hPMVz-spH3GXe!0aVWXY?ABi?a7^Ry|-$gGiB) z67dG#avM7BQFN@H?YBWh!2ZrgS7a~VtFqU3SLK9`pmS)ee`3ix(;r$1!YXzfx)2R>p}4J#p0dL01GDZmKIzNjAL?Y5J8O zKjY_bGQQv$`(!W7uKU@OTW|g7>(47dFKwwI1JjEy)T>xu@JQQU- z@6h(F_NgLFVd5iSjoxfBwqntf*2Aj7UC00rJ6Q8>0M}-G;m5-Zuld4*u^`%)R938} zVg(#@?-~i*u{x{#Yb@w;<(Hrr8C3a@H{2OGzgv~dv+P6ga#K5R+wojuVKWz1xzwAz zRi0!>rePCDC9I0CPvVVG7&G{;dVb^@6s~@F74y9@(s}etc~5--kHImIjp{*qTm%o@ zKefr8miB$_TFV8N>>p9CUW4K{ulj-ADizmLk3_pjXE7pqLUHXp8TL&G+KPx(w# zx01|Hh&G@=o}sH-(z&RxQBC8!{GDPL*1#GQPLO<9ouqUJKO1)bB?aRwX~Y$ z-;(U9ukK*V&vD+NX!rv9;N&sceeQT#W1|fsb8{-bV#j-*{~`T|ugpwU25vn4OZv62 zkAR)*R=dRDEKANO;w>%g^p<<@w+yy?K``9!XV)~O^kokXe`j;w{DK0jD%?F3ykbdPpMA{Ac8z{ z9^*fffARi%%gTSJ|Nf`)fppdK;naU8|CaK#w~?>s#N=x@P$%Lw6u2`cU7KR;@n5Jv z`BLL|%M1T*{b}9{7P(;?{|oXg43WZK(-mOz0kefxj=3yM3Y0 zeQ$j1tNA>s?3U11xXbv)CwvYYZ(x@dP}k>FXJR)+3S2z_@m1Bk?8L~ZDMim$LmSk$ z*e2qTRMrPi9aWzW^*qkj?fZ)JN<2Y?Yu7ue69mCxXQ6756*6m*X;)%Uf_UZndrasR zne0Q%`f8f+M9(KkCL>Nx=x}c6Z7N9KfHDgD@Fq-kIakgNZT7yg2kZb-a5?zb0!NKmxObNOg%?Q=ddrvn;~Za3c-)K5hEYk3 zdhVK>kpD$zXzRJVv;g6-j!`%WgiQRiO#Em<{HE90kL1#j>hqBl&=}_!@rSNKovwp^ zZ}QU@Y*^#Kczu%djZa}8p>`L_TGau6yxL8g=440AxzOx4=lnUR;nt*ccN6=t5IUzH zkUn=)PAK<&SWUX3jr|C`<_A89+XmN88oWtDRB8`Go4jpDq*y^b&keRBS+53Jx5FMm z_%e`mbJf{CY#YON|7oP@T$;j-jXz$k?TWkuPu9EUFiy-s_m45@vgDe>xJPskkw+22 zE!enW5y_F^_=sU{&3lc`nze0m4&=V*OvoT!@V1BP=_|II`?!sJ;?^9bU{S8T^@;M zj%)lK8>F}$_5_MRX-ONcJNpoin~6v4?j7lAsvmYeA=#1zarFr&pl_-VWd4;P0Q7qgyf8>xlr#ajMZ;nh=4rWfXO|S+8x4u_qzRUgvS!7_$NS*) z!*=x;TIRW%ju1B+`IZM2^;B@uq*~iy=%{%p6vv#hbCO}yGyC$C$}_y-oIGyE;dP{( z{0*>>TK1Z^`%a@#TiV8P2AToDa$hYeV2XYiTlcsnFwZ#Qc9_0BMG$ zHPtVW+5Fufpf$FKUfMGZcn(NS`vBm&Sb!XQ)uGAi5;Q+GQft9sn6gx*sd`|NcrI3**(yqwDkQRu4@N-U zk^gOJ($T&ZR;KY@Eu#{dcCb z>W(n)n%k3+vLe}<_X<3rOu!Nvp5$xTtO#G}f|@3+veTWjg}<#@8v0M*@3*)Abbk0d zWN6U6p+9o2ECvQd2Xa1(3Nx#|2fQ&%doZOrgzi5grLqixX*%#E9f(Tmz~ss+? zEtUpR7!>1>gc2e{;6?eJxX-F)Vflu(IV8)7y2wz8qsMb7=+!24E_sF??I^E#ssqd5 zQ-ElYXIwqcM3dg(QbPuyl;z|v{DNfBgYS5=H$ndfR<5D081Ek;DYm2Fg6B&Ms4sS6 zvl?bWUK|KpAdltn^JRS2ix_CX5ug0Q_f_-B_hay>^}a212}XApx!}*Xz9K>2gBd1Y z6XKJ(S*R^qe|r3^j6YnF9y?xvlV@3UxOBnT3zrX0nbiwlkjBN*JK%v{DrRx|0L#Qa zI2>b+orAi28@I!Y85w!uM%SDkwtj}^Axcp@9-pA4F44TJ15n6~$v#r~Azz1d(KhG2 z2x)*RIM^5)KEtv3C>kC32BC`I?r-p7p7NR1z~geG!{c^3M}_@6p|#p<)jx_z(1=fE zyMr%$2jBNwUgd{Ewdba?3V(KEpu`t?$#?KwpXGZAPoGrXgx5~WucNB}YoB%DYyRx0 z)$oleKaCd!4q-3g;;pkf;P0B59dHcLkA5U0->#NF(Cd{yK?wZLR`l>yy+sQ+R~&+V-QxJ0DGnOz?M1c5`4EZr<=Q zlidMIjRol_IPgT|dh)lgVOCUa#JK{o@Xaj-KPJ~p=`jf5cs~|GaG&};JuZX?N(N@= zYF-=}>b2RsZ0Z#K^B(-tyQX;vdjiCK&;8z>Ypfvbr=a8EIH)%?8v7o$ma7ZdAz3Ym zV9Ewj&b^k+O;78Y*661(Ti6|&A7g(*ucc@QO>{pspF?!v=_}~*z<`=_afDeP=UB2B z{i_ahIheqagC2;YPyblZBEZ4ffmjhtf3%j=cS@odIGn3^c zY^Tm}pzq#3U3Tv_;V@YHTjcx3O=j~fztbU1Kk>TKoY&O=IqW--LP9^_$VZoUvJY8z zpG`Jm-J~kTxVpot)X7N0BXSry9gaD98Bhy~9s=Tq$numhWx*~?hqrqhhB~R%qAN5l4xEtjZlp8VRqe%Tou)qszM3l`csaLn#W}3=cjU0{ zy-9jDe&s}eSPMEHO2by#5LAKntvS?Y4i2Uu3MU?T>jd|5Fh9zE!)jO{t&QCt2$=A= zhn%5t3(?nKN`eL>Fmm-|GV+++EM`?N6cc!k6i&hUUa2%+dgDzpyIx{yf46!MlaHpI z@imeznF&Q>60g8Z=$s5hiQ1-)(VvT%!`4{@#_3M~C`#o#k3;4jv``m8MoO=0i#TW0C2y>( zF2@I~p^t+#^iezR{E$<+K>OffS0$d6&riy!&ub$Yuhkik>xO}R7ej)F&$sHXVlJWG zs6<;Hb3iSv1#77`sXJQ=`f-k1Qm4Wti2jV(1gpC_(<{%Hs$B;U6rX#s6E@8UpE#=% z@@fZse-M7~HRPeZw{cZk=G~yb3XNtPzjGndS#^()Cz5tS;#k4O_=c%xKU>La__LIV z`rV>SZ103&{Bn8%cVwHa^OVe)ZC}Z@hS^s7k!9I<93_;zkU1ucT!dc0tU#*v(hj?8 zB00hD&$8|wg5&(4Q;INSDBnefJaIU0M&+=)*iBIx_-sD6uaD9*a{se9-G(>Edm4St z?v{xnnK)jl=|SBD_NZZ==iRF9#HCxDC(vp)R=R;nQsgW|k?|kBIokA>n0#OxHR6c+ z#;Oy&*}JTo%MnkOqH-f?%7TWWI~HS%-G*ib3s|+A@WBS0e*()4?T)pv+(_bi-;MCX zr99p8k)*_O5g6%5aR>DUK-7>9W=eL~sGPxPS$AO~if#9NR|Eq?ELsFpMwW$a#ky#G zt-$W6hcA5Sq3buC%WiZ8KNyPcgL|l+WbautF}#OyUEm1NzftC9Y2twJfx$QS0&i%I zx98hdaF(>unj}0%gfj_SJl4`LtRSyxLb_V@VTrj#oe%vQMS_bHK+Nf)mE)SGQNN5a z7rYTj7Nc$_QRcYROlY|=P4Fh|wt^{=6Z$Y29cnde9?m)m7r7zHkh&f{k5d+3_P#k# zNU#VzKKBRe3OLoc1fRaQ`5QFw_9HN%oM zHyOvj-sI)+5UwAVwx7r-HS4=W2qAIVIaY8tiG#zXPzK>3>u>4e;ZllTG1I~cC-rv4 zqZ<6(F`DuM=N9$Uc-C!~Je~V%#PC7Ghrwm})=cOoKER(bp(!xf@+K;|icR6$IKqi& z4t46wNC@&ItBp@!_C#~r>bK9}>m0I3$m5F8_LAHOzt!8it&kUR8quK!8YRWCg4vJ%7OTDlYEj{bt#Nj!&jq z>jNmwYIE6&BAbWfvgC$*ilA#K4y?LUCFnC*c-6L}JnZ>~6@0B7i3hrJeL37(^+isw zd9YR6kuFMxw)lY8jaKdVOdn&`&<9xG(JAbzJ}+iTUvy`j828~)9-D@11uqVsOp}8I z-8cQ#~u`L90*M9JSOkf*=rH_RgRfm$k&p0^{RZ6G?Vx~bAnco8INA5Xr!RBz~UMFeOI zPC^dqCt3=E{q!L{n}M;|Yoahvi}J}jIMcpW!qEzUl%%E=*4e4Jo08B9MMx&B^Ee~K zT0v&*TK;l=NtYE114zE6iAgyhX-L!dGM__20TZV)6uXW3`YT zBb=J?cT@rA(c2=T#8W3P=12~=`Q(v6FDGFn+v>-9q-6< zVEV_I|FOg0XZXFx4}THiMD3T5l*h^9A&Jr?uMHk2$}E%19l%zdjS4nBtxgAs;7&MMXqDhh5XKV`m))u=D@tv|E@VsuBwcG+bJZNZ`ucV7Ik zr494E_~Q$Ga`Xuth`N?TI{Dti77`=J>M1DOg6<|>roh!#{MAMsXguTRScPNen3@Ge znsac4Rd)(Gq6SwwqJfECo|ltBAq|^4LHCn7hgXm>g$ULb8*g{Z3{)o3JlzlB#Z(!a z)m4`>$xNMOA(L?W$FT{TT^3!7&3kK=KlR*PYZXUq8JlAz{s9W;pnD*b#|P_5>{4@m z2Tk9nnBmY~I!4|v<_s1S{hByC|-~)=5s)>nfyddl9VE5Gfdr z5N4nGTe9&!RRV~aWBi7VJ}g*UYa<67ir z_P6SvYCe52%p~lAwMdVBnPNtH9#PD?P@RmTXutVtl!kt&e!xZ`pXTVP-CDnhg_53 zyxY zLn3A`uNTexT|86MbR zy@xW(?oK;a1%0hO7k(h$Y_@%>fHD@Qr z7A^{N>T|nb)$vEvbwlpyP8j)Wv}&ipm18}B4JH@4m{!S^uQqsi4y&YVPQt1iyV8ge zpP-MYivwg#RPa`<5b*+jKt`axn9?~}*Q6#)1gzk15aQ>Z*S+djI0mBa6mZH9l~V99 zCZy9@fu6gFa?AGkh?6~ae(Ci=l?&u!JJBXkc zt1|)3LjK|%K4&BY<-`{-xPTD}kSv*>0jN$lQlq`0 z*!&eUek}}m^8+m%HN9%DO8Tp5ceMDNp@wr!_m}kx>-MVf3VIqD2DF!P?gXdGy$p$Q zhNmsGo@M1U$AP_1cFpjwVJQ%r>DuckdTc@E5ABc9Q3O^3`OZZ|Yv~OszM3D;vgW@6 z6!CQ;Ub06ub0p7^uqmUfR)^KPp7gZ+9VR_<7f3@^9{pUdimC2L+P!&JcM8B9-?PV1)bzXZ6a+ka&LR@~H#C^j6&^ zD3Pv$$OTe%Ef7P43nevGBa08k@KD1r1Bx7=c0jKeI8_tcf>aRBP|WW4t@&bzFX=nq zwj;Qmmt@TgA^C8sAtIQP`}qvV>rMSly{N9|b9(-4C;sN1<;<=3pM}{ae2IN-eQvhX zm;JsqFNstZ@4C%_J_mAeeW5$0bwBAn)Wtx#bc!gKa7%5k`kDC4JaRwO<5t5YnP?pJ z_Jq!GA5Q-_-%%rnP}*QOInrHPCKpB6W7Hr_c+41u@ktDG@T~rnp`mf<7@|%BI>Ja} zkgf30=mt#V>|tpP_MY(&t&C0=uwcVTa|R|dQ5iJ5V4#WYp_+jPI#u~7G7$D;Kd|n+ z8S`WHC?X02v1>|N6|Bqjp9Ntn)>k;%Ia zrwg$UKDPvYTn}3xs7J5oX!TfUN;hzk%Pfl9pdb2rzHimvMLB^X4vJ<~DRF1oaqa02 zji|&%HkY3Bd?q{#T>^$sdw5HdHW6K#S<7Bd9}?vilp^C2DWh)iktj{*r&h2}0zIvH z?c!O0W2lPhYG?7f&cck4XG<1(g#4ZqN0X$>Ap1MIbl)~&cRPKE#Wa4zM##6kf`#<$ zXC)ElM0?c)?D=S+d&aNymrHfTS7b}P-`Mhrtrkfmc@hO6mO3YM)%ZIkXc@pw)7Uax zgxN>G*Nn-|fDZS10oY-=XKLYz*(bIsRAVcf9pO zp=9`FWEqK9AU8^$Vt*uFZ7zN61Eq3 zo}={^=ti|)LLkY0DU~3w39x+(?%-1M_a$`~Vv9x3oZ)h*JusaYbf3$`8|-NzDVND< zm^amOFEO6jXC}R0&xPe2*(Rz>Gn5IyDan;RTJJI5)_D}e z%hq|6>F;!A5YXQqepl)5G1^{;G%|D{&|ccQki9?#x{x$m7qS<%PSk}=KUx>^<`VGy zM6jwoZ#oHiME=2!aqYbbQk*u9<(In!KOd*_RZ=?&E#UDw=T!{<2Dz_dV@Gbom!21` z0;f76(_?Poex5D(=9grFTq@{bh7fWt@*E=J{MS8fCKZ7-Kj7|APs2@p$|q76hkafP z^L3~WzY~4RouAjEkT|E=Y(^g!LL?}SA2`y3*)LZE_n}-W8uRR)DBTd|ec;7(WsFYO z1a&Qp?7{vKcVeu%bpBoHPn}k~*{VGVM@?jS@cZ*-<#<=Hru;90gZC5aw&GwNR5jie zm?Sy)U%b{Jl~?vq@u9swMXUr4JoqFya3TYb=D?@XEyy%)Ohs^mKN(ztO`IJoT!?O+ zn#7<@460dQFeP;P1nbls(Y<{PKYWYsEoGW~3m<;k1@~xEg3C z@?jJe_!oTW|1+AiftpK9tzGI!JzIC5`i}6x{Md;taw{oW$aH&v%jz(J`b%pA|P?*0Z%kHcMDTs5!g z1H7@>XkDR=d)f!$F^2Kk@T0_{hd>B#eWkbZMzlEGx2n7usU@dSOT=RYAZ=BuyHyms6{GV zS=1kh`tE%cAUn6#Dp*dQC5CZv0$CJw8@(Lr@7>Jt4oVr0zhy&Lk;6a3K!vlR0bDS*s8IF(WT zB<8M=B70RgOui$pAt-Tt@~}RdN$uLH$x$3bh50s^Z4o1u}8q(t#Li6W@sGAoO>xh!R` z(}x}IrXGh$U2H%(pQka6A^C{xIymfnG*zv-Um+hRfqS=l8j_hhP!ANVa|Vl2HGo>k zIRB%)LXevet%uRC1|wzL^R3_xM8mZ{UE@J@py0(QLCbfMJ9vo|-9z_tH44kL$SJIf z>}w`WO%vvO-5DuFJjrVtIV58$5~;^r(X6MBo$iYVk*-39hFZ3oLxm+RD~sj6w9eZb zm>awQMOgO2rWMI7thxnX=BZttRXl?9F~$~Uc8t5#6EI;AbpO7CX(F4n1Gs=-ui#qF zqt3z3HTwsGp}XEGClucVKSS9;3=El{waNTz1VMM5foawT$Ze>t8wL?qSZPUm4fA~~ zcr8hd4D~y~&&0DbYr2tkR@|vJ8eFWEM<5%XcS>ruf~nG4u->sxZCQ`pg-`2h_$A%D zT`C1o?Gjeru1UHYhwW(5#M?E&k>Uy|K2ZyQkfm~B*bg7NCRh~8`arF{gjL~MjN13T zR`B;s9@D;4%V|{lrY^s-GdrCh$OqbJ)a6#>L(MzuQX+|@E^S#CY?!GPzW@u|Z}XQ5 zV;&KC1e12nH!`OCLmU0*S57q#af9yN?a+#T$O5NT+X*Yn$aF-H>0S6tHu^~oRA|K3 zB^wZY=)m-qG#N!6kZM0fc4*yCHfJLx`$-x268$7{s${SEb2(BtB3onlEk}(Uk;a%? z3vIA2?hT3LZX}0YG>!u%M@{r~EyMAl#diqXFg!Ovgyy?3XNt9J1p5)OdV%3_X@m3C z$eptMHvQ%L5a@{c6>W&B%ixeL+7{D3FlItmy_L%&vS?^aq=3a8yJud>^%0aaceaW` zu|E)Dk!#r76Vq~4nNZGYQV#hC1+8n9OG3QQ?$-r#oxV9Q8{wTVsMh(Ju(<9P3)9vW6LkOB7Ty?W!+WUQ1aR$1& zCp(k8e9+2Xg!&O|1@l7R-AE2>e*ge$5XyV#_A;Y%hPya!qA&M@WTu(k20T+a2LY=k zyi=p3`hbg<23gXbA~D8m+a~bc2x;mKW9k7uaxR|%WTu4teC4GpEWqH-F0L~aqrjsM zDj{hx_VlqD!s%6EU-?Gk69jCr6<;YApV5_kuivzfDZ3lV}h}IAShv$A8(Kf zN7Y}odzgglbY#4=dow^nyPu#-a1yZH_kKVsWf5zh67v@6_>WrYyz@FUr=G;e=I#5HuweASb{}6yr6_P+Hi^h!hZDcJ8T2Lr8DzW&I+ z?G28ylM^gYfT!_5Mq~yumwAZI*Krxa7>Q?l5PLq9l?koQ^RSqnZ^xe5`ZqvHtIyh7 z+XQA{-VM7~$(B-nr%eM(Arj7tL`330j>E4#Zc^)w~$7L2MA&7E53X zj$JM6&SKUTs8G<2Cn(uxxPC^!&k9#aF}h`~uJY@O}pWt*<8s3ttAN^o}r@1Gw&if-*$ToA>PZdFw*b~9sHbx(68 zEOcvY1;rtBdsG(4?$@?xy0sU&{8}fe(qVr=7}$i}Pkn;f6wZI?@O%l+eDoTj+hYRU zHHfX6u}d9vkJZsKbT&8ZY=myy_XxT#*5Rk>Y_8MUT(7ek%xs>QY@9mUXVBFghi-RZ z=F^I9pOgFv+@|R^0GCyQ?&rThif*sHj^ezsx4u_-W)b^eF&3UKK(U%`?W~|UgljWE!SVoLo9>h+-eQXTG+@XVsCnMIeI1-M5OgAHR?@|il? z_gn*o-F zw`O@};|^xnvY+0MfmB9G(A`0Y%L8UT&&EkMO#2?E) z+cjF#ZEJwopR0>)OYG!QQU{#up#ugzF#KD=1Dx!I-RB`GNq3#psp){!nW`Rybub53o$>s(fZ3v=eY}Ul%B1@JO?{L!5Qn=m3COnF0zxsqkJB?YjBw88^dVG{7 z+HWd|_vhb9^}+OWG7`PPUauq2_QxfnxFhn5Te-}`pM)8P*h92!MtWh{bIt{J zKC}W!cEY|N?R_-BqNN)07p(KLZ*bi4A+NCFtgkVxcaok>Vh#x!#*MS>DTN_|YxE8v z4l&Ep;3_|!TENs*W)FB%f(H}W&RJAQc=Z0m#@f^+pe27^d@s|V^4*y5y(!@v!dWk=*=o^>AX zS%^Od5;o3Au=h52$R zulY(>m+}iZEMYr5`T{b%a~&nTJt8HX|3ynSB32>;#P}t#&0~BMZ*v^-u=(fse8Z3! zzj#B?BHf9RKk_=XqFh&NV-S}X!D|I{VqlV5U}JWf)dlo#1Al#9M4dtRP`Kmj5s08* z5WXi<6Kn4{p|eKb#uC!pI^L&V!;CMYuoUM7TD(wAbw3Z3Ngrm*fjHif9`C%N`(&(B z-p|>1;4k3gg*+fNG1y`+l|~81d-_t|9K9Xyfxi_04+ zxHhc581dA7P|U76of)CDMncm7xKqr6Ihc}U>FObDV0ptP5(ErGxNH9PXeJs5Wm!$* z=^KY8mtW$-jyV?7PLvkQHQePS#tU~k835Z9vLpf)jf+|iVV>~;neyw zP+|{w(dwz8`a=#j_y-|ay$1#Bs`K#05=52&Z-E+b4)(;`r9Ofxi+D>Q@MZ|{9+iOi zc|e$cBj9J9Iy8CX(4UvF8o^6|Q>=t==7>?OLzj^NQ1wu6$IbagqK5oS6Ee2y-hvWC zyyXOknw(JjDpv)=Gz!>#XoKUPc$>2g{0w?xIp7=SU}`1wAm%Z8>^JlvRKLbX{OU6h ztX{>2sU0xQu`FxA6AygLgsaz@5Vq^M4&68q_cN=OJR;SHsDUnmIRp>b9sl;55e zkytg29j)M_)Tw|%IvvOCF6CZk(WycJ&c>^Pw^@^qB2tqtMVSC^5e(iJT!G5+KyhJ( z3S)~bR5mN4_0+6*7?$t6(Wl8BiUAi|`I&uJ8xhevMWfeUg>T5{fSQ$17q48Aa#|p;6 zE@E1Q1xt(YBi14=&_6Z=#rTOW!w_|j8!dAI%2ngQh^so|3$N;tv67`F?vurUnrcuH zPoR>b%WA)m)iWZqGenO!bX_MaIL2V4V`siITuAXQfUN5HY~KLsWFz;YJge?&EZC)! zF+mLTbm66OrDbHLa&|KMsA3#SSdICcLp=t@U3D_Ph^~w1f|mqpUP_Z1aB8@idt5+U zd_X)MS$8tLUn-1bd)G9cYz6ORXR&jI6(HVsnRf*d62m%OPLL{fatgqVLM&K?%UtTq z9qe+YpGv*PNCE_FzB=!CSgdd%y3JR4!dHS}O(XbfCo^e{%0^aAqf(vA&rY`sh@;|F zlLVEIKM_=Di-qFNxvCYDHE6oV6qVjSO}9bDArUSgp#EQ)hm}UN35Q? zlE8`~AD;Yq!*k_Zo1ok2g_9&5tKpwU?t(KZN-*L*&+Ti_d!YM@(a?I(V~hcfeFX2oRgo zVK-hqijxZD(K6)W4dIyhc|5v}gGm{<1Em)M>h^>-pk3Xkk=W&J+)z$EthI61~-& z4Ut>vY|DTM^#1DmX`D9lc)>n?-9W!j`1MQrz00pU5(RTXwks7c z?Qj7FJk+H+hyI;z2T+S(ZawHe^&f(0ZK{V+F}3poT6N#y@9Mz_QX%m4Di?DAqG3fW;}g2-RN((gtbbBg*X96PVRq7;{<&OhW)nup&wsqfFwkL{ne% zse+F+PmFvtJS^de3A~t@%@N)ZcK=}!Cqzn+-D%nKAv#2I&@dP}K1=b6CCl(-up{Gj z1>7yx{GiJMBERkt(nYVOx!$T>P7>nAJgi4JxA9w-?yWhDt8$O%VzAnSdX0Ko+~S)5 zOM2qaN*zre>zXm^7&glM_H)bP-$m;XOniln*j0n64hs zs+)jfR$qu9)wvo>cPb;1ViF0O6BBtMpgIq`bzr)SE@j?bdJ&kY>I9qzM0rc#2d4W= zLJ+Z&B0*jjsaCEcI-Q6PUL(U!y@+EL6l1zF5Ea(oAdvZ`E`g#0<{)kMN=8aQDzJ#T zoq{oGc*eUe!yXnr04uwgaXv$LN{qmOWeD(w9v01l+RQNoo}1w5<7g?0`CJ@>3{FEk zdSUKlLdIsAdht@tljjS)>d&5x;JLk#!p<7=Heju)SsLE0TPX-~d;h|Z;^i}vx;7SN ziJ-AoozObUfLN496XoL%aWw=ISx%}hcnPKz+ma5Sc=>Eo&3YKZ#4*(^@MEVSZEy^1 z_Kc=7vI)rmoM1WUoY&cgSkA%+mc!=YGKE%?=-}vUI+%qrxG#fA79G5Y!RQfIa3%`! zWq)AJy&<7Q9#qBsHrVterLdCD!Q15lR&ycBD}2 z@2z?3m>7n(4Q)jMp9BlHG~JEEh4(QSFYwI^OCdB49(aprfpTYn<-H*~+iL#A01Xqp zJLkZD2kcaZbGPD}WTW5mH`2tUKYN=s?12ds#Ej)u%ZEE@`+5o+-?mWyM=UG8eN;m#GJ%6i{sp9%WPgL8y4VrdlWiaOXgeI*To-n@T!8_ev6)D$Q%xts z+D#>ibyHdM{w9%+(_ELE<`N#p5q=t^)U=Q`dpcX%>=^(x_UCLf$Gg&IZ_;j~A&$EL zVYJzUCbT6i*ooQU+tXfD~-KXQBS#{cnC0lPO z&q)J$JP>+!lQ+A`YT#M^WAtE+hVaKwDaT}V6n~uf8x|Mu%K4f zvAc5sgkxyS?%WK`obbqZ_%J*|Vb{7luV*lMWF zN!kWv2s$SA0E<(n>ERKiCdr|luO~`#i)0|kMKGSafP5%pG(6G5oE9*~(s!-kS;&Y( zXc=A}l=lX+AJ&0$w*bwADHRgwmegYzEuPiO?OqD~`^n8@Kh(&dgoElsAwVHzO2vOD zE__VZb3++knPQSj!A_i*!fjHZa!3KJtH>o}EE!#TnPhC&#AISEEj*Ocn#sV(sGtx? zMywr74{~`%HFQpkVMpr=a3tdaxfG`welMp%9o}L>QivsCQo~AHb!CXkO(IbnV<&1I zH;OPus*86q)z+OzWz~&BEIy4>vkoRKMhN-cA3P0ALmzQcd-_hseL}}QM+(=oUy@D} z*ZnM_s|zn8XWgbFatAwBG)e_Ybm4jGuWvEKD|I{$g*+}d!JC9ro|}YF?g_edwNRGs zJ$1~-CFW5@_h-@1UMTX95i92;7OP3BOU_qWQu5n780{MG^js`Qtl&77Nkgcx@Z;6x z?|DjUuTrG^CnY}KS39cgWr(NxN!hiCgc<%Dv0+L5>`LNP%*0mh^%z_@M=6U8z~KdE zC0vg^wfnFHYkJx4a(B_SQoHu4D!TrR@p&u?GUqKM7d7V%($JF3>;3_w$>`oU_a!O2 zOc&tpO57gkNgULh#G!5_qhZju?wkja64`;HC%j=XO?T)rcIY!v7az?`*Q|&3=WmEX zVsc~hOVSWi2Q^M;c)!lF2w5@)cRD7-BFROxUJ`GHj+eutr~d$I-(>QPMb1}kB<3(3 z^Gw7{Kfu%IZvXh&p;Lh-ACR)RoM}?l2OqSb^%&-Yh*F&b|NCk zn1MKI@OD!0HO9w_Mmk(!Y*KB7w9n~)dL6I@0di4Ma8VA4@+%#s5K$6Pd@~I~^K$s9 z!}<970u3+w(f0X>Bj$}KSbXok7*benS+M*1!|qLJI)6BGGXP$v3in=sa5U_%0G2QM z5I5GsT^huz`hBOm{$W<2qekKvtacdQh(0kP`i=Nj=PqK*kG3OD<#^5`{DZppMnIr5 zRFJr8uaeIs?bb+yLA1d;3fY{@k}x%&U%{D=oQ&ViiC=t+FR}~g2XXiq?6Fb3%5TJq z2ji3om2t~J?*o7&)ABdcaT za9qWzt}eqLHS#fHo+gMr1}oyTKqzl^`(*?T`O!J^xFP368npFp6{=w*+;Cy zU4}C%rXcm>=tdFqM(cq7l7}b?18be?i}{RB#UM*pB~LJ`XXUUE1VbICff}Xzo@AX7 zQGGU#N!tGdQU^GtB0p<>G2%tO!x*Ywt!550G&28y53Vc1`uX@yHH;tbv=RWj^X&tG zSnK{>d^2YPtRM!kUXZh#G(fU7>XG-DnM*RO<>i(L&PugB-xGQI?iM~gGOn({2BZ3@ z34d-M2%M^}#h<@%mRz&W8M&1SV)yrPf1~E}X-6M}j!{_Md>fJY4b@{-os4+YFYok* z+HZv%@`k!>15nRNtV$j0Ov=-uU5=L@8e|20ZZAJZy-&W3eylu1*W z?O2JOj8S<4P;XCc(3~zceGEInN`_cAB%+Q17~s7f9@^Sm| zNBwC!IjGd1>cZb~sl2j0o>%=4J?K6`aO>Hr9_XS@e*v(1cKM}%Zub(@H4wWRg(d!> zuGZZrpcboz(c9lels52uTxBst&JBnS*%NBt6(4BRZUp*~JeWoabcw>RyF7DQZ^_#m>h=hvle*&9EMk%z!3%8&Y|!U4UO+UVymLeQkqlESz@0(& zAVFmq+ay`Ng+qh&-Fm{S_T9>hA?hzhhD|AQUOw#3fP?0FU^OS?PGwOKKuH#KAL67U z@PT?ziAb7;%RI0bH67!zx-0Hw&c7wxHV;kbdpbWu;^hkl!JgoQ_=Ah*$9qpKixt?2 z_rwM>8g>ZrQ-x(T-_&g;P>7rZVW7Un$$xkh(xVeS{#Jz%VQIH<@Ti4l!tc?MDF=!n z**mq#Rf&B+&4jeFW;J~bb*;(mX8CiX^`epUc%FG&&H83kHD?1w~W~2CQ zWSxy<+3?D#s3QDk%rUQ7OIG3MIy*v|c+@4-89nS8_Usi5jvI*9y`J@3&FE4VjTV{!2jd?PS*Y&WZ^=7 zlcp6;ZV{8+lt0&Lx_;Uf|7*fMlL|^oN&~K0kTZe47f_CxMmd2C@r6Tl4I=5!tyD_rL#poP|JKgpFVhIjGsR8HItONv=Y+2!ciw6&6o6CFK^)96I~D!tzq%9y{@7u+gy6 z5+GU;XRB%*Ts^#MQehd{t@?`6(f}e?8-k#?D~FG~I*v<4ptQVTYN4xO(xk$QiaxHi zoIs#(Mp=N=B?Gvol$XwMl@t{Z>3I_JU{x*~hvX#zpjlZKD4gt?INLQWP+r`7n66IF z&?^ujXJScd`3zJR@n#g2*ww90Amu+pwmN~#|1@69ma2}E(NN-F5TyF*g5t_T;qK~T z1%XM^3MLjC=P_wmozN)%6t7kd_MakFJ-TqV#_B&qu)39?`DZwiC903jNdGFCquL0L ze~V}=$Ce@gVZyVBB;;LD$;^V{qRFmO;d|Gl7~|{kfAM!ecE0#a^$2iWtD$GUhV?IL zc=I8F!P-7K4*a&BHc4RZTMq~=}TbPaaNx3~<3Y z>sIar?0>;`(>o4x1osS_{Zh^_$D&Rd(VzB9k%QbV#TF@r)z-vL+ZGUl$uytSu(joLXu7RLHb@++D6aJTft?7FG_2rQL7-Y3zy+r!> zC1{mt1tpV<3n%lxtI(F-m$*EJjxsHcQP$??{i`3Ybkq<2c;KA4lyJx^D3yVt;tCnk ziy*0|7M72#42+#3!dHs4v+AxtJb8RNWwOgeCL>f7O$I|uap``Sz!G*+fiC0Pa~4?s z7(bWx^Ar?MEtL_DIHh4q*2|TV-qSVVX4hc1YsLfSP$RmnN3j%gt$AZtDAzjc0gm6=9dWure|xn9bRTWTFNIo)Zyr9f1cAKf7{m%_Y@aaO)RJ=6yjuLWNGU7 z`%J8ya(!88#SJdE+tp)yNsk1|=q!4eoF*J6e-qv!|7-{!5+4~;`uO`)6qW=qgcT!q z8{b7HKjUtZJ|lhLvGFTE8oyM#rawP+{Y`j_{0C-2IQ9dAKo8h~27QWcra0H+=P~&i zcZ>9y{WN-k(qW}#vt5_EUFk8pWtj9qlis*nrq8geXA{PCkt;)!ss%F0>wJ^np5xTd zgty2)qn~NtqLMN!yUulUd0{ZL>*sQ5dL65N8T}0Xfed(Ye!8FXSGcv+5oFEFsI z6>MzfZXN!=<+kzupDurop~q?0X}T@D_MgLlH{S8``KjrTm+$}gZ`p4DDV-C(dyjFS zV%&|!ZS>KOMaFHX4;ptn6F=`lonL$7_87MvKEb$?On8||Z@VY7a_6;jds?~ETe)2= z-JV{i9FxE2l2+~;TDh-p<+k?=?DV&pa8rMetan_+(5{zbDFpZ*XDBT;RI=BL={M(ykH^3X1~wWPG;q;09k0y5^lI(4;RNGuG%)XW z9lq5-#~c&izzMe7#GepsnV+4n4Gr2yf#h_vt}}4|#oE2cz^w*08o0zjJ0n}Z*wB_Q z9ZUq?Z{yE~w!ij`@xLRlcMEw1eFv6Sh?Ha^mYHzl=F^4pyU@TzCfqnshshX@*igM zcbWcS+&2C{HG7AhfAHA(qtpH*^zGL5*dIkDMS&66K_^o<_-C{|l>WRKf9_n9)1rRImcJ(4gZ-b$r8D&AO<(FKxp`C7r+`|)sy-7Z zxJ*8;9R7XN)OOFTI`6@!?h3b?zN@|S%4KsmKUehf)P`y8(%;|K+HK3*aVEX(w(~0} znSB#vtxT3MHJMZyD9kCD4IdNVmhVGxQXzqK*p{4Ji0Ub+2~^u3@@2^Q#|cWCPl);$dsR=q30@dLPs=t2HAuhy<>J-2oK^T-cxeQwD3`D?#R8^3Re zcHcJy9Y}An2+3vEcx3>*Q&2wH?ADbPPAY;JEqCa6vT=E=nrXj9ujj}|zHGfa96uE< zX_a4AEB8;$-%js(^}h#iyZ$zXer`TIa`eFAFmA5D;&e~z*B9;2EsmMkLFhYRg3C^B z&v!g>xD38+bciRtRDZZ$ zCNKxL^}?n%I75c(iXOdU!*sa|B7b6Gc|v$;Nui7U+oKBcdgSxZME;q~KloP~8|1NH z2ELBPFJ$O&{+Yr*Blu@3|BQ^MF!K|~qAcCtjN9|G>-&zf>rB{a!i}HDK%1V9Jto|y z=g;f~xgF6!BR?E2T!c8*&z3KFxfdht-~#k;i7)yGvF zr`mX!@{QYLQrKpE&~o}`Lyw7Xyko$Gd#>Pi1!Q` zS%{-Ja@bCHoMELiun^Q9Tp!>}V#%aJS8)Lv21ozOY~k#hTsX4`(Pp5>isq~=2lZr7h zpIO-RsPWn6`$aen&Y!&=lYILyU-5P%{jBYv)Q)&A4IOCO8%Ltk@V$7)k?6x+9gdd) zyPo54dvuh4jGN3pftY`8LV}T=xEvXgetCoOoU@2)GzcB=C4jpC*8!${ zawPgOU_M~iQxFd@4{#UYG(hL4NKgO0N20F+D!|VHQ`C{D6AR@uz^;H zKqtT|z~=xD0lo@Y|M`(!mb9f=+S+yvMk0%j8) z@~Z`OetRVP4B#@r{eaWH1D$XHZt~x zI=VYFN84dSn|5MzG#7B%$<5JPz)hW+qgw&9lAEK+XCVC4=4dKlJzy5#q0^hARe)8U zo1=39oo6&h7XdEBeX!>M)6Qy+ZUS6(c60PShU4z=e!xxVpu96tE?^3v6W7ms0q(+0 zm@2^f^N^n5sfZ7_xI5~D0Z9S&2Xv+(9^gX2X8^sp$M+`SA;2F27vmaYDh_bwUj&Pl zfX-gc(E#8wz=r{+;jZ60z?44C(a!-l0d_tc^|-h>Iv6l59drWR1vnSbn}PU%S$%;I zVE%yS=(wLD9IzTNEerJntcS^_mFS0u0QUnf9Ml|5>xTHSwN(X}1}kAp02g1{9Nhz$ z;sG7eU%f+t7hp;*Ze{>39u9mk!8+tc{(!rDpd(-wt{C~zuN7cDVA^HP(ZzuIfa?IO zV3+?#z?3}D>s;Ui*dK5i?vN}5%*Pd$ZvhvNL;Wy-9=Zy21FXNMIm!bSDc7PM0G9zy zrh7c_1@ztoJRwIG0~Q0O6d*r9HMKeVG2PQpF5oV}{O+JTz)gaw|WK_<*|r8vzyIn}qX#C*+v-9<&=^3hdHO=nXeu zHDEsA0>E8>Zvxgo06y)5@P)`1FduL{;cw86fV+N+cDWet-=UoWvmQbH0jnN`e>(Di z4EX_i0T%;K16&E{#O)_f2EqZy5kA=*-36HSC-7lk&=Ig6(EAtkzkZ;@^S}>KEk`^+ z=L)nZU_M~y{)i9Q3oz?N@ziAJDn6IqDpM`fNhG1MYeq{RVLH7Nj4D^jpE_fSb0VzW^?K1N8(<*#Z0js{lJ@ z0q%r+0d&5Fb^%QJ2zX~BAHY1oG~9EX2DlKg8t~A^;CsOQPm%r-q}z*n0V)N00v-Z< zg6;^~0dQdxKEV0|2nX~YLc3gwc;ACAfD3;BK0}ZX;5b0%kMIYq0$d50e+2!|1Nt;34Bdbq z)7>E&Jw$k7G+I0i^al(A9y%!+eGjny5X_7)(iZhdBl1!V-Of!=< zt*pjvEubkxLAI-)ab=-u(Wt0ht-D#p{%|c4SKRF`FB@GJtBY>jKPv7*=J$QhdCr}C zZ|+T4SbzK3&%gK6^xXNL=RD`_InQ~{bI!eYmcjt)(+qk%#MXuIj&hV6;pywM+4U_b z{|4lTa13Dz;c0|Z2=m_!J_wH>JdN-aLai125Uxd7ctbW@im)4D2;pIbLkOF0%x0$% z-qD2mARKGXW_@j-Z$bGG79q?aJdE&Oghvn_L3j+|afB};JcY0b&koNcJlqcc8$pM# z58-KqV+ap#%4R1J7KV_Xej|JgVG~~Eath&Tgf9|~&!MhtN4s<)J;Kv?IQa;|ZamL- z9AW-V+3ZsY3lW}1ScFj9gmegl2n)N>PY5d!9!7W?;Vi;@JVE(9!a;JEdQkj((0&L95&Ali z9$_EC{4nZ`a1h}P!lnr55Z-}sT_@tBXfK4_2*(f>_CRhB9*aS4=yyNlwF~J6P!5Er z5Vj#K97O*hJc4ix;mddk_9=vwc+C1GgkuQvx1c@<*CHHCX0w9`3r8T|6sEJ;f}2oI zJaS3j-^hO-+6m#yc%rxPX5@1h=n*!36!oLu_XF<+{R5Ccgq5E}{SY2Ocz|$(hY=P{ zfe*rC2n)BOo}Y%?A}qw?>U9XmK8JQjcnaY>!k52~e%OZk{{Z6#;UL0e2oEEiMOgH= z7&o^dKZIU{bghwrwqjq0wqmSc#U-oH&YxU?{T|?J@i+VZSF=|VP2JgK+G;-hy$I|q z!f>s_A5?+%@(I}LF5Gwu8a#z9Z+7p=AJ=ZY`1-3$)?E%%OW|*b!jrFNA6|)@8c)F? zSG}ijBCp!xJ-D*kQ?&oAMo%d3_pWn1MS!Y3g&?W%&4U zF^0c6{2iTrHQPc37J1g_dDd~Bu3IfxZgl5ekY~Z_-0h3<%o|=|p{jQy8@i}nx1$}$ zvBvrY0d*dq>po9D;ThohSSzVEq-bi}3E&!VF9N!#{ilGf26h9*ReK8dyIem%$CKYc z`IO>s2KaicmoUv3>sLo@%JuVY@f6{Aou{x-G^psqmyxa%>7b@Wx(OE={2=wk{*{fM z)O$tSB0qEhQHc7iNB@S9rkDV5j3bWfQwMy|fwnikN42Z z8c)&0S!k1kt7<)!`_FDc&wJ6BmDL^}L;)n|Ce{Dc4oAT2DXasp!#(mQA?x;dZx*F1 z1oSxKUqbvfGTz(I<)(Ih9&xmGRP9aJ%fMCwqkFn2T%CvifSpGGt|0!rz*Yl$mH-rJ z!qrOc)F|6&dWCD}IUaAVr%*OkoqG^JQ8xLr(Tz2hruBix5%5rbWNho*iWYR#mXn}8 z4%+wQp4!;8&yyd-?GfPX{_)l92T^V+$6YQo&>?Ee2^u>GsV(=fs`I4sPM{g74bhc) z8`iq14POM0)HAPUFT%Z)rHv4!8h0Jqiezau#wEpvC|=aHO|L742v@4r4OEv5G5(S6 z4x|%$0x<_&khT4JD1Eo5u+~#h4gS;)L!g@k9mx^pf6&z|>4JF|qtL_@qz&#$L>~t2 zz0bXx{UyuJA*!!MSGbN_MqjmC_*22uB1pI5tY&9#{r`)6y~Gf4M#N{5TEHNeOh)G83@SA<2t z*1`WHK7?W^OWwOMXXS>x(697O!bg9Rt2d8{R*$zw(xU!#To`H!%3}g)=8$G5S=DHIp+zC5pVz}aD+BT?^7LLM%tC|PyLYc z!bSRFHF{(g*xwTXS;bs)3oT~ z`0=(;{wV+5F7%PHeZ(9n##k%bCr#>Par@M{sVqmqYyNkyW_z6KBIba+QM4%qRt7qS-%DoOVeu*VG;^;15|{uHn$^?tI*aju`B3q>1O0ao%h7`0`@h!-hd!gse^??fmM6 z?3XBCG1ou`ih0n7Ya1FUyLrHQ*{x6pm$tH0yT3)$O=cW%zZn00MIIWP*rpx(Vr z&G-J0e3&4cdfYoIIiU_O8A^8A9JJH8AZ z&Cj&oQg^{ZHo^VN^C4tnOrH;1+^|R43ZzMnWO@qeZbQ1C>FFT!`$_-1?$?PScM-(X z9!~JWh3uuU|D>*6Vhl&}uD73y8r^l!!Ob>fo8*u7fnK?ILE4rrG(L7?SbQf$cU=%w zD))BKb%UhD}?3I7MQ>yUC`++NR!ft(fRKJI{vL3V(NSAv1LN?7ZV=70Dp0}{ag#8El8Sg?iZbv^P z=~2EGw=0*J7AA$r>t&>U=$JDpJ%Dw^1cqCaXLj3dC7kvo#RG&q5Nu4L?g3MW5cY-(VC3j!DkS(FK=%4+r zjkNqNAio32;sL~uA^tKw{uY|<#h9K#+yvs@N^&ClmdBFM71F!5-i@^>k1Mnp)#nt_ zWs0$1s`Dfr0ILJP5v9G1|6W3T55?1Zb*m>og4=?(!VmDSh3vJu?Az(pMqU%=HIf)C zo-10V>a>|dx{*f)c@+8=vVVemt;5z2>cbM*vktDD$UEf1997g{Sk}?J zGX!?D55FC}=}QCDPewlx{DEq{^ex#_sGHPn8{N=MrUg)|J7PiV-4?GB!iT{ zoBYTgm_~kUOO_w&L`!E0#!Hu{Ed_1pYRX_mjLVR+iO5H%)+71ZM=+>Eql^_L`LJ<=d;EW_R8id#NPlL}TM68jmfH5UpU+=MixNYl%5XPmok(^J(8-Jb#N z*oKAdcj2>w;#DvJ&Ifet`-wYm2RWn^>;i@8O^ z!gxE*k-SHjIU&C}AE0q=iKK0(5G>_vaZD{z|09q4zo_Pxh{+bDae4spl}*c!Q!?+S ziC6PN7Sp)6BKV)q+#CURpG_TvEs?W@(K9rq1F)>z8<(j=(Iq%9_XYbpP#KyK|5zLR z3^rvDdmaA`?RXS<99*IdClMdn^oQ+B9~8(XOOzpm_zfL@*fKndJfq0b=}y$|K5`%pvVjIj~m21k=a zjKR~$<6}ovo0->RREGSw!GF;GhaE#h$m43g3}!t*Z8L%R;4S91nF6)}*dMZOR>JxJ z`On+84bAcE5P!$53)w$%>Yto`p|$p-w*3PGjdWcKypD$#vb%6E?OALd3V#Mk5H@IG zX22CF{F(QIwjg3|k7;15f&Ip*EGAjWTWxP6I13AgiMGazy^GJ;w?_o=rHH?y=MOu^ z4+G%Ta@>1^b4pH=N(E(6R9Z3E(`2N$we z<6f?72F1FCWVsu0k0I`Cio+Ge-w?1FV0#I$>L8=eSV9L)gU2i2@mVvE#X1O<3@aX! z4kAATo$VZq+v_pfN#S&~q!4mQCpcaPy-{aX0(%MAA5sqQM;?2QsP;GOEE<=`5l`Qg zA9vvg+SBMm$j!OBpW>*k5TKSM^ZD<>D`?N3n zq;0*L-F>!riuF4y z?QU#c@R1X-=B6{jC?1cuoPK@N;_+RyN z)7UD!661T{LiR(rH~3v>GYGB+7WgKTrNVkKX^APN5WDxnuPUt`-1Z@PA9z*1cOm<} zJp6Fx`4g=kpJ$b*-6#>hvPweeYYy4y?itJADC1 z&cRjn)NXA!NOLicfY}&YE#fRqB^;+wt#AWzX9<*6wiJylJ$HjxqE>RQ+aU_?OI^-cfhwn0MX)1M;C5OfmhzSkQLw7 zu=MAm^;U?^tJyRowi2gQcT!&Xn*iUb4=rRXa4+Xmxci5NM2YyLh@V*^{v_h(5bral z@0aOIfxU?MdBhj5zz>vrg3i0BHNfAfX|D;MHaG>?BTj9z?kcPw@Jzr);){#0N?_|I z7P7YrM7CEOuoSRI2y@{G9ge5nhTA^i`G*#=J67U{kUPscxSai1=b2oQ_cME=4J&)v z#sRTq?TW3K=WQe4?VLcC&m;erC-JNX)!R<)bG8zBE*|v^)_YRTp0Rq*_=>P6f=xM_ zOzYk7i`n2!ZtU^e;KG`~`9TyR1B2<*M;5YMX&mN!y3ksAS7PiJN@rUW?R@clgWFZB z|EP7lex(1P{R}VIJPw}E|H(r3B<`i`(0L`8(tm{iYvrEzi=dgrGa0uNjVt3RfILTV zyYd?J&z~-2?^?cn$iDxYZT+y{felF;KUKAx#_S;SDE&BmMwAD#&N~O4jI(!5_<4Zx zzaO%s=Wpjj)a{rTZ1ab6kH+jQc&&ZFJZ4GuPXq4*{%hRJHs3_+4zvy_Z0Oeg@~+N} z?Hq!@uMMPL7>w&bnOip>vYx}E>A;KfLas39H_+~y@h3)-9!X;%1%5-|ca|GJmXk${ z1v+G6D^0Em+lYF1-UfTUEzcFsBmY;9@Vtin7uBa7`xu=T-yO@(`fDM-pJf{m=RgZK zdGbjY)B!&RychR$QJ;1LTl2X$-lswEdJw#dK9BvMMeT0CiBG3f)3)8J8e zG-$CHiI97~@SP&u(^ZMTabRu0eo26(KiHQVbUk3{5A5+!`Hqtz`9(alq?ga)H!}bevgCSubAK6F0ubA*0xQw|0?RG>w`yZ)eejWlEXRh z8u|+FpXJ6IhUKA^IbO>4a(%>>7uq`rUh5%9!AD^ao7)>U;URej8Rgo)stp4Oi%6QJ zjNayraxXIl9;?5)kiAjoA?hZ|W05IZ+kg>|ezcVC&Bk=lt4E+&^oUxaPoF{_r;*3I zUP~Sk*Ssw&?C-!_(C9hklV4lNehl|gZ$h2P^C!781!x~HqT4_l{Q5%n(?okK?Q^=S z&k+ZthOlAs9W4SlMf^ac&TQJRSw(-ec!Iau77d2L5!(p#c@TL#g*@&!#`_1k`4#6c zU0>2C&N{a%rvGSmH+q^7CMz;Lh9Vz z76j_93oKs-|I%+Q$mbfM>kiTxc`4U>^fJ)~Rbd_bCiH7{gXeR9$ z#m$-Z9Q{W0Ma$(u+Nc>mg{s8uOeVi0sA}wkl6iLJNb~YG!jnn3ATHv62e1RczD|gccl6yvUNgx%jzY+@ z?DvU!>f%nkW{__6cksL|rNfoN-&4RUfi1AUS!CnUN%SYUWp!>?kXrX_>*;YGYFeEL zRzCK?O(!$z#o6^HELtD?F5ZVAN`d+z+zu>wVj+7a_c1^3CdRO^ZP0{d#+pWKJ^AfS zc{aF*JVhZxA!uGY2HtD_58LHJ$E$gXjw@iX4n2e^O!VFJpdAD4vs8{8Emv^w7@Fp7y?3j7a+jU$AI0+SlRQs_5W zJ()0J>=uH}%ivl1Lp+a9VpW8{@;-#}`x?#dL_O>50quP*qZwS16b2wW@yl{~`jst50_Bnyb{eydfod$LR)ziFxfMuF) zFJwH0IDRiC;`iwL2gLI!q<{P;_{c2tq;Yf_*vg;ceFKE$bO6>UuB|#x)OsDF*Fc#b z2JHu!cE1ZI0b~-!1tb!-EbwmpZ6Kxl&vBxv^m&4$_@@ETKxVptPg#V8M^8$N`^|~>?+??4)efj|PsU^#1+MBR~5FV_btZ1vy z>1*E&d*kQqXGQ*p@#h0}92h;*X&sB^GSE3pD_Izqzw>W^z4_~fYzyw;>-FN1A94w6 zUf?eR#}vZ45w`6?nwR&l%$)#(O@`<;&}#pVceU8i(lFU1hB$-|1|aF6+dv-#{iQ@N z<^g%`lkz=`xH`mrl;d*G3*_uTs2kNtGW6Zcf# zml5|A;?`0erb~K~n9>y7h;+b3eMOl@MH-4*k2vlBgYAhxmRCHMq6P7@332NX_XUp2 zm6yyy9<$AKrjqwaHc?M94z1jTbQ9n)2_6+RSwhb*sdvX$z`tp;=7P6{=Co7bb>J1e zcZbR&<}}f7kcIs#+wtJ4>vPgiCwrsOP5rkzi2it$_xKRO&*wH{CQG5L(x|{%moCyX z8-f@gpg)@cT-27KAjT=M9saz%~FA^1^gozy^UmL1?=0(-5tE6wjOAx#s~Km}TCfuzb^*idWhP=3(eOLS;Iet(1A*-&bPQ9CP; z%Gd`!$NmdtBwa}F8+smTex~P*^`QM3Ve&tH)z$=Mzy0&zb;mhb`ECf}hl~2=72s3A zReKUvP!IiO!PWsgX286ls|5BKumiZ4a{;X$q3Yn#p}mtJV0ssl&z;Ra$u#U^!PwxD zAy!(hM)WyO;o}F64hHoekZZRo@Hh@0x9L38I?uRAx#izwj&LVH)@C6yf>_hB+4@gy3BupcO}@}k2F(A^AE%u@@G7=IUs8+bqo9u ztZ2mSMCCe#v~_r&)lxEEM0^`je$b85y(JIV4#gI8JEGTvb{e#GM2ouaclDsN>s6N% zD$oCb?iA?0LV$%Q*+E#QkiwCwvDw{j_$AWci}c+d==VICe$jh!z$EX|6&5>APRul) zJcabf@D8pn%3qWdjyHG%*5cX(f;3vxT!s1nN=m=VVPhHCeAB(H0R{d{pY`w8ZC7wy+9dR`t|>v=w#`qsLe7uQ#A zN)d1TJqZ3yYqQw}+)H_a^zb`qNb$mjlzRnDlN$%zbK(Uzr?|%O|BK+GU5a-@orO@; zIk%rD&dXsw5=XS>W{oq+RK|uRY<155_6s$~0#Dx#}CGa_QRW|!~ z=c;zd^?hy+iuc#R>`D6#WijAL-s@T+UlrNxurBZ5cZi;sG|D^Ps^t3J;;P~B#>W?< zqT52?Jq6ykU6;)sI%jcNbMH_RWyP~HEAo!ncN#4b#Z`p=Ujol#by@jN4d?)#m)fA3 zz5z`t4>O{6q%XW}$iE)%C!^FtUtkr7gFrN0QG5{bCmrHRZ$uEkwjryZ?GyG7up(gH zy3HuoCcpT{g=S!F!-FLI^iN+mcNno7V{=0eVZpg1KbPzB=F9B{J{GV?xHh8i^ev#>hfMV z8{LQlokiHy@M2e^5YJc_;Av?*dsDZ#gQ=W8lyea^vZ1;7F!FsA@AZq|p4y%3ik+|A z`d65U(sB@TeG+Nrkmi!hkjA3ZFg}dW?QZhSpOyF1vup>fkZa0!Z9DY)F4WydN9M)} z?;VF|Z_#Go4lYdFTp-~jALGd5DBhn(YJo25i+h0`0d^$;SaseC?Ouu7qrhi?-$~;v zC%1Jp;C~Fw$|6up&$IKrs0-yo?>Aht$DGeAzzTp}gLulP2l-I`Yc?VO+g?@vgaUc0 zn~2U_XIkJ)3!G_zGcEA{mll|QYfw~moI^5M=-R+H>URU*td`N3Sc2m2T>icG%{Aig zBL1y?LH-uLX<%et(52QW`5aF+7F{a-Hw)P${hrASQlP1M^YOFg?^OcDI*;SYY^3WR zE}yak3ni?7kC1ZhxTBWQl4>uecl7jk&)oS?WQt~bd* z_&w=%AuH=M{idLZ$?|WN?>ztB&hdii|KWcH+z-|)%ej9WIJ}9&ehznYc#y;UIDCl1 zuW@*S!@uM31rC49;i~h3BI^q{ypqFm4jVYUiNk&lcXN13NG)UVC12@<0HmP3*`E6rIvepP5kqsHt7 z-1c@fY8&%&%cnM^|&hRxL}(E-xS>64#fu&#P>{pp6O5M z!ZYKu`hVB>`~=TeD)iD|rt6HpGd`bS`&NZ##^)j%=6{txLG_~w z&-CY+{#3T`8Gj#5y12x=`#+;^mH%6XUQr-brZfJb#{XshA=Qs6Jky{5yY;PR*@HUM zpZ`1hllF&bzifrj?N^)jhpc@{KB^q8{rbzA21y(*WT~yxel7N*j6`BX$>q`aJXM@H zFJOb05&>{!yD54cg|x-7Z6&iW zXowYPiTm?{M4@@b|C)9=HIPkx0}i-2r(x3$+nCnpxlX44MhJrXwconb!K zc6i1C|Fr{t4jqgDe3vji+t?(O|-dZp5eKF8maq*58;MV$zv+Xwc4D+|v zYt8{*Nt>hKW2L{$0k2`)THiS1*81KB+-|)50Qd^6K#N>hBbvs`4fHGEE-hEz%Nbu_ z{EvB0{GE)Sw^H&MxA5^ZKE*hlSEXw+aN_@2=A-t$2bex+;d49VUJFj&OeQ|xWHD(AI~zsrKxFy3UrcQ78c;0GAr zXTk4h{2mMbIO9hx_)Cm`*MjF`6Q0WdoCUvx@!whS0OJMhqfqs2W&A1&9%a17f*)f1 z7RFV-e1`EqV*G8~{@(&_C!c=zE|U*ANAMtl|j*D;ycl}YX(l`51nr=f1Gj6 zg5Syb9OtX#nZAfS=6k^H%JUW+N}+tmFOvECnBEWEj(*eu|4ZgG!+g}Zc!u#g z3;+Lc;8Tr*nN*&Fi_Ps225wiLhnYUIR?>U9{3jR>GOo(=f&-uRFdpsrzaKc2XU4+k zlZ?+XuI7<%Iq+EtQ$V!yrRI8F#`vTKzX7;ic|OSWzPFqCJjnRm+sycP7*AQ~f5Lcy z*G!*fe8xh5DGqK?`GXez8yKIo;I}Y7XQ|gd#x6`A4#uY}_(P13Tkyvi4_V6dQ^tc9 zT*E;)YUhXre;eZ|OF1_vdJDdd@sI_l?-2?)wBYwK?z7;JGVZnDf2(jVr|K{I?jZ4> zwv_)|Olfxgz8N^t&-={dXoT^Q-;CeGcq(AVA7#A2g8!KDX$zmNIi*cU?A7xy#;P){;W6AgHj89qcQ;g4A`s-!J$GJV#c)aKWdpWs|@rZ@~7DaE# z_cq2u7W@ImH4FZij9ca5pBSIBVZ%;5jZ=rvLaWA)GJEi>0^knten zgIu124tzf5fIsMf|C0GnSD5o%jfFpzf6{_q!+6Sqw=nLr;Bm&MEchLak6ZAE84oh9 z+Vcc(yLR)uU6ymY(p>)ajL%x|76!{36vy)awM}UJL$$1D{pvWcjUpu4H`PBA*S6Tidgr@o7uG z2OaQ-9Pks2Pg(MPf$?z*zUm4tzXiXNam|7^GVWzu>AgY5BNqBQ7@xA#>j>kM7W&5- zpJ80h%cmLFm=A`nxbm-*8E}h6qGPy#P#NPO8#?Og5vkx%>P2*#Aoms$tPcuYo$y-dsxzo zZ)hW~op7cx1`(!DeO=Ov?;nF;zrtH(`7@m8lZ?-ONYY=%_+J30@{IqJEKeolrvwgv z#rYCfa`^AeXZqWc&q}7h2n5ugzO!V$;@e1wdk5i6V+^im`rtxPz_)T_o8nU`@xOA( zh&bb^xWtb#{Q<@c9+&to#_uDX?~TD%6d%8&SA718@tJo^{O>u@-!tyLU)Jj%7|%NJ zUwf5ohk`*fe?0mt+Go5);yqk1`sNn3+vGn=T=iE3IQ2`2kU*g|p{JX%PIXbC zfJfY`jEAxk7vD+)e*QJ~?QjL*)bE!|`eM-1btB`mK3UF>Nm#py@u`nUJjVDC<8vO_ zk7qHym+_gm2L-zqus z-1V})^LI-A4>5iLaFWB2MGlLI-pH8muV+5v4YD1sTp=Sm7>|?(1@LXAA0YmyZ}3^! zKB_!-D%>)@?q@#JS4jT9WIkVHydW+4?`Hga3V*MpuVVbCf`5TFYgrfnp6MfhEcrC% z$pq(M;Mmpo9fXr!-7M+FxeX+_p7FUMi6510v@ML!PfJ{U&mD1tz^NU)mU-txOdsl! z^lF~^jG%}9=l%C%%>NkErwU|!#W&v&_ZZ_d*GoR)`#`{-W!%T(aftc+2k-*unNo|M zS%HB-^$mVd@_(M`FJXN0A0+;B#y2oNos_tmf44F|yHDa3OrKWxy%N8e@d?I#&jkf? zFXNwNe6B*`t&Bg)`1mg*F1`(lxbG_bX~|!_BM$h#0H^k!vB=@7ciH#*MTDarylyGC zFf+t;8F1pGS@_g2{VbOs*@>%*=_@UA9$|cPPV!gw%zK$n!4*M~{#nUJyPNUxVu`=H zLPk8y_*_)hSK%iapPi8OJx@u@M% zzlHHu;8dQMx!sf<(!;oBY0p1qJ_YN8g2OLYNJbAZKD$ohY99Os^J%ik{|Tl~eN)nZ zS+dcdQGDJe%lRS3|4rc^mAJAuR+h;6PO_d+`iH)~MeQ)RSMpDDIj>}VdXL2KWBw(K zYj;WhA7#9W@gURpGJZ4Tp$SQ^?8aS;`;JTgYJNY+_-vV^-^b(bQ;bjkNYa0n`G1M= zg3BeY^xi4PXWkBkRCdZll#E|u-$4M_feo(F3fpQ@Gk zbzIJF#%G_Ce8l@Kk@arIL)S`NeA^HBy^PQGO8g#RbbU?n;rT**2Lt$z7@v7S($@)U zP5U|Fd~Xb1QS_CPzMms6D3kRHh9oY&d4sre#^;Ynd;`;OW_Z(bjL(!wyj#R-+9!aY=Yrq9NVfkR<6jpz>^;l)eUka4ZkBx7ng4Tyb6R6C&-A{C zEa&G}$XIu|tnbV%lFyUO$IJNmS0%l8Z!VJD$oPDl#Fad}hw*}^C7)B0y*3J*>NR(v ztQVZ5;+kaoNKEn(-(F2b&pK)GKseYMfeCB$|zl!rc7ZVeW z>*;SvT)cx98C}hI0gt1-ocRVtUnA)i|0BSuJmZ$}@_(4#OCMaoCB99A@L9%FEGJze z7VpAU_)9^7i0^gd?jj68yLMPlILbfs4axtP++S@D^kJr-{i)>t8>T{7c5CZjkse^Et0dmea?63{1P?@-ZHHZ&3V>uaNi+j8C%PCLm#L z3**|4CB4#z1B_4cd~pra-^TdNprluJ^}URTUXeJOU0hR&&y})0r@1^|22TB}S>)|| zOh3o-$PVW7G~?R4B_DAP8*#s9e7-FxDF2n|*J7Pc_Oo@Jeid-)-`Rf2=Qz^`feZa? z(F62-E21CYDfz4V?qz(A_4Wbg^C06>?~?q*H%bxr*NXn_5?AxobBqU%NdC%C^=rm` zRg(Tk%-?f8%ER}@;4;Ed&N=R{0*<^6IMu7$Qm-zi4;_;HRlVX&KgIn5@e|ixrZ1q6 zpWrHDIsX*n^Ys!}?eHzeXIb9v6sa`rX~rYm4jIOOq3DB>4^Ma6N+<-X*W{lE1?3A& ze-Y!U+a>*tj0b>w`Q8{*Gkxf8NiV*a0)iOhKK7qn%!%I1_V!YtSprHH^SNPm_%lb~=AoG1>g=BOs<0+mO-pBmg zfK$HtoG-)LR-#uw3}J%#MDCOP@8!4;G9J7};=f}26ApYHVS3+sNw55Ak1;;`1&J>( zpC2iTle;e@gFyb|C2i4Bk zGX2!|CA}J78yFw|oy3Qk&lKY`Zel3@O6XT&ViGP*pcQZcC z_7#4L>u$!U7J}mUBNEm=4V?7GjAeZ>!}LL3H{Hhcrx`E!E6L|RmgoOuJi_BT!SvL; zRIl+{B)uAU*D@YtJ9CujgTSdgQ(PXU-)>@jjB&L-8f8B7tPjs)J|7~S?~TC&gi|}e zf*V}L+`o_Gr|9?VWdA-UV&UgxynyAWhw)~R5&c{}2yiL;d^_XQAC&kh5vyst7@z;W z#BX7os!x2TuafwcjDL;snLdf%&iMBkpW7huA2R-P#wXt+@rN1DtC9Sts6lXH86qwk zKB66X{#ETfMmWf66Z@Kh1a*?cAMRzl20-7xf~60KF%|!cc&`(@iP77u%uVxu?#qkuS$!Z&`R{+ zGtd5WWe0XLpU^$BoVRg(hnY{v!sjDQKmU)CzK_fKb;f5WB(Cg%zhzu2mgU^d^gm~O zhSwvVjGtF8+abu~Xl|KJ7#fSYBpJ6`77@vG4C=egxCm1i-DDzeI`YGeSAxW>s#kmc#JVlmvz5+On z-vZ`e!Tc*3pWY|=uVp;MxW;~uA26O^e4ghi)h~w_4?QBwqxAfz6#df@FX!>~6~<>i zX0F%w8225N_`RI(KQli0UCHN&&Cx!-S+e8e|x!D|C>8rN3;c@xvm zv7D@D{xQZwMUu~xD`bH_KscAp7|=JIgr3|Q6!2G={wU+xZIX}p)*~oR2tFQdYK^3a zdtY4NXZrb{OZ-EOKh5~~kmPd(AM0H^*Mx9nf6X_4(S z^IOSBmFEh^r+Iy$^vMmtg}$=rhiy!+v3;f5?T;DvHc9^5cwF44@PCrH8t)G??mJ(W z|JPjpzhHcx_m4i!_>UNmu>Mi<|03g4EGNniys*{2zpf^n>?^h>KhOLd84q1A%ej;B zt&B(hT$WROvkY-Vj8BIo{W#O#&iK@W5`QP-_cI=Bl6;Cpk=@K>^51if*%J(0;S(BVtmpo@f$eb7KI;_cvqfCrrpALisz9N64o+| zPg(5kJAn)Tp=BTTvrIqB?eJI3=Pw!e@_145_LSm(g=~j6GyQ4CL$RPhjxw%o&ej^|Bwh&|{W%+syRAdnF&W4;5uR^j=w>FEIZMvxI|uj4+zF?Vu$jpPw=QE`|R};sdK> zL>+KyhkT3QY&+9W^+@^)dHn8Re7aGVN0t9h#^<=5#W!`4#T4TOk4ipjy*#b>us$Pt<@Oc9Gd9FgO(z1{L z4~kE*?3Wu^PJS)u@jUO^8c{+X*4l+o_`=@ca{?db@)t8cd!FQ@%5xLr+LIC&--SnSUYAgUm*|o#{26*VO!b*n$5e zOh5H`$zSQ2#~Js9Wjp_l3-yA+ACdH`%nOXqyhGCekPEb?L)JI4TH?1epLa1nnU;Lo zn7)ni)O`}ah1)s8c)=-&k29W8{MShw%R_NZFs?l*@h4f}KF;{KWxX~-IHxrRKUDM{ zS^gKeobv)-4P#vLS80CB^z*Mu9O_YAYoJI)zjOOM%=qOB-y0OjUo-x0#%C^<_ye48 zgz?BnB(CIV6u6K#%Q|kq;*(b`IQKE1dk7bZ`M*D7`jA)B-^%n~Wqke$nXj_1W*LvL zefu6}H_y1n=QQwBTxWO5c1T?u6u(>8puC20-<1-7zlg=>0D;pvu?UZ&e8#sh{fx!F z8Yg;;JFjIP(RxQR{^F!o%rE>4M|uruR*V7!gSR%~vHtk_1 z5DXT#i6F_DOGSgVv%N!{fnA!Y9yA5j>M|_`igs#Lw#Bzwx=_;D-_*3 zl#DX8B#W|&rL!n4*P?xW;jk=JxTGvlDl=M=Yeo6eTq`Px>*i5tCGbv-j>NX@NGB8F zvWn6w$zEidizqE)e93I9N@QV&qp7O0%-&Qi94Ire%fbHgas!@@4dGKm;XtJkMBija zM#UG1s>;%_OnO^1vA3$M2VVp#_shgU+hU1uILEijXJDIyOI0yciY1r_Dw)S?p!Jt> zXNcCyjE-c6V&Mudo$R*Wg*Mla!foxG$bg4Mq2c{Uyd~D6~X1kK(dK zCHz&!rexU(RF(#0^YkT$hN2_koK%&liUfy;F)9qQe^Y5$rlGQ?vc0Bvtf6;Df2?9? zux3x#9}oiO5L>oXq!dkulz#tGNlR&N?TO)2SeRe?Vk5Z2P#pRRk0mlAdo}shslL(S;k`&= z_!TBCZz6p?DkjqxOs7WTyP?>E>Av_tJd+;H#D~({@~?-b&|1NCG@Xu((09B38+i36 zM~0)BeyFm{8!wm?I#nvtBZ<)lyDf`KSU=(cz=>@O=R#)OiAq*4=YOw_jc zZmJ%RZL5lQRd;QvDXHomEB9><`6lTRsV2LdtD@W5 zTbp~Ehm*tQeRX?VyKnYytH$ZC*CFgOAIRq5>z7N(BRVvY9EoQJjq`m=Uu{)yd1rLX z&fS~*-8;69-W>9`+`O5k(kb>0RAe*}?@ji_xGvOMF@MLFn>u|pdn(3;cU1Kz>O$RZ zEgLt71FyfeXgW2h7|NxkvA3$Hs%J1zSCZ)J+tN|d)wp+8Wwct=)G4~Gx%G$^3 zTB5L3yY_Ay>)*Dcwyp)LL$-obbU;q+PSH{|JH;-|TIwXnw97;CEn`-ffkmyPBIT zni>XTd%~=)oC*9=6qX>6eYOOFtmF~|vIU(902jS_x?D?^E?3CX<*He=TwhczH@K^omC5DCZsl^d;AzLXsd-LwCg4ea34-PN0?)lI zJ+jJ|>u&bJI+p?Kou#uVS*{F$kI#Kec@kDfv|7Qxteca1)GTv>npI=y{JnX zmrr{~%X`NLT5D>$d)m`oJG-iS_ipSf9SFYxn_?uI=t~+G`qj;?I|pK8zLIVJ9i?S0 zy|L)d+OF!b>`aG9%0He+jb_5+;C`d-2h%z>9ouDGp_4B*Wz2eB~*|KM>w0duSJk>m!*i<(_`&+mI^V6UGDARA0wvsoyv*7;UN)Lzyx%8;bxm+ceYsO_-k*yiW@&%S@ zfs$p4U$TrGu!ZlKKkH8C_+|K)EhEWgQa3yDXM52(ewp@XgVZ_wGX2BrUB~nl%hZpT z!_MiKDL=0x9n)7WlfQpC0rLlz=|NsiJC=Ya2*-F{`8dY&0Sm|YvSmg9J6;^q^YYL! zzKnLl=_FVZyVDIF)f?->_3d@xuokY{+Fre}xfXC^`<8Hh6UR2yb!g$nwoNtFZQ)G~ z4W0E};jZeMw)(I(5{;*09nr)<3|o=Ok@jTu$Us^fh$Xt@d4@1sjc77?m!=aJ@dVBQ zRB1TWf8(aO_EwoAMo$SyM8(Qzr^k!isb}j3P@H z6d!>O2Z{s5f;Nmz_$5wWB?)tEs84si z07D{y(=5p?T@965KMq?Zdw2H7hhnCxrALPir$EZe(7d}wQIk#S+QHGpPBc6p|W(>O={59S#wN!#La2ONXdNGNSwRjG=5}I2u(GPjp86V;YX2#4{qhTy9l? zO5~Onm0YTpC0J@>?{Z`$kqo1PIP{iG==o6J8H=n=G*v*`2@&x%qFsRZ+}f7N~y9 z32g~1d3jtYECUh>@G+ixqGm_Rmga;ii8#!KnxSHp!xDm7LOp94ExG-BtnhqVJdx>) zWkOi->f%=ppDfPDg=nL{CO$9#8Ev3bBHD0lWFS^OM5OXimmi+6en>=e#MBa&6G+?m za0r$JdWYuPzz=&!RzzTO8IJ{TrPdxF-UwCHoJhn*WG7aO<1ebD+j6I2!kANfhx=;L z<{49!l^j+f7ghm@@=RlWsHt`5UHHARfJQtHg<0HxAcv) z*Hm=JD_iRZyBh{O2f|t=i6X)}CxMEa#{v{oCTV7t6v{+kJCmRZm;@$gpp8H~c%%&b`%PZ77<~bips91`DjFM0&I6gQ z4QH}?cZLUI8S)P4tp+h4iSDVB(}G^7GMY_{l4v**BPR%>#N+&+mQ3WP9W`=wb|od) zx!|eCs#dDBRB{g{&zw3fE0Jv@ablFQ^}bpQSHTkr-@k+uhx@xwERbv$AGy%a*F1<|qWeADy4hbvh~k&`691 zt4bSh+cpwPR7DfX!K!GVf8+2bUq|o02F$e9QkQCRCBvu_opR_TUk;ax1u#%rs>$(_ zlblj4wrRvRV4_tOrb)XLyD>s1ZA=f;kEPI}`Y~A1d9p{#DX~0Z*oiR`9cmIrj=^du zhna_#5{FQi(6KmDiaL#{ZsP)@ys-q1VbWZb>uJB=S3+XYg>t81x}f!QJzDDXYthVb zUlOwuS|Dw_(N8x6&mC{Z59nz)WJc3|P?zJ+?*j;90RL0A6p$LHIwKa;;ksz18HXHw zSkQ|xy=ixB1cw0kXyTZp#OmU^YxZu7jU=JjMuuW$)yC4%7~3~AvUjwl4F^y*wfH(x zqwVF5l@N~DSgdz66RS?_rQ^IyPEX|((quDsUjQP{lV)QKnqSx%xp@@ZJ3K|IImk!G z5{&~xLkCL4)VI9#;K!y{@94;gZXT$jgi9!jj)O`qD@O@A!o!th?x7`9Bgui0=r9hk zr!k^6a_H)MP}s7he06^Qa(_8y3?=L3+CWXCb@0JlRs*Q@=H|_beckn&w(RP=Ii0B8 z(gqjXUd&P?^3dm2sV~7kDI|+vDak5h8WI7lIP_5llTe9uPWVcIV*bdP!D4Q(=pI@Y zz`01Oss?B5jSUXNl-i^{wg*a#rU2Yw0wTW^jR+>?!9iBF7+3?DK@i;(5bfNth%SH@ zQ|5QBsL-U{Wi{Ppb(TIaD^YAwb*U0Dy<+hpjF(Ov$W3JW^;R*Qehp(+5_PZc>+4so z-#FTx>gcSg?%mYgQPH|>%V2A3FMOJ&_EA18CD;H5Z zn2)GtTMWxHgXM^p6$7<3wpUEOmS*QzF}oq2WA#xV#-V@FybUAC;YIUSIjs*279yWr zN4pKj;A1!2$mw)-re5z$Xa+hH7cR$^t;o$ZZRYYX^94w)$;HZI9W)#r+1bXciLhFY zmRFH6M#iUgtpc~ZZNoyOGRd8^^s{LJSixhxi}br6!sc}U z4V8icf^wJ)w=zEpAsC_%5PVLAc9OCdh6!qHYYR&}ZeWU5>J6#-(`{H(kEXilD5R3$ zaA^sQjztW`?B>Uu1f6cP2!)YMLWy*}$rP=imy}{?igX9$7;{E6R~^yq6YWAF62_^VJ119r1n5eS@1v>)T<3 z*i0B0X2!-;ei5{>og1WjbWHCEn4={$UU~=3%OKf2H${g=l@XAW1wYg^B^fqP8A>rP z)hjp}00kkZ*Dm(rEJ2SI8iY7)lIs2_rinhenlc*D#uXLZoFlQ}r>!QL>&QxfY6=b-i66T7rd)S;Use*RH zer<@19J1|qBr!?pi|zn4`#^)uG)w9^CD!)JiQT3yV7BQ1x!=%R8y|NcrFaB5{kuk+BHf!w1cpmO`P z!vn)uElS@UIb@gd*}$D=>}#Hp;b@_uBqkR84;5_H$1oky@twn%l&q5`)>ZN;B<$ir zWHWu+`01o=hKG~z^Z^{0i8%C{s2DBl)8Q&u*I;Wi6GQ*!CI=MBS{}=Q6+Ckjs2`p$ zjF)sWES<}6C&cii<%n5>>Vqg}{gq&y4)d~+oMgEUC`WFjPE&hzVT4B;Pb0u+GSUSq zv8a=W1t44E&;SmEkd>b^kA(9P+K(Up#1b2pp{Y-D`37L<u!iXR3rFg7*rPT?m zoc9hI$mNq(Q<*-lUDR(}TLW(}GhBuTGrAz@jd{xMk>;6B>vZR^n%o0W5|AXUhekHh?2(g2F0r9f z0eDTZY}(YnXkje9*>!Tys5;SChX-*X$JE6_QFbMzVUwH8%P>!}b#L9az!ct#uJ0nx zFT(%Ub|SfgX-qRjlH5S#V^GaCicx4;nn=aj*1&C{4@js&3~k}I$_X$n6~=mV8!)96 zV%I0PH=x?Q0ydpdo^!em3SaE6)r|JT=dW6ergvINkq+H7LXYkC@iHZsvIKeYGC-}& zF;%~YeKjAP63VH7sR>!oEFB_KK<-Gq1}0=xQCFk4uqbQS%WZT3*iHeMXdK=>U^P$m z4GwBLHv3e21~Ayf1I8hmA{FY#7BnPCcuZl;la~wb)0EL22(>q=@4PA(xYc;VG7CN* zJcTZ|n_!72)kLf>#%P%+Wh%Z;DHr)0k5|wpuka_SvI%nyla)Rgmr#^`m^TiOxzZdB zg@%WfSv=*sv024G~9`G!Fb@s|q<<(=l@Vp2{d_b8*V6xu(d)EiTv zvFVQUWYAB0ro2XwVxw11$f(dFTt4$EV~M(#!Qdb0ZGitTX6{+Ew#tk*&uCo&T=zcgi9QLRK%t*NQ3D;`TxE6^C0NeXim3M`tO<*Ym)Ml-uXbJ_r97nN>V zypNIFR^Uk%dxT1zEYTd~y$~!rjlPdu%VGfsd#@**=H(Gf-C|u*f(701=m`Eb;aO5{ z5&2kYm>ev_qY2c*H0>GH6<0h!)`mkBalVI4JZvD5I%G#7YN@X|bBYVT7p@e9Dmv1K zk%q^TJF%w_?~m(SM9?f!nS?Rb7z?vRdzHWrV^gKAC)U}xdmyy0abI`h=BnOk^UjuC z8?nVFw5?iMt9@jQSj+@XqXTkXo*O?^aGIf`cK3|-n_36dixwtT(B*hqSR9p*uBx1D z1Yq%})3pXu5A~BSp9=FbRJ4GgnyfB?jX z$@5^Uhp}OEJtVeqqJ4|y$PYuGHSES@-{??G?NG_>WVv!>pCDG{wC&Ujm!qKUml?`iCBgi17e3RI3bTY?&rbct;m zJ3|dm-qDM5uuo?ijl;U@3yYYzc~eTr4@LnyDVn)QHep#L+gvPAQ09J7TNB@KxNBoA zAFY&Iisnt^DmW)aJIHyzD@ldtj?<;dUj?I6m!_QL24Eb=6T2aT%4{%NMtbr<0FN-6 z^pn!#e&|Ud1iao7td#^{XLRwfFuLzyCvYz%N~%i-c65w1Y^xbS)g>lM2xgYzdBxH-up~;noI8;-c zOyHaY-p(UAO0%vV#=Ef|!YVIAJ$r|ul!1A`kYS%5m0e{z7RUawYPHl+?lgFScz>}& zZWZQcZGRP9ZRyb-6gyXsG8_OQNvC~nT?in8x)R9=R~aqS$+}mbt=(4JW0O9}GKf`oK0!FtB&f^jOuQ6b`<0Iz=U< zuO1#@gCYV)Bw6g{&iP@MSTh9RY8`;Zc%O$E-9L+%2_TUgwnqTw!hJ#DMfnH(DuM5@+ z^MZnBA-@k;eJ@0S_>W(AtA1+lz}?ySQ|T)?eI=(4>Xh(D&A4R+ye=7Yvr=REa zr#PfKuE3v4Ux<6U;`k#HmHzRwgZQOsk5d9%_fR6kW%;S?LR{8R{_SrH3hM1|l8NxT zWpSzUt9(@WKEy5<(ob{xX-+@M=~W-8@-wU*!VR^l;ukz8D58Srh(H^Yfu{0T=~eyz z1o4!tXzFOdmNvDDVisJo=ljP;Bl}=@dfmuQ#Sw-`igMW|{H1ijYHV`M<*H z^U`mMr$LfSVQ(&uyf{MVTNUy+t%N9A9@=?ggh9CsfN zM_v9@KfZ*tM55Bqe^Hiy{!_C2iVh^=Qsq|R?|~ZAYtvl+DVg5K`EznTf0f>acw>6? z-BaJEWqNCWS=ed$0Em|=e~{lJUdrhY`&7;{^qPNa=W_lQGEJr5ZlPECtB}4=Ol>>P zbf;F-in~e9|0$k;NJi+gtBADlLTtXG`>h bcwf5lQsq|IdAPAl|FK&ny55q&@>Bc20}V5b literal 0 HcmV?d00001 diff --git a/main.nim b/main.nim new file mode 100644 index 0000000..6f18822 --- /dev/null +++ b/main.nim @@ -0,0 +1,67 @@ +import strutils +import json +import random +import times +import os + +import input_type +import map_type +import turtle +import turtle_type +import score +import select +import mutate +import display + +let now = getTime() +var seed = now.toUnix * 1_000_000_000 + now.nanosecond +if paramCount() > 0: + seed = parseInt(paramStr(1)) + +randomize(seed) + +# first, get the inputs +let input = readFile("input.json").parseJson().to(Input) + +if input.bits < 4 or input.bits > 32: + raise newException(Defect, "bits in input json must be between 4 and 32 (inclusive).") + +# get a map +let map = input.generateMap() + +# get population turtles +var turtles: seq[Turtle] +for i in 0..input.population-1: + turtles.add(input.genTurtle()) + +var lastTime = cpuTime() + +proc generation(generationNumber: int) = + # does a whole generation + + # gets the path of the turtles + for turtle in turtles: + turtle.execute(map, input) + score(turtle, map, input) + + # display generation + + if generationNumber mod 500 == 0: + let newTime = cpuTime() + let timeSeconds = newTime - lastTime + lastTime = newTime + displayGeneration(generationNumber, timeSeconds, seed.int(), input, map, turtles) + + turtles.select(input) + + # add mutated turtles from previous generation + let prevGenCount = turtles.high() + while turtles.len() < input.population: + let basis = turtles[rand(prevGenCount)] + turtles.add(mutate(basis, input)) + + +var i = 0 +while true: + generation(i) + inc i \ No newline at end of file diff --git a/map_type.nim b/map_type.nim new file mode 100644 index 0000000..05c4c86 --- /dev/null +++ b/map_type.nim @@ -0,0 +1,54 @@ +import strutils +import sequtils +import random + +import input_type + +type + Tile* = enum + tileEmpty, tileTreasure + Map* = seq[seq[Tile]] + +proc generateMap*(input: Input): Map = + let treasureCount = input.treasure_count + + # create empty map + for i in 0..input.size: + result.add(@[]) + for j in 0..input.size: + result[i].add(tileEmpty) + + # populate treasures + var addedTreasures = 0 + while addedTreasures < treasureCount: + let randX = rand(input.size - 1) + let randY = rand(input.size - 1) + if result[randX][randY] == tileEmpty: + result[randX][randY] = tileTreasure + inc addedTreasures + +func tileToString*(tile: Tile): string = + case tile: + of tileEmpty: + " " + of tileTreasure: + "T" + +func lineToString*(line: seq[Tile]): string = + line.map(tileToString).join() + +proc mapToString*(map: Map): string = + map.map(lineToString).join("\n") + +proc printMap*(map: Map) = + map.mapToString().echo() + +func getTreasures*(map: Map): seq[(int, int)] = + var treasures: seq[(int, int)] + + for y in 0..map.high(): + for x in 0..map[0].high(): + if map[y][x] == tileTreasure: + treasures.add((x, y)) + + return treasures diff --git a/mutate.nim b/mutate.nim new file mode 100644 index 0000000..2af4c9f --- /dev/null +++ b/mutate.nim @@ -0,0 +1,14 @@ +import turtle +import turtle_type +import input_type +import random + +proc mutate*(turtle: Turtle, input: Input): Turtle = + # returns a mutated turtle + let newTurtle = genTurtle(input) + + for i in 0..newTurtle.memory.high(): + if rand(100) > 2: + newTurtle.memory[i] = turtle.memory[i] + + return newTurtle \ No newline at end of file diff --git a/score.nim b/score.nim new file mode 100644 index 0000000..2bdf019 --- /dev/null +++ b/score.nim @@ -0,0 +1,38 @@ +import map_type +import input_type +import turtle_type +import math + +proc score*(turtle: Turtle, map: Map, input: Input) = + let path = turtle.path + # create a list of treasures + let treasures = map.getTreasures() + + # create a list of distances from each treasure + var distances: seq[float] = @[] + + for i in 0..treasures.high(): + distances.add(-1.0) + + # iterate through the path, and change the distance if it decreases + for i in 0..path.ys.high(): + let x = path.xs[i] + let y = path.ys[i] + for j in 0..treasures.high(): + let (tx, ty) = treasures[j] + let deltaX = abs(tx - x) + let deltaY = abs(ty - y) + # taxicab distance + let distance = (deltaX + deltaY).float() + if distances[j] < 0 or distance < distances[j]: + distances[j] = distance + + # every distance contributes to score, exponentially dropping off + # by the formula Ae^(-k * dist) + var treasureScore = 0.0 + for distance in distances: + const A = 100.0 + const k = 0.2 + treasureScore += A * exp(- k * distance) + + turtle.score = treasureScore.int() - (turtle.steps div 5) \ No newline at end of file diff --git a/select.nim b/select.nim new file mode 100644 index 0000000..b7979bf --- /dev/null +++ b/select.nim @@ -0,0 +1,36 @@ +import random +import math +import algorithm + +import turtle +import turtle_type +import input_type + +proc select*(turtles: var seq[Turtle], input: Input) = + # sort turtles according to score + turtles.sort(compareTurtles) + + var scoreSum = 0 + for turtle in turtles: + scoreSum += turtle.score + let avgScore = scoreSum div turtles.len() + + var survivors: seq[Turtle] = @[] + + for i in 0..turtles.high(): + let turtle = turtles[i] + const smoothness = 0.08 + const chanceRandomLive = 0.02 + const chanceRandomDie = 0.0 + let chanceExp = exp(smoothness * float(turtles[i].score - avgScore)) + let chance = chanceRandomLive + (1-chanceRandomDie-chanceRandomLive) * chanceExp / (chanceExp + 1) + if rand(1.0) < chance: + survivors.add(turtle) + + var i = 0 + while i < turtles.len(): + if turtles[i] notin survivors: + turtles.del(i) + else: + inc i + diff --git a/turtle.nim b/turtle.nim new file mode 100644 index 0000000..0adcc33 --- /dev/null +++ b/turtle.nim @@ -0,0 +1,75 @@ +import input_type +import map_type +import sequtils + +import turtle_type +#import instruction_sets/eight_bit +#import instruction_sets/ten_bit +import instruction_sets/any_bit + +proc compareTurtles*(left, right: Turtle): int = + -cmp(left.score, right.score) + +# general: + +proc genTurtle*(input: Input): Turtle = + if input.instruction_set == "anybit": + return genAnybitTurtle(input, input.bits) + else: + raise newException(Defect, "Unknown instruction set.") + +proc executeInstruction(instructionIndex: int, turtle: Turtle, map: Map, input: Input): int = + if input.instruction_set == "anybit": + return executeAnybit(instructionIndex.uint32, turtle, map, input, input.bits) + else: + raise newException(Defect, "Unknown instruction set.") + + +proc execute*(turtle: Turtle, map: Map, input: Input) = + + let treasures = map.getTreasures() + + # back to start + turtle.y = input.size div 2 + turtle.x = input.size div 2 + turtle.path.xs = @[] + turtle.path.ys = @[] + turtle.score = 0 + turtle.found = repeat(false, treasures.len()) + # save turtle original code + let turtleOriginalCode = turtle.memory + + template tpath: Path = + turtle.path + + proc markLocation: bool = + tpath.xs.add(turtle.x) + tpath.ys.add(turtle.y) + if map[turtle.y][turtle.x] == tileTreasure: + for i in 0..treasures.high(): + let treasure = treasures[i] + if treasure[0] == turtle.x and treasure[1] == turtle.y: + turtle.found[i] = true + if turtle.found.allIt(it): + return true + return false + + + discard markLocation() + + var instructionNumber = 0 + var instructionIndex = 0 + while instructionNumber < input.lifetime: + instructionIndex = executeInstruction(instructionIndex, turtle, map, input) + if instructionIndex == -1: + # out of bounds of map + break + + if turtle.y != tpath.ys[tpath.ys.high()] or turtle.x != tpath.xs[tpath.xs.high()]: + if markLocation(): + break + inc instructionNumber + + turtle.steps = instructionNumber + # restore original code + turtle.memory = turtleOriginalCode diff --git a/turtle_type.nim b/turtle_type.nim new file mode 100644 index 0000000..b7d9629 --- /dev/null +++ b/turtle_type.nim @@ -0,0 +1,13 @@ +type + Turtle* = ref object + memory*: seq[uint32] + x*: int + y*: int + score*: int + path*: Path + steps*: int + found*: seq[bool] + + Path* = object + xs*: seq[int] + ys*: seq[int]