hadoop-zookeeper-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From maha...@apache.org
Subject svn commit: r787780 [1/3] - in /hadoop/zookeeper/trunk: ./ docs/ src/docs/src/documentation/content/xdocs/
Date Tue, 23 Jun 2009 18:38:34 GMT
Author: mahadev
Date: Tue Jun 23 18:38:33 2009
New Revision: 787780

URL: http://svn.apache.org/viewvc?rev=787780&view=rev
Log:
ZOOKEEPER-315. add forrest docs for bookkeeper. (flavio via mahadev)

Added:
    hadoop/zookeeper/trunk/docs/bookkeeperConfig.html
    hadoop/zookeeper/trunk/docs/bookkeeperConfig.pdf
    hadoop/zookeeper/trunk/docs/bookkeeperOverview.html
    hadoop/zookeeper/trunk/docs/bookkeeperOverview.pdf
    hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html
    hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf
    hadoop/zookeeper/trunk/docs/bookkeeperStarted.html
    hadoop/zookeeper/trunk/docs/bookkeeperStarted.pdf
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperConfig.xml
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperOverview.xml
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperStarted.xml
Modified:
    hadoop/zookeeper/trunk/CHANGES.txt
    hadoop/zookeeper/trunk/docs/index.html
    hadoop/zookeeper/trunk/docs/index.pdf
    hadoop/zookeeper/trunk/docs/javaExample.html
    hadoop/zookeeper/trunk/docs/linkmap.html
    hadoop/zookeeper/trunk/docs/linkmap.pdf
    hadoop/zookeeper/trunk/docs/recipes.html
    hadoop/zookeeper/trunk/docs/releasenotes.html
    hadoop/zookeeper/trunk/docs/zookeeperAdmin.html
    hadoop/zookeeper/trunk/docs/zookeeperInternals.html
    hadoop/zookeeper/trunk/docs/zookeeperJMX.html
    hadoop/zookeeper/trunk/docs/zookeeperOver.html
    hadoop/zookeeper/trunk/docs/zookeeperProgrammers.html
    hadoop/zookeeper/trunk/docs/zookeeperQuotas.html
    hadoop/zookeeper/trunk/docs/zookeeperStarted.html
    hadoop/zookeeper/trunk/docs/zookeeperTutorial.html
    hadoop/zookeeper/trunk/docs/zookeeperTutorial.pdf
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/index.xml
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/site.xml
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperTutorial.xml

Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=787780&r1=787779&r2=787780&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Tue Jun 23 18:38:33 2009
@@ -227,6 +227,8 @@
 
   ZOOKEEPER-422. Java CLI should support ephemeral and sequential node creation (henry via breed)
 
+  ZOOKEEPER-315. add forrest docs for bookkeeper. (flavio via mahadev)
+
 NEW FEATURES:
 
   ZOOKEEPER-371. jdiff documentation included in build/release (giri via phunt)

Added: hadoop/zookeeper/trunk/docs/bookkeeperConfig.html
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperConfig.html?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperConfig.html (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperConfig.html Tue Jun 23 18:38:33 2009
@@ -0,0 +1,369 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8">
+<meta name="Forrest-skin-name" content="pelt">
+<title>BookKeeper Administrator's Guide</title>
+<link type="text/css" href="skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/">Hadoop</a> &gt; <a href="http://hadoop.apache.org/zookeeper/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://hadoop.apache.org/zookeeper/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="hadoop.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="http://hadoop.apache.org/zookeeper/">Project</a>
+</li>
+<li>
+<a class="unselected" href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</li>
+<li class="current">
+<a class="selected" href="index.html">ZooKeeper 3.2 Documentation</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperOver.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperStarted.html">Getting Started</a>
+</div>
+<div class="menuitem">
+<a href="releasenotes.html">Release Notes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
+<div id="menu_1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="api/index.html">API Docs</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>
+</div>
+<div class="menuitem">
+<a href="javaExample.html">Java Example</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="recipes.html">Recipes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
+<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="bookkeeperStarted.html">Getting started</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperOverview.html">Overview</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Setup guide</div>
+</div>
+<div class="menuitem">
+<a href="bookkeeperProgrammer.html">Programmer's guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperAdmin.html">Administrator's Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperQuotas.html">Quota Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperJMX.html">JMX</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="http://hadoop.apache.org/zookeeper/mailing_lists.html">Mailing Lists</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="bookkeeperConfig.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>BookKeeper Administrator's Guide</h1>
+<h3>Setup Guide</h3>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#bk_deployment">Deployment</a>
+<ul class="minitoc">
+<li>
+<a href="#bk_sysReq">System requirements</a>
+</li>
+<li>
+<a href="#bk_runningBookies">Running bookies</a>
+</li>
+<li>
+<a href="#bk_zkMetadata">ZooKeeper Metadata</a>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+  
+
+  
+
+  
+
+  
+<a name="N1000B"></a><a name="bk_deployment"></a>
+<h2 class="h3">Deployment</h2>
+<div class="section">
+<p>This section contains information about deploying BookKeeper and
+    covers these topics:</p>
+<ul>
+      
+<li>
+        
+<p>
+<a href="#bk_sysReq">System requirements</a>
+</p>
+      
+</li>
+
+      
+<li>
+        
+<p>
+<a href="#bk_runningBookies">Running bookies</a>
+</p>
+      
+</li>
+
+      
+<li>
+        
+<p>
+<a href="#bk_zkMetadata">ZooKeeper Metadata</a>
+</p>
+      
+</li>
+    
+</ul>
+<p> The first section tells you how many machines you need. The second explains how to bootstrap bookies
+     (BookKeeper storage servers). The third section explains how we use ZooKeeper and our requirements with
+     respect to ZooKeeper.
+    </p>
+<a name="N10032"></a><a name="bk_sysReq"></a>
+<h3 class="h4">System requirements</h3>
+<p> A typical BookKeeper installation comprises a set of bookies and a set of ZooKeeper replicas. The exact number of bookies
+ 	   depends on the quorum mode, desired throughput, and number of clients using this installation simultaneously. The minimum number of
+ 	   bookies is three for self-verifying (stores a message authentication code along with each entry) and four for generic (does not
+ 	   store a message authentication codewith each entry), and there is no upper limit on the number of bookies. Increasing the number of 
+ 	   bookies, in fact, enables higher throughput.
+ 	   </p>
+<p> For performance, we require each server to have at least two disks. It is possible to run a bookie with a single disk, but 
+ 	   performance will be significantly lower in this case. Of course, it works with one disk, but performance is significantly lower. 
+ 	   </p>
+<p> For ZooKeeper, there is no constraint with respect to the number of replicas. Having a single machine running ZooKeeper
+ 	   in standalone mode is sufficient for BookKeeper. For resilience purposes, it might be a good idea to run ZooKeeper in quorum 
+ 	   mode with multiple servers. Please refer to the ZooKeeper documentation for detail on how to configure ZooKeeper with multiple
+ 	   replicas
+ 	   </p>
+<a name="N10042"></a><a name="bk_runningBookies"></a>
+<h3 class="h4">Running bookies</h3>
+<p>
+ 	   To run a bookie, we execute the following command:
+ 	   </p>
+<p>
+<span class="codefrag computeroutput">
+		java -cp .:./zookeeper-dev-bookkeeper.jar:./zookeeper-dev.jar:../log4j/apache-log4j-1.2.15/log4j-1.2.15.jar\
+		-Dlog4j.configuration=log4j.properties org.apache.bookkeeper.proto.BookieServer 3181 /path_to_log_device/\
+		/path_to_ledger_device/
+	   </span>
+</p>
+<p>
+ 	   The parameters are:
+ 	   </p>
+<ul>
+ 	   	
+<li>
+ 	   	
+<p>
+ 	   		Port number that the bookie listens on;
+ 	   	</p>
+ 	   	
+</li>
+ 	   	
+ 	   	
+<li>
+ 	   	
+<p>
+ 	   		Path for Log Device (stores bookie write-ahead log);
+ 	   	</p>
+ 	   	
+</li>
+ 	   	
+ 	   	
+<li>
+ 	   	
+<p>
+ 	   		Path for Ledger Device (stores ledger entries);
+ 	   	</p>
+ 	   	
+</li>
+ 	   
+</ul>
+<p>
+ 	   Ideally, <span class="codefrag computeroutput">/path_to_log_device/ </span> and <span class="codefrag computeroutput">/path_to_ledger_device/ </span> are each
+ 	   in a different device. 
+ 	   </p>
+<a name="N10074"></a><a name="bk_zkMetadata"></a>
+<h3 class="h4">ZooKeeper Metadata</h3>
+<p>
+ 	   For BookKeeper, we require a ZooKeeper installation to store metadata, and to pass the list
+ 	   of ZooKeeper servers as parameter to the constructor of the BookKeeper class (<span class="codefrag computeroutput">
+ 	   org.apache.bookkeeper.client,BookKeeper</span>).
+ 	   To setup ZooKeeper, please check the <a href="index.html">
+          ZooKeeper documentation</a>.
+ 	   </p>
+</div>
+
+<p align="right">
+<font size="-2"></font>
+</p>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         2008 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: hadoop/zookeeper/trunk/docs/bookkeeperConfig.pdf
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperConfig.pdf?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperConfig.pdf (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperConfig.pdf Tue Jun 23 18:38:33 2009
@@ -0,0 +1,322 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 560 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gaua;9lldX&;KZO$JfG=\rd,Yi)mH[As19025`>m@!h8p22DOcN;n;P81^:QkJ_uS8D:7[(Z&:9SXdZP-U:8;Ni7FY,>'j+,LkP.A:@<$'OmJn]HVhP1Tg[`+uX,3j==<24.gn)<FoIEeeD/S05W[.n&cA?aUQ?FqFjQmR1@(AV''8q#X:i62(o3UT(>_\aS;IA`GTUr#YUaFk6`VIK6^cS[cl0HIl,R=n@mD[`S.ctG_.Vq(lqP^"4A%G6js+LfUP/\n,3d@IpfV5]?96'P!1CDdcIu;=-pZIRIF:OrFD'j!8BlYX4TN=ETf+6[2,giCP-h:Bs8NPICr&E$=_[u-h!dq'!adIhkhGVr9ERYX>^0,iVoYdO%LD-1\m/Q-Rkto*kr.JG5/1^OGj5=$>m$tCiSNMZ\OUs:&C(31lq'Nc0No2;$G+-hcEC#$Y#4!US#rXCF.lILI0-H?][l,"CtDlbi,URqn$`hVVKt\+DBA3Yd!,OVI>bIi^d";@Q@c@p"J7=B!cWV]@sZse2<3?[bJ%MF-#D7@#O.hXrsD;#Fm/2O8~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+14 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 511.541 169.328 499.541 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 493.341 224.492 481.341 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 475.141 205.172 463.141 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 456.941 225.128 444.941 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Length 2163 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU4gQ(#H&:O:SkcMJ4R[0n!J3IMuDL+Ur1qQPcMa4^!Ru&[G'"&\QlT<U=BN'q\+M]1s3LlKn__X*[Ip/op6HenTD*;G<gY+5!bD(M,(#,r/GV4!k^j8%DJ)<6HelksYmGIi_b$5nsXH9pB5M";eMk?RVT0QH!^KGZaY",3/Ye4"Gl.[fsmD,`h[9<F<\6#,IbFtJ=>q:&R(NrECp:R!HenckI.&N!+-tL1&FG(HuW"+Z5/D5hK:<U#PSeo"QlX#C.^G/cp$:ts]f(@09UdsiUc-T@QHs=ANd9&Ok1Tg`cOl*^XVUWZMFiUS-DleY&8,ZjXZjmWhQaknVc7L"'#d"p/nJoXLP%nWhMMKA;6@2NNO0rMR3Sg,ZV*)8`r*2A2`$oA\@lc,)=ujYuAle7s_^hUiX>U'*QE>TMOPj;]rQ$?`k?k;)pZo!bf8i8[>c[[+;\X(`c(L!&JTdYldXEOG*=)*_-:(18j[V*3\]N,+A3=MV!?8tq],K<E!gAjcJOAEN(cK)@=\p.3(B5]!n3kOtFbRs>n"L!K(O5c[e-:/31jd&PlR4_qq`C!5R`M9`p)I%mW]PQn6WB6=Wg4G\:U3)Q7!'-f[+L;'BlQ\$,@56]]O5fD"_/u*Gg.Ed6!u<UT?CJP>tqL:^!F:)1`fd?E_k8l9$0_=9ZLROD<0b]MCR:n[T/3Pf=,h@b<<&W$ZLR2R29sFUDVnHR1kOLKlY[F7RVlXd0X^?aQ4J8WCnpJ7sFb.W/Zb^(ok,^-p/PiUDlZi--*E@W!6k7Au`HZ7`9B'Tt41&*qC&Rh$\U>4$?]LO]P&OT1OLB+@DB(P39r$%r`pI?K9g4E4cd+,.iqU>+Db+iKTCF7t$.\c</32*8IUXEg1uIE/9G7Yebcq1`Ml$<hsCrisMmL;^8:H"o9?>G)%`N+m^WnY!fVNQ]8X>6-8&f$Of&*Hcc8(cLl9tC98)3>/P!5Gg-an/sCmDVTt6DTH8=Yk71i
 */$FqM;BO?$G8'ISR(!7].@+U>+=<]EIHJ+PYaJ`ZYe&E,/SQ>XKnRr9:&,Kqaoth>o*5BO8#nsWa7\gndUt-n)8(^%9F%aY2g;>'+1Kn;<+,/%JP2DOrS'KM_SO]S7IL7]^bnbZY.J[9nPrM&FHlA!a4)g;m]OVmPf(6MgPR;TO5g1FLYV(6WXN"l%V(c?Eb<O:=7qc0gO$Zh@tbRL&>Ld56R*=.i+rGdg>T-c@c"p9[]_i8dHuh)\JFUsB:M170KHq*$g7t]8pUA46XQ:gUD.jq!A1YGWklTM&JQVu,B7g&RX;<LoKX1"S]Y,hg]e:s#[DauNb[h`pJ$$:n-n/T+`l-Zk2Jh5\9#k&eVk[,rkK3Y1fC@[)dn1O0es&a4>3H*384Oli`e+`4s4,"g76A^35'enRE+TBLEX6"0,$U)l@+"%k<-K2oj,fHL:6.*jB5t.6a@Rp:gYdY&GeCR9E%8ie'J3W4G&GsUoJ%c>-/Mr/RhEYn_sseV3R^Q;+,;:OTI5Il8l@Ck:$6Kl)JPLGj.8?,/jdp6F>O8MqLi2<-!6+&p#$Mf(];[VVZ/BGuSk'9?\@ROCZRS)MSn]]iA=:nSpJ-[osOcXA?gD;)?-^!S:eI_Ml\N6/dH/,:.Y!);d=%Ab@&h#'Zb%N=9oheF7"_1f%!#,;/YEH&A?OH[#<-oIhfZZP95iRuJL^A"V+`-7K;6ET$L3&2"YAh2Ic=b<E7L,M>b81Q_c.C/2Up"[&8L?T_i)R83+1E%plNnuN6,m.Q=u[PUFoJ^Mmf,fhLAqA0QYUUs4Qo2<-H/]idD3rQVD,HG)9]FV'="L;L[G-P"DEr6YYW71(?d0Q+<h8+p/O0&s219XF:n%69=&tiEKF!%6m]/dbdU=taT,(c>8$`"p>D/^POrh`3,FX"kN/X4X;p8]s2qtF"$#D:k8"FSBnb,O?_l$&H]=>_'9"%Op[j`0'<#C7-+m1;&1TlHu!T>uL=i\7%Vc0J
 >g=fRoVDuX+FrV!,I.FZ&^mCJ7#m#ZmLTCFf??'+R/ORUPp5s?.F7]mJQ,RSmFhY-!HW/W!V*4sB^Rm]+*I.Z[JnU3[J[iu>fF1SE$&EU/8Qp"DU*H0NYGGZ+_m:]\r6Y<fPh8XM>5Di.K,Sf$Y&.OjcPq`DuF_t9jBQ_p?c!%hVab8K"(RHte~>
