summaryrefslogtreecommitdiff
path: root/scripts/checkdeclares.pl
blob: f6d551c84fc6443344752f756731c14aa73bbf08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env perl
# SPDX-License-Identifier: GPL-2.0
#
# checkdeclares: find struct declared more than once
#
# Copyright 2021 Wan Jiabing<wanjiabing@vivo.com>
# Inspired by checkincludes.pl
#
# This script checks for duplicate struct declares.
# Note that this will not take into consideration macros so
# you should run this only if you know you do have real dups
# and do not have them under #ifdef's.
# You could also just review the results.

use strict;

sub usage {
	print "Usage: checkdeclares.pl file1.h ...\n";
	print "Warns of struct declaration duplicates\n";
	exit 1;
}

if ($#ARGV < 0) {
	usage();
}

my $dup_counter = 0;

foreach my $file (@ARGV) {
	open(my $f, '<', $file)
	    or die "Cannot open $file: $!.\n";

	my %declaredstructs = ();

	while (<$f>) {
		if (m/^\s*struct\s*(\w*);$/o) {
			++$declaredstructs{$1};
		}
	}

	close($f);

	foreach my $structname (keys %declaredstructs) {
		if ($declaredstructs{$structname} > 1) {
			print "$file: struct $structname is declared more than once.\n";
			++$dup_counter;
		}
	}
}

