hadoop-common-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject svn commit: r636044 - in /hadoop/core/trunk: ./ conf/ docs/ src/contrib/ src/contrib/streaming/src/java/org/apache/hadoop/streaming/ src/contrib/streaming/src/test/org/apache/hadoop/streaming/ src/docs/src/documentation/content/xdocs/ src/java/org/apac...
Date Tue, 11 Mar 2008 18:16:27 GMT
Author: ddas
Date: Tue Mar 11 11:16:18 2008
New Revision: 636044

URL: http://svn.apache.org/viewvc?rev=636044&view=rev
Log:
HADOOP-2765. Enables specifying ulimits for streaming/pipes tasks. Contributed by Amareshwari Sri Ramadasu and Devaraj Das.

Added:
    hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/CatApp.java
    hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/TestUlimit.java
Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/conf/hadoop-default.xml
    hadoop/core/trunk/docs/cluster_setup.html
    hadoop/core/trunk/docs/cluster_setup.pdf
    hadoop/core/trunk/docs/hadoop-default.html
    hadoop/core/trunk/src/contrib/build-contrib.xml
    hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/Environment.java
    hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java
    hadoop/core/trunk/src/docs/src/documentation/content/xdocs/cluster_setup.xml
    hadoop/core/trunk/src/java/org/apache/hadoop/mapred/TaskLog.java
    hadoop/core/trunk/src/java/org/apache/hadoop/mapred/pipes/Application.java

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Mar 11 11:16:18 2008
@@ -77,6 +77,8 @@
     HADOOP-2057.  Streaming should optionally treat a non-zero exit status
     of a child process as a failed task.  (Rick Cox via tomwhite)
 
+    HADOOP-2765. Enables specifying ulimits for streaming/pipes tasks (ddas)
+
   OPTIMIZATIONS
 
     HADOOP-2790.  Fixed inefficient method hasSpeculativeTask by removing

Modified: hadoop/core/trunk/conf/hadoop-default.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/conf/hadoop-default.xml?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/conf/hadoop-default.xml (original)
+++ hadoop/core/trunk/conf/hadoop-default.xml Tue Mar 11 11:16:18 2008
@@ -704,6 +704,8 @@
   For example, to enable verbose gc logging to a file named for the taskid in
   /tmp and to set the heap maximum to be a gigabyte, pass a 'value' of:
         -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc
+  The value of -Xmx will also directly influence the amount of virtual memory
+  that a streaming/pipes task gets during execution.
   </description>
 </property>
 

Modified: hadoop/core/trunk/docs/cluster_setup.html
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/cluster_setup.html?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/docs/cluster_setup.html (original)
+++ hadoop/core/trunk/docs/cluster_setup.html Tue Mar 11 11:16:18 2008
@@ -505,7 +505,8 @@
 <td colspan="1" rowspan="1">mapred.child.java.opts</td>
                     <td colspan="1" rowspan="1">-Xmx512M</td>
                     <td colspan="1" rowspan="1">
-                      Larger heap-size for child jvms of maps/reduces.
+                      Larger heap-size for child jvms of maps/reduces. Also controls the amount 
+                      of virtual memory that a streaming/pipes task gets.
                     </td>
                   
 </tr>

Modified: hadoop/core/trunk/docs/cluster_setup.pdf
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/cluster_setup.pdf?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/docs/cluster_setup.pdf (original)
+++ hadoop/core/trunk/docs/cluster_setup.pdf Tue Mar 11 11:16:18 2008
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 662 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 663 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gaua=9lldX&;KZO$6>[)<.+kh,Z@Ln;d+6XHD%^NR8DrMd7jRg-%V3Fc33kSnA/GqAYmH$?1!'&Hrs<4(dt$q''-d8#m0u,"(XV5jDIXF"KBI-nI'_OI4BG5*H/_F8M`H;H>*0#80%mmde%_^#:R;gmjZ&IpG8-ujUb?F\1GdpNH>Z?Rp)d@r8+I)aOYHs57TA.pP0?#%QT7p*W4ku9eOrpoiV1Fl_Eb3qL1`?lsn-tLX\HgXN3L^V3$WYA0*g15AGJEj\&s)[?9:>o^95q!Ld9tNB'BO#+^O0e=YL@PYG)F>.'81\5/Om^h1--fa,H,Z"*HZC9)[<lc$Cd1)=>,SjR\?K\;M4:<;qL]I"?`1]7LLWM6K[k2!r2Y+CP%ZeAms1mKEmhotBe448%`3X=A-:Yor@%b8c-31US!7],apk6!hELJ)?sr`3p/K6?olC>$bt*KT"]H@A0soB>TP*auuLHDJ8Chj@==$[A?rG<6u/Pi>c+,<jYWFIkTms$M8!btbr);rGqSmM![^,'i_WP](k%8muJ@eSc6i_L\#G9"lYHXq)c++,"#k;T>Ii$sVW"i#oM^5*`V;+'n=G-?NQiK]?GPK[O6C#8rK4A%@TdNN.r\OYF(AICo)>"%KIO9ecM!?"D,RlJHUe"8Z@D;'*m~>
+Gaua=9lnc;&;KZQ'fq(:Kt_CGgC>+Z</>IWK1Y.BK<\?XVSg/=P!>aqRAsM,kE)e;HDN"C?0tp[]\cUP(dt$q&nJcN#m/-M"(XS4jE=3N"KBI-nI'a!Hn5e6GCBd78=GsWc$_D?=t2b@PBnqSha-ecGY\@3]O/20.>O:Jd:H2SBV]ddmF8#6r9o'cC>%m$n](Z"Qi8Z_efi(qV5$6pWl^O[]cO0q#'K?[ZbBWTY59&Vc69TV!#lQkVA,1"KZ(+ton/Dd8j3],?Ye>u8oKbP)kkrcTJ;48_Oto45lI\LFkJUJY.JlM"*Z3c+4r+\0Uk=0'K]:OGAU>%#IQV%6,l6MbV<X49UI7X@Rc)*ju&io?g+\dkDHRIRl:k%Z[+61RFMdOTVXb*pgRQjfR\Kadb3*PHLc4uFKB($^hGpH)-P)qNsBp&p6X3`rO(G\o[`DNWFROV2`u7"kkU/iiop(GSmXr+4]#L\mrYPa"h[a!gRSm2Vg'+-7sq:7Bq.:^s$M5RoV$V<VncSEgb[$,,'e5-P\YS!8muJ?eSQ*g_L[lC9"lQp[LXV++,"#k;T=>I$le*7i#ju3^6H+u+&sCYg36kaKO\p4KMl_'-g?WFF1DhK>uta0,CX1X%ILtH%2cb/1u<1epOOoCWIE"mo]Uc**DR["~>
 endstream
 endobj
 6 0 obj
@@ -219,10 +219,10 @@
 >>
 endobj
 36 0 obj
