From 6041a4a942ca409035e78b58e5a92a4ed5769e04 Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Sat, 10 Sep 2011 15:21:46 -0500 Subject: [PATCH] work on closing handshake --- examples/chat_server/chat.hpp | 2 +- examples/echo_server/echo.hpp | 2 +- examples/echo_server/echo_server | Bin 336096 -> 340440 bytes src/network_utilities.cpp | 82 +++++++++++++++++++++++++ src/network_utilities.hpp | 5 ++ src/websocket_connection_handler.hpp | 2 +- src/websocket_frame.cpp | 48 +++++++++++++++ src/websocket_frame.hpp | 5 ++ src/websocket_session.cpp | 86 ++++++--------------------- src/websocket_session.hpp | 4 +- 10 files changed, 161 insertions(+), 75 deletions(-) diff --git a/examples/chat_server/chat.hpp b/examples/chat_server/chat.hpp index 7dd97f9a29..2e6865fc9a 100644 --- a/examples/chat_server/chat.hpp +++ b/examples/chat_server/chat.hpp @@ -66,7 +66,7 @@ public: } // someone disconnected from the lobby, remove them - void disconnect(websocketpp::session_ptr client,const std::string &reason) { + void disconnect(websocketpp::session_ptr client,uint16_t status,const std::string &reason) { std::set::iterator it = m_connections.find(client); if (it == m_connections.end()) { diff --git a/examples/echo_server/echo.hpp b/examples/echo_server/echo.hpp index 01e0c6869d..3cc9a768f9 100644 --- a/examples/echo_server/echo.hpp +++ b/examples/echo_server/echo.hpp @@ -47,7 +47,7 @@ public: // an echo server is stateless. The handler has no need to keep track of connected // clients. void connect(websocketpp::session_ptr client) {} - void disconnect(websocketpp::session_ptr client,const std::string &reason) {} + void disconnect(websocketpp::session_ptr client,uint16_t status,const std::string &reason) {} // both text and binary messages are echoed back to the sending client. void message(websocketpp::session_ptr client,const std::string &msg); diff --git a/examples/echo_server/echo_server b/examples/echo_server/echo_server index 42c197d31abfd47a776e07446e4e647d60516aaa..d79f41c27bac737d7913cfb30b3071602379ec6f 100755 GIT binary patch delta 103435 zcmaHU33yD``~TbD@SPw<2oe>WfN4+-}xc>D@T{fUG`H zS5{{qU`tTl>!_^0R7Y0#I?B!{y}g?j%WAJQSxse?opudmacc8MKC0j_s<8w{_^?;h z-rjj(vf5YH8mL@Hw7H~)G}*30Ga5=T%76v22$vA=kSN*m(liO9vWsY$?cz_m3;iN= zx|`Wfmp)#4ZJ1tZKv^>LtJB=kWUPyXhHYm3>-1^#o+RX{H(B-`TVGRKuK!crPr?06)!^BDCEpj8?ysO53eJ#*=C)^Sd=9~m9e=}!~*IL!oSn% zCi$1>N@eSgEt0>bFS9S|1`kKc4?6oDRShMs1_M8-8ZPZO7)~y6F=RhwFql@k7~Ebn z7^saO{*MT#V+eq*+0WK74FAbsXn;E1afUW{rvLi``DGUG8myKKU@y4#_H3S_4AO@8 z-kckLBR6tJ+E%vPb+b`~6f_EDbKQ2-P4lf|xTNlltmjdGZ(O~f6c*Q{yBfNS&1=$o zN|aSKm~x6dO`7``^k`Aik9h675s-*C2H@?W?$)_bRFNH4d3 zz=FN}+Wov7$XaxI`I()HVUl1Y|J9l0JK&%0WG{HNHy3YL3?^&V4wE&i2v$n5+~<)y zMAdG-8?gAChb|eelj09AYf>@aq%H8|CqF=~rPyRG40~8zeVDAudr}kaRX0>dqms7< z4k%`UqRC?CzSP9y$X$9~B^ef&todmFd^PXllpwQ!f1^YB5%C~c@L%zKgo2J=6{5NK z-$52R>S?mLnJkIxApd5QrI^RRPh1QANP@mw*<|k@JN|;E$s}w()tanpEB~dR)S?v2 zJsxZl_?J+XV!6u~zRPC#q?nt5N{W_GwW+yxGlNam*l+(8>XhQ=z(z!y$?EG8Zzp^0HyriyFzZx_9Vp*)~#@T zi(;tg&*uutekN@sOlGhC&SW_TIWE2~gb;@1BC+)r$WbK(MR7hj^S+Ll+qtKRSL)`Y~bMtOA}1Sc;{xB8%rjZk|n6umJjlumDO4mis14Y55sa z=LM9hq2)V>Uc!5zt>rvgm%G5aJb?)Gp?`WxJV7nR5>Z*vm4{J%DE-q+0zqL1uYxVg zqtIB0Bg4jPD^vZ`)j^xtIR6v%yOMd}gryr*gq=}C(pW=sy_4i-LK-GX9&(UuLV`Dy6ld0= zIG&JO)KGjcR~OQ(xko!m_9iSBNpiV^X1j4uSLjVb z-6T=ZFOm8X>Nj|nsAnCh(+M@>UBygfZ949Ac-C}WEjAJiBJT>REywuLO$d#2Zn7j+ z=Khr72WNBi9jyvZc>!IKB6QvcXjK`C)6B5%{d-6GW}Q{ z{m1N0J=LhC?8l}Z)!%biy`WU{LsG{Y<#|uUDGkKaAQu!a;^jiqQb9oWx)f{H$rMX9 zKP4Nrb)ljA9yN-RjZRja0uDx|YQ9b4yeWovfzwFhlvHd3PATCm-q=lWUtNQAT{O!o ztym1CON5jz31#1PN_c7`YtXEFeLn(N%J`J^ETvgsY&r}rx`M@3S2s_eecr1L(d$;$ zsw3hwClmhf4bUU^K& zX6J+7+B-hjMR8pRC}$hkOCbSjyLHSGQs&y{ib5uG)xKf{bN0*nm9L%pZIA=KUl2%n8m*B z=+jjJH5xdR))G}a{~EZM7&ERUYjrVQMF3V^Qc((t_+fx5zT;EZGh1k|de_DZLR+dQ z7qW|?e!jf{6GOfo^9)ZQVw&;gg%G;MxIrjYv=FnBF>;{{o@7hEG-B%^*p~4zYtRA{ zJ+Gn%Ey}V0c$)X~^F`$IDiI0CsKxj6NSNOcChX914a;lUu73p?3dQcC8Z)4AjLyqs zNi0E&N?sSH!b1sfP7lC6#_0E$sB_or`o6`CtwQ_H)yaLKqiDukBoa*l4svgi%Zc1R z>3jZcEpnUnx^wH;E3H~KS^=qxbKZjK6;dMiEw;T?SM`Ur?B`b9n)(XuFhbe+n$@t? zUH+qJZRfeGS*O-*+`oZrDb@vPQ0k|7Y<%mE5pR*S+5!{rC)G{ST4m28Ta9-!+53u> zJ@I)_pc%8~v7@bH)%NRFw`rARU4^E(Kfzm>ZiJJCa*7t3s!eE#^;TJY_1Ox}_d$LB ziLimNdWo)18a0NTrd904HUWO`00V@Qt&7|+s4oXnJb*rH*v2+K!!A^TMm`jx1~>EM zZ#jOGEu&4z_I_ezo?_`jLfjE(ecjOE{Pd+q#Zzz%!9s)>!aTe3SiP_bop*^E**nFE zS-yc{OhzE8?QVP-P^fVL`0;UT*`}~a^_e%>nJ`nMH=#pz7N?b!mUW3MZ?bmb{=QfA zNSw414L%Z9wet}x*~su~{PFuc7wWG&knJ~@hjM7j~R$T=PYdDD+oP#{t51JSgM zFIWLOpNojF^BF5xzqZZQ0jt>5wmnqORcve9PHI^m`@U^E_0v42wu|f+3sgJe!(h;| zzDls%wVXF;sU;>Yu_)eB#BTx`Z#m9K2=krb9w=*wfK*Ql0&1#TV(xF52|Ol`&1)B{ zzQI^QyYZ@RB@1dFp7e(mg0zBtCG`Z$RUU&97WsTIbWOIL;I1fZ28&CIWjZL`&6vu& z17hmY*DceS6BC-@$=j@C*7l(>ZqzWl%|HAz*szA)*C-LaU!ij{oc$KclHLNMm+8Sz ztzZ@H^P-H9#h!SHwB+pw**bd^`V)`W77afj1}1CjCH}!1fM~Nr5LTZ2tCehbhYt0> zUrzB;#=l<9u6Bs*F$F00#1cVh1&Hc|N^27;;SGURv4`&`m+qr~K3T~IckJbP9jvih ztth0(^joeElhc6lpJ6iT6&fa^&47`2Pgtm>oew}+43kuO2$l5P7?l-gX{d~*r*B~o z7St)w`&o#A9+!cDF2h#Dgn9gvH&|+?L9RY%$E!2n= zEH7fJ+HM7V5E10L{&i5$)^5Im?TzL>dln0eG^tN7-}_4BTE*`(4LgOZYLDDSWY!JK z$OpxIsK$c3%u&~9Y+aXj>Nt&^=o0&U7*MgmpNj!vWc;Z3bh+HnW4D^uBQT6?SqiaA zNVYHW4}tAG6Ll4;Ks9NFQy>XH51&+gOTghv*{H6&8_mz9@G!d>GToE4KD^#?78G?t zEy-oSMTIv1fCzXAaE1Uk2JQIbBsW8sZ(EPZ*}jWj((k;?4H|Y4_NXK@ejIR0qx2v<2{ZpZMhVt$f;6jguBWI zERkyU$Odk9F3XPYt=?I}ilTjoPrLw-HOdD+2V&3$d%r$-<~@j_HTLdL0(=iY2NESX zgunq3OsHsGO5lMKtPuFYQr4-5zdCIR>)#{TJanFDNLHDwnMHgBs*4kMgGE+0hS$C*Vm*5w!L7|rEnH(!y`eW0;9a0=PzQ_J^G|xfm4ce=K@CaQi|naisctR zlgQ*2WggEiB#0rSAv`YH7XqE6;dAK$Yy1g90h5+_l5bziw4Tk97L%JJ_`n>?7I@=xxBd33-}F5-3q*em$EraU`Dqlg_C@ z_>>+WhhHZhC4nXXg~-Hh3U6;kB@Z&=A3yrXo&IsdKX66GIP7Z7`ewHb1^y!zGhwxoB;Rn5{Iv)q z|DXuejD2d6>_W)5P_GO5Y7I#@C&{M>={ss{jeXuhaTQTqFDd>$wq`f?qZtLcog0L7 zkWgq6;fnazj5}-LZgiq{b)d!&YJwy?Sx2S4?noU~i&Y>E`Yj2Ke!B{h{^(xUOq<=2 z=irsj3n4P%e#U$u`eg@?(j(w;S-R|>F;aBmQHf`gT#J1Z+`wa{7=Hd&jA^2!F+^o*%W=j1$MPQ+--?sDN?B8ckoJHPCr{G?y$Q z7HyyERqN-nfViFw)1W$Z^D|kJJZ;U}D$UvAxIWENsMeBLfRVL`Mplf`1=yn`jz-Kq zoX0N44XwA9NNPbZj^5idzKhbO35t$YN{@NOEs<6za}VfC9Sq_ZdBGggsS1*$YKx|@ zn_4XU`RNAgp;0U{$Ga`YRW!tEC=9D1KfV;+lLPqrOsekZX|m4crkL0)fo|N*r_57q zZ?;uhyCwsH=gnuc`t~-D1&tJIzDXn(qnez-cuL0)WXfs+S?-Y}>mV)}+8XunG%#A~ z7(WBUp16Zl<_94xwAgL34xOtfW07y&!Rw)EPSy@X2ILXx=KDW_d-7~xBRLxnzQn5v zBBf}rjzvpPAxeH4e)vryYR#uA!s^@%MJ-oi2<4(jk}aAQ@KCa^wa`s8j+y}}k@PhX zjV^Q9mV|cQ*3p=qa}1lb^dd-7#CBW9m00TTN+3HpMFA*eomm8prXyBr^Z{gdXN zk01Vw5PZQblXdTAs0}8PrIqr=d_K|CHdOs<8ylg-vUQ1R>Y))NVFP%JT585#&$AAu zwkiZ4VG2}-3TQazy(RSa^CG?=WiA;28Z9Foc1vjf2)3%9pUZd8tG3JS6+gDpmZ)x@ z%^D=NR5ORO$fUFCrss%Tqf)+HXovnz)2sh*!P9$$;29xs!Y}baA+51w_!D_rC3N+3 zg6HnxH9S3*3gTsa(M-7VLCYxyu%InLWPk8FDS74~Ct>qaBKQVjd)I0uf2Ji~onVV?cp_qz46 zXlf8_MAHk;P*Yac->4pcnO*7M!h9Gw6vtNMfiFmc;>a_C5O)C}*>XHN=b!3~114*( zpklFOAs%@q#d4W%5X1{Tk^FN)i}@+h>O^wRaTS@6lpbUGs|_)!bVS$Tuab(^+^Pp? zAqZj7^sLE_xe$sB5^~&d!i#w;!9b$R&U$mGYVcV4FMM8pQTRXhhtr_j6m%hxDf~1k zf)45OGW&Tzh{sQ}sGiGyzvD&LFeSvRnI!5~W0FZjSzL-w$Pgft)G#1yap#n<1q77F z*gccYP6<^T3}tWQ=h{qGl+s!KbO^hH(yE!vKedHAbqI@14fINb*Ktrn*22g`Lrl*h z?8Vej)qf^imFiV*D&QFEss^)@9y~59h1)(HEZpWX z&}d!*aPChYOSj;>&Sc%NPPTj+Ef3IHCUwkJlISde;LJKytL3}FPuz;ecqWKRdlvcQ zGCo1bvq4l@7m&Oi2djpR0J$mfING-=x5x|^=9f~q`NV+2kr0sN>(Ee)dWBPj4EdY! z!ds)_3~buso2iN+F#_zPcp7?^=DmNA%vDVWz4B|#4F)!N zSbG*d=&8ujK*$Jm?oRqSBoTv2A{fEW*&wakxlWOx6LmVmdjxvo!4`~`WVUoiSi&BLj2BkBw`0iNSf?5kH79c_d(Ks#| zn&jd{jsPN+>S>ef-{xPLOOpFMJ`;0|f_U64_l z-A}NH8uGbNz>}D_mlWJ2WH%_#bW4!NfW&`>bE14|b^uu^fUJZ_)57`j@QIJ;9CvWu zj?Qr+Svuv_sqF7(+Nz8DvsS|{ZQ0G9pe1t!H_>8Y7DIyGm;WQ@pw42Tv5~_g+aDGTPZGlzAxnM<$)X42M!3llfq(X61;d-Q zQKiIs1eQ|6p9xFLrDxrmAM_IuIEz@XkWfKZPHuAv8Z~w?-cK0sVuCc@8xz>2 z5&a?;B|drF%_hMoLKp-c39bj-phWiE^HbH|5`u%_45Q3CEg0m*mi6vk6t{qvLommD{o0 zY@k#$!RpSGQ;g(CA(ib$U&5vIR;Teq*w}^^1Q?NOX7v`hsH_cD`VO8(fuNCqxhs{#YvL;JO!pE zOsa?X@i_L&=&9<6IN_U8LW&0xd?SSxzG)Z77L18BzeWIO)J8+*6w59C&qz}995VcX znMi{Pz)S6M&m$M%fCi3WZG;8~5FDb5ln5q|jHQKwd{lixqh$ca>IbNkvD#pCgu|S1 zVB!eYf59DmqeWGe@Bf4yBS?yQqu9u?O#|bHJM1;GkFZz!-qK#@)7k2=Bh}A(L-PQy zO+-h_m86BzmfkFATx5Gm(N9nmyz)bcmmZK8;0;GWw(rg6k89R8PD&IeB|5whv5^Zb zoYR25tQGWsi=|bse-)YhDMk1~w zLe@fqgfsy@V9xofotS|J7JdN^` z!pe%2@(Sha^wN4A&pT_XAZhM(Y6 zj%SB)M^TmR?Li;Lu>0eiwJ8!QQ# zMhDiW6m@D3+?4m+<6U?O1edlh738D--b+%hEg{A(lEO&|c^wo0DI!SubF5-Q(^h+i zI*j^dPhr$|ddSf053=Q7;~rx9#d5azc`p_>F-+~%lTDi#=oJbfXcZ4Sx-H#%vbQEq zRp0F)x~Pe?S`K%?pi(Gd(2O3e^Q4Yy*l_m3r1sB$iZ0Y$?`a)D5EiAyr8dVz(^K&< zN2gi@nAER8Xdx$nS%4#mc1y*UeIV z+AEqwW#-97ua-nh%a!DXq)$b&b(3d4olY%9PG-Xts04oW!_TDwUnDMi2?WZ_6HV^V*)l;5Q$3!!ase$VJZfx;O zehmuv3lh^enhl!jUGJU8gm#XP0CuquA(a!Rn1}%segd+4|JRw?JnR18{MRFE@fPH1`$VSmm_l>ZT#A$@CSGn+O#a z!`)1{Sl-PX0peJIM2ihY)Vz-n4owjb)YGvwKQq03PysM1{4r?LC7(f%955X8m@J?3 zPX@EV7n_C}$rIN65YV7@=l;Toj3G*p6pl>kf(g;TE_p37jm>+plj%?whcfBeCOW%` zNfEMP^SK2exlhfMpg)D9%lNqgI2C>s7iIgHEay!*pZoFN{;cxFe(Fga~3Y->Nel8W8V3NLcH0CwqyC%mYxlSwfd~MvT&ZRjn`WmdRMD+H4Mc zzT1UecxkljY~XSCG!{Q2q-ozsxNVGd8;%ae<~$94%i|pevaA^?>Vio2<&3t$b3jz) zyK|*umfGV+W(l1@i#r^*CE=!mFzCi1b#0X~ z1iF@`?(*3f7|Hsq2voau64}b#9Cx2d+;b5uZ}cqk-7tMii;{HEpdmwyt~|idY_}m zve=w@bx!iH`m-Nj{;tVhz~qJER9yYTW!ldD*pXL!15dSoVvogzo@93Om9dSVdaPY} zV>bTPEp8tqK=sOG#dfoU;?Dvy8nkUhBKBZftO$(Fhm9{OUHde#CH z8)s}%78D5P3vhotnV%=CnbZEaa~hEJots7}!`i}cxLR$JCOv$MHZTh)-+ z0M~JeUu<8+PlK)X#Hw!s-@TN6#?B==sNT`9Z!%1O> z)8P&~xH|3NO~cT2Ai{Z|B)ZSeaEeFsCBByGEp!#qgcBROfJ{PKo+j*cU@zb_hsDHB z1!1QS(*S;=4uh$kHS=V77)CB46o-mQ9X*1Vl6{4NMqrtP@Y-4gn4Rz7S6A>aOsjAR+%rUH(&HB!3+QP9mEx}+pz zhQI_iF)Q*ZZ^dw!a`)un^*(HCRwwn_zU=#~R-rEdJ6XAqVwqS%qzU1OA5qRaY09n6 zF!IHHS6@(YRtBZ@HUnsZO8w5+SzEqH6xj}yX6gr_AcdSw@*Z2;29HCf1t~4UF#*d< zj^u$DWc673KYGwyQ?xiS+WoXGWFRbfq$Q1NMVN1JjRSt*%D$U_@_T5u^Jk)MDgX z!)Uk9BaHSp*BNa^SW)~(I2g?n5Ok>tfDofeJ=x*KK_mXQp@{u7txZM}$XXajz1@;cmyU!Ao1Jo0_pXOIw7Sfmi+oh8Y?k z7IsHrJH)|aQF_lYLp;-reZI7f+9`%rER9hA4q`#M!Rm#ctaomR`oADH7Nxg(vcVhDOxya3kDDXsNP3cz4%=u&so=zYwSK38L9u>qc=lXhuNPsk@0Mr-c>g?u!^A7Nm&J!{CV4GI9j!_$Q;DL+RovpR>Fz*(=h>BT*s1qkk)?D$97tjWQwaHn; zXwIu)S&^KI@+N$m!)f$sEfAv)t|Sgf*#Zl9hL)kIJ6 zQ8AJZTJGKPtP~?1Bo4^aX*(~XM%n)=nH>=sf|6X!EcGL;T*Zj=Vify$xsRGAs-npJ zJeu5Zjk>(TLCUEDj}=@Bi^P#yeifa;ZS2ZCwE^aNevTm8K-Pkc!f3Z5NF@rT;R1m| zDYrJlCJ}38{B=U4rFAYHwxjuG@e?%<xM+Poo0)Z?R>tMvYqq9h>W3nAMdcrJC&823XQh zv4r99(?DRrGQYloANXlI!a(x`5at z1t|~yAjUL_AwoaWo1(lyHg78E825NHDH zX6sjURzrN)H!Fs!)sZZ8WryH5yu~V-d`mGw6ID$|+ulUbJIPlI7aNnj*~*pPo^?PS zTVFb129uuNY~RXpYJ*7Tn-`^?Y|IAc`Ko(6vB`NYRZC-L%?nmv?8H9K+Z(#K5#3Dq z7A|pYr6~E~v9b^~SY)i@Z+2u$SB1GuX{54GR{5wyJ2LyKAeRUfudWIUH==n>4n(X? zCK9eaz>Z!Wt}bXSO!B6uP@#k`CM3<+tudLT{%u*R@>JQ8)xIu1jrFbZ z&DDvX*J_h{85sRoc<@VLuJ6$QYo}!%f=K~?wY^{x)`;v>|94rs=Ap8$nXijmBb`Y# zOZ2!vFu3?!8;nOm9oWz{kqx3PsIv~+!Sma(m1~-+Q=g)<`gR3;XgdHFA1{HO^t)zu zo{Warf9)3gFLcwG*zl)R_UD>la|2+PPo;TFzEUfD&q$(S-C&Ya;8RP{H|UlY$#9=Q z;`TUaZRrtNpeV~SU^vq3rND^SW{b4nY(mlD^32H23jj~nMvn!@h>n7TynN*?aPuRm z3XGn`oq9x=D9WBO%AG8S-E>l0_TAe4-9B?CGt=w2cs+q$f9ckmx-(8(-QRf}R1V@a z^Pg_ThQ2wkUN%e?&6|SRRf}r%Td45B1to@6GX&NmL}wsm!pQ!LJ9q) zp}43t*IjoME=L8W095`5`Y5ugBzTRzTQ^YIO=_>CFjARY(oYDw(m3O5gjBAbhBiD&_j|ZVT zK?}tzK*%4sBH`m%T|z;T`%@;)jNfWvz5p32e8{7-VOID6<0qy3&Y`|IaeGhn%I*5d zdygMQC1&0Pto-LfDlq$rn8|_p9)B0$WQ>H!Gs@T$Z{X7D=07b7n_l%6!SnSOB6v`& zkMUBBhJD>=o#fk*l+`xLO%!hZxYBr{xv;zIJDA_c`^NgNb~gfQH*eLP#Gzb~29Tah zl%P@)4@wn<5IvgE{A7%H;)f)PloCZt3UW}U_H;3LyR6SZUmkpsV7mX?l-_Rze0I`EGDz~DuS9DInffL##TX8*D3>s^V zkkhXK6RvoN=|Bz#a{gIUQi#?iK>{R} zxDqr?__mA>ArwkWPzEmx%ipN`2nkw?Ai1X*UsACUdDx7|I1&=2A~8}Q?2(Wt5eW%t z6PEpDXZFeaXI+&*h-M05ep_0FS1$yfbyx}iLlD91=eQb(bXJ=xa!DeHiSXR4kf{c6 zt`VB!WiDEUE)5_?lrVH`yeBA6oZK$)L4t)?yABLs#akl6CrR$Rc^AnYtdV`V$7dkb ziy5In&&XXh(CksCh@TE(J>G3*{>VUSEqz4!*x!-X($mt59FR4D2>&l8W61F*8+FOn zjc(Mh&_62f8E_71r^mee2E$SuS0ARS#47TtUoRj6$g55R0ed3#N(1lRlww$XZ~=}C5dn*n_61dmxz*0Z z;y!9hp4fs2&=ZTBQI}|`o&>y1cVg?0(Xjjz*>8E%8>CZWHWDOIC~;Y`#@>CeO}7W& zsE-Yopw}fnA5_FVWV{5BTnQvfPzUHqbiMsp^?R*D+B`&{6u`l#)6-qq*lmh6^-)l< zjf_y9X0LDkRQ=J1#ccDhbJzzPfmOZ%4Kf@)u=%j8ZN3fY9y&jPxbp~ReKz^3S1MV- zwtnW~e@Ot5sFPuz2t3&%b_r0e9#KVs20vZ$#_uCN0&Du39`WD-IK4r}d#p#SBhvpz zk67u2M(6z5^6hQLJeUnU>Jf7Vk@MsPvdP|?A|^}qm~0O|8810U8*v^o8n~SMpj`!C zRK^RQAd4`TO~e>=_dfI7;pczJm*f*Yp$u#CWb0uHNN&Bw;&;S_k90_|L!db&__gv8 z2}a##J9mUM?+v8#atc~-i~+SrIR+9(pH`e3Yk1ZXJe{4O`j+erS6S;1di6Vx{bR+` zIEdT-HyI-8P$s50N)eLrKOiD7zJ^gjDHDk+9tgvF9IhmA3$ii9z`}gT2Mc=+M^l*c zBsZd7f6t2l2%{i8i(o6Pi-r|YyH4VTJ&abe`|PMrT32^z)7+0C0mlmzOG=WcgAaTc+?Icq1r7 zc>dgA=%r+~BuQfHv-n-(dai#}m;7}|>yUgT%=WnCd#;O)?~uIhJ$7MNu-P50$}4rr z>w7*f`L(-{>=BUcRuOU_bVvzu3FtjcIj5_`j6#W~r4;Ab)Y zq_FuP2B>b=pnVHg@L{l-V$5lQZpqrS4hy7^X>yLoiKV#yc08r}hng1u!9hw(8g8;Y z$f;62mL9~NKfEdEk^2A-wT#>Y#+yV#s5NUHEi5c3W9>{!9l2T$Xo7_umPFAsOj)D8 zo{n&Gyi~DY=qv7U4{0n%C2LglE5PVLdcZd}U|>MQN$foy@JaabYV;{$;vSBQSpnm)-y)!k8T(lXb{h2%ZnMwD|!Q#tqD zyu;Fpe0yG?;F2$8$hA~{9LVz#6qoYDIz(>$XT(`wZON(g&gvrHXEmVN`wquSi;Ncy z+a4CKLX+dap+Fss+Ryo2cC;H`lIREJLJ-;X6M*a4bR6Tm;k=O+KkU-Bz>!!6e0K-B z$*j6u{|#}6RJ1fS7Ca6z!ip3(*Bg@JfhNlaH!_noU;d=7!zXIuu}ao9c*-Q28Dl{p zsEB?)AP#FuaxT`=Sa-c)l+PovpV}ZitOfc01zdTLfh+_<%LD^4Gj_iH#LzG0L86xg zogqfG8skLRjMjXm1g}AJdHg?s_W4dhH1AJE!_RT7_^Mxu);BCg8xVp^0uhLcJYsKo zM~IqYv67g{+6V;2(jXx+j+O}nRVK^6An|M$J3H7MrZUU)>T9wauQSOpYWgjVdP}nr zgmMm$H|IT8&Oi-@HY5nqfy>8IN!uW!$&qu7KvR0-wz3?-@<{VVqIL_h#Y%`bpfLd7 zd?^=Uply(G=OA*Gn#Ww8qTG{n+Xv_* znA-@voB9jpwvX|v_hck8Xq42CV0n8GD1Q;lIp=rHoX4i@rBB^rzr7)to}v-Z(ch0i zuE&{1)-a9MnPMyc>8I_~vR_!)r=8VR?ySk)R_2!Am#ScsoQ3I!P7Ckx#lKLzIZg}v z>Pn9+MtF-wyZ&CaSYkP_f^@81*ld!5@8Ne6{(IyA7$@vn(A$3s1vX9-3iJRgj3XL} z_}G%*-}=raL7fJID%jJW`Dq@}0OJF#69&>)9zUbU}R9?503{-qu z{e+f}Y&_1^CBC&c9{aAdMytI&FY!%;E0nhB)FROdWb!skFnkO+;o#cb4x!64C z1EepIB}f$lmGNsvg$>B(L3{piwuPaQ$%!yJ+P?V*OZ#6dHK~lv`QH|E!wP}uXR@TP zi@*CCO~y(_1Ppik8UV17HN(X(Sz9p$fK=_ZS@@x8(}X*t-@@n>Jo=tYF4 z7ENY0;Ze*}F0(n#RNeH3DVD!ELtCV*+?egNi0(l`29b8co(z{b-f8xx!wa<<+=|M+;+>@t!Ky$%|c;)%#nkZ(b1V zi~jqATfZb+p|7xNuP@G1NaY;&6zdCHr*2Bj)IaJ#Sb53H2=)kC{gPEW8CB~WV#=9| zZ;p7OcRn{7afSg@^v=!zYeU8GZW5o|@grAYp29McBHvFmPefUC``cH=_|)Md*kKw7 zsc4ydX5JJE?`c98J0GR%)Soac$N2ENip{sX5~Su`wRP*RG@tr105rO8rdBfyi0E1u zBIJz|%{U7KfE@U+C|+Qar}VpoEJj*FIbdQl60P@w?Vwz%f3dv%tz1Sb3M<$@%jHjl z!rC1O@J@%RvDnN;dfsHYNS_7xS(O}v4PP_Z0LbGZR=FC1(ix*oznOpLbp`XFwD;RQ5-SBL89^Fx1Cvv!A`Q8!hy z#fMVe&i(@$fgpeGP?DPdFAFZb=JwVD)LnwwjSh#hmWQ8p=?2v ztKQ{q)hJW;#W`0zCEFn2|NfVHo0HfTHh7Oun+%D-*+B<1b(^vEY#$ zKPwYjHLT?C5&+Hi{mUwgIyb$h7d@dAvZc7jfnITg@~0*Lu--@gqW%X2)bIo1_Z}aG z+h{Og0iEl=0T1XG)nMp>uI5V~uz=5l)d3gT%Nu-fTOmq-FcRHk9ZpR2 z|C7P#sP>|Dk zQtK^u_x|*GBgOR`w!1v2iXAI9ss8tvyFDYk5nbhU-l~gl1pK6q6$6;b4@HS#;O{eUHx+(hh0v80pJ!}_C&29u`3VzqE11>h<_g6$&c z*#3=B`g)b|S5f2#NGxzIkAx^TWS_lVj9-`9{97x{l)r4zJ(LOlaizlaSfs)37(8W| zyn9ZBNopmx-j<^LPQPLfJ~m1J3`ie-9`xnav02C+Jv!mz`l;YA;c0-gZl_ZH20<=- z&N5Y5WJS8D zZ(@}`YVIF4kKRhFdTAB#=^XBT!xr0HY1T3psPsvx>wg+>ln}<-fLwxQIxODT4=*Cj z-ORoJu;HRiNA<`x+b6vhZ(ByJVp6eg!NnI}cH*07LUJINh>~RO@G@H53-w+iX%Qt4 zuCgBA2Kn{Vi)XRZr}?rx3KdvM+Iq(+UDdp6wv0F>-0wMLddjiYK}&p22&hnV2S0k< zmLI3I_V6d@M>;g%s_j~wGD_`w-DZkcf*P;H&b++60OGn}8Mj`s&52izc$Gq5ynLED zglFR^L5tuAxUK)wO5eVd9rS+#0MYZvWh)vv!TJ<|KrI;?SDptGlVH72kl$&s74=pE z)a4bn3%!+?p+6#TaW|1G`X|K_Bw4vUfcFKc3CLdJ;Q+}Oxwm6`Obj;RmtTQ`#9+0k zwDaY^*{1bTp7uBl#_`4d+yv(0Yqo=Zl=Mb~9Dlc;n?m1F>dpIJvxUbgO*=h1G=*Nq zdWg+&!WUT2w1Q9=wvsKcWs`5LuOh1NnHJm0Q@k-}Tff~_zb|Y@LY)4E4K3-}aV_*q zwj{LlOSUJp3;`Yp7@s~xE1QItVTqQ7EhCbx3tL9hH1psJJ6Q5ueNS4MLvpuYSku#q z>d-4}{OM!n=YPf5n2SJ}CiuZXp{vRxdD$gs|5Re+^%P45HToW9leI7n!vI}7t3;6> zB%FvEoINO)ca`qt8>xY%G!mb$`?>s0gJivuDz)?iIunQ%TSgY>*O2Ww)3yC}C{z(9 zJK%6yQ-}y%g<8l)R4(AU0g>W8{QP&z$F&}E8}zU%Mbs;KK*`%T3p6joV%jF|1+!qLz24k zG8_6s#7p65fT5cYgC;Zzth`90KsyWq^i8?B9()lh>@E-#y!yKFnJ79w3|A*(1s~%m zyG9hzr{cQu)W>RCL>3XH#=PrAR{29$+rA;nAopOH2nN^faYx%#U`p z?L}7SeA|W>dm(}gNqWfJ^Zb<5{zO*GDl#c!VEX$h8a{s-exD*b{0CYNv<2Mbf8uT_ zUN7LyQ7p&gW=IKt;PJo2lem@%TpXkVX1vI5oNwxN8Prph1=K6>{VIAb^ZTD!@K1fz zvlrOdpZt1d06xIlt36%6^!Q&SwVX^%+GUm`D?dvJtk}t^WCd>hl8|cyXoc@87}D?SEvyU3^+Sf0l)nwI4hK zRbo!hELh&J&a%Yq30lWwd!3drDg5Am8Oz~hOG-<(c#IUDRLOgtBM82UV;xxMKZD5W z{cKy=VYSistWUYGy85i`lU_=oN9I{Hff<^gLHj8`upO7?`>J4!Z&>uVbmv>piTR#=|4WwJI}){o?Rh_jt^IYNYuPsd zwm!?Q{W@OlaGDMJZMeGSTlT?kCUxa^?DlUF=1{05Iu*nfoeC6cb*ccq2o*J*3f&{K zZg$q&O2$M!ftcwZUaXUm!=G`Ko&D?S$7-DYE8Ibpz59FUh_X+SV9xGs$V|XjqRybe zS3x&isOpL|QR94g58sl&y9e9xm}0?wgIM>y2vMtd@5UGnlgJKQ?0RZ92G4dE6;?#c zx%sTwl~>e-UyJam^NkE2ocr_kCG5AWiRuquvUa>vS9On^G-}1iu&*618vy+OL`das zwt|16cK=F5$l)(VgamH+QaU8*6j-c);cF5&?Bh!rzAZrNKhd)5q==SL1QXG6-|k?2 z7f;S;aX$&77YQb!)Q|yI5yZNR;loYK?e9odOL#pN8TnJRg|F*MF z{`B_y1te3nm{b=t$KK762{^w~WCGL^cJ|kw&0RL`lsl+WZXpTKT06#i+!&_5c9P}Y z@K>jwWV>!y{Pq=-CV`-H5=noqudAnhK>Ote!vqkof~Mnw@Et&D803wyW|} zHOJ1z+>BCF?Ci~(t<|$9*x{RT>MzBsZ>6fNm<_tsIy?}nBJMr@_W&ao21bmWC;1|( ztWF9mpNkN}@L0f2C)mbYozy19?Au!j>enZj_wCl|u;VQDc2{-g3HIvk)_(Vn)uLp= zYFCgNah&bB-BfLIf_;mZpMN^W8r|uvZaB^o@5HL3kF%wBLe=um*#~#JsxHS_*`088 z#pkU4UuN~WV@&&Nl6vEFcKfg9YROUNbGME9-sh~(-5%`1&dze3b3K+r978M+t~aII}`%7WnBfjk=YNnVY8qOa|X|5dORcLNvg%M?9AfATAbBu;9N zhnc5MT8vznB^+kg{%)b-=c)Tm&C568Oyx;$VT!iJcn9uY=4t0z>@4_mUkFwa0Q;v} zu2yWWc$>!k3SF7x0#eG(y^4K{K^m?Ke9hUSnOnS)k8913TIq zJ$zY7RSIn>uPB3+Lwg@Sh*Q-m1uX8NuR5rJjd-|UeJ7uJRqs?A?_)*P?bY`C*q_w{ zM@?CWFB{_%j5Oqr!ZQzqsx;(d75~n9eM7B9MZS$k3qJ21YXcI7{FC<{;tO2hkE)i` zjt+3_xm7rPpp_q5KU}|dol>HvtfOQ8pljDy@mpulXGMzQ zui7kQlmzwLeYS7MC}Y~tnI%$IyZOjZfrgg=5upYA6%=aSj%l=(PWaoD@&|h)67T;p z5w-I>n9?1HbdfkF_UszMHI?wgz!hK9v-3h=q1UEpv8iv;bZ7U(i2^ube7hvDDv6ej zXkitZV>g+?KgabWoc4ces~oF5Tkm5MPILckt7W@c zL_wT2C88@E>#w!tPFLEQuh*_7&e^;17j7Qld#zO&UX*_7{2`otW*$yFvEYG>A`5+w z9~3%bV*@aO8sOJ?fCKt#opkZB#`d83#5C}l0S=*DxEqk5vWVgI^46eV^X=61@@Al4 zQ>JqjBO_&nM#!HTz1P_My_LwcTh3Zs|8h`U{E1LPtmwWJeC)i_EbJzzk<~Evo+_U|VPVF~=kSWVF<@p^3X0Q3Aix_vu&Y{a$J_#maZJ90q0^LD{| z&N^R}Akn<#{^ z^HZp!8*t~xr!E&t|KI!cX@J+-r;kJN|JtV~?h^a-=0JILpYFX&?9;t=ihcS%2=>@M zeLJe2uuoq~Du_I)+@~M-fcEJP-@thtAAnFq2-&`JQSbqj9k%*)6jOt?WN)0taF_RO z>2(x;4-Q4i2ov5zr`WZ_mRm=OQ%7#K+3P6bYVx)co|wCG3T-L9w_pu08w%d#~QbZ&X~=%Tvw%~I%ca4N9dEM-US@S$mV@X(nFho z-B-?r**rohSjIm@Ex*0hV5lMU79oxVBDdfP%2L|xVns({k%bzOg+mfB3|Tn5$;*G= zVq4&*v`~+3v2Aiw0y}MmkkX3HsC`YgEktJ9ra>% zm<*PYIoF`>(V-XQHaN*(p8pe?K53qx>qK(lUjPSI>95c8K18%;;b1kMct}Y*{Z?Ii z`K`BV!^K=T-bsxnx4#zK=Dmn{{~8P+^{F+NbpbQST((OvwsQ|j@v(XTS7-C2Dp1W> zY`gy==KV>|>RMDk*-%5ZjZRftN2(_{X9&$W-q}=$nJvULU&FP&8Zmhfkb*UIW8~H% z{GNc=xhn`eX4tCq@?|L2n)lyxl1qw!*vFkk;`yvof+XygF!y8LU;ZNI{Q*w2T3W3^ z2s&)lP-i~N_8*t$*dfJXs&`0Ll3xC?vn=QRjVRZsMU)?(_eE4M0RT(j!bM~gx_kjK z-CsA`uFg=}`7aT*Vq&8Xcp9C8deiXgu=Y6BV%zu zvD4pKq=m$Vg|^i%E1f%hirzxQux2cVxeP93WNt3vLm?FE-N<)h&sG?LCSWy%?!ujr&@=Oh=43Yz#jZ{eg#rEmCo+Jbj~3Zz zL2PgYPLJF`GUG*?S0Q3?;)#(o>j>JJCk~*>!0$~3d1Nzo$ge8e`BjvQ6N}Tak1G}^ zWXLn3(vEki9L?>r`F;Q<#cPAqNk@;md3<)0kOxs1;A5`fLnlV{sfbO?JljYQC0K1d z-?q?033TZ&S7AqA_KEeA;IE;cj1v7#JgNM03AN1yRD3@O!S1;2=)Gs2?Yf83ywT?Z zDRGCMP})9+QhVy^HMVF^rIpL%IU-GHF5pAfkTJ^mGkH+_Z8R!hfwx5+qX1+y5*x9j z^?)oUlO-t(wPkZ0q9vuJm(yo4#3++qz7LNz^MsfODxA0!?3qMQgnm+(txJm1#=o<( zruHHKn%PpsN^TaBi+)JI@{r##{;8xT%sXkNb3n&##sC>=I_y4Z=+H-YP0eT^k%UqW zq*8rJsq?cPqV-MV2SE}<>ghxN%r!QTRHeBe*{fy?G>wq(2T&mEQ!V{$V^bCXJ}$aN zSFM009-W8vv2Hj8*&S$8L+Cz`L8y%+)E9%-yi5qAdH2td>jf^1AV#bcx;=u>rq*_c zi0Ax)P@q48uxqy1eAM$?E$F7twnYw9TGab}l_)+v+cs*T(o>z0XB-C4|VM%FSwPI7snpAQUA2D>EhkJLC$@7@tY} z1KdT%GX%-c5MG>TTQf*$rB2VV9UP4`6l84$>@-IdB2oHU+jIe1+eBoso0w(XlCzASTlIcQvy+Z#hb1b5OhncEA+jaE5mJSn%g0Ng}wFJUIR z$J={`?6~iNiX*ponLuLf6S=+TXUQdgA`x~}Q*N&Wu~j>_x8!xPl##OougX%Vg`XV%K?4X4m|E^}wY95rKkdii|NuPMv1 z9a>7!X>6Z3Q|9*iI~mtnx1L5YJI3um;Uzmaza}U?B9&&G?j$O5d%w+)xxHd%buFr? zwW!*J^mhIrx0W5Gm@hpd<_wwJ>;DKr{)31v#~S~yT7;YEgy(>;V>OMeS{O+$%7RG~ zClis|OK}#-G{w%+W4XOuPCzZKIztqPtrpTC0PkLcl^&f=WNxn?gmSL&k=yI$EQ{HW zw??_fr*%NB_ORv5?cD;)n)#?BHPVbpFV@QKy(jI%BT0})CDA9gI1Czm%_D>k0~v&V zm<|X0pSitof@AAfiDM+{J zGPn1(7#zxYc#h2N^?@%RTfd9k-priZv{RSK+}?B3Wp3{*T0y&Hl3&iBD1}ZJxxM~l zrq$^D-`w71g32~Dxy~R;7;M6p(67+FgXq?H1#XG0%wGwv_c4JqqkXDO=2=jzwM&=+ z<4JlVnYYDRq+LSbG?C2fQ1?-$Ooj$eU0f4x-wQ$PyvJhO!2l((%|4xw32*9P?5yN5 zK&D}po)78-zRtF_2~=7&aR>oq4g}6`WZT9B;>hQ8uAUd^GDYS^-pJO6%fXW&x8~hq zlJxx!LD9~+SqyWKofCo_9Vss|Vv4O*Q>DYRZ@{0s3}sC<@bp~u%!AR?=Z{zf|Z@u z&#Dp~*-sFAujn+u0!IE$qC zl?g)eR4);e4#k(&BK@v_*m+%$cK(^L2Qpdr0>L!*j|53aT4VAAn{SBHzW&<~gF58) z1u~B@eZ0tH^f;{7rz{ZRmGED(`v?PBjPYaz2ifi8CE1@4p+xrTd_mT{>jhvvnznGG zD$V=HvHwY1JR^9E!68x?!!qAFZecn=%10%+9Fr7MK3n0SnlgV|_)D0A@)oVq%g=y< zL~yR&?~w$e%aM`yydcvP_Hi;ju^bI*4LnoFNn|}evC~bk=bFXf)iH8ae+G^O;XzI|wO93f#t2!S zw5s1am)g}{)h``GYexM2teHeorr&1(%Z4v;4E6Gb9pmkF>ltVq>gQI`habzb1&1mD z-akVy%drG);#vL<9_eb=x%sw%p-NwM)qEQZRZKofFcJPfoLoeUPeI}jywA1W3{~2w zhsM|fS}O4YNnl`F`~ZG5#2=!6Q#|_p3e8T9wq>>iEw=@>11*&pvyJdHW9evznUU71 z<{Q9);>csR2*XFlC9$sa)bYjDdB>|e10=0CYQd}vqIsGmrf+py1F2@2XS*|6nW8>3 z+ctWP(#Dp!Q1Mje+q$(^#7wm}~+Tpu6 z5EZ7xPJ3<`KaK*vOoMZE!UPpM^+PngnPK~8q2g0d1P5-eX4tMTR9b>%<1FQQ{JfN< zgy3gImarvn1wP1N=RvQMO^%US8sm|VAeW=wDC+I}-&Yx1B<<(VW@_NH0G($A&*`NLapRB}}!Bu*I7dZ`ap`#{Z-2 zO~9ilw)f$#o|$BVnJ{5XfCPpek`MwU5cUZK2&-X7Wl4Y_AWML-DC!KW2_YH;EmYJ| zxz}7pjfx~!QHMo{iaIJ+qM}AcXclo)#E2~4d#b7@fqQ??^Z({~=A5qco;r1E>8k4L zu5Lcv!!p=%{xoDBk)pWz*tJw9z7zb?&>Hzrc(q|84Z7aM<=RIm1M=@~sGQqJM@w*Y z!y{wsM#uTaz$8b2D zRWxP?YQzVFBJDFM6I|zY9$m6Lh3@&_ixbE_eZTv8B#>EzEh=~uGhWG25Q_mF%SmaA zs^QBp5$%YvE+2u1;22_LtiOJJMS{^4q0C~Jai@r%SD97Rb|^jjD?SQ{TNr8I{|9lx zU?8(-O@3C%ngZj#WxUf`);3w#IV37CvnUVqub}~oNGVq#V)b!Ed{vd}&r3MILz>`0 z9F%8v=%c#lGU<8MlD7iLpfM53bhhZw8eLQ)Zy-IiL`*G;*A&2EymdBr1zrWPX0;4V zL;%lJs4J`wWJt!Ff_Ny!SyY&!*;At%ZDc@f6c*grWE#neykT@OuA;C|J=AxeS%C;* zy8WH80EblYwTt<}bu8YAG!L)G^i+N%e#nZ7$JVh9jOFup*R$qq5&v>MTZYi+4G1md zb2qS5wuC={Q1^wREMh}z8DgY}Mm@;$;~~Q3`LO|q#)nJ!Pa9YsjEvgI5@X;pKHr_O z{@V2wt?)fOs>O8U_+nnNk+n%jFjPjH5ukcIGGsOG)?Gg`q=1<5=^_%#P5njk?f$`~ z{M1G^GnyixT{gRm_z@%OEF200*B@G4?>Q=CHr0@9D^Gob3?5YJU7vr`X+%zKca`tU_*zpCWNT@s?w;D+EwSDaNFb@=x<1Dz?~y*?dzWYwf9LF&0X+f2#o* z{Ri~UxzIR6mRHobJP!friY_1azmY-d&jOKzV?}oTQ^c4Esqq9_#|>SZ4Y?kZ&ASw# zXI+FDJL}R4xjENZofWr2pU#SJ?u6H9JA)SShl*I+8*~~fohOyf^@aSCA{N8$6(&&&g{{*h`kEDk3L4SKhK zG}g=-D&QbJ!jHl1Gw9;fF=ikGnMD`}aruKU-WMdJebu1jYX30`;Hq#E7gm&bu_H5N zNQ_2QaI(8wZ5y zw_?4w#1m`0b|;VRgw4-0N79rpuErQC6fjVuU0gRNQ$R}Y+mRp-y9NV7P>HoTu zKX36>Ts$ERT_bbbzhYZ@L>cx5jCc^WHi7BAX`=-jf3J)JQP_8LXG zeA{%^U7s%xRk9vp)FfFPy*+}ML-<8KrNS$Td2zi$TXL?`RjVN{Rt?G6K~tH`Vp+n_`B z9tD8n+rz|J-RNe$`G@$K65Q7Q{UB_YObQy>EI5lNpRs*oI*HPn!xE4h<5VsX^w39) zeG>Uj#xd|QHgb#>y<;(lB8|tPVJ>M+KXVB-Z}6_ezw3EN&5jp7$Xa<$nFeQ5Qgg{r zADL97>BI;^MibInB0VHhZFD04+4raM z#D~xmzl;hr{zc>|B9DpswB0+n?m6Ck92=dGHT4{Cd8RtwiqnP;#i4kP_eCh-Io@N> z;5puJ;0K=LO{aK&h+|u7J$s!=ejIYL=Ruv#t220&4u!$l(%=R%SRxGuGZ66~(%>;1 zn-3aSk^BK=5cceK_MQycvq*cXWN(19SBiKZV-f{Q;ydJ0%HJ7VsHlnuJR;S@pia*l zM#@yDs8pkn$|xLX9nlyDU4**UL&PTwLdf54>1htEJ`F8=E4>uf@HA34H1-8W(~T@F zZ{eXLnra$oh=1)xJp`x*QB9F|2zS1t#ER2$h?O*5>O&^(5suoPg!wu*9;laCqD-v4 zOzhxvp4){rnNvd6=P2vG+lBSJr1kS;s-&rntVc=f*w$Ik`VeKEvfuj#B)T4AbMr5| zuo7LngU?G~iTaco{E-CKDQoU+Nckn?`KAS2^qS7;XRe_!%Mn8^<%lD2s2=rVtHMAANDn4pP2`rkb#i~#5ZXAS| z#Z4y<1VihIoWTQ$EJ=?Y#IGf?m;?(fpxeWoWyLM$nq+vdBR&pE^R94J;CGVT`DZ%YpOr``bnb|v|DPNG3dyzXm0^pt{n=Vz3gUIH|u z?GL1gG*3)MNwkAc=A8qYhOTiM-aB|sS2ke6Ljz!`B#rhkgx)0ffJmgL`4+F$!W4YA zi1+xY_thDvQMu|>br*1mrYoif#%&xgUXGv8NgCesHVivdHO1U$*#5r_uc|YAe?7yi zZ{s=1xFBwD2j85`5_`3#1ms(2s&O7w8&6G=^<8YU3W%n+>JHpEYV|0MK9l&lWR@1a z@Wi$2^dV);-f3HLw@JKvH@3yn?YnE--;MQdkk^+g_e6OoCMCq-rB(-2hWXz!UM zEgtZ8Z&8m!D^)!jl@t+Qgb+;wpR2~kI;a@WOd232QX}ZSFZEu|obK zu)I-Nkh7zV-r|Xo4oN`dIrcJAp|b^Fz)=3|nn3B=-ssJvQ(4nNZJ|n;6*J=N2+&so zQ4=R`#c3kG)_bKFJTGqgQJP$mUoSF@TiXMT$G^J9^HNz?eO)iUJ(ac5XHVc2shC)~ zdx>*RPn^JiNyQVgZ<439q(&#!)4h018cS&X1eJ)m#@Q%}taxKNxhQk8H%**v5zmYl z-cIh#y=kmzL}TfEY%l&)8jIC?^%if`;-99mp@SL_2G6ZyQQe~uI5P?MO7T<6{W!CV zZH35&Ow}T`O3CC7q{@wQLE|Mf7P9j0c>YFjJnuP{U+>L+j~oq~m4Ik2!CUoZ!}N7y z#dDy~_r-IdC8Gcz%jQ@5vR?Xwqj_pS)~#E2TCg3Cr*(%@Z>Jdz;g_7D*`N*x&+QI( z5d^pPb>|QFWA}JEkAdIorEGLc-GJ)Gv2h)BqDFjg50#DLw5C0AC?P{L@j`yq@L zZ$KAq%1-e%ky&~`H`CabWfs6gIKsK@%fean z1dff>1d08Y1vm=rx6CCybHC;76eynVH+Sb2j^v*WVYfF-B2VDn%fn&lkI}qeCYxf< zm&(;*f9^xyM)L17+2HVZhe0K5G*1}Hmgxz@`BOvLa2=nF4n5Gja3~aBAIa|<#{Lst znu);i5&X8{Y_9&sP`-aSYoB-(CXNiPY(`ZiKhH!TWwEA4v_1}9w7#>Q5bqTnAHmz0NYb<_fnONG+BSI{MUhb)mQiGFpK&;|y*1nLXY%$V z*(m*|;e6>x*4n-W8Y7Ay3h-N}<255Mjl>YXb~yifBx~-u;HDBnk9FF(gAzjJe+`k* zR+QWk<70szF%E;9cX{wEl=xhe(MBlIvhX{l8Y0Cbj0<tDCiEU<=V zG^igVd9W6a6!B^;H@{~T8|o}ULDE3b5{c2{7X0aPD8jy4*`~lMQT5l)H8MI4<|X5?EZ<}T`!2loKzKWM2){gmB{utnN(3h%7S+EK z+chs6oins;W4nzFFT!|Z1P1fciR?=Frv3S^;$pJe36i*K#U?KK274}4Blfh%@s&k z{8kntH)$0%N(y2_f~%B+;`JH{WS_mfExoFA$c#Y**w(aDO|odc4-UhaK};BXMZ~oQ zZ&E3F3v1Vy{|@3mPi6}`6(JMmIrs_+1&<2cOXndL(ZmuSoq|Ske~z!Fj5d%hI zrO^)Mj7_b$LSGYWXmCdM@y+^@c!*Ou`iW^y0EO zY`qYkyX}s@Z`B_iux*?Q&x{?syduYR~ck6X^h>MQ&6h09rS+uux?q7S0v~SwOy)>OawvzQ8KTDO_dcUgxtrK5E zIAT~4Lzd{V9-?@u9ME4JG-k+hG4?@jSVRC{OB6o+X+(n?6VrLyRV=yHvF6k(V&?{K z`%w*}AIDJJ^dq!qcoim1oznP|tFTpPdn!M%ip7RKhWML$^2@7Ouh>RCu@-(` znN~0leNP$so&|)a_vBftS?4GhP_yX_OXc^kX0Zzn!6!P~+IJ_PPf=r~ZRsA<5E`N| zRJ#L)-h%R*Uf~ygHuIFR{bsc#l1>ooo;6e zKT7;~cmDG|tYxe5DaiONYB%M{`xAv}Xn7?dF@Z<&7c4cb%FLyYZ&%kZyFgsGG9w5fC?J zW0VzjQ}$AlI4#gJoaU)PoyrK+0*?b0Q*OGu@J$ohwKVI&YdfIWo)qC$$!Mi@%W~$E zBDLh0xFV=OH}BEdT=I=awyBMGLu}$}yYn$6tdob9@j4q9sC3T|`Ig9+Ajsvu=(=f4 zIgX7x5m`-Rf@XTfX&b39#5Cp{l+YZSEJbsOr-X_JtfqKr;@DPD&)z(e$8`6E43^ay z91t@2oHTeS9|k|7925^op@=_;V_TDY2JIw20=aT9tIpmxbSNAgBJCBBz5B?9r+7dB zb9>_v3Y5gprK0933rF<%mFwb+m3&jN`iXszvpX+#8U73dw=h z?{JJ|vjD6Wc@7#&x`O}LvRR)^s0SyS1DzhD6NEdh$(`afA6YJG`sxy7;!WYG?VE=6 z-8g~}IY^1!B@>%Ni5)a7A}w4@4y}<(bUeQcv*mrX5sB?el!?`J5sAG>sT8Lr$;5_I zVq;}u^KVFOy-JKqW7Q4FZS{~b4Hmg>CkH>HTy9F{b021B z;`87nRFXp~qhUy@c)Rk2+n6h&vs8&F<&SJ*E8<_Eaw>5=vDGxXHOh?fUJ~!LoelAf zlqz>TWU6!zspJ8w_pH=JDD;ofYv{|9@- z2Xpryz?PH)(+|FDM=xibrP3>L{QaP5|5JzQf(`a3*GoX%L&E#=?@!ViZY)If(ZwtA zo#FejpQm3XEH`(6uVKS= zew3D6p6NvKuquML`(lv)bPKtJ?F=t>qT(FTvBEx8kv*pp&T*E_AhN|xCz=CQx5362oL-tl!HlB7$OIL%E2xVl2=(MLNYQ7&yefIO_$-?gL2TBauTYRGu_LnTFiU23RV5xnDQFwDLb5Wp_oK#Az|QByHnnKA*Gxar@gN&W#On z3!OM6O&y#0e$JMR-xY?EEJ?dqgn6F@1xeHF?T9s|%asxP&+FoCa;JEtU<8H^i~+B96`5O9sh#JI!Mn>|AH? zZ8{VKWjkpwlMIfL2Fod8o;0|xt6(Zt}aN>3g}b{;_NaXITBLSd?|j{-5;_ z`3#(xHg2{(+=k(cFDt?i+aACXmZNL48dimNm#1yEEek2!`9BmU;Datz)LRt&z4qGg zOw&BAOEzsQTG*js|-#$f`#Qs83}Y$w4o<6i{6tw7Jc61_#DK4S}^K84Pdpf153#u5V8 zD{!y`Z4xXs#uGSKfgL1hmtdihM&Jkq+UwHvpzOUyETKsXJ=a_mLzIa6h%={=Ey0r#bOX#bS`nH?=*3u( z@gF3bPEi?w7@v+9$0hi|deWH`G)~j0hPx=d<5x6l@q!j|^ALd^+$7&X7Vs^xV}u@8CHK6HdRBr}Mg@UyDsZy|f0m%%c$~l| z6}U)(K?znG_Yvq-V73H*mteW!$pI>#+vp`Bh%Sb*WiI5(Y2VJEl zi+YFAh!9Z;23Gn}F5jA!P)iLNm9YNMJXHgSq46zM-HRB{tMLB`e;wi0`1i;EHvCuO zUyA<=#MLb+)Xh&V`InDjrR!_dqgD>61V)?pf*aP~x#{8CNS*>H- zMHRc)G4LXHKF7xE&;G{eJjd?P(;D&p&#{;FpMIlw_v^N3{_8GQHM%EVGhr~>)(}yP z2kiV64D*R>IhZweQgA>sabcC#X$6JQLbpc=f1wTbl5hqb&*OVe9>_cW87*)2?@DB4{%~ zV+Cy?Xq=#}1a%48R?zl>b`-R;pb3H|37RZuil99NO%=2ksONfzbP?z)Xn#Qm3hEYg zu%MZO4ihv>(2;_U7Idtj*@BK2bfTb>1)VDB?Sf7dbcUcgL_Hm5iNG8|=L$Mc&;^1n z6m+qm`GPJJv_R06g02?y9zpLF^nO9Tg02&EgP@xPEfjRKpq?#)Jt%0YpbrbWUC>7b z-681Xg6HSx?9kf1uYl!H9_|Xy4NFErJ!#Lx=+w|1oaDg zK+r>i9u~Ap&<_MXD(J_81_b>~&|`vrA!xOrUkQ3b&~F8;IfM3hy~7V8a8l4yf*OLJ z74*EI7X%Fo`kSB^1-&F_t)Q0$y&~u}LAA4FUl-IWXqcdOK^vUKwD@|5ND+t<)G25q zL7NELOwd?CTL>B_Xe&Wog0>a3y`UWh?JQ`5ph5wA=vjm+Z=v+bP z3A#Ygg@P^?G+)qVf))t6Qqa|c-XrL}g5EEvSI~8WZV+^npoM~ZHVd{z&<6!A74%_2 zw+s5HpgRP8T+p3@J|(D6&}RkRCFnl|Efe$wL3a!KvY_RHz9#4%k6?QRtrYZ4LH7yz zj-Y-)4+wfl(8GdO3HpJcM+N;@(14(y33^P>F9fX?^eaJ62>R_=(f(^h;0HlZ3VKRV zL(sE=o)`3jpg}=@6ZE2>mjta9^s=B=1idDxc21lHf?5R)6V!fAwEqSo5GiPspiV&> z3ED)^W`f2F+CtDcL0bvx611(L?FH>9XlFqa1Wgh&S4dI_2?XkS75 z3p!9xx1fUsrLRL=?=VczEI~&KI$F@N=PF_=*m0}lzHhKvGU0lMMc}18_#PWsF>D`u zDnhq@#!tP+%J|q{*+ibq^stKUhgqau-&w_<{g`#j`w%lZ_79ATjq(480+l$xRj&Ne zwLt_9vvKKxNra|#K)_)^U>O2o2<#_>-qyTO#?Z8r2(&TPY|wS^D7)T_kN$*B=253u z1pno8mdGc6#(vBjX-1+0OcJ!|Ex6*~hfbndX)}8#>1u^FrPP3Sbl5g0TjJLYTI!p5M_sm|g_&e5w z@nwIooxGJ@594uvs9LTlu3`6tSA2AZEz&Eloo4%V-s}QPt$6f0+rjvoXIVkTqqQuW z@vr}4i51D`Sh|fr^%qO!*M4AOd|{Bys#vG%J8k^qAY#4tHb6j(mEQ6VXyk(1X7rIuU7)Wh)?&8Hu zL<*~x%`Yg(TkMJ|SmMfc&0UteC@&fIE8cFd_hfupLp`OUw4wev^Nd}xY!NI_IjvZh zrwv~+fAO8J+*P@EYuU?|6fBv&WT7i>*|H__B$>20clPYO{DRzB3-eraatm^`@yZ|J zyEb--stx!#J8wSxlyZ}1%vyY7a@1<;|3)lcnY(cQ9G9vvnMOT@>?I55&%WC=dH#}x zxdro=EUpKM!!fd=T?I>)xEAIvyOYkV`oA&rmoKLbF3VfGV*WA|V}rcaD5m8wwVa=8 zp|_8wo|sNev`cLo{ub_PskigA(e&u(TddUO(vM-ylI1e2h-%un)z9ggvnd{~L?`Qo zz=?)9F?{U=72Y7gXg=z-Qd;W)7nD!2*T}Q z5Bz+46w_`Tnl=wS2)>herKash2J_#9 z2mZHV5Zv{yrbWWT;C>haFF&AZ7r#YL55gchdI%jHxa+W{?SX^-BbZ5? zf@2?|guq?k?N1{fdgsyL-j6lS53U7Z*FZ)-!#D))2cKs!kCy!()a4oE=nFUk?mw<+ z+rhonXcFMrU!yIYg~1EG_3$U-@qISTtlaCJ&z(kt7+xn9{Us31aHQ;`5@9&tzT=1ZX{y>pj0KcSZ=fQo~FzKMV)O9F;d%<^u=V1ANY7mav znYIVK^cFNkaJPeLoqvVlD13wyJf|UW3WL{x=R27e`5W}2nU)StPjV~-&u)aYJUGxA zGwm2SJ2ZlG7-uc&2RuFKxxNqr_Vyp-ZsW z22Ox`!M9Kt<69+oDfmh7oOY-Nti`8blIh9Dfwu!da9>BJRZ}Fb;I-iHL8yvr;BM6aY8+%|AVKh)AxMz;P#C<9godHl0(WJh zw<10Qn5Jtv;M<9hLP;@QD+MnA&mRjNUDr~^Ars*FT@#dpG zBXq51AxZ>c*J9)tVQmT8L<7k4;UIYaQrM&LGL+OUI_kdwb%z7j3Z_+oYb((RBjMp{ z$ie-0qtSqS*D$TU1N>g5%>j4b$FyCiHzkRk9O_{4_bn^7X* zS_vF-qQo9V$vO3LntMCbc0f@6D5?P5xf6z>5q=770o?s8BH*@C{tGbF6b4>G(SrwG zVcHdN3%Z3!t(i6l9KQzq$2R&zkCbLGCtcj(LL-G~mZSLR!$5n8oK`LTgD_2-VaITW z|J(@8nh>Q~e`}RY%jsXDwn&uh{HrK-3@fypHhsAc9)jv`Ts~Mx& zQ^sm6XRK!Pj@2ygY+P}U(>#{)30jzMqGm0ftc7Jy(ZZYdv=$=+17Z@>u_n~XTh>?Toc3`c>YS!X-y=L(hA)(EhEu|Q7i#1Djsb&w90x#7p zcrB(a=V92}u7#C9qFI8E!fEc&tT~TqwwlK@tM74m{e)(z*$L&RG)wu@TA1ru~o`YrCFU{YvKMH=zXt+dwk;c)3HmJInQXe6pR$KQtLdc+1xZ*oYj~g z$Fz#$Kc}&pbC8|a!gDTYR@X212a({fnw3V3l#3cG$AIC*VB!5!vv_MY=Bw3g0q|h0 zrsw~KbpFyjdj4gNc`s|a^KXr%{H@ut|JF3u73AWIW^-NDnER?`%fG5=rPnlTiq2TR z&UB}R*}N8ahzJ=NH!M(RIU5jM87k|yc znA5>@pTonL-@$A(7@D%9a9%|*TM!&W6U%SNY(5N4G%R6A(w&W%1tXB|#UCS(p3?-0 zG+`_Vp5GKQ{Aom@(I^!2m=5VS73(s!J!t&#o%^wH-IA+g|M_=2DS-qat@Wch< zZJ3tbhK0G?F_w*C$J>rsaymkxGqbt6z-R(vISFteky-s1Z30P*VT+;W?8+=PU11}c z*?h^2l_xWcyBiA+c4O9HPh=t$PNp)3g$&(~zdIfFF<7|zz`;Ju=E>>9EWUos7U&0q z{g~a~pM?e8%;L?2ER$KNV-F5v)&M$o>dXTpndTqGn0qu59|LR*3(LNhg*&rZL`^me zD@TW(GoD4{qXW-J=dGdN*3f7BCd2vLk?8G^gO}gV!rjxEC&E9Sh3C&?TFp%4ESE*Q zXTi`cW=)yHB7*3&eR;^;TxQFk%b0gA)6s#ml!Y+12=YbD?pur!$cJnxvwN4JI+w9< z-*V&_!%WUf#(XQ8o^lVJ(n0jNdwRob@8ZaW zpz4eSoA76*=t+@~ybzMSiZ4KsWRsG_^6%H^NjMv{xo3EbE_$zsOoiC_uf2i5xhBGk zo*1gMph`EE=cY<90FNk|>5-l1jt7E)z-RCU32?sh#8uueP45v2S?LMsS{UEjNl$c~ zglJw!l+j=Brn^t@k%_R^S&3WnwfDhgD+(|qp}6sfAZmMBnoE?WpxNKuQdfjA+?Ax; z8@rTFOXQJ$_UE_o#Mye6nEp1*s}=a0#5DUSTlgKL^e$nvgja6x7m|>HLcGEJ>os~0 z8)P{KZ_yR*tyTq*$*~zY(J>7JUa1l#acp-@jM)wmVhVren&vBtg?Yy@fRze#@b0K4 zTR2(ZeUnkU8x(>;OZ@CTi}@2n;PM72nFSqkd3Z6uD_`#te+Xcqs=PbRm=lWY3Z$ju z3RL{n(x+%y1*sUK%ao`I-#QJRKvG)GAMd93Y96cX%`xr0zPZj`%%dqN-)yCV%Odf! zzqOg)kpgGqA~5PG5R(K69uZ*I#{RR?izlR9v&R(6TG@$MapxrHGeP8ERM`oDUIk*X z6hHf*V&1a5-nH>X1)Ma2Q3B`^Hmv~~<9WWhyFO5_`I&zJ-uSBvG6_tPq?OZ~dCMNK zk{p!4TGI;5i?W|~3kFFAZZyFO3fu{BuL2LEVbaeI@N1ZC-uDk_@`wriX;#Xo1NC6+|gBC;;mlP5YbT52w(iqjq^H}xNeayX1HP0*9VAo2et zPV=;g9U+L$)9{nPre3|uUrf`}B9ax>n~zI`A@nG95^19O|(|kv>TvRnfIC?Ub9W7yyHB;bY(1>x9Ngx zp~76XSNXZ#=z8t7)E6i7>~y_xO#Jl!QRex}_&w=3eY2L~Q4jn&Bj@z9|6U|J=baQ# zzBLfNMEo&`YE*#_h6D7oe^R9C3YFiQd#CDFM-wVxWp^lV(-(aX##62Gs?4dfwgIA2 zC3?whCu>Y=Z6@G8%%D8o5q}7JIm#N{DG;gtZt78!i>E856l{K>AFdgt%JupxF`1;Y zLaOvIRa$PAr|JfPZe4nL>5?Wum1Xs?-p z-Vcck#Loff>nbh#rT;jk>n9$wi{d9smFJNg`q_u8_$L9DrbzH7iD`CzL;UurB6oMG z^1Ye;)GCrYV3bcv5cL^B;M&q;92)_N5kGYu+b$`xF{N|o7L)t~{;zDgR$iire05{y3q za7U&BQ6BWOdraeX9>!tZD;y#9)|z_fw({rZqH~xAuzIWn+o}N`qJR>8WhUD2VH%9O z#2f>dkH@0uS0>Zc?6)eg35GHMN(qMYGUQ>Imx%ymO@yy=^gOD++d_JH zUYLGk<=J`&q7)?x73px511m;Ip8|7n=F!jIZ<{F6uuOn~JpSeay>HA090ygumTR67 zPi&L5dPPwI>@egAw<A69wp-bHU2-z2K8MTAsdH&w>v>T!|KC{szi!uK!0&8DX_^a!4R7rN3d z0ArQkd*#4#2qK>n9WV-J-XC zbdqij+W@uTJ^amqdM{o&hx&F1d~0O9+vMqT1)?e?deJoX^;R*titmrRd+GN|{mo{r zd}5xXnhXQMnSu>HP9Ay@#WHV~jC{Qte-S zYj?e8{2Yk1%~BK^ln2!-$<{K3U8Gkm_4dgcIss9k5@8WW{Oo_1Qs}hE{#u|e&>`@srlriL*uGbuy z05vYb1@clIl5{0;%R1Qukz0v=6$OK$!LTVVNiLFw9n!*E^*~%JB}B%;X@wo8metcy z0Fm=CseV$3qV_=KSE4pn*{JC0^YSO9+H;~&Ia0As>v~#>Ch_;XqM7=K=(eU1yOnrl zD1F`n?InH>Ft5VCFi)Z<%z1(6e=d^MXK!*p+$?&WO6?q}EzplBmG}A933{pxl9cE8 zZ!7e^&Gz6p@VqqenwkD{B7Mh2VA*97`;&6fhCjYiZxo-}5{2-Bl5(&vXB}tIuLHjtgI3;Qz)=}ahNmr6prmLTr z*JS(qV+`0171Qz>Q{~_dDzs^*N?GxkDi!rr9M*W`?$) zD(+CEj5LgUki>>0a^1CInaZUqhR~F`*;OiygS}S}f z!1R}{@#0Z>_n2b{q$tg~rsfi<>1fg#MX5jsUpg39Wsrp8Za~0{yWfoayIjNxKLpT^ zRQ~RSRIVUUrVM>#YQBPNXe_Ka`nzEBWm#&fBfS@*vR9<2!qi`7UY3gnybmg!%caUy zQ)T@PDp#OlD3vp&%G0I_wegt#ZEzC5Dy`7wA^O?3Z4tvw%)J1sUYFo264UH=mdGAt zAHeiI5?mn0n6Qfw~j|atX5#CV*w~SmfZk%?3FPu z)r%>X7|#QoS|Pz$ah)954$VhN)EO`hqI4y4kZVb#xHy%7+<59@(q{UNd=8k_>#$$lgg zBA*gP$sq!g)k@;vw3-_RNp__=mChrOrQm2LQ?L);ENeBX6PoM4W$HUE3cR)cCHX>V z6z-E6-NZaL5)!YHVDdi>MF+`LCGnYgXlyPEilS@M8Re~1;?!aVL}f~pA?NcO>S^Vf zhIo#R{}`!NBphbhELUOHYw(*qH#ecO)1(Zvl#iy#b(Cfk(|Wmlw$^ zuR{Qx@5-1*Oz=)=)?rORRVc6#k6wzYRwhJVztlfw>i0C4NU(@6R-mmh_d>7peyJB4 zPx`4fp?w4%kYKEwCtifesYL2@N=ihZphWUABxVjoHOgw}?0LPAKjG2a#sM>phEAL3 z3q`xT&Z&-KjzJ|~Sqz;vPZaWgBlWhCNtggDEK2wkp9xW^5^XZ`I;FnF@Oz4HiBoucG0%qL(X58bOWFt8WaGr|$kqLgdNw^Rn z*$r133Jf)p&o`-}t*i7*=#?Il4xBcPe6mSQBH}jybiXIT)h76(Y2?=|JuVI!g-Rn- z4986k(KlX%ieITLGL3wAgGy2goK-4IO_g`+t2pTO8ScZ<71Z@TIKd%_Rg!znNNegx zia7?A9Hnx%sj_5~XgqPdK2m?@N8$(Urz}Zd5G;GfTC!u?u>oA4t8CvUfZI zQJE4Y$}7VrsqkNk#>s`v$CLF&F%u#8EBPy?S9fg?eP8@`fGHnJ(|Ec>x^UM9h*FaPK@o;U@!<I%9^Z?uz-%$$h|9}Q8J65%WtKl^jiZp;>dl?wbuS77maQQ`4N0Zt7_V=*T9r>pLBP5uy|& zdQ8T|{W7yw%|)2_)IMleO6@IEt(~bRrkVv%aUN5~O(#Zekh94>0BcN;M`vPw4@sqx zgi5RR23ZS9ebHtW7%-CyH?`Q^A=vQ*Yer zC0uO%*P{seUz-)PHeK)5I7c=tI8a`L;GeF^Cy`s9(xo&`;xVC5_l0{_V*IpVzwH9V)>nJNTr;T z;I}fOX8&+4ziSCr$bbbD_O)sC!?h}1u|h^SrSc6KeS;bO_qB4kxd_m&z(r>Kuh+^+ zZ7MPnJR@VCH)9T8M<;FqJsaUWD>2->p=S?vLu4q?C#HJCb<);(fUD0*{jYBVo*y5JZgx3_9JM^^svo&fb;&4U=umw+0lBGqyfjtl++B8&PswF zL;UQ|qX_7h^Uiu;BRTn}8%Iv1Zx>I7L`J~Bi!zl4JR=!r2_$|c5vyW79UCAr6aG>3 zf8mE9(k`KQo1ph`SR0^syCjXQ;#()7(lQ|mD3M&}i`f8?yH;w=2|4SL9sVJJ`3n5Z zY#IkW^%{7%^%gjP`5OOlB9hERAp5d3_Gn$Bh~EHtxsu~~Fj*oqZ?HqRdi;OG^+|f4 z7;7Y)x+3j_W<2=hom@l(Sgt_%yc4PK;7j`>hkJ0CufQ-lM}Z_Oq)zwvtqz>hQhgc@ z?FyVMCT6znAvFGIJv7w8zJ8y|zMQ&<4%YcUI@pwJ(*Fpt7zigcyOM}0SGS0ot5TsW zt&DVws8&JQ|BGiZ%9Thi>QP5os3hs)84Qw?DoG?Qa&(KBr-JIb@+35}m8c=dibl7H z&LIu+c?@Sr!F(RWP(`Aw&~5vG5;c^!?aOY|pkA_6i6Z6H8qeOl9tLt%kKw_pQZ$8CegvfO1klC=0 zuU3^ulNCoQ`YM;oyu8gRdb(O=y1N{DZttx(j)bNuzASDwIjEznRFQ{C%>|iy<7ViT zs+71t%8h>ZBdcWZL0w$cby@A0W#gt{BqTm1=_^M+x@}&jL|L*Q{0f%=4!UDrsY(BP zN>$oFT7>yt0a~P6 z+4zFz_C+<&ntV`+9^`Ev#G?q#65Xz6HQ+5u^j<8RkJyNq;@Oi(>7I+j89WMtoVY@w zPp82lNSu+p#e;Zk$N3Qvs zHyi5a+T8C`ky`i%;& zRQQJ~Onlp?;X@|Xs4V-GOW75&2z<&lpDIi3-%_6QrYa&8&-JbhdsR4Cj_}rTjcui` zB1s&0Qj~^IY54alOQcD8Q7LLF#T12?suY7}ib^l%H5E^J=2m(>rRRP{;@-Ce_h{~Y zN}!s9|798Wza+U^g=>_aOBF?pY8E-KNWnQ3HxsD?asg6c#kvdHU~{H8o6e+C@aAMEf9#)219zYS`^Voc6{Mr=1MMX>T2I z+WJPE_Dc#Jn|z4Vjxyr3Ka)6Zbt6t2yudwTLly~W2N`kNVkQ)@;7y!183-KD<`bu# zU&P&R$!TL2g=vc#aoS-f^spB|gw;7jJJN)nvP*mGuz3wR#8ZC+(AF{$p}*wrHp*kw zwrQ^%;k1p3IBk0(PJ8Ew({@JUw8NA*?Jy-y+a8J2Hb>&L>5n*V6vO5<7~Cg;z;X$= z<0LOXry^XG+@($~?{_jx`=ZDYZBrB+9UO7mY9YcuDfy?8(}pgR(;hqGv?b0XBD|>- zFg{S&tIldKF8wH+vr0zrb(P`#dt}(XMRIJZ5PGy#jr40eDm}$%>l(>vLl|+|p++2g zYCYnBc5;${wowqLy>G-zBP6E{o)o6dy2Q0FB&SWd6sFC)#A$ObaoTGqIJQ_2r_H~D zW6K6{+CxV?_#w)l4rq%S@zQL`X@?4hX=f;L+WASGc9;^UEvUq4Z=Aq4OYTxRq`h)N z-!3_A$DuIoOeIb`N{M?tAIk&U8Y6&HG8`yU5tU&-t||!+o>cs2$=#}hrA>PRKP2U} z7nj1cjhQ&@u_KQC(t^{zOA32v+aet-%us;p2X0q9xL?Wxe@aeUT1lUFfD)%2pu}l| zCvn=ED)3&C(|$<`(|$?f)7r}TwD}KVoc}8%Ks!fCfp&rlK3H;1B|Jwtv{>=gimy|A zi{g(ePH*}oJ3bYDLGe9`zau#6ze)){Q~ZSDrxXt=epzuVo-!lDQHsYZ-d1tiWlVUI z3indnt@udAClW{c+6*O_r}#3(?^S%0;-!i|uJ|s+Usk+Q@dJt6@r8=7RNSlhX2rK3ME=Rsr<8y; zXj8aMgxZP>NX45e?((RE1jSPoAE{ia)IQPR0MJc)8+lDt<`uj}@<0{0GI)D}G6E z-0aW}tDMBiI&=?|oc2poTcB;m#A#PCaoRO3W>+0tY9i)S)9rHA&Y>iJUJ7GM%3V+D zcAL9g#%tNMRK-jAKs9&bGdNO4J1_=cG8$7qyAk-vM$bgWSD!C`nSlX;{D+g4{!98_pktm=h|3Pz#qvq{O zT@#KXU^ba-<*S)NQ_sZ3OkHl8($!e5K-|aYK8H3gb}xOoIWHpi30W z2%j>y-6hSHDehO?G#6B1P5n%Bv9HPeOLJ&(?z9wjJyfpF5?6*aO)n^+>M(z%i5xP4 z(oP)US26R|HGxZAE0{5>LXN>9s24xxD1V zf%*kiNt${&4W(X=Q~KobDZ}Raiz`|xm5FDk;Tl6gOQl8@cNZ=$Yk7$4Y_9#EyF0!raoF5flnztrHO3fsxjJaK~;L93AfGPD|M&{sVvO6 zX1SQ{(Rq`eU!`H{neEY((@Sm02Xn=N?9$*6h1C1MhH$UK^T{q1lQ@9k8f8%XUy~W&<}XF9 zm}ZZX3DK*G$T4~~5pjAo5pgp|?n)W{KOBnEoJzq-hT+j7aR3YM@iHdfhaoINBz`w% z*=rh5xL<`;P%~GN^Y_cK$u(KpD<@79D>{)QtpApwej{?!lB$zt<}i|?xLa{^7UEN3 zGo4V5$r6Ne7NQ5<;Uk|y$9S{bex>$*6pZFocsaR)a+xj;U^l4N+ z5;bpa8&nAdcS+A`6gMM0)0tm>MZcTPG75lfZ(#kVl)m!U@I$!Xr-bxP~ z<(psCOZ3WAzW;UH7AtRJYg}>rYkHopSANL%@6k8fsyh0r!}zE-^cH&I@BGd;^ggkH z#-;9=GjE?bVnRVWz1VVg?(zccF1o@i-_YY*RDGhx8|L$M@KsrThC`}PUY}>!=uRgqmZwK@1WeA49?pyu3uZ;Ot|NC`cH7j*i_}$nUGv zo9i`Id`G1|m1%tKn<(jlBdxtEaO2`RU9TFzzu%|h0%nZ0ag?|GKwZiT`1W5cnh)5g zJ6H`LwNFpQyJ|%Qk~hxmK6It#t$HsM%hy+;DdVi+c8S)0$VczfTXO#dtDRrjr_aJW zaA&-&PYc&;I`Dmm^x3-atBN-7p_24KC!TRc&vBG~8Zua&Orkq@>3plz;w`V{&}_;d ztkNe{+*73wWqN6QzW;rFh9ht+6lX^w&wXFNExZRg7yMdAS^U1T{8uIfW=y&Qh z38XVZNK`gzKMGk0cCSP2nZl0mKOsAPdCr}dNM5qY8o~egKp#%QXp6554>7#24}a8V zi;nX8J`5SFO65xrqo;RHur%fFmsw*z$YHZZd8 zD%0Oao9({J+FqFTR@U(7<9N+M%}T4i;=~tvkwrJU@@`+@rLm=7>7(`X&j@e9TTQgY z@P=ROVLHD4M{tGvYkfS^y`M|m=e1%Z{(aU;ynI=|6iG$`KVpmRTW9qLbe}NNoV!b` zohnL-t+z4$&3S#SzM}_^K8J?v{u#|W_z_uZUUBVb{STX7)0ICH)SL6bNNXQH{Gz@< z_gkeT{~{WN{SSS-UUP*%^M{_wvnN}k`D1_Rlh`Q|4ClQr>6ckD@BXKr!9FEX8~!f0 zMsvpwYh#PoE08XH_zr6dUforv(2zg5!ls{6vo&TagaR7<48`(wy{Z5+u* z%9CySf5=Qgs4CHeY0xh_5z-H|BmFFSQvID~X;2^Zb(COfm@NjU%$K2906e`c_v+PO zN)Na6vUKKwmskVd>$r75#oFGMGMmL8TgrW_P&lugu-f?Xzw~H+-vCRrY_2t7eB1!E z#0LjhhU?xRDvl4Z1Z{d@KYo3Pr5XQjh^4V3cqo)!us6xOvXi`PCTh%kf!~&CNpl9z z*J)UMh0Xah!{Eoqe_F$0y_H4?s}A$kT12m3t&_@d>IjgbvX4V5Wl8+$VU`h8%B|3p zKI8j_T2?TFKQ+uUnmf}h(axcox3ca;^>-uv+Z{D^!w}8^h}y}nBJh{Bsl!`pPIlQF zdnn;Hp?;(#4N!mZmxfy=TWc)}rS2mf>3G9Tb@T)6`LkJ;);Y*_nRycmwZ9f7oc>6R!PWur#wogZO&+Y*R-4a1M6 zCCAy=FAS*9sst&2=Q%=yrg%a;;1@h0>1KaX#^){LrTIMEyFoesMp1( zaxC89`!dy5V=N91`5<02+VTsXgl=-Wbd05|9{h=PMu&vuN3A`{T(ywL@F&Mw!uhRb ztRXKPYnj=8hfP&#Xrj=)$HKhDcNWYuN93wMxZ_q!JFD$2lt#+W)^;{;VFP*CL^LwJ z@@HOht7W=wIQaQnElCvaHVOWuWLwr*D>0|w<9@LYRqdjxHUzfd-UZekR9m%}50KLB zHg9#9JQRacBp)>1GEOi1D-;ID-Ni0wzQcO~9#M zeU=nk(r1ZU>b0@F??g*KR><$4Xc?%ZZr_<`>7k=eq0@z5A7N?B2TZaQ@|ww(cu}dM z%B?&&1tzFYMS)(CCIi1&W4Y^+-c%@^4hikl&5D|=j-{AgdBZ7|BsNtZe|*;3)#5F* zP$-38xJZ3*b)7{!Rc|96Kh@Hlz0Z43wfspHnsOT|78NNK)By%1gen z1IwF)k4;O4(lH_UHo02r(JFXZZcm3C_`D&x=}b+L4~+d5ueKMv(54aXSe&#jw=chJSSQ^xD>i6OrmB1(IU^{zKXFruC4T`o>c zc~18Fr5w6ojK!PcozipDGBV@DU03%ny62{MjT5I$Vb<%OlhQG}2OhNVltQYB)uv2K zH7hh1gUiNu?~JGK@u5QDE#q6YjT60}5Uxb=i`f9L>gRUL{sJv-><$R0mHTm%8sPLD zhH3el%Fn(rYt>m`#p}d){PM=tRi764_Q_3$l3yf>acxX1fDc2LDujL3$XaIkx5V04 zg;h_n)-Ti>nLAX9p%`2>UQB5w%(_|Wxt%%`k+&kEPS=d?9gFx(T_aug3v12Nvt2|tkL;IMWt4`UD_k10B=v68{BS*}dZ^)rDER0@9 z%}AMg)>THi3b+X%CP?HMeCPlBFe#?$JPZ0^(4ByN?FZT7gT zSM0Z(3%P$;^>MHQs`wM6cZga2X%Q$}tbj*E3o}vtQMN&+jP5zGC;^!RqGhkGR@HVx zqIFeyqDe}hXw&*BL73JNBG-uIVGqGoU)f~nmXsv?(a;Vi2C}mNehi`<6UFi9B7$#e z!L{$R;II;W6@o{!fVk;I0z|?jI9K#~M3y;Z<(8kBX9%ld$~zrWa=WFcw`$kDo!Bk& z2bi(t@?NjsGrePOcDGhye@0xqI4?s3%v!F6kILjGW*t*387~tCnl;NWE*~eBm#_PA zMph^Kj_NMv>@eh|1hb~OjDEaoRx8y#Nd&0dcwUto2b#}Uno}VTb`sJu^_-z&Ed+B) zf?3JjfFI=&%nDIkDawFXW%E3CQ7>E;X%UoEQ>|Ous6Z*Adn?Fj+b%_Hdjg~R_de;lY*vZu z`Ocf~rilJku3OyDc4-j8K-2*Fmvb=Lwu-{yagol`|iI`QVF0c!E3w|dTr~W@BVgfskflf8l;k!QDRJV8$0aZg zjI1U7L#>)J=R5PIs2>*^^~L7xa>{q+tLCDChD;u6HG62@b|mV1A7XtU$+{!Wmpg@C z6c!H{;?{Haa3OZb#ff3B*He~S#P*$rh*YE6g4!+d*ZW4pv`(E;I%AGbLdTuD9^*VN zxx|Z0>y1WwBEx@p5a)`uY zcZb{}&BitFcc;CTw(Vk5;$k1vev%ls66HH-B~sh4Qa&`wtXB>f%`otFKz5d8f_&Xm z=8Q7`^JuObQ2NIvifgf^2!4SAltbEE4Q0L2=6f-Hzr<=})tADuf*959}A z*KXz0q zHzgqqJdx4@6$v>Vd5{ksE)*{T8wBa z-#TDbuzqTa0pUNdm`}LZH;s!W+el%AEFBnr?mLzf`J3WJJ>MB#0Q$x$t+lDdlT zdt|DY~=o3WSn>~-Cw_UiPL!C3aVxXCjLXFr;9D15i50gskBddyLz>-Fde)`X#FmAax-PhCMhz~2 zjPR9$bv`rRaIJV%wz`FF-C$6nAjor*vMndL%o?VcohXwxSZiEAZ;;g{nG;>R zUz2xhna|39)-u~y7>IlZZWFg&ibFxq>vHaXSH+HfUx%Q3R0Li{eV|~Y&WR77F6sQu zvh;N|*P^AVK`T+2jB+K4pI?X0)bTT@j7F^CLOA?76~Zq8%D~t1=gDRV*R?lf$t99**(QgB8ulkw2P0ne*}t`Sv~3)ZBGeS=aElW&UCF#puy* zqrgV0969`xjXq@#&G(3DbQn&Kv$AW1qwxP}wuCk`baH54Ndk zk>cvLyx`Lr=Kl=W>h=X^XPQlos5z9Rf3$pQwplUKlU7Ic>RRwwMQn6i;(WeQP_DdL z8fFLzwxN#ji5pClPZU_M)f)Rfu=>u?pS~AS^H_NlE~#WLEjHG7l%ct1f@@}`ToHpM z#y+gS{}-^5DxM_$iz_Yqb|RIZH^qpd1(*D0AH(%ahBW?-jg;6D*yQkSGLM#CNXmM~ zp=2z1v8nmADfV`e7Z;czIo{Glf@K;>WJi zYnU&TI=2dvQ8HJ$$}$mV&2pkYW<8fG4O-ES%95YqG{h7KHcRB{t;I8~(uOI9c2`*| zh$%2FquMf*rl}_8o3yN7~nL}#0s<`tg7WO9SfNJ2s z<66lbsa92)zXAs@p>wWMBmZR$a83GI4qj&dBP#G;3~_0wq7~TdYP8%u=<*ThIltD=kn?I_gB@_UYowB$rov>7%bXz(9dSJzF@h3NUB~yewcPvxD^~QKZ4b|) zgnY{=Q{LsW-g@(8b2z$T?MtrbpPs0i%u1Ev)kH&zde+l#|3;$Nj!xc$Q7?I;SyGPg zZC!Q^9!hy@NIo~ChS3_%zoh^?FB`6JMiw9l9cPsC-bPWet%gjI2nh zRuto@@zsGH#(FeM(EQc=dxL8A^|xB5bQJ?g!*Eb(xRa=Fx6*B|`n^y2?U}%*fiPkY#D=KvRkNgfUB02`$IUc+2QHDI@J*t=yGryuMeh?0^|r{r zuZ3hfW+t^m?lQzTK121F{yr+Ze#8+RO4K`CQAym`St#%sg%<|w@5>Pdk3*ZHhXZ!V zX`dkjI9+w`pmlX%3<)X9mneo#FpBO;CyKqe^Qfkg2@?#ON2X0cOwTx_GN^FjyLZI| zgT8_L&mz`%v1>w6osz^D+z%?2Op+Tby*tHI!q>65Olc*GAronVf%3!X&=*b1q*-k0 zM1wY#7EV@LY?%rzf_D1LC#v)>a{4M zow9>8M^92|PM?f4Ln=)JF}Q5hD|P>MxxkCiIBvJIu~=4 z#PL*?p?pPsM8lwt0!vCt6ek_>$nT1hSPmkuXp!TmQ}s-g_kS_pFb7UWll{a@kf~_e zt;A%?P|@l}nJ0=xQ;VxfeghV>qCZYmS-(P3y%SZXPqbw7J2=_#Zg4&07SpB~#Wp$W ze%?8a27qsak*YzB&&Itfr%K}5G^a*lDk)UBS2Jw7p*L&X zYRx%{vv4YwpjKx#fy&rJ}1T1!_gtXR6A%I};qLjrmW}K@J zHmkHAgFDjbXgg;;=x9^tb4NQfOLer(bCmGoeh3f$rNBfn0UL2cUpFf~A^aqebecC? zMO!%s(L8HO54DqE-T^DR$}^E-`y8;!xX$LI35jCb9HYpMC$zl%)LBVTflhy&5(JAc z5Vu~@A5|fMLQ1b}v*PpOUU4DRfN$Gk2G3Rc{5TK#_%=|tXlaRYe%&u3#g=)b42gMD zZ1oq@g~SY{=1JNd@+&dE`4HpZKpF%<|FV$B%|js%F(0o(7ttTI*`@Qi&8o(=n)C@N zLHr%^VibmAHSX?Ppqj%G&3%%%!{D|o&u*f= zJt|$$BKqYmEUMoyO4qyBts?CsMvUuI7aAC1XHifXeqcCAGHX?~r!@ z-pH>CEUehIi;EWACgKY#z7XD&0{3|mRmdGK#(hoY=>qYE74=-C-+o0smn_&-v~UCt z>bs&dKD*#SN%gls)K?ZL)u%0?j9;@e^o#brNZ;Px>$dM1?R%AcJvUU!n%=ZI1};(3 zc0-!m^4zk$Cur|)sFppqDWc~Ng%xIP^OB+kv7MCh+$FxiJ;m+80~!ywuNULKt5gRE za;m6b(S`x_Pw;CM(3@zeFHui_qCrJH14wXeO1xON)SzAESt~GZxvW|;I^T*h_b)T# zj@fn?x#9Ek`Qldw!P@>1Ipk$Rek5?tGsLv}G{ASiOdM-p?FxhlB#^+Gli#g5fF*ZFtAO$B;vwNm*sB^j8kbX7F0sCO#)1gF^< z92rpDV*@IK6KSg@^aHVk74^*^4HHEH!l`U`QlgZ~#;Q8vHnll3lVW&h5%qy$iYOPf z9y158F{Cfftl-|f6LS5tDLkNPa1Ql#4h*+c*UP_W|?pbS#a?dAj&oWBZ3kvn~-?6${V{kkn zeeYPAANbZA*mewnL4*|blhHFPu3LInY~B?fYMfhd)DieQ*I2SJkF7X9(3rZxh*x{> zDde9+%e`6HNWgo<5pwlG+}oM)qdaube7xEi@(q({mog!bL!d(0BR0tLhs?jVoliXe zjY<_o!}|9o@(FGx>e)#Ws8}~`P{q2Air>2*VO9tfVIs7_z(L23g195*M~1a)Gw%nL z7)GqVLlFftkDB!ibKW*Xu9#;fmMGY6)Wx=YC)wf=vzlyk%&b%82z6)A5t3Kzvs3=8 z*KSp5?KX~pT(p4b)|Y1S+yCIk(=8za4bvucyGq+s|8v3ss7dXuR4mZEov z`tL%Fi6i%*QRIMoB(|mK=-fTgzK=0rhbl-fN%Z!Pq?n2Z6!r8WAD^OrMFWa@`;ot= zKhfX-MF%RMAwW&p1TGX57`C1`a}UQ*fG|)IrSLV>Bext$R=L^B$bb z1@{_}A}Ut=_KR$K&U~!Nx4Vpb;__~zLC4JWG#nM+_!4{TDP7X(AZFe^9I##7r$z8V zKuYKI%p4q-bQR0w&~s+RH%{)y5Jjgde2&sne7(z{G)4ctXw=?`&=JNpw02u}84ZY+ zwCgFRKs$9F1MTL?i|4Qle-_dr>XN4zxZ8*o3w9gz6)MB#BbMs`j|I)%g69OWmZ@)Ir;P`t$Q_ZaqR$b*BEBl{80Gl|L}plA?O z&qSM0Cy;z@k5LEzT;JmcXP84fh*K2WL0qEH4&v?}5;Iv9r=osEgNlX}^-LkbtT62m zH`KpVaDQUeUW0ShLHxAWz|fW3qkB>=j%GKIeqKbi#EYJ(Nh0|(@4I*We$XA=$2BkGw?G@z(= z5&aG->MtOG3yeRg8qMT`q|!zuW)rFOPWp#>-*L@Bqg7T;4;*6s za0oo!%?MRj&yGMG+Sy4h;4BFUArN8|_57sr2a3v1PV3YL(_Pvp)buAEk}qF0A9HUf zd0}EOliw7}4;h`s!9zwzag229{HfRs@Tu5MT*0j*EVPZNZzoZ|qCrp<`zA#kdKe<) zVZ`nz`q1xzhbaZc8Tdu110%L5C^BX1a;IleUrc@zNi9EYbV?_L9fs~=jf$pNJqIX( zw&Lhvd_Q8hW#ehS2iPCyur9vJ7CuaO2Y$tgX?-!`h@meS9zTLh3-;|G?AV3CGwcK+ z**EN-o^`~q@3x&hPSPBg1Czv|Be-Rfiq(ob%sT@f&v6R$ACHt1?waMJf+3@>`0kiYyJSB4sKimais@aEDGt(iUFDQgctB@Q0u&=uMg@cAqfp8zAFO!k0F6Po6+q zf+=Nnv#Gj}CyhUCEQvv?Y)_F6>XJz1EhlN}Nly~De`7HRPLi05(tX){(lzvyY;gib zo+SEF%phW-R(@6SL!+#=HIwRpoROKE-c5Y-tD(B+-i`dQX$AqJaHg1V?8hlvIh^;{}sJ&N{E zto80H)=R|X`$MrR>bb0bE9$#~-{QA9B|sphrgpkUv$jnFBA@p*Du1qaA16huT3Y3Js0ee@#rn6 z6k=trT+qtwv6b0ZM43JpX$Zcml=*>v{}N`6o9WTPtebcNE zG447vlGJV86D~Qr?byC93<1RNoHBM?Lgw=?KbSJEU&pBRbwAf%Oc_J}_{%Ay-(|;? z;l@Ry%aonJN^s2|Nbq2h1aIF!f~&s$s|0&p{>uahITK70qbWV_A!>|)Lyyou-opwg z>OC^@wprQSeHnFw*(&N96-PjO4!xp1tK1<^&rvGV;zQe(D|%?#Fi?JmN$=IXtA8=H z-57ugqS(+D7)Xiyg}e<{wY;rbUgLh({zBf7UQT(vNuDP}x$-F*2+3x5%t|rqt`$Ed zN)jXcqTAVX%^A7)bCAh_#oZngqHE#D`daK z>`^1`Qz0LdIApEhT6{xI?9XiI<*MtPns4D@VKv!rxS^)zG5zJSySPAo^@g77qw)qI zFFq|PYUWL>6T&x@xJS0CEhDTGmfuuSkMz?~&)(EgU-eMb;4#wq&&z}{xBj$D=u0CP zEj(u2QUXT}&;s}0VqJ!j!0<7-`kq;{(umu|7YVzm6MK%UK=*b>;4KOa94A$ZtRSx3 zF1CUgN!1o|GL61djA<+}`A(=73rYj;FL#W1b*Zp$ktY9p9o?L6ALbCTrwLG@Z=<6T-L4CsRsnak$mFNs@s|6;K*hk8M%FwT&B6zASIcAT~M z{vysq)tye+>FiZ;w&`@Lx(44@%aO;E#6s1>ezo}~-6z>=dMnvgT?aHD29N2)=Q~Y& zf4Xcv(1V8UyqtX2ZZzK`6pPDEw5MBFtnj%0yiuw)CQniXN2^UzAs1X8m)bFnTJbfN z#A$gn0(W|r^^*4@tY_i^z2F&!YG@U|sjjGKP*Kkr^6@I_Q#5c!NB4iNqE}u_GJ`58 zq-a>t8)qagc-4+l8chF2R=2ELZmo}3_4>0^7R8oE!EaneZxV=QRA$~k^WAXp1yo%r zK77J_*V|R(euFqd;|3?=R(I~Od|KYSSW58OKr%wMj044FAoyevDJ%rOz56)Cz;COn z=yQ}gC^Ml?QDxlX?4RX`jZP_Ir&7k2@oO;|NFw}aA@KF~{j)OrNRa<`s=~neQlb;; z8ULVAFAxnX>b*$6LyCsO^xJodXh2cVAL_TF-peZV3ek|FzN_>*tf=QY{r23D^HA-s zef_A$pNpDEb&bC>L|edLkAAC~K`CfEo&3YhJfgp5orlj2_PM@MdMMH{ydx!kJiux1{DeAeaBr6(JG_0ua zp7JM(Yr{nS_lX7-4TI8GIo{dFHFu=@r0{u4BY3)^enppn>i@j8Wqg$NsoNKs92*lb z1BO2$Y=rS|zzCHMRPdMbmW~aXej^waHiL%G47;K|X5gWKE7@;^OL&ZEzbn~m1zZ7F zbac@2Aes+ceit~cnCRG;#6(Bq|2fgokQNagG@@ezR%~=mj=zLADmmZ^86neagprO1 zqJWf0q;7aIP}vL?=LqY*W&z)KCdbjfSx3*y!j4NZ0?%iHVJkNk~Ns2_9E+ zz=}=?x)MT0YRHO-@kSwIt4dlgyJKTglkxxLgxG}S*o1`C7&xv7T+tO}aMe7yf__7W zDu{3@h0h+0L;M)d z{}_iE_hT&Z_jyQ0co};bkEVBvNdX^wOk@W7BT0%dlW~agLdJrh7G23WhVcf*_S2(y zby~@{pCG-)*nW!CqIZKy0sBqTNAR1ldYcr?F@*8;n^RFg)04tDz!*27Rd_T%;}eTI zBmP>9hcf<_@eaaxS>9Vq%X`j^%XnqbJ%vwu;7?mbnR39mRS(%BfpH1O$&5=fPGww* zaSr3sj6ICeJ(WCMi&pZZ8M`O5$7AeK09+Oil*KT{$k!?iPvc;pGU)gv)wFh@VfyMKXnLBN4bbp|Ie${~FB*?@Hg$I;;)c*(U5oEIgLv04ev`0!2g8ZsiB(Icw0!k-qpzd7u#v)eK?AF~c<`i%?YL-eDTIV(cHO z@n?*qzteaW<5Uh0FplBy>x?}}&rNk!qa-IVMhj@eILP=5#vWE^D&tfZxQlTNXTU^* zCWVukzYb$DTFdXqIAJvMPYR4=k01+JVn^T{A7mWM7*m`|AeC|T(u_Ol1X?jpNYl6* z;~CP$1?VRrEz;3kJGp}<6t+94=|3#-^Ede%(7ZuSZe$xWB)vjdoXr~ z=WCCA_6Yr;@n*)+lQq7~IA^BD)$kx0)v<>aYQ;Fr@q5^Kf##pcIF%oj-LA1)#CSBr z9cB>UYWxyLK}sNj1$=2^pAO&1I5<_~@))#;KWDneuQ85(Q{$101H&}_Rbli$Z@%_u z@Te9bSl}SWK1^#=r1Kc3A`ao*jFbPZ@lD2o|7iRI=4VnUHA&;PjFTCEMwt3vxP@jo z#SG$AjX%J&OaqN=I^=W4dlGc`KE^@Dv6!YQLHiB5JjV80bk`Z%Z`UPP!u(4K*pJio zga_e=SfR0uL)~;M{^2nl?yaJ6jmI^%ZJCU(qOon$q;ge_ZQCYOs}V*OP0{gJRm1#G z9w9s^fPchMW{ANpX~I_+Cv$koC$)fN4zI#Emhp>>y_0qP=8U5`!FG(plXQ66lWr|A zfg@xygZ=8>f9(hyK9I3sfukAcumV3Y4lrKIIGSh2jf@i*?{+H>PodeDS~0rFZ1XQ2 z7<<0b8joY_kI{G;V=v>qHhxlvKU`hQ%XwP2nbwSL^D*xKu?O3c5%U?xG}Z!+F%BhY z0cC1vf%f~_uQ0aF&WvT8@RW{!ld=6&?R!t@_-vlWEf%nc{hV{9nwr6W=J`L2!;fl# z2N=hc)3_dTMvc~fTiDCkws&)mv8SQtZ~YAO*CXr}VhVfMufd9EHA9SI5aJ`o2?<)j zBF6S(sikXae)|#CG{&|eotZYSuH#>2?0pd!>5JCSX#uvyoqWcHuW8%iwY7j2wKczO ziDwvN!6kHraR^<@fc$5k*Zd)@Yzb#ECWAdR{)lDlVZWp6dO=69-`8!;IH!pgFvt#n zMdKjj1hf^B_t=X%e!^9aJ&bM3Kerge0+62nzj#SUuuTEI_A)C_O((F9am)rS@MNqG zx1aN@6{oTN%6u~8*ci?KZ^pJsp;3$vJ%{oqjhC=T@;Z(8#cP4Kt)Y^2If2zWya{8$ zxC3L`CK1`yrba1}bOtsuR*%{uz1xga-7Pi43-xpa_5Ljw-e(-c@8b5h!&hhp*45Yi z{wH+&5)CxAZ694{Y}-J3yAkuB)A8pv*4XX6qCLo7F==cYNBXj<#NfA6m3`%mfcL5T{xh5btJ9_>;1dT-ez9l^_w?!Lj;ze5Y? z$v7rUmq5hpnm;s1<7CD`#seAq8E;V7jSq)79pMZ!kU1x66HmUO1?F%S3}kFuOIXfW zwAcLS7~4i6o@k}x+r}c=FivIuUWDBS#(wr#L>^_)X!y&=)mmfQ+FVP*;EzFfBLzn= zw#`h@6C4z7o16OEn;P3@r)D#@%}-qhR`b7YhpOe@bOhTTRe#2|U8=o|ZTnQU+JGMl z-(ZFROBf2+?<4PIY`>fQY+KD=f}ZO|2L9Jp&Ht!^!MX@{69WX;&-cFYmW~jZrz2z% zMtJHwntvAK1jfHJzn2wyAz8=wFz!ki@uT@uY)&%zze@1$THr-yuq|)JzOBP^Fh`Ka zxi)UA`8P6-Zl|&Jj^?*tdT!3xw%9e2v2D34>}C&`@KOoj=7mxyuv6pNjBSfvXKc(* zNtb_D^V?5NH)m{H{`!=$Z2`>qJM%xQ<-42O9=o;21je?Bu!`^L2x5;8|C+IFGHfGb z+jQ79#mM+8qJukA-Khl>=AlbGhDJGaFtYjUkk8pkLB3-HO;?^v2Ba- ztq)jX?&n(>+ol=gKh)ttRb{CE(d-f4qH|dCBh6sjGRt6W+ccZaIHs~z;P3y`{I;#L zb^l@o&S-fbrfO{4KwFTev9bk;^hK+V+QT-EHldTowvoslA8TwIO)Jw`W7~Mz*bI$r zBWk6)Xq-GiD>$C9ZB*^aOdU?fC)NC)*HwGi*4CD1X&fw}1)R#(*tWj*=w}++Rx5ik zwyjs5XKY)sl-)GHZMDtQU1L~p)AN5+5AEUkSr^&Xo*Kti(h79`H%ItYhhP3eW81o0 z#+Mq0ImgEt+t%LR`;QJ6J+-{cjKe2U{?xCZ{;y_;;Wp5Zv0!|darnIEFT>-8Z8k31 zqvPA=<6?WULhCjE6~?wXxm{oD@GLi0GNiyG-)IlpzTDf4Z98+L7~2o4|H#-jmGnDf z+l11iy;*@6EkBcSfbjyx?&<7tg*`?vuGdEkuwQT=!Z-ns*O0<{8QU+vSMJLh;P8(a z=drw%jC(SExS!&8i+{1lKeUHv&3FRi0KNe!!F`Nvi+c}!s}r;h@3mx{*+TPoVI0GF z2xHsI%>sqp9+CW$jHy8J-p~hr zLt*R(@FrI_Vd{ULVY*01GJ_bd@k++wQ5v6OoG?P;vI8jrd``2##*AYbr!x+*ykU%e zj8_9={ujcJ=M3`?o9G#G4`T66W+}@hw=S9 zp8rEJT7j5By2xz%C0{ePjU)cb*f#a^)?m$V8%tKH{_VAkW#SvOw%&VGzK4aTLlluUBcz@D4 zs`j0ZV4F_+gt2XIYzkxBoaBomIRR5A;AZSUq2=9R>?@zhZ1# zU);pFRCS%evtu;BZI!VH;{cC*iy70)T+~LQzh?zG{wIu;^+u#GR@r?azHUA#M(b#8X(-OxBm&FMS4m8yKZ;jU;K3*o* zW~_`-K*4r|A;8Z9{>|aG9i$PAZ8Lf+8N(!n%Fr3cwt1nXd`@qHOV9t)Z4W-varrcZ zZBVB@W81FGJjT%lI)Ph^ZA)COC+PU8EN>`d+aSTEOEIbp+ecNDIb-P0M65 z_A;K#ILKczM;P0d^&Xz2G-xWw|K_3&BlLd?1ptWT?N_9kid1;hp~^1Kz&a*N{9)3bUKx=%Ohfz>Tb4~ zv9gzj61vD(*$f1JY&!TOg|IEIG$ri9{I4v1f#Cz?;St^iTHx1=ZHs|(7~599O8uY} z2+r61T^T1V)OaIf+p1Od8Ja(^Scmr{>_!fJi?qjTX7I4UvNLrA9}9esv29Lk9OLK$ z9sej}F;C;jSvr0)hsQDYFwOvWQxV!`bS5!_ZO?Hh;~czpVW5Ouvsod=^%w_OV1FBP zl^kW9fWP*q_|@jHLagAw=Ft2P1#J69-!g-3p6Cc;+e}aWxmtjS1%A$$jV_9%jAOY9 zPclwmg-iK$eA@_OYd^+cQXqjf9>@%~(ZyYiQ@Kj6GtS`zo|vcO$8wJ9GLGRYYt2~M zLqiFq5{}0G0v<`bxXGieN5rznV8%Y~#|s$;*q-KL7LdyPuK7BCV6pB+)flI8uWHRW z#3SWY#)41B-6a>W0xX~-V=voCTgf=grotXssQJAt@FT{lYzlHF;}Cb_KN!Pkj%ovq z7U}ptEzd3f!yXBo!-2DI*qZ0UjQDn==mZP@83A9=OIcPT=qzjQvU; z>i_8iEilXi|HC+$t6&*p9~bE@#vxXy<`Nx0hDXk~7>D@&Ko7>Lyot5Q=BMV_2bl#?f5lix}td$hn2E;Sn*9=x+GJGK~dR$!h)|#2&Ui zy9^FpJG>@;|9`YnM@VLd z`HWK;mt4i+PwO0HGPdm!ZntrQ4u5{N=C|$5^V;sY{ z>KYx+1|`M+7~6&>k21C`{3Wc_`~fbJ35=7u3Zm9=xSKt)*~2y+xSO$ULa^z29U+HH zWE$f@OYfn`r*G8QV4oM-#?C7ve^~U1PThvPa}*&9IMg0$~iz@AFVQjqoEvGz{o* zVF9pdU@XOdRD~NkJeI?Qgb|QXkypWtqbq292$A(XVcno1TW>q`F3f2EMMN1&j z!O+QpKX>2(4m{3*{SLgwfp@zd9w!|5vIF09;F3QV&p<^7uIa#W4(x93@c4%VcX!|+ z4m`_&H#qPu2X3^zn8I$6Rop{Nb>JfoTq#&gfXH^>tqvTqqd0%FVi@(`ub2mJUOI58 zoy7&zaNq_G+{%GJa^UQu80m{|ih2N#b>Kw~yxD;xe<`kDGY4+xz!QsLN?)uf;z9Vl z16SKsJb|VT+}?r5IPhTy{_O!)>5Iz`JSctf^6ugZCOB}W15a__KOFeB14r+%==bwAW5h%dc-^PG6+i9y(m~bl^b_yxf5=IPiT3er6vj z;3*twUt%1?>4|#EspTRW{&XI4&2^>vx{L_v9a}t`@hBf&~F`hfCGCSSUT`z2VUsFtBYed zp7&6NP?*V|9e9reA93Jc9r%I+Uw7d9#jxy4g;3={aUEWA;Fb>jo&$GrV7CJgciEilIl4Eh4&u)tVJhy4PTFAl*Sm2pk1 zXDgq@&vS4W;lglN;I6{K&Sewp$rmHBjEaJ*09O(2F*rQiD{xg*JONh~4!60;P@XG zC6n>vl5X7mkpN#my6QwK@Puh0xUj<%Y(xW0Wkz_sN8|X;w65L zf*TEoo9|)*94?-Uo{0K6+?Q})!TlHRe{j*dZD)5)?A`fm59G;~WgJtz* zR;5M~a1`8VxG`{J;l{&FfSU+632rjn6gYg%(+&WA^^4i^Sfcgl!*d{ME*!S6@T}6B zM61dp%kXnK+zPmraCpLQRWqyhOKT8oE!;Y|^>C{Z_9On?0QVEz7Pzf&+u#C*Y@KA) zs1CCV;y1W6aA)CuhdU2<0WJ)8Ne)V~20l^&15QP_N^pb~cQMeG? zF}UM!KZ748DMT5#U2wbM9*3(UZzfpH-7n(jOK>m4#lqEts}I)zt|43_xW;g=z%_wu z3b!Aw8C-L?18@i74#6FUI|A1kE(7jUxGr!P;r@Wbe+lG@3=;1D@1q1H{Qovc2>H^h zR>l82O8nnZ0?qUPd6X#U93^68-fLFRf+4S2y-a!Mee3b3GXzY+$N#^)sa5b$Ypb^P za4fw$r(fGj%9Y*^U>?EW#)>Ma-`3g|VdToeA6V52s=sR;vI^>aVD)lED9b%Ey1n&O o!NHF#t4EpQZ_LTnJ79$HNYHBkP{$%Kc`5ILx;v~{Zy|U82h<8b!2kdN delta 100113 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 Ld7cB-_*VZ1??vzK diff --git a/src/network_utilities.cpp b/src/network_utilities.cpp index cfc547a1b7..a6c870f135 100644 --- a/src/network_utilities.cpp +++ b/src/network_utilities.cpp @@ -50,4 +50,86 @@ uint64_t htonll(uint64_t src) { uint64_t ntohll(uint64_t src) { return htonll(src); +} + +std::string lookup_http_error_string(int code) { + switch (code) { + case 400: + return "Bad Request"; + case 401: + return "Unauthorized"; + case 403: + return "Forbidden"; + case 404: + return "Not Found"; + case 405: + return "Method Not Allowed"; + case 406: + return "Not Acceptable"; + case 407: + return "Proxy Authentication Required"; + case 408: + return "Request Timeout"; + case 409: + return "Conflict"; + case 410: + return "Gone"; + case 411: + return "Length Required"; + case 412: + return "Precondition Failed"; + case 413: + return "Request Entity Too Large"; + case 414: + return "Request-URI Too Long"; + case 415: + return "Unsupported Media Type"; + case 416: + return "Requested Range Not Satisfiable"; + case 417: + return "Expectation Failed"; + case 500: + return "Internal Server Error"; + case 501: + return "Not Implimented"; + case 502: + return "Bad Gateway"; + case 503: + return "Service Unavailable"; + case 504: + return "Gateway Timeout"; + case 505: + return "HTTP Version Not Supported"; + default: + return "Unknown"; + } +} + +std::string lookup_ws_close_status_string(uint16_t code) { + switch (code) { + case 1000: + return "Normal closure"; + case 1001: + return "Going away"; + case 1002: + return "Protocol error"; + case 1003: + return "Unacceptable data"; + case 1004: + return "Reserved"; + case 1005: + return "No status received"; + case 1006: + return "Abnormal closure"; + case 1007: + return "Invalid message data"; + case 1008: + return "Policy Violation"; + case 1009: + return "Message too large"; + case 1010: + return "Missing required extensions"; + default: + return "Unknown"; + } } \ No newline at end of file diff --git a/src/network_utilities.hpp b/src/network_utilities.hpp index 85c3a06c38..bd6d0009fe 100644 --- a/src/network_utilities.hpp +++ b/src/network_utilities.hpp @@ -29,6 +29,7 @@ #define NETWORK_UTILITIES_HPP #include +#include // http://www.viva64.com/en/k/0018/ // TODO: impliment stuff from here: @@ -41,4 +42,8 @@ uint64_t htonll(uint64_t src); uint64_t ntohll(uint64_t src); +std::string lookup_http_error_string(int code); +std::string lookup_ws_close_status_string(uint16_t code); + + #endif // NETWORK_UTILITIES_HPP \ No newline at end of file diff --git a/src/websocket_connection_handler.hpp b/src/websocket_connection_handler.hpp index 4ee93aeb97..4ce52ea260 100644 --- a/src/websocket_connection_handler.hpp +++ b/src/websocket_connection_handler.hpp @@ -69,7 +69,7 @@ public: // calls the disconnect method of session // - The connection handler assigned to this client was set to another // handler - virtual void disconnect(session_ptr client,const std::string &reason) = 0; + virtual void disconnect(session_ptr client,uint16_t status,const std::string &reason) = 0; // this will be called when a text message is recieved. Text will be // encoded as UTF-8. diff --git a/src/websocket_frame.cpp b/src/websocket_frame.cpp index fb68f10dae..ae55ea1bfd 100644 --- a/src/websocket_frame.cpp +++ b/src/websocket_frame.cpp @@ -26,6 +26,7 @@ */ #include "websocket_frame.hpp" +#include "websocket_server.hpp" #include #include @@ -160,6 +161,31 @@ size_t frame::get_payload_size() const { return m_payload.size(); } +uint16_t frame::get_close_status() const { + if (get_payload_size() >= 2) { + char val[2]; + + val[0] = m_payload[0]; + val[1] = m_payload[1]; + + uint16_t code = ntohs(*( + reinterpret_cast(&val[0]) + )); + + return code; + } else { + return 1005; // defined in spec as "no status recieved" + } +} + +std::string frame::get_close_msg() const { + if (get_payload_size() > 2) { + return std::string(m_payload.begin()+2,m_payload.end()); + } else { + return std::string(); + } +} + std::vector &frame::get_payload() { return m_payload; } @@ -209,6 +235,28 @@ void frame::set_payload_helper(size_t s) { m_payload.resize(s); } +void frame::set_status(uint16_t status,const std::string message) { + // check for valid statuses + if (status < 1000 || status > 4999) { + throw server_error("Status codes must be in the range 1000-4999"); + } + + if (status == 1005 || status == 1006) { + throw server_error("Status codes 1005 and 1006 are reserved for internal use and cannot be written to a frame."); + } + + m_payload.resize(2+message.size()); + + char val[2]; + + *reinterpret_cast(&val[0]) = htons(status); + + m_payload[0] = val[0]; + m_payload[1] = val[1]; + + std::copy(message.begin(),message.end(),m_payload.begin()+2); +} + void frame::print_frame() const { /*unsigned int len = get_header_len(); diff --git a/src/websocket_frame.hpp b/src/websocket_frame.hpp index b139261bd9..101f266be4 100644 --- a/src/websocket_frame.hpp +++ b/src/websocket_frame.hpp @@ -106,12 +106,17 @@ public: uint8_t get_basic_size() const; size_t get_payload_size() const; + uint16_t get_close_status() const; + std::string get_close_msg() const; + std::vector &get_payload(); void set_payload(const std::vector source); void set_payload(const std::string source); void set_payload_helper(size_t s); + void set_status(uint16_t status,const std::string message = ""); + bool is_control() const; void print_frame() const; diff --git a/src/websocket_session.cpp b/src/websocket_session.cpp index 9f4f47c5b9..9371547ad0 100644 --- a/src/websocket_session.cpp +++ b/src/websocket_session.cpp @@ -72,7 +72,7 @@ void session::start() { void session::set_handler(connection_handler_ptr new_con) { if (m_local_interface) { - m_local_interface->disconnect(shared_from_this(),"Setting new connection handler"); + m_local_interface->disconnect(shared_from_this(),4000,"Setting new connection handler"); } m_local_interface = new_con; m_local_interface->connect(shared_from_this()); @@ -104,59 +104,6 @@ std::string session::get_origin() const { } } -std::string session::lookup_http_error_string(int code) { - switch (code) { - case 400: - return "Bad Request"; - case 401: - return "Unauthorized"; - case 403: - return "Forbidden"; - case 404: - return "Not Found"; - case 405: - return "Method Not Allowed"; - case 406: - return "Not Acceptable"; - case 407: - return "Proxy Authentication Required"; - case 408: - return "Request Timeout"; - case 409: - return "Conflict"; - case 410: - return "Gone"; - case 411: - return "Length Required"; - case 412: - return "Precondition Failed"; - case 413: - return "Request Entity Too Large"; - case 414: - return "Request-URI Too Long"; - case 415: - return "Unsupported Media Type"; - case 416: - return "Requested Range Not Satisfiable"; - case 417: - return "Expectation Failed"; - case 500: - return "Internal Server Error"; - case 501: - return "Not Implimented"; - case 502: - return "Bad Gateway"; - case 503: - return "Service Unavailable"; - case 504: - return "Gateway Timeout"; - case 505: - return "HTTP Version Not Supported"; - default: - return "Unknown"; - } -} - void session::send(const std::string &msg) { m_write_frame.set_fin(true); m_write_frame.set_opcode(frame::TEXT_FRAME); @@ -175,15 +122,15 @@ void session::send(const std::vector &data) { } // send close frame -void session::disconnect(const std::string &reason) { +void session::disconnect(uint16_t status,const std::string &message) { m_write_frame.set_fin(true); m_write_frame.set_opcode(frame::CONNECTION_CLOSE); - m_write_frame.set_payload(reason); + m_write_frame.set_status(status,message); write_frame(); if (m_local_interface) { - m_local_interface->disconnect(shared_from_this(),reason); + m_local_interface->disconnect(shared_from_this(),status,message); } } @@ -611,25 +558,26 @@ void session::process_continuation() { void session::process_close() { if (m_status == OPEN) { - // send response and set to closed - std::string msg(m_read_frame.get_payload().begin(), - m_read_frame.get_payload().end()); + uint16_t status = m_read_frame.get_close_status(); + std::string message = m_read_frame.get_close_msg(); - std::cout << "Got connection close message, acking and closing the connection. Reason was: " << msg << std::endl; + std::stringstream msg; + msg << "[Connection " << this << "] Got connection close message. Close status:" << status << " (" << lookup_ws_close_status_string(status) << "), close message: " << message; + m_server->access_log(msg.str()); m_status = CLOSED; // send acknowledgement m_write_frame.set_fin(true); m_write_frame.set_opcode(frame::CONNECTION_CLOSE); - m_write_frame.set_payload(""); + //m_write_frame.set_status(status); // ack shouldn't have a payload write_frame(); // let our local interface know that the remote client has // disconnected if (m_local_interface) { - m_local_interface->disconnect(shared_from_this(),msg); + m_local_interface->disconnect(shared_from_this(),status,message); } } else if (m_status == CLOSING) { // this is an ack of my close message @@ -639,9 +587,9 @@ void session::process_close() { // let our local interface know that the remote client has // disconnected and the reason (if any) - if (m_local_interface) { + /*if (m_local_interface) { m_local_interface->disconnect(shared_from_this(),""); - } + }*/ } else { // ignore } @@ -721,12 +669,12 @@ void session::handle_error(std::string msg, const boost::system::error_code& error) { std::stringstream e; - e << msg << " (" << error << ")"; - - std::cerr << e.str() << std::endl; + e << "[Connection " << this << "] " << msg << " (" << error << ")"; + m_server->error_log(e.str()); + if (m_local_interface) { - m_local_interface->disconnect(shared_from_this(),e.str()); + m_local_interface->disconnect(shared_from_this(),1006,e.str()); } m_error = true; diff --git a/src/websocket_session.hpp b/src/websocket_session.hpp index c07ceff675..0be3dbeef9 100644 --- a/src/websocket_session.hpp +++ b/src/websocket_session.hpp @@ -126,7 +126,7 @@ public: void ping(const std::string &msg); void pong(const std::string &msg); - void disconnect(const std::string &reason); + void disconnect(uint16_t status,const std::string &reason); private: // handle_read_handshake reads the HTTP headers of the initial websocket // handshake, parses out the request and headers, and does error checking @@ -191,8 +191,6 @@ private: // prints a diagnostic message and disconnects the local interface void handle_error(std::string msg,const boost::system::error_code& error); - - std::string lookup_http_error_string(int code); private: // Immutable state about the current connection from the handshake std::string m_request;