+endstream
+endobj
+17 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 16 0 R
+/Annots 18 0 R
+>>
+endobj
+18 0 obj
+[
+19 0 R
+20 0 R
+21 0 R
+]
+endobj
+19 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 612.466 208.992 600.466 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 595.266 189.672 583.266 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+21 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 578.066 209.628 566.066 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Length 1086 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%"gMZ%0&:O:Sn?!1^AOoE-V=nWP2F27Hg\'$uMh&'G=bnVT.=-XFqi5gZaLCNQYb@1:B?o:mGe]XE\sRo;EDjUHEL&?%8<P7f)p?.l42GCKA42q2ca/+5pMW*3*`7J0^O)&q$i"A>T!?k)_2"6";[SttQn5],dsSDT2\<3IRI@N3>N:]Y_EI;1O#Q,aZM5G:q1q(#N+/6P4lT?F3BG4p#L:cK6dg5;n@*O("K_@PBB+U22qhaLnU7k>V*oK,2Vur>]WH[0P<2iFI33[);DE4DIM:_C/L(1l/V<MNq,4@,e`FI6esYZ@19[kQk+1?GSYHU1Z+P?D-cW+_^76%<ls"KcH%DIVG$<FYLT.s;9bXh"0UF8`l+l>ggutd7H98FY:>(Pa7O"H#h<c>9-Z>WM>#0FenErmP6jhI*`mAjW-#<\f:8PH7[S?Q:,0/W5*5fS/Tk`g,C.2:#]f]N5KS@t%bOsRKW-<4G.++0?+s7l'o-5JL'c.l!V\'@D+0GLZQlYVY?cMD:qgm+n<(S73MU`hM^bNNq<DsYAH7O9]iW2j64fh8riYLnh.[r5dpEcu;^7%>j2]a;?qpM2GHQ0-BW=J(!:Dnk)#NhQB:,ci,-Mhl3X)i-:Z\7lmF1]0/]eSru<3R;]],1,2e0\^,(96<d.uu3?K28'K/O0Tl,h;#Sap*!6VLiDiT!"`4#P2is5mgt&E4W&AR,D0gmc$8rl7c?Sd,b_*h$%\pnb_.1_P3(Y.\dr([Qd>QeIVcfY?m6h'GdD6,6'ii)37[a`'?"JW<DZAi>K:b6$\2H'fj?m,-U&p[i<#i.nELL&I!/>F)aD9;4p9iGs1dKKKOhtE!"-H]e2X1PXeeC3Oc'f(0]HG>tZ+Y<<>4%$HaYc9&l+d;BTWA9'@=fNi5i4;i)Xgp\D8!@I]kB8cPKPr:d]So:u!oSVD+g`rt'g(o'D='Poo\(dH1jMeT2siLO/>8Z2ok_HD@fUT%(p6ri/
 CdO^M+N?PL>#X@)"='$0,<nC@*Y*tG7=G!e7=T&Q01Z#SK(@2QTm9f`L:3Ym;md%N&$:Si4'oY%oK5B"O:ejC:rW`^9L?\~>
