From 8aad3929f87e6e9daa66df3fb874878d0844d56c Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Thu, 10 May 2018 23:07:38 +0200 Subject: [PATCH] Add a remote chunking sample This commit adds a self contained remote chunking sample that uses an embedded JMS broker (for simplicity). Even though the broker is embedded, communication between the master and workers is still done through JMS queues and Spring Integration channels and messages are sent over the wire through a TCP port. This commit also fixes a few typos in the documentation section about remote chunking. Resolves BATCH-2721 --- build.gradle | 5 +- .../asciidoc/images/remote-chunking-sbi.png | Bin 36320 -> 98275 bytes .../asciidoc/spring-batch-integration.adoc | 140 +++++++++--------- spring-batch-samples/README.md | 18 +++ .../remotechunking/MasterConfiguration.java | 139 +++++++++++++++++ .../remotechunking/WorkerConfiguration.java | 126 ++++++++++++++++ .../main/resources/remote-chunking.properties | 1 + .../RemoteChunkingJobFunctionalTests.java | 88 +++++++++++ 8 files changed, 445 insertions(+), 72 deletions(-) create mode 100644 spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/MasterConfiguration.java create mode 100644 spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/WorkerConfiguration.java create mode 100644 spring-batch-samples/src/main/resources/remote-chunking.properties create mode 100644 spring-batch-samples/src/test/java/org/springframework/batch/sample/RemoteChunkingJobFunctionalTests.java diff --git a/build.gradle b/build.gradle index b0e139713c..84fc6a9f37 100644 --- a/build.gradle +++ b/build.gradle @@ -553,7 +553,7 @@ project('spring-batch-samples') { dependencies { - compile project(":spring-batch-core") + compile project(":spring-batch-integration") compile "org.aspectj:aspectjrt:$aspectjVersion" compile "org.aspectj:aspectjweaver:$aspectjVersion" compile "org.quartz-scheduler:quartz:$quartzVersion" @@ -583,6 +583,8 @@ project('spring-batch-samples') { compile "org.springframework:spring-tx:$springVersion" compile "org.springframework.data:spring-data-jpa:$springDataJpaVersion" compile "javax.mail:javax.mail-api:$javaMailVersion" + compile "org.apache.activemq:activemq-client:$activemqVersion" + compile "org.apache.activemq:activemq-broker:$activemqVersion" testCompile "org.xmlunit:xmlunit-core:$xmlunitVersion" testCompile "org.xmlunit:xmlunit-matchers:$xmlunitVersion" @@ -596,6 +598,7 @@ project('spring-batch-samples') { testCompile "org.codehaus.groovy:groovy-ant:$groovyVersion" testCompile "org.springframework:spring-test:$springVersion" testCompile "org.mockito:mockito-core:$mockitoVersion" + testCompile "org.apache.activemq:activemq-kahadb-store:$activemqVersion" testRuntime "com.sun.mail:javax.mail:$javaMailVersion" diff --git a/spring-batch-docs/asciidoc/images/remote-chunking-sbi.png b/spring-batch-docs/asciidoc/images/remote-chunking-sbi.png index 0f2737bcf51f626ac390eefb1e5100b2b74b5ede..b1510778e5579598d2d97c9ade130c30ed6ae43d 100644 GIT binary patch literal 98275 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 z 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�Rvr$ z{cgJ%-7mF$3?l_X=?ece{?Fd(wd1KkFzoqKx{1 zn@c(dR5$`hx1j@w0uhR#ey=DRx|-hs#4^#*ln^^E#AMMy(>`vc?TbDpcyARKQb&fA zsJB`Wx%s-uNF~wz9J#HsH4lLTk=XV9UQsmtU?*UP5)t+rV#kG;EW(Imt7|D>DG+rO zh(t{x>N?3b*iC_mQ54;kw)d6-mI8f80jsq49j$FimI9Un1DgVoIG$QXabWYLZJnh+ zk11dcAU!6b&A?KijRKLVDYVtz-t~|IkvN|AdqvS=s)t;8x|0(Xwi8cxFL=ujr7KJt z^Xtvb-t>P8xI4{#-{qQzl&H(O5B!Kh=och-;L{_@TNt7J-tQH~NYuWg916b8CopU$ z`qJbyKJ}z4dXn}uHaWVBc6XZlzROezDN&bmANUbH^z&B`ELjJB*9U2#KPv=@)~|y5 zy`tE!sAVf-DG-Geure(QJKfvlNEB<{%G(=Df&N7S45pDdp7#3#x6Lrs%Fo`A!uaL4 zmhII)DZu{XC#QYZn@uNnr^=zE=}!Jp7?&jN^xWD2bZOTWEyN%qS{MePR{sgoF_YCX z9cX?-sbWvkhEm>uNfU%{L4v#5Y~s(spp}PRrP=9-$Itb7br)6u{T_)2Zufgd(a56M z_!fMZ72khMfELo?{{G$R=zd#fPzq2JLI1?YdV0=uV0Q;blP+jM_Czje58eYj@J@e(-HtB3vWn|a?o^>0P-|F`$$;c*<-oevls#6^I_4T1zONhC$_ z5~*9V4oj9~$&@2YwsY8VcD+vakL)JS_a#}!IeaL`YUAve-6USyaco&qoWzp7wqi-P zrIl@22X*nj#2W-j5FifXKKJ)~JvAsadO*xf1DFA-KVZ7Lj#saLRj=NwSJmABRXrfE z%6nS#rT0Xkk={;2> z*#!|y2>b#VaI2=T`IGE;f0%jwecjGuXxVXg*iN@;1?6En<9SS_PA_M$tedo;b24?1 zP7u#_oE&9X~FNG~QPvTZTI^RxXAdYJQJwip@_-GkT=Ap$I4p_7{#6NXK(o zlD9G(O^(X%xg zBtXy*2=4A4U|@g{+}#o!1_=ZR?gX9S?(P~~0t_B(aCc{L9o!$kd%ySH_iq2!tE+0A zQ>*)&uI{~STel#Gk^pRl4XKXBhT}3?Y!&Af{c1x~(G^Lml;*R?{ykjG&zIm z?DD!STDww+MML;OilSK~U3_?Bg2J}&6hSBc^Xr9zb6ae&A9$3fM-!@mAUhJE5L;{r zu=GoPbD%rD!J{*^@#46QSSgBsa*7!X)Rm7TW~Z1?{#i(cvUa4u2&ss(MtLgx@#Fmk zk?3(<^zOT4ek_f-Lg>SgBGo}S*WJj1a^u!!@bM$&!v*)K@s7}{ zgN2v*uBF_|>f1Q2bR59tqFsg3Bj41G&@q-2k^zDKU%eC{$mGp1;v9ZT4Xt4c;HbXl z!T{n*n?J0ekA9}Gc#p83?&W5+!Tv>V^f3k(jZs2b<8z&Y$I%2ym0P1Kgz2&uY8eg zNrLk#DbH`oId|**%$KgLnwA|R7X7lgjUyy;;b^<<{tjU773@gYEzR^%h$fyo=RW4x zX1}MVsF8FCdkO#89q&5(_)**>eyt$Y=0B8n|tanppnSQqO`5`v0@7;%Gp7+<#kLp`5mD= zZWZ)vo@r^3+&c8LZHA)4$qqn6y0j22kR((sbMMk5%vf3C=M`u}X33glZ;WoRUI0JR z5ovi`k&BSooci6OBBF@>f$7qj9&LG~BIzh8=H#XH0$nM|Sr(b}(%kngzBbt15WymY z*6I1h6vAH09ob~W1rb$V8Hs+1PDvD~8m)#j`{ORTgDZaup9eBTcG z0&PYvtw(M%g68Bm)WXJ&^_4^On>QsHgCvRgK9r4vlu-~2eB_FZNfHNN6$K-?oGR!7 z-k{VK^wkxh(|6B54k^fLTrn{$q+Q?~>9ucF{{yGPuf|7thXfL1XM`n$Y17#yix!Z& z(%ki5J(9dL4bh)yyTqV_=B6gq=-^!ZghW+fjdfn>t9X^r@x}T zqb1X5a+c7yn|Ik>MXf8A7%lrHbL=82sAc;yylkoA6QOS>PYrnkXi3FFjt?XLBJ`WH zpqYC*S-vXP?h|;hWU}QCqTkupZ0p!dux3fPi~S%WiQvy zfk%fo_3qgmPVg^$Cp#!NhbP{AY`#Eo&b1EFn{0ejatuAZXj0+IDW0>!2}oY#jf|;z zzKJDf%>v$^pGK)I&Dw3qP037V)m!-0>CEMn#o`&djdWbGO!gE#L&%<;nN3Kh@=QbE zS0q~aF_x{MKk7|$SmB5xRis`z$lRj+-q{u-QKB__EQ#z()?dJ4~NFHx>J5)wqgyA&ZQvVEX?R@5oH4GNt5Adcj%O0YFM8o z?Cs&$XFx{939&M5#MC>O;<9odQP>oMv%N++rpry(xbDB)kmMhNAq$AAOi#N@p!IGk zCPIb%^}&q!dX z31{queu^5sV+V)5DcWUb+b`c$ym$;P-6*HtS`mcKUJoa0{K`p0gZ7le9HBgv)KK!v5ZcA_EZgm zC9+FgY-}}4lk@x=bJlAEwe>G6vTgk@HSYFb_#G%5m(T$b2R0x^`S2~7)BOwMM9DL7 z=!zhtsxD+qLnsNvqw@YUBMCXNIOTBM{ZdtI9L$AhQmjN^4UFJN6k?Whv#!oVk}&$$ z3V2x3Y!aVf577_tyoZcNDU0w3(p|Y3aDLROir>h3PH~99#FjrE(HYuoC^vm%j(@LD z(gaJNl|A-qgzk<1UR8N%<|jTmrmWglj7K@Qm|XT)r80KuU+A#p;uQ)IC+AW18k$je zl?sFgv!D-9Km1iLdCV{@<3ueyjP!b!&{Ou~u+VWSF$*GffxKG%<_*`ToTRwsM`~CM zT$1=|$nwgCw7~J=>%iPE0b*JeA~B{a(4n^clUJ1%aY39qpnxpC@&#>kB%86|@T{zs zNv|trK10mhc8hDo!Mvl8qO|R29b1cI;@sGT-vhwEN0Ld?XMg~lD??nqT&rD1^^Nu^ zhBb0*@-{8K3GGD&1=v<`m%GHm+%z7apk)Sej9AxI^YjRuUh`-(4?LaNz|BO%c8ydL zZ9~uNsQdN8rU^Jn(r7~?8d0ZD?SoOj&j3YWV(xoffKTFEZ209*TP^8osf@I3JCx+B zbU7plC%T+V-`&3`heE@So8%W36M3e?-+kQn2SbVP%NRA(Qm61AbsY!Z8Rw9FQD&C# zVH_K(J!~8ZId&Uj`iLDd6Ps%iGZ1$udR=Y%kcbMZ$3aIo3+|I}74X~hEnREGb#&7P zMPAB<^BDMzFf_wgg+T?VP;5}rnpa&yrQw0nNuGq1BKD6}%+rW1qPTaCR;0oqer{PL zh-Tl-zTa8W5N6u%c{yiby4?(FQMzYWK(0LZg*~x-^vsFx9p6SYiyuhrQC!^swE;%cZ(r~%quL`1xl#hXFIC~$A(Sh(gvwb- zlW8o>wj~pPyJo}H+g#dM%HPuW);cI5S-47kC(^e4`vs0pAiESQeWgEMvK^;)Q&U%K ztkpo~u>o4R2&7aC(#_QO9l}y?sn>2X6fJuYW*V0;XrnmQR~Mc_TzubBlB;k^Yv~fm z_0>x`;{y3ZHxD`Lyps$GRi~?LdE;-MtwEE@h>X+Z_8pAcowg?VUKnfPp`}bd3O)p7 zuS$P&24*rq4fFTOKuyeum4JRf9ke)J!iPWaxF&Y3_E`{zvgBX)@v7ICD9X=ObjHD@ z62qkqwdFYa0y38MOXpj(n_S29)m-%g@sl_bX3ZF94!_*(T*qc@S<+Xz#=b&$z(?Nq z#IgEp5)w%qfn-UarWJ0oG}H>wSE((b!k7wC)ZDAo_65a`Xk(F3>H|&UV0C4f>>p>A zPp!57Xa!z@#@&(z123_a2$xd?%}2AOg|1sddp%8gA$rK3an^=nvmXWZz4{2Z-)A`= z4-wXo2Ri;{*Sb6?B{Q|rqTH$m4g&$O-bwh$Pv#&p4*lTJj}gKLO;DRT1!QS!4l)5y zjLHEU^xML{mU_KIZoNQeV%LR1)^iZVgmckumsN~6Djjz!Ne&9OCP@^pJx&L&N1Es_5Gqp-3AJli!-OOQ)WS!hu@%D>$5KthMs?-qO{{(4 z=t2wU6WIyG(gjC)I7W<5nFeKh1k*`FVP19<58v$(PsRK+YS)vBjg$GN z#Z9neu_GoHv20+M-@FPA>44>bIk#q24zV{{aA1O(+r(@zH@ zlSp^ORvkhgwA{kjD_`6A=c5 z(>66wOL3b-+Uk6v{MO^M8;A(S;0`nddsMJja2=s3HFRs{qZFycD>}HcDcF}0rc>u( zft6QxzX1qegu4}NUMsbbX+sL6%jS%7p`|!bCB^`*uZPuIL5{M-KRQl@_C>u6Z}@kT zljVE7?2%6kCqo5c+pZW&~g66#IXZ5c~ms*5-j$;)wHt}cgtX~Dwq(dVZE z1k`=R(qqEUDUJhvl?gxhlkp0qTpDUGJC+%r3|1y_0K@FeaUXG(Ip`B%lQWA9#YVmw zk>#=*h%0?kw2?vuzDo=97&YWwpO2q-=9ifhZM4Ntv7rlY*MoVabFy|nbIoVW71+0* zFr9TcFLPO36sx~it}*q76An7`)$3}DxEB|>G}Oz}x&R`2Y%2yn z&T5w#7O>5|Og?Ns`n$op+iBx8G}kYwB^k^xrCL=OIS-=jkuEnq_eaah-I?wO*T~-Z zaCbMT3jQcgDAblM(TOOCVAmb3oRK;{F( z(!=DGoH_XDn3FFcL&R(NdiUPY7*^l1h@ zY5DvWOA_4$hVCw5a!LN!Wa)yl)oAn(K0+ySZkVo;KUZQb9=WcIE_ZZTP$e(MoIEJx+VS6tw z=~W4B(SDRm;z@&_I-X5Jw|B&g(m)G4jN%? zK+Cs7#vfTp3l6`e*ZX)CFT;nkp)>>f91J=O0D$9BbM_$g!9Kp_Q}R%_-=$cA=P^hf ztxAS|&$SD$Za1^o1#{v096X~ixex(59U(O*PFh~QU2H1cx{|29&h^s5ZZ;onSyJW? zV00HUCW@X!N-NNzg=nKkt5>Y-YEgw{W6}0pU)gSKknYU1qO|`tszHIP|E)&;_Jg*i zZL@P~OhH_!S^p-zgW)bXcoJc3bu#i01iErJLt#S&#eXEOz9T^A zy3T~%hH#I!RtOgh3E&1D8}c5o(+=v)Q!+f|^}URRrB!wSNQ%XayD8`_icb z*t<3i+SEGyr?eb24QzRrX4-zR~;UiVO(RmHZ=^@bvyw)Ht@3J z318r+=F}GI$@U!*p1#id@bGZwzJ^neFZ}%36?m7B zprs?n&Ohkpdz0gwgUyn+QDn&6>fOxY)<7Z3@JIDKMmftyFH=l6>{H4};y|!Qap8*t z-T`w^&YvU+F&`=4%U2;~oNKr09w$FDzpb|m4=a|1ABPrE4Ii72?#uh>I~-$epU+SW z@cNE%UZyNzy=#wokh8rt1wDhvigrp!hqL01kapEq>SEX9SihGxPN?d;wf}Y<6|Gu|xF?6GwMX|k%;0uEG=T&*w@(I#pl$;?#goqu^ zAT!4=h>q;xYXhYO>A~LijjxJK(H(bDz#Fh1H6c#MCLGPlgwZL-CF0(>?KU3Hl+40uHdIi<2 zAy1R>#~?}QKY=4{k~NEy?+0lAtV0DSG>S=ml@letRs$AlcfYO0&rT^hn(o?pT)fhe zK`_yUM;n~7jqCg|Q5H_`M<@8Bt;PXi6s+?UHt~4t~zbp=|6NDOul@r3(&*rsXxBdyXz_z;~Y6N-$~@e zRH7_0ableI-$~6S>aUdHTR8^)Wn1#ARJ*~RRB&5gGa64-9s%3MG-e;iTMWA%Y@~j3 zpiQ0bE6k#Re~FZ^b@i97x$NHyMqJ)Je#TLBxfyvo)K1aDz-VQ3|eZnVH#G z69a4x%yA(^&c$vtDx{muGG*p2Z3!mKktnu@8~Gn%KL9U3#_r%Tf==^Q0>n-?h)$Z+ zqmk}*4B6Yjw#0(VEHmF`OLagmH`&RL^e}aoHGXS9j}CY{zQQ(ct_-pl12^mPLqjp7 zjl|m>)o@}Q2mVn=O@@mYc^+F%sHEbcsPvOuQa-aldY~M1qw|@-XECL3F_+M{2&ie_ zp?yP@wc1LV73!k?3v4J|of)v&sj>D_if`97H8o#1@BfFuk}6$EF(zhLf0KJqnwQjQ?ownXRau`z7^0$3B)i_dQ1x+#SFrUh z2@%Z9?wQ-7Jy_d_dd6R7cJhabJj{I4ZSjeRB42IQ^k*mLl~aKS+;GdkEA5>|irqG| zK~B;4``UXc1dY&Z_%dk2w}A|@8J8dblq61mRM4UjiV`q==;fAAU<9)!%lfM2R=zjp z<? zWC^(Ui~03ueiVRkY0><&siUf@CVX2QTVfI{IoVl;X|b--$0nk}+Gr(JSDJ{j_`Cj< z*N83>a(GTReA{UU(uaCu>T%!w|%%(d#PnZhx0&l@8wx|{2r1t zr@0U3PF{8_3lpiLq%7HZgHIkL`z`xg)67jWtQt8B^|U_(b*)N10&0b<;*r#8wy-q8 z?C}jc6F#-FT3NlLljOl$>>l`)WnE&o6s{N?!b*ycXbYbH5i=c`@=m}^S}mgvu)l#D z$y%aYK=GH=u2oLEOG37{w_P7uiuVoiVEMO#CDD6oFd#+@`UM*T?~w?c3~!V3C}-7F zzO|En)iGhHa!9SG0J1nPjnwXieN=DvY}U8!E&p5%XunvIChnY?1q~e(pp~N{wPlg* z80wW?=>zBT9$sZpIsX;iD{EP7ZO2sPN3oT3A-Z!lXAFb4wO5?~a0Fxdt#h#bNK_Ex zf84D!s_O#Alkk`1A|y(*AKMN~E)AQ88D>z>BwUT;Fb ziFKms(MEoa>jL}SP%XPoX$`;gsaN4&)0&f!;&bWL;~v94SxszOUHKx3z=sbP)i^1{ zwKZ))@ze(e11#=1(HRNi1K(zLT*{i5`VIQiF1u1Vi0nQl|M}JA;6G_C;;admPYM`i z(jGcHQ6JACyT<-xy)r>bPRk@phH<7_im#=!PTc_9AgYD8{1L(>>%*IrO8JLnin#$r zIITndHh@xNS!4VzLx}H#MuPa}Kp@vc&g`w?{eQlzljUrwiWhHw7I9q_bHS$#Re24TW?AUpvk_2(F+5*`Y<;;&HR#)#E zyW>6p{2q~6=dhuSEw9X&FVH8&HeJ(Ey$G1`w8FLY0~jKd(7K0nV4BzD-H)O2+SCbvV>HeP5fwo}9A( zsZ1cS%^BnPNBaJZg~bkMgCC0|3G+hkP?q@`RYUtW8tc?sCw;as!V5^c8W~XIu^Vy^ zw56u*&{PiO!XLy?k~biyGJvZ@n|>WMb=E(#Q{#3PlcO@;>USW)Zi42$b~5NQ-B{4+Ugr{_Mns*iyj3O)>Sx&z@rj zG1y1FRb6;czF8*wKz2fUOEp}I@7B|Q^!Zd!6rlx2>&rSW0KQ#UdwBDVXc*F4i+}34$rJ19S;g!mrsWo7=O)NTc99YSS zS@IiF&ZwrD8zr0UY@Gd8B%g4MZ|G$0g~r{F0wP93@9to+-;fTferM#*&1W`Dvbm9k zXV(yf5j0elPk`#L+nSkM}inZJEFUsGJK|lAmMIR@peh%ph`bKE4Z%pM&Tsy z!%DUbMQxLnT&5RxSQ3|NcUo=H!SP216;-$yHlD%O9b5;z(Q+^bHw(YrfgQsEVI9mNa}6JUf7j6Rj1Um3uPU_mqGj>###UDlRl}!?bDg z-X4H{O#neYGQOnK^f~hdG?_)$o0{EYWj|^yJPPyyP?MqF?%e%`GB(c-;(4FmTm*x=TG;EO+0kc<~PSF>$xpStuQFN|i z*)I3`_SM-RCoVfOaSTIm?F6pSC$~C9fm{`J0)3VyTQ%)*Z(u{`^`Ksfrh(=;xBa5~ z^p}gOp+1=x-Llm>H9Pksh1!iLx3YDdws2xn_syZ!$eQv;l^&c42@D+DL^&w6i8smO1TVTU;$U4I^r{T#Xrw;86l(&Mr{uSyJ7D? z$Xt{YzP6HZJCME))~)?6P0>D{#fnrB$YYs+p513op5PHh{^*Dyf){>ftaR0HpS+{v zT3YP5Btx0-!|&l^Da5x;|KVzED9NaW(iE$Z)g24_l$;N1t!uqi7yRbEsz)jVou*q2 zXLo!^yE1Vuw|3Z5*C)z0BcW^Zm-$_3Td(1)p05whf*Xe#J6>8e z{cnD}oR!%6+#(nho%q2jM5!beqPU4kPX`KxdHOn_qDgT7t_*VRugM#CWQ#Lst!(|+I7r&%D_eIewE=a<{( zpJtDT?pUKqDnPcw(`E@vbq`&Z`G>6+M${~C>9CWpxmCo(ownQo#A%FV%=x6rZ{I$>UxV(PcyE`1K$-ivB7zY)lad)vgBXa~WI!zn8zE6aS(FrKQy zih)D{E*i%^`8FPzyGIu7b7%z9oMQG^-+HV5HA)~GM>^TINSD+SGZyH5o@1$t?RyMy zhKw^dW8r#_qOyUhc<-6Tob_F?Ps-QRVT6?xI$M>5M!#Q|%baEj`B}F3FMm5Zv#jE> z;&`=DPKz#s3*BeH99mMR8f}RcV0lbbYD)v}SE=#z8Du`p(&@|I zxgwy28^qxFUqt>dr#@8gT0kAmsczX8@r*p4lR}1;>^pWR761is{|At zqN%|%Dacaf`>w0z-7J&|wC-=I$mVA!Xz61lt}nO&w#l0_3I!#N@-52Q@s+fX6+^2w4Hu!zR9{_b}RA=?mEyfGP&FsKZ|)> za^v#%^N9xDlG3XitZ@d09`uxuIkp~e*f$N_F`mT?fcD%>_IviqNFt?a!M#`wWoDkE zn?r`<>`#`91rDG;3Da}y!EpDn(_D?XXjH8du%O7IZq`S1YM4(g~LR>1EX+shJYnGbMBJiupfHSh8PZ zSvvLW*yPr5+{;a4p(6fjn23gt|1H`?lzrj+L{3Xk^Znzqlek183v0V!pkZJD%Bbu3 zq$+yW2NE$j31=u)=uVv{iZFzQp|6HeSBC#>ubaD9c7>;|WTe`)5FA%6c=qRBP# z-viH?Z=+TRK5vxU>^m6IiV3WI#6Sqyg1|pzSQ6yF+CG|}vLeBM2SWBGZG7X?{PLyP zc}pV|aHe}^kk1V$z$`Bn?7KluHNhr{^aTXDseX)M55dQI`Z7Tzg7tO~6H9-9CXsai z>>YHJc7AR6T+(Cg!o8ny*i$((u<5PYZ%;)CcMt`^@T||rLSO4h0_G1G(duCl!(hmdn6VHn)Eaziv7(hDGs{3Rard`7=H&byZcIYhUd`)jn>K*&E+FkoI=g{ z2cRx!KL`Az5e;N}hlm&U59nVsww2M3s^D-9e9OZ0J?NZ%mIMdK9}obeJ?P@%iv_6i zVhJ^t5K$zvolL~PMxGN!8Dl6mwq0i!3s zy=4Gd7jgI4YOYg11L!QZ+<)NRgd_kn24_pI{{AM&Q&mEhtOjisjBqu6yG<&lC?dF< zXo49ESFWOaj6d&x@8_|NeVBrg7tbAH>P&=Pehd^U(jYD?ku)mam?}DGHa0Z!uFyz> z10SsW!l$Ba2qQv@zpiF;Vy+_1r#6&WTc7E*rq`FG#N4+kZAK_b^dNI30vu(L`_1Bb zPD2HtK_9jNX)zg}gQN!089sM{=n?r{F_-4{15{(k;ECKBWM4yGzn^)RyuRlWsWx?g zz^5eYU)~a*(ShGOyLual)<9+{yT{xszfcKc(DC%C*5B`6c5ff*)<8FV`*{k)sVJh) zH>ZBV{<0102KK{@N9o^BPPcSp^2-CIw|a{;YT?E@hiU5U}3$aOWAY`Z4XbXRBHXd zC^&7oXx8KA-UlC>rBj8p>(Y6v3lV7+c=V1d+)Qsi|Z34SOTF@p;MjV(!1~#Qwxe=Ks-Gl(M0f zT;F_i*C*?4N?3?b(d99VkNwwUcHIf?%G;-!5x+MEPKP>YKahQ=H9-7%%nkm^_x$It zMO5_2a1nC7dI#UBYGuy>XG+M{E2 z=$$0TXE43r{6{$S#?&s4BGim$N(_mf8&czGsw#hzY8X3+k{>HBM_!#oa910Pq zU0F{Hd~_Hdxh#@@A+(dh)mA}khxT4DjeP4^AL+tQif#I*LVbQ{UFpM9d$-9$9xnk2 zAchxb3yfY)aGs1<_y#npA%EH1<`N;9O8O|ALFZP6liQXls`#NZl_|tk8xYYrrKkxo za4G1>B_iLGJ|E1P5Pihi@QY#ZM3&D0;L&(#@=X%q_d|e+dhz|^7wY{}O&7?CSIHX< zN@JA#cUT7T*_L>O&NxLGgJTfiMTXH)oBq2Ves;h4aV{64EJdL8`R^jLd%i_5s~@KuxhcmVJ0B}Rx+yZiY$l>4PH%Bo|^mcjO*&ZBxi#XI5x ztR$*2t1Mv65M@c>YRK95@aYCLNo$L}U zsdZ}%#uz_hksKaO0#&PutHS`e7*4?@P8nCSkLvoiNPS92F>TN$JJsTbJ>DXj+vH`z zXtW^R6N^3TxF^9ZBU8YT0?$7AA{i^sY%^u<%y_E0CnPI#jHBOS9Jf&10IfK*Q6pr? zdFEaR7;=d84(1lSSXe8{C?y{C}p5oa`8|KF7%5lpkzAzMoTA3)@4g zO}dq%2??Ezo*`z=eeV1o?or921opecl>E*|5VN1smu);Hnds13{K%Bl4<|q`w1Pzf z+t~@<0gR9MVo2rSeZrk#S>YoX+_&wvMs#b8v?@cXhq7_#ABIXp#Go6qP_jHDd3=8c z*74xvqsOrgr?>S{OthX$w?%T(VfNQ~?{53=%?6e4&`KoCz8s}Qeu%*rfaVq6tCBNX zeSadWTN!noSH%c3OAEcp4xD5t2HnF_p1Jvyng^{Gtr`4cR?{Pjn0JdmYFg9+pC6N3 z8V^62By3O~CmM3vs`H#@tcK7an;~cYJIY|wJ3lieUKK^usr+-Gh!o{AQ6pVF)n_Ww zReiymo%^cV+#wcCZV5iFbtT^6t{+ML2|V(2Kj!Qgq+rM{?FlD;v4L~B)_NBuZ1nmy zPHj!_ykglgv34jG^5>X4*kq*le)8yHdAMbLLY~JjO8j8*W$33griZP&aqRS(0ZF1n zdRi{U^!hL%XI6%ycGCV1*VRJ(k)YrFcHP#GujdC17pTE^R4JE^!U5lsSd8YviJnE%qeCt+RPOj`<||r_JCGW5c_gmX(2%m?9El zhARxBOk!KMi{d8fq8ArvVRc)?{8uO|5~_DKf(Jdzo3a(hm~Yib5@`QmNo9UUuqOf2 zU){wt)$~mwL|AXB3hY~XvPLRdsP}=Q8{*_5rF8uVCn2^4W9|HX*;>nl5$Ab#BBFyC zrNNe`T--a0!u`;1%|~R0_wyN}s>Jz2%M7j+bVKJ{cZwnrQ+$sR{b|fQMESdk7nt4# zX?(~^+W$#w{f{{7Xe;7IKRNPkRYsddR@0l!hE_Lgb%^QXt1u0)CV+%!2ya@T4dR-0 zUdY%%Vx$b{8oO;jf}Q^*i$_SW6v!Pztt!w2e*%=_ivnA7ApRc5^>zy#b0=o-~|o2R%U#_&jU(53znoVcw=#xOV$zLZu785 z4+aHZ4ihwO07FP7BNH&ukpXAy{A4KG0$Qz%cfDJ4$L(?Sm#atIMHqmIw^3k4JjA}e zqXQ`LI-k@|k3P=v-5lcChiO7pU>3!3{T6gg9j}jv-l!ir=V)b5P#`p|esJ_0>T&)~ zV8&c)#Nq4fj?zWdPdXjCX>M(jpP^_lnD8#$KHV_oF-UG`XCl~=)W2ro-qwkS{7Plk zo>74pqDUV-NO}z@Im!8pe}I*$kDg&}s3zumZX3qDnhG_kR)-+J6{Afa5Typp!12&p zeq(;7GF#10LC_Ty^#m7Wd1QEWix5B^eEJpay@wr&`DC zy|l*Y50x-p#C2%#U8K&^`1lvBr~YH~P3S9w#kuTLGaTE0|4S!v*i>*u{^5IB3FHh~ zS}aofKYC%;M3(b(3-SoJ+|YNXaqcaqb^fnFZc8K=oni^&r1uW@zDd8_W=1uT^FHii z_INBlJ8d;)<_ZcdPOJn=7|Wvx`h22K(Pt1ttlYZA{W*v2?-BUwzpJFtO6r34_m5g7 z4qe#iY1$qAiBLoV(GE(nm#f?56DW0zHkzOW_n)*L?ydJJhRAWA`F)qQ+a<-^h+Co? zyO1!sdQE&jG1uoqI;K_{Z2#Boyl*wXgj1=X4XRXNQD)8CN-?KWl>5Zwr)E6jLGt}4 z-7Xs95v?@#3Nr1W^e2>DggEoxtW_S$aTTom(eHm>CodeaPJL%e(_wXp8653nv_0Fe zs;JO7 z7@iNe-HFIY)E`2h82G1DqBJK9i)K`ZL$o)=?46y1D0};e1%@6nPXf)ps*0R%YQPxP zT0(bJ5<8qZ?9IBkqH(=R@hl=G9chF{zZX2nq5IoLa3x3#Pye#fqa! zt{2% zM#83YvZJ*4t0NNaWP9P%kv~AP-+zSy6$=J!H`}H|I}on8;+gHbfuxg|Dz5V&#sETQ5$?SWoh&e@Ty~wS>zo@y(uZPLI^$9SHFC;a+oaB+g}@bnw${^`>9u)EV?) z_rn)&$Raah?Bl%B!@OgUkkhzP)G;OR#zM%hzhKung=CNwq3!=hUyV8P{J8a%B9qZp zgsccRKiQDZ_xRbQdxva@PkT9x#K=|uOB`X5;o3sAod#A|-4r8Myl6BNK}Zt7D|GNF zM7+nSPKlQw$`rpfiU4jDZDZs|@%rQX=O?QYoL#glYSgn-k)jdR?H`yD0IXMV`qa6} z{vqi^x|V~*HHEm&R9BeFTvj*+tl5pPA=f6D1*x*icv~gys309_mg4h5u;w%rq zaKJ9-bfvtbb0jtv)?g~HCCJ$Lb25%Zr3H_^!6KRXFBSb-%EY8Zd5~1_YT~|;(>6iz z6MsoYTH2_r*mle+wVNRF2N@~_#wYsTUUdV5ME7$K{q6{zgq}LfF*z0cs%>N8$SLr} zUky5s!|ys+*a|;?#zLv9lwRcHwiCjG?U-tJQcZoKZu>kIK*UNF`qdzdE1L7T${-0U z3dBmCUI_+62x;pk_130_xG@9$&##zLP8W4GNp=UWyUl@bER`SKWE{~10gBiHI^Tha z%Gmu|v3rT}J(9RicY(O;J)ykiIK?xnnC)_ehySOvd8N7hr_zaehqkUq@;d(iBEI}j z?ZZIxx=4nm{3ZJT)kD|_uWP5&9M=CbM#OapF{NVTnEbzm(|<=N4y(lZUy+gj6Zf;O ze!>5z%KDEnFTMfgf7e|9XJG5^(Ij8jU;paAvj1xcmP{?8|8Ifze~jP%ehq+R@-z1T zI{$a9QB`N3|EcEw>mt>A1WP8A?oAr<|1f?2XTlk|d-wly_FohHOoceAiW$@^CG@|t mBQbIH|8;#e_Wz9hEC$-GiR?qUZGZE6$Vn+nR(>%K_38zck>Zow@C4emC$I|TQ^9R{~y zh8>=~Z|!c?e*5kI?^M@Rwcm43_px7hsH(Co_Dk}YC@3h{av!BWp`bhsLqT~`_8c9V zLz2zJh5SP|RgjfJd3gN&Y$=FG=DhgwQP%|p1(V=0JwZuLCq-srxXLL>V=SZL;9_#y zyo)nKL3xEDC-p(YW8rWam`vG|@o);%ydJiTao3)BtME~RInIT9ZjN!zA0&oa2OWLE zIcG`XYl*X%uEbgA)Qca2iqRh6L26eqKo;=qpI0x;v(vleS&oi}UA5te-OPDIYqWnR z%7~A4E=9av+b8d3{vMmEFDeE{Ua!#8A)hMj;-vRd$VY=Y>^t&#DUFYO)Uuf$3*Qn- zKNbc3dMqhaC44L*3VSU1C874eY4pGDFZVoX*{v(xrQ0dO1qa%)@@Af)m$anz*$4kx za@;q-UrUeah$rZmOO!-*dvVWLFT;?FJZHp?h1E3K4KiKc0DdZ)RZ?bw*o`O*=R zMNP|BWx6ZfQrEEPEMqKT>W>IJNmebYDQCS2a zt_(k6j`#y(9yHXRtNPszsvpkFcSN&cJ0g-Y7y0?@LkcS8 zKgZV_&a|0;#pt(l#w4fV#rYLJYJgkYz81@5z2D5hjLn%W<(=SSyqL??{djr5%? zAnWR53TPYN=mTbkRTdFTHy+r{8lGWAuT+1J1=wmb7pWc!*(UOz1`cJSqVkKmGKNs{ zQ%I|z0$Xjp0>K@P#8PmYmb}Yn>Yv-2mKsj8FjVMTSudEpG=gK2x{$cAxv*8$1Wy2q^!uyRR%VVtul$kQCb>Sqjt{D85M#o;+n^VIA zr-#F6=bIOS4Y2xZ9f4vKaGyboDN9?^m2_F#h6c6KnG?1Cm6MqFRxIIJ6bbHc~WjtcssmAw5 zSiup8BSj4Qjq3!_rw?NHc*RNf%XxjblVg@Kj!}Z}=06t{8ZX{!La~^#8fjL#B!TR6 z$H1ya|1@f`G$cbSCs&f9X5B$0$+&;<50UVmow*cGJw+}QnMPY1R_FOf+)7VCKsn;( znM_piblRK2W$Mx8eRKWW8IsKH?*tf5YudQ86a^AaP~o%Oj{B`!+{Zb_j_5IpHbW0FH|fp3F6r1-0Fq%G{1s1r1!li}LjAU>RcYx1=@3Zs2kLpPi=QXArJqm9ij>;%)t6&~!^X3(OchTIV2i+na=ur~ z+H>meHNW0&A~|z4BAU8g`vHzmJnFD&X`D4YhVZ&mh9kllvzmiRvJ6@mJ9L{~rL@wBHOa84{s6b6gUdm8PDW`>iAZAp!<1e|hukVghnJDt z(kf25lGi6V4XIEOf4$Oe#Y%&NS(Z^wgS#{V`-<2z4$;~;r31`wx# zyVDqwcpAO94M3GVPyGIStYq^z&4TM_UXv1*nT@iU25^Ayx&G>RLAGYD>F%zy+~;Ar zo$(V>Qc&+s;7{*9L0uTL8&0kYmW6s|kj2lQtgEx=R-3XkhWRIiQ>1WtVh4s?=NAEG zO5I5=MzbU|HHl0}_j^>2>xPy!NyG+%c}FgaMjmCN=go1@5dygiVsjw8QjwBKxqS7- zZ#EX<_h4>ww<)mmE7XQ`nHdOk4a2}H{bj8XpzkNtvOEjJ>36z~j@n5dQ?$CiJPnyW zZ!C^p=Z9ntmY0EE_zM?gcKKSPw%r`aa&G@@z2CIuIEiOrL>QNHEnf9B zLp_RjDf++mmedWb2)@w1q05-Co!H@VqO zJ+ipvD;;xLC=};f_a{G2_QF9KBIYwiecVc?_M66IlpsG_TQkF68eSSV5^O0WiT49+ zSUW~TQW0Qs5db0uea^~2WEi>4^S3bB*@L1M?v|9rw=3Y@#Y76x*-N3!z^dpPmX>Fa z+TBDf$VTRmunMJj^ZDTj>b}z^sZbR^YVhSm?awPbK)a449%;mM!hHf#*LoZX`4_a# z9-Oc9#lU@}0Nith1$yW~F>sG0hi6{o*!rq4+D==)0U{N*0;F;`XhQa~R#`GXs6QkHOP>dTYSJhZBsJhGmQ7fO^)+ka3S zws}HMj}@r%D|-TKNwLJJPDugRCoW9VrdDB!O{eg!at{6F{>e$L)4q_TihQolXSB(m z$I$wO4GdO?2|_CK1jll94}{Dgq?!Q7CpbHFD}H8vWi2<)QP$_q_nX~BF3)TnK(23M zo(xg@I6NxW>|+@USGC4&Q7#akIDHy}_gyp30o*@dNE3yD^(q9lyL)jhrA|WE7F3H>zt2ur$^kt}bUcne$(1 zzD_o|-z?Mhpr{FE133WfJfD4B++njPKnDbxQEBYOd<~Dsc{{if#x{^0d}b0tx;}#& zH^IjUv(WPs$Byps$L5^L2j@m9te`h`t%B0o4?boBXAX)}?)3utj10O7_(AFF(d7NZ z4CkkLx<1e*5g^r3Qnp)upMG)5N44X+5kpV^?Lm;OfnA4eUSC9eUdqw{eE$vdMQ?gH ziuq9UHwhMd@aYeV8}2%DP#X5a2%JVwDs8hmdbr@;mNyH1xZ5YEaGl!LQ0R(Kpfx7{ zMgXAqYON|-X;s|sgw^;qT2j!|N0g(rE|JBTCulO7x)+UxGz7z;8OV;SWEgp^mgYvr zNY&vv<7h+o9BWjXlqB#vowJoA$;a%ea4v>_x0L~K33fg4ejjJ6@6( ztk%bLCtOSs2i4lnv+ix|4?SjOH{B-BW}HtiIT$ihriXtq1CN|7pNeE6TAr5OZ)Q{a zycZ`fw_9E5+kOqElJ#)>Qr7REx|DXTtumMqoZ(2GF=53lO7W+!#GpP@904an@%0(P zG`I#25Qckx*K1f)kezI(O;IttL>X(VN~ZyxT2WE_dFxb%xtO=q2O}=5=8@V z12n)pW*bf@9&%Nb`u+S|Mc79-Ht0}cW*#QJ^6br5wA5+M$sF*-4;tuB+~N2nH^XG~ zH|+!THxRJ#_Bq5erjq`Sv%*-@Q;o+dfP!7v0t_FVe@?R%8a@(1t=B~|N~NMX`sGMT z-O9>Nxd2+rsk1`e2)<|zZ74+9TP+?Td`=_c$$AMY@^Ie&bV9uo7C}`5bgn=0HFW7P z5qa2m_H~*aHnWf!k^KR7Z!E6BN6zn;g)hQbR!yDi%N{QE8k1l8uwX%yEzczBhxDD` zp(w56cR3B-sb}~uNhKJc7nY{&M)ehwH#WP_xoxblNsL@*iYe+UJhr^Vym~#9lU4h= zI7-_K4mcc|Y~Mz!=!acLVTyUY3fyP8-PF9U=B24@tW23yAszU+;7>$xzE%6r!`;fM z&mjnd%Rxi*T8u9Qy24GSh(khhd$R}Q0U*c`_hU&NT^YDqF4LBff!PNj_lm{MM%Vcy zPl5hT7li+$@f>Gk9PWL3XiM=tawo?!Vl7j4`^#cib-Q=j-DP~b$J`gr)s3f6As^Kc znA`m~A?lQ-BASM7RcjIl23@Ew>U(^BuE)%9SEK@2!+j}L?eO_d(yJp|^r=^0<{%j@MlI}-Q zQPF?eYij?!(xk~kYB{kv(%I6-YmRMTxzqfh--4Au26r_jDapi+Q8(#;uJ>5`aXB{` z53F?*7#T)Y5+%PHFs!nWM=D2UhR0!S5mbqG=Z6dw@nVC|O0}_1scA?Ogo(nuU-9h8 zQT8r4e~Ca#@6ux?1|ZJbSv=yh8sQ!DtUB{LnR6kqV-!f0_1#m zPD!?1`nq@uk2D7oNZR6)+V1)J_&mSh_qKm!IA}cY*xLg<)1jzp{Ou1s$q0{LTm1uS zI9SsaxmXez6}30@BKt;1l=Au`w*DDuS_f%b**|i^Y$U*DW84vwj=|E!7CydV)31uR zsM1u4%^A)~21WU9r*OyPbS(7ahpmFfGal&bnXxi^mQ@|{wH?~5Kx|*_&IFD|Wr);{ z{~e%8F*dBk+}0(wKj1}`zsg@f=PpsM>o0o+AW-Y9=7GuU8fK} z@O!}Rgi2P2ci%k&g`n%wd+L;`=Z-vcoFPgS&|O;IW@tCQfyW4{Vru2LS4UBCwb4<6 z3j9@0E|?fm`+b{&6!D;!Y>jpYa?IyRc5@DGb}>EQ=3R5G^u;wM=>F^uD|iZTk0yEd z*F+CZ%o%JpJ%CcPd@ix5{hS0JJe(LBJjyrAa^Rg7ak}@f6piSyN0D9@cHoLI}aG7r^zRg-u5q$72ns`L{2cfqp8 zdc6lj{LTYyG-D}nvx+U3LAtCCm!8mGH8L?U;cbgg%LfI?_OM7bZ(adrnuledOVlC!FW zTMn{~#l56MQ;oLPqq6sH(NrCUPl(dpH$S)DhvqC^7Yu49SoxlmMo!QS>LNCoQZR0H}^nl^wsEDP|S`mObu}{GAZDr2=WS;*yJjywSUQ~ zeoQLwC(rYp(eNP2j4g0P3&5j!4>)s1imHfmpF17&i@ly$_p5S(;91%F@>F}_Fg*e#gbL#vc$;G(Y+osI){3+sk zaI$f&7`hgPVOjZ`E6YwlrYB|T3g&k7n^G)a4BLDBE+EFJUVhU)MVR2TqK>ao+HXbW z;X#eF3~|K{y)I1>N>skpT87B`SzPM9g(bHN%bfVFSe9yXfl5ZTVMcO9O%s_knU}!Kuf&Kq!$d@u0^-^Q&Y1KSyn!eAiEj#-}Fh_S z+Sn)hp4{uyi!u>m?YorM274R1*K3M9mrt^ma3}k)4%G){MBd2`^pAi^X|{fklAZN@ zm*7GNkWJO|+tv$2a5V^Y_MxF){r-FzTsmMb71{Gl*DhIc$PsLOP}gLJ&rx@|-rma? z@}$$CDcW01LfiLrcIt8{wsfxXfCp#(0(<}9;CEr6s`$^P7L#LnK~(it)&w@T6_v5? z-920Lu@j*NE7FFEV4Q1~=anW5eEqHqZVE_)@Yp_07z-6PUE$!uB}mK2{*RuDl4gIC z65D4*=jVdMCS6zp(czd4g+G__YGh7F-dY1H`Qn>D{+F`!1+=~I= zWbgLSHtKtlKho6V{E~UObmCbnyvDC;v;LlUa$795w4V7TZOg^`#YI|AntF#EYZrx_ z_WBiY)iPi1qG2oCIIWKr)aGi{ZaD#NubD6Bqvf)96fca|**r=H*Im1@L73_;$K!Ap zHp^=21{=%93}sRY(H(~cHS`H~RIvnh7hJo#O- zikn9n!jMzwynU;~wbtw-E?CXqdw()uq{`jnPk$M2Mw(obyN*KHk7 znzz}+qzj-)AAuvwqrq}WfqZPAAY2{4n7vdRg@5tSW3cIe7>DX{XeX`EO8NxZp(x?q zbub^yU`Bc!R`9mUY!7+rPk3fxMs$7M*7Ix(VHMboft+{#hwhEw`%dHWDV?7>U%b?= zXj4k^ihzlB>;+4|+v2GgAjm+JDIV$DBG-d`kfF5ZN4&zWeTT+k)S@CDft|}=hmv-B zG0ebyXztDx5H=NI%2>>h1Zz^9v9ZXZ*d9eEds{4OB)iTb-<;RS}ss_#Y^8MQ$T(}-^GQe z6(cLE_^%tMc}wE7D$RI4TqVm^{O;^zsd;2rrzt32Mti(|hTxlCA1!!Am*_02?H*zo zP`gL-pE#VmW_>eWyi1g6TE8E(8vmt{_30wr?V=RrluycXO}{jv7s`|r%11y>N1N$mKdn8 zw3H!f=<;UtQGZl!B$(flsPub47?P*^h>fMn$O3#>Q0Cj6tU$4W!J2B?+OkSY*dOpJ z%!d-$b;~P{Ob^PM>JqL8jz&d(IC@)PB~L(_dS~=4CSa53AA-foa6z!EykEb5$pUqj z+5U}FdKa{vi|qlXAOp%IVF?Kdh9dh|q`VEm1lJG=b(hRjIO<(qz}_;LA6bT+v4Vm^ zfn&G}^^P^rZ=wB888_A?bM6Bn%#|W85PydJsqI9Ys8+qzLa8##Fu8LhC9;)h(<384 zzRjXA-0(2&*9d7K*XKy2qd8QfvN&s8Pr+OojY*}jK!^38VA|>FX$?)y1djI$M6(HJ zV%E(){akCyvw*;t7Gn2VH|;+p%_91a*ZwH)d16ZU-KhJ1e1NN9yn5@9=Q+upsPw>g zK#T~q>otv-{ityD`_bKKm<4vO+-76)btXU0ynAa)Eb^W-nJ?(qo$wxGkSS@fhL+Yp z&z`J!e|_~Te!%sXEwWjqQ=K_Khjqi+!O2WQ67JilI_*u$vV%zA#*RUq{l+m>lr^X|gH8k*KX$YKKYl(AfG5&kDca%=#(-0Dg0gyYCse7N4oV@k^^ zti-;^hE`Br1AUpqhJ?Xwi)w9E^>@O6;WV+G))|PKXSP)YZQ95`!6u&Fwfr7&=mrs# zqfdxa&!bH33aRcKiuSK8JBoqov9)HMW{K@g`;-600#shA)^ez%C82KV;{uXqL>(4i z$v?2klo|YNN|e!J&*&Mnyf1dkr50X2bcw$ky5YJc$T&07pbxv8!Rc^V^ z3#nY6!DxVJ3AJ7G4HvrGVju=Fn_h2Hr%k`F1C?HD^bvxHw%>)+!v`EI?Gw6w=AFWb zv;d6sp6zK49>)ncLVYa)$H{gSa*D+KC$;Z(sQNO!NidCW@GoH*-9Nc#%=RBZ{yr|K zeCi`ln2bI^OrY)Hq)-D3qjX_3H-eZ$x+Mp-Rk~Ja;dJfo#gZGt>kxw znjj`l#2m+Dv9AbQns$ZHHd{$1O#5s5dW&TnecY_oVR8YJh7O4!S6TW0`24-)SPcMxQA3X60$!OJW z-lxa7;}c8omEclW;tnuh2F0;|qUpv~Mdu);x?lW0Q6Bx|sA2S^^8VyUa&>_MtNC~# zMn=V&3TFm|v;^)iWH;aUPe1eJx&2z8orO<%-wHW9qt~u9*>c4Zza*ETIw!Ia@g-XE z?hNag!V>sq1jn_!$~B&Jys3=v-r=3X_GTK1WJx}2H>X6bIC6hJ^c+sP;8~wz3J>6w{wcd znK$PlyVJ!q0c?2EIJg)4K)f!TMt@7_J+9A`loEuNFdPSK(+hj&1ou9Of#-NN52M_4 z9KpnM+)%#i(|)E4T%&wO6!@FMgS6$2W^if8@55y9o(IN^E~R0tg#fl|C(#BRiUu(uuIJn5fjYoGS_gAmVR)LINl0jFK|+z z*K7%Ky1}T2YB%HRaKRj!L*O{#eq&caC+8ndHxw5^^ZS|8kf1Qt&RiDyItM)kmkpav z1CANiG-XX`|60!baZKGd)3=jZZ3MU)Z5}LrnU|7AJ}2@%LTL7O!Lp9v7>P*>E%vmI zEm?A_I)>yEh)4{-jp-w)~{@4Q&nKUoa% zm|;(e;KD&!+-9rX0;G;Ug6s_M5teMifUrM3kdlXNaCKhgy54zD2e!4kjQ^cP(2kZ!cRsa#A;rM+j^s3xB$ zdunhZ%r{a6hf~jFpQbghnSB0!rc_FThgOxX)SAUUh>a@A7yk}h-)J*6^EXatkg9~@54(%RddB(>GO!Eb>3@=G$lyke4)e_ zAMv%hpbOsr4PD!=Q%~pePF>^zTrF_1tbG!7?f^K>g;pO<>vNI5WJ~kdy|(08yBTv@ zl}qCBxz`o(?(LTTFEsYmN5s|ZJ{giRukVqz76fy-H0OU3H>;aQQkpaVK+Jhcd4P^n<=yPB!$vZX zpqVf+1*1kZz~{?@v6B<%*m{h59CXC<7{;3J%rJPJj!+IVrI`6aUf+kF;_Qz? zJ~N#CP?3Y&gygESX_IQrx-Lw!KUgmZ$yw53f4CcD#GYJFhm-~U7(FcNUpT9AC4C(! z5;duo6~y^&Yt?SKB1W++c)^#x-%&S=YuvG2ss!8GpzXU7MIwPLT5yynNAV84W%=9_ za_YOuooF!gnMcm5o{x3ybdh7b0_YpSC2Q3E%eo#9eV|oZEg*^Jfh*i%X^4yj5!m!0 zq{8M@gRflwJ^UnR@~g0CE21lk@h#uvQUmR+m!1;FlW!(_5!RZabaaN|;-7>hX9;rQ zRPBkuTis3pVMSuB8L-#$5prX}%8BBhjza`2NQ$9-aGt5E9&hkn!+|B_j~sAyFs?VW zkE5;(?KgVow|RpWMh2u*pX>A0J*+GZ_`PzE8gZ;JgqixyZjgMhwI7~g%qfXvG0q=r z4;;|A=!I=!XTtBx3ronloeDsqD{i2E^QU*XWRhic3ZL!M)KX}l>rs5G%@eohu#@K& zRXGD9xlPyPchU3yyd)-OHji39K{jzkl>_6(6DPg85|bsTtS$@NevKKPtK@L&rHb#< z;YP1GxvGtC*aBtS;t?<^S=uu*Z|uA(ckvQ)44BjVCYs<_0*Ffaf>%l9GZTii*%7wr zs5@NouXnT?leobzo5Sa7Opp%Z=HKV7EnICms;mb?6i%)wEj8MhqE>4f0DAVVdg z{TfEW5)LFO$Hx*7;|ol>wu5lPx+=cX3R4S}J8TR}UmO6ASb_n&0uo$t8HoGQ5?5d4 z<6a4(>>?R6e|gEIjT_pN77yX!a=H5KS8u&+uzqp3L(kak2!?uQ5zd_#tSsf+fh!6^ zm?}znLXj(WZ3RJMH6w^L8H8EJxKPr@9B2J?8(0r@tgG| z#6*j*$ByDHO+tCTXrMn(ql+2$jqcV@dbAGgt4W!BHuh{LvFo|&chk(419eK!jEW$f zN5#axzjvC)bGr=lcfVKr*@8>kEA2nw0C87(6m}bnm1>9yJXKnFDf-Q|&odHU?u+(l z&Qnnc{ad>{r>=uxkNbtqYE%^^cmSo(-OiKmXZk6Ksp~g<_OA)__*m0Ar!XEuBq1P% zkk%a=yBPC7EcHCz6WE(ob(fOeH4k|B__6HCL^g}p$(tXE+V^YPydgbf6=rw#&38Az zfIan#BWKee6gI#0wN^49XRYpsZ#3zm}?BQgx1 zSN${H(GZLe&TU{Vo$dcN03Zs>Ol+n%c74Y8LW@yxhQ4l-YUDOqq61%RYIU8iY)+9; zy@^wRkX|KwxBZ*ORZ-6tMSt+X31gJ-O0=SvQjzKAcLVCzn zx4~xvq@%DiH+ar$ zYnXo1cMp|4sMleH>0WMvUGEQ$U_Ejo^9dQ~M(;(U40<#zmZ+N9mp|LC0p)BQD5GBL zVzxqWq&jMEQ&q+&ugcu++FVt#IjwkJDqzkS%-}ua!#1-0^47WTQjw*N=;?FrCn*)R zs)`bs>2elfa#q}A>NuXVu-Fv=6aXt@*r_kebOLS4_z%<+%GQeR9;E7m_AP)RzO1F+ zTqLMQCn6kMWBV1sGc)eeoGt;w`ncgG8!a`dT!lMujq&ecUG4ymYvF-satn~g+_vgH zxwyuNJW_816Z(|#7;FXEI>p=SW+bC+a>db`@v$w`9cjz=7%?h3w15llz`1Q_18Zk| zkfHpYmpZonQn}HKJa=Gf1Lpken&H^(E+A1!IeNEEb=u#@&^cPp^c1NyI z+k;|8lF#fz>cE$yePUV0{hrXr{}IRlf3V?&yj$k%FSx=J?+k)wU9SN zVfK!^+L=#=$IEcvT+&l1H689D*pKAmeT6uwu2}MT{Y>x%eJ`|(=#q*U~7{{`@2pp_MnxhOdhh1l%uCrITD6aQcV?YJgtUplXs2Ft!;su zxkPOvJGXUNw;A&g20z&2jIt_wp{Iy4*MDqfAqtGPKGFM7ulp@0AurSs9LS;QsgLlr zhp>%~z3f-V*PO!j*p6k~d$>GCdWt9GnX@osAKK5repC`2g3 zn;spR|36{#e{o99rAO*Oi__5qs^vb<9WJf9@As<6Z6QVO^Hd`9)eqk!-zb?7|fVx1=p*mq>6$Jc~COND(rkvYQ&QR{d#L~A2;J|tHf)^ zjU_i3uqF~prGET6TXGCM=N~@$=YdMr=?dZ-S=^83DSIf&H9)fir-=IQe(M=9=l%AI zqEpuo#yd}o`lc!QS9mB(mCveUo5@t)Xg;2-)To*(SBQb{6Z%oXz)c6qbI6hzm6@KK3ss!1P!9#J^xJ~qKn%oy}EEXYG z-gJhsU>`yg*wm30cv{2IO)3=QL#XEJ*_pxZ#^p}9? zbcE-Huoc!V^Dl<5LJIzWNcyly#lyA>lfPNteEzB!%v-&qei6kS^`^;8ILt}$kP=%V z@pK;weH8{cV`n5C4>{dQmsz z!OIS5;E6VcG3|&)7HRT3-c~zt5(G*ojrs`n<>$#AhY9x^?pf9^x1J6EehheM=XbXh zh@_%0H{_nC-$W`5XlXi+`=yU~JKUhVg(&{Slf5z0q&%%1bJ{)<-`dPFmfLzl&zvX} zBd|^-ek;Tq5@FdL0_pSi^`>G%?D{|C=-jJE_*Z5jID-VNlZT8`dVWgw ze)@uc+wk!rG$#c<_u9FocmR7>wxef?hC4H%e3UjUoNzrEh&YtD!Aa|Hz#QEG)f=j) zYD+=_d!6n$+Cq6^s5HhZlR)JD>b@Rm1^4UZbXm{7uS_r6`_X1dAMviCDBsN|%ppL6 z+Y1VU+xidEn+8pcQW=S^M#pp{@nmyZ8|=alZ1sx`+6*C}Te{Jk$!LL#DopD$E_jr9 zIuNmLql~!Kyb#{5*!+@oUE-mMbOo1zw;g&|T$rV#ZJ46AGTIuN(jzxoL1fZ9yWXoe z{KJNSgwLF$Mm}r^>{)6%Z&QhHoUn)~7{s!vOkG?o{Z{p1p*_pv^rYKKzF%B?Q@5D{ z@2?hdgDaJ!@?;T{oJJkAN}VT`E}aJz>x$eGtvDT#ym=NZkv=SOMJD(oQ0$VnDEM+G zlxFFBpUbfMj>{4e3D3iC5|6cf;S`V2y$f>DuXCPSN?A(KfJ-yjG=5`p2SFd_))nkz z^bc?eLAd_CLsrr3R)HrTKQsI{1#g5T$Bp*aK}r=rs7#&R!ne}lKfnhQLWALa-UE-@ zC=3*jEA9HTLls{Yh02fN(SoOo54FozJE)Q_2HjiS7i7E4f z%J4!} z4n_9>r1{(4wMc(Ul957P9SMf-HvPcbl|ZNF#UYZ^OQW*b3TJHrsY}e0IMc zVnfC)H&rw5wnj>HDv)7$Z;JUM`8#U9?4=u#OkPal^HqMo!Grh$ZrC5oJz;0&Xk$MD zo?|#u`SJsv5_a0I-#BSHuq2HqtASKa+=+EM5F>!AB$YR*ww%Mf{Tn00bPsFs721%z+2qRFyas4cca$Vb{TGFPh!1ve>pW-6<45TcvXFQy`25 z;-hdNPN|JrHpKXbbz_=Ig<=((-cL<*HZ5D#$2+#BSp%2)mYA{tBlkTTxVwFzB){;W zF(r#TQQQgd&!Q>5ZXUP?+ia@H0F}vcFtt#?)}+OH3zPEfr^KpC_p4?z8CQ%(eL)xY zV$0$DUCND75DklQ+E|VELq`?Tr@K{-%f0^tU>yoLQ>!AbV%kwo>YGe=Wz8Ra2kv@m)HpKlo$rM4wlFvA`6}HtKZD!qHgLp!C{jy~x0cr-kd{ zl5R7X0Cbn%OCZHa^M2@38&&mBaq26AxZlOu=3O$TkZKp?Zpa_r-A`iTYFhR7axJS-icX|Cp!ggTp=aRtClb(wE1lH0-al?_G#FJw$XAG?=+Bk1;q~ zYv8z5o^r4w+!6+WB=?8+F%CH&Evu|8YlV;a-VsxfmV|RL4rur4l~ism{SXqdja!OD ze)PtJ;6_wiJpw!(h2CdoU;Rym2$tVK|N#I8N~_o6r2vU9s|$E z#9?_T3{)TRg7Yc~DU6Ke%bLP`x)^7g`I6GH`_XC1DDXaqMzZiXj|Xo>F}xu}m7wtF z+1hzCVo>H`PAm&w#CYy3NDW7n59kc-&u+*5?svLr%Nz~&Yp$o<{j_EsN&7C5v!Z*n z-gco*2~cnHT_v!MYZ;LktW=VcV&}*B{6z!<=aU*1n|S=h9xE-$rozc8q{Kpn=ruF& z_M*TD*J>3Cr%!kkV4BDIOJ0t8W~oPvdJ=%p(nXWwubh%nJiVkdZLJX< z7}4f`T-5tX75JVH1~%uu%9Y(wwk3qf2UzJ@-o`y0t=O&&!V=#9tQhkyGcVrA6uxer zelh>>`Q*mw8{bcd@mDq&*oqXjY-7y9d?_jK_6nIlQdoZ0FZZX(&q=Q>A3^&$7W2d| z85}c?{*K-7L-y~W6*#QYd0{x$q#*i38Xb@IoIU2!<^cr>dxtbvSCrs8Q4tFr?mg)l z4x>>yl6nWfqn`m&IOHF#7JGBfZM+C`dMi}#k09H`_N8TavM zt4S){0I2#&rAV~c$YJ7gk)KE$~s@ z!=bUE!b2!v;)tyUy$*i#LkcM|$l`~IZ}JoCmmKuNh4jUSiDGcZCb=??A<3Q@*kXc~jHCQxTVK&|K-_LoTk-ijboGa%|G{D0nRXC)&73lTUrXJ`S zRd>bbOQKI3Sx-$pr4C~kTr57is$bTcI4XM1y;b2}w|>p1I?EwjM>qF7i>7LiVrq6) zT}>@pPD-kKg=f_)N`-bjYTXd(mF2NsP(=(Om} zLLui-ig+=Y5?BLub=_(qjXaI4DT;|6wmhrxnAYIrqE--XR^KLl=PS|JcP(ZrDkB*) z%*TTl#d2XygPeg~1Thg>&DV3|c;3;FsgKeNUjWe1k}e_uvjZ*Cd{>Mq89E`h1l^9; zUQ;`w`gl#c0kE^r&Fl^iztQTRYrG}rVI(W?Q~;NwS)VwM{*ZmohaGx4K#o1T?b&?# zZRQ_YF22$D%7H7(5{5|&m;w(YabUd|745>=Vc|#Ztx?jz>dbx&$KT6|3%=Jn~ZILk-!w^*%oK* zeF_k`wj%(C^tXmK_#Wcv{x^gP<0Aid`Dbq*u)c1?=-cO^FD554OJ%>L`2D=yS(CDloZx|}13yKQZ<(Utu1T#Gw+ zBO)0m$NI&;TZ;X$BG^7;vy59f9y}3vd!`LsGQRG9)K4+j=A8)m9gXgfLhX0IS?*cE zl$h+>K3Z;%K7wSHDG1#R=Z&G5t~1sD6Vu(4ga^H3x`+Gv7Tp%Ri8ko3q0EmIUgWUh z4BZG`Gnd3*+nK*uBO7yAjN;6vX<-FJ_K-gqx&Ifd8rUFto^eH;}ppKN${piX!+ywvrx8 z^6lHV7wbs070ewrrSOWb%GNa6!uRjB2(GHky>I`K{`Y2pcK4+8lTGpE|KR3BUe2h~^Mx#5-=gx_?_>^q3yTRcC6lhW(3! zvzFb;{#)%;ijp0FPNBTo-+Hn>UbNCwUc~>7_-kn6FKo`!rBd1K??nxtCLCncu1^U5 zGo|PmroTPP)uySvzO4_F{(IBIkw5`&*xx%HgjTt{@c+J>-B@`}pWfnLE7^>UVF10?M0)~EIUK_dITx;g>!I)-oAVlsKK>KW5ghUZU9rYU0& zJKxVA+=Lzm(N(H4pB(s&njaT2w!E4+B05*H(*sA`nE)k@@m zod;sIJe!zae;8Zw44GG(j)sX^ZYLfwq^)?XJkK2ufB*Co;fJuJ@URvHA^4*@;o-~g zbaby?etRp=5r_BBM`#OEnwh#g|Dr>R;Ldg5aEmwpe2heuUECN<1oj$SKb(>R6gw9* zA3X(;Q&2F-5k_T_*E)|!DX4=YDY4cH&3k5k5-nYW1W7xe(1REy(f|>(u^-L++Prka zbXbEo1f0KobC=`ZQ`b!BJDg6_ZFQm$#S|T-SWY-QbKdhJUI6uoq$r;C$1$UXN`3wM z^{F7|*VkbZFl9o~u_1(!s_J_+HT+W#1DvRFcDaH{sT?&v{@%G=iZFSfCf7X)YwO?0 z+F-`mkE+_*7`abQ{twpPI;!p9=@+J@K=BqY+ER*ZaW5_ITHH!;2~Lne3&pL)-K7PB zL!gAA7DppoD5u@CqROpdA z$CV`LS)`?Np-_px-%}%-+!FBhb)%hHl&3@Y;Opy)?j4mA7KSbQxbwwJ;=0Gd&v(Oz zXrn4gzo>3ClRlCmk&}7yC||DjdzUCgl5~ijxh@(v_<3Z(^T)v$Z>IAi08C0`|M}Dl zS+-D8AvWs%r&uyyWwo9>lKI6HiJ{(<5!&$Hi0r?g*{M@_wB+#P7NUD#iVA-I_-%Bh ztrE$9zl~ueb;`-HhWDQ_zN(Sr`_jw#ZW}&%q=fF{$rplMkmS^Yqvh$fG1%5A8%*UAEZsR4Y zzT|h$>-DOYizh3P?=`fBmVM361V@j*g8?5VM;^6`Q-jfv&USD*3|^8E1q->DO2c!~`VdI%rR&$AEU(N1w3}IG;lE<+XU2)L5#qbqrvu)FmV(1EAs2VqjUtiVhwft~- zY~+A`h<q^j-sznh1+$}q&=EUActZB>*Mg?h7_%Z zg6{dn-k(n4i6E}y`!pJ;LhtBf)WF;x-_gs@iREQx4KceET}B+HKs59I ziiU_?e|@hTE#7fK%sxGy;K6 z69NytYMuE{B4t@wSuH&G8QG7{%rL-=qqgWa9v)rmbd*u8XqAm@s1OJ=)sGXmy8yh+%CPU9aFK6uKG3tZ)ujE;|iCmg0IYtd|QG;^{ z2_z%CxeBtv!o#ebrDwR%;lV*tKxiQ|B8U6mYS{r;i_uF#MovCn>i8^VAhXnwN_X#X z8?AL{9o>SF&XPX^w0N^yIYHKC-7K0lax1OLC@2PW3OlvP0oTenwqNM z=Ehe_$jXQmTx|)P#3r*gwx;d-hWV<#>iG}BLtxhO@(1;8edUdZxoK8)h~5>qf0LoD zQ_MVm+D#R*e@$hz+FzSxwJbvPN)9V)mIdpLlGcN`l||ni)yXmC!8bOpe#V3%lz{VI zqv#b8^z1$M^2m}K><6MS0U#vHH^pBvB!E|lsJg!Oni_XGx*B|eWaXOYx8$N!{)_%8 zvV{t@Y*ZiV20bD+T0|;6Kkr6seQQC_UqRwiBxK*+DM01*Qli6A4V)xWwEKv5K4M&OM$AN>4;2p_f&>2KmVeE$T1<@R2FRS7M-Xw?sX{#S_q z|2AA{dH2E25_hS^PA09!L}AY#_X*U(kF|nRUrV?lwb!A|$=P~pC!5By$c|zH>Y2|v z%x8AOYx50U9fKN`HseDmrx^nc8LgxTT?0*5gI!zGT;}RUKz~)>^+2Ly`c3Mq`74OW z=1iM`dOZ+52egR*-rH5Ecr0ArTb?F3%zwAp#3di{_23wluFc?X#RJ-m>!C_27^n{) zo6SxD?AR9kDEZF8;31$jY2v8EkOqL#QZ@i|17j3)m%7+qfI2nr4_$U@Hptk@iU*%CJ$@O-+~X_rDxT-#@!%EiB#Jih;2tWNJ@&P9%KId`Zfe z;MpJH2UG&JS@D6E2GQq|Uia?rIj5DvM|`u~EH$`q+dBL~NR`AX-s4zh?&}kapJ$xQ zGvWHY$EV8m<xp^6O{}^p2?TlC)~GuhXaOV(oO26&&HQyk%+xG9Mm!gm2@7 z*?#PFcK=P$W2);ozGA(xO1%eTWpuB%;)ikC(L8p_D6+>V&_g+T-}u0r{65eXt4pJ7 zv9YSPe?ab!uIGrAtsW`A*-ZCIs_=22E%)?3VU4$K!WzC0T92uu8m*$I_Aa+*b1rtY z!{UDA8Rxzgsw`WRu4_E*4HD+{g_9?FMMY!uH9~ z3sC0@mE&6tSnphwGjq;9?*}KA`3M_0O>&Vo4DAe+D^4A2waYQk{5q(io6$>N9i)`( z1Dj_IjDXerTLGQT3%;K4H5qV|Kxbhc_r|zk>hS^+`+>c`^-Jmd-b~LO)9yA((;fgr z?ysO!)8RComV<7PieX)S$sg4HAxj;V`&)&()>ZbqmLuvMBjBrrYcf9nZHk;A&(pxc z`*ZWrKI%cy)RT_bdfmPG!K;Iz(QltEQYmJj}{&M#18`=J8P>9IEcHW zZ^unX$6XIDhJ1QIwxYy~iWdC*n;Kt4K$@M(ofb79L(9VP*`tFrQvHsZQvH+wkx1Q% zgPr}6_VZo;qca}J@EU4LXwudK_uda3!Mz#{y}A3LbmOxoIDfKHx4Me<2I;|Qy>8l> z!Eavn=(tF`mw+b3$AN-_q^oc8U>i%)+>A4;{96Neo|_3cZvwTx@bhekHXKZ>!U0aH zf$mSFVb`8w=Z}Bt{5)e{twYj~CavX@@BbXOWiaZH-ZzoGx3mt}m@3^ny-J(>IrhVU z(4JPE*m2lc==UI++__>%xD|SNTUf@^y3EaCUnaRXBWcE2v8K$VGhAAur=gW`z5r** zj{rv>Cf^f{=m!^j`|8eojZdGaun@OC2EQ~NRlxPd;znMcvYEK*1qFKDdZrA|^^d}Y zVy%yZxe2^5Bu&ur^(fCzAvkEEnf3Zy%`tc{5lmyOF%*{5K%kAr5=?FdC6UDzZ`*=DQ}?&+?k?9? z0_vh|IOuW-nBB+5`d}Dy4>C|R{{GJKm7sXSDy3XRUva)M)ES9@r8+-eM#=aa)5rX& zM5If61aM4Yt!+){Fh@`_X-TY)$1Tt9DAWaXsGIrw(N#&;?R|QvFSjAlSW&g|%_pO8 zoRaAYz}rvVKutjOGljBGU^K@iKRDh+m%ZhS?JgZ@?nR%51f zd1mhNmu>jL)_#o5;&=C?lv3GvTR?0L3NiO?0c|AQ4c>q`wRCSyLzbSKRnWwT(R?+FtRw%0BB--v<6dc<*Vo&!nE9 zFVgM@UI_K3@-23LeqlO_qDAtf%TidWij>mWn*EN3y&IU;`_t_>T4B9sY`itw5>ehJ z0PV5u&6*8m8+Beh1E{Z*@er0eRxx77aay67QrQ|P5Y%Et&mexOBy~9a?S#Q-q;dF^ zGoUo8bD7ore&(We;NX{Jw4o3HhcYPOi8b8{^k~)SuQU{@?+wkQo{hi&v-mWItxN{E zi^YBV$Fuy7=U0_HH=9h@F|3%uhtkR&DjF5})gsFKGOtuYE|`ufdWB@r+gaxKJe4K) z2d|$lQJs6A^k-|~Ap!y=gYN$X$g6L5kMYs<^LWl>Lz*SLKg~Vqp2IwB421OcX@H^} zVG>!S>Zr~}wbPr+QjamC!{p4~24KXxCiHfFl!f;k%mqC=5rb8qijLeXn%5Vmi92)j zGsl}t`oR>@ZX2*ZKdC^!jnM}BGyPdr<8G(O&azp+Z7C@$cYMRe^?l3jNA{^HKF0wH z8?~9vZjLLr9pnhn!@hWpkBbrRf#-#g%LQTtF64o!Klx#YBX+$}*v`I4y3d_{|FC&R zupkABmDy}Oo?*e)FSDzk`=Mu z$#LyAhsm%Q2WaiVj|ZfMKXqm#G{&b)u6;lVst4DN2~L~piIW-wH9Jg{1^ z$spnYkIS{Tk(KoD_q#r5+vxusakgptOCLZtI@%_ceC?8p^T>)W==wrdU8>4I`kX!r zf+qRspg!JpFtvntCzfkQ?wOe9$jWZ?bp*!SohkHrc{VrxFN8oR?yYI)zG8U^o265F z&r@DvqY#`x#OHU)lWzsN0l|>egCz}KOql_GgsjZeK1R1A;LPog4R-u%Ri_5 zY5#FP(|~g3)H{+wRWoW;pI?Q0jexIa$&z=rHzmK<_ncQ6o2kg9O5mv!^tEa%H~>lt z3W9+WfvWz-=7}FBXBRv-v)V?_8*l(SWjX>vMO)K?45;rfy`3W@kG_#Yu;8I zvg7G2j!zcUbg1vG>*5kleHG(YT?0m9K0HN5jLfx-HFXN469vE|P3@<18`|1nI7a=f z8PTCM2|Y{I=45jvlS0(b~EclFL(Jt~Y*j zh34Z=7y5v(Ifr?2G%PSD3O5Kqeu!PWb=esv@IIRe)9p-6Jf_!TS6rl1p!3l1iAKAZ zK>y96gwLgL#*rup`UJX9Uq8Xt1p!=nwy=(_V-eLPEZpp*;{yZl*xZAONZVjrfs9(9 zp+`K2@6j$Vk|wY=$Dm)=L1$rh*z4aJw((s6GQsX-R?YWk{59D^A4pk!$dY+{Ge7(B z9v?|lw=w#QAb?2CTY0p1{Y@3>occ>53RMx7sZ1^Uq)+5WQ3o~JZ%5OGc7DmTUx2#vw~4>p$UdW@oz*)GvTJVApXU)|Q8(3(@eHh6A8 zYs&V=d#-*-qk3r($4hp=0*vKYJ6C7KP~(jIm(uz@Vne{(Hf+0UV zD|$H4;${(`@RNedWeUg^lR9*%WEo4Dw8iU!G@{wf+&}CgKKsy__n~4RYwhc7<=+E~ z^S25^Qs8oUCdmZr%VODUY0wgwU$v7 zXFFjGdYiv#oMRLg`3Qqtp1$Xm0nZ9|c<+M(i1<^TmVS>*US7z(RP>i>3vwVga;z>} z^R7cS_j#YQ>M)Pl{4@!MmkRW1gtqxpNrx8FYGOyv-UnLSw^XVxxdP{Inn71D(M-_n z;A4(GocyeAMzRu8OO)GOZ7zP~J&G!8O=$00N420*fgF(qV^S_nR1BopPpl+V#c+0BZ~NiODd$51+QNq@D!-6s+s8sl7BHr;RVb_LexFvIOkm! zb>krEDEeTC%y}bmpvUq}<@GCsasg|7t`Rq!I7G?S4SAbQtoe20C|xDowWs;^VrA7@ z)wmWvX>Bl-U~zfUKfmF_QMqH&{-u{eaR>F?Wui{=_2DZ5lxb)9$hL}?X|VCVP-^d& zQQ~`m0H$Bc(Q-`e&2~-kO#3%5A3LFeH(Y301kXxBmr7HdqWNYsv5<*Y7tnd{_2Kx5U(le&)GvCD-EK%Gl z25jd#u$a2i_A%opyZA5`~hjygHavJJ~lIqU51bts3#2ci+#nAQUzg4$B1{ z%9?>}xqKwW!X23jEr9V7F}WjfWqwa?uEhd=oY!6>^1*!E^l6WLK>oB|glZ<&i5qEr zLHuoZvmzhFHV0UTeWnd3+hc=rMu_i3l8JNR(fsmBme5DNDhJK@ejZ!tt(SwO#}@;m z<{vfpUyJ$tVwsfuaC7niHKi{t_T?sRIi+o+sHBn&m_ht3X~CuScE^*Vvg~0H^3H&V z4XqNJ&LyWjlSUMtxX9bhigV;#HMy(i6jj^ZI*=aZhC8)z^U%77d&*q$(ax)y-opCD zC#{4G%N-hSQ;@!WpSEsedo&g&ia+JjcT7mr_?y?!kX(#}WtmmVd+GVz#b`RT!GaJY zHD@MXiS*~;>@MNVUK06^_fbfT8IFZ!JR{6~7+Bf5WJpngz-`yBr0z=lTs&mnN=I`h z6R-+>VdAm$82cQ&m_C(q9F1ce9Ay=|R56~tIR{SLak&wmbJ#X)vu4pZ=l!A+o^rGe zr5iGC4H4yF58)<~9-c2Yrjo9}yibSG>v#R3Bv}2SpK|vesS{<;&| z)S($AD1HzFVrT{7=n|}yUal4eavJINNSmkOP%yU{v}?eC6vFf3`1ojwvPB0u__j(y zj^AThMUK)>hQb!2oA*kB+I9jX|87R8XT@3rxP5UVGwXNsbjz!KFHPLx7$eW-NI#h^ z41Ayc6MbVQW%@O_RL4YNXLtsR|-9HT!8#4tzCPERmCK zrT`^Ju-I#T-<@thpERb^GFajN?t_cvtF?FE--AI$-W}1D5moSbZYN~ahb!6xq0~w| zF_-r$;0>hnc30mBioR8Ehjilr`f<@T)nm?L6_1J8o!ukn91UtLZACCRJ6%S3zKrlGq*;#@4^Kf6Z#)gmmEst7%}|yZyv0=CSTreh@8=># z5j&BgU~ba84URQ%Oap2Q2VNE9qO103+YBMw$6#xgn#!ca(ONpWvRjXp?Nx=|;H=E+ z8Vn+kfo#R&E@W%6nzMvBK$S&@Tm*JM<0tqoYE)&=u(cQs$szQe)@5RcLSF1=LPoV0 z>^gv~SmnaIACIE(Lk3d4$Hd;6>QFn9lWJ@afX!)x#t?50-VA@<`>)NVa-7w=J$Pr^ ziOyvKE~agto3Jdx(^^M_k{x&9^nYQ?tfgm!L+K5y!3pxvQh(HG{>Yam@IFMsMU-1wFX_) ztO4m&q6It(WycccUBD_#t^1|35)I$mU0=n%wd@KPL1+M24#3E^$c8XInzCn-P5f0u zCgFdc*3-C5MPeNE#1nut5S6plj#WDaYk~HMXWyfKcGfU_KO27?;%-pyAkGrM8Mg9B z?JkG-9_amoGFLDuT7yAVg1)e+`qQ^tv4Z+Z+M+Q_l_F9pL&`=~n-Z-zf;@D|Aj#mB zb*%7ytwmiOBvfI#?neWe5GDp za;IiXMm)t7pZrnqyhR$oGd+anO81u+bX4&22G9jx+&|IP*AT;`+nSR8g6P|fFH?HTXR-m`^H5LMN?o7Oj)FN6Pv zAgNWiOv|!OPd>v?-vu0X zc67w{?3et*e+EN1j6ZuR&^JTqO)mK1q^0u)Q8v~ayd zZxh&y3=mKRWUnP79FX3f_L=>B(5IOkjKJLdsOb?Tci z;-C@Rq4ub;cW4_iTj^K$%bN!WhGlg?A80vqy^T7TlKiZ09mw< zRN0qw>iGM?K{v~mTq-shgo!Sl7hBcvjo=2VMC=tb=U?cxOj?9AH&&#|a=c4DVk~o* zq(T)Wjc}7D&t*Iv^0EzXPd=u1RJ)+hybUV3W~w7{;AMXGn7UWP>Q*4sEj1WQg*IR) z3pGub#1bZ?rM@Z2r=#VE)Y^;bt_6mPB_4+KbKZg$T1ywHd4rh6!TZvmZYNwgHxZM2 zPoMF4bWQE$*T0LgyJ_FR-+AxPPfkwWjSfQzP0bwzph+dSO!LGjlaU(cOGUF>>RG&hf>Y023-9|ySg?!-7hgc20?D&cC z#Sf6D6{H>1@!%FvQd}M#WpUQJXs0{;XlP`Q!Ta-fSE8n&Mvv6b1M?=}(~f>9%ckF$ z`XeiejF|i%Pd#lu@#oP}I)3&vi%GpseubeysCZlD?|j@;z&(py3uBdPBP(T8ntt&sdX$ zxcWw^73l>(<4 z?*C3(?0@6v4yPdOtD3g+E)L0(bmY63F=|_zEt)yx>F5%J<0eGkqV(7KJGGXbZ35nV zE7j5lxu?+SEQ4LUv-LW3U~x2+Kb$g0Ukb1UqQOtm{r;b+J9MAozO2>bY&c(h@zLB< zY{DCA+5gWD;PNwSaU@g6V^XZiqV56HV@Y=CgZ0L}RoI;iX1sAw@tSS$14QE*OFiMh z1mneOK<`g~PVLc_Hdx==lk|+E&%3F=UE+lR_OQ#{wf4{1Du?eyD*8W66V5N^Q_O}y z1o|#PKc|$_i6)F+6ED)X|HsK-{e%L2D}&SX5Z<|+$b^=J5ZmHtr-V#bh_$=Z!f#1t z;~@&mWazVIzSyAK9+*Th{%KLGK02=e{r6u92LB@s5eZf-qe0!Xz8kqx^1g{Ey}u`2 z^vN7m6V16amGdz5y{uJ+boLpcC{-VC%ZHbmePe{^_$1(OFibKm(OL8n3a3x2`}mcQ zG&~X=Q;j3}ufuz{u@YHmNcoa{fxB{?*IzK9Vd!t1>pus6XENv`(Y{)Z;4G^d7MYQn zf5{MkBbonCjsHr;_!|g~EcpBX|7aZ0e+%V~e^Ak|)RsraT0HC20uLsH5H6kB&$&NV zfIyz1WBBN4pdp6Pmro>Ou&jdbIf}<-6AT+R6|soXf!7B}$OXD~PtQXmw)*!?ah>Du zAEu45_dY_bBhXc!BG7@ymUC|qW)7h1wEeMw`o^3;voy^Y*R z1wN5uxrq}P;=RlncsXdGkgr<@xq8gxh!*gA-^>{oc4sR0k*dvU011ZK&(9^Z=#(NL zgE(A5L!cl8$g})6#emB(LuOIAGz6K6PM9RPl%v}ex><2bJEyEyTf#6Boch8wY)Ziu zqJ6ycWq*dl^=bXDqRFt2V!#a!Vl#C!OBO#O*eA1>QZfaW;+Yil;o8);@%vh3r>ND& zOOz>K?e_*`0=HrbW7DJs(E3a`vwFOI;X1X^A5#qJ;dT-`r+w{SwAq5#4Bqe zCs%d2N_lEA7*%Rqzeh&|u*X5{IZDsY&b?fC$c&(u0>ok=4HE1__PgSS>(XzR)jT%? zA7ZLEg}tyvj+}t;m4uxi3K-3yEtX@|KObFzQ>(s6GI|3`Ux)G8$vaA2&%(a%qje5& z^A2Izm(&X7S(T)jsK#G}*v(bK=2^oXOgbJTPE+Ru7<$PZiYyy-4u|C?3+Dt;;_)xP zL506^miB@@TwGxG2z3uiSY-*HdM z#>^vY(IdTk?igjZ=76HIK2vZEMW_3Ev43&(KkeeGcZ3)xX?L$gFe9PVrIxO2N_V+@5GNrU`%iS`Y)X? z;I3R2YERmqZ|1PF?hYIf&p&97OqGi1w1w+1$XT+Y+!=2*E+6>5lKg=Xi6z$owEL-H zkaj12Rb-zUm%-Ivp^RTo0c`?O zH)yCGIBJw9(+-|_9_hQi!@sXg6P23UPsGg^hlFnuKZi#!uGt+HQmi8yt_& zu}X)&@3>n{B`nzgvahYnN0z8w>v0=hk>lq7M3b?HK4c2asnuRqN!s z$G6SzxgEq;)5-nYDKOf)$~+#9heTdCtleJ|#bF~c)TM5X*(jN3mZ^q=?#c;7cbMx} zYFCR#ag;)n7rl7*u9%x-EHMH8@z8`3Odk22$E20O;EVx#wBi|)X-=%kUS&fe5cu2u zL>K{kZ=+xp??KW|B&DY{s-k7O>BK%PCr~mQ$7E>F`Pe{mMTo>puVcDf=*)Y~xa|{Y z7ia5{5mqE(=?s4L8Io?L+hQ$r%My?XR$(Y{SW8@FrPXRQ^>1;%axNmBJ2+STjrqU&dqnCQ^UDHj%|7J`tsfhv`XwKYepdXxafSVi z^;o`&`9MpY#bLelH)Uf+UsJYyp|H+4mg<1s?A=PEH#!sUv*G)F=abN5Bw$H|FD&o^`P0UpA>U2+tJt5x zPbudIlW;~KB$hNy^7_SGaZWM^J=_u0)<#HvZ@5b7j9LOiZFuFsomuYofKwgMCUdd> z1jK}89pg8GeIu{RW;!sRPGkTT_edJGfiUZZT79;CH!-YN3+d+ru_E5W{Yk~u6~Zrh z=I7?*s_q{-a=Ab`da~uUrrihzOOWrvb4aNI;A%-{BGDy3m2ITXoqMxYdg;6+mM0yq158{$}(+)>H^Ot3ucoWj&*1Nrhy7O-A539>3sjXAi$D_<3Z2`}1&vwr>W% z^M5dJzD2JCJJwnV@GxIP+q@+@Tm0_LeWH|#)`pudI8(WF;>E?*qZV%`?5doPpjYD& zy#^{~992C9)T0Kzv^>rhGVd`kH z%l}R2%Q9*Q$fPcWQ24##pOVnkKDzp_oa+N`c(kxZS0zXBOX$@vuOe!nI_pVvyz!O* z%{*%aO_1z^>}#mJ?>TPKgphwB03T5JRIQ6U6kzd7>dXqkAuYq9(l^l&j+{HPbV5R( zAR#li<0apMCBmUis)hdbz)W=<4ROp>a&OCnrucD>U$SDSV(H0s^m%@B19@0g+5U67 z`bq)?yx7<|2fiePbLn?Tnvjn^gY0<9*AsyGDFeatn!MBZ|JIbGgM`f3YR2SuVeF zJ&YN99RrOC%TVLYxDtOqni*4zuGW(5tgt4Lpyt(GC?iRqg> zxJyn-(4BQk8;CMFnxSJl@6=;5igF9oX%qvZy3Tg4Ko#6K{(zr zvI);oFvs?deOY-*o#(oA?LPVm&!6e};?!O$54k`oTu( zREaFbvmhmPukA~|XjSWNH%o9ONyEN-{>zI%-XO#ECi#~gZE=NPb2iR3>u?jDl0m$W zO%%dc)Qr#JUSwvqHNMN1zr?n`G%!u!LNRMM`c@@g%nKo~!LNn-rK+Tnj@{#5)prqt z!{^&zy>GmtMDbccF1b#tS6-Qg-E#*oNbz-@GX@9mo8o}FiIkIMt2nrpV$S3BL4Z=p zGu(-sc<%z>4{Y?@NX9$nOSVd?Uvv(~wdgDV^XbAR1AnYz6gEUNz%+Flvf?CrYb`Hn zWKHEbsZ9dnNSQvRNAoPRn}Em5&{R%gDePpG#$`fqp2V{=8YNPCM96!N$k9XDma)Nr z9Ad&2_>)L-or!$m{;OD4Eb{E|{05bUN-qQaKXWPL9-B;AinO6qAELq+=JZJ-$-gd$WU(UvN#ZWLbgYjkb2;78<#}n_NmfTnckq z$3_Yv)+c5IyWja_R~Pq*&m;DXQb{R;SJr-}vuO0p6!y+#QK*8S)Bl-qnT{ww0P*%p zvqQO1ucN>_8`b`O4(xt$j&73PyL?1E3$i*3m5clN&}G#1ZZkSlrETZsc`feGY{3R` zeTx`{R4Ln!NQmdv!YaAX(rP5K;Cp?HK{q;l{-AqhoI;1BDX!N|SL9Y+gghMHQU7S> zk$|w`Th6lncyY2-(Qc~@J6UTq7{9(nWuj1HJ-oxTT}~BnlsY#4fzg+ofc6|~+Xr0e za4RnRGOC#WE@nmcS>Tm0Z8=k&Aq23f% z;!#Dq_1oEwDqzK6rN)25h;yuFBhqtzr6D7GM^m}R_YZ8a!TDBPW-$N#@O4!`92ok} z12Qw0CkXW$lo$|;XCmPlP(Q74>diGe^nP9gBvaVg9Tr{L&Dmg`axU)o-f0MhG=(O4 zidyDQnafQ*=>EWG0^a=X2oOfrLC|(IEcZ*_FE8CDyx0pLU0<3;*YfHfUY?TvXq-Ll z$wPs*wpM@R7Dqbejsa0(Z4x*>cTCx9VLB1a$K>d!>iU%5NSsL&FsqxiizJG|Ns#9fZ z`O7h(h~>GL%}wsW$c+4mf9Kjr))1loQxDH3F$}80jE($3&v0=W3>AN=N&2=FH_H1Q zrQFP5IQO49isNGGxw5`8aF1~s* z)_hE}^`{=dRwD4#mM&g#Cfy(Q4WnP_iCmL%Y0WY%&YP$aLY?m>;+bLFf~wg!hP|j7 zhPqr>l;>+Tw;oq{buo0lD@fuXWk{m1%=+jBtt8^7`Z4eG;>TgiA2%Eyp%~~8+*$58 zTfGj9XnvQZ5BVO3$K16O#z>vZ*OOW=+$b0d-Bwz}d~^x<0=&NS1Du;InTT*Qk>Gmo zPRm&L$KvF+N{e5ALQtxXVnils=rB_4?uK=|;I}XkxcpFJf7DaLTod&d%WDcq+W{ znIj0-5RarwV_x-W*8sMq3+CkPRpDiNUx2CenAo%pyY)e=a}C3|B5%M86xJObH{j*B z^;#Mlld5!=E>)jWpuZgBmjpTvUZ0=LikN7U^TK5yv(tU^y3Da?~WNMMs=tF!s-`>Q~fc? zxFtmPW|2&fNoHK)UF9gO?DqCYd@-1pw<);3ravcpq?-*UFL&K7++mGz#=yx^|-ZSkpbN2KT_9e4mLi9U)9Rt71eRie+ymZloeDE3=X(PXHn69#CqUktpytQl zAxRTM7wx!9ukzM9B?%91w@_!&tYRqV9{0{>=FQS#t5?08TySP@j+AxE?trH#7FUpW zE@C}U>O8*`)BYR45df;&zvYeVk$j72RPmiYusy7+Oeb0l+g}>4u%b|C)a_E8Km7An5KJj6<*av3pv(U zn(%_;&IJY0*TTE1U}(d+0Zo0$Doj2)3NnCQN)bJ`vyR$pR%^+1Z}8p?edmljdRkbl z;Y~bQ%f$)KN*!t;Lg{{Q9a;HycD8WVH4~n>j5`|~(A zZ6yy?ukim9f_>V=N%iz9t&b|Y;qRya-KF@yaMb@BS^eKn{-182)Js;<2CtAha#3h5 z?JNHfnz1Pl8cnif$aMre`3LG7Cz*@fK^yjK&(NqmEiw8A4;l*Yd(k_)h!c&+6W|>0 z^kmS9ht#unu6of5!*y&p^jD$q+6x2*E~bnH=p(dfv6O6~)He62clT9?1;T z_v-z2redA!-Kda8zD1UEGo!A7y-RwOb+xdXrKmPcqmLB3&U)`dfHXAS2Db6M zb)k+H4e-yw5jKGmj^7uc$vyE>8UrecXCO~Q+*@h%PvR}xa7cK^AN?~53eJlUtq5`s zgWIhMaYqaLRrogxH%Rvp=|vk@4Wqn@MKQUzO2*QqLiS3=Z9O|mD-9Qt$x0`x2d2r# zsT1~gK@;$=ClUpw?5@WjFjmiZl-O0Dx5PXfSQm{}dd47Kaa!`a;e+%=B^I%&&D88^ zQH)07e(T1Oty$gk4i)HdVOYfEa>_P;RjAa)>&FBp%-dyY_6W68<|0vY2bQq1%zo#T!>^3P`UTW zCJbP6C0cS={Y$725#qJn!Tw}Rs3bkSB^;D!7fAn7$_;k|;l*EE82;@Hq}@BVpP`a= zaXy!Ru}F6Ub0T4re(c1CTscABrY&o|+XP*PX89wXv(9!Hmd`eWw>1ZvGTTPF!}l!4 z8d7aZVb1ueOTC3;XFGBOz$C)0zN?vNyE1U0lcsqBEL`XPTQ`WhlVSBEBo#Jj`!#mZ zI^FyKvyQ=fxvQ;{jVqy&>@Y=% z_%=Z%7nYU8FuyA_YOb8B6{7eoz9_e3rTUK3-&w4t;NgdCv9GVC$P2@&tvlQ$q}2w_ zMR$mWKQ3gPjGE`GL?7-3Lg@sPlJ+g}k3|m^%$Exkf=1JWpr4@+T9s^F7XOM3HiGDG zH`(Ok7r<3HnvH=kP00rtrPX`Ypn-uwD5)eXqx%G<-SGtwME%Jl@Dy{T`IuRPhAD=O z{9guX-&=Cw?;X~G#6Q_=ZcthikxYYT>AguvMBmw3xgu43puVYW{G`Tevhn`M?ftuv zv2yOBi|(gP67kqPYKFOcF->Q$kNiDXgW8~!(bhK*>8^h1i-+YU(BZkD?4dCZX6@-J zN?5~h7sOjDFD~*foP^i(*ecEYo*3T7e+iJC8*!*Dr%}g+;L2}AW!h|xYJsf+f03G3G*P} z-4tKfw20%2H{KP|q|rz7#4fg{<&)o$Ke?z#LwdffSe3n}^}B?CP5O2q$ewk`#s?ky zRZ*!!p%v%8r3YO723n|g(wY8f(5)I;SOuPwaBss+W;{M&=iE`{ORqCRe8?jHkw zdF^D2Ui{GAbRPTDSPC(wmwdAjhEh7TP@bfyp{eFSmnKD1MnG)Pd7_I8!9RPZOiRZlD3Fg zlSu=-Y4*W$L`|@wSyo3P8fMzEdayZG&T*>urzo~VxB~-qx<53iZocwLhlz$7&2qhi zYzn9>9&Kzxo~G`I@xb(b3&Ap<*vVG^nRPh^>(xzPL`w3Q$L`}hpFVR<<>GPI29P3s%Yt@nR=$p*2rc4Zc6K2 zwUJgc@Kv0)F1L|PswE~H3W?)L@W&Cp{W4y6gy=+$=&83?p_PpdD=3g)AVy7r{}n;{T4 zUQLdj{rtIIad0$cwI#2y=qa6d#mpyCm<=@v7fhxwVsm{Iv&o2bT;1DA-KM(seH0i! zHPKvqDDQamQ;^210Myh*Uv>S+onYa@7JMG@U zUF|G`82$aG@Cdk*aczR4L~mNW>Ib-VPXAS*2gw_Kdy`^5c%z-D{T4XWKE!frHntn@ zND2O1yWt}iAL>zmiMQ+6OeXsBE`r_-Ko<)*I}ysNpc$)-CM50I9-EU@J-#e?|O~TO_(;BTI&p;$>U)S9Q#5Y{8D9 z(D=?jGCon-GLPMoh#b4wjq(3jR%^nwn}Jwsl0R#`4)IJ_6frm`tBRVeaD+z8A_}wC zKNabw*$MgRd~|5q=1nrsA2YHx=Egb{+5zJs3kBvLe3w0%LRRe`?V zDY%K*a{8Sen7yg^d{248>LShle6GI8@av8OeHJHroXy+>1!~%HBlZk4mZC4V)G z#$KKr7uO`Lf(hbR3;6CmnkRw3k0JAU6E&|O*B(2^H=VPpZax~u_stdO+-3@3_{cbI|M0x4yE@yDK9JVy!&BW#0uIMZW|-zxmQO9 z?%6vBt}O*fK=!9UhRh>w=SPs%^%B2L4XMwFT7*xoR5ngyb0zZkVFymsM5+I4FaO+( zpL9F)&3l)yT`^sI_u9tpF7thV=l|yZJ?AUdU;cK@ktuG%7tE@Dcl*wjC%^S+EmdsZva8OcIP8<*t_kgzba=Oy z8t&b8#xtvCm$wDq+;7W*OAS|;t-rM=sV8&o(LHZnLZAO_KK64hTkrSGb>SgVTei;j zn)P*2f7QQdKFskeKW3ggv+4P1pLvz>(zDmjYW#oVx6O{vTm0tRtv#6Fkk@ayJ+&?| zk|%CbRQ$==E4dZz&ua44EOiV$4cv2jIq9fs^u0?l>kG?Y-W;!v&vTh=p*v5DCx@7g} zHg4fLpmOc!bldEn2ddZ8l-_i3da-W4}nmvE& zcfP)^$?U}2e|NOXeY~D|2JpE_Fon3!6IP1Ls$NN*}R6*=M zxhK=^=vi-H%KPn{=9#mxA$gN^Zyox-eDagjRVQ^@mBJQ(EUH~>xIMNmY)a-egOi>I zbJk7Y^W*;AeRf~Y{;&FMHhcCJ``mK6z&CII}X-_qKg~`0m3S)gB*kjZ`d6j*8CTa&cRc_7_&yypy^+ zS$8fCIAZwWUgn0dOy^6tPDUxZ=$-2Nnlt;FNyO?WdzH5XO%!`F%}H?k^}}nWC;yC6 z_j7Z-wf5?-zq`Izf4jH#&Rj`g>3CB21Tb*>R(@Q?VR}N>A+OP&K`ssGY$ALxU+$b` z<@=oiJGA$FFFO9=P*4$f5x3FlTeCh#6jVow?wEON+tp)JH%sxgOZB?Nh}_w>EqCj_ zee1rJXd6Qur#<0jb!YcPadBN|4#&qIBX;lJ4OIDRS6_FNGI024+tpjQX3bg_S;g#@ z=a}c1Cf()Ab@Z{e*zR?~9F8$*GB5eBSk9ce=lk(%1rwtuL{EqWhwp=cDQAJsCpH>z iDn*GbR8@9*@=TX@8!B}AIEw*g7(8A5T-G@yGywq2DE)~5 diff --git a/spring-batch-docs/asciidoc/spring-batch-integration.adoc b/spring-batch-docs/asciidoc/spring-batch-integration.adoc index 7ccfa0bfa1..5eba5b80f3 100644 --- a/spring-batch-docs/asciidoc/spring-batch-integration.adoc +++ b/spring-batch-docs/asciidoc/spring-batch-integration.adoc @@ -706,10 +706,10 @@ configuration similar to the following: .Java Configuration [source, java, role="javaContent"] ---- -public Job chunkJob(ItemReader itemReader) { +public Job chunkJob() { return jobBuilderFactory.get("personJob") .start(stepBuilderFactory.get("step1") - .chunk(200) + .chunk(200) .reader(itemReader()) .writer(itemWriter()) .build()) @@ -722,7 +722,7 @@ to use for reading data on the master. The `ItemWriter` reference points to a special `ItemWriter` (called `ChunkMessageChannelItemWriter`), as described above. The processor (if any) is left off the -master configuration, as it is configured on the slave. The +master configuration, as it is configured on the worker. The following configuration provides a basic master setup. You should check any additional component properties, such as throttle limits and so on, when implementing your use case. @@ -734,7 +734,7 @@ throttle limits and so on, when implementing your use case. - + @@ -749,12 +749,6 @@ throttle limits and so on, when implementing your use case. - - - - - @@ -774,43 +768,26 @@ public org.apache.activemq.ActiveMQConnectionFactory connectionFactory() { return factory; } +/* + * Configure outbound flow (requests going to workers) + */ + @Bean public DirectChannel requests() { return new DirectChannel(); } @Bean -public IntegrationFlow jmsOutboundFlow() { - return IntegrationFlows.from("requests") - .handle(Jms.outboundGateway(connectionFactory()) - .requestDestination("requests")) +public IntegrationFlow outboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(requests()) + .handle(Jms.outboundAdapter(connectionFactory).destination("requests")) .get(); } -@Bean -public MessagingTemplate messagingTemplate() { - MessagingTemplate template = new MessagingTemplate(); - template.setDefaultChannel(requests()); - template.setReceiveTimeout(2000); - return template; -} - -@Bean -@StepScope -public ChunkMessageChannelItemWriter itemWriter() { - ChunkMessageChannelItemWriter chunkMessageChannelItemWriter = new ChunkMessageChannelItemWriter(); - chunkMessageChannelItemWriter.setMessagingOperations(messagingTemplate()); - chunkMessageChannelItemWriter.setReplyChannel(replies()); - return chunkMessageChannelItemWriter; -} - -@Bean -public RemoteChunkHandlerFactoryBean chunkHandler() { - RemoteChunkHandlerFactoryBean remoteChunkHandlerFactoryBean = new RemoteChunkHandlerFactoryBean(); - remoteChunkHandlerFactoryBean.setChunkWriter(itemWriter()); - remoteChunkHandlerFactoryBean.setStep(step1()); - return remoteChunkHandlerFactoryBean; -} +/* + * Configure inbound flow (replies coming from workers) + */ @Bean public QueueChannel replies() { @@ -818,14 +795,28 @@ public QueueChannel replies() { } @Bean -public IntegrationFlow jmsReplies() { +public IntegrationFlow inboundFlow(ActiveMQConnectionFactory connectionFactory) { return IntegrationFlows - .from(Jms.messageDrivenChannelAdapter(connectionFactory()) - .configureListenerContainer(c -> c.subscriptionDurable(false)) - .destination("replies")) + .from(Jms.messageDrivenChannelAdapter(connectionFactory).destination("replies")) .channel(replies()) .get(); } + +/* + * Configure the ChunkMessageChannelItemWriter + */ + +@Bean +public ItemWriter itemWriter() { + MessagingTemplate messagingTemplate = new MessagingTemplate(); + messagingTemplate.setDefaultChannel(requests()); + messagingTemplate.setReceiveTimeout(2000); + ChunkMessageChannelItemWriter chunkMessageChannelItemWriter + = new ChunkMessageChannelItemWriter<>(); + chunkMessageChannelItemWriter.setMessagingOperations(messagingTemplate); + chunkMessageChannelItemWriter.setReplyChannel(replies()); + return chunkMessageChannelItemWriter; +} ---- The preceding configuration provides us with a number of beans. We @@ -836,7 +827,7 @@ referenced by our job step, uses the `ChunkMessageChannelItemWriter` for writing chunks over the configured middleware. -Now we can move on to the slave configuration, as shown in the following example: +Now we can move on to the worker configuration, as shown in the following example: .XML Configuration @@ -849,7 +840,7 @@ Now we can move on to the slave configuration, as shown in the following example - @@ -889,65 +880,72 @@ public org.apache.activemq.ActiveMQConnectionFactory connectionFactory() { return factory; } +/* + * Configure inbound flow (requests coming from the master) + */ + @Bean public DirectChannel requests() { return new DirectChannel(); } -@Bean -public DirectChannel replies() { - return new DirectChannel(); -} @Bean -public IntegrationFlow jmsIn() { +public IntegrationFlow inboundFlow(ActiveMQConnectionFactory connectionFactory) { return IntegrationFlows - .from(Jms.messageDrivenChannelAdapter(connectionFactory()) - .configureListenerContainer(c -> c.subscriptionDurable(false)) - .destination("requests")) + .from(Jms.messageDrivenChannelAdapter(connectionFactory).destination("requests")) .channel(requests()) .get(); } +/* + * Configure outbound flow (replies going to the master) + */ + @Bean -public IntegrationFlow outgoingReplies() { - return IntegrationFlows.from("replies") - .handle(Jms.outboundGateway(connectionFactory()) - .requestDestination("replies")) - .get(); +public DirectChannel replies() { + return new DirectChannel(); } @Bean -@ServiceActivator(inputChannel = "requests") -public AggregatorFactoryBean serviceActivator() throws Exception{ - AggregatorFactoryBean aggregatorFactoryBean = new AggregatorFactoryBean(); - aggregatorFactoryBean.setProcessorBean(chunkProcessorChunkHandler()); - aggregatorFactoryBean.setOutputChannel(replies()); - ... - return aggregatorFactoryBean; +public IntegrationFlow outboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(replies()) + .handle(Jms.outboundAdapter(connectionFactory).destination("replies")) + .get(); } +/* + * Configure the ChunkProcessorChunkHandler + */ + @Bean -public ChunkProcessorChunkHandler chunkProcessorChunkHandler() { - ChunkProcessorChunkHandler chunkProcessorChunkHandler = new ChunkProcessorChunkHandler(); - chunkProcessorChunkHandler.setChunkProcessor(new SimpleChunkProcessor(personItemProcessor(), personItemWriter())); +@ServiceActivator(inputChannel = "requests", outputChannel = "replies") +public ChunkProcessorChunkHandler chunkProcessorChunkHandler() { + ChunkProcessor chunkProcessor + = new SimpleChunkProcessor<>(itemProcessor(), itemWriter()); + ChunkProcessorChunkHandler chunkProcessorChunkHandler + = new ChunkProcessorChunkHandler<>(); + chunkProcessorChunkHandler.setChunkProcessor(chunkProcessor); return chunkProcessorChunkHandler; } ---- Most of these configuration items should look familiar from the -master configuration. Slaves do not need access to +master configuration. Workers do not need access to the Spring Batch `JobRepository` nor to the actual job configuration file. The main bean of interest is the `chunkProcessorChunkHandler`. The `chunkProcessor` property of `ChunkProcessorChunkHandler` takes a configured `SimpleChunkProcessor`, which is where you would provide a reference to your `ItemWriter` (and, optionally, your -`ItemProcessor`) that will run on the slave +`ItemProcessor`) that will run on the worker when it receives chunks from the master. For more information, see the section of the "Scalability" chapter on link:$$http://docs.spring.io/spring-batch/reference/html/scalability.html#remoteChunking$$[Remote Chunking]. +You can find a complete example of a remote chunking job +link:$$https://github.com/spring-projects/spring-batch/tree/master/spring-batch-samples#remote-chunking-sample$$[here]. [[remote-partitioning]] @@ -960,8 +958,8 @@ image::{batch-asciidoc}images/remote-partitioning.png[Remote Partitioning, scale Remote Partitioning, on the other hand, is useful when it is not the processing of items but rather the associated I/O that causes the bottleneck. Using Remote Partitioning, work can -be farmed out to slaves that execute complete Spring Batch -steps. Thus, each slave has its own `ItemReader`, `ItemProcessor`, and +be farmed out to workers that execute complete Spring Batch +steps. Thus, each worker has its own `ItemReader`, `ItemProcessor`, and `ItemWriter`. For this purpose, Spring Batch Integration provides the `MessageChannelPartitionHandler`. diff --git a/spring-batch-samples/README.md b/spring-batch-samples/README.md index 78cfb34b84..9daf02c456 100644 --- a/spring-batch-samples/README.md +++ b/spring-batch-samples/README.md @@ -39,6 +39,7 @@ Job/Feature | skip | retry | restart | aut [multilineOrder](#multilineOrder) | | | | | | | X | | | | [parallel](#parallel) | | | | | | | | | | X | [partition](#partition) | | | | | | | | | | X | +[remoteChunking](#remoteChunking) | | | | | | | | | | X | [quartz](#quartz) | | | | | X | | | | | | [restart](#restart) | | | X | | | | | | | | [retry](#retry) | | X | | | | | | | | | @@ -644,6 +645,23 @@ the work. Notice that the readers and writers in the `Step` that is being partitioned are step-scoped, so that their state does not get shared across threads of execution. +### [Remote Chunking Sample](id:remoteChunking) + +This sample shows how to configure a remote chunking job. The master step will +read numbers from 1 to 6 and send two chunks ({1, 2, 3} and {4, 5, 6}) to workers +for processing and writing. + +This example shows how to: + +* configure a `ChunkMessageChannelItemWriter` on the master side to send chunks to workers +* configure a `ChunkProcessorChunkHandler` on the worker side to process chunks and +send replies back to the master + +The sample uses an embedded JMS broker as a communication middleware between the +master and workers. The usage of an embedded broker is only for simplicity's sake, +the communication between the master and workers is still done through JMS queues +and Spring Integration channels and messages are sent over the wire through a TCP port. + ### [Quartz Sample](id:quartz) The goal is to demonstrate how to schedule job execution using diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/MasterConfiguration.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/MasterConfiguration.java new file mode 100644 index 0000000000..4441033773 --- /dev/null +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/MasterConfiguration.java @@ -0,0 +1,139 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.batch.sample.remotechunking; + +import java.util.Arrays; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.step.tasklet.TaskletStep; +import org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter; +import org.springframework.batch.item.support.ListItemReader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.integration.channel.DirectChannel; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.config.EnableIntegration; +import org.springframework.integration.core.MessagingTemplate; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.jms.dsl.Jms; + +/** + * This configuration class is for the master side of the remote chunking sample. + * The master step reads numbers from 1 to 6 and sends 2 chunks {1, 2, 3} and + * {4, 5, 6} to workers for processing and writing. + * + * @author Mahmoud Ben Hassine + */ +@Configuration +@EnableBatchProcessing +@EnableIntegration +@PropertySource("classpath:remote-chunking.properties") +public class MasterConfiguration { + + @Value("${broker.url}") + private String brokerUrl; + + @Autowired + private JobBuilderFactory jobBuilderFactory; + + @Autowired + private StepBuilderFactory stepBuilderFactory; + + @Bean + public ActiveMQConnectionFactory connectionFactory() { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); + connectionFactory.setBrokerURL(this.brokerUrl); + connectionFactory.setTrustAllPackages(true); + return connectionFactory; + } + + /* + * Configure outbound flow (requests going to workers) + */ + @Bean + public DirectChannel requests() { + return new DirectChannel(); + } + + @Bean + public IntegrationFlow outboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(requests()) + .handle(Jms.outboundAdapter(connectionFactory).destination("requests")) + .get(); + } + + /* + * Configure inbound flow (replies coming from workers) + */ + @Bean + public QueueChannel replies() { + return new QueueChannel(); + } + + @Bean + public IntegrationFlow inboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(Jms.messageDrivenChannelAdapter(connectionFactory).destination("replies")) + .channel(replies()) + .get(); + } + + /* + * Configure master step components + */ + @Bean + public ListItemReader itemReader() { + return new ListItemReader<>(Arrays.asList(1, 2, 3, 4, 5, 6)); + } + + @Bean + public ChunkMessageChannelItemWriter itemWriter() { + MessagingTemplate messagingTemplate = new MessagingTemplate(); + messagingTemplate.setDefaultChannel(requests()); + ChunkMessageChannelItemWriter chunkMessageChannelItemWriter + = new ChunkMessageChannelItemWriter<>(); + chunkMessageChannelItemWriter.setMessagingOperations(messagingTemplate); + chunkMessageChannelItemWriter.setReplyChannel(replies()); + return chunkMessageChannelItemWriter; + } + + @Bean + public TaskletStep masterStep() { + return this.stepBuilderFactory.get("masterStep") + .chunk(3) + .reader(itemReader()) + .writer(itemWriter()) + .build(); + } + + @Bean + public Job remoteChunkingJob() { + return this.jobBuilderFactory.get("remoteChunkingJob") + .start(masterStep()) + .build(); + } + +} diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/WorkerConfiguration.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/WorkerConfiguration.java new file mode 100644 index 0000000000..84363e7b68 --- /dev/null +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking/WorkerConfiguration.java @@ -0,0 +1,126 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.batch.sample.remotechunking; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.batch.core.step.item.ChunkProcessor; +import org.springframework.batch.core.step.item.SimpleChunkProcessor; +import org.springframework.batch.integration.chunk.ChunkProcessorChunkHandler; +import org.springframework.batch.item.ItemProcessor; +import org.springframework.batch.item.ItemWriter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.integration.annotation.ServiceActivator; +import org.springframework.integration.channel.DirectChannel; +import org.springframework.integration.config.EnableIntegration; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.jms.dsl.Jms; + +/** + * This configuration class is for the worker side of the remote chunking sample. + * It configures a {@link ChunkProcessorChunkHandler} as a service activator to: + *

    + *
  • receive requests from the master
  • + *
  • process chunks with the configured item processor and writer
  • + *
  • send replies to the master
  • + *
+ * + * @author Mahmoud Ben Hassine + */ +@Configuration +@EnableBatchProcessing +@EnableIntegration +@PropertySource("classpath:remote-chunking.properties") +public class WorkerConfiguration { + + @Value("${broker.url}") + private String brokerUrl; + + @Bean + public ActiveMQConnectionFactory connectionFactory() { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); + connectionFactory.setBrokerURL(this.brokerUrl); + connectionFactory.setTrustAllPackages(true); + return connectionFactory; + } + + /* + * Configure inbound flow (requests coming from the master) + */ + @Bean + public DirectChannel requests() { + return new DirectChannel(); + } + + @Bean + public IntegrationFlow inboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(Jms.messageDrivenChannelAdapter(connectionFactory).destination("requests")) + .channel(requests()) + .get(); + } + + /* + * Configure outbound flow (replies going to the master) + */ + @Bean + public DirectChannel replies() { + return new DirectChannel(); + } + + @Bean + public IntegrationFlow outboundFlow(ActiveMQConnectionFactory connectionFactory) { + return IntegrationFlows + .from(replies()) + .handle(Jms.outboundAdapter(connectionFactory).destination("replies")) + .get(); + } + + /* + * Configure worker components + */ + @Bean + public ItemProcessor itemProcessor() { + return item -> { + System.out.println("processing item " + item); + return item; + }; + } + + @Bean + public ItemWriter itemWriter() { + return items -> { + for (Integer item : items) { + System.out.println("writing item " + item); + } + }; + } + + @Bean + @ServiceActivator(inputChannel = "requests", outputChannel = "replies") + public ChunkProcessorChunkHandler chunkProcessorChunkHandler() { + ChunkProcessor chunkProcessor = new SimpleChunkProcessor<>(itemProcessor(), itemWriter()); + ChunkProcessorChunkHandler chunkProcessorChunkHandler = new ChunkProcessorChunkHandler<>(); + chunkProcessorChunkHandler.setChunkProcessor(chunkProcessor); + return chunkProcessorChunkHandler; + } + +} diff --git a/spring-batch-samples/src/main/resources/remote-chunking.properties b/spring-batch-samples/src/main/resources/remote-chunking.properties new file mode 100644 index 0000000000..0a85c22526 --- /dev/null +++ b/spring-batch-samples/src/main/resources/remote-chunking.properties @@ -0,0 +1 @@ +broker.url=tcp://localhost:61616 diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/RemoteChunkingJobFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/RemoteChunkingJobFunctionalTests.java new file mode 100644 index 0000000000..d89b33b2c0 --- /dev/null +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/RemoteChunkingJobFunctionalTests.java @@ -0,0 +1,88 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.batch.sample; + +import org.apache.activemq.broker.BrokerService; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.batch.core.ExitStatus; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.sample.config.JobRunnerConfiguration; +import org.springframework.batch.sample.remotechunking.MasterConfiguration; +import org.springframework.batch.sample.remotechunking.WorkerConfiguration; +import org.springframework.batch.test.JobLauncherTestUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.PropertySource; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * The master step of the job under test will read data and send chunks to the worker + * (started in {@link RemoteChunkingJobFunctionalTests#setUp()}) for processing and writing. + * + * @author Mahmoud Ben Hassine + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = {JobRunnerConfiguration.class, MasterConfiguration.class}) +@PropertySource("classpath:remote-chunking.properties") +public class RemoteChunkingJobFunctionalTests { + + private static final String BROKER_DATA_DIRECTORY = "build/activemq-data"; + + @Value("${broker.url}") + private String brokerUrl; + + @Autowired + private JobLauncherTestUtils jobLauncherTestUtils; + + private BrokerService brokerService; + + private AnnotationConfigApplicationContext workerApplicationContext; + + @Before + public void setUp() throws Exception { + this.brokerService = new BrokerService(); + this.brokerService.addConnector(this.brokerUrl); + this.brokerService.setDataDirectory(BROKER_DATA_DIRECTORY); + this.brokerService.start(); + this.workerApplicationContext = new AnnotationConfigApplicationContext(WorkerConfiguration.class); + } + + @After + public void tearDown() throws Exception { + this.workerApplicationContext.close(); + this.brokerService.stop(); + } + + @Test + public void testRemoteChunkingJob() throws Exception { + // when + JobExecution jobExecution = this.jobLauncherTestUtils.launchJob(); + + // then + Assert.assertEquals(ExitStatus.COMPLETED.getExitCode(), jobExecution.getExitStatus().getExitCode()); + Assert.assertEquals( + "Waited for 2 results.", // the master sent 2 chunks ({1, 2, 3} and {4, 5, 6}) to workers + jobExecution.getExitStatus().getExitDescription()); + } + +}