From 95ab26eae90065d40149b3a7c3ae7b823f95864f Mon Sep 17 00:00:00 2001 From: vitler Date: Fri, 10 Apr 2026 23:44:06 +0100 Subject: [PATCH 1/1] a smart nwn np project, or agent npc - anpc --- docker-compose.yaml | 24 ++++++++++ redis_bridge.py | 74 ++++++++++++++++++++++++++++++ server_data/modules/Smart NPC.mod | Bin 0 -> 157022 bytes 3 files changed, 98 insertions(+) create mode 100644 docker-compose.yaml create mode 100644 redis_bridge.py create mode 100644 server_data/modules/Smart NPC.mod diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..17dd765 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,24 @@ +services: + redis: + image: redis:latest + container_name: nwn_redis + ports: + - "6380:6379" + restart: unless-stopped + nwserver: + image: nwnxee/unified:latest + container_name: nwn_game_server + depends_on: + - redis + ports: + - "5121:5121/udp" + environment: + - NWN_SERVERNAME=Alentejo Sem Lei + - NWN_MODULE=Smart NPC + - NWN_PUBLICSERVER=0 + - NWNX_CORE_SKIP=n + - NWNX_REDIS_SKIP=n + - NWNX_REDIS_HOST=redis + volumes: + - ./server_data:/nwn/home + restart: unless-stopped \ No newline at end of file diff --git a/redis_bridge.py b/redis_bridge.py new file mode 100644 index 0000000..bc40dfa --- /dev/null +++ b/redis_bridge.py @@ -0,0 +1,74 @@ +import redis +import json +import requests + +print("Initializing Redis Bridge...") + +# 1. Force the correct Windows IP address and test the connection immediately +try: + r = redis.Redis(host='127.0.0.1', port=6380, decode_responses=True) + r.ping() # This will crash immediately if the connection is bad + print("SUCCESS: Connected to the Docker Redis database!") +except Exception as e: + print(f"CRITICAL ERROR: Could not connect to Redis. {e}") + exit() + +NPC_SYSTEM_PROMPT = """ +You are Elrendur Arna. You are currently residing in Alentejo Sem Lei. +Keep your responses under 3 sentences. +""" +chat_history = [{"role": "system", "content": NPC_SYSTEM_PROMPT}] + +print("\nReady! Listening for game messages on 'nwn_to_llm'...") + +while True: + try: + # This line freezes the script until a message arrives + result = r.blpop('nwn_to_llm') + + # --- IF IT HEARS THE GAME, IT WILL PRINT THIS --- + print(f"\n--- WAKE UP! NEW MESSAGE RECEIVED ---") + + queue_name, message_data = result + print(f"Raw data from Redis: {message_data}") + + # Try to parse the JSON + data = json.loads(message_data) + player_name = data.get('player', 'Unknown') + npc_tag = data.get('npc_tag', 'UnknownNPC') + message = data.get('message', '') + + print(f"Parsed: {player_name} said to {npc_tag}: '{message}'") + + chat_history.append({"role": "user", "content": f"{player_name} says: {message}"}) + + # Talk to Ollama + print("Thinking... (Sending to local Ollama)") + response = requests.post('http://localhost:11434/api/chat', json={ + "model": "llama3", + "messages": chat_history, + "stream": False + }, timeout=45) + + response.raise_for_status() # Triggers an error if Ollama is broken + reply_text = response.json()['message']['content'] + + print(f"Ollama Replied: {reply_text}") + chat_history.append({"role": "assistant", "content": reply_text}) + + # Package and send back to the game + reply_payload = { + "player": player_name, + "npc_tag": npc_tag, + "reply": reply_text + } + + r.rpush('llm_to_nwn', json.dumps(reply_payload)) + print("SUCCESS: Sent reply to the 'llm_to_nwn' queue for the game to pick up!") + + except json.JSONDecodeError as e: + print(f"ERROR: The game sent bad JSON data: {e}") + except requests.exceptions.RequestException as e: + print(f"ERROR: Failed to talk to Ollama. Is it running? {e}") + except Exception as e: + print(f"UNEXPECTED ERROR: {e}") \ No newline at end of file diff --git a/server_data/modules/Smart NPC.mod b/server_data/modules/Smart NPC.mod new file mode 100644 index 0000000000000000000000000000000000000000..38083903b4abac19248e8d1c2bc49105d7ad4b6f GIT binary patch literal 157022 zcmeEv37lkAb$-plBKr;sYE91oJuu9|=CDt7clC5ZZ}c*oXi?o=(_K(q)l^l_!lI+1 zqM)FnqN1YWP9jDVjiO?L2`))AAqg=iF^Nfx5jN21JehHU1U$7WSn}*{K|4 zVK@|^oK=20pPPuqo@e>RLV7Nr*`F^$L}E@FaKEZ|JR3q9Qgl4 zeknIS?P@a?J05(>xi_mKrhOmMC1r7NnG{Pk(K~LbH z{QOw#kQc>bFM3HV_A#9Q-bJxk9?Cs86^q>iWBA6^u~>Y^ve=J4zAW}I^7zDq%VH-W zpD%xAS?n|z<99!|EVd5Dckq{%#WK*>^drk+k0YNeet%i)hcNmxzrHN?+H+&E2mWVS zY(3I__kWkgHfCTq*DjCcalU7AxrsN}J!<-S7rMkW6~O6I+R#Vn?i&vlp|B7nn2T zglj7c^ZEP{s}GLX#5h&OIH=z8D zypaD-Re2b(VrMRoJ6SsE4qk5J9c(oGq@tgWGvAf{!$ZS3+`6n<7EW;G(4Oq>YzYnp z^kIYB2X~}L=v)x@04l!n&X^GuWjbwVaz4VLo&Q>lm9Ju!$8OD5MzZDkd?isHML#V} z`{(`E2J&8=D@^9+r?T;ms)Oq|@-RO({a#0W!-n`s_J;W!Y80;&hJ8Rc8iX+m#|=4(7Eg5-AYbJ zKuVmMtjuTf@k(}I#TA!n9MR)tIOY8Qo=hcETUwp|J6*A=<>q$BJ5>g&E{k_`#LqZG zXG$JBnIGSDtqxmrt22srUAb6@Uk5GB6$|AoYxmfWOq(aD3Z&>(AW`pK&=5hwFI-j)!6t;Y{H+99QA^ zaU7q5w|_5&{Wy+rO=dO*(hV3COkg^p>6L^&MbU9ZcPg6GK#5P8gx;d)K1B~JdWWK~ zRrHLa=M=q9(FYWLo1*Vh^gW8cPthM!^n;52yrLgg^rMRYwxS4MSo1u4}vzMCv@`=XwIe?zNO+krs(e}`Ui@B!qS|DN?=}K$4-BNGdrdJI9n9{ zivPq30?XeB2>%QfzhCjs1fPNNF_OFSI~AX^d&y_5;$tG_^3PKILlyt)pc$Ayy0065 zvx=|fzew@93X^g#R(wn9JJ;$Nc5yY83uzWmgX={$Vt31lH?RK;n0)d`?q*t$$8KC4P^} zhsz1!cdL9jsTThADt=t?lPdly#lH%CY2WWDK6T4L`Og3(f9jBd{4)XJvyKepcLKsU z6MoA-OYzNA+w#{cK4oKIK4$}x&uTIe$X^EtU+e80#ecD?7agI*k1IVOx?A^C5J&8o zeA+Jk9NU^Ib-A-g!t@x~u@Yg6ldBX2k{Po}uBvOMo zxM6f`WF*<^p2qr9qhr;xSS;0}&tkE`#6VJWMv|j7>AOet)mW@I(LI(LsuoFoB<-D` zL*;hg2Tm!recsY;;t_3o{1TYCq0a;)-Fb&KAIp8|r zdLR$X0tKK5%mFt5C7=vcfO%jKuou_|><4ZHZUSxwZUI&T%K++pvJBRN@-lzF@>sUFtnsmKcVSMS#aprejpJib@GEhAK-k6#W)Ozg5w1Q}o@6e!HbK@+b$vKtII5BmFT0TfI;M7TBecw=_eT&_b6bSr8ze20vM0u82uV)`cVevLw_pacp-2+LD45F z`XoieCA#4hmvZI=q9YC=x7mzO1x-H7<(!E$!wUi7a}F$g&U1txSNv6q-=X-c6@QK5 zvrQzQGZgEVrd-A+CbuT z;heU`&8V0ipXq)210{`?O_-D*@Ul`_5GW?U$k7IhZ~-06GV- z{|zd72=u2ce;7vw#<|*14n1ON9@syo?D?2IvR^v=@4*CRVBeCk9R&L%u>;`xh4fCK zXleF8j(Oz26u8sU*WmbmOTP?9%E>s)<6%puar};@uf_3iES4@w;RHP)B?>=8>}hvTD`z8=SK0qi4rfcmE{W&x%n z3c%w4^DF|Z0ERi|VE*5L|4b`!PPf;>;?UL^!s5KsiQ*fFvXubQIb{?349in|L0BBx zIzw2TI4c_vhq9G<(Y7^Zlkqq#&x=Cx6y5G)z6fFYeAJ2J8;7#d_D@i;?KE562GL#ab(y$VL6!2rx*T3soGDrq4NGaWt%0N2N^j1|aX4ROcXmUnoSL0QoicRj z2;5LpD$UPTtO)(ZqLAkLU~xEGn(e`UOpZ>te_Wi}-=*q2TEV_f$TXapydIl%aIbwb zvwtk->OWCJY1oQVNssg*>)1XIgZY`u{pNCPpNHX|j*QOapz`Wm%Ol4#T}ZoXzjS{?BUp4#T}ZRxFi^T0V#2Uhm50*$~zA4#T}Zn4RQ! zTfOcu-0LH~(44;RFx>0?-s=v-y*|>Fo6OFs{2hjSz2AG?VYt_!?&5r2r#B4uI@Dcz z-C?-bNBXeOrbd3laIg1!uR9FYU;DC|DcDc71C!BR%oj`P(d%g&49i&M!x zIosPY9%T0Jp3g(dVkI|;EI{S+*}`-dLZTbTx3)m1{IT?1rlgEZL`D~?8b4Q>aP=yvWz*$ z?B#ly_B@HH#L@OT{E0DWIWHEbj7duZoI55h3`{d7i?b7%%8@pQB7U1t*mHzEE6>58 z$M&y&*v#;T3y zT_~p$7}_>&+H^Q2fEHMaD44CqY32%mt#S}>FmMRK)_ESl+d`av9swK)90hQyc?@tY za2#+vz*gom=_KG}fEMw5-~|A0L-O_`m%uLqxGabRtAGw*HLwOa9XJCx6X*oE96k#; z8(0UN1FQ!&0PKOR2zw5D3wsEA#f892fX%=~z{LP>!}0dpWx(aY6~GoC0dxV~Ko5`v zdV#G#ACLlgJM1c;9~b}zfgxZRxEdG%Mu9P49N-dlJHQ^d6W9gtHWY6^y$s;(rZjLZ zkO3xuNni?q2aUZNcn9!K;2z+Iz`p`d1OElQ3wSs19^hlZZvwvq{1Nay;9lUp!25vr z1NQ+R06qwO2)G~kFz^xJqrk_3PXM0;9sqs~_;uh@z=Oc2f!_c=1AG?vE#Py&=Yih_ zz5sj?cnJ6s@MYjDz{9{-f!_rl0lo(O9`O6XqrlgJZvfu}z6JaN@Q1*+f$so+4Ezc3 z81SdSp8U}lYvu! z=L0VQP6b#V&;7p(sSPPs5oDHl4&H>f~8vqHc!$zPF zU_CYg=K|*e=L6(j09**X1lSCacM)(ga0zfJK;C7*<-ird7J$42&;@h@JplEU1bTt3 z0LxDSR|3@ARX{&501N^{z%Xz%Faqc;4%F+T0Cn~~GziN(jTzeG4jlPNjP;Pmz=-As z8`YF6G}}gKwu8`dMN_xJr|yKNZiL>VXzEt@tP5${fdtA;xjsQ7K;U)iLinFleA<=p zze58;V0_x1@IS8N(;kH{+a}lsv?<}swh56@__A$+e99+$*>grdA$-|$Mjp!$zU(=Z zxWfOal9T->YWspauRvS|?;bSDsLO6upQLX6@@C%-Dnr{TZTJZ&u|I zIkzbOM^t>eDv3X?_?+Jef1BcSTo(RzmH)8fzgxxUyh7sdP<+mrg#RhU=lnwW?^Arv zMTGw@#pk?B`0r8t&5F<82#6l?ivNBUU*dTBoK5&I17GBSK=EI$;&XVG_-V!G zJXQGDC_d-0!q>lj;QUPZ85RE&#h*}ok`n(O#pfJU_%fGa|N6Y*%Up(fW{~(Ymm!~; z628o3$Y)-{m$?l2gz#l9BRt{j{qq;7`23Ba=$T`Z#GgXFg#V1g@2ujA6M~b6rXDhiJwz^t~-Q(J@_L3X)6D`ioZ(5pH=)0#V;uS zYQ--q{u;&Cc6GYq&#CxlDE^O?9yTjEZ&2~MUXps16u(pP%Zkr+mBg9%e_*^pz|0hZwuG^y41l~1(ca6a8*srC((tUEg zai-yr9nMzv+|df9Y%K-{=#=*6Hknty-hAUD<|gFIkV%x9GLF zcO6b!(`)bq&bxqapa)0-y}(wW4@d!AdtU|g0|S8Hx_cD-F<>0n25bj*06T$Qz)OK^ zfR_O;2hzZ`Kn9oqCV?p+3+x7_ff*nNTnAhaUC7z|Fudz$<`P0tbLs0j~yL1KbL{7I+=-df+zT4Zs_L+krcPHvw-3?gZ`v-U7T8 zcpGpx@OI!Gz&n9^fOi4!2HpeQ3(&4;bF`)7fi=MCz}dh$fY-z9aRshxo20D<*(BqM zO>(T@xIp`h1FL`zU^Q?Ma1y|A_!Qvz0J|UM5L;!OGk`OJPGBu?7H}AF4nRAk?Oh6V z0o_0kAT~ssq3r8{4FGMI=h}8zmkWWH0Gok}fQx}k0G97(yUZgA^a5LfmB5vNw%1he zko(gB)@c}E{!ikB$2k;yJ{skIDF1snKX9m{2U%-V9+8c0M}13R{mG-ADI@bICFce@g#MLyC;k&Qr_ zJ`1(Gg2!VF?fg3y2g<>4oCRsxCuL_~{Upwbpjl@I+6~KNeQ7_}uyP2rBg#q{X;0T! zns$}5G;MOfrKyh_ElnG}-O{wbJ1oul1^W^6j02yr^eP-bY3U9eAF}jn93Qpx8XO<9 z^yxVMy`|5<@duWsZU4KaJ8@i&O0q24`tg=N3pBS&k$*O@+S2Pludy`y!|9f$y`N!e z+Wnc9ru}z;V}D>^8=VJGucXfhqz&26*xrCfKVVGWTl`-X) zNAVsi7HP}FW9H)QSRUD#^vOb{v_GAI6#9GzuIlrhp7ULv^PXHOy+h^4^PSE)>yUOH zW*YhM$gQvFyfw_6&zG;)=g<$HemfjqH(Ol>iUsb3anE})G}r36&A`3B6Hm(R^&P{b zlX%+c$~#o3K1OH!p#uK*7c)~fzBxCAI{6P3y7M_a8>OC{_|AEMHnYb$$NNk6RQRmb z$TL((O!B2XWH{Hy%l0YwlszvbZYX7|*N5}CZg%=O*Ll95y8>)}I8WY?s?4hM{yq8e zIXNHYQ_QYPp@%g=eGs2d=H2?>e7syxJoepWBf3W4}kGRLt`n z(v41L3t3tW&$n*Nl&tv}d1$G4|BWbj-f{&=T%>BKD;ZPh|2Xb&e53E9 z&N+@92XNe?ALKaYH?PriA(`LA5qA~9@q^>W8sKz*;{(TqPJrV8{XhLa{XPA>p3l&a z(|^-%pAXPa(A}DT=BrjW-pXIqZUUvCQJGPG` zhRGOBjPcN$NcDHT3`EgvBFf~Es8X8G-V#42j*XTmc5V*+9~Iu8t*pmul>%kz?oTBL z$I@4&`ul6e8rwOX3>B$R#16|mqs(FpN47+&oX1#1Vs3r{Rd1w1sWPQwoRG_b1kiRXrw#2;D&3sVD5&?O|i~y$ybh#j-`5< zDw^-9Q}3or3=byn3=gDFYyUq3%OH+Yq zy0(raw~wU8l8K?-PXBDXwvHyYC4(-e#=3{b2gf|+D$&t_&D#v)w4{sqfF@ayyhHhZYn)#7Q1P@B~}d;wu@$_rb=nQjP3O@X0@}~^!{u)T_~E8 z15MTn&N*9n)wU+b_=c+RNW+Qo(WEHAW1G#Jj+JdBIo!W9AXCmsYWtgcqbe78!4n6Y zFJ^+KMz!fN#l!wy?)Xo0?iHoD@xiYCq3)|hJlgu7jm*^%C!}CZzmg;A zL{HCX|InE0jU&}v#&4k_b2YP@G?y*oBgr&WKQvM;!q%<;<-#x<%j>G-&e7B$B^4dD zM$n#Qe;caLigTS8AZvZQIqSM|R3~$q3{!S=Bgwl-Z6f6Ybs1oU^&QfDE+Dd5Q-i%j zfo{O5C^f{^S#F*>Mnrtk* zysughkHOa)5pEFaDRE>CxIpP18thGNji?5MNIMbJ=*itd(*{3FDD2Knr}68S$(d+z zl4H8HJ=LwxoQ^1vj3lXTipF~0Xg^fuy2{!dBI{?3VWG(#Hx*#^LjwZ| ztb{|aq6xX=43A^oLqsgocTr&ms|Bmwh|$hiTe{wR;f@7HN!(Qm)}oWtuDb)}qcx{h zr?Jwx`FmPF{MLZAdD9C=#}Yxh>**Rz?FyRG^d!5+x2A`>u1t1&U3QowbCQiFxArE+ z`vVJ3cDqB2t!Q|j-6LJ@6sVd&bQ0O)rm}WX8Q4k~PCesNs6eUF?!-ut+4hVN_^g5g zi%xd;4SCA8-#!RVvMu2iw`_iy*|0`1Z$t&l62D%jmV&z5@9*G#r2?ZB{-&f}L#ktC? zO+gNBrOnO-7S)R>MPH)dH55-{)DJb8^8UhP_;_OS?CBEeTao3~d}8Z5eyQf4YQ?>ab7 z{CeYO)dOl!A9*jH#7*LBWV|^Mc)!>`8Gjhue5#pDc_u7X{Up<@Wzyz95(eFDua^;( z!UuLjs^z#(<-5#h$I@UopNh(GQ%2id*Uo|DKv#8jYOOZN<^!73#~u92RtlA07F+T0 zh#{6WhG*TuF4W^S>U){*c|tvM^!l*BAADCwyhm=Q~jr z`D};8-h_Ox9DPBvvgUHBUyIe(B|;Enq2@0p88=W+-H~v)FBPgST&b+-herL@QsB2k>o&q z_ZE*5X;)?qBC#8*e5lurEYKKoa|Mo#q!v>}v!_W)jFc}_*;wHWjqFVK40VqUjRf4* zvT^#7{lnog1~9!D>Q3_(aL^MUo7eC-9?gYk)<7=fqlv{$c5y!|kEizTvNf=y`p+4H zqo=lx)IZIdDVE)-wKYsWK?`WedXJ_&Lu8|?y(Q_XiGU*NowD6t5)i*$By1lJU5D4F z;D!ObaGK&SJ4@DlhiP`1oQJcu7oj*R-=GYnMK@S^XC>wUse#e}VH zJSG=(UtAZLj=o7g+#7oH+1f%jZ?+@`i{BftD>fv>K$0F85g0s`tLsmmt%_06oo#PU zF8+^Ahf{-FrEptG`QSG1{RPVnyI<5SQ@4+JwT61!@OangxclV6CW-72;j{4Ju`&1Y zh|MunY2#hkDCX`Wuqh^Iuz5Y3_f#h85#H6~xbfuQHkkVL3=Lp~5Oh76=ouQsp0I%A zxNP=#2VVEt_JwLo1)_|rklh=mq>&`E5A%(SE?^XchTCH5m@2y?#2#6BJJXj8JST=9|^ea3DZjX8&Bs<$8 zf=lm7_4bMe8c`hM*SH^#+8ocQX2NRTFHWVAa+3XO+l{A;`u-h$>!#t^t_bKUuik<2 zcVM~bn_MWk6^~a$EUUNhIrU=aC)T|-TV~jJ*Qnf!z2)OPjA~BuzVWf1q3!PN`pA|q z<9Cy0cX{~43R|ABN4uGhWfCk!&q|Fp^$SfG}eFzc)^t$A50Co4%`+Jwm=&-36{duZchvc?iH+W z$C}&rk*#53r$gqII|qYyg^r~Hf5$a8G+zCcKm)pL?*0K^RZ#DU0$X-`5YP0yKdlOD z+3~^ci809Ue_vpGqPo>3QoY!iYhOSRw1uv|0qwo&!1_4C;j;3qVb$3cx@huLq26=V zPErHhiBB@z&Y7;g9UfVfyN4poP5L}vE>9LqENbI=cP(GzCBpsYF0%){34I3Kqzq7v zkG!+FLKBfQ!B3NSwQdi92vnoEKpRBCn3yis`FRYYzAHrTYmdxfZx-JxtCZ8ukv1X~ z^(3vg;LP-NDLaj?PNiKc!jSrtJ0fgDv|BX*;e@p^fBL+r-z7(n?Ti0;bpvHAc4gN5 z^WlaYn_H2M8;N-Iv&+<>YbTnzeh8A%q)q)=S>kxiuio}sHR%oR!z0OU&D18dPh_vJ z-*cfh+#%YvbF{meo7ydK&Y~2L3hMod$HW5CJu8Ng@S7irfYRFGKkC>Oy1S+EJesjc zzy1|w?gKV+9DL@3QeRI));CD=Zm1EVmfUc|gmN51u!n1djsnyl*^i>D(F&(fb$*_z zH|0ShD-)oEdK+A-(IKRtG}xyj?7G2RTC&*oG+n(`f3fD9cwFV)u!yYMB9tdt{jfBX&Ci7|c6Wr{RkGbR)e}&nJbY9t^!rr_vI*=-JDS>TTwg`x zjkW!B(0-lz1ev+HQgL5ctNHjKe1AFo6?{7y`6XDYCs++;P8&Q^vn^3GXSF>1$}OOI z0xDAV=po|RMP;N!s&qdYJtn#ciJJSR!;TT``x4=s6{2Bvn$HcV^(H>pRpYm&pfGf6 z=T?Q3X_W}iQDdT(o$86`&Ra)@#@*L#ccFAQ4BR=YYc$6!F=GFk7p4`p`hDds?FIJ%6xe zQGwRDhZi;onD;-6*RpvumaDhzY+^j3z`ObKn5Sd2WSth6t&aK`!%=XOL zavHCa*k_7Ii#49Ql*RWiJnN5Oi|6~J>$h+>ra3dD)>xC(o%5pQz!zH7*Vw&vE_$^Y zN!yr0+)Btx=TrQV4`19kSi+INQsh^QlJQCqD*c}sbq7~Cz}Rso*nH=zer+=`{E zuFRxr@VVXbPR9|ff|pwB?Kd#rv7+rmCfZtSSxiSi5t#~+Bn@q~oy-IX~??WclyIrJ38ttTrMlSR`2tVH1BF$v2xR+EZ6N{rYRCmHnJyN!xv)`PBz8Q=wBLrp3;uZS<5_ zf43%j8mnT<_{CCdK5ye+w2q?6ul?|if6|&b%B{7@8k{fdgsYu#MD6Vuz^!58HG|G4 ze8Q!%(Uw4<1%ECmyaFa$Eq=g6bqTz*)jWUY=)S+-)A8#cUDSTUD7>yF=YYCa^J%}C z<7dY{Z`HtkaPP;I!mDGm38;`KyY|anQB^Zvcaw^F z?m8}AFU9n&+KFUmfoIN(>#EGTEqs-_(nc(Wcd6D&5xJ(rB0bt@*NFL`7LhKrM4~%7v)fYXjul zPnW{5>?a5#Dq~{l+O(@_>`Pd}zIGTPs+)rrS1Ebv+~1X~>A0RHI6D+Brdn)>`u^%BWg-%F%UG2B~{JmX+?uE|;SBLlxSSFJ^46 zzj+Y&$|Kta-7RU+dZdsIsL#8^Qd+JGV@;nOMg;NiElcMqqP__lr6BW3(E$A{T`jEV z^}eIZ3ednLO)_}aYeI9wTiPSlj#ygOmU~k9Bx{f$&h;e_LB9JME{GFrDa5hU`QRpU zG{djNa>BV3BI%!cxqEMCXETK<_j|Sx+Vf7|mG{zL#%<@&-O#sn1FK;^oC}p}b*oCa zAJA=o4ct%shRbTBX?a`UhZp)e;c(H_)X%fN_fxZKg?8_!uK(b1ctzYVBe$~^s<>WsxTUmn#o_xC)sQ(M;x|;MmRpy6PdrH7&UGzY%S8zMXnBxK zNT3B$?c849kPQ7^dVsV{6d`I<=txArGA(8L-ZjEh9E&Y#(VIU7L1 zPtaz~2MPmCkQzw@Edpy>TMuX5;^HTw%6L={@+1&p1LHe#tGrs> z-B9noMBPWaR4X;1KxWje2A86Op+B)|qJ9hbrPESWugCWrh0@Dv>bJ?4d#;CzH!|>L zM$UKbg8K{0U08Dm%`7tlCpZN!s}$OHkSP4U4l1$??yQ?*NB%{cYpT4e z1^LH!uY1$D_7jp$;@Gt9*qz~;XV=cC@59s#I{}^2XZrRlXI7|GU%wZiw|YPQ+;(PS zEzLT$y2(@EMEY0$$P88g_xzF1m&!ti*TyEStzTrdDIEztQ&AXmFHx0CM+x&JX?B~E<1KGWAhu-=% zyxCR|u94s^3&>8*ER-j1_hyAY-^Y?-1h%r~t->KyVM|xz%2w&-e4c_01Mp zwXLS z_bvJ4uA#Y|M)*)mj-(_Dcy{4r+QxOZ z&!n^ZA+(@fdLi>po4Ab<_b0G}4{u}-+(Rf4v?;aPrQvJpJz-zJ_4JGS+i&KZ^C82I zQ-H35GWy!dy}D5AB&M?a+PV6Jh@;7okcFQ|3H48A_ReHW?)D|?ZRc`(itaP`2Is3* zl4iAKidUAZ6ltXJztrx@Y=5(BD<){D>MidCc++fC<9fp{=xx2E;|*-%idq(hz56w= zOSauyhEcWX?{GI%x2EU!ZLi$YJ`=$fgRq^!{Y&;pgo3oyb%%ba+T*wD2QRbRL*~Sd z`e+o{ke5&>gV2bocw zmclH?@EU!L+3r4zO+`Z^JJUTw-D5)|fs@~wSi0J+9#U;VeaZgeC}9|92}BvdGo+#J z^ypY3nF-*&4iHu`-!ROCU@`3Nn$FK$!8-1T=$%klIU%xs-UzNZ(q< zk9qRha&=o+$ePOP*%Ya(rbd$LG|nu}Ycj_YJ$w^njV#*tw!H88KGO)Rd83anS}tj7 z>qw&RWoR?SvUiEc*Tn@idi}bw83W-5Z0v^@(o+)wMbwW$_J!5~@#{sJEY8(_bJkC9y97qIPIDl=c*OE`-6PbQa@ zR$JcHh6YoiGXv+kZt~WPfZK9)1{u(Y>igW(M3}`6)qaFg84Q%G^r|jsOPZR{=GO9> zhprGBTp}&xscXBJK9s3}M~YFm7o2Rg?Wtx8Y`?ZwZoGdi6+C<8RV{L>jb^Cp%4E0q z{%Q3+f6{McP$*5$^GmnR7tcd_ij%DtTec7rGm}c-+Q^&RX1z3GKP~QqrSh@ z3#qA16HwJ!vueG(I~MuleEsG7&`O$u8mgpfXzlxSN$vE4!$~7**k&-#v}mqa&h3kH zl!pe?5W10%{-n0Zupj zb~b4Jx8dz;j-sA*4-Xp( zqLU**Kox6SzvcdIybIq%>+=XZIg`QXr1G8?vt2OEQ#-i@)Wqhh^sbDv{r&su@zhx0 zY@Qdj*sazxo(=X44Pa+XpagD=wu+HV^b8H+3u!^44PI?zBD7nG?IS7N_Y0H4#AvS= zKHpJ8ZxgGJ8oUeHz2TjDB*_AF6_mZ#c58LP$yRlemYbpxD{R%?qMA3qA$SSuK8l-Q z?sU$MQNfK~e;2A!@w&xwwv@}{b2nzEoG;!7*iU1(cs;7GPn4M`LxixqzV$Nart(=X zqSE$dY)HK^K+5{WyGz*{()>4{Ellzz_QsF_0B<{{ew(#YQwzYn2;q zCttnQ^Htv1Qfjp4kgC2o1)-H8#OS2~92kSVlCfwtdzSw~XCV`=kp zd|4YtPEBTuQ@l?bG^ro$uI3p~Ddy0|nXi?=_uTp zG?BED+hid8jD3_W`cwDqn6=m{<5%Y1-sQY%Ji1kxR4Yq$v%0sHw_K4usoq}cV%7CX zn9xiSAa3o5*cMr97Em6afZ`#zdQhWwbjX6E@j8YrB~-?$%c+KIvnG=L>e;ME3-xQL zsGswUn(PAFR4+)0}rlJ%<~$Ig5{>zpW!j? z9Zbdpg?t;+U-NPp^N8&KP7_SSVi zH#Rod4%^(TWh7BRRcrfZs||E?06W8_?L4C)O0He5IycRwL8D?T_bExNaYXwoN)@1w z=I`9AIcNL**-#Vjbf~^7MBNjZ*pDBtR4Un$^EMPwok!dC>!N&aHdjeIv#X|_U^)rS zFNAeE+g8)rN+a^rFKi=U9A2NKjGr;(3e(0l1k}6UCe5c4l&wWN7PL@+X;r%#-HB=l z|LI#bf^tGN%@FzUQpc8M63fM)lSf=QuS>RTS3aF|YHI;u=)1~Tw*cM%EPYefssIcDA*1QNL()XCy>Ck7EruYEW z=-ZfePZgAg>f)t0$vEB?mF*l1{`~7GF6!#Ex~Gk$27>oL@nTyG9~$rW?!$H_gFz3} z$CyHkq?)b0hTZJ;_GfE%``FH5ckS1Z<79$oMWf?`cuUxo--h} z=amNS@Uc$Yp<-%L9`0%CT2l$%UQe?tbTgW#;p-RN?gQVjCAUv9{QhOS_T3wiMY$gW z2rJ6x4Y=h=d>RpHHm-N~WYs#|me2g(f0r z_Jz1bN0^56pxU#x@hML2_cVf|X7+iawtA@9<-CBpesB)ZSp8Vy8os2c>EU6zY}4Do zl{VYok*d!jMTH)FbOs+a8mV=gXv~wOUdI?_k&ipRSEqXo=dd@Mo1UqZ)6S7DIUs5M zfRUM=E@h`Pm2BFjBK>w%EdhN+X~ExNdS)4{e!vW)b|mmrH1cj-ZG0($V~Sf_Rd0Xa z?-Ns1s^wj_Ke;2qCrTHrIzHiqdpF5BpwX(DrlZ&WELTt!))zAS)PV2_;C@bNX0dy(ntw%W zfX?eZEx&DTriPI(I@-19om>lfw=3IG$>{G4s}b7S^G*G`cEVxFxLZFciqG@&f&pz( z-w*UdzK~%vC}Bh0s9KpwC)2#+Wuw(pBGNnQ*m^)*>~qbwtPVz!+p6k|wgpV6Yi|w& zFAjp5bn#E=!zRTw^=aB1YKB`q4!Z;NFS|J;2Dc`=c8+#8^Go;^tQp0sJTs0+A0LqJ zS+YH)yk~JqUj|c4I9(65vy5Mw`iPclg6F7Xz(<&4OT6~fG6w7nMZgV zITdNPaTePT7B>2~wJlpQm#i*2JdM=U#51x*11zE5b?OCP+t#%1x~vu5yzV)OTHAzq zgoPQ@FZ*=TG)>6Z+r+Gkexm8&vi&o!h!L;h3NFZY+h4uv=0F*0JdOo->fzu2uRV3D zswH6H`qfjXY^ju;677_-m3jP9#Vi1da~Qlk%`Mwojyw#;gJHv5NsnZwa^>`Bcfx&~ z;4!xP0cLW(gr5%tj7PpdoSDs3Ci&r)1^jl#++wYM1xZS^eY~=NE}Q1RsAra}peV*@ zWWGFOr}WT_JH2sgHmJe(B9jU?I zp+;w(*m_yUCw5BJkF&|BV8@ASgy~Xoey)(24c(nuH?=jX>T~yuId#cUdNwng2H(sK zL?}IrCWc@>pfIqlA6^HUPtrpF;<)<6-Y@jWxiYRh^q zq^11K40hXm~W~lOkc=hQP$gX zOEk}mWVk`g@GS%ANS;d7JP)$5vIV#2di;8TEmfD1VHz?5HLD}%xsdM%L?Na!G_}lY za3`T7bz99!wxvWigHpL|gqntFX*1Yc%+0n$RoxyZtedD6tMj&W@cyKGAEw$D!mJeu z8q!ef`z^k=BKFd3yG!SeOgE7)PF|nZpQqw@5Rkln)PV{y3v~8dN}{S-Yepl>PW2dW zn8x{`8BuvF?1*{z)DuHd_%`GEG}=d~AbJ{({^5DEHMle9^+ zB7UF%zF(8stL~&YBu;KBT`Z;3H8DIkSXX!%A0U|uD%-gjTC@{oAtm#EcB!~OsBF3H zUwTxvrm}fik^~n}jpAR3?KC@xk1vP!C+S2}0v8pNPG1W;`l`%A}8?8PE zX{FHgHj+wRH4*=W?)ADft}FpRRP@+aUHWi=YfMk270Y3V@|Re}@JSaXwWN0A)#On% zs<85FVg;mk^AD^=H5WH-KwdR=8>EzKb~?Jvu`Tlf4mLHu(snshowWJy8Q7dFBA;CJ zxP!MEBMSLQAX}?;Wn_z;@V9=3mR_;#4Bh9lhDXucL&olaZ?oOdeB!*Ya16Da8L$%?+TIPo}#26RGGoUis<3 z>n5ys!Oter{1BM=LbbR8doA$pTD?y(S(xc}kVB|XW4`t_TTagxa{Em2A?~C;HJ*8w z_Uj%Oarek*u7&L^`t-Mg8nyaIaSer?RP={#8om^;5oP|*wDo$7%%v`g&aY0hk=c1u zNN#NzCx?@RJ@wynMpyM%uU{uHHwJ3PAZzNll~BWOY!KB3YcmqFFu8?Ih;20%W07op zr$+wX-Fq8^mGqBUy_3Q`O|N3ia8oqVq^X^B&cl&_LPRyHJ1ovWqLC(xbGhtPe0Qlh z8=t9E=E@gu*ihJ8*q6<&pT>_c=O@mofsKO>@@4uI2w2pZUROoNsf#Rjkrn9Gf5zJ za2fo`{nn(D6S zCCX;kXiaL`m#=_Mg%ahIr#PFy_Fy_KyI0CpLZUqC{3t+6=_Cs&sa|!6d=tPRQw<8E zRqI~#>l>~>%vxMW98J^s{x4(^*ibDKPnFQ1l*Zw*7Ug(lCL7OZ$`xPDnw-OJrkPrB zT5rt3v9-pOuVrYkdQDnzGgSz+6EWO6F&%pzD>~iB7-MnH8oA@seRmJK2I$j^mQHB4 zSg^=V_v7{p?hzIaDh~Ayc8|ulZCbyvD;8UE!i!=EhsI;e4?ZZiqBpi|+0TFe^QU7g zPmSUD%<_Z4-0ESjT!9n^udophip8#2zVe{h!K*6Sd_I2o>KEhc@-5)RkT$h!`9Uh? zCCi+|C&mr)sTiYOzT8vj3KNOfmO1gBH1WDt)W$PeJQG{Fas@>F`QdRE96QAb{^Scm zF8eC~#}2MaU{W}lUEwX%5!1PN$ufy~V%*5G%nJO3zrY7O0!t#)=}}MiA}cPPwX9=> z67>g0)RU~JCqrj{=%??P$>DpZ{QtKcvA(^GN}tPT_Ge4xno;J8zwlF%sg;xBkiy(# zx{{fWO5)^Z3OQspTP|m&vmr^AqsiC^D$3Vs6o+9>l&%!h`TVT0vrUd!vDHmfQ=esf zmK*jD9UU0@={Re8kogGgL9vy$It_xxuAab1%?bV=+LPUFHYS5Uj5hC#qquwks#Me(c;8)*~v=0 zINXhS3|!N2clS)DGCG&dT%RpDd!XUbtv@IaIO@|;Ez3kjpG4q17CAYdus^%I(kbcI z#V=eNzwEMjhtt72AO;i2cn)$@B#>-7s%{sTMUL)bp@JEYBZpJa2w&=?N>UP->6FN@ zHhvDIp!=|a^O3^nTxK%cUz|jay?9OT==_9}YiHROwJzQfH=?M7sHaMJS^S($YwbJ& z*;nI<(1UZ6V;O!FK#4}>xFxumY4IfWu<0HH<(dp^rQIA<&Q7K66;|5K9kls=X;nfo zf<*^yhz#1>wKvQlLy;r86fG!S4A8{|4+yK7|)W!f}6E9*6C^O8#HT83w1J&7k9 zx0Q@QRSjcqHeSw}c^TfBk(1wZo^4zvyHawqD1U)H6Rj=cvU~ z#3)vvw%3e7B~%L(=XM_qmiSAJ4ac{gxBlGC7)_oJOf8GW&c*Q|41_Cje1-#}JwAft z!(irdq(>wl(cQ4zQitLw^f8J)MbU9ZcPe_LqA8Q)vqjN;iXK+<4n<$9=ov-NDSDrx z4=DOJ(6-vKyA}UlMc=RJ2NeBTML%Teqj8i#oln;2j zBOjhqua_!*T;&h88-JDJQzMd3hvKtr;jdPFmLdE#icg;KZ&myw75@t>s`{txip*mw z&WTUq1cBur3rL>dVuK-&e>@=kWrtStJW=uA|3^4MVEhvRiGS(A)%eFL{w+#o%rasF ziPRttZoo~8kz}uX8cX$5X;S^EQC7nZEQMu@zL+P?hW1EXqTSF&Xb)_A>WOVlolrNd zJLO|tDL?B*6`TyPuhXAU&;7p(sSPPs5oDHl4 z&H>f~8-R_#CV=uZQxB1u^0B^t^&;P|PQ8h4*H^M$b0~O#c_0Dxbq9_Y;P_P>&&Rc& zLYaA-(^t~wscQ+;Ipt>gq+8X$y~9nzBD;Y1+p3EzLH0!qT*rr!9R9jw>NJ zWn?=XV`vV=#od#hhH4lH7X8eiHbwpjfz8i)p004Wn#PX z$TnagO}SVf(rg0;zc|cK;&5E{i^KXy#o=|oI3j~ro+(w9j-%y46jvS{N6QlwN6Vw* zNd8`Vg5pSg>QKupeCDI&(K^&|v^+W=NgF1Qjw5+e9$l7>BeYj$;j^qDd4wM(kB$>0 zkB%eddgak^gqAqH88cPw&z0$6VljI@oGD=$hJnYPb3U%GZ_O7cGI?-DvU6@)l|I!& zr;cFLr+TQw>N%1*=d9OoH>K$-mMgh@md>lYI6GS`WJ{z6vL(L6yh55w=)zRCL?dNF zsW3Yv70GNEFKocW<>$uo<`rxEQzu;GlCEa5-=Vumwl}T|hU` z10;c7U@OoEq<|}dtAKuhI`Y%o3E(%XJ34+Dc>M-eI!I0y^kReq3I`YR*=RJtEo?k{ zycWm%aLzhEmlq>`gV-5rB1avvZq)Hb|A~JHtS0L({F9#|*Wq)}75?#xPa78gaf;9O z6TY5=#})tCnuMRAlJpk>ZADOXj?qH_&NPB(+ z=WB3mw_W?$=4+L02HB3b!KJpHXKT^JJ}GTaz4(nGiIJqcKu91?4 z9RK_s93Q|e_7)6wTpLO|bD_gB9soGWCH?1d`7>MUN@^W<}qx=x-_dDMg=#&LMgBC_1m`yA}PAqJN-h zF3=>O^A&xKqHk671B!l3(a$J)4LZH#*{|q|qVHAoBZ_`P(I>!RNIsV;dP>oEDEhOC z{+^;&!m&s`>l8hv=$jRNzoNgT=%*BY8YV=NXOE)uioRRX4=MTwiar9FNIvH)`Wi*w zYH6t01ojEiFjdn((41ymgz8LQFcTBR7cqY>PMKy6z;niBpQ4|Gs!U)$sG`Z2aUrG& zq?v|+ahTVomtJaUmhp*Cd;`1&%@mf+z?&+Z&rx>HmoWS5;(s$gB7tCCx6uJ_x-d}I(+uU%<^hrAo99-b(T&Yb z85=DY2O;`hWtq&U17P{2S6iBTS_5nVNS_XDwDcJ`az0P~nShQiQ<(6KDBXvUlIe-M-43fa|IcH*E`655d7n%_qNiru$T&&=DezT`8sOV7+Zs$6YXjL*RKm9UWZW!k86 zCI43HImoW0EU%uW?<}?-1=W}RoxxkK!(F_dgZi)J?=81g^$jXl*H_z>_=?5)jYi6q zy0_A z6l%*Ax?SUbyUPvgM^dj=+Vl0uG)m8UTo4%+J07uZq+I4n`WzBA(64Acx5}P*|6R&$ zR?qD33=5fGZAUsOcPagb_LG#|PtW8tv~oP+GYqLO^Y$w@$gURSuU@XoZKQoE8^dDl zS(n>L`#PmAzT8PDP~>tXB5l%NJ2@tNQO!_M=AnuWsK~*_AH0k@nU7cQJPLI@P|- z`bn|3h4_urRk=a!8{{_@Q|@gIlq>mr`;qV$QeWP~6+anNUu{=X7X74zg_O(t$O|oZ zF?OZxImk~2wQsA+ZN#2+|6R&*rA-$*-&h6ZO8YLQp0zy(m8m#jaxwKfj(*2it`jsnXdFPX@>PJC(*7a>i|81nc zx?Iu2LhM=VnR@fnv$iYUkABhTSB>~*UEfyORU_p}n=W?z)$JQ(&$@lJUA3xxo2~Cc z^z8lNLO0(~hgS~@e;eMIj^9a%T4VTCnoE;#cb!@;UQ#fU-Cd2seWKW=S{6=n-(04^ z9MjI8)ZTn%+P#QK1I4M)xniYzCOgSnTRdmPY{7B{ip4@=b|Qy7yNmf^iRV4J-Mi<@ zS@*oRIGvc~8;(u-Vgcvonv-9#FglZ&D(-bk9i6YqE{1cR9nW=k_T0^m=Q_JssyxUa zL$W9n`gw*o1&>b7;6)L!m=k#jKY7em_9F&m%jf2LWOMK6_4~Vu`)pzydNTV>hTZ!o z^GF`UFGLHI*%ADZ)QRJqj~0r1^|>jvfMR3Y@r%mg;@)h@xg6^+W~N5*Zo+KAX<_F_ zbKA4yq^*-WW20jn~(3>ENO zyb^W^=L*>=aK^BoxT`c(f&wxV`Ro+W@isscm;ZQfO~vrcxfrKhA1cuvGWAOazCGp#%1@(TqWi%1+OYOy|Nug~_;~hMPgSfrcArxXFW?Rp@l+XpaVt z0geTZ1C9qy0Jy=0VsJwXH?nX83pcK`^H)O9$&ziD9za=xzz{GDTn&r>qrez24r~K> z^L7WY6W9g36u1U>89+y$2CfA%zyvS}&^X!Q=*#Hx*a>pLbpSn69+(B#4~xJYa05^R z=vrvP^S~Z}eUp8f9sWk(Cg5h^7T^`YD}e*RtAJMnuK{iaUJJYqcs;<0>>GeL0=ENq z0B-``4BQFa1-u1#EATepZh$wB-vPW6xCeL_@NR%N;do=}y}%gag2Z2umzX5y(_$=_7z;6Mc13nM@Ht+@Di@-y` zmw+z=UjZHlz6$&f@Vmexz}JA^1AZTP6!<#u4d9!=w}3wY{t);h;M>4=fIkNQ1b7Vi zQ{c~lKL;KM{sQ9|KPS z{{s93_*dXb;NO6M2mS+i3iv7TGvGggr-AA)GlnE-z&wiY-GI2%|8oCB-}HUJxeO~ARpc>sTvcL8uA z@DgA%a1n4Za0zfJa2aqpa0RdhNB~_xH_!tlfnH!M&w*6YzKA#JAqxmOMz>EmjN#a(!jMq2ABXQfhiyh>;|TR86XE-2V4*2fmxsc z6oEP527teODFfUbJP+&v_5%BW{lJaDO~B2-Ex;>)R{{rsR{^gEUIW|;ycT#J@Ot1j z;0?eVf!l#QfHwhe2JQsz0^S0=6?hwPH}H1g9l$$*dw_QV?*`rj+zY%Hcpvb7;6C63 zzz2a30rvwR20j9O6!;kMao`icCxHimUju#}_!RIU@M+*TfX@J*1%4CwE#Py&=Yih_ zz5sj?cnJ6s@MYjDz{9{-f!_gs7kC8t8t{9-?*oqlUkAPcd=vN<@CU#j0)GU28~6_J z$H1Qej{$!Q{2B1)z~jJQ0N(}v68IkQSHNEbe*=6U_*>xbfWHTR0Q>{+kH9|xKLq|6 z_!019;0fSgfS&;W3Oot?8}RSIe*jMbKLvgU{3q}<@L#}x1OEd&1N=YWe}SI^9Qc<3 z%YhZZO5h;iVBiqoP~dsMVZh%Gk`OJPGBu?7H~GO4mbx`4{QK70-Jzyf%Aa#feU~O zftLWAfs25PflB~xfWHj59Jm750wjPgpd07`l0Yx873c#}z?HyNKtC`53<5*IFmN?6 z0*nGmfHm9yv-8!hsp_xPkAOZnM>zqYuR9D!+S~+=U%+t< zj(?5gFpgXn;9%zSD{-VA3DSsS=tJ!}`J@k0{DT#Jh@u&f@fr7MMIWQ+V-}ZhAUfayi>G`{#;y_mMEL_@2yi`Kt>>UWYSpd|3e>8lp%| zol-yD`C?_pB(;Lo9M}rf2xBs9w(OC>QNZzlSR#*X8OCR8k!I_#Rr~_uu$6S)jJGv4 z=Kf^s4LH9anH+=2Q!jC5xsPncECQKUhL9f3bu*gnvnX783+0>wXf4c}<*+qx02uZF zV!3-2y-(5m6@8T@>D*APbe!Ze^Q#AD^ zb$p|uZ&&mkihh%#->m366@8bY-(qQ&@is-@t?0Ka`W=dXr=sss^t%-OZbiRG(f2C) zy^4OHqTjFR`xN~FMSoDyA5!%FivF;rY1hZ#A8nPky%98z1ZO8gbLJs5XB9$Ut7y&! zgwK&)XpZ7SbA%R}qp#2$S%s#(3;nR7zoqEM75xK6KdI;o<3{?PIdfWHzEOnek}jnLrpXM0S`@NGpuAvA!Pc0q9<4g20)P^gGUwgyu|1XwH~~=FCZG&Y*3{C{w+m+PSKxN^lvMgvmMFji;8~8(!BO% zMSn%nw0T~~A@&TMJdbFG*h)Bm&Ll`buIL9aa0&ka1~8$=Fp!akdBr+0pm9tieXXMJ zQS`Sh&3Fuyf$@3lvovK9ntdg1`Lq?GnTCN!n5r48NYlQa50GXZgyuMQS9+P5op5|( z;B}72@89{NF47#A-}jSa49)TRu+Oc&lzhs1%m4IUMw+vmqd)!1uP_~FdlER?qkPPR zvptqan&bQF0PDmVE8{Sn=p2lk(mxo7v%3nww5I@<0hE{ZNC7OD{bn3sIMq3r{MmOU z{})<5)4mAU29SO+unQ1fj#_#ZjtrEc!%)t@)rwxDXx2%>8A9NArlLC)y%sdvnB|@Y z+(yM9oDGoAa@ScJ2lEJD`0EvagQXdtvsT7o*aS%Yb1hB&d5X`Ot;DCzO8g5IA5$ck z&)KiUzew>fR{TpqGfKAMV;_GhK$~K?#yObr^<|)Q0R6|y z6`cnCDa*eWM+U~p7|Nk1EX~6tFlEo>NI#G@yayAMVYj``!!*D?O3VN(n>1x9TKYO1 zUt#I%alF&gc^ohOP6r`Z%dbPd>$Hr`OvSN z0{Uni=K;~}9?%j<^E!iRE`~YB{ zuLM>B3YIm zfG0uXOPp=?!U2hZqc@KDi?BFxW{7aW{CECIK9ub>z!A%;vYlw-9k53pB)-UYQAnN= zhxW>F!2EaqdGqAm29gTD3@al!vXW(`R6V7)CTf-(5CmxhqApEIA6*3 z;*j{FlN}Aj*@rwC4w(PWKd=0sw%7dPP`1|reM&a=D~1E+zw^(VXScl;7Uwe|ainja zfH>&#=1Dne%JX_)2jt;+$MFM_e1)_#Za6gO$-q>ZGV*+zT8mo|EhrP)S& z8Y*qXC!Gx5Had$!BDAuNRv|xT%Qhm-a5o@r!8Rhzz&4_dGCtdgw6swkGLz3X+6<6x zWgAf?%<}^P1Izs&P{9T2cd>nnPlu(w*vHsLY%f0jmGulu3{>N4Jk177gK}$ZLurv;4=Zx?l zQ2bv5eGvlEBvZZk_J9~uxu;PCew8;58md3&C{1N^mivKlU zM4QT_A+iPD}{BJ1!H$iheVfYq6KQ8_59u&;{+3!S#R`k18^eOH# zkUsSS$VZ*BPjUAEX^vBeL3q;aQzwCzKGnfWA$a@Lc2*K$A$`h8>FhWYn&Z^r0E?p! zB+Wn{D7H->NSfgt0Nal7=>thiTigfP$Y)!u1xT|kr0p6Vr;x-18K+v&78gJmX^S<; zUD_fEzO)5*B1l_smw~hecMvdm+v3#@yQOVG8Ce|Lg0$#X)@9V~`2gd1bxYGApK}1w zxpxkLOD42Zw>P6u(d{sD7u|B_gXosK8br6eFE6^~J#hxFZtr7;2(7ep+7XMRZb>uH z7hP{CXD5Kr^hH8{L($&^owV`4Woc<6?xte?-ZrvTF*`VQ8&L-g-Zt{i(^_HwUxHxL zMzkMkBR->&HsUiXX(K+Pk~ZQqDu&yggBfG)0L>j!42`xCcUdun&6!0%Y$MX5+t1^q z6?#~Xjv;zD9{GzNjs;)z@Ip(!5!cs(7Cl@5n!&4wzue&P8`XmoJ6sQxg=(iBNQ)l0 z1CM;#*y#Xi`T>sn4D_)KvyS6b&`9g5zm=v|hk z4qpl|ZwBg*0qQcpI$@nizZ?)cZF%Hh3oww*7|Nk1EX~6taIQU{vNY`>Yj_7PrwqFd z?fjd@fo(<10LMc((m9~R($|6BWa;ZcZ?SY9^pK@zLBHJ61<?ZUsPa9I4{HFGWEMrqilQ8cec*?O#kn_Rn@nv{#{i)J$2_$;!A9t zCcf6j8RC0voF#seSh?JSd3Hz6Aa>J#V{c3R+U=li+ln$0PB}LdyTZkPV4J&G?-R{G z3kOiC_%Ix7XFc{)BIN=VdvL-x|vw-rEYkQeXZlk3;5K=`V70w z=0jKFc3L^p9Ph#WoNHs{t&TYx+j;sC>v>t+d=F{U#~dqM{F0rA2Xlvz9yPrJH_xlY zI#$wE|Mv=n<}M;P&+DqN(>xws{d{7*ZcPik2lMj{e!6+ywDsB!Z($SL|An?*{eRoW z+Me$~>s0)%jd{p>4|Y*=x01G(rVqRa^YcR+Yg>JU9xR~vWAwD~C&ayM{3-E38-GTe zZ{tP8gKYdc@n9Q&K|I99i-|SdyVk!1yV-at@$NSMl6aVnzakz^tnKhMMi6WI#(OZ^ zf0>Q7O_oFXqV=!9NaokE?prMH-&~;hJJ1Vr-u#|u$dKDdseUCEba{G|%RLGES^%O}RJA&eMGk<(`{fb^(vdJvaT{xp$cD|L>7|NAXUFMGibqGF0iq3 z??PgidlwOFTHD;ajQL&eaa1$;mYaK8Unut;a=CXo%evgV#m36L`-xrdJw>c(O}RJE z&eM0fHN-0Q*z z1I5a{ZHQg&?Le$)O}RJB&eM+g|!d)aNP%~jjg@=VHdgM{*jTx@AF<253B;P#Huoko ze~^3Lc~-~0$UXP2CihAo)^l~k{w(WqugS*By;;OA_f90%w5HrU&(5=^-1FA5_PN)E z1%Ao(o?HKX0=+&>YkR$SzU{wq&%JkYulIPH`qz7kHR*cKP45$QvV}EW?_F%St#a=Y z8!PuNwXt&VS{p0(uCuXn?|K_6_inJUa_>ePEB9`)v2yQb8!Pv2v9WURRvRn#ZX#Yo}af<95WC5o^*u(*AP&zsJ6=uGHOcUzhs(0I~A?RJ>$k<@rKlP5O+bN%O2j z{F$v^*VgMb>NQ_?*_Gx!rTJzbvaxxMcApQ`Je{FQv0fWjQls=Ux1Y;dzk7duPptl{ zpDT%7KfAW~V)e5-v8LR9_P6!9{oMBM@uqKD*L%lqAM|tSX?y;Xehy{*uAjq+T|Y+< zyM9*KSpA$#tSPsjQ*3>1KacG2vcEkC%w23^Z+jkd$1mw;n)SPW&LDREY$bO6)W48Y ztbSfZtSPsjSK0d9er|Y0t-n1N9s6<6&)Mg%c6)07uSfpqevbl%Z>mbCnq%o~JjO3r z>`+P7$wmeeV!oj44O0}9X`hfv1m%i&mU2mQMnOwsJf+v5sk|iS566VR7BlphBiB+jgT;ukbrTKg6obu$H^2E?kKU!o`PPr!5)SQTBV{RC# z2sc*RRhx&=@pL8|8ndb_+NPLS(A>;$MH*tMu4YzqEN_hYXQsg#s;0$~sjOPOsVbGu zrlav}X`@#zj%6Cs@n-)OJMe?tw+@DTnwqJri0St{nrfo)M5yT9sahS&j%HXTwO4V6s2<%^nknV~ zx~8+{AIDNzs==MoEzMcm1x7(~p;@FNRTWD&6*IciG*d22HO?vw4G~tIW$-8ZR26NQ z9-SKF-@`UUXVt{*f2vi!@@)Jk+iYEAG^@^=nNy+lndUOnoHsM4!Y@Xur)fy6pxvwR z+sks>y^5f{W*P%qg_bWf6@Ggpx81Ao+pA)U8SzYLd9T86uSumdyo-YVc@=(pVJx8? z5wv?1etU&C9$L`uRru|Z(QLW!@?M4CUY6VLRru|Z!gvG!@Hbe$SK+sp<+ghjemk2x z)shG=Zz}wDHh0^0uflJSjEyFF4~3rJRQT;>x$Ry>=>5t#V~ylb@CH_e8K|wUdb&Sc zn#PQ)8yk(MO}g@Lj8(4TfR;)PqAFY-Oqsi{y&3J#;@HeKW!}$i%Di9NlxxX}@WgO! z;bLBGG%-EG@yba;`mxrLj!mggC0pF= zd9Cq8B3vG#5ui<^NJz`jfb=Z z1H|#}Cv9{zi$s|#kD=u_`UOM2dF9Gvh1SQb^vc!Eu|%RkTgodJWV0L}G#;E+E{-;F zu+SmZmKhzdC0$RAS1w65Ms&-4&>l^srnZFEA8qyai#NZ9v@@%7>+_FSUVAVkomZ|* z7A8`rLu5`O;cnBXKfKE6JowXS))Z>aQ`v7MaOWd853jtTpgx}9sBNl>646Y?H8Q^` zhgRUV$7aOr9va6$e+*@p$>w`AnJpQb-;~Q^*=Tums&=3$hsId+msheg`DG=0xI84M zJT#}gn^!K)#+pLi&nt{(Vyg36`D~kNh$iBP#TxB7SLeslMlv`)C9XX}ex;}CLd8x+ z{D*ND>yeQZNWY+l^GU<>YF22g3L1HfhZYI1TeI+f$#{F-TY%vtV+oy5?CYPIQ{flw z_6XX&3cuZMpP=2V2(G=ntzyfw+$9I+@6go){iE|W!Rg(UCqxrUWi!#$Xp`-$D!g(q z2iuQp74M*@cK&I5DpSWr(?pd*WnKI+l^og|gWT5!7cPOzc#uc-*yz4K|P-Bbka z-uX1tZYo0U<^&pUS4Gh7olisUrXpzf&ZnVvQxUX#=hINTsR-J=^J%EvR0Qqb`83pS zDuQU#u6+ydqJ`J^-ilE&)pN85^MbPe@PebjdB53zcu%UKS5wv^f(@?vq2->|9 zY^dE-1nu7WG}LY?g7!$No}>)5n~E|WNn`0jZa`F99_-3y1QNeh$2UeK@mu-)z@aJ; zYB%Ljd+taq98cU^$>eiEOO^pkn^H4k<6=s2)}M(n)AVBR3~H~Z&Aj@-T#*>>fwVm+ zXx7l%Psb~B9&!s*Hph~o)#cTsqs_&!Y^=dv1qWsC2~9b4&F)>l+s?33wd-)~)~|A9 zGRDP`ci2hFP|N8r++LY9TUe)NGgT&obG0fc`{!0$He18YY}$is1Fv0M*R^W-@>n7k z^DhW0liCB}c5_B6;$xe+eyB{EE#{4{!#-tr*<>QL#@yj%)&F?t3CrS1_IHi{`PP-) zDKmGtTs{xR((wlEBJ;7TGC7)0ST!lvOMBS$J3PscykK%pxsXqrx~_85Z#~k`*l4Ca z+RW9MJ;Ago& z{i4MU=A+onPv}iuXAZ7wj7_PV=7tRJY%BPEhAuN*dq&rf4dg%<+s^g7xqx)#RI<@r zLb?SgdzX-|g4fWHYO0TBJJ~g)7~&~8qoXZlnz?{cWeN zXX~2k`DmWWAC#{Jd+W~@m~vOr%hv0+Q8|mb)l5xroX*c5u0;o~W;OZ$z8bffwn$Sn znr=ws?>0>9SZw>9+m$7@-fq(Jf`Uj<8OwCG{n9%wfAA13cH>ZfFy*eorD)%LiZLwZR+8icdH#^ywczabtKO~;+xpN-DoTpRv6Nd$J)ipX2brDIeKi|oTU)P{ zxb5mKwGqWu(%kJ{eTS)Ob+1Lgw^W7|l$)LFEgsL3-Wjuqz0CZNioG?OZyEpR|KxeR zmHan7L~ddF;zEwCkYna~YeV;gkGw%86m&=bAT8-36h{jfcD zK!5CroiG49V;Ag-fzYo(bllRXbDcl%=gMKwNp}SHz@FF(Be6I1h1otRKp~1y zj1r8-7>q?J_Qg1qp&S*cgs!W{BLW=~Yp@?CpcWIMYd~H1?T-U+APzzu4n`F9Xh0)k zm;zlDPD31rU^)_LLJ}!7<4~lLK^84I2Up`7`~%-&R6D-!9Zm2oGa69>Jq{3{T)mJcXz644%bvcpfic z4(8%Tyo^`yDqh3un1}gTfH&|a-oiq>gLm;B-p2>{5Fg=Ve1cE$85ZFSEXEQn#h3UB zU*j7r!*Z;^claJF@dJLuPxu*n1L^x>eb1-wb@jcTzLQ%Yx(et3jd!ylHiE{;=!DMb zg09#Yn_z2fgH5p+Hpdp&5?i4gx?@{xhaTvOUg(WJ=!<^X9y_2vG}ggR7=WFz3wFgo z3QFqXeTd1{yn}6#HTv%1{oCrBI0~ zj7J33sKI`i0NtZH5tE?t7WT&hI1mScq0|05ay#4LuecI_!&Ue@uEsUc{hrt2I$Vz% za3gNQ&CtDux8gS3jyrHC?!w);2fBCvUfc)WH}(J?#6x%(v+)QX#bbCJPvA*Bg{Sch zp2c%`9xq@H=Hf-XgqQIOUd3y89rG|B3-AWs#9LU1xA6|%#d~-kAK*iLgpctFKE-EP zgwOE>7GnvP;!Avmukj6*VL4XdTYQJ_u@XPvNBo4Jp%Z62`~mA=U95-o(HIlf!e9)+Q0N}#-7yTqp)q>)z@FF(Be6F|VILHr5Jf14?u8zWF&K+d z?2Bz;6hx4i*X4q#bvl0SK!b13m(91Jc38@1RlfVcnVMB89a;U z@H}3?9L&XwcnL4#6}*bq@H*yUJ{I5&yotB45O3ohyo>knK0d&Q_y`~46MTx#un3>y z3oOPGEX9}j3SZ+JEW>iFz_<7g-(w|yz>oL|KSLL-?V$T{*TK4259^~nH2&=d*bp0` zBRZiox}Ym`&+aDJ6dEIUb8LYvu@$;uYixt=(0#qzp$B@R7kZ-)`l27U#}4QZ-TS)} z20&x&?t)!05cwE{!5D&}(EY)?V;D3Z?+EOHJ+T)?VsDJXJ}5vTicpLajK&y@MJe{h zIA|Q-a#WxaRTz&5s!@aepnF(rF%gq68T;b^9EgKZhl3GCJsQx67^Yw*@I1)$UXdHuMaU71v2{;ia;bfeGQ*j#ph|}>W zoPjfO7S6^wI2Y&Pd|ZGFaS<-YCAbuq;c{GoKjSa>E3U-fa25WJt8oqffopLcuE!0y z5jWvx+=5$i8*axPxD$8bZrp=^;$GZ``|$uC#6x%(v+)QX#bbCJPvA*Bg{Schp2c%` z9xq@H=HhkC!+b2j8+a3MVIkheJ9roG;eC975AhK`#wYj`pJ5R`#}`QJ81qM=!stF zjXvm$e%Ky6pg(rRP8filu?u#^K;&Z(+@#ku82f^k`EQ?rRW}U7F#>x)b$enjjKtnh z-6-sX0u(}ZMJPrIMnl_e4921qdj4@Jhc1Q6>|+Iw+Mbmdk813PT1>`TYAU)=A6)E_t5SiKwz1x8Zqn=2>)1m9lh&*`O^n~h2J>%-Mw+efuty>uKvYPy^dq9{=v}t_59@prFzTyQ*})wQldA!o%}yY zwdJzXYQ0VUN!vz!b+1|bNc*Eb)P>*bxT@#LeQq7URllk}s7~8c+fLg_+eEKF{9aRk zFS7OeU4^#U>3S0TsNC0Q+`c^i*6%g-%}s9Kxg6H^4(EW&VeJD=Zhn`;s@KbK^)821 vzp5Noy}0>Z4!b&6e}>I%)oc6yr(DX-o!s0~AAe0QX&Ei6oKrtmwT^!QBnK3$ literal 0 HcmV?d00001 -- 2.47.3