aboutsummaryrefslogtreecommitdiffstats
path: root/git-tools/setup_github_network.php
blob: e4e212eef68468e096c15addcd5804d5d2fd8cfd (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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/usr/bin/env php
<?php
/**
*
* @package phpBB3
* @copyright (c) 2011 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

function show_usage()
{
	$filename = basename(__FILE__);

	echo "$filename adds repositories of a github network as remotes to a local git repository.\n";
	echo "\n";

	echo "Usage: [php] $filename -s collaborators|organisation|contributors|network [OPTIONS]\n";
	echo "\n";

	echo "Scopes:\n";
	echo "  collaborators                 Repositories of people who have push access to the specified repository\n";
	echo "  contributors                  Repositories of people who have contributed to the specified repository\n";
	echo "  organisation                  Repositories of members of the organisation at github\n";
	echo "  network                       All repositories of the whole github network\n";
	echo "\n";

	echo "Options:\n";
	echo " -s scope                       See description above (mandatory)\n";
	echo " -u github_username             Overwrites the github username (optional)\n";
	echo " -r repository_name             Overwrites the repository name (optional)\n";
	echo " -m your_github_username        Sets up ssh:// instead of git:// for pushable repositories (optional)\n";
	echo " -d                             Outputs the commands instead of running them (optional)\n";
	echo " -h                             This help text\n";

	exit(1);
}

// Handle arguments
$opts = getopt('s:u:r:m:dh');

if (empty($opts) || isset($opts['h']))
{
	show_usage();
}

$scope			= get_arg($opts, 's', '');
$username		= get_arg($opts, 'u', 'phpbb');
$repository 	= get_arg($opts, 'r', 'phpbb3');
$developer		= get_arg($opts, 'm', '');
$dry_run		= !get_arg($opts, 'd', true);
run(null, $dry_run);
exit(work($scope, $username, $repository, $developer));

function work($scope, $username, $repository, $developer)
{
	// Get some basic data
	$network		= get_network($username, $repository);
	$collaborators	= get_collaborators($username, $repository);

	if ($network === false || $collaborators === false)
	{
		echo "Error: failed to retrieve network or collaborators\n";
		return 1;
	}

	switch ($scope)
	{
		case 'collaborators':
			$remotes = array_intersect_key($network, $collaborators);
		break;

		case 'organisation':
			$remotes = array_intersect_key($network, get_organisation_members($username));
		break;

		case 'contributors':
			$remotes = array_intersect_key($network, get_contributors($username, $repository));
		break;

		case 'network':
			$remotes = $network;
		break;

		default:
			show_usage();
	}

	if (file_exists('.git'))
	{
		add_remote($username, $repository, isset($collaborators[$developer]));
	}
	else
	{
		clone_repository($username, $repository, isset($collaborators[$developer]));
	}

	// Add private security repository for developers
	if ($username == 'phpbb' && $repository == 'phpbb3' && isset($collaborators[$developer]))
	{
		run("git remote add $username-security " . get_repository_url($username, "$repository-security", true));
	}

	// Skip blessed repository.
	unset($remotes[$username]);

	foreach ($remotes as $remote)
	{
		add_remote($remote['username'], $remote['repository'], $remote['username'] == $developer);
	}

	run('git remote update');
}

function clone_repository($username, $repository, $pushable = false)
{
	$url = get_repository_url($username, $repository, false);
	run("git clone $url ./ --origin $username");

	if ($pushable)
	{
		$ssh_url = get_repository_url($username, $repository, true);
		run("git remote set-url --push $username $ssh_url");
	}
}

function add_remote($username, $repository, $pushable = false)
{
	$url = get_repository_url($username, $repository, false);
	run("git remote add $username $url");

	if ($pushable)
	{
		$ssh_url = get_repository_url($username, $repository, true);
		run("git remote set-url --push $username $ssh_url");
	}
}

function get_repository_url($username, $repository, $ssh = false)
{
	$url_base = ($ssh) ? 'git@github.com:' : 'git://github.com/';

	return $url_base . $username . '/' . $repository . '.git';
}

function api_request($query)
{
	$contents = file_get_contents("http://github.com/api/v2/json/$query");
	if ($contents === false)
	{
		return false;
	}
	return json_decode($contents);
}

function get_contributors($username, $repository)
{
	$request = api_request("repos/show/$username/$repository/contributors");
	if ($request === false)
	{
		return false;
	}

	$usernames = array();
	foreach ($request->contributors as $contributor)
	{
		$usernames[$contributor->login] = $contributor->login;
	}

	return $usernames;
}

function get_organisation_members($username)
{
	$request = api_request("organizations/$username/public_members");
	if ($request === false)
	{
		return false;
	}

	$usernames = array();
	foreach ($request->users as $member)
	{
		$usernames[$member->login] = $member->login;
	}

	return $usernames;
}

function get_collaborators($username, $repository)
{
	$request = api_request("repos/show/$username/$repository/collaborators");
	if ($request === false)
	{
		return false;
	}

	$usernames = array();
	foreach ($request->collaborators as $collaborator)
	{
		$usernames[$collaborator] = $collaborator;
	}

	return $usernames;
}

function get_network($username, $repository)
{
	$request = api_request("repos/show/$username/$repository/network");
	if ($request === false)
	{
		return false;
	}

	$usernames = array();
	foreach ($request->network as $network)
	{
		$usernames[$network->owner] = array(
			'username'		=> $network->owner,
			'repository'	=> $network->name,
		);
	}

	return $usernames;
}

function get_arg($array, $index, $default)
{
	return isset($array[$index]) ? $array[$index] : $default;
}

function run($cmd, $dry = false)
{
	static $dry_run;

	if (is_null($cmd))
	{
		$dry_run = $dry;
	}
	else if (!empty($dry_run))
	{
		echo "$cmd\n";
	}
	else
	{
		passthru(escapeshellcmd($cmd));
	}
}
j)>*Ds/\R)#;|c3Rv?I?" ʝ7@.rHt6nc{nB`m:dz(=~޲[Y $^Fng!S;QAԾ) fNYF]d۠H`oC1!# aT:K"tu/S}$gzveKA2GHxb[D?yڑZzR.hYq83d(' \AuJ:& J+ ?ӹ +6Q?Rf G;AE_@ FTsf?Q>4e[4'K]G gςѹ7ƛ'S*[7Yq$%Ov l()MJmxsSLBʽ&]>聜n8eG*7BOA0-d"q1Nțoֽܲ/ĄlNdI JZ_`kmb#%J vc[d`?&q^dzwȚ]x2hCMyΡz,`)9wq L؊n$/ l7^*P06'gi  WI d`v!(oR3fVS68cfO!+ȣRߗ%Gt(toE/VN/QycU-Oq^>At*lF5el*̼q_ť6&c&,ʪ ՀżUB#wI \B|n ~tPsT |e}naK \6Q.(lF7LB C؂PФMI^~\jӼSDR ǥe=XDtcD yӺNY92reA(9! Mp0гe`AS46mTxXzzslbgtnF==ixeyS ; y\:%$<쌦ǓWoګ~)4 7P$6Q~cJ0ÑoU"7i޵˜QX`j9bVBfʢbɇ? gE("B8()>DXHx+ lAZSEmVtg*+PFI%$=:e%:ߤS1O{z-o2 l$&ܧymL*!& ӥfr?b8g:}C/d`1?vpwpQ9p4:kv.:=G8C_":>j1_M#f"'&G#X=#*Y .2I j j3~ڴ-qT\nƮ{Ŧ!oM>bp>lg{_g6\ VSEҚu m=V2YFBiΨ'gC.󰪉&e ) n|ʅIxcoᲥP+yUBܼ&yqg:O7zu!zH斢q^wJ/+` $GZG,j[%̟hyRz gy;/8e :^hNo/74J3:+a_T B /[ȕpt4 )Pb:nPaqطo y$QA\_M@L+yFfP{2)RߏLO<5ճrk~n)GFbxzL}LI`3u®>28T F~PJTs\>efMՓ? -P['ذYfP$Vt_WqsڳG䷜^򅰆UY ؈pxmظCX  O>2)MO7thVKu=Qa ]rr3/7D8 8guA00";$%GX?)c3N%}mxx;q}ߖUL'c/S}ҫMfcb &h,vNaq_$z&K'q^UJg||5G1k}87Zbnmr-wE'I41GԞy][0^ 3 ";{h9$R- Q;SZ׍ '#j/2w0!niC!%+Pm epMT`k~|$rG% 촣+A]3lda[w'dV豜KLw p~넄s?Vf3WU煔m+BV095Rl;1{mj?0 y~i@Mu "FgHc/j@O?2{w3PГ,hY7;,雖-f2'0Zuw&Qi伂Lh,i?@K%FX E&SНzĭ5 ayйDVޓw%6v<T N7 _lơJ KRWa3AeIf>!C<ˣy]NAvW m$Iۨ<Œ\}=CqRԾ0o|t3$yEeҸGsU(}d|k7a¼O YJtw7xƆ)( cŏ/CmSYVv'ނ&}>ƕGvkD*UOƋ eSwnٱF b4f|# #'5"Y(g,_ǒֱ^}zI Oe gؚ~!.=k\3X*y#ſ5oo#9w5,ؼ٨|#z[eΟ>^u]/.@6I\{50iJHn4kisRHԯy{YӯaJ,ʀ%I`EN?`'X580g L5ҌZϴ+[5F"Q_ E8Ş#8Ce,oP:Ml N_\ۃJߊPuI=Lhirr01*Zt d=ńߚ I'r1uڎt[ _l"eTNrn)L M/3HIC7_ڧ{?$TK~dxj +I7K|>4^ß4gzK7{#pPHlQ8> aeyR]YP _ϻ8:ṷ0e|bIx%Q~`IhH-b`0씳A \e9}SmV72 r;l]dRP ɨi57Tm0mx[s̺##a^ %H&9JQnsF83X>pAk"i/(N-'>K:"QJ*"q7*jmFCUNi 2 W`Qo}BvA|5%I˲cO>=OaH.#94zۥں[%/~ss-HChwup29cP`ׁ\E{!ޤ6_JXh?x%Qj^̲TLOps ӕ:l zO\U=Sܻ1QaKV.gy,p_ڴH=v_5D&H(ё$gv whӭ)_s0X{ьG渲>eϲo|9E;)2On)[ߒБfoJ֙yhRM|(Cìi&J)WmMzETgoe얞)Sߠ??mJ:w,~~U.ˆȀ wR)<=Z(6KVi%IWڶs:PL3n E EPa6{W2aD+ƲϨA{^huw>@r@9IY+%='}Y([]Tk(; kSk̂>ȎΣҭcU8$k) k3jq'Aor^MQBLC#kBsk2eiL X2ҧ6eE0Fbn9Y'R-4Ebj*i5߽`oHӄR!_A1lCOIAylwĬ jV{HfMI\1|q֐?x3G/b F6Z!B .%\6J<Ka˃tikVXEQ܋ՌHuJr* ʹMޚu]򓞞/ݧr6Yy{e D5:@ Ajaخe*\BN 1, >Ђ=a*VGByHԎbǔ}m g!n2f̕|[ }RER]/m{!O*`ަwAql˂ ںe}nu+C˅QQ$rdzfWJKdo8se'[Y,%!V[-hŖ;dgË"}{_W'Wh1y-e53N9O)"==f[׼O!`3́zzhA(c+]"^WH»֔!/h<Hg{izs(ptL[N)T4\N[;8cve(y-wSxߴ)"1Izxz w,h*)@7tT`ho"R/s0YnE *4ۊڝv~A߈3Qh4hŻV;Dd4`p{MH#u1&@oj_%;p;7$ nȢϵl5YnsBk$ t56/5VySF%T Zg-7g氧*Qc.I%wq%KQzeذ}[RM-Dy׭NP5k0Hq2893sx`;=GHgFm"ݭ׋CW m[)nbE#CX*?z2F:1_.Zi{3]w@ӹoI )c3 A^*v,Xw-\;< b{YP0$jF'%:/;AjϞ}utZ67}$ƞ~+*)+ k4" @P؆BI,Xz7G3|`0{g1YxW`hބ8tHAQk 9~ϛꮍ"ZZr l/7`&m.W8P` {&˪AjH+{Y0GAzO_7KD X릧-]62f BN̳x8\l^&f( [Tݩ*̈P*lul'd ;9"QX-*;hJi7-xჱA y`]it%5ma:DІ&/!]/W@\8s cH>.|-Wm0t4 `+-!X+1nOW>%ɹfk4Ő/i{ =?lkNSdPh0{͊XD0B1wgiۦUgtO[sf*[}QˤE(;YW8BeӚA Hf=-wZˏ`N "XF$C_ J=賛{T|*AhrJg5h>dMsu~u J&ka yc-yV0Kn[]iWcMPsin7ڀcrxsxXY%9"RY~4*W; F'E5OEۼq_H}39\N]<HɐI~Rc86xˈYq2Č[3 ATb7@0P3՚ |e'J7۰:ܜFjD{mtU-mJ)%(۳ BAlH\_6jיWܠM,SuE+Mz̀>(r0+9|(w탑GBBGCݳB1QԎlA릺$p}v=# KG Ό…~V#Q% /G~7oU찆Ɉ-=JVF}v=`͌bUI԰rH4蟐b+)pcJ;X5崠] ㋗U)iRe\/w0{PXPwt&߲'JmID&jbR+n5r|jc4.KЯV/9Pt\(|X\p Xd@Wع7i'%C Ke2>n\ԃE)'#Ģ[NQHn}%YY+l[߾&|-iL^-nF(j gBygP´` [DjvnN{kr#6jq?u.K{=q ZN&Bq L($-t L)p!)ҭG=-mu$w&|K44־sdE*RG>R0 9_)ӍD8*83on[*x"U3b=%|5KpNjo~"h1txM:/ڢK%n=P7Gs[c8mqjʹ~גq ѕFN”tNE*'H$/QQr /'LIERπ@to[ r }__vR P e]y 1?_{f96f?V˦!9tGk*ԉx:$ ֭lxjJ˯7ɀ65NSva-W,ilI_ѿoښŒ+M^)V 8f`f7+2ׁ̯^ğ9u++Aj9::wƿ0a?/B-^iʐf,TǏSYx&n}z7FIfҖe aVe>tIr;LPϑWTT=Lst:Tܱ eSfn B{v33@˪MM >AkRs͓ցN|_g 4oi)N1g.IE}lRh'x_~Yd^W SNg߰_#:ɫ>$1ܴF %j,fZRơ%3֨oZ`UY RL~WJW[c];\issB*5ot&^lH {Ԫi:Q1扳ncǏ-7Yꏟ3l(4Lo|G_U$crn?vٺ7XkO93ӫMMxuj.!^PΠ˱5,\HzۆgN۔0-؀\E*8 )R$ fD 2űc 飃 RzqʄfFq-{qu-^iuB[KfQ{YB{Q}tǒw-f{ǪE ȇ$["cy4 \m>[ eG0h}b 4yq^m @gɸrdk"ra1 /PCX4jL{g"'!ODZ8$wB ւJ=U_?!`b1H557=Ra}y8r:,7+,cylj&bm`A1$^2X/fcN#aLo9/fNL6mąƾB! X=Vm3~>AP [)`2#̆ENwl"yhWca ,VEC`[\rJ=_:Lbv"ow, s)[x:[+ib}*kܖ7LwS忧"6=;KTNK/k& OB= 殠f [Ş]@m.*b!˯r.U _Fqo|cp}rCD!PjVݏBV]z xd|<\3"ڀ΄@"bkXF ;YL[{24M +s#ĨBoA ɔ緗rِ,*ހ郒g+ I #t߹ЧC6 Qo-)Ox$HfAlk%.A)rs\AZt߭aS0 =%yl.5`pm͹F?- }UTl#ϔN z@OF^꓂ DcB{(ߴ B0.[c="VaJWHr#mc@qX0zJ6dfo\w6ʩ3A}PMb胞C{/ ~ "x6VbaUQ9 dvtAQL1uȣl/vguCO +܀EYBh~胤S:O\&`p4Tu+|u,4q|aV6_N Zܞ_{Ck 56uuzLo?(bjl &6ЮivGִ^Rx/]ݷe=,#!68~TʦW.q3 zبvMn; CalexXnE4I/NcDUXmeIAL}YJ eW*]xyɈ#oU/E!,xlL\`wP@wh#H;9ç8MNS$3łē&Ѿ>U_Zv\r_yΙ diSz%HCZr Η4[쓯^熴W֥?EȄӘ9s9I^j0 o@WWoG}EI' Єs(<%zi!q"4{v((ݭ/yYrĥt42:>\ Ì Eizmpuܑ^W[K?Gq_!2y\VkA^joutaAl[?LJX}EQsW"sbqpZbdG8eW1.SwP:Zuz!˦ =u9E=K!~ec^lJAbæ{>f$nnQIVT&QT?jEa|C R1ekt0z0V iQ?G!$}lK_4&BM>VU&[_OSIha~нp  wT=Zڙ:H0ӆ'묺 `Y6 cZQnH:IbԹ.?g~U/WkZvb5w*xs{DoB1ÂxO~)+G*Ʌ \ *޹a F9ͼ6@QGc\T."E:H"^SJ^!+"R,hf_x9;bVn~SWJMנ=_j0?7>1%0t'!p2K}#ϭ`[xM0k6ciWQ_'9f^1P7d@q*A8W|\5@4 w 6c*];)- s 86K輴ADQݎ3ZnԔ9.)XŰL A\&pv9W5{_S43/ 6l@TAR.FA lnB<1.FF>їe%A3*`ZE$(:U3ǫ*N- -ݵd};͠?UO֊EV S6}SaA" |A<[E;Y̓`k6x\.?ΐ3GUAtvQflR:kaO캡0:Yfa7^yn&/~*v̈V7l/<4;tGhX8d.eVǁ/ޥU9@|tjVϯ9ވeu#\鎵:d$Q $! nJb͎-V3>y<{eIWa[c?bLOh`\NPRrM3.9@< U0 uU mE x<&t?/\PUsy%ʰ˭|/# ĔHp'F x{)8ch$PTjl0%ڝpE/.dHiٙK#/Z0*99WR̖"Bj$4G@ɗeCOt.s IbzqP-ǡÈ~ރoGBՙ{F2;F *c2("gvc$( u*pYfsLa1s߲V KLC]UcTM!acXd *7b̾ϊ^ApD7/ |Մy+ UF@g5;ƜXbC䕽ŹOyH ]2ښQ%DnYLx17j#%bڴVy| 1rŹxR%~@sKFH"8te)E`3:]o^7$&],!TD*\x6iY!߭'6b]07.Rٷ#0U}{O}5$ LΩ 'Leɋ|cDex:;=>?dy!׽iԳv 5B~>>1DS+AMJ|aq{wrP\Iy]Sl&>)Mv2)SoE*T6uAе0 V>dB̻SZ.Ì{By4.!ReKD2:P>8PMb9]gCnxJe`3h ñ4zPgZj,$ڶ4\/Wxh.p:`dx6>6*~7땁' ơl_jWbCjR̻XaS)rѥ7Ơxx[2۩17o*:pܖԜ3IBB"`L5_H ԥ hg4\Jǟ6c/ˆkh|ǍW5s'Z[FVh!30N*U݌sa1b$PCEf*<䀅&ܫ I9.3̇fvj3y*]Θ߭zI:j' AG{jx0C ]dgb3B2ɍ"+S q>?SHp(Ulv/i(⣑}(=WWQXo?L씗#7>'VvcЃӽQpɛ>b."-4r>c|Yl}+ĭU 8,h_!%Ͱ! هieTSOkQ^H[Tj 905FU ?ݭUն3| e<گlN8L}(w^un;6XA*'Qii˜8CYYH>Z\dC}I?ڶǹxÓ 9)@5xyp{ Y^g+EqoazLG>:0$d z`KC}Oj:'g'ȫm=Ư1?sgKn~8YBnă2{w0+EEo]KJFuUBɫYϙA&UU0UѓavU`X(jҨWkGê2 ?C( ?4aA,pA:`P-+\WlL~v!qyD9%7ںdP|sD*q!3ͿQ#;P&:#TWJ)W`Yp.6A[)MNJe&taD^40pQ 0xXV"\/.ªf0B`TӅfI)i_qr\$OJT%:!g-yfq֒aq%S] e}ĺl#.V6,Z@OPʾ-J\ 6\{1 -05` ( 8\ qWڶd.0wBqc\6 ^r(v`2B~ˢM ,puK.*5]-\z54,iy- 7 sOle: 20|s;۫"@n$)<(USlEQ5^/N3ަq;D8NݵdjqD&wtS/`.&mF3.PJ%w 5I]K}2 .қ̈́;̭?ȑDAZ8L]cJ~R+(xD%&4y{]+ ~ٕ 'vm' t=rÊ@fe gz@!>F# 3QǻīLzUG<7kwQ)jjC#is$Ə@ZC\V\(*pvr}Ik5aA=Բ,LR\>s~ض#ή׷EoRAc>̢u0huc /iotձ?TXdbIgQl^$%m̲vg."/FRnmcsyb')Z=ӳќ \M<6@6ma/7ߓ" \ qmZC , OcJ!Z,rF[i\Ь2tVpʌF'FTڨao6sԴmu|b\2;=4Z #k`; omTٙMK :[sD<©ە۬fͬ-)TlTr~>BƊϩNR b@E],6blj(]/l&OzmkoE|ă{$CI6l5F1fSnCjH$rkp񡭔}7`y\YHKA Jh*kZC/يvEha'tʌ2g@o<vu'ۯƿ]rlq轺EQS^Qsl{!JF.gg@]ubȰ.vѷ\wOQI鈵a A5G"UQ;+0Dj2|tu#&%B-k1ib=vxhg~񾃬g+aMt5]0 .~R.K)љ-B_pL0>r|L/u[^(bf Fܨvn.fͿEm9x_U7#@D3EQEfDaB|L[%EZ$WҠ%%;YV|-)[fOlÖCvwR\gx݂.AY`sgq V/01bTY `j8N_@M "WeX|^Xp(vˌ^69'=7;eQ(cI6)+^$eYLe]ГI9 f*win)\wS 1ڈ 齊K` ӚF3bY#^dU,P)h*ě/[Px ,h<Ӡ.dk֏%g ס]74d%b3(Jֻِ\>\d bd`ƫwLźbPcj;QmJ)l%l:yq"o #ȓ@h:. i{3cii+׃[zv qT SוSܥJ Wu2߁ICuOYu^n8cDʒaf@E{C{;)O*3/]=)Ag`7(Í?3e[&+#fl}X\1[;PBm&j06<Ϙж5ߘd9@,C_'*% )B~o~5-ɲ3b"MH/v #iqW _F̄o /eDdu_Q!3ٕ{ XmS|Ӻ01|hv8l)nx0:]|WJDA[a K [c^fL:]ZL$HU\9.]{e5vt.eutb}^C+=@Ըq=5Y ;3~"Tl=;ɓn?oJD -h H#O- )zq= \f^@A :lJ)̿&S9R((TT8 RzXyZRINH2;֩FI8WVxNݔ5p G+Ubل= xez/ Hvk#Xu;K9R:qݝ pH--m};>#0a}^)q;9&4 WN|S8W`'bZ*Ehp7-PBdb+m 0s ud.E dZϜf&zg CP4kg%i)! `k[|Vef&H6@@fxnN߅Ke9&Hz<} fdH07 |5R<*[RV qd"HG]45rIM#-QԈ}]TSp` %I39C`;'x ִ/]YKG7%@I|L){>n+^fmOOTyj>K9Qt Q?{dtM?*D;^z FU v,)MP1;Ҕ]wg2Xw/ 2$wחx7<Js׀50q+q>+&Y&_X)-{Iaein@Ѵ`qyXq|;87dR]q8Hh=zƞj6&*2Ye}I"?i^7bճmmg1M0بqCرI୶G`c~*(5D>gD;ok3bwN));*P:5f( (ߋ:-%taх(G vrm6d~Pr4/j#x%+9 :wSfJRtx'IiMEެMeSՍچx1Ejź~@zCAۮcpvׇл‘DZh&E1cy|)O⦢j ``YPǨZ\1S69rU:b5UB iQ qdnQ9` 17 9w;YqmM37JK.&)jYnNk}76a Rƻv g[5إ`Z&Fxo:~{PPL=%ɜԴdE.гddT|_IvӖinIz> c4aow".jV&ByuqeU8J.s.x$d׭k˫,Idarђ:7$|(Fޜ#YArFbL2, IX(n wl?DTa֝}+hOZKt[lwf|O9S_mu-V\) !C<Z>B@3^6`7Cظpwu_-Z׈t_mܫ^Dvw~Gӯ)0?fХ8ԗ|=T}pwK݈fKdH%]X lȉ÷)v `}q <+S+Bϻ1 \'"!ZDq; dRwobt.htj 3^ʹP, bCǗů q퐺뙑Hɦ6w^R.7n,?\*^CPNSL=sE^G>d` X]jAЃj6`,Ys")c ٦Kٷp3!ZmIY#x5wnW^};}BA5E P<@lC}6!7|TH?yp+݁*h^{D^~ " #s%(D&N=-տPowľѩV}q~;1^}PugV/ !u,Oy iv,K<Т k n8׉{yw[ !'צl-L߀+x5@mvagL?#bfwxc9-y|L<d.z:r蔚?q DEs@4.Q¬Nz<`GphTP5qҷ$i1}Y2O}:Vj .]cLA};VitȚ5KzwXV )?}z`ܩdQK 3k9 bbjkL$*S kkړ,%lQi1>(?-;<$I\b)Fu ZWN^U}1UaTxShn~^"]|-?Ϗ+ 89a[ ?]5۞S1*pUe'aDf^AJs2L=1mqX@w㦬S [8km>3/0Q)tDxR)^mI,=;7yJg%!fA,/ _˯pN L H@kPu HRBM LSLGFdCZ;q7Q dRN=ݛ8hr5{ aE]oW̋ZLWZ7k-+I"Z!fH͖ c);?yc#&z^b=5E{4oe?-{Ҕd=)U4嘄ޗÛCsE7"H.)eoGH_;J8J;"vMM3V?Gy}zP7E4M!ՒFڵOc6WDiW^sгUbx*9j躃!mn,o{ ȗ,vv uBju2.qKݎ"-ʑel|ӧF(ΑbEP6G;p$P+IwQ k>BqE^f,w+TLs21v0ۊqV(@IڠGAokBdt2iPv?^)Nu_/xfPndŬ=1{VovۊAa7hlhylyWK* 1;ۤ F-,6pn{fT6SžVMcZ>:p}O9I(I0.JJ'L %U]F74܍FݐT|֡_24#(?bIvjҜt;` @Řf\IxՉk2l}a4M>Oݢk3:QZpOa՛f7Q('ޯbflꃏ "26~H.;$8H75#O~]Jt_ *Ǡ!C=}@ {bq@J`'v?O /{[+ā{HgI/s%36ΣJn$jL27O0 awrrm-^BvGA|3cxu"v;sɣ 4TTH_)9X= ]er謲I{nR4tr|0P 孝-["'f,]9"ϗ϶9PrqN APB _2\/BrJjÃT:Uf)c 4)~kCС+%\' 9G:>S3(oZ.o7K4RZiE!H8{N0Dv4)XV\yy`hcGHrS;SȕC -۳%[VGRYϙq/1D70<0F X.?HP魷ɗݲ򹟼  ]5U71I_6MiB gkm&^VՊXaBYd4p=[ }0FJb|ͭ̔U3jun7?,SBEr .dA/R,l k[HELJsjġ.3gᵪ#|GY#8^J;&VS)x7.uwMLaU%YI) o9@/9nUk޳Zc.2kN t Ƿ1|3~|dfgk[.7Q[.Po.BZH HM` Z73;9UMߢz۾'XZZUĦmTA..ٻPQR;-u]|}=㏯坁B+[k52 v? h@"D5]/8 RY)Vx7Dj{ԔJz G#!ߔNLV9'+Es0(]?\!6WJM:zv,o3M<-f &9fýv_8<뛩b].3;sC9sJIt^;ڎul6EcɨV蹬8.^V^_8{+[+OFmz̃ i-cUy ig7[m{2] FMѹ̸6G~Ϣl# Y%T=ڷʧߤ郔B-y ½⻄"vO I">*t0ֻ; ҊaVJ 6@{bhu>KĄj_p}'T=4ւ}_zQA  ZI|6Flm 3Y@# FZl9]" Du"tc#h>3M߭VSpl4;J؀x!1MYOEݍ=aC?t{QAjdympB/*74SI>? q]Pfʥml\!`; vV{"ZM>@05a20FݦAVJs*` YPNHf偺{!xqeL|xZQI8L>`OR=R}5s#+v.? NfSM/ͺ>\RX!QuCSwz=Hg@h Stel}AAT5܆v\A' 9jkWJ2afl]q\xCŹs%i흷x0j&hHԖτc򝝰e-/B$JwER:A) Xox:6]Y$Rp͞S9N˹ެ":᳡V:tYBWEzi 0VT G:vW iIM*r`@jDd\MRjDۣ!T=lݴ1 8Eξ*Kr..bx# mԻtRt{W% 4\HyH-`4 / JTJlB/F! {Yq0ݡlow7/4h‰SowV\v3?74n9MxLOOʂ-|Jm R8ox{o:a&uc XHaՎ\ #p9 ü"[% mpHyU]>i6y٠U\mᶲuuWy h/XdoO63S22ѼV3kk]b~\՗i G[Z.*ٿf,i}9%#,I?B\ I5~T[hn5`#-"9wnJ>! ^#_p'꧓?޺BYkp6G<ﶹ^4-_Ք_τꠍO+8[56~F]J}=zC;ڏoj30Zl&|&3͑->c'!<Hth"Z(ꪭ hž:<LJ?46JZ9u*/V!ǩW\ᮬtFIg3y1%=)/ڻ{e3>¡$ŝSI`n39p$yY~m@R'Gg~\n7JeU;V =|%Zʝ讶6xfݿ(X/Ĵw!5L!o9Z%NeX3E(iXl_p4uW{NJuKO-7jA(3z gW*3f`1''&'"VwE (y_O6ŬJΧ$zk+?2CF6!wڴ P=; ~.,d%P*06Apl #o3MMtUSq&41iFp#ٜeb/wlдώ` A٫ZXJ{qpEʦRr9y~E_[m&Йݾi/\*g?Zåcf{Scp&xbP҅Bp^u1KIOx='D(T-Y?nI`?UsNqv{: lKQ'\E?f0@Sh9R Y8q #ܔNcjtؕ:]j3~TD ޡ%Pw (%Y ]ڽ` 6&ZͲİ,8ˌQcr4XwE U#@a❳yTLѥNF(Z{T0wTD~[`>5diKYHLLJo}J-(wDiDOޢI5^m:' GVR8zTY7Ja1:m&NǨU1  AQ9$Z-/ۢow'Iy{-(jxb7=ŕ| $[y YB̄q4g*G"xq\JFv_ ޜwZQo˔_/£y!upr wko^h R #xh*ýrų7ٔR*n2P&r*iu̼8@9bp)k͖gpn8AupҹLmٚev˝v,ùp$䉐>u-g#Gu`n4$8E8C*e[#mP7֒e!sU֐:9hKGYoW!GLk]-ٵ`&NՎBgy=#-l2i`0LUjc-yh-aO`gz"bm7^Smx=H3;9UZ(yAj`HO$'@jSBj .<8s 9(ߔJq;`\ ĠT#nY֔|á%,_g Y6re8ߐn[_G c)QD@B-SL.fP>\-/ N " G\;/}sNL@@4ʆ:quF|+(ˀovݨq˸hf)r.Y;ݠŷҪcfs8T1Ma]{ρ_o$NiJcX1 k"z# ',;0BwM9f9K-DLߟUªјV|`}Iis`" ~5)9k±B1!y-GJximSRc,EA?Ze%Y&DLS+lh0-q䇾SCtه ХU2 wa2R:PQ'!2noVBy  5`uvj/|cl؈Q9dJj)ʼ J"9ۅHNAU"ihMVsvuNN'|jƷ3-X]v6A 'Xݣ @9K"pdz@2JXUWᇼJ%F;`a`Y3߮zŁka7]#^];`thq ™ַixʔ̾5t=C\(_p,@EYE3-kGi.b2bx |e3+fi͌բ)翹g%ڢn9FفJ~g'ʿ[vՓHBC'v"׃dw75yRNP*I=T3bN0b"[S#N G8eU?G׷WAxDU<7Pɽš 9#_?զ^7 ]7qz9Bd&+mWDfcm^`0Є-b֛E|#6?ɁMDFD)2H[ٶѡ 'dI~BaT|Q:)yVQjԞ`i(<(~>AAA})(=B2c~uZτL$Etj_UGT/Rq{jl;I8R:cʛB$rp. į겚6UᑢN|Wnz0{[>k߯^4]Jh#cՌROt6t}G|D -ZesА'TVL3L!}Yer_NˣL lE!fuFA#Ӆ/'[znaE%HSZSI6&xSVɏwsBt{|%g?"Ǵ>$5l}Ǥ0[V|W ℙW,I.`MvMůYqH=Q0fUP %M0BXxbڜ= 7;{naJJ=ʾi fww,zwt;J`Fėdsx 2yjz GkD tvl>YUJo \YiV]7k6\?+NkMjeY-xg{+x"8D[uyv dT77t!<|#ӣ¤s4Nj7NMս2ur7|8SZA yImED8ΝOQמW(t\o*fKS$&G 9(a&˕q6ڬBW`NRe|kF ?S *g*Tt{.WtRt<#`9<w6FukH`G=W3wg |p3e1Cx-sk@"%\p,zSG.@8P崚|K`BI/dͦv OΧ6K8F;GP?j܉}?>HwxP U6{X#eOOW蜰aV񪱷Kᩈ]0VfJJh S2-:2lv [[K =>#ϣ)-a<<CᕞQ X((-7Rx)lEO%?<\jAxr\4J9GAňv2kRVDdK2 ]k&N6'ʆdH\̎"Gc[tDtpuֵom'tdWSfoU@{H/SW}es[f0W~6>hS*+^)@HpJզtKT}F[=jPstLC 4# #zVN Bk>_QfW=.Gps.G'3Uy\hSNɸPƣv]7ciCUbäzicS{m.|CBZy#0!l-WViV }HXo IU~YbZG C(`7ߥ0 { 62b85;©vMtS 3CK5涴=}T!?T]]vHYV'Yc[fƃڀDkb|ڋÙq균& f,I%@/B\UjV<ITcC hfG^F)u? κ߾Q]?5  o&lCS z|8o&˶E 4KڿŎ|DGMMbze>1}#?U(5дbږ3..K5 χmDdTZITl8r3RC/T>9. h5tsl]8dKv~)KdX7b&Yz}[!P slz; FBN O k0A NQ/gUi)evj9^Ҝ:q`0*ÑD&SlQX턯Iդ&y(%Xi-a" Kpzӝm((A (.u j[X xBebH SPWف,܌PR= G|/OȐcM 3hHj ̒M3ʑ2_ Ce+4ZB]L[V()Dv3*hZ##c0 |DJY d^?B5SkxbU`+ƚ0No4οǣ焎U'EU2Di 5Psmuiz9,z$RSQt zn8eH~IOݥCy{TyОB>{&YDεɧgad |81y|^(5S9*`1Rs#oOՎ2Ү7_Dutt2k(T('{;H HԄ)B}8 zRoIy?֣&st(9ߨo]EP!PX>RA'tnh8Sp x9\ɕ4D}iå rԡ/BPZ5[ 8g-7+If;kCXgY ű^ryIrdg\s4$1x3sϑ*l5VYE*0n =އl@W{ R# FFCb%컅;m؉L >Q׃ -zۋ]|.R=SƥM|~!5jc hp&}ծ$eٸN5Oi$kNas.б A<690a>O_q38Fi\x1ksM棅aʖkI)K!k ZK{kMU.72v>Qʆ3u!%ܱ%\7, JV,B<̢Cj&E~*ϳ@7a:>x06QX3n3(3_?20!tͦ4xVޯ 'MU*#Ϟ;N+Yx -u+Qļg}-pwf^5i>JǤK=l"amW/l^ Y(INHq{ROG_Z{b|vp Db<- x2lrh]4̘%_%!g9xpSdm;Iit Ȱ\vYžcnsGme9Oߘs %f@+ >Avx_sx4rRb8ZFBhr؄YNA/֘)ry#*h/I<.D5Xb1q%a3lTJv2TЌ ON*qAr k<k'M= rIKW§ "̫=*x ?G轎I/B]@5J֛iaUK5G,%ZgI,B;N#an_dWC!ɢ<2Ot'3t9iD3R(D&6 zBg7wBW4`` kMeO  h{/>'4";,uձEĔ'u#T/o Z4"6Fj吲pB4&QB+HqUPޢ?Kp%ܟ;4=y!2ix[.k{Oo#Аю:n" 60yGl84 ξZҸP4dVozR?U:mf>NJ0 ;0T7ild du֣I7=Wc~u>a= 풜ʤi(|8)1Z *Yin%O99 SL&QaHgcGn=>c͐1CJ=>(U5=*Mmu=Yp8,0 kb(_b9c,5K3 )aH y Vj+rtH\*J4.R@= VjI^@\i^^ d-)EWlpW'%nbCa/u;.b?Xn+ AZ~?'o׫fZjrXk@(iCB3(/+rX$⎉I:R+›i Gt~_;#X˒LK^ n/'d;e*m1#QbaОR.t`epf](H_O>.XUg{؝U3Bl;Wpj[0l '!:ל@"W%Z!m3z8'g:%l=wcu% xp҅"V!M}Q`Ė^HzrP*+@v ܣV68Feͤ+<=^.\gbb󁇉+TBh4~m <-{0U􄚫dR^kUZݞ18j'iیs[[/PK7vv1zuZf@{zA45*CD F(O}R;]B[Y*aMHxPJЊtd% ]2P%nμL oTH^5 ǢbIc([|Rq̉P'#boHo^I<)bxqF>ROxd@Ϋyj>KzV)reA˱_ϥ{@轻u * ֤Vɫ<^۹P÷8kڷ#VYr5dJhE,r醥9HxF^+|R!s$MXpkՒo(De"k0|Nѫ{DǦ--.tgvU%Ē>+.a1&!Ycm p-M<ǘ gj:dogI5 Q]nq-SCx_D1z$Jt6(ԃIv fn'2 ,9l?]صe9|TpN[*^ <鐂p0?ja؝P\-®}BxbWmpFHa91`>T:(d `nѬc4 _ףnG.fUie/R'v3c (ik"}환oH }v y47Oe%L*8MV\޼^Kx~u6Mv7; + P%gE퓻w)\-[u,y%3-N/,d{dͦB6tfpLaT8lk7]ؖw:]<vIc\KGVdq8k!szD>b/" JXi7q6\ЁyÖ,8);?zm 8I<\fvj>g$+D*V;9EY2Golqs=ځh5``8ȩO)@$N=b,.Ï0_ C ζT<3KA?[e-(B;yDZ}HG:"Mjm`pc7V%\c;艬c24@KRЋûӶ7ZV,_U-X.3'>\ co5PvY< Fa/b)WQe\0FPNag`dɷW-c',cχ1+`'OP|07+5G7e"օR w605y:,|P{w‹zH>5ubew-C,N?'ېF0z-#( Sm?o]hg DO`Fn/0cZfT*/Mai:Yk4&i76UBEEu:*-]22zVj 0:l4H3@0r/3=]UgG >/M]qr (kcCQ"U^R*7w]PVitRM*x.z}p@g0_uzN۵D4Q0Wr1z>(Lud֢n\Jss!\xQ;meP ra_.pں^J>dOZUϯTd+P.:s י `"~zZCG T1C< m01YP**W'ĵJ b-d!޼eI]ɔⱜo^\6 $.?/SxdlA[,j;5Y絞w˰#?-QTP4^3ɓ sf^jg3%M&MIbE^<\F}eJڪ̗B,kF Q_;_­rJe|/u 68R$eԺ˷r$`gx,u*9;3_P_"uB/볰M9fvK9>[zNJwcPjg]qSl A{Sx1@a1LaqYɛRl _2lЁ=bB˱2)8(xw6W_Jqp8ơ<Fde|{{$g@hB]kUTeML;HS6h9cvDŁO8-z},i (qwنhk%$sKJMeq-VA X '/d+(;#r$MO hlpGIL<Wj33dh$$R;7A }R$&Ԕ!*8 džtz XFL2Cv6sghe'csjޤv3 ,ã !2Wʥ ,#;Gk! ~ "qM,*5t:9QËm!=!^0{J /Ҩq~w ]`;bU*hSKFR_]FF&Ԓ!*A]oӹ})``]{ަd}' bh9ƫDMeRPd'x$zH 0̉/XF~یsɬ !"1,˜pf2Bk |w0ܻ}UXl0ݨENbժ63 B"-3؍QQ~R1'C-!Dy10/ cPGF+h;y'SG41HLt\c %`(`^@y \7 (3IքB-q&D_%CpIG^(FJ޺ ,IO O63);TɄºfi ḵJ~%ƵWMXdSn[e;<,h+G; Kţ&o7maDɃHG۸|9gi6Vc#>'=4w=+GKcZ7^A;!-Pl!ݗ M{vi^(<-9[ AzeVT>W]QrKGfOi;&dPӰi󂎄kJpXk `%YUzk~3)@9l["#1C]wwe}[ۍ8]\U]i]Fyzsu;QHAPK\"T !>ߡ>@53QVR &G M*e fWYCd~b[bAtJDv86#R&W :pW$98F-npy&tCnECiw WК?+]⋢ Qx+(Yyɢ $gv#1߼yG4@rW}z|BjzV˨UuSc9w>>&$WMcqE[#KM"e˘h.c@mU# S} e ?hJF(4Sr+M/:sÓYWCٟK][ erT7m9v<) 6A!J. + z$^Xav0 =Np˴,~D;CiR%=5KPЁQr\9mH1 *}+3L\p魺=当B@y!;){>\ !OTH,ٱn\e'!1xEz1q\|h:ae wh?0kakj(7L{/V p &|^P%ʲpK&*O`ƌ:{2Ђ0 VyVV6YCptK1lp-v %$!*Ͽ'@icސ䝲;}LIea<[gj|ScZRpı嚃v6z$0B~yqw[P Gk7NuLw; ٢atJ(Szsr>ё4c,0>AdM)fN̓!qTD}*&` 3۞ۓ.;)J5ߝAa:vV@.Tz,.$\:zuN aav枏;Kj`?3W|6]{&`J@c-!z#ۖӝwhd='<E;#cu9.?y#.6d=~f<Ɓwg\OQRO Z=>+XS"p_`Ђ~s_ ا0*:|¬]cLXp@?]Brq$؛墈?]iX+w,03᜝Wً ~Lb"a&_P=ҹ'%K[ ? (TsQM}Fdl[rwh ‘r2\ GFhW.atYy-KDF7̼)¤˸"3|jiP3~_|`Xxwb͑$j_P}D]ܻKH%\U%>؇?$ssē[((Ӟ|$ݙ''"8N'Z ux=א#N`ύINhP,c"qDTI:2 k峗(H<0̈<yXS_,L%B1  }BDX5i:1H'2hq|@)֣㍄ogBH;WvA֮D~v`sf6Adz ;A@ G^S;P$H]s6y yA ݽӓ,g܎gf㎥+XUuަJAca¸G4JX+tƀj\}7,mS0Čy C_8͛U&9f3O/~pޱUAvZ)kA:mt MìUs6ފ6T54Y5GMr0ݪvlL;2(%Sfyj9@:<HB(j%ܛ7'M jqM5/F~B9S>ox1o褐y vٙ_b,?lXK>oLx6:tG>RMї2uU|A2jS7aNeKnkUjb9FꪭmLlbD iI,a *4 S| pJmCX)iq"M>BII:'` ,&k.ׇ{AԈL%rfmW`:ho*tπmm}&n_ ||g,SO:M9\_3KXo<>tTxrvݎ; /Vmy-Z;3L=xpԷ0D9L [Z%R'qlF-qڶhmAYWG2Xb=+ö :9ЂiHG587T4Y *eDq€8=!b*#PRGl``z1mv疓 (Xֲ?{k،.$%~(ڴL;sSC@=_[\=;[bU'm8o=tA3tDC=:3<jzT!UT ..UkaI/ p7u%tՐ=RGxAv^Ȯ[h)[C9Z"US,d.X'DUsPL?brI1ܗ=KBˆ4ʗBIXZ!7LMl3- By%R^ PpHAN^:ij[& ?иYs vd7 o9N|GV7Sx 't5h敉d. B[ݧlfN* A=Dܫ1Qz wpR]GJ2p, )լ82ӷxa$L{!f,OӀǾ}b pF PkȁH 3zZڋMјSF>/v=03N >3A_IQ<aJ;KGqnrNDyѷPު˹3? #vKdbB~&P Hژ^fyM1B#kXA0#`KW&rlbXZ6[y JZ=(iv@uYERX#l?NAd. D 88n̖*\y7e*VX#qB<^TB=tL-֎Ec/,}Ò` -5@P{$Z,.Mchoq UYcК4OZ UzTYg5 NXx~Hz;Z̹6}*z\zq&qz:[஫k.O(c7Dx0" gz#j >ROw),"}ZP]rv 5_I  p?yQ qb$)jCU "Y`2Y+{~^l.+q(U"8fR|,:ð|&S8-aPޤ&LdW^A:3Ӻ5A~ڞ¨mf82p^Yˆסxۘvk@ ^&z++ߦyLbbUvv+Q`jFV픣k`܈CQ^Xݧ35y+ZzByp$<0QMJgYT_2~Zɘt۱XZ@t&x̍f&~"År.rPrLPQA$ 69GVu%Ԇ&ZZ'mEm$ u*]/r u[g-Io2i!; 27 ;'޿J@ʹM/1_Xw5QЈto-q8y$9A Ԯ nkJJ죯cqs}$w3Vu;".y׶Q] Fn[~43WhiqS "׈qTeT*B|[tH3" U"WIMWn5>@R9&j^/pBbi28.[ݒGdw/·da\1<;2̘x- W7-iP*Z>&.5KQSIt=nX$ Wmjώ1fщ Iś@{Háf}ǂR]14^gT25rTrz?pޘa.3+e{ym/sjT\We*Dol~ef`"|\ $q2̎`JU*l;8ASs?K*vքEl8Mc1ϑ+wK4kx s/UUCHՐf9!vVfK2=7*^g>~|IXQmۜ~. acYPIQu%+?$m[-0L"K){GJ,z(y,frsgvL*8 [gԿh2Yck]F-w25{$k-R߇ETkj݊lt;! ]yYtȎFݞgtm*H֪k$^*~E@3jgWwhwLnX4|'sINLZ>h_ǿUƌ $Fa}-ߞ$KʚtL/QF#*M0{`ï'N0|3(@3Q4=Z[ڼx*srExoq V'ً [ݥ< (ݦfޯ0lb0%t (%[1~E{:͍u?;rTbٛ.d>>; jCߘUe9.Cxyz?[f54y#P㌏*!OJ}LQ]n*S BO@"@f)eDiϒ%|ܫR9 h{jjkXt%ZK9RчG?)% ,/FlɠS ٰZGf^W<ʚu@'+A=W7:|V}]=UȢZg@Bd;#z= z4Fu/,=o{7l?ɺ#*U= )oAS]ns$uƞ4a{JuIKpSuZcvEGy@PAW%Cnl)mP7[*vGUlUEA 1ZN}X~O-n %8Y":71m f1.߬JOGDƋ w>= >L ލthG`F^ГR.So&Rm9_WTwcJ#Bhilմe<50~Q5\9^@ wۺ.xv??RҎ5;)uOO|ք; E?d;#$IFPX]1Oeodp坁-R2,̡rydh`=ܞHv۝ȎȌi(&8a t e| ]qj։~7+]1n]Ebq LLo,$Wf 0eVͺRRD< oBE'úH %ѵ,O?&/-0H>S$_؆Pɹ:ƝXo;n=\Ŭ\[OZpũi> iM;:tN*V6{騛03O/ǰ *iMKxQ9?VFuCRAy47^"OURXMו86No<_5lUBs.JȲhԀdG6yy* %\nj{+G*ݲ!7 _a/R1ԴhT`"4 :F ݉ UόKl R'($; ]ډ*DE;n MM>H֜м HPUHk0@*Q̡r kw3~L u~Q\}87 8f%\+ryĠx$EW~c6O'ٻzOS2do+kVg 31E #0]YJ;0Z0- :1f c'/j(&5?qJ[gQypʸV~ G.Ӹdvm;Ԣe];^0FKӁЋW7_OAG^ܳ`}#8jmN#~峷4#s'hPʾߨWmɬ]Oaϭwnbޘң\"o%4IGQc0È\b,qSn? U|ؠftXkǽ]͍ GuZ!ny'Ǻ-nQG _I ϼ).CYn$4X~624&˼[>SDu+NR%R٧kb g$ `p)~'c/)bV@;}ЈT^Tk}pi>X`R*5K:?*-`GFNA0:v%LʛUl.{C?fG  [ITsMNߖX eԉ7J3$ xn^WKM6&7m}gItJG,\9&Nh;z дC?r3$-ybLط!!*Jj}cL?wUzq! p#tN5|<9RB5 @} "Pa8{SDsRӡ@O뫐T{pQ`mGws<9>QiX!tƯ 1dZa) 7ޢkԦۈClweAzL]t1e s!tCڏ|p) |sT[ [.qYJW0w$s?tXIKǰ%RxҚv[=9Aٲ{PHaA3Q(fLl4Àq-2ۄ+ܫ!""ngkSSe,sD7!,=c={ K=N/PϘ} DV"( V5#|l.lk!Py  |൞sij\D-.5e6BbZpn325((~nٱ0Y4e*U`!*Ysru^T O^胴W7O7ZaWcڛ齕%yE`MzDM˾ϏzheE Om1ꘊpD| n{0-K\yvx87' 2X꒏R(\KUߑaq(吉2m@VZEGz?.D%21jxY_hZ;mܔu.3z uen{^k"1Z* KZj.wQ h薸|4GXj11Аo]­9h,='\2Y@fA0%:k!e, o׆$PûY4Ae~Z*L1AZVU)G1Ld+OS 8V{G>rԪ<3P\r\1FG#W}gvpgQH_\j?pYHA- k04߯lTY AѧE(^X@ ڶ7HMĿO:r&hu3;")F_|s#ƚ[ΐx 8[X]i^c }`1}itF=L.efVդx[XRDI%6cV W|˰_/$A<G1ֻTS;)jʾ^bŸ O,ӌ)!V2|]4n*ZF}*p1J?smB#@]/cĶwģzXhҷ#%RNбw>unW%"8#dJH ͙܃Do|:bGWů'P&qlc[^`~wycw[̹rS4 Nh1ֽZ>hr&TsFßvCd‐pp*Dr5بw5WuI.zz3MqӪc3uXgipPhFc;)p~JI:JG5#!~]m`{yr|Wr|-.QZ6a.qbv7脇*%gYP4=`ǓébIađ8@k;*cZpHwNP!l `%fKzVQ aGUEGbSꪵ.k0>]#oL[b eV`~R(Ua Cܲ5VT/ɽ'-l@Y0 zex\gnGHVz1q#w0< #NtۙOusë M8k)eS/YDy;sj#7ӣƳ[jx v6n>Ž^g:lk$S iQ腇: 5oemx'E5@ Ku);"KD]nی/3-7I?K4` (@_r;n ؉ ݺ{f-0*DUp}EslS~TFG©!{%ri9|4F,Z2}M?2!r. P,$֕2c~ Ћu6UPDyN;(+gf\M=qm1z:ƻ(0 kd:"}Z#FY Wrj8|N);=4*{^4ih'Wԙ'۹$:I)E װg&WzϲX7 EJMJBAkXKG%|Nj>h,vk!a8Z^^?3([fF+rA@;+ WܘH=c/ ^&;Yh#5vfT4ñ9.vRX{MC?)FLZTYAz g%1w±xΖ?FN3#F7P "@nWϲ[@KH=la\+d>Ù8JDjqSU此yh?*ʶs&!C=~ }\a5C@ ]߉=6-q3PhqO`'wE}WI%:)@G ʚ21D5̩$Oyz5D}w*'%4ܾd 񬨌^U /&=T!8\3LB2gi?1ᓆ _cEMFBi#-`OQli#-&LBigirux"ihS c(Pe& ]+B]#)]]ڎZWT⨌ôW7} b&A&a=xyC4zX%xBp OJsϸ{r qu/ P͎Mֆ̯~f= d֤ʼnZZB0 >B%T zC>S I".w`ʊWZy_~8O s(*"C 8X?LeAêZ4j3=[kuecv|4u!֠uxIga^q}`rF;i׸$bd*^rTˡlNG;E[L`[0Ux:CpTiI/ oKLeфCnaCHP<&6)|^-QX\$0_FlК+*S̓ ܄,=xf6 'n(sZr޴zJI^J܌kC}H&xLs uf(%B i$12$ w5i^{,4A8D3L*S+SR+]fa4Gj~ZȃkSGAѾ臝oGNujiL8E^F`0C9Rn`RՔC+~xe:]5#XB|n-L)OSa>TL(yE!|:³~`_{ uxW-{W `=k T~I`vcK0 ((ďM\"%R'"PGdߢ^82#bQ Լm 6';&(@dT#|m $7bvEC?YڀfK@G^Ǘ Uj!RqݞսZYrXDOhjBx6b};%HUKuհ.̱>ZW0Fxwoϗ:gS{A՞Ij?08{ۗfdcyo=NLи8;aTb3 -48҄Z{upv7nt r%ʏJR35^0nrn_Ӱ[Y\B[|{A pcdVF1O }*w u"搎jIǣ,9#L_&;zȻDHHu E%8DvKwiRG<cjFGH_F*" HȋRSdRy^7{beB2Evnab%e&߯uz#8:nR_FV3"!|َNشRo0G?U9%0?[@cO7< 0! anx)]"AcK3ٸ9uVy`đh}>4Cݎ'&z$¤8 (}hC@H%HM5HSM\ESb6/D{nμż=T $ ]Q9_1mTĿpb$=!a3u뵸ȏɾr7Z=29x̥^0+7P[r; I[0gvr 0&ڼoNUnݺn sx$/ *AWU3(vmEO40U&ݖfPxRWǘv mǠ>ܝM": 3ۮ6ul%3wLabĚ0*,/.mL3V3S e.҇?OM,]#ݰ]={[8ŊO;M8W5 ]51DHHNF ̊;JBWoA@ěgH^LGwa<8CwuPpOT߻ɳ([4;]6սg?kA%y JIʯVzA\6^] H :b-wQ\Ga$Wt>\Q$`<[HV8>z:Z@1xlT0$VYpZQd(~QMdGGIZ^({]vUrw;B(d`Z pVR@- ô ( 0y"5XC7"@ ¦$laz>ASSF]NG5μLNl|8ш[.k !2Bܡfgs ˛[qɜ1NmKv_NTj ; V w_@3 =3S7ԚFq;I^$vy^X 2t$/BZ8 Nުdam?/U(d˟M>$?#mp&$ -Ǯ,rUBE7^E+Hlk zY(KBu_f= RE}&6^ roN%ockV)O1GEnbOlv_)'j {"E6*'. !pV(k[h &8uv L_g"] GU?u5i^}hxJ]NWyWh|%fEGCf0L+mj{)+cftRiʍl:ă 7c;7Nmq#Dͭl#~ %OvEk y^+~aW`n_2Xv狁M(<yy%"vmhqJe%k"nWI'K_s | zn aDAmAݦgIQ;JXnL,jmΎ%3OJCTAPq(yڢUeoh0i|i!Rn5\ O{3YU8k>v~ƸO%6$1jҳz'=OWY XdUF0[#{TLi1wjt%!\=A49&)rqzc@c Ąʶr i $kX4#-aNQnnfwPP4oq\ W oɨAـw3Ltz=k:j`(Rie1qK(>-,&Tq#dNBʇWypl\e@ ¦|=z֡B"!5p"%YVY}ihBEG]z)ca=?m<8߱̂L =}34f \HB$u]v?,J5iHJJڣ UOIiyP1[jAn [7wzg[y]IP"h2a_Q|ÎL߰/7ӦnxnŅpF+%b3MTg5$ :{٣K{Dmq7pL+>yCXpK&4L(e\K?-ijm y9(3INV9?8GH IYJԟf{B]0SզjziyTj"Uqp|t `Ӵgʓ8* cGN%Sw= uhQ7)"qu,{ճoY56D;dC+@XzSa+:> ` C͹=P z.BaBӾ*X8N3hI̝#43czNnt:0 R;)JgۍLĭ`oVьyAQ%=Ӳ@3m2+k˹cƾ.?M) /ǼNYZ@9]a'Tq5 |PUd̚6 47^?.¢_)P&ԬOrX.AfE 5/*hq>Z薷pQTr`qϒ.oWPGNd˂bFb-F n3g"&ON;R>%@b(sjkHT7(42<k10(r{\LKՅWG>l7l8 gi[ /NI*bT<32=X0I]+ ذ4$Ը HB7R cN5l=B -#LGxBޱxV$KXgvҁe|`ziʎ0&MkB-(ʂ8_tvTk|{@?& 6;|qbH sYD| Z`T5No.2} Lz.>op!K(AJI$ܳ?"j;L2/ޟQD ] |ˬ ‚rEbpdfgW F*gq@7`P2f'U1X6bgH0/dZi 0A0Mi/qۑs,/X3U s4EL ,'w+#{kEYV EArdsWOPA( ?r=*>I? @R`2Cs3*?Vդt V'ZJ~rzRV8؎~>z>8Ե5p0N64Xms1%mc fp9+[3cF+`2 E'hvXrONHz3Ke'南EҠqfixe~XKÌ(LQR,jdl2RK~r*ouLӮ4a|W}y(-nn( tUmboXX*ô칒p|7 Zw7P IreIP~K/^o5;&wA\jЗW %[MeQ6GeSa˛Yz Ga!͹=C aų{l13):A dq ÔkE󇍟?*k9ұNr\. !*7Nɓ o>$p-͹d;]u4Pc`DqL?߲:vWOʳ!3Z[OOr?S/ Za: =CSW٣8 S*M UF͋dbՑnթ1h]p=\bOjɤ󋱤yD:\;)ЩM)tڰ ΅i_ BNJCn&a)T=q"4 #Dq1s =ۋ Q.R9 \dYGI6ZFLtK6o<%,wt3\-Q޳?^6&3S7`]! cmBHloĬ_ZO<,<1V;@ކV n"w;4 7% o@a":u'OWΔӋjp;1Z-L j|+zAH*Ul]3:5g[HT-I/lz8l)WCN׶ cGT:ey_jn^bȫ8ޫi 1= g\@`@]!clhk`BSc2iDع?d['NEqAK>Uw/SצOtAO@`%V]b86 0̍';y{01%U/\R Zy Ǜ`R1B2d_o}'·x#T:_A;h`|)&q1Kw^ jS-,Ƀuv= 7(4}xo(-Q~Ͽǻ ɶoP lsUAi߿}< +Uy1Ҏ?̩k*D ?ዃp;Ŷ&!dsetq h8+Jg{+zS<Z@dר$у ;BHz@$#>F gk&t!_2+&N'8/}imnbT:y\M&G}8l_yxV;켟ji`+Vv:(FtD25 ϻP"Y黤^8?jjuY%LPZ`R}mJ5O-{uQ藸 RR 75`wKz· aZ*-&lH`f `P]u0tHBap5&=8KĢ+L|=٤3HvE}z8̥1{ j@ QzY΍#k 8b?-M"nguWe$!WxRGBɭ8'=4cj ^~ !҄OK^4.uO)[U'=kݭDf YuPpNIuE8r hjƙ Pt'tba&Dz|'֨JS ca%ֵz24MR,e=Q= z!',Wp;| 1ɲ; #<jqfp4lPw؉ϒ޹\NֽޘgG7MNϡ/̇P9س){MtTK _jU0.PmG{7KPHG?H8(LrәJ?5ы6 YcZ3ggM^B}:Y4蜡hP?3Itճ>U8ET1Θb$VyU-t_~oӯk dmcg&z̡* ؞ ]VqOvvfdCƚE#%W!Js $UD8۵Yv7*ߣ1͢H!<M񊌨<D>{k-2HT8)⽣#!{=O=!Miyl wkD#x hh}Y8/mQJWk/q: X'uE=/ۨ܊`; [y \$2 aq0jBN7f'~+-J\Q,Z+ ,6:X26j ?Y'2-bATm5P|\eS^ƨ2V$I[5$|$)PpЗ:^],ȡ(yb-M4#21}4("%-p:fMJ ~f J4dֈT\טnq@RD'P@=t "9kY כL3YhJo(Ԅ\EʻTz&M)ebߜx%ɹK4Km{/L/UW}JULRX $:y~L>3i45o6rS E'pq< ({tzЙ-K"<ՃwB{6a~L Ey7>䟤 roe-dR`:~˵SEY^Q{h%=M;ؐ`?[\12K^ߌABMm@ıALm8t!e3kBRV_ͱ.kNo@A]&lvM'&(] } ?s4wo2x90CvFq0$!6^p-YE)$ :VO+{c\lÓm!a יq<^ZK}HlK'\YX\5a?Y_9jnp#S>F۬eassAK( a,9ɺB FY)hu[NU_&}YyΥ\4y`IHVEiXSc~=TFțnA|e .]l+:} ؅Q{HSl-f1"=X7r'1]d'0]ږwp29, cȣ_M X^}{.NqxVA$/!r*p(Y p&<cm(Qyh!n]2p것إȅ~g\ 0]a}ĕ\(ś63)"CĶ bUs0-s+Zt S!& s;Ef4?ѡi/A:fF&Zj<6 R/' 1^ c>D83luJB/HxW_X]Zx#ˑʸ_jl"U n@>G BT kgayP޵+` /,[r #64.{P]㼛VT^n٧iEPEϦIݘod,S2ʓl)͈Zϭ@77GJ~pWZhIOfA_' 0t̝iרVdزnlUbiSmbn8ufFP^'Zh8fH6x P.Ǹ$0(lN4-6B:U ܅쐆@vQjsۇh%193 \r'eSIrj/1к/5R `S嘜k^ҡQшFK!KtMl("n.ྒྷS;_/·:E%@Z 5KapzD6nO^_L}rB}ue+ Wl*{🅷3# ByU'N&d}kWkS~sܫxK6hShTplbogcE@kӤbAs[cªa2j^ mx ]xG!E ̼]Aͼ1=Rs[OKhfgR>< >K-S^Jd.58JB$ "V2nIЇ`a~t4XOe D\ VYWocDZcraۿ>%,ϠN%uuDž+ ,ghtI-dB"i[yeDzwr;C3"FRsh] %SP^vXU)!o(gMq-g7[$N戍tP i^%H*D>~[=cq͒?M3!&Go%˸wBfp8 RC3/^ЮZf ۿͣ^=S:Z{ıVڼk=/iz: 34l*ݼr^A^Gz%4-y!{ڮ/ſ˸fo!<h 5")s/B.KZ )f"7E)[!~@UB9= @O) dƺ["N`U'Lxj/xdViP>Ȍ?4VߐF6@tAd5Sg! e⛞30ZqVv1*-bÕdnY" ED` `8öTg>?xcK6Jl5Y~#il:q֛ oj(S/2reMߑ(Tp}k7QS, &`>iQ+!Q$.qsÓZTLG8 ]aϥ8:[V/m 6/[hND#~7*䉋) Y{W?]j8G4poc!2I 4`h\"(#_O춘" 7* !BD'3R.xOkgUTݿȐyivy:"_t޼U~k1+=;yM457E&1ۢɸf@zqA 00h#f{=z,Bl=֑2/xc:o8Wϊޫ~9 z1y>8F0+0{ g8H{~Bތa ^RX 0 ]~y㶰7J_ewS9PD;{P|F_@:MIC&|j*E E༹0=goYmFNbj)Trw!8cM#"GݷpO9Xu" ̹73Poе/\ 0GtcO6B<IzC^96] 'tM6DMC=-Bʋ};ANX eB:BtpQ ,v}R f2{c`002)d:mqK@ҚcyuiNIb7#$fBF p@@oz=x)6ǚM}<, ¯)ȁ¹[@\ASDݗ?]ëdjDx,(>]S| kk)w2u.,~t[k`V@v;“->냘KҘ*P˼zySUIA24+g&\SkpӫA׵FDX;,D =xv6ZDMfOhit:lw<󿱭w%w͊RiQ l=+xpDՇ6''XHXHRQO䳪ڀ_|j?`"[Yd9_p)gajwYYA% A0jBci|doh >{^<#~A>;`G$jt׾zkYOΎ*Glq&8[*hfQkD).~|quQ9Pj0`ؑ3(ꁕJysJT(}s^y-Y򶯜\u"=(!0Pgd;L#a]bg|}+P%@]b-j;uwk{idSWI/nxqoLVigWQ'7pt@ tS1PxU#N㈸ /kuwYKdPps>tEJ"ammMv_;N056H,\,C`-y6 yݒ +US8yoLC 6#qu> ;t6$?b<@X8oJ)LObM鿉a. sh4}XZn,d´~p}A-n#0$Uh}2yM1`'P F󧘭^m/tkvںqe;k~lX;+ʕcf*1.}M[kpe#*㳈#լ(V2Qzal7SU _mRs+)dv } yĬb04am56j/9 lreQC~"/@=k<`U`$c<Gϧ<0[^JkS<cҰPV j}7mxV~[Z'ÑJ-uÁY̔S%zޫ2`%mEH:jYZj {hS/y GTP\{l\ b(NP C{ 'S!hy.h'ơܰ%=mSSgW * s7FcZ琞{GRtB!~B'X``h*ȼ=" ( Ck@dh`Fa 0R+M9GkSYn޽[eH?m~t [9ܣ'u/aӂҸ`$4jA*Px ,I= !mӌwl 4f ߻)jlGUy!{=ZqnR=>:+PivOI(-P&ҧ,s#EF98Z gAvS|Bm uC{l8Ct81#<