From e779ab702ad02b52718ab5ef718d9a4d3f4a5468 Mon Sep 17 00:00:00 2001 From: Stefano Zaghi Date: Sat, 24 Feb 2024 12:18:02 +0100 Subject: [PATCH] fix bug on module-dependency creation with preprocessing conditionals --- src/main/python/fobis/ParsedFile.py | 49 +++++++++--------- .../__pycache__/Compiler.cpython-310.pyc | Bin 9041 -> 9832 bytes .../__pycache__/ParsedFile.cpython-310.pyc | Bin 14511 -> 14607 bytes .../__pycache__/cli_parser.cpython-310.pyc | Bin 14698 -> 14780 bytes .../fobis/__pycache__/fobis.cpython-310.pyc | Bin 17100 -> 17145 bytes src/main/python/fobis/fobis.py | 8 +-- 6 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/main/python/fobis/ParsedFile.py b/src/main/python/fobis/ParsedFile.py index bb9a76e..9b84236 100644 --- a/src/main/python/fobis/ParsedFile.py +++ b/src/main/python/fobis/ParsedFile.py @@ -297,7 +297,7 @@ def sort_dependencies(self): self.pfile_dep_all.sort(key=operator.attrgetter('order'), reverse=True) return - def parse(self, inc, preprocessor='cpp'): + def parse(self, inc, preprocessor='cpp', preproc=''): """ Parse the file creating its the dependencies list and the list of modules names that self eventually contains. @@ -305,12 +305,34 @@ def parse(self, inc, preprocessor='cpp'): ---------- inc : list list of extensions of included files + preprocessor : str + preprocessor name + preproc : str + preprocessor flags """ self.module_names = [] self.submodule_names = [] self.dependencies = [] - ffile = openReader(self.name) - for line in ffile: + + if self.extension in ['.INC', '.F', '.FOR', '.FPP', '.F77', '.F90', '.F95', '.F03', '.F08']: + preprocessor_exist = False + for path in os.environ["PATH"].split(os.pathsep): + preprocessor_exist = os.path.exists(os.path.join(path, preprocessor)) + if preprocessor_exist: + break + if preprocessor_exist: + if preprocessor == 'cpp': + preprocessor += ' -C -w ' + elif preprocessor == 'fpp': + preprocessor += ' -w ' + source = str(check_output(preprocessor + ' ' + preproc + ' ' + self.name, shell=True, stderr=STDOUT, encoding='UTF-8')) + source = source.replace('\\n', '\n') + else: + source = str(openReader(self.name).read()) + else: + source = str(openReader(self.name).read()) + + for line in source.split('\n'): matching = re.match(__regex_program__, line) if matching: self.program = True @@ -335,30 +357,9 @@ def parse(self, inc, preprocessor='cpp'): if not re.match(__regex_mpifh__, line): dep = Dependency(dtype="include", name=matching.group('name')) self.dependencies.append(dep) - ffile.close() if self.module: self.doctest = Doctest() - - if self.extension in ['.INC', '.F', '.FOR', '.FPP', '.F77', '.F90', '.F95', '.F03', '.F08']: - preprocessor_exist = False - for path in os.environ["PATH"].split(os.pathsep): - preprocessor_exist = os.path.exists(os.path.join(path, preprocessor)) - if preprocessor_exist: - break - if preprocessor_exist: - if preprocessor == 'cpp': - preprocessor += ' -C -w ' - elif preprocessor == 'fpp': - preprocessor += ' -w ' - source = str(check_output(preprocessor + self.name, shell=True, stderr=STDOUT, encoding='UTF-8')) - source = source.replace('\\n', '\n') - else: - source = str(openReader(self.name).read()) - - else: - source = str(openReader(self.name).read()) - self.doctest.parse(source=source) self.doctest.make_volatile_programs() diff --git a/src/main/python/fobis/__pycache__/Compiler.cpython-310.pyc b/src/main/python/fobis/__pycache__/Compiler.cpython-310.pyc index 3a1bc68eb2fb95b055ef15b215133cb634f997c7..7a3c6149316204417ec1353582ec00790060e713 100644 GIT binary patch delta 3028 zcmb7GOKe+J5PjFrpJzM%#Bt&{aUADI``S9BX`8lC(WRv2rgSV!n=eXZKC03PZMjIs zYG^BM1IAC=X$Qz!x`S?`+rd&t)B02Xw`!ZvTqT~4YZ27u9|=iLc0-UBS;vM76RD> zvI%4uWEkY0W>A_ziGYM(xdjIVvb7?o+rZXN-ER;gQ37Yc6aR7Pw&k+Poy#Y)vw1C- zN@a3!%HvAdJp$B;(a1=JS~{UTMQT|c?DaC)rb{Z(EweM3^rYIs-?4|i9&JO2CHrBI zTU&pmez*4$op(Fb4jW76Gx0=Hm*E8J)=FP}<1nTiec>QvRAt>-(cn2~C>;v1n&2ZVAGG;yXA6JIsqm9dKk@RUbG#`AzU;68y`bqfO)C_c zroGMYIq&*(Wh#|pMHbI4o1zI;FG>7X)%npD?9++xI6@b~ZiH@xMuZST7@-*i8@ye6lqo!9Hfje{sDnC0 z+fJR-EHno-Kh&JG3Qmq|afoMpVLv_@kzsf;A_K`Ryd=eRF3aEaHI_V(L6_611!hc+ zJ%?GnEAxs(Q;8TloI=_jO{E{sG7wEwv}h4FJ6SBm3i&ka*~?CYBRc~ytX8qjH{{Uj zjx=Gf|FA6`;CBOlg$DkXtESCL9O5&R#lXr#*}36B|Ly7EX@5IE?wRcMVj5$vi`Hlg zb~45Wf!<_C9s~2&*mHzG@ci_AHK@9rh^JN~v14e)Fzi``;|N0tCjd4Hy$#HF(Qkx@ zs&Ak4fvVf{D~Eec0^AmnU|EjN=C=yF9lU?3ggxNfMb7f1@921q2)>X>b$4|g(Aa8l z*w;B&2byM;rNDM!HXnn^vsEG$V*XJ{q||&D(yiGz4t`B+YjhR@N7x{LP!m$OSdJYK z3f?_jj&A?0fm)1gY?nBil|>#y!xpi2f{(Wn>rm}S?RaxH*@#_WZsu~`SN-D5wqk-R z0Nq}g&*$N-Nm8~KNpWVy8}q2k`vkaja!VjacJL#Ck4qC!fU2OX%2@Qw(zJzIkO@fp zC6lC~?qV+ix+w`_^_8(@_z8B6uZLRa340y!`HLoS2UHq)F$#+cz^u}spnVf z=ag!80Egeqox#YMcpmY6W(N@>2>TGk^Vox$xRLu&6W0=-QC%*~Pd@U^dJ?SrV66+g z_{+gY*+KlA2m44T{~>s11n1|XR%31iAFyfH!|}p@BhzknNzBOtYk+>xf_YW^JQUa! z-=ewf<#!t9U{3vwlcjMSo`x_1pjI=nZQ|LlOcqUXgh_-1!vC5zg&wMjiGqYhZhe)g zlGq_2hjHSayd%_RhlxXNbHngH2-fn6&|d>Mx9aQBtl?m(7wMtyw23JpmE3!Ve zq&pLp|NOMXEIr5HZ_*B?a0D1|C6<_}sBKedT3^C+C6mt1VDAF&35QAj(wXoVranC0 zx&>-!I$s%(=)a*}+A!Se5*mjD636&xi{HOK6~lioU*QWaJ+6MxR3hr68sJ~HbUI(e zSbYdbxzgIi`&_{iUK56gMl2vpqc)9zf!54Jr0GQt?;^eq1q4Mh6UFW@DdUQ)c;NF2 yM6L4K96_Z)ak`zNpXy@_dg%^LOU)POS(1O)I!NOD*VbTzI1?EBUs-u`TlYWoD5v}Y delta 2427 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 H)SKjgU=t0f delta 3718 zcmZ`*eQX>@72nz0+uJ*zFSg^4v(M*mC*G!M6UV-!t>cEoNfUyskT@x9X*YMb-vQuD z)W}ibaJ5!scO!Jxq04(g86e5ZiwYqPTgF?xyWwF~3tP59^|b54O3@N0RZ=y#-N=XG zLDKJi7EY43N;2|;KzB2EfHW(xcxt5==?<5FYwRVXUNCkt5jG+>i6$EjM)anjg^Wfc z24BV4V>DGVv0E}}^ZwEL?_*;a?>IsV;V8l}geMT5M0g5e0%3bxiT1w^VN%!>z>F&T zfdzWq4>7t#nM0@5AUnfny}^!wzVkr(0fQE_ub3TnmDb2r|LCnWnm#+ivqMVU`%O z5xS|kEmOh`a)UUxHyy9<-4G0AA;5NW!pL!Je##i(|8dk>cl0)2XB&>4w?Q?s>EdC{ zYfYuVdi#bzAgA+@dxRz2jvJWYIE*`uh9v=bvJqXA-LCnBQEu!M*1LgBZV*Ux^I8b# zp7maieWg%I+<*YrGFSQ8(JAP{C z>igbe*ZV^=j8_X5iWYT>nZ>k~rH*SeRn&rpd%Zx}nD<2YrC}||XpXMjC%%+7ty+b4 zVGV>Qa@3+L1vYukd$&6k(?a%QLC>2RUUc5;iOKQ|$gPI@4xZ{exZLLlW($Q?3CY#q z<(V@FkEsD@e{(dS_hrX5C}Zp~R1m*n`6Pnv*MZ)br3`CxT0Ov?fiF9Ya1LPIG)!dRTf9#@G`4rp<{(+bHHKj8fh^$q|`%i6QSnG8c!IoVOjyhSA#R z5k7}-+)E~t$0pH;Ojk_Db$n^wHZ2yy*#U$>oP>T+fGdLf5`(7f2McLv9-8;Xo_P6b z6gq)`tw;^CY7;T7tRF3a8nYq!4%{8VS!{*A0+&v9&a`suBFOtK+huef1H*V&8i9AR zFCm57!ioTo5B2_aX#iT;yiY}f2K0{6~<^23>;nKyK}=J*2r$TEZb5s!*f-J8=W z)#SLmQBupGR@Q_$?5KVS8f*qqu1eL6gt#%d?3BEn(=io10k!tZ7s`)b%tV zwd&0$<}P1c;}_n0Bb}#Dpzu5bzbtvKwlqf6yCP*JQZp1`R$ z5qOq&ruqSHGu-V$H#}eXQ3kd1F!r11N;Y4F=MeTEXg|&_b-xJ`gHMKfCHxL;$)GD$ zoj|0HlZpC!r1#{k; zKGZ$JPu=S{xpP&1V|I>a7j!&(*nqs(4t;v$9>`6@4siGTPzjF!+YeA%ZnY0=Gv&Q^ zxRW$`e?B}JA#4T(2~_01(Ny^hsCo$j8x;E*!fk}_An>yME>hn^cne|6ET^#W*%5#b z;OE2v6hXpvbv6=JPAjcSTVyB_i^QTwxRiR4eII1}h_25T-J4%}; zaBi_+Gxs#S%o)3Y0=$qe<6Oka6*IL?zjbS{A(R?Mfnd=!^A6*Q#vE%=UB?rjF3=SS zp`|)nSk|HL_z}~!)@?i&nwMi{LDGwkC5~$GtvScmvwFs~pki|{-?cSEDTVtaOAD@P zTMp{JFqW9xu8R`0H0>4{#d)}2F(!y&^B&z61im9`x9hfWYn1@XvAS~6fg4!!J{s#K znn%VHy;?(cj@o&c*i#*#6c|Lwr^dTL^2&H0;PQA6;I}#bGma0&d(LbsZDptCt{ze? z_U%#D9BqZ@O{C(TIoy*4gbYF!VHQC17E|5e`sLIB;15$6%*UyA@15}|rv^l=*ZV`N c&HLwgWSE(#mPZ&xz@z)nnXY{K=ugRi0n{12Qvd(} diff --git a/src/main/python/fobis/__pycache__/cli_parser.cpython-310.pyc b/src/main/python/fobis/__pycache__/cli_parser.cpython-310.pyc index a075a5eeac0d05435f12a7a8bb4b10ec0ed48d38..5c0f5ec9c0fcb05b2ec10e6e73edad3d5bca670c 100644 GIT binary patch delta 2509 zcmai0U2GIp6z1-Bw#%@8-FCNSc9-tr{1?5QQmS+=VvW0n>V$b<+cAvdF`S(t>xJ# zj-%upyT?aAYIKrGP9Kn>t1u5bE<9d{{}UnwyPa#=QUSF+NCBzj=J5TyC6-e zJr$`~k&+|plIh~ltgowsU8?zHia|O++RnF>JMKh>SD!8(w z%`fT&Ek9F`^r@+wE~`ah($M1LARC*AkC$boJGF5VT4|2P(6CVA*7pq>J6) z6P^YVwm&t5_OM5RSm{^(4k1By%hS$B;7rkx&J=suhrST|%M&HxQl0lWXR(Yc%FS75XnI4QQ(*(5=2FADx1@cqC+%`Zc#LWhGx!LYX0nS)9%!otOLtf z+q_hEyD3Gsv(udorGJ|0Fr|K>i9}eJupRhmLK|>-Q+PPK8T`&W*3QQY%laAJcmoa? z0RWGiw@cSR@B;Dnd@ zIQ_Zl3CXa>&8(#tHj80V)fH1SOhYPAtw42XMnk8TQz;ZI_Hn#dh@%aRf^I`tR!;UP z9wqNEPokNOKq6wL{fSW$s}xVpD|1DkIHglXlN5cX0M(=+_E}3WG}&)0Qv}!_XnT2e zA4k!Lz;3sVz?~g?_Tb);{iA!OygZ}Lb96D%rIOM?IFRK2S5A;xPPp@Q=PJ^;u_EV4 z^cK_Go5?5!!EUzy0O@_TBLW0(bnFnUn!}T$d+7lk7G^0>_VqMb-mDpR*L}<%~XS2%LL-TIhg8>g9Y)9CIFoH13Tw-Q_11?2`EeJahb|dTq zur{2T&F0kd^gIy9M0p)meKM(uhi4wxzF`$ZWFjM^`^u?PuxD!^^32NLLh4%@XW7wIb6{19_V-nRiM!xyM~d`FuT{^ zvy2fv2GXSaDcP~9_!eeYbuNJgE(>Y{NCxMV%k3gODgQ>1l9N!abbUZ{1T8;|tQpxf z;eAqavSC>4`)7vz_QP$D({pg%VvU2Xb<;?cUm86YJ2)7-j4z?(lT~%;$uQ_i5Ykf! zGJ=Aj0VFxARxT89zELzsZR_imT(%OD-M!toV}t#K@~~YAZ68L2edh8yFtNnJejnUP z&a;lK(&Ypm+X`R>B?-RxXwX6MKuCH{l_V>)LN=qT8qG@*9l}E$2t5c@FFI~4_4Qh@ nh3R=zTq0kNfC)o`8(aCPJI)8)f;;5)yBpl~?jWp!p8Ed)C&ySR delta 2396 zcmah~O=ufO6wa(HdA*Tr%aUzbwk*rGWXtwC{!48qPKeUjiOK(;oo;D1o83*KB5TF$ zDvd=Up*@sBb0|YkO(}(zVhEI0gi`3GQ0Sqw4Y-FQ3QbO-P5*9%5=!42DYoL+M2kL# znK$o!?|W}%zO;X%KFjBmw!v@l`wQyWr@prYUtP&{Ih!xJ(^<#NusgyTvcOb-xY+9w zNNT&$X!IDpM*OCSYv15q@`=I6y zQHqQ12#GdBY}$g*3Q($XmUCvQR=;AUbhowXe;lc5Qm>_g~ZgCvYfEvlWrnA50jQq@RPQ+F(y zHtmBf;Frl*G38$n+WlzgzLd_Gc0rJxf+))l&@dg^#y$%GOZG=#xkd&nHWKP#H-mmM zTzo(HNC0lPT7R5aqfd8WaMX^5&}Z$E>1bCqnyjT8`Lhp0`v$jU-B`t%^U_&E+aTG+ z?#F}0<86LaQ45Da#X@)n_;cn9e1 zXZIp8@GNw`7F)|qaqAXHUCxbXi3!pn_EG0F#Q&w!g!r@3M?_}(yIA)yEEZa1!_pno zc5F3A%^bC$iEN81E&`>*jE)igVtM~lICJkeZ5Nn9fWfb4h)Zy8=`6IJx zR$DSx+;lC|_43i3up#Mws&p`0a>0S5GaE?b!V~%;(NEY{@hF*tBp!ma-zD0C+^>l} zVWsBO*(0;`0BkC_<3V`U(Ba7M){~$w-T(Cd}`$i;5HA~ zUAdi{X1~k#J#pM0XRE^pt{=wXQGjD`UN@sMhXyAQP6B|@DI9Ocs!T}Fm|FH3gt*PW z;Ky!h1e8P%DSu(&#f$Sy@%D~MQq4`;lpB}n5b~Kv*g#dJ6< z^@^-G8^5-B8s5jcqLG)qF&c&U>EqE=&nS`@WjDrlFI36uE*F>Abpu0pnIW$(FD#eP zSGnJxj?Vn!!PXc7-MkP=s`CgQ=z1>MB6Ql{o@rz-&Bi8%s>GwmVKyl~Lk%9f{_*AY zbZqbe=e#_xJ~kUiF4zkmD4_&J#D51eauIs2cyB@$nv@2(vz9c+fyYSCXtu4e=;ZDO z{^Iic^hMaOu=He)UqPbM`rV_j_a-CPyK%i6vsTCEmVOmo6?#uv|%P4l}|sd3*x2qCf;TJ++sp?Anwn@%QXGSX9{k zslaumSyjzzjtPAO?}WN!879rDDxCxi+KaH+f#OZe8)3b3x5|d9=w+QPAMqz%oLOS_ c^hjH`)FF0BO=4JV78}H%7!aFa)Z`8P4>QLiasU7T diff --git a/src/main/python/fobis/__pycache__/fobis.cpython-310.pyc b/src/main/python/fobis/__pycache__/fobis.cpython-310.pyc index b3a33f6fc44594a535fb94cac0472bb6f5381cbd..0fa0695a897190dc3aef01f9e846c74d7de7b1e9 100644 GIT binary patch delta 4224 zcmb7HZ)_CD6~DQ?z1utA*~UH_8)N6d4fdvBOaK!b8)L#BMU6~oNLw&;dw&*lX76^H z-2>yEb+m*eq$Q$E(~=LBpnsIQs+!RI5~XQHTD47D+VCx5DphKv^iR|esUlT0ACkWJ z);>EnX>w_nhLUe#G8@+0~=8-am?mf z)5zKdCvTZ^3cm*}+>5XYV0x57Iwyq_Yh&xgg;+NrtXzFL zb{}iSrRSJbPnPng2deG3?0(S@Z><~vaRvgk@-3RsB-p*&xJRYwS(Rh-+rOyj|oE;hcSFRP1hC-+MnccVjbbPD8G^zPHg# zDR1SBT%L1unQs(V8Xu|1*zvS$*bW)`98OX)`6BP5>F)88m$zgnYddG80(l@K`C`^8 z*KoK!$CqK3M_p_`Vm1PPs74y$-GOuL9OGO#$xg<_Q_1!U_u`&16}g%yvnK-Ag5_W?axplo zmV-P~R;TJ|UISqx;fkDgQDK2%-LlaYx#-0p3zU_sO=a~OV}X+$CmX?^=6Qe8N0bX} zHar_CN5H#73*IGjv5&ZSTlBSbvfJXpmiF{*-?=BqxmnGNm$fA>zPikb|JTK{C(l%0 zY_VC-;^AqoW92<_+T(j5#B)Iz?CX~bwC5Oi#X~F4HPv+IHTdJ=t(Bru>y{BXM@(=2 z6jj>oPMU=?>Ww+`Q z3?y*sH(=^e<#KHXD(g&!xNUpOwp+ir-PVAf^qEC*c~-XN@@_ftXijZu~zY~Rqc)NKNw@dv%!A{KM2M7V0Bf;6swr1jc0jKpD(iC!ya5#k3vHE z3?U<)4b|H9WUHHoSe>$=Y{SY69O`niL;FzBq0hp6skl%+kh1iMPeQa0Vj|+avw^_s z`J($3(DDy&F=1!KU7bB_rn;~5O}2F$6yO<9qcIsSoN-O-n6ANF0X+c+sbp}Z?fIH6 zzIaz#MXJQ?t2&!ZaAD^@@%NW1~14g@mt97@*#WSw6YXaQMIA@J*yWlu^K zs)%!ZzB^|+2DSNCoZS-WBLtu$8H3IN%*rMZS{uTwp7k+}#py5f0Us0nYY$YtR5NS( z3C<@k(S?JM;^LV#y_H&zY=q~70qdE?oLS7~O;`6HMSi+aq^O`!&S<{B_KD?D-T}t< zgGcW+f)HxZSeUi35Nm`?2{DeNA1VXYooh!~gFF!b@vAu>JpcKsNJ_a20r zOL3*ZEPAEF(7il6m=tMUgJ*Ax6jG()!b-~`pOPn+DoK6LcEaD4G-Fhu-E zq*-zt(8TCKE)W&e(v!c28jWZv9TB zie?#^ooR}7`yURllN3F5W0IX7hgFH75(}HAHTbV!rXP}FbRu?|Llw62MYvBs885j{ zw@~+Wgf|e-YoC(aBZc`_Bk|XI9H0w7B7QlbvytjQ2i|5Cs)mr$ff=Q*kUI!LN1l;k zA`EvX)ZN{k;x}*JgI^W{ zV-sz8?5umB;Mm;T10NpTPf%OTjqQ7|2Yp+IkV5E1&=Cd^W)Q{@u*ML<^D;^!2$ZRZ OQNpeABVu^hrT+rJtuDm? delta 4001 zcma)9Yit|G5$5vvI8vlU+mfueDap2UsV&R#EAmTn{D@ysVc0>6Rpc{8o}`nGJbLfw zhaiP+9mjSPr$x3k;<`obI;g9_KpOBz`=@9N^haC7{nw(sz5pZWkD~vIwrGkzX69(h zRTCfr^l^4}c6N4Vc4qG%SJ($vSkg`=;{o{l`|UA(;{9YM%(%3}&AWNT%G)`^@xqh# zgzfM+jdaU&T(Jt|MI!)jEDE#W>LjAOM!sleT!UAB6ix@(I{7F%c;YD#^OBRc$QpXq z&KFI~SX9J1)UXj@1HkBFgg9QfI0^GK;l&CzY-yPjju&@I6F`?N!x0-~R^7@5KPnEeM+tnrhIDRF6Cs+roNeIrh4-9vE6sbRi$j9Mx2TzVJEQf#RxN zurBKM#0;+^%FT!=!{xE8Wn>CE*z}l0k%Z6nWk4|+#$_?y!n)=4crRc%)>-*kd=qQN ztrwXWK3g&k7erfe+x@a3(OfK5}7|22x&YD?|+0lw#YE!mJWo z5$X{J5Qb#$s{KcnycaedbQXs>9uaw07zSh}r8#PSViVlcOXlpXYk<4a#g5o4-&@te z*2)i7ZA`C)`9oO+@bMp-6NP`|Iq%5U#4!^ue`=fN&N^pP^UBG9 zmdqsJM#j_W%A+Qo^({qAb&8hh8W&tK41Qe>N_qEj*?}zk|x+ zaQZ2b;o$6Xl(>jM@z^T=(zae{VJX?s-kO5nV4MXn1^*WOPbeX_Rt~n$u)z~34F?UJ z(yIOL5^``?EyknOsPU+4L*sN@F8|Qca*`I2%?gw^aR`Jx#evd|B}0q)MSyIkO3;ZK zvk27da!4(U&uMwIvyYvwh|Wi>{45AS_pMbC9?4&H3~N$Tp+&>7bufmiwRj#?)mo_+ z&d)+!^`hqt0gnL#YO+1W!&G4*#Zcd zKkn||QseLxv}+v{8ikxu$eMqN9*Y*(@NlM@U*T3{axq(8R->&viFIo#i|jxNPA-6OEr3sZ@s1H#Sf z?=Itg6O^yCH^n}Myb_9sY;dl4(O>Bbv*>re3^F3Z$lK=(t?m;Wrx(I2;i-uDgb~MK z9pnlQh2fMe*K1IK;0?xwB0NTnoGu%Z&FqXkr0rm5DlcoBLIdP{vXY{Lmz=9pg_54n z%o=c~G0a{Bp0j3QO7vBJv+?Ia_9gl5;4XGc{&DbT`D-w*CB^ITvlK`#Y}w}x;iom} z-Hr209vi{oWdJW+Di%Q!Er9UTrS+2vC2j-o6y>}BUexiq#>4dJr58r!pPLtzMlu3= zDXt++Ox%{=+x89hi>Q`~jdFZ@R~e^y^6}Y7m3R}EkcB&d^5W+ObSTR#K(hOl@QGyq zI?CQf_$C4xM-_!f^VJs=1XyZ4k^Vb zpyZAO@?HkuA@rkv)|U<=cN_tOz+;wPG!4BZEFLR9CVk($1M^i^@bFaDKIixq{`0u_ z3kax&hj7Y|m;CKe3p*_TIB034e;&ZPWCNXxA&*4U;bimcLakuH!R;D=>kvmbl=BS=mqg@1k4YC zW%Lkz-JBAOa(uY0|6OFihd}8@KTcg3{t4{%>c~2B`MyuFN&UXA z9iO<#G0?qG+XP3Rszb4WuLfPXGP`fA