summaryrefslogtreecommitdiff
path: root/scripts/send-pull-request
blob: 575549db38918f68c5ae0a148e36f949d1823d54 (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
#!/bin/bash
#
# Copyright (c) 2010-2011,  Intel Corporation.
# All Rights Reserved
# 
# This program is free software;  you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY;  without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
# the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program;  if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

#
# This script is intended to be used to send a patch series prepared by the
# create-pull-request script to Open Embedded and The Yocto Project, as well
# as to related projects and layers.
#

AUTO=0
AUTO_CL=0
GITSOBCC="--suppress-cc=all"

# Prevent environment leakage to these vars.
unset TO
unset CC
unset AUTO_CC
unset EXTRA_CC

usage()
{
cat <<EOM
Usage: $(basename $0) [-h] [-a] [-c] [[-t email]...] -p pull-dir 
  -a           Send the cover letter to every recipient listed in Cc and
               Signed-off-by lines found in the cover letter and the patches.
	       This option implies -c.
  -c           Expand the Cc list for the individual patches using the Cc and
               Signed-off-by lines from the same patch.
  -C           Add extra CC to each email sent.
  -p pull-dir  Directory containing summary and patch files
  -t email     Explicitly add email to the recipients
EOM
}

# Collect addresses from a patch into AUTO_CC
# $1: a patch file
harvest_recipients()
{
	PATCH=$1
	export IFS=$',\n'
	for REGX in "^[Cc][Cc]: *" "^[Ss]igned-[Oo]ff-[Bb]y: *"; do
		for EMAIL in $(sed '/^---$/q' $PATCH | grep -e "$REGX" | sed "s/$REGX//"); do
			if [ "${AUTO_CC/$EMAIL/}" == "$AUTO_CC" ] && [ -n "$EMAIL" ]; then
				if [ -z "$AUTO_CC" ]; then
					AUTO_CC=$EMAIL;
				else
					AUTO_CC="$AUTO_CC,$EMAIL";
				fi
			fi
		done
	done
	unset IFS
}

# Parse and verify arguments
while getopts "acC:hp:t:" OPT; do
	case $OPT in
	a)
		AUTO=1
		GITSOBCC="--signed-off-by-cc"
		AUTO_CL=1
		;;
	c)
		AUTO=1
		GITSOBCC="--signed-off-by-cc"
		;;
	C)
		EXTRA_CC="$OPTARG"
		;;
	h)
		usage
		exit 0
		;;
	p)
		PDIR=${OPTARG%/}
		if [ ! -d $PDIR ]; then
			echo "ERROR: pull-dir \"$PDIR\" does not exist."
			usage
			exit 1
		fi
		;;
	t)
		if [ -n "$TO" ]; then
			TO="$TO,$OPTARG"
		else
			TO="$OPTARG"
		fi
		;;
	esac
done

if [ -z "$PDIR" ]; then
	echo "ERROR: you must specify a pull-dir."
	usage
	exit 1
fi


# Verify the cover letter is complete and free of tokens
if [ -e $PDIR/0000-cover-letter.patch ]; then
	CL="$PDIR/0000-cover-letter.patch"
	for TOKEN in SUBJECT BLURB; do
		grep -q "*** $TOKEN HERE ***" "$CL"
		if [ $? -eq 0 ]; then
			echo "ERROR: Please edit $CL and try again (Look for '*** $TOKEN HERE ***')."
			exit 1
		fi
	done
else
	echo "WARNING: No cover letter will be sent."
fi