-<< /Length 2931 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2938 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau`VgQL;L&q-CUi+$",E<m-6-#^'%Nd!#6b'KqJ<5n`"M9q%rMWF=`j4VVj01^V(;nN*d.^aHQ,ta.iT0@\M!;Q9Hjt@6(s1CYK,QIMU:$C5ij`qpIT@!<'NY9re$*m08m;MuQoCi43JFWo/s,T_'2K7Dh0!$'TE;1O3AnI,!5AkmSZjst(g*P1m`M2[0A*fXdMhq`"[>FNN@UeQ_]YUJ7Ai"YU:a+SRhL7^*C*W[r]Q#u^*W?jXR#n`sjjD-"_qFnR)eM=gDleFj%tEW!_P,@G"+kC1(Cb7X;4Qggm5ZXg(>i/r<R&gu6PjFeL$O(%?1\4o_VprHDVebW*+f1LZf!9W2a@s]_B3@Z)f(6-JD5Qp8/%<>j7>8lS<Ah2Mg3L$h!o8&<K:sp`^Pp9^l`f)WgU#*h+^9UDdXla_T334<.](4RNJ9RNg"JiP^-R`:f/Oe<M$d6-k\[NA4co6hW<pA[&[:@Pu5d+U!f_<FNT[)k9?p%Psk,9A"LG7->K-3/a<uO*Oe<O+-0"9KFj+"]pr3H(.Y$+3:NP!.Io5D?cRnF;6g#BioU6\Mk`<OT9A<(di]JQk+tc:RUo\qUJDM&H=%D1C.9Yslu?\&F4[41;P\-KJc>2XdUIU(Gd9bg8o[`l?(`gj!.7@Uo6%0ePLe-]FXJ!5$@=+'V.hM.,)fN*76UZKX6QX0WlsVq`(Kpar4Dun*O#LtrD;21k\G3VcKdf/!1?GBY(FJIK:(kr-F4K'p&Hs^5c=W+CX.9-:A&Ep#,jHlP%/rF?>)ocrO5V%P/D!]N7Lsdcp>(^"pe_XB:7=J`q$!!JW<%d"QK*A4L7^aER@g'U_=8d_@M5e>@eRj0%p=JP:TJ#PIQItoQ<M7%JZe5U8o,!c.K"`V=#m/hm6h2@g>E+cH"7Ur:gFZE)M6&P6qdQ8gIrC?t8lk%>`<D!NYkaA2-cn0/4soO(7mn4:'jmUu#nDJ=JVgAc0Co^*1r*`uRISYM/`
 Q"2CY\,]ITo4%$^eop%U'IJ[n;]t%%BOZTci5$%A+YNkCrpgg_7LU;okL,9jbU_:Tr*Ht5/-(7@r.0<?E\6`";o%]O9nZ@Hs?<0o.&#o&i(NlA@G\)@\cY=3=.NQ#32JO-G>sc+Y7fF,&RkZN3'c.#r(ek1cZP.tP>qJ5TZmE*[EB*#^?0:CI8"DdG?VL$WBV/V6QXU(1U-Xjoni^3:oGf51h:Y&:;0Y.Qlg'S6\X8;Z<iHT!dBG[T&lAoFHr+U>&Q[%j^Wq8Z&6tq7QV\'Gf@A;:BK-cr@nF))5"7dfoDL`2W*rpfH0NV1q<*YHN5V>64sV!+%;`n]nYhYHJu8coG=kW7DgMtV/9rh16X)=T_fc:JmBGW'S>uKuT0ItKp+5@MC-Esu.=o;q.\FX^NVp&54;:`"56#$H\=!.+H@0J!:&*5`QHNLZ&.dZo(6:P$pVj][_3M.G7r-%SkQNqj9X=@/V]-Bm'>(pN(BXYI;&YA7ZE.f61\E2s-b'/t%T/PRi7Ip=a9;!gFM<S-opM(V'!i"R!^1Q.QFj(D;BDAiaYOK/ha2!"XDYh3!`/MbCs;o'HgL5XMpgE7H's8/]M"`o(>DRZ7@kN`a/0P<Xt4+2.*bWG$2^2-b\M\5Wl?O]>`T]jaR+2g#p<!^%dfqL(N!Koht&W07[@]!=R9ih']A>eBf^'d`T&D!]\YF]'cmY]).\QY,(i:G&b8u8V`Z6<pJkPN)juS.N'/7Yg[&'d342=8%LX<=MujD[U[f!VFV(e^4@1R)jP+G_aq;Br9XeWu"L:JKcgguFa6>TV)cdgYhZ=ZVcF7SW$:u!s]EQY&a3X_Cle!L'43oP-=o+-RC>&J)c(G8W956^M5$8.&0,_NoaPsG<oq,dja:j?P8(]KF-u9^YmJ:hV6sW(;d'XGp4%nu]<gJgO%CuiTp505@"I'gEUcctD*Ss!j"kl363NYVC'Otb%/[a!)-Om;!NR9(&oYr[Bh@lV^\:/
 <o9*LUX#?\Fa7\_.an=1D,X!CjZ(%E8*,ZCL&jY^7Hpb$pDH"15t*fCp"ESZtAlF]!ID_J!:RkIG?<_!G'IGo\YjG2b-dQYnd:Ni$$CLcO>KTV_T=*j8&U.SB=%6H1\"qbk^7_Xq9p$J%W3bg-Okq+b];b<],\)mhiq#8/o3"Tu,,absGpH^dKH[E$_b!*McpA8qpk2>0AW-H=Ag.ko+DB-emS^G!TgN%cuV&b&9=6JR<hd0!S2rBFG9P86/?ohqJ%;cIaq\3U]b"DPm2d*hVg*Tq$1[.O#>uPj%/mL0>+^Dt=aCu;ie1#L9S(&-AD&/6oMsg-KADAQXVtRJ:>TC'?Gpq)nqJh.-fr\';<W'ucQ!ieMr;!77QZ#C80!R@Xc*>L=X4j5ZB9aJ]3blq5=oJJ[>%4dgqi[<hhPZ3tkhC=1)9e@TJjMNH5b@A#Ma+i0E2P-X\XXAUE](7hMgB]DO-_9qXsq.S(GVU2'?'C+Ss[<f:>[SXUo#h\'8aqioJ(VR_7X$qe+)686*nPS70+:VV<;:EEq4+c*aD.WS*Q'_?.liNJ^CV>^0HdZFj\#%p8JU[6^ji8q3!FFNJ:]SX86s-R`7X+a0HGj77G(<fUD'k=S2""FF&#9+qZY1Ur+WQA,H#a3O87NhN/p+SCEsVV<>!1Z:#KY.7FfJh66"F']HZH5r&L3Sc;bP9237Pjq4$Qkf5RniQEMu.X'9Xb@D.3&T0VD3Ga<lrVh2If$dd9cNVU/YnbmoT"G^$gTD>r52r'L^=SG%C[58551_.m:QG4*n*X?7'[rP=7rbbopbLi-H*6U0O'12s\Vj%dp\A^b[MQ]05FfqhiT`oX^kq#uI655.Tp%i-C53k<\83CKqKICHf9.cmi-O_tV?jhlj>d/61jQFqq]\):kPP0Z^I5;.rP8.gEH_P&K4ZRBVX)6Vb6I:Tfbg[Trr=%?)9;~>
+Gau`VgQL@#&UiQ?i1j<6i=[9K9AV5AZCLKc*:6diWlP^@+_HL9%a"4GX*'ST%nM4]F*I`D.@6loC,j\Po]ag0%=i@=DSCV1q=b?(*r3PmDF2Be/C3q_s+IhQGEfVG99<./CObrbS%!l:"3MQZr]_T8gV@[@\Zg8D^u9cfS!cG!s1%`Ad5hP;CR7RR(Q5G_NNm8./LD[#f-\p-M2@pmo*1\%Ra'VF6\T><HM[_GW/^Gen]'hkFnf<S@7&[kPXcg"%qk38h_=rTIUi=c4oCR($AV(e%1'B_?So8U7<+n8\*'\<=aXGe<])tr%UG`1(U!44FO:UY$&<:g\p8qQE0pZ"c%;kOh#Klg$%J2YDlauQ")e.`+\c'>O3d"QE(Vld/`JW,ElYe7<&qO\)AbD+"%V'BWb/iFFZ0nH]Rc>u$6qWo:^P"lBmtk94&3pE;!*%s5Xgr/=*a)"Th+g+OXUTuH'b/LdB6qI<(8_IKM%F8cm_2>T8TX3<>*-+Nd:V%RAbBh[\ut1FPI(/Hor`)'1+C%pMs^h>9&3KiP9s"Ur^`XHlX0_7E+[NMjjec095=2HqK];:4lr9R$TS-CR/fdNBTp5l$ZRaW>VNhZcAW5cWuac8Wg:r#PuIS98i>>ilMr:.`G!PFFh"C"7RVIc.B?1:0L/get$'q.dWR:Q):sVLbMkD(%qJtXfA/]W@js`'.`JMnF-?\G.df]pHrMaUT_eM3NigY!G!\Q\-`Gl$t>rdR`nq8gB5rm!M04JX?#`P3RtG^)5,hO8<3L_H(cN)p>8318e.ch0j7L-63l$j)^((ST4M1r)9\L!"Zck,'8Y7Mo#rk#`C4"9O\S%.#sS\2D3\8F\S)4q9X6X':?!Tme(5%'1uOiqLot1u2.NOrQFaCZIF!ocNu\eJ3ZgTHn`(G\^e"]59I`$7.$9URJrS<I2]t0Y#-?8!PJo3V^Vm3]4HA+TnfWITOF"*U"*3N<Q156[pkDHE*-VP=^1uQ
 7%fDJbPJFR\m0re3e5u)9o^094o]AcN7de'DpfQ4I]W/$eiKMO#*muBI)q&O&P=cCiFPJ_WQ=qHgV$K?Zds==%b&^d-`O?JkGZdHU4J]i@?IXDGj-BSf4KDI9X*!8lfViLdF:%3W)#5BV2IfuE.P;&n0U`?OB.!m*]39S3BM3(@ic)uF]$/VpO#hUn^6mt7d6>6K0?"2B7"ZPgja4ESkrDLB]!HtSU@<9+f@M$KF"nJ>X\p2!ULA;2-)(qlpn61Z,HR-_I\$A=+h0oN/tj$lYH+LTcu:Nma-(11I>i\Wk50;B;8]nWo$X'@o8a\0(l:IJHq5s4)q]gDj&%0o"]#NimZa5LhtA$6=n5`ALUL`2L[>SsgL8,-3E>mu5(<ctm9.Z$eU1%u;?DJl<'H/F)YmkHGpoP#IK%'oEA@26o_?ouS+*DJ/XNr>+We?h/KT-(mYc3@Jh(&lO4K-1cjOg^Qt5S=:,a^d-?a\%0*VErU,3XLAQdPKBBiDp:N->r*MP+._6<aZO9shWl$O*9lSC'7,\@p-"a]5</9argUc^\\P%Po=^4jp#=P\KD"eP(OfU2\-p=S>:(8\WmjCJ\XnLe[Y>&6.Z(O:0t*h-%9\[%=eTf>8b-gYbT0X(EqW#D_dF$3jF,IcP:-\+/k41'X#?aP(ZJ'ZF`(g3Ht@^36?;1Q"1VWk<.(6>@!np8Vi<-TYgA<7sTM[U4e7`\g(T(8!8hH+u*De(?W1%ouWD6mm.iRB4)3%T091C>faNQOcLe3V"kn-H/?P&INq-qF2e1#8:p'?Cqt5KEZY*N/'KD-1?XHjaKK38^lM.O80ln.n95*'a1QY@Eo<lo_mNBB_A;X(CaD1kQ^N/ZAd(pgbO5]O^r`6l(RNXoBZi8"M\F5/McJ7U`n7DqC'!-L(XFLTZVMfNE7XYd/p=B[BIeYZG)n+e[>@,NX3:lgXmn.+%t(cY4,7U)5\=DQ/Ub4_]G#CQ(/KTf8R*nX^;__Y*
 X][8]u5^Op)jD)<_/"4*r$[S!:e:_D$Y6S_*q;dQf<L$u<KSMpb]k-:;)*nPi)W6STLqY"AZ^%oNe@!.-!gD:>Z5^k[6+mmbVn75VBD]:bs,E1-b^=$fK'NLlZC"REN1Ph,c0_0W3XDbS,cr!a;8oL[XRS"2%\MYb]a7g\D_1?Pu-,HCR]aqurh:mif=8(m4[bn"K0a@ru6cCj!e99ioG2lD2lAX#bh3Rqr.IHm4]K-jQqY"AZ^%k,SA3+c>!n00iCM6q&fV^-U;c_V-]ZKGue2G-8SOln/n!]tDFQ&C^%H/MV7S]GgU/%C4h5$o%C9r`?=`g!s+QGY*5..<Ei8Ti`cU3h<d>o6*bAM`CYMrV9W<><'kKcB-]6l\,G)<n0DN8:W?I]8A4fdo\d8=\fcghlKe.RrSgm>q^nNK[c7,P_Jc=!dh',8lW#4cS3>l<:BL-&+4b2oEiQE.!]>h%49ICr5SE(p?[\qgYUR376noY^kJFo#G/-8gKSRn.'bUlWXX$0L>ISrW:5#b!>W/df[u/j0aBQBQM3p>@E(hHXuhm`OC7%"sAcnE#P?WJ^u;[nh]K*7?D2ad7ZHCGb)Z?Ic50dPMFp4-m"i/LhCQ_q%Loa.dK*VUM$8'oATO+rsEM)V`"rc]Ob7onF.uiM=cs.m8)NOX7S88L]6fmJ_D18eJdA(F15EeG4TjZd][_D'"g"O+(gW&\_MeU1-(;[S6B;*T<=US&7-4d]_![C-A-LqcoCLIf3PUjhjA8[K;r6F'(bWg\!nV7sqAiO7BK%M7r5lkA',;aasK]h*%g.@X9^!.$"*8?W;D&:\gRGThB`7G;4sJG2Ebap)5p[LN>L*A,U'D3&/(ZD[4oBFE6G4mEhUD(NG+*rs!H4>4UbU>aBfS'S.'a*60.n-L]W9=%!;gI%MMHQO&n[+8F,/mLH$?TS#nLDJZh=YcbKqJbK'b\I'>k~>
 endstream
 endobj
 37 0 obj
@@ -251,10 +251,10 @@
 >>
 endobj
 40 0 obj
-<< /Length 2896 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2667 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm>>Ee*S&q6H[iA[&PU:"mI_]-4CjW"W9(+/2Y<H'!AM3AeC.+lfR_llS9HtiC+&U%r&j,CS"rMf[0WTA?9LTbn4^HZ,p,l`;aYk=.I"[O8\19NfZ32MFIR9(Zje&)\,n,@S5)?pK=IrIN:j15)EfiF(C(a>a65)Oa`7gb4YYl#k=+"'QK>;b./PtG:cegR.3:8lolD+la5_O@qUY_Nr#]AnNNHgJqjniKO0+K(#.DjPf8^H%T.^#Va;MH<cSIjQRnqV:t_\,4a0M_J5F`Y+2[\KX:E&S<PT[1JI.#SHV*.7gCY#`U,G+`VXe]0a"C74fd$'K+de`@36"pGO:UUr]#b(Um&f5Ds%O=U/#\i'8S5a:G]$36T6(Y*).*GnaYDlC@JWl".2sQ:`OZpeJ/+;nePtP5!tF&l)@3BWQ;l=t,d$2R_c<FX(eSoi@=XK5+f\PS-4G0J&C)D4d&+.^m>IZ_?Zb'm?$QashYr6%hQF.?pK*G-W/qgX;*g#V/V=4Gp]e8-LJ3;5%L4YLM:PnrNr/X,2=uZd]RZAdOKp+UAQaU`ft2<qH;S(V(c@[c,(miUXZ1!%4"2Oi2N*aQ8&BTG'?-jZ]AL$ZXi%NA"p9*af$eRd&o:pdtI2+b'rnD";cNKZX.g@E\:Dq.i&sgX;$ecX.`8]\)B8dN67/Q.9]]cV`s5,I7NMa^"njiYKB7Ok"9YcUI7-TP^X3;5jCS4e:OA6C7:<QKDm=b.t!XA\>(>UVo:5<P4E[csEccS9Jp-07E7f=)E_.>FNt*GtBusX,<t)e*VBRML(o0OJ!*QXJWpa*`GQkR3b0oJc^TZ`I:>nEmt,SeZ?:,9C@V0D:l'ifK@`)1:=$HQ1j_@V+<-+HQ?A?abje6@a2T1HKdXY-GSFN=b&`PZ<El2M*B%i9'`fIgBNI2VNq-I#k%ok8-&Na,8'H8ikJPd&kTc@W7qL#.6rA87@s-IHZ;'CVcsa7WOVS-5KDGo:-im
 35]&rDRAp8S2t?!;r`[kXrsPLbX:H!@.0YoC[X6Ujkp=`L($?%ADqp@$$<jphA-nVC3b6rh&I7Nj@5@A>XamS!c)+_ebk<@,^HR8(:CV`Y:bmNeMXj`Tg9iX\f(keTNc7.A@#M1Iol+c+*kg"._6@Ps&IJT#"VfoB0gEWGS0q<7X9#19d0[&a&IV4?#(\g%ba(P16)%KH_;%<?Ik!b9&>JSI2'HGFn('+47mL.mWak&(7pBR*oMO*H33u>2.Q<l4V+XrLCVjVFq7,rjMQMZ#j_/Le*^!lP\/!.'6!Mc[Fc,71IMGYW.cUDFEi4#F[$So7pU\$q[q0T1C+Z+IEhBp/bEgO2G=rLH@,Ws&JAk^UhW5c%6Z+2jbl%sg_JDPd/"UoFG!Oq-.@t017Z:dj1tc!%eZK8O048-b#@d`2j/;Y5Zps%"f(M98!LfT_>dlWGa3-&aJl\m$5,HT_G'pQQbMO6,(>9f@7(`"PMu"--cq&W%mE;j7ptD*Yq!.[47a[;XF@R-QATc;(,a5<L9rA;@S9gK4fbQ&=hl/-7bRuI$*Y9m:6llhoXJP9S*cb<bf>;0j.E5brqo:Se_d("t"nq\Of#+mIHLuNX"B!KbP!Q\5>#eYROks?'3+904Q1qg`*C47[0Jt9\?s6/7-U@$Mno&lr*V$Ip)`EQmZcKk:_C2X`auR0qS>^7gLL$_ZQ0gB#7tp02Nh^<"/Ek8&]W%E!!SSW'1:&_+1juc'.I2es\Nl\A0H?9kJ"B\,BSUALOb_"?3M\CrjFHR@q(`JIdAkF:YPT#VOf^fRfp6p\n[1+=n9+HqBbr'iRGXXc9HFl,k89%k[DZ>\&?V)6SPE*b:miV%%=%u=2F$;Q@%X[l(HBV>Qo3=%do#N?jBD>kr=D^_/;`FD:*U42UhrLshuA#Hiof"$\<<*mKMhV]PLL9I`26_0>)Z%1CE'Ihf5%sa)q3DfelQhnD9fI!AHJ?Di$".meAEq;d)p-1c"P
 U;\$FF%2suUDHdLB'bCPPJJ%H^]6R.U^`(YYE`d.,P*0Q#i04Ptj6TLp*3UNWYRMnc>];3n0e+N[/hI2g=>@f+N"!/_#rDO=R8^Kt&r_TYX4t##6Lp\7.Xs,<GdBJmOXD.i3C#SEBW6X<[$]]"5A]"8FmJi'EG\'V8G,QiiYNS*]TeB&NA;Ynh^P"8<#S0@`pk]@\b@=EaYi0Fe8(l-$N$DSE7f:(r,p\0nqe-\:O:KVSDGY)4nTHE=Tm_8<Kki:i!Hd\YPl9WFPgr4b)-C2G;Yr\NJ==AA`_m+u6B7.,;_2K>Oc'nXVOd#3jm=N'bZ>h0JZ-0Jr*h"tYE5;1):e[kdgUB"&.4&_Veu^ekrWlGe[Nj\gl5=SeIT7C;LQK"\6ILL&3#s;nNhtH5NU.?\Ru^aX(i[3O5G0m3$ddP*&C`CYa9^TQcJS<C;7hPFY3s5([nWrO4L&EaTL5FW9CAZl70n`DT]d0E__Q0k8Yp)a%HRm5QR@>mrGh"lRgB"M>c-F$@BO&pJe3[LH_W@%AG+YVKM1`+i&X:UqI729F#X;8_N+!@g-\A5fVl.?G=0SC#sY6hhsT5QZCAN6a<(.=INnS*Z3n\%oGUSK;UN4Q0[fodh8fI_g\Af++7*)C?f'W#Jh!-?)G#(F/o^GhWXe3OB0qTT;mg_aH3SSY7=cY/VIZ7.U=;a\LU"o5f^-TCMd=.p2Xpqo&`u&U<4!ljq&nTXZmc`cricL8CH1Q]0`Uak&s:%@Al/WG]2I5Hc5?aa/$:Pc)<Z\"=f$Hj:-V8k3cJ[RSI"iQ*>qrp9q?mHacpn@".j94GmZUEoZ#AbF%:\6l;+?pogkiH9-[[P^XbqpJ8a%_u@dA"LKW7^$[#'eOp>J)BZobEi@kN5X8#0kN9Gc2)dMbbDN>]$3tNDrsQe_XEO~>
+Gatm>gQL=$&Ug:Tcs+._.h$FX-#^%%-e[3r3>j-.Wb`_9&i=&k$!NK1n)Wd:'"g%mO8uAiCM!^KdHEdX4q0FBIeW?0h8:lVGk7YYrqqi\.+j2]W.$O/^YWuDUG*m]6>W58rq>j\\"CHTN0<'nS1AT^IUe[WE>7rBG_"d=rDSnl'<q=1dRU'SSCGu?e1,6"7U+tdEC0Wb[5"fYOu8f2K_bI*T<[[_YP$B]*TlB7p"nEuN)b(Mc0)h1fQR#Z,Mq?>`-97WT^b'>s7(hP;GZ?f;6nlG2ue?9Q^=_6H269.9;5P5GZUHS0M'O\G,^5$4FXd8cXuph<$NV9LpY1RXJg#N50Q$FZRjtk!\)K`RMA`^D/3T`'d>eRQ^>a.FqrBP[/;\<?:7ef<gb+n+^!K\+_&],9/K@@RI^^Kbu5$<XI8E+hUp7K)bfL(_\tG@l+Gi-@u7LL`ZCDurrbAIS'WmcNX[&=D#7h*W@+:]%3Z?Z&L'MK6H"sk2FOVQH(U#M'0sU*@C)?s0eH^"Z(CsDZo2GJ:Qh;WdQElnZkA.&k"um%FH^"=CMMn>B:37qMf&8j<oQ58^Qic+8j[$Q@qMQ7fJCc4]l)r6]&"pP16ARU@nfS\b0X<mLr4'_<i?:Aba-iKX:s"P7N-Q.KWQ4?aA,*_db56aCh4d8Gea3F7&;FaFA2F/^$SGqj8k,iiU:fOqLQ`CE7*GCEPZGGirOldfC*a@qa'B^,]"5A5KNtgJ?JY.,^Bp\N&2h(AN`2tb8t?pH;\P[(/P%2NY?r)eAl>2$X@^EfL6'>$-Nt4d^i)g\k4o9[)2Ni`O+gD/n*@,$QaiN1?:&8W?6Z7%?i\Q!@FiP"V3;')02'jg^cHd!+E26q+LF%JnG3lYd\n$cDk$iRF3o7IBB#NiZYGPj[=da\g6:@HcAG^WCQ&lQ.C\'@;@'mR)$jIo+HA`*KQq.Npt40l%+dF%IWeQqB<u9^sO#+_8-fj&Qqk$%m4ZrE0l@
 8%m@s@@C'?eC8/Uf9NSXonG'E4.e'tY.:[P,#kpc0I%8J7_s8]?b>"oJq[jUhVWg?Bdraf<2Ea"=.10R^Q2XG_mjIVX"<>A)%#/`JcM5F[Z%@GmDq]C%_-Xl/j]N"e]t>>kQWoSQRCirH^S^gD8O7@.5]&rD=j?Zr46bi\r`I^&i-V,sD.`!/"r>$kpO3tD/^^b;P+.!Z\ukNHl.iEX'4>hDd+H?r4@&@)-Bhin$L$3lC:26KeUA$-D[>:h<QE]@gqt`PEFSCI^^1L(Xb)>n@RmXicc'0r)q0[KqJ-r?f<BiT$oa+JLp`ZH3A&[cW'k&]X<g4EaQ>9`R+rP^l3fART[of)Yu68N#c<+&.;FKkH:QM5L'tOR]?G[H[09T,`h?iC2F?VkCe/O0BEWHq3Rq<b;Jk(m;m&t=G<U%bO"tA<`g0BR?jl=-[qDKZ5WJ$J2MF,`s2ntR($Y^U3[^I4rT3>5??`Of%nn$h=TeOb#cK,dbQ?JYe-+\:<utk!!3q:KI3*E)r+n)E3T0s'`f5`qjRZ,:&a0scicX4Y7,o+1D/r[TqO@`X-:%0"LZC/gqr\Kd=^r/>Y\S1n&p-&'[-:q@_oqHF%'<dEQD%a>e&O'm^U2k"ZoUZ)3gK%Hgl4E_@t`Z2[^3KP78$i,ZR?3Z'V`4Jkc1Y*Sr6k$a#,[%XWd`"$FMrnT"\-!A=4B;RQhoqI"aet!3rEfI3*E)r%,Zo8/!-3FI?f>5"QA"&JTRs-G%AZ`cU564<])[35ltfNNK32l7$X+76Ei@`T3S-;dWXp,>N*9!1[)2_ugULT_rsD\M&Q;Oi(dn1G5t?AMG[=ZcY;C*AgbSbkap<.bjEBSiTE?FW?g7"`u/Vn2f!n!]3<\@cLM2ZhaT`,c%?dp6O'Q?oX$YIkn'\K-&Y2U7Nj\ifL"@[fc%PQco;?+.^RPb0CqDN&OO;Y%?Hm>hd,^*p:Q87FX\(3%jh";jOKIL%I5knli/WQPVth]"$
 (#l3Sn\"%dPM"DRb:o<1+rm&+D%o>8I=)YZ874^k]#cf<'egqP+lbb@)J(b+$*'FjH6V`]B5HnMU>;?TbSmMgpiN+.=(W<9/u"Umh*F*IA%c1^F)qDPGO-?#RCH'5HIY]g<Vk>]D_Hm8`a^%TVcXd]/g<gqt/D:3M:g72k;;:2gnPF43`k(prlm*DU%/3_1.=D7jn`_ejh2em/tSK(L=K-X2Gik:)#-L`s?LK+O)b0&*Mn0rD*5=4%N->4of?gHOh?:Fht@Vl@ZWt6R2)Kp9o]@oSM3]R!fWtY8=`Gpm=.QFfArJtZX>5#=;NfIa041Yi=<#</k49\^]21.E$dVcd&mp7`cngK@sp:j,F;>)Moo*FLk@_lTO&s@jg4rT2+Xs[mV:F@&lV&smo5A"l\'d\A7I_Fer4NXn?W&t1:.m[qMoeTEc32fq/Td\t-75`%fL(gsd;)l"j^5%!@K##mH$W!\OGFm\FV"kb2;m)j@\9]?g(pR5"7^rq\UqO95%oV]a>Z@1d2X`g<Ph3\E,c]UAe;;c>%])"<lL4I].M'P,VS3Wr=cb<O7nIn>d.VFiV)U0Ds10h?8]:Df;F-kM6b\DFnc`f/+6<*saBhX"`r0PenLu.Q&.PD^WV-j(71!B",`gL-'V<]:b1l%)gn>lF/I11tD:Soh<u"!nl1b7=SGrhn>u(1~>
 endstream
 endobj
 41 0 obj
@@ -263,19 +263,35 @@
 /MediaBox [ 0 0 612 792 ]
 /Resources 3 0 R
 /Contents 40 0 R
-/Annots 42 0 R
 >>
 endobj
 42 0 obj
+<< /Length 2722 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=D3*F0')oV[63moD!P5X+;/cEA9sWG(g2&CR_0rg5!j,/N9Op_[AGc(Xrq?oq3g<1;HT2."9M:m7c91\,rU[qG]8)=%0-"a8J)=U$2R+jkpYfKAaj6<VDj/OlXccnL(]V#?q=tKL-VW3t\dg9H_R#$BL#)+%iK%KVHPn&W(g7GslX-h4TnJQ[eg50D^%sVDDFM!^D>i48pdM+5%>[`r?8[]D_BMKIm1$'q[F?M:93\e_nN,!S;=1(:e[VW'*#m63Ys,k1/t@G)OPs-B)ZJVue.,(2LVl'M"i9d3lX\h\p2leIXYlJ%#XJZ#'ld^43`Q5r*G8OB9Z1HDLi@e%1UDbkg2SJq2pJhu>A#NO@-U4`;"X0Q`92f>#&IbB$^uLas')`KV48L[W>;J"/aJsc?rIZO$YDLCgi4\spJ&BZk?2B%<u!<0q2;iH!dmuJZNK49Kk)+'m<9aaeUkcN^`9s"MdG;*nXcBDo)"deS%K^WBe,3co$e!NJZK[[DCoU/>-4s&=oCE7=<`q1$V9i)ZYK&u'P1V?Z51(kKZl`8L(%I0,%MorNi^=BccMl\o=aoPT,?67V?jPh\NKMNZV]j0i;r:Bm"j:8b.&442K&O="^FB5pMl1s/^Dr-U-](IfpC<$n/q/Sd=A1YLEqg,`bl$TpPf0NbGXsjh")QG\\S:/<!N:00_\[?*9OVO4Q*_ub9+dDDJG4p0-#o`m?Fep'HD[URII:1itNS1d`'t.FY8ZBr)[^j29/J-9%"SIAths_])Z]]SC:4Y4(M]WN.'d^<6*='YO@V>BpJ]X/l0*l6JL(='-C+O@)k5iT]`%QEnkf+Jl`B[iK'J/[s*$<^]&QRrp/=n:OfO%__Jai3>t13h0tK!Xf2fqOC/@h1^,@8*dO`r18[<Aei3nRpls!SCe2;3&fIHTiCrQoUWoELp$1Q_iDh0F0rAd0I(sL87#<635TdX&*hRAYfZM']\CuQ2>;[\48jtER9oP.
 K\<,fP_%X'cpuSn3H(lS*4O[K_U#drXQdg+POh&i:QmurNAR/;8HB4;saU`N6W&<F*1IcF"^qYY@s'Gfm`E*=oe^rI=L&N[#,;#Ge`d"($*$NA_dk!bA!aGjP71b>b8n?XHY[B$C(]1]BG=``V!iE(H4sD49/(pbl,J79[.G?U,SNC%q<1YPtl4D@1S'5MuYu#Qeb;6koJh6I!SaL4ed5*'K!9sG(8tZp]\0D\="S*u98I8q(:U9*9*q@#cl:mkIq+5k'!(Uq*bVOgTmBN+0JF1),T!HF<]:ORrhmN.3/M9QGlb7*)mLi3C/q@j'Ns5Hc_[*GH5gsUIE@Xg=:Q*[KD[*#rFcA_SRjpHj"n390pIk)pX_'!]XX[XXW1n0FP8A"3'l!SVYbB.7Mt>YG"*[H/duKbAU:f!Z&#bZOg=2(Z'$N%_jXF\rCQG+^,!4;e18<#G2Dg4W[=f?5;ulg96E]Y6Vpu-A=e3CYoFhS.G!KIGTrJ6s>qOZ3e)J]k:US0Zk]@MS/.7D+_%fQ\YLb'3*,R_j`'6:60[Ff86u8?lS%A<D@8GTDU^:+[@WUL+Imf2VBQMhle.B9O9@=U9g+c933-,,8MNl`&O[:)=V0I[K1;TX+"n:J'cbHT'nEk`u*>a3HpYf;=nYN=mS`s_qHKWsAU"[Q/:1V"(:=i9q879INbB"n`\9=eh1!C:iGJCigF!X2f1eCN2_58E@BpWO#7RKd]i3mQNQig';pJ4&ma48]HBNd=VgO/@Q[oBg'p1(;DV"QUa?4+[=gOY*Uhl+F5XubYMIZ'--:OIT+\Lhk7qFakYLo-[u/n=.2G'8t6IS@"]TlOS9o@4j'!8B]ulQoj_DbTD+gY>;o<pJ=jH;r]2_rF*K5V67;Gk7L%@i^J$HXEjK?Nu<+10$fsAk^5s`-Q,MM-LZfpZEJo]1h602__KC3B0tq7et(PmGS*ndU&uqNqmmQLZ-Ntp$m4ig)L<B8j18mTXcudNYI
 5c2eV$;2c>`/JEqK,m,P;)7GC\;6Ld<ZHb>*A/cdr7ESp5I*0]!&^-8@J6oLJV%#*.K2bb%KXBoZ=+U&KrpI;prJ8/:dJT:?odZ8<2cJ%ZPfD;'NWs+M]ArW>Xk:Wp8^+[hP/S01fb7W9Es*7/*-mE(A&lX^jq0iX!6AIr@<CO_dR)ARe6o"`c;Op4Hlj0hP6Jb';B[]TV)__kB.aXCu_fW!M%7Z'QfVM?W#<\S;B<HM+--?>0-9P6QV'tWZ0KPbE,g2Fh!=mFf@;OI*a]:s%XCc\dAn(8NJc.H!f?pWM7nHqTqF<p6VMY>Sa3]>A/6R*#HJ(nFG;"6Ol;h_:am2<^iSZ5]8":`o<Q%mkhpdn&.Jr&.OSOQJYt\4Tm2;@G"mS8/PE&TVb%SD3?gNFHnJP8:G'#p1^YFr4Y.g*a+*kH9iT2_&Cas(@Ka0bZ01i+!c6)b@\1?\\Xo#7_epD>fLrmZ6S+0\\nZ0uO%+;Z2)uoGrhW%ge,uOGe@L4%<Ys<oZj>=7+4a6:S/YfhQ:AJi]e-ZL\0[bS&c&\q+>+.gRkn!8L5bc&leuL_S+W8#+LY=.U;R('fZss=dn2^b*l(-n]S";i+;^4DMW>3!F`(1_e2LLIm>g_[Y-QK`m/taN+eigr%*7#jlmo^e9GF\X[gZ#1HgKbK(+De?6HHs$pOHAM&/'N1as#Su>n+08%lM,T#c#nKVekM,:[&k@Tg-qdK6>PF_HE>4*]>"=Z#l_U~>
+endstream
+endobj
+43 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 42 0 R
+/Annots 44 0 R
+>>
+endobj
+44 0 obj
 [
-43 0 R
-44 0 R
+45 0 R
+46 0 R
+47 0 R
 ]
 endobj
-43 0 obj
+45 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 172.32 157.906 236.64 145.906 ]
+/Rect [ 172.32 631.828 236.64 619.828 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (http://logging.apache.org/log4j/)
@@ -283,10 +299,10 @@
 /H /I
 >>
 endobj
-44 0 obj
+46 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 274.968 157.906 407.628 145.906 ]
+/Rect [ 274.968 631.828 407.628 619.828 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (http://commons.apache.org/logging/)
@@ -294,31 +310,10 @@
 /H /I
 >>
 endobj
-45 0 obj
-<< /Length 2498 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-GatU4D3*F0')oV[63moT!P5Y:GP/iSgS@ELBX>89#5@(s#\9@3fuTm;dIo.%rU2\PA8s#]g:]"o'MHOfc9.VBjr+-iE:rh?eK7lBgVCRJ=1M+S01cfOIh\ruY="qF.&UCp]]I]$YC:e<6]e+^s(`PhDe"h4nEs_5je)8Bn/q?"]l?@O5Ook=hEPA5U0dH9^+CTHodd7h1AULab=ZTRf:q(9ZI=kmHDMFKd!puMb:E/+qj7'H$QPaaPkKm%#6u+QP2Y>T"=,1UBH-Dc-Ump2+8dTH)d[FeZPF)RTB(Gb_@WZ%m3%dFpaM&6f_b3CAbs@&`DS@t;h*B2@Mk%>m8Q;]#TSl?/6ORZU='Q%;%@g]JE7T-L-\Q70@SNiYnEcSi$B82,8[3s0unQ-_R#fnQBth:?\+_Q146/!ml,1R;<V"-IaH9u<ci$0MQMeb-1umX;=2bXhTZ3F;Nc]al0rosH%5GJmdB,e?glj"I<5;Mcc(,hcELen0ne!B(Nn?-h'Pr9-$09;RK=LF&$.WUd4%o!''B7Lcc@ZYL@Q:!OY]HB?CZ=PB_1Ckqsd*XZEE62$<^QA@Q3bnj:D\?5VDjMO3b;RqO8lVWO8DuV]&H9Ko9KJ_.ZI5DVnmK]7uSuc1-ir]Odq%+IAMI],l^5oqbE0:6C5r80ZO:UrnFlkj/m!G9cgefh4spdu:P:"`WIgmJehJ^%_rmGNTlK]WhE.iesD?"3g;:/fA,Yjl6M0`W<RTG_IO[dhK!f8-!^kL&>C]1_;;(OX8r>@M0o+o!=Ha#!9\_)`'oY%E]I3L*)@u#$_6T3cd)L+qd>4)+6&k2Nr_iSrd?k#?pn$,nT13Y402&!kkiqcr;\$jFOY4!G#h=ZME5*I,Ka*/ZMD_NVB:%m7pRA$"2at=7^X?4n8DRk4PIh8O)P,G?A*cg)HXUH$9_#57&HOBrJQV1V?ikVfm]MgN\?n>#Cj]An2f,-%\n%._;]@kSAsIX$hM>(G,T
 5f6lJLMRo(U-s!urWoDFb6R,QdQaIh7cVi#o$ko+%9/HNmO".]%Y%Bf(i2.Z6mo4Jn7Hj'PGJ)d*eiDDq><!P>^74/@*Yk-=6C+qQENoLT-L5-]IRI#dE\E4s#tta%FL,5KV8YZ[5Ksu$[,Sl&fG6H+^u\$(Y?!4\*,@V18:M%Qi.QtSN'<1b`hoFm@+nPn&EUcgENlcg_^sATE<g=j7pS-jX-jT;"g/ld7#!K6poCB]`/PJr8@EmP\`KPO;[_O,Q.mZb.g0#t=_Z7BYO=Zf<FU>.X*ctaCgh6Z56n2o;/U[(3Y\rKCj67Jk#>ZS;\Jqpl,5PW]YF@2k<Baio!q<nk#ON#@8+:q%5Ol\,`;J+a&iG7>K<uI"@?@sDN5jgC7T:0@rDY6(T-_Jm%l.%L$+E.TdoIe\#Arnk&?*VcFAJ`MWXaK>O?EJX'C>W;G3A'<--'%Tq\j<%RH\KeF74MEWOS+h!kETm=SNckopJd(/2/B`ooNBTKW\A^t]I<j26.mEb@Tj_So9TPQe8&kFN_a5)HVe[*eRb1M@01R[Zs7\=;n&CKJ-LM?@oJZ&(HmG7q7[o$McoMA+=6o(jKC)*/1ML7=7539,?1hPYSSQ+F^A#5KBo5ou!PJ6!9g.N>!ZSklXOoo@mW?N\46G2jHCcs&dg!O%FHE5iuL.1?'$35UKemX)3j[]TnGOLXbOR2h.:SQP80jq8U\&B;TOSXZL6EED%%qdH.,4ZiW)"0-2a"n_*'U`\KC]P+c]?J0Zp@2:gpR2$(s+59+WA"SlB<lqRVo8),-^BG7so(3?IX2R]>S"lU7Ous7K;_S^hQsLh*%4"?Q,F@MXJ=:/e.DhcQcOF\UaRRcQ.lG?2fFhC&CLU@XZ5rH),WL"m)_'2&0fS'bU25*"(ZX`ON%:<_'L<RL7N,_%O!.,tO?Qh'oU9*R_'92Ff59=jYA/WO[U\k5#BJ;3IkkJUhe-",_hDFk<nuL]91WN0`P/cSmb8
 Y4Di>`+NHA3"F<1@WV;,A0#Ht\\-i=_6<CPB.@7aSZmua5YU7sA3gY)&71eU,H7Ae<qcBfXk)3IA^NE#8[W]:M1-6\5CFtPu;6-n:7&aGPNqqVm/7Bs:T:SB.somV'XF0`.:ek@,Rqs?/B0hLCd5K/]PoH&Li2\LiC]26Fs??9Y5:N")8hG^'FZ"F*?WM?\lPTmY!7HlR"]lm38OKm0.pSIDFrYc:kbQ3bCUQ%oE&!2dcTl;.1nC2Jn"o*hrO#'$Z>F[JFK:RigP*l*lnA]"5B6a%/oKpHKJDT_?94k&fHhA7KIJOfI"^VDn#ju_Q9#;kJ@+HY](a@=-dM-RZ$+uV.[A4e7h(rnoOG00Q#blc?`Yh;RF>X*$cP$k\3WXjn$+&"%,EeTpr)dd&EE[sGTRICY#g4?E.8DB\)FLu.@Logn%0h>hMrq;+S*_XNdd2')5tpr$nGQ=i#&<NA2iYse]tP:uGoS00rlJBLY?**;-"pMTjSe([G)+Z8o\!tJ1j8m&+k]\$~>
-endstream
-endobj
-46 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 612 792 ]
-/Resources 3 0 R
-/Contents 45 0 R
-/Annots 47 0 R
->>
-endobj
 47 0 obj
-[
-48 0 R
-]
-endobj
-48 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 172.332 293.775 206.988 281.775 ]
+/Rect [ 172.332 234.403 206.988 222.403 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (api/org/apache/hadoop/net/DNSToSwitchMapping.html#resolve(java.util.List))
@@ -326,186 +321,186 @@
 /H /I
 >>
 endobj
-49 0 obj
-<< /Length 1305 /Filter [ /ASCII85Decode /FlateDecode ]
+48 0 obj
+<< /Length 1470 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!#\>Ar7S'Roe[cpJmQ@%kQO['qr]f+hE9eU#u)K!AunW%;\pe-Lg-pJIY*;R.%\\H"pW`/"&snDcMN5O2f9q'DL-1P+CTs8G%cIGfI21&[Hck4L%k)'E6/]t;B.PE4+%3hm`aqOM:[nQRYRs$4nT;?W@_]P-@(GnI%Mg:`Jd;-'EiX=<MZ:Eigh\+V#Jb=WOniEk'cfHt<IX\?mi>1IT+4&rDR&$Dams*?SI$Hnri^Pi$\X,Q@u4=C`Qp\sl\cb8.E#fqJh1KA80nL\BoCQ1;&X!5*T.sEMe,aIK)::0hBQY8Df+(4OaK`OI9V!iC2k*mqMflXpJG.3coNQb?QmE4O2=6;+A4e@=]*;KCVo.IJ4TXdc$@:-#k<SJd'3RFeN7cXN4>q,'_)Cc[3(!A@8AYK?I&1[fB#QrN2ac4=#VT!%aqh.m5qgKn'Ka&@s",G=5k%21V6+K194*0S!/K`(B+U!aH4jHTR:^DZEHatPfghl#W<:4a;AXuk5mo0K!_ut[Bp/8R#pX=o`gY4C=Y&8/ihl_J+qVSYR`=H+C7#$A<es^T(Ueuk$,6fq_eqfn_4p%\Gefg%ho?k>r(75kYj'@R8S1"L*,D1EZ=NHI?Ql=q(B4llq9gUK4Qnp]oEYLN]e"_M)K_^on5k?d!6$E^/eQl.1`V8N;)2+ITpsAUh$UAGej!Y:O6sdrZ";-aB+d>hld.'(K,GP#UlU?&$/hhVZr9"Xmij^)mWD%gSBgHfMNTpolL'NabhuWuhj*%(?;1:`8#3;59\rNu1"Oe7?Uj9%PbQ,]-AEI9%hTaYp'ru2[$[='`M&nD"+DTsbeGk+$q:VmC))f4,,raqTeKk%KE@N'*818Co+4og('+nU/]mP?d<'F3>i24Wl)'%]uN6d1hl8ubb'#AnHBfEq.pkNTYfoKVKkj[<Ec"QN/F+uqoTcbBE&M4'lr'W]W*\"(9]KRJ>#kd<B7N3RJr".5HgT.@g9Gg#b=l=.
 1PGaUufcJ-D6U0j^Jdh>-:3$MmiM0X4>-jkU30,[sLU5DP65iI<rEkpHW,=->c1'et/h!A'"7aTR/oIUbrI?$Vq`TQK!X,lLl9lR=="kkf)nMWEUK<PTji"tIE/4N_Th0&H$KiPm%!`Xjp*%r'g0@[$m`LjXkuSf5qAaIc;_5Y#PX_i-pNcuaXWSm8aE@`7&M)O+`LZRnDkPQ7#]W2%-Z5#D&2NMS7.1;J:ff-]09Xksm<fs3M#=+2]X<jiF)+2K8n37i`PT%GC0>CBiN17&S].<q<!F=$F#M$OF-hn=93M2>o4rpS+'/-R,6~>
+Gb!#\gMZ%0&:O:Sk[>R=5g>*D;<gN"h5"r"5a1ThDb[K5/D:k?(0sLl&JY3<N\34]fs9^EJA?scd[D'Ebfo%.5#2Bt:'U_,YVV'LhZeXi>fZFuph%1O*`<e/-^2ini6T7&al%3X*DGCHa_]m97P9(m;]B`fGqO.b9BWL:6pAa=s6'k_jlf%Uo^t&2/u8$l-;G1:HB?.;.a<lf4Y:3?-\mH.e@9e$1-Ja<]J)\-<tg=L?hAIQk!/KO)6R"[3kt]nVnt8G#HCnIX;1GIBC_mQ#,?ukdE'2h%r4&a`*'-,9oR8XE%n=K@)mo4#jTt14JZ9<KTT._4WYDJ<ifA^^B=:U).K2HXT7@,SL%YqJ-Qq%U5hH83aQ.41[s^:fecjpKaI.1>'Et<.a=,)]&Pq=\r7RE7`!kbO2`2CrZbYW^WC.PQ$^\ALU,1<!;Xn%7k._tLNf92N?1JBe9:bo[YfDI-Sg1'36Rq<)%Sb.0Dhl.q#NU&DS>!g]j,B9D<B8c.8psQ4YrTcX))6e-'`MhRM]NRfHX41i_I^1.S8+o9%n+PjV#B/8^Cr5eEl]8=-:_eGoB`QFX"f/5_77_NSFRR[hTgPRqI<thD.0`&4-pgS<0a!LX@YCq;N[^Y0fcJGpFlZ(dY'g#%n&`"DZMrcDOgX1.sRJQ'nR-?RI2&(.X]])+Hg!,CK:\k0s"Zh:M*sGIO@9f=uh4mkR\Ua7;2LNXGBsY/AC/3Dq!UGd.T/doDH4+>0J?[^*E;K"Eri`:L%P1>Q5k7<i8R'U"/SAl0tCWhWKZP:WiE8UttX`i7o]aD,Z&lklVMrJ([L4gdG,9G?=;_&)bu.F2:f*Pn/UFO0Gej"jGS/9.oai>BmOe>)aUeJ-H4pJ$;3iXq40S@9KNDYr$)_SM.VT*X0Ao%`B*KN3O?Y'O(N%>)%E$ei?"`T=]YSq,ZZ]a-/39:"C<1k2F5Ui7:T%G$Z\0laa+(QmFISa)A)?Nl[1eKos"INN]
 (TuHe-hMqt"k.B.b:$#JMn"W%U.*ijUlm)a3js%CMH]Ng/Wi,Q`:uurfVAB89(B(!?cq80@=&pCWqOP)^4GSMJ8B<qa2%/dnR1rg]f\U_)19'2>[X!p;_*3QVC"]oX8ZhiI'BZ%i:-Zp-+*HQILpud.>b2M!kso'L'AeL,Gs6B#q\*'f5d.L$H_bM&OuWgBO#':EnNs06P<:CSZN:cZ8s6P$]J=uPj#,et&C5fQ+b].+GiA7Pjf;Hg&FAd%^47MWJj<&`meZ/bl7jE=QKd-p)<1FImH$WAMD,A%^fnDWJHFdBkMf+KKA+S0Aa=bIq<G<WL0]?5Do@SBj\e^=fiH8RK.@3EBXhXT?c0F]64%/tfWDC\KgZ((`p6[LJS%(5!<6JZCKFSPop!Ge790B)0+k`"M6BFfFbLl2C+/DaVcEO^<fb:9<c#XsQl2lG)MLV];Il0F\Z#g6m+`H$>\9&D`YuAe!UU:T_u~>
 endstream
 endobj
-50 0 obj
+49 0 obj
 << /Type /Page
 /Parent 1 0 R
 /MediaBox [ 0 0 612 792 ]
 /Resources 3 0 R
-/Contents 49 0 R
+/Contents 48 0 R
 >>
 endobj
-52 0 obj
+51 0 obj
 <<
  /Title (\376\377\0\61\0\40\0\120\0\165\0\162\0\160\0\157\0\163\0\145)
- /Parent 51 0 R
- /Next 53 0 R
+ /Parent 50 0 R
+ /Next 52 0 R
  /A 9 0 R
 >> endobj
-53 0 obj
+52 0 obj
 <<
  /Title (\376\377\0\62\0\40\0\120\0\162\0\145\0\55\0\162\0\145\0\161\0\165\0\151\0\163\0\151\0\164\0\145\0\163)
- /Parent 51 0 R
- /Prev 52 0 R
- /Next 54 0 R
+ /Parent 50 0 R
+ /Prev 51 0 R
+ /Next 53 0 R
  /A 11 0 R
 >> endobj
-54 0 obj
+53 0 obj
 <<
  /Title (\376\377\0\63\0\40\0\111\0\156\0\163\0\164\0\141\0\154\0\154\0\141\0\164\0\151\0\157\0\156)
- /Parent 51 0 R
- /Prev 53 0 R
- /Next 55 0 R
+ /Parent 50 0 R
+ /Prev 52 0 R
+ /Next 54 0 R
  /A 13 0 R
 >> endobj
-55 0 obj
+54 0 obj
 <<
  /Title (\376\377\0\64\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\141\0\164\0\151\0\157\0\156)
- /Parent 51 0 R
- /First 56 0 R
- /Last 57 0 R
- /Prev 54 0 R
- /Next 70 0 R
+ /Parent 50 0 R
+ /First 55 0 R
+ /Last 56 0 R
+ /Prev 53 0 R
+ /Next 69 0 R
  /Count -8
  /A 15 0 R
 >> endobj
-56 0 obj
+55 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\61\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\141\0\164\0\151\0\157\0\156\0\40\0\106\0\151\0\154\0\145\0\163)
- /Parent 55 0 R
- /Next 57 0 R
+ /Parent 54 0 R
+ /Next 56 0 R
  /A 17 0 R
 >> endobj
-57 0 obj
+56 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\40\0\123\0\151\0\164\0\145\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\141\0\164\0\151\0\157\0\156)
- /Parent 55 0 R
- /First 59 0 R
- /Last 67 0 R
- /Prev 56 0 R
+ /Parent 54 0 R
+ /First 58 0 R
+ /Last 66 0 R
+ /Prev 55 0 R
  /Count -6
  /A 19 0 R
 >> endobj
-59 0 obj
+58 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\61\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\151\0\156\0\147\0\40\0\164\0\150\0\145\0\40\0\105\0\156\0\166\0\151\0\162\0\157\0\156\0\155\0\145\0\156\0\164\0\40\0\157\0\146\0\40\0\164\0\150\0\145\0\40\0\110\0\141\0\144\0\157\0\157\0\160\0\40\0\104\0\141\0\145\0\155\0\157\0\156\0\163)
- /Parent 57 0 R
- /Next 61 0 R
- /A 58 0 R
+ /Parent 56 0 R
+ /Next 60 0 R
+ /A 57 0 R
 >> endobj
-61 0 obj
+60 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\62\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\151\0\156\0\147\0\40\0\164\0\150\0\145\0\40\0\110\0\141\0\144\0\157\0\157\0\160\0\40\0\104\0\141\0\145\0\155\0\157\0\156\0\163)
- /Parent 57 0 R
- /First 63 0 R
- /Last 63 0 R
- /Prev 59 0 R
- /Next 65 0 R
+ /Parent 56 0 R
+ /First 62 0 R
+ /Last 62 0 R
+ /Prev 58 0 R
+ /Next 64 0 R
  /Count -1
- /A 60 0 R
+ /A 59 0 R
 >> endobj
-63 0 obj
+62 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\62\0\56\0\61\0\40\0\122\0\145\0\141\0\154\0\55\0\127\0\157\0\162\0\154\0\144\0\40\0\103\0\154\0\165\0\163\0\164\0\145\0\162\0\40\0\103\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\141\0\164\0\151\0\157\0\156\0\163)
- /Parent 61 0 R
- /A 62 0 R
+ /Parent 60 0 R
+ /A 61 0 R
 >> endobj
-65 0 obj
+64 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\63\0\40\0\123\0\154\0\141\0\166\0\145\0\163)
- /Parent 57 0 R
- /Prev 61 0 R
- /Next 67 0 R
- /A 64 0 R
+ /Parent 56 0 R
+ /Prev 60 0 R
+ /Next 66 0 R
+ /A 63 0 R
 >> endobj
-67 0 obj
+66 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\64\0\40\0\114\0\157\0\147\0\147\0\151\0\156\0\147)
- /Parent 57 0 R
- /First 69 0 R
- /Last 69 0 R
- /Prev 65 0 R
+ /Parent 56 0 R
+ /First 68 0 R
+ /Last 68 0 R
+ /Prev 64 0 R
  /Count -1
