summaryrefslogtreecommitdiff
path: root/scripts/Makefile.package
blob: 38653f3e81088906177b72f22994e57a6cd98068 (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
# SPDX-License-Identifier: GPL-2.0-only
# Makefile for the different targets used to generate full packages of a kernel

include $(srctree)/scripts/Kbuild.include
include $(srctree)/scripts/Makefile.lib

# Git
# ---------------------------------------------------------------------------

filechk_HEAD = git -C $(srctree) rev-parse --verify HEAD 2>/dev/null

.tmp_HEAD: check-git FORCE
	$(call filechk,HEAD)

PHONY += check-git
check-git:
	@if ! $(srctree)/scripts/check-git; then \
		echo >&2 "error: creating source package requires git repository"; \
		false; \
	fi

git-config-tar.gz   = -c tar.tar.gz.command="$(KGZIP)"
git-config-tar.bz2  = -c tar.tar.bz2.command="$(KBZIP2)"
git-config-tar.lzma = -c tar.tar.lzma.command="$(LZMA)"
git-config-tar.xz   = -c tar.tar.xz.command="$(XZ)"
git-config-tar.zst  = -c tar.tar.zst.command="$(ZSTD)"

quiet_cmd_archive = ARCHIVE $@
      cmd_archive = git -C $(srctree) $(git-config-tar$(suffix $@)) archive \
                    --output=$$(realpath $@) $(archive-args)

suffix-gzip  := .gz
suffix-bzip2 := .bz2
suffix-lzma  := .lzma
suffix-xz    := .xz

# Linux source tarball
# ---------------------------------------------------------------------------

linux-tarballs := $(addprefix linux, .tar.gz .tar.bz2 .tar.lzma .tar.xz)

targets += $(linux-tarballs)
$(linux-tarballs): archive-args = --prefix=linux/ $$(cat $<)
$(linux-tarballs): .tmp_HEAD FORCE
	$(call if_changed,archive)

# rpm-pkg srcrpm-pkg binrpm-pkg
# ---------------------------------------------------------------------------

quiet_cmd_mkspec = GEN     $@
      cmd_mkspec = $(srctree)/scripts/package/mkspec $@

rpmbuild/SPECS/kernel.spec: FORCE
	$(call cmd,mkspec)

PHONY += rpm-sources
rpm-sources: linux.tar.gz
	$(Q)mkdir -p rpmbuild/SOURCES
	$(Q)ln -f linux.tar.gz rpmbuild/SOURCES/linux.tar.gz
	$(Q)cp $(KCONFIG_CONFIG) rpmbuild/SOURCES/config
	$(Q)$(srctree)/scripts/package/gen-diff-patch rpmbuild/SOURCES/diff.patch

PHONY += rpm-pkg srcrpm-pkg binrpm-pkg

rpm-pkg:    private build-type := a
srcrpm-pkg: private build-type := s
binrpm-pkg: private build-type := b

rpm-pkg srcrpm-pkg: rpm-sources
rpm-pkg srcrpm-pkg binrpm-pkg: rpmbuild/SPECS/kernel.spec
	+$(strip rpmbuild -b$(build-type) rpmbuild/SPECS/kernel.spec \
	--define='_topdir $(abspath rpmbuild)' \
	$(if $(filter a b, $(build-type)), \
		--target $(UTS_MACHINE)-linux --build-in-place --noprep --define='_smp_mflags %{nil}' \
		$$(rpm -q rpm >/dev/null 2>&1 || echo --nodeps)) \
	$(RPMOPTS))

# deb-pkg srcdeb-pkg bindeb-pkg
# ---------------------------------------------------------------------------

KDEB_SOURCE_COMPRESS ?= gzip

supported-deb-source-compress := gzip bzip2 lzma xz

PHONY += linux.tar.unsupported-deb-src-compress
linux.tar.unsupported-deb-src-compress:
	@echo "error: KDEB_SOURCE_COMPRESS=$(KDEB_SOURCE_COMPRESS) is not supported. The supported values are: $(supported-deb-source-compress)" >&2
	@false

debian-orig-suffix := \
    $(strip $(if $(filter $(supported-deb-source-compress), $(KDEB_SOURCE_COMPRESS)), \
    $(suffix-$(KDEB_SOURCE_COMPRESS)),.unsupported-deb-src-compress))

quiet_cmd_debianize = GEN     $@
      cmd_debianize = $(srctree)/scripts/package/mkdebian $(mkdebian-opts)

debian: FORCE
	$(call cmd,debianize)

PHONY += debian-orig
debian-orig: private source = $(shell dpkg-parsechangelog -S Source)
debian-orig: private version = $(shell dpkg-parsechangelog -S Version | sed 's/-[^-]*$$//')
debian-orig: private orig-name = $(source)_$(version).orig.tar$(debian-orig-suffix)
debian-orig: mkdebian-opts = --need-source
debian-orig: linux.tar$(debian-orig-suffix) debian
	$(Q)if [ "$(df  --output=target .. 2>/dev/null)" = "$(df --output=target $< 2>/dev/null)" ]; then \
		ln -f $< ../$(orig-name); \
	else \
		cp $< ../$(orig-name); \
	fi

PHONY += deb-pkg srcdeb-pkg bindeb-pkg

deb-pkg:    private build-type := source,binary
srcdeb-pkg: private build-type := source
bindeb-pkg: private build-type := binary

deb-pkg srcdeb-pkg: debian-orig
bindeb-pkg: debian
deb-pkg srcdeb-pkg bindeb-pkg:
	+$(strip dpkg-buildpackage \
	--build=$(build-type) --no-pre-clean --unsigned-changes \
	$(if $(findstring source, $(build-type)), \
		--unsigned-source --compression=$(KDEB_SOURCE_COMPRESS)) \
	$(if $(findstring binary, $(build-type)), \
		-R'$(MAKE) -f debian/rules' -j1 -a$$(cat debian/arch), \
		--no-check-builddeps) \
	$(DPKG_FLAGS))

# snap-pkg
# ---------------------------------------------------------------------------
PHONY += snap-pkg
snap-pkg:
	rm -rf $(objtree)/snap
	mkdir $(objtree)/snap
	$(MAKE) clean
	sed "s@KERNELRELEASE@$(KERNELRELEASE)@; \
		s@SRCTREE@$(realpath $(srctree))@" \
		$(srctree)/scripts/package/snapcraft.template > \
		$(objtree)/snap/snapcraft.yaml
	cd $(objtree)/snap && \
	snapcraft --target-arch=$(UTS_MACHINE)

# dir-pkg tar*-pkg - tarball targets
# ---------------------------------------------------------------------------

tar-install: FORCE
	$(Q)$(MAKE) -f $(srctree)/Makefile
	+$(Q)$(srctree)/scripts/package/buildtar $@

compress-tar.gz  = -I "$(KGZIP)"
compress-tar.bz2 = -I "$(KBZIP2)"
compress-tar.xz  = -I "$(XZ)"
compress-tar.zst = -I "$(ZSTD)"

quiet_cmd_tar = TAR     $@
      cmd_tar = cd $<; tar cf ../$@ $(compress-tar$(suffix $@)) --owner=root --group=root --sort=name *

dir-tarballs := $(addprefix linux-$(KERNELRELEASE)-$(ARCH), .tar .tar.gz .tar.bz2 .tar.xz .tar.zst)

$(dir-tarballs): tar-install
	$(call cmd,tar)

PHONY += dir-pkg
dir-pkg: tar-install
	@echo "Kernel tree successfully created in $<"

PHONY += tar-pkg
tar-pkg: linux-$(KERNELRELEASE)-$(ARCH).tar
	@:

tar%-pkg: linux-$(KERNELRELEASE)-$(ARCH).tar.% FORCE
	@:

# perf-tar*-src-pkg - generate a source tarball with perf source
# ---------------------------------------------------------------------------

.tmp_perf:
	$(Q)mkdir .tmp_perf

.tmp_perf/HEAD: .tmp_HEAD | .tmp_perf
	$(call cmd,copy)

quiet_cmd_perf_version_file = GEN     $@
      cmd_perf_version_file = cd $(srctree)/tools/perf; util/PERF-VERSION-GEN $(dir $(abspath $@))

# PERF-VERSION-FILE and .tmp_HEAD are independent, but this avoids updating the
# timestamp of PERF-VERSION-FILE.
# The best is to fix tools/perf/util/PERF-VERSION-GEN.
.tmp_perf/PERF-VERSION-FILE: .tmp_HEAD $(srctree)/tools/perf/util/PERF-VERSION-GEN | .tmp_perf
	$(call cmd,perf_version_file)

perf-archive-args = --add-file=$$(realpath $(word 2, $^)) \
	--add-file=$$(realpath $(word 3, $^)) \
	$$(cat $(word 2, $^))^{tree} $$(cat $<)


perf-tarballs := $(addprefix perf-$(KERNELVERSION), .tar .tar.gz .tar.bz2 .tar.xz .tar.zst)

targets += $(perf-tarballs)
$(perf-tarballs): archive-args = --prefix=perf-$(KERNELVERSION)/ $(perf-archive-args)
$(perf-tarballs): tools/perf/MANIFEST .tmp_perf/HEAD .tmp_perf/PERF-VERSION-FILE FORCE
	$(call if_changed,archive)

PHONY += perf-tar-src-pkg
perf-tar-src-pkg: perf-$(KERNELVERSION).tar
	@:

perf-tar%-src-pkg: perf-$(KERNELVERSION).tar.% FORCE
	@:

# Help text displayed when executing 'make help'
# ---------------------------------------------------------------------------
PHONY += help
help:
	@echo '  rpm-pkg             - Build both source and binary RPM kernel packages'
	@echo '  srcrpm-pkg          - Build only the source kernel RPM package'
	@echo '  binrpm-pkg          - Build only the binary kernel RPM package'
	@echo '  deb-pkg             - Build both source and binary deb kernel packages'
	@echo '  srcdeb-pkg          - Build only the source kernel deb package'
	@echo '  bindeb-pkg          - Build only the binary kernel deb package'
	@echo '  snap-pkg            - Build only the binary kernel snap package'
	@echo '                        (will connect to external hosts)'
	@echo '  dir-pkg             - Build the kernel as a plain directory structure'
	@echo '  tar-pkg             - Build the kernel as an uncompressed tarball'
	@echo '  targz-pkg           - Build the kernel as a gzip compressed tarball'
	@echo '  tarbz2-pkg          - Build the kernel as a bzip2 compressed tarball'
	@echo '  tarxz-pkg           - Build the kernel as a xz compressed tarball'
	@echo '  tarzst-pkg          - Build the kernel as a zstd compressed tarball'
	@echo '  perf-tar-src-pkg    - Build the perf source tarball with no compression'
	@echo '  perf-targz-src-pkg  - Build the perf source tarball with gzip compression'
	@echo '  perf-tarbz2-src-pkg - Build the perf source tarball with bz2 compression'
	@echo '  perf-tarxz-src-pkg  - Build the perf source tarball with xz compression'
	@echo '  perf-tarzst-src-pkg - Build the perf source tarball with zst compression'

PHONY += FORCE
FORCE:

# Read all saved command lines and dependencies for the $(targets) we
# may be building above, using $(if_changed{,_dep}). As an
# optimization, we don't need to read them if the target does not
# exist, we will rebuild anyway in that case.

existing-targets := $(wildcard $(sort $(targets)))

-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)

