summaryrefslogtreecommitdiff
path: root/drivers/ide/ide-devsets.c
blob: 9e98122f646e3190c85dc3d2813102f5a00f49ec (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

#include <linux/kernel.h>
#include <linux/gfp.h>
#include <linux/ide.h>

DEFINE_MUTEX(ide_setting_mtx);

ide_devset_get(io_32bit, io_32bit);

static int set_io_32bit(ide_drive_t *drive, int arg)
{
	if (drive->dev_flags & IDE_DFLAG_NO_IO_32BIT)
		return -EPERM;

	if (arg < 0 || arg > 1 + (SUPPORT_VLB_SYNC << 1))
		return -EINVAL;

	drive->io_32bit = arg;

	return 0;
}

ide_devset_get_flag(ksettings, IDE_DFLAG_KEEP_SETTINGS);

static int set_ksettings(ide_drive_t *drive, int arg)
{
	if (arg < 0 || arg > 1)
		return -EINVAL;

	if (arg)
		drive->dev_flags |= IDE_DFLAG_KEEP_SETTINGS;
	else
		drive->dev_flags &= ~IDE_DFLAG_KEEP_SETTINGS;

	return 0;
}

ide_devset_get_flag(using_dma, IDE_DFLAG_USING_DMA);

static int set_using_dma(ide_drive_t *drive, int arg)
{
#ifdef CONFIG_BLK_DEV_IDEDMA
	int err = -EPERM;

	if (arg < 0 || arg > 1)
		return -EINVAL;

	if (ata_id_has_dma(drive->id) == 0)
		goto out;

	if (drive->hwif->dma_ops == NULL)
		goto out;

	err = 0;

	if (arg) {
		if (ide_set_dma(drive))
			err = -EIO;
	} else
		ide_dma_off(drive);

out:
	return err;
#else
	if (arg < 0 || arg > 1)
		return -EINVAL;

	return -EPERM;
#endif
}

/*
 * handle HDIO_SET_PIO_MODE ioctl abusers here, eventually it will go away
 */
static int set_pio_mode_abuse(ide_hwif_t *hwif, u8 req_pio)
{
	switch (req_pio) {
	case 202:
	case 201:
	case 200:
	case 102:
	case 101:
	case 100:
		return (hwif->host_flags & IDE_HFLAG_ABUSE_DMA_MODES) ? 1 : 0;
	case 9:
	case 8:
		return (hwif->host_flags & IDE_HFLAG_ABUSE_PREFETCH) ? 1 : 0;
	case 7:
	case 6:
		return (hwif->host_flags & IDE_HFLAG_ABUSE_FAST_DEVSEL) ? 1 : 0;
	default:
		return 0;
	}
}

static int set_pio_mode(ide_drive_t *drive, int arg)
{
	ide_hwif_t *hwif = drive->hwif;
	const struct ide_port_ops *port_ops = hwif->port_ops;

	if (arg < 0 || arg > 255)
		return -EINVAL;

	if (port_ops == NULL || port_ops->set_pio_mode == NULL ||
	    (hwif->host_flags & IDE_HFLAG_NO_SET_MODE))
		return -ENOSYS;

	if (set_pio_mode_abuse(drive->hwif, arg)) {
		drive->pio_mode = arg + XFER_PIO_0;

		if (arg == 8 || arg == 9) {
			unsigned long flags;

			/* take lock for IDE_DFLAG_[NO_]UNMASK/[NO_]IO_32BIT */
			spin_lock_irqsave(&hwif->lock, flags);
			port_ops->set_pio_mode(hwif, drive);
			spin_unlock_irqrestore(&hwif->lock, flags);
		} else
			port_ops->set_pio_mode(hwif, drive);
	} else {
		int keep_dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);

		ide_set_pio(drive, arg);

		if (hwif->host_flags & IDE_HFLAG_SET_PIO_MODE_KEEP_DMA) {
			if (keep_dma)
				ide_dma_on(drive);
		}
	}

	return 0;
}

ide_devset_get_flag(unmaskirq, IDE_DFLAG_UNMASK);

static int set_unmaskirq(ide_drive_t *drive, int arg)
{
	if (drive->dev_flags & IDE_DFLAG_NO_UNMASK)
		return -EPERM;

	if (arg < 0 || arg > 1)
		return -EINVAL;

	if (arg)
		drive->dev_flags |= IDE_DFLAG_UNMASK;
	else
		drive->dev_flags &= ~IDE_DFLAG_UNMASK;

	return 0;
}

ide_ext_devset_rw_sync(io_32bit, io_32bit);
ide_ext_devset_rw_sync(keepsettings, ksettings);
ide_ext_devset_rw_sync(unmaskirq, unmaskirq);
ide_ext_devset_rw_sync(using_dma, using_dma);
__IDE_DEVSET(pio_mode, DS_SYNC, NULL, set_pio_mode);

