ࡱ> ~M bjbj== [WWryl"  $ PFt| HOB<~LK$(*NNNNNNN$\Q |SN }+G$K$}+}+N3: : gO333}+: l N3}+N337)IV , M6 p c.LNMO0HOLNT=1TM3 : : : : Fcast multicast file distribution: Tune in, download, and drop out Jim Gemmell Microsoft Research 301 Howard St., #830 San Francisco, CA 94105 USA Jgemmell@microsoft.comEve Schooler Computer Science, 256-80 California Institute of Technology Pasadena, CA 91125 USA schooler@cs.caltech.edu Jim Gray Microsoft Research 301 Howard St., #830 San Francisco, CA 94105 USA gray@microsoft.com Abstract: Reliable data multicast is difficult to scale. Fcast, file multicasting, combines multicast with Forward Error Correction (FEC). Like classic multicast, Fcast scales to large audiences, and like other FEC schemes, it uses bandwidth very efficiently. Some of the benefits of this combination were known previously, but Fcast contributes new caching methods that improve disk throughput and new optimizations for small file transfers. Keywords: Reliable multicast, forward error correction, file transfer, caching, scalability. Introduction Frenzied downloading that raises Internet traffic by an order of magnitude has been dubbed the Midnight Madness problem because the mad dash for files often takes place late at night or in the early morning when files are first made available. Spikes in activity have been due to a range of phenomena: popular product releases; important software updates; security bug fixes, the NASA Pathfinder vehicle landing on Mars, the Kasparov vs. Deep Blue chess match, and the Starr report. The danger of such traffic spikes lies not in the data type, but rather the distribution mechanism. These problems are caused by the web's current unicast "pull" model. A TCP connection is established between a single sender and each receiver, then the sender transmits a copy of the data once over each connection. Each copy must traverse many of the same network links. Naturally, links closest to the sender can become heavily saturated. Nonetheless bottlenecks can occur anywhere over-subscription occurs. Furthermore, congestion may be compounded by long data transfers, either because of large files or slow links. These problems could have been avoided by using the multicast file transfer technology (Fcast) described here. In fact, using Fcast, every modem user in the entire world could have been served by a single server machine connected to the Internet via a modem, rather than the 44 machines that serve microsoft.com via two 1.2 Gbps network connections. This paper describes how Fcast combines erasure correction with a data carousel to achieve reliable multicast transfer as scalable as IP multicast itself. Multicast file transmission has been proposed before [ REF riz97a 1, REF vic97 2]. However, previous work focused on network efficiency. This paper extends previous work by describing how Fcast optimizes network bandwidth for small file transmissions, and how Fcast uses caching to optimize disk throughput at the receiver. For additional details not permitted by space in this paper, see [ REF gem99 3]. Reliable Multicast of Files Using Erasure Correction IP multicast provides a powerful and efficient means to transmit data to multiple parties. However, IP multicast is problematic for file transfers. It does not guarantee that packets will be received, nor does it ensure that packets will arrive in the order they were sent. Many reliable multicast protocols have been built on top of multicast (see [ REF gem97 4] for a brief review). However, scalability is difficult to achieve. The primary barrier to scalability of these protocols is feedback from the receivers to senders in the form of acknowledgements (ACKs) or negative acknowledgements (NACKs). If many receivers generate feedback, they may overload the source, or the links leading to it, with message implosion. In the data carousel [ REF afz95 5] approach, the sender repeatedly loops through the source data, without any receiver feedback. The receiver listens to as many loops as necessary to obtain all the packets. This can be made more efficient by including forward error correction (FEC) [ REF bla94 6]. Most of the FEC literature deals with error correction, that is, the ability to detect and repair both erasures (losses) and bit-level corruption. However, in the case of IP multicast, lower network layers will detect corrupted packets and discard them. Therefore, an IP multicast application need not be concerned with corruption; it can focus on erasure correction only. The erasure correction used here is called an (n,k) code. k source blocks are encoded into n>k blocks, such that any k of the encoded blocks can be used to reconstruct the original k blocks ( REF _Ref440356186 Figure 1). For example, parity can be used to implement (k+1, k) encoding. Many (n,k) codes based on Reed-Solomon codes are efficient enough to be used by personal computers [ REF non97 7, REF riz97b 8, REF riz97c 9]. Fcast uses a systematic encoding, in which the first k of the n encoded blocks are the original blocks. If these first k blocks are received, no decoding is necessary.  EMBED Word.Picture.8  Figure  SEQ Figure \* ARABIC 1. An example of (n,k) encoding and decoding: k original packets are reconstructed from any k of the n encoded packets. In practice, k and n must be limited for Reed-Solomon based codes as large values make encoding and decoding expensive. (k,n) = (64, 255) are typical limits [ REF riz97a 1]. As most transmissions (e.g., files) are longer than k blocks, they must be divided into groups of k blocks each, with erasure correction (EC) performed on a group-by-group basis. Each block in the session is assigned to an EC group of k blocks, which is then encoded into n blocks. Each block is identified by an index specifying which of the n encoded blocks it is, as well as a group identifier associating it with an EC group. To complete the reception, k distinct blocks (i.e., with different index values) must be received from each group. To ensure the minimum wait for a block from a particular group, all blocks with index i are sent before any blocks with index i+1. As shown in Figure 2, when block n of the last group of the last file is sent, the transmission cycles. One danger with this transmission order is that a pattern of periodic network losses may become synchronized with the transmission so as to always impact blocks from certain groups; in the worst case, a single group is always impacted. The impact of periodic losses may be eliminated through randomly permuting the order of groups sent for each index [ REF vic98 10]. Thus, periodic losses are randomly spread among groups. Fcast assumes that a single sender initiates the transfer of a single file to a multicast address. The sender loops continuously either ad infinitum, or until a certain amount of FEC redundancy has been achieved. Receivers tune in to the multicast address and cache packets in a temporary file name until they receive enough blocks to recreate the file. At that point, the file is then decoded, and the file name and attributes set. See Section  REF _Ref457011789 \r 4 for more details of the reception algorithm.  EMBED Word.Picture.8  Figure  SEQ Figure \* ARABIC 2. Transmission order: Any k blocks must be received from each group to reconstruct the transmitted file Each file sent is given a unique ID, and each group has an ID according to its offset from the start of the file. Thus, each block in the transmission is identified by a unique tuple. Packets with indices 0 to k-1 are original file blocks, while the packets with indices k to n-1 are encoded blocks. The file ID, group ID, and index are included in the packet header. Our implementation makes the assumption that all packets are the same fixed size. Selecting a value for k To complete the reception, k distinct blocks (i.e., with different index values) must be received from each group. For some groups, more than k blocks may be received, in which case the redundant blocks are discarded. These redundant blocks are a source of inefficiency, as they increase the overall reception time. Thus, the inefficiency is related to the number of groups G, which is the file size divided by k. Thus, larger k values generally result in more efficient transfers. However, implementation details prevent construction of a codec with arbitrarily large k. Let the maximum possible value of k be kmax. This section explains how to select an optimal k, given that k can be at most kmax. With this limit on k, larger files are transmitted less efficiently (see [ REF gem99 3] for more analysis). However, at the other end of the spectrum, small transfers also require a careful consideration of k value. For instance, transmitting a 17 block file with k = 32 would require 15 padding blocks to fill out the single group Recall, however, that larger k values only improve efficiency by reducing the number of groups. Therefore, using k=17, avoids the overhead of padded blocks, and has the same efficiency as k=32, since there is still be only one group. Therefore, any transmission of S ( kmax should use k=S. Transmissions of slightly larger values are also problematic. Assume for the moment that k must be fixed over all groups in a file. Consider a transfer of kmax + 1 blocks. Using k= kmax would give one full group of k blocks, and a second group containing only one data block with k-1 empty padding blocks. The overhead of the transfer would be close to 50% with k values that are larger than 10. For example, if kmax =8 and 9 blocks are to be transmitted, then 7 padding blocks would be required (see  REF _Ref437058894 \h  \* MERGEFORMAT Figure 3). Again, larger k values are not necessarily better. Rather than having 2 groups of 8 each, with 7 padding blocks, there should be 2 groups of 5 blocks (i.e., k=5), with only one padding block. This is just as efficient in terms of erasure correction (it still uses only 2 groups) but greatly reduces the number of padding blocks.  EMBED Word.Picture.8  Figure  SEQ Figure \* ARABIC 3. Avoiding padding overhead by selecting smaller k. In general, when transmitting S blocks with kmax= nMaxK) return nMaxK; return ceiling(nBlocks/nGroups); } Figure  SEQ Figure \* ARABIC 4. Selection of optimal k value.  Figure  SEQ Figure \* ARABIC 5. Wasted space due to padding vs file size ( k=32). So far, we have assumed k must be the same for all groups in the file. However, as we carry k in each packet, we have the option to vary k for each group. Suppose that we have discovered the optimal k=k0, as above and that S = (d+1)k0 p, where p>k, keeping FEC blocks in memory or on disk may consume much more space than the original file. Furthermore, in some cases the time penalty to pre-compute and write this file may not be acceptable. Fcast does not support this pre-computation feature, but may support it as an option in a future release. The Fcast receiver has a more complicated task than the sender does. Blocks may not arrive in the order they were sent, portions of the data stream may be missing, and redundant blocks must be ignored. Because the receiver is designed to reconstruct the file(s) regardless of the senders block transmission order, the receiver does not care to what extent the block receipt is out of order, or if there are gaps in the senders data stream. The receiver keeps track of how many blocks have been received for each group and what the block index values are. In designing Fcast we considered five possible schemes to deal with received packets: In-Memory, Receive-Order, Group-Area, Crowd-Bucket, and Bucket-per-Crowd. The In-Memory scheme supposes that the receiver has enough RAM to hold the entire file (plus metadata). Blocks are received, sorted and decoded all in main memory. Finally, it is written to disk. Naturally, this approach cannot scale to large files. Receive-Order simply writes all blocks to disk in the order they are received. When reception is complete (i.e., k blocks have been received for each group) the file is sorted into groups prior to decoding. This scheme allows fast reception (sequential writing to disk is fast) but suffers delays in the sorting and decode phases. Such sorting delays can be significant for large transfers. Note also that in-place sorting typically requires disk space of twice the file size. All the other schemes presented here require only the disk space of the transmitted file (plus the metadata trailer).  EMBED Word.Picture.8  Figure  SEQ Figure \* ARABIC 6. Group-Area reception method. The Group-Area scheme writes blocks to the area of the file corresponding to their group (i.e., for group g, the k blocks beginning at block kg). Blocks are received into one of two single-block buckets in RAM. While one bucket is receiving, the other is written to disk. The block is stored in the next empty block position within the group, which may not be its final location within the file (see  REF _Ref437753060 \h Figure 6). Once reception is complete, each group is read into memory, decoded, and then written back in-place. This scheme avoids sorting delays in the decode phase, but must perform a random disk seek to write each block (in a perfect reception it will be seeking from one group to the next to write each block). The round-robin transmission order challenges file caching mechanisms. In fact, disk caching may slow down writing. For example, if a disk cache uses 4KB pages, then a 1 KB write operation may involve a 4KB read (to get the page) followed by a 4KB write. To prevent such problems, blocks are written in unbuffered mode during reception. However, even in unbuffered mode, 1 KB writes are so small as to allow disk latencies to dominate total writing time, making writing inefficient. The Crowd-Bucket scheme assigns multiple groups of blocks to crowds ( REF _Ref437753034 \h Figure 7). Blocks are written as in the Group-Area scheme, but rather than writing to the next available position in the group, they are written to the next available position in the crowd. In order to write several blocks as a single sequential write, blocks are buffered in several buckets, each of size b, before writing. The crowd size is set to be b groups. As long as a bucket is not full, and the incoming block is from the same crowd, no writes are performed. When the bucket is full, or the crowd has changed, then the bucket are written out to the next available free space in the appropriate crowd position in the file. When the Crowd-Bucket scheme has completed reception, each crowd is then read into memory and sorted into its constituent groups. The groups are decoded and then written back to the file. This requires no more disk I/O than is minimally required by decoding (one read/write pass). As sorting time should be small compared to decoding time, performance will be good. The cost is in memory: kb blocks of memory are required to read the crowd into memory to perform the sort. Note that Group-Area is a special case of Crowd-Bucket, with b=1.  EMBED Word.Picture.8 Figure  SEQ Figure \* ARABIC 7. Crowd-Bucket reception method. If groups are always sent in order starting with the first group, then Crowd-Bucket only requires two buckets while receiving: one to receive into while the other is written. However, as mentioned previously, the group order should be randomized in order to prevent periodic loss leading to correlated group loss. The sender could randomly permute crowds rather than groups, but as crowds are a receiver concept and would have their size adjusted by receiver disk speed and memory availability, it is not suitable to have the sender select a crowd size. A better choice would be to have the sender randomly select the first group to send, and then proceed in order, modulo the number of groups. That is, it could randomly select x in the interval [1,G], and send groups x through G, followed by groups 1 through x-1. The position of a group in a round is random, so correlated loss of the same group due to periodic losses is prevented. If the sender only randomizes the selection of the first group in a round, then the Crowd-bucket scheme can operate with 3 buckets. If the first block sent in a round is from the first group of a crowd, then only two of the buckets need be used, and writing can operate as described above (receive into one while the other writes). If the first block is not from the first group of its crowd, then the crowd will be split up so some of its blocks are sent at the start of the round, and some at the end. In this case, one bucket is dedicated to receiving blocks from that crowd. The third bucket is only written when the round is complete. All other crowds are received and written as described above using the other two buckets. (Note: as kb blocks of memory are required to decode and sort, and typically k>2, using 3 buckets instead of 2 has no impact on overall memory requirements in fact, k buckets might as well be used to allow for variations in disk performance). Testing on a Gateway Pentium 300 running Windows NT 4, with a block size of 1 KB, and k=32 yielded the following results: Using the Group-Area method, the fastest that data can be written (and, hence, received) is 1674 kbps. Using Crowd-Buckets, with a crowd size of 4 groups (i.e., b=4), data can be written at 4715 kbps, approximately a 3 times speedup. This requires 3k extra memory, but with k=32, this is only 96KB. The Crowd-Pool scheme also arranges groups into crowds. Like the crowd-buckets scheme, it writes blocks to the next available position in the crowd, and performs a single pass sort and decode when all receiving is complete. However, rather than having 2 buckets, it maintains a pool of block-sized buffers. With the Crowd-Pool method there need not be b groups per crowd more or less are possible. Also, the Crowd-Pool scheme does not constrain the randomization of group order as the Crowd-Bucket scheme does. In fact, it does not make any assumptions about the send order. There are two ways to implement crowd-pool. One uses gather writing, i.e. the ability to gather a number of discontiguous blocks of memory into a single contiguous write. The other way, non-gather, does not assume this capability, so discontiguous memory blocks must be copied to a contiguous write buffer before writing. The gather implementation works as follows: Let the number of crowds be c, and the number of groups per crowd be g. Thus, g=S/ck. Let the buffer pool consist of bc + b c + 1 blocks. Whenever a crowd has more than b blocks buffered in the pool, it writes b blocks to disk. The write is performed as a single contiguous write in the next available space in the crowd. Whenever all crowds have less than b blocks buffered, then any crowd may be chosen arbitrarily, and its blocks are written to disk.  REF _Ref437752929 Figure 8 illustrates the gather implementation of Crowd-Pool. bc+b-c+1 blocks of memory are sufficient for the gather implementation of Crowd-Pool (see [ REF gem99 3] for a proof). Now suppose gather writing is not possible. Let a write buffer of size b blocks be used along with a pool of bc-c+1 blocks, for a total that is still bc+b-c+1 blocks of memory. Whenever any crowd has at least b blocks in the pool, b blocks are copied to the write buffer and a write is initiated. Whenever all crowds have less than b blocks buffered in the pool, then a crowd is chosen arbitrarily to have its blocks copied to the write buffer, and the write is initiated. Thus, it is possible to avoid requiring gather writing at the expense of extra memory-to-memory copies (which should not be significant). For a proof of the sufficiency of the memory for the non-gather Crowd-Pool algorithm, see [ REF gem99 3]  EMBED Word.Picture.8  Figure  SEQ Figure \* ARABIC 8. Crowd-Pool reception method (gather implementation). The memory required to implement Crowd-Pool is, as we have stated, bc+b-c+1. However, in order to sort and decode a crowd in one pass, there must also be sufficient memory to hold an entire crowd. A crowd consists of S/c blocks. Therefore, the memory required to cache, sort and decode is m( max(S/c, bc+b-c+1). As a function of c, S/c is decreasing, while bc+b-c+1 is increasing. Therefore, the minimum memory required is found at their intersection, which is at (b-1)c2 + (b+1)c S = 0 . This can be solved for c to obtain:  EMBED Equation.3  Substituting into m=bc+b-c+1 yields  EMBED Equation.3  So we see that as S gets very large m can be approximated by (S(b-1))1/2, which grows with the square root of the file size. The above uses continuous functions, but, of course, all the variables must have integer values. In practice, g should calculated as  EMBED Equation.3  Now g must be an integer and be at least one. Let gc=max(1,(g() and gf max(1,(g(). Then calculate  EMBED Equation.3  and m=max(gck, bc-c+b+1, S/c). Perform the same calculations using gf in place of gc, and then select gf or gc according to which one requires less memory.  REF _Ref437835852 \h  \* MERGEFORMAT Table 1 compares the memory, disk space and I/O requirements of the five methods. It is clear that both Crowd-Bucket and Crowd-Pool achieve low I/O costs, while maintaining low disk space and reasonable memory requirements. To compare their memory requirements, one must look at the parameter values.  REF _Ref437835388 \h  \* MERGEFORMAT Figure 9 illustrates this for k=64 and b set to 16 or 128. Note that when b=16, Crowd-Pool uses more memory for all but the smallest files. With b=128, Crowd-Pool uses less memory for files up to about 0.5 GB. Therefore, low bandwidth applications that need a relatively small b value can use the simpler Crowd-Bucket scheme, while higher bandwidth applications sending relatively small files would save memory by using Crowd-Pool. For modern PCs, b=8 should suffice to handle transfers on the order of several Megabits per second. MethodMemory required (blocks)Disk space required (blocks)Total Disk I/O requiredExperimental rate (Mbps)In-MemorySSS sequentialNetwork speedReceive-Order12SS random + 4S sequential29.1Group-Areas1SS random (size 1) + 2S sequential1.2Crowd-BucketsKbSS/b random (size b) + 2S sequential2.7Crowd-Pool (Sb) (approx)SS/b random (size b) + 2S sequential2.7Table  SEQ Table \* ARABIC 1. Comparison of receive methods. To support Crowd-Bucket, the sender must restrict randomization of send order to crowds, meaning the sender must select a crowd size. However, for Crowd-Pool, the receiver selects the crowd size, and the sender may send in any order. A receiver with memory m could determine the receiving strategy as follows: If m(S then use In-Memory. Otherwise, find the largest b that m can support using Crowd-Pools; call it bp. Let the maximum b that m can support (m/k) using Crowd-Bucket be bb. If bb> bp and bb>1 use Crowd-Buckets. Otherwise, if bp>1 use Crowd-Pools. Otherwise, use Group-Area. If the receive method selected above cannot keep up with the receive rate, switch to Receive-Order. Finally, we note that decoding a group could begin as soon as k packets have been received for the group, in parallel with reception of other packets. However, disk I/O is required to fetch the packets for the decode and to write the results; such I/O may interfere with the writes required for new packets received. In the current version of Fcast, decoding is deferred until all groups have completed. In the future we may add parallel decoding, but only as a lower priority I/O activity to writing newly received packets.  Figure  SEQ Figure \* ARABIC 9 - Memory requirements for crowd-buckets and crowd-pool schemes; k=64, block size 1KB. Conclusion and Future Work Fcast file transfer is as scalable as IP multicast. Fcast handles receivers with heterogeneous loss characteristics. It requires no feedback-channel communication, making it applicable to satellite transmissions. We have discussed how Fcast optimally selects the k parameter to minimize transmission overhead while maintaining the best loss resilience. We have also explained how to efficiently use the disk at the sender, and, more critically, at the receiver. We are considering several enhancements to Fcast, including layered transmission [ REF vic97 2] to address congestion control. Fcast has been used on the Microsoft campus to distribute nightly updates of Windows 2000 a 336 MB download. It has also been incorporated into a Multicast PowerPoint Add-in, to distribute master slide information in one-to-many telepresentations [ REF gem98 11]. By the time this paper appears, Fcast should be freely available on the World Wide Web to allow distributors of software and other popular content to avoid the catastrophes associated with the midnight madness download scenario. Acknowledgements The authors wish to acknowledge the helpful comments of Dave Thaler and Shreedhar Madhavapeddi. References [ SEQ bibitem \* MERGEFORMAT 1] Rizzo, L, and Vicisano, L., Reliable Multicast Data Distribution protocol based on software FEC techniques, Proceedings of the Fourth IEEES Workshop on the Architecture and Implementation of High Performance Communication Systems, HPCS97, Chalkidiki, Greece, June 1997. [ SEQ bibitem \* MERGEFORMAT 2] Vicisano, L., and Crowcroft, J., One to Many Reliable Bulk-Data Transfer in the Mbone, Proceedings of the Third International Workshop on High Performance Protocol Architectures, HIPPARCH 97, Uppsala, Sweden, June 1997. [ SEQ bibitem \* MERGEFORMAT 3] Gemmell, Jim, Schooler, Eve, and Gray, Jim, Fcast Scalable Multicast File Distribution: Caching and Parameters Optimizations, Microsoft Research Technical Report, MSR-TR-99-14, June 1999. [ SEQ bibitem \* MERGEFORMAT 4] Gemmell, J., Scalable Reliable Multicast Using Erasure-Correcting Re-sends, Technical Report MSR-TR-97-20, Microsoft Research, Redmond, WA, June 1997. [ SEQ bibitem \* MERGEFORMAT 5] Acharya, S., Franklin, M., and Zdonik, S., Dissemination-Based Data Delivery Using Broadcast Disks, IEEE Personal Communications, Dec 1995, pp.50-60. [ SEQ bibitem \* MERGEFORMAT 6] Blahut, R.E., Theory and Practice of Error Control Codes, (Addison Wesley, MA 1984). [ SEQ bibitem \* MERGEFORMAT 7] Nonnenmacher, J., Biersack, E., and Towsley, D., Parity-Based Loss Recovery for Reliable Multicast Transmission, Proceedings ACM SIGCOMM '97, Cannes, France, Sept 1997. [ SEQ bibitem \* MERGEFORMAT 8] Rizzo, L., and Vicisano, L., Effective Erasure Codes for Reliable Computer Communication Protocols, ACM SIGCOMM Computer Communication Review, Vol.27, No.2, Apr 1997, pp.24-36. [ SEQ bibitem \* MERGEFORMAT 9] Rizzo, L., On the Feasibility of Software FEC, DEIT Tech Report,  HYPERLINK http://www.iet.unipi.it/~luigi/softfec.ps http://www.iet.unipi.it/~luigi/softfec.ps, Jan 1997. [ SEQ bibitem \* MERGEFORMAT 10] Vicisano, L., Notes On a Cumulative Layered Organization of Data Packets Across Multiple Streams with Different Rates, University College London Computer Science Research Note RN/98/25, Work in Progress (May 1998). [ SEQ bibitem \* MERGEFORMAT 11] Gemmell, J., Schooler, and E., Kermode, R., A Scalable Multicast Architecture for One-to-Many Telepresentations, Proceedings IEEE International Conference on Multimedia Computing Systems, ICMCS'98, Austin, TX, June 1998, pp. 128-139.  Naturally, to support higher-speed downloads, a higher speed connection would be required.  It is easy to prove from the derivation of k0 that k0 ( kmax/2. With kmax = 32, k0 ( 16. The difference between k=15 and k=16 will be very slight (at least until the loss rate approaches 100%).  Unbuffered I/O requires writes that are multiples of the disk sector size often 512 bytes. We use a fixed block size of 1024 bytes in this first version of Fcast.  Using a Pentium 266 running Windows 98 with IDE hard drive. Crowd methods used a crowd size of 4. Receive order did sequential unbuffered 8 KB writes. See [ REF gem99 3] for more detailed experimental results.  This assumes an -2pass sort which uses order sqrt(Sb) memory for the sort to generate the runs and them merge them. PAGE 7 - PAGE 2- Proceedings of the IASTED International Conference on Internet Multimedia Systems and Applications (IMSA 99) October 18-21, 1999, Nassau, Bahamas Published by ACTA Press, Editor: B. Furht, ISBN: 0-88986-269-9 298-216 - PAGE 1- - PAGE 7- GQ!b c 78DEFGHITUVW34?@AB  )*123dj|   %CEL mHnHu jU j0JU65\EFRez&'0CXt !$If`$If]`$$If`a$r}G  d V%( & FW$$IfTlF5 " K K     4 laLM  !"OPXYjxy~  PQtz~,.45UZst jWUje@: UVmHnHu6CJOJQJ565 mHnHujXg@: UVmHnHu jU6Mk "`"x"6%'+&$$d%d&d'dNOPQa$#$d%d&d'dNOPQ,$$$d%d&d'dNOPQ`a$     n!q!!!!!""####$$#$%$$$$$$%%% %/%0%3%6%I%L%%%%%%%& &A&D&&&&&&&B'F''''''''((D(E(H(K(L(M([(_(b((((())E)F)I)))) j6 jUh6hh6H*6 mHnHu jUT)))))))))p*t*++4+5+6+7+?+@+V+W+X+Y+++++++++++++=,>,A,K,R,V,Y,`,a,b,e,h,i,l,p,q,s,v,x,,,,,,,,,,,,,,------ j!EHUjT : UVmHnHu j6H*6H* jUj9; UVmHnHu6 mHnHu jUjyUH+8++---w..`///// 0 0&0#$d%d&d'dNOPQ$a$($a$%$d%d&d'dNOPQ&$$d%d&d'dNOPQa$---5-6-F-G-N-O-P-~---------------..6.7.H.J.w.x..........// ///V/W/Z/000000000000000-1.1F1G111111111 22j&UmHnHu jc$EHUj : UVmHnHu6H*6 mHnHuj#U jUN&0>0X0n0o00000.1f4~4ige%$d%d&d'dNOPQ%($d%d&d'dNOPQ%$d%d&d'dNOPQ#$d%d&d'dNOPQ 22222222$2'2j2l2o2p2s2t2u2v2w2z2{2|2}2~22222222222222222333334 4 4 4 4d4e48899Q9R999y;};/?8?:?w?~??t@@@@@BBBBBBBBCC jVUj: UVmHnHu jU56 j j0JU6H*6R~487W8E:<>z?t@BB#CGJLP?PHPIPhPiPSS TTgTiT UUUU(V*VBVHV_ViVWW,Z/ZUZVZ`ZdZZZZZZZ[[[[[[[,\4\\\\\\\\\]]=]F]x]y]]]]]^^e_f_q_r_s_t_v_ mHnHu jU56ehrehmHnHrujUehrPY\v___aaab6bNbbRcjcccdh!h'$If$a$#$d%d&d'dNOPQ,$$$d%d&d'dNOPQ`a$v_w___________-`5``` a a a!a3a:aOaWaaaaaaaaabbbb$b/b6b7bJbKbLbMb`bbbrbtbbbb:c;cRcScfcgchcicnc jfEHUj^ ; UVmHnHu jEHUj.; UVmHnHu jEHUj ; UVmHnHu6H* j66 mHnHu jJxUji; UVmHnHu jU;ncoccccccccccccccccccccccccccccd(d)d*d7d8d9dKdLdMdQdRdSddddddddddeeeefff f f f$f)f*fLfNfffgggghjU mHnHujU jXEHUj; UVmHnHu jU j j j j6H*6H!h:hWhohhhhhhhS$$Ifl  r T t70  4 la'$If hhhhlimiiiiiiiijjkkk kQkSkXkYkkkkkkkkkkkkkkkkkkkkkkkkkklllnnnnnnnnn?pApXqYqdqeqfqgqrrrrrrssttttt u-u.ujUmHnHu6H* j66 mHnHu jUCJH* j0JUShhhhhhhhS$$Ifl  r T t70  4 la'$Ifhhhhhiii-i0iYSSSSSYSS'$If$$Ifl  r T t70  4 la 0i2iWi[i\igiwiyiiiS$$Ifl  r T t70  4 la'$If iiik5kl0llnYWUPPPPU & F%$$Ifl  r T t70  4 lanno7oqq~ssss,u,v wwxxyzi{$a$ & F'$$d%d&d'dNOPQ%$$d%d&d'dNOPQ.uJuKuLuMuuv-v.vJvKvLvMvvvvw w w w w)w*w+w,wwwwwwwLxjxxxxxxxxxyyyyyyyyyyyyJzUzVzszzzzzzzzzzz1{2{3{\{]{j{k{{{{{e|f||||||C}r}s} j0JU0JjXU0J$6 mHnHu jUWi{d|r}}~:vw ($a$$a$&`#$xs}}}}}}~~~~~ ~ ~ ~~~~~!~"~#~$~%~A~B~J~K~~~~:;7uvwȿȿ5CJCJ5CJ0J5mHnHu0J5j0J5U50JmHnHu0J j0JU mHnHu jU CJOJQJ j6H*6 j0JUA0J5mHnHu55CJ0J5j0J5U  0/ =!8"8#8$8%8 0 0/ =!8"8#8$8% P0HHWDd-)B  S A? 2k-x#"VuD`!k-x#"Vu%S%/cxY}TU?~X*S . 6":fS(F ٟelǔEmRKLdņ䂝s9F羙ysݏs:04`,zAǽu| ]ޘ޵6ٺ+;l3!):PbO :1p}W8%޹nxT Ov'OIOvWF'+cZrtKӋ3m<=C-#(LcBM[L{3B֝m8a~?&\U w|W;γ0Dv3(/jTMvm*G1c020y&e̻fZYr(㓐!$FLdV\,Efzf(O8oq>xŖBcKp#6a6QafbS{ NU}1NSNe պ{;̶,y`"b; сcOjdHNvm*G3 l?`}m]a?]}5wuI[~lX&52l~KhklS9~AffY0%Cvnd;NbuGw1_*O3ws_w/)5TTs3÷J~ۚޖjBp}~T4ǿe!wjOIyߵ3ۗوR.?W{ ?mwrdo3Ǔr]Ne" yF Mvm*Gq'&c_o׻fIy1,(q%6K4T&eL>X%nZq~RX%(q%!!pq=dئr4qہl&\\tL\׳ZNFO,m\ q gNV#ŕklS9:p>< y*OxY %-X?O0Op~J8) &Iχv8sl,;K|t|h[!ʃC΍3ٺ]r|Lxq[сr@*܊Сdئr+*û͹1wU׾ ЉzfŘjmWQl!'!UiV<۹Și*wU|4cmSnŖBddq {'45 3We9˧T,OM;_PKes^VM>9a[y[HwLM1 " Dd #$B  S A? 2 8{*6Ѩ2$h `!` 8{*6Ѩ2$|1("l). xZkl>>JPB mVD`R" gETRnqm'a>,lK(%)/W2 \) RTŭe&jAm{g;3;s|{^y^/Ӹ b]uBӯ!eEYՌ],g% EYeN-Rx:=-/֝\a+*Nݎjah S<1rدͲoAJȆYl"[%hxe[i*Vf7aHVhŋEϬ0br0(0rٯ="+~v}a+==4hk}bVxge"V^YaV F_0w2+EH] #) #ZYn(7TsIZ;wRvȵokۥ#إ{nᵶQ=PjP~k~oZ˨|Lj6~wKMy d1p9nΑd|Fɜ-% WR.|loˑ =웳$_]F§GI~5 ;kpD`QсɈ?Qdq`7a hYGde2EV,FE #6x嗕M~obeee(+VO3Ϭ0brYeP~Ya,_{6DV1+u6#r.8ˆ@4(0b7aRHL|i`VY.O[^]#mgp~8b}G[i8>' _,o<!̍ AoEj կ6﹀kErTv_$GkEPF`CZmO09AXTc  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntryS F`@Data WordDocumentR[ObjectPoolU>0i`_977299288!& F0i 1TableCompObjhObjInfo [$@$NormalmH <A@<Default Paragraph Font"*18:<>@LT[_dknqt      !" # $ % & '()*+,"*18:<>@LT[_dknqt  !"#$%&'()*+, r8PQ@RP (  x2  HGf!H))?x2  HGf!H))? x2  HGf!H))? l  0?| f  s *?| f  s *?| l  0? r  6? l  0?| l  0?| l   0 ?| r   6 ? l   0 ?| l   0 ?| r   6 ?   N?   N ?  l  0 ?|  l  0 ?|  l  0 ?|  l  0 ?|   r  6?  r  6?    N? l  0?|  l  0?|  l  0?| r  6? r  6? B S  ? A R 4P=a 4AR ^44Zz4 0 4j4 j 4 j4 j 4j 4 z 4 ` z 4 z 4p z 4` z 4 z 4  * 4  *4 * 4 `*4 0*P4*4*4:4 :4 :4 :4 :4//00667799::<<==??@@GGHHNNOOUUVVWWXXYYZZ[[\\]]^^iijjqqrrxxyy||}}0378@FHKOR^bjpruyz}~@`@GTimes New Roman5Symbol3& Arial"1hB1B1!>0' Jim Gemmell Jim Gemmell !$%(+,/2347:<=>?@ACDEFGHIJL  FMicrosoft Word Picture MSWordDocWord.Picture.89q  FMicrosoft Word Picture MSWordDocWord.Picture.89q  FMicrosoft Word Picture MSWordDocWord.Picture.89qObjectPool 0i0iWordDocumentSummaryInformation( DocumentSummaryInformation8Y bjbjWW ==]BBBBB NBvvvvv{{{$V{j{{{vvv{vv&4{Bvj p j;;BB Original packets . . . k 2 1 decode . . . . . . take any k encode . . . n k+1 . . . k 2 1 Original packets . . . k 2 1 /0679:<=?@GHNOU^ijqrxy{}5 jUmH./0679:<=?@GHNOUVWXYZ[\]^ijqr$/0679:<=?@GHNOUVWXYZ[\]^ijqrxy{|}Prxy{|}$N N!" #V"$A%Oh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot Jim Gemmell2m Microsoft Word 8.0@F#@/;;@RS;;՜.+,D՜.+,0 hp  MSFTitl  Title 6> _PID_GUIDAN{9A6EBBB6-EF04-11D0-A5DF-00A02435F763}_977298886 F  $1Table)CompObj hObjInfo [$@$NormalmH <A@<Default Paragraph Font $(,26[abc $(,269  [ [[S[ZDij@NUi ( $h| JN !)_-+ 9 Z : S ?|!)7#+ Z ; S ?|A#)$+ Z < S ?|$)/&+ Z = S ?|+)_-+ dZ 'z&t)& > ~'l*V)*N2 ? 3 'z&'& N2 @ 3 d(z&(& N2 A 3 ,)z&t)& N  S ?| l  0  l  0 f  s *  f  s *! f  s * f  s *  f  s *  N  S ?| N  S ?| N  S ?|  N  S ?| N  S ?| N  S ?| f  s * N  S ?| J@ 'z&t)& "N2  3 'z&'&N2   3 d(z&(& N2 ! 3 ,)z&t)& XN 'z&t)& # N2 $ 3 'z&'& N2 % 3 d(z&(& N2 & 3 ,)z&t)& <@ !)_-+ 8Z   S ?|!)7#+Z   S ?|A#)$+Z   S ?|$)/&+Z  S ?|+)_-+dZ 'z&t)& 0 ~'l*V)*N2 1 3 'z&'&N2 2 3 d(z&(&N2 3 3 ,)z&t)&@ `"(,) SdZ `" (%R( , `"(%)N2 - 3 `" ("R(N2 . 3 # (3$R(N2 / 3 v% (%R(T2 6 C ,(,)@ `" (,R( ThL `" (%R( +`" (%R(T2 ( C `" ("R(T2 ) C # (3$R(T2 * C v% (%R(T2 7 C , (,R(JN !)_-+ B Z C S ?|!)7#+Z D S ?|A#)$+Z E S ?|$)/&+Z F S ?|+)_-+dZ 'z&t)& G ~'l*V)*N2 H 3 'z&'&N2 I 3 d(z&(&N2 J 3 ,)z&t)&N `"(,) U dZ `" (%R( V `"(%)N2 W 3 `" ("R( N2 X 3 # (3$R( N2 Y 3 v% (%R( N2 Z 3 ,(,) N `"(,) [ dZ `" (%R( \ `"(%)N2 ] 3 `" ("R( N2 ^ 3 # (3$R( N2 _ 3 v% (%R( N2 ` 3 ,(,) f a s *    f b s *   f c s *   TB d c $D1TB e c $D1TB f c $D1TB g c $D1TB h c $D1TB i c $D1B S  ?  ![i:% thIp p tg] tf5 te] tdg tc\ Ltb-  t t"ta  ttkttB * t[ n P tUT n tT5 tS5J t9= * t8I4 t#g? dt"qI Nt W4 t m4 /tctmtm"/tm*/t4m/t4u7tu*7tu"7tmvt#GHOPUV\@[`@GTimes New Roman5Symbol3& Arial"0hB1B1>02 Jim Gemmell Jim GemmellObjectPool $ $WordDocumentSummaryInformation(DocumentSummaryInformation8Y [bjbjWW ==#7]JJJzzzzz z&I&I&I&}&&&&&&&$n'b)V&JI&I"I&I&I&&}&}&}&}&I&<J}&^lI&}&}&}&}&|J}& Џ#j:;zzI&4}& Index Group 1 1 2 2 3 k G k+1 n "#*+2[5 jUmH#)*+1235679:;=>?ABCEFGIJKMNOS      !"#)*+1235679:;=>?ABCEFGIJKMNOSTUWXYZ ESTUWXYZ[N N!+ " #t"$%Oh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot Jim Gemmell2m Microsoft Word 8.0@F#@85:;@X:;՜.+,D՜.+,4 hp   Microsoft-  Title 6> _PID_GUIDAN{0E344DCF-7F35-11D2-BAE9-00E0291ABD56}_993644021 F $ 1TableL5CompObjhObjInfo%#     !"$&;:()*+,-./0123456789D=>?@ABCtFGHIJKLNOPQRSTVWXYZ[\]^_`abcdefghijklmnopqrs}vwxyz{| [$@$NormalmH <A@<Default Paragraph Font $*:>BSW[aeiuy}nrbcs $*:>BSW[aeiuy}      @}/X$r$9C_iyuUi0 www@ +[p\    F*( $h| @ X "%@3 x  0 "(##5 x  0Z#F2%@3D x  0"81x#(2B x  0!$`"%; x  0!0%`" &A x  0#81$(2@ x  0X +`",8  L j","- "J.>#F/T2 W C  j","b,:T2 ] C  j","-9x b 0 b -`"-2  x c 0 c!/`"00  x n 0n!\&`"L'+   hA,?|Light upward diagonal"-#.#` ~ c $?|"+#,-`  c $?|"*#+-`  c $?|")#*-`  c $?|"(#)-` x c $?|"a'#b(5` y c $?|"@&#A'6` z c $?|"%# &0` { c $?|"##%/  hA,?|Light upward diagonal#-$."f  s *?|#+$,"f  s *?|#*$+"f  s *?|#)$*"f  s *?|#($)"f  s *?|#a'$b("f  s *?|#@&$A'"f  s *?|#%$ &"`  c $?|##$%"Z j","-  "$J.j$F/N2  3 j","b,N2  3 j","-  bA,?|Light upward diagonal"/#0  bA,?|Light upward diagonal#/$0 x  0!~'`"n( x  0!(`") x  0!)`"* x  0!*`"+ t@ &d.# 4 t &d.#)x r 0 r).&  x s 0 s). &    bA,?|Light upward diagonal&'u!#(v"`  c $?|&': #(;! Z  S ?|&'#( !x  0) !.B" @ +"B12 x  0$,".<# x  0.1B12 x  0T.0/1 x  0<-#-$ x  0<-$-% x  0/0401 x  0+p+-`, Z j","-  .-..N2  3 j","b,N2  3 j","-x  0,,-Z- x  0-l/-\0 x  0<-%-&   bA,?|Light upward diagonal8.,5/-  bA,?|Light upward diagonal8.l+5/m,  bA,?|Light upward diagonal8.K*5/L+  bA,?|Light upward diagonal8.*)5/+*Z  S ?|8. (5/ )Z  S ?|8.&5/'Z  S ?|8.%5/&Z  S ?|8.$5/%Z  S ?|8.#5/$  bA,?|Light upward diagonald/,a0-  bA,?|Light upward diagonald/l+a0m,  bA,?|Light upward diagonald/K*a0L+  bA,?|Light upward diagonald/*)a0+*`  c $?|d/ (a0 )Z  S ?|d/&a0'Z  S ?|d/%a0&Z  S ?|d/$a0%Z  S ?|d/#a0$Z j","-  /-/.N2  3 j","b,N2  3 j","-  bA,?|Light upward diagonal8.g/5/h0  bA,?|Light upward diagonald/g/a0h0x  0<-'-' x  0+((-) x  0<-@)-0* x  0 <-b*-R+  B S  ? z4 tj t2Zt()/5BCGN_`@Kp@GzTimes New Roman5Symbol3& zArial"hۃ7ۃ7!>02 Jim Gemmell microsoft FMicrosoft Equation 3.0 DS Equation Equation.39qRHkIvI k=dk+rd+1ObjectPool  WordDocument SummaryInformation(DocumentSummaryInformation8q bjbjt+t+ AA]JJJJJ V$JP21112222222$34R;21O1^111;22+2221D2.<12222D2z `jϾJJ1X2 Index Group 1 1 2 2 3 k=8 =normal block 9 n =padding block 7 6 k=5 4 3 =EC block 7 6 5 4 n 9 8 2 2 1 1 Group Index   <=UVwx5 jUmH    "#$&'(,-.<=>@$    "#$&'(,-.<=>@ABDEFUVWYZ[]^_cdeghiklmwxy{|} b@ABDEFUVWYZ[]^_cdeghiklmwxy{|}$}$ N N!X "|#V"$%za9C_iyuU( wwOh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot microsoft2crMicrosoft Word 8.0@@RϾ@RϾ՜.+,D՜.+,4 hp   Microsoft-1  Title 6> _PID_GUIDAN{0E344DCF-7F35-11D2-BAE9-00E0291ABD56}_973931860F߉߉Ole  CompObj fObjInfo Equation Native  d_973932709 #F߉߉Ole CompObj"$f FMicrosoft Equation 3.0 DS Equation Equation.39qRόx~II dS=ddk max +r=1k max +r/d  FMicrosoft Word Picture MSWordDocWord.Picture.89qObjInfo%Equation Native _986891245( FPP1Table'(% [$@$NormalmH <A@<Default Paragraph FontYgsnU:rstuwYgs   8@F (  l : 0: XN %0 'x  ; N2 < 3 %0 "&x  N2 = 3 &0 &x  N2 > 3 t'0 'x  N !#%$ ? Z @ S ?|!#e"$ Z A S ?|v"##$ Z B S ?|###$ Z C S ?|##L$$ Z D S ?|]$#$$ Z E S ?|$#%$ N !#%$ F Z G S ?|!#e"$ Z H S ?|v"##$ Z I S ?|###$ Z J S ?|##L$$ Z K S ?|]$#$$ Z L S ?|$#%$ N !#%$ M Z N S ?|!#e"$ Z O S ?|v"##$ Z P S ?|###$ Z Q S ?|##L$$ Z R S ?|]$#$$ Z S S ?|$#%$ 6 T    @ #13 x U 0U^1{2 dZ %0 'x  V s2U2N2 W 3 %0 "&x N2 X 3 &0 &x N2 Y 3 t'0 'x Z Z S ?|RN2O3` [ c $?|N2O3` \ c $?|N2!O3` ] c $?|9N2O3` ^ c $?|N2hO3` _ c $?|yN2 O3Z ` S ?|pb2c3Z a S ?|b2c3Z b S ?|b2?c3Z c S ?|Wb2c3` d c $?|b2c3` e c $?|b2&c3Z f S ?| Z2( [3Z g S ?|9 Z2 [3Z h S ?| Z2h [3` i c $?| Z2 [3` j c $?| Z2 [3` k c $?| Z2O [3B l  #13N m S ?|l n 0n TB o c $DjJNB p S DjJ TB q@ c $DjJl r 0r l s 0s l t 0t l u 0u  l w 0 w  Z | s *?| r  6   <  # r  6   T  c $?|TB @ c $DjJ 6   B S  ? n h 4w4qS 4 S 4m 4^ 47TM4#b 4s4|U4](g|4TO4u,;:4p%4t#,]:4s%&4rd4oSS4m  4M{'1(4FR /04?44;U |7 4:=  @4 Cqq@`&@@GTimes New Roman5Symbol3& Arial"1h44>0dy Jim Gemmell Jim GemmellCompObj'*hObjInfoObjectPool),PPWordDocument<  FMicrosoft Word Picture MSWordDocWord.Picture.89q  FMicrosoft Word Picture MSWordDocWord.Picture.89qY bjbjWW ==]JJJzzzzz  z(" !!!!!!!$"$V"J  "!M!!! <J!^l !!!!|J! `pzz}!p! while the other bucket is written to the next empty slot in the group area at receiver Receive file Send file block (encoded or original) from the group group group group bucket bucket is stored in one of the buckets pr5 jUmHqr$qr N N!"C5#$X %SummaryInformation(+-EDocumentSummaryInformation8M_99103666360 F1TableUn<Oh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot Jim Gemmell2m Microsoft Word 8.0@@X>p@*p՜.+,D՜.+,4 hp   Microsoft-  Title 6> _PID_GUIDAN{CE0965F5-8AFB-11D2-BAEB-00E0291ABD56} [$@$NormalmH <A@<Default Paragraph Font2B@2 Body Text $xnH 2"@2Caption xx5nH .P`. Body Text 255=Iu|'wxyzn:rs5=Iu|'wxyz   !8@.zPF.(  l : 0:# N m S ?|l n 0n TB o c $DjJNB p S DjJl r 0r @ R! x%Z !#%$ ?  !Z @ S ?|!#e"$Z A S ?|v"##$Z B S ?|###$Z C S ?|##L$$Z D S ?|]$#$$Z E S ?|$#%$Z !#%$ F  !Z G S ?|!#e"$Z H S ?|v"##$Z I S ?|###$Z J S ?|##L$$Z K S ?|]$#$$Z L S ?|$#%$B T  R!dZ %0 'x  ;  ;!N2 < 3 %0 "&x N2 = 3 &0 &x N2 > 3 t'0 'x x s 0s   XN %0 'x  t "N2 u 3 %0 "&x N2 v 3 &0 &x N2 w 3 t'0 'x N R! y $Z !#%$ z  !Z { S ?|!#e"$ Z | S ?|v"##$ Z } S ?|###$ Z ~ S ?|##L$$ Z  S ?|]$#$$ Z  S ?|$#%$ Z !#%$   !Z  S ?|!#e"$ Z  S ?|v"##$ Z  S ?|###$ Z  S ?|##L$$ Z  S ?|]$#$$ Z  S ?|$#%$ B   R! dZ %0 'x    ;!N2  3 %0 "&x  N2  3 &0 &x  N2  3 t'0 'x  x  0   6   !l  0  l  0 l  0   l  0   @ =%9( Z g S ?|&x'Z h S ?|&'` i c $?|0&'` j c $?|&_'B   =%9_(x  0 '{(  @  & ( H  #  & }(~  6 s ' (  Z  S ?|( & ' Z  S ?| &W ' Z  S ?|h & ' Z  S ?| & ' TB q@ c $DjJ l  0   l  0 XN %0 'x   N2  3 %0 "&x  N2  3 &0 &x  N2  3 t'0 'x  6    @ _-f/ `  c $?|.u/`  c $?|. /`  c $?|& . /`  c $?| .\ /H  # _-f/j` %0 'x  #  .-/N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x ~  6 s-r. ` [ c $?|z . /` \ c $?| . /` ] c $?| .P /`  c $?|./` ^ c $?|a . /` _ c $?|9./TB  c $DjJ T  c $?|T  c $?|<  # ^T %0 'x  #  N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x r  6  Z  s *?| Z  s *?| Z  s *?| Z  s *?|  Z  s *?| Z  s *?|  T  c $?|  T  c $?| N =%9(  Z  S ?|&x'Z  S ?|&'`  c $?|0&'`  c $?|&_'B   =%9_(x  0'{( l  0 B S  ?  !"#$% K 41N- 4a OF4} ' 44644`4O4Q4b4)44A"#j4Q:4 44^ :4dl4 Y 4^ ) ;4 : 4mS  4q  l4rzXw45:1 4ns A4o  (4p x 4;u4I4 44PR4t ? 4:J  !4y$ 4xJ 4'\\ccN'(*\bpu[@'J@GTimes New Roman5Symbol3& Arial"0h˂6f˂6f>0y Jim Gemmell Jim GemmellCompObj/2hObjInfoObjectPool14WordDocumentuY bjbjWW ==']****&&&VVVVV bVn9 8 8 839595959595959$$:<VY9& 83x 8 8 8Y939** /393939 8p*&&39:H**** 839393939P&39v ɸ#VV{839 is stored in next empty slot in one of the buckets bucket Send file block (encoded or original) from the crowd crowd crowd group group group group bucket bucket When a bucket is full, or a new crowd is received, the bucket is written to the next empty space in the crowd area Third bucket is used for a crowd split up to be sent first and last in a round crowd crowd Receive file &'Z\bdopL5 jUmH"'[\cdnop$'[\cdnopMN(MN$N N!"J.#$%SummaryInformation(35DocumentSummaryInformation8_990969705CH8 F1Table: Oh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot Jim Gemmell2m Microsoft Word 8.0@@Rl#@Rl#՜.+,D՜.+,4 hp   Microsoft-  Title 6> _PID_GUIDAN{CE0965F5-8AFB-11D2-BAEB-00E0291ABD56} [$@$NormalmH <A@<Default Paragraph Font2B@2 Body Text $xnH 2"@2Caption xx5nH 12>jqxghijkryn :rs 12>jqxghijkry   !8@-w P-(  l : 0:  N m S ?|-l n 0n- TB o c $DjJ,NB p S DjJl r 0r @ R! x"Z !#%$ ?  !Z @ S ?|!#e"$Z A S ?|v"##$Z B S ?|###$Z C S ?|##L$$Z D S ?|]$#$$Z E S ?|$#%$Z !#%$ F  !Z G S ?|!#e"$Z H S ?|v"##$Z I S ?|###$Z J S ?|##L$$Z K S ?|]$#$$Z L S ?|$#%$B T  R!dZ %0 'x  ;  ;!N2 < 3 %0 "&x N2 = 3 &0 &x N2 > 3 t'0 'x x s 0s   XN %0 'x  t N2 u 3 %0 "&x N2 v 3 &0 &x N2 w 3 t'0 'x N R! y !Z !#%$ z  !Z { S ?|!#e"$Z | S ?|v"##$Z } S ?|###$Z ~ S ?|##L$$Z  S ?|]$#$$Z  S ?|$#%$Z !#%$   !Z  S ?|!#e"$Z  S ?|v"##$Z  S ?|###$Z  S ?|##L$$Z  S ?|]$#$$Z  S ?|$#%$B   R!dZ %0 'x    ;!N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x x  0   6   l  0 l  0 l  0   l  0   l  0 ,  l  0 XN %0 'x   N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x 6   @ _-f/  `  c $?|.u/%`  c $?|. /%`  c $?|& . /%`  c $?| .\ /%H  # _-f/%j` %0 'x  #  .-/N2  3 %0 "&x )N2  3 &0 &x )N2  3 t'0 'x )~  6 s-r.' ` [ c $?|z . /2` \ c $?| . /2` ] c $?| .P /2`  c $?|./` ^ c $?|a . /2` _ c $?|9./2TB @ c $DjJ$T  c $?| T  c $?| <  #  ^T %0 'x  #  N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x r  6 Z  s *?|!Z  s *?|!Z  s *?|!Z  s *?|Z  s *?|!Z  s *?|T  c $?|T  c $?|@  )0p, ` g c $?| 1*[ 2+4` h c $?|l 1* 2+4f i s *?| 1* 2+4f j s *?| 1*B 2+4H  #  )0,-~  6  P+p,.  `  c $?| 0*1+`  c $?|(0*1+f  s *?|0*^1+f  s *?|o0*1+`  c $?|@0*1+ `  c $?|0*o1+ f  s *?|0*1+ f  s *?|'0*1+ dZ %0 'x   7**N2  3 %0 "&x N2  3 &0 &x N2  3 t'0 'x TB q@ c $DjJ6B S  ?  !"l- I44 4o4b4@4(44Wcb4z\4O94Y4H4O 4H4  T4 D4*4(M ]4}(M tql4n 4o (4m;4rzXw4p x 4;u4I4 44PR4t ? 4:J  !4y$ 4xJ 4$$%'bg@p@GTimes New Roman5Symbol3& Arial"h+|6F,|6F!>0y Jim Gemmell Jim GemmellCompObj7:hObjInfoObjectPool9<WordDocumentY bjbjWW ==$]&&&&& 2&7RVVVV666G7I7I7I7I7I7I7$88,:Vm76y2666m7G7VV#.RG7G7G76&VVG7 6G7G7G7G7 G7VF _&&6G7 is stored in an empty block in the buffer pool Send file block (encoded or original) from the crowd crowd crowd group group group group buffer pool When a crowd has at least b blocks in the pool, b blocks are written to the next empty space in the crowd area. If no crowd has at least b, then any crowd is chosen to have its blocks written crowd crowd receive file #$SVab5 jUmH$TUV`ab$     #$TUV`ab >$N N!".#$%SummaryInformation(;=DocumentSummaryInformation8_990625443.@FbӡOle  Oh+'0\   $ 0<DLTss Jim Gemmellim  Normal.dot Jim Gemmell2m Microsoft Word 8.0@F#@ZA͈@񈷾 ՜.+,D՜.+,4 hp   Microsoft-  Title 6> _PID_GUIDAN{CE0965F5-8AFB-11D2-BAEB-00E0291ABD56}މ4& 9f9;?I`VLBpV&( H #jht`AcƠٯrXr2+V:E) gV1M_V9>%]4ˆ)U_V9دrX״=upod;LBX!gv#y+QO|5E2qU;uЈAb/EGwwpu܈y ^s/?+vm=}DyK _Ref437058894Dd11B  S A? 2JXS 6GTg#ŷ!vB2\|S2s\,N;r1E>Ƣ+yF—+~FWu2]]-LD{OW<0P#vW`NesFuo^B6'8gUҏJpUؓ},=`O:bA},8SˢRb=kd~fXz2ֲKB#p+cwMGdQ*&ަvy\ޑѣ>jS ֦5j<ǛH&]M'.)(5"~p&1>{;y,=~;q6= VolF2E*"c *Ve悏[cWU#3;ir"ǃ9s܌'n3G}7 ` YQ}ru %=4ͤRF&6TR&OpU& n aJ[U:,|U!45*F"Tـ[₋ UWBS\aS(\o*Em>wF )M0UFP>̬ݼZjp*:UĦvxTJ3 n`s[U5jUުS̨m,V\ YSvOE23na0[U~T52_UMqMlj&ngbؓ``{RBa=|F˞o?aFrI㼼ٓRmׯϙf8!ړ6668!ާ#f#?ĦvXG>r͞tk舗YdR߄5כկ]®];ۯz`vS]6 S wgOYpJTzNؿ܃jc4.3zJgdRJvnet/|'HyO8;IcU,$|O0},Wj rSmXL,O8wtUGb5 >6G{D,aumyyV./ŕ]{0ѿ))T?s=Lt{IZ ɃjH.Q\v˧ajdTt~WjwvEGF)rsirXDoFez VmAOi#ĩr| 23$_C kye^9W#?9n)?'LeQQs|Ttz|8W7#y9*:Ӑ|[ vdjlu&Btz:SFS\a]}#U^F"TYإ֪^F )M0UJG|Hn`/X>NX\BhkbS;LUŒ*/B-Y%Zu*R U՟FMqMljJ[*3{Vh!:`rF )MT9U?b:bjF m]"Aʧ;>ςΨĩΨ'r\xS7#ǃ5LuC$*꧸^ ~b5S-\mC$*꧸e^2F m]"Aʧ).ĩr|̫~(6OgbmS~gDҠQ |IIqMd1!U ~bj5fvw鶮~DҠQV?LJkb'C~yRxSlB$Q4hT!c^C^̬YuC$jʷ!dRR\;bs̫~H«#f["A~NXLW|U]yjPըs*I";N  }㟞O0H}cgT3bn.ߒMx@F'a92r<##ۓ71 ҟş^ڰ YP_x{b"3=?M2iIDdB  S A? 2-Mt?gy,jh@!`!-Mt?gy,jh@@e UxNAƿ=88I$"6F6vZh6>,,xV+Kńsgw(e7!}"dβXLdqZ2^F*/;EUbkkV{'尾nt:XBF?׃*"9~>YL÷Dd@=UǷ=>!-sSuu΢]~؜{@LʟLO&r8$|JHpIMn~ivy_Ḁj #`etHvX}DyK _Ref437149562kDd B  S A? 2#zzC",N$`!#zzC",N @hwxRJQymY_Dp $VlJ$ JDL@ _,,,l,R\LDݝsfsv3 F %EdV ΒQr'&y,D xt+l5z /AC\q4Ud4ţ*.ӆ[ } Si^m8[6Z !eEm3ƛسn)5ch-۸֫.c1ss$ cW2ɻ)oA4fn,8?} !on祻e4H oGTy["[4Dm"Q =?u_Qte,0Dd{ T  0A"/Aw!T͕ T`/'@=X/Aw!T͕ T\F&/x Yt'!DD 1]WR]յvukﭻگqAQ!jTl38kf9]OKu+!w99yN,k+/_y)>}k#gewKYȲe{,;Q^7+/_>+#*/T^_^s~}}ڿCʳw+m~tq.[e1_Vn_9=﷝;{盶[>a*E?Keǥޮ<{_+og[Xwl3~Nv']-/v}||TY^pv?m7/^ܷʾ*sre]sx{~>Tz?y:~?prOOo}]w??[*?Y>_4cI/c9^q9Y=}{~=Uxտg~ _ǯ7M?|o=]~?{oS?=8wX/p*׿_{o?x_|=]}ğw`odϗ7 x&"bʹn r6 yY{xwS) ~e|?ws9 ^~% xR)G?ī*|x??1+xa0~CяGm|~ŏxe$xs<ǏG`^3<9Sx^p|)G?z|s;}s<ǟǟ/&)xe0<9//x ނOSp|Y-Wx+ފOx{|+cX)G?ïvg_G__o7Ng2֌)Gƻ.|s<ǟ2딣Wx7ލsxa0~߽Y9_ɏx^qK9zSS1~x?GBxUxވ`V}_s<ǟßO'u o >w)G_0~?o?Vjqr!|_''#xUz=x+ފx??2<< x5^>/Kx_ rq~ k2^r77NDz/Uq~ra~ «:x2+^H92x??g3u<\8?Rލw89Q<~U=7xހ=>p~R?q8~2׌5Mxއ$9_e)G?/jo[~49_e|(xяGY~ k6 hr5| ?ϿX|owxށC >p~S44""~?_/[x=?Z産,>kx%<_*ۊ5 xޅw0>kgM9ssQ(~?_x5ބ7Ȋ#>xSxlf]яs9 ko{8ʊs:x-x/og9|_s<s;Yq|rE~V1<>Yx1<~??_S~ox=ގx?>of/Ro9q9~?Ux$+産7x'މ>/ _oK9ss++I$~ׇ*^~ro›. I|_[/9?_폕W ~_o7Zo۲;0>O"o9O//O9~?_ů8x}$x+ރ0>OK;x}S((44~?OYbѫjovG8YO9ox!_m8?O9 ~ o5x ވٟ̊GSޏ(>2o9_Ί󯔣OW+M&^-x'ޏc>x|}4os<c1?LV|O9z^owx ނw]gߓ)Gge|·x|ެrE:~ƫzo[ns[YS~?GI$~?_DzbO9z ^7 xކ=>O\V|}_-x񔣯+x???+1+R22~?_/kNϊߟo;NG|KY{Ro9x5^/gU;NG| y|8)G  ?o%+R~?WM&^ x5+Sލw>4/x|w&Go6 Ao1||_ŷm/oxg)Ga|'Y|_—'69,,~fVO ~cDV)Go6 ƻ~oe}gY| _u|s<8I'I|×%|_ǷmM9zށ= >/O92x}_u|s<'?;//G#I$~_O9U*~uxވ7x~>}x>c>Ox\b}}_w4>/ o>+Os<|_79_R~???//G1+S~?Kx^cS^ xނxރxrVߦ}g|_W|wX_(+WW|w<;//I"9SlSlSlSlSlS ȊraeeUU~?qObO9z^ox5^ xނ+Yq|rn!|)<^//*ox**W33a4>yV~+*o;x;OO//G#Qh*+wOY~_ƯxuV)Gkoƛv»^<}ٿ̊#>O<>/K=+J7M|s<şc}:+~rWWq$*+S~?_/W ~౿7Yo[nLJmVߧ}g|Ǘe| eO9.x????'i4~?_ȊR~ ox5^x~̊=mxމw=x>0>gb}|_5| }ٿΊrAyyEEe<^|G|i|x}?+ [9᱾X)G?Gq$~?)G_įW* o<++}mo6{8Yq~r!|G |Ƨ9|_cVVx Kxgy__O'iuuOV)G_ů[-kZYov {^|Tߧ} 'I|y| _WXRSo.922~ JyOY<~_į౿?\*^K9M&~5x^7 x3{JrNƻ>|g|Ǘ%|_7wS9//cq8~/+)G?/e oqRkZFo߿T)G{~‡Q|)<^@x}/ /*oxrQ8~?O8~R~ _ůMW=uxހ7MxފxލU>>(>O4>j?2oxR)G?OY~/)G« 6~ƫZc>O>/?D} _7 |w]0>x3rY|E|_W5| c'= >c>OxS>KkoxǨx ^8=[^ux^D8O9z ނmxށwx/ދ,)GG1| 'i|c?U*^K9+:o6S~?_/U*~ g)GƫZ o ~rv;|c*)GI|Ƨ9|_%|){)G_M|Ʒ=|Xϕ_/W+x^o[<)Gzofocr. {~a|cS>O3 > /xo{xEc>?3 >"/*?J}=#>O4"/*r=|_*:R6~ƫ77]oJr6 ;. {>c.)GGq|'i|cS/2o;xs<ǯWk5~zS^x-^x#ތ7xJrNƻ^A|cS>$>O,R^W| _7 | w|O9z^_ǯ7m6^~T)Gzo›o<˥bO9zރ}>C>q|Tߧ} g|| _ ~O9o;x*{o7[-~kZRq|r& o[6 ;.C>c>A}9|_%|O9o[{x <-;w;x5^ux=^7q|TߧovĻn;> >(>$>}u8O9>/ +뿆O9;xo8~N9z ^].ހ7Mxނ^KO9zށw]xރ}x?뿎O90>8>O4>R/2ko[xz?{9~ xRzoěfoKr. {>!|(xS8O9>O$>O,>/*o[뿅O9zm6^W5x ^Z*7 xބ-xކx'뿭Tߧ~|ć!|N})|9|XWU|_7M| w|I~k77:c*{ћfo6.O9z?ޏ0>8=ѧ)|9|_E|K}_7M|w|s<_S^x-~7 xO9z+ފx'މwxރq|?P*S>0>8>OxR)G|_—e|_cQ)G7m|w=|c}=ux^x#ބ7-x#bO9zށwx7ލx?ޏG#>$>O,>|O9/K :O96;x5x-DSހ7x#ތ7x+ގ>I {~|ćߧc>OS4><ї%|_5|_7X3w]|s<:}O9zބ-x+ފx'މw㱿Q)G|a|~O9>OS ><>/q~@}_5|_7M|H}s/ "/ O9o6xRFo[ }O9z'މwxރ}>wK}G| ' |ħX{>s/"/*O9o.{x]<^*7Mx3ތxކw౿R{^|‡XR*S>>O4>V? /2kѷm|=#>>>O3 >C>c8J}ѧ)|gY|| _ 'K}WU|_7 | ·XM}s<F o[Jr»n{><.{A|G| ' |gJ}g|y|_ė%|=u|-|wXK=soěfo6}w]xރx?ޏ,=0>c>O$>r9|E|_—|_c9?o6{x?O o›fo6;XT)G{>A|‡C>#>xS)G§|gy|_cRq|re|_W5| _M|c ?.&&9ނx+ގRĻn>#bO9>(>c>OT)GgY||_—rU|_u|7-| c8r77ovc}DSލwx/އ>G|q|'I| ?s> /xE} _7 |ķ-|wX?I=so6;N SbO9z/ދ>0OS)Gq|')| ƧYC0>Ɀ=?8>OS>O,>bO9"/K oO96;.xOSގx'ޅwx7ދ}xS>C>(>O>3,>sR)G_—|_Wu|7Mчa|GQ|'XD}g|y|_X\*S*^(/_VxIp+yg˷o*|Xpa?^u7Vr^}ۧ TnGֿP׏ʒr ۡrsy5k]WFwgyW}u]>SϾN}=}Ͼ}z#z>Ȼz_p}};=?*/Ϧw:w<,wdǏ$+kSYP^SvoUl3vk_6~>Oϳg>>Zc߹dqCټ>><'>_!?[~|"^G+ tq}|oԔs_U[S}ߘlywm|xL߶L}cz[o{RU{}My9teUv5VFV>m޺am<cxTޗ|1scGoM;Ҿ+^?/VRW`! d͕Qtwߪ&?r-pT,p$U xpvBIH@RImG;ӱtjZFhD Nj> yKLJ8Sv:efBH8v*1`ˏ!H ֖~Ϲ;]|{sgサ{W 6xʇYu2^.ߟL5MՉT=))G.R|ZD|/l]{GEIRb\#=IieT%"剖x{&[loǾ#r}RTIJӿ).<%Zg8m"V8/]o 븇k#>/7M)[n?2'=˩vg쫓*n'D*Zom5'qnKax/_aBD3._!zPWL+~.%Z"=i,a3d*MV^~ң7踩eˤ̦n *[DuLMK`S5P9Ȏ"c+RlX6V8HMei *%S,AnKJQtA THq>R! k}"D*'q^WQpN݋h/L*^AqX/f'5R4TZTDe%"[ȞCnyBa/Y=rXTl*lGdՇCTH)Rid1D*/Tf T"HUR!ū4e+QyՃWC2hSy(yj^Dn+=S!KBTʕjDmGn=S!E%U~TzMRLJw3w?E]T Ȏat[t>-VC>ٿv3-en7o72{uHip]|Ye{̳1S]+xc<moR+_C2'/ݑWd'+\i=ތs]BZux}f0HRU)ߌWrX*TƠҋzU?rwQP!EU#T b?*}&w_T> Dȳʍ>yB4Y )/ }_ JDe "[z[g* g_*7jTJMl *!v3R`}K%j}BDHlנ~so3'[ݰsAx GA/jTJM *LgV#jTHqLg_*D*pEfքgP,A;q⼱ǜͪ.3 }S9,*󥦲="K  )XV_aQYmSDe7"ۍN!S Ric5վB3<'DU`=+Oc_vߺW"TVr*nV{rKxBOi/R~*ɯiTnQʞ@T:Y'"ۍv{B[amKVV_Wvx&ZnNK->W`;[Ntufʹjꆝ3NX3f:cI~o*eζ8c6DwKdb{J~ :]~o>wwzXavףXǣqPTs^72W㽁Q4$b 5w ߇\Rߒ?n;T#HR oӋEsoȽ5Xc]}mseJ{(ƈۿߔ$Z)#cmo+<}[Rzu|)NuWקXJ_^ދoiw7c^ 'BBL_W%^1?ˠf:,l nA's %ʇ\qzؘu4: * GQ`MrY BL}=/TMUlV>̇ԗ`G-YlrW#ec0Mwᆵ5dS)L+yҪu虤דq{̜ǏEQQP]{ M%I֯-5-4+yCW4Mz>OœP劇#k+R;!=m=Nc2Ȳf;s^2S2[F9~FO/̌toE р9:#2zJweF?v+yiz{Qz{kQS Wdk^5n}z߫Dh D*5U]3)>dUg?jvƯR;o}v+7 FX=I/0~殎Ti^XM*VjTkv"h[ Z4XjEeސFwFf;UzY8jdcT}DyK _Ref437753060}DyK _Ref437753034 DdnvB  S A? 2wŰ|Ƅi&1J Se`!KŰ|Ƅi&1J da G?HP+x\tTՙϼfJhc(P tIn!d0cC&MBpŞc@Xkm-,Enn# x0Aj#R,zS8[~w$o0s߼cw}޻܋‚iP+T)Rʕ"-ؖI7!фr "d˹QI We'UVgCZDL![Uy97ReP'U!~iUQ PnU%4rZUyHWe<8*؋ NF^ν׃*T:r3߳N5/*jJǾdUD*\+r""WscٯܚqU~Iz<{b{PZD\VK(\GhXK;*xR< iUK(D ;*!T{Qܪ r >oۉ8U6bV`QBU˹=Ȍ2sPW;j͠ |6/$iQ뉺LS0MM(ʳa~,grϱOilshSmrv"Z9yNȼ'd .p<OpJM<};y0@n e#A3Gq߀c#&=b"˹۸oqߓ*mYx uJy`Mrb[! "'[Uvy9Tw_B+{9|2r<%s;Oqu]r-;rȪfc*<Umd@x9)@NWߥWʣ,Pv)},M/ɭ+ѴnHۛh-̌+ hɬKrDʧl-r&wD/ZjD甹F#[Ds9&wD/UFjDыٛVxhGuQx A1 h0VOcA`G-B[ m$QP!ݽ˹ýBO<"x"x1*߄rvB#/*/ Ur455ePe6R_-C`CtMYTAīA!Ujkk%TArW}T@lJl%xb" " VBB#/Ʋ5ٟTS4%)P_wiYc&x|@1l xFJm\*Gd GeihکZhti3ҞؓmdԚHWkF`8Xuo Z , Z%G_D` t9F^΍eƙ/ UʽٽSSҪ bwVeF^νGUMrɓ*''Ҫ bVF^νGU*K / ZUr "˹}T$(]dl-]IxcM-Q'@9'ja3y}N7߮>j{^xQ:F[ÍZ-Ȏ764\gG1ڱӃ JEl"u½cHI,e] ٝ<l4[~6ׅ#mۚ~h]LT"!GA?(9 "FS~-ɷM&<,͸kL/oWNN s4\ag,S院n_Lkq"^;{D=r)R3ľ)rwi8pG|hzo5Ns7ò蜱ޝo'%Cg\YP]= Y[_{ f8Ί82X !w?F*f!4rn,u?P*ŋ*'%& "{N!UPړ*W+J b[% "NB,VDd˹O4r'Uցg8V3ʭ*3;Y}Tzzz-tn} ݰ-~øA6&i 9{jf6x"v&4/.);Օy2{Օ}Q_j꒛Ìy9wՕcBkT/΂WVc` {JT9@h|T#Jē*bseClҪ "2PnUAEy9EU?rE9z9G2"z LVD\@BVEC4rn, ]<)W|3)+ʭ*F^΍eTй*+w ~8s Z VF^΍eTܦF@@ٹx`+0^kEF=L׸xЍ|B:wsFyeedC1싄r:˹׹O#ᡪN `cq~+(ǵf,[r5 "L/z.B#/Ʋ_-eؕޅJg鰜,{cK^h}oR%ܭaR|3;H oՆpckҺ'[}+kɊ,B){_R[ini6 kG5G76ֱ:6y4Sl-/(w2T jDd*B   S A ? 2 b!].x`! b!].[Y?-xpU՝Ϲ=$BH* O-geYhI; $O $;qPud ;RGHΈE-誈QS* yݼ{d~?>wN)Ob+k(_)+Rrd}:՚jl~KROh%~:Ǻ|kSd"vb)v#Ro)E|N_FҿŐ9ʼnV%8*%{~m#C}Cϝ(C2b9 "iqQ;VkQȪBa;ۨQ89eӏ8ۘ6cH۹5Wݔhi&*0|+zIdʼV\Er1ߕyYO[ns3R"ēPzX9Ϝ'K?bk*"ސ3Br^n:ޞ좪U>y*q#)guTWKuN^@9sMsFm3\CZJG_W3UO5˜ O17T{PQo%F0a83k֮ra' kkN1,IQk*xU~<0T'7$r;iMO/Yq}?" {;StjaTH3YJTbuVTN*'kSTk*8\Y )ȌLTwrqߩLCd\6ך )F`_*#Xq}~XrO?xJG~i `6خrsߋᑕblRǾhgb4y=cnbw9^Ttkn{fػl;r:x k޻GpA=WhgCv^豝?uB6s;)sRd9_e`yPe;ǐ fjVyiu23n3T2 MCd7#b VyYq}~XT*Q.".ZܖZS!U[YUθ @d+zޚ )Vgu Cw<AT g.FVr3B}CompObj?A fObjInfoB"Equation Native #_990939182EF"!     #%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN FMicrosoft Equation 3.0 DS Equation Equation.39qϜII c="(b+1)+ (b+1) 2 +4S(b"1)  2(b"1) FMicrosoft Equation 3.0 DS EqOle &CompObjDF'fObjInfoG)Equation Native *uation Equation.39q˄@yII m=b+12+ (b+1) 2 4+S(b"1)  FMicrosoft Equation 3.0 DS Equation Equation.39q_990973022MJF00Ole -CompObjIK.fObjInfoL0˴TyII g=2S(b"1)"(b+1)+ (b+1) 2 +4S(b"1)  ()k FMicrosoft Equation 3.0 DS Equation Equation.39qEquation Native 1_990973701OFOle 5CompObjNP6fObjInfoQ8Equation Native 9`1Table$TSummaryInformation(T;DIyI c=Sg c kOh+'0 $ @ L X dpx#Fcast multicast file distribution:scas Jim Gemmellim  Normal.dot jgemATo#QYʣθ @7JE4¿5 B1ĊH-̖")fKq3o#Bdfٚ )aw/fVg\!RYe<c1DBհGYjVg\߫C C@T^Fd/#5R<{U~<l1"Ql؇ZV 3WBg6;h$ 1THq `_*<ɸOcm~B\jطSiBhθHOؾE-D}d[}-a-m!扮oMTQW[;*Dk`AG7I5Ų$ё/# xVz5ŲX U"rKN,6*fx,Z#_F+9Oke5s e1#b^s%kmExk[NkuXYCU*I)t5Uکgx=`)̭Ǫ]Uxs$9ݲ NĖmmȵ-ٴ$勭K '8Jo$hL{.zbPe;bUqsV_{N3DPu *QmCn۬U~j!RYk)l'zjMÞd_*jH툦2<vu6ҡE0[*8<g?*XM~oNS+V>Ej]+{U~b5վwX+LSZEXCMCOR8Ka5վi?,*oZru}UPBw`SqVɯNrP< 1/ĸ ]fM_ /R~ȯET`n"Ky8/:?&cb_tN{aGD'+e5վi?,j с#Dn(k*8\KվHeTRxM@dL6C#El rTFXɯMaQ`4RjUrkBIX$V_{R*|OZҥޟkGTާċ<{J<.q?WPS")jܟ 3ղAgeer+z_YH1nt>?f5վi?1Py*l=ځvXS!ElR`5վ;BP9hI̲FT3 )6v̲W"݆QyN!STH,Yʳ&aRq4{>9G!g Ax6XM~o!CBPGP[fK#N'+Q!վ4RxFdt6]َ RDa1VAQV_â2PY D6Q}}ߚ )j`װ/V_&D*#ŋF}pP^㫁eYv{lY ߰A?mRn_kMr}>)lSr\-pes w Ddp $B   S A ?  2(D~azd4(qqC`!D~azd4(qqS!`\x=KAgKNs~UE#(6&F $FTA,Hv;66zrLwn6XZr#[,B0 ef{df0RsѮ"OdB6'QDwbM&L:Ҹ0zQ^]>1z7b.@iMj5Q-;fG-“rs=~TNHj4>W, NyuXu#hϱ԰}A.ky,O]qŎ? o/1N{KD_'b= dfM}{$n/_)wU~KO+Ҝ~NOۙ4MJ󚗚v5HEg+%ϟܒh$%=D}A <]K~܇xDd IJB   S A ?  2렀*Svcg`!렀*Svcg@xKP.MӨ ҡ:" bAXAAUG]⢃SsGSM!$g0'Al!DA}_zƱOz& uPG7I ) 0+$˛G;A 2+*[ia]BߢR\ΩڪbPBh:kC[!KB})'UU3#p^0R:έ}U)A)haԜf1m晀xlobno2t܎) CUw-TP8oN]id;}Ir2x_"<gg `KFsA\ZM#f噐#B\ҍZ' #q}8`!0>Z' #q}@h $(+xKA߼Yyj!QȏJHa(xBUKH4t"e b\! Y.;k|~}no| ,(-ⴑV81YaEL~YD.ƾ~{j  "xO꘨(b\˕p 3 ܢr1,8Tz/~M<~v3jBeaIeF_W+_]f͢xP!s ғc21Yg >fPQ-oUţCQWi =l-fWO4շ Z2 v%M۳gkC`S'1?| Bk_ gl Ϲ:=>_gp3We+㯞v ?uo ?l-_|+busf'uܯߌNM6Mk פW^W柯~|ף]X'+دi"7_g>V%qKƸc[师y&!q~v~GFo O%o"fEE}\+rjmߠ|NB/udm***2xG%{=aT/z_g}>r\G?3W8 l~.qS>x^J+\>XE /Rx[U1 PoT? Tx9Ŏ&&| f;1ǫ1y:^]L.@9e'|D8َ[d?1øӎPVgBx/(>8SP( }G}}K }Ʊg)3> Jg|&!g*(>P8@O3~g P}ƷB)pgtW>(> &(Pn8g_o1[G}vԟ!smP&HںAcI"~~w*#x1PmeNwPNDNw@M'[R`sޭTۮ9uBMw[R`sV~z=#rI99NWŽW"rȩ?T,r5ŶNTH#r>Ӄ`ӃP3ؖÔ?4"퐈PN%"!PSbK tN%*C/1sc⌊3Jm$q#1Ns>҈JUG"rzr*9=5eNTW~yDNc9=F9M9=5mIiOij;9"ɔSi2Tؒ;SE4M}""'("'f-)9MWq9TmiʩR4Tڒ;S;WU9Us"rC99́N4_]ꈜUۅ9-B[R`sZ.W~MDN59=K99= 5+lIiFu9թ#rZM99uNN}^"rڠڮi=Ij6ْ;&o2scTq["m!n;-PÖin;TUv;#rI99턚ݶN[7ijJDNPN{EN@^[R`sګR"rڧھPsT7#rzr:$rzjْ;!W?aޡށ#NtDj^DNQN'DNA [R`s:#rjTm?9iK tN'UO*$]d2ζ }9wٗsg }9w^˹ug_Ν8rlٗsgξ;s˹Z/jξ;{V˹eg_Ν-8rlٗsgξ;8rLΝ/}9w6_˹yg_Ν8rJ˹9g_Ν6ǀ&sL d?M#"){)|(|*|‡*|G)T /Wx§(|§)|g*|«^jW+F5 Sx7(|·*|w)|(|)|ޠ ?c ?F7*;伴 _|n'ϷIs;iK]ZG 4]{Lo^?(hȏu%47j})L0SP^ >]F@e4 oԌo}BK♴`ì#?^׾xk񫂚y͆xMM:3i- `#?^sGYįjj[muuמ%Im_6>5i.~ϙZúm=m:? LM)i~oz[G~&E\ { j^E(h1jqImgnkȏdfuM0W ~XG~ &cr{sLM0ǔ]emXM]ꏤݶhm^&C=6w jw >k4`)ƇP5B͇mlCD>q..q sq1^c2 MwqyKyL.ZxljTz~%Vcm}q.22s ewg}.E i>-H8s>w>w!K[bm}qHzs߷g}.ޟݤ 5 e%?b"]cKw>wՀU[G~܄8sܹ/l}}>ϕI`}n [`m5.q}I`}6>nYa%涌wWj_Uc~U>4FQc%Lc~^W_>*~q_5\4G~ZP8bG1p_5CbxHs.a߯X?7oP;cj<4"G1ր2^4ԸaGUc~d>4.!Qc%LTWQj!>T WYx4i<.G90eJC1}TQ25\4cnD':}՘'O1$YJCOrSbjE·Ƹ5Ƶh̹i5s4x?-l|h~.s.aP}]4 ^?3||h\I/Qc%LYs+ 5>ˁwį1?c>#1@?Pz m:;x i*G90>ֿoBi|#~M W x}s.aT}m_4J.{x-i9G90wF6) 5@Q7}՘s%o"w1 oPjk WwQ9j̹i5ඌVj\4KƜKƿP}wPp}ո!'Qc%LcePz m!;ri|4G90R}Po9#cj̿1U0<4 Gc1p_5ṇIQc%LcePz m1>r.g. \mcT7>ގE죛1a2_&rbnY#BbNBbNƐsrH1ۇ,%!1cļYxH1{8bĽ{]?[Hq0V޷~kc&x;J.dNAy[&11!*Ǖc+!K:ⷳfu5a皯wA:o7<j5\WW{}500Fssן͌?c_z?:YfR'y]=vbBZkPF$.ߤ> u>^^C{ Ƈ977t9V`qb1)9^\; >'m`Y[k>/D0{u,! lǒO.#x8n|< V)X4&× c qa"_qCoY늡%^oL瘔u\Grmmcx~zT؇|5>_*3s3s |nKӱ>WpXcd"$zjXDf*VKZj qZt*V+XlǏl~9KzXט \Ê$>_$Ǭ.yy >c( U/%K c9\\kqf~̐ &:Amsg $r'6z9@*B*<B@< Body Text$`a$tH uF@F Footnote TextxCJOJQJtH u<&@!< Footnote ReferenceCJH*D2D Abstractx]^ CJtH uJ"@J Caption$x`a$6CJOJQJtH u,@R, Header  !8/b8 Listhx^h`tH uLRrL Body Text Indent 2x^tH uFOF BibitemP^`PCJOJQJtH u$O$ Citation6FOF Code$$@^`@a$ CJOJQJ<>@< Title$<@&a$ 5CJKH4O4 Abstract TitleCJ*O* Ref Heading, @, Footer  !&)@& Page Number8V@8 FollowedHyperlink>*B* 8Y8 Document Map!-D OJQJ6'@!6 Comment ReferenceCJ,2, Comment Text#$X@A$ Emphasis64C@R4 Body Text Indent%0Zb0 Plain Text&OJQJ<Or< text'$(P` CJOJQJ,O, noIndent (`b d0XCdd}]!}}!EFRez&'0CXtGd Vk `x6!#'8'')))w**`+++++ , ,&,>,X,n,o,,,,,.-f0~083W4E68:z;t<>>#?CFH>>>??@@@3DKDTDHHHIIIWWWXXXe[q[s[v[[[[[[]^^6^J^L^R_f_h____```ab beeejjjXmdmfmnnnopp-qJqLq-rJrLr s)s+ssssttttuuuuuvvvv2w\wjwwwexxx}TTTTTTTTT: tTTT: Tt: t:t: t : tt: tTT: :::: t TT T T T T T T T T TX T T !!4!4!4frt4`2$i!@Bɬ4"$28˙oƀzr 2$ j2 p "$Bp#yզ!"$XVuN;wZ]̱"$ O&EoXS$΁ĶX"$hYBq&d.d "$^xg̀T,U Q jB 0e0e     @  5% 8c8c     ?A)BCD|E||@0(  B S  ?}6 _Hlt403318315 _Ref440254743 _977298866 _977298926 _977299288 _Ref440356186 _977298886 _993638737 _Ref437389861 _972915818 _972915922 _972916570 _972916702 _974110887 _993643913 _Ref437058894 _Ref437149562 _Ref440268038 _Ref437409379 _Ref457011789 _974198964 _974199523 _975952080 _975952145 _975952159 _986891213 _986891245 _Ref437753060 _974199195 _974199612 _975952709 _986891225 _991036495 _991036663 _Ref437753034 _974204936 _975953166 _990969705 _Ref437752929 _Ref437835847 _Ref437835852 _Ref437835388 _Ref438965982riz97avic97gem99gem97afz95bla94non97riz97briz97cvic98gem98 `4'4'4'4'4'4'8',,.-f0>>>>>>>>HHHHHHH[[[[eej~oo-q-r ssttuvjwex}@@@@@ @ @ @ @ @@@@@@@@@@@@@ @!@"#@$@%@&(')*+,-./012345% w4'4'4'4'4'4'Y',,}0}0>>>>>>>?HHHHHHI[[[[eejopMqMr,sstuuvwx}7 G H W 3 B 3  !!%%?'Y')P)*+,,,,>?@@3DUDIIWWXXe[t[[[``a beejjXmgmnnop-qMq-rMr s,ssstttuuuvvjwwexxxry{{@|D|E|G||||||||||6}u}v}v}}}}}}}}}}""##'&+&T&&8'Z'd+m+++++++,,.,4,B,D,`,f,s,y,,,,,,,%-(-..s.w../A/45?9B9C==>??"?6BBB]FgFIHKHHII;I_JiJTTVV,X.X[[[[]]]]^^____7`9`iemeeecimihtntry@|E||}}}33333333333333333333333333333333333333333333333333333333337 G H W 3 B 3  !!%%?'Y')P)*+,,,,>?@@3DUDIIWWXXe[t[[[``a beejjXmgmnnop-qMq-rMr s,ssstttuuuvvjwwexxqyry{{|||||||||6}u}v}v}}}}}} microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.doc microsoft%\\jgemmell2\c$\djg\Docs\FcastIMSA.docjgemmell.\\jgemmellsvr\e$\djg\Docs\pubs\FcastIMSA99.doc$|O}m~nXc,h|o?o ;~># eO wW- 9d8X@ C~ i !5;5q8 m! $! }5" K&`VcSI9vJ+7p=vJo? C[G $QJ 4{QH(dOqW IY (i =8Eu+^1Pw`Vc^`.^`.88^8`.^`. ^`OJQJo( ^`OJQJo( 88^8`OJQJo( ^`OJQJo(hh^h`. hh^h`OJQJo(P^`P@@^@`.0^`0..``^``... ^` .... ^` ..... ^` ...... `^``....... 00^0`........*P^`P@@^@`.0^`0..``^``... ^` .... ^` ..... ^` ...... `^``....... 00^0`........ ^`OJQJo(hh^h`. P^`POJQJo(hh^h`. hh^h`OJQJo(hh^h`.hh^h`CJ(OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`. h^h`OJQJo( ^`OJQJo( ^`OJQJo( hh^h`OJQJo(hh^h`o(. ^`OJQJo( ^`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(0^`0o(. h^h`OJQJo(%C~-IY!5;(io?$!K&1Pw9d$QJ+7p=SI9{Q~}|C[G<~s~s ei}5"q8=8EuOqWm!H~s @CJ0OJQJo(~s @CJ(OJQJo(X$$EF'`` bd!d:dWdoddddddddddddddddddeee-e0e2eWe[e\egeweyeeeery||}}}}@( O}`@Unknown Gz Times New Roman5Symbol3& z Arial71Courier3z Times5# Tahoma?1 Courier New;Wingdings?& Arial Black"1hS7G&G&Q #d3!20dz