- /A 66 0 R
+ /A 65 0 R
 >> endobj
-69 0 obj
+68 0 obj
 <<
  /Title (\376\377\0\64\0\56\0\62\0\56\0\64\0\56\0\61\0\40\0\110\0\151\0\163\0\164\0\157\0\162\0\171\0\40\0\114\0\157\0\147\0\147\0\151\0\156\0\147)
- /Parent 67 0 R
- /A 68 0 R
+ /Parent 66 0 R
+ /A 67 0 R
 >> endobj
-70 0 obj
+69 0 obj
 <<
  /Title (\376\377\0\65\0\40\0\110\0\141\0\144\0\157\0\157\0\160\0\40\0\122\0\141\0\143\0\153\0\40\0\101\0\167\0\141\0\162\0\145\0\156\0\145\0\163\0\163)
- /Parent 51 0 R
- /Prev 55 0 R
- /Next 71 0 R
+ /Parent 50 0 R
+ /Prev 54 0 R
+ /Next 70 0 R
  /A 21 0 R
 >> endobj
-71 0 obj
+70 0 obj
 <<
  /Title (\376\377\0\66\0\40\0\110\0\141\0\144\0\157\0\157\0\160\0\40\0\123\0\164\0\141\0\162\0\164\0\165\0\160)