int ide_devset_execute(ide_drive_t *drive, const struct ide_devset *setting,
		       int arg)
{
	struct request_queue *q = drive->queue;
	struct request *rq;
	int ret = 0;

	if (!(setting->flags & DS_SYNC))
		return setting->set(drive, arg);

	rq = blk_get_request(q, READ, __GFP_WAIT);
	rq->cmd_type = REQ_TYPE_SPECIAL;
	rq->cmd_len = 5;
	rq->cmd[0] = REQ_DEVSET_EXEC;
	*(int *)&rq->cmd[1] = arg;
	rq->special = setting->set;

	if (blk_execute_rq(q, NULL, rq, 0))
		ret = rq->errors;
	blk_put_request(rq);

	return ret;
}

ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
{
	int err, (*setfunc)(ide_drive_t *, int) = rq->special;

	err = setfunc(drive, *(int *)&rq->cmd[1]);
	if (err)
		rq->errors = err;
	ide_complete_rq(drive, err, blk_rq_bytes(rq));
	return ide_stopped;
}
LAHz^K0NX1H:, *pnl4SHr$V%Ŋͨpʅ3tB'% ћ{NAz{,2B9BGϕ=-}27, ;&x?5Ml21 NTzw`#p ު<% FI=eZn庼K;IgƨpeÈFiSJ  ,0=]xsޏ{|򸰃w$P}CR.Bǁ' =*u(O\LT\4&Y jdIwɸ%lW5T;nGsXY2%?;08.z26d 6R|ü>995rc( cd{[sAMHݣ$?zQ+5&O6Zg'$ K>8T݃l"T#Q*yn28!0B[lH~Ns,kҼڈ5ő-"BsŮ3oDGcEM㡡Vc?еHnsW'0 4xb:}f}+Gم^rZA9`јo; %O.DZ\kKY鷠 ;ؤAJD8 fYd琌g;^5 8&sU6|­E֖C^4@L""e8R-]$pl] `ppvtQ}FiZrQh汷XPíGal*-eL# >u:bX[]nˣ|>-GP&TⅯcfiH d/i*[[m[9 '5}3z}*ɏk @6+ +Y6}h7o1as>?YA=m朋RA*ct/\KqOI6j^.d$#Ej4LGߦ|ۓj5ՃEESPKދ&҃lx&/:dC2$zA(`nM="I mz,. ӆ6]TI5**ǔ  ϊ뼠?º*`ӭ' aNN 9};*;e25Y]9FEPuyq 5(xvzG@[j7+2ւ\ $q Qn\JWݎ(Su)q4e;7YҝLv.)ljuN?ڨNhVYDIWkhQRp)l*;-6 pzh58`hC/,,#2yuS `ͣhz6Pi$!n7L@#ҕ|{ h?Ogo3"p`Ɩg46 !('zKTVY(:A'^ɋ/aۖXFPZ򆔯]+|>34(aLXcd/YwnW>uź6K  ]ٿޯeugy)9䕀ׯ%|a J8UHa~Q[Y(A JդXb^%HꝦ*.c+;Bn?5VyĽPg%hyކ$ȴ1װ#=mh~)q5Tj\e[8y:g4LK.oݹ{ً-?QaCk<+ɘ))ϐBi*0Itia Nub H'یz'YaCj[{E&Tjճ((縷mH;])Od$YV6-M_ o2Ѱ5Vj-ojLTQ2QUq$e]SJ S/e0u%҄T:f7] dmH)u0Gc!(\'AfKaJLMrg 3l3Ӊ+~_tDK:IPYU_6Qۑ%/B4?ohE.Nܩ,s2An#ƥtMA!]sIJR5U:Ӄ'v!#~Nm[FRoA=E Z}*xu' 1w,`'Y<4Pk?#` $RLx e#凪 M@pقhHWpbd^G_|+~ؓ=k4 7]uT=nϖ"+[j,8_0z>FKc0R aViUF1?D"\ooiC)Ո3qr:;=KHd%hY^ZdC ,z"+5qtRhr/X͆}!MiBlO|]ޓSLG~NnwDz>1zڵQ92p8;ijm"UP㆚t԰ |\#7 yQA5C) $YzA֡dio&43[mI ϱB' J_HkDH%ROإ@pvZƢR/RPSh]㹙zrM&2jK8qR:lVh(#ϫVΫiڔ$$۪Zkkf-MBv "lHcяcY< +v@60${;9Z㮶H0鈺ŌB$B2wj 792 'Mi>ךūOwuտ1I{\#_pL'p3J`nl)`soştv8{8CbfHϧE2(3^GJ9{=-5!=őQފ%{* # -BK>! 1 }O5G3`ʉ *\0V&*n SoU<,s V@)&ՙ|&QW>^%7;بk: Hx_W=RH[YۓShCd1b6{5쇠(MlreeV$Hu#LG|SZd+fs8P]= /+$^p:~RQd/| |&_׌ F !#Oq_Kb )^GRy.}V~°,^1S>vV`ϡ 7?}&nxrR/>mWR'iOQTG(.|"_{Xg,ٕ~5O781R'4~Mm 4=WzKakD|= @?|ViujOZ58d[.oˇx8!Y}'>}) _؞ڥŔϒE&y-8c U'VDiy}XkT+eQIٸ6rIL,,C(cہKU~u ;$>˂T>g {sc"wEI hhw}+ 7/yIGGҿCz05;@^+[@_L'gTP$5D(b8 }>=#K-b~ H֪9jEIS%IU/]<=e8Nwf|^,\ҴDG:p$!]KHH P]cko]kqÚ#pX.v MWd*ZA*tzq>J<&zoQg%Tu\{CWw'۠L\a\"xoCf{˿ITum*>iUΓJH|x쌠TPǙƏ<;W~qAzbF;HhϽGKIlXdh.yyGþ6*\ .KISZc,>O473feFWyk.#R.?UYe_!ܑE$X>%|?o6%r44H*!*ON  8g.y|WLfKICS啄V\T!K^R)c-07r)Ԋ!ݠ"O&go%fDp&geh=?+{ l'\Z6,(fF֎@*Qcnk|B[Q9nj9W[J4? @To6 $nwӅAH^@P29_6ASP#}O K4EIH--ty0dgj{&석dPWUm-6 A[W > ~/ ͗a-GbIZ1)\K&4&7AŞ#ϋ|&o3S>g9[՜a|rl_2*|Dҋz@C.ܿia|]Lw[U$F0*&NM켹)}0˿qIJQuxڭdoA쭃b>R?d({mGHOW}l08n [S4XG 4B/KxZ<5{~jhdxjEjvz#wtΙٚ=4]vڍfd L\_[O~8heR%iщuX+A7Z 7p+ f`iKqiU/@ h{n'> p^%O!-rG* 􎸳vٛ TPSNHW#J"! y-.Y]s&36tڭlWخxո ~_5I UWɔխ4ۍl&p :K٣`A I b]ήZa0ȇ`65:z֞:TpID:R|dՋ\a|Z51ܬ{ &11>?Ȍ%=mAd+Q͝8 h)ZΪlD ~l# +3|ENA<ms "/ռ$,%ࣹ:wd 1h 0R${hs}."fRpZ,Kk{UHNlkc<1C;ghT[i5Dd89|пIe mWKyUn өO0R Ɉ KuܹоID/H~7y!ϴȬف5q0i%V!ltRPi'/ pAU^x{M=P .i~Y9 k-5A[$`~s+7U%7\ sL,noNfCA։cہVGMͩFxI$T+rDqJ(-n{ΖN RQVBgQjy\ x:ݞK]ҵVȉGEU5)EC.xOK=Բ&7 {0@5-:q>l dMW[5]5FVۣ i3N9Qe:3[W5a_p dߗ; Nn;M<6xf@<0=x !2TuYy\6\8|٘c*Lq5ᱩ3;D"%C+;Ah%Pq2a"d'pqH$Ϙ&djƴиQ5̐E[xddxJߌẉr ̟xdm!-`C`-I$=ܱ#BK_z#}`'뵁S0Ÿ4 Iȯ|*z|oƆ0;,\^Ά,wnww Z9hpGEg?3&8;}sxlYJȤ ͘YuXnCj |8 ÃM; 7&ax*ZFi;@N:"aɗBV-VN !Q҆>n{a% |\?ߡ$:i[suGݜ fH-g"sQm>qY\X?ט7B@JE>^ʔ.)Rwz\wAu=a)Tw{Y~T&2Pv1pՠ_fNt[0zhb#{l;U<4Np0|?O5kmo<41GYJK8Ϻݩ vhpw1!r$I1\L7UH]zM5Hca+{Ͱ#˿\wj:Ye 'Cխqy8)|X FS۪VW.G_Lߪvnޫ34cv$y 1WSYX(qrhiC8.F67Bb`Ȃ>t V\-"^wY3+d)K;_Y 4^E?[|:E.*Ð Lt8j44IyW [[´{2fĽ>ɼ<{M%iTm J76j튺FOe Lve5*:j~ߟpaPY%{mfɳ,m,/f>1:=-4xV՚V6lGIMUUۑUHW\t8}ցCߨMXa(K($9%c.Z,k+M"9m&) g*ccWw$ĖkkIj <= Ֆ^>sUrs,UkMIlOBZI_͂r:$N;jZt4#-r2*~!q S8iB{׆Vm~@@hq:W#3I>/ #퇄NB P #D)ٜ&HM`O'gv}pU*ddY3K "5iu9q  $L{ xkBuX3o YٲjH:ʔ$"$+?]rV2lcòd6FRE~)WN&fwa{o2/q6νXl׫2)y( 0LdT tJ]%;1W?J<ٙݾQ|oSFsUߌ0;) 3~%O*~%tWz" "q̄+dn/,^ыPHmI4yԆY0G 16w FOᠣ 4\ X5\mT]4g"Urzػڔ->~@(sm_W|"µ-]؂nc㖮f®nxIB~T=BF23A+G,RmiCΉ}c=!NILlC>X.WRi$ ]\99voqKl3˂a>ތ&>$ p:la:e=VT./ԚVKӝ܀ /_~)F{3~``"~UVDeC׶rzEIn]nݛ|]uOFh& VP~V5vtǞsLwk3 NB,}&W}:aD7^k~+{܍fU.ȼ+(wƑp.E.a}Ny=?NmY$ǵFL[H|bYhroTW|L4<3Q)k`i~Xo8,s:5Z763n-UYlp$lHEE3 A}@Ĺ$w̋N bh*2];_Kl%ImSSf'HZD6чfp][˄1/anr:liR?mumerk֓vZ[;P/R)6O:Ow ɣK-%M`t0Z4J6;|\ggH[{T>2jgv0=,yxpͧouVH_୴M7wRD qX@8 PUi75WH)%Yn[o L_HaJ9b>2,n%@n._%K0 zzNncΰRd7bLTT:l`:c73Ybr"q'?z.Vծ/iCśņ7![3qWTM>Is惨Wءtae('#iqaJ͘ QȿL[_'NZ6&~:v}2ۣ#IBImXf,kc`om,iqKxLqw 5qbwW-_VE+;oBjW-T;l$~ϑq# akȧxe?ޑWD~M.DBP w2&Gڗv?WƸ?sF}!,OejVPZX.$&<CJXyZHl*39$ , *i.]rp^vdJ|@qaz3W$zk@!~ֵCդ5/Ue4jb],[cYw$ሆNwE`ڒnX"I'VUvE aB qv6ffC64ĀcKrC9hB7 r/ԥ4֟rm-DɆ:0 7.-:q ?Wg哏cg5elpa!]vj4I¤?^T7^14qvpU (p3o$Y;y/}byC$=4ٯץe [ׯiIUYW&*+C5v ɏW ohQ>YUl#rR=뻂/:;iZ]d&0֒3­CֆJj8 Rɥzj]!7&u KJCƲLVG/1Tqms/ANDzTCvt07(ߒ\|ulM8F*W+F .BN.j]Bat=˄k0"8=-]uȯ齘< /VC+ZYmj0W%$Iv|Qj\CZAErv vԴmX0 5x^sbHfC[>5ǟyrxˋ&aߧd&`S•;?\zm{On))H&Q}PUٗxzC5 5:1'Oh1 SpIzZ@&}97]HÓ9x# z ȴc_/H [`]W[l9Eh2-Y-Bdd0ণ'+`BXtKF.J+{!]U-z)zR'9FmSGǭ%^iJi׎ ]ڭ>mhخ] ~>Vdsjv*]%i SN^p[70sX`~pלlwjiyD>4q JLV|Q~qLo%<;zXozG\BИ|ȥn͔R iK 1N(PNu~B%/[u㫟x̹8ӄ/!蠷:SZ;N3LG46$<`᱕-e niH>.5Nw2xka{\ Pht;C5ZE_FFz4]CR g(,(}lI9-Dz_M}5ݓSzǽkFAO5lN8=#9&k*1)2d,QFԎxB@&։9JAWw[rY.G8^X:Bg@Yf^ʷn,:CO;'ՔL''vUvǿ)</JaozpFûy<-shR=ŌjCi)|:R Y\U71FFөwɫQofS#(ͨ ŧMŘl"(4y\<\h1s}oGQpܝ@=D~"C o_w/J;X jq>uXN[M \?NZۍ*B;AĤ,7fI30cLʳ cWK*:“7߂i;}8JF05]lQ1GHsr`8i4kZ.\dIMpXCY;Z8$;VCER. F9e>F2ɱݩObF'"x{琈-Kͷ`*WTxw돿"G*a=RRڃ.yL ^9qWhHhԟN"Shf4&l5H/Y>׵(\-6 ͟35g}{Z/_ 儕8,Mj knjMIbwEHi0 IУQVi'͆0jf O)G{+ٓvɄ4jr(G~bFS|TA&oQ̜N?$.aL`{+ qAhM(8\Xx0?SΧcFwa H^vf"W)߻ɜ>-H,RA e#jA>q"9+蕞4Y VzҭH$S"TFbCe"HkP;CUU%->Vsa[{B[s[G,6Y(.h!ijo2{} (Whj(J;-B:sHbΨi*hj]E.NŠU!0j1!La5u L4?lf&l]`=nLd9(E=|C Qqu) W{g0gXMw`j5yH']~.&ST[ZIV\\[tt*PIT+ݎ'|e^tK&&>mz&j@F;' h6 au;>IT"/T!ԣBBYJACk@S.#EڞF*~& Gi`E+T~dg[0$}io~edmsƋ#0PhUj&lܕOO[tzR>ޘͨ|T7v͍QiX`PK?x[S3M}$OXΞMQ]tS$c{-hFzB$+5[~VI֓jH(}Z᲍Pb>ȍEJmv?NmQJѸ`zٰ(VcٴIjA-,M#_Qa);L09͑@c裶7S"34a h4W,c8-|)1={HZw+sVi0ꟜΆ;[dfXw(Ŝ2!t!"b@`o V~I2Y痝vkvsunH'ދtXDSH >2XC]ej p6/E(F|zKsCDMXB"6UE4bpIN|A|GE+D}ޞu&ՎWbIZV\ʁ_/ o,0AL1gUFXN҆Zili V1|!E?9,o{{g]:lJU: Q* ?3gjS$8OVjցM%6۬I:~mz| w$=e:bSW+p$\@O5[#f(3y8cxb 8o'xUB+fBTAd4oOs?˕,<+l }? JZsVZ0t9ȞT#&x RbG݁pKJ ۅ׌&Tsww$LRQZE0btҼ٬7-)a .gJNޓζy#Cm M b0ۙiٸT, ģH%'g !c& I4D趷-fvRG>Sn*AO[IJƶg@fs72,>mA5aF$|S~jx!??UiaP'ӭRUjh;,WQ k #uÆE>_Y#l3جU[r~ Wd 9nA!zmIR\0Pf}|I\D6a\kߩO!Jkc&5YwH.(a۸Iӟd? J_AL[o칲1 $lX,4|r ]ِ˼QLOZuɭΗ)М('|V֌|n_A`pZx+dtfM8K;S1gE[Ta& Qr|k[{7i{;G Z-E";bձR@B;/x:7n9Šқe8&čl=Fd'ݕWh_<_/3 7s*-\! hi ݪ:&F5bCO~N9-s ""{4{t{cr,5H*t7,}7]:v;jfMKNS]Qt6,B 2LAPw&GG."dMRz;oևJPW7֡`N%IrXKC2?N#$9chw:^z_$]t=AS#!] Yn>aoAdaldC'TFA}o!Pj{}%lc;5ىo*pڍֳZ[YHPHyܴ $?(dAc9>Za ̓+zN*9zg -y! SFa\_!\g\z3"=o?ѝU9NV(Ic.~!3ؠ(HFO$ʿF&N޳҄aunR8x6F }s߭n<_EOcЇpu6od Q zvhR3',(nNʽ @;I HבIE~ Z&yTdGԚNуe& ?wlqG2b-}bk/𔭌HmgK[nzrf}ry yبפR/pp0 ^WB, ;kw)=䶑zCvT`z7]mV04!@аTip'N|KX]r p_x7XmLgJU՘| t8ٻ!àO2NHJl1庈â~MhVخh[u|]]a B`# kf+՚%=22dHUp&|Dd2w&!( v@{7- Rfio'ҷfx[dޣ'K5ZnLMHohBn X:!1{C I/kd#=ou-OefYe"՗Zz̳.Uk_#/Cw( ,YC/H: `Be#x'go=gv?90o>?'$/g\ %mYgd < ?;uie9'EAFbڪV]UzqEu'ݮ"I?w6AU8I[k?IJJDQaEǃq٦ӷ޺%>;Îݟm+ =&_NbeSL4F)M纔o$LQL"1T΢j+*Ҡ\CLWƒ=}<Ε$2X=7-`>+'c9\ETh =MIU{N$kmX/__u2݃ EO!'ݜcoNrKRt^|lvmݗd8ȡc;Od8jЬ#w$a[ + B26p)߯#<|CoH#"$h"@-VcQ+:tp4"v=\rjSደcj/) G`P.Suekoӫ03] -{<IQXGBnX2 C pY6(>G7I7&6fRe/Ò8E=_;JG cgkP~Lz9KgS,oM 3w7"+@嵭yq,d<.z Q9C{'4V~ϵ d/ ;5LӺRPW%ַkB8zFAE-HzT}IJo~?vNAtc |Bx+ڧOF-f5,+eK^eJ&r`bt6շ9\A;%JysD7xtn$8pY[NOɑAv[,ݍ&{9O]@9$pBP5lŏ$)F"2ujQEzVhѥ g2Ic'd]SؽQ&FdGF1 -6D&qVT&xh'C ,K|-#3x):z+Nr?8fv"f?TAjAEdQAkD SגFu/t4QY9II(׀c#@{WThב˕fSFӡ%H9־٧+- ~Z3h3{45 rmUaRjC~ SBeVm6$ZGG$'kXш6j%j?Gg(kL.4^4"d%@|>|a5^86ZNHB'Xj9NΦ;:{ds8rkX29A~t.XBQ oԘ{pI*l.|W\{FRׇN˓(ɍ0pςd 6rYԠ): T+-ݷ \FptԶ~hĺG∐a21_Q@7w,]Qq ŞkwoZ%zjZտ { %F5AeEwQ,$2ol%$Az{ yMl;c%_wKRʎPdwjT;՚Jev pෂ᭥֞]YA\6=렍 m|nV1,UA[1L2TjAifHb\ g@sA\B0u=l^8ÿG 6~:ΞjQM{ZEp tЇ|qn%"{$$yDdA7͌`"f bW6i!>AA&zUفDi$=&_z=bjTtm1ʹrq)A)5>33gBO `O&[)~nL|'!RUz\4Q ξ]$YNrc[-2j()Xk+yFeg=Å owԧjFduIboa>qwf[TBIˏuә-CT:hG!цQr9t5:hEQ2@هLXoǟfIT=pb{lh͡%3F{7]kSo _joAL"st|MF"T{" `:ic{Z嶴t q$fKVIax%YC9}1Af=dCF0MaeR BrcѨHŠd;&Z,0fq%榻7z!Q]>1Ǘ񽯇1o>g.tcu~Jou+P/AR]+*!n,2 zrC?T)L|;SWq*HM3iX"'g%O^Aj-"@ZkJb!H},-|D$=d_%*y!y BWV[xjyQc$;(< ]f*wzqޯ̧z>12Zj;yfA9+JMX??Y,#^i9s@lkI^w23nF]H(˔?r=\:_hUڛM1,Ŏ_l0WM%̶63:wQs<4~!:1$2_iP3ZdGNdT:V8͆! ;Jᄻ\t EMP-K<8~,xhIl u*L&H1-̒Ŏ9Y *iuG dv6  -ν-*%aC)TW҈ug+;B8iX9MdCt7k]tF)jeVce@q3gl[h/X+- ih4j A\B9(z/mU:6`*zIZzǽuCO&Kgz>{߁--Vr)8tn=#KIJ%$馉Fg%~n<Ӌf $R; "8-S7KbK3J,N{_ 6-P;4qlC?:dJb^ t|y2u)>u4|<*<4[<nto'+8 @Necnx,)Kw|zW#vBTmpdu VNA-֦Z M2Cw1҈y r&k~xR[8ssFF~nq1'|j]t٥`xa݌$Y=Zi^A[I$^ P"Bulxg`с(c|ַMG2P8(g3\7:rhlnl@Tٙ叶biKr]ۿFh{5?ddBY(w;p=֡*f\/)Jgg|!drX-ΆI|!n2l|='q/\gҥ߸>,#4zCM!]9fâ8صB}k/zs30of. juT5auNQ 2<@pBuM5;WQlj#qSW3r3M%Y>G l5ÍNztQdGPf!VDoݤh@wS?Ī˸Ո\\MGޠJtK`D.4ۺ"A4:p^if=ɰV4>,LJ:H#,@99#_@~d[ڨiP߯[pWb8@[gfaK5 ŸKZGN_-`'>aBKKqqk0bGI,F]sɊ5m@xjPk0S_wZs1"T]rHl# /4ۣH+g`'{˿DHgҏY_)0NT6]՟o9C5Fkt'c>ԿjMWgR˵P̓Rt̜z;. #sI򲿑U6;DaiR'pPH #;WCQbÎI#UG"а@>Ic>Җay0sC**!| ly833CBc;*lomȵ/M%gi+Arfv\r}K=墇F덌LG&$s_r30} żg|zgGGg6sԸmIF~w(w^|B!t&7!@g\t 8  ha0A.=Tܑ,Soqwߠ#N[K~OE;_k"7,^t, ;Hsv3U1BTDz`GQiަ[*Uؿ * ) 7Ico|u-D~|:vbȐ6v4]!s9'tS_a2{2FPΰF]$5@wV! :Vu_U˵혱֎pfeX5M"u\.IZlXY9c0t|wĽ "4BGihY6eҲ^oֿ7O.g!؃O΍ѭQwՙZ퉨*', \i~izkg{.|$ka;n;[3}H KHol7jޯVbL\_1H+%EfaL ,i _v<7(- 2=6_BQQ^ՅNO:;ͺ rF}^\B%-fw=Z;+[kZ!'˿8N‹77 "5=GRݬTg3; owwsD[Q]7.{}AO֡s 8ͦ'q#s+#77)MC}^++"7;ԕuniH)e{SY4@$ZDf7AoCYq[a2dhLl@xq9"ΊbT_ʃ*1y)f'[$:=< LEm5өTiѩ̿r/1JT69>B d\pܪ7 I2n e\6;J5Gj9P8o:栯pƗqk<$}dyV_\˞=г'&lgO?MB/fR=>6r&+ Ls'ըٜ @._@AϬ=π)%v[dkWsIB]Sp!nTdѕ2{L gQ)5ey;lOPi(IgbzkWs̭a4Id ݊I MB3Ʈɢ9,(C"IMRC H2P,` Sts[EЮ Cnv^o4$e齲VU8{ؓ5m+;Nak~r/1[+ȶH(=a g}tpDCU}zvA,43ש$UX_]B }#ӏZ\{0W0a(eSu(Yq́'NVn2WAuN.BWijU{UMb; +-SrhG񡼈ifI 2 oTjӵK]5`l6*g-Xu^fGEtq;hmo6MVUǐ'v쮘k{Ny6ɩo {=%[Kfkixqc29 W@2/We:yΪ#fs$tȼ7N/Z {}iVHP19 #I ?!j\8Z| PmgIr²LnW*;fꕌCjTA,29Yt}pTD/t=O=p;#, 4^ VVn\ªҲ@bSLcO.vCt 7!M!YfLK~=Op.C[zAAbIX6,=rL'^Zm[42'yn햊9\z}wKhq4/& [I{`{kD&&gx3AM[㡙s,aubeTi'6$ ,ɶ|z1va42ށIj[.+_'G(%}Z#$\e G&PŹKr6:B˛z:7ݓ2h%:҃!1 lZF+6c]Y붻{#íI9h~zH'Fpf3DC2 V$LO[Y7e0rhM|Jn BfRHNڨ { :I0T:9&Md(%<|\aqPl'`P:ɨ pv[n Ŗ|(T'),0ޜ_- FdmFD%}1gVKOwJN!l<0MpXIk$]u^=Xfkֻy]cfi_ڬif$"A[a.k(n)YqHmC}bΧUֳՅ ّ4<$Lg_T蔇nokT!WA6[ETdRT.>j?#9LߏiV]H)Mt18lqRk[6fcW F7%A&ʭtÞWmOk|t6N?,&IUNyPҳw%^ ޲H x3-vSU^TE^;~j?5h둛O77綪߆ɗ4O>k982|\)-ݙj'_PJKJaXu֒pC2B]p˝ j9T݁y9z3(lX_;EtTJχ 6K^ 8iKG?BqĴA %-p2)7 -2B|CZ  ^%cY&؍r]}j/ɗEgk_!ӼOwR+ sm>hQYYHbXynp*Zz21{~!qK^(q^9'lGѧ\1Rr/'i Cq=ĮsP4s{S'P2QZ.Y"`x4W b)̙NKY]DE\ભ ]+)#9,tImn+r91ؤ5 ̖]\M@\ԿD +$Ɵh 3?֠3R{fZAM-ӑSܬzD')>͘Vrm(0wpصlLgrP$&lC6HՍɮXd*5{P sTvٻH? _@d ::gYF^OړH֞ K\+fG5 >Hs&zfD9[%)f=w'|^VGsbchyR&ߒ!%˄s2~O ̓V}xͷ[a>{9I⬓ZruB|rٓ6ingfPkK$prs4#b=PG`vy&P{w`=>n:Y[wTQj"A[|ղqmEez2"]84G\3b║.OxjvH\}iU `B5*ћTZ|ֽh}ΙN) Egu涅z:nfI%'1!6^=?"_׽dvf:F=z>urƭ_LJMM SUC[odNkg6!b]NA B+I"6@̛|pVdSVkTcOҶ2Ah“eV$6TWGݦS7[ l>#Opmw|-מCbg_Xl{OYdح0-H HZ ~L~aQNCMƪ&5g_ kkU$bdU O}Y kN$g#6n|@.6f GTXg~H>XIt˅1mJ0ӱkrT-tNbv\DSDvRvXBBº ּ11b`$N3'h*$2\h 4D^Z NX528! VaY?bpw+ V& b !IEG{"= Nc0%Y!xQ/EDhx"}ԩxy$a"'3 ]"F0=Yj؍aiXbJ9,C =FEzvIM˫qVIz+G] D}G}dz9+ +})txtĘ)Rd6|/d1?ޢVK{sc֢[IC#ѳOSQ,GDRc#pLt6M}B#=z? ܨ|Ivm9i t"FKQIo#9= )P ˘6vqqzy3H" )T[ZERՆ_ Zj>r_MTݏ^kuDo*+?nu]\QGI) ǼUmrak+O("7!HbP\V ZG>گ][}؛$l',B<#ic֡ KHI'XQHt }E:TZC\?1eWo&4}P>mب+F83z9SaVcfb5RR5bk ؛3rOki N>2:vۋ12F3`ߕmO$:5dm{;_XHTS$PdP%N7 =백$<.GTH4jÉe5#!Ǖn=GDG &9$ FzTA}/ n>z-{LQW:w}JYih^< p#-ՁBjWe mttF"Yą\RW&oY>,K0Wo{g5/MdO+S2o#e/!d.=%|{0#Kq۴~UN um-6e?=\9 KzO=Zdi= xa qL^y:ݖl1-AѲ`roGyNv+nM/mLG8@[~[{) ̔<;i Ԯnt*Ac0Ox2sD l۝j6H7ǴT(p p~;i2 ë{½M4Έo%qIe2ُ'7?gVxȜD JM,w ӓ}|K ?Ovid-h>K`%?{ӂlkb+R&PNAkr+1Y#?rQG|:+3; p+7C(=-%dY{C C-k!Hd<2$Kk gZbkJčDTyYX1+ )I~wGB6;hjJȉʨQD~y,Iø^Sp)"^S::$z9榮MH[m4ۑ֊`ńWGϟd`xYk[ &.)F]nFN 0'/;N#8: :\[^&1PG"?DuN+!"cu ^\^li&ipo=;ܾ%^n.c};\)}?b$MQ=ynU4 -UW9i:A ,w|mI*?$ V}jK5ӧ& )ѤwM &fXv&>JVQ=M~dq}w'ho=KOX/h.MmFɶk*>e-LLvn>t.͚W?OЫMAq՜* 5nh>RVu\I:l^z:8j):{ws5~wBޢ9JP^(ծl=HF~ 4HOӔv5xlc-l~-=iyrm_JN3O)7[0ewނ AiM"s,f֫Rf$M C\˿>8{zXP-pݝh̢Z$ťZLF]mEUpףɝ`Rf4l}r:XU&dط톚t aF-3N9˿үuާr&Ú&ˋ|;.׊hf/fC׶3Tȡ^[=tkF-/lnL~v:%݃8kbJ8Q]f)osGɕs _ltShV-J|,/o̜(}RW|@뚷L`lEnߙ4`x1pOkd=hʨ?}iM1oV!'3&! pFFB&6fS#?a8!ůZ+\d0Mq3M= ^RʤL&j4 WխTCr߬ND݊jmC dfƋ!,>zY.&p䠇kC)}{?ݐ=6d>XIf\mJ=Ͻ Ѧ%\y؉ϭWoI&W՜3Npڋvݲ b=*MPkl AXΆ4ZZNp ȧ ea n6,|.5Yզ+yxNK!|G:˂2Rv+5V37!Oj iC[zO*2O#]kÂfz;$jI;^G1ȯ2`IZѮl#&t.1y[sۅ 5lNC9]ޣ=,K'C.4wo)fBb~+牮&ˆa5}[%uן$R;6;I-xu * x{qtt=L-?sK CE bd g┦7 ^Bz&j2}E;xϋ|ra9+_z/O&32̳Gc0,V€M;0(\@[=~m4!wAtctR[vՀ[|rEwx|`DavƦL}у)2Po0d;؏49m#%.$[I+ܪ+_V9y! O@v.$m?vKgL58.+⅘)?,I˳>G ?+m:ŜJ{,~ #ta1V>WRt nw)/`1}yU}]@V=Hh#iM}dPpuR26i8 !qnfeNr3[7_'/@ozϡ19[&-?6JHԣ3PINyf%^f( -=ɖE؃mc_b;Fh$S/٫ŒʣO3JB= wxp,m0kjǕ&'6j~ y:Ru׎:̠Mh?lPW2$NIQ2IR#L'x¾˹jR-ِ$=.u~qh׭}ul0:_ ftO!sCOz.y\]X cbIvIl.VU+[{ʟs Kp{DC yfک3H>-C*,3oFVr;>~_+Pr.Qacgi0+x[/Hn^%;>#`CF#;4caAqow 8O$l!$8TqҞ63]{T_u$% ǡ0[j`C-l哘]nEhʍ\WmfISЯtִU.C4 s/F~*)u!-G,Ν|yWP/,5n7*jeX-EjX Z-e-VU7vNzU6vo]_9_Iw?}z -GZh~oV2?@ K_R+v4;_oozU|yBL \gid;Lc\ @fxIMlf}@:Q!D\w7Y[Me HdbmcfZO]ejZ8ز)w}޶m9{ )S%  O=l-obQzB\޼C;hJ,:_>}˛7J?^ fUY!MW(Ld{F25Α~=߼1k,el⮔O/bn1$e?ȗy.QN=iCA[}gCs^|8 {kD巬H x{hwk|u2CS#=F ? ,x4Z%.̋[ryXElOm\&n5gDbN.W_`~ \6%ZkPͥ2buE}8pUt[o q"f+nSx`u2>(:Y!_\".$Ç;8#P|0g,&i~dm̝MR5i6ƗI'̼iuɚ /^~A3]pϒ)F9L0 w̟3NN$B$7 7]V7g_, Y*> ?i'ӯE|Lz-)YnߝĪHYRZݮEOVZK(5;wY@U%u=4Qwr\[jj, jVͽ_]ɡ2/upoq7flAb0{+|R%9T^&sRb:ϛ.-4KGL8u-7$"]i,K`1.I 8Ђ)|Y$ΗrV}D_q/J8K3"Ip/NKP2ń[dxLz㏤:9M ZbfXVb{=!]zZheA)8e̿G\4 }AbҌa:/Vjkoz8$*D$D\jfwa]`+>ĠY~Flp(s&p"Z~W g!|pRe&HOvKi H-TűyMR)U$׉-2s1~Nz7)kn2oV&t̒Nq"sg㱬FtB[#k12C9.Ԗ,wbKs}X''e6_w`ICSceRP ?AȔHi*OJlS 3}A>FAD1QS]pZ,%_z|Zk Jk/K&_Da#0^v @h"/BIlT@JeTmB0^zfh߬'˾Lʌt[qd?9bxpNgc9p,8E뚯2l"Fpdӫ'G3gM1/03"Em O?/ʌTߚ'ڧqԖ8(UI^6U[$^ϝV٩ӟ?KKX< qJw`o,&m#+yQH#+AŻjJN(uF 6!Pa-I]V\Ћی~wI(SщB{VV+COB\U(Mc3~L1_c>?ЫwS$_L]7"9}KIm->.[jR1etIG5˙3>\3Q(_B{'wȸ{Y1%tr j^"TЇ1y"qFq߈13b?>py%AB- i$"Px\oo2f"<DwN q8G+I٢zNcIsZsa#=rꟙ7CL[ oz>]0gt HJQ$;(/YF'A ~`7oA*$KbGIOA]LgCG=:P rQ2[bNL[IurҺoA^ě4aˑUr9Dvan<J`/{F+[ITOF#r` GCdm&'LWɍJJ8KmN!/扄1uq37epdu$ \$A~G,z/#J;s3d۷o٧0k9=h};uk Jߛn,$]WJʉ[PMvtnXLH.noS{\9}N!Jc];x$ǩ$k`Du^[c-Ls2QTPO p$eť7keEI%Q1alSv ,tߛuloY.Wt'sΒO2'G7'Gu.I\#kHlOЦiETJ d( 9D& :bpԂ ]{}!fF}.^r3ft;L ]i/$k8d>P]Ml,NJWy7$qnf"оTc<`q|bC82 ^%T%23d|!R7:gIPgq(4t;gEʆxbHq 7iLR| wH.|SgnoFN:{jm-a9y fj o.:0Eh`3{pJNnn{C HY:32x0cm dhIt jgvxs7 6La[oPܨ9F'/6\0s.4RP^ , ^b64FuRu[0"8E_6Y z/]6XD_0T2 .Ӡצťy+&܇/ҮV3YyS# SKwJ'}:|# 臖s@27tDG>gӷkm,d fbcb;`|"/tqO6WBeC\Gc<zdⷞq2#X̸F:ƗMaae]p^:QrF 6vyOW\>cD~T^la_삯U޶ki@Bb,MƎh~gC+_{-滿@aDbD)O넛uE Gwiy8+x4 4x* 8{z:suHO#\[zh:Aˉ: Xϯ%@Nkþz5> /i֕38QVO$6*D?~s{fDMG٫7 !gP(=(WQk-gf6'.$d{d}7t Oe=YE-Y;L7?!'p+"F23Zmӵ~sXWM X1 : tmqtqĒ{؛*%ϠQkүP:@'ЉAr6rot/+fq'7bmlT1uh:O8WZ' 8cЪVn荼Y]HC!fk-#xqEFh䍑:b{@y!C5'X:} .oI 1qGTv_K'17E/-,G\JhԊbA[lR r<u<Ji'jϘaj^эΫǥ`o$gSP)Ĭ9AgnASјNzBB U0[G $d4i6{9YeBv\菬I1,c %/|:jRHF|.t͠h2Lav4{Fc@xFK&|c|ʂyB`N.u]{^[mt MzbFmwM2|{BH/)T2 ώ$&߷C[+/9g%Qcq-Z+1/4Tqm8\Z{?B\珤7mGp1C;tZ[\˅A(AzW93'd_X,ޭveer+$?gd~?c10&FD0GGeiziյ 1[FV F +m熈q5?yDu2{.ԉ` Dڈ:pkLd񉓜p/F< f4AX'`+?U*32x@Մ#to I?*^3Qx=rĊ)y"#z'BHh2`3mH@kGܪg@g\q? %8CI؇YjjAcPVʷD9'13EX7~Gۍ+߮M+T{K2KzJx#tbK,hycR#ȇ-%HCopIoK??Gge!p\vj\n(ơ-o(i9Sb|ye#u1*X>HX[(hVg$YWr <#{fgPrZJe2+8V ;?fnG{YNۂ."@CE<Xec&w} -Įy j GqЕVF8sb3 ddm|>EޑT6[d-NYˑlW./H"Z @-=3}L$@RdIs,=222'vn:3 :C5RoISY|Ɛ80SW39֞ܮbLTBֿ ,ޥ\a&o,nl "\!e%!=,NȞm?˅:*jC]wՀ3)Qnb> ƪv> B%hD0Zp2YͰis,jW q;6jJqcR_=5è_Nws}QW^8-LǃhX+ǯ&r/eHNɠL*1+#?]|9M[:.1$t_ЎMlZ-6~cA4DqiAqXDkԕ_tl@ 8 X05ԄK%UA< 4ݬtE8 m QjPCM "%`{:IS ++E >$ŁOFPEvS= `o0ׇXt ƪq)PR ᅣ^=[3G]2P;\>M)sI&6Tۏ [Yk:04#x z7ֺr!Ey [yt  57k?c7Pku*bM|0;ghBwVY:<ˑ1rlU¢I hvw~3 { 8x<=99R\ JoolRJ&Rx;(kzA^#$qd]VN2W?WF1K9BPUH}|rXm}om[~+h0Q,T!=r7X'O1ژQ[+ml^?4wHK5o p )V5n"S4ҏ|Fedѿ.,MX(VɂM&d^CLtn/ }o]g;AËc7UQ +\Qm~’'8:h0PgCgA'W3s#b QlLPkAO@X?T>yYpF]Ձ4 )_H dE-&ڏK_ߓFηo5]{Zj֮_(JӁ>ё)= DSzB V}ꇎޫjڂ穩#,OLIfCeJQ{ *ɤh! R1i?PsERƩk 🹨VL824O 45Fqfڮ_T+F*0_6Av|w(M"`K|zy㏗s1gzC&oO=?́m7\S!RK9s1j6Ͳ>p >P( v¦J,P~K21 vg>>n/zn_RY;n'9,Q?A aHڌ$eg((aJnaMQk+@8\1;ۛk?n 9hܲ-t= e&(/k}"S+v!!xҎ:!dezsftjl66ru"Vh0Mɔ^hAAKl"Zf ѓL30kG\ -6$qFA.Hj`,%hlh[5 i Oc? Xі˸{~M7~Ww]=2F'r|g噽'm#tV>-֌)vﹼFgku:~<_~w\K7oPY߿B;|)bi;.E_xؖ"vSHJKZ)ba_L[T[ӮcVcE)s1)mYf _ 0'NxT߀տ ) &.?$D CJ:V]^ $wb1[? 0Ÿ( < &  ^1c{7-}dA.J;l"߼h^_ZXkA_}/N/17yL v~x v~`-7u3rҏLըȖ}LD>ѹVsC-R_ӆ64 K]_/,{MR_7K;绊K}ZCg/yZmn^~0_!" 7|0(9ch^nr802\^+m0)Aa{gƏf6[/sK-7t㣓bL%rz㰂8L'h&'YhdvgK8׋l " SwhTF,һ_v>~W{waw9K~Mo$V  O3)k"Uً 3lS4 bAcKL]Rztwsr,拙ʚ^=`ټW$.S}YxW ;~7 7`/?mŝD/PߡIjv>=μidZ|Fؠ^Y,Q5ku'h`ifm:3O6X1S=4ri7IfFVk~̹HV3FF>nߪ7^QhKS9Qx/sT{zt,:ͳ"j YudSҿMH $F|[z0e YF+SkU|3q"eHEB{ Ǡk~1T2 t*,t6D%!!4#Ik/qq=;$8tEPK$$I moQ8n@ w% E+^roZ\L^4BIr-#CUm?S-5-{t-o8 gJ sOWp{JvЁ^ l8)*O< 1Y<58Č3Ÿ҄Ŷ$O&ǻAkkXŁ7H]_i 5};IcUMߗ$sG;x<Sy7ijżKA'G$׫뜚]_lUx2gG=RbXqaЩy?\8^d%azQ2Y Z߃R[~z;0=/}疍fDw2zye1nQ{|^=ۏdBE8t˟MYL21B@fi?)so(}ʼ;WEvk5 ?0X1pI)?)I2'lk,kQ??fXj/JJ