From 1d8f8851a414fb75e05a048559c03e02c0df1c42 Mon Sep 17 00:00:00 2001 From: Phillip Lord Date: Fri, 3 Nov 2017 21:39:48 +0000 Subject: [PATCH] Add support for Windows installer build * etc/images/slash.bmp,admin/nt/dist-build/emacs.nsi: New files * admin/nt/dist-build/build-zips.sh: Support building installer --- admin/nt/dist-build/build-zips.sh | 54 ++++++++++++++++++----- admin/nt/dist-build/emacs.nsi | 71 ++++++++++++++++++++++++++++++ etc/images/splash.bmp | Bin 0 -> 310494 bytes 3 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 admin/nt/dist-build/emacs.nsi create mode 100644 etc/images/splash.bmp diff --git a/admin/nt/dist-build/build-zips.sh b/admin/nt/dist-build/build-zips.sh index fb44c31c70d..138ef4d4699 100755 --- a/admin/nt/dist-build/build-zips.sh +++ b/admin/nt/dist-build/build-zips.sh @@ -22,11 +22,10 @@ function git_up { echo Making git worktree for Emacs $VERSION cd $HOME/emacs-build/git/emacs-$MAJOR_VERSION git pull - git worktree add ../emacs-$BRANCH emacs-$BRANCH + git worktree add ../$BRANCH $BRANCH - cd ../emacs-$BRANCH + cd ../$BRANCH ./autogen.sh - } function build_zip { @@ -42,15 +41,18 @@ function build_zip { MSYSTEM=MINGW32 fi + ## Clean the install location because we use it twice + rm -rf $HOME/emacs-build/install/emacs-$VERSION/$ARCH mkdir --parents $HOME/emacs-build/build/emacs-$VERSION/$ARCH cd $HOME/emacs-build/build/emacs-$VERSION/$ARCH export PKG_CONFIG_PATH=$PKG - ../../../git/emacs-$BRANCH/configure \ + ../../../git/$BRANCH/configure \ --without-dbus \ --host=$HOST --without-compress-install \ + $CACHE \ CFLAGS="-O2 -static -g3" - make -j 8 install \ + make -j 16 install \ prefix=$HOME/emacs-build/install/emacs-$VERSION/$ARCH cd $HOME/emacs-build/install/emacs-$VERSION/$ARCH cp $HOME/emacs-build/deps/libXpm/$ARCH/libXpm-noX4.dll bin @@ -62,17 +64,28 @@ function build_zip { mv emacs-$VERSION-$ARCH.zip ~/emacs-upload } +function build_installer { + ARCH=$1 + cd $HOME/emacs-build/install/emacs-$VERSION + echo Calling makensis in `pwd` + cp ../../git/$BRANCH/admin/nt/dist-build/emacs.nsi . + makensis -DARCH=$ARCH -DEMACS_VERSION=$ACTUAL_VERSION \ + -DOUT_VERSION=$VERSION emacs.nsi + rm emacs.nsi + mv Emacs-$ARCH-$VERSION-installer.exe ~/emacs-upload +} -##set -o xtrace set -o errexit SNAPSHOT= +CACHE= +BUILD=1 BUILD_32=1 BUILD_64=1 GIT_UP=0 -while getopts "36ghsV:" opt; do +while getopts "36ghsiV:" opt; do case $opt in 3) BUILD_32=1 @@ -90,6 +103,9 @@ while getopts "36ghsV:" opt; do BUILD_64=0 GIT_UP=1 ;; + i) + BUILD=1 + ;; V) VERSION=$OPTARG ;; @@ -111,7 +127,6 @@ done if [ -z $VERSION ]; then - echo "doing version thing" VERSION=` sed -n 's/^AC_INIT(GNU Emacs,[ ]*\([^ ,)]*\).*/\1/p' < ../../../configure.ac ` @@ -124,7 +139,16 @@ then fi MAJOR_VERSION="$(echo $VERSION | cut -d'.' -f1)" -BRANCH=$VERSION + +if [ -z $SNAPSHOT ]; +then + BRANCH=emacs-$VERSION +else + BRANCH=master + CACHE=-C +fi + +ACTUAL_VERSION=$VERSION VERSION=$VERSION$SNAPSHOT if (($GIT_UP)) @@ -134,12 +158,20 @@ fi if (($BUILD_64)) then - build_zip x86_64 /mingw64/lib/pkgconfig x86_64-w64-mingw32 + if (($BUILD)) + then + build_zip x86_64 /mingw64/lib/pkgconfig x86_64-w64-mingw32 + fi + build_installer x86_64 fi ## Do the 64 bit build first, because we reset some environment ## variables during the 32 bit which will break the build. if (($BUILD_32)) then - build_zip i686 /mingw32/lib/pkgconfig i686-w64-mingw32 + if (($BUILD)) + then + build_zip i686 /mingw32/lib/pkgconfig i686-w64-mingw32 + fi + build_installer i686 fi diff --git a/admin/nt/dist-build/emacs.nsi b/admin/nt/dist-build/emacs.nsi new file mode 100644 index 00000000000..947ac9ac181 --- /dev/null +++ b/admin/nt/dist-build/emacs.nsi @@ -0,0 +1,71 @@ +!include MUI2.nsh + + +Outfile "Emacs-${ARCH}-${OUT_VERSION}-installer.exe" + + + +InstallDir "$DESKTOP\Emacs-${EMACS_VERSION}" +SetCompressor /solid lzma + + +Var StartMenuFolder + + +!define MUI_WELCOMEPAGE_TITLE "Emacs" +!define MUI_WELCOMEPAGE_TITLE_3LINES +!define MUI_WELCOMEPAGE_TEXT "Welcome to Emacs -- the editor of a lifetime." + +!define MUI_WELCOMEFINISHPAGE_BITMAP "${ARCH}\share\emacs\${EMACS_VERSION}\etc\images\splash.bmp" + +!insertmacro MUI_PAGE_WELCOME + + +!define MUI_LICENSEPAGE_TEXT_TOP "The GNU General Public License" +!insertmacro MUI_PAGE_LICENSE "${ARCH}\share\emacs\${EMACS_VERSION}\lisp\COPYING" + +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES + +!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_LANGUAGE "English" +Name Emacs-${EMACS_VERSION} + +Section + + SetOutPath $INSTDIR + + File /r ${ARCH} + # define uninstaller name + WriteUninstaller $INSTDIR\Uninstall.exe + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_END + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Emacs.lnk" "$INSTDIR\${ARCH}\bin\runemacs.exe" +SectionEnd + + +# create a section to define what the uninstaller does. +# the section will always be named "Uninstall" +Section "Uninstall" + + # Always delete uninstaller first + Delete "$INSTDIR\Uninstall.exe" + + # now delete installed directory + RMDir /r "$INSTDIR\${ARCH}" + RMDir "$INSTDIR" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + + Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" +SectionEnd diff --git a/etc/images/splash.bmp b/etc/images/splash.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1e8332665e1401a404156323182bd55fa42616a0 GIT binary patch literal 310494 zcmeI5XOJ94+UMDLFD~LP;yzv6*NgYV#l?NT_v0-ruxNp0@tze{i(i}s!h;ZA7-0nh zVT6$uBRq1*do!}58A&5)M$(K%-j2K>FMrv}QFe9tuI{d$c`|0As;jH3GXI(R zHek?<1OMly@&EIG{QL9U|8VAi{KtPEblYwJ`^?*J`_G>aAO2td_+MB4+yCl2^#9sl zb1b~|)DrhY$hJmLxY{`$!wtJNPbo})&L+L-T(O6>#zK_K@C?CV&qW)8Yg zO@Hz{HT99R)#L~NX#S@R{F9pg#CiJvTs7^nbJU72pHaKkEYiH%iQKozTfrYEY*A-j zF;AUy)qJ&J$sX_5@>viN1O$Ot2yAW`r=~snXEphu)4OS!rE+)prEeHq#JrIH8hYx6a zc}^s)^wLf~PkH!EHC5Bv=6^k}pj*{0zaKxQmVGqP)BzqCTE1cGD8==la@#}84b42` zlDX>dcP~*#kJcZ*9Mm?sE(iz$l}Dg`_87D0_M?e$uUXo;@|%~{k-a-AU+I%?So6!f zC3S~(&U*GT)wQX`w;q#c?ofZZX1<}D@SM*MUE_P7ToeQZ0YShIf!WVpo{Goxqo-3J zIm_^@tG;_p9qHQT_qxokoj7*X@VS2V;2N}Z>ypVO?>l)NLjA z$pt|`5D)~s2<%?B)a+-2=uX<}mUg!M_@+9#zcRX(uFiFlb%$=Q`T1StH7c&qx; zrE?9hY3XKr=OHgV@>viN1O$O11UhDaXJmnCX=Bvy(7!{s*8Va~9Y2ySP1?0~kHR62sGxUq9ojwn`ODS8?d{#~M;C;x zCNz_OWSg(O-`f3s+LO+OW3|oJ-;CT~&Wl%9Tt<<$p7J|EKoCfd!0I2~s5rfJX&F4< zqGA732X}TRudL567QS^`?D}IPHSO`gs9kFpn|`z1NA)Dd?$19#POqL z;kRSuoFW<(r{2)*&5I|R_x9^wusgE6CdYHHU7&XCI+D0vOGi9d>)NUnqbyl_AKmms$I~1^6owB8w+(>@T=M|ZM51j{a?D@zf+s$|7_|= zzqsRR%U068b3VDB=<4rYH+*aqrj}0Q zKele%2dQmzcQnmbvj$&m=y23KX&17V1w(IE9do|VT*t`z);jTHvt|_J@qP3I@ReiDVEv~)^Iqv|+P|l*QTrE{Z|}?cad5{b1y8VX#@DL(>lf9+H*eMQEiLoW zetGooDc?L@5A3A%8pE8TKDLh3f95k6sihzGS8bC&Q#)797g`tola?YEJkGzOo6 zBl~v7exCP6?DX9|zuS(mb2Gm*Ht@i4@jZ5EzoAKC&-MGx&ROCVB=K)x9vdGtJr?|) z8+Hv$pbHIe-(h$_>Yld1yDcC2xOpCJ345>KcLg6~?O&|>8hOm7c|RrQ^N#M{t>(XW zqoIM&K6rZC=l8y(*Q^gT^@HA0M`BCVqYrf2KF;EI>^bO{r1)ojKkFo8WaG?lQtk6r ze*IFav1QilSMOFATsza3Zcftn?{NzDs9~7UKI9;23wzYC=SO`v)!^Glwd=i`*Y3(& zC*&o}uc&7ReQ$UkO{bf`dQnB~p|Pc)--Di&R`E`yL+ky9cjS=U(=kFWp?dHkx-qKjQan_Zsin*WvG*zVlzdSsl=_gs_r^Z+F|uxuu=xkAm#X&?jZRW?Me0eb$&zA6naf##&Z%+lxT~ z2fb(3yyBww?om5e&yQTQcCTAv`Y6tL24mI=j`Or0aK#r-tH#fsF#g1gH6PjV&Yec) zfu1mIO`v}C`4YW{-?@50WF0Mbz4bWrnTsRmyWdy{y4I~H&}%+@#b?${`nAw+`f~`4 zX02x&Y&of?iQ6y88Teh;vxB~yGVo0G(*x(Li>~;wgl=BYcY)fuJ6u=QG53ead57$8 z!5jVJHmCbO;_va>pt=WLH#&7a57=kA^N(jSKh}-^Fi;1_{xImdNw33eA&1+(VrF-n z?1|Aqrf6H7I)H2eoOSLapNWfJ5Z`16>f z_|AU*3at}vEUC_x#lL0G|LOWH*1VQ$Lx4=pukKl1gHB|~I!#^b@i*vI znM+>G5`EU=0KMnF_EoVUK<>;Qggq@X74}np?_>Q(mS^@fF`mqPq_6#+75Cb>{(n~e zt{YKAH?emoUU5*NJ#l4@@WM%S+33uXN5-wcy$?B+x1i@>zvg0O*12zo6z!kkTll?w zR@9OHgZ41Tpu@~*_IqY+ba;Q(Gv3!W@e{)v!AC_sJFD+mLuh+f=h`AzveL06t>+ZI z2cu5wr+gmB?-x~6f1qEOH|<*P4{x%6^E&S>i9SO+8Mi@v26UORvT5FriJsdVZidHC z+UM^5%$c+{-#3crCc5-5$8-b^ z2W*$(tUc_FXAQnY^Uqy@&+>jT|Mi;^_s`syuk}8r`!oAh;-6Z2LA|kMLI+{X25mbJ z?m-yY>(Iy5-@k5u)_p{W4SgauD{-ok0TtwC1wAl4CcLkGPBo5TPn*_`eZO1QY5DG~ z-p@Nu*(UwPj0xT`U9TN}tSg?XySop%h|c^yXeQ1(Um>thS(_pG36%)_t(O@q%j^BBBO(v$U*KR5Ef6UUAiIv4bO zd!4i)zcWq`Xuh6tfh__yaoCeC9r2KndwBQ7)QL4D$sQyM z@3`O7FH!N$3V8MrIp;}GnICCsCUXw^+pG#>4Zg}drtFwyY+*l*j5MeiU8u7sw7*Sy zWS{=RKL)BlUNpO#b`nQ!Lx+FtjmFQO4BY2<-%UGKe)CdL6N;|GgFu_S&j|YrEeMOf zY+ryp1$iI!;d$^B3pG8*o^!{_x#n}&dsrv%KS@)FKajLt-nuaUkPD!*fIiv6K9+I7 zc-o}*9`j$j$*d3E`X1H@{o71vrhXQDdu)2AW$!yy%`?0k^+#7aS++UyUylzte(dGYYZq^L*Cg`kxb>{|eR1O}BD2LtMT#>1s7ZOVxi1Cl8nVKa zxxDbre;EG29jlx(ud$nk=6efrnsWDk_I=~~pQXOM=PGs1rIQWa{Iia~`O2_Tz2)(v zhg1@sGtZ}vU7NylY#{GVG{?1ktyTNPq$wt+o~F61OZJ`MY_ae=vL{I6AG#@qZL8n= zxQ6Xg+JX(wvQHjKw7vz^1D#$^C}85{O@i9YxDel=La#4=@7~zBfhT+%u~sTxvDaB@g3(ne(F7?pc{+RX5A#V37+(4{YLF15SIS0D+Fyq7&LF#v)J zGNdHWWX~AH`(1hKA`_qf!W$N<0|!fabXx~xALv-(*aUD7d$y!8{_xk2^L)2&Xxql= zU)gGwbu@AOG~eVtKkhl}H}aUCQjlNAX*;~q`YB)ZlxCOR4zo9l*o#?Q!H!s%)hx)# z;W3QP!b1z$GZ=drr$Xq4qxP1zJ#mis4E?HohOWBmE5mORbJLqE9i25kz;R^i?mMYx zn0ynOtBooI(I!U@Oat!VX@uoEW#K-kR(TJ9^}) z-nk4fwtVChMf%ib9}kQzbBL=qLN|27H6sn}x%&3S>d@h0`=^6DIuh}P7H8IiAl;U+ zJJS5Ly*KI@B&%;+xli?Rau&zQA%_nNw&~Etu=mm*tF&)XlES*{?Z>cp@E!h#Sry~| znvibW`mw+12?d{#xbjTe-u$l@dP1`^YXiCr{NUoOz0lURV~1z2|;T zNm{O(#J&N344-ws^0(_38b0|9okQ-?7vlN7GA@X3X7JYY#>K)thyLNC5O*zQz9LJD zGv4fbxIfE6T$rSEo4W8D^py2p;FIFEpYa*AhpBfQ%Bes0eQ`15z989IIdzEpTlU}3 zc(=aDn)qyE_#~k<(BFc8VYGb@baTLsLrkvp;h&erMMvkKgcewuz_{G9WKszPo96u- z+Xn#|X{XMA;8%u?+@St+Ss`aJ`mELsr*d=p-S1u_x56x)M$J(P~ zJ6P*+gZ`epaNfS>GxT!CQ%T}Z{8{I_8EoQld7tMuci5*t-|rE1?$xu@)Y-+cim@Y# z^9;Y|LN_}Xj4kRI+L^?LD#-VIeLFde=Nn%0j~CBX_dgXKqs*^3z)dx*5ci z>+7_=bAG(oVw z?0@`#v(yjw|5e?7<4D!gS{$pG{9j3AMeciON6Qay7WqOV|BEea(DL0Nz0y@$4(sOh zSh=Rlg)-JTHd5@9!{!~|HR_nSapsw^|A~P&7=caJ_T)#pcB!N`w$ueWlGN5J3Sibp z#xwdZ_yJ!M6S*Eb6>hf^Zu6^ zKLuim#2rK4@n~}AMOD6+f8VBap@+>0iz)YHrOzw}a^!B!|9U=B?q=)lcVs_3|Fs)T z%!-1YXR*xG?>Ah--}0CK=c;9+UN*72*qf5))=R^^zh{pZ?=~4(EOZmU&^rdE+i$_Qv`sFI5!&Hx8=q z%esJX61y(jK5%C2m0MT`pm8R~y0(Q(L)-lNpqy*;2mkolN{NR+LFN&y&tM#T_mlD7 zko{fOrah_6j~!dkFyhNmh;4?yOI&^xncGHe759` zjq+)9f6rL&>MZqJ!loS?Q!uQpL>bBN_U!=ZE5Bq+ z*man7hduk;m#@<~Gy0i*KR(Hu8^*`VpOLzqz2t}FppQd;xTjIuNe0=vR1+@v5aL|K zske7*vM*x%*n&;{>J<7_?{ob=Q$Oo_PJC==P7>Pa_e^_@x#Jf%mOSsoxN~{Upg5rx zgSba%BI^Ki*4D#4(q7_#Seb+0bJ_QUe-QoUc|m$Ezvm^rhCYABph9kOx9(x*^cnPS zQ%v2LZ=E#VG%>Wz7%1I$1igRiBbr9)zHa{4bK1Y-GZVLyd?ncSA{%8rgPx-=mr^|h z%-$gezX`p;H+5U%^y*bET?;A7*xemSY@(r68jZZ~`!`_46_UiA4 zcDKO9C(-izFnSU8Joh`~jM&onl`FI_rKOo1iFbGG`0swVCcefRgDs!YIcOZ+I<t z0pB$`wsM#((AYQm==OL9G}$jtTjI(F{D8inqxC0A_sjHK!#j7BWxvV07r%dR>@fh& zNn=_CG+QobjDXQYXgjSqd=UHuzE^hzS8rxG(Jhv_duKcWKus*+}dq-1kFUo`PnzYxjee-mf*zX zG10jXX@_4P6Y9nuF-)cdO(j;d-x>l)4Ell2F`x|VCxzrPUl%o2i-oA%sB#E_4UoQRVA%%{$ z)&)DD!k#Nyrvtx0y@SfCrEApZ_g<%MjmqOWksFZ1%&)+I+I(&BzIJ{jIYL|f;`hD# z$$CXRWlJ;h5sK?m=~vgNYwT0dHyFC-p`GZtpzqkV2Kkqr&^GmLT3*NRE&Ve7l$x$o zx|p~nT3!eZq^?Qur(M*ScuL3^i}n<8E3Vs!O^ETu3gJ7E_3*w`-@Wd;zli%fxvw$^ z5EBkt;2`@vcU&>wnY-W6Q0h-#OziEGO}_IXhMVo8K}v zniF-rO}}TvxfZ13wk;su>k4fnPJNQjS>(%pZ7_C6nzytxlOujY<=7tC`i32e{ju;Z zZDZv_e;7+#Z~JYeFP-PP=oq01U;(z!l4=!XGf}z11N&RkTJ{w9Au|5__ApWHV84XT z0J$T>bnKSLZJjV8Rc!mHddT4yW%+8;PpPVUwD9v%U|#-KPp>1&ewm*^Bt zPT7-l&#(T_Cwwo$%7>8{ea_ci8XPzvAOzcr^#t z;Aa;w5As1D`0Pq!+wRiMt8QEDo5#b}A*ILYLM zOA?DNi~6%)Hu;($MyxSQCz z2hAVGGj=UuvOM=a_8eblV(b(1oM!|*pX+?@jWKGU)6~*cqzf{?*76XyEsPW5&$F)&D)4?;$L?%hE~O79O2TsmyALwkZrN#L~Rxj>RUnrsdhrzGRB(cio3-aKFdZ@H=l&WA49L zO<`{7Hls&ooD+|$oUw~d0C|84a|RzIZC7zejt^(+%@O;} zJ$p-YZQ9>d;)tvnTMO2KBHIi--@&Z$vnO(!lZJj^?IqS0wA1v1k6%>KT;Mu=#qY>T znbgJ^`rSTjOkwTU>rB{t7#F5~dJN8b_7b!9;=6($R?@Y*662t^J(Ib)YRoIK=_Y;4 z7-PJU|ECf@aY_4tJq|x&yS*r#ZCm?6Mf`TRu4if8&=W7Mj%sp6zDLeST#5qkc1rJs zt_)dV-uIZutH>2koYw`!OfuuUkD*gWrV>F*v29|FK<1gWoX~tK^Ju2tyAqSP0(j(6MGcw((+Ky^Rw^6)+EgK+N~?`&~3ammj>DM zGcKL0uDx@KI;?Gd@>B-D-qIag)7F)C%$#34TL&6W?GCSj!p!rS44z$xRe_o#O zbnAkw@_^oh;Um?lW8bw+{6yOaJZthK+ZeFMrt>79Y4$mq7hL$}t?pxzo$ECeU7OV# zlCv*p-nrMQ2eyQH;9Zh6xM$pr&4`;n+wGgMb9helE^%Ym<_#^cy||@8_DGC(j$OsEJ8WIyoA-8AcaL6DX*>UQtP=9+VXNq82T=06I=Vp2JaP*l-(sJiWsEu2 zdvxvCDimy{&(l08v6D{m@bIL3MvfC?>s3c^)@@ah5wb_Y)+H)djhBYnSOUZkwDB_P z35ZwUZ!L-+WNDB+!o&H+c&}v}hkd%<=&@`aIby&0$n){?VAQhi^6q#D5Pyli6MBF0 zcp^u`CKj41v@#xsS>MGzggt?YWvTbtNo6Wt+KF6;XRxQq6=N0w+=&yvt2-ZQRA-*d zCE?N`dye1D-7zyuF&_Xvv*eX-STijpf@5w953R{u(yU!^wPg_ zJ|pYI=7e|DOX)gr+{C^hwy&j=-XrvA_1gT{e0;5KjNJH|w!Y`-{KR2;bo5`}kK3XK zzrIF&q2n6w-gC5Gx+!%%k*(xOzLL5j^23@S;Fk-s92)8OTVrFU`Oa0}zEYNbPBj7A zxap8D?`CNc$G`Snpmy%c2aP$dV;fy`V?zmz$FK6iXZ&p>@f$k#+WFnI7I`gt_?O>Z zmszZ&YW7*2cg>i$)7WPbABsFnQUrmx2(TA#8vSe{+af=DnBS%l**J8+AP6ysQUqy~{nn z@!q8dANCM`zk7-Bo8c4AxoFw%^uM? z$Mdq+gVy=U6llZ8quULAe{#s`Zr;+i!+T^s_^Y-_UE|3ym$&{&S|9vNZCk}Z~&>1DXjK^)pw&OPkc;X8@hkfnV_B~X6qm6q=OWp=)~N9G>B>v<^H zxd-vaT)*&!g`sV6+r>Gy{F}EP&O_5Osl%0?n9cCuM~_uLzEUQYmxt5@0erQHZ&41t z%ksB{{rdT8%i@VO!6VK~nN#fP;Jv&w#ePQrGGlH&bkx{Fof9Hcuyu}e#5eQOTN-L_ z>lvq`V%&4rqbrK~5PO5!3u}<-H*mq;+pkCBac)bON*B6K^KGQ4f7A(^}bsB-)QibH;4Oz z2DKsRI(+m)I{sX}mvK|JmGmKfD*N+#@7c=Lf8m?|sQA7dTXuYiy8pGmS0Q(}j@=W( z{uABQvX39hr61AcS^m0dOKY(0xqV=x(x&k>FE6~cHj(Vowjt<RV^htYhe5 zU*)!u&-1j6gcL!*4*_zsRDwrDF3JA7QRg)wHruYXi`34Rg^GBQ#Qh+C2RUHKoonN* zx_-0XI!)E_;fakIl~>!Zjg`JOY~+R#Ud5e*@MIr+QG1=xer=nN?%SSluS(R)8L#_*%s2 zM0b^!f?d%APdBTxJaf;bN6^jXI#yDx3wkN|L$_|_oFjigCv@mgK5SCc;EOGQ7X#$A zQUn1%1Xh3lM&i6QULMf>Y;uk2SpDS`a^`f*`QF5n^NW22-6YNx_vNKPGqCmZ#{6~X z;@_@csPMzAbr~?IIn;mNt#h1n;@V^5S+C{R2bY)7OxC}w^2FCGE>drQ1n|K@-ssZ3 za?Y20(BJ<>DX!w1#QuHm%hws-ceh^XhuEv{S>KrA$(8vDc8lj~f9@bUL!6I1=uOc1 z%g~mfas59+}(z~Cd_44G{sHZaMwU&~8qMh|9 zYp5sO>$$Gvxypjq#BN>kHWfxf*ZyPb;+qV-bWOkyzuxw>6Q^%ieYCH++dt6E-}H4UfWuZ`swoG z8xh-`oFq~T2yEy$7|NHSpGA*d>w@meD@(xE`?|Z91jcG7F5D$IH~88uAs@_BzKE!%vhLrxd>Z@tJ^R9cANK5Of9Dt1{z`3gD@70pLx5cL&^)V?jzc58 z_rR;R&l(fd1&|6LSEjKHb>A<{DHbUWnbft1$<@Dqj={f zpW*M?Hs&KA&2KZdE9`HQltYL8{h(M6<}}ntJW6DjUi}t1=N32aO#+47+e;DH-MZA! zJueR#_cL+VXFqqjj=7!>I*^BMJbLtmy5S!GSjFh3`|5l&=-cbHw09mVp*gGv#04RL zaNY~Ley>aueby&mwdcL+Qoo!afL|qkHgV~s_db5RVCc=c&s9-PxOeUj_FKfZapX50 z)vQkD?;?+*m+r8?#SXL{3U&_OeZU>sMnH-n5Ep^%D`u9Z6Cy?t@idMd%1`d^xNWc0 zeXG|6$0~+yqHC|`^5%%P61oW;T~Y^o+`&WFl+aA-o|l|>^*kSOwa zoIozG$>(}s$Aa1`*DHs>-i^&_`s2h^KRwl69X&k$=bF_Z$mr1pcs}fdk`7WOb?BCL6;;&5^ct$F^iM$hE zqoz@V)$s)Jh|{7$9wG8qQt#hS5gUB0G3H|HtnPCXa$r+euppUEeY z=i(>ReEQXvJXcxjmSY6)v79ydlCpf$k#UkAc<+YF#*I08V6U40>J5gz6Kk`5_L$tn zKC)eGVin(B8mkze#2fEhR@ZxUV)kC)$sf*oaQQzLspI;)ycYCT-Zc#WQ7M8zS_F>n z->nwC_s_Cqoba6J)z^+4u6e-9*`XXexUbtrADJw)lNj)M;yVkmii>4vme(BpeLig6 z(~gy<)m^1~UCnEL{ZoEpQ{waKm1!bZi1LX_i;?`U_aLxw##hFMGp&r%?$zhL(zl}a z@96C3X@1k%O(7pZC&ivUFJ)=dUSI!1_OczD>wAy>vW|=Al|NuRj^AY-3;zGsht%?$ z#09_yR*E1{E&{}{ob$q!WyM5-=0eAoemFqW&UNKh$@ljsjvZCaU%l9Er_Vc~p>4l? zQc*tFw=w}2Ki9UIUilw;^t&Hj5%7!pxJ+(GZ!QgNHieY<36Z)>`(l>y|OfD=$jw5)%W1gwSQ>v%Ay#|@NReIl!u<8V?25L z0hwk!+s)Sf0P3L)II?f2S~N`Shsun@S!uqLz52>;UMk{^;W_8LbdB2AQCqtbVzPPn z=)}X#LoSSRhAp;_-WV9Pb8bWauJe7IlG(Bz{Oia3*&Y$2-KCkFKk|J2 z!~^XKW2LvY;n=}0ofGmcLzl{xby|9BbnQBi#>_z%s@4f3)S=zwt^fFRdg=O|2pNf2runz)7iI~CJWCJ=Md0wB zZED3APZwyX){$HKSMG7DrftwW;wQCD8d;D>rr|~h+(+$PH9xd%mHKkT zmm3v%9N}@$nGj37CzOx0U!_Yo$vyOv=IioQ_Ut`Y5+j;A=OKSno^X=7R2~6rIv2fn zPeK2ZGUkU%*W7brD3Ql)y8d52@^RyDesq8Q{dMcaPfGYro{x+Z-^*$jVi4b?eJE{= zAY^L$a%u~n1RFoUO6XBuV%6KWkmJMMpTl>~n7h+{Ek{A1stD|EU8a@{zhB{h4y|)( zUsmTv{;8io_oZvKeBe!^Ln1~~kREC0>IFr*bhjSJI6LS6QdNw28Mc{L-we(Ctj^;S zTL6t;rKXdXCL!a@TYO)5U*hwfs^c6*d{8NZKrInK7P;n^cTKD~ctn>@WqN+n--wuW z$W`$@Z+QE5)inA!7A_hs*1i+FZFPu$vVe{@0Lg>{_+!yRicy`%jq^}gKF zB=kYpzvrb)o3pb-rb&ELDS|*A5J1mPZgl+5;pxhWIhQG|)q8XIdDLz9x+PVI?Ea^k zjJ*pyCpjc~LNR`oI$w~bnH=$3WbdAbLat%g=8O8_JD->O9D7&%g1-2+zGD)*xXoU$t4JRNuleJIt?n%~J-^%|(^=~hkP4ATV z6#OdTFYO*3`2%^@^H5l$ymp!oXgP@#L7<)xARk-D+#giKTelbJXC-w<9(ksv&Cu+2 zO~cD6TXjs1Z-3cb_i>BL!NC6Z$MIW=_UOcTPhn`BoZGY5$~+}jJW@T@H=ye6{FJd`VR zJ`T$Rb39kuY2v3PMG&ZW1b+YhgzDO~#@L@P`}kpFPh{vQd}xRbQ5sqbpSiDnWm%Bn zi)ZH|Hr?|VS68o8R^==3l1s-BsNXP&q&KLXFhY0+Op)gvf(=S+EX$-XeV@Y#j1T}KewJA zfPTfwHrW&BAqNKW>fkNy`o>Z0H0ybkN!=46poL_I_ik7CA#H9Lr`C-hp_YI8n8_Ig z9fh94Ll*w^K404v;fp!<z#E%uepIH@Xq&p8ezxn=r@K#y1G3j%VVUlwbzaaMK z6Qh^(+io7ddez&Pd#5hZX?io5(kvk9V`89Vg z$%W21O`Ed%&B(7ij6R6?%XugxMr|yzA;o6%`8U_(p=wfx9*O|A8TUQeR3zhvMx3d6 zEqJTz|G89+o3c$E)^xQu6#VaKyQP!v5jJ;pfZK$!A^P-u^uD zZ=CIsKclOv_x$s{y>S{jl41d(L-x z%#)Kf4)ydra?RWR;Rp@=?$^!r)C8$(ogm=nf98(8uygoMWS>2a?<97xmv3=#fahMc zJbt|7IvEOeUCpn5>NNUtx1a8LT>L2Ox>Ivn`FB2EUlixS9dmKcu{%MJ%AUPzf6s_d zfj%rqo(U$jd5D&0NXZWZtlM7SbL130t{a*WyU#%}Hr zad)kspkG_LCOU@v%>b_-0-we2HGln7?=>=ZBTkNhAQ}<(Il>&vqdbIZt{D0&c|L{RX2NCY});NC%ss_^iIC= zerGi%>iIe3EOPq^8T+K1*xuJOu2T161nz&TxoDiZV=k+6bVPsEIl1Z~rW*VTbUv!> zd5MQs+?&1o6ZtaTd>8cLQ#tYR?A<-nvs(Y_BrVg_ww6&eB8%^d7xcngYt^B{`SrtW zY26=7UV+>}O1==luhnaFbiQ7zr3eC9B7omZl>9CWdTF15Ea0M>8q{*_C!EJZ407+h zvvqfm=w+qk3jzFIkzu<1L|?96yFXtQmD(1lgS8sa_yZ56<^UE*S{h&3=6XUp)NklCwsi;#)fKFL*Ca55Lmr#e~JH@9dqsx9xJI&`OaNO)ibZR7(UKx zL+3sl-3sz2>Qc=z;>(S(_+eXDWDm=l@~Qi;CT@9r*QoC|DPjWHzT(LKd~Mr-JXTlg zROblX{n&~UyI^UR@l{)9XgH>3W?H zt*TXjjh0<{?ZpZ)J7j-ewNB_oFKSxd70br`y1UZHKOpbx*FSGIbTiDx3A*~k%c~VJ zEh|;f*<<(Y(!)6C@R{Ucl#)LL7+-#V8W(H3U@3w?B@npnq2-ahCNj;gGV@4p-F`%o zm%!$K^`lkTags{|op#oRXI_2#;u6~wzj}DDF(>h}l#)*b9@25O{Q7LI)^$n|1hPf| zUK86%@0fExLojs! zS+zx;Q;NXPdTe^vVswz$Z%PpaDuDntmQg;H=pxDWn?>2P_n3P8rPYCQPV`2^N6aG5 z2W!FweHX^INA;tb=&G`6dlvY~Gl~(|y!Ei}Sim75MM)N?pYS%#10tL9Qba={j2Y_CgSrBYdz8vnveC<4Y=)zd;ZL8Em<~M zo>c(^{PJC~7Gp0gMG&YI0_0f<%fko_f;X&0nJ|63p>f!Wcxf57K@U9L9Lu)8WAh<( zmDcq{$r`-x2>OhliR90&M2~0tOmYNxZI0;E%Whee?Th4Tf`EenvEuy3ol8%MB~z(_ zZu+iA8hv?AXdr$=VLnN-PR4eN8#lylSI{|jMvXa*WmlU4xFJf-J?`=Zs~E<(I3j>XDU!R)x_`Y=jORJYJQyGv5C( zV0jS_3Ef2B?k)I}d+nROb13fTJ05QIK3+cO7yO}YB@uIn3%Wd zy|JGj8=Au&`K=LcRjoC#;>l@gb>h(UZ+_lfQU~N$Ve~!@&4kBXxu&b++4XvXSX0=# z(x+f^;f)IwJo%kk=Y}m6wr2Esy%*Z&*T2{wXKg1}?^sFwvqu0uc9 z2I~bQsb}R8IDY(hb<=&pvdv3xX$ZA7uY3)I-$34>xUx;wg`Xx?C-!l0jkEdY;pbLH z#`v?eBfUMG&YK0<-mA zH;89L#}Jg$w_5cJdJi-N8D)@Mk2Vc{eNEl)Q9AiCyuBo$#TxHnZv4e@u1i zIFS3xjE8T>0c~>InbkQuB5=fZDX)dTW)1giGuQp>)AHIDsaO3Ya7@cKuh)AtzuZ2= z39g2JP+AoC>NpPA@3BwEUj$hL^{uAe9<;fsrOVhd-S$wU;oHzz!2dwMIcNPLS3Gg1 zh-**ml%!?cl<>F#e)J^nHRvY(h?U4elC+&c_Y)&Ks6E%-S-ChfLG_XAy&C~?MKGuR z#w7DT&vS{mNZ5AIn7dOE3#S?dI*HBJK&_VnALzB0-}S?iYupb#edPI73ZK@v<8_Fa$i;mm^?yS_v4*w&;sVS6lLUoAC2B< zV&FsjyjUgq3~$H268#4BFi!dMyG@C0t&-G7?dG0eCv6L~;iuliK9yX) zaj}&9vO{2!_GR?5e`FocB9~8gHLdQG@HZjWC;Z`=0k(okXp?&{&%~AnUO%c3!_F^e zh5Nj6&ymM`{%uE8RjU4dd*>m;qX)H5d?~BmCGx_P2n6|dlb@xx#hoN($#X;37+M)L zSF^Z|yc1futZ855I2`?h<~0NKAz9RgXRt;#YZ-0cN|0?Fb>=(#q@)M}wLsvp7gv?c zOZcHTs~p3l7Hzlh#Aok<>lX(4pkzg#+~+{6T3YwpD)=5*w<=+GenMWo2K>$1w(Rnh=c&!M zF68WdR`ZsX=Hm|tb+#6--Q+OSY+wLWAsb< zy)OSs`!2g>QO(Al+kRvc#GentTzn~A#PWZR4&19d3G3e^-?1m|`_H8{%bmDH(@2+Y z!UyF+UzK!JP-kOLRUvwbo{u%@;T^3 zm@XI@3A&vfyRwVvwpQ=$FTSavNJmY-kNSR7Qm8Y(KP(2Zol9UZ`9(8_zG4r&>yZ_) zbdt7zlOB;dF@9^M&vbPUMz5-4V$@S%?@G?gC|yF*e&K%PFvwDf+Zo6I89hBVhhcjX zzWX@>i%x#{NQ+$cHCukgl@j} zerrwaewH`y>(()2A5|~K+7iXFvq{=d^asA$Y4UD={_UnB{@wd-_QkdE0Vf9&K8bdp z4sK7q(o*y8CJvVuBkyPGEhYa5-1lU#pMtkfv-pfGj(3LH@>L2o_>G62U1@UdT3Zz6 z^}AX|_&4o8^WZbhp?k_o)hp<^#2~>I)=xKFPG1ny9$htYj>;*lLx1hNz;}-VUp2R( zyyvH_8*6~e*C8Lm_uH=^yNSbJ`~5b_wI^c45@iiTuO%hl2wbmajpfY0G`~g1fZcK} za}-#;6mfSLtF!}|Qa`;1&O^RO@~AV{)8HHQ8+b4Fs@Or=_Ln<4iK}_Lj=||ySL6w` zD&zvSbzL9UCzd-LR{o00IO|@bHyA4M#LY&$-bIY&ZLD%3dk%v?|e#MX4Zq%(i z>rXBH0-=BC(!qtgxUvZB5G)^RaYGk|T}A7L`1bW~|An3ZrfDYqVBZyVWG=e2J?xqC zUF{ISh9zp>5Y)$6TxXnoF{XO)51B6}o`<7fb=z^4wnu#Kjc`A}ta}UH1vxLWUcaDW z*i=_bAA=tdJe}29RU1cdzYtHxV%mRDbJ5pNYu%7{+*|ntd;2U4`9a+E#2s($IdpZk z_EDFTZv@aa#90H~zU7?Xz>^KsdKF@MpjTioo zb}~-nrEzE`_56NZeqxN&y6^J*{;O{D&tdO3N7=)mFC`zTx3H(>`qkPtIw>7SpNrn0 zlKW!v@bDhLc6qN+|4P~!LtBW?5N9rV>lXGIT7~awhmK1nMH$~r)^^q;H!dJ@SY+x! zSkf;eMs3UlLSlbeemCfST!+v7Sj)4e?8#+I?kKasO!>vV*X>VcY0;llIUS9MJ%tgOnX6&rox*-c92TB<3^gp&vM6Q(sSfnjO8@8Iy-kC zRqubc!N|_y@bXFP#{IMp8Dds;m*rrd*WU)MCGen8{eqmHydh~~ydXo3dcND|9C)EYP5NguWGB3+;G7$G3$x z5)%mBEIdWr*l9t}k9!?@`OVLrUI^rKLIm);ipvXvIcsqoe+=S7C5_#8&*Li+)?RL} zB?9E*a>owmvle7;uflt<3ysTjvNyutGRij?|6z1UjO(~`r(W-)jn%S;s^yrh#=F_a zB(WV~%&>p>XjFTV{gPW(^iA$uiaX8*zgAt_V7Jb4o(=)x1Y=KxPIrLE4mjNtgMSq! zL-md^ct+?1{wCf6Eq&tU)xCmNf(vtz^+8H@2oQ55?iy~#CigQYnJ3tuU~Buum`x@= zXc~HntJ?FDYnwc42OQuX7YcYSV)IJQ%jd(-K|z3 z&NjAAaqW>zz6DLwp&@ChLTOaqN_7V#Vxl%30 zteqq9b)$4V;%{^g)tc5ruN}3@qtuheRGPN<#RRqEqY_8P*)JLRo26;1{HA9h@byod ztF8yPvA||8JY`=s^uxBQ(@kWT#6dx>ETuLGuy*6~SgpMV>vY$Ck-gNWw|mZ8iDgzT zJ`ep9d4bSJxdq!j;@wqi?$F+T{g>q;U!sdcZ#>7}2fA75G04~>pQjW-APWT6wC*=N zS6rQXntc;`CvtA%8}3(_JIGlpId{&`HURJ%_(6)_xL+^S<{E1zdG;#V_vD1nGT(b` zkdn9N2?6XxueqZ#I(6m({*OU199$f*o#TG?@M&ms&~MPw-t%}?kl&XaQ*mPk2hk_@I&&at&UIoN5mTA5?mjEcIqxSvu$!wUYuw~{ z*&%@3rmxP`n#RY+Z+tL@h2@D#3<#|#Bfl4EQP8}Z2Z|#n{hVAErTCPv- z$#M&FPI3y~tn;5ShoHql?}tC8&ez?wM2#7{rJ^}J%59hYJ{ke!MJ7kO?$;!H4(=r$ zmh8u)F_t^BMF5>TbSiGVH|`}S_ssdH?1-|g(T0wLIwpOGA~yjs8^~?RzMB|v&%D;6 ze$cT+*6V$}l%9nEd0s~Uu*t+lB2Fs%7q7hA+OR<{iNTR1{$|fYOIlNF1fW6pKho}X}ir)Tsz45EqEHN!=*){TRK|l}?1Ox#=KoAfF1OY)n5D)|e z0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n z5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF z1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#= oKoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfFdK3cxA7m;16#xJL literal 0 HcmV?d00001 -- 2.39.5