From 2057208ef66401d4bbe41761de98e88a4dec4eae Mon Sep 17 00:00:00 2001 From: arcan1s Date: Sun, 21 Jul 2013 06:29:47 +0400 Subject: [PATCH] Added function to define of aglomerate type --- statgen/Makefile | 2 +- statgen/graph.c | 144 +++++++++++++++++++++++++++++++++++++++++++ statgen/stat_print.c | 44 +++++-------- statgen/statgen | Bin 0 -> 37507 bytes 4 files changed, 160 insertions(+), 30 deletions(-) create mode 100644 statgen/graph.c create mode 100755 statgen/statgen diff --git a/statgen/Makefile b/statgen/Makefile index 03d56af..5536912 100644 --- a/statgen/Makefile +++ b/statgen/Makefile @@ -3,7 +3,7 @@ PROJECT=STATGEN CC=gcc CFLAGS=-c -Wall -fPIC LDFLAGS=-lm -SOURCES=main.c coords.c int2str.c messages.c stat_print.c stat_select.c stat_sort.c summary_stat.c +SOURCES=main.c coords.c graph.c int2str.c messages.c stat_print.c stat_select.c stat_sort.c summary_stat.c OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=statgen diff --git a/statgen/graph.c b/statgen/graph.c new file mode 100644 index 0000000..a582b8a --- /dev/null +++ b/statgen/graph.c @@ -0,0 +1,144 @@ +/* Library for graph structure analyze + * Usage: + * graph_analyze (N, connect, max_depth) + */ + +#include +#include +#include + + +int check_cycle (const int N, const int *matrix) +// function to return number of cycles +{ + int cycle, i, j; +/* cycle - number of cycle + */ + + cycle = 0; + for (i=0; i N) + depth = N; + else + depth = max_depth; + n_cycle = (int *) malloc ((max_depth-2) * sizeof (int)); + + tail = check_tail (N, matrix); + cycle = check_cycle (N, matrix); + if (cycle > 0) + for (i=0; i +// prototype +int graph_analyze (const int, const int *, const int, char *); + + int printing_agl (const char *input, const char *output, const int *connect, const int num_mol, const int *true_label_mol, const int *num_mol_agl, const int *agl, const int *stat, int *type_agl) @@ -24,10 +28,10 @@ int printing_agl (const char *input, const char *output, const int *connect, * type_agl - massive of numbers of aglomerate types */ { - int i, iso, j, k, p, type, *label_matrix, **matrix; + char iso[256]; + int i, j, k, *label_matrix, *matrix; FILE *f_out; /* iso - isomorphic graph in database - * type - number of cycle in aglomerates * label_matrix - massive of indexes of molecule * matrix - connectivity graph * f_out - output file @@ -47,13 +51,10 @@ int printing_agl (const char *input, const char *output, const int *connect, if (num_mol_agl[i] > 0) { // creating connectivity graph - matrix = (int **) malloc (num_mol_agl[i] * sizeof (int *)); + matrix = (int *) malloc (num_mol_agl[i] * num_mol_agl[i] * sizeof (int)); for (j=0; jJfjWMqH=CI&kO5Kn;H0W1U|85ky1gSlYBfx&`-gTaA8jzOA%je&uIm4Sf) zrp^J%g3$*+hA}WOz-SJz2@DL(3=9k`AT|?-U|?Wif|>xOWuU?^8fpyKZ6N!g(kM2A z#A3=pBm)DCW?)bN3xM>4+?oKDPbg0Si^J#-PE=XSmR9^*DAB=tgGMIsZ z0Y=082l5*T%YY1EU|^7e`3p+BfNf`BfYBheAfbS#B`F~GonjD=f#FUuBwS$h5{NJZ zj0UL%2?ahaNddVN#3lyA+^L_FnPg_7pOd1SlbKgqp<7{LrfX)RSDdeB1dbm81_p4L zyZeQLjRkoJWDh7*L3WEUK;jZ4AJTpM-QV5SYH_m1ryRXqlOgy_odXm+Fbp<;NJ5U0 zfk6n1+FuOV#km<^F@~yXBLf42AgU0U2Z~N?=I_H{{s$c5S8#~0!XbVRhjNvvfKMs3u;}Gw`AwCC(cpDCJGaT;uibH)J4)K>b#JzBspMgXD zBOK|6Aty5_7nDuR7~(xceB)D6i&E1wi%U|ALVTTb^7B$d5|eUL8RFy9bMy1!i%SxV zO5)=g;=Rh^gP`i1a}tY-Q;Q+mv1%^JFJ~w&EGhxnl?<_~xTGk#ppv1upeQr1B#j|0 zzaTY_AwE8{I6v9aGQPMtIWaGdp(r&mCnrCdAuT<%q?n<&q$npfkD<6ECBL+UA+4aa zBpIP24Wa`iTFj7^oReRi%8(1uU0jlqT2#c4R$i1@lFE=+lAi`5G8uC6lM{1FGILWI z(x9%0kI%_WN``teH!(AhA+0DimBHP|)5$sBNY6;m6wWpWWj-bbP$>c;nHfMN2(!Rh z3}6;S2EqoZ2FZi;GBSW50|TgB0+m6fQkk5fnnW2?$bic#CWc%Fh&)KWcxEOqsD#pI zgor`ZGcmx_M^r-U0Z^F+D$hWAKsW(O9ApAc=$g z0TE?jn1LjYT%RpK5(l{nrhWyIILHo|_y#0#SeXuz+kqs`2@-(f14!arP%#j70!bWH zmV(4U_yUqR4@dxtZy<^DLd8JT10-=ikN_0FKoaMNih-yPNaD!h`~yiGrTngf#1|+G zkjps^BynMo!B8xKBo3;ppu!9iNaCU}K~UL%Brc95u7M;jfh2B#Brb_0Zh<5&jU?{T z{D#A$oAqhF0)t2EffCjiuNfE^JerSi9EK?RZ~7=-f#JXElY9jRet8Fm|EeH9sB~g@ z`QZQm|Nm8Q# z_i_T5zX`+#CAF6gVE!r)9~8VV3&8wEAU-H*y-Wb}XMy;jB=s@?%%23}gObuq2Qa@2 z#0Mpzmj+;d6NnE=IxiK#{3;M1lw@8CfcZrrJ}9ZYWB~KCKzvXVdHLZV$iGP-J}7Ct zd;sQ0f%u>#@$v$g9|YoqlETXaV7?cK4@v?rH-Pz0AU-JSUoHUitw4NGl)sz+<{N?d zVhjunFB|^-|8Mx#v-4t{N9QAt<|iKlLOhQjaL90A@Hl?(LOO^#enG&2;RXBu|Npxte~H}>lKTIEU%mkp!#hAcnEHc1 zm_0h5dUPK0IQYumgYkmL#UG_iv4?ko6neB?D)|!Y(RmD_{}EJwgYC>b1qOyv!BCIR zr!VUM|NkF*jI}LKfr0V!VUT+~nr&xfD=;vW$ibZ;61u;jJb}TZ^XdN!u`jFt|NqY~ z&+xJsLW7L)=&b$GS^CAJGxSBL?+2ew*9R`0zIU2y1sF=$nrj7E>bQ1*<8uKhsdl^m z_{=ZBz#o2+U+-WQ2ZS!M@aT5^;n9461&f>vRE`5ljvu10lzj&%WxV!muD$agWZ9Sh zrR+OEiQ~0dbL|I)QuZC7l<`{Aquccb|27627|rPKEU$RLki)7WSR29M6;FZTZZ|KFq2^@B&Z z>j#g{gS%817#Q|}GM7iMtz$F;!;3Q@1yD(lQ(%&wAj$QA|Nrmyeb62H1gyW;)CpoN z*d;F*L9(S6x_z&Bbcfymsc`K4;L&TUhpgz%pa1_ox?Kf4nh!w2N8|v16v&kz5lCo) zL{5OzfWr^OI{-4wqu2Cb6xbI#K)Lf` zL594X!pOh?kvzBy6s53ms*Pe`c+vjn|9^;`2OqF`^ahA{bh{dOFkXOr=mN4V3%cwH zgly*_bV*oPC_|kM4vV(ms1|CV>q4r|$)yPS+DYoxTT-yZ!;i`)dV=w-9OR zg$LuIZq}Re3=Ex2pp?^G`-iFS7AUtK2bb?2-L5x|F(`X)~zW)F3(Yw_K%xiT3Q+p*qRA-Hfgh%gQ87N!8qj#?Yl+EGMyH^9uwow5UBbWYx za>5&M?uzVoeFM&2M?v26=xzns4l3Nc89?QgZm9`w1s=@@7(t4PO8L9N?rc85*a=~{ zzG3WkePi7U@>0zlh-~YDx=0AiV}=JPYjqxfvHJ(e%dR($yS@S04~ig&b6}bM1~`H& z;vf<9h7n@G!3QkXu5aou9S7S6(s|q!?4OtA+zbr3T?}%qE`RHLCVYxu-pb%_J;ubq z;L+P!@a_M9kKGDT;L$08%!%MY;R&GdP*o~;>@F@zEJ;tzK`x zl3vrwFi1WHdFsWR@1W>LQ_+vC;uJO&N0C*mz^39ivWhlrD)hpU+>wG!g*dVbCu}Oh zkX0yPQ{jxP;vXoO(Zj!;v}+)5Ns;gBalMO z2%8E{WEBF~RB$7!cn8kxXt9rC#u<=`ZdThA1qP390a!}yyavkU557Q)#+RnD_>wy~ zPn5>t&NQ(6kXdR8QPg~Z(W6%cqrd>!4=$e|_6vLgmFaI7Up`ph{G8S9=*Nb(yn(Zq?j~iM2@=1FaQ5{gJrr~LCP!-)j4!e1+ltYLFySVbb`f^ z#WW9fUg!kNVv2%wBIyUI1(k!YOPXEZFur`uhR9)92sWtM^#vnHMe+^2rhpsCH$MLV?_qhk zsJ|Pm6$6Z05ht}mdQoKO7>jF^Y#fHhFcPpeC?TrB!tE~xODuBhK7tHkR{OH+v z!lUydsQcP$Di+MZ0B(Z4@cQuoKcr0oZ4`Ec)iYjzb5p+k|Ic^0b!UGyxK?^E-bcv}6^NFbm!3}P3P0aQdTFzbr zM;oMpi&1?-+uNy-=)~qeSVfRi>TtXj)FA+suMp+9(v3%NYrq#!u?KcY?HhQ4cz+6#S%5}UI)b#+l0u;LN20wpK6{wO0JF)o(W2qF(6}_gDy}-rCi_dRB zj&gm_4K@K(0tb0?vzA6f+A+{xNH+r{!-8hH81{o|kr%rSKpl5h9~=rnPJt+#WWd1C z4R?VXtYg#7;L!~lVgZ!{5Mx1FUZjAHh4g(;lz?RSgNPT7AOpeOE0=C?`=YxS)HUk{ z_r-jATS475k6vg84cs&9g!HyN-v0mJ={l#mb`C>HYIo=ySSzj9be+O!K$=pbuR+Nf6yu=a6a#w!MZuR>|Nrj*IrF8bFv#DaXaNPPrbjoc0@OtG zKm`rLLc%IdAEXCnyfW6X0;>ku@WMhL+$Vyx^p3yCdnfLBs_${E(IqAkXs;u5vhk97z(hkMpFv1_k|wF z<-M&SXM6OTiu!_M^M%AKaMGUO(Of%$p)?cJ!2@ZA##gWDdmpemNUU>%6nC@sM8Mqy zs<$AaC;yT_tp9rfi}heZP@GIP0hKx3t`j_ZO=Xa6nfd}eVln~L3R?LBWGYx?@&%91 z3m%LIK;8X=4_HC6+AqP5@91s?s{r-W!Q#RY@dkA9-yoAaTPyy<4TWoY0FeR>%kKvb zdA>Lg7I3`);T?qVPV5H_*1y;c;q8F%mO^+NAiU`i-U^TA+75;iCy(aZ28I%AkLJA~ zTNz3WJ(~A|EMX{7_h_!Yz)+&#(Oi3ip+wT7xpoIbiI7Kg?FNPtZja{L6%72Xpm7CQ z4&2S&(We#_WqZQ)W=1=6b-To8dFRK&!{+|Nr?x z1E&{2JQo=61c(P}--G22bc2U~Je+H?Y zAnkKY*EcmgL74}XAs~M7=rzqp)^P3_*hY}%mwP}Xx+r4@JE4wrMAkC<8K^`8)xe+u zD9G6E4YaXcge+)m7e)32#9tu2;IUm4$paX!z3U0d>Y&o)g#wz@piy2F{TC31_XdDQ zc~NAMtcHy8qR3*}-HB}XlBcNN295Wk=!f>JKpumP_oB$6xC}Jjiz18SGEmlZT9;jsz)t z5&jr8F@fesP@)_qxlo#iX1YPV2hKxx9-&%I<2>YwY zbc5STpjZLLhZ#Eq1Ee>?$lr1b)E|XMPHZ>Wp6;m-Yru81W9Laot&gbm9b6zu4_p>_ z-v_lUS@-zDy$!0aA>IZx>>%D|1^ETu84D-Q9sy)~9^V7mgPxwjHh@EGu@VCV#NplG zP~u;I2xY|Pf(N8coeeUl)Aa&AwI`rz?ICJUKukn2ZU!8*{O++scK&y5j>F1~dNDrtm0`-5f z7YJb0;IuGZfq?IDf4beDtH8$evnO@zzAszGjiaaSJhUbqui zcy!lp@aP7u1qt2Z(Or7NxAUN9=a0_gFWQZe9LJC0I1L<*11*k$I4)0~aIk_^gB|Ap zQr!zG8+^KbcldOJJAEGAp(jAS25`XyDUA^G&Y(hQ11v}{fPxfM0f*m_qj)4I@CIz0$X+FSc?fQnl|M5>y zGKHl*e~)ffW~hzmF$h}J1F_Uo4%9hgz2$+$X`m%G5LL=3PIJaOgaS4b?7FYAATz|30I{D!*c(9Xn-KO25c@2c4M|9y$6xG&aKRa}^Z1MP*O6lj94>Y_0 z@!xD2P?+E^DZr}1{>w#C4eGi)06DAeI&|jLqwxr6Wkz)DVSafA&`K@PS`CX6x(ptj zdtaDe`rorS#~XdIsDza=qZuYpM;=1sO)#at+*X09DB^ zuY-ER-JusedRswD4)=jJM1XuHa2=!uJQ??L0Z0u*-lO?|K1jL{6xyLLJd!VY^zuvv zndH$8@fYK%ZXwGH{H^IAO%VTd3v^y!JkToxn(_r%;?aD73uK7Rwg3Oq_(cw+@kbr- zNIv|TU$CW>!Q#??4`gkO7kVQYp|102J|GU#$V{w8CWJ<1kj7J2ao7m=oheA!W>6A9Gg|>{_6sCwh}j^eodV#x-SvfaD=2;O_XPffHSj?R0NhEIf~ADc<1emV z0cAUILhEMebbSI_OcMZWMc8(Sz5zuTlaY5kW_;!sXlVsG4YJ6Szex(*YJg;v#h@0l>kDhwJEd{mp-)H(M6ki2)Q{GN zYXub(kTEBY&-^h5Kl2MRzP2RQbc`tC?+XTv!n!^|NyDJ@2#ppVq#!)e&Ctozjiwfo zCPBkry>PV(9*khM&8|-vUy4#MWO~5m0`8Du_{<+MbV8=t^$ufm?HwlmzLkGLr7R?g zO$Rk~UGIRVAYE^~T!u5jnS9BuQ@?C&_MCNDl6S z=HLVTdI$O2kOLG|h6Vvj-;_-20Bv@?!Ps1TgNeT{0GyIR>#`VLf~G*R2lYanX}29I z?ScvpaGJeS8bfM9_nBXS=pY8$af2*7AT=KD0tsGJgYCFe;s~a1lu)DKeh6BwfL0h& zv*1QVsyVnN0V}NHfB*jvnpHxs{gN3Oz_UG6=NFny_J@wNvPZ zF=4t2x~l=jWyoVM)Ql1mg1r|K?2w{ucmz8nLqih-G}z%aK6!Y+!98P)MQYKgi_Z;7jejkU|C$#I!18P(ll|Uk86kjetT1Td-3-wNowFQ4E5X z?I`8Ka7*nJmF*~@HE2>himL``*-lZgLt2W^%8PL019u^V9#RyQ?dXPq_h%v(e>7~# z5L?Jl6znJ-q$IVY7({6ygKikzf*mxFhCCj}-@pA0V%QoqNF5E?U)Wju2DBv-x&`vM z>krWI*K6D3u3x|mjc(T;{OeucbROz<{em_&_y9Z%$LRW}+4T!!x9b;c*Ecm6nq7Y| zcDw!nv3Gys*K+;yiC=(svl;`#C;rHT-L7w%Uod{+*E;cuKjz>kew_oIu7A2+|3IAL z(flT$v-XTfXX$~?&=b%Byl&SM{Oes$Aogi2KLDOFebDWC1|c{JB6tI2;~5X|s5j^| zr8Itx6CRzeJ3jFXxbArIcmMzY5Ie6xz4tN)+zSQo{ygpqIu?iFwMn<@hwjiXod+-f z>b%hWfU)&Ji7fiQQ1A+W*ALK5p{^eoyInt6yPl~z0^VADg1=P&Y%bWqmyHadF?z@b z#++`~5B%$0|A2z?4Q6m20&UKo;ei-my8#|w<6rN3rV|u+ps_m>*f`w{55^DO42+uZ&6*FT^=o9kUafGmRVXMn}? z4^W~4E#r3mQ*#AjXw805sQ&=P^Jx_Za6EtF*YZ7)2HI241tLpXzyrmwRC0yCrvoxR z4W1Tywih%$?Fyb-xwRLxg69QfyDmIwg2NG-LSOqq;|}VJ*Baffe_$!}2WF67=w@Ja z{eqM#FErPFVFbD810!flFF3~D)U4`u{QyaY!5+vlcS>H4PI^+fXvCPW(K+XqRQ9^Ih_K#8;STIcZ>CjUV*2zOA#TK|B=ZZy~4 zV5sweCUej}cF-OU#OU|~k6sz3Zr2yR0n8rVz7P}7bsm3l38b4D6rkYT#ANOIqWu@Yl3<}9tGKRy}R^Ax9^?q&@&$0t~($n0325W&rgB# z+>5Bapz%%c;P`7Zw9yh*kW0EbJi0*>)vh}{dQGPyYn9&%n#BNZ>(D+?Ae|mIl$rgrw~U$V6;X z2OlsoUSK?+d9d?Dr|XyI+8d0eJl(EeJZA83b76h(S_3p%1`_!J6A^2!y}=9;`2!PS z;os)^Aog(D1lSy6gdk|Y_nCM9|95UZ@eY)#rXB!Oy*u9h|KGe9B*Vzx3YvX@%xgC9 z1}SR2@gB4v7(#U(e=&C#NYwQO=$HslxVygS1`nLPaOw5{jd{Fq>2?6kYQE@p5O4v{ zFS)+xb`a^^k;4vJFW!3L-T(jHUSW`a%II+LJ-{cTWYm z4m5)Xb}M-0N7XKndqI8>;BQ|E8scsRap1=_^s@SZmgcZ9fd-0tS?xgyg7L!t2OixJ zANRIC0Q<>wA+mK}cK!eVG8(e^8Z5utIU_YWJ2NjGyi{8OyjHsyw27MIn1cYrO9N!3 zuAsHs#R`car8|pK74q^+6jD4oJvcmerCwq?+<_x6or~dRCrBRM-?hZVytv45S=lrpIpAycC7}G=&04OhAGo4-^w=#~lRHxsEvqF}$w8ND1$e z9r|j=|NpN;psw`T?N*eUs*szS>(ME3+<_y%sFLfL0}sP%W0-=St`(UjnR)379-SN> zyUR06GV)7H6u?XRcR~{lgGZ-_z-z_{9`NK0PGOJ`UcDXBh5}_$Xj$aZ_$C1qqMdtB zfaG6LPMe|ifTK?OnQ#m-M2y`~Y!MyqTG z6}^yyQCdOHt(gx}3OYjuv?vR9yoSC!1H+3Bgfm|Du!1%wq8z`{3ico4g>Ht{1N?pI zcocx#1Zrl$<`SVgPjoXtR_7gj0N$3nV;eYR9>A*mENJ!r+8)iPQ2iG``dxp38d%uc ztFW37)L_NoaBJ5u^@|}52AnE>@b{O1=B~h@g=hkBLmYdtAlHS9p`Yupa2UjhxOmmk1G@IS!wi(g)X zc0dqgEB|`1(>f0!DLx2l`=hoq1;Fi0)aF(zD7}N74qkKb2C^S)7-{~z(2Xx?Tp-3> zprC`LD_2Mx8r7-bw#aeN+7|{S^RV=Butx<+PW*w^M27?&DNcm+uW-is7yf=F@Wc)N zl)>Ns4s?hU>TyYkT;tI@6}(ob8+1O-#a*BU^_|CGyaH|2#GysNqqi5L#r1_puc@*$ zQZ;jN6R5NTr}mfXWF&-EP;m)LOP~XwK&D@iLNdJ=Y&y7y`f?I@;u}Zc@UO>R6m&Cy zmWu|F8vhtBvqpB=&5fX<6o2W$-|zDu+~s)zIuQ-DzVk&9SR0}E+YYWfAU&lG8^A_@ zdr(U@fGkBSzxjJoA*Ud{0F~h;Naujflw@FdabzP{?+Z}dddCK6m3HzlwEfxqrlPZU zPiN^4kIv8y9-Y1`d^%khxODo?>2}=%F6x*;`V>HBbh=)E_B&pl07nC)3j^J}3|fc= z>cSxDdIfTIC-ZUFC!o=Vm(5r;F<$WKW&oW-mVC+M;3H;_UKxS?po4>7tbyr%0Mh;1 z4pd8m#;p+cp=*WmAAr`a9el)uv^x3$V{`2T{<=M&l`Gw@Ppn<{@b?t{2ZbZ33-SWY z*8xRSbL|BNSQ)O(4l2XJ-J6$h!OJ%wo9v&wJOkl@ay7in-T+R&pjjB?F8u~@$!U3r zzhw$k5BjJzc<5LRUI$ptplyK)41@7KO%I(Cw{?D9Cm`b9{BAX&$CGgo351<`uP%t3J#tLw3AkK4uOtZu54wy7byn^Zk z&lyyG5U}}>ECw3{0;e&^8bj>40KQr?bb|+IsU{>R zFoQPrf-)KEiq6m#U^P%Z&@9+%0$uM3lKs>z#CQr~1|&CuR?0#H6*b{g;HW1c3!skh z=muGPs#^%khpgN4AjVOsOWp8=6j~_IGNh>MD5`{1v+D!KZr2Cau5eh|mlEeirayiQsbZwH>rDf2|2R)^fe;9#GT!30iXt)IWhWy`L~b z%G;XrkO3)BSzEIUmR*g(Bd6eXMbNdFudTXW9~^wZ0y6gwnz?9M5q5$n3wTKjWYryi z-2qq~1#&^RE3C*~i5QoK*<=e#$=LG}s4{}qD0e_f6jGyr1{mK!m-zA5?FA2z-YE4V z7#fhA^MoH7WaukzAwdRG1c?tw6$M)0g$OqO9$j#ig^0g{;KTbMF_R998Dk>71*+F0 zR)As~9!E!UXay7#SRK9 zbeSDs8BlWpUFHN_2HIf)CEz=_x+Y(HU+BX7frv0#Xy#q?XkVcp59sZt-|DYBx z#Enhhqy-(e1~-CX!_;>`sTjS#cLCH;U|@9p0O@st&A!kKIx-fcI}h5^;pfioh;|x(4FFwV)X4=>?(p}xgY!2y5??1^OVZ$t1faas8}J8| zL_kRkd+L+1)U_klYqqFuz zXX%m7&;y{^6Q54k4bTXN&EbG%novvzTg=dUpoFd4^-rhk52)?dt_Nzacyzm-@aQ!a z=LL5FUtC`TE+F8i93ziVedS?bc<~IR05p--d2m+}QrG7lNb=+oL@tFKlZDcAbcHzN zGr!h>&-{X}Z$9&DxgG(rUVP>k0CD47Ux2tzKm%$4pp%3_-hihWNZX!&{UNvk-L6OY z*Sj8o@zIQV0GV-v$VR$802zJfGrvIS9sa0GpZNuRAMi(=1ljzAKk5K_Y=fN&%2be% zy${fly(}JZIPCy+;9qzx29@TZq5w1wWbOKgzn=@#sp)pz0X`#n2WW!3n*nrsG1SMP zGy^(l1i}R!-V9X(aipLtC_ca^?;0Y7tq>?|a~Ffxi@IL<%pd3a2HYnBol4?*0l|kI z?<)dzBxsBEi=~Ue-O&%Axe)U)%dV~9_$Y6ZUnL#Riu zE{G2H(R^xn+vDJ0W{>7K94~Sg{{QdM`nE)lU%mxYLNfStzVhk(=F<7!@xRC&kLJUS z9+t05Ux5y&kB)VWag240bBsTnmZk?&|M_s*1dvG}6`&*R8NqiuFff4bR{I;PH-_ehWPsi+p10C7 z201!|OtxiUU@*`%uu?VAGfLAj&^3gz4B;%0yb)X!#xl}{u|V?1aCsQZNEgO3hOxL9 zT>V_QxEL5zivx=C(~A;w71HvH6cY0ib1JJ+6>{@)Qj<$_5{nd4D)SO^Gm{lciW0L@ zlS}f8GE<8|!yBr_VW~yMnfZANRtk_%gPxU33gwfToSIjhs$iwy9^eBq733aL41lS1 zElW?$%dAvz%t_5IPE9RSNX$-DNGwWD%*zD3mTYr%a}zUj6s#0dixYEFD^gR-9MVA| zddc~@TwDyQ#i7NC>8V!WaD=5K-An~fzktvX1>Ir=aDvbQr3MAvWQ7QwNS!DJ-9!aF zJv{~8A_$eQ;2#E?sXg-&@);005UHzBoRMFyPy%vjMruw0*f*&anI&8ds+pkjMKw(aj2Kii zAtGQwkdzKoL8h*1rj=@%D)>gP;QZXwk_^y%T6s}^Ub=z?cn(b=IX@-UNR^YDYgbhma18@XI@DvGznRO4wnLzBcK$A zuY`tpP_@_qUMd^HS;!?dLLIDhHiVVVI#^04ozbbD7`Z;7qoROH9o|>XiT$&78bdXk>lT!(*hs=_l^YijjlS?woGD|8IauZ96GAk6oI*L*g zOE7gn!bBCfz5>Xy2JAXj&60ysi%WA#z*c}S+)7PRD9HzV1nggQ7eed{09_CU3fJP& z+}y+>P+gQ*l382=YHA>91_#2iyZ`^cz5D;a#J&Ij1MmI+@BZNb|B8G6|Ifeo|Ns7b z|NlR`_y0f3{r~?p@BjbrcmMzY;`{&qFS`H#|AqVi|9`pv|G(&i|Nj#q)-r%}v`&a+}f5OPX@c#P$|13-l45>H%|5ssRVBop+ z|Gy6t1H+SB|NrMOF)+-y_y7MCCI*I-r~m(h2KV>8{r~?C69dDNkN^MwVPatT^7;RN z8D<8ClrR7Pr!X@xfG%bNg*#(a5Cda{0HZVyJI4e@b^(w$=zg_=Y5)IgffPV7NF2mO zRnNcxy0{0V{=k&~{~JJ~T6_X-d=g&#+~ph%4E9piTE;3$AblV;pgT7?rvLwc2_)di zC(y>^%*)1fmWQ2#fdM2Bx{Gnw^#A|8K>b0OJhLk^NC8M5)Khvg>;L~PDEilfq`~e0 z-N9Hf`~UxyiVO@4F#R6Q%*=BX!D>L-K<+)mz`*cl&;S2hK(|jJt6MGxR|m2WG`Q1o z`TzfJkVcp~rZ%t|kUS_JKVSa;UjWoKgvm2=Gl3L<p z^7nFZ(1DBrhc75S{ki@B|7p;XV=()ekFkLa0+|C!XDc54{~r!IjS40Ya*rJDAouDpF)%E6_y4~iO1OA}!v&NEK&D@L4$W894H3IPobs@ku!G2{`d_fYUE1 zz5n>||3AnYkWt9^0`wl;4Nw{;2MTHs8=VH-T?i5f9lQgg3phd3xC{)Sqi#TamkbDB z62xI(V1V6U3%g?u6l5SNDGopGuND*@AR(Ci*MI->LHq>heYBv1>_B`AR*3na zr~&aCpz`2ClYxQ366#>kDMlc9*j;#_3)Mh;7zRZNh+P1^#}5`Z8c+r-AA^o(1F3`E zwdcVOu^%SR0OiBn?EzBEz`y`HoC?H*+5hi9#6KI@Ao~A9`B3W^K0x_JPTKTgVJeGx(rIULFs8wdKr}7 z2BnWd>1$B>8I=A8rPpn)C(Qv)Lfje?@oqSTz! z#Nt#<1~g@c3=De3mANH}Nep_$B}EWA1I7Y(Gz%E?^72bk^&Fi%bxRV{p}h3GQoW?o z%$yY6%oGMa5HBOKIDIN5Y`@ zSwodEz{*1lsD-fd4`v_83>X_k$1yN~t~rCdA6DKJfh=TTV6XxyVu0M44r0RWfzjCv z3=E*M4916*XB(jU13;P>7{K?ggVey>4;5ypg5IkRk^_rD%TI8mf>siP1rhec^uzoQ zYTJO~1g0NW9(#Zym4Sf)R(^wm15`($>+b`#JE86aSp}=V3ZMlxtX=}ifiTD}5Dmkf zX!<8W%ex6s{ouA8Ofk|uzn~+?K*Ced^uzA47XT#+Q2RF)qzZvy`d}in(DcLVTbB%o z3aB$69B5d>ISdR8p!PN>O~Ar009s!MK=pS)-2u}B3qKft1=N0+e%QV5u>0UaZA+M1 z5RD#w+tBnkltAi<258X&YKw#P!7#f02N)O_K*#36>Tg*4A^|#}kFFk_4{Fo$L-P>G z4p{pmgGl|LRScl;gV_(dxfEnh0g?LeLem~hKdip3fa-q$G90P~WG>A8uypVY8h$YS zu=}ASDnY6l7-0DX!ed~7>4(vv>wH00!1Tk~KLt?z7hoEpG)y0i2DSB(^*ccC5q1D& zY^3xK)eg5G#s}>{0GS1|A9UR;NG<@XA0!9j!!UaK0p0r!vfluv07}F3TR{0R3Zxdq zhS8wY_+fT~#9_DtW&0alKpit{tT%12aj0R~vPhbk_}04vW>#f9MgAXIT-c>f1gT!aBuuAqvGGQi3U zRBBje46uBQDlW+Y%a5qy=(QrGUB<%j5tJQ~m4eyW#6kH0n>c9f zhmir(zo5}}CI(&x2efv)DFXuoNW1_|9MtauiKF*pLG2wz286$0`3cmIWn{n%e^C7l zG6&W#273rzZ(_zHXtN$Re;otYy_n&19*6jK9O4ggh=az;u-W?)hkABK1_o^Eg>i`E ziZ3NbP}~bLM3h77ZCLmifW)z6nS@XgeaPP6Dx!F*g%PJ!U=?V*>dLStW$6g+tsG zhj=&>1A_pA1V(<3!=b(iEY8bNV+8RRcubIifuRvBj#+-TgT*0kLndc~#d#TC_(IG9 zkJW+l7g!uwC4{{hEY8bN5(H5X9+P8WU^oC3H}HgrgU22j7#Plg#UXl;$-6kjKj0AO zXT~1Rprz-aa6>OYLAQ|zAzKJ#yD)>|5z0ZLf|(f@1eqilJfQ6-m{bBtoB>hqz}i3g zINZ|+7UyL+?F|VB@E9rs149o~{6acJ96W}|z`!sEEDo~`L2tkzei|&!%fP?`F$X** z&A`BLiy4%DBpD*m+sg`as0NW6KN-46a~tnClR9 z1Pk_f%)z0)4u|+;9OBDaAn5@;95&;y_bd)`?t{g785&X{{sNCJGcYiG1dC&~m%fAS zMR*gz0*x@~B{L)!l@ynhrlsj6GsMSxIS0l2cm{{W$1|j)7Nw?V7MG+J#h2v9C+Fnn zr4}<_5sHsb$&XLZ$xlkmiBBoXFDi~tEUjQj&d)8#Ni9iD(K9nPwPe7mC>}Jf1sSD^ zPt7YSs$_tSYo(Ot=2kMqLr1y5ym*jfQIzH;X6AuhpPyfpQmmKEkY1EnkfE2%keOFv zR9sS|m&}lxS`1pd1Cj(SW{3w*UFsz>fH}qBg#mD0eo+aC4VkHo2dMxDhg*=NuWP)k zpG$l^G;m;S6!)Ys#JfcLIr@4!GsGjiv=}tC%njlPR{X0dPaJt48^G>@hPckiKRIu#W2q>kNv$5YSvTLvcw;erXA+ZqO(o$kRn748#FBg@KFHPasUXuB(voxXi_tt(l$w~5nU@})430Af zh`)hJyTZRFxpj z$*4l{@!$Xl$4NXW^`J_prKh4>7atGu3N&ESz?P$XHafAd6AuoM z%)E4l_|&`<28g2=ic+x}l~h~|RR9VJ