- /Parent 51 0 R
- /Prev 70 0 R
- /Next 72 0 R
+ /Parent 50 0 R
+ /Prev 69 0 R
+ /Next 71 0 R
  /A 23 0 R
 >> endobj
-72 0 obj
+71 0 obj
 <<
  /Title (\376\377\0\67\0\40\0\110\0\141\0\144\0\157\0\157\0\160\0\40\0\123\0\150\0\165\0\164\0\144\0\157\0\167\0\156)
- /Parent 51 0 R
- /Prev 71 0 R
+ /Parent 50 0 R
+ /Prev 70 0 R
  /A 25 0 R
 >> endobj
-73 0 obj
+72 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F3
 /BaseFont /Helvetica-Bold
 /Encoding /WinAnsiEncoding >>
 endobj
-74 0 obj
+73 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F5
 /BaseFont /Times-Roman
 /Encoding /WinAnsiEncoding >>
 endobj
-75 0 obj
+74 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F6
 /BaseFont /Times-Italic
 /Encoding /WinAnsiEncoding >>
 endobj
-76 0 obj
+75 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F1
 /BaseFont /Helvetica
 /Encoding /WinAnsiEncoding >>
 endobj
-77 0 obj
+76 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F9
 /BaseFont /Courier
 /Encoding /WinAnsiEncoding >>
 endobj