# Harvest emails from the generated patches and populate AUTO_CC.
if [ $AUTO_CL -eq 1 ]; then
	for PATCH in $PDIR/*.patch; do
		harvest_recipients $PATCH
	done
fi

AUTO_TO="$(git config sendemail.to)"
if [ -n "$AUTO_TO" ]; then
	if [ -n "$TO" ]; then
		TO="$TO,$AUTO_TO"
	else
		TO="$AUTO_TO"
	fi
fi

if [ -z "$TO" ] && [ -z "$AUTO_CC" ]; then
	echo "ERROR: you have not specified any recipients."
	usage
	exit 1
fi


# Convert the collected addresses into git-send-email argument strings
export IFS=$','
GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done)
GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done)
GIT_EXTRA_CC=$(for R in $EXTRA_CC; do echo -n "--cc='$R' "; done)
unset IFS

# Handoff to git-send-email. It will perform the send confirmation.
PATCHES=$(echo $PDIR/*.patch)
if [ $AUTO_CL -eq 1 ]; then
	# Send the cover letter to every recipient, both specified as well as
	# harvested. Then remove it from the patches list.
	eval "git send-email $GIT_TO $GIT_CC $GIT_EXTRA_CC --confirm=always --no-chain-reply-to --suppress-cc=all $CL"
	if [ $? -eq 1 ]; then
		echo "ERROR: failed to send cover-letter with automatic recipients."
		exit 1
	fi
	PATCHES=${PATCHES/"$CL"/}
fi

# Send the patch to the specified recipients and, if -c was specified, those git
# finds in this specific patch.
eval "git send-email $GIT_TO $GIT_EXTRA_CC --confirm=always --no-chain-reply-to $GITSOBCC $PATCHES"
if [ $? -eq 1 ]; then
	echo "ERROR: failed to send patches."
	exit 1
fi
ls ]\0l@VXov6EEHX|B <~nV cFi '`/@eR\B[\]:0UKZNȺsz]( 6!~qotN^w/ڲqs^njr@Fn1㌉y"a$hL T9+}$Tpy$cFlꨮgMLnx&apb8U~K̋=0/om76Ǭc6YԞN322fa@lĴxtNFk0C(g<)\SfLq"Wc-}~&;UA)Gig>{P7h0'_y>q@h5BM?ors@>nw\ OoiA?>t:o:GBy?je|yNELU _NuE5d>OPIA c/@pUTVܟs"%rep|e,w<;?8S=8|3ǧPnf(V0MH`; fc&ޛǛUS)fy|+ęVe#_8=(CcgA74.(;Tܴ}lnQp9YIJؚxe\{&X5 ":eMT+5#NWu=q&nvjN2ywiIf,=n7&pCa1H2xr!"0ykLL3KI,! HKq~RE(ܒ0S6z%Uls r1Suxsvx4eɀ8ۓ-DO7"L10Kt+LHZ/]N2Nץ&6HJ q1'\FX8qdH"4IDrP5>m$P9¥:!WYi#dN$"=]tm鴹lU2qguŜ sz<ݩ3gt`(1q`N@Ȅe=`˦ћ;lLօQ/ ЋWF>Yx)u?":j:ˑJqb .Y`e{3Ӳˍ b8$8V&WFf \4r$5?X[I 41\9D JT~4a}48/Qۿ.cBDS*%|l!)lƎΙ{&c7AqgƳ ;YVM{e>[$ϻ[G۟Qb*s귫yAScΤ7;N^xC4^_d6(I<SN#Gߝ)Tn -nVTP!s hPEbl"5B[.q 5tD(O()DF}֯+,Cxn3Np{$cMۮ7}ݨit%u87Dyb{i "ZHfZ 6؈jݢ`E_4VzNkT6T:$"cpwF>r#d((s|х>Rynh(?A56ukCÎwWc+䒹 ?z,ƾ!׳s';88wPQpƂoJOiˋ{)* $u|tOmjs#p`/2w_uT[W4ZRZz)7Bc;cbxOw4~,8G߸~<P?BP}/8&_rlU }%fylpZw ûVbŌ]J;;ݣÃ5k?kW rݙOp+x"o^;lvF v',t]Շ\>kء]:6QGC&A$Q#(X70Y8&eq4SĄ#sb^ cқ ɛJ5'qZg1E863I&'҈.hҢG ΂)#Y}07S mpG& 5!{R tz1|3I hto.]}| ! _5ɮfaphƚXzb·i@c %G&ZV$7Yt,n))<؝m _j.vhNt _mD1aP&aUcC$;Wޢ*$=Yv +MpY7Yzc`b]AW!RE{ixyYzyqq ?ܟO:ޱ7.eҬB4'A䷤4t {{G}P8WRJNYiD5PuG0,Ó' 嚻{uq}Ź8U7cVO _`$ &#~`-mMR^<1nѰFI1&%8? jR+;(r넱c&78: ptId~5j6W{˳埿9^8o@aE?!jM-bk ;GQl5m'i2efq&:`Aw{9=/8b0j-Z:P1DsH ˌyIpm|Mg\.b,$c6M80< Hq¹jZD.pWVT\Otx-9j#ea?."=j>1wL;iɌQ-@8_ۑo.&>K!SBdTk>&l| Id>ݧGsnC5! %NoQ&tFM!xWmvvm%5Czꪙ} kܗldbr~% *  l^Q]{^X-n\e#OQP]ԧU4Kstys*H!Igo'C50 c(mz&^{ gaz6%j0E<&pPcܞIu~܆ 䤣/m`9 0ث&aܽͭ':"c }_Ɗ R$8 /y|"ҕ0xPX L/cANMz,4eQBH*Ct6EVx9Nv"[Q'klAp_po1NgtDqTGNq:?YJǿf8oѣGncOyETx ?Ub>.$3[l0v-aE}CCVq}(U\iWuK ׌Z$%sgh͞aV4Tar=\=\(2yg~Tu; #m86}aML-1xQi"8JR1D2Oinz-HD:K>;Ll#3:#lPK$#G]y`zf)$<`[D[bT8P7?1s{5.e0]Vesk 3wox#IvR6(BQ] 6`2yOd X"qTrbON΅|sBa/I3)"e6SZ!wTjݷ CxuV:֣[<{Iyp;( H7g[vi_cZ=(G1W]v:D &tҧ{Jx1gɎxr#$Vܻ!rwMkxMjxLixn ϕgfxe>w :c>yh3^=?6fY{M>h®گZÀ49,o=`7=U #FkWɣ@^DS2[Ac ItA;;fX$Zdl4Wm4ol/?'ڵOrBBN^Q:j]"V{kYϽ;QOܵxBrR[\%1z8(1gU->nMlRA?n -Ӎ|M4.%-.6hnx_.0S|߬a{2扤ף-{ i %? 98 G`I3hHڨ刕4TK |ĹyW4UG+ڰ O B.uVpMcA6+c*:6\2tmnPIN 6, ?DD\$se*k_}{T Oo]8cw үw[c{mDx:G8v۸,XcjԀ D6QDIa`{qx9g& 9N z '1!վ-s9ER7eY];9vƍMWtcg&h5-m#oQ_.Ύ)ӳ_>fV!3 ]ۮ/04셆1v,\?U;LV,,{q!0QGS5HB i?\q%+V/[-A-ٚ%[Zz\8Ir o.s_\Q,io]waȎ]U x*2mRVo}_KyNnM/ʢ؉[8# E xK:m#8v"xyao?߾bx\V"z$trB> z^q Ld656ZAܦQ4x͕x`&OD̘ 8 ᄽWaީq݄7WLvMD.JV_& K T+S'ZIYlv?:LooOQJ&Ѽy](p%yE}k2`XǓuv5oSIA4*tB@wM&o!R#Iy2F5 #]QPk('1ط|$,SHb ėjw~pfP0}+L\nKY9Z*+Bg{Q34'E]\̍ؕ]͝q(sJ,#e% O8Um% [")lTfɦʁ JqgE!/kfun$%X(Eq[lޘFO\s}'~̦R I"ZN@Gq{Ӄ#,{ ! Ί:[>a4}]spdt]4fӌt8D͹z6>hGnb5\U5тGtTj/jbzEjsumIOo .S=ӹUَoYM/UC$3\s]kB,ϭCsyό=$_o^"Q[W!΂l@?jkff`%9N6DC*Tc>+l3 0C D_6I^8>.`ӻ_s D}\Vu Yhp+{}H,! f Ō;_ ߵ5)S#L6{?5:W бkg m.[afM5(G6}TW|~t4]۝ʙ,V~}hEN>i U<`s&ܽ [S` &nJW, ]G^ٌXhW:&p8":߳WJ&:Jmo11sF jI5=5xF/ezjѻ& [\ \Fvpip9>׾'Aʝog 8ZGt-lZ^ez)l.~JEmnsR̭AԱ\q"^OL)r00ᶱbFfqHOPd-Q+@+Y 3n$ۭ[{ I,(rٔH76wI5qpžf:KJ׍p4 {G*to|"q"A}KD+u(lSJQᤇv͹4yGv1ŧu9?lͅAaN3K\}$44S`~^p9m\ݦp+ !6"[A%z;>^Ѭ'yM|Udgku 2܇ڗ̙Q9HdBer @?!p<}ּ3n<ʟ786֞sKn4-$8_"?c 4dps>G4(Te>QbԶ`>bU8L;c"@9(p8N9ڳ\*O\Nvx0EpY/U w՟$l#|lW|41]Ǫog ן#FWyt:ޓ3+¯u0aF; Frҙ4u[Gl476Y6}ҡm?.gZ:!gYP8$3+)Tj7 HZ.|Є-uEMpO.B:ML,_Yp3uߵüDib}.l-5ӏltc3dubudcf3mrZoS$ zp?ol`c@a{x&f|08'@ x=c9 I(&O,N7{`.(IwRIzuN/<aWgD'O9Z01kg4Oigp><Zݦ3I܍!:_R t41l /Pn춑Rѿ%s=Y>n|W b֢ϫρ&2i1Ww%e`io_HDV ?!޵·>3;,'X.Cj٘;uK42{bkR}hAfI 0ߠdt~D+\"Kҙ)~汱ŏ?)H5T0wG fR!U$I_xO$ #HhQ$GSW]J8 !Dݷ'A،óT.tՄjܞS ϵQ}nuQEօוo =y o *b?ڿ{H# 4ړ'6pDSGUm|FHzm Z(7_?2?Dtξ~mmb_* bCnI6g4(Tm`VІAO5un_ըnX@?hUip W*"".>q՚X":#w]J q6xQ#KH}ɷh})9h>D\T+3WHAWX}U/t&1]kJbWh^qeQ~l&y.Hf)(9q'(Ε_[bz?vW>hgj!^p#]ɶ̷ܢY=C}WyGeZ+4 嘦ے8\\[A4~)/I.d9yj?ТC>/|$̬c&6 E4h݋5ASlϻ"AY C̾6o~ત94LpTGXҒW +0kzot7/h;? O-N-hI2\btwq# RXpؐٱW\zk5)0 & DBn/1MYAfE.LY_N2RK҂~^&iI%n)F]Ɗr&jڵjh}1JZp1kCV*ݏןJHqԿJ~Ptہt%˹wѧ~zJ^S?r}wdї|PQ]<]B'`> gQ ^x)>n}n|ޔeԾS>3RP^ܑ9 Cx{/ ';CfZ2/oC?N1oE9>{3Zփ30D9DhZoFǥ'{qtzD=! +d7?_;}OG>tgh|/V 7uߧ7[[\Nz&k-]]HW*<{I~lH d$|N^XY%˻jm%P7az8\:hxI皔Y(3fQ=9x}qxr|^A fA 5~O,n{NAeEY^=)m[b_p>N_oRʓ9: 2\7%o6O[x[+=Y6iK)Tbgy*sV|}%oewiXki_Km\2A+>}]Y4:Mb",/BkPncF?A;H} n-~>%Gc?|`c/`CZ,GGwjҀ~ޘB8_g(ۭZd*o[Ƣ,GMZs@mi 3J! e(T2v#\ \}.ꇺ)ʲF x%ALKd-O+Q_Nd9{=b&&ke4H0v!%p9V@;MÌW]8f nr;h jfPic/8fm?e5}(N>岀%5%kAI 5f\fZg5QF>[; 7, QQ8h7|BTX<0um`p."{9(F]cBR_] iJOff-aq&wt91 :T2#P:ή-;eL{\w `1q}6d c_fN&$]| ܟjz6=LDˎ2EO$' \ƻ#iH-0zF `FTA'NZCMr ͘ 6FRiծ]7QtJ~rXj1Rd4V2!ŒR/ xɏ!BL y]" X2ђq .c?ŽG7ȊLj%tO|Z<#y.GflesA-Nkfkp*,kvjZ?:&$nTEt2G- e wGAȆ \R8_" ^RAx>j \lGnAfB$q|kh# W O>*{8Qa&z1R nM +#&%HҢ1dIct3[WLwH&1HOO }:ZCFdwty!][y:{I!CR0qbh532We \/&Bh3nk?X$KgWQ̵c -V[mabqjX5f-l[kFD:!H =#>Qȱ5fg,DsqE0[ISʣp= M\O# P&eÑ}>%t^!'2ZITr'z|@tnuI]5m%tw^ӫy&."0iMFn&&l#gf̹0G;QVV#JjB٨ŌűLw))nU*xLڋP |Us]V-ѹKcGh *ȻƷ% Jt2@?iJA2J:8c-Ȗ9A9]Lδ1.\f)–"҂y0n[^&度˙2z,*@XPULCũDeP0+Ocl/@ee-E?A" =I?%뉄J(d4m0NPOGMaJtӦ,j +f{q(N&Ɍ oCQxA% }\idzp`?<hqnO|9S 6o$F,F_.`Y7 nR&r/kt8!ꏋT.h44G47M ɕn1A/JI-!b dV!~ඳYYZn:k2Ch-V*ia=&ᅖ_K<00KRfہYDh2e8:?`x"q(:$k;044γ~P+\[)KBaD2|nGk;o%}P2DVh2D< /kЇװcx_ oDOYV](-- r?-4ep/̧fyWQ3R3 Ɋ= hXnpCtS>FFm&!(0F$%nn]JN|8aZtSC7y (nUu*UʬG~i0f\$^$Ei!n}:"K f'TqBJ%`5^^By .5&hTv? \M|s0"b)бO}Vb/!"R(=8A :rLR''L=Na#(WMq9y}-iL?3j!"ĝ#Sa2d+ ybE¥;SoylqRGL-Ǖ$9h1_-# RjW6kR"Ľ+9}`OrJ>a˰/㉬̞$W d`QXy,S0bf+ځ!+'`DA)Ij[v-.=|oZ7^^OCu .hwY=r.Q\((17'zڢ`Wb 'E!g^eHcYl$vBh`fYҏ>@:KZB56T[_\j2f{Bqp+j 5nvL\577z>-Og H-Ԟ F=@jا; / ;m 1HX d+%`& @x뇠DP7w;TMPO(뙋УK~-xNl5&cD I%.[jfl`-r:f̲vQ, `HkUleJDxvyXOIf:'Jl( gr˴*BӪch -BƊal켻 i͸-ĩsûLAXb8ˏb{$[g;_FNPI4cZ0/D^Bmю =K6ڠ<+[>oh-tWq q2G5ݫ\bsɀQ꾡ť*v`m[CU8g6j]z2c;Z % GŊHU +}Rϸ摬P"qC\$z}3/:Lrز%P?)AY֪I2).%[ U 5 \Z${0I$'wՠQc^GI {r6  /%kGS18׈ŅFCOc=&hy_΢٪yXȼ0ÑP,JfIi$-nkn~桌tFZblOkoߊ:?s_(3e+dzHLEb;RJGkCUWV{Ϳ b.9{j_tK Zיd6>NC40_gp{lp $ּɗ;ER$3Y"S+@2E U΢9n1==ťeA+/,gYGѯHAsYnt93yrr8($JXJ#G#{ &:IcM1-~@y346>u/S1WL'_XxUbMSSV`A1Jǩ]«# c%kS@µoaJѠfI$슨\3@x=-D<>z:TTUc/{Pm ln_A ;W3?Gt|b% M(*'(M(Pwӵʈ=CA@/ZV[Z"XqNx`CY,JAT68͝Y˗҅D;ndDQXhۗO|^X"1¿%Y0/~Ze΄y1I5p#N2<")ᖝק#ׁU1fYC4p1YA'P~w$泗~0h'\NLpO!dFzJƉ# (8׈RhOvv/~j{e'8=;lUpxn\bgNp"{}vg:;_Wޏ)uw v hv9~x9i>8{^g߿^tUwFݳy𠸨9Mpx<{cV9:>=k+q^>`/=D+y^0hL[;M/viH 88!عxWfh @HzvDХ>^F6 ~`ǝ}ُy>P; }vt B[y%7GXY^z*0}~O`z^7ş ?v=hm;wN=!O&`v_~9o,I O;^ Tk"=N]N, x[3\;68BceÍ]?9 x^:/>Nhٜvx̛Rz4p^>[1@.$;o4Kݽpj ^VuCPFgPar=(O?i_Om⥸H,* Ꮰ%bn2EnaڦzzW^rGH%,׏v*oC`*5W0wV :J*6 Pk)6C gyqF֑0Գpai̾}l`5pP&*'/Hh+3Ҝ1+#b5 u,|ruW=ʍ|^|Й8:I qFSuDa@7~(D!c{?羊aF.p3\eԋ*SXea~]\xOծU1+;+So9($ rLaK!\d*]'W8KUI5o3n 2S}vBV]иs.4yxREK8*ҡVyQDV,c{+6L˧c䧟OG` $}DG"̮d ~9ZLhM H?HDYp(x 4A%(yzG{5~s-,?W:DS}?!0*hx0᣻{'G|3O+!xzvLA48k@pGeGF"{_'r[Ƿ~ln %1riɐ +j qS+ϡ߀ō$ |1)@/rO3xzq4r,bp Ųg"ID4%g n}q6 Nk$X:&S3n΅]@am(L5_z'鈮 vo$6d HO:zs,W8|B(| 1Wy@T5NW&xf)gGo’9dl#AE^#M| .V͢v#ʍk X#[ꓢ&4Ħ'VGS3 /e&H9#zz:ԴsCpm|DMDX:=VbQNa?t8O[O'լ^CB'LHROYnO#D2oXcQS. qOL…8\~ܨ=20ݭHtB4&-IQ4cCgi>}fq[61[cdZ`ïqiJԼ4h/ &Ͻ sn*s`u]-} JKFI0:<7NFVrf3Z{V loU:!W=Ma^tO9yK4.L!&}/F( 9=_D"{H~Ԍ9&3lxmaEIB'z .ÑX-/]koh85=ńUc2 1l5֬I,}d fl33+{{/^<CFo!k1t&bq29 ҙڶ3ٔ\a: MP)*_y4!iTHr,@Vd"ٯ[ݬ5:؆\f& zq iןsh NX;ZJikVN{e4!C;EM,Np0z-a \hx-)Ƚx}MG_3@Q6Tcc4Jg$+6$|RI!=u,W2) A(%\:&n豈, '5 #:,)Q4x{sMIFXG J3X`x# e$v!ƮǃV)ڝnNq]L JhV fS&+xj=Pk?>h:a֧ټ c5]suv4Zp A RxIu* 2fߧw=Fc4Ʉ+`X(ѝ%vd{Mt : RaϵS6.2ZtUN 12]u~\:J.'nilG۠ D”d:K$a) Ǜ 1w}iRG 0.daCWtF%:{ɽ=<ُA20ryI./M"u(O2 J꿾EM3 )qL9:*l5]ǞvJ7p7Mq4j^&KI=MڪY[Wq}4?gxwC8Ng  /@/ߥ_2 u>1?*n'==xDZx/l g.,) ?=ڼ{+8 jN/g.GO_? ^Dx4&`$=b9L$R_nD3\F/x4/\GpD/WK xR -Mn=ZQy Y15]lֈ{qL)UcYǍلPj1L7I!8{qv ˞ƂNoکQ81Lf4ћވ)_;fjR#o3n#wY<O?vwwqjH?M?os_Vt<W6I2M>s"?tz C{ .),t4@9OF! YmnYSK ̓K&nfM뜕f  H?EqlBwv%,ZuIowCq\ޑV~O tnKJߜF.ETND+ZȦG ֕o` u7޷OR@jYc,~NZDžj},>fߪ[<>go!0!_c8NEf̞Ic[s Lugפ/ ,Ώ F$ Q'KfJzm,L<`xҪK3.k9fa Kဤᅣ3\Z{m?I/}e584nt!=,c ',a>1}b %nhg?*Xw4EAh>tQ=} wCށO߂WHdNAc%/.)'I;P4 h)2Bo;B'CL4hX)M@f&'—Kޓo|-_GOgp}7p輩Un<2Ǽ1"n+ۺb} y<]qm$77WxwXJPYgǂn׎_> KKAZ>]lz,m7[@|QK:~Qz+^F *{\yE13J͇6nn-~ m1/Էڛy^{uBv<ή5B(n<|I>pE9?:9]V0G0N/~<n N_󍍃kVqA32$PlJ7Ћ=u ,|+dvg,?7.! yJ^/4!3=]DنQ39' CI@ ~\l)۟~6ae˂bSaNPse$y'J鹳%;_p0!'1L8m3]T/lg3fh H_K!Foqhm 9F$`DŴG Ca_<^ҪQ6M+iC̴mWjlj1VQp0Epxb .6D 4?ea,Y_"J.;RyX ,gS5KD'`:FEm*J,uO`BSJ>A^NjۧHL8x?> f8@ڟZg1kf(j(e~ykQٽ }IlhAV~\UORGٕkY^PZ|.8ÀDWzM2"N_? dfs UֹkJuis' Q!i5LxIq[m49h6WS &zg;EV+UM/HYRW=nLKIqq<5T (2 ӓ"qODRM?ۨrX*d"NCú2ʞfMj'k@X([zM$.^$ `Vtav5v/ CoJn`vXy3,n"f}崪ysWBs9(ƿ4zT|Hك۞a5Dfn26-Sq.S#Xk1bex5\nY Ղ?3 _7Kb);.:uA8 242c}fRʜ?6t+*vUNAm;un4nRQSW\dM?O+0sz4gI?CE4΍e}#o@h{o;Qr] 9A™;l(|+xm݂>&2_maqE_u/Pi;׵/ X*>Z G[]݉%|aiU_K: x Bs@C+SDN䀳v3.yo95nQAFXb렎m"EEXGP2~m θ/^^ݴX_mDlLH8(Bfykt[O.0I1=dj溋/*,177I8 ˵l/0OD7X^2iQE1j[]:0(]x.fޭhlslW4˼$s4e #\U} K]:^^?Q/Pi n+.ok}we]mV)9ݸJ[\J}UX+o{G*NW3yWJBb K1hE~ u 9&bUCcxg7لj>TPaۘJثܵcŪ8>_Vi4ҴG.Ed¶7X$8ZE{{/m_uoϢ嶻\ynm[(4b;țoA϶Zc`yrpԻF'.q[ zgJ@\BYKc5Xk1?l6Y.9Q3 &Qy I $w1Kip=8q܂| _У5`!'C|QxmA z-\ dMιR4;3&b9ZN\xh/5O"Ò{gkhml'~D,ji)AʸB3k5/6J%3ˣlz[~;E׃Dвp|h8GÐRFV\k8\SJy ] *ʈ421= N`xVSkp|ED0u(8G9ane}5-l*B:{m)]SB=3ڵ9rz;`os=ҥb0QNOAeR1//#~B#GU@b#,bD_qEN1evqi/ F Ӆ/F|*\@S>s Y3s@vdn)W}ez̀< `<-2PaMC;{# $zƉ?k ݢ6u*_ț_UV׎o =XdRL-4RsZ} U[HV)`¨~Vޮlwj`2q{?q`kTW@2`(8)Y;2v,Z Ffi_TaTiPz}~)fzvq, PEc>BzYbŊX )[=ֽxx*{ 6YذZ[y$zas j9g9aPyA({"혡( B;'z2A )s3 Ϧ'6 YΔkhtc e-B_Vl(mÛ9{/ (.D26RAK}VӬrQ+v6>lqOsS.z| Y-Ejoq^w_v=,tF;z.~6~:97x4x򵛙/1$eK`/5Bhsߝ.⸐X'| ,)τ|91/SNmmXNl\o XL'el;kdKvNC'%~ABf?-ZLRjg1~NT>-K՝T1$.sU{aNekl@zv\y'(:}yG)s>&aց3n,ʯ!" {/&=T֤* jlHE3O:(tMsLxXV/ 4*B+?06&F?rڊ0h)^H}A9B=X*'RdM]p)taFњ|#(beE6jioTMb YE :PHuKb,JJ˝ɞsDXzWԟ!2QhZl6 `yZk4/FEpË%F.I8C65p]ݗf 5= ;3℃RJp!62FN!:ڞ2*|;yQ՜ t,7!a; N ;I-yǰ|!&ʭ&"QH=:CN$h<+\7+ko}ҴT3\쌐%]a\8q(v+#q[P c^ ڔ͹3cd4΢VqXRڮRWZnD1ڞLC5QѣAOTziey[Ar=%txlzlj2Qf(7*E᫸`Dc㰱%"=I7.e@FZX՝ARLN"8v}BW1MvޙC-D |0g. G#i0$YhJi +VpuqaF :BQ6cL/u d rʟK[;3GtVGXvc,~&9{Bٶm F> {Y2Bc\'_},5^/sb*|g愣tX)'C1=RHUcp.99%|2;ڂoM׷3g 2̒}NėtȢ:@ZlH06m7K5sXSq?BD}d|p-`v|_#޽\?yjW4z}+["T]|T Vͷ>;)OOQmg O뺜<LFt;[&%P[v @[X\W3ʷ;,C)gQ9ݕ ;1q9&QBL{X>! T2ͮ|Z1Đ,Tpnda10ߗ\ ޼`'`Ql%Yg XUa ^yޭQ) ĘR5S~I˒S|<ޜw_VܮīQ(۞u(/pu _'QH%oJFw}}vrrTpxg<_@=OeCv.ɛ;ƶdO DvPjˋӍ83{L,*B튯.c ~p^_"JEӳΫó Jp5몸K,7Joup=fKI<%NhSi˿bE/1˗c׽3RZ)erWOBoM)g:bI-cjb(v*FJ%[Q*`jC%!0%-ߣwK~.xG!ڄ")-76@-,}++92vYz!5s;%P U(2I.a*ٺმaֽFrǷw̾ng3ހtZOJ]/yݙp-hf%mb!;>pxKd}UN\ݚH6VA"dFfY_*]1 _0քi;$bi'ղErJ_nOE>Fz[j"#K&nr‹ä@>ӧ<٧4ǏDVa:Oq㯳L~N'"!O"$6&P<&~Ƥt hds-OhKU[wA^^~Ć< `BeJq D8ъrf90DjVi^'Q=kɵ4Oz%vxd1{uAefL$UvՆ) I#ܧyƬcX34ǬTFMZS*A.9vE ី笵6>M ~ѩdriYͺ3Vs.p !FiKՀ}}oZamo.xkLv]=5'v k͂Hb7a{j-[;]ci֦76 tΦ]D@d)tVS(!Ϻ6 JA.SEj \[9gQ^G v{> ( å<7&{ tTt%;&i BE޻vȖ* FZ8o-N4^!TIn3q){ճdw?bW:>#s.>Qj.$%ܔ +y8,Cw1cB/ ~i2uczG\ѥh<~wx<ء_PhLY.*Pa9$I' U'ƥ0z+45){J cr@:bÓ% Zdio6E @kIMŰ@0'@)K<A_ T^i` vGe|K{ ,uLJN!tرs}V1t{Qmf'L^r4\;Q3cFYlCER! 7:$(hےj.5B/]L3_gHLdn;CW)I, 'gثi6'O7QuQNҥ\L<2Y^I.,C h!N)3zъM7oc+-KM7Cixf,dbctn6-hh.)- @g,2MLdBΣA q cfJ,ϩgCT]fDStc<&FހFl[?o5d.h^HGY/[jT:BۃeZ)$L *1SQG^NSC¶i_^K;SAnqvT.SL~r[ΠV "<ԹHmΖɛ=~jsֽxy1N",k2ɪ3Pa)knW'n«ەٕvPc\$Gԗ|g i>x*OSUH`!ע#`W0gHZmnHS6#$Gr`NP@γ(GG佅PZ6 Y>qk + ]pl[hW0rE—jmH(ͳtO`9yՉ\F]2R3'34LfK "X%:ƺf9$- q (ZRk̠ky;/:gHnlƹ9WTaKo5Zb/_ewvdhU=R 0LP5p-]/v_]te:'Z BMlB2l1b3̸b1 ǰ$YΔV'*Lgʗəx'VrѢyA3ZdLg7'܎8-Onxaw׾}U^xax7eX\*nVd`RZz~U:F<֫Td\8Z䘸KLf:"j/!SJbINؘzR ֭7ނ8-~rQ,x-OT\u{\ωA|hE'm jA'S>MdG!,˓1$l|Gf(CCIjwI~>V㭭7|C{:xZ[OXG&@|g;kڽ`A֯A~<|{דo~}Sl.$=fNiHA,ʈTW}UKaz%rmC,$0̈9m_^Ac 0.#7Fc*CDPOv%pq^1rA!!sh= NgQh:0>x]y90s 4ʙ pdN!F`?TP~pxE{cŏO)#;_)LQ) \-us;<" RËy, Nw._NO;ĵGEqol ]S=l>t 1,oy8J&ԓu |Ո8e{ЂwP|EŋxHݿ% I{ 1 6ommo= ^NG3mmb^kmNDgA#:"GY3X&KMYU@h#4n&ۥM]qlN\z$Ar}c5wRҗZWFXӧ;Ͽv8\rvs}LKp 1#M=( 5|_[>& g컶UPYz}r]R[$.,Bs56hSme!G^jM D!nf6̫~Nڟ_uCxKrfL)g:Wq?E !FiwmQ4G.ASgMYOKUJ?:uT=:*/d_qFљ 8F:G>Ez-dlI"or쉂 nAY/ ,'Yh̞_$tajڮ0#zc1ΛcȈ Z\ o;*GB Ts蘿$[zkbf^9VF?dPeJB DzasяlAk!\1HYn;Qu'\P DC!+HwE|3;T@8Հ> \]yQC'`~#6g!Xz zжgyKKi!Y+YqvvၿS3,:P8b/|NLjOzje'Cri84ĎWШٱZM嚃Sf#WBD(I <H,#Gz }kХu=$B "@Bg)e\|ܦKŖYr S@Boz|úӊo֣$p+=KiegIQN=N+XosI Fz+q絪uVU|o/`Lw bIq8/4#eJF6?7ljs#b4BHpH.Qy2@aC%NcbDx)U0ƫáƍ#4R2Zꗈ vq"\,t +· o`,\V`=jdWg4i hcL;F8GQsn\)\6} wv<1ʝy}zUhS4eޒ(J]:Z= 1(qH4CQEfQ#РX7b|@b4 W6V9+Db:QEY6 ڞZ^1Ҕ[n <=98JBnCv-\C ><Ƀ}|գC_,՞{sOޮm?^fb*x^#;^xH!_|,^_6wtj=` D>_E_%_-%pC:x雅wmzU[ cn>HܭC?d>yCN_g7?fz2uɹ  {z. gFfձY81?ҁ1$[ Qdy4 ֍$-\ 6.)6% Ru\]i Ղj=.<~ϯaB89'W NU2 *@Uqă[WWWqvI?^0%bvS ?LT![ uV)NVk mrJ(C  q_ʅVE?y7XdD|K\(5% KuT8ߌfE|V)^ӌ&W*?DU@k(j#yzDdwPb m~b%gHZg\Jayg:ZC-dyb)wBޭ )n S``]=30H3] LFKF9#7}?l5N1YжkXozb>Jϓ' `n^pqFMLԭ_-opRM_uh s8w.VNӐJAiIu0C;G^,K1˚"cL(k, KE)O69k`&wA->F~Xc@jЃ<..a6E7aڨ t <}7vafWSGe"I}[_DX>$^ˈPBzpzCDyȼ/Z<"S:2-Wf𝥣aS{?~?@гyr$͑]z 9;]5 >6jWC8з/W!TGFQ'1$}1k5{z }GezKH) G!xTKtD55Ykk\ xe\?2a%" }cn1^L)x~ )TwշM\m5pS|g f=4lSg$Y[68XOJvНaI-0Sf}UMX^aCą~ ѶLJ#v}]iޚ!^pq_7IA#RoAUB|l٩|QLËX)!|5nRˎbv|$/\>*E,I%b9J* J@G_eWwu''3iLQ]Z:x_TAh0xelWƒKadmTA2Fݓ?JʬݿBGƽ%dΨ Y3A66чl4-IA(Hb #b!l3Y"6QI S7Oq' FkX^֒`dV,ȘDrꙇ0Luq6>K lW$paOOodlPX lK^|N?M?%ٵ[8Z@RYY4!Nf)~#ZJm YlD@m};%ȻMd4o"tMSht|=4]]X+o$2nN Q.%@bR;!eK2umQ^q==}Bݜm}Yr&Z!8zqO2}&8Jnd:G}b,<#@mT)3$in~4ϑ{l.@йo+{~=<",Ɩ PY+jٖfՋdً_Eآ8a4DK%x y O>%0z54MT6_k?Mܧk qڵ u! jRs93('y0p6 .!@׭oA}; 2A)^SCH;p'x9h}<=I~{m185ֻ"j3WY1=WsK024@knI_+P,bQ&HaCOQ9lP?(.((Bzg4Fg 9 *3ONLZP bL9ZS b|$CWI,Od\,x,p/ ?(d͝~3:q5} KIA#qF/lzG?MVܸv} GR8Fh{ ,y27M޿'Ldh,m9K(3-캕aUq8E]tA1JTjԨ/v9;90-  X ]0h{t搰K8ì]qfɗ;i'kxqʎ,CY;X5{\px~*AFk$gaܜe',IqU3Sf0Wpƕr9pUXMdr.!+:kT )W.B))-Z5%L8PԶ Z]?ZZ˟Xj~ٍ]b">ʺ73Եk}p\<6*zcm+ϷjH^kڈ\&bQҕv׾r ȷOy햠iwD?6.C..6);'n}˻Osnʑ9(.ҹ.9R!B vyXX7H:ROxfoh36FoS=dR S ^&dSgԘ.ΰOU?CH7qp5;#3-$ޘڬpK²Zw/,6##.E&k Ĺԣ/P/ nc8 fHcܙi!-څ=ΆY'awr.xi3VTd@ڔ\]^T$mt#WvmצzGa~b| ,QY,oݥZa31*#{{|\=V^Q))( ӯ4 ^'83`ffAaNXC5I21YdHƋpl!w5ֳ10 )gY7㫁Eic)P;g_4 37Cvt훵޾q/~c툭;`wo;g0LC^oӅig2B5_d^=ry D"4a2z?.MЄiTtqnhߕvS!sV@XD{0%$ ĞUif+ިWwDrW6@Gjfaf[%hZ Z>A"zi+ɮfl '@n[*)*`w̏^}<zʁE!6NQ8Rpeoq7!Kx{t'|>OxDZ緉`:+ szyFZu9#Q Og jÐfr=Q/'O Bo!dE+Ay^b< ^a(X_G5}U<2T!_NvǽGNQabʙ#1"ɡo5J{iJH+p 3zΪgm׋,o[x[nu1 `ZD#:* `}AUY{ZzáɈZLeޯu\/u$˵8|Jŷ-d'mWK]fyw 'm5/TQ>"H[LV;Wڿ4r_zWi5Mv~lO#6I"Eiw }TU! !m/i}zsQ_-t(Lسⷨ 5}G Ő #&7|IkBe(?*&^1_b{{C;O`O7\Œ[DR&>F:| mvnQCTeLgբKg[QV??.W/J\&֤lӛ_{$ζ򴕖lFQj7İ|ĘPη}qaRPm"a:HOO]v'h%_5+{ 9^BMv-#2\{cc*O ŠߕnB#߫/ELcaG`"%~c Ԥ;|}4|y=x 4?(> )21B",`mС9{."S|8f+ ͖D/Mlh0؞ڬ\ W.‰k>Lc>Sf˒@̠]9ȸՈVELkTt=K2:$z~dDoяɬ WptaiG$)֚.ovw/[E/rɜmc:3:Q4mw a@4p%:6FqÐzu ;S2NcmWZӧk%~Hzamۭb,کDywVϘ 0@hh3,l7~T]} 4)7{mh?0jx#krpЕF%ʻ߿[UO-VluYoFQ!Y Lo[= χʷm y\"39W>&@ $-hP Wu)d$܇jy+fQ4dUpgLP\⯊8ƈGAzZ"&(hVvtxz9߄wjdN)rLq>^է0Q5#{TϝeWUlZZ}:-T(KqnpK#Cw J9 P5i[Gkw~VkVb$<2b%7aQP!r m"rmsYZ 2>Yp*KE-muR[P )EAŲZ~*hMp4cH6cn1O;( Eu ZjER34.]13)BMa''ղ]2*a-EϥLw1TP){sUؔVۍ ׄ1<",.N&<T<6K0ZV/%OIQ(Zũ3mY1Uv]\lX<4ߕRU=r["ub~n>z a*.uc|[A̩ + ߺn)(BhS2v/̊o%alX @˘i0g* u2⧈"7!wg.doN(<8!nq|-A+3Eg2\]4G`F& fK|4WɛtgHiŇWxY>JG&>V%l5gj" @l"4/6uf^+ IN{_q,o*v5O9孡%lpJ΍Wf2/G/QUV5T%7ߕ\螞u^t:+`͊t "z, R?vKz:4:.NtwOs%,dW1usj=xN)17سӳ7Գ|LǯT4 Qn}4)E@ǿy-#5] M_v%6tR ܭjaܴfkލeY7}avt/Nx8)`:Yha74'_lPZ`MYZGw,PHΘ>u]^#Pqঋ)|)?}p_172vw7"[&+o+>]aXoJ hV+ěZWD`ױd+gYl'D:1@v$9&K;]5RB Eaw液bCe\_-dR)a]X{]j G8{uO^AEZ l_Cۼ_Vcp nꯗ^]NM_n-ưwQ7mV]X^t)J ފVoVbNdX:+=w6]Qqu.Yx]aNiN:ZmZ3~)zH-D:q~8-"K#1np0:B='ɵ_fӵVWh/̨Ibϣ]&lEd2Ut;T"Lv .uY҈Xⶢ1 mb" v^5 2e!0lJAz<*c*@nrNB$y8)'D\q[Ex6Fv`z}e͹4ڱ_7mڞ42N%_ɚ49^}%Lpn5;4 nɏF3qg8o>FI㘻6pNsH+Zoٕ4WyN 55̙33gΜWwW `H.݀#AZLrCxF NvP&(q$.=kLLG&I8o$5SWay%g5xqtbP"h$8`7% A嬈۴}TJ͖Mm4dii[ztg:}KQAL]y&h'>E00q."H&Nަl_\T*۱vD"l1kUHUNǻIG_K' :ቷ7lcMigű,axeS׵O~0e%ߨo,^) *I>@nϦbzᩮ QC|$Aqފ77-nh-1x$Q45 ӑpm,7j7z#YIr)^_F9YO.V'JTUr D_HXd@:Q[ y ||xV1-zzAym?cVܺԟoﭜ~gVN$t32tt\dYe+㳖r!- 2ENx*kw_~(A48DQ0eVx%jO"G`wa(«>ʋ<㡢m:"W U,ΒƷİb? LȺ$'Z'ՋMi-GK~ܖ쮒a{^YO)c#aW@p^۶+W݊۱-FӼe0A2:pK$㭣ZUil|l2^o?|AQA09tRUl[M-9Bqp,.鹋foh:BP^Ϳn\F(!rL9ЎL_ z(8~\+(̌dK  =xE w4n8 G^uc p؍?zٞv}V߳Bf*}4teexH,c C/NWM6nzzpˌjhko I2![96|~ycȏvduS+7e3 _%/YBKS(qBP i0|]yBڄ+qK*aF8!i6 r3@%Zs")52%`KFp: :9s*ilJѷ ^]oE &܉t,рcK%kmtR*}-;H%7V0`VWM\!5yRji:]isT5^,ۢ\i/=