From 4f80af52c60e6e374b3bb840cf9e0c304ecffb5c Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 20 Jul 2019 12:28:13 -0700 Subject: [PATCH] Big fix energy --- BaseStation/Backend/db.sqlite3 | Bin 204800 -> 368640 bytes BaseStation/Backend/podconnect/data_logic.py | 1 + .../Backend/podconnect/stats_helper.py | 14 ++---- BaseStation/Backend/podconnect/tcphelper.py | 7 +++ BaseStation/Backend/podconnect/tcpserver.py | 34 ++------------- .../components/battery/battery.component.ts | 7 ++- BaseStation/tools/bms_readout.py | 41 ++++++++---------- 7 files changed, 39 insertions(+), 65 deletions(-) diff --git a/BaseStation/Backend/db.sqlite3 b/BaseStation/Backend/db.sqlite3 index 91c4d07b33cf716dc82d53912b0f5a0f596c8f64..21d8233c01fab4e205cc1e466de4481a3d0012f5 100644 GIT binary patch literal 368640 zcmeFa37i~9c{bj2-_tsGt)o|~UCZ)X(yFhy)|b|@d|S3<86z1OR=Z<)?bWWdyYj_h zj|_w>K#)Yh5NvP=*Y^eZzHlFgIDwEqhk|GYKbGqW>Qt+JQ! z!=}bRw|4q{`hapb$_9{4NkUrT#3K>7B=6WnT`*RjI$w^v~$8(^PS8aGkY?<>93}brmslrsW0Oa^-%~Y1QY@a0fm4&Vi_DT$u9~K8 zb1jrBPN}l3r`tk#frSz*6fCZVf@9k5ww2u$N((F$tF~3Ba4k5NZI!pJ=(bSouwa#K zei_U{!F9JS@3v4_V4+a8DsGuqhEl0eGTm*=Y}-V)5cE>^$4IgWAOG+&DHhiS{rvJ69c>n5fofXJ=-s2hiHa_SfdPg(?)C zqBWX3?#l8vDtk!)ofTm{l zPfk~-4^MF$y5qV<)7+MVjq`mQs9P-?O>AZk&hu{sWw5R7Nm#hlw}86UvQRrPHaT^o zM`RZ)t8_sEMy~dapn5SQ2WztjCRw*7^{~;L3&jiKF>S;7qwO#fioo~4%#BTWtAsBz z%6&p+$t*h;#$sA8$~19cavCO_D)7XUnZ1QQ=dtm5bf?v8r^fbI$FG~29Opl5yHvId z=4ceAfU;-GZkh6m#X3h+A6{wfLa|)5%m_?uXqpIYKeki0EOToZnBs~?`w70lc1@>T z3IVzeozMkeh>p&(a{5s%rcZ_Sf6+gpPw8*dU#!3Qcl{bu_7nmN0fm4TjUeirIr?1UF zp8tXVQ~fLYcKze}U+J&Z59`l`P<<2v3ITy)5Kssx1QY@a0fm49+4ukXjpEzcJKuw}N@{x@ve@C09h(_qGY==Evr1iJs{CHEkyk&K@SOtoW+v z`t@z656sXMog}f23nuMxIvrgZUB9aB0_MLm7wJ$QA7eJcP+pU26?1HY*&zS_eExG9 z`2R2K9|QmY3VmL$>gVWN^)-4n|5*O}5UP(tKp~(IPzWdl6aoqXg@8gpA)pXY2q*;p zfDl-ok7~x6j`{zZTvXdI*f!^%Yx_H!jcO}b60=V8|6B&&dg&XR|1V49>w5ayn*T3N zMYUdI!Tf(sGODfL*qT@`nEx+NK-k+7vibkYI8LrG&S_Uxf-HG66H%RBgWIpDZ;_j$a2~;^xWX(r9Qf zl&45`@7h97G_)m@W9HgsJ?=@-kQK^#Cffu~L*SWh6WA-Gp-rJ2nQl94>Cw=-P?nje z`IE^CkoD}+nXQd8oS(ACN_ut|h}Jbkp78~uK6X1v z`h^AO4Tf!k{S2FTu4P3@c;?xuHH}lAS$1kQ!!|+Y*!NXTCEmcc!Bn5bfQtLTHcs|7 zPWq@ePWG@05ND7!&a7l8#hAI)40i>)hnQ!vb$)r{yl1p^ei{3*7};%|T*^usWv0C; z@)D*O_3U~l^~OohsCP2YN*X1L-kBUb6Jh2WQ|m0N3lYy+;~cyMP(LD`vBtSHLq0;b z8Yfb$WMO8?n~%dY0PQ;L+44>%8Yewt-pM#CN0_X6XJSjEsSP1!&6~zYmq$}WAhapb$_9Cr||<;x26zK2q**;0tx|zfI>hapb$_9Cha@bpJO&HtbN&sg1|LO>y)5Kssx1QY@a0fm4fh~ z0}26!fI>hapb$_9Cy)5P13{p!ol%|1(y1s1Q&HCy) z5Kssx1QY@a0X6?ubwDAY5Kssx1QY@a0fm42>epsK;C-rgt z+4|M`75c^c4*hJsqC5H)eWSi!U!$+obv>m=^8cOxRsP@dKg<6x|K0pQ=f9HweEu`} zPvt*~A5hapb$_9Cy)5Ksu52!U866v~&`vBZu=b}Y~_=dz>2 zjy5}5bj+IUxRo7;*>MXUGn?6Q6FZ*9jze@zpURFK+3^&1+(5_F$?Q1Djsxtto{q_W zc3j7fee7t^F|n2%*RbPic3efr_(|;8%Z@$lxRQ>s73{d29hb4=QaVPLu%ph7d3Mav zF_LA+3_GUTF-6C4k{uK57-z>=G?EHM=@6kqI1)*vV!%4AKSGFKsQ;$%$BE!qa)p3G zKp~(IPzWdl6aoqXg@8gpA)pXY2q*-e8VHQm=TXpY&sX{Xo*K_fl~N&~5Kssx1QY@a z0fm4hapb$_9Chapb$_9Cy~7zEV(e=+E(YZU?t0fm4!oOwxlQ|hebYZ6~cERDY~_LJx@qE6&msC-pBr{kA0zlgt> zP95zy{|E5(-G2aOkSW3)<9&(VEn7k_xn+KA-&Ael`myQ#Gu5$)1C!I$shRzq-;M3N zc8u=c(Z752oJ)4}4|IwL`cEC0oEYezoSv`kug&)Fyli*>&Z{oDr2q0=7hXELYft~h zJNERCUbXwO3wOfMr8{=+-rPShHal?>0< zZk}frTc>Ah2WJQRZycK)ziw>yRNFL%+ONgQ>HW3pf!f^M*nZe=81RY(BjYnD>hyed z{+5F^_6yCTQ?YmLIB&Fr{eT)6YX-4~8ta>*X=s-!Ay*Msibsj>Y7{c{J#rlwH*{=?IAll!M@6HOe3>KFAU zdS^yM^+S`>6SbS0Kg52mdayQoU~+B_4`HtDZ+#S!v zv-EF4*789AWjli|BPd$sBMgV?<(@?EIBsUoiEhS&y*gGY)W#;Ped5xslD>^jn=&`x zKmMWmO)HbV_0(wS$X401FSz-t<&G8i6&<^JczW`X_;yb6Zs)3<7hZAIj{Xxr9RIEY ze(j0eD60GdOL%C@S0s9`*b=H2I&OUb?9AbVb5-^aRk=#3P^c7Kw{>$3jULex5*g?$ zZ$ppjlmA;N)sp3j-pf!bi(e`qmg1OY*Cxts6{ult#R&@4dA+zyttxW%vPAC9a);_-CqgS$69yLkhbbX zXGc?Z#|z^XyT+b+m+~?W%w0+yU6*gMt?*r!@H&@GOA@`$M&U0FDtyBd0NZET=J>vA zEBtaVl`40au@e>9zW`8QucJSSR6<7vrHb2n0MyjX@d?K+>@!<6rwgGa;`-C2+p0YQ zKO=o_-Cf9$XJ!+SkZd}Ke2&~--f%dTHIT{ zb!+tgld#^pz`KtVj8KM-m>D(-e9`g_XxT$<1GMoyD}u2h{(}OqQBCD=W4f}C?Mxh67k;i*M~ILkqGS$I-WvHCm}-nNg+HvMza)uwoz`IZ1gtA*(YtkP=*Sqe=}o#0Ozxi@ zqnXoO*NN}~yZ$V#b-|Om^Ra^mTQ_bO3Ja!L3t{P$;?k+f8oI8o+1-%h|7B+BN=G4} z5Kssx1QY@a0fm4L9%=qN|EnJbgX4 z74+~GY+bz50jJvToR<7;qR9xddD9<&ZQ!KR8;O{!s>8W=7^1#sc{qf$b zEzyF0Th*Af$Eh||t?qM!FY39L)xkfxy0Z>?S9M=AAgqJlB~P#p&ef*pW@fAA&2G7B za%)$+hIK*>`-B?K2{bAvEJvk!qH=qUAHdulJ%_JH+7nSq!+gG=J_YZZ5{)hs0l_sj zHaAZWk(1NyEEaqO@dBEhtIiz;>q`Y6=-)RpGu8CGgOtuLq{pm6H*E;TYbR&%8w*vP zHchD14vbAswF+q$+y#ZCg3OOydu?|iAR%AD8}SD1EFXItUk{p zzWGI=Rzqq1bO(xkoJP}9eo{@R^R*xB8sPQ9?H75!dIA@f_IqwM(hg_eg_U#x3q4f7 z;AFVKI-&aW+6PYU1*w9ju1<~Z!$9!>p8Zs{RNOb=OgQ`4gXfey%6<48#bC<|-Yo3} zB4nCn8UO;USn&F~a4^y9IH4mI_Q*Lu$T<~T_~y)5Kssx1QY@a0fm4hapb$_9CZC$I zA)pXY2q**;0tx|zfI>hapb$_9Cdd2=uVvnzna!M;$)ha@JE2aKsly`Hf+h?I9a=?I#-*Uo1B^6J~rJ? z-}}Aqr<9;GWaY8ZpwN^_2pg}nZ|HK!z-Jw;T4L$uHFI- zV?&k-j^mpH8$kq>K*st%OojH84`Sa}Cz$VByY{_`P-_-C5(9k)pq2raHspA!a zeP25Sopl>CREDMk6@q;^^;AeVIcZjk);40zqO?wJ-U!XDrLNoZLfH(lc#Ke_K=mPGPcf=DiySKX2Z$Q+i0a&X|a=EZF+w8mS$OTqMw}^8id-W zLdq*@yP{Xnmg+!5)hlPas#nUU>fm~)ZrGZlLbmHs5t~X|`=Ml=o@6CNWuvWjYZJ6J zYO|Qlv;B11S%(V>XD7X~HiiBrUV)qE8yEF8F7is<6#5r=MQ@&G7i}?c(bh_m%HNdu zSI|u~PcrqswNPI_lwfy)EeYpaEt-8BSOfWnEeWsSO%1QW4V~2u9j}~C9j|=s``T5| zS+_Ak#cC>0aoCr^lgPr>c%yzcwk&QUi7kv-Q8)HNX~>CtMe%kvCN-}xO~syuqF0_a zMXyA@;`)_P9NZG8LbYj8v3!-G6;Rn!h_R9#n3+ds?1M?C`WvSj$S;TL)=JDP-$G@t zi0$gj8tPst7pi*&ZByU46zW4xjLN!Dmx|k_IJg9g8@5JSiM@Svn^@v|152G*i+W{k zQ}YViRLnONy;8O*dPVdV*XN)(xFt&EYty2_`6~TcQrQ$?C9BQO&dkm=3)c90at0b3 zw?@2TwRF5vd0Od)mRF{hmRF?4iM|xH)(=IfKrIz2PvhHQ67mgO!>lypV+$WEzBh16 zKxxPcdj)D!^GeiIj5id$GPNmsh4K~G$Dla4B}~O?)1q?uDg)7&mfEnD6>MyR?YO)h z<)QEBDH{*)ln8W&9Isq$T3)%DdSRyL6{}6pE0(X=o1R0t>p6aoqXg@8gpA)pXY2q**;0tx|zz*7c+v)4sN!?tNvwwR?Y zw%Ko0Mr>=uafh8k!LcjaPjDw^^+iTQ3w5mWNTEDjGF`Xi-WY>URR0;>^Dg~2`lI^4 zHNMaZ^-%~Y1QY@a0fm4L|N+p{-iFMy)@ zCy)5Kssx1QY^KKLoa{$d4xR35Sy*`nSV}xH#gJhKr?QxnN!Y-s|7H zWXtjssawOvf>kcLP``i4@G@UL#J6r2hKrVE+7)Jf$+o5W(QwgOsEoqi7&C1t*JZx;qo!|$V1=F<&?@un-ob}b&-E`lMX$`w& z%PcayH)jI13nPWXFmAoXwBNfe9e6W^5f{@(t5~**3&BpYn^{L-r~KbzPq(vlo&~#9 zZd9J(WK*428=&qCJ0-hlmKfMewj`SRyl3f-6pF)@Ld7go?YaBmZSlbSaYt-(xa7D+ z(``JQM_J{0^cX#yl(rrZXLHQ|K`z=23n(9ZIPX0zir;G}@``8E@0G1`#VId8zAX}1 zHec6rQL(Aw_+=xkQyNvA&EdeZc@_#KlhxFGD4%L8T9WqvTakN@rvDbv|DVwB!WzJs zevUq(s6{7dtb`HS+K^4Z+ab6`X~ex0tx|zfI>hapb$_9CdEuZEG4CuDH2~krs<-g(Afl`zsPjj<{_BBEc0m7aZb3FdLZ0Kp~(IPzWdl6aoqXg@8gpA)pXY z2q*-eECOeW^Z(lwyUg$Sx7sZ*0bNW3Th)%ela?pQuN z9?pe675dbZEt|UT_l7|17r(ckQa_{+PzWdl6ar5if$fLmy;oZyZE|{|cJth!smb|T zb?or`4EtU^I5XjG;qC8PUA4N;opxkv{aK0Lty@Dc%FU1Mo2s>`H1dd?*~`Ukq?1O2BCVDIZ%b$;?dZGg5%uF+rpJ1^Vazw@d~F6qB~*M*mk?%LCT z@s2&4`v*qP-M)kNcpm7VoSv`kugx|UA>2N?Q!KpD4!Ck>ZT_a2*&D=HUp9YTZB{J4 zeAiV1;n4Q_6_UVv8#gZi-aEJcPj}ZZPxM+==*}xUf%jC}koC^=3!(QEo*?$Lsruo$ zDu9~c!hdjPZj!b#uiiK|#Z^EJo1dMTnySrK=W7QJa&@rh_)LI!V!S#vIekO*#+j-4 zvHhqpoN6#Nvww0NHTov}&fMXH2d8ccR3AS)J6oHcuTInsV83pz#YUlgMbYimrfTE! zvyHFiQd9?0bM z{_6P5VKT|JaqZaTRCR9b+FHQx9ITDq5Ln`aW8=-|R-K%lo9F)20YwP~@|+|0OG zICkLRbu))&=foPbwYf>aHa#wQP*mKB8GeOerJS3&j%(eoCsUILCg&Mqhxx@gFm`j5 zS(+H(6b&5N5)*yM?o;bl6B%s%a(IZ`K@DOe%z~2)tPC2 zy=_y$JB@p*V-sTs=O=H(J9lOtJ;?YNzbkI41-7N8mZ&+RKRf0Vxa`Q; z_`UOvEW>d}y@umC^)im7dIm@L**G{`+x-8}SN{KiM12$j3ITy)5Kssx1QY@a z0fm4hapb$_9Cy)5Kssx1QvfEn$-^_g^cW3U_+}_+sZguw8*>7e)lD#u~ zYj$sTB)dBE>&!PZAAuqDQ3xmm6aoqXg@8gpA)pXY2q*-e1Ok00M@Lgh+q5cM%+eOy z?6)c-c4@>e4x5f+nx($M=xCB7FANtdg_2w78{k}TkGQ4bav7V07y8z7u4i%=AJgvZ z=Ui{m@7pD-SgQ1`<6IAUVYqCSise#YU-$L61-CF)~HtK>49i=v&E^+xBqDvCFu>6<% zddQ2eU9s%GWgNLP;ueS9O3^L3eM>p^AxHTN71OTtE#Y4e_j0RHD!Y9;|9W%Su9T5m zzAw+e9&*$k*Xql0<)~j)xm32DzAV>1>X%h4JEd}8hJU>~T(TVazxSm%a(e{$mf;?c z`%7``+arW8lIOd{z9jd0$gN7zLH$T@54nxscTC_H=3Z|*s2`5yn$b`+l}x75Go75dSJQus=>JdX zcj>q5WBNJzpdQWtF#qZN+w(8YPv$SmZ^~zLKhJ$3_nzEqa))xea!zhV_L1z@vLDR8 zK6?vR08Y=Y&HQ)f0T@yrg@8gpA)pXY2q**;0tx|zfI{GZ3IPtg*S17(GGFYk5Dap} zZ3_egB5`AVU_D3Nwmi_!7yGLN>$=4Y76(M)#@c|v5w|T3tmTTED+6md;)qJtP zF0hItZd(>Oi7)n71$sr|#-czESKM3^SjiRBl$9+BtPqJCD+0?o;e@WuXWfG!lX#eh6l+*}LD@x}g9K$b7|R{}B|aoa*bnk#Ou1EfUa#xg*XBW_y- zNbtq}B0!uk_SXPn9C6zcK$I``R{$bhadQD69Eqe-6#pOAAEEwfFY^DhKmMmWD`i(9 zpb$_9Cy)5Kssx1QY@af!{9zSJYSH2QR<4E&hLxivR!pJ_Ge@3ITy)5Kssx1QY@a0fm4-Xl7I9hv}ogt8yqi3ITy)5cmT?;KlontWNZnN}-pJ&yVe! zsvVq}7@wJ*u8q%E56sL@&P-2?&5vQcZE9wGa{d&9kJwT9a7rAyP2*0iNH9g*f(b$sS90G{QdF~%O) z%;9;ibYI}L`vR{W54?6f@Y;ic*B%sKJ9OcZHSykOmqOa)^hE9ExkFQvsFP!d=V#dW zD!1-dE$-=4vxD08zn_L%UvZ>A(R<}ks9s^^oVb2$djCvyt~NJ^22!ovd~kBMR%PvL ztT0}*i$!OlitRPg3wNHozNS6J(xuJ%J>$eowY&DgRKEl_herce8zIO9`d!uSEXLolqbo!BX@!rdZ zMD<`{>8jSk?^f;^T8cgS`tBoZ6TN4i89H)$XQ%0Pp0x=oUt0xQaDLN5P(*4^u=kuF zrv}3M?%D*m;U1m{)EK(#h!O7{KT`ycsGJL0O0xt6z-GYJfNXpHK)m;AOTzTn#5i5L zz^Hd__{iz?sYI`3gha zpb$_9Cy)5Kssx1QY@a0fm4hapb$_9Cy)5Kss_{ShGl|E=1Mn*LM$n0{9NC;8Xr&&d4< zyZnu0AIiQeTh9C-^U6#y{k`1A z?Q*#&S=K>0s}}Y&b#132X>~x(D(xg}Sw-2WwO+z%VWfclUyHUS-Dma7S;dAiZUy@q zOCqpN&T0u(?V>H)3i{-%qHQ_YL0A@7L(VGNmW`d2W$VCNIjd+}cCk>B?FrY&Sw-8j zoq{Wi>uNcxXj@hVn_o-TfmL!=(YCCDS&}X5Npe=vwk*qbWb13MlvNjP%e1h!wnzwrwqwv+BYs zwxV_<%eqv~sx#~qi?%B}%2*;{)!V+!v8BtZ%UQ)fUPZIwx{?Uw<*XKmE3V_%vQ~3a zR%wqpyXX{U>p)h{Dt67Y-IDY>HX~=%#2)VzN7`yy!m76sp5+#0TWm_sDs7PGn3n9* zN=jL!o$*T8q+YgdB_ymiw!|Z|vb{@O&Z;$Bwo1j4Y*}M+R?T7bSY=bTzD6aiHumi+ z7Amf69f(L+WgGTkUQm|qv%+##G0LdeR#Eb8xFWP7#ircJ96pV|l1ZBX4{NW~^mpmI z^N;18d3ZSJpfmuG*S{mbmm%ztLynzdqV(+b8FE&!-sBW9Y?XXpUnOT1>rJ%WB-^L#ma~fW zCdVq-lC6LDm2y_mw(L^blC7`1q^x2u)dEHVW!ai_g`8EiEvr;1%OY^OoK>_fJgbsy zeZ5T1D%zG=DHUaL-6>}kZObfJrtD1nQaP(=TP9|&vi0>6Ijd+}rde=g$L$x(S;d^V zg6V*49k@u&D(1xHGVDtB0~bnIEsi*q;bPe-N+WQAoYgX{+NLSnw$7KcS{g2vEW09G zU(b`XT7*^8Da%^jA!oHPTr6S@N7m}Oa#mefwabp|Sa`dfRcE+ZC|9J{N6(S7igeBe zd}PN1qjFZQ;UbnYOR{Zio19e>R$W(mHgL9-RgB(>E+((CPwOl>t7uzJr6kP~oGE7& zZOd_BSF(3GL(VGNmW|a0**@!ZIjeZXREm{~?1*SY&MMw8Wv61vmbD^h6>peQ8I?;C z*Rq^djNVFaN%|dIlCz4@8*EB*Wkorw7`+w2LCWG@54KAM$OkANbqORz}8WJ*@68VN`^zp5c@L~PNwK9PNeW(G8w|xZhrvO z#G-AR#mlvCMklmyuF;O_+VMpA<~{2dZJHi&x#T)lhw0h=t)sD6EE0{z78G9eCDvVP znpHZM>1f*Hj~@g^N4F&&*R+?19)CQdX)`a-v@1^`gM< zOCC@49Q&{MkB|LV&+);;S;q%^j;~5?I=-ss_?nb?d`-`>$J4($_Bg&}oa1YIj<3j` za(rda(ff0E9=*Tk=r{83I{I~d)9*a`g`T5dUhZap0j zy6Y?FVbPq+HO*p3>p8AzkF3cbPpy6ASQ6ht#=7Hlb}60LdXClSPV%cp?8#OQ`Zai! zRQOfnkl!Xh^3`VL_{OpS*K<4`e(ZRRD#w2w5BD55o>t=Vy(<=7Trz2uol>>4xO?y5^qN5geI%MeXCL_!Y6b&|Gma1R96u>}+Ja{A z=&{F|edNmQM(QKKn0o_N_0DE+7wa6mn!(;Bi+w!Ii=gB# zaqL*jc4LTgFz-LCXjgB@JJH!g;$eaLE;(52;XkbBG#=JE+Si$lBCg4G+|9yQy+oU4 zzi1Zhg7%}%+qogTxDFqbJ80}8=vFh#I{Zi1=*N?5A7veW*yv*&{<3C=pYg$aavi?+ zYo=W(^TERqp)m;i+(lkZ|Bui&XfzNHKfYiz@a1C<(`X=dJl%8bH}RiROz17~>;_&ot*#vi`{dWV;=FoRd8y4ri1wi|uP4d&uzw{Z4A zH&wQ*a;34H`6!k%X?B~!TsQ13XEtZI*KXZ93Vz|lOWdADq+@~1`!&(*z{f*qICSc{5*b?YXn!KTLEMEUdj z>yCb&)~y#V*wON}UopP9;{C_Iff}*$%TzJ`rRQr@G5)#t175`lA3kl-6@%^*RI0_D z?#{g0uNWVHPg}*fW@yn5kA4W2pXdidm)T|8@rLYcqpGIK|x9=cQBvWrJKHWwK^R*5ZRrDN&F zA|qSITDZvQQI6iS%i4_Fw(R0{+upLv=k-5tqZ~a}>5I$$!e^Bl{{OfCZv6kxjQl9_ z>PR{K{qW1fPUzdA7l($muWPplEeGtb%Y^(?Ml8&O5CSaiI#`#9`GHx?H%lg7(~>?I zb(x?an8myvZaC5|iFKK%ADDGuwun|MTUwd0ADG3=xabt5oxJKYaX&CiD-brEd}K>2 z6ZiwOST;pGytD&hT_*CUGJ>24B^OT5vR+Pgnb04YrL_{cG{`#n)Ma9SU>0jq4i;f# zeO~J!3Fjf0MJscjK%i1xlQT=JIz`8oE$wY`R?*087gI6G`t?FNt7v1kSuV(Wy}m%s zDw-H3{{>k;%IC{jMGHe>h_b9t{qy9kQgo#yU)EbCta@u?r~+77HRV*XHA5A)5Wme8AhW1$FkpU;=_qoCB_rwL@xe=_y^;! zjE}{O@l5P{vG>Pb9;?ROSStEJ^#4X*8hv)ujwT}Cj=V4OlE^g?GZG7bGyIeXUZ5G%zpk`?+^pCMKyQVK~?%D(DVVpX)f zB3?h1uew{Tisn=(RSE@P^-8fSML8fCyQ#WMtV#j#E^-3+R<97NQk1)cI0j$!a+~X zDijP|#LAmrfE{90yepCK!)@Nyxnfnk082K)2z;yC#j1F#QToGX0nQPtVi;JgAOOs_ zIx1ErHV2O7Onzwb9SQSGnWW_O?w{@mil_GJ`!8IT3 z8A4SSUW>K7W&utYs}gI0ycEp>jEGh7v>Xbn^Kq?+Rq?don9=HA%VJd;Sd@{*#J5@! ztD?c661Mt*qF5CT22NnD*G56CN@PW$Vm5Ef6{}JhsD%->Usgw~itY{LMYmZAZJ{co zG>|p7*=Jc|Rf@ta*@b3{HN~pv-U?V5YxY@N#i|rchZk3~x(tg|@wCteip{ca5v$^9 zIb}Fu`e1DqtKwUP#j2EB)OK4Vq7_0_7U}~E zy;)tBi&ZHLC^AhqAM7%*Dy8;xks`>yt)*gBiU-2zsaXk^h*gn3VoS{3n^rSoRmxV0L|x6YriH4Mg3^Hl zf3p&%#Hy565`0RtBT9-@Da-;rv2XRX1XQD(xuKW;u!2;m@oBdmtB~?w`np3=L2Vy z8T2#ZH>!UX831q7ck4sQ0{9i=0enGzSAHXM0e%VD0H2q;JhuTE0l%2NCwo)&;_SN2 z|I2(P^Ty0fW_zYL{WHw|kEZvhPfzQq2U8zNy)5;t)K&!ae>M4zr= z+fX(OG%)g&X%r<;#uIcX*JDeW#!&)gJVA#R3tGxFlHw>^74q0O@xE`b8#I;@DB}s* z$P3t33>r-dl<@=+|Jh!VXgnoQ#uKzkATC;ErV*7u8BY+|K5266Lq}sOfij*TEikmz z4H{Jml<@>jy#3msqj8l$8Bfr}AhgXgjjRO9=5VD_#*#p*%rv&*E8}gA(KTD@@NbYt zR|4fSlr1)Q^Ob3QB~Zru3VCtbp`#I&KpAf=Bmyb7Jro*a@s%BSxLhjX4cEFs8f6KT z9VlZ~()I*toF!1Up-f>mEz3005-8(sgyoF(V$fJipp4fM7Aa^@;zLKHExt0Q{$-4# z+bchfw*<;%D7#oyXj!Hamq57$Wy@?wgT`C}<>D}c^^w`4Wtm1@0_6gfUBni*lxf^0 zP{tEkdQ9Az2Bg5m_V64_~5P6 zR_jC~F*tdVUmiRK+Mb|jCWNECyxrp@YLjn=%c?1Z5`AIBdYv_M)fZ zm_V8Q-5g|lZxw?EWCCS8!2;Zj+HNo;RA##CLgChH>SnPnxkrJ$Zk6{Yfv)HDgusDTqrOqBORh{9z_iMHSgecZX5tmx z(w!IU;<@4NPHPKZ$1*3@C1)b^-z~edVqGkCBf}IiPM+OEVqJ3lf#*}}xg8Yik~& zh*in+1u;SB9~xG#7psyx3!X!>tdn9@JTkC8)U7tGUME&1$CFZ}#W?I2tCBYf#_4!q z4Xf9RRq?#Ag4^Pf^bT#48=jela6uAIDoqv1&rTNMH zMfpwnZ0_f|FXY~XodFN!cIBMhitHoVuVp_7e}G%Ed$Xr!*Jl1Z^FZd_%-xxKW*^oC zPR_*AKT3Zl{f_j@($}XiPH#@)OuQv=1bzbNCN?DE@gK+kA^y(z%i}l1FNtr7=VQN&-5+~j?6tAE*zQ;% z)`N9}Z$v*Fy)*i}=(D0{M*AXgPayFdii>aF>ufYR+F&Zm# z|C{2AsXHYO#pO?|Qx%s4>sFNxqo6N^<16jxVO}k$m0ubHz=kwQKoe>ITXC zti~5p*GFz-6MQjscjON?&KDE^N{(Io_+qel%tLF8FQ%@HT&#Z$Z^C7KF;HV0AnfFeff|O?Zt+sS7^tx=2`=G_{k;V)=8M5t zu}uOl;)p#57s~d3AzzFp$kO&-z!#$lvi$q!^TlX_ERp_sd@(vMmJxpkUyP26rM5qp zFGk0O=}oz~oi9em#gfgR!xy9DVp-!y`C@cjEdBd7u9!KRP#*WQ`C_2P60)Dg7Xvk{ zb5u%a^2I=nrAR-6FQ$%*a-E;f7o#$`1{CQxjwvx(j?UIeAd3ZI>@5#}3Mw?eN9q%t2l{HeU?XSQcxGF9vEX9kt09 z12wk8^H#o?oHMBB8s>}1A%pf@-oh7?69#RbyqPOzju*5G@+Q6*sIl#gPveWp!GiWB z9^#Ar4TewUi^-9Kb_(9e7nAb@ZTWi&UrY`Y%XgA$KzS!Ru zcYq^q+uwFQU+iyG+s_yKJI=1-i~X%*`}ks@#`b_U_+oNmpv_#@^2Ox1K)bT8;fsM9 z+g^1wUrY`Pv`^|PzS!UJ^dzpBIU>-`rM-NyzXfRzU+nKCx{@#UHw9h67yG+=F6WE= zZ913n#r}SqOF3fCX@EA)T*4RoJ7DU3vA>mNo-1zdNtxq|$q9fqm(23Tv`|O8L}obR zw(TC%e6hc8V~Q(oZoru2h}(8jOz_42mWXk_*x%bQ#u2w|Qius}*KDqBx4{TsOs)Vn zh{SLtl1inMcWZ}2>ms?6vj3I+X7;1mH)UUteNOU)$!hZK{;2q z%wt$b_(bN-nHOfBlQ}EXmwqh$K>8EuH>Y2iehwlG`cjXj9!Pxxdl9}c^_HWHv|6cx+`MdMC=bxM3mhaDNx$mW(o7$G@Pie{TB|n+G zyJDA-Y?MCz>?k;_i;RXBh7gcr0k~C+kC2Y~!+bgD)H0ITyV{5Naxkda2nvZkKFF7Y z_69{^m9!7=<>aeCV^8hOE}uw`EnxqU3j=@ zf5n#*w~t-lirU-wa-#Ezc+~!qFDC{cOU4!L9=@DNdxR=iw6}8QjHid=wynK|F9$VW zu9T1jeBk;Bnm&zBQRj^y)}_UC*#h;h_^?6dGXzMQyl zEQ1uZ<9s>M-|*BnwPSoa7;nsj3I**bUrr=99C}>swR}17!>}9m|Ihexyq7B=WJ}s> z_;O;eT~t8r)m%9vtg-U#YOmtU!IZ(F3iba_`EsJAF+6s)SMue=L{lyq?G=2vpA<%W zIbZH)chO$Pm-}g2w3qVb#41z1741*>aw3u`afl7(tm}3blXY%T37fcpU93TsanB;i8XS zw6!nu<>g_t9?TrIFY)Ci$gvD*Y4`Kx*!vqEy{@f&kuNV`Z*Vk!NBaU_?hYfFF`VDD z&-3LDm%MOXWKz8v^rbY>Q`zvIh+ANUM(fA{g_z|ThiSzW>7Ai7x2a8i$O_kp3fK4td6qNJdY!8 zOEYsTUrbIGlrQEMz8DLLEb+_Dd@&XfSq7Jz(D%Gk+%5e9NjOi)q8-!`QwyJb?Z;d> zS|E1vfs?NGBfh*mjPV0pYqTHo<)vX8BLGYw9^%MN+WG@;Ukd}62l?^>kOId^z3#)Pf7zclmN_7+XVOh^Rflmz$8o``^^Q!Ou+y99%KUkA8ZqI8WZsUV4Ikqn1KH$=K^vKYX z!2gqT0r_X~`F|IvF`q0x|L>A>0r_F^`G42TYRs=n z!2bg^=1V2u|A89wpAzu@K#loK3HX1oP0UY<&;L6>jrm6L`Tu6-5I+Bpmue$h$X@Q) z0q;}(=Jox;-P0j_B!Gq8LW1pf%)(!#x57cbR)FI&i$+>{Ca|rljYXxqvcn2>5?;E}(21JpR8-e&&q~8$A9WVxY#dYVi1fh`~0oOd10I-_M>Q z;Qz_FfHGzX_KxmXtP|Kwai*)RnBKRFjr1`GlJkB*CFz2Niz)C5_k z3qJpkCfLYs!RPjYXxqvcJ2>5?gCYF7I&;L^sWEm&;{6958mSuv^|5FoWnI#1LKPAYfY!U+g zpPUOQgM@(pC+7mn8X@5S$+>_sMF{wRaxS3k5CZ<6oC_!;gn<7CYAg!`pZ}*O$TC0h z`F}LQMz#k&|Bp1pjSLS0{vW6z0LgL${6BSEl*vKB|C4h8Wp5Dh|3HmpY!LAOewGFS z|L5?Li-Lgv_cJF5_ds3EA5?Lg8`5K$EKuy)&d^?53!%AfXDwgwlrng z3Hba!_7tw5GT9cN|1bDi2>ARzZ7|9*5AgVZ>|lvyD3)!2$Nxi2&IOcVfXDwg_P=CV z1p@eg$|MlL|Fh%)oVwQ7$&lp>2;l!IML+=mPiX-H_@aj)DVs z`2_nNVfozze<yBL3e`avd_cti`}qb${J)=KK*ax( ze*t9`5b^)yUqFcjMEpPb7hwIfB;fxGNMPMV^U%>ynet^G-|Mz41Mf|@X#xLOiF^OqJ?hE*T%wihB`U3tR)0jql zzKH+#L-IxZzaND!;{W}?dlCQd$J&ede?Pol#Q*yd^&q`Qd!_k-I-{J$U1F5>_F z5Ox9okN&?AwJzZQ(f>CB)dl=N?XbdP(?$G0ZIwdd=pz1~{0lH4EQQP z?gbQR{$%-oVn^WK=8E`#Vn-YYJE{u!e_}^41FDGlfATND^S1^3KNer%dx8PGfd9wp zD@z|D*dv<$(i+i2o=5 z0tDLIBK{xv;qJk%3HX2VFTk|K67m1Q53@P=UkLbr@-KjQTv^2blYaqX3(6w?pZp6z zn79J|AKfS9aA6Se|L8uk0FM9y0soKg6XYTG>k;w)_MJ@EK{h{?Htaytn4e{_6U@-+)jb^aed z{aCF)4d(OzXn|1hiZ(p zasm8*8QZr9@c)QPs08r;$N*gq;Qz4~Ng;s$$NRDn!2eU|V*vjThmHXLpHh-m0{DOU z$~gi2zl(KrG5?Pjsc8oA|42O`ivI_V22ZzQIe`C%tFs%x|6`(43gG`s=z9YAe>fLd z0sKFuDhuHM;lWo4;Qw8$;s)^ll%q0$|1ToVPyqjrWQtY*|L?%}NX-9J?txMO|Bp-; zLHs{%yA;6xV_@V4@c$JItOEFd@JUtx|Br1*ivj#UUKXVQ{vWOlg&_VPi9?0_KRGU; zop2Z*cn^TdhED}1WqdL5{~#Bw0RA6ua5sSeN1%H#fd9wKpc26UV?r6g|6{g}fHZE& z!IgmjN3c-<|Bs!$odEtH`?-|F{6G3kTNM9K{68Y43IY5-G9MJg{J)L#q;>%Rk12*3 z!2ct}ryRilJBY#!;Q!%XU0@&A~g1o8h^APM0AL7Wx?_;V2B!Bs*0 zKe8iR0sKEa^eO@TKjP}_0RA5ry8-+^1%wCi|A?wI1Ni@nX%++cf2=&%0sOyh7b^k$ zf5|CW0sOxMPnRJ6A0eAU{+|ZWb|rxSrzBYc{6BW7a{~B(tQJ)Q_Z< z;{V~AB8>kh{=b3{sv!O!Dfyfr{vR_qJBa@;IYl#w|F_|mAHe@(uwx42|B3$x!7q&e zC;lJ#2P#4Qe}xvH1@ZsH|D)xXg7|+M$@7BvfAn~jApRfg`(_aTkHCRK5dV*~(&Zrj zADPLDLHs{@rg9Mfk4<|^LHs`$94CnXhtsAV#Q#&qs386y=A9t^9~)vgf&703^@AV( z-{Ai-P!Hn&5#e46;{V}oUku{^vBppc;{UP9o)yIZBf?q~|Ihe;G*40dKjZ)5>t71u z|B=?J9K`=4KDiXc|APT?g7|-AKrn;&f6TiJLHs}B--Pl1#Q($nwH(C%gN7*u@&CZL z9K`=4zS{}n|0w}U5dV+t+Jzwg9|>fNLHs}Rzc@ksKLQ{tLHxfBemsEx$IJuo4}SbV z^ z4FdRo@;eRU|B<7#7{vdhcejH0f7X2Y@&AnfcM&2T#Q$TiUq)932O0r62$)#|Bn=v z#UTD4{wY=v|BvSv$p2$>SPbI-D=xYZLHs}Q|46Xl2J!za{RTh&pYi{2e+=aREhL}{ z3gG`8peyG8;hj^oZ{`0s z@&Cv+>jd!slt46q|A%8&>FL1#W8Pc|8fL|BH|AYUhoTqjW|BqC&qWFKt|6?`C62$*A{vWZR zW)T06BpIb3{+}gS62$)#|BvutSNnPn{P*)iJ(~U-{oDG-^*3V=z~}0t`hXtEKa~Ib z{9on&B!6B0!u)CZOzvNEpU?eu?$x=2xhryZZh7`UvR}=9Ap7Upo3neeBiS{X-)6pp zynT0NZqJNm&dCgBqUj%|Kb?Mi`lac~^hN1S>1^ufsV}77lX^|+P-<7oNv%jelKfio zgUQz?Z%OV=o}OHr`0vC6$ToO)qMq27*q%5!5yNhQpNYRC{<8S>@r&b|nXqlc;Ahp2roFXA<>H z#;sg2Jd;?@WZc3P`#qC!GgnNWNz^kLH+74>v?tUv88>ppl=cJ@V%Ip#75n_ZG0zoK z{6F#k#vE5n@&CmC8?#(7#s3rkZye%^DgK}Mf8!umO!5D;d}+*Z#T5Tf{J$~H6(b-N z?;6WC4)DZma{=Q2jVZ2};{S>NH*VmHDgK}Mf8%N zH^#VPivK76-*_%p%;Nu1os241O!5E3{~OQYiYfk|_W$?PyD~JhbLz7|HS_r&*X~1WP@u)UAvkq291VRgrYrzE2j8=;{T1S zxMGCS;)xbqV>ed}@)16dm4b04R}9n`|8MN#iYfk|_i|He67F`6Lb|BX?unBxD5|2MXA#T5Tf{J(KFS4{E$#Qz&-am5t>PyD}eCRa@H z|HS_rXYj;mf)HckZk)~)Q~W>i|HcScO!5E3{~Hyqn8p8t|2N89F?C$T{~IN)*ysO^ zB3F#c#Q1-sz!g*cKfT}$mn%jSM1(%7qQeza{6F#khRqXG6GULM;~ExMj3&tVf5YU8 zeg5Cr$`w=mKk@&@Fjq|R|HS_rTexDN#`u3@Ggl1M82@i<;)*H$pZI^{G_Dw^G5+5e z;)*H$pZI^{RGye^Ei|Hdk=nBxD5|2IzJiYfk|_W$?PyD~Jf+uF13m_#!(OAwE12x9~8_T$2ivK76-&o2O zQ~W>i|HcxonBxD5|2K55nBxD5|2OhnF>NkD{J)Xw7JHiu5dUvvxnhd{C;s2aaK#Ao zWc?#PYjw&wiCezVtomJJRFn?didEB=unGzSKRbJ5uAR?Ww_3B>7RqU+kXP9kKD) z_Sj%75`8dwU-X{n9ntaV_UK?V5_vFkU*sO_`!^oh9vO^8!ViY;3*QsIBRn479v;M& zpbv)b3*8gCBQze`9vZ|Aw?0O_d)8}PBZv~lU;$onM!kF5OLFuV80T0OquxF5B{@0_ zbflOT*SjaaB*$~W%L~JediTtiTHE7=FKd z@(VepaaiO=7`IXHp8b*>X+z3b=7#<5=`YC}c|$OYtas0UNlv?xpr+ya?g=o-(Q{xX zSTv1#_Y9ci=sG}RqGzdhPk~8JK}@uWY1F&tz$9luOjyJ;>fMuIl2Z^9En*t=?pZL& zDTs*{F^zinG#GLg#6*jjM!kC;OmYfhqD4%j-aQc}IR!D%BBoLAo(Ut1085feifO^~l2aHk(SSz1dtOX(3Iiq@(5QD$j7d&mz(fNY z_3oK5$tet&Xh5UhJvD}$r5Pt0(5QFMjY&>nz(fNY_3p_r$tet&Xh5UhJv$~jg#i-{ zXw$0YY@K%?G0KPEY7EJgzw_3jBW$tet&Xh5UhJwqlr3j@Z2t5NTsB9olLfQbe) z>fLi>k^?_R0~+=2NiyVUzYQADsCUnjNlszFL<1W2?rAc~DGZosK%?G0PbN8q0TT^q z)Vn9jB&RT7q5+M1_e`1OJ`HHpyQj(|r!Zim0gZb1T$$t)223=dQSY8ClbphUi3T+4 z-LqwqvoK&fQ5YlKV8EQSY8Glic^BGwR(lW|9Lx=0#`JyQj<~ zrz|?;MQ7Bz=gcIhEIQ;xXVkkV%_R4|=!|;zteNDLMTflTjC%L9ndHao;i~oSzwqKol)YQ0LnnM+sb{fZ@Bc+nYk&SV;LmPLn_yXu_TG~|>;hrH;FI%hf!Ic3oyFFK>nnNL@! z|3{7oc+nYk&V(9r%A!MFbVi*sqlTQa=#UqkQRhslA*U=lnnOj3nS#-#Y&Zu)H*N{^d9rB_x>YUj%nnP5XsS#-#Y&Zu){*pO2e9eRL9oioLToU-VU z7oAb(%&{S-EIQ;xXVf{9Y{)^^GA}x#&Y5LHPFZxwi_WNXrrD5VfdH$AH2&huvmpn5 zX#Ui{g?R0k?b1UH#HedrIm@C0FFNBkt{Ct!CpzPWTrnllAtyTH1zfT3gG2NGE!z7v z{hj)*{BQDqnZGpmXzs4u1=)Yg-kIH=`PadR%uU3S+l2|*lhb&l(J@rJDoLQPw($=rCrClXw*55H!*6c}AX4w>$ z2yt1ny>e##{b^;*_Q;v_x3!fuyHd`qzZWi)AXpXzUCu16SP)|*Yc?-smMwJ9cEqw~b8==e zzh}D`%bLx~nWbeFtV>IlmgfIkwdZO2+w_a_zsw)YS91S|3YrUAx@x)%$n<`n`Mo{p1JV+Ur#9+O=!1wZ6619z^+P zmA+KkRywHo32^x{g}*PX%DoMB+3!a0n%JsFC{Z=HcXe!4WI?bQNAIfGsz{hX;a{(JWo%XCR-kTD zyLUxwRit6G@D}zikFAP~4KmStm&H~^atA2wjoziPRgnjRL=LZaNnBL{WdsqCX7A$I zs<7H&58@rXD7GpRQ7~EVnHP>xW#_#Z?`UR6qkp zGVmDHn`5g6KLurIke@VG^|`TClbX`SUNcVhrnssDRtjh@<5$Qzu~n0hLI?V|tKJw} zHMuArKE>lypB-0qKto}k*f`Z^#a2xQibsyZ*cEbSY}F*6z)wGZg=~nen!FS60>(ea z^>I}PloK$W$6xij*s9_6Lo^h11;)h?j$jaEN>Bod4bNt)5BChIyI|6PUYHW;|>r>;Z4t#D%Aw_kYF{+ox zR!vVe4% zBjr2G=ag$;{C}7^OP7mH68-%`A~xVSh4+<=c2-cZBl)@Ej<{{Y^=+tb&jm!=O%{XDfh zbx-QzR5w*Z{{9D(uSsr59+P-E@l4|3#EpsNi2?f;VDG=#zRW(}uHs_4lLShxS0VaO(Wq^}@)MYoJm`dsMT(Lodv1L+ruf6ZCJ>3nTXsRjzA&nz!qP zk%@>@!@e8zZ`BJkFA=AO@S*s(=!KD`SnnW5I=sP~^}=|9pky@quK6atFrFX|%bpu* zzELZT?*P;O+I^RCgI*XJXXthBhHJyWUN4NSy>=Zu=I}DE(+e{x2ekHjD15D6nC?L= zrEt~x+w{Ugx(=GMgqpYNh2i1@^SRYG&s+4u%>83JcBuIpy)fN$BrAo&SL=m?yg;Ow zgu+*8g@b$_#2)${%9VOyI@6GO*Y^%yp%sf3)3Nn?DD?ZxJ)lhmlwW= zeVQ-T3)89Pf>9V=#wB`T)dDFLzF04;`XPnF7wLsnbEHuCLcOr+loSeIpcM|>M{JuE z3ZJhRRy~wL;q&yubOEuUQYgGxBfQVa!|qC<@VRO`-4xy|C)y6bi4`3o{#v4zf^q zonBaVNDPJ7>V=sn#de9I@EW}^lcv}^F%%xs3p0a?jTA%S)p}v3Q?aXJD13%qm<}u~ z(Z0)Ar59$R75goQnorjX2U%Baz8DIhrWa-k77j^$oB2w;F!Qn4mNC@4LNCnZEcR#& zg-_KB(=o<|jiK;zy)e>_g6@r>a8EDH94@wU4275Jg@c4HP&-56rFvmzcQN)H3ZJ4E z#uE%WK8C_4YlQ=c8{0pI!b|kROag=9)b|}cNiWQdFgAt^HJ_*#rgM&du26WfUYNOJ zY#A8}FVYJ$ag6;VL*a#bVLI~IOfnQ+pciIJ87hVJJ(Lsl!ptvYo5@h~@p|DP*$h1= zL*e7J!a?R48&HPA^Yy}bfOl>N;D)E8+j5{QryoJQqTxV7HJ(Z%VPa&`d49wcxLq zlgTeIP`mG3g?wIPYS8&+YIy=MS$0 zc*|hvo3Gn5&D8Sji&?{iJdLWN#_M*SnOdH_n`i=Wx+knP zQ_C~D`@g{dUt^}0r+F0HGJea3%+&JS4`zq)B&;@48(0YFK5l%qXPBv_Edk1o@k&@_ zrj}L*l5CAR>ZhBjrG0{j*Jn<2~V2 zGqtp%PrmEXQr068LCYgU+pp@wSg5^Z*`5=?NT$fc*{_TK&Of7Bl4q8Z? zz7EHmsipM};+pYFIL=Hh?R*&6#>eLQW@_mXz+uVwqti803*P~1Seq`e|C;vyut8Rg z>$1cHY7t|W4cFPQK~@aavPdx;j>c*YvSO$f#f@8V;hP>8h7Gb}s1`+$5d$?|XTt_r zF;I*A{}!riHcj7(VS}s~szniIR8{O4&#ggL4Aqk8fd&eu`{QuY;AMka7Jcr(q&8h( z1v9lIk04}hx{(d%&D4TsLL0*Pk>$+P;w`I@L}NM$Su?eyuE2F`e6<-fwV+5KV(yuq znTFG5YDtH|anyJvqzu&VBhJ9hW;_W=Gqt4Hpd`4l+Ju=}l5vn2WV{k=Gqt4cfK6h& zF$6b?4N+8fQ( zl3G=RV$(^u!AvblSSW;RyuhwEQ%kxQs^=Lmu8Y%j7M+p6xZ?yl~t?nFnzMOCM2RrXePS9Vo)RyJ1_ zRh)`d-do;X-c{aN-dtW(cFI<1Z)taFS7~Qyb7@h@DOtt6#ofhS=tsD@xTxq9t-{{I z?!vCZPS=}XxAy&^v}$5ZS^!XZD%n7`Yr8TImm{mb)$O{BgJl6zpxd--GLDQcaGPqL zJx|6_ObmprZrh$K;z8{_cpzMRj*PR29&2~o$I5t64G+aF?PFvd9xwDJa9w-0jKg&W zI+@qBkCt)xpy=7^*t29Dloh0Ewz~FFGLHGH!~5E_2W1@dhf;}+jy+SrU8Wm=n1h5D z`$!pQy(c6GHSHs09EF=uyVGsjGh`f@OK>MN+VL*+hMkac<&dy#8CRYK+mdnRBCuYOab@dUFUz z{a(hEVQc+P#+8L?{Z_`6scHR2#+A)zy(Htx__JP=ab?9>zm{=jj#qWn`9hhE9929>h?J@4%Sqo3!RkN4MIPC|}2|M;FGEVye$0N@^S;lEUp!Gw|ULxYK z5z%)77Px(qjMIL=3DC7qlyTS(=so7v?ZpD_1+A};#Mo@xi)5VCPLT5J_Cgs4M-w;T zx%L7X$NVEAkNZ18#xegWLxlBryo_W0qG=)Qm*Zp{>lgMH?4$WIj`fRP>vhlW$~f0A z+;VlhBjTi0psy+Hv$l+rg@okey4{j-tX~h^z1wzE#<_lx`r5G@GS2mj-ZCxQWBk8i z-EUPtT)iB*|6i%RuCk!~tMa?c8_SbQPn2#d9SbY^-r};t9}Dj9b*Wj&?lmH!P%+J)62!Mj%-FiHo8iJbt)72mJYBGiN1EPn?vIGA zD`=2|Kwrw;IKfuJ+qp=q&o z!2^Q88p?J01F?0{TY}Fe?(wkLy69O!odn$Dp>cHuUKj+^@jf0BTNgbx>}J&S500yg z-W_xfs$<0>!O#d(?P*hf4|te=n(^J3)eL{wk~?lnkb#q^C!jD1y38e=XL0+#?=*g z<+|u-+Vd;1bz$9u>(|1XD96@?bx#flbd_T3!n#L`m=5l-7+V*;h)A$$_xwU^U0CF@d3*t+1g!}4lizt6`Eh*0b_Z54U$~TvdSsyo2U_ zy<1|dqOTkUtD3!=W2>TD9Z@^4cT;Rt^uXgV-k|+|Nz$?Y|BAJvGT@^Bcy58AlVL(^ zVg~-q3=9mPJ+6PII})M5Ap*_6htCpmMktUR(HIy$Q^XOWK&@c6IWW9I#1Wx@e-_QB zhu4cZ>luJg2>t6soDqsPvZe=y*NQkJ6xd0CuaWQ|Lcv4j!0?cWGeUuOinW2^)glfL zFH6#P28PcNad;?^GJxj7!>dFb9!jw9&^&wibP=bA7wyoX|1=S2gaUQwp?{@_GeUth zDct`G5vPZjMK%Y9PZe=`cv)|2V0gKN2N4RkhaDL1i8wsG9(?S${$(Q02n7r(=wB-0 z^zh>J1O2CnI6b^5%+wkfK3T*WpC|Y1V;`bMbI3pAY5n}zGFdp9*p}_OQ`+K~I zGeUvea|ecx6LCf;7=jxZo-g8f|3P6wbMN7*#JPSwaNGulj}>vQUu+lYLy=$|d&0Yi@)+`#bBBF^=T`N!|i5^*y0P?;Fxj}q}9wt@ci1H*$NPKI6w5%7WG znIg^@1h!YKzavGQaRr8;2ZoOjamETz#S_;*L&PzENZsQ79WLVZ>ErS-zs`7kpP!yt zw*$k7V2y1w0-U~g24n_?r-?ZI=`C~!92g!DaWeF}h`|jEA131Td!wce=I2lmr!N~- z0HOa75vP9|1W&OKz#(W2__v5SJtQ~)1HW0s>Gr@0 z$sO=-5^?%6Kmfx1-zedMg97zU+XMa$B2KSE8=l+&|9TOpD*^c}9rFLL{eOo4@75eN z`S|nvf1Y08-sM!+BfB|L5ri{E)ha|BnI$;0Iy% z*YN*QNdQY59~ce)A0+{h-ryoXLBszK_(6F8b^QN;9|Y@D$N%T)h0XYM{C}Qa@Of?M z`2Re;VDY;;{y*~zKtQjH{C{tL4W}14zrkOU`2WCpdVzV|5c&VWd3phVNX!3cenA(f zcOCzqECc*POUM7`=>)XQNw4>wy^YntA2Ck0(&(jO8u&&|%2L(pF zI<8;l{|A*qaJp=1`2Ru44SI7Uy{2>&D^{wImWB!7+DLVc?PcQ70 zqT~Pb^up#SI{rUTFYJe+o|3_I4o?h7XMCAVi=jnxwPDK7caD07(-X=Q! zziMZqriSnu+N6|2)00e~6C%&(jNAhUobJs!NED|F0T@ z==lGt7l@AkuiAfT`2P*n@k7J^Z>T088vcI+`2}?kRZ4XHf8=;#`{{Od{D0NGL&yJD z4LfxFf7PQy$NyJtIRgIwu0P{K|4)Sl{_8&PJ-*LP9si%+dmKNyI{rVs_b66g)A9eA zUx1ACriTBI_X}l%;osEo|M7kyQVR!-hX0TE3*lD~fOY(T<`)#k zALn1#PF`2X|EKpJ^XKXK|McGD^W4z!|8f51&v$kFe|qm>eYQ0Gf4pC)*NFrG4gVkS z7t3?u{3-MQ@qX2D{6zkvhX2p}0v4gx@&B1$K<|-`|4;8dIuEsU{D0aHXgA)}@&9Q* zpmKgq$N#7O01{Y3$N#7I9_5JI8vZ}p<6-wl07}FE_X7KY`IR#N-wV8-@Ggt||MvXA zd(RWJ$o~gU?_CJcdb)xKlMlT}l{~&r1VgCowizxe_(Tgbi zpV133{~!JV6}^bG|8YW#vi}*qh_e3~y@;~^gYVCPaK1rwL`5&6?0-ftBJBSldJ$#+ zGkOta|1)|KW&bmJ5oP}~dJ$#+GkOta|1)|KW&bmJ5oP}~dJ$p&2hoct`=8N^DEpt$ zizxfQf#^k){m_CKQ+QT9Kh7g6>GJ;- zdk^+Myt7*p4_nngR$r=qz4~bNudBCI&#oR{9jLrqc@FjV-d-85Tu@n3nOVt{e_VdD z{GRfi3!iO{Hr~Yf8=1fyLhxzft^X@qyy4#f`-iiqi_OpyJ-A z3hyYq3Y7y+E({j3`Jd!JpZ~l3>+@IUSLWyDtGQp~p2>YMcTeuR+}d0#cTo1X*>7e) zmVHZhd-j~{g6wqE82n!5)0uZ>UY)rpb4uo@OfLP?^cT{9pS~-7Rr<8_y!52hFH`@L z`iIoLsq0hgQti~#_~;s2WSAiiq?)AD5w(C% zr{$h6!VUa3I0;_uJQ+sJC7`TtmSMO|;j(qTb43`dg&x~xeUl8s;fr+dTKyauX1u{e zdf-M8#+-xg0KVGUG7N7&i%Qqdl3_TDktAF5&Xi&Jdf6tpzCncPsst0h<*k=tFl7Qy z|2i3lqaS8kqq$au(ToFD4ruCYWEeCZe5LD+AsI%L0drRGt{xAAg@q!WEE3x7o*~2F z2;qd;Y^{=EggC&U?z*RoFc~K3%UP?PCc_}ufWF=KR*EpbDHn=C)CswC*kwVLWf}8W8=*!w4~V=4oL#5L@nCJc{9|4+T(W>tVd1&7(yau}={5;QOB?!&oiwtaQ3ZXUj)Wf(*zuYq=z2k2p@QB9Fy(v(m!-`!t?$uUQgS*^aG z9>&L{Jy{F0hi&9VSDSU(iOCj{V2dKg=Br>KQt zIW)Y22qXB8%IA1V^LiMQ+RkZV9KT&RE5Po2C`VWXsaqL6j1yNgEx`5pc)wBb4%GFO z0N3VwT*xS^+D@jEww*{Mllgq1P_wSKUbYI8^DpF|&3`C=U;c*t`g|vUaPIfHZ|6Rd zds}WtZc}bSZd&%`?4Imn*$1;bvYTL=Ps_ZV*^_xJ^I&F2W>aQCW?K5?^q%x%=?Bw0 z(wou?($i8er}m^COFfv{k=m46fGc`AxhMHp^1*GRn z6*$=$@ZP!B$7Gzjm7wo5tdEL#kXwn(sB1kc(jPABI9HyfIQr>{!zwZZ@~UU zbl}4>PIeL4-JbO!83(%ssab8;`Ue?jc0#M+wX6@yc)%_KyVm-EjFVl2vs~ADzl@Vz zgf;G3?-Oz6R^rp%b*=Zxcwn{Q$YlL@8E19^s`k{aM`T>pjkNw=##Jpy>+fV-)pxYs zBje1iB>&EOw~RA8f$VkbZ)F_w7t~g?-X-H?CvXK>e++A6# z(0YfAtNMf1+httU6ts59xT+IqJtX6*_Mi2jjH`Nn*4t!U)#$U{D&j$Q0*wjlEi$fZ z=~)kmICCq5`gqn~%Q&+WSo6-hU&fi8z&du;U&%PL6Ih$hdb5n<2pQCyv+k4e;Pean zpmnc|GdqEG;jDXPJjktt4Qstg##Q|`>n~+o)nv2o7V*(KYu100am-&(JI#8djAQdLS$D`dvlCbc z%=!x%$5}Y2?Pa}I!29ZTS+9|CRfEfVwTv^jl6AGLSIIaJ`mB{@4a>Nye`WbHu4-CY zJI5bWTwFi16IiI~b{SU1r*_CNGb>q8>NXi>Y66QyZ5Lslc{?opbgK-jVotZnuqx1W zvka@EOE<|dvl4K$^lp@4CMDpg-?>4Ck&}Ru^zGL5GK{l6PWrBQoeVQ00RiROwKB|v z1bBAp+bqjo^`99F_`mJ9g*RkhegXmz4eL1>XMO@Qm^#)T8E1Y1=nHM@yE0BkJ?aNF ztnbJ;s|z7GQn$V>fb>e&`lg8EEkpGoBoJEPka6(4QT(XsSzniN zgbHwkYPGGe$vE>9nEq~kRmO1w?!bm?SznQH^1G42+qIsRapor=|I)SoMaF4Cz$4&V z&&W6|2%PW1ulcf!liv-;T+RAt5f7>hApl*oo|bV~5KJHJSYMKH<|m+mgKK?J#+jdh zZ*0?gO2%nH-~`gLz98ewPiVo6wLUN7%um4W*R3aIoE8LrzHa@KjMIW3zrp&Pj0YA( z7r*~m5r;GEsA+vh#+jdh^qPkCX#w9?T_|{dpOSIrC!qaA$J#C9 z$WLH`N5^_x##vn`I3YYHM8^f#ELe6RiKY+J3WDeYX0p>dn;^=mGFT z<+GLhD_2w&R3?{yQ2q$w{pXZxoZV6)g&u2fGy*qnBww29izLR-hW;nApGb{av z^wa6Lr>{#dO&^l_IeG@%le#$7O_h?*B|n&aO>#r>82AUCLEQev#PY;|{R{guxXAx! z{$>xKom-qp*}44Kz;|ErS|(wq-ZW{dGkf?fy|Bt;3x&_r3#+uYP9onTD`DJg$sq(XoZ9C4)fwd;UT@SN|FnOSL=nbqXrpsq3{`cVSb*N zJ{JnF(hKuj#ay~j_;kH6Ui=`jE)+gZFU+qPv+P3Qm3m=@z?pIv3a`)$V^5SV=`VSyj&|BeEFD}7Yg_E!uSjZX?mgXGQBXriOksxg_r7u`GI5tUnqQvUYK7? zX7h!@C+mgz>11kOD7-{3tn&Oq;gj^jfm;qqf1&V+dSQNH@d4_4Qx@xm`ME_tL_O5J zNGlwCdzl*;3NO?Pt3<(2c!6G6WetYHCuoHCeWL5gu?U5a*9-G|O-5iSe4JibB^QRm z^Yy}58$qUFDBRTxV{HU!hoNvsFU)T|a}Yz}wqBSARwg8d!Y#cp{ol+^427F|VZPl= zRSbn2TH(Mm&b-A?*wYKsP0l37P}tQA(`U|#KA~`3FU+@_<$XfonqHW1H*5Wb!t?aP ze7jlrClsEm7se9|ssM$;bM(S|yP1?83LmQ%4&H8@-$UVJ^um0*Su7|No~;!Q>K-Bh z-8aui>xJ=lV{O#?cBEN)VS4S!_zN%ND7~;MFcb<8>V;Lcp-_0HURaeL3Wbl<3uAu{ z>JWv(N9cv=_GeL|PV;K}q)_-E zt#A;MV8NtN_&~j|s-6@IAD|Uxup%g>6bet#3o~-T$W$o2zh0PO3>H}mh4<47tBOmZ z@MOI(9P~l?rBHa1UYOAi)?x~Ut9oIEK3JG36t3un83&=8B@`~}g&7oK$)-@aq!&hn z1jLH|Gg4729E3|)%qi4d&6fJk zN+%V6R=lsc05<;Jg>L@);O#eZ-_5-?H!u5*te>5oc{Z~>GZS|FjcF(K`P8=5p~)wb zS0xWjJf65TG1>l@eSuwq>i_e9Ylat2S)2$O0#@;t%Z&VQ3`ZP?Jf7RwXL9E2QEe9e z2fw#FxS0FjyfgS`vb>1@v_Jouo&4vT;RR-DdBS6RN>jBbn5pGikXtP>!R!xe zsp}XYW%}wXT_3p6uJ;ZJMgB zo2jJ@0Q$f2BdeLIrL_PLwDAI)XQq~R1!$VaZ`oWkwX{Hx&TYKF<`}6BY?T&xMy8MK zSTnV>YEb;acy5m|Q%m~?K^fz@oo%L;mJ+O2<4HK$Of79HR2Vj%gjr^4X??X3p*MYG zN13Umod!yd@yk1Crj`~R{6@x;Fw;yeZ9g=DG@gVb4b<+l5)suj-WZQCQww{t!)ElR zk8FmST3DV4;km|Y4>waw8x@T$jJF!cOf9WhQhrP)VY-=G*uAVHYJ6gxW~LSvvd8lE zrdK;)rk1ue)EaL!hncCR)s17m@#}D?nOfTC%BT^n zq4CSRznNP4J5aj8a1v<$pK9&4sxMY|S6^RUS3SJ)v&u&*ud19@Ik^18@(0S>%S+4q zmG&U^e|>3jsZ{)W@g0c#cZ;dQKNsFoxTN6b|CE0+e@}i>{^;DVbGvhQ<<{qBWPhH0 zH2bRTY1xA_Kg_%zUV^2W{nFn}zZ>!XMd@Pd>#299u1U>LrIXJj-*mv6-?OE2Zaan)%&pkE2IGI3}e2?eXt4G>?-VsAIc^S+(#b|AAcK#N**i37eds>-WHo5~ z#37xkg*@*5A9`+R@WgH25;aEnA+l7q(UJN%t* z;o^R>(p{(q2^UB5ZX5R$4*KTM;B~L|7N{}850TJ|e2%`U`v!jK;Q{vqHE8S)?PK|Z zuvrU#=<7p+*AKhLM~or!7pWh8cl5QP!PSm;oEkIs;_y3U1A{u+_d8$3#Xa+cH$P$! zDZ-2yg%|e~40_Lcx2pyTcSPPW5~usF?%AQi%f9S(BF2zQjIdYVtM@NMgKM5}+Yw{P zF9y@LZ~Z(oGzdK{HAa{Pl8!-`11DZ>C11u3J-XFxszJgHk%|nnweN=hd1&xla5*Bz zke`eR@0;$Y@s7X2^VFE}7l$(i5)@G|I=r|q;o{zf{Uu@$sLbS*^gW_4V$d6q1|2bo z1ZSM(`vyIQK_5Qft3?bV?HT)U-z)J247%%acb*zFe(oA1LwAwkAKugF@nFyL=BhEm zJb)n$W;znDMjz6X_@Qr>+&OBH@I&NH!$s_cgZ^n~@QNe7W7Qbphe)QztJk-wehxqM zQ_DLhVh}0TEXyDM&}T8|UC(>7BLj!}((*S=G2@a$4@EHtx z=xT3P#2{1#0V5Hd($PVm!l3t^=^Yg@h*eflXtrdpTB#D2A!sRsD4aPEC$to`rg1d4h>#;w0DRaGxpKe z=A$Y+ShLK#8C~Ib;NpHg+dEi42*4194ob@d+! zHw+DKJjI)=#*CQ;{7wU28<0-WFJtt{uExdv@Gf_f8Z`dm@Q{#q54TJ>Xz|eCqzApK z8Z-Wf@Ql!Q1HOiE%yIakzd6#Y=m!NQThQ*I?-`o6UDFzDWk z+>#nJ{+95NkfVbmUU+#&4-MYD+%4+H>?_NHayET)cf`=(jaPUDHD>HIU<^*vV7vBz zGY4>SKRCjwojSdjM7w-^q>phte{=G36EchuoKO9P?ZH)!(E;OwNARb$3q9bQ=! z$7BB8=xQk9ho0WzW%Prv8qly1^=HCCX$*Sh0xumg2q#Gp(E3iS*Svy3zki>X(hp)) z6;#*s!U@0TcNp~DcX-K&K{!gHW=P-R;hJAz(7ijogl7 zyE7XzN2OmtZGbz|YrzzFKK0?$&eW-?1C!rNK9WRx!(=h>wZz*KS0>sC8@2iFv(L3> zTQ8be|CZ(YqdVQ0)x$3BB(&qh7rx@#xF4 z)A5&>G36mcE*#Vz8rp7@&Q>-Id3BAbDYyu+KCgHd}* zuCLqlIErKiY%AdhdfTx>gXcfv`lGv^Fn^>Xpu9)l{2ha}o^t)sU2ps#(&^bJH2lhJ zn>{qxyw>$ccRgVcv&$M-xZzFVE8`5f{^+hJ3?jXrE#<;NvxWw971tl#^@KsB0CbSa z6b?FSXz;8zy8h^{Ck$eMAK7Dlk9Tlr@RHj--_~rEm~xax!B?FbZECCBHWLqOSI_k= zHA?s?^6$~-xo;+p92&gp3Ga3_X8em7^xo<88>!pyy|sSexjWP#;fHu+3krIVUfztM z!L46)Z;Kd%s5vVp_1)6pLxTq&>TOqJ#$O!1f*>)Vx_s%P`fdqt?L|AhYt(NL%sJ zT395Z zUY_Y*qXvzihdMSQ)Sv7#9Jk`7UHLojYBgs3JkVl7;%TdI4dIowp1sDqDq;}!p$6JL z_dQv@v%`PuUa1BNSBHIwUE2Dd65iQmr@B`}jKOk1Vo~4sY%AW`fueW08YA2hDMGMH z!Z&Fv-`RJ((Y;I!5-yGeAb9fno-E$k%kOh9jTnPXsEf(#yCJ-?GjDJ&i5L@XLU8_# zzUEtDDO~w&?_xD({0)(p!!Tao?;M63+OyQXNDUf)LqVxhum2>l_0XZgt8a2Ij2Oc` z2$gpG9_t}6E-rB|h!_LD3_O30@NBd7VECbK^Uhaegd1YPAb79(CVMJw=;JHB^CAX; z>e7Ihy6>^lTpG6B&1#S^3-};`AJac|2jc8{k9%&!7_wAATnj(4TMxi-=m$a1k%3S`|EpI67kXrny6E(Dei}$&fC=2U4R84$xVXe(1%A-P6<{;fKgAKxx@FDA!dr=y!CLlxBLhf_nGg~{%=@!Th$L$FRdO{`Eupe zl}`C*S5hKnDMYM9JQ5Ux$ePckn}h=C9|UJ8$tm z--Ove#)Q0KAmi|c)2Q3%`I}iNrK>!S0Bm5q9S zFSaiFlvo9+=P!$`i=HM{OzQbdW9y>r$LdNw|CHFe=$K+9rk;OtY+X$AU~IeRFNv!w zaAdKwY=eJ|)Vj3gsWB2@4Y+cMQM3i_S*Y{_gqp*t+-~qA#}R*JA4m0wgFm(DUcT))jn*kQdnV z=f>3)_%d0myywq}t&86wc0KO-$Hvx0*C%VB)BfLT{no1fw)!>r0NzyHQa!DDELZ^F zsQhE)-paPhs>D{H*mM$!vSaOOl7r#^dSn>Yi z4aGG@w>YWruZ1rb{;qIG;o`!Q!i<8I-;@7D{sDLm*5w=d{m}96>D(i^J9C%jPRSja zOJw(=r@&jYw`4b=W3k<9kqzOcAcwq z5_HRgTH-oa>LlodMHyAsxk4vFk1LMZb?0(XVxM~zUUS#EOeet-FWpY7;asYdV9p#G zzqFi7bP{xv;xN{5F4jrVDT?~UZRaAL1YMwTqt~1ZbrN)VqUn3bxj-iY?jG2PEpUc+NRG3A!7> zz4e@pItls~**eNOTPHzJB0Obn=PaEB{f3CkHJmeb5-gblZ+qR@pp#%qO|#Q%I_q^3 zOrU|))o|A7B$zIPY?+p`RwEH4$JD@-cGl=5mm-=1f>fG@bDBm-=YEj z!Q2Tn4D2}bbrQ^!XrR}L)742ZEds5eT24nN!5j$mV{AEXjYN>}z@CdvODDnX21Jz` zPE#krR0iyqb*G_|VBP|Pigm}+Nia!){kR-gClRD1U=2BSodgpQu=97Fnofe*2B?AB zbmr+Km|6gaciWk(lVBbJwr$s$qmh6I1U!(zk~?CVo^yysB4D)B ziRv6IO6=pW!|?N*sX7U=)sbJ)bPm!;1l084ZV%K+kcW;p%5x6TNCd3&Mja=%DH;jP zDYB7ZbvgU%B*-Vn!*`wiG!i6_vu9?0YOz)5#HNO4V@68VQoo={aznl12ijVx(}u z&FvI*5||%!t-v{;ppjrBNG7)+he{`b?+wEA;Ckf5yGPGOHdVw4&9z^71!?2fomaqe z9JH)!oUEvG-w5nm=CmkiI)7B}$BRHN*m{x1FR$f~^UW*^2!o zAxiA)FX*9nSH{i+DF8wIKlg%F-BbNU^?~Y5r~uHY?pOIm<>|^Jl{+h!R!*rLS+UD| z${#P^U%npp|GaXk^wZMkO7AS~ES*!DUplDx>*6!T_ZDAYytH_7aYo^l!gmTEExfsK zZDCbmPN9(hF&G1H&+o{ejh=!B;D;vuCT3t_1}0`;Vg@E=U}6R)X5c@31{_~D@%9l1 zLD=s&zHH+`gnYmjdMG=-Y~(?NG{3;K_GK#%B4qEuzlR?Z%{(L|jU*Hzb0(dL6lkYI=SAFf3-`Y1wL6}s)=jzp`EB4kUUjXR!^X!cQr zBq;Q##{&@UK8i4=jCcUn3k*M!YyZ9BM-ft%U>V|$L`#n%WFmF2d>vmj^(ex?F33uF zjH0ba5yop_gyM2VV~-*X!y-qe?)aj$2N77*aDt(7hwixhem?D4-{K& zxXx`l39>m5VQe|ubrMY3!cOQqx9TLwyg)z7rgMu<0&5>B3b@jnbrNJr1YX3ObQ0t~ zz;t$<8+8&~_{~PW=G>r@;JRm{Fz0%mM6m36x7TST0!{%K9WCctodg#>^UocT_H`EUz3>DV2X-e!Bd= z^4;aF@B(<{DWwM&MF;OI;{Ao;-2E;#a%_ecz*Gu;*rI4;YWpkLe{|R z3YQm7EgV}Y=l?bT&-wS~{}R;#hQI|lAoo)4>$yjBf1SG}cXsah+(7o_>~q=O*|%qh zQ9EEsc4jt{`ElmS%zH9-X0FJr$jr%9(*KtJa{2@5H>IyluSqw-2>4Cv8>x?`9!TAq z+L$^aH7)r{a&Pie$#*1QmAo){a&j=4P5dPB`NZEPUXSVmD-&}QRdf=3#{Qsv5AqS# z+AaGa?eQafffkwoCT3t_1}0`;Vg@E=U}6UTcV|FuG_RNq3uRc*8WzZ~;xwEf!-~*w zybLQg!*MdKs0{OESn(LTGOS1p9T6U7FtlY@(HB}WthftJ8CJxFh72p#f+xd@vf#?F z;w#i;SdkTKGOU;i^JG}j6y}OB?7tC?!W~!-|wJ zON2)m2}g-AZft~(Fet-{i!f7!M~MhW%CKS~93jG^6oeV$;eP(X;W9i*J`mwi=D~Ck z#(j^_4yMVl;v5W!@F?NnFd0^CgF{7llxlE@0Qd0>4whj>GMFmDqYQ(CWLVJ)4iw>0 zZovT}j9D8Y7EF<0#VXieghwd_`^m846HFH1J~F{18CFb!svah7pd!MfoPn|kj}it- zGOXAFMG+pQ3KV2m@dWY$+(#0~>0vSgvLZZ62gt~<;sT@vxQ_?`gLmtM9D7x_VLdlgFI4`%a#!UlbOM-HnN_gexv*%_PW~XOf$vl^NJo8ZI_RP7Ng_-H;SJKa=A5TA&zCC?zdSQBc>Xp=UsmD_f zrEX81n_8Hf4%`2^%_`hWarY9GVEgFKT4hvi`PG$X#jH@7(^{|Yq2$l6t z8CT&c>m4#46uV?u&9}?A3QSqMWL!n1tcOH=G$ds`DB~&~WxY+tRWQnWtBk8il=T)F zS79jY0U1{@DC@6fTm_)4`(<23pRB)s}dG5hv>&8CT&Z z>rFDQVolax%D4(NS$E60iZWUMO~zG-$$F!VtN4=j1{qhuCF?F3SCJ*_^&*b*)JRy# zx>LqgOv!qkjH`f>b%%f>_JZ{bQgpLn{e_IHP?Ggp8CP*6>oqd2f=Je@Wn4v&tXIjn z3Lja+GOl7rmM`NfaAfTqe*$56N`;MX7va&E(GD3_0i)YwSVfDr%diR+-73Q>PIQY5 zt02+MGOQv*H_5OH58WukDmHY346DG<^&&hP6}nD_RY>Ss8CLP2Z8EHqBDc!0%81+| z!zvx}8X3mx9^^t^EyI|#AQAE^8OE#yS&&!CFlH@CfxJS1`|=+zmtmFsc$o~V%*RV* zSfxE)BEu@@@nRWP36B@au*!D4P=-~i;{`IT@*K|>VSItXF-MZ)c`~dr95;(FUf@=T z>5b>gu*z-RB*QAP@f;aeS&bWISfwpu*ziIAj2?rgEYqVGOThK z*NO0G0^?d4R@sYdWLTvx4#}{}TU;%}DrxZy8CDsKt7KTEE1oXHDp&C|8CHpkD`i+^ zDXtLUz7)k%Wmx4WE|+1IoY<3Lm6^CqhE-bPQW;h`iKoag+!H}U;>j|svJscauu4Td zNrqJ(;)xFFD->U*lID}SgwTv=Iusr*oRS?QOh2TCUue^$J&xS;Uk z!rg^#{`>jY=Nq~2=3bkdm;FZ8&(6*~i_U&C(@$gg#NWgWOw7Q<3{1>`*$k{1-el0t zb;Q+!(h26Rn9ng&OAiqWw;4C!-Dsv3jwN&w@{GG@pKYcV{wR=NJI1Y;&oWaBH(@ZVBUkz0CH0?sX!AvckW=N$sR=eIvZQyGI71yv`@S5RuW@_Q$00q%p?OHRn zFz&l(A#U6~dySb|I0e|E-dOFBnOZm#kgr)Y?oq$mOf8%cZIl@>UI}NIsioJ_L$M&! zb-T(;Eu2Lt6kj*K+SAR{!pGEXqZW(l)t+Ximaf$rYMGm=U1_A29$8d%s2QtWVWt+Y zFt?4G1g2Mes+n5)f03SIyb_k1sioT(#oLYFvYwe*dYiE^8t-7s%+%6Jjqii;)h;zt zOW$?_MF316*(qjf=~_f`f$`OzY^IhjNf&Fu^lF!wsii9uwattt;Upuq^xL=4NZVNL ziDqiyIz=fR^Zj#Es6ui2)||3_s23`Sikng5Tf0H|+^`jRsL9~A-6tpG*2Wd1*@0WenN zHe~)kDgmH77&?s0{C`vdK=%Ul9FzI~3mMhEpd zCH_BPW^ABzdROBA0}e7aP`*v#{{v>m2HJvmB>q2OW^ADUVn^WryMURofl7#7f&WjK z85?Zk;fTutCYpyn%5GiY|6??mQ6AFuU02}$6K2K+JD&>te|IEf0~O{vU4j1(ILO%O zq6nS9|0m3h4ODn+2>gG*%-BGK_*O&U{{zO2!5@Wb75M*z;au}-$m-{|}fM8)#wJl=%N$-Z$Kp%~oCF|L@D# z=wN@4`2T>Jv4K9|p2Yv}aJ8VkGKv>S{C~jA*l3`*rNsa5aJ971;<4jO{QnMT4SnfR zsZZkn17^ks_Qkfu|L<_tn&?gJc@qC0Fun#gIIcX2|KDPXi59%wo;%9_U!OkrzZm~N z&beb^?8FRA%)rD9{D;hdz>nUSzX7ITQ^Wrcij2`euHpX&6~=IgYH9fYL3uG8n_Uh6 zf26h;N||f;|12!V76u&+|DRRGzzua>4gWugDI=s@)A0XC>WQI@zJ~wLgBp5YyPk&s zA5;=UNU^5j{|9BnV5zk={Qsbam{&)$d71yu0%Dz7yWY|8|3|8abpLk^hg%S2#LR+9LlSIOBI+x7if=|G*iDLw%^O$o~h< zh#DHUv_$?taE8V@Xp$)M|A8~cMH-06{|C-s6^l1^2|3TfaCOYfM{C`>)G>sZE|39erg;vuong8!HWuuK2^)mlI$k=G2wT{gH zAIaE&4I%UY(M=mc^-iZN^Z#l5unky8=Kt5RS`jDfv}OK(9gEdPzto1z|F1J+1Ei$3 z#Q*o^*D-5|aCTjZ{|}fe72b`y#Qz73mDq2O zW^8!a#U%beV6IfuXm3mW|B*IUaD6m9iT@9n85{5+)Fu8uU}kK<9py^=f56PxXrr-% z#Qz7(jExqqP2&Fp#;n1C&}>Wmf56PxK%RcI51x&Bt1a{Y;lx8TB7A#f{y&^} z2s@)ag3SNNm$!>K@3dt8KR&!D?*_Y0=Ktfn+l3#l(UAH7`0TRZeYY<2|MAs@O9yti z%>Tzn7ac5`wU*5P$2YeNVnMqh^Z)V5#q+@4BlG`*j1BY(YRLS5yuj#;(rk2P{y$z| z>@4s<$ozl2z#~2GW&S^2;E{IrGXEbh@JQ!+iU05N1*Utk){*%CfSIuYCtXM4{{v>m z20SCK#Qz7(j19EOs7w5Rc%zZ$(t`h?De?aSGh+iDp_at|2h5BO52rwh{|}fM8%?lq zB>q2OW^CX!s7w5Rz|7ca;s_`4{{b^&1Dj$q;QuG8_gU4a@P8A36EiR|0~0eaF#{7b zFfjuYGcYj&6EiR|0~0eaF#{7bFfjxFaWmlg2jv$h6G=OfNRI2#5mf&QqDS{ELVLnH j?c}!Oh6b%aUEul$s!>ACFlKxPF{RN_^M?knzvzDgJK~ob delta 85 zcmZoTAl7hzXMz+PgDV3AgV96 { + this.getValue(); + }) + } ngOnInit() { this.getValue(); diff --git a/BaseStation/tools/bms_readout.py b/BaseStation/tools/bms_readout.py index 148f60b5..877fbe8c 100644 --- a/BaseStation/tools/bms_readout.py +++ b/BaseStation/tools/bms_readout.py @@ -3,6 +3,7 @@ import socket import queue import time +import binascii import numpy as np # TCP IDs: @@ -53,42 +54,36 @@ def serve(): id = int(h[0]) if id == 7: # ADC Data data = conn.recv(7*4) - print("ADC") elif id == 1: # CAN Data data = conn.recv(45*4) - print("CAN") elif id == 2: # I2C Data data = conn.recv(12*2) - print("I2C") elif id == 3: # PRU Data data = conn.recv(4*4) - print("PRU") elif id == 4: # Motion Data data = conn.recv(6*4 + 8*8 + 4) - print("Motion") elif id == 5: # Error Data data = conn.recv(6*4) - print("Error") elif id == 6: # State Data data = conn.recv(4) - print("State") elif id == 9: input("Press enter to get next:") data = conn.recv(30*(1 + 3*2 + 1) + 48) - readCell(data[:30*(1 + 3*2 + 1)]) + for i in range(30): + readCell(data[i*(1 + 3*2 + 1):(i+1)*(1 + 3*2 + 1)]) data_int8 = tcphelper.bytes_to_uint8(data[30*(1+3*2+1):-40], 8) - print("num_therms_enabled: " + data_int8[0]) - print("highest_therm_value: " + data_int8[2]) - print("highest_therm_id: " + data_int8[3]) - print("lowest_therm_value: " + data_int8[1]) - print("lowest_therm_id: " + data_int8[4]) - print("PADDING: " + data_int8[5]) - print("PADDING2: " + data_int8[6]) - print("PADDING3: " + data_int8[7]) + print("num_therms_enabled: " + str(data_int8[0])) + print("highest_therm_value: " + str(data_int8[2])) + print("highest_therm_id: " + str(data_int8[3])) + print("lowest_therm_value: " + str(data_int8[1])) + print("lowest_therm_id: " + str(data_int8[4])) + print("PADDING: " + str(data_int8[5])) + print("PADDING2: " + str(data_int8[6])) + print("PADDING3: " + str(data_int8[7])) data_int8 = tcphelper.bytes_to_int8(data[-40:], 40) for i in range(40): - print("Therm " + i + ": " + data_int8[i]) + print("Therm " + str(i) + ": " + str(data_int8[i])) except Exception as e: print(e) print("Error in TCP Received message") @@ -102,13 +97,13 @@ def readCell(data): print("Failure") return cell_id = int.from_bytes(data[0:1], byteorder='little', signed=True) - print("Cell: " + cell_id,end=" ") - voltage_stuff = tcphelper.bytes_to_uint16(data[1:6]) - print("Instant_Voltage: " + cell_id,end=" ") - print("Instant_Resistance: " + cell_id,end=" ") - print("Open_Voltage: " + cell_id,end=" ") + print("Cell: " + str(cell_id),end=" ") + voltage_stuff = tcphelper.bytes_to_uint16(data[1:6], 3) + print("Instant_Voltage: " + str(voltage_stuff[0]/10000),end=" ") + print("Instant_Resistance: " + str(voltage_stuff[1]/10000),end=" ") + print("Open_Voltage: " + str(voltage_stuff[2]/10000),end=" ") checksum = int.from_bytes(data[-1:], byteorder='little', signed=True) - print("Checksum: " + checksum) + print("Checksum: " + str(checksum)) return if __name__ == "__main__":