|
From: <sv...@va...> - 2005-08-14 22:43:56
|
Author: njn
Date: 2005-08-14 23:43:53 +0100 (Sun, 14 Aug 2005)
New Revision: 4412
Log:
Add a thorough unit test for m_oset. Note that this is Memcheck
testing code that's part of Valgrind, which is a good thing.
Added:
trunk/memcheck/tests/oset_test.c
trunk/memcheck/tests/oset_test.stderr.exp
trunk/memcheck/tests/oset_test.stdout.exp
Modified:
trunk/memcheck/tests/Makefile.am
Modified: trunk/memcheck/tests/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/Makefile.am 2005-08-14 22:14:55 UTC (rev 4411)
+++ trunk/memcheck/tests/Makefile.am 2005-08-14 22:43:53 UTC (rev 4412)
@@ -59,6 +59,7 @@
new_override.stderr.exp new_override.stdout.exp new_override.vgtest \
null_socket.stderr.exp null_socket.vgtest \
overlap.stderr.exp overlap.stdout.exp overlap.vgtest \
+ oset_test.stderr.exp oset_test.stdout.exp oset_test.vgtest \
partiallydefinedeq.vgtest partiallydefinedeq.stderr.exp \
partiallydefinedeq.stdout.exp \
pointer-trace.vgtest \
@@ -102,7 +103,7 @@
match-overrun \
memalign_test memalign2 memcmptest mempool mmaptest \
nanoleak new_nothrow \
- null_socket overlap \
+ null_socket oset_test overlap \
partiallydefinedeq \
pointer-trace \
post-syscall \
@@ -115,12 +116,13 @@
writev zeropage
=20
=20
-AM_CPPFLAGS =3D -I$(top_srcdir) -I$(top_srcdir)/include -I$(top_builddir=
)/include -I@VEX_DIR@/pub
+AM_CPPFLAGS =3D -I$(top_srcdir) -I$(top_srcdir)/include -I$(top_srcdir)/=
coregrind -I$(top_builddir)/include -I@VEX_DIR@/pub
AM_CFLAGS =3D $(WERROR) -Winline -Wall -Wshadow -g=20
AM_CXXFLAGS =3D $(AM_CFLAGS)
=20
# Extra stuff for C tests
memcmptest_CFLAGS =3D $(AM_CFLAGS) -fno-builtin-memcmp
+oset_test_CFLAGS =3D -DVGA_$(VG_ARCH) -DVGO_$(VG_OS) -DVGP_$(VG_PLATFORM=
)
# Don't allow GCC to inline memcpy(), because then we can't intercept it
overlap_CFLAGS =3D $(AM_CFLAGS) -fno-builtin-memcpy
str_tester_CFLAGS =3D $(AM_CFLAGS) -Wno-shadow
Added: trunk/memcheck/tests/oset_test.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/oset_test.c 2005-08-14 22:14:55 UTC (rev 4411)
+++ trunk/memcheck/tests/oset_test.c 2005-08-14 22:43:53 UTC (rev 4412)
@@ -0,0 +1,361 @@
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pub_core_basics.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcprint.h"
+
+// I need this to avoid some signedness warnings, not sure why
+#define Char char
+
+// Crudely redirect various VG_(foo)() functions to their libc equivalen=
ts.
+#undef vg_assert
+#define vg_assert(e) assert(e)
+#undef vg_assert2
+#define vg_assert2(e, fmt, args...) assert(e)
+
+#define vgPlain_printf printf
+#define vgPlain_memset memset
+#define vgPlain_memcpy memcpy
+#define vgPlain_random random
+
+#include "coregrind/m_oset.c"
+
+#define NN 1000 // Size of OSets being created
+
+//----------------------------------------------------------------------=
-----
+// Int example
+//----------------------------------------------------------------------=
-----
+
+// This example shows that an element can be a single value (in this cas=
e an
+// Int), in which case the element is also the key.
+
+__attribute__((unused))
+static Char *intToStr(void *p)
+{
+ static char buf[16];
+ sprintf(buf, "%d", *(Int*)p);
+ return buf;
+}
+
+__attribute__((unused))
+static Int intCmp(void* vkey, void* velem)
+{
+ return *(Int*)vkey - *(Int*)velem;
+}
+
+void example1(void)
+{
+ Int i, v, n, prev;
+ Int* vs[NN];
+ Int *pv;
+
+ // Create a static OSet of Ints. This one uses fast (built-in)
+ // comparisons.
+ OSet* oset1 =3D VG_(OSet_Create)(0,
+ NULL,
+ (void*)malloc, free);
+
+ // Try some operations on an empty OSet to ensure they don't screw up=
.
+ vg_assert( ! VG_(OSet_Contains)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Lookup)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Remove)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Next)(oset1) );
+ vg_assert( 0 =3D=3D VG_(OSet_Size)(oset1) );
+
+ // Create some elements, with gaps (they're all even) but no dups,
+ // and shuffle them randomly.
+ for (i =3D 0; i < NN; i++) {
+ vs[i] =3D VG_(OSet_AllocNode)(oset1, sizeof(Int));
+ *(vs[i]) =3D 2*i;
+ }
+ for (i =3D 0; i < NN; i++) {
+ Int r1 =3D random() % NN;
+ Int r2 =3D random() % NN;
+ Int* tmp=3D vs[r1];
+ vs[r1] =3D vs[r2];
+ vs[r2] =3D tmp;
+ }
+
+ // Insert the elements
+ for (i =3D 0; i < NN; i++) {
+ VG_(OSet_Insert)(oset1, vs[i]);
+ }
+
+ // Check the size
+ vg_assert( NN =3D=3D VG_(OSet_Size)(oset1) );
+
+ // Check we can find all the elements we inserted
+ for (i =3D 0; i < NN; i++) {
+ assert( VG_(OSet_Contains)(oset1, vs[i]) );
+ }
+
+ // Check we cannot find elements we did not insert, below, within (od=
d
+ // numbers), and above the inserted elements.
+ v =3D -1;
+ assert( ! VG_(OSet_Contains)(oset1, &v) );
+ for (i =3D 0; i < NN; i++) {
+ v =3D *(vs[i]) + 1;
+ assert( ! VG_(OSet_Contains)(oset1, &v) );
+ }
+ v =3D NN*2;
+ assert( ! VG_(OSet_Contains)(oset1, &v) );
+
+ // Check we can find all the elements we inserted, and the right valu=
es
+ // are returned.
+ for (i =3D 0; i < NN; i++) {
+ assert( vs[i] =3D=3D VG_(OSet_Lookup)(oset1, vs[i]) );
+ }
+
+ // Check that we can iterate over the OSet elements in sorted order, =
and
+ // there is the right number of them.
+ n =3D 0;
+ pv =3D NULL;
+ prev =3D -1;
+ VG_(OSet_ResetIter)(oset1);
+ while ( (pv =3D VG_(OSet_Next)(oset1)) ) {
+ Int curr =3D *pv;
+ assert(prev < curr);=20
+ prev =3D curr;
+ n++;
+ }
+ assert(NN =3D=3D n);
+ vg_assert( ! VG_(OSet_Next)(oset1) );
+ vg_assert( ! VG_(OSet_Next)(oset1) );
+
+ // Check that we can remove half of the elements, and that their valu=
es
+ // are as expected.
+ for (i =3D 0; i < NN; i +=3D 2) {
+ assert( pv =3D VG_(OSet_Remove)(oset1, vs[i]) );
+ assert( pv =3D=3D vs[i] );
+ }
+
+ // Check the size
+ vg_assert( NN/2 =3D=3D VG_(OSet_Size)(oset1) );
+
+ // Check we can find the remaining elements (with the right values).
+ for (i =3D 1; i < NN; i +=3D 2) {
+ assert( pv =3D VG_(OSet_Lookup)(oset1, vs[i]) );
+ assert( pv =3D=3D vs[i] );
+ }
+
+ // Check we cannot find any of the elements we removed.
+ for (i =3D 0; i < NN; i +=3D 2) {
+ assert( ! VG_(OSet_Contains)(oset1, vs[i]) );
+ }
+
+ // Check that we can remove the remaining half of the elements, and t=
hat
+ // their values are as expected.
+ for (i =3D 1; i < NN; i +=3D 2) {
+ assert( pv =3D VG_(OSet_Remove)(oset1, vs[i]) );
+ assert( pv =3D=3D vs[i] );
+ }
+
+ // Try some more operations on the empty OSet to ensure they don't sc=
rew up.
+ vg_assert( ! VG_(OSet_Contains)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Lookup)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Remove)(oset1, &v) );
+ vg_assert( ! VG_(OSet_Next)(oset1) );
+ vg_assert( 0 =3D=3D VG_(OSet_Size)(oset1) );
+
+ // Free a few elements
+ VG_(OSet_FreeNode)(oset1, vs[0]);
+ VG_(OSet_FreeNode)(oset1, vs[1]);
+ VG_(OSet_FreeNode)(oset1, vs[2]);
+
+ // Re-insert remaining elements, to give OSet_Destroy something to wo=
rk with.
+ for (i =3D 3; i < NN; i++) {
+ VG_(OSet_Insert)(oset1, vs[i]);
+ }
+
+ // Print the list
+ OSet_Print(oset1, "foo", intToStr);
+
+ // Destroy the OSet
+ VG_(OSet_Destroy)(oset1);
+}
+
+
+//----------------------------------------------------------------------=
-----
+// Struct example
+//----------------------------------------------------------------------=
-----
+
+// This element shows that a key can be in the middle of the element, an=
d
+// be of arbitrary size and even span multiple (contiguous) fields. It
+// also demonstrates how an OSet can be used to implement a list of
+// non-overlapping intervals.
+
+typedef struct {
+ Int b1;
+ Addr first;
+ Addr last;
+ Int b2;
+}
+Block;
+
+__attribute__((unused))
+static Char *blockToStr(void *p)
+{
+ static char buf[32];
+ Block* b =3D (Block*)p;
+ sprintf(buf, "<(%d) %lu..%lu (%d)>", b->b1, b->first, b->last, b->b2)=
;
+ return buf;
+}
+
+static Int blockCmp(void* vkey, void* velem)
+{
+ Addr key =3D *(Addr*)vkey;
+ Block* elem =3D (Block*)velem;
+
+ assert(elem->first <=3D elem->last);
+ if (key < elem->first) return -1;
+ if (key > elem->last) return 1;
+ return 0;
+}
+
+void example2(void)
+{
+ Int i, n;
+ Addr a;
+ Block* vs[NN];
+ Block v, prev;
+ Block *pv;
+
+ // Create a dynamic OSet of Blocks. This one uses slow (custom)
+ // comparisons.
+ OSet* oset2 =3D VG_(OSet_Create)(offsetof(Block, first),
+ blockCmp,
+ (void*)malloc, free);
+
+ // Try some operations on an empty OSet to ensure they don't screw up=
.
+ vg_assert( ! VG_(OSet_Contains)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Lookup)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Remove)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Next)(oset2) );
+ vg_assert( 0 =3D=3D VG_(OSet_Size)(oset2) );
+
+ // Create some inputs, with gaps -- intervals are 1..3, 11..13, ... -=
- but
+ // no dups, and shuffle them randomly.
+ for (i =3D 0; i < NN; i++) {
+ vs[i] =3D VG_(OSet_AllocNode)(oset2, sizeof(Block));
+ vs[i]->b1 =3D i;
+ vs[i]->first =3D i*10 + 1;
+ vs[i]->last =3D vs[i]->first + 2;
+ vs[i]->b2 =3D i+1;
+ }
+ for (i =3D 0; i < NN; i++) {
+ Int r1 =3D random() % NN;
+ Int r2 =3D random() % NN;
+ Block* tmp =3D vs[r1];
+ vs[r1] =3D vs[r2];
+ vs[r2] =3D tmp;
+ }
+
+ // Insert the elements
+ for (i =3D 0; i < NN; i++) {
+ VG_(OSet_Insert)(oset2, vs[i]);
+ }
+
+ // Check the size
+ vg_assert( NN =3D=3D VG_(OSet_Size)(oset2) );
+
+ // Check we can find all the elements we inserted, within the full ra=
nge
+ // of each Block.
+ for (i =3D 0; i < NN; i++) {
+ a =3D vs[i]->first + 0; assert( VG_(OSet_Contains)(oset2, &a) )=
;
+ a =3D vs[i]->first + 1; assert( VG_(OSet_Contains)(oset2, &a) )=
;
+ a =3D vs[i]->first + 2; assert( VG_(OSet_Contains)(oset2, &a) )=
;
+ }
+
+ // Check we cannot find elements we did not insert, below and above t=
he
+ // ranges of the inserted elements.
+ a =3D 0;
+ assert( ! VG_(OSet_Contains)(oset2, &a) );
+ for (i =3D 0; i < NN; i++) {
+ a =3D vs[i]->first - 1; assert( ! VG_(OSet_Contains)(oset2, &a)=
);
+ a =3D vs[i]->first + 3; assert( ! VG_(OSet_Contains)(oset2, &a)=
);
+ }
+
+ // Check we can find all the elements we inserted, and the right valu=
es
+ // are returned.
+ for (i =3D 0; i < NN; i++) {
+ a =3D vs[i]->first + 0; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ a =3D vs[i]->first + 1; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ a =3D vs[i]->first + 2; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ }
+
+ // Check that we can iterate over the OSet elements in sorted order, =
and
+ // there is the right number of them.
+ n =3D 0;
+ pv =3D NULL;
+ prev.last =3D 0;
+ VG_(OSet_ResetIter)(oset2);
+ while ( (pv =3D VG_(OSet_Next)(oset2)) ) {
+ Block curr =3D *pv;
+ assert(prev.last < curr.first);=20
+ prev =3D curr;
+ n++;
+ }
+ assert(NN =3D=3D n);
+ vg_assert( ! VG_(OSet_Next)(oset2) );
+ vg_assert( ! VG_(OSet_Next)(oset2) );
+
+ // Check that we can remove half of the elements, and that their valu=
es
+ // are as expected.
+ for (i =3D 0; i < NN; i +=3D 2) {
+ a =3D vs[i]->first; assert( vs[i] =3D=3D VG_(OSet_Remove)(oset2=
, &a) );
+ }
+
+ // Check the size
+ vg_assert( NN/2 =3D=3D VG_(OSet_Size)(oset2) );
+
+ // Check we can find the remaining elements (with the right values).
+ for (i =3D 1; i < NN; i +=3D 2) {
+ a =3D vs[i]->first + 0; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ a =3D vs[i]->first + 1; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ a =3D vs[i]->first + 2; assert( vs[i] =3D=3D VG_(OSet_Lookup)(o=
set2, &a) );
+ }
+
+ // Check we cannot find any of the elements we removed.
+ for (i =3D 0; i < NN; i +=3D 2) {
+ a =3D vs[i]->first + 0; assert( ! VG_(OSet_Contains)(oset2, &a)=
);
+ a =3D vs[i]->first + 1; assert( ! VG_(OSet_Contains)(oset2, &a)=
);
+ a =3D vs[i]->first + 2; assert( ! VG_(OSet_Contains)(oset2, &a)=
);
+ }
+
+ // Check that we can remove the remaining half of the elements, and t=
hat
+ // their values are as expected.
+ for (i =3D 1; i < NN; i +=3D 2) {
+ a =3D vs[i]->first; assert( vs[i] =3D=3D VG_(OSet_Remove)(oset2=
, &a) );
+ }
+
+ // Try some more operations on the empty OSet to ensure they don't sc=
rew up.
+ vg_assert( ! VG_(OSet_Contains)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Lookup)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Remove)(oset2, &v) );
+ vg_assert( ! VG_(OSet_Next)(oset2) );
+ vg_assert( 0 =3D=3D VG_(OSet_Size)(oset2) );
+
+ // Re-insert all elements, to give OSet_Destroy something to work wit=
h.
+ for (i =3D 0; i < NN; i++) {
+ VG_(OSet_Insert)(oset2, vs[i]);
+ }
+
+ // Destroy the OSet
+ VG_(OSet_Destroy)(oset2);
+}
+
+//----------------------------------------------------------------------=
-
+// main()
+//----------------------------------------------------------------------=
-
+
+int main(void)
+{
+ example1();
+ example2();
+ return 0;
+}
Added: trunk/memcheck/tests/oset_test.stderr.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Added: trunk/memcheck/tests/oset_test.stdout.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/oset_test.stdout.exp 2005-08-14 22:14:55 UTC (re=
v 4411)
+++ trunk/memcheck/tests/oset_test.stdout.exp 2005-08-14 22:43:53 UTC (re=
v 4412)
@@ -0,0 +1,999 @@
+-- start foo ----------------
+.. .. .. .. .. .. .. .. .. .. 1998
+.. .. .. .. .. .. .. .. .. 1996
+.. .. .. .. .. .. .. .. .. .. 1994
+.. .. .. .. .. .. .. .. 1992
+.. .. .. .. .. .. .. .. .. 1990
+.. .. .. .. .. .. .. 1988
+.. .. .. .. .. .. .. .. .. 1986
+.. .. .. .. .. .. .. .. .. .. 1984
+.. .. .. .. .. .. .. .. 1982
+.. .. .. .. .. .. .. .. .. 1980
+.. .. .. .. .. .. 1978
+.. .. .. .. .. .. .. .. .. .. 1976
+.. .. .. .. .. .. .. .. .. 1974
+.. .. .. .. .. .. .. .. .. .. 1972
+.. .. .. .. .. .. .. .. 1970
+.. .. .. .. .. .. .. .. .. 1968
+.. .. .. .. .. .. .. 1966
+.. .. .. .. .. .. .. .. .. .. 1964
+.. .. .. .. .. .. .. .. .. 1962
+.. .. .. .. .. .. .. .. .. .. 1960
+.. .. .. .. .. .. .. .. .. .. .. 1958
+.. .. .. .. .. .. .. .. 1956
+.. .. .. .. .. .. .. .. .. 1954
+.. .. .. .. .. .. .. .. .. .. 1952
+.. .. .. .. .. 1950
+.. .. .. .. .. .. .. .. .. .. 1948
+.. .. .. .. .. .. .. .. .. 1946
+.. .. .. .. .. .. .. .. .. .. 1944
+.. .. .. .. .. .. .. .. 1942
+.. .. .. .. .. .. .. .. .. 1940
+.. .. .. .. .. .. .. .. .. .. 1938
+.. .. .. .. .. .. .. 1936
+.. .. .. .. .. .. .. .. .. 1934
+.. .. .. .. .. .. .. .. .. .. 1932
+.. .. .. .. .. .. .. .. 1930
+.. .. .. .. .. .. .. .. .. 1928
+.. .. .. .. .. .. 1926
+.. .. .. .. .. .. .. .. .. 1924
+.. .. .. .. .. .. .. .. .. .. 1922
+.. .. .. .. .. .. .. .. 1920
+.. .. .. .. .. .. .. .. .. 1918
+.. .. .. .. .. .. .. 1916
+.. .. .. .. .. .. .. .. .. .. 1914
+.. .. .. .. .. .. .. .. .. 1912
+.. .. .. .. .. .. .. .. .. .. 1910
+.. .. .. .. .. .. .. .. 1908
+.. .. .. .. .. .. .. .. .. 1906
+.. .. .. .. 1904
+.. .. .. .. .. .. .. .. .. 1902
+.. .. .. .. .. .. .. .. 1900
+.. .. .. .. .. .. .. .. .. 1898
+.. .. .. .. .. .. .. 1896
+.. .. .. .. .. .. .. .. .. .. 1894
+.. .. .. .. .. .. .. .. .. 1892
+.. .. .. .. .. .. .. .. .. .. 1890
+.. .. .. .. .. .. .. .. 1888
+.. .. .. .. .. .. .. .. .. 1886
+.. .. .. .. .. .. 1884
+.. .. .. .. .. .. .. .. .. 1882
+.. .. .. .. .. .. .. .. 1880
+.. .. .. .. .. .. .. .. .. 1878
+.. .. .. .. .. .. .. .. .. .. 1876
+.. .. .. .. .. .. .. 1874
+.. .. .. .. .. .. .. .. .. 1872
+.. .. .. .. .. .. .. .. .. .. 1870
+.. .. .. .. .. .. .. .. 1868
+.. .. .. .. .. .. .. .. .. 1866
+.. .. .. .. .. 1864
+.. .. .. .. .. .. .. .. .. 1862
+.. .. .. .. .. .. .. .. 1860
+.. .. .. .. .. .. .. 1858
+.. .. .. .. .. .. .. .. 1856
+.. .. .. .. .. .. 1854
+.. .. .. .. .. .. .. .. 1852
+.. .. .. .. .. .. .. .. .. 1850
+.. .. .. .. .. .. .. 1848
+.. .. .. .. .. .. .. .. .. 1846
+.. .. .. .. .. .. .. .. 1844
+.. .. .. .. .. .. .. .. .. 1842
+.. .. .. 1840
+.. .. .. .. .. .. .. .. .. 1838
+.. .. .. .. .. .. .. .. .. .. 1836
+.. .. .. .. .. .. .. .. 1834
+.. .. .. .. .. .. .. .. .. 1832
+.. .. .. .. .. .. .. 1830
+.. .. .. .. .. .. .. .. .. 1828
+.. .. .. .. .. .. .. .. 1826
+.. .. .. .. .. .. .. .. .. .. 1824
+.. .. .. .. .. .. .. .. .. 1822
+.. .. .. .. .. .. 1820
+.. .. .. .. .. .. .. .. .. .. 1818
+.. .. .. .. .. .. .. .. .. 1816
+.. .. .. .. .. .. .. .. .. .. 1814
+.. .. .. .. .. .. .. .. 1812
+.. .. .. .. .. .. .. .. .. 1810
+.. .. .. .. .. .. .. 1808
+.. .. .. .. .. .. .. .. .. 1806
+.. .. .. .. .. .. .. .. 1804
+.. .. .. .. .. 1802
+.. .. .. .. .. .. .. .. 1800
+.. .. .. .. .. .. .. .. .. 1798
+.. .. .. .. .. .. .. 1796
+.. .. .. .. .. .. .. .. .. 1794
+.. .. .. .. .. .. .. .. 1792
+.. .. .. .. .. .. .. .. .. 1790
+.. .. .. .. .. .. 1788
+.. .. .. .. .. .. .. .. .. 1786
+.. .. .. .. .. .. .. .. 1784
+.. .. .. .. .. .. .. .. .. 1782
+.. .. .. .. .. .. .. 1780
+.. .. .. .. .. .. .. .. .. 1778
+.. .. .. .. .. .. .. .. 1776
+.. .. .. .. .. .. .. .. .. 1774
+.. .. .. .. 1772
+.. .. .. .. .. .. .. .. .. .. 1770
+.. .. .. .. .. .. .. .. .. 1768
+.. .. .. .. .. .. .. .. 1766
+.. .. .. .. .. .. .. .. .. 1764
+.. .. .. .. .. .. .. 1762
+.. .. .. .. .. .. .. .. .. .. 1760
+.. .. .. .. .. .. .. .. .. 1758
+.. .. .. .. .. .. .. .. 1756
+.. .. .. .. .. .. .. .. .. 1754
+.. .. .. .. .. .. .. .. .. .. 1752
+.. .. .. .. .. .. 1750
+.. .. .. .. .. .. .. .. .. .. 1748
+.. .. .. .. .. .. .. .. .. 1746
+.. .. .. .. .. .. .. .. .. .. 1744
+.. .. .. .. .. .. .. .. 1742
+.. .. .. .. .. .. .. .. .. .. 1740
+.. .. .. .. .. .. .. .. .. 1738
+.. .. .. .. .. .. .. 1736
+.. .. .. .. .. .. .. .. .. .. 1734
+.. .. .. .. .. .. .. .. .. 1732
+.. .. .. .. .. .. .. .. .. .. 1730
+.. .. .. .. .. .. .. .. 1728
+.. .. .. .. .. .. .. .. .. 1726
+.. .. .. .. .. 1724
+.. .. .. .. .. .. .. .. .. 1722
+.. .. .. .. .. .. .. .. 1720
+.. .. .. .. .. .. .. .. .. 1718
+.. .. .. .. .. .. .. 1716
+.. .. .. .. .. .. .. .. .. 1714
+.. .. .. .. .. .. .. .. 1712
+.. .. .. .. .. .. .. .. .. 1710
+.. .. .. .. .. .. 1708
+.. .. .. .. .. .. .. .. .. 1706
+.. .. .. .. .. .. .. .. 1704
+.. .. .. .. .. .. .. .. .. 1702
+.. .. .. .. .. .. .. 1700
+.. .. .. .. .. .. .. .. 1698
+.. .. 1696
+.. .. .. .. .. .. .. .. .. .. 1694
+.. .. .. .. .. .. .. .. .. 1692
+.. .. .. .. .. .. .. .. .. .. 1690
+.. .. .. .. .. .. .. .. 1688
+.. .. .. .. .. .. .. .. .. 1686
+.. .. .. .. .. .. .. .. .. .. 1684
+.. .. .. .. .. .. .. 1680
+.. .. .. .. .. .. .. .. 1678
+.. .. .. .. .. .. .. .. .. 1676
+.. .. .. .. .. .. 1672
+.. .. .. .. .. .. .. .. .. .. 1670
+.. .. .. .. .. .. .. .. .. 1668
+.. .. .. .. .. .. .. .. 1666
+.. .. .. .. .. .. .. .. .. .. .. 1664
+.. .. .. .. .. .. .. .. .. .. 1662
+.. .. .. .. .. .. .. .. .. 1660
+.. .. .. .. .. .. .. .. .. .. 1658
+.. .. .. .. .. .. .. .. .. .. .. 1656
+.. .. .. .. .. .. .. 1654
+.. .. .. .. .. .. .. .. .. 1652
+.. .. .. .. .. .. .. .. .. .. 1650
+.. .. .. .. .. .. .. .. 1648
+.. .. .. .. .. .. .. .. .. .. 1646
+.. .. .. .. .. .. .. .. .. 1644
+.. .. .. .. .. .. .. .. .. .. 1642
+.. .. .. .. .. 1640
+.. .. .. .. .. .. .. .. .. 1638
+.. .. .. .. .. .. .. .. 1636
+.. .. .. .. .. .. .. .. .. .. 1634
+.. .. .. .. .. .. .. .. .. 1632
+.. .. .. .. .. .. .. .. .. .. 1630
+.. .. .. .. .. .. .. 1628
+.. .. .. .. .. .. .. .. .. 1626
+.. .. .. .. .. .. .. .. 1624
+.. .. .. .. .. .. 1622
+.. .. .. .. .. .. .. .. .. .. 1620
+.. .. .. .. .. .. .. .. .. 1618
+.. .. .. .. .. .. .. .. .. .. 1616
+.. .. .. .. .. .. .. .. 1614
+.. .. .. .. .. .. .. .. .. 1612
+.. .. .. .. .. .. .. .. .. .. 1610
+.. .. .. .. .. .. .. 1608
+.. .. .. .. .. .. .. .. .. 1606
+.. .. .. .. .. .. .. .. 1604
+.. .. .. .. .. .. .. .. .. 1602
+.. .. .. .. 1600
+.. .. .. .. .. .. .. .. .. .. 1598
+.. .. .. .. .. .. .. .. .. 1596
+.. .. .. .. .. .. .. .. 1594
+.. .. .. .. .. .. .. .. .. 1592
+.. .. .. .. .. .. .. 1590
+.. .. .. .. .. .. .. .. .. 1588
+.. .. .. .. .. .. .. .. 1586
+.. .. .. .. .. .. .. .. .. .. 1584
+.. .. .. .. .. .. .. .. .. 1582
+.. .. .. .. .. .. .. .. .. .. 1580
+.. .. .. .. .. .. 1578
+.. .. .. .. .. .. .. .. .. .. 1576
+.. .. .. .. .. .. .. .. .. 1574
+.. .. .. .. .. .. .. .. 1572
+.. .. .. .. .. .. .. .. .. 1570
+.. .. .. .. .. .. .. 1568
+.. .. .. .. .. .. .. .. .. 1566
+.. .. .. .. .. .. .. .. 1564
+.. .. .. .. .. .. .. .. .. 1562
+.. .. .. .. .. 1560
+.. .. .. .. .. .. .. .. .. .. 1558
+.. .. .. .. .. .. .. .. .. 1556
+.. .. .. .. .. .. .. .. 1554
+.. .. .. .. .. .. .. .. .. .. 1552
+.. .. .. .. .. .. .. .. .. 1550
+.. .. .. .. .. .. .. 1548
+.. .. .. .. .. .. .. .. .. 1546
+.. .. .. .. .. .. .. .. 1544
+.. .. .. .. .. .. .. .. .. 1542
+.. .. .. .. .. .. 1540
+.. .. .. .. .. .. .. .. .. 1538
+.. .. .. .. .. .. .. .. 1536
+.. .. .. .. .. .. .. .. .. 1534
+.. .. .. .. .. .. .. 1532
+.. .. .. .. .. .. .. .. 1530
+.. .. .. .. .. .. .. .. .. 1528
+.. .. .. 1526
+.. .. .. .. .. .. .. .. .. 1524
+.. .. .. .. .. .. .. .. 1522
+.. .. .. .. .. .. .. 1520
+.. .. .. .. .. .. .. .. .. 1518
+.. .. .. .. .. .. .. .. .. .. 1516
+.. .. .. .. .. .. .. .. 1514
+.. .. .. .. .. .. .. .. .. .. 1512
+.. .. .. .. .. .. .. .. .. 1510
+.. .. .. .. .. .. 1508
+.. .. .. .. .. .. .. .. .. 1506
+.. .. .. .. .. .. .. .. 1504
+.. .. .. .. .. .. .. .. .. 1502
+.. .. .. .. .. .. .. 1500
+.. .. .. .. .. .. .. .. .. 1498
+.. .. .. .. .. .. .. .. 1496
+.. .. .. .. .. .. .. .. .. 1494
+.. .. .. .. .. .. .. .. .. .. 1492
+.. .. .. .. .. 1490
+.. .. .. .. .. .. .. .. .. .. 1488
+.. .. .. .. .. .. .. .. .. 1486
+.. .. .. .. .. .. .. .. .. .. 1484
+.. .. .. .. .. .. .. .. 1482
+.. .. .. .. .. .. .. .. .. 1480
+.. .. .. .. .. .. .. 1478
+.. .. .. .. .. .. .. .. .. .. 1476
+.. .. .. .. .. .. .. .. .. 1474
+.. .. .. .. .. .. .. .. 1472
+.. .. .. .. .. .. .. .. .. .. 1470
+.. .. .. .. .. .. .. .. .. 1468
+.. .. .. .. .. .. .. .. .. .. 1466
+.. .. .. .. .. .. 1464
+.. .. .. .. .. .. .. .. .. 1462
+.. .. .. .. .. .. .. .. 1460
+.. .. .. .. .. .. .. .. .. 1458
+.. .. .. .. .. .. .. 1456
+.. .. .. .. .. .. .. .. .. 1454
+.. .. .. .. .. .. .. .. 1452
+.. .. .. .. .. .. .. .. .. .. 1450
+.. .. .. .. .. .. .. .. .. 1448
+.. .. .. .. 1446
+.. .. .. .. .. .. .. .. .. .. 1444
+.. .. .. .. .. .. .. .. .. 1442
+.. .. .. .. .. .. .. .. 1440
+.. .. .. .. .. .. .. .. .. 1438
+.. .. .. .. .. .. .. .. .. .. 1436
+.. .. .. .. .. .. .. 1434
+.. .. .. .. .. .. .. .. .. .. 1432
+.. .. .. .. .. .. .. .. .. 1430
+.. .. .. .. .. .. .. .. 1428
+.. .. .. .. .. .. .. .. .. .. 1426
+.. .. .. .. .. .. .. .. .. 1424
+.. .. .. .. .. .. .. .. .. .. .. 1422
+.. .. .. .. .. .. .. .. .. .. 1420
+.. .. .. .. .. .. .. .. .. .. .. 1418
+.. .. .. .. .. .. 1416
+.. .. .. .. .. .. .. .. .. .. 1414
+.. .. .. .. .. .. .. .. .. 1412
+.. .. .. .. .. .. .. .. .. .. 1410
+.. .. .. .. .. .. .. .. .. .. .. 1408
+.. .. .. .. .. .. .. .. 1406
+.. .. .. .. .. .. .. .. .. .. 1404
+.. .. .. .. .. .. .. .. .. 1402
+.. .. .. .. .. .. .. .. .. .. 1400
+.. .. .. .. .. .. .. 1398
+.. .. .. .. .. .. .. .. .. .. 1396
+.. .. .. .. .. .. .. .. .. 1394
+.. .. .. .. .. .. .. .. .. .. .. 1392
+.. .. .. .. .. .. .. .. .. .. 1390
+.. .. .. .. .. .. .. .. 1388
+.. .. .. .. .. .. .. .. .. .. 1386
+.. .. .. .. .. .. .. .. .. 1384
+.. .. .. .. .. .. .. .. .. .. 1382
+.. .. .. .. .. .. .. .. .. .. .. 1380
+.. .. .. .. .. 1378
+.. .. .. .. .. .. .. .. .. .. 1376
+.. .. .. .. .. .. .. .. .. 1374
+.. .. .. .. .. .. .. .. .. .. 1372
+.. .. .. .. .. .. .. .. 1370
+.. .. .. .. .. .. .. .. .. .. 1368
+.. .. .. .. .. .. .. .. .. 1366
+.. .. .. .. .. .. .. 1364
+.. .. .. .. .. .. .. .. .. 1362
+.. .. .. .. .. .. .. .. .. .. 1360
+.. .. .. .. .. .. .. .. 1358
+.. .. .. .. .. .. .. .. .. 1356
+.. .. .. .. .. .. 1354
+.. .. .. .. .. .. .. .. .. 1352
+.. .. .. .. .. .. .. .. 1350
+.. .. .. .. .. .. .. .. .. .. 1348
+.. .. .. .. .. .. .. .. .. 1346
+.. .. .. .. .. .. .. 1344
+.. .. .. .. .. .. .. .. .. 1342
+.. .. .. .. .. .. .. .. .. .. 1340
+.. .. .. .. .. .. .. .. 1338
+.. .. .. .. .. .. .. .. .. .. 1336
+.. .. .. .. .. .. .. .. .. 1334
+.. .. .. .. .. .. .. .. .. .. 1332
+.. 1330
+.. .. .. .. .. .. .. .. 1328
+.. .. .. .. .. .. .. .. .. 1326
+.. .. .. .. .. .. .. 1324
+.. .. .. .. .. .. .. .. .. 1322
+.. .. .. .. .. .. .. .. 1320
+.. .. .. .. .. .. .. .. .. 1318
+.. .. .. .. .. .. 1316
+.. .. .. .. .. .. .. .. .. 1314
+.. .. .. .. .. .. .. .. 1312
+.. .. .. .. .. .. .. .. .. 1310
+.. .. .. .. .. .. .. 1308
+.. .. .. .. .. .. .. .. .. 1306
+.. .. .. .. .. .. .. .. .. .. 1304
+.. .. .. .. .. .. .. .. 1302
+.. .. .. .. .. .. .. .. .. .. 1300
+.. .. .. .. .. .. .. .. .. 1298
+.. .. .. .. .. 1296
+.. .. .. .. .. .. .. .. .. 1294
+.. .. .. .. .. .. .. .. 1292
+.. .. .. .. .. .. .. .. .. 1290
+.. .. .. .. .. .. .. 1288
+.. .. .. .. .. .. .. .. .. 1286
+.. .. .. .. .. .. .. .. 1284
+.. .. .. .. .. .. .. .. .. 1282
+.. .. .. .. .. .. 1280
+.. .. .. .. .. .. .. .. 1278
+.. .. .. .. .. .. .. 1276
+.. .. .. .. .. .. .. .. 1274
+.. .. .. .. 1272
+.. .. .. .. .. .. .. .. .. 1270
+.. .. .. .. .. .. .. .. 1268
+.. .. .. .. .. .. .. .. .. 1266
+.. .. .. .. .. .. .. 1264
+.. .. .. .. .. .. .. .. 1262
+.. .. .. .. .. .. 1260
+.. .. .. .. .. .. .. .. .. .. 1258
+.. .. .. .. .. .. .. .. .. 1256
+.. .. .. .. .. .. .. .. .. .. 1254
+.. .. .. .. .. .. .. .. 1252
+.. .. .. .. .. .. .. .. .. 1250
+.. .. .. .. .. .. .. 1248
+.. .. .. .. .. .. .. .. .. 1246
+.. .. .. .. .. .. .. .. .. .. 1244
+.. .. .. .. .. .. .. .. 1242
+.. .. .. .. .. .. .. .. .. 1240
+.. .. .. .. .. .. .. .. .. .. 1238
+.. .. .. .. .. 1236
+.. .. .. .. .. .. .. .. .. 1234
+.. .. .. .. .. .. .. .. .. .. 1232
+.. .. .. .. .. .. .. .. 1230
+.. .. .. .. .. .. .. .. .. 1228
+.. .. .. .. .. .. .. 1226
+.. .. .. .. .. .. .. .. 1224
+.. .. .. .. .. .. .. .. .. 1222
+.. .. .. .. .. .. 1220
+.. .. .. .. .. .. .. .. .. 1218
+.. .. .. .. .. .. .. .. 1216
+.. .. .. .. .. .. .. .. .. 1214
+.. .. .. .. .. .. .. 1212
+.. .. .. .. .. .. .. .. .. 1210
+.. .. .. .. .. .. .. .. 1208
+.. .. .. 1206
+.. .. .. .. .. .. .. .. .. 1204
+.. .. .. .. .. .. .. .. 1202
+.. .. .. .. .. .. .. 1200
+.. .. .. .. .. .. .. .. 1198
+.. .. .. .. .. .. 1196
+.. .. .. .. .. .. .. .. 1194
+.. .. .. .. .. .. .. 1192
+.. .. .. .. .. .. .. .. .. 1190
+.. .. .. .. .. .. .. .. 1188
+.. .. .. .. .. 1186
+.. .. .. .. .. .. .. .. 1184
+.. .. .. .. .. .. .. 1182
+.. .. .. .. .. .. .. .. 1180
+.. .. .. .. .. .. 1178
+.. .. .. .. .. .. .. .. 1176
+.. .. .. .. .. .. .. .. .. 1174
+.. .. .. .. .. .. .. 1172
+.. .. .. .. .. .. .. .. .. 1170
+.. .. .. .. .. .. .. .. 1168
+.. .. .. .. 1166
+.. .. .. .. .. .. .. .. 1164
+.. .. .. .. .. .. .. 1162
+.. .. .. .. .. .. .. .. 1160
+.. .. .. .. .. .. 1158
+.. .. .. .. .. .. .. .. .. 1156
+.. .. .. .. .. .. .. .. 1154
+.. .. .. .. .. .. .. .. .. 1152
+.. .. .. .. .. .. .. 1150
+.. .. .. .. .. .. .. .. 1148
+.. .. .. .. .. 1146
+.. .. .. .. .. .. .. .. .. 1144
+.. .. .. .. .. .. .. .. 1142
+.. .. .. .. .. .. .. .. .. 1140
+.. .. .. .. .. .. .. 1138
+.. .. .. .. .. .. .. .. .. 1136
+.. .. .. .. .. .. .. .. 1134
+.. .. .. .. .. .. .. .. .. 1132
+.. .. .. .. .. .. 1130
+.. .. .. .. .. .. .. .. 1128
+.. .. .. .. .. .. .. 1126
+.. .. .. .. .. .. .. .. 1124
+.. .. .. .. .. .. .. .. .. 1122
+.. .. 1120
+.. .. .. .. .. .. .. .. .. 1118
+.. .. .. .. .. .. .. .. 1116
+.. .. .. .. .. .. .. .. .. .. 1114
+.. .. .. .. .. .. .. .. .. 1112
+.. .. .. .. .. .. .. 1110
+.. .. .. .. .. .. .. .. .. 1108
+.. .. .. .. .. .. .. .. 1106
+.. .. .. .. .. .. 1104
+.. .. .. .. .. .. .. .. .. 1102
+.. .. .. .. .. .. .. .. 1100
+.. .. .. .. .. .. .. 1098
+.. .. .. .. .. .. .. .. .. .. 1096
+.. .. .. .. .. .. .. .. .. 1094
+.. .. .. .. .. .. .. .. 1092
+.. .. .. .. .. .. .. .. .. 1090
+.. .. .. .. .. .. .. .. .. .. 1088
+.. .. .. .. .. 1086
+.. .. .. .. .. .. .. .. .. .. 1084
+.. .. .. .. .. .. .. .. .. 1082
+.. .. .. .. .. .. .. .. .. .. 1080
+.. .. .. .. .. .. .. .. 1078
+.. .. .. .. .. .. .. .. .. 1076
+.. .. .. .. .. .. .. .. .. .. 1074
+.. .. .. .. .. .. .. 1072
+.. .. .. .. .. .. .. .. .. 1070
+.. .. .. .. .. .. .. .. 1068
+.. .. .. .. .. .. .. .. .. 1066
+.. .. .. .. .. .. 1064
+.. .. .. .. .. .. .. .. .. 1062
+.. .. .. .. .. .. .. .. 1060
+.. .. .. .. .. .. .. 1058
+.. .. .. .. .. .. .. .. .. 1056
+.. .. .. .. .. .. .. .. .. .. 1054
+.. .. .. .. .. .. .. .. 1052
+.. .. .. .. .. .. .. .. .. .. 1050
+.. .. .. .. .. .. .. .. .. 1048
+.. .. .. .. 1046
+.. .. .. .. .. .. .. .. .. 1044
+.. .. .. .. .. .. .. .. 1042
+.. .. .. .. .. .. .. .. .. 1040
+.. .. .. .. .. .. .. 1038
+.. .. .. .. .. .. .. .. 1036
+.. .. .. .. .. .. .. .. .. 1034
+.. .. .. .. .. .. 1032
+.. .. .. .. .. .. .. .. 1030
+.. .. .. .. .. .. .. 1028
+.. .. .. .. .. .. .. .. .. 1026
+.. .. .. .. .. .. .. .. 1024
+.. .. .. .. .. .. .. .. .. 1022
+.. .. .. .. .. 1020
+.. .. .. .. .. .. .. 1018
+.. .. .. .. .. .. 1016
+.. .. .. .. .. .. .. .. 1014
+.. .. .. .. .. .. .. 1012
+.. .. .. .. .. .. .. .. 1010
+.. .. .. 1008
+.. .. .. .. .. .. .. .. .. 1006
+.. .. .. .. .. .. .. .. 1004
+.. .. .. .. .. .. .. .. .. 1002
+.. .. .. .. .. .. .. 1000
+.. .. .. .. .. .. .. .. .. 998
+.. .. .. .. .. .. .. .. 996
+.. .. .. .. .. .. 994
+.. .. .. .. .. .. .. .. 992
+.. .. .. .. .. .. .. 990
+.. .. .. .. .. .. .. .. .. 988
+.. .. .. .. .. .. .. .. 986
+.. .. .. .. .. .. .. .. .. 984
+.. .. .. .. .. 982
+.. .. .. .. .. .. .. .. 980
+.. .. .. .. .. .. .. 978
+.. .. .. .. .. .. 976
+.. .. .. .. .. .. .. .. 974
+.. .. .. .. .. .. .. 972
+.. .. .. .. .. .. .. .. 970
+.. .. .. .. .. .. .. .. .. 968
+.. .. .. .. 966
+.. .. .. .. .. .. .. .. .. 964
+.. .. .. .. .. .. .. .. 962
+.. .. .. .. .. .. .. .. .. 960
+.. .. .. .. .. .. .. 958
+.. .. .. .. .. .. .. .. .. 956
+.. .. .. .. .. .. .. .. 954
+.. .. .. .. .. .. .. .. .. 952
+.. .. .. .. .. .. .. .. .. .. 950
+.. .. .. .. .. .. 948
+.. .. .. .. .. .. .. .. .. 946
+.. .. .. .. .. .. .. .. 944
+.. .. .. .. .. .. .. .. .. 942
+.. .. .. .. .. .. .. 940
+.. .. .. .. .. .. .. .. .. .. 938
+.. .. .. .. .. .. .. .. .. 936
+.. .. .. .. .. .. .. .. .. .. 934
+.. .. .. .. .. .. .. .. 932
+.. .. .. .. .. .. .. .. .. 930
+.. .. .. .. .. .. .. .. .. .. 928
+.. .. .. .. .. 926
+.. .. .. .. .. .. .. .. .. .. 924
+.. .. .. .. .. .. .. .. .. 922
+.. .. .. .. .. .. .. .. 920
+.. .. .. .. .. .. .. .. .. .. 918
+.. .. .. .. .. .. .. .. .. 916
+.. .. .. .. .. .. .. .. .. .. 914
+.. .. .. .. .. .. .. 912
+.. .. .. .. .. .. .. .. .. 910
+.. .. .. .. .. .. .. .. 908
+.. .. .. .. .. .. .. .. .. .. 906
+.. .. .. .. .. .. .. .. .. 904
+.. .. .. .. .. .. .. .. .. .. 902
+.. .. .. .. .. .. 900
+.. .. .. .. .. .. .. .. .. 898
+.. .. .. .. .. .. .. .. 896
+.. .. .. .. .. .. .. .. .. 894
+.. .. .. .. .. .. .. 892
+.. .. .. .. .. .. .. .. .. .. 890
+.. .. .. .. .. .. .. .. .. 888
+.. .. .. .. .. .. .. .. .. .. 886
+.. .. .. .. .. .. .. .. 884
+.. .. .. .. .. .. .. .. .. .. 882
+.. .. .. .. .. .. .. .. .. 880
+878
+.. .. .. .. .. .. .. .. .. 876
+.. .. .. .. .. .. .. .. 874
+.. .. .. .. .. .. .. .. .. 872
+.. .. .. .. .. .. .. 870
+.. .. .. .. .. .. .. .. .. .. 868
+.. .. .. .. .. .. .. .. .. 866
+.. .. .. .. .. .. .. .. .. .. 864
+.. .. .. .. .. .. .. .. 862
+.. .. .. .. .. .. .. .. .. 860
+.. .. .. .. .. .. 858
+.. .. .. .. .. .. .. .. .. 856
+.. .. .. .. .. .. .. .. 854
+.. .. .. .. .. .. .. 852
+.. .. .. .. .. .. .. .. 850
+.. .. .. .. .. .. .. .. .. 848
+.. .. .. .. .. 846
+.. .. .. .. .. .. .. .. .. 844
+.. .. .. .. .. .. .. .. 842
+.. .. .. .. .. .. .. .. .. 840
+.. .. .. .. .. .. .. 838
+.. .. .. .. .. .. .. .. .. 836
+.. .. .. .. .. .. .. .. 834
+.. .. .. .. .. .. .. .. .. 832
+.. .. .. .. .. .. 830
+.. .. .. .. .. .. .. .. 828
+.. .. .. .. .. .. .. 826
+.. .. .. .. .. .. .. .. 824
+.. .. .. .. .. .. .. .. .. 822
+.. .. .. .. 820
+.. .. .. .. .. .. .. .. .. .. 818
+.. .. .. .. .. .. .. .. .. 816
+.. .. .. .. .. .. .. .. 814
+.. .. .. .. .. .. .. .. .. .. 812
+.. .. .. .. .. .. .. .. .. 810
+.. .. .. .. .. .. .. 808
+.. .. .. .. .. .. .. .. .. 806
+.. .. .. .. .. .. .. .. 804
+.. .. .. .. .. .. 802
+.. .. .. .. .. .. .. .. .. .. 800
+.. .. .. .. .. .. .. .. .. 798
+.. .. .. .. .. .. .. .. .. .. 796
+.. .. .. .. .. .. .. .. 794
+.. .. .. .. .. .. .. .. .. .. 792
+.. .. .. .. .. .. .. .. .. 790
+.. .. .. .. .. .. .. .. .. .. 788
+.. .. .. .. .. .. .. 786
+.. .. .. .. .. .. .. .. .. 784
+.. .. .. .. .. .. .. .. .. .. 782
+.. .. .. .. .. .. .. .. 780
+.. .. .. .. .. .. .. .. .. 778
+.. .. .. .. .. .. .. .. .. .. 776
+.. .. .. .. .. 774
+.. .. .. .. .. .. .. .. 772
+.. .. .. .. .. .. .. 770
+.. .. .. .. .. .. .. .. .. 768
+.. .. .. .. .. .. .. .. 766
+.. .. .. .. .. .. 764
+.. .. .. .. .. .. .. .. .. .. 762
+.. .. .. .. .. .. .. .. .. 760
+.. .. .. .. .. .. .. .. 758
+.. .. .. .. .. .. .. .. .. .. 756
+.. .. .. .. .. .. .. .. .. 754
+.. .. .. .. .. .. .. .. .. .. 752
+.. .. .. .. .. .. .. 750
+.. .. .. .. .. .. .. .. .. 748
+.. .. .. .. .. .. .. .. 746
+.. .. .. .. .. .. .. .. .. 744
+.. .. .. 742
+.. .. .. .. .. .. .. .. 740
+.. .. .. .. .. .. .. 738
+.. .. .. .. .. .. .. .. .. 736
+.. .. .. .. .. .. .. .. 734
+.. .. .. .. .. .. 732
+.. .. .. .. .. .. .. .. .. 730
+.. .. .. .. .. .. .. .. 728
+.. .. .. .. .. .. .. .. .. 726
+.. .. .. .. .. .. .. 724
+.. .. .. .. .. .. .. .. .. 722
+.. .. .. .. .. .. .. .. 720
+.. .. .. .. .. .. .. .. .. 718
+.. .. .. .. .. 716
+.. .. .. .. .. .. .. .. .. 714
+.. .. .. .. .. .. .. .. 712
+.. .. .. .. .. .. .. .. .. 710
+.. .. .. .. .. .. .. 708
+.. .. .. .. .. .. .. .. 706
+.. .. .. .. .. .. .. .. .. 704
+.. .. .. .. .. .. 702
+.. .. .. .. .. .. .. .. 700
+.. .. .. .. .. .. .. .. .. 698
+.. .. .. .. .. .. .. 696
+.. .. .. .. .. .. .. .. .. 694
+.. .. .. .. .. .. .. .. 692
+.. .. .. .. .. .. .. .. .. 690
+.. .. .. .. 688
+.. .. .. .. .. .. .. .. .. 686
+.. .. .. .. .. .. .. .. 684
+.. .. .. .. .. .. .. .. .. 682
+.. .. .. .. .. .. .. 680
+.. .. .. .. .. .. .. .. 678
+.. .. .. .. .. .. 676
+.. .. .. .. .. .. .. .. .. 674
+.. .. .. .. .. .. .. .. 672
+.. .. .. .. .. .. .. .. .. 670
+.. .. .. .. .. .. .. 668
+.. .. .. .. .. .. .. .. 666
+.. .. .. .. .. .. .. .. .. 664
+.. .. .. .. .. 662
+.. .. .. .. .. .. .. .. .. .. 660
+.. .. .. .. .. .. .. .. .. 658
+.. .. .. .. .. .. .. .. 656
+.. .. .. .. .. .. .. .. .. 654
+.. .. .. .. .. .. .. 652
+.. .. .. .. .. .. .. .. .. 650
+.. .. .. .. .. .. .. .. 648
+.. .. .. .. .. .. 646
+.. .. .. .. .. .. .. .. .. 644
+.. .. .. .. .. .. .. .. 642
+.. .. .. .. .. .. .. .. .. 640
+.. .. .. .. .. .. .. 638
+.. .. .. .. .. .. .. .. .. 636
+.. .. .. .. .. .. .. .. 634
+.. .. .. .. .. .. .. .. .. .. 632
+.. .. .. .. .. .. .. .. .. 630
+.. .. 628
+.. .. .. .. .. .. .. .. .. .. 626
+.. .. .. .. .. .. .. .. .. 624
+.. .. .. .. .. .. .. .. 622
+.. .. .. .. .. .. .. .. .. 620
+.. .. .. .. .. .. .. .. .. .. 618
+.. .. .. .. .. .. .. 616
+.. .. .. .. .. .. .. .. .. .. 614
+.. .. .. .. .. .. .. .. .. 612
+.. .. .. .. .. .. .. .. 610
+.. .. .. .. .. .. .. .. .. .. 608
+.. .. .. .. .. .. .. .. .. 606
+.. .. .. .. .. .. .. .. .. .. 604
+.. .. .. .. .. .. .. .. .. .. .. 602
+.. .. .. .. .. .. 600
+.. .. .. .. .. .. .. .. .. 598
+.. .. .. .. .. .. .. .. 596
+.. .. .. .. .. .. .. .. .. 594
+.. .. .. .. .. .. .. 592
+.. .. .. .. .. .. .. .. .. .. 590
+.. .. .. .. .. .. .. .. .. 588
+.. .. .. .. .. .. .. .. .. .. 586
+.. .. .. .. .. .. .. .. 584
+.. .. .. .. .. .. .. .. .. 582
+.. .. .. .. .. .. .. .. .. .. 580
+.. .. .. .. .. 578
+.. .. .. .. .. .. .. .. 576
+.. .. .. .. .. .. .. .. .. 574
+.. .. .. .. .. .. .. 572
+.. .. .. .. .. .. .. .. 570
+.. .. .. .. .. .. .. .. .. 568
+.. .. .. .. .. .. 566
+.. .. .. .. .. .. .. .. .. 564
+.. .. .. .. .. .. .. .. .. .. 562
+.. .. .. .. .. .. .. .. 560
+.. .. .. .. .. .. .. .. .. 558
+.. .. .. .. .. .. .. .. .. .. 556
+.. .. .. .. .. .. .. 554
+.. .. .. .. .. .. .. .. 552
+.. .. .. .. .. .. .. .. .. 550
+.. .. .. .. 548
+.. .. .. .. .. .. .. .. .. .. 546
+.. .. .. .. .. .. .. .. .. 544
+.. .. .. .. .. .. .. .. 542
+.. .. .. .. .. .. .. .. .. .. 540
+.. .. .. .. .. .. .. .. .. 538
+.. .. .. .. .. .. .. .. .. .. 536
+.. .. .. .. .. .. .. 534
+.. .. .. .. .. .. .. .. .. 532
+.. .. .. .. .. .. .. .. 530
+.. .. .. .. .. .. 528
+.. .. .. .. .. .. .. .. .. .. 526
+.. .. .. .. .. .. .. .. .. 524
+.. .. .. .. .. .. .. .. 522
+.. .. .. .. .. .. .. .. .. .. 520
+.. .. .. .. .. .. .. .. .. 518
+.. .. .. .. .. .. .. 516
+.. .. .. .. .. .. .. .. .. 514
+.. .. .. .. .. .. .. .. .. .. 512
+.. .. .. .. .. .. .. .. 510
+.. .. .. .. .. .. .. .. .. 508
+.. .. .. .. .. .. .. .. .. .. 506
+.. .. .. .. .. 504
+.. .. .. .. .. .. .. .. 502
+.. .. .. .. .. .. .. 500
+.. .. .. .. .. .. .. .. .. 498
+.. .. .. .. .. .. .. .. 496
+.. .. .. .. .. .. .. .. .. 494
+.. .. .. .. .. .. 492
+.. .. .. .. .. .. .. .. .. 490
+.. .. .. .. .. .. .. .. 488
+.. .. .. .. .. .. .. .. .. 486
+.. .. .. .. .. .. .. 484
+.. .. .. .. .. .. .. .. .. .. 482
+.. .. .. .. .. .. .. .. .. 480
+.. .. .. .. .. .. .. .. 478
+.. .. .. .. .. .. .. .. .. .. 476
+.. .. .. .. .. .. .. .. .. 474
+.. .. .. .. .. .. .. .. .. .. 472
+.. .. .. 470
+.. .. .. .. .. .. .. .. 468
+.. .. .. .. .. .. .. 466
+.. .. .. .. .. .. .. .. .. 464
+.. .. .. .. .. .. .. .. 462
+.. .. .. .. .. .. 460
+.. .. .. .. .. .. .. .. 458
+.. .. .. .. .. .. .. 456
+.. .. .. .. .. .. .. .. 454
+.. .. .. .. .. .. .. .. .. 452
+.. .. .. .. .. 450
+.. .. .. .. .. .. .. .. .. 448
+.. .. .. .. .. .. .. .. 446
+.. .. .. .. .. .. .. 444
+.. .. .. .. .. .. .. .. 442
+.. .. .. .. .. .. .. .. .. 440
+.. .. .. .. .. .. 438
+.. .. .. .. .. .. .. .. .. 436
+.. .. .. .. .. .. .. .. 434
+.. .. .. .. .. .. .. .. .. 432
+.. .. .. .. .. .. .. 430
+.. .. .. .. .. .. .. .. 428
+.. .. .. .. 426
+.. .. .. .. .. .. .. .. .. 424
+.. .. .. .. .. .. .. .. 422
+.. .. .. .. .. .. .. .. .. .. 420
+.. .. .. .. .. .. .. .. .. 418
+.. .. .. .. .. .. .. 416
+.. .. .. .. .. .. .. .. .. 414
+.. .. .. .. .. .. .. .. 412
+.. .. .. .. .. .. .. .. .. .. 410
+.. .. .. .. .. .. .. .. .. 408
+.. .. .. .. .. .. 406
+.. .. .. .. .. .. .. .. .. 404
+.. .. .. .. .. .. .. .. 402
+.. .. .. .. .. .. .. 400
+.. .. .. .. .. .. .. .. .. 398
+.. .. .. .. .. .. .. .. 396
+.. .. .. .. .. .. .. .. .. 394
+.. .. .. .. .. 392
+.. .. .. .. .. .. .. .. .. 390
+.. .. .. .. .. .. .. .. 388
+.. .. .. .. .. .. .. 386
+.. .. .. .. .. .. .. .. .. 384
+.. .. .. .. .. .. .. .. 382
+.. .. .. .. .. .. 380
+.. .. .. .. .. .. .. .. 378
+.. .. .. .. .. .. .. .. .. 376
+.. .. .. .. .. .. .. 374
+.. .. .. .. .. .. .. .. .. 372
+.. .. .. .. .. .. .. .. 370
+.. .. .. .. .. .. .. .. .. 368
+.. 366
+.. .. .. .. .. .. .. 364
+.. .. .. .. .. .. .. .. 362
+.. .. .. .. .. .. 360
+.. .. .. .. .. .. .. .. 358
+.. .. .. .. .. .. .. 356
+.. .. .. .. .. .. .. .. .. 354
+.. .. .. .. .. .. .. .. 352
+.. .. .. .. .. 350
+.. .. .. .. .. .. .. .. 348
+.. .. .. .. .. .. .. 346
+.. .. .. .. .. .. .. .. 344
+.. .. .. .. .. .. 342
+.. .. .. .. .. .. .. 340
+.. .. .. .. 338
+.. .. .. .. .. .. .. 336
+.. .. .. .. .. .. .. .. 334
+.. .. .. .. .. .. 332
+.. .. .. .. .. .. .. .. .. 330
+.. .. .. .. .. .. .. .. 328
+.. .. .. .. .. .. .. .. .. 326
+.. .. .. .. .. .. .. 324
+.. .. .. .. .. .. .. .. 322
+.. .. .. .. .. .. .. .. .. 320
+.. .. .. .. .. 318
+.. .. .. .. .. .. .. .. .. 316
+.. .. .. .. .. .. .. .. 314
+.. .. .. .. .. .. .. 312
+.. .. .. .. .. .. .. .. .. 310
+.. .. .. .. .. .. .. .. 308
+.. .. .. .. .. .. .. .. .. 306
+.. .. .. .. .. .. 304
+.. .. .. .. .. .. .. .. .. 302
+.. .. .. .. .. .. .. .. 300
+.. .. .. .. .. .. .. .. .. 298
+.. .. .. .. .. .. .. 296
+.. .. .. .. .. .. .. .. .. 294
+.. .. .. .. .. .. .. .. 292
+.. .. .. 290
+.. .. .. .. .. .. .. .. 288
+.. .. .. .. .. .. .. .. .. 286
+.. .. .. .. .. .. .. 284
+.. .. .. .. .. .. .. .. .. 282
+.. .. .. .. .. .. .. .. 280
+.. .. .. .. .. .. .. .. .. 278
+.. .. .. .. .. .. 276
+.. .. .. .. .. .. .. .. 274
+.. .. .. .. .. .. .. 272
+.. .. .. .. .. .. .. .. 270
+.. .. .. .. .. 268
+.. .. .. .. .. .. .. .. 266
+.. .. .. .. .. .. .. 264
+.. .. .. .. .. .. .. .. 262
+.. .. .. .. .. .. .. .. .. 260
+.. .. .. .. .. .. 258
+.. .. .. .. .. .. .. .. 256
+.. .. .. .. .. .. .. 254
+.. .. .. .. 252
+.. .. .. .. .. .. .. .. .. .. 250
+.. .. .. .. .. .. .. .. .. 248
+.. .. .. .. .. .. .. .. 246
+.. .. .. .. .. .. .. .. .. 244
+.. .. .. .. .. .. .. 242
+.. .. .. .. .. .. .. .. .. 240
+.. .. .. .. .. .. .. .. 238
+.. .. .. .. .. .. .. .. .. 236
+.. .. .. .. .. .. 234
+.. .. .. .. .. .. .. .. .. .. 232
+.. .. .. .. .. .. .. .. .. 230
+.. .. .. .. .. .. .. .. .. .. 228
+.. .. .. .. .. .. .. .. 226
+.. .. .. .. .. .. .. .. .. 224
+.. .. .. .. .. .. .. .. .. .. 222
+.. .. .. .. .. .. .. 220
+.. .. .. .. .. .. .. .. .. 218
+.. .. .. .. .. .. .. .. 216
+.. .. .. .. .. 214
+.. .. .. .. .. .. .. .. .. .. 212
+.. .. .. .. .. .. .. .. .. 210
+.. .. .. .. .. .. .. .. .. .. 208
+.. .. .. .. .. .. .. .. 206
+.. .. .. .. .. .. .. .. .. 204
+.. .. .. .. .. .. .. 202
+.. .. .. .. .. .. .. .. .. 200
+.. .. .. .. .. .. .. .. .. .. 198
+.. .. .. .. .. .. .. .. 196
+.. .. .. .. .. .. .. .. .. 194
+.. .. .. .. .. .. 192
+.. .. .. .. .. .. .. .. .. 190
+.. .. .. .. .. .. .. .. .. .. 188
+.. .. .. .. .. .. .. .. 186
+.. .. .. .. .. .. .. .. .. 184
+.. .. .. .. .. .. .. 182
+.. .. .. .. .. .. .. .. .. .. 180
+.. .. .. .. .. .. .. .. .. 178
+.. .. .. .. .. .. .. .. 176
+.. .. .. .. .. .. .. .. .. 174
+.. .. 172
+.. .. .. .. .. .. .. .. 170
+.. .. .. .. .. .. .. 168
+.. .. .. .. .. .. .. .. 166
+.. .. .. .. .. .. .. .. .. 164
+.. .. .. .. .. .. 162
+.. .. .. .. .. .. .. .. 160
+.. .. .. .. .. .. .. 158
+.. .. .. .. .. .. .. .. 156
+.. .. .. .. .. 154
+.. .. .. .. .. .. .. .. .. 152
+.. .. .. .. .. .. .. .. 150
+.. .. .. .. .. .. .. 148
+.. .. .. .. .. .. .. .. .. .. 146
+.. .. .. .. .. .. .. .. .. 144
+.. .. .. .. .. .. .. .. .. .. 142
+.. .. .. .. .. .. .. .. 140
+.. .. .. .. .. .. .. .. .. 138
+.. .. .. .. .. .. 136
+.. .. .. .. .. .. .. .. .. 134
+.. .. .. .. .. .. .. .. 132
+.. .. .. .. .. .. .. .. .. 130
+.. .. .. .. .. .. .. 128
+.. .. .. .. .. .. .. .. 126
+.. .. .. .. 124
+.. .. .. .. .. .. .. .. 122
+.. .. .. .. .. .. .. 120
+.. .. .. .. .. .. .. .. 118
+.. .. .. .. .. .. 116
+.. .. .. .. .. .. .. .. .. 114
+.. .. .. .. .. .. .. .. 112
+.. .. .. .. .. .. .. .. .. 110
+.. .. .. .. .. .. .. 108
+.. .. .. .. .. .. .. .. 106
+.. .. .. .. .. .. .. .. .. 104
+.. .. .. .. .. 102
+.. .. .. .. .. .. .. .. 100
+.. .. .. .. .. .. .. .. .. 98
+.. .. .. .. .. .. .. 96
+.. .. .. .. .. .. .. .. 94
+.. .. .. .. .. .. 92
+.. .. .. .. .. .. .. .. .. 90
+.. .. .. .. .. .. .. .. 88
+.. .. .. .. .. .. .. .. .. 86
+.. .. .. .. .. .. .. 84
+.. .. .. .. .. .. .. .. .. 82
+.. .. .. .. .. .. .. .. 80
+.. .. .. .. .. .. .. .. .. 78
+.. .. .. 76
+.. .. .. .. .. .. .. .. 74
+.. .. .. .. .. .. .. 72
+.. .. .. .. .. .. .. .. .. 70
+.. .. .. .. .. .. .. .. 68
+.. .. .. .. .. .. 66
+.. .. .. .. .. .. .. .. .. 64
+.. .. .. .. .. .. .. .. 62
+.. .. .. .. .. .. .. 60
+.. .. .. .. .. .. .. .. 58
+.. .. .. .. .. 56
+.. .. .. .. .. .. .. .. 54
+.. .. .. .. .. .. .. 52
+.. .. .. .. .. .. .. .. 50
+.. .. .. .. .. .. 48
+.. .. .. .. .. .. .. .. 46
+.. .. .. .. .. .. .. 44
+.. .. .. .. .. .. .. .. 42
+.. .. .. .. 40
+.. .. .. .. .. .. .. .. .. 38
+.. .. .. .. .. .. .. .. 36
+.. .. .. .. .. .. .. 34
+.. .. .. .. .. .. .. .. 32
+.. .. .. .. .. .. 30
+.. .. .. .. .. .. .. .. 28
+.. .. .. .. .. .. .. .. .. 26
+.. .. .. .. .. .. .. 24
+.. .. .. .. .. .. .. .. .. 22
+.. .. .. .. .. .. .. .. 20
+.. .. .. .. .. .. .. .. .. 18
+.. .. .. .. .. 16
+.. .. .. .. .. .. .. 14
+.. .. .. .. .. .. .. .. 12
+.. .. .. .. .. .. 10
+.. .. .. .. .. .. .. .. 8
+.. .. .. .. .. .. .. .. .. 6
+.. .. .. .. .. .. .. 4
+.. .. .. .. .. .. .. .. 0
+-- end foo ----------------
|