-78 0 obj
+77 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F2
 /BaseFont /Helvetica-Oblique
 /Encoding /WinAnsiEncoding >>
 endobj
-79 0 obj
+78 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F7
@@ -515,18 +510,18 @@
 1 0 obj
 << /Type /Pages
 /Count 7
-/Kids [6 0 R 27 0 R 35 0 R 37 0 R 41 0 R 46 0 R 50 0 R ] >>
+/Kids [6 0 R 27 0 R 35 0 R 37 0 R 41 0 R 43 0 R 49 0 R ] >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 1 0 R
- /Outlines 51 0 R
+ /Outlines 50 0 R
  /PageMode /UseOutlines
  >>
 endobj
 3 0 obj
 << 
-/Font << /F3 73 0 R /F5 74 0 R /F1 76 0 R /F6 75 0 R /F9 77 0 R /F2 78 0 R /F7 79 0 R >> 
+/Font << /F3 72 0 R /F5 73 0 R /F1 75 0 R /F6 74 0 R /F9 76 0 R /F2 77 0 R /F7 78 0 R >> 
 /ProcSet [ /PDF /ImageC /Text ] >> 
 endobj
 9 0 obj
@@ -568,150 +563,149 @@
 21 0 obj
 <<
 /S /GoTo
-/D [46 0 R /XYZ 85.0 357.509 null]
+/D [43 0 R /XYZ 85.0 298.137 null]
 >>
 endobj
 23 0 obj
 <<
 /S /GoTo
