summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Richter <robert.richter@amd.com>2011-10-07 16:31:46 +0200
committerRobert Richter <robert.richter@amd.com>2011-11-04 15:04:33 +0100
commit87121ca504fd1d963a66b3fb0c72054b0fd9a177 (patch)
tree789b9c8a7ea7b92d5359aa59653dd394bdec3710
parent4167ab90ee6a2c029855db53d1631c84a213f3d1 (diff)
downloadlinux-87121ca504fd1d963a66b3fb0c72054b0fd9a177.tar.gz
linux-87121ca504fd1d963a66b3fb0c72054b0fd9a177.tar.bz2
linux-87121ca504fd1d963a66b3fb0c72054b0fd9a177.zip
oprofile: Fix crash when unloading module (hr timer mode)
Oprofile may crash in a KVM guest while unlaoding modules. This happens if oprofile_arch_init() fails and oprofile switches to the hr timer mode as a fallback. In this case oprofile_arch_exit() is called, but it never was initialized properly which causes the crash. This patch fixes this. oprofile: using timer interrupt. BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 IP: [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58 PGD 41da3f067 PUD 41d80e067 PMD 0 Oops: 0002 [#1] PREEMPT SMP CPU 5 Modules linked in: oprofile(-) Pid: 2382, comm: modprobe Not tainted 3.1.0-rc7-00018-g709a39d #18 Advanced Micro Device Anaheim/Anaheim RIP: 0010:[<ffffffff8123c226>] [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58 RSP: 0018:ffff88041de1de98 EFLAGS: 00010296 RAX: 0000000000000000 RBX: ffffffffa00060e0 RCX: dead000000200200 RDX: 0000000000000000 RSI: dead000000100100 RDI: ffffffff8178c620 RBP: ffff88041de1dea8 R08: 0000000000000001 R09: 0000000000000082 R10: 0000000000000000 R11: ffff88041de1dde8 R12: 0000000000000080 R13: fffffffffffffff5 R14: 0000000000000001 R15: 0000000000610210 FS: 00007f9ae5bef700(0000) GS:ffff88042fd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 0000000000000008 CR3: 000000041ca44000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process modprobe (pid: 2382, threadinfo ffff88041de1c000, task ffff88042db6d040) Stack: ffff88041de1deb8 ffffffffa0006770 ffff88041de1deb8 ffffffffa000251e ffff88041de1dec8 ffffffffa00022c2 ffff88041de1ded8 ffffffffa0004993 ffff88041de1df78 ffffffff81073115 656c69666f72706f 0000000000610200 Call Trace: [<ffffffffa000251e>] op_nmi_exit+0x15/0x17 [oprofile] [<ffffffffa00022c2>] oprofile_arch_exit+0xe/0x10 [oprofile] [<ffffffffa0004993>] oprofile_exit+0x13/0x15 [oprofile] [<ffffffff81073115>] sys_delete_module+0x1c3/0x22f [<ffffffff811bf09e>] ? trace_hardirqs_on_thunk+0x3a/0x3f [<ffffffff8148070b>] system_call_fastpath+0x16/0x1b Code: 20 c6 78 81 e8 c5 cc 23 00 48 8b 13 48 8b 43 08 48 be 00 01 10 00 00 00 ad de 48 b9 00 02 20 00 00 00 ad de 48 c7 c7 20 c6 78 81 89 42 08 48 89 10 48 89 33 48 89 4b 08 e8 a6 c0 23 00 5a 5b RIP [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58 RSP <ffff88041de1de98> CR2: 0000000000000008 ---[ end trace 06d4e95b6aa3b437 ]--- CC: stable@kernel.org # 2.6.37+ Signed-off-by: Robert Richter <robert.richter@amd.com>
-rw-r--r--drivers/oprofile/oprof.c29
-rw-r--r--drivers/oprofile/timer_int.c1
2 files changed, 25 insertions, 5 deletions
diff --git a/drivers/oprofile/oprof.c b/drivers/oprofile/oprof.c
index dccd8636095c..f8c752e408a6 100644
--- a/drivers/oprofile/oprof.c
+++ b/drivers/oprofile/oprof.c
@@ -239,26 +239,45 @@ int oprofile_set_ulong(unsigned long *addr, unsigned long val)
return err;
}
+static int timer_mode;
+
static int __init oprofile_init(void)
{
int err;
+ /* always init architecture to setup backtrace support */
err = oprofile_arch_init(&oprofile_ops);
- if (err < 0 || timer) {
- printk(KERN_INFO "oprofile: using timer interrupt.\n");
+
+ timer_mode = err || timer; /* fall back to timer mode on errors */
+ if (timer_mode) {
+ if (!err)
+ oprofile_arch_exit();
err = oprofile_timer_init(&oprofile_ops);
if (err)
return err;
}
- return oprofilefs_register();
+
+ err = oprofilefs_register();
+ if (!err)
+ return 0;
+
+ /* failed */
+ if (timer_mode)
+ oprofile_timer_exit();
+ else
+ oprofile_arch_exit();
+
+ return err;
}
static void __exit oprofile_exit(void)
{
- oprofile_timer_exit();
oprofilefs_unregister();
- oprofile_arch_exit();
+ if (timer_mode)
+ oprofile_timer_exit();
+ else
+ oprofile_arch_exit();
}
diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
index 3ef44624f510..878fba126582 100644
--- a/drivers/oprofile/timer_int.c
+++ b/drivers/oprofile/timer_int.c
@@ -110,6 +110,7 @@ int oprofile_timer_init(struct oprofile_operations *ops)
ops->start = oprofile_hrtimer_start;
ops->stop = oprofile_hrtimer_stop;
ops->cpu_type = "timer";
+ printk(KERN_INFO "oprofile: using timer interrupt.\n");
return 0;
}
jV; Zg *>)7?˯ЌBZc<,EP4EPA9>Pvn@$A= |r'Yg]&UU D\vnJwlZH'e{GO)WR\Lz#ÇݩtɎ; HL1l(/ 8oOCR$JeF%ÿa9>|lq2sKt"7ܑٴ6J7rQO9w<{L$* Dp^=/q)]Z!3׃W5@Q~' 5|;Tݸ/,/ FJH1T8& 6dF>^A(qw<+sadu$@װ#$g##IaXL~u#L T0ZW )Km4)V;,*(M_rߛ C^UKֱ`Z|s7^)CMYfR993E*[WE}e_̒ qK-?bwYӗpf@12K׌Fc*fKEؾ,*т 3>z#3H='>"ģqZpzL/a&ьCpqfa>ѱxm9r{LѮSP- PXN>f.a!~0I};9|~=Dk(# +[կզ9f*=h1 <#P.-|[w Ze>Ks9NϷ/mxϔ͹ޣ} D8ҖyC//ahĤ~ˉy݈L9ofvk.Sh8MxɏŅ^p2Mq륻Np (kj@dٻF$=yc}Z?*Z0'xCT,8D|,ݠumA(&7Z{52}9A]]mhڛme9닮M'UnC;qo%FwaMIߡOp=ݬ*?VNUBUr-ُpD@@8v'(0eF(e!lo(lw{n~MQڿx }gOmC,-%C^c 0Q1bruiS!54h:zA!yčzrivعBC MN7iF] HduZCu=2ҥ6! C'~8 QLm ˙k maNJ'OMo;7EDw ~"ڽV 7A(CKvtYݢ=ނG; Hzmьce8׾X{߾7upʴd/v'w'L>ӇMR=.-eܚX7nmA?:k8}1TK3NhɁvD>Îvsp! vwqlj0վ^56HsvlsS -l.`QM5O-gO!w VCrsBHxg9 1|.kqAB}m4zϰLg˄ىp(2ЭSQѲ,/w S_)7 }f+btE3M*Q6BM] h#"}øSw dsM@h@Pj Ff}d2c]*E?X2R VT˃q!$$2E{k!f`lTX66#hTJ5A$Lx@~F$gt%L3r:坄,pL (bS }A=GDu!9ı4zP?wrÓqB C-l;b (vhIt}TbE*‡b!&0O#koOC慎F<(TtCY˂L'Gb=_z˴gKט[JNخhDvv{#G?ϳWh1v?!%c#=羴CIcelX{y7ǀ=c4GGo"y tS ?2w~XZoF9zS7UAvg1yF;sa}%ĮW=ўbxJXYYOmsSc;lZ[nH00#{E+xGi O9 TPữy u‘@ Z{tre-Rmo%GM l]st;vpn*9f0fvv ot?J\6r/ '0:kr('e"ϼf䐦o\`;xuQvN9cK :՝ܓ'.Z }[v[]CMZ̎՞rwȉ{[msڢyl:;~Nˎ::VC]Gk6ԾG#0 _>t:[c-s:lu͘KhvJ%Զ"Ü-}ş Ը 9 i89Ki#C|]:?p.f^~ns:e:xDz`Ts]kubޚ]*e3[N{n\֘׿]v`vvX9JbI]k%2Bk܇.`/{kVt5m8[*Z۷߰qGwWA ؟.>(_pG) zx ?t5B&;ڋ fV`n=+\'.tHqၡ>whyp t6># ;c>#HjZ ¶X5 YeeYė?Dfc2VuKId,]$W:;ݘPr-,waI{,6Wg$-QP0nP˰#/jLf/ӫep孯s ;|ZNNo 2;oĐ 2/&q  {ۡnH9⨁܌?8 :G4 WhY1܀@F`칅y4-oaa=A|A$D79õ*hu$d=*~Ըam`.8\#ΣV_T "eyP~y |5䧩=*TE Qxv@/E>.qW~-QWD:7,.VM ^<=` kF{„H:uG6lpVӛ\ dya`Q ̩M]$mVRFmt] = h#;ceJr +gnd]:="`{ P{vv!: RW@;|`:Պ~ؼ^LM;u>US gvzq㜓Pö~'y,AC+ T}^XLL}ހPH*h܂aX- ;hs*A {}vj'GR{,B(XcT@icw890wY)xç,] l'OI]xިt^e۝WlxEMAùEt,cTinV.yy0Lcb`P@s(UTͫD(3 Axzsw,ZaڕK\Q1jnwWp]lͮh5axz<nl:FX㵹0:׳@VzOtn?w*AQ1xՓr0MyAR5y<1Q{W[ sd!1%<nmh9M@ gH&w>Q%sj~%sx7PEptlZ!k2alxDpt6X7J8zjk$+CLJ(}k8KV%<-=bhPU7I7GɈ<ϳ%SaU@ޑ HB9l aCt,Uqgïh8 +ZÛ@ 09Q7_ cj7# .(V\z_Rj{ߌM\K.٪ٰihc' Zupآ9;&,lŲG]hUE$s‹k KC]=/l8Ʀ!94̱Ԕv#KhK l_4O>lyU9揭)%B^fj0Ls"Lb›I/(.GcD^hwdhVmjlt58,azb^ +w@&`FWu&*‘2o鏙p#v(Dw kr"W--#(Dx$GZ/MCĻ12~Λ :xPG]9ZCb  e>}y\BoԺڗf|Ug܇6Wӑ;ͮ6gERe -:#)[p=BC! h@Ć>=>mߏv#tP磞8#@X9xX0ߦMV/\%P;Ğg1_aDS4me[QAX@Fz ᳯ4ݾ] YJLud)^5΀rh,Ҷc7]S-%:n-v'AM]&}Cy5nڞC`, Pqg_fμrAὣe -ǧr_ZAg52ST&_rGB(R,q97r*osbG>= z@$o>b &bmD$bǹߚ=ͰD-L"D$)icI3/{-c@ #rʏ}yNn„NbS xSSjTtm0V`QqsET"5!tBE"dP a*Z}-}Oul #^ZJ>׎bǜ)ӂGDaӊ~#(|>G~66FXvӳ<=ljHo@#?eSTl܁x*ius;:+? Y Ĺe@vUIoyU. _e"*1p%η7GV)%CKaNO1,Xuگap'6&Jeά#ŘujA(j@v4X97)BI ~յ#tQ7څ{7(DA OS,8-BA 37uٷVw; ;Ple0nYmͶ6uJzȯ] 6,@BB]tA 7 ِ&0l9 A=[^e.?k-aҹevz @-'uc0hZn:0ZCλ8G^Nh!|ꈍ>씠zkN91 Ru[QoU#b#7M\h탫C|ͷ'J}]Fut~G?R=8Bf8V&_o ۘsHoh܊oVot/;h5P \";jQDt^x#>qTZ" 9]yyXD\-jhƞ" ɞ.lϲgXDC澓ξNh0ܗ': qA)xŸIV V'Vbm"hueS3E4D>|e:]gKռT2 }Glܢ^%⮊|E' #B bCz.](Z.rs?HW({O"?/'m}l;XJ d3D;/iT|b.Y/<, lWt9roT#?htCjE-. }>r Ȁ[& M5t SE2pv")m݋0P *k{Fb@?oի-TiϔWJ>6PY1N;>|pl[4>f 52? XgjFg;ϟ?,<{]LahB$X>ϳhdQEwS'PyD xneH!'R@#`(,FOvKӿh>՚sUɉWzkqv%ol`XAvj ykx-u>gQ&n{sahw|9HW.y;I&PSDV_@pi8\^>emu'&.{=nPK;nwRkDOMANvyq{]zNЛ{kd37 ~#Xob1(:8sp$ڂP&J0֡9|I TνvMX}Q`U).7YʽY (u\[1eqǎ5g1p]Gw;"'Vw3FX#`\.>ݔPJq4z+mNxS8F?Xb0jH=w:1&>+F r3՛*u챪<5J*: 1ACݭv viT\ N@O]ėͭWe3Ͻ`@q^~0E]"|>y<ڱ*Aw߿8XAr{cݟ/I>M'|Hzr9v_U"f:!-E"-?:| l?->6<3X|Z^n0{y>AoC{0rh*'.Vb=f8WgvCH5Pe#DCpx2d Ea\z:f%R8Z]cQfJ ]y\aA1x.8>Zgo#mB!L0 9B ˷U97h!~ fT*Ux.֩rUm!xPC;,l] q RJLvSA>j' N[ C/9%ɪ6{^zޔ,mcn|L-һt#?P]$$f-őƱƷN$=?Vp&{1&19RZذ"rl<00 nwH]_ՊVm1N74aehw5=C=3]=,T:&0=銴c) ?;ay&gʽm1&JaDfI1Ǯ5|0Iuinw8-"Ms:b4sj"4v|lL'=/4 \l莸Ү]cf##^fT5N,w|A+HGߊ*9#.5f޴Q჈++;p>B=MMIӞ5ʑL9Nxuפe@bقPX=V+A4VF%<`,OP"Cj/h=|L_$Gvܺ+v&(D}Z0N⠧U,ʃJEKK<pP߱{zeWG=^pSt⑂CXPk8Ô,D05z._}6sW&޻F8x a#6Js`a*Ƈ+/{n1KcUOnݸZm.-}G5>.6MK҇΂|gyr(޲gQ(>./Z Tcf9}Qz|{m}S.ktG(ȐhjPflTX-M<$ 6Mt;@j ȸm}v}絅nWjgItF!RF>r1[$O;|uRqô<EHFۣdLmB4"@FYan8m!__)n!3?g7Q_sǟ2KLl\p* T5.'C1k*6X9!C$e[^j Jãc?7~I/XUGilNkk4dD{Li6$G*;]m$/Ͷ= >iU.i}v;j#uTlX.P,`ܑRs8+ARR)#k:fң@5X> \gY^)i8*x]klN ,#j(Yxn 7 .joK?z?\/vGPcw2BGNU\?G\i?ՌQHL 2[7Pq|_>>/fZ%Fe]8[~QRX-"8tq|BT\?.ur-wPeh๵Y$'8z;e(Bs~n>SNpOˍW;VÍIg9}85&EBPkQI#ێ&HܫOn}_iK r[iäƭť!{nBL 'ǸbJyLP%,+h@Y2Is9>w<% /ܙY^~}5QLne%ƵpN̳|Rr"隕˩Wu4k! qL:t{t<炫@9ATEU2ODTH9:=`Wb,6o.e/hJJYru}oPK=w= (خ?g0DDzͩ0<2Q \4(Kdr}docR+Y>3{iB 7b:K6#u0u#Ear?/cC7SVCG8/2ލAsXqY"Zz_Scf66XKL:֬yc |XVj\TiOq=O|n$!d髃tɌwW΃ XPnk" MD*u0όx9tƋJi~!E Nd>O b`Bp0J@]z `z{ڋd8/>#CIȢNW"E)]h<|vE8[.A@OOoEI! t&G-c1fvU=_xr8:lþw*;~De[[Ú۝n1rpAO{b=  1)v$>g`2sԙNMvnphqQdBz`oa*D EflrW IJOմ8CjXEu~^$ȫsJ7̱ )iJqi/-/;] ے.Y4xASM~"ܩn׬Ch? vjwۈ]?P[@b?lG;0HhxL 8hv W4wfFg,/}ZApksӯSƠ{ӂIf?cwTvV@IA6manyw%ɭ u2suXꪙ8P(ήoٚGˑF5k{ D{_GdSviCJM)(i|wV`濦p޽ob3OA=K^M Z0p1t@[Es+q|8v2L;|AKij" .!Ϭ%2%, \ [+Z#dhRߺ C}_˒; ޜ0%ƹSbiq' gLլ4<0?PK3@ _,ŊZDGy@vgH,G n8,4Ou]-k!f]Հ&yjᏐA&utًbp_4 I[,7=Di%w † }2EQڂ*򃑯!+NqT(esQޜ|% $,t4GGGrdzn≣/ Q0*d]bOckmjb:X}3r+P4"0ۺXc7'?=5 3FK˂ .41/A14?mg*Ru,󝚟5McPزp (N^oJhrL!(xMVlȤ[ګCQJ1 !+ko"2\zh؏{nyvYr:ڡ$ ]UyR+lkbXsk'hl$ uhGӷv]<|:`@쥕J cƁ#NnZFY9C솝sd z-n=B #rbu*^R NYJD Mq$1E;t*[;%LvBglc*M|.YD2.j2.%ӡ&b2:5 BP}-PNq ZDuH]I2}Fv tl5h^.cǥdn(Yvr8^M6Xkwƛ}}j?i}:0ph*d^\@r+@$o][H9*tC!z!4!$1q 6BO rhDYm*Ǧae9CΞyǯs  (n\ Q~BOqGM*Thհ2vl\5Au#?Yܔ=|"!:98N-i¾bۀ5x/Nzk".^sWj.{+}izDNS*ZY͉DQ !eW &$榴 $-/y5S\5^K@=<@x%Wi=^7BuƲV<|ͅ[G^;LWNW xWk^ض teP;ljm!ki/:Bd"4/ r<ӄshm{z?0"m8>-Q#Y rS'N?A,+4vӿZ>e(y(AD 2%۞|]|gu/OOtԠi~~Ꮠ\|bci8pȼ 5 e~eh]#R5)5v:@TkX$ʌ=e&wA^70-̏"tz@*VZǯ@\+`U$?/z}gEۦEv^uZJ4daaUUap1Bdym7~SPPJۿgØev9J9+[ GE}KRt^=}Fi\UT 7VT({?hnc{Gl鵜ZqQs4;$!"xo@ϑ8M?OC  !=oA[ 6GIHul5Hv_eԷnaჁ2ORGyh^f[k~m!K|C72Gz[ﯫv]Io5Z#}r: AEi-v̰ L$ǜOg⟚?d7C1e[(r j6p֥{{-q8GS#,!w!Is[Tu :rqh{BcG^$OA)%fU1p\NgE6m"ֹxju,]jftmA,(yb\>L]En+gb/|I/}DKƽ*m|c( E\Gѣ<hv(罝ǿ D g5Tx@ΨwWgg3֤`p}6qD1$ʖ18ʘY}vް@"2=fF̖X.4ԀOalvrјyv|.d;~rԮTIB/wck}_2[N4j跚)$]Lޡ(%nzġ B9Mˆ[v=AjQ-Ző-#W tl˧#`Bg孒5`w76C߄g%]9;/AL@:^QBтZTgsuwK7N&a}P,Ec 2C;F'uIڦ0Y'9MىHRt2t|ZSe*(i /..0VjȘaeۤe'Eǎ|cO;+foza &%&:~sa_Ϧ[h 룍`-Q雄EέshףS]X! sޑ?8"#JT nɤ#DTsӫ Rm\9pvM2AeV50++ǝg],]n<R4 s╔8xIκ!y gzR RL ]ăT.6y:w[i W*qguY!7Gh "A27nvA[M#x(dn ](?eqD)a`%^o3 ML@Zl,'[m_MloFmE=]#xxGfǟͥߘ*밧o9O~4o&.6=ٽzO_Sj ? ΐW;LDCAoydSIjXg])$IzuZ\wpbUɛNBwd.1qƊ=z xH%SKDNĕ,1O}8Zr[kUOjȒCd9@I3x >oCzF:My )76xOOXL~'\n^K<ZqĚ&YPøL8^ο?o*' 'Jv>6+ 7"J E*)k9pH~ jo{2o&DbߙWf6ښkb9va Lc/[=m"*ֽk|ΥuK.QSVzw0pN7 ZCF9k->'Lf76߻ҒSN~6xyV*Z=0/NNEMm~XZċNl3~PeW!@-J*}Ml8<S"2P LCҲYEB~+ )Z~^Vwjg;ɃM~=id"^TKd"&Q?Mڒn.[̞R&͌j)G8ʩ\o!/,w|FnI=pxp!/hQ賦T/1/P$Y 7_סgi ގPB;QdP܂IȂԸYFXsn/H}f0>cRx9cz T{8b\,](v/kr@$:E^4WԵuw7󘭕` d0g=5}y?'0(#1kE[ҳ5N3GB9aD=A[̂ %NTw/h8J$ֽ\4-J^)fVJ$aX=*hNvw\2KIDr+V.9q.M,޳_j4Z[j+*'\!l집m,&TU0M먋Cċx+ 5:G|Ff*=_oFod{uP-Sj"pjNs?|GT"lagnQm{#sSjYX%B ݺtKHs c2~޵7Dę_wۂ+z<.|?Sod,[G/an3Æ̽H/@Ⲫ(LJefTr2q ] ʺK*s#K@!\Cvl3k&Owb+Gjոي,3 +o}%8Ƅ8}y.6Xu5D|>_T꓁єD'+O tqG OYF05D]e@W3NǸ+vC a^~@ԿQ`;ڮ (!!a`8ƈ_2=vʋ{||ÜdAf k邵irlC.U~1c2NJ Ab kBCJ%1ڹY@R^F#(ANs–Q$ٛG;=温"J{@" ޙ 4`XrA"= #RY].J,.CAyHhNDE/1o}tψQ0\g}2+!`WE@, 36*%7=_Wu.k"he7)_$e]&1cqr>>9p5 opbS|{2@訲ڂ_'Yj>KP'{5u*?l- m_'t0v{z,  sJ,\ʁ5[&xs,9Af$Ndpʩ*v“РB>d~? ev>2SE@*jdv .JV0rb<+!t)DC̜m;8XKuF'Ǜ-*I#$԰oE yD~cW0^5CF ˢ;HJwt+'uX [_ ۔ }Q"E Wѻz<(LcFRbdxڢ# ZL &#I(]  | rVVW=+pۈc}}6?,\jS32S!\CC#Pdy,!ᘺw/ϳ]0&>Ч"~#JoTD:!ϿwSR8=8(omg9Y <%cC%m<-/m9@j!d[ &&'jP&sz҈o߀BK&uNô8+o2fGwghUOJJ״=.%Fl`y7=5MRXÀG J أAAB+蓟K7O'zo# ٙc^tϢMULAˍleLdD9n%(+"DImMz:5ř$D32 7If( lnxe\.W#246K!'{'I{1y>w; !#1!R| ժ0IL$ШPh1[o~t"h-[LG m8'l٨䲚|3Ǵ/832D"]ʶW'wyZ_l;k@y@Pbpq`Dz?H{X9\譭#9sjzBΏncͷ~d"Tv'w`2h"A"n*Ъ8;hYtO;Q?#ef-  F#c$qX4ϛJtDU }zծoqE!SzN Hvy9q*9@{fb|x2EYN*_%Au YKef iZC_%K9n@gVB2>69:ø<$+8ESN?~ _ ,GMoo+eHgt޽瘣YkO_AXN}ƙܵ ; p8j&7HbnD~*&(nD}*:HNcB3 `_ߦ"̘d%!|$ux=vE4ugx8 R1)*UޤA5.O ' Ƞo5Uޤ];cIKw(z8^ӏRBO. `c$cox~ܬ΃(=զS*XW IϦzVB~w/?Z@^Z~"4hI$\eTuBHZq!5;4sVX0V{86#vz)WCpvttc7(Ą)8Clޥz{0d˧eAj3Lj0GgR ’WImԴ/Afo҈^Jͷk8|QZ$0v4\ !y>N턞C2 g8lyx1I*`f1p_}oJ6z~Գ0|zIB, M3=)Ba>%vKl 1GǂinVOs@I}k߂7m6@B̦"yCiH)VUd"E-LΐDaغ!{qQbSw]['h% ϵ SGvTBnbCKERأl4á4vJu1_\vR1j=h(vK#Zv~)9Ƀl `*N.%ĬZ{ rqi:#ޡ+$^JTH Fx_5)gI!_t(i&62<~z,kP!˱Ȳ_cceWƘ,JC}_ U8ةv9tof` d;;89)OxWz>T:EO*C7ÝO&u3lk ,gG\ITYSA2 ;γ[|~}”d0Ѿ* &MJFc\'o$>}ke99*m|Z4#q%E,=eqewoo+Qqա~WΫ m x02oj^Mn UM-yFĹ.*gc*ɘFq26*aj5\IU*>/ٔQ⁥>owֆt"S y T~ɑ?39(LUJG6%ꃌ3ssh9O WU&H9WQEs3iz{de{sstQqPi\% K!gTdXS>t= )s;Ã~iČ&jE ;ѵnciKH_SmUvW,,!Ǫ7R-)#STi;!m OM;cK>Z)a'aGUmxӖ~[&]Fsm6 +4׭߱kw1w/DtG噊,]-oO2Nj?&.Hky}I&"zLcl}8fxhnYHSPTcM FmKy ,MDZ2*QOZl/Z@+:P)-؊Ⲩbw|Ի[9:[i iB5t6 rm4IQfL*:,m֠$&;D!]Hv3Q_0p`| +01<=Dͻ05c鷗YHQmd'lY+,l|TkSLd1 | Ǧw{3l-]U32=L/0+ 7g(~xR4!G-mЮA6ycȸ? ˢzC|$ҫ,wKŎf;DvxiJsdq9r^}JcJG9.U&NGy^iVRغXZkF#:xe6qӣV)1q*8D,FήEN^McC`qosEنtLWDeMyn,=OB'dߌE@ԢZ!}jL|t~90-KPBgо@m3xoΝ'2-XwB`]YtEG|JFZ|:W8/ jF-\-Azs† J#El٬zy~;9_9zן4d5rXצw̷0ڏ:)Xҷx9lt7Xn (9U~xMVFwk<[$ + KH‹q_~Z1֮H3A(QSsسx'\Ƴkȹm!Nٽ>BoԿ'XsUݢ>%b7 ϓ؋|2[k/"}mW) ==f9-*o83*}Ù2 Ƥ]E/J⎁. !IϮ.(* UA-H/!EuBQcolՖّj8{@r$j0a r>V+贓Bc/jD}4Jq-3RTqAY02+'4~uNvcE0"uZ2ڃit 1TM=,wcs~+>˟`lI$TTVkgEe67v@(GoMA֮\߼Mp@.)=v_R<y/F+\4T!-lKT.`\EhʄUNE@8uEBLU9GӦsuUk`bag;En2V<&CNF^j` 7vl"KKDY4#k Őzy [C97>1pŽv _[Ѱ _G4i4feޒ3J/Uq|Թ|fQqdVmP[% IbC͋p 0y{.[1$}nͻC[0_׭*Qe%Љl)#u+tIU@-pyWzDGuuB<0a>YR +J:PnCyqf<yw;]ehcZtV.s!^ymNK""*9FiyǹRDA)ַuO6>W(rIN{R] JN oGnraxR`^L Wv~'G0U8Cٛ6mM熕גURGIa3<˺ok F<6:uvc7aJï4a!KbeRbU~G͖nup6 eD!с ɑ&S$O4:z rAFGd2Y~7PK'w hFW'RIޢxGФv4P:8Ob:-o iBH}z攽Yɾ(l$bxrkIΚZ.Z߄@Xa"ʳaKgs Fp쇴bQGf kz'X#-4a .@@GY%5N (?"+;K TBCpP~#6K0 U*>7ccFZg1 .Xg֘W?7 Nb.'T<:I|VWL0}\y.U=Ą/_cQә'/H^YGd;Ğ!lbay=CrVr̔IL\bπ!R{ "v:(Rw~?Tp} X1edkwwJynYTo(L:![S90rU/Ѯ>σ!q'mWxz$p^s=Uӷ?'AGRO4&';Y/T~t6zI6Ʌ(D<4^nu[ ge~ekn:J6/AدP8Aʒ+0Yl?8"NSsXGB+JkxD\ulPdFu ?];iP 01 bÄJ~.)i(ջuU 9>qMcbL7Q? vp6X2 ,lLdʟ& }Вk8|V/ԷCTu_At&y9,#d1[Dav:eM^*"l 08G~B1V!XQƪ\"+BA=c%+/sӆ¸B,e571Lp+O87zo;"ux/anמH]1@g]ʗ8*gdQDlѷ_7`=1zOR?YNMso$ap<(Pf!~K/S ڵvoszCbQ5;t$}E=mr nfU:>v|PҘ/ߏf_?< Oae-UÄ+>;Z ;0xpOU˳k!2-fح֊,\1l#IWBfvLx_HC"&@ q"iXC9%f lǍkHf(Q85xyg/ny89d—PIk&~/ p ϙ[+9/íNXaCD" Z!?b=9:9PO,G<QG<Շs&(dl)SaK|@sN·5>#Z$vG_hZKef1gjeyM8;s58tS5^!0盝ԯF4*). B>p\5!aO$E5TH>opX%Ѿ2x"߿% θtj[gK0<S FQ+d;;℣, u 8Ykjv[*(Zv|/ͅvsXRb…gx͓ۢٮmך3: 9m5'8E 5|=Mm!~5-+̓Ȟ{t)6`1].r;Ak/'"=m([l[a*Q6^@:e/tWŐ@HUPUAΔ I$|ii>:64Jcd5 Ҏ9yʫ?R9{{(=nu'?S i@7?\R0;$ neiF*+N,M BmͰ{\vnw&_˔do v׉#ѼC)?NMO6s2‘ B(?:h։އ MB~zfSmxu\uEq۞6/z\1* .B0 )`qj9gE`[XJܜ99wYbfkjd#syƉf 7 Hq`û$"v-pj]^4Kz16c+\| 10;Lӻj.4:ZfBXxtLagZ$WPF |^=VȣojS"/}\lqކ~c2u"üL3I|QGӳƓ \}$3_I7mDPד;o4TPdbl4-A,Y]%E\;b9٬׼FluY5%5D\[dmıae iSZ{O\o8C oKX o+җ'|& JgXgƤ]foG:F ;mS:<v#>F8[WVa^)Et#ɬYxdC2-mƃ)}Ɇ8:i+\F{%|u*;iINCRDFIsYŻ#gӚ30s~ƘM/Ud:\҄@ %f>=2[?lǡ;\I̖ҸN[cŲV +{a?:wF7;Im]qEWDTNKT^ߌWH;W*gHx!d'mlnol`5٦.9ݎkn^q'|Ef2f%;LAnK}F=5*C)o.t\;G~jץR?J<}qLlے]&*АS+f29͸;ED9nzye[7m˖?|sGmOcj4\; &吙c:T`g!I,UR|M?f }n;7i+{d9w֞wvdωcf0;2.q}:Imnj曎=!hӺGҕ_o^;xCBf{0ot7 x;Ozxx🜊}<] ŎE87->U3;Eլ9{+?^e.bGhac ;wۦu&;W}҆Ӵ{9k l& 1c\e:la ߟɛ:"SR31 -ڝx *v=:mQэ;K21X+4^+1r1 :wɍX=R(iif8Y'Ѧ{z]m^ҥÚ-D]v3O"k< SZar"HT;RIqцf3Iv]r;5؅.ypSFp=vePw̛8;+Kb8r<薸:8ü#e1^٧O1rpRtqsK-jk˓:]O:4ٞF{SN1I>ĴUmь4as .__^s|cH9:Yt{Duϟ4xB1X `RSąeͅh?ER XpWˎM`ȝ$ιZ=WLd擆`O,6^*YUk ]{?9Q0Nd>uM`\C Ow PT"TƁͽXˋ·d\kFX=57/qUP: L7T(c\RKUoG0m8xo8 fQ'ľ%..GJUN%é_^ G:5w5uԩї>Z.˔lV-N\1Gn0=}k0K 1$Iosm\aT~ \t̓zhșiF8ugfSo(!~޳Gs\$HV.s{q[%K$쵮T+(ţ_su~z?885=KX[Gl e~=HvU91ֈíf8jB[;t}Zθp͓ TڗK` ]p3(61 ;:e0W.>D>ꂮrbkǃ6e6>[C󪙓o3%N Mgq~$)X adf6| N^ʜT9N>2a`m:b&hsOQˆ]J`tXEOdtTV]7!I׶wV%jz+֨ Vv2P=ɺ?PɅIۄF;pGljx7Q֚~ dFgꩵ*O<|%/8>,ӧx8b/2+6l@^@kÙ-3A#;N0HJehixOc9)ip 8u|T"SvQ+|o'!Ni.<𐕩_ Iak(PzhjB^ :K5Z۬nK%m5pV:q[EroRIڊɐA(Nb +L79ȴTHrӖRz95Ll"Xh2cԵ.;bѭ)׶ cQr9u9V  P$X(K-d"X]4/59B6&E}ߠGZ<;g&av2氊q|C@\"+{'T=yK }ϴǭgn̋^T-L=Wϒ, &7yiZHN׷7M~6A՛ 쥦ʪ\X/Z'iYC_ @~S{c$+^T_J6UwLonT*\C7E`' T|_ܡwTEpњaJuetH1E.Q7<2KK5fꡍVHfIp?jLmp4&vp9oI.mr|IF|yY_nqЗٽ5lя˗Y?]a@%hSe:΋L4e D^n}@-[&a {zNY6"iYT'<_p^m-r(RBB3PY&ծuU;٬0Z-puM!"H^ȑcuyMJScKkڲa4mgr9RҶMcs4nudLN ıPq$vebds=f}d:1?6ݨ3pqչ( @yƪHxD\d.>e( sr|{c06oP)[uŐ9|j"W  SԜ/m3WiG'6d9R{T`4-0d ƐB@ŴzǯS8PAex;4 Ccy@um #:زXTu=j׏iouA,:֑bRy*U}QФjT| }_UY?z@cmTńLj(ksnnFE7Ȥ >g"`Ŭ ꂙ-QK-%K u}@=hg9GuԞ+(8b>52b?D&h'OϟI/Տѽ̡82FMvC䓂,_Jɻ4;(1+C8 {}K8=c,k cdmUx;aE$l BMgS1KFvHգjQa?̤t~jnA4au3D9k}qrBSRJk1;^iprYGx<W{5ezn|tU(vڢr[Rpgl[o.tz&&M~ADbнhω8]˷+gZU0;$~E-ԆT* ;_Xq ~ C$v/.us%٪/&o+  }Vju ©B+nkR#ҺŅe }p m6Zcm l,kC!1J'.˗Nk:۠VQbsMcIHLXB0FЋ Yd% %;V n@tX#†|¶"@5֨ēY!ѕRE8-naNV0;Ns q<۞F ?~_۟9XJ!{UUu[66|\)Ur/܊Rte4%rkTRLAh tHsOvU11%45 3/0wْTP:Q![5<@fdAbu"$g3T+eҧ :<_|߷Jd- s߳´m@"㗭D{Q֥ʱmRC[%hr˔E$?.)x\pf:)cȷ))oGRط7}|d"˴Ch眄,|O͟J||.W̩d'ݘ=>An۟afaǺG< AoB?ioz/&?[^ߟ`'d|* AWէJ~3hOD(m/Y4(~s`L @)NUبhqOşO 9#Œ9p8=hcUњGv08w'?vۥgۦۆ݋KZU|\W0NHrʽ yO߿שTuk7mm^  (.1dFhw WFkb_6h>)AGJ?v,H~<0@4!R i#s `:PiT((N2G(gV!*| r(m )SEàD`QkCUo#ﭿĈ%{.{\J:~=[/)n=uW4yp8VOfˣ8YpmP6S}vwʫɜ&6<~'Fɫ82 cࣖ?3`ö^az>ٺCWZS!w#f-zG bBEAuPC vg$\== #HLα'ob#2SBq T;oTդx7nɶnzuvhX#'I_\o>05.#u>^ (~9<5K >0 lxyWvaO:Pw4߻.ut Q9,rۿ1xdw8V4ç:yPm15Gݿَ !c#}ޛa[DL) ^?m̗<ү3 dIoCЗWQl枏T:A(wnYWdzozo<:y/¦yl0pM|\p~=] dj]ﶛ0s;bLӤٽKf*ąݮ<뷖ۇNzXקU?VЏ;"3ȾoRAD ~O{?SA :oĺ_هdPn7g^aequs2e"K\%Ry"t(4YzB[fM6}tHouoEAk.! KЅ݆Bc-%AQy ?xZ> pDuyrtuK :#9o5$,9suN`r)`@Pˆ$fZ^\ָ :P~6쾻yG\3Ow1%DWY[y)yH&rrVmƫtpQe,8ǏX\:xo_ Śot󗍃>wv ,pvtFt-wo p+Y^}.2R{]XP[=÷ݺu ^C}' 鼝dw쯘QE 9c&^2+߆=gO}nx @A@ױNE;@$Q1;F~6Bgv_̑fZu*H-Yh6N9 8c5QYFZQ]j /#e(Z:DtsѢCD\cCEr 4ryPrUz),! >+ھ%¸rV7pB% dyϱ]u5.".?MYћ̓!vԀGmIihf2:QVp}-|qa+-b˛;vw\ZA71kј}\(P|ήrՔOT[㩒^cT^{cB{ű~G‘O5}XtHDS ?: >_|!wA[W=~XV͠n}HRfJDGA^,`*$K2z83Ȑ`jQAmF!ql ڮncQӹN6dp 4pYU5cqH&*@MU{#5QB>>aK?/Љñqwʾ\=ֿv_I!k!9JIIgiE\Y mbmao6ߢ",JpQ>1 ;w4RWYjs,&:}n0xY ,٫x+,tOHv~|YAm l`?tOGa:ZHDٰ0_aϠg<O*T(ȃб@8)ZoKOe6=i?|*" )!6~9WW pD}_\?}!,`]PMlMqeh!۾ݛ^D% ~@.Ϝ a׷kw62ʉ!o *䐃p@LJH2#|k-Y;wΪX:L)oY1h96AADo~X}2ڧS @r)JpߓM}%׍_;ΌUI$:lN?y;^y?u hR@A!C z{w^jn-^)\D FY ҝ䠔,%]Ip${twTM}D؟w0=;sB9N5*g8 &,~҉pUbSe@( l0_%~wbz0XLR lY.FZÊ rM @'ۉ#oqxb:\8L [:ftUz;1]NtL Hv?*̇j,V ȃ;^F*OӂXѹ/ӥ? +w0yIpj*D@eY Fa ȁW^4?{ .#R%HZJ!5ـ9#aR?ʘʐGm[=l#lژr.+_N|$?Ga+n.2%GW[Ǿ?6<:a>qt!2 "<{n}F5~'Yw \*ݨM:ő!rf)+WؼokhurtE$Uf=ݶ qFJ;8ꎹ](D@ [F3 X@P6(|{bwEl1rjy(u@_WKVSDUJ f&ΐaط|3c KL]o {~l9.``qT5Vv( <( -v߯On 塥\$-] 0x:%m9 Z zaN*NFT1.WͺՕΥ1?-WbC0 :Nyϓ:]&C46**hA]pt|n`1%*_3I%-@?>Ӿٿ4kȰuHEa~Ԩ[vܚ1x-k~ez<{aY4G3Ajb'CU4y[>8M4- m}*VQ_ z <;8'VR0,r1;BEmȫ~?P^2=>cu5TC%Daj ^wivTt QK3tTRcX 1c Sm88LYE-[GFho,5+l+}+.獯S)'@ɻ䕴s)X$֞]%v맺ET7r8V2edZWlX<è&>S6t2Q~Bh2y_#__Ab/ɞ;3_$ )5jb$` wI#v8|?=7I2p&_kH r !* H~77)юp$ '&wj=%J~f n=&?v;t?u_vMG' VI {v"%w|= ar6Cyx?x|MN2 WAa`h>U ;"A2jHm$ X 4 AR=8izp#+Gm<8 ,D_/bζ%t'?:hmFIP$oSe]4 gr^fH=ѲuہG 7jBx}h aޒ_CQvu; =^g(DI߇k|o:^AY4S?<"0N\|`*|e_e?r~9?7}%jӜ[y}? pq=ځd%4qȈ@q,@:X##Zlxc'GBdjko1#/`߰ryo̚6 ݟWx,n$0YMf z@ھ?kHDӃ.wa DN%m%Vg[_r9;k-_}buNݶoƱ'$)|\>WS&f^{=_Y*~v[gJwJM`qL$(~“Ǻ<~~{1xuWuBbX0B☊" 5 QG 녹L뢌p֖Nm.DDD @h2Djkt `D}< N= ~&Y~Dӎ]@l幩0~ w!] m )0l"Bu<5S&D N>ٽ L+MWj @;g8z.O[j׮xNgttp@,6fvW#,O<fWT}t9\GfӖ\w|e.5=gcxe}(&VhvL*COUmEa>+OQg oߩU'GǙ]Td02MϴC0n؜4_d+EOH\uE꟮._S _ 0u!\Q8Ī!<zyF | lI^#?q0@}gޟ־F:WWC > ~|= )0ֽ vC7:(煾Ёy/!Q;~ջ>y\=ǡ,ߐi? "**E[z5Χ~c~V N꼸=ëȝN#oMv<7&g?8ו;HY*Obz/Jr Еg)V{@mDoP &T朞IAҊ!`֑|l2b81ܰG_U'Ol_0P DX` >`ζLG =w7!9&_^$&1Q@%UHImcٲv^kV)5 <~goM"I$h24ϞɆ@[@D#ozeMxxbwatd l(RM 46(wx݁1]~ny1+"\ڼ&F*)b>06f'n"iDBd$Ey'畏+{ȅ=΀N;R|(u#uǫ+8l{9E WW6^AC浰>4W0!ޣ yb8]qOd 8.c=nE$AJㆰ-@ rU \'ki<' LKf2C Bz^Ŵ5+,vm]\Ip252qs h‚҃S('y (((j(j(j(j( V ":=٧YfN{ "m\k |z5!ʂ!-Ȼw\+ueH\: ZB7.BH[wȑ$ǣVP߸h2A {jKvNE0 NMYMA÷P'k-:vP9~NUU);ݘA!_8eSOC*$H `*Qfi**"hV$i"@(GݱpsQ$$$CCCC-JR+ $}颴M'$@RHD/QPQ!@R!@RTHJDQ151@PDQ'rel2@>`tT-&ɸPurT 6 @CiƶMi7 R=ARJѪ[^% tXgC<{ N}&( <á71 -fsevuyI&Y`;KT:u'U.Jl]'X+uo ~ߑq>Aa0m5ga1:_"6ު30$6q4a#i*0D[nCbwR<<(Ix`7SH|Kvwi|egZ=Vx{d|!!x'VڀܕBk_3Wֳu0$zNٴeIq y)M\|䭙'܈ qP)QdDȑ(O-҅*$4 d0M<SE\*" XtP. B)*Ȕ?$kQWUUUUKi;"(3PCRT4" T$9P=0@JA÷8*_cZR" ZR03D@%Ի na-e&NH̀Y^@>)LzBAg`Њ8o:^|2Yڷg7*xtB%Ma6^ 7Zt@`/FȈDJDD4cLjp@A0|/kFA /y-?.aє֝`aj<p=4 Q"D77Y^ Xt5А5c =de37ट돵&?1_U_38Sç訍bjUc{Tpsru|kq<^LYū_9Y! #sz\:W{zq{ݼ B}:6N['X"zqxg.zJgp% %DBb@HH(eC @N3~o?[|>nf&l89Bی>HDv極ԗٚBT Q5# 9J'0׹Cu+Ze~[~Zϕ}sl4}++k;FWDՓ]'J4P=ҽ/>'9\DK+T X bU}tGgcuI izDACu?ziWi~ K\AoC}(-ح起aSQ( ӣ"݈tH߀Y'?^NwXrfoPg@(Gp #{\?;5aβ4bV0k~Ǎ.:I rv'?Ԕ>Pxݷtff99U)I8WM "vZGp!hI\^(AB(+7_roKm,Wc8Nk_FGj_?ע;<MHHKq5z+ٷb(c6ˆKb?_g˾OSK+(謹ߊF.I'-*[>M?rf7?<']gd}G%k W3.MNZYKPϻv]a+w]G8Wna=twe o``w>Ͼ~SRM_}~<_Oxpt·fnC|N/qyIji-b4ͦkڌ5 8Nh@ڝ3vﺥ`!XYF?u6M_KLMDSgUnwJ)L6+Ww=&w~͠B/^ ~@uMq:퍝گ*ڇ{v,8 h;`aB :MhFͱ+c1T4 KAaOpg$.A n"bA~hO5M.[G1\CM t0S$unV$TNAMn p$>fF&OE U>P6n7|((Ez5W W's"jՏ<Аl`}eJ+*>İX~/||jB:XJX3ҚGErNp/0z Wm^ (7}(JOSK@`:ǯOO9Z0L/)]!E0D>u'ķyG]vJ,G~z 1F$;oe=h? `V HA3 fKw ԡҷ{zIz_+yՑ/ ,<fߛ3 2Yp+Inlр徴I}odw'}~y('<6l37R͍)hO{Ch