.PHONY: $(PHONY)
1I0/bWXk<ҝvߠAR'a@y/zAGӹz:lpK<`'+y0quK,הv~ 6OAK,ᯎ'>ۇE'6ip:'{uAo3Ûؗc<#"1[ߊ[$h+/L!նC^/"W Kyf9R3!;u}9k$ ϋXWm`UOߘ~@2I&!!=0lu!YD沝zq ! 4Tt Gٰ:Mp;Ǵ8lq 53dN )>c0Kv3>rt`@sgyatɭ#>H/ѵ쮶pzxjoz.3Zpgu|p✥'ʮ da#qQhg_4Bstmp`KͭKS;TOװ^rLb)@P Ph`nokd0n곅v mv׋ct1Ы0#1\H!t+TGHT'kaAݐQ 3iWjJFb1DA.q^4BPSnH56kySX "Xz޵;* ZBkk) ȠbJ?gia]h*߸{eGhMɕDQ AaaͲ "N=|ׇY/"I=Eôͯ;J2vr[lH/`;x8@3ڲ 5ՠӞ\t!Nn2D68yޯjRB]=@F~$ [~lt@{.x{@ϯ'#kb$/b =- 닡8CC{@ds>P}l \Ҳn|<:h;>&kJ6 U~f.CwLd}އ \~4K5CLK`iJɩL&YCSk`XTݣV |pdwY9¶%%M}RZDRrüI' Ot`&:3[qN_Xx٭3>;=N TXs' |'Tbap,j[LUz,OHk"xo :ޮB0H@8SfLkC+E@>7RhHD]57aM2Q 8= 'R(G}b6.,+8 W!=}z>vM~mƺYެ$/ʪ7ml54Pzt˱Ge+n=R]B^) ]B"Mm+l˅|=AX" ,">;-;q6#;Y<]J"(VA$˿r'1`,"O GB!m=8lލ 7"<M}c55!w#Ǐњ K;QĘplVs\!S9z5A  ]7[W `ڱo.͟H["x";R q@䰱QySljAJLn}mn^}Y$$łUUc9ݟ>=\׏֖nêBKN @ӟo1[i#oCsft8߀97:CV~*KC%ʎ i2 1!W_r{Qp"dg>E7?!̱=OsL25`>n 78|1QY= ̭sCκJM(YXFfd(LKe?>=5ԒPgN i٤]pUC, R6(E&кDIE4W^N8Z !w$wM$}00CwL<6!G%afa@_@nxnU~f.Σ!?òEN1j\HGW5E=ؗn]xu f[ w $8VN;>|Y|]Au 0+q%e8k4hT>\;>x;J`0h{wpOzׯ +"H] _R$ =q<܈(قbrGI]i@4i |HqL]gWۅeAͩp\y:3!]s@ է{R>w`FC+ "._ xw_';c[`8<5v9. ۂ{?cݫQ;{9XT:4wN=bh#?@Iu%Z!Tb| ݼQɁ|fߧp Ac21E^:0@>P%UU' ooVV/l8P}p ~kBMM (=xe15GV% ,W͘GdQѾ8Zf1%7kAP@jܨ'nyúLuӥ§q?$柼CM9qXCäGel%+L>X;HrҝFi7Xw-K&dV8[!0)jsyk޴POJљvPet4Wշ4K[4K&yrS7U}944Wܲ3ISZN T56Dܑ0ri5ͻf=W_o?@ .Ѩ $m&\WW|k'2p jMR P 9AŽ+8VVij~/5jQñ72UGn|_hx%GH$]xfþq`H{rp*Lgbj ց*VF-ƹ5%D0暼d(;K=ʭ0 Ǖ27K5 ?ì\(g;oBETQ T8r|k%C웲>W|>Ьnl<k=,[pVXo1$C%Զr}ggÜ9w\3x*>~{?UNYBLwcH0A|W ?VgOkLuO "~F\yݰv;6]C yG|Mq΋" wػ}C|1I҃Ljj_̳OVTP+mT["gJY*lTYSB%MATZ`UeC> 3dquMGӒ;벛wv.ޜ];};Zi"耡~̷%Mȫ>vۋf"$A|&zXO )F %9X? 'ǥ-3ZIoIrK$7U}[(K&W/!:04!WTJO_ %W_sB,c)!-iSM7N@(wB/Jy8O$iWvs}!q2FJ7&wA":tay/#׾=;j0" L#AJ8OBMG} 晔Dy *XET@ǭ8>rx!K!jd`s'䃷2Hf4lwqۺw}v\\2{'= &z K/!hXIX9t$<54b=<4摁-RXk5Y 6qDZ#2:kc+zZc#," f!kw_N-Gg\Nپ,!5<1b%kpce_Z 2J`DXh +H `B^߃eD"hOrVc`8Eı}ĸ~F/~2gBK0-bݵxO)L",6z 48VÎPt&%s0/\:;=sB9 HcāL!AbP@.ߺl_,ք*{xB-8 ߭\^fPGa< + AE m<,_G KOg؋Kh N;1Z@| ?szGVZfD=BdA~׈xx K񷀜x\;5߻UG ^BA.#UF1XG#VΥ@? AjQS( nrS!a5kKb^(=ZҁGMQH8lGfN@.{z=PF2E6Ǚr\%]Lz,yxZ7ol <5Vmz;>c$}c0%f;?&ZvQ8aPnA!4w9: IŌ_,YZ-#/~>w{=x\[x㵙51 ꬬ7sg Ø8ADxoɁT`jK/hp>ZCR g?Ю`a+wxC=]b2M7v}/-.-#dtgl=FLI.ÖvQ$e`qN  vYjC"oI6={zvqq+hl_v=b90)U J$/jdY} u!+/C&nyN!(Ԧ1E? iQP =( J IQ~W"_os BojFWQ]v4"wc?nk~`cѥ"$ !P+Xٸ"!Q)^Ϊ+ p!)hCklmO~w~clNu -Ѽ|[6S1v#}(G:Y;~8T~$ikgC9UӖÙBBzFNM7HpZ $58xžuTzw?\.}y1ίf{G1\mwt$%$P~rÞ%D~ˑgާN?S4xL%!'n) sw<7>߹v  tA|Hې# {񲨦>!l֑2H`ux4`dO7窭>r|G/'7} k?7:҇pCy@{B։{R&Xz)zl??gJys^=M\t QS }T*QZ329+:t)}UW׾a?X;_[+[he$'  DK [W.SPc 4@.0 cu7=AO e"gߪ1q'bq x[H&`zKvJ{AKf~Ne0*AKrm)УY̋Zz0rzV,+b3 )RV3*A$cC* )VCdpd:iTؘكRALYL[)}j‚znjLm|Z yw߹FnK.J!73G2QD@A?dcy7|^5kshK?F1r,ӼrpTSn!iMR8rkތpcLX >Z8_;yܰHKSfbK2sB@|bD7j0g Қ;c;7U2\FH[lLM5/I3:T1bl'\9Gxuc[S9<Ι] zk9׶{-p_p}ut˚r/XXdva9WrIվs^ߞiv;ۨے*W3AFqUO1oҕsZ;g79dވu{2b44Li/3Gֿ<1 qiv+8,ImEqP mA{{XGv_HJZ}|PK`q'U^|r|dAGۈhվV+ep rMi@"*"mͣ3ԺÝx2'yBF?QF,X/#{lw{aPck-,CU&.A _KXެk P)џKRfOYs%ұ\vO{/^mlx;VU]J窶AYѩSVmפ:/:Bd"4>M)Nu¼#G^xa v9=ONFQn\Cbs]W'l„^ëص1fd\‡k.{yv@H佑s_ͯ_F9:wfg4,}jteتh#׌|:pM;<=<dۅӬ59X|9ZTwtZ - ͉<$Kt\s1dJAy6CPUx\3Ur|_] ^W݆4K!0*d齕xw?k~ߴ=$~?ْ%ڝTZ:5;CzQJ" w0 } p!еtoEr+U"3(~_[8̿&[c ^q=ZÃ4)DPT7klG]QM r@ڇB:=v ,7AޘO `H n!e_o%+x-K RUqʍu^ n}jpI/% yKn.p$H8t*k8 z{'u׍?H*]dPȭ"^iuj ?t@,}" wW̟ fX(R .4d,}|I`$*? '55Ϋ{x5䭹1b_F/P4J47o#4ڒX Gx3\:xuXfTL3><dZ 2$QDI=%TbF G%-I^qv WY~vyiv:4sMK:}bz W#AYD\PDC>k7txߔH7v4XR$C}EhF)>(lr`^>{-_Bf^תBOV\#<~S5fH/Pඟ">vɕ\AK3ftFvaɕ6nE/H}C ި"FM [Ψ ab3y2/wԗT`vUI>NOv}`;laG!|%L fђNP۲]Uo]w\oGahK܆r\ժ`wZiZgB~kɵ;O1ճB Tpx=KtA9S0IY}`<}soTҘ~__$`"zW৚K p ~X#.v=CE(B])x<dkKb(C c^.\p_R3ILr{&):&h:lk<`t/~&#Oyhvo,U^jI[(_^2F1`/X9j;bTRa HvyF6:IUnqGa)A=TUx$Қ#&nSMw׺SD-gS^r@~z@_9G81ur# }KcE7_h%" 0m_:xbS`U* QyI;ZȆ~HMDxɮ(H{<.!߮*Ys9_nI3UOF0Fˬu  * 3Ll?wWZj`ւ 1"|DW/Fh$s_> GȥKŏf$>B<b>7{A&_3t gvS8sv{w ZL&,а+]m)̣w P xyٮEǙo[vy(BK* cf[Jry]9˻tya}~KXZdiC3QR-1д9c/'3D y:RXl.oGmLeceӢu=H:m`/׈1TXPkP R,5)y0H*JȻ;$?c=} D@G.nT 0ĜۯbgjV7=̨&#Ƴ @STO_ߜ`=Ijt~DIP.D?\h#tC\:'^>5|mz{t\۶^EEI[~wߢNIVxٗ< 6=OR vfK+ON'@ C4fTz㉫(,9y6QrnkE(EU!ڝЛ. 1x PK.LP=BqDDhUҊ)-~_%>cF.ytCƠX/T㧞2qg38+|;a+ܗ6Ge}I']WWk{xBh`{4P ŃuфĄď 喲9Yy&96ݛo$2Yb8Trt3_8̶H\;E2>z#ѾHiR134evwuᲧ5ćB{/`AdrErr6􈿀q."F'Xsb]U5.H$(4R|QaWaLk6yŻvAr/>> i/Ĺ Q Uwݗ<ßn3 Tp#r`ou⊂>c]陂Ѳy2^!UYlKə*Sn{H׭wsWf@(sŻqCHG?ܶ^QFO9wS|x~kxK zAuI@tUꉱñwP_s4)&QZ XdV_uÿK}#,PKy\sf3I58Ud~U76 4jLmiVbh,>HƱ 8^^nT_GEQk.q&oOيsrl.gb)|:ٿGbc,Tq3Sz Vߜg9U㜔c !>exxG<6}:*5a& )>L>6xMUT@6D+A@gf(Uܜ:uגag[څ9z׆uoeI?T]3ԢR^r-UIȅ®Lgo#z:J8Sr#J!+РS4n'KaAOC"7z UUkaR%vs Ų 8O' D((p)AYL3ak,D6;9c*\5 */g8 E8uu"MŎWy_ _r_ș ǡϱQ7$ r=d" <9Ͼ"m6am;{ěey\^搆D>T t"|ܠ~OtLRj^b8cou@S9^#a}ڟv&ڞM D+xwi0A S_N~ )Lb7IZ"8ke֗|߮V1_G6=cyNR^s8\ZHUy.]a$G OX,\v?d&Y*TzX.E!gl._x2"^/#yX:;Ow(q|nZYvdVXr+HN,Dά#nU9ܾ[g ؙ Lse#bX jMMIO( 뜖&]P'|k0vB/G;X0A"뷛 ނaʕ6s]+K=0- &ށY#$v&tx4qJ=.EB*4^`gCS!9ZC64|`q;GswϽY-:cguS-{>AvidG&] zXj ~kS?ɹѤuK/^1dUxd,cg猻la"汉zW.SrȷƱj1Uz]skfb dh[&)s>,5سmFÀ܈ʇe ϠNCG9rQ\=v~ dcaB(`S[(I({_}tJ]ޮ>ձK=֎ r:e,W)lLn[ t~ruTVib >*s+q~)rA9eYy^sR.L9V]06q1p[,}Т-$l5̦>J0OQ{vG\wt&,}CQ3{Mb *}EiNήP˧Tz"Ŕ\BL,n2^Wr^&d;%io5v̲]'267bE{Tj]1hf"P:3d~G6s 9pfSGr,.^t;t8Gdwj鍰TQY  [W"VA,xǎP=h*1 Ǽ:3"]Z8DsA;P\\5S4?}; >)iD_>69EA>c*v|wʉ҂FB# di2BK˹5:x05!hxiE{2m2FPI;q(fݵ1BG2}4vhR<6i Dz ڶ2 kxe8?EAg0fvD6LS"iF vlus8OKSn ֨q3MaouISF[V9CAB5oLGLnRìw9b#>\A4QmTp@KL^0ed}}dq-bB#kZǽKu $5{skF?qoc$ҼxzD3h)@>(TTSdSH^s,lC{yɽ g%1XռJ~USO!5# ԘFޛg"&y1 ]rӥ ׫V&}R A .9èv]8(Yi'^_27PĴqG^Y#i,8.8AoP:WPXȺ,HcZLTT0R-e-j37|]#j7RLQ 1#}c ˒[455ۤP5PG E0e;hPc_ԜxF#wdgh=xvm wXxP#~HLcO{vtDkuDmbR͕QdHyd8{w5ΤT+kɋ\ 3бj}v79! MSU\CP,H H-LJIkTqosʈZ}9+Kc/tLjW4ejSxue沋m}:w'0sk:-Ua$2zzqthY8wz;۬kjtļ()x2 s}qeLT=Hz"&4e?uzE{ 䊮춲||F 8=sAغ(xy#z ?"xyF=n= O7R^1@^G./q{L2 xQXw ](x@ABؗo[9Y-*ؗ(@52s1|~iu tpQI0P!iI*u+|5M~]7g]4%||g`籸{7bdo0fXExp_x/=_w=gf:EQӻ\晱y3v +~7s;Z7/Teu3\>~2kPWYo-]8GnWy \\ s {2|b vUkTĤiJbhsR3Cn+5YEV6FMtR8]h3-yyft(}!"*_+ ǡcroR*|;4::#,F"6(Dpլ^xu|L{[rDu+uEcZNN1Aw; H:7(hɣh; H4Q [H[VJESe*,/jUqUj. - 5sL@xY OkmL5V nAxI7MRE PPVߑ||6RX]?g_0Hf_tccn&HH3X-IYRݨ9|ie ,Zbd/v^Xhto3^} ZieA8rRK fՖյ~[/)ܱߺ5S;549A Ç,sp|Њ.Xf rbKP0pblcͮ>3Do-Eo=c";/+se%`关I=xV:o@=YRWX>_d?9Lpd,b {1`O@{oMw'dIRBsP )P) -p#ac|@]F19$uVA'>XR4 ;@3L>&yvbu9TTmP.H2֍(/ָw h0GbS#`"9"CģC2/(5=; cAvҤe=/%P'gO3f֦G҄vr|˘h/.cܽ{7  `q<8)~¯7IP =W~Aw v7ƇAye9y#.+%ǧ9~l\rS1 m|z\`f1t$VC8 C20͆0wP#8Y$PF>ZHZ`l:-wP {l|:LOi =aoE! x(#+9u7P2M_Q:*}ɇ^4b16sCXD90<J#VeKVKRhdCOaI{i˫z!CvLB"~圗_;DJ`},i~czŹ],V ׎ F;"WƫOllnj!Va2,N"V~n~7v"3d1 mvl5{~)-ZP7UGEZJwlۮۦvktҋ>[o2V⭸E8BKHe"P:qcKbg= |uJy}4x/VPA+bؼ+T׊˴z&x?}'!r7i2R8ȏ^``|<?}e:_b!EmeȄۮ{{ 8)sT+N/A8G|c8/]0d,;(*sYXcljWlNo>59iOFzY(fUd XFmDneeytX8‘fi@ԵmrƬ|FM~0Ý꼼;}׎>fBqg- ܯY0 Y'^hv 1_~4ԔƏEVTXɽ>()xAN>Ey2̓( {ԣabƹFU=`lHf&pacа*XA!fO{pnRzy7:>1x3^S0$,, ?$@R SZR4%rd*>oyV0;;[U;|z5B9.ySS bPwM u7,QLQ8 1aYT^cL5`w`WCȥV5-ZMsobk8',V+ s؟w+i[22aioJ۾"c8Ogz\~xc1JK;6T&Έ8C3%&G;mJJ_xa+اQ{Т51" s- z +̸v<)L`GQH~3:O {>)mI{6LP#r;6&_1ap妭P9)W*Dz-K9h:N s`Lcn"kn{g}q7%d- >53|ywqN4(>oʌ--xC՘fY9 qc?K-ymӏˆrܥ/ޠ2)GC=N]þMDICn^Fn1yjv\^ýt%JZ `c01YA8;xS)=4*xJr"}ovN."ZkW;7#,Gۨ@-8;b \PqܓZyPm#u~YTԿrx Wx{032ŗ|Rp揾31IIRGu0I"n2É 5ό[Ԫ"G$Y(w6Q9Vc43s]:]I# 5gOZj\tB#}_gnj3b9#s I"8Nu1n (w}ai6xibq[9˜>㛦t[.sTǎ*t$Ԛ3Q_#٘rliٴ֜y"X;*2e:n|,g$ Nðx:NMqy:LGZZtj8!`5u|$%C8BkhFQv(:vvk|f\Mַ%qΆe i ,  NfG*q3yy=ZGȱ.g1l"\Ѝg#MKh8mg6jN+Op %իŻ9]TyOXMNo1j"%3Çy3L|if'N7|uY~Z;߾abc|D"'(Ldu:-LM55Uc%&LƑSǮM4=>O:SXM W;lb9sΌ85 24Fr8 L4sGME%n}lj|Ѱtsw)cG\QVdg}dlYRɤebbɯɡXYrG/V񇹼r$:Z35P9ŌV`}HCFF-׼ۏF" 7>pIodl \,\thoHyYw/AV(St.kl׈?Q}1U+9HW|y]}ppYqFexw:YM)>S:i6`R6Qt_ׇ-qh6i+ U^%Aߙ#Bp2RFcmE pWwr2 D#5x#؆sd]?ƟnIX8`{6l7bt=Vl2L1&ំ61\w#dwN({諳~L9 32+{%4ȶȞU ȏan-Z,0d$*֧e( ux~T~IJ^`P̡s peQ@Vx7ū 5> ;;8˒wYU(4uBlB(ˑ/ IɓkjfSpg/hf˕N 4*PI)>G`B;)֪\]xgMG{ylҨvfcg>[tGJI60_oԥ4`:ǎⷜ*[VӍ (sՑs?}^' N͈6dEAݘ_\؏j `1!GsAW:rj Bx} ϟTp/Ǚ*|^1|o,%4G Q7'0fԀHhg D[(%g[`E;ؗqj7n1]:qYu\sX~߉hQD]kı|HWr㜠 :+7a{sV!ldžUXU'e  ;MToU1H"&]߮sb7>\c,AԎϘ}c˔?s=$❮xMCuV lW>ulMu^z38D-@痘TSU_DGTdEJGdu|Z#7ސ<]xcZc{oIAG,4vܾF=SGY)ގܔI[4ǫk(ZRSm57}kv9n%9soF'`ʀz KK1=2wM!+OXYᒠtg݀yEV斬Loŕ~x-eEO0y5lWYFRfI@DJwȪg5W59,hX\4zȑ'V2{e\)ײ* .LR׮#ui|rqBд}W|f=ˀP(6<Ҟ7 S =vBN J9ZP 4σAjFC*U-p!߆d\d P,?&R`BX{0i[6a Tܥ N"V$~zi&ƹE~\U&֓U`-< ^4^43 -s,(4"lQ{+MeȊ=8s$]ji:92"y~]kt0gxdE?Xzcc]4*oIFְ2} LhYҿ >q{F{%ڮ>mP;aF}eslzcPh/UM7-fQÉM;9|ެR=4>1oC/A׿Y (ĸRmkO}3j߳kgĻN0q5R(z=-~t~|f7湂b<)9>qD0d\{j^‡:z$޿NY>>D&`mD݄S#1'5@7<tT~~1}<o\Nozګf*|~*{Aƫ9]♙jewϱLNMuYx+-"^)}&d&.uw`9~$s=5`nvGrP=KT(x?2M?uG`F|;SpU \khTق_5xb_뱵bkFT@p6_d29bIKKZQfy|W-oy<?<7(CESNǦ#YJX|sj^3z7*^1uJ@Eɜ)aכ\~U "޾:^W EϤk"q*ٻ"OE$d65nǡ,8,k.;t:r甁_{nEwEgsA  <뮡ھ7q8"#(V/u 'kvƴ?4w|?*2G NwiF!@Qc^dS~ޏo/E +Yc:;UČfJɳekŦBIH(q[/Ȭ`ـ|ڵI0;/F|sהiqf< Aj Cd ߌ\,0bIEȯϔYרO_Ի;7)b uK< gӮfnPCb3֥]vӞ{\yTHD=D}:~"Q5(UQ :?6/AEH'!xCP:hZ|XncwZ;1/߻gsNtewM ~Vo۲s:E0W"nPKE}0W678G yɆ:_(|!{{~D1Ma\F㹚&/k,;&)JϿP6H۪pk\ֽ2@?Pñ!CG д%J H:HEtk,!H\>i h&}9-\/@[L̵W޳X@4N][;*}|s`Ki6sE{1rbdb?GxBB?|6&. -GWꁝn׭٦?vViy\}*~wV141"a}Vx=}3e?nKjd1O+;|>,7xyzxm[&өOVZ>_=!(>ԙ6BTuᅢ@aubo)XTh'_7hU,"_eˌZ/{K$ g>v?w; C|bXQ#\#t*<>/\a H< zE}Pgk嘘>em#xrp7p]c_Ϭ }:i_EWTwo]p퍛]+Ω ]%|u]߫Zq`"'>_tEݟ~b܅骞x!qϜ}gW pt5_p/!;WŇ7E_'S r2_.e;yOߧ5ԺHۃ`1*rl%Ž8v-%iulb{ŧxatLMZp2S=Ь)`y0(MU,y/W穯4vImuخډnzч-/hG 't^?ѧ 0IvX:Hpr6ԔFCS1(z0_Ɖɫ4uh4s*3B:CB?ŤՊV$)x\"g;z|X(|oU]'N_x᫿NWz?G;x7pP:](~Ң?>6#ݳkrG~;r5{]H|9b"2Qd>jβ]cz4N|s c8f!9!CVX~@뢯nEB T!?2 ^Amhߛc=` ZSy >7ryS=ZlF^O[ !1<_V_9'k߮/ߓ|,x5Wmr\id6m[Q](U EJ08mknW;"35aݲ»Ih\̓@8x^#:Ak7}AhYu{)n? @՛ {imyt1GBs:sd4a  bWҟ׿G>QamV_.ĂXG>= o„D)FU)2'e 'D}1P* lavp+H|忌7L AK?AGF:3F3p^ e/XVJ"V<]eQ{&ו*fkAE}>g a*݋N``_%BNnA̶[p^{޵ȧ }H%.c-4Ϝ>* l\t?!$$82 9ïWi1~҇5~BHMTJFi#e2xU걍ô#NF W>;oDzUϮ|8c+W|O꺪Y}EkQ^>ݟ4o^z{ט_o'7cdv{5Ciu S4gCd/2)+̣*fQRj'7>m_F fsYSr[qV HN)șͧT3^Ľ*Ckztו%Ϗ_ҽ~2hc=CSgSKW@m )>gvU-#ԣ9hJsp{}ۂ ~ՠśT5c346l6r^+\Y[1.uWHœiA dbv&F:fElm@"A5*LPM_Tq xyK>@BI OKA/h ||9s5}{|e?ԛ~v?˃?JBjo/g ~$-7!Q>JBv@9pׯȈ)JGG4u O.)Dl l#ȝ\ȹ*5`ڛbyĦЬhfZX1>O#a|Dt5&" S8!g@|JnEd;xj5'Ycud6xfmF*_#gIdwC?_k7f:لK P^6.I۪hܕ( W|{"P21^A)szgC!s|OvhJ HRûd/ȆasyHu dB$KjM8/܏٤T۩ǨxfIjgFOl ¹Sh۵FH !jÏ ĄYh[iCP%B$/ %~s="u(&aNOmڡՐ `2j2|}#d~K]HN (,:H&'>npzrI\ 0Lʹk ~YtQ .*dD EY*vѠADpj,nWFudF;9^λuJ *]UR6Σ;FbX-+7S /1r\Ph@?F9ju?92bGz|ZrU=.-a_F]K3A_r ' __[`v00ſ yzy<9n[3.e\lڿ ÿR6 H~R dB)lЇar/LpʨOx>~k Ǵf UU#6c&C7XIU=UIf Q,Qz&G1pZ+vg?yP!}]{Kީ.VH0̭I\BY/kzx;E:,mv aҨ}0`O/ fa,+.PRoKƢ}ΜY|t`.zaqpF{&k)˻#^ c!j6z o ?U\ 'Q8칩q}s1MA @zHvɱG<5z +,`0,?qmGag<UQEI:K>t/IŅ`x?/8lC&$ "raXGa0߸Gqg7ϪM٪jW_Q^{\aF^}76l5$n>g9zeɒs d!Ӳ 꼓6nƱUW]8;t Z0쎚=i< !KeR!urp[]#K"a7b)1.i&WXiƙ?i!*VumNB`[ȲqGD2U=uG龜f]{"qbTkU/vk -yع\T( VB=xVq$97l~_ 'رĜCjֽBPr0؋fŅ@<57EMŶNHJV5>7}Z1!Yf;58_-_bD55x`*l* ܝ(wh"ci8j ]GdCs(ۀsfY.mԦ +EAhvFdMb"-ܮt>㩽@_cř.kkAP!8U B%;djiYd1wd*.qW>Ⱦ"SQDpG1f -XFN1 ؇#D)^ޱPڛܲI93Y .` BOWnqO=FO&OvWnʈۍ1l]#|*=d2!+_f_3f=W,?Wg!}=;WUYe-"?u8_3_}7P{YG@o#(jBH9^J$X,YCGE_{:IBT@WLp* ID&w{rjr:Do@֐tQB@ z:xGϿ@d~yMГa G]ZU+y1XŬnzwdݓ&q:ڳ5T?=7-y﶑^:Qհ5$idW1 Q)2sb\ak\Jo;|pjote>){o)hm\ 1pXB &X <t"!#h$A~v""nﯞ6J!8:#L۾ZCl!&ۺWb,ǂ"܄: FZMoeLP~j~ذ!-4pAT( 䚻b$aqj811Y^_&=qP/m6,0Rϴ߬z "rZ Í-Sِ6ZnX X>K0Q6Qaulq\"61i!:%Y# r!_¥`&I:hУGa1p7!k˜l-3H Ё*446TI}uQCO`Q9+[ E$D%~A<}~ΟƛBQ"H*>~H[l=J8~~v\-js] 9GH[|=/s~wЃ@2@9~ޜ~wPmvY_-ZnՃxriRm ]Zs0ؒ$P㮯\2"G"TuC%Z]FZk%|*Lv<[9WzƋHPhsD uYAh*+cn6CmY7EoN\@3!?aD3)p,F8D6 tGdvjgqu&f9SkXeeF1j냕Qؘ(uP;zo^ox/WjBEߌď18㩿Fޔ_ |qMy&Ǒg26@e,rH l8\y U4^P+bhj fX,fFʆ^͘uFS]w jd C{ 5ռky}4>$7w \'AN)A = Z^K~Nxwǫg.1>o-^|(W>^U?"xg#S_t;#H.x=gwWՃd״jP]tD5;DBe^~vuub{#ϤFx#cgX'O,ۮ%)|pA߭ u!3JL4Kq< B5:S]2Ԡnvb#StF݀^\8@bB` ?jP)? YZjWӈ7@]մ:ou6bAo[ q}~;VH/Ld#+oXc'x#4a[u،L~\Fr@t7GVo.0f0; U{4e4D:}XO@;'G^֮봽W Wpiod!R5k{b,B Ja=~sx+kmXhl8(VtѲ׭xNn(}okC FA3>"jPP-a@ϥ=cY9t0V$vNU!+EZX'u㥓_ĉ*Z߰Դ-ӓ{cuu[9R c['Br7W(f#XLCke&^ 3)*pʃ>,KzhdnSA980>T+oպ"y'Nu إ4@GE m&]GG[ƼGOR%`+K}W,W2 vkDIq5 ;f=Vh::l.9J~ٯQdma!m_/eGW,;Ixǡ?'*IC1B-e9v2mG1Ec׮a?]֫ UҊ^ц)du[ܐm0 Lvtߞen$jlS`Q.DDDDN}ƻ&?c\Aw&apP}n[C%~7s {СTI&ýMZðr* #DF kWDX+=J#eBfZJ)|p'nVF ".yt]:XH|K[~l4lyrq sH+mbmmz[QJK^<9f{ydi.)V*Qv@̜цq&*1{:qӞoN/}32_unH1v'XhlӦ |$$bH; IWS$w$4^N3(j dCqplP3lP13D!Cof&eb!ayr d Sj-!%{!sJ$ Mo^3{~mgb{ НD[qy#SX%@HxQw.f~^nar7 6@s"W[sOPih:er$-< L}HG1f3X#W0h4>~FE_H[{9|;jr$I1axn\&n@G:^C;r D)}~r$3RLUZPۧ 7ˉjBH(" / W`vax߿ȁo{8iaXhX 4^(ad~3v:ATRO6mC`ea4 50n&>^MBv0~k˯;Aо|!rӐ,j1myZ9@ؐD꣺6zE*p|~e6nToEY8P!28v'G6sSKsϳrY|Aa1b:<8رoe =Ng!`}BĜ;~?MVmAtmRNCwѫo[9սv Pn{ Eqt&& QVٍң('Y DDBMRȆBCkhU)&+ c Z[T* * lf@QNwk׭xAdq O;!ⸯF[R6sMc2db9yL$ij`%¢PU'>_c5tnmi1V[$4jz|/ E"*ٿCy3(=%ڝ|̉>EPdRVGv@dH4 mz&̽Y[3E%Nz"oi M8Ο Q HCEߧTIEUKo\<2PAD7#B4SWr ebb$?yê;:Wt=2I  P߅p6Ck ]`>S &Fa*aF]wрcsc9Z*Pg9Q%@g=|n(xQ^>_z']kߦھHQi}ҋPRPa['~:4LHb/IF(ɓpZYH rl}]ly7eiTp׈v7kyEm0lLD/U0+>7+H3=q#iOKjf&@& XOc(d7bp͑@B11+XtIjKvlҡ \aO\e"\ e'd(d`ه%ѣ*?d8 +rEF0䩙/Vh'n xG ȣWUEb_[16(/P)c;~ N-I} ys4gmufQiDBW._ZJ4IM-pg*"=U`f?kxlhG+UlU{ocW>_&p\e2f?pg{mxɜ .Ñ ?dzKO¶J}y ][.V:ha̩޿8k7Y3._qft'~;^ A_HPYQaA14ʓ " X85plqF}sof07_*bQ̬t$#-Sѓ$D&^BסO"aHAҴ6M7Dhxmy S C;x)+0zwVr{^~Й][`7=! pH$?$-zt"'N:(Aw#Yq C6f4| Iw°k't"KG{'iquy` );h¢HB) r 1)e%ct]xP̱wnD-jZOL "v!o|&7fhF;r{fS33}ROw=ٱ5{qG5a~b9]*۝Oz^VlW'Y.[-] v67Q vH%2k86VgSqa Ŋ.?ۘMJo\]!-&[~d(RjHT< h>f8XO&5 A(`PSל0IdGQsA:"_n?'11{wUvq! 6>Tq/``EDGWXN 6Рh# Ҍ/)Stu#%)Q]d?_pY!KщdZS^8PcK>PGHp% ]72]uиcnPƖ3#n }'Q~V=f@CҐ*HWFR.[ZPpe}bByEw~ qyt^-P}\vL?67ó}<3)>)k6#d?CwBCo۠UªC9$gmLt :ܿD"tvYvBÎ[U1+D9ȾdROC[GAN@Q8 ѻi0h_'% c[=F<|F~_JUJ0$n `f_r+J 0PkK\LLm<lSn:?6ݮ7+S+b!qXd{۷[t Fuɻiܝ3o`b};sݎ͵vOdfpoS^vWAFcwՑcAkwZ$q[l6Ity2b(IT@ >m"$g@ ܩF:V^|N;M{N0D "hoK5P }3ayܹf9ΡǤʑg'/U߆s71neRwi)*Y}:~W?sg~*~.V>dOuh8=^0X<\2@rnXs3:§enxgp}ߟV[ʬ>1raZv'"7v.FTϝ?ĶR