-/D [46 0 R /XYZ 85.0 151.975 null]
+/D [49 0 R /XYZ 85.0 628.6 null]
 >>
 endobj
 25 0 obj
 <<
 /S /GoTo
-/D [50 0 R /XYZ 85.0 452.6 null]
+/D [49 0 R /XYZ 85.0 391.066 null]
 >>
 endobj
-51 0 obj
+50 0 obj
 <<
- /First 52 0 R
- /Last 72 0 R
+ /First 51 0 R
+ /Last 71 0 R
 >> endobj
-58 0 obj
+57 0 obj
 <<
 /S /GoTo
 /D [35 0 R /XYZ 85.0 573.347 null]
 >>
 endobj
-60 0 obj
+59 0 obj
 <<
 /S /GoTo
 /D [35 0 R /XYZ 85.0 408.775 null]
 >>
 endobj
-62 0 obj
+61 0 obj
 <<
 /S /GoTo
 /D [37 0 R /XYZ 85.0 399.6 null]
 >>
 endobj
-64 0 obj
+63 0 obj
 <<
 /S /GoTo
-/D [41 0 R /XYZ 85.0 282.85 null]
+/D [41 0 R /XYZ 85.0 240.1 null]
 >>
 endobj
-66 0 obj
+65 0 obj
 <<
 /S /GoTo