+endstream
+endobj
+23 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 22 0 R
+/Annots 24 0 R
+>>
+endobj
+24 0 obj
+[
+25 0 R
+]
+endobj
+25 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 138.648 477.947 266.952 465.947 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (index.html)
+/S /URI >>
+/H /I
+>>
+endobj
+27 0 obj
+<<
+ /Title (\376\377\0\61\0\40\0\104\0\145\0\160\0\154\0\157\0\171\0\155\0\145\0\156\0\164)
+ /Parent 26 0 R
+ /First 28 0 R
+ /Last 30 0 R
+ /Count -3
+ /A 9 0 R
+>> endobj
+28 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\40\0\123\0\171\0\163\0\164\0\145\0\155\0\40\0\162\0\145\0\161\0\165\0\151\0\162\0\145\0\155\0\145\0\156\0\164\0\163)
+ /Parent 27 0 R
+ /Next 29 0 R
+ /A 11 0 R
+>> endobj
+29 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\62\0\40\0\122\0\165\0\156\0\156\0\151\0\156\0\147\0\40\0\142\0\157\0\157\0\153\0\151\0\145\0\163)
+ /Parent 27 0 R
+ /Prev 28 0 R
+ /Next 30 0 R
+ /A 13 0 R
+>> endobj
+30 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\63\0\40\0\132\0\157\0\157\0\113\0\145\0\145\0\160\0\145\0\162\0\40\0\115\0\145\0\164\0\141\0\144\0\141\0\164\0\141)
+ /Parent 27 0 R
+ /Prev 29 0 R
+ /A 15 0 R
+>> endobj
+31 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+32 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+33 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+34 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+35 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+36 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 3
+/Kids [6 0 R 17 0 R 23 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 26 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 31 0 R /F5 32 0 R /F1 33 0 R /F9 34 0 R /F2 35 0 R /F7 36 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [17 0 R /XYZ 85.0 659.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [17 0 R /XYZ 85.0 501.466 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [17 0 R /XYZ 85.0 249.413 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [23 0 R /XYZ 85.0 545.8 null]
+>>
+endobj
+26 0 obj
+<<
+ /First 27 0 R
+ /Last 27 0 R
+>> endobj
+xref
+0 37
+0000000000 65535 f 
+0000007226 00000 n 
+0000007298 00000 n 
+0000007390 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000722 00000 n 
+0000000842 00000 n 
+0000000888 00000 n 
+0000007524 00000 n 
+0000001023 00000 n 
+0000007587 00000 n 
+0000001160 00000 n 
+0000007653 00000 n 
+0000001297 00000 n 
+0000007719 00000 n 
+0000001434 00000 n 
+0000003690 00000 n 
+0000003813 00000 n 
+0000003854 00000 n 
+0000003991 00000 n 
+0000004128 00000 n 
+0000004265 00000 n 
+0000005444 00000 n 
+0000005567 00000 n 
+0000005594 00000 n 
+0000007783 00000 n 
+0000005758 00000 n 
+0000005935 00000 n 
+0000006150 00000 n 
+0000006355 00000 n 
+0000006564 00000 n 
+0000006677 00000 n 
+0000006787 00000 n 
+0000006895 00000 n 
+0000007001 00000 n 
+0000007117 00000 n 
+trailer
+<<
+/Size 37
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+7834
+%%EOF

Added: hadoop/zookeeper/trunk/docs/bookkeeperOverview.html
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperOverview.html?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperOverview.html (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperOverview.html Tue Jun 23 18:38:33 2009
@@ -0,0 +1,341 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8">
+<meta name="Forrest-skin-name" content="pelt">
+<title>BookKeeper overview</title>
+<link type="text/css" href="skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/">Hadoop</a> &gt; <a href="http://hadoop.apache.org/zookeeper/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://hadoop.apache.org/zookeeper/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="hadoop.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="http://hadoop.apache.org/zookeeper/">Project</a>
+</li>
+<li>
+<a class="unselected" href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</li>
+<li class="current">
+<a class="selected" href="index.html">ZooKeeper 3.2 Documentation</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperOver.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperStarted.html">Getting Started</a>
+</div>
+<div class="menuitem">
+<a href="releasenotes.html">Release Notes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
+<div id="menu_1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="api/index.html">API Docs</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>
+</div>
+<div class="menuitem">
+<a href="javaExample.html">Java Example</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="recipes.html">Recipes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
+<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="bookkeeperStarted.html">Getting started</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Overview</div>
+</div>
+<div class="menuitem">
+<a href="bookkeeperConfig.html">Setup guide</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperProgrammer.html">Programmer's guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperAdmin.html">Administrator's Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperQuotas.html">Quota Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperJMX.html">JMX</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="http://hadoop.apache.org/zookeeper/mailing_lists.html">Mailing Lists</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="bookkeeperOverview.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>BookKeeper overview</h1>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#bk_Overview">BookKeeper overview</a>
+<ul class="minitoc">
+<li>
+<a href="#bk_basicComponents">Basic elements</a>
+</li>
+<li>
+<a href="#bk_moreDetail">In slightly more detail...</a>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+  
+
+  
+  
+<a name="N10009"></a><a name="bk_Overview"></a>
+<h2 class="h3">BookKeeper overview</h2>
+<div class="section">
+<p>This document explains basic concepts of BookKeeper. We start by discussing
+    the basic elements of BookKeeper, and next we discuss how they work together. 
+    </p>
+<a name="N10012"></a><a name="bk_basicComponents"></a>
+<h3 class="h4">Basic elements</h3>
+<p> 
+	BookKeeper uses four basic elements:
+	</p>
+<ul>
+      
+<li>
+      
+<p> 
+		
+<strong>Ledger</strong>: A ledger is a sequence of entries, and each entry is a sequence of bytes. Entries are
+		written sequentially to a ledger and at most once. Consequently, ledgers have an append-only semantics;
+	  </p>
+	  
+</li>
+	
+	  
+<li>
+	  
+<p> 
+		
+<strong>BookKeeper client</strong>: A client runs along with a BookKeeper application, and it enables applications
+		to execute operations on ledgers, such as creating a ledger and writing to it; 
+	  </p>
+	  
+</li> 
+	
+	  
+<li>
+	  
+<p>
+		
+<strong>Bookie</strong>: A bookie is a BookKeeper storage server. Bookies store the content of ledgers. For any given
+		ledger L, we call an <em>ensemble</em> the group of bookies storing the content of L. For performance, we store on
+		each bookie of an ensemble only a fragment of a ledger. That is, we stripe when writing entries to a ledger such that
+		each entry is written to sub-group of bookies of the ensemble.
+	  </p>
+	  
+</li>
+
+	  
+<li>
+	  
+<p> 	
+		
+<strong>Metadata storage service</strong>: BookKeeper requires a metadata storage service to store information related 
+		to ledgers and available bookies. We currently use ZooKeeper for such a task.     
+   	  </p>
+   	  
+</li>
+    
+</ul>
+<a name="N10046"></a><a name="bk_moreDetail"></a>
+<h3 class="h4">In slightly more detail...</h3>
+<p> BookKeeper implements highly available logs, and it has been designed with write-ahead logging in mind. Besides high availability
+    due to the replicated nature of the service, it provides high throughput due to striping. As we write entries in a subset of bookies of an
+    ensemble and rotate writes across available quorums, we are able to increase throughput with the number of servers for both reads and writes. 
+    Scalability is a property that is possible to achieve in this case due to the use of quorums. Other replication techniques, such as 
+    state-machine replication, do not enable such a property. 
+    </p>
+<p> An application first creates a ledger before writing to bookies through a local BookKeeper client instance. To 
+	create a ledger, an application has to specify which kind of ledger it wants to use: self-verifying or generic. Self-verifying
+	includes a digest on every entry, which enables a reduction on the degree of replication. Generic ledgers do not store a digest
+	along with entries at the cost of using more bookies.   
+	</p>
+<p> Upon creating a ledger, a BookKeeper clients writes metadata about the ledger to ZooKeeper. A given client first creates
+	a znode named "L" as a child of "/ledger" with the SEQUENCE flag. ZooKeeper consequently assigns a unique sequence number to the 
+	node, naming the node "/Lx", where x is the sequence number assigned. We use this sequence number as the identifier of the ledger. 
+	This identifier is necessary when opening a ledger. We also store the ensemble composition so that readers know which set of bookies
+	of access for a given ledger. 	
+	</p>
+<p>
+	Each ledger currently has a single writer. This writer has to execute a close ledger operation before any other client can read
+	from it. If the writer of a ledger does not close a ledger properly because, for example, it has crashed before having the 
+	opportunity of closing the ledger, then the next client that tries to open a ledger executes an procedure to recover it. As closing a ledger
+	consists essentially of writing the last entry written to a ledger to ZooKeeper, the recovery procedure simply finds the last entry
+	written correctly and writes it to ZooKeeper in the form of a close znode as a child of "/Lx", where x is the identifier of the ledger.     
+	</p>
+<p>
+	Note that currently this recovery procedure is executed automatically upon trying to open a ledger and no explicit action is necessary. 
+	Although two clients may try to recover a ledger concurrently, only one will succeed, the first one that is able to create the close znode
+	for the ledger.
+	</p>
+</div>  
+
+<p align="right">
+<font size="-2"></font>
+</p>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         2008 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: hadoop/zookeeper/trunk/docs/bookkeeperOverview.pdf
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperOverview.pdf?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperOverview.pdf (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperOverview.pdf Tue Jun 23 18:38:33 2009
@@ -0,0 +1,233 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 480 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GauI29iHZu&;KZOMESBQf6m./[#U\S:QF5["4GOO;GmPMl+`Q1*<M7"4Z+3e_sY-^?J%[b>VA)kJHXCF+Qesp"P*SWdU*\$ZPNt#4H(H>_TQbhouEh*44VR6MFDObI\uk>fpCtXLGqaGXCgH;-TX$D)"Nm9qf0];J;W74Kg\8,92Dng8st^&fT(Z8c?7sB\n_O6$'\-V-t,T,;<1&)5rqbR5LOEI,^kPu3lHPc6bLc$#=.\mbh-'7o6DV?8-`rn$dL`SBu)!/bM4nS8o:-P(M3=(PXu*%reFdt!Y`o*ra_W8gt*U[Xig=6X,_XAX..KY\Pc^6<q_K=EMdY+W3_)$/+1jDdn[+f+\Er;H74,.JkSM+TEq-@Kpd<HQprcA;,?QaT1Xr3-m@hLM4>NoH?X1a$%DANRA<#UKZ$&H2p)@a].>&Ecar<M=Ync7lE>N!Feu6\<*!!_YeAdgXP/.&e-\A82ZcSU;Z~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 529.541 218.3 517.541 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 511.341 195.824 499.341 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 493.141 238.832 481.141 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Length 2275 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU5gMYe)&:NH>csm.0N:*&)aU-t"D2PdC('T#0cq7Q"YZBOUOuNC;N`OSC7O$GB$GVs3OdnEoF(U1'Yhct(O"A=a[^Fq0Coc2JQ48>(Q.YRWoKD>]Ts[$cJ%p!U>O0iLqWDc\8GVa2k=;];BC_1c8&7u>XadJ?:Rb/7br8b,?h*`"=O$G?*/9c/IfD=1D3ihJV7<qfr4`!RgCdVK44lmeE#n(2K,NEA2"RTTbdmn[g\D0UI]QFEUN^lq,I2T^aZAJ&(;1jb3mWo"J+EF8VG.fZDYJgC&P^h6NMqd2=^1H^-"hV(K6GJod6V+/hP4`N]9sb<FZp=NrZ0[9i[aog#GjNp99CkTW?0E)ZJb5!O3-)M1M]+t8Hhu8]I9?g6T@Go@<U*bQQWT%ms#LO>[V:D'!_X+`,'&h;b,??i<Y(Lm$*V_PEG;eIQN9Y]nC[Q\EQ5\)do<S'-'!u@7EAIq1\!#DrN`hm@!#3$po_CH9^/02ud*A92/n9/LdDKs42/q"?jrDB-he4U)6\4P.pkd5<%@\[Cee9q(rqmLm8Q42e:kM6E8Ci-RIK4f?6lmO]L!GB!^(*-$$rc'ZJQf2JCU`$*sK(XN+VIVjlf-3;1cjNq^u6$:3f]>Wj-RS_qR.qpOt$$4^[m&'n,&:BD<FMP>P41A=rtAX,5jYE?8rmBS!Wkt69Y:2<R6eR8n_.u@:!,hc.CL,pgc[n:1F.qEK@[(m!D:3VtSH@G5*g4Immo]5#hH.KBjnmL*jJui$)6"W"q%^d"qb7o`.0Iea;EZZVb8P'?0o1TLD=,L9J,K<Cir2SCpbk('E4_]*";U9$;NYP8=<Ee>!%cn)?qLb=JSUr2Me.,JI9DFFqD*1jrk>^BbEcs+XTqO_)`$8VDAKH=eSA@3M"6n:Ube*ak*NW,R68tbGEDWtD`5@l#nm%5-V\*_P-+fp<pN7=B$RdUL3_U\m??GcH3`CV`n6msbk\%mEkUfOLLFUQ"9-Rg
 e;`s@IkI`.-F%"_Fd.:Y@e10#YjDpCPDG-M=6t:=BM'L<G,pqJ@4SY/@?^Y6"ZF.WZ(DdphN8JQV_neXUh/p9`f5MB&8E`%(-@8KB^#ZSYg!@0ah_2W:o<cKePYSn[FtHBn047?_dZorrl9nN9,pO,UX6SXY<p@+K#++JZ]GO4sW6[c`B2*2EQ*rg,0>+<mBI3D?MCKo,31dXRj3'K[cK3jZ#[3%0n<]A4h"FY1*=Iu^/Q+\$-#F]pmBf"%@t>RmSX,1mrt/>JPpf76qgh:A%YlG^`gF"AoA"j"Q`f.9*;6+uh1MV#kaRK#EB(*^h%GYmEk"<68f#F\"IF*SY*F/MCIHGe;:Lsr[%?VQL#8aR:NKgJmNsY]-I9JtK#jWN)]_>;j+7@+c2#64Q*[1t/\Y3J%,jR<8F`Ah`D4rtgF5Kb,*U%q]qI]+*06eGQlJ=?q0:/R[KM:9b%'&;^mB,b!>lDNG?ErC4W]aD7J=Rm@qk4O%6*@rX+J+ObQ]I>(P9M2ejrtF.bU]ddK?RGR?I>G7RR#jSQ+F]Pd!^i9IH"G^@#20XB`=m)F?aMEKDkmnsIe%mLD=!&W"dQMJ@1fJo=j=%Qc?s2i76Y)5>/Q-u;ti@OV8-Wh;KL`HG)bTm,HD`!Sg?*.Blj)cS>>j)uK-YU(*O)**56"ZOO](u:;i#aSip>Iq3nOPJO[XK9CMNaM622*QBT/::/flJ"\pHE@c'g2,rn[9B`%D5/!71L-6VK40cr$e$+3J>:-a]hnM'k1iHG8t9J;]&S.J]PoWLdOSH<_bIn0"@DF4Z*h=VA>"kW/2'ad%7`eSUpb=.mM0Y3Ed\-aP%9EB+*f4,pcc5&pgbHLNp_%nXO$./FM9H+J3[_8`<k2uTn>tmL0+7Vcm,cRS/TtSK%KKYL8DmD$hUgkEW^B';/ghSLe&&7+_]0gc-6SFNL(5,W@le%R`uSn]8W<q&V-#YJ;)teI6k].nG#*gZog,7<Q5U<Mgk
 L0?K6a3#(utV?aO]TeH/k6(\\2pTbckUk8RSUc[CDb/h`YNk`6t.qZSp$2qm05GHQi>(d#EKbL2sJ9Lp_Pm?6knh7H_3HsG;#!53"m<Wikgj!M@c5)NGTKs(Dj@/kXp^rck_K!D/V)0@U[;!b*7_HH<]hh$3[B-fa"UN,&G`]j""To88\qK;ZGROiV,5<thuSH,,:0X,".4E-%O50DoLlFWk`H@;7e/UH@!,M0BaH*eUM)[:LV8:YCO<USVj=H<nemU]J_EsRcSL.f'cE8J2m@t(SLEn$9N#N[Qa$3~>
+endstream
+endobj
+15 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 14 0 R
+>>
+endobj
+16 0 obj
+<< /Length 1432 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU4?#SIU'Rf_Z&G"<OR3F*VnmbQW_mZ:A;%Ei=p49)SMl9%D'G\[eoqO(m3cldrh,'mY/`'.WF727Sio>'f=O+Y*6>pB5I[SF_5Od)X2?1]gs86r&L48D:k,i5;Arf/=rU)-)_T9AmY%PT-.PUlhDm2nZ57M(?=aPY5q+Jlf)/GW1Ikkp8hVLARNuS)B`&OP-B0q[>2-2@<WFA9%G5QoMO5GXBfJjS@B#QaBH$9?kD@a,8'q!'"R,:oFfJ!J([To0Z8=*rU0Ac9/1FV\SIXHh.j5RtKMt_-+&7.d`JBJ6LfTR"$qplW]WZ;;jnr7TYd0X^QO5n'H+uET=_DS\_MrQYA+F<>^.n]d((m[IVMp2DA#iiO`Rp3\4A-uYXN/tWBE;8n\%,e>kJGfW"]9].+>\Ncs#W]QlK2]jpQCQSZ021O'Rc@q[.r4]P@^,6r[6'^.HnQ=JD+iC(_AAY62G@5@+rAi0j?t/Zci*ct!i]A%S5r;%-6crsM!J%E^JJ&lZK7NJfO/J0,([`mI:"Z3_1!,>MfEc@@NMormZj#D3V!Eh,dbT&RSt[D.L-l;3YL6dPFV\rR&.nq$4DGI+05I>:8tSV0.5DQ25s#t[u0JZeMOq1E/T[j?5W&dF08(bftJqDX5F[0;X?ZbS.[1Z=g>A74[_QRdaSn=EcsoK,4%XI'Im6QZY2Vaf;UAb#KA6Uku\=MFX<iT7*4E+JW;`M:3=s`*_@o7'r/\Y),R;4XmCbk9nfd]Sk(_=Ub2,44ASC;Su:gY2N:\i*'&?.7]_[L[CIO=-lIkQJE>?;&ed><lpX_%L<UoG=j<"-hK.^WGs8S;p)k3@9Mni4((nD5MGa1cnMccp6gI,e"?#iZc3l`$V#tWnm*sBdItWo`R`JN:qpWZi#\l*SaZ=0qWOB)XYM(9t46[ibk_SDpV6#Xs@,5,46d&1s^m$\m`RM0kA!'Z'8=J669bb#:((BnG+2/uL*;#L`(%S>A0WeQ
 k;`i7XB>XJZLu\N;lE8Q,%\,9cAJ\+s3!i)uGqZS%;ii.BkH-<JY:;Cd3:I):7li5;F"C5$&%`%BOJt4O&MJ-h,N/HH,`VD]Z\h[`7t"<UMWIF.XjESa'.L$2V<g,8@C1^l#'pIq2;)+e?V-_g*MIHU1<Yd<.CW-R;HQmH:^?Ki!qti:3b3qm-6\dZhl2nd]>>+F@S($fGkfXV=R:).>!cVsDaMfWG2M(<7:,E&rJ/'tP*td20U`M!O%)X#S<RUa4A-n4[Rnn'BA8'>rLH9)40Wo?#+;)0LC8gOO-9K'@=>d`#b?n!@mA9LC]6UXbZaBTFr^4^qn!+uO0U`r)i67?r-=`UH#0o2%^+[2AuGF$gnuIAH_<Pm8N;a)+NVUNEWCS+4>]O3_t^!3lRc!'bEM9\Z'W-fQjq"k%/+JG0P7EfDZ@\%"R[?6"A-6~>
+endstream
+endobj
+17 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 16 0 R
+>>
+endobj
+19 0 obj
+<<
+ /Title (\376\377\0\61\0\40\0\102\0\157\0\157\0\153\0\113\0\145\0\145\0\160\0\145\0\162\0\40\0\157\0\166\0\145\0\162\0\166\0\151\0\145\0\167)
+ /Parent 18 0 R
+ /First 20 0 R
+ /Last 21 0 R
+ /Count -2
+ /A 9 0 R
+>> endobj
+20 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\40\0\102\0\141\0\163\0\151\0\143\0\40\0\145\0\154\0\145\0\155\0\145\0\156\0\164\0\163)
+ /Parent 19 0 R
+ /Next 21 0 R
+ /A 11 0 R
+>> endobj
+21 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\62\0\40\0\111\0\156\0\40\0\163\0\154\0\151\0\147\0\150\0\164\0\154\0\171\0\40\0\155\0\157\0\162\0\145\0\40\0\144\0\145\0\164\0\141\0\151\0\154\0\56\0\56\0\56)
+ /Parent 19 0 R
+ /Prev 20 0 R
+ /A 13 0 R
+>> endobj
+22 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+23 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+24 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+25 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+26 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+27 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 3
+/Kids [6 0 R 15 0 R 17 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 18 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 22 0 R /F5 23 0 R /F1 25 0 R /F6 24 0 R /F2 26 0 R /F7 27 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [15 0 R /XYZ 85.0 659.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [15 0 R /XYZ 85.0 593.466 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [15 0 R /XYZ 85.0 348.613 null]
+>>
+endobj
+18 0 obj
+<<
+ /First 19 0 R
+ /Last 19 0 R
+>> endobj
+xref
+0 28
+0000000000 65535 f 
+0000006651 00000 n 
+0000006723 00000 n 
+0000006815 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000642 00000 n 
+0000000762 00000 n 
+0000000801 00000 n 
+0000006949 00000 n 
+0000000934 00000 n 
+0000007012 00000 n 
+0000001071 00000 n 
+0000007078 00000 n 
+0000001208 00000 n 
+0000003576 00000 n 
+0000003684 00000 n 
+0000005209 00000 n 
+0000007144 00000 n 
+0000005317 00000 n 
+0000005547 00000 n 
+0000005732 00000 n 
+0000005984 00000 n 
+0000006097 00000 n 
+0000006207 00000 n 
+0000006318 00000 n 
+0000006426 00000 n 
+0000006542 00000 n 
+trailer
+<<
+/Size 28
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+7195
+%%EOF

Added: hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html Tue Jun 23 18:38:33 2009
@@ -0,0 +1,911 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8">
+<meta name="Forrest-skin-name" content="pelt">
+<title>BookKeeper Getting Started Guide</title>
+<link type="text/css" href="skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/">Hadoop</a> &gt; <a href="http://hadoop.apache.org/zookeeper/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://hadoop.apache.org/zookeeper/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="hadoop.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="http://hadoop.apache.org/zookeeper/">Project</a>
+</li>
+<li>
+<a class="unselected" href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</li>
+<li class="current">
+<a class="selected" href="index.html">ZooKeeper 3.2 Documentation</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperOver.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperStarted.html">Getting Started</a>
+</div>
+<div class="menuitem">
+<a href="releasenotes.html">Release Notes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
+<div id="menu_1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="api/index.html">API Docs</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>
+</div>
+<div class="menuitem">
+<a href="javaExample.html">Java Example</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="recipes.html">Recipes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
+<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="bookkeeperStarted.html">Getting started</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperOverview.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperConfig.html">Setup guide</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Programmer's guide</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperAdmin.html">Administrator's Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperQuotas.html">Quota Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperJMX.html">JMX</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="http://hadoop.apache.org/zookeeper/mailing_lists.html">Mailing Lists</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="bookkeeperProgrammer.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>BookKeeper Getting Started Guide</h1>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#bk_GettingStarted">Programming with BookKeeper</a>
+<ul class="minitoc">
+<li>
+<a href="#bk_instance"> Instantiating BookKeeper.</a>
+</li>
+<li>
+<a href="#bk_createLedger"> Creating a ledger. </a>
+</li>
+<li>
+<a href="#bk_writeLedger"> Adding entries to a ledger. </a>
+</li>
+<li>
+<a href="#bk_closeLedger"> Closing a ledger. </a>
+</li>
+<li>
+<a href="#bk_openLedger"> Opening a ledger. </a>
+</li>
+<li>
+<a href="#bk_readLedger"> Reading from ledger </a>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+  
+
+  
+  
+<a name="N10009"></a><a name="bk_GettingStarted"></a>
+<h2 class="h3">Programming with BookKeeper</h2>
+<div class="section">
+<ul>
+      
+<li>
+        
+<p>
+<a href="#bk_instance"> Instantiating BookKeeper.</a>
+</p>
+      
+</li>
+
+      
+<li>
+        
+<p>
+<a href="#bk_createLedger"> Creating a ledger. </a>
+</p>
+      
+</li>
+
+      
+<li>
+        
+<p>
+<a href="#bk_writeLedger"> Adding entries to a ledger. </a>
+</p>
+      
+</li>
+
+      
+<li>
+        
+<p>
+<a href="#bk_closeLedger"> Closing a ledger. </a>
+</p>
+      
+</li>
+      
+	  
+<li>
+        
+<p>
+<a href="#bk_openLedger"> Opening a ledger. </a>
+</p>
+      
+</li>
+      
+      
+<li>
+        
+<p>
+<a href="#bk_readLedger"> Reading from ledger </a>
+</p>
+      
+</li>
+      
+    
+</ul>
+<a name="N10042"></a><a name="bk_instance"></a>
+<h3 class="h4"> Instantiating BookKeeper.</h3>
+<p>
+    The first step to use BookKeeper is to instantiate a BookKeeper object:
+    </p>
+<p>
+    
+<span class="codefrag computeroutput">
+    org.apache.bookkeeper.BookKeeper
+    </span>
+    
+</p>
+<p>
+    There is one BookKeeper constructor:
+    </p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public BookKeeper(String servers) 
+    	throws KeeperException, IOException    
+    </span>
+   	
+</p>
+<p> 
+    where <span class="codefrag computeroutput">servers</span> is a comma-separated list of ZooKeeper servers.
+    </p>
+<a name="N10064"></a><a name="bk_createLedger"></a>
+<h3 class="h4"> Creating a ledger. </h3>
+<p> Before writing entries to BookKeeper, it is necessary to create a ledger. 
+    With the current BookKeeper API, it is possible to create a ledger both synchronously
+    or asynchronously. The following methods belong
+    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>.
+    </p>
+<p>
+   	
+<strong>Synchronous call:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+    public LedgerHandle createLedger(int ensSize, int qSize, QMode mode,  byte passwd[])
+        throws KeeperException, InterruptedException, 
+        IOException, BKException
+    </span>
+	
+</p>
+<p>
+    where:
+    </p>
+<ul>
+    	
+<li>
+    	
+<p> 
+    	
+<span class="codefrag computeroutput">ensSize</span> is the number of bookies (ensemble size);
+    	</p>
+    	
+</li>
+    
+    	
+<li> 
+    	
+<p>
+    	
+<span class="codefrag computeroutput">qSize</span> is the write quorum size;
+    	</p>
+    	
+</li>
+    
+    	
+<li> 
+    	
+<p>
+    	
+<span class="codefrag computeroutput">mode</span> is the ledger mode (QMode.GENERIC, QMode.VERIFIABLE).
+    	If <span class="codefrag computeroutput">mode</span> is QMode.GENERIC, then <span class="codefrag computeroutput">ensSize</span> has to
+    	be at least <em>3t+1</em>, and <span class="codefrag computeroutput">qSize</span> has to be <em>2t+1</em>.
+    	<em>t</em> is the maximum number of tolerated bookie failures.  
+    	</p>
+    	
+</li>
+    	
+    	
+<li>
+    	
+<p>
+    	
+<span class="codefrag computeroutput">passwd</span> is a password that authorizes the client to write to the
+    	ledger being created.
+    	</p>
+    	
+</li>
+    
+</ul>
+<p>
+    All further operations on a ledger are invoked through the <span class="codefrag computeroutput">LedgerHandle</span>
+    object returned.
+    </p>
+<p>
+    As a convenience, we provide a <span class="codefrag computeroutput">createLedger</span> with default parameters (3,2,VERIFIABLE), 
+    and the only input parameter it requires is a password.
+    </p>
+<p>
+   	
+<strong>Asynchronous call:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+    public void asyncCreateLedger(int ensSize, 
+            int qSize, 
+            QMode mode,  
+            byte passwd[],
+            CreateCallback cb,
+            Object ctx
+            )
+    throws KeeperException, InterruptedException, 
+    IOException, BKException
+    </span>
+	
+</p>
+<p>
+	The parameters are the same of the synchronous version, with the
+	exception of <span class="codefrag computeroutput">cb</span> and <span class="codefrag computeroutput">ctx</span>. <span class="codefrag computeroutput">CreateCallback</span>
+	is an interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
+	a class implementing it has to implement a method called <span class="codefrag computeroutput">createComplete</span>
+	that has the following signature: 
+    </p>
+<p>
+	
+<span class="codefrag computeroutput">
+	void createComplete(int rc, LedgerHandle lh, Object ctx);
+	</span>    
+	
+</p>
+<p>
+	where:
+	</p>
+<ul>
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+		</p>
+		
+</li>
+	
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">ctx</span> is a control object for accountability purposes;
+		</p>
+		
+</li>
+	
+</ul>
+<p>
+	The <span class="codefrag computeroutput">ctx</span> object passed as a parameter to the call to create a ledger
+	is the one same returned in the callback.
+    </p>
+<a name="N1012E"></a><a name="bk_writeLedger"></a>
+<h3 class="h4"> Adding entries to a ledger. </h3>
+<p>
+    Once we have a ledger handle <span class="codefrag computeroutput">lh</span> obtained through a call to create a ledger, we
+    can start writing entries. As with creating ledgers, we can write both synchronously and 
+    asynchronously. The following methods belong
+    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
+    </p>
+<p>
+   	
+<strong>Synchronous call:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public long addEntry(byte[] data)
+    	throws InterruptedException
+    </span>
+	
+</p>
+<p>
+    where:
+    </p>
+<ul>
+    	
+<li>
+    	
+<p> 
+    	
+<span class="codefrag computeroutput">data</span> is a byte array;
+    	</p>
+    	
+</li>
+    
+</ul>
+<p>
+	A call to <span class="codefrag computeroutput">addEntry</span> returns the status of the operation ((please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+    </p>
+<p>
+   	
+<strong>Asynchronous call:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx)
+    throws InterruptedException
+    </span>
+	
+</p>
+<p>
+    It also takes a byte array as the sequence of bytes to be stored as an entry. Additionaly, it takes
+    a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
+    the <span class="codefrag computeroutput">AddCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
+	a class implementing it has to implement a method called <span class="codefrag computeroutput">addComplete</span>
+	that has the following signature: 
+    </p>
+<p>
+	
+<span class="codefrag computeroutput">
+	void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx);
+	</span>    
+	
+</p>
+<p>
+	where:
+	</p>
+<ul>
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+		</p>
+		
+</li>
+	
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">entryId</span> is the identifier of entry associated with this request;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
+		</p>
+		
+</li>
+	
+</ul>
+<a name="N101C9"></a><a name="bk_closeLedger"></a>
+<h3 class="h4"> Closing a ledger. </h3>
+<p>
+    Once a client is done writing, it closes the ledger. The following methods belong
+    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
+    </p>
+<p>
+   	
+<strong>Synchronous close:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public void close() 
+    throws KeeperException, InterruptedException
+    </span>
+	
+</p>
+<p>
+    It takes no input parameters.
+    </p>
+<p>
+   	
+<strong>Asynchronous close:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public void asyncClose(CloseCallback cb, Object ctx)
+    throws InterruptedException
+    </span>
+	
+</p>
+<p>
+    It takes a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
+    the <span class="codefrag computeroutput">CloseCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
+	a class implementing it has to implement a method called <span class="codefrag computeroutput">closeComplete</span>
+	that has the following signature: 
+    </p>
+<p>
+	
+<span class="codefrag computeroutput">
+	void closeComplete(int rc, LedgerHandle lh, Object ctx)
+	</span>    
+	
+</p>
+<p>
+	where:
+	</p>
+<ul>
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+		</p>
+		
+</li>
+	
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
+		</p>
+		
+</li>
+	
+</ul>
+<a name="N1023E"></a><a name="bk_openLedger"></a>
+<h3 class="h4"> Opening a ledger. </h3>
+<p>
+    To read from a ledger, a client must open it first. The following methods belong
+    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>.
+    </p>
+<p>
+   	
+<strong>Synchronous open:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public LedgerHandle openLedger(long lId, byte passwd[])
+    throws KeeperException, InterruptedException, IOException, BKException
+    </span>
+	
+</p>
+<ul>
+	
+<li>
+	
+<p>
+	
+<span class="codefrag computeroutput">ledgerId</span> is the ledger identifier;
+	</p>
+	
+</li>
+	
+	
+<li>
+	
+<p>
+	
+<span class="codefrag computeroutput">passwd</span> is a password to access the ledger (used only in the case of <span class="codefrag computeroutput">VERIFIABLE</span> ledgers);
+	</p>
+	
+</li>
+	
+</ul>
+<p>
+   	
+<strong>Asynchronous open:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public void asyncOpenLedger(long lId, byte passwd[], OpenCallback cb, Object ctx)
+    throws InterruptedException
+    </span>
+	
+</p>
+<p>
+    It also takes a a ledger identifier and a password. Additionaly, it takes a callback object 
+    <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
+    the <span class="codefrag computeroutput">OpenCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
+	a class implementing it has to implement a method called <span class="codefrag computeroutput">openComplete</span>
+	that has the following signature: 
+    </p>
+<p>
+	
+<span class="codefrag computeroutput">
+	public void openComplete(int rc, LedgerHandle lh, Object ctx)
+	</span>    
+	
+</p>
+<p>
+	where:
+	</p>
+<ul>
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+		</p>
+		
+</li>
+	
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
+		</p>
+		
+</li>
+	
+</ul>
+<a name="N102CB"></a><a name="bk_readLedger"></a>
+<h3 class="h4"> Reading from ledger </h3>
+<p>
+    Read calls may request one or more consecutive entries. The following methods belong
+    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
+    </p>
+<p>
+   	
+<strong>Synchronous read:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public LedgerSequence readEntries(long firstEntry, long lastEntry) 
+    throws InterruptedException, BKException
+    </span>
+	
+</p>
+<ul>
+	
+<li>
+	
+<p>
+	
+<span class="codefrag computeroutput">firstEntry</span> is the identifier of the first entry in the sequence of entries to read;
+	</p>
+	
+</li>
+	
+	
+<li>
+	
+<p>
+	
+<span class="codefrag computeroutput">lastEntry</span> is the identifier of the last entry in the sequence of entries to read;
+	</p>
+	
+</li>
+	
+</ul>
+<p>
+   	
+<strong>Asynchronous read:</strong>
+   	
+</p>
+<p>
+    
+<span class="codefrag computeroutput">
+	public void asyncReadEntries(long firstEntry, 
+            long lastEntry, ReadCallback cb, Object ctx)
+    throws BKException, InterruptedException
+    </span>
+	
+</p>
+<p>
+    It also takes a first and a last entry identifiers. Additionaly, it takes a callback object 
+    <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
+    the <span class="codefrag computeroutput">ReadCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
+	a class implementing it has to implement a method called <span class="codefrag computeroutput">readComplete</span>
+	that has the following signature: 
+    </p>
+<p>
+	
+<span class="codefrag computeroutput">
+	void readComplete(int rc, LedgerHandle lh, LedgerSequence seq, Object ctx)
+	</span>    
+	
+</p>
+<p>
+	where:
+	</p>
+<ul>
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+		</p>
+		
+</li>
+	
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
+		</p>
+		
+</li>
+		
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">seq</span> is a <span class="codefrag computeroutput">LedgerSequence</span> object to containing the list of entries requested;
+		</p>
+		
+</li>
+
+		
+<li>
+		
+<p>
+		
+<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
+		</p>
+		
+</li>
+	
+</ul>
+</div>
+
+<p align="right">
+<font size="-2"></font>
+</p>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         2008 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf?rev=787780&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf (added)
+++ hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf Tue Jun 23 18:38:33 2009
@@ -0,0 +1,482 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 643 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!$E966RV&BF6e$6>[)[sA.s30SI<*r6/OZj1%CAr;^$P\0LRbJQf4V\=)j'0)@bG.%>L`(F3GdJFl;-jP^:1;^rT-Gl^=#f?O7:ce@sa1u5;Z5pM\XgS0$=fK(i([)m!PQ(OGK<hq'/*FFM\Zr1(+s-#9?(df<q_XU4Vi!bX+W3go.!,DF8&pGTIt_qER#iaZbO6B-PS:s8PqLna7^lF+[[Y;NLu<57K'=s3-,@$X"seXW4UE5%KCH'6=!lhl%MYe_O1!e)b6Ksei(R3ZP,&03E1n"p<qe:.!](t*DKo2BAK\jCO)8P$f%.A@Zob[7B":FVBei8G0@@uW%]RoN(GuF(=%8b%c.um)MJ?+=FIZA+.0XaZp_V1;QP*atJLsgi'/#1e@*gj#WE&+$<kghk&.)Q1_@mIj$"$0]-X8O?H\:4pfH0S<*dj@W_qn8s@[Vh?n7AfW2b5+i'Z;b[?E1Ieb%1j-_KV9#m84e846>t(0an2`4RNVJ6.]93Hee86D3a#ria0h'[kLX0N'_+J/Qr[?"Zj!,OO.DbE+]=u"JeqgZtBsmqEaSB9O2M;3skhXJiJZtS2`%R.VE#So8R\GlI%lY`q/!LLUQC_@blX&ehkYhCNlAP3bA;h!hAnt:l4,h~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 529.541 263.984 517.541 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 511.341 250.148 499.341 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 493.141 209.144 481.141 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 474.941 251.144 462.941 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 456.741 205.16 444.741 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 438.541 209.144 426.541 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 420.341 222.812 408.341 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Length 2221 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU5=``=U&:W67i1iG0:]^bj0R^5_NpAT?%XZot7X:XP87Fq!1.bJcIsmY2!1pJXRE5RCG5'a<QaqQIr:nRD0L`GCY[,o4DLjAYra<pYiQe80_N&Cp`7C7_N%V6aKGF4t+&f^CK/a@)S[pq;q-KVpV>U%f&-n>(>$nCe?PYR2Maq/^Lq$_illCtnlWUZkGg1&^YjGVnYZ?ZXMsCEa[P4\rRD9(q2QLdK$":E$lC%>@ellINQ]ER>SeYJ^eW,c',L/F;ADK2]==^K8Om];ODSqAUl;`H)Ot7-,4:Lf/%)W?U'7kod&G1eOf<Ic[>V>-5j=SfK9HdEM5W)<mZ@04:*cO<p]("?)Fe_-@#]D>%BOCP(e>V9%@a_W\4931<,_-p<o6nHj6S<FM)734E63T7a6YZ*BK$^)'dZ5N__n^I=%-TgrQ;F96`+F4*&2:jA5;NQ^pCXT\J?%YQ6@emAd&Rk.[Fn4W!&[2l';GBBSjD^_jSNJP]S0IMBb3^rVkM2O0UdAT&BBudH48$lL&5j-I'Z?_64I]_a'b?0$Rp0q8tQ.O1@WKNRt]N,C+r/!alEaCd3b&D\dUXgMiu6*>ae%5&o&heP=qL"kh3N-JZL>o)0-('e\qp&#t4B^TLL]+8gcu2+eMQQmk`lB"q2uH7n+ApUhU/Mf("'$n197&P=#*Sg^XGU4U`L?+Bpl1ni7injQ,Y=?tJe-4gi"K@0i+=/(#FK,+3AK8q,U\`oN2g</j2orl,ds>H3^+Y,*TkFf.;?V>4H*e6/"fTgJRF(i]EEVcMsLH=hhrj83_8n\Q+CdEONC=TjpoeIYfld%6KZGE:Qgi"[Q0N\XEcck%\.gJl1fXjpf`aRLV=oGMm#!s0.$K?67&Q;@Ua_Ouki=K7mr.'O`14PhVhqHDG&./KtY)Vq6g&"O+jbq=^TO,1&4Z/JE7Ee4S"Q$Cph-$:0(=g!cf/e7/G9G5UbO-phkqjP,N)^YttFYsB>1bZE
 9>HIETXeG\*[9RCpNES*nU#6K`pB%IIjgWBs]`iQ67c7p^fdITQ]#eL&&8MRjVoNp4ds2BV#D^ks&'%ZaY(;^NGF1$:mU?)GUS[rA'Bq_*c'F^].c7/pPc8^mHLlP:%XBId=#Cal^(%KSOam,!I6;-nLJnpaVoi,:RUQ>0+1ijsXh]T4lnRRDa`L;]]$97pGb'[YO@#ISe.5ETLUZ'=J,^g+f5ier1m$Xmp8fZ7X@[<(-+@&j#>gjpUn?KRFck.%.3TOkrLE4t*.iR)emAHr<pHB*8ja7f]?1O.WsZC=>4h!qR?364aKcq:)WnF[9JN(/XWa-k5E2j=\R(u\a#!tD6db3brUX43#?(*Wj4tT!*+Y@hX%9m"%<YuK?&S%u=[Pe.nsDk7M53TP(iM6XPVmbP@G=5P;0XUd8=g7I`Zj<`NMbE%6rJN]mY4)S8fZIo+oVm!_e!s2L#A0dW[i]0ggt9^fMGBX%Z<sNqHfR]F%d-6ZNZZ)']Fd@\%o^2rV(ApCeEmB\!=k3hj2X'EqPVeZMX,unOhUS5<j=?r:HK6%/R6UTZu++*be$CVd'=F#dWg(q==4Y(4+tb.TPo">bpWS!0pH[CA;Lk5eF`/p$D*3Yib2U41lGuS.-+tF6$9R)k.*08NH,Qh[/!:W?!eF9jh"p-BU$fkTqT:`[bO=g$1RM^DZ-S=U5hK;*QhOZFp*L<b[SVpH59\ODDc0EDGWd1R:<^WcHK6[,^1DVT7=gBO2_#2>0.TJATB[.;at<bbQ*+VH]E<f#hK6@\VVHhet^9^"#/3FoM^%^:V"gIXe]:eE?PmKKdn.@$#E$V,8tlP:fRsFjdb-'Z2DMa5DRZP,\:QMT+I`24li2ilC@]m=UPs@APp*>^&`#jfK*'-cC!BZDf:kaa_)>\/`e&069i+bns:-Vu25tia%C^#t:92-^qE]W595U&Tp1:aL&qqk%NYJ5SG=YiSE\m<.7he#$WgOc*',%*l`MSR&Z
 OaN'q;.YDT9eKa(t-9SGBM'+;Hg3m:'t\m$4LjI#^01ES17^?6-pi`>-bbhM"1k<W9];"'EQS"TFuK3^?k@iO,JX!_o!pne:;pf@?CAHs1W:_%\#++hY9Z$d%(_N75Djfi#.haX,\P\FJ80OmofQj$+n-Fj&N.h>Ei\D*>VjmfX2&VehmfJZg/HGQcp=68eGcM)@KT7U%SGpeZp-7J^Od`A.R*D5"QFr'2:[*^e"rr@\&`23~>
+endstream
+endobj
+23 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 22 0 R
+/Annots 24 0 R
+>>
+endobj
+24 0 obj
+[
+25 0 R
+26 0 R
+27 0 R
+28 0 R
+29 0 R
+30 0 R
+]
+endobj
+25 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 633.666 234.648 621.666 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 616.466 193.644 604.466 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+27 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 599.266 235.644 587.266 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 582.066 189.66 570.066 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+29 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 564.866 193.644 552.866 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 547.666 207.312 535.666 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+31 0 obj
+<< /Length 1998 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm<968iG&AII3n7^---ijsVfUQd08^jK!VUkAPjT(F)`0r"e5,>^'^<;kITL_]CF>D,I";^mkrNLL(fu%:mI7C=Jr4S^+2R+j[oAG+b=23X3f-YS,=IHNsZS/YsZNQ:)&;H5FoT!+>_9QLQZYM$0r_]_ij;t"9f31:@?a#cSnS@H[[J12eJg4,_5j`hiiRog%:?;3o3n!Lr)X`22##1Up>AmUql]og]l`3u#kqC"V'^045CfM8N,BJ6!l:%)Y1.;>"d_?;q>fbkUj,QMs)k#s`9#g*"Z,i^hA40UT9hVdB\=JYh8YW38AHkiTX_K4>;8aqQWi1$d.Xck9L89gX]m>ir`A1G2[QW_A*U<DX\7KQ8ri,&TX%9!R:,phtJ3ff.Xo=V0E^;%11/#Xr#3!L\"re&0:o/N,JmUljK=m%WYfkN[Nhes(W\AKSnYg*+DOgR&2>!iaNl-_0V`hs%Z?@MFU.bn6e!YHHL!9*2"7Q;.lu$!53B-<eYD5>,]_cYppZZ+3N>)S0N!-4SP8>2M]5i]j3am9rHPpHUT?a5Z3L[uQ0i+R,muY)'kt;p]5c1PLf7kJ@I\(LUEt;o^`g!ML%cIW<Y&Dsn379<SEOeRl>_3[t]e@k4&W4SfraK\nmqmOL>t&e\=Up>\B/kR#<\JT8Bie#'r;$jCB]Qc1eQ3rBdbhqW3qTsUSo1n0TbkmfrO^5C_f/!u:WMTf.A>$Lr!;DeW\oU]LD42A.sFh4#.HhWY6/%.UZ;(9j72V,o$hc!5]q0"E"q=p)6@pLbi`p\A\`WYfMMA1JOcbX=%nPe2K"U[1X'\mG$V&EHuA3eY,7*?ga>CKT[*4-(*'?8A+t7JOYY(46\Q$H,ii2;])Gs4?pB+\gO0&*^n`i&$F42I"lWX<7R&sbQ,cb2aYlQR7(ALmV:<sm*UfeT!Mlk^(J*lqN4A#`@tb`nV$)r$$3%S1j>4"tcpC`J:UA)qg31]fXh\U>%GWqa*cbh
 mOCV?gPuD,/!/>chREV/?GHWJs`Dj$bpmejBC(m/+MVoa`X!COI__?AK8Hg4=H+"<p%b7Dq/GuC;]rI]YW1KE5VYcfuVebblqX)sfAd:Al%KQ$\6?JTj$FeXGm>Bnj9Na??HjkVZ4?q9@)dJ,+(.M-D.kmsD,sK)`+JK4mnPJiU)AjB5oMX5\e@UdVaE9[L^g&R7n&DcXHJ-i;b=?t!"6hcuYY3%7j&+gNc9E@BMI_(j5PTWP5NAhMQhV%HM(_9^b]*sVe+SnbY!()TNH\qX$98qcc'.5$,sc)@3_R$i%o;pVd"cim_+:NB$_k]VHB%STY64#[(l#%a$aGSQ\3RiU=(XOZbP^a(7<b]f__pJ3;G''tUc>8$5e8"*?\Ji,ib+o$KCL>8J^K6lePV'^20JYfa(d`f'3%""kIN&$TV63=Q*td$oW%-pY8([m6CA?U79O[P,nA=Hgd[FRZ(Oj'YoN#Y-Pko*T+5V'k7QVE]29#[+WQG<bt+a@g`[0*NMrIJ%%?ZqGUrKSH"Lh-NI`SIpk8I7a`t,&eI\KOTiQl'e&`2Upg8VjA3(92`0hDc)h_bG[0c4gY!tiI^;nWP!l97Je8cJWNHk7Fo(@`:.tqn2Y8R8tf<5?V,BsIuSOUJh7=$N1i3W]#,%Xh2;>@pP&822tbk$nC0Ep)^lt4P5'4tQtFt>o[3:QA.j+!Xm:nR$omS>-4_fSh6.!gEJH!/_)JZmu':*^0$oU)7sS"ITlPiMPP#_uFiPWSLPh797>L/b"gACCTfCf65!kB:rfI.M"173`1P_7S_qF<>m+=jW0N+HDmV7s,2)cbT:BFnK&V>oFd!4]^h)PTkOYN0!"j\lr/;o#<r'%h[A.C7?n`Q0G]JW"2H8!)E2k_>XubBs;W>>1@HVAWo,2+c_<JP]II^gmS=WA$,"`ea=`A2qtq(qst`#1J[V#!T)D.2QN=dD4PQjrM\;dTcL6l?ethAM<\e36"E\5DAG+u*3E
 d)Zb;sqK&Q\4#=$nh~>
+endstream
+endobj
+32 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 31 0 R
+>>
+endobj
+33 0 obj
+<< /Length 1783 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau0D968iG&AII3n7^,n-iq':;sYiFR`qRup_N#mOcY6N-57#Km=4$T93BOd,q&(nChX4B@^46tH$-H>IC&dYU>?[bhQAW+pg+r\n3;l#h_-4?O>mS0/\LcAn(#r[L4BIR7b`E<'7#hYb0=P[[p2+EW7Q$D0o>kU]=IMs?bEuB?F!VQ7F'*);FXr<?bDjm5ur/n29;IW8-5*gU3KPJY)IflnjQ@MZB/U,4tXuE=#E$b-S/+6D@U>WD.Y]+^!PP*<S9mOnCa.[f4^Wh)kkTjAnS7h+Q8uodTaT_4PpIN<pH^sE%&h$.4R]fhZ#2dotp*K+<d^7DkiCHh#8j9D/M"V3snVmFG$LXkfWb,b'.#h$JVWOlE@,R(hJs,K:MmK?-4-4`-s5q]97lEG]V$.hUT(OlUN0`J$I0#2uJ@U@H03nYiba_q_2BP*?Wo5LtqV0\k48VY!K&B4PX7H/d(j\Y:]^U1.(<EhMC1a6SA(<*6``'P96J@HtSN_b$(JEiEo#:l(mJ0BL-G5Lre8"(>fUrb/JHn2_o/-4HE-1<[]PWl-hW7!7?%J=;q)\)r'lQnV)B@VsPS#5b5ANDZ)ZP#J5(-k*Sq9i6'Bt$gqI\-&K7+=2hO)$>urfB.+Ei#_R5pNHnXMj-6b[#I<k/p@c.A#5[aa,>-fY_7B`XNM>T(rWYQd"$#K+95t$0_e#',&oBT<9j''YO_#f4,9`fhl'BE!7%L#V'MssP-,5fU;OZ7\2&d5UYNlK6bA->i_=2flB6%t.4m8Ct@<SYiS_muBI-d[YajSQ_^jW4C`eXd+KaB&I`+aCBp(#+[EinL0[`!&_=fQhh-FMW0d!iA^fg3K>fj[#-)"p;*9oRa?SYJ[D5nmOsrr=.,_EKPqBM5=.ja*r/D=<@gH:\rd:3P[S3n#.e0X\00^D#6*FG9t92+i4]>K3B`#j%s9#AUn4?clFcOjMo;V[IO#Vf53Y:e(I),%=+WDlKeX:P#6rKb/h
 \M(L9!]\&^3,"Sp<Qfe2J@7$UL+5f,5Fh'U$+2!*aTD>8!O<ajJRGDtPDiK:cl'Q\M@W2L_j-ACA9("q\ABFPtPElV"h6U`s1.Y9Olr/,MS1t1g3_XQ(;9>Q3jVs&O(h5&C9dLQ*eLHnn!*#rdV:f;Apak5$[b@7[8K<lRGrC3kNh(qc^rJ.f3=K$1=kGOWLDjOO*BWgs*@etYZBPRHBn+KV<K!=(.3t:l30_)V\ok%g\.)l?lVc8.7sP_^KCl&TDSR(q_IT$R+`ZIVHH(*X!S_2umF:sq+Dh>s8>hGWCDNp:9_V^K87@1<XdmC#1QcsqiZpFPBXf(75iU@hDgH'BX"8lW*3R&4`m-+i5oKc%FMp3`0r[PRP%`MHBlYhCluj"BYUCX1+D5sRD$@ep^G$tJDm+X1&17K)$_^'!-iV1hfaKCOnAAbtBS<B>XK;+#ZuaPNLI_uf5&"]!-.XY(DZJ(g1ehHFYqo\e>^,=J^WmhhO,MJnr)6tL(jZ-OHpL,SS2p%rT,_Jm,r,%"kHs?%(+(DYbjcd8Zj]bL*@nKZdfS6_a"78.:tmM9]G0']SnD^mkp9X;*JUl$49#X[<gU.P/:a<p&i9"9XY@ZVG's#*E8>_[]C-jMJ_Nih.^Y*A^WDqYZbXCSdoSFp?_Luk,#AW>LmJ-A9mYXpi`kB3(8AuL^U((=;Q,6\H36g8Lh(Md5r5:;2tOH25AIab[2)E`(8\?n>)E@A[T)^QNd0(iG>!E`)fs=_HL_9/HdTPE-&A[Me_:]'feoKm/bF6aT[s#o*XQ%?~>
+endstream
+endobj
+34 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 33 0 R
+>>
+endobj
+35 0 obj
+<< /Length 1775 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau`T968iG&AII3n7^/##k?oL4k[!/Wl^4S>16-/"%>NhCPkq[.$"=U5uJsE1`oVa:<$e)!FckWh`e<SMqS&<p<O.O)u]Y_k1dtc*66HV)))!(k/9V.VcG.Gea/@Mm3D_p%e@F*G7WKG7"8@@B6HjXlQ9qCPkqUo1Ma8%5$b+h\?nG(Mr-@NhpBm9Z0`aU@4'*%,'.`?,fqMAT,V8=L7$U%OY1XD.Zpic:u?Rn9&]HoL]j!]N$;;DOP'gAq]OZ$[$("U=bsc4:mf0F<TkcZ9u@WTUHUufjEoEL'Vl=C[/YkPOQSmuh*)E4I;PKl^of`TCT9X:7-^h]!T9\_&'*PmG=$-mO=\n-MJ*,T_ARAR0eX&1o?#u=-,q(e(m-GUg'0f#;i`N7kuoEjHnfT^j%UGj6RI8N1q2is]>!fnN!kmkqe-!Qr3Gghp0/;=[>U(ig5,)sD952Q]?(g.H!L;"69lWmYKP*$5YB_>k9@*qm:@f@3d?1n[1W+m,YLK!BY\m`MC)f<E'u$H\FsFmI%9pl:F7pl.<$=G!IHCO1nm8gi;'e%9J7F[1Y:.]o1V/*EGC0km>#&e3Zlb-';f4+E*USf'3[o9\D)`m:cXAR[ClE_dQZ/NmWnM7+=*-;[!gm.NdZYc@LTf3R)Gk+&#WaV&FRuhg>@5icRqcKr?2K3k]NJm]QP2b64c?l8OD0.f)[i8,pgVe#p>J+9N<F'G,),++Vt_a:r'Vo0U.>l"fjV>eSDe35@f,3DfX?`j_?Mr'PBHW?q`&L0]K%mn[KC7OU'dZ>'#0tj-f3XbhTeP;cZ03?fb"%*0+9a.rc=;#'Bo#aQ.5,Y,gDt<<NEM3TOQo[C0ZrCbCXP>QJ(F'BPr<G/1mDO[s_)1a?!SE:&ZC%&7[WXkrkMmYhlKSVoUoWSn]-,#F53IJQP0-JM4knrT>s9iaZ:FU>&#ljp-B%];p)_709H]Joso(VtA"Wo3/B!NNhNE*f87T8Q$<mjTj
 [9A\:M:u=Qf/QRS_rRXm4<@h'f`OtF1ZGU"*W;#m.h!MYkUTHK4IV93eAL"3:A5)M2fr1QWCg.(Z4;pjaNi,g=5nsoQ6kqcp)c>!BY2^2D.V0[lcVoMmXkQi6*E,>7M8Z2-BHg&L15j@)"DLirVs;%`,\3;i+S3V;!1V>K;WN-,$:[1s*7%UNYPUQI&+c:FO8!.7<$5):%D#10*4?L_+\st8',9PTjP+.8kaLK@`Osk=#K89Us!clQ,EK@9p$@9[qm't*k1+QDh+]/)H"!`Q-ChNaSATPKOoncb_6`?LiAY>N0-mHfJor>hMKTY%EM5^\]RnQ<CZ)Er@1-nLI2R,>NqN:.GpX`oC(`c99$-!YGGpoJc9'`aIF$t<hTlf4b2XM"U&JF:T)LXDk8c]LkU6e>k7^c4e)Mf`-(ksD464aO*hp5o1miZW3="$Dcg>a:IF?N,&hk`R_ZQ#"$,QX#l(F7bhfhcaMDT[sTS)JV"ms`e_k<b0/=ksmr-A/:"1td`O(Nj>if=q3@.(GmEnWJUlO`)hFYa1ij1Hau6]CV$E#`?.nQj-X#01m,o'V'2]%;30[AuG/'E?]FK/_(u+enEd`4C1H<#r]thNJ:%<AeFV\O.@e;,k8/Mn*k>:qLC?NfR-Y&RIRsfC]dlpIaR`IGCT*^BY]d>fD7tfWL=_kui3T*6b]CkK%kWjY<mt&X#5dJ'Hut[L?Hn.nrSpDHAkC]lnP"1"G9\1etZ3P&'_'A74Rd*muGb8j!/c8^]66]5t1l\]DL@#X%YW"ck@:[K~>
+endstream
+endobj
+36 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 35 0 R
+>>
+endobj
+37 0 obj
+<< /Length 1753 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau`T8TWWE'Y`m7n7^,n-j^Mkg6:nbBq!>SNHM:JJ4N3t9b@^=H271<\D_uc.4N_W4SBU7hLb2Jpjh,\idSH5]'u5lqYdop>i[qS(ok=OdJprl&eAF14!et!Mr,>[-O!%o6Ep<u&&e"BqQSa+gfhd!5G$oGZ'HXY$JiL#m[ZSFkdC"'f1N2d?HLaj&(f+!cLPVE_s;Genr7'B7S2BmY:q<:5k7C;2<ZD9kR?UcIQ_tg*YT7?lZm&(UiWDb!(B)[Kn!OaQBa\^,0SYu=mQC7)p4'2?S%J^\.n**4Y?HfQrD*XkB\ChZ_rr(*f;R;&n?SV#?1FR#GmJ]:07Q/b#B(\'Y0VKDYI8<b`"HS"?T=VE@`A@o:4!*1OhBM#>q`5okm4@NKK3a3(1K9)m;@<,,=0+UDY_n^iCmt6Y'F"Di9381%KsqY9VYkX:*dV0L,s7)Mb[-!%=<!'oY9-E65g8=Tq&("\8n)fj9oe!l&4/;=Z(ga](NM%:2!"gbBXs4;Z<Z1j^Qn+p6,m=YAV6S[+FseSLbS'^R_1at9=mRdM"r$h=#5fR];9c+.j(SQSR69G"Y_>3Ra+K^U,5XaYLHdTn:/ENC;02#I:5?JG\ZSXRH9Sb#fp#i/ZOj8OZ@=HP?pY;P2raKMaMo\*([?<0sRH[TNRRjGHeQLQ((Ok1JsBe-^)2Ngu*lFA\1:PE=jGs"W`h7ocP+LrnNU"dolm&</]W2qA\G<m=u&q.K`IEo6afH88PFs:@pnk:><hf&c,5\qb_f@K==!#<M3$*hW@El::K9B49$L\t\$%RL^%QXLeaSF87A%ap0+fG=?s+P"L37mn`)4A^fL?fa5s2j\f_Ng.X@IhFk",H@knq5+Mf8(=UWWHttnKBL7F3\Ao>I5D;Z2:2;;GK=qLji^ne!'O`>]W]W.^)Y2ia\;Cc$:83bmh851RTCWGP!1XjL.tXN3ZZ3Hd;2;G\IB(aRk3TG$T,&>e#enuGa4^G%+rg
 8C'=o0M'(H-V!AluM9a#4`"7H]Qk=/W@$64<pDTb93?/IWbVR)f7EJA:MIoOLf<^J^N$[@'Ejf$M*-@If%J[2;U`)/TNEnT/3sd*"(5K2#kP^.P`l3j79uQc,=.&)4Ff.:<2a>.Dl=0"+GIfJ+<>j<mRMO60E\rn4?lV6hd@*Sb"3`\4dZ2&=rKH/J&tk=ogUM.UG=!73Zd_h-d+k=rgem!u]o<]t\)Q.ob%&Og*Z;["ke2C45i5X(Qb]L5FDdTIp8>grc'#OM;]Vs7h&@a"jI\CLk1_hT!-*JE0aP`$YJI5\P)FPo-K)Nge!%7bCHWbXcm;V1"%4CL)2RtN8qhmu%'JJQjth@f_,5kj2n&Z%Pdj`P\"A.\Rqf+TirI%cNV/:`$>KrM!%>\FY:E^\fIu:U>,"g\1L=.aop<Cq=MblgY#r"0rp'o7ab:.09CrCeWqPN>MC!4"Pj3.VBK2[SY]icn8OsL#-p7g4VAPO6<p-i.$f$'ER,e,3HNuW\IIcB"`V^A<[D]V/V?Yojq!Xi`YS4'HK&jjk&U#BH;S:Ao8`SF)C,V^MDPM?RcBL^?G-4"afcBV]gk2E!C`G7sN]cX5TmlCWYIP+XDPZ:L5'/6k6pGa0\n<X6kZgh_A)BjW-];0cI\U+Z=UW(.4L`/^759f(![!P)"stL5@TCsgL&Xmf?;&#geK@A%h8D&<bQt80Cdp#:C^)h@>;kLHZ'!A>">_-!82@1u!sj_E\J`o*.kkQM/"]pu%!I+&lB[6`~>
+endstream
+endobj
+38 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 37 0 R
+>>
+endobj
+40 0 obj
+<<
+ /Title (\376\377\0\61\0\40\0\120\0\162\0\157\0\147\0\162\0\141\0\155\0\155\0\151\0\156\0\147\0\40\0\167\0\151\0\164\0\150\0\40\0\102\0\157\0\157\0\153\0\113\0\145\0\145\0\160\0\145\0\162)
+ /Parent 39 0 R
+ /First 41 0 R
+ /Last 46 0 R
+ /Count -6
+ /A 9 0 R
+>> endobj
+41 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\40\0\111\0\156\0\163\0\164\0\141\0\156\0\164\0\151\0\141\0\164\0\151\0\156\0\147\0\40\0\102\0\157\0\157\0\153\0\113\0\145\0\145\0\160\0\145\0\162\0\56)
+ /Parent 40 0 R
+ /Next 42 0 R
+ /A 11 0 R
+>> endobj
+42 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\62\0\40\0\103\0\162\0\145\0\141\0\164\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
+ /Parent 40 0 R
+ /Prev 41 0 R
+ /Next 43 0 R
+ /A 13 0 R
+>> endobj
+43 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\63\0\40\0\101\0\144\0\144\0\151\0\156\0\147\0\40\0\145\0\156\0\164\0\162\0\151\0\145\0\163\0\40\0\164\0\157\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
+ /Parent 40 0 R
+ /Prev 42 0 R
+ /Next 44 0 R
+ /A 15 0 R
+>> endobj
+44 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\64\0\40\0\103\0\154\0\157\0\163\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
+ /Parent 40 0 R
+ /Prev 43 0 R
+ /Next 45 0 R
+ /A 17 0 R
+>> endobj
+45 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\65\0\40\0\117\0\160\0\145\0\156\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
+ /Parent 40 0 R
+ /Prev 44 0 R
+ /Next 46 0 R
+ /A 19 0 R
+>> endobj
+46 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\66\0\40\0\122\0\145\0\141\0\144\0\151\0\156\0\147\0\40\0\146\0\162\0\157\0\155\0\40\0\154\0\145\0\144\0\147\0\145\0\162)
+ /Parent 40 0 R
+ /Prev 45 0 R
+ /A 21 0 R
+>> endobj
+47 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+48 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+49 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+50 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+51 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+52 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+53 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 6
+/Kids [6 0 R 23 0 R 32 0 R 34 0 R 36 0 R 38 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 39 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 47 0 R /F5 48 0 R /F1 50 0 R /F6 49 0 R /F9 51 0 R /F2 52 0 R /F7 53 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [23 0 R /XYZ 85.0 659.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [23 0 R /XYZ 85.0 518.666 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [23 0 R /XYZ 85.0 369.413 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [32 0 R /XYZ 85.0 289.8 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [34 0 R /XYZ 85.0 345.4 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [36 0 R /XYZ 85.0 502.2 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [38 0 R /XYZ 85.0 601.4 null]
+>>
+endobj
+39 0 obj
+<<
+ /First 40 0 R
+ /Last 40 0 R
+>> endobj
+xref
+0 54
+0000000000 65535 f 
+0000015819 00000 n 
+0000015912 00000 n 
+0000016004 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000805 00000 n 
+0000000925 00000 n 
+0000000992 00000 n 
+0000016149 00000 n 
+0000001127 00000 n 
+0000016212 00000 n 
+0000001264 00000 n 
+0000016278 00000 n 
+0000001401 00000 n 
+0000016344 00000 n 
+0000001538 00000 n 
+0000016408 00000 n 
+0000001674 00000 n 
+0000016472 00000 n 
+0000001811 00000 n 
+0000016536 00000 n 
+0000001948 00000 n 
+0000004262 00000 n 
+0000004385 00000 n 
+0000004447 00000 n 
+0000004584 00000 n 
+0000004721 00000 n 
+0000004858 00000 n 
+0000004994 00000 n 
+0000005131 00000 n 
+0000005268 00000 n 
+0000007359 00000 n 
+0000007467 00000 n 
+0000009343 00000 n 
+0000009451 00000 n 
+0000011319 00000 n 
+0000011427 00000 n 
+0000013273 00000 n 
+0000016600 00000 n 
+0000013381 00000 n 
+0000013658 00000 n 
+0000013908 00000 n 
+0000014129 00000 n 
+0000014402 00000 n 
+0000014617 00000 n 
+0000014832 00000 n 
+0000015046 00000 n 
+0000015159 00000 n 
+0000015269 00000 n 
+0000015380 00000 n 
+0000015488 00000 n 
+0000015594 00000 n 
+0000015710 00000 n 
+trailer
+<<
+/Size 54
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+16651
+%%EOF



Mime
View raw message