if ($dup_counter == 0) {
	print "No duplicate struct declares found.\n";
}
Yb(ȇu&|>=T^( &K\ W̆`{r8l=x{#{0BI\26h=䵇 "'Gpwp# тJiYYr;j]  rֹ0Ԭd#suў!!f*$.(ްAqqL#%ڄ=Zdi?b#MB-imtǗx"n ?`mr6 eG bwEs(w$9UYsĀj`Rː38Ȝp|<!+Hja?݁E ȗpkgL!x xC q>@WXq P`B_&\C)g1ԛvPJREG30)hh`"&)].1D>N.MX\BqK%F v;&"]N}֌ߘ{=qI j|O. 7^qnO'{?~nr9#,:"s,U]fli;섟 ^+R߬*ru~sh>ӄ6qx+M?59{ՁckQأ>O$A@ ?vib^7, u{mOe ')R(UTR|D?\=h9% 2Dy|M`Od4A܅&L~Ml_~0~6 d80gL8[PTQ$).5\ɐHwLOI;Mn*7hҧA6o 9{MzN%!ۨНl?֕M-Wzf_`uQ;zrgtIE'MZ!_S߱u?\ޥ;7Iv?9kch"Gi{ŦRC)z_U-E`\ y[@ n܀lM)Gw~\a(ƃ9lk{N*4?2C\iOuJ7s=D% XB}7 m[ѿ_(%vĂs8v@ZmY/%|Mm˫Qu4r!u/a&,p" z^ڗąB-7}߄]`2Y& :lRЛ=~^--?v:V̅).o.Kaps5Bcs,Hu^&7߆s}?>`pu?b,賫wYHNRfd[pؿZXV j]XtFGJ^Ikfc\2uj-!ZKnžNk Ho^,/HVonn=OwZ=-eyܛ'f;KV6ZFh +/I!hP9%|f?7vxz,e=^ηEeXZ z7v=K{Ujn33x?Y4Zxi AHwns]vC+>-Kki+wL].iMgq8aA_C;-޻/tk\m/wNhGx}4_ln;H-l8KkstNwjUR`JrFJ^D;dwO ?-x_7Y}& 4f^Y), R1gU4U+%Wgw˦phT'6IsQYg MWX-:Vu5k9{sQWS,r RaR#ucc{`w P^oŠWQk~q$=b5LH`~_rN IR!ɐt+QOPp@ӊ=˨|<9o=D -sc2sj$rECDԦ+7 ahg5 ɫC[aVEHR^*?!s~\WR!(7[r ev>(bF n3zDkq{WvNl,ANOɈΣyP=svŨ7R9q}8Diy%WRb GC!@Wөx ͛%mME0^gOт'ۥK&oDYzxAnĆc9]N>htAG~2fJ $"o͘pL0Ry!=3RQ}Hk)C ieLǧBJU'|6-~YjqߋJ R~"1a8R997ͶLbQcKIUVƸC{"jbB U'N þ׾>}N챟t\l6vtFl=mdd3=ZƖ1QXO^V<[ M~UWzitٯ=9~j>&zV.c%:Zțŕ/JTq 9J1^8ќVtGsy篩+^53ҘGΩyk֬M-F[>DžBInkCikX笒fsc|`͍lt$/T8bX>py{бlHC@x@ ++xUxbnG=_Yq9q£ {7aȿI/Ɛ6/L!KÎa LFb3P烿$o(m \w3dV8Fٕ!1m/>4!>^"K 0:=κ̞!l3ǎ ~O2x|_w" @_^悾ФRGU"4A#ﶡS(韫/SpI3do'[>_l,q'FP}"wNoӪQ})>]Ѐu;CkC݇ϯϺȈ/GmޞZԎt˺Cy6|ρ]&?=kKo+[o]ϧ /Ϟ6eWt+7X.CG:,^|ĞNV8=36ujgoE斠mÞqˌ4b&ËsJ>lã[#ۖ U<ԯ=C,v?ߧۃ^Bޛh$#.nO_c/趼j̗~>Ih-|Ўs%TWԪޞMgqzy^ 齜7]3nw@~W7Q4>_O/[ϋـl;5b44#]j P|jm-v:0a}4gF 8W 6'N~/~_4Ģ]}}6c^PBGo?+j[m8xy.a_9TKZpU"vI7oNưk ~V v6gYˣɥ0<ܖDΰwB+ ΄ȏ֐vL1qF?MFOS#;`$WgOj,}X!bpH%;: x D __x0}daZ&dU7mmcU1V^xA*b$XՂ1Vb qVH UR_bcs%(Yl(yWmUUmj$$B B_r}MTMXtZeJǃALnM9]2W1o)y]sfLVRlL%p`6!7UVIt_.^Z^[`WE:̑ O߆hgFdd8m<_:4} K;,ty)FnQfxӆ[rA/Yw}f( c:X(P9`ae\̸X{ <1')H"D&ҹzв}zw߽qpAпzՍ؁rP5xH8xyto`h)O[F{'緞}|ci4pet'9ƔL#H$l8gmG*P@P81AS%U@i$B/_ʺHfȉ>ח>E wJE\v nړ1.Oe2h)9->{Bvvh(,6(2X w\1뫵:d;8@A27O{`s9E.c?OS 3Xc2./xX09=0 aR%mʍqE14~tO%>/g^vV|l QxlwgE$4w.V Uj ~D[ݦ]P4mH B oj)tb Bv [#Ni˯YX=v`v\z?ѿ>Bu/zT"]-}9ч_7^"ýd/b͝Uq|o}pϯxgv<*kDH6nU<*}CAs=eP(Iܣy뾧 p!ݯF%`s>}‚~i!1ЄˠPoֶWmyyi$v=Z)O獔\ KuߪlkB;J_ຸ[=;Siv~H>}W +:[cg`A,FܟH߹+?)^K~|<#KG.[~>8GO߄;{9;`2$RC#QvBhfrje?q&AQAjdSGi3u}uV<q~A׀!R鐼Cw_ >utC<~ju{ee}10Lm8WO!̉S~n=o(,|< 0kw~ rɑQHG翏a`T\}U}ۿO~ۼm׿~c;8ă/}Tln덶ވrbob1DQ@`(FTb"YU#sY`(tpdS86ymهpu k\ =20nrĨǦ[Yѫ˜gi8T5g_7@K-c+-.dT !jTHN=P{ UJKZۿMvLGKF;95M?uLjDD ~{CoCCo? ^bh'wv֣AqxOsDGAo\Gjj`Ꮋy- 14v,<-ߗg!(v;8|s"^՞"P 9MJ^npJ_ga ~C{L%\8TQà!hPij%v'P);g@!|`ܘ^ *l5 OY'@h,#Cj $R6$vF5΃aժ08mX5I1AHk\R6vf@vޭ4I)H&?fiBE3 v8I]oh7W; .B Iu8g< :I-RbA h@eH)m#[o4)ʂ0!Mt m5?-#z 4 bMY :Kq,\12s ?͎Nw $xfG6@= .Kם.^{}Ln량L=EQ`4<9]v1Ĭag5˭{]_X~~Ogv~Ag( UHU27_Rz ϧ^A>vTzM-O͇S;[)ے 0^6t}\7Q/P+YĞPH8״q8 wꅍp= ߀26[tM㦥ӮxUm#fS'?rvQUscxF t>l;m}}ou@}/^-C7$+Fn]x}oR=6C.ݮugw4mV-x-ӄ;ѦiAGC26xNM(N;'o~n;_&ճ(ÿr꿟e| ^NuQulG*ɨΰj0u{5OdigՍ=~Ń{˚T7oV$Eݾ-dL r/4Ŝ.b ~rlDշWlkn|#^d/'z5;}]Y\/NG[]`Bi9Z%HȆ?IAsADHPHS2<I/1nuj7zS11`G\Chy_XfP ntr߳ k'Gt֍irS6"^OB@?Eܔ~/[ezT;yP//=v"yMu<#7T}+f.8J=#8$v>poer0їЄ &#U#|%ؿVd[!/1خc@A`^+7A1otJcwORnp,Qng_WGL2]x- Bۜz WKv˷Lu!aяgOcxg`6B}\cc` hLDlGdv]֯_0k~0kc!Q}oҢHO,ujJ۬\9qRjv+.k5x?]_?gvK˥na3Oc|z :ܙ pS{ǝi6ޯOT=Cøt,=xAw+t޾ޟԼk Rh4TA82iG<8$U' '*i !iII緆cRB@X`A?So=Z^ гCXCV`dG ~m>o$ܣRQ+̖(]tlQ\;7>k,5WyMcpM9rǧSF}vA4%\h;! ;Ar^Ŝ|G֔!沢K鹣5[Wthn4\G4u?DzO?eG4Τ)ݏ>$W/?j;^=ˆ?nWܪktO2ǻb:@WtVC3ݾaLT*f$"z|=q'~3y9*);? Mlu7'~M>S"Ј$Wv¦:sj0No}BDS =>( Ý爺*4GꯦӒ/u/!G3ߓgujO;BMAm9d@le/"*_yx Le(gv`ƮTfm.puUzkȃ8+Q'ŝXx7+ry"~M`  2+e1RY", ~w|v lo8]_6́7{V~Z\\n,"++IwkwPhj0K49Z!OMy]FZ,Yf荰i cTRQrP**i4Ntrgl-%Wߡ~qQWbTɱ"FCtDw|/Yւ6QA>hC{$ #xaȞ6ML| efjnbN ꧡ0|3J[˯vl^{] #f|95煸^'>cnW?-A;J}@ El XUs V|rt1W@SF0rӧK9y/rKKB^ABK mW`V =Qj~iV]=Ŵ1 Tй䳢zv% ?^jU)>cOntq(0yzZ(0$ īhҩ?`3',eFH5vl'Q^5CVj}B6W tQF}DOr\nL6j6e7̋{‚& 1n (nE_cLE}b;(V~ov4cGf6x7_(Bq:ib€=6XK{0"U~O G ?; ,ϵ'%&'>/@ AI&~\t yݶge`'Ws`J/NHھ.dU“|^e`{s}Y *l éEѥ7Ӑ2 yƈݽ Rn`c~@ I9I[ h Z0E6{.kQKC7|zkQAb '|1 +ڳUc`Vg{0 8jWZ$'&υ1p͎p=:H`w8ᦧqLxo6ΔKggtT /&jcP#l{NN1dݶ{J}^u{Ƅ]ܭb@<=:< Ubx@ 5z}P_ /hRDD8 Iof VFD0 BHFJ0{]e&PJCx@Ֆ?׵"B~rcCl_GtQ`9TC=ɰ~``-$W ONy<.zl%v&zs זR/|E}wJ*Wݯh mYGڦ~ցۏ1=ޞONZ-6Z \p㗪5(IAa)7x}UT~*|Й9W-|-B3`$|C 폪.y{aDZ3<;OB_&( { :D9d= T?} r/N8^ fk~jZ @+t^7q r/юb>Srt"B+o98y{|t -H .KJ"Rw/ej;`g&uaoіXUQ |IJ߀aNq{owf.F8JF26u8_yAϿ;@y ܂^dFRU&vzL,2S(87p垱H"UIo5/ыt` >.W6ugmB K߆z0uUSx[H\2#-W$9HGtg8q12* .s/47W+esCd("?I_eaXtdf:*!& N1$[?ԏ!|8GN)ns:6ӈ8pe%d0oǻ0-Nߵx𤒚&ptdHL#, ~0)"-0!uv0=U(CkP70n㶊"Q{8-Qx~\eWi9u/}}N0ی~ce]=.;NrR^|ᦓ*BKY#nhהy&kV4|$DN^_1-Fc6 #⡜l(Lj7MJ A)%G{r9}d裊 @_{.@%;Oz]ͬ< EH X D +M%7fBG/n;7o<0 xIn$خ9Kųg2˽*+(mcEu)6%wR||~1O;{x::Py1#r"n\>Q$O^]' )$50>X@DAAʊLU3#9ytƎ?WNww!=C?<F$%"U#?PUQ`IªN?~@@H6 \SΚ >_5c_qhǁojzH)ژ{_v#5@<TԶED} ~t?wucڛ{Ô WlNl#p,o>A#ݭw>oWؗڛv3.S{zYm8FeMJ>GD1^Lq+aYWc0$\?6ꆷ'v.F@?|dfP<676:~cНa]LhXd}2w;$9U( E&MFPȍqSӾUNq#"^mc{$s7phQ91 yB cqcټ-Ii.qP:'tD"[^ 62ހT `_3Z J*)'_7dT cǰhHC!e8.?`|rY|*a ʾⰀLpwȡjcʰsd8Ʀ\҈SEYKpe4EG髐04:6]ԗ(^BƂ[y'CXB;SI~]AH[ڟ?D)3TD:u,jGa4s)q0 4K QRxc#[ک.{]nnz].'V%e]ۡ4>Ognz\cQ=Ey.o-}v~|wހ'ǭrz4mpgw/sf, !PJ~l<>G!+$$D!(JD~;#h{vj6\><]mdxr E0 36T!0QI6rikpHm|a 5ߢ"\ojΏNan!Koh+@nsv(ï2uXNDaU?@Է2/΢&~4 Jf xՋG {?- _C]Eh  @Q:=. 8'ppw@w!o'6V;GýS0:#7}i2 bb4Q2X5GpU&3\Sd ŁF:߱~YGE}6 ǖ^20 sn#5ϙ "0jꥅK*Bk)Eb#F(˄#Q`,߼dPiZ5zW ‚UrY[9r}r|x[}me0aLWFͽڋH4'sVp njijQ>UY6WFUƭg6vtgl&ڗ=r &ώ1#03~}e³9]WIdH*d:֎MѐQPq - *mWQr ;-(ȇz"/IQt zK:Z$L>Jo/NPSS<m^uI &B}ȠmcPAGg1]-߷ksRks*d'a|>mb_W@"2iNHX_<KYMHs [àOD~Pn}Ao uU¢$ĿQ%T(“mXF"*Vdyqlq ?CFCP$@" eP }?)SU!DB>4&_n@Qu" axڢiLGg:<GTCۘ,gQMsJDv:9l`0]egM]0azs ΰM9aDL~G5к&2V]׈s]AUX _чg"P|FNP&^!MzFe0Jgfږ+e*2ύoH鏰JF˃-F ]r5ͤmg @n0նKٙ≮V]jԇgxbBZy u۹1kXeP5q[qfEn @ËxY' &SÚDՆJ]I[2Qea]Ԯdɩ#m5Xs*O7}͏N2s`il iw1 b0ũ'[g'zpڡQM=cn&6jn5OAN᧎ܲiZiVDG\㋯+/-Dǣj/zr&_˭hUTP%!vF3 V!W\9zy젖 2-5 jV&9F?'vP׻ߋ#&Aq!w X!b  ^uqwsk-}/cu_I\+p,i﹝!t{T*%w|tُ]*=bnl ͜.2 ҭSt 9d7vt̀tT^-Fo a8Y!GA+DXQXͰzSU0i\ >Q͜;j\bӀWkݐ[o3ɱ63#` {̀gc.UpьR3A4UFO0,湃$~ޥ%*g2^K0ٰ醸۠T֨X56p=/g<gBU(@{ܹꛕth ,yv:{xZpJlV_~=T ~`i{nm/DB] UW~T~@ faf~f/ 0?oc ZC òJk"j|9»Tٌt$2XV,V]zXX|ϑ]-ӹ/ZEjk7O[+Ź)]3ClO Zq03y]T+ciߪv(}f WC;lB>M6AW!({|e.w a Os30$nz맄H6_%2/f0UUU'A)_n"KT;HDWUpi1~ge^:%4_WOBjmϛf0Gu"d9m[X [\CZb`E }'Ox뽓s q|Ξ}+;hQh[Ήsܷ9E/תh/ETpoCe'Z* nr0w+7F;7:1V?沵&G=[ehа D F@NӅ^C]X|>ϴӔq?HH O%[хO rpޱ[+uxRڢ S ( *Ka}^Y#AfSvوbc>VAI#".ǻQɟ˔.5w3~n=)67+ 纄E+`dz۩E')awg;#Bܸے- (;!vWn?,Qyp]x\]ѭYrsZR0#`P,ȶaJ5bfHrL\rWfȴv.e'CNWG%g9'9}blZ]5HfFz zz,vlwSCNe#՝]>oG9Y :$GЅ.~*JE` )Kl4WU"O3h.6lXl#M(*_f#)W<' (ECMVEa/ț>wtr;%bCPP(S)2Fm72T/ ؔa&גVxUi &MIqAA*iXQxc܌6{ v`<37xxq&˾C\_zIy)qtf#ޖcnJIV5h(d3w ?]X\]<ْV Wg:i:5TR¡]".1c.T5gHZZP=`n "똂ՃѢBJL[ ț…'+YIi.@ċES%^!<^=J*rd,( bf:?=*Zگ[T3n3T7\ۊ@Ag="-Ըk58Jy C:w]zHOgBgG ԠS~iԒCD2zRsgF3mx񺍴?sg/>,\i&~h륜5Z_'):w~IUnQkZ Yd9UT ]4Z[q|0a$^p ė`r̀,exBrrEt'KI9CFP #T;RJ(,#Y CtNFnuKeP,:_a;O](KR`a7Egn8c|"8`@E*${Ȃ5JxD+W|wMc|<ܷ٨: eiVKuZN."v cJ_N`Ϫ4FXPFiRGޑ^ڌS<89//P4;MlwE !ྐ!R\1׎ټ;*l .?~r>~yF,?:^8Mqܼ6]3Gy8oZf@35"UYknuGã $ )"~gчS}'5| ;UwQm'(>]~ؒ6^9Tg {d ㎱ٖ=B*MD'@U_޾Bln&g_H#Q aH m@8}eDRAk--d-o Pn7 ݽސu0 O@ +P"kTӦ ]T^*R#i"L!+ :C)œ úD9J=^*ǫOqߦN;,+,,4Wi?yyoVu SJVͿL>wmM:mv4E] q?xоg~_n)qWNTgޣ~ΝV+qFM{LCTN׸s߷SN۴ya,5`a79(A7#  ]\sO /{{~WӢZtF˰c2>NwpeMB܂Ǚ"gH"J3M$z:MZ[T#Er"xG[X+x eiÈߗ9HS ;__ݱo0t j˾rwWxd{:yFҹLf]'Kh/T!sᴈϊ[b{&<6~ЀY+ݐ1 wN9Kkv UEƮ.xDQ~H" P*||7ĈVAʡ}ÝCgKb0FH4qݗXyJzy-rseiTW4OF}zg>+̹?;7g۞t]+w%QuihTRȀ&bV~X|L%_pG1eg#%{;u}՜|-{j2{7s*@_(&Q7RpRkUrDlTY[=_Mz:KRĹsٔ@Ȓ Mr,#4s( gvS9r(B]Sy X5j*v%ѱ2:pT)c%EÂ>Ur}lyd0\f6 lF!~\ÐϭFMlU uNmD!" =(zR]yH5 pTkwRj2 |<}ل2#9 V!1Q6{]GbP L̾Pwx \C 'ý0ٖ}G"=|M :pVR^0;uZ(s\CWo Cds#RS?T?>P>@s4%@@v6<@GGٻs_kcQf2FKd#Fffj4pPq<#vG7vofI@GN٪{z/ԜLяwmsF,Db>7?|RBmƆXOg4=ߣʁ @M֕7 DD*x̍ojF|kwB࠵yȾ;@Qs˚)D |L1*$'w5!M}aK0Bԑ\\8Zi@ d@ge d6Oʹ0#_0eAѰK34A ?;-w^)Y4hxCU2*D?-d}#~Y~)Ծ\m>a@:`'cUwA`B\<͠!@j?RU]U.,1S׉*@*o k&';ocZts0%{/0fTs!bdQɨbF%,"s$Jٝ`Lƚ?2EL]Y+xp %jʍrhZ|0ɗkͩ7tSN&}VxyV*Q :w8>&~4{;!pjI$-Gp]d`A #r,\2;YVOTCCcZl>;:W*ĶwLa\| 6Y<څHrJ"l)QS.FD(9FN!"G{.DGbMǕOӔ<ٛL WpVdcLDhhO]ވfJD_tN Gy:S;ш>a07#CA "F1sf>QؠwL7)4~Jp7ҎyLhC>k"LipqLs~Yat ,1Xi!|x#DpIBF#Ւe, '&d5Ckq#xZ=|j]V8!Sa{#(FxP] SAuL']3/(Hď")3zZFp1,Hl&{i|W^j+g$n1:bs̎E*EM=2x^"ZM}!}LD^!?a;}`q~-g~e HIu4d$18x\j4nxH3U\ es㿣wWѭkAtOw%?LP.Gf([Wo'NCd4eXE=ĜÌ9%KBRR5)}7D=?-^~qg `WD6r0ei.B|δ0B+%4}s~a+<΋L]]M_~p  @U>~+>׷_2@Ԋz~ 0{:E.7&C6aqCͤ1.R#le»3qƖ:܏rNСS?L7~(0Ȅ0A7F<0QEG?s]OSx bI}&Գ!I}+ᧅD~o҅ϗO <~7Ŋ+灡.p?WBx@֔;}-?C6*?) TgQ@.[1 !Q_ʠN rn^Ra!rz#W:83iT7Pᝇg|īϊ]FdJ*MmdL?b ᪏1¬ 8cg|K0:"&%&EXF AʙM֊I98\SɨK̠NpT׵oVۘ33\R܅64fSLTJVW ~ْ9NWX\3F&DsH@q$|@ԼÉ$'vQCACO?0E(cE,Ze@՛nws= 0qE_< ESΊa9oE" B&57,ąv77mPJLH__'k|;21þzY _ KZEBzGny_8t-hXCo{#W, \@uUJȀm1Ψ5"]hLŌeRQ\.gtƠ&t'k#KOvGEGju;oAŖyj3dR$909;cbӳ sKɓPCeJ[ \e ^AW{v X0ai|՗z``ZHPaSZKr} s"Bc uh. {U@ 017,a%eE^84v$LBi&HZs}WʵMwo4w_MǾ:׾K)"}{" 3޹7^uiv>=?"}%cv&9L$?ղ'A {p͇vG>>L@ڕ^K@x_{? %`$׾@k^4, kN^# X`c_\d @e`S9ꝋG2'q 龂1I'jԔ dUO 9ht'|=qy;|EO>Ioz†NHMYDi}hԼ#.x~D_yZ HoXǖLqBGq6#?ߘAߪ"@A AfX ے⦫}u3`*1;27ufDĀs}@7 4\=b9İ9xon/"z3E젡#t:_NL@xqI;]M f';*t }Y"  Ie._\'H~d'5@EHnڣvk}l[QĄ~"7Tbvo:gDnA9 WGG[}-uc\2E*?7B 3;U 8QnQ.TsIH}(E*`5:s#]Ma[2B[: `8OC;Zܮ/Pcgw}ziiAWXWmɮ괉~.{\f@>qVSqH4{]sT"aB;ŵ)G3`pPf!a(Cѱ@.) okPEˑh(#=ntm=)jZ;ظ/VqU+3K5[0bMl~,j^(#dQ^Ru;S <ݥ5f`Nف] :臵~cA}͡ISd=Tv.3,ʚ2(#\hDUUTP<Ӈ:ΊaܛoVNAg ,Ҧ |3L* L~[>LgfŚIINn'/ HdDMƇ7˺ޙҴϩEUsF69 ձf3bF2׭NK{3 ӟe]*p'܇/DOj(h#Y;%0mR;P4pJ2!ꈥnKP|<n]?sb f%+PN$d׻[仗3 Y@;7^SAk<@<02=:hD'?Q*$J I6w~"$h:+& J<3k)!&&k_91Ʃ=MGۗ F!{qOz3A$Gt//dcɏhPaaKGy?RVS p$Ulz:{E ð3Űa1" (qgٯ`"(*:u6>}'{+T!KWE a=I$v*Y2 pjMh}ڋG}S&v8{у>TwX'Jay1IHP$UL)Tlhh( kԻlw!kTXMӯ`7B6[U*m"t_cfFJooSwW[3ߜ㮦Pl({굁tDKCpPVO炚\r'nLlc C\eO&hɻV$0q.(5ͭ8P r6$~#Y@F`Ee/ӗ@k4`we΢Ǿ 9!0Pi")vC- G[?Th=Uv[W8u]!&JJo4p_o1C|"*JG1(%:y,%6sC_7u?o]ag8! |f$\h@}y#ܰLm[,_4z ecqvH@3DEK> &@ _]8u6z?n`f4D}`zr5Qٔ{Rajh7;:"GέNX'\Ď_0*[ ` BkPkBs3btT/eUJWxS2,,/\KxEKs[ЂYP3>͙7{@RhOđ\a[-'7BUlWBgAWu2LymM dAUb-C^H3? %N CP o' r#|H;+G;m!]ApH/R}{xPB z :z' Fߏn#Lлˋbi!Ɇ]=y.\x8;f(,UI0:M] F`!,Oˠv=Է9D""``[t~ru{x3qj=UZDpZhe@y (.˙׿s_!޳͋?jRĒߩlW核xh= 3j-3^9rKo fpؿ\'ӅS s,, Ī& \q9rJ%/=@!^N{˚p)O=H7ԉn|`1zL[ j :0iBdb̼효e n0Fr6# 1L9,5"U$]$|mRG?G x:fb TDN1"IE}A Ȫg5(D)TI4aa^? +p߮[,LqĺܭрZؓCp0{pEr:>*;ߋ4r[)mjR'~B%d!s~h(npHxQ;nmΣǫ'pA Ö#Hf8L&W'8XOatJd(qZDAA](Y|?)Ax~8$@,Pj:ʪcL|e]Y:Ń[Jku DmO}p|3B|BE $K !NV,E 8S.Cb b cK WN 8"CB0ϸΘ_k Pʗ5((PB QZ";7p愺2a3,7.O>ȭ8!^=6 pao%Z;+C3alZjFGR `FT}N,4\-:Y*0F&~}NjM^v<wD! @Ju3𱅭 -o{+iy 4|ꅭ0J1ȵHýek8^.#~S?Z`!G d< {6ZF,PFNQs{I lb4T+@w( #$Qx_;,Tª '2 ``DFqGcXftHeqt} *c;q{µV d<6*}aL*Xgc !k2smrE2/,7!ꔜ ]#&^ [fP7bR/"s`,GOE0"_i_ {XMh|ԉ]>DV _4(\"ޓBTԡ23+н/1Q'DpO0@sR_+RC`:"^^D. <ߨR#@T*KlM ,\.Dh`}`Xɜ -vxXr&4%0M{..T  HK*Q7иŗW՞C/¬_뵤nN oӗ-mT[=ȳ#{]p 'z"<ژSQg `uG4=O9ܫ$۷*#^;Z.ܶ0N꼈\tv|=CPB1wO6,fQC"Mdxݓf{ i(ܩ-ݓ D{0B7/KP/.冟Ma=r5M̸J7n5gd\('C{BќTOywm|"LU=oDQbjk=$|ok&p3pJ$ ^W%Ou@}D@P̌O%A֨* 7m|ƥ@#zˈ_K_E~ְѣ9(ޭٖi _w<ث;'OO a0JP(øs$6\( !* Z(}2uhc 2@$K~C;& MCGJ݂aHiJg>׃:Q|j ,xaa>10s]:x {+ϑ԰hayY whr6q]goϺ*e[Oo8D&Jl][ư61or,@`ݠ(I7RP[ÅSgõa·O,H%u4`.r))^E;?Kts&5  6s i L^{ѹpۊĻILVkPfn)/"msuY~/5b&&H0,Ʊ< @`q-l/:${9rC4u92pүCsmp~97aW0 !V\<#qt`,DHDۮC :=Dfvwdb P2@N v$cC(>(\}dA(!y.u:=j-vk@ 15͎1d]9.)Ov'5;[g;>҃|X*BfR}WSİPB*QTvR2yv6mm(LfE=aqA0cZ]CwepmƯO6؉ lG#ۧuWzźއ*|mVH49rٖڠtc+f_U<@;@'NHK}KsY4– oLoD=<N,<rW.q9 VkK 3P 6,9öWUYB`SVA#gcWpr|n0jaMCAg=s N}#.6J̈́k1~oDB؊d̓l%sNI/ԩ p ]"Ē8ÆUt,Қ= vۘ>tR<) A;yƀ$JCbS(t㈩HîCv;9kFO0!\u}^zݯ0`&¥5. bIceWRRc|8"7Gh,=RvKYs3JWGSdrd@:` 'tluQH"}ā]+wlrjZcxj|"XE{[/h$FfU(`x=]λC)lg4oABMC)k!I~ҿ-z5ʸ!TČaxqB'4NR8. * CVӏqT{|'TC>ogGcW&rz"Kg4{ݸ$W8ɍ@3= /N!|d$gb'Pr+\ . 3:jA#1BD cٿn0PXࢬ9ffi6:C`"_}pѩrKF)HȘlrңq}z8W w!^U?UnE , F?Vo|=3Ue.!`;}#y^w>L4OʼnМ!GIj~Q-0` ; ekzaO]'[84;454s`L| @[ö?"Y^aTH"F}sdbav&Vo_Yw*c?R~Nf7k{qɋō4''SէciާHJTYmG}9(ޙ0~\> 'v&$K<ǏӇϓKRh|c{JA`$5nKS4h{6ZDWK ݤi'uNP2Yy' <ݓ `/P+1_KŹv0И:W mņ>ztOyD+`"B58 kBY>~"etE>F#ޣtL7M>tɱ+.iX2@*&kF-8n|^an)cbwbiG}T~8)7sPC Tށ(!N@&8D>:Ʃ#쭊L(蠱1BÏ |\>F@!u.|u05OS# = "*Mm,j[ZBB"G r!RRĜ*lwJ(&#Ъjq|gpv {`kC^HKM8=qs=䀈DVfdۦl&OGY(ͷ:;ot+`ld-5a(mՇ g8ݴi@x_u)7t#aGƎ2I5flT +GpMri0+!P_U %"]c$p]2t^@%uāHꬁs !B,nak,Eyo"0m 'DŽ=#R+bcp>ږ@%/:Hsۇx ]6Y9 z5I#`[!}"rn̷Y@+@iug SPaS@598j#SKsZ_>B +,CA6L=!6}Jb%Xbl1v@%/樅vؓ!ϥfd30M3geg|=,$F֢.fe @)mɺ Cx+a' /u#ߨj+t?v~Qw!'⇓dpH9&ƨEYktmiµweAB*øzcu&Yv~6:~?r̖&:_o4ml[c(D@>oToGa߶~yOæFK.vgp M%e+q.ʼ<Vĩ~ЅA!K!-@x? JJh "z_2:/" R$I"I{DA!AkCwWl_(O{@-paAay_~{u%zw?H9ݲ%E4唧%'GcٺCOZTFtj_ui?Kf#~?im .A6V'[,k1 ^hh[g|=WLw^c[Nۦ|ro~)uѶO_(a^76~۾9vcsZ82I_#_ :E6DF3z8? %gw.7u]`bo 2 ;Ίc|ָ[`yvPo7iayXQ=7jhͻ'AܺxZ[)ξ:`fP['W=}}?np6Oٯ3)/U@?tᏨ7k%^XZ2iUHstuYL<4f'PR(KGTd^_˸DWz᷏g>w:}W~zAդ=<* z襂bBaѯU3Cdbܿ3V<:ݏ@|/HzP躍gpT_xi uC\2_VڝS]td4Pƍf:'N H'6_ > )pER?O&x lϡ:ȕ?AAߚ,H9Ix5c0߆T/uvq+ ӣ"P}rwk;"#v_q޳ٹg҇zU T ]m.h)K,21hgr !z49}!aYiK|?n7?gWeDg4{,Gg??Wy<4O7uփzsV9.Z}cmEi=żLj۪d*#^Μ=WllAN;Dž͟/gΡ4e$qmr˥<|+Vq]oXHST.vme_e@ Rn/eu԰^_̣<, \4s2>^QHX֞esG1! lH#uF,~V:Ht;ϩqHz'`Ւcqq)2^';1 WNs{w},"ƿs Xl&tȿY|,RB ȄnݯOw f ^Pپ>{H-hX^WF~umx*n41PIF7 t|~s[K8X:ߴ(Ɗd|XM-}W2Z^@i@X[^D3ެnޜ{Hk\Qz'G?8U kFI ||oMMGm/kgX96_ X|FmlOߞ{1ٯpX oC,G @2u>(}h-}UVL& a?g;Xz:ܿO=J~IsD0Ό.o u/z7z@3vK@ní?(d?sGPߧ>d y9e <vѥ":4>ï,ݩ6ᶛ!XJ~I@.vk~> d}W%DVC>"Ojׂ`-!V (~Zo[ )1F+, 0"^U; Z*y'@~ W~mΕdr - V{oHc*p?HDItCpzxe/bQ!-SLFP[%>IS{f6w'fIO~۝sW5@2 Z~ D Pv!u E@ vsqK>/X/`Tژ&ޟXhPbC<7"T[tHkӅwvFz:F9ZGZܭ?W7 R9dχ!E~ >xcx]&Ŝ\sQeܿkt9SsYkCWsZhظxzp\ wv6C7PV`#lVYH%Qaxl2 ڀIq&WbX?C)*WXM2#KY<\)$~sÃ[5}MT5̈́+ .?E|%Q++gt0`{B.+#wqc ]G Yӎ4N 62W$*%1xƟƀTBuJe˩^?߈%']!C:@XߜvTpDxSrG$v`Tj ftY&BHb!`ξ8g?jz*!H=G7Ҷ1={SGxy[l[Eue-Yļ(9r{~ĶJ$ }2~|+)~/2ꬡQU/ %;5_A#'wk09r׋>FKq&ȭ߫E,d(p|>p ^5 -U0.xY8rykek C>Y/vx/j!-fLy jAqD$rQbisDquN|fŨ4Ti J3\=.>fT?(?V__m欽[5Tk<πί$ZX!o0l| ^YsTu` ?#tZ%*LG 8$%D֭{Jjo*~vAk=ٵ|':N>/}Ut\DAYQoAeu>Rp. `Gq'dA;D 7'f`\ˎ҂hl׍ձbXeIӹ~v-0]?QӕKt/:2$ɩ-j{ծƐl]|Omm[+9pXj5_$7~iguק>Տ>cJ6Έ'(C `{'CӏGbNbWˤ:6σ7G戓EVaZV.V\$v3Ps,ǩn pub 9ɲ5ٷm;&m-U c̫{iq1AXt)ɋjE&j0E!3-օs]6pN_7 aᜨGs۵ڝU5xwB?0%wh'7oNghJh Nnhΰ)Z3/4[; ?< O" nt?<ЎNw@f@+OAK8Z6Dg=\Vm 9,o*]`, 'P7g˯!yM!Q7>v"WN#.p}u2׶ϛ7͈,Py3*i)b`6.->1o,c8}0^ 3{dܣ|mݱ%ADE8^YCh_&OwoZ[AܓQfr8ˣe' ;5+} ~>1_,L9!e5rHw|eo㕕d|Hy8l_ j."{0Wd"q9Qgͱ~Nf47/E?R]3L- GOm]^zu€?3 D^7iI#H2@$ŋ T<wQp$cd]o;퀲_U`xа7sk #!@zS Gź_*$y4aް""u((ycO1W31 {A)nv5! POm%0өdMprg'_+6 1^!e AX60!ӡ$|;@ht}#kfV5Cdr$j~xukrS<QOmU=Z8FaZ@"U q򁪣 @,@Pv6mщd.Qӥl@q`M;Zy _S$@T4  aCJbG1L%ō2Cg&B@XYS;?N<@򣵝s ǀkk>SN(C`P`˒ⳟL/kgr~Z”:Vm;7@<:L8Zi[ )Y1b\>N= :.~}SK3z݌i򅝇m $H%7fD8AM֍l 0V:.M  : ZQo5b`db&vh^P$=MNL¦(=jI:'={3 |9ѯ)bZ7H'KE?p>//؞f.\ӭ83?|oY6^Ooz99KBlE5hZߘ ͈TN7e$^뻼G#>ix3،ay:7R:Q87g^cixq}/'0>8>w?}0d' XQiBc.#:nu^4j(@ @"\N%4 @ 90I >nYoփ=t~YG7>x'S܇,ǀs9"Gu砫& ?~>˛쿵5ca ЁAkZMάLm2E5r]oNp3V9s'FRbA6cO XZp_ xLr ۮ@1ݑxן"L FӣxEb/U׆*" ]Fᩍ=;sΣ~/fIXFvy~ب_cҋ/7=\2 8M8kGeY` yl)`JVB+s,:rf_)ںoBn~ZrԹ$X:9,(!8`U艈qBo79 MQ*J/]e3ʡq׭򆮖l{޺Qsh>^=>^| '(t)Ųgrñ˚]pn[᫘q[ k ,~anב^fp\rl[ii A z 2אX:[{n߯gW_8eul?U&&!Uͳkl֫}\ SKpΫΩ i^X7iexp_ri)9r5.(g;@BEOobBHI: ."0'"5L&BnAHC4B9hfd`j OGO?ք}>~oQ<\ϫ~t`@$_M/ܿSS 28zǗUJ% O먂|W}?+yOlS>ZA&jgޟ'ޛ;*P0DM?4CQD@m|`AnDDjy{vkpלFbm[L hHa쟅@@)t<zӠ!{ODIti85XZS&xn= gz$=>Y: m :m ¿̈́9%[[nY_Gv{=@*8pAx~%4xء\#AH0 =>] ~j8Y24k|(+} !9~[To0&C`2 s{$ꎰ黚1"8 KԼZ:yR# q̈$H\zǑ^c%,4~,v˽kIJ~&_7Y[ݟ?o_tOJ z{w22l{3=oLLJu aҵφo|Yl(qmD"{lhhF4LPܻ4< 6b ]8IG%w JTNPC} Zx`^ e{b*[b A4|;)m̢RŊcR\ )eifƶX@ V `o󏣬V9܎y\Bboa)jPITQDTQDTQHQE QE QEUPPR5M5E5M5EȫUUQJryӿP>!}ns>~m{PH%l P˚w獠}/Yv'ohL÷("Cҍ #R>s搗>yv*-ChMsu"H )p6[3̄N<̵8*C)۔P(!P$*Tfi*`Va@妽]}{DHDLDA 1E+#В&4KHH" Y"J"J! ) B) Bb"ja@PDQnG^Dҥp/(.|˕ݝ#~2C; sHp3A@ᓨJ K{L*B_[>d0m@ke[+i;Aw6:} K )I:d$*1_wǚ>37ޝvNEp4/p$a23$!T bP%GP¤]2ڇ]iӋEQ@ִvZ&2D}" X A?l"5TQ{%yd+.J@q n [d:yzƞI>ӳ4HI y$7y;ϖ2 &y]8%H 8!Q$ m-Ƃv / BzB'0iٷ_Ghd>ojza 8`&5Co,rpPzZ@{ D4f B|O[MN.^ĹA<c'@;oߐI‡yuoIbl=Ƀ4( Khޓ5r@t](4umle,9x'n[t W:IzQI gzRA#aRhH:TdHP#JH4'xvUAU,c@Bh$B5UUUQ^"i¨UUTQTU w*E(Ps"HP{|y )Z*Z BBF b2$J`**j&%P4У1USZQJ @ ?m>b TLĠj!)vDDD4d䃙6!n~M~J/lov:W#+z% {  PC tYF_U!W]L/m|U{ 7+pI?nρark8'8,eϠ6dS!X;x_uX}Nߙ>k :Fmh[mߕ$mm_bX$|<@CfN ވrHHHq gKP IL"}W _&ƵHp?{؃Nt` ETqDch^ rI]S<&o˸p=&j_B̨6jMƒbr--xd!C&BXB`(? `G}sprE oM VH[uev5v&΃}rYU{") 1MQ ÑÃ0=Xfv+HQ-dLȸŬ8a}ckU\5J-BeIBVW_gV.i_vNEK<%Y*9.z&d9a8~ 9%ND| gg V `-ṫqoh?L\ 9UhҼ=(\8N,܇[`\;1d 5 Υ췰p ßɣ\c_ !0w9O3 HmF\ 9vUS-2X DuCsC+ TJ6* J:)Hn0&$H9/~TA B _kYUѬhy\_ $Aq(iB<(eVw:G-ecD@rԷR~m{d@. %ԡT? 3WAO#c/XV/?1oߎf?θQo)OY~m3S:7ND~ 't/]G7JSR[pqyszk_‡ѣ7n#uW<m'ur/]YG;lXI}݁Hb;RȏċNPtlgڿʚYg?gw?wǧ_P*/_?*]_˿9XŶ vhٌNj|Ias^n؍MrZwhٷF$'V %F2d捸۱xJ( !1TMl2q O9VBY D7ѱ$?b HDb ֡$Z~9W_nzO>" \B20keF߅,]c5*L1  oֽsZSroáK$!d!רP0L&J.R݄ +WsU2a΅/LZ6,sf51՜!H1Հ^| d~9 !R ޗ?`K> 7!MB1$fhJzӞq %u ޠU¸lWوŮTlAD0vAV