-/D [41 0 R /XYZ 85.0 185.078 null]
+/D [43 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
-68 0 obj
+67 0 obj
 <<
 /S /GoTo
-/D [46 0 R /XYZ 85.0 641.8 null]
+/D [43 0 R /XYZ 85.0 582.428 null]
 >>
 endobj
 xref
-0 80
+0 79
 0000000000 65535 f 
-0000024200 00000 n 
-0000024300 00000 n 
-0000024392 00000 n 
+0000024333 00000 n 
+0000024433 00000 n 
+0000024525 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000000824 00000 n 
-0000000944 00000 n 
-0000001025 00000 n 
-0000024537 00000 n 
-0000001160 00000 n 
-0000024600 00000 n 
-0000001297 00000 n 
-0000024666 00000 n 
-0000001432 00000 n 
-0000024732 00000 n 
-0000001569 00000 n 
-0000024798 00000 n 
-0000001706 00000 n 
-0000024864 00000 n 
-0000001843 00000 n 
-0000024928 00000 n 
-0000001980 00000 n 
-0000024994 00000 n 
-0000002116 00000 n 
-0000025060 00000 n 
-0000002253 00000 n 
-0000004484 00000 n 
-0000004607 00000 n 
-0000004662 00000 n 
-0000004831 00000 n 
-0000005008 00000 n 
-0000005184 00000 n 
-0000005397 00000 n 
-0000005596 00000 n 
-0000008559 00000 n 
-0000008667 00000 n 
-0000011691 00000 n 
-0000011814 00000 n 
-0000011841 00000 n 
-0000012048 00000 n 
-0000015037 00000 n 
-0000015160 00000 n 
-0000015194 00000 n 
-0000015378 00000 n 
-0000015566 00000 n 
-0000018157 00000 n 
-0000018280 00000 n 
-0000018307 00000 n 
-0000018534 00000 n 
-0000019932 00000 n 
-0000025124 00000 n 
-0000020040 00000 n 
+0000000825 00000 n 
+0000000945 00000 n 
+0000001026 00000 n 
+0000024670 00000 n 
+0000001161 00000 n 
+0000024733 00000 n 
+0000001298 00000 n 
+0000024799 00000 n 
+0000001433 00000 n 
+0000024865 00000 n 
+0000001570 00000 n 
+0000024931 00000 n 
+0000001707 00000 n 
+0000024997 00000 n 
+0000001844 00000 n 
+0000025061 00000 n 
+0000001981 00000 n 
+0000025127 00000 n 
+0000002117 00000 n 
+0000025191 00000 n 
+0000002254 00000 n 
+0000004485 00000 n 
+0000004608 00000 n 
+0000004663 00000 n 
+0000004832 00000 n 
+0000005009 00000 n 
+0000005185 00000 n 
+0000005398 00000 n 
+0000005597 00000 n 
+0000008560 00000 n 
+0000008668 00000 n 
+0000011699 00000 n 
+0000011822 00000 n 
+0000011849 00000 n 
+0000012056 00000 n 
+0000014816 00000 n 
+0000014924 00000 n 
+0000017739 00000 n 
+0000017862 00000 n 
+0000017903 00000 n 
+0000018087 00000 n 
+0000018275 00000 n 
+0000018502 00000 n 
+0000020065 00000 n 
+0000025257 00000 n 
 0000020173 00000 n 
-0000020362 00000 n 
-0000020540 00000 n 
-0000020764 00000 n 
-0000020979 00000 n 
-0000025175 00000 n 
-0000021228 00000 n 
-0000025241 00000 n 
-0000021628 00000 n 
-0000025307 00000 n 
-0000021971 00000 n 
-0000025371 00000 n 
-0000022274 00000 n 
-0000025436 00000 n 
-0000022436 00000 n 
-0000025502 00000 n 
-0000022630 00000 n 
-0000022827 00000 n 
-0000023057 00000 n 
-0000023246 00000 n 
-0000023427 00000 n 
-0000023540 00000 n 
-0000023650 00000 n 
-0000023761 00000 n 
-0000023869 00000 n 
-0000023975 00000 n 
-0000024091 00000 n 
+0000020306 00000 n 
+0000020495 00000 n 
+0000020673 00000 n 
+0000020897 00000 n 
+0000021112 00000 n 
+0000025308 00000 n 
+0000021361 00000 n 
+0000025374 00000 n 
+0000021761 00000 n 
+0000025440 00000 n 
+0000022104 00000 n 
+0000025504 00000 n 
+0000022407 00000 n 
+0000025568 00000 n 
+0000022569 00000 n 
+0000025632 00000 n 
+0000022763 00000 n 
+0000022960 00000 n 
+0000023190 00000 n 
+0000023379 00000 n 
+0000023560 00000 n 
+0000023673 00000 n 
+0000023783 00000 n 
+0000023894 00000 n 
+0000024002 00000 n 
+0000024108 00000 n 
+0000024224 00000 n 
 trailer
 <<
-/Size 80
+/Size 79
 /Root 2 0 R
 /Info 4 0 R
 >>
 startxref
-25566
+25698
 %%EOF

Modified: hadoop/core/trunk/docs/hadoop-default.html
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/hadoop-default.html?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/docs/hadoop-default.html (original)
+++ hadoop/core/trunk/docs/hadoop-default.html Tue Mar 11 11:16:18 2008
@@ -68,6 +68,10 @@
                for compression/decompression.</td>
 </tr>
 <tr>
+<td><a name="io.serializations">io.serializations</a></td><td>org.apache.hadoop.io.serializer.WritableSerialization</td><td>A list of serialization classes that can be used for
+  obtaining serializers and deserializers.</td>
+</tr>
+<tr>
 <td><a name="fs.default.name">fs.default.name</a></td><td>file:///</td><td>The name of the default file system.  A URI whose
   scheme and authority determine the FileSystem implementation.  The
   uri's scheme determines the config property (fs.SCHEME.impl) naming
@@ -429,6 +433,8 @@
   For example, to enable verbose gc logging to a file named for the taskid in
   /tmp and to set the heap maximum to be a gigabyte, pass a 'value' of:
         -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc
+  The value of -Xmx will also directly influence the amount of virtual memory
+  that a streaming/pipes task gets during execution.
   </td>
 </tr>
 <tr>
@@ -535,10 +541,6 @@
 <tr>
 <td><a name="io.seqfile.sorter.recordlimit">io.seqfile.sorter.recordlimit</a></td><td>1000000</td><td>The limit on number of records to be kept in memory in a spill 
   				in SequenceFiles.Sorter
-  </td>
-</tr>
-<tr>
-<td><a name="io.seqfile.compression.type">io.seqfile.compression.type</a></td><td>RECORD</td><td>The default compression type for SequenceFile.Writer.
   </td>
 </tr>
 <tr>

Modified: hadoop/core/trunk/src/contrib/build-contrib.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/build-contrib.xml?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/build-contrib.xml (original)
+++ hadoop/core/trunk/src/contrib/build-contrib.xml Tue Mar 11 11:16:18 2008
@@ -193,7 +193,7 @@
     <mkdir dir="${hadoop.log.dir}"/>
     <junit
       printsummary="yes" showoutput="${test.output}" 
-      haltonfailure="no" fork="yes" maxmemory="256m"
+      haltonfailure="no" fork="yes" maxmemory="1280m"
       errorProperty="tests.failed" failureProperty="tests.failed"
       timeout="${test.timeout}">
       

Modified: hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/Environment.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/Environment.java?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/Environment.java (original)
+++ hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/Environment.java Tue Mar 11 11:16:18 2008
@@ -89,6 +89,17 @@
     return arr;
   }
 
+  public Map<String, String> toMap() {
+    Map<String, String> map = new HashMap<String, String>();
+    Enumeration<Object> it = super.keys();
+    while (it.hasMoreElements()) {
+      String key = (String) it.nextElement();
+      String val = (String) get(key);
+      map.put(key, val);
+    }
+    return map;
+  }
+  
   public String getHost() {
     String host = getProperty("HOST");
     if (host == null) {

Modified: hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java (original)
+++ hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java Tue Mar 11 11:16:18 2008
@@ -22,6 +22,7 @@
 import java.nio.charset.CharacterCodingException;
 import java.io.IOException;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.Iterator;
 import java.util.Arrays;
@@ -34,6 +35,7 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.Reporter;
 import org.apache.hadoop.mapred.OutputCollector;
+import org.apache.hadoop.mapred.TaskLog;
 import org.apache.hadoop.util.StringUtils;
 
 import org.apache.hadoop.io.Text;
@@ -164,14 +166,23 @@
       addEnvironment(childEnv, job_.get("stream.addenvironment"));
       // add TMPDIR environment variable with the value of java.io.tmpdir
       envPut(childEnv, "TMPDIR", System.getProperty("java.io.tmpdir"));
-      sim = Runtime.getRuntime().exec(argvSplit, childEnv.toArray());
-
-      /* // This way required jdk1.5
-         Builder processBuilder = new ProcessBuilder(argvSplit);
-         Map<String, String> env = processBuilder.environment();
-         addEnvironment(env, job_.get("stream.addenvironment"));
-         sim = processBuilder.start();
-      */
+      if (StreamUtil.isCygwin()) {
+        sim = Runtime.getRuntime().exec(argvSplit, childEnv.toArray());
+      } else {
+        List<String> cmd = new ArrayList<String>();
+        for (String arg : argvSplit) {
+          cmd.add(arg);
+        }
+        // set memory limit using ulimit.
+        ProcessBuilder builder;
+        List<String> setup = new ArrayList<String>();
+        setup.add("ulimit");
+        setup.add("-v"); 
+        setup.add(String.valueOf(Runtime.getRuntime().maxMemory() / 1024));
+        builder = new ProcessBuilder(wrapCommand(setup, cmd));
+        builder.environment().putAll(childEnv.toMap());
+        sim = builder.start();
+      }
 
       clientOut_ = new DataOutputStream(new BufferedOutputStream(sim.getOutputStream()));
       clientIn_ = new DataInputStream(new BufferedInputStream(sim.getInputStream()));
@@ -185,6 +196,29 @@
     }
   }
 
+  /**
+   * Wrap command with bash -c with setup commands.
+   * Setup commands such as setting memory limit can be passed which 
+   * will be executed before exec.
+   * @param setup The setup commands for the execed process.
+   * @param cmd The command and the arguments that should be run
+   * @return the modified command that should be run
+   */
+  private List<String> wrapCommand( List<String> setup,
+                                    List<String> cmd 
+                                   ) throws IOException {
+    List<String> result = new ArrayList<String>();
+    result.add("bash");
+    result.add("-c");
+    StringBuffer mergedCmd = new StringBuffer();
+    mergedCmd.append(TaskLog.addCommand(setup, false));
+    mergedCmd.append(";");
+    mergedCmd.append("exec ");
+    mergedCmd.append(TaskLog.addCommand(cmd, true));
+    result.add(mergedCmd.toString());
+    return result;
+  }
+  
   void setStreamJobDetails(JobConf job) {
     jobLog_ = job.get("stream.jobLog_");
     String s = job.get("stream.minRecWrittenToEnableSkip_");

Added: hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/CatApp.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/CatApp.java?rev=636044&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/CatApp.java (added)
+++ hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/CatApp.java Tue Mar 11 11:16:18 2008
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.hadoop.streaming;
+
+import java.io.*;
+
+/** A minimal Java implementation of /bin/cat
+ *  The class also tries to allocate a huge array( 10MB) to test ulimits.
+ *  Look at {@link TestUlimit}
+ */
+public class CatApp {
+  public static void main(String args[]) throws IOException{
+    char s[] = null;
+    try {
+      s = new char[10*1024*1024];
+      BufferedReader in = new BufferedReader(
+                              new InputStreamReader(System.in));
+      String line;
+      while ((line = in.readLine()) != null) {
+        System.out.println(line);
+      }
+    } finally {
+      if (s == null) {
+        System.exit(-1);
+      }
+    }
+  }
+}

Added: hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/TestUlimit.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/TestUlimit.java?rev=636044&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/TestUlimit.java (added)
+++ hadoop/core/trunk/src/contrib/streaming/src/test/org/apache/hadoop/streaming/TestUlimit.java Tue Mar 11 11:16:18 2008
@@ -0,0 +1,142 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.hadoop.streaming;
+
+import java.io.*;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.dfs.MiniDFSCluster;
+import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapred.MiniMRCluster;
+import org.apache.hadoop.mapred.TestMiniMRWithDFS;
+import org.apache.hadoop.util.*;
+
+import junit.framework.TestCase;
+
+/**
+ * This tests the setting of memory limit for streaming processes.
+ * This will launch a streaming app which will allocate 10MB memory.
+ * First, program is launched with sufficient memory. And test expects
+ * it to succeed. Then program is launched with insufficient memory and 
+ * is expected to be a failure.  
+ */
+public class TestUlimit extends TestCase {
+  private static final Log LOG =
+         LogFactory.getLog(TestUlimit.class.getName());
+  enum RESULT { FAILURE, SUCCESS };
+  String input = "the dummy input";
+  Path inputPath = new Path("/testing/in");
+  Path outputPath = new Path("/testing/out");
+  String map = null;
+  MiniDFSCluster dfs = null;
+  MiniMRCluster mr = null;
+  FileSystem fs = null;
+
+  String[] genArgs(String memLimit) {
+    return new String[] {
+      "-input", inputPath.toString(),
+      "-output", outputPath.toString(),
+      "-mapper", map,
+      "-reducer", "org.apache.hadoop.mapred.lib.IdentityReducer",
+      "-numReduceTasks", "0",
+      "-jobconf", "mapred.child.java.opts=" + memLimit,
+      "-jobconf", "mapred.job.tracker=" + "localhost:" +
+                                           mr.getJobTrackerPort(),
+      "-jobconf", "fs.default.name=" + "localhost:" + dfs.getNameNodePort(),
+      "-jobconf", "stream.tmpdir=" + 
+                   System.getProperty("test.build.data","/tmp")
+    };
+  }
+
+  /**
+   * This tests the setting of memory limit for streaming processes.
+   * This will launch a streaming app which will allocate 10MB memory.
+   * First, program is launched with sufficient memory. And test expects
+   * it to succeed. Then program is launched with insufficient memory and 
+   * is expected to be a failure.  
+   */
+  public void testCommandLine() {
+    if (StreamUtil.isCygwin()) {
+      return;
+    }
+    try {
+      final int numSlaves = 2;
+      Configuration conf = new Configuration();
+      dfs = new MiniDFSCluster(conf, numSlaves, true, null);
+      fs = dfs.getFileSystem();
+      
+      mr = new MiniMRCluster(numSlaves, fs.getUri().toString(), 1);
+      writeInputFile(fs, inputPath);
+      map = StreamUtil.makeJavaCommand(CatApp.class, new String[]{});  
+      runProgram("-Xmx2048m", RESULT.SUCCESS);
+      FileUtil.fullyDelete(fs, outputPath);
+      assertFalse("output not cleaned up", fs.exists(outputPath));
+      // 100MB is not sufficient for launching jvm. This launch should fail.
+      runProgram("-Xmx0.5m", RESULT.FAILURE);
+      mr.waitUntilIdle();
+    } catch(IOException e) {
+      fail(e.toString());
+    } finally {
+      mr.shutdown();
+      dfs.shutdown();
+    }
+  }
+
+  private void writeInputFile(FileSystem fs, Path dir) throws IOException {
+    DataOutputStream out = fs.create(new Path(dir, "part0"));
+    out.writeBytes(input);
+    out.close();
+  }
+
+  /**
+   * Runs the streaming program. and asserts the result of the program.
+   * @param memLimit memory limit to set for mapred child.
+   * @param result Expected result
+   * @throws IOException
+   */
+  private void runProgram(String memLimit, RESULT result
+                          ) throws IOException {
+    boolean mayExit = false;
+    int ret = 1;
+    try {
+      StreamJob job = new StreamJob(genArgs(memLimit), mayExit);
+      ret = job.go();
+    } catch (IOException ioe) {
+      LOG.warn("Job Failed! " + StringUtils.stringifyException(ioe));
+      ioe.printStackTrace();
+    }
+    String output = TestMiniMRWithDFS.readOutput(outputPath,
+                                        mr.createJobConf());
+    if (RESULT.SUCCESS.name().equals(result.name())){
+      assertEquals("output is wrong", input, output.trim());
+    } else {
+      assertTrue("output is correct", !input.equals(output.trim()));
+    }
+  }
+  
+  public static void main(String[]args) throws Exception
+  {
+    new TestUlimit().testCommandLine();
+  }
+
+}

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/cluster_setup.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/cluster_setup.xml?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/cluster_setup.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/cluster_setup.xml Tue Mar 11 11:16:18 2008
@@ -272,7 +272,8 @@
                     <td>mapred.child.java.opts</td>
                     <td>-Xmx512M</td>
                     <td>
-                      Larger heap-size for child jvms of maps/reduces.
+                      Larger heap-size for child jvms of maps/reduces. Also controls the amount 
+                      of virtual memory that a streaming/pipes task gets.
                     </td>
                   </tr>
                   <tr>

Modified: hadoop/core/trunk/src/java/org/apache/hadoop/mapred/TaskLog.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/java/org/apache/hadoop/mapred/TaskLog.java?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/java/org/apache/hadoop/mapred/TaskLog.java (original)
+++ hadoop/core/trunk/src/java/org/apache/hadoop/mapred/TaskLog.java Tue Mar 11 11:16:18 2008
@@ -205,31 +205,44 @@
                                                 File stderrFilename,
                                                 long tailLength
                                                ) throws IOException {
+    return captureOutAndError(null, cmd, stdoutFilename,
+                              stderrFilename, tailLength );
+  }
+
+  /**
+   * Wrap a command in a shell to capture stdout and stderr to files.
+   * Setup commands such as setting memory limit can be passed which 
+   * will be executed before exec.
+   * If the tailLength is 0, the entire output will be saved.
+   * @param setup The setup commands for the execed process.
+   * @param cmd The command and the arguments that should be run
+   * @param stdoutFilename The filename that stdout should be saved to
+   * @param stderrFilename The filename that stderr should be saved to
+   * @param tailLength The length of the tail to be saved.
+   * @return the modified command that should be run
+   */
+  public static List<String> captureOutAndError(List<String> setup,
+                                                List<String> cmd, 
+                                                File stdoutFilename,
+                                                File stderrFilename,
+                                                long tailLength
+                                               ) throws IOException {
     String stdout = FileUtil.makeShellPath(stdoutFilename);
     String stderr = FileUtil.makeShellPath(stderrFilename);
     List<String> result = new ArrayList<String>(3);
     result.add(bashCommand);
     result.add("-c");
     StringBuffer mergedCmd = new StringBuffer();
+    if (setup != null && setup.size() > 0) {
+      mergedCmd.append(addCommand(setup, false));
+      mergedCmd.append(";");
+    }
     if (tailLength > 0) {
       mergedCmd.append("(");
     } else {
       mergedCmd.append("exec ");
     }
-    boolean isExecutable = true;
-    for(String s: cmd) {
-      mergedCmd.append('\'');
-      if (isExecutable) {
-        // the executable name needs to be expressed as a shell path for the  
-        // shell to find it.
-        mergedCmd.append(FileUtil.makeShellPath(new File(s)));
-        isExecutable = false; 
-      } else {
-        mergedCmd.append(s);
-      }
-      mergedCmd.append('\'');
-      mergedCmd.append(" ");
-    }
+    mergedCmd.append(addCommand(cmd, true));
     mergedCmd.append(" < /dev/null ");
     if (tailLength > 0) {
       mergedCmd.append(" | ");
@@ -253,6 +266,34 @@
     }
     result.add(mergedCmd.toString());
     return result;
+  }
+
+  /**
+   * Add quotes to each of the command strings and
+   * return as a single string 
+   * @param cmd The command to be quoted
+   * @param isExecutable makes shell path if the first 
+   * argument is executable
+   * @return returns The quoted string. 
+   * @throws IOException
+   */
+  public static String addCommand(List<String> cmd, boolean isExecutable) 
+  throws IOException {
+    StringBuffer command = new StringBuffer();
+    for(String s: cmd) {
+    	command.append('\'');
+      if (isExecutable) {
+        // the executable name needs to be expressed as a shell path for the  
+        // shell to find it.
+    	  command.append(FileUtil.makeShellPath(new File(s)));
+        isExecutable = false; 
+      } else {
+    	  command.append(s);
+      }
+      command.append('\'');
+      command.append(" ");
+    }
+    return command.toString();
   }
   
   /**

Modified: hadoop/core/trunk/src/java/org/apache/hadoop/mapred/pipes/Application.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/java/org/apache/hadoop/mapred/pipes/Application.java?rev=636044&r1=636043&r2=636044&view=diff
==============================================================================
--- hadoop/core/trunk/src/java/org/apache/hadoop/mapred/pipes/Application.java (original)
+++ hadoop/core/trunk/src/java/org/apache/hadoop/mapred/pipes/Application.java Tue Mar 11 11:16:18 2008
@@ -52,6 +52,8 @@
   private Socket clientSocket;
   private OutputHandler<K2, V2> handler;
   private DownwardProtocol<K1, V1> downlink;
+  static final boolean WINDOWS
+  = System.getProperty("os.name").startsWith("Windows");
 
   /**
    * Start the child process to handle the task for us.
@@ -82,7 +84,16 @@
     File stdout = TaskLog.getTaskLogFile(taskid, TaskLog.LogName.STDOUT);
     File stderr = TaskLog.getTaskLogFile(taskid, TaskLog.LogName.STDERR);
     long logLength = TaskLog.getTaskLogLength(conf);
-    cmd = TaskLog.captureOutAndError(cmd, stdout, stderr, logLength);
+    // set memory limit using ulimit.
+    if (!WINDOWS) {
+      List<String> setup = new ArrayList<String>();
+      setup.add("ulimit");
+      setup.add("-v"); 
+      setup.add(String.valueOf(Runtime.getRuntime().maxMemory() / 1024));
+      cmd = TaskLog.captureOutAndError(setup, cmd, stdout, stderr, logLength);
+    } else {
+      cmd = TaskLog.captureOutAndError(cmd, stdout, stderr, logLength);
+    }
     process = runClient(cmd, env);
     clientSocket = serverSocket.accept();
     handler = new OutputHandler<K2, V2>(output, reporter);



Mime
View raw message