diff options
author | Mark Loeser <halcy0n@gentoo.org> | 2006-03-11 05:50:14 +0000 |
---|---|---|
committer | Mark Loeser <halcy0n@gentoo.org> | 2006-03-11 05:50:14 +0000 |
commit | 8c918766f18bafcd2bb3471713223cd6a5c808fb (patch) | |
tree | cffb29c0ed8b08e6b3a5495b2c7d8bfe27c34774 /4.0.3 | |
parent | Clean up the mess I made :) (diff) | |
download | gcc-patches-8c918766f18bafcd2bb3471713223cd6a5c808fb.tar.gz gcc-patches-8c918766f18bafcd2bb3471713223cd6a5c808fb.tar.bz2 gcc-patches-8c918766f18bafcd2bb3471713223cd6a5c808fb.zip |
Add the 4.0.3 patchset, for real this time
Diffstat (limited to '4.0.3')
49 files changed, 54469 insertions, 0 deletions
diff --git a/4.0.3/gentoo/00_all_gcc-trampolinewarn.patch b/4.0.3/gentoo/00_all_gcc-trampolinewarn.patch new file mode 100644 index 0000000..96db820 --- /dev/null +++ b/4.0.3/gentoo/00_all_gcc-trampolinewarn.patch @@ -0,0 +1,68 @@ + This trivial patch causes gcc to emit a warning whenever + it generates a trampoline. These are otherwise hard to + locate. + Kevin F. Quinn <kevquinn@gentoo.org> 21 Dec 2005 + +--- gcc/gcc/c.opt ++++ gcc/gcc/c.opt +@@ -406,6 +406,10 @@ + C ObjC Var(warn_traditional) + Warn about features not present in traditional C + ++Wtrampolines ++C ObjC C++ ObjC++ ++Warn whenever the compiler generates a trampoline ++ + Wtrigraphs + C ObjC C++ ObjC++ + Warn if trigraphs are encountered that might affect the meaning of the program +--- gcc/gcc/c-opts.c ++++ gcc/gcc/c-opts.c +@@ -476,6 +476,10 @@ + cpp_opts->warn_traditional = value; + break; + ++ case OPT_Wtrampolines: ++ warn_trampolines = value; ++ break; ++ + case OPT_Wtrigraphs: + cpp_opts->warn_trigraphs = value; + break; +--- gcc/gcc/flags.h ++++ gcc/gcc/flags.h +@@ -118,6 +118,10 @@ + + extern int warn_strict_aliasing; + ++/* Warn whenever a trampoline is generated. */ ++ ++extern bool warn_trampolines; ++ + /* Temporarily suppress certain warnings. + This is set while reading code from a system header file. */ + +--- gcc/gcc/varasm.c ++++ gcc/gcc/varasm.c +@@ -5428,6 +5428,9 @@ + + int trampolines_created; + ++/* Warn when a trampoline is generated. */ ++bool warn_trampolines = 1; ++ + void + file_end_indicate_exec_stack (void) + { +--- gcc/gcc/builtins.c ++++ gcc/gcc/builtins.c +@@ -5014,6 +5014,9 @@ + #endif + trampolines_created = 1; + INITIALIZE_TRAMPOLINE (r_tramp, r_func, r_chain); ++ ++ if (warn_trampolines) ++ warning ("generating trampoline in object (requires executable stack)"); + + return const0_rtx; + } diff --git a/4.0.3/gentoo/00_all_gcc_unlink_if_ordinary.patch b/4.0.3/gentoo/00_all_gcc_unlink_if_ordinary.patch new file mode 100644 index 0000000..4bd25f2 --- /dev/null +++ b/4.0.3/gentoo/00_all_gcc_unlink_if_ordinary.patch @@ -0,0 +1,62 @@ +Following the logic of the binutils change upstream (the addition of the +new unlink_if_ordinary() function), we update collect2 so that it will +only unlink files if they are 'ordinary' (in other words, a regular file +or a symlink). + +This allows us to do fun things like `gcc test.c -o /dev/null` and not +have to worry about the toolchain doing unlink(/dev/null) on us (cause +that sucks huge wang). For example, this is common on a parisc/mips +machine: +# gcc test.c -o /dev/null +/usr/hppa2.0-unknown-linux-gnu/bin/ld: final link failed: Nonrepresentable section on output +collect2: ld returned 1 exit status +# ls /dev/null +ls: /dev/null: No such file or directory + +http://bugs.gentoo.org/show_bug.cgi?id=79836 + +--- gcc/gcc/collect2.c ++++ gcc/gcc/collect2.c +@@ -34,6 +34,12 @@ + #if ! defined( SIGCHLD ) && defined( SIGCLD ) + # define SIGCHLD SIGCLD + #endif ++#ifdef HAVE_UNISTD_H ++#include <unistd.h> ++#endif ++#if HAVE_SYS_STAT_H ++#include <sys/stat.h> ++#endif + + #ifdef vfork /* Autoconf may define this to fork for us. */ + # define VFORK_STRING "fork" +@@ -1574,14 +1603,24 @@ + do_wait (prog); + } + +-/* Unlink a file unless we are debugging. */ +- ++/* Unlink a file unless we are debugging or file is not normal. */ ++#ifndef S_ISLNK ++#ifdef S_IFLNK ++#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) ++#else ++#define S_ISLNK(m) 0 ++#define lstat stat ++#endif ++#endif + static void + maybe_unlink (const char *file) + { +- if (!debug) +- unlink (file); +- else ++ if (!debug) { ++ struct stat st; ++ if (lstat (file, &st) == 0 ++ && (S_ISREG (st.st_mode) || S_ISLNK (st.st_mode))) ++ unlink (file); ++ } else + notice ("[Leaving %s]\n", file); + } + diff --git a/4.0.3/gentoo/01_all_gcc4-ice-hack.patch b/4.0.3/gentoo/01_all_gcc4-ice-hack.patch new file mode 100644 index 0000000..016d73d --- /dev/null +++ b/4.0.3/gentoo/01_all_gcc4-ice-hack.patch @@ -0,0 +1,318 @@ +2004-01-23 Jakub Jelinek <jakub@redhat.com> + + * system.h (ICE_EXIT_CODE): Define. + * gcc.c (execute): Don't free first string early, but at the end + of the function. Call retry_ice if compiler exited with + ICE_EXIT_CODE. + (retry_ice): New function. + * diagnostic.c (diagnostic_count_diagnostic, + diagnostic_action_after_output, error_recursion): Exit with + ICE_EXIT_CODE instead of FATAL_EXIT_CODE. + +--- gcc/system.h.jj 2004-01-19 17:29:30.000000000 +0100 ++++ gcc/system.h 2004-01-21 11:53:41.000000000 +0100 +@@ -153,6 +153,10 @@ extern int errno; + # endif + #endif + ++#ifndef ICE_EXIT_CODE ++# define ICE_EXIT_CODE 27 ++#endif ++ + #ifdef HAVE_UNISTD_H + # include <unistd.h> + #endif +--- gcc/gcc.c.jj 2004-01-21 11:45:20.000000000 +0100 ++++ gcc/gcc.c 2004-01-21 11:56:46.000000000 +0100 +@@ -352,6 +352,9 @@ static void init_gcc_specs (struct obsta + #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + static const char *convert_filename (const char *, int, int); + #endif ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++static void retry_ice (const char *prog, const char **argv); ++#endif + + static const char *if_exists_spec_function (int, const char **); + static const char *if_exists_else_spec_function (int, const char **); +@@ -2753,7 +2756,7 @@ execute (void) + if (commands[i].pid == -1) + pfatal_pexecute (errmsg_fmt, errmsg_arg); + +- if (string != commands[i].prog) ++ if (i && string != commands[i].prog) + free ((void *) string); + } + +@@ -2831,6 +2834,17 @@ See %s for instructions.", + else if (WIFEXITED (status) + && WEXITSTATUS (status) >= MIN_FATAL_STATUS) + { ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++ /* For ICEs in cc1, cc1obj, cc1plus see if it is ++ reproducible or not. */ ++ char *p; ++ if (WEXITSTATUS (status) == ICE_EXIT_CODE ++ && j == 0 ++ && (p = strrchr (commands[j].argv[0], DIR_SEPARATOR)) ++ && ! strncmp (p + 1, "cc1", 3)) ++ retry_ice (commands[j].prog, commands[j].argv); ++#endif ++ + if (WEXITSTATUS (status) > greatest_status) + greatest_status = WEXITSTATUS (status); + ret_code = -1; +@@ -2842,6 +2856,10 @@ See %s for instructions.", + break; + } + } ++ ++ if (commands[0].argv[0] != commands[0].prog) ++ free ((PTR) commands[0].argv[0]); ++ + return ret_code; + } + } +@@ -5809,6 +5827,224 @@ give_switch (int switchnum, int omit_fir + switches[switchnum].validated = 1; + } + ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++#define RETRY_ICE_ATTEMPTS 2 ++ ++static void ++retry_ice (const char *prog, const char **argv) ++{ ++ int nargs, out_arg = -1, quiet = 0, attempt; ++ int pid, retries, sleep_interval; ++ const char **new_argv; ++ char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2]; ++ ++ if (input_filename == NULL || ! strcmp (input_filename, "-")) ++ return; ++ ++ for (nargs = 0; argv[nargs] != NULL; ++nargs) ++ /* Only retry compiler ICEs, not preprocessor ones. */ ++ if (! strcmp (argv[nargs], "-E")) ++ return; ++ else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o') ++ { ++ if (out_arg == -1) ++ out_arg = nargs; ++ else ++ return; ++ } ++ /* If the compiler is going to output any time information, ++ it might varry between invocations. */ ++ else if (! strcmp (argv[nargs], "-quiet")) ++ quiet = 1; ++ else if (! strcmp (argv[nargs], "-ftime-report")) ++ return; ++ ++ if (out_arg == -1 || !quiet) ++ return; ++ ++ memset (temp_filenames, '\0', sizeof (temp_filenames)); ++ new_argv = alloca ((nargs + 3) * sizeof (const char *)); ++ memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *)); ++ new_argv[nargs++] = "-frandom-seed=0"; ++ new_argv[nargs] = NULL; ++ if (new_argv[out_arg][2] == '\0') ++ new_argv[out_arg + 1] = "-"; ++ else ++ new_argv[out_arg] = "-o-"; ++ ++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt) ++ { ++ int fd; ++ int status; ++ ++ temp_filenames[attempt * 2] = make_temp_file (".out"); ++ temp_filenames[attempt * 2 + 1] = make_temp_file (".err"); ++ ++ if (attempt == RETRY_ICE_ATTEMPTS) ++ { ++ int i; ++ int fd1, fd2; ++ struct stat st1, st2; ++ size_t n, len; ++ char *buf; ++ ++ buf = xmalloc (8192); ++ ++ for (i = 0; i < 2; ++i) ++ { ++ fd1 = open (temp_filenames[i], O_RDONLY); ++ fd2 = open (temp_filenames[2 + i], O_RDONLY); ++ ++ if (fd1 < 0 || fd2 < 0) ++ { ++ i = -1; ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0) ++ { ++ i = -1; ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ if (st1.st_size != st2.st_size) ++ { ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ len = 0; ++ for (n = st1.st_size; n; n -= len) ++ { ++ len = n; ++ if (len > 4096) ++ len = 4096; ++ ++ if (read (fd1, buf, len) != (int) len ++ || read (fd2, buf + 4096, len) != (int) len) ++ { ++ i = -1; ++ break; ++ } ++ ++ if (memcmp (buf, buf + 4096, len) != 0) ++ break; ++ } ++ ++ close (fd1); ++ close (fd2); ++ ++ if (n) ++ break; ++ } ++ ++ free (buf); ++ if (i == -1) ++ break; ++ ++ if (i != 2) ++ { ++ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n"); ++ break; ++ } ++ ++ fd = open (temp_filenames[attempt * 2], O_RDWR); ++ if (fd < 0) ++ break; ++ write (fd, "//", 2); ++ for (i = 0; i < nargs; i++) ++ { ++ write (fd, " ", 1); ++ write (fd, new_argv[i], strlen (new_argv[i])); ++ } ++ write (fd, "\n", 1); ++ new_argv[nargs] = "-E"; ++ new_argv[nargs + 1] = NULL; ++ } ++ ++ /* Fork a subprocess; wait and retry if it fails. */ ++ sleep_interval = 1; ++ pid = -1; ++ for (retries = 0; retries < 4; retries++) ++ { ++ pid = fork (); ++ if (pid >= 0) ++ break; ++ sleep (sleep_interval); ++ sleep_interval *= 2; ++ } ++ ++ if (pid < 0) ++ break; ++ else if (pid == 0) ++ { ++ if (attempt != RETRY_ICE_ATTEMPTS) ++ fd = open (temp_filenames[attempt * 2], O_RDWR); ++ if (fd < 0) ++ exit (-1); ++ if (fd != 1) ++ { ++ close (1); ++ dup (fd); ++ close (fd); ++ } ++ ++ fd = open (temp_filenames[attempt * 2 + 1], O_RDWR); ++ if (fd < 0) ++ exit (-1); ++ if (fd != 2) ++ { ++ close (2); ++ dup (fd); ++ close (fd); ++ } ++ ++ if (prog == new_argv[0]) ++ execvp (prog, (char *const *) new_argv); ++ else ++ execv (new_argv[0], (char *const *) new_argv); ++ exit (-1); ++ } ++ ++ if (waitpid (pid, &status, 0) < 0) ++ break; ++ ++ if (attempt < RETRY_ICE_ATTEMPTS ++ && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE)) ++ { ++ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n"); ++ break; ++ } ++ else if (attempt == RETRY_ICE_ATTEMPTS) ++ { ++ close (fd); ++ if (WIFEXITED (status) ++ && WEXITSTATUS (status) == SUCCESS_EXIT_CODE) ++ { ++ notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n", ++ temp_filenames[attempt * 2]); ++ /* Make sure it is not deleted. */ ++ free (temp_filenames[attempt * 2]); ++ temp_filenames[attempt * 2] = NULL; ++ break; ++ } ++ } ++ } ++ ++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++) ++ if (temp_filenames[attempt]) ++ { ++ unlink (temp_filenames[attempt]); ++ free (temp_filenames[attempt]); ++ } ++} ++#endif ++ + /* Search for a file named NAME trying various prefixes including the + user's -B prefix and some standard ones. + Return the absolute file name found. If nothing is found, return NAME. */ +--- gcc/diagnostic.c.jj 2003-10-01 12:09:21.000000000 +0200 ++++ gcc/diagnostic.c 2004-01-21 11:54:47.000000000 +0100 +@@ -237,14 +237,14 @@ diagnostic_action_after_output (diagnost + fnotice (stderr, "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n", bug_report_url); +- exit (FATAL_EXIT_CODE); ++ exit (ICE_EXIT_CODE); + + case DK_FATAL: + if (context->abort_on_error) + real_abort (); + + fnotice (stderr, "compilation terminated.\n"); +- exit (FATAL_EXIT_CODE); ++ exit (ICE_EXIT_CODE); + + default: + gcc_unreachable (); diff --git a/4.0.3/gentoo/02_all_gcc4-ppc64-m32-m64-multilib-only.patch b/4.0.3/gentoo/02_all_gcc4-ppc64-m32-m64-multilib-only.patch new file mode 100644 index 0000000..00dbeac --- /dev/null +++ b/4.0.3/gentoo/02_all_gcc4-ppc64-m32-m64-multilib-only.patch @@ -0,0 +1,22 @@ +--- gcc/config/rs6000/t-linux64 2003-06-03 05:11:45.000000000 -0400 ++++ gcc/config/rs6000/t-linux64 2003-06-11 17:07:16.000000000 -0400 +@@ -4,13 +4,13 @@ LIB2FUNCS_EXTRA = tramp.S $(srcdir)/conf + # Modify the shared lib version file + SHLIB_MKMAP_OPTS = -v dotsyms=1 + +-MULTILIB_OPTIONS = m64/m32 msoft-float +-MULTILIB_DIRNAMES = 64 32 nof ++MULTILIB_OPTIONS = m64/m32 ++MULTILIB_DIRNAMES = 64 32 + MULTILIB_EXTRA_OPTS = fPIC mstrict-align +-MULTILIB_EXCEPTIONS = m64/msoft-float +-MULTILIB_EXCLUSIONS = m64/!m32/msoft-float +-MULTILIB_OSDIRNAMES = ../lib64 ../lib nof +-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) ++MULTILIB_EXCEPTIONS = ++MULTILIB_EXCLUSIONS = ++MULTILIB_OSDIRNAMES = ../lib64 ../lib ++MULTILIB_MATCHES = + + TARGET_LIBGCC2_CFLAGS = -mno-minimal-toc -fPIC + diff --git a/4.0.3/gentoo/03_all_gcc4-java-nomulti.patch b/4.0.3/gentoo/03_all_gcc4-java-nomulti.patch new file mode 100644 index 0000000..3a6554d --- /dev/null +++ b/4.0.3/gentoo/03_all_gcc4-java-nomulti.patch @@ -0,0 +1,25 @@ +--- libjava/configure.ac.jj 2004-08-16 21:13:29.000000000 +0200 ++++ libjava/configure.ac 2004-08-21 11:44:59.020755542 +0200 +@@ -367,6 +367,10 @@ use_gtk_awt="" + TOOLKIT= + AC_SUBST(TOOLKIT) + ++if test -n "${with_multisubdir}"; then ++ peerlibs=no ++fi ++ + for peer in $peerlibs ; do + case $peer in + xlib) +--- libjava/configure.jj 2004-08-16 21:22:14.000000000 +0200 ++++ libjava/configure 2004-08-21 11:45:16.260738060 +0200 +@@ -4118,6 +4118,9 @@ use_gtk_awt="" + # The default toolkit to use is the first one specified. + TOOLKIT= + ++if test -n "${with_multisubdir}"; then ++ peerlibs=no ++fi + + for peer in $peerlibs ; do + case $peer in diff --git a/4.0.3/gentoo/04_all_gcc4-libgcc-cross-multilib.patch b/4.0.3/gentoo/04_all_gcc4-libgcc-cross-multilib.patch new file mode 100644 index 0000000..5c14a5e --- /dev/null +++ b/4.0.3/gentoo/04_all_gcc4-libgcc-cross-multilib.patch @@ -0,0 +1,49 @@ +Backport from gcc-4.1 + +2005-04-19 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (libgcc.mk): Pass GCC_FOR_TARGET. + * mklibgcc.in: Use $GCC_FOR_TARGET instead of ./xgcc. + +Index: gcc-4_1-branch/gcc/Makefile.in +=================================================================== +--- gcc-4_1-branch/gcc/Makefile.in (revision 98419) ++++ gcc-4_1-branch/gcc/Makefile.in (revision 98420) +@@ -1262,6 +1262,7 @@ + SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \ + MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \ + ASM_HIDDEN_OP='$(ASM_HIDDEN_OP)' \ ++ GCC_FOR_TARGET='$(GCC_FOR_TARGET)' \ + mkinstalldirs='$(mkinstalldirs)' \ + $(SHELL) mklibgcc > tmp-libgcc.mk + mv tmp-libgcc.mk libgcc.mk +Index: gcc-4_1-branch/gcc/mklibgcc.in +=================================================================== +--- gcc-4_1-branch/gcc/mklibgcc.in (revision 98419) ++++ gcc-4_1-branch/gcc/mklibgcc.in (revision 98420) +@@ -40,6 +40,7 @@ + # SHLIB_INSTALL + # MULTILIB_OSDIRNAMES + # ASM_HIDDEN_OP ++# GCC_FOR_TARGET + + # Make needs VPATH to be literal. + echo 'srcdir = @srcdir@' +@@ -178,7 +179,7 @@ + if [ "$LIBUNWIND" ]; then + libunwind_so=$dir/libunwind${SHLIB_EXT} + fi +- os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory` ++ os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory` + if [ "$os_multilib_dir" != . ]; then + shlib_slibdir_qual="/$os_multilib_dir" + fi +@@ -804,7 +805,7 @@ + echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a + + shlib_slibdir_qual= +- os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory` ++ os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory` + if [ "$os_multilib_dir" != . ]; then + shlib_slibdir_qual="/$os_multilib_dir" + fi diff --git a/4.0.3/gentoo/05_all_gcc4-bitfield-ref-vec.patch b/4.0.3/gentoo/05_all_gcc4-bitfield-ref-vec.patch new file mode 100644 index 0000000..c9375a3 --- /dev/null +++ b/4.0.3/gentoo/05_all_gcc4-bitfield-ref-vec.patch @@ -0,0 +1,36 @@ +2005-05-31 Jakub Jelinek <jakub@redhat.com> + + * fold-const.c (fold): Optimize BIT_FIELD_REF of VECTOR_CST. + +--- gcc/fold-const.c.jj 2005-05-16 23:31:03.000000000 +0200 ++++ gcc/fold-const.c 2005-05-31 19:11:51.000000000 +0200 +@@ -9860,6 +9860,29 @@ fold (tree expr) + } + return t; + ++ case BIT_FIELD_REF: ++ if (TREE_CODE (arg0) == VECTOR_CST ++ && type == TREE_TYPE (TREE_TYPE (arg0)) ++ && host_integerp (arg1, 1) ++ && host_integerp (TREE_OPERAND (t, 2), 1)) ++ { ++ unsigned HOST_WIDE_INT width = tree_low_cst (arg1, 1); ++ unsigned HOST_WIDE_INT idx = tree_low_cst (TREE_OPERAND (t, 2), 1); ++ ++ if (width != 0 ++ && simple_cst_equal (arg1, TYPE_SIZE (type)) == 1 ++ && (idx % width) == 0 ++ && (idx = idx / width) ++ < TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))) ++ { ++ tree elements = TREE_VECTOR_CST_ELTS (arg0); ++ while (idx-- > 0) ++ elements = TREE_CHAIN (elements); ++ return TREE_VALUE (elements); ++ } ++ } ++ return t; ++ + default: + return t; + } /* switch (code) */ diff --git a/4.0.3/gentoo/06_all_gcc4-slow-pthread-self.patch b/4.0.3/gentoo/06_all_gcc4-slow-pthread-self.patch new file mode 100644 index 0000000..f8f5012 --- /dev/null +++ b/4.0.3/gentoo/06_all_gcc4-slow-pthread-self.patch @@ -0,0 +1,15 @@ +2005-05-20 Jakub Jelinek <jakub@redhat.com> + + * configure.host (slow_pthread_self): Set to empty unconditionally + on Linux targets. + +--- libjava/configure.host 2005-03-15 18:05:24.000000000 +0100 ++++ libjava/configure.host 2005-05-20 07:47:13.000000000 +0200 +@@ -174,6 +174,7 @@ case "${host}" in + sh-linux* | sh[34]*-linux*) + can_unwind_signal=yes + libgcj_ld_symbolic='-Wl,-Bsymbolic' ++ slow_pthread_self= + if test x$slow_pthread_self = xyes \ + && test x$cross_compiling != xyes; then + cat > conftest.c <<EOF diff --git a/4.0.3/gentoo/08_all_gcc4-pr17965.patch b/4.0.3/gentoo/08_all_gcc4-pr17965.patch new file mode 100644 index 0000000..279ca06 --- /dev/null +++ b/4.0.3/gentoo/08_all_gcc4-pr17965.patch @@ -0,0 +1,116 @@ +2005-06-22 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/17965 + * calls.c (expand_call, emit_library_call_value_1): Use xmalloc/free + instead of alloca for really big argument sizes. + + * gcc.c-torture/compile/20050622-1.c: New test. + +--- gcc/calls.c.jj 2005-05-16 09:44:21.000000000 +0200 ++++ gcc/calls.c 2005-06-22 11:16:28.000000000 +0200 +@@ -1864,6 +1864,7 @@ expand_call (tree exp, rtx target, int i + + int initial_highest_arg_in_use = highest_outgoing_arg_in_use; + char *initial_stack_usage_map = stack_usage_map; ++ char *stack_usage_map_buf = NULL; + + int old_stack_allocated; + +@@ -2360,7 +2361,16 @@ expand_call (tree exp, rtx target, int i + highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, + needed); + #endif +- stack_usage_map = alloca (highest_outgoing_arg_in_use); ++ if (highest_outgoing_arg_in_use >= 262144) ++ { ++ if (stack_usage_map_buf) ++ free (stack_usage_map_buf); ++ stack_usage_map_buf ++ = xmalloc (highest_outgoing_arg_in_use); ++ stack_usage_map = stack_usage_map_buf; ++ } ++ else ++ stack_usage_map = alloca (highest_outgoing_arg_in_use); + + if (initial_highest_arg_in_use) + memcpy (stack_usage_map, initial_stack_usage_map, +@@ -2465,7 +2475,16 @@ expand_call (tree exp, rtx target, int i + = stack_arg_under_construction; + stack_arg_under_construction = 0; + /* Make a new map for the new argument list. */ +- stack_usage_map = alloca (highest_outgoing_arg_in_use); ++ if (highest_outgoing_arg_in_use >= 262144) ++ { ++ if (stack_usage_map_buf) ++ free (stack_usage_map_buf); ++ stack_usage_map_buf ++ = xmalloc (highest_outgoing_arg_in_use); ++ stack_usage_map = stack_usage_map_buf; ++ } ++ else ++ stack_usage_map = alloca (highest_outgoing_arg_in_use); + memset (stack_usage_map, 0, highest_outgoing_arg_in_use); + highest_outgoing_arg_in_use = 0; + } +@@ -3019,6 +3038,9 @@ expand_call (tree exp, rtx target, int i + emit_move_insn (virtual_stack_dynamic_rtx, stack_pointer_rtx); + } + ++ if (stack_usage_map_buf) ++ free (stack_usage_map_buf); ++ + return target; + } + +@@ -3213,6 +3235,7 @@ emit_library_call_value_1 (int retval, r + /* Size of the stack reserved for parameter registers. */ + int initial_highest_arg_in_use = highest_outgoing_arg_in_use; + char *initial_stack_usage_map = stack_usage_map; ++ char *stack_usage_map_buf = NULL; + + rtx struct_value = targetm.calls.struct_value_rtx (0, 0); + +@@ -3491,7 +3514,13 @@ emit_library_call_value_1 (int retval, r + highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, + needed); + #endif +- stack_usage_map = alloca (highest_outgoing_arg_in_use); ++ if (highest_outgoing_arg_in_use >= 262144) ++ { ++ stack_usage_map_buf = xmalloc (highest_outgoing_arg_in_use); ++ stack_usage_map = stack_usage_map_buf; ++ } ++ else ++ stack_usage_map = alloca (highest_outgoing_arg_in_use); + + if (initial_highest_arg_in_use) + memcpy (stack_usage_map, initial_stack_usage_map, +@@ -3845,6 +3874,9 @@ emit_library_call_value_1 (int retval, r + stack_usage_map = initial_stack_usage_map; + } + ++ if (stack_usage_map_buf) ++ free (stack_usage_map_buf); ++ + return value; + + } +--- gcc/testsuite/gcc.c-torture/compile/20050622-1.c.jj 2005-06-22 11:18:01.000000000 +0200 ++++ gcc/testsuite/gcc.c-torture/compile/20050622-1.c 2005-06-22 11:23:02.000000000 +0200 +@@ -0,0 +1,16 @@ ++#if __SCHAR_MAX__ == 127 && __INT_MAX__ >= 2147483647 ++struct S { char buf[72*1024*1024]; }; ++#else ++struct S { char buf[64]; }; ++#endif ++ ++extern void bar (struct S); ++ ++struct S s; ++ ++int ++foo (void) ++{ ++ bar (s); ++ return 0; ++} diff --git a/4.0.3/gentoo/09_all_gcc4-vsb-stack.patch b/4.0.3/gentoo/09_all_gcc4-vsb-stack.patch new file mode 100644 index 0000000..d5116e7 --- /dev/null +++ b/4.0.3/gentoo/09_all_gcc4-vsb-stack.patch @@ -0,0 +1,301 @@ +2005-05-18 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/20303 + * c-pragma.c: Include "vec.h". + (handle_pragma_visibility): Use VEC. + + * doc/invoke.texi: Remove the nested visibility push limit. + +2005-07-22 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/20303 + * gcc.dg/visibility-d.c: New test. + +--- gcc/c-pragma.c.jj 2004-11-29 15:47:36.000000000 -0800 ++++ gcc/c-pragma.c 2005-05-18 09:14:46.000000000 -0700 +@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - S + #include "c-common.h" + #include "output.h" + #include "tm_p.h" ++#include "vec.h" + #include "target.h" + + #define GCC_BAD(msgid) do { warning (msgid); return; } while (0) +@@ -583,15 +584,19 @@ maybe_apply_renaming_pragma (tree decl, + #ifdef HANDLE_PRAGMA_VISIBILITY + static void handle_pragma_visibility (cpp_reader *); + ++typedef enum symbol_visibility visibility; ++DEF_VEC_MALLOC_P (visibility); ++ + /* Sets the default visibility for symbols to something other than that + specified on the command line. */ + static void + handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED) +-{ /* Form is #pragma GCC visibility push(hidden)|pop */ +- static int visstack [16], visidx; ++{ ++ /* Form is #pragma GCC visibility push(hidden)|pop */ + tree x; + enum cpp_ttype token; + enum { bad, push, pop } action = bad; ++ static VEC (visibility) *visstack; + + token = c_lex (&x); + if (token == CPP_NAME) +@@ -608,14 +613,15 @@ handle_pragma_visibility (cpp_reader *du + { + if (pop == action) + { +- if (!visidx) ++ if (!VEC_length (visibility, visstack)) + { + GCC_BAD ("No matching push for %<#pragma GCC visibility pop%>"); + } + else + { +- default_visibility = visstack[--visidx]; +- visibility_options.inpragma = (visidx>0); ++ default_visibility = VEC_pop (visibility, visstack); ++ visibility_options.inpragma ++ = VEC_length (visibility, visstack) != 0; + } + } + else +@@ -627,14 +633,10 @@ handle_pragma_visibility (cpp_reader *du + { + GCC_BAD ("malformed #pragma GCC visibility push"); + } +- else if (visidx >= 16) +- { +- GCC_BAD ("No more than sixteen #pragma GCC visibility pushes allowed at once"); +- } + else + { + const char *str = IDENTIFIER_POINTER (x); +- visstack[visidx++] = default_visibility; ++ VEC_safe_push (visibility, visstack, default_visibility); + if (!strcmp (str, "default")) + default_visibility = VISIBILITY_DEFAULT; + else if (!strcmp (str, "internal")) +--- gcc/doc/invoke.texi.jj 2005-05-18 09:09:40.000000000 -0700 ++++ gcc/doc/invoke.texi 2005-05-18 09:09:40.000000000 -0700 +@@ -12445,8 +12445,8 @@ For those adding visibility support to e + @samp{#pragma GCC visibility} of use. This works by you enclosing + the declarations you wish to set visibility for with (for example) + @samp{#pragma GCC visibility push(hidden)} and +-@samp{#pragma GCC visibility pop}. These can be nested up to sixteen +-times. Bear in mind that symbol visibility should be viewed @strong{as ++@samp{#pragma GCC visibility pop}. ++Bear in mind that symbol visibility should be viewed @strong{as + part of the API interface contract} and thus all new code should + always specify visibility when it is not the default ie; declarations + only for use within the local DSO should @strong{always} be marked explicitly +--- gcc/testsuite/gcc.dg/visibility-d.c.jj 2005-07-22 11:58:19.000000000 +0200 ++++ gcc/testsuite/gcc.dg/visibility-d.c 2005-07-22 11:59:20.000000000 +0200 +@@ -0,0 +1,205 @@ ++/* PR middle-end/20303 */ ++/* Test nesting of #pragma GCC visibility. */ ++/* { dg-do compile } */ ++/* { dg-require-visibility "" } */ ++/* { dg-final { scan-not-hidden "foo00" } } */ ++/* { dg-final { scan-hidden "foo01" } } */ ++/* { dg-final { scan-not-hidden "foo02" } } */ ++/* { dg-final { scan-hidden "foo03" } } */ ++/* { dg-final { scan-not-hidden "foo04" } } */ ++/* { dg-final { scan-not-hidden "foo05" } } */ ++/* { dg-final { scan-not-hidden "foo06" } } */ ++/* { dg-final { scan-hidden "foo07" } } */ ++/* { dg-final { scan-not-hidden "foo08" } } */ ++/* { dg-final { scan-hidden "foo09" } } */ ++/* { dg-final { scan-not-hidden "foo10" } } */ ++/* { dg-final { scan-hidden "foo11" } } */ ++/* { dg-final { scan-hidden "foo12" } } */ ++/* { dg-final { scan-hidden "foo13" } } */ ++/* { dg-final { scan-not-hidden "foo14" } } */ ++/* { dg-final { scan-hidden "foo15" } } */ ++/* { dg-final { scan-not-hidden "foo16" } } */ ++/* { dg-final { scan-hidden "foo17" } } */ ++/* { dg-final { scan-not-hidden "foo18" } } */ ++/* { dg-final { scan-hidden "foo19" } } */ ++/* { dg-final { scan-not-hidden "foo20" } } */ ++/* { dg-final { scan-hidden "foo21" } } */ ++/* { dg-final { scan-not-hidden "foo22" } } */ ++/* { dg-final { scan-hidden "foo23" } } */ ++/* { dg-final { scan-not-hidden "foo24" } } */ ++/* { dg-final { scan-hidden "foo25" } } */ ++/* { dg-final { scan-not-hidden "foo26" } } */ ++/* { dg-final { scan-hidden "foo27" } } */ ++/* { dg-final { scan-not-hidden "foo28" } } */ ++/* { dg-final { scan-hidden "foo29" } } */ ++/* { dg-final { scan-not-hidden "foo30" } } */ ++/* { dg-final { scan-hidden "foo31" } } */ ++/* { dg-final { scan-not-hidden "foo32" } } */ ++/* { dg-final { scan-hidden "foo33" } } */ ++/* { dg-final { scan-not-hidden "foo34" } } */ ++/* { dg-final { scan-hidden "foo35" } } */ ++/* { dg-final { scan-not-hidden "foo36" } } */ ++/* { dg-final { scan-hidden "foo37" } } */ ++/* { dg-final { scan-not-hidden "foo38" } } */ ++/* { dg-final { scan-hidden "foo39" } } */ ++/* { dg-final { scan-not-hidden "foo40" } } */ ++/* { dg-final { scan-hidden "foo41" } } */ ++/* { dg-final { scan-not-hidden "foo42" } } */ ++/* { dg-final { scan-hidden "foo43" } } */ ++/* { dg-final { scan-not-hidden "foo44" } } */ ++/* { dg-final { scan-hidden "foo45" } } */ ++/* { dg-final { scan-hidden "foo46" } } */ ++/* { dg-final { scan-hidden "foo47" } } */ ++/* { dg-final { scan-not-hidden "foo48" } } */ ++/* { dg-final { scan-hidden "foo49" } } */ ++/* { dg-final { scan-not-hidden "foo50" } } */ ++/* { dg-final { scan-hidden "foo51" } } */ ++/* { dg-final { scan-not-hidden "foo52" } } */ ++/* { dg-final { scan-not-hidden "foo53" } } */ ++/* { dg-final { scan-not-hidden "foo54" } } */ ++/* { dg-final { scan-hidden "foo55" } } */ ++/* { dg-final { scan-not-hidden "foo56" } } */ ++/* { dg-final { scan-hidden "foo57" } } */ ++/* { dg-final { scan-not-hidden "foo58" } } */ ++/* { dg-final { scan-hidden "foo59" } } */ ++ ++#pragma GCC visibility push(default) ++void foo00(); ++#pragma GCC visibility push(hidden) ++void foo01(); ++#pragma GCC visibility push(default) ++void foo02(); ++#pragma GCC visibility push(hidden) ++void foo03(); ++#pragma GCC visibility push(default) ++void foo04(); ++#pragma GCC visibility push(default) ++void foo05(); ++#pragma GCC visibility push(default) ++void foo06(); ++#pragma GCC visibility push(hidden) ++void foo07(); ++#pragma GCC visibility push(default) ++void foo08(); ++#pragma GCC visibility push(hidden) ++void foo09(); ++#pragma GCC visibility push(default) ++void foo10(); ++#pragma GCC visibility push(hidden) ++void foo11(); ++#pragma GCC visibility push(hidden) ++void foo12(); ++#pragma GCC visibility push(hidden) ++void foo13(); ++#pragma GCC visibility push(default) ++void foo14(); ++#pragma GCC visibility push(hidden) ++void foo15(); ++#pragma GCC visibility push(default) ++void foo16(); ++#pragma GCC visibility push(hidden) ++void foo17(); ++#pragma GCC visibility push(default) ++void foo18(); ++#pragma GCC visibility push(hidden) ++void foo19(); ++#pragma GCC visibility push(default) ++void foo20(); ++#pragma GCC visibility push(hidden) ++void foo21(); ++#pragma GCC visibility push(default) ++void foo22(); ++#pragma GCC visibility push(hidden) ++void foo23(); ++#pragma GCC visibility push(default) ++void foo24(); ++#pragma GCC visibility push(hidden) ++void foo25(); ++#pragma GCC visibility push(default) ++void foo26(); ++#pragma GCC visibility push(hidden) ++void foo27(); ++#pragma GCC visibility push(default) ++void foo28(); ++#pragma GCC visibility push(hidden) ++void foo29(); ++#pragma GCC visibility pop ++void foo30(); ++#pragma GCC visibility pop ++void foo31(); ++#pragma GCC visibility pop ++void foo32(); ++#pragma GCC visibility pop ++void foo33(); ++#pragma GCC visibility pop ++void foo34(); ++#pragma GCC visibility pop ++void foo35(); ++#pragma GCC visibility pop ++void foo36(); ++#pragma GCC visibility pop ++void foo37(); ++#pragma GCC visibility pop ++void foo38(); ++#pragma GCC visibility pop ++void foo39(); ++#pragma GCC visibility pop ++void foo40(); ++#pragma GCC visibility pop ++void foo41(); ++#pragma GCC visibility pop ++void foo42(); ++#pragma GCC visibility pop ++void foo43(); ++#pragma GCC visibility pop ++void foo44(); ++#pragma GCC visibility pop ++void foo45(); ++#pragma GCC visibility pop ++void foo46(); ++#pragma GCC visibility pop ++void foo47(); ++#pragma GCC visibility pop ++void foo48(); ++#pragma GCC visibility pop ++void foo49(); ++#pragma GCC visibility pop ++void foo50(); ++#pragma GCC visibility pop ++void foo51(); ++#pragma GCC visibility pop ++void foo52(); ++#pragma GCC visibility pop ++void foo53(); ++#pragma GCC visibility pop ++void foo54(); ++#pragma GCC visibility pop ++void foo55(); ++#pragma GCC visibility pop ++void foo56(); ++#pragma GCC visibility pop ++void foo57(); ++#pragma GCC visibility pop ++void foo58(); ++#pragma GCC visibility push (hidden) ++void foo59(); ++#pragma GCC visibility pop ++#pragma GCC visibility pop ++ ++#define D(N) \ ++void foo##N##0() { } \ ++void foo##N##1() { } \ ++void foo##N##2() { } \ ++void foo##N##3() { } \ ++void foo##N##4() { } \ ++void foo##N##5() { } \ ++void foo##N##6() { } \ ++void foo##N##7() { } \ ++void foo##N##8() { } \ ++void foo##N##9() { } ++D(0) ++D(1) ++D(2) ++D(3) ++D(4) ++D(5) diff --git a/4.0.3/gentoo/10_all_gcc4-libltdl-multilib.patch b/4.0.3/gentoo/10_all_gcc4-libltdl-multilib.patch new file mode 100644 index 0000000..7b94f57 --- /dev/null +++ b/4.0.3/gentoo/10_all_gcc4-libltdl-multilib.patch @@ -0,0 +1,191 @@ +2005-06-17 Jakub Jelinek <jakub@redhat.com> + + * acinclude.m4 (AC_LIBTOOL_SYS_DYNAMIC_LINKER): Set + sys_lib_dlsearch_path_spec on bi-arch linux architectures + for 64-bit builds. + * configure: Rebuilt. + +--- libjava/libltdl/acinclude.m4.jj 2005-03-11 14:02:06.000000000 +0100 ++++ libjava/libltdl/acinclude.m4 2005-06-17 14:37:06.000000000 +0200 +@@ -1434,6 +1434,24 @@ linux*) + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ++ ++ # Find out which ABI we are using. ++ case "$host_cpu" in ++ x86_64*|s390*|sparc*|ppc*|powerpc*) ++ AC_LANG_PUSH(C) ++ lt_linux_biarch_save_CC="$CC" ++ CC="${LTCC-$CC}" ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case "`/usr/bin/file conftest.o`" in ++ *64-bit*) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64";; ++ esac ++ fi ++ rm -rf conftest* ++ CC="$lt_linux_biarch_save_CC" ++ AC_LANG_POP ++ ;; ++ esac + ;; + + netbsd*) +--- libjava/libltdl/configure.jj 2005-03-11 14:02:07.000000000 +0100 ++++ libjava/libltdl/configure 2005-06-17 14:37:11.000000000 +0200 +@@ -8421,6 +8421,38 @@ linux*) + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ++ ++ # Find out which ABI we are using. ++ case "$host_cpu" in ++ x86_64*|s390*|sparc*|ppc*|powerpc*) ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ lt_linux_biarch_save_CC="$CC" ++ CC="${LTCC-$CC}" ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case "`/usr/bin/file conftest.o`" in ++ *64-bit*) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64";; ++ esac ++ fi ++ rm -rf conftest* ++ CC="$lt_linux_biarch_save_CC" ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ;; ++ esac + ;; + + netbsd*) +@@ -12071,6 +12103,38 @@ linux*) + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ++ ++ # Find out which ABI we are using. ++ case "$host_cpu" in ++ x86_64*|s390*|sparc*|ppc*|powerpc*) ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ lt_linux_biarch_save_CC="$CC" ++ CC="${LTCC-$CC}" ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case "`/usr/bin/file conftest.o`" in ++ *64-bit*) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64";; ++ esac ++ fi ++ rm -rf conftest* ++ CC="$lt_linux_biarch_save_CC" ++ ac_ext=cc ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ ;; ++ esac + ;; + + netbsd*) +@@ -15156,6 +15220,37 @@ linux*) + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ++ ++ # Find out which ABI we are using. ++ case "$host_cpu" in ++ x86_64*|s390*|sparc*|ppc*|powerpc*) ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ lt_linux_biarch_save_CC="$CC" ++ CC="${LTCC-$CC}" ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case "`/usr/bin/file conftest.o`" in ++ *64-bit*) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64";; ++ esac ++ fi ++ rm -rf conftest* ++ CC="$lt_linux_biarch_save_CC" ++ ac_ext=f ++ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ++ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_f77_compiler_gnu ++ ++ ;; ++ esac + ;; + + netbsd*) +@@ -17441,6 +17536,38 @@ linux*) + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ++ ++ # Find out which ABI we are using. ++ case "$host_cpu" in ++ x86_64*|s390*|sparc*|ppc*|powerpc*) ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ lt_linux_biarch_save_CC="$CC" ++ CC="${LTCC-$CC}" ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case "`/usr/bin/file conftest.o`" in ++ *64-bit*) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64";; ++ esac ++ fi ++ rm -rf conftest* ++ CC="$lt_linux_biarch_save_CC" ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ;; ++ esac + ;; + + netbsd*) diff --git a/4.0.3/gentoo/11_all_gcc-netbsd-symbolic.patch b/4.0.3/gentoo/11_all_gcc-netbsd-symbolic.patch new file mode 100644 index 0000000..3b86491 --- /dev/null +++ b/4.0.3/gentoo/11_all_gcc-netbsd-symbolic.patch @@ -0,0 +1,12 @@ +http://bugs.gentoo.org/122698 + +--- gcc/config/netbsd-elf.h ++++ gcc/config/netbsd-elf.h +@@ -83,6 +83,7 @@ + #define NETBSD_LINK_SPEC_ELF \ + "%{assert*} %{R*} %{rpath*} \ + %{shared:-shared} \ ++ %{symbolic:-Bsymbolic} \ + %{!shared: \ + -dc -dp \ + %{!nostdlib: \ diff --git a/4.0.3/gentoo/11_all_gcc4-java-rh163099.patch b/4.0.3/gentoo/11_all_gcc4-java-rh163099.patch new file mode 100644 index 0000000..7133fb6 --- /dev/null +++ b/4.0.3/gentoo/11_all_gcc4-java-rh163099.patch @@ -0,0 +1,58 @@ +2005-07-13 Tom Tromey <tromey@redhat.com> + + * jvspec.c (lang_specific_driver): Put filelist_filename first on + command line. + +--- gcc/java/jvspec.c 12 Jul 2005 22:35:48 -0000 1.72 ++++ gcc/java/jvspec.c 13 Jul 2005 15:21:33 -0000 +@@ -458,7 +458,7 @@ + if (filelist_file == NULL) + pfatal_with_name (filelist_filename); + num_args -= java_files_count + class_files_count + zip_files_count; +- num_args += 2; /* for the combined arg and "-xjava" */ ++ num_args += 3; /* for the combined arg "-xjava", and "-xnone" */ + } + /* If we know we don't have to do anything, bail now. */ + #if 0 +@@ -493,11 +493,23 @@ + arglist = xmalloc ((num_args + 1) * sizeof (char *)); + j = 0; + +- for (i = 0; i < argc; i++, j++) ++ arglist[j++] = argv[0]; ++ ++ if (combine_inputs || indirect_files_count > 0) ++ arglist[j++] = "-ffilelist-file"; ++ ++ if (combine_inputs) ++ { ++ arglist[j++] = "-xjava"; ++ arglist[j++] = filelist_filename; ++ arglist[j++] = "-xnone"; ++ } ++ ++ for (i = 1; i < argc; i++, j++) + { + arglist[j] = argv[i]; + +- if ((args[i] & PARAM_ARG) || i == 0) ++ if ((args[i] & PARAM_ARG)) + continue; + + if ((args[i] & RESOURCE_FILE_ARG) != 0) +@@ -559,15 +571,10 @@ + } + } + +- if (combine_inputs || indirect_files_count > 0) +- arglist[j++] = "-ffilelist-file"; +- + if (combine_inputs) + { + if (fclose (filelist_file)) + pfatal_with_name (filelist_filename); +- arglist[j++] = "-xjava"; +- arglist[j++] = filelist_filename; + } + + /* If we saw no -O or -g option, default to -g1, for javac compatibility. */ diff --git a/4.0.3/gentoo/13_all_gcc4-libjava-ia64-backtrace.patch b/4.0.3/gentoo/13_all_gcc4-libjava-ia64-backtrace.patch new file mode 100644 index 0000000..0315b43 --- /dev/null +++ b/4.0.3/gentoo/13_all_gcc4-libjava-ia64-backtrace.patch @@ -0,0 +1,29 @@ +2005-07-14 Jakub Jelinek <jakub@redhat.com> + + * configure.ac (HAVE_BACKTRACE): Define even on ia64. + * configure: Rebuilt. + +--- libjava/configure.ac.jj 2005-04-12 22:28:45.000000000 +0200 ++++ libjava/configure.ac 2005-07-14 18:09:23.000000000 +0200 +@@ -769,9 +769,6 @@ else + AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) + AC_CHECK_FUNC(backtrace, [ + case "$host" in +- ia64-*-linux*) +- # Has broken backtrace() +- ;; + mips*-*-linux*) + # Has broken backtrace(), but we supply our own. + if test -d sysdep; then true; else mkdir -p sysdep; fi +--- libjava/configure.jj 2005-04-12 22:28:34.000000000 +0200 ++++ libjava/configure 2005-07-14 18:11:07.000000000 +0200 +@@ -9303,9 +9303,6 @@ echo "${ECHO_T}$ac_cv_func_backtrace" >& + if test $ac_cv_func_backtrace = yes; then + + case "$host" in +- ia64-*-linux*) +- # Has broken backtrace() +- ;; + mips*-*-linux*) + # Has broken backtrace(), but we supply our own. + if test -d sysdep; then true; else mkdir -p sysdep; fi diff --git a/4.0.3/gentoo/15_all_gcc4-libffi-x86.patch b/4.0.3/gentoo/15_all_gcc4-libffi-x86.patch new file mode 100644 index 0000000..713ce15 --- /dev/null +++ b/4.0.3/gentoo/15_all_gcc4-libffi-x86.patch @@ -0,0 +1,684 @@ +2005-08-10 Jakub Jelinek <jakub@redhat.com> + + * configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test. + (AH_BOTTOM): Add FFI_HIDDEN definition. + * configure: Rebuilt. + * fficonfig.h.in: Rebuilt. + * src/powerpc/ffi.c (hidden): Remove. + (ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64, + ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden. + * src/powerpc/linux64_closure.S (ffi_closure_LINUX64, + .ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden. + * src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove, + add FFI_HIDDEN to its prototype. + (ffi_closure_SYSV_inner): New. + * src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. + * src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. + +--- libffi/configure.ac.jj 2004-12-02 12:04:21.000000000 +0100 ++++ libffi/configure.ac 2005-08-10 20:34:16.000000000 +0200 +@@ -181,6 +181,38 @@ else + [Define to the flags needed for the .section .eh_frame directive.]) + fi + ++AC_CACHE_CHECK([for __attribute__((visibility("hidden")))], ++ libffi_cv_hidden_visibility_attribute, [ ++ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ++ libffi_cv_hidden_visibility_attribute=no ++ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then ++ if grep '\.hidden.*foo' conftest.s >/dev/null; then ++ libffi_cv_hidden_visibility_attribute=yes ++ fi ++ fi ++ rm -f conftest.* ++ ]) ++if test $libffi_cv_hidden_visibility_attribute = yes; then ++ AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1, ++ [Define if __attribute__((visibility("hidden"))) is supported.]) ++fi ++ ++AH_BOTTOM([ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++]) ++ + AC_SUBST(TARGET) + AC_SUBST(TARGETDIR) + +--- libffi/configure.jj 2004-12-02 12:04:21.000000000 +0100 ++++ libffi/configure 2005-08-10 20:34:19.000000000 +0200 +@@ -6726,6 +6726,40 @@ _ACEOF + + fi + ++echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5 ++echo $ECHO_N "checking for __attribute__((visibility(\"hidden\")))... $ECHO_C" >&6 ++if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ++ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ++ libffi_cv_hidden_visibility_attribute=no ++ if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ if grep '\.hidden.*foo' conftest.s >/dev/null; then ++ libffi_cv_hidden_visibility_attribute=yes ++ fi ++ fi ++ rm -f conftest.* ++ ++fi ++echo "$as_me:$LINENO: result: $libffi_cv_hidden_visibility_attribute" >&5 ++echo "${ECHO_T}$libffi_cv_hidden_visibility_attribute" >&6 ++if test $libffi_cv_hidden_visibility_attribute = yes; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1 ++_ACEOF ++ ++fi ++ ++ ++ ++ + + + +--- libffi/fficonfig.h.in.jj 2004-06-15 16:47:54.000000000 +0200 ++++ libffi/fficonfig.h.in 2005-08-10 20:34:40.000000000 +0200 +@@ -37,6 +37,9 @@ + */ + #undef HAVE_AS_SPARC_UA_PCREL + ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++#undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++ + /* Define to 1 if you have the <inttypes.h> header file. */ + #undef HAVE_INTTYPES_H + +@@ -139,3 +142,19 @@ + + /* whether byteorder is bigendian */ + #undef WORDS_BIGENDIAN ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++ +--- libffi/src/powerpc/ffi.c.jj 2005-02-23 15:05:12.000000000 +0100 ++++ libffi/src/powerpc/ffi.c 2005-08-10 20:16:54.000000000 +0200 +@@ -29,15 +29,9 @@ + #include <stdlib.h> + #include <stdio.h> + +-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 1) +-# define hidden __attribute__ ((visibility ("hidden"))) +-#else +-# define hidden +-#endif +- + + extern void ffi_closure_SYSV(void); +-extern void hidden ffi_closure_LINUX64(void); ++extern void FFI_HIDDEN ffi_closure_LINUX64(void); + + enum { + /* The assembly depends on these exact flags. */ +@@ -300,7 +294,7 @@ enum { ASM_NEEDS_REGISTERS64 = 4 }; + */ + + /*@-exportheader@*/ +-void hidden ffi_prep_args64(extended_cif *ecif, unsigned long *const stack) ++void FFI_HIDDEN ffi_prep_args64(extended_cif *ecif, unsigned long *const stack) + /*@=exportheader@*/ + { + const unsigned long bytes = ecif->cif->bytes; +@@ -680,10 +674,10 @@ extern void ffi_call_SYSV(/*@out@*/ exte + unsigned, unsigned, + /*@out@*/ unsigned *, + void (*fn)()); +-extern void hidden ffi_call_LINUX64(/*@out@*/ extended_cif *, +- unsigned long, unsigned long, +- /*@out@*/ unsigned long *, +- void (*fn)()); ++extern void FFI_HIDDEN ffi_call_LINUX64(/*@out@*/ extended_cif *, ++ unsigned long, unsigned long, ++ /*@out@*/ unsigned long *, ++ void (*fn)()); + /*@=declundef@*/ + /*@=exportheader@*/ + +@@ -991,10 +985,10 @@ ffi_closure_helper_SYSV (ffi_closure* cl + + } + +-int hidden ffi_closure_helper_LINUX64 (ffi_closure*, void*, unsigned long*, +- ffi_dblfl*); ++int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure*, void*, unsigned long*, ++ ffi_dblfl*); + +-int hidden ++int FFI_HIDDEN + ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue, + unsigned long *pst, ffi_dblfl *pfr) + { +--- libffi/src/powerpc/linux64_closure.S.jj 2005-02-28 13:23:28.000000000 +0100 ++++ libffi/src/powerpc/linux64_closure.S 2005-08-10 20:17:24.000000000 +0200 +@@ -5,7 +5,8 @@ + .file "linux64_closure.S" + + #ifdef __powerpc64__ +- .hidden ffi_closure_LINUX64, .ffi_closure_LINUX64 ++ FFI_HIDDEN (ffi_closure_LINUX64) ++ FFI_HIDDEN (.ffi_closure_LINUX64) + .globl ffi_closure_LINUX64, .ffi_closure_LINUX64 + .section ".opd","aw" + .align 3 +--- libffi/src/x86/ffi.c.jj 2004-03-16 20:17:33.000000000 +0100 ++++ libffi/src/x86/ffi.c 2005-08-10 20:15:24.000000000 +0200 +@@ -241,26 +241,24 @@ void ffi_call(/*@dependent@*/ ffi_cif *c + + static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +-static void ffi_closure_SYSV (ffi_closure *) ++void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) + __attribute__ ((regparm(1))); +-static void ffi_closure_raw_SYSV (ffi_raw_closure *) ++unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) ++ __attribute__ ((regparm(1))); ++void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) + __attribute__ ((regparm(1))); + + /* This function is jumped to by the trampoline */ + +-static void +-ffi_closure_SYSV (closure) ++unsigned int FFI_HIDDEN ++ffi_closure_SYSV_inner (closure, respp, args) + ffi_closure *closure; ++ void **respp; ++ void *args; + { +- // this is our return value storage +- long double res; +- + // our various things... + ffi_cif *cif; + void **arg_area; +- unsigned short rtype; +- void *resp = (void*)&res; +- void *args = __builtin_dwarf_cfa (); + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); +@@ -271,46 +269,11 @@ ffi_closure_SYSV (closure) + * a structure, it will re-set RESP to point to the + * structure return address. */ + +- ffi_prep_incoming_args_SYSV(args, (void**)&resp, arg_area, cif); +- +- (closure->fun) (cif, resp, arg_area, closure->user_data); ++ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + +- rtype = cif->flags; ++ (closure->fun) (cif, *respp, arg_area, closure->user_data); + +- /* now, do a generic return based on the value of rtype */ +- if (rtype == FFI_TYPE_INT) +- { +- asm ("movl (%0),%%eax" : : "r" (resp) : "eax"); +- } +- else if (rtype == FFI_TYPE_FLOAT) +- { +- asm ("flds (%0)" : : "r" (resp) : "st" ); +- } +- else if (rtype == FFI_TYPE_DOUBLE) +- { +- asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" ); +- } +- else if (rtype == FFI_TYPE_LONGDOUBLE) +- { +- asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" ); +- } +- else if (rtype == FFI_TYPE_SINT64) +- { +- asm ("movl 0(%0),%%eax;" +- "movl 4(%0),%%edx" +- : : "r"(resp) +- : "eax", "edx"); +- } +-#ifdef X86_WIN32 +- else if (rtype == FFI_TYPE_SINT8) /* 1-byte struct */ +- { +- asm ("movsbl (%0),%%eax" : : "r" (resp) : "eax"); +- } +- else if (rtype == FFI_TYPE_SINT16) /* 2-bytes struct */ +- { +- asm ("movswl (%0),%%eax" : : "r" (resp) : "eax"); +- } +-#endif ++ return cif->flags; + } + + /*@-exportheader@*/ +@@ -394,57 +357,6 @@ ffi_prep_closure (ffi_closure* closure, + + #if !FFI_NO_RAW_API + +-static void +-ffi_closure_raw_SYSV (closure) +- ffi_raw_closure *closure; +-{ +- // this is our return value storage +- long double res; +- +- // our various things... +- ffi_raw *raw_args; +- ffi_cif *cif; +- unsigned short rtype; +- void *resp = (void*)&res; +- +- /* get the cif */ +- cif = closure->cif; +- +- /* the SYSV/X86 abi matches the RAW API exactly, well.. almost */ +- raw_args = (ffi_raw*) __builtin_dwarf_cfa (); +- +- (closure->fun) (cif, resp, raw_args, closure->user_data); +- +- rtype = cif->flags; +- +- /* now, do a generic return based on the value of rtype */ +- if (rtype == FFI_TYPE_INT) +- { +- asm ("movl (%0),%%eax" : : "r" (resp) : "eax"); +- } +- else if (rtype == FFI_TYPE_FLOAT) +- { +- asm ("flds (%0)" : : "r" (resp) : "st" ); +- } +- else if (rtype == FFI_TYPE_DOUBLE) +- { +- asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" ); +- } +- else if (rtype == FFI_TYPE_LONGDOUBLE) +- { +- asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" ); +- } +- else if (rtype == FFI_TYPE_SINT64) +- { +- asm ("movl 0(%0),%%eax; movl 4(%0),%%edx" +- : : "r"(resp) +- : "eax", "edx"); +- } +-} +- +- +- +- + ffi_status + ffi_prep_raw_closure (ffi_raw_closure* closure, + ffi_cif* cif, +--- libffi/src/x86/sysv.S.jj 2005-02-28 13:23:32.000000000 +0100 ++++ libffi/src/x86/sysv.S 2005-08-10 20:16:01.000000000 +0200 +@@ -1,5 +1,5 @@ + /* ----------------------------------------------------------------------- +- sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. ++ sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. + + X86 Foreign Function Interface + +@@ -130,6 +130,135 @@ epilogue: + .ffi_call_SYSV_end: + .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV + ++ .align 4 ++FFI_HIDDEN (ffi_closure_SYSV) ++.globl ffi_closure_SYSV ++ .type ffi_closure_SYSV, @function ++ ++ffi_closure_SYSV: ++.LFB2: ++ pushl %ebp ++.LCFI2: ++ movl %esp, %ebp ++.LCFI3: ++ subl $40, %esp ++ leal -24(%ebp), %edx ++ movl %edx, -12(%ebp) /* resp */ ++ leal 8(%ebp), %edx ++ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ ++ leal -12(%ebp), %edx ++ movl %edx, (%esp) /* &resp */ ++#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ ++ call ffi_closure_SYSV_inner ++#else ++ movl %ebx, 8(%esp) ++.LCFI7: ++ call 1f ++1: popl %ebx ++ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx ++ call ffi_closure_SYSV_inner@PLT ++ movl 8(%esp), %ebx ++#endif ++ movl -12(%ebp), %ecx ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lcls_retint ++ cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lcls_retllong ++.Lcls_epilogue: ++ movl %ebp, %esp ++ popl %ebp ++ ret ++.Lcls_retint: ++ movl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retfloat: ++ flds (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retdouble: ++ fldl (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retldouble: ++ fldt (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retllong: ++ movl (%ecx), %eax ++ movl 4(%ecx), %edx ++ jmp .Lcls_epilogue ++.LFE2: ++ .size ffi_closure_SYSV, .-ffi_closure_SYSV ++ ++#if !FFI_NO_RAW_API ++ ++#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) ++#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) ++#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) ++#define CIF_FLAGS_OFFSET 20 ++ ++ .align 4 ++FFI_HIDDEN (ffi_closure_raw_SYSV) ++.globl ffi_closure_raw_SYSV ++ .type ffi_closure_raw_SYSV, @function ++ ++ffi_closure_raw_SYSV: ++.LFB3: ++ pushl %ebp ++.LCFI4: ++ movl %esp, %ebp ++.LCFI5: ++ pushl %esi ++.LCFI6: ++ subl $36, %esp ++ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ ++ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ ++ movl %edx, 12(%esp) /* user_data */ ++ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ ++ movl %edx, 8(%esp) /* raw_args */ ++ leal -24(%ebp), %edx ++ movl %edx, 4(%esp) /* &res */ ++ movl %esi, (%esp) /* cif */ ++ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ ++ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lrcls_retint ++ cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lrcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lrcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lrcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lrcls_retllong ++.Lrcls_epilogue: ++ addl $36, %esp ++ popl %esi ++ popl %ebp ++ ret ++.Lrcls_retint: ++ movl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++.Lrcls_retfloat: ++ flds -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retdouble: ++ fldl -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retldouble: ++ fldt -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retllong: ++ movl -24(%ebp), %eax ++ movl -20(%ebp), %edx ++ jmp .Lrcls_epilogue ++.LFE3: ++ .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV ++#endif ++ + .section .eh_frame,EH_FRAME_FLAGS,@progbits + .Lframe1: + .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ +@@ -180,6 +309,71 @@ epilogue: + .byte 0x5 /* .uleb128 0x5 */ + .align 4 + .LEFDE1: ++.LSFDE2: ++ .long .LEFDE2-.LASFDE2 /* FDE Length */ ++.LASFDE2: ++ .long .LASFDE2-.Lframe1 /* FDE CIE offset */ ++#ifdef __PIC__ ++ .long .LFB2-. /* FDE initial location */ ++#else ++ .long .LFB2 ++#endif ++ .long .LFE2-.LFB2 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI2-.LFB2 ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 */ ++ .byte 0x2 /* .uleb128 0x2 */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI3-.LCFI2 ++ .byte 0xd /* DW_CFA_def_cfa_register */ ++ .byte 0x5 /* .uleb128 0x5 */ ++#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI7-.LCFI3 ++ .byte 0x83 /* DW_CFA_offset, column 0x3 */ ++ .byte 0xa /* .uleb128 0xa */ ++#endif ++ .align 4 ++.LEFDE2: ++ ++#if !FFI_NO_RAW_API ++ ++.LSFDE3: ++ .long .LEFDE3-.LASFDE3 /* FDE Length */ ++.LASFDE3: ++ .long .LASFDE3-.Lframe1 /* FDE CIE offset */ ++#ifdef __PIC__ ++ .long .LFB3-. /* FDE initial location */ ++#else ++ .long .LFB3 ++#endif ++ .long .LFE3-.LFB3 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI4-.LFB3 ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 */ ++ .byte 0x2 /* .uleb128 0x2 */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI5-.LCFI4 ++ .byte 0xd /* DW_CFA_def_cfa_register */ ++ .byte 0x5 /* .uleb128 0x5 */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI6-.LCFI5 ++ .byte 0x86 /* DW_CFA_offset, column 0x6 */ ++ .byte 0x3 /* .uleb128 0x3 */ ++ .align 4 ++.LEFDE3: ++ ++#endif + + #endif /* ifndef __x86_64__ */ + +--- libffi/src/x86/win32.S.jj 2004-03-16 20:17:33.000000000 +0100 ++++ libffi/src/x86/win32.S 2005-08-10 11:55:10.000000000 +0200 +@@ -257,3 +257,117 @@ sc_epilogue: + ret + + .ffi_call_STDCALL_end: ++ ++ .globl _ffi_closure_SYSV ++_ffi_closure_SYSV: ++ pushl %ebp ++ movl %esp, %ebp ++ subl $40, %esp ++ leal -24(%ebp), %edx ++ movl %edx, -12(%ebp) /* resp */ ++ leal 8(%ebp), %edx ++ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ ++ leal -12(%ebp), %edx ++ movl %edx, (%esp) /* &resp */ ++ call _ffi_closure_SYSV_inner ++ movl -12(%ebp), %ecx ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lcls_retint ++ cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lcls_retllong ++ cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */ ++ je .Lcls_retstruct1 ++ cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */ ++ je .Lcls_retstruct2 ++.Lcls_epilogue: ++ movl %ebp, %esp ++ popl %ebp ++ ret ++.Lcls_retint: ++ movl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retfloat: ++ flds (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retdouble: ++ fldl (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retldouble: ++ fldt (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retllong: ++ movl (%ecx), %eax ++ movl 4(%ecx), %edx ++ jmp .Lcls_epilogue ++.Lcls_retstruct1: ++ movsbl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retstruct2: ++ movswl (%ecx), %eax ++ jmp .Lcls_epilogue ++.ffi_closure_SYSV_end: ++ ++#if !FFI_NO_RAW_API ++ ++#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) ++#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) ++#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) ++#define CIF_FLAGS_OFFSET 20 ++ ++ .balign 16 ++ .globl _ffi_closure_raw_SYSV ++_ffi_closure_raw_SYSV: ++ pushl %ebp ++ movl %esp, %ebp ++ pushl %esi ++ subl $36, %esp ++ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ ++ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ ++ movl %edx, 12(%esp) /* user_data */ ++ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ ++ movl %edx, 8(%esp) /* raw_args */ ++ leal -24(%ebp), %edx ++ movl %edx, 4(%esp) /* &res */ ++ movl %esi, (%esp) /* cif */ ++ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ ++ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lrcls_retint ++ cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lrcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lrcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lrcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lrcls_retllong ++.Lrcls_epilogue: ++ addl $36, %esp ++ popl %esi ++ popl %ebp ++ ret ++.Lrcls_retint: ++ movl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++.Lrcls_retfloat: ++ flds -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retdouble: ++ fldl -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retldouble: ++ fldt -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retllong: ++ movl -24(%ebp), %eax ++ movl -20(%ebp), %edx ++ jmp .Lrcls_epilogue ++.ffi_closure_raw_SYSV_end: ++ ++#endif diff --git a/4.0.3/gentoo/16_all_gcc4-ppc32-msecure-plt.patch b/4.0.3/gentoo/16_all_gcc4-ppc32-msecure-plt.patch new file mode 100644 index 0000000..acfb8b1 --- /dev/null +++ b/4.0.3/gentoo/16_all_gcc4-ppc32-msecure-plt.patch @@ -0,0 +1,766 @@ +2005-06-02 Alan Modra <amodra@bigpond.net.au> + + * configure.ac: Add --enable-secureplt. + (HAVE_AS_REL16): Test for R_PPC_REL16 relocs. + * config.in: Regenerate. + * configure: Regenerate. + * config.gcc (powerpc64-*-linux*, powerpc-*-linux*): Add + rs6000/secureplt.h to tm_file when enable_secureplt. + * doc/invoke.texi (msecure-plt, mbss-plt): Document. + * doc/install.texi: Document --enable-targets and --enable-secureplt. + Correct xrefs to "Using the GNU Compiler Collection (GCC)". + * config/rs6000/secureplt.h: New file. + * config/rs6000/sysv4.h (MASK_SECURE_PLT): Define. + (SUBTARGET_SWITCHES): Add "secure-plt" and "bss-plt". Move "newlib". + (SUBTARGET_OVERRIDE_OPTIONS): Error if -msecure-plt given without + assembler support. + (CC1_SECURE_PLT_DEFAULT_SPEC): Define. + (CC1_SPEC): Delete duplicate mno-sdata. Invoke cc1_secure_plt_default. + (SUBTARGET_EXTRA_SPECS): Add cc1_secure_plt_default. + * config/rs6000/rs6000.h: Update target_flags free bits comment. + (TARGET_SECURE_PLT): Define. + * config/rs6000/rs6000.c (rs6000_emit_load_toc_table): Handle + TARGET_SECURE_PLT got register load sequence. + (rs6000_emit_prologue): Call rs6000_emit_load_toc_table when + TARGET_SECURE_PLT. + (rs6000_elf_declare_function_name): Don't emit toc address offset + word when TARGET_SECURE_PLT. + * config/rs6000/rs6000.md (elf_high, elf_low): Move past load_toc_*. + (load_toc_v4_PIC_1) Enable for TARGET_SECURE_PLT. + (load_toc_v4_PIC_3b, load_toc_v4_PIC_3c): New insns. + (call, call_value): Mark pic_offset_table_rtx used for sysv pic and + TARGET_SECURE_PLT. + (call_nonlocal_sysv, call_value_nonlocal_sysv, sibcall_nonlocal_sysv, + sibcall_value_nonlocal_sysv): Add 32768 offset when TARGET_SECURE_PLT + and -fPIC. + * config/rs6000/tramp.asm (trampoline_initial): Use "bcl 20,31". + (__trampoline_setup): Likewise. Init r30 before plt call. + + * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET + to call ffi_closure_helper_SYSV. Append @local instead. + * src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV. + +--- gcc/configure.ac 2005-05-11 18:20:56.000000000 +0930 ++++ gcc/configure.ac 2005-06-01 21:52:52.000000000 +0930 +@@ -1429,6 +1429,10 @@ case "$LIBINTL" in *$LIBICONV*) + LIBICONV= ;; + esac + ++AC_ARG_ENABLE(secureplt, ++[ --enable-secureplt enable -msecure-plt by default for PowerPC], ++[], []) ++ + # Windows32 Registry support for specifying GCC installation paths. + AC_ARG_ENABLE(win32-registry, + [ --disable-win32-registry +@@ -2762,6 +2766,25 @@ foo: nop + [$conftest_s],, + [AC_DEFINE(HAVE_AS_MFCRF, 1, + [Define if your assembler supports mfcr field.])]) ++ ++ case $target in ++ *-*-aix*) conftest_s=' .csect .text[[PR]] ++LCF..0: ++ addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';; ++ *-*-darwin*) ++ conftest_s=' .text ++LCF0: ++ addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';; ++ *) conftest_s=' .text ++.LCF0: ++ addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';; ++ esac ++ ++ gcc_GAS_CHECK_FEATURE([rel16 relocs], ++ gcc_cv_as_powerpc_rel16, [2,17,0], -a32, ++ [$conftest_s],, ++ [AC_DEFINE(HAVE_AS_REL16, 1, ++ [Define if your assembler supports R_PPC_REL16 relocs.])]) + ;; + + mips*-*-*) +--- gcc/configure 2005-06-06 17:00:55.000000000 +0200 ++++ gcc/configure 2005-07-27 11:17:45.000000000 +0200 +@@ -890,6 +890,7 @@ Optional Features: + --enable-initfini-array use .init_array/.fini_array sections + --enable-sjlj-exceptions + arrange to use setjmp/longjmp exception handling ++ --enable-secureplt enable -msecure-plt by default for PowerPC + --disable-win32-registry + disable lookup of installation paths in the + Registry on Windows hosts +@@ -12330,6 +12331,12 @@ case "$LIBINTL" in *$LIBICONV*) + LIBICONV= ;; + esac + ++# Check whether --enable-secureplt or --disable-secureplt was given. ++if test "${enable_secureplt+set}" = set; then ++ enableval="$enable_secureplt" ++ ++fi; ++ + # Windows32 Registry support for specifying GCC installation paths. + # Check whether --enable-win32-registry or --disable-win32-registry was given. + if test "${enable_win32_registry+set}" = set; then +@@ -14664,6 +14671,56 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi ++ ++ case $target in ++ *-*-aix*) conftest_s=' .csect .text[PR] ++LCF..0: ++ addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';; ++ *-*-darwin*) ++ conftest_s=' .text ++LCF0: ++ addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';; ++ *) conftest_s=' .text ++.LCF0: ++ addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';; ++ esac ++ ++ echo "$as_me:$LINENO: checking assembler for rel16 relocs" >&5 ++echo $ECHO_N "checking assembler for rel16 relocs... $ECHO_C" >&6 ++if test "${gcc_cv_as_powerpc_rel16+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ gcc_cv_as_powerpc_rel16=no ++ if test $in_tree_gas = yes; then ++ if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 17 \) \* 1000 + 0` ++ then gcc_cv_as_powerpc_rel16=yes ++fi ++ elif test x$gcc_cv_as != x; then ++ echo "$conftest_s" > conftest.s ++ if { ac_try='$gcc_cv_as -a32 -o conftest.o conftest.s >&5' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } ++ then ++ gcc_cv_as_powerpc_rel16=yes ++ else ++ echo "configure: failed program was" >&5 ++ cat conftest.s >&5 ++ fi ++ rm -f conftest.o conftest.s ++ fi ++fi ++echo "$as_me:$LINENO: result: $gcc_cv_as_powerpc_rel16" >&5 ++echo "${ECHO_T}$gcc_cv_as_powerpc_rel16" >&6 ++if test $gcc_cv_as_powerpc_rel16 = yes; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define HAVE_AS_REL16 1 ++_ACEOF ++ ++fi + ;; + + mips*-*-*) +--- gcc/config.in 2005-06-06 17:00:53.000000000 +0200 ++++ gcc/config.in 2005-07-27 11:19:13.000000000 +0200 +@@ -122,6 +122,9 @@ + /* Define if your assembler supports .register. */ + #undef HAVE_AS_REGISTER_PSEUDO_OP + ++/* Define if your assembler supports R_PPC_REL16 relocs. */ ++#undef HAVE_AS_REL16 ++ + /* Define if your assembler supports -relax option. */ + #undef HAVE_AS_RELAX_OPTION + +--- gcc/config.gcc 2005-05-06 23:50:09.000000000 +0930 ++++ gcc/config.gcc 2005-05-30 10:29:30.000000000 +0930 +@@ -1559,6 +1559,9 @@ powerpc64-*-linux*) + test x$with_cpu != x || cpu_is_64bit=yes + test x$cpu_is_64bit != xyes || tm_file="${tm_file} rs6000/default64.h" + tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h" ++ if test x${enable_secureplt} = xyes; then ++ tm_file="rs6000/secureplt.h ${tm_file}" ++ fi + tmake_file="rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64" + ;; + powerpc64-*-gnu*) +@@ -1651,6 +1654,9 @@ powerpc-*-linux*) + tm_file="${tm_file} rs6000/linux.h" + ;; + esac ++ if test x${enable_secureplt} = xyes; then ++ tm_file="rs6000/secureplt.h ${tm_file}" ++ fi + ;; + powerpc-*-gnu-gnualtivec*) + tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h" +--- gcc/doc/install.texi 2005-05-02 08:26:07.000000000 +0930 ++++ gcc/doc/install.texi 2005-06-01 21:44:56.000000000 +0930 +@@ -1071,6 +1071,27 @@ do a @samp{make -C gcc gnatlib_and_tools + Specify that the compiler should + use DWARF 2 debugging information as the default. + ++@item --enable-targets=all ++@itemx --enable-targets=@var{target_list} ++Some GCC targets, e.g.@: powerpc64-linux, build bi-arch compilers. ++These are compilers that are able to generate either 64-bit or 32-bit ++code. Typicially, the corresponding 32-bit target, e.g.@: ++powerpc-linux for powerpc64-linux, only generates 32-bit code. This ++option enables the 32-bit target to be a bi-arch compiler, which is ++useful when you want a bi-arch compiler that defaults to 32-bit, and ++you are building a bi-arch or multi-arch binutils in a combined tree. ++Currently, this option only affects powerpc-linux. ++ ++@item --enable-secureplt ++This option enables @option{-msecure-plt} by default for powerpc-linux. ++@ifnothtml ++@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc, ++Using the GNU Compiler Collection (GCC)}, ++@end ifnothtml ++@ifhtml ++See ``RS/6000 and PowerPC Options'' in the main manual ++@end ifhtml ++ + @item --enable-win32-registry + @itemx --enable-win32-registry=@var{key} + @itemx --disable-win32-registry +@@ -2464,7 +2485,7 @@ ARM-family processors. These targets su + ATMEL AVR-family micro controllers. These are used in embedded + applications. There are no standard Unix configurations. + @ifnothtml +-@xref{AVR Options,, AVR Options, gcc, Using and Porting the GNU Compiler ++@xref{AVR Options,, AVR Options, gcc, Using the GNU Compiler + Collection (GCC)}, + @end ifnothtml + @ifhtml +@@ -2502,8 +2523,8 @@ indicates that you should upgrade to a n + + The Blackfin processor, an Analog Devices DSP. + @ifnothtml +-@xref{Blackfin Options,, Blackfin Options, gcc, Using and Porting the GNU +-Compiler Collection (GCC)}, ++@xref{Blackfin Options,, Blackfin Options, gcc, Using the GNU Compiler ++Collection (GCC)}, + @end ifnothtml + @ifhtml + See ``Blackfin Options'' in the main manual +@@ -2521,8 +2542,8 @@ Texas Instruments TMS320C3x and TMS320C4 + Processors. These are used in embedded applications. There are no + standard Unix configurations. + @ifnothtml +-@xref{TMS320C3x/C4x Options,, TMS320C3x/C4x Options, gcc, Using and +-Porting the GNU Compiler Collection (GCC)}, ++@xref{TMS320C3x/C4x Options,, TMS320C3x/C4x Options, gcc, Using the ++GNU Compiler Collection (GCC)}, + @end ifnothtml + @ifhtml + See ``TMS320C3x/C4x Options'' in the main manual +@@ -2551,7 +2572,7 @@ CRIS is the CPU architecture in Axis Com + series. These are used in embedded applications. + + @ifnothtml +-@xref{CRIS Options,, CRIS Options, gcc, Using and Porting the GNU Compiler ++@xref{CRIS Options,, CRIS Options, gcc, Using the GNU Compiler + Collection (GCC)}, + @end ifnothtml + @ifhtml +--- gcc/doc/invoke.texi 2005-05-19 18:44:04.000000000 +0930 ++++ gcc/doc/invoke.texi 2005-06-01 21:43:42.000000000 +0930 +@@ -625,6 +625,7 @@ See RS/6000 and PowerPC Options. + -maix-struct-return -msvr4-struct-return @gol + -mabi=altivec -mabi=no-altivec @gol + -mabi=spe -mabi=no-spe @gol ++-msecure-plt -mbss-plt @gol + -misel=yes -misel=no @gol + -mspe=yes -mspe=no @gol + -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol +@@ -10515,6 +10516,18 @@ ABI@. + @opindex mabi=no-spe + Disable Booke SPE ABI extensions for the current ABI@. + ++@item -msecure-plt ++@opindex msecure-plt ++Generate code that allows ld and ld.so to build executables and shared ++libraries with non-exec .plt and .got sections. This is a PowerPC ++32-bit SYSV ABI option. ++ ++@item -mbss-plt ++@opindex mbss-plt ++Generate code that uses a BSS .plt section that ld.so fills in, and ++requires .plt and .got sections that are both writable and executable. ++This is a PowerPC 32-bit SYSV ABI option. ++ + @item -misel=@var{yes/no} + @itemx -misel + @opindex misel +--- gcc/config/rs6000/secureplt.h 1970-01-01 09:30:00.000000000 +0930 ++++ gcc/config/rs6000/secureplt.h 2005-05-30 10:29:30.000000000 +0930 +@@ -0,0 +1,21 @@ ++/* Default to -msecure-plt. ++ Copyright (C) 2005 Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt" +--- gcc/config/rs6000/sysv4.h 2005-02-16 09:06:57.000000000 +1030 ++++ gcc/config/rs6000/sysv4.h 2005-05-30 10:52:01.000000000 +0930 +@@ -55,6 +55,7 @@ extern enum rs6000_sdata_type rs6000_sda + #define MASK_REGNAMES 0x02000000 /* Use alternate register names. */ + #define MASK_PROTOTYPE 0x01000000 /* Only prototyped fcns pass variable args. */ + #define MASK_NO_BITFIELD_WORD 0x00800000 /* Bitfields cannot cross word boundaries */ ++#define MASK_SECURE_PLT 0x00400000 /* Use non-exec PLT/GOT. */ + + #define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE) + #define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN) +@@ -149,12 +150,16 @@ extern const char *rs6000_tls_size_strin + N_("Set the PPC_EMB bit in the ELF flags header") }, \ + { "windiss", 0, N_("Use the WindISS simulator") }, \ + { "shlib", 0, N_("no description yet") }, \ ++ { "newlib", 0, N_("no description yet") }, \ + { "64", MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC, \ + N_("Generate 64-bit code") }, \ + { "32", - (MASK_64BIT | MASK_POWERPC64), \ + N_("Generate 32-bit code") }, \ +- EXTRA_SUBTARGET_SWITCHES \ +- { "newlib", 0, N_("no description yet") }, ++ { "secure-plt", MASK_SECURE_PLT, \ ++ N_("Generate code for non-exec PLT and GOT") },\ ++ { "bss-plt", -MASK_SECURE_PLT, \ ++ N_("Generate code for exec BSS PLT") }, \ ++ EXTRA_SUBTARGET_SWITCHES + + /* This is meant to be redefined in the host dependent files. */ + #define EXTRA_SUBTARGET_SWITCHES +@@ -299,6 +304,11 @@ do { \ + error ("-mcall-aixdesc must be big endian"); \ + } \ + \ ++ if (TARGET_SECURE_PLT != (target_flags & MASK_SECURE_PLT)) \ ++ { \ ++ error ("-msecure-plt not supported by your assembler"); \ ++ } \ ++ \ + /* Treat -fPIC the same as -mrelocatable. */ \ + if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \ + target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC; \ +@@ -844,6 +854,10 @@ extern int fixuplabelno; + + #define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big)" + ++#ifndef CC1_SECURE_PLT_DEFAULT_SPEC ++#define CC1_SECURE_PLT_DEFAULT_SPEC "" ++#endif ++ + /* Pass -G xxx to the compiler and set correct endian mode. */ + #define CC1_SPEC "%{G*} \ + %{mlittle|mlittle-endian: %(cc1_endian_little); \ +@@ -856,7 +870,6 @@ extern int fixuplabelno; + mcall-gnu : -mbig %(cc1_endian_big); \ + mcall-i960-old : -mlittle %(cc1_endian_little); \ + : %(cc1_endian_default)} \ +-%{mno-sdata: -msdata=none } \ + %{meabi: %{!mcall-*: -mcall-sysv }} \ + %{!meabi: %{!mno-eabi: \ + %{mrelocatable: -meabi } \ +@@ -868,6 +881,7 @@ extern int fixuplabelno; + %{mcall-openbsd: -mno-eabi }}} \ + %{msdata: -msdata=default} \ + %{mno-sdata: -msdata=none} \ ++%{!mbss-plt: %{!msecure-plt: %(cc1_secure_plt_default)}} \ + %{profile: -p}" + + /* Don't put -Y P,<path> for cross compilers. */ +@@ -1308,6 +1322,7 @@ ncrtn.o%s" + { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ + { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ + { "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \ ++ { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ + { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ + { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ + { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ +--- gcc/config/rs6000/rs6000.h 2005-03-03 08:34:37.000000000 +1030 ++++ gcc/config/rs6000/rs6000.h 2005-05-30 10:52:00.000000000 +0930 +@@ -201,8 +201,8 @@ extern int target_flags; + /* Use single field mfcr instruction. */ + #define MASK_MFCRF 0x00080000 + +-/* The only remaining free bits are 0x00600000. linux64.h uses +- 0x00100000, and sysv4.h uses 0x00800000 -> 0x40000000. ++/* The only remaining free bit is 0x00200000. linux64.h uses ++ 0x00100000, and sysv4.h uses 0x00400000 -> 0x40000000. + 0x80000000 is not available because target_flags is signed. */ + + #define TARGET_POWER (target_flags & MASK_POWER) +@@ -234,6 +234,11 @@ extern int target_flags; + #define TARGET_MFCRF 0 + #endif + ++#ifdef HAVE_AS_REL16 ++#define TARGET_SECURE_PLT (target_flags & MASK_SECURE_PLT) ++#else ++#define TARGET_SECURE_PLT 0 ++#endif + + #define TARGET_32BIT (! TARGET_64BIT) + #define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT) +--- gcc/config/rs6000/rs6000.c 2005-05-11 18:23:48.000000000 +0930 ++++ gcc/config/rs6000/rs6000.c 2005-05-30 10:29:30.000000000 +0930 +@@ -13466,15 +13520,49 @@ rs6000_emit_load_toc_table (int fromprol + rtx dest, insn; + dest = gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM); + +- if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 1) ++ if (TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic) + { +- rtx temp = (fromprolog +- ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM) +- : gen_reg_rtx (Pmode)); +- insn = emit_insn (gen_load_toc_v4_pic_si (temp)); ++ char buf[30]; ++ rtx lab, tmp1, tmp2, got, tempLR; ++ ++ ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno); ++ lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf)); ++ if (flag_pic == 2) ++ got = gen_rtx_SYMBOL_REF (Pmode, toc_label_name); ++ else ++ got = rs6000_got_sym (); ++ tmp1 = tmp2 = dest; ++ if (!fromprolog) ++ { ++ tmp1 = gen_reg_rtx (Pmode); ++ tmp2 = gen_reg_rtx (Pmode); ++ } ++ tempLR = (fromprolog ++ ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM) ++ : gen_reg_rtx (Pmode)); ++ insn = emit_insn (gen_load_toc_v4_PIC_1 (tempLR, lab)); ++ if (fromprolog) ++ rs6000_maybe_dead (insn); ++ insn = emit_move_insn (tmp1, tempLR); ++ if (fromprolog) ++ rs6000_maybe_dead (insn); ++ insn = emit_insn (gen_load_toc_v4_PIC_3b (tmp2, tmp1, got, lab)); ++ if (fromprolog) ++ rs6000_maybe_dead (insn); ++ insn = emit_insn (gen_load_toc_v4_PIC_3c (dest, tmp2, got, lab)); ++ if (fromprolog) ++ rs6000_maybe_dead (insn); ++ } ++ else if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 1) ++ { ++ rtx tempLR = (fromprolog ++ ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM) ++ : gen_reg_rtx (Pmode)); ++ ++ insn = emit_insn (gen_load_toc_v4_pic_si (tempLR)); + if (fromprolog) + rs6000_maybe_dead (insn); +- insn = emit_move_insn (dest, temp); ++ insn = emit_move_insn (dest, tempLR); + if (fromprolog) + rs6000_maybe_dead (insn); + } +@@ -14565,7 +14653,8 @@ rs6000_emit_prologue (void) + + /* If we are using RS6000_PIC_OFFSET_TABLE_REGNUM, we need to set it up. */ + if ((TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0) +- || (DEFAULT_ABI == ABI_V4 && flag_pic == 1 ++ || (DEFAULT_ABI == ABI_V4 ++ && (flag_pic == 1 || (flag_pic && TARGET_SECURE_PLT)) + && regs_ever_live[RS6000_PIC_OFFSET_TABLE_REGNUM])) + { + /* If emit_load_toc_table will use the link register, we need to save +@@ -18082,6 +18171,7 @@ rs6000_elf_declare_function_name (FILE * + } + + if (TARGET_RELOCATABLE ++ && !TARGET_SECURE_PLT + && (get_pool_size () != 0 || current_function_profile) + && uses_TOC ()) + { +--- gcc/config/rs6000/rs6000.md 2005-03-31 21:02:13.000000000 +0930 ++++ gcc/config/rs6000/rs6000.md 2005-05-30 10:29:30.000000000 +0930 +@@ -7653,26 +7653,6 @@ + + ;; Now define ways of moving data around. + +-;; Elf specific ways of loading addresses for non-PIC code. +-;; The output of this could be r0, but we make a very strong +-;; preference for a base register because it will usually +-;; be needed there. +-(define_insn "elf_high" +- [(set (match_operand:SI 0 "gpc_reg_operand" "=b*r") +- (high:SI (match_operand 1 "" "")))] +- "TARGET_ELF && ! TARGET_64BIT" +- "{liu|lis} %0,%1@ha") +- +-(define_insn "elf_low" +- [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r") +- (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b,!*r") +- (match_operand 2 "" "")))] +- "TARGET_ELF && ! TARGET_64BIT" +- "@ +- {cal|la} %0,%2@l(%1) +- {ai|addic} %0,%1,%K2") +- +- + ;; Set up a register with a value from the GOT table + + (define_expand "movsi_got" +@@ -10133,7 +10111,8 @@ + [(set (match_operand:SI 0 "register_operand" "=l") + (match_operand:SI 1 "immediate_operand" "s")) + (use (unspec [(match_dup 1)] UNSPEC_TOC))] +- "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2" ++ "TARGET_ELF && DEFAULT_ABI != ABI_AIX ++ && (flag_pic == 2 || (flag_pic && TARGET_SECURE_PLT))" + "bcl 20,31,%1\\n%1:" + [(set_attr "type" "branch") + (set_attr "length" "4")]) +@@ -10156,6 +10135,23 @@ + "{l|lwz} %0,%2-%3(%1)" + [(set_attr "type" "load")]) + ++(define_insn "load_toc_v4_PIC_3b" ++ [(set (match_operand:SI 0 "gpc_reg_operand" "=b") ++ (plus:SI (match_operand:SI 1 "gpc_reg_operand" "r") ++ (high:SI ++ (minus:SI (match_operand:SI 2 "symbol_ref_operand" "s") ++ (match_operand:SI 3 "symbol_ref_operand" "s")))))] ++ "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic" ++ "{cau|addis} %0,%1,%2-%3@ha") ++ ++(define_insn "load_toc_v4_PIC_3c" ++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r") ++ (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b") ++ (minus:SI (match_operand:SI 2 "symbol_ref_operand" "s") ++ (match_operand:SI 3 "symbol_ref_operand" "s"))))] ++ "TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic" ++ "{cal|addi} %0,%1,%2-%3@l") ++ + + ;; If the TOC is shared over a translation unit, as happens with all + ;; the kinds of PIC that we support, we need to restore the TOC +@@ -10190,6 +10186,26 @@ + rs6000_emit_load_toc_table (FALSE); + DONE; + }") ++ ++;; Elf specific ways of loading addresses for non-PIC code. ++;; The output of this could be r0, but we make a very strong ++;; preference for a base register because it will usually ++;; be needed there. ++(define_insn "elf_high" ++ [(set (match_operand:SI 0 "gpc_reg_operand" "=b*r") ++ (high:SI (match_operand 1 "" "")))] ++ "TARGET_ELF && ! TARGET_64BIT" ++ "{liu|lis} %0,%1@ha") ++ ++(define_insn "elf_low" ++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r") ++ (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b,!*r") ++ (match_operand 2 "" "")))] ++ "TARGET_ELF && ! TARGET_64BIT" ++ "@ ++ {cal|la} %0,%2@l(%1) ++ {ai|addic} %0,%1,%K2") ++ + + ;; A function pointer under AIX is a pointer to a data area whose first word + ;; contains the actual address of the function, whose second word contains a +@@ -10306,6 +10322,25 @@ + + operands[0] = XEXP (operands[0], 0); + ++ if (DEFAULT_ABI == ABI_V4 && TARGET_SECURE_PLT ++ && flag_pic ++ && GET_CODE (operands[0]) == SYMBOL_REF ++ && !SYMBOL_REF_LOCAL_P (operands[0])) ++ { ++ rtx call; ++ rtvec tmp; ++ ++ tmp = gen_rtvec (3, ++ gen_rtx_CALL (VOIDmode, ++ gen_rtx_MEM (SImode, operands[0]), ++ operands[1]), ++ gen_rtx_USE (VOIDmode, operands[2]), ++ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (SImode))); ++ call = emit_call_insn (gen_rtx_PARALLEL (VOIDmode, tmp)); ++ use_reg (&CALL_INSN_FUNCTION_USAGE (call), pic_offset_table_rtx); ++ DONE; ++ } ++ + if (GET_CODE (operands[0]) != SYMBOL_REF + || (DEFAULT_ABI == ABI_AIX && !SYMBOL_REF_FUNCTION_P (operands[0])) + || (DEFAULT_ABI != ABI_DARWIN && (INTVAL (operands[2]) & CALL_LONG) != 0)) +@@ -10354,6 +10389,28 @@ + + operands[1] = XEXP (operands[1], 0); + ++ if (DEFAULT_ABI == ABI_V4 && TARGET_SECURE_PLT ++ && flag_pic ++ && GET_CODE (operands[1]) == SYMBOL_REF ++ && !SYMBOL_REF_LOCAL_P (operands[1])) ++ { ++ rtx call; ++ rtvec tmp; ++ ++ tmp = gen_rtvec (3, ++ gen_rtx_SET (VOIDmode, ++ operands[0], ++ gen_rtx_CALL (VOIDmode, ++ gen_rtx_MEM (SImode, ++ operands[1]), ++ operands[2])), ++ gen_rtx_USE (VOIDmode, operands[3]), ++ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (SImode))); ++ call = emit_call_insn (gen_rtx_PARALLEL (VOIDmode, tmp)); ++ use_reg (&CALL_INSN_FUNCTION_USAGE (call), pic_offset_table_rtx); ++ DONE; ++ } ++ + if (GET_CODE (operands[1]) != SYMBOL_REF + || (DEFAULT_ABI == ABI_AIX && !SYMBOL_REF_FUNCTION_P (operands[1])) + || (DEFAULT_ABI != ABI_DARWIN && (INTVAL (operands[3]) & CALL_LONG) != 0)) +@@ -10624,7 +10681,18 @@ + #if TARGET_MACHO + return output_call(insn, operands, 0, 2); + #else +- return (DEFAULT_ABI == ABI_V4 && flag_pic) ? "bl %z0@plt" : "bl %z0"; ++ if (DEFAULT_ABI == ABI_V4 && flag_pic) ++ { ++ if (TARGET_SECURE_PLT && flag_pic == 2) ++ /* The magic 32768 offset here and in the other sysv call insns ++ corresponds to the offset of r30 in .got2, as given by LCTOC1. ++ See sysv4.h:toc_section. */ ++ return "bl %z0+32768@plt"; ++ else ++ return "bl %z0@plt"; ++ } ++ else ++ return "bl %z0"; + #endif + } + [(set_attr "type" "branch,branch") +@@ -10669,7 +10737,15 @@ + #if TARGET_MACHO + return output_call(insn, operands, 1, 3); + #else +- return (DEFAULT_ABI == ABI_V4 && flag_pic) ? "bl %z1@plt" : "bl %z1"; ++ if (DEFAULT_ABI == ABI_V4 && flag_pic) ++ { ++ if (TARGET_SECURE_PLT && flag_pic == 2) ++ return "bl %z1+32768@plt"; ++ else ++ return "bl %z1@plt"; ++ } ++ else ++ return "bl %z1"; + #endif + } + [(set_attr "type" "branch,branch") +@@ -10884,7 +10960,15 @@ + else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) + output_asm_insn (\"creqv 6,6,6\", operands); + +- return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"b %z0@plt\" : \"b %z0\"; ++ if (DEFAULT_ABI == ABI_V4 && flag_pic) ++ { ++ if (TARGET_SECURE_PLT && flag_pic == 2) ++ return \"b %z0+32768@plt\"; ++ else ++ return \"b %z0@plt\"; ++ } ++ else ++ return \"b %z0\"; + }" + [(set_attr "type" "branch,branch") + (set_attr "length" "4,8")]) +@@ -10930,7 +11014,15 @@ + else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) + output_asm_insn (\"creqv 6,6,6\", operands); + +- return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"b %z1@plt\" : \"b %z1\"; ++ if (DEFAULT_ABI == ABI_V4 && flag_pic) ++ { ++ if (TARGET_SECURE_PLT && flag_pic == 2) ++ return \"b %z1+32768@plt\"; ++ else ++ return \"b %z1@plt\"; ++ } ++ else ++ return \"b %z1\"; + }" + [(set_attr "type" "branch,branch") + (set_attr "length" "4,8")]) +--- gcc/config/rs6000/tramp.asm 2003-06-06 14:41:22.000000000 +0930 ++++ gcc/config/rs6000/tramp.asm 2005-05-24 10:52:09.000000000 +0930 +@@ -44,7 +44,7 @@ + .align 2 + trampoline_initial: + mflr r0 +- bl 1f ++ bcl 20,31,1f + .Lfunc = .-trampoline_initial + .long 0 /* will be replaced with function address */ + .Lchain = .-trampoline_initial +@@ -67,7 +67,7 @@ trampoline_size = .-trampoline_initial + + FUNC_START(__trampoline_setup) + mflr r0 /* save return address */ +- bl .LCF0 /* load up __trampoline_initial into r7 */ ++ bcl 20,31,.LCF0 /* load up __trampoline_initial into r7 */ + .LCF0: + mflr r11 + addi r7,r11,trampoline_initial-4-.LCF0 /* trampoline address -4 */ +@@ -105,6 +105,12 @@ FUNC_START(__trampoline_setup) + blr + + .Labort: ++#if defined SHARED && defined HAVE_AS_REL16 ++ bcl 20,31,1f ++1: mflr r30 ++ addis r30,r30,_GLOBAL_OFFSET_TABLE_-1b@ha ++ addi r30,r30,_GLOBAL_OFFSET_TABLE_-1b@l ++#endif + bl JUMP_TARGET(abort) + FUNC_END(__trampoline_setup) + +--- libffi/src/powerpc/ppc_closure.S 2004-09-03 22:42:23.000000000 +0930 ++++ libffi/src/powerpc/ppc_closure.S 2005-05-24 10:25:49.000000000 +0930 +@@ -57,7 +57,7 @@ ENTRY(ffi_closure_SYSV) + addi %r7,%r1,152 + + # make the call +- bl JUMPTARGET(ffi_closure_helper_SYSV) ++ bl ffi_closure_helper_SYSV@local + + # now r3 contains the return type + # so use it to look up in a table +--- libffi/src/powerpc/sysv.S 2004-09-03 22:42:23.000000000 +0930 ++++ libffi/src/powerpc/sysv.S 2005-05-24 10:25:47.000000000 +0930 +@@ -60,7 +60,7 @@ ENTRY(ffi_call_SYSV) + + /* Call ffi_prep_args_SYSV. */ + mr %r4,%r1 +- bl JUMPTARGET(ffi_prep_args_SYSV) ++ bl ffi_prep_args_SYSV@local + + /* Now do the call. */ + /* Set up cr1 with bits 4-7 of the flags. */ diff --git a/4.0.3/gentoo/17_all_gcc4-dwarf2-usefbreg.patch b/4.0.3/gentoo/17_all_gcc4-dwarf2-usefbreg.patch new file mode 100644 index 0000000..cc5e180 --- /dev/null +++ b/4.0.3/gentoo/17_all_gcc4-dwarf2-usefbreg.patch @@ -0,0 +1,143 @@ +2005-08-10 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (concat_loc_descriptor): Add can_use_fbreg argument, + pass it down to loc_descriptor. + (loc_descriptor): Pass can_use_fbreg to concat_loc_descriptor. + (containing_function_has_frame_base): Move earlier in the file. + (loc_descriptor_from_tree_1): Use containing_function_has_frame_base + instead of always assuming fbreg can't be used. + +--- gcc/dwarf2out.c.jj 2005-08-06 10:39:55.000000000 +0200 ++++ gcc/dwarf2out.c 2005-08-10 10:23:26.000000000 +0200 +@@ -3982,7 +3982,7 @@ static dw_loc_descr_ref int_loc_descript + static dw_loc_descr_ref based_loc_descr (unsigned, HOST_WIDE_INT, bool); + static int is_based_loc (rtx); + static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode, bool); +-static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx); ++static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx, bool); + static dw_loc_descr_ref loc_descriptor (rtx, bool); + static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int); + static dw_loc_descr_ref loc_descriptor_from_tree (tree); +@@ -8806,11 +8806,11 @@ mem_loc_descriptor (rtx rtl, enum machin + This is typically a complex variable. */ + + static dw_loc_descr_ref +-concat_loc_descriptor (rtx x0, rtx x1) ++concat_loc_descriptor (rtx x0, rtx x1, bool can_use_fbreg) + { + dw_loc_descr_ref cc_loc_result = NULL; +- dw_loc_descr_ref x0_ref = loc_descriptor (x0, false); +- dw_loc_descr_ref x1_ref = loc_descriptor (x1, false); ++ dw_loc_descr_ref x0_ref = loc_descriptor (x0, can_use_fbreg); ++ dw_loc_descr_ref x1_ref = loc_descriptor (x1, can_use_fbreg); + + if (x0_ref == 0 || x1_ref == 0) + return 0; +@@ -8824,6 +8824,29 @@ concat_loc_descriptor (rtx x0, rtx x1) + return cc_loc_result; + } + ++/* Return true if DECL's containing function has a frame base attribute. ++ Return false otherwise. */ ++ ++static bool ++containing_function_has_frame_base (tree decl) ++{ ++ tree declcontext = decl_function_context (decl); ++ dw_die_ref context; ++ dw_attr_ref attr; ++ ++ if (!declcontext) ++ return false; ++ ++ context = lookup_decl_die (declcontext); ++ if (!context) ++ return false; ++ ++ for (attr = context->die_attr; attr; attr = attr->dw_attr_next) ++ if (attr->dw_attr == DW_AT_frame_base) ++ return true; ++ return false; ++} ++ + /* Output a proper Dwarf location descriptor for a variable or parameter + which is either allocated in a register or in a memory location. For a + register, we just generate an OP_REG and the register number. For a +@@ -8859,7 +8882,8 @@ loc_descriptor (rtx rtl, bool can_use_fb + break; + + case CONCAT: +- loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1)); ++ loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1), ++ can_use_fbreg); + break; + + case VAR_LOCATION: +@@ -9019,10 +9043,11 @@ loc_descriptor_from_tree_1 (tree loc, in + else + { + enum machine_mode mode; ++ bool can_use_fb = containing_function_has_frame_base (loc); + + /* Certain constructs can only be represented at top-level. */ + if (want_address == 2) +- return loc_descriptor (rtl, false); ++ return loc_descriptor (rtl, can_use_fb); + + mode = GET_MODE (rtl); + if (MEM_P (rtl)) +@@ -9030,7 +9055,7 @@ loc_descriptor_from_tree_1 (tree loc, in + rtl = XEXP (rtl, 0); + have_address = 1; + } +- ret = mem_loc_descriptor (rtl, mode, false); ++ ret = mem_loc_descriptor (rtl, mode, can_use_fb); + } + } + break; +@@ -9104,12 +9129,14 @@ loc_descriptor_from_tree_1 (tree loc, in + /* Get an RTL for this, if something has been emitted. */ + rtx rtl = lookup_constant_def (loc); + enum machine_mode mode; ++ bool can_use_fb; + + if (!rtl || !MEM_P (rtl)) + return 0; ++ can_use_fb = containing_function_has_frame_base (loc); + mode = GET_MODE (rtl); + rtl = XEXP (rtl, 0); +- ret = mem_loc_descriptor (rtl, mode, false); ++ ret = mem_loc_descriptor (rtl, mode, can_use_fb); + have_address = 1; + break; + } +@@ -10073,29 +10100,6 @@ rtl_for_decl_location (tree decl) + return rtl; + } + +-/* Return true if DECL's containing function has a frame base attribute. +- Return false otherwise. */ +- +-static bool +-containing_function_has_frame_base (tree decl) +-{ +- tree declcontext = decl_function_context (decl); +- dw_die_ref context; +- dw_attr_ref attr; +- +- if (!declcontext) +- return false; +- +- context = lookup_decl_die (declcontext); +- if (!context) +- return false; +- +- for (attr = context->die_attr; attr; attr = attr->dw_attr_next) +- if (attr->dw_attr == DW_AT_frame_base) +- return true; +- return false; +-} +- + /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value + data attribute for a variable or a parameter. We generate the + DW_AT_const_value attribute only in those cases where the given variable diff --git a/4.0.3/gentoo/18_all_gcc4-dwarf2-prefer-1elt-vartracking.patch b/4.0.3/gentoo/18_all_gcc4-dwarf2-prefer-1elt-vartracking.patch new file mode 100644 index 0000000..38c4a64 --- /dev/null +++ b/4.0.3/gentoo/18_all_gcc4-dwarf2-prefer-1elt-vartracking.patch @@ -0,0 +1,47 @@ +2005-08-10 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (add_location_or_const_value_attribute): Prefer + locations gathered by var-tracking in single entry loc_list + over loc_descriptor_from_tree. + +--- gcc/dwarf2out.c.jj 2005-08-10 10:23:26.000000000 +0200 ++++ gcc/dwarf2out.c 2005-08-10 17:33:35.000000000 +0200 +@@ -10235,16 +10235,7 @@ add_location_or_const_value_attribute (d + return; + } + +- /* We couldn't get any rtl, and we had no >1 element location list, so try +- directly generating the location description from the tree. */ +- descr = loc_descriptor_from_tree (decl); +- if (descr) +- { +- add_AT_location_description (die, attr, descr); +- return; +- } +- +- /* Lastly, if we have tried to generate the location otherwise, and it ++ /* If we have tried to generate the location otherwise, and it + didn't work out (we wouldn't be here if we did), and we have a one entry + location list, try generating a location from that. */ + if (loc_list && loc_list->first) +@@ -10253,7 +10244,19 @@ add_location_or_const_value_attribute (d + descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note), + can_use_fb); + if (descr) +- add_AT_location_description (die, attr, descr); ++ { ++ add_AT_location_description (die, attr, descr); ++ return; ++ } ++ } ++ ++ /* We couldn't get any rtl, so try directly generating the location ++ description from the tree. */ ++ descr = loc_descriptor_from_tree (decl); ++ if (descr) ++ { ++ add_AT_location_description (die, attr, descr); ++ return; + } + } + diff --git a/4.0.3/gentoo/19_all_gcc4-dwarf2-pr20268.patch b/4.0.3/gentoo/19_all_gcc4-dwarf2-pr20268.patch new file mode 100644 index 0000000..c8f7ef4 --- /dev/null +++ b/4.0.3/gentoo/19_all_gcc4-dwarf2-pr20268.patch @@ -0,0 +1,102 @@ +2005-03-30 James E. Wilson <wilson@specifixinc.com> + + PR debug/20268 + * dwarf2out.c (add_high_low_attributes): New function, extracted from + gen_lexical_block_die. + (gen_lexical_block_die, gen_inlined_subroutine_die): Call it. + +--- gcc/dwarf2out.c 30 Mar 2005 21:34:23 -0000 1.575 ++++ gcc/dwarf2out.c 30 Mar 2005 23:08:17 -0000 1.576 +@@ -11578,41 +11578,49 @@ gen_label_die (tree decl, dw_die_ref con + } + } + +-/* Generate a DIE for a lexical block. */ ++/* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die. ++ Add low_pc and high_pc attributes to the DIE for a block STMT. */ + +-static void +-gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth) ++static inline void ++add_high_low_attributes (tree stmt, dw_die_ref die) + { +- dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt); + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + +- if (! BLOCK_ABSTRACT (stmt)) ++ if (BLOCK_FRAGMENT_CHAIN (stmt)) + { +- if (BLOCK_FRAGMENT_CHAIN (stmt)) +- { +- tree chain; ++ tree chain; + +- add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt)); ++ add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt)); + +- chain = BLOCK_FRAGMENT_CHAIN (stmt); +- do +- { +- add_ranges (chain); +- chain = BLOCK_FRAGMENT_CHAIN (chain); +- } +- while (chain); +- add_ranges (NULL); +- } +- else ++ chain = BLOCK_FRAGMENT_CHAIN (stmt); ++ do + { +- ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, +- BLOCK_NUMBER (stmt)); +- add_AT_lbl_id (stmt_die, DW_AT_low_pc, label); +- ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, +- BLOCK_NUMBER (stmt)); +- add_AT_lbl_id (stmt_die, DW_AT_high_pc, label); ++ add_ranges (chain); ++ chain = BLOCK_FRAGMENT_CHAIN (chain); + } ++ while (chain); ++ add_ranges (NULL); ++ } ++ else ++ { ++ ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, ++ BLOCK_NUMBER (stmt)); ++ add_AT_lbl_id (die, DW_AT_low_pc, label); ++ ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, ++ BLOCK_NUMBER (stmt)); ++ add_AT_lbl_id (die, DW_AT_high_pc, label); + } ++} ++ ++/* Generate a DIE for a lexical block. */ ++ ++static void ++gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth) ++{ ++ dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt); ++ ++ if (! BLOCK_ABSTRACT (stmt)) ++ add_high_low_attributes (stmt, stmt_die); + + decls_for_scope (stmt, stmt_die, depth); + } +@@ -11634,15 +11642,10 @@ gen_inlined_subroutine_die (tree stmt, d + { + dw_die_ref subr_die + = new_die (DW_TAG_inlined_subroutine, context_die, stmt); +- char label[MAX_ARTIFICIAL_LABEL_BYTES]; + + add_abstract_origin_attribute (subr_die, decl); +- ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, +- BLOCK_NUMBER (stmt)); +- add_AT_lbl_id (subr_die, DW_AT_low_pc, label); +- ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, +- BLOCK_NUMBER (stmt)); +- add_AT_lbl_id (subr_die, DW_AT_high_pc, label); ++ add_high_low_attributes (stmt, subr_die); ++ + decls_for_scope (stmt, subr_die, depth); + current_function_has_inlines = 1; + } diff --git a/4.0.3/gentoo/29_all_gcc4-pr19664.patch b/4.0.3/gentoo/29_all_gcc4-pr19664.patch new file mode 100644 index 0000000..ef7cf28 --- /dev/null +++ b/4.0.3/gentoo/29_all_gcc4-pr19664.patch @@ -0,0 +1,1984 @@ +diff -urN libstdc++-v3-orig/include/c_std/std_cassert.h libstdc++-v3/include/c_std/std_cassert.h +--- libstdc++-v3-orig/include/c_std/std_cassert.h 2003-12-09 04:44:35.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cassert.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -44,5 +44,8 @@ + // No include guards on this header... + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <assert.h> ++ ++#pragma GCC visibility pop +diff -urN libstdc++-v3-orig/include/c_std/std_cctype.h libstdc++-v3/include/c_std/std_cctype.h +--- libstdc++-v3-orig/include/c_std/std_cctype.h 2003-12-09 04:44:35.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cctype.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,7 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -44,6 +45,7 @@ + #define _GLIBCXX_CCTYPE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <ctype.h> +@@ -80,4 +82,6 @@ + using ::toupper; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cerrno.h libstdc++-v3/include/c_std/std_cerrno.h +--- libstdc++-v3-orig/include/c_std/std_cerrno.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_cerrno.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,7 @@ + // The -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -44,6 +45,7 @@ + #define _GLIBCXX_CERRNO 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <errno.h> + +@@ -52,4 +54,6 @@ + #define errno errno + #endif + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cfloat.h libstdc++-v3/include/c_std/std_cfloat.h +--- libstdc++-v3-orig/include/c_std/std_cfloat.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_cfloat.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,7 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -44,7 +45,10 @@ + #define _GLIBCXX_CFLOAT 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <float.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_climits.h libstdc++-v3/include/c_std/std_climits.h +--- libstdc++-v3-orig/include/c_std/std_climits.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_climits.h 2005-05-20 11:29:55.000000000 +0200 +@@ -45,7 +45,9 @@ + #define _GLIBCXX_CLIMITS 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <limits.h> + ++#pragma GCC visibility pop + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_clocale.h libstdc++-v3/include/c_std/std_clocale.h +--- libstdc++-v3-orig/include/c_std/std_clocale.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_clocale.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CLOCALE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <locale.h> + +@@ -59,4 +60,6 @@ + using ::localeconv; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cmath.h libstdc++-v3/include/c_std/std_cmath.h +--- libstdc++-v3-orig/include/c_std/std_cmath.h 2005-02-13 11:25:02.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cmath.h 2005-05-20 11:29:55.000000000 +0200 +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CMATH 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/cpp_type_traits.h> +@@ -574,4 +575,6 @@ + # include <bits/cmath.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_csetjmp.h libstdc++-v3/include/c_std/std_csetjmp.h +--- libstdc++-v3-orig/include/c_std/std_csetjmp.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_csetjmp.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CSETJMP 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <setjmp.h> + +@@ -62,4 +63,6 @@ + using ::longjmp; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_csignal.h libstdc++-v3/include/c_std/std_csignal.h +--- libstdc++-v3-orig/include/c_std/std_csignal.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_csignal.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CSIGNAL 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <signal.h> + +@@ -58,4 +59,6 @@ + using ::raise; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cstdarg.h libstdc++-v3/include/c_std/std_cstdarg.h +--- libstdc++-v3-orig/include/c_std/std_cstdarg.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_cstdarg.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,7 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -44,6 +45,7 @@ + #define _GLIBCXX_CSTDARG 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <stdarg.h> + +@@ -57,4 +59,6 @@ + using ::va_list; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cstddef.h libstdc++-v3/include/c_std/std_cstddef.h +--- libstdc++-v3-orig/include/c_std/std_cstddef.h 2003-12-09 04:44:35.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cstddef.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,7 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -44,6 +45,7 @@ + #define _GLIBCXX_CSTDDEF 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <stddef.h> + +@@ -53,4 +55,6 @@ + using ::size_t; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cstdio.h libstdc++-v3/include/c_std/std_cstdio.h +--- libstdc++-v3-orig/include/c_std/std_cstdio.h 2005-03-24 06:45:44.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cstdio.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CSTDIO 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -183,4 +184,6 @@ + } + #endif + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cstdlib.h libstdc++-v3/include/c_std/std_cstdlib.h +--- libstdc++-v3-orig/include/c_std/std_cstdlib.h 2004-08-02 22:28:21.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_cstdlib.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CSTDLIB 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -217,4 +218,6 @@ + } + #endif + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cstring.h libstdc++-v3/include/c_std/std_cstring.h +--- libstdc++-v3-orig/include/c_std/std_cstring.h 2003-12-09 04:44:35.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cstring.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CSTRING 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <cstddef> + +@@ -125,4 +126,6 @@ + { return __builtin_strstr(const_cast<const char*>(__s1), __s2); } + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_ctime.h libstdc++-v3/include/c_std/std_ctime.h +--- libstdc++-v3-orig/include/c_std/std_ctime.h 2003-07-23 17:28:44.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_ctime.h 2005-05-20 11:29:55.000000000 +0200 +@@ -1,6 +1,6 @@ + // -*- C++ -*- forwarding header. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CTIME 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <cstddef> + +@@ -78,4 +79,6 @@ + using ::strftime; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cwchar.h libstdc++-v3/include/c_std/std_cwchar.h +--- libstdc++-v3-orig/include/c_std/std_cwchar.h 2004-07-20 10:47:42.000000000 +0200 ++++ libstdc++-v3/include/c_std/std_cwchar.h 2005-05-20 11:29:55.000000000 +0200 +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CWCHAR 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -270,4 +271,6 @@ + + #endif //_GLIBCXX_USE_WCHAR_T + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/c_std/std_cwctype.h libstdc++-v3/include/c_std/std_cwctype.h +--- libstdc++-v3-orig/include/c_std/std_cwctype.h 2005-03-24 06:45:45.000000000 +0100 ++++ libstdc++-v3/include/c_std/std_cwctype.h 2005-05-20 11:31:40.000000000 +0200 +@@ -45,6 +45,7 @@ + #define _GLIBCXX_CWCTYPE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + +@@ -105,4 +106,6 @@ + } + #endif //_GLIBCXX_USE_WCHAR_T + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/bitset libstdc++-v3/include/debug/bitset +--- libstdc++-v3-orig/include/debug/bitset 2005-05-09 14:45:05.000000000 +0200 ++++ libstdc++-v3/include/debug/bitset 2005-05-20 11:30:03.000000000 +0200 +@@ -31,6 +31,8 @@ + #ifndef _GLIBCXX_DEBUG_BITSET + #define _GLIBCXX_DEBUG_BITSET + ++#pragma GCC visibility push(default) ++ + #include <bitset> + #include <debug/safe_sequence.h> + #include <debug/safe_iterator.h> +@@ -318,4 +320,6 @@ + { return __os << __x._M_base(); } + } // namespace __gnu_debug_def + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/deque libstdc++-v3/include/debug/deque +--- libstdc++-v3-orig/include/debug/deque 2004-04-16 21:04:04.000000000 +0200 ++++ libstdc++-v3/include/debug/deque 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging deque implementation -*- C++ -*- + +-// Copyright (C) 2003, 2004 ++// Copyright (C) 2003, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,6 +31,8 @@ + #ifndef _GLIBCXX_DEBUG_DEQUE + #define _GLIBCXX_DEBUG_DEQUE 1 + ++#pragma GCC visibility push(default) ++ + #include <deque> + #include <debug/safe_sequence.h> + #include <debug/safe_iterator.h> +@@ -383,4 +385,6 @@ + { __lhs.swap(__rhs); } + } // namespace __gnu_debug_def + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/hash_map libstdc++-v3/include/debug/hash_map +--- libstdc++-v3-orig/include/debug/hash_map 2003-11-11 21:09:09.000000000 +0100 ++++ libstdc++-v3/include/debug/hash_map 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging hash_map/hash_multimap implementation -*- C++ -*- + +-// Copyright (C) 2003 ++// Copyright (C) 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,8 +31,12 @@ + #ifndef _GLIBCXX_DEBUG_HASH_MAP + #define _GLIBCXX_DEBUG_HASH_MAP 1 + ++#pragma GCC visibility push(default) ++ + #include <hash_map> + #include <debug/dbg_hash_map.h> + #include <debug/dbg_hash_multimap.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/hash_set libstdc++-v3/include/debug/hash_set +--- libstdc++-v3-orig/include/debug/hash_set 2003-12-09 05:26:28.000000000 +0100 ++++ libstdc++-v3/include/debug/hash_set 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging hash_set/hash_multiset implementation -*- C++ -*- + +-// Copyright (C) 2003 ++// Copyright (C) 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,8 +31,12 @@ + #ifndef _GLIBCXX_DEBUG_HASH_SET + #define _GLIBCXX_DEBUG_HASH_SET 1 + ++#pragma GCC visibility push(default) ++ + #include <hash_set> + #include <debug/dbg_hash_set.h> + #include <debug/dbg_hash_multiset.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/list libstdc++-v3/include/debug/list +--- libstdc++-v3-orig/include/debug/list 2004-04-16 21:04:04.000000000 +0200 ++++ libstdc++-v3/include/debug/list 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging list implementation -*- C++ -*- + +-// Copyright (C) 2003, 2004 ++// Copyright (C) 2003, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,6 +31,8 @@ + #ifndef _GLIBCXX_DEBUG_LIST + #define _GLIBCXX_DEBUG_LIST 1 + ++#pragma GCC visibility push(default) ++ + #include <list> + #include <bits/stl_algo.h> + #include <debug/safe_sequence.h> +@@ -502,4 +504,6 @@ + { __lhs.swap(__rhs); } + } // namespace __gnu_debug_def + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/map libstdc++-v3/include/debug/map +--- libstdc++-v3-orig/include/debug/map 2003-11-11 21:09:09.000000000 +0100 ++++ libstdc++-v3/include/debug/map 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging map/multimap implementation -*- C++ -*- + +-// Copyright (C) 2003 ++// Copyright (C) 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,8 +31,12 @@ + #ifndef _GLIBCXX_DEBUG_MAP + #define _GLIBCXX_DEBUG_MAP 1 + ++#pragma GCC visibility push(default) ++ + #include <map> + #include <debug/map.h> + #include <debug/multimap.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/set libstdc++-v3/include/debug/set +--- libstdc++-v3-orig/include/debug/set 2003-11-11 21:09:09.000000000 +0100 ++++ libstdc++-v3/include/debug/set 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging set/multiset implementation -*- C++ -*- + +-// Copyright (C) 2003 ++// Copyright (C) 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,8 +31,12 @@ + #ifndef _GLIBCXX_DEBUG_SET + #define _GLIBCXX_DEBUG_SET 1 + ++#pragma GCC visibility push(default) ++ + #include <set> + #include <debug/set.h> + #include <debug/multiset.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/string libstdc++-v3/include/debug/string +--- libstdc++-v3-orig/include/debug/string 2003-12-09 05:26:28.000000000 +0100 ++++ libstdc++-v3/include/debug/string 2005-05-20 11:30:03.000000000 +0200 +@@ -31,6 +31,8 @@ + #ifndef _GLIBCXX_DEBUG_STRING + #define _GLIBCXX_DEBUG_STRING 1 + ++#pragma GCC visibility push(default) ++ + #include <string> + #include <debug/safe_sequence.h> + #include <debug/safe_iterator.h> +@@ -998,4 +1000,6 @@ + } + } // namespace __gnu_debug + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/debug/vector libstdc++-v3/include/debug/vector +--- libstdc++-v3-orig/include/debug/vector 2004-04-16 21:04:04.000000000 +0200 ++++ libstdc++-v3/include/debug/vector 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Debugging vector implementation -*- C++ -*- + +-// Copyright (C) 2003, 2004 ++// Copyright (C) 2003, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -31,6 +31,8 @@ + #ifndef _GLIBCXX_DEBUG_VECTOR + #define _GLIBCXX_DEBUG_VECTOR 1 + ++#pragma GCC visibility push(default) ++ + #include <vector> + #include <debug/safe_sequence.h> + #include <debug/safe_iterator.h> +@@ -409,4 +411,6 @@ + { __lhs.swap(__rhs); } + } // namespace __gnu_debug_def + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/algorithm libstdc++-v3/include/ext/algorithm +--- libstdc++-v3-orig/include/ext/algorithm 2004-11-24 05:11:11.000000000 +0100 ++++ libstdc++-v3/include/ext/algorithm 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Algorithm extensions -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _EXT_ALGORITHM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <algorithm> + +@@ -523,4 +524,6 @@ + } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif /* _EXT_ALGORITHM */ +diff -urN libstdc++-v3-orig/include/ext/array_allocator.h libstdc++-v3/include/ext/array_allocator.h +--- libstdc++-v3-orig/include/ext/array_allocator.h 2005-05-18 19:42:24.000000000 +0200 ++++ libstdc++-v3/include/ext/array_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _ARRAY_ALLOCATOR_H + #define _ARRAY_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <cstddef> + #include <new> + #include <bits/functexcept.h> +@@ -143,4 +145,6 @@ + { return false; } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/bitmap_allocator.h libstdc++-v3/include/ext/bitmap_allocator.h +--- libstdc++-v3-orig/include/ext/bitmap_allocator.h 2005-04-15 06:07:45.000000000 +0200 ++++ libstdc++-v3/include/ext/bitmap_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _BITMAP_ALLOCATOR_H + #define _BITMAP_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + // For std::size_t, and ptrdiff_t. + #include <cstddef> + +@@ -1287,6 +1289,8 @@ + + } + ++#pragma GCC visibility pop ++ + #endif + + // LocalWords: namespace GTHREADS bool const gthread endif Mutex mutex +diff -urN libstdc++-v3-orig/include/ext/debug_allocator.h libstdc++-v3/include/ext/debug_allocator.h +--- libstdc++-v3-orig/include/ext/debug_allocator.h 2004-11-05 20:58:02.000000000 +0100 ++++ libstdc++-v3/include/ext/debug_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -48,6 +48,8 @@ + #ifndef _DEBUG_ALLOCATOR_H + #define _DEBUG_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <stdexcept> + + namespace __gnu_cxx +@@ -122,4 +124,6 @@ + }; + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/functional libstdc++-v3/include/ext/functional +--- libstdc++-v3-orig/include/ext/functional 2004-11-24 05:11:11.000000000 +0100 ++++ libstdc++-v3/include/ext/functional 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Functional extensions -*- C++ -*- + +-// Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _EXT_FUNCTIONAL 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <functional> + +@@ -421,5 +422,8 @@ + mem_fun1_ref(_Ret (_Tp::*__f)(_Arg) const) + { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } + } // namespace __gnu_cxx ++ ++#pragma GCC visibility pop ++ + #endif + +diff -urN libstdc++-v3-orig/include/ext/hash_map libstdc++-v3/include/ext/hash_map +--- libstdc++-v3-orig/include/ext/hash_map 2004-11-24 05:11:11.000000000 +0100 ++++ libstdc++-v3/include/ext/hash_map 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Hashing map implementation -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,8 @@ + #ifndef _HASH_MAP + #define _HASH_MAP 1 + ++#pragma GCC visibility push(default) ++ + #include <ext/hashtable.h> + #include <bits/concept_check.h> + +@@ -617,4 +619,7 @@ + { return *this; } + }; + } // namespace std ++ ++#pragma GCC visibility push(default) ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/hash_set libstdc++-v3/include/ext/hash_set +--- libstdc++-v3-orig/include/ext/hash_set 2004-11-24 05:11:11.000000000 +0100 ++++ libstdc++-v3/include/ext/hash_set 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Hashing set implementation -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,8 @@ + #ifndef _HASH_SET + #define _HASH_SET 1 + ++#pragma GCC visibility push(default) ++ + #include <ext/hashtable.h> + #include <bits/concept_check.h> + +@@ -583,4 +585,7 @@ + operator++(int) { return *this; } + }; + } // namespace std ++ ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/iterator libstdc++-v3/include/ext/iterator +--- libstdc++-v3-orig/include/ext/iterator 2004-11-24 05:11:13.000000000 +0100 ++++ libstdc++-v3/include/ext/iterator 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // HP/SGI iterator extensions -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _EXT_ITERATOR 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/concept_check.h> + #include <iterator> +@@ -113,5 +114,7 @@ + } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif + +diff -urN libstdc++-v3-orig/include/ext/malloc_allocator.h libstdc++-v3/include/ext/malloc_allocator.h +--- libstdc++-v3-orig/include/ext/malloc_allocator.h 2004-12-05 01:25:18.000000000 +0100 ++++ libstdc++-v3/include/ext/malloc_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,7 @@ + // Allocator that wraps "C" malloc -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2004, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -34,6 +35,8 @@ + #ifndef _MALLOC_ALLOCATOR_H + #define _MALLOC_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <cstdlib> + #include <new> + #include <bits/functexcept.h> +@@ -122,4 +125,6 @@ + { return false; } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/memory libstdc++-v3/include/ext/memory +--- libstdc++-v3-orig/include/ext/memory 2004-11-24 05:11:13.000000000 +0100 ++++ libstdc++-v3/include/ext/memory 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Memory extensions -*- C++ -*- + +-// Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _EXT_MEMORY 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <memory> + #include <bits/stl_tempbuf.h> +@@ -194,5 +195,7 @@ + }; + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif + +diff -urN libstdc++-v3-orig/include/ext/mt_allocator.h libstdc++-v3/include/ext/mt_allocator.h +--- libstdc++-v3-orig/include/ext/mt_allocator.h 2005-04-28 09:50:46.000000000 +0200 ++++ libstdc++-v3/include/ext/mt_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _MT_ALLOCATOR_H + #define _MT_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <new> + #include <cstdlib> + #include <bits/functexcept.h> +@@ -760,4 +762,6 @@ + #undef __thread_default + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/new_allocator.h libstdc++-v3/include/ext/new_allocator.h +--- libstdc++-v3-orig/include/ext/new_allocator.h 2004-11-24 05:11:13.000000000 +0100 ++++ libstdc++-v3/include/ext/new_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Allocator that wraps operator new -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -34,6 +34,8 @@ + #ifndef _NEW_ALLOCATOR_H + #define _NEW_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <new> + #include <bits/functexcept.h> + +@@ -118,4 +120,6 @@ + { return false; } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/numeric libstdc++-v3/include/ext/numeric +--- libstdc++-v3-orig/include/ext/numeric 2004-11-24 05:11:13.000000000 +0100 ++++ libstdc++-v3/include/ext/numeric 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Numeric extensions -*- C++ -*- + +-// Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _EXT_NUMERIC 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/concept_check.h> + #include <numeric> +@@ -146,5 +147,7 @@ + } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif + +diff -urN libstdc++-v3-orig/include/ext/pod_char_traits.h libstdc++-v3/include/ext/pod_char_traits.h +--- libstdc++-v3-orig/include/ext/pod_char_traits.h 2005-04-15 04:06:21.000000000 +0200 ++++ libstdc++-v3/include/ext/pod_char_traits.h 2005-05-20 11:30:03.000000000 +0200 +@@ -37,6 +37,8 @@ + #ifndef _POD_CHAR_TRAITS_H + #define _POD_CHAR_TRAITS_H 1 + ++#pragma GCC visibility push(default) ++ + #include <string> + + namespace __gnu_cxx +@@ -182,4 +184,6 @@ + }; + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/pool_allocator.h libstdc++-v3/include/ext/pool_allocator.h +--- libstdc++-v3-orig/include/ext/pool_allocator.h 2005-04-28 09:50:47.000000000 +0200 ++++ libstdc++-v3/include/ext/pool_allocator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Allocators -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -47,6 +47,8 @@ + #ifndef _POOL_ALLOCATOR_H + #define _POOL_ALLOCATOR_H 1 + ++#pragma GCC visibility push(default) ++ + #include <bits/c++config.h> + #include <cstdlib> + #include <new> +@@ -252,4 +254,6 @@ + } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/rb_tree libstdc++-v3/include/ext/rb_tree +--- libstdc++-v3-orig/include/ext/rb_tree 2004-11-24 05:11:13.000000000 +0100 ++++ libstdc++-v3/include/ext/rb_tree 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // rb_tree extension -*- C++ -*- + +-// Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -62,6 +62,7 @@ + #define _RB_TREE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/stl_tree.h> + +@@ -94,4 +95,6 @@ + }; + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/rope libstdc++-v3/include/ext/rope +--- libstdc++-v3-orig/include/ext/rope 2005-04-28 09:50:47.000000000 +0200 ++++ libstdc++-v3/include/ext/rope 2005-05-20 11:30:03.000000000 +0200 +@@ -48,6 +48,8 @@ + #ifndef _ROPE + #define _ROPE 1 + ++#pragma GCC visibility push(default) ++ + #include <bits/stl_algobase.h> + #include <bits/stl_construct.h> + #include <bits/stl_uninitialized.h> +@@ -2898,4 +2900,6 @@ + + # include <ext/ropeimpl.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/slist libstdc++-v3/include/ext/slist +--- libstdc++-v3-orig/include/ext/slist 2005-01-31 17:21:50.000000000 +0100 ++++ libstdc++-v3/include/ext/slist 2005-05-20 11:30:03.000000000 +0200 +@@ -49,6 +49,8 @@ + #ifndef _SLIST + #define _SLIST 1 + ++#pragma GCC visibility push(default) ++ + #include <bits/stl_algobase.h> + #include <bits/allocator.h> + #include <bits/stl_construct.h> +@@ -1069,4 +1071,7 @@ + }; + + } // namespace std ++ ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/stdio_filebuf.h libstdc++-v3/include/ext/stdio_filebuf.h +--- libstdc++-v3-orig/include/ext/stdio_filebuf.h 2004-11-23 10:18:39.000000000 +0100 ++++ libstdc++-v3/include/ext/stdio_filebuf.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // File descriptor layer for filebuf -*- C++ -*- + +-// Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -35,6 +35,7 @@ + #define _STDIO_FILEBUF_H 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <fstream> + +@@ -158,4 +159,6 @@ + } + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/ext/stdio_sync_filebuf.h libstdc++-v3/include/ext/stdio_sync_filebuf.h +--- libstdc++-v3-orig/include/ext/stdio_sync_filebuf.h 2004-11-23 10:18:39.000000000 +0100 ++++ libstdc++-v3/include/ext/stdio_sync_filebuf.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Iostreams wrapper for stdio FILE* -*- C++ -*- + +-// Copyright (C) 2003, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -35,6 +35,7 @@ + #define _STDIO_SYNC_FILEBUF_H 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <streambuf> + #include <unistd.h> +@@ -279,4 +280,6 @@ + #endif + } // namespace __gnu_cxx + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/std/std_algorithm.h libstdc++-v3/include/std/std_algorithm.h +--- libstdc++-v3-orig/include/std/std_algorithm.h 2004-11-24 05:11:14.000000000 +0100 ++++ libstdc++-v3/include/std/std_algorithm.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <algorithm> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,10 +61,13 @@ + #define _GLIBCXX_ALGORITHM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/stl_algobase.h> + #include <bits/stl_construct.h> + #include <bits/stl_uninitialized.h> + #include <bits/stl_algo.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_ALGORITHM */ +diff -urN libstdc++-v3-orig/include/std/std_bitset.h libstdc++-v3/include/std/std_bitset.h +--- libstdc++-v3-orig/include/std/std_bitset.h 2005-05-10 03:58:11.000000000 +0200 ++++ libstdc++-v3/include/std/std_bitset.h 2005-05-20 11:30:03.000000000 +0200 +@@ -48,6 +48,7 @@ + #define _GLIBCXX_BITSET 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <cstddef> // For size_t + #include <cstring> // For memset +@@ -1300,4 +1301,6 @@ + # include <debug/bitset> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_BITSET */ +diff -urN libstdc++-v3-orig/include/std/std_complex.h libstdc++-v3/include/std/std_complex.h +--- libstdc++-v3-orig/include/std/std_complex.h 2005-03-16 00:38:54.000000000 +0100 ++++ libstdc++-v3/include/std/std_complex.h 2005-05-20 11:30:03.000000000 +0200 +@@ -43,6 +43,7 @@ + #define _GLIBCXX_COMPLEX 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/cpp_type_traits.h> +@@ -1483,4 +1484,6 @@ + : _M_value(__z.__rep()) { } + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_COMPLEX */ +diff -urN libstdc++-v3-orig/include/std/std_deque.h libstdc++-v3/include/std/std_deque.h +--- libstdc++-v3-orig/include/std/std_deque.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_deque.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <deque> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_DEQUE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/functexcept.h> + #include <bits/stl_algobase.h> +@@ -77,4 +78,6 @@ + # include <debug/deque> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_DEQUE */ +diff -urN libstdc++-v3-orig/include/std/std_fstream.h libstdc++-v3/include/std/std_fstream.h +--- libstdc++-v3-orig/include/std/std_fstream.h 2005-03-07 17:58:41.000000000 +0100 ++++ libstdc++-v3/include/std/std_fstream.h 2005-05-20 11:30:03.000000000 +0200 +@@ -40,6 +40,7 @@ + #define _GLIBCXX_FSTREAM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <istream> + #include <ostream> +@@ -782,4 +783,6 @@ + # include <bits/fstream.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_FSTREAM */ +diff -urN libstdc++-v3-orig/include/std/std_functional.h libstdc++-v3/include/std/std_functional.h +--- libstdc++-v3-orig/include/std/std_functional.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_functional.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <functional> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -49,9 +49,12 @@ + #define _GLIBCXX_FUNCTIONAL 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> + #include <bits/stl_function.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_FUNCTIONAL */ +diff -urN libstdc++-v3-orig/include/std/std_iomanip.h libstdc++-v3/include/std/std_iomanip.h +--- libstdc++-v3-orig/include/std/std_iomanip.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_iomanip.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Standard stream manipulators -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003 ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -40,6 +40,7 @@ + #define _GLIBCXX_IOMANIP 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <istream> +@@ -296,4 +297,6 @@ + #endif + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_IOMANIP */ +diff -urN libstdc++-v3-orig/include/std/std_ios.h libstdc++-v3/include/std/std_ios.h +--- libstdc++-v3-orig/include/std/std_ios.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_ios.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,7 @@ + // Iostreams base classes -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -39,6 +40,7 @@ + #define _GLIBCXX_IOS 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <iosfwd> + #include <exception> // For ios_base::failure +@@ -49,4 +51,6 @@ + #include <streambuf> + #include <bits/basic_ios.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_IOS */ +diff -urN libstdc++-v3-orig/include/std/std_iosfwd.h libstdc++-v3/include/std/std_iosfwd.h +--- libstdc++-v3-orig/include/std/std_iosfwd.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_iosfwd.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Forwarding declarations -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003 ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -40,6 +40,7 @@ + #define _GLIBCXX_IOSFWD 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/c++locale.h> +@@ -164,4 +165,6 @@ + /** @} */ + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_IOSFWD */ +diff -urN libstdc++-v3-orig/include/std/std_iostream.h libstdc++-v3/include/std/std_iostream.h +--- libstdc++-v3-orig/include/std/std_iostream.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_iostream.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,7 @@ + // Standard iostream objects -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -39,6 +40,7 @@ + #define _GLIBCXX_IOSTREAM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <ostream> +@@ -76,4 +78,6 @@ + static ios_base::Init __ioinit; + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_IOSTREAM */ +diff -urN libstdc++-v3-orig/include/std/std_istream.h libstdc++-v3/include/std/std_istream.h +--- libstdc++-v3-orig/include/std/std_istream.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_istream.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Input streams -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2004 ++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -40,6 +40,7 @@ + #define _GLIBCXX_ISTREAM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <ios> + #include <limits> // For numeric_limits +@@ -814,4 +815,6 @@ + # include <bits/istream.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_ISTREAM */ +diff -urN libstdc++-v3-orig/include/std/std_iterator.h libstdc++-v3/include/std/std_iterator.h +--- libstdc++-v3-orig/include/std/std_iterator.h 2004-11-24 05:11:15.000000000 +0100 ++++ libstdc++-v3/include/std/std_iterator.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <iterator> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_ITERATOR 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -72,4 +73,6 @@ + #include <bits/stream_iterator.h> + #include <bits/streambuf_iterator.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_ITERATOR */ +diff -urN libstdc++-v3-orig/include/std/std_limits.h libstdc++-v3/include/std/std_limits.h +--- libstdc++-v3-orig/include/std/std_limits.h 2005-02-01 02:00:39.000000000 +0100 ++++ libstdc++-v3/include/std/std_limits.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,7 @@ + // The template and inlines for the -*- C++ -*- numeric_limits classes. + +-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -43,6 +44,7 @@ + #define _GLIBCXX_NUMERIC_LIMITS 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + +@@ -1156,4 +1158,6 @@ + #undef __glibcxx_digits + #undef __glibcxx_digits10 + ++#pragma GCC visibility pop ++ + #endif // _GLIBCXX_NUMERIC_LIMITS +diff -urN libstdc++-v3-orig/include/std/std_list.h libstdc++-v3/include/std/std_list.h +--- libstdc++-v3-orig/include/std/std_list.h 2004-11-24 05:11:16.000000000 +0100 ++++ libstdc++-v3/include/std/std_list.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <list> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_LIST 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/functexcept.h> + #include <bits/stl_algobase.h> +@@ -77,5 +78,7 @@ + # include <debug/list> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_LIST */ + +diff -urN libstdc++-v3-orig/include/std/std_locale.h libstdc++-v3/include/std/std_locale.h +--- libstdc++-v3-orig/include/std/std_locale.h 2004-11-24 05:11:16.000000000 +0100 ++++ libstdc++-v3/include/std/std_locale.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,7 @@ + // Locale support -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 1997, 1998, 1999, 2002, 2003, 2005 ++// Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -39,10 +40,13 @@ + #define _GLIBCXX_LOCALE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/localefwd.h> + #include <bits/locale_classes.h> + #include <bits/locale_facets.h> + #include <bits/locale_facets.tcc> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_LOCALE */ +diff -urN libstdc++-v3-orig/include/std/std_map.h libstdc++-v3/include/std/std_map.h +--- libstdc++-v3-orig/include/std/std_map.h 2004-11-24 05:11:16.000000000 +0100 ++++ libstdc++-v3/include/std/std_map.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <map> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_MAP 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/stl_tree.h> + #include <bits/stl_map.h> +@@ -70,4 +71,6 @@ + # include <debug/map> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_MAP */ +diff -urN libstdc++-v3-orig/include/std/std_memory.h libstdc++-v3/include/std/std_memory.h +--- libstdc++-v3-orig/include/std/std_memory.h 2004-11-24 05:11:16.000000000 +0100 ++++ libstdc++-v3/include/std/std_memory.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <memory> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -49,6 +49,7 @@ + #define _GLIBCXX_MEMORY 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/stl_algobase.h> + #include <bits/allocator.h> +@@ -370,4 +371,6 @@ + }; + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_MEMORY */ +diff -urN libstdc++-v3-orig/include/std/std_numeric.h libstdc++-v3/include/std/std_numeric.h +--- libstdc++-v3-orig/include/std/std_numeric.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_numeric.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <numeric> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_NUMERIC 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -68,4 +69,6 @@ + #include <bits/stl_function.h> + #include <bits/stl_numeric.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_NUMERIC */ +diff -urN libstdc++-v3-orig/include/std/std_ostream.h libstdc++-v3/include/std/std_ostream.h +--- libstdc++-v3-orig/include/std/std_ostream.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_ostream.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Output streams -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -40,6 +40,7 @@ + #define _GLIBCXX_OSTREAM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <ios> + +@@ -544,4 +545,6 @@ + # include <bits/ostream.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_OSTREAM */ +diff -urN libstdc++-v3-orig/include/std/std_queue.h libstdc++-v3/include/std/std_queue.h +--- libstdc++-v3-orig/include/std/std_queue.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_queue.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <queue> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_QUEUE 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/functexcept.h> +@@ -74,4 +75,6 @@ + #include <vector> + #include <bits/stl_queue.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_QUEUE */ +diff -urN libstdc++-v3-orig/include/std/std_set.h libstdc++-v3/include/std/std_set.h +--- libstdc++-v3-orig/include/std/std_set.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_set.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <set> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,7 +61,8 @@ + #define _GLIBCXX_SET 1 + + #pragma GCC system_header +- ++#pragma GCC visibility push(default) ++ + #include <bits/stl_tree.h> + #include <bits/stl_set.h> + #include <bits/stl_multiset.h> +@@ -70,4 +71,6 @@ + # include <debug/set> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_SET */ +diff -urN libstdc++-v3-orig/include/std/std_sstream.h libstdc++-v3/include/std/std_sstream.h +--- libstdc++-v3-orig/include/std/std_sstream.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_sstream.h 2005-05-20 11:30:03.000000000 +0200 +@@ -40,6 +40,7 @@ + #define _GLIBCXX_SSTREAM 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <istream> + #include <ostream> +@@ -602,4 +603,6 @@ + # include <bits/sstream.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_SSTREAM */ +diff -urN libstdc++-v3-orig/include/std/std_stack.h libstdc++-v3/include/std/std_stack.h +--- libstdc++-v3-orig/include/std/std_stack.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_stack.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <stack> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_STACK 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/stl_algobase.h> + #include <bits/allocator.h> +@@ -69,4 +70,6 @@ + #include <deque> + #include <bits/stl_stack.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_STACK */ +diff -urN libstdc++-v3-orig/include/std/std_stdexcept.h libstdc++-v3/include/std/std_stdexcept.h +--- libstdc++-v3-orig/include/std/std_stdexcept.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_stdexcept.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Standard exception classes -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -39,6 +39,7 @@ + #define _GLIBCXX_STDEXCEPT 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <exception> + #include <string> +@@ -144,4 +145,6 @@ + }; + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_STDEXCEPT */ +diff -urN libstdc++-v3-orig/include/std/std_streambuf.h libstdc++-v3/include/std/std_streambuf.h +--- libstdc++-v3-orig/include/std/std_streambuf.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_streambuf.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // Stream buffer classes -*- C++ -*- + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -40,6 +40,7 @@ + #define _GLIBXX_STREAMBUF 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <iosfwd> +@@ -797,4 +798,6 @@ + # include <bits/streambuf.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_STREAMBUF */ +diff -urN libstdc++-v3-orig/include/std/std_string.h libstdc++-v3/include/std/std_string.h +--- libstdc++-v3-orig/include/std/std_string.h 2005-01-31 17:21:52.000000000 +0100 ++++ libstdc++-v3/include/std/std_string.h 2005-05-20 11:30:03.000000000 +0200 +@@ -40,6 +40,7 @@ + #define _GLIBCXX_STRING 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/stringfwd.h> +@@ -56,4 +57,6 @@ + # include <bits/basic_string.tcc> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_STRING */ +diff -urN libstdc++-v3-orig/include/std/std_utility.h libstdc++-v3/include/std/std_utility.h +--- libstdc++-v3-orig/include/std/std_utility.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_utility.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <utility> -*- C++ -*- + +-// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,9 +61,12 @@ + #define _GLIBCXX_UTILITY 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <bits/stl_relops.h> + #include <bits/stl_pair.h> + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_UTILITY */ +diff -urN libstdc++-v3-orig/include/std/std_valarray.h libstdc++-v3/include/std/std_valarray.h +--- libstdc++-v3-orig/include/std/std_valarray.h 2004-11-24 05:11:21.000000000 +0100 ++++ libstdc++-v3/include/std/std_valarray.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // The template and inlines for the -*- C++ -*- valarray class. + +-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004 ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free +@@ -38,6 +38,7 @@ + #define _GLIBCXX_VALARRAY 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/c++config.h> + #include <cstddef> +@@ -1007,4 +1008,6 @@ + + } // namespace std + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_VALARRAY */ +diff -urN libstdc++-v3-orig/include/std/std_vector.h libstdc++-v3/include/std/std_vector.h +--- libstdc++-v3-orig/include/std/std_vector.h 2004-11-24 05:11:22.000000000 +0100 ++++ libstdc++-v3/include/std/std_vector.h 2005-05-20 11:30:03.000000000 +0200 +@@ -1,6 +1,6 @@ + // <vector> -*- C++ -*- + +-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the +@@ -61,6 +61,7 @@ + #define _GLIBCXX_VECTOR 1 + + #pragma GCC system_header ++#pragma GCC visibility push(default) + + #include <bits/functexcept.h> + #include <bits/stl_algobase.h> +@@ -78,5 +79,7 @@ + # include <debug/vector> + #endif + ++#pragma GCC visibility pop ++ + #endif /* _GLIBCXX_VECTOR */ + +diff -urN libstdc++-v3-orig/include/tr1/array libstdc++-v3/include/tr1/array +--- libstdc++-v3-orig/include/tr1/array 2004-11-23 10:18:41.000000000 +0100 ++++ libstdc++-v3/include/tr1/array 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _ARRAY + #define _ARRAY 1 + ++#pragma GCC visibility push(default) ++ + #include <new> + #include <iterator> + #include <algorithm> +@@ -202,4 +204,6 @@ + } // namespace std::tr1 + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/tr1/functional libstdc++-v3/include/tr1/functional +--- libstdc++-v3-orig/include/tr1/functional 2005-04-02 04:02:28.000000000 +0200 ++++ libstdc++-v3/include/tr1/functional 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _TR1_FUNCTIONAL + #define _TR1_FUNCTIONAL 1 + ++#pragma GCC visibility push(default) ++ + #include "../functional" + #include <typeinfo> + #include <tr1/type_traits> +@@ -1161,4 +1163,6 @@ + } + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/tr1/memory libstdc++-v3/include/tr1/memory +--- libstdc++-v3-orig/include/tr1/memory 2005-04-05 13:08:53.000000000 +0200 ++++ libstdc++-v3/include/tr1/memory 2005-05-20 11:34:03.000000000 +0200 +@@ -30,6 +30,8 @@ + #ifndef _TR1_MEMORY + #define _TR1_MEMORY 1 + ++#pragma GCC visibility push(default) ++ + #include "../memory" + #include <functional> // std::less + #include <exception> // std::exception +@@ -48,4 +50,6 @@ + + #include <tr1/boost_shared_ptr.h> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/tr1/tuple libstdc++-v3/include/tr1/tuple +--- libstdc++-v3-orig/include/tr1/tuple 2005-04-01 05:35:58.000000000 +0200 ++++ libstdc++-v3/include/tr1/tuple 2005-05-20 11:30:03.000000000 +0200 +@@ -36,6 +36,8 @@ + #ifndef _TUPLE + #define _TUPLE 1 + ++#pragma GCC visibility push(default) ++ + #include <tr1/utility> + #include <tr1/ref_fwd.h> + +@@ -272,4 +274,6 @@ + + #include <tr1/functional> + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/tr1/type_traits libstdc++-v3/include/tr1/type_traits +--- libstdc++-v3-orig/include/tr1/type_traits 2005-04-29 00:35:09.000000000 +0200 ++++ libstdc++-v3/include/tr1/type_traits 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _TYPE_TRAITS + #define _TYPE_TRAITS 1 + ++#pragma GCC visibility push(default) ++ + #include <bits/c++config.h> + #include <tr1/type_traits_fwd.h> + +@@ -703,4 +705,6 @@ + } + } + ++#pragma GCC visibility pop ++ + #endif +diff -urN libstdc++-v3-orig/include/tr1/unordered_map libstdc++-v3/include/tr1/unordered_map +--- libstdc++-v3-orig/include/tr1/unordered_map 2005-02-22 18:07:07.000000000 +0100 ++++ libstdc++-v3/include/tr1/unordered_map 2005-05-20 11:34:50.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef GNU_LIBSTDCXX_TR1_UNORDERED_MAP_ + #define GNU_LIBSTDCXX_TR1_UNORDERED_MAP_ + ++#pragma GCC visibility push(default) ++ + #include <tr1/hashtable> + #include <tr1/functional> + #include <tr1/functional> +@@ -163,4 +165,6 @@ + + } } + ++#pragma GCC visibility pop ++ + #endif /* GNU_LIBSTDCXX_TR1_UNORDERED_MAP_ */ +diff -urN libstdc++-v3-orig/include/tr1/unordered_set libstdc++-v3/include/tr1/unordered_set +--- libstdc++-v3-orig/include/tr1/unordered_set 2005-02-22 18:07:07.000000000 +0100 ++++ libstdc++-v3/include/tr1/unordered_set 2005-05-20 11:35:14.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef GNU_LIBSTDCXX_TR1_UNORDERED_SET_ + #define GNU_LIBSTDCXX_TR1_UNORDERED_SET_ + ++#pragma GCC visibility push(default) ++ + #include <tr1/hashtable> + #include <tr1/functional> + #include <memory> +@@ -157,4 +159,6 @@ + + } } + ++#pragma GCC visibility pop ++ + #endif /* GNU_LIBSTDCXX_TR1_UNORDERED_SET_ */ +diff -urN libstdc++-v3-orig/include/tr1/utility libstdc++-v3/include/tr1/utility +--- libstdc++-v3-orig/include/tr1/utility 2005-02-22 18:07:07.000000000 +0100 ++++ libstdc++-v3/include/tr1/utility 2005-05-20 11:30:03.000000000 +0200 +@@ -34,6 +34,8 @@ + #ifndef _TR1_UTILITY + #define _TR1_UTILITY 1 + ++#pragma GCC visibility push(default) ++ + #include "../utility" + + namespace std +@@ -93,6 +95,8 @@ + get(const pair<_Tp1, _Tp2>& __in) + { return __pair_get<_Int>::__const_get(__in); } + } +-} ++} ++ ++#pragma GCC visibility pop + + #endif +diff -urN libstdc++-v3-orig/testsuite/20_util/memory/auto_ptr/assign_neg.cc libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc +--- libstdc++-v3-orig/testsuite/20_util/memory/auto_ptr/assign_neg.cc 2004-11-24 05:11:23.000000000 +0100 ++++ libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc 2005-05-20 11:48:10.000000000 +0200 +@@ -46,5 +46,5 @@ + test01(); + return 0; + } +-// { dg-error "candidates" "" { target *-*-* } 223 } +-// { dg-error "std::auto_ptr" "" { target *-*-* } 353 } ++// { dg-error "candidates" "" { target *-*-* } 224 } ++// { dg-error "std::auto_ptr" "" { target *-*-* } 354 } diff --git a/4.0.3/gentoo/32_all_gcc4-pr20815.patch b/4.0.3/gentoo/32_all_gcc4-pr20815.patch new file mode 100644 index 0000000..2753d8e --- /dev/null +++ b/4.0.3/gentoo/32_all_gcc4-pr20815.patch @@ -0,0 +1,97 @@ +From: Jan Hubicka <jh at suse dot cz> +To: gcc-patches at gcc dot gnu dot org +Date: Sun, 30 Oct 2005 17:47:39 +0100 +Subject: PR profile/28015 (invalid checksum wrt random seed) + +Hi, +the problem in testcase is checksum differ because of random seed. +coverage.c already has some logic to strip down random sseds but +obviously it is not enought for C++. This patch improve it somewhat. I +am still unsure if it works enought, but fixes testcase (that uses io so +it is not bet for testsuite), so I will commit it if there are no +complains till tomorrow. + +profiledbootstrapped i686-pc-gnu-linux, bootstrapped/regtested +x86_64-linux +Honza + +2005-10-30 Jan Hubicka <jh@suse.cz> + PR profile/20815 + * coverage.c (coverage_checksum_string): Fix code to stip random seeds + from symbol names while computing checkup. + +Index: coverage.c +=================================================================== +--- gcc/coverage.c (revision 106013) ++++ gcc/coverage.c (working copy) +@@ -445,36 +445,42 @@ coverage_checksum_string (unsigned chksu + as the checksums are used only for sanity checking. */ + for (i = 0; string[i]; i++) + { ++ int offset = 0; ++ if (!strncmp (string + i, "_GLOBAL__N_", 11)) ++ offset = 11; + if (!strncmp (string + i, "_GLOBAL__", 9)) +- for (i = i + 9; string[i]; i++) +- if (string[i]=='_') +- { +- int y; +- unsigned seed; +- int scan; ++ offset = 9; + +- for (y = 1; y < 9; y++) +- if (!(string[i + y] >= '0' && string[i + y] <= '9') +- && !(string[i + y] >= 'A' && string[i + y] <= 'F')) +- break; +- if (y != 9 || string[i + 9] != '_') +- continue; +- for (y = 10; y < 18; y++) +- if (!(string[i + y] >= '0' && string[i + y] <= '9') +- && !(string[i + y] >= 'A' && string[i + y] <= 'F')) +- break; +- if (y != 18) +- continue; +- scan = sscanf (string + i + 10, "%X", &seed); +- gcc_assert (scan); +- if (seed != crc32_string (0, flag_random_seed)) +- continue; +- string = dup = xstrdup (string); +- for (y = 10; y < 18; y++) +- dup[i + y] = '0'; +- break; +- } +- break; ++ /* C++ namespaces do have scheme: ++ _GLOBAL__N_<filename>_<wrongmagicnumber>_<magicnumber>functionname ++ since filename might contain extra underscores there seems ++ to be no better chance then walk all possible offsets looking ++ for magicnuber. */ ++ if (offset) ++ for (;string[offset]; offset++) ++ for (i = i + offset; string[i]; i++) ++ if (string[i]=='_') ++ { ++ int y; ++ ++ for (y = 1; y < 9; y++) ++ if (!(string[i + y] >= '0' && string[i + y] <= '9') ++ && !(string[i + y] >= 'A' && string[i + y] <= 'F')) ++ break; ++ if (y != 9 || string[i + 9] != '_') ++ continue; ++ for (y = 10; y < 18; y++) ++ if (!(string[i + y] >= '0' && string[i + y] <= '9') ++ && !(string[i + y] >= 'A' && string[i + y] <= 'F')) ++ break; ++ if (y != 18) ++ continue; ++ if (!dup) ++ string = dup = xstrdup (string); ++ for (y = 10; y < 18; y++) ++ dup[i + y] = '0'; ++ } ++ break; + } + + chksum = crc32_string (chksum, string); diff --git a/4.0.3/gentoo/33_all_gcc4-pr16104.patch b/4.0.3/gentoo/33_all_gcc4-pr16104.patch new file mode 100644 index 0000000..7f10332 --- /dev/null +++ b/4.0.3/gentoo/33_all_gcc4-pr16104.patch @@ -0,0 +1,98 @@ +2005-01-13 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/16104 + * expr.c (convert_move): Handle vector from resp. to if mode + sizes differ. + + * gcc.c-torture/execute/20050113-1.c: New test. + +--- gcc/expr.c.jj 2005-01-04 15:41:28.000000000 +0100 ++++ gcc/expr.c 2005-01-13 14:38:42.431843676 +0100 +@@ -364,7 +364,27 @@ convert_move (rtx to, rtx from, int unsi + + if (VECTOR_MODE_P (to_mode) || VECTOR_MODE_P (from_mode)) + { +- gcc_assert (GET_MODE_BITSIZE (from_mode) == GET_MODE_BITSIZE (to_mode)); ++ if (GET_MODE_BITSIZE (from_mode) != GET_MODE_BITSIZE (to_mode)) ++ { ++ if (VECTOR_MODE_P (from_mode)) ++ { ++ enum machine_mode new_mode; ++ ++ new_mode = mode_for_size (GET_MODE_BITSIZE (from_mode), ++ MODE_INT, 0); ++ from = simplify_gen_subreg (new_mode, from, from_mode, 0); ++ } ++ if (VECTOR_MODE_P (to_mode)) ++ { ++ enum machine_mode new_mode; ++ ++ new_mode = mode_for_size (GET_MODE_BITSIZE (to_mode), ++ MODE_INT, 0); ++ to = simplify_gen_subreg (new_mode, to, to_mode, 0); ++ } ++ convert_move (to, from, unsignedp); ++ return; ++ } + + if (VECTOR_MODE_P (to_mode)) + from = simplify_gen_subreg (to_mode, from, GET_MODE (from), 0); +--- gcc/testsuite/gcc.c-torture/execute/20050113-1.c.jj 2005-01-13 15:51:09.194383356 +0100 ++++ gcc/testsuite/gcc.c-torture/execute/20050113-1.c 2005-01-13 15:37:22.000000000 +0100 +@@ -0,0 +1,56 @@ ++/* PR rtl-optimization/16104 */ ++ ++extern void abort (void); ++ ++typedef int V2SI __attribute__ ((vector_size (8))); ++typedef short V2HI __attribute__ ((vector_size (4))); ++ ++int ++test1 (void) ++{ ++ return (long long) (V2SI) 0LL; ++} ++ ++int ++test2 (V2SI x) ++{ ++ return (long long) x; ++} ++ ++V2SI ++test3 (void) ++{ ++ return (V2SI) (long long) (int) (V2HI) 0; ++} ++ ++V2SI ++test4 (V2HI x) ++{ ++ return (V2SI) (long long) (int) x; ++} ++ ++int ++main (void) ++{ ++ if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8) ++ return 0; ++ ++ if (test1 () != 0) ++ abort (); ++ ++ V2SI x = { 2, 2 }; ++ if (test2 (x) != 2) ++ abort (); ++ ++ union { V2SI x; int y[2]; } u; ++ u.x = test3 (); ++ if (u.y[0] != 0 || u.y[1] != 0) ++ abort (); ++ ++ V2HI y = { 4, 4 }; ++ union { V2SI x; long long y; } v; ++ v.x = test4 (y); ++ if (v.y != 0x40004) ++ abort (); ++ return 0; ++} diff --git a/4.0.3/gentoo/34_all_gcc4-pr22889.patch b/4.0.3/gentoo/34_all_gcc4-pr22889.patch new file mode 100644 index 0000000..7de3228 --- /dev/null +++ b/4.0.3/gentoo/34_all_gcc4-pr22889.patch @@ -0,0 +1,49 @@ +GTK code in gcj requires pango even in non-cairo code + +http://bugs.gentoo.org/110002 +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22889 + +--- libjava/configure.ac ++++ libjava/configure.ac +@@ -550,10 +550,10 @@ + if test "x${enable_gtk_cairo}" = xyes + then + PKG_CHECK_MODULES(CAIRO, cairo) +- PKG_CHECK_MODULES(PANGOFT2, pangoft2) + fi + AC_SUBST(CAIRO_LIBS) + AC_SUBST(CAIRO_CFLAGS) ++PKG_CHECK_MODULES(PANGOFT2, pangoft2) + AC_SUBST(PANGOFT2_LIBS) + AC_SUBST(PANGOFT2_CFLAGS) + +--- libjava/configure ++++ libjava/configure +@@ -8095,10 +8096,13 @@ + { { echo "$as_me:$LINENO: error: Library requirements (cairo) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 + echo "$as_me: error: Library requirements (cairo) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} + { (exit 1); exit 1; }; } + fi + ++fi ++ ++ + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +@@ -8193,13 +8197,10 @@ + { { echo "$as_me:$LINENO: error: Library requirements (pangoft2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 + echo "$as_me: error: Library requirements (pangoft2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} + { (exit 1); exit 1; }; } + fi + +-fi +- +- + + + + # FIXME: this should be _libs on some hosts. + libsubdir=.libs diff --git a/4.0.3/gentoo/36_all_gcc41-pr19664.patch b/4.0.3/gentoo/36_all_gcc41-pr19664.patch new file mode 100644 index 0000000..93fe49e --- /dev/null +++ b/4.0.3/gentoo/36_all_gcc41-pr19664.patch @@ -0,0 +1,23 @@ +2005-05-17 H.J. Lu <hongjiu.lu@intel.com> + + PR C++/19664 + * decl2.c (determine_visibility): Don't set visibility to + hidden if it has been set explicitly by user. + +--- gcc/cp/decl2.c 2005-12-16 21:16:25.000000000 -0500 ++++ gcc/cp/decl2.c 2005-12-16 21:21:07.000000000 -0500 +@@ -1650,8 +1650,12 @@ + && DECL_DECLARED_INLINE_P (decl) + && visibility_options.inlines_hidden) + { +- DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; +- DECL_VISIBILITY_SPECIFIED (decl) = 1; ++ /* Don't change it if it has been set explicitly by user. */ ++ if (!DECL_VISIBILITY_SPECIFIED (decl)) ++ { ++ DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; ++ DECL_VISIBILITY_SPECIFIED (decl) = 1; ++ } + } + else if (CLASSTYPE_VISIBILITY_SPECIFIED (class_type)) + { diff --git a/4.0.3/gentoo/51_all_gcc-3.4-libiberty-pic.patch b/4.0.3/gentoo/51_all_gcc-3.4-libiberty-pic.patch new file mode 100644 index 0000000..c210b7c --- /dev/null +++ b/4.0.3/gentoo/51_all_gcc-3.4-libiberty-pic.patch @@ -0,0 +1,10 @@ +--- libiberty/Makefile.in ++++ libiberty/Makefile.in +@@ -225,6 +225,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA + $(AR) $(AR_FLAGS) $(TARGETLIB) \ + $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ + $(RANLIB) $(TARGETLIB); \ ++ cp $(TARGETLIB) ../ ; \ + cd ..; \ + else true; fi + diff --git a/4.0.3/gentoo/54_all_300-libstdc++-pic.patch b/4.0.3/gentoo/54_all_300-libstdc++-pic.patch new file mode 100644 index 0000000..a764ce5 --- /dev/null +++ b/4.0.3/gentoo/54_all_300-libstdc++-pic.patch @@ -0,0 +1,51 @@ +# DP: Build and install libstdc++_pic.a library. + +--- gcc/libstdc++-v3/src/Makefile.am ++++ gcc/libstdc++-v3/src/Makefile.am +@@ -214,6 +214,12 @@ + $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@ + + ++install-exec-local: ++ifeq ($(enable_shared),yes) ++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o ++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) ++endif ++ + # Added bits to build debug library. + if GLIBCXX_BUILD_DEBUG + all-local: build_debug +--- gcc/libstdc++-v3/src/Makefile.in ++++ gcc/libstdc++-v3/src/Makefile.in +@@ -625,7 +625,7 @@ + + install-data-am: install-data-local + +-install-exec-am: install-toolexeclibLTLIBRARIES ++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local + + install-info: install-info-am + +@@ -664,7 +664,7 @@ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ +- uninstall-toolexeclibLTLIBRARIES ++ uninstall-toolexeclibLTLIBRARIES install-exec-local + + @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP) + @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver +@@ -743,6 +743,13 @@ + install_debug: + (cd ${debugdir} && $(MAKE) \ + toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ++ ++install-exec-local: ++ifeq ($(enable_shared),yes) ++ $(AR) cru libstdc++_pic.a *.o $(top_builddir)/libsupc++/*.o ++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) ++endif ++ + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: diff --git a/4.0.3/gentoo/61_all_gcc4-ia64-noteGNUstack.patch b/4.0.3/gentoo/61_all_gcc4-ia64-noteGNUstack.patch new file mode 100644 index 0000000..17cc7ef --- /dev/null +++ b/4.0.3/gentoo/61_all_gcc4-ia64-noteGNUstack.patch @@ -0,0 +1,88 @@ +2004-09-20 Jakub Jelinek <jakub@redhat.com> + + * config/rs6000/ppc-asm.h: Add .note.GNU-stack section also + on ppc64-linux. + + * config/ia64/lib1funcs.asm: Add .note.GNU-stack section on + ia64-linux. + * config/ia64/crtbegin.asm: Likewise. + * config/ia64/crtend.asm: Likewise. + * config/ia64/crti.asm: Likewise. + * config/ia64/crtn.asm: Likewise. + +2004-05-14 Jakub Jelinek <jakub@redhat.com> + + * config/ia64/linux.h (TARGET_ASM_FILE_END): Define. + +--- gcc/config/ia64/linux.h.jj 2004-05-14 07:21:27.000000000 -0400 ++++ gcc/config/ia64/linux.h 2004-05-14 09:21:09.000000000 -0400 +@@ -5,6 +5,8 @@ + + #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux"); + ++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack ++ + /* This is for -profile to use -lc_p instead of -lc. */ + #undef CC1_SPEC + #define CC1_SPEC "%{profile:-p} %{G*}" +--- gcc/config/rs6000/ppc-asm.h.jj 2003-06-04 18:40:59.000000000 +0200 ++++ gcc/config/rs6000/ppc-asm.h 2004-09-20 14:17:47.259396058 +0200 +@@ -158,7 +158,7 @@ GLUE(.L,name): \ + .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) + #endif + +-#if defined __linux__ && !defined __powerpc64__ ++#if defined __linux__ + .section .note.GNU-stack + .previous + #endif +--- gcc/config/ia64/lib1funcs.asm.jj 2003-10-27 11:45:17.000000000 +0100 ++++ gcc/config/ia64/lib1funcs.asm 2004-09-20 14:26:28.094132706 +0200 +@@ -741,3 +741,7 @@ __floattitf: + .endp __floattitf + + #endif ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +--- gcc/config/ia64/crtend.asm.jj 2004-05-20 14:36:14.000000000 +0200 ++++ gcc/config/ia64/crtend.asm 2004-09-20 14:25:57.329580329 +0200 +@@ -113,3 +113,7 @@ __do_global_ctors_aux: + + br.ret.sptk.many rp + .endp __do_global_ctors_aux ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +--- gcc/config/ia64/crti.asm.jj 2003-04-02 17:14:15.000000000 +0200 ++++ gcc/config/ia64/crti.asm 2004-09-20 14:26:06.852894092 +0200 +@@ -64,3 +64,7 @@ _fini: + .body + + # end of crti.asm ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +--- gcc/config/ia64/crtbegin.asm.jj 2004-05-20 14:36:14.000000000 +0200 ++++ gcc/config/ia64/crtbegin.asm 2004-09-20 14:25:47.105390566 +0200 +@@ -246,3 +246,7 @@ __do_jv_register_classes: + .weak __cxa_finalize + #endif + .weak _Jv_RegisterClasses ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +--- gcc/config/ia64/crtn.asm.jj 2003-04-02 17:14:15.000000000 +0200 ++++ gcc/config/ia64/crtn.asm 2004-09-20 14:26:16.381206878 +0200 +@@ -54,3 +54,7 @@ + br.ret.sptk.many b0 + + # end of crtn.asm ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif diff --git a/4.0.3/gentoo/62_all_gcc4-noteGNUstack.patch b/4.0.3/gentoo/62_all_gcc4-noteGNUstack.patch new file mode 100644 index 0000000..bbc38b9 --- /dev/null +++ b/4.0.3/gentoo/62_all_gcc4-noteGNUstack.patch @@ -0,0 +1,182 @@ +2005-02-08 Jakub Jelinek <jakub@redhat.com> + + * src/alpha/osf.S: Add .note.GNU-stack on Linux. + * src/s390/sysv.S: Likewise. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/linux64_closure.S: Likewise. + * src/powerpc/ppc_closure.S: Likewise. + * src/powerpc/sysv.S: Likewise. + * src/x86/unix64.S: Likewise. + * src/x86/sysv.S: Likewise. + * src/sparc/v8.S: Likewise. + * src/sparc/v9.S: Likewise. + * src/m68k/sysv.S: Likewise. + * src/ia64/unix.S: Likewise. + * src/arm/sysv.S: Likewise. + + * ia64_save_regs_in_stack.s: Moved to... + * ia64_save_regs_in_stack.S: ... this. Add .note.GNU-stack + on Linux. + +--- libffi/src/alpha/osf.S.jj 2003-10-23 09:55:21.000000000 +0200 ++++ libffi/src/alpha/osf.S 2005-02-08 16:12:40.215425842 +0100 +@@ -352,4 +352,8 @@ $LASFDE3: + .byte 0x12 # uleb128 0x12 + .align 3 + $LEFDE3: ++ ++#ifdef __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif + #endif +--- libffi/src/s390/sysv.S.jj 2003-10-23 09:55:21.000000000 +0200 ++++ libffi/src/s390/sysv.S 2005-02-08 16:22:30.810943388 +0100 +@@ -427,3 +427,6 @@ ffi_closure_SYSV: + + #endif + ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/powerpc/linux64.S.jj 2004-09-03 12:35:54.000000000 +0200 ++++ libffi/src/powerpc/linux64.S 2005-02-08 16:18:41.998808639 +0100 +@@ -174,3 +174,7 @@ ffi_call_LINUX64: + .align 3 + .LEFDE1: + #endif ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/powerpc/linux64_closure.S.jj 2004-09-03 12:35:54.000000000 +0200 ++++ libffi/src/powerpc/linux64_closure.S 2005-02-08 16:18:53.821697060 +0100 +@@ -203,3 +203,7 @@ ffi_closure_LINUX64: + .align 3 + .LEFDE1: + #endif ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/powerpc/ppc_closure.S.jj 2004-09-03 12:35:54.000000000 +0200 ++++ libffi/src/powerpc/ppc_closure.S 2005-02-08 16:18:25.734713428 +0100 +@@ -248,3 +248,7 @@ END(ffi_closure_SYSV) + .LEFDE1: + + #endif ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/powerpc/sysv.S.jj 2004-09-03 12:35:54.000000000 +0200 ++++ libffi/src/powerpc/sysv.S 2005-02-08 16:18:13.673867518 +0100 +@@ -187,3 +187,7 @@ END(ffi_call_SYSV) + .align 2 + .LEFDE1: + #endif ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/x86/unix64.S.jj 2004-12-27 13:01:37.000000000 +0100 ++++ libffi/src/x86/unix64.S 2005-02-08 16:25:38.656395947 +0100 +@@ -373,3 +373,7 @@ ffi_closure_unix64: + .LEFDE3: + + #endif /* __x86_64__ */ ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/x86/sysv.S.jj 2003-10-23 09:55:21.000000000 +0200 ++++ libffi/src/x86/sysv.S 2005-02-08 16:25:28.197263821 +0100 +@@ -182,3 +182,7 @@ epilogue: + .LEFDE1: + + #endif /* ifndef __x86_64__ */ ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/sparc/v8.S.jj 2004-11-24 22:02:00.000000000 +0100 ++++ libffi/src/sparc/v8.S 2005-02-08 16:22:55.220583988 +0100 +@@ -265,3 +265,7 @@ done2: + .byte 0x1f ! uleb128 0x1f + .align WS + .LLEFDE2: ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/sparc/v9.S.jj 2004-01-26 11:34:57.000000000 +0100 ++++ libffi/src/sparc/v9.S 2005-02-08 16:25:12.153129117 +0100 +@@ -300,3 +300,7 @@ longdouble1: + .align 8 + .LLEFDE2: + #endif ++ ++#ifdef __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/m68k/sysv.S.jj 2003-10-23 09:55:21.000000000 +0200 ++++ libffi/src/m68k/sysv.S 2005-02-08 16:16:18.341466343 +0100 +@@ -95,3 +95,7 @@ epilogue: + unlk %a6 + rts + .size ffi_call_SYSV,.-ffi_call_SYSV ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/ia64/unix.S.jj 2005-01-04 15:42:01.000000000 +0100 ++++ libffi/src/ia64/unix.S 2005-02-08 16:16:01.253518356 +0100 +@@ -572,3 +572,7 @@ ffi_closure_unix: + data8 @pcrel(.Lld_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT + data8 @pcrel(.Lld_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE + data8 @pcrel(.Lld_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- libffi/src/arm/sysv.S.jj 2004-10-28 15:10:11.000000000 +0200 ++++ libffi/src/arm/sysv.S 2005-02-08 16:14:02.282767581 +0100 +@@ -207,3 +207,6 @@ LSYM(Lepilogue): + .ffi_call_SYSV_end: + .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) + ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- boehm-gc/ia64_save_regs_in_stack.S.jj 2005-02-08 16:32:57.368040486 +0100 ++++ boehm-gc/ia64_save_regs_in_stack.S 2005-02-08 16:33:36.243096641 +0100 +@@ -0,0 +1,15 @@ ++ .text ++ .align 16 ++ .global GC_save_regs_in_stack ++ .proc GC_save_regs_in_stack ++GC_save_regs_in_stack: ++ .body ++ flushrs ++ ;; ++ mov r8=ar.bsp ++ br.ret.sptk.few rp ++ .endp GC_save_regs_in_stack ++ ++#ifdef __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +--- boehm-gc/ia64_save_regs_in_stack.s.jj 2004-06-30 09:32:52.000000000 +0200 ++++ boehm-gc/ia64_save_regs_in_stack.s 2005-02-08 16:32:51.555078799 +0100 +@@ -1,12 +0,0 @@ +- .text +- .align 16 +- .global GC_save_regs_in_stack +- .proc GC_save_regs_in_stack +-GC_save_regs_in_stack: +- .body +- flushrs +- ;; +- mov r8=ar.bsp +- br.ret.sptk.few rp +- .endp GC_save_regs_in_stack +- diff --git a/4.0.3/gentoo/74_all_sh-pr24836.patch b/4.0.3/gentoo/74_all_sh-pr24836.patch new file mode 100644 index 0000000..871c520 --- /dev/null +++ b/4.0.3/gentoo/74_all_sh-pr24836.patch @@ -0,0 +1,16 @@ +http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348 +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836 + +Index: gcc-4_0-branch/gcc/configure.ac +=================================================================== +--- gcc/configure.ac (revision 106699) ++++ gcc/configure.ac (working copy) +@@ -2446,7 +2446,7 @@ + tls_first_minor=14 + tls_as_opt="-m64 -Aesame --fatal-warnings" + ;; +- sh-*-* | sh[34]-*-*) ++ sh-*-* | sh[34]*-*-*) + conftest_s=' + .section ".tdata","awT",@progbits + foo: .long 25 diff --git a/4.0.3/misc/bounds-checking-gcc-4.0.2-1.00.patch b/4.0.3/misc/bounds-checking-gcc-4.0.2-1.00.patch new file mode 100644 index 0000000..1d30d1b --- /dev/null +++ b/4.0.3/misc/bounds-checking-gcc-4.0.2-1.00.patch @@ -0,0 +1,44076 @@ +Bounds Checking Patches for gcc-4.0.2 +-------------------------------------- + +By Richard W.M. Jones <rjones@orchestream.com> + +What is bounds checking? +------------------------ + +These patches give very fine-grained bounds checking, catching errors in +C programs like this one: + + int i; + char array[10]; + + for (i = 0; i <= 10; ++i) + array[i] = 0; + +(Notice element array[10] is not part of the array). The patches are +compatible with almost all C constructs. For instance, the following +programs have been successfully compiled with bounds checking: + + Tcl 7.3 & 7.4 + Tk 3.6 & 4.0 + Ghostscript 262 + uEmacs 3.10 + xrn + GNU Grep 2.0 + XBoing 1.8 + +What files do you need? +----------------------- + +You can install GCC with bounds checking either by compiling from the source. + +>> To compile from source, you need to retrieve: + + bounds-checking-gcc-4.0.2-x.y.patch.bz2 + + *plus* the source for GCC (which you may already have). + + gcc-4.0.2.tar.bz2 + + You will need around 500 Mbytes of free disk space. + +How to compile GCC with bounds checking from source +---------------------------------------------------- + +Let's suppose, for the sake of example, that you've already placed a *fresh* +GCC source tree in `~/gcc-4.0.2'. Patch the tree as follows: + + cd ~/gcc-4.0.2 + bzip2 -cd bounds-checking-gcc-4.0.2-x.y.patch.bz2 | patch -p1 -s + +Compile GCC as detailed in the file `INSTALL' that comes with GCC. Usually +you need to type something like: + + cd ~/build_4.0.2_dir + ~/gcc-4.0.2/configure --srcdir=~/gcc-4.0.2 # Possibly some --options here. + make BOOT_CFLAGS="-O2" STAGE1_CFLAGS="-O2" CFLAGS="-O2" bootstrap + +This also makes the bounds checking library (in the bounds/lib/ subdir.). +You'll need `makeinfo' (from the `texinfo' package) to make the info pages. + +Compile programs with bounds checking +------------------------------------- + +Once you've got the program compiled, use the `-fbounds-checking' flag +to add bounds checking to your programs. Eg. + + ~/build_4.0.2_dir/gcc/xgcc -B~/build_4.0.2_dir/gcc/ -fbounds-checking -c file1.c -o file1.o + ~/build_4.0.2_dir/gcc/xgcc -B~/build_4.0.2_dir/gcc/ -fbounds-checking file1.o -o program + +Notice that: + (1) I've assumed you have compiled/installed GCC in `~/build_4.0.2_dir'. + (2) You need to pass the `-B' option to tell GCC which directory you're + using. Note that the directory needs a trailing `/'. + +For Makefiles, you could add/change the following rules: + + GCC_HOME = $(HOME)/build_4.0.2_dir/gcc + CC = $(GCC_HOME)/xgcc + CFLAGS = -B$(GCC_HOME)/ -fbounds-checking -g -Wall ..etc.. + +Looking for information +----------------------- + +The first place to look for information is the GCC info page. The relevant +files are: + + ~/gcc-4.0.2/gcc/doc/gcc.info + ~/gcc-4.0.2/gcc/doc/gcc.info-* + +You will need `emacs', `tkinfo' or similar, to read them. Go to `Bounds +Checking' node. + +There is an old manual in PostScript form in the file: + + ~/gcc-4.0.2/gcc/bounds/report/bcrep2.ps.gz + +and the source for this (in M$-Word 6 format - yes, I know): + + ~/gcc-4.0.2/gcc/bounds/report/bcrep2.doc.gz + +Special cases for bounds checking +--------------------------------- + +Although bounds checking ought to be automatic, if you use one of the +following constructs, you may need to change your program: + + . signal handlers + threads + Read the user manual. For signal handlers, you will need to + move the signal handlers into unchecked code. There are + hooks in the checking library for threads. + . Using `-2' as a pointer. + You can't use `-2' as a special pointer representation (because + I use it). To fix this, either change your code to use, say, + -1, or change the definition of ILLEGAL in `bounds/lib/ + bounds-lib.h'. + +Read the gcc.info file for more details. + +Bug reports +----------- + +There are a few known bugs: read about them in + + ~/gcc-4.0.2/gcc/bounds/BUGS + +Please send bug reports & fixes to + + rjones@orchestream.com or Haj.Ten.Brugge@net.HCC.nl + +Frequently asked questions +-------------------------- + +These are questions I've answered more than a hundred times already ... + +1. No, it doesn't work with C++. But do you feel like giving up ~1-2 + months of your time to implement it for me? If so, write soon. + +2. When will the patches be integrated into GCC? I have no answer to + this. One day soon, when I feel that the software has been widely + tested and the bugs have been all but eliminated, I will apply to + have this happen. However, the GCC maintainers may have other ideas, + in which case the answer will be `never'. + +Related documents +----------------- + +http://www-dse.doc.ic.ac.uk/~rj3/bounds-checking.html +http://www-ala.doc.ic.ac.uk/~phjk/BoundsChecking.html +http://www.inter.NL.net/hcc/Haj.Ten.Brugge + +Platforms +--------- + +See the file MACHINES in the distribution to see what machines GCC/BC has been +ported to. It ought to work on just about any machine that GCC supports. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/ada/bounds.c gcc-4.0.2/gcc/ada/bounds.c +--- gcc-4.0.2.org/gcc/ada/bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/ada/bounds.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,166 @@ ++/* This file is a dummy, for when C++ gets bounds checking like C. In the ++ mean time, there are some empty function definitions here, since `calls.c' ++ references these (but never calls them). */ ++ ++#include "config.h" ++#include "system.h" ++#include <stdio.h> ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "varray.h" ++#include "ggc.h" ++ ++static GTY (()) varray_type static_ptr_init_list; ++static GTY (()) varray_type deferred_global_decls; ++static GTY (()) tree bounds_memcpy; ++static GTY (()) tree bounds_mempcpy; ++static GTY (()) tree bounds_memset; ++static GTY (()) tree bounds_find_object; ++static GTY (()) tree bounds_maybe_find_object; ++static GTY (()) tree bounds_check_ptr_plus_int; ++static GTY (()) tree bounds_check_ptr_minus_int; ++static GTY (()) tree bounds_check_ptr_plus_int_obj; ++static GTY (()) tree bounds_check_ptr_minus_int_obj; ++static GTY (()) tree bounds_check_array_reference; ++static GTY (()) tree bounds_check_array_reference_obj; ++static GTY (()) tree bounds_check_component_reference; ++static GTY (()) tree bounds_check_component_reference_obj; ++static GTY (()) tree bounds_check_ptr_diff; ++static GTY (()) tree bounds_check_ptr_diff_obj; ++static GTY (()) tree bounds_check_reference; ++static GTY (()) tree bounds_check_reference_obj; ++static GTY (()) tree bounds_check_ptr_lt_ptr; ++static GTY (()) tree bounds_check_ptr_lt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_le_ptr; ++static GTY (()) tree bounds_check_ptr_le_ptr_obj; ++static GTY (()) tree bounds_check_ptr_gt_ptr; ++static GTY (()) tree bounds_check_ptr_gt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_ge_ptr; ++static GTY (()) tree bounds_check_ptr_ge_ptr_obj; ++static GTY (()) tree bounds_check_ptr_eq_ptr; ++static GTY (()) tree bounds_check_ptr_ne_ptr; ++static GTY (()) tree bounds_check_ptr_postinc; ++static GTY (()) tree bounds_check_ptr_preinc; ++static GTY (()) tree bounds_check_ptr_postdec; ++static GTY (()) tree bounds_check_ptr_predec; ++static GTY (()) tree bounds_check_ptr_postinc_obj; ++static GTY (()) tree bounds_check_ptr_preinc_obj; ++static GTY (()) tree bounds_check_ptr_postdec_obj; ++static GTY (()) tree bounds_check_ptr_predec_obj; ++static GTY (()) tree bounds_check_ptr_postinc_ref; ++static GTY (()) tree bounds_check_ptr_preinc_ref; ++static GTY (()) tree bounds_check_ptr_postdec_ref; ++static GTY (()) tree bounds_check_ptr_predec_ref; ++static GTY (()) tree bounds_check_ptr_postinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_preinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_postdec_ref_obj; ++static GTY (()) tree bounds_check_ptr_predec_ref_obj; ++static GTY (()) tree bounds_check_ptr_true; ++static GTY (()) tree bounds_check_ptr_false; ++static GTY (()) tree bounds_note_constructed_object; ++static GTY (()) tree bounds_note_constructed_private_table; ++static GTY (()) tree bounds_push_function; ++static GTY (()) tree bounds_pop_function; ++static GTY (()) tree bounds_add_param_object; ++static GTY (()) tree bounds_add_stack_object; ++static GTY (()) tree bounds_delete_stack_object; ++static GTY (()) tree bounds_initialize_library; ++static GTY (()) tree bounds_check_free; ++static GTY (()) tree bounds_check_malloc; ++static GTY (()) tree bounds_check_realloc; ++static GTY (()) tree bounds_check_memalign; ++static GTY (()) tree bounds_check_calloc; ++static GTY (()) tree bounds_check_valloc; ++static GTY (()) tree bounds_check_alloca; ++static GTY (()) tree bounds_check___alloca; ++static GTY (()) tree bounds_check___builtin_alloca; ++static GTY (()) tree bounds_check_mmap; ++static GTY (()) tree bounds_check_munmap; ++static GTY (()) tree bounds_check_memcpy; ++static GTY (()) tree bounds_check_mempcpy; ++static GTY (()) tree bounds_check_memmove; ++static GTY (()) tree bounds_check_bcopy; ++static GTY (()) tree bounds_check_memset; ++static GTY (()) tree bounds_check_bzero; ++static GTY (()) tree bounds_check_memcmp; ++static GTY (()) tree bounds_check_bcmp; ++static GTY (()) tree bounds_check_strcpy; ++static GTY (()) tree bounds_check_strncpy; ++static GTY (()) tree bounds_check_strlen; ++static GTY (()) tree bounds_check_strcmp; ++static GTY (()) tree bounds_check_strncmp; ++static GTY (()) tree bounds_check_strcat; ++static GTY (()) tree bounds_check_strncat; ++static GTY (()) tree bounds_check_strpbrk; ++static GTY (()) tree bounds_check_strrchr; ++static GTY (()) tree bounds_check_rindex; ++static GTY (()) tree bounds_check_strspn; ++static GTY (()) tree bounds_check_strcspn; ++static GTY (()) tree bounds_check_strstr; ++static GTY (()) tree bounds_check_strtok; ++static GTY (()) tree bounds_check_strtok_r; ++static GTY (()) tree bounds_check_strdup; ++static GTY (()) tree bounds_check_strchr; ++static GTY (()) tree bounds_check_index; ++static GTY (()) tree bounds_check_strcoll; ++static GTY (()) tree bounds_check_strxfrm; ++static GTY (()) tree bounds_check_strcasecmp; ++static GTY (()) tree bounds_check_strncasecmp; ++static GTY (()) tree bounds_check_memchr; ++static GTY (()) tree bounds_check_memccpy; ++static GTY (()) tree bounds_private_statics; ++ ++#include "gt-c-bounds.h" ++ ++void ++bounds_convert_funcname (tree * function ATTRIBUTE_UNUSED, ++ tree * params ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_mark_for_runtime_check (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_build_static_constructors (void) ++{ ++ abort (); ++} ++ ++void ++bounds_register_decl (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++int ++bounds_is_deletable_fn_p (char *name ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_note_call_for_deletion (rtx first_insn ATTRIBUTE_UNUSED, ++ rtx last_insn ATTRIBUTE_UNUSED, ++ char *fnname ATTRIBUTE_UNUSED, ++ tree callexpr ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++tree ++bounds_build_truthvalue_conversion (tree arg ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_delete_redundant_calls (void) ++{ ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/ada/Make-lang.in gcc-4.0.2/gcc/ada/Make-lang.in +--- gcc-4.0.2.org/gcc/ada/Make-lang.in 2005-03-15 21:52:43.000000000 +0100 ++++ gcc-4.0.2/gcc/ada/Make-lang.in 2005-09-29 17:50:02.000000000 +0200 +@@ -105,7 +105,8 @@ ADA_TOOLS_FLAGS_TO_PASS=\ + # Object files for gnat1 from C sources. + GNAT1_C_OBJS = ada/b_gnat1.o ada/adadecode.o ada/adaint.o ada/cstreams.o \ + ada/cio.o ada/targtyps.o ada/decl.o ada/misc.o ada/utils.o ada/utils2.o \ +- ada/trans.o ada/cuintp.o ada/argv.o ada/raise.o ada/init.o ada/tracebak.o ++ ada/trans.o ada/cuintp.o ada/argv.o ada/raise.o ada/init.o ada/tracebak.o \ ++ ada/bounds.o + + # Object files from Ada sources that are used by gnat1 + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/bgcc gcc-4.0.2/gcc/bounds/bgcc +--- gcc-4.0.2.org/gcc/bounds/bgcc 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/bgcc 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,61 @@ ++: ++# bgcc -- driver for bgcc ++ ++R=`dirname $0` ++R=`(cd $R > /dev/null 2>&1 ; cd ../../objdir* ; pwd)` ++ ++libs= ++compiler=xgcc ++ ++if [ ! -d "$R" ] ++then ++ echo "$0: Root directory $R not found" ++ exit 1 ++fi ++ ++G=${R}/gcc ++L=${R}/libraries ++ ++#G=${R}/gcc/stage1 ++#L=${R}/gcc ++ ++if [ ! -d "$G" ] ++then ++ echo "$0: gcc directory $G not found" ++ exit 1 ++fi ++ ++# Set the -I and -L options to the build area. ++# Prepend -I and -L options specified on the command line. ++# Skip over enough of the other options to have a chance at getting ++# all of the -I and -L options. ++ ++args= ++while [ ! -z "$1" ] ++do ++ case "$1" in ++ -[DILo]) args="$args $1 $2" ; shift ;; ++ -[DILoOW]*|-ped*|-pipe|-[SEcgsv]) args="$args $1" ;; ++ *) break ;; ++ esac ++ shift ++done ++ ++# -I${G}/include/ ++# -I/usr/include/ ++ ++exec ${G}/$compiler -B${G}/ \ ++ $args \ ++ -I${R}/../libio/ \ ++ -I${R}/../libstdc++/ \ ++ -I${R}/../include/ \ ++ -I/usr/include/g++/ \ ++ -I/usr/lib/g++-include/ \ ++ -L${L}/libio/ \ ++ -L${L}/libstdc++/ \ ++ -L${L}/libiberty/ \ ++ -L${G}/ \ ++ -L${L}/ \ ++ -L/lib/ \ ++ -L/usr/lib/ \ ++ "$@" $libs +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/BUGS gcc-4.0.2/gcc/bounds/BUGS +--- gcc-4.0.2.org/gcc/bounds/BUGS 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/BUGS 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,48 @@ ++GCC with Bounds Checking, By Richard W.M. Jones <rjones@orchestream.com> ++------------------------------------------------------------------------ ++ ++1. KNOWN BUGS ++------------- ++ ++Description: ++ The following bug was pointed out by Eberhard Mattes ++ <mattes@azu.informatik.uni-stuttgart.d400.de> ++Example code: ++ #define FOO(c) ({ int temp = c; temp; }) ++ ++ static void foo (int x) ++ { ++ goto lbl; ++ ++ lbl: ++ if (FOO (x)) ++ ++x; ++ } ++Comment: ++ Without -fbounds-checking, no error. ++ With -fbounds-checking, we get: ++ foo.c: In function `foo': ++ foo.c:7: label `lbl' used before containing binding contour ++ Must be something to do with how I'm adding constructors to ++ variables in binding contours. ++ ++ ++2. MISSING FEATURES ++------------------- ++ ++Description: ++ Function pointers aren't found & checked. ++Comment: ++ We can find all function pointers using the same mechanism as for ++ static variables. We make them into byte-sized objects with ++ alignment -1 so that you can't do pointer arithmetic on them. ++ ++ ++3. LIMITATIONS IN FUNCTIONALITY ++------------------------------- ++ ++Description: ++ Bounds checking isn't compatible with setjmp, longjmp. ++Comment: ++ The mechanism used by push/pop function (see 'functions.c' in the ++ bc-library) doesn't like functions that don't return. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/CONTRIBUTORS gcc-4.0.2/gcc/bounds/CONTRIBUTORS +--- gcc-4.0.2.org/gcc/bounds/CONTRIBUTORS 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/CONTRIBUTORS 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,135 @@ ++ This is an informal, and unfortunately rather incomplete, list of ++ contributors to this project. The names are listed in alphabetical ++ order of surname. The codes are: ++ N name ++ E email address ++ W web site ++ P phone ++ F fax ++ M postal address ++ D description of work done on the project ++ ++N: Danny Backx ++E: u27113@kb.be ++P: +32(2)422.74.57 ++F: +32(2)422.81.77 ++M: Kredietbank, Havenlaan 2, 1210 Brussel, Belgium ++D: Patches for `-never-fatal'. Port to NetBSD. ++ ++N: Eberhard Mattes ++E: mattes@azu.informatik.uni-stuttgart.de ++D: Worked towards compiling GCC itself with bounds checking! OS/2 port. ++D: Pointed out multiple bugs in lib/string.c, now fixed. -no-warn-unaligned ++D: flag. ++ ++N: William Bader ++E: william@nscs.fast.net ++E: williambader@hotmail.com ++W: http://williambader.com ++P: 610-746-7700 ++M: Software Consulting Services, 630 Selvaggio Dr, Ste 420, Nazareth PA 18064 ++D: 18Nov97: Added '-warn-compare-objects' to remove a test in ++D: check.c for comparisons of pointers to different objects. ++D: I had a program that built a tree ordered by node addresses. ++D: 04Dec97: Added size information to messages in string.c. ++D: 29Mar00: Converted from gcc-2.95.2 to egcs-20000327 ++D: 26Mar01: Backport to gcc-2.95.3 ++D: 23Aug01: Added -print-heap-long ++ ++N: Hildo Biersma ++E: Hildo@CONSUL.NL ++D: Suggested fix for `pointer < pointer' code. You can find it in `bounds/misc/ ++D: inequality-patches'. ++ ++N: Herman ten Brugge ++E: Haj.Ten.Brugge@net.HCC.nl ++D: Many many patches, including ... extra stats, string fns, better diagnostic ++D: msgs, external objs, unchecked objs, speed ups, numerous bug fixes - thanks! ++D: (14/8/95): Fix for array refs, more string fns, ... ++D: (17/8/95): Fix for `char *a[] = {"a", "b", "c"};' in a function. ++D: (18/8/95): Fix (untested) for `verbose' bug ++ ++N: Matthias Drochner ++E: drochner@zelux6.zel.kfa-juelich.de ++D: Port to Ultrix 4.2A ++ ++N: Don Lewis ++E: gdonl@gv.ssi1.com ++D: Suggested that `bigend_correction' in assign_stack_local and assign_ ++D: outer_stack_local functions was causing the infamous stack padding bug. ++ ++N: Greg Hudson ++E: ghudson@mit.edu ++D: Fixes for BSD 4.4 ++ ++N: Richard W.M. Jones ++E: rjones@orchestream.com ++ ++N: Paul H.J. Kelly ++E: phjk@doc.ic.ac.uk ++M: Dept. of Computing, Imperial College, London, England. ++ ++N: Marko Kohtala ++E: Marko.Kohtala@ntc.nokia.com ++D: List of bugs & fixes (that's what I like to see :-) ++ ++N: Don Lewis ++E: gdonl@gv.ssi1.com ++D: Patches to track ILLEGAL pointers. ++ ++N: Joerg Petersen ++E: petersen@pi1.physik.uni-stuttgart.de ++F: +(49)-(711) / 685-4954 ++P: +(49)-(711) / 695-4886 ++M: 1. Physikalisches Institut ++M: Universitaet Stuttgart ++M: D-70550 Stuttgart, Germany ++D: Port to AIX (still in progress). ++ ++N: Bart Schuller ++E: schuller@acme.wi.leidenuniv.nl ++D: Minor bug fixes. ++ ++N: Steve Simmons ++E: scs@aisinc.com ++D: Cross compiled 2.7.0 with bc for i960. Patch to `gcc.1' man page. ++ ++N: Mark W. Snitily ++E: mark@sgcs.com ++D: Helped fix bug in `bounds_frig_decl_initial'. Patched `strtok' for correct ++D: behaviour. Suggested a fix to get `-fno-builtin' automatically. Other ++D: useful bug reports. Patched Makefile for cross-compiler from Sun4 to ++D: VxWorks-68k platform. Sorted out `bcopy'. ++ ++N: Peter Stephenson ++E: P.Stephenson@swansea.ac.uk ++M: Dept. of Physics, University of Wales, Swansea, Singleton Park, Swansea, ++M: SA2 8PP, UK. ++T: +44 1792 205678 extn. 4461 ++F: +44 1792 295324 ++D: Patches for DEC Alpha with OSF/1 3.0 ++ ++N: Andrew Taylor ++E: andrewt@cse.unsw.edu.au ++D: Suggested new format for errors with `file:line' ++ ++N: Swen Thuemmler ++E: swen@uni-paderborn.de ++D: Fixed bug in `c-typeck.c:start_init'. ++ ++N: Walter Tuppa ++E: tuppa@iue.tuwien.ac.at ++M: Inst. for MicroElectronics, Technical University of Vienna ++M: Gusshausstrasse 27-29 / 1040 Vienna / Austria ++P: +43/1/58801-3680 ++F: +43/1/5059224 ++D: Solved problems with 64 bit pointers on DEC Alpha machines. ++ ++N: Joachim Wiesel ++E: wiesel@ipf.bau-verm.uni-karlsruhe.de ++M: Building 20.40, Rm. 025 ++M: Inst. fuer Photogrammetrie und Fernerkundung, ++M: Universitaet Karlsruhe Englestr. 7, D-76128 Karlsruhe, Germany ++P: +49 721 608 2316 ++F: +49 721 694 568 ++D: Fixed static objects in Solaris 2.4 x86 +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/COPYING gcc-4.0.2/gcc/bounds/COPYING +--- gcc-4.0.2.org/gcc/bounds/COPYING 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/COPYING 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,340 @@ ++ GNU GENERAL PUBLIC LICENSE ++ Version 2, June 1991 ++ ++ Copyright (C) 1989, 1991 Free Software Foundation, Inc. ++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ Preamble ++ ++ The licenses for most software are designed to take away your ++freedom to share and change it. By contrast, the GNU General Public ++License is intended to guarantee your freedom to share and change free ++software--to make sure the software is free for all its users. This ++General Public License applies to most of the Free Software ++Foundation's software and to any other program whose authors commit to ++using it. (Some other Free Software Foundation software is covered by ++the GNU Library General Public License instead.) You can apply it to ++your programs, too. ++ ++ When we speak of free software, we are referring to freedom, not ++price. Our General Public Licenses are designed to make sure that you ++have the freedom to distribute copies of free software (and charge for ++this service if you wish), that you receive source code or can get it ++if you want it, that you can change the software or use pieces of it ++in new free programs; and that you know you can do these things. ++ ++ To protect your rights, we need to make restrictions that forbid ++anyone to deny you these rights or to ask you to surrender the rights. ++These restrictions translate to certain responsibilities for you if you ++distribute copies of the software, or if you modify it. ++ ++ For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must give the recipients all the rights that ++you have. You must make sure that they, too, receive or can get the ++source code. And you must show them these terms so they know their ++rights. ++ ++ We protect your rights with two steps: (1) copyright the software, and ++(2) offer you this license which gives you legal permission to copy, ++distribute and/or modify the software. ++ ++ Also, for each author's protection and ours, we want to make certain ++that everyone understands that there is no warranty for this free ++software. If the software is modified by someone else and passed on, we ++want its recipients to know that what they have is not the original, so ++that any problems introduced by others will not reflect on the original ++authors' reputations. ++ ++ Finally, any free program is threatened constantly by software ++patents. We wish to avoid the danger that redistributors of a free ++program will individually obtain patent licenses, in effect making the ++program proprietary. To prevent this, we have made it clear that any ++patent must be licensed for everyone's free use or not licensed at all. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. ++ ++ GNU GENERAL PUBLIC LICENSE ++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ++ ++ 0. This License applies to any program or other work which contains ++a notice placed by the copyright holder saying it may be distributed ++under the terms of this General Public License. The "Program", below, ++refers to any such program or work, and a "work based on the Program" ++means either the Program or any derivative work under copyright law: ++that is to say, a work containing the Program or a portion of it, ++either verbatim or with modifications and/or translated into another ++language. (Hereinafter, translation is included without limitation in ++the term "modification".) Each licensee is addressed as "you". ++ ++Activities other than copying, distribution and modification are not ++covered by this License; they are outside its scope. The act of ++running the Program is not restricted, and the output from the Program ++is covered only if its contents constitute a work based on the ++Program (independent of having been made by running the Program). ++Whether that is true depends on what the Program does. ++ ++ 1. You may copy and distribute verbatim copies of the Program's ++source code as you receive it, in any medium, provided that you ++conspicuously and appropriately publish on each copy an appropriate ++copyright notice and disclaimer of warranty; keep intact all the ++notices that refer to this License and to the absence of any warranty; ++and give any other recipients of the Program a copy of this License ++along with the Program. ++ ++You may charge a fee for the physical act of transferring a copy, and ++you may at your option offer warranty protection in exchange for a fee. ++ ++ 2. You may modify your copy or copies of the Program or any portion ++of it, thus forming a work based on the Program, and copy and ++distribute such modifications or work under the terms of Section 1 ++above, provided that you also meet all of these conditions: ++ ++ a) You must cause the modified files to carry prominent notices ++ stating that you changed the files and the date of any change. ++ ++ b) You must cause any work that you distribute or publish, that in ++ whole or in part contains or is derived from the Program or any ++ part thereof, to be licensed as a whole at no charge to all third ++ parties under the terms of this License. ++ ++ c) If the modified program normally reads commands interactively ++ when run, you must cause it, when started running for such ++ interactive use in the most ordinary way, to print or display an ++ announcement including an appropriate copyright notice and a ++ notice that there is no warranty (or else, saying that you provide ++ a warranty) and that users may redistribute the program under ++ these conditions, and telling the user how to view a copy of this ++ License. (Exception: if the Program itself is interactive but ++ does not normally print such an announcement, your work based on ++ the Program is not required to print an announcement.) ++ ++These requirements apply to the modified work as a whole. If ++identifiable sections of that work are not derived from the Program, ++and can be reasonably considered independent and separate works in ++themselves, then this License, and its terms, do not apply to those ++sections when you distribute them as separate works. But when you ++distribute the same sections as part of a whole which is a work based ++on the Program, the distribution of the whole must be on the terms of ++this License, whose permissions for other licensees extend to the ++entire whole, and thus to each and every part regardless of who wrote it. ++ ++Thus, it is not the intent of this section to claim rights or contest ++your rights to work written entirely by you; rather, the intent is to ++exercise the right to control the distribution of derivative or ++collective works based on the Program. ++ ++In addition, mere aggregation of another work not based on the Program ++with the Program (or with a work based on the Program) on a volume of ++a storage or distribution medium does not bring the other work under ++the scope of this License. ++ ++ 3. You may copy and distribute the Program (or a work based on it, ++under Section 2) in object code or executable form under the terms of ++Sections 1 and 2 above provided that you also do one of the following: ++ ++ a) Accompany it with the complete corresponding machine-readable ++ source code, which must be distributed under the terms of Sections ++ 1 and 2 above on a medium customarily used for software interchange; or, ++ ++ b) Accompany it with a written offer, valid for at least three ++ years, to give any third party, for a charge no more than your ++ cost of physically performing source distribution, a complete ++ machine-readable copy of the corresponding source code, to be ++ distributed under the terms of Sections 1 and 2 above on a medium ++ customarily used for software interchange; or, ++ ++ c) Accompany it with the information you received as to the offer ++ to distribute corresponding source code. (This alternative is ++ allowed only for noncommercial distribution and only if you ++ received the program in object code or executable form with such ++ an offer, in accord with Subsection b above.) ++ ++The source code for a work means the preferred form of the work for ++making modifications to it. For an executable work, complete source ++code means all the source code for all modules it contains, plus any ++associated interface definition files, plus the scripts used to ++control compilation and installation of the executable. However, as a ++special exception, the source code distributed need not include ++anything that is normally distributed (in either source or binary ++form) with the major components (compiler, kernel, and so on) of the ++operating system on which the executable runs, unless that component ++itself accompanies the executable. ++ ++If distribution of executable or object code is made by offering ++access to copy from a designated place, then offering equivalent ++access to copy the source code from the same place counts as ++distribution of the source code, even though third parties are not ++compelled to copy the source along with the object code. ++ ++ 4. You may not copy, modify, sublicense, or distribute the Program ++except as expressly provided under this License. Any attempt ++otherwise to copy, modify, sublicense or distribute the Program is ++void, and will automatically terminate your rights under this License. ++However, parties who have received copies, or rights, from you under ++this License will not have their licenses terminated so long as such ++parties remain in full compliance. ++ ++ 5. You are not required to accept this License, since you have not ++signed it. However, nothing else grants you permission to modify or ++distribute the Program or its derivative works. These actions are ++prohibited by law if you do not accept this License. Therefore, by ++modifying or distributing the Program (or any work based on the ++Program), you indicate your acceptance of this License to do so, and ++all its terms and conditions for copying, distributing or modifying ++the Program or works based on it. ++ ++ 6. Each time you redistribute the Program (or any work based on the ++Program), the recipient automatically receives a license from the ++original licensor to copy, distribute or modify the Program subject to ++these terms and conditions. You may not impose any further ++restrictions on the recipients' exercise of the rights granted herein. ++You are not responsible for enforcing compliance by third parties to ++this License. ++ ++ 7. If, as a consequence of a court judgment or allegation of patent ++infringement or for any other reason (not limited to patent issues), ++conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot ++distribute so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you ++may not distribute the Program at all. For example, if a patent ++license would not permit royalty-free redistribution of the Program by ++all those who receive copies directly or indirectly through you, then ++the only way you could satisfy both it and this License would be to ++refrain entirely from distribution of the Program. ++ ++If any portion of this section is held invalid or unenforceable under ++any particular circumstance, the balance of the section is intended to ++apply and the section as a whole is intended to apply in other ++circumstances. ++ ++It is not the purpose of this section to induce you to infringe any ++patents or other property right claims or to contest validity of any ++such claims; this section has the sole purpose of protecting the ++integrity of the free software distribution system, which is ++implemented by public license practices. Many people have made ++generous contributions to the wide range of software distributed ++through that system in reliance on consistent application of that ++system; it is up to the author/donor to decide if he or she is willing ++to distribute software through any other system and a licensee cannot ++impose that choice. ++ ++This section is intended to make thoroughly clear what is believed to ++be a consequence of the rest of this License. ++ ++ 8. If the distribution and/or use of the Program is restricted in ++certain countries either by patents or by copyrighted interfaces, the ++original copyright holder who places the Program under this License ++may add an explicit geographical distribution limitation excluding ++those countries, so that distribution is permitted only in or among ++countries not thus excluded. In such case, this License incorporates ++the limitation as if written in the body of this License. ++ ++ 9. The Free Software Foundation may publish revised and/or new versions ++of the General Public License from time to time. Such new versions will ++be similar in spirit to the present version, but may differ in detail to ++address new problems or concerns. ++ ++Each version is given a distinguishing version number. If the Program ++specifies a version number of this License which applies to it and "any ++later version", you have the option of following the terms and conditions ++either of that version or of any later version published by the Free ++Software Foundation. If the Program does not specify a version number of ++this License, you may choose any version ever published by the Free Software ++Foundation. ++ ++ 10. If you wish to incorporate parts of the Program into other free ++programs whose distribution conditions are different, write to the author ++to ask for permission. For software which is copyrighted by the Free ++Software Foundation, write to the Free Software Foundation; we sometimes ++make exceptions for this. Our decision will be guided by the two goals ++of preserving the free status of all derivatives of our free software and ++of promoting the sharing and reuse of software generally. ++ ++ NO WARRANTY ++ ++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY ++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN ++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES ++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED ++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS ++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, ++REPAIR OR CORRECTION. ++ ++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR ++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, ++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED ++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY ++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE ++POSSIBILITY OF SUCH DAMAGES. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs ++ ++ If you develop a new program, and you want it to be of the greatest ++possible use to the public, the best way to achieve this is to make it ++free software which everyone can redistribute and change under these terms. ++ ++ To do so, attach the following notices to the program. It is safest ++to attach them to the start of each source file to most effectively ++convey the exclusion of warranty; and each file should have at least ++the "copyright" line and a pointer to where the full notice is found. ++ ++ <one line to give the program's name and a brief idea of what it does.> ++ Copyright (C) <year> <name of author> ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++If the program is interactive, make it output a short notice like this ++when it starts in an interactive mode: ++ ++ Gnomovision version 69, Copyright (C) year name of author ++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. ++ This is free software, and you are welcome to redistribute it ++ under certain conditions; type `show c' for details. ++ ++The hypothetical commands `show w' and `show c' should show the appropriate ++parts of the General Public License. Of course, the commands you use may ++be called something other than `show w' and `show c'; they could even be ++mouse-clicks or menu items--whatever suits your program. ++ ++You should also get your employer (if you work as a programmer) or your ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. Here is a sample; alter the names: ++ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program ++ `Gnomovision' (which makes passes at compilers) written by James Hacker. ++ ++ <signature of Ty Coon>, 1 April 1989 ++ Ty Coon, President of Vice ++ ++This General Public License does not permit incorporating your program into ++proprietary programs. If your program is a subroutine library, you may ++consider it more useful to permit linking proprietary applications with the ++library. If this is what you want to do, use the GNU Library General ++Public License instead of this License. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/CRED_README gcc-4.0.2/gcc/bounds/CRED_README +--- gcc-4.0.2.org/gcc/bounds/CRED_README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/CRED_README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,26 @@ ++ README FOR CRED EXTENSION ++The contributions of the CRED(C Range Error Extension) to the original ++bounds checking patch by Richard Jones(RWJ) are ++ 1. Solves incompatibility problems with programs which compute using ++out-of-range addresses/pointers. CRED dynamically tracks out-of-range pointers, ++and allows their safe usage e.g for comparison. The relevant files listed ++below were modified in the gcc/bounds/lib directory ++ init.c ++ check.c ++ object.h ++ object.c ++ bounds-lib.h ++ error.c ++ globals.c ++ ++2. Significantly improves runtime performance by providing option to ++ restrict bounds checking to only strings data structures. This restriction ++ whilst making CRED unsound is sufficient for guarding against buffer ++ overflows. This required modifications to some of the gcc parsing files. ++ ++ ++3. Inserts runtime checks for initialization of static pointers. In RWJs ++ checker, initialization of static pointers involving pointer arithmetic ++ went unchecked since the value of such pointers had to be resolved at ++ compile time. In CRED, we insert an extra instruction to carry out this ++ check at runtime. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/diffexclude.dat gcc-4.0.2/gcc/bounds/diffexclude.dat +--- gcc-4.0.2.org/gcc/bounds/diffexclude.dat 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/diffexclude.dat 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,18 @@ ++c-parse.[chy]* ++objc-parse.[cy]* ++parse.[ch] ++parse-scan.c ++tradcif.c ++cexp.c ++tm.h ++*.info* ++*.rej ++*.orig ++*- ++*~ ++junk* ++configure ++core ++a.out ++general-test ++*.o +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/example.html gcc-4.0.2/gcc/bounds/example.html +--- gcc-4.0.2.org/gcc/bounds/example.html 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/example.html 2005-09-29 17:50:42.000000000 +0200 +@@ -0,0 +1,251 @@ ++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ++<html> ++ ++<head> ++<title>GCC Bounds Checking</title> ++</head> ++ ++<body> ++ ++<h2><a name=Example>GCC Bounds Checking Example</a></h2> ++ ++<p><code><pre> ++$ cat example.c ++main() { ++char *malloc(); char *a = malloc(2); ++a[2] = 'x'; ++} ++$ ./bgcc -fbounds-checking example.c ++$ ./a.out ++Bounds Checking GCC v gcc-4.0.2-3.2 Copyright (C) 1995 Richard W.M. Jones ++Bounds Checking comes with ABSOLUTELY NO WARRANTY. For details see file ++`COPYING' that should have come with the source to this program. ++Bounds Checking is free software, and you are welcome to redistribute it ++under certain conditions. See the file `COPYING' for details. ++For more information, set GCC_BOUNDS_OPTS to `-help' ++example.c:3:Bounds error: attempt to reference memory overrunning the end of an object. ++example.c:3: Pointer value: 0x8062002, Size: 1 ++example.c:3: Object `malloc': ++example.c:3: Address in memory: 0x8062000 .. 0x8062001 ++example.c:3: Size: 2 bytes ++example.c:3: Element size: 1 bytes ++example.c:3: Number of elements: 2 ++example.c:3: Created at: example.c, line 2 ++example.c:3: Storage class: heap ++</pre></code> ++ ++<h2><a name=Example2>A Longer GCC Bounds Checking Example</a></h2> ++ ++<p> ++ ++This example shows some additional features: ++<ul> ++<li>Modules compiled with and without bounds checking may be linked together without special preparation. ++ <ul> ++ <li>Checked pointers may be passed to modules compiled without bounds checking. ++ <li>Structures containing pointers may be passed between modules compiled with and without bounds checking. ++ </ul> ++<li>Modules compiled without bounds checking still check some pointer accesses. ++ <ul> ++ <li>Checked pointers (pointers created by <code>malloc</code> or by modules compiled with ++ bounds checking) are checked in calls to the <code>str*</code> and <code>mem*</code> ++ library functions and in calls to modules compiled with bounds checking. ++ <li>The checks are similar to a malloc debug library, except more powerful because they ++ also check local and static variables created in modules compiled with checking. ++ </ul> ++<li>The <code>GCC_BOUNDS_OPTS</code> environment variable passes options to the bounds checker. ++ <ul> ++ <li>The <code>-never-fatal</code> option continues after errors. ++ <li>The <code>-print-heap</code> option shows memory leaks. ++ </ul> ++</ul> ++ ++<p><code><pre> ++$ cat example2.c ++void test(char *p) { p[1] = 'x'; } /* access a pointer out of range */ ++ ++static char static_var[1]; /* example static variable */ ++ ++main() { ++char local_var[1]; /* example stack variable */ ++char *heap_var, *malloc(); ++struct { char *a; char *b; } s; /* example structure with pointers */ ++heap_var = malloc(1); /* example heap variable */ ++test(local_var); /* access a local variable out of range */ ++test(static_var); /* access a static variable out of range */ ++test(heap_var); /* access a heap variable out of range */ ++s.a = local_var; ++s.b = static_var; ++unchecked(&s); /* pass to a routine in unchecked module */ ++} ++$ cat example2u.c ++/* example unchecked module mixed with checked module */ ++/* No special preparation is required, even for */ ++/* structures containing pointers. */ ++ ++struct s_tag { char *a; char *b; }; ++ ++void unchecked(struct s_tag *s) { ++memset(s->a, 0, 2); /* example of catching checked pointers in */ ++memcpy(s->b, s->a, 2); /* library functions even from unchecked code */ ++} ++$ gcc -c example2u.c ++$ ./bgcc -fbounds-checking example2.c example2u.o ++$ GCC_BOUNDS_OPTS="-never-fatal -print-heap" ./a.out ++Bounds Checking GCC v gcc-4.0.2-3.2 Copyright (C) 1995 Richard W.M. Jones ++Bounds Checking comes with ABSOLUTELY NO WARRANTY. For details see file ++`COPYING' that should have come with the source to this program. ++Bounds Checking is free software, and you are welcome to redistribute it ++under certain conditions. See the file `COPYING' for details. ++For more information, set GCC_BOUNDS_OPTS to `-help' ++example2.c:1:Bounds error: attempt to reference memory overrunning the end of an object. ++example2.c:1: Pointer value: 0xbfffe704, Size: 1 ++example2.c:1: Object `local_var': ++example2.c:1: Address in memory: 0xbfffe703 .. 0xbfffe703 ++example2.c:1: Size: 1 bytes ++example2.c:1: Element size: 1 bytes ++example2.c:1: Number of elements: 1 ++example2.c:1: Created at: example2.c, line 6 ++example2.c:1: Storage class: stack ++example2.c:1:Bounds error: attempt to reference memory overrunning the end of an object. ++example2.c:1: Pointer value: 0x8058eed, Size: 1 ++example2.c:1: Object `static_var': ++example2.c:1: Address in memory: 0x8058eec .. 0x8058eec ++example2.c:1: Size: 1 bytes ++example2.c:1: Element size: 1 bytes ++example2.c:1: Number of elements: 1 ++example2.c:1: Created at: example2.c, line 3 ++example2.c:1: Storage class: static ++example2.c:1:Bounds error: attempt to reference memory overrunning the end of an object. ++example2.c:1: Pointer value: 0x8063001, Size: 1 ++example2.c:1: Object `malloc': ++example2.c:1: Address in memory: 0x8063000 .. 0x8063000 ++example2.c:1: Size: 1 bytes ++example2.c:1: Element size: 1 bytes ++example2.c:1: Number of elements: 1 ++example2.c:1: Created at: example2.c, line 9 ++example2.c:1: Storage class: heap ++<unknown>:0:Bounds error: memset with this destination pointer and size 2 would overrun the end of the object's allocated memory. ++<unknown>:0: Pointer value: 0xbfffe703 ++<unknown>:0: Object `local_var': ++<unknown>:0: Address in memory: 0xbfffe703 .. 0xbfffe703 ++<unknown>:0: Size: 1 bytes ++<unknown>:0: Element size: 1 bytes ++<unknown>:0: Number of elements: 1 ++<unknown>:0: Created at: example2.c, line 6 ++<unknown>:0: Storage class: stack ++<unknown>:0:Bounds error: memcpy with this destination pointer and size 2 would overrun the end of the object's allocated memory. ++<unknown>:0: Pointer value: 0x8058eec ++<unknown>:0: Object `static_var': ++<unknown>:0: Address in memory: 0x8058eec .. 0x8058eec ++<unknown>:0: Size: 1 bytes ++<unknown>:0: Element size: 1 bytes ++<unknown>:0: Number of elements: 1 ++<unknown>:0: Created at: example2.c, line 3 ++<unknown>:0: Storage class: static ++<unknown>:0:Bounds error: memcpy with this source pointer and size 2 would overrun the end of the object's allocated memory. ++<unknown>:0: Pointer value: 0xbfffe703 ++<unknown>:0: Object `local_var': ++<unknown>:0: Address in memory: 0xbfffe703 .. 0xbfffe703 ++<unknown>:0: Size: 1 bytes ++<unknown>:0: Element size: 1 bytes ++<unknown>:0: Number of elements: 1 ++<unknown>:0: Created at: example2.c, line 6 ++<unknown>:0: Storage class: stack ++Bounds library call frequency statistics: ++ Calls to push, pop, param function: 1, 1, 0 ++ Calls to add, delete stack: 2, 2 ++ Calls to add, delete heap: 1, 0 ++ Calls to check pointer +/- integer: 3 ++ Calls to check array references: 0 ++ Calls to check pointer differences: 0 ++ Calls to check object references: 3 ++ Calls to check component references: 0 ++ Calls to check truth, falsity of pointers: 0, 0 ++ Calls to check <, >, <=, >= of pointers: 0 ++ Calls to check ==, != of pointers: 0 ++ Calls to check p++, ++p, p--, --p: 0, 0, 0, 0 ++ References to unchecked static, stack: 0, 0 ++Filename = example2.c, Line = 9, Function = malloc, Count = 1 Avg Size = 1, Total = 1 ++</pre></code> ++<h1>GCC Bounds Checking Patches</h1> ++ ++<h2> ++Bounds checking patches for ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">GCC releases</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking">GCC snapshots</A> plus ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-2.95.3-bgcc-2.95.3.pat.bz2">gcc-2.95.3</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0-bgcc-3.0.pat.bz2">gcc-3.0</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.1-bgcc-3.0.1.pat.bz2">gcc-3.0.1</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.2-bgcc-3.0.2.pat.bz2">gcc-3.0.2</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.3-bgcc-3.0.3.pat.bz2">gcc-3.0.3</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.4-bgcc-3.0.4.pat.bz2">gcc-3.0.4</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.1-bgcc-3.1.pat.bz2">gcc-3.1</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.1.1-bgcc-3.1.1.pat.bz2">gcc-3.1.1</A>, and ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.2-bgcc-3.2.pat.bz2">gcc-3.2</A>. ++</h2> ++ ++<p> ++To build a bounds checking gcc: ++<pre> ++<code> ++ cd /u/gnu # go to a work area ++ tar xzf gcc-x.y.tar.gz # unpack gcc ++ mv gcc-x.y bgcc-x.y # rename the gcc directory ++ cd bgcc-x.y # go to the bgcc directory ++ patch -p1 -T < gcc-x.y-bgcc-x.y.pat # apply the patches ++ touch gcc/c-parse.in # force a rebuild of .y and .c ++ mkdir objdir # make an object file area ++ cd objdir # enter the area ++ /u/gnu/bgcc-x.y/configure # initialize the build ++ make bootstrap # do the build ++</code> ++</pre> ++You can run the bounds checking gcc from its build area using the script ++<code>/u/gnu/bgcc-x.y/gcc/bounds/bgcc</code><br> ++For more build information, see the README files in ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/">ftp://nscs.fast.net/pub/binaries/boundschecking/</A> ++or the files created by the patches in <code>/u/gnu/bgcc-x.y/gcc/bounds/</code>. ++ ++<p>These patches add a <code>-fbounds-checking</code> flag that ++adds bounds checking tests to pointer and array accesses. ++Richard Jones developed the ++<A HREF="http://www-ala.doc.ic.ac.uk/~phjk/BoundsChecking.html">patches against gcc-2.7</A> ++in 1995. ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">Herman ten Brugge</A> ++is the current maintainer and has updated the patches for ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">gcc-4.0.2</A>. ++<a href="http://williambader.com">William Bader</a> has unofficial ++updates for selected GCC snapshots. ++ ++<p>A copy of Richard Jones' manual is at ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/bounds-checking-reports.tar.bz2"> ++ftp://nscs.fast.net/pub/binaries/boundschecking/bounds-checking-reports.tar.bz2 ++</A>. ++ ++<p>You may freely mix object modules compiled with and without bounds checking. ++The bounds checker also includes replacements for ++<code>mem*</code> and <code>str*</code> routines ++and can detect invalid calls against checked memory objects, even from modules ++compiled without bounds checking. ++ ++<i><small> ++<p>These patches are unrelated to the fat pointer bounds checking patches by ++Greg McGary gkm@eng.ascend.com which change the size of pointers and require ++building modified versions of libc and most other libraries that your program ++calls. Greg's patches will eventually be incorporated into GCC. ++If you can use Greg's fat pointer bounds checker, it has the advantage of ++better run-time performance and support for languages other than C. ++</small></i> ++ ++<hr> ++<address> ++Return to <A HREF="http://gcc.gnu.org/extensions.html">GCC extensions</A> ++<br> ++<small>Last modified ++2002-08-26 ++</small> ++</address> ++ ++</body> ++</html> +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/example.sh gcc-4.0.2/gcc/bounds/example.sh +--- gcc-4.0.2.org/gcc/bounds/example.sh 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/example.sh 2005-09-29 17:50:45.000000000 +0200 +@@ -0,0 +1,245 @@ ++: ++# example.sh -- create example.html ++# Parameters: ++# $1 = compiler command line ["bgcc" is the default] ++# ++# 23Aug02 wb initial version ++ ++example=example.html ++ ++if [ -f "$example" ] ; then rm -f "${example}-" ; mv "$example" "${example}-" ; fi ++ ++( ++ ++# Locate bgcc ++ ++bgcc="$1" ++if [ -z "$bgcc" ] ++then ++ if [ -x bgcc ] ++ then ++ bgcc=./bgcc ++ else ++ bgcc=bgcc ++ fi ++fi ++ ++# Check to avoid zapping files ++ ++for name in example.c example2.c example2u.c ++do ++ if [ -f "$name" ] ++ then ++ echo "$0: Error: $name exists, stopping" 1>&2 ++ exit ++ fi ++done ++ ++# Function to run a command ++ ++run() { ++ echo "\$ $*" ++ sh -c "$*" 2>&1 | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' ++} ++ ++# Create example C programs ++ ++cat > example.c <<EOF ++main() { ++char *malloc(); char *a = malloc(2); ++a[2] = 'x'; ++} ++EOF ++ ++cat > example2.c <<EOF ++void test(char *p) { p[1] = 'x'; } /* access a pointer out of range */ ++ ++static char static_var[1]; /* example static variable */ ++ ++main() { ++char local_var[1]; /* example stack variable */ ++char *heap_var, *malloc(); ++struct { char *a; char *b; } s; /* example structure with pointers */ ++heap_var = malloc(1); /* example heap variable */ ++test(local_var); /* access a local variable out of range */ ++test(static_var); /* access a static variable out of range */ ++test(heap_var); /* access a heap variable out of range */ ++s.a = local_var; ++s.b = static_var; ++unchecked(&s); /* pass to a routine in unchecked module */ ++} ++EOF ++ ++cat > example2u.c <<EOF ++/* example unchecked module mixed with checked module */ ++/* No special preparation is required, even for */ ++/* structures containing pointers. */ ++ ++struct s_tag { char *a; char *b; }; ++ ++void unchecked(struct s_tag *s) { ++memset(s->a, 0, 2); /* example of catching checked pointers in */ ++memcpy(s->b, s->a, 2); /* library functions even from unchecked code */ ++} ++EOF ++ ++# Start the HTML ++ ++cat <<EOF ++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ++<html> ++ ++<head> ++<title>GCC Bounds Checking</title> ++</head> ++ ++<body> ++ ++<h2><a name=Example>GCC Bounds Checking Example</a></h2> ++ ++<p><code><pre> ++EOF ++ ++run "cat example.c" ++ ++run "$bgcc -fbounds-checking example.c" ++ ++run "./a.out" ++ ++cat <<EOF ++</pre></code> ++ ++<h2><a name=Example2>A Longer GCC Bounds Checking Example</a></h2> ++ ++<p> ++ ++This example shows some additional features: ++<ul> ++<li>Modules compiled with and without bounds checking may be linked together without special preparation. ++ <ul> ++ <li>Checked pointers may be passed to modules compiled without bounds checking. ++ <li>Structures containing pointers may be passed between modules compiled with and without bounds checking. ++ </ul> ++<li>Modules compiled without bounds checking still check some pointer accesses. ++ <ul> ++ <li>Checked pointers (pointers created by <code>malloc</code> or by modules compiled with ++ bounds checking) are checked in calls to the <code>str*</code> and <code>mem*</code> ++ library functions and in calls to modules compiled with bounds checking. ++ <li>The checks are similar to a malloc debug library, except more powerful because they ++ also check local and static variables created in modules compiled with checking. ++ </ul> ++<li>The <code>GCC_BOUNDS_OPTS</code> environment variable passes options to the bounds checker. ++ <ul> ++ <li>The <code>-never-fatal</code> option continues after errors. ++ <li>The <code>-print-heap</code> option shows memory leaks. ++ </ul> ++</ul> ++ ++<p><code><pre> ++EOF ++ ++run "cat example2.c" ++ ++run "cat example2u.c" ++ ++run "gcc -c example2u.c" ++ ++run "$bgcc -fbounds-checking example2.c example2u.o" ++ ++run 'GCC_BOUNDS_OPTS="-never-fatal -print-heap" ./a.out' ++ ++cat <<EOF ++</pre></code> ++<h1>GCC Bounds Checking Patches</h1> ++ ++<h2> ++Bounds checking patches for ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">GCC releases</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking">GCC snapshots</A> plus ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-2.95.3-bgcc-2.95.3.pat.bz2">gcc-2.95.3</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0-bgcc-3.0.pat.bz2">gcc-3.0</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.1-bgcc-3.0.1.pat.bz2">gcc-3.0.1</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.2-bgcc-3.0.2.pat.bz2">gcc-3.0.2</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.3-bgcc-3.0.3.pat.bz2">gcc-3.0.3</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.0.4-bgcc-3.0.4.pat.bz2">gcc-3.0.4</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.1-bgcc-3.1.pat.bz2">gcc-3.1</A>, ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.1.1-bgcc-3.1.1.pat.bz2">gcc-3.1.1</A>, and ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/gcc-3.2-bgcc-3.2.pat.bz2">gcc-3.2</A>. ++</h2> ++ ++<p> ++To build a bounds checking gcc: ++<pre> ++<code> ++ cd /u/gnu # go to a work area ++ tar xzf gcc-x.y.tar.gz # unpack gcc ++ mv gcc-x.y bgcc-x.y # rename the gcc directory ++ cd bgcc-x.y # go to the bgcc directory ++ patch -p1 -T < gcc-x.y-bgcc-x.y.pat # apply the patches ++ touch gcc/c-parse.in # force a rebuild of .y and .c ++ mkdir objdir # make an object file area ++ cd objdir # enter the area ++ /u/gnu/bgcc-x.y/configure # initialize the build ++ make bootstrap # do the build ++</code> ++</pre> ++You can run the bounds checking gcc from its build area using the script ++<code>/u/gnu/bgcc-x.y/gcc/bounds/bgcc</code><br> ++For more build information, see the README files in ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/">ftp://nscs.fast.net/pub/binaries/boundschecking/</A> ++or the files created by the patches in <code>/u/gnu/bgcc-x.y/gcc/bounds/</code>. ++ ++<p>These patches add a <code>-fbounds-checking</code> flag that ++adds bounds checking tests to pointer and array accesses. ++Richard Jones developed the ++<A HREF="http://www-ala.doc.ic.ac.uk/~phjk/BoundsChecking.html">patches against gcc-2.7</A> ++in 1995. ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">Herman ten Brugge</A> ++is the current maintainer and has updated the patches for ++<A HREF="http://www.inter.NL.net/hcc/Haj.Ten.Brugge">gcc-4.0.2</A>. ++<a href="http://williambader.com">William Bader</a> has unofficial ++updates for selected GCC snapshots. ++ ++<p>A copy of Richard Jones' manual is at ++<A HREF="ftp://nscs.fast.net/pub/binaries/boundschecking/bounds-checking-reports.tar.bz2"> ++ftp://nscs.fast.net/pub/binaries/boundschecking/bounds-checking-reports.tar.bz2 ++</A>. ++ ++<p>You may freely mix object modules compiled with and without bounds checking. ++The bounds checker also includes replacements for ++<code>mem*</code> and <code>str*</code> routines ++and can detect invalid calls against checked memory objects, even from modules ++compiled without bounds checking. ++ ++<i><small> ++<p>These patches are unrelated to the fat pointer bounds checking patches by ++Greg McGary gkm@eng.ascend.com which change the size of pointers and require ++building modified versions of libc and most other libraries that your program ++calls. Greg's patches will eventually be incorporated into GCC. ++If you can use Greg's fat pointer bounds checker, it has the advantage of ++better run-time performance and support for languages other than C. ++</small></i> ++ ++<hr> ++<address> ++Return to <A HREF="http://gcc.gnu.org/extensions.html">GCC extensions</A> ++<br> ++<small>Last modified ++EOF ++ ++date -I ++ ++cat <<EOF ++</small> ++</address> ++ ++</body> ++</html> ++EOF ++ ++) > "$example" ++ ++rm example.c example2.c example2u.c ++rm -f core a.out example*.o ++ ++ls -l "$example" +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/IAFA-PACKAGE gcc-4.0.2/gcc/bounds/IAFA-PACKAGE +--- gcc-4.0.2.org/gcc/bounds/IAFA-PACKAGE 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/IAFA-PACKAGE 2005-09-29 17:50:48.000000000 +0200 +@@ -0,0 +1,32 @@ ++Title: Bounds checking GCC ++ ++Version: gcc-4.0.2 ++ ++Description: This package adds full, fine-grained array bounds and pointer ++ checking to GCC (C only). The level of checking is similar to, ++ and in some respects exceeds, that of languages like Pascal and ++ Modula-2. Checks work on all objects (not just malloc'd ++ objects, as with similar packages), and many of the C library ++ functions have been rewritten with more thorough checks. ++ Calls to malloc, realloc, free, etc. are also checked. ++ ++ The package is supplied as patches to GCC source. Binaries ++ are available at the home FTP site only (dse.doc.ic.ac.uk, in ++ /pub/misc/bcc) or by request to the author. ++ ++ Please read the README file in the bounds subdirectory very ++ closely before attempting to compile this software. ++ ++Author: Richard W.M. Jones <rjones@orchestream.com> ++ ++Maintained-by: Richard W.M. Jones <rjones@orchestream.com> ++ Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl> ++ ++Maintained-at: sunsite.unc.edu, dse.doc.ic.ac.uk (old) ++ http://www.inter.NL.net/hcc/Haj.Ten.Brugge (new) ++ ++Platforms: All GCC platforms supported. ++ ++Copying-Policy: Freely Redistributable ++ ++Keywords: GCC C bounds checking pointer array +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/alloca.c gcc-4.0.2/gcc/bounds/lib/alloca.c +--- gcc-4.0.2.org/gcc/bounds/lib/alloca.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/alloca.c 2005-09-29 17:59:26.000000000 +0200 +@@ -0,0 +1,137 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/alloca.c ++ Summary: ++ Implementation of `alloca' function. If you compile (as recommended) ++ with -fno-builtin, you will get this implementation of a checked ++ alloca, with optional checks for stale pointers and so forth. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 31/3/95 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#include "bounds-lib.h" ++ ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++#if defined(alloca) ++#undef alloca ++#endif ++ ++#if defined(__alloca) ++#undef __alloca ++#endif ++ ++extern void *__alloca (size_t size); ++extern void *alloca (size_t size); ++ ++static __inline__ void * ++bounds_alloca (const char *filename, int line, size_t size) ++{ ++ alloca_item *item; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ item = __bounds_malloc (sizeof (alloca_item)); ++ if (!item) ++ __bounds_internal_error ("out of space allocating alloca chain", ++ __FILE__, __LINE__); ++ ++ /* Get `functions.c' to add the current alloca item to the current function ++ context. When the current function exits, we will be called (in ++ __bounds_alloca_free) with a chain of these allocations. */ ++ __bounds_add_alloca_chain (item); ++ ++ /* Try to allocate the space as a checked memory allocation. Note: ++ (1) alloca never fails, ++ (2) `free' will be called for this object, but according to the ++ current heap mode, it may not actually be freed, and ++ (3) we allocate from the heap, not the stack. */ ++ /* We do not support zero sized objects. */ ++ if (size == 0) ++ size = 1; ++ item->pointer = __bounds_malloc (size + 1); ++ item->filename = filename; ++ item->line = line; ++ if (!item->pointer) ++ __bounds_internal_error ("alloca failed (out of memory)", filename, line); ++ __bounds_add_heap_object (item->pointer, size, 1, "alloca", 0, ++ filename, line); ++ leave_critical_section (&old_mask); ++ ++ return item->pointer; ++} ++ ++void * ++__alloca (size_t size) ++{ ++ return bounds_alloca (NULL, 0, size); ++} ++ ++void * ++alloca (size_t size) ++{ ++ return bounds_alloca (NULL, 0, size); ++} ++ ++void * ++__bounds_check_alloca (const char *filename, int line, size_t size) ++{ ++ return bounds_alloca (filename, line, size); ++} ++ ++void * ++__bounds_check___alloca (const char *filename, int line, size_t size) ++{ ++ return bounds_alloca (filename, line, size); ++} ++ ++void * ++__bounds_check___builtin_alloca (const char *filename, int line, size_t size) ++{ ++ return bounds_alloca (filename, line, size); ++} ++ ++/* Free up the alloca stack for the current function. */ ++ ++void ++__bounds_alloca_free (alloca_item * alloca_stack) ++{ ++ alloca_item *next; ++ ++ while (alloca_stack) ++ { ++ next = alloca_stack->next; ++ __bounds_delete_heap_object (alloca_stack->pointer, -1, ++ "invalid pointer used in `alloca'", ++ alloca_stack->filename, ++ alloca_stack->line, NULL); ++ __bounds_free (alloca_stack->pointer); ++ __bounds_free (alloca_stack); ++ alloca_stack = next; ++ } ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/alloca.h gcc-4.0.2/gcc/bounds/lib/alloca.h +--- gcc-4.0.2.org/gcc/bounds/lib/alloca.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/alloca.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,41 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/alloca.h ++ Summary: ++ Header file for `alloca' library. If you compile (as recommended) ++ with -fno-builtin, you will get this implementation of a checked ++ alloca, with optional checks for stale pointers and so forth. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 31/3/95 Initial implementation. ++*/ ++ ++#ifndef _ALLOCA_H_ ++#define _ALLOCA_H_ ++ ++typedef struct alloca_item ++{ ++ struct alloca_item *next; /* Linked list. */ ++ void *pointer; /* Allocation address. */ ++ const char *filename; ++ int line; ++} alloca_item; ++ ++#endif /* _ALLOCA_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/bounds.c gcc-4.0.2/gcc/bounds/lib/bounds.c +--- gcc-4.0.2.org/gcc/bounds/lib/bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/bounds.c 2005-09-29 18:02:49.000000000 +0200 +@@ -0,0 +1,318 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/malloc/bounds.c ++ Summary: ++ Bounds checking interface to the GNU C malloc library. The GNU ++ malloc has been modified to provide the unchecked functions ++ like '__bounds_malloc' directly. We provide the checked versions ++ (eg. 'malloc') here. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 1/6/95 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#ifdef malloc ++#undef malloc ++#endif ++#ifdef free ++#undef free ++#endif ++#ifdef calloc ++#undef calloc ++#endif ++#ifdef cfree ++#undef cfree ++#endif ++#ifdef memalign ++#undef memalign ++#endif ++#ifdef realloc ++#undef realloc ++#endif ++#ifdef valloc ++#undef valloc ++#endif ++ ++#include "bounds-lib.h" ++ ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++extern void *memalign (size_t alignment, size_t size); ++extern void *__libc_memalign (size_t alignment, size_t size); ++ ++/* Free a memory area in reuse mode. We add the memory area to a ++ list of memory areas where it will reside until the area ages ++ sufficiently, and then it is actually reallocated. */ ++ ++static __inline__ void ++free_reuse (void *pointer) ++{ ++ static int initialized = 0, enter = 0, leave = 0, count = 0; ++ static void **arealist; ++ ++ if (__bounds_age_limit == 0 || !__bounds_checking_on) ++ { ++ __bounds_free (pointer); ++ return; ++ } ++ ++ if (!initialized) ++ { ++ initialized = 1; ++ arealist = ++ (void **) __bounds_malloc (sizeof (void *) * __bounds_age_limit); ++ if (arealist == NULL) ++ __bounds_internal_error ("out of memory allocating memory aging list", ++ __FILE__, __LINE__); ++ } ++ if (count == __bounds_age_limit) ++ { ++ __bounds_free (arealist[leave]); ++ leave++; ++ if (leave >= __bounds_age_limit) ++ leave = 0; ++ } ++ else ++ count++; ++ arealist[enter] = pointer; ++ enter++; ++ if (enter >= __bounds_age_limit) ++ enter = 0; ++} ++ ++/* Free a pointer in 'no-reuse-heap' mode, ie. don't free it at ++ all. Nevertheless, we ought to combine such memory areas and ++ see if we can hand them back to the operating system (with ++ 'munmap'). */ ++ ++static __inline__ void ++free_no_reuse (void *pointer __attribute__ ((unused))) ++{ ++ /* Not yet implemented. */ ++} ++ ++/* Wrapper functions for the major C library dynamic memory functions. ++ These call the GNU library with the side effect of adding or ++ deleting memory objects where necessary. */ ++ ++void * ++__bounds_check_malloc (const char *filename, int line, size_t size) ++{ ++ void *pointer; ++ sigset_t old_mask; ++ ++ /* Although malloc (0) is a strange usage, we are required to support it. ++ We can return any pointer that cannot be dereferenced here, in ++ particular, some libraries return NULL. However, some software thinks ++ that means out of memory. We could also return ILLEGAL, but X11 has ++ a habit of passing that pointer back to free (). Instead we make ++ malloc (0) == malloc (1), and you'd better not dereference it, since ++ the objects library doesn't support zero-sized objects. */ ++ if (size == 0) ++ size = 1; ++ enter_critical_section (&old_mask); ++ pointer = __bounds_malloc (size + 1); ++ if (pointer != NULL) ++ __bounds_add_heap_object (pointer, size, 1, "malloc", 0, filename, line); ++ leave_critical_section (&old_mask); ++ return pointer; ++} ++ ++#ifndef __vxworks ++void * ++malloc (size_t size) ++{ ++ return __bounds_check_malloc (NULL, 0, size); ++} ++#endif ++ ++void ++__bounds_check_free (const char *filename, int line, void *pointer) ++{ ++ sigset_t old_mask; ++ ++ if (pointer == NULL) ++ { ++ if (__bounds_warn_free_null) ++ __bounds_warning (NULL, 0, "free", ++ "attempted to free a NULL pointer"); ++ return; ++ } ++ if (pointer == ILLEGAL) ++ { ++ __bounds_error ("attempted to free an ILLEGAL pointer", filename, line, ++ pointer, NULL); ++ return; ++ } ++ enter_critical_section (&old_mask); ++ if (__bounds_delete_heap_object (pointer, -1, ++ "invalid pointer passed to `free'", ++ filename, line, NULL) == 0) ++ { ++ if (__bounds_never_free_heap) ++ free_no_reuse (pointer); ++ else ++ free_reuse (pointer); ++ } ++ leave_critical_section (&old_mask); ++} ++ ++void ++free (void *pointer) ++{ ++ __bounds_check_free (NULL, 0, pointer); ++} ++ ++void * ++__bounds_check_realloc (const char *filename, int line, ++ void *pointer, size_t new_size) ++{ ++ void *new_pointer; ++ size_t org_size = 1; ++ sigset_t old_mask; ++ ++ if (pointer == ILLEGAL) ++ { ++ /* This pointer is non-NULL, but doesn't point to a heap object, so ++ this is an error. */ ++ __bounds_error ("invalid pointer passed to `realloc'", ++ filename, line, pointer, NULL); ++ return NULL; ++ } ++ enter_critical_section (&old_mask); ++ if (pointer != NULL ++ && __bounds_delete_heap_object (pointer, -1, ++ "invalid pointer passed to `realloc'", ++ filename, line, &org_size)) ++ new_pointer = NULL; ++ else ++ { ++ if (new_size == 0) ++ new_size = 1; ++ new_pointer = __bounds_realloc (pointer, new_size + 1); ++ if (new_pointer != NULL) ++ __bounds_add_heap_object (new_pointer, new_size, 1, "realloc", 0, ++ filename, line); ++ else if (pointer != NULL) ++ __bounds_add_heap_object (pointer, org_size, 1, "realloc", 0, ++ filename, line); ++ } ++ leave_critical_section (&old_mask); ++ return new_pointer; ++} ++ ++void * ++realloc (void *pointer, size_t new_size) ++{ ++ return __bounds_check_realloc (NULL, 0, pointer, new_size); ++} ++ ++void * ++__bounds_check_memalign (const char *filename, int line, ++ size_t alignment, size_t size) ++{ ++ void *pointer; ++ sigset_t old_mask; ++ ++ if (size == 0) ++ size = 1; ++ enter_critical_section (&old_mask); ++ pointer = __bounds_memalign (alignment, size + 1); ++ if (pointer != NULL) ++ __bounds_add_heap_object (pointer, size, 1, "memalign", 0, filename, ++ line); ++ leave_critical_section (&old_mask); ++ return pointer; ++} ++ ++void * ++memalign (size_t alignment, size_t size) ++{ ++ return __bounds_check_memalign (NULL, 0, alignment, size); ++} ++ ++void * ++__libc_memalign (size_t alignment, size_t size) ++{ ++ return __bounds_check_memalign (NULL, 0, alignment, size); ++} ++ ++void * ++__bounds_check_calloc (const char *filename, int line, ++ size_t size1, size_t size2) ++{ ++ size_t size = size1 * size2; ++ void *pointer; ++ sigset_t old_mask; ++ ++ if (size == 0) ++ size = 1; ++ enter_critical_section (&old_mask); ++ pointer = __bounds_calloc (size + 1, 1); ++ if (pointer != NULL) ++ __bounds_add_heap_object (pointer, size, 1, "calloc", 0, filename, line); ++ leave_critical_section (&old_mask); ++ return pointer; ++} ++ ++void * ++calloc (size_t size1, size_t size2) ++{ ++ return __bounds_check_calloc (NULL, 0, size1, size2); ++} ++ ++#ifndef __vxworks ++void cfree (void *pointer); ++ ++void ++cfree (void *pointer) ++{ ++ free (pointer); ++} ++#endif ++ ++void * ++__bounds_check_valloc (const char *filename, int line, size_t size) ++{ ++ void *pointer; ++ sigset_t old_mask; ++ ++ if (size == 0) ++ size = 1; ++ enter_critical_section (&old_mask); ++ pointer = __bounds_valloc (size + 1); ++ if (pointer != NULL) ++ __bounds_add_heap_object (pointer, size, 1, "valloc", 0, filename, line); ++ leave_critical_section (&old_mask); ++ return pointer; ++} ++ ++void * ++valloc (size_t size) ++{ ++ return __bounds_check_valloc (NULL, 0, size); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/bounds-lib.h gcc-4.0.2/gcc/bounds/lib/bounds-lib.h +--- gcc-4.0.2.org/gcc/bounds/lib/bounds-lib.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/bounds-lib.h 2005-09-29 18:00:11.000000000 +0200 +@@ -0,0 +1,592 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/bounds-lib.h ++ Summary: ++ Header file for the bounds checking library. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 4/12/94 Initial implementation. ++ RWMJ 24/1/94 Added inline `is_.._pointer' functions. ++*/ ++ ++#ifndef _BOUNDS_LIB_H_ ++#define _BOUNDS_LIB_H_ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <stdarg.h> ++#include <sys/types.h> ++ ++#include "objects.h" ++#include "alloca.h" ++#include "functions.h" ++#include "version.h" ++ ++#ifdef __vxworks ++typedef unsigned size_t; ++#endif ++ ++typedef int bool; /* Return type of <, >, etc. */ ++ ++/* These macros should be used to cast between pointers & unsigned integers. ++ Notice that on some machines, sizeof (int) != sizeof (pointer), so we ++ should take care of that here too. */ ++ ++typedef unsigned long ptr_as_unsigned_t; ++ ++#define PTR_TO_UNSIGNED(p) ((ptr_as_unsigned_t)(p)) ++#define UNSIGNED_TO_PTR(u) ((void *)(u)) ++ ++/* Constants. */ ++ ++#define ILLEGAL ((void *)-2) /* Bad ptr. arithmetic returns this. */ ++#define COLLECT_STATS 1 /* Collect statistics on call freq. */ ++#define DEBUG_FEATURES 1 /* Various extra features. */ ++#define DEBUG_OBJECTS 0 /* Print object info. To print correct ++ object info you also have to ++ modfiy c-bounds.c to use ++ __bounds_maybe_find_object instead ++ of __bounds_find_object. */ ++ ++/* Global variables defined by the compiler when bounds checking has been ++ enabled. */ ++ ++extern int __bounds_array_index_check; /* Check array indexes. */ ++extern int __bounds_never_free_heap; /* Heap allocation mode. */ ++extern int __bounds_age_limit; /* Age limit before freeing. */ ++extern int __bounds_debug_print_calls; /* Print calls to bounds library. */ ++extern int __bounds_debug_print_heap; /* Print heap. */ ++extern int __bounds_check_mmap_calls; /* Check mmap calls. */ ++extern int __bounds_debug_no_checking; /* Disable checking of pointers. */ ++extern int __bounds_checking_on; /* Bounds checking is on (in ___main) */ ++extern int __bounds_warn_unchecked_statics; /* Warn if unchecked statics used */ ++extern int __bounds_warn_unchecked_stack; /* Warn if unchecked stack used. */ ++extern int __bounds_warn_free_null; /* Warn if free (0) is called. */ ++extern int __bounds_warn_misc_strings; /* Warn for miscellaneous string ++ * nonsense from X11 and GNU libc. */ ++extern int __bounds_warn_illegal; /* Warn if illegal pointers are made. */ ++extern int __bounds_warn_unaligned; /* Warn if pointers used unaligned. */ ++extern int __bounds_warn_overlap; /* Warn if memcpy arguments overlap. */ ++extern int __bounds_warn_compare_objects; /* Warn if comparing points to ++ * different objects. */ ++extern int __bounds_never_fatal; /* Don't abort on error. */ ++extern int __bounds_oob_pointers; /* track out-of-bounds pointers. */ ++extern int __bounds_print_oob_pointers; /* Print calls to oob pointers. */ ++extern int __bounds_debug_print_function; /* Print debug for oob pointers. */ ++ ++#if COLLECT_STATS ++ ++/* Global variables for collecting call frequency statistics. */ ++ ++extern unsigned __bounds_stats_ptr_plus_int; ++extern unsigned __bounds_stats_array_reference; ++extern unsigned __bounds_stats_ptr_diff; ++extern unsigned __bounds_stats_reference; ++extern unsigned __bounds_stats_component_reference; ++extern unsigned __bounds_stats_ptr_le_ptr; ++extern unsigned __bounds_stats_ptr_lt_ptr; ++extern unsigned __bounds_stats_ptr_ge_ptr; ++extern unsigned __bounds_stats_ptr_gt_ptr; ++extern unsigned __bounds_stats_ptr_ne_ptr; ++extern unsigned __bounds_stats_ptr_eq_ptr; ++extern unsigned __bounds_stats_ptr_postinc; ++extern unsigned __bounds_stats_ptr_preinc; ++extern unsigned __bounds_stats_ptr_postdec; ++extern unsigned __bounds_stats_ptr_predec; ++extern unsigned __bounds_stats_ptr_true; ++extern unsigned __bounds_stats_ptr_false; ++extern unsigned __bounds_stats_push_function; ++extern unsigned __bounds_stats_pop_function; ++extern unsigned __bounds_stats_param_function; ++extern unsigned __bounds_stats_environment; ++extern unsigned __bounds_stats_add_stack; ++extern unsigned __bounds_stats_delete_stack; ++extern unsigned __bounds_stats_add_heap; ++extern unsigned __bounds_stats_delete_heap; ++extern unsigned __bounds_stats_unchecked_stack; ++extern unsigned __bounds_stats_unchecked_static; ++extern unsigned __bounds_stats_add_oob_table; ++extern unsigned __bounds_stats_find_oob_table; ++extern unsigned __bounds_stats_delete_oob_table; ++#if DEBUG_OBJECTS ++extern unsigned __bounds_stats_find_object; ++extern unsigned __bounds_stats_maybe_find_object; ++extern unsigned __bounds_stats_maybe_find_object_search; ++#endif ++ ++#endif /* COLLECT_STATS */ ++ ++extern char *__bounds_error_filename; ++extern int __bounds_error_filename_append; ++ ++/* `etext' is the first byte of the data segment. `edata' is the first byte of ++ the bss (uninitialized data). `end' is the first byte of the heap. */ ++ ++extern char etext, edata, end; ++ ++/* Format of the private table passed by GCC listing all unnamed static ++ objects in a source file. */ ++ ++typedef struct ++{ ++ void *ptr; /* Pointer to object. */ ++ void *size; /* Size (bytes) of object. */ ++ const char *name; /* Name of the object (NULL=unnamed). */ ++} private_table; ++ ++/* Format of the table passed by grab-statics utility to the library, listing ++ various named statics in external libraries and object files. ++ N.B.: This table is shared with `tools/find-objects.c'. */ ++ ++typedef struct ++{ ++ void *address; /* Object address. */ ++ size_t size; /* Size (bytes). */ ++ size_t align; /* Alignment. */ ++ const char *filename; /* Filename where found. */ ++ int line; /* Line where found. */ ++ const char *name; /* Name of object. */ ++} external_statics_table; ++ ++/* Prototypes of functions in this library. */ ++ ++/* Initialize the library. This is called as the first constructor function. ++ See also init.c */ ++ ++void __bounds_initialize_library (void); ++ ++/* Allocate/deallocate memory dynamically, but without checking. ++ See also malloc.c */ ++ ++void *__bounds_memalign (size_t, size_t); ++void *__bounds_malloc (size_t); ++void __bounds_free (void *); ++void *__bounds_realloc (void *, size_t); ++void *__bounds_calloc (size_t, size_t); ++void __bounds_cfree (void *); ++void *__bounds_valloc (size_t); ++ ++/* Notify, check and delete heap objects. Used by new malloc/free. ++ See also objects.c */ ++ ++void __bounds_add_heap_object (void *base, size_t count, size_t align, ++ const char *name, int no_padding, ++ const char *filename, int line); ++int __bounds_delete_heap_object (void *base, size_t size, const char *error, ++ const char *filename, int line, ++ size_t *org_size); ++ ++/* Notify, check and delete stack objects. Used on entry/exit to functions. ++ See also objects.c */ ++ ++void __bounds_add_stack_object (void *base, size_t count, size_t align, ++ const char *filename, int line, ++ const char *name, int nesting_nr); ++void __bounds_delete_stack_object (void *base, object * obj, int nesting_nr); ++ ++/* Internal versions of the above, which work with/return object pointers. ++ See also objects.c */ ++ ++object *__bounds_internal_add_stack_object (void *base, size_t count, ++ size_t align, ++ const char *filename, int line, ++ const char *name, int no_padding, ++ int nesting_nr); ++void __bounds_internal_delete_stack_object (object * obj, int nesting_nr); ++void __bounds_add_object (void *base, size_t size, size_t align, ++ const char *filename, int line, const char *name, ++ int no_padding); ++void __bounds_delete_object (object * obj); ++ ++/* Find the object referred to by a pointer. ++ See also objects.c */ ++ ++object *__bounds_find_object (void *pointer); ++object *__bounds_maybe_find_object (object * obj, void *pointer); ++ ++/* Notify of a constructed static object in the text or data segment. ++ See also objects.c */ ++ ++object *__bounds_note_constructed_object (void *pointer, int size, ++ size_t align, ++ const char *filename, int line, ++ const char *name); ++void __bounds_note_constructed_private_table (private_table *, ++ const char *filename, int line); ++ ++/* This is the new form of `__bounds_note_constructed_private_table'. ++ Eventually all calls to the above will be replaced with this, which ++ makes more stringent checks. ++ See also exstatics.c */ ++ ++void __bounds_add_static_objects_table (external_statics_table *); ++ ++/* Notify the library of the arguments to main (). ++ See also objects.c */ ++ ++void __bounds_note_main_args (int argc, char **argv); ++ ++/* Push and pop in function contexts. ++ See also functions.c */ ++ ++int __bounds_push_function (const char *name, int in_main, ++ const char *filename, int line); ++void __bounds_pop_function (const char *name, int nesting_nr); ++ ++/* Add a function parameter for the current function context. ++ See also functions.c */ ++ ++void __bounds_add_param_object (void *ptr, size_t size, size_t align, ++ const char *filename, int line, ++ const char *name, int nesting_nr); ++ ++void __bounds_add_function_object (object * obj, int nesting_nr); ++int __bounds_remove_function_object (object * obj, int nesting_nr); ++int __bounds_remove_lower_function_object (function_context *fc, object * obj); ++void __bounds_remove_function_context (object * obj, int nesting_nr); ++ ++/* Check entry for alloca. */ ++ ++void *__bounds_check_alloca (const char *filename, int line, size_t size); ++void *__bounds_check___alloca (const char *filename, int line, size_t size); ++void *__bounds_check___builtin_alloca (const char *filename, int line, ++ size_t size); ++ ++/* Add an alloca allocation to the current function context. ++ See also functions.c */ ++ ++void __bounds_add_alloca_chain (alloca_item *); ++void __bounds_delete_alloca_chain (object *); ++ ++/* Remove all the alloca allocations for this function context. ++ See also alloca.c */ ++ ++void __bounds_alloca_free (alloca_item * alloca_stack); ++ ++/* Check pointer arithmetic. These never return if they fail. ++ See also check.c */ ++ ++void *__bounds_check_ptr_plus_int (object * obj, void *pointer, ++ int offset, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_plus_int_obj (void *pointer, ++ int offset, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_minus_int (object * obj, void *pointer, ++ int offset, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_minus_int_obj (void *pointer, ++ int offset, size_t size, ++ const char *filename, int line); ++int __bounds_check_ptr_diff (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, size_t size, ++ const char *filename, int line); ++int __bounds_check_ptr_diff_obj (void *pointer1, void *pointer2, size_t size, ++ const char *filename, int line); ++ ++/* Check array reference. This is almost the same as ptr_plus_int. ++ See also check.c */ ++ ++int __bounds_check_array_reference (object * obj, void *pointer, ++ int offset, size_t size, ++ size_t array_size, const char *filename, ++ int line); ++ ++int __bounds_check_array_reference_obj (void *pointer, ++ int offset, size_t size, ++ size_t array_size, ++ const char *filename, int line); ++ ++/* Check component references ('->'). ++ See also check.c */ ++ ++void *__bounds_check_component_reference (object * obj, void *pointer, ++ int offset, int size, ++ const char *filename, int line); ++void *__bounds_check_component_reference_obj (void *pointer, ++ int offset, int size, ++ const char *filename, int line); ++ ++/* Check pointer references. These never return if they fail. ++ See also check.c */ ++ ++void *__bounds_check_reference (object * obj, void *pointer, size_t size, ++ const char *filename, int line); ++void *__bounds_check_reference_obj (void *pointer, size_t size, ++ const char *filename, int line); ++ ++/* Check pointer truthvalue or falsity. These never return if they fail. ++ See also check.c */ ++ ++bool __bounds_check_ptr_true (void *pointer, const char *filename, int line); ++bool __bounds_check_ptr_true_obj (void *pointer, ++ const char *filename, int line); ++bool __bounds_check_ptr_false (void *pointer, const char *filename, int line); ++bool __bounds_check_ptr_false_obj (void *pointer, ++ const char *filename, int line); ++ ++/* Check pointer equality and inequality operations. These never return if ++ they fail. ++ See also check.c */ ++ ++bool __bounds_check_ptr_le_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_le_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_lt_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_lt_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_ge_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_ge_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_gt_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_gt_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_ne_ptr (void *pointer1, void *pointer2, ++ const char *filename, int line); ++bool __bounds_check_ptr_eq_ptr (void *pointer1, void *pointer2, ++ const char *filename, int line); ++ ++/* Pre and post increment and decrement functions. ++ See also check.c */ ++ ++void *__bounds_check_ptr_postinc (object * obj, void **ptr_to_ptr, ++ int inc, const char *filename, int line); ++void *__bounds_check_ptr_preinc (object * obj, void **ptr_to_ptr, ++ int inc, const char *filename, int line); ++void *__bounds_check_ptr_postdec (object * obj, void **ptr_to_ptr, ++ int inc, const char *filename, int line); ++void *__bounds_check_ptr_predec (object * obj, void **ptr_to_ptr, ++ int inc, const char *filename, int line); ++void *__bounds_check_ptr_postinc_obj (void **ptr_to_ptr, ++ int inc, const char *filename, ++ int line); ++void *__bounds_check_ptr_preinc_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line); ++void *__bounds_check_ptr_postdec_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line); ++void *__bounds_check_ptr_predec_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line); ++ ++void *__bounds_check_ptr_postinc_ref (object * obj, void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_preinc_ref (object * obj, void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_postdec_ref (object * obj, void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_predec_ref (object * obj, void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_postinc_ref_obj (void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_preinc_ref_obj (void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_postdec_ref_obj (void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++void *__bounds_check_ptr_predec_ref_obj (void **ptr_to_ptr, ++ int inc, size_t size, ++ const char *filename, int line); ++ ++/* Error reporting functions. ++ See also error.c */ ++ ++void __bounds_error (const char *message, ++ const char *filename, int line, ++ void *pointer, object * obj); ++ ++void __bounds_error_size (const char *message, ++ const char *filename, int line, ++ void *pointer, int size, object * obj); ++ ++void __bounds_error2 (const char *message, ++ const char *filename, int line, ++ void *pointer1, void *pointer2, ++ object * obj1, object * obj2); ++ ++void __bounds_errorf (const char *filename, int line, ++ void *pointer, object * obj, const char *message, ...); ++ ++void __bounds_internal_error (const char *message, const char *filename, ++ int line) __attribute__ ((noreturn)); ++ ++/* Warning functions. ++ See also error.c */ ++ ++void __bounds_warning (const char *filename, int line, const char *function, ++ const char *message, ...); ++void __bounds_warn1 (const char *message, ++ const char *filename, int line, ++ void *pointer, object * obj); ++void __bounds_warnf (const char *filename, int line, ++ void *pointer, object * obj, const char *message, ...); ++ ++/* Breakpoint for external debuggers. ++ See also error.c */ ++ ++void __bounds_breakpoint (void); ++ ++/* Debugging functions. */ ++ ++void __bounds_debug_memory (void *, void *); /* (objects.c) Produce memory map. */ ++void __bounds_debug_stack_trace (void); /* (functions.c) Stack trace. */ ++void __bounds_no_checking_in_this_function (void); /* (functions.c). */ ++void __bounds_tree_check (tree *); /* (objects.c) Check tree is OK. */ ++void __bound_print_statistics (void); /* (objects.c) print statistics. */ ++void __bound_print_heap (void); /* (objects.c) print heap. */ ++ ++ ++/* Message printing functions (normal ones may call malloc). ++ See also print.c */ ++ ++#if !defined(__osf__) ++void __bounds_printf (const char *format, ...); ++void __bounds_vprintf (const char *format, va_list list); ++ ++#define printf __bounds_printf ++#define vprintf __bounds_vprintf ++#endif /* ! OSF */ ++ ++/* Unchecked versions of the string functions. ++ See also string.c */ ++ ++void *__bounds_memcpy (void *, const void *, size_t); ++void *__bounds_mempcpy (void *, const void *, size_t); ++void *__bounds_memmove (void *, const void *, size_t); ++void *__bounds_memccpy (void *, const void *, int, size_t); ++void *__bounds_memset (void *, int, size_t); ++int __bounds_memcmp (const void *, const void *, size_t); ++void *__bounds_memchr (const void *, int, size_t); ++char *__bounds_strcpy (char *, const char *); ++char *__bounds_strncpy (char *, const char *, size_t); ++char *__bounds_strcat (char *, const char *); ++size_t __bounds_strlen (const char *); ++int __bounds_strcmp (const char *, const char *); ++int __bounds_strncmp (const char *, const char *, size_t); ++ ++extern int (*__bounds_function_thread) (void); ++ ++/* Prototypes for all check functions in string.c */ ++ ++void *__bounds_check_memcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++void *__bounds_check_mempcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++void *__bounds_check_memmove (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++void __bounds_check_bcopy (const char *filename, int line, ++ const void *src, void *dest, int n); ++void *__bounds_check_memset (const char *filename, int line, ++ void *dest, int c, size_t n); ++void __bounds_check_bzero (const char *filename, int line, char *dest, int n); ++int __bounds_check_memcmp (const char *filename, int line, ++ const void *s1, const void *s2, size_t n); ++int __bounds_check_bcmp (const char *filename, int line, ++ void *s1, void *s2, int n); ++char *__bounds_check_strcpy (const char *filename, int line, ++ char *dest, const char *src); ++char *__bounds_check_strncpy (const char *filename, int line, ++ char *dest, const char *src, size_t n); ++size_t __bounds_check_strlen (const char *filename, int line, const char *s); ++int __bounds_check_strcmp (const char *filename, int line, ++ const char *s1, const char *s2); ++int __bounds_check_strncmp (const char *filename, int line, ++ const char *s1, const char *s2, size_t n); ++char *__bounds_check_strcat (const char *filename, int line, ++ char *dest, const char *src); ++char *__bounds_check_strncat (const char *filename, int line, ++ char *dest, const char *src, size_t n); ++char *__bounds_check_strpbrk (const char *filename, int line, ++ const char *string, const char *chs); ++char *__bounds_check_strrchr (const char *filename, int line, ++ const char *string, int c); ++char *__bounds_check_rindex (const char *filename, int line, ++ const char *string, int c); ++size_t __bounds_check_strspn (const char *filename, int line, ++ const char *string, const char *chs); ++size_t __bounds_check_strcspn (const char *filename, int line, ++ const char *string, const char *chs); ++char *__bounds_check_strstr (const char *filename, int line, ++ const char *s1, const char *s2); ++char *__bounds_check_strtok (const char *filename, int line, ++ char *str1, const char *str2); ++char *__bounds_check_strtok_r (const char *filename, int line, ++ char *str1, const char *str2, char **lasts); ++char *__bounds_check_strchr (const char *filename, int line, ++ const char *string, int ch); ++char *__bounds_check_strdup (const char *filename, int line, ++ const char *string); ++char *__bounds_check_index (const char *filename, int line, ++ const char *string, int ch); ++int __bounds_check_strcoll (const char *filename, int line, ++ const char *string1, const char *string2); ++size_t __bounds_check_strxfrm (const char *filename, int line, ++ char *to, const char *from, size_t n); ++void *__bounds_check_memchr (const char *filename, int line, ++ const void *s, int c, size_t n); ++void *__bounds_check_memccpy (const char *filename, int line, ++ void *dest, const void *src, int c, size_t n); ++int __bounds_check_strcasecmp (const char *filename, int line, ++ const char *s1, const char *s2); ++int __bounds_check_strncasecmp (const char *filename, int line, ++ const char *s1, const char *s2, size_t n); ++ ++/* Prototypes for all check functions in bounds.c */ ++ ++void *__bounds_check_malloc (const char *filename, int line, size_t size); ++void __bounds_check_free (const char *filename, int line, void *pointer); ++void *__bounds_check_realloc (const char *filename, int line, ++ void *pointer, size_t new_size); ++void *__bounds_check_memalign (const char *filename, int line, ++ size_t alignment, size_t size); ++void *__bounds_check_calloc (const char *filename, int line, ++ size_t size1, size_t size2); ++void *__bounds_check_valloc (const char *filename, int line, size_t size); ++void *__bounds_check_mmap (const char *filename, int line, ++ void *start, size_t size, int prot, ++ int flags, int fd, off_t offset); ++int __bounds_check_munmap (const char *filename, int line, ++ void *start, size_t size); ++ ++/* Prototypes for all oob pointer stuff. */ ++void *__bounds_create_oob_pointer (object *, void *, const char *, int); ++void __bounds_setup_oob_pointer (object **, void **, const char *, int); ++void __bounds_setup2_oob_pointer (object **, void **, object **, void **, ++ const char *, int); ++void __bounds_delete_oob_entries (object *); ++ ++/* I always call `abort' in the case of a bounds error. Sometimes `exit' tries ++ to allocate memory for some reason, so `abort' is safer. */ ++ ++#define ABORT() abort() ++ ++#endif /* _BOUNDS_LIB_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/breakpoint.c gcc-4.0.2/gcc/bounds/lib/breakpoint.c +--- gcc-4.0.2.org/gcc/bounds/lib/breakpoint.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/breakpoint.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,40 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/breakpoint.c ++ Summary: ++ Debug break point ++*/ ++ ++#include "bounds-lib.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* Breakpoint for use with debuggers such as GDB. If you place ++ a breakpoint here, then GDB will stop whenever a bounds error ++ occurs. You can use 'print __bounds_debug_memory (0,0)' to list ++ out the known memory objects, and 'where' to give a stack trace. */ ++ ++ ++void ++__bounds_breakpoint (void) ++{ ++ return; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/calloc.c gcc-4.0.2/gcc/bounds/lib/calloc.c +--- gcc-4.0.2.org/gcc/bounds/lib/calloc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/calloc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,40 @@ ++/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++/* Allocate an array of NMEMB elements each SIZE bytes long. ++ The entire array is initialized to zeros. */ ++__ptr_t ++__bounds_calloc (__malloc_size_t nmemb, __malloc_size_t size) ++{ ++ register __ptr_t result = __bounds_malloc (nmemb * size); ++ ++ if (result != NULL) ++ (void) __bounds_memset (result, 0, nmemb * size); ++ ++ return result; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/cfree.c gcc-4.0.2/gcc/bounds/lib/cfree.c +--- gcc-4.0.2.org/gcc/bounds/lib/cfree.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/cfree.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. ++This file is part of the GNU C Library. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++#ifdef _LIBC ++ ++#include <ansidecl.h> ++#include <gnu-stabs.h> ++ ++#undef cfree ++ ++function_alias (cfree, free, void, (ptr), DEFUN (cfree, (ptr), PTR ptr)) ++#else ++ ++void ++__bounds_cfree (__ptr_t ptr) ++{ ++ __bounds_free (ptr); ++} ++ ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/check.c gcc-4.0.2/gcc/bounds/lib/check.c +--- gcc-4.0.2.org/gcc/bounds/lib/check.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/check.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,1300 @@ ++/* Bounds Checking for GCC ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/check.c ++ Summary: ++ This file contains all the functions that are used to check pointers ++ at run time, and to manage the list of memory objects. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 5/12/94 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++ ++#include "bounds-lib.h" ++#include "check.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* Return whether a pointer is aligned with respect to an object. */ ++static __inline__ int ++pointer_not_aligned (void *pointer, object * obj) ++{ ++ unsigned long offset = PTR_TO_UNSIGNED (pointer) ++ - PTR_TO_UNSIGNED (obj->base); ++ return obj->align_mask ? (offset & (obj->align - 1)) != 0 ++ : (offset % obj->align) != 0; ++} ++ ++/* __bounds_check_ptr_plus_int, __bounds_check_ptr_minus_int is ++ generated by cc1 whenever the expression (pointer +/- offset*size) ++ needs to be evaluated. If the arithmetic produces an oob pointer ++ (ie. object pointed to is under/over-run or misaligned), we return an ++ ILLEGAL pointer that will be caught if it is dereferenced or used in ++ further arithmetic. */ ++ ++static __inline__ void * ++check_ptr_plus_minus_int (object * obj, void *new_pointer, ++ void *pointer, int offset, size_t size, ++ int is_plus, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_plus_int; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_%s_int " ++ "(p=%p, off=%d, sz=%u, file=\"%s\", ln=%d)\n", ++ is_plus ? "plus" : "minus", pointer, offset, size, filename, ++ line); ++#endif ++ ++ if (pointer == NULL) ++ ; ++ else if (pointer == ILLEGAL) ++ /* ILLEGAL pointers clearly mustn't be used in pointer arithmetic. */ ++ __bounds_error ("ILLEGAL pointer used in pointer arithmetic", ++ filename, line, pointer, NULL); ++ else if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &pointer, filename, line); ++ if (obj == NULL) ++ maybe_is_unchecked (pointer, filename, line, NULL); ++ else ++ { ++ if (is_plus) ++ new_pointer = (char *) pointer + (int) size *offset; ++ else ++ new_pointer = (char *) pointer - (int) size *offset; ++ ++ if (new_pointer < obj->base || new_pointer > obj->extent) ++ new_pointer = __bounds_create_oob_pointer (obj, new_pointer, ++ filename, line); ++ } ++ } ++ ++ /* Check to see if this operation is OK for this type of object. If so, ++ we return the result as usual. Otherwise, we return an ILLEGAL pointer ++ that will be caught some time in the future (if it is used). */ ++ else if (new_pointer < obj->base || new_pointer > obj->extent) ++ { ++ if (__bounds_warn_illegal) ++ __bounds_warn1 ++ ("created an ILLEGAL pointer in pointer arithmetic", filename, ++ line, new_pointer, obj); ++ if (__bounds_oob_pointers) ++ /* create entry for out of bounds pointer */ ++ new_pointer = __bounds_create_oob_pointer (obj, new_pointer, ++ filename, line); ++ else ++ new_pointer = ILLEGAL; ++ } ++ else if (__bounds_warn_unaligned ++ && pointer_not_aligned (new_pointer, obj)) ++ /* Note: We might return ILLEGAL here, but I think generating a non- ++ aligned pointer at any time must be an error. */ ++ __bounds_error ("created an unaligned pointer in pointer arithmetic", ++ filename, line, new_pointer, obj); ++ } ++ return new_pointer; ++} ++ ++void * ++__bounds_check_ptr_plus_int (object * obj, void *pointer, int offset, ++ size_t size, const char *filename, int line) ++{ ++ return check_ptr_plus_minus_int (obj, ++ (char *) pointer + (int) size * offset, ++ pointer, offset, size, 1, filename, line); ++} ++ ++void * ++__bounds_check_ptr_plus_int_obj (void *pointer, int offset, ++ size_t size, const char *filename, int line) ++{ ++ return check_ptr_plus_minus_int (__bounds_find_object (pointer), ++ (char *) pointer + (int) size * offset, ++ pointer, offset, size, 1, filename, line); ++} ++ ++void * ++__bounds_check_ptr_minus_int (object * obj, void *pointer, int offset, ++ size_t size, const char *filename, int line) ++{ ++ return check_ptr_plus_minus_int (obj, ++ (char *) pointer - (int) size * offset, ++ pointer, offset, size, 0, filename, line); ++} ++ ++void * ++__bounds_check_ptr_minus_int_obj (void *pointer, int offset, ++ size_t size, const char *filename, int line) ++{ ++ return check_ptr_plus_minus_int (__bounds_find_object (pointer), ++ (char *) pointer - (int) size * offset, ++ pointer, offset, size, 0, filename, line); ++} ++ ++/* __bounds_check_array_reference is generated by cc1 whenever the ++ expression (pointer + offset*size) needs to be evaluated in an ++ array reference. It is almost equivalent to the `ptr_plus_int' ++ case, except that the pointer returned must always be correct, ++ so we will never return ILLEGAL here, but always fail. */ ++ ++__inline__ int ++__bounds_check_array_reference (object * obj, void *pointer, int offset, ++ size_t size, size_t array_size, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_array_reference; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_array_reference " ++ "(p=%p, off=%d, sz=%u, ar_sz=%u, file=\"%s\", ln=%d)\n", ++ pointer, offset, size, array_size, filename, line); ++#endif ++ ++ if (pointer == NULL || pointer == ILLEGAL) ++ /* NULL or ILLEGAL pointers clearly mustn't be used in pointer ++ arithmetic. */ ++ __bounds_error ("NULL or ILLEGAL pointer used in array reference", ++ filename, line, pointer, NULL); ++ ++ else ++ { ++ void *new_pointer = (char *) pointer + (int) size * offset; ++ ++ if (__bounds_array_index_check && array_size > size) ++ { ++ if (offset < 0 || ((int) size * offset) >= (int) array_size) ++ { ++ ++ if (obj == NULL) ++ { ++ /* Create dummy object for printing. */ ++ __bounds_note_constructed_object (pointer, -array_size, ++ size, ++ filename, line, NULL); ++ obj = __bounds_find_object (pointer); ++ __bounds_errorf (filename, line, new_pointer, obj, ++ "array reference (%d) outside bounds of " ++ "the array", offset); ++ /* Delete dummy object. */ ++ __bounds_delete_object (obj); ++ } ++ else ++ { ++ void *savebase, *saveextent; ++ size_t savesize, savealign; ++ ++ savebase = obj->base; ++ saveextent = obj->extent; ++ savesize = obj->size; ++ savealign = obj->line; ++ obj->base = pointer; ++ obj->extent = (char *) pointer + array_size; ++ obj->size = array_size; ++ obj->align = size; ++ __bounds_errorf (filename, line, new_pointer, obj, ++ "array reference (%d) outside bounds of " ++ "the array", offset); ++ obj->base = savebase; ++ obj->extent = saveextent; ++ obj->size = savesize; ++ obj->align = savealign; ++ } ++ } ++ } ++ ++ if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &pointer, filename, line); ++ if (obj) ++ /* Illegal pointer used in further arithmetic. This arithmetic ++ must be wrong. */ ++ __bounds_error ("illegal pointer used in array reference", ++ filename, line, pointer, NULL); ++ else ++ maybe_is_unchecked (pointer, filename, line, NULL); ++ } ++ else ++ { ++ /* Check to see if this operation is OK for this type of object. ++ If so, we return the result as usual, which will be ++ immediately be referenced, so it had better be correct. */ ++ if (new_pointer < obj->base || ++ (char *) new_pointer + size > (char *) obj->extent) ++ __bounds_error ("array reference outside bounds of the array", ++ filename, line, new_pointer, obj); ++ if (__bounds_warn_unaligned && ++ pointer_not_aligned (new_pointer, obj)) ++ /* I'm sure this must be a compiler error if it ever happens, ++ unless the programmer has done some nasty casting. */ ++ __bounds_error ("created an unaligned pointer in " ++ "array reference", ++ filename, line, new_pointer, obj); ++ } ++ } ++ } ++ ++ return offset; ++} ++ ++int ++__bounds_check_array_reference_obj (void *pointer, int offset, ++ size_t size, size_t array_size, ++ const char *filename, int line) ++{ ++ return __bounds_check_array_reference (__bounds_find_object (pointer), ++ pointer, offset, size, array_size, ++ filename, line); ++} ++ ++/* __bounds_check_component_reference ++ Check expressions of the form 'p->e' correctly at run time. */ ++ ++__inline__ void * ++__bounds_check_component_reference (object * obj, void *pointer, int offset, ++ int size, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_component_reference; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_component_reference " ++ "(p=%p, off=%d, sz=%d, file=\"%s\", ln=%d)\n", ++ pointer, offset, size, filename, line); ++#endif ++ ++ /* Check for NULL and ILLEGAL pointers passed here. Pointer arithmetic on ++ these is certainly wrong. */ ++ if (pointer == NULL || pointer == ILLEGAL) ++ __bounds_error ("NULL or ILLEGAL pointer used in component reference", ++ filename, line, pointer, NULL); ++ else if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &pointer, filename, line); ++ if (obj) ++ __bounds_error ("illegal pointer used in component reference", ++ filename, line, pointer, NULL); ++ else ++ maybe_is_unchecked (pointer, filename, line, NULL); ++ } ++ ++ /* Check that the operation will not overrun the end of the object. */ ++ else if ((char *) pointer + offset < (char *) obj->base ++ || (char *) pointer + offset + size > (char *) obj->extent) ++ __bounds_error_size ("pointer arithmetic would overrun the end" ++ " of the object", ++ filename, line, (char *) pointer + offset, ++ size, obj); ++ } ++ ++ return pointer; ++} ++ ++void * ++__bounds_check_component_reference_obj (void *pointer, int offset, int size, ++ const char *filename, int line) ++{ ++ return __bounds_check_component_reference (__bounds_find_object (pointer), ++ pointer, offset, size, ++ filename, line); ++} ++ ++/* __bounds_check_ptr_diff is generated by cc1 whenever we need ++ to evaluate an expression of the form (pointer - pointer). This ++ object is valid only if the two pointers are pointing to the ++ same object. */ ++ ++__inline__ int ++__bounds_check_ptr_diff (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, size_t size, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_diff; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_diff " ++ "(p1=%p, p2=%p, sz=%u, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, size, filename, line); ++#endif ++ ++ if (pointer1 == NULL || pointer2 == NULL) ++ ; ++ /* Check for ILLEGAL pointers passed here. Pointer arithmetic on these ++ is wrong. */ ++ else if (pointer1 == ILLEGAL || pointer2 == ILLEGAL) ++ __bounds_error2 ("ILLEGAL pointer used in pointer arithmetic", ++ filename, line, pointer1, pointer2, NULL, NULL); ++ else ++ { ++ if (obj1 == NULL) ++ obj1 = __bounds_find_object (pointer1); ++ if (obj2 == NULL) ++ obj2 = __bounds_find_object (pointer2); ++ if (__bounds_oob_pointers) ++ { ++ if (obj1 == NULL && obj2 == NULL) ++ __bounds_setup2_oob_pointer (&obj1, &pointer1, ++ &obj2, &pointer2, ++ filename, line); ++ else if (obj1 == NULL) ++ __bounds_setup_oob_pointer (&obj1, &pointer1, filename, line); ++ else if (obj2 == NULL) ++ __bounds_setup_oob_pointer (&obj2, &pointer2, filename, line); ++ } ++ if (obj1 == NULL || obj2 == NULL) ++ { ++ /* Two unchecked static objects or two unchecked stack objects. ++ Allow the arithmetic to go ahead. */ ++ if (obj1 == NULL) ++ maybe_is_unchecked (pointer1, filename, line, NULL); ++ if (obj2 == NULL) ++ maybe_is_unchecked (pointer2, filename, line, NULL); ++ } ++ ++ /* Check that the objects pointed to by the pointers are the same. ++ Since object structures are unique, checking obj1 == obj2 is ++ sufficient. */ ++ else if (obj1 != obj2) ++ { ++ /* if objects are adjacent function parameters (i.e no padding) ++ then no error. */ ++ if (!(obj1->no_padding && obj2->no_padding ++ && (obj2->base == obj1->extent ++ || obj1->base == obj2->extent))) ++ __bounds_error2 ("in pointer difference, pointers point" ++ " to different objects", ++ filename, line, pointer1, pointer2, ++ obj1, obj2); ++ } ++ /* Check that the size of the pointers (size, passed to this function) ++ is a whole multiple of the size of the object's elements. */ ++ else if (__bounds_warn_unaligned) ++ { ++ if (obj1->align_mask ++ ? (size & (obj1->align - 1)) != 0 ++ : (size % obj1->align) != 0) ++ __bounds_errorf (filename, line, pointer1, obj1, ++ "size of pointer (%d bytes) not a whole" ++ " multiple of size of elements (%d bytes)" ++ " in pointer difference", size, obj1->align); ++ /* Check that both pointers are aligned w.r.t. the object ++ they point to. */ ++ else if (pointer_not_aligned (pointer1, obj1)) ++ __bounds_error ("unaligned pointer used in" ++ " pointer arithmetic", ++ filename, line, pointer1, obj1); ++ else if (pointer_not_aligned (pointer2, obj2)) ++ __bounds_error ("unaligned pointer used in" ++ " pointer arithmetic", ++ filename, line, pointer2, obj2); ++ } ++ } ++ } ++ ++ return (int) ((char *) pointer1 - (char *) pointer2) / (int) size; ++} ++ ++int ++__bounds_check_ptr_diff_obj (void *pointer1, void *pointer2, size_t size, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_diff (NULL, NULL, ++ pointer1, pointer2, size, ++ filename, line); ++} ++ ++/* __bounds_check_reference is generated by cc1 whenever a reference ++ is about to be made to a pointer. This function does not actually ++ do the reference, but checks that it can proceed correctly. */ ++ ++__inline__ void * ++__bounds_check_reference (object * obj, void *pointer, size_t size, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_reference; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_reference " ++ "(p=%p, sz=%u, file=\"%s\", ln=%d)\n", ++ pointer, size, filename, line); ++#endif ++ ++ /* Check for NULL or ILLEGAL pointers, or pointers that don't seem to ++ point to known memory objects. */ ++ if (pointer == NULL || pointer == ILLEGAL) ++ __bounds_error ("attempt to reference a NULL or ILLEGAL pointer", ++ filename, line, pointer, NULL); ++ else if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &pointer, filename, line); ++ if (obj) ++ __bounds_error ("attempt to reference an illegal pointer", ++ filename, line, pointer, NULL); ++ else ++ maybe_is_unchecked (pointer, filename, line, NULL); ++ } ++ ++ /* Check that the size is a whole multiple of the element size, and that ++ the pointer is aligned. */ ++ else ++ { ++ if (__bounds_warn_unaligned) ++ { ++ if (obj->align_mask ++ ? (size & (obj->align - 1)) != 0 : (size % obj->align) != 0) ++ __bounds_errorf (filename, line, pointer, obj, ++ "size of pointer (%d bytes) not a whole" ++ " multiple of size of elements (%d bytes)" ++ " in pointer reference", size, obj->align); ++ else if (pointer_not_aligned (pointer, obj)) ++ __bounds_error ("unaligned pointer used in pointer reference", ++ filename, line, pointer, obj); ++ } ++ /* Check that reference will not overrun the end of the object. */ ++ if ((char *) pointer < (char *) obj->base ++ || (char *) pointer + size > (char *) obj->extent) ++ __bounds_error_size ("attempt to reference memory overrunning" ++ " the end of an object", ++ filename, line, pointer, size, obj); ++ } ++ } ++ return pointer; ++} ++ ++void * ++__bounds_check_reference_obj (void *pointer, size_t size, ++ const char *filename, int line) ++{ ++ return __bounds_check_reference (__bounds_find_object (pointer), ++ pointer, size, filename, line); ++} ++ ++/* __bounds_check_ptr_true and __bounds_check_ptr_false. These are ++ generated by cc1 whenever we meet truthvalue conversion of a ++ pointer or '! pointer', ie. ++ if (pointer) { ... } or if (!pointer) { ... } ++ They both check the same thing - namely that the pointer is ++ NULL or pointing to valid memory. ILLEGAL pointers fail this test. */ ++ ++static __inline__ void ++check_true_or_false (void *pointer, const char *filename, int line) ++{ ++ if (pointer != NULL) ++ { ++ if (pointer == ILLEGAL) ++ __bounds_error ("attempt to find truthvalue of an ILLEGAL pointer", ++ filename, line, pointer, NULL); ++#if 0 ++ /* Disable this because we can still test pointers after we free ++ them. We can not dereference them but that will be checked ++ somewhere else. */ ++ else if (obj == NULL) ++ /* Second chance for possible unchecked pointers. */ ++ maybe_is_unchecked (pointer, filename, line, NULL); ++#endif ++ } ++} ++ ++__inline__ bool ++__bounds_check_ptr_true (void *pointer, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_true; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_true (p=%p, file=\"%s\", ln=%d)\n", ++ pointer, filename, line); ++#endif ++ ++ check_true_or_false (pointer, filename, line); ++ } ++ ++ return pointer != NULL; ++} ++ ++bool ++__bounds_check_ptr_true_obj (void *pointer, const char *filename, int line) ++{ ++ return __bounds_check_ptr_true (pointer, filename, line); ++} ++ ++__inline__ bool ++__bounds_check_ptr_false (void *pointer, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_false; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_false (p=%p, file=\"%s\", ln=%d)\n", ++ pointer, filename, line); ++#endif ++ ++ check_true_or_false (pointer, filename, line); ++ } ++ ++ return pointer == NULL; ++} ++ ++bool ++__bounds_check_ptr_false_obj (void *pointer, const char *filename, int line) ++{ ++ return __bounds_check_ptr_false (pointer, filename, line); ++} ++ ++/* __bounds_check_ptr_OP_ptr, where 'OP' is le, lt, ge, gt are ++ generated by cc1 when we meet comparison operations <=, <, >=, > ++ respectively. */ ++ ++static __inline__ void ++check_inequality (object * obj1, object * obj2, ++ void **pointer1, void **pointer2, ++ const char *filename, int line) ++{ ++ /* Doing an inequality operation against a NULL pointer is a strange thing ++ to want to do. Against an ILLEGAL pointer, it's definitely wrong. */ ++ if (*pointer1 == NULL || *pointer2 == NULL) ++ ; ++ else if (*pointer1 == ILLEGAL || *pointer2 == ILLEGAL) ++ __bounds_error2 ("ILLEGAL pointer used in <, >, <= or >= of pointers", ++ filename, line, *pointer1, *pointer2, NULL, NULL); ++ else if ((obj1 == NULL ++ && (obj1 = __bounds_find_object (*pointer1)) == NULL) ++ || (obj2 == NULL ++ && (obj2 = __bounds_find_object (*pointer2)) == NULL)) ++ { ++ if (__bounds_oob_pointers) ++ { ++ if (obj1 == NULL && obj2 == NULL) ++ __bounds_setup2_oob_pointer (&obj1, pointer1, ++ &obj2, pointer2, filename, line); ++ else if (obj1 == NULL) ++ __bounds_setup_oob_pointer (&obj1, pointer1, filename, line); ++ else if (obj2 == NULL) ++ __bounds_setup_oob_pointer (&obj2, pointer2, filename, line); ++ } ++ if (__bounds_warn_compare_objects && obj1 && obj2 && obj1 != obj2) ++ __bounds_error2 ("in <, >, <= or >= of pointers, pointers" ++ " point to different objects", ++ filename, line, *pointer1, *pointer2, obj1, obj2); ++ /* Two unchecked static objects or two unchecked stack objects. ++ Allow the arithmetic to go ahead. */ ++ else ++ { ++ if (obj1 == NULL) ++ maybe_is_unchecked (*pointer1, filename, line, NULL); ++ if (obj2 == NULL) ++ maybe_is_unchecked (*pointer2, filename, line, NULL); ++ } ++ } ++ /* Check that the objects pointed to by the pointers are the same. Since ++ object structures are unique, checking obj1 == obj2 is sufficient. */ ++ else if (__bounds_warn_compare_objects && obj1 != obj2) ++ __bounds_error2 ("in <, >, <= or >= of pointers, pointers" ++ " point to different objects", ++ filename, line, *pointer1, *pointer2, obj1, obj2); ++} ++ ++__inline__ bool ++__bounds_check_ptr_le_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_le_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_le_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ check_inequality (obj1, obj2, &pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 <= pointer2; ++} ++ ++bool ++__bounds_check_ptr_le_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_le_ptr (NULL, NULL, pointer1, pointer2, ++ filename, line); ++} ++ ++__inline__ bool ++__bounds_check_ptr_lt_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_lt_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_lt_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ check_inequality (obj1, obj2, &pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 < pointer2; ++} ++ ++bool ++__bounds_check_ptr_lt_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_lt_ptr (NULL, NULL, pointer1, pointer2, ++ filename, line); ++ ++} ++ ++__inline__ bool ++__bounds_check_ptr_ge_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_ge_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_ge_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ check_inequality (obj1, obj2, &pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 >= pointer2; ++} ++ ++bool ++__bounds_check_ptr_ge_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_ge_ptr (NULL, NULL, pointer1, pointer2, ++ filename, line); ++} ++ ++__inline__ bool ++__bounds_check_ptr_gt_ptr (object * obj1, object * obj2, ++ void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_gt_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_gt_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ check_inequality (obj1, obj2, &pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 > pointer2; ++} ++ ++bool ++__bounds_check_ptr_gt_ptr_obj (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_gt_ptr (NULL, NULL, pointer1, pointer2, ++ filename, line); ++ ++} ++ ++/* __bounds_check_ptr_ne_ptr and __bounds_check_ptr_eq_ptr are ++ generated by cc1 when we get pointer != pointer or pointer == ++ pointer respectively. We check that the pointers used aren't ++ ILLEGAL. ++ Note (5/3/95): Stale pointers used in == and != are OK, because ++ of the following piece of code: ++ oldPtr = ptr; ++ ptr = realloc (ptr, n); ++ if (ptr != oldPtr) { ++ ** execute code if the realloc'd memory moved. ** ++ ... ++ } ++ Note (31/5/95): NULL pointers are OK. */ ++ ++static __inline__ void ++check_equality (void **pointer1, void **pointer2, ++ const char *filename, int line) ++{ ++ object *obj1; ++ object *obj2; ++ ++ if (__bounds_oob_pointers) ++ __bounds_setup2_oob_pointer (&obj1, pointer1, &obj2, pointer2, ++ filename, line); ++ if (*pointer1 == ILLEGAL || *pointer2 == ILLEGAL) ++ __bounds_error2 ++ ("ILLEGAL pointer used in == or != comparison of pointers", filename, ++ line, pointer1, pointer2, NULL, NULL); ++#if 0 /* (See note 5/3/95 above) */ ++ /* Make sure we know about each pointer, or the pointer points to an ++ unchecked object. */ ++ if (!((pointer1 == NULL ++ || __bounds_find_object (pointer1) != NULL) ++ && (pointer2 == NULL || __bounds_find_object (pointer2) != NULL))) ++ /* One of the pointers is invalid. */ ++ __bounds_error2 ++ ("invalid pointer used in == or != comparison of pointers", filename, ++ line, pointer1, pointer2, __bounds_find_object (pointer1), ++ __bounds_find_object (pointer2)); ++#endif ++} ++ ++bool ++__bounds_check_ptr_ne_ptr (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_ne_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_ne_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ ++ check_equality (&pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 != pointer2; ++} ++ ++bool ++__bounds_check_ptr_eq_ptr (void *pointer1, void *pointer2, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_eq_ptr; ++#endif ++ ++ if (!__bounds_debug_no_checking) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_eq_ptr " ++ "(p1=%p, p2=%p, file=\"%s\", ln=%d)\n", ++ pointer1, pointer2, filename, line); ++#endif ++ ++ check_equality (&pointer1, &pointer2, filename, line); ++ } ++ ++ return pointer1 == pointer2; ++} ++ ++/* Post- and pre-increment and decrement functions. These functions ++ change the value of the pointer through the 'void **' argument. ++ They return the value of the pointer either before or after the ++ pointer was changed, as appropriate. */ ++ ++static __inline__ void * ++check_inc_or_dec (object * obj, void **ptr_to_ptr, int inc, int is_post, ++ const char *operation, const char *filename, int line) ++{ ++ void *old_ptr = *ptr_to_ptr; /* Current value of the pointer. */ ++ void *new_ptr; /* New value after increment. */ ++ ++ /* Evaluate the new pointer, assuming the operation will be able to go ++ ahead. */ ++ new_ptr = (void *) ((char *) old_ptr + inc); ++ ++ /* Check we are not using a NULL or ILLEGAL pointer in arithmetic. */ ++ if (old_ptr == NULL || old_ptr == ILLEGAL) ++ { ++ __bounds_errorf (filename, line, old_ptr, NULL, ++ "NULL or ILLEGAL pointer used in %s", operation); ++ old_ptr = new_ptr = ILLEGAL; ++ } ++ /* See if we can find what the pointer points to, or if it is an unchecked ++ pointer. */ ++ else if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &old_ptr, filename, line); ++ if (obj == NULL) ++ maybe_is_unchecked (old_ptr, filename, line, NULL); ++ else ++ { ++ new_ptr = (void *) ((char *) old_ptr + inc); ++ if (new_ptr < obj->base || new_ptr > obj->extent) ++ new_ptr = __bounds_create_oob_pointer (obj, new_ptr, ++ filename, line); ++ } ++ } ++ /* Check the alignment of the pointer and increment size. */ ++ else ++ { ++ if (__bounds_warn_unaligned) ++ { ++ if (obj->align_mask ++ ? (inc & (obj->align - 1)) != 0 : (inc % obj->align) != 0) ++ __bounds_errorf (filename, line, old_ptr, obj, ++ "%srement size (%d bytes) not a whole multiple" ++ " of size of elements (%d bytes) in %s", ++ inc >= 0 ? "inc" : "dec", abs (inc), obj->align, ++ operation); ++ else if (pointer_not_aligned (old_ptr, obj)) ++ __bounds_errorf (filename, line, old_ptr, obj, ++ "unaligned pointer used in %s", operation); ++ } ++ /* Check the increment or decrement will not overrun the object. */ ++ if (new_ptr < obj->base || new_ptr > obj->extent) ++ { ++ if (__bounds_warn_illegal) ++ __bounds_warnf (filename, line, new_ptr, obj, ++ "created an ILLEGAL pointer in %s", operation); ++ if (__bounds_oob_pointers) ++ /* create entry for out of bounds pointer */ ++ new_ptr = __bounds_create_oob_pointer (obj, new_ptr, ++ filename, line); ++ else ++ new_ptr = ILLEGAL; /* Catch this error later. */ ++ } ++ } ++ ++ /* Set the pointer value to the new pointer value, and return the required ++ pointer. */ ++ *ptr_to_ptr = new_ptr; ++ return is_post ? old_ptr : new_ptr; ++} ++ ++__inline__ void * ++__bounds_check_ptr_postinc (object * obj, void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ { ++ void *result = *ptr_to_ptr; ++ char *tmp = (char *)ptr_to_ptr; ++ *tmp += inc; ++ return result; ++ } ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_postinc (p=%p, inc=%d, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, filename, line); ++#endif ++ ++ return check_inc_or_dec (obj, ptr_to_ptr, inc, 1, ++ "postincrement (p++)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_preinc (object * obj, void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ return (*(char **) ptr_to_ptr) += inc; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_preinc (p=%p, inc=%d, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, filename, line); ++#endif ++ ++ return check_inc_or_dec (obj, ptr_to_ptr, inc, 0, ++ "preincrement (++p)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_postdec (object * obj, void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ { ++ void *result = *ptr_to_ptr; ++ char *tmp = (char *)ptr_to_ptr; ++ *tmp -= inc; ++ return result; ++ } ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_postdec (p=%p, inc=%d, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, filename, line); ++#endif ++ ++ return check_inc_or_dec (obj, ptr_to_ptr, -inc, 1, ++ "postdecrement (p--)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_predec (object * obj, void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ return (*(char **) ptr_to_ptr) -= inc; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_predec (p=%p, inc=%d, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, filename, line); ++#endif ++ ++ return check_inc_or_dec (obj, ptr_to_ptr, -inc, 0, ++ "predecrement (--p)", filename, line); ++} ++ ++void * ++__bounds_check_ptr_postinc_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_postinc (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, filename, line); ++} ++ ++void * ++__bounds_check_ptr_preinc_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_preinc (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, filename, line); ++} ++ ++void * ++__bounds_check_ptr_postdec_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_postdec (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, filename, line); ++} ++ ++void * ++__bounds_check_ptr_predec_obj (void **ptr_to_ptr, int inc, ++ const char *filename, int line) ++{ ++ return __bounds_check_ptr_predec (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, filename, line); ++} ++ ++/* Post- and pre-increment and decrement functions. These functions ++ change the value of the pointer through the 'void **' argument. ++ They return the value of the pointer either before or after the ++ pointer was changed, as appropriate. */ ++ ++static __inline__ void * ++check_inc_or_dec_ref (object * obj, void **ptr_to_ptr, int inc, size_t size, ++ int is_post, const char *operation, ++ const char *filename, int line) ++{ ++ void *old_ptr = *ptr_to_ptr; /* Current value of the pointer. */ ++ void *new_ptr; /* New value after increment. */ ++ ++ /* Evaluate the new pointer, assuming the operation will be able to go ++ ahead. */ ++ new_ptr = (void *) ((char *) old_ptr + inc); ++ ++ /* Check we are not using a NULL or ILLEGAL pointer in arithmetic. */ ++ if (old_ptr == NULL || old_ptr == ILLEGAL) ++ { ++ __bounds_errorf (filename, line, old_ptr, NULL, ++ "NULL or ILLEGAL pointer used in %s", operation); ++ old_ptr = new_ptr = ILLEGAL; ++ } ++ /* See if we can find what the pointer points to, or if it is an unchecked ++ pointer. */ ++ else if (obj == NULL) ++ { ++ if (__bounds_oob_pointers) ++ __bounds_setup_oob_pointer (&obj, &old_ptr, filename, line); ++ if (obj == NULL) ++ maybe_is_unchecked (old_ptr, filename, line, NULL); ++ else ++ { ++ new_ptr = (void *) ((char *) old_ptr + inc); ++ if (inc && (new_ptr < obj->base || new_ptr > obj->extent)) ++ new_ptr = __bounds_create_oob_pointer (obj, new_ptr, ++ filename, line); ++ } ++ } ++ /* Check the alignment of the pointer and increment size. */ ++ else ++ { ++ if (__bounds_warn_unaligned) ++ { ++ if (obj->align_mask ++ ? (inc & (obj->align - 1)) != 0 : (inc % obj->align) != 0) ++ __bounds_errorf (filename, line, old_ptr, obj, ++ "%srement size (%d bytes) not a whole multiple" ++ " of size of elements (%d bytes) in %s", ++ inc >= 0 ? "inc" : "dec", abs (inc), obj->align, ++ operation); ++ else if (pointer_not_aligned (old_ptr, obj)) ++ __bounds_errorf (filename, line, old_ptr, obj, ++ "unaligned pointer used in %s", operation); ++ } ++ /* Check the increment or decrement will not overrun the object. */ ++ if (new_ptr < obj->base || new_ptr > obj->extent) ++ { ++ if (__bounds_warn_illegal) ++ __bounds_warnf (filename, line, new_ptr, obj, ++ "created an ILLEGAL pointer in %s", operation); ++ if (__bounds_oob_pointers) ++ /* create entry for out of bounds pointer */ ++ new_ptr = __bounds_create_oob_pointer (obj, new_ptr, ++ filename, line); ++ else ++ new_ptr = ILLEGAL; /* Catch this error later. */ ++ } ++ } ++ ++ /* Set the pointer value to the new pointer value, and return the required ++ pointer. */ ++ *ptr_to_ptr = new_ptr; ++ new_ptr = is_post ? old_ptr : new_ptr; ++ if (new_ptr == NULL || new_ptr == ILLEGAL) ++ __bounds_errorf (filename, line, new_ptr, NULL, ++ "NULL or ILLEGAL pointer used in %s", operation); ++ else if (obj != NULL) ++ { ++ /* If size != inc check the pointer again. This is rare. */ ++ if ((int) size != inc && __bounds_warn_unaligned) ++ { ++ if (obj->align_mask ++ ? (size & (obj->align - 1)) != 0 : (size % obj->align) != 0) ++ __bounds_errorf (filename, line, new_ptr, obj, ++ "size of pointer (%d bytes) not a whole" ++ " multiple of size of elements (%d bytes)" ++ " in %s", size, obj->align, operation); ++ else if (pointer_not_aligned (new_ptr, obj)) ++ __bounds_errorf (filename, line, new_ptr, obj, ++ "unaligned pointer used in %s", operation); ++ } ++ if ((char *) new_ptr < (char *) obj->base ++ || (char *) new_ptr + size > (char *) obj->extent) ++ __bounds_errorf (filename, line, new_ptr, obj, ++ "created an ILLEGAL pointer in %s", operation); ++ } ++ return new_ptr; ++} ++ ++__inline__ void * ++__bounds_check_ptr_postinc_ref (object * obj, void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ { ++ void *result = *ptr_to_ptr; ++ char *tmp = (char *)ptr_to_ptr; ++ *tmp += inc; ++ return result; ++ } ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_postinc_ref " ++ "(p=%p, inc=%d, sz=%u, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, size, filename, line); ++#endif ++ ++ return check_inc_or_dec_ref (obj, ptr_to_ptr, inc, size, 1, ++ "postincrement (*p++)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_preinc_ref (object * obj, void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ return (*(char **) ptr_to_ptr) += inc; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_preinc_ref " ++ "(p=%p, inc=%d, sz=%u, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, size, filename, line); ++#endif ++ ++ return check_inc_or_dec_ref (obj, ptr_to_ptr, inc, size, 0, ++ "preincrement (*++p)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_postdec_ref (object * obj, void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ { ++ void *result = *ptr_to_ptr; ++ char *tmp = (char *)ptr_to_ptr; ++ *tmp -= inc; ++ return result; ++ } ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_postdec_ref " ++ "(p=%p, inc=%d, sz=%u, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, size, filename, line); ++#endif ++ ++ return check_inc_or_dec_ref (obj, ptr_to_ptr, -inc, size, 1, ++ "postdecrement (*p--)", filename, line); ++} ++ ++__inline__ void * ++__bounds_check_ptr_predec_ref (object * obj, void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, int line) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ ++ if (__bounds_debug_no_checking) ++ return (*(char **) ptr_to_ptr) -= inc; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_check_ptr_predec_ref " ++ "(p=%p, inc=%d, sz=%u, file=\"%s\", ln=%d)\n", ++ *ptr_to_ptr, inc, size, filename, line); ++#endif ++ ++ return check_inc_or_dec_ref (obj, ptr_to_ptr, -inc, size, 0, ++ "predecrement (*--p)", filename, line); ++} ++ ++void * ++__bounds_check_ptr_postinc_ref_obj (void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, ++ int line) ++{ ++ return __bounds_check_ptr_postinc_ref (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, size, filename, ++ line); ++} ++ ++void * ++__bounds_check_ptr_preinc_ref_obj (void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, ++ int line) ++{ ++ return __bounds_check_ptr_preinc_ref (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, size, filename, ++ line); ++} ++ ++void * ++__bounds_check_ptr_postdec_ref_obj (void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, ++ int line) ++{ ++ return __bounds_check_ptr_postdec_ref (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, size, filename, ++ line); ++} ++ ++void * ++__bounds_check_ptr_predec_ref_obj (void **ptr_to_ptr, int inc, ++ size_t size, const char *filename, ++ int line) ++{ ++ return __bounds_check_ptr_predec_ref (__bounds_find_object (*ptr_to_ptr), ++ ptr_to_ptr, inc, size, filename, ++ line); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/check.h gcc-4.0.2/gcc/bounds/lib/check.h +--- gcc-4.0.2.org/gcc/bounds/lib/check.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/check.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* Bounds Checking for GCC. ++ Written by Richard W.M. Jones ++ ++ File: ++ lib/check.h ++ Summary: ++ Functions are provided here to guess whether an object is ++ unchecked or not. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 13/7/95 Initial implementation. ++*/ ++ ++#ifndef _CHECK_H_ ++#define _CHECK_H_ ++ ++/* We can not find all unchecked objects. For example we can not detect ++ calls to mmap, brk or sbrk. We simply check if the pointer is ++ below or above the stack pointer. */ ++ ++/* This is the generic method that will work on most 32-bit and 64-bit ++ architectures. (Note: 64-bit support is *untested*, since we have no ++ Alphas around here). */ ++#define DECLARE_SP int i; register void *sp = &i ++#define POINTER_ON_STACK(p) ((void *)sp <= (p) && (p) <= (void *)-1) ++ ++/* We have looked up a pointer in the tree and not found it. Give it ++ a second chance here, where we may determine that it is an unchecked ++ static object. We give a warning if it is. ++ Similarly for unchecked stack objects, we can test if the pointer is ++ between SP and the top of the stack. */ ++ ++static __inline__ void ++maybe_is_unchecked (void *pointer, const char *filename, ++ int line, const char *function) ++{ ++ DECLARE_SP; ++ ++ if (POINTER_ON_STACK (pointer)) ++ { ++#if COLLECT_STATS ++ ++__bounds_stats_unchecked_stack; ++#endif ++ if (__bounds_debug_no_checking == 0 && __bounds_warn_unchecked_stack) ++ __bounds_warning (filename, line, function, ++ "unchecked stack object used at address %p", ++ pointer); ++ } ++ else ++ { ++#if COLLECT_STATS ++ ++__bounds_stats_unchecked_static; ++#endif ++ if (__bounds_debug_no_checking == 0 && __bounds_warn_unchecked_statics) ++ __bounds_warning (filename, line, function, ++ "unchecked static object used at address %p", ++ pointer); ++ } ++} ++ ++#endif /* _CHECK_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/error.c gcc-4.0.2/gcc/bounds/lib/error.c +--- gcc-4.0.2.org/gcc/bounds/lib/error.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/error.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,280 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/error.c ++ Summary: ++ Error reporting functions for the bounds checking library. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 5/12/94 Initial implementation. ++ RWMJ 10/1/96 New format for errors with `file:line' ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <stdarg.h> ++ ++#include "bounds-lib.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* Print something about this object (if obj != NULL). */ ++ ++static __inline__ const char * ++sclass_name (object * obj) ++{ ++ switch (obj->sclass) ++ { ++ case obj_sclass_static: ++ return "static"; ++ case obj_sclass_external: ++ return "external"; ++ case obj_sclass_stack: ++ return "stack"; ++ case obj_sclass_heap: ++ return "heap"; ++ } ++ return NULL; ++} ++ ++static void ++print_object (const char *filename, int line, object * obj) ++{ ++ if (!obj) ++ return; ++ ++ printf ("%s:%d: Object `%s':\n" ++ "%s:%d: Address in memory: %p .. %p\n" ++ "%s:%d: Size: %u bytes\n" ++ "%s:%d: Element size: %u bytes\n" ++ "%s:%d: Number of elements: %d\n", ++ filename, line, obj->name ? obj->name : "(unnamed)", ++ filename, line, obj->base, (char *) obj->extent - 1, ++ filename, line, obj->size, ++ filename, line, obj->align, filename, line, obj->size / obj->align); ++ if (obj->filename && obj->line > 0) ++ printf ("%s:%d: Created at: %s, line %d\n", ++ filename, line, obj->filename, obj->line); ++ printf ("%s:%d: Storage class: %s\n", ++ filename, line, sclass_name (obj)); ++} ++ ++/* Report errors involving single pointers. */ ++ ++void ++__bounds_error (const char *message, const char *filename, int line, ++ void *pointer, object * obj) ++{ ++ void *temp; ++ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ if (__bounds_oob_pointers) ++ { ++ temp = pointer; ++ __bounds_setup_oob_pointer (&obj, &temp, filename, line); ++ if (temp != pointer) ++ pointer = ILLEGAL; ++ } ++ printf ("%s:%d:Bounds error: %s.\n", filename, line, message); ++ printf ("%s:%d: Pointer value: %p\n", filename, line, pointer); ++ print_object (filename, line, obj); ++ ++ __bounds_breakpoint (); ++ if (!__bounds_never_fatal) ++ ABORT (); ++} ++ ++/* Report errors involving single pointers. */ ++ ++void ++__bounds_error_size (const char *message, const char *filename, int line, ++ void *pointer, int size, object * obj) ++{ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ printf ("%s:%d:Bounds error: %s.\n", filename, line, message); ++ printf ("%s:%d: Pointer value: %p, Size: %d\n", filename, line, ++ pointer, size); ++ print_object (filename, line, obj); ++ ++ __bounds_breakpoint (); ++ if (!__bounds_never_fatal) ++ ABORT (); ++} ++ ++/* Report errors involving two pointers. */ ++ ++void ++__bounds_error2 (const char *message, const char *filename, int line, ++ void *pointer1, void *pointer2, object * obj1, object * obj2) ++{ ++ void *temp; ++ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ if (__bounds_oob_pointers) ++ { ++ temp = pointer1; ++ __bounds_setup_oob_pointer (&obj1, &temp, filename, line); ++ if (temp != pointer1) ++ pointer1 = ILLEGAL; ++ } ++ if (__bounds_oob_pointers) ++ { ++ temp = pointer2; ++ __bounds_setup_oob_pointer (&obj2, &temp, filename, line); ++ if (temp != pointer2) ++ pointer2 = ILLEGAL; ++ } ++ printf ("%s:%d:Bounds error: %s.\n", filename, line, message); ++ printf ("%s:%d: Left pointer value: %p\n", filename, line, pointer1); ++ print_object (filename, line, obj1); ++ printf ("%s:%d: Right pointer value: %p\n", filename, line, pointer2); ++ print_object (filename, line, obj2); ++ ++ __bounds_breakpoint (); ++ if (!__bounds_never_fatal) ++ ABORT (); ++} ++ ++/* Report errors with optional format string. */ ++ ++void ++__bounds_errorf (const char *filename, int line, ++ void *pointer, object * obj, const char *format, ...) ++{ ++ void *temp; ++ va_list args; ++ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ if (__bounds_oob_pointers) ++ { ++ temp = pointer; ++ __bounds_setup_oob_pointer (&obj, &temp, filename, line); ++ if (temp != pointer) ++ pointer = ILLEGAL; ++ } ++ printf ("%s:%d:Bounds error: ", filename, line); ++ va_start (args, format); ++ vprintf (format, args); ++ va_end (args); ++ printf (".\n"); ++ printf ("%s:%d: Pointer value: %p\n", filename, line, pointer); ++ print_object (filename, line, obj); ++ ++ __bounds_breakpoint (); ++ if (!__bounds_never_fatal) ++ ABORT (); ++} ++ ++/* Function for reporting internal errors in the library. */ ++ ++void ++__bounds_internal_error (const char *message, const char *filename, int line) ++{ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ printf ("%s:%d:Internal error: %s.\n", filename, line, message); ++ ++ ABORT (); ++} ++ ++/* Give a warning message as appropriate. */ ++ ++void ++__bounds_warning (const char *filename, int line, const char *function, ++ const char *format, ...) ++{ ++ va_list args; ++ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ if (function) ++ printf ("%s:%d:In function %s,\n", filename, line, function); ++ printf ("%s:%d:Bounds warning: ", filename, line); ++ va_start (args, format); ++ vprintf (format, args); ++ va_end (args); ++ printf (".\n"); ++} ++ ++/* Report warnings involving single pointers. */ ++ ++void ++__bounds_warn1 (const char *message, const char *filename, int line, ++ void *pointer, object * obj) ++{ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ printf ("%s:%d:Bounds warning: %s.\n", filename, line, message); ++ printf ("%s:%d: Pointer value: %p\n", filename, line, pointer); ++ print_object (filename, line, obj); ++ ++ __bounds_breakpoint (); ++} ++ ++/* Report warnings with optional format string. */ ++ ++void ++__bounds_warnf (const char *filename, int line, ++ void *pointer, object * obj, const char *format, ...) ++{ ++ va_list args; ++ ++ if (filename == NULL) ++ { ++ filename = "<unknown>"; ++ line = 0; ++ } ++ printf ("%s:%d:Bounds warning: ", filename, line); ++ va_start (args, format); ++ vprintf (format, args); ++ va_end (args); ++ printf (".\n"); ++ printf ("%s:%d: Pointer value: %p\n", filename, line, pointer); ++ print_object (filename, line, obj); ++ ++ __bounds_breakpoint (); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/exstatics.c gcc-4.0.2/gcc/bounds/lib/exstatics.c +--- gcc-4.0.2.org/gcc/bounds/lib/exstatics.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/exstatics.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,117 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/exstatics.c ++ Summary: ++ Add a lot of external statics to the object tree in one go, making ++ suitable checks along the way. ++ Other notes: ++ Use this in conjunction with the grab-statics util. in the tools ++ directory. ++ Author Date Notes ++ RWMJ 5/9/95 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#include "bounds-lib.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++#define DUMP 0 /* Dump a list of the objects in order (for dbg). */ ++ ++static int ++compare_entries (const void *p1, const void *p2) ++{ ++ external_statics_table *entry1 = *(external_statics_table **) p1; ++ external_statics_table *entry2 = *(external_statics_table **) p2; ++ ++ return (char *) entry1->address - (char *) entry2->address; ++} ++ ++void ++__bounds_add_static_objects_table (external_statics_table * table) ++{ ++ int len, i; ++ external_statics_table **ptrs; ++ void *last_address; ++ ++ /* Compute the length of the table. */ ++ for (len = 0; table[len].address != NULL; ++len) ++ ; ++ if (len == 0) ++ return; ++ ++ /* Allocate memory for an array of pointers into the table. We will sort ++ the table by swapping these pointers, rather than swapping actual ++ entries in the table. This is more efficient & doesn't cause problems ++ if the table was allocated in r/o memory. ++ N.B. Deliberately allocate a _checked_ heap object here. There is ++ no danger of recursion. */ ++ ptrs = malloc (sizeof (external_statics_table *) * len); ++ if (ptrs == NULL) ++ __bounds_internal_error ("out of memory allocating table", ++ __FILE__, __LINE__); ++ for (i = 0; i < len; ++i) ++ ptrs[i] = &table[i]; ++ ++ /* Sort the table into address order. */ ++ qsort (ptrs, len, sizeof (external_statics_table *), compare_entries); ++ ++#if DUMP ++ /* Dump the objects for debugging. */ ++ for (i = 0; i < len; ++i) ++ printf ("%p - %p: %s (at %s:%d)\n", ++ ptrs[i]->address, ++ (char *) (ptrs[i]->address) + ptrs[i]->size - 1, ++ ptrs[i]->name, ptrs[i]->filename, ptrs[i]->line); ++#endif ++ ++ /* Check that the objects in the table are disjoint. */ ++ last_address = (char *) ptrs[0]->address + ptrs[0]->size; ++ for (i = 1; i < len; ++i) ++ { ++ if (last_address > ptrs[i]->address) ++ { ++ __bounds_errorf (__FILE__, __LINE__, ++ NULL, NULL, ++ "overlapping objects `%s:%s' and `%s:%s'" ++ " in __bounds_add_static_objects_table", ++ ptrs[i - 1]->filename, ++ ptrs[i - 1]->name, ++ ptrs[i]->filename, ptrs[i]->name); ++ ABORT (); ++ } ++ last_address = (char *) ptrs[i]->address + ptrs[i]->size; ++ } ++ ++ /* Add the objects to the splay tree. */ ++ for (i = 0; i < len; ++i) ++ { ++ external_statics_table *p = ptrs[i]; ++ ++ __bounds_note_constructed_object (p->address, p->size, p->align, ++ p->filename, p->line, p->name); ++ } ++ ++ /* Free up the table. */ ++ free (ptrs); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/ext-tree.h gcc-4.0.2/gcc/bounds/lib/ext-tree.h +--- gcc-4.0.2.org/gcc/bounds/lib/ext-tree.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/ext-tree.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,55 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/ext-tree.h ++ Summary: ++ Describes the external representation of the splay tree used in ++ the `splaytree.aa' etc. files. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 28/5/95 Initial implementation. ++*/ ++ ++#ifndef _EXT_TREE_H_ ++#define _EXT_TREE_H_ ++ ++struct ext_tree ++{ ++ char magic[8]; /* Contains `EXT_TREE_MAGIC'. */ ++ unsigned index; /* Index of file in time. */ ++ unsigned dump_every; /* Frequency of dump operations. */ ++ unsigned add_operations; ++ unsigned del_operations; ++ unsigned splay_operations; ++ unsigned look_up_operations; ++ unsigned nlook_up_operations; ++ unsigned splay_steps; ++ unsigned look_up_steps; ++ unsigned nlook_up_steps; ++ unsigned splay_look_up_operations; ++ unsigned splay_look_up_steps; ++ unsigned splay_add_operations; ++ unsigned splay_add_steps; ++ unsigned splay_del_operations; ++ unsigned splay_del_steps; ++}; ++ ++#define EXT_TREE_MAGIC "STD-003" /* Magic & version #. */ ++ ++#endif /* _EXT_TREE_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/free.c gcc-4.0.2/gcc/bounds/lib/free.c +--- gcc-4.0.2.org/gcc/bounds/lib/free.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/free.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,212 @@ ++/* Free a block of memory allocated by `malloc'. ++ Copyright 1990, 1991, 1992, 1994 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++/* Debugging hook for free. */ ++void (*__free_hook) (__ptr_t __ptr); ++ ++/* List of blocks allocated by memalign. */ ++struct alignlist *_aligned_blocks = NULL; ++ ++/* Return memory to the heap. ++ Like `free' but don't call a __free_hook if there is one. */ ++void ++_free_internal (__ptr_t ptr) ++{ ++ int type; ++ __malloc_size_t block, blocks; ++ register __malloc_size_t i; ++ struct list *prev, *next; ++ ++ block = BLOCK (ptr); ++ ++ type = _heapinfo[block].busy.type; ++ switch (type) ++ { ++ case 0: ++ /* Get as many statistics as early as we can. */ ++ --_chunks_used; ++ _bytes_used -= _heapinfo[block].busy.info.size * BLOCKSIZE; ++ _bytes_free += _heapinfo[block].busy.info.size * BLOCKSIZE; ++ ++ /* Find the free cluster previous to this one in the free list. ++ Start searching at the last block referenced; this may benefit ++ programs with locality of allocation. */ ++ i = _heapindex; ++ if (i > block) ++ while (i > block) ++ i = _heapinfo[i].free.prev; ++ else ++ { ++ do ++ i = _heapinfo[i].free.next; ++ while (i > 0 && i < block); ++ i = _heapinfo[i].free.prev; ++ } ++ ++ /* Determine how to link this block into the free list. */ ++ if (block == i + _heapinfo[i].free.size) ++ { ++ /* Coalesce this block with its predecessor. */ ++ _heapinfo[i].free.size += _heapinfo[block].busy.info.size; ++ block = i; ++ } ++ else ++ { ++ /* Really link this block back into the free list. */ ++ _heapinfo[block].free.size = _heapinfo[block].busy.info.size; ++ _heapinfo[block].free.next = _heapinfo[i].free.next; ++ _heapinfo[block].free.prev = i; ++ _heapinfo[i].free.next = block; ++ _heapinfo[_heapinfo[block].free.next].free.prev = block; ++ ++_chunks_free; ++ } ++ ++ /* Now that the block is linked in, see if we can coalesce it ++ with its successor (by deleting its successor from the list ++ and adding in its size). */ ++ if (block + _heapinfo[block].free.size == _heapinfo[block].free.next) ++ { ++ _heapinfo[block].free.size ++ += _heapinfo[_heapinfo[block].free.next].free.size; ++ _heapinfo[block].free.next ++ = _heapinfo[_heapinfo[block].free.next].free.next; ++ _heapinfo[_heapinfo[block].free.next].free.prev = block; ++ --_chunks_free; ++ } ++ ++ /* Now see if we can return stuff to the system. */ ++ blocks = _heapinfo[block].free.size; ++ if (blocks >= FINAL_FREE_BLOCKS && block + blocks == _heaplimit ++ && (*__morecore) (0) == ADDRESS (block + blocks)) ++ { ++ register __malloc_size_t bytes = blocks * BLOCKSIZE; ++ _heaplimit -= blocks; ++ (*__morecore) (-bytes); ++ _heapinfo[_heapinfo[block].free.prev].free.next ++ = _heapinfo[block].free.next; ++ _heapinfo[_heapinfo[block].free.next].free.prev ++ = _heapinfo[block].free.prev; ++ block = _heapinfo[block].free.prev; ++ --_chunks_free; ++ _bytes_free -= bytes; ++ } ++ ++ /* Set the next search to begin at this block. */ ++ _heapindex = block; ++ break; ++ ++ default: ++ /* Do some of the statistics. */ ++ --_chunks_used; ++ _bytes_used -= 1 << type; ++ ++_chunks_free; ++ _bytes_free += 1 << type; ++ ++ /* Get the address of the first free fragment in this block. */ ++ prev = (struct list *) ((char *) ADDRESS (block) + ++ (_heapinfo[block].busy.info.frag. ++ first << type)); ++ ++ if (_heapinfo[block].busy.info.frag.nfree == ++ (__malloc_size_t) ((BLOCKSIZE >> type) - 1)) ++ { ++ /* If all fragments of this block are free, remove them ++ from the fragment list and free the whole block. */ ++ next = prev; ++ for (i = 1; i < (__malloc_size_t) (BLOCKSIZE >> type); ++i) ++ next = next->next; ++ prev->prev->next = next; ++ if (next != NULL) ++ next->prev = prev->prev; ++ _heapinfo[block].busy.type = 0; ++ _heapinfo[block].busy.info.size = 1; ++ ++ /* Keep the statistics accurate. */ ++ ++_chunks_used; ++ _bytes_used += BLOCKSIZE; ++ _chunks_free -= BLOCKSIZE >> type; ++ _bytes_free -= BLOCKSIZE; ++ ++ __bounds_free (ADDRESS (block)); ++ } ++ else if (_heapinfo[block].busy.info.frag.nfree != 0) ++ { ++ /* If some fragments of this block are free, link this ++ fragment into the fragment list after the first free ++ fragment of this block. */ ++ next = (struct list *) ptr; ++ next->next = prev->next; ++ next->prev = prev; ++ prev->next = next; ++ if (next->next != NULL) ++ next->next->prev = next; ++ ++_heapinfo[block].busy.info.frag.nfree; ++ } ++ else ++ { ++ /* No fragments of this block are free, so link this ++ fragment into the fragment list and announce that ++ it is the first free fragment of this block. */ ++ prev = (struct list *) ptr; ++ _heapinfo[block].busy.info.frag.nfree = 1; ++ _heapinfo[block].busy.info.frag.first = (unsigned long int) ++ ((unsigned long int) ((char *) ptr - (char *) NULL) ++ % BLOCKSIZE >> type); ++ prev->next = _fraghead[type].next; ++ prev->prev = &_fraghead[type]; ++ prev->prev->next = prev; ++ if (prev->next != NULL) ++ prev->next->prev = prev; ++ } ++ break; ++ } ++} ++ ++/* Return memory to the heap. */ ++void ++__bounds_free (__ptr_t ptr) ++{ ++ register struct alignlist *l; ++ ++ if (ptr == NULL) ++ return; ++ ++ for (l = _aligned_blocks; l != NULL; l = l->next) ++ if (l->aligned == ptr) ++ { ++ l->aligned = NULL; /* Mark the slot in the list as free. */ ++ ptr = l->exact; ++ break; ++ } ++ ++ if (__free_hook != NULL) ++ (*__free_hook) (ptr); ++ else ++ _free_internal (ptr); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/functions.c gcc-4.0.2/gcc/bounds/lib/functions.c +--- gcc-4.0.2.org/gcc/bounds/lib/functions.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/functions.c 2005-09-29 18:00:22.000000000 +0200 +@@ -0,0 +1,717 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/functions.c ++ Summary: ++ Deal with pushing and popping of function contexts and parameters ++ of those function contexts. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 6/3/95 Initial implementation. ++ RWMJ 3/4/95 Some optimizations. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#include "bounds-lib.h" ++ ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++#include "check.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++cur_context *__bounds_function_context = NULL; ++static cur_context *__bounds_function_list = NULL; ++ ++/* Helper functions that allocate and deallocate function contexts. ++ We used to allocate and free them immediately, but that was ++ quite inefficient, so now we allocate blocks of function contexts ++ and never free them. (RWMJ, 3/4/95). */ ++ ++static __inline__ cur_context * ++get_context_no_lock (void) ++{ ++ int current_thread; ++ cur_context *current_context; ++ ++ if (__bounds_function_thread) ++ current_thread = (*__bounds_function_thread) (); ++ else ++ current_thread = 0; ++ current_context = __bounds_function_context; ++ if (current_context && current_context->current_thread != current_thread) ++ { ++ current_context->func_context.no_checking = __bounds_debug_no_checking; ++ current_context = __bounds_function_list; ++ while (current_context) ++ { ++ if (current_context->current_thread == current_thread) ++ { ++ __bounds_debug_no_checking = current_context->func_context.no_checking; ++ break; ++ } ++ current_context = current_context->next; ++ } ++ __bounds_function_context = current_context; ++ } ++ if (current_context == NULL) ++ { ++ current_context = __bounds_malloc (sizeof (cur_context)); ++ if (!current_context) ++ __bounds_internal_error ("out of memory allocating a block" ++ " of function contexts", __FILE__, __LINE__); ++ current_context->current_thread = current_thread; ++ current_context->nesting_nr = 0; ++ current_context->func_context.next = ++ current_context->func_context.prev = ¤t_context->func_context; ++ current_context->hist_func = NULL; ++ current_context->last_end = NULL; ++ current_context->func_context.no_checking = 0; ++ current_context->next = __bounds_function_list; ++ current_context->func_context.no_checking = 0; ++ __bounds_debug_no_checking = 0; ++ __bounds_function_list = current_context; ++ __bounds_function_context = current_context; ++ } ++ return current_context; ++} ++ ++static __inline__ cur_context * ++get_context (void) ++{ ++ cur_context *current_context; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ current_context = get_context_no_lock (); ++ leave_critical_section (&old_mask); ++ return current_context; ++} ++ ++/* Return a pointer to a thread safe strtok pointer. */ ++ ++char ** ++__bounds_strtok_last_end (void) ++{ ++ cur_context *cc = get_context (); ++ return &cc->last_end; ++} ++ ++static __inline__ function_context * ++allocate_new_context (cur_context * cc) ++{ ++ function_context *fc; ++ sigset_t old_mask; ++ ++ if (cc->hist_func) ++ { ++ fc = cc->hist_func; ++ cc->hist_func = fc->next; ++ } ++ else ++ { ++ enter_critical_section (&old_mask); ++ fc = __bounds_malloc (sizeof (function_context)); ++ leave_critical_section (&old_mask); ++ if (fc == NULL) ++ __bounds_internal_error ++ ("out of memory allocating a function contexts", __FILE__, ++ __LINE__); ++ /* Mark a function context so we can find it when deleting a spurious ++ stack object. */ ++ fc->parms.base = fc->stack.base = ILLEGAL; ++ } ++ ++ fc->next = cc->func_context.next; ++ fc->prev = &cc->func_context; ++ fc->next->prev = fc; ++ cc->func_context.next = fc; ++ ++ return fc; ++} ++ ++static __inline__ void ++remove_this_context (cur_context * cc, function_context * fc) ++{ ++ /* Never realy free function context. Put it in a history list. */ ++ fc->prev->next = fc->next; ++ fc->next->prev = fc->prev; ++ fc->next = cc->hist_func; ++ cc->hist_func = fc; ++} ++ ++/* Pop out of a function context. */ ++ ++static __inline__ void ++__bounds_internal_pop_function (const char *name, int nesting_nr) ++{ ++ int current_nesting_nr; ++ const char *context_name; ++ cur_context *cc; ++ function_context *fc; ++ object *obj, *nobj; ++ ++ cc = get_context_no_lock (); ++ for (;;) ++ { ++ fc = cc->func_context.next; ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("too many function context pops", ++ __FILE__, __LINE__); ++ current_nesting_nr = fc->nesting_nr; ++ context_name = fc->name; ++ /* Delete all the parameters to this function. */ ++ obj = fc->parms.next; ++ while (obj != &fc->parms) ++ { ++ nobj = obj->next; ++ __bounds_internal_delete_stack_object (obj, -1); ++ obj = nobj; ++ } ++ /* Delete all the stack parameters in this function. */ ++ obj = fc->stack.next; ++ while (obj != &fc->stack) ++ { ++ nobj = obj->next; ++ __bounds_internal_delete_stack_object (obj, -1); ++ obj = nobj; ++ } ++ ++ /* Call the alloca module to (if necessary) delete items from the ++ alloca stack. Only do this if `alloca_stack' is non-NULL to try ++ to avoid the function call. */ ++ if (fc->alloca_stack != NULL) ++ __bounds_alloca_free (fc->alloca_stack); ++ ++ /* Delete the function_context structure. */ ++ remove_this_context (cc, fc); ++ if (nesting_nr == current_nesting_nr) ++ break; ++ } ++ cc->nesting_nr = current_nesting_nr; ++ ++ /* Check that the name passed matches the name pushed into. If not, this ++ is probably a compiler error, else longjmp was used. */ ++ if (context_name != name && __bounds_strcmp (context_name, name) != 0) ++ __bounds_internal_error ("popped out of a mismatched function context", ++ __FILE__, __LINE__); ++ ++ /* If we aren't checking bounds in this function context, switch off ++ bounds checking now. */ ++ __bounds_debug_no_checking = cc->func_context.next->no_checking; ++} ++ ++/* Add a stack object to the function list nesting_nr. ++ This call is made when we are inside a critical section. */ ++ ++void ++__bounds_add_function_object (object * obj, int nesting_nr) ++{ ++ cur_context *cc = get_context_no_lock (); ++ function_context *fc = cc->func_context.next; ++ ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("__bounds_add_function_object called when" ++ " not in a function context", ++ __FILE__, __LINE__); ++ ++ /* If not at correct level pop context until we are. */ ++ while (fc->nesting_nr != nesting_nr) ++ { ++ __bounds_internal_pop_function (fc->name, fc->nesting_nr); ++ fc = cc->func_context.next; ++ } ++ ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("__bounds_add_function_object called when" ++ " not in a function context", ++ __FILE__, __LINE__); ++ ++ /* Make a reverse list. This will make remove_function_object faster. */ ++ obj->next = fc->stack.next; ++ fc->stack.next = obj; ++} ++ ++/* Delete a stack object of the function list nesting_nr. ++ This call is made when we are inside a critical section. */ ++ ++int ++__bounds_remove_function_object (object * obj, int nesting_nr) ++{ ++ cur_context *cc = get_context_no_lock (); ++ function_context *fc = cc->func_context.next; ++ object *nobj, *lobj; ++ ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("__bounds_remove_function_object called when" ++ " not in a function context", ++ __FILE__, __LINE__); ++ ++ /* If not at correct level pop context until we are. */ ++ while (fc->nesting_nr != nesting_nr) ++ { ++ __bounds_internal_pop_function (fc->name, fc->nesting_nr); ++ fc = cc->func_context.next; ++ } ++ ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("__bounds_remove_function_object called when" ++ " not in a function context", ++ __FILE__, __LINE__); ++ ++ /* Walk through the list. It is most likely that the first ++ object is our target cause we add them in reverse order ++ in the list. */ ++ nobj = fc->stack.next; ++ if (obj == nobj) ++ { ++ fc->stack.next = nobj->next; ++ } ++ else ++ { ++ lobj = nobj; ++ nobj = nobj->next; ++ while (nobj != &fc->stack) ++ { ++ if (obj == nobj) ++ { ++ lobj->next = nobj->next; ++ return 1; ++ } ++ lobj = nobj; ++ nobj = nobj->next; ++ } ++ nobj = fc->parms.next; ++ if (obj == nobj) ++ { ++ fc->parms.next = nobj->next; ++ } ++ else ++ { ++ lobj = nobj; ++ nobj = nobj->next; ++ while (nobj != &fc->parms) ++ { ++ if (obj == nobj) ++ { ++ lobj->next = nobj->next; ++ return 1; ++ } ++ lobj = nobj; ++ nobj = nobj->next; ++ } ++ return 0; ++ } ++ } ++ return 1; ++} ++ ++/* Delete a stack object of the function context below the ++ current function context. ++ This call is made when we are inside a critical section. */ ++ ++int ++__bounds_remove_lower_function_object (function_context *fc, object * obj) ++{ ++ object *nobj, *lobj; ++ ++ /* Walk through the list. It is most likely that the first ++ object is our target cause we add them in reverse order ++ in the list. */ ++ nobj = fc->stack.next; ++ if (obj == nobj) ++ { ++ fc->stack.next = nobj->next; ++ } ++ else ++ { ++ lobj = nobj; ++ nobj = nobj->next; ++ while (nobj != &fc->stack) ++ { ++ if (obj == nobj) ++ { ++ lobj->next = nobj->next; ++ return 1; ++ } ++ lobj = nobj; ++ nobj = nobj->next; ++ } ++ nobj = fc->parms.next; ++ if (obj == nobj) ++ { ++ fc->parms.next = nobj->next; ++ } ++ else ++ { ++ lobj = nobj; ++ nobj = nobj->next; ++ while (nobj != &fc->parms) ++ { ++ if (obj == nobj) ++ { ++ lobj->next = nobj->next; ++ return 1; ++ } ++ lobj = nobj; ++ nobj = nobj->next; ++ } ++ return 0; ++ } ++ } ++ return 1; ++} ++ ++/* Delete a function context when a spurious stack object is found. See ++ also function __bounds_internal_add_stack_object in objects.c ++ This call is made when we are inside a critical section. */ ++ ++void ++__bounds_remove_function_context (object * obj, int nesting_nr) ++{ ++ cur_context *cc; ++ function_context *fc; ++ object *nobj = obj; ++ ++ /* Find current function context. */ ++ while (nobj->base != ILLEGAL) ++ nobj = nobj->next; ++ cc = (cur_context *) nobj->parent; ++ fc = (function_context *) nobj->left; ++ ++ if (fc->nesting_nr == nesting_nr ++ && __bounds_remove_function_object (obj, nesting_nr)) ++ { ++ __bounds_internal_delete_stack_object (obj, -1); ++ return; ++ } ++ if ((unsigned)fc->nesting_nr < (unsigned)nesting_nr ++ && __bounds_remove_lower_function_object (fc, obj)) ++ { ++ __bounds_internal_delete_stack_object (obj, -1); ++ return; ++ } ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_remove_function_context (name=\"%s\", nesting_nr=%d)\n", ++ fc->name, fc->nesting_nr); ++#endif ++ ++ /* Delete all the parameters to this function. */ ++ obj = fc->parms.next; ++ while (obj != &fc->parms) ++ { ++ nobj = obj->next; ++ __bounds_internal_delete_stack_object (obj, -1); ++ obj = nobj; ++ } ++ ++ /* Delete all the stack parameters in this function. */ ++ obj = fc->stack.next; ++ while (obj != &fc->stack) ++ { ++ nobj = obj->next; ++ __bounds_internal_delete_stack_object (obj, -1); ++ obj = nobj; ++ } ++ ++ /* Delete alloca objects. */ ++ if (fc->alloca_stack != NULL) ++ __bounds_alloca_free (fc->alloca_stack); ++ ++ if (cc->func_context.next == fc) ++ cc->nesting_nr = fc->nesting_nr; ++ ++ remove_this_context (cc, fc); ++} ++ ++/* Push into a function context. */ ++ ++int ++__bounds_push_function (const char *name, int in_main, ++ const char *filename, int line) ++{ ++ cur_context *cc = get_context (); ++ function_context *fc; ++ ++#if COLLECT_STATS ++ ++__bounds_stats_push_function; ++#endif ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_function) ++ printf ("__bounds_push_function" ++ "(thread=%d, name=\"%s\", main=%d, file=\"%s\", ln=%d), nesting_nr=%d\n", ++ cc->current_thread, name, in_main, filename, line, ++ cc->nesting_nr); ++#endif ++ ++ if (in_main) ++ { ++ static int count_main = 0; ++ ++ /* This function is supposedly `main'. `main' should occur once and only ++ once. ANSI doesn't allow `main' to be called recursively. Notice that ++ `main' is not usually the first function to be called. That is usually ++ one of our global constructor functions. */ ++ count_main++; ++ ++ if (count_main > 1) ++ { ++ in_main = 0; /* Not really in main, if called recursively. */ ++ if (count_main == 2) ++ __bounds_warning (filename, line, NULL, ++ "ANSI does not allow main ()" ++ " to be called recursively"); ++ } ++ } ++ ++ /* Allocate space for the function_context structure plus all the ++ arguments we're going to get. */ ++ fc = allocate_new_context (cc); ++ ++ /* Set the context variables as appropriate. */ ++ fc->nesting_nr = cc->nesting_nr; ++ cc->nesting_nr++; ++ fc->in_main = in_main; ++ fc->no_checking = 0; ++ fc->name = name; ++ fc->filename = filename; ++ fc->line = line; ++ fc->parms.next = &fc->parms; ++ fc->stack.next = &fc->stack; ++ fc->alloca_stack = NULL; ++ /* Make base special so we can find the current context and ++ function context pointers when we have to delete a stack object. */ ++ fc->parms.parent = fc->stack.parent = (object *) cc; ++ fc->parms.left = fc->stack.left = (object *) fc; ++ ++ /* Switch on checking for this function by default. It may be switched off ++ by a call to `__bounds_no_checking_in_this_function'. */ ++ __bounds_debug_no_checking = 0; ++ return fc->nesting_nr; ++} ++ ++/* Pop out of a function context. */ ++ ++void ++__bounds_pop_function (const char *name, int nesting_nr) ++{ ++ sigset_t old_mask; ++ ++#if COLLECT_STATS ++ ++__bounds_stats_pop_function; ++#endif ++ ++ ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_function) ++ { ++ cur_context *cc = get_context (); ++ ++ printf ++ ("__bounds_pop_function (thread=%d, name=\"%s\", nesting_nr=%d)\n", ++ cc->current_thread, name, nesting_nr); ++ } ++#endif ++ ++ enter_critical_section (&old_mask); ++ __bounds_internal_pop_function (name, nesting_nr); ++ leave_critical_section (&old_mask); ++} ++ ++/* Add a parameter. This function may be called repeatedly as we ++ enter a function context. */ ++ ++void ++__bounds_add_param_object (void *ptr, size_t size, size_t align, ++ const char *filename, int line, const char *name, ++ int nesting_nr) ++{ ++ sigset_t old_mask; ++ cur_context *cc; ++ function_context *fc; ++ object *obj; ++ ++#if COLLECT_STATS ++ ++__bounds_stats_param_function; ++#endif ++ ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_add_param_object" ++ "(p=%p, sz=%u, align=%u, file=\"%s\", ln=%d, name=\"%s\"" ++ " nesting_nr=%d)\n", ++ ptr, size, align, filename, line, name, nesting_nr); ++#endif ++ ++ enter_critical_section (&old_mask); ++ cc = get_context_no_lock (); ++ fc = cc->func_context.next; ++ if (fc == &cc->func_context) ++ __bounds_internal_error ("__bounds_add_param_object called when" ++ " not in a function context", ++ __FILE__, __LINE__); ++ ++ /* Add the stack object, and note it down in the function_context, so ++ we can automatically delete it later. We set the `no padding' flag ++ in the object since padding isn't added between parameters for ++ compatibility reasons. */ ++ obj = __bounds_internal_add_stack_object (ptr, size, align, ++ filename, line, name, 1, -1); ++ obj->next = fc->parms.next; ++ fc->parms.next = obj; ++ ++ /* If this is `main' and we have the first two arguments, then note the ++ positions of the command line arguments here. */ ++ if (fc->in_main && obj && obj->next && obj->next->next == &fc->parms) ++ { ++ void *arg0_ptr, *arg1_ptr; ++ int argc; ++ char **argv; ++ ++ /* points to `argc'. */ ++ arg0_ptr = obj->next->base; ++ /* points to `argv'. */ ++ arg1_ptr = obj->base; ++ ++ argc = *(int *) arg0_ptr; /* get them */ ++ argv = *(char ***) arg1_ptr; ++ ++ __bounds_note_main_args (argc, argv); ++ } ++ leave_critical_section (&old_mask); ++} ++ ++/* If you don't want to check bounds in the currently active function, ++ then call this somewhere near the beginning of the function. */ ++ ++void ++__bounds_no_checking_in_this_function (void) ++{ ++ cur_context *cc = get_context (); ++ function_context *fc = cc->func_context.next; ++ if (fc != &cc->func_context) ++ { ++ fc->no_checking = 1; ++ __bounds_debug_no_checking = 1; ++ } ++} ++ ++/* Print a stack trace. This function is of little interest, since ++ (a) it misses out all unchecked functions, and ++ (b) GDB does a better stack trace already. */ ++ ++void ++__bounds_debug_stack_trace (void) ++{ ++ cur_context *cc = get_context_no_lock (); ++ function_context *fc = cc->func_context.next; ++ object *obj; ++ ++ if (fc == &cc->func_context) ++ { ++ printf ("No stack.\n"); ++ return; ++ } ++ ++ printf ("Stack trace (params are reversed):\n"); ++ while (fc != &cc->func_context) ++ { ++ printf ("- %s (", fc->name); ++ obj = fc->parms.next; ++ while (obj != &fc->parms) ++ { ++ if (obj != fc->parms.next) ++ printf (", "); ++ printf ("%s = ", obj->name); ++ /* We can only print the argument value if it's an int or a ++ pointer. */ ++ if (obj->size == sizeof (int) && obj->align == sizeof (int)) ++ printf ("%u", *(unsigned *) (obj->base)); ++ else ++ printf ("?"); ++ obj = obj->next; ++ } ++ printf (") at %s:%d\n", fc->filename, fc->line); ++ fc = fc->next; ++ } ++} ++ ++/* The following function is called from the `alloca.c' code to ++ update the alloca chain in the current function context. Placing ++ this function here adds some modularity at the expense of some ++ speed. Returns the current function name. */ ++ ++void ++__bounds_add_alloca_chain (alloca_item * item) ++{ ++ cur_context *cc = get_context_no_lock (); ++ function_context *fc = cc->func_context.next; ++ ++ if (fc != &cc->func_context) ++ { ++ item->next = fc->alloca_stack; ++ fc->alloca_stack = item; ++ } ++ else ++ { ++ /* Allow this because we can have mixed objects from bounds checked code ++ and non bounds checked code. This also means that the item will never ++ be freed. */ ++#if 0 ++ __bounds_internal_error ("added item to alloca stack in NULL" ++ " function context", __FILE__, __LINE__); ++#else ++#endif ++ } ++} ++ ++void ++__bounds_delete_alloca_chain (object *obj) ++{ ++ cur_context *cc = get_context_no_lock (); ++ function_context *fc = cc->func_context.next; ++ alloca_item *last, *cur; ++ ++ if (fc != &cc->func_context) ++ { ++ last = NULL; ++ cur = fc->alloca_stack; ++ while (cur) { ++ if (cur->pointer == obj->base) ++ { ++ if (last) ++ last->next = cur->next; ++ else ++ fc->alloca_stack = cur->next; ++ __bounds_delete_heap_object (cur->pointer, -1, ++ "invalid pointer used in `alloca'", ++ cur->filename, ++ cur->line, NULL); ++ __bounds_free (cur); ++ break; ++ } ++ last = cur; ++ cur = cur->next; ++ } ++ } ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/functions.h gcc-4.0.2/gcc/bounds/lib/functions.h +--- gcc-4.0.2.org/gcc/bounds/lib/functions.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/functions.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,63 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/functions.h ++ Summary: ++ Header file describing the function stack used by "functions.c". ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 6/3/95 Initial implementation. ++*/ ++ ++#ifndef _FUNCTIONS_H_ ++#define _FUNCTIONS_H_ ++ ++/* This is the structure used to store a record of a single function call. */ ++ ++typedef struct _function_context ++{ ++ int nesting_nr; /* nesting level nr. */ ++ unsigned char in_main; /* True if this is `main ()'. */ ++ unsigned char no_checking; /* True if we don't check this fn. */ ++ const char *name; /* Pointer to function name. */ ++ const char *filename; /* File where declared. */ ++ int line; /* Line where declared. */ ++ object parms; /* Parms for this function. */ ++ object stack; /* Stack elements for this function. */ ++ alloca_item *alloca_stack; /* List of calls to alloca. */ ++ struct _function_context *next; /* Next function_context. */ ++ struct _function_context *prev; /* Previous function_context. */ ++} function_context; ++ ++typedef struct _cur_context ++{ ++ int current_thread; ++ int nesting_nr; ++ /* The current function context. */ ++ function_context func_context; ++ function_context *hist_func; ++ char *last_end; /* strtok last_end pointer. */ ++ struct _cur_context *next; ++} cur_context; ++ ++extern char **__bounds_strtok_last_end (void); ++extern void __bounds_add_function_object (object * obj, int nesting_nr); ++extern int __bounds_remove_function_object (object * obj, int nesting_nr); ++ ++#endif /* _FUNCTIONS_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/getpagesize.h gcc-4.0.2/gcc/bounds/lib/getpagesize.h +--- gcc-4.0.2.org/gcc/bounds/lib/getpagesize.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/getpagesize.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,39 @@ ++/* Emulate getpagesize on systems that lack it. */ ++ ++#ifndef HAVE_GETPAGESIZE ++ ++#ifdef VMS ++#define getpagesize() 512 ++#endif ++ ++#ifdef HAVE_UNISTD_H ++#include <unistd.h> ++#endif ++ ++#ifdef _SC_PAGESIZE ++#define getpagesize() sysconf(_SC_PAGESIZE) ++#else ++ ++#include <sys/param.h> ++ ++#ifdef EXEC_PAGESIZE ++#define getpagesize() EXEC_PAGESIZE ++#else ++#ifdef NBPG ++#define getpagesize() NBPG * CLSIZE ++#ifndef CLSIZE ++#define CLSIZE 1 ++#endif /* no CLSIZE */ ++#else /* no NBPG */ ++#ifdef NBPC ++#define getpagesize() NBPC ++#else /* no NBPC */ ++#ifdef PAGESIZE ++#define getpagesize() PAGESIZE ++#endif ++#endif /* NBPC */ ++#endif /* no NBPG */ ++#endif /* no EXEC_PAGESIZE */ ++#endif /* no _SC_PAGESIZE */ ++ ++#endif /* not HAVE_GETPAGESIZE */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/globals.c gcc-4.0.2/gcc/bounds/lib/globals.c +--- gcc-4.0.2.org/gcc/bounds/lib/globals.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/globals.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,194 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/globals.c ++ Summary: ++ I moved all the global variables here. All globals have to start ++ with '__bounds' so they don't conflict with any other symbols in ++ the program. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 15/3/95 Moved all globals to this file. ++*/ ++ ++#include "bounds-lib.h" ++ ++#include <signal.h> ++ ++#include "mutex.h" ++ ++/* This flag may be set by bounds-checking-aware programs to enable debugging ++ of all calls to this library. This flag is only available if DEBUG_FEATURES ++ is set in `bounds-lib.h'. */ ++ ++int __bounds_debug_print_calls = 0; ++ ++/* This flag may be set to print the heap contents at program exit. */ ++ ++int __bounds_debug_print_heap = 0; ++ ++/* When this flag is set calls to mmap / munmap are checked. */ ++ ++int __bounds_check_mmap_calls = 1; ++ ++/* This flag prints debug information on function calls */ ++ ++int __bounds_debug_print_function = 0; ++ ++/* This flag may be set to disable checking for a section of the program. */ ++ ++int __bounds_debug_no_checking = 0; ++ ++/* Warn if references are made to an unchecked static object. */ ++ ++int __bounds_warn_unchecked_statics = 0; ++ ++/* Warn if references are made to an unchecked stack object. */ ++ ++int __bounds_warn_unchecked_stack = 0; ++ ++#if COLLECT_STATS ++/* Collect statistics on calling frequencies. The statistics are taken in ++ 'check.c'. */ ++ ++unsigned __bounds_stats_ptr_plus_int = 0; ++unsigned __bounds_stats_array_reference = 0; ++unsigned __bounds_stats_component_reference = 0; ++unsigned __bounds_stats_ptr_diff = 0; ++unsigned __bounds_stats_reference = 0; ++unsigned __bounds_stats_ptr_le_ptr = 0; ++unsigned __bounds_stats_ptr_lt_ptr = 0; ++unsigned __bounds_stats_ptr_ge_ptr = 0; ++unsigned __bounds_stats_ptr_gt_ptr = 0; ++unsigned __bounds_stats_ptr_ne_ptr = 0; ++unsigned __bounds_stats_ptr_eq_ptr = 0; ++unsigned __bounds_stats_ptr_postinc = 0; ++unsigned __bounds_stats_ptr_preinc = 0; ++unsigned __bounds_stats_ptr_postdec = 0; ++unsigned __bounds_stats_ptr_predec = 0; ++unsigned __bounds_stats_ptr_true = 0; ++unsigned __bounds_stats_ptr_false = 0; ++unsigned __bounds_stats_push_function = 0; ++unsigned __bounds_stats_pop_function = 0; ++unsigned __bounds_stats_param_function = 0; ++unsigned __bounds_stats_environment = 0; ++unsigned __bounds_stats_add_stack = 0; ++unsigned __bounds_stats_delete_stack = 0; ++unsigned __bounds_stats_add_heap = 0; ++unsigned __bounds_stats_delete_heap = 0; ++unsigned __bounds_stats_unchecked_static = 0; ++unsigned __bounds_stats_unchecked_stack = 0; ++unsigned __bounds_stats_add_oob_table = 0; ++unsigned __bounds_stats_find_oob_table = 0; ++unsigned __bounds_stats_delete_oob_table = 0; ++#if DEBUG_OBJECTS ++unsigned __bounds_stats_find_object = 0; ++unsigned __bounds_stats_maybe_find_object = 0; ++unsigned __bounds_stats_maybe_find_object_search = 0; ++#endif ++ ++#endif /* COLLECT_STATS */ ++ ++/* check the array indexes by default. This does also work for structures ++ like: ++ struct ... { ++ ...other data ... ++ char text[1]; -- string: structure expands to actual len . ++ }; ++ where you overwrite the end of the structure by the actual name. ++ This is why array checking is only performed on arrays with sizes ++ greater than 1. */ ++ ++int __bounds_array_index_check = 1; ++ ++/* Don't free up VM addresses on the heap. We can track stale heap pointers ++ this way, the disadvantage being that we may run out of VM addresses. It ++ is best to ensure that 'munmap' is being called in 'malloc.c', so that ++ physical memory is recycled when this option is being used. */ ++/* Free up VM addresses on the heap after an age limit has expired. We can ++ track most stale heap pointers this way if 'age_limit' is set large ++ enough. However, if you really want to check all stale pointer, then ++ set 'never_free_heap' to 1 and stale pointers over the whole lifetime ++ of the program will be found. */ ++ ++int __bounds_never_free_heap = 0; ++int __bounds_age_limit = 0; ++ ++/* Warn if 'free (0)' is called. This is apparently valid in ANSI C. */ ++ ++int __bounds_warn_free_null = 0; ++ ++/* Give warnings for miscellaneous strangenesses in the strings library, eg. ++ NULL pointer passed to memcpy but with zero size. X11 likes to do ++ this sort of thing. */ ++ ++int __bounds_warn_misc_strings = 0; ++ ++/* Warn when ILLEGAL pointers are generated, so you can track them down more ++ easily. These patches were provided by Don Lewis <gdonl@gv.ssi1.com>. */ ++ ++int __bounds_warn_illegal = 0; ++ ++/* Warn if a pointer is used unaligned, for instance, if the user attempts to ++ read an array of integers as chars. Being able to switch this off was ++ suggested by Stuart Kemp and Eberhard Mattes (see CONTRIBUTORS). */ ++ ++int __bounds_warn_unaligned = 0; ++ ++/* Warn if a pointer is used unaligned, for instance, if the user attempts to ++ read an array of integers as chars. Being able to switch this off was ++ suggested by Stuart Kemp and Eberhard Mattes (see CONTRIBUTORS). */ ++ ++int __bounds_warn_overlap = 1; ++ ++/* Warn about greater-than or less-than comparisons of pointers that point to ++ different objects. This is usually a problem, but programs that do their ++ own memory management and build a tree of malloc'ed objects need to ++ do this. */ ++ ++int __bounds_warn_compare_objects = 0; ++ ++/* By popular demand, a flag that causes the library to continue after hitting ++ a bounds error. The second and subsequent errors may be unpredictable ++ results of the first error. */ ++ ++int __bounds_never_fatal = 0; ++ ++/* Flag to track oob pointers to accomodate codes which use such pointers ++ subsequently e.g for comparision. Turned by default and controlled by ++ "-no-oob-pointers" environment variable. */ ++ ++int __bounds_oob_pointers = 1; ++int __bounds_print_oob_pointers = 0; ++ ++/* Redirect all error output to stderr normally or use this filename ++ if spefified. */ ++ ++char *__bounds_error_filename = NULL; ++int __bounds_error_filename_append = 0; ++ ++/* If we are using Sys V-style signal handling, and we want mutual exclusion ++ when we enter and leave critical library functions, this variable is used ++ to store the current signal mask state. */ ++ ++int __bounds_mutex_signal = 0; ++sigset_t __bounds_new_mask; ++void (*__bounds_mutex_start) (void) = NULL; ++void (*__bounds_mutex_end) (void) = NULL; ++int (*__bounds_function_thread) (void) = NULL; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/init.c gcc-4.0.2/gcc/bounds/lib/init.c +--- gcc-4.0.2.org/gcc/bounds/lib/init.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/init.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,606 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/init.c ++ Summary: ++ Code that initializes the library, and reads the bounds checking ++ options from the environment variable. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 12/2/95 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <unistd.h> ++#include <ctype.h> ++ ++#include "ansidecl.h" ++#include "bounds-lib.h" ++#include "mutex.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* The contents of the following environment variable determine how the ++ library works at run time. */ ++ ++#define BOUNDS_CHECKING_VAR "GCC_BOUNDS_OPTS" ++ ++#define PRINT_WELCOME_MSG 1 /* Print welcome message by default. */ ++#define IGNORE_BAD_FLAGS 0 /* Ignore badly formed env. variable. */ ++ ++static int print_welcome_msg = 1; ++#if COLLECT_STATS ++static int print_statistics = 1; ++#endif ++ ++static int process_opts (char *); ++static void usage (void); ++#if COLLECT_STATS ++static void print_stats (void); ++#endif ++ ++#ifndef __vxworks ++extern char **environ; ++#endif ++ ++/* Initialize the library. ++ This function may be called multiple times while constructing ++ objects. (It is called once for each object file that was compiled ++ with bounds checking). We set the '__bounds_checking_on' flag ++ (which is in libgcc2.c) to 1, so we know if we have been ++ called before. If this function is never called, then the ++ '__bounds_checking_on' flag will remain at 0, which is what ++ we want. ++ Look for the location of environment variables (from 'environ'). */ ++ ++void ++__bounds_initialize_library (void) ++{ ++ char *v; ++ int i; ++ ++ if (!__bounds_checking_on) ++ { ++ /* Init the malloc library. This is needed because we could run ++ into problems when using dynamic libraries. They will use ++ strcmp and then we get a nested call to find_object when ++ we allocate the first object. This then fails when we use mutex ++ locks. */ ++ __bounds_free (__bounds_malloc (1)); ++ free (malloc (1)); ++#if COLLECT_STATS ++ __bounds_stats_add_heap = 0; ++ __bounds_stats_delete_heap = 0; ++#endif ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_initialize_library ()\n"); ++#endif ++ ++ /* Set the __bounds_checking_on flag, so that we don't call this function ++ twice. */ ++ __bounds_checking_on = 1; ++ ++ /* Look for the environment variable containing run-time options. */ ++ v = getenv (BOUNDS_CHECKING_VAR); ++ if (v && !process_opts (v)) ++ { ++ printf ("bounds-checking: Badly formed variable '" ++ BOUNDS_CHECKING_VAR "'.\n"); ++ usage (); ++#if !IGNORE_BAD_FLAGS ++ exit (1); ++#endif ++ } ++ ++#if PRINT_WELCOME_MSG ++ /* Print a welcome message. This message can be suppressed by using ++ '-no-message' in the options variable, or by setting PRINT_WELCOME_MSG ++ to 0 at the top of this file. */ ++ if (print_welcome_msg) ++ printf ("Bounds Checking GCC v " VERSION_STRING ++ " Copyright (C) 1995 Richard W.M. Jones\n" ++ "Bounds Checking comes with ABSOLUTELY NO WARRANTY." ++ " For details see file\n" ++ "`COPYING' that should have come with the source" ++ " to this program.\n" ++ "Bounds Checking is free software, and you are welcome" ++ " to redistribute it\n" ++ "under certain conditions. See the file `COPYING'" ++ " for details.\n" ++ "For more information, set " BOUNDS_CHECKING_VAR ++ " to `-help'\n"); ++#endif /* PRINT_WELCOME_MSG */ ++ ++ /* Register the environment variables as static objects. ++ 31/5/95: Now use stack objects. Set 'no_padding' to 1. */ ++#ifndef __CYGWIN__ ++#ifndef __vxworks ++ for (i = 0; environ[i]; ++i) ++ { ++#if COLLECT_STATS ++ ++__bounds_stats_environment; ++#endif ++ __bounds_internal_add_stack_object (environ[i], ++ __bounds_strlen (environ[i]) + ++ 1, 1, "main", 0, "environ", 1, ++ -1); ++ } ++#if COLLECT_STATS ++ ++__bounds_stats_environment; ++#endif ++ /* RWMJ: (21/9/95) Although the documentation suggests otherwise, SunOS ++ and Solaris need `i+2' here, because they appear to use 2 extra ++ NULL pointers to terminate environ, instead of 1. Whether this ++ will make a difference on other systems, I do not know. ++ RWMJ: (10/1/96) This breaks OS/2 and possibly others. Now only use ++ the `+2' on Suns. Thanks Eberhard Mattes. */ ++#if defined(sun) ++#define ENV_SUN_HACK 2 ++#else ++#define ENV_SUN_HACK 1 ++#endif ++ __bounds_internal_add_stack_object (environ, ++ (i + ++ ENV_SUN_HACK) * sizeof (char *), ++ sizeof (char *), "main", 0, ++ "environ", 1, -1); ++#endif ++#endif ++#undef ENV_SUN_HACK ++ ++ /* This could probebly be solved by changing the include files in ++ the gcc include directory. I put it here because I dont know how ++ to modify the fix-includes script's. */ ++#if defined(__svr4__) || defined(svr4) ++#if defined(__STDC__) ++ __bounds_note_constructed_object (__ctype, -514, 1, NULL, 0, "__ctype"); ++#else ++ __bounds_note_constructed_object (_ctype, -514, 1, NULL, 0, "_ctype"); ++#endif ++ /* iob struct has already a size on svr4 so whe do not have to ++ include it here. It is included as an external reference. */ ++#elif defined(sun) ++ /* This is reported not to work on standard Solaris 2.4. If ++ you get a problem, then simply comment out the next two lines. Can ++ someone tell me what the compiler symbol I need to look out for ++ is? */ ++#if defined (__svr4__) ++#if defined(__STDC__) ++ __bounds_note_constructed_object (__ctype, -514, 1, NULL, 0, "__ctype"); ++#else ++ __bounds_note_constructed_object (_ctype, -514, 1, NULL, 0, "_ctype"); ++#endif ++#else ++ __bounds_note_constructed_object (_ctype_, -257, 1, NULL, 0, "_ctype_"); ++ __bounds_note_constructed_object (_iob, -32 * sizeof (struct _iobuf), 1, ++ NULL, 0, "_iob"); ++#endif ++#endif ++ ++#if defined(__linux__) ++#ifndef __GLIBC_PREREQ ++#define __GLIBC_PREREQ(major,minor) 0 ++#endif ++#if __GLIBC_PREREQ(2,3) ++ __bounds_note_constructed_object ((void *) (__ctype_b_loc ()), ++ -1 * sizeof (unsigned short *), ++ 1, NULL, 0, "__ctype_b_loc"); ++ __bounds_note_constructed_object ((void *) (*__ctype_b_loc () - 128), ++ -384 * sizeof (unsigned short), ++ 1, NULL, 0, "__ctype_b"); ++ __bounds_note_constructed_object ((void *) (__ctype_tolower_loc ()), ++ -1 * sizeof (int *), ++ 1, NULL, 0, "__ctype_tolower_loc"); ++ __bounds_note_constructed_object ((void *) (*__ctype_tolower_loc () - ++ 128), -384 * sizeof (int), ++ 1, NULL, 0, "__ctype_tolower"); ++ __bounds_note_constructed_object ((void *) (__ctype_toupper_loc ()), ++ -1 * sizeof (int *), 1, NULL, 0, ++ "__ctype_toupper_loc"); ++ __bounds_note_constructed_object ((void *) (*__ctype_toupper_loc () - ++ 128), -384 * sizeof (int), ++ 1, NULL, 0, "__ctype_toupper"); ++#else ++ __bounds_note_constructed_object ((void *) (__ctype_b - 128), ++ -384 * sizeof (unsigned short), ++ 1, NULL, 0, "__ctype_b"); ++ __bounds_note_constructed_object ((void *) (__ctype_tolower - 128), ++ -384 * sizeof (int), ++ 1, NULL, 0, "__ctype_tolower"); ++ __bounds_note_constructed_object ((void *) (__ctype_toupper - 128), ++ -384 * sizeof (int), ++ 1, NULL, 0, "__ctype_toupper"); ++#if 0 /* present in library but not in ctype.h */ ++ __bounds_note_constructed_object ((void *) __ctype_names, ++ -256 * sizeof (unsigned int), ++ 1, NULL, 0, "__ctype_names"); ++ __bounds_note_constructed_object ((void *) __ctype_width, ++ -256 * sizeof (unsigned char), ++ 1, NULL, 0, "__ctype_width"); ++#endif ++#endif ++#endif ++ ++#if COLLECT_STATS && !defined(__vxworks) ++ /* If we are collecting statistics, print them out when the program ++ exits. */ ++ atexit (print_stats); ++#endif ++ sigfillset (&__bounds_new_mask); ++ } ++} ++ ++/* The following functions and tables deal with processing arguments ++ passed in the environment variable. */ ++ ++static void ++usage (void) ++{ ++ printf ("You may supply a list of the following arguments" ++ " to a bounds-checked program\n" ++ "by listing them in the environment variable '" BOUNDS_CHECKING_VAR ++ "' before\n" ++ "running the program. Separate the arguments by spaces.\n" ++ "General:\n" ++#if PRINT_WELCOME_MSG ++ " -no-message Don't print introductory message.\n" ++#endif ++#if COLLECT_STATS ++ " -no-statistics Don't print statistics.\n" ++#endif ++ " -?, -help Print this table of usage.\n" ++ "Control runtime behaviour:\n" ++ " -array-index-check *Check the index of all array" ++ " references.\n" ++ " -no-array-index-check Only check the pointer is within" ++ " the array.\n" ++ " -never-fatal Don't abort after a bounds error.\n" ++ " -check-mmap *Check mmap calls.\n" ++ " -no-check-mmap Switch off the above.\n" ++ " -reuse-heap *Re-use the heap.\n" ++ " -reuse-age=<age> Set the age limit before freeing" ++ " (default: 0).\n" ++ " -no-reuse-heap Never really free old heap blocks.\n" ++ " -warn-unchecked-statics Warn if unchecked static objects" ++ " are referenced.\n" ++ " -no-warn-unchecked-statics *Switch off the above.\n" ++ " -warn-unchecked-stack Warn if unchecked stack objects" ++ " are referenced.\n" ++ " -no-warn-unchecked-stack *Switch off the above.\n" ++ " -warn-free-null *Warn if free (0) is used.\n" ++ " -no-warn-free-null Switch off the above.\n" ++ " -warn-misc-strings *Warn for miscellaneous" ++ " strings usage.\n" ++ " -no-warn-misc-strings Switch off the above.\n" ++ " -warn-illegal Warn when ILLEGAL pointers" ++ " are created.\n" ++ " -no-warn-illegal *Switch off the above.\n" ++ " -warn-unaligned Warn when pointers are used" ++ " unaligned.\n" ++ " -no-warn-unaligned *Switch off the above.\n" ++ " -warn-overlap *Warn if memcpy arguments overlap.\n" ++ " -no-warn-overlap Switch off the above.\n" ++ " -warn-compare-objects Warn if comparing pointers to" ++ " different objects.\n" ++ " -no-warn-compare-objects *Switch off the above.\n" ++ " -warn-all Turn on all warnings.\n" ++ " -no-print-heap *Don't print heap data at exit.\n" ++ " -print-heap Print all heap data at exit.\n" ++ " -print-heap-long Print all heap data at exit" ++ " (long version).\n" ++ " -oob-pointers *Enable out of bound pointer checks.\n" ++ " -no-oob-pointers Switch off the above.\n" ++ " -output-file=<name> Redirect all output to file <name>.\n" ++ " Use '%%p' in <name> to insert" ++ " process number.\n" ++ " -output-file-append=<name> Same as above but file is opened in" ++ " append mode.\n" ++#if DEBUG_FEATURES ++ "Debugging:\n" ++ " -print-calls Print calls to the bounds-checking" ++ " library.\n" ++ " -no-print-calls *Don't print calls.\n" ++ " -print-oob-pointers Warn when oob pointers added" ++ " to hashtable\n" ++ " -no-print-oob-pointers *Switch off the above.\n" ++ " -print-functions Print info at function start/end.\n" ++ " -no-print-functions *Switch off the above.\n" ++#endif ++ "Note: `*' means this is the default behaviour.\n"); ++} ++ ++static int ++process_opts (char *opts) ++{ ++ int len = __bounds_strlen (opts), done = 0; ++ char buffer[len + 1], *in_opts = opts; ++ ++ while (!done) ++ { ++ /* Copy the next option into the private buffer (`buffer') and deal with ++ it there. Allow the user to escape spaces with `\ ' and to insert ++ tabs and newlines with `\t' and `\n' resp. A double quoted string ++ also shields spaces. */ ++ char *p = buffer; ++ int in_quote = 0; ++ ++ do ++ { ++ switch (*in_opts) ++ { ++ case ' ': /* Last character in the argument. */ ++ if (!in_quote) ++ *p = 0; ++ else ++ *p = ' '; ++ break; ++ case '\0': /* Last character in the string. */ ++ if (in_quote) ++ return 0; /* Unterminated quote character. */ ++ *p = 0; ++ done = 1; ++ break; ++ case '\\': /* Escaped character. */ ++ in_opts++; ++ switch (*in_opts) ++ { /* Process \t and \n. */ ++ case 't': ++ *p = '\t'; ++ break; ++ case 'n': ++ *p = '\n'; ++ break; ++ case '\0': ++ return 0; /* \ cannot be at end of the string. */ ++ default: ++ *p = *in_opts; ++ } ++ break; ++ case '"': /* Start or end of "...". */ ++ in_quote = !in_quote; ++ break; ++ default: /* Another character. */ ++ *p = *in_opts; ++ } ++ ++in_opts; ++ } ++ while (*p++); ++ ++ /* Now we have a single argument in the private buffer. See if we know ++ what it is. If we don't understand it, we return 0 immediately, which ++ causes the calling function to print usage. Arguments like '-no- ++ statistics' which are enabled & disabled by #defines in the library ++ are ignored silently if not applicable. */ ++ p = buffer; ++ /* Skip leading whitespace. */ ++ while (*p && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) ++ p++; ++ if (*p != 0) ++ { ++ if (__bounds_strcmp (p, "-no-message") == 0) ++ print_welcome_msg = 0; ++ else if (__bounds_strcmp (p, "-no-statistics") == 0) ++#if COLLECT_STATS ++ print_statistics = 0 ++#endif ++ ; ++ else if (__bounds_strcmp (p, "-?") == 0 ++ || __bounds_strcmp (p, "-help") == 0) ++ { ++ usage (); ++ exit (0); ++ } ++ else if (__bounds_strcmp (p, "-array-index-check") == 0) ++ __bounds_array_index_check = 1; ++ else if (__bounds_strcmp (p, "-no-array-index-check") == 0) ++ __bounds_array_index_check = 0; ++ else if (__bounds_strcmp (p, "-never-fatal") == 0) ++ __bounds_never_fatal = 1; ++ else if (__bounds_strcmp (p, "-reuse-heap") == 0) ++ __bounds_never_free_heap = 0; ++ else if (__bounds_strcmp (p, "-no-reuse-heap") == 0) ++ __bounds_never_free_heap = 1; ++ else if (__bounds_strcmp (p, "-check-mmap") == 0) ++ __bounds_check_mmap_calls = 1; ++ else if (__bounds_strcmp (p, "-no-check-mmap") == 0) ++ __bounds_check_mmap_calls = 0; ++ else if (__bounds_strncmp (p, "-reuse-age=", 11) == 0) ++ __bounds_age_limit = atoi (p + 11); ++ else if (__bounds_strcmp (p, "-print-calls") == 0) ++ { ++#if DEBUG_FEATURES ++ __bounds_print_oob_pointers = 1; ++ __bounds_debug_print_function = 1; ++ __bounds_debug_print_calls = 1; ++#endif ++ } ++ else if (__bounds_strcmp (p, "-no-print-calls") == 0) ++ { ++#if DEBUG_FEATURES ++ __bounds_print_oob_pointers = 0; ++ __bounds_debug_print_function = 0; ++ __bounds_debug_print_calls = 0; ++#endif ++ } ++ else if (__bounds_strcmp (p, "-print-oob-pointers") == 0) ++#if DEBUG_FEATURES ++ __bounds_print_oob_pointers = 1 ++#endif ++ ; ++ else if (__bounds_strcmp (p, "-no-print-oob-pointers") == 0) ++#if DEBUG_FEATURES ++ __bounds_print_oob_pointers = 0 ++#endif ++ ; ++ else if (__bounds_strcmp (p, "-print-functions") == 0) ++#if DEBUG_FEATURES ++ __bounds_debug_print_function = 1 ++#endif ++ ; ++ else if (__bounds_strcmp (p, "-no-print-functions") == 0) ++#if DEBUG_FEATURES ++ __bounds_debug_print_function = 0 ++#endif ++ ; ++ else if (__bounds_strcmp (p, "-print-heap") == 0) ++ __bounds_debug_print_heap = 1; ++ else if (__bounds_strcmp (p, "-print-heap-long") == 0) ++ __bounds_debug_print_heap = 2; ++ else if (__bounds_strcmp (p, "-no-print-heap") == 0) ++ __bounds_debug_print_heap = 0; ++ else if (__bounds_strcmp (p, "-warn-unchecked-statics") == 0) ++ __bounds_warn_unchecked_statics = 1; ++ else if (__bounds_strcmp (p, "-no-warn-unchecked-statics") == 0) ++ __bounds_warn_unchecked_statics = 0; ++ else if (__bounds_strcmp (p, "-warn-unchecked-stack") == 0) ++ __bounds_warn_unchecked_stack = 1; ++ else if (__bounds_strcmp (p, "-no-warn-unchecked-stack") == 0) ++ __bounds_warn_unchecked_stack = 0; ++ else if (__bounds_strcmp (p, "-warn-free-null") == 0) ++ __bounds_warn_free_null = 1; ++ else if (__bounds_strcmp (p, "-no-warn-free-null") == 0) ++ __bounds_warn_free_null = 0; ++ else if (__bounds_strcmp (p, "-warn-misc-strings") == 0) ++ __bounds_warn_misc_strings = 1; ++ else if (__bounds_strcmp (p, "-no-warn-misc-strings") == 0) ++ __bounds_warn_misc_strings = 0; ++ else if (__bounds_strcmp (p, "-warn-illegal") == 0) ++ __bounds_warn_illegal = 1; ++ else if (__bounds_strcmp (p, "-no-warn-illegal") == 0) ++ __bounds_warn_illegal = 0; ++ else if (__bounds_strcmp (p, "-warn-unaligned") == 0) ++ __bounds_warn_unaligned = 1; ++ else if (__bounds_strcmp (p, "-no-warn-unaligned") == 0) ++ __bounds_warn_unaligned = 0; ++ else if (__bounds_strcmp (p, "-warn-overlap") == 0) ++ __bounds_warn_overlap = 1; ++ else if (__bounds_strcmp (p, "-no-warn-overlap") == 0) ++ __bounds_warn_overlap = 0; ++ else if (__bounds_strcmp (p, "-warn-compare-objects") == 0) ++ __bounds_warn_compare_objects = 1; ++ else if (__bounds_strcmp (p, "-no-warn-compare-objects") == 0) ++ __bounds_warn_compare_objects = 0; ++ else if (__bounds_strcmp (p, "-oob-pointers") == 0) ++ __bounds_oob_pointers = 1; ++ else if (__bounds_strcmp (p, "-no-oob-pointers") == 0) ++ __bounds_oob_pointers = 0; ++ else if (__bounds_strcmp (p, "-warn-all") == 0) ++ __bounds_warn_unchecked_statics = ++ __bounds_warn_unchecked_stack = ++ __bounds_warn_misc_strings = ++ __bounds_warn_free_null = ++ __bounds_warn_illegal = ++ __bounds_warn_unaligned = ++ __bounds_warn_overlap = __bounds_warn_compare_objects = 1; ++ else if (__bounds_strncmp (p, "-output-file=", 13) == 0) ++ { ++ __bounds_error_filename = ++ __bounds_malloc (__bounds_strlen (p + 13) + 1); ++ if (__bounds_error_filename) ++ __bounds_strcpy (__bounds_error_filename, p + 13); ++ __bounds_error_filename_append = 0; ++ } ++ else if (__bounds_strncmp (p, "-output-file-append=", 20) == 0) ++ { ++ __bounds_error_filename = ++ __bounds_malloc (__bounds_strlen (p + 20) + 1); ++ if (__bounds_error_filename) ++ __bounds_strcpy (__bounds_error_filename, p + 20); ++ __bounds_error_filename_append = 1; ++ } ++ else ++ return 0; /* Unrecognized option. */ ++ } ++ } ++ ++ return 1; ++} ++ ++#if COLLECT_STATS ++ ++/* Print call frequency statistics when the program exits. */ ++static void ++print_stats (void) ++{ ++ if (print_statistics) ++ { ++ printf ("Bounds library call frequency statistics:\n" ++ " Calls to push, pop, param function: %u, %u, %u\n" ++ " Calls to add, delete stack: %u, %u\n" ++ " Calls to add, delete heap: %u, %u\n" ++#if DEBUG_OBJECTS ++ " Calls to find_object, maybe, search: %u, %u, %u\n" ++#endif ++ " Calls to check pointer +/- integer: %u\n" ++ " Calls to check array references: %u\n" ++ " Calls to check pointer differences: %u\n" ++ " Calls to check object references: %u\n" ++ " Calls to check component references: %u\n" ++ " Calls to check truth, falsity of pointers: %u, %u\n" ++ " Calls to check <, >, <=, >= of pointers: %u\n" ++ " Calls to check ==, != of pointers: %u\n" ++ " Calls to check p++, ++p, p--, --p: %u, %u, %u, %u\n" ++ " Calls to add, find, delete oob pointers: %u, %u, %u\n" ++ " References to unchecked static, stack: %u, %u\n", ++ __bounds_stats_push_function, ++ __bounds_stats_pop_function, ++ __bounds_stats_param_function, ++ __bounds_stats_add_stack - ++ __bounds_stats_environment, ++ __bounds_stats_delete_stack, ++ __bounds_stats_add_heap, __bounds_stats_delete_heap, ++#if DEBUG_OBJECTS ++ __bounds_stats_find_object, ++ __bounds_stats_maybe_find_object, ++ __bounds_stats_maybe_find_object_search, ++#endif ++ __bounds_stats_ptr_plus_int, ++ __bounds_stats_array_reference, ++ __bounds_stats_ptr_diff, ++ __bounds_stats_reference, ++ __bounds_stats_component_reference, ++ __bounds_stats_ptr_true, ++ __bounds_stats_ptr_false, ++ __bounds_stats_ptr_lt_ptr + ++ __bounds_stats_ptr_le_ptr + ++ __bounds_stats_ptr_gt_ptr + ++ __bounds_stats_ptr_ge_ptr, ++ __bounds_stats_ptr_ne_ptr + ++ __bounds_stats_ptr_eq_ptr, ++ __bounds_stats_ptr_postinc, ++ __bounds_stats_ptr_preinc, ++ __bounds_stats_ptr_postdec, ++ __bounds_stats_ptr_predec, ++ __bounds_stats_add_oob_table, ++ __bounds_stats_find_oob_table, ++ __bounds_stats_delete_oob_table, ++ __bounds_stats_unchecked_static, ++ __bounds_stats_unchecked_stack); ++ __bound_print_statistics (); ++ } ++ if (__bounds_debug_print_heap) ++ __bound_print_heap (); ++} ++ ++#endif /* COLLECT_STATS */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/Makefile gcc-4.0.2/gcc/bounds/lib/Makefile +--- gcc-4.0.2.org/gcc/bounds/lib/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/Makefile 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,108 @@ ++# Makefile for: ++# ---------------------------------------------------------------------- ++# Bounds Checking Project, by Richard W.M. Jones. ++# Library of checking functions linked by modified GCC. ++# ---------------------------------------------------------------------- ++ ++SHELL = /bin/sh ++ ++OPTIMIZE= -O3 -finline-limit=1000000 --param inline-unit-growth=10000 \ ++ -fomit-frame-pointer ++ ++VPATH = $(srcdir)/bounds/lib ++ ++# Always search these dirs when compiling. ++SUBDIR_INCLUDES = -I../.. -I$(srcdir)/bounds/lib -I$(srcdir) \ ++ -I$(srcdir)/config -I$(srcdir)/../include \ ++ -I$(srcdir)/../newlib/libc/include ++ ++# Use this on System V. ++CPPFLAGS = -DUSG ++ ++DEBUG = -g ++ ++.c.o: ++ $(GCC_FOR_TARGET) -Wall $(OPTIMIZE) $(CPPFLAGS) $(DEBUG) \ ++ -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $(MULTI_FLAGS) $< ++ ++# If we were not invoked from the gcc dir invoke make ++# in the gcc dir and reinvoke this makefile. ++# That's necessary to get the right values for srcdir, etc. ++all: ++ cd ../..; $(MAKE) CFLAGS="$(CFLAGS)" sublibboundscheck ++ ++MALLOC_HEADERS = getpagesize.h malloc.h mem-limits.h obstack.h ++MALLOC_SOURCES = bounds.c mmap.c calloc.c cfree.c free.c malloc.c \ ++ mcheck.c memalign.c morecore.c mstats.c mtrace.c \ ++ realloc.c valloc.c vm-limit.c ++MALLOC_OBJECTS = $(MALLOC_SOURCES:.c=.o) ++SOURCES = alloca.c check.c error.c breakpoint.c exstatics.c functions.c \ ++ globals.c init.c objects.c print.c pthread_init.c $(MALLOC_SOURCES) ++OBJECTS = $(SOURCES:.c=.o) ++HEADERS = alloca.h bounds-lib.h check.h ext-tree.h functions.h \ ++ mutex.h objects.h version.h ../VERSION $(MALLOC_HEADERS) ++LIBFUNCS = memcpy mempcpy memmove bcopy memset bzero memcmp bcmp \ ++ strcpy strncpy strlen strcmp strncmp strcat strncat strpbrk \ ++ strrchr rindex strspn strcspn strstr strtok strtok_r strchr strdup \ ++ index strcoll strxfrm memchr memccpy strcasecmp strncasecmp ++ ++RM = rm -f ++ ++mostlyclean: ++ $(RM) libboundscheck.a $(OBJECTS) core ++ $(RM) -r func stmp_func ++ cd malloc; $(MAKE) clean ++ ++distclean: clean ++ $(RM) *~ *.BAK ++ ++clean: mostlyclean ++extraclean: mostlyclean ++ ++install: libboundscheck.a ++ -if [ -f libboundscheck.a ]; then \ ++ rm -f $(DESTDIR)$(libsubdir)/libboundscheck.a; \ ++ $(INSTALL_DATA) libboundscheck.a $(DESTDIR)$(libsubdir)/libboundscheck.a; \ ++ (cd $(DESTDIR)$(libsubdir); $(RANLIB_FOR_TARGET) libboundscheck.a); \ ++ chmod a-x $(DESTDIR)$(libsubdir)/libboundscheck.a; \ ++ else true; fi ++ ++libboundscheck.a: $(OBJECTS) stmp_func ++ $(RM) libboundscheck.a ++ $(AR) $(AR_FLAGS) libboundscheck.a $(OBJECTS) func/*.o ++ -$(RANLIB_FOR_TARGET) libboundscheck.a ++ $(RM) $(LIBBOUNDSCHECKDIR)/libboundscheck.a ++ cp libboundscheck.a $(LIBBOUNDSCHECKDIR) ++ -$(RANLIB_FOR_TARGET) $(LIBBOUNDSCHECKDIR)/libboundscheck.a ++ ++alloca.o: $(srcdir)/bounds/lib/alloca.c $(HEADERS) ++ $(GCC_FOR_TARGET) -fno-builtin -Wall $(OPTIMIZE) $(CPPFLAGS) $(DEBUG) \ ++ -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $(MULTI_FLAGS) \ ++ $(srcdir)/bounds/lib/alloca.c -o alloca.o ++ ++pthread_init.o: $(srcdir)/bounds/lib/pthread_init.c $(HEADERS) ++ if [ -f /usr/include/pthread.h ]; then R=-D_REENTRANT; else R=; fi; \ ++ $(GCC_FOR_TARGET) $$R -Wall $(OPTIMIZE) $(CPPFLAGS) $(DEBUG) \ ++ -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $(MULTI_FLAGS) \ ++ $(srcdir)/bounds/lib/pthread_init.c -o pthread_init.o ++ ++stmp_func: $(srcdir)/bounds/lib/string.c $(HEADERS) ++ if [ -d func ]; then true; else mkdir func; fi; \ ++ cd func; \ ++ for name in $(LIBFUNCS); \ ++ do \ ++ echo $${name}; \ ++ rm -f bc_$${name}.o; \ ++ $(GCC_FOR_TARGET) -DLbounds_$${name} -fno-builtin -Wall $(OPTIMIZE) \ ++ $(DEBUG) -c $(CPPFLAGS) $(GCC_CFLAGS) $(SUBDIR_INCLUDES) \ ++ $(MULTI_FLAGS) $(srcdir)/bounds/lib/string.c -o bc_$${name}.o; \ ++ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ ++ rm -f $${name}.o; \ ++ $(GCC_FOR_TARGET) -DL$${name} -fno-builtin -Wall $(OPTIMIZE) \ ++ $(DEBUG) -c $(CPPFLAGS) $(GCC_CFLAGS) $(SUBDIR_INCLUDES) \ ++ $(MULTI_FLAGS) $(srcdir)/bounds/lib/string.c -o $${name}.o; \ ++ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ ++ done; \ ++ cd .. ; touch stmp_func ++ ++$(OBJECTS): $(HEADERS) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mallocbug.c gcc-4.0.2/gcc/bounds/lib/mallocbug.c +--- gcc-4.0.2.org/gcc/bounds/lib/mallocbug.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mallocbug.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,66 @@ ++/* Reproduce a GNU malloc bug. */ ++#include <stdio.h> ++extern char *malloc (); ++ ++#define size_t unsigned int ++ ++int ++main () ++{ ++ char *dummy0; ++ char *dummy1; ++ char *fill_info_table1; ++ char *over_top; ++ size_t over_top_size = 0x3000; ++ char *over_top_dup; ++ size_t over_top_dup_size = 0x7000; ++ char *x; ++ size_t i; ++ ++ /* Here's what memory is supposed to look like (hex): ++ size contents ++ 3000 original_info_table, later fill_info_table1 ++ 3fa000 dummy0 ++ 3fa000 dummy1 ++ 6000 info_table_2 ++ 3000 over_top ++ ++ */ ++ /* mem: original_info_table */ ++ dummy0 = malloc (0x3fa000); ++ /* mem: original_info_table, dummy0 */ ++ dummy1 = malloc (0x3fa000); ++ /* mem: free, dummy0, dummy1, info_table_2 */ ++ fill_info_table1 = malloc (0x3000); ++ /* mem: fill_info_table1, dummy0, dummy1, info_table_2 */ ++ ++ x = malloc (0x1000); ++ free (x); ++ /* mem: fill_info_table1, dummy0, dummy1, info_table_2, freexx */ ++ ++ /* This is what loses; info_table_2 and freexx get combined unbeknownst ++ to mmalloc, and mmalloc puts over_top in a section of memory which ++ is on the free list as part of another block (where info_table_2 had ++ been). */ ++ over_top = malloc (over_top_size); ++ over_top_dup = malloc (over_top_dup_size); ++ __bounds_memset (over_top, 0, over_top_size); ++ __bounds_memset (over_top_dup, 1, over_top_dup_size); ++ ++ for (i = 0; i < over_top_size; ++i) ++ if (over_top[i] != 0) ++ { ++ printf ("FAIL: malloc expands info table\n"); ++ return 0; ++ } ++ ++ for (i = 0; i < over_top_dup_size; ++i) ++ if (over_top_dup[i] != 1) ++ { ++ printf ("FAIL: malloc expands info table\n"); ++ return 0; ++ } ++ ++ printf ("PASS: malloc expands info table\n"); ++ return 0; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/malloc.c gcc-4.0.2/gcc/bounds/lib/malloc.c +--- gcc-4.0.2.org/gcc/bounds/lib/malloc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/malloc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,363 @@ ++/* Memory allocator `malloc'. ++ Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++/* How to really get more memory. */ ++__ptr_t (*__morecore) (ptrdiff_t __size) = __default_morecore; ++ ++/* Debugging hook for `malloc'. */ ++__ptr_t (*__malloc_hook) (__malloc_size_t __size); ++ ++/* Pointer to the base of the first block. */ ++char *_heapbase; ++ ++/* Block information table. Allocated with align/__free (not malloc/free). */ ++malloc_info *_heapinfo; ++ ++/* Number of info entries. */ ++static __malloc_size_t heapsize; ++ ++/* Search index in the info table. */ ++__malloc_size_t _heapindex; ++ ++/* Limit of valid info table indices. */ ++__malloc_size_t _heaplimit; ++ ++/* Free lists for each fragment size. */ ++struct list _fraghead[BLOCKLOG]; ++ ++/* Instrumentation. */ ++__malloc_size_t _chunks_used; ++__malloc_size_t _bytes_used; ++__malloc_size_t _chunks_free; ++__malloc_size_t _bytes_free; ++ ++/* Are you experienced? */ ++int __malloc_initialized; ++ ++void (*__after_morecore_hook) (void); ++ ++/* Aligned allocation. */ ++static __ptr_t align (__malloc_size_t); ++ ++static __ptr_t ++align (__malloc_size_t size) ++{ ++ __ptr_t result; ++ unsigned long int adj; ++ ++ result = (*__morecore) (size); ++ adj = (unsigned long int) ((unsigned long int) ((char *) result - ++ (char *) NULL)) % BLOCKSIZE; ++ if (adj != 0) ++ { ++ adj = BLOCKSIZE - adj; ++ (void) (*__morecore) (adj); ++ result = (char *) result + adj; ++ } ++ ++ if (__after_morecore_hook) ++ (*__after_morecore_hook) (); ++ ++ return result; ++} ++ ++/* Set everything up and remember that we have. */ ++static int initialize (void); ++ ++static int ++initialize (void) ++{ ++ heapsize = HEAP / BLOCKSIZE; ++ _heapinfo = (malloc_info *) align (heapsize * sizeof (malloc_info)); ++ if (_heapinfo == NULL) ++ return 0; ++ __bounds_memset (_heapinfo, 0, heapsize * sizeof (malloc_info)); ++ _heapinfo[0].free.size = 0; ++ _heapinfo[0].free.next = _heapinfo[0].free.prev = 0; ++ _heapindex = 0; ++ _heapbase = (char *) _heapinfo; ++ ++ /* Account for the _heapinfo block itself in the statistics. */ ++ _bytes_used = heapsize * sizeof (malloc_info); ++ _chunks_used = 1; ++ ++ __malloc_initialized = 1; ++ return 1; ++} ++ ++/* Get neatly aligned memory, initializing or ++ growing the heap info table as necessary. */ ++static __ptr_t morecore (__malloc_size_t); ++ ++static __ptr_t ++morecore (__malloc_size_t size) ++{ ++ __ptr_t result; ++ malloc_info *newinfo, *oldinfo; ++ __malloc_size_t newsize; ++ ++ result = align (size); ++ if (result == NULL) ++ return NULL; ++ ++ /* Check if we need to grow the info table. */ ++ if ((__malloc_size_t) BLOCK ((char *) result + size) > heapsize) ++ { ++ newsize = heapsize; ++ while ((__malloc_size_t) BLOCK ((char *) result + size) > newsize) ++ newsize *= 2; ++ newinfo = (malloc_info *) align (newsize * sizeof (malloc_info)); ++ if (newinfo == NULL) ++ { ++ (*__morecore) (-size); ++ return NULL; ++ } ++ __bounds_memcpy (newinfo, _heapinfo, heapsize * sizeof (malloc_info)); ++ __bounds_memset (&newinfo[heapsize], 0, ++ (newsize - heapsize) * sizeof (malloc_info)); ++ oldinfo = _heapinfo; ++ newinfo[BLOCK (oldinfo)].busy.type = 0; ++ newinfo[BLOCK (oldinfo)].busy.info.size ++ = BLOCKIFY (heapsize * sizeof (malloc_info)); ++ _heapinfo = newinfo; ++ /* Account for the _heapinfo block itself in the statistics. */ ++ _bytes_used += newsize * sizeof (malloc_info); ++ ++_chunks_used; ++ _free_internal (oldinfo); ++ heapsize = newsize; ++ } ++ ++ _heaplimit = BLOCK ((char *) result + size); ++ return result; ++} ++ ++/* Allocate memory from the heap. */ ++__ptr_t ++__bounds_malloc (__malloc_size_t size) ++{ ++ __ptr_t result; ++ __malloc_size_t block, blocks, lastblocks, start; ++ register __malloc_size_t i; ++ struct list *next; ++ ++ /* ANSI C allows `malloc (0)' to either return NULL, or to return a ++ valid address you can realloc and free (though not dereference). ++ ++ It turns out that some extant code (sunrpc, at least Ultrix's version) ++ expects `malloc (0)' to return non-NULL and breaks otherwise. ++ Be compatible. */ ++ ++#if 0 ++ if (size == 0) ++ return NULL; ++#endif ++ ++ if (__malloc_hook != NULL) ++ return (*__malloc_hook) (size); ++ ++ if (!__malloc_initialized) ++ if (!initialize ()) ++ return NULL; ++ ++ if (size < sizeof (struct list)) ++ size = sizeof (struct list); ++ ++#ifdef SUNOS_LOCALTIME_BUG ++ if (size < 16) ++ size = 16; ++#endif ++ ++ /* Determine the allocation policy based on the request size. */ ++ if (size <= BLOCKSIZE / 2) ++ { ++ /* Small allocation to receive a fragment of a block. ++ Determine the logarithm to base two of the fragment size. */ ++ register __malloc_size_t log = 1; ++ --size; ++ while ((size /= 2) != 0) ++ ++log; ++ ++ /* Look in the fragment lists for a ++ free fragment of the desired size. */ ++ next = _fraghead[log].next; ++ if (next != NULL) ++ { ++ /* There are free fragments of this size. ++ Pop a fragment out of the fragment list and return it. ++ Update the block's nfree and first counters. */ ++ result = (__ptr_t) next; ++ next->prev->next = next->next; ++ if (next->next != NULL) ++ next->next->prev = next->prev; ++ block = BLOCK (result); ++ if (--_heapinfo[block].busy.info.frag.nfree != 0) ++ _heapinfo[block].busy.info.frag.first = (unsigned long int) ++ ((unsigned long int) ((char *) next->next - (char *) NULL) ++ % BLOCKSIZE) >> log; ++ ++ /* Update the statistics. */ ++ ++_chunks_used; ++ _bytes_used += 1 << log; ++ --_chunks_free; ++ _bytes_free -= 1 << log; ++ } ++ else ++ { ++ /* No free fragments of the desired size, so get a new block ++ and break it into fragments, returning the first. */ ++ result = __bounds_malloc (BLOCKSIZE); ++ if (result == NULL) ++ return NULL; ++ ++ /* Link all fragments but the first into the free list. */ ++ for (i = 1; i < (__malloc_size_t) (BLOCKSIZE >> log); ++i) ++ { ++ next = (struct list *) ((char *) result + (i << log)); ++ next->next = _fraghead[log].next; ++ next->prev = &_fraghead[log]; ++ next->prev->next = next; ++ if (next->next != NULL) ++ next->next->prev = next; ++ } ++ ++ /* Initialize the nfree and first counters for this block. */ ++ block = BLOCK (result); ++ _heapinfo[block].busy.type = log; ++ _heapinfo[block].busy.info.frag.nfree = i - 1; ++ _heapinfo[block].busy.info.frag.first = i - 1; ++ ++ _chunks_free += (BLOCKSIZE >> log) - 1; ++ _bytes_free += BLOCKSIZE - (1 << log); ++ _bytes_used -= BLOCKSIZE - (1 << log); ++ } ++ } ++ else ++ { ++ /* Large allocation to receive one or more blocks. ++ Search the free list in a circle starting at the last place visited. ++ If we loop completely around without finding a large enough ++ space we will have to get more memory from the system. */ ++ blocks = BLOCKIFY (size); ++ start = block = _heapindex; ++ while (_heapinfo[block].free.size < blocks) ++ { ++ block = _heapinfo[block].free.next; ++ if (block == start) ++ { ++ /* Need to get more from the system. Check to see if ++ the new core will be contiguous with the final free ++ block; if so we don't need to get as much. */ ++ block = _heapinfo[0].free.prev; ++ lastblocks = _heapinfo[block].free.size; ++ if (_heaplimit != 0 && block + lastblocks == _heaplimit && ++ (*__morecore) (0) == ADDRESS (block + lastblocks) && ++ (morecore ((blocks - lastblocks) * BLOCKSIZE)) != NULL) ++ { ++ /* Which block we are extending (the `final free ++ block' referred to above) might have changed, if ++ it got combined with a freed info table. */ ++ block = _heapinfo[0].free.prev; ++ _heapinfo[block].free.size += (blocks - lastblocks); ++ _bytes_free += (blocks - lastblocks) * BLOCKSIZE; ++ continue; ++ } ++ result = morecore (blocks * BLOCKSIZE); ++ if (result == NULL) ++ return NULL; ++ block = BLOCK (result); ++ _heapinfo[block].busy.type = 0; ++ _heapinfo[block].busy.info.size = blocks; ++ ++_chunks_used; ++ _bytes_used += blocks * BLOCKSIZE; ++ return result; ++ } ++ } ++ ++ /* At this point we have found a suitable free list entry. ++ Figure out how to remove what we need from the list. */ ++ result = ADDRESS (block); ++ if (_heapinfo[block].free.size > blocks) ++ { ++ /* The block we found has a bit left over, ++ so relink the tail end back into the free list. */ ++ _heapinfo[block + blocks].free.size ++ = _heapinfo[block].free.size - blocks; ++ _heapinfo[block + blocks].free.next = _heapinfo[block].free.next; ++ _heapinfo[block + blocks].free.prev = _heapinfo[block].free.prev; ++ _heapinfo[_heapinfo[block].free.prev].free.next ++ = _heapinfo[_heapinfo[block].free.next].free.prev ++ = _heapindex = block + blocks; ++ } ++ else ++ { ++ /* The block exactly matches our requirements, ++ so just remove it from the list. */ ++ _heapinfo[_heapinfo[block].free.next].free.prev ++ = _heapinfo[block].free.prev; ++ _heapinfo[_heapinfo[block].free.prev].free.next ++ = _heapindex = _heapinfo[block].free.next; ++ --_chunks_free; ++ } ++ ++ _heapinfo[block].busy.type = 0; ++ _heapinfo[block].busy.info.size = blocks; ++ ++_chunks_used; ++ _bytes_used += blocks * BLOCKSIZE; ++ _bytes_free -= blocks * BLOCKSIZE; ++ } ++ ++ return result; ++} ++ ++#if 0 /* Disabled - RWMJ */ ++#ifndef _LIBC ++ ++/* On some ANSI C systems, some libc functions call _malloc, _free ++ and _realloc. Make them use the GNU functions. */ ++ ++__ptr_t ++_malloc (__malloc_size_t size) ++{ ++ return malloc (size); ++} ++ ++void ++_free (__ptr_t ptr) ++{ ++ free (ptr); ++} ++ ++__ptr_t ++_realloc (__ptr_t ptr, __malloc_size_t size) ++{ ++ return realloc (ptr, size); ++} ++ ++#endif ++#endif /* 0 */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/malloc.h gcc-4.0.2/gcc/bounds/lib/malloc.h +--- gcc-4.0.2.org/gcc/bounds/lib/malloc.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/malloc.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,278 @@ ++/* Declarations for `malloc' and friends. ++ Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#ifndef _MALLOC_H ++ ++#define _MALLOC_H 1 ++ ++#ifdef _MALLOC_INTERNAL ++ ++#ifdef HAVE_CONFIG_H ++#include <config.h> ++#endif ++ ++#if defined(_LIBC) || defined(STDC_HEADERS) || defined(USG) ++#include <string.h> ++#else ++#ifndef memset ++#define memset(s, zero, n) __bounds_memset ((s), (n)) ++#endif ++#ifndef memcpy ++#define memcpy(d, s, n) __bounds_memmove ((s), (d), (n)) ++#endif ++#endif ++ ++#if defined (__GNU_LIBRARY__) || (defined (__STDC__) && __STDC__) ++#include <limits.h> ++#else ++#ifndef CHAR_BIT ++#define CHAR_BIT 8 ++#endif ++#endif ++ ++#ifdef HAVE_UNISTD_H ++#include <unistd.h> ++#endif ++ ++#endif /* _MALLOC_INTERNAL. */ ++ ++ ++#ifdef __cplusplus ++extern "C" ++{ ++#endif ++ ++#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) ++#undef __ptr_t ++#define __ptr_t void * ++#else /* Not C++ or ANSI C. */ ++#undef const ++#define const ++#undef __ptr_t ++#define __ptr_t char * ++#endif /* C++ or ANSI C. */ ++ ++#if defined (__STDC__) && __STDC__ ++#include <stddef.h> ++#define __malloc_size_t size_t ++#else ++#define __malloc_size_t unsigned int ++#endif ++ ++#ifndef NULL ++#define NULL 0 ++#endif ++ ++ ++/* Allocate SIZE bytes of memory. */ ++ extern __ptr_t malloc (size_t __size); ++/* Re-allocate the previously allocated block ++ in __ptr_t, making the new block SIZE bytes long. */ ++ extern __ptr_t realloc (__ptr_t __ptr, size_t __size); ++/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ ++ extern __ptr_t calloc (size_t __nmemb, size_t __size); ++/* Free a block allocated by `malloc', `realloc' or `calloc'. */ ++ extern void free (__ptr_t __ptr); ++ ++/* Allocate SIZE bytes allocated to ALIGNMENT bytes. */ ++ extern __ptr_t memalign (size_t __alignment, size_t __size); ++ ++/* Allocate SIZE bytes on a page boundary. */ ++ extern __ptr_t valloc (size_t __size); ++ ++ ++#ifdef _MALLOC_INTERNAL ++ ++/* The allocator divides the heap into blocks of fixed size; large ++ requests receive one or more whole blocks, and small requests ++ receive a fragment of a block. Fragment sizes are powers of two, ++ and all fragments of a block are the same size. When all the ++ fragments in a block have been freed, the block itself is freed. */ ++#define INT_BIT (CHAR_BIT * sizeof(int)) ++#define BLOCKLOG (INT_BIT > 16 ? 12 : 9) ++#define BLOCKSIZE (1 << BLOCKLOG) ++#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) / BLOCKSIZE) ++ ++/* Determine the amount of memory spanned by the initial heap table ++ (not an absolute limit). */ ++#define HEAP (INT_BIT > 16 ? 4194304 : 65536) ++ ++/* Number of contiguous free blocks allowed to build up at the end of ++ memory before they will be returned to the system. */ ++#define FINAL_FREE_BLOCKS 8 ++ ++/* Data structure giving per-block information. */ ++ typedef union ++ { ++ /* Heap information for a busy block. */ ++ struct ++ { ++ /* Zero for a large block, or positive giving the ++ logarithm to the base two of the fragment size. */ ++ int type; ++ union ++ { ++ struct ++ { ++ __malloc_size_t nfree; /* Free frags in a fragmented block. */ ++ __malloc_size_t first; /* First free fragment of the block. */ ++ } frag; ++ /* Size (in blocks) of a large cluster. */ ++ __malloc_size_t size; ++ } info; ++ } busy; ++ /* Heap information for a free block ++ (that may be the first of a free cluster). */ ++ struct ++ { ++ __malloc_size_t size; /* Size (in blocks) of a free cluster. */ ++ __malloc_size_t next; /* Index of next free cluster. */ ++ __malloc_size_t prev; /* Index of previous free cluster. */ ++ } free; ++ } malloc_info; ++ ++/* Pointer to first block of the heap. */ ++ extern char *_heapbase; ++ ++/* Table indexed by block number giving per-block information. */ ++ extern malloc_info *_heapinfo; ++ ++/* Address to block number and vice versa. */ ++#define BLOCK(A) (((char *) (A) - _heapbase) / BLOCKSIZE + 1) ++#define ADDRESS(B) ((__ptr_t) (((B) - 1) * BLOCKSIZE + _heapbase)) ++ ++/* Current search index for the heap table. */ ++ extern __malloc_size_t _heapindex; ++ ++/* Limit of valid info table indices. */ ++ extern __malloc_size_t _heaplimit; ++ ++/* Doubly linked lists of free fragments. */ ++ struct list ++ { ++ struct list *next; ++ struct list *prev; ++ }; ++ ++/* Free list headers for each fragment size. */ ++ extern struct list _fraghead[]; ++ ++/* List of blocks allocated with `memalign' (or `valloc'). */ ++ struct alignlist ++ { ++ struct alignlist *next; ++ __ptr_t aligned; /* The address that memaligned returned. */ ++ __ptr_t exact; /* The address that malloc returned. */ ++ }; ++ extern struct alignlist *_aligned_blocks; ++ ++/* Instrumentation. */ ++ extern __malloc_size_t _chunks_used; ++ extern __malloc_size_t _bytes_used; ++ extern __malloc_size_t _chunks_free; ++ extern __malloc_size_t _bytes_free; ++ ++/* Internal version of `free' used in `morecore' (malloc.c). */ ++ extern void _free_internal (__ptr_t __ptr); ++ ++#endif /* _MALLOC_INTERNAL. */ ++ ++/* Underlying allocation function; successive calls should ++ return contiguous pieces of memory. */ ++ extern __ptr_t (*__morecore) (ptrdiff_t __size); ++ ++/* Default value of `__morecore'. */ ++ extern __ptr_t __default_morecore (ptrdiff_t __size); ++ ++/* If not NULL, this function is called after each time ++ `__morecore' is called to increase the data size. */ ++ extern void (*__after_morecore_hook) (void); ++ ++/* Nonzero if `malloc' has been called and done its initialization. */ ++ extern int __malloc_initialized; ++ ++/* Hooks for debugging versions. */ ++ extern void (*__free_hook) (__ptr_t __ptr); ++ extern __ptr_t (*__malloc_hook) (size_t __size); ++ extern __ptr_t (*__realloc_hook) (__ptr_t __ptr, size_t __size); ++ ++/* Return values for `mprobe': these are the kinds of inconsistencies that ++ `mcheck' enables detection of. */ ++ enum mcheck_status ++ { ++ MCHECK_DISABLED = -1, /* Consistency checking is not turned on. */ ++ MCHECK_OK, /* Block is fine. */ ++ MCHECK_FREE, /* Block freed twice. */ ++ MCHECK_HEAD, /* Memory before the block was clobbered. */ ++ MCHECK_TAIL /* Memory after the block was clobbered. */ ++ }; ++ ++/* Activate a standard collection of debugging hooks. This must be called ++ before `malloc' is ever called. ABORTFUNC is called with an error code ++ (see enum above) when an inconsistency is detected. If ABORTFUNC is ++ null, the standard function prints on stderr and then calls `abort'. */ ++ extern int mcheck (void (*__abortfunc) (enum mcheck_status)); ++ ++/* Check for aberrations in a particular malloc'd block. You must have ++ called `mcheck' already. These are the same checks that `mcheck' does ++ when you free or reallocate a block. */ ++ extern enum mcheck_status mprobe (__ptr_t __ptr); ++ ++/* Activate a standard collection of tracing hooks. */ ++ extern void mtrace (void); ++ extern void muntrace (void); ++ ++/* Statistics available to the user. */ ++ struct mstats ++ { ++ __malloc_size_t bytes_total; /* Total size of the heap. */ ++ __malloc_size_t chunks_used; /* Chunks allocated by the user. */ ++ __malloc_size_t bytes_used; /* Byte total of user-allocated chunks. */ ++ __malloc_size_t chunks_free; /* Chunks in the free list. */ ++ __malloc_size_t bytes_free; /* Byte total of chunks in the free list. */ ++ }; ++ ++/* Pick up the current statistics. */ ++ extern struct mstats mstats (void); ++ ++/* Call WARNFUN with a warning message when memory usage is high. */ ++ extern void memory_warnings (__ptr_t __start, ++ void (*__warnfun) (const char *)); ++ ++ ++/* Relocating allocator. */ ++ ++/* Allocate SIZE bytes, and store the address in *HANDLEPTR. */ ++ extern __ptr_t r_alloc (__ptr_t * __handleptr, size_t __size); ++ ++/* Free the storage allocated in HANDLEPTR. */ ++ extern void r_alloc_free (__ptr_t * __handleptr); ++ ++/* Adjust the block at HANDLEPTR to be SIZE bytes long. */ ++ extern __ptr_t r_re_alloc (__ptr_t * __handleptr, size_t __size); ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* malloc.h */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mcheck.c gcc-4.0.2/gcc/bounds/lib/mcheck.c +--- gcc-4.0.2.org/gcc/bounds/lib/mcheck.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mcheck.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,213 @@ ++/* Standard debugging hooks for `malloc'. ++ Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#include <stdio.h> ++#endif ++ ++/* Old hook values. */ ++static void (*old_free_hook) (__ptr_t ptr); ++static __ptr_t (*old_malloc_hook) (__malloc_size_t size); ++static __ptr_t (*old_realloc_hook) (__ptr_t ptr, __malloc_size_t size); ++ ++/* Function to call when something awful happens. */ ++static void (*abortfunc) (enum mcheck_status); ++ ++/* Arbitrary magical numbers. */ ++#define MAGICWORD 0xfedabeeb ++#define MAGICFREE 0xd8675309 ++#define MAGICBYTE ((char) 0xd7) ++#define MALLOCFLOOD ((char) 0x93) ++#define FREEFLOOD ((char) 0x95) ++ ++struct hdr ++{ ++ __malloc_size_t size; /* Exact size requested by user. */ ++ unsigned long int magic; /* Magic number to check header integrity. */ ++}; ++ ++#if defined(_LIBC) || defined(STDC_HEADERS) || defined(USG) ++#define flood __bounds_memset ++#else ++static void flood (__ptr_t, int, __malloc_size_t); ++ ++static void ++flood (__ptr_t ptr, int val, __malloc_size_t size) ++{ ++ char *cp = ptr; ++ while (size--) ++ *cp++ = val; ++} ++#endif ++ ++static enum mcheck_status checkhdr (const struct hdr *); ++ ++static enum mcheck_status ++checkhdr (const struct hdr *hdr) ++{ ++ enum mcheck_status status; ++ switch (hdr->magic) ++ { ++ default: ++ status = MCHECK_HEAD; ++ break; ++ case MAGICFREE: ++ status = MCHECK_FREE; ++ break; ++ case MAGICWORD: ++ if (((char *) &hdr[1])[hdr->size] != MAGICBYTE) ++ status = MCHECK_TAIL; ++ else ++ status = MCHECK_OK; ++ break; ++ } ++ if (status != MCHECK_OK) ++ (*abortfunc) (status); ++ return status; ++} ++ ++static void freehook (__ptr_t); ++ ++static void ++freehook (__ptr_t ptr) ++{ ++ struct hdr *hdr = ((struct hdr *) ptr) - 1; ++ checkhdr (hdr); ++ hdr->magic = MAGICFREE; ++ flood (ptr, FREEFLOOD, hdr->size); ++ __free_hook = old_free_hook; ++ __bounds_free (hdr); ++ __free_hook = freehook; ++} ++ ++static __ptr_t mallochook (__malloc_size_t); ++ ++static __ptr_t ++mallochook (__malloc_size_t size) ++{ ++ struct hdr *hdr; ++ ++ __malloc_hook = old_malloc_hook; ++ hdr = (struct hdr *) __bounds_malloc (sizeof (struct hdr) + size + 1); ++ __malloc_hook = mallochook; ++ if (hdr == NULL) ++ return NULL; ++ ++ hdr->size = size; ++ hdr->magic = MAGICWORD; ++ ((char *) &hdr[1])[size] = MAGICBYTE; ++ flood ((__ptr_t) (hdr + 1), MALLOCFLOOD, size); ++ return (__ptr_t) (hdr + 1); ++} ++ ++static __ptr_t reallochook (__ptr_t, __malloc_size_t); ++ ++static __ptr_t ++reallochook (__ptr_t ptr, __malloc_size_t size) ++{ ++ struct hdr *hdr = ((struct hdr *) ptr) - 1; ++ __malloc_size_t osize = hdr->size; ++ ++ checkhdr (hdr); ++ if (size < osize) ++ flood ((char *) ptr + size, FREEFLOOD, osize - size); ++ __free_hook = old_free_hook; ++ __malloc_hook = old_malloc_hook; ++ __realloc_hook = old_realloc_hook; ++ hdr = ++ (struct hdr *) __bounds_realloc ((__ptr_t) hdr, ++ sizeof (struct hdr) + size + 1); ++ __free_hook = freehook; ++ __malloc_hook = mallochook; ++ __realloc_hook = reallochook; ++ if (hdr == NULL) ++ return NULL; ++ ++ hdr->size = size; ++ hdr->magic = MAGICWORD; ++ ((char *) &hdr[1])[size] = MAGICBYTE; ++ if (size > osize) ++ flood ((char *) (hdr + 1) + osize, MALLOCFLOOD, size - osize); ++ return (__ptr_t) (hdr + 1); ++} ++ ++static void ++mabort (enum mcheck_status status) ++{ ++ const char *msg; ++ switch (status) ++ { ++ case MCHECK_OK: ++ msg = "memory is consistent, library is buggy"; ++ break; ++ case MCHECK_HEAD: ++ msg = "memory clobbered before allocated block"; ++ break; ++ case MCHECK_TAIL: ++ msg = "memory clobbered past end of allocated block"; ++ break; ++ case MCHECK_FREE: ++ msg = "block freed twice"; ++ break; ++ default: ++ msg = "bogus mcheck_status, library is buggy"; ++ break; ++ } ++#if 0 && defined(__GNU_LIBRARY__) ++ __libc_fatal (msg); ++#else ++ printf ("mcheck: %s\n", msg); ++ abort (); ++#endif ++} ++ ++static int mcheck_used = 0; ++ ++int ++mcheck (void (*func) (enum mcheck_status)) ++{ ++ abortfunc = (func != NULL) ? func : &mabort; ++ ++ /* These hooks may not be safely inserted if malloc is already in use. */ ++ if (!__malloc_initialized && !mcheck_used) ++ { ++ old_free_hook = __free_hook; ++ __free_hook = freehook; ++ old_malloc_hook = __malloc_hook; ++ __malloc_hook = mallochook; ++ old_realloc_hook = __realloc_hook; ++ __realloc_hook = reallochook; ++ mcheck_used = 1; ++ } ++ ++ return mcheck_used ? 0 : -1; ++} ++ ++enum mcheck_status ++mprobe (__ptr_t ptr) ++{ ++ return mcheck_used ? checkhdr (ptr) : MCHECK_DISABLED; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mcheck-init.c gcc-4.0.2/gcc/bounds/lib/mcheck-init.c +--- gcc-4.0.2.org/gcc/bounds/lib/mcheck-init.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mcheck-init.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* Copyright (C) 1991 Free Software Foundation, Inc. ++This file is part of the GNU C Library. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++/* The object of this file should be installed as libmcheck.a, ++ so one can do -lmcheck to turn on mcheck. */ ++ ++#ifdef HAVE_GNU_LD ++ ++#include <ansidecl.h> ++#include <malloc.h> ++#include <gnu-stabs.h> ++ ++static void ++DEFUN_VOID (turn_on_mcheck) ++{ ++ mcheck (NULL); ++} ++ ++text_set_element (__libc_subinit, turn_on_mcheck); ++ ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/memalign.c gcc-4.0.2/gcc/bounds/lib/memalign.c +--- gcc-4.0.2.org/gcc/bounds/lib/memalign.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/memalign.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++__ptr_t ++__bounds_memalign (__malloc_size_t alignment, __malloc_size_t size) ++{ ++ __ptr_t result; ++ unsigned long int adj; ++ ++ size = ((size + alignment - 1) / alignment) * alignment; ++ ++ result = __bounds_malloc (size); ++ if (result == NULL) ++ return NULL; ++ adj = (unsigned long int) ((unsigned long int) ((char *) result - ++ (char *) NULL)) % alignment; ++ if (adj != 0) ++ { ++ struct alignlist *l; ++ for (l = _aligned_blocks; l != NULL; l = l->next) ++ if (l->aligned == NULL) ++ /* This slot is free. Use it. */ ++ break; ++ if (l == NULL) ++ { ++ l = ++ (struct alignlist *) __bounds_malloc (sizeof (struct alignlist)); ++ if (l == NULL) ++ { ++ __bounds_free (result); ++ return NULL; ++ } ++ l->next = _aligned_blocks; ++ _aligned_blocks = l; ++ } ++ l->exact = result; ++ result = l->aligned = (char *) result + alignment - adj; ++ } ++ ++ return result; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mem-limits.h gcc-4.0.2/gcc/bounds/lib/mem-limits.h +--- gcc-4.0.2.org/gcc/bounds/lib/mem-limits.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mem-limits.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,193 @@ ++/* Includes for memory limit warnings. ++ Copyright (C) 1990, 1993, 1994 Free Software Foundation, Inc. ++ ++ ++This file is part of the GNU C Library. Its master source is NOT part of ++the C library, however. The master source lives in /gd/gnu/lib. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++#ifdef MSDOS ++#include <dpmi.h> ++#endif ++ ++/* Some systems need this before <sys/resource.h>. */ ++#include <sys/types.h> ++ ++#ifdef _LIBC ++ ++#include <sys/resource.h> ++#define BSD4_2 /* Tell code below to use getrlimit. */ ++ ++#else ++ ++#if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha)) ++#include <sys/time.h> ++#include <sys/resource.h> ++#endif ++ ++#ifdef __bsdi__ ++#define BSD4_2 ++#endif ++ ++#if defined(__FreeBSD__) && !defined(BSD4_2) ++#define BSD4_2 ++#ifdef USG ++#undef USG ++#endif ++#endif ++ ++#ifndef BSD4_2 ++#ifndef USG ++#ifndef MSDOS ++#ifndef WINDOWSNT ++#include <sys/vlimit.h> ++#endif /* not WINDOWSNT */ ++#endif /* not MSDOS */ ++#endif /* not USG */ ++#else /* if BSD4_2 */ ++#include <sys/time.h> ++#include <sys/resource.h> ++#endif /* BSD4_2 */ ++ ++#endif /* _LIBC */ ++ ++#ifdef emacs ++/* The important properties of this type are that 1) it's a pointer, and ++ 2) arithmetic on it should work as if the size of the object pointed ++ to has a size of 1. */ ++#ifdef __STDC__ ++typedef void *POINTER; ++#else ++typedef char *POINTER; ++#endif ++ ++typedef unsigned long SIZE; ++ ++#ifdef NULL ++#undef NULL ++#endif ++#define NULL ((POINTER) 0) ++ ++extern POINTER start_of_data (); ++#ifdef DATA_SEG_BITS ++#define EXCEEDS_LISP_PTR(ptr) \ ++ (((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS) ++#else ++#define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS) ++#endif ++ ++#ifdef BSD ++#ifndef DATA_SEG_BITS ++extern char etext; ++#define start_of_data() &etext ++#endif ++#endif ++ ++#else /* Not emacs */ ++extern char etext; ++#define start_of_data() &etext ++#endif /* Not emacs */ ++ ++#ifdef __vxworks ++#define NO_LIM_DATA ++#endif ++ ++/* start of data space; can be changed by calling malloc_init */ ++static POINTER data_space_start; ++ ++/* Number of bytes of writable memory we can expect to be able to get */ ++static unsigned int lim_data; ++ ++#ifdef NO_LIM_DATA ++static void ++get_lim_data () ++{ ++ lim_data = -1; ++} ++#else /* not NO_LIM_DATA */ ++ ++#ifdef USG ++ ++static void ++get_lim_data (void) ++{ ++ extern long ulimit (int, long); ++ ++ lim_data = -1; ++ ++ /* Use the ulimit call, if we seem to have it. */ ++#if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX) ++ lim_data = ulimit (3, 0); ++#endif ++ ++ /* If that didn't work, just use the macro's value. */ ++#ifdef ULIMIT_BREAK_VALUE ++ if (lim_data == -1) ++ lim_data = ULIMIT_BREAK_VALUE; ++#endif ++ ++ lim_data -= (long) data_space_start; ++} ++ ++#else /* not USG */ ++#ifdef WINDOWSNT ++ ++static void ++get_lim_data () ++{ ++ extern unsigned long data_region_size; ++ lim_data = data_region_size; ++} ++ ++#else ++#if !defined (BSD4_2) && !defined (__osf__) ++ ++#ifdef MSDOS ++void ++get_lim_data () ++{ ++ _go32_dpmi_meminfo info; ++ ++ _go32_dpmi_get_free_memory_information (&info); ++ lim_data = info.available_memory; ++} ++#else /* not MSDOS */ ++static void ++get_lim_data () ++{ ++ lim_data = vlimit (LIM_DATA, -1); ++} ++#endif /* not MSDOS */ ++ ++#else /* BSD4_2 */ ++ ++static void ++get_lim_data () ++{ ++ struct rlimit XXrlimit; ++ ++ getrlimit (RLIMIT_DATA, &XXrlimit); ++#ifdef RLIM_INFINITY ++ lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */ ++#else ++ lim_data = XXrlimit.rlim_cur; /* soft limit */ ++#endif ++} ++#endif /* BSD4_2 */ ++#endif /* not WINDOWSNT */ ++#endif /* not USG */ ++#endif /* not NO_LIM_DATA */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mmap.c gcc-4.0.2/gcc/bounds/lib/mmap.c +--- gcc-4.0.2.org/gcc/bounds/lib/mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mmap.c 2005-09-29 18:00:27.000000000 +0200 +@@ -0,0 +1,74 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/malloc/mmap.c ++ Summary: ++ Bounds checking interface to the GNU C malloc library. The GNU ++ malloc has been modified to provide the unchecked functions ++ like '__bounds_malloc' directly. We provide the checked versions ++ (eg. 'mmap') here. ++ Other notes: ++ ++ Author Date Notes ++ HtB 1/7/99 Initial implementation. ++*/ ++ ++#include <stddef.h> ++#include <unistd.h> ++#include <sys/types.h> ++#include "bounds-lib.h" ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++ ++void *mmap (void *start, size_t size, int prot, ++ int flags, int fd, off_t offset); ++int munmap (void *start, size_t size); ++ ++void * ++__bounds_check_mmap (const char *filename, int line, ++ void *start, size_t size, int prot, ++ int flags, int fd, off_t offset) ++{ ++ void *result; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ result = mmap (start, size, prot, flags, fd, offset); ++ if (__bounds_check_mmap_calls && result != (void *) -1) ++ __bounds_add_heap_object (result, size, 1, "mmap", 1, filename, line); ++ leave_critical_section (&old_mask); ++ ++ return result; ++} ++ ++int ++__bounds_check_munmap (const char *filename, int line, void *start, ++ size_t size) ++{ ++ int result; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ result = munmap (start, size); ++ if (__bounds_check_mmap_calls && result == 0) ++ __bounds_delete_heap_object (start, size, ++ "invalid pointer passed to `munmap'", ++ filename, line, NULL); ++ leave_critical_section (&old_mask); ++ ++ return result; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/morecore.c gcc-4.0.2/gcc/bounds/lib/morecore.c +--- gcc-4.0.2.org/gcc/bounds/lib/morecore.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/morecore.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,140 @@ ++/* Default implementation of `morecore'. Only use this if you lack ++ * `__default_morecore' in your C library. ++ * Written By Richard W.M. Jones <rjones@orchestream.com> ++ * ++ * Further notes (21/8/95): ++ * Lots more people than I anticipated don't have `__default_morecore' ++ * so this file has caused a bit of trouble. So I'll explain here what ++ * this does so I don't have to tell 100s of people the same thing ++ * separately. Basically, `__default_morecore' is required by GNU ++ * malloc to grab large chunks of memory from the OS. There are two ++ * ways of doing this in modern Unix systems. The original way was ++ * to extend the data area by calling `sbrk'. However, what with DLLs ++ * and advanced memory mapping, this method has generally been super- ++ * ceeded by making direct calls to `mmap' which gives a lot more ++ * control over where in the address space the new memory is placed. ++ * Now, there are two versions of `__default_morecore' here. The first ++ * (for Linux, etc.) is the `mmap' version. I recommend you try ++ * this first. If it doesn't work, use the second version (for ++ * Suns, SVR-4, etc.). If you get a particular machine to work with ++ * one or other version, then can you send me patches to this file to ++ * support the project for other users. ++ * ++ * Even more notes (12/1/96): ++ * As suggested by Eberhard Mattes <mattes@ ++ * azu.informatik.uni-stuttgart.de>, I have added HAVE_MMAP and ++ * HAVE_DEFAULT_MORECORE symbols at the top of the file, to make it easier ++ * to fix this. ++ * -> If you have `__default_morecore' in your C library already, set ++ * HAVE_DEFAULT_MORECORE. ++ * -> If you have `mmap' (most modern Unix machines do), set HAVE_MMAP. ++ */ ++ ++#include "malloc.h" ++#include "bounds-lib.h" ++ ++#if defined(linux) || defined(hpux) ++#define HAVE_MMAP ++#undef HAVE_DEFAULT_MORECORE ++#endif ++ ++#if defined(sun) || defined (__svr4__) || defined (_AIX) || defined (__osf__) || defined (ultrix) || defined (__EMX__) ++#undef HAVE_MMAP ++#undef HAVE_DEFAULT_MORECORE ++#endif ++ ++#ifdef __vxworks ++ ++void * ++__default_morecore (ptrdiff_t incr) ++{ ++ void *ptr = malloc (incr); ++ if (ptr == (void *) -1) ++ return NULL; ++ else ++ return ptr; ++} ++ ++#else ++ ++#if !defined(HAVE_DEFAULT_MORECORE) ++ ++#if defined(HAVE_MMAP) ++ ++/* Note: `sbrk' doesn't seem to work properly under Linux. For some reason ++ * it returns ENOMEM more often than it should. I'm using mmap/munmap here ++ * which is (supposedly) faster anyhow. ++ */ ++ ++#include <stddef.h> ++#include <unistd.h> ++#include <sys/types.h> ++#include <sys/mman.h> ++#include "getpagesize.h" ++ ++#define PERMISSIONS (PROT_READ | PROT_WRITE) ++#define MAPPING_TYPE (MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS) ++ ++void * ++__default_morecore (ptrdiff_t incr) ++{ ++ static void *address = NULL; ++ ++ if (address == NULL) ++ { ++ unsigned pagesize = getpagesize (); ++ ++ address = sbrk (0); ++ if (address == NULL) ++ return NULL; ++ ++ /* Address may not be aligned to a page. Make it so. `malloc' seems ++ * to only ask for multiples of whole pages so it should remain ++ * aligned after this. ++ */ ++ if (((unsigned) address & (pagesize - 1)) != 0) ++ address += pagesize - ((unsigned) address & (pagesize - 1)); ++ } ++ if (incr == 0) ++ return address; ++ if (incr < 0) /* Allow the heap to shrink by unmapping memory. */ ++ { ++ address += incr; ++ munmap (address, -incr); ++ return address; ++ } ++ if (mmap (address, incr, PERMISSIONS, MAPPING_TYPE, -1, 0) != address) ++ return NULL; ++ address += incr; ++ return address - incr; ++} ++ ++#else /* Not HAVE_MMAP */ ++ ++/* This is the sbrk version of __default_morecore for use on Suns ++ * and other machines. ++ */ ++ ++#include <stddef.h> ++#include <sys/types.h> ++#include <unistd.h> ++ ++#if defined (sun) || defined (_AIX) ++void *sbrk (ptrdiff_t); ++#endif ++ ++void * ++__default_morecore (ptrdiff_t incr) ++{ ++ void *ptr = sbrk (incr); ++ if (ptr == (void *) -1) ++ return NULL; ++ else ++ return ptr; ++} ++ ++#endif /* Not HAVE_MMAP */ ++ ++#endif /* Not HAVE_DEFAULT_MORECORE */ ++ ++#endif /* __vxworks */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mstats.c gcc-4.0.2/gcc/bounds/lib/mstats.c +--- gcc-4.0.2.org/gcc/bounds/lib/mstats.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mstats.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,41 @@ ++/* Access the statistics maintained by `malloc'. ++ Copyright 1990, 1991, 1992 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++struct mstats ++mstats (void) ++{ ++ struct mstats result; ++ ++ result.bytes_total = (char *) (*__morecore) (0) - _heapbase; ++ result.chunks_used = _chunks_used; ++ result.bytes_used = _bytes_used; ++ result.chunks_free = _chunks_free; ++ result.bytes_free = _bytes_free; ++ return result; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mtrace.awk gcc-4.0.2/gcc/bounds/lib/mtrace.awk +--- gcc-4.0.2.org/gcc/bounds/lib/mtrace.awk 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mtrace.awk 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,50 @@ ++# ++# Awk program to analyze mtrace.c output. ++# ++{ ++ if ($1 == "@") { ++ where = " (" $2 ")" ++ n = 3 ++ } else { ++ where = "" ++ n = 1 ++ } ++ if ($n == "+") { ++ if (allocated[$(n+1)] != "") ++ print "+", $(n+1), "Alloc", NR, "duplicate:", allocated[$(n+1)], wherewas[$(n+1)], where; ++ else { ++ wherewas[$(n+1)] = where; ++ allocated[$(n+1)] = $(n+2); ++ } ++ } else if ($n == "-") { ++ if (allocated[$(n+1)] != "") { ++ wherewas[$(n+1)] = ""; ++ allocated[$(n+1)] = ""; ++ if (allocated[$(n+1)] != "") ++ print "DELETE FAILED", $(n+1), allocated[$(n+1)]; ++ } else ++ print "-", $(n+1), "Free", NR, "was never alloc'd", where; ++ } else if ($n == "<") { ++ if (allocated[$(n+1)] != "") { ++ wherewas[$(n+1)] = ""; ++ allocated[$(n+1)] = ""; ++ } else ++ print "-", $(n+1), "Realloc", NR, "was never alloc'd", where; ++ } else if ($n == ">") { ++ if (allocated[$(n+1)] != "") ++ print "+", $(n+1), "Realloc", NR, "duplicate:", allocated[$(n+1)], where; ++ else { ++ wherewas[$(n+1)] = $(n+2); ++ allocated[$(n+1)] = $(n+2); ++ } ++ } else if ($n == "=") { ++ # Ignore "= Start" ++ } else if ($n == "!") { ++ # Ignore failed realloc attempts for now ++ } ++} ++END { ++ for (x in allocated) ++ if (allocated[x] != "") ++ print "+", x, allocated[x], wherewas[x]; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mtrace.c gcc-4.0.2/gcc/bounds/lib/mtrace.c +--- gcc-4.0.2.org/gcc/bounds/lib/mtrace.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mtrace.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,189 @@ ++/* More debugging hooks for `malloc'. ++ Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ Written April 2, 1991 by John Gilmore of Cygnus Support. ++ Based on mcheck.c by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include <stdio.h> ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++#ifndef __GNU_LIBRARY__ ++extern char *getenv (const char *); ++#else ++#include <stdlib.h> ++#endif ++ ++static FILE *mallstream; ++static char mallenv[] = "MALLOC_TRACE"; ++static char mallbuf[BUFSIZ]; /* Buffer for the output. */ ++ ++/* Address to breakpoint on accesses to... */ ++__ptr_t mallwatch; ++ ++/* File name and line number information, for callers that had ++ the foresight to call through a macro. */ ++char *_mtrace_file; ++int _mtrace_line; ++ ++/* Old hook values. */ ++static void (*tr_old_free_hook) (__ptr_t ptr); ++static __ptr_t (*tr_old_malloc_hook) (__malloc_size_t size); ++static __ptr_t (*tr_old_realloc_hook) (__ptr_t ptr, __malloc_size_t size); ++ ++/* This function is called when the block being alloc'd, realloc'd, or ++ freed has an address matching the variable "mallwatch". In a debugger, ++ set "mallwatch" to the address of interest, then put a breakpoint on ++ tr_break. */ ++ ++void tr_break (void); ++ ++void ++tr_break (void) ++{ ++} ++ ++static void tr_where (void); ++static void ++tr_where (void) ++{ ++ if (_mtrace_file) ++ { ++ fprintf (mallstream, "@ %s:%d ", _mtrace_file, _mtrace_line); ++ _mtrace_file = NULL; ++ } ++} ++ ++static void tr_freehook (__ptr_t); ++ ++static void ++tr_freehook (__ptr_t ptr) ++{ ++ tr_where (); ++ fprintf (mallstream, "- %p\n", ptr); /* Be sure to print it first. */ ++ if (ptr == mallwatch) ++ tr_break (); ++ __free_hook = tr_old_free_hook; ++ __bounds_free (ptr); ++ __free_hook = tr_freehook; ++} ++ ++static __ptr_t tr_mallochook (__malloc_size_t); ++ ++static __ptr_t ++tr_mallochook (__malloc_size_t size) ++{ ++ __ptr_t hdr; ++ ++ __malloc_hook = tr_old_malloc_hook; ++ hdr = (__ptr_t) __bounds_malloc (size); ++ __malloc_hook = tr_mallochook; ++ ++ tr_where (); ++ /* We could be printing a NULL here; that's OK. */ ++ fprintf (mallstream, "+ %p %lx\n", hdr, (unsigned long) size); ++ ++ if (hdr == mallwatch) ++ tr_break (); ++ ++ return hdr; ++} ++ ++static __ptr_t tr_reallochook (__ptr_t, __malloc_size_t); ++ ++static __ptr_t ++tr_reallochook (__ptr_t ptr, __malloc_size_t size) ++{ ++ __ptr_t hdr; ++ ++ if (ptr == mallwatch) ++ tr_break (); ++ ++ __free_hook = tr_old_free_hook; ++ __malloc_hook = tr_old_malloc_hook; ++ __realloc_hook = tr_old_realloc_hook; ++ hdr = (__ptr_t) __bounds_realloc (ptr, size); ++ __free_hook = tr_freehook; ++ __malloc_hook = tr_mallochook; ++ __realloc_hook = tr_reallochook; ++ tr_where (); ++ if (hdr == NULL) ++ /* Failed realloc. */ ++ fprintf (mallstream, "! %p %lx\n", ptr, (unsigned long) size); ++ else ++ fprintf (mallstream, "< %p\n> %p %lx\n", ptr, hdr, (unsigned long) size); ++ ++ if (hdr == mallwatch) ++ tr_break (); ++ ++ return hdr; ++} ++ ++/* We enable tracing if either the environment variable MALLOC_TRACE ++ is set, or if the variable mallwatch has been patched to an address ++ that the debugging user wants us to stop on. When patching mallwatch, ++ don't forget to set a breakpoint on tr_break! */ ++ ++void ++mtrace (void) ++{ ++ char *mallfile; ++ ++ /* Don't panic if we're called more than once. */ ++ if (mallstream != NULL) ++ return; ++ ++ mallfile = getenv (mallenv); ++ if (mallfile != NULL || mallwatch != NULL) ++ { ++ mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "w"); ++ if (mallstream != NULL) ++ { ++ /* Be sure it doesn't malloc its buffer! */ ++ setbuf (mallstream, mallbuf); ++ fprintf (mallstream, "= Start\n"); ++ tr_old_free_hook = __free_hook; ++ __free_hook = tr_freehook; ++ tr_old_malloc_hook = __malloc_hook; ++ __malloc_hook = tr_mallochook; ++ tr_old_realloc_hook = __realloc_hook; ++ __realloc_hook = tr_reallochook; ++ } ++ } ++} ++ ++void ++muntrace (void) ++{ ++ if (mallstream == NULL) ++ return; ++ ++ fprintf (mallstream, "= End\n"); ++ fclose (mallstream); ++ mallstream = NULL; ++ __free_hook = tr_old_free_hook; ++ __malloc_hook = tr_old_malloc_hook; ++ __realloc_hook = tr_old_realloc_hook; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/mutex.h gcc-4.0.2/gcc/bounds/lib/mutex.h +--- gcc-4.0.2.org/gcc/bounds/lib/mutex.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/mutex.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,74 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/mutex.h ++ Summary: ++ These functions provide mutual exclusion between signal handlers, ++ and (in the future) threads when we update critical global data ++ such as the object tree. ++ Other notes: ++ You may need to fiddle around here to get round operating system ++ dependencies, and also if you want to add support for threads. ++ The overhead of providing mutual exclusion is so large that I've ++ decided to turn it off by default. It requires two signal calls ++ every time you enter the bounds checking library (at least two). ++ Author Date Notes ++ RWMJ 15/3/95 Initial implementation. ++*/ ++ ++#ifndef _MUTEX_H_ ++#define _MUTEX_H_ ++ ++#include <signal.h> ++ ++extern void (*__bounds_mutex_start) (void); ++extern void (*__bounds_mutex_end) (void); ++extern int __bounds_mutex_signal; ++extern sigset_t __bounds_new_mask; ++ ++/* The following function is called whenever we enter a critical section of ++ code. */ ++ ++static __inline__ void ++enter_critical_section (sigset_t * old_mask) ++{ ++ /* This is Sys V signal handling. BSD signal handling is different, so ++ someone needs to fix that. */ ++ if (__bounds_mutex_signal) ++ /* Block all signals. */ ++ sigprocmask (SIG_BLOCK, &__bounds_new_mask, old_mask); ++ if (__bounds_mutex_start) ++ (*__bounds_mutex_start) (); ++} ++ ++/* The following function is called whenever we leave a critical section. */ ++ ++static __inline__ void ++leave_critical_section (sigset_t * old_mask) ++{ ++ if (__bounds_mutex_end) ++ (*__bounds_mutex_end) (); ++ ++ /* This is Sys V signal handling. BSD signal handling is different, so ++ someone needs to fix that. */ ++ if (__bounds_mutex_signal) ++ sigprocmask (SIG_SETMASK, old_mask, NULL); ++ ++} ++ ++#endif /* _MUTEX_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/objects.c gcc-4.0.2/gcc/bounds/lib/objects.c +--- gcc-4.0.2.org/gcc/bounds/lib/objects.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/objects.c 2005-09-29 20:00:56.000000000 +0200 +@@ -0,0 +1,2388 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/objects.c ++ Summary: ++ Manage a list of memory objects. Allow the object that a pointer ++ points to to be determined. ++ Other notes: ++ The list of memory objects is stored as a binary tree. Clearly, we ++ need to be able to allocate and free parts of this tree but without ++ causing recursion. So, separate functions __bounds_malloc and ++ __bounds_free are implemented in `lib/malloc.c' for this. ++ Author Date Notes ++ RWMJ 5/12/94 Initial implementation. ++ RWMJ 23/1/95 Now using separate trees for static, etc. ++ RWMJ 9/2/95 Added splay trees. Removed hash table. ++ RWMJ 12/2/95 Put all the objects into a single tree. ++ RWMJ 15/3/95 Enter/leave critical section code. ++ RWMJ 4/4/95 `new_object' doesn't call `memset'. ++ RWMJ 25/4/95 Cache code added and removed! ++ RWMJ 27/5/95 Code to collect locality stats. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++ ++#include "bounds-lib.h" ++ ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++#include "functions.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++#if OBJECT_CLASS ++#if OBJECT_COUNT_CLASS ++#define OBJECT_STATISTIC(r) if (r) object_class[(r)->sclass]++ ++#else ++#define OBJECT_STATISTIC(r) ++#endif ++#define LOOKUP_OBJECT(f,r,p) \ ++ do { \ ++ if ((p) >= heap_object_tree.min \ ++ && (p) <= heap_object_tree.max) \ ++ { \ ++ (r) = (f) (&heap_object_tree, (p)); \ ++ if (r) \ ++ goto object_found; \ ++ } \ ++ if ((p) >= static_object_tree.min \ ++ && (p) <= static_object_tree.max) \ ++ { \ ++ (r) = (f) (&static_object_tree, (p)); \ ++ if (r) \ ++ goto object_found; \ ++ } \ ++ if ((p) >= stack_object_tree.min \ ++ && (p) <= stack_object_tree.max) \ ++ { \ ++ (r) = (f) (&stack_object_tree, (p)); \ ++ if (r) \ ++ goto object_found; \ ++ } \ ++ if ((p) >= extern_object_tree.min \ ++ && (p) <= extern_object_tree.max) \ ++ { \ ++ (r) = (f) (&extern_object_tree, (p)); \ ++ if (r) \ ++ goto object_found; \ ++ } \ ++ (r) = NULL; \ ++object_found: \ ++ OBJECT_STATISTIC(r); \ ++ } while (0) ++#else ++#define LOOKUP_OBJECT(f,r,p) \ ++ (r) = (f) (&object_tree, (p)); ++#endif ++ ++#if SPLAY_COUNT_STAT ++#define MAX_STEPS 256 ++ ++static unsigned max_steps = 0; ++static unsigned max_no_steps = 0; ++static unsigned max_splay = 0; ++static unsigned *hits = NULL; ++static unsigned *no_hits = NULL; ++static unsigned *splay = NULL; ++#endif ++ ++#if OBJECT_CLASS ++static tree hist_object = { NULL, NULL, NULL }; ++#if OBJECT_COUNT_CLASS ++static unsigned object_class[4] = { 0, 0, 0, 0 }; ++#endif ++#else ++static tree hist_object = { NULL }; ++#endif ++ ++/* Allocate/free object structures. */ ++ ++static __inline__ object * ++new_object (void) ++{ ++ object *p; ++ ++ /* check if a object is in the hist_object list. */ ++ if (hist_object.root) ++ { ++ p = hist_object.root; ++ hist_object.root = p->left; ++ return (p); ++ } ++ p = __bounds_malloc (sizeof (struct object)); ++ if (!p) ++ __bounds_internal_error ("out of memory allocating object structure", ++ __FILE__, __LINE__); ++ /* The following call to `memset' resulted in considerable overhead. I've ++ altered all the calls to new_object so that clearing this area is no ++ longer necessary. Be careful when you add or change the contents of ++ the object structure. */ ++ /* __bounds_memset (p, 0, sizeof (struct object)); */ ++ return p; ++} ++ ++static __inline__ void ++free_object (object * p) ++{ ++ /* never realy free object. Put it in the hist_object list. */ ++#if 0 ++ __bounds_free (p); ++#else ++ p->left = hist_object.root; ++ hist_object.root = p; ++#endif ++} ++ ++/* This is the splay tree used to keep track of memory locations. ++ The root node is called `root'. If it is non-NULL, then the ++ tree is arranged as in the following example: ++ root ----> [100..199] ++ / \ ++ [75..90] [200..299] ++ / ++ [0..74] ++ This represents the following memory usage: ++ [0..74] Allocated ++ [75..90] Allocated ++ [91..99] Free ++ [100..199] Allocated ++ [200..299] Allocated ++ In general, that is, objects at lower addresses go on the left ++ side of the tree. The inline function `tree_lookup' turns a memory ++ location into the correct object pointer. The inline function ++ `tree_add' inserts a new object into the tree. The inline function ++ `tree_del' deletes an object from the tree. */ ++ ++#if OBJECT_CLASS ++static tree static_object_tree = { NULL, NULL, NULL }; ++static tree extern_object_tree = { NULL, NULL, NULL }; ++static tree stack_object_tree = { NULL, NULL, NULL }; ++static tree heap_object_tree = { NULL, NULL, NULL }; ++#else ++static tree object_tree = { NULL }; ++#endif ++ ++#if SPLAY_COUNT_OPERATIONS ++ ++/* Keep track of the number of operations performed, so we can work out if ++ we are successfully doing O(log n) work. */ ++static unsigned add_operations = 0; /* Calls to tree_add. */ ++static unsigned look_up_operations = 0; /* Calls to tree_lookup (_base). */ ++static unsigned look_up_steps = 0; /* Steps taken in the above. */ ++static unsigned nlook_up_operations = 0; /* Failed calls to tree_lookup*. */ ++static unsigned nlook_up_steps = 0; /* Steps taken in the above. */ ++static unsigned del_operations = 0; /* Calls to tree_del. */ ++ ++/* We break down calls to `tree_splay' according to where they come ++ from. */ ++static unsigned splay_look_up_operations = 0; ++static unsigned splay_look_up_steps = 0; ++static unsigned splay_add_operations = 0; ++static unsigned splay_add_steps = 0; ++static unsigned splay_del_operations = 0; ++static unsigned splay_del_steps = 0; ++ ++/* The following variables tell where we are coming from in tree_splay. */ ++static unsigned *splay_operations; ++static unsigned *splay_steps; ++ ++/* Place the frequency with which you want dumps here. The tree will be saved ++ after this number of look-up operations. */ ++#define DUMP_EVERY 50000 ++ ++static void tree_dump_statistics (tree *); ++ ++#endif ++ ++/* Operations on splay trees. */ ++ ++#if SPLAY_COUNT_STAT ++ ++/* Calculate the splay statistics. */ ++ ++static __inline__ void ++add_hits (unsigned steps) ++{ ++ if (steps >= max_steps) ++ { ++ unsigned i; ++ unsigned lastmax = max_steps; ++ ++ while (steps >= max_steps) ++ max_steps += MAX_STEPS; ++ if (hits == NULL) ++ hits = __bounds_malloc ((max_steps + 1) * sizeof (unsigned)); ++ else ++ hits = __bounds_realloc (hits, (max_steps + 1) * sizeof (unsigned)); ++ if (hits == NULL) ++ __bounds_internal_error ("out of memory allocating hits data", ++ __FILE__, __LINE__); ++ for (i = lastmax + 1; i <= max_steps; i++) ++ hits[i] = 0; ++ } ++ hits[steps]++; ++} ++ ++static __inline__ void ++add_no_hits (unsigned steps) ++{ ++ if (steps >= max_no_steps) ++ { ++ unsigned i; ++ unsigned lastmax = max_no_steps; ++ ++ while (steps >= max_no_steps) ++ max_no_steps += MAX_STEPS; ++ if (no_hits == NULL) ++ no_hits = __bounds_malloc ((max_no_steps + 1) * sizeof (unsigned)); ++ else ++ no_hits = __bounds_realloc (no_hits, (max_no_steps + 1) ++ * sizeof (unsigned)); ++ if (no_hits == NULL) ++ __bounds_internal_error ("out of memory allocating hits data", ++ __FILE__, __LINE__); ++ for (i = lastmax + 1; i <= max_no_steps; i++) ++ no_hits[i] = 0; ++ } ++ no_hits[steps]++; ++} ++ ++static __inline__ void ++add_splay (unsigned steps) ++{ ++ if (steps >= max_splay) ++ { ++ unsigned i; ++ unsigned lastmax = max_splay; ++ ++ while (steps >= max_splay) ++ max_splay += MAX_STEPS; ++ if (splay == NULL) ++ splay = __bounds_malloc ((max_splay + 1) * sizeof (unsigned)); ++ else ++ splay = __bounds_realloc (splay, (max_splay + 1) * sizeof (unsigned)); ++ if (splay == NULL) ++ __bounds_internal_error ("out of memory allocating hits data", ++ __FILE__, __LINE__); ++ for (i = lastmax + 1; i <= max_splay; i++) ++ splay[i] = 0; ++ } ++ splay[steps]++; ++} ++#endif ++ ++/* SPLAY is the fundamental operation on splay trees. It takes node `n' ++ (assumed to exist within the splay tree) and pulls it up to the root ++ of the tree. The node returned (for convenience) is the root node, which ++ will be `n' and `t->root'. */ ++ ++static __inline__ object * ++tree_splay (tree * t, object * n) ++{ ++#if SPLAY_COUNT_STAT ++ unsigned hits = 0; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ ++(*splay_operations); ++#endif ++ ++ if (t->root != n) ++ for (;;) ++ { ++ object *parent = n->parent, *grandparent = parent->parent; ++ object *obj; ++ ++#if SPLAY_COUNT_OPERATIONS ++ ++(*splay_steps); ++#endif ++#if SPLAY_COUNT_STAT ++ hits++; ++#endif ++ ++ /* Determine which transformation to perform. Each of these ++ transformations will move the node nearer to the root, and ++ has the side effect of making the tree more balanced. */ ++ /* 1a,b. Parent is the root, so perform `zig' rotation. */ ++ if (grandparent == NULL) ++ { ++ if (n->left_of_parent) ++ { ++ obj = n->right; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 1; ++ } ++ parent->left = obj; ++ n->right = parent; ++ n->parent = NULL; ++ n->left_of_parent = parent->left_of_parent; ++ parent->parent = n; ++ parent->left_of_parent = 0; ++ } ++ else ++ { ++ obj = n->left; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 0; ++ } ++ parent->right = obj; ++ n->left = parent; ++ n->parent = NULL; ++ n->left_of_parent = parent->left_of_parent; ++ parent->parent = n; ++ parent->left_of_parent = 1; ++ } ++ t->root = n; ++ break; ++ } ++ /* 2a,b. `n', its parent and grandparent are in a straight line, so ++ perform the `zig-zig' rotation. */ ++ else if (n->left_of_parent == parent->left_of_parent) ++ { ++ if (n->left_of_parent) ++ { ++ obj = n->right; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 1; ++ } ++ parent->left = obj; ++ n->right = grandparent; ++ obj = n->parent = grandparent->parent; ++ n->left_of_parent = grandparent->left_of_parent; ++ grandparent->parent = n; ++ grandparent->left_of_parent = 0; ++ } ++ else ++ { ++ obj = n->left; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 0; ++ } ++ parent->right = obj; ++ n->left = grandparent; ++ obj = n->parent = grandparent->parent; ++ n->left_of_parent = grandparent->left_of_parent; ++ grandparent->parent = n; ++ grandparent->left_of_parent = 1; ++ } ++ if (obj == NULL) ++ { ++ t->root = n; ++ break; ++ } ++ else if (n->left_of_parent) ++ n->parent->left = n; ++ else ++ n->parent->right = n; ++ } ++ /* 3a,b. `n', its parent and grandparent aren't in a straight line, so ++ perform the `zig-zag' rotation. */ ++ else ++ { ++ if (n->left_of_parent) ++ { ++ obj = n->right; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 1; ++ } ++ parent->left = obj; ++ parent->parent = n; ++ parent->left_of_parent = 0; ++ obj = n->left; ++ if (obj) ++ { ++ obj->parent = grandparent; ++ obj->left_of_parent = 0; ++ } ++ grandparent->right = obj; ++ n->right = parent; ++ n->left = grandparent; ++ obj = n->parent = grandparent->parent; ++ n->left_of_parent = grandparent->left_of_parent; ++ grandparent->parent = n; ++ grandparent->left_of_parent = 1; ++ } ++ else ++ { ++ obj = n->left; ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 0; ++ } ++ parent->right = obj; ++ parent->parent = n; ++ parent->left_of_parent = 1; ++ obj = n->right; ++ if (obj) ++ { ++ obj->parent = grandparent; ++ obj->left_of_parent = 1; ++ } ++ grandparent->left = obj; ++ n->left = parent; ++ n->right = grandparent; ++ obj = n->parent = grandparent->parent; ++ n->left_of_parent = grandparent->left_of_parent; ++ grandparent->parent = n; ++ grandparent->left_of_parent = 0; ++ } ++ if (obj == NULL) ++ { ++ t->root = n; ++ break; ++ } ++ else if (n->left_of_parent) ++ n->parent->left = n; ++ else ++ n->parent->right = n; ++ } ++ } ++ ++#if SPLAY_STRICT_CHECKING ++ __bounds_tree_check (t); ++#endif ++#if SPLAY_COUNT_STAT ++ add_splay (hits); ++#endif ++ ++ return n; ++} ++ ++/* Add, look-up and delete operations. All these are done using the ++ fundamental `splay' operation. */ ++ ++ ++/* Print the splay statistics. */ ++ ++void ++__bound_print_statistics (void) ++{ ++#if SPLAY_COUNT_STAT ++ unsigned i; ++ double total1_hits = 0.0; ++ double total1_steps = 0.0; ++ double total2_hits = 0.0; ++ double total2_steps = 0.0; ++ double depth; ++ unsigned n1; ++ unsigned n2; ++ unsigned n3; ++ unsigned max = max_steps > max_no_steps ? max_steps : max_no_steps; ++ ++ printf ("Depth Found Not Found Splay\n"); ++ for (i = 1; i <= max; i++) ++ { ++ n1 = i <= max_steps ? hits[i] : 0; ++ n2 = i <= max_no_steps ? no_hits[i] : 0; ++ n3 = i <= max_splay ? splay[i] : 0; ++ if (n1 || n2 || n3) ++ printf ("%4d %10u %10u %10u\n", i, n1, n2, n3); ++ if (n1) ++ { ++ total1_hits += (double) n1; ++ total1_steps += (double) n1 *(double) i; ++ } ++ if (n2) ++ { ++ total2_hits += (double) n2; ++ total2_steps += (double) n2 *(double) i; ++ } ++ } ++ depth = ++ total1_hits ? ((double) total1_steps * 100.0) / ++ (double) total1_hits : 0.0; ++ n1 = (unsigned) (depth / 100.0); ++ n2 = (unsigned) (depth - 100.0 * (double) n1); ++ printf ("Found %10u. Steps %10u. Average steps hits %4u.%02u\n", ++ (unsigned) total1_hits, (unsigned) total1_steps, n1, n2); ++ depth = ++ total2_hits ? ((double) total2_steps * 100.0) / ++ (double) total2_hits : 0.0; ++ n1 = (unsigned) (depth / 100.0); ++ n2 = (unsigned) (depth - 100.0 * (double) n1); ++ printf ("Not Found %10u. Steps %10u. Average steps no hits %4u.%02u\n", ++ (unsigned) total2_hits, (unsigned) total2_steps, n1, n2); ++#if 0 ++ __bounds_debug_memory (NULL, NULL); ++#endif ++#endif ++#if OBJECT_CLASS ++#if OBJECT_COUNT_CLASS ++ printf("obj_sclass_static %10d (%010p %010p)\n", ++ object_class[obj_sclass_static], ++ static_object_tree.min, ++ static_object_tree.max); ++ printf("obj_sclass_external %10d (%010p %010p)\n", ++ object_class[obj_sclass_external], ++ extern_object_tree.min, ++ extern_object_tree.max); ++ printf("obj_sclass_stack %10d (%010p %010p)\n", ++ object_class[obj_sclass_stack], ++ stack_object_tree.min, ++ stack_object_tree.max); ++ printf("obj_sclass_heap %10d (%010p %010p)\n", ++ object_class[obj_sclass_heap], ++ heap_object_tree.min, ++ heap_object_tree.max); ++#endif ++#endif ++} ++ ++/* Return leftmost object below the current object node. */ ++static __inline__ object * ++leftmost (object * n) ++{ ++ while (n->left) ++ n = n->left; ++ return n; ++} ++ ++/* Look-up a node in the splay tree. Notice that the act of looking up a ++ node changes the tree. (In particular, the node, if found, moves to ++ the root of the tree). Returns the node, or NULL if not found. */ ++static __inline__ object * ++tree_lookup (tree * t, void *ptr) ++{ ++ object *n = t->root; ++ ++#if SPLAY_COUNT_STAT ++ unsigned hits_steps; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ unsigned steps = 0; ++ look_up_operations++; ++ if (look_up_operations == DUMP_EVERY) ++ tree_dump_statistics (t); ++ splay_operations = &splay_look_up_operations; ++ splay_steps = &splay_look_up_steps; ++#endif ++ ++/* Handle the toplevel of the splay tree with this inline code. It it ++ faster than using the while loop and the tree_splay function. ++ If the FAST_UPDATE is set to 0 the tree is not balanced anymore. This ++ is faster than keeping the tree balanced. */ ++#ifdef FAST ++#undef FAST ++#endif ++#define FAST 1 ++#define FAST_UPDATE 0 ++#if FAST ++ if (n) ++ { ++ if (ptr < n->base) ++ { ++ n = n->left; ++ if (n) ++ { ++ if (ptr < n->base) ++ n = n->left; ++ else if (ptr > n->extent) ++ n = n->right; ++ else if (ptr != n->extent) ++ { ++#if FAST_UPDATE ++ object *parent = n->parent; ++ object *obj = n->right; ++ ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 1; ++ } ++ n->right = parent; ++ n->parent = NULL; ++ parent->left = obj; ++ parent->parent = n; ++ parent->left_of_parent = 0; ++ t->root = n; ++#endif ++#if SPLAY_COUNT_STAT ++ add_hits (2); ++ n->hits++; ++ n->steps += 2; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ n->hits++; ++ look_up_steps += 2; ++#endif ++ return n; ++ } ++ } ++ } ++ else if (ptr > n->extent) ++ { ++ n = n->right; ++ if (n) ++ { ++ if (ptr < n->base) ++ n = n->left; ++ else if (ptr > n->extent) ++ n = n->right; ++ else if (ptr != n->extent) ++ { ++#if FAST_UPDATE ++ object *parent = n->parent; ++ object *obj = n->left; ++ ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 0; ++ } ++ n->left = parent; ++ n->parent = NULL; ++ parent->right = obj; ++ parent->parent = n; ++ parent->left_of_parent = 1; ++ t->root = n; ++#endif ++#if SPLAY_COUNT_STAT ++ add_hits (2); ++ n->hits++; ++ n->steps += 2; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ n->hits++; ++ look_up_steps += 2; ++#endif ++ return n; ++ } ++ } ++ } ++ else if (ptr != n->extent) ++ { ++#if SPLAY_COUNT_STAT ++ add_hits (1); ++ n->hits++; ++ n->steps += 1; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ n->hits++; ++ look_up_steps += 1; ++#endif ++ return n; ++ } ++ } ++#endif ++#if SPLAY_COUNT_STAT ++ hits_steps = 2; ++#endif ++ ++ while (n) ++ { ++#if SPLAY_COUNT_STAT ++ hits_steps++; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ steps++; ++#endif ++ ++ if (ptr < n->base) ++ n = n->left; ++ else ++ { ++ /* This is tricky. Normally, a pointer refers to an object if the ++ pointer lies between base and extent inclusively. We add extra ++ padding between checked objects to ensure this is true. However, ++ if we aren't able to add this padding, then the next object may ++ lie immediately after the previous object in memory, ie. extent ++ and the base of the next object may be the same. */ ++ if (ptr > n->extent) ++ n = n->right; ++ else if (ptr == n->extent) ++ { ++ /* This is the tricky boundary condition. Use the hints given. If ++ `no_padding' is 0, there can be no immediate object on the ++ right, so stop the search. If `no_padding' is true, we must ++ look rightwards for the adjacent object, and go that way if the ++ right base == this extent. */ ++ if (n->no_padding == 0) ++ break; ++ if (n->right && leftmost (n->right)->base == n->extent) ++ n = n->right; ++ else ++ { ++ /* if there could be a object next to this one. Do not use the ++ current object. */ ++ n = NULL; ++ break; ++ } ++ } ++ else ++ break; ++ } ++ } ++ ++ if (n) ++ { ++#if SPLAY_COUNT_STAT ++ add_hits (hits_steps); ++ n->hits++; ++ n->steps += hits_steps; ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ n->hits++; ++ look_up_steps += steps; ++#endif ++ return tree_splay (t, n); ++ } ++ else ++ { ++#if SPLAY_COUNT_STAT ++ add_no_hits (hits_steps); ++#endif ++#if SPLAY_COUNT_OPERATIONS ++ nlook_up_steps += steps; ++ nlook_up_operations++; ++#endif ++ return NULL; ++ } ++} ++ ++/* Look-up a node in the splay tree, but only match on an object with an ++ identical base address. */ ++ ++static __inline__ object * ++tree_lookup_base (tree * t, void *base) ++{ ++ object *n = t->root; ++ ++#if SPLAY_COUNT_OPERATIONS ++ int steps = 0; ++ look_up_operations++; ++ if (look_up_operations == DUMP_EVERY) ++ tree_dump_statistics (t); ++ splay_operations = &splay_look_up_operations; ++ splay_steps = &splay_look_up_steps; ++#endif ++#if FAST ++ if (n) ++ { ++ if (base < n->base) ++ { ++ n = n->left; ++ if (n) ++ { ++ if (base < n->base) ++ n = n->left; ++ else if (base >= n->extent) ++ n = n->right; ++ else if (base == n->base) ++ { ++#if FAST_UPDATE ++ object *parent = n->parent; ++ object *obj = n->right; ++ ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 1; ++ } ++ n->right = parent; ++ n->parent = NULL; ++ parent->left = obj; ++ parent->parent = n; ++ parent->left_of_parent = 0; ++ t->root = n; ++#endif ++ return n; ++ } ++ else ++ return NULL; ++ } ++ } ++ else if (base >= n->extent) ++ { ++ n = n->right; ++ if (n) ++ { ++ if (base < n->base) ++ n = n->left; ++ else if (base >= n->extent) ++ n = n->right; ++ else if (base == n->base) ++ { ++#if FAST_UPDATE ++ object *parent = n->parent; ++ object *obj = n->left; ++ ++ if (obj) ++ { ++ obj->parent = parent; ++ obj->left_of_parent = 0; ++ } ++ n->left = parent; ++ n->parent = NULL; ++ parent->right = obj; ++ parent->parent = n; ++ parent->left_of_parent = 1; ++ t->root = n; ++#endif ++ return n; ++ } ++ else ++ return NULL; ++ } ++ } ++ else if (base == n->base) ++ return n; ++ else ++ return NULL; ++ } ++#endif ++ ++ while (n) ++ { ++#if SPLAY_COUNT_OPERATIONS ++ steps++; ++#endif ++ ++ if (base < n->base) ++ n = n->left; ++ else if (base >= n->extent) ++ n = n->right; ++ else ++ break; ++ } ++ if (n && n->base == base) ++ { ++#if SPLAY_COUNT_OPERATIONS ++ n->hits++; ++ look_up_steps += steps; ++#endif ++ return tree_splay (t, n); ++ } ++ else ++ { ++#if SPLAY_COUNT_OPERATIONS ++ nlook_up_steps += steps; ++ nlook_up_operations++; ++#endif ++ return NULL; ++ } ++} ++ ++/* Add a node to the splay tree. We assume the node isn't already in the ++ tree, and that no node of the same value is in the tree. The node will ++ rise to the root of the tree (by splay), and we return it for convenience. */ ++ ++static __inline__ object * ++tree_add (tree * t, object * n) ++{ ++ object *tmp = t->root, *prev; ++ ++ n->parent = n->left = n->right = NULL; ++ ++#if SPLAY_COUNT_OPERATIONS ++ add_operations++; ++ splay_operations = &splay_add_operations; ++ splay_steps = &splay_add_steps; ++#endif ++ ++ if (tmp == NULL) ++ { ++ /* Tree is empty. Add the node at root and return immediately. */ ++ t->root = n; ++#if OBJECT_CLASS ++ t->min = n->base; ++ t->max = n->extent; ++#endif ++ return n; ++ } ++ ++#if OBJECT_CLASS ++ if (n->base < t->min) ++ t->min = n->base; ++ if (n->extent > t->max) ++ t->max = n->extent; ++#endif ++ ++ while (tmp) ++ { ++ prev = tmp; ++ if (n->base < tmp->base) ++ tmp = tmp->left; ++ else ++ tmp = tmp->right; ++ } ++ ++ /* `prev' points to the last node before we fell off the bottom of the ++ tree. */ ++ if (prev->parent == NULL) ++ { ++ /* `prev' is the root of the tree, so we can just add the node here with ++ no problem. */ ++ if (n->base < prev->base) ++ { ++ prev->left = n; ++ n->parent = prev; ++ n->left_of_parent = 1; ++ } ++ else ++ { ++ prev->right = n; ++ n->parent = prev; ++ n->left_of_parent = 0; ++ } ++ } ++ ++ /* If parent to prev and prev to new node are in the same direction, we ++ can just add the new node. */ ++ else if (n->base < prev->base && prev->left_of_parent) ++ { ++ prev->left = n; ++ n->parent = prev; ++ n->left_of_parent = 1; ++ } ++ else if (n->base > prev->base && !prev->left_of_parent) ++ { ++ prev->right = n; ++ n->parent = prev; ++ n->left_of_parent = 0; ++ } ++ ++ /* If parent to prev and prev to new node are not in a straight line, we ++ insert the new node between parent and prev. */ ++ else if (prev->left_of_parent) ++ { ++ object *parent = prev->parent; ++ ++ parent->left = n; ++ n->left = prev; ++ n->parent = parent; ++ n->left_of_parent = 1; ++ prev->parent = n; ++ prev->left_of_parent = 1; ++ } ++ else ++ { ++ object *parent = prev->parent; ++ ++ parent->right = n; ++ n->right = prev; ++ n->parent = parent; ++ n->left_of_parent = 0; ++ prev->parent = n; ++ prev->left_of_parent = 0; ++ } ++ return tree_splay (t, n); ++} ++ ++/* Delete a node from the tree. We assume that the node to be deleted exists ++ in the tree. */ ++ ++static __inline__ void ++tree_del (tree * t, object * n) ++{ ++ object *left, *right, *largest; ++ tree tmp_left; ++ ++#if SPLAY_COUNT_OPERATIONS ++ del_operations++; ++ splay_operations = &splay_del_operations; ++ splay_steps = &splay_del_steps; ++#endif ++ ++ if (n->left == NULL) ++ { ++ right = n->right; ++ if (n->parent == NULL) ++ { ++ t->root = right; ++ if (right) ++ right->parent = NULL; ++ } ++ else if (n->left_of_parent) ++ { ++ n->parent->left = right; ++ if (right) ++ right->parent = n->parent, right->left_of_parent = 1; ++ } ++ else ++ { ++ n->parent->right = right; ++ if (right) ++ right->parent = n->parent, right->left_of_parent = 0; ++ } ++ return; ++ } ++ ++ if (n->right == NULL) ++ { ++ left = n->left; ++ if (n->parent == NULL) ++ { ++ t->root = left; ++ if (left) ++ left->parent = NULL; ++ } ++ else if (n->left_of_parent) ++ { ++ n->parent->left = left; ++ if (left) ++ left->parent = n->parent, left->left_of_parent = 1; ++ } ++ else ++ { ++ n->parent->right = left; ++ if (left) ++ left->parent = n->parent, left->left_of_parent = 0; ++ } ++ return; ++ } ++ ++ right = n->right; ++ left = n->left; ++ ++ /* Search the left orphaned subtree for the largest value it contains. This ++ will necessarily be smaller than the deleted node, and all the nodes in ++ the right subtree. ++ (Notice that the largest value is just found by going right as far as ++ possible in the left subtree). */ ++ largest = left; ++ while (largest->right) ++ largest = largest->right; ++ ++ /* Splay the left tree again so that the largest node is brought to the ++ top. */ ++ left->parent = NULL; ++ tmp_left.root = left; ++ tree_splay (&tmp_left, largest); ++ ++ /* Now, since the largest valued node in the left tree is at the top, we ++ know that its right pointer is NULL, and we can just attach the right ++ tree there. */ ++ if (n->parent == NULL) ++ { ++ t->root = largest; ++ largest->parent = NULL; ++ } ++ else if (n->left_of_parent) ++ { ++ n->parent->left = largest; ++ largest->parent = n->parent; ++ largest->left_of_parent = 1; ++ } ++ else ++ { ++ n->parent->right = largest; ++ largest->parent = n->parent; ++ largest->left_of_parent = 0; ++ } ++ largest->right = right; ++ right->parent = largest; ++ right->left_of_parent = 0; ++} ++ ++/* Perform a strict check on the contents of the splay tree. This ++ check is done after each tree operation if 'SPLAY_STRICT_CHECKING' ++ is defined as 1. However, we include this code anyway so that ++ we can call it from the debugger or app. if necessary. */ ++ ++static void tc_error (tree * t, object * n, const char *s) ++ __attribute__ ((noreturn)); ++static void tc_test (tree * t, object * n, object * parent, ++ int left_of_parent, void *min, void *max); ++ ++void ++__bounds_tree_check (tree * t) ++{ ++ object *root = t->root; ++ ++ if (root == NULL) ++ return; ++ ++ if (root->parent != NULL) ++ tc_error (t, root, "root node has a parent (should be NULL)"); ++ if (root->left) ++ tc_test (t, root->left, root, 1, (void *) 0, (char *) root->base - 1); ++ if (root->right) ++ tc_test (t, root->right, root, 0, root->extent, (void *) ~0); ++} ++ ++static void ++tc_test (tree * t, object * n, object * parent, int left_of_parent, ++ void *min, void *max) ++{ ++ if (n->parent != parent) ++ tc_error (t, n, "node has parent different from true parent"); ++ if (n->left_of_parent != left_of_parent) ++ tc_error (t, n, "node has left_of_parent different from true direction"); ++ if (n->base >= n->extent) ++ tc_error (t, n, "node has zero or negative size"); ++ if (n->base < min || (void *) ((char *) n->extent - 1) > max) ++ tc_error (t, n, "node is out of order within the tree"); ++ if (n->left) ++ tc_test (t, n->left, n, 1, min, (char *) n->base - 1); ++ if (n->right) ++ tc_test (t, n->right, n, 0, n->extent, max); ++} ++ ++static void ++tc_error (tree * t, object * n, const char *msg) ++{ ++ printf ("tree_check: %s\n" ++ " tree root at %p\n" ++ " object struct at %p\n" ++ " object refers to %p..%p\n", ++ msg, t->root, n, n->base, (char *) n->extent - 1); ++ ABORT (); ++} ++ ++/* If `SPLAY_COUNT_OPERATIONS' is set to 1, then we keep statistics ++ on the current state of the splay tree, and we dump the splay ++ tree every N look-ups so we can draw pictures and measure ++ stats on the tree, etc. */ ++ ++#if SPLAY_COUNT_OPERATIONS ++ ++#include "ext-tree.h" /* Describes external format of splay tree files. */ ++#include <fcntl.h> ++ ++static void tree_dump_tree (int fd, object * n); ++static void tree_write_file (int fd, void *, size_t); ++static void tree_close_file (int fd); ++static void tree_next_name (void); ++static char dumpfile[128] = "splaytree.aa"; ++static int dump_index = 0; ++ ++static void ++tree_dump_statistics (tree * t) ++{ ++ int fd; ++ struct ext_tree et; ++ ++ printf ("Dump tree after %d look-up operations.\n", DUMP_EVERY); ++ ++ /* Notice that we can't make C library calls here, which would simplify ++ this code substantially. */ ++ fd = creat (dumpfile, 0644); ++ if (fd < 0) ++ { ++ printf ("Dump failed at: open\n"); ++ return; ++ } ++ __bounds_strcpy (et.magic, EXT_TREE_MAGIC); ++ et.index = dump_index; ++ dump_index++; ++ et.dump_every = DUMP_EVERY; ++ et.add_operations = add_operations; ++ et.del_operations = del_operations; ++ et.look_up_operations = look_up_operations - nlook_up_operations; ++ et.look_up_steps = look_up_steps; ++ et.nlook_up_operations = nlook_up_operations; ++ et.nlook_up_steps = nlook_up_steps; ++ et.splay_operations = splay_look_up_operations ++ + splay_add_operations + splay_del_operations; ++ et.splay_steps = splay_look_up_steps + splay_add_steps + splay_del_steps; ++ et.splay_look_up_operations = splay_look_up_operations; ++ et.splay_look_up_steps = splay_look_up_steps; ++ et.splay_add_operations = splay_add_operations; ++ et.splay_add_steps = splay_add_steps; ++ et.splay_del_operations = splay_del_operations; ++ et.splay_del_steps = splay_del_steps; ++ tree_write_file (fd, &et, sizeof et); ++ ++ add_operations = del_operations = look_up_operations = look_up_steps = ++ nlook_up_operations = nlook_up_steps = ++ splay_look_up_operations = splay_look_up_steps = ++ splay_add_operations = splay_add_steps = ++ splay_del_operations = splay_del_steps = 0; ++ ++ tree_dump_tree (fd, t->root); ++ ++ tree_close_file (fd); ++ tree_next_name (); ++} ++ ++static void ++tree_dump_tree (int fd, object * n) ++{ ++ /* Dump the current subtree to the dump file. */ ++ int zero_int = 0, one_int = 1; ++ ++ if (n == NULL) ++ tree_write_file (fd, &zero_int, sizeof (int)); ++ else ++ { ++ tree_write_file (fd, &one_int, sizeof (int)); ++ tree_write_file (fd, n, sizeof (object)); ++ tree_dump_tree (fd, n->left); ++ tree_dump_tree (fd, n->right); ++ n->hits = 0; ++ } ++} ++ ++static void ++tree_next_name (void) ++{ ++ /* Increment the name `splaytree.aa', `splaytree.ab', etc. */ ++ int sl = __bounds_strlen (dumpfile); ++ char p; ++ ++ p = dumpfile[sl - 1]; ++ p++; ++ if (p == 'z' + 1) ++ { ++ p = 'a'; ++ (dumpfile[sl - 2])++; ++ } ++ dumpfile[sl - 1] = p; ++} ++ ++#define BUFSIZE 4096 ++ ++char wr_buffer[BUFSIZE]; ++int wr_pos = 0; ++ ++static void ++tree_write_file (int fd, void *data, size_t size) ++{ ++ /* Efficiently write data to given file, buffering nK internally. We can ++ safely assume that none of the writes will be larger than the buffer ++ size. */ ++ if (wr_pos + size > BUFSIZE) ++ { ++ if (write (fd, wr_buffer, wr_pos) != wr_pos) ++ printf ("Dump failed at: write\n"); ++ wr_pos = 0; ++ } ++ __bounds_memcpy (wr_buffer + wr_pos, data, size); ++ wr_pos += size; ++} ++ ++static void ++tree_close_file (int fd) ++{ ++ /* Flush what's in our buffer and close the file. */ ++ if (wr_pos > 0) ++ { ++ if (write (fd, wr_buffer, wr_pos) != wr_pos) ++ printf ("Dump failed at: write\n"); ++ wr_pos = 0; ++ } ++ close (fd); ++} ++ ++#endif /* SPLAY_COUNT_OPERATIONS */ ++ ++/* A general function that looks up the object referred to by ++ a pointer. */ ++ ++__inline__ object * ++__bounds_find_object (void *pointer) ++{ ++ object *result; ++ sigset_t old_mask; ++ ++ if (__bounds_debug_no_checking) ++ result = NULL; ++ else ++ { ++#if COLLECT_STATS && DEBUG_OBJECTS ++ ++__bounds_stats_find_object; ++#endif ++ enter_critical_section (&old_mask); ++ LOOKUP_OBJECT (tree_lookup, result, pointer); ++ leave_critical_section (&old_mask); ++ } ++ return result; ++} ++ ++__inline__ object * ++__bounds_maybe_find_object (object * obj, void *pointer) ++{ ++ sigset_t old_mask; ++ ++ if (__bounds_debug_no_checking) ++ obj = NULL; ++ else if (obj) ++ { ++#if COLLECT_STATS && DEBUG_OBJECTS ++ ++__bounds_stats_maybe_find_object; ++#endif ++ } ++ else ++ { ++#if COLLECT_STATS && DEBUG_OBJECTS ++ ++__bounds_stats_maybe_find_object_search; ++#endif ++ enter_critical_section (&old_mask); ++ LOOKUP_OBJECT (tree_lookup, obj, pointer); ++ leave_critical_section (&old_mask); ++ } ++ return obj; ++} ++ ++static __inline__ object * ++__bounds_find_object_by_base (void *base) ++{ ++ object *result; ++ ++ LOOKUP_OBJECT (tree_lookup_base, result, base); ++ return result; ++} ++ ++/* Add, delete and lookup heap objects specifically. */ ++ ++/* Check for power of 2 of aligment. ++ It is much faster doing an and than doing a mod function. */ ++ ++static __inline__ int ++check_align (int n) ++{ ++ return (((n - 1) & n) == 0); ++} ++ ++void ++__bounds_add_heap_object (void *base, size_t count, size_t align, ++ const char *name, int no_padding, ++ const char *filename, int line) ++{ ++ object *obj; ++ ++#if COLLECT_STATS ++ ++__bounds_stats_add_heap; ++#endif ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ++ ("__bounds_add_heap_object (p=%p, sz=%u, align=%u, file=\"%s\", ln=%d)\n", ++ base, count, align, filename, line); ++#endif ++ ++ if (count == 0 || align == 0) ++ __bounds_internal_error ("attempted to add a zero-sized heap object", ++ NULL, 0); ++ ++ obj = new_object (); ++ obj->left = obj->right = obj->parent = NULL; ++ obj->base = base; ++ obj->size = count * align; ++ obj->extent = (char *) base + count * align; ++ obj->align = align; ++ obj->sclass = obj_sclass_heap; ++ obj->filename = filename; ++ obj->line = line; ++ obj->name = name; ++ /* Padding can be added after every heap object by the run-time malloc ++ library. */ ++ obj->no_padding = no_padding; ++ obj->align_mask = check_align (align); ++ obj->oob_pointer = 0; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ obj->hits = 0; ++ obj->steps = 0; ++#endif ++#if OBJECT_CLASS ++ tree_add (&heap_object_tree, obj); ++#else ++ tree_add (&object_tree, obj); ++#endif ++} ++ ++int ++__bounds_delete_heap_object (void *base, size_t size, const char *error, ++ const char *filename, int line, size_t *org_size) ++{ ++ object *obj; ++ ++#if COLLECT_STATS ++ ++__bounds_stats_delete_heap; ++#endif ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ++ ("__bounds_delete_heap_object (p=%p, size=%u, file=\"%s\", ln=%d)\n", ++ base, size, filename, line); ++#endif ++ ++ obj = __bounds_find_object_by_base (base); ++ if (obj == NULL || obj->sclass != obj_sclass_heap) ++ { ++ __bounds_error (error, filename, line, base, NULL); ++ return 1; ++ } ++ ++ if (org_size) ++ *org_size = obj->size; ++ ++ if (obj->oob_pointer) ++ __bounds_delete_oob_entries (obj); ++ ++ base = obj->extent; ++ size -= obj->size; ++#if OBJECT_CLASS ++ tree_del (&heap_object_tree, obj); ++#else ++ tree_del (&object_tree, obj); ++#endif ++ free_object (obj); ++ while ((long) size > 0) ++ { ++ obj = __bounds_find_object_by_base (base); ++ if (obj == NULL || obj->sclass != obj_sclass_heap) ++ { ++ __bounds_error (error, filename, line, base, NULL); ++ return 1; ++ } ++ ++ if (org_size) ++ (*org_size) += obj->size; ++ ++ if (obj->oob_pointer) ++ __bounds_delete_oob_entries (obj); ++ ++ base = obj->extent; ++ size -= obj->size; ++#if OBJECT_CLASS ++ tree_del (&heap_object_tree, obj); ++#else ++ tree_del (&object_tree, obj); ++#endif ++ free_object (obj); ++ } ++ return 0; ++} ++ ++/* Add a static object to the list of objects. This function may be ++ called more than once for each object. */ ++ ++object * ++__bounds_note_constructed_object (void *base, int size, size_t align, ++ const char *filename, int line, ++ const char *name) ++{ ++ object *obj; ++ obj_sclass sclass = size < 0 ? obj_sclass_external : obj_sclass_static; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ obj = __bounds_find_object_by_base (base); ++ if (size < 0) ++ size = -size; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_note_constructed_object" ++ "(p=%p, sz=%u, align=%u, file=\"%s\", ln=%d, name=\"%s\")\n", ++ base, size, align, filename, line, name); ++#endif ++ ++ if (size == 0 || align == 0) ++ __bounds_internal_error ("attempted to add a zero-sized static object", ++ filename, line); ++ ++ if (obj && obj->sclass == obj_sclass_static && sclass == obj_sclass_static) ++ { ++ /* Object has already constructed. Just check that it is declared the ++ same way here. */ ++ if (obj->size != (size_t) size || obj->align != align) ++ { ++ __bounds_error ("static object redeclared with different" ++ " size or alignment", filename, line, base, obj); ++ } ++ } ++ ++ /* Allow a new static declaration to unconditionally overwrite an ++ external one, since external ones are tentative. ++ Also allow an external one to overwrite another external one. */ ++ else if (obj && obj->sclass == obj_sclass_external) ++ { ++#if OBJECT_CLASS ++ tree_del (&extern_object_tree, obj); ++#endif ++ obj->size = size; ++ obj->extent = (char *) base + size; ++ obj->align = align; ++ obj->sclass = sclass; ++ obj->filename = filename; ++ obj->name = name; ++ obj->line = line; ++ obj->no_padding = sclass == obj_sclass_external ? 1 : 0; ++ obj->align_mask = check_align (align); ++ obj->oob_pointer = 0; ++#if OBJECT_CLASS ++ tree_add (sclass == obj_sclass_static ? &static_object_tree ++ : &extern_object_tree, obj); ++#endif ++ } ++ ++ /* Ignore an external declaration if we already have a firm static ++ declaration for this object. */ ++ else if (obj && sclass == obj_sclass_external) ++ ; ++ else ++ { ++ /* Create the object anew. */ ++ obj = new_object (); ++ obj->left = obj->right = obj->parent = NULL; ++ obj->base = base; ++ obj->size = size; ++ obj->extent = (char *) base + size; ++ obj->align = align; ++ obj->sclass = sclass; ++ obj->filename = filename; ++ obj->line = line; ++ obj->name = name; ++ /* Padding is added after every static object now by the compiler. */ ++ obj->no_padding = sclass == obj_sclass_external ? 1 : 0; ++ obj->align_mask = check_align (align); ++ obj->oob_pointer = 0; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ obj->hits = 0; ++ obj->steps = 0; ++#endif ++#if OBJECT_CLASS ++ tree_add (sclass == obj_sclass_static ? &static_object_tree ++ : &extern_object_tree, obj); ++#else ++ tree_add (&object_tree, obj); ++#endif ++ } ++ leave_critical_section (&old_mask); ++ ++ return obj; ++} ++ ++/* This is used to build a list of private static data. The table ++ is built by GCC, and a pointer to it is passed here. */ ++ ++void ++__bounds_note_constructed_private_table (private_table * table, ++ const char *filename, int line) ++{ ++ const char *name; ++ ++ while (table->ptr) ++ { ++ if (table->name != NULL) ++ name = table->name; ++ else ++ name = "(unnamed static)"; ++ if (table->size) ++ __bounds_note_constructed_object (table->ptr, (size_t) table->size, 1, ++ NULL, 0, name); ++ else ++ /* GCC with bounds checking sometimes generates zero-sized entries ++ in the table, even though these ought to give warnings and be ++ ignored at compile time. Generate warnings here. If these warnings ++ appear, the compiler will need to be fixed. ++ (4/4/95: These should be fixed now). */ ++ __bounds_warning (filename, line, NULL, ++ "zero-sized object `%s' generated" ++ " in private_statics table", name); ++ table++; ++ } ++} ++ ++__inline__ void ++__bounds_internal_delete_stack_object (object * obj, int nesting_nr) ++{ ++#if COLLECT_STATS ++ ++__bounds_stats_delete_stack; ++#endif ++ if (obj->sclass != obj_sclass_stack) ++ __bounds_internal_error ("__bounds_delete_stack_object passed pointer" ++ " to non-stack object", __FILE__, __LINE__); ++ ++ if (nesting_nr != -1) ++ __bounds_remove_function_object (obj, nesting_nr); ++ ++ if (obj->oob_pointer) ++ __bounds_delete_oob_entries (obj); ++ ++#if OBJECT_CLASS ++ { tree *t; ++ switch (obj->sclass) ++ { ++ case obj_sclass_static: ++ t = &static_object_tree; ++ break; ++ case obj_sclass_external: ++ t = &extern_object_tree; ++ break; ++ case obj_sclass_stack: ++ t = &stack_object_tree; ++ break; ++ case obj_sclass_heap: ++ t = &heap_object_tree; ++ break; ++ default: ++ abort(); ++ } ++ tree_del (t, obj); ++ } ++#else ++ tree_del (&object_tree, obj); ++#endif ++ free_object (obj); ++} ++ ++void ++__bounds_delete_object (object * obj) ++{ ++ sigset_t old_mask; ++ ++ if (obj == NULL) ++ __bounds_internal_error ("__bounds_delete_object passed pointer" ++ " to NULL object", __FILE__, __LINE__); ++ enter_critical_section (&old_mask); ++#if OBJECT_CLASS ++ { tree *t; ++ switch (obj->sclass) ++ { ++ case obj_sclass_static: ++ t = &static_object_tree; ++ break; ++ case obj_sclass_external: ++ t = &extern_object_tree; ++ break; ++ case obj_sclass_stack: ++ t = &stack_object_tree; ++ break; ++ case obj_sclass_heap: ++ t = &heap_object_tree; ++ break; ++ default: ++ abort(); ++ } ++ tree_del (t, obj); ++ } ++#else ++ tree_del (&object_tree, obj); ++#endif ++ free_object (obj); ++ leave_critical_section (&old_mask); ++} ++ ++/* Create a record of a stack object. This function is called once ++ for each local variable when we enter a function or block. */ ++ ++__inline__ object * ++__bounds_internal_add_stack_object (void *base, size_t size, size_t align, ++ const char *filename, int line, ++ const char *name, int no_padding, ++ int nesting_nr) ++{ ++ object *obj; ++#if COLLECT_STATS ++ ++__bounds_stats_add_stack; ++#endif ++ /* Check that we don't create duplicates of stack objects. This can ++ happen when multiple threads are active and a thread is deleted. ++ A new thread can reuse the stack. This can also happen when ++ using setjmp/longjmp function calls. */ ++ LOOKUP_OBJECT (tree_lookup, obj, base); ++ if (obj) ++ { ++ /* If this is an alloca object then this is ok */ ++ if (obj->sclass == obj_sclass_heap ++ && __bounds_strcmp (obj->name, "alloca") == 0) ++ { ++ if (obj->size != size) ++ __bounds_internal_error ("__bounds_internal_add_stack_object found " ++ "alloca object with wrong size", ++ __FILE__, __LINE__); ++ return obj; ++ } ++ /* Delete function context in functions.c. This only works when ++ the object is a stack object. */ ++ if (obj->sclass != obj_sclass_stack) ++ __bounds_internal_error ("__bounds_internal_add_stack_object found " ++ "pointer to non-stack object", ++ __FILE__, __LINE__); ++ ++ __bounds_remove_function_context (obj, nesting_nr); ++ } ++ ++ if (size == 0 || align == 0) ++ __bounds_internal_error ("attempted to add a zero-sized stack object", ++ filename, line); ++ ++ /* Create a new object record. */ ++ obj = new_object (); ++ obj->left = obj->right = obj->parent = NULL; ++ obj->base = base; ++ obj->size = size; ++ obj->extent = (char *) base + size; ++ obj->align = align; ++ obj->sclass = obj_sclass_stack; ++ obj->filename = filename; ++ obj->line = line; ++ obj->name = name; ++ /* For parameters, no padding can be adding between adjacent objects. Setting ++ this flag allows you to increment a pointer beyond a parameter and get ++ to the next parameter in the list. */ ++ obj->no_padding = no_padding; ++ obj->align_mask = check_align (align); ++ obj->oob_pointer = 0; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ obj->hits = 0; ++ obj->steps = 0; ++#endif ++#if OBJECT_CLASS ++ tree_add (&stack_object_tree, obj); ++#else ++ tree_add (&object_tree, obj); ++#endif ++ ++ if (nesting_nr != -1) ++ __bounds_add_function_object (obj, nesting_nr); ++ ++ return obj; ++} ++ ++void ++__bounds_add_stack_object (void *base, size_t size, size_t align, ++ const char *filename, int line, const char *name, ++ int nesting_nr) ++{ ++ sigset_t old_mask; ++ ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_add_stack_object" ++ "(p=%p, sz=%u, align=%u, file=\"%s\", ln=%d, name=\"%s\"" ++ " nesting_nr=%d)\n", ++ base, size, align, filename, line, name, nesting_nr); ++#endif ++ ++ enter_critical_section (&old_mask); ++ __bounds_internal_add_stack_object (base, size, align, ++ filename, line, name, 0, nesting_nr); ++ leave_critical_section (&old_mask); ++} ++ ++void ++__bounds_delete_stack_object (void *base, object * obj, int nesting_nr) ++{ ++ sigset_t old_mask; ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_delete_stack_object (p=%p, nesting_nr=%d)\n", ++ base, nesting_nr); ++#endif ++ ++ enter_critical_section (&old_mask); ++ if (obj == NULL) ++ obj = __bounds_find_object_by_base (base); ++ if (obj == NULL || obj->sclass != obj_sclass_stack) ++ { ++ if (obj && obj->sclass == obj_sclass_heap ++ && __bounds_strcmp (obj->name, "alloca") == 0) ++ __bounds_delete_alloca_chain (obj); ++ else ++ __bounds_internal_error ("unknown or non-stack object passed" ++ " to __bounds_delete_stack_object", ++ __FILE__, __LINE__); ++ ++ } ++ else ++ __bounds_internal_delete_stack_object (obj, nesting_nr); ++ leave_critical_section (&old_mask); ++} ++ ++void ++__bounds_add_object (void *base, size_t size, size_t align, ++ const char *filename, int line, const char *name, ++ int no_padding) ++{ ++ sigset_t old_mask; ++ object *obj; ++ ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_calls) ++ printf ("__bounds_add_object" ++ "(p=%p, sz=%u, align=%u, file=\"%s\", ln=%d, name=\"%s\"," ++ " no_padding=%d)\n", ++ base, size, align, filename, line, name, no_padding); ++#endif ++ ++ enter_critical_section (&old_mask); ++ /* Create a new object record. */ ++ obj = new_object (); ++ obj->left = obj->right = obj->parent = NULL; ++ obj->base = base; ++ obj->size = size; ++ obj->extent = (char *) base + size; ++ obj->align = align; ++ obj->sclass = obj_sclass_heap; ++ obj->filename = filename; ++ obj->line = line; ++ obj->name = name; ++ /* For parameters, no padding can be adding between adjacent objects. Setting ++ this flag allows you to increment a pointer beyond a parameter and get ++ to the next parameter in the list. */ ++ obj->no_padding = no_padding; ++ obj->align_mask = check_align (align); ++ obj->oob_pointer = 0; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ obj->hits = 0; ++ obj->steps = 0; ++#endif ++#if OBJECT_CLASS ++ tree_add (&heap_object_tree, obj); ++#else ++ tree_add (&object_tree, obj); ++#endif ++ leave_critical_section (&old_mask); ++} ++ ++/* Note the location of the arguments to main. ++ (31/5/95: Made these into stack objects.) */ ++ ++void ++__bounds_note_main_args (int argc, char **argv) ++{ ++ int i; ++ ++ if (__bounds_checking_on) ++ { ++#if COLLECT_STATS ++ ++__bounds_stats_environment; ++#endif ++ __bounds_internal_add_stack_object (argv, (argc + 1) * sizeof (char *), ++ sizeof (char *), "main", 0, ++ "argv", 1, -1); ++ for (i = 0; i < argc; ++i) ++ { ++#if DEBUG_FEATURES ++ if (__bounds_debug_print_function || __bounds_error_filename) ++ printf ("__bounds_note_main_args (arg %d, \"%s\")\n", i, argv[i]); ++#endif ++#if COLLECT_STATS ++ ++__bounds_stats_environment; ++#endif ++ __bounds_internal_add_stack_object (argv[i], ++ __bounds_strlen (argv[i]) + 1, ++ 1, "main", 0, "argv", 1, -1); ++ } ++ } ++} ++ ++/* Produce a debugging memory map on stderr. Only lists objects ++ between minbase and maxbase. If either of these are NULL, then ++ they default sensibly. */ ++ ++static double total_hits = 0.0; ++static double total_steps = 0.0; ++ ++static __inline__ const char * ++sclass_name (object * obj) ++{ ++ switch (obj->sclass) ++ { ++ case obj_sclass_heap: ++ return "heap"; ++ case obj_sclass_static: ++ return "static"; ++ case obj_sclass_external: ++ return "external"; ++ case obj_sclass_stack: ++ return "stack"; ++ } ++ return NULL; ++} ++ ++static unsigned ++__bounds_print_map (object * obj, int level, void *minbase, void *maxbase) ++{ ++ unsigned count; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ double depth; ++ unsigned n1; ++ unsigned n2; ++#endif ++ ++ if (obj && minbase <= obj->base && obj->base <= maxbase) ++ { ++ count = __bounds_print_map (obj->left, level + 1, minbase, maxbase); ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ total_hits += (double) obj->hits; ++ total_steps += (double) obj->steps; ++ depth = obj->hits ? ((double) obj->steps * 100.0) / (double) obj->hits ++ : 0.0; ++ n1 = (unsigned) (depth / 100.0); ++ n2 = (unsigned) (depth - 100.0 * (double) n1); ++#endif ++ printf ( ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ "%10u %2u.%02u %p-%p %4u %4u (%2u) %s %s %s %d\n", ++ obj->hits, n1, n2, ++#else ++ "%p-%p %4u %4u (%2u) %s %s %s %d\n", ++#endif ++ obj->base, ++ (char *) obj->extent - 1, ++ obj->size, ++ obj->align, ++ level, ++ sclass_name (obj), ++ obj->name, obj->filename ? obj->filename : "?", obj->line); ++ count += __bounds_print_map (obj->right, level + 1, minbase, maxbase); ++ return count + 1; ++ } ++ else ++ return 0; ++} ++ ++void ++__bounds_debug_memory (void *minbase, void *maxbase) ++{ ++ unsigned count; ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ double depth; ++ unsigned n1; ++ unsigned n2; ++#endif ++ ++ if (maxbase == NULL) ++ maxbase = (void *) (-1); ++ ++ total_hits = 0.0; ++ total_steps = 0.0; ++ printf ("Memory map:\n"); ++#if OBJECT_CLASS ++ count = __bounds_print_map (static_object_tree.root, 0, minbase, maxbase); ++ count += __bounds_print_map (extern_object_tree.root, 0, minbase, maxbase); ++ count += __bounds_print_map (stack_object_tree.root, 0, minbase, maxbase); ++ count += __bounds_print_map (heap_object_tree.root, 0, minbase, maxbase); ++#else ++ count = __bounds_print_map (object_tree.root, 0, minbase, maxbase); ++#endif ++ ++#if SPLAY_COUNT_OPERATIONS || SPLAY_COUNT_STAT ++ depth = ++ total_hits ? ((double) total_steps * 100.0) / (double) total_hits : 0.0; ++ n1 = (unsigned) (depth / 100.0); ++ n2 = (unsigned) (depth - 100.0 * (double) n1); ++ printf ("Number of objects: %u average steps %u.%02u\n", count, n1, n2); ++#else ++ printf ("Number of objects: %u\n", count); ++#endif ++} ++ ++#if OBJECT_CLASS ++static tree heap_tree = { NULL, NULL, NULL }; ++#else ++static tree heap_tree = { NULL }; ++#endif ++ ++static void ++add_heap_object (object * obj) ++{ ++ object *p, *last; ++ int n1, n2; ++ ++ if (heap_tree.root == NULL) ++ { ++ heap_tree.root = obj; ++ obj->heap_next = NULL; ++ obj->hits = 1; ++ obj->steps = obj->size; ++ } ++ else ++ { ++ p = heap_tree.root; ++ last = NULL; ++ do ++ { ++ if (obj->filename == NULL || p->filename == NULL) ++ n1 = obj->filename - p->filename; ++ else ++ n1 = __bounds_strcmp (obj->filename, p->filename); ++ n2 = obj->line - p->line; ++ if (n1 == 0 && n2 == 0) ++ { ++ p->hits++; ++ p->steps += obj->size; ++ return; ++ } ++ else if (n1 < 0 || (n1 == 0 && n2 < 0)) ++ { ++ obj->heap_next = p; ++ if (last == NULL) ++ heap_tree.root = obj; ++ else ++ last->heap_next = obj; ++ obj->hits = 1; ++ obj->steps = obj->size; ++ return; ++ } ++ last = p; ++ p = p->heap_next; ++ } ++ while (p); ++ last->heap_next = obj; ++ obj->heap_next = NULL; ++ obj->hits = 1; ++ obj->steps = obj->size; ++ } ++} ++ ++static void ++__bounds_get_heap_objects (object * obj) ++{ ++ if (obj) ++ { ++ __bounds_get_heap_objects (obj->left); ++ if (obj->sclass == obj_sclass_heap) ++ add_heap_object (obj); ++ __bounds_get_heap_objects (obj->right); ++ } ++} ++ ++static void ++__bounds_print_heap_objects (object * obj) ++{ ++ if (obj) ++ { ++ __bounds_print_heap_objects (obj->left); ++ if (obj->sclass == obj_sclass_heap) ++ __bounds_warn1 ("Leaked memory", obj->filename, obj->line, obj->base, ++ obj); ++ __bounds_print_heap_objects (obj->right); ++ } ++} ++ ++void ++__bound_print_heap (void) ++{ ++ object *p; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++#if OBJECT_CLASS ++ __bounds_get_heap_objects (static_object_tree.root); ++ __bounds_get_heap_objects (extern_object_tree.root); ++ __bounds_get_heap_objects (stack_object_tree.root); ++ __bounds_get_heap_objects (heap_object_tree.root); ++#else ++ __bounds_get_heap_objects (object_tree.root); ++#endif ++ p = heap_tree.root; ++ while (p) ++ { ++ printf ++ ("Filename = %s, Line = %d, Function = %s, Count = %d Avg Size = %d, Total = %d\n", ++ p->filename ? p->filename : "<noname>", p->line, ++ p->name ? p->name : "<noname>", p->hits, ++ p->steps / (p->hits > 0 ? p->hits : 1), p->steps); ++ p = p->heap_next; ++ } ++ if (__bounds_debug_print_heap >= 2) ++ { ++#if OBJECT_CLASS ++ __bounds_print_heap_objects (static_object_tree.root); ++ __bounds_print_heap_objects (extern_object_tree.root); ++ __bounds_print_heap_objects (stack_object_tree.root); ++ __bounds_print_heap_objects (heap_object_tree.root); ++#else ++ __bounds_print_heap_objects (object_tree.root); ++#endif ++ } ++ leave_critical_section (&old_mask); ++} ++ ++/* The idea is that when an oob pointer is generated, a malloc is done and the ++ address of the location newly allocated is assigned to the oob pointer. The ++ address of the object which the oob pointer used to reference is store in ++ this malloc'd location. So this becomes a pointer to the object. And the ++ address of this new location is stored in the hashtable, ie ++ pointer_to_pointer of object. We end up with only one entry per object for ++ each object with oob pointers, thus at creation of an oob pointer we enforce ++ this. Subsequently when we come across the created oob pointer, would seem ++ to be an unchecked pointer since it would not be found on our splay(object) ++ tree and it would not have the standard ILLEGAL(-2) value. But by checking ++ in our hashtable we can find the address it references we would be able ++ to correctly identify it. */ ++ ++#define HASH_SIZE (32) /* Must be power of 2. */ ++ ++static struct oob_hashtable ++{ ++ int size; ++ int maxsize; ++ oob_object **table; ++} oob_hashtable[HASH_SIZE] = ++{ [0 ... HASH_SIZE - 1] { 0, 0, NULL} }; ++ ++static oob_object *oob_list = NULL; ++ ++static __inline__ long ++hash_oob_pointer (const void *elem) ++{ ++ return ((long) elem >> 8) & (HASH_SIZE - 1); ++} ++ ++void * ++__bounds_create_oob_pointer (object * obj, void *new_pointer, ++ const char *filename, int line) ++{ ++ int i; ++ int j; ++ int size; ++ long hash; ++ oob_object *oob_ptr; ++ struct oob_hashtable *oob; ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ /* Check for duplicate entries. We can speed this up by creating another ++ hash table with hash_value hash_oob_pointer (new_pointer). This ++ however creates a new problem because we have to delete the items ++ from this new hashtable as well. */ ++ if (obj->oob_pointer) ++ for (i = 0; i < HASH_SIZE; i++) ++ { ++ oob = &oob_hashtable[i]; ++ size = oob->size; ++ for (j = 0; j < size; j++) ++ if (oob->table[j]->obj == obj ++ && oob->table[j]->oob_ptr_value == new_pointer) ++ { ++ oob_ptr = oob->table[j]; ++ leave_critical_section (&old_mask); ++#if DEBUG_FEATURES ++ if (__bounds_print_oob_pointers) ++ printf ("DUPLICATE OOB-TABLE VALUE %p, OBJECT %p," ++ " NEW %p '%s' %s:%d\n", ++ new_pointer, obj, oob_ptr, ++ obj->name ? obj->name : "(unnamed)", ++ filename ? filename : "??", line); ++#endif ++ return oob_ptr; ++ } ++ } ++ /* Use list of old oob objects is possible. */ ++ if (oob_list) ++ { ++ oob_ptr = oob_list; ++ oob_list = (oob_object *) oob_list->obj; ++ } ++ else ++ { ++ oob_ptr = (oob_object *) __bounds_malloc (sizeof (oob_object)); ++ if (oob_ptr == NULL) ++ __bounds_internal_error ("out of memory allocating oob structure", ++ __FILE__, __LINE__); ++ } ++ oob_ptr->obj = obj; ++ oob_ptr->oob_ptr_value = new_pointer; ++ hash = hash_oob_pointer (oob_ptr); ++ oob = &oob_hashtable[hash]; ++ if (oob->size == oob->maxsize) ++ { ++ if (oob->size == 0) ++ { ++ oob->maxsize = 8; ++ oob->table = (oob_object **) ++ __bounds_malloc (sizeof (oob_object *) * oob->maxsize); ++ if (oob->table == NULL) ++ __bounds_internal_error ("out of memory allocating oob structure", ++ __FILE__, __LINE__); ++ } ++ else ++ { ++ oob->maxsize *= 2; ++ oob->table = (oob_object **) ++ __bounds_realloc (oob->table, ++ sizeof (oob_object *) * oob->maxsize); ++ if (oob->table == NULL) ++ __bounds_internal_error ("out of memory allocating oob structure", ++ __FILE__, __LINE__); ++ } ++ } ++ oob->table[oob->size++] = oob_ptr; ++ obj->oob_pointer = 1; ++ leave_critical_section (&old_mask); ++#if DEBUG_FEATURES ++ if (__bounds_print_oob_pointers) ++ printf ("ADDED TO OOB-TABLE VALUE %p, OBJECT %p, NEW %p '%s' %s:%d\n", ++ new_pointer, obj, oob_ptr, ++ obj->name ? obj->name : "(unnamed)", ++ filename ? filename : "??", line); ++#endif ++#if COLLECT_STATS ++ ++__bounds_stats_add_oob_table; ++#endif ++ return oob_ptr; ++} ++ ++static __inline__ void ++__bounds_internal_setup_oob_pointer (object ** obj, void **ptr, ++ const char *filename, int line) ++{ ++ int i; ++ long hash; ++ oob_object *obj_ptr; ++ struct oob_hashtable *oob; ++ ++ obj_ptr = (oob_object *) * ptr; ++ if (obj_ptr) ++ { ++ hash = hash_oob_pointer (obj_ptr); ++ oob = &oob_hashtable[hash]; ++ for (i = oob->size - 1; i >= 0; i--) ++ if (oob->table[i] == obj_ptr) ++ { ++ *ptr = obj_ptr->oob_ptr_value; ++ *obj = obj_ptr->obj; ++#if DEBUG_FEATURES ++ if (__bounds_print_oob_pointers) ++ printf ("FOUND OOB-POINTER VALUE %p, OBJECT %p, NEW %p" ++ " '%s' %s:%d\n", ++ obj_ptr, *obj, *ptr, ++ (*obj)->name ? (*obj)->name : "(unnamed)", ++ filename ? filename : "??", line); ++#endif ++#if COLLECT_STATS ++ ++__bounds_stats_find_oob_table; ++#endif ++ break; ++ } ++ } ++} ++ ++void ++__bounds_setup_oob_pointer (object ** obj, void **ptr, ++ const char *filename, int line) ++{ ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ __bounds_internal_setup_oob_pointer (obj, ptr, filename, line); ++ leave_critical_section (&old_mask); ++} ++ ++void ++__bounds_setup2_oob_pointer (object ** obj1, void **ptr1, ++ object ** obj2, void **ptr2, ++ const char *filename, int line) ++{ ++ sigset_t old_mask; ++ ++ enter_critical_section (&old_mask); ++ __bounds_internal_setup_oob_pointer (obj1, ptr1, filename, line); ++ __bounds_internal_setup_oob_pointer (obj2, ptr2, filename, line); ++ leave_critical_section (&old_mask); ++} ++ ++/* If there are a large number of oob pointers we probably should ++ rewrite the code to use a double linked list of objects. This can ++ be removed a lot faster. This will require a lot more memory. ++ Three pointers in the oob_object and one in every object. */ ++ ++void ++__bounds_delete_oob_entries (object * obj) ++{ ++ int i; ++ int j; ++ int k; ++ int size; ++ struct oob_hashtable *oob; ++ ++ for (i = 0; i < HASH_SIZE; i++) ++ { ++ oob = &oob_hashtable[i]; ++ size = oob->size; ++ for (j = 0; j < size; j++) ++ if (oob->table[j]->obj == obj) ++ { ++ oob->table[j]->obj = (object *) oob_list; ++ oob_list = oob->table[j]; ++ oob->size--; ++#if DEBUG_FEATURES ++ if (__bounds_print_oob_pointers) ++ printf ("DELETED FROM OOB-TABLE VALUE %p, OBJECT %p, PTR %p" ++ " '%s'\n", ++ oob->table[j]->oob_ptr_value, obj, ++ oob_list, obj->name ? obj->name : "(unnamed)"); ++#endif ++#if COLLECT_STATS ++ ++__bounds_stats_delete_oob_table; ++#endif ++ k = j; ++ for (j = j + 1; j < size; j++) ++ if (oob->table[j]->obj == obj) ++ { ++ oob->table[j]->obj = (object *) oob_list; ++ oob_list = oob->table[j]; ++ oob->size--; ++#if DEBUG_FEATURES ++ if (__bounds_print_oob_pointers) ++ printf ++ ("DELETED FROM OOB-TABLE VALUE %p, OBJECT %p, PTR %p" ++ " '%s'\n", oob->table[j]->oob_ptr_value, obj, oob_list, ++ obj->name ? obj->name : "(unnamed)"); ++#endif ++#if COLLECT_STATS ++ ++__bounds_stats_delete_oob_table; ++#endif ++ } ++ else ++ oob->table[k++] = oob->table[j]; ++ break; ++ } ++ } ++} ++ ++/* For debugging oob pointers. */ ++ ++void __bounds_print_oob_entries (void); ++ ++void ++__bounds_print_oob_entries (void) ++{ ++ int i; ++ int j; ++ int size = 0; ++ struct oob_hashtable *oob; ++ ++ for (i = 0; i < HASH_SIZE; i++) ++ size += oob_hashtable[i].size; ++ printf ("Total of %d out of bound objects\n", size); ++ for (i = 0; i < HASH_SIZE; i++) ++ { ++ oob = &oob_hashtable[i]; ++ size = oob->size; ++ for (j = 0; j < size; j++) ++ printf ("VALUE %p, OBJECT %p, PTR %p '%s' %s:%d BASE %p \n", ++ oob->table[j]->oob_ptr_value, ++ oob->table[j]->obj, oob->table[j], ++ oob->table[j]->obj->name ? oob->table[j]->obj-> ++ name : "(unnamed)", ++ oob->table[j]->obj->filename ? oob->table[j]->obj-> ++ filename : "??", oob->table[j]->obj->line, ++ oob->table[j]->obj->base); ++ } ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/objects.h gcc-4.0.2/gcc/bounds/lib/objects.h +--- gcc-4.0.2.org/gcc/bounds/lib/objects.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/objects.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,96 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/objects.h ++ Summary: ++ Format of the tree of memory objects used by the library. ++ Other notes: ++ This file is shared with `tree/buildtree.c'. ++ Author Date Notes ++ RWMJ 13/1/95 Copied this out of `bounds-lib.h' ++ RWMJ 9/2/95 Modified slightly for use with splay trees. ++*/ ++ ++#ifndef _BOUNDS_OBJECT_H_ ++#define _BOUNDS_OBJECT_H_ ++ ++#define SPLAY_COUNT_OPERATIONS 0 /* Keep splay-tree statistics. */ ++#define SPLAY_STRICT_CHECKING 0 /* Stringent checks (slow). */ ++#define SPLAY_COUNT_STAT 0 /* Do splay statistics. */ ++#define OBJECT_CLASS 0 /* Use trees for object classes */ ++#define OBJECT_COUNT_CLASS 0 /* Do object classes statistics */ ++ ++typedef enum ++{ /* Storage class. */ ++ obj_sclass_static, /* Static, ie. global in low memory. */ ++ obj_sclass_external, /* External objects. */ ++ obj_sclass_stack, /* On the stack. */ ++ obj_sclass_heap /* On the heap. */ ++} obj_sclass; ++ ++/* The first three values of this structure are used in c-bounds.c. */ ++ ++typedef struct object ++{ ++ void *base; /* Points to base of the object. */ ++ void *extent; /* Points to last byte in object + 1. */ ++ size_t size; /* Size of the object. */ ++ struct object *left, *right; /* Left/right in tree. */ ++ struct object *parent; /* Parent of this tree (NULL if root). */ ++ struct object *heap_next; /* next heap object. */ ++ struct object *next; /* Next param or stack object. Used in ++ function.c */ ++ unsigned char left_of_parent; /* Whether on left or right of parent. */ ++ unsigned char no_padding; /* This is for parameters where no padding ++ bytes are added after the object. */ ++ unsigned char oob_pointer; /* Flag set when an oob pointer is generated ++ from the object. */ ++ obj_sclass sclass:2; /* Storage class. */ ++ unsigned int align_mask:1; /* Flag is set is align is power of two. */ ++ unsigned int:5; /* Spare. */ ++ size_t align; /* Size of elements in the object. */ ++ const char *filename; /* Place where object was constructed. */ ++ int line; ++ const char *name; /* Name of the object. */ ++ ++#if defined (SPLAY_COUNT_OPERATIONS) || defined (SPLAY_COUNT_STAT) ++ unsigned hits; /* Number of time this object has been found ++ by tree_lookup or tree_lookup_base fns. */ ++ unsigned steps; /* maximum steps to find object. */ ++#endif ++} object; ++ ++/* This structure describes a whole splay tree. The root node in a splay ++ tree changes often. */ ++ ++typedef struct ++{ ++#if OBJECT_CLASS ++ void *min; ++ void *max; ++#endif ++ object *root; ++} tree; ++ ++typedef struct ++{ ++ object *obj; /* pointer to referent object */ ++ void *oob_ptr_value; /* value of out-of-bounds pointer */ ++} oob_object; ++ ++#endif /* _BOUNDS_OBJECT_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/obstack.c gcc-4.0.2/gcc/bounds/lib/obstack.c +--- gcc-4.0.2.org/gcc/bounds/lib/obstack.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/obstack.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,475 @@ ++/* obstack.c - subroutines used implicitly by object stack macros ++ Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc. ++ ++This file is part of the GNU C Library. Its master source is NOT part of ++the C library, however. The master source lives in /gd/gnu/lib. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++#include "obstack.h" ++ ++/* This is just to get __GNU_LIBRARY__ defined. */ ++#include <stdio.h> ++ ++/* Comment out all this code if we are using the GNU C Library, and are not ++ actually compiling the library itself. This code is part of the GNU C ++ Library, but also included in many other GNU distributions. Compiling ++ and linking in this code is a waste when using the GNU C library ++ (especially if it is a shared library). Rather than having every GNU ++ program understand `configure --with-gnu-libc' and omit the object files, ++ it is simpler to just do this in the source for each such file. */ ++ ++#if defined (_LIBC) || !defined (__GNU_LIBRARY__) ++ ++ ++#ifdef __STDC__ ++#define POINTER void * ++#else ++#define POINTER char * ++#endif ++ ++/* Determine default alignment. */ ++struct fooalign ++{ ++ char x; ++ double d; ++}; ++#define DEFAULT_ALIGNMENT \ ++ ((PTR_INT_TYPE) ((char *)&((struct fooalign *) 0)->d - (char *)0)) ++/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. ++ But in fact it might be less smart and round addresses to as much as ++ DEFAULT_ROUNDING. So we prepare for it to do that. */ ++union fooround ++{ ++ long x; ++ double d; ++}; ++#define DEFAULT_ROUNDING (sizeof (union fooround)) ++ ++/* When we copy a long block of data, this is the unit to do it with. ++ On some machines, copying successive ints does not work; ++ in such a case, redefine COPYING_UNIT to `long' (if that works) ++ or `char' as a last resort. */ ++#ifndef COPYING_UNIT ++#define COPYING_UNIT int ++#endif ++ ++/* The non-GNU-C macros copy the obstack into this global variable ++ to avoid multiple evaluation. */ ++ ++struct obstack *_obstack; ++ ++/* Define a macro that either calls functions with the traditional malloc/free ++ calling interface, or calls functions with the mmalloc/mfree interface ++ (that adds an extra first argument), based on the state of use_extra_arg. ++ For free, do not use ?:, since some compilers, like the MIPS compilers, ++ do not allow (expr) ? void : void. */ ++ ++#define CALL_CHUNKFUN(h, size) \ ++ (((h) -> use_extra_arg) \ ++ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ ++ : (*(h)->chunkfun) ((size))) ++ ++#define CALL_FREEFUN(h, old_chunk) \ ++ do { \ ++ if ((h) -> use_extra_arg) \ ++ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ ++ else \ ++ (*(h)->freefun) ((old_chunk)); \ ++ } while (0) ++ ++ ++/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). ++ Objects start on multiples of ALIGNMENT (0 means use default). ++ CHUNKFUN is the function to use to allocate chunks, ++ and FREEFUN the function to free them. ++ ++ Return nonzero if successful, zero if out of memory. ++ To recover from an out of memory error, ++ free up some memory, then call this again. */ ++ ++int ++_obstack_begin (struct obstack *h, int size, int alignment, ++ POINTER (*chunkfun) (), void (*freefun) ()) ++{ ++ register struct _obstack_chunk *chunk; /* points to new chunk */ ++ ++ if (alignment == 0) ++ alignment = DEFAULT_ALIGNMENT; ++ if (size == 0) ++ /* Default size is what GNU malloc can fit in a 4096-byte block. */ ++ { ++ /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. ++ Use the values for range checking, because if range checking is off, ++ the extra bytes won't be missed terribly, but if range checking is on ++ and we used a larger request, a whole extra 4096 bytes would be ++ allocated. ++ ++ These number are irrelevant to the new GNU malloc. I suspect it is ++ less sensitive to the size of the request. */ ++ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) ++ + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); ++ size = 4096 - extra; ++ } ++ ++ h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; ++ h->freefun = freefun; ++ h->chunk_size = size; ++ h->alignment_mask = alignment - 1; ++ h->use_extra_arg = 0; ++ ++ chunk = h->chunk = CALL_CHUNKFUN (h, h->chunk_size); ++ if (!chunk) ++ { ++ h->alloc_failed = 1; ++ return 0; ++ } ++ h->alloc_failed = 0; ++ h->next_free = h->object_base = chunk->contents; ++ h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; ++ chunk->prev = 0; ++ /* The initial chunk now contains no empty object. */ ++ h->maybe_empty_object = 0; ++ return 1; ++} ++ ++int ++_obstack_begin_1 (struct obstack *h, int size, int alignment, ++ POINTER (*chunkfun) (), void (*freefun) (), POINTER arg) ++{ ++ register struct _obstack_chunk *chunk; /* points to new chunk */ ++ ++ if (alignment == 0) ++ alignment = DEFAULT_ALIGNMENT; ++ if (size == 0) ++ /* Default size is what GNU malloc can fit in a 4096-byte block. */ ++ { ++ /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. ++ Use the values for range checking, because if range checking is off, ++ the extra bytes won't be missed terribly, but if range checking is on ++ and we used a larger request, a whole extra 4096 bytes would be ++ allocated. ++ ++ These number are irrelevant to the new GNU malloc. I suspect it is ++ less sensitive to the size of the request. */ ++ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) ++ + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); ++ size = 4096 - extra; ++ } ++ ++ h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; ++ h->freefun = freefun; ++ h->chunk_size = size; ++ h->alignment_mask = alignment - 1; ++ h->extra_arg = arg; ++ h->use_extra_arg = 1; ++ ++ chunk = h->chunk = CALL_CHUNKFUN (h, h->chunk_size); ++ if (!chunk) ++ { ++ h->alloc_failed = 1; ++ return 0; ++ } ++ h->alloc_failed = 0; ++ h->next_free = h->object_base = chunk->contents; ++ h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; ++ chunk->prev = 0; ++ /* The initial chunk now contains no empty object. */ ++ h->maybe_empty_object = 0; ++ return 1; ++} ++ ++/* Allocate a new current chunk for the obstack *H ++ on the assumption that LENGTH bytes need to be added ++ to the current object, or a new object of length LENGTH allocated. ++ Copies any partial object from the end of the old chunk ++ to the beginning of the new one. */ ++ ++void ++_obstack_newchunk (struct obstack *h, int length) ++{ ++ register struct _obstack_chunk *old_chunk = h->chunk; ++ register struct _obstack_chunk *new_chunk; ++ register long new_size; ++ register int obj_size = h->next_free - h->object_base; ++ register int i; ++ int already; ++ ++ /* Compute size for new chunk. */ ++ new_size = (obj_size + length) + (obj_size >> 3) + 100; ++ if (new_size < h->chunk_size) ++ new_size = h->chunk_size; ++ ++ /* Allocate and initialize the new chunk. */ ++ new_chunk = CALL_CHUNKFUN (h, new_size); ++ if (!new_chunk) ++ { ++ h->alloc_failed = 1; ++ return; ++ } ++ h->alloc_failed = 0; ++ h->chunk = new_chunk; ++ new_chunk->prev = old_chunk; ++ new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; ++ ++ /* Move the existing object to the new chunk. ++ Word at a time is fast and is safe if the object ++ is sufficiently aligned. */ ++ if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) ++ { ++ for (i = obj_size / sizeof (COPYING_UNIT) - 1; i >= 0; i--) ++ ((COPYING_UNIT *) new_chunk->contents)[i] ++ = ((COPYING_UNIT *) h->object_base)[i]; ++ /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, ++ but that can cross a page boundary on a machine ++ which does not do strict alignment for COPYING_UNITS. */ ++ already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); ++ } ++ else ++ already = 0; ++ /* Copy remaining bytes one by one. */ ++ for (i = already; i < obj_size; i++) ++ new_chunk->contents[i] = h->object_base[i]; ++ ++ /* If the object just copied was the only data in OLD_CHUNK, ++ free that chunk and remove it from the chain. ++ But not if that chunk might contain an empty object. */ ++ if (h->object_base == old_chunk->contents && !h->maybe_empty_object) ++ { ++ new_chunk->prev = old_chunk->prev; ++ CALL_FREEFUN (h, old_chunk); ++ } ++ ++ h->object_base = new_chunk->contents; ++ h->next_free = h->object_base + obj_size; ++ /* The new chunk certainly contains no empty object yet. */ ++ h->maybe_empty_object = 0; ++} ++ ++/* Return nonzero if object OBJ has been allocated from obstack H. ++ This is here for debugging. ++ If you use it in a program, you are probably losing. */ ++ ++#ifdef __STDC__ ++/* Suppress -Wmissing-prototypes warning. We don't want to declare this in ++ obstack.h because it is just for debugging. */ ++int _obstack_allocated_p (struct obstack *h, POINTER obj); ++#endif ++ ++int ++_obstack_allocated_p (struct obstack *h, POINTER obj) ++{ ++ register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ ++ register struct _obstack_chunk *plp; /* point to previous chunk if any */ ++ ++ lp = (h)->chunk; ++ /* We use >= rather than > since the object cannot be exactly at ++ the beginning of the chunk but might be an empty object exactly ++ at the end of an adjacent chunk. */ ++ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) ++ { ++ plp = lp->prev; ++ lp = plp; ++ } ++ return lp != 0; ++} ++ ++/* Free objects in obstack H, including OBJ and everything allocate ++ more recently than OBJ. If OBJ is zero, free everything in H. */ ++ ++#undef obstack_free ++ ++/* This function has two names with identical definitions. ++ This is the first one, called from non-ANSI code. */ ++ ++void ++_obstack_free (struct obstack *h, POINTER obj) ++{ ++ register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ ++ register struct _obstack_chunk *plp; /* point to previous chunk if any */ ++ ++ lp = h->chunk; ++ /* We use >= because there cannot be an object at the beginning of a chunk. ++ But there can be an empty object at that address ++ at the end of another chunk. */ ++ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) ++ { ++ plp = lp->prev; ++ CALL_FREEFUN (h, lp); ++ lp = plp; ++ /* If we switch chunks, we can't tell whether the new current ++ chunk contains an empty object, so assume that it may. */ ++ h->maybe_empty_object = 1; ++ } ++ if (lp) ++ { ++ h->object_base = h->next_free = (char *) (obj); ++ h->chunk_limit = lp->limit; ++ h->chunk = lp; ++ } ++ else if (obj != 0) ++ /* obj is not in any of the chunks! */ ++ abort (); ++} ++ ++/* This function is used from ANSI code. */ ++ ++void ++obstack_free (struct obstack *h, POINTER obj) ++{ ++ register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ ++ register struct _obstack_chunk *plp; /* point to previous chunk if any */ ++ ++ lp = h->chunk; ++ /* We use >= because there cannot be an object at the beginning of a chunk. ++ But there can be an empty object at that address ++ at the end of another chunk. */ ++ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) ++ { ++ plp = lp->prev; ++ CALL_FREEFUN (h, lp); ++ lp = plp; ++ /* If we switch chunks, we can't tell whether the new current ++ chunk contains an empty object, so assume that it may. */ ++ h->maybe_empty_object = 1; ++ } ++ if (lp) ++ { ++ h->object_base = h->next_free = (char *) (obj); ++ h->chunk_limit = lp->limit; ++ h->chunk = lp; ++ } ++ else if (obj != 0) ++ /* obj is not in any of the chunks! */ ++ abort (); ++} ++ ++#if 0 ++/* These are now turned off because the applications do not use it ++ and it uses bcopy via obstack_grow, which causes trouble on sysV. */ ++ ++/* Now define the functional versions of the obstack macros. ++ Define them to simply use the corresponding macros to do the job. */ ++ ++#ifdef __STDC__ ++/* These function definitions do not work with non-ANSI preprocessors; ++ they won't pass through the macro names in parentheses. */ ++ ++/* The function names appear in parentheses in order to prevent ++ the macro-definitions of the names from being expanded there. */ ++ ++POINTER (obstack_base) (obstack) ++ struct obstack *obstack; ++{ ++ return obstack_base (obstack); ++} ++ ++POINTER (obstack_next_free) (obstack) ++ struct obstack *obstack; ++{ ++ return obstack_next_free (obstack); ++} ++ ++int (obstack_object_size) (obstack) ++ struct obstack *obstack; ++{ ++ return obstack_object_size (obstack); ++} ++ ++int (obstack_room) (obstack) ++ struct obstack *obstack; ++{ ++ return obstack_room (obstack); ++} ++ ++void (obstack_grow) (obstack, pointer, length) ++ struct obstack *obstack; ++ POINTER pointer; ++ int length; ++{ ++ obstack_grow (obstack, pointer, length); ++} ++ ++void (obstack_grow0) (obstack, pointer, length) ++ struct obstack *obstack; ++ POINTER pointer; ++ int length; ++{ ++ obstack_grow0 (obstack, pointer, length); ++} ++ ++void (obstack_1grow) (obstack, character) ++ struct obstack *obstack; ++ int character; ++{ ++ obstack_1grow (obstack, character); ++} ++ ++void (obstack_blank) (obstack, length) ++ struct obstack *obstack; ++ int length; ++{ ++ obstack_blank (obstack, length); ++} ++ ++void (obstack_1grow_fast) (obstack, character) ++ struct obstack *obstack; ++ int character; ++{ ++ obstack_1grow_fast (obstack, character); ++} ++ ++void (obstack_blank_fast) (obstack, length) ++ struct obstack *obstack; ++ int length; ++{ ++ obstack_blank_fast (obstack, length); ++} ++ ++POINTER (obstack_finish) (obstack) ++ struct obstack *obstack; ++{ ++ return obstack_finish (obstack); ++} ++ ++POINTER (obstack_alloc) (obstack, length) ++ struct obstack *obstack; ++ int length; ++{ ++ return obstack_alloc (obstack, length); ++} ++ ++POINTER (obstack_copy) (obstack, pointer, length) ++ struct obstack *obstack; ++ POINTER pointer; ++ int length; ++{ ++ return obstack_copy (obstack, pointer, length); ++} ++ ++POINTER (obstack_copy0) (obstack, pointer, length) ++ struct obstack *obstack; ++ POINTER pointer; ++ int length; ++{ ++ return obstack_copy0 (obstack, pointer, length); ++} ++ ++#endif /* __STDC__ */ ++ ++#endif /* 0 */ ++ ++#endif /* _LIBC or not __GNU_LIBRARY__. */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/obstack.h gcc-4.0.2/gcc/bounds/lib/obstack.h +--- gcc-4.0.2.org/gcc/bounds/lib/obstack.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/obstack.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,517 @@ ++/* obstack.h - object stack macros ++ Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc. ++ ++This file is part of the GNU C Library. Its master source is NOT part of ++the C library, however. The master source lives in /gd/gnu/lib. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++/* Summary: ++ ++All the apparent functions defined here are macros. The idea ++is that you would use these pre-tested macros to solve a ++very specific set of problems, and they would run fast. ++Caution: no side-effects in arguments please!! They may be ++evaluated MANY times!! ++ ++These macros operate a stack of objects. Each object starts life ++small, and may grow to maturity. (Consider building a word syllable ++by syllable.) An object can move while it is growing. Once it has ++been "finished" it never changes address again. So the "top of the ++stack" is typically an immature growing object, while the rest of the ++stack is of mature, fixed size and fixed address objects. ++ ++These routines grab large chunks of memory, using a function you ++supply, called `obstack_chunk_alloc'. On occasion, they free chunks, ++by calling `obstack_chunk_free'. You must define them and declare ++them before using any obstack macros. ++ ++Each independent stack is represented by a `struct obstack'. ++Each of the obstack macros expects a pointer to such a structure ++as the first argument. ++ ++One motivation for this package is the problem of growing char strings ++in symbol tables. Unless you are "fascist pig with a read-only mind" ++--Gosper's immortal quote from HAKMEM item 154, out of context--you ++would not like to put any arbitrary upper limit on the length of your ++symbols. ++ ++In practice this often means you will build many short symbols and a ++few long symbols. At the time you are reading a symbol you don't know ++how long it is. One traditional method is to read a symbol into a ++buffer, realloc()ating the buffer every time you try to read a symbol ++that is longer than the buffer. This is beaut, but you still will ++want to copy the symbol from the buffer to a more permanent ++symbol-table entry say about half the time. ++ ++With obstacks, you can work differently. Use one obstack for all symbol ++names. As you read a symbol, grow the name in the obstack gradually. ++When the name is complete, finalize it. Then, if the symbol exists already, ++free the newly read name. ++ ++The way we do this is to take a large chunk, allocating memory from ++low addresses. When you want to build a symbol in the chunk you just ++add chars above the current "high water mark" in the chunk. When you ++have finished adding chars, because you got to the end of the symbol, ++you know how long the chars are, and you can create a new object. ++Mostly the chars will not burst over the highest address of the chunk, ++because you would typically expect a chunk to be (say) 100 times as ++long as an average object. ++ ++In case that isn't clear, when we have enough chars to make up ++the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) ++so we just point to it where it lies. No moving of chars is ++needed and this is the second win: potentially long strings need ++never be explicitly shuffled. Once an object is formed, it does not ++change its address during its lifetime. ++ ++When the chars burst over a chunk boundary, we allocate a larger ++chunk, and then copy the partly formed object from the end of the old ++chunk to the beginning of the new larger chunk. We then carry on ++accreting characters to the end of the object as we normally would. ++ ++A special macro is provided to add a single char at a time to a ++growing object. This allows the use of register variables, which ++break the ordinary 'growth' macro. ++ ++Summary: ++ We allocate large chunks. ++ We carve out one object at a time from the current chunk. ++ Once carved, an object never moves. ++ We are free to append data of any size to the currently ++ growing object. ++ Exactly one object is growing in an obstack at any one time. ++ You can run one obstack per control block. ++ You may have as many control blocks as you dare. ++ Because of the way we do it, you can `unwind' an obstack ++ back to a previous state. (You may remove objects much ++ as you would with a stack.) ++*/ ++ ++ ++/* Don't do the contents of this file more than once. */ ++ ++#ifndef __OBSTACK_H__ ++#define __OBSTACK_H__ ++ ++/* We use subtraction of (char *)0 instead of casting to int ++ because on word-addressable machines a simple cast to int ++ may ignore the byte-within-word field of the pointer. */ ++ ++#ifndef __PTR_TO_INT ++#define __PTR_TO_INT(P) ((P) - (char *)0) ++#endif ++ ++#ifndef __INT_TO_PTR ++#define __INT_TO_PTR(P) ((P) + (char *)0) ++#endif ++ ++/* We need the type of the resulting object. In ANSI C it is ptrdiff_t ++ but in traditional C it is usually long. If we are in ANSI C and ++ don't already have ptrdiff_t get it. */ ++ ++#if defined (__STDC__) && ! defined (offsetof) ++#if defined (__GNUC__) && defined (IN_GCC) ++/* On Next machine, the system's stddef.h screws up if included ++ after we have defined just ptrdiff_t, so include all of stddef.h. ++ Otherwise, define just ptrdiff_t, which is all we need. */ ++#ifndef __NeXT__ ++#define __need_ptrdiff_t ++#endif ++#endif ++ ++#include <stddef.h> ++#endif ++ ++#ifdef __STDC__ ++#define PTR_INT_TYPE ptrdiff_t ++#else ++#define PTR_INT_TYPE long ++#endif ++ ++struct _obstack_chunk /* Lives at front of each chunk. */ ++{ ++ char *limit; /* 1 past end of this chunk */ ++ struct _obstack_chunk *prev; /* address of prior chunk or NULL */ ++ char contents[4]; /* objects begin here */ ++}; ++ ++struct obstack /* control current object in current chunk */ ++{ ++ long chunk_size; /* preferred size to allocate chunks in */ ++ struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ ++ char *object_base; /* address of object we are building */ ++ char *next_free; /* where to add next char to current object */ ++ char *chunk_limit; /* address of char after current chunk */ ++ PTR_INT_TYPE temp; /* Temporary for some macros. */ ++ int alignment_mask; /* Mask of alignment for each object. */ ++ struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */ ++ void (*freefun) (); /* User's function to free a chunk. */ ++ char *extra_arg; /* first arg for chunk alloc/dealloc funcs */ ++ unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ ++ unsigned maybe_empty_object:1; /* There is a possibility that the current ++ chunk contains a zero-length object. This ++ prevents freeing the chunk if we allocate ++ a bigger chunk to replace it. */ ++ unsigned alloc_failed:1; /* chunk alloc func returned 0 */ ++}; ++ ++/* Declare the external functions we use; they are in obstack.c. */ ++ ++#ifdef __STDC__ ++extern void _obstack_newchunk (struct obstack *, int); ++extern void _obstack_free (struct obstack *, void *); ++extern int _obstack_begin (struct obstack *, int, int, ++ void *(*)(), void (*)()); ++extern int _obstack_begin_1 (struct obstack *, int, int, ++ void *(*)(), void (*)(), void *); ++#else ++extern void _obstack_newchunk (); ++extern void _obstack_free (); ++extern int _obstack_begin (); ++extern int _obstack_begin_1 (); ++#endif ++ ++#ifdef __STDC__ ++ ++/* Do the function-declarations after the structs ++ but before defining the macros. */ ++ ++void obstack_init (struct obstack *obstack); ++ ++void *obstack_alloc (struct obstack *obstack, int size); ++ ++void *obstack_copy (struct obstack *obstack, void *address, int size); ++void *obstack_copy0 (struct obstack *obstack, void *address, int size); ++ ++void obstack_free (struct obstack *obstack, void *block); ++ ++void obstack_blank (struct obstack *obstack, int size); ++ ++void obstack_grow (struct obstack *obstack, void *data, int size); ++void obstack_grow0 (struct obstack *obstack, void *data, int size); ++ ++void obstack_1grow (struct obstack *obstack, int data_char); ++void obstack_ptr_grow (struct obstack *obstack, void *data); ++void obstack_int_grow (struct obstack *obstack, int data); ++ ++void *obstack_finish (struct obstack *obstack); ++ ++int obstack_object_size (struct obstack *obstack); ++ ++int obstack_room (struct obstack *obstack); ++void obstack_1grow_fast (struct obstack *obstack, int data_char); ++void obstack_ptr_grow_fast (struct obstack *obstack, void *data); ++void obstack_int_grow_fast (struct obstack *obstack, int data); ++void obstack_blank_fast (struct obstack *obstack, int size); ++ ++void *obstack_base (struct obstack *obstack); ++void *obstack_next_free (struct obstack *obstack); ++int obstack_alignment_mask (struct obstack *obstack); ++int obstack_chunk_size (struct obstack *obstack); ++ ++#endif /* __STDC__ */ ++ ++/* Non-ANSI C cannot really support alternative functions for these macros, ++ so we do not declare them. */ ++ ++/* Pointer to beginning of object being allocated or to be allocated next. ++ Note that this might not be the final address of the object ++ because a new chunk might be needed to hold the final size. */ ++ ++#define obstack_base(h) ((h)->alloc_failed ? 0 : (h)->object_base) ++ ++/* Size for allocating ordinary chunks. */ ++ ++#define obstack_chunk_size(h) ((h)->chunk_size) ++ ++/* Pointer to next byte not yet allocated in current chunk. */ ++ ++#define obstack_next_free(h) ((h)->alloc_failed ? 0 : (h)->next_free) ++ ++/* Mask specifying low bits that should be clear in address of an object. */ ++ ++#define obstack_alignment_mask(h) ((h)->alignment_mask) ++ ++#define obstack_init(h) \ ++ _obstack_begin ((h), 0, 0, \ ++ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ++ ++#define obstack_begin(h, size) \ ++ _obstack_begin ((h), (size), 0, \ ++ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ++ ++#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ ++ _obstack_begin ((h), (size), (alignment), \ ++ (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) ++ ++#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ ++ _obstack_begin_1 ((h), (size), (alignment), \ ++ (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) ++ ++#define obstack_chunkfun(h, newchunkfun) \ ++ ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) ++ ++#define obstack_freefun(h, newfreefun) \ ++ ((h) -> freefun = (void (*)()) (newfreefun)) ++ ++#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar) ++ ++#define obstack_blank_fast(h,n) ((h)->next_free += (n)) ++ ++#if defined (__GNUC__) && defined (__STDC__) ++#if __GNUC__ < 2 ++#define __extension__ ++#endif ++ ++/* For GNU C, if not -traditional, ++ we can define these macros to compute all args only once ++ without using a global variable. ++ Also, we can avoid using the `temp' slot, to make faster code. */ ++ ++#define obstack_object_size(OBSTACK) \ ++ __extension__ \ ++ ({ struct obstack *__o = (OBSTACK); \ ++ __o->alloc_failed ? 0 : \ ++ (unsigned) (__o->next_free - __o->object_base); }) ++ ++#define obstack_room(OBSTACK) \ ++ __extension__ \ ++ ({ struct obstack *__o = (OBSTACK); \ ++ (unsigned) (__o->chunk_limit - __o->next_free); }) ++ ++#define obstack_grow(OBSTACK,where,length) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ int __len = (length); \ ++ if (__o->next_free + __len > __o->chunk_limit) \ ++ _obstack_newchunk (__o, __len); \ ++ if (!__o->alloc_failed) \ ++ { \ ++ __bounds_memmove ((char *) (where), __o->next_free, __len); \ ++ __o->next_free += __len; \ ++ } \ ++ (void) 0; }) ++ ++#define obstack_grow0(OBSTACK,where,length) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ int __len = (length); \ ++ if (__o->next_free + __len + 1 > __o->chunk_limit) \ ++ _obstack_newchunk (__o, __len + 1); \ ++ if (!__o->alloc_failed) \ ++ { \ ++ __bounds_memmove ((char *) (where), __o->next_free, __len); \ ++ __o->next_free += __len; \ ++ *(__o->next_free)++ = 0; \ ++ } \ ++ (void) 0; }) ++ ++#define obstack_1grow(OBSTACK,datum) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ if (__o->next_free + 1 > __o->chunk_limit) \ ++ _obstack_newchunk (__o, 1); \ ++ if (!__o->alloc_failed) \ ++ *(__o->next_free)++ = (datum); \ ++ (void) 0; }) ++ ++/* These assume that the obstack alignment is good enough for pointers or ints, ++ and that the data added so far to the current object ++ shares that much alignment. */ ++ ++#define obstack_ptr_grow(OBSTACK,datum) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ ++ _obstack_newchunk (__o, sizeof (void *)); \ ++ if (!__o->alloc_failed) \ ++ *((void **)__o->next_free)++ = ((void *)datum); \ ++ (void) 0; }) ++ ++#define obstack_int_grow(OBSTACK,datum) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ if (__o->next_free + sizeof (int) > __o->chunk_limit) \ ++ _obstack_newchunk (__o, sizeof (int)); \ ++ if (!__o->alloc_failed) \ ++ *((int *)__o->next_free)++ = ((int)datum); \ ++ (void) 0; }) ++ ++#define obstack_ptr_grow_fast(h,aptr) (*((void **)(h)->next_free)++ = (void *)aptr) ++#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint) ++ ++#define obstack_blank(OBSTACK,length) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ int __len = (length); \ ++ if (__o->chunk_limit - __o->next_free < __len) \ ++ _obstack_newchunk (__o, __len); \ ++ if (!__o->alloc_failed) \ ++ __o->next_free += __len; \ ++ (void) 0; }) ++ ++#define obstack_alloc(OBSTACK,length) \ ++__extension__ \ ++({ struct obstack *__h = (OBSTACK); \ ++ obstack_blank (__h, (length)); \ ++ obstack_finish (__h); }) ++ ++#define obstack_copy(OBSTACK,where,length) \ ++__extension__ \ ++({ struct obstack *__h = (OBSTACK); \ ++ obstack_grow (__h, (where), (length)); \ ++ obstack_finish (__h); }) ++ ++#define obstack_copy0(OBSTACK,where,length) \ ++__extension__ \ ++({ struct obstack *__h = (OBSTACK); \ ++ obstack_grow0 (__h, (where), (length)); \ ++ obstack_finish (__h); }) ++ ++/* The local variable is named __o1 to avoid a name conflict ++ when obstack_blank is called. */ ++#define obstack_finish(OBSTACK) \ ++__extension__ \ ++({ struct obstack *__o1 = (OBSTACK); \ ++ void *value; \ ++ if (__o1->alloc_failed) \ ++ value = 0; \ ++ else \ ++ { \ ++ value = (void *) __o1->object_base; \ ++ if (__o1->next_free == value) \ ++ __o1->maybe_empty_object = 1; \ ++ __o1->next_free \ ++ = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ ++ & ~ (__o1->alignment_mask)); \ ++ if (__o1->next_free - (char *)__o1->chunk \ ++ > __o1->chunk_limit - (char *)__o1->chunk) \ ++ __o1->next_free = __o1->chunk_limit; \ ++ __o1->object_base = __o1->next_free; \ ++ } \ ++ value; }) ++ ++#define obstack_free(OBSTACK, OBJ) \ ++__extension__ \ ++({ struct obstack *__o = (OBSTACK); \ ++ void *__obj = (OBJ); \ ++ if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ ++ __o->next_free = __o->object_base = __obj; \ ++ else (obstack_free) (__o, __obj); }) ++ ++#else /* not __GNUC__ or not __STDC__ */ ++ ++#define obstack_object_size(h) \ ++ (unsigned) ((h)->alloc_failed ? 0 : (h)->next_free - (h)->object_base) ++ ++#define obstack_room(h) \ ++ (unsigned) ((h)->chunk_limit - (h)->next_free) ++ ++/* Note that the call to _obstack_newchunk is enclosed in (..., 0) ++ so that we can avoid having void expressions ++ in the arms of the conditional expression. ++ Casting the third operand to void was tried before, ++ but some compilers won't accept it. */ ++ ++#define obstack_grow(h,where,length) \ ++( (h)->temp = (length), \ ++ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ++ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ (__bounds_memmove ((char *) (where), (h)->next_free, (h)->temp), \ ++ (h)->next_free += (h)->temp))) ++ ++#define obstack_grow0(h,where,length) \ ++( (h)->temp = (length), \ ++ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ ++ ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ (__bounds_memmove ((char *) (where), (h)->next_free, (h)->temp), \ ++ (h)->next_free += (h)->temp, \ ++ *((h)->next_free)++ = 0))) ++ ++#define obstack_1grow(h,datum) \ ++( (((h)->next_free + 1 > (h)->chunk_limit) \ ++ ? (_obstack_newchunk ((h), 1), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ (*((h)->next_free)++ = (datum)))) ++ ++#define obstack_ptr_grow(h,datum) \ ++( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ++ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ (*((char **)(((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *)datum)))) ++ ++#define obstack_int_grow(h,datum) \ ++( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ++ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ (*((int *)(((h)->next_free+=sizeof(int))-sizeof(int))) = ((int)datum)))) ++ ++#define obstack_ptr_grow_fast(h,aptr) (*((char **)(h)->next_free)++ = (char *)aptr) ++#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint) ++ ++#define obstack_blank(h,length) \ ++( (h)->temp = (length), \ ++ (((h)->chunk_limit - (h)->next_free < (h)->temp) \ ++ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ ++ ((h)->alloc_failed ? 0 : \ ++ ((h)->next_free += (h)->temp))) ++ ++#define obstack_alloc(h,length) \ ++ (obstack_blank ((h), (length)), obstack_finish ((h))) ++ ++#define obstack_copy(h,where,length) \ ++ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) ++ ++#define obstack_copy0(h,where,length) \ ++ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) ++ ++#define obstack_finish(h) \ ++( (h)->alloc_failed ? 0 : \ ++ (((h)->next_free == (h)->object_base \ ++ ? (((h)->maybe_empty_object = 1), 0) \ ++ : 0), \ ++ (h)->temp = __PTR_TO_INT ((h)->object_base), \ ++ (h)->next_free \ ++ = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ ++ & ~ ((h)->alignment_mask)), \ ++ (((h)->next_free - (char *)(h)->chunk \ ++ > (h)->chunk_limit - (char *)(h)->chunk) \ ++ ? ((h)->next_free = (h)->chunk_limit) : 0), \ ++ (h)->object_base = (h)->next_free, \ ++ __INT_TO_PTR ((h)->temp))) ++ ++#ifdef __STDC__ ++#define obstack_free(h,obj) \ ++( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \ ++ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ ++ ? (int) ((h)->next_free = (h)->object_base \ ++ = (h)->temp + (char *) (h)->chunk) \ ++ : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) ++#else ++#define obstack_free(h,obj) \ ++( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \ ++ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ ++ ? (int) ((h)->next_free = (h)->object_base \ ++ = (h)->temp + (char *) (h)->chunk) \ ++ : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) ++#endif ++ ++#endif /* not __GNUC__ or not __STDC__ */ ++ ++#endif /* not __OBSTACK_H__ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/print.c gcc-4.0.2/gcc/bounds/lib/print.c +--- gcc-4.0.2.org/gcc/bounds/lib/print.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/print.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,337 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/print.c ++ Summary: ++ Simple printf/vprintf implementations that are guaranteed not to ++ use malloc. (Calling malloc while printing an error message might ++ cause recursion). ++ Other notes: ++ The following specifiers are implemented: ++ %p pointer, prints NULL, ILLEGAL or value (as hex) ++ %d signed integer ++ %u unsigned integer ++ %s string, prints "(null)" if NULL pointer passed ++ %x hexadecimal integer ++ Author Date Notes ++ RWMJ 5/12/94 Initial implementation. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <stdarg.h> ++#include <fcntl.h> ++ ++#include "bounds-lib.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* Note: 5/10/95. OSF/1 3.0 appears to allow reentrant calls to printf and ++ friends. So this isn't needed ... */ ++ ++#if !defined(__osf__) ++ ++#if defined(printf) ++#undef printf ++#endif ++#if defined(vprintf) ++#undef vprintf ++#endif ++ ++/* low level functions to convert numbers to strings. */ ++ ++static __inline__ char * ++_ul_to_a (unsigned long u, char *buf) ++{ ++ if (u != 0) ++ { ++ unsigned long n = u % 10; ++ buf = _ul_to_a (u / 10, buf); ++ *buf++ = n + '0'; ++ } ++ return buf; ++} ++ ++static __inline__ void ++l_to_a (long i, char *buf) ++{ ++ if (i == 0) ++ *buf++ = '0'; ++ else ++ { ++ if (i < 0) ++ { ++ *buf++ = '-'; ++ i = -i; ++ } ++ buf = _ul_to_a ((unsigned long) i, buf); ++ } ++ *buf = 0; ++} ++ ++static __inline__ void ++ul_to_a (unsigned long u, char *buf) ++{ ++ if (u == 0) ++ *buf++ = '0'; ++ else ++ buf = _ul_to_a (u, buf); ++ *buf = 0; ++} ++ ++/* Low level functions to manage a simple output buffer. */ ++ ++static __inline__ void ++printchar (char c) ++{ ++ char *cp; ++ char *new; ++ int new_fd; ++ int flags; ++ static int fd = 2, first = 1; ++ static char buffer[256], *next = buffer; ++ ++ *next++ = c; ++ if (c == '\n' || next - buffer == 256) ++ { ++ if (first) ++ { ++ first = 0; ++ if (__bounds_error_filename) ++ { ++ cp = __bounds_error_filename; ++ while (*cp) ++ { ++ if (cp[0] == '%' && cp[1] == 'p') ++ { ++ new = ++ __bounds_malloc (__bounds_strlen ++ (__bounds_error_filename) + 10); ++ if (new) ++ { ++ __bounds_strncpy (new, __bounds_error_filename, ++ cp - __bounds_error_filename); ++ ul_to_a (getpid (), ++ &new[cp - __bounds_error_filename]); ++ ++ __bounds_strcat (new, cp + 2); ++ cp = new + (cp - __bounds_error_filename); ++ __bounds_error_filename = new; ++ } ++ else ++ cp++; ++ } ++ else ++ cp++; ++ } ++ flags = O_WRONLY | O_CREAT; ++ if (__bounds_error_filename_append) ++ flags |= O_APPEND; ++ else ++ flags |= O_TRUNC; ++#ifdef O_LARGEFILE ++ flags |= O_LARGEFILE; ++#endif ++ new_fd = open (__bounds_error_filename, flags, 0644); ++ if (new_fd >= 0) ++ fd = new_fd; ++ } ++ } ++ /* Flush output buffer. */ ++ write (fd, buffer, next - buffer); ++ next = buffer; ++ } ++} ++ ++/* Print a hex number. `width' is the number of digits (ie. number of ++ hex nybbles) to print. */ ++ ++static __inline__ void ++xtoa (unsigned long u, char *buf, int width) ++{ ++ static char hexdigit[16] = { '0', '1', '2', '3', '4', '5', ++ '6', '7', '8', '9', 'a', 'b', ++ 'c', 'd', 'e', 'f' ++ }; ++ int i; ++ unsigned d; ++ unsigned long top_nybble_mask = 0xF << ((width - 1) * 4); ++ ++ for (i = width - 1; i >= 1; --i) ++ { ++ if (u & top_nybble_mask) ++ break; ++ u <<= 4; ++ } ++ for (; i >= 0; --i) ++ { ++ d = u >> ((width - 1) * 4); ++ u <<= 4; ++ *buf++ = hexdigit[d]; ++ } ++ *buf = 0; ++ return; ++} ++ ++/* Like vprintf. */ ++ ++void ++__bounds_vprintf (const char *format, va_list args) ++{ ++ const char *p; ++ char *s; ++ int i; ++ int prec; ++ char pchar; ++ unsigned u; ++ void *vp; ++ char buf[64]; ++ ++ __bounds_debug_no_checking = 1; ++ p = format; ++ while (*p) ++ { ++ if (*p != '%') ++ { ++ printchar (*p); ++ p++; ++ } ++ else ++ { ++ p++; ++ prec = 0; ++ pchar = ' '; ++ if (*p == '0') ++ pchar = *p++; /* check for '%02d' */ ++ while (*p >= '0' && *p <= '9') /* calculate precision */ ++ prec = prec * 10 + *p++ - '0'; ++ switch (*p) ++ { ++ case 's': ++ /* String. Print it, or print "(null)" if the pointer passed is ++ NULL. */ ++ s = va_arg (args, char *); ++ if (s == NULL) ++ { ++ prec -= __bounds_strlen ("(null)"); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("(null)"); ++ } ++ else ++ { ++ prec -= __bounds_strlen (s); ++ while (prec-- > 0) ++ printchar (pchar); ++ while (*s) ++ { ++ printchar (*s); ++ ++s; ++ } ++ } ++ break; ++ case 'd': ++ /* Signed integer. */ ++ i = va_arg (args, int); ++ l_to_a (i, buf); ++ prec -= __bounds_strlen (buf); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("%s", buf); ++ break; ++ case 'u': ++ u = va_arg (args, unsigned); ++ ul_to_a (u, buf); ++ prec -= __bounds_strlen (buf); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("%s", buf); ++ break; ++ case 'p': ++ /* Pointer. Print NULL, ILLEGAL or a representation of the ++ pointer. */ ++ vp = va_arg (args, void *); ++ if (vp == NULL) ++ { ++ prec -= __bounds_strlen ("NULL"); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("NULL"); ++ } ++ else if (vp == ILLEGAL) ++ { ++ prec -= __bounds_strlen ("ILLEGAL"); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("ILLEGAL"); ++ } ++ else ++ { ++ xtoa (PTR_TO_UNSIGNED (vp), buf, ++ sizeof (ptr_as_unsigned_t) * 2); ++ prec -= __bounds_strlen ("0x") + __bounds_strlen (buf); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("0x%s", buf); ++ } ++ break; ++ case 'x': ++ /* Hexadecimal integer. */ ++ u = va_arg (args, unsigned); ++ xtoa (u, buf, sizeof (unsigned) * 2); ++ prec -= __bounds_strlen (buf); ++ while (prec-- > 0) ++ printchar (pchar); ++ __bounds_printf ("%s", buf); ++ break; ++ case '%': ++ printchar ('%'); ++ break; ++ case 0: ++ printchar ('\\'); ++ printchar ('0'); ++ break; ++ default: ++ /* Unrecognized format specifier. Print character and advance va ++ pointer along one to ignore that argument. */ ++ printchar (*p); ++ (void) (va_arg (args, int)); ++ } ++ if (*p) ++ p++; ++ } ++ } ++ __bounds_debug_no_checking = 0; ++} ++ ++/* Like printf. */ ++ ++void ++__bounds_printf (const char *format, ...) ++{ ++ va_list args; ++ ++ va_start (args, format); ++ __bounds_vprintf (format, args); ++ va_end (args); ++} ++ ++#endif /* !defined (__osf__) */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/pthread_init.c gcc-4.0.2/gcc/bounds/lib/pthread_init.c +--- gcc-4.0.2.org/gcc/bounds/lib/pthread_init.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/pthread_init.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,104 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * thread/pthread_init.c ++ * Summary: ++ * Init bounds checking for pthread library or signal handlers. ++ * Other notes: ++ * Signal handlers are not turned on by default because it takes ++ * a lot of cpu cycles. Most of the time this extra overhead is ++ * not needed because the user code does not have signal handlers ++ * or the user signal handlers do not call bounds_checking functions. ++ * Author Date Notes ++ * HtB 2/6/99 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#ifdef _REENTRANT ++ ++/* If signal handlers are used set this define to '1' instead of '0'. */ ++ ++#define USE_SIGNAL 0 ++ ++/* If pthread is used set this define to '1' instead of '0'. */ ++ ++#define USE_PTHREAD 1 ++ ++#include <stdio.h> /* NULL */ ++#include <sys/types.h> ++#if USE_PTHREAD ++#include <pthread.h> ++#endif ++ ++extern void __bounds_pthread_init (void); ++ ++#if USE_SIGNAL ++extern int __bounds_mutex_signal; ++#endif ++ ++#if USE_PTHREAD ++static void bounds_mutex_start (void); ++static void bounds_mutex_end (void); ++ ++extern pthread_t (*__bounds_function_thread) (void); ++static pthread_mutex_t bounds_mutex_object; ++#endif ++ ++extern void (*__bounds_mutex_start) (void); ++extern void (*__bounds_mutex_end) (void); ++ ++/* These routine are called to protect static data in the bounds_checking ++ library. */ ++ ++static void ++bounds_mutex_start (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_lock (&bounds_mutex_object); ++#endif ++} ++ ++static void ++bounds_mutex_end (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_unlock (&bounds_mutex_object); ++#endif ++} ++ ++/* Init routine to set up bounds_checking for the pthread library. */ ++ ++void ++__bounds_pthread_init (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_init (&bounds_mutex_object, NULL); ++ __bounds_function_thread = pthread_self; ++#endif ++#if USE_SIGNAL ++ __bounds_mutex_signal = 1; ++#endif ++ __bounds_mutex_start = bounds_mutex_start; ++ __bounds_mutex_end = bounds_mutex_end; ++} ++#else ++void ++__bounds_pthread_init (void) ++{ ++} ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/ralloc.c gcc-4.0.2/gcc/bounds/lib/ralloc.c +--- gcc-4.0.2.org/gcc/bounds/lib/ralloc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/ralloc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,1074 @@ ++/* Block-relocating memory allocator. ++ Copyright (C) 1993 Free Software Foundation, Inc. ++ ++ ++This file is part of the GNU C Library. Its master source is NOT part of ++the C library, however. The master source lives in /gd/gnu/lib. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++/* NOTES: ++ ++ Only relocate the blocs necessary for SIZE in r_alloc_sbrk, ++ rather than all of them. This means allowing for a possible ++ hole between the first bloc and the end of malloc storage. */ ++ ++#ifdef emacs ++ ++#include <config.h> ++#include "lisp.h" /* Needed for VALBITS. */ ++ ++#undef NULL ++ ++/* The important properties of this type are that 1) it's a pointer, and ++ 2) arithmetic on it should work as if the size of the object pointed ++ to has a size of 1. */ ++#if 0 /* Arithmetic on void* is a GCC extension. */ ++#ifdef __STDC__ ++typedef void *POINTER; ++#else ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++typedef char *POINTER; ++ ++#endif ++#endif /* 0 */ ++ ++/* Unconditionally use char * for this. */ ++typedef char *POINTER; ++ ++typedef unsigned long SIZE; ++ ++/* Declared in dispnew.c, this version doesn't screw up if regions ++ overlap. */ ++extern void safe_bcopy (char *, char *, int); ++ ++#include "getpagesize.h" ++ ++#else /* Not emacs. */ ++ ++#include <stddef.h> ++ ++typedef size_t SIZE; ++typedef void *POINTER; ++ ++#include <unistd.h> ++#include <malloc.h> ++#include <string.h> ++ ++#define safe_bcopy(x, y, z) __bounds_memmove (y, x, z) ++ ++#endif /* emacs. */ ++ ++#define NIL ((POINTER) 0) ++ ++/* A flag to indicate whether we have initialized ralloc yet. For ++ Emacs's sake, please do not make this local to malloc_init; on some ++ machines, the dumping procedure makes all static variables ++ read-only. On these machines, the word static is #defined to be ++ the empty string, meaning that r_alloc_initialized becomes an ++ automatic variable, and loses its value each time Emacs is started up. */ ++static int r_alloc_initialized = 0; ++ ++static void r_alloc_init (void); ++ ++/* Declarations for working with the malloc, ralloc, and system breaks. */ ++ ++/* Function to set the real break value. */ ++static POINTER (*real_morecore) (ptrdiff_t); ++ ++/* The break value, as seen by malloc. */ ++static POINTER virtual_break_value; ++ ++/* The address of the end of the last data in use by ralloc, ++ including relocatable blocs as well as malloc data. */ ++static POINTER break_value; ++ ++/* This is the size of a page. We round memory requests to this boundary. */ ++static int page_size; ++ ++/* Whenever we get memory from the system, get this many extra bytes. This ++ must be a multiple of page_size. */ ++static int extra_bytes; ++ ++/* Macros for rounding. Note that rounding to any value is possible ++ by changing the definition of PAGE. */ ++#define PAGE (getpagesize ()) ++#define ALIGNED(addr) (((unsigned long int) (addr) & (page_size - 1)) == 0) ++#define ROUNDUP(size) (((unsigned long int) (size) + page_size - 1) \ ++ & ~(page_size - 1)) ++#define ROUND_TO_PAGE(addr) (addr & (~(page_size - 1))) ++ ++#define MEM_ALIGN sizeof(double) ++#define MEM_ROUNDUP(addr) (((unsigned long int)(addr) + MEM_ALIGN - 1) \ ++ & ~(MEM_ALIGN - 1)) ++ ++/* Data structures of heaps and blocs. */ ++ ++/* The relocatable objects, or blocs, and the malloc data ++ both reside within one or more heaps. ++ Each heap contains malloc data, running from `start' to `bloc_start', ++ and relocatable objects, running from `bloc_start' to `free'. ++ ++ Relocatable objects may relocate within the same heap ++ or may move into another heap; the heaps themselves may grow ++ but they never move. ++ ++ We try to make just one heap and make it larger as necessary. ++ But sometimes we can't do that, because we can't get continguous ++ space to add onto the heap. When that happens, we start a new heap. */ ++ ++typedef struct heap ++{ ++ struct heap *next; ++ struct heap *prev; ++ /* Start of memory range of this heap. */ ++ POINTER start; ++ /* End of memory range of this heap. */ ++ POINTER end; ++ /* Start of relocatable data in this heap. */ ++ POINTER bloc_start; ++ /* Start of unused space in this heap. */ ++ POINTER free; ++ /* First bloc in this heap. */ ++ struct bp *first_bloc; ++ /* Last bloc in this heap. */ ++ struct bp *last_bloc; ++} *heap_ptr; ++ ++#define NIL_HEAP ((heap_ptr) 0) ++#define HEAP_PTR_SIZE (sizeof (struct heap)) ++ ++/* This is the first heap object. ++ If we need additional heap objects, each one resides at the beginning of ++ the space it covers. */ ++static struct heap heap_base; ++ ++/* Head and tail of the list of heaps. */ ++static heap_ptr first_heap, last_heap; ++ ++/* These structures are allocated in the malloc arena. ++ The linked list is kept in order of increasing '.data' members. ++ The data blocks abut each other; if b->next is non-nil, then ++ b->data + b->size == b->next->data. */ ++typedef struct bp ++{ ++ struct bp *next; ++ struct bp *prev; ++ POINTER *variable; ++ POINTER data; ++ SIZE size; ++ POINTER new_data; /* tmporarily used for relocation */ ++ /* Heap this bloc is in. */ ++ struct heap *heap; ++} *bloc_ptr; ++ ++#define NIL_BLOC ((bloc_ptr) 0) ++#define BLOC_PTR_SIZE (sizeof (struct bp)) ++ ++/* Head and tail of the list of relocatable blocs. */ ++static bloc_ptr first_bloc, last_bloc; ++ ++ ++/* Functions to get and return memory from the system. */ ++ ++/* Find the heap that ADDRESS falls within. */ ++ ++static heap_ptr ++find_heap (POINTER address) ++{ ++ heap_ptr heap; ++ ++ for (heap = last_heap; heap; heap = heap->prev) ++ { ++ if (heap->start <= address && address <= heap->end) ++ return heap; ++ } ++ ++ return NIL_HEAP; ++} ++ ++/* Find SIZE bytes of space in a heap. ++ Try to get them at ADDRESS (which must fall within some heap's range) ++ if we can get that many within one heap. ++ ++ If enough space is not presently available in our reserve, this means ++ getting more page-aligned space from the system. If the retuned space ++ is not contiguos to the last heap, allocate a new heap, and append it ++ ++ obtain does not try to keep track of whether space is in use ++ or not in use. It just returns the address of SIZE bytes that ++ fall within a single heap. If you call obtain twice in a row ++ with the same arguments, you typically get the same value. ++ to the heap list. It's the caller's responsibility to keep ++ track of what space is in use. ++ ++ Return the address of the space if all went well, or zero if we couldn't ++ allocate the memory. */ ++ ++static POINTER ++obtain (POINTER address, SIZE size) ++{ ++ heap_ptr heap; ++ SIZE already_available; ++ ++ /* Find the heap that ADDRESS falls within. */ ++ for (heap = last_heap; heap; heap = heap->prev) ++ { ++ if (heap->start <= address && address <= heap->end) ++ break; ++ } ++ ++ if (!heap) ++ abort (); ++ ++ /* If we can't fit SIZE bytes in that heap, ++ try successive later heaps. */ ++ while (heap && address + size > heap->end) ++ { ++ heap = heap->next; ++ if (heap == NIL_HEAP) ++ break; ++ address = heap->bloc_start; ++ } ++ ++ /* If we can't fit them within any existing heap, ++ get more space. */ ++ if (heap == NIL_HEAP) ++ { ++ POINTER new = (*real_morecore) (0); ++ SIZE get; ++ ++ already_available = (char *) last_heap->end - (char *) address; ++ ++ if (new != last_heap->end) ++ { ++ /* Someone else called sbrk. Make a new heap. */ ++ ++ heap_ptr new_heap = (heap_ptr) MEM_ROUNDUP (new); ++ POINTER bloc_start = ++ (POINTER) MEM_ROUNDUP ((POINTER) (new_heap + 1)); ++ ++ if ((*real_morecore) (bloc_start - new) != new) ++ return 0; ++ ++ new_heap->start = new; ++ new_heap->end = bloc_start; ++ new_heap->bloc_start = bloc_start; ++ new_heap->free = bloc_start; ++ new_heap->next = NIL_HEAP; ++ new_heap->prev = last_heap; ++ new_heap->first_bloc = NIL_BLOC; ++ new_heap->last_bloc = NIL_BLOC; ++ last_heap->next = new_heap; ++ last_heap = new_heap; ++ ++ address = bloc_start; ++ already_available = 0; ++ } ++ ++ /* Add space to the last heap (which we may have just created). ++ Get some extra, so we can come here less often. */ ++ ++ get = size + extra_bytes - already_available; ++ get = (char *) ROUNDUP ((char *) last_heap->end + get) ++ - (char *) last_heap->end; ++ ++ if ((*real_morecore) (get) != last_heap->end) ++ return 0; ++ ++ last_heap->end += get; ++ } ++ ++ return address; ++} ++ ++/* Return unused heap space to the system ++ if there is a lot of unused space now. ++ This can make the last heap smaller; ++ it can also eliminate the last heap entirely. */ ++ ++static void ++relinquish (void) ++{ ++ register heap_ptr h; ++ int excess = 0; ++ ++ /* Add the amount of space beyond break_value ++ in all heaps which have extend beyond break_value at all. */ ++ ++ for (h = last_heap; h && break_value < h->end; h = h->prev) ++ { ++ excess += (char *) h->end - (char *) ((break_value < h->bloc_start) ++ ? h->bloc_start : break_value); ++ } ++ ++ if (excess > extra_bytes * 2 && (*real_morecore) (0) == last_heap->end) ++ { ++ /* Keep extra_bytes worth of empty space. ++ And don't free anything unless we can free at least extra_bytes. */ ++ excess -= extra_bytes; ++ ++ if ((char *) last_heap->end - (char *) last_heap->bloc_start <= excess) ++ { ++ /* This heap should have no blocs in it. */ ++ if (last_heap->first_bloc != NIL_BLOC ++ || last_heap->last_bloc != NIL_BLOC) ++ abort (); ++ ++ /* Return the last heap, with its header, to the system. */ ++ excess = (char *) last_heap->end - (char *) last_heap->start; ++ last_heap = last_heap->prev; ++ last_heap->next = NIL_HEAP; ++ } ++ else ++ { ++ excess = (char *) last_heap->end ++ - (char *) ROUNDUP ((char *) last_heap->end - excess); ++ last_heap->end -= excess; ++ } ++ ++ if ((*real_morecore) (-excess) == 0) ++ abort (); ++ } ++} ++ ++/* The meat - allocating, freeing, and relocating blocs. */ ++ ++/* Find the bloc referenced by the address in PTR. Returns a pointer ++ to that block. */ ++ ++static bloc_ptr ++find_bloc (POINTER * ptr) ++{ ++ register bloc_ptr p = first_bloc; ++ ++ while (p != NIL_BLOC) ++ { ++ if (p->variable == ptr && p->data == *ptr) ++ return p; ++ ++ p = p->next; ++ } ++ ++ return p; ++} ++ ++/* Allocate a bloc of SIZE bytes and append it to the chain of blocs. ++ Returns a pointer to the new bloc, or zero if we couldn't allocate ++ memory for the new block. */ ++ ++static bloc_ptr ++get_bloc (SIZE size) ++{ ++ register bloc_ptr new_bloc; ++ register heap_ptr heap; ++ ++ if (!(new_bloc = (bloc_ptr) malloc (BLOC_PTR_SIZE)) ++ || !(new_bloc->data = obtain (break_value, size))) ++ { ++ if (new_bloc) ++ free (new_bloc); ++ ++ return 0; ++ } ++ ++ break_value = new_bloc->data + size; ++ ++ new_bloc->size = size; ++ new_bloc->next = NIL_BLOC; ++ new_bloc->variable = (POINTER *) NIL; ++ new_bloc->new_data = 0; ++ ++ /* Record in the heap that this space is in use. */ ++ heap = find_heap (new_bloc->data); ++ heap->free = break_value; ++ ++ /* Maintain the correspondence between heaps and blocs. */ ++ new_bloc->heap = heap; ++ heap->last_bloc = new_bloc; ++ if (heap->first_bloc == NIL_BLOC) ++ heap->first_bloc = new_bloc; ++ ++ /* Put this bloc on the doubly-linked list of blocs. */ ++ if (first_bloc) ++ { ++ new_bloc->prev = last_bloc; ++ last_bloc->next = new_bloc; ++ last_bloc = new_bloc; ++ } ++ else ++ { ++ first_bloc = last_bloc = new_bloc; ++ new_bloc->prev = NIL_BLOC; ++ } ++ ++ return new_bloc; ++} ++ ++/* Calculate new locations of blocs in the list beginning with BLOC, ++ relocating it to start at ADDRESS, in heap HEAP. If enough space is ++ not presently available in our reserve, call obtain for ++ more space. ++ ++ Store the new location of each bloc in its new_data field. ++ Do not touch the contents of blocs or break_value. */ ++ ++static int ++relocate_blocs (bloc_ptr bloc, heap_ptr heap, POINTER address) ++{ ++ register bloc_ptr b = bloc; ++ ++ while (b) ++ { ++ /* If bloc B won't fit within HEAP, ++ move to the next heap and try again. */ ++ while (heap && address + b->size > heap->end) ++ { ++ heap = heap->next; ++ if (heap == NIL_HEAP) ++ break; ++ address = heap->bloc_start; ++ } ++ ++ /* If BLOC won't fit in any heap, ++ get enough new space to hold BLOC and all following blocs. */ ++ if (heap == NIL_HEAP) ++ { ++ register bloc_ptr tb = b; ++ register SIZE s = 0; ++ ++ /* Add up the size of all the following blocs. */ ++ while (tb != NIL_BLOC) ++ { ++ s += tb->size; ++ tb = tb->next; ++ } ++ ++ /* Get that space. */ ++ address = obtain (address, s); ++ if (address == 0) ++ return 0; ++ ++ heap = last_heap; ++ } ++ ++ /* Record the new address of this bloc ++ and update where the next bloc can start. */ ++ b->new_data = address; ++ address += b->size; ++ b = b->next; ++ } ++ ++ return 1; ++} ++ ++/* Reorder the bloc BLOC to go before bloc BEFORE in the doubly linked list. ++ This is necessary if we put the memory of space of BLOC ++ before that of BEFORE. */ ++ ++static void ++reorder_bloc (bloc_ptr bloc, bloc_ptr before) ++{ ++ bloc_ptr prev, next; ++ ++ /* Splice BLOC out from where it is. */ ++ prev = bloc->prev; ++ next = bloc->next; ++ ++ if (prev) ++ prev->next = next; ++ if (next) ++ next->prev = prev; ++ ++ /* Splice it in before BEFORE. */ ++ prev = before->prev; ++ ++ if (prev) ++ prev->next = bloc; ++ bloc->prev = prev; ++ ++ before->prev = bloc; ++ bloc->next = before; ++} ++ ++/* Update the records of which heaps contain which blocs, starting ++ with heap HEAP and bloc BLOC. */ ++ ++static void ++update_heap_bloc_correspondence (bloc_ptr bloc, heap_ptr heap) ++{ ++ register bloc_ptr b; ++ ++ /* Initialize HEAP's status to reflect blocs before BLOC. */ ++ if (bloc != NIL_BLOC && bloc->prev != NIL_BLOC && bloc->prev->heap == heap) ++ { ++ /* The previous bloc is in HEAP. */ ++ heap->last_bloc = bloc->prev; ++ heap->free = bloc->prev->data + bloc->prev->size; ++ } ++ else ++ { ++ /* HEAP contains no blocs before BLOC. */ ++ heap->first_bloc = NIL_BLOC; ++ heap->last_bloc = NIL_BLOC; ++ heap->free = heap->bloc_start; ++ } ++ ++ /* Advance through blocs one by one. */ ++ for (b = bloc; b != NIL_BLOC; b = b->next) ++ { ++ /* Advance through heaps, marking them empty, ++ till we get to the one that B is in. */ ++ while (heap) ++ { ++ if (heap->bloc_start <= b->data && b->data <= heap->end) ++ break; ++ heap = heap->next; ++ /* We know HEAP is not null now, ++ because there has to be space for bloc B. */ ++ heap->first_bloc = NIL_BLOC; ++ heap->last_bloc = NIL_BLOC; ++ heap->free = heap->bloc_start; ++ } ++ ++ /* Update HEAP's status for bloc B. */ ++ heap->free = b->data + b->size; ++ heap->last_bloc = b; ++ if (heap->first_bloc == NIL_BLOC) ++ heap->first_bloc = b; ++ ++ /* Record that B is in HEAP. */ ++ b->heap = heap; ++ } ++ ++ /* If there are any remaining heaps and no blocs left, ++ mark those heaps as empty. */ ++ heap = heap->next; ++ while (heap) ++ { ++ heap->first_bloc = NIL_BLOC; ++ heap->last_bloc = NIL_BLOC; ++ heap->free = heap->bloc_start; ++ heap = heap->next; ++ } ++} ++ ++/* Resize BLOC to SIZE bytes. This relocates the blocs ++ that come after BLOC in memory. */ ++ ++static int ++resize_bloc (bloc_ptr bloc, SIZE size) ++{ ++ register bloc_ptr b; ++ heap_ptr heap; ++ POINTER address; ++ SIZE old_size; ++ ++ if (bloc == NIL_BLOC || size == bloc->size) ++ return 1; ++ ++ for (heap = first_heap; heap != NIL_HEAP; heap = heap->next) ++ { ++ if (heap->bloc_start <= bloc->data && bloc->data <= heap->end) ++ break; ++ } ++ ++ if (heap == NIL_HEAP) ++ abort (); ++ ++ old_size = bloc->size; ++ bloc->size = size; ++ ++ /* Note that bloc could be moved into the previous heap. */ ++ address = (bloc->prev ? bloc->prev->data + bloc->prev->size ++ : first_heap->bloc_start); ++ while (heap) ++ { ++ if (heap->bloc_start <= address && address <= heap->end) ++ break; ++ heap = heap->prev; ++ } ++ ++ if (!relocate_blocs (bloc, heap, address)) ++ { ++ bloc->size = old_size; ++ return 0; ++ } ++ ++ if (size > old_size) ++ { ++ for (b = last_bloc; b != bloc; b = b->prev) ++ { ++ safe_bcopy (b->data, b->new_data, b->size); ++ *b->variable = b->data = b->new_data; ++ } ++ safe_bcopy (bloc->data, bloc->new_data, old_size); ++ bzero (bloc->new_data + old_size, size - old_size); ++ *bloc->variable = bloc->data = bloc->new_data; ++ } ++ else ++ { ++ for (b = bloc; b != NIL_BLOC; b = b->next) ++ { ++ safe_bcopy (b->data, b->new_data, b->size); ++ *b->variable = b->data = b->new_data; ++ } ++ } ++ ++ update_heap_bloc_correspondence (bloc, heap); ++ ++ break_value = (last_bloc ? last_bloc->data + last_bloc->size ++ : first_heap->bloc_start); ++ return 1; ++} ++ ++/* Free BLOC from the chain of blocs, relocating any blocs above it. ++ This may return space to the system. */ ++ ++static void ++free_bloc (bloc_ptr bloc) ++{ ++ heap_ptr heap = bloc->heap; ++ ++ resize_bloc (bloc, 0); ++ ++ if (bloc == first_bloc && bloc == last_bloc) ++ { ++ first_bloc = last_bloc = NIL_BLOC; ++ } ++ else if (bloc == last_bloc) ++ { ++ last_bloc = bloc->prev; ++ last_bloc->next = NIL_BLOC; ++ } ++ else if (bloc == first_bloc) ++ { ++ first_bloc = bloc->next; ++ first_bloc->prev = NIL_BLOC; ++ } ++ else ++ { ++ bloc->next->prev = bloc->prev; ++ bloc->prev->next = bloc->next; ++ } ++ ++ /* Update the records of which blocs are in HEAP. */ ++ if (heap->first_bloc == bloc) ++ { ++ if (bloc->next->heap == heap) ++ heap->first_bloc = bloc->next; ++ else ++ heap->first_bloc = heap->last_bloc = NIL_BLOC; ++ } ++ if (heap->last_bloc == bloc) ++ { ++ if (bloc->prev->heap == heap) ++ heap->last_bloc = bloc->prev; ++ else ++ heap->first_bloc = heap->last_bloc = NIL_BLOC; ++ } ++ ++ relinquish (); ++ free (bloc); ++} ++ ++/* Interface routines. */ ++ ++static int use_relocatable_buffers; ++static int r_alloc_freeze_level; ++ ++/* Obtain SIZE bytes of storage from the free pool, or the system, as ++ necessary. If relocatable blocs are in use, this means relocating ++ them. This function gets plugged into the GNU malloc's __morecore ++ hook. ++ ++ We provide hysteresis, never relocating by less than extra_bytes. ++ ++ If we're out of memory, we should return zero, to imitate the other ++ __morecore hook values - in particular, __default_morecore in the ++ GNU malloc package. */ ++ ++POINTER ++r_alloc_sbrk (long size) ++{ ++ register bloc_ptr b; ++ POINTER address; ++ ++ if (!use_relocatable_buffers) ++ return (*real_morecore) (size); ++ ++ if (size == 0) ++ return virtual_break_value; ++ ++ if (size > 0) ++ { ++ /* Allocate a page-aligned space. GNU malloc would reclaim an ++ extra space if we passed an unaligned one. But we could ++ not always find a space which is contiguos to the previous. */ ++ POINTER new_bloc_start; ++ heap_ptr h = first_heap; ++ SIZE get = ROUNDUP (size); ++ ++ address = (POINTER) ROUNDUP (virtual_break_value); ++ ++ /* Search the list upward for a heap which is large enough. */ ++ while ((char *) h->end < (char *) MEM_ROUNDUP ((char *) address + get)) ++ { ++ h = h->next; ++ if (h == NIL_HEAP) ++ break; ++ address = (POINTER) ROUNDUP (h->start); ++ } ++ ++ /* If not found, obtain more space. */ ++ if (h == NIL_HEAP) ++ { ++ get += extra_bytes + page_size; ++ ++ if (r_alloc_freeze_level > 0 || !obtain (address, get)) ++ return 0; ++ ++ if (first_heap == last_heap) ++ address = (POINTER) ROUNDUP (virtual_break_value); ++ else ++ address = (POINTER) ROUNDUP (last_heap->start); ++ h = last_heap; ++ } ++ ++ new_bloc_start = (POINTER) MEM_ROUNDUP ((char *) address + get); ++ ++ if (first_heap->bloc_start < new_bloc_start) ++ { ++ /* Move all blocs upward. */ ++ if (r_alloc_freeze_level > 0 ++ || !relocate_blocs (first_bloc, h, new_bloc_start)) ++ return 0; ++ ++ /* Note that (POINTER)(h+1) <= new_bloc_start since ++ get >= page_size, so the following does not destroy the heap ++ header. */ ++ for (b = last_bloc; b != NIL_BLOC; b = b->prev) ++ { ++ safe_bcopy (b->data, b->new_data, b->size); ++ *b->variable = b->data = b->new_data; ++ } ++ ++ h->bloc_start = new_bloc_start; ++ ++ update_heap_bloc_correspondence (first_bloc, h); ++ } ++ ++ if (h != first_heap) ++ { ++ /* Give up managing heaps below the one the new ++ virtual_break_value points to. */ ++ first_heap->prev = NIL_HEAP; ++ first_heap->next = h->next; ++ first_heap->start = h->start; ++ first_heap->end = h->end; ++ first_heap->free = h->free; ++ first_heap->first_bloc = h->first_bloc; ++ first_heap->last_bloc = h->last_bloc; ++ first_heap->bloc_start = h->bloc_start; ++ ++ if (first_heap->next) ++ first_heap->next->prev = first_heap; ++ else ++ last_heap = first_heap; ++ } ++ ++ bzero (address, size); ++ } ++ else /* size < 0 */ ++ { ++ SIZE excess = (char *) first_heap->bloc_start ++ - ((char *) virtual_break_value + size); ++ ++ address = virtual_break_value; ++ ++ if (r_alloc_freeze_level == 0 && excess > 2 * extra_bytes) ++ { ++ excess -= extra_bytes; ++ first_heap->bloc_start ++ = ++ (POINTER) MEM_ROUNDUP ((char *) first_heap->bloc_start - excess); ++ ++ relocate_blocs (first_bloc, first_heap, first_heap->bloc_start); ++ ++ for (b = first_bloc; b != NIL_BLOC; b = b->next) ++ { ++ safe_bcopy (b->data, b->new_data, b->size); ++ *b->variable = b->data = b->new_data; ++ } ++ } ++ ++ if ((char *) virtual_break_value + size < (char *) first_heap->start) ++ { ++ /* We found an additional space below the first heap */ ++ first_heap->start = (POINTER) ((char *) virtual_break_value + size); ++ } ++ } ++ ++ virtual_break_value = (POINTER) ((char *) address + size); ++ break_value = (last_bloc ++ ? last_bloc->data + last_bloc->size ++ : first_heap->bloc_start); ++ if (size < 0) ++ relinquish (); ++ ++ return address; ++} ++ ++/* Allocate a relocatable bloc of storage of size SIZE. A pointer to ++ the data is returned in *PTR. PTR is thus the address of some variable ++ which will use the data area. ++ ++ If we can't allocate the necessary memory, set *PTR to zero, and ++ return zero. */ ++ ++POINTER ++r_alloc (POINTER * ptr, SIZE size) ++{ ++ register bloc_ptr new_bloc; ++ ++ if (!r_alloc_initialized) ++ r_alloc_init (); ++ ++ new_bloc = get_bloc (MEM_ROUNDUP (size)); ++ if (new_bloc) ++ { ++ new_bloc->variable = ptr; ++ *ptr = new_bloc->data; ++ } ++ else ++ *ptr = 0; ++ ++ return *ptr; ++} ++ ++/* Free a bloc of relocatable storage whose data is pointed to by PTR. ++ Store 0 in *PTR to show there's no block allocated. */ ++ ++void ++r_alloc_free (POINTER * ptr) ++{ ++ register bloc_ptr dead_bloc; ++ ++ dead_bloc = find_bloc (ptr); ++ if (dead_bloc == NIL_BLOC) ++ abort (); ++ ++ free_bloc (dead_bloc); ++ *ptr = 0; ++} ++ ++/* Given a pointer at address PTR to relocatable data, resize it to SIZE. ++ Do this by shifting all blocks above this one up in memory, unless ++ SIZE is less than or equal to the current bloc size, in which case ++ do nothing. ++ ++ Change *PTR to reflect the new bloc, and return this value. ++ ++ If more memory cannot be allocated, then leave *PTR unchanged, and ++ return zero. */ ++ ++POINTER ++r_re_alloc (POINTER * ptr, SIZE size) ++{ ++ register bloc_ptr bloc; ++ ++ bloc = find_bloc (ptr); ++ if (bloc == NIL_BLOC) ++ abort (); ++ ++ if (size <= bloc->size) ++ /* Wouldn't it be useful to actually resize the bloc here? */ ++ return *ptr; ++ ++ if (!resize_bloc (bloc, MEM_ROUNDUP (size))) ++ return 0; ++ ++ return *ptr; ++} ++ ++/* Disable relocations, after making room for at least SIZE bytes ++ of non-relocatable heap if possible. The relocatable blocs are ++ guaranteed to hold still until thawed, even if this means that ++ malloc must return a null pointer. */ ++ ++void ++r_alloc_freeze (long size) ++{ ++ /* If already frozen, we can't make any more room, so don't try. */ ++ if (r_alloc_freeze_level > 0) ++ size = 0; ++ /* If we can't get the amount requested, half is better than nothing. */ ++ while (size > 0 && r_alloc_sbrk (size) == 0) ++ size /= 2; ++ ++r_alloc_freeze_level; ++ if (size > 0) ++ r_alloc_sbrk (-size); ++} ++ ++void ++r_alloc_thaw (void) ++{ ++ if (--r_alloc_freeze_level < 0) ++ abort (); ++} ++ ++/* The hook `malloc' uses for the function which gets more space ++ from the system. */ ++extern POINTER (*__morecore) (ptrdiff_t); ++ ++/* Initialize various things for memory allocation. */ ++ ++static void ++r_alloc_init (void) ++{ ++ POINTER end; ++ ++ if (r_alloc_initialized) ++ return; ++ ++ r_alloc_initialized = 1; ++ real_morecore = __morecore; ++ __morecore = r_alloc_sbrk; ++ ++ first_heap = last_heap = &heap_base; ++ first_heap->next = first_heap->prev = NIL_HEAP; ++ first_heap->start = first_heap->bloc_start ++ = virtual_break_value = break_value = (*real_morecore) (0); ++ if (break_value == NIL) ++ abort (); ++ ++ page_size = PAGE; ++ extra_bytes = ROUNDUP (50000); ++ ++ first_heap->end = (POINTER) ROUNDUP (first_heap->start); ++ ++ /* The extra call to real_morecore guarantees that the end of the ++ address space is a multiple of page_size, even if page_size is ++ not really the page size of the system running the binary in ++ which page_size is stored. This allows a binary to be built on a ++ system with one page size and run on a system with a smaller page ++ size. */ ++ (*real_morecore) (first_heap->end - first_heap->start); ++ ++ /* Clear the rest of the last page; this memory is in our address space ++ even though it is after the sbrk value. */ ++ /* Doubly true, with the additional call that explicitly adds the ++ rest of that page to the address space. */ ++ bzero (first_heap->start, first_heap->end - first_heap->start); ++ virtual_break_value = break_value = first_heap->bloc_start = ++ first_heap->end; ++ use_relocatable_buffers = 1; ++} ++ ++#ifdef DEBUG ++#include <assert.h> ++ ++int ++r_alloc_check (void) ++{ ++ int found = 0; ++ heap_ptr h, ph = 0; ++ bloc_ptr b, pb = 0; ++ ++ if (!r_alloc_initialized) ++ return; ++ ++ assert (first_heap); ++#if 0 ++ assert (last_heap->end <= (POINTER) sbrk (0)); ++#endif ++ assert ((POINTER) first_heap < first_heap->start); ++ assert (first_heap->start <= virtual_break_value); ++ assert (virtual_break_value <= first_heap->end); ++ ++ for (h = first_heap; h; h = h->next) ++ { ++ assert (h->prev == ph); ++ assert ((POINTER) ROUNDUP (h->end) == h->end); ++ assert ((POINTER) MEM_ROUNDUP (h->start) == h->start); ++ assert ((POINTER) MEM_ROUNDUP (h->bloc_start) == h->bloc_start); ++ assert (h->start <= h->bloc_start && h->bloc_start <= h->end); ++ ++ if (ph) ++ { ++ assert (ph->end < h->start); ++ assert (h->start <= (POINTER) h ++ && (POINTER) (h + 1) <= h->bloc_start); ++ } ++ ++ if (h->bloc_start <= break_value && break_value <= h->end) ++ found = 1; ++ ++ ph = h; ++ } ++ ++ assert (found); ++ assert (last_heap == ph); ++ ++ for (b = first_bloc; b; b = b->next) ++ { ++ assert (b->prev == pb); ++ assert ((POINTER) MEM_ROUNDUP (b->data) == b->data); ++ assert ((SIZE) MEM_ROUNDUP (b->size) == b->size); ++ ++ ph = 0; ++ for (h = first_heap; h; h = h->next) ++ { ++ if (h->bloc_start <= b->data && b->data + b->size <= h->end) ++ break; ++ ph = h; ++ } ++ ++ assert (h); ++ ++ if (pb && pb->data + pb->size != b->data) ++ { ++ assert (ph && b->data == h->bloc_start); ++ while (ph) ++ { ++ if (ph->bloc_start <= pb->data ++ && pb->data + pb->size <= ph->end) ++ { ++ assert (pb->data + pb->size + b->size > ph->end); ++ break; ++ } ++ else ++ { ++ assert (ph->bloc_start + b->size > ph->end); ++ } ++ ph = ph->prev; ++ } ++ } ++ pb = b; ++ } ++ ++ assert (last_bloc == pb); ++ ++ if (last_bloc) ++ assert (last_bloc->data + last_bloc->size == break_value); ++ else ++ assert (first_heap->bloc_start == break_value); ++} ++#endif /* DEBUG */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/realloc.c gcc-4.0.2/gcc/bounds/lib/realloc.c +--- gcc-4.0.2.org/gcc/bounds/lib/realloc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/realloc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,224 @@ ++/* Change the size of a block allocated by `malloc'. ++ Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ Written May 1989 by Mike Haertel. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++#if (defined (MEMMOVE_MISSING) || \ ++ !defined(_LIBC) && !defined(STDC_HEADERS) && !defined(USG)) ++ ++/* Snarfed directly from Emacs src/dispnew.c: ++ XXX Should use system bcopy if it handles overlap. */ ++#if 0 /* not used because memmove() isn't used #ifndef emacs */ ++ ++/* Like bcopy except never gets confused by overlap. */ ++ ++static void ++safe_bcopy (char *from, char *to, int size) ++{ ++ if (size <= 0 || from == to) ++ return; ++ ++ /* If the source and destination don't overlap, then bcopy can ++ handle it. If they do overlap, but the destination is lower in ++ memory than the source, we'll assume bcopy can handle that. */ ++ if (to < from || from + size <= to) ++ __bounds_memmove (from, to, size); ++ ++ /* Otherwise, we'll copy from the end. */ ++ else ++ { ++ register char *endf = from + size; ++ register char *endt = to + size; ++ ++ /* If TO - FROM is large, then we should break the copy into ++ nonoverlapping chunks of TO - FROM bytes each. However, if ++ TO - FROM is small, then the bcopy function call overhead ++ makes this not worth it. The crossover point could be about ++ anywhere. Since I don't think the obvious copy loop is too ++ bad, I'm trying to err in its favor. */ ++ if (to - from < 64) ++ { ++ do ++ *--endt = *--endf; ++ while (endf != from); ++ } ++ else ++ { ++ for (;;) ++ { ++ endt -= (to - from); ++ endf -= (to - from); ++ ++ if (endt < to) ++ break; ++ ++ __bounds_memmove (endf, endt, to - from); ++ } ++ ++ /* If SIZE wasn't a multiple of TO - FROM, there will be a ++ little left over. The amount left over is ++ (endt + (to - from)) - to, which is endt - from. */ ++ __bounds_memmove (from, to, endt - from); ++ } ++ } ++} ++#endif /* Not emacs. */ ++ ++#ifdef memmove ++#undef memmove ++#endif ++#define memmove(to, from, size) safe_bcopy ((from), (to), (size)) ++ ++#endif ++ ++#ifdef min ++#undef min ++#endif ++#define min(A, B) ((A) < (B) ? (A) : (B)) ++ ++/* Debugging hook for realloc. */ ++__ptr_t (*__realloc_hook) (__ptr_t __ptr, __malloc_size_t __size); ++ ++/* Resize the given region to the new size, returning a pointer ++ to the (possibly moved) region. This is optimized for speed; ++ some benchmarks seem to indicate that greater compactness is ++ achieved by unconditionally allocating and copying to a ++ new region. This module has incestuous knowledge of the ++ internals of both free and malloc. */ ++__ptr_t ++__bounds_realloc (__ptr_t ptr, __malloc_size_t size) ++{ ++ __ptr_t result; ++ int type; ++ __malloc_size_t block, blocks, oldlimit; ++ ++ if (size == 0) ++ { ++ __bounds_free (ptr); ++ return __bounds_malloc (0); ++ } ++ else if (ptr == NULL) ++ return __bounds_malloc (size); ++ ++ if (__realloc_hook != NULL) ++ return (*__realloc_hook) (ptr, size); ++ ++ block = BLOCK (ptr); ++ ++ type = _heapinfo[block].busy.type; ++ switch (type) ++ { ++ case 0: ++ /* Maybe reallocate a large block to a small fragment. */ ++ if (size <= BLOCKSIZE / 2) ++ { ++ result = __bounds_malloc (size); ++ if (result != NULL) ++ { ++ __bounds_memcpy (result, ptr, size); ++ _free_internal (ptr); ++ return result; ++ } ++ } ++ ++ /* The new size is a large allocation as well; ++ see if we can hold it in place. */ ++ blocks = BLOCKIFY (size); ++ if (blocks < _heapinfo[block].busy.info.size) ++ { ++ /* The new size is smaller; return ++ excess memory to the free list. */ ++ _heapinfo[block + blocks].busy.type = 0; ++ _heapinfo[block + blocks].busy.info.size ++ = _heapinfo[block].busy.info.size - blocks; ++ _heapinfo[block].busy.info.size = blocks; ++ /* We have just created a new chunk by splitting a chunk in two. ++ Now we will free this chunk; increment the statistics counter ++ so it doesn't become wrong when _free_internal decrements it. */ ++ ++_chunks_used; ++ _free_internal (ADDRESS (block + blocks)); ++ result = ptr; ++ } ++ else if (blocks == _heapinfo[block].busy.info.size) ++ /* No size change necessary. */ ++ result = ptr; ++ else ++ { ++ /* Won't fit, so allocate a new region that will. ++ Free the old region first in case there is sufficient ++ adjacent free space to grow without moving. */ ++ blocks = _heapinfo[block].busy.info.size; ++ /* Prevent free from actually returning memory to the system. */ ++ oldlimit = _heaplimit; ++ _heaplimit = 0; ++ _free_internal (ptr); ++ _heaplimit = oldlimit; ++ result = __bounds_malloc (size); ++ if (result == NULL) ++ { ++ /* Now we're really in trouble. We have to unfree ++ the thing we just freed. Unfortunately it might ++ have been coalesced with its neighbors. */ ++ if (_heapindex == block) ++ (void) __bounds_malloc (blocks * BLOCKSIZE); ++ else ++ { ++ __ptr_t previous ++ = __bounds_malloc ((block - _heapindex) * BLOCKSIZE); ++ (void) __bounds_malloc (blocks * BLOCKSIZE); ++ _free_internal (previous); ++ } ++ return NULL; ++ } ++ if (ptr != result) ++ __bounds_memmove (result, ptr, blocks * BLOCKSIZE); ++ } ++ break; ++ ++ default: ++ /* Old size is a fragment; type is logarithm ++ to base two of the fragment size. */ ++ if (size > (__malloc_size_t) (1 << (type - 1)) && ++ size <= (__malloc_size_t) (1 << type)) ++ /* The new size is the same kind of fragment. */ ++ result = ptr; ++ else ++ { ++ /* The new size is different; allocate a new space, ++ and copy the lesser of the new size and the old. */ ++ result = __bounds_malloc (size); ++ if (result == NULL) ++ return NULL; ++ __bounds_memcpy (result, ptr, ++ min (size, (__malloc_size_t) 1 << type)); ++ __bounds_free (ptr); ++ } ++ break; ++ } ++ ++ return result; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/string.c gcc-4.0.2/gcc/bounds/lib/string.c +--- gcc-4.0.2.org/gcc/bounds/lib/string.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/string.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,1850 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/string.c ++ Summary: ++ Specially checked string and memory functions, replacing those ++ found in your normal C library. ++ Other notes: ++ Some of these functions are built into GCC, so you may need to ++ use the '-fno-builtin' flag to get these checked versions. The ++ rest of this library uses the '__bounds_*' versions which are ++ unchecked. ++ Author Date Notes ++ RWMJ 27/2/95 Initial implementation. ++ RWMJ 4/4/95 After profiling, some optimizations. ++*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <ctype.h> ++ ++#include "bounds-lib.h" ++#include "mutex.h" /* for 'enter|leave_critical_section' */ ++#include "check.h" ++ ++#if defined(__BOUNDS_CHECKING_ON) ++#error "This file must not be compiled with bounds checking enabled." ++#endif ++ ++/* On `memchr' and `memccpy', it is probably valid to give a `n' (max. len.) ++ argument longer than the object, provided you know the `c' (character) ++ will match always before the end of the object. If you want strict ++ checking of `n', set these to `1'. If you do this, certain valid (?) ++ software fails, in particular GNU's `sprintf'. */ ++#define STRICT_MEMCHR 0 ++#define STRICT_MEMCCPY 0 ++ ++/* Since `bcopy' varies from machine to machine in the way it handles ++ overlapping arguments, you may set its behaviour here. Set ++ `BCOPY_OVERLAPPING_ARGUMENTS' to 1 to get memmove-type behaviour, and ++ to 0 to get memcpy behaviour. Set `BCOPY_WARN_OVERLAPPING_ARGUMENTS' ++ if you want a warning when `bcopy' is called with overlapping arguments ++ (since relying on this is not necessarily portable). ++ ++ - RWMJ 16/1/96 ++ - Thanks to Mark W. Snitily (mark@sgcs.com) for clarification here. */ ++ ++#define BCOPY_OVERLAPPING_ARGUMENTS 1 ++#define BCOPY_WARN_OVERLAPPING_ARGUMENTS 1 /* Enable for now. */ ++ ++ ++static __inline__ void * ++check_ptr (const char *filename, int line, void *pointer, ++ const char *function, const char *ptr_name) ++{ ++ if (__bounds_debug_no_checking == 0 ++ && (pointer == NULL || pointer == ILLEGAL)) ++ { ++ __bounds_errorf (filename, line, pointer, NULL, ++ "NULL or ILLEGAL %s used in %s", ptr_name, function); ++ return NULL; ++ } ++ return pointer; ++} ++ ++/* Inline function that does the donkey work checking a single ++ pointer is valid over a range of n bytes. If the pointer is ++ invalid, the function exits with an appropriate message. ++ If size == 0, the pointer points to a string. We work out the ++ size ourselves here, and check the extent will be OK. */ ++ ++static __inline__ size_t ++check (const char *filename, int line, void *pointer, size_t size, ++ const char *function, const char *ptr_name) ++{ ++ object *obj; ++ ++ if (__bounds_debug_no_checking) ++ { ++ if (size) /* not a string */ ++ return 0; ++ else ++ { ++ char *p = (char *) pointer; ++ ++ while (*p++); ++ return p - (char *) pointer; ++ } ++ } ++ if (pointer == NULL || pointer == ILLEGAL) ++ { ++ __bounds_errorf (filename, line, pointer, NULL, ++ "NULL or ILLEGAL %s used in %s", ptr_name, function); ++ return 0; ++ } ++ if ((obj = __bounds_find_object (pointer)) == NULL) ++ { ++ maybe_is_unchecked (pointer, NULL, 0, function); ++ /* Unchecked pointer is OK. We have already delivered a warning at ++ this point. If this is a string, return its length, else return ++ anything. */ ++ if (size) /* not a string */ ++ return 0; ++ /* unchecked operation => may fail. */ ++ { ++ char *p = (char *) pointer; ++ ++ while (*p++); ++ return p - (char *) pointer; ++ } ++ } ++ ++ if (size) ++ { ++ /* The pointer itself is valid, and points to a checked object. Now ++ make sure that we won't overrun the object by using this pointer ++ and size. */ ++ if ((char *) pointer + size > (char *) obj->extent) ++ __bounds_errorf (filename, line, pointer, obj, ++ "%s with this %s and size %u would overrun" ++ " the end of the object's allocated memory", ++ function, ptr_name, size); ++ if ((char *) pointer + size < (char *) pointer) ++ __bounds_errorf (filename, line, pointer, obj, ++ "%s with this %s and size %u would wrap" ++ " around", ++ function, ptr_name, size); ++ return 0; ++ } ++ else ++ { ++ /* This is a string. ++ Work out the size ourselves, and whether the pointer will be valid. ++ Return the length of the string + 1. */ ++ char *p = (char *) pointer; ++ ++ while (*p++); ++ if (p > (char *) obj->extent) ++ __bounds_errorf (filename, line, pointer, obj, ++ "in %s, %s is a string with size %u overrunning" ++ " the end of the object's allocated memory", ++ function, ptr_name, p - (char *) pointer); ++ return p - (char *) pointer; ++ } ++} ++ ++/* Check for overlapping objects in functions (such as memcpy, strcpy) ++ where this is not permitted. */ ++ ++static __inline__ void ++check_overlap (const char *filename, int line, ++ void *p1, size_t n1, ++ void *p2, size_t n2, const char *function_name) ++{ ++ if (__bounds_debug_no_checking) ++ return; ++ if (__bounds_warn_overlap) ++ { ++ void *p1e = (void *) ((char *) p1 + n1 - 1); ++ void *p2e = (void *) ((char *) p2 + n2 - 1); ++ ++ if ((p1 <= p2 && p1e >= p2) || /* p1----p2====p1e----p2e */ ++ (p2 <= p1 && p2e >= p1) || /* p2----p1====p2e----p1e */ ++ (p1 >= p2 && p1e <= p2e) || /* p2----p1====p1e----p2e */ ++ (p2 >= p1 && p2e <= p1e)) ++ { /* p1----p2====p2e----p1e */ ++ if (n1 == n2) ++ { ++ __bounds_errorf (filename, line, p1, __bounds_find_object (p1), ++ "in %s with %p and %p for %u, source and destination objects overlap", ++ function_name, p1, p2, n1); ++ } ++ else ++ { ++ __bounds_errorf (filename, line, p1, __bounds_find_object (p1), ++ "in %s with %p for %u and %p for %u, source and destination objects overlap", ++ function_name, p1, n1, p2, n2); ++ } ++ } ++ } ++ else ++ { ++ void *p2e = (void *) ((char *) p2 + n2 - 1); ++ ++ if (p1 > p2 && p1 <= p2e) ++ __bounds_errorf (filename, line, p1, __bounds_find_object (p1), ++ "in %s with %p for %u and %p for %u, source and destination objects overlap", ++ function_name, p1, n1, p2, n2); ++ } ++} ++ ++/* These are the checked functions themselves. The '__bounds_*' ++ versions are internal unchecked functions used by this library ++ itself (to avoid reentrancy problems). ++ 1. The memory functions. */ ++ ++#ifdef Lbounds_memcpy ++ ++__inline__ void * ++__bounds_memcpy (void *dest, const void *src, size_t n) ++{ ++ char *d = (char *) dest; ++ const char *s = (const char *) src; ++ ++ for (; n; n--) ++ *d++ = *s++; ++ return dest; ++} ++ ++void * ++__bounds_check_memcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n) ++{ ++ if (n == 0 && (dest == NULL || src == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "memcpy", ++ "NULL source or destination for a zero-sized memcpy"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ ++ check (filename, line, dest, n, "memcpy", "destination pointer"); ++ check (filename, line, (void *) src, n, "memcpy", "source pointer"); ++ check_overlap (filename, line, dest, n, (void *) src, n, "memcpy"); ++ return __bounds_memcpy (dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lmemcpy ++ ++extern void *memcpy (void *dest, const void *src, size_t n); ++extern void *__bounds_check_memcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++ ++void * ++memcpy (void *dest, const void *src, size_t n) ++{ ++ return __bounds_check_memcpy (NULL, 0, dest, src, n); ++} ++ ++#endif ++ ++/* These are the checked functions themselves. The '__bounds_*' ++ versions are internal unchecked functions used by this library ++ itself (to avoid reentrancy problems). ++ 1. The memory functions. */ ++ ++#ifdef Lbounds_mempcpy ++ ++__inline__ void * ++__bounds_mempcpy (void *dest, const void *src, size_t n) ++{ ++ char *d = (char *) dest; ++ const char *s = (const char *) src; ++ ++ for (; n; n--) ++ *d++ = *s++; ++ return d; ++} ++ ++void * ++__bounds_check_mempcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n) ++{ ++ if (n == 0 && (dest == NULL || src == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "mempcpy", ++ "NULL source or destination for a zero-sized mempcpy"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ ++ check (filename, line, dest, n, "mempcpy", "destination pointer"); ++ check (filename, line, (void *) src, n, "mempcpy", "source pointer"); ++ check_overlap (filename, line, dest, n, (void *) src, n, "mempcpy"); ++ return __bounds_mempcpy (dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lmempcpy ++ ++extern void *mempcpy (void *dest, const void *src, size_t n); ++extern void *__bounds_check_mempcpy (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++ ++void * ++mempcpy (void *dest, const void *src, size_t n) ++{ ++ return __bounds_check_mempcpy (NULL, 0, dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_memmove ++ ++__inline__ void * ++__bounds_memmove (void *dest, const void *src, size_t n) ++{ ++ char *d = (char *) dest; ++ const char *s = (const char *) src; ++ ++ if (dest < src) ++ for (; n; n--) ++ *d++ = *s++; ++ else if (dest > src) ++ { ++ d += n; ++ s += n; ++ for (; n; n--) ++ *--d = *--s; ++ } ++ return dest; ++} ++ ++void * ++__bounds_check_memmove (const char *filename, int line, ++ void *dest, const void *src, size_t n) ++{ ++ if (n == 0 && (dest == NULL || src == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "memmove", ++ "NULL source or destination for a" ++ " zero-sized memmove"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ ++ check (filename, line, dest, n, "memmove", "destination pointer"); ++ check (filename, line, (void *) src, n, "memmove", "source pointer"); ++ return __bounds_memmove (dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lmemmove ++ ++extern void *memmove (void *dest, const void *src, size_t n); ++extern void *__bounds_check_memmove (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++ ++void * ++memmove (void *dest, const void *src, size_t n) ++{ ++ return __bounds_check_memmove (NULL, 0, dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_bcopy ++ ++/* See comment on `bcopy' at the top of this file. */ ++ ++#ifdef bcopy ++#undef bcopy ++#endif ++extern void *__bounds_check_memmove (const char *filename, int line, ++ void *dest, const void *src, size_t n); ++ ++void ++__bounds_check_bcopy (const char *filename, int line, ++ const void *src, void *dest, int n) ++{ ++#if BCOPY_OVERLAPPING_ARGUMENTS ++#if BCOPY_WARN_OVERLAPPING_ARGUMENTS ++ if (__bounds_warn_overlap) ++ check_overlap (filename, line, dest, n, (void *) src, n, "bcopy"); ++#endif ++ __bounds_check_memmove (filename, line, dest, src, n); ++#else /* !BCOPY_OVERLAPPING_ARGUMENTS */ ++ __bounds_check_memcpy (filename, line, dest, src, n); ++#endif /* !BCOPY_OVERLAPPING_ARGUMENTS */ ++} ++ ++#endif ++ ++#ifdef Lbcopy ++ ++extern void bcopy (const void *src, void *dest, int n); ++extern void __bounds_check_bcopy (const char *filename, int line, ++ const void *src, void *dest, int n); ++ ++void ++bcopy (const void *src, void *dest, int n) ++{ ++ __bounds_check_bcopy (NULL, 0, src, dest, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_memset ++ ++__inline__ void * ++__bounds_memset (void *dest, int c, size_t n) ++{ ++ /* `memset' is called very frequently, and therefore has to be fast. In a ++ future release of GCC, we will call '__builtin_memset' in this library, ++ but that isn't implemented yet. In the mean time, we spot the common ++ case when the memory is aligned, and write integers. */ ++ if (PTR_TO_UNSIGNED (dest) & (sizeof (int) - 1)) /* not aligned. */ ++ { ++ char *d = (char *) dest; ++ ++ for (; n; n--) ++ *d++ = c; ++ } ++ else /* aligned */ ++ { ++ int *di = (int *) dest; ++ size_t n_longs = n / sizeof (int); ++ int wr = 0; ++ unsigned i; ++ char *dc; ++ ++ for (i = 0; i < sizeof (int); i++) ++ wr = (wr << 8) | c; ++ n &= sizeof (int) - 1; ++ for (; n_longs; n_longs--) ++ *di++ = wr; ++ dc = (char *) di; ++ for (; n; n--) ++ *dc++ = c; ++ } ++ ++ return dest; ++} ++ ++void * ++__bounds_check_memset (const char *filename, int line, ++ void *dest, int c, size_t n) ++{ ++ if (n == 0 && dest == NULL) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "memset", ++ "NULL destination for a zero-sized memset"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ ++ check (filename, line, dest, n, "memset", "destination pointer"); ++ return __bounds_memset (dest, c, n); ++} ++ ++#endif ++ ++#ifdef Lmemset ++ ++extern void *memset (void *dest, int c, size_t n); ++extern void *__bounds_check_memset (const char *filename, int line, ++ void *dest, int c, size_t n); ++ ++void * ++memset (void *dest, int c, size_t n) ++{ ++ return __bounds_check_memset (NULL, 0, dest, c, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_bzero ++ ++#ifdef bzero ++#undef bzero ++#endif ++ ++extern void *__bounds_check_memset (const char *filename, int line, ++ void *dest, int c, size_t n); ++ ++void ++__bounds_check_bzero (const char *filename, int line, char *dest, int n) ++{ ++ __bounds_check_memset (filename, line, (void *) dest, 0, n); ++} ++ ++#endif ++ ++#ifdef Lbzero ++ ++extern void bzero (char *dest, int n); ++extern void __bounds_check_bzero (const char *filename, int line, ++ char *dest, int n); ++ ++void ++bzero (char *dest, int n) ++{ ++ __bounds_check_bzero (NULL, 0, dest, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_memcmp ++ ++__inline__ int ++__bounds_memcmp (const void *s1, const void *s2, size_t n) ++{ ++ const unsigned char *cs1 = (const unsigned char *) s1; ++ const unsigned char *cs2 = (const unsigned char *) s2; ++ for (; n; n--) ++ { ++ if (*cs1 - *cs2 != 0) ++ return *cs1 - *cs2; ++ cs1++, cs2++; ++ } ++ return 0; ++} ++ ++int ++__bounds_check_memcmp (const char *filename, int line, ++ const void *s1, const void *s2, size_t n) ++{ ++ if (n == 0 && (s1 == NULL || s2 == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "memcmp", ++ "NULL source or destination for a zero-sized memcmp"); ++ return 0; ++ } ++ if (n == 0) ++ return 0; ++ ++ check (filename, line, (void *) s1, n, "memcmp", "first pointer argument"); ++ check (filename, line, (void *) s2, n, "memcmp", "second pointer argument"); ++ return __bounds_memcmp (s1, s2, n); ++} ++ ++#endif ++ ++#ifdef Lmemcmp ++ ++extern int memcmp (const void *s1, const void *s2, size_t n); ++extern int __bounds_check_memcmp (const char *filename, int line, ++ const void *s1, const void *s2, size_t n); ++ ++int ++memcmp (const void *s1, const void *s2, size_t n) ++{ ++ return __bounds_check_memcmp (NULL, 0, s1, s2, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_bcmp ++ ++/* I'm assuming here that bcmp is the pre-ANSI memcmp function. Since I've ++ never actually used the b* functions, I'm not sure if this is totally ++ right. */ ++ ++#ifdef bcmp ++#undef bcmp ++#endif ++ ++extern int __bounds_check_memcmp (const char *filename, int line, ++ const void *s1, const void *s2, size_t n); ++ ++int ++__bounds_check_bcmp (const char *filename, int line, void *s1, void *s2, ++ int n) ++{ ++ return __bounds_check_memcmp (filename, line, s1, s2, n); ++} ++ ++#endif ++ ++#ifdef Lbcmp ++ ++extern int bcmp (void *s1, void *s2, int n); ++extern int __bounds_check_bcmp (const char *filename, int line, ++ void *s1, void *s2, int n); ++ ++int ++bcmp (void *s1, void *s2, int n) ++{ ++ return __bounds_check_bcmp (NULL, 0, s1, s2, n); ++} ++ ++#endif ++ ++/* 2. The string functions. */ ++ ++#ifdef Lbounds_strcpy ++ ++__inline__ char * ++__bounds_strcpy (char *dest, const char *src) ++{ ++ char *d = dest; ++ ++ while ((*dest++ = *src++) != 0); ++ return d; ++} ++ ++char * ++__bounds_check_strcpy (const char *filename, int line, ++ char *dest, const char *src) ++{ ++ size_t n = ++ check (filename, line, (void *) src, 0, "strcpy", "source string"); ++ check (filename, line, dest, n, "strcpy", "destination string"); ++ check_overlap (filename, line, dest, n, (void *) src, n, "strcpy"); ++ return __bounds_strcpy (dest, src); ++} ++ ++#endif ++ ++#ifdef Lstrcpy ++ ++extern char *strcpy (char *dest, const char *src); ++extern char *__bounds_check_strcpy (const char *filename, int line, ++ char *dest, const char *src); ++ ++char * ++strcpy (char *dest, const char *src) ++{ ++ return __bounds_check_strcpy (NULL, 0, dest, src); ++} ++ ++#endif ++ ++#ifdef Lbounds_strncpy ++ ++__inline__ char * ++__bounds_strncpy (char *dest, const char *src, size_t n) ++{ ++ char *d = dest; ++ ++ if (n) ++ { ++ for (;;) ++ { ++ if ((int) --n == -1) ++ return d; ++ else if ((*dest++ = *src++) == 0) ++ break; ++ } ++ while (n--) ++ *dest++ = 0; ++ } ++ return d; ++} ++ ++char * ++__bounds_check_strncpy (const char *filename, int line, ++ char *dest, const char *src, size_t n) ++{ ++ char *t1; ++ size_t n1; ++ ++ if (n == 0 && (dest == NULL || src == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "strncpy", ++ "NULL source or destination for a" ++ " zero-sized strncpy"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ t1 = check_ptr (filename, line, (void *) src, "strncpy", "source argument"); ++ if (t1 == NULL) ++ return NULL; ++ n1 = n; ++ while (n1 && *t1) ++ { ++ n1--; ++ t1++; ++ } ++ n1 = (((t1 - src) + 1) < (int) n) ? (size_t) (t1 - src) + 1 : n; ++ check (filename, line, (void *) src, n1, "strncpy", "source string"); ++ check (filename, line, dest, n, "strncpy", "destination string"); ++ check_overlap (filename, line, dest, n, (void *) src, n1, "strncpy"); ++ return __bounds_strncpy (dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lstrncpy ++ ++extern char *strncpy (char *dest, const char *src, size_t n); ++extern char *__bounds_check_strncpy (const char *filename, int line, ++ char *dest, const char *src, size_t n); ++ ++char * ++strncpy (char *dest, const char *src, size_t n) ++{ ++ return __bounds_check_strncpy (NULL, 0, dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_strlen ++ ++__inline__ size_t ++__bounds_strlen (const char *s) ++{ ++ const char *r = s; ++ ++ while (*s++); ++ return (s - r) - 1; ++} ++ ++size_t ++__bounds_check_strlen (const char *filename, int line, const char *s) ++{ ++ return check (filename, line, (void *) s, 0, "strlen", ++ "string argument") - 1; ++} ++ ++#endif ++ ++#ifdef Lstrlen ++ ++extern size_t strlen (const char *s); ++extern size_t __bounds_check_strlen (const char *filename, int line, ++ const char *s); ++ ++size_t ++strlen (const char *s) ++{ ++ return __bounds_check_strlen (NULL, 0, s); ++} ++ ++#endif ++ ++#ifdef Lbounds_strcmp ++ ++__inline__ int ++__bounds_strcmp (const char *s1, const char *s2) ++{ ++ const unsigned char *u1 = (const unsigned char *) s1; ++ const unsigned char *u2 = (const unsigned char *) s2; ++ ++ while (*u1 && *u1 == *u2) ++ { ++ u1++; ++ u2++; ++ } ++ return (*u1 - *u2); ++} ++ ++int ++__bounds_check_strcmp (const char *filename, int line, ++ const char *s1, const char *s2) ++{ ++ char *t1 = check_ptr (filename, line, (void *) s1, "strcmp", ++ "string1 argument"); ++ char *t2 = check_ptr (filename, line, (void *) s2, "strcmp", ++ "string2 argument"); ++ size_t n; ++ ++ if (t1 == NULL || t2 == NULL) ++ return -1; ++ ++ while (*t1 && *t2) ++ { ++ t1++; ++ t2++; ++ } ++ n = (t1 - s1) + 1; ++ check (filename, line, (void *) s1, n, "strcmp", "string1 argument"); ++ check (filename, line, (void *) s2, n, "strcmp", "string2 argument"); ++ return __bounds_strcmp (s1, s2); ++} ++ ++#endif ++ ++#ifdef Lstrcmp ++ ++extern int strcmp (const char *s1, const char *s2); ++extern int __bounds_check_strcmp (const char *filename, int line, ++ const char *s1, const char *s2); ++ ++int ++strcmp (const char *s1, const char *s2) ++{ ++ return __bounds_check_strcmp (NULL, 0, s1, s2); ++} ++ ++#endif ++ ++#ifdef Lbounds_strncmp ++ ++__inline__ int ++__bounds_strncmp (const char *s1, const char *s2, size_t n) ++{ ++ const unsigned char *u1 = (const unsigned char *) s1; ++ const unsigned char *u2 = (const unsigned char *) s2; ++ ++ do ++ { ++ if ((int) --n == -1) ++ break; ++ else if (*u1 != *u2) ++ return *u1 - *u2; ++ u2++; ++ } ++ while (*u1++); ++ return 0; ++} ++ ++int ++__bounds_check_strncmp (const char *filename, int line, ++ const char *s1, const char *s2, size_t n) ++{ ++ char *t1; ++ char *t2; ++ size_t n1; ++ ++ if (n == 0 && (s1 == NULL || s2 == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "strncmp", ++ "NULL source or destination for a" ++ " zero-sized strncmp"); ++ return 0; ++ } ++ if (n == 0) ++ return 0; ++ t1 = check_ptr (filename, line, (void *) s1, "strncmp", "string1 argument"); ++ t2 = check_ptr (filename, line, (void *) s2, "strncmp", "string2 argument"); ++ if (t1 == NULL || t2 == NULL) ++ return -1; ++ n1 = n; ++ while (n1 && *t1 && *t2) ++ { ++ n1--; ++ t1++; ++ t2++; ++ } ++ if (((t1 - s1) + 1) < (int) n) ++ n = (t1 - s1) + 1; ++ check (filename, line, (void *) s1, n, "strncmp", "string1 argument"); ++ check (filename, line, (void *) s2, n, "strncmp", "string2 argument"); ++ return (__bounds_strncmp (s1, s2, n)); ++} ++ ++#endif ++ ++#ifdef Lstrncmp ++ ++extern int strncmp (const char *s1, const char *s2, size_t n); ++extern int __bounds_check_strncmp (const char *filename, int line, ++ const char *s1, const char *s2, size_t n); ++ ++int ++strncmp (const char *s1, const char *s2, size_t n) ++{ ++ return __bounds_check_strncmp (NULL, 0, s1, s2, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_strcat ++ ++__inline__ char * ++__bounds_strcat (char *dest, const char *src) ++{ ++ char *r = dest; ++ ++ while (*dest++); ++ dest--; ++ while ((*dest++ = *src++) != 0); ++ return r; ++} ++ ++char * ++__bounds_check_strcat (const char *filename, int line, ++ char *dest, const char *src) ++{ ++ char *r = ++ check_ptr (filename, line, dest, "strcat", "destination argument"); ++ size_t n = check (filename, line, (void *) src, 0, "strcat", ++ "source argument"); ++ ++ if (r == NULL) ++ return NULL; ++ ++ while (*r++); ++ check (filename, line, dest, n + (r - dest) - 1, "strcat", ++ "destination argument"); ++ check_overlap (filename, line, r - 1, n, (void *) src, n, "strcat"); ++ return (__bounds_strcat (dest, src)); ++} ++ ++#endif ++ ++#ifdef Lstrcat ++ ++extern char *strcat (char *dest, const char *src); ++extern char *__bounds_check_strcat (const char *filename, int line, ++ char *dest, const char *src); ++ ++char * ++strcat (char *dest, const char *src) ++{ ++ return __bounds_check_strcat (NULL, 0, dest, src); ++} ++ ++#endif ++ ++#ifdef Lbounds_strncat ++ ++static __inline__ char * ++__bounds_strncat (char *dest, const char *src, size_t n) ++{ ++ char *r = dest; ++ ++ while (*dest++); ++ dest--; ++ for (;;) ++ { ++ if (n-- == 0) ++ break; ++ else if ((*dest++ = *src++) == 0) ++ return (r); ++ } ++ *dest = 0; ++ return r; ++} ++ ++ ++char * ++__bounds_check_strncat (const char *filename, int line, ++ char *dest, const char *src, size_t n) ++{ ++ char *r; ++ char *p; ++ size_t n1; ++ ++ if (n == 0 && (dest == NULL || src == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "strncat", ++ "NULL source or destination for a" ++ " zero-sized strncat"); ++ return dest; ++ } ++ if (n == 0) ++ return dest; ++ r = check_ptr (filename, line, dest, "strncat", "destination argument"); ++ p = check_ptr (filename, line, (void *) src, "strncat", "source argument"); ++ if (r == NULL || p == NULL) ++ return NULL; ++ n1 = n; ++ while (n1 && *p) ++ { ++ n1--; ++ p++; ++ } ++ if (((p - src) + 1) < (int) n) ++ n = (size_t) (p - src) + 1; ++ check (filename, line, (void *) src, n, "strncat", "source argument"); ++ while (*r++); ++ check (filename, line, dest, n + (r - dest) - 1, "strncat", ++ "destination argument"); ++ check_overlap (filename, line, r - 1, n, (void *) src, n, "strncat"); ++ return __bounds_strncat (dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lstrncat ++ ++extern char *strncat (char *dest, const char *src, size_t n); ++extern char *__bounds_check_strncat (const char *filename, int line, ++ char *dest, const char *src, size_t n); ++ ++char * ++strncat (char *dest, const char *src, size_t n) ++{ ++ return __bounds_check_strncat (NULL, 0, dest, src, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_strpbrk ++ ++static __inline__ char * ++__bounds_strpbrk (const char *string, const char *chs) ++{ ++ char ch; ++ ++ while ((ch = *string++) != 0) ++ { ++ const char *chk = chs; ++ char tch; ++ ++ while ((tch = *chk++) != 0) ++ if (ch == tch) ++ return (char *) string - 1; ++ } ++ return (NULL); ++} ++ ++char * ++__bounds_check_strpbrk (const char *filename, int line, ++ const char *string, const char *chs) ++{ ++ check (filename, line, (void *) string, 0, "strpbrk", "string argument"); ++ check (filename, line, (void *) chs, 0, "strpbrk", "check argument"); ++ return __bounds_strpbrk (string, chs); ++} ++ ++#endif ++ ++#ifdef Lstrpbrk ++ ++extern char *strpbrk (const char *string, const char *chs); ++extern char *__bounds_check_strpbrk (const char *filename, int line, ++ const char *string, const char *chs); ++ ++char * ++strpbrk (const char *string, const char *chs) ++{ ++ return __bounds_check_strpbrk (NULL, 0, string, chs); ++} ++ ++#endif ++ ++#ifdef Lbounds_strrchr ++ ++static __inline__ char * ++__bounds_strrchr (const char *string, int c) ++{ ++ unsigned char ch = c; ++ unsigned char tch; ++ unsigned char *result = NULL; ++ ++ for (;;) ++ { ++ if (ch == (tch = (unsigned char) (*string++))) ++ result = (unsigned char *) string - 1; ++ if (tch == 0) ++ break; ++ } ++ return (char *) result; ++} ++ ++char * ++__bounds_check_strrchr (const char *filename, int line, ++ const char *string, int c) ++{ ++ check (filename, line, (void *) string, 0, "strrchr", "string argument"); ++ return __bounds_strrchr (string, c); ++} ++ ++#endif ++ ++#ifdef Lstrrchr ++ ++extern char *strrchr (const char *string, int c); ++extern char *__bounds_check_strrchr (const char *filename, int line, ++ const char *string, int c); ++ ++char * ++strrchr (const char *string, int c) ++{ ++ return __bounds_check_strrchr (NULL, 0, string, c); ++} ++ ++#endif ++ ++#ifdef Lbounds_rindex ++ ++#ifdef rindex ++#undef rindex ++#endif ++ ++extern char *__bounds_check_strrchr (const char *filename, int line, ++ const char *string, int c); ++ ++char * ++__bounds_check_rindex (const char *filename, int line, ++ const char *string, int c) ++{ ++ return __bounds_check_strrchr (filename, line, string, c); ++} ++ ++#endif ++ ++#ifdef Lrindex ++ ++extern char *rindex (const char *string, int c); ++extern char *__bounds_check_rindex (const char *filename, int line, ++ const char *string, int c); ++ ++char * ++rindex (const char *string, int c) ++{ ++ return __bounds_check_rindex (NULL, 0, string, c); ++} ++ ++#endif ++ ++#ifdef Lbounds_strspn ++ ++extern size_t __bounds_strspn (const char *string, const char *chs); ++ ++size_t ++__bounds_strspn (const char *string, const char *chs) ++{ ++ const char *r = string; ++ char ch; ++ ++ while ((ch = *r++) != 0) ++ { ++ const char *chk = chs; ++ char tch; ++ ++ do ++ { ++ if ((tch = *chk++) == 0) ++ return (r - string) - 1; ++ } ++ while (tch != ch); ++ } ++ return (r - string) - 1; ++} ++ ++size_t ++__bounds_check_strspn (const char *filename, int line, ++ const char *string, const char *chs) ++{ ++ check (filename, line, (void *) string, 0, "strspn", "string argument"); ++ check (filename, line, (void *) chs, 0, "strspn", "check argument"); ++ return __bounds_strspn (string, chs); ++} ++ ++#endif ++ ++#ifdef Lstrspn ++ ++extern size_t strspn (const char *string, const char *chs); ++extern size_t __bounds_check_strspn (const char *filename, int line, ++ const char *string, const char *chs); ++ ++size_t ++strspn (const char *string, const char *chs) ++{ ++ return __bounds_check_strspn (NULL, 0, string, chs); ++} ++ ++#endif ++ ++#ifdef Lbounds_strcspn ++ ++extern size_t __bounds_strcspn (const char *string, const char *chs); ++ ++size_t ++__bounds_strcspn (const char *string, const char *chs) ++{ ++ const char *r = string; ++ char ch; ++ ++ while ((ch = *r++) != 0) ++ { ++ const char *chk = chs; ++ char tch; ++ ++ while ((tch = *chk++) != 0) ++ { ++ if (ch == tch) ++ return (r - string) - 1; ++ } ++ } ++ return (r - string) - 1; ++} ++ ++size_t ++__bounds_check_strcspn (const char *filename, int line, ++ const char *string, const char *chs) ++{ ++ check (filename, line, (void *) string, 0, "strcspn", "string argument"); ++ check (filename, line, (void *) chs, 0, "strcspn", "check argument"); ++ return __bounds_strcspn (string, chs); ++} ++ ++#endif ++ ++#ifdef Lstrcspn ++ ++extern size_t strcspn (const char *string, const char *chs); ++extern size_t __bounds_check_strcspn (const char *filename, int line, ++ const char *string, const char *chs); ++ ++size_t ++strcspn (const char *string, const char *chs) ++{ ++ return __bounds_check_strcspn (NULL, 0, string, chs); ++} ++ ++#endif ++ ++#ifdef Lbounds_strstr ++ ++static __inline__ char * ++__bounds_strstr (const char *s1, const char *s2) ++{ ++ char cp1, cp2; ++ const char *pos = s1; ++ ++ while (*s1) ++ { ++ const char *cmp = s2; ++ ++ while (((cp1 = *s1++) == (cp2 = *cmp++)) && cp1); ++ if (cp2 == 0) ++ return (char *) pos; ++ s1 = ++pos; ++ } ++ return NULL; ++} ++ ++char * ++__bounds_check_strstr (const char *filename, int line, ++ const char *s1, const char *s2) ++{ ++ check (filename, line, (void *) s1, 0, "strstr", "string1 argument"); ++ check (filename, line, (void *) s2, 0, "strstr", "string2 argument"); ++ return __bounds_strstr (s1, s2); ++} ++ ++#endif ++ ++#ifdef Lstrstr ++ ++extern char *strstr (const char *s1, const char *s2); ++extern char *__bounds_check_strstr (const char *filename, int line, ++ const char *s1, const char *s2); ++ ++char * ++strstr (const char *s1, const char *s2) ++{ ++ return __bounds_check_strstr (NULL, 0, s1, s2); ++} ++ ++#endif ++ ++#ifdef Lbounds_strtok ++ ++extern size_t __bounds_strspn (const char *string, const char *chs); ++extern size_t __bounds_strcspn (const char *string, const char *chs); ++ ++static __inline__ char * ++__bounds_strtok (char *str1, const char *str2) ++{ ++ char **last_end = __bounds_strtok_last_end (); ++ char *start; ++ ++ if (str1) ++ *last_end = str1; ++ ++ if (!*last_end) ++ return NULL; ++ ++ *last_end += __bounds_strspn (*last_end, str2); ++ if (**last_end == '\0') ++ return NULL; ++ ++ start = *last_end; ++ *last_end += __bounds_strcspn (*last_end, str2); ++ ++ if (**last_end != '\0') ++ { ++ **last_end = '\0'; ++ (*last_end)++; ++ } ++ ++ return start; ++} ++ ++char * ++__bounds_check_strtok (const char *filename, int line, ++ char *str1, const char *str2) ++{ ++ if (str1 != NULL) ++ check (filename, line, str1, 0, "strtok", "first argument"); ++ check (filename, line, (void *) str2, 0, "strtok", "second argument"); ++ return __bounds_strtok (str1, str2); ++} ++ ++#endif ++ ++#ifdef Lstrtok ++ ++extern char *strtok (char *str1, const char *str2); ++extern char *__bounds_check_strtok (const char *filename, int line, ++ char *str1, const char *str2); ++ ++char * ++strtok (char *str1, const char *str2) ++{ ++ return __bounds_check_strtok (NULL, 0, str1, str2); ++} ++ ++#endif ++ ++#ifdef Lbounds_strtok_r ++ ++extern size_t __bounds_strspn (const char *string, const char *chs); ++extern size_t __bounds_strcspn (const char *string, const char *chs); ++ ++static __inline__ char * ++__bounds_strtok_r (char *str1, const char *str2, char **lasts) ++{ ++ char *start; ++ ++ if (str1) ++ *lasts = str1; ++ ++ if (!*lasts) ++ return NULL; ++ ++ *lasts += __bounds_strspn (*lasts, str2); ++ if (**lasts == '\0') ++ return NULL; ++ ++ start = *lasts; ++ *lasts += __bounds_strcspn (*lasts, str2); ++ ++ if (**lasts != '\0') ++ { ++ **lasts = '\0'; ++ (*lasts)++; ++ } ++ ++ return start; ++} ++ ++char * ++__bounds_check_strtok_r (const char *filename, int line, ++ char *str1, const char *str2, char **lasts) ++{ ++ if (str1 != NULL) ++ check (filename, line, str1, 0, "strtok", "first argument"); ++ check (filename, line, (void *) str2, 0, "strtok", "second argument"); ++ return __bounds_strtok_r (str1, str2, lasts); ++} ++ ++#endif ++ ++#ifdef Lstrtok ++ ++extern char *strtok_r (char *str1, const char *str2, char **lasts); ++extern char *__bounds_check_strtok_r (const char *filename, int line, ++ char *str1, const char *str2, ++ char **lasts); ++ ++char * ++strtok_r (char *str1, const char *str2, char **lasts) ++{ ++ return __bounds_check_strtok_r (NULL, 0, str1, str2, lasts); ++} ++ ++#endif ++ ++#ifdef Lbounds_strchr ++ ++static __inline__ char * ++__bounds_strchr (const char *string, int ch) ++{ ++ int tch; ++ ++ for (;;) ++ if ((tch = (unsigned char) (*string++)) == (unsigned char) ch) ++ return (char *) string - 1; ++ else if (tch == 0) ++ return NULL; ++} ++ ++char * ++__bounds_check_strchr (const char *filename, int line, ++ const char *string, int ch) ++{ ++ check (filename, line, (void *) string, 0, "strchr", "string argument"); ++ return __bounds_strchr (string, ch); ++} ++ ++#endif ++ ++#ifdef Lstrchr ++ ++extern char *strchr (const char *string, int ch); ++extern char *__bounds_check_strchr (const char *filename, int line, ++ const char *string, int ch); ++ ++char * ++strchr (const char *string, int ch) ++{ ++ return __bounds_check_strchr (NULL, 0, string, ch); ++} ++ ++#endif ++ ++#ifdef Lbounds_strdup ++ ++char * ++__bounds_check_strdup (const char *filename, int line, const char *string) ++{ ++ sigset_t old_mask; ++ char *new; ++ size_t n = check (filename, line, (void *) string, 0, "strdup", ++ "string argument"); ++ enter_critical_section (&old_mask); ++ new = __bounds_malloc (n + 1); ++ if (new != NULL) ++ __bounds_add_heap_object (new, n, 1, "strdup", 0, filename, line); ++ leave_critical_section (&old_mask); ++ return new ? __bounds_strcpy (new, string) : NULL; ++} ++ ++#endif ++ ++#ifdef Lstrdup ++ ++extern char *strdup (const char *string); ++extern char *__bounds_check_strdup (const char *filename, int line, ++ const char *string); ++ ++char * ++strdup (const char *string) ++{ ++ return __bounds_check_strdup (NULL, 0, string); ++} ++ ++#endif ++ ++#ifdef Lbounds_index ++ ++#ifdef index ++#undef index ++#endif ++ ++extern char *__bounds_check_strchr (const char *filename, int line, ++ const char *string, int ch); ++ ++char * ++__bounds_check_index (const char *filename, int line, ++ const char *string, int ch) ++{ ++ return __bounds_check_strchr (filename, line, string, ch); ++} ++ ++#endif ++ ++#ifdef Lindex ++ ++extern char *index (const char *string, int ch); ++extern char *__bounds_check_index (const char *filename, int line, ++ const char *string, int ch); ++ ++char * ++index (const char *string, int ch) ++{ ++ return __bounds_check_index (NULL, 0, string, ch); ++} ++ ++#endif ++ ++#ifdef Lbounds_strcoll ++ ++static __inline__ int ++__bounds_strcoll (const char *string1, const char *string2) ++{ ++ while (*string1 && (*string1 == *string2)) ++ { ++ string1++; ++ string2++; ++ } ++ return *string1 - *string2; ++} ++ ++int ++__bounds_check_strcoll (const char *filename, int line, ++ const char *string1, const char *string2) ++{ ++ check (filename, line, (void *) string1, 0, "strcoll", "first argument"); ++ check (filename, line, (void *) string2, 0, "strcoll", "second argument"); ++ return __bounds_strcoll (string1, string2); ++} ++ ++#endif ++ ++#ifdef Lstrcoll ++ ++extern int strcoll (const char *string1, const char *string2); ++extern int __bounds_check_strcoll (const char *filename, int line, ++ const char *string1, const char *string2); ++ ++int ++strcoll (const char *string1, const char *string2) ++{ ++ return __bounds_check_strcoll (NULL, 0, string1, string2); ++} ++ ++#endif ++ ++#ifdef Lbounds_strxfrm ++ ++static __inline__ size_t ++__bounds_strxfrm (char *to, const char *from, size_t n) ++{ ++ int count = 0; ++ while (*from++) ++ count++; ++ from -= count; ++ from--; ++ ++ if (n != 0) ++ while ((*to++ = *from++) && (--n != 0)); ++ ++ return ((size_t) count); ++} ++ ++size_t ++__bounds_check_strxfrm (const char *filename, int line, ++ char *to, const char *from, size_t n) ++{ ++ check (filename, line, (void *) from, 0, "strxfrm", "src argument"); ++ if (n) ++ check (filename, line, to, n, "strxfrm", "dest argument"); ++ return __bounds_strxfrm (to, from, n); ++} ++ ++#endif ++ ++#ifdef Lstrxfrm ++ ++extern size_t strxfrm (char *to, const char *from, size_t n); ++extern size_t __bounds_check_strxfrm (const char *filename, int line, ++ char *to, const char *from, size_t n); ++ ++size_t ++strxfrm (char *to, const char *from, size_t n) ++{ ++ return __bounds_check_strxfrm (NULL, 0, to, from, n); ++} ++ ++#endif ++ ++#define LOW(c) (islower((int)(c)) ? c : tolower((int)(c))) ++ ++#ifdef Lbounds_strcasecmp ++ ++static __inline__ int ++__bounds_strcasecmp (const char *s1, const char *s2) ++{ ++ const unsigned char *u1 = (const unsigned char *) s1; ++ const unsigned char *u2 = (const unsigned char *) s2; ++ ++ while (*u1 && LOW (*u1) == LOW (*u2)) ++ { ++ u1++; ++ u2++; ++ } ++ return (LOW (*u1) - LOW (*u2)); ++} ++ ++int ++__bounds_check_strcasecmp (const char *filename, int line, ++ const char *s1, const char *s2) ++{ ++ char *t1 = check_ptr (filename, line, (void *) s1, "strcasecmp", ++ "first argument"); ++ char *t2 = check_ptr (filename, line, (void *) s2, "strcasecmp", ++ "second argument"); ++ size_t n; ++ ++ if (t1 == NULL || t2 == NULL) ++ return 0; ++ ++ while (*t1 && *t2) ++ { ++ t1++; ++ t2++; ++ } ++ n = (t1 - s1) + 1; ++ check (filename, line, (void *) s1, n, "strcasecmp", "string1 argument"); ++ check (filename, line, (void *) s2, n, "strcasecmp", "string2 argument"); ++ return __bounds_strcasecmp (s1, s2); ++} ++ ++#endif ++ ++#ifdef Lstrcasecmp ++ ++extern int strcasecmp (const char *s1, const char *s2); ++extern int __bounds_check_strcasecmp (const char *filename, int line, ++ const char *s1, const char *s2); ++ ++int ++strcasecmp (const char *s1, const char *s2) ++{ ++ return __bounds_check_strcasecmp (NULL, 0, s1, s2); ++} ++ ++#endif ++ ++#ifdef Lbounds_strncasecmp ++ ++static __inline__ int ++__bounds_strncasecmp (const char *s1, const char *s2, size_t n) ++{ ++ const unsigned char *u1 = (const unsigned char *) s1; ++ const unsigned char *u2 = (const unsigned char *) s2; ++ ++ do ++ { ++ if ((int) --n == -1) ++ break; ++ else if (LOW (*u1) != LOW (*u2)) ++ return LOW (*u1) - LOW (*u2); ++ u2++; ++ } ++ while (*u1++); ++ return 0; ++} ++ ++int ++__bounds_check_strncasecmp (const char *filename, int line, ++ const char *s1, const char *s2, size_t n) ++{ ++ char *t1; ++ char *t2; ++ size_t n1; ++ ++ if (n == 0 && (s1 == NULL || s2 == NULL)) ++ { ++ if (__bounds_warn_misc_strings) ++ __bounds_warning (filename, line, "strncasecmp", ++ "NULL source or destination for a" ++ " zero-sized strncasecmp"); ++ return 0; ++ } ++ if (n == 0) ++ return 0; ++ t1 = check_ptr (filename, line, (void *) s1, "strncasecmp", ++ "string1 argument"); ++ t2 = check_ptr (filename, line, (void *) s2, "strncasecmp", ++ "string2 argument"); ++ if (t1 == NULL || t2 == NULL) ++ return 0; ++ n1 = n; ++ while (n1 && *t1 && *t2) ++ { ++ n1--; ++ t1++; ++ t2++; ++ } ++ if (((t1 - s1) + 1) < (int) n) ++ n = (size_t) (t1 - s1) + 1; ++ check (filename, line, (void *) s1, n, "strncasecmp", "string1 argument"); ++ check (filename, line, (void *) s2, n, "strncasecmp", "string2 argument"); ++ return __bounds_strncasecmp (s1, s2, n); ++} ++ ++#endif ++ ++#ifdef Lstrncasecmp ++ ++extern int strncasecmp (const char *s1, const char *s2, size_t n); ++extern int __bounds_check_strncasecmp (const char *filename, int line, ++ const char *s1, const char *s2, ++ size_t n); ++ ++int ++strncasecmp (const char *s1, const char *s2, size_t n) ++{ ++ return __bounds_check_strncasecmp (NULL, 0, s1, s2, n); ++} ++ ++#endif ++ ++/* The odd functions `memccpy' and `memchr' are treated separately ++ here. With these functions, it is permissible to have a `size' ++ argument that is too large, so long as we will always meet ++ the `c' terminating character before the end of the object. */ ++ ++static __inline__ void ++check2 (const char *filename, int line, ++ void *pointer, size_t size, int c, const char *function, ++ const char *ptr_name) ++{ ++ object *obj; ++ ++ if (__bounds_debug_no_checking) ++ return; ++ ++#if 0 /* This check is redundant. All callers should cast the argument to ++ unsigned char before calling. ++ - Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de> ++ & RWMJ. */ ++ if (c < 0 || c > 255) ++ __bounds_errorf (filename, line, pointer, NULL, ++ "%s called with terminating character < 0 or > 255", ++ function); ++#endif ++ ++ if (pointer == NULL || pointer == ILLEGAL) ++ { ++ __bounds_errorf (filename, line, pointer, NULL, ++ "NULL or ILLEGAL %s used in %s", ptr_name, function); ++ return; ++ } ++ if ((obj = __bounds_find_object (pointer)) == NULL) ++ { ++ maybe_is_unchecked (pointer, NULL, 0, function); ++ /* Unchecked pointer is OK. We have already delivered a warning at ++ this point. */ ++ return; ++ } ++ ++ /* The pointer itself is valid, and points to a checked object. Now make ++ sure that we won't overrun the object by using this pointer and size. ++ However, if size does overrun, give it a second chance by looking for ++ the terminating character. */ ++ if ((void *) ((char *) pointer + size) > obj->extent) ++ { ++ char *p = (char *) pointer; ++ size_t n = (char *) obj->extent - (char *) pointer; ++ ++ for (; n && *p != c; n--, p++) ++ ; ++ if (n == 0) ++ { ++ __bounds_errorf (filename, line, pointer, obj, ++ "%s with this %s would overrun the" ++ " end of the object's allocated memory", ++ function, ptr_name); ++ return; ++ } ++ /* If n > 0, then OK: The area is still acceptable. */ ++ } ++ return; ++} ++ ++#ifdef Lbounds_memchr ++ ++__inline__ void * ++__bounds_memchr (const void *s, int c, size_t n) ++{ ++ const unsigned char *cs = (const unsigned char *) s; ++ for (; n; n--) ++ { ++ if (*cs == (unsigned char) c) ++ return (void *) cs; ++ cs++; ++ } ++ return NULL; ++} ++ ++void * ++__bounds_check_memchr (const char *filename, int line, ++ const void *s, int c, size_t n) ++{ ++#if STRICT_MEMCHR ++ check (filename, line, (void *) s, n, "memchr", "pointer argument"); ++#else ++ check2 (filename, line, (void *) s, n, (unsigned char) c, "memchr", ++ "pointer argument"); ++#endif ++ return __bounds_memchr (s, c, n); ++} ++ ++#endif ++ ++#ifdef Lmemchr ++ ++extern void *memchr (const void *s, int c, size_t n); ++extern void *__bounds_check_memchr (const char *filename, int line, ++ const void *s, int c, size_t n); ++ ++void * ++memchr (const void *s, int c, size_t n) ++{ ++ return __bounds_check_memchr (NULL, 0, s, c, n); ++} ++ ++#endif ++ ++#ifdef Lbounds_memccpy ++ ++__inline__ void * ++__bounds_memccpy (void *dest, const void *src, int c, size_t n) ++{ ++ char *d = (char *) dest; ++ const char *s = (const char *) src; ++ ++ for (; n; n--) ++ { ++ if ((char) c == (*d++ = *s++)) ++ return (void *) d; ++ } ++ return NULL; ++} ++ ++void * ++__bounds_check_memccpy (const char *filename, int line, ++ void *dest, const void *src, int c, size_t n) ++{ ++#if STRICT_MEMCCPY ++ check (filename, line, (void *) src, n, "memccpy", "source pointer"); ++#else ++ check2 (filename, line, (void *) src, n, (unsigned char) c, "memccpy", ++ "source pointer"); ++#endif ++ check (filename, line, dest, n, "memccpy", "destination pointer"); ++ check_overlap (filename, line, dest, n, (void *) src, n, "memccpy"); ++ return __bounds_memccpy (dest, src, c, n); ++} ++ ++#endif ++ ++#ifdef Lmemccpy ++ ++extern void *memccpy (void *dest, const void *src, int c, size_t n); ++extern void *__bounds_check_memccpy (const char *filename, int line, ++ void *dest, const void *src, ++ int c, size_t n); ++ ++void * ++memccpy (void *dest, const void *src, int c, size_t n) ++{ ++ return __bounds_check_memccpy (NULL, 0, dest, src, c, n); ++} ++ ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/valloc.c gcc-4.0.2/gcc/bounds/lib/valloc.c +--- gcc-4.0.2.org/gcc/bounds/lib/valloc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/valloc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* Allocate memory on a page boundary. ++ Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. ++ ++This library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++This library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with this library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. ++ ++ The author may be reached (Email) at the address mike@ai.mit.edu, ++ or (US mail) as Mike Haertel c/o Free Software Foundation. */ ++ ++#include "bounds-lib.h" ++ ++#ifdef __vxworks ++#include <stddef.h> ++#else ++ ++#if defined (__GNU_LIBRARY__) || defined (_LIBC) ++#include <stddef.h> ++#include <sys/cdefs.h> ++extern size_t __getpagesize (void); ++#else ++#include "getpagesize.h" ++#define __getpagesize() getpagesize() ++#endif ++#endif ++ ++#ifndef _MALLOC_INTERNAL ++#define _MALLOC_INTERNAL ++#include <malloc.h> ++#endif ++ ++static __malloc_size_t pagesize; ++ ++__ptr_t ++__bounds_valloc (__malloc_size_t size) ++{ ++ if (pagesize == 0) ++ pagesize = __getpagesize (); ++ ++ return __bounds_memalign (pagesize, size); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/version.h gcc-4.0.2/gcc/bounds/lib/version.h +--- gcc-4.0.2.org/gcc/bounds/lib/version.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/version.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,35 @@ ++/* Bounds Checking for GCC. ++ Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ File: ++ lib/version.h ++ Summary: ++ Get version number information automatically. ++ Other notes: ++ ++ Author Date Notes ++ RWMJ 16/8/95 Initial implementation. ++*/ ++ ++#ifndef _VERSION_H_ ++#define _VERSION_H_ ++ ++#include "../VERSION" ++ ++#define VERSION_STRING VERSION_GCC "-" VERSION_LIBRARY ++ ++#endif /* _VERSION_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/lib/vm-limit.c gcc-4.0.2/gcc/bounds/lib/vm-limit.c +--- gcc-4.0.2.org/gcc/bounds/lib/vm-limit.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/lib/vm-limit.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,140 @@ ++/* Functions for memory limit warnings. ++ Copyright (C) 1990, 1992 Free Software Foundation, Inc. ++ ++ ++This file is part of the GNU C Library. Its master source is NOT part of ++the C library, however. The master source lives in /gd/gnu/lib. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++#ifdef emacs ++#include <config.h> ++#include "lisp.h" ++#endif ++ ++#ifndef emacs ++#include <stddef.h> ++typedef size_t SIZE; ++typedef void *POINTER; ++#define EXCEEDS_LISP_PTR(x) 0 ++#endif ++ ++#include "malloc.h" ++#include "mem-limits.h" ++ ++#include "bounds-lib.h" ++ ++/* ++ Level number of warnings already issued. ++ 0 -- no warnings issued. ++ 1 -- 75% warning already issued. ++ 2 -- 85% warning already issued. ++ 3 -- 95% warning issued; keep warning frequently. ++*/ ++static int warnlevel; ++ ++/* Function to call to issue a warning; ++ 0 means don't issue them. */ ++static void (*warn_function) (const char *); ++ ++/* Get more memory space, complaining if we're near the end. */ ++ ++static void ++check_memory_limits (void) ++{ ++ extern POINTER (*__morecore) (ptrdiff_t); ++ ++ register POINTER cp; ++ unsigned long five_percent; ++ unsigned long data_size; ++ ++ if (lim_data == 0) ++ get_lim_data (); ++ five_percent = lim_data / 20; ++ ++ /* Find current end of memory and issue warning if getting near max */ ++ cp = (char *) (*__morecore) (0); ++ data_size = (char *) cp - (char *) data_space_start; ++ ++ if (warn_function) ++ switch (warnlevel) ++ { ++ case 0: ++ if (data_size > five_percent * 15) ++ { ++ warnlevel++; ++ (*warn_function) ("Warning: past 75% of memory limit"); ++ } ++ break; ++ ++ case 1: ++ if (data_size > five_percent * 17) ++ { ++ warnlevel++; ++ (*warn_function) ("Warning: past 85% of memory limit"); ++ } ++ break; ++ ++ case 2: ++ if (data_size > five_percent * 19) ++ { ++ warnlevel++; ++ (*warn_function) ("Warning: past 95% of memory limit"); ++ } ++ break; ++ ++ default: ++ (*warn_function) ("Warning: past acceptable memory limits"); ++ break; ++ } ++ ++ /* If we go down below 70% full, issue another 75% warning ++ when we go up again. */ ++ if (data_size < five_percent * 14) ++ warnlevel = 0; ++ /* If we go down below 80% full, issue another 85% warning ++ when we go up again. */ ++ else if (warnlevel > 1 && data_size < five_percent * 16) ++ warnlevel = 1; ++ /* If we go down below 90% full, issue another 95% warning ++ when we go up again. */ ++ else if (warnlevel > 2 && data_size < five_percent * 18) ++ warnlevel = 2; ++ ++ if (EXCEEDS_LISP_PTR (cp)) ++ (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); ++} ++ ++/* Cause reinitialization based on job parameters; ++ also declare where the end of pure storage is. */ ++ ++void ++memory_warnings (POINTER start, void (*warnfun) (const char *)) ++{ ++ extern void (*__after_morecore_hook) (void); /* From gmalloc.c */ ++ ++ if (start) ++ data_space_start = start; ++ else ++#ifdef __vxworks ++ data_space_start = NULL; ++#else ++ data_space_start = start_of_data (); ++#endif ++ ++ warn_function = warnfun; ++ __after_morecore_hook = check_memory_limits; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/MACHINES gcc-4.0.2/gcc/bounds/MACHINES +--- gcc-4.0.2.org/gcc/bounds/MACHINES 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/MACHINES 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,42 @@ ++These are the machines on which GCC with bounds checking is known to work. ++Please send updates to this list to `rjones@orchestream.com' or ++'Haj.Ten.Brugge@net.HCC.nl'. ++ ++Linux 1.2.13 (i386) <rjones@orchestream.com> ++ ++SunOS 4.1.3 (Sparc) <rjones@orchestream.com> ++ ++Solaris 2.4 (Sparc) <rjones@orchestream.com> ++ ++Solaris 2.6 (Sparc) <Haj.Ten.Brugge@net.HCC.nl> ++ ++Solaris 8 (Sparc) <Haj.Ten.Brugge@net.HCC.nl> ++ ++HPUX 9.05 (HP-PA) <rjones@orchestream.com> ++ ++ESIX SVR 4.0.4 (i386) <Haj.Ten.Brugge@net.HCC.nl> ++ ++Unixware 2.0.3 (i586) <Haj.Ten.Brugge@net.HCC.nl> ++ ++Linux 2.0.32 (i686) <Haj.Ten.Brugge@net.HCC.nl> ++ ++SunOs 4.1.1 (M68k) <Haj.Ten.Brugge@net.HCC.nl> ++ ++OSF 2.0 (DEC Alpha) <tuppa@iue.tuwien.ac.at> ++ ++FreeBSD 2.0 (i386) <u27113@kb.be> (Danny Backx) ++ ++ - Trouble caused when you set the environment variable ENABLE_STARTUP_ ++ LOCALE. Danny Backx's advice is not to set this. Alternatively, static ++ linking works with and without this variable. ++ ++Ultrix 4.2A (MIPS) <drochner@zelux6.zel.kfa-juelich.de> (Matthias Drochner) ++ ++OS/2 (i386) <mattes@azu.informatik.uni-stuttgart.de> (Eberhard Mattes) ++ ++AIX-4.3.2 (H50 RS/6000) <ad5gb@yahoo.com> (Randall DuCharme) ++ ++SCO OpenServer 5.0.4 (x86) <ad5gb@yahoo.com> (Randall DuCharme) ++ ++SCO UnixWare 7.1.1 (x86) <ad5gb@yahoo.com> (Randall DuCharme) ++ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/makediffs.sh gcc-4.0.2/gcc/bounds/makediffs.sh +--- gcc-4.0.2.org/gcc/bounds/makediffs.sh 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/makediffs.sh 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,141 @@ ++: ++# makediffs.sh -- create a patch set ++# This script expects that you are in a directory tree containing ++# a bounds checked version of egcs with a root starting "begcs" ++# and a parallel tree containing an unmodified egcs. ++# For example, ++# /home/gnu/egcs-yyyymmdd = unmodified egcs ++# /home/gnu/begcs-yyyymmdd = bounds-checking egcs ++# You are somewhere under /home/gnu/begcs-yyyymmdd ++# The script will make a set of patches to capture the bounds checker. ++# ++# 13Jan00 wb initial version ++# 25Jan00 wb reject objc-parse.c (built from .y) ++# 29Mar00 wb reject cexp.c (built from .y) ++# 18May00 wb reject parse.[ch] (built, except for the ones in gcc/ch) ++# 31May00 wb reject c-parse.h (built from .c built from .in) ++# 05Jun00 wb reject configure, change diff from -x pattern to -X file ++# 17Jul00 wb reject objc-parse.y, parse-scan.c and tradcif.c ++# 25Oct01 wb reject tm.h ++# 05Jun02 wb reject core, a.out, general-test, *.o ++# 16Oct02 wb check libstdc++-v3, set LC_COLLATE for C ++ ++# set -x ++ ++# diff options; ++# -r = scan directories recursively ++# -N = treat new files as empty to the diffs include the contents of ++# new files instead of just noting that they are in one directory ++# but not the other ++# -U # = unified diffs (for compactness) with # lines before and after ++# Most files have only a few difference sections, so increasing ++# # from the default of 2 has little effect on the total size ++# while providing more context (to both you and patch) when ++# run against different versions of egcs or gcc. ++# I think it is better to have 'hunks' fail than for patch to ++# update the wrong lines. ++# -x PAT = exclude files matching pattern PAT ++ ++# Search for gnu-diff ++ ++DIFF= ++for name in /usr/local/bin/gdiff /usr/local/bin/diff ++do ++ if [ -x "$name" ] ; then DIFF="$name" ; break ; fi ++done ++ ++if [ -z "$DIFF" ] ; then DIFF=diff ; fi ++ ++# Sort in C order ++ ++LC_COLLATE=C ++export LC_COLLATE ++ ++# Find a starting directory ++ ++begcs_root= ++ ++name=`pwd` ++ ++case "$name" in ++*/begcs-*) ++ begcs_root=`echo $name | sed -e 's/\(.*\/begcs-[^/]*\).*/\1/'` ++ ;; ++*/bgcc-*) ++ begcs_root=`echo $name | sed -e 's/\(.*\/bgcc-[^/]*\).*/\1/'` ++ ;; ++*) ++ echo "$0: Error: $name does not contain a begcs name segment" ++ exit ++ ;; ++esac ++ ++gnu_root=`dirname $begcs_root` ++begcs_dir=`basename $begcs_root` ++egcs_dir=`echo $begcs_dir | sed -e 's/^b//'` ++egcs_root="$gnu_root/$egcs_dir" ++ ++ok=no ++ ++if [ -z "$begcs_root" ] ++then ++ echo "$0: Error: could not find a begcs root in ${name}." ++elif [ ! -d "$begcs_root" ] ++then ++ echo "$0: Error: root $begcs_root derived from $name is not a directory." ++elif [ ! -d "$begcs_root/gcc/bounds" ] ++then ++ echo "$0: Error: directory $begcs_root/gcc/bounds not found." ++elif [ -z "$gnu_root" ] ++then ++ echo "$0: Error: could not find root in ${begcs_root}." ++elif [ ! -d "$gnu_root" ] ++then ++ echo "$0: Error: root $gnu_root in ${begcs_root} is not a directory." ++elif [ ! -d "$egcs_root" ] ++then ++ echo "$0: Error: original egcs $egcs_root not found." ++elif [ ! -d "$egcs_root/gcc" ] ++then ++ echo "$0: Error: original egcs $egcs_root/gcc not found." ++else ++ ok=yes ++fi ++ ++if [ "$ok" != yes ] ++then ++ exit ++fi ++ ++# Make the patch file ++ ++cd "$gnu_root" ++ ++patch_file="${gnu_root}/${egcs_dir}-${begcs_dir}.pat" ++if [ -f "$patch_file" ] ++then ++ mv "$patch_file" "${patch_file}-" ++fi ++if [ -f "$patch_file" ] ++then ++ echo "$0: Patch file $patch_file already exists." ++ exit ++fi ++ ++set -x ++ ++# -x 'c-parse.[chy]*' -x 'objc-parse.c' -x 'parse.[ch]' \ ++# -x 'cexp.c' \ ++# -x 'configure' \ ++# -x '*.rej' -x '*-' -x '*~' -x 'junk*' ++ ++touch "$patch_file" ++ ++for dir in gcc libstdc++-v3 ++do ++ $DIFF -rN -U 8 \ ++ -X "$begcs_dir/gcc/bounds/diffexclude.dat" \ ++ "$egcs_dir/$dir" "$begcs_dir/$dir" >> "$patch_file" ++done ++ ++ls -l "$patch_file" +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/make_patch gcc-4.0.2/gcc/bounds/make_patch +--- gcc-4.0.2.org/gcc/bounds/make_patch 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/make_patch 2005-09-29 17:50:55.000000000 +0200 +@@ -0,0 +1,9 @@ ++#! /bin/sh ++ ++REL=gcc-4.0.2 ++( ++ cat $REL/gcc/bounds/README ++ diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' \ ++ -x 'parse.[ch]' -x '*.info*' \ ++ $REL.org $REL ++) > bounds_patch_$REL +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/make.sh gcc-4.0.2/gcc/bounds/make.sh +--- gcc-4.0.2.org/gcc/bounds/make.sh 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/make.sh 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,415 @@ ++: ++# make.sh -- build gcc/egcs ++# ++# Passes options to the make ++# no options = "bootstrap" ++# use "all" to build all languages ++# ++# 02Jun00 wb initial version, only tested under SuSE Linux 6.2 ++# 05Jun00 wb add more comments, add -bgcc to build with bounds checking ++# 06Jun00 wb update to configure for C only ++# 19Jul00 wb do not touch objc/objc-parse.y if it does not exist ++# 13Aug01 wb add Linux release to the objdir name ++# 03Sep01 wb update for FreeBSD ++# 05Jun02 wb added -with-gnu option, do --disable-multilib on old Suns ++ ++# Remove extra environment symbols ++ ++dir=`dirname $0` ++if [ -f "$dir/unsetall.sh" ] ; then . $dir/unsetall.sh ++elif [ -f "$HOME/bin/unsetall.sh" ] ; then . $HOME/bin/unsetall.sh ++fi ++ ++# Find out where we are ++ ++pwd=`pwd` ++program="`basename $pwd`" ++uname_s="`uname -s`" ++uname_n="`uname -n`" ++uname_r="`uname -r`" ++uname_m="`uname -m`" ++ ++# Parse the command line ++ ++cpu=i686 ++cc= ++cflags= ++mflags= ++langvar= ++cross= ++coff= ++as= ++config_flags= ++nice="nice nice" ++with_gnu= ++ ++case "$program" in ++*egcs*) opt=no ;; ++*) opt=yes ;; ++esac ++ ++case "$program" in ++*egcs*|*gcc*) echo "Building $program" ;; ++*) echo "$0: Error: $pwd is not an egcs or gcc directory" ; exit 1 ;; ++esac ++ ++while [ ! -z "$1" ] ++do ++ done=no ++ ++ case "$1" in ++ -O0) opt=no ;; # No optimization ++ -Od) opt=def ;; # Default optimization ++ -Oy) opt=yes ;; # Enable optimization ++ -g) cflags="$cflags -g" ;; # Add symbol tables ++ -6) cpu=i686 ;; # Force 686 on SCO Unix ++ -5) cpu=i586 ;; # Force 586 on SCO Unix ++ -4) cpu=i486 ;; # Force 486 on SCO Unix ++ -gcc) cc=gcc ;; # Build with gcc ++ -bgcc) cc=bgcc ;; # Build with bgcc ++ -cc) cc=cc ;; # Build with cc ++ -rcc) cc=rcc ;; # Build with SCO rcc ++ -cross) cross=yes ;; # Test SCO cross-compile ++ -coff) coff=yes ;; # Build with COFF on SCO v5 ++ -langc) langvar="LANGUAGES='c'" # Build C compiler only ++ config_flags="$config_flags --enable-languages=c" ;; ++ -j2) mflags="$mflags -j 2" ;; # Make with 2 jobs ++ -gas) as=gas ;; # Force gnu-as ++ -with-gnu|-gnu) with_gnu=yes ;; # Force gnu-as and gnu-ld ++ -x) set -x ;; # Enable shell debugging ++ --) shift ; done=yes ;; # Pass remaining args to make ++ -*) echo "$0: Unknown option $1" ;; # Warning message ++ *) done=yes ;; # Found make target ++ esac ++ ++ if [ "$done" = yes ] ++ then ++ break ++ fi ++ ++ shift ++done ++ ++# Do a bootstrap if no arguments ++ ++if [ -z "$*" ] ++then ++ set -- bootstrap ++fi ++ ++# Locate make ++ ++make=make ++if [ -x /usr/local/bin/gmake ] ++then ++ make=/usr/local/bin/gmake ++fi ++ ++# Set the object directory and build flags ++ ++objdir=objdir ++ ++case "${uname_n}-${uname_s}" in ++*-SCO_SV) ++ if [ -z "$cc" ] ; then cc=cc ; fi ++ objdir="${objdir}v5" ++ ;; ++*-Linux) ++ if [ -z "$cc" ] ; then cc=gcc ; fi ++ objdir="${objdir}lin" ++ case "$uname_r" in ++ [0-9].[0-9]*) objdir="$objdir`echo $uname_r | awk -F . '{ print $1.$2 }'`" ++ esac ++ cflags="$cflags -pipe" ++ ;; ++*-FreeBSD) ++ if [ -z "$cc" ] ; then cc=gcc ; fi ++ cflags="$cflags -pipe" ++ ;; ++*-SunOS) ++ if [ -z "$cc" ] ++ then ++ if [ -x /usr/local/bin/gcc -o -x /usr/bin/gcc ] ++ then ++ cc=gcc ++ else ++ cc=cc ++ fi ++ fi ++ case "$cc" in ++ *gcc*) ++ if [ -x /usr/local/bin/as ] ++ then ++ cflags="$cflags -pipe" ++ fi ++ ;; ++ esac ++ case "$uname_m" in ++ sun4c) ++ # disable-multilib is required on 32-bit Solaris builds ++ config_flags="$config_flags --disable-multilib" ++ ;; ++ esac ++ ;; ++*) ++ if [ -z "$cc" ] ++ then ++ if [ -x /usr/local/bin/gcc -o -x /usr/bin/gcc ] ++ then ++ cc=gcc ++ else ++ cc=cc ++ fi ++ fi ++ case "$cc" in ++ *gcc*) ++ if [ -x /usr/local/bin/as ] ++ then ++ cflags="$cflags -pipe" ++ fi ++ ;; ++ esac ++ # Check for sco 3.2v4 which has limited environment space ++ if [ "$uname_n" = "$uname_s" ] ++ then ++ mflags="$mflags -e" ++ echo "If this fails, try expmake.sh and rerun with make -e" ++ fi ++ ;; ++esac ++ ++case "$cc" in ++*bgcc*) objdir="${objdir}bgcc" ;; ++*gcc*) objdir="${objdir}gcc" ;; ++*rcc) objdir="${objdir}rcc" ;; ++esac ++ ++# Check for sco 3.2v4, the configuration sometimes guesses wrong ++ ++if [ "$uname_n" = "$uname_s" ] ++then ++ name="$cpu-pc-sco3.2v4.0" ++ config_flags="$config_flags --build=$name --host=$name --target=$name --verbose" ++fi ++ ++# Try to build a sco 3.2v4 cross-compiler hosted on sco v5 ++ ++if [ "$cross" = yes ] ++then ++ name="$cpu-pc-sco3.2v4.0" ++ config_flags="$config_flags --build=$cpu-pc-sco3.2v5.0.5 --host=$name --target=$name --verbose" ++ objdir="${objdir}x" ++fi ++ ++# Try to build a sco v5 compiler that generates coff instead of elf ++ ++if [ "$coff" = yes ] ++then ++ if [ "$cc" = gcc ] ++ then ++ cflags="$cflags -mcoff" # coff option for gcc ++ objdir="${objdir}gc" ++ else ++ cflags="$cflags -b coff" # coff option for sco cc ++ objdir="${objdir}sc" ++ fi ++fi ++ ++# Locate the assembler ++ ++case "$as" in ++*gas) ++ objdir="${objdir}gas" ++ config_flags="$config_flags --with-gnu-as" ++ if [ "$as" = gas -a \ ++ -x /usr/local/bin/as -a \ ++ ! -x /usr/local/bin/gas ] ++ then ++ as=/usr/local/bin/as ++ fi ++ ;; ++esac ++ ++if [ "$with_gnu" = yes -a -z "$as" ] ++then ++ gas=/usr/local/bin/as ++ if [ -x "$gas" ] ++ then ++ as="$gas" ++ config_flags="$config_flags --with-gnu-as --with-as=$as" ++ fi ++ unset gas ++fi ++ ++if [ -z "$as" ] ++then ++ as=as ++fi ++ ++for dir in /usr/local/bin /bin /usr/bin ++do ++ if [ -x "$dir/$as" ] ++ then ++ as="$dir/$as" ++ break ++ fi ++done ++ ++# Check for the gnu linker ++ ++if [ "$with_gnu" = yes ] ++then ++ gld=/usr/local/bin/ld ++ if [ -x "$gld" ] ++ then ++ config_flags="$config_flags --with-gnu-ld --with-ld=$gld" ++ fi ++ unset gld ++fi ++ ++# Check for a configure script ++ ++if [ ! -f configure ] ++then ++ echo "$0: Error: Not the egcs root directory" ++ exit 1 ++fi ++ ++# Check to touch input files after applying bounds checking patches ++# Check to make extra scripts executable ++ ++if [ -d gcc/bounds ] ++then ++ chmod +x gcc/bounds/bgcc gcc/bounds/*.sh ++ ++ if [ ! -d "$objdir" -o ! -f "$objdir/Makefile" ] ++ then ++ for name in gcc/c-parse.in gcc/objc/objc-parse.y ++ do ++ if [ -f "$name" ] ++ then ++ echo "Touching $name" ++ touch "$name" ++ fi ++ done ++ fi ++fi ++ ++# Check for the object directory ++ ++if [ -d "$objdir" ] ++then ++ echo "$0: Warning: objdir $objdir exists" ++else ++ mkdir "$objdir" ++fi ++ ++if [ ! -d "$objdir" ] ++then ++ echo "$0: objdir $objdir does not exist" ++ exit 1 ++fi ++ ++# Add shell tracing ++ ++set -x ++ ++# Move to the work area ++ ++cd "$objdir" ++ ++# Set more flags ++# The GCC installation notes used to recommend ++# setting -fno-implicit-templates ++ ++case "$cc" in ++*bgcc*) ++ # Turn off the welcome message, it can mess things up that see stderr ++ GCC_BOUNDS_OPTS="$GCC_BOUNDS_OPTS -no-message" ++ # Turn off the statistics message, it can mess things up that see stderr ++ GCC_BOUNDS_OPTS="$GCC_BOUNDS_OPTS -no-statistics" ++ # Continue after bad accesses ++ GCC_BOUNDS_OPTS="$GCC_BOUNDS_OPTS -never-fatal" ++ export GCC_BOUNDS_OPTS ++ ;; ++esac ++ ++case "$cc" in ++*egcs*|*gcc*) ++ case "$opt" in ++ no) ++ cflags="-O0 $cflags" ++ libcflags="-O0 $libcflags" ++ libcxxflags="-O0 -fno-implicit-templates $libcxxflags" ++ ;; ++ yes) ++ cflags="-O $cflags" ++ libcflags="-O2 $libcflags" ++ libcxxflags="-O2 -fno-implicit-templates $libcxxflags" ++ ;; ++ *) ++ cflags="$cflags" ++ libcflags="$libcflags" ++ libcxxflags="-fno-implicit-templates $libcxxflags" ++ ;; ++ esac ++esac ++ ++echo "CC is $cc" ++echo "CFLAGS is $cflags" ++ ++# Run configure ++ ++echo ; beep ; date ++ ++if [ -f "Makefile" ] ++then ++ echo "Makefile exists, remove $objdir for a clean build" ++elif [ ! -f "$pwd/configure" ] ++then ++ echo "$pwd/configure not found" ++else ++ echo "Running $pwd/configure $config_flags at `date`" ++ ++ CC="$cc" \ ++ CFLAGS="$cflags" \ ++ LIBCFLAGS="$libcflags" \ ++ LIBCXXFLAGS="$libcxxflags" \ ++ AS="$as" \ ++ $pwd/configure $config_flags ++fi ++ ++# Check that configure made a Makefile ++ ++if [ ! -f Makefile ] ++then ++ echo ++ echo "no Makefile" ++ beep ++else ++ echo ; echo "Running $make $mflags $* in $objdir at `date`" ; echo ++ $nice $make $mflags \ ++ CC="$cc" \ ++ CFLAGS="$cflags" \ ++ LIBCFLAGS="$libcflags" \ ++ LIBCXXFLAGS="$libcxxflags" \ ++ AS="$as" \ ++ $langvar \ ++ "$@" ++fi ++ ++# Write a message and send mail ++ ++message="Finished $make $* for $program on $uname_n at `date`" ++ ++echo "${message}" ++ ++if [ -z "$LOGNAME" ] ++then ++ LOGNAME=`logname` ++fi ++ ++if [ ! -z "$LOGNAME" ] ++then ++ echo "$message" | mail -s "$make $* for $program on $uname_n" "$LOGNAME" ++fi +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/mem-check.html gcc-4.0.2/gcc/bounds/mem-check.html +--- gcc-4.0.2.org/gcc/bounds/mem-check.html 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/mem-check.html 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,390 @@ ++<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> ++<html> ++ <head> ++ <title>A Memory Checking Framework</title> ++ </head> ++ ++ <body> ++ <h1>A Memory Checking Framework</h1> ++ ++<h2>Per Bothner</h2> ++<code>bothner@cygnus.com</code><br> ++January, 1999 ++ ++<h1>Goals</h1> ++<ul> ++<li> Should catch index-out-of-bounds errors in C and C++. ++<li> Should catch reading uninitialized memory. ++<li> Should catch reading or writing free'd memory. ++<li> Should work for heap, stack, or static memory. ++<li> Should provide programmer hooks to register memory blocks, so ++(for example) applications that use obstacks can catch errors in obstack usage. ++<li> Should not require re-compiling an entire application. ++You should be able to re-compile only the parts of the application ++you care about. ++<li> Should not violate known patents and copyrights. ++</ul> ++ ++<h1>Introduction</h1> ++ ++<p> ++The basic idea is that the run-time system must maintain a "memory map". ++This is a table of "chunk descriptors", where each chunk is a range ++of memory addresses. ++Because of the need to monitor out-of-bounds errors in non-malloc'd memory, ++the chunk descriptors have to be separate from the data structures maintained ++by malloc.</p> ++<p>The other basic idea is that we modify the compiler so each pointer ++operation is validated against the memory map. To do that we have ++to find the chunk descriptor for the memory containing the pointer.</p> ++<p> ++The most efficient way to map from a pointer to chunk descriptors ++is to always carry the address ++of the chunk descriptor with the pointer value. That is to use a ++"fat pointer", which is a pair of the actual pointer, and the ++descriptor for the chunk it points into. The problem is that using ++a fat pointer instead of a regular pointer violates binary compatibility, ++which means all the libraries have to be recompiled. ++This is a major hassle, and impractical for many projects. ++There are also problems with sizeof and unions if pointer suddenly ++becomes twice as big.</p> ++<p> ++Therefore, pointer arguments and return values, and pointers in data ++structures (arrays, structs and unions), have to be normal "thin" pointer. ++However, we can use fat pointers for pointers stored in local variables, ++and that can be a major performance boost.</p> ++ ++<h1>Basic types and operations</h1> ++ ++<pre> ++/* A chunk descriptor. */ ++typedef struct chunk { ++ void *start; /* Start address of chunk. */ ++ void *end; /* End address of chunk. */ ++ .... /* More later */ ++} chunk_t; ++ ++/* Create a new chunk descriptor for a chunk of memory. */ ++chunk_t * ++add_chunk (void *start, void *end) ++{ ++ chunk_t *chunk = allocate_chunk (); ++ chunk->start = start; ++ chunk->end = end; ++ link chunk into global memory map; ++ return chunk; ++} ++ ++void ++remove_chunk (chunk_t *chunk) ++{ ++ unlink chunk from global memory map; ++ de_allocate_chunk (chunk); ++} ++ ++/* Dummy chunk representing memory not managed by any chunk descriptor. */ ++struct chunk missing_chunk = { (void*) 0, (void *) 0xFFFFFFFF, ... }; ++ ++chunk_t * ++find_chunk (void *ptr) ++{ ++ find a chunk containing ptr, ++ if there is none, return &missing_chunk. ++} ++ ++/* Dummy chunk used to indicate we need to call find_chunk. */ ++struct chunk unknown_chunk = { (void*) 1, (void *) 0, ... }; ++#define UNKNOWN_CHUNK &unknown_chunk ++ ++chunk_t * ++find_chunk_if_needed (void *ptr, chunk_t* chunk) ++{ ++ return chunk == UNKNOWN_CHUNK ? find_chunk (ptr) : chunk; ++} ++ ++</pre> ++ ++<h1>ABI compatibility</h1> ++ ++<p> Because we need to be able to link with libraries and .o files that ++are not compiled with memory-checking enabled, pointers must be regular ++pointer - we cannot use "fat" pointers (aka descriptors). ++ ++<h1>Reading uninitialized memory</h1> ++ ++<p> We want to catch reading uninitialized memory. We do this by ++optionally associating a bitmap with each chunk:</p> ++<pre> ++typedef char* initialized_map_t; ++typedef struct chunk { ++ .... ++ initialized_map_t initialized_map; ++} chunk_t; ++ ++#define IS_INITIALIZED(MAP, INDEX) (MAP[INDEX/8] & (1 << (INDEX % 8))) ++#define SET_INITIALIZED(MAP, INDEX) ((MAP[INDEX/8]) |= (1 << (INDEX % 8))) ++ ++/* Check that SIZE bytes starting at PTR are all initialized. ++ Assume the whole region lies within CHUNK. */ ++ ++void ++check_initialized (void *ptr, int size, chunk_t* chunk) ++{ ++ int index = (char*) ptr - (char*) chunk->start; ++ /* Of course this loop should be optimized. */ ++ while (--index >= 0) ++ if (! IS_INITIALIZED (chunk->initialized_map, index) ++ SIGNAL_ERROR(): ++} ++ ++/* Note that SIZE bytes starting at PTR are all initialized. ++ Assume the whole region lies within CHUNK. */ ++ ++void ++set_initialized (void *ptr, int size, chunk_t* chunk) ++{ ++ int index = (char*) ptr - (char*) chunk->start; ++ /* Of course this loop should be optimized. */ ++ while (--index >= 0) ++ SET_INITIALIZED (chunk->initialized_map, index); ++} ++</pre> ++<p> ++We can only catch reads of uninitialized memory if all writes to ++memory we are monitoring has calls to <code>set_initialized</code>; ++otherwise we will get a lot of false errors. We make the rule ++that if a chunk's <code>initialized_map</code> field is <code>NULL</code>, ++then we should not check for initialization on reads from the chunk. ++We also provide two global variables that the programmer can use ++to control this test:</p> ++<pre> ++/* Control whether an initialized_map is created for new chunks. A map ++ is only created by add_chunk if alloc_with_initialization_map is true. */ ++int alloc_with_initialization_map = 0; ++ ++/* set_initialized is only called when do_check_initialization is true. */ ++int do_check_initialization = 0; ++</pre> ++ ++<h1>Guarding heap memory</h1> ++ ++<p> The standard function <code>malloc</code> is replaced by: ++<pre> ++void * ++malloc (size_t size) ++{ ++ void *ptr = __primitive_malloc (size); ++ chunk_t *chunk = add_chunk (ptr, (char*) ptr + size); ++ /* Some extra one-bit flag in a chunk. */ ++ chunk->allocated_by_malloc = 1; ++ return ptr; ++} ++</pre> ++<p> ++It is useful if <code>malloc</code> would also also save the call stack ++with the chunk; this is desirable for possible future error messages.</p> ++ ++<p> ++The <code>free</code> function is obvious:</p> ++<pre> ++void ++free (void *ptr) ++{ ++ chunk_t *chunk = find_chunk (ptr); ++ if (chunk == &missing_chunk || chunk->start != ptr ++ || ! chunk->allocated_by_malloc) ++ SIGNAL_ERROR(); ++ __primitive_free(ptr); ++ remove_chunk (chunk); ++} ++</pre> ++<p> ++It would be useful to provide alternative entry-points to these functions, ++but which returned/took a pair of a data pointer and a chunk pointer.</p> ++<p> ++We can optimize <code>calloc</code> since it does not need an ++<code>initialized_map</code>.</p> ++<p> ++We can catch accesses to deleted memory by not actually deleting ++the memory or the chunk, but instead setting a "deleted" flag in the chunk. ++We would want to give the programmer so control over which ++free'd chunks are kept around, and for how long.</p> ++ ++<h1>Guarding global variables</h1> ++ ++<p> ++The compiler can easily add code that is run at program start-up ++that calls <code>add-chunk</code> for each global variable. ++With some linker support, it does not even have to generate any code. ++Instead, it just has to mark the limits of each variable in the ++object file, and then have the linker set up the initial set of chunks.</p> ++<p> ++A global variable whose address is never taken (and which does not ++contain an component whose address is taken) does not need a chunk.</p> ++<p> ++We do not need to create <code>initialized_map</code>'s for global variables, ++these are by C/C++ language definition initialized (to zero).</p> ++ ++<h1>Guarding stack variables</h1> ++<p> ++Guarding stack variables is in principle straight-forward. ++We just do <code>add_chunk</code> when the variable's scope ++is enteered, and <code>remove_chunk</code> when the scope ++is exited. The tricky part is the later, since we have to ++do <code>remove_chunk</code> also when unwinding the stack ++due to exceptions or <code>longjmp</code>. If that is impractical, ++we can do <code>remove_chunk</code> lazily: Remove any chunks ++beyond the stack pointer before we do a stack-related ++<code>add_chunk</code> or signal an error.</p> ++<p> ++We only need chunks for variables whose address is taken, ++or that we want to check for initialization.</p> ++ ++<h1>Translated pointer operations</h1> ++ ++<p> ++Each local pointer variable <code>P</code> is augmented ++by a second variable <code>P$chunk</code>, which points to a chunk ++pointed to be <code>P</code>. We maintain this invariant:</p> ++<pre> ++P$chunk == UNKNOWN_CHUNK || P$chunk == find_chunk(P) ++</pre> ++ ++<h2>Taking address of pointer</h2> ++<p> If <code>P</code> is a local pointer variable, then `<code>&P</code>' ++is translated into `<code>(P$chunk = &UNKNOWN_CHUNK, &P)</code>'.</p> ++<p> Taking the address of some other pointer-valued lvalue ++is translated as is.</p> ++ ++<h2>Assigning to pointer</h2> ++<p> If <code>P1</code> and <code>P2</code> are local pointer variables, ++then `<samp>P1 = P2</samp>' is translated into ++`<samp>P1$chunk = P2$chunk, P1=P2</samp>'.</p> ++<p> In general, if <code>P</code> is a local pointer variable, ++and <code>X</code> is a pointer-valued expression, then `<code>P = X</code>' ++is translated into `<code>P$chunk = UNKNOWN_CHUNK, P = X</code>'. ++However, if we know (or can cheaply compute) the chunk containing ++the value of `<code>X</code>', the we can set <code>P$chunk</code> ++to that known chunk instead.</p> ++<p> Assigning to other pointer-valued lvalues is translated as is.</p> ++ ++<h2>Incrementing or decrementing a pointer</h2> ++ ++<p> If <code>P</code> is a local pointer variable, then the ++operation `<code>P + NUM</code>' is translated into:</p> ++<pre> ++P$chunk = find_chunk_if_needed (P, P$chunk), ++check_pointer_increment (P, P$chunk, NUM * sizeof(*P))m ++P + NUM; ++</pre> ++<p>where <code>check_pointer_increment</code> ++is <a href="#check_pointer_increment">below</a>.</p> ++ ++<p> If <code>X</code> is a pointer-valued expression (with no side-effects), ++then the operation `<code>X + NUM</code>' is translated into:</p> ++<pre> ++(check_pointer_increment (X, find_chunk(X), NUM * sizeof(*X)), ++X + NUM) ++</pre> ++<p> The case where <code>X</code> has side-effects, as well as the ++pre- and post- decrement and increment unary operations, ++are handled in the obvious manner.</p> ++ ++<h2>De-referencing a pointer</h2> ++ ++<p> If <code>P</code> is a local pointer variable, then the ++operation `<code>*P</code>' (as an rvalue) is translated into:</p> ++<pre> ++(P$chunk = find_chunk_if_needed (P, P$chunk), ++check_pointer_read (P, sizeof(*P), P$chunk), ++*P) ++</pre> ++<p>where <code>check_pointer_read</code> ++is <a href="#check_pointer_read">below</a>.</p> ++ ++<p> If <code>X</code> is a pointer-valued lvalue (with no side-effects), ++then the operation `<code>*X</code>' (as an rvalue) is translated into:</p> ++<pre> ++(check_pointer_read (X, sizeof(*X), find_chunk(X)), ++*X) ++</pre> ++ ++<p> When <code>X</code> is a pointer-valued expression, but not ++a local variable, the expression `<code>X[N]</code>' can be ++translated into:</p> ++<pre> ++(check_pointer_read (X+N, sizeof(*X), find_chunk(X)), ++X[N]) ++</pre> ++ ++ ++<p> If `<code>*P</code>' or `<code>*X</code>' is used as an LHS value, ++the translation uses <code>check_pointer_write</code> ++instead of <code>check_pointer_read</code>.</p> ++ ++<h1>Unions and casts</h1> ++ ++<h1>Finer-grained checking: Obstacks</h1> ++ ++<h1>Code</h1> ++<pre> ++<a name="check_pointer_increment"></a> ++/* Signal an error if adjusting PTR by DELTA will bring it outside CHUNK. */ ++ ++void ++check_pointer_increment (void *ptr, chunk_t *chunk, int delta) ++{ ++ if (delta == 0) ++ return; ++ if (ptr == NULL) ++ SIGNAL_ERROR(); ++ if (chunk != &missing_chunk) ++ { ++ if (ptr < chunk->start || ptr > chunk->end) /* Usually redundant */ ++ SIGNAL_ERROR(); ++ if ((char*) ptr + delta < chunk->start ++ || (char*) ptr + delta > chunk->end) ++ SIGNAL_ERROR(); ++ } ++} ++ ++void ++check_pointer_write (void *ptr, int size, chunk_t *chunk) ++{ ++ if (ptr == NULL) ++ SIGNAL_ERROR(); ++ if (chunk != &missing_chunk) ++ { ++ if (ptr < chunk->start || ptr > chunk->end ++ || (char*) ptr + size < chunk->start ++ || (char*) ptr + size > chunk->end) ++ SIGNAL_ERROR(); ++ if (chunk->initialized_map != NULL) ++ set_initialized (ptr, size, chunk); ++ } ++} ++ ++void ++check_pointer_read (void *ptr, int size, chunk_t *chunk) ++{ ++ if (ptr == NULL) ++ SIGNAL_ERROR(); ++ if (chunk != &missing_chunk) ++ { ++ if (ptr < chunk->start || ptr > chunk->end ++ || (char*) ptr + size < chunk->start ++ || (char*) ptr + size > chunk->end) ++ SIGNAL_ERROR(); ++ if (chunk->initialized_map != NULL && do_check_initialization) ++ check_initialized (ptr, size, chunk); ++ } ++} ++</pre> ++ <hr> ++ <address><a href="mailto:bothner@cygnus.com">Per Bothner</a></address> ++<!-- Created: Mon Jan 4 15:36:00 PST 1999 --> ++<!-- hhmts start --> ++Last modified: Mon Apr 26 12:15:39 PDT 1999 ++<!-- hhmts end --> ++ </body> ++</html> +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/notes-for-AIX-users/Notes-0 gcc-4.0.2/gcc/bounds/misc/notes-for-AIX-users/Notes-0 +--- gcc-4.0.2.org/gcc/bounds/misc/notes-for-AIX-users/Notes-0 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/notes-for-AIX-users/Notes-0 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++Problems with AIX: ++ ++It appears that the dynamic libraries on AIX are shared between processes ++in memory, in such a way that we could not replace the `malloc' in libc ++with our own version in the checking library. Using static linking ++cured this problem, and Jorg Petersen has written some notes (see next ++file) to help you use bounds checking with AIX. ++ ++If someone would care to tell us exactly what's going on here with dynamic ++libraries and how to fix it, then we will patch the program to make it ++work `properly'. ++ ++RWMJ, JP, Sept. 1995. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/notes-for-AIX-users/Notes-3 gcc-4.0.2/gcc/bounds/misc/notes-for-AIX-users/Notes-3 +--- gcc-4.0.2.org/gcc/bounds/misc/notes-for-AIX-users/Notes-3 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/notes-for-AIX-users/Notes-3 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,53 @@ ++HOWTO USE BOUNDS-CHECKING WITH AIX-3.2.5 ++ ++Simple programs may be checked by typing: ++ ++ gcc -g -fbounds-checking myfile.c -o myprog -lm ++ ++Anyhow, there a problems with some libraries like e.g. libX11.a ++By default libX11.a is a shared library, and due to the special ++behaviour of AIX it always uses the unchecked "malloc"-routines ++from libc.a instead of those from ...../libcheck.a ++(this leads to a funny mixture of checked and unchecked mallocs...) ++ ++Solution ++ ++ gcc -g -c -fbounds-checking myfirst.c ++ gcc -g -c -fbounds-checking mysecond.c ++ ++Normally you would type now: (which doesn't work with AIX) ++ gcc -fbounds-checking myfirst.o mysecond.o -o myprog -lX11 -lm ++ ++Better link statically: ++ cc myfirst.o mysecond.o -o mystaticprog \ ++ -L/usr/local/lib/gcc-lib/rs6000-ibm-aix3.2.5/2.7.0 -lcheck -lgcc \ ++ -lIM -liconv -lX11 -lm \ ++ -bnso -bloadmap:/tmp/loadmap \ ++ -bI:/lib/syscalls.exp -bI:/usr/lpp/X11/bin/smt.exp ++ ++ Because linking with 'cc' we have to explicitly say where ++ -lcheck and -lgcc are. ++ "-bnso -bI:/lib/syscalls.exp -bI:/usr/lpp/X11/bin/smt.exp" tell cc to ++ link statically and "-lIM -liconv" is needed by "-lX11" if linked statically. ++ ++ ++If you have a more recent AIX-3.2.5++ there might be a error message ++about an unresolved symbol 'pthread_yield'. In this case you have to ++add an additional -bI:./foo.imp to the last line ++ -bI:/lib/syscalls.exp -bI:/usr/lpp/X11/bin/smt.exp -bI:./foo.imp ++ ++And create the file ./foo.imp containing two lines: ++#! ++pthread_yield ++ ++This tells cc to resolve this symbol at runtime, not while statically ++linking. (Thanks to Mr. David L. Crow for this solution) ++ ++Due to my lack of understanding AIX corrections, hints and explanations ++are always welcome... ++ ++Joerg ++ ++P.S.: A last AIX-tip: If you don't have gdb (GNU-debugger) and want ++ to use the dbx, you should say 'gcc -gxcoff3' insead 'gcc -g' ++ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/README gcc-4.0.2/gcc/bounds/misc/README +--- gcc-4.0.2.org/gcc/bounds/misc/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,12 @@ ++Miscellaneous stuff here that might be of interest: ++ ++tcl-7.4-patches/ ++ Patches required to get Tcl 7.4 to built correctly. The changes are ++ mainly for the new rules for 'goto' and some bug fixes. ++tk-4.0-patches/ ++ Patches required to get Tk 4.0 to work with bounds checking. I have ++ successfully built a shared library version of Tk 4.0 with bounds ++ checking under Linux. ++notes-for-AIX-users/ ++ Contains notes that AIX users should read before starting to use ++ bounds checking. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclBasic.c.cdiff gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclBasic.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclBasic.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclBasic.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++22a23,24 ++> #include "unchecked.h" ++> ++910c912,915 ++< argv[i] = pv.buffer + (argv[i] - oldBuffer); ++--- ++> argv[i] = ++> BOUNDS_CHECKING_OFF_IN_EXPR ( ++> pv.buffer + (argv[i] - oldBuffer) ++> ); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclCmdMZ.c.cdiff gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclCmdMZ.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclCmdMZ.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclCmdMZ.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,16 @@ ++830,831c830 ++< switch (curField->fmt) { ++< char string[TCL_DOUBLE_SPACE]; ++--- ++> char string[TCL_DOUBLE_SPACE]; ++832a832 ++> switch (curField->fmt) { ++988d987 ++< register char *p; ++990a990,991 ++> char *trimChars; ++> register char *p, *checkPtr; ++1159,1161d1159 ++< char *trimChars; ++< register char *p, *checkPtr; ++< +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclExpr.c.cdiff gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclExpr.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclExpr.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclExpr.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,8 @@ ++1110c1110,1114 ++< goto divideByZero; ++--- ++> interp->result = "divide by zero"; ++> Tcl_SetErrorCode(interp, "ARITH", "DIVZERO", ++> interp->result, (char *) NULL); ++> result = TCL_ERROR; ++> goto done; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclInt.h.cdiff gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclInt.h.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclInt.h.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclInt.h.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,5 @@ ++54a55,58 ++> #ifdef __BOUNDS_CHECKING_ON ++> #include "fix-args.h" ++> #endif ++> +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclParse.c.cdiff gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclParse.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/tclParse.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/tclParse.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++21a22,23 ++> #include "unchecked.h" ++> ++821c823,826 ++< argv[i] = pvPtr->buffer + (argv[i] - oldBuffer); ++--- ++> argv[i] ++> = BOUNDS_CHECKING_OFF_IN_EXPR ( ++> pvPtr->buffer + (argv[i] - oldBuffer) ++> ); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/Update gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/Update +--- gcc-4.0.2.org/gcc/bounds/misc/tcl-7.4-patches/Update 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tcl-7.4-patches/Update 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,11 @@ ++#!/bin/bash - ++ ++( cd ~/tcl/tcl7.4 ; \ ++mkcom "if cmp ~/tcl/tcl7.4/* ~/c/bc-tests/tcl7.4/* >/dev/null 2>&1 ; \ ++ then echo -n; else echo *; fi" *.c *.h | \ ++ /bin/bash ) \ ++| \ ++ ( cd ~/gcc-2.7.2/bounds/misc/tcl-7.4-patches; \ ++ rm -f *.cdiff; \ ++ mkcom "diff ~/tcl/tcl7.4/* ~/c/bc-tests/tcl7.4/* > *.cdiff" | \ ++ /bin/bash ) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tk3d.c.cdiff gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tk3d.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tk3d.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tk3d.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,14 @@ ++18a19,20 ++> #include <unchecked.h> ++> ++237a240 ++> int half; ++251,252d253 ++< int half; ++< ++830c831,833 ++< for (i = -2, p1Ptr = &pointPtr[numPoints-2], p2Ptr = p1Ptr+1; ++--- ++> for (i = -2, ++> p1Ptr = BOUNDS_CHECKING_OFF_IN_EXPR (&pointPtr[numPoints-2]), ++> p2Ptr = p1Ptr+1; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkImgFmtGIF.c.cdiff gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkImgFmtGIF.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkImgFmtGIF.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkImgFmtGIF.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,19 @@ ++675,676c675,689 ++< buf[0] = buf[last_byte-2]; ++< buf[1] = buf[last_byte-1]; ++--- ++> /* RWMJ: This fails with bounds checking, since we try to ++> * read element -2 of the array sometimes. ++> */ ++> if (last_byte >= 2) ++> { ++> buf[0] = buf[last_byte-2]; ++> buf[1] = buf[last_byte-1]; ++> } ++> else if (last_byte >= 1) ++> { ++> buf[0] = 0; ++> buf[1] = buf[last_byte-1]; ++> } ++> else ++> buf[0] = buf[1] = 0; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkTextBTree.c.cdiff gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkTextBTree.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkTextBTree.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkTextBTree.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,8 @@ ++105,108c105,106 ++< #define CSEG_SIZE(chars) ((unsigned) (Tk_Offset(TkTextSegment, body) \ ++< + 1 + (chars))) ++< #define TSEG_SIZE ((unsigned) (Tk_Offset(TkTextSegment, body) \ ++< + sizeof(TkTextToggle))) ++--- ++> #define CSEG_SIZE(chars) (sizeof (TkTextSegment) + 1 + (chars)) ++> #define TSEG_SIZE sizeof (TkTextSegment) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkTextMark.c.cdiff gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkTextMark.c.cdiff +--- gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/tkTextMark.c.cdiff 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/tkTextMark.c.cdiff 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,5 @@ ++24,25c24 ++< #define MSEG_SIZE ((unsigned) (Tk_Offset(TkTextSegment, body) \ ++< + sizeof(TkTextMark))) ++--- ++> #define MSEG_SIZE sizeof(TkTextSegment) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/Update gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/Update +--- gcc-4.0.2.org/gcc/bounds/misc/tk-4.0-patches/Update 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/misc/tk-4.0-patches/Update 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,11 @@ ++#!/bin/bash - ++ ++( cd ~/tcl/tk4.0 ; \ ++mkcom "if cmp ~/tcl/tk4.0/* ~/c/bc-tests/tk4.0/* >/dev/null 2>&1 ; \ ++ then echo -n; else echo *; fi" *.c *.h | \ ++ /bin/bash ) \ ++| \ ++ ( cd ~/gcc-2.7.2/bounds/misc/tk-4.0-patches; \ ++ rm -f *.cdiff; \ ++ mkcom "diff ~/tcl/tk4.0/* ~/c/bc-tests/tk4.0/* > *.cdiff" | \ ++ /bin/bash ) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/README gcc-4.0.2/gcc/bounds/README +--- gcc-4.0.2.org/gcc/bounds/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/README 2005-09-29 17:51:15.000000000 +0200 +@@ -0,0 +1,159 @@ ++Bounds Checking Patches for gcc-4.0.2 ++-------------------------------------- ++ ++By Richard W.M. Jones <rjones@orchestream.com> ++ ++What is bounds checking? ++------------------------ ++ ++These patches give very fine-grained bounds checking, catching errors in ++C programs like this one: ++ ++ int i; ++ char array[10]; ++ ++ for (i = 0; i <= 10; ++i) ++ array[i] = 0; ++ ++(Notice element array[10] is not part of the array). The patches are ++compatible with almost all C constructs. For instance, the following ++programs have been successfully compiled with bounds checking: ++ ++ Tcl 7.3 & 7.4 ++ Tk 3.6 & 4.0 ++ Ghostscript 262 ++ uEmacs 3.10 ++ xrn ++ GNU Grep 2.0 ++ XBoing 1.8 ++ ++What files do you need? ++----------------------- ++ ++You can install GCC with bounds checking either by compiling from the source. ++ ++>> To compile from source, you need to retrieve: ++ ++ bounds-checking-gcc-4.0.2-x.y.patch.bz2 ++ ++ *plus* the source for GCC (which you may already have). ++ ++ gcc-4.0.2.tar.bz2 ++ ++ You will need around 500 Mbytes of free disk space. ++ ++How to compile GCC with bounds checking from source ++---------------------------------------------------- ++ ++Let's suppose, for the sake of example, that you've already placed a *fresh* ++GCC source tree in `~/gcc-4.0.2'. Patch the tree as follows: ++ ++ cd ~/gcc-4.0.2 ++ bzip2 -cd bounds-checking-gcc-4.0.2-x.y.patch.bz2 | patch -p1 -s ++ ++Compile GCC as detailed in the file `INSTALL' that comes with GCC. Usually ++you need to type something like: ++ ++ cd ~/build_4.0.2_dir ++ ~/gcc-4.0.2/configure --srcdir=~/gcc-4.0.2 # Possibly some --options here. ++ make BOOT_CFLAGS="-O2" STAGE1_CFLAGS="-O2" CFLAGS="-O2" bootstrap ++ ++This also makes the bounds checking library (in the bounds/lib/ subdir.). ++You'll need `makeinfo' (from the `texinfo' package) to make the info pages. ++ ++Compile programs with bounds checking ++------------------------------------- ++ ++Once you've got the program compiled, use the `-fbounds-checking' flag ++to add bounds checking to your programs. Eg. ++ ++ ~/build_4.0.2_dir/gcc/xgcc -B~/build_4.0.2_dir/gcc/ -fbounds-checking -c file1.c -o file1.o ++ ~/build_4.0.2_dir/gcc/xgcc -B~/build_4.0.2_dir/gcc/ -fbounds-checking file1.o -o program ++ ++Notice that: ++ (1) I've assumed you have compiled/installed GCC in `~/build_4.0.2_dir'. ++ (2) You need to pass the `-B' option to tell GCC which directory you're ++ using. Note that the directory needs a trailing `/'. ++ ++For Makefiles, you could add/change the following rules: ++ ++ GCC_HOME = $(HOME)/build_4.0.2_dir/gcc ++ CC = $(GCC_HOME)/xgcc ++ CFLAGS = -B$(GCC_HOME)/ -fbounds-checking -g -Wall ..etc.. ++ ++Looking for information ++----------------------- ++ ++The first place to look for information is the GCC info page. The relevant ++files are: ++ ++ ~/gcc-4.0.2/gcc/doc/gcc.info ++ ~/gcc-4.0.2/gcc/doc/gcc.info-* ++ ++You will need `emacs', `tkinfo' or similar, to read them. Go to `Bounds ++Checking' node. ++ ++There is an old manual in PostScript form in the file: ++ ++ ~/gcc-4.0.2/gcc/bounds/report/bcrep2.ps.gz ++ ++and the source for this (in M$-Word 6 format - yes, I know): ++ ++ ~/gcc-4.0.2/gcc/bounds/report/bcrep2.doc.gz ++ ++Special cases for bounds checking ++--------------------------------- ++ ++Although bounds checking ought to be automatic, if you use one of the ++following constructs, you may need to change your program: ++ ++ . signal handlers ++ threads ++ Read the user manual. For signal handlers, you will need to ++ move the signal handlers into unchecked code. There are ++ hooks in the checking library for threads. ++ . Using `-2' as a pointer. ++ You can't use `-2' as a special pointer representation (because ++ I use it). To fix this, either change your code to use, say, ++ -1, or change the definition of ILLEGAL in `bounds/lib/ ++ bounds-lib.h'. ++ ++Read the gcc.info file for more details. ++ ++Bug reports ++----------- ++ ++There are a few known bugs: read about them in ++ ++ ~/gcc-4.0.2/gcc/bounds/BUGS ++ ++Please send bug reports & fixes to ++ ++ rjones@orchestream.com or Haj.Ten.Brugge@net.HCC.nl ++ ++Frequently asked questions ++-------------------------- ++ ++These are questions I've answered more than a hundred times already ... ++ ++1. No, it doesn't work with C++. But do you feel like giving up ~1-2 ++ months of your time to implement it for me? If so, write soon. ++ ++2. When will the patches be integrated into GCC? I have no answer to ++ this. One day soon, when I feel that the software has been widely ++ tested and the bugs have been all but eliminated, I will apply to ++ have this happen. However, the GCC maintainers may have other ideas, ++ in which case the answer will be `never'. ++ ++Related documents ++----------------- ++ ++http://www-dse.doc.ic.ac.uk/~rj3/bounds-checking.html ++http://www-ala.doc.ic.ac.uk/~phjk/BoundsChecking.html ++http://www.inter.NL.net/hcc/Haj.Ten.Brugge ++ ++Platforms ++--------- ++ ++See the file MACHINES in the distribution to see what machines GCC/BC has been ++ported to. It ought to work on just about any machine that GCC supports. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/README.103 gcc-4.0.2/gcc/bounds/README.103 +--- gcc-4.0.2.org/gcc/bounds/README.103 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/README.103 2005-09-29 17:51:23.000000000 +0200 +@@ -0,0 +1,123 @@ ++Bounds Checking Patches for GCC 4.0.2 ++------------------------------------- ++ ++Version: 1.03 ++ ++16Oct02 ++ ++I copied the gcc-3.1.1-1.01 bounds checking patches from ++http://www.inter.NL.net/hcc/Haj.Ten.Brugge ++This distribution is all patches made by the script makediffs.sh which runs ++ gdiff -ruN egcs-yyyymmdd/gcc begcs-yyyymmdd/gcc ++where egcs-yyyymmdd is an unmodified built version of gcc and ++begcs-yyyymmdd is a built version with the bounds checking patches. ++(For gcc versions, replace "egcs-yyyymmdd" with "gcc-#.#.#".) ++I have moved the PostScript of Richard Jones's papers from ++gcc/bounds/report to a separate archive "bounds-checking-reports.tar.bz2" ++to reduce the size of the patches. ++I used RedHat Linux 7.1 updated with a 2.4.9 kernel. ++I needed about 719 MB to build bgcc-4.0.2 under RH 7.1 on a Reiser file system: ++171 MB for the unpacked source and 548 MB for the generated objects ++(168 MB for the bgcc-3.1 generated objects with --enable-languages=c). ++The bounds checking patches should work any system that can build a normal gcc. ++ ++OS-specific build notes: ++Most ELF platforms: ++ gcc 3.1: gcc 3.1 writes DWARF 2 debugging information and requires ++ gdb 5.1 or higher and binutils 2.10 or higher. ++ See INSTALL/specific.html for GCC Host/Target specific installation notes. ++RedHat Linux 8.0 / RedHat's gcc 4.0.2 20020903 ++ bgcc 4.0.2: RedHat's libc is newer than gcc-4.0.2 expects and ctype is different. ++RedHat Linux 7.1 / RedHat's gcc 2.96 20000731 ++ bgcc 3.1: When loading executables built with bounds checking, ++ RedHat's gdb 5.0rh-5 gets ++ "Dwarf Error: Cannot handle DW_FORM_strp in DWARF reader". ++ gdb-5.2 built from source works OK. ++RedHat Linux 6.0 / RedHat's egcs-2.91.66 19990314 ++ bgcc 3.1: gcc 3.1 requires updating binutils and gdb. ++ I built binutils 2.12.1 and gdb 5.2 from source and forced the build ++ to use them with ++ --with-as=<path-to-GNU-as> --with-gnu-as --with-ld=<path-to-GNU-ld> --with-gnu-ld ++SCO OpenServer 5.0.5 / SCO cc ++ bgcc 4.0.2: The bgcc 4.0.2 patches include a fix for config.gcc ++ for the gcc "machmode.def: undefined symbol: BITS_PER_UNIT" error. ++ See http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7623 ++ The bgcc 4.0.2 build needs 428 MB (132 MB for source + 296 MB for objects). ++Solaris 2.6 / gcc 2.7.2.3 + binutils 2.9.1 from http://www.sunfreeware.com ++ bgcc 3.1: If you get an error about "libgcc.map: file format not recognized", ++ use make.sh with "-with-gnu" to force a ./configure with ++ --with-as=<path-to-GNU-as> --with-gnu-as --with-ld=<path-to-GNU-ld> --with-gnu-ld ++ The sunfreeware bison-1.50 fails on c-parse.y. bison-1.28 is OK. ++ The bgcc 4.0.2 build needs 484 MB (140 MB for source + 343 MB for the objects). ++ ++To build a bounds checking gcc: ++ cd /u/gnu # go to a work area ++ tar xzf egcs-yyyymmdd.tar.gz # unpack gcc ++ mv egcs-yyyymmdd begcs-yyyymmdd # rename the egcs directory ++ cd begcs-yyyymmdd # go to the begcs directory ++ patch -p1 -T < egcs-yyyymmdd-begcs-yyyymmdd.pat # apply the patches ++ touch gcc/c-parse.in # force a rebuild of .y and .c ++ mkdir objdir # make an object file area ++ cd objdir # enter the area ++ /u/gnu/begcs-yyyymmdd/configure # initialize the build ++ make bootstrap # do the build ++ ++The patches change c-parse.in but do not include the generated .y or .c files. ++You must "touch" gcc/c-parse.in after applying the patches, and you will need ++yacc or bison. gcc snapshots use bison-1.28. The bison-1.25 on SuSE 6.2 ++generates different tables than bison-1.28 and might cause problems. ++ ++Many versions of gcc fail to bootstrap unless you set CFLAGS=-O0 to disable ++optimization. This reflects gcc problems. The bounds checking patches have ++no effect on the generated code unless you compile with "-fbounds-checking". ++ ++The script gcc/bounds/make.sh does the touch command, configures with an ++object directory and does a make bootstrap. You can run this script from ++the top level directory immediately after applying the patches. ++ ++Building a C-only version of gcc takes less time and uses less disk space. ++Also, some gcc snapshots have problems with languages other than C. ++Since the bounds checker mainly does C, you can use ++ /u/gnu/begcs-yyyymmdd/configure --enable-languages=c ++or ++ ./gcc/bounds/make.sh -langc ++ ++You can run your new begcs without installing it through the script ++ /u/gnu/begcs-yyyymmdd/gcc/bounds/bgcc ++If you build in a different area or copy the script, you will need ++to edit the initial sequence that locates the root directory. ++ ++You can test the bounds checker with ++ cd /u/gnu/begcs-yyyymmdd/gcc/bounds/bgcc/tests ++ chmod +x ../bgcc ++ make CC=../bgcc ++All tests should return OK. ++ ++If you want to experiment with changes, you can recompile your changes with ++ cd objdir ++ make bootstrap3 ++ ++I started with Herman van Brugge's bounds checking patches for gcc-3.1.1 at ++http://www.inter.NL.net/hcc/Haj.Ten.Brugge ++In addition to updating Richard Jones's work for gcc-2.7, he added some lookup ++optimizations and support for threads. Herman updates the patches only for ++gcc releases. If the latest gcc release works for you, you should use his ++patches instead of mine since gcc releases are more stable than snapshots. ++ ++As I have time, I will put patches into ++ftp://nscs.fast.net/pub/binaries/boundschecking ++ ++You may freely mix objects compiled with and without bounds checking. ++I find this convenient because I must link programs to third-party object ++libraries. ++ ++These patches are unrelated to the fat pointer bounds checking patches by Greg ++McGary gkm@eng.ascend.com which change the size of pointers and require building ++modified versions of libc and every other library that your program calls. ++I have heard that Greg's patches will eventually be incorporated into gcc. ++If you can use Greg's fat pointer bounds checker, it has the advantage of ++better run-time performance and support for languages other than C. ++ ++William Bader ++email: william@nscs.fast.net, williambader@hotmail.com ++www: http://williambader.com +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/report/bounds-checking.html gcc-4.0.2/gcc/bounds/report/bounds-checking.html +--- gcc-4.0.2.org/gcc/bounds/report/bounds-checking.html 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/report/bounds-checking.html 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,130 @@ ++<HTML> ++<HEAD> ++<TITLE>Bounds checking extensions to GCC</TITLE> ++<!-- Changed by: , 15-Dec-1995 --> ++</HEAD> ++ ++<BODY> ++<H1>Bounds checking extensions to GCC</H1> ++ ++<H2>What is bounds checking?</H2> ++ ++<P>A `traditional' feature of C is that the programmer can overwrite memory ++at random by accidentally exceeding the bounds of an array, or using a pointer ++after it has been freed. These extensions add proper, fine grained bounds ++checking and pointer checking to C. For instance, the following types of errors ++(amongst others) will be caught: ++</P> ++ ++<P><PRE> ++ char a[10]; ++ int i; ++ ++ for (i = 1; i <= 10; ++i) ++ a[i] = 0; /* can't access a[10] */ ++ ++ struct linked_list { struct linked_list *next; /* .. */ } *p; ++ ++ while (p != NULL) ++ { ++ free (p); ++ p = p->next; /* used a pointer after free */ ++ } ++ ++ int * ++ f (void) ++ { ++ int i; ++ ++ /* .. */ ++ return &i; /* returned a stale stack pointer */ ++ } ++</PRE></P> ++ ++<P>The GCC patches are compatible with almost all C constructs. We have ++successfully compiled the following programs with bounds checking:</P> ++ ++<LI> Tcl 7.3 & 7.4 ++<LI> Tk 3.6 & 4.0 ++<LI> Ghostscript 262 ++<LI> uEmacs 3.10 ++<LI> xrn ++<LI> GNU Grep 2.0 ++<LI> XBoing 1.8 ++ ++<P>Bounds checking only works with C, not with C++. It may work with Objective ++C, but I have not tested it.</P> ++ ++<H2>What machines does bounds checking GCC work on?</H2> ++ ++<P>At the time of writing, we have compiled bounds checking GCC on the ++following machines:</P> ++ ++<LI> Linux 1.2.13 (i386) ++<LI> SunOS 4.1.3 (Sparc) ++<LI> Solaris 2.4 (Sparc) ++<LI> HPUX 9.05 (HP-PA) ++<LI> ESIX SVR 4.0.4 (i386) <A HREF="mailto:herman@htbrug.hobby.nl">Herman ten Brugge</A> ++<LI> OSF 2.0 (DEC Alpha) <A HREF="mailto:tuppa@iue.tuwien.ac.at">Walter Tuppa</A> ++<LI> FreeBSD 2.0 (i386) <A HREF="mailto:u27113@kb.be">Danny Backx</A> ++<LI> Ultrix 4.2A (MIPS) <A HREF="mailto:drochner@zelux6.zel.kfa-juelich.de">Matthias Drochner</A> ++<LI> OS/2 (i386) <A HREF="mailto:mattes@azu.informatik.uni-stuttgart.de">Eberhard Mattes</A> ++<LI> DOS port in the works ++ ++<H2>Where can I get bounds checking GCC?</H2> ++ ++<P>The patches are supplied in source form, to be patched against the current ++GCC source tree, and as binaries for various supported machines. If you ++wish/need to compile from source, you will need around 60 Mbytes of free disk ++space.</P> ++ ++<H3>Where can I get the binary distribution for my machine?</H3> ++ ++<P>The binary distributions are available for the following machines:</P> ++ ++<LI> Linux (ELF only) ++<LI> SunOS 4.1.3 ++<LI> Solaris 2.4 ++<LI> HPUX 9.05 ++ ++<P>You can download one of these binaries from <A HREF="ftp://dse.doc.ic.ac.uk/pub/misc/bcc"> ftp://dse.doc.ic.ac.uk/pub/misc/bcc </A>. (Owing to their size, these binaries are <I>not</I> mirrored elsewhere).</P> ++ ++<P>Please read the README file in that directory first. It tells you what you ++need to download.</P> ++ ++<P>There is an OS/2 binary by <A HREF="mailto:mattes@azu.informatik.uni-stuttgart.de">Eberhard Mattes</A>.</P> ++ ++<P>There is a DOS version in development. Contact me for more details.</P> ++ ++<H3>How can I get the patches to GCC source?</H3> ++ ++<P>If you can't get a binary for your machine, or if you can't get through ++to the site above, you will need to get the patches and compile GCC from ++source. The patches are much smaller, and should be mirrored at various ++sites around the world.</P> ++ ++<P>You need to download both the patches <I>and</I> the corresponding GCC source ++tree.</P> ++ ++<LI>UK, Northern Europe: ++<P> Patches: <A HREF="ftp://dse.doc.ic.ac.uk/pub/misc/bcc/"> ftp://dse.doc.ic.ac.uk/pub/misc/bcc/ </A></P> ++<P> GCC: <A HREF="ftp://sunsite.doc.ic.ac.uk/gnu/"> ftp://sunsite.doc.ic.ac.uk/gnu/ </A></P> ++<LI>US, Canada: ++<P> Patches: <A HREF="ftp://sunsite.unc.edu/"> ftp://sunsite.unc.edu/ </A> </P> ++<P> GCC: <A HREF="ftp://prep.ai.mit.edu/pub/gnu/"> ftp://prep.ai.mit.edu/pub/gnu/ </A> </P> ++ ++<P>Please read the README file. It contains useful information about how to ++apply the patches and compile GCC.</P> ++ ++<H2>Where can I find more information about these patches?</H2> ++ ++<LI> The current README file (<A HREF="ftp://dse.doc.ic.ac.uk/pub/misc/bcc/README">ftp://dse.doc.ic.ac.uk/pub/misc/bcc/README</A>). ++<LI> The <CODE>gcc.info*</CODE> info files supplied with the patches and with the binary distributions. Go to node <CODE>Bounds Checking</CODE>. ++<LI> The project report supplied with the patches and with the binary distributions. The relevant file is <CODE>gcc-2.x.y/bounds/report/bcrep2.ps.gz</CODE>. [NB. Somewhat out of date]. ++<LI> By mail to the author (see below). ++ ++ ++<HR> ++<P><I><A HREF="mailto:rjones@orchestream.com">Richard W.M. Jones (rjones@orchestream.com)</A></I></P> ++ ++</BODY> +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/report/cred.pdf.uu gcc-4.0.2/gcc/bounds/report/cred.pdf.uu +--- gcc-4.0.2.org/gcc/bounds/report/cred.pdf.uu 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/report/cred.pdf.uu 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,3933 @@ ++begin 600 cred.pdf ++M)5!$1BTQ+C0*,R`P(&]B:B`\/`HO3&5N9W1H(#,S.3$@("`@("`*+T9I;'1E ++M<B`O1FQA=&5$96-O9&4*/CX*<W1R96%M"GC:E5E9C]O($7[WKYB7!32`Q26; ++M]UN\8V_B/>#`GF`#.'Z@)&J&-@^!I&:L_?5;7U5UDY)H)\%@Q&9U=[%9QU<' ++M@QN?_H*;P.1>[J<WB8F],(YOMLV+G^Y?_/AS$-\$J6?H<K_GI?>[CZM7M^O0 ++M-ZM_]K?K8%7<!JLM!F-E1R#5LN;UB<9MT51;N?_I^!\_"$NLZH7R[NG6I"NA ++MT%S<W9ID]8RY8/6Z''EB.W;][:?[7^@\R4T0>'G,YTDC+PJCF[7)O"PW?+1W ++M-1X^'MO/%;$@3N^/8/^,'\P,8$<\\S1?_=ZUU;:091\\N?Y6-'C03>:%84J< ++M4^(<,^>[KCD<Q[+7]:=A+)O!;MK<TM(5'9)>?NSHMS\Q&SW9.@B]/,J8SX<1 ++MYVCW.`BOW`F3?[652*(?JA$#X;#VO23(_@N'E\+B#HJAG3D1H]"GWUBD9LQ, ++M:FM2<9;FRC)EEOL%Z<9>GJ:J\?%S?R%'UHL^MQ:A73PGR;PDC97!PS<>D.G\ ++MWP9]J:[?>>7NJ/QH>>2%42+G#E,OB8.;=9A[?AR)*6X&Z+LOMJ-LR6[(D)-0 ++MS!7ZBT-9^;IDW1]H>06KBDRT.O3E4]4=Q2XB$Z]*6&?7CX/,5ZU<"RS9D5IH ++M;_L@M*';DYHRB"1;%;UR;-C^VUN3KXYK5B"=PKXRG:*HZQ/92I;3HIT.CF/7 ++M%".9(N:R"%(U>;[:T-/$6WH0?-(U/>D)/^H_]']LY?"8YT.8G.['JA87!!FV ++M25LJK'Q8.-*NLGZQ77@"#^BD492*..AZZ+L'-G5^6\@JRMSDT7D9N52:94`+ ++MS.^(?E(DP+VZ#+_`;E@XUQ:V]FB/L,6IOLR.M@Z#D)GR_5ANH;0PB%8;G`!R ++MXT/HPN_)#IMP>JPK>TQU;=D==>9*S_.3)GQ2>15FO,=N-H8X)#N3:\?S#(W; ++M8Z_6%D>P$Y%M;%;C8]F7&SSC))M@J&2>[LAL4VR8-%F,8\'R^:($/+?OFB4Q ++M=GT/B1P8GV&]81CB<3*@%Z<GC.5#7XWZ=)"[O5TG$@Y#DL2)]3I:F3<>/T[\ ++M;1W$GF_DD7]@4U5#"B$I?A8"<-_AW/)>+.PC#"=,5[L9V`^R]+&8JPV4F:C+ ++M5D@LJ$Z<;6T/,[W_0>Q,3!(NEQK6-JXL!9.2L(MAA-N1]Q'M)$2\13$=5HA0 ++M63?*6`^CZF&.Q:[#>4;K-J`]5\Y,X9:G!27-7FM;'`<6N)'[:G0^`%L.8=NQ ++M']!/(*NF^9/,;YS?%E^$PC=?G9_/+,'`Z8$/N_*EW(.[N>2^=.9=AR"=.(F$ ++M?@JWB\![)U-%;3.!]!S.0)BYI+,#WB2V3=X^X$B!05SE&1PMU*/1K6B*MURX ++MI1QPE#?K'#ZI(.@0"3MC92GB`W0'R"+(O']464513K9QF+33"S-QSD'-$)MU ++M<:'S#(^7:5$](2$S6R]@"0$9[^)WIBB`J`"SQ?@.,^_?T/;7Q,GW62!T=R=W ++M[XOVH90AUO2]Y7&61K']!+*,E5N,2W'**:>K=D!""BMEH9!,=[X@1"YP\%C: ++MO`J4':)HM*W*EOYY@L2:!,GY^;%RBA7\"`-$9.;E?BEX6K:BK768&0*7E@,1 ++MYY>9!(1B+.1F&!GY1*!'5IE,X,R=#E53P%)AV1TQO>;L:F]'O`KB71#5=FM? ++MP>9%,(;$9^AU\6NL&=@U\&-P]O98+P#LK`TDMMH]JTU2"S:GKA4.L'"LZI<M ++M2OW4R8`Q=`(,C%E`[7JL&B7,T=D!2X$3`UEL?`J#Q?"L.88P:@7LID<J!B\8 ++M_;(()?X4HXP.JC\L<!9`=&'*^UG%9V$,@JEXQ1<K[.N@)?GAW?LWKR5]J@:] ++M-H?:Q;I9#';8CIR+UXKA8D_Y=2S;H>KT%NGY7H82:VCP][N[ZUB5:*QN7(Y: ++M`R>A7%6&,`4A]'P/&3YY548YZQ_(&=E<`ANR9C$S"2:\:;J67*(8YVD=K.BQ ++M7,P;W%G(Z#9\)"?;.&#G6,>4WXG@0'E&K*(1&619U.NZVI<RP7!(.6.!BBDF ++M1-]`D$M!1>RQM8FV25/.HG"]2N&8:GR=G8$TMJ]9V9S;]];XL>[L*%S!&'J' ++MY\>*+?A1%O&&KEGRIH.8%$2;^6?>0A0J*@//R%0C.;AHC29J"4"#;MS+]4XF ++MY8'\!CODS1DAD\@5LX_%\*V37`@%@2+5,D9AI[*S89I(FIM*X7.165K?Q;(I ++M5MNT@YB>Q6M6D]`KO<[SL'/W5FE'L:\F@BCXI66&SZT$SB=PK%V,[@NU."13 ++M4Q1)R=7>CAIJZZ$3IF=5@,KA&_+BV2>PI@2?2[%0@+C]TEIQ/MM\3O/-3,RH ++MW6FI%?F00-=/MYQ/$J.A`TZ``OV"8K$6M"4!Q7,!A3G5TF6QL]8?YC%#/*Y< ++MU3S(&LVROCJ@S%4+6.>RO*ZUP2L`7&1I3,8>!2CS!$>/+-O:KE\Z&,$CL8T# ++M"5H8L)^1";3#4*]]JN`WI):(DHQW[&I89%:2`U=-]2=!!X&.4`E/Y[FX$`DX ++MKQ^[4*T]EAR$C+I.0`ZEX4*H%"A:H9M$*#_(!<&3!R2SL_T,R""(7E@'+Y?B ++MNQ3JJ6!\EITY@AQ+J`+U-#P>9(,DH-DJ"/T?9,2'P4"R)FD`.+MLBDJ03U2- ++MN:'Z>FMC%MFCE_C)39AD7A1D%Z66H=1EXFIL_>C:&Z"Y^JT0-UEW^_54/JR+ ++M'E";!2YSKN56T9I9_"+EL3*$;*XE]FLI70YD"7TQ<'9H0EMNT:"A!"V.5Y^[ ++MGOU;@PIFQ&^"R6^(=@;9((A&0DG@E1:8?R^5`)378`&!Q%!WKHQW5@7X3Q(; ++M^PF5^I*@<3@O"I1!(2L.Z#6A68-;N'PM?L0AG^9)=@M9_:R,EM?9U&4C][;4 ++M?@#H%OWD_40K'L0D5'%,NP;G,%PHIKR%%AH=*HR\-)5#41$0!"9:O6UO(?$> ++M2$/0>=S:''.IH6:\"#>T_:*5:[(EM]6.+H-J2%94#7*=!$*1LAM&H6K.T4"6 ++M8$CNTL@,"XDHHIKM<6XX"VI_9.,O4)49#5$F7>K9879`+Y>?J\O5_'<VF3K= ++M4CCF3"%Q/1NPTYA5NF`UNHIR*6!38<O)`T/YB*(.:,PY/*5,W"RBZT7/(]#< ++MO7-F,)7QF@=S81%(&!0!<GU?Z"-\J;M0=KW'B]PO'0U[GZJ!'%)0]2.:QY]0 ++MMZ7^ZA4PUL\$.>GZC@I)[2KV0C&^;Q!="-V#['RQP"P&"!T81/[""9K.VKB) ++M8E6SVC.'SX2C]G&6(4`[&PY?E60(6%3H=1YIYODNF(NGQJN[220_WMW9MTX^ ++M+9SN^;(G&ON1[=0PW]@/'4SR^+()">+<2>>.@;FI+<G=+Y!@M;C:^#3KN"Z4 ++M4*Z72/$FD<2>H7\4&JN#KH5<QF[D=L1LQN2Z8O<TY1#]S*)Y5L(I.-@J,L9+ ++M6_$4_8+T]J[]A4?FW.I!FZ"7N_$1J!!1:K<EFWWH>O8WLKV<HO0K6>,L7^P; ++M6B]ZV205RECVK2RUS#@_7,@M-J[L[I]N8S*9C59Y:#QP&D7Q^<JU)0^U"5>& ++M?/ZBG:9TR8\(TKAK0X1.67ZOJ(!I\[>E*`LFC&/3MB4W34Q6N)F#@8`7FF5Q ++M0`AYM)4,MA2#7#^49YCY,R0\:TO;3R`4TN$#0?9I,1$2$PLI8D[\1.W-QR#] ++M)`VT."*'LO">I%-ZLYU5&\+E_-.#JZ3F-H=E#/Y)<M9"_)^2QKF31;XAK0I^ ++MD%8K+LX$.")UML@/)/FOV#P95VG7Y.58,+C&D`TE*4Q1?,'7?L1I.:FV+3[W ++MW83,8K#RM\TU$$5M9/T'UYUB&*6I#S!;%A,43A/O+BK?#Q_HYQ\O9?7BY&]+ ++M:>[O;^^)'_G-KV6_F3<\;>-&0@+Q3>+4>?`@5FU1,=<O"QCLIQ:H,+;=1IZ] ++MS&+^;WUR>C1("E7(A=-?A'W]M*&S^!Q6"TDEI]VA!G='U]1$9EEKN3QUB?#U ++MUGB2\KQ51"XLX)^_@^T:?@?FI^:VAH1SCF2@P!*%G5H#S=47#G-5/7)I-_M< ++MDV?S1\V_FN4IHV5SX.]E>:H59D81V&4]U?ZD<UI0\+R8+>MZ*>D:1JXJ0BI\ ++MV&%1`-GC9-FLRI*YH9NM895ETNO!]>0@H-:J&U2;""'I8;NLYX]+KAI9XFY- ++MX5J558O#$#[Q.T=:D8#`33'[3<WV<S!1::,C"B=A1!J3*PZ4-9_S02=F4E0* ++MGTZ?M0S](A:T-Y*,TC.!YBB2ST4%NYH#AX@_+]/5GWT$A/:35%.M*)C-N-94 ++MI.&C.]9+)9MM/9.,[+<*>OQ)-CJ(.AQL3S="L.[+/8=)NV[K\K*]Y)Z1_?2T ++MG6KUR$B!>[#)"1%LUW[Y&TYD;!9ILEDQ"'D921!,?IDD1;;&@&5AWT[TPG!/ ++M<_:C%<82+TO[#0"KJ_VWJ@JN6?+S5PC#S+VGA@IM8--"=C-:P,Y3-IV`3[94 ++MQE$PJ/[4!TS*HEMK^H?KMNEE?6FN)`[:]%DD9/$;^7:`NWJ6!MBO"[J+JX+/ ++MQ79>#O/W1-D;V*_(9@$)!4#7J1>EA%8F][(LU:J3)EZ\N7_Q%V$&&!EE;F1S ++M=')E86T*96YD;V)J"C(@,"!O8FH@/#P*+U1Y<&4@+U!A9V4*+T-O;G1E;G1S ++M(#,@,"!2"B]297-O=7)C97,@,2`P(%(*+TUE9&EA0F]X(%LP(#`@-C$R(#<Y ++M,ET*+U!A<F5N="`Q.2`P(%(*/CX@96YD;V)J"C$@,"!O8FH@/#P*+T9O;G0@ ++M/#P@+T8Q-2`V(#`@4B`O1C$V(#D@,"!2("]&,C(@,3(@,"!2("]&,C8@,34@ ++M,"!2("]&."`Q."`P(%(@/CX*+U!R;V-3970@6R`O4$1&("]497AT(%T*/CX@ ++M96YD;V)J"C(R(#`@;V)J(#P\"B],96YG=&@@-#0V,2`@("`@(`HO1FEL=&5R ++M("]&;&%T941E8V]D90H^/@IS=')E86T*>-J=6UF/X\81?O>O6.0E'&`ED\U3 ++M]I-/Y$#@(%G`#[8?>B2.1"]%*FQJ9B>_/E7U53?)$;5!@L6NFGT?=7SU=6_R ++M+J8_R;LJW^ZRZEV1EUN3YN_VYR^^_?#%ES]6[W;;79&^^_`D]3X<?HF^?7W8 ++M9&D<[?ONP531.#PD4=^V34>_1Q2-E#S5RVHU?MQ[RLZS:#Q1':UBQ]'NN?0C ++M_T.92310B=E%>]MI@C/ME=HX3M4/OWWX"\UGDR3;79[+O'R/:19'%TH._7&P ++M]'M&UMC3;UI%CP\;'N1D>:QG'3!-=Q$M0"I8?![JYX9&I[%'9)QE"M1AU]4# ++MLEX:^J1QY6/`\$FT69F<NV!868=TF.J,TJ@9G2;\3AU\5P<4\'*NW#]ZZ5V] ++ME3'X;,QBG&]HNXHTVK=6]LDU>V18ZE,2KCE?VAII&>(3=6ME;3P*BK*H?^)? ++M@]WF;:?S*:.3[PR%>FYE]/&]3&=S.Y^/+!4]+^N%>^*&51GQY+)J%SG?'MDR ++MV-FZ$V3IE^0W$I;<%"AH<)8Z3Q;"JD+7.,7A96A&OW$.Q>-I*2F%3&JH1U[2 ++M(+,I(GO@_1[0SF$JLGXNP^<3U^_V8]-KFUY7$B3=3Y\SPJ;0Y//(]5J5Y=.. ++M*\+Q<JI9]G9FDN%=NAPSW?D9CB(+G=<$5J>X@'[T$->A;]';[]S#^>+0WR@G ++M(4F+\I8^::+0K36IQ=B&)?U4\_`F2\*231;/)`!'@-P7_NBO[0%MEZK&%9K. ++MJ993=U[0S5S'VF;?]%>W,J=]+SIP(!4@XU%&/XD*BD8F<73N>9J<PHZ0L'N1 ++M^(3\YX><CI5'%O5FDX0"6HO4.[-\C<@3%>5NI3/9K</:1C5/U.:5#4V*7:W( ++M=,GNR3&E64:G]T1;V.V#7F>&;!%5U&;+X\Y2T742Q`:'&O9+NQ.%YC[>BC@F ++M=&S[1Q:W%@:D_S5.4I'O6HP/V5_[*.I^:TB@(Q_XB,N89(W7\-0/HC*=50TK ++M8T,KLBUI');`51N'W_%$U21UQA9K^7?X@7'>W#,99+7/U%$1QV\DAW,>K[R2 ++M>MCT+'7/O#78&=X:FNHFW_D<&65P)":)H0W[#AW8MH4YDB&6DXEOYG&>;WM. ++M)H\%(B\2/9QZH(V!6>)"V:'@!MPX-/NQ/J`!>B+Q?.7O..K5(0SW%0]GO2O9 ++MWD)D=H4?6*;%0M</YZF`M(ZMI+J1`066S.+)V\YZ9(_`V2_>IHZG_JH23]F/ ++MG&[:<57*:7\K=:$DF;+<`Z99I3OO(G3Y<.A-=^0#V.6[Z&\RV[J?'RDM@@S8 ++MKICP`'?4RH*/5WNL5PT`5N*`#&;K0(;%3\MYCWP:EO><L[P%!J)07&(;W6E& ++M(K(D9Y]JU!FP,TU7N_<K?L1=O5=,=SD[-:KRY8^FG#!3RJ@J4>!$`K&_O/X: ++MYS']3;QWN`Q--SXM<K/H6(_.9Z'7&1!+LF1KDIWVR@X@2::U\5347$T;+:J6 ++ME.4V*19[:0>V`LV(;6K(JS)\$>#P;V^H\H*LK71N\?$XB>`(S^X/D]V8U.!M ++M$T6=J8_XJH):!HL,[?;`D1NN&[.+0,RY/FXR\H<OXNY/^!C%"XN7=``)(J.= ++M:V2%DZ&2RCU^Z\Y=55\S[WU7/30CGCQ.H[?"BV7F'N#D<19U];/WA?RISF!_ ++M%4M$_45_GU8C>S8P),ZS0D]-YR-MGU9M@^QRQIME-24@:^3M);/,5L$V+4I8 ++M(O),19_MLWQ8]_%KJDR3<?"2-0KF<Z?&\,8?)Q%Z@VF#^`.!4+53#30@*)^D ++MVULNKC`-E<4E`8H>V8=>ZK+,*S;FW$9_7X9>+$A!L/.;UO5K:C@&FZ-[EQ*T ++MM((#%`)*(D#9B\H&(HD#2G]-THP5_P_X5)3@(8+:8NJ7@2&Z#79>1Y1CO:Y; ++M\RY4IL6:?`57F]2L6I"\VI(H3!:D6S$AW:H-D<IVO&]&BG*;EDDP(V(CC,FW ++M59F_@:?-;*)IGD;BG!B"\P>@7,UNB..Z'KG!#0I:MPQ[TEG8Q^EC38&4()1\ ++MH5G#7*6X3,S)<0TXLV<C59DBSIQ<NH"=#;#5IN]JU*`3S9>XC_4QRZ-O'"I8 ++M_&@<<&4K-8IFFAF,X1K??=9$L9P0%A!3L@@Q"\9[=.@SNTB9<>21#*_<HYBT ++M2/2+$`P^`:HX)4$Q)X(AYK[K3YL5W1#XVS<"0[(JBP`/)-E:&0QZ&Z)W*L"! ++M[L4R3F:3"AXE3+)+/^]0AH`I#;#[&J#]L&8Z7D.P!%PDGW0@95Y&'S@=Z(&* ++M]K:&.K:`SUD*-63TW\J)'C5WSWB__H1FKG^:W!.;@Q6SSL)YH5ACAM4-P8!# ++M/=EXV4`%:P<4ZR9RDE"E8<S!:-P(Q*A1X.$%X/O5-ST.B(?)`)+HWLZ(UY4G ++M!?K)DS)P`D,P(2,*SFJ867J3R1YQNO$.UUVU%VF(-77:7`(E3DVAV)V(RS6R ++M[28K=7F44+0)0]HBC^=NR(^-=F#\PA\5"),#"E"A7.=[L/E9F#TG:1/=J-K: ++M2H2U!M-A*B#!]\*9;UAER%;*8$$#*=H*ZLDT0]]>1QY>0C#*$&-F"@0),YE` ++M2$;8%IWZH`25YY9L`*"\%^J\-&T+\NC67&2Q9Z("^W'L&AHH$V/,GCFP4UF\ ++M9$?L1#/MO+1*\GP)\O?,!RXK2'<+[LRK_YHG&P1H^ZBU2M0=Q@@&!N3MO?JC ++M>RJ5%;QZJ1SKH.YY59!;GX*0XPD-U&DG-Q9S16-N(1EVG4_#,X&/`7.>D0W< ++M]V2G<#SQ[(/LZBNJO4J_5FPP?=HC@Y74F%G0V8?"51/C1CGCS)@Y;@[FUJ2" ++MK1O9D/W*6OS\N(-1&0CK;3*U]@:=BO=!CRG(LRW*WUI!!EOD]`Z?)RL;-MU9 ++M&4_ZT@^LT9S%42#_VNL!8_FUE'K0_=/#%!F4/"B==$7>]^>'2DA'KJDT;-L$ ++MM<K*9!6!0X$U]L``+<2KUW!#F:V\F`29TV^C$*G[WQ`\M5.1$7KDC"RO;_11 ++M^JFO^9/@&IN9M1"$F6)J%%%"QM-)Y\A[7ITFH$^9G,]K9\\2K8OK1<@M>-HA ++M;X&X[\3K8A(%7@NA8\I`=,X"I$8(-Z_67(=I#4E,-JEO#MYB<$'87,0PR%S5 ++M1>]72\-BOB)M)V'/)AZP+"6&&3C.YP\XG;*"D?2,`V>(0RG+L)6<MRZ"4_D] ++MW\Y$A"%@SP/<PW>C\O>@@0WTEK4,(H-P]K#0VB20?*+!'M90&^4Q+A*>U@,J ++M@*<W/IZE'-[`M9!"`BG"I@2E1F_9LDR/CA-6[`XG@')X',BQ^C@.2$L2[C_S ++M8K)XXI#U4L<Z'Y!ES&99IHYX)B:MMD6<O\O3<KNKC`;(5ARTXQU)R\S;JKZ5 ++M[_2672WU`H1^EQ+3/+'Q+8U'O%3A7$^Q\:OVM]][%HC%8<4OS)DRL2IT:D+S ++M%`@..7&\BF@<!![3=S@K2D,%P^T(8B`!G6M$ET.1F.-;<OMV>F&D<C):637= ++M7(5QS_7`YK,RT&"N;Q^=PA`:7=L)(*8R"<HK"<I+<&'E.C.W&DX!CLP\C\9! ++MG&LF))%,QHNR530D+7#/MBH'*:@6MA[:,=M:7MKQJ-ACV94X[K4X9G%0B5$R ++M<R$563*3"CZ.),-%4Z(W5HE9,,,HF<BH8-ZXHC!$5/PD8GWWSM$B_I!YL#H5 ++MNP3JE.1ZK=1H9/$>0K4$XEP-ES\98WY_ET3I.5TLG?U?X@X+H8`ZRU+:1B'Z ++ML(U9.-$L,Q-#Q/7.0MQT8A2S`G*4F=D-EQPXUY2*MEUS/Q""C&8U$P+^I``6 ++MC!4^!5`0<#X&H9Y6H2WT^#44J,4T5G,^MYQ[S!7.>$T!@)L=?F'\AB#X>\75 ++MN&=)9Q"`/RZAGC]+88FDQ8VKSN(%7-1Q.X^\5Z]O9N(N]S=KISO%.BDU-MMD ++M)VU_?&`<P>)=X/ZR*&]LV1ZE0#(+(I]KK^[6_&:^*#SFRA0/R=SX0]2HOX!P ++MH'I--P4_Z:U+]9&*]TV,3W$GCM\S3R5<^VNFH^4[\1+I#$:E&?D^UM9VNF\6 ++M^3[J)?HP]_;B`V'BOE+6S4S<F,[6Q-O"8%?)<)5:KUK6,\J@[1_RZ<)Q!!W. ++MAN@M[Y;GVS*OM-%7K$69"M<XI]EHQK;5Z[L;D:*\YZ9O9Y[\9@F;@L8QLH:* ++M<_Z'-9"@YFPK<U:#U35DY38ERQS64.XJ#9)A*@?OTO,D]EP&^:BA.39P$,@( ++MSS3.^':SD&2C8\Q%1GDX,CZR"=YXRGWF#0F<YDH"4VG7X_<F).#,E8"=,7-6 ++MBL==<]W+TS!W[K[F*D.82=TKI[SUXY9!>_CCZJ;;<#`A3RA`W*T-A(7[J",+ ++MP!4?^)D8``OU5^=^FFM2HR3%_R0U%Y:4VE]'VDZDJ+X5_'1K$K,4_'/3-6?> ++MJ.L98HT#V`#?OCD=?[JGVAY@_#9%NDW*;*&I/Y^`J-G.YC/JEF_-;VUSO@RC ++M(`5:HJ1,.2-E,A_]J:^2+(BQOU70$TRB]_<LWXP(V%LY\CFE">1/QW_U-Y&I ++M1C7U0OY7VNR8CQ3*-"C6FDR<E;DJ^*85D`"^5\B-DK2EJY&2<)2),-X*O3!! ++MB6=PA<M)3;7"8%$MSZB$$=:@L'\'Y8(1!!WBWU3,+2&((4D$%^P%A;8USZ/? ++M)P^NY)Y#N=7#7\K3'2?*(([O5@23R;T9?5RLO_;'M[_XS`-%B/L@CP:XCO6/ ++M@&;4HG3LL0M_>"YW`G<K4G-X%=-Y!O*ZO605BW4G`I>RH/<4QGIT6$X>-ESF ++M9>7R*I('FSGK]1NNO6TYG$S*Z*?K`,;!S7D:S@`<S$'J-1I8<,;U8;JP1=6_ ++MD`@Z?X=X0-Y?_?S%R;_^T:U>C@9+W#7_NBH91&(AQ'J.`QW\FR4%_+E<3&E% ++M>:<39"L<93X)6'C$)YG:;[@66>$.IH<\PN1O@5[GUQQ`*NPGJD*#1I@E5IVP ++M#E.5LH?\2_'T##]QZ_#`JBI7+(RT'3'`H9^*W4JPU?5RTY2K2.`UAEPSZ<4$ ++M)X;Z0MY^ODDAZ.!BL1S4Q=O%LVOE*[4_X1)$YKR4U_>?>=M)FQ$V:7;0],^_ ++MKGZ12@]1\E`S7;YO@D)R0]OVPF%1,IR9?`F95!43F21O]N961OKD`UDUJB%Z ++M"7R]\`U\\7%HW/[JPGTS9]VS1A+M_9GG*JYI^>I5N]L'[1Q"K,+Y-]R!N[>5 ++M0JSDU435U_C&A6J:Z^N><1/(-$DM'_Y(/<'[AZ%V88;<#VZ!2PJ?1<V_9LXF ++M5A!S.Z6E/!*JR6<(*>>7=-,M>3:[$AA0OL!O<J?I4+/I\`M/97V4P6T$%E%L ++M;N69T+\7M-C7JP]`#C"$\C"!?\_A+2[;J3Q&C*R>NCE*_V]O:ZI(6R]03I;M ++M%I?`IP4EP585K,*=EP\2P;)W>A"J;Z,/.%*RF((-:Z2GD-7-[K#0]+M__$"% ++MW[]'38O,<;K=0U]JKIH0HI@TO)UU4\=K0C=I&E^>`%4D;]]0!!XU4.\@59A^ ++MU!FB_<DZ)&9F3N(`RG+7&04$#'%M[]T=CK6"&'FB$L/[Q/$;]Q<;P`"KI7D< ++MOX_C&!]M`T<5XRY,>M%#Z#:NEVNFO=J/3-Y`?N9)Z\26>$9#::#.C8,=M5S> ++MBPN/,C'()+QOWSFQ>0TOI.B#GVLB)53P4_W?GC&([!4FYLW_'B^&3TH+\R/B ++M"4Y,B"O<=Y#$SC@24:RKDQ<C.V7Y;EZ&WXKW6[3.C-[L501_KM)W::#O].6( ++MI%D9/]7:KE%"</8H*=%'#$FJ3-Q=UN]FE]Y`R&JG3V@;_X;33-C1!YZ[))H5 ++M!V9MN.[Q.'W:REBWW#"_T8;W`\(W)J#ON;=_\E;,[B>XH;D;@[P$M$`;U#S/ ++MOEC,316O0<GGIGY!)3A+C>U-E:R]">5LJ'V]Q%O<T%Z@ZVNPJ5@PY*80.#A[ ++M;V**Z649E_ZU;MO77Y+D-T8/+Z?&,^!<UFC]X-4I_6B=SY9U\/]WT/MKSL/S ++M]>'C@S_:3;G-A$K9;:NJDLD9+OCBAP]?_`=0#=C/96YD<W1R96%M"F5N9&]B ++M:@HR,2`P(&]B:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N=',@,C(@,"!2"B]2 ++M97-O=7)C97,@,C`@,"!2"B]-961I84)O>"!;,"`P(#8Q,B`W.3)="B]087)E ++M;G0@,3D@,"!2"CX^(&5N9&]B:@HR,"`P(&]B:B`\/`HO1F]N="`\/"`O1C@@ ++M,3@@,"!2("]&,C<@,C4@,"!2("]&,C(@,3(@,"!2("]&,C@@,C@@,"!2(#X^ ++M"B]0<F]C4V5T(%L@+U!$1B`O5&5X="!="CX^(&5N9&]B:@HS,2`P(&]B:B`\ ++M/`HO3&5N9W1H(#0R,S`@("`@("`*+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX* ++M<W1R96%M"GC:C5I;D]NV%7[WK]CI2ZB9E4(2O$X>.HD3MTD[;:;93A\</U`D ++M5F),D0I)V=[\^IX;`%*"[(QG30@X!,!S_<X!HH<0_D4/:;$+T_@A2_-=K-*' ++M^O3JNZ=77[\I'LI=F:F'IV>B>VK>!O_;%$F@-UN5IL%\W$38CH(>.Y*@@=_M ++M5&//!9H3-B8>FH^C(=;<<\)VU6[<V_K7,$KJ5O?P-_$2P[-YG:;F'Q\W<1X, ++M.-_[S;NGGV!GVRC:E6E*.VQANKA(@U_,>O7<#CUO)RZR0/'P/&RV:1X%*?^L ++M^H8;`^Y\Y#9]P-!!QV7&C0Z]S($OTUL-?O*HS9?2Q$=]VGGV]8OFC6R3I`PR ++M>*1A<'9OZWX3%\$\\8#^=(;9<OX`_-+V)(Q&(OA==4QHN3I=<)_F?>0;KE.= ++M<8GNI44&'#R[>OV?'[X'TK"D;TJB,*@'DLR)>-:]<*<5IVZ8FEGSC$OBED@D ++ME6PFB6!_N.X9M]22/E2&@;O--LN3X,?^<RR*\R+('^%9ACAU@;/&Q>)K/^#$ ++MU/J(U&4PL#*._(M7'X>JQI>/>N+7D7$#4\PXE(,"P3>V_8&7!-&M=I71KO;X ++M\:":2H2Q58F":6#B#[(U%A&0I`,S`T@2%NZPQQ6(!K1BF^0WBDG3%?PX.W$: ++M<9<D4YQON,C:]=!O/=RKN\O$$RH%^@PS-=Q^Q@^8+S*W4BL+(E7]^DV</43) ++M3B49&_M6E?"CI'ECV$D4I\%/`]HJ668N!H.-?^@.Q?SR%:L(=LVZWJ@H./8H ++M\]\OFI=8>9-MG.S"K*`%O@5=`PFD96%=2EJ6P-TT`YUJ!U$^[&.>LFT,4]5) ++M-ZI[6N9!\X*?79$"X]HU#^^9_D(\F7RL0WY8;T9*\WXE6U+WMU$$.JGB+(AB ++M:N1!'+WCQO,P<H.,8*SP[9=)NHA5T)!]MRS6Y>0*R-%QX>2O^2=_JD_0A[$Z ++M3;B!H@2AB$1*)W+09!3*"_S\2L;6?".#['`D%\N=^#4T`&H0!X=IYE_5[-O& ++M/%:@P<8&$A73%^"3I%C-YH=N1VZ2>M_L`D<:L4QA^<2]_2!S6/E4_4';:3U[ ++M&K7?A"KQ*R4Y+7J>:;F!`Q!Z53T24\,0]P\=HG9Q&<,V.[9L=A5E)#O2XD1P ++MWPT/H+!O]T6J]UDM([^:!^0LR4=!/,2N@AUS6*S"G@P<-+!A!+U\![WH6;,B ++M>,(9["HM1S,DGUZ(Y;,9.GE\W;&2*+9WX4=+0&U/9^?+)%QIB9KFM4IH]:=9 ++M]^R-3+"E)TQPU-S^V[_^RXW7/H/D((0+MIT>T7,F<?`DGZ6($>V!9$>*#&;# ++MBCB*"X0."AR5V&"CG;/NC!:RU)`6`QE;<!8<:A;/[:[,$H:QM%($7F"7[^!G ++M^`U.$(L507]7S5IX3K_76XPR1C11$1@4!#2'NN8^J\>=KB;-?6H7HJ`3S]Z, ++MX_\G>Y?+I\?;0$#+@?NO*1:,(D.,\3AZJEKN8%"FY:4]N3)N?S=>#@@D:%]O ++M%6L=[H4]^S92NRB+:3]/1UPM!:E-FA@*%LA?B7U>X(,#%1%$OOCZH=4?F8C< ++M/1")\^/WV.RV9B>.,^0+370"#E]%`Q+$VIQ!NFCG.#!K:[5]^SLB04VN/W2, ++M12JCF#!]#[HOO8*,P,MX3*UI35RI+Q-N(^1E+(0(,]$D:-Q@8R`F;!RFQL$2 ++M_<JYN/A+@R#OQHR//G]^=`"!<2,#*-P6=,;H`,CEUU6W0`TR`:.&9`?NDE$# ++M6D0DT.$[=-V31&1$"#^/QH;@@P@FZLF+$L)=IIA?/Z*"0XPW/@3;)OH!<JAP ++M+A1'F8'$C9F#X"<FG1Q;-&/I1T2J&)2&PRBH`0D!=J0<Q=MJW]E@XF%8-9*' ++M5LY4GQU_4;_)I\?BP!7Y(GP")MS"&K\Y'$BH.$4')S/NB6$+&(.=YW'%,.Z\ ++M3!(^/)D0*7?DPK&*0N.<HIO,@7M)J2+2;O`B+_S#A,H5;F$RXM-\/.FYK64& ++MR5Q&CKFWVSJA2MF$8F8>^5BX8%YLM1._F:'#2=]C)[_Q:YB&OT8J$:^VT/[F ++M_IHVH94\ZR\P2^23/2$FMRUL4VR&J-1O#+SRHHP=;K=@62/)'BRCYAF0K-&5 ++M^R&KF-4H3!DL,NT\7N5;WCAH=DI?<T%(%D$"C;-13$7_E2B7O2.E4S?IJ)!7 ++M#7CH27ZC:>$\4_N'D+0]!\W3/3FS*A7("C1&:K_OV<,![I1X9Z0G04("(ID6 ++MO6!#P-DHJ2#E"(&UN*&%TXA2M2M4(>6*8?^;WJ2L$Y@ZS:0Y8M;7_B8I=K%2 ++M\B9"#E5R&*/`$H?Q+LRCM<NL3'H7EQQ>\7EA"VC(ZHS"$8P4@@GQ:$U@<P'5 ++MJK-026#!-IM()5B17O9X#QY`GGF0U,B3ST[Y&2H"5]YL"G9>B+;0E$0G;IA: ++MI#N(MQZ>)C%N;]]YF%GNPC"55\C5EHQ@-1L?5P50.T-*G1/Y:AP;+O/*Z(G_ ++M8,FPB>RZUB-V*E:+YD-!(/T3U@UD"6LID%?\($SI<$?/1!XK?N3""%DFO,>? ++MUG4RF?0:S^LQCK7:FU0-TOR5+6*'V*)UUT+'664B.@)F*>6%IV7R0E%.)6"M ++MSV(`QE]A@8)$C]FDQY$L$/B%4"R5DZA\5:S=`_0_6R5*3&F(O'-2+G/>A:1& ++MF<<('=J-'O6S+\_4HQ4N,8LV8\`1-CP,XN@>*T=TC?JP[PMI/]"D0<TZFH'G ++M.U'<??FS]0/*SS%\X7.RI4_X0<(H7+5#E>M"WFP1*!#[Q`_=SY"32O-CR^71 ++MWLSJ\P.8D;E\&"@SQM$JB]P^L&^55\'@E:9B](I76:;'!4>[//*ZX"(A=^%U ++MOVE,Q>?089<,,>?6N%\%W[)&]F<+SVP^*MY6*38BRH#X,1%UA9)Z83P[NY+T ++MVZA\]RB]`S^'LXN9V/C#"!#FZFRY8GC/U.CSZ:UG#^_7-@`)($?N&`).FA4/ ++MJ<IW96'2)@;SX"T7.30&/5>H@3'417U5$K;?'IFT-Z1O!_(1W4&_G:F*C!U= ++MN[V7+NT)#(]4^.4D`Y^K!(GTX\`#X\"U\9ZS.8PL`*(9R,)&GBF-Z"TJR1>> ++M>KE"P8DO-EH?UCXQNREIPFC!Y990G`VWYR."7*H9'UM1#:[5;"E7MX@3MG2! ++M/(9KXD1B+(`J.'M+2:P0#^V6>R%F^C*HZA.B!L5+:(NVTAPK2#SDS&GFCGH5 ++MFDR=W+QV=<"`+YPD<H):DG?N;&W=X\;Y7"/FLYF[X=!X5B1-KQ$\5\'BE$$9 ++M-I9QD%\\+Q40E[,@!MJCQ6]=5=_-5LB+;5/#$4:-F-U#.DJ'-926<EV?_F\- ++MOL*1E1IB!WI#G(P"`';X?/3=8Y&NW5,9=R2'#R@)]+K(0TI",<BR7%KA#P@K ++MC9P2)7FV-%ZB[Z:!!SBOINI&VVPDFD%_Y=G%.F9M%QGLNNZHU'6M9%VB@F%R ++M]?#4BXS>].:2%$*'X$U:D#Y>9G_-#^,VPCL>0V'6@>@-HY&6VLI'$RI:*X)' ++M]D*54#2LW_782ME1RBJV+);='IK`2I%,<ZP6Q:)[7'2ES"SAB:>9W.)I483" ++MF!=GBNN50#>9HTPN"8H9TGE*QQ3ZT[D;2!4F[J#R,CP_$%%OC<UD"K<FZF"8 ++M>%!O:24N=GD1N=**.97Y.U7%F\[X9*RN_)LDL*7CN>T>(T$P4"[8R`'-SQOL ++M8O:J14EX]!9A(E@Z5"8\,2(F]0='G-G3WFXVA4+*1=K)5/*1_./JJ+BDLB0] ++MZ7!GWMK31-PNAM4+EW/L!%>.T%_LH-H`1?@/QC26]1>K"/BC$5CY.7<H[V,9 ++M=Z2421&[.7^5:1@)8-,<5"9A0C7$7BIY'E=W;-F.T3^JFUR`.LDDR9,NL+9Q ++MOA,/6?4\+\]4*#3&HL1Q<HW`9>RO?"CPY`6+KQGZ>;T!0L+%:2A+")!:Q6-G ++M\@5S:^#C-'0D8K;:+#*'L/@*E?(8Z45B!I!*>D_/?Q0_YHJ4)3NE$K-ITI1J ++M;,2U).']M`,GJ2AVN*H53,*E\6*9QZE"RJZ]BVVWUCOTG!10V92`O0DZV"$* ++MR_9A``<56*\"._:1#>M%!X9$XP-5LOAV.6`Q::Q*_+ASF5\LSR4QH#U*JCVN ++M4Y)VYN>ZY#>MDQG^O*(T!QHO_,ORZ9.4:HI23@_FQ3[HSL`7B]!)@6>_=K\) ++M!N`RC.18`4>INM49TLX$/31&/(CBBP]4+$_DQ@8^)P<NJI%)R?RR=4'%%T7$ ++MNX$3F)=PS0@U);&?^(H*)8M"7<FU%7)Y^'LI">KA6R[P[#4WY-SG"N#[[((= ++ML@K9&**5,5`_XRBI&#*-TR-SE$.2$[@'T:(48&"JQ3C-E_SOVN`LM@;&MB<. ++ML4WK"F+(&QP[VV+'S!UT@$CG_DLF80\'!EU75/&.4T$M.,0E>[JGXPNP9-M% ++M*M=5;!0"I5I=:Z'D=&!2BY;!\Y]:46P<8#M)C`F`(?;RZF!''+738!KR9C:C ++MA62+%`X]4L^>K.)'QX?"PQG+/(`OOE\'K<^$,:NA"<K35)63Z-8'`<'*84UW ++MKE<E28)@PJR$/M*<&":)/3L66-9261QVG1<A5AP3\CE(QSD1-`9WDVSDV0%# ++M`GS9?O'BQOH3M*UX%;;@@TD%W4FQA?I,$L(3U[9,]L1D)$4B%UI?^06[O<?\ ++MRR,TJF?!7U]+QW!UI8O,S=0H1B&JH:MM;H0I9[$6%5WQ?7T(&^^B.*']_#3T ++MBY"2R/4$:(3NVHX96)SX$3+!SKGB'$-H&/AV\@+RA>_H"'@^Z'LU!;Z.9JIQ ++M(-^.0,7A4AVDPP<UL%_"'S:=DM!]D@0QW-0>>E0MD,@;1*3C-&-@RR.TY%OY ++M''D!6QM8W$C`4C#"&H*B>SK\VMJZ@1!<:1O]+U5\^+(7)B*7UDA)'IE%4]\6 ++M[1_OYL`K3NE/M3O^D/N#2A@JBT'FH%>WB="F%HRK^!V27D_YD_"(/]-G5OAF ++M3"6HL>*F!'*L,N>0/-CZ'X5C"!`<JRHI%R04.^PM(/)B.,MU)<SUKLKKGKQ< ++M7/GI9`\Q6H@E%&/+.#A7=%>)3T_@&7FB.H_73!"[;`#3$%U-K9G+F1^#GU;J ++M39\+P&7H.R/@L^<P\)Y`(CH2#V&/(T*.5:;0)#=N7KC+H;EH547RQ&+K-VK' ++M+1,%<G-!!<\5%[E%%'S#<R^/-&\_RL!H4!]F9;YD91Y;YUJ-?MB\TG2573M_ ++ME=V62[$[9PBG3-T?.B:^Z">_;DT,M1Q+R#,3<"5?95R,^4R=`*/'-`^C;A[Y ++M;L&>`L45,@#9N69?6_XB2!!:OK%%3K/A'D$ON$+%/33W(I_R'!7=7H49*2+N ++M^(A#G#S5'THI^&7F"B`U&?.B#.E&'7:=*R'S>Q"<B2Y29\5598KM<.%+^!!J ++M460QWX@W5;]PXTTE[K@3VXMK<M<EKB2^OAN'"_#MFDO7>)W]DG$4DJ5HH6Z. ++M`TN31UEVK*[*C5+V%S!G"A2SY&DK%8ZXX&5O]^C;X*S,;>>A-REKZ1+CO+1Q ++M2LO-3LI'W?U,NNZL1VER!66)EDS=!%]M[A;ZKT_,-,:RI)"HE:3.E&F%13$X ++M@12%K9.X.W0?S($5CMR_Y9I@%F0NB:<2W+<>]<*ZLHMZRSL;C%]")8&;D`#> ++MP-%X;"8E('<O1Y]=Q9E>%[<3TJD0E8L6H$PXE>^2/'Z`L+TK"KZ@K'#@U0]/ ++MK_X/`@A(Q&5N9'-T<F5A;0IE;F1O8FH*,S`@,"!O8FH@/#P*+U1Y<&4@+U!A ++M9V4*+T-O;G1E;G1S(#,Q(#`@4@HO4F5S;W5R8V5S(#(Y(#`@4@HO365D:6%" ++M;W@@6S`@,"`V,3(@-SDR70HO4&%R96YT(#$Y(#`@4@H^/B!E;F1O8FH*,CD@ ++M,"!O8FH@/#P*+T9O;G0@/#P@+T8X(#$X(#`@4B`O1C(V(#$U(#`@4B`O1C(X ++M(#(X(#`@4B`^/@HO4')O8U-E="!;("]01$8@+U1E>'0@70H^/B!E;F1O8FH* ++M,S0@,"!O8FH@/#P*+TQE;F=T:"`T,#`R("`@("`@"B]&:6QT97(@+T9L871E ++M1&5C;V1E"CX^"G-T<F5A;0IXVIU:68_CQA%^]Z^8-W,2BR:[F]?C>F$#:P>) ++M@0S@AS@/'(D:,4N)`DGM>/Y]ZJNJYB%1DW6PF%6S^F!UW0?CAXC^Q0]Y$A8N ++M?TB3+#0V>=@>O_GAZ9OO?\H?BK!([</3GM<][?X5;.NR>?SWT\_?_V2C:38N ++MPC0M=$DM\[/--HSB6&>;IGJA(S8N<\&7QR0-RN92R>/O41+MJM^CV)T>XX"` ++M<;"3F;*?5GQY-'G0UCKS%P+%,MP8C,/'39YFP:<!P(20B8->ADVU`68/&V/" ++M-'_8Q'%8)`DCQ1C9/`V&5GZW>'E[QJO>=.8@.-D\F_#NY;GL6IJ\G';T_W?T ++MLB@*G@$89&MYFIW3^H/BH!/(15`<3V_WC&:TP-#O<G$1G!\WAI;5?.Q0=8#F ++MP2O3Y=(\"M4(LBTOO6Y9;J=7MR]=2;]'G6YE!U:5S4`T3(L\>#K4_0HJ->B9 ++MTK6VCX0&MM05,V7D6)K0_>7*&(^(;GD%WC_48/&+'M0TLO#4`KK!HNU(?$RT ++MN#*]H"L'O*X]K>+%KR%,BJ!MOO@7V$P(!IDAB*+BR9_1`[]':,H<B)2_75V" ++MBTW%S"&^VB(*^HO>FO>6O6PH.Z`U'([54&^_6^"6BMJT1W]U.K>G>S+=VTY^ ++M=U57[>GO!`HY$\TO#*SIPI`K1[M/.]DR$K_BT6>][PI9]K3!6A(!G&W=FO@L ++MH20/8+%-`E"[E?EQ>Z^HL8K4+#`K!B$I0IOD?\XBV,DBX%XDA9E+@T^B#ILX ++M-:$E(S._6]^"+40O4K&-C5,B&#@!LN*):5[US+_R!<R-,V\1,'RI3J!PM9/E ++M3%L;)W)7+/"J@EL>=?N:Z!V@2\V@"A`'(:_!;<UBW1,?["PQO*]?3C)FI6/; ++MP:)FG2-QX7OP>=NA@>EP1M&B'4SZLM>GUT.E)]4-'X+9%\9(*'>+Q[4(T&M- ++M`C&N,*!WEDRS0<"P#OA=FBZ>$1V-5<-&33&DU3P&([W"\!OZY9'@F[R9:8R5 ++M;_JR_9H:>:$ONW+KM5BM)UZ;P_`R)OM6"6C2'(1[DU$Y@WH;#_LU,8[4SP1/ ++M>#Y,2WM17C41\1TO:"(3%O9KW:`GY4NI;#(1>>%DP:>Y.L#^N.!5>(P'RW<5 ++MHU78Q75V`MJ#4C5S;8\S&I:DPLB+Q6:?!#(<6JQX.<A.*/Y!#^XP<=JL.:7Z ++M"`+EB1#HK1^J(YY3IF4[R@0@,$_M(*L_GUJ\^U6>AD/)<#?::;%!HZ#E;!>2 ++M`"(]&F5,]G(`Q/86N>>)76SXX6P,V83R5(-(EX9]R9SSF;'!#V^R3,P=!GQ' ++M1T>I]-_:NC0/K;%_SM;1R>Q'Z9>=-)`0,Y?%H;7NVK-M3`']H!^S[B8Q/_<: ++MB$A.L(X4C-2#;%R&"(`<O-9Y!P[@C'+524`+)ZE[RS5+6,(Q)G<]KOA1B8D8 ++M"2P6NY:1R5`)PI@$O9%I$6SL[<3I#+C`FTS6NTI>4.\G(`Z\-1[U4N<VEISB ++M(O:B9[(Z_"LH30X)`E.%PEJ3/O@+(RXFDH2Y*_@5!H)DZ;S8),$'R.D+NZ.: ++M]>DHV/WS<D3D579O-Z("A$F8<CGMMT>2?%8P*^H#1K'2&"+%E[K2,<=/&'C[ ++MC`V0Z9IB:3M2G@="+%G^&4O8\?2R![<W>?P.]W2A^,4UD[!CB^\C09.:,1+$ ++M>$0PM<'/[8EM`PW9\6+^%X\FL^KM6S^/IQ>0\2`QZV(3W[3?>G?3BV6X18W\ ++M)+&U\PQ6FTH\+AN<C:B4642S!Q%/\<<<_'C$=,&Y:U49.K*IQ";Q^%D8PX*; ++M.$R%A4A'$M+`OXG:P['=$E?<;TP(UE?N\EB>E_[2\Y#,8U=7NH_-@RM$:`%H ++M28/)7OYG"B$8N]B$F5T:\-&84K#&V55]VK*[V8WQ,TVTD*.-,')#;!/H2A`! ++M<%^?A/_0=/!)X:^/;%1N];(?2A\YD;72-((==5-7'4Z)[7@EM0`X,RHD8,%` ++M<!NJS;F$..RJG>:"SJ;!![8D=/(S;C:\EUV1LO-E\9+IPM/D.O,PPRD487BF ++MT(32@+G&.,XF]`2)]E95IYEEO1"RFRAPE+.-9V41YN0KV/2HI'VZLG))NLJI ++M)"VNY`T+*8Z5%(JY@#6>,AA_711$&A!FSOT9=RA7RM,P,NOQ#W*!PD6+N,P5 ++MBM&;5WKV'0"+[\"((OPQ9/7^'E0J,:TRR:)V&A-2VE6_EX';/+Y.H0$JAS&< ++M.)X'S0NEG!")7=*]TSF1AC7B703"#@@[.0!3U_0UOBR[Y3+$/T$:#\!E%B=; ++M2S+!B1)=X=@+X$O=-I)M(E0"9`P":?QQA2*DN.P]RF['7IWHR=6`*4/.QH`; ++MV?(\?WBM>X4NI=P?I-Z?SF'RK"GM*]R!N`+\N#5N`GR5!7*('P<?V+<D$A-5 ++M,NXECVMDGX1E%?(*E`GX:KJI[-<4N+\0YR5=A[W1FA&"6SPL"1YE1#Y0*B<W ++M+(O;V:9*EGP4T(S0*Z_M*IZ<6YS19]7^08+Q5L.>6N16!9E2J7I;-G=-BU73 ++M\BN75A9)8RIXC_G>P!>F>Q&(9/%1`OC%K)0K!'KKJ'K9N9/"!B*!LIN912/E ++M)-Y<_;&Y<6NB'83<J=0T"<E)>^FV4JM#C6F0P;8]GNN%R<V=RA1&DYHF$_6X ++M")3=I+8K83#7'`OR8!#$SXOJ&`E3`P8\=WRU-UF)LN=4;4(5DZS`TV@">,TJ ++MN3`AWB5C>[<FF901<.[G\BSH>.M^+C$=0GI':L=.+,\UM*=0=V:W"Q?F/K>] ++MG+9D&%`H^,P_NQLK[_*P,+IZ\MV,;UXP"X'+<)!JC`B>LV$>+S5*"%P=*R5* ++MFEDI[9+/Y_PIINSFJ):O&TH?WF)^U#XLNBZ7+3A"B[?"XITODT9:9#FM&1Y. ++MHSK(,/DD-4/NICYB"TU=YB=+".TTDAMK:;7P!Q-DA!823R!(:?W<2?'0"\@M ++M7CY?L$DR8D\/5B.JON;T/W&4-,W2@0*YDTYP=3-GVYVX.\$.3I]EB%ID!E2) ++M96P>IE'RD-@L+'*C`C-IBQ=>L7TS/EBCE99!RKQ;&*MH+9JEI<68S>K.J1A" ++M>YJ6GX0*4N"C'7(3'G[!N%LM:ERDIDGOM.H[CBWE:OP\N_@@)0R//S)EK)#X ++M<^0@W$Y"M(QT%DE+DF@M#Y"F[(?5Z@4'M/Z8OZ+'824\<'8*(IPUW&KHO=7( ++M*!!XFDV.B+Q(14"V4RK$%H.&.X1/I_)(U+[%PILO\IB.'N8BZ$RB9H<&35ON ++MYBT;6NT;+T;3YUY5@>=\DL%VQR2>,9A;S]V'RA<D41O8<X&7!E?9_U3SSU:S ++M$P*SEZ5?KFG]3X',V/<.J[2YRDC\%6&YBRCXP!8NG@O^W/+L9%:EW8<!CI+R ++MZV-Y'4<V7*!K=K+,"^(*S\3>;$7LD\CZDJ@76-K&PAIIF2.)$!^<!0(!2R(S ++MS?3#Z+$Q[^LV?O=J5.@WV#BZX8/F9']OATH62/D/HY$3R'J1U:TD?3/#'*LO ++MCZ-WJ/%5AL=%:GA8@+;J`"#1;Z(9["+FMH"?RU/Y,L;\,W-ZKV>&NNB83.;9 ++M%)*/N4?N"X]C"U+<\RSS:CG8FW9DK.+M12)WUDR"[3E!.:YIDH]K7*R"P7+E ++MRT``KY%K5"T77T<O`/FXV3I-8>`8?;(V)01.4B&YR0YI_SMY%H6M-\K`I9NI ++M:('B#4+8,S=@SUS$T6+"G70Y1GA";W$:T_Y6JU(AHES*ZNC+?:`K=6HT+,<N ++M`@E=+44EP(\2?^"*>PJJ+\O(-5UPY;88HV7=^\W**+YN5@K+2%U;G=>"B"'B ++M,L.:D6\$N^//(U03]]6J,^S&?%##8/R.IGY3<AJJ!D=\[55`?67AL'TL_=)X ++MJ?*Y>\>J)I28?SJM2/1'[@'&7.7F7US*&,]-<8WU*#,TPQ<Q\S87GJ8VO='Z ++MTS/7;3M4:AG(.=A0RL,B=[_7C=8&JB6/7\K/'1G#I'9W;1('BX3N*F"7+K%- ++MIG(J8KQE_W;<&TI%XY._9Q*O=S#'(%K*I_6S9D;HOK.[=:EO(2-11J%>RZ$N ++ME?02O_6)T>P4ZI>O7&(9@'Z%>V6O(9A0B#,%JG@JY><.:1$5T4E/TL"FO>>2 ++M3;S-O>1N+^=ZDMM[P1CL5SZSGVC;0P,6_A9+KF6>5I9B8GGZ4+&PTV@UG\/R ++MHW9"5SO-LPJ=E#[9NW,CCQZU1_+&;@]VD+%"K=2K'1;--7B)?U1H):*X_E0E ++M`L*;%074Q$ZTE$+*3T`E-=C/Y?;4:`"#U^[P)8/-HEE-G?,'$J_7FF-Y6KX2 ++M1,?<2<2R^\2Y$@#R#WH9^M7&&P_'&]=L<GOQ3$A*N>PE-:]BS?L4<^\#7]?I ++MGO;_CCVRY+U0,HN#W[B_[Z2OQ=4"[:\2(9,X]HT4@&$_;O'XI:+D\EN]*$*Z ++M)4['2L#;\N2;M!;1G;A1+:,0X-6W4IE+D7W'76)VSW')4<[VWUY%*Y]=N60U ++M6'>)FD/G?#F00-+2U@?FK1/[4M9C'X\@5=>UOA;FQ/$RJUSR%<6;V;<X=`+, ++M!_GNIX//:)RX&/QR+P2#OAH4@@0-Z?V$`,`2.V!B$ONZ6VN&S"H>+LMF1&\$ ++MX%F$,4GPR$H6%A?\XR22(+:7UBR5&%/:W&+I,>_7NF-IW)&E:^67(VX,KE4- ++ML$$7C8X4#]Q3Y$9"!3TWI/GZA8JFV8#<U7>4J]]#K\:=G%F2S=DKLA%`182G ++M'3L,9U;+_V[*<9S_.*<99/UZPC,5=F<-8A>2W*$0AJ"S0%O#FC"-<RFH:H?X ++M!ZF/TEW*SV.@17K^XQ\L:\,<]E$C"63-:WUC$X>YB?GX#V?$Q,W;N+TPP<]< ++MEF83BM8]*U81+TT#3<R_X^#/0EK]8.2/NA^_V0/`U\NJ5?T1_U0V4X*5,LVC ++M-!@CY".(/ZNG=#+/"A0E".G%T!Z]%J9D^Q<-H"CCJNGX!="@+_+LBR1@\*YN ++M!=-C.Y45<@D<N=1?#KXWH;?LY4/"J:!/#[ZIHZ6"7&L+^:P^B"?OKOAA-+!9 ++M/O.)G]<JR*,2%8[PY"^S"C*)>_YB#T!I]Q:).!5?7NAUG=_`0M"/0=>P^-3) ++M&G;6<IKF-`4"/HWK\;W!FL<72?A.\C%M['(VIE7LKM=<;2=*O.WJ67G.+7(\ ++MZ:4]-U<=]D&^:L,W&1?MV?<M5XW4:]__&D.1M"&MBE75Y,L[TJ-?E^]Z_PN, ++M)]_^FDLCAQ#UK)P+@"\M3O%#SCF@!Y4Z.DY9!CTMU<H6[WQ8H8VCQ#@VQHFQ ++M8HPQ('X!.?]15:)E-!Y\E"4:D[)JL,7;$?_C*$Y8`+#BS."AWE[6."YM&/B, ++M9.[#.M]2S43B,$!#K\+-\3!V2AGY*)M4"`_^`TP\I2ABZ!?:6>@R0[PLPCP7 ++MD^DP\<V/3]_\%VY[I4!E;F1S=')E86T*96YD;V)J"C,S(#`@;V)J(#P\"B]4 ++M>7!E("]086=E"B]#;VYT96YT<R`S-"`P(%(*+U)E<V]U<F-E<R`S,B`P(%(* ++M+TUE9&EA0F]X(%LP(#`@-C$R(#<Y,ET*+U!A<F5N="`Q.2`P(%(*/CX@96YD ++M;V)J"C,R(#`@;V)J(#P\"B]&;VYT(#P\("]&."`Q."`P(%(@+T8S,"`S-R`P ++M(%(@+T8R-B`Q-2`P(%(@+T8R."`R."`P(%(@/CX*+U!R;V-3970@6R`O4$1& ++M("]497AT(%T*/CX@96YD;V)J"C0P(#`@;V)J(#P\"B],96YG=&@@,S<X-B`@ ++M("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KE6NN/W+81 ++M_WY_Q7V++K5DB0\]G#:`'=1H$J!&D0/R(0D,WJYV5[%66DM:GZ]!_O?.@Z2D ++ME>[JI"B"HC;LI<@A-1S._.9!)=<Q_$VN=1[%6ERG.HN$U->;X]6KVZOGK_/K ++M(BI2>7V[([K;[0]!NPOO;D*1!>VYN4F"[4TH4Q68[18>NK*_"9.@QQ^9ZL`T ++M-"QAH'Y@PK;AW^$`]"53,_&'&YT&IC[[?B:L%A.J[N:GVV^`G3!)HD)K8FO3 ++M'G'L!$3GP0P5_+;-,Y@:Z^"^HLGM>0#&BSS8(*7!%Q&[2-OL>>@.>W^,$XD# ++M9<>=[8W(@3WXC][?X4Z1KNFCFU!)&7S3-B/72]Y(##K)@F^)I`;:^N&S'OOR ++MP)R0YZXUFQL0ZH$[^_.=XVZ`1C6<AXE8=%)0]Z'D=HO,#*$]F9R?X9TKG,R. ++M"8B%9.E0R_!/?Z)5RHT3CJEQJ>>O93RJ0Z&B-!96)RH>GVB+C.(DL:-U7>YA ++M"5I[?LA"J.#^4#;E5+C0*V#'3%_U3`7'&])^PB*+TD3.=G6B_9=;.&X5)Z@I ++MH@C.J#\Y'+8Y]Q4>K\PSEBA2.V%C)\M_WYFCG3*T/-#8W[IM]J@+V&;=)U;# ++MF8!38N5@IKHBE01N;(/>;8XEZDRF@ENKSU*IX`B2![G\C$K:P=9A]@-/:J%K ++MYQ8:)YQ0!SW+"J6(:F)WM3SW>\=0G@;EY`S,0#M!*\U5L#.DFOB@V2IP&DM# ++M\_NKGA_8A$CLV-JWR-##32X#V)X&F_FZ<6MN!C1#Z!J9T$%GFA4V*WXA[HV/ ++M?SA4-U91E3TG-(R:7GJ<ZZ_P$D)B/H+N@4?`HE4W6A3-<\>.8CA:7;0<TJN[ ++MJD1C>;'"IW]1400O3VBY.1DC/O=E-]=FV'D2`;V,A+)X<3N9OVG)VK8ED^Y, ++M5??<1,'C;P=`2XU[#X'-TPA8U24>J73"P997'ZF"&8#W(4ZS>R`->N<0$>?1 ++M^S[ZDVX\:A+F1<0(F_V4F5M4!=H9G)-YY^2:(PIWW-B2.FV<13(DX:HP&@>T ++M%](JFB=@>\VF*YF)9RB/9#PN&,;=S6P/.\N/#C0F#+*A;OA\3HP<<"PJ\2)2 ++M2@2=$W5M[<6J)A'6%>%]SZ3M#G]CM@E[FN-"IN<YM#]R0[C0?<.]5<-S7U?[ ++M<.5,SY8-G2A4HK#(1^7!OAVZNX;P#!6;O1Z#L<@F8%U$8),6CLT)":[^>GN5 ++M6.>?)'&4YBF\6<E(I0+=__NK'WZ*K[=7\?4W5W$$YGM]#^TX2HKB^G@EHT3F ++M]JF^^N[J'WXM'"F@Y2*(*1LNA#B9NFXW/\8ZAG_)PG>H%/8OG6MI<*=LP6#V ++MBZW))!*>F-:--HL5PZ0042R3N2\$8K(#QK(!CU-KR9I7'EO$#JU%L`,MI(;A ++M\9ZMC-R`=Y'('JH1$C3D?HYH2=9;=#R`BH(+W3'`.Y-Z-&10$#)TI0L"SIVU ++M/04NW^!/'K"G;D>LQE<I&QZTMNEP&Q]\G'*/`1DN`6*X<6IK)>%HMDQ!B.L( ++MX+]W*_S2UC(]%1Z`/VALDF0"5!;?K[/4*NQF(#O'"0P-I4,N(LM(U#!85_W` ++M\]SZ=_[,$*?Z1SA)9;+"B91%\+5U`$AQZ12PSWI0*P#>;H]#$)+8A<FA8\>& ++MK+,K'3)@W].R2D=9R3PXEB/(/7#7QC3<,!M&D^/1`HKSM5H6'J>P[7'J/4J6 ++M`SL$M(6AB%@!!\I:2E_]LUR8B8BC0KBHC9$=7*&.\DS/1/PU;D"D+#B,4)[Q ++MX6#01OW5\83JA6V`;$3WKNGY&4]69-9^VFK46AQ$CT>_%-F*S"$ZXF]5&^OZ ++MEV?>@P]&N(7XC`T'PAQ\Z\F#,04Z..XQ'MI;,Q@F[H?N[%'T/(;("+FQ#-X` ++M0]U]U9?/UH(6W#5D&?MRP#W&O$?HJ`T>SMX%`MBU5`_J)HV(]1QZ8LR?.,.B ++M]B5<<3>*ZE&!I(D.=A0J'OG![1[;(Q3@,P0%4QQ`ZT*;$2"FV\DD/%DW[V@U ++MWY`U+YE8!%V%Q"#%1NL>^>9JFJHH+AR>-^7]I:^"F"12'/^#4]/)?^JK\G_C ++MJW95!QATP81(HRRS7NZ_^7+S`=1^::9IE&B7>E&*"V=(@;++:E#2$PL#Q*"0 ++M4MF0T@>#9.'@KR&C*F805:(5I7'L\@]L>MV!USG]BA/G:9""L\^2'Q;ZBNE9 ++MFI)Q(\AAZ$OLE@[+:1J@[$(GYFJUIA20%"8J![2249'\;^M$\?MT`EK217B< ++MI,5HV!R=<!K5<"\GI'E\D05P'R(1$]EL`0)U7Q.Q2$9:DQ61O$C#&;V5"W[1 ++MR+MC96%&"TT>5&-2/S`AQ>P]CY4-52WV!QXB!4,`BB$&PEQ2"^G<@@(W29BR ++MAGSW@-0K8:+((;!]`E44!,BIU9__1T@IHD2XV&#NFVTR>C+]P`FKJSQA&_W9 ++M>:(:26!+;M^6-40`C"\QQO/Y,KQ%0)I5SJ`'%.'C4#8V#RPH)<^XH%7;*9T/ ++M%FL"(9PT'&S#^FVB'[@+4F#DF!],LRQE7;CS3ZIE82SMZBBHIQE$"=]/TG,? ++MA"-C2L23(A./<5I=^O27T@\DK)W%X$.F<@XY0F9BBM&^"('E%*KXA4-UM!W] ++M0S_X(@G$OTT[<($HY+Q5N(*.&9;&@FF@SO/'S26';"H#XY<0&Z;I'V8O^1]F ++M+GD$F?B(M@N5@K`9#DJEOT.S9)KZN`_;!RK*#50-'\-7;%\4L"A:U4H$+WFB ++M32!.E2^8=5QH?[RB<^,J2S-UF]2\0%M"@/T+J\2>#D.&Q%>]9$+Y,HXP'YU/ ++M5#9VC;&&R<]49TQL_EWUDT+KHK8C(5RMUI(_R#P\.#QP_0JWUPY<]X*LRH/' ++M8.[J,K+*GUZ[10@.1!8I<,2XHL32G<`\%IS4=RBAFFKQ5EBA1$1LN<#Y-X`U ++M&QUC]YOS$%+\%+YJ*>WEBKR,HU1B0@6^!F(6?,G+[1:`"Z]-%I4+3YU',F>6 ++M7O9<BJ:#K7WM;.@N"KK:%1JH[#MZ]"QXB0(PTUR7BN-\>+9RRK-\Y=+6CIWJ ++MF%'.JTE12T*BRF*[<RT7<-#M!-UCR)4*ADN7$KEV)815KZ.Q^T(:'W3BP[EW ++MV^>AD6S3=FL%MHX1F.IZ:GX3H)2VY3FZ?CA1-E=QSNLJ,<K><2DE`]/Q-1,G ++M<0-B+8ZWME2T^GI.G7BM7$X#-K[3X>Z94R/WL.<!8B\7B!?TVY[]+=`TL.,U ++M=I<LN%"?;0*=6!8'7QT(?/9T98+UR_E%'54T[242]?7N8(BVM13\LZR4K=TD ++MB5A`[%K\EJLDKDS$&C8Q$Z?WR!B$2*X/MV>"J%A<7OM9(@@=IH_SFY684R8< ++M(!#"F`(?)A=6#??8*S>/@,NS;JC0<W07)S4'2N5'!L6S+=[2#8$.OL?0H7)@ ++M$J<VEA@YU9><ZF#;\J]'/&AOVF9-[W:.%W04M,,TG?F6K[BK'PQMRG1;&]ME ++MTYO8!W8H6[M`^9'J=9<>;)1XU]O1KERUQ7HLPAC.6Q&W-7,(^$WFC1V&?^97 ++M'AT3#0=CX1YQ(B,FI:)[P,O9'9B_C7^DN`:G#L$,:J3*HUA<:Y5$6<((_:&M ++MMIRH?&Y.;\<"-A:.-@./G-JVMC2G9S;C(0VQX\W=`T1YKN1-FX]A\PSJOU"? ++MBK(XF_5'EW_<A89*U(PPD_D+>!O6X<X-EU<%U4LW[]X>MIUE#)[?<?,O_&/" ++M+VM2R7[X8L96;E<MW*J;@W&K4$3VEF.CZ6*X>OCE`?.V8$+SQ<I^,Q6O+`RQ ++MYMO%1`GXH).GI3(1S0IYIC2\3"1Q_%ME0S=`"]FX55.WZ@7?LU5\/R&@'?L3 ++M_V`9=GWIS"V]LL5+VMS1<H*M`]3,59;^/#DHNL*&PX+`[41*22._K+ZA>+'6 ++MK>/U[@3Y22?Z\)AHD,<G=<4JH19N12PG=\VXRXE=CGL8EZ/C6Q6PEB_P'AZH ++M?UT=5NM;0SW"5SS__._MR98UPI!_]Z4U=.-WQXVVL90(39_90OC^;#K3#&5I ++MH\(L2BE)'M_&]120HIU]5^W'6LG^\/ESJ^_+F9E.U]GW6@4@QNIO:M,=>W<7 ++MMRZJ?'VQPBWF#F(\`5C>;-Z?JZY\>SP/Y4>DP(LFC)TVOFO]=>F%5ED=2!.' ++M%PL[136BW1`B@TD]OK9PBR#N@5VC=C;EQV$!8^O3Y<7T1Z9!L)Z+XE-P7$"F ++M+>>(_^LB`@(N9!+E+(C7U?YLPR\),19*1:4R^(J+K5OWL4F#X<3I-"91`]/O ++M*,0]7GY2(M=R`O?12CG)"5Q$R'6#BUAR9R@GZ>WW'OSM09%AE:>TG?Q)6)'9 ++M"E$2?&8'YI\NV8@A7+N/<Q$PSJ)J4;B:"8YW$A(R?<$<SI).*7UD@6(A=,). ++MCA^DK:I80BJM7'[P`*>7*?[@@:JJ60HGX#\JZ^@K#.CKV]K%=]SA*I\RFZ3T ++MF4OI)Z?6419@L[@L=<$-M/AWO``*EQ]A,,\RS2E!P+!N_J48Y0A6UD2%;<I$ ++M^;FROV,`MWW&+VTHOL0%&Y=JIZ[2WSSQ_1'>:'/8Y6ZU^1HZ#:KM6#RSWP!5 ++M.S=F4R%HTM<4B;]8YRP%^NW&QGQS59WP`S&9<D%[>(K->-P,/&!.X99HN<-= ++MXO&](I!3D;'G-N5:_EH8R=L[O/D/?K;[CO`F1`9OR)"9@A>G`/B1ZS0Z#9VQ ++MRL+OH]\(2FT/7'^:7(@>3W[K:S2]?=<TH8)'LNBEV8_?S:C%%X;89R^1*$GF ++M'GH]'NO[LRO63_`.OT<1PI7K.:EEWG5"*HOKZ@*D^G.)71MWG#/4+(!!7\1$ ++MS_#F#="]<LFCB`1%T).:Q?R0Z-(#'9I4,7^%.KEZERH98<F<Z$LHPN%;5[`: ++MOVV%Z6_>O.*&>\>L&`;]IG/KQL&VFE74G5$4JRKKKW<1Q2CSZX[&XMC%AGHF ++MJB:@=J"//=C?9E%"5R"0@^2"UL8OCC0&"PW;C14@M+.%L(@`LDV^$:Y<40,H ++MR?>S)/'1*PLN\@E5(O*G(LKDDQ^R*L@J)\JJ*`7=<@,9N/.GJ5+[?0$V+BPU ++M35?VY3)C,SSQ)2`*=FHLTE9<K,R'UOG[C`K4H2C`G[-#UZZT_2^,^2S)96YD ++M<W1R96%M"F5N9&]B:@HS.2`P(&]B:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N ++M=',@-#`@,"!2"B]297-O=7)C97,@,S@@,"!2"B]-961I84)O>"!;,"`P(#8Q ++M,B`W.3)="B]087)E;G0@,3D@,"!2"CX^(&5N9&]B:@HS."`P(&]B:B`\/`HO ++M1F]N="`\/"`O1C@@,3@@,"!2("]&,S`@,S<@,"!2("]&,C<@,C4@,"!2("]& ++M,C8@,34@,"!2("]&,S(@-#,@,"!2("]&,C@@,C@@,"!2(#X^"B]0<F]C4V5T ++M(%L@+U!$1B`O5&5X="!="CX^(&5N9&]B:@HT-B`P(&]B:B`\/`HO3&5N9W1H ++M(#,Y.#0@("`@("`*+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R96%M"GC: ++MC5I+D^.V$;[OKYB;)6?%)0$^X\K!FXJKUDYY4\ZD?+!]X$B4Q*PH3DC*ZW'^ ++M?/KK;H"DR'%EI[8(`0VPT>C'UPU&#R']10^%#:+8/J1)%AB;/.R;-^\?W[S[ ++M)G\H@B*U#X]'IGL\_+0QP7:7A.&FO&YWIH@V'[?T_SW:9M,^T5BR^3=U5=M= ++MM-D/0E/W,GYMM:.Z;DV^&:JN.BB%=+3R:SC+"M,UJSU6U/E#N=O^\OCM0V2" ++MS#[LHB@HDH39>[JXE[_=[FP8;9YN6YT6;[K2K1QM.NFZXR1F3@KE),8NZ3WO ++MOC$32436!D6FXFAOPZX]TJ*[IVT2T<_K@39K#1@7'G=*/^7RWQ6((1X;F\VY ++M[,^[H7RZ5/*RR;O2.$BC5-_U<YB$'R%O$K>-LG&>VQ,11'0\L<TW/VYSBT[0 ++M[7%6W,!>SR1)DVT^"7/Z@BES]9&H+>U='L\DB7S3UO02E96*SPUF-"@C1(+- ++MVX3EAR>_F>@\V]2W.%$0_`?'5`MGV,^+T#YAW1=F-9PQN6^O_>TR,%<GT%K2 ++MFMHQ$'O94,^%&0YDOR+9G;&!C2->Z>^5LG`;9U^IV8*7S[+TH>I9GSN\X8D% ++M4@EE2QVW3AD0R9XQN^8-*5$O,GO&+^/VQ%-XV:%Z_K-P1^J<9C/N(C6WKZ%C ++M7O2Q#3?5KUMA`STLL-A&F_)`[4-7];W\9AFWS3-;03G4+9@CTXCI!)PQQ,04 ++MEKAA;">'0CMHT*H6=I8R7_V+LMZ`OSO5ZJ4/BI2$J7\/^LH#&.Q$GHYNZYMD ++M3C*G/4K'DR@8V+]B9K"B"Q^(-HXC$6:+S:4YM#<FV^I5\+2(Z!M>5E[4JK/1 ++MTK(P,'FNEM:4ETN[7UBC38(LMTH#IX8WB,/@PV@_^2,Y"$NP`Q#MNZK$Z:$M ++M/H5V$*9!F$6SK7R$*[58ZLY(HLU7T)B0A%D)Q:NDW%GW\F27BT97[=ON`"^' ++M7V6_(L=2'%=7G6XPP;)SCLRM/TA'#:,VD6/%K'%@F&?XM$`D\:A*8(V5XX3? ++MW*UPX4X<R@A?:C+CM-KYN=YU,PW:R@P:774D;PXR\>32RRRF$IJ$RR]Z&;G3 ++MR!6Q8#7K]`O;:CMWQC8.)[$+1$[9X=A=;$2[%<_A>)#P"-FDV>81OR;S5K;+ ++M2QQGW(DA^O>QEWTO;F7%Q5I1"7L7\GC`ASP,3Q=$L^P==^(:2FP$QRI*+)[! ++MQ$&<%3.`\"/1G>E=NS@3:\PR'TODA=Z;T0A;$Q$>*CF_Z[XZD"4G44P^6(P* ++MP^WU\B(3KA6QOXX!V.A(`\4;>VECF4\R`L_$ST&>:V$L)D5U*R&,Q68=X,1J ++M$7AZCVKLS&Q6CLV')IL4I%!X9G(&22YADY[L]N91>^)@,&/I)R#^J&"G"`)R ++M`$!":<R;Q:(N2M)[U17-];V^>$!Q(D])JI=MO"X>1_RD#=C@7D(%DY;7@S1& ++M2\A)P#2C/75E(V.LBS$@S&6HE+Z<AK@5,[R*MI98Z[EK><FZU#FLV(ZOKM6( ++MW*C]E"<E<38@DR=J.,:6J4KG_&:K&@V1FM1`F4UJ5X!1)P,,=^EYZ]U)819T ++M9#+;!69VM'7?7J6[[92JJUE^$H2'>O^*KK<:V]S6.<0C!&;B@<\<=!(/P-!> ++MM6JGCB"0T!8KC]>MNCYHHQP7!DE7EX<D.]8(Q4`23Q>35/%,(8<)Z?E((*AJ ++M#/1*^.N6/&9YN3EM"R2&?M"E>X1[T/FP2.YC+:K<A00;Y:O&C'X75=`&RT,O ++M;6(E`70@051*V6G#&\.`5LU-@6<'0=Y']+>-4(/7)8?BO!-2GZ&O+D?6.4MA ++MDUU$S`HJVES[M[$/,*(#]"Y*;\!O>]5U>GFZT2-'KD9G+AEHKPY'CP&@W`\W ++M]@'61VW6"<UXED=&<]R15:_94WP?(4QA-9^T:_F>6E0Q$<(.`(TUG\D(6QTT ++MWZO9I"[UOAX0*GCV49_C:J\8$R10I*I,14;`O52WR_WBVJA1_39[";I8V?$< ++M9*I3=FK*LIFW1[3/5?G\=N40?+"SZ;A;[X\90B*M(A=-C3&OBI=Y52^]'$Y9 ++M*Y$G80X'-3N%_XE/5N=!"K$+9T7Y@8<HK%7P?EX+1='%!>J@5R%J(Q/CL3'B ++MI59%F9H9*:]Q:UY'A5/$@`P!3[8;Q@9CP%4P<>Q@<FB=.I_1U3#ODW1S^U#] ++M'$8Q)VU#1<=)B?-:ED$9=2P9M:9MJFDX_T@3#<VTC6H04=[Y6LGRF>3(02IB ++M<*$)(?T0+Q"9Q8DD_D1H/#>;S^<6SA9-14R"7:@G6L%_N9Y<;J:B=+)`]ZAM ++ME5I3(<>TY.)0@49,4G!W,:JB*9)7"D$Q2P+/SQ[&0)'9_/N[Y6`@,N0<MR"S ++M;G)`*]G\]ZV@`7C9DH$O@`A[?W1*_`>.U(Z^'FXN;`KUYPD8]S"'YTB>G^E1 ++MS\!E4XT,F9D-\5;;VP51DW*F(P!+?2&KRD(":0*I>&3$CD@`YNB?,6;O4"T< ++M7J_(D].1*4CUM;3JY*V%.M</DA"*ID^"8B0A8F\QG!N&'9(]W4>8M_@]VCF2 ++ML0F&GF![DX5C0)#%1HG\@9F;V!=D(HZB)K:BKEIW*+4/;L#$:G'H*$7G;Y+G ++M<]<D(NUBRB@^7I7M6%6QQ&&^Z$*M3#K=RFZ-Q?)43OB`1DS@D6H%UWD$\XK3 ++M:[3<@?Y:GY)P.<%Y;2._T,B`(%Z<74E>1M_B9K?@>UH"6G(Z:E0B[EH!.'Y+ ++M9A-O[J*H=+)S1D.$TUWE%WM<'E:'A1\<_?ORJ%.]=J[@BS6HV@=:BDD?HIBL ++M.$6=Q=@\2,/D(;%94.1&0`--BXCQ?W%*5-Y.YRUD2,+(DLW[&[EP"_QMLW3S ++M\5<,X1>]Z';M%W4<XLN8((IEY:\Y:$43A+7OZHF3/$BNQ%6/--S\DURP.`OZ ++M80++V56Z^:ZZ<"A(0XUM-.5;<C.Z.$4&+BH.J^YT\(XZCE/!F!=I<_F:-^>, ++MF?`Y!S(Y^\X7[GJ%QQGY\D>!_>EZ23*F9.L@?@-+]-+S*GM'QOT,ILBR3VQ8 ++M':P/N@%C@"_"T"S_8H:,#27O8=0MZ`=]+AW$4HUTL;*6NI)6`=8P"2H#0/H" ++M!LOKZ>*PC=5$_BXGZ]UE@+DO5_.8U33?3E+V,6PY`L<<?IS+B>G](5+AZD=( ++MPJX<7LU)$2BZTC&E:;;Y,,CXYZVK<7*80#FU')PKP4]OR6%^E^5B%+$3(Y=6 ++MPOF*ST)Y-;+B)-%PLG/U<_3="P>]!`M&+0$1UQ,3!VR>U:2ONGR[6`GGON*9 ++M6M5TT>?+6&S`S_L:,2BYPA(GL@-TK)9BH/&SFC]90^3O0OB-G39>57<^73Z1 ++MLG/74*&$F8*OO6A/+_)C$-F@M'=Q:F:*G*7[<BT;#I^8C$"8%QHRRD&N.D;Z ++M4?>)>"^94$@'299]'X/2U1@4<P#4E(.3<_'0D4O^T"NQ$J3D-9R%QA)6N?NO ++M\G,,%=ZE4'C_!O"7-8Y(JM_6P&G9/%\JU!ZB2090Y,XH8?1C89ERH!\X`G!Z ++M2;_^(3<I))KCB^9+$IO:RT]1^(MVC?EU[XF6G#3UM7;%$S1^UZJ$20GQW:2@ ++MAE_9S)IZ(7AR)TQM(>6*P(F=#.9XU$,$4I]IVNY%QN[RTMVJ\F/_H:I#*VU% ++MJ]0Z=I54#4)"E;Q\J_<[Z.+P3T]57VY[J+@;*TY8J6X:7]NJ2\EMXM7<YOOV ++MZE/,\Y@']%ZI@1"AGV1Q$X=@"%;)G6XRR5:'&>IGY'61J0N8A,[G.49BB.;O ++M+U>"92O5""\`5Z:>XB%_?:FI6LL%)(?Q[49*(9-RAZ\+LNZ/-ZJ-5A;K8981 ++MB`PU^R#F(BM0XE$R#3CE6IWR"[,TR`^`?Q+8]!(:M)]J*:'P#S;2$)'?81KN ++MO8=[#&W4AL/1A4S3HB@DJ163.PP2Z6V$3RY=U`L=>CJ\DKO\G/H8UWRAQ0Q2 ++MG_X^\4&!H$"AJG2K]6-A8^2`BS!Y/AH/^<.YHW=6S2/=2'57A1S$!0]**;XU ++MGZ1%Z#VR13=*,K_US\5!ET.YPJ8XS@E2A4+F2;SYP#<9`EW*CC(C#M=EATN* ++M,)Z8#<ZR$UJ'OB#S$7W1P+&L+[W2M/(<(_Z2J24(C**%1DR!8!SIG00*$[CV ++MW4M[<<\Q75!\YE"7E_IW=U/L(D":%8@`7)]>\E?]YER_7B<MZHA[=74&8$@O ++MQ?EUSQ-1ZSW5!$!=?-7FK8!XLK.<E%NSA""Q^'2A"-)(&'GW)9T&)0FG2_N$ ++MN(+VH=K3,6F"CXXOWZULP4D)!/LS(A1:3[?C,?PI^^4K-\.0(XJDBGEL6WR0 ++M@6\N_BOUQ#B(C/D_5OWR*,^_3%[RIRC\2LNERV6"^W^+C&;GA&'"@`*TN\Z- ++M<WQ"07KA74F>3!6GZVZ2]TN_CUO[FX,'U`^[QM.#T#R5<D$]R&6Z4Q<:T20Q ++MCU\I<GME+%P]G0.Z^X9E<2N?9D$>NV]MCHMM)X&QD8Z2EA:VD'MF=KY%L;Y5 ++M>O5IDOH0V2O7;`<AKO6^/K-!F.4S'/;M&#>UW.HN#]#^SD=2_J+E"R7I_6WD ++MN6JTU/LT^4*A'.L>RT+MTDA7+O`8(Z0KA05_H<0`0XX6E)('?)+.H6[\!U11 ++M,;D.22AVR;-;_U2$U^((>I,O<[2K7KM6%R<DWTT0[?QF,].[T.S^HR7N\N$; ++M%\><HV44`-JN&Y''5<$+HA-*`C?QRIC1$QH8+TKD[GD]1;%%,JDY5=T@7:4\ ++M#B]7SE^ASWQK4/F24*&B+2`J43NT1;),*^DWWR5<^YNK,A;I+)#?)9;W48`O ++M918:KDBF[";>=QKOK=4OO+AFIM\A\9*_U3[&S@&.(8\D3N\#_'PSK\A*\AV% ++M$R1%/Y:X*RQF9PZ;^'5VZ$303.)$C6-^\27J*/0^93<B+U^DZ.1`=9.I&2^G ++M]:(!C@G/TWZOEQ2M=$P^$6IU;BVW`;`RESVXRJ?><+C5G$-#6\J,7;U6MIA\ ++MI<??G>AE$AJGZHK"JJND3O(+:B/%!I31VVZNNM,<.2_(MBNE9^UC!R<[+,3V ++MN%MUR=W-7>%KU`?DB6)RI>Q'$S$9?Y`Q[5(*@VYTA/5XM:]:R]<"G/+Q5QM) ++M-F*.?O"?2=%RJVZL+QLY&;TU"NU]W4A`:8C+D-HE=?CI4Y&&SFOPLE4MTXOQ ++M6N<ZR%\U:Z5(8LG:($\%WR=:A/SA=MVIXQ,C@XMA?;:1%A[/J%#_<>&1JW2I ++M"9WR29I,LPG...?=3;QV.?W4`C100CP'MQ#3UB<^=^`?#"JHQ_#])8"HIE0N ++MH\T7O7[6M?H9HU'3-M&8TEBC3,T1M@4G3[@[O>A,*;"%ZJR-?J;8/NL7LED0 ++M9X1X3!'D><8\I1AX\[?'-_\#`M,>%F5N9'-T<F5A;0IE;F1O8FH*-#4@,"!O ++M8FH@/#P*+U1Y<&4@+U!A9V4*+T-O;G1E;G1S(#0V(#`@4@HO4F5S;W5R8V5S ++M(#0T(#`@4@HO365D:6%";W@@6S`@,"`V,3(@-SDR70HO4&%R96YT(#$Y(#`@ ++M4@H^/B!E;F1O8FH*-#0@,"!O8FH@/#P*+T9O;G0@/#P@+T8X(#$X(#`@4B`O ++M1C(X(#(X(#`@4B`O1C(W(#(U(#`@4B`O1C(V(#$U(#`@4B`O1C,R(#0S(#`@ ++M4B`^/@HO4')O8U-E="!;("]01$8@+U1E>'0@70H^/B!E;F1O8FH*-#D@,"!O ++M8FH@/#P*+TQE;F=T:"`T,#<X("`@("`@"B]&:6QT97(@+T9L871E1&5C;V1E ++M"CX^"G-T<F5A;0IXVNU=67/<QA%^YZ_@6\`J+0S,X,Q;0LN5R%8YL5GQ@^T' ++M$`LN$6$7*QPBJ5^?OF:`Y8)'A:2\E%&J6@SF0D]/]]<'P)%_[,$__SA,7"]4 ++MQU$8NTJ'Q_GZZ.]G1]]\EQRG;AKIX[,+ZG>V_-7IRGISXCONR2)-M7-VLO"= ++M2[@OVY-%Z,=.FY^HF&H*;%H77%WBF!QK>B@TTCG#2^0T4-5O%EUI>M<G*G$^ ++MX4_1V*FR)?>&Q_]^]@ZH6?B^FX8A455P;^S7W)PL`I\?#;^UN<]R>G[1XF^+ ++M=<HI8?*-?5A=?:**E0QHF@RK;Z1SAFM8<MOV9($#[/BN:%IW@J[_E+BXKL^J ++M"JY(B0<38;GB,A:S9D6TOL&Y$^(0$5E<]$/'MK[H\$E7^),U!=<.?5NN0,*` ++M@:6EBJN+Z\4$=5VQ:4OF7(6TX<QFD3C\!/<6"GW+%6W_F^=KYC(_.%"I<X$[ ++M6J]E/%YBIJE<X60EC`GRC`GB5N9>T>#(NIFB;)UM<GB.UH&S+%8-[#VPR8H> ++M]F?!7/C*#3U%8WXDT0(A`9KH^34RMZ=15(GKJ:&H/:>S,@LW6UK`.?*:98:[ ++M7Z$D9RW?K&G"#C?\TTD8`C%&+I?<X?P$?FZ(M(6A;5A/4Y#PU<R1SR7*F(Y3 ++MI@,7FGC.199WIC:3$A(U9CI5CM4#VL*:Y8+:LJ[+2`4_\`;AQ"@M^RQF2;&; ++M*7O2-5E7X/XG&I>4D,Q"^?8SB94P_HHT>\6=</.30/@)N[:6>7!C<!$DJ`U7 ++M]JV,W*>L;PO:1A$C'+W%.:NR6'(]#=UB0S?JV.$ZB+58Q2*3`5#YGHJ<,RO) ++M,@%=,QE.;-A89=HA*B*B6!=1&<,$.$/JCU6;I6A"F#J,?87E/]&"_4OI,.*B ++MX?N'TDQZ58(T4*DI5EECYHT\([@X`U,ZI3)YWY3$$'CX#4)ERH!;6^@M&EEA ++MJ$`H5EFY:3N^,6(8*G\D<@TW3A`]ECH>WUB81F+?3-`'^TTJG0:P"P,@XKW5 ++M`BBOF@(DT$@[F!B6)L&UAK49Z^L+ONX:G!RI^M#R7.ML.27YA)X:F(GLJ#LN ++M%RUO/>-4"1@-U5"JN9FP4(;Q'@"_<8L[41)L())"`D&\;+$#Z8'+;!)K"4`! ++M<KA/UT6-N@&`Q)0,&\I:J$7D&^'%@/O:GY1(K9@=1B*MJFJ2"GI4WQI>VP>3 ++MOBTF5&"+6U8:T%,I&*6N,183;Y>@;US*-M*CLSL#EI#'].=6SS[VA;$+V$0@ ++M2Q:HQ%WOJXP`M]Y,<:MP2;D"D7(DNB1N`#I?$>,N4<N#4$.IX*X[R`3WK)<! ++M"0(162R+)6Q6XEG`,-H=L#V8DJ=ED9=+A":M%`N,TDXK@)J#*)6?"ZZ<V"6L ++MGL2-\61Y3;I#S@;((F+T!!WUQC@9I+78&QR*=!<<6V[^S0L]P@5\<H9M&?&Q ++M(WR&0>#]8"6CB=AZC_<5FW?]#,.^9NA9RL-/ITR/50PB#6CQ"306H>?+(R(V ++MO73%2^)8A&G[JN.6%CR,DN'(>ACDR$!;4RQ["WQ<A6(PP;5]>+LL,MK-A#7: ++MV)=B<&"-*F$?]C4NC*JRVR#4:O1%;EH&M'7[AFNN2!](1&LQ8C@1"_)Z4O6( ++M8VLSKC4%$A0M$HZ%CX"L8]3`.EH$7+=-;7<J%R#%9@9[T>LI_\HG&GXY`=M. ++MODK"R`JE6!PCDH8EN7J&Z8/N4C\2Y2062J&PS9K6LA'N<6Q5M#P_D9Q$SBIG ++M4+_#K6KQP4$L#I,*(F?)J"SS<EO!!5`BP"LK%,P`'(,/PZOMF9U#1_+&\*Z] ++M8<G*8.3UQ-YT35'@QL8QZ3=H14].-"XE2F]!L-FSB)T"O#+G!4I%"9?<1+8; ++M)1IOB(-1,AB\#&D4H9VR<GL*'/N#?Q][^[$"(A^@I]EH[%\*XM2$7"@>?6XL ++M0`"KRW@J$=TM+J%B1WV?(O0:,@3M@(,&,G=0'J#RXL8&8%"?L\`C:)?6%'`3 ++MH4N0(,8;@/8@UK-$$HFPG#CU'[*ZY&KKT&GZ#1=01\JUX`963*&VCO8=CS%X ++MP[`<?!SI2EN'4[.:1G<(!?2HRBG?[IRV$B-9%04&`504BAYBI05_O"%/0D7Z ++MEE\LP.$B0OMVFWD>D8*,0UJ:Q=AN[-!E$A_=X;:@I*-/!VH`M@<X!G+TWP%L ++MD`^Q/V#XB@!R6=EHG(9=\%6PR\8D7-L*T%`/$O]N=%/P`VXIX+ZR3GF+%H6T ++M;T*<MF3@TKZ@Y^@Q&B,1Y$9#B[CAJ@M*8@S@8K$/VM`VT1R7&0G0)!OSC#=+ ++M?->\;B1H['AC(6:"C8L@E/EGQYYO*5VSRO(F9>D0O1&7^834GMTL<K>E9STX ++M8HTQ@-8=!^[NTWAU6:#BQ:&)KOB&W"BX,@J0OE(,&8>R(<3L(7U1B*=-/2H. ++M;HS]0Y3MF/LT-?4*>$4%97-`:J?B"R-TPC3CB822+($"A1T"J($2QS%K.VY= ++M<DB;L'7><!=D%7>=P%QJV4^X3$`,NC0Z@%DIVH#"IY)BH4!;@<-`%9'T[)*V ++M-5"PH!;W)8PD\T$#36-YSQ9C\Q3^9A1%BU25G%$AUQWC'*-1>+/G[1AO0DDL ++MBU=:"Q8,]G,:J.3!2VX['PTT.9<)"\I`>$F>_\=^P&_H^LUW*CKV`U<'$:<A ++M(;1RDX!7%$$W'_;N[35P0G-R@9>V!O'21@QHFIU<YD(I-]')CE^C@I"W&&DQ ++M^J`"T*@U13XVH6G<<!L)!7K`2IC$+`>1M/R(N(`PARW6-+6Y\37+D8;(7)D8 ++MG)%CNK^9Y88M2398&$IABGT!+"8G`LJG/[W]UAV*7"(YTC%%^YG=,FRI9>(! ++M[V+G76TCI#OE._`"Y_NBJA"X_T)IQY!'7*-&[R98K"F'/M83@/'&W:,&[7IN ++MP/7<-W!^8#5#";G&;"F$1E<D5<+P"391JED/EN=B'*LT-H/G*YL>A-Z9C'KW ++M/3=1NDBZ7)HIVY$CS0GQ1%EAHEFJ5N8KUU-6?2Q5`A_&L](!ZC-=BVM*T]9R ++MB^8(2>&MQ)I26G8X037W6,/P06L8I)'Q-+#8%.BAY@.)8DB"--P/,*$._)$; ++M+N6<ZQD&AD/>@-FB=.)&7G0<ZM@%)A)I(K6!-S@JF,AFS*:]8QL#[77?<8'% ++M31*;36FX*CEPHA9SX8RI54^()_-.QX:%S5I:HU(.H>*@$[1F#K2"5!F^4SHO ++M52/=%&YJD^N#QH9=("%:'F.'X97Q=1#7O)L2IAUB*)A&4\YQ8U>,(AZ=^!SR ++ML>$GM0?!I7P@$H@6A)*_HS0@=K@=)P]98#"9+0]"('@PTPS^XCK;C&)S[27C ++M/MB453:`A4:2E;QOFD&,V(L%F/H'1:[82_(S5)9`M*'5P/V2N9R3V)V+6SEA ++MB`R*0PB:H4';5N5$/*LXCD4W&6+4NF^XJAB+WF`F,)6(S;#3?=7)\%H&3\O= ++M+8G9,872BZU8[&IC":&33^8P</ZV%;HI&5M**DB#._6OQB3+*`EVAW'T$U<G ++MZ8YQ#$/)(Q65""'EXD.*`$/K!53V)8HD&+")(&MP%-8V5,'APQLLF4]2O<5F ++M2LI;8#9Y3A#N[621L((#D2`=HD(=^K?4'8AR607/+F6>RF94.A[.:5SS7FB* ++M#'KH&W1K`GZ;5Y,?I?4XM<,5G%0`,*;';,@3$!C'YMRD3VS<BJU<V]NWB]PW ++MD[&K7?1I#(ZA7NS+M&6P#7,BS_GYAQ]/3]$PH(#^JO3O7,TI">C%[[D&H*/T ++M-KD<T.N[<M4+&N&MHNQVZ/Q<[(Z(***;$&YK<%I2-=^H&INOL:HABU.?0H2R ++M-0AL7:6825*)MV.+28HB5[F*AGOLU"VYXX?-+3=_(MC>?^?VX$L0C#T_4<IZ ++M=UO.2Z*]H\RTCB6[J6,6+LJ$5V5.&9Z8/$]\"(HKC<O.)R-%P!F2N;*SX7R< ++M.._)CZ*H`A,-%'*"\^J[ZCV7!@'$'B3D<#WE2[XC@UAC7W_B3<$O/>F%ZF(R ++MB<+NHW:6N_E1T@!V-O5=]IG`[>CMV9$O7R,8?V"A/-C%P,?O$3X>_?J[=[P\ ++M\H[?'7FN3I/C*RA[KI^FQ^LCI5(W2N2V.OKYZ-]VLH7G*J#5`UK3.R>B<1Y, ++MQ"7IO3M1'+HQ!"'>DR:)7#^.C[4+%L9^9:']XP30-QI_9C'>+"UZ-&:1#H`Q ++M,01#9J87IZ@#![#M2W[SL$,*L#Y.GH.4Q(U5\`A2P"V_+3&PR2KYDNP@__LV ++M)Y0;@HE^!BH6(M`')+?Q8W;FE.75H,F^K&A85?`<'`I"-PF#)ZY*P0)"_<1) ++M`*QB[ZF3T(8'"<&53M.G(AY6LNP\ES;$]^Y[ML6O3E+GLECX+B`7C`AN[WV4 ++MNF&4\M['3Z(*_%,5!8\@*P[VD4*Y?O0<1#R6-3?D-+23J!D_!R&)&WB/8<8% ++MY?:K">@,@^?9%I\^(GR8DFW6[O$#0IDH])^#C!=3I?2+&)9S?N76DP]<M0N% ++M^N1K_`71O4^IGJ;J\(@H?`R!81KM:Q78A^B+NB./4*ODF=0J>:I:)<^E5LF3 ++MU"IY1K5*#D^MX@?4JJTW"U0E-XG#`[!-*IQMTVR;7I=MRO/F9MNQ%@4O9XKP ++MY5S\&,3;=^_\V`UAG[\F0_180B8E5[EQ',U6Z&`4J&X*Z]F%Z--Y+^C1#:;H ++M?JIB[SY3-/MS?P)_[M5E'(H-O]&C;+.Q21'%2H?@W*G9N9N=N]=EFU;9B?DV ++M_<."\@V4RE,'8*!T-!NH.>'PNA(.*T[C;5><$5>N.H2$N#_;I=DNO3*[U!1; ++MSH*'+YK_?JPQ4OYLC&9C],ITZ'-)?]4KIN@0<G?1G+O[4^?N7EW&X9)/^%B, ++M_B[-=QK\B):_UI,WM>Y!O%Q*9C]O]O->EXU:TW?J'^PWMC<+/*'`C1_,Z7TA ++M@Z4/P&!MZME6S?[>PT!3CTS4IFTOD2.H3&I["-GQ0/_QUNE^39H-TVR8[E*F ++MBNU2BG8I/C^`#_+\2,\?Y,TIB5>F5=O5-MCR7[GPD788.\7P&\V^WHO[>K,N ++M?56I"310*?U9;W6SKIOM)6J3!WO\@LY>Z,:/<G(\M),3?X<1N+'Z6AR^1^_3 ++M`Z'3[.W]\7:IRQJV1;X^@)=-?O(G>-DT9QZ^GLS#+_19WONM9A-$H9+_@G9H ++MY-+%3W#I9ALTVZ##L4%7_>*BXZS#DE\K10?QZ<,A6*,Y!3X;HL?LT6<Z>>7\ ++MY7VY1R<5DOF+A_F+A_];A7S-1YR`S"1Q?-]_T3,^GTEK1_T5STH.G9\*>[P_ ++M'4.FY1@JK94]PY-/7C*G%HW.$+_OZ)Y;YY(M#*4:_U,A.9Z,OR3GTSI/H?S3 ++M6YSPVP=.'Y/#4'</8.<SS39<WQ3R7_'0_[/3RJGMTEC+_PBCS=%RU\.APCO' ++M`^(@/I(/NYX"<4+;U$&72L?.I3GX2>D$&477'!DX'%//E3PMEMY!R_>[E;$Y ++M_'MT_%TNL]$9<#RK.04[DY/_%K$;8/($A"5)^!#3V`CQ_P"DU3IY96YD<W1R ++M96%M"F5N9&]B:@HT."`P(&]B:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N=',@ ++M-#D@,"!2"B]297-O=7)C97,@-#<@,"!2"B]-961I84)O>"!;,"`P(#8Q,B`W ++M.3)="B]087)E;G0@-3,@,"!2"CX^(&5N9&]B:@HT-R`P(&]B:B`\/`HO1F]N ++M="`\/"`O1C@@,3@@,"!2("]&,C8@,34@,"!2("]&,S$@-3(@,"!2(#X^"B]0 ++M<F]C4V5T(%L@+U!$1B`O5&5X="!="CX^(&5N9&]B:@HU-R`P(&]B:B`\/`HO ++M3&5N9W1H(#0P,S,@("`@("`*+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R ++M96%M"GC:[5M9C^/&$7Z?7S&/%+"B>1]YB]?>8-<QDM@3^,'Q`R5Q-/10XIC' ++M'/[UJ:^JNDE*U*P3.-X8,(RUFMW55UU=U_C7'OWG7V>QFT?9=1*G;A#&U]O# ++MU><W5Y^]RZYS-T_"ZYM;AKO9?>]4FY7O5'75KX+,>5EED?-FM0X#WWF@_K;I ++MRVU?-4?J\E.G^9?GA^5J30,TR(T=-71"<5SAFR'[NQ*-C`$'#*P!W6.O`UJE ++MKK@*4N<16Y?MG5FSV*U^N/E`YUO[OIO'L9P3BVPQ/.!@;;ES`?79.[K>Y%+K ++M('.]3*8D;N!B@D__\V//>4L3&]X==RMZM*I-5?-OOPH#NC\O.4/3VL]=/\YX ++MQ>^`'SICY'D.X2+"[3JYV#K,<Z=\7,6)4]1#T8\(XI%>;X>9V^;P4/0&\2O, ++M)BR\`#!SFEL"2E/G[3=??B%3GRJ:?(Z0MBSJ=5W=ZKIQH!3;M\6AHWNGM-C7 ++M3==CC.[]L%K3)GPD2XZN&5J#U5+@'K``L,-XZJ2S:,N%`^PJ>WO,J#8@3%_B ++MPEXJIZ86H4,Z.D.[JB^E!U?E$3Y534/:T9>R+*X1A3'0'CHZJ6_H(H2F>_DL ++MP(""]>-ZX9!]L<=$(AOO1NL(:U*')5'7GYR-!H'6IE5`I5THQ/>=YQ58:,U< ++M6QW*(_BWE_$GR\5'TU#VEG$A]P)[`]51"/P#_!%P._#X.DTCBP!`,+4:*PU` ++MV[!3)HAP6#`V`"W+4>\6'&:/ML46]WPL$6:&5W(*./8XS!&:\$$?"MR@VM2R ++M6)#%(#5]W.$C`K6##/<``L&+TMT<,>%%/BHA=3#!+7<?.^:DX:`(9+2.<H1U ++MMT+^W1)#EL]RNV&D+)">&))3P]![4$(GAD^I!90VTK0ZKFU:,&'B!2,3FG$C ++MZZQ+](SGAU(YSHA5CSMI?/A*?H$&:-9,KGE7=?)Q8$UZ%);)1O1BCEXE<[KB ++M8%HLOKU\$)<O"$%IE%24!1/2<"]=+\L#YQVN!XX'2(&?T"H4U0?H>F)E"1:X ++M:UC>I5LG7!*I\R,]*?=%0>ZT=%]JT$VJPX/R%?JM&I#/AJ$4!>A@_!'+8!=Y ++M5(1EH(*PG.452!'!*P7/#_-@G[-N%&9Z#@39U&A+>YT:QT%?=93?=SC&?M`E ++MPC!T\.I`BMXK!)-/5^J+35V^.5E>+[HD;OU$8R;\YI3U3C[X^I#\BL6UF'&] ++MEZ@F"+U8-Z*NJ53B&P_`5L>>H"(*G3OJ]D6EVF)8];UYY.CB3\(8\E$)HB*' ++M%=K347HM*_HG#P(8$3OAY0UHM\`-$WET;_CT4%#'RR\G#;."CPQ:J>-#<\1N ++M(9'"VB;4_559USJE?.Y+?3;69N/QFIT8/DD^Y7KID#U2CV1UM28U\",_%\:( ++M8A`^#D'8UX/:,]%#1Z6_N\$`"6X:'28<7C"%"A@N;+?HEM#XC?S>%<P7=2F7 ++M!]:85H6:<@0R&`(P%^T5@T._;F[7&S85&C;;=DL'X$=WIT+1E4:-)&DBZHY- ++MPLCW163]$0?<1[AKI=N^D[LW(M$/12?:;"<`15V;!<I7]!JI<\N*W2MF83(S ++M"P,U"__.1&%K4(W=2T9@RO._+;?-4>U>6$>C*LO8`(SIV'C%"E5$Z7A]0,"& ++M-GL]VC?86@M=)W!@G]B+]/W`*M7QDNJ"E<Z(8,[8`SQT'H=:7I%B8W5J-.=` ++M=!3[@F?9%X*F0KZ&B:W/G6*7B"VSI!0(/A91)_B<D-"#D0NV/.[QB.9$X!N# ++MB9P>T6>U26%#Z8.?\Q%H-B,5V@B0VZ)E"Y/Q28/VY:'VL*RHDE%2]D;;&@T= ++MJ,4IEV'%Q(8O8%4T"::NNHER(W4GAZW-'0'#_(E!%G;Z?;JKV#!C:XM[[A:] ++MF7LQ-F0EM@+B.)_@O856\68X!WYE4HI)@'_D!XE)K$Y<-7D#L(#1>X!F'<"\ ++M4%G+\65)NF53&#=5S2NS(B%-3A3#I*;J.ZNPK[Z\N?+5ZZ1UR,9U\RR$Q_G3 ++MU?<_>->[*^_ZPY7GDF]S_41MS_7S_/IPE2=N3EWR65]]>_4/N\S:<T=%?&DA ++MGN?10M)2Z/E"B>NGZ77HQB3YK[C`_ND]?,]-$[J+F?B_/L">4?YT3SOZ;G!Z ++MFC1TLRSZ-8ZS)J236P@$DV/Y_T:C]#44!:_0*/TM#K#_N7I8$W7<Z#7ZI+\> ++M?;)?BS[);X&>\%/3YX[M(/.B'$AUK0.2IOCW1JW?1.-%GUKC'9JCQ!]>Z.HT ++MYP^=MX"D^%/+U,,>$8#H@7V$DD.&ODOMU$W^4((+^$H^.<'$<ZM?#DT+TMT1 ++M!B+O#Q6X@*KT4ZO`[[JO0:*0Q<J#6-&:WN]"$?J!&X2THI^Z6?HJ0[ZK]IRN ++MT<A8]"=$QF+G<^OEH'?BY;"_.7HZZFA%QM,QW@U')#?&+3D)4YH8`#G];I#D ++M]!.Y:2@.X9<%Q[XUXCOZ?!)<M4XG1V=M:'$2C>;LQBQJ;.*["<=W+T22R!>6 ++MC>_AEWF>C1G83!HZZP+;'>6$XNMJU!,))`XB'C34DD<^AQ<Q(CDS<R_T;(O. ++MI'3R_$+LA(Y4'AXD1)%'9Y[FZ,E'4U\\=G:&!L@,&O\XRD,);Z,A\=E\&FO@ ++M_8,P<Q,OOH[#E%S$0*PV#I78=1*;.$(+8>'$HZU!8*(5T[DR<<[$HZNW+4+6 ++M`#[8Z`DA8X^0KQ\DF7.#J/I"[JHD"X3H6W`(*09I[S0G&),&?8M5OOF2>KZ0 ++MCDJA2AL5F41O,*"Q_%BB/8P[(*TU(9GS(W#X=!ID.1&%&1DPIDR4.O<2\N#8 ++MJH95YY&`4\'@A*`)KH8<7`U2(<`-A_TU'S>TFI#C:#:3KQ).0L3:#YP?AVG" ++MDR!90(ZX8L5!1,\F+B<IP!1AL3'0I<'I<A26<"&D)5FPW32-ZD>(^)TFZWR) ++M`1VWIVKD9&HA/RS'DC$@5&I0IY4QCN+0[T92C)RZWBFR:9OEN!<X4#--N20% ++MD,^1-$VNO%O/H_02A26P\U1,XGO.>\WE[,I>64W43C;/2RU'AM=AG$CVDJD9 ++M)Z>;@)1)P+&FJFN.Y--F::R=VZ8MAYX#RQ)3BUU/ATX3R!+[K9>B;IZ;N^F* ++M(V;,MT>3'AA,XAGGZR6#"OR2HJ9'\YQ%_4D&C33Y1/?83*95'1#V3,"4?(/) ++MCW0XN0=EP5'Z3J"`*X$V7,Y)5<&'#,TT^IQ)?9+U='&K./.,7@)$69AH(+Z, ++MFJ"FY%@MEW)(LZH[Q@^>/]>3M6P(C^;\-T1`,HJ8]^:N-(]"$&FVIVSY*[49 ++M*K2W+/RM380!VN9LY-%%UUS0))70Z)FP#&0IH*=>,;18PC!/AZ!4H#?:094Q ++M?U0VOW=6#Y`0R\I!"Y423##Y-FH?$-WF\6IB/9P?A<LNZ-@;F_AJ;)D$^SS, ++M%%%$VOBN$=!1&1]%3=>V(F;/SRH!\_-62]L<"VV.].X[9!#2T7)82//<,H<< ++M3%(DS&@>ZYI@@B3J3*5/BAQ\&^SFJ>A`&)H;FY&#;.HG$PO--_Y#.ZM>H=&R ++M6%1]=07-&61C[4]@M@J(<X7T);\,&)"JFWDI@LX!88.$7J.U[]B*@&#,BCP) ++M&+^9NIK-5P*PX]BVA/67I.&G82S+0)(!"<`@33FA^CRM93('86D@`-F1-4@F ++M*H,Z54V"M#IB[T^C%X14!JW<G6/S6.*6Q!S,>3:KQL([P8M4443IN0V)N:\R ++MI4$XF%<T%K>[86..6?XTJ.!?R@Z<8(P5^P8X?=$$[YT:'R;[;K(NT9DLMMT\ ++M[7MBF8A"BB;5"_@2#6I>^J9^-%R,P:=A?=O;XIR=$>```HPH$P.I?<$0@RU_ ++M8ER$*OJ'4I07K[V^]`;TI:9`>RM)9/[.:P7PI`>A\]Z8/CD75P#NH6A9Y6^' ++MNFAE1,MN.-Y2FV0M];/X-\Q5.S+%%JHI/G9O:$UKNY6=9#B#='38LLB-\TB] ++MMJ[LR=PF"[>OR>"-/?KGGR5%T]2-XU!GW(H))D>.0D,F;EI3ST\"UX_2,W:2 ++M].39D?S8C9/<;-`_[-SMV2'"R`T"!9'*L)@>L*YO#M7/YK6C+DY8H2$6,6-I ++M:QT&#/!=%5CU[D$HH!PZ/QOY-VZ:Y?-R@5^(->)!/?&NK"MC@9(G`J44>1_Q ++MA^&&>63-MOO'[SWJ_4&^;9'@6G>8:C\V?;VQ>E*8%J60Z&855]6]?"DBT*R. ++M4@5W,*Q(?5S?5MD$IZ\E#/0KQC/9*RV_H>1;M1=42%T>]_Q`O4&2,A@M]8Y3 ++MUCT_&+&?6&O)UQ(N-+9ULS$X,^E=]'.^?`HH>NRQ8FE?K`T\R3H3Z27KR=4M ++ML'3&^JA4'$D"BF8UJR>A"JPA8+&4D^FZ$WU\E$7`K/C5-W*QFLTD6VT"7]Z# ++M*(#KKWIK])#LPV9*>.&%J#43THD7E0L]=0=;4<=@,P(OURF&D3^:XF"18F#N ++MB;RQ;))`_FI5]?"L5<*D8'=6^9:ZU+'1R?PVLKUS+QU2K,)HA.FDZW8O75]J ++M>>KY`;O!,B?RWYW\_KEZU@YV1JCQ+2WYE_?2?F\>T>K9A0\?&R<V\29F>JM% ++M%EK(&";^8C!DH8;+5!Y`.L:P2^CESH+/.G/[O5Q/[&6(E=AYTR5/PE\LI<LE ++MPW96DE\(JF!$G9<P2=7NG`95XBAW_MG9NHJ$31_YI=.U7)ED(R/G)]B.]=<5 ++MF'`E-4)!&I\^<L0AJ1I<D11)S#0/>GL62<Q]120#LJ\-&',:&LR$Q\6GU.`H ++M]L)%[\X+7R^FA:?F!:A%M>IV%&#,YFI'@'23&Y-_)&Q%C@W">['_GU8K3BPO ++M.UZ/)<A<(#T!KD=WJ-/0TZW\;J=TD`5-H2J-S@*ZD1-?MMY4]02D.VVE#_-X ++M=5*N"1AR,8?]7H([F&%]&PQI`"!70N9<4HZ?:04N'-,+=MI.PT]U\S`IU@[& ++M6O):-*$63$)7,E,'XA^HI0R(D\HX!I%+V=`"NMBL;"]&_L9*I$CMS5LI9<S4 ++MJ6G'\?[4P@S#J0&[G0CHA<(W,M/2>>%;:`K?\"</93MQ,8LC5X,2X[U%I26K ++M1&$1D5.N<#>=$@$/4<Z\5#"7N7F:&UX`W>+PA!'XCT&FI=X$,QK!*_F[`W59 ++MXK&`"PN9ZGMCH/"Y,?#+_Z"$#88$\4J`:*PWRL>`"]HHU8XDKC?]6X=A:CJ, ++M9N(ZYT"+*7&CHVU0>L75H2=!XPL5T1QECQ-3`QK1Y,5:<SOP+*:6]$RCQ]/+ ++MTV"T\`<TTK_1`M*(5/];C7DO!,S5@8[(KQ?;Q9."V$[:AFH2WV0+T/Y-T3I* ++M<V?FAF+&E%("\N$K5QI_,W\LP+O=C3MG'PLBQ6$\+];ECEE17DQ2!;)BI-(I ++MV^F?!54FA"Z+F3@9OH;NXB-_*V]FK*]2F.A?"4R+'(7-^14-M:PY23\J%%AJ ++MS$PE"#_P:S3,3(YUZD:D>TDONEDFA:J922;^&V*[\6)E;F1S=')E86T*96YD ++M;V)J"C4V(#`@;V)J(#P\"B]4>7!E("]086=E"B]#;VYT96YT<R`U-R`P(%(* ++M+U)E<V]U<F-E<R`U-2`P(%(*+TUE9&EA0F]X(%LP(#`@-C$R(#<Y,ET*+U!A ++M<F5N="`U,R`P(%(*/CX@96YD;V)J"C4U(#`@;V)J(#P\"B]&;VYT(#P\("]& ++M."`Q."`P(%(@+T8S-2`V,"`P(%(@+T8R-R`R-2`P(%(@/CX*+U!R;V-3970@ ++M6R`O4$1&("]497AT(%T*/CX@96YD;V)J"C8S(#`@;V)J(#P\"B],96YG=&@@ ++M,S0S-B`@("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KM ++M&VMOX\;QNW^%@*(`55@,]\$EV2((&L<7Y)*TUSNG09$$!2U1$AM*5/BPS]<_ ++MWWGLDI1$V=>>G?B`)L")W)T=SLY[=\9B$L#_8A+&?A#*B0F-+U4RF6_./K\Z ++M^^2%DI/83XR97"T)\&KQ@W=3YHOI+)2A5V?-KBKG3=X4V8]!&,S+;=WPU'R= ++M5OSTA^5T)KQ-<^[[/@`)'OWW]*>KEQ/M1T$\F4GA)R(FY"86X1\9Y'?YDA_> ++MO+KZY]4_7EWRVZ>?]J.O+[][<_GGUU_^G;"IR#<AH!.!GX0)H?-/_T=+9B-K ++M3"P#($&$4>CAKG"_/>%U4\UW=SC^YVIU\T/PTSF/7[=+!/K3,27QAU#2,2/; ++M+H`?`/G)BWB2@$P4RF1F.:BE'VM:\R)?M5/A5=ET)G7LX7H=".^BA/?86\"4 ++MG:E1+%MXSW<[&(F\K.&))2XO-_QRB\AF"(K##4,N9M(WOD`(>,D(T[S*`>`Z ++M1XPKVE$`>P'!AB'1E6ZG,R4BKYP"&3?X3U;]&(B0WF_MW))_074`"3*7WZ_A ++MM05@E>&7<!*8KF3@H0@8)*_M4ON9M,C3^A#K"E;>.-J4\D,MB;9KI.$.&*T# ++M;T/?2.L6/Y-O5SQ*@V^9>;#7ML'-EEN>;')>5.,K+$)&\6.3_DP[M3/-FC$0 ++M%#**.-?@E]K9",\8[191-.[;"Y9+]M91DB+;"Q)JXC4E3U?MEA_<)VF2J6SJ ++M-F\R'_1"&._%--9>63'`CB2_JM)-/4+-;4[(RA;U))%[Z!QU*)<@\'(?/YDH ++M;U/B-ID).'\W"_S(AR%!D,)CA2J+NTU9X>?7`*`1(#@?(>'[^EL$4J20`8'Y ++M(@`480R21]:$$2H3\/.TVI[CBP(P)DJ&":D4:@[BJ?/-CM@)S]T6]V@Q1`OH ++M_9S4D?2>K"M;(%-#E"TQM\X(PBD+&:\*>^M-0C^,A76KGWUV9-W@"F)IIT%> ++M!IA^9>6I0:$KQ_6Z+1K6)NVLQX*01-E`,]8CH)'<C0B,#XYAC[U(MTH2\'I" ++MHP6VZ$5PP.#7M8*O(UX0\-BG4>Y;=##Y/&TL7+-.&T;A%!%'@?41*ITS`(:H ++MLF+,"-(FO[&B4J&V"M,Y@F59;5+4,>*TA>FL=<=BJ?)L.T?AX"2I,3PI[^(U ++MPET"W!<\14X$?E/^$>'O1^BI"^>R!+G3_@VY!]:4V]\FK8!M81)[WT]C1;3% ++M(6F*I;_('1>[#0(`,8JXYEZ(K-@068"7>+9)BX)?=Z2`=OO'Y*)'4$IYN]0Z ++M.7Q9HL7CP[S<[-*&/7?!CHN@@%X*2V>75V?"I@@R\74<0;0VH2]B@SG"+V<_ ++M_!1,%F?!Y.59X*LDGMS",]ADDDPV9\(DOHGL:W'VYNQO':X9#SI"3Z$BH`!0 ++M\9.%WD<513YX&GC\$"3@%J)H`A$!-NARGX$ANM3GY=<8^&O*!@ZXH^![,H2P ++MXG`\-2T7KR^_8"&>I$D#_Y/H,6B:H2QUA'+#5<]$],@I0YPR]W%JSG[Z#AU" ++M<\BC2/A"6!Z9#Z(&,F@E'J9&&C]11[85`W?%8U`A(W#KZCW(4'X0/!T9>PJ3 ++M?*C"R$=3E^AASJS>Y;N9\*6OGTY7!'!?R(=I011'0E*^3AZ#""5]""#O143\ ++M9$0\;T6YUP-#<LN9+6>UXCYUB1Y+7>ZE*/1-<(^DHL=2EWN),&..Y;&(>-Q` ++M]*OZE>%19^V.)W2(T7[P'%R->@ZNY@F)^(AC$IPE("0)]1S4Q)AGH":1^7]$ ++M.N;+B?N1WSPN"3@Y_N9QZ4F)^(CCTFT[6S;=9<G"12:)ZF/NSVI^E0.3`AD% ++MO_V!Z8G)^(B#T[LBOWXVT4F(YW!>$A]%=.IN]"*L'MVSHT%121GM&2Q*!=J[ ++M?,L7W#C7Y%@.44;Q=?>&[B-KAL<*C-;">_DU0]!5/3[8.RQX^A_*(2E]DN[, ++MI7',(J)G6OAAI.UI!`,B+!18O$-"*ZSJ"/[VX8T[?A#9RW6AU_;ZGTI!_54^ ++M%H6TB>VE?XF[IWMOO`0WB3?'V^UU5RM"<G_.W1J\CL7??JLP91=2K:2X8P![ ++M:X_(B]'Z`UTS1Q%C0K)6V]Q>W!.I*3`JH;OU*/;RS:YR=]4W736F8V@/9Y&Z ++MVWH5)>[&O5K2C?TFW<[MQ+"4-R:O=9:BG)7@$IP2]O*[;!V[E)(GV$551)HG ++MDI08%J>P=J4U5R,0I`2\8>C]JT/2E0R.B2)24(/6N:,AZ*MK]/GU%J=^:1$[ ++ML(:NWR77UG#E)G7U+%SJMC10`AQF1!EM[F>G-(@E920DCI0$-<:Z)I^G!59^ ++M`?6NLZY0&F('_NZJ$L?=?BW#<(&5-`7SUFE#7[`$B/E>,3B$QW25$I%U,T+, ++M-6(9E%]G4D:'JE0Q2%?.E8BT:5*6)TDL2+PK!'4E#00!+0=[G//V$&W/7&(E ++MPB`$,9`9)57LFR"<A"KRDU@.[\)!<=MM;66!!<8X[LVC4UM;GT5UO\VIB@+K ++M-@ZLME_&Z4Y=87QAQ[*J<I4KAVP[)D%B35G<=`XCA%_<I0Z#/>MGP>E0#LK< ++M%0$`TZ(D\OXR*!%536<I15>"JWEY7Y/K6#JN_CI.CK:FD^!>2\1Y\EVP]LAW ++MP5SONV*V&!RL<3=F[E@[=-\$AQ[EF,152Q7,1<\Y3?JY'=0+<>RP*P`&%:IE ++M-&PO8*<7>;<U+]I7!QV&Q]J-8`^YME[5L;1OL.B*E@1^VWG+09V26)4VKGP? ++M&N/=Y"FO:]VFLHH'ZA;M?=?7!NV*/:8SZ(CN<6C844`F+ZFP^*C968%,TZH: ++M(D:'1/5\?."JJ:,_'P:'FI?7^28OL*^G<X?H.ZDIH';E5Q@9%RO;J%:*]4@! ++M43=3X'^*BMQRQ1@&NSJQ"EUU$@5]6)T\1SFYCH4FLQX$L9?+,8$MLXH*P,"0 ++M0UW"L4X)G"AP\%X7ARR!&,2I#``?UZ5=%K1?GM;Z/>,F)DPN<<K!,5=(XC`% ++MZNQ#6_1[7EUKZ;4UYQTAM2VQ*5\@Y&LJ>ON\UE:GC^G8]1YE/U%`+K>5*SX* ++MO>W-E31%NRKWH%3N'[<_8!,.',J-2]24CX`"<S7PD1>H5L3`G2V(`Q^N\X)^ ++MFRF$_;NQ]$U""FS;>ISFAT)WG0#8#E)6F\ZRA.JU&E^RMP>"/+0#1);:WZX% ++M!.'Z%A#$DX\YWS=.3U48PW[IA"WP+?&8+IXYZ$N(28XV(0K[3@I\KM--U_<0 ++M6RTHBD$>Y+Y6+L>"P6"O:#V!]8\402MRD('9ZPJB@8;S"QV$KGLA-&#&K?-R ++M!-.U>YB39GSLN"@Y@Y#7A7P;V$7BVC8$Y@R8&N%8D2\S?N*<Q])(D5.K@T!U ++MP4I_2L\/C-VV6;E^JJYK`]ND!OMQ?5>WU`*U9F!JS3ANOF)J,HMY+YT]INEJ ++MS1UML>=^MV7##]R:QFT??3A;V<F<\QS@R1$38\_F>.Q*!DU!8^U>Y1;UR#:, ++MI&S6=7O=Q2OG")8#"(5IZ8K"W>:_,GIIC?X5B8)L/9OWY[L'35QBM(#@AJ+N ++MY$=NBI,]B>'FV+3W6$!`G3.0-E!)%Y.Z$(<CB\XS[CN`R&G/,3_I'!,$WIM# ++MZX0Q]`62'P>V'O0=@RJ0:.L9C_8"".S9"A;>8!@MM@X["8'Z`KG-#K5M+-BX ++M`Y4Q@??5EL^Z[>A)FPR^/50Z;36-@PO'>("K6^ZZR.KZU!EG26=;S!FEUH-@ ++MPT;8=:O!;#BPI/!$BL>G#IBVIPXX=M46?LM?:-86P0U]N.=4:BUY))$Z="LG ++MU5GMJ;-RZHQABD[.?&R^7YG9YF44'*AJ?F"M%L:YW72O-]0D=J,`<A#T^.2. ++M$T,6=@E_NCAQ7I!),)Z!]*J!(#;;4!!%]B*83&P.M&"X0Z_\!0\?9HTL`6YS ++M@_R7U-P,;B;P,B7#=G,</?;_(0B:+PA@^D'31Z#;O4S/?@*<RICN[F71>%U# ++M630];/DR)^57Z>LOD>)W\!JAA5$>80]P!/%JH.ZY=<R(0&-C>:`\\26,?<YC ++MW^0$AU!OQUH3[VR,V;!=]KX$WU9DD'.ZW%=<&](\,^_SK+S`[%=W`5=#U*`5 ++M?YV2E\:9<M=?\>6\-Y#P^#4&*0<PM]BW[@(CM)1.Y8T]@/-UP3JWMBD-!M.Z ++M9(@JM;@Z9X#W:"PPJ\L\GUNXK#_,O,=U8LTMO\SAP],[]A6GNW3_A$R-Q'+0 ++M!N(:D:VNPYKO22#?8KQ6/&(/>Y;@>JS+^7:=%^X0I-B:\6%>Y)T#P'?7M$R' ++M'OJ5I'7P:H(`O[E^1\>DR%NTF#(AP,6K[\[YR>K=V/FQTT.\0/F*G(C]ERY5 ++M(M#)SWGR&V(0Z>1;GMKT3,JWV&5N@JCK6L8E1\?,W@AA=OSLN&?>,HZM<DKX ++M7M/?>G07ICD:&$[>.A7MH-=VIFL1YBBUZ^['<)*<7NPDCO=XHW_00(<T<Y!% ++MNQND@B?WU6GJFL1AACU0VA%==;:J>Q7'9R8UPS\Z(#'#6OJ+@Q/.VG!W-MWL ++M;!U.'.6]XX--18>-^V2/02<H:<1[Y$N&O3:UT/>\.G_PI#'@D32A[=PW@RAO ++MS('(80!%WJ5S"#PN=81DV[)O\W)4QP=7H\,+$<QD:]<D713NK$\M\Q$5!K!J ++M$L<1(>EZ5?X#,QQ3665N9'-T<F5A;0IE;F1O8FH*-C(@,"!O8FH@/#P*+U1Y ++M<&4@+U!A9V4*+T-O;G1E;G1S(#8S(#`@4@HO4F5S;W5R8V5S(#8Q(#`@4@HO ++M365D:6%";W@@6S`@,"`V,3(@-SDR70HO4&%R96YT(#4S(#`@4@H^/B!E;F1O ++M8FH*-C$@,"!O8FH@/#P*+T9O;G0@/#P@+T8S,B`T,R`P(%(@+T8X(#$X(#`@ ++M4B`O1C,U(#8P(#`@4B`O1C(V(#$U(#`@4B`^/@HO4')O8U-E="!;("]01$8@ ++M+U1E>'0@70H^/B!E;F1O8FH*-C8@,"!O8FH@/#P*+TQE;F=T:"`S.#<X("`@ ++M("`@"B]&:6QT97(@+T9L871E1&5C;V1E"CX^"G-T<F5A;0IXVI5:66_C1A)^ ++M]Z_PRP(4,&)(-L_D*3.;8'>!(-G$0`),YJ$E43(Q%.605&:\OW[KJZINDC;M ++M22!`?55?=5<UX]N(?O%M%8554MWF61$F)KO=GV_>WMU\]7UY6X55;F[OC@QW ++M=W@?V`>[WR1E<%]O/MS]Y^:[NYM8US!1F$0556GV'S?O/T2WAYOH]C\W46BJ ++M\O83U:,PKJK;\TT25F6EK?;FEYO_^C5TY+4#Q*$)-W&0I%]OMI5)@CLZR38K ++MRJ"G7JK&P?"PV29%<.D&'1F;,]>H[RCE>"_`&&TZJ@^8.&*)ZQ87N]W&99AD ++M*95Q6&49;WWFY;M-4@4C5P^;;5J:8.`&)O\)U&B+ASZAPPYHI$']YR;+`]M> ++M[>C.JBM<W1$:JG0GZ1QQ,U1V=!]:MA/$R_FBY<EL_]%--7D68/T+S[JTTG// ++MIQX%-?Z\A`["P/LXH_J'D/!A2D$H+U(+5M!*@29:CB](:\ZO>O``=/ZUTXV- ++M'?W%\BB(LS=1%$G][AV6^(D:617L4;]@G:[>R]ZT)!'R#8U72?"I(<+Q-$_L ++M/ZZ>[..PLG<S\"6N,X0;6LF.4CI&,)4)>CMJ#6R"T2J2<H$U[A&2[R^=KG<$ ++MPGN9;3OI$Y2?`=@N3I;SR1[LJ0Z5U]*P2HG7DBC,BT0H>ND^,H8?MU%8A#&X ++MO8B5VZLBZ&MF\U+0Q7?4$>7V2KF]RH61T+'.ZF[W+W"Z,9GNTPOM<5V3@\4+ ++M9G$TP.(9L3A6)W0>I'=B;QP`/)I%0$\Y<61_#,$#(L\K+.1Y,8WB)2_*80Y^ ++MA/Z8X72K-$H"\X;JPG+4NGOWDU2(?`!25FLF3+Y9(9?PGJ%I$^_AEGJP0<;6 ++MV(VZ[4;D*#+,TBQA5,=*PG21,AU=(8MDCI"7L1PM&.XY=H[,>L;P/IU4!;WG ++M5EJO,]MEQN`>"</]UH0)Z]H'L%\<IQ511VZ6E[F`?Z:V.RDQ'A-FE/%S;3TR ++M>A`H+S/FQ1>83A@W+0P1$"5)IQ49&*1[O&C)>.N&(Y`#."O]<9+_0"-OI?5[ ++M%*>MG!;-/QNKBSYA,"%O5X_8BO7UI?\(>8F"5G4H73`KJV`'TU<$.L@:C:]+ ++MS&OW+&+Q<TT.4!7`2.5G/V%EA9A[VHY6??P]RJ*!01\(E%JQDK*_G!@!9[19 ++M[U*9.*+]72JWI%^JL-A1!Q$Y3PM/X]0)O,[S!HLVM>WITK.H`?@LP*(U['#U ++M$C+7(R^1_5C;49%!UBX29DZ+ZJ7S"M3,L$;!=?!GHWE`",K%<1HV/M2[3G[A ++MO425)LJA.75N'MHL6@?4\X69)Y#CHR,V`),H+:6V8P1)797Y(*WKH.II1=,Y ++MBT18[@<K%5:HA'%%]\LT5M>G?3Q?>K#-/5$WC6`\TM@3-B.?HO[L%&^S(!(- ++M)BN$/&``2E*HC=Z7I/@"+LJ@JKR2KOM1.IWR0[VS9PAVGN:,\SQ-@Q@J&F.0 ++M70)M'<`D:[HZ&*9K/J]0<A@AHX\\&R)$,BQR7:C%,N)FV*%V,I4R>UFY]?`* ++M<D]`:?K`IZFW@(ZA'XLP_]H9+T>\<L*PYQ-!G%.1QA3/520ZQ]DB?Q'AN-5! ++M]`IV>GP8G3W@(OY!RIE*C(.U>QI>\=?A!US4\`TCW)!\]8A-0)&)"Y)7U=H% ++M%YP$&'<7U%LR==W^41I$\A?N<Q""@23MQ1Z\R^"NDPK2L_F=7K%MGZ[;X^B- ++MU(%J?"TV;#G[525)M/A5Y%A^Z5*`>4:U+)MN"H#6ONA9*0I,+ER/TET8E)E? ++M."_XP@0Q&39TCK:7;B\ETG^9R9L`_$53!S3.3!V:4%W>VJ&CF3F#'#FPQ?-< ++M)&':-DG"/)>+,D834LY][9'5PDU*2(^PDE5ES$#B2[R@D@!@^UJF/C#2AYDH ++M@0(`@=['HM\WI^UTJF2!?J?1#*UD$/"41<`1R,_?T<`_9:`YJQJ570;I%:LN ++M1D$Q+XK$"S2=P;E"$@^<;;?GS9(%<=9BI/O::AQU@3W/C4C]9=#PZP$')\-O ++MSX.@G6*U_(EMW/?-P\8';,_=,V(]O@S%=E9@XOBWU7B-'3%2/[RL:E`OESR" ++MB(P6^`2N;]HY^'`OC>>25'?",X,`6"GBY+?Y9ARYTK1/:UB:SF#RF#:OM=9T ++MP]A?O:J<^(+!Q'.GVKN?,<R4#J7GWSS1^:UVN^H:@")I7OGPLYK%4.0?O'.\ ++MDQ;/N1U]33>;!85^ZIYQ$#,Z@)<<M![L,QY3`@.G$G)GS"5>EV/)-"ED=RK/ ++MS$NH0?I0.I6%E9[S5Y%DP8\D+\\/<&$N:\[-__CT;*,H2`=&*Q4>TB3PR0Q= ++MB,/AO`R>'+)G5T"8OE)=6`7>.B&.PFP^HRQ1!4DNY3]68Z"-1.=1$1!JJ50- ++M2^TIYBI6+@K7]>UUE"FC@ZL_3WZZL``/LVA@_&]Q:QIE@O4R)0>E%Q5/?`.F ++MB=2]6>%@AUJ%&J04YL-(VVH/J26TCVNG:/9>0Z5Q(NQ`Y93(@Y<4A_EO<(?> ++MR&#=#=Z9:!Y&0&S@[%1SH!,O>WT0<Q6G@2Q4,LS&1=&)*<,\RFXS4X15*3:9 ++M8]-'I^W/MFDQE4VR<3N8)%(5"&1]]'Q#QC,VRZT8UG(J)JXF+ZUSO"3`L/<" ++M_QQ'S`4&-LME4M(GD99J+;.6>Y"!+TNW$>*[3!COX!-U>[$UO,HJ&9EG@!AR ++ME)WDQE,R8L<XQ3#Q!<FFS[B9=);FHKJB)#8N[[%(YG4+`21PEB$J_<E=/_LK ++MCVL!+`3"'Y"9[*-S:K)8`M8L-L$LN"`QVW.DA7[O21'LJCV=#;#CWHYR=PIK ++MB)!5F9%:7U'DI[JK>]L^Q8A9V&95203A/6_G#/B$3CK#=I8_%6B>JTCJZW:- ++MEB37LEV+)1(VA2B8^&<+L4:3=7O#'@0XZ**]UNU-A61^,%60/<6ZZ"2'@,DK ++M?*BK[H7?#FNY!WNRLQPAQ+P0''``VNP=BU^ND(:8#CZ.SDW462'\^W)*(I!$ ++M#C.O::Z,"M&=#O..'>Q:BNNR&US>D5-]I2@R4L1.C18O>P$8E-RR#P)PM*AB ++M-FU.^&]1Z,E@,E;3D(>&4S%Q+LANV=L2:F2QJ'CE<%Z)3;/;T7-X*HBR1W?A ++M:0D_]2(MVTEY[09[K&63E@WB&EN=KO:D5\MPH9G>1,<[SK!&Y!]#CL%EK$W1 ++M1;?E]`M5ST(@'?CD%0.@6^G\V'FS!QJD+BY8>Y_0D`-;_L&YTM0DY+@)5[*> ++MH!ZJVTXJ.^<S`LX^/#!EF(8TR`E`$W])U4*J`$:QV=4-U:^F6O)7O!,C=$4I ++MA[M<<?^#9KS5B(H0>)WK4F?7V3W1*7GR3%'J58Q09'PQ*:0WZ0Z;>;QAS'2B ++M@\@?PN/%B;2OF1+#4Z3G9[RO/G`<]]7W28Z@U:2Y/+F1?@M-$?,9"L3_Y!/^ ++M7+>2M@9RBBSX=5.E'$?R`HL7.XX'-0Z_$Q8SQ"WWC`6J[*8`@3UYZK)2[,F? ++M;`YS(V=WK4ZW9U!`<9"6:J&J>4!+K0-[3JM*CGPX,!0=&\]`:94A]],VEY[? ++MY2136*7Z_D:5W97-92^MN<ZB_DQD`?$T+R4F?><=V?/*"7SZC^/VNH'X2<0N ++MBE?.L=<<`(GJH\\J#QKK*SQN^=C9\P3,!O%Q:'R82.["M]T:&@[R'"DR8T\N ++M4#U*N/LLD>UCX-GQ"'ZQ(SH@I)R#U':C\?-XSX]N9<S)A>MI[;6.U8#85^4, ++M]EC@SW3NK41M<!0<&=-GF?!<O6.F+D-6LA:P0\T:A0GV.#<3;W0"N_MK4:#3 ++M%:2-][,WMUZ0Z`PZ`(RD$\=KKTU&:0P7BN#VTK=$6ZSA_O3>@:[AJJIC177Y ++MUUT^2%*4P6GIO_FW)8Q9%$706O2>M%/<]S/^=XL'SD1?RE$>^9B#6T=6.&NB ++ME"+'//B1TR[Y"Q;S,G=525^4@01T!PX0B!VJ@$UVM]70JJB6'%2H*,OD[C)* ++MY30AG%I'V\Y>08V>]#Q\\XK6%^-7DD-D1V^*RE*XDP7>H7$KO#4YB7)B?GRH ++MW-L>JORHBIM,25ON7[`A]E`;NWWI>.(I@)>;P9)3P_Y61G(JF-E/OIX3\S@R ++M4?"OBT_L\>'UN&_DHP<YM:RKC\3):Z8[>VJZDU1?^:<'+.E\^E7!Q3.)[28# ++MS*!/?>UO,-4LB9*03WZX"#R[&J/43]C2]FL.AAK%NA:;)%F#<=;0@<GYY6:C ++M-I"J+/DG)O614XRUO`03BR+-U0B&`)LJ;2VG/(K4:3:JV14$3@D'R`M-=OX[ ++M&B.%OY-J0X_==8(^<M`4R,HITX3S=FEBEEDFY&KB_&G,,^<FG3Q[?=0/*V1] ++M>1P1&!^4_=FXVB<9.:@+;Y9QYY1JTH4X#_-1MVQTB]IZ$4M2==;\1S"KONRE ++MIX`N#69^B0Z*7Q*%I(G%+T%D'ZMS\LNXT959T1)=O^V`/E*TB@CN0U:4Z,)B ++MS8EN`W=O6'-AXBI,9*-?<1Y[ZNI>%%X]2FG;4"K>7]'@;OZ`B1QUD8DB5C/_ ++M.(SU>=*RE_[)*N.,5/RX2(-/E=.*PGWNR,)+$<T`+9(:B<#)VKV38I$2P[@8 ++M*C#@>SS_)Q]8P>#S$RSI1;41#8`E[,/V1=;WI,_P49%G'*82-B0WYIT,+M*J ++M@_19!>%0".W=XAL6JSCB,7:/1RL3-*KR^>\U%VB_=QG^./#Q?997DC$DM0N= ++M<*]=_INQB#QWG**W_:.,]6"CZSBEG`;IYZ04*F>G=]IA17NQ[EF(%L0GUP?N ++M'#$_XUI;G$DD9V_V!<+)?W1&_?)YQ*E6</Z00'*UM0#PL5`1&](_?:5?8JFM ++MNQ-?7C-S255!(:J'F\R^HDHJ>%AJ421IFE21=XF9VRL10Y3.3A!WL":3F`(C ++M=LTY9-\PJ5R(3'?F]]R(@X6QMQ,ZI%M2XSM](>-G<PI6C7[@9B*)OW:,+1`2 ++M74>VX,YFN<_/U@[#[U'XZ,%3MN73F\P%6ZA"O^.V1I+1"05;]RY:X/&%W9LM ++M)]\5R`QY)7,A)59WQ$2G7?TD2(E&"-,T>.*""TXJ<?CA$^`DP&\YH52H4!V\ ++MTT]=\N(FN9]!,N&TF&:>:%7-+K%@-HQ3%;W7?*\&L^,(SP7MVM<BWM$G&.\/ ++MHAE[UV^0IGP="0'D^\;QS&=%RSU'-.-RWE.\B2@^\22);EZF3][+'V;?JC', ++M./O8DDARO&BTSJUENL0HR;C"8&Z<F0+W7[RH5F%9EO+E:^0^N?T_9T#ADF5N ++M9'-T<F5A;0IE;F1O8FH*-C4@,"!O8FH@/#P*+U1Y<&4@+U!A9V4*+T-O;G1E ++M;G1S(#8V(#`@4@HO4F5S;W5R8V5S(#8T(#`@4@HO365D:6%";W@@6S`@,"`V ++M,3(@-SDR70HO4&%R96YT(#4S(#`@4@H^/B!E;F1O8FH*-C0@,"!O8FH@/#P* ++M+T9O;G0@/#P@+T8X(#$X(#`@4B`O1C(V(#$U(#`@4B`^/@HO4')O8U-E="!; ++M("]01$8@+U1E>'0@70H^/B!E;F1O8FH*-CD@,"!O8FH@/#P*+TQE;F=T:"`T ++M,#<U("`@("`@"B]&:6QT97(@+T9L871E1&5C;V1E"CX^"G-T<F5A;0IXVI5: ++M39/CQ@V]^U?L+9PJ2R&;W[G%X\259,M.U:XKA\D>>B1J1"\ERB2UX\FO#QZ` ++M;I(BM4YJJD9-]"?1Z(<'-*-W(?U%[])B&Z;F79;F6Q.G[W:G;[[[^,T?_UJ\ ++M*[=E%K_[>.!V'_=/05\];*)@=^WJAR@8'DP1O#ULXC@.OER;,XFJSCZCJJF' ++MNNI1E03U&;\F^%"=]U1UP@BV;J1?L251ODVW#Y\^_EWGVT1F&Y8Q3_C>=NW# ++MQN3![H'^':NFH14D:1E83+>7\E^H^.4AS4C8/T7Q)Y%>2-IA$;2L,Y8Z5-K> ++MRD]##>J7(U?AWRO^\0NRM"0I%K5QJXJV99KRJNP9L[>#'>H6I8WE:?JZ'[@_ ++MY@G+@(74"//L2!1%LFS;O%%3",+@V?;3+C0<B]\_OB>]^36$L^F?BD];ZA,6 ++M)OAXA+IIK#3)Z05%2R0YU[_2_VN%BDQ>ZC<27)JV'L8.-59S:#N_+0-&PQK0 ++MBQ780BE?:NR<KG.ZGHS7PSN<Q,$%`[4OG3WQ:%77_P$5B9K-R<HV0!>0[EIN ++M=M+=Z44ZM/*[K_`Z4*`\-UC:9[]%V+RW%=T\7ZGBWV$4<ZN.^I99T$(M7[AO ++M1W4IEBD[3M4YC!<JFQLO:3B+4U)P57?2;!!+;!MYQ`[B]US5P]&IIUM94M]> ++MR?+Y#)S;3NQ>WQTJ;BHQ&CX"?_RKR=ZYOCAW&U-L,Q/Q0#D.BZ&VD4F#[]_. ++M%OO&VLS3X,]X!<MJZ=4F6'RY=*W=/=#D1YZFEVEFAWL3T21)SI-\@'U8-J3/ ++M/T"9MH-M&C)5/>^)B8)'U1^ULF>IKG2S4&V;K11T)8DQVH[T]-M0G?NZU6[0 ++M*L0#+6^INQ]^_)FJ:?L?\9-.]58W52=UKQ`=Y92Q_;-TP$L4P><&&("^F($+ ++M_:#O)PU[,<[^R,?A9645=G"#8:@LARI*5D66R2$2F.GX_)Q?I,+*S\Z>;<?6 ++MRH^L,SYR>Q'\@H/:#_+PS";&JCS`2KM*Y.O:Z:KABI%P_M(TL/O]B'G8?X+$ ++M5NN<B4*FN"1O])1_>H#Q;5*"IP^MCC2(39Z@Z$&'XI.99G)T]#1M5N#@M:O1 ++M.RY+43D*O%(LI2P6RTS"4+"WY7.X=SVX'A;8#")BG.%1Y5W0<=3N4CWB$QJ@ ++M8%+D4]WZ;2+Q"<>Z"/:U`$=2[4D99<A'7UHP#`ER=V\B<G9=%!-<2=C!4.VK ++MQX/SRK+\5N0Y;_(5(PO4.?B-\RSPAYB.F"R]O3X('.:Z&?3;N9D&5'88ZENJ ++M*7)MD:II5CKH080U;RH)2$>TW8TZ"V[2KZRY%HP6:,!LI*,BBX+O,.LS+#W' ++M"<?[YU'PC[J).Y$MO;#(5WP5])G'[(]X%,&;S<IJ+K;O:^R?R4L"++5DAU9/ ++M])-\8@#*@I_H@'"S0;:YA3VA%#*`XU=\N93[:[^K',(,]7,CZD45#7!_+R/V ++M<:`[[L4P:OWKU5<O&4ZRP-L/5#S654-J-"9V%F!,0CO4MUHZ2^4$1O$XL$_C ++M%FY-*#-^HOY1?GCSVM/F'K.YL`/TOI-Z+,$54G'U`A([MB4SP1@J+^R2I+1X ++MG/R]K^NUHWVQ?"*!@GCNW9:N>5-A*OW1G>&8=ED!&I"N6/QD0L6U)#'!WWC@ ++M/-BKENC`]B*!6O'KG!M&ZX>VFXTN/Z*[RZ1A>_C:\8[BB19@X:P%D$#10L6O ++M'\D^NRK\&'D%>W`#T3%J_-%32:L]%&9`%77;:*MXY>-P<Y19.U&#&%(2RB%& ++M04_MT/H132+(.4AQS5<94O;BI:6[;$:4!!]T$S#:07Z]R<ZZJ^4L/<S"@T2Y ++M,N=\=`Y1,7/TT0C:43'U84YIKUY[Y/S.!*))+(AW=*/9>2>`730QBW+5";W6 ++M#0AC4H[ZBE/6+FD6#@-5PHS?V`M:9V`LUP97SS%4\'JLSE(:/7L8'-#NO./= ++M_`I=`+G-(_)P#P4!R3I>`3X396>Q'@^`HNTGU=C*R<G[P(=2^/E>.EK=3K2^ ++M^*U=,\'>6;)&:N#+_E12^;LK_`Q*UM'I?S`-C+L1\8G._<1F(S1[\.>]U8#3 ++M>544B=TP%'1?V.]>UQR?A"-&#:%W!S"YY\$0!X&7R\:Q9=,4NGWHUB(XT?!( ++M))-S-`QC(,'=YSB[OJV\Q'@:?O4^GEAQ.-_9S@Z-QC+TOR03&.27:;LIS9W8 ++M&4W&2%G[$B._--5ILGF.)V$@73GDQ[M.YPSU_RH$(,V5`!!U.[02CC%3N^6M ++MTK8_B3T>'4:AW:TW2-)"*-D8'W"K52"L?(#!3$4#%/K=M5V'?;PXN0.:/%KQ ++M=DE6WL#4DX&%%FFBQ!)#++03WE-,FI'W!,*F&5ON7.78'518;8EY*3ZDX-`V ++MS9O4-:`^=N^:-O4:=W_N>/<D>9/&DB-Y[NV!`<8=O12[\JQH6*K!8JV'MX<B ++MX6`BC(+WU(3>6_M.G"%'O797^3#%C"'XFAJLHV$)8=:C.!%96.<Y.8E6N70O ++M=:^(T:D4SUTK!JQ=]N/BJ8]+2;C\CI*W^:K>>PT`0O3M-W%F;K:GE``*NR,_ ++M?7VJ&]M)6V"R(TCTN`CAJ/UD!@09:QK:R4H)_T)Y0;$IL66.>@6X\;O@RQ(R ++M)%G!IXAS)9(*F_I''KH>9`@Y_YT[7@FSD>6JJM\T7<B0\,R!.#(F]NSFC,1D ++M(>ROLF86FV#?CJCH$BW*TU'N*G95=5?IL[.M:8)@35/-F.."3;8'^>U;]HR> ++M8*6.*DMLZ$9':$5@<K*?/3^DEE`+?NV%4VQTZ)[5E.)4$UHX2M6+W;VMG+F= ++M3E+=38(>$;Z9-%)R1H[^\<B3(2+&XX4L9H[`CJ&@UDKG16H,=2M$"!DREQY# ++M/Y^)NPO@:GRQ64]!)N2<KKUF5_B)64'GF`XD+L+EM&XO,C5B@7)1^%/$?CX' ++MIS]_-1Y#UBXIB;7Y!>G1AK@,6IJ0(M]?O-T,(L<)X\WKY9DQEPO0WLMI7<N8 ++M2"&F+%QB'%;(_&(]GN;,ZVDTQZ00<TP*`^+*:5+(?*8;9<X`M*>Q%I9VG6RJ ++MTD0RU-2$<Z^'59BXV&9A]BZ-\VU9&%[+C%MRH@P>+T'FJF-L)9%+/4#,.N;\ ++M-3UTO+R72GO,="TP(_N.32LBET[E67[/^0DAY7`G$SS0L"V:8`%5O5PY11E' ++M$DA*%!E]->LKF.+(NYVSZR@;>2>5UWU2QXZ!7Z%U[(YBA(N8<3T+R'@8<JJL ++M.+$@VC]@"6T1L$1/!EZ,L222K&JL,8M'M,X2!R27OIID;JYJ2FL\>$Z"VUN# ++MX<3%L1X?EKSS;H(Z#K=Y+KGC'*UB3E`GP2,A,2@\']S1S/,HY"3,08H?QOL1 ++M/#+`H?"])GYH]"Q.Z57C;9D48ACVI#TF>>^W7HSR-KF]\0.4VR04//U1X(Q3 ++MBU8"4)>\1EE8<!+=8\$)Q]4(55>P!>(YUT1[>"5.,D1R\IU;,QQ9_(]H4775 ++M>2>!>)9Z6$"Y<\QGXYF/\_RH7IQ*8<9^*+8.^B535$>`)[DTJMW1\*EMU#VN ++M)>7XNDC#C]C#X,5'O0!C1[RBX"G*-$&3Q=GTFL63B]DMR^2>#(_LO\M[>7'9 ++M.-Z2NE>:QX?/#D('K9)(VS%R4?'"+FF0M@S#T4U$A0JDMM%,O0`WJL\RPN,J ++M+T-E*;EGUBR[)$9W8>:H=`1/?<_H5"2)N^A_H]A$%%L!\^/)S2BZW[DV.!%, ++MCE<5T>3ML\BGN^DAG$R<19.KCH%-[G2;?-I+)W6%6?05RUSA02O.@Z_A"G;V ++M3`LY#)>[TWC5M6/7UC!8,S^Q.G0J[!K;]^XRP&?O:8[1U):J8[L#H(X\8T39 ++M"\P?5G82$/5NQ;YH<MB."-N>5:9@**.JC/-I32/N:G(ME6^CDK#,),0-94&1 ++M0^4)YA%US&-W8X_PZQ84HWR;ID9;_(F"4I--M3;A-LA1I`3FK\=:/+4\NJQ. ++M:M+;^T^2:9#%5P/"LO0FEV-/R2HQD]1US(Q`XOE!<S3^PG3NHN-8/RN(;]9= ++M:7,K7R@<3SX16>_&I,A&-+0Q9ANI3S"_I\?J(44L_L"^@.V3PM:E:HE795DZ ++M46V>+9;(M^_E/+,NJDV4<*)P]8"')\T1H[AX8WXEG7@6-Z\J`?;%K'%PJE*C ++M\YPJ_NH&.C[!U]B2BQ_ZNWJ-?T>O>TY3<.AUJ\HDW)IR8J4@-;9Q%&9F<VN& ++MX-:4TC#I_-!P`L8DN/BJ?4JSZD76'K3NK)>\>%A:F:'5L%/WECF(T",F^G&` ++MEDSN9!*]D+,G?6(5$A1-@JOYB>C9+[@(/PXS"9G#7,`0+@U"80^MV(DL<DWU ++MQ*-,9KX&#H8(4^@L&'QL.4A)VYO\GP>#=C./2NVT/!%B/F6\S<H;&^:;K.PV ++M"\),S*3^&YO:1>]\ETF>E6*C;Z%AO8VMFVI-&\4V)E;YNZ88EUL3Y7<7SPMT ++MF(CR>'QT6Z.4H.[F>-*A\EYS2L-H'>Q$<%A-=B^H>M$O+/[)=.DFX&!26(WY ++M]G[BJ-60T&3UJM=/9\\OE2X-*=F%]E*SC;/L_S>#.#+>NA[4S=[L"P6I9?X_ ++M;4MV?UNV\MW)GP77C@XH(P*$LC3S2QJ?`+&?S[/;R3R4'!&RM7P%P#25GE;( ++M!\2U=AKD8&9EL.<XS,=XR"3+):Q\Q&+O9?7=M4Z8W'Y(!M$-9]SIYUL"$4:G ++MX`@'D!W&P<$V?07&B0>$P_9%RE8&1'I[F@R!3"C]6IX8G%@SPIHI9HN1C\7< ++MJY+T)"G(5C^`X0Z\MMWD*Q4CJ:D7O;;@Y/%/?'<HM;.DDF3$UX*D7M)5/;^V ++M2Y3Y,(G*DQP"&OI[_]2E(7PN`Z(5R.=[NV6NC?4^B8X3`I7,1<?IMHCEXJ7P ++M@?%YQQ]<]./G'JEFUJG`:>SAVNGG&*\(HA$.K7RV17[6#?XO)-[Y2X5R$O[T ++MT[BU*#ANI1\&!CNFR1UP<J7<'2B-%8.#>)D]+&;7J),42\Z9PV*2-UV_:=FY ++M^V6^H9$[9/DT\U%$BQLM8JJA3VR@!<O;AK-3DH0D(<<':2DLIVXTLDGE%E7] ++MY-JU\M_;:6R>\DVC6$^JEXURM<D?V?U!FZQ^[X$*P`8WZ,8//%S,Q7*]6D:Y ++MJP[K:2;_S4Q,V\LYRVR>LV3Y07X%P!R9A&25%&Q2"AA_/O/5F@OXT5BBCR)5 ++M^_E2^\16H7[VS5&=K]R<(:V59$'+AS>)ESL$X32;1QS(,T_0)X]"]K-(JM_J ++M?O"@@@]'768^#_9N"!?>K_BS\4;@.G!N(]<`%25);')TVL("-T+?1@RA-BM? ++MK8`N@EX4D<L8\YT&D"4KA*6:+%]D9U<"RF7^G6\9S\SQP$W[\6WYQ6LK-#QT ++M<39*K)Z:#S-QVO\P(O52Q=81AK=,"8/+!W+=ZDV@O\.@M\*=3)*/F04",3YC ++MX%_UR]EQLIU^X,MY#6ISDL\7C5HF-<EV+F2>(RA_CU`0+W<?"Q`W\>!A^]F] ++M@RFW12'YQBA"S3=_^?C-?P''5K:U96YD<W1R96%M"F5N9&]B:@HV."`P(&]B ++M:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N=',@-CD@,"!2"B]297-O=7)C97,@ ++M-C<@,"!2"B]-961I84)O>"!;,"`P(#8Q,B`W.3)="B]087)E;G0@-3,@,"!2 ++M"CX^(&5N9&]B:@HV-R`P(&]B:B`\/`HO1F]N="`\/"`O1C@@,3@@,"!2("]& ++M,C8@,34@,"!2("]&,C@@,C@@,"!2(#X^"B]0<F]C4V5T(%L@+U!$1B`O5&5X ++M="!="CX^(&5N9&]B:@HW,B`P(&]B:B`\/`HO3&5N9W1H(#,Y,#@@("`@("`* ++M+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R96%M"GC:O5I9<]LX$G[WK_#+ ++M5%%5(YH`3^0M<4[GW,BSV:V9/,`4)7'#0T-2]GCRY[</@(=$>S(/N^4JD\39 ++M:'SH_KHA<>[!GSA/0E<%R7D4QJ[TP_.T/'MV?7;Q,CE7KHK\\^L-M;M>_^KL ++MFX5PLL52.&U6+63B=/2Q7BQE&#IYE18':+#.\#MV=(7/R,E^\T248L/<].+R ++MMBX.70X=:M.PJ\VST>E"QLXW_JQQT&Y9;Y:+K]=7(,I2"%>%(8ET`VUB:%(M ++M2`X_@'G7^#Z(VN+_K/T9:D//H9%WMC)%>;[EV'O+O3=U@R\P+5;=XC]JB>,U ++M*$G5<D.4&MOE%:ZARW6!SS^QK9Z3M,MKG`9ZRP#6O,&GYY!PG>Z@)D^YZG8! ++MB]9-KF^@L.`U_(RJ4*A25C<T*[!+F7=6>"R;:,/,-"R8E6K:SP@(ZO=]WXB$ ++MR^6F]+VL*YSP'IL$#FI8=WK<'O5S2+O#H'>7YD`0R<D\'U&+H&0I?6[Y!WSO ++MX1LTW>2EP8@NN$63T?C8I^AP29*GIYZE5:D10",@L45G=AC?T[K$!GNJSWEK ++MEF.Q(D82;E^1=S@[+%-&'F\2J+T^-/S2L0YW.&O^^\',$0GG+D>%[;B;F9"% ++M*\Q8!RMHMN8"E*>IMR0VM6]G]L1N>.`G#L&LY7=:/9PKGU'<Y0S4BI75#ATJ ++M?NTUUO7([X&#]3<H'HY'$C98&.,)B,T):&A[*R[7W2R^-1\FG-P;)O=@"-J\ ++MRL[<],#&2K(IH`9=DNCN8AE%H7-M]@]'&AW$9I?I=<L=LS_VA'8:<TZ@)K<S ++MXM2IU7T0!B`"K1TG`,.UH9THN4K\Q(5X&NC;]WZ"TQ<D`+O,H+1"=?;J@\9H ++M"X+0!]AE,X(<VLR8C`T_VXYDJ[;&E.05/PE#IJW>[PF/J4;#X:($@UK0`&.S ++M!)8FE7,H43LWY@B9074S)TN;;\E>P5X'J>:CAA#UI;`#=!T"``NZ'=IP?!LL ++M_RTNO3ZTMM,>-_>&;!]M8"_AFNN/SN]8(CYW9$?CF"!Z7^D2S2!^LS1D_$G? ++MN*PX88N]F]@R4$X81\Z7!>Q1QJWN\J+@87K!&2UUTW$YZ1QZS6\9J@?'1BOD ++M(TJU`5O#WQUM$[Q,EL=%M,OP+&I>P=X4HY7KP&+_J0=7X`.^R>[24.M##]2Y ++M`V;/A!(G9P(0&LK!/P3*FYZ/M.-"&D/W'QF_C!JBNL`%EGHX,Z9Q/2-27O+Q ++M';M*]`\;,O%=CP5L1.[@XJ6,SD7@@N-D8@$8<>,XH-$^9QO4+_2ITJRWB!,F ++M$K@J$>=+*=Q$"NKTJ_@*:_<\YVGO+?'@[#Z2O0%HQ&">5Z7NP=F?V\'[LN'B ++M(O+_@:]X#147]GH-K-U&@'2C58UD%*$;J&2BIT^[9A&"XM-O)RN2RHV5,@3K ++M9_:H\6]>Z`4*_@M3\F&DXA*A?S/>,FHBE(K8Y8(I<J6*00+EAC)F-<F1FEST ++M9K[S3#?:@A1*D6-$ROE@:E>DJ^UNJ.G9!]1>4ROI7-,^Z1P^?8&?"5G75N]U ++M,YA?@&9'HLWHADD5&2)P_CA,!)9VDU5DX@08LJVF/6L[KCS:M+X(]GC7,SDH ++MU%UG>:2Q3>Z,^7E3S>P@P$OY9D\^T=;5^"_%?YGY)U$5PAD,N1>9HQ]9\Q`Y ++MOV"3U8L/;_[%WT\7,G2JZL!V)0)]Q3&/F#)_@,'RA9D)&M%V&G'&2KND4X>M ++MT7EE)"*<&A;MY-#$KE)B!+$@!(.VS<A1!(X,Q7<925.Q(I,?2.>J9KIBRB_Q ++MXRF#P0]\Y^K`#IT!QS.,)92>YQDX]IL^@J-OX/@:X7A-7A\`:6W%8;O%HRL" ++M&3G/!CJ+;1[C[UA_:9M!;5WN\]XJ-`\!<$?8P\.\?W)Q<=<S?F0I;L[@':P8 ++MT6"WRKJ+79I>[(`#`UO_#Y9U&;AIZ$:`WFZIR\4C*@B,"IZ1!X6!(C%8FLA3 ++MSMN\\-ER+H6,8N?9/7%8IGC]FH4W,':#]RV.J!LSC`;W^<#26WM"X.18E1;K ++M>;,6HM6V9^+OV3/AH4$+HY%!>Z\-S\:/$5:4<B/_R'2%1E&7+T"RSXL$K,_% ++MY67/%N$$/469;_.V'C@?13\`'^E!B2?=']S]NSN7O5Y#UKUNMA=Z&#P;F9'9 ++M/8T>$U7$8$3_B85,B#-FPOD0=,1`7:JZ&ZTACA4`<:@MLR$Z2W]\3=\(S'9E ++M"%-<&1/S]H(G,$,W%(H^LL;8KA%YER_9,I!_HK.C*R0CL,A/Z`M,FR^X:KTM ++M,E/'?;$-''8JD\[*E#TC.2@D[G+;X1$07R$Y]@7S/UT8GE>0[_=#.%Y]G-1P ++MPS%Y@KJ0&4SLW+5/`$\!^DC2GST;W`LE@!</G--<M`$.JX_P$'LP,U$)"73H ++M]J']QDH*,OV`?09VZV.U5*]Q$1)T,^NE8NG*,/@Q-V7"7MMG0N+(?06>)%'P ++M^1R]U-//GQ8Q>BPJ>E,A*S3DD;T>!3T>$`6*^6_S6WV34U*BN^<^EW4UKZD& ++MQ>K=%8&)M(LO+R@CL,<6-9\!'!$)\[&E$9YP11@/IB:$XV[\6I`DCA#JNY#* ++M5+S.BXX'`6%,S[%4KYE%HSE:79J7*\WAE6Y.#=7<R4C,R7AN.)8*';0#G-"I ++M*`,%:KFBJL!Y=:`CJK='Y:_KIF)682IZW@65_W;?FV;7=*0J:ZSG3L:[M,B9 ++M62&P@4KA9DJ/$VU`^@K^W)`YX/=#[U@""-[:<0B1<\PX!"_8@L)DZ4W#,I)' ++M^HD;>>%YZ`,Y2"0)E/+$".L3.,O837QI=G/UYA7,L<)Y/\++2Z"9/FSIZK[< ++M$\Q;5!"$O51*$62BG)>(5QLPD@G)>YK4FJ8;WCTSV5A9JWK3W5$WAB>F"Q/G ++M1;7-*SY+C4EIF.S9!(M*NK[G3[W>\XSM[2Q?EV.^+CP0QQ,,)AP0P:0,F#Z[ ++M'+"^.E``J2G:#9R/^XX3@'\.+)0;ZJ;IG>L01U/^9AI'G_`H4W5HEP\AJD\V ++M@KH'TXF6GXITI2E+V.:#HYSN<AR[7F3I`;%AI++OF;&_(SV3@<$<!,LJ3*H5 ++MZC^Q^L@T0,LMDY"RY$B%=6DFF!P#:E9M#VP;).!`$RC6_$$PNZ<((RO;&3OC ++MN4DXVEP9@R5`1B.6`5*:)\(/OXO0HRH)U*;AT_#=[B[W'T<=<]@8XCC?X$)Z ++M;A"K*2R$]Q4#<@7L8FDB.>&\UFW'9AQCLB%.$TRI3:LKVJI[CJTI8//8`1.R ++M-_=/V)Z_)#]J."5U7&>=S1D:$]I+-FB98I_$,PREK,EFPG>1:0)68EPHENF4 ++ME]^:"CX7E$IH6@0X2/"_=WE2L<O#)X&./#!\?,DKRH'A^R^$#H[@I/(Y\JHV ++M?Q%RB=ASA0S&F(E@TTF)63F1CAN>WFD<Q?;R,4R((TP$$`%=U=6(1P91,&0Q ++M(B)GOFWY-BN*>T/6P"HZSTQL?8?@I#!^#18!18>`BHWJ39$]A(/C.P@X)H\& ++M;5A/3(EH`(%`8_-[/O_AR`%B"T[!UL=QF9D(LWKXO)SA':>99E\ELS`+E1OX ++MP=^-_V&?Z`R`!J\IG**.:ZYY@\TZSJ=!336E44.L;Z8>VXHO=?.MM=D!S"8& ++M4<3D*S()!;H@(S\W96@IMWF>W4!`;5S$"5+#V.W=+B6ZO9Y$@?C"MU:,VTU" ++M_,@2)@Z:UUDU%]T!>./'P"L->%<N1@4^\.^WG&'716$0^HS,18H&"GPR9XR6 ++M)ET4V#N]K$_VY.0*@X'9<"-X").^6SZ$7H('G@,5S4-#N#'L"ZOKEQ6Q5;(- ++M@8J!"9<E79[`^[R=H"J#*&,!S(AC(28X`P@-Q./4._F!&\EPRCQL<@>B"G!, ++M=I>(,-8-0PY)86W#<Y58CQ.&KO""HPWRS08]1S\2A\X[S4E?/(C3DUV8;`NV ++MZKT0D!7N&3@O+!5V^8YB-=Q\TA$PUV5Q,'8YPWWES'X5^3?"'O4#\WQRD86% ++MXXNL8]:B,#S#F2D\,W>`$.@3ZU+_C\#+Y[QA`*%?[X6P4'C=CM\F.(/O%6<, ++M*<G.T1;T[5E,3Y&QOCQ-T'BAZZNH1XPYF%PXL3L##^"\^;8C(@;V[;EK0Z2G ++MAVU_L]GU09)X[+P'!DYOW>7*X.#=+C/W64P1$!JFZLH\+ZT<FG)Z?".&"50T ++M-..;0,T7_CF0N36/23=+#YYX>^44)93QXVQ!PP4/9@JP.C[B1>12PB"<QTR8 ++MN*$7_3V?8@PO]SSA6N#FA&#$\->8JN#WBMW-`)6%8(3=F_H?0(N(A.M-R"^` ++MPM@7Y,&)L/[!-!R+F2CK(+0!SDNT01">P/I2CA%2:X4NGSX*J4?Y3SBR4$D$ ++M%!PWJN4D+G/K+6XI5EFSE$2"+C'P>94CG*0GT)0AK>B.;\2XW=(,\1"41G$U ++MYNJ(U5#2CC9"MX?&QFF8UAMGFJE9R_/=H@B6_6&Y_6T$>[-2X^W8*;TQ23_T ++M;R;IMZ,;9!</S=X%[G9A!VIKCM,NUN2G;W/*K9V]N#X3YC=!@>^[80BQGY]@ ++M:E_AKX)^/_OUJW>^/O/.K\X\L!;)^1V\`WV%ZO),0I"OS%=QMCK[1S\6UB3P ++M]L@/B\K)9EFM;_NWBWYQO)L;E_@0EI6%#:*!9:C@*(@6D4'&*TP50PAY:9X? ++M.`"CQ)P&X$5)3#=>IOI]^HEV1W\S=7U>'BJ_4*.0DYI97DZO..>`<=E/UF3K ++M)W@G&:+E8I)K=F5)*M`;>\D;#E?7E)/E*\?.(BA0G#H,P+_Q!<=6I_=<;M,L ++MMK\[`Y=9(R7=2%DN>%G/W2U1^/:YMUE46C>]Y6K9:]I8D._!X&7&X$E+;I@] ++M)_QS&^QMO2!O*\LT=DQ2H6-$\CZY3E.8WY*PQ>_Y8W5?DG9#,<HD4LY(F90" ++MC/")CV2:[PNB3"JV.:*IND8+V-)R=5DRS0QC3#!XE&"@V`6W(IM+(T1P.*9$ ++M[8I_@<'7-?<GMD[(R(VB8V,76[X\0!A80*9+=(E!T)NP)WAP+BBE!<:`C4M* ++MN5IJS<`0]J9LP,AXKF1V+O*YE"8P)/"`=$F":9P:(?[-6%YE1[-3_TU-A[D? ++MMST2Z(+(V'I>+C4R^`&X,GYZSJK(=$>Y3$\,\2Z\?S8-7I@G9T\;O+C3:/PC ++M4-PJ*S9+O<:R0_L7O).$JX@(P[Y%RMQ!9S;WPV5=?X2S=NZ7`E[LRL3>S%[5 ++MI!X;#L(`'@-WP^\].8R4&*?.3G*1B2M$^!B_XR7XE,/R*8,%`T6A_!XET1`3 ++MA`:%/JP^@!,HE9N`(<>N0EJ'\5\,($=496YD<W1R96%M"F5N9&]B:@HW,2`P ++M(&]B:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N=',@-S(@,"!2"B]297-O=7)C ++M97,@-S`@,"!2"B]-961I84)O>"!;,"`P(#8Q,B`W.3)="B]087)E;G0@-3,@ ++M,"!2"CX^(&5N9&]B:@HW,"`P(&]B:B`\/`HO1F]N="`\/"`O1C@@,3@@,"!2 ++M("]&,C8@,34@,"!2("]&,C@@,C@@,"!2(#X^"B]0<F]C4V5T(%L@+U!$1B`O ++M5&5X="!="CX^(&5N9&]B:@HW-2`P(&]B:B`\/`HO3&5N9W1H(#<V,2`@("`@ ++M("`*+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R96%M"GC:?53+;MLP$+S[ ++M*WRD@(KB4X_<G"8!&A1%`1OH(<E!EAA;L"49$A4WR,]WEZ0=MPD*`S*U2\X. ++M=T;+YPQ^?*YSRK28ISJC0NIYU<ZN5[/D+I\7M$CE?/7L]JWJ!_(@V%,4:\;( ++M,N+$EE4D,K*#Y7(+C\9$,2=[6-4TBD4JR#82.;$6(H>K)#D>C[3L-F;_R+B" ++MV&!HA2?Z-AEWR7B"&[<-)#U6#2L:/:WN@4#,@8_0@0@/1.[=CE@6*?GN_C59 ++M6@,5I$/H?#H5!5D@6-U@9.,/#!.LN]@VK?$!1V![JEXA^]WE`=O["G9K'"G! ++MJ,H*8,9IH3VS`]P\(_U@RS6<VQM\16#_U[>'9G_"']S-DCMQT>F\H%H5H=W+ ++M_MD><6<Y1%K@(<DTB?%/D9\0@TQEF^HB67:U7]S^CAW%."#^S1%.FL&UN:O< ++MBV=R041J"@H&(E\`4THBQ"/33,T&--PD`/'5)118'E!0Q]S[`BT)X[6*M ++M::9X4#`-"HJ@X$U04#'R*\HE*3?8<3,@KA)G@2%]A^E^M"''R6U(7`_FB&+Y ++MMH:D;X4$X<.N1;-SF[JSJ3[1;X%FR<C)HJ/U[U`4L0_XYGP`0$=T"T@#KAK] ++MKG)"K_>MT\R:VN^NC3\,4O6=#_7/9U._EUZC'<_.'9!T3GHL\N)X#UAJZGS\ ++M94(?=68HUZ[GC6W,"!=5!2/?NH_&XBJEJ>9!4&^>'A]!?_\0I,;:B-AMX%(R ++M$R>N\0GADC)^"+$2XGWQPWC+]DAVYV-."5S<-"/.#7\]*+.>K*OLTC!%7J'- ++M[1A>7*::XD\ZY6SF8%Z!H\[@9(M#QEUJ;*;V@YW3C.;GVP<['\J-&;U7Y5L6 ++M@E\780%F4]Y0^"$/DQ/Z-7P(C+%@[3RG4O[C;'GA[-+K!Y?%SN9%[NP(BP+< ++MSLG6^$%G8!C$FC.XRKYW(\2-QJH'O7&&_L^R8<KB]Q>F;'T\#S&#T)6W9#(Z ++M[)Q49]SDA)I3GJHY=%Y1Q7*'RR7F9K>KV1\5QH",96YD<W1R96%M"F5N9&]B ++M:@HW-"`P(&]B:B`\/`HO5'EP92`O4&%G90HO0V]N=&5N=',@-S4@,"!2"B]2 ++M97-O=7)C97,@-S,@,"!2"B]-961I84)O>"!;,"`P(#8Q,B`W.3)="B]087)E ++M;G0@-S8@,"!2"CX^(&5N9&]B:@HW,R`P(&]B:B`\/`HO1F]N="`\/"`O1C@@ ++M,3@@,"!2("]&,C@@,C@@,"!2(#X^"B]0<F]C4V5T(%L@+U!$1B`O5&5X="!= ++M"CX^(&5N9&]B:@HW.2`P(&]B:B`\/`HO3&5N9W1H(#(U,2`@("`@("`*+T9I ++M;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R96%M"GC:?5`]3\0P#-WS*SPF0W)Q ++MDZ8M(X*38$`@=4,,IWX<E6BBZ_48^/4X'ZPHD5_L]VP]!T'304!3JZX!9VO5 ++MH(-A97`!K32`Q!A32'G49UJYE!2@VH5A&5<*AZ<5X2&P-P;I_M&R0F6<`UEK ++MH[2U47O?L\.QA4YUSD`_)V4_OO/C<A;(;]LDI#&&FSLAK:WYJZ@Z3C7D&]%S ++MV-:3I\<0*TEJ>1!5R[]CF+9/@5E]&O.<,&=<B/#7?;L1KJG9QX[]M$<F>/42 ++M_/_*J4P<@I"4C\7H<LTN?"`]N?M:?I*!HMY#1A0?_3-@1WNW\4.,,KI)BZ.- ++M%'OLV2\D>F$,96YD<W1R96%M"F5N9&]B:@HW."`P(&]B:B`\/`HO5'EP92`O ++M4&%G90HO0V]N=&5N=',@-SD@,"!2"B]297-O=7)C97,@-S<@,"!2"B]-961I ++M84)O>"!;,"`P(#8Q,B`W.3)="B]087)E;G0@-S8@,"!2"CX^(&5N9&]B:@HU ++M-"`P(&]B:B`\/`HO5'EP92`O6$]B:F5C=`HO4W5B='EP92`O1F]R;0HO1F]R ++M;51Y<&4@,0HO4%1%6"Y&:6QE3F%M92`H8W)E9"YP9&8I"B]05$58+E!A9V5. ++M=6UB97(@,0HO4%1%6"Y);F9O1&EC="`X,"`P(%(@"B]-871R:7@@6S`@+3$@ ++M,2`P(#`@-C$R70HO0D)O>"!;,"`P(#8Q,B`W.3)="B]297-O=7)C97,@/#P* ++M+U!R;V-3970@6R`O4$1&("]497AT(%T*+T9O;G0@/#P@+U14,B`X,2`P(%(^ ++M/@HO17AT1U-T871E(#P\"B]'4S$@.#(@,"!2"CX^+T-O;&]R4W!A8V4@/#P* ++M+T-S-B`X,R`P(%(*/CX^/@HO3&5N9W1H(#$V-#D*+T9I;'1E<B`O1FQA=&5$ ++M96-O9&4*/CX*<W1R96%M"DB)K%=-;]LX$+WK5_`H%Q##;Y'7IL4"!;I`UP9Z ++MR/:039W$K>UX[62#]-?O&Y+ZLF2W!0(#LD:/G!G.O!F2%Y<'QVX.3/#:ZL'S ++M<+,M+OZ82W9W*(+BRC-G-;>*Z5KPH%AEG>/"L/VRN"W^+21;L<)(P95BON;& ++M0XUPK!OTF4$?6;N<,Q%_\\L_,>T#D^Q;&OS,I&`?V=47P;X.=6T:,?NP+N;% ++MI\:JMC57YG6L#G1M&G'2JC!<N5>RVM>U:<0IJ\K*5XOP0->F$:>LRN!?+<(# ++M79M&G+1J[*M%>*!KTXA35A/77\5H7]5F6$3)9*N,6Z$&ST:QB(K#\6J.'<TU ++MV;DZ+P1W>$U/&:NY<]DHU+AG05/HC>)&L9H[3Q/?OBF,-J1%8I#T3`4NW1"6 ++M'*BIN40SD-Q/S:T-H1-S(ZR$I&"-8:FXQW>LRPJNS=BLLH8',S8K+;=,>4D@ ++M/*O',[7PW/L)AQT)6EONX;"CY/1AD>PYQ6M0P1-K1G:U#X2.[*8H&^GP?2+* ++MT;`QFCLS83C#2*SUI^%0GX!CG*TR!$RD(<ZVJ'CC3BJWM>>G/7/"GD.UHOR- ++MX(:5Q',-6A,O<]:E`(=[B5=M&#U%5ZJ:*(Z%F2,X1EF"&%`R"K/&;`$8U"`; ++M2+-4@^D-(\&.+E`-BI[@`D<]*AW=4L%034A/19<[`G'=T`C+:XSPGMSIZ?B$ ++M!7HN*1@JYLP2]P<N"C*KP")\DR"$F`J`!H_<5`#2SJ@QSX*BBH+8@[6SI)TZ ++MA&5HMF)852(22!./P`>:-HZM4=%F&UMU1$+02/=(V`N>KLDU4ZN8.F7)-P3# ++MMNU40JFC$9YK&A'9WO/O4Z%-H**SH!M&2*FI'OOK(Y:B]8%PU.#-4?1;JD/+ ++MV,4&]2XEZ`298;0/MZ;SZ<"(2#%X&`;LR3O"T3Y@'-INEM:-%"DTPO(1J`'[ ++M)Z)U>U3)Z.#DLFZ/%`W:/V&LVZT_HX.3P+K=HC,ZV+'7[5;:H/V===VL-8/] ++ME:\'JVO6VNZ'!GM7;X<^CE($I1S$*8L=;$!$U\%)[&#G!W`2.SB`81T:I194 ++M2E$,&C2+'0R2RL[M+'9P[09P$EM8"TU=J8&SV,$Z$JF%D]C!MNXPO'>`[QRF ++M]Q8@(H4.RV('HVI]YVT6.]@9VBI;.(D='.0`3F(+6QF;60-GL8/!IFXY2>I` ++M]!'7^9W%#@YA`">QA1W5;X]X2>S@1,01+^?%VT5QL5B`$FQQBT,4HH4-H4I_ ++M@N7IV`2P/RPV^925SEN+&WH\%Z68+;[A%97BL4<LWA6EHB^+-T5IFA?7C@DZ ++MC?'TI4)+M"[TYTK1S)&M&AGU5#4Z46Q2\:\Z^K?$+,2%O$5*X6UY':W"A*D9 ++M3`F!@H(->D/E8@'E+@Z1'*W7L=Z("-[DZ4*'_O3X"B[2D/ME7H84V(<JT"%@ ++M.:V&?Z8=B*]"QB&K[=/C:GV@@0K4=_J7M40E:1FKP\,V+434UHXUG%L)$AV' ++M[%]VCVF8UB;J"$+^8C1,7,M5^;"?58'[<ODTJQP/Y>.L`LE+6M^7Q0>XYY0- ++M8_>6Y\*4W-L>;O:K%"0I51CE:C>MHGQL\N/$P'!Y]S-N7)77SS,0L_P>?4<; ++M$4Z.??^IGG+[=(9CI_S.:HV3@U2<,E?N>ZGK?3X1V<8L^D3]*U&)KS)EXL<J ++M3L8L:64]#LC]&;;6*;`ON^5^IKDI-WAZE&F%K((E,=!XK=':1GHW2:_7(-MQ ++MH#/[MC/<4LKORY><,6/0"$:*3H2\E[&[W9F,F=/3T0*B@=6V:0O>^7$EG<KY ++MP_IE,TGQ\N'WLG[*P'U.G%9AT"3*P[G^8%)T#_>H!EW^75)IR_)PLTOR+`:; ++M.KE1XV#W/9R,%A1?*^1-E\+X^,\.J[MM[A<8])M*8R>*?EO:G9)Z!Y:1>OIG ++M_RWWJ]M$$3H!VW&&TKZ6NZ&J:9.9Y,GU/J?9"3G1MS\G!<&8D0)R#B,.'W<Z ++M]VTW44K/24&-T]CT_G-5/E6S2N*F6][.*@K>XPRT!0$J7$3*K[F@@IW:%'Z< ++M27HJ]?4J;CWO%X5D]*.-GRYZ=`G#=1(7`CPI?CAMVGBON$TXCAB.:$8X:AFP ++MB[>B.?4<$"H]DT)!>G"10"NB(ZO#D0LY=W1*C(]TW<`Y970Z4;6FN:Z.-YCQ ++M\:0\/.Y7V[O+O]Z_R\MHK&,VUY@:%^05'5A_QZ[W=!&;LEOVC/T_`.TUE/T* ++M96YD<W1R96%M"F5N9&]B:@HX,"`P(&]B:@H\/`HO4')O9'5C97(@*$%C<F]B ++M870@1&ES=&EL;&5R(#4N,"!<*%=I;F1O=W-<*2D*+T%U=&AO<B`H=7-E<BD* ++M+U1I=&QE("AC<F5D+GAL<BD*+TUO9$1A=&4@*$0Z,C`P,S`V,C4Q,C$P,S<M ++M,#8G,#`G*0HO0W)E871I;VY$871E("A$.C(P,#,P-C(U,3(Q,#,P+3`W)S`P ++M)RD*+T-R96%T;W(@*$%C<F]B870@4$1&36%K97(@-2XP(&9O<B!%>&-E;"D* ++M/CX*96YD;V)J"C@Q(#`@;V)J"CP\"B]4>7!E("]&;VYT"B]3=6)T>7!E("]4 ++M<G5E5'EP90HO1FER<W1#:&%R(#,R"B],87-T0VAA<B`Q,C(*+U=I9'1H<R!; ++M(#(W."`P(#`@,"`P(#`@,"`P(#,S,R`S,S,@,"`P(#`@,S,S(#`@,"`U-38@ ++M-34V(#4U-B`U-38@-34V(#`@-34V(#`@-34V(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@-S(R(#<R,B`V-C<@,"`P(#`@,"`P(#`@,"`X,S,@,"`P(#`@,"`W,C(@ ++M,"`P(#`@,"`Y-#0@,"`P(#`@,"`P(#`@,"`P(#`@-34V(#4U-B`U,#`@-34V ++M(#4U-B`R-S@@-34V(#4U-B`R,C(@,"`U,#`@,C(R(#@S,R`U-38@-34V(#4U ++M-B`P(#,S,R`U,#`@,C<X(#4U-B`U,#`@-S(R(#`@-3`P(#4P,%T*+T5N8V]D ++M:6YG("]7:6Y!;G-I16YC;V1I;F<*+T)A<V5&;VYT("]00D%%24\C,D)!<FEA ++M;`HO1F]N=$1E<V-R:7!T;W(@.#0@,"!2"CX^"F5N9&]B:@HX,B`P(&]B:@H\ ++M/`HO5'EP92`O17AT1U-T871E"B]302!F86QS90HO4TT@,"XP,@HO5%(R("]$ ++M969A=6QT"CX^"F5N9&]B:@HX,R`P(&]B:@I;+TE#0T)A<V5D(#@U(#`@4ET* ++M96YD;V)J"C@T(#`@;V)J"CP\"B]4>7!E("]&;VYT1&5S8W)I<'1O<@HO07-C ++M96YT(#DP-0HO0V%P2&5I9VAT(#`*+T1E<V-E;G0@+3(Q,0HO1FQA9W,@,S(* ++M+T9O;G1"0F]X(%L@+38V-2`M,S(U(#(P,C@@,3`S-UT*+T9O;G1.86UE("]0 ++M0D%%24\C,D)!<FEA;`HO271A;&EC06YG;&4@,`HO4W1E;58@,`HO1F]N=$9I ++M;&4R(#@V(#`@4@H^/@IE;F1O8FH*.#4@,"!O8FH*/#P*+TX@,PHO06QT97)N ++M871E("]$979I8V521T(*+TQE;F=T:"`R-3<U"B]&:6QT97(@+T9L871E1&5C ++M;V1E"CX^"G-T<F5A;0I(B9R6>513=Q;'?V_)GI"5L,-C#5N`L`:0-6QAD1T$ ++M40A)"`$20DC8!4%$!11%1(2JE3+6;71&3T6=+JYCK0[6?>K2`_4PZN@XM!;7 ++MCIT7.$>=3F>FT^\?[_<Y]W?O[]W?O?>=\P"@)Z6JM=4P"P"-UJ#/2HS%%A44 ++M8J0)``,*(`(1`#)YK2XM.R$'X)+&2[!:W`G\BYY>!Y!IO2),RL`P\/^)+=?I ++M#0!`&3@'*)2U<IP[<:ZJ-^A,]AF<>:65)H91$^OQ!'&V-+%JGKWG?.8YVL0* ++MC5:!LREGG4*C,/%IG%?7&94X(ZDX=]6IE?4X7\79I<JH4>/\W!2K4<IJ`4#I ++M)KM!*2_'V0]GNCXG2X+S`@#(=-4[7/H.&Y0-!M.E)-6Z1KU:56[`W.4>F"@T ++M5(PE*>NKE`:#,$,FKY3I%9BD6J.3:1L!F+_SG#BFVF)XD8-%H<'!0G\?T3N% ++M^J^;OU"FWL[3D\RYGD'\"V]M/^=7/0J`>!:OS?JWMM(M`(RO!,#RYEN;R_L` ++M,/&^';[XSGWXIGDI-QAT8;Z^]?7U/FJEW,=4T#?ZGPZ_0.^\S\=TW)OR8''* ++M,IFQRH"9ZB:OKJHVZK%:G4RNQ(0_'>)?'?CS>7AG*<N4>J46C\C#ITRM5>'M ++MUBK4!G6U%E-K_U,3?V783S0_U[BX8Z\!K]@'L"[R`/*W"P#ET@!2M`W?@=[T ++M+962!S+P-=_AWOS<SPGZ]U/A/M.C5JV:BY-DY6!RH[YN?L_T60("H`(FX`$K ++M8`^<@3L0`G\0`L)!-(@'R2`=Y(`"L!3(03G0`#VH!RV@'72!'K`>;`+#8#L8 ++M`[O!?G`0C(./P0GP1W`>?`FN@5M@$DR#AV`&/`6O(`@B00R("UE!#I`KY`7Y ++M0V(H$HJ'4J$LJ``J@520%C)"+=`*J`?JAX:A'=!NZ/?04>@$=`ZZ!'T%34$/ ++MH.^@ES`"TV$>;`>[P;ZP&(Z!4^`<>`FL@FO@)K@37@</P:/P/O@P?`(^#U^# ++M)^&'\"P"$!K"1QP1(2)&)$@Z4HB4(7JD%>E&!I%19#]R##F+7$$FD4?("Y2( ++M<E$,%:+A:!*:B\K1&K05[46'T5WH8?0T>@6=0F?0UP0&P9;@10@C2`F+""I" ++M/:&+,$C82?B(<(9PC3!->$HD$OE$`3&$F$0L(%80FXF]Q*W$`\3CQ$O$N\19 ++M$HED1?(B19#223*2@=1%VD+:1_J,=)DT37I.II$=R/[D!'(A64ON(`^2]Y`_ ++M)5\FWR._HK`HKI0P2CI%06FD]%'&*,<H%RG3E%=4-E5`C:#F4"NH[=0AZG[J ++M&>IMZA,:C>9$"Z5ETM2TY;0AVN]HG].F:"_H'+HG74(OHAOIZ^@?TH_3OZ(_ ++M83`8;HQH1B'#P%C'V,TXQ?B:\=R,:^9C)C53F+69C9@=-KML]IA)8;HR8YA+ ++MF4W,0>8AYD7F(Q:%Y<:2L&2L5M8(ZRCK!FN6S66+V.EL#;N7O8=]CGV?0^*X ++M<>(Y"DXGYP/.*<Y=+L)UYDJX<NX*[ACW#'>:1^0)>%)>!:^']UO>!&_&G&,> ++M:)YGWF`^8OZ)^20?X;OQI?PJ?A__(/\Z_Z6%G46,A=)BC<5^B\L6SRQM+*,M ++ME9;=E@<LKUF^M,*LXJTJK398C5O=L4:M/:TSK>NMMUF?L7YDP[,)MY';=-L< ++MM+EI"]MZVF;9-MM^8'O!=M;.WB[13F>WQ>Z4W2-[OGVT?87]@/VG]@\<N`Z1 ++M#FJ'`8?/'/Z*F6,Q6!4VA)W&9AQM'9,<C8X['"<<7SD)G'*=.IP..-UQICJ+ ++MG<N<!YQ/.L^X.+BDN;2X['6YZ4IQ%;N6NVYV/>OZS$W@EN^VRFW<[;[`4B`5 ++M-`GV"FZ[,]RCW&O<1]VO>A`]Q!Z5'EL]OO2$/8,\RSU'/"]ZP5[!7FJOK5Z7 ++MO`G>H=Y:[U'O&T*Z,$98)]PKG/+A^Z3Z=/B,^SSV=?$M]-W@>];WM5^07Y7? ++MF-\M$4>4+.H0'1-]Y^_I+_<?\;\:P`A("&@+.!+P;:!7H#)P6^"?@[A!:4&K ++M@DX&_2,X)%@?O#_X08A+2$G(>R$WQ#QQAKA7_'DH(30VM"WTX]`78<%AAK"# ++M87\/%X97AN\)O[]`L$"Y8&S!W0BG"%G$CHC)2"RR)/+]R,DHQRA9U&C4-]'. ++MT8KHG='W8CQB*F+VQ3R.]8O5QWX4^TP2)EDF.1Z'Q"7&=<=-Q'/B<^.'X[]. ++M<$I0)>Q-F$D,2FQ./)Y$2$I)VI!T0VHGE4MW2V>20Y*7)9].H:=DIPRG?)/J ++MF:I//98&IR6G;4R[O=!UH7;A>#I(EZ9O3+^3(<BHR?A#)C$S(W,D\R]9HJR6 ++MK+/9W.SB[#W93W-B<_IR;N6ZYQIS3^8Q\XKR=N<]RX_+[\^?7.2[:-FB\P76 ++M!>J"(X6DPKS"G86SB^,7;UH\7114U%5T?8E@2<.2<TNMEU8M_:2862PK/E1" ++M*,DOV5/R@RQ=-BJ;+966OE<Z(Y?(-\L?*J(5`XH'R@AEO_)>6419?]E]581J ++MH^I!>53Y8/DCM40]K/ZV(JEB>\6SRO3*#RM_K,JO.J`A:THT1[4<;:7V=+5] ++M=4/U)9V7KDLW61-6LZEF1I^BWUD+U2ZI/6+@X3]3%XSNQI7&J;K(NI&ZY_5Y ++M]8<:V`W:A@N-GHUK&N\U)33]IAEMEC>?;'%L:6^96A:S;$<KU%K:>K+-N:VS ++M;7IYXO)=[=3VRO8_=?AU]'=\OR)_Q;%.N\[EG7=7)J[<VV76I>^ZL2I\U?;5 ++MZ&KUZHDU`6NVK'G=K>C^HL>O9[#GAUYY[Q=K16N'UOZXKFS=1%]PW[;UQ/7: ++M]=<W1&W8U<_N;^J_NS%MX^$!;*![X/M-Q9O.#08.;M],W6S</#F4^D\`I`%; ++M_IBXF229D)G\FFB:U9M"FZ^<')R)G/>=9)W2GD">KI\=GXN?^J!IH-BA1Z&V ++MHB:BEJ,&HW:CYJ16I,>E.*6IIAJFBZ;]IVZGX*A2J,2I-ZFIJARJCZL"JW6K ++MZ:Q<K-"M1*VXKBVNH:\6KXNP`+!UL.JQ8+'6LDNRPK,XLZZT);2<M1.UBK8! ++MMGFV\+=HM^"X6;C1N4JYPKH[NK6[+KNGO"&\F[T5O8^^"KZ$OO^_>K_UP'#` ++M[,%GP>/"7\+;PUC#U,11Q,[%2\7(QD;&P\=!Q[_(/<B\R3K)N<HXRK?+-LNV ++MS#7,M<TUS;7.-LZVSS?/N-`YT+K1/-&^TC_2P=-$T\;42=3+U4[5T=95UMC7 ++M7-?@V&38Z-ELV?':=MK[VX#<!=R*W1#=EMX<WJ+?*=^OX#;@O>%$X<SB4^+; ++MXV/CZ^1SY/SEA.8-YI;G'^>IZ#+HO.E&Z=#J6^KEZW#K^^R&[1'MG.XH[K3O ++M0._,\%CPY?%R\?_RC/,9\Z?T-/3"]5#UWO9M]OOWBO@9^*CY./G'^E?ZY_MW ++M_`?\F/TI_;K^2_[<_VW__P(,`/>$\_L*96YD<W1R96%M"F5N9&]B:@HX-B`P ++M(&]B:@H\/`HO1FEL=&5R("]&;&%T941E8V]D90HO3&5N9W1H(#$V.30U"B], ++M96YG=&@Q(#(Y.#8T"CX^"G-T<F5A;0I(B5Q4"7A4U17^S[WOS81L!`QD0WG# ++M(U&RL(1&MC0D9"9@(2$+RX2"9+*0!`F90("@D46$T&&5#U)!Q%)`@A1\H0$" ++MA19W^V$(1:MB+4O4@B*0]OL0"S*O9P9*H>]\[[USSSWK?\\](``A6`*)W/$% ++M`Y*+W<X#0*W&TIR2*I>[(#&D/U!C!VAGR?Q:K=%]9C[O?0E8!LYPEU<M>'S/ ++M#<`:#*A&^:R%,Q*[7DL!$GL!`SLJRERE'XR^DL/^W&SS9`4+NE=U6P<$'^-U ++MWXJJVKK)AV>7\OH"$#Y\5G6)"U<F;02F\7:XO<I5Y^YRF#:Q/:^AS795E=4> ++MS;@%S`W@]8_NZKFUG#<_<R[[]MUSRMQ7]M5T`#:.'WA'/8HH?J/5W8A2XA`) ++MF)?XO>S[>RO-R[Y]WU]\Q]:M]UZ@"?NH$OOP)[Q-G6SU)HZ@!1\B`G9L13TV ++MH@$63&')KY#/I+)\(T69+1B`[9S/=K2Q[F0LPE'TI$CS6RS&<ODQ6RUGI/L@ ++M`[FHQAH:9\[#5)Q7EF$(QF$VW+3$=)IKS0WF3NS"$?FA>0=!B$8)4YMY3?W< ++M_!));+$)FW&>-G0YB'2.LH0U7\4<;)'3%#++S5N<@0T+.`<%V6BC$R*!O9?A ++M$D52O<QD+SM,PWR7M7HQS!78@J.40J.%39UJ9IMMZ,DQZMCK9AS`(:96',<7 ++M%*QVFCO-3D0A$4]Q/2TX12>D]\Y2[TA&3&64^F$8[U3CC_@`ITFGMT2U&JPF ++MJ^GJL^8G",<@3.1L=[/E/^BF6,2T6+ZO9)FC$,JXO.1#&^_A(D73`!I/DT0_ ++M42VVR3D(X(B#F$I1R7B_S-[/40(=$L&B7>Y0]BJW+8]Z+YBA?")Q>`6OXBT* ++MX4HUFDLOT*?TE<@4T\4KHD-N5/8H9ZPNKOII5&$-]N(F=:>AE$>_I`JJIP9Z ++MB393&YVFRR)#3!#/B.NR0M;(X\HHI@)EKK),7:&NLESV.KWO>O_BO6DFFRN0 ++MQ_VPE+/?A&U<V1&TXRS3>7202D$4RJ21C2;2<TR+:`W]EIIH#[5PE-/40=_2 ++MO^@&W19@LH@881-]F'0Q1RP0&\56T<YT6GPO_BTC9!^9(%-DJBR4U9Q5@US/ ++M=%!>5**5=L5DG)/51O4UM4G=J[ZM=EJ"K2\$(."CGW;<B;]SS@OO2F^C]X"W ++MQ;R('GR&T8Q";Z1R]BZFF7S>C=QQ;^)C"F;LHBF>TF@<(S.=9E(-U3&2+](6 ++MVN7/?3\=8Y0^H^N<<XCHY<^YOT@1H\1XIJ=%F:@1Z\4&T2(^%;>D50;)KK*' ++MC)>CY319)FOE0MDH#?F1_+OLD#_(GYA,)5#IK?11XI0$9;0R79FG;%,N*9?4 ++MJ>I)]1M+H*7*LL+2:OFG]4EKFC77FF>=9EUG/63])*"(N_,=',1A//#0!;E4 ++M.N1!K!6#E2AQ2ISB?IZ.4IDMN%-%$ZT4SU.+Z*O664:($92#3B6.L7Y?O"9^ ++M$"-D-HVE`LP4@^YZLX0K;_`O57D'5Y5C7-LI]EQG":9%XKHE&`<(8AC'?$\. ++M5!+D27PASY-5V8Z_*8$405?%;IG+77!<25.=L,FMV"]KZ'D<%`Z>3K<#5G,? ++MY]`;/!<F4#+]*$U(D<-=-$1^A65X1GR.JWR/5^+75*J48RT&4STNX76^%?W4 ++MV99X2P_ZLZA4/.(1:H%0]G!UPZ@O234<+](TN<5R79S%/+0K@3@G?\?9MXO] ++M,EOI5/.I@F_`\UB!&G,I%JI.Y0R50](DQ"H7>+K5RV3%QO_%/%6F\DP[Q+?[ ++M*,^!#)G-DDCNG''<%Q-Y0FQA>IGGA,(=5,EW?#)/L5-HL4P0K2A70XFG#J"< ++M].9CBODZ-IOEF&UN0!+/@P:SGCTVX1NL0Q,M]SX'-Q[CFW..QJE9HEW-,I.$ ++M1YP5!:+QX?-EM&,I$M\Q[4<6TM0_P*-\A@*,-%>;?^7N?H(G[&84XQ?XFJN\ ++MQA'&R!,8[,T1S6:6='.]YY%G[C9[4R`JS%D8CV/8957ALB:D9V2DCTS[>>J( ++MX<.&#DGYV>#D00,']$]*3(CO]\3C<;%]]3XVK?=CC_:*B8Z*C.C9(_R1[MW" ++MNH:&!`<%=@FP6E1%"D*B0\\JTHRX(D.)T\>,2?*M=1<+7`\(B@R-15D/ZQA: ++MD5]->U@SG35G_)]F^EW-]/N:%*:E(C4I47/HFM%FU[56FI+G9'Z-72_4C*M^ ++M/MO/K_?S(<S;;&R@.2(K[)I!19K#R)I?X7$4V=E=<U!@IIY9%IB4B.;`(&:# ++MF#,B='<S1:21GQ$1CN'-`@$AG)01K=L=1I1N]V5@R%B'J]3(S7,Z[#$V6V%2 ++MHD&9)7JQ`7V4T37!KX),?QC#DFE8_6&T2E\U6*4U)Y[PK&X-0W%10G"I7NJ: ++MZC2DJ]`7HUL"Q[4;$<]^'?F_)3OOGNEL>'`W1GH<D96:;^GQ-&C&;_*<#^[: ++M?-_"0O;!MB(VJ\B3Q:%7,XAC"S2.)I87.@U:SB$U7R6^JN[65Z8[?)*BF9K1 ++M11^E5WAF%O'11'L,Y"^T'8B.3C]B7D"T0_-,<.HV8V2,7NBR]VH.AR=_X>^C ++MTK6HAW>2$IO#NMT%MCFTZSTF..1!INS^GI_SJ_NXL?GWD25?1OI3W!"&5J)Q ++M)DZ=:QKJ^Y0-A:=D**OQ4TAL993RB50:73*+/&'#?7*?O:'&ANF:YP:X`_2K ++MWS\L<=V36&+#;L#'^OKD?JOQ_G]Y(R'!B(_WM8@UD\^4<TSSKU.2$N>W"EUW ++MAVG\8_B0R]BZ"H</8/AM-M\!KVI-1S$OC"5YSKMK#<4Q_^&^6H.KNJKP.N?L ++M<^Z%@@3BA4*&DA!2H!`2$GE%D,LK!2+0$/(LE?"P4@*"Q59T:+E,((1+HA6% ++M28'2)(+$!(<+I#8P50)C&ZE3T(ZA:O'11V9LXUC:H9TIE!R_M<\^EYL#T]"J ++M?\SDN]]>:[_67GOMM?<Y0<&T,<41O91K6MV:0#[7A-R::/?29$1R,_%#-A#Q ++MWQO][Q<W,'[.ZJR(-O!3JK_NU.?D)>?DEA0ES@F7*M_F+.DF.?63HW6J%(F? ++M560DZ*JD)QBR%D&Y--J8A:(^$9&"?TL&]:H6GQ]1*35:8G8DKG2N\UO<.RGI ++M#CNUV%>XEZ2;W929D:PQW>4O=Y.[F=<G;,!@7((Y2TK"X=[=ZA!JSH3S%"'B ++M:4E14N*L".7C9*;@O\5NG<PH3H@$X;)9W`#QYZB4V*UA@BH7XX^C,W5L-A)= ++M.)R=G)@=+@TO;[%#*Y(3XY+#I_1S^KGPACFE;N"TV*=W)42RJXKAJ]5:5BKO ++MJ>\K70MI5AQ=.]:5&9<E=SGFS^QK*17?TPH1_37ZFMA(`6">;RA]QRR@(FT' ++ME>B-M)EA#*6@.$J/HFTCY!G@T]P7[?.!OP%3@0)@B-(M`)8#>2RC[2GNBS$V ++M\#B2-U*)?QBM-POL&YAOK]E&#P,'4:X7;U&#-87603Z$?F<$T21N@SY[K4:J ++M@?X`ZE="=Q!<!+D.Y:7HEZ[*O7S5^-8!`Q;THS'.+K7>D<99FB@VVF]@+<48 ++M<SY0@3D>`&<#.6@3#YX)[-#:J%)KL^M1#Z9RS+^#]<!LQ7,QSG;43T>_$9#+ ++M41X".RQP/R`)&*4?I2GZ%^D%<!K67^BL&VBCU;SFZ)I@O[+I5C@VYL0"<_X2 ++M2-:GV!W@7C&V>5'NP3PCDT+@,B`!R-5?H77BJZ3!7T^;'60P\&')?OHK,$VL ++MHH60-=B99S;3/I:!!1(;[1OB`-4:5VDRZKYG[<4Z\"7++T?](TK3_TFI5@IM ++M07S-QOA;@8,8\Q\R'E;1$LP_#IPI.F0,50!5F.L]UT_L&\A;L:^+,=<G_,&+ ++M_GG`_=B7$+"6[<'\:>QSWG>MH&L*VKZ--DL9T`^2P-HY)KD/]\=8*2H.ZV\R ++MU:---?SZ=[```FR#"QEG"JA[">,,!BQ@*#`.Z`#J@3(@"W@>&(6Y"?,:,EX1 ++M,QR;,CX0&V8;?`C;9,PZ:S@H]],Y,W5J+)XGR3I*90I)/":?%XY9V'+<'9O/ ++M%,>,RS*^RSCNM?=YG1Q34<;9$YUT/]L@SR!BRV4^=["9S\->/9\JP?L0Q^4< ++MLVR?R^P7CC7I$YP)Q5-CUIHNSPC8($I6L5[NLNN+**^F0QBSU%J!G%)+<\6W ++M\7;](:T05VBV,9K&F>G083UH&]$[:;$?[UKLY2+(3WNXAN%KU]:8K5AG$_S9 ++M3L_`I]\2[?IPT:Z99I/]CDG:>;-)?U*6;V$OM%:GCID16_=9]9\'^B6S"3FS ++MR7[7;+=MK&<WGPE?IY8.)+H,_0D@!-SG'Z/5^,NT%E\^Q5E$5X'U(DA99I`F ++MB5;L3P!Y'F<!^GSS#3IC5--.T6[_20M12&^G"E^`EN/[HQ_/I5^B<@:/#]X0 ++M$T?=8LX;2RZ[\>IESODJIH:!+9R_"PIO*WP$?(@X^HGFS#&)\[.\'Y"C@0HG ++M7NUKT?@\3X?!N]SX],1IF2<^^WCCTLOR;D%^=\\I[-CIKI_S(^<XSI&<YSC/ ++MN.V]'-,_K#<BCCD/OT(EZEP/5Y@/&]]49Q]Y&/M=:-M6MGW$:K8;C`%V@Y6! ++M\A\!TSZ"=6^*WJE%=I>Z3T>[=ZFCI[O<>]3,I'4JGQV2^>8#^K&\1PND?;VL ++M8[3%O(Y]1PZ4]M:J,PA_PNXR40J?[Z,JK&.PL0/G$7I@*?M$[@71W7PO\)UH ++M[(&?^2ZJIG+C=;P7N&\F]9?WQ70JA.WGI0YW*C/KS$*JMSHI0^0CU[;2*MXK ++M7@?;PWOO?XSZ^@/($^TT7OP,;0+4&^UJI0^"=$3&!?<MP^L'OO"M)!]B=B': ++M\'AULD^0!BA_')*^D/WQ%N'X8E]@3"M`B^5[HI.>-?.I$&>HSA>B.BL?9RY` ++M#1CC,/KELRWH-T3>UWOH09RO2N2F2N0<DO%?8E\WFK">3<CK@!&"CYKH;C,$ ++M'Y;)M<\63H[=P>?':*1[.4:L/<C#_)[80V$QAN98950-7;6)/(EY=T&W#><W ++M'6=W)_H/4WF;,/=.Z+GO='[+\!N!SXLO2/%62+X#2-K`[Q3,;[Q#=<9\JD0< ++MS_#O@1^V4RKN"PVQ=P\PWH&4GU2H<B!U<0YK248</2'UF?2JWFC<A;CE._24 ++MV$J/B`+*,,;38-&?4L7O<58_IOU&/UHF7J;]HH6J6!;Q-,K`.]=HQMN2]1?I ++M`=;KKT*NH1(Q%?TKZ9MB&6TTCB/V_D"]Q</8:_0SOX\X&8'^'V!<!>TM*C$* ++M<+8J4/[8/LKMY!S-=B%#S*54V2\&TE87'IOU'/AM/O84]G*YF[VP-6JG:^-M ++M[)/KY''1C]N(_325R+X,I#C<E:M74Q-0J_^99AD+Z+M:`Q+,`<K6.H`#"C^G ++MN9*/`[FXXR=HFX%Q8@(]#VQ%>2SX5\`Q1\;;;0*]#FS'V&?!)_F[@*'/I(G, ++MT!T$:H#?NG6QX+ENIX^%F4#=Y><HQ-"NVC<8WO;P\T3,-U%,@S\!Q.)3#&L+ ++ME?@>Q_Z-A/X>C.F1,4^&>([6]&1/3]`N4KKTH8-@[!K=_0`/O`-<CN%$9G4W ++M_$?V?1Y@?[<`#TG__HL"*H:^H%VBX>`"<('Q&&UB0$Z%7.SZ4[N*6&,TT(^D ++M/KI_CAZQ0GC'3?/JO;)W7WN2]9-T.!9N'$3C83=M8XCI:`]X9?]YVL:P7D3= ++MB[?*XD@/**'[C'W2)I(QYI&M1;@S`7T$;!TB^U0QHO)%G&6`V\K^?:F:(<\N ++MH#?3(XQH_03D;R#&KQ/9KYA3UKO[X^Z+=W]@7U!<`$IP5UR@='`>>(;+T?A6 ++M^:);S.<Z\1Z5.9=T>-K</!,WS\9%OFMN/^;_$W!V7@;:@)?^UW-QEN$<$<=Y ++MXC+>(=/QCFS'^^1!*B>Z@5SR21KP4^2A)>#7H,/MW34:Z(MR?^B^`7Z&Z/J' ++M*#\*?;L#6Q<)5*O>E8.A^X7JZU?CY3G]K_^&Z!HBZMHQI__U1F`-RN\#3Z#\ ++M%_!9<`W:OXM^V\#GG/H;RR`_#KP`N1/R6J`(Y:?``?!8(!X8@/Y[&?P>N>4[ ++M]+_.M__^N%/&FV4E[!P&/@W>[/V&N&-V][,']GYKN/O?$YOJ6^)6=OR`;Z8W ++M\>Z+Q'[[?-HWCLO83_6'!V$R]3,&T7N`#1@T#+]IP")@&?`#X%G`DNU8LQ[8 ++M`IP!KLB:H#'HQ.[,8`MHEZ23:]9F2'&Y(RY]2(HG"XL=7I#K\.QY3K,LI]GX ++M+SGJ<3,='CG6X0$I&2'FWGTS6F<,-`;2[P"=-N!7TW_];\:K/[:)ZXZ_]\[Q ++MV0F)SPX)"7%\9YP8R%$20L!``CZ'>#"\-`%2%&<!`B$2@TX-,A`5;>PB#17: ++M\D.=EA6F+:A_3-/:JA<'F/-C2Z9H[<BZ4K6,2="6T$7;^D=(01,M@N!]WMG` ++MV)BT>_Y\O]_[?C_O?=]][]V[,W%02F1R5L@C!L`$:]JC":[^$G]E[XA@(51@ ++M`B6[B)P<%6@\VUD9RF1)-DU<6`8WV50JPJ;Z<YR5O:$-['/R#C`"".QSM!OL ++M!MZY$WB<'9!!H!<8`2X!TX"53:!=1_N,?0;6IZ0<"`+;@5Y@!)@&1/8II,0^ ++MX9N#*;D=!!C[!%)BUW!9UR`=^$*D["J[BJE]'`^LK!PP#;4\;<BE:6-.4=IP ++MY5<FV$?QNPOE!/MKOZ+*9T,5[#(Q`(9DES'X9:(`C4`;T`E885V!=87HP"G@ ++M+&``^.<!*0$*&P?>!ZZ0"D`#&@$;^S".-`EV*>ZOE4/Y[`/V'IF#HOZ)_<'4 ++M[[-W3?U']GM37X3V0(^S=^,>F82R$"?H(T%+T.6(9[#?]9>XY&3(R490'AFR ++M'`@"#<!VX"1@92-L7GR7[,(@0V0<^Y[,XN0+4_^"O&$CVAY9\Z_%&E.X\*]: ++M#0NB5^GU,\W?<QJG7/A/O`:+"_\/7X7%A?]0-RPN_,\?A,6%?]<>6%SX6[;# ++MXL+?T`0+(L%^_NN2^7*@82]50@[6A2IUH4I=J%(7L;`NWLA="Y_;3^-E9:C8 ++M&4U=6";K@U0?IOHFJK]!]0ZJ'Z9Z-]5KJ+Z-ZBK5W53W4%VC^A!=@5+H5#OW ++MQ.E*K8#JXU1_F^HQJONI7DKU$JHK-*`EF#?^S:6F"INJ/\2?*^C5:RH=F*,7 ++M%?5B67OQV(]`7@*2YID&DC(O12[T<#VOORR8.E^\JO*%T'HVAHYCN`UCY#I@ ++MP0T:PS(:PR!C&,`!&02V`Z/`-)`$K&#/P\1/FM(!60X$@>W`#X!IP&I.9QI@ ++MY(7T%-\Q)U:>GG0#/V-C://0O,RK%4MN2976"R?=U.&A#9ZDAP5(/K[7B<MI ++M<R9H]H6OLK_^*IO80W9V@ITDQ;@1I]+Z9/QNL9R@K\?]0W(HC_Z$>"Q8=70E ++M\=-2Z!7X]./GRXC;QG45<;,WH2OC[BWHYHC[%\F#-(?WNB#?=4_*7[@3#.8_ ++MW$/R7Y2$A<;E/\/SY@7YLON8?+$\88-GV)^@4(.*21UPKY#?'C>IW0B<B<N' ++MN;H@?]^]3M[K-@,=J<"V&,XTA[S)WR*OQWAU[IVR%L.8%^2@>YM<DV(MXWTN ++MR!68@IHRRS#9A6XSJ<]C#OA<($%W:XO$'K%9;!"7BY7B(M$KRF*Q6"3.MKEL ++MDBW'-LN6:;/9K#:+C=F(;78B.:&I^$(ELZT25_Q]A#\AIBTQ+B',?8W:&-E` ++MC%PAPB*;:VG$&&TGD9V*<6>S+T$S-[88&;Y::K@B)-)4:ZQ0(PDQN<D(J!%# ++M;/QV<Q^E)Z+P&NQH@I*FY@1-<M>1(L.UMGF`4.H\<KR(ZP5'CD>CI"#_8+`@ ++MZ%KC7/F-NJ>(MK14'Q\%3]C%1D]D<[/QJ^*H4<F-9'$T8OQHL]+:/$!OTR_# ++M=0/T%E?1Y@%A#;T=WL3]PIJZ:#22H%M,'E'H+?"P8FZ9/)N'*)Q'%)LGQ3N3 ++MXI6B/W@E7(%GMY-2DU=JMYL\"^6\OEA)N*ZOI,3DS%%(S.3$YBC_SADO!:>T ++MU.3DZV3<Y(SGZYQCK#$I;C<H'K=)H7.)VZ2XZ5R3LN4QI3Q-.?:(<LS,)-#' ++M''>*DSWQD),]`8[Z_QX=M:I*^ZNC[:WA#E^XS1?N`-J,5P[N+C#TG8K2UQ[E ++M`<40_&T[VW=SO:/#B/HZZHQV7YW25]WZE'`K#U?[ZOI(:[BIN:]5ZZB+5VO5 ++M8=^.NFC_NL:JP!.YCCW*5=7XE,$:^6!5/->ZP%/"`1Y>QW,%>*X`S[5.6V?F ++M(N8:;VSNLY':Z-K6E.YG69E8KVU%WFAMOM2YQER\U=Z"PT6#%OZG,4N-&K-\ ++MM48VP$//A)X)\1">*1[*@=N1#A4<KO86#=)?ID,2W$Y?+5'W'X@=(`7A[]2E ++M?C$<<.T_P`N>DFKL?QV(A0UM1UUL/R$1HVQSQ`AN;&GN$T5XV_@E&:L>^K*R ++MPHGD:,JY&,Y5W"D(CXC<5\-]=GN:^-_W_T!:K^5/@<Z&^JGFH?M)+"H8GD@3 ++MPU;0U()K;6UI'L3G$G\]Q**XP!A5:>SA&.:T2<HF_'H?8O^!M)6NP_ZT3O5" ++ME]C#<CPZT`=;%38JB`PTO%U$4GN.T4FKF&"GM5R289D42*9HF:2DT&;-F&3" ++M,%M"[/0T74P*5.E.S4S-L](_:^IG:D@0MG0?8DF%U^EUED)@6R3W%6'TOI9! ++M[A'%,LKWQ>\]V,C:,C[&W\'56N9\!S9-EVB3I`1=VD]Z<VS0FE/LS=E&!$E0 ++M!$%XR_FS5WFJK3-WIJ0[4\@31`JZE?J9LRJP/+#4*J+E291>__$']2W#W2_. ++M7^U3J?I@XS#]FN;<O#IS[\/HRSU#OWD@/U#^(_^L!6R!Q.R9$B4N.Y]!9J]` ++M^0P<^.#?YLB1<UC.6ZZGY\_U$6?5?#_:TOPY^7D2F^FFJCIO]?Q#W<,M]9<> ++M;*03],;P0,_++1_=F[EZ\\%M_"NE)$03;`_[+BJ]2"OL9)T"JZ?UC%$?87,S ++M.D$HM'0>+U"?E2:W2G\CY?532RK(/B1;YLT+L84T<?X\[A=Y+OEWBS-C%-=0 ++M3,Z?LRJ%DCN1_#+.E*S?)B=(/N`"''A3[;187V)'LXXZ+N9DV,6L`A;._5;> ++MAL*U14VYK7FMA9N*]HI[L]ISG\_;6]A6]"+KLA[,.N1XR?JZV"-=++C*KEBO ++M9%USS)WKL63,]F1GSXG9-:^OJL).B5VR,_LIV1DC6.U:#KP*T3"U4Y[W7C'+ ++MI:):6_>I*-A4<(H7;!_92E;P@P*YDFOYTLK\?!<*]R^FRP0HBC.+X]_W]<E, ++M?S/=S1PP1]/#X`@.(G(Z*XEMU,IB1%/QB-<4B5!(&+-&0=<#10F"&A,A)EZK ++M%A*-8"1&Q#B"68]8NF&SE6PPV3*5Q-VL$K66:-6R9K>$8;\>P#@UTSU'U]1[ ++MO_?_O_>:]2:.]L6*MLR,'$GT>1,Y=FZHNW%U6\4S9=V'KZ]M.-=26=G2LK%R ++M>A!U0QH^=:+P=&3P6W+O]FGKWK/P8&3/_0>P%);]_$JMKJ^;!-`CPL8`RC65 ++MTK"4%:*KT$ZTCZ=/T#`&L`RB8A@H(-AEB,8NZQD!J&O#(3`:-F<Q(RFE,U!E ++M-`8Q\<8.F`>W@*'*K/#[H[D-Z7Z2/0"E@)XA"/H]7HEEN>P<HDOTJ'UR]YP] ++M/XZKH-<_79GPX;-=A7I\>0#0'(E/`3]I.1.9B6PG<X'MY*[QG[FX?&&!,,<4 ++M$HI-Z^1UL=OD\_)MQVWG`X=PP7@V%CG)?N<6%9']X^`#P)$"\^0<,_A`<R@& ++MD6?9+I?#XG(Y>)>#@HAWN"BLB&%TY/0L"9+M+^X,5BP,4,*H4S-#)!C*[=TD ++M'KV>L!-M!BH0X01-D,Y,0H5H.:I"-.I`263'VWEJJ*!]I*#^/+&O-VKU2;T# ++MP5N2K.=.#G6F-+]I@WB%?"`DP$B5)X`@#*X<9?7X<@F1G)SL+%)>EAN=H]?> ++M:B&DR)/F^G.1?=1[^^\W[UM??0">B_WO7[L?_O;8Y:;%2FOKY+RBBQNOW"X) ++M[3JP/?:+&_=:YQ\_?V3KR^,)R7F#/;2-D/2#;BV9P38\#==B>IKTHK3:2;U@ ++M6R:668IMJ_!:2RW>;MGF/(H-C$KIZYO1*&`3S4$O%J`.2"-_U@GC0`K`,+M= ++M$*QT7`<Z`N)1J99D55P,K:1@N;Q07:XB=1-7[HMZP`>!3_0A7_W8N#"<T!;? ++M#3O(F@R(<HR_FB$U#-\^->*'OF%']`6'3#%`^`7&]8I1D$,<B8H(.2(DN"(V ++MUZ8[(HJ,RWW\=H2>CH_3C\";Z)O7GO!NJ.IDTX;,&1;96!ZN+7MEAZ7=<^_# ++M-5VADN+J^LB=;RX-PM?C]M5]5%UYV'((K=E05%U3HYZYMK2MN/!`FO+)6Q<C ++M_^DA$3N(.D6F@[@'@SXM1YXOE`K[A1;A,X&90<W`[]"43+0%!);B&(.1XH`@ ++M8-Q%T1:*HBD,D(!ICNHD]Z(\&2N-F@'0-+D$=!GH,"HYRS`&S9V090B3>S/, ++M:8G>+&Z3)YNK-R/=<1A;L@`2D8HH=,84ACNBY/X5)/3\_CXBO1XQZC<R<![F ++M20&=6"!0E^:GB?#,9C-A%QVL>/"'-CF`PX/7-6-F@$H<&Z!HMSM/'W@+"%ER ++MC681-&-`V/1\0-!\`2'11<YC`]&1N(",K6R8*65:O1(E0;1[H`8=W'7U:GLD ++M&Q8>I3[NGWXT<IA8X]V!$*%50/JPE2C0#<:`-FUT*!Y.Y33KU/BIZD)YCAJB ++MBKEBODPN5BOX5:XM?*WK&_ZZ3>*(!-M'JU[5HVM12E8T_#Q&)'DG["XD2@P3 ++MV<4PBI-)5"R83*,)FA6<&54N1E5')I4HBDBL3S7H<E-@0#-,LA?:E]NK[+0] ++MC)).^X?[;^^(VH;%%A79N&!O5&+#(N/(^-+[+<OIFI)U1WH3@23FZ@J#EE\% ++MR%*/3L>EYH?F39Z[!$T^O[1]X/=?UOPC<NO@MCNMWP_DSGIKYLHC3>O7':=G ++MF\K2"]*?_OF[HI<BOWRUO7<C?`Y6PI9+S9?[OP\>7Q`^M/?D27W/F$W(Q1-R ++M=N`%Z>"FEIMM@RFV?%N^KT>XF\[$I,,-8`.LI"OX%<:5PBJ\SOX&V`YWT+7\ ++M9F.-4(O?M'\N78V5$PG"-I?JT$^J.DX_C55].E<E116`$@<$IY+6F`;39(_" ++M,LF*C)7R"S$P)HR6:J*_W*RI!"I90LRB&9G#L.'CC+CRCRA(D=_;DLJMCV>; ++M5;,B:_WXQ[.->%CL>]+,<B`XKG=8D\.(AS"O7$$&N,^7G37<\T9,"\@WL98G ++M"#^)&Y:]MJSGPL5[H5?KWHP\O'$C\K!A26VH=,NVDJ5;?Y-?/WMS<VMUU3'* ++MF;*WK/';FXTE>U)2KVP]/TAN!R_NO`3GE-:\7EA45],_6%`_Z_U-U<>;B:Q* ++M!G]B5I.]QPW"VDM%J,R-5)"!B\!KH,*]"=2XZ\%^Y@/J*#Y'M>-K^$MPR_UO ++MMV22W9+;38UADZ4Q+C7A63S/\J)U7GPI$W*OE]^0]U/[3/M=S?`(:I:^-L4" ++M"W"(%M%!$SO_T)8<@#J^T<D!T0P@[8Q5!,JIT#&BSSP=^%0(H2/![E-YR,<K ++M18OUR=H7+.B=2?`6C(A6BG9$OS^H+P]P);2SM#<Q"65GR4F9&;2=\^FLD-4B ++MZ^3H]LM/13Z]W1OYVQ].PBF7OX.I$R]D7M[5\L_%K_;4OO<C0N/O/[H$?_?5 ++M;3CWU-__/+;Q[:;(_8;.R-WMYXF3#Y$->"'I>V;"IT;SJ0EP"N]R*P@B253, ++M@">!$M4X$MRB&MT4@LK$Q5$IZ%OOP^#P3(QNOU/6:CF4D^-9GN%IGF;CXQQQ ++MB#4:!`,V4*S59K'%VBC62=D]4#:10QSO\D";0?*0K9[D.H8\-L-@IN3)L)/% ++MDI@2F9!WE"=C>(`2QWH.P?]]L'#C@HKRF>L:_K(E<@H&&HZ.GU:P9]G,ULCG ++M3(?5/6-)Y(LKQR*1EI<S6G/&3[O[?L\O8Q1]^V@B_?T.R=,(%FE6EE%XGN,` ++M1>N)&F(4(^`YO68N4<[BYE#358.*D<&!Z9CAK(6)BX8*I:\^T5+UW?(_SIWT ++MESQ11T""MWJ&7TUT4O\ARM__-57#=+1&)IV(X%8]DKT`L&82B0A7:54`F7D+ ++M<O+T:J%6^)-`Q0CY0KZ92J%'X533?&H1O1JO,=5AWH@8/H!S3+/0<Q1IM7P! ++M?L9DV(OV4;NYW7PS=8QC960VF=+_3W6U1D=1GN'Y9G9V9W;NL[>9R22SFVSN ++MD`O9D&Q<S5"!$$)(@`8(L#58PB5(8(.A4$\/6.4B<`1_"!RQ`@4M(AHP@FG` ++M`]4<VW(Y<!1S:DZY5!.EE1PX%FDE9M-W-HO2['[S?OM]\R/G?9_G?9^'Q-TD ++MB5,PFXI("K84.U.8B4R$XQ1%.QF&XWA>Q"@:;Y(WR+C<C1^&T5_\+ND'_U%L ++M.EG:Z3?9]0QBNO'9&(\8N,&[$&/2T"K\PBH1@;":_;Z?;"(WD`39A1_NE!YI ++M5/)5R`SD1@%,#&JJ",TAHOWXHS^**965D8CXT$<3!P<WDP7YFW_3L[E`L0*H ++MIYIC#)C)-#"3'V#LR!#(O%X,'^F%;M*(:HZQ<)<#=]:@^^]QWFF=)N?>E9.! ++M,#\FD)A])\O"_+BRQ/;$6#A-SK?\QK98%(M%$P!#7M_X,A20,B24@:0]*(CF ++M%WE5&'2(/!6?W1&?2W8/??O2E/J]Q`_W)]O.#Y7:;@SY+?]Q`-CR-M1.P=+1 ++M-%.0&1[)X_5YQF)JA6&3NT:^Z)2U$,0[G>G9(<GZG9H=$I-12$:X_UMG:M;H ++M/;PO)J-U;ZZ&328_59_JG\4LT%?H;?1:?IVPT;E%V,V]*70)-_FO!9%G6;\D ++MN"5)D`26EE/P@.9UVF5)Y%A2H6FO3U/3?#XLD&[!&U,40>"IM"S^57O4'UP5 ++MW!`D@NE*$M@9CQS^"=AB])[:KUB<MFJ41#8<1\*%"<$[JG=)D!V6ZL]_\#>J ++M+9R4*80%L4*2*ZQTHUBB./S(-5-3PU*Z&I9A\:8>%M/=L`Q8GF1M\ALMUB>E ++M'9#?E4$4X,#W#`F.1]5SX`"^M>?"K\]]6IO3,&WD[H<-K7/&!FK^@0YLW#5] ++M]\%X$=E=]Y=UK_:F9@:GM\=CJ/CY[>6,8[B=*"E;5[4TX8]4#'.LL6J'MIL3 ++M<[$L*5?.4L+8>"DLCU>JL2JI6JY2YF)SI+GR'$7<0^T1<,(&9+([*`HD'\O2 ++M'"\(K-LERQZO3U%@1D8Z24SQ6Y&5)2N:\SP4[<=('/<CS(T0II`4E>91W!Z/ ++M(K,TG>:182M+K"#X1<DMBI),LY3B(05)9#&<]+`DH8B"0-,4A4/M%%F6)(S2 ++M?#Y-G$"C&6!66'AZ8)D8B6:<]%OC1%6[T+;CR3IJ:NTP<&]84X>5Z9.:)W[U ++M8S4?<,\J)0QKZ<$"+5G[,!/_/T!U-O-B3P\\(CT/=@\_@)H"4%,":KXK.Y6N ++MD7NC?,V$P[P$7\$;E#<FV<W#22=KDB:\!"!JBP90B2M!QQ*7#,%5`I3,RK8[ ++M$'HM_LR?KP>U<B?R_>N3N@Q][%<?Q5M/Q<]G.WSN^%_)[A\J=[_\39"X-JS% ++M;_U[VWO$.\#5Z'9_<]7008NK4T=NVG3;8U@.5H92S1=ICLY3.2TOE\O+@T[J ++M*4NIR*O.BW+1O!9N65Y3T59N4^XKWKW:FYSG#?5(SDGU5$Z/>BGG$\_5'&JB ++M%QD^0\D?DQ<*V\)CJFU3QLRF&O,74\ORU[";P2-\SWV?+Y6%>&03"X,AW[B` ++M6WDB=V4NGJL7\I7\#GX?/\*3^_@._C9/\+Q.@&`]8GJ5E\&V.K!)V<YQ.L'D ++M+A078IF!8!<^WQ2S3<MD^;.*LCJRR*SBL#6<C#20;.&S87Q_&(5]F4IZ8?", ++M_9(=-^R5=MQ>7&[)7LMK@3J#P7PW,CPP8(F)_@>&"VYC$*V:)SV79;>@*69: ++MZM<2:C!IK4]I*'O4<#V&6X;+Y_5XW%Y?1A9A=_`@.BS-`2\1D45_;.DX7;5Z ++M2NGROB6H9-*6]>M2CRFMEU_8<J1>I'WIIW7?DSTK%XQ;L6SI[[-2GVN8_-;& ++MZ<].=_.<%LQTMHY]M#&FQ+;5F`NG%JR],[3QT7)T-4<7<VH+IS3-KWOT5U#! ++M35!!PYJ4H$UZS:.(9(4@64I.(LE*XYB!&T:Z7J+_3%]E[#3L%:Z(-Z)-\T[3 ++MHE24FRM$O;_06JBGN*5"J[=5.VM\SO;Y^M0O7+=\M]0O4V\8(X;J)PN%0G<1 ++M62F8Y#2AGEQ,]J5^9[LOLJ*'M]EQ+$4'%#H].L\HP<L,$AF3:6(V,#;F:225 ++M8"5$)HZ?16@GVH^.H3O(9J!*5(<(I*95E8U2,=86J16'[_:#T8TE=!U\)2O_ ++MB<S#-18+9$@E$@CD--PC@C;.)MR^A\3PV#^\UW;\R8Z8&?_V@]/+\5##2VN. ++MOMZ^YBC9/?S=CKH=YU;';\=[?X=VG6G8=O'\Y8\O0I>K'[E)#`+J->RB646S ++MR-`?=SWNF^6:Y6MR-?GVXGN)5[A#XB&-I3C5V8(O(UK(=G85MX%[@SU!GW2> ++M8%DO*)$O<8)/?T)8*:P7"`%98*TN@HY3CS6!;-Z)[<=N8'<P&A,$!F25K#,. ++M1;<QNH"$()^>`O]%D,DWH/M!;ZK6/<%+#F0X*AVXHS@EU),0CS'+H[75S,JH ++M230(9#6(P;:[@VU)2U$HA0O%:#]\K53%(%<@@1,6+21;=B*I@$>Q2$2.I]Y^ ++MIR_^G[9_OO#VWXT.=?V\+4<./=_R(MKH>_\22D7.HPA_MN-`RO*G/OJT]\/? ++M`K(F0Y:N`[*D!++><N(V+I,+<1,YLM1=JL_!?^Z<Z9ZE+\$7D<WT+]U-^EGC ++M"OF9ZZHZX!IPW_9]HPXD$.0UC'S-@EV-9F'048`'N0)O!5[*U>"3N,GN:GV. ++M<S:WA!NP?^V]C^[R(O(0/`.F(`4R)F$`+8)12A"6*0F9HGA90J)D2DW2!LDF ++M/2T'SS@N.:X[1APV*W=U#L*AIH7JD\"J!5L;`WD%HK/?2EG$6C]!RR)UH-0B ++M-;!Z-&$`,_2PZ2IO[EG_67O+E>>:=A5V#ON/MJ]Y_?`S:P]L>FW[T,%]B-@Z ++M8P+.WY^,RQ?._>GCO@L]D+,:8&,:(,L#.;MF+C(PW8,W$%$R2C<PS<1R<B7= ++MS%`BR%H1SY8_)^^[[VF.8KE"+=8GR+7:!'V&O$"=J2^45VC_([M:8Z.XSNB] ++M,W?N[,R^9G=G9V;M-;O+>FSP.BEXUP8L%P\)AHB'>9;BX"V45WE&-N'AD)B: ++MT&"BD,A%19`TJ4U#*4G58A:W,BXJKJ+P(Z&RJ9JJA?)2W#:$.K%:ZN;!VOWN ++MK)U:JF3-MS.>V=G[W7/.=\ZWPTVT*3C,#1L*TK#7K>M+M75:@\9K86^;TJ%P ++MBD+RP[*(&/`D?#P`X-(M-]-`J;@DU>G&[KP(G%TPBU*L6@5,&2,XHB650M$J ++M+$E-:-D8%Q.+LP.U2F,B,=R86,S(F!VP@08YIK'*#J^L=SC-NK=K'&P*2I8A ++MGRK&[(2*8T6V+O+?ZBG]Y.*]D4^Q^I</L`<__$C.O+#A:/8ZM\PU<]6+S[V% ++M5^EO=N$(:($+3QFY-?*Y$CW7LP4?/_SXEC/,B01@/+5`(M71!6N2*F%OZ&NA ++M:2$KU!#ZH>MU]UMN1YY[BKLSU!LB(;:Z*7F15('#S;N\81D'N80:(#Q%<KN* ++MU=&`1723()X[!G1C+9D^,\6J)8<CJ39XUYM&Z!+N03$TC&5DP/+!ME4I#\`& ++M#((%3R-FS%F*&00?8$<X5?%12:0.&"D*6$ODH]Y\#/FLY.!!G`!@[4KZXN7) ++M\A2$LF09\)#1,)@,QGV9]O9`WJ&]B^KS9Y8MG]O7Q[]VM'%[:MXW_6_(\]:M ++M/_IP,V#HL9%E_,>`H4FH!`U9ZYQ.02UUFNHB9XU*I8)00:FS2"V-SW)6J`N< ++M\]15XFKG%N<7\K^#GD?CI<6SX[.+%Q6WE7:4BA6QBJG5I?.<\V(U4U?&5D[= ++M*FZ(;9BZKK2E]'KQ1[%/XI\6^W2-!KNY\UU3P@'15C`EBJ;9^M6">E$_8NAJ ++MMN8(X;!7KID<=LE:,&DF9=,P^G6LZ):^3F_1B;[;BTTT.5)XV=OGO>T=]9*( ++MM]J[!%0QE"C='6.$3-3:A(3!:W,R.S!<!?!B4S<]P&H5@U4CJ)C.8JT].XL! ++M75R.F7IYTJ?:\S<P@9Z;SSG+'M_=?,3PX+V=-X:>NO;RI?UG-MWH^,W'KYYI ++M?N[LS_<WG5V=M\PLV_CDC,Z7<-7-DQ@?/=GR<-MG?4T_XTNN]5Z^^LZ5=V#W ++M6Q'B6>I5T?F+2`-8N(-ZRB3E?`W?XR9\]^@=JU`/I72'S^53>0$C;U@05:?L ++M,B4K69$:E7"OA*5:C2%*3U6D.K4AC6O0.K1.;50C&J>:-NJL(-P\!.\#?]H/ ++MLX&@VN#\I3FE3U2Q7-&8@"8E6++(S4#F0&VX>:A'-#W4E8_=#@`:`J0E#J)$ ++M&B>2N<D(J0!RFMT5&O2U=AWHW?N+A5U[MB]]N0K&X#^/I4^_GEW+G6I]=L4K ++MS=E?`\:.`,7@7XB'+6ZVTDND-JE#ZI1ZI=O2D"0B*2(U2"U2^]BE.]*H)$<D ++MF%4BX7B)\@<PH@(E,A5-`9%VTD$Z22^Y0V@O&2(<(E'2#V>$U#K&5[@+5LAX ++M5#V(QSTUV_)=C8'R9)"'51SIZNHB]_OZO@R2HB^O,P6`W\A_!K_1B:]:>2)= ++M19^4>*_[7\(PY;_![Y,Y/XT&8BD'"Y+^XI0$M0NJ7[`OQ.P+UO?@"B5$('2& ++M-)\()GU$7BWOX_?(U_D/J7B&XC@M$DW'+#I3JG8O<=>1.KI:K).:R3/"J](5 ++M^GOR1SI`[XG_H9\[@GY9%GB><)2*$#W@!/*'*5)5%"E/B"G(JB#(,G2'."!0 ++M$H%E(J<3R:0;>S/"9`<4*QZU9WQ>&\BSTT2<"=X(X6JT!/8DY'+?C<W?/$86 ++M<$4@/J#&PVG&FZ\""HPP2)C"HPD""1.JD?#`!U%Q5#FJ>/L(?;6CIE1:,$MR ++M%!14T>[16YF"65#^D(G:Y7PL%RKK8`:"EJ-$PLZA=+0W$YL%B._-:*S<RBBS ++M:*[89RZ[G'>.)=(Z@"%[T/+?)-BA:O`V5:VR#_#4<,9@#__C?'[N=IRNLPT= ++M@RQ.8D@P(FPZ?OO>R#9\^=;(J>]"6+F$.T?V9C=RD?TC:P`!AP`&,VR4'KV( ++M!!#N&3-3`A/P5'FN3IN>JY--NUHF,-<K1(1VX;9`EL!A2.`C0H/0(HP*!)@G ++M<WR.C.R;;%+F@4JW(]P+5HV;P$SR%6X3B1QR;8':9:^$K>!0E]#SQ;R<>M`B ++M4.LXNG(12:-_LN8XW:`>`V1`NJO_-2I\(`Q'.=T1C4M&?E3B^?BD,`V&G4ZP ++MS32>%U+D?A.WF1TF9T)^]9AM/NSKQNE?&F9;/LZ'3U8(<<FXB?L19IZ2BR"& ++M%AZ%"LUNW'0A-G]<7<%'9P=@B`\^2&?M3`O6F<TM()T-)8`-H]ZXI+C40)'J ++M\N5COSLX+BELLK/5!2ML.\0..5VQ!]A$A3E5=F;;WA.1`^_]Z.T+\?K9#3_H ++M6KUQT<%*4G2\=NWZU3WG?I4MYM[8L;;R^.GL"2[3U+3TM>]G_SRFM7^#;FGH ++MJA40>!K@SBK=RH?\WP-#_'"`$L;9Z=#`9Q1\4NDW[ABC!HDZ5(^J^4%T,=7< ++MLMOC\A0Z;>5U8OASUAKV1C+E-88,KL'H,#J-7H,8/)<,:F/BZ_\_\=7'A?=! ++M52X-@O0"PYCZ5@_^3WLUZI-DARS*/%6*?-23C[VR?ZQA)0?9T$K8F`Y6C,7` ++M"0UK_?&>F^M.+57DKI+M3SS]4U)TXEQ-P^*RYNS3W.&G=LXY=C5["5`W%SQC ++M,?3$C4+HMU;:+\HAUWSZA&,5K7-\AVYU.%)*I;]2*S=JE(7^A5J-42_42\N5 ++MM#^M+3=V"CNEC<I._TYMH[$/!R4JN-?P*X65\AK7#GZ3L$G>X9+U,!%]`#FU ++M4&2M"!2:J6DB1J(B1L'^3;_-@`;70\P@PF=/(;+@%@8T#DW/8^806I48!&.8 ++M'DZG$W9*&P0^,`?-Z"^M$%9(ZX7U$@&.!Y09T`D4M.<UFCBOYYY^\=T;6'OV ++M_DNW1P8O9EH/9RZ\T)KA`KCXE;TC=[._N_\\GH3=5]^_>NW=]]^#5[>.;"4Q ++MZ(L?G%"?]1.7\HCR=66A0JJCG5$N$IWJBA>4!<L*'BMHB+9%'95Z9?X"?4%^ ++MG6.-JUZO_R_=Y1X4U77'\7/.WMU[[]E[][Z6??)8EF5W80D26$#PP34QQ4B4 ++M0:H-")9I%0L:%:0^<8(3#6J-)CH==9J.B3H^)FD%`46-K=,:I\;)R#3:5&<R ++M,E/:.FGH=#K4/VIA^SN[RMB9=-E[[KV'/7?WG//[?7_?C[]=6".UJ6^XU_BO ++M![YP?N7YRO=%YIAS+',TD`BX<KB8&DLKY2K5[W`+U4;US_:_94RI=LT![IH! ++MK<T%0(L<WM`(Q2HU:0OMH1SMPD8)*=%S$?I6I,T"I,7?QK1)J-4JGD=:XUF2 ++MN=*<A!F;B&9Y;JEZ3U4>^M&>D?8?/]S>>+!0.[UIRT=GNC;V3[59K^VKJ]N? ++M.'IRZLE/7JN<?&(Y]?F-V_=N?_8EA/9N<,PW8;TT])8Y:X:!50[G<''N9:Z> ++M:^6Z.)NH":(@RH8FRL@B8'MRHHB*T7<%+`0#!C9(4/N_7D6OOC'M58`Y)SJ! ++MJ9+3`I^2%)8*I-[J=>RXP2;9B9N?R4C*_?*0#;M/S&VK6KYB[DLOS5KAS.3" ++M'W8LJ#P3J:YJZ9R\R^I]%?!F/_S^(GS?W,X%G<%*<:$X/[0LN"K8+1X0=X5. ++M&Q\5_,8BBVZ?QUU44_`'M]5/EA*B%F/J:1*:Q";:9&^2FN1VH5ULI^WV=JE= ++M'@P/1I1(.!0)Y96%&FF#?65X9;0KIRO4$SI,WY<.18\4_+3H%#TGG8R<B@Z$ ++M/PV[,J#$F7IF1:,0R94HYPN$TSA[88:/V>/T+&^5M];[?>]Y[QVO3?%F>==[ ++M'WJY+.]!+_%>)4N!^Q!ST2HV,5'Q"/@`K&*"6<5QNN+L;&8ZM#C&A4T9:S-( ++M1GH:SZ47VK-\V!?RFH8G[ATFRR_PH7SXY*7TBI%\G.\K9J/"P'0MQ=>+255Q ++M3S$I5C'&(10(*<&'T_;AQ6<8U[$(?/9XY^*DK#&2FXB-=R:3M@-@+@9ZU9D, ++MS<XQV#9XP^ZY4V)G1E[(S`'<"&NJKAJJQ1:4`WXD1GD_MKX`3:83;K,=.7X4 ++MS)$E(8_Z<30B4EN,\Z,L-8/)8HS9E%3#[$$L/[9S)_.J'<SL-1OEKE241\*1 ++M0G#W9>6I+(`H24JFD]E_=R9)R4>XZH*R=WOWEM+<PS>/U<Z;F?]>_8YKC5J? ++MM+&MN]WEFN'?]>LCR]IN[KAS'\])7].Y:OZ<'$]N\:L[%U=OC6;%%FQ?[5G2 ++MM*0\)SW#H*&2>=U-C<>_]S&+M%#BGR3?>@S8LN<RHK`W.6%F%Z^;\^"BQPL^ ++M5Y(IMB"7*L84"F)@L2MJ$`6QK.=*.,$+KXBOM/`;^![^79Y#H*(?\'W\=7Z$ ++MM_%72#ORX++^UE2R@`:,,V\_-L%XIPHNF0YH)27J+68H8K%<-YMGN)3QHE:N ++M,49TLB4BJN^UV3]86[!KU\#0D!&+9GYX7)V[Z@3YX7[,KYUZ9__DX44%/C:7 ++MMR!K1KDP\J!KEY$/YB""!R(!PQ576#'-TYWQF(%#@N&2L.&R0\)K,!U4XLKU ++MN)-%U(VON[%[L2^9]JR(^O[A(QM\'_CZ?`D?YP/*F18$(``Q((X`#W#B8N\T ++MO(P_JY^@#&R65;-3BI`,*1^G.F1%)N"&;8)5@"K*27XD"YH?L1J:G[\3-!'B ++M)+LTN1`16`J`/7<R3,K8M:6J^]Z*D[6J?="NK:NK.S!K\/W!!6_4EFXDAR8' ++MWGFQNJ[^X!Y2`<B`D8^1'*P%Q2LNE0*H!;4*RK)9UBI$,!!Q@35D./'U`)SQ ++MTS-\XH^FF)D=1U%HX.Z1*8*?1"YHX.Z!.10MC*,`-(J4AZ)BF%:@4KH`5=-E ++M>!EI$%X76W$K:1/:Q"UH,]Y,M@I;Q,VT%_>2MRU[^3W"/O'GZ*CX'OT8G:#7 ++MT"6^G]Y"G]('Z![]!OV)/D$3M(`B*_4@%XVB,"VGM0B\N]7477&K"5:(`D;D ++MBM0IBA19"!`#<F(,`RA(MR`0@FT\%2T(6V=(6`H*IFD"N1%Q&/N'3#"^Q`I7 ++MIA@@)@[:O_X]V[)QGW>R>;+9YQD?:V;"S;3[&5YH2;;HW7&C%\BB-ZGF8-T[ ++MFF//O5!S-BXQP!^6&^#C?SFU]E=CN5F>V#>7I]9QX<E=J]=_=Q/9DV(X&T+6 ++M2[`C.NDW5<6)\[D\2A9JR[4#FD5C\2EF9<?5](P4OYF_R`K%.9LD&C:_Z-6M ++M'.)L=M'N$'05&18GGR[X[1E@3W+Y?"'FB*-2OE*8Y9AOJ;:9_"*AQOZR4JTM ++MU)<K2_0U_$IAM;[5MHWO$B[;KB@7]7_9GHA1NQ9%43GBB"H1?89S)BK7-PMO ++M"T<M1Z0S^"PY:S\M#:&+MBN.WP'WW1<?<8^4O^H3MG^+Z;K%:H40YJTBI8)= ++MDJBJ:9!?-0-6I`>&$Z^:K51Q!'ZK\4*`UW0]9N4!!GD'E:1<V>&498>@*4J, ++M"DX8CJS3NX@(YG5.4#3)(5.-<A9=EB1!X'FVK;JB.!R(.A^K,FZ1-\@]LD4> ++MQF=,&JBE>#U]DQ(Z3)::8JV&UVMO:D1C=W;5BEN2Q&.!C3\SA!\;CUN39<&[ ++M:**YV0.R#V\6`,V>OTSONOKT3T\Q`HL(+=GV+GH^&/[W!)'0ZP#T=*BSV<&N ++MV5'3EU7_^J`<D`+DD\0HPG`X$B.#J$@)Z,.)43SSZ:NAIB]>#]`I)$;Z^2*< ++M[,BNK^DKJ6M,]H[V\X%4KPZ]F<E>>-!%)<">+0PG1B[P1>R)%]!,<B7U3=,/ ++MGQ[G3H[3$J,#-,`%$/L'"&^2=AV)NQ?U"E0`QW#B;K_!,+4AQ7BH`WP:"_)D ++MC!MN%N@YEH@%UTQ=O7*NBBLY=_EXZ9R+YZ<&KY[+^Q*"_F=CVF=DW>31VY^3 ++MUB</2/?0?^Y`]&=/U5G^#M'OP[T#2CI6F!:=2J^(.I<IYZG%E$V%*(%H45QE ++M#2^)NDOVZ!%[1(K(95*97.HXIMFC>M18X&K0&XR&M#:]S6A+VVK;)&_5MCFW ++MI>V6]VG[]?W&7N=1>M;^B7KUO^Q776Q4113^9N[N=O;N[=W;NW?;W>Y:VJ6T ++M6[:DC13*UM7>5HL4*EL!@1(0:A6$U@"U@)3Z]V"B\87P))H88S117S#(3X,/ ++M1.*#)L0'0Z(/BD9*)`B)#Y"`9KN>V;VE!E(*+R8F=S;?W&]F3F8SYSLY<Z;L ++ME'59_=VZ7IHS;EKY>!6%D&90/%+FB%JAT#Q3M6@0U"C@Y@54*Q!00Z:I:0&? ++M$H\&$3?BO"E^.L[CX[S]>#!DF[8USM?8@7;3-OEF\[3)S7'6>2+($NB*J7+) ++M#%8';+M::]:RFM*KY36ND<4734$Z+&\_%JL>H^"C5VYN-Y4EE'"(7HT8UR:B ++MQ@25QI41XVJ!(2(O1QF!,ON(ERF2O!1D.A%0/%)893*"(DLG12.DZ)?0\I<0 ++MR%]B_]+3RI\_T9I6$ZUIG9+X\7"Z+!&6FDI1"Y*FV*90O;Q76N5O.H51=4IW ++MSZO60XV9915E==[`Y`MG?DXEYJ0N')L<ZJAM'EO;,KGM4R-9&QL,/N!)Y@[O ++M>7UL+Q_\^YLCG7VK999+TKUSCG36V9MVJ3G.OQ7<9`^:%2T4I=_9?B+L$;I; ++M:'3&7DZD@2?]34::I=5NMI0O%=W^K+&1K>%KQ`9_KS'$!O@`E;`'V(@XX'^; ++MO2'>\M]DUW@L*NI8@TCYT^)C\0,K,62-:(1;.$4P9<]S=CV5<KS-KW*AJO,8 ++MIP3#&64>'^_WINB(:G\I2E.ZRL=9\!@E&:^/:DV[$26)T@]T!MW6M^BOZ7_J ++M7GT$ZBN,'0'+8B?R4!`-&B,U8_0`2*TD'>EQ<U76CYD)XYH4+4>7?L:X2-7- ++MQ3)93SHWB*%_G2)M2`!Z*$H=2*7C#:Q.R'JXZ!8AG42C,R>E>Z2/"H9L=Q_; ++M5-!4Y,\?#<K3.9]+)V-IORB//2ROBZ,5<NJ&K9:GN46H+$]/75%]"Q<QW]R: ++M135A5K)X84TXR3]Z<?UD5GDV]]7._3O8'X<4X3NT+_?T`?][F&I#]X$K)/N. ++MV_#Y-/A9B@BR\YP`?"I0LJ0(,5R$?^+>$>"$RX`V<G?HS7<B>.5.E/UT;PB] ++M#UC?`^$;0$4C$-D+1'<!E;\",7JPQ5\JHFH4F%-%+\4>H&8+D*"YN9\44?L\ ++M4$=[U-->R<^`^1E@05L130F@^3<7+ERX<.'"A0L7+ERX<.'"A0L7+OX?``># ++M;!84R5@EP8=9F^)\`QIU!A"RPN45B"(V;5)7GW18L^P6R:[MUNIC74L?7]:] ++M?$4/5F9[GURU&D^M7;>^;P,V;IK]S_^+YL%!ZJOH;`IT5*,!"]""Q5B"+CR! ++M55B'[=B%?1C-Y\FN&DE:;RZL/^JL]V,0P]B?S^<OS/QSO'^WILQJ(;#5V4>! ++MU(,Y)]#H5^0^8A&IL,=/,Q'4.IS3V3(.5VA^N<,]Q)]QN(_X:&]G1U=W-M4Q ++MO+U_:":.7G2B@_S3C2Q2Q(;)1_T8(F\\AVW80ZR?YF:RNM]Y.IG7H*X=`_#2 ++M20PTD24\&BFBT)@.P0[2BO`0DZ.I+[9RDYQTJ]WNSG9JL$G342&W.2MZE'<< ++MK_+#[VX\=3FY.9BY+F*B8/WAA?KY\GMTQ2\__G4DM\UH$STTE'XN[/S/`/VW ++MV2H*96YD<W1R96%M"F5N9&]B:@HW-R`P(&]B:B`\/`HO1F]N="`\/"`O1C@@ ++M,3@@,"!2(#X^"B]83V)J96-T(#P\("]);3$@-30@,"!2(#X^"B]0<F]C4V5T ++M(%L@+U!$1B`O5&5X="!="CX^(&5N9&]B:@HU.2`P(&]B:B`\/`HO3&5N9W1H ++M,2`Q,38T"B],96YG=&@R(#4Y.#D*+TQE;F=T:#,@-3,R"B],96YG=&@@-C<T ++M,2`@("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KMDV5< ++ME.WV[^E44EID:*2&3ND0D.Y68H"!80:&H26DNP2D1P2D4;I#ND&DNT%12KH\ ++M\[C_^WD\>[\\Y]7YG)EY<7_7M:[U^\U:ZV9EU-;CD;.%68.485`$#S\OOP1` ++M04/>F)\/P,_+QR=/P,JJ``=9(<`PJ*(5`B0!X!<7%P`H@ZQ1#ZB?A+"0!)\( ++M`2M``>;B#0?;.R``'`J/_TH2!<@Y@^!@&RLH0,,*X0!R1M6PL8(`]&`V8!#" ++MFQ<@!X$`=/^ZX0;0!;F!X!X@6UX"?GZ`+=@&`;`&V8.A!,"_/*E"[6``T7^% ++M;=U=_GWD`8*[H4P!.'[;?`Q`F;2%02'>`%N0'0%0$X92`Z&\_-^P]9_%E=TA ++M$$TKY[_*_^[4?YU;.8,AWO^3`7-V<4>`X``-F"T(#OW/5"/0O\S)PR#_):.* ++ML(*`;>2@]A`0@.]?(;";,M@+9*L-1M@X`.RL(&Z@WW$0U/8_+:`:]]L`4,=8 ++M0TY+A>M_9OK[4-L*#$7H>[O\7?:O[-_,_P^CN@,'>P',^%#MY4<EHK[_?K+X ++M#S$EJ`W,%@RU!P@(BP"LX'`K;P+4]J!(&.#+#P!#;4%>`)`7RC&0%PI#H*X` ++M4"WQ`]C!X`1_#51(!`!T0<T$9OM7_%\A<0`0!@7]S<)\`"#"$_8/\Z/8`0[Z ++M(T,(`'1#^?TWBP@"@*[N(+>_%O>?H"@`J/`WB:*NJ/U#P@#@L[])#"6H_3>A ++MM@9H]0^)`8#6_Q#*JLW?Q(_J$!#T!PH`@'9_($K2X0]$:8+_0%1AR!^(JNS\ ++M#Z*F!X3^@2@AV!^($G+Y`U%"\#\0)>3V!Z(ZCO@#44*>_Z``JK+W;_SOG9*7 ++MAWGY\@BB_B6/`&HHJ$I"`'$A$;__/=,`"D;U7E41-3<^/E$1L=]1&W<X'`1% ++M_'Z/40O[;[8#H]8;!/("V1#,3<-L)$,<W]2%%?LKY8V78'.BR]O7)VA6=WQI ++M)0R>342'O!]\YLJY7&5\59I!3K2-O<W@>4/G%M7R4F=$^>"5:T+:U-VVQXOM ++M#)]&.N/C#`WO+1>F\^`]XN:ZR9/OPNA:$\M#Q<DF^3W9A[U[N=H<BOH[N(N, ++M:)_,/&H^98:(B!HK9T`,PD.KV`09=4G27(LCA,*7/$F2D["6QH+]'</Q&K@6 ++MCF`M[F17>7AO7]\]1[NTP8F.=J.-F$$0WI__02<3Y->X4B/*(R[<&;:1LU.& ++MK"NN'=4`5M!U;)FN<MTH*WAY-IZ9,V\TU3RZVE!<&BBE>S+48164,"O59W@Y ++MU78W1,WS<2/]S;'M)%XK+@Q40.2?/-`?&Y)1]16`/99'63:2^$M7K1QN78FI ++MTT/4-!Y?,V(PL0$^VQ7IYS:AQ%G;ZI-9ELD;G(#WOH2T*]3!-AOL_3[LYR9% ++MR,?BWE6>H-&5./B4.R]L"KAJ>F==J<[FYG+\Y(WFP&9I"90[VM8<E=7K1A)\ ++M!V>X-["C\2)3@IRKSQ0$XT,#2='B!*,B$P"IC!YC=N]Y)0ZPG!/[8\*7/S[9 ++M'E[1JM-))R8*^XS`/V+TE'+P7$$+7:D"YW7XO+?#HFDE)OK9(_6./SHWC*!: ++MDZ.I=Y=GX:'"%D!B8"7)$S^>5[[CO!6S=X[0.ONK)Q^+65Q<)&8CDW8:;I9! ++MGK^F205GCDB=$/)=1V;EZ8F"M.9!GZ5,&M\>GJ4_K(W-KLQ4/(;GF`.'<PPY ++M:&@H3D`1_%(M_;NH[*S;V`$O2[3B(+GRZ\(@$XUQ,)=&.P-E]\CW]TG=1(JW ++M;>=8)*34+7I&9L?L_#OGKMY"Y:ZF79(6(M[U(0.RRMLC3PAFB3Z?&;)5:@J. ++MS4.K@BRZ%:^L\5_$BGO8^"QDN>U)<%A+G1MW&B!F9,7,N*5(\!SW$M0$ESSF ++MN;O;_44O2?VS7WTYF">;:CW$06CW%!6(FW08]$SC!3!L7UL$XQS!REU+TVP` ++M1TS)LKT20\_?:<J-[9%UMKWKM#3)NX04U+]]9G3\E%[DM.:1C<WBP?'*72+_ ++MH2*9<8C;ZR1!:0JY5X;[N\M)!^I4]O*8P-V(-'%WB]B@AS,75Q^BF#J#:<Z3 ++M*'LG]8ML(^.^7O`M/!>$-YR\5-8XR@*75;=@VZT?6P8<J52-O&N\5QNA*'MB ++M.V+TV(@C7\[$9IBNP\:L[627;-"2R"M0.%P*VPKF2^S(]\6I*G0GQ?PV#%/I ++MR#F%LQWHQXZQ(,R#AU#D`B!"<VI>D[>PKZ%50:7&'CYV\A%[X7L1C18^;K=^ ++M=.R:;HV9_>QH@W?(FP'[5>Q:646_W-71CU.T)(!8)#Z=<RR=<_5]>]D=W4<\ ++M+Y7H,)-P,`HJ_07P5Y"O##V?ZG-]#O6%:;^8T0F:?0!].%W[8^>-R17";HSS ++MYSL5:NIJ!*'C%RHDY]27V[E2=\A'P`S&CW(%G7@>X:&[([.9&J?K[;&W:8R/ ++M:TW9=T17-#6E)O'Z-,P2:03#M@X9.D=4%P:72N5.I7\E,,Y-=B<>.^V>JEM1 ++MFI?[._"ZFPV>E<:;I<3[)HI9ZMR;[PS?J]9K5',(8I>9@_F"KL+D<W,<4I*/ ++MAX@3OYM?FGRC*&?9<TJK7P]Q87E^HA4&QW<&WQIT#*+EH^$%4TYV1.)^QGLJ ++MF_+%C36A=L=^F%KSC4E%6YY,^[ZR^EJ9+7+\;6[>O>^02RDU03O;F5PN(,XU ++M>`W?1UA$0ZPAJ8]2*8ZS9:JE8_-5\;-E)W4TL,:\0OX"Q3W#3Q5SN'U@P"WN ++M(R1>]CC=E1,/"46HVM-HD?O@<1*@VF!D`#9&C](E"]99I;I:&WGM1R%=#[?S ++M-O&J1P"+UDNQ)$917D9:%5L7/ZM6-6Q+KED,I6/5@VW*M0O9R.W5`A_'*=:: ++M:^5LK97PKXUR!K/0Q?)\W@,HY@4FT(AW([VAZO@;(4&)H!X1.>-"7.94[9SP ++M_6*:[>U9(])2F3W1E%I13/^0->4[A/6O(@(]P3/R=QAT4T/2[G+64)SLR]5! ++MR0QZP_E6;%&&9._V_,'OYDT5*5VT"7UO7`?HNR>HTO9?/@2W=/?NTRC0;E.U ++M_-`Z*O3^%7/OA_<.1$?4G,M25K8BY%VA?H5U0S:.?7+;!Z+Z\]%G]]+-IQ,S ++M?B%?L'>>?[1LQ/B2.??>)FXRF2-NHY423EC9S9WQIFH/:;W-TL*T4[1W='PN ++MLP]8/)AQ[H-&Q26ZD/[@8O71.K,4*FKLXHA-^0[O]FH79_('BO0U>*D/5$?A ++M$5O)7K!8[@D.$YS-6X&B%N%(/K$,(OA0%%/P\%*AU)9._OPM66$JD3[[BR8, ++M<3VXL+@FC42>;?1=5OGD6>J#?*-N;CKECFN$N.6W^3FRT;Y;S;'&"=DZ3]R) ++MG>P],[R%F50U&>E^-O"^Z@Q1YHTZ,5K7ME&E+=]']C2=^C0_._KI1:3ED]NT ++MB4)\:4Z/76_SM)<_/JP(]<\T+;"D3HC@B=;UNDC4<U0UX=%$2JV6JP%^:+DW ++M6<84<9^F.VZV?FZKR)%0V=CY4-L3*I5H5.2;EK7#0MT`O+2)##UK255L@NQ- ++MY)Z0URT/:&9;A2J1YPQ7[G=?FIJI=K.&U6+*_\H.2C:AF&^I),P'W4UUW\<` ++MF/2(UC:!9OL8Y[-[R5*PR`,IC2LNEHY9??18MHG>D)P9)$T5RC7%/J/GLSIK ++M-;;P]&&U^=9J4!&E_;!"I1TW><Q@&@?>_[-W_R+JDW?J/`8<_1.U%WP<AV:7 ++M>6"5=?<MH1-UR>Z-'IKKE)C)-5A3^L%I:6H2S@!N>,ZFQ>-/HLY;S#M$QU%( ++M+V^)?26EIL^@&=6.,RX(8BT_H;UIP2N7(3=18I3L`++S2BU/M=$$^2TNW_K% ++M$974J6-C5]4<W$=2T\@-L?OB-/P;;080L#N^UL1-7+3,.;P3.BBOAN\LM&,. ++MY(N<%:BL+[C^=(_3XB#ZXX.[9/U-!H8V+1Z^Q5N_ZKF@'P#>WG*[X$.);X_Y ++M?4VI?_(_)TUIIZKV5T]AE7I)_AA<9YZ1S8&OQ3&24_Y^@'],.(:EU'Q:HF;& ++MHTE>L^SK*G=O*3;1]+W(RLN':/YE@B8FFN,3]QW):J_W/N2L4YU*OW>M$@!' ++M_G3+::[*=NB5*;FT(F.(Z9T+ZF28H8`+/\DG8N?O:(`,`YZTZ1GD)_Y:@!DU ++MY3$)7CI0()T6@^5%S8,*78(\VE1=Q^L+.2=R\M'>CELUZCV052Q\8U_L44:? ++M["F5XN2*'LR:Y3?'N$;EL3-T.BD9UVKW\*72([6P/1&O&_K6K6>KMW`F[K0T ++MJ06\OE,H7YR)MN>F2K\R)[)8VTDHK-!ZQ(:\M#<.EWM**$E=3C@W`"OQ-1RN ++MIW;\,-+/H5'D*=(S8A%SMX;NVT4%GB#6?7E,6\WELV&AY3N^QS4Q=A^,&%F% ++M58*YC+CXA/@YN!@,$UEUOK?Q2>`E=)O?1>%_(;MH,><<B]YM43=E/R,+&F'# ++M#4$K]<LU29"X:O;$P3_O3@LR^[XHK.DFB]1-P4[Y=6:RX=R>OW)SPAH0**J7 ++M0]G+3I5YT.TSF(LIS?DJ@R#]4F.KN4<R\3X'?8]E&7^2ON_&-)K=N-O*2;![ ++M[W3MD>V<<[(1=9487T'7%Z8.?(S)S.3!T.S>2;6'MWM]Z*^/<)^G;)]J"DQ& ++ME5=/)D6I3W$YL$!;OY9*'C:0C*@+=^4N:J\H\W8O^)%2.0=R+RHVBJ_;KZ]K ++M$C47<&30/T>_QVE\QA07=+U`R!RK6!^HI(+.+I;TUD&)[8?/309ZF\^2;K:; ++MGK=0H0OP3)<+VP/8"GNJV#W.64)[24];\'FQYM6+^%F]K^;+TTG&VDE:W6\3 ++M^IN&/O,Z@#WD%:G3;[OM8#G\[UU;)(>Y>/N(UZP*BH7.X\L'#F*ZD*:!/K9- ++MN'GTLKQD!271`N64O!MZ;O$3M"5/57SX1!D^&]Y:^>9W$T]A-#OF'^,^F`\_ ++MQ6J-J8U.M_QN7!O1L_G(F/GI9]S.R?7VU6*ARS=N,:=ST`M`YJ?'<3A&4CS= ++M#^M9UV@3-MY_KQ_=?53TWGE@Y?,3?/"@47:[9D'XJ<]3<REF98XQG3UBT3Y) ++MBLI^AKC8GA*#&+URWP*'E2+.(YP:P=)V[L*W]5D2XD[E`<YEV&^\/3/H'_RZ ++M5U7?$E1T\FQCV4*%)0F'?(`T',0AQC!<U+QW.EY)^6RJJGEQM`LS395$*`$O ++M@/MIT,>[9RQ]N9W>"K1=VKIX;6DG,+=[1/69#6JN[_M!DEJ,5Y1J=>I(&<>I ++MLW!<[MN.URL[T'V]W7P(76=%<B:KAKB@0S,WYS53$N`$?L(I8$%YF?^,#_%$ ++ML.[+AE;YA>SFH,+N5.7]PMO+8>ZW%*1+`EE<Q&4_!VN-$1[:@_[!A-9826K4 ++M[P/XZ@MQ&I1GHLA*A;I5=EVF<]5P$I[S5?)0AXAA)B:'Z-,/Q(\2[D"\SIP< ++MPR*%S`LG@K#A"T$[$BQV&ZM5.I&GZGX]`123">&$(NB3`27<EX9MCN-NO^J/ ++M\FG;IXM?57N6<&<KAUMC@0J>^@ZYVSU?C3AZ2YA"MY-8MPC9#-,C'2N9REEF ++M>X57Q^?C@L!%AUQW;+[8D&'#>A('Q]PBO5_SF5&RC)_#"I;R7<HONVD!/>;: ++MC21V'WNM4R"FK._^S_,?]LOD34S#B;E#\;VS!/<_?1:V8+N?-*B><K7_0Z!P ++M5.N0DXN_^LR?OJS3F,Q-7=MQ.8YN)>+JC?E.O#W;>0/`9Q7I<K%@HK63\>)M ++M"P?GC)\XVTC$:T:JA?J%L=,BS`?WC,,)GAEFG8I[)C,R'\9]*<"[[1K.ZP>D ++MV2DTXKX?":3<Y?U2'WZ*K%;ZI8^KP;%$6'7J)N<][9<@BN45,+B[AUM+CK?! ++MVBK&K!P"16M7E0XL`\:OBW/?O-9LJ-IDIR*N=S)WV*!^R<:=)+F@%<*Q_BCL ++M_H;X9E1=_`9%A;D8:]A`0V5"Z9)JD08ES<#'SI?!(I/"CUX,>CET\.7UYJ,M ++MU0P]/P%52112+B$?>$"[B9703PK;7.;)C,@,&"8V0!$RN-X_KQ[6M-WB-U&= ++MO7WW\C".L/6\K>USV%2[)#VM76F@HN03_M*RV+92X,\PB:&M=\Q%3<JOB//5 ++M%R@JT7U'%66(NH>4"`9_>-D^ZJ)3*+$4>C)LM)U>U">V\,VFU1TB>JC2Y;;* ++M4*"K\=:5YO9:JQ:=[L/YQ@=>@;GB*:3]!K9U?O#LY4[2ST>BX<I8ZO5,BV2* ++M6@*JOK.T!W#\UQ\8O.:&"W8+-9S&,_@9FTUE^BA)-JTYZY+X2GSG^8X"6ZF5 ++MG712*V<G;<D=^F41D3)N9?!09U[57FOD+16$C1M([*?@-%'4GVG#Q#XD33`2 ++M4>+2W$'=&VSPP$/>BY<7^4A)QC^GQ>#`Q;``L:RE^Q7G6^GY&H'09Y_>7!E* ++M$KF/HNO])V-IM(+';`.:&=?,)4ZG5WO>V&)-3T=S(KC3^FP!PI27>IJ6:4+8 ++MPU%YE]/N<P72O#L("$]!=;`QV[KA2W,PQ3JG_A335H[K+A93;Q_Q2&,:0@CL ++M\R20V8>UK>:-2:"[K(Y_WR>AP.8-V#;Z\-Z;$XJZ3B15'7[4VO?S3N?FO7Y% ++M<"]\Z5OR$&0S(6(]LC/^VET[U@^C$9W6U=\[+GA&%IY9]6$BX-:4-Q'*5P]] ++M@!_4DZ95/V+U,P3-SX.F:BU2OI.86W8T6W`SC>-[KQ?Q&<%Q>_\2TI$A8/P& ++MDS`K7'$Q-S8;ZX)$N6!K`S;64?4S^(VY+K\@W<#(/@W)JV]MKXG4#ITR083M ++M$QV4,YO:\':USZ2S98Z!OG&K`GZ3NE_MA)2CL]8WS;IT7UZNW0!]*RM4]4_: ++MZJ,$6O/I/!O[!MVR&\*X_!=7=/4>3_O*?K3WVU@9>FND`%<L&JS2$U#RDNJ4 ++M?$Q+)^!DD3H29VO"DY(4Q\^6B7/@QMJ["A4,K7X8_96]C3P9<+K?^VFSNMI7 ++M+QX,?4=WC(S\);D>%4?;0&U(QB<*23`]UIHN,BT^,1&ZI-7F>I18,V9[Z)IR ++MZ#\V?\:`AHU'Y_^%VF*<,!2$'PFJ,5M>7L3B5K1,I3H]*%>2/ZX]L&'2?L7J ++M%T)IWOP@C)>A,SA'(DS?4I<&YN.ZFL@J>;`W_6IEXA&-!^:ZW%GI'B%D4'`2 ++M?3U/,VD2J_946UX"FH$N(VMKXJBNT=[G^P;3KB$@FK2^_79Q\@PV65_Q,5S! ++M9:X?K$VC;]$>J?'!9->Q3CY2E-4I,&ED)=?#)WQS,:@8DSKG7=E%OW!3T^L7 ++M!HU<S-H$I<\CJM?*O3V"'6I,*S,B_0,Y8#(?SE;+.=A-BQ2--WT?XUR>LBL0 ++M9@E-9,_-<;7N7_)L\S"80`"ZDM:ZA3\72GP?H<N]&QLMZC3`7W]H"$E:*#F3 ++MHL/\*MTB`YRY=.%WH13;4.@[7,N:F_42^-72Y9(Y$&&93+`LG=`NK?9"K(<? ++M(W=*-RA".>2&TK.YAW6#^0$9P,0MJ<PX?YMI?-'_G&)+D636)-&PCVY"11AW ++MN82RC%Z#Y%%,)C+SW=EQUM28,>D"^6YD+\=NG11&UT7$_9-;/ZJ>>]IG`T'` ++M3\LOUAN3^#Z*D/:AD7$XSN3+R2QOK$3U,E?MKVR/[#;Q)YV';A])ST4Z"]:- ++M8/TR;Q*Y-O%/^NH%4;_M-(O>1#"6(;\LF/*$;I`8!K]VV$-^7&0?[9QK2.TP ++MQ)2A)`;H*+B#GC[L]8_1=.?=AU06Y.59<:INM&G_X(\6`M[-%T3<P:(<,[NE ++M'B0$7\-XZ@HSA<S?73)5/[>EV^\&VLG_A&.D?BUAMH04;_4<*<J\"!S!/*=. ++M4U-P$JY)#6-4>6)25:2]`L(46#$R'7FJZH,SEV6=D\M`3]UUK;P[Z@86]U,Z ++M)V7(*%0GH!HNO6O)WXD_?%[R]`'DC*[KT,4Z%:LIY_JF>75S:14=:T6-5B?< ++M6"F;R[^\GBH`G/C4ZY?.6,'ET0;9!6)4^6A-KL(!J0-E0]>LKEB9R`XQH%$U ++M*?@Z?[&R)<AT3[("#F?I^"Q7;/?^VGB#Q3J9B?0!WH'-#I_R%!KA$$=^/?VT ++MR(/"=_7"GK.[]/TYGW[>X.9:KZ0?>MSRRV<G=G?GB/?$DB=.2VV&3!`;UY+$ ++MMQYO4>?.6BN1!GZ=+T;W<3R2R?3M=#+3D;YGB'D5V:FZI7OI3D-T`&!>6&K/ ++MV*N5E8:FQC8B."KFT<[>[]O/19!3[9.>=*891K?`SD7!],0JO?0YF4V=B8M/ ++MLU@<:"FJW-!'TI5SO/N]PZO*ZYJ(A+J.F3R65UVU>C6D]FP&[>.ERM?/TCF# ++M3E)'L+WVD:T*2%/K*Y7[SYRL?7S.++BV&SR/53`87M`_*N%V-P%AFBLU>:2: ++M>V240;O6BMU&!7?-1%S@?O2GLCCJV`1L>MFOJ<V>`O5KB`UI`XA6$H[4F*/$ ++MR=;,TH):*V)O`LK$YTD:QB32GM/L%&!*1X4C-=M(KB>0I23OTD*H\M]GH'/% ++MAL;*GWPL+_XYE;XH(!CROD?\-31MM]P;NSA'N.>4@MG!0:][Y3;&^`Y#&9!' ++ME:DD9&MQ?S.;N^WJ=68^S@V/'#<-^15N#Z@A,O=*#)9BVN[FB45MSYH^(TBQ ++MRJ8RVO-`,5"N><5&C7%,\8F4X75L"K/C9X4I?/($?7X;D\6F#\1\/;$O:G:M ++M2V)X0[7PT.#K/(EIB:;W(C5H3KYEY#I$9%5*$JOVI(&,?I#CQ`EHZ)[JWMG* ++M<*XD>++4ZDM<Q&S3$#D%7+C@D]]%AA"0`:P>-TMC4AV:!1O+OU6TD!2@IHL< ++M&S$X\5/-M>\RC7&Y6<*S"UAN_I`E^:HM/JQ%XY-`*%T<_U>KF]<GMA:!3SCN ++MMFRF?7=NGMT?DIN53J%JXY*HHFBM/*>9'#%:='M&'0G$!,VG\_:96:DX0KXW ++M/%.KP5I";A'V"Q->/`PK>^0<P=6V//>*JQ`C8UR?!A"M6!EPLVJMF/XEO42] ++M*H+H.7&)QM#=ZG;B<NJA*-E@I^CS4:OX2LZY5.>7R(KL%NX62?TBDHO>:)%? ++M$?%AHC<BNXSB\8=)(E!Z>FM1U2;X@9ENU>ID]8]9;FQA(W?LIB=O$8NZI5&' ++MPSA\_X<?@O]?X/^)`C80D!4<`7.V@CL1_"]V'I*G96YD<W1R96%M"F5N9&]B ++M:@HV,"`P(&]B:B`\/`HO5'EP92`O1F]N=`HO4W5B='EP92`O5'EP93$*+T5N ++M8V]D:6YG(#@W(#`@4@HO1FER<W1#:&%R(#0V"B],87-T0VAA<B`Q,C$*+U=I ++M9'1H<R`X."`P(%(*+T)A<V5&;VYT("]16$U!3T@K0TU"6#$P"B]&;VYT1&5S ++M8W)I<'1O<B`U."`P(%(*/CX@96YD;V)J"C4X(#`@;V)J(#P\"B]!<V-E;G0@ ++M-CDT"B]#87!(96EG:'0@-C@V"B]$97-C96YT("TQ.30*+T9O;G1.86UE("]1 ++M6$U!3T@K0TU"6#$P"B])=&%L:6-!;F=L92`P"B]3=&5M5B`Q,30*+UA(96EG ++M:'0@-#0T"B]&;VYT0D)O>"!;+3,P,2`M,C4P(#$Q-C0@.30V70HO1FQA9W,@ ++M-`HO0VAA<E-E="`H+W!E<FEO9"]O;F4O='=O+W1H<F5E+W-I>"]Q=65S=&EO ++M;B]#+THO2R]0+V$O8B]C+V4O9B]H+VDO;"]M+VXO;R]P+W(O<R]T+W<O>2D* ++M+T9O;G1&:6QE(#4Y(#`@4@H^/B!E;F1O8FH*.#@@,"!O8FH*6S,Q.2`P(#`@ ++M-3<U(#4W-2`U-S4@,"`P(#4W-2`P(#`@,"`P(#`@,"`P(#`@-30S(#`@,"`P ++M(#@S,2`P(#`@,"`P(#`@,"`U.30@.3`Q(#`@,"`P(#`@-S@V(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@-34Y(#8S.2`U,3$@,"`U,C<@,S4Q ++M(#`@-C,Y(#,Q.2`P(#`@,S$Y(#DU."`V,SD@-3<U(#8S.2`P(#0W-"`T-30@ ++M-#0W(#`@,"`X,S$@,"`V,#<@70IE;F1O8FH*.#<@,"!O8FH@/#P*+U1Y<&4@ ++M+T5N8V]D:6YG"B]$:69F97)E;F-E<R!;(#`@+RYN;W1D968@-#8O<&5R:6]D ++M(#0W+RYN;W1D968@-#DO;VYE+W1W;R]T:')E92`U,B\N;F]T9&5F(#4T+W-I ++M>"`U-2\N;F]T9&5F(#8S+W%U97-T:6]N(#8T+RYN;W1D968@-C<O0R`V."\N ++M;F]T9&5F(#<T+THO2R`W-B\N;F]T9&5F(#@P+U`@.#$O+FYO=&1E9B`Y-R]A ++M+V(O8R`Q,#`O+FYO=&1E9B`Q,#$O92]F(#$P,R\N;F]T9&5F(#$P-"]H+VD@ ++M,3`V+RYN;W1D968@,3`X+VPO;2]N+V\O<"`Q,3,O+FYO=&1E9B`Q,30O<B]S ++M+W0@,3$W+RYN;W1D968@,3$Y+W<@,3(P+RYN;W1D968@,3(Q+WD@,3(R+RYN ++M;W1D969="CX^(&5N9&]B:@HU,2`P(&]B:B`\/`HO3&5N9W1H,2`Q,S@X"B], ++M96YG=&@R(#<W-C4*+TQE;F=T:#,@-3,R"B],96YG=&@@.#8Q-R`@("`@(`HO ++M1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KMEE587.NRKG$-P0.! ++M``W!71L-[D[CEF`---:XN[M;<'>"!0L)%B"XA.#N[A`TL'O.==9,SMJ7YUSM ++M9W??]/M5C:IO5/UC/$U#J:K.(F8&-0%+0^V<63A8.00`$DH@?@`'*SLV$ ++M(]C8&0*UDS1V!@L`./CY.0!B+A8`3G8`!U"`BU^`AQ^#!B`!M?=PA%A8.@/H ++M)1C^2N(%B-F"'2&FQG8`)6-G2[`MK(:IL0U`'6H*`3M[L`+$;&P`H+^N<`*` ++MP$Y@1U>P&2L&!P?`#&+J##`!6T#L,-C^\B-G9PX%\/Y+-G.Q_W?(%>SH!#,% ++MH(>99`#`+)I![6P\`&9@<PPV92BL%QCFY/^'J?\L+NUB8Z-L;/M7>=B,_EO4 ++MV!9BX_%_XE!;>Q=GL"-`"6H&=K3[SU1M\+^L*8'-("ZV_QF5<S:V@9B*V5G8 ++M@`'L_Y(@3M(0=["9*L39U!)@;FSC!/Y;!]N9_:<)V-C^ML`FK:FJK*#!]/<V ++M_PZI&D/LG#4\[/\I^E?NW\SQFV&S<82X`_396=G9.6")L.^_?QG^1RLI.U.H ++M&<0.=AQX@`!C1T=C#PS8N8`1#\"+`P"Q,P.[`\#N,+]LK'909]@E`-A(?`#F ++M4$>,OY;)S0-@L_2PMP3;_:7_2P("V.QA2X*:_9;X`&R>8$?H;X$?P`:U`__# ++M/.P`-F>WWW$>#AA;.H+_R.`$L)E#71Q_"UPP`>+Z1P8W@,T)=M?_,,R:$]CU ++M#V>P.V3[U\[^47@!;':0/XP`88+$;X+YEOQ-,--2_Q`OK)W\;X(U4_A-L"I* ++M_Q`?S#KH-\%BVO\0[$2S&?\F6#^3WP3K9_H/<;##9F3V!\)&!/X#_YK/'PB; ++MCL4?"#-K^0?"W$+^0)@)ZS\0YL+F#X39L/V-'#`;=G\@S`;T#X39L/\#87T= ++M_\"_5O('PO;A_`?";+C\@;"^;K^1$];(XP^$-?+\&__[HR,N#G7W8N'B![!P ++MP@X6;!9`V'[8??[O1$T[B(,+6$X2=O;8V7GY.?]635T<'<%VSG^_JV"/Y;_9 ++M'`)[B,%@=[`IQMPTU%0PV"JM*;3<5ZIPO`*9$5[<HCE>N:%S\@MFT&P"O$W) ++MH((#XW*]SEUE!O[S;>1M"K<'4J?(S]YJ(](G`0[QZ5./VZY&VQF>K:0ZYQE* ++M'EOV5-=!!]AM33\N#WG@5;XO#Y4GZQ;U9I_V'>2KTDMJ[*`N4L)UZ;M^[,H, ++M!O+J2&?8:(:%U--R48)PTAW*P[G#EMQPDA.1EL:"?*W"T%J8%LZ@GUWP[@K1 ++M\I(>#:X)XW!-/U-P@=89"4`[(H=E16$XV'5//?TUHID`"W5'P#;R/!IH4"XH ++M!S^T)MN31.K=Q"G1J%2XDNL)<^MG'<I?-$##Y9+-=UQ,[RR+Y&>+V4\3"Z'5 ++M31YC.I]^36Z1_9HD:"4QTB2<83@&]-`@_U)&XQ'*!NH3=")^MIT$G5)%1K^@ ++M(&*A41MY93&"24JY/,6)B`2MN:W#2[!())MEUC6[75I9_6YIZ?(%]5T_,4>Y ++MV/GSWI%X)`QT5LU<6S+!YYG-1%RZ>JO[1DFWH;R>J2B89XSYC30CN:5BC\AD ++M4_*<[2.:999+IK@9$O8WG,Q#A^&9W:6OAT0)'^3+,7:=]@F6\?F8R\>P8N[! ++MIY5'OS+,VD24G,A97V4015#%78J]>(UA_Y5_("#5%8&Q@=0@2R=C#UT!/1R@ ++M5BW-V^6`E;2[A.NE["43G-1*7L(.71`IF>&KJ).[KR>!JV)\GT4I:;A!Y$<Y ++MVU31P`?I#S06+FD\U)*QUN(F)A\Z%7Q<T#[UV!\5Y%*!\BFL9-M_^*++'#M& ++MR1NE4=:X<#V4&+AF54RT)BL1G\3?N-.KCQAUT28G(A@N_ZK[74Y<*][0.L?[ ++MZFQF86U>.GO20GB0C?E78Z\4@NDS"MPD3+*T+O<7_?JDOS+3!%Z2<@T+\A,3 ++M5DG3AB9\$ZO_(5LF>H87D\F6=>J#BO[H8?VZ#"CF==U8QV)Q+:G>S_:.YKH! ++M%7[ZYX_+11.A9W33)?>'WS@8A2;0.1^\<4)>"8&HFPWW(\VB_+BO',AJ=R4& ++M"-:U3'MQB/6_>BVX)'5UZU+.+E5SI3-S69\[?JJ_C+6D=$9\S-4(\Z(&$I3Y ++MFKDKT:4>BWG<WQJ_GFC?.(F8#OQ(]TD%+Y\C4OLL:FLIGH^0EG`QHZ&H.K*& ++MZ#R`\]BI>UBKX%A:C30XZ8`TSV<)(]]RI:4Q!1G-9Z"%#\>1K/G7/6V0[>"% ++M_;DH5[;?!5OT:I_L^6)M#MM"IQCU%T9J=^J;TNN7+BDVW+$0_YD$7S$*SE[' ++M/GY=PAWW1EKHY_+2T!\EO2D-EGN_#JB/F3K;0?@OM:5?-C^-GZ*>F*QR$!7< ++M8TQM%![HB9CSVK^8N,<&[T:M%?!>R/':<JB8%-![,1ZA+G>CY]V_9?7*`;SN ++MU9/>>R,*/*:(:EA7G:@G6#ICQ,($_"RQXLIH&82W&"MZBM!@3?`#/*WT\M!: ++M[%Y5/MDD/$^(/Q9E*J^1(YSS"+:?6TH0UXC#CVI2O'";UAZ=N`_P*TI!+K8= ++M;7C)P+(N&B@5.S/N#TJHP^^HI&%8BJ1N$>II9:@H*B(3/GMU'V+?9[A5QFTN ++M\O%9)+SQ5WBY<Y*)LR7!2JTD#1;F!N2XD;<L5.C/:RG+M64'/WM):'V>K!T6 ++MV<O.(T0RS$?U:%!M-Z[G[C3\>3V8R;/4DO09Y^5'_Z*8P?$=/5\$3K;.=_Q3 ++MSWW3BIJKUGW<[NAU;B0JWH_%UFLH(\T''L\#"SB_2U5^QV?;_HHN5O6RLLV# ++M"#%!_5?5@!SO!<X<AV3>"4_P;$QN1P<1FORU<*XX42E?"GY7)YK],0U7=T@8 ++M\U,A.>OR:<X#V]Q="S)980^22@(=M%<D8"^X88H=M\!?TQM="HGTQ&;SN4A_ ++MWFH5W'NKQK%K)+DF^,N8C(P\S@_89^OI$F3T2]A6<$N=%C-!Y#^VL]$8>/=P ++M06+[4;<CO51F=N8?EI6UGBI1XQ.W!1'",5:TZ2TDI3#GN]8F4QGJH[3YGL,? ++MDNHBJFJ`)OE<WF[&R[=C3KY)G$19BK+!&K/A,2>(B\M*.4/J+GE0*,<;SH,C ++MW>5ZK"FJ?EW[,4&0$Q5UM4\$(0<9N*IS9H=++OF6\/THZJJP!\/SZ1I&U-?X ++M@5>1<7`%E+7L>P;-J[F(..+5%QMOCS5Z*AP18^EIEIH;60AG=]_SME,EFE[4 ++ME`=0R4RANA`(*Z=N6HG<&RCPC2DN?&Q:X6*;U!/%./XR4Q9OH*J'2J<;Z`SE ++M;>5L>O^M7[!VC/,<(]9>3+=AL8(O(JLW)5:K-YJATT2_/()Z!.\]3_SF#ET* ++M_TWK6T3PUY<A.UNU"2'DQY=)7F)7SIQ1LA6V<B"#<^%%/KPGT_P^#-,0U/'Y ++M16F?7[R"]&P4=;?':$;KM]IKS#>NLD7G-;O=0S)H#BZF76&MKE;,7ZQ;]$+' ++M]?M1N<.6-QZ.)()([=._37^]3*)WCQV0Q5:.*2QH+#VW?N6O(83#C6$!UJ+$ ++M.Y_CK2.3G4N)VBML]I?T4/R*S>^I=Z$C(8[1H=,L)\K-QWTJ$*5=S&'>UNWA ++M%SDEV_AJFV/O1^*37<*:=KH#"J@9NQ'SU</!A*3[;*LGHR&FJB@`.%X0\PJ] ++MKO`QA1[_3CWQV5B+:]11$%Q7Q]+C<>R5!/4L&OW2*0Z1P*;>,EM'/2D)0-0G ++MY.%$1Y4!J_)-<OS9*&IM<;S*MD[@3CE%_R)_=7?TB\\):;TI@4%CXH5L_**. ++M))ODEJZYID4E^K%0AISM(9I+[W2Q$D'GGPJ!(7-BE.?6*_[A\+P%>`AGK7V= ++M?+H04)8@I\SVURYE69O/G$]#'J"@]J\_<QE6-U-;]F)\\ZP-8ND./AX=!L.? ++MJ*XB<''%NCK'DW*BC(0'#I'_U&8ZR7M??,D`V.)]45&WYY'&KD/9=.DH[JV, ++M=G1G4@ZQ?-#^-C51Y8JTE%[@@&12>D3T2U,R4^#0[':FZ7%PV6>(`V.*MKCW ++M`RH:B>M/L<RW$_T2;QSB$]PN9[UH@G<'$@YT1S58VG^NGV_8B[="HF4_#4@/ ++M#G(D&XVL1D=W=1G.Y\SCA498Y'%'?VV:?%ECVG)I-F`O^S/^L/M8@6^-PJ-V ++MC![BTKO;`.5$QU\VPFX.,BS<_#(X*C&NISFMGCUV7"N7_YU;^`7[RWX-)/EZ ++MFLWVH7PTCQ[RM1*U'_&71>S*S#M!MZ,@2?P08G&AOF_+]/(CDT\WRR'?@=(E ++M]#6\W65^=@455_?H7)GLC5;F1A7X$6@+%,N/1P9=3M%>V<_\A*&L;Q@;&HBT ++MQ61</61]Z.,Q=TN9C^EYRG9]8QT0V.NSR\$OC**87TY_5QU^;:<<I?+4ZD@M ++M8X90]7W[KE;OS(+E2K:TMU]F*IJ2FQ<T>*TMB.5;$QQ,Q'TO&8<QAMP^A&CP ++M(7%6(X^W15VH*\2V,:^O)2)ZQL?NQ5*`99PAXK[B8&N=9BVA8]+!=3=;>:9Y ++M$WQ.X4OS]2>?PE$CI2C/;8/YS<Y0_"V^3DX?,B"?E4AF3=K*=[5^/II7/"(V ++MKM3&V*%:LE\7#NI6-A^Y'57<*CX=(T:9;=1.Q_+9!<`?:$^2C*1>D-%NB)-T ++MG9\XYV==0T4J0>W<5V^%>C]D"U`5_HPC"]4\;O\T<G>(\YPW[B&X4E**DBE[ ++M7<!8S]CU!!>^\DB_B/J-F%)'_%702G)_GQMPALJLGVS,9%%VP9R]FMJWV2>7 ++MCZ/1=),_/*HQ[Q,MC;]H`@9^W@RY=<1$K'@I('8UXTY05`)B%<GN;A*6MSJ_ ++M'Q&E@KA,2_3TE@I7@ZNXIM<=>"<3OM>SAPTB_?F5_=A3&3V"8IMS/".B=;)] ++M0)2$8;,E99!X>K`&4RG\($G&FH*_-O]]A(Y>E,C[BXX?DV_:Q[P_!9S6*NS: ++MD%ML"K!:^T&^N-2!%_JXS!(IO.,SEHI6.1Y1/KFA@9C7QR=)B0@;$"VIM74K ++M6%'\#M0'1#"K-\=).6XDOAN/^6.7?,G;;X%*'67F),RSME4$]L:+C5\87-81 ++M!)=8;1Z[MA9VU+?32"YN1=&AZ2.XK1TC>S8[*U[>2-5*2=.S!+;[VYSE$KIM ++M-97?G)`3LO1.SP#/<$LD<Y1C7;]V\W!^"IYW,-WHDNM99D"=Y/0YE*)`\G$A ++MX8YC0R<"S14#W@Q*'G'@Z75V(@YLAC[&421D=)2/DB-5W2#V^D0.FN*(P76^ ++M^>@"O5W#<X?0$4_<I0NC\()UAHFB?!EK,.*O;O6US/2-2_9]66BB$<Y=]`ZP ++MS1;T<D)`N,>-$A=#CY5$W'TC\>WGST09.#[>[M^4?*H(8AV6,@=]]L2ZBBA, ++M+B/F`87+=ZYJV];%\.9^&;#^VIGJ:_NVWH%MZ^RGRMQ]`FY(Z&I+1?/"!?4H ++M;O'+',N&BMBNNE"`P!HMQ([)=:.^[OKIR,/S676.U'*JWJ#"Z%/:489Q?Q7D ++MG3IO6=CYKP"J?/FQ54-<8/W@')2/I2UJLXT,4!=)5%\:J.-S3_(AY6P2*+B2 ++M67U9PK[JP[?VHX;4//WPL1!Q_F,OQ\ORKM(]TKN).U-KOQ&$/=H\#(NP9*GI ++M)A=1SU[WJ*=/T22EZ4ZV@P]MG`H'W[FIP-[>\5TO)0C]N`M7LU`)\B<W/S+D ++MC7\3V9ID2FG/K+8'7A[03ILQ@U4UR0A__.@*B8L3CMDJ/RGF8<^X)KP!C*?3 ++MLVZME335%,;Y;XPC<W('</B2'GSTQ3?36WFA=.N5-!.]Z!R,CZG^/:WXB)$N ++MO;W*H:Z9U!H]_2UFOBJ2BJM/[.BM00^5N`&?45*R@KIR.=U:,_F<%W\I-J)& ++M[TR^P_+-ID$](8X]E^[.L6T_XS+=F1B)Z(["GE3K@]GCS5H+Z[3S`!,V'"MO ++M`%.;Q>-T3((+W_81?/+G8)=G42"GYW#<%3:SX;LF*NVM8^CL+Y@?%(N:RGS$ ++M/+ZAPPFEY]U=I<U)&<B$6Y_*O!^/LG3KB-,*JWO(U*4RFOMVT>'4$)FL4B.2 ++M'83?E3([_/X.3]*#W=BT@%>GWR#OB]7%I^V?**U6R@0.BMHH\,\E/R">\PI0 ++M/+[!5$]GFM\B?A;O<7!_\M"=_P-]Y/(YV@I.H\GU#77(>,(8GXK,:37I(-:0 ++M@E`.8D'GR/7$YR.]0U"3IBT2?O=X&:&&`%9D%524H?DE1MY&N`S1Z'2(`Z;` ++MM!J5B5XP6:H]3I,,,F)CJ!M'IMUL+-!RB%]8QU_WU-V]XGJ`Y$[#E$"*\$&E ++M?;`RJ>/%.PLE^N#=A;7!G_#PW35:.;&],_[A;<L(QD5O*_?)&"E&TCY(X7&% ++MM]7.?`A&T#&KSUD0,R[P<-,0^%8SP4(-&8(CE_DP?[]^N=HR3G7PK(V*E#JD ++M!C?Q66'#29]*G&D'$[FLV$.0(3?9X[GX=RI*P2UVVGW'R]@/9_426&,D.8=? ++MT3IU;>T9,-X&4]2I\1Y&WFDAF\M.9RXB$7\6SNOQBIAC"6*JK4.W2JE#6&FO ++MY1!TE@CML.YQ/QNV'RD67-AKZ\*#G)1(_WC%H)Y0EYEX!O?LC</89(Y+;FDQ ++MFM@!\0E;H)G+KOUP796RZ/@00+HU_ULP9[*_G<WXS)CKKCHF)^M;L_5-\$VX ++MA@L63RZZ!IUS.K#,]ZX'3E=2*V7KV19W=Z4+"W857>5J=;8M-D+E>&B>ZC[S ++M&>6*()=.YI@P10GO`(U?44Y00X"[RC!];2#]?*A!3/@$*6@:]RQCSM<Q!9]S ++M>,]X;->B,BDCPCNDCI:'.C$'V2-J&&&I:#G`>A,L8-C2Q6SI-`497-,5"[IE ++M%(@<6_B`>W\S(H!/+5->.&:A9Y3L=FC;I?NB6U=*NJN=GQ-XH+5SRP`Q;HQ0 ++MP1K6^7X00#$L?D#U9.>)>:AXL[7HZK*S227E,7+;G'+8,J+;7';'975:&TLB ++MEI0AP32SYJS:V!D+XA*KQ`GEA]N<0D9:GT/HZY)@QH?K%"?YX=5;M!+_NKEW ++MX\6M44ESD+"TVS.$QH7Q""U-F@*JA#%G_`>F+WW2+[`'+;PX<Z9;%&EUN*D= ++MI$:HX+!EAS0E8L(5\H*K4$SD,;A<XBKU:7C:,;ADF_!_$.0G/*OJ^38'"?>8 ++M!2_0180UX)>AGCGC9C>GS/M13&U^=(JC.WV5#A+8LY:]'P)_J;_&[G'`"L.. ++M,Q?;(8S3\9.U$N7Z)4(D5XL,Q&%]*ZP:T<FKEL?X/JDEURI@B"!.GZV&`+?8 ++MW2I17EPYNPD_GI@_0#H5TK:RW=R9](1UT'.S*^MXEWL]@ZBC=O9R+(B6F+<8 ++M\_P[!=P#INI"OFV*..JWH7RZV7<+?&M7??C:KT?CZ9WT*K=5\9'5))%P*($8 ++ML>KR[R84=C)R25J)=4P2B3:*B7=H7S\LKT:#1N3I;9*Q"9/W%U&(<%&0Z-\P ++M\F&M,:S7H9[YT";^6##\.$W\+$]60O*CRPLB#XF-LSCNRQPX3!.`+TVDGIKC ++M.VU5DD5J4M76UUE#,J&JU8`P.FBQM!%;Y%W]S`U#:!Y>12V3KC#A:^)[?PQ& ++M%M4Z$V_O(6CQ<0$\1$>CXER*D?=#PY3I<!6ROSU"@9:_$^,Q6<U);S[V\?=M ++MPW`'4+&VPP<^C!!_D<1$'+9Y[KDG8?4!R2=#)FE0MVA`!3I1%9TR(]<9Y&8\ ++M'Z["^//>MOJ,(L]'X2,A=='],DXK]`#>A2@%`;8C%F0[/MH6GPU"$"F:P,>A ++M1'O-1PTK]?1HWQ32`#([5DM:G9/=V&K[!O-F*QXG:UL4I\0;SL0G'D="Q2PO ++M?LFS'SW'`A]']E:W7LE\P>A@K#?JX[SR[L#:YL.@:E,RSLK@"546AH;7^DN) ++M7C48^`9![+.3@Y`&VZ4QN7KFGBH:JT3=/^79!SWO123\=>Z:LGRQF><V=_J* ++M.`]%3:B=:^('-LBXORB"C^<L.;,I34&^6$*2Y?Z#GBF_#H(`B?C9JQPA<HK[ ++MX>_HJ"ZTJ*@O&T[PV6V_+$1+%G*54H2#;_']-,X23`DG*?`/9MO\D9Q)N'>C ++M9R4+L]<:$C'D[$ORT#,WA&1YE+G3J)F908?/T9)2"S_ML+[VMN'0\;@ZIJGM ++MLZA[>'?S)9OD8*"P_N$U:X2[=G'K4K:W0^5C.(>_1-S,TON'68;S!>\ZT^RE ++M*`.^'J$'PH;L'V_<X93"F10Y,_EECBE/SV9LJU6O"SCF3TOV7N/D,4MT7Y'A ++MA6\7^A(6G49@`?L,E@H5O;0#4+R[B[GPR61Q:6L_5TIV>3I6BR]@G2H,,S8) ++MQ5BP+#L?N2LNFQ5='5RY7,])X$F)W+;(F^>J>D:I:@-/6[KYWDR\6$`RX>8+ ++MT5YMPXUU66@WOW\>)]8F4CD*C*_I&A76-W/M*3'T'<3R8R1`/^["1K(*)Z8G ++MGC<<L4;W#S-_X?=LF_=RP\TJ+ASX)I]6H8?E`L]^1D\(QZN"7Z!:B$?:F^.1 ++MH:PK((@0?#"/*+_X_=CFT0=%7':#D%>GEUTX0[<PM2</4+#]B&E0:#4)*@2^ ++MJS=\T?I@GT@HKV570)=GOM/X9LPF@_E.33&./O]T*@.]0.,="N&ENE@<2HQT ++M`T:.=$RX-\HG-HL4&I#6E5FJEI4I4#,`ARJ"1^JD6]Y_3D1$"G6P:EX?20VK ++MBT&(_WA5S6V2L3/=K4"G?$*N2F"<3!4?J7;$%6J61LC.H9PO(8B61R%A`0C3 ++M[^X#/A--W?G95OZ!*C&MHRR+HN#"Q:DYE"J4!.&CTG9N<N^YNU9G7+<SD+<K ++MR$QNBV-<D+U_=B2`JU&-U.=)NKX42"<5L@^0ASAL/'\EG<'M.M4HH.GDF$[Y ++MK2F>_^23Z4#]J4O^'C94<VK..9LBRR$4TX>NLT(:33K"5J#;#$\4J)05>T*5 ++MK-*LI/Q^QU4$/QEN$F&#HZ^>_Q<<]1>D3QP1@6R(SJGHNKF]B.]LY!9[!]H" ++M*Q9N)6;]BJ5HD,G`N&6$6OU&-CWIT)3)'UX-9^1\MJ/\&RT+),0"=>?K:*Y% ++M&;Q^$<UOCHAY:O*N7<?!>AMH-^KFJT4(Q?B?9HPXF)(:@Z2;RH(TBP#]-:@= ++MDL.E:!DG)!])?*"I2T!K*$X@18:C=.V!9,NQ/V6R/9>>1-I0FJI5V9+3=;H& ++M(V+-BDP%TD?^);8LA";JY9M:8OD7B_1'YJB"0@0%3U>SPS'O"YMVV3.?^^1( ++M'65-Z0T*6%KY9X'4RV)4S"N>QP)[V1!%XIEFPO:AC;E-I1'F$(ZA^X/A5^;< ++M@^V*X)Z5;O<YS_.O+ELVYV2Y"YY;H[>96FY8Z&F!(A>:][.'0_LA]=Q+PDY3 ++MJBQ2"S?-%J$_CSWL^S1!@Q*\S"6GQ'8&TVU/G!#L`RELO08W/+5PLL/5X&C@ ++MY$M.QM<C'0Q>D;$SG@9V,2S1-S,&%$1J371%`8"D;6?%`Z.4QG!^YAU."P)G ++M<I\\5S>-K2=&XB]&+Z.%I3"C"9*)UH5$?TI<[B?/?AG7OL[R7K3=\J?QW,97 ++M>4[@-PJ'@8D]B'S)S<B%A'BM-*9N%H+C]W"%S]TE4.V4_%W,[ZALT<C'?L<? ++MKV:2]'6,O#Z<@K]:RSO^54<,BLI.H6A?ZOGL>CJJAH>VP0F!UM*K%`8T9P-Q ++M^VKSM[/EM$:W9D-8>N"FEUT'+5\$_`C.F%8:1_2_WN>\X=5L:[QS?V@#*A,Q ++MU.4;FD5ZQ[=+//=`GPD.56%R0F^!CY#D/\QA#_XFWEQ5VH`Q!CIFTNQ(1T\< ++M/M0<''5=<-@1"EN04&>$(K=7B3`KQB<7'/>2UI?P/]Z#1F@_"-:IR"IAN&Z- ++M>.WL3(VQ"2IA-M&O+)`>T3"I:*VOO#-K?_'LVIS@KIQ..\->G9=#2=T+.T!< ++M&WDZTELD+JA%089A.VKW5L=J1L@S)SIU%=PZKT\;>)W"S$ZR^A8A#'G1`64^ ++MTC=P))?`S%BV'.WU:$+^NG_Q&[R*Y+L:E4^`I!Y:CR9#(Q&X`;8V?*^NB;(+ ++M=ML<+INQO)P^'\RRD:_U=6J%V`M#+=U^O[RQF1G&W*<13!(&G9V;3_)U+HHO ++MK^PU^Q^:>*O/'1]<8DJ]Z;EF7WU399\%X6B0H[)*5I>4LY[LBW6R!&?K3+&4 ++M)W!W(4EN14BH3B]TEZ.Y=Q?Z8BPE"CW3V#=^J+2)SP)2A"HH-/BR3E<?6&"U ++M9K($XK`.VNOAHC($1(N_IY]DJL>R%=/<L6*HRFJF0S[ME1AP5@QY09$'<;7W ++MI^^PR?7'LU+8XULL)6D(BG7:-UM$$5!MUW0V]J-U0[?>\[&>P=GB`2X0/W.< ++M*Q:O5*,@71E->7AWXD:>E.+/?V&[V]=YCO\,%4F4U,8]E09'3=DF$Q<3/<SX ++M'='Z_1X/2R7M!BB=P%+1OT9QI'/$F.QY@M0/^_'&FW4&G`#J`,8KZ4HR,NZ` ++MZ)POI)FZ7R7[#J+M&0)3;]VSG55J,VX-HCH)417U5ME'36C<CZ],$(.)O^>G ++MW3[R_K+$!`3U%+4PP)4K9\^]37?]^5S6UC-B=&;YQ_*W2M#`&^ZJ"_TOFQV# ++M0WMS18W$O:GL=4Z#4EQ8$?R?8U)G/WIS#1LQ"ST<U&X\HK..BP@6K@E(Y4A0 ++MB:8):K:5?CB,X4ERL`HZ23+#]"S-8VTI0]U*;;"98=@MB[)[Q:U%PET<@T_6 ++M3N:G:5-1IBD3I.^$3C-;@?\="(R@D-!_5%>G9#.0A2]E._/?\I%&?B^/['XT ++M_J9,@BK!=6MM!-Z!]4.Q7>!\&%?/2%N=%&X3J4[88T5_LYS"D3FS?Y'W)MGA ++MR+IXG!7:S^VATK>^F%43`\-HI#:2"-1-T@L9B^4I\UPX>%=JU'YS<X%J%<(# ++MW]V77RPF&45'W:=..09-6*(T(4,B^)@JO974R*F$)=@5D1#/;4T>L"76'E[2 ++MWS@#[<*G\YMIBA;Q?WUV*4(M/"VL:GW/\PAT#&@(*QAU/_9D=X&\U.3F7<;) ++M.A;K-=GRW95*V5=X.ZE/-TR]]3YGS0F,SQXK8ZX]OI$[7K;PDR'4V_HK903K ++MFENF)-_=4+!YPT.=7E!CME+-OMC<8!%=\$,"G"_EDW]&ZSCB(OR6W]OYR1\" ++ME(88Y1KTRR%?OZ_B7_COIF7\S$YD9>-POAH('A!O[TS%TZ<1&"UC.#^CG(Y' ++MT7'RL?!;,KQ]UG/+.3NX$58Z3HF9;^$4:%K:<4&VDOZ*YAHI]%<(S0?#I,@D ++ME8)50^_*-!,V#-:%=-FY[)_A"X1U'HLL1Z-3HU*(-'C2(9*R$,>XM8R/$1YJ ++M/BI4VM\L+FP/LU!NMV'_E%K#+U9HE67ZDUY;TS!8L/E0RVVO5T2T1<Q]H6<, ++M;T6?SS3'I@O)FI>#BMEA_$0KU+!9NM6W7V[,PB`6U]O72-+3N687L.7N,77_ ++MEOOT)(!2&KE_:%'JK&-N]HLQQ?CHM3LXT9K6M?^8'H.<S"WE5Y*DA7W5C?G; ++M\E9%0[6W6[^JBL4Y9TBZC1!&3Z@]65<,(5M21:_+N0]R`J&(<\2&RP-I!0,T ++M6%NH%9%P;CP$C[O";GZL'SC%`B`:1TJD".1R,KJ9.TW=FC5K2`$Y:Y@C0_<[ ++M0YQ&@CW=2.\UE3J?K</O"@=*L:0N\_BQ_S]^,/ZWP/^(`J8V8&-'9ZBML:,U ++MQG\!DWX>%65N9'-T<F5A;0IE;F1O8FH*-3(@,"!O8FH@/#P*+U1Y<&4@+T9O ++M;G0*+U-U8G1Y<&4@+U1Y<&4Q"B]%;F-O9&EN9R`X.2`P(%(*+T9I<G-T0VAA ++M<B`T-0HO3&%S=$-H87(@,3(R"B]7:61T:',@.3`@,"!2"B]"87-E1F]N="`O ++M1E503DM4*T--4CD*+T9O;G1$97-C<FEP=&]R(#4P(#`@4@H^/B!E;F1O8FH* ++M-3`@,"!O8FH@/#P*+T%S8V5N="`V.30*+T-A<$AE:6=H="`V.#,*+T1E<V-E ++M;G0@+3$Y-`HO1F]N=$YA;64@+T954$Y+5"M#35(Y"B])=&%L:6-!;F=L92`P ++M"B]3=&5M5B`W-`HO6$AE:6=H="`T,S$*+T9O;G1"0F]X(%LM,SD@+3(U,"`Q ++M,#,V(#<U,%T*+T9L86=S(#0*+T-H87)3970@*"]H>7!H96XO<&5R:6]D+WIE ++M<F\O;VYE+W1W;R]T:')E92]F;W5R+V9I=F4O<VEX+W-E=F5N+V5I9VAT+VYI ++M;F4O0R]$+T4O2B]++TTO4B]7+V$O8B]C+V0O92]F+V<O:"]I+VLO;"]M+VXO ++M;R]P+W(O<R]T+W4O=R]Y+WHI"B]&;VYT1FEL92`U,2`P(%(*/CX@96YD;V)J ++M"CDP(#`@;V)J"ELS-#,@,C@V(#`@-3$T(#4Q-"`U,30@-3$T(#4Q-"`U,30@ ++M-3$T(#4Q-"`U,30@-3$T(#`@,"`P(#`@,"`P(#`@,"`P(#<T,B`W.#4@-CDY ++M(#`@,"`P(#`@-3(X(#<Y.2`P(#DT,B`P(#`@,"`P(#<U-R`P(#`@,"`P(#$P ++M-38@,"`P(#`@,"`P(#`@,"`P(#`@-3$T(#4W,2`T-3<@-3<Q(#0U-R`S,30@ ++M-3$T(#4W,2`R.#8@,"`U-#(@,C@V(#@U-R`U-S$@-3$T(#4W,2`P(#0P,B`T ++M,#4@-#`P(#4W,2`P(#<T,B`P(#4T,B`T-3<@70IE;F1O8FH*.#D@,"!O8FH@ ++M/#P*+U1Y<&4@+T5N8V]D:6YG"B]$:69F97)E;F-E<R!;(#`@+RYN;W1D968@ ++M-#4O:'EP:&5N+W!E<FEO9"`T-R\N;F]T9&5F(#0X+WIE<F\O;VYE+W1W;R]T ++M:')E92]F;W5R+V9I=F4O<VEX+W-E=F5N+V5I9VAT+VYI;F4@-3@O+FYO=&1E ++M9B`V-R]#+T0O12`W,"\N;F]T9&5F(#<T+THO2R`W-B\N;F]T9&5F(#<W+TT@ ++M-S@O+FYO=&1E9B`X,B]2(#@S+RYN;W1D968@.#<O5R`X."\N;F]T9&5F(#DW ++M+V$O8B]C+V0O92]F+V<O:"]I(#$P-B\N;F]T9&5F(#$P-R]K+VPO;2]N+V\O ++M<"`Q,3,O+FYO=&1E9B`Q,30O<B]S+W0O=2`Q,3@O+FYO=&1E9B`Q,3DO=R`Q ++M,C`O+FYO=&1E9B`Q,C$O>2]Z(#$R,R\N;F]T9&5F70H^/B!E;F1O8FH*-#(@ ++M,"!O8FH@/#P*+TQE;F=T:#$@,3@U-`HO3&5N9W1H,B`Q,#$P-PHO3&5N9W1H ++M,R`U,S(*+TQE;F=T:"`Q,3$V-"`@("`@"B]&:6QT97(@+T9L871E1&5C;V1E ++M"CX^"G-T<F5A;0IXVNVU55A<S=:HBP9W#=JXNVMP=X?@T+C3C;M;\*#!@KN[ ++M!P_!W4D(3DAPA]U9Z_^_9*U]><[5>4[W3;^CQASUUJB:U304:IHLXI;.YD`9 ++M9R<0"P<KAR!`4EE+2P#`P<J.3$,CZ08T`]DZ.TF9@8""``X!`0Z`.-@:P,D. ++MX.`5Y.85Y.1&I@%(.KMXN]E:VX``])(,OY/X`.*.0#=;"S,G@+(9R`;H"*EA ++M8>8`T'2VL`6"O%D!X@X.`(W?3[@#-(#N0#</H"4K,@<'P-+6`@0P!UK;.B&S ++M_1:2=[)R!O#].VP)=OG?(0^@FSM$"D`/D60`0!0MG9T<O`&60"MD-A5GR%Q` ++MB,G_&U+_75P&[."@8N;XN_SO)OU?PV:.M@[>_Y/@[.@"!@'=`,K.ED`WI_]. ++MU07^VTT9:&D+=OSO47F0F8.MA;B3M0,0P/[OD*V[C*T7T%+-%F1A`P"Y@8'_ ++M"@.=+/_;`=*V?QFPZ<MK:\CJ,_U[._\UIF9FZP32\G;YI^COY'\QQQ^&-,?- ++MU@OPEIV5G9T#D@CY_N\OH_^:2]K)PMG2U@ER'GAX`69N;F;>R)"#`2$>@"\' ++MP-;)$N@%`'I!?-E8G9Q!D$<`D);X`ZR<W9!_[R87#X#-">QH_GLWK9U^C_T[ ++M+`!@<P4[0WKWKQ;];YB;'<#F8N8&='(`6OT5Y?B?Z'\E<P+8S-Q_EW"W_Q/D ++M@N0Z@-W_!+@!;!;.CHYF?R(0)1MO%QO@'QUN7LA3D$+.EG]"?``V=P<S=YL_ ++M$7X`FP_0S?E/`+((9R?@/\P#L0=Y_AGG@7B#;-R`?V5`E*V<P6Y_`A!=*UN/ ++MOS(@NNZ0K?F'(;+N0(^_7"';P`;\CT;P0%2=;/\6X?^]9@?GOQX2^%W&T?8_ ++MH[P080>@^Y]F\4*,@:Y@R!OS3P1B;/W[@@#^D>:%.(G_(4AIZ7^(#U)!]@]! ++M1%3^(7[(=&I_"%)9XP]!&J'YAR!=T/I#D/FT_Q!D_3I_"#*[_C\$N;K8S-W, ++M+.R!H/\X00)<_\3_\PP)0$J#(6?8S=W"V>U/`R$7"=N?`R,`687Y'X+,:/$/ ++M<;!#%F7Y%_[NX%_X>\/_0HB']5\(6:;-7PB1L?T+(1+V?R'$PN$OA&@X_D$. ++MB(;37PC1</X+(1HN?R%$P_4OA&BX_86_C]Q?".DWZ"^$6('_0HB5QU\(L?+\ ++M@Y#_$#:OOQ!BY?T70JQ\_L+_V23@?VP=!R?/_X3_[-S_?1M*2#A[^;+P`E@X ++MN;@@[Q`GY%3R^_]GFK:3K2L8*"\%>4W9V?FY_GT;6H#=(/<*Z%]_/I![]G_9 ++MRA9R*0.!7D`+Y)5%9PNA,+OTEHCR`.G"Z0IX1F@)Z]9$E<:^N6Z4T.4D:(>2 ++MSXJNC)L->O>563CH>_![Y)Z/Q.XQ77[J$S(_@UT3,Q:>]SQ,][)\VHGUSK.4 ++MO7==*&]"CS$Z6^8O3WB@56<WQ\M3]8N&<GX-'Q>HT4MI[2.L4T#UO_5HZL\. ++MX^73D\ERT(X,;Z#EHM#`S'`MC^*.W/#$3$V&VY@*#;"+1&QC6CMS[@)CWQ<B ++MYJ<\FT#=6;R*#>&4R%UNG;(3B<QB(6/@F#0Q(AS6,P7H__+=<W)Z3!98JF1K ++M*QJ?QP>WG9Q[`U$9=H5PJ]`%&*WDY/K#%$E..ED,']RFD^RM#;.RR'C.:--* ++MKNEEA4T5WO-9VFP[,1@LWC@<I^2D8O%PPJ/D&,Q>$N4^I%*O1)A1X;3E/G^( ++M<>7@$FN0NPX7(EO[Q128>RE+B?&58VE!Z2&F@)ZTX\A]#]@Q3HXOK?$%]4>+ ++MT'R]0M9!E7,^I<3:P:I,BZ+](Y8'&T+8.?YC;!)@,6K&Q4`R%O=J=[.6,4,L ++M5LC2'&W'G5&YQA%Q826`>\2HYO51=P="&KXAEGI7;_W6.X82P5"HM;5<+JKQ ++MD&DN<$;;&U6F<K^KUX[*)"=D:]%6NW)]*_VI8YP<:9@/DD?$$9QL>^*5<IX8 ++M9T+SX%+:`%RJ*!T1(C&XUT/A#8P9$0@RD3U;H!7XGOCO8AV,O?1'+>X"V8'8 ++MV>D,&]J6P\'O92@2A<(Z/]]F#54WI%"[;3%4?^SN;IHV`9XGF"AII.$L$NIM ++M(R@@,H;3898PXOJE.3.%-Q.C')A@S<+[63TMDCOH:O-Z!^4I[P69DBH7$<O< ++MSN*&J4'!X7SR*<S6LP>U>S:88,SU*18<WS_U#'$<86/RJB59D^R,VCDJ#B4- ++M^'^!T862T#7(H:9A<8(N,^733%$.*/[<WZ-B,-L!YW]PD2%$55:@3E[WCD_( ++M=A?!X3L[-%];D'%77T5;=B<'HV>H[ON=/EM.%HG1E$+D)8%OW;.9UMEX":`4 ++M#U4JBITT=?'F'R3.LL`?EXX"1);V[&-0,/6#9C7[N29(2E6?@0Y'(NT47S3@ ++M+^@_#N<%NY@M#J-@DYV&*15#)5!M(<6J$'3R?/6@2[RM5W;8B,--QJI`P`#J ++MG7T]#I92DWYK]23V[NBKGF^"!S@4?5]!_S-U1S)E&(R0:3S%T%NRN/37!;:` ++M<:NSX\#Y:J)6?E!L<]LWFX0=WH)%CW'!A:]MU'S'MYK;+\LN-B^'Y"-ZP1JO ++MI&J[F(N)`F(^>-`T"Z:OEMZ,59MX3D&!`,2T_5`QC-+X'WY"Y]H;9BMBKKSD ++M.^D)WK$]6^$Y:HATP`5W!]V">^*&:><[)>,QCS8;X`?E[:U?!/9X-#;F\E58 ++MR`NN@BRMJ]TD2B>_A/?0P&:;<C(%PD'75%".Y?(,G'^?E?QT)%@2:TN&`FHS ++ML8Y<(G_C:XBVF@2#FI@W2,0GO9^PY8]4XR\!4)@3KIA]1OTN<XA._@)T0V.O ++M4Q!1H9!/Z24@_A55]M-."`/7?,?C$@N>D.S=XQ)<I3Z<P%L68<,<Z*-Q^!?6 ++M\&HEONZ%O0U;`J6PY`:J"=0"0A<=A5.IN#)]_-RVPA3F;6<3>&W1HM"@;,8Y ++MXJ>Z*>U&02^U)YY.Y.+3Z%;I/;K4^85W/Z-#5<_?\I@NGQK/JNBP)N!P!/1@ ++MMW:#'I.EU`6W5F90AL)N,;CCO7&3FLN/DSA1<>%YX!7NESA;-7AXRQ+0BYBZ ++M-!^[(Z>_Z%\4C;1)US,L8"X@/VOD@J*(-U'V'A]BWH<@F**\REOCNITE6QL+ ++MW*0TVFL:7T^VXS]K$=!+[2>Y3W"W>F;S<)[1^_HLOD%3-);A)@`'BV8*0HGM ++M8AE_>->WD9Z8O9;[;>,F&K>;RG=.Z2>>D$[^SX2>=71?8=&YHH'@FGT8\XZ1 ++MM%$%;2=5?CUK3`MP/&_WU-813\6;:#L6V3*M/1$9A<2C<!O'"KT/UDRB>25J ++M<='&]\/XL(268.""]\BXN:<?[(M`*HC/I,Q7*.LLV'Z2]1LJ`_ILFPG9RT#_ ++M8VOYO/@MK7R*F$WZRL/@P.0[NJ\?<QG&+QK9H?-J8ZC(30P_$^4V-18I-BL+ ++M,\@`-WFD*=*/D'K%QG-UF:,:DY"RSTU$9_U=ZUAE[AG`W$777'(_RQ..$M3& ++M_&Q_W#W=#ITN3AV`^>8H+'&#]-W+".JS[S,>8J$HB\_;XN;R?9S\D?H3V6]7 ++MV1>W1$J[Y[>K5@RSE-+Y=FX/>=4?3!;ZE=])BL,VWF/#VX@@?L`O/6"],C(^ ++MW4U\+7G+5,!4FA#/1/=K"2:'R,6TJ>"X$>5U^)PYNI&4N6$LMH7O`GRP.CT? ++MPH5<3+,+0U\SVQEU8Y'+G!=[YX;ZV.1E8SA;X>.CE*)/']I0NJAT^R"4+&K8 ++MI3KW\^N>WE%9?I@`*MUA+KPIUZEKFHZAE.VF&E=CQN&H,IGM[`9"H^FKW)_D ++MXTS=TS4PMB7:TECV/MB>9OP5I*T/.8JG[UXJJG8_GW^M02XIB7[(706Z>H87 ++M:9S/^=>%9&2U__R$B3=1P>SZ"T:V<^&8@"&>)L'5N1<)JVN!N,GBP&T1[T8J ++MA22U,N]3O\2M9+[^:\#G/<N,18%%U=VN+8?FAN=P(OYX/^:9[68?M!@[VCL[ ++M)U.<9(75AJ;>>`[.<U<8+\,5O#71T<_1_KQ%M13EZ]]3EN.^6<[3\O#-HV*` ++MARH&+!,L\.=#RA!MU#P-NJ].R^/LXR^[PZ.>:W#N#53!MV^<:LP;YD_*3(9B ++MODBO-<G:EXUX!A'J#&C43HY&]&=ZT?;&&/J^D-1[ENPBA652P-%D4ICF]*"H ++M?&@M,\7Z)NV?*[=T^_YDA7C!F=1?."C=?2/Q1WBA&G4E'N.'@%/PM),)\+&I ++ME%D&4<^-A#00IK5M!^EZK7)TR_4=*Q1*8T]Z,\E"+A[+/4Y,M%W75.PB>T#N ++MDV-&LM6A\>)ZT%SJI7DJ3VLVMF5HP?6/,439X#<CAFI?R8=T6X<O[+DXJ#B9 ++MSSUGJIA8T#^VM?+!+@,,BT1BS=Y$5,\;=.B=X<WI=9OD<T/SQVZN\&@("$U2 ++M\[R[;;0[;DIR*VV\:*21#AN7.#:J%R"(B+P?A>LW]QHWO?"1S*U/6TZMK6<Q ++M''1@D+-SR$>HN"I#>1]?49(0)[BM'(9CX,:WR;^-3IVI]Q*^$_FT!^>EJI!Y ++MMTVRB+_8HBWW:W-4('8$2,TXVA0A]L7=:%%@]B,'C]][*.'\S,WN_B:%BCW; ++M$%^*YYR9,I'RIIE1?ZG-;-!Y=HF4!A)*[U>R1#3IX8'>RZ=*BPI1)0_GJ$DR ++M&\W038>>TN^#`WN9]-(R#*]>@P;B"<1UX=C;<<"-@K;6QOT&_"ID1I.DKR8M ++M?Q"P$Z!FY9(0N!OL<3P\/QP7G:4R>%Z*\<>E#A*A/:%.>%K9<T4=6:R3IOS4 ++M.W\5]Q$W5^P^O[1)(C!=JOY&2(SN_$<K?>.9=5:#-P6*!6*XS92!*O1QT,7W ++MO''=[%HL06T+-RE>RH=YJK/;'JC#:H2N"(&^<7Y_LSYLQLJEE`K&NLG+`,&F ++M^'",6S!6P#DELEKU-Q_8D!X#O<Q1F+;-[YZQ&O"6[QU,@3.0`6O=+JU/"<&I ++MRG$%=73W"=,JN)DV@4(7N($J/PH^)U"V$&EN.CQ-E&(]-LW8\TC'Z:VT-7@^ ++MS(VG8GN"`Q*-QLY=XC5>41?LI7"2;[Z?H3;.>&628AD=GJIAI0D?.<?B;Y0Q ++MT2HO`T<$=0F*0SYDG0%](X#NYSRCG1V#-OP6O&'V+F`"E0V!R+>LUG&-%B$P ++M;ZCRB3U<M]@;]KL0PAML`BDS<8SZU/OJN]O4S]18$X1IMI.6O-&_3JH/5>*A ++MHR_FCBI,X42/+V25UT,(,()G$ON"_;U>)5.P-&TQ`%2H\DG0HE9@^\,,M!L3 ++M-0,T,9'#$Y/J"#85[;2WY\0SS>_+Q"_Q#2;]-DN4/6`;&]+@F'N':T$JB91H ++MK90BO%@L_?H+`2^[.Z$MFZHH_LK%4E!06B=8OC4N-W0##O,T_G$O^_V>*G:T ++MU'H:VD0`@7**Q#EI9V'R[PL;QIY*JFU68M<UI8(S`>GGEJ9E+GQ?RW"BDP1Q ++ML?`G?*]254+18&80+!8=^6H4+8#Z(^Z";<:'-O'&4Q)Z&YN:#R.C-16_=B.: ++M++E@Y3\<1.YA@*N)C^!+UXS9SW,5R#C;&"5HWF#:S5T3U(Y+"#QSQ0TEU/O, ++M`"E-MB;B3<P[[JRJ&REB`$#Z*/\KWW+.H<UL>+1NOCP>;`S6Y"Q]'8^<O>\1 ++M+XEU83T?C/;3MA[0:`#.P+"=3_TLZ7@<7#]'FIP*T8VM9<'5</U<OE:]I%KX ++M$V[MB=&7.RR>L.(N91G/N"5?0TW&0\40$%@.E^7Y,`(JO!<-NCKENGDL3HNL ++M#BE!AZ&X]AENZX]+]$YU5,/6=S&Z-+:&:IJQ>0VLT_3E->$EOU;U%[]H>L9D ++M7EM'MF9\YM#?FT2>B"]@+4YYM>O;!/,^@3Z(OJ%4C1LCC[4MSV_W?940LTL$ ++MP_Z8A>G]4_+&<NPWB7U"G6,V7+SQJ#<?@Y3`:5<=V&.6F7NB0Q-&@712W8YY ++MV9V8J!TX&??1Q"BGAW7R9M%/I*^NFQ*L*.*HI49"H%)J)3B\WQ#I5I34<JC1 ++MB!X_&EJRKR[UJ!4>WO5*L^][J5>THC\QO]PQQ/4/IO\RTEM=WC+MERR*K;C6 ++M^]#W'*NU<0*2[A#31W>$-Y3]@K[_]=LUN>A1.1)SM-J8$%.@Z)YZ896&/'M& ++MD>C"V./+N+;U3':'LJ<M?^_BIJ"+'C&@$'DSG4,'_HF'$+=GG%]*LP1;Q'<D ++MP5,VQ+]K&>HTT8Y=DUNC/Y`'R)V]92%]B/X23:VX=8:<L(Y@N5S2>O1EWDV/ ++M9D'(<#4[M;9634Z<PI%S6CZ=#_I9.&,:`2I.@)[X(FG_%\$TDNVBROV+4N3M ++M9<N[_:,CLJE*U-PYA86H(=O`FF55V*0)ABC+A*/(U!:CS+1`>@O!SE(G).5\ ++M#K@/]38Z-G(#KDFO134^$=U8O)Z[57D/6B-M2&ON678T?Z?VW8JAH**B?DQ\ ++ML$6@3C_I]N,5G7*<A6W=>$MYZY#+T;Q+)Y6<^*V/&>?I5U')AS5-!$4CU#[- ++M\>ZG\35)/TWM;/F3]P<\BKM:<&+9-;+T7F]+I[`VZUHPGXHT8]$PF\!CS=2V ++M"'92.!J/HR`E8H2/XAE)U5_KU["D!"P9*_L:<."C=,.`KC%6/A9)4=07E"+G ++M^6IEC/=\M>)8$B469)X84-+SWM:^SS[;QWJPQ6A"A"<?<OKT:G%?`B<D:E$U ++MKM#&[`I3]<<%'&S1`?ZTJ[-2U$FC48&W01P)M&$#2W!7A.V8.BEVMOX>SV8? ++M*DQI#;)85+TX[.C;CWAEL(<7TAEZ4ACO$%>4^%2AHXR8\E-8S46*B#+B,.1U ++M&)%V9);DI%YSL?WD#SV<E3->%U92N2!YFLJ]428^9/W\TEG-7L@A[YB_OKL. ++M*NH\@JJBOCG0:\N8-:/+DT0]WPJI%'C+R'U?BF*PQ4-EV$;4D<GY,6_-L1`+ ++MC*^R5);(?('LO5FB:%RB3V%&K4D9V!F<669L]>:3COM.>\]U$V["XJ%![L<' ++MGM44M8$/'D*!)&5+I[ZZ!K`^EP8Z)%I?%N1W2TB-+1D'U(GJ=U+VZA^P*`JA ++M\'#,'.:,E8(#<@.[,XMQZ5O34:7R<OBWCM&N4VBU_-(BK14]UAH"6FWYS"A: ++M(GX4%44[T;=94>281+L;"53UU+BE<@]`.\'.-66ST>&"&9$O6AM*2N2*R!'J ++M:+@YZ$C"RA5_X;I)M/93(,A_F>4T>>_P60/A!$650CW"+JU-#!KK_5+<MM[L ++M>!PJ_VMU-BR'11*$Y?NZT2YC=EV9CF;A,VR)?E(;)S>3\J]KTQ$E)=`7)9RB ++MB=[4IOB#PN!S`C]Z-9)B6:%<O^<RS_F"W1Z^A.]VLN"<>J_IEAB;9];YL<UJ ++MP[/GJN0;M8EI;8(]=%@WU`.X[/SWJ%CF<_OW*WNX,-$A7R^FK>CH)_=1*L]L ++M;920WY4V)WN@8[J;+&[M,EC7"R[%Q$!U)@,R^!II<1(1*$K!]D[OK;7(H94\ ++M/O9[AHB14L`=?+35F7X0(F$<HK]&MN@A0R&8$K7E`QSF<%>KF5P?[&XO>2VM ++M-N@%?G+W528$RJ]OWE'?EZ)O1]4!3Z(_6L!=6_?Z1%/T5#[1C^3H?O4C-@K? ++MI:;G5Q_*EDE14[(\)B83_@8S<'XT0`=^>^+(;T@Y-46A<8[>=O;T':^\*8!( ++MW<N&SG$-2>)&)"?1G4\WA]&R9_7Y8ZJ(<-U.:YZ6$MN%F?UK?F?P[JQ14SIF ++MD..XT.,$:UJA3`Y5+C0!^:X!DQ>S@EN:=1!9P5D&H=-M.0?WZ\6.?,74-UC> ++MS#17.!*8'RXX:V%/!_2`F8M;#-CW1V?`#P,IO97+H87*A;?[5D'1WUC99V=> ++MXR"_96:R:(5E7Y8EFSA!Y:;H7_U1,*XH_DIK/GTK/O5PL&Q];"5`492C?:7M ++MQU20:]!-=T`J<7S@&(XGRG.6!N;MA[DIMY.OJC--#4)QB3R)18-24'#OI2B5 ++M#<YHET<RN+7PKB,1JM_/CY=^P\)!PU:5L$/HVXWIGC0\1::<>C?5J*W!6<B7 ++MSA*JA@PMXH5[%&;*?HYV$X\CQ'N`;_[V;:AL%,_K(C&><?E?HLSNL)1>EHTI ++M^R*"&Z8SZ#04=$AU2EDU-=,[6R,,J))EPR$3'^'-&8LZ]ACNZ8PB^_K++^E= ++MV*WHX#.RL_O.*#GH?JDJZI9&2M_C\[U:+QT/XU97^D4VA*[_MC%[.]']U[[@ ++M]1OL^QY3*U)$AXE9M[TEK>6Q*?MEG324G,W0-5_0U5*-.:^7?C=1X-LV^*99 ++M=S@Q+9@&<9C=DMS61;,0TW61G,OA@85E!DS:+_4]08HA=#G*PJ/-9WJ$VL(E ++M;]NX^S&9F\:U6S7W&8.;Y-$ZMI'BRY09"A6"$PBM=A"E7Q7^$&>18B.@?2D\ ++MHSD7&/HT0'A4[1".YG,$JI9QF!]RM7#U:WE->Q$3JQ##0256C*E31:"-IPQK ++M[Q&`F]C2[LL^5&,DX/F._U'>"N.T=HZQR>QZ'F3F7!T0%L[L-)>>!BS81/M& ++MP+9B0/`4C)M"$%H:5@Y.C:`!_)A*Z%F=F1[<5%S`NV'#TBY-3KB@^P+?;D4K ++MV?-YD4!&ZY2`'7T2RN-^8.Y^XPO3&%;7QCK#*(KH'H=\",F%S^(6N57\A+<> ++MO[9EQ(O7P=J$:=O/+TA*;R)4%Z!.<<2$'1Y>^^,O-/O+E]/8R]B3[<EW:O(= ++M^5KXOC=4N$J3CY63O\4&G6Y->EE;K[!%.U-NODV>ZS2WXAEL&N0+9I3,6T\0 ++M_<C!O"]6KW^?29(GW#)1HE&?T96_N)V%IF.\HI$T`>H9AP?WRI@/A326G^J0 ++M!N7VYA+7OK56@E]3*8?UECK$$9KR_NBM0;\8'L(R0AD4FTBAZ_"1\\Q#.^CJ ++MXH/NS&LN[_ZB\@7E/0+E1;\T]I]SM0_*'N>=RGL9KK<)XA$6:)M)'B-[=0*L ++MM\Y$QH]?,/N$[@9)OH<V<Y70=#)5E0]H.PY^)86C*V+Z7F1CT<QWGO4J8LE1 ++M)T!J;X'SA)6_208-E6BSMQPQK\PM9U;0_5-T]KST$/%'?^:][MS1E^%R5$Y8 ++M]*XH8E3$HVZ_,ML(6IM,#(;CS0L#W-NBV]LAF]@*TFG].M<HZ`%V4S<%#E[/ ++M!*@1GG=>L/>'4;BL%`SO2MI#88OCFN%&YJKKJ9'@Y';[87E?C>DE2^7++_*< ++MG1[_T`@_N5V8#&IB;T&/`J<S4\&#]XP_`$\.36[)[&+84U%5G<Z?O![`*$A= ++M&TZ<YS_7R5(TS%D"KG=I&M^2A9R;2XQ3'5*=1BD&\[I&K\W5WATF+]?Y<,== ++M.4"Y+6@VJR(=+QE0(9(+PI$$??3><8IUT6$ZNN]*::P68X%<CV)AH.X6)1^F ++M=MOZ"JH\@Q\434%<"4?P<3%'AXE2DE!U\7;;#^EF+7/?D&[6!46TU^_81A70 ++M2M[/("PO(DK(,%B:\>HR*#$ALR<J&$W]TGB2.>4)?M[N-^]6W/2-P&=R'?XN ++MJN$U)I;MC5)H`7=UOF@=)A,(Y`0U],PUK&\9Y0U*R.RFRS7O(\I/N&E,/UV[ ++MC004)6UM.82]QTV?=+!<39-`*'_5$7$653AE+GRA(5%4@F*C^BL]4!>U./XF ++M5K#)4LRDAE?-^^2U?=QQQKHB_.NZ29[F5+140X`XZ5.K_#@QG`H_F1)ZM@RM ++MQ3?PO'US.$HBAZLP3IA-T+@K<N!K+7,;QJ>M#`=@Q0.5E?F:SK2U+[5)B&5J ++MS5)NT"STT83&?'?AD<UC;_$/$3/<6ABP4&?+F@B_WY0.BGM3*KL3'B57I^3$ ++MOEJ7!;>N;@D;*%WYJ&W31O((7HM2=*NR>-EKWQ>MB-.O4015B7_[@FY9#S.H ++MEF\2^>;[P)L/!QP]V*R!J`YG?::X^G[ZT7/HI22B2H>PHIH"6M1XF*,)=U): ++M0;/G!<B>CZ%:M`\?LNP*/=!0J2['^R3H[Y:KX_4-HQ=2[7`%.A-(X7N)"?6. ++MHDA?:97D\8E^'\;^=2:V=N;K@/6I@=IJ>GVDJ17EATQ(_73.HX#XVG%5T/BO ++MT"GUNQK;-GD23_3Z2X45`==0P+:9[P8IMJ,MS_-PJ&`\M)\LYW93XT[39^F/ ++M/U^8HT^\.WPX,3=<C+JDP7*E@<$8,8[O+9FQA_3F>2K.-QH5)L.?N),1'PWK ++MHHO1#(OF*Y9IC#%$FW0,(A31)"MMI8ALNL6^]#65%611/'HNSY1E\@5(N>"Y ++MK'B$-6;WS?:5,?8K\7SZF9)081.]?SIZ(W3-2`,W>%I)NG>3P8W!:2RCE]9N ++M-%?&80=G8[KZC@W+\ZQ"<2WC-,,;A$9(8Q076UT/F_J^=N2'5'S$%W.1UN\V ++MT^.#[D3*X44&`BW!^>W#X56!S:M3U^]-.:`7Z2PW2JKV2JI?'4/?%H]HM[=* ++MS@L[BD^]92>2HW<57*&#YYU'R?BBEC:9@<8@BMJ<_6&3=T9!D8^S[Z1'P_>V ++M^*+25:>\:;P+%CZ\(\GWD]H,+$,[U5'"Q+*P?@AU$'=%%F++\("C35K<H+[- ++M8\[W[#PEJ(3@3U(XZIZT5;L35]5O/T?[.#FAKV==>2,Z)P:&><ED_>"N6=H; ++MA:<BU5D&_CQ5?Y4NQ\YN5I]*EI]TP8FY%1CM9WRA86I5C1'-+;6X".02NOOE ++M0>\5'YDCOOZQ'<F36UMMZL7GG,I65^QZ]-4"3L2,P7YG+86NX::"E:1*'#3: ++M:F_+F?0)ANNJGN)EDIKN05C#9G`=N6-]I:HF=K9>^X+0O!*T8ZV0DY[E9/\# ++M`)>/`K$!)H`\JB3M9(>0S:/UA,]IN20C(1]OM#7V]#P3/$;PC8FY,^)A6C!R ++M[#%D]D8JU@T][%I)O=N?A"CF/<**9+ZJ=%NI%JJ!9"J";#U`H!8I57H.'H&G ++ME_F;)J+W:H)1`3HY<>("6%E/9=9`7U`0AU*W3L_V6.^<FU:D0S0\1J/]H?'@ ++MK3J#>##K)4"5OT`']6ZURF@'<>2G98@(N_X[4?GI1>6[HQBRY1>[!?=$_OAN ++MG=Z=&N?E[$,S'S@%I>$XP[:Z+_RQQ)B1_"+N*Z*$K">QW<I:)&?A(^U],*Z\ ++M%'MFL95LP2R.J9S]+`]S!]-6:]`W=J0#C](K+Y9](X2A+^L/=&PADN%]FA1L ++MWSB9Y*5]%(OLSNA;!)M0LUH-2:R\\1/E(ZE46&E4IV-6!PX8N]0&+3BY!C6U ++M?;/@CJ(<0J8*HL9NN(^*Q6A'KC;BC&SDE7`BJIR]"0V+WN&-;V"@B<:68%CZ ++MO$:UU[XB-[@?U9;3NX4J9?97U&/Y]L7SI>H2D=^2<P>C_.>S6A4OK/ICP9NW ++M6_'?-.E++#GDM*TZM4(>^?2Y&U*)1N5B&[/4#VAG?)+BVT.Y0UT/82?ZE_:X ++M+<8<TP(T5)C)GL61,;PU`$3IY]\K^"L1!?KH8MF?[-TOXZXZ%EK,/I*1')C* ++M6G<SA!SDUY$'K+&Q/GGR>)\TDW!E$Y=@\)BK):C=LFHZ9_,$&E6JSEGEJ59Q ++M^BOZ#^"R[:<E]&>1A(`X4FC$X'>O(D!KT-;U\5;MK#@",=%^7M+]@D="EF+" ++MDJ$$)$U9JA24]"O\D4EA^P9(!(S8!,?K\UY0W3H[A_"C'UBONT"3!0"P;M35 ++M4U%P\`A7!YD?+!ZA)UMM'=Y,.%C!V#X@-<(9NJPS[6*XR\(+Y52@.I,#]38E ++MA^>QIP.O,2]6%\_,<,7PH!IU99ICF1R_EO;4W>V<A$W7!.?SY&<9V0S^L/3N ++M,,<*4C$B&(7\QYT"G5]SZ]&+Z51)6<7G)1M&.&C^*X[V/14EZV%QE@.Q8!-$ ++M4U<#"N;+1ZXOF5[/T<P7L3_1E-96J%O>:Z#BP%.TW^@QAG%.IZQ6JO!)NA6O ++M4Z&IS$I5E)SGRZ2S(#/G,8LJ]V]OP.I$;C[4XC'YMAB\<DL:MZ\I#?X2[RNX ++MY[MHXV#>?-O;9VM14[WT67>B<[],R"IIA5.D]S"RF=6`IR1*'ZI>9'9S7+.; ++M2<.)[GTRU0)5W`ST".*XE/SG);]:*X_-?F[<J:#;50\&?5ER1=AA59C-664G ++MG^+2VD/U9W3">R'>G4_BSR:LOX3LGO"PP?$B"I6-I,9O2'#HJS)<0$@:JUDA ++M/H?I=U9,[4OQ)I5FS5SCXA.=+V:FKU\H-<Y^N3-T\QA6J/^H0E@))*A7H';I ++M(N:5+4DJ](:^DM:68=;V%\9M^S@'-T;:IRBV2.I40RNG)N4AVVM^LC[E?36= ++MZD)>4'/`WO]F6D[D<'QL!/R)UA0J*&2T\=14\)F%YZ5JZ_O-8'%?!0M`\.VK ++MUG%52TYWNBKRXMYXGKK"VDF$[^K0J3/&RTBO3U7V+0E91)+-N7UL4PS1MD(4 ++M:L[.L/I_:I1!.8";2/W.9BP&SYB>^Q7SR8W\H8H_0/^\`4Q=1/4$3WF8S,LO ++MMU"72@IBP++G=CM.)S]3MHO^Y(V3R*.W1T'\90QU8/+)2\>M"RLQ.$-97LSB ++MY[?(XH.Y>#*?_?54K[!2XY`W:(8M'/8Q9X\:G(JAPB57,!%30,Q*>3-Z\6"` ++M:BK2T/:D]^QZUX%4'G;8E1KM-MF]!4E1X=UGV]#1P'BB)"3$_NKIL:^GZ[EG ++MRZS2(AK((%[KD44I;.B9/(!/X?B`YA>F8"JO&B)6W'N*1[K*??NY\,+>F^G$ ++M9AW3M\#$@2,0(S+QWNI$6;^Z/1(*)>GZUPY=)?C&B+#LKAA[Y)170[FJD9/V ++M`_.5/84N=]2$Q:3.`Q_N6%M[;NQ%VCHL&*>95JJ++T%&Z86/E+IL(LB.PSI? ++M,SK4.0,1/NVM,985_JCBA,E%A][N@LG0UR%0#8CM+PHJ;F?;?A!C2;>#84AE ++M77\7.'[FQY@;B/U-'9.]*J.:>\_;SGOIH1^[7RAMU#($U>5=CP6E[ZNI0H'O ++M5=YS28>1^2>[A23S'90*&E+Q5/C>WQ.H*K^'WTDC^G02W:"0;&Z\QE;P'I^, ++MUIYUP'=6HB'.</<\)F23]*6#G2!6W(*AX;O'A"NHW]`]>/NVF4ZK^;/(J*UB ++M9$SH&?,K:X(L8HO@9ME)JMT@FUG;<\6>04-A"<O:=!F,]YID^3I,&C:X<\ST ++M(K=5;SV;F*A"&T].`[+WU@R@SG>>D(42J/U>K2J>D(*E="F+^^E0+=I_(O2B ++MB;#T/%U:9+YP-*_JRW%[4`F<-J5H\Q"S2U[:@RYA'^`EY5L(1,)7[(%<PI-W ++ML`QB-IKOO]2A']*_95HOUZWRJUAD8`E*DQ>B,/KLI\;$3#([O1X[4^+U91N) ++M=][7.D[>-5-.W0YV#-G>!VT?,5/^V$._F@!NBL@_42Y08FXH!*FO->!R)_Y: ++M7>L;E4/UD5<LI2&[4V*<HWKY@3)U.;D:41XS!_ZK]DJ&I7F!*"^Q9!]5ZVL[ ++M_X;,\%R\M7!'Y.$KO$UQD'+E"5S0>FLK+S">M`AFS"_$$0=13P##1*TTB[:9 ++M\^?*8%IR?\'JOK3CIN+GQK2=R[T8Y[GY*A4%MWAZV6*VMX<Q)#<<-&LC@^K* ++M(9UIXORN;4`^TI2)FE_?!G#Y!A[BV1(HRY<WJ587[M^`:`)=,)M]=6QMSJGC ++M6V;UMPL,6H=G2$J^<\=V=4M>65IN3W'[-@Y0OOIE3]^4I/*C\N4L=9J;=_#. ++M=L40P+@@BR6JLNKYZ"3I4LL:W#^RXM;?6-BW6;G>:T&!WZB++ZR^#3!X#O$" ++M>EK@S%#@?:K-_#I7H-KU.O]K*X_(SW"^'RMIQZK8];M)^&\'<_G'![_PC&1& ++M;\RLAWU]E,=Y]532GZX\:)Q:3!$3*&(L6%1MI^P?G]W(>IV+6HX@GE[7B;\[ ++M"ZQY!P03Y,5\GANZB_"PX)7UC&5+/&CBB>C&*LF]KB<4$%BVQB$M(TXM9TDS ++MRFH-<M-A\QB8EW?[+.8&4AAV<\A?F@PX[B;5V6K%W9EJ9`UAS+TFIS*^M$MC ++M'NIHE]/221\M"6^8;6-1[S:2#.R@!QF\Q9YB&4*<L%,3!+ZAQ:,*D'&`;?,_ ++MB+1"Q-UT^+KJ'Y,ZPIWD*VH&\BRYF#/\'I!\J!,%+-O%P?$QGOEAU>.Z$+5> ++M3"F0<\7>B,*^66KJY?IJ8"FZ0*B6T-$V%NIHMUF_U)%&WE5(XI@D[CK;UU8K ++M92KE/O?T,S&B%?JC%'&+<-B09N>V7C!P7)H+9S&'2RUEKNW!8W#*\F(S8`EW ++MHJ:'2#C5&E07P!8CEX5@O%S08D!4"I=W\OPN4(/&`GJA?+H8'WGT3<;Y=E"G ++MLN2]K]*'5=C8PR0[OF3>/%=T(OL?;;?,&%#%HF/1.R.Z])H7SFT4"E"3`?%! ++M9W?:GZ5D,B-=\F/-Q)L\>193E`4JKJ=G<[.HB5S.\9CS7[*_![<\%];*#B7' ++MV05T9Z;+'IRU=D<_JU^KPZK*V@OC&9&NIA3WGA\53'.VIY@2+QNE4F`@>_.O ++MQ$G;@<<:F&2^,>IT"*4GAB,BQ`EK]"!6@E.=`F0UR2Y4Z_?E]$/G\2;9$B/' ++M8KUG]P[P6R-LF:N:&VZ/EX8*:X<TW7W&BEE;3$=%OA6A7%KMAJ18,YSS=2%- ++MPG3L<\I3RI17Y[1).KO^PC83\[19?+>D#CM*B/B&W&@YO$6[KIPD@Q5)#^/& ++MF8R!::HVN`?#/';016@XN6#V+I+Z;H4?[Z2J`<HLTV5V.78E9>@'W#D^F6#9 ++M,ES"P7'%XP?Q7^PWO,+<]Z?.PQ[>N&@!^%P7Y!YS'R9E5I3)]B<1-=Y\Y&3] ++M>27>\&DG;'^??,::N#59!UP]10(O?+M"K2B+S4(4A2_58RU'2K>X27`,[XB6 ++MO"GB`<?G3Z6*A<JJV`J0%$UCONP)N9H`"2MLW%!Q+U'^,'OC3`IBR.^$0:2W ++M'>`Z*@^*:YNM^EHO--46N?:U8Q.1A/+-P[>%#%6NL-U9^(>,SS46P=A-2F4N ++M%@K5A.8_IC/STQIP&_PUA6>#>_M8QXR$3W<\?^:<M6V!$1N[_;["$.E^52YS ++M)]-NMT0S/I9K^>B_D(&^2:/SO<@S^=*AO)VY/)I`,$7ZG(H+VSK<;-!9M!WO ++M<[:(%4J_<^SFL,Y'5*;9`-L9`-"0^I.0$^4P@EB?'?O_PP_R_U_@_Q,%+!R` ++M9FX@9T<S-WOD_P.,YE&)96YD<W1R96%M"F5N9&]B:@HT,R`P(&]B:B`\/`HO ++M5'EP92`O1F]N=`HO4W5B='EP92`O5'EP93$*+T5N8V]D:6YG(#DQ(#`@4@HO ++M1FER<W1#:&%R(#,U"B],87-T0VAA<B`Q,C4*+U=I9'1H<R`Y,B`P(%(*+T)A ++M<V5&;VYT("]925521UDK0TU45#D*+T9O;G1$97-C<FEP=&]R(#0Q(#`@4@H^ ++M/B!E;F1O8FH*-#$@,"!O8FH@/#P*+T%S8V5N="`V,3$*+T-A<$AE:6=H="`V ++M,3$*+T1E<V-E;G0@+3(R,@HO1F]N=$YA;64@+UE)55)'62M#3514.0HO271A ++M;&EC06YG;&4@,`HO4W1E;58@-S0*+UA(96EG:'0@-#,Q"B]&;VYT0D)O>"!; ++M+38@+3(S,R`U-#(@-CDX70HO1FQA9W,@-`HO0VAA<E-E="`H+VYU;6)E<G-I ++M9VXO<75O=&5R:6=H="]P87)E;FQE9G0O<&%R96YR:6=H="]A<W1E<FES:R]P ++M;'5S+V-O;6UA+VAY<&AE;B]P97)I;V0O<VQA<V@O>F5R;R]O;F4O='=O+W1H ++M<F5E+V9O=7(O9FEV92]S:7@O<V5V96XO96EG:'0O;FEN92]C;VQO;B]S96UI ++M8V]L;VXO;&5S<R]E<75A;"]G<F5A=&5R+T$O12]'+TXO4"]2+U,O5"]5+U8O ++M62]B<F%C:V5T;&5F="]B<F%C:V5T<FEG:'0O=6YD97)S8V]R92]A+V(O8R]D ++M+V4O9B]G+V@O:2]K+VPO;2]N+V\O<"]Q+W(O<R]T+W4O=B]W+W@O>2]Z+V)R ++M86-E;&5F="]B<F%C97)I9VAT*0HO1F]N=$9I;&4@-#(@,"!2"CX^(&5N9&]B ++M:@HY,B`P(&]B:@I;-3(U(#`@,"`P(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U ++M(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#4R-2`U,C4@ ++M-3(U(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#`@,"`U,C4@,"`P(#`@-3(U ++M(#`@-3(U(#`@,"`P(#`@,"`P(#4R-2`P(#4R-2`P(#4R-2`U,C4@-3(U(#4R ++M-2`U,C4@,"`P(#4R-2`P(#4R-2`P(#4R-2`P(#4R-2`P(#4R-2`U,C4@-3(U ++M(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#`@-3(U(#4R-2`U,C4@-3(U(#4R ++M-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U(#4R-2`U,C4@-3(U ++M(#4R-2`P(#4R-2!="F5N9&]B:@HY,2`P(&]B:B`\/`HO5'EP92`O16YC;V1I ++M;F<*+T1I9F9E<F5N8V5S(%L@,"`O+FYO=&1E9B`S-2]N=6UB97)S:6=N(#,V ++M+RYN;W1D968@,SDO<75O=&5R:6=H="]P87)E;FQE9G0O<&%R96YR:6=H="]A ++M<W1E<FES:R]P;'5S+V-O;6UA+VAY<&AE;B]P97)I;V0O<VQA<V@O>F5R;R]O ++M;F4O='=O+W1H<F5E+V9O=7(O9FEV92]S:7@O<V5V96XO96EG:'0O;FEN92]C ++M;VQO;B]S96UI8V]L;VXO;&5S<R]E<75A;"]G<F5A=&5R(#8S+RYN;W1D968@ ++M-C4O02`V-B\N;F]T9&5F(#8Y+T4@-S`O+FYO=&1E9B`W,2]'(#<R+RYN;W1D ++M968@-S@O3B`W.2\N;F]T9&5F(#@P+U`@.#$O+FYO=&1E9B`X,B]2+U,O5"]5 ++M+U8@.#<O+FYO=&1E9B`X.2]9(#DP+RYN;W1D968@.3$O8G)A8VME=&QE9G0@ ++M.3(O+FYO=&1E9B`Y,R]B<F%C:V5T<FEG:'0@.30O+FYO=&1E9B`Y-2]U;F1E ++M<G-C;W)E(#DV+RYN;W1D968@.3<O82]B+V,O9"]E+V8O9R]H+VD@,3`V+RYN ++M;W1D968@,3`W+VLO;"]M+VXO;R]P+W$O<B]S+W0O=2]V+W<O>"]Y+WHO8G)A ++M8V5L969T(#$R-"\N;F]T9&5F(#$R-2]B<F%C97)I9VAT(#$R-B\N;F]T9&5F ++M70H^/B!E;F1O8FH*,S8@,"!O8FH@/#P*+TQE;F=T:#$@-S8T"B],96YG=&@R ++M(#$P,3@*+TQE;F=T:#,@-3,R"B],96YG=&@@,34W-R`@("`@(`HO1FEL=&5R ++M("]&;&%T941E8V]D90H^/@IS=')E86T*>-KMDEM4$U<4AD%`9!`%+Q4*Z+$2 ++MD:4D,T@(MUHA$LJR(/>B`A(GAS`PR81)`D%`Q0H4I!2U*-Z(J.C25&V+(H@H ++M!(L@(I0B&K5B!16\U!9+%17H@+5=Q<?VJ:LS+[/W_L]_OOG/8<T.#''T$E&K ++MH8"2*APQ-N8.^/[\$#Z&`HR-(BP6GX9"!4%)EP@5T!U@;FX8\%**`>8*,)Z[ ++MLXN[LQO"`GQ*ED(3XC@%F,=W&!'Q@)<$T@0NE`)_H2(.2A@/7$B"$`HGH"*% ++M#;Q($@2/K)"#8"B'=!(4L1$,`R("5X#54$Q($<X(DI\TE@*\UVV14O9FE`1I ++M.0,%YC&0#H!!%%%2,@6(8"S"":"8O2!#\F]`C347*$DR0"@9L7\=TUL"H80@ ++M4_Z04!*94@%IX$^)("T=*_T8OJ;SAR)"*1D[]5,(20+WDHI)"-#7+4(N(%10 ++M%$@H\#@0*R3E<+0/I:*Q$$QRHP@<[XB@4&_!_#=G.CH-%!)216B*[$_?$?EH ++MC?U5,PG1A`JL1-DHBC%"YGWS%35F-Q\I3HD(J1@X<5V`D*:%*0AS>YB*"U(Q ++M0$A%4`6@BD'FL*64@ED"F%3202Q%(R-'BJ%<P"%&>LC;?^'M3:E2,6?@Z,1E ++M/%$>#_"X:/K?=6%2(E$)_98`+HHR"J?1+JZD:2A5C%X<)J`W=2S!Q`FA"N*( ++MKH/"/3;&;R_/.KS69W_K$2,'N<V.0QLOG<T\L<.#_?"6QY1V^E1+*)S99Y%I ++M$4]HS+<]7GJ4(XKEWK8J]TJ[D!K"R;QF<<%LFD/)SA#C)_C#R.AQ#>IZ[63) ++MGIS[NEG=LE/SGUR?T]^9=-;H^$>]&&^?U>-<P\-7.P:?KDU8UWQ;9UHDFG-W ++M&Q*EKOJH$(;W=!8TO7CD2^VG=*4-,R)W]D\=TEEI?VA+N&FVPVV3VM_@RH[W ++M7YF@#JK8'YL1]&'2N*V\@DDM7[M-+*VIV^LSSW#9W(22U.[L"[N^>%'?\:%@ ++MX[?G'F2?N93<CGPW/=@@NK!++W&N5W[[KCC!)M>2@$_OY<Y-+3*F;+83I<?/ ++MS(M>.3W_2_46RI8T_=SV8UV=+>N8_12NY9X%.G9XSNW9:$[UW,]*NY6LIGS- ++MD:6JDA4/G&41.1KWX8I"CY7.&^[.?V&R&$<Z\Q#MC/0"N9U#<>_ZGL`^@^9R ++M^VT<_I6#JO/>_.9>54AUO<9G,-+DJ+W_\9PMZ@C/QDO:I9WUF[98F(=I2OLD ++MCO5IL@(J45N8K-^QXK[@X$1T\;TFN\IUS4<-LX^Y[M-_^7.WM:;-TBKCD-7B ++M7^X;#\R,:K@8V/3.-9FC97YXZS0=)^FR:;#FQF;S+CO7MJJG]PZ8INJM,J_B ++MJZ9<K'_LL.U9C*1Q]?G!.\;#3O8;ZOB=2RY_.SR^-!*?"'J/69O9A,N5GOS3 ++MQN*.*&L?FWI7LTUEYV]F]`SF'MK5NW5V5E;?'D\=*UQR);O?:^]U:YNZ,P_8 ++M9'JT^3N_;5Z3/<OZM"Y^H$<L#YQAL=-U5LO"AXZ+9LJV#A8T?W6Y/2-OL!B\ ++M:\"?^"C1!9PU<PJ=GH.]A&EQR;5E;78&DWDJ<#WBU\K((5&0R=-?*LQ.OFBY ++MVKKB3D'QDY;"H[N_R6HHKU%>?$]<JW_*96H1;DE:+<(F1*>IK^4_KWK4M97K ++MW1!BHK^0=:)J:.?*&/'ZA@BD>E]_Z_B`<UHWMS+C">%Y'NM6&7D\%=\Z[:S6 ++M5#Z+.>]O;GKK295^7^HKX7!"R!2)X83BCK"F.]8#U_?<O>"VV[?""&TXI"^N ++M6Y-V\=W6,Z&W=_ME-$Y^;+.F,:S^(%U-QFA9)9L_P*G:EEY\E;9QP7+?YJ(H ++MP^*?K@[LUUOP?>XGNXVB*E[E!_G&+%_>NO^]]IJ`#U0MGI/FU3UIFWW]) ++M;^^<YQ54X/J:;H/,'IXLWS8W09FLOM&&.M9FA2\36'\5I`O.##(N24RK/!E? ++MN>`+IRZQT#ZB&QU.3GPPI&=)=$RW)JN[QA_HS8N-][YQYU[7@:@PTM>O7+`] ++MM\Q%[OM(A\3K*YZKXGAV159GG5OUU;7'+U=U%?U6]O.G%1IM-TQ?U[PT['E- ++MWA'T'S[(_P;_"0.<A$):04F$=`+R.VV05D9E;F1S=')E86T*96YD;V)J"C,W ++M(#`@;V)J(#P\"B]4>7!E("]&;VYT"B]3=6)T>7!E("]4>7!E,0HO16YC;V1I ++M;F<@.3,@,"!2"B]&:7)S=$-H87(@,3`U"B],87-T0VAA<B`Q,#4*+U=I9'1H ++M<R`Y-"`P(%(*+T)A<V5&;VYT("]"6%%40D8K0TU#4T,Q,`HO1F]N=$1E<V-R ++M:7!T;W(@,S4@,"!2"CX^(&5N9&]B:@HS-2`P(&]B:B`\/`HO07-C96YT(#4Q ++M-`HO0V%P2&5I9VAT(#8X,PHO1&5S8V5N="`P"B]&;VYT3F%M92`O0EA15$)& ++M*T--0U-#,3`*+TET86QI8T%N9VQE(#`*+U-T96U6(#<R"B]82&5I9VAT(#0S ++M,0HO1F]N=$)";W@@6S$T("TR-3`@,3`W-R`W-3!="B]&;&%G<R`T"B]#:&%R ++M4V5T("@O:2D*+T9O;G1&:6QE(#,V(#`@4@H^/B!E;F1O8FH*.30@,"!O8FH* ++M6S,P,B!="F5N9&]B:@HY,R`P(&]B:B`\/`HO5'EP92`O16YC;V1I;F<*+T1I ++M9F9E<F5N8V5S(%L@,"`O+FYO=&1E9B`Q,#4O:2`Q,#8O+FYO=&1E9ET*/CX@ ++M96YD;V)J"C(W(#`@;V)J(#P\"B],96YG=&@Q(#$T.#`*+TQE;F=T:#(@,3$S ++M,C`*+TQE;F=T:#,@-3,R"B],96YG=&@@,3(Q.38@("`@(`HO1FEL=&5R("]& ++M;&%T941E8V]D90H^/@IS=')E86T*>-KMEE58'-W6H'%IW`-!&K?@#L$]0'!W ++M:0CN[NX:W(*[N[M#<(?@+L'=AO/]\Y]DSES.7,TSW7U1[UJKUGIKUZYZFIQ8 ++M3I%.T,C:`"1F;>5`QT3/Q`T4EE&29&($,M$S,@H!R,F%[4#Z#J;65B+Z#B!N ++M(!,7%S-0#&3P?O#^XV9CYV9B!Y`#A:UM7.U,3;XY`*F$J?]5Q`$4M`39F1KJ ++M6P%E]!V^@2S?>QCJ6P`5K0U-00ZN]$!!"PN@PK_.L`<J@.Q!=DX@(WH`$Q/0 ++MR-30`6@`,C&U`C#\RTG2RM@:R/%?82-'F_]..8'L[-^E@%3_:%(#WR6-K*TL ++M7(%&(&,`PU?K]VF@=Y?_&UK_V5S,T<+BJ[[EO]K_LU+_6U[?TM3"]7]66%O: ++M.#J`[(`RUD8@.ZO_+%4%_9><#,C(U-'R/[.2#OH6IH:"5B86("`=$RL](^M_ ++MQ4WMQ4Q=0$9RI@Z&WX#&^A;VH'_B("NC_S1Y7[]_/!@4OHH*"0O1_L];^T]2 ++M3M_4RD')U08$9/Q3_0\S_>'W1;(S=0%J,KZO,M-[X?OWOX^T_V.8J)6AM9&I ++ME0F0F8T=J&]GI^\*>-]$[\0&=&<"FEH9@5R`()=W8P9Z*VN']U.`[ROC"32V ++MM@/\Z[ZRL@$9OKG:?`-9_2O^7R%.((,;R,[Z3X`+R&!M!?HWLS$"&1R<_^39 ++M.(`,5J9_%;"_-Q7\0^]IX3_TWEWD#[VW%OTW<;PW%OM#3$`&\3_$`F20_$.L ++M0(8O?X@=R"#]A][GR?RA]WE?_]#[/-E_$^?[/+D_Q/Q^P_[0^SS%/_0^3^D/ ++MO5^?\A]ZGZ?ZA][GJ?V;WG<^@_X?>L\9_*%W%\-_$Q/CNXS17_A^]:"_\%W. ++M^"]\MS/Y"]_UOOV%[WZF?^'[\IC]A>].YG_ANY3%7_AN9?D'W[<M@]5?^&YE ++M_1>^6]G\A>]6MG_ANY7=7_AN9?\7OELY_(7O5HY_X;N5TU_X;N7\!YG?K5S^ ++MPG<KUW_P?W\0A82L7=SIF-A9@'3,[QOW78H=R,7.Y?F_5BI;F=HZ@B1%WO<V ++M(R,G,^<_44-'.SN0E<,_[\#WI_R_V=CT_<4``KF`#`%+\]:&/`%F20U!Q5ZB ++MN9,ET-3V^"F%`6,=@74I//3':SSHLW:-$TH@PDNT0#0STU+4Q%.I<@8C8[8- ++MW`9!CT%W18;`1;1!)$SJ[%1%V#/#8RT=B*$?`STHEAFA^TM$.S:-M&?+I#?K ++M3AW0E=*'3!PYN*=A4,4+\R]77N;>/S>6$)*-2'<3`=H_6J430"H'ZS&CCR?B ++MUKG62_E#.%JI-QBO2[@]OZ;-5Y%2N,)_R$#.I?`^PS-2NQAO_@0PI9D3+:EE ++M<DF\5=7MHQ#3#SO-RZ4L?D7B*"RT[44E,)LV@\;@B"8^81>&S3S9&"Y5JG.F ++MUQ[QFYPM&[QFJ/M>`I7;^>7C/,S)9A"3=D?ZRR@>).3!S`$CY4_NQVB$6>.B ++M@Q%D6Z,)Y5KFQUE6/X?(V>Q1?H%1(AT37%H_[*S%5\:'<\US[)OZ,0R`%&SB ++M;QBE!"&&%N6.P\ZE#"@QF62WOFF.'KC'(`0T>N5Q=PZ_7*D>>MYM'.6ERHM, ++M2<0HX28=G),#[Z)FS$!_;+)I68[>M(<D.H>]$_$`.[<NA/0OW#/+^"3MIOI> ++M@.4;)9)+FA$=F9\R#\]3P?G&C4_&!-",HC)(\P/]`#=.QX'1^Q-GTRL:(G[O ++M[BZ[EK5AY_C90V0P-BH:'"@(-BN-]*7214`?*XV"_XY:(46<PK42?JN10FWF ++MG`R+)0)N7%3Z5"E%N?\Q,)-^4`XMQX@3`YI'NQ5"#-Y#@KC^<IA<Z1`385N3 ++MKO-GLD]JU/!S+,I:)E*0J(=-697*\0,*F4Q7?NNL\J:V%9,/$X'"A%Q5IR?` ++MV^@JVX\0<-I&[UY1+_E*(`\7@<61,K`16C\WKX/_E8Y6&'&=Z)%TK$8[04MF ++M,9`)8&/.#*C1BG3X9$V=P*STJ+1<L8<\ZQSLB=LV'95:[U1U!.=K^P*&H+?` ++M\UGU3JD-]GBXT_&C)RVS:$8*IWYC7]52A!`-6L?XG?779^21WZ%V?!:GBMLF ++MD?8LAG3GWRK.7SV?5+EXEO.X"O)Z$^_UF(M]X(\VR=P]#WAX=BPO0P.3WW0L ++M"A*8*(5I$KUD9_%_Z<WO8$"GJCTJ6UTQQKK4>V`7&DX,=YQ0FHJT'Y&KAIY] ++M)?RY>23\>R5!&>.:_M<$5X4"#4'/(@*E795V`0IOMX:OAGGE:6_*8(*5(Z?\ ++M*%O(%C7[TY-AOC\8=3A:G[8?IQ8<+VPE!D]U6SS>R]*5C`Z"3_`9C5J_3%BC ++M&O+VJ5I%$X_=:`S5M5UY)QITH9/\Q0<_68M)"/BS!D0"YEDSEX.AU::J?2&_ ++M*!Y/G'4%L'G?T.$//5-;;1M.ZJF7%?%:;$/70BN/TQ_BZ@M5JNM%O/ND5N0M ++M+.AR!]N5OQ>N-7;6TMK>10)2#MOKPULIZS9#'WA>=9/%+2Z=Y@>!H?M:]U1X ++MF:O"*R0YF]V8$#^K%[1C.L`*^]K+3*O9VQ57XX@P<3O9BT=;U]D(>1VMMI.< ++M0H]CIY%3,_N&-C;L[NA'A1JDJI'22@R/\Z-EU*Q5ER'W8:`'!*1^-+80UG!( ++MUAAL276(^1W?,;4CA4Z,;SLB&$IFJPR@E&:'<5P9V:V&0324,;_Z]?G[L5[6 ++MF8,7)H1ALSQUK=DL"&YYO)(EB$52KE6E+!T5S9Q;AE2._53^%*1)Y]5'&9>- ++M&B-W>N67&CQ2)XV[Q!(]Z7N85;B9T/<8]GCG3ZTRI_PZF\_'Z7S.G!/<JC>7 ++M'!-`[*E3]!WTJ"!])2^P"MK?NW;O:"FNK_3'(_5N/'!M@,NX@%+]7>$K:"N# ++M>KAH?L:NP2V;4$#&Q?!C[)(&&,F"-J"2+%K\+0O;Y!C7R=9HSY0).VAT+:S\ ++M0$"2G2=99%*T&OME_7-MX,[=:HINLU.?X"%@0Z9='&32LQ),LN'KM>5/H#4< ++M],9E7'7B,UL30[^GLMU8LF]8O:9>$D.=>8--E7;^:LD^@\H;/39G8*^S']B8 ++M`WB+>ST)-<'S#U8M?UQ-Y"?%<]`3-OI\8T+=S0A<J7_KQ$(<B.6;!#:YTHC\ ++M`CP$1)4O@-V\:CU%7=8L6^7Z#N:.QA*RM'@9US>H]2Z=/&4UQ.5EL1YR05T; ++M+S=?J8JY8LQJFBRO.T+B-1=5TJ]M$=^QF%V<P:\R*R1!Y@-&[]!WS-)U/E!/ ++MQ@[?>1(R=5M2K!19%R`CLJ&T.D5RGSBXCB3772K-#==D:*QB]]'4=WC%%5?' ++M'BG3SLGK*H^ZYV@+&5K>NKF>G/'-06/`*VXXJ?IAJCA8Y5HF8;_MVZIRYQQ# ++M$P1%@PM.BM:0<_%0QMT8S?7Q?I"Z1DDD8U;MFM3TQA$QE:D-9>;G@JS?;J;F ++MSHP;\.FO'`QTCT(Z7A4?$D&A;Y6%&AL46`JX"+L',5\=Z1X;QO`I0C_OJZTT ++M^?:>M^'5;[J(?Y/F!L?C47SHO/?+%?C=I:.D";*+ZT2"C1CA.X_N\/-?UOW\ ++M&:6LTZ?740$/D9GD'MKAGFS=_M+R'E_$7ZT%2P!"<VD1+@S5]L><H@#WVH&G ++M_FU^M-43IE-RR)#R=_P8^SOYIK?U7B__^#'92Y59UJ1I^_%YT%Q!*[$*0%16 ++M'P;^/N2"7H.OSAFH&-:HI:A)E.+3#!ZS#^<.I5Q^ZZ^*]_WKDS62;2Y"<Q-R ++MO"R^S<B"AK6Q<()(J%[K_K;)@61N`1>%INF.D5&=9'(*-7Q)(_4Z=_+'OD"* ++MBMH@]([8&$_YBCR!'A/9PPG0/H0R/05$U=@!U8DAD=D9.ZV%L)S.I6^H&@_9 ++M&=*HJ0(-"0RU3%VA;_DX_HAVUND(>&Q4.<+<WL2O"IIB%P3R(&Q^@))T"$/> ++MG=?#9P<)I=<]\A_A(Z=A8[1TGY!D>6J&]1=*=CNH4_(^'YL3"O':9.9_%&&+ ++M+-DS"G>PZ25A=[ZN]>";^1FM4SXS5[QM-]E9]G`4.BL;X*HNMJ_`M[*3&$*4 ++M7_G-AAX!6I^T2;G--.SN_G[EH^Q+S4.I00D4=\8K(YOK`U=.K<E8@;<WXS9$ ++M\7H<N3P4GN=.13_1,AK-V+0;:5W\Z*3)KWTQY:4?>!_M(V'`O]?U%GSQ'1)3 ++M;&,;W#<X^O)U"4)5Z[>*L&VXQ40]IL;)!+:;ZY"1SP7[>.2MR0+46D+0S7WW ++M!2B55Q>)VF_F4GF!X`YD+7Y-,GZG*GP:PKYEANF,L9F01=LB2K%`K;I$O2Z\ ++M9VD5TS6:F!.G;R4OL9!=._(ZR&W1=<OK8IC!1+;=8`%[9?9)-?/MTR_9VK"] ++M\%^RM@P+?!8X`\+,)^2$U1?0RJ5E(P^*Y):9[A"=OV1,2ZX-<HK&?>WPOC5` ++MJ7^,("9;YK`3[SX3.[X;G0KU.+\O.9*$_TR[&V2T*2B#7^Y)>F%+A6F=@E5W ++M]>G'$:_XY-Q'S3RD`0L._1KO?,ME6P,<>P^FU62VUR[$2NIDY)MM32AMZAA" ++MKHX\JE&,@AHLVDR#X/D7>"%W68$38]^F>J[]VE!OLH(604ABD:9'UK!@12\L ++MY45@:0;G@:Q0>0T2;WN=\V!'B?@HCUBJMS8J@-?9?Q]E0?4G)_*\82]NN?QY ++MUYD9&456CX2!S%,Q'A+L'LJ%,MY';(JVG_C%GWMDN3\/C7^:H^UEJS9V3C#. ++MRS^;U-I?3?14*VS=>*!2YL[G`]1NA5X!D$<ZM%)"#U"PNV%'KV$/-^/"0[\R ++MHO(N.)R/(X/#"BCJL'<W!US94BU1&[G;:NCY__`\2WF28R&HOL+9?`HV7@SJ ++MQR`2U]&@C=M"Y^LDZAU.SI(A:U/'2/]^92"U+YKT#3UN4[Q_&A%7Y_,9M>08 ++M#]NL3?](;V@:^6+=^O$8/V1:/Z]H?E?<^;V0=LR!;QB"B],;R*$%_(Z0PL0> ++M/C'(^A!Z;I$:3Y2Q(>UD7PW/3I@<RWG/;[/RR675%_K)AYN&1&4P4'],-#>; ++M-.F:-/YL]`A4L9AC-%VEC*#!JX'BRW*DB5M^0`[W0W&_7.Z&[9F28>U6^NOQ ++M^`>-TV2,Y*4CI+N/XC1Y`2[C-CH'K!XR9L12V(5&`\@HZS]P+W@CN4X>YZ?8 ++MP%W#X^H>$YDB1(84J<`S=,5NMEI+.P.8.0C[0=>.Y!X&#U=&JN'J9JIK-X?D ++M/VS2T?<=C'HM?#S-\5/DR2&MW'8RJ923M43@,C0Q,#$#S/T1CF;YFUAE(*Z; ++MB%L2GT0J3=#AE&PZ;.-O!IZY>>"!TW78+446G!Y?4I5.\W+F"!<*"%)\892= ++M9`ZG8:9.7G;`-73,**E!SQ-2GP[O3Q66#<0<+SO1M+8=*]:?O*YR-UY6*6V5 ++M@H%EO4DV@C2MML18'*LK\22PD8O%3#H(OQTTT7(W#+]'$<9?U0@\;J;T;F+, ++MJSFEA@DDNB*NF,5X).$(H!.UU\.Q6V[;ZEJ#GF2)2P(#XM@SN;?TXSYOF6=U ++MD^]..BISBM@V&WF%`NJ_]]I.$'H6-:>/PO6<\FQ6RI:2>Z[Z%??N^UF'S7;P ++MJ@@-%.!#[SL-\V/ZC]>29Q.">4N*_K+\0:9%<K@SEN1PZ!Q>8_S#ENJV(DSV ++MM&M;,<*.'_P83#9%[K>E$H_]>$]W1)S/Q_38CF:P7EIK#F/)X_:1%<*E*R(` ++M\UV39=[7+?E2@D"^#F0+26;"88PU6]3&NE.3J(`]\]_'BPH_6="#1GD;6/LM ++MF`F+^OI?MBEWUP/C3[[4"K'/IMH^/<QX`.U)8CZYA+#Z*F#18?B/EBC=*I72 ++M>0?Y[2MF,J!91=3U">N=^%;AO_R4UQOA<UXNP<DPKS<-(T,GI-;W9ST_NM5K ++MWX\"(UP*&1/V:<>R1^!6KZD*BM;WI7R0Q7(39$O7VA`CHPSQ_ICV:XIV5Z?0 ++MG[*^&/5($H`X\E.>33:3&D?O-8$PR&DVVMV5\M(RD#"-&HD%PK+\\FP%@GV0 ++MI1\^)X;7Z%S-_OZC)S.BL:_S\V?#D>X6OW8_5GOQ"0&RL1N,`G]2?>9#/?HE ++M"]H@H8UKS^!3(FPP)IH.MF#(8$MY_^^4'P$18@(%LGA/<=WT*4/5=VH6ONTR ++M2458N:HP9W3932R*.2`=ET_WG,_](4D_>4UVX^Y\LJ(_SW1(I=#.:,8)TR)] ++M^2UPP[-+?,=14UA*F!AY2P:A:0X0KWX514]N[Y9]>"(W*![`7;6V:GLHHB0) ++M(_8LY@RK_:(2MF@PM?`[RU!4V#"RL)Z+UC)LJ=8\D6#E[)895&EYK;0SXYDV ++MQ<:B4=G]LM9%1$:H+BS2L:9*K4](U(*<S2")CIQY(WZ[4=HD2$/W>\+4Q>9- ++M1AJCI+?V%I=6!L:H>Q'B"WEC-91P+2^4\]-FCZ2F;1S84H):L7(?"?Z(N8F\ ++M<$_5(C\B.M%7<Y=<FF#2;J<NX9IZ]:VI>_C97X8GHB)QV')(2B+Y'IF#7Z5` ++MOAF+:Y(0JW28T1ISY<-)O%@R6Y^[4:J%8F^VMUQYEU8?NQ%TC58Y.;O(D,Q+ ++M#%]2E.>:JXRJ(*1O<;K"GY=>+4N3#-3H6F4B%W'<VE$D3>SG^-%UNH_`7W!B ++MDU'F:(WZBZ]:Z18Y,H2;E(I=_`&$[:&K7'0GX3`]4]97[*O4-H[#`]#*(O9O ++MR]1W3D\6N6O9<JDGYDWW;ING<64V!98(9"U[\"_E=KG*?<,;DP42!A",$-WI ++MN[YTNWIQC4.^MK"0>01$JFL((;JEQ'>P_<`U_5!;9N]T\CFF-<8=@A09"1M^ ++M+\C,_*J;#)O?T)"VPR-0)<[H9`+%9TTYN@N=>-"D*KP?!O=,D\S(G@ZS](</ ++MO<89M41Q]P>K=:P0.]6D:ZP-_*,>%+/G?GG?ZJ2V$ZSZS9QI;QPI?7@UK@X/ ++M[/X1<L445NO`X=N1X`91&2Q=4%Q9OV-,C)#<"CGR`BYN?E"]0%!9PI"PHXJ5 ++MD?.)M_@(S#O=NCQ",&"8<WU8&OY#(*QCB<TVH^?%;6<]_0XV:M3P](IBX*H, ++M69"Y1(5@%P7OO(&I\;IYVD?TEF:W]!>0HJ(662."3G@*NE?KKW8M8^XN)<BO ++MU*(X,]$+E@%#!2\L-@09:A%?*P(T5FI`G(C9^]&<9TTPZU53,);!HS!CLUCT ++M:6/+=M0%I8NA$BKH#C5=6%VL_73%BF8KWYJJ)LV([2F'?0)WEXPT/F06!?^& ++MT`>5!-?-&`7Z7#W]"(P,6/'347VQR&9LF.4MMPUH(=&K,;X,$J0]4S^:SYSD ++M90*CRFB!\_HH!#KO79\E4AB$*S><^6"4R`\%3J;94N4X8WG,-)MY/J3A%`+@ ++M(,C#J8+H,V&V2Q>U'#0%4-G7X]:A'B?K<RR]FI-.*>1H&<E)RRZ:5<X+2>O! ++M`:0IR+8E9\'$6XN%9+PRVZ.UE7TA[C3<>P4PS,]]8VJAZ7$0>E#.O%GP(VG\ ++MUQ%4A=1BCX'-$-E#*DK"%1CR4,S'6UCXA865%"%?M$FLQE;R11PX\9F5+ERA ++M^#5V'RR6FX7[S1[!%<9I7]-V5'@IU"8]!`B.);>.&-/DS"VV\='TFS+YXTE4 ++MI-#!YN-Q:U0NTQTN,2%Y29`(!!":6^S7WZ`?!@=*2L:FF$?W.L9>-$(U-A]N ++M#E70A4L;V<A9:5Q'T_KR<\"@[-%B3^1^(V!2@P2DH5@GTQZ.8K70C@6W&-@J ++MYL=P;>]M8V:JCUEQ1?H+N^Y#"2JZCS$`O=EU`28]<&DI@.I2X**=IU!4BWOL ++MSGP<\*3`A]Z(>DK4(A3C`DWRBGT*.8)8"&*/@W8ZRBJC4TPRT>)^;X=VN:6R ++MSF6!3Y/XI9YK=]!,TE#,#PC;U2G':1=JE=[NLE'GQPT>,C7&-[[,B`MO&YGE ++MCE;M$:J<H);+PEQAFHTLF]S?T1.&ZK4Z5I4E<ZSH](A=D!U1&A&47GO5U^*Y ++M2J3CJ?ZA9WPZ752*@0!^&M,@U2]#7>0ZO*FD(H.FD*3SI`:[5-LT,):<2-^I ++M.H;$(A:]DN4Z/*L1>N#AK'7;,<N5V%J)9-![N$Z"RR5R-D0D>OF><D]NA5Z5 ++M3>*5[TD9%*K1+*Y6/RKEY]0!@\A+O6\^2M5P((1.C;;(IQ*5TE"@2O=2>[;R ++M'?N5W'O_&P*I)[F;29SO6A)Y+*"RCPB)WH'(-&Y'N->6?RBYX?2P7O-`)^R3 ++MD_^1JU3D>C2%"R5/-<#5`L=R-I."`W0I#P7+BP7K<>PE+G^7H8_*<[0.S3P9 ++MTAB=!6!\*J2YQ!#(D:7NC!/U<F@S"H_#K23D,1(A1P'DR<0GYV!&G1\@=-01 ++MRZHS:%0U/LWFL<:V\>-JLIPYSK&*J\M\GCFSS7S:YZ,UTHOS?XWX[/GB]\:( ++MG+L@_RU9ZK#1$>(NS(*18\MOIQ@GU-T\5I_#C[(R!2^C)Y9?/AQ&/QF_CSLQ ++MK$*#.RP%1(ZX)@'VU5AB$Y2S_;8P`[60&WFY77,^JPB@ARI3!`>#2N;TS/G1 ++M+@7]R]CXKF^38/W%#</9.2,:FWC"4A/E@<70S]D_@1J';)=/S6SS>6V&L\[> ++MU977B3&9U,)\>I=,\F3JZXFDR,:@&-#;NT<,Q#QRE*YU+9?]26U(?'`*^C:, ++MGK$+'FNE5X/:PNN4^^A2R]?MS:MJV.E\R>VC>G7"97P?K)S69?.SX))*NQBA ++M#6RJNDJAJ%&Q&CG#-Q_9N%']PEE2JI2TL\@XMF':L2*M7I;,5]W0\S23C^7( ++MPMHF[W]$/9Q0$(Z:B@DYVY.DX9K.LB.I,CLB2\+:`MY\T+B<;:QEZ$^?/9TW ++MPH0QI.1DAW$PX]P<20&/F7"U8MF5KCTEK$+X\B_)0PMHZ-<*`6ZF;VBFL47* ++M3$W?<<A>#%%I)?Q%@UZ@TEX+.E:E?GV*7XF5)D.BO>!ZXEX1BY\<I^:C&K3X ++MCCK8XW"0$[#V$:K[1JJ>WO$;`X]6AZLFMU?)^KR8M7HM_4-&M\JZ83H8GW25 ++MF+2S@U.K.WZ_'`:.3W1.-'N081_KV+!G],_A0Y)H?_1\<Z_.#D)#=-;[[&;8 ++M3L5PK(^I:'=-W>D[$\XB3<%M)T?M42'R3.CWY(J_=[1F0_2VFE3LU4NGX<A] ++MHEP1]9IRUW7Y-1^`Y@Q2VX<[DQYVY?FL9Z-F73\#_.[C%-)X<2O\KS>.46^2 ++MEP:3#,P)50>VONDP`"3OU$#'%$85#36761_R]6ZTF#(&CG<YD(,[L^Y51()R ++M'6'=^4HIX5NALRG$)S.$I+#RL8MXICL*$0AOJ[@ZE0E?SIR^WD6[GCI5C#F^ ++M=B@W9SXQ"POG`%/F0%_5>YJ)I\=[)OJ(%=[F.T_JD!G:,K#;T2."L%GZ;F5Q ++MO]'H/<&FZ#PR.^E8&'#ZQPA$J3'CJ#IS4(U_K_AMN*.B$.F.1RI3M+=:*>;/ ++M4\XJ9NXM&]OZ,,>V*6&]=['OJ5]97I<7XFIVQEN_*\LR7!311V(.]BVRSJ_K ++M`.JJ-;,:ZI=.V'7>OL5Q@]-\I6+SP-U1(+0NUKS1Q'-%<UDHK_ES#IK/.+CO ++M2L.<DF^<A)LG$<P*H7P`A,#B$-U$PR@6FYILG_&/2]B:I1H9]`9$2SQZI:^% ++MOYB;SYMU%BGAFS@#>''IF?`F%A%RW[#<I<E?S@Z2ZF"M+9]Y_-E]A?&M<YF& ++M>OUY22-[IL!#%T&=L)OM`<'%3$(_V^*['BQT<NM6.\^T^]U@(+Z.FUV2Q?KQ ++M3F';DZVCP(E@VUV&U/.+CJV3G8A$"2AQ$P:H?.]/=,$;A!#657*>W"!`;J@C ++M9HY4:V"8_"Z]7S5N;DF3XRF/#/O<H*)(W9)3O'T*/6VU_&5Y\Q6PAH5ALN#5 ++ML8TFW&\2M@<*<<^C'48[291>XY@AMZ8(QT<+=S[VO8964*),1H@K1%!OMW<@ ++M'GS1N#Y*WH[_<!Z.6\;SA<CI(&1!D'':IC);;??S9+1<G'<?JY2;V=V._MH. ++M(D)$;3D;%:7^[2?.3S7!-_X]I5:>=-+U^][:C*?A+NL!MT$6^W,<1(NT%@7; ++M6WM,AP&E2=0SY"5\!`X6VCCX%ZXT.(W=?(Y[D!SY$`DY[@I9,#AO"(LXJ8JK ++MJ^G&.L.V=\*/K%2^S7IW0B/'1V+EP33RHVGNOO'=YR^W,67#PV[!ZFA+O>`` ++M4ZBI'(I&2WXRC#SI+S'WD,OLND+^2"B2BP[=;B4Q@4^$1V)O1;-WG7![9DIA ++MK`D5MCBUJ#,8NHW@WL%4-:]'@AY@'K1E8-!8MK]78VX5-H/I40-18WHCD%&W ++M^N)"=8$!S840_2F'WW*JX'[/^:JH;B]1W22*Y[QYZ#R@9@_?26>;."4I$6H% ++M>B*<8V=3CR16=]J^:.Q#MX5.>)*.?/B<Z)QZ@.^I,23(E?/3HO$37&PFKG+5 ++M-B2A%C`IKX,(D\9M(C#*6#66`^!"A3;V3?$%>Q]5M5"I+R+[J:23D\7U`8]/ ++MX-DCWU]<PGB'8SFERBI-GFKZ%J'$DACP"%6386*AV2>%@B+U$KF-$IY+6;%@ ++M(T/U17^<)=[$MXDD'HRO-:RIE*IT"K3&F3(1FZ/[^&DLYC#)$-R4'!2"#.52 ++MO4LQ\/HI%I!G`DE""#TN:5B2SWQ<AN`+@!#3@I.KP'BAG^=G7D_8>)Y&EU$1 ++M_N*/"EGV5K1)I*!3$7"N*/RY^^IJ^@>?OKEQ:/`5R8M<FUZ3[^5]R4DIK57* ++MGF_W8X(IIFJF"+R&US%SV)><+Y[9<CX+_7&\,3>6.YW(_EB/YQ:E#8ZQ=^&? ++M:8)TRXQ&[?D%0[_=BGM)^7D4$-F=G0/L!$R#X3*S=;/9M_:_1PORN#KZ8AF- ++M7>?4C]-+P3H%G<HV/.#:L=I"LCS`.LPV#-M?4'T"^+\\2L$_DOO;_H022YA$ ++M7O20!][F?CT<9+$(`%,ZW;:^)S-FFPR21VL'`LOF?>:M2G0%P88)*2AJ1XPY ++MG#PTJ"GC3>[>*DJP(7C@G0S0D%.UMN[TG_'45MO7WPA@RMR^65#(UJFB'%QX ++M\N&XC]/+(%@;A'J-27P0EV\L+^O:MJ#['*D%)?6(LQ:KB?*ABX+TU(JM+NM2 ++MI?JY)BW&^SZ9<37'G`=X>GM&'?TE0CGZ/ID:R?1WL.^-Z"H?$=S'Y3"DY+8@ ++M5R!837-^^ZB3KAIE3N]P7WJ!AM++!%O!Q4`L1B*']#PATX%41RRI-U>5SI;= ++M1+&KDA'7(?K9%C(*?<ES!@51B-UX21.%+#43[;5S&DR0UQ0-C7P!(H=^+O?N ++MJPWF4'_^ZA#^<$QB_%GG<J?ZS6W&ST"$IU!'%F1HMX3)4B13(OEU8@E+-'=9 ++M6ZK#X='%VA1**3$W^X-D.1;+7/X'\.K30>TX;90$@SD]M6LEC7AX$[[=G?U# ++M'\\LTP`"1],1E03ACOH[(>^K5VS5UC$@QF`3YO,:E!,V6W2C@1;7#P"@^:RX ++M'5FA.JT\9LG"`U&3`J-3N9)$8I_[.:*EH[KRN/=CH-XM@I8-QD@1H8+F#]B9 ++MU^C8>(O?.C3ZEJ,_IO1Q..*]I_IL@S[N%QIM#FS>1J6FY)>9'LH=4\^["^/[ ++MH$LS?*LFJ"/)K!>QCMAB"H23CT)&-N3N,TY3XUGA><0;:>1Y>,+'"+<K[AFZ ++M)TI%[?X8YLN$V07?Z69^KK@,"NIA[(*BG`B2_1E*XY!@+EU95:G>6-7\L>=+ ++MJWCWQS.V`2>9&'<'Y\@Q^H\/A8T(TWCR5_2&(Y^,)"I3$H8Q:%&,72CUR0'Z ++M'XK=3N$W!IANO'H5DUPK-_LD-&V2J?FQ%%(`:S1C3A6:B9>^D',_YK\LUWB[ ++MI"O2H.L6`6>A7V8V^8]GS"L%W"%2KFBC>,B<)T0<[FNH#X*N"L'31ZI!O\K- ++MDK.SM7TV<N8RW/?+H\\]57)V1M<CDD),(%+I,-V.(O--E"1.H"]90E70,7`W ++M,YZL%CV6*=>4*+\OW[01L=UB[-*$+E;T'H!=E_JD:I7WH*"A'/O(!^0D]\'Q ++M7%4BGS*%#Z(=M;19<X+USM_%J*/X%\X'+$=3'-=CXG[VP<^BIEH/P9<!6T84 ++M47F54(@^R;?\(6_"IJ]K>CP"QR\T`]+&\$`#<XF#>Z:[TW!84#<9`13A(!)_ ++M=";-E%`WT(BW9&5GM##^.:!D^BIH-73,M:KC$`4]H<2<1_K1I<82?+SX+BM2 ++M&P"#GY#5'W8HN;V`G%T;M';*V,$4<$C\'0R\D>]FF>W+!I&YU7.J\L+4=J[) ++MKU(7.G*5G2A((LF1%8(@%],9E!]*!H]*%LHBWP#4^\(IX>8O<8OS2@3D]=_# ++MB@6=51`=4N5RI:1\<6IT!0C3N\`#(H3`>/LK\CY$8'5P74!#?MV%0SAI(;'X ++M\@E5HJGB@X_4&5^*>SY(O?"\V56)#'H3X_:@I9M3:M@*`+^UPASPM5^NN<>+ ++M%JM-*3[!@@VV&_,[]0U-)=S7J:EAO`.#%J2GO!Z=7^Q,6L_N:VA0[@>+#E=A ++M%BW,,B>^&/,I:80_-XA,8JG220A+:%-2D&O,^I]C[(&R6W$@'&M!S_K&4J!! ++M/NOT<"VEO@[,!0@\6*\MF=!Y<A@A-9M4H53*RCL2LH=$OW'XQWPL;3$KQ+>- ++MW90`W[X)*4ATL)&B;ZQ0<1ZB"*K&K)D0A"%']HY54V1:-[E22#CY;+Q\M6AG ++MK3,9Z678L_Q[&8'F=L\=;XL0F$2_RGX_B0?*$H)21NVJIGC4PD4OSY<ANV3@ ++M1\C6NU8X#`)_+)"&!2Q:AZ?DXVF!IDKER97J"_HU5*`3^$[2<6\H=/>K1LW4 ++ME`(,5Z"$"TB2;DFX'I,SW7W`Z/)H2,K3VXC'E_N:XBCC"6>ZHE(DH$10C!-X ++M.%"YLNZNQ<%BDGV#V6,GV<CY.H'**T0@FIX&+@YK0D(P9*9+%Y>D-+A8K4%[ ++M6V%TD43=1HLTV=@GZJ$]!A?+W^FD9_.5>U^KS[;6A)P8=6IB<.+D>K&6'`&_ ++M?7!"4RY\6KZ586C2VMW:UME;"V_1HY"!G\B6ZM52K-H0CZ(7Z).2B7X.@V@& ++MUA2DE)!-GCPXBC=+COV83,_Q_FC^T,H1SRT,R:D>AE\/KT&S"[E#2#(@`0\\ ++MF+=$,QB>*@':`209S_B&",!AN[CA\$E!Z!<DT:+&RL_LOJ@[[4QE6$O0,KEX ++MLO8[7F'G?B35J\:D6I!7H]O2W]2)=5L#]IFC5JU:Y#$'<&@4@CPD?_Q:-306 ++M3;_(9!4DO(/-1XS0EUP9GE=98`5L>A\E,X#?QR]`MP>F[,HQX9K30A+@T))_ ++M4B^:8(#85_<VW'&&N"15E+K<V#K;/$1<ECP56*08^=5(!5'YMDL$NX$'>UQF ++MY-6YE4"R"A:2<IK%[+T:.0"Y!QS5ML5,;-I5;\?LS6Q^1":5KTV6$OU>6`\Z ++M<Y=^.3O<D1(6L6\ID,M"6VAN$]'PTVN#=![1T^S(6+5P02IW,/L=`N17?:C^ ++M7BF>1EP:A$OWW-^FB)8KH^<N2P7=E3\GZ+CN>1S1HH>5LNLP^9W3,R6([Y:M ++MR+#'&Y'*-HJZ:=1TFW?=6C<C7U3TE,LT-M9;Q9%9+4A<WRWY-_G87KJ'M\$P ++M72NS=(SH(F)11U(#D9B,.<H!_UK9:QF_<T'CA_O/P:Q=8&X7DBD0W3=IXK-- ++M<2;[Y7R`%EOMV'KG_GW9I:%8=WMDM"<S.+6;K&0_:(\@Q46;B"(NK^LLZ>OI ++ML2_;B:GBPF8<OGV!)<P_:[]_*YZO'E?'<+9<Y/]:S[/@TN0#'4HKA6@%-]64 ++MAV;INCJ/8&;2/;#F3Z=RYINRW[*>1+W,?*M,"SO=#/Z#(?;@F'5'.$L0)K%P ++M%FFE?6W!T82_*/I4MKGH>X%44O<BK;A4::M`+<E/,/YU?03\.N3Z#U3P+@BT ++MAW)LB!448^@-)-O=+(0H/G;E3/R1H21:DT]=FLCPZF,C0DP]G`GNRQ^R/*=) ++MNC>P3[TL25A?ND9<I%?:VCE41:Z2D%/LV?!FM@H_6ZZX2H;5N-G)[5=@=&Z+ ++MX9>8H@N/QI"DL'[P;YO7%JWC:.544&R$UO!_+!!*SA>Z)9?U)&7ZA&KB&NK! ++MM`VSKB0I`XB!G6/S#/??-F%0GC*SOS]$701/VLBS2VX7^[+SR3;G;+VR9C1( ++M5AYV3C/MQP`"?7SV/=NY:>R`=`(G1'ZJ<;T-[1[K*_QR-`I$:FO9=8AD;-\\ ++MQ,52%H'AB'CL-4NLO>C7C;&>Q>P/Z3]CLV_16B84ZRCV:V4J")$(CNII2X+* ++M%JC1&89M[A\C+/LZGB`_>5_8WU7UD<'(!-4^9O)F\5]W`\0^ADR(/ZC>EX:M ++M'#9U'W_/B$SCF<DYLD(^-O!KAH$:TO[$\+QO*]3N3JV0$=%*W'2IB*YL2E%> ++M>($FUW>F=",[O,JLZQ:S799_X?6[WQ;32?W*_EM2*0\C%]B#V[A'PN``KMW6 ++M!0\-%X;2[NGYQO<(27<TN7Y1I'9S7#-*]&BSRF=%=W9A*F8`1`*1]"].96>; ++M1:2W`9#"!2U5@U4J=!9%'YJJ-3U'@T+M/HZZZ>&U)]-:X9?3SU:T;YK%4X(0 ++M8#;=-AIC*!_"6T<>T>NPT<,>4L"V\8PB]L)WK="`8BU;S]!MW\VY5GYZD,J0 ++M8J+X'FB+0YFB(P[;Q*Z1WMFBRR60=]'F1?ZN4;JX,9JKW2P,D$@YKY9(@:R5 ++MYT2SI3E<;_D@215;0@"'D'V/"-;+W^#,&FN<I$WZH!F\M;"<UW6$;B#SFV@S ++M@A*SY\D*;XXQ_O#S[".'ZAC+1HG+#K6Y`^_;/B`Z[C`(;^BJ]TL-*Q>140&7 ++MN7-1H"-71\O#3420T!9?/3V$FD,Y[D2#7T#,NO=&F!!:).;85=O7'F\]GOA\ ++MC.G52&#;1,29;AO"0;G4C-P6M=!1Z$(`($Z4'^;&*,-0:+R@]FD@K/X@T/3< ++M?.7>0J#QZ.6KOO'E"Z--LYJ:I&!=N##[T,=C[B^RB\_[/"12PY^K.N[@8!FF ++M]ST?237U).!=F#_EZ:Q,.L;MV+8]+)/R7Z34J2/#M=F*CJ87D'G44@C(L"$K ++MC+%M<8V*F7]N*=<B<(=LX4>7%;\P"$?KA@_!4:"A.P?V9(NO=6S'[C+Y/0RB ++M6%\A/_ULIM(-=/*69=S,'VH6$XS51=Z6/OE.@:O%+5J$"]R3*<63GAUN^`1& ++M_YH82)%O![4[U:Q#Y9S::XE.@6AH.?2S<8*4'60&*N=#(D*.RTJYH*1L<>`F ++M*,*,VQN3.[ZLE@WX=.BKAH$"1X?)V[+\.>\IQ9H'QRP!N1!3>,J`B^*1F[(C ++M\-71+>I"R(/H.D=7_M4S!@?/,I[_PJM?R#\$/$H>5IEVJGK2JK!*5+G0U%]# ++M)#$WN3<UV`=T\#950!7#21RXG(J$.RTB/J+XZ\SL(L(-_%"-K9U!I/UW+-PO ++M4,6EK`Z_V]MW/UX*R=/.X;:170;U2"M->3ZHL6#=F^5'7\FAGN=F/:F<L@=N ++M]+7$7R8OKLH0B'@"_FNTCI1E_3S4N6^0B^$;D]Z\)WR"XG-:7MU1,UVO'^2M ++MVV&@\!%=CYY<]:4]'.1A=HCUQR]$;MY6>#5;"4%'#7*NSNB4C-Q<T#,U&IWD ++MW2CH+1:[.I:_V&.\^!WC<J2\79UUX?R"&1F5/P%&R8Q+O%TX/]FQV?4AN&[_ ++M=#]J$4OO80I_:/W`DGME'F3C%071X=&_0A`UX(YH<S&/,A%[988>$VTI<RI% ++M1N2B@9\.T%HU5='Q9PNMB^=8,[B'084)F]/C\P[;*E#RD$H^EHJ,DZ#:43K[ ++M(7<V6883\`O72Z1^U;%ARH#Y8?;Z+;KPA4,M\8:@1\V.^6#ED/A3V5:ET+'W ++M`DR2.U3<+V?#6;!FBP&3`F'PY;LFW<Q?*,Q8"DR00YONP06NDEP[$@QJYA:9 ++M^$?)'JS>S33J3%$ML-N%F,81^$5V`\MZ&31DA%067&G/['P?,EJJ]'IQ8F0: ++MP1!5T<MYJ:3J(;&*!^=!`\W05=@EUJRHWT+IG'+P9]FW=;DAU3JS'_6+N$$7 ++MJ&Z5[&]0B@6!/2BC]4(88+^UT$@3TG>[KU%%G<Z.CY0"_8=4E5<HVEFYN@_! ++MT#=+%`:^MQ0OE:L<M3.BISM0?X>59_`ERB[U!(2*2%9M'<^6->6W,$EAIY?? ++M/Q[?+F4_>/>1/5-)^^0]AD10Z(8`5"G@C'_.+,7AP;2_?8GNB&>K[BTU%G,W ++M5QW'!YYE[M[<2.QQ&]T?#N'[C7C:..O+)?/6Z;DK^!DL5C4]]Z(O%M35.Q$H ++M(LQ)94]V.N%1O`$HFW1'VTRVJO4DV7@MM4]/<NB!:W-91(<ML'WYM"=?C,1H ++MY`^GXIE;?I]YYYUUFB:)M95O^FP;B"#N-*VN$FEXS(W/\J%O5*'+23.CC$?L ++M1870[T_QY7]TM=JDZA)-,.-UPDY`C8?>0OMDXXTJ&0@Y>%)+[,Z\&,Z8;H/P ++M,J19_H295\W=-V*D9=KM_\.0&K2[2*W"Y<ODFO\AR7MPU0`^/[R,\?_P`_C_ ++M#?Z?:&!H`=*W<["VU+<S!_P/T7<H>65N9'-T<F5A;0IE;F1O8FH*,C@@,"!O ++M8FH@/#P*+U1Y<&4@+T9O;G0*+U-U8G1Y<&4@+U1Y<&4Q"B]%;F-O9&EN9R`Y ++M-2`P(%(*+T9I<G-T0VAA<B`T-0HO3&%S=$-H87(@,3(Q"B]7:61T:',@.38@ ++M,"!2"B]"87-E1F]N="`O4DY%0D-"*T--5$DQ,`HO1F]N=$1E<V-R:7!T;W(@ ++M,C8@,"!2"CX^(&5N9&]B:@HR-B`P(&]B:B`\/`HO07-C96YT(#8Y-`HO0V%P ++M2&5I9VAT(#8X,PHO1&5S8V5N="`M,3DT"B]&;VYT3F%M92`O4DY%0D-"*T-- ++M5$DQ,`HO271A;&EC06YG;&4@+3$T"B]3=&5M5B`V.`HO6$AE:6=H="`T,S$* ++M+T9O;G1"0F]X(%LM,38S("TR-3`@,3$T-B`Y-CE="B]&;&%G<R`T"B]#:&%R ++M4V5T("@O:'EP:&5N+WIE<F\O;VYE+W1W;R]N:6YE+T$O0R]$+T4O1B]'+TDO ++M2B],+TTO3B]/+U`O4B]3+U0O52]7+U@O82]B+V,O9"]E+V8O9R]H+VDO:B]K ++M+VPO;2]N+V\O<"]Q+W(O<R]T+W4O=B]W+W@O>2D*+T9O;G1&:6QE(#(W(#`@ ++M4@H^/B!E;F1O8FH*.38@,"!O8FH*6S,U."`P(#`@-3$Q(#4Q,2`U,3$@,"`P ++M(#`@,"`P(#`@-3$Q(#`@,"`P(#`@,"`P(#`@-S0S(#`@-S$V(#<U-2`V-S@@ ++M-C4S(#<W-"`P(#,X-B`U,C4@,"`V,C<@.#DW(#<T,R`W-C<@-C<X(#`@-S(Y ++M(#4V,B`W,38@-S0S(#`@.3DY(#<T,R`P(#`@,"`P(#`@,"`P(#`@-3$Q(#0V ++M,"`T-C`@-3$Q(#0V,"`S,#<@-#8P(#4Q,2`S,#<@,S`W(#0V,"`R-38@.#$X ++M(#4V,B`U,3$@-3$Q(#0V,"`T,C(@-#`Y(#,S,B`U,S<@-#8P(#8V-"`T-C0@ ++M-#@V(%T*96YD;V)J"CDU(#`@;V)J(#P\"B]4>7!E("]%;F-O9&EN9PHO1&EF ++M9F5R96YC97,@6R`P("\N;F]T9&5F(#0U+VAY<&AE;B`T-B\N;F]T9&5F(#0X ++M+WIE<F\O;VYE+W1W;R`U,2\N;F]T9&5F(#4W+VYI;F4@-3@O+FYO=&1E9B`V ++M-2]!(#8V+RYN;W1D968@-C<O0R]$+T4O1B]'(#<R+RYN;W1D968@-S,O22]* ++M(#<U+RYN;W1D968@-S8O3"]-+TXO3R]0(#@Q+RYN;W1D968@.#(O4B]3+U0O ++M52`X-B\N;F]T9&5F(#@W+U<O6"`X.2\N;F]T9&5F(#DW+V$O8B]C+V0O92]F ++M+V<O:"]I+VHO:R]L+VTO;B]O+W`O<2]R+W,O="]U+W8O=R]X+WD@,3(R+RYN ++M;W1D969="CX^(&5N9&]B:@HR-"`P(&]B:B`\/`HO3&5N9W1H,2`Q,3$S"B], ++M96YG=&@R(#0X,#4*+TQE;F=T:#,@-3,R"B],96YG=&@@-34S,B`@("`@(`HO ++M1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KMDWD\U'W7QQ%A["(: ++MVX^()LR,?>R[*#LA6Y;!6&888YF$LB1+]BZ[$");]GV-(K(E0A,J^Q:27<_4 ++M==_7U7/=?S[/7\_KF9D_YGW.^9[/YW?.]R?`:V`LHN*(L4=J8M`X$;@H7!90 ++MTS4Q@<,`N"@,I@H2$%##(NUP*`Q:W0Z'E`7@"(08H.*)!<2D`#A,5D*,^`,) ++M`&H83SP6Y>R"`X34+O\LD@94/)!8E(,=&M"UP[D@/8@]'.S<`6.,`PJ)PXL" ++M*N[N@-'/$]Z`$=(;B?5%.HJ"X'#`$>6``^R1SB@T"/K3DS;:"0-(_QEV]/'\ ++M=\H7B?4FF@*$?MF\#!!-.F+0[GC`$>D$@NIAB&I(HI?_#5O_;*[IX^ZN9^?Q ++ML_VO2?U'WLX#Y8[_5P7&P],'A\0"NAA')!;]SU(SY)_F=)&.*!^/?V:U<7;N ++M*`<5M+,[$H#]&4)Y:Z+\D8X&*)R#"X##^B!_A9%HQW]Z($[NEP.HIJJQ_E7M ++M*_]:ZJ^D@1T*C3/!>_[5]6?U+X;_S<3Q8%'^@"6,.%\XL9#X_?<_ZW^(::`= ++M,(XHM#,@)BD%V&&Q=G@0\?H021((@`,HM"/2'T#Z$PU#1=$8'/$(0)Q)(."$ ++MP8)^;E0"!D`][;!(M#O2"?<S]6<4_J_HG_O[*RP!0!TP'AYV?T>DB(7$G6(< ++M_PH1UPS]NP"!(![YB^`PHISC;TC40?Z&8@#4Z3<4!Z#.OZ$D`$7]AC(`U/TW ++M)`IY_(W$<4/1OR%1"/,;$H4\?T/B<V%_0Z*0]V](?$;<;TC4]?T-B;I^?Z,8 ++M40C_&Q*%;O_"_[PBJJH8_P`1"4!$3%P2D!:'`S(P6.!_+S-%H[Q\D-KJ@"0, ++M!I,1%_L5=?#!$C>#^_52$B_?O]D)1;RI2*0_T@$T.8YQD`MS3:F[7QRD\63X ++M&06$5-6Y/EZONN-M*TWH^P12]\+7U[P@'ZO,#TO2S]$O4"SP^!US>$>UW#%\ ++MH[EYSRL^]=WI@N^MA?3;C1SFV^FZ^'E/OKW058;FNK%O:Y*D^J,?^XN3+?)[ ++MLKZ^7,TU$%(W6:3\P$O2:>E;TYD1)B5MKIGN;AH17G5)G->(,=6K^(%$!,&/ ++M,3F1G#`4&N0:0=5P97H+T^+#?/B$*B?IU);DP.%L=(B8:O;[^B%7A8ATD0LR ++M!"MUYP-"C#48(*DN;(<*V&>4=Z:51X\UH2>;]Z;:A^>,FRH[\21CQY^H[2%O ++M+BR^NBY$.8SP-ENG+-&D,R)?E=6H+]5E=/,^4Q9Z-1PF]E3C&UNR4H;^.O)* ++MZ,W\%,&B&J;;/[BN#89RUS+6A;/],=R&"JEW`OKE9[N$2PD:2=OJG7IK]#?O ++MZ'1?3-SG)&U1-3MEKA#_UKZ20/6#:2B%17=\S3.ON_/+CE#NJL`728$C[O,= ++M04(#DEG?>53=`E567&G#"`Z"QH\*SCQ;IIKK%9%Y/`+A74*EX;.#^8N3M41S ++MZ<O]J)VIV^B8GHWJP";1K`5<6-"1'./H;.G#SES@VA+6AF3B<S$FS;_E@K2G ++MQ*0"%:U:PCS^A?[!\45\/]-C;LNV8O`G!@EY1Z"-^\JP@QOY\0#-!EW7.P^G ++MKQY5_#(:0GS]*U\5EU>*$'&"Z(Y)2'"C?Z<_Q314)_"H`#-><=]S54J?]&/< ++MZZ,*9*#+BQPX<X*9U&#)L^B"CE(!H5"4M79K)$_)YA(J'?1Y/;PFJI^/+YO5 ++M7CRM3V%Q4M);9VKJ-HM])].8SCO%)Y9F\\.UQS17V8$O8GS3L<?OWM*S'C3! ++M](OP"-'9EL["LA(2[AFK+,P7,TGJ*)A.]%A.:=K=X%/[TS(9M<T8C3E`$:9` ++M]B!E:&YLN"2Z"3<HF.A3&'2O/)_MR9>D%!DW;_(/B5J705:?E.^QJ',30@ZJ ++MB[YDZD[B#%615Y8:A"%_,%:A<Y\R,P^F^(//UL8H$!+PI*YU.%*G'ZFN2S<J ++M""*1II.6(K1F+6R/N1*DVH[JMH(>+J,36<F.+GSMX@%I\SSB"DT169L`%:5Z ++M,7^U2DK'//<N6-$V0.42MKAZ(D>7.5E9NO"9EH_T&JJU$F*T@5<L$,C+$#@! ++MLAOT2+G;;<JUE-HE.6)W=I6,LZSHUHE`U?Q%,HN`'PS,$S-6GRYX.;-2POW( ++M8C[Y'L,57!G94T<*FT'OWSE!PC?<$L'8+\C(`:J5B(VA&:F&"\^]SW;KO#AZ ++M<TX;=@V:W?VNQX=]B9>AZR77DQ-VJT/DC$*#><N>S2,QL!?<)(@V7-DE!%/" ++M%77UB6><FVSN1TDRPFE"@?%;</^E";$3D];0S]WA9R!GV5!OE42BWU<HVC2V ++M!,S%V=3G*[_T'A=@Y6IA9?AD'/;\,WES>*ZRM'$H2[JLT!5YL,CX&=BM`#[! ++MWD./US1-#/L[7&<+=R3-+YC3:D6C(0:9ZZIJ@MP6P-I(7QS%51\07\U=Q?X: ++M044O@4?>^L`$Y/U:Y^B%("%J1:?BT(`VG>GQC?D[@I7?J"_-+L9>%V(>=HMK ++MPB<DC/I#74<2A;L^IG^9@*%2>[=-!0"KD2[!>B\^KEK(G'@C]02A,G%\I-.H ++MR4>CO+!J"%56>\%4I)W\H?W@KDS=RHV!?=./-5ZS9F>#+)-S4Y\RL"1K\=7C ++M/O'522FZ'#^0CO0K$.EX+>QFR<P[N4*?`=/:+9>VB2_A:I&-K"JCW\YWDU<_ ++MH(SI&_NND*E08'LKV'E.WH"DZ,IM_SJ/">FHKI/SMCSAGY>FGK.')T\L3Z/` ++MXF0F-Z^&'/7_.+FD:GSM!J8ZD%&Q\>Y>IYJP@B/%8G58?^$L2=JKW3QP$6WC ++M*%5V?OQ$J</=&2N&#+1)YYSL(PZ*-T//,LA"[>DX^G/9#B[)ZJ^$1Q2RYO#6 ++MWZFN?M"W8-QJY:4V\^6/B68JNU<BKZ]:U)2VW^7:7C79#L^Q\06J:>F^"34I ++M6-=>NV\W7@2+2:!'RW-L+4OS'2G/5R+*S76IH3'@=;7.@N1;"3;.:A:J6\TN ++M*JZ:E&<:HJ`;II6>$JH!7],7_)[9;6;PHI34'W>3L+<K':Y8I4;$EO=:Q%`A ++M>#VC;DM?RPL_H!]X=/NL863@'2ON5$].2&>3`BLAO5BA?>P%XSW-T2Q<,OW] ++MJ(SR$B.*)37GQ;*FA_G*SBX+#D:N%F;A=2>DF&J&J(M602P=IK4^+,+>B(\, ++M=/-%>:?7>N6I;?8ZXKW&;(\&UJ<R(Y)XDIXFY!]>L,*IWI_M@#AGM]P903\% ++MKY':O.]P'5;59;@AR$1?E,9B.MXS6'"/][4=9P&84+9#.V&7\[G1O<:*8DU[ ++MV:BAX+CXT*\8_CE0%;\FE,\")A_0R,%P6)_A&7EN,+=`<72,X)]4UK%=EB++ ++M5*3I+Q/R<Z*,>VXA2\6I])2L_Z)N",VGT=3NQ8<)&X6<F2Z4K-L?K=^W?Y;G ++MKCA8C[;/5H=>#1Z?>-+4:0FQGKUSL2S[=.J\B!![HX`>659#&+;0>6/DLNW^ ++M!R=)$F.#")((AM,YJZZIZ=ID?$/'AT\JZC&&3\9C(EV<7KDFQ;8'TTVXR(1G ++M9B(?F(PUG5!>Q=)W=+OFVB9?Z3F5@\VLX7HT/A[-9+#F3JQZ9=[>/+UVZLQ" ++M21(6NNT\*<[=9E-:G?X\.^X"N^_3`/,7]:R^*D?2#*1Q5<6)O-M#)^_&W$7: ++M+9],5B*DM?P]QVF'75&NB[5=N[=>O8N8T6\NF*9NE=U\F?1,*]X)IC:\.JV/ ++MT#0P9V=$=<8^W3U6>O5B*S*Y<DAZHZ^=T_Q.5>2C]Q\KG[6X!K\$JT0(G9.% ++ML`8KL"B_)'FW6/:-%=%SC]"GM2S4\/8`?5:^=HW@7\H>2QUN93DE'R7\P'Q^ ++M-IJ+PF,P[16-#6@7Z:U-LTJ^)'K/VQQ15,J=_Y"<Q<N]P:Q]<XI'63NZOV2@ ++M]3/LJP*9D(7,M(71+1II?,8=SKX7>Z:+`X)I#Z2+YV#2V'<!G\J]^V_."[L; ++M7O"UO]^6KZ#RHKZN:8-0XFEY>46K,D\@3O;NU5CF]>_=9S41AG7V3V?WM@JA ++M$R0*;,I)G0^Y_.-IV,VAM49Q[TD0<_Q]^SWTO.*5I05CK4+\WJ8N3@&>_3:? ++ME6\V9Y$N2?QPU#6WYKSNMD%X[-LT<V:VM8DN/IHEQ.+K<;,_ZT%5WRXI39_J ++M*F*UB:-FQ#?:TX+ZC9Y%4:)%]!?9R=OG/(<-;2WZ>_P4+-SZ3,HNVD>VY!/, ++MRNXKZ30'^C56^@FNN(*HG7?B=1'!3<$-/#T?"Y<,XRY[K-MMTP]V5O8M7(S< ++MRI9S,\;B+NV]^`;IEW@(R:#TN7V1[ABRX#"W22+V:#2XU>+#?&+^X_-YD])) ++M"$Y)OE0T^4['L[-,9UKVV)[%ZTQ>*1#+FI+^^AYT`AM_=FH0[N"=$6;]PJB' ++MHBA\CNVKL5>Q7."YJ,\?CU^/WM'F4QL%AVXNLU$_U-,`2UW,^6%7>FYJ^W5: ++M1\&6SL=3;B?";;>)W9N<O?P"R*.6Q*UYX<=!P\9'<N5E[L+744L,3;$[X=Q* ++M6^4&QZ:RK0XC_"/*SPT;9KOET$6$>+.+-27'40E%=Z[SYW,EK`+C[(8/./5D ++M=M/GA:0F?&OMKX2NWNMN19=0P<)LR7/'*1ZD\%8BBQ=5!?5)L(1`\"VID-*A ++MU(U`BU7:8Z^>=E)CAC&1U&HM_HP"(0L1%R&SP-E,`QRI8L":#DE-#O9("+*X ++MR.<98%2Y3LZ*9'$CUT;<?+"H'JH3)?%!$-JIU56R]6(_@LL7`39?VU[BK_(K ++M[C,L5#LTO3D?4RQ))Y;51.BPLYC+V?_<5@`.)D'LD8U3M4F*W[B?]6985GWD ++ME.R2#R^<B5_Q8"!WP=?[AY63@Z\[BAI_01OA:C*4C;]DDOPE4?^M?M9]F-]E ++M>3!KO6$J4UY.)N:36+5JX+&9;@F^%\I<`'[BUL53<"]F8^:-P^S&G8KGT'%2 ++M_:%S\.Q$*A.8RQ^]2C^BMK<:WS-87S1+?P,7]7;:V^FO0/4M6Y3[\K1.&JK5 ++M/)6#2D-3V_2KC2'4\,E;-T.\D%__X)//W@Z12VLI$!>]??=9SA>971QL=H'4 ++MG9R.ZN+(I+9U(M].,;7\!^7RWC\8C08I0YKE.27W>V>:MVO6!KL-5]=WAAJI ++M"E=BI0>E$QRO6[Y;Y.<T'7<3S^5>68L$-S.>3^5)J%^D8']4%^-V&6%99Y5G ++MYJWG^4=N0W0#UBY;3&'[A.#*J(FOYQGU)%OJL[RUC7+H<4O2$)Z/T&6B7QC3 ++MFOX&(N^>?(G'*74NMP6/SWOYEL4>![W,DO0T:0D>5L>&7K@);;80!,5'CT%: ++M>HLF]R3M,P.L8_V88A,1;+H/85RB:,,L`\1^LH>4:5\NCPJJ?_H>&]3IM":I ++MO:I\!N>WLND7V%C1D_EXE6PF<7!_LV&^>^^<K1XZ[39;3+96)0+RRI/007<< ++MQ=%>&;Y@0Y#@73.+H8@)"B1_,7]RG,*=>%ZO("?6[3U)=_EE:A[NB0]G>:]? ++M([<\:,HP[&O"154^4%*)QQRTSN_.P5'S(/MF6]98+UH+T3[;J4W=*^&J\CJ] ++M=7B=57,&D_4?7)><,^0BY1N'*9&C<95O$':E&R5JI0_4>"),_1U/-7LZ@$0] ++M(;9V=:2G:G_(8O\K9J71:RTVN:"TZ'+7\>L_.A(J&P^S6DUDYWS:4>$.8FF' ++MCQF*'KR4R]M'-B@(&PAJM"4_RT%^=;AUQ8!C-2Q:X,/`VW,^5AT*J5AP6'=" ++M@M>@$^HN?)DST$R4I&VX1=>EJ=A!>[%<ZWDZB,(:\KB&(52IWN:@6P:HF1": ++MISC6=#"NN2^!.$FXD$KWPO'E6PNX%R$O%E2ZGSDQL@LQG:W8O5+C-Q)@<IU] ++MPX(I->IQU([@6V14GKSB,$4@Z9TWY&"-BI:U`<>5BFDYPT66^$1+5TBQJAMR ++M[?([AZ"5I9J4?`OGM\*+_=9EBLL"$K;/+P5=F[>9+D[I,[97:W!,$L^1)KL- ++MP,,25SZP91E2Q%./!S@H/(WNDEXN:0B\RI>I109:/U)?:&'WR/Z>'Y`YKQO1 ++MVVML21\NW67IUT\-WS`1&TB-_];HK8X&+]RONKD.G.Y,4AX$1?FPFY['-/?) ++M?,CO*C$#0SJ&OTN%P:C>A"Y=M0OS3-!IXD+87!^>.*%;BS;:MR^(#+V;/NU1 ++MJ"A0/5XK^R174.R;=8\F7BQGJ3O</",YM96YI1R"Y1/;7;@\S31NRV<.V$:; ++M>/$\9C")W.<&/_U^[)Z>0#VYRC)^@&2'\\N+E!\]SF&KFKBA<!>ATCJ40:K< ++M?N_M1_G]A$%$:DLE7+H@.,/V4/:3K>>"=96D"<[8QY3J$SUX!GJ=<V]?*L]D ++M8C@F*D63.NFPS&4/%!ODU^MJUYEJ)[Q;,4PA&G0M\ZRC'(E5;QX)1U)Z"FOB ++M]7C34E+)E4N?7]W/1-V8$^<W[5==81)=&H#>3YX"'AYM232E);"#08RQK1I9 ++MNGD_VE7D+J84I]^3I+,=,/"#V=<>5Z8SRK^-.Y58T@FK*YX$^6MJ%O2N7#>D ++MXG`[H8EF-.>R[M,)SZ!C[DC(O)3+'3GD\\$"J(NG?<S9O-"_W-ZI(";"O8FK ++MF1"F9F<(XBOQO[?$(=31Q6Q0_P%,1Y94\2-AKY^<(8)%=8XU?1VJ<NZK#?G, ++M<']A\%C'F92CO$DJY4DWXYH&6MDGU;2GWS46X_I"PXN6O3->99;&<&AK?]$6 ++MQQY6RB5WVY$(K#(7:`4?RGB:8%KS+.5F!/*.MB;`=:_:-V4BBH52Y5-Y'B[L ++M"`X<>7O&L+3BPZ(LHK]*$>K/YDV43=!^II",?@]45<'&4I1`YXR^&<^:;;1& ++MV2/W\2C?X:!G@4;,S=C]N+R0GE2%N"Y%D,GIQ]$HSF22:3WYO@G1H.Z-")9P ++M\+3APC;-OG50<4)$X$$>-)=-:;U,^+BB(>`\%^D<Y#3E7([H/)/;764JO2+_ ++M$/N0;SZ^O2"G#I-(2_4QUK2PQ-0=IWW_<(%;VWT/3A[6A7X_Y*UK-;B)0&)C ++M5V.]@U\@TO?*WAB_%:P?;J_:8"\?5=14SI`]+O1(#^UEJ'<]_\%$7,R@X`E- ++M/)^^]_G)!?V;<9A`=QJ:<\>05^<LJLZ>':S*VA\\*:ZFWG2+`A)/<I7:%WRV ++M_.B63_FQEVW:)W?0]1;.N@OWOXUQ8$(H%2]W";>IMB=1N[??X*VEV5,I/K:< ++MWD$9O[KHWB\8LT[2B0\-:T>*U-L%JE4.N\(YHJ9:E`NT5>M6O\SYTK^@F,J^ ++MY#1;ZQ9`*T37.%BJ\L$)8Z_PTI"\2YZ6,QUZ=2,52:UO;)[DO\QDK42V902E ++M8<R=F3I$M&.7M.SYS6TB;D9[Y-QQW9M=(R3,;PRU+Q``;>'R&<V,I3W&"M4Z ++MGI<T^&^N39W^9S8NO<1[K_$[<9?K%^@\8?O:1@(KU3MER0FN8&-US4SQ/@^' ++M_0\_H/]O\'^B@8,[T@Z+PWC88=U`_P4,Y2(A96YD<W1R96%M"F5N9&]B:@HR ++M-2`P(&]B:B`\/`HO5'EP92`O1F]N=`HO4W5B='EP92`O5'EP93$*+T5N8V]D ++M:6YG(#DW(#`@4@HO1FER<W1#:&%R(#0P"B],87-T0VAA<B`Q,C(*+U=I9'1H ++M<R`Y."`P(%(*+T)A<V5&;VYT("]&0E-/2$DK0TU45#$P"B]&;VYT1&5S8W)I ++M<'1O<B`R,R`P(%(*/CX@96YD;V)J"C(S(#`@;V)J(#P\"B]!<V-E;G0@-C$Q ++M"B]#87!(96EG:'0@-C$Q"B]$97-C96YT("TR,C(*+T9O;G1.86UE("]&0E-/ ++M2$DK0TU45#$P"B])=&%L:6-!;F=L92`P"B]3=&5M5B`V.0HO6$AE:6=H="`T ++M,S$*+T9O;G1"0F]X(%LM-"`M,C,U(#<S,2`X,#!="B]&;&%G<R`T"B]#:&%R ++M4V5T("@O<&%R96YL969T+W!A<F5N<FEG:'0O8V]M;6$O<&5R:6]D+V$O8R]D ++M+V4O9B]G+VDO;"]M+VXO;R]P+W(O<R]T+W8O=R]Y+WHI"B]&;VYT1FEL92`R ++M-"`P(%(*/CX@96YD;V)J"CDX(#`@;V)J"ELU,C4@-3(U(#`@,"`U,C4@,"`U ++M,C4@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@,"`P(#`@,"`P(#4R-2`P(#4R-2`U,C4@-3(U(#4R-2`U,C4@,"`U,C4@ ++M,"`P(#4R-2`U,C4@-3(U(#4R-2`U,C4@,"`U,C4@-3(U(#4R-2`P(#4R-2`U ++M,C4@,"`U,C4@-3(U(%T*96YD;V)J"CDW(#`@;V)J(#P\"B]4>7!E("]%;F-O ++M9&EN9PHO1&EF9F5R96YC97,@6R`P("\N;F]T9&5F(#0P+W!A<F5N;&5F="]P ++M87)E;G)I9VAT(#0R+RYN;W1D968@-#0O8V]M;6$@-#4O+FYO=&1E9B`T-B]P ++M97)I;V0@-#<O+FYO=&1E9B`Y-R]A(#DX+RYN;W1D968@.3DO8R]D+V4O9B]G ++M(#$P-"\N;F]T9&5F(#$P-2]I(#$P-B\N;F]T9&5F(#$P."]L+VTO;B]O+W`@ ++M,3$S+RYN;W1D968@,3$T+W(O<R]T(#$Q-R\N;F]T9&5F(#$Q."]V+W<@,3(P ++M+RYN;W1D968@,3(Q+WDO>B`Q,C,O+FYO=&1E9ET*/CX@96YD;V)J"C$W(#`@ ++M;V)J(#P\"B],96YG=&@Q(#(P.#0*+TQE;F=T:#(@,34S-3`*+TQE;F=T:#,@ ++M-3,R"B],96YG=&@@,38T.#0@("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^ ++M/@IS=')E86T*>-KMMF-T9MVV<!O;KMBNBBJV;9M/;!L5&Q4[%:=BV[9MV^:7 ++M=Y]S=M4^W\][?]UVD[2T]#''FJ.O,=<:3\B(Y!2_\AO9&`!$;*P=OS)\8^`@ ++M%)168*`G9/A&3R\`0T8F:`_0=S2SL1;2=P1P$#*PLS,2B@`,/O_X_.%@_L[! ++MS`A#1BAH8^MF;V9BZDA(*4CU3Q(K(;\5P-[,4-^:4%K?T11@];F'H;XEH:*- ++MH1G`T>T;(;^E):'"/U<X$"H`'`#VS@"C;S`,#(1&9H:.A`8`$S-K&+I_E,2M ++MC6T(6?\K;.1D^S]+S@![AT\I0LI_:5(1?DH:V5A;NA$:`8QAZ&1L/JL!/EW^ ++MW]#ZWYN+.%E:RNA;_;/]/XWZOY;UK<PLW?X[P<;*ULD18$\H;6,$L+?^WZFJ ++M@/]RDP88F3E9_>]5<4=]2S-#?FL32P`A_7^%S!Q$S%P!1G)FCH:FA,;ZE@Z` ++M?\4!UD;_6^*S<_]2H-.0%147$:;YKS/]UYJ<OIFUHY*;[;]W_2?Y7\SPAS^[ ++M8V_F2JA)_]E>AL_$S^__^4O[?]42MC:T,3*S-B%D9&8AU+>WUW>#^7QZ/HF9 ++MT(.!T,S:".!*"'#]%*;[9FWC^'D)X6=/O`B-;>QA_CG0SS.G,_Y7[+^0\1/- ++M_B#3)UK^P>__)/]99OID.R<;1X"1@>5_'?2_5U@)Z6P!]H8`Z[]B[/^=_9^I ++MW^D_4_7M`=:6`.._H@S_'?U?R9]^^@[_;.%@\2?X:6EKZ>3P)_#I96AC9:7_ ++M)\),2&?J9FL*L/X38OF7HIF-T9_0I[6#I;Z#Z9\(&R&=.\#>YD_@\R9LK`'_ ++M9N9/>T>7/^O,G]Z.IO:`OS+^::F-D_V?P#]--7/^*^-3U^'SN/_-G[(.`.>_ ++M7#^/E@[P'XU@_E2U-OM;A.V?>[:T^>LB]G^VL3+[SR@+TS^G`'#X9ZC\"7Y6 ++MY/]#G]4$_M!G)<$_]%E&Z`]]EA#^-[%^]D+D#WUV0O0/?79![`]]2HC_H<_[ ++ME_A#GRZ2?^C31>H/?;I(_Z%/%YD_].DB^V]B^W21^T.?U17^T&=UQ3_T65WI ++M#WU65_Y#G]55_M!G==4_]%E=[0]]5E?_-[%_WKN!O;ZA!<#Q/Y[JS^G][Q?F ++M/Q>8_GW!?S[PGS.3[L]CS/Y9T^`/?=8T_/-RTG_>LM%?^.D`^`O_>0S_PL^" ++M)G_A9Q-,_\+/+OPU!>@_VV#^%WXZ6?R%GU)_S0CZ3RNK/_@Y]^BL_\)/*YN_ ++M\-/*]B_\Y^'\"S^M[/_"?]Z+O_#3RO$O_+1R^@L_K9S_PD\KE[_&W*>5ZU_X ++M:>7V%WY:N?^%GU:?0_Y_YL+_/>L%!&Q</;XR?K[[G[_H_SD)=D)V%G:O_\Q4 ++MMC;[?/'$A3YG!CT]Z^>)_Q,U=++_''*.__J`_:SQ/VQL]OFQ`P"X`@QAEN9M ++M##D#S)/J@XJ]A7,G2\"I@05,&F)D:CIGVF#]%V.!+0N&)>VHUZO5GG^GHB+L ++M@^\3N+SB.(2U>LJ/B5SXV<4DS[WO.^OMI[HWX:A=ITJ[[=D2/_B?(+;4S]Z> ++M,@/+3J^/%,>KY_5E7/:?Y,A1"BD=0*X2`75I.M=VI06PL*J)I%HJ!P=6DS,1 ++M*2`EVQ6'?`]><T&*CP-;F_#W-@^&:J19N;)I=4)YSH7*_OFN]8`>C6S82L"D ++ML$V-IG#`>UJ4%XR$6/71.UC!ET9HHFA/N`^^#*4P+.Z?B1I4D>&.+:P[=8DY ++M+APB[7Q!V]2J1O1&QJ*]7K"KRT2C:YHGL9A/?QF7:U,:2?$$Y?Y^3)CXR/ZK ++M5?*G#^FF[X4GXD_'G$@5+2H-<"+X)G,23(V^U+1)-'<&A-MT96Q^;QAB6][X ++M#P\GOE1M?J\"!QBS':1G<P&J5V]9`UC$WGXNN:-,S,PZ?"G)7@5,>SK\*+ZK ++M+8$HMV\5FUH:<C,1"LC2K]/22B">'60H:\@V8(;K?`J%98KU_+^\_7;]XET# ++MQIF-<<31>7,R8:B#X#STE8/LZ+GWRR&*$&2$$3`AG)WW6VJI4TE+6WDJASW< ++M.=^+9,_81U^LE#2K6WLS=3"2C"!_9\0K6\Y>0I%>J*:9`M6O<E0$P/+V_Z"T ++M9XGB%'!<@QAFJ8@V%.G"$1RP'R6EXR2BE5P`CK3+*91*C3\#^IG_`E"]W71" ++M$JU8($P^S05N+#=%1DQF3=SSNX)`$Y??T'0"8_Q%_Y9;YZ3!5G>01/V[BP0B ++M&SOE]1$KPZYQY39!KODX_:K)LV-@-%$\:O1G.#8F4KTMP.N(I$!])5@5S0,- ++M1@S"@?)@YZG'"RND.B!&$%@8;K,5_?P8:#=BS##DYI7S8G&I%PA8$X!(IV@% ++MJD)>]0%CML`XD.-O9:A%WVEQ)DCA8$NUUZQ&WW08QD?:PV@^?2,K6B?*7AM" ++M5F:<\C"%>2PE<2K$UV%5`I2R_L9HP)RH96CD1O0C_-KL=-"=!C>BS-*U?D^_ ++M$C*IG69@F+%6D<_I7ASG2'WJGEF$Q\XD4\%'5MC&19+Z\?UFL9^3+CSE'=&A ++M6:AF`KT`510_=R!GS)6;IY9`8GR/T"G-7$K(>'L1X6$@R*(,8F\#[/MT/^3K ++MCZ&3V<68;[LPSI@]Y:4CGN-`#!D0+B56#9MDL/(QT8EF+FT1D9!O;;>3:D(R ++M7EZQKI''*9[MX,(QWTR^2'KDCL'>*KT6P*82\EC4D4_/U3'B;T5.9U?I*+8V ++M[FPBF=0@3*_1-E5:,1`7L@HJ@L]^/>JO1XNS>!/:0)H2`CDY^X!%D\1-F_[J ++MX*9@\'[\SC!82-0]:YX-AV2*4YP$#WUU+)NC8I&X310D(?Q+8OG4\!XW:\K? ++M>283<6WG1;9US=S#&"(L90;W3FIA@]A@.79T@#)TN(`&SX9(>30J'H:6>7&, ++M9T"1'"OJ*SU2S`UV'2)]J<MTKW#S`R-3*)^ED!$.AWVWQ5B>@)PTJ"5Q;C.V ++MV=ZC=QZ0'#8G(\.N36(IAR6"A*P-T69U^X7B)L:-M"TH,\$4*8L"-'D_(U$` ++M$G/JTP>&B]S,.'PI9VP-4J\JWS?P'HQ;(%++"+:FB$%01#LDR=YG</"ZB[R[ ++MODS97YX\;O!F03%,!DH+.T+R^W'E)!VZ+Z5M-SQDS&G3E0?9IL8@*N&#CL0W ++MI$$C<BZ6WB4'5QVNU93#C$KR$(K<AJ9YR5JZ=WEA%QA;O^T6QFF-Q:\G)"G= ++M9I_!B-GKP)Y"IE\./3D'`O8THW9L<.HNT-[46(:%HE`S']^)\7]X04`5-"%` ++MC=Q*T!NGWF[#S74.@N/K!D$0@U6P?"V(:9!J4ABZ=<NJ5M01+06.=4J`(>"` ++MAV8%UA<CIE'2Q`<JQF&?1D$SN"-P,`7I(VE]*8H_1>YAYDT;NPRE!3I1XY`V ++M(+7#2M$S2L'QL\D21RQDTW_6ESWUZ>;0%F8`IZA73O*[&@2_//V)!Z=W@#A7 ++MJGS]S=!MQHR>US#[`"*.%3DRNT"S3K?_&#.I5;YK4I$/>TPF3<=>5N($+9UM ++M!8'F_1"YN%C"$5R`=C46=RWI5-QYV\?9/),W@,T3K)_%"1K=6SH6.N=^K2ZU ++M"=JFE\,FR>$L?6?90F4*YB+EC<(GR/B`D-+7_=22?"]'0-QR%MOW%!P_6/OI ++M3K3]4J_)K"JI(DDO_"'7$99!T0#;%+[\-YB2K25`#45Y.(T/,KI@1L'!!QBP ++M^)TYM?7MKAOEL3QK#O8\T?]@+C$#BPL\*GS9]1Y'OS39T8(#4PZ:@Z_+NTWB ++M@J7EZS-N:G<.Y?=U$9+1`8N[PKCJZAW3J8WO=HO?$ZIBE?P!9M.YB.F56@B] ++M*<?:#`%CS8?3OR9\^YGCG&I"):7+?.+D<(H+VH@45":RF+O;9F&FEL2!()@^ ++M8'4'3"3;%U#BRR@_R.P0$J,">][MP"PNN^PNQ!Y!I"@3LMJM0RVF*O;<G$4P ++M3&CMQ=7?C`?9PUJT+4'Z]).-A5FA=MZ&NYUDTIFXD$GR'T16-6F+9^G)682+ ++M(AQYVA\'OV:3V#1P<X]]!$M@JU/RF;(5X?/=B&&<',.[A_*9VXA_T]&QC)`. ++M_-54Q&DN"%:I4<</AKV)-BA<2\FU\Z#]B[9AS+7?G0#"TZT:NJW9!'P1L0-J ++M#/$D@_'G4H+FO0/L7'Q"SB..[8^X.FA%V]#%TN_95N4ZX2UI,/"7:07VW,>) ++MLA"=6P5*&"JB"&0$&J_&+F#<!_V+FGHS)XUY_-H=Z[Q4<\_9=>.21\H)">2Z ++M1:VD.?8O%6G8DWE;N&6_NQNP!:']1%;>'K;((>+43\3A2BJ]M-(W2T*B;QZM ++MW?<']HIR(_;QE"`;I@P#;"(J3FX"R=Q/L<16FO4:"LYL(X(&#AQ\Z<1Q#2U/ ++M)=#5T2C9N%4(96QW_,M9"'A$I3S2=5:[>!P(+$S:W++3/*F<,Z0S%K")*@AG ++M1+]P[5VUVU8B96]2BR.'(6@"25M^X;*8RXV[T>/#[G(D$RF`N^0:0X/$9=B( ++M/12B6$[,%)A1S3VYY<OM0Y848C!8G"TV!=-\2S((#&_\EEPBAW*A?U%#;=W[ ++M.#/YX8(HTQ91:P?<5DHB>Y`B+E'1PTAAQD294`H)H'2.FI`R8XB6$@B>@85^ ++MDUXG9>DL:2E!&]J]W4+BK?(9V[EM9M<]2D"PA3-AZC_H&D\[RJ#0/K]->VX\ ++MCK-I.FE1QZRW=L#`Z>B#JR?*Y13]_I9ST:IK"<1XS\7%:$A0]MK4,?U0NNG; ++M985W&14]6QT;`X0!+1QT/'G2H,/5`JRPKDI&=)IHG,KN7\4$K<43"NDH2W9F ++MP`L5D.A4J!V^/,X;5!PR5MPE*",WNYOQ5J.T<,N165!A+1S#T3IQ_6).9(T$ ++MJ0SALY+/T,;!`3E2G#J:%$8YFQZ91<4]['%;P"MVX%3J0/C=$K)YD'QC9R4E ++M%GCD'-':/HUO?_L>$QYDAJQ129?]')PZ,X1[%C9F9$K(>U"AFSR_Y@>,I0-5 ++M^V\H!@78(?-$8Y:*0G6T4^GXD@P0'YVD'^?/!)WA!78OGC<;ZWSY!DXE0-&[ ++M_('O'(2/#]HZW6>1Y=V8K)>^(4=YUGK>?M,HS(E[L0X)#8GX32W)J\N;AB*( ++MUR5&`9K2)(%3E,=N%4K+)17K-]YV=G4^(%RO]DM4S>C<I!</I4W9N#?=:`FM ++MQ"K)@*C"<B`'0:SY<2`5^(YIC)5VX-.49#Y!]QV379E2^Y(FN^FNT!$;4H!^ ++M!@'YPE9#S+DSGMO+%1D8JMWWB@;ABWJ(1L%QN(,Z2+3MNKP^-')@]-=+5R!J ++M%Z]%M*,J$Q@9H)+0,NT:5P*F'ZO4'U4<^$W"]&*&,U+M<Q29!=D&*.XNK;*U ++M?1%/E@(7+*')EMX3OK#%V4:]'>1[]DG/8+ZCZMQ@#KTI3760]-$1WY"?8;/? ++M]K2)7?QD*U>CVVE<]N:L#<2+M=0N2>U^85E6T!Q4Z#H2DS0#P*!:SL_:?AZ7 ++M=3;]-KSOYP%&WX0DUPSL$GKR!,*$+W68PD%;LQH-53Y^\.D#-5^-I!;T.?/H ++M.2K]Z4VSZ3=A+^F/1@L*-"CB4:E:A@.@R<D.FH:QY%,,VQ9CC>-G&S4Q)$"L ++M:CS#(W;6'1OV2R5!B8QRZ=!A'ZY4DR>NOYM4F0S<R*J@F;%$X^,<,4]P%'/0 ++M=V&Z<?`>G1IL^'7HE.;\41'XCLOP;HK2*#6<!?_-BF+2H99;^MJ5S8DG![H5 ++MHJ"L%[,69_]H1BF_;3*K1M^<,)S[*(#`J,D3RSZE"5(!KAKV]<O!Q_?\9KB, ++MUU_/';MX?L\;&PDGTP)(<ZHS)2`TFS8_#$G0X^_OT+I"C@RC=0`1&4V*YX$D ++MC:SZ-"+%:9@S>!;CHZ#!<]>N/NVQ-H1!$:^#M@9923.RC=Y(4A_HPOJRNMJJ ++MW:B_''2+I1A%=9<HA6*;'F]KY5O8&,;D6JH*AV@RQ@]0`"1MRR3E_8,.`GO3 ++MMTE;$>PT^:OVDW?7VC;?WH"J%$1E9;*=@6_6W/U$4E#$^$#,N_U>9JD`*3)= ++M(7<.;V>R'I$>R>C19RTBPZ#/53"DQA]!(1XL^Y$#+/R+Q2`##"'4C;Z;FT5: ++MWHJY&1G!_!(>3-:ED'UO$&K]&^Z9;AEWOY0;C*9_DKC#D0\IW!^LJ*<6JJ<U ++MMVN#0G@/(Q+`*M$]]D>&%*7;A;66MI?P*M5;?#6J*X1@G(F3T]+[@1C2K?WV ++M4K+QXR,%=(D>F80&GL;:+JVDIT&:JV>3(984K\B%ED7J9JVGQF;;54(M&=F0 ++MY3I4`0K,>UU9=?<LQGU*['I@]OJKIX8OZ.&J'^0=Z$][<$C2&7G5@H<6.DW7 ++MP/IZR+@;'41!(`M-,6KV_2&[*1J2U8>,$;>9^43^EGZ]4G'!G$/]JD(7@909 ++MR<"J"]-IRSC&<+5$F3MPI':QXN$VQ6DL_$>.YOWA'*I$O"E@+=XUK*BH#38% ++MQVAY@!X5SP8J&%25;`[;G>7M=L'<E)MPPB[DXCS(RU@/M%Y\T*/^=UO#HRVA ++M1V14$P+2Y[U6^V$%UCL-O.+BZE#4QG@L[K*HJ4#7&\S)VG"UA@;@QQHN=9XC ++M3?`G7_ZZD6C:"N$&0V6%FG+T$36SU%M6041FFW6L4JWYL:PZ:)-3M/'2TZ<5 ++M^&,?]T3ZWMPP.*&;%H2"9G"Y,5D_DQ[B^H&0AQS#FB[U@M<V:@&]A/7)_#K9 ++MJZJ>H=0OI5U`]9)6AO=!B!F<8),Z@ORV)(FK/V.^+`SL9-4;,UMG0@:V,J() ++M0*[:._CFN&A`(%!%3ENY*'^'E)<7$E3^85Q<5@)I\+-XKU+.'N:,^GM&H77` ++MM10J"=?[,YEB^[#D6ZBV0NOX=+)-&G.E@KC9U5>Z;>4!,(*L\PP4K`F0R!J$ ++M.)@F*R';7E8E)/VG)E"Y>@O<+,DG)*HV5`4_\@/#MFY=R8T(?-H".1,]87=6 ++M8&&J!&U=!O"!>*GR6L&K0UYQ($*.+^/1*RSYMDSG-M8YJTC^<U!06)T,V%Q0 ++MWX?/]L"R)*YR\I90Z9V:O[IB&GS^,V+K>KZ.A.N>`@!!P^GV2VD&+F>AL(DF ++M,DU+;\QRS6,`/Q_[G;FBKUUH@IASPC'TW9WL%GE-?9<YA3&93*?ZE03;5M0R ++M69X'XOAF%@I6X*:P>H4((-^P9-)%`H4,4#+&N)1(-.V6A[7<_&*\A1V/[JYK ++M<<VUKIF@#M*:!-F!R_T!3<K;R26TLX=?T7L!#96%9(/E?AX.$I`2Q2')D]@$ ++M\UV3'PLGST6@<,V(J=-NGT4+)6+B@_8V0`I?H[PF4Q+774^K\RZLQ+,@8B`[ ++M3`T,9)SKS&S_P,#X9A4:J2M6(@48T^\5?D\173=WX>6K3YJ9J<*F:H\QL7PM ++MT:DI9AM&#EZ<5AVZV;K/K%YM8;@F-"-_A7D;87)]N75%TB;Q\BS#UWC5!YZB ++M6@@8IW&B\/U74'2JL]]LQ8+6(&NA#[\L=^YDBZZ?E!F-.KK(J0!US><6^TQJ ++MA*A[!:YUXA'S%+/DQA8B"TI:LNA@UZ+<)-1RVA1&B5!Q*N>92U>T/#,@V2M6 ++M^Q!)_48I9\"/6%I.(V52*T`(.0G&O,URIOAYVLU&AV?:JCCOL=H[5??CDC0N ++M3VUV[&PAS7'T3:$Y\)6&W*ZY/?3.%!FZWH4_G<_@W'-4<2-.)G!)FPMRN^2? ++MTL%R!G7BJ=03F[2;>NY#-3Z,(.4+P;GZ"9+L?0FXG[*6OI`3/FO^VA&3^&Y& ++M>@ZJH"3!SN1&6+TQ'__N9IUBU%=%&M*PI.AI5PJJ02_G;-#I,_4QH*\7+=74 ++MFIL<H5)HC\#2<WO!K=O5?T24\I4S;Z-M`C?2W_'H5/J,8&?KY0,%\W4KE0]$ ++M'84['C-])<2C<F,X@S:+"%MJF$4[%KJ;F,\LL;E17D*U7I`QQ*$;M9Z4TXXZ ++MK<^B)[A=%O(1>?BPJCDS[A$6+((>?0VC)'#BMH4W[7"H1C;`'8)WN-&-_</K ++M\"::(VG'\9D`>.*I=RY`.^W(QZ!+G7))_<@`Y(B3!^3FV#<+N]L8)SM*17'P ++M[4[WZ]`IS1D7RF_HOK[5T?R9D>'MMC[R)`M=*!:^LZ5WF:9:W<;]@FO\+5-X ++M@['S[(1J!(H!.-90SQ(49"6V%9H[VIO@@EK8R$!T%361B/O!X\5+-7?D)?GN ++M;TU$UTA/.!ZW+,5*4U3GHYQGDZ8SZ.(H]IEK^V@5JU_.)ZQ+3?<(8PU*1\., ++MB(/CNX$\[`J,1CU!":LZD"IPHK7V[4[]4Y)H$+R(7(][O6-9G,C.YY9`:JJS ++MA)O1.64E7_/U/M:V;?4#T<>FAJR3>@??L)O$YLOX=O<+9JD5&-(WP;X1P]EN ++M<=BJPV:+9L&B+?2!93K:F\O"?@^Z[6Q]!#4XCN(1EV(P%V-1BKG!BN51)$=M ++M,HEJ829?*K57XH:40F_O4M[M=@')&D'152W]R;#/I`NJ02=)UY6JTZO2$*(E ++MWU!$45YC01G`=T*+1VY:1,S^FE'G%]'LZAS?L2Q3)(5ORF!`9<ZRJZ1O_9RM ++M%Y$53E]$D+O5XZTU"]DEY`#F1$:0K7T66VL".\SZ-3L\`3+X;>MZ\-`H/$FC ++M"V*6#;IKJJGWQJ].T%5G%/\%26&O7S'YT@MSWN'+=G854X73Z#<]N,G5@X/S ++M`)J3GWD'F;!+/;4%:B9ZQ(E5,86J<[$?$79XW6PYU^YLX+'!"7:C-WLA8*:3 ++MN-`^-<@E:F\=>1K?O^7.V36N+*:_-=0>K")2*MNJ,>$'6W17=X3!#_CJ"$*U ++M%HMB08$,'O%CP]S+N-U_O3G-T#2:82?!ZCL:R+(ISCYOI(PS3]*FX=@7#*GW ++M8BR$@.D:5%X*2C*L-1ED3,A?M<:T`NW7JA8U)."#$C./N,3\LK[I=`'FD[`? ++M$IG?A/$M76ZZ+0KJQ=R^47]6U\\"V9\32L2G8V31E"W=64HEOAMB>,DI5))H ++M#QFU]WUNP/$RDWX!DB\:5S(BSV<]?\/K"ZNFR:R/5/,K%SYR)B7J-M(">(XQ ++M"D4F&B(.@<K32M@1UK;Y*<'!0-'^2-@2.13<,IJSYPD45;SV[S/D))L&6T[\ ++MW[@B11B^F]#=]SI2!$1H(E^^D4)I:P"_C6EKP@`1&A7J@E*.=A",9'F;/KD\ ++M<UV>F;R1OP?JD:E34Z4YT&`K\\&^:Y?M9.T&I)*.-:9);4M)`3`]`V'V<`MQ ++M"+&W3`T$P0(BXP\BLFVM07ZW#ZR:&'!,5N#D"5X?W7=!_QZG$(<U\59F>>5F ++M0E!,;#!9P`Y,WJYR_96\*AKO6FP::0H1UYD1GF8LID7F?(@WCMXWW;%ET4Y* ++M45H6:>`"?%R9O8S%3\689T;JIL)VQA?)!CGE7\E$B\PMSWA<@Y142UG[E`Q[ ++M-0#;R'K*!TC?/\!KH0QIF-(NACK$PPC&2LY<P%-Q[/,"MNR!)%8I7D0).?,: ++M2\K6H*493]74L5RYH]!OY0EE=&[S[E(+-'IZ"J:HLO(OA*SZ816A((P5\(0# ++M1EW/.A&R42%]O<J!_R936*R6RNRCPG/6,FQ$7SPA%.TEW_9+;C@SX01S%Q<\ ++MK-U7>;Y1)^K(KM@CRY,OUJTDB"(>\T?3Q:L0U*G`;2Y]`V59G[!>R*IY===U ++MJ_MT.HJ^-V*P='K@+7RZ(%!A<6S5/K/2C1."41SU\?+83;7-`'"^<#7-G;16 ++MUL:V)9F]!G;,C\K=#"?5-KA\+"`U/<;C!?6CO;-.U2B<AOX!$,1@3%&ZS:+9 ++MBL):JL!&2G2^2/LY-UF[2V2N%/\29-%*NW<GB4,M&D.F>.\"IC3)WN?8L;JG ++MRZ2S!0LW.`SE?A1&+R[7'\O@&K9[NMPR_<2XG@C5]^'K'F8_E$@GLJ`\9%R' ++MBRV3/*8Z;WV>(;+K%<C;:Q-2\/"H&OP[Z;^A$63NZ@H`-SR8T7`PT)378PKH ++M/C`K_`B2:Q,&'HQ>&.51*1,',]]PR3')-VEL@Q$]"G0CZ2KW_`!M@VRY:NPZ ++MGT]F]=;I]1IN]]WHI5,*:_*"L\^B,\0XO'-NILNW*.>.F'U*:9<I2/823N.9 ++M\X6UQX4J:)0DFMD8!P6!(=>./9T3*LG5</:1-,[G7.G>M]:UACL9R/31N)RR ++M=!*;PN7Y\A,6"VWY2YHS6D;_>'R]"7L?:)/\N_+34:1`-T]J$SI$@2$]=6%2 ++M$B.7\@$X,OK7.A<^1I)IV#7[EG:Q&TE,@^*L_C,^0<F2!MNN-RMGUB+KIK99 ++M`G"B.TM5SXA6XLH-@H$\&]Q4'^.,[;U9P&_>,ARC16O0Z)S@N3</*Z2RK*+J ++MMT`:IV,-^:-A,J^\`?&1X\'$>]0Y2MF:YMS&B>\\)*9@;Y*4L8MBG<F;<HXN ++M=X#I,'$J1;=8J9BGWW?U.-0V/>(E.CDU?`=H@TX"2L)CD=_GU%QQ,A?S3;#U ++M[WD35OL`X,"C\?@FLDW#O=#[:@07Z`$VR`7)7\JACR)?P=IA.7-:KV^970]6 ++MXR,/573\VP9B+S9.S8>-OC3%:^QL3K30;%G%?O=Z98N7L6%J-EF',;F@H8O" ++M<[HTPE2X*8D4#+0W#"+0!][>@M*R?8X`]E#OX,BCYYTF%Q0`B*7S0K"X_E:. ++M&C^#;'WWO$-[X'0W=BQ_Z![#@'0@W!I&$R8.\#.*"U?J7J%/JV^I95S8('RI ++MUTOY92@6BJ2M&&'OWZ^)<)G*V/3<SOX%]28TO?L0D>7WQ\SD734E_,%\HV'0 ++M,51AWG2/SHE]GRD9A5FF4\]-HZ>LW9K;^<4FTL=%;S8G>+`0:!9L5^T>R_T7 ++M+GH/8>2(NUU2*G:B`!\Y,[_!;I#:K"'4IRG/[=496V(<*?09)V*!H++/.09T ++M;J$G'HMI=$=Z;I8@`LI$"T%>/E36TAVE'66][?]./"U">),_/^)+=N.!@([A ++M!2S/OT^@5K3+5,\[_[K#5U;VDOQU)@Z?0K_.EYFZH2?:P_"U5I4JY_0+6N\H ++MC<PY8F-UR2/,K!=G\*.SDCGN9!#+4_<1?^B,`_V&E^54I^!&M_AZ'.J;'8Y/ ++MV!#6D,6!?>:X3W&+5VV9F<5]V&3U4DAP\D../M<S<L68F-?6^''WRRSP4*I( ++MZ"$\7=.D>GUSPZIU2E0[V[&$Z=>!N0^>X>TH.$6T<=JT55>>KN01CE-;\OVF ++MB(KJ4`843<REP3@J;UQA8Q,[IKKR2B]0A;2*"JEX1&UT-+JIS(RQ7(43FT>$ ++MQ+9804YTO[)(C/LL@2@!8')_X<A*HB49CIEYQF25>S<FI*IZQ5'^B\S7`K<3 ++M7[>2Z3RYS-8=0JW#8>IN99B4G\UO[1P(WK$%V?YG(8^F`JV"ABUY'-Q;H<-^ ++MN4V&8XHSH%UC0Q`A(O#[ZM?U[IY,S'0=]LEE\;R;6X%J23@C9"_I@\_(^GD= ++MW4F=]XBFMS!J7\?IT4*9U>(WQL4/N6SCH`+2W%0)NL6;WT0??N;>[HV0E[#J ++MY7UW)?XJ>+.N'FZ`Y]L33F+K5S'>&:9A[)W`2=,L5/APDMN^>"/XWKSO.+5: ++MBZ(KU?V5:!<;K(A)!H\O5HFY,3)"2CEN.(N=4CI9&0QZ1`?TSBXNH`?U]_NH ++M]]1S'J^GXIZ=M1'_=`,6-5FPT4K:-T:Z`TQ_V2=0"M(#CT#<8Y)@;NNHC$YY ++M+=@:;`4=I_!#"UH1U'+KM%5R92_PF-,T0>:1T08)]1/H;7V$LI=R]V7)E*^S ++M@,*E"'*5$%#2!UIQGCM>;<I*_0TC591O(7J4$@'D<5M%037LOZ7;VD[?<6E. ++MY']U:F+8]8@T\A7P@(FT!LPOQ"EXZE)8!H,$&)ET5@MA6E>/M6DOV2HD7[6$ ++M.5EQ>*S(&-`94#VV3M=H%5\><ORFY\C'UNQE?X*$/[40LL-JWF,Q#D/3K*\? ++MP<C+)X&5@$RO]$Z!T1(F?_"PCZI-B"D\*V9UWV4,K:LT*3-K*DFO["F0K@0M ++M04U'/^+<S$'3+IYNIS<"]&,V'X?GCU*I#5E^G(5!Z'!Q-6=[^=F+'`#KSVR3 ++M-:^Z#4',[WRPY0F8<Z][:>,K.9LJ`>OA6.BS7L!UL-Z2_]C/X(GDQ!`-Y'Y@ ++M5M&1:QQ2F'P8`79-W+3N:6A\L53-=!A@/,_76F-R>2:4'_"RG1RCM2W<NPQR ++M9!FZ@UOC^"G4$?*%BK`-;_`$]NM<Q*H3!U(/MLX.`1PV`U;61`CM-<&N\9V" ++MX@]0$O8;IT$K-G&<HNDJ_C'=,=#R+1?QW)AA78PJ:6[QF<5KDDPMD3!1VWA_ ++MLJ@>[UV!5I>4'?^&'&MUFPDDL&QQ9GF$.\I==F_[0Y*[)]\D'984$?6F'R-C ++M4]7$&WZ(QM?G*N&=V<8CSPYN)E=8I+N/:4E"7G2@(&"`)NEAX(#ZI[.OF?!; ++MYPVHY2N$9=^>0J)=*R[S"JG[!Q4UHDLE+M]K/7!(6"SIY!._8"*$0$GFW;K/ ++M;3=@,Q8_=*0U0D,<F!*J**V22K/K@#A1B>?:XC>3SL5ZH&;,>YZ:Q4"YQ!5' ++MPX/+)(8@EBP/[_@FXP].EL^<_G@L:-%HQ:=YE&(F0/G29>6<O$X.;QQ>T$9O ++MQF!MMW$!,#LRN!GS0=HS[L%UFAY0WZ71ON90R*^F;E*E.3=DC-M8Z@>JA+@$ ++M7+[BU;54!D*<!DF+=N;;M+?QH?(]P]W'U=ITTH2CL^YI%K-J>V6O4FNW>=!P ++M&RXFO\:+9&2T)I!'?-D]%F8.)JP@GL*3EK$M*@,@1H-@C"3^I'MW4A%MI%'Q ++MW62#K@<]&I6C1Z#$JM1@4HWJ(C%T!^GB_))T].-6B4X%=J3LXB#8;V<]O!UH ++MIPC\2&RIFX`A,H,EEK0BA67%I#D_0QW6-7L[%7<M'97&B9+,)Y+$X$73L&O< ++MK8XJ'"G&\Z(,&^MC=`62&S*8K^U*T8.B(T8M`*\>]7=0$JISKKF5P-$!\HK] ++M'.W>R[0J[JN:-;3/BM:=Q;[C::;E1,S5`S\?@S=^!,7;2?,D*:*!2,TQ&-]0 ++MKS0"2C'^AW5V=\2!:P.;VN5=,F';1QH79_#A[)Q;AI6M<=B:&['TVH[A;W,8 ++M<<5B%QI5N3;X-WU)N!"2BPJ\W[B'*2RVELM^$E<MW]((\[G\W.K'JEKS8/HH ++MAH<B%6W]Y`Z"(N>+<<TE=WD^Q+8B/.')RQ:;JG\<08>W?;\L/PLB3&K%C]Y+ ++MY[OGJ$1F6).IB[(SQ3'04+#\9M$F[BU0NPLB,MJ"S[JXY67>#T:AS\(L@/WK ++M09>2R$G#_NDKQ4T_Q"1;V-5FO5*B)\'T<UN?(+'$FZ)4VY!Z"8?5B!>K0)DF ++M!)T_'?#/DC0EO97*4GP*>(Z;IF'_2[TE%,*K`*`;4E).&@S(C/VA;)=C)YMB ++M]:7S1"NEBGAV/??!P89H1^7&J!KU<!HM]PHN>/&M:?$6\@?>B[>)-4UB(A`1 ++M8_'I;?=$%RWPZ>3HNE*VF#1.@S=I2Z/F<(HL_I!5/^#NAMXOMQT!\KW?'ZW; ++M!=2(B)B\O@,L[2[S6&V!(96*7ZF9^:?#68LW'W;WALLV%^H+)C.83+*KC7)? ++MA@*+>D^M:T>9"98U>^S+!+(T=9-^PY!M>32S64:'6H&9_)XK"_0MKSQ:WZ&# ++M*)MS[Z\*RPE%1TUEF-$89K+L[8Y8IZ5F9:M`S%.G\O$V#Z11F)))S#]FC^K0 ++M-AHL]&`NQ@<:^9[V4$^#GV<W53/CP(Q6F0R2*B4M*)F,@9CP-G.%1I^`9(/J ++M(*`_&";1B74!9FN[O_1Q'Z%PT8>+[7C9"?LN0WF+1`[D36QX%-::'Y=/!-;C ++M;#)U'CDD^&O7S#MRC(!G,W.[)756P,F?_]B8;B1!E^I%5>UIM0-J0&M2I'/U ++M_-T>C0.MZ:'=%R!DD#WD#5OZC;`Y)3P/EQ^SH=#6\U";WW3)8!@_$&Q'S]U9 ++MV1]-T;PV%V)C-[OC?7W$5,VM4*C7+WRAJV+:^]9'-6_,H='3G%\=@1G7\MOX ++MK)&M#0*R56&)*]3ZXF_\ANX+SX'$93`KXQ;M;G5B[P5EO=J;"4.U#-HZ+V#> ++M.<S*CJZKC[V>GE)"J0,.=VF?ER:ZB6\%!16)]?P3Z09&*QX2_!]72>.F$0LX ++M<Z4E"55R,AJ-'AK>S<T^X`ZV(PF\$[S4K,K+Y$'Y\T,5,J]W?,CXO3%(EC#` ++M<=L9K#B!>Z;N'S^]V@,_F.Y4,(N!6[>L&0UH,7DSHF'E17/'F%3V56C3RNA; ++MQCD4FL[S+`0\65\S^&HDCNJ<W<IX..GX1(6MY&7F+C"MBU%3QKKU\03[$TI& ++M-63!/Q365GC@D22KB.&^'?:&A,%!FOEM;!I-WS(*.".P^[-[;O3PZUV=_A(_ ++M]OR.053=]H3>`E'&C>,QD;2^9>6+"PLL,S90[Q!KYVFC`-W#ENNL>T@4\PZ4 ++M0A=>$I[I[7LJYL7K`N'NKWE6UA\^TZP2[=.,B';F=X`UR*1(MB"',1:Y@^U] ++M:SR[DA%L6<IJ5F<G'H/.CFS6=8X/SVWR\K`^0&GC;Q"%:G)E*7Z:F/V+]5N/ ++M0ZTZW>/X]=V.#4"^&*,5TPTIUY!"@P5JWWQG_MD6]F6RAVV]J+-FH\6XR'B" ++M*F/M_#4O)$*Y8TI_LT]?2R!*PEXHB2L?&1(4[Q?D5#\G7XB/(KQ'9$8;?KVO ++M-SI]_$;CHTT]'7+];-?;5\-"ND=VQ7=[K5L#'S#N[<'=+P\NI5NES4_?][/T ++MOM$Z6'Y_%,^XRSWYK="?E8Q=&?:EH@1#GS9FE@O8HSJBL;_B+$3?MFC'C-E! ++M]&H*V(I0+91TS25`Z,@,\C>7\`/*Z!KU_0CO'9Q"H'Y$3J"9\?JVP):^JZXN ++M[6K^\BRX9[-L<#I?`P/T=#:7TKK3_/"Y%W\_4R*3\]K+RW<B1DKZ'R#VCWK6 ++MMZ:J7C#-$'C1P.:[4Q;HC^O)U6E8](^>8CU>H;<J4K_M\6ZQ/>K-?)AKI39J ++M;5-]2<6]20\H!7\-K+_IID(5!OQ@0N.Z5&HKJ\@9?@_K-$NG%6CX*F^MMZWV ++ML.UY@_I+.E;KV!)C4R_DDG18H6`RT[RP^P#8I4LW-4P]G[#Z,D7>K%L",R$7 ++M5&AD<R"H77=^1G+=&Y+D)C?W3B7%U4:S4UZNN_'B^A07-1A@_I/<G4;SB(3B ++M]$>AY_@)P&EL1G?UB*K:I18ATSUH%Z/Z]G!(7Q%JQ57T%)]%*P':R1"2:&%/ ++M(^G@UBBAE3"YGT4XQZ2X-&<=E^(%INH@6>+,)TRP!@N$LJE3U'!<BU[[*ATM ++MP3[B[6#BALXA_/J=+5S==&^)PR6[K=HTM,CVZ+M+VU$`Z=WQ]^8G(A3*R&[] ++M)&R)5F09=.@K2/Y^3BL>>,,%-4R\T0"8?$F-4Q;4B/?'PY*?M[)-0XJHH]2L ++MA)K>[RG-1?4;&]B'EHZUCBK.M#OHV,(]HS_W\M.S#\SA:X5%44$UO\4IXU09 ++MALZC!$PT!S:B12$&,>^K(="M9C!"Z<[KY?_:AL_BJ%TT`^VK!-O4:87&5R84 ++M*ZQ6[V59GK_IK+,G#3>Z+:4Z&)S43\Y(;<8?8RW@4:^?^#9).S(,6O>HU2S4 ++M'J<8756ULG`.'/)--\4.SL0FVXD5^5Z;.X.'QV`+2C6:C.<U-IW7W(J+UV(^ ++M6VGT3)L*O*OT/I=5('5)#/CP2HYA-`ONF1EC&M0/FS)9)]?IJ^BQ'/OOA8]V ++M[6='$&/FKYCF^<L8.N-CH\.'W`3*9RG/BU'V:5ZYRS:56KI1VGZF3&DL%T-` ++M?$'51IL,65_$.9XKVOH@CSC`J8&;\^<1H'1+OS5LMF5T[C@%HAOB-A7G3,/# ++M[+/(BW7@B^$G%:=&&^8K_CAM1&`T)QS[8,2NOH9$ZV:2IM[CM-F^<NDW2R0^ ++MZ`8(>>!L>4.1-[W]V(PN7A(R#M=5,)`"?E^L9%>;HSN22[7#X9<..)NIQ`^7 ++M*`AHM-+!6XX6H#JT1<81B%=%^Z"QCRG&OC@1(=.9/4P(2@CE<=<B!TT2K"]S ++M;Y.>)I/3LUXFY.@,8UP$3__!'>51URQ5^ZU&/I5"39\B8D?`?Q'I"):OL;/( ++M()2E6#?I=*"'/YO0"F>GY9K*WT.@,]`L\8>UAY)PSH:K0"/8B9EXT"@?,^/! ++MI$\&>-_.J0UIZM[KFA?%U7D#57Z=2/%B7-DSRY>)&3`(S?Z?+AP$FS0HC/(' ++M]Y%G2LUC[A)R7;[[WR=5GBE?]SSK8Q[YEBQ=D/;OVBUU#:V:KN=9C[0]IWX` ++MC:6-T&WB(J\S%C!NI#<MV<U/#JO/R/&L3N'B[_"L<,<<5MF_]/>:^ZV#-2HS ++M*^8J\O"))!2N@]98LKHS"@?/%]\$Y,.QY=.+B]#4M2ZL;EO',CN/4*;^-N5P ++MJ5<QQM."+H#P<A]3(+9OJ\*T"(VS2XK%%O.]!D_U_)AJ\,47M-()B22(:@@# ++M-(HE4OHZA&>]C>(D5_E/AU;>1XQE-;#$YI%DB`9SOTX\T`4'P*EX727?64AX ++M"^5H@U=*Y%6^N'(S91)%)%$VW<SE=`N45H2'NY&'_;*T(8T&`=7E_^(\RR$W ++M7VMX88(9`Y8\I\ENG_V]?LV<SKO>/QCO2]D)PPD:74S>@D:_J$N(&B\!HE!) ++MMY'&.VK),"R[J\P,+I+G,',65AKI[Y&<1>AE7\B]E8RTX=-]JS5"+]O.?#0+ ++MKU_+EW*!19X+7%,6.J`3(3DQB#9L>V8"`T`Q744UNPW=)*I?^VA&+)`7NI;P ++M]`I&[B5G*,&)UWW?9`-$9N1(1`>>8BX#:JB#1?"7L&_5,>CJZQ]H)6JP9/6+ ++M,%1)I;#+:#(8\,0TDYZ@WW3N!_7N:3-#[E8H"]K']"A;C-V[]I(GHBLPX$B" ++M<+Q_]IGFRC>L6,5DBM%0S;<(-&P@+N>4TYTBFK^!:]/(+UR5B1:+((L?&P/J ++MD+'&R&<5Z#I+R)C*R=]G2P0IUS%^[6/``/=W"8^Q?Y%_9<\K]<9VZ>Z;D'Q' ++M/3&9U`-?IF:F13+\P*K^[O!QL%LR9B)-,7_WJ^OU0IZET!#.\X(,C0T7AUT0 ++M6JPK+E-C%:[,\\JRX7A<0E4L?ZRNGE0F+%FG6\K[*C]G`=B>D7U=7ECXJ2=E ++M!2OXIEI9*_P`CB%OX=5VHA98])FP2-@^Q2%_EZJV!4VM&''_V?>^32RG)L3F ++MF:8"RYX6>00/`V//PX8GML=/MA!$9GE/1[P('<AQ"^&8&<8!C!T(5$3%:/\0 ++M0\,X@#:P67>YJ#",6@U=RX2A@$RWM%A&_N>I.<H$E`)[5DX(FC6%P%4/79`X ++MD4&EB?+`#_<`DB>"FM0]D*;13><]I<N@!,1V36#?<]^A5PF_&]-FE-GTO(6G ++MTG="";:T#_JM>XT5BR^1UV%QJ8BL<!.):.N"2\<3\LQ*4P([&T%T:L5A,T&Z ++M0Z*7EI?07D&9DB=2-,>,2,7TP(Y03H4=9&W"LTZA5+&+2WB(>=L<:-^::7-H ++M&5/.)F,BA^>E.MEW*X8%>6>\Z*S-G?@%8[*H.S8<SE*\\A:[C+\02U;ZV`1* ++M^"S1M2>%CH7+R.`(.4!^P#^W[,V]GX$JCX)H^XLKK0->D17$4B[=;I@7(8I, ++M][65"MXP)7'4YY9'Y_:=;$XS;[D?<BF^1&Z"V-:Z1'\M-:699R!U+<Q#L63" ++MC649SI69F.RH$_,IN287B'Q`,P>/)'RB7/2Q+I?K>]NF/*A9W10TW'-?[1UH ++MI!3"=[:2A6<F+L<L&*A@J`>210I?L=+NY,B&)GI']*=9(CBY^@J87S,@PS_; ++M,U@/D"?N\I'@=4$_C9P_$UV+HI'E*,HT,R.(A<0J^LUZ$)+QKK6R:!=^)LN' ++M_QRFHFVZI2Y5@HR1B?4\PC3(DDM$&J8>!J9CB.XQ/Q6](5GCE/TJR.-.VEI8 ++M3'X>N/5*BYK$KG<86N#CE=EI9.-:&"S=Y2UHD?>HVZZ^/O?3=2@3.JGN;I.Y ++M?!=*3U`<CA_;G<P?,UH-H$.);S]=?2`*5YNLQTNR??::E23QDG-IY>O6)_#* ++M4POS)%R6D0P4".:?^C1\A7BAHV0^ZQ929D'<"N9H%/5B0%\2EFW7J<([,YB3 ++M0WMKK1*_*U3SM82P0R,Z93>HHGC%*&]C\C=I?62M_'UH7C=\C]M\QWPOJ/]X ++MM(06.-S%C=PDL7"@J;FO@M0LW+)1#8GS"B<.MI#T;GGJO?N-@KV98\#B9@=% ++M+TR5U9&`O#WTGA&[=>7**I4^]BT!]7RF(RJV)EHA$>7.&&_LO.Q)"<&<D+;T ++MRB,:,1%XBT#^GB,R@>X+0:BGX$6V8-FS!`ZLS"J$?,7T^T(+"/-LJV!L2"J\ ++M9U%JY0S\@"`YICD[&LS)P$>3(,>UJS+8AHQ'.E\KDQ%J70/"NPZ8RZ!K3T1C ++M,38H`FO0KK8TX`/OQK&T[+"N&%[^&*EC[(>]S!T+G>B"8033J+U?G/C"QC5; ++M5:+2L;UFL^+9K4'!)CI3S8D94+%W%(PB#$H/KFN::(@ENPQG0'=P:+""X[P- ++MD4-;+S$]</A;8UN?.\[^+C"`KU_E3HVX^Y;X1SXX#J4.\;=&&IM?]C0T7;NU ++M:FDUX,"P6XFVYF&LLL@:&1M\#>UC?=II[R#(QA+W>(!>.FB^NG(_\B!%`^]9 ++M=:##`7J?XV?F#&<:7TS]M0/VQ:8!N5H@*57=\.]=NV]"SFO\TOW]C(X.S*#E ++ME^BY/]XQ6;C?\::&O?(%1N>&^2(<TU9+Q5)^9GC2KBFZJ'+HBX%XG1]&CS3N ++M1))>]'X@_/["`\OV2`F7J#!1^[9Y6(_UR+R$C<O05V[/C#%PMBPN4:"1K'=4 ++MWG/3U)LVCL[=8,:T8Y0OH*(?AVE\HB\M>>196Q0)3,]+3&;C^O$XU&=I,F1B ++M48OW4WV%%&>^WGL.2CAO0K'&OM4</X-P%`+HVT@!#(G#4Y)N`2]9[J*GH9V0 ++MBOA+@V6"WR2OG0!)0GUL#L&`4Q^+*.'/!)^-YH#6T^X:%MNWZ&G$>=U-XL)! ++M;MF]#73JLI.FP^UK!1H__*3C@$EMT)\KX:Y$E1$**-G7RM]FX0O-];RKN6#0 ++M_%&W9T1QR,+ET"!?%'@P5*V8V]FQ2$`.96Q!X#4/BRHO;+<I,GBO?7:8<TO> ++MO]KL\;-IZ[B"`V"=0_"H-[P@,2SNMPTX(6?Y(NQ$8FAI3UV&HJXYLSN<2T0$ ++MCA]6W9`<[NZ\P'9C2"%QV;3:N#V2_6X](03XXI<[K4D,M#JN+"2APJ''FQ3O ++MM>[TP<_11;*&'/VATEP;@6]1T??@\M:^^[RFM6$`IAH0^HFU"429'M%:3UX7 ++M8"AU.=%1Q,@(U"2VIQ9`?^PBSHI?S1%E4,,(05I2_+)[VZ"+RR\?_,)MY)MU ++M@SAU&QG!%IHK%;0I;-,]&WEX=.43-_&-3IOIE7,DA/YV;DCE*T`Q9@SZALCW ++M/`!->$J;%@OS0QD(/2D#Q3"!_0??!HS6>*X#K(J:9(,)GV*D8P#7(@AWE3.? ++MQ[,RK5#U%F8Y@7M@Q+Q]X1W%GB9.5)]QYM`.?0XFQ4EZQ>42F.7E-BO<W5'V ++MDF>!+,U>$E!-%1&^!7!UC3?LN][KRMO/]P=+IL+I',%M<5;@@.P!--$BK7[) ++MA._DQT119'*%U4L!<RJ_8IZ[$$5?R'VT?,D=Y-;OH?%+&`\4Z<VXCITLI6)L ++M++G:[D*;3&J1TFZLV@BQA&-=3L:>MS'M%;SG`_QV2%^1-^JE;ZQC-*NIA_G< ++MVW!WN(VXJAYX;TE:"-5W2QFP$TA#0%EF\]?G^KW#[[HJJ`P,G]P#;9$$,5C9 ++M2O+;WAM'<`I()%@4+R"#!E.VVY$W5$OW\?V62Y/O4M#"YKP8\8=K9E)YD.9_ ++MV487?Y]+0$.N&+:B=:4$3#?IHH\_"6BWF4^JC;BNEA`T=P;H,)$3C5JR*DV$ ++MX,&I#ZV%JN07^T-=$=K.EUV#9JR][LG;%.*IA+`F&*7ON0QXR07&I2!'G598 ++M"S[H)E`)*NC\8$3G@A;%2%.^);+;4Q-O5!@+A]\S%$/`C'M9%2D!EHL7F]1S ++M@X?H?D*`31["54F(;2U!>R$-Y"^3/E7.QZ_BO8>A35:ZPT/I.GGW2]K+=8^@ ++M$F=I)1<4@;*<)\TO"L?S%FP:B^FN%L``AO4Z4#`ONE=3/H01$#=PH]>H-?>Z ++M&N8_<\;/#'(HN5"RB@<OH.)4K3"+Q_O91$96YW0H'Z>HE_FSP7\LEGJ_LG$A ++M":+Y?7M9_<6.>>@P2J%U.*6$"A&UKF6@*BQD;2PDLT'J(IYNIC.IBE\).&SW ++MEL5%=Y^7A!B,'U74Z.UC&M3P.W]@C&/0A:)*T-N58@\WS`^H>E0.7._#HI!B ++M<O8$F"*ZX_.O;AG1:I3JI1&&7@:':@I<.X)=,C9<?&?4."ZP=OH@+43;:JD^ ++MTP$"4G>2[PN_@&^>D-;!"I/;=+\K%4OKUP8Q!SA??7-1+%#<@HU6!L-EV8I" ++M;A/\*>]A5`255F_A!Z0@4*WB-=1$I4U$I`0Z>W8MN<A^J'FHD6ZSI4LR?>?U ++M)&5/5B<[<)M.2/R[Q%9@-MBDI+M8W"ASNK/X4MX5L#BUETF?,[4-$USKW(8+ ++M-VT1U7B,BI@SNYPB*\X>1##15!UUT!7G]J8LH'5<##=_,H2@]EY7JLGHMT4- ++M>OI,*/"[2(;$/5V<9#=9(*?M+0V/HUI;=#H]_\)JG6#S+.&1W3=4WK@]9/11 ++M`XF(@;_'C=2+C*X[`5\C&C0GN45++Y&4?%EI!Y:B9%LZJ3883)2>Q>'&S!E4 ++MK2D^MZ9N6P86]8/$]\6D_NV7D-L@_`6!O&DLSVL;-DJ4SI#<YE'R;BFJK[+\ ++MN@>`\[H)1F<SKAW,,N@^3TAYD3`H<2OD1X*:.21EY^C2,IVVXN3:>PCM=``R ++MHZF;PGPH=;B"N%TS=W.-^SMZ'#/^]/E+J>,TA`ER&VZW>"&3ZH^G?,HIW("A ++MR/"?R\2J8-MBEY*$2OYEHWM@"A"7$U]H\)_%25L=RI+[E*M.I#8FDU\D;C3B ++M5.\[DCG?^^=(B'/!+6\A,59[3.I30H:MP[QI+I>.Y;#@Y7$\QT_'=ZZKV8I. ++MU1$J](#<#'>O.R^)J0.<JG\MK+<.@,B-9'=7.(7"W8?TKN/"+4(*[%G1QLJI ++MIRLJC/U&4=`L3]V:1W:G4T;K<0(Q5$.X;_\6/NC.1:]I#T^YQ_FC;N$FUR&L ++MLIRYX<3DER[<CZ%DX$R,\+D&@_7?4NF,P2\*#Y=D9.B%V,,8ZVU>:M!D_):/ ++M4%N_.%]$,Q=@&H`"_2C[CGECN\7U%J4,3\8FHP-B7V^%%9II98F#QGA$P<NH ++M>*"<F3E2O_?C@K7TV<5A])DV\A)?BIR4NL\Z&2LO]>-HRL-_\6J?]["QZ"6K ++M*=.B>>NEFI(@J[^/2N=_"KPH`ORZZ76>(78K@%T[ES;@=K@S`]<N\IG,:VT4 ++MR6Q>_DH^6;1SM'=YY5O6;FBUN-L_TA5?KXHZ<C1JZB3<B4TL/$"PB&7*-;DV ++M"D1?`%NJO1_3MH`[<<]\X'E/=X-K=\*$5B#/#8(O>]!.0S%4&Y6,7%?_<<17 ++M6UDZW$W7F(."-8=&+N1B^J!./74#?KLP$SF>_8M?_YS3F9O:^918DHE_TK0? ++ME"9F(=Q$CZ=*\.*G)0E<BZ(U3@8EAV"A$7:D=/@N>Y]A^DOPF&(TOFRYCV^6 ++M29-#*&7S1MB45MN3FS?GH!T0YTP,5IZ:>S4(R%4>VJFWB736$[!F`>N(Q(6N ++M<:J=AYLFB)[A)5"&@_NW:*"C%CNK+`H63J%?%&51#=T=,25))(TTJSEH81\< ++MI%HE5G!@;NWAA&(O]N"$>(*BW1>,B/MKC,A,\-E&WB0TY=@"%3BPI_5,P7)/ ++M<U^7SWXHX%:%'K9$_Y8*:D%4^>JV`/$+O>'I2ABIL]6",VI+"0&HQ6_'*R^* ++MC^Y;_/$3#<P:L!FCY,S<"\G"C6>KQ+VL-+Z9/\")6M[B*C++-V'0+-<R(:]N ++M(H_Z)?OL"YR]?V-<1YAB22A4`U<\L>)^E?-FD?4S_4`;-79?6FD\JA\@4)H, ++MY!2DE0!BUW>V>T.LS2&U](DM5U-TO+<N)-UJ0;#`+Y9<9GYQ^V&@Y;7`T^&> ++M:>)6QUIZ?&#X?$:@[XU:,HF/B]K>.1`4)PO]?%0M>0_,6YGBF0A6P83GT(>F ++M!@5]FQ]J^XDJN3N&:ET;12]<W+:0AH4R22MA=(-[YP)Y+^_R6.#V5H7&SY8) ++MZX>DDQ?V>`L]W#)5,,H:JHD)/PJ/UF\*V=HT#]";FOUGH_HCOVA-_%%(:Y.? ++M#$Z_`AQ$KGZ'[4RYB%F^J6UD('\QQ250!PQ%06OI70=B\H)R[-70_S_\@OG_ ++M-_C_Q`:&E@!]>T<;*WU["YC_`U-(O]YE;F1S=')E86T*96YD;V)J"C$X(#`@ ++M;V)J(#P\"B]4>7!E("]&;VYT"B]3=6)T>7!E("]4>7!E,0HO16YC;V1I;F<@ ++M.3D@,"!2"B]&:7)S=$-H87(@,3$*+TQA<W1#:&%R(#$R,PHO5VED=&AS(#$P ++M,"`P(%(*+T)A<V5&;VYT("]:3T=)1D4K0TU2,3`*+T9O;G1$97-C<FEP=&]R ++M(#$V(#`@4@H^/B!E;F1O8FH*,38@,"!O8FH@/#P*+T%S8V5N="`V.30*+T-A ++M<$AE:6=H="`V.#,*+T1E<V-E;G0@+3$Y-`HO1F]N=$YA;64@+UI/1TE&12M# ++M35(Q,`HO271A;&EC06YG;&4@,`HO4W1E;58@-CD*+UA(96EG:'0@-#,Q"B]& ++M;VYT0D)O>"!;+3(U,2`M,C4P(#$P,#D@.38Y70HO1FQA9W,@-`HO0VAA<E-E ++M="`H+V9F+V9I+V9L+V9F:2]Q=6]T961B;')I9VAT+W!E<F-E;G0O<75O=&5R ++M:6=H="]P87)E;FQE9G0O<&%R96YR:6=H="]A<W1E<FES:R]P;'5S+V-O;6UA ++M+VAY<&AE;B]P97)I;V0O<VQA<V@O>F5R;R]O;F4O='=O+W1H<F5E+V9O=7(O ++M9FEV92]S:7@O<V5V96XO96EG:'0O;FEN92]C;VQO;B]S96UI8V]L;VXO<75E ++M<W1I;VXO02]"+T,O1"]%+T8O1R](+TDO2B]++TPO32].+T\O4"]2+U,O5"]5 ++M+U8O5R]8+UDO8G)A8VME=&QE9G0O<75O=&5D8FQL969T+V)R86-K971R:6=H ++M="]A+V(O8R]D+V4O9B]G+V@O:2]J+VLO;"]M+VXO;R]P+W$O<B]S+W0O=2]V ++M+W<O>"]Y+WHO96YD87-H*0HO1F]N=$9I;&4@,3<@,"!2"CX^(&5N9&]B:@HQ ++M,#`@,"!O8FH*6S4X,R`U-38@-34V(#@S,R`P(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@,"`P(#`@,"`P(#`@,"`P(#4P,"`P(#`@.#,S(#`@,C<X(#,X.2`S.#D@ ++M-3`P(#<W."`R-S@@,S,S(#(W."`U,#`@-3`P(#4P,"`U,#`@-3`P(#4P,"`U ++M,#`@-3`P(#4P,"`U,#`@-3`P(#(W."`R-S@@,"`P(#`@-#<R(#`@-S4P(#<P ++M."`W,C(@-S8T(#8X,2`V-3,@-S@U(#<U,"`S-C$@-3$T(#<W."`V,C4@.3$W ++M(#<U,"`W-S@@-C@Q(#`@-S,V(#4U-B`W,C(@-S4P(#<U,"`Q,#(X(#<U,"`W ++M-3`@,"`R-S@@-3`P(#(W."`P(#`@,"`U,#`@-34V(#0T-"`U-38@-#0T(#,P ++M-B`U,#`@-34V(#(W."`S,#8@-3(X(#(W."`X,S,@-34V(#4P,"`U-38@-3(X ++M(#,Y,B`S.30@,S@Y(#4U-B`U,C@@-S(R(#4R."`U,C@@-#0T(#4P,"!="F5N ++M9&]B:@HY.2`P(&]B:B`\/`HO5'EP92`O16YC;V1I;F<*+T1I9F9E<F5N8V5S ++M(%L@,"`O+FYO=&1E9B`Q,2]F9B]F:2]F;"]F9FD@,34O+FYO=&1E9B`S-"]Q ++M=6]T961B;')I9VAT(#,U+RYN;W1D968@,S<O<&5R8V5N="`S."\N;F]T9&5F ++M(#,Y+W%U;W1E<FEG:'0O<&%R96YL969T+W!A<F5N<FEG:'0O87-T97)I<VLO ++M<&QU<R]C;VUM82]H>7!H96XO<&5R:6]D+W-L87-H+WIE<F\O;VYE+W1W;R]T ++M:')E92]F;W5R+V9I=F4O<VEX+W-E=F5N+V5I9VAT+VYI;F4O8V]L;VXO<V5M ++M:6-O;&]N(#8P+RYN;W1D968@-C,O<75E<W1I;VX@-C0O+FYO=&1E9B`V-2]! ++M+T(O0R]$+T4O1B]'+T@O22]*+TLO3"]-+TXO3R]0(#@Q+RYN;W1D968@.#(O ++M4B]3+U0O52]6+U<O6"]9(#DP+RYN;W1D968@.3$O8G)A8VME=&QE9G0O<75O ++M=&5D8FQL969T+V)R86-K971R:6=H="`Y-"\N;F]T9&5F(#DW+V$O8B]C+V0O ++M92]F+V<O:"]I+VHO:R]L+VTO;B]O+W`O<2]R+W,O="]U+W8O=R]X+WDO>B]E ++M;F1A<V@@,3(T+RYN;W1D969="CX^(&5N9&]B:@HQ-"`P(&]B:B`\/`HO3&5N ++M9W1H,2`Q-3,X"B],96YG=&@R(#@W-CD*+TQE;F=T:#,@-3,R"B],96YG=&@@ ++M.38V-R`@("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KM ++ME5587-NRJ/$@P=T;A^`T[N[N!)?&H7%W#02'$"2XNUL@6(*3!'=W".[.Z;7V ++MV2LY^SS>^W2_V_W2?\V:5?^L,>9H&@I5#68Q"[`92!KLZ,;,SL+.#Y!0$M=E ++MYP"PL[`AT]!(N(!,W6S`CI*F;B!^`#L?'SM`S-T*P,$&8.?F!W+R<W$BTP`D ++MP$[>+C96UFX`>@F&OY)X`&(.(!<;<U-'@)*IFS7(`5+#W-0>H`$VMP&Y>;,` ++MQ.SM`>I_W>$*4`>Y@EP\0!8LR.SL``L;<S>`&<C*QA&9]2\C.4=+,(#G7V$+ ++M=Z=_7_(`N;A"I`#T$$D&`$31`NQH[PVP`%DBLRJ#(;U`$)/_&U+_65S:W=Y> ++MV=3AK_)_3^E_73=UL+'W_N\,L(.3NQO(!:`$M@"Y./YGJ@[H7W+B8/O_U4;. ++MS=3>QES,T<H>!&#[5\C&5=K&"V2A:N-F;@VP-+5W!?T=!SE:_*<"9&Q_"["J ++MO!57T))C_._U_/NBJJF-HYNFM],_9?_*_IO9?S-D.BXV7@!]-A8V-G9((N3[ ++M[U^&_]%,RM$<;&'C"-D07-P`4Q<74V]DR,Z`$!?`EQU@XV@!\@*`O"#&K"R. ++M8#?(+0#(2/P!EF`7Y+^6$[+BK)9_Q_Y&(!^`U=D=#)G9WZ/Y=YB3"\!J[>UD ++M#7+\'>(&L#I!TL`6OT.0F\&.H'^8BPW`ZN8)_LV07F[6+J`_,C@@W<'N+K\# ++M0$C`QN./#$X`JRMD%/\PQ,05Y/&'".2Q64'_PY8;DB/VFR#7Q7\3#X!5XC?Q ++M`E@E?Q/$7^H?XH&XR?XFB)C<;X)8R?\F2#^%WP2IHO(/\4)FH/J;(#75?Q.D ++MIL9O@M34_$V0FEJ_"6*M\P]!WB-6T]\$>0:SWP3I;OX/L;-!VEO\@9`5`/V! ++M?XW_#X3X6/V!$"'K/Q!B9/,'0B3L_D"(A?T?"-%P^(WL$`W'/Q"B`?X#(1I. ++M?R!$P_D/A&BX_(%_;8`_$+*Z;G\@Q,K]#X18>?R!$"O/WP@Y0EF]_D"(E??? ++M^+]?9W%QL)<O,V1W,G-`=C%$D0^RZFS^_S-1R]'&V1TD)PG9^&QL/)#=]%?4 ++MW-W%!>3H]O?Y"3DJ_LV6-I"#!03R`IDCS\^`S07";#\V1Y0%2!6,E<._@1:W ++M:DE0;NB>_((2.I<(;5\\K.#\9J5>][XB`QMM!WZ'W/.1V#6ZPT_MN_1)L'-" ++MVO3SCH?)3H9/&['N>8:2][83Y4WH+_3VYJG+0RYHE8F5D;(4O<*^K-/^7WFJ ++M])*:NZ^6**!Z]#T:>S+#N'ETI3/LM2+#ZVF!%.H8:<YE[S@CESTQ4I+@EG^& ++M!MA&(K8R+IZ!.]RQ[@L0<Y.?C6$MOFN;W"@<IWJC;KZ]3QB]P:H+,BR-WG3/ ++M54K7BZMZ---?(O_$KF]_'I,Y17?!Y&:07MWIM%`]E5WX]DX%D9"S7"9*G@?5 ++M)OKSET(*+:BZA!K:P)\MR_D=UB9OE:_)1@MF2*P59%Z:WOD('*TU3J+%?>X" ++MI+VF8J<E^(560Y_)0/TB#U0(GX^?"9=ZJFH,3"=S3:A#V[.5+JIY9]F-0:E* ++M/;T=P2RWTC1W./)A7CRT#YE;R+HPP5E2&^-4<-,$20HSVJZ[H5PJ&4,9<E3V ++MQ\C+W"+-!BB>^W('7S=?5,K%27$3WZV1UVC176V.>J.RA5DI"-,R@(5A.8@- ++MM`RI=76BHW:9V2T+^F9%&RKJZ'Z*OV9WN-.)%,I5/%VD*>%R*UQA46$V5(Y# ++MD4#0_!G(242\*$SKV9/BH5REVQ=^F7V&*/$,@YZS.@\5:XFZC9(YFU_JDM[! ++MGFTY&XQ!W*:]B2"1EYD\F!I`M.6<PX;RK&MY.K-@U&>$3T0]V?+JI(!F*E"& ++MQV(_<[`.(S;8X+RRZMY>VGR/+=S02G`_NB7>."0G,)^V0N?45]A?V6\3;;+E ++M%RH;5Q].;.G\/:<L)\Y3Z>92MKU,MO!Q!F:N9N`0HG&A.='XIWWN-;TX]H^` ++MP))V1ZV?TR<NU3W,&:GNU"0^SNQV+#BQ&WFNC-QT&-F%TB,<:.T;NR'!WT^C ++MT%A<FIVQN<(#R:B`?NZ[#$YDR=.=W>:OEP*5/[@`#Y'N\+>'G00#DL-PT]!< ++MPT3Z3;/6\`=E^!V(&;=QF'_EA[?%YXT:64Q4M07OR#`XAX6IY4LM7Y<+A-#L ++M5\9)L]6^<,QX'])55H7W\RD7WV!0-9L<OQ-Z;V7-L_^K<(NQ]`(DP9^`3OJU ++M['0OFA9(3D"T2C`2=UU,_$KI7<G4V/S7JWD'@'Q=4@R=`5FJ9/J,M0#;NQPN ++M])P9:0;<N&;F#&DFQ$)]KZ.*D.I.A'`<LDM>I+@W,>PQ\=[$!+?G]G%8YECJ ++M+TI;/@]:B8^V#!D-/-Q`KW,U'_4OJ_+[0#JWAS=[?14B*>W6>#![=4V*U#?@ ++MAW:GW+)S/PM<A0WYJAJ3`^K1IW`?-_K.Q;2^F,EZ+^.`=:O4]^N/T\V-Q"%2 ++MIT>)`R)2X*DW5!].#_J<Q_&>LH0+UZ'H7E%E>U:LO5&?ZF@8/IT`*H;PQC ++MEZ59PMLQC50'?K/^V(_,6D3ZB(DW6%0^;WX9Y!>%P&3F0APS<N"%[J$$!=`S ++M[FQ,5JL\0N^$A_7&$6&IP^HT68Y*1P@WF#?Y$6ZPM^-PY&*RM%472+F4E<LY ++M&K@O%VH'F\QN1ZZ'O&_&C[E"ZBI!['3W8<4#W9"VPZZMK2WXNKN%481$*S89 ++MX^T'\X*E]9]WM-+%P`SE1,DZ-T4.=(36-7G;T9S00/@@[/C%D#C/YJK1QA!# ++M^DZ!-V/W<W6'DH?CY5AWVS>ENT,Q%X^+*F6&$[T@.M30\F*0%?.B[:('"^/L ++M-7K$B5!KMOVC!-7R,&8W%BU>\1-3L)S0.]W%+[MRT8C,1W;PCB)9;'5-+>:? ++M^NL2+%=,\J&2S>763!,+<@+CGM6)@7$5/!L1,'MY?,[5K@N54?GW2Z%R9AB6 ++M0*"%;DU"()7[<1+/+/W7E')J$CS61'"=1)PZTZ/?[)?C,M*+O#*0=;Z(4H`@ ++M+9P?-8M(,'@XW`[Q*B>RE-7ZIJ47:_SEEQ?/QHR7"C>-.];$0/XB@OCPM+DM ++M#+*],0EP]A:.Z<<W2^'#0E<HH:[*'2KK3>6`6?AUS[W&"!ZK1,XD4M#%&JT4 ++M42%'ZJ52<)N>K4>4BPOL^3LG&W^Z]L$%WE\XU::Z'?TT96<EQ1Y-'*>MMR=' ++MF+=KM23V%\/#[$/X!JWX`E:J"S8#3BDB;EZOY)7?9Z+<1%"HL'#QFKE"O38Y ++MT!V-"QLB_X14=,QP=.;%B&G.;OU1P.,(EB=<DT;&"=ZT:<U5X=W;6?5D)B`I ++M'E4\:_5QSD:FZN:D9JLNK^!.5G3$8>8'('-]T8NRK6'5_D>HM`E1Z$CQHU;3 ++MJTFNN.V'3ZCPM9>*5]T?H?DT_'=)C9!J-6F<?(YJ@MZ@ZS&^,,>+C[!1P.U: ++M7CZRZ(H6HJ7%E;Q[XFD\B/=C&92(QL94H<HJH)D?V<^1.=YH`]Q=F>K?W:$1 ++MO4[4*'X<=)<>I..A6J%*BEIMN2#S]%3`?J#`2N>HN*26HJ9*@A/PI73PC3B$ ++M;<M3("KS/`L)]<YQ43X[I']SDC(M6%,_ZH48#-Z\--)<D+HB13Z@4S+S571T ++MVGJ/Z'W0)J]E_,`N;G3>([KFKZ>VBT*PI^*YC(7QI?<)U94'R%7SY%C_\R)6 ++M8"NDPDP'N\J^6`!4X+XLDKO8QEKI:]ZCEDLVE*^MD"&1$AD'$_-)O8;%%73; ++MX4&)(8:XHD3=,B,1:>M[VTA79`J5`T/KU%[/M<O>F`O;]\&W?X@J3];V6LT0 ++M7/%%-\M>5Q?,=``-,_UK9PX[!C]MB?L*UN`J^+4JO=/"K]FL\Q"_3%BOB$`$ ++MDU:MDX/I<KXLLO44,-WH).987R;.S=L^0K'6,LFD[_&8(^M+?.L5E=)]8G[. ++M1]N(/$$_(GI'^\/LUV>2VLNG49ZR60O6;<U3SUQK5JB$196%)H!22BY(PJ4& ++MCR)W\>@2UA<M[EER%I\_OB2A^5H$W\FJ5BF0J"`H>L#1#AX<<0H9JYB?>!S( ++M1L'86;[A$/&>_22Y/--";RJZ,D<[7(^"[H(6I7R%49IWG\[A$HI5R`$"(GS. ++M_-FIU_+&!<@\MGD-AG4SEH+=[UW":K1GU&M3'4F4&T(.$_NL]7%S31;!@C7" ++M3#S=<[531`R=S.E`26E^UN@@HA@!A>HIZQ=0?JM:$(!R_Y4>MZ"XY[C:)%$\ ++MY0[,Y_V8*$1<\'JQZL/K8O+V)/TSH]7,4'2R]S_6;@V#?A"RL1U#XZZ+@="[ ++M***TT!MOS_*?LU,O)]L"]3QKM][/19;R$-`QHY-&=%\IR:;K2-:\<,QUP<JU ++M>?QL-IX)&".^KQ7<_AGA\U`ITJY"I3O9Z55$Z&71$;M\P01J1WA)NS-)KJR@ ++M41`S8MUJ,7*9..:\(T^\Q,X3P#DDHZ_^9DN+?245$XP;^`Z-RJ4H'R8#D19W ++M/:`I"TC8(^./G$J@7?M^JBL8MEM0B5.YY=(L1?<NA]%@7P@Z%.:Q?S%6(L,H ++M_T+<R7"FRM`U`>K[&]!P:N0CLHJ\HO8%WWG'269=_>QT_ILH=PM=J.)T9I[& ++M*<G4P.(F,9YY*)U)>;)5!#&B5W5""J6+=,&C=/C"#*1(/-L+HD9%R6!ZJ-OE ++MXAJI`5[_FD*1O&KM1?*'P/6\AU=LVK[2`O=O$91;LX'Z`>95LF$%K!X-+3R6 ++ME#+:K+#YO,S0.A9?=$8^W<JOT2&%#D4LZ*E[%AD_`07193`83.L;'!1R2+PI ++M6QO2>:]GB,:[\BLCP7$-+,'@T-L4>O4WG7.VRE!>Q!+S2(84;TM1%",>C5)/ ++M"-M%OS_6<8<$2*X*)?:01Z*YLYU)WO)6_DJ+OU5:5?+E?(8M<Z7BF+<GT;F. ++M+CH0!;.UO!!Q)L<5^;!(TS^++""5'XT)[>]3Z]^_XZ`9XQQXX:^$I7_`VJ_G ++M<R9/PZR-,-3#IJ0\,SB_+INPJ!2?/@M/2#DHP:^W[#+%I2YQBMJ7D=9S%,"] ++MD)>6@0D8_7+#'>$ZF_;JX//Z2,'I=*_DEM&(X*P\;R=!Z5@L%2'"(9)0"%!5 ++MNF>:TEL>3I,`>4+T4EXQ>5RX'24)U3ZQY7M'^$C8>[2/%?<M_,BXW938[2?B ++M'SF&F]/6D3WOL_U=C<%[M/OX)K>3%_>Q,^**FN-M98W*`V:],28VWVTQ[+GC ++M^`-?9,^'K%WH^N33X#/N?HVAER/U.SOD!<!WV=S_L(@K3,T5?0D2S1JE-)]` ++M0;X,$ID-"HS_.H^?3ND!4O2G8K;!*^U0%%A4X/^^?MAZD+=DKKO,.5<=A--[ ++M$]VB:<,]XC-F9O=I!.=FV$.H%0]'.9[)ITHL/<B)V'GCTH5*=]J@,!G.%>97 ++MX:)O0K<+$L(FI_SGPA(IO9T\/MB@4*7ILIOQM^]<)<@B1-"+?TJ7>M2.U%$1 ++MY7U]M="WL$/\X?8=@B<J?0!<AN*IZQ0+WPE_CH&NQ]HZ^T)H-TLJ[2_XO-N] ++ME67T2'#"<S+9:5*);WU_=S.-0%8Y;]N2,@:G^4(/%_$%,3$*GDJ#?4%3HE*F ++M5S3L)`(?M-`-GK2[1()-`PW13VT2&BD/#!=;Z&<Z6@MXBBTJ\1^Y&O4)LW%, ++MFSI(>W;RQ^:!(>^@+N\WXE;X6ZYLTCZU=HIFI0OX5Q<<F:NES6E^YAS2\L.R ++M+1@-&T^6_V2#=I.VA$AQ,W8CKGYJ=H2HW,N]P9=@(I=FS`EHB7WF)%LKR,Z6 ++M1T(3?59&QO944;XHOJ)"J!#(+S\3'.J0N88=[)M(.<#^6D&YJ.TD7T"HL-7D ++M+'[@X*XS6?V=_;XTRSE<-GI"Y3/VW,S'3>S.6MYA944/M?609;JO+N^KMLYT ++MO5+<",3"Q#$[\P/P^61-!`?J\?%BS;YN5]!YWD7DKC2W#YIY85OQ#1P<A[*L ++M%+`,\M6=ZR"E>1WVFHCBKVOATQUX71;*F>C8^<?./GX=RS%]!"+`-YG:P^#% ++MU5$</4S)`S/5C.DU4FN(EQP`V\DB%(_32--%W$PUBT.U--!%M#?%%O`GFU;1 ++MB#A^[`D_<ZB5F6CO3/-Q$T2Z7410`ZL:7;TGA(%=+4N8Y%[TM.2E>!&%%<ZY ++M/HYS:6_?G_!(T_I=1Q)M(O`.U0E9!)QU30<*(Y'BC4WU`F\++$YM/"5S-24\ ++M?PC0R.C4&%K<H+HX@+\PT6G4)"7,:CZ?W^!T%6/&/"9@9W_JCU^AWC1LVCCE ++MLJ5K<HY@AV9IY6`".&JD-X]BU(?-$99V*CWL]Y1EEPN0FD`!\4K*>4OWLPTN ++MDL-5B.RPU7I+!W-7ZTZU0AG[-'VS23CI)8K%UI(UUG^@13I(%OIH-+)*H_Y, ++M11;<0&X1F#Q+M"0;[91<VR2KP#'M1B^!;W5A(CT/*/LY,F7Y/"8T\[V!48U] ++M+"OMH0)ET8]4Z:Q_>)8$>;$4CK_1]0'O&DW&`-$(3_F=H.^O$^=>R\<Z"_'] ++MLY9EQX/4-7F_"C^!$V<1J+&OK]O#J("Y$4+R'T8*/L)LOW]8K;AS'-/R:,9. ++M'I-NL:H7K237I_'I!W.:UC9OH`0A6XR`M8QP0JAM^VSXMA,VI;DTR-91V,/Z ++MT>@5KT1VG0CSY+22DQ?7^4?Y!TL2>L&?Z0\9=N(D,5QUF;5$7C&G,])Y-KBF ++M^@UP&>_EI]T:\?:O9DSQLI`@4U'>??Z"-*!^9%>Z*0C;G;UL[,&\1WJ+"H(6 ++M2BJDY"D?(U;0%0E^PO_(PY\M$?9F@4NN=JC-#*O6V+V\1?"UAOXF+HUMR:F& ++MY(LT=FP`EIS#V\%FGSB3*IO\@9#:7E&BDTZLUD&C5CT#F'!65DYR#'-5HOB= ++MU6//Q>,O&/5JA4L$@D-HNONTQ]\NRO->>S**ES(,8'SI6KR9XM^_YJHJ,L5/ ++M'HD\Q_\&5D_FZ4=_?O=$B"@\',+&"\\3=MWF0:_&*ZY^,_D9*^O4\\A&H04/ ++MEP`5^6V\,(,S:]0*F!3FNZD/]9EGLQX[]U!8/EV:]JFP>8*6+;FV`K%_U-0+ ++M`\Q.7]^;=ULM#@.:TDL'T&[M`Z$.Z_WE[\>(1:QRB^YXO^^L"I$J+.IY`/$P ++M(VJT.[`YH[@7!M+MNIS6H0A560O>3U!U!)C?9;9WH)'E/71W$77H98E!R1%G ++M,#WC[<G!-$BN6?I,'5VT"";J/!YZII$*!6$?>[T:]@O_Q*S$`Z<AI`4UP^K( ++M)1PBT+W3?/::@/&=]O%=TJ`*3'O*>)'@XHT_:1ITO[$#0GE/+?X<<N?Q`BTP ++M!.1E8OI90ITKY4O`D+EU*Y]L,Z9_\4):5.#F>)!Q2*O4UD:>`)ZI$.+3]SI1 ++MU8*^D.U7X(4B848>T`2G,Y^MM2JWAJ^(WOZ'8USNK:IXV8+39H(^D!9<&ZG= ++M+J*)@'TSQE)HB-QIH7(SM?E#8O/[`7;_$G-\*DLI"4;[+%TYKZVU.#U0"_TT ++M&T?UU^-Y[&DY]#ZG(\,RJU\A>&S'E#XVLBOR_=GR\"B@]I.OECT8#:\:GPS& ++M<Q.`W9WSDY0<2^5UY+6BU7<!M>8J`K890P8'2\FZS302%"NV1*UFLW:>6ER7 ++MLVKADKLD%6]_G$,KZ/U:R)\HP$OYII4Z.BO3U65"NU@W24]!0'>L^3H8?VY\ ++M\N";2R(N,X$W8X`"O"9:6>Z&K-7Q#*(R5UF,N9P]BNRLVXNEI73:F\2TAW,2 ++MP9Y>Y'JQ<K%OZT@<=#IB00B@N<IO%:*D:3E\-!D\!.7OR5*>Q2N.Y3@"^(O3 ++MZNF!CS1\[9N?,O0GOO>AJ%*<^;M8>5@W%"?HT3N'OJ56M"$=9ZYB'W*JT%UW ++M8,=G4"1R(JY\43#+F#RI'-8JU?DJ42(3*4:UHQ=3/.L2[\\R<?5N"7L#\!%I ++MW3C^ARH@A[UO]ZG]Y&=81TCTEZ;%6!2V4?(LPU9A^N3A%:5[Z&R]9,(,(5%Q ++M>[[-+=8</+&F<W>A8?5,)!1YSTBFN_KAB1%.F:A13[ND]]C80DX!(KB.[&)@ ++M^JNXREJH6>J:E+C8@%3?6P0\%1ERL\ED.NOW)(J\AH7!N3:=5O)[\K@H/ZTM ++M>N2H&+XLE.+EB6S54Z$?FC5H56M8OAW&(Q)\>!XY%1J__)6#8$$F_JL1_WV. ++M/[XN\N#4'%L]:9H*%/F18K_J]*;]O;%7DSR<>M0L^?1NPP;`C;+4TJY@7FK_ ++M<968FV[86;`"ZV*3`F0RK^<[WIF]R%?&MDU1L<"?'GS'G=:2HC!=,@JO.@UE ++M`2QV\EB+H6Y6K*>2@;N2+RX`4%##!30GE11(/2]9=F4C]>$X[%Q8'SP`VYGZ ++MM@*'+3N?";9%Q*5P<;2]DEU1(M(^#YE3*R45OX4:3EA#:7TUB9XGA2%,-"'W ++M_.8RG>&8D#0(\]4SL\.E1<P(+:-4:`XO/T',.)HE7,&.B(PZGZ-O';T-6%G% ++MJ!8?.X;N_J)XN-/&_;0<OI5&/=F]R758EOGG2QU+C:3&^H>".'7'CYC&B=38 ++M+L8<NTA8C:O@4B@LS-1-<4NWSPZL$8*@7;,8.@TS7=_#X%+)&[^)`"I=;4,A ++M"CXGVU4\+6N%=9T$6^2T!-27JQN.]M@V<%(=(\O2-:E[\(3])].0*',J,\+I ++MH5<G3*\2'N0F"3#RD.?O.JHXQ9.19AJG;T4-*3/Y=&,O>8Q\3TPELOP)A2LV ++MA@UB^&=C54J;9*GT'6#?JC,4=>P-)/O@JIQ6INM;;[@F)Y_;H[X6AJMG;T^I ++M-K6PS.^^//(F]+J,S3*PVE*5M3/K.;_)55Q&23Q_/'C*#WF'G5S9.,LRQJ"J ++MFD&9E,#^)I?;U[ZFT+,X&!LO,;Y9Z_XD5P:.<3-(.A64LPS0R)%_>'ZHU9?^ ++M,GZCGXS$6O,L'5`;-D;1R7:EK?-+P6%!/K"7&WI6OZN[5`Q^3DT(6[GS2=>2 ++MH`.CQS9U>*ZKJ)5N5]Q-/39[+F0/&D/D_7>3$2[\W!@+RT+]Y,^96>ZV\_B* ++M!"(]J).C%*JDO<0].9'B'1K6UF+)U$/`G?)VPSI2G0R7R(;LH.:#CQRKUKOH ++M86CLQ#'NY!=/_3[?L0W]TXB?&&SREF$:KU/O/JH.I4&GB)O2#2VQGK-OS3!X ++M*?/JAZ5/Y!N(W-?`.*B8:=P2*IY(V>+>1(,M"Y&8G(/U;HI(V('(N'O%$BY5 ++MT#%/^<<F.51.<?/Q6PB\N&P<X=NIU_A9[??\/!ZMN2%'K(C!7W#):@T)&B43 ++M@Z2^XT>=\-U;C6SH9)2=E)F)_,Q`8&[\($R[Y<W?`T6(\1H?O+*WUML3XX9Z ++M9&VY68Y!Q=<O,N03,L\<+N53(<W4?M4MBHHS4=&1O<;!1"6_!:15:G@Q]((# ++MDA!))NTA?&$G*!*A0Q!T8PU\&+J-]42FMR;Q<>*R>:CR06,%0UN\HW3'@)LV ++M4GZ3$Z,M:4BNO\RW]<9HL</I2R$7R:(A4D=IH9YQ88[:@5=,T%<#?P!LHW_W ++M1IC:=FCN+19_,/8HSRG<`=1N3T#LL"Q)(!-B-L_2,2%'\%E.8,RL\,]^U';T ++M22'RW/`"I+8P">U$^/ON"A5-(T;__#BB,KQZ*J.ZZ>$F:X$Z3A)$+?A6A4R5 ++M-2>8U,G>2IK;U$I28=.,!]>"GVQ(I[0_@=`9Y;N8`R%&#Y<1D8F*B%+JT2\; ++MX3X%B3?"AZ3V3R%>5]8X8GK=E%-$"3&*BD&X:=JNBO?G.9E/6?!;'5^Q!SQ[ ++M@55FQ<RA/3A'02B,BRHSO2%$H:;=F*<V93O-1E"Y?3<3RKSR#5>8U;H4_+O? ++MJNJG!.S0*NKUOVTF$>63%(_+,QR>LQL/^3(^90M@D(P>0IF/J3>&^CWBB?G> ++MI252O6HKA:-3\#3F1Q/,)E@DXJQQL;Z?#6WL,I`;.!SE1X)-+(V*&C\DZJ.8 ++M34[96^R_+#431L\2]'XCZMIDA#XHWN+.I-?ZI3Q,$OE#*(!2YR3F/KR>(WMB ++MAU5&W[OS<Q0[&Y03/#+L%"(P,(R\1-K]J#G?)UA794>;J(QC%\4FSI\PG4_J ++MJKN!&(U,FY/$8\36757U*SVHPJHQLZSE.1%9:%,C/GB^#*&G4[+EXS;1SF%? ++M?R3&A^02X1[RDK=;`BS'GUZ5T3SZYEEN@^^D.F"Y(^K5"VV36BV9HO)C6>SY ++M/L@W.O`+<C,9LY3.GFGHA<?$+2<ANM%WTG^\G\8?4SX:L+<`*OG<8DC,X-^J ++M:>AVLJI8A%F5F;3=ZL#>`9L=94L&^@DX!QGX+(],UT2A,IRS+#]SLD3A+\-W ++MX-1^PXD\]?OF(5(N-%=:$RP/$-P'/`X=4/@)K0^BJ).0#:'CH2S7^6H<)1<' ++M(G2&?SAPO]@N,KC..B:6]FY5-K%EN(M-7D5CD=X"^[Y[#_;VVEGUR"C=VR&T ++M]C<PK/N<'KKL1E_.!D^*8GU=1F'5)\6IY=,BQC&`AD)HR=5*15+0#:I_%4B_ ++MV:GWJ1KS)L4G+Q;/A"3Z^C7T9P=P-*D*'>(3:185S!-&Y3<>'@0G9K46\J!7 ++M_8ALEDXT2-2M`Z@2F1N1LB2$E`Q>>=;[K1C82_(LT9C&N+!>UM2$WP-?OA)P ++MR-%.,<]Q%LE%Q+E7'EGJS:Q:9H`MN^!6%"FYOTP6'E41(Y3T_UK,G-?K%.TF ++M1R\GNC%A:%CSP$B$7WO^;.B)B@C51%KX&F<#-?:8Y==)`NL"3#%&KIE=KJL^ ++MP\A(G!^*+M@>6:,P5^TG<'%NGEICMK6O/M\U?C%N;/!9(HL9O,H!_WG-J/!+ ++M==S2*(INMBT[0.$;WM>W'YKU=L>XL7LBV]\-O\$I-\*#)0^:H?SXO1*J\&9Z ++M;/MGL970P^N5CNN9D(Y4A&"#RE93`:-1->E>$>`)^:)")D*;)B%0U;9=V^FP ++MU[-6=";4T%?342UI=&N(Y6"0SR-DUU^&%RK>V;[N+$K7!S`J&PT_1N5N((7& ++MJV.:.M[EC>](?;2%I\2YUI2"4O@4;YUFW660-1\XD*<O-PR([L(IX+@E43?& ++M!,H:=S7CKA0[KI1NJ9W\F!O[2M"]]M.+#'>K'*]8*2@TW&6;P"K\V["(RVMM ++M)9RWHVA^E:;:C-/R5T7<-B2%*#PXJLVI/?6O/0/VBI7Z4,:OR7*3!3IE6;>. ++MWLZ=OMVHM))\]44@'EP8$NK1A:RS9F8G"PT*=A1.NRSL"<O[MG@[3KZS@\P3 ++M-8?V3(LWA3T._8:4X*R_:7L1CM9B!HX7_Z/;1>:IT_+%CP\)I=?O9]QUS#&( ++MA(9>RUJI$2EQ>B(5^_'87)R3NZ+V2(0.NI^1F-@1(MT_&BM)5><5YZD<P01O ++M2(9L?\NXCW_]_73]I66=U<=OV`H?((-\FF$BVJEP*B^N?NBMX<VHI,$:;;WF ++MIH'*7UZ!C49:8OYF!'>J(<7V%2T]4:FPX30/>Y'.$^R>AY?/O3%/I[C,FMX= ++M_2WI4#ZJETKUUG%YL09EF`MNL#UN&]J0V6%_<M9L-!<YK0[GO7&;D)'QP3X^ ++M+KD*"%YBRTF;?%GAV&OE85QAEHR`E)GM86TGBZWL837(DXFZ`>RJAHDYTGAO ++MCEL<G.90;/J*FW&D(@2U-M_'DC3T`JP;S69I!XN'@^=%KCBAWM`Z5UHP+,OP ++MIDK0YD+8BP1+0KC#RKNA0":!8]%_I=0/5L3O6!U-'L[21Q5:28EC5;V093>> ++MCW0\.6DM<N?VYX(RMG]]V33;6'\.(]1WL<G7*DY2H7NE'9U?JM2HUNI(7C"O ++MOZ$Q"[BO#V#_4$#1T\?>3TI#-ID23DC_WE.KT@T'4'(]3SYR1$;0G:^.:'TU ++MYO4I_.HR1GIE7[G(66OH6Q*V^6+'=9XG]RJP;HCC7!B_LC;'+>KC<W29.(4R ++M0)51$6MMXU/UZS/X>9C`GB#&9$)!E9EWO2O<*"KV8?=3^_3F=B^BB5DZYG4B ++M)\<9'0@(9N^TP>*O7'0HLHH$W]^(]6B^/R]]PB,)QZHK;:">K9'5-,CP1#9, ++MI`^P@'7K3_I<6^N02"\:YOHXF0`W"@V;4:X?)])5\7EA.QPA]$.$L;TM2N#D ++MM7%6:'P50S2\*_G/9K42G-;Q4*M`T4L>V0]*G2Q[H.W.L'3"$ZX;[OJ(@("E ++ME&]+DTUR'=5!QT98&1U\?A)HQ?*JN/$@,CJ%%2C'M)BD_3H7ZV(FQ8^#^N<) ++M1/X%W4U#<6/S#0W8SZ[]968P$?J!.T;5KF_CEWU$AJ(.C-5X!G/YX3[FSTB$ ++M<4H*Q*!G@S.;FY8Q1E'W-<=)&VY#O\_X6.98YAG>%Z!TF`[S]?T8J?';+M3? ++MB]91_QX7W_&M$-DP>H"/Z8E@Q.+3-[/BC_K0A&WG02CF;`0I#9V[BOWB5^"S ++MCS:#B1Q68@&59==&#/(42T:5K'1NFSG#&&1\V5=(_N%WOD7`KOU/FT]=]P(C ++M[52]BE#:*[^P2.`Y#[A8&$?4N@J4FE^->])(29Y/9J>O.I!5V96G1]?%:P?7 ++M0#'5W\U?-"(QU:ZSV]*=9J/(1N1_UVR]##D1,.:UACL3;_*:)&`TE<=XE+:U ++M8TGV+5?I[GWLQ_TA,OKZPK,IL4.@FBBL63-^TM:8;UO'-V`JJX1!%'@X@OBA ++M([IG)9B>7334SP/&6I&-+T_0/\(NX5VB)#1VG/:G?`E[E'+I'M2UE7E_^SW9 ++M$OXN4?Y/19"_8#S^E"*JZ7`]D9"SX\]Q%GV=O3M=ZO#Y"U2K\(\%T6?;UA6I ++MSY-#^%C!#'CF+)J<Y7'UMHXU>%Q=0_@#]V1:39R]"*RT'E3J+;/NE,&ACL5H ++M4_?G!K;<&W8ZK.I4U:+9P+S1/@!0+HG2_LO:ZV>N_&Q&(2WC@Q*S"W)=P[=J ++MF+`RH8\^EGCL.NM?MW3;:NJRC:-GKOQX\0C\T=:%4!V6,15$5)WT&/FS2J]L ++M],6GA-^63%(R^%:)/28P@,L=^0`E.='^];Q*CYI;`I(Y(W.7_M<6/YPF=BH. ++M!B)4WI1P$SM/1%6C%:V3VD59-%<0PQ9J[;IWP!.W-(?9]]@S4"-`1T-1?Z+X ++MCJUSM/C"]G_X0?[_!?Z?*&!N#S)U<0,[F+K8(?\7]X0(_V5N9'-T<F5A;0IE ++M;F1O8FH*,34@,"!O8FH@/#P*+U1Y<&4@+T9O;G0*+U-U8G1Y<&4@+U1Y<&4Q ++M"B]%;F-O9&EN9R`Q,#$@,"!2"B]&:7)S=$-H87(@,3$*+TQA<W1#:&%R(#$R ++M,0HO5VED=&AS(#$P,B`P(%(*+T)A<V5&;VYT("]/6D)+54DK0TU"6#$R"B]& ++M;VYT1&5S8W)I<'1O<B`Q,R`P(%(*/CX@96YD;V)J"C$S(#`@;V)J(#P\"B]! ++M<V-E;G0@-CDT"B]#87!(96EG:'0@-C@V"B]$97-C96YT("TQ.30*+T9O;G1. ++M86UE("]/6D)+54DK0TU"6#$R"B])=&%L:6-!;F=L92`P"B]3=&5M5B`Q,#D* ++M+UA(96EG:'0@-#0T"B]&;VYT0D)O>"!;+34S("TR-3$@,3$S.2`W-3!="B]& ++M;&%G<R`T"B]#:&%R4V5T("@O9F8O<75O=&5R:6=H="]H>7!H96XO<&5R:6]D ++M+V]N92]T=V\O=&AR964O9F]U<B]F:79E+W-I>"]S979E;B]E:6=H="]!+T(O ++M0R]$+T4O2"])+THO2R]/+U`O4B]3+U0O52]7+V$O8B]C+V0O92]F+V<O:"]I ++M+VLO;"]M+VXO;R]P+W$O<B]S+W0O=2]V+W<O>"]Y*0HO1F]N=$9I;&4@,30@ ++M,"!2"CX^(&5N9&]B:@HQ,#(@,"!O8FH*6S8U-B`P(#`@,"`P(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`S,3,@,"`P ++M(#`@,"`P(#,W-2`S,3,@,"`P(#4V,R`U-C,@-38S(#4V,R`U-C,@-38S(#4V ++M,R`U-C,@,"`P(#`@,"`P(#`@,"`P(#@U,"`X,#`@.#$S(#@V,B`W,S@@,"`P ++M(#@X,"`T,3D@-3@Q(#@X,2`P(#`@,"`X-#4@-S8Y(#`@.#,Y(#8R-2`W.#(@ ++M.#8U(#`@,3$V,B`P(#`@,"`P(#`@,"`P(#`@,"`U-#<@-C(U(#4P,"`V,C4@ ++M-3$S(#,T-"`U-C,@-C(U(#,Q,R`P(#4Y-"`S,3,@.3,X(#8R-2`U-C,@-C(U ++M(#4Y-"`T-3D@-#0T(#0S."`V,C4@-3DT(#@Q,R`U.30@-3DT(%T*96YD;V)J ++M"C$P,2`P(&]B:B`\/`HO5'EP92`O16YC;V1I;F<*+T1I9F9E<F5N8V5S(%L@ ++M,"`O+FYO=&1E9B`Q,2]F9B`Q,B\N;F]T9&5F(#,Y+W%U;W1E<FEG:'0@-#`O ++M+FYO=&1E9B`T-2]H>7!H96XO<&5R:6]D(#0W+RYN;W1D968@-#DO;VYE+W1W ++M;R]T:')E92]F;W5R+V9I=F4O<VEX+W-E=F5N+V5I9VAT(#4W+RYN;W1D968@ ++M-C4O02]"+T,O1"]%(#<P+RYN;W1D968@-S(O2"])+THO2R`W-B\N;F]T9&5F ++M(#<Y+T\O4"`X,2\N;F]T9&5F(#@R+U(O4R]4+U4@.#8O+FYO=&1E9B`X-R]7 ++M(#@X+RYN;W1D968@.3<O82]B+V,O9"]E+V8O9R]H+VD@,3`V+RYN;W1D968@ ++M,3`W+VLO;"]M+VXO;R]P+W$O<B]S+W0O=2]V+W<O>"]Y(#$R,B\N;F]T9&5F ++M70H^/B!E;F1O8FH*,3$@,"!O8FH@/#P*+TQE;F=T:#$@.#$Y"B],96YG=&@R ++M(#DU-PHO3&5N9W1H,R`U,S(*+TQE;F=T:"`Q-3,U("`@("`@"B]&:6QT97(@ ++M+T9L871E1&5C;V1E"CX^"G-T<F5A;0IXVNU2:5035QA5L"+C<ER*01%]%:D+ ++MDF3`L%FU(8B"D"`1030]#ID7&$AF<#+!A-6UV!AP*0JH551$X6A1E,@1!3U4 ++MR<$-%$&LN*`L*L5B6?2X=0`]MOBS_=73F3_SW>^^^^[<[[/_*D#J*,2I,.A- ++MD8PCRD4]@,A?N@SE`Y3+1^SM133$&((BO3`&>@#4W1T%0DTX0`6`[^KAQ/<0 ++MN"+V0$1%ZV@B/((!TT33>TBN0*B"-"''2."/,1%0Q6K(,2604G(",CHN$"J5 ++M(+#GA!H$0C6D8R#.15`4X(2<`6$PG"`17H\C'U)!`=<^&-=$?VS%0%K-F@+3 ++M6)/3`6L1ITBE#N!0@?#$%'L79)W\&Z;ZBWMKE$HQINJ1[TWILSZF(I2Z#PQ* ++M%:UA(`W\*1S29']J,.PSYP]Q0J/JW_5A,"4A%Y+A2@@<T5E<OK.@KT&HO0DM ++MQ`,(1AX!%)A2#7MQ2.+]K;#Q]1KA!2\-])2('#[,M;<9@!$DLT07#0'_$[NW ++M1C_5;$HTH07+^5P^'V6)[/OQ2];OLOFDG,(),APX"5P`1M.8#F$WB*T$(`X% ++M!(E#+8!:UC&/2U(,>P2PT20`!44C/6-EUXD7QD8+F1Z\#^([L1B-R:$2*OX* ++M.W^`^V;;@W_^WYZ>E#;.T<D=.+J[L#Y0U`6XN@H2_DX,(HE5&NCC!01\/M_- ++MJ2\(N8:F(<GT+AR;Z<=:0;!S@%`+Y4A=#26?O2$RW?A];N+\@Y5Y7_`L7YF. ++M/:FS.!]2E+B;P!.D@KV+OPIGLI_N;RA,+>-$55G[RF?O&$.?&I<B-GS7<6#, ++MT4)]5D[(UC6"4NYM*4>W7K]S^#N'J4]]RE8MS=BSL<'&HY1^M.L'NYEU'79) ++MIF%[\1;/T(,EW?=JAHZ>$;A]QN3QKG5'+.H'CN7HZIMO3GI1E)1>/D?>=O6. ++MGT\`1^VMGUJEF#LTK`/K>HS(%#%550Z+FX07JEL:5EOC;T9*#*7+M:VVFR8G ++MV[?_(LW1=NH3;>)J*Z(M.#<V/4O9WQDOL41*;3TOUE>6;2AOX&U9LZ#$UF^" ++MZ9%SQ.OQ)@?QSB_#^?><S0J:BL9=CGP<="(?37[?8C'^4.++'"QJS^DT6Z_6 ++MV%6'B^=T!W%2$KB+C!G+GF<7EPVM*;9"Q\RKKA-M>;7/4GQEL-[)7U/8M;,H ++M(O49C]/XVZPK-94+LA^M40T8-NZG^,6RTTB*!/-^-SCE0N.]S1>CT=B?#_MN ++MF/GVZU?+K!6=6;O%Q^(7.95-FG#&K7O;?>5:*TZLK\WF6<*7Y[@3\^O:#97& ++M\XJ71@O!$%-2=OFN/>:2AXH]XI'3FHPO%)GWQ0T/6ZGDUD$BT]Y+QRNG9$Q> ++M778\@2.I5N5.=5Q1'3EQW8U0-7]WX9!*9,:S)0.NB\S'WJH7FT<WCUHRG?NC ++MK.:;A!&3;)`W1E-94+QS8=&*,VFUC1.S&QW4E]1N[M:VLG>)\[J&'1OKR^WV ++M*%CI==WEO4^4V^;FDMIS6Z[,G2#BOIU54S@X+R16[Z5_FQY`MM=9T>5Q4LFZ ++M"`5P.611&)&5;SR(U)1+'\2>,!B4FMM:B_.&H^;1\V-4ZRMG-H2$K1]PTC#` ++M87A][8(P0^..+7_D>NNWG5RMLE(KA169YLU#IE*RLS%/<6U=Y(7M68GS?//0 ++M;U-S)KXQ#?*Q;Q[XW._WYQTM\Z5Y@5VAA=Y-UEDGQ>EJSLA+N1?RNFYB4XHJ ++M"J+4IYOK\Z2XA]4H29L\4Q&KOS4ZM2E99F5[/CNN>86=Z1SOU!._YYVJ`A]P ++M*/A!SD@G)FC:1;M+D:&2M9YMY9N[RO+'A%H&;P62EJ6+)6\Z3V]<:!SAN->J ++M9>'C0Y%F;6>DI#B_2C;9K&O#J5!!:JU]MYW9LK@*U<550]Q^Y=ZR4W><3>#> ++M908B*>W76F2I-YKFW#.ZM]]M$Y/,ZP/5LXNO[VO==C57""Y;74U<J'.,3W]W ++M?:59>Z;R"'8F8VVR;T$""+>M*&V)&5B>E!1RTL!<8\:M)=.6HU(;VQ*SM#LO ++MFF5/K/G_\$'^%_A/",B5$*,92H714<B?^[5*G&5N9'-T<F5A;0IE;F1O8FH* ++M,3(@,"!O8FH@/#P*+U1Y<&4@+T9O;G0*+U-U8G1Y<&4@+U1Y<&4Q"B]%;F-O ++M9&EN9R`Q,#,@,"!2"B]&:7)S=$-H87(@,34*+TQA<W1#:&%R(#$P,PHO5VED ++M=&AS(#$P-"`P(%(*+T)A<V5&;VYT("]75E)"3T,K0TU363$P"B]&;VYT1&5S ++M8W)I<'1O<B`Q,"`P(%(*/CX@96YD;V)J"C$P(#`@;V)J(#P\"B]!<V-E;G0@ ++M-S4P"B]#87!(96EG:'0@-C@S"B]$97-C96YT("TQ.30*+T9O;G1.86UE("]7 ++M5E)"3T,K0TU363$P"B])=&%L:6-!;F=L92`M,30*+U-T96U6(#@U"B]82&5I ++M9VAT(#0S,0HO1F]N=$)";W@@6RTR.2`M.38P(#$Q,38@-S<U70HO1FQA9W,@ ++M-`HO0VAA<E-E="`H+V)U;&QE="]B<F%C96QE9G0O8G)A8V5R:6=H="D*+T9O ++M;G1&:6QE(#$Q(#`@4@H^/B!E;F1O8FH*,3`T(#`@;V)J"ELU,#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#4P,"`U,#`@70IE;F1O ++M8FH*,3`S(#`@;V)J(#P\"B]4>7!E("]%;F-O9&EN9PHO1&EF9F5R96YC97,@ ++M6R`P("\N;F]T9&5F(#$U+V)U;&QE="`Q-B\N;F]T9&5F(#$P,B]B<F%C96QE ++M9G0O8G)A8V5R:6=H="`Q,#0O+FYO=&1E9ET*/CX@96YD;V)J"C@@,"!O8FH@ ++M/#P*+TQE;F=T:#$@,3(Y,`HO3&5N9W1H,B`V-S0Y"B],96YG=&@S(#4S,@HO ++M3&5N9W1H(#<U-38@("`@("`*+T9I;'1E<B`O1FQA=&5$96-O9&4*/CX*<W1R ++M96%M"GC:[99E6)3KV^X7)2$=DL(@C72#A(`"@\10$E(####$#`Q#22A(=S-T ++M-TA((U(BC72#2)>T("7OK+7V?^E>[\>]/[W'._-E?N=]/==YWO4<P\8,TN&5 ++MMX);0)3@,"2O()^@%$!175M0""#()T#`QJ:(@("14#CL"1@)D0((2DH*`N1= ++M;0!"`@!!,2EA"2D!40(V@"+<R1,!M;%%`C@5N?XL$@?(.T(04$LP#*`.1MI" ++M'-$]+,$.`!VX)12"].0#R#LX`+3_?,(%H`UQ@2#<(%9\!(*"`"NH)1)@`;&! ++MP@CX_PP$A%G#`>)_RU:N3O\9<H,@7-"A`)SHD%P`=$0K.,S!$V`%L2;@UX"C ++MO2#H)/\_0OV[N9*K@X,&V/'/]G\NTG\;!CM"'3S_3P'<T<D5"4$`U.%6$`3L ++MWZ7ZD+^SJ4.LH*Z._QX%(L$.4$MYF(T#!"#PMP1U48)Z0*Q`4*2E+<`:[.`" ++M^4N'P*S^'0*];G]%X'^NH:YKH//P[_W\:PP$AL*0NIY._W3]L_@O%OS%Z-5! ++M0#T`+P3X!`0$T87H[W]^F?S+ZRG,$FX%A:$/A*@8`(Q`@#T)T"<#3:(`+T$` ++M%&8%\0!`/-"!^?E@<"3Z$0!Z37P`UG`$P9_;*2("X+>$.SJ"_Y3_5L0`_$[H ++M78);_9(D`/PO(0CX/X*H((`?:8N`0'XI0@!^:[@KXI<@C!:@;K]5B`/X85#8 ++M+T$,;0U&_D)1`+_\+T)7*_Y#XNA,:K\(/:;^BR0!_)K_D`0ZA_8O0H?0^45H ++M![U_"'T:^7_-6A(]18M?A.YI^0\)"@@`^*U^0_3L(;_AGU/_#=$NT-\0'=WN ++M-T3[./R&:"/'7RB(-H+]AF@C^&^(-G+Z#='KA_@-T;XNOR':%_D;HF?K^ANB ++M8[C]AN@8[K]0".WK^1?^]W.MH`#W\.(5%@'P"J%/@:2$!$!<5,#G_Z[3@T&= ++M72'`)P!1`0$!<4F1OU1+5P0"`D/^]2)!7YG_L#44?<$@$`^()<'L%-SR48!= ++M<GU0B>_3O)%2'&X,!9N&&(UW[>.M=]_,Q&(X%/8_<^9>JC&X+$NE(-[`V6!R ++MOZ9W"7OOK36D=.#G'(.:_+GA9KZ1^K*)WN`X5=USW>G!^9M=DI;ZB=,]40S- ++ML:6!D@3#_.Z,PT^[.2#.)[J;N`O,?W2\<*OM2`L0$S=02G70"PZL81=FUB9% ++M.9>$B`0ONI,FQ&$O?G[C:Q>,U_AP_@C^WI7\,@\O._ZG\>GVV.,7]](GQ4Q@ ++MPY/3ME..#K;@\`B5AR),$7E1:4W-UY<5Z?QR(\+U[#$HV(1,>CQ8[&DC2]QD ++M_U<Z[]H,7S[_A8G`@6PU=R&^FHVB#)<%6@W##D#N7$O:.1_/\?-%6)W&7K.! ++M'T;9K'"=]U9>]J@]I]8T4-,%W_'[HP7KEA])=<%?DA0%?<S`A+-XT2@@.9QE ++M<5G@O,9],07'.)PL_6UZ"E78QZ^@H6L>ZV]QN[6#^-REN!%?+91SA(W&A>9* ++M0&-8B442:L*WB)T\NA>A;C!+LZ<?VVTK?+=L)*.Q_*J\F]2Y;O%]#&]3P*.) ++M)2JK,]Z"_HQQB06.S,$OY%'1+^_E&#B!NGKH-13U6L2/]:9JQ(>3CG5MSDER ++M,DD"/<Q.8VP3T@<]CW^\U9\\3VOJ_FSZS02EWY3DDY8T]-EE<LKLW.BRQ=KE ++M,4WSBI4A`M";->KBR>ZF&H\YXE&[2\Q%'1$</46*NY^[6$W[-J3;]_/!,^<U ++M2@*1Q/L+HK;%:GTLSD6AF'2D4G0B3J";PKWS&#F;,8K[A-[*JC$Z0;#TD`U3 ++MJ%!S<)%8T$X51GSH#W4J%/Y'%.-+@6\)?#5D541MW]_W`$Y7W+J$TP3K=UJJ ++M/!2)[?!;Q'T$P+EW&9N"DQK-???>0Q.>[A1;=T5A??/1E)WOIV7G/LMGLJG\ ++MW"8FT*=X2<:H-H0*<[$\[VPPK300J`(J$1,]%/8,.0(UT?"A,MU!W?3%,B=N ++M@2IR0:.G2(\0.3F[9Z_<(@M*0[>.+#%3%U7C\)?"-#GUK=MAQ8:6:7�_W? ++MTQ@>-DZ&]+NJD^NWG=OKH-1/XYWB2P\\_\@0RDU5NW<%)O2QH5#A49F^V)(G ++M)/FC`F:#2?J\'DM/9#,+9U3C6"-(DJD:9Q+B!]/MR]:=;[*,X1KG*@N:N)WE ++M-6O*5AAH[8LH]A1HT<>5L++/S:K*V\/[P8#=)%YR/9VJ.<,!6C&V6-?XSM#\ ++MOF;EQBA$DA]OIWY,]O-<Z-8X*A;4W$I%QW^=.R'I<=0UVG!H*1A">KU%O+*? ++MJ3-D%,-A7?-LZ'L2RMX]>>#%6Z\TNQO)#VQW\-^1^8I_"V>=T+J_2B?VJ5O# ++MCVTH*0E(*9_A]JAZ//^P$0B+.9BX7$[ZD,@<".1Z':5/B]R]0R3V/H3-AZ:1 ++M-[8!OA!BW-]E0O3&V80R:^-FQR*>U)1A>\=2+%5#MEXFJNEK;,QFR:CIF91F ++MK_KAC=]4J.'>W6X$[W7OCTL)N80H.C==-W%Y;;XS.;]"9ECNS_R!QN)'ZL:V ++M*G=BGH*6]?#<9<5%3S3/V)W**A+M@GU4D_!41(E?"O`NA%U$3+YEX4O\H7)P ++MU`3A<UUF@;!M:E6[%AWE\PN_OA`H\$9!3*<,,MY7^$PVN(8!B[SQ$DR^F(@O ++M>:@$V%V-IY/\M)&;%]B<8YFI3B^VE5'RY22$5QZ67Y2>/ZMSQC$9>6Q90"<F ++ML_;FW'.YQS9\<6C_=F"RE>J4UG"=-?B=T1WF2VFQ-,Q4:^H2;%+Y$-U[\+@/ ++M53>30U<#X%`EY1;$HKTK(A(DV764/\XME[V[QJ_VB*7<Q!?X/NU)@VZ/\E4] ++MJ`8G(M=QL97#R2?4-V&Z2#JL7=T_5;1_,W]`YIU\OXQQ-T%`MV^7HN`&J(0W ++M+5["]LZ=Q3'^C'NE7PE1MSAW,`0D01N-4M?EC25D<[7/-V33R9'=I>)S6F=5 ++M9VV;>"$)6_:$4V&F3`XQI.`"W3.5'Z-,_#K8OIJ*R[)C%8181Q"U'OVW&R!6 ++M^N'V>!^2L&%\[WCNZ0V1W?!-/IT:56]30=.HLI3B_>FA*3TGPGR:U8OE\EDM ++MMRL5-OI#<XO/P6'/@<OT;3.0RBAB-Z1[13-0]F<2R7K(LB%>^&%>HDHU%3D5 ++M]FL,E^LXUO`WY24R,PF/%\Q,'E76]6,1J,-)R+*/TT/>SA<*A<?XU#G@+XV< ++M%J^YV&N_UZ3KAU):4*])Z&_*<AL^M,/UQ\^Z(;4\+KBGN:B[%/D96%`5``Y< ++MT`N7F.J0LO.5-&D<PMT-"Q9?MF*`6W,I?KA^LV<W,IOAH*";9_MVFU?C5-3I ++M*H"8B#S"SDD*WT6A5(F#[50WRXB*LPV!%6)1RCR<?&"!1\`Z&70?8_.GB86Y ++MRM(0\8P#,YS@ZS-H9;58TPF\3HB7*Z*AIX'Z#J6!GMT"=,]10<A'1VM2?[31 ++M;S[YN-^OCO:06QK.^!"R)LVH2N#@6;`BW'?Z$.I,,8A]^G@$*FD79U[T=MJ* ++MD4WZXUMCAD?5/OJRE3L/TS&2Z7M!'QU8C[BYTO3V26M(JK'!3DCV]XJZ0WE= ++M;A_4]+E@R9UT#<!]MNZ?7[/&GC2TL--4'LI'$'L?MPE8,;J-:\N23\:B+JU^ ++MDO"15VV]#F;\.M9SZ=30M+(8-FWO4.6:UG[OV?7PMMP1`\9K>&5')UD09NIK ++M_3<I,5HFM+S4E605U[T`IJ@6Z9/@$0G7]?;XA29MX+L@+@:F;_%*GX2;7U!H ++M0<&)KIIAS,LB6)D!S"4)P\O<Q/T;2BG[YCQJ$[?.ELP+DPLI3EE_M+#A?MP3 ++M?SR0!->>V%7)HOHI5+O55>HN,TRF+*OIIC"03=6<2%-@B"N+E1IO:)YK=R3$ ++M`K3KR;->+`^T*K5?L%F7TW`I)3$]2$=1!K5+A9>UQT.GPE&@F7`9C>(F&75_ ++M9-[2E!DAHK^STYNLPIJIO8TYOQF["US9>+I/=I0^;=;D'PVNRSOM<0OF;0`H ++M)5AVCEO;6GL7TZ82L./<9=?O\B=T6F)[O$V))-P4'2<E@^%`(*S;-'V8C"44 ++MVKTQ8FSAXB;7[&"_(26;YW.($G?,(C'IT#9G7YOJ^%<W&W<F0<-4[A%MAJ8D ++MNVM8;[7$H:\*0V>I@@YL'K>KA3T<O;^,KB5(8.N)BF''MF]VGR,G[)G7) ++M27.&DRA]*..5S3ZR*+6H.]@*4G[;O?#;ID2P'07L?Q92LY%\(2JHT,IZ=M!= ++MQT.S9)E>KP0RW[E#\\AHFG/#5+FR'J?@GC>8*;A^P]CM0EN,U]87Q?9=[*>7 ++MND8SK[RF:D2=L:>L<D$*S=.Z^>;,-1#-*?DSY;J<[QFP'WZ^[RH%=F8"?J1< ++MN_O(=O$%(CP>(`N3]'HQ=UFIUY#W)>[WUNS>;EUI7C8K&+,C4M/3S8&W!0F, ++MQ9HOK^-0C*+),A:I0PR%<E1L\X3F'YIXODZ92X).EQ^4Z12!0N^OVTBVW9CV ++M`4*00H3+(%:=$3[UVJPP[,R[I35F\AAXHNF;9.?$Y10E+V2>=LL.SQXK]3DY ++M!G$LXPO#"L\F-5T2='LU"IA86?ST!>P8O;G*+,\GO3!!N=?LA+@2G^)UE2D^ ++M.ME'<Z\['>2>MQ\ULT=;#S,+V+1<B]AWS8BF)N?,+<<F4J`HB*!R&`/^ZK</ ++M=EVEJ+&>Q+DI7K.V.(D81AS,O2%Y?B-5\W,HM*QS;'IMFU'$O,*A344G=K!G ++M`+'`^H7`OFH@?VD52="BPH[Y>M_!ZL1<CZ5#-&&[L/8%,:X%)U&=X25(\I3] ++M.2KD0PK.VM-4*R-*OK&)LU26<1;(_+URC&*V,TFR85:VQNLKA08E(N]@8RSN ++M]AU^GX8"QIZ59SG,<(TTP[4AL[DB/D_FO@9"BH<S^@.)!/:ZCGN=U!\$>[6U ++MUQ.-U._56$Q!O,^F7[EN)(CIA/.PX\\X>?L\=<E:8TKPBBL"70]_H+0)"5L, ++MNG&W<9_O][W$FE/1\UI42FC-8=&A_'R01!]"'TCQ<%WT*KR0;T9Y=TW*R1<* ++ME'Z1-=GSW;=:YWG%_"!3`!(O1CH::$D0C^3$]_WYW.)-)\+Q;`^Y)&1]CSVT ++M-ZOHP&?"8YT<XUM=#!:[A.;@JPS8'PP_<($.[W_,%*>,^SP-DP@D2#*O,QWV ++MG#MV?*EQ"NI+CHQ[VU1&$X1('1H9GA'-;%%[]B2;%)8+Q6G1JY/AH92YC2_` ++MMOV!N)/#EJ4T/Y_P<"HE#F3\^/@NVXX'<F?XI$M7\T:8(DHCIY=XI`9HXI)[ ++M4F-Y;7'RGORU9/Q6`5;[B-\,2#K;$+1:N4>Z-Y-K;Q95'C7,P'/(QG)5'&VK ++MRW:LR*##=SLZ?0LG3UQ+IV-\K!,O8#8`3IA'/EA5&'E%3T2H:?(Y.^Z&0$3Z ++M:&S;I4.ZCZQV)KG'%ENL,>^;86NO;#+OP?`;JN,T+*TP4@>VX1@ZMGV:EE-; ++MP@#2?'M\QB$7K/9CBYV4A*^;E;L$K\=2OC_GM^MT-1'`W$Y(B40NWDW(T.7T ++M/RAYUG4X=<:$77RK:!H6X]1"'^EYO[<;)IM[/TLKDR=1<7:HZ?%,:L#QZ]5/ ++MI*:,=BVL6K<>@B)?9"8J'5?H^\_HW@-A$>M%TJTJJA>@A[&"1;0D-)[>'2<2 ++M9:]$DOS2.4''_"IO^0TC%RZ:0$@"$8J/ZUUZ]Z]@:=NB3TC:5#VC?@:<6E,# ++MIZD8Z\13A^9/7,PL&^A#]C=:Q=2K5<N)D0B;IWMY&19OPD;$WTCKI3`Y,`^F ++MC;'I%%=V30AEN/N#UGP=SVQZ8=7A258J0RLS^=\J+QJ4'$!I/0"!.H"'E,]P ++M5NZ3-DDY%G7N)T%80U]CRJ8;'^6P>^(>^7]KUSY/'3=Y[#POZX&3^8$NC^^C ++M#IG=<YHK#>^>`_),?[V3I^::($U]PMJ*]*=1@G!-4MZ[2KKN0,/4;UQ."Z=7 ++MLT8A7]24;MFJWL942<L(I(7FWG1.2%LW%Y]%W0N.XMAV%L<KG&\CW2HGHI(1 ++M-A@MU?;4?:7BRJ&YR_@NIU^Y]H4P2P3.WK+JR?G`'+W9\2L(1<.#^TL,M'5Z ++M?,$'E%F^AG\L'5H3N6E9M"[NM@WK<.WS:^W4>N_1@3'VYFJWODA/AZD5WN+D ++M,6A.>9(B%#BRU$]+WJW3+:83<"T*AV8@^A@V-@7T(E!%^.XWGE$.H6S=]RZ@ ++MP]F-V"$Q)EZ]-P7*=HQ:'6MC3]\/QY7/QKG<A??*ML0GP&,]O?0Q548;PPS6 ++M%C+>^_*+X3OZUE=[*LFW4G&012\$'04&]WYB6\R'TUY4A]"(?J<,V)/*HNOB ++MA$[_Y+9NI=0W=5]'Q$8+0>Q"JGJNJ.#4]7/'CWP#/3@S1:%7%#WG226(3=L6 ++M9FM=?RLQTX@/O?,^H1G@I<MAU6BF2:#07F%<!_43=K-COQ+L>@$71ZKF8EIG ++MR&Y(P*>]J^`:W'Z-A->519@-/5R1WETN?1+D*LWV<Y$$*W+3]\7TGI]N,\VL ++M;[?A36T[Q;[:/2GE24N6Y[2UKEHHK/G(VY$6ZC-UC\Q]S,"9H.+95U&P#VFM ++M2T9"PKH^A_](M/YET!HGOJR&6O=(W%<<<LZ9)3NG\'U=SS-%<[;$^>/!9C;? ++M+*)F&-,W6]^\SA2N@(ME?R*0WMPQO]$FRCI_II3DB5^SG[FR-$LK$6?=I*V7 ++M"QQ/[/I';6;%/`&8'8=&%NE5)O5:5;?%N?R&DZJ8:+FH<U9+SE0ZN8E9VGI? ++MPJ=O#C=)[/N91@+EJ]&JD'K@I4T?4<?S%\H\EDTL&@IK8C.:KWC]J$F&8&=O ++M:&KJ5#,I7$IX;6*6R3"<A]Q?Z'U.MRF8U,;_L!FZOHKJ-;H)!&_W%+[>PUZ/ ++M[0J_JK(1RW:;M:+#7RT5%U%/O5?O%UZ-W3WM#K)^^?D$S'-4TS/,QGAF!]%+ ++M3'B)\7C,,4?#TKJ[X(61RD#K8U.GW?/1I&&/NS(/3`/).09?%TB$^^D`#/9R ++M6>*B..MO`X4M^7<^T,AU.%4&X,@;3LQ_UK+\NK_H]_C3Z;)Z%B>28^WZ[#YD ++ML]Y9RZL^96U.S+_E;4T@[:JX:DTKB<<#)TIO1PXK^;G!W?93_SB,+T9QO!4] ++MP/?+CO7Q=_!&&4QF>!RG,R[<[HT?/$INX7=*:QW$L05_(HI2*,1H6>$JYDDV ++M$4=!=N7#L1C`@=GDX[7SL@681\P]-(F5AU^@*">CB_A(#`(B'C;.L0IY82[F ++MVUDY=KS7PCW4O>SNW)L,I6,?DB9/J6\E>K4F'D*G45(MHG*,?]#@LWVS\1U@ ++M8+`FM?/YON1ZL[WV'DL'MS"FHD*-[MJN3@B,*>J$738_3?=,[_M]#^XX?EOK ++M9=VPG2<[NHTE`S?MB3]J`/TQ-$46]6TIH8D.L-5ZU<\X#27"C@.A&N[8=.NV ++MQP[V4*%CT1U+_/.0EYEEW9_HLZS\%&M\]_D2+K(-I]:4;W)X@D2:>DX'@",> ++MBN!,Q2)C`@(9USXUQQI=HK>A+*FMG'P3U.+YGQ@,%K5%9A$RG\H1ET6<X<XR ++MPX)#HV,]$,N8JS<NMQ(6=GGC.N)MQ=9\CYG8LW?VO8SF$1]E5U!:EU2V(T'V ++MA<"R7.A2]LD3]>B@Y=X-7!?6W5@N>9#>\6@Y?EJ&3%XU+]#M67(L78:YA/+0 ++MX=4^[5.$^3/@"F9N2,ESJ/'*[@'K0'6C@#UD=2B*.*MRB1E3K;.OE--\2>5^ ++M_/$@WM8R(6F==.[)QW4_!D@#XNK37FL'=O.)H#!%M`WNV5+#*'A]JQZ+5GY: ++M-;5D!7^(1%W3]`E.5K._]H?G:B'T1=SX1HO7;H5TC!(R5ZRRS/(RZ11==W+< ++MFQXG.=C.R96,9VXF##N5O+'JP$LRT`0S&&3R-?)+/2?77^R?9TNF5*--7T^W ++MF`1U.[K1'F^FBYTLY51V"U?7`S72K$/LE:G5';QF^NKD`WO,AU+V>.VLC`_< ++MF<?BC2"K%QH:[=)W"6T(&GE81_-+8T$.2S#"E]N0PI'#<Y>OM%7\7ATJ?'8E ++M845[R"]KTT:X(J*5NG2ASK>%!UGFRLK:]XM<6QXB$2DK51[\8;U'.(M9)C_, ++M1XJ@7;(U./72;>I;!'8/C4T>=J+:?:E\HT3W*2,U!1675E?E5/'].0ELM'L7 ++M=0YW64JZ-$UC&KP_E'SQ$.,4K`2&&_:C]@F>\1+Y]9@L&MC?I+%\9*OYIGCI ++M)-7/V"TFMVI6SU1/9=3AET:S8U4:@;ZD.D/Y"']&OV7=AIL))<871VZ!AH2/ ++M')>]98-IB69AXR:-K1ZVTN=D#>W5=DWYW,9C1A7^&A6VG0%D$UC?7W^U-:ZP ++MBTQ/?^@2IX$8%'RSA''0S7"MX#.^31,DO,:]94LLFZ&K:@!T"QML7(6A;+8J ++MMHX[QJ$&%TCE0^FA0I.6?N[`KFFP:UD',+J_0;4U(/([N7!`6``B+>*33^PY ++M5\PG;##$0?1.L]>7ZW<13OU-^C5V8R[YWZ#O5V,(O%?$!9L$=&HZJ"EZ]89? ++M:SO:ZWL`HD_G`I0,4Z@XW*WFE[/WC75Z$Z556M2TZ$EM;*6GS[BUG>33.'CL ++MY),>+=GSKY"FM878SSY+`JCY^82A;&]M--*]WLYU=]>/Z'\EX@IO:7QSOVXR ++M(TC=B*+`4ZU;?[*;!_</3G'OV=%/B5C),=$<][F(#Q5D9QZO,N:;T[(Y=U+* ++M/>!K492!-1*0Z!YH?\DSOR`5+R",%6?_V-,9'?Y)?C^GP@QK2?P&>"]4X&*S ++MTJ!BP:?RTT)H_*SH;'SLQWK_XPUVTH@*PK".V.W3MU]D-2$^<D;28:6S"IR@ ++M`%//!^3-;?-W,6\9NMPM<`_7-Q&/JR2Y7[EF7#^1Y<P<7"Q("*(`1DXW?_,' ++MUK-[>2VP9+I20TYE4/IWPON72M=;6-N7G-="UNC]QF&ME:$1%PLV-"I/M<1] ++MKV"84EPTFLH'"=_*R\KJ]MQ+DU=+C(XW$6Z%;28S9`K&%[?MAYH$Y2Z^\9KY ++M[VXCC7*X^?=-@AY)L(.7%-D.CM<?#2T]#RA7=-/<6])7$DAG?%KY!*]5H=Q] ++MZ,9@;7)(B\%3^6,L6VB&)\9=B9R["_?MU2/P5X5W6L#[;>8N&T\57/2/=S@X ++ME6<.4\NCU!Z)O\J!,`H<+:Y&+H)*OJ[DJ@HU$M&O[E@</=YK_+[UTUJ@@TR_ ++M<L/Z)--.C['HN^GGEVD)N'M*%SH2W_+8.XO'H_41])W)S73AB>^\XT^W1C@U ++M`N1"XDQRCXA?56D/LJ,,1\0SPZT%^CZ\O`TQZGS&C7:7SB?A[:S`C2<D?6G9 ++M=^<`0U"5]`EMUH,OWXCAH0W[+Q^:&UKN>'0=4)F_&4DZVXKM./S,\:H2_0\J ++MLIW1C"SQP.7&E,.80L@,-ZZVO>1.<WN)2]+7V6>U3?90\&8+BB&O7=TH/<`Z ++M;??N'(U(BFK*$P/:S*O2YV:5QAP^[KYAD/:0\+=4S1.SY-BL1RTO'HAVFKR2 ++M/13?O8MUIN@(DI'V(=HIJ*7R;&EOE"%8).E_Z1U&'<FBL+`UVMH]&ML7AS?B ++MM$9,5RMAINLQ\&I8"*=.Z=FB7Z`AWSNAJ<J;]G&SSLU@!>#-N,_^U\D8265N ++M^0\<-8"VN]7&'-*QC@1".$<V#W/Y%-G+UCTQY1('H\Z^E*S7&FAE,4J@ZC:? ++M(+S2VZ]T0VR#RR5B[=J'R&Q;(".,1OJ1Q)E!0>]LCB,KDM.:^&?,H2U-H9;U ++MWZU9[H^[?-:KT?*UT7;KIKLC<U."$&(Y$DRLX1-EA.><&"2N:WN(7\279W.1 ++MJ,LB;H@WU=^"PXI$,:A-,S_S=*#\N&U[;-6B8@3[BQ?2,'#,,\J4N#GU?M3: ++M&,?%XES=S>LE%+-S6UA-I%RCG/[IQ7>LJ%$SR80'V"J7GE[XI%,UZ%&ZN$#Y ++M/:Z/QS->;(C\93/1QH@PJEJ3`5B5C=0?WQX:[^&,I.TMZY8J6^QGC<UAS;PG ++M%N_L,W(65Z4B^JCJLBLN\F#H\N<-<)SR=/F(:\5^T&2CDS?U[#,G-7%5.-)9 ++MB.+XP?SVB>$##?V;#ZC=R#\N`[(M?7_FR*I5Z4S@51F35)\2:XAZ,SZ2ON[A ++M\A>3<;A#K>>GU0Q[0XR03-[8,TJ35-UF#B8OJ,U?H<N1=F6MU]]ODE[6[F)O ++M[G^EK`O'XI\>BO:A&$RW6#H7^'_\$/QO@_\1#2P=(&`$$NX(1M@3_!>B'#2B ++M96YD<W1R96%M"F5N9&]B:@HY(#`@;V)J(#P\"B]4>7!E("]&;VYT"B]3=6)T ++M>7!E("]4>7!E,0HO16YC;V1I;F<@,3`U(#`@4@HO1FER<W1#:&%R(#0T"B], ++M87-T0VAA<B`Q,C$*+U=I9'1H<R`Q,#8@,"!2"B]"87-E1F]N="`O5DY-5%A3 ++M*T--4C$R"B]&;VYT1&5S8W)I<'1O<B`W(#`@4@H^/B!E;F1O8FH*-R`P(&]B ++M:B`\/`HO07-C96YT(#8Y-`HO0V%P2&5I9VAT(#8X,PHO1&5S8V5N="`M,3DT ++M"B]&;VYT3F%M92`O5DY-5%A3*T--4C$R"B])=&%L:6-!;F=L92`P"B]3=&5M ++M5B`V-0HO6$AE:6=H="`T,S$*+T9O;G1"0F]X(%LM,S0@+3(U,2`Y.#@@-S4P ++M70HO1FQA9W,@-`HO0VAA<E-E="`H+V-O;6UA+W!E<FEO9"]Z97)O+W1H<F5E ++M+V9O=7(O9FEV92]N:6YE+V%T+T$O0R],+TTO3R]2+U,O52]A+V(O8R]D+V4O ++M9B]I+VHO;"]M+VXO;R]P+W(O<R]T+W4O=B]W+WDI"B]&;VYT1FEL92`X(#`@ ++M4@H^/B!E;F1O8FH*,3`V(#`@;V)J"ELR-S(@,"`R-S(@,"`T.3`@,"`P(#0Y ++M,"`T.3`@-#DP(#`@,"`P(#0Y,"`P(#`@,"`P(#`@,"`W-C(@-S,T(#`@-S`W ++M(#`@,"`P(#`@,"`P(#`@,"`V,3(@.#DW(#`@-S8R(#`@,"`W,C$@-30T(#`@ ++M-S,T(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`T.3`@-30T(#0S-2`U-#0@-#,U ++M(#(Y.2`P(#`@,C<R(#(Y.2`P(#(W,B`X,38@-30T(#0Y,"`U-#0@,"`S.#$@ ++M,S@V(#,X,2`U-#0@-3$W(#<P-R`P(#4Q-R!="F5N9&]B:@HQ,#4@,"!O8FH@ ++M/#P*+U1Y<&4@+T5N8V]D:6YG"B]$:69F97)E;F-E<R!;(#`@+RYN;W1D968@ ++M-#0O8V]M;6$@-#4O+FYO=&1E9B`T-B]P97)I;V0@-#<O+FYO=&1E9B`T."]Z ++M97)O(#0Y+RYN;W1D968@-3$O=&AR964O9F]U<B]F:79E(#4T+RYN;W1D968@ ++M-3<O;FEN92`U."\N;F]T9&5F(#8T+V%T+T$@-C8O+FYO=&1E9B`V-R]#(#8X ++M+RYN;W1D968@-S8O3"]-(#<X+RYN;W1D968@-SDO3R`X,"\N;F]T9&5F(#@R ++M+U(O4R`X-"\N;F]T9&5F(#@U+U4@.#8O+FYO=&1E9B`Y-R]A+V(O8R]D+V4O ++M9B`Q,#,O+FYO=&1E9B`Q,#4O:2]J(#$P-R\N;F]T9&5F(#$P."]L+VTO;B]O ++M+W`@,3$S+RYN;W1D968@,3$T+W(O<R]T+W4O=B]W(#$R,"\N;F]T9&5F(#$R ++M,2]Y(#$R,B\N;F]T9&5F70H^/B!E;F1O8FH*-2`P(&]B:B`\/`HO3&5N9W1H ++M,2`Q,#4Q"B],96YG=&@R(#0Q-S<*+TQE;F=T:#,@-3,R"B],96YG=&@@-#@V ++M."`@("`@(`HO1FEL=&5R("]&;&%T941E8V]D90H^/@IS=')E86T*>-KMDV=< ++M4^NRQE&*&"4T:2JRZ)TD0`A!D-X[`0$I$DB04!)*0I%>!90F13`"*E(%I3<K ++M30$!Z6`!!"E*$1"0#B>Z[]EZ]_EX[Z?[NUE?\I]WWF>>-3-+D-<$):F*(3AB ++MM0AXHB1,"J8`J!N:P1``3`H*$A14]\:BB3@"7@--Q"H`,"02!JB2K@#24``F ++MIR`CKR`M"Q($U`F>`=ZX*RY$0$1=]&<2`E#UP'KCG-!XP!!-=,%Z4#2<T.X` ++MBN"$PQ(#I`!5=W?`[.<-'\`,ZX/U]L5BI$`P&(#!.1$!1^P5'!X$^6E(%^], ++M`!!_A3$DSW\?^6*]?2BF`!&*25&`8A%#P+L'`!BL,PAB1*#4PE*<_&^8^J>X ++M%LG=W0CM\5/^9Y/^XQCM@7,/^*\$@H<GB8CU!@P)&*PW_I^IEMB_O!EB,3B2 ++MQS]/=8EH=YR3*OZ*.Q:`_A7"^6CA_+$8$QS1R05P1KO[8'_%L7C,/TU0^O;+ ++M`L1:0T_7U$C\KWG^.C-!X_!$\P#/OU5_)O]BV&^F=,<;YP_80*6@4!@ED?+\ ++M^Y_=/VIIXIT(&!R>LA!P.0#M[8T.`%$V@T)P(!`&X/`8K#^`]:<8ADCA"43* ++M%8#2DV#`F>`-^CE.RL0ASK]B?Z$,!=W_1CDX`%']37(`1.TWR0,0C;\)@00@ ++MQG^3/!2`F/Q-E+E#T+^)DNGTNR#EK2#8/Y!2$?<'4HJX_X&4NQZ_$48I@_\# ++M*5*$/U`6@'C_@13WQ#^08HKT!U(*^?Z!E$)^OU&:HASP"_]ST&IJ!/]`21D9 ++M0%(:#@60LG``(8L,_N]Y%GB<%PFKJP'`H5`H`@G_%74B>7MC\<1?7Q9EA_[- ++MSCC*QF&Q_E@GT+MA@M/Y*-=;M3'%(9IYO26T8D?4KM0E&U6]''AV(G(TY8A[ ++M0:>^E]AXI=7.P]NLX%G:61Z_O3,^\4^#3+NUEL.]DC.'#F9]'69O7VTX8_7] ++MMF'`C"??9N0"XY/:P?5%^!'C_O$WQ6G6#]JR5UXMW#,1T3"?._:1EZK)QK>Z ++MB1PEA[#2NNUN<2VZ4DB&UXPITZLX5O;:F!]3VDV:L;>1(:[7Z.O%/ZP2GI)8 ++M=O+H[Z8>7#YF?_<>B*U\B7:(.OO!&>D*?'I>SRW!!Z)5-F4!.)8]Z40%D6U" ++MYWL@/W-*FV0?$KIUY%DYF$RF=_LPN_0VZO2%QZ\V1(R7%)U4HAN-/NVY'L5G ++M9`Q9D'3.4`5N*SXP^Z;L-:I<4O5N?$PL*:,M"OS(9N9C*M\7[D-[088%>3S+ ++M@]R.W>WJ9EOIR+6>0OT(_WOEV85?'QDW/N9?VLC[%(R4MS-CTVXI>9A81ZM+ ++MPC<FKFL^UM,-*A8H[5(:TB0D2H3(I;G:K!I)I6>F;W88Z[)Z7WRNI<<?$S4D ++M?)-?!S<_63!:MCXI7Y?FW5\,<B_.X4_K`KKE57V@6APV0,]S!+_P"U:UQ"77 ++M"Y")J.8/#\K+K(R^3M1PB@S4KT5'H:V:[]QNT75OP$GV'>7"!4H-#@JVI(>. ++MMCHP^'[2;$/SXE?LY#F\U5M.7;N*N]<L=7X1?5IJYCX[.4C(X$=?9/:3D7@5 ++M-*,$0Q#D4^Y.)M^A!?6E(4&M6XR1W_H'P`\KUJB/GWO*G(\@LSQ15K%'L''E ++M7R@>1A.7!._/F#LM>A4'3K_41\Z&LZ2C.=H%)6MW3SW$H/3UNR]>%_"HE\D4 ++ME^^>$[K^@EA;WA26,EFQ%2P]3##LY>];91#SDRMVV!1[R>.CP'Q47KK;9=<Q ++M-O^6G_IF.*]A4O'+ELTP*E;>0:2?UZ;(?LY,T$%PRLWZ:XNQ%RI,3%R$N%NI ++MX@*#18`5+%LWT13.^P,9.E]5!O=^5R24!IT^]ME230#-$;TG'$$3:D"-'"&S ++MQTBFYBH@-A.->(G3NZO2J#MU#D!`UF',C[R%Z<3R>YU.YB;[WS9S*CRBE<^O ++MUY5@2H;W\@ZN;%Q\<1ILWUQFR=?<;6J-Z#?^?ER??U?(&.[X1.(;^.(>QOX` ++M5&SF&#L--XAY_^.(IV==L\R*4ICSWG)5DJ30])<=W\9QI=&6V>D3&4R=ZFHP ++M907)(T7V46\<I/-P[P8+K>F/'[7DR$P\*/8)-VD8Z1S9.#A_]\"]ESIKP#?B ++MT^/7&9'4@M,6C+0%?(LY%_@7^<!4M8<@)N\*ODU-IFA9"]'Y0A;K8#V_%V[+ ++M8VX>SDE)&YE>(`%H]4?6C;.]IVK''+?Y3I2;][[A0&Y%K12/2PO+M>R_KG8B ++MO_\"M3GZ+!!0VC''](<3KI]LR0^CWF=>-]1*&K$G3%-OLXB,5S?(09\RFMDM ++MQS?S4<E&Q"M$O$[5_]+9J3:DXVGQ4/9D/`N]NR?#S:*/*_6*F,^/E-C89`4@ ++MAGVMAV467M:ZWTR^IQH\.\GEC#5E<[[<8.<+-@GZ@6^@E54FWI!]#ZZA5X?, ++MO8$<+3^7T$FEX;LKC.0\Y(WL.Y'?G"N,PG.;=L7+9QRF<6KC]]VR;/I;$%.* ++MM_96JY]51>]63<Z"/N7Q&LQQVM8.I-1M/CIN=_YRNYHL%#[Q)G].BFA8WW]? ++M0%QHX_L<1W&-FLO$0F$E*3MX_KC%QA;NG3J#W-7%IC"BE,7>EK:"3_8#Z2># ++MTJO%,^266>"!OZ0!J@O538^X(Z%AH,RQRJ!:7\/V08^Q>EWSS`UZ5T3!T!C> ++M<SPD[I+0]?J+_DX7Z<46.4%WY5_$KAOIRV1F?LM@5JGOL9ITO6[%+?E](&2A ++MZ(3^JY3/Q4/)I,IS8-RR35S2#:ZZ`E/;.(:`^TC6/!_SEDBNSK=9A?<,J%;$ ++MZ<QWQ/0X*\&[IKELFEWT*>W3DY5G?O3MOW803^9@7>\>,>8:CQ;N7\*3VKT_ ++MFMY16UOJ;Q/&)7N!KWN8F>!5U7,!&JXEQ3A!5?+-FLO;G!76.Q$Z"*V/B]DX ++MX]6UP<^%Z\M-U@,S:Z*N[I.*TIK"5;-5']\D-#V".R<D)OK1L2]_VY*E44:` ++M+CH^]96`)K,R%,E5S%6A.P*<DJ$$<96$&"NC>/H+6)00#5E^5O9T<Q3SCY-C ++M\"6D^NAN:@0^R_K!_C,>-FW0!#[=!+@K(1K><*N;W./?@T;;>+I,'"C!#EW, ++MR"Q37"H#08^I$FY?:0J8,WC=V",?8KNSHQYN_`HNH8[IAWE&2(],RJ#"@2S4 ++MN`"X"H;4LQF/YA@-XM%YT21(7,FVO:T7L_,BK@+3UJ^;=)!UA5!NZPCJ=X46 ++M>$;WYS$*U-TG4!^,)G:-3J)ZF0NID[);XFGX\XT8&@NV3.`AKHLWY$,4!5H) ++MW;OQGS;3Z/E8;YJ_-$(81PYP0'2$AQI7MF..9LH_9!A6&7T.L,@]8?`DV:3U ++ME%2YZKZ=+Y&K:"%]'[0>>@X*G(KXPKON)A.N],&/W#@E>EM@W'OR9D.K&]E, ++M)QPN-QQR&Z/,GVT\`"W*-YG9D.!S';!"K.+&DEZE](;%\P"B[N^COJV*D+WF ++MBP*I6/UQRSLJ_LJJ4D^K#>+.22.,-VJN3KTX'5+U]NK9"QVEQ;CW.Q$=2>FT ++M*OKSI?:G3+[SL+EV3G?Q9666O;P:9D:>->M]&9Y`9;SWK$$H>4T165@]H^WF ++MT3N<AT3J/E=\:$;[[(;&62'4N2&/.S"EN-EK3J^S\E''/[_%PQFS#(,WJHY: ++M+&.MIT'SVU]5SO?+63X^;V,Y=XI#@>%I]V$35==\6L?7,R^:W)+9LL,40)&Z ++M2`G^8K_'Z3J/:R^SCS"A)7IS>MAKXQYI05+#=SJ8]9VP(=]'*JUMZ-9/CE&A ++M:+PN:2D=L=,AL7+9AI5<7HEXDISE[!XP=A;!7[V&94/ZQYG'YAYK+@M.Q6V' ++MZ)=RO&MD\@@)F6\$][9<S=5:J->JSI@V`2[AK*M6CC;E?'`##].Q,.+]/;!I ++M[%R>85_99![NP5=ITA1C5@M2+M$;+UZ^9<O=QEJ/[0A6)&V9UT_7DMQ2P?F7 ++M$G,UIY,0;YB26%=?UBI]J;6"LN,:4T(:&(\LZICM\K(&<^\D!%)U8?M7#.[0 ++M-,$LC4/O@]$72'H*!^;+_K?@#\NY,$\^JU>;S0[/JU!=N58C34743J"2TA27 ++M$FKVY>Z]:A`B34[FAO7F`^TKU*('K-R&!(/Y.2/J%(PU1IAG-J:O^-ND.ZS6 ++MH?`T-X/D4+C;]H*O=7BJ.(^^"4O"@9"2QN>)F92W-,.H<\6OZ8P":0L=(ALP ++MX*&33VR[M%O8>I!AB%6YMOI8=MJE0>BAAV5JN7[B^J(>NGEJ@'Q@*?+F,EI[ ++M&'ZXC1ZUF]-HVP1]_EQ;YH^].3)0.F!&0F=.^9TMGG:3W&PF'*8)KM)]QL3F ++MMIEEN%Y>/%R;BRC>*?M<XRL1D0J3'Y_P7KG?H^02U(\V]H-PK.]$]G&]WAT4 ++MBF,IB72.;P<'T)V(+Y*WMFDNPP<R-4RMSN>=\M\,+BGB@P^W\WD,J'Z8-'*= ++MGP6^$)\5@N5TV&.&65?+KTW!0[_:+M#$!5XKH-;_095Q9U,G)]VN1^2&?$$^ ++M>HO58'8:I?3II3.YSK>B%.N$LYITT"/QF)GK&5^B9K&QWA]-?ORN,L]"I_TV ++MSQTSN"9,-#U*JJSC=I<HN?6`+R7_N&\C4>CD[B6YX%?"A1XQPTU/-*$_QNC' ++M_0/?B.XO:0,0R^]C8[O^8O<=U]@]7U$OW"X=W-:UT+9G8F@2;V$2Y_D@-JS0 ++MKJG#TZ&1,:[!?D"5MF%UZ?/A*:/FTTZ2284^(9ZS/&*>XZ-^D7-9I;`?9F'W ++M;"N[E!B%-SZQ)E1$DVC4.4.CBZA38\0CGH:*?7A'7N.<Z1<D][",T*->&S*W ++MB,][C4>\?\LJ9!EEX*3P?)B/9S_-P=GKF!U.WU!?I0@F<QTTS,@@PE@.RJ/) ++M?:V?]1%.+A*4O&@]PE9`I"=K@FL[7!):SM8%,K;2M@95W3EVAOT@357#_Z7% ++MCIA9]!S=Y1J'O+L'%XANYT'2$&&$T38B?1B[+_#J_.K(&YOD0*&MDX]VMRUN ++MY)DM2!MPA[)4"V19O,WH49Z9;*R:U3U^<$4['KJO*UW*H@Q?U&S/V[<K4,M2 ++M$&Y%#;V:)&F=<%-R[["_,7-PN@T!++S*L3^2EF-D==,"=^/)UW#&Q794/4?4 ++M,Y/+S\DI#QXBEUF9/^7TMQ!=:_51G&@\X4/U,,-LFV=>.%=?0L@K%8<-&I_T ++M2E/9FF;)^93C(;8(G?9O;Y9,6UVYOV;?M3RV.:U>ZEB)B2.W!$VD5)`A[G1V ++M+#['(:+]K$N:3;MBUHKRJF;A43MJI!25+EG+!Q7R*/88,?IS0*6]-FA-S6J$ ++MQ27&X_D-99,2Y88LCU-IEI;]OD3=*"U';P$U>J)]>J$SLT\1N+%8Y8#IHKI* ++M'EU*([JTM6NKY+VOK3L;><S14TXUMJ,FI^!QQD63>QB3.GL+J_G#"<6*L7U. ++MV7MI'#;*`X'*O%L9MR`1ZG-Q0X_"1981N'-V&;LV4]9&WVYE/D9,77>L5*BG ++M#3,<YUZW7>\K]Q4LP\]UR()JU$X\A#P/36M78GQ4PM149\@B(3?P;&QF(!JR ++M\2H^AZWR;'W)M:914IWV'8WE4%F9CITSW"^#6@WUTM8;7M^B12/H%Q+:^95G ++MWJ;?HP6,2_?.[@SD36E)ZS4^"H6AFY#0CZN-'-\9@C1@H<]'J>\H&_!$5IE. ++MIOJCHKK'+-ZJ<DS[#2+-H+MO)`>'(Q)W63;JP:(DG<ZDH-Z&=,CYRPCI6%1X ++M_[0%NEKGZ%+@X-4OOD<54V/-E38=-]..FAA.(TP?YEE)A"HA:]MZ^FCU9X`D ++M4AM]J])WR(\!=@U>*W6,,,CJ4U!,5(WEQ)51-1]'0OUW=5Z<4>N--MO4@N'Q ++MLF-2[=$R*&H64TUL@=4$<0%G#('TD#9JUU!AR\)Y&2C:B+[36C%NH=U103*W ++M.4TZ2H_44*$[X^D2-SF9:=657,-<H6I=)W9X6D\-M.Y/'.9(*3SSK1A-#ZP@ ++MKT@&IT:%R+B-G$T7T#F5J],PW.RBKLC.45Y*`Q9AU7$S")I(/TN,K`>NYVV! ++M"WP/@YDK:_)OE-M=A#/-`Y4?NY7.[9QH">:L-^Y@P$IY#K4@I_)I"3VH1@V1 ++M$\*@3*LPS*3-70;=2/"E*+GYTIR/7[F_?DN0X(]HX6&[=4-JG9%1U4"%N3*% ++M:IW=T>BCEV'J$K\$GT<@EV'/U<)65'`L]^*[C?*$FB/$XM*[/'M+8N)4]T[U ++M&7L/M)2!.JON#DZ/.+ENTZ5HR[Y_9/G4I9SAYA:FR,ZG*'R')>Z:4@G@I.9M ++M5;Z68GEAG>9B*I_HB<IR]6R5_7/HST]/HK*.8E5?+I0^79ZY/^)BZ4I_.B\V ++M&.8LD*M,PZZLW0>4,82`GX`33G8H3571]7:C$O9JY84+[C2&<]',PPQ()Q>N ++M3SH45&EZ=;#XG+[<HUWSREHT$YWHUEGN59L;^[W0CC>M0NV\7Q3=@<29%+-[ ++MOO7J)S1IGX*K=PUGE"=W9+.;+;Z&(R55#_G3F-&5*AERI;D=:@X1P(;P%3A6 ++M;<DZ]C4A7>2KP8M%VZ0:!LWD=#?H__`'^G^!_Q,"3NY8M#>1X('V=@/]"S#Z ++MMX)E;F1S=')E86T*96YD;V)J"C8@,"!O8FH@/#P*+U1Y<&4@+T9O;G0*+U-U ++M8G1Y<&4@+U1Y<&4Q"B]%;F-O9&EN9R`Q,#<@,"!2"B]&:7)S=$-H87(@,3$* ++M+TQA<W1#:&%R(#$R,0HO5VED=&AS(#$P."`P(%(*+T)A<V5&;VYT("]91$I) ++M44XK0TU2,3<*+T9O;G1$97-C<FEP=&]R(#0@,"!2"CX^(&5N9&]B:@HT(#`@ ++M;V)J(#P\"B]!<V-E;G0@-CDT"B]#87!(96EG:'0@-C@S"B]$97-C96YT("TQ ++M.34*+T9O;G1.86UE("]91$I)44XK0TU2,3<*+TET86QI8T%N9VQE(#`*+U-T ++M96U6(#4S"B]82&5I9VAT(#0S,0HO1F]N=$)";W@@6RTS,R`M,C4P(#DT-2`W ++M-#E="B]&;&%G<R`T"B]#:&%R4V5T("@O9F8O9FPO02]"+T0O3R]0+V$O8R]E ++M+VDO;"]M+VXO;R]R+W0O=2]V+W<O>2D*+T9O;G1&:6QE(#4@,"!2"CX^(&5N ++M9&]B:@HQ,#@@,"!O8FH*6S4R-2`P(#0Y.2`P(#`@,"`P(#`@,"`P(#`@,"`P ++M(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#`@,"`V.3,@-C4T ++M(#`@-S`W(#`@,"`P(#`@,"`P(#`@,"`P(#`@-S(P(#8R."`P(#`@,"`P(#`@ ++M,"`P(#`@,"`P(#`@,"`P(#`@,"`P(#0U.2`P(#0P-B`P(#0P-B`P(#`@,"`R ++M-3`@,"`P(#(U,"`W-S(@-3$Q(#0U.2`P(#`@,S4T(#`@,S4T(#4Q,2`T.#4@ ++M-C8X(#`@-#@U(%T*96YD;V)J"C$P-R`P(&]B:B`\/`HO5'EP92`O16YC;V1I ++M;F<*+T1I9F9E<F5N8V5S(%L@,"`O+FYO=&1E9B`Q,2]F9B`Q,B\N;F]T9&5F ++M(#$S+V9L(#$T+RYN;W1D968@-C4O02]"(#8W+RYN;W1D968@-C@O1"`V.2\N ++M;F]T9&5F(#<Y+T\O4"`X,2\N;F]T9&5F(#DW+V$@.3@O+FYO=&1E9B`Y.2]C ++M(#$P,"\N;F]T9&5F(#$P,2]E(#$P,B\N;F]T9&5F(#$P-2]I(#$P-B\N;F]T ++M9&5F(#$P."]L+VTO;B]O(#$Q,B\N;F]T9&5F(#$Q-"]R(#$Q-2\N;F]T9&5F ++M(#$Q-B]T+W4O=B]W(#$R,"\N;F]T9&5F(#$R,2]Y(#$R,B\N;F]T9&5F70H^ ++M/B!E;F1O8FH*,3D@,"!O8FH@/#P*+U1Y<&4@+U!A9V5S"B]#;W5N="`V"B]0 ++M87)E;G0@,3`Y(#`@4@HO2VED<R!;,B`P(%(@,C$@,"!2(#,P(#`@4B`S,R`P ++M(%(@,SD@,"!2(#0U(#`@4ET*/CX@96YD;V)J"C4S(#`@;V)J(#P\"B]4>7!E ++M("]086=E<PHO0V]U;G0@-@HO4&%R96YT(#$P.2`P(%(*+TMI9',@6S0X(#`@ ++M4B`U-B`P(%(@-C(@,"!2(#8U(#`@4B`V."`P(%(@-S$@,"!270H^/B!E;F1O ++M8FH*-S8@,"!O8FH@/#P*+U1Y<&4@+U!A9V5S"B]#;W5N="`R"B]087)E;G0@ ++M,3`Y(#`@4@HO2VED<R!;-S0@,"!2(#<X(#`@4ET*/CX@96YD;V)J"C$P.2`P ++M(&]B:B`\/`HO5'EP92`O4&%G97,*+T-O=6YT(#$T"B]+:61S(%LQ.2`P(%(@ ++M-3,@,"!2(#<V(#`@4ET*/CX@96YD;V)J"C$Q,"`P(&]B:B`\/`HO5'EP92`O ++M0V%T86QO9PHO4&%G97,@,3`Y(#`@4@HO4%1%6"Y&=6QL8F%N;F5R("A4:&ES ++M(&ES('!D9E1E6"P@5F5R<VEO;B`S+C$T,34Y+3$N,3!A*0H^/B!E;F1O8FH* ++M,3$Q(#`@;V)J(#P\"B]0<F]D=6-E<B`H<&1F5&58+3$N,3!A*0HO0W)E871O ++M<B`H5&58*0HO0W)E871I;VY$871E("A$.C(P,#,P-C(U,3(S.3`P*0H^/B!E ++M;F1O8FH*>')E9@HP(#$Q,@HP,#`P,#`P,#`P(#8U-3,U(&8@"C`P,#`P,#,U ++M.#,@,#`P,#`@;B`*,#`P,#`P,S0W."`P,#`P,"!N(`HP,#`P,#`P,#`Y(#`P ++M,#`P(&X@"C`P,#`Q-S,Q,3$@,#`P,#`@;B`*,#`P,#$V-SDV-R`P,#`P,"!N ++M(`HP,#`P,3<R.34T(#`P,#`P(&X@"C`P,#`Q-C<P,S0@,#`P,#`@;B`*,#`P ++M,#$U.3(P,B`P,#`P,"!N(`HP,#`P,38V.#<W(#`P,#`P(&X@"C`P,#`Q-3@V ++M-3`@,#`P,#`@;B`*,#`P,#$U-C@S-R`P,#`P,"!N(`HP,#`P,34X-#DP(#`P ++M,#`P(&X@"C`P,#`Q-34W-S8@,#`P,#`@;B`*,#`P,#$T-3@R.2`P,#`P,"!N ++M(`HP,#`P,34U-C$V(#`P,#`P(&X@"C`P,#`Q-#0S-S@@,#`P,#`@;B`*,#`P ++M,#$R-S8Q-2`P,#`P,"!N(`HP,#`P,30T,C(P(#`P,#`P(&X@"C`P,#`Q-S,Y ++M,S0@,#`P,#`@;B`*,#`P,#`P.#,T-2`P,#`P,"!N(`HP,#`P,#`X,C,W(#`P ++M,#`P(&X@"C`P,#`P,#,V.3<@,#`P,#`@;B`*,#`P,#$R-C@S,B`P,#`P,"!N ++M(`HP,#`P,3(Q,#(R(#`P,#`P(&X@"C`P,#`Q,C8V-S0@,#`P,#`@;B`*,#`P ++M,#$R,#$R,B`P,#`P,"!N(`HP,#`P,3`W-C0W(#`P,#`P(&X@"C`P,#`Q,3DY ++M-C0@,#`P,#`@;B`*,#`P,#`Q,C@V-R`P,#`P,"!N(`HP,#`P,#$R-S4Y(#`P ++M,#`P(&X@"C`P,#`P,#@T-3`@,#`P,#`@;B`*,#`P,#`Q-S$T.2`P,#`P,"!N ++M(`HP,#`P,#$W,#0Q(#`P,#`P(&X@"C`P,#`P,3(Y-C`@,#`P,#`@;B`*,#`P ++M,#$P-S,T."`P,#`P,"!N(`HP,#`P,3`U-#DR(#`P,#`P(&X@"C`P,#`Q,#<Q ++M.#@@,#`P,#`@;B`*,#`P,#`R,3(R-R`P,#`P,"!N(`HP,#`P,#(Q,3$Y(#`P ++M,#`P(&X@"C`P,#`P,3<R-30@,#`P,#`@;B`*,#`P,#$P-#`Y-"`P,#`P,"!N ++M(`HP,#`P,#DR-C4R(#`P,#`P(&X@"C`P,#`Q,#,Y,S<@,#`P,#`@;B`*,#`P ++M,#`R-34R-R`P,#`P,"!N(`HP,#`P,#(U-#$Y(#`P,#`P(&X@"C`P,#`P,C$S ++M-38@,#`P,#`@;B`*,#`P,#`R.3DP.2`P,#`P,"!N(`HP,#`P,#(Y.#`Q(#`P ++M,#`P(&X@"C`P,#`P,C4V-#0@,#`P,#`@;B`*,#`P,#`Y,3<Q,"`P,#`P,"!N ++M(`HP,#`P,#@R.#$W(#`P,#`P(&X@"C`P,#`P.3$U-30@,#`P,#`@;B`*,#`P ++M,#$W-#`T,R`P,#`P,"!N(`HP,#`P,#4R,3DY(#`P,#`P(&X@"C`P,#`P,S0R ++M,C(@,#`P,#`@;B`*,#`P,#`S-#$Q-"`P,#`P,"!N(`HP,#`P,#,P,#`R(#`P ++M,#`P(&X@"C`P,#`P.#$Y-S`@,#`P,#`@;B`*,#`P,#`W-#DU,2`P,#`P,"!N ++M(`HP,#`P,#@Q.#$R(#`P,#`P(&X@"C`P,#`P,S<Y,S@@,#`P,#`@;B`*,#`P ++M,#`S-S@S,"`P,#`P,"!N(`HP,#`P,#,T,S$U(#`P,#`P(&X@"C`P,#`P-#(Q ++M,#@@,#`P,#`@;B`*,#`P,#`T,C`P,"`P,#`P,"!N(`HP,#`P,#,X,#0S(#`P ++M,#`P(&X@"C`P,#`P-#8T-3$@,#`P,#`@;B`*,#`P,#`T-C,T,R`P,#`P,"!N ++M(`HP,#`P,#0R,3@Y(#`P,#`P(&X@"C`P,#`P-3`V,SD@,#`P,#`@;B`*,#`P ++M,#`U,#4S,2`P,#`P,"!N(`HP,#`P,#0V-30T(#`P,#`P(&X@"C`P,#`P-3$V ++M.#`@,#`P,#`@;B`*,#`P,#`U,34W,B`P,#`P,"!N(`HP,#`P,#4P-S,R(#`P ++M,#`P(&X@"C`P,#`Q-S0Q-3,@,#`P,#`@;B`*,#`P,#`W-#@U-2`P,#`P,"!N ++M(`HP,#`P,#4R,#DQ(#`P,#`P(&X@"C`P,#`P-3$W-C$@,#`P,#`@;B`*,#`P ++M,#`U-#$Y-R`P,#`P,"!N(`HP,#`P,#4T-#$U(#`P,#`P(&X@"C`P,#`P-30X ++M-#4@,#`P,#`@;B`*,#`P,#`U-#DQ-R`P,#`P,"!N(`HP,#`P,#4T.34R(#`P ++M,#`P(&X@"C`P,#`P-34Q-#8@,#`P,#`@;B`*,#`P,#`U-S@R,2`P,#`P,"!N ++M(`HP,#`P,#@R-#8W(#`P,#`P(&X@"C`P,#`P.#(R-#(@,#`P,#`@;B`*,#`P ++M,#`Y,C(X-B`P,#`P,"!N(`HP,#`P,#DR,#(V(#`P,#`P(&X@"C`P,#`Q,#0Y ++M,34@,#`P,#`@;B`*,#`P,#$P-#4X,B`P,#`P,"!N(`HP,#`P,3`W-38T(#`P ++M,#`P(&X@"C`P,#`Q,#<U-#$@,#`P,#`@;B`*,#`P,#$R,#<P,R`P,#`P,"!N ++M(`HP,#`P,3(P-#,R(#`P,#`P(&X@"C`P,#`Q,C<S,C<@,#`P,#`@;B`*,#`P ++M,#$R-S`Y-B`P,#`P,"!N(`HP,#`P,30U,S$P(#`P,#`P(&X@"C`P,#`Q-#0X ++M.3D@,#`P,#`@;B`*,#`P,#$U-C0V-B`P,#`P,"!N(`HP,#`P,34V,3$Y(#`P ++M,#`P(&X@"C`P,#`Q-3DP-S@@,#`P,#`@;B`*,#`P,#$U.#@W-"`P,#`P,"!N ++M(`HP,#`P,38W-3<P(#`P,#`P(&X@"C`P,#`Q-C<S,C(@,#`P,#`@;B`*,#`P ++M,#$W,S8R.2`P,#`P,"!N(`HP,#`P,3<S,S0U(#`P,#`P(&X@"C`P,#`Q-S0R ++M,S4@,#`P,#`@;B`*,#`P,#$W-#,Q,"`P,#`P,"!N(`HP,#`P,3<T-#(P(#`P ++M,#`P(&X@"G1R86EL97(*/#P*+U-I>F4@,3$R"B]2;V]T(#$Q,"`P(%(*+TEN ++E9F\@,3$Q(#`@4@H^/@IS=&%R='AR968*,3<T-3$V"B4E14]&"@`` ++` ++end +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/report/homepage.html gcc-4.0.2/gcc/bounds/report/homepage.html +--- gcc-4.0.2.org/gcc/bounds/report/homepage.html 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/report/homepage.html 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,17 @@ ++<TITLE>Richard Jones's Homepage</TITLE> ++ ++<H1>Richard Jones's Homepage</H1> ++ ++<P> ++This page is still under construction. Please click on a subject below. ++</P> ++ ++<H>Subjects</H> ++ ++<LI> ++<A HREF="bounds-checking.html"> ++Extensions to GCC to add bounds checking and pointer checking to C. ++</A> ++</LI> ++ ++<P> <I> rjones@orchestream.com </I> </P> +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/report/README gcc-4.0.2/gcc/bounds/report/README +--- gcc-4.0.2.org/gcc/bounds/report/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/report/README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,13 @@ ++There files contain various drafts of papers about this project. The files ++of interest are: ++ ++bcrep2.doc ++ - Report & manual in M$-Word 6 format. ++ ++bcrep2.ps ++ - Same in PostScript format (US sized letter paper, ie. 8.5x11"). ++ ++cred.pdf ++ - Description of the out of bounds code ++ ++To extract the files cred.pdf.uu and reports.uu use the uudecode program. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/report/reports.uu gcc-4.0.2/gcc/bounds/report/reports.uu +--- gcc-4.0.2.org/gcc/bounds/report/reports.uu 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/report/reports.uu 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,9888 @@ ++begin 666 reports.tar.bz2 ++M0EIH.3%!62936;SC(;(">W1_____________________________________ ++M________Y&@OAO</H/3L^^MUX"^TB2M`%F``&U:)VTZ,`H````````````!( ++M$HI*V(L`$0)L8=YYM=EX>^\^N^?3>L[:VT5K0S5HA*MM=,]JV[<0O0UZ]>NZ ++M:>P>N7:J3VW>JY/>V<XV[5M;$M;MBW=RK=FYVL;94[>E*'5TS>X-;V@%```` ++M``('IM`8H5`K0`#+Z``<"`$HM#*BW'!?``+'H!@T6T`#0T``T`ID*!0:`&AH ++M'T``!T```'Q,O)T`#O;KSWP)NW```H``=```8U@`::`*`%`H%44%!N:$/JV! ++M[``````>O9D[L;M54*ZWR`&V-JP`>@`D```````````#0``'T``````Z``#M ++M.;WV[Y[X6S7W6H````Y*4*`"@HD*24(E4`"0A);&HZH`!2FB@``````R&+;B ++M@#H('1T0\^SY[[L'0*`.@`.3.[)[Z^4,ZS>6]ZB'S`#>QP`?=/@"*@-```)4 ++M````!]L```*```]!;````H```>M````H```````Z!0;SGV^?'0!Z```'OL`# ++MIH`!X=G9RX`.@*``T#0"@(^PT"(``^V"^",4VP`%]@76Z`'MOKH`=Y]P``!] ++M``!T#O,``2``"@``4D4Y```&0`````\R>^@?=O@```,(!!3OLY]`?>SY?#P? ++M8X```````````````````````/0/H```#/K````````&O/H/NV^3@(Y8%++8 ++MM5+K*NK-RP2-V=78S8:[;36J?``,P7;"JKT9[[N4W$X'WT^53JV&0[M-VN"J ++MV9AF[-H941!V.X[;=FK;6[IVTUH7"V<H((.@`RC;<QUJ2N54TVQ`"@"(=VIV ++M;:TI)R3LVW0DW;DYTSDW8PN&`/=8:&]8``'0!?<I4I5"5(W:`F:)L5;-36C* ++M^%T%5(2Y<L.5MJ"UJJEJ`!J^SET>#:A5`5539D'O`SJ0/0(QAHB%#?>^^O:^ ++MN6-;;T`KNS>%*/-?/G@``%``>BB@`%````0H^F'V'T+,<;CK:X6Y?>%PXXO. ++M]XQYA>[<`7H8<U8````V>^M[KQ[A[QT-(V`````````-```!'?7O#[*@"JE0 ++M=]SPV/1*H"I;.`!WW:E"*%[/`#W.\`HJ2UW@\Y)`HH/.\$[)Z4!0%>\!SJ** ++M``[W@O/*`*4]O`X``U1QP-TZ#5`/N\7N:=Z=`7KN```#D'0`%``"@?0`%`#/ ++MKTUPNKX*"S@/GO2/7>.YZ&VXP-%][Q]OGU5NO'MX9KWB;U0GG>%N>M>'O+M> ++M>`NN]GRA#X![)@``````]`H````!707J^X/>^Q[MX`YO1M>>/'/>VF>/<[W= ++M<>%U>O#>!WKQ,X&TXK.`=AVS<)NSUSP9B7QV^^\[;P!Z>;[@`!0```````!U ++M[;@H]T-G`N?08W`X/>.&A7:+MVAW5*KMPG.V;<)IR;<+ET7&]ZF]3PT!NNVQ ++M\WL+NP`>NA0HE54H`"@D!1($@4````[RP[S[&KWAO=KQ.\/.>;."WKW9/#NK ++ML7#-V#BW32[H#M>VKAF]>VN\```YNL^>A:`];VH```````````"]]P\\^VUP ++M\WGFW@`[<UJX`9O7J[>&TCFA@HB=M#><X6X,]4O<+A3G'<<VVX;W;V??5"`` ++M>]Z7`````````0@```=[N.]QM7`N["<3#M<=]UEYY[Q>\\O=>*YXV[5>[O#Q ++MG>\;P][O`%[VKX1'AH">^C<``/H````-```"?6/,/93-U`6X5<-I=.-U*[[P ++M<Z]8X7.IC@;G>[/`AO+@NO;UX/;M6^\1`!O8`````#02``-```````````&[ ++M#N\+AM*G<.?/>]H#QKMQ=U6<%W-N,X.9P;=O=X=E['`,Y[S[Z%[```'M@``` ++M`*H]9UGP````=@+2QYYF@!0)V%[#MJ'.[@,J]`T77<:H&ZP.0!"55WGIW7A9 ++M@=[!Z]M[S>=8]-QCI1.P=X]'WSKVK'PG+N'D[WS=/O*ZIFGMO>V>^#=YKULC ++M3$8YJVKG#G,4:AM+#//#R9SJ]:]U;X^)]':]=V<4WW:=XW'K0[ZZG?6<7#GW ++M/7N-6"]>X-VWL.G20`&UY[P*JDB252!(;XO?6UC>+4^UU.>][O=INJW/#X/I ++M3O@<YT"MF0M[FAT4`H"04-:4$*6K&[9*"J,)K6T^^DN)OKTCY*DD/K*&/O-> ++MNTI1?<VY!CSM]YKAK?7%&U8>O>:FBDGWOIV[@=[WV<UA70->^W7U4&W'G;M+ ++M;;W:,G6DWU;NM$:V4R\YTY[G;N<'NV=Z"DX8``]-`4%IYJSE6@GH[N[.I5HT ++MV+&JWUZU4IIK/>H]RXY`14"Q:IG7=7;X79?>]][+9=WU[HD>SC5+N%7=S$S4 ++M;&Z@2:TN[ER^H![YV^B[?'7D[E.EM+KM;:PV]:][6+K`)?09%][G?<T=CH!H ++M!W19)-5I'0``&;QF>\K,R]>.0DFF::(I+8:$5M>XJYNS1MFF)EMK'7N.ZSZ] ++M?/FK:VQOBYP:ZW:79W3UFLX]`2)#D:QTQ0`X9R[;&ZX%")U$9-0"0'@^/0^I ++MXG?=O>BM,L5$U-M-0-F^TV=FM%NOJ7'SZZ]J]:=9DRUM(;@=AU-:I?+GS[OO ++M=IEXVP8B6BB)88-B[U4FEH\]U3PR>98#6VKHE>8>A0.S`]VVK6:W#UN\5;XW ++M5)';;8M8&9B/;WK:]0*V]GN]LP(3.KC./>@/D9-`=74^+YIT`!U[['?6T`#0 ++M`!\@`&@``%*H!0!0!T!IH-;?<`:=[Q0N]``H%.@:!Z>[!5`ZVTV```"UT,N- ++M'IKK6C)6]R3DU0HTHK>-B$H0@"`!``!-````":8$&@TT`````1ID8F3(9,$` ++M```&@!H&@`T`F``````"#3$!*1"$)H0:)D4S-3*FQ,T(GJ/4]3(!B``&AH`! ++MZ@&AH`````:``````````````!H!*>BA$031":4\IZ:FU4_4V-)/:C04:?DH ++M\H?I30\H9I-E-E/4>4R'J/*`#:FAIO5`'J`T--#U!H,@-```````````!H`` ++MA*)$)`"*;24WD*GY4_5/]13RGHU/49&VE#]3)/:H/4:/4!HT_40>DT&$>D:- ++M-#30T``````-`&AB!B``T`-&@````!"DA"`F@!`4\C0!H@TQ`)M`&D8$(;31 ++M/328)M-!4_3%/$](R94_:F3%/4;U)IFIJ-/!H:DVT*?JGZ3U(_$I^HT3]2-/ ++M:)ZIZFU/4'Z4VIZ@/4;TDVFH)-2$`00("`33$"--&(9`TFFGI,*,T3-4F]#4 ++MS(U,2/3TT4\4VH\IXFU0/4](VIH]3:FF(]3RC1ZFAID/4/4&@-&AHT,TC1D] ++M1H!H]0Q"3_SQ'XX6!/X8D!`FG81$)_*,(@B$KJDHCP2H255ZR05<J94.`F+6 ++MD;E4S+M_5^/XCZW6K:=>=S:Y6[`\B@Y\<LM#1SM)G)@A107O:[E;]FX2^4AB ++MV+ZYX*"8O=#("\A/ZQ:6#7);2TGQ1)^X3+BSEMK?1EJOM65[[#G"8I5$1#,! ++MP%`4!"*)S!(%""!-+YJ/\7#CA-Q$2+['I.J;/KSY[N^5554555Q)=8%`5E9' ++MJ9Z^&@@3(FUOOB/B$4G2.$&>@?KGZ(CO^8Y[EN@WO632);6U<J7;L*BY.5EY ++MD@F;<0,O!,]@YV?R-!H=%GL8T>=6<3AI*^@TNFT>GM$VAU&IU6KUFMC3796O ++MV&QV6SVFUVVWT*&XSD,02J(VYXC=<3N]YN+,-[I-]L]_?\#6Z*S92`FK!SC4 ++MITKG%QE%&.-41-F(HX=I;##*<_-&/SOQ=MPJBZX/FFH_O>\^WA^BB;\X&!>@ ++M^;@[:L`:745'(@3D:YDOI)("1(@/1$W8FRP-7MXTH_\WB+,@AXI^+X4:1JBJ ++M@H?&_15_1\O%_&?;/O??=^*?\("CDJO$>RLJJ*?G<\0++V_.]"%/YOSH?]_3 ++M9D12-/_/0:(7]9*@1_LD`<CQ`E'B(O[4#]R#?X507_:EIE_TA_M__5(('_16 ++M$B1Z(*H%C_R"/_W"6.-74JZ_@R0B75"O!ZWNPU)`G'`'_.VO(.UCVV_V+X=: ++M?]AH/'106W$Y156<0$,W6^4\R!TVI"9Z)I01-OKI>+UIHESR`;6'@]03[81] ++M<0-9+*)HH@B!"O`K4#U11512BHODVF2/[M&U51'S@T!-$@D3QJD4'!)#7_DA ++M_R5=O=>0./QF]5_`?R3P)?'\GD#J0T_P\BK$R-=;_%E2+@'PL56M);T#-IEU ++MI/XO,UP-ANB<,B9-#634J,^MAE`*8F91DE^]+,V4#:!@!Q##L6F+-9<@O)+Z ++MPC6*D0U-_I[-M-;<U+*N:%K32UV^+4-J:KGP^/_KLB?^$7?FUX239A!9D(4% ++M30Q(E)11%0O%0\A-K3V.&7O65']7Y<33PSG>^TD)#/@0`ZPA^_;[;V;ZJ(A$ ++M)'T(;H-V'/A@!SP<Z%X.;#F@Y8-"'S*H9-["!;V$%H,(,$'Q8(7@Z\./#-#K ++MPZH,H)*>1#,#KPT@:8.O#KPZ\.O#FPY,.O#KPZ\.O#KPK87DPYL.P#L`[`.@ ++M#L`[`.P#L`[`.P#L`ISC.,\9[M5SC.SM%G\_N7:(-GLM)F0@X'HG">#JQS7L ++M8O*":GBN4I6UL.9U!8@(@7^BLB/_79+-TKA3L=UI8R^(M/I=1#37>/V$@E/_ ++MLIW72B6`P7B;%_8J.1.T1A-'M6D,!5]/Z>G/17=%VWX#>"]05F1$<J,E**`_ ++M<J"BJL2#`JOLP^34#\_YOW/]_^Y>]_]'<#WQ?CGH;6NZ]L-"/\$.\-:':%3^ ++M+Q^HT(_;]GVUI!`/]*B"'2J"(!$B@@&PU&EXGD<;*%`J:%%VQO70Z#.KC1M1 ++M$['M[(\A[(;W0<!<0(OB_7Y]<7=T!<@24@!617B1J%D1$!.*X%?A<C%75`C5 ++M`VU3$'B6$$02M6K/XJNR3J(@6!%1$1$0-A5W^]BBXNN!D*B>5FLE<1D1*]:M ++MP[,$$1,%%!-]N^-W6_ON/MK(FX%$5=VJKDJ(PXU3"J,R'RM)][ZE]1?>>SU> ++MM03X/7H#]O`/N"P?\T!YV5J@!/5YL0#I(]@?4]W-(=G9@I_%Y8(#\<@51$$0 ++MET!(6,'BI\?,Q_53D,9D!$0T:B(65J1C(B"(3TF^=IE`1+Y40#!5`$ZB6T"< ++MP"8!<G%_$T@=<@@\^9RW/K_\GCET!!<E!NP[43`/&0F'^MD0@3X<@CQ*"SS# ++M)A\:YV?2(L<,CO^S@3@BH")V&<#/M1(<,/P&.;'[+S["B9<T'(R'IL=;$KF< ++ME`><K@"(!?18"+-5R]56T.F+^!2BEZE``0)_^J'-"A`L1X2#^2545`Q.;*8N ++M[A&B(`BHEHB[!Q0:1@PJ#`GSH6S#??"<S"._*R"`F`\##FKZ(C@"&B5<0=>V ++MX[-$$03]^?)-G2FL<"3EI!LI40-N*J*)EG%L;@YZ<^"FAVYLK]ED1-OI-B:1 ++M]4G_MJ$01+"`B(B%6*L1V7"4&)NQ<\((@CP-."2H_7IJ]RHJ^UC$.D5$VR2L ++M=#ODEF?T2/D3LJB`(B($$21%ZAP")RR>^><BEM$,^!R!JG(XWDID(C.++.'N ++M8<G!(@[_3Z3P,;9N'KF*QBY6FW$!W0:!U199=''(Z#LV#_#YV2:%58LIJ.JG ++MVNXC<O-:UT*TNP>^-O-_):RIEZ]/]WX8R]E4?@M:_][;K1Y?6R.N7LML(:O" ++M+T;:<)PL<(VFB8T31X?$??^(?$71K#]9],P?C@R\1BA?M#XP?'GITY<+YO;. ++M'H!L/(Y=9JNYI5+NR&CDG)D=)"3G>?(KX)R`:#/Y!YM/L[2L<8>Z8(R32FAZ ++MDM=D5-T;'#X_55L_:YHQ03T'GRUCZ?I3.KU/0$:!*=86.44]"<*(1/1'HRYZ ++M0A@5;'):#:<*IZ/TV'QVTY7D(X^XTJ(;#855TVMVHF,_G3$],3V<00Z(].<E ++MZJ<@AZDV[L]ZH@!@ZA+[><=K]<4DGJQ3O[[UAQAZT@!`5#UPH)Z\7V!^H:/D ++MCV0Y.1/9FF\X9.#Y4C]H=L,"(GM3M2+VIK?;'DCQ#F)3N2MT!YHY8]N1":X/ ++M<&R\L=MTOESDN^.>[#W*]DGNN^1"J)[L\`Z`<(>\/>F^]\+[].-SZ>C)!PM< ++M.I$8-WP?%.S/@'P2(^$*AU`J_#,)/B"O$\P>,5:OQ3XQV_QSY!\DF$^4:?Y: ++M.^84"?-/G'CD/GGT#$^B>O/I$2("?3*/J'U/-J?5.8_^3!/K&@]^?7/L'V2J ++M(?:,'PS[9]P^2?)C$^[]YA/O_@8/P?A_%^/\GY>L_-^?XWRYQ#\_Z/T.1/T^ ++M+^K?'R>QY6/]7??:_7D'[(XQ/V>R_;^[Z7@_O^7+/_#[?CPQ/XU41`_DJ?S_ ++MI_7^WT_[Q?WK'^/?_Y@'^>T_SB+_#]TG[_(?D7]7Z:!/\\#_+@`_;Z'\OZ?O ++M_Y[I!/\R_F3`_8@WM/M._T541/]_P8_Y_TP$$!.J_E3_)#A?[8_]]G^?]J0Y ++M__6Q=_YO\?]\T`A_OA@!_[3V?("")_WT?_?_:)!,$D)O4_4\U%\KBC^15_]^ ++M&7S7]]?8,PPAA6)_8_>H_]8^_4_3:L_\_U_K_&YR/JX69AX'X\*O4_STW0Y" ++MU[[\UK_=Z]\OXOP?>&0@%\@(J""B*J$$G_0^L?ZZ)<FUK7O"S`_^FY<N?::2 ++MV<(>Z,'9WM_['&MQ?[0'']'WK9$EAP;FRH\9RP<E?V/ZN0!`,MKF?_NVJ^6> ++M9G>H2?;?^HPD^VSW2LS,0^9'/E=L=75OK?]-I4^;*GN2J?N?[F"_UI]0J'M_ ++M7MZ540\YX2,(>:5`1-\J(9^7.U&R^9O,32\+^<XB&$)[!\='2'L\]M68/T?I ++M?^C39G^Y#TA1>?/`3[V0#Z??@+P2O]R'XWQ?JNE_JW^G'^7[C^HT@_R84^7' ++MY_[_!7]K*H'?"@IY)?FGC_^]ON_6;A]QQKC>-;%66)##4_\HA.*JH)/K,',= ++MAP$5F!`9[<7L,\9Z++$$BSE$$\5!?P+QGR&("HG<LF6[3*"2D^UV>BAME*ZA ++MK2/\X0B0(D!F$XQF%&Q^V312$/JD,D1/)Y\0P@R$#L$=D>@]-2;9F:_EU4<< ++M=ETR8+#&E5$/\*('X5`$+BDDH\"PT+X0][&I3KA3=(R.[_JPV[\!#\B`\\!W ++MR`__E*?B2'_L^L3!I?WD@_P(`'ZZ23^O_E40AX(>#V25VHO[X?BM[4A`/_'" ++MAXKV_^#%_UX^R"`]B%5/9)>R>Z$[Y%.Y1CX8_!+TRJ'W_]/^E_I;'^[*/^\, ++M]\=I^GSOTA@;7>"Z+`#[^#\>$/JPH'*0$_IR"1*1J&US,+2:>$JHB`B::1@A ++M5Q)ILZ)$1"A0$;(:143)\SW/^.8[.VW,R`65446Q4<#*'/_B^YGL>`DEZ1E< ++M)*J"$7Q/%=U*I'0W2.:QSG^/W?\N?\CD4K*"5E01"M\-@./4(*1,JQ9[$XCB ++M.,`3^?%[V:::;8;IFHHHBDD%%56966/7?.J^C]$P2+C*B[)D=AX;G44.J66L ++MZ)@/I^.WI53C%(3N-/:@94*E1YPJ6^-M6\WQ[)*B*(HBBF'B883,ZYBQU%J0 ++MCJ<9V.NCP>6&7AZ_PGE@IHQ,#8SQ_C_!RLJ#T14SF1)[:L^W=N8AQNXC0W%Z ++M3<[__?(?D_&GX_6>:H0M*A:4`1`,FWEMAY6@XOG\;GYL.^9/\J<76'`@&"9[ ++MY^9/AMB@"&R<_L_K/C>]2^][WCL6)["A_94/!\PP5JZUZ[T-+8L5=+4Z3)D# ++MB?ZLAILCSG0]\G%1`EJTUI41`$P5T:\QQVP<AZ[03N">>?`P-!4R50DP.:OW ++M:;7W.H>5!:K`2IEEWE\W^W'1)$J)I!-(,##)$DJ7=G:F%/H29MSS%@0L3D]2 ++MI51^>O2?O_7Z;YLL$0HEHU%ZM%J/V[G\G1=#R?S^U^;,E9*HR(()?J'W.\DW ++MOI(!;4251`_^;U'IGHXA1H\M!+_[%2IV6YG$1$$T"I11J=Q/`X'7]QVV^O1! ++M,LMAA#9X;`0WV4VBOGMT#[,8RHE_.@UE110.040]JJ3JDDCJNLFF"/_BIG_Q ++M8?K:+D^VY#C*>;U^IV&JO^3V';[7P/^]SY'SODNB[#>=?W'=\OF9`F(,V"HF ++M<HD2D.(78N!H\(W_E$_?P_PYZ275\FP;(17T,B`B`BY65QS^-XUN!\WVK@FF ++MTNNU:`D\0D_8;1-_Y/DZ(T6B<G$$U#XU(XT91!$$CIDQ^BEY7^L@'X>W]Y33 ++M!$3`5JE3;TO_EC_-N?BJ'UX\%:4OT\H,,PR#JM[;]96T$:!RD@QY%41J^3W* ++M65Y/@_6Y#J>IG3#6A;7!.EXNYFW;MTS=93U'^ZAUMWE5T7X.?R=!()=NVL_; ++MKU_==?5Z+W]`=-24WW)E&QSHO2YYOP+]:@$!!E0!!`%G;(N48SQ,:I<JZBI1 ++M^+TS2H`*H(E2I11RW0?FOM#WDR$\Z9^WC*9_F[I=NU>]H^1XW;.3B!*K(A6; ++M7UJERK=WTH'><+]NGTOD]K&)6K:4S+-_?]%(B(;3\WE7"$\^-?/!$0)T2>9P ++M@>O7?_9^7M^1@4JB4TTN"QTW(:WMTO(1(G-%K%72LK#KBK`1$W/^.*P4_-C1 ++M(6[=JU2B(.W@I")X@H5JEC">(<[_MN3W/E/)[[Z42%2KKG`5*E3">@70J5') ++M-,T<;"0[9B$2V1)N)@=KX)?_>W,!)IK\QWATN/ZDX[[G;1!---?Y_9XW#Z#2 ++MSSHA///M-)TW<5)._R;U3[L$I*:9?>_WFFN>6VOA)0E%%&UUT,K$IX.3`V'@ ++ML:%:::<9X;BI32'7P26663IN^T_U(Y#DI99=ES&WV=]J;.>ZO8'U/CUDKUJU ++M6VV?+,=BO7J[S!B(4TSZ?ASZRW+(J!-WS&AEL5U6.`)333L:E3CMKY+`F_MH ++M6*5II:5?,PB<,+%7JU*GR(CLU))*)9.[B0.1ZO:>)U,">>K5Q><X,^;*2DLN ++M?YC"FY:0.BF9)II&-=F\KR>ND`(I+%/$\.&FC&CLU,CCIX_)*<I+++Y<UDM6 ++MU\>?UO#Z3C?75A$JU;.MV6J]!W_%RG<+D<O^EQ33SFFSW1X%;8FUF0"GF4], ++MX#?GZZ_W]C`L6*U-/J(I4G77^_TWU^UC*.!?8N_O7V_Y[7ZKU^[];:\KWMHX ++M[_ZT6M_:=:_]AV7F&JJ)T/6^:LUN>^[[;<_9Y"<LZOF\:Q6K?X[GIN!OZ$TE ++M/,\Q4Y/0:_D38:/$T5/PMVQQVA_9D/0XG8,6[=JM6X,6_][5<?P\GW?4U.WB ++M*M7"K:3?Q`$7\/67WX.<B(D)Y\CF9]M-V'L=G[#44GU0J5+5,*/J=9P/:0)9 ++M97<USVXTO2P2924EZ;JK[4V)_8/FT?4%!11%-'TWZ(R..CG.3M%JMU<H'C*3 ++M337-C,397$:GX'/>DI0]-\]BK5IU]G;T;?UW8\IJ:`2IV+%2I@7*M2G=3]O- ++MZM2=2>?KAW2R=WGL+H['/R)11C6DM!?XO2I]_^_NN_L>LZ"J6:U:K3TD23S_ ++M_.))-2']^IX$>VD)$7(S<G^_D9OS1DFR]WZ[:]U<C.(DG_,\=NX?T\UZJ)(K ++M^KUNEJ^Y:,CC=C>0@B")[=>,4B,K@:.F3:^;Y;YO<SDXLTI5K>3Z5HA8XJ>K ++MA'>R/630)IN.L[^FI3Z64EEP999-SS?E_YSSI//.<.HLNDZ^0K\\Q--V#H35 ++MLB4^O[#7R$Y/-P9NI$59]UZ/A?ZJ?]]MUWFZQ6K4T<!T_DO,=;]GR/[*"B7X ++M9B];ZG_$O`E)9=1H;$T0DU>;C]5`2>?IY\^OG\W1_%IFI4GGTTLN9R'0<A\/ ++MIISHM[4[CA0*U;6.NUJWX339[$2SY^I4G*E2F;70]DL+ZKU:]5?U>+":MRG( ++M^8_-43@*6:V77JU=U4ZSN^_]S^JK4!*5N8>^O4?&/#]GH:W)SHE%$\^!\3FO ++M3[G#F)ILDRKT7;1F+(PAGL.MZGF>^M]OR?Y:9RFG6Z&I3>^+J>'ZGEN+I*:; ++MZG1\Y/X?H?83(33</G99:TTV_TDY//-V/=R_?^=($8*@"@BAS$H#M1LPW=C[ ++M/U*<GW---")?"BLMZR;+;GBX'52$MJ::67YG$32DIU7)5-AR;X^A[^4E]H33 ++M%2;"Z3RW63$QT^/-'Y5/*^V\?0><G"<F..XCIB'&8%NV/0T:H3%F>>::::Y9 ++M[#)\2D2DI:J2=#\)Z'2R^B<2DO-+L#FBW=XNX9^[8KV[';:SX'Q^9X_N<VZ7 ++M2S9L6,"L=)(>5['H\KJZYLHRJ4W]_K:J8%:GY^7WGCTF*)41LG(U*)DV+%B7 ++MEMQO*:"DUE/5W+D]S9G$]3S-!03SG"M\9TE3SV-]GOZ"@PJ:*)Y=Q\/23">^ ++MZMBA5HFO8NRT7R/8T4<U0E%F\ZBS11V5'J8P)IINAA`A-6Z.CGN(RN7X?,]A ++M049U-,\W53\=O*-304+K2N:BW?=3WM'ZI28F+-XHLTZ:GZIV=3\6BJ%0J+IN ++M(V%8ZOIZN_^AY2]Y^HFKSU%Z?\4N;+I-).32Y@7/N>AZ>?X'#IHZ6DP==J.= ++MU'$<1&B`GD=K['45NGB*>CUU2FFFG'E"6:5W?7^_\MK8$E61=KGO_>:ZVKQ^ ++MXG)YN6Z!_N)62*I#0O/`[>/E/-9M,:3]%14TFXQ>OJTT3D\I7XJ;G??V/1>W ++MF)IM>DGG.._ITB>WPYYR>OZV9X]]BASQ#VWV\71/(&@;#WDW/<NG?Q$@:F,X ++MGF*VA.3YOC-EW%!043SSVIL362DI:K2VIMIO.+\GX^5E)24E-FI9JU:G75/G ++M9GL.=Q*M4J5#1IS4!.[L_;X^:$Q+:M%K=\??Z'D-)/+*1N$R_EML\/4Z:K=^ ++M9\?F*^GW66F@K5JU\5JNHK7UJON90^E5ZK1^AA4)L_RW/[KCNNR*::>-T56K ++M52YD\YOKVLOK5CK?-VN8KUZWZ*]6K4Z2^K4T=/PZE-%O2Z/5]#3BWN1SZ9_< ++MTTF'1>O<"I31OM%W%!1H:9J_(:'L9_%_'\6BBU9GFY#?XFRXCH)YTY_B:,#? ++M<#6[GJ3?][MSI-CAUJQ5HHSNSX@[7O)93+")PAO.P]OSTLNLCF-YJM-[?K_6 ++M33<C--+I>S-K/[?_4DF#''D15=!(B<-95Z3D=/G_U<#;\I)+)"&+Y3W\:1_@ ++MZI[WJ=MQK#FO#G&XXWF'O@Q\.*#H+FY/[_)<E!$B6[R#MAJ>!X%&-H*.9M5Z ++ME!Q--'8?1H^O1--,:W,]F27N>FFEE)33\E&8/0QD9N80U<442]"M:?7Z&C4[ ++M70U98XM%N_G$G%[3@^%-8VVUF>\HAJXM!8IDL>%]]VG6@GLS5)]WS?FNUM3H ++MB!2M!P>!D[:M<+EC1UKM>GWWL6^Y\MBN5LFM6O4T_FW>-/.;"U+%LXHKU6.W ++M3S'4>%Q'DYYYRI-5XOM9^\EEK1U;?"W_!]KN9IM5JJ'\;ETT30E4U4N>DX&# ++MEZ^24JRRXE\:2/G*)W3$UBI+++++VDP:12IGI]'^B/*XB1)+_HI*\<<=F*'M ++M,V**+)DV#R[!=9FWLO+WM?L.]G2>S>GEETWL^IEEDT>RQNLW31QYZW5M58\" ++M1$]WH<]%/6Q:)X<;K)^?IXYT^]TN;Q-2^1+=2INZM``?X.M^_6?6JU**-'^? ++MH\Q&_3U5-!1<IL;+IJ/12227U@XG18F`E/L::><T]2I7J:.I3QOG=7W<TQ-M ++MK6RY^U/U7,8E'F*4$I)R>O?V.:-/]>GVT\YQY1,XDC][P_P?2F",6]7KFLL< ++M9-W.>_9@5JW[J@GTJQ<KUL_7X%C0;&<L^H]CDV[7&1UR^FSMM\'G\S4\[,3% ++M]/Q<WG(D1.*Q>BUE,--BX%J^#DED[Z2/%Y,EKWUC\^'/E<'LJ4ORB>Q1--[^ ++M?9_4:C;TE(HB`EVUA:BK:YOXW6RS+HIR6_E"Z76]>?<_#330B4T5Z*($,OO( ++MBR5HZV!GIIMA(1QPQ(VCY74<O1'%$<SNXHCA:S-D#S?D>SG>*3-'':=%WK1B ++MTI'R-G0;WO99+=GF)9/T=C&@(815CAK).8O21H*`'5Y*JEK"NZ_[&9I>UZ#D ++M_0ZRIGU!$2BY8YFUEUZU7K:VLK];BM5IS-;4^CLZN)//-AJW46;'A:*+T'W= ++MSY_JM%\#J-5L,RWU]I`Y3`XV^Z;4<E1;025053`49R4S+)#*)/H88$:#(<+T ++M^[U?P_]7^G_K_['W'4=:!#:Q3`?LK^;.#X8AW-O8&1B?2\6O_#]YQ+VW>XM> ++MUJ<9M+["KZWZWC^N^;T_N\GP\[A5-W@8NX,7<<5L][<Z`_1<N>4\"UN.?N>! ++M5S]34\M@S[CW/Z?T^-F4XN''''I1(+5-=HM]B:/1[KZWN^J-/I]#GY\"7+FU ++M>!@6K4]O1:*IHM%J[^363@*B%DE$<,HJH"HY`1E!#1QX]_S-76WM'J;_/W^L ++MO]5IM+G:S+RLO+QLO,S=5K<?4:K,TFLRL[3:K5:S0:;3ZC4ZO6Z?4ZS6:S6: ++MW6VZN%8UE.ATN?S]FI@ZC08EC(L96IR\#0ZK3YF#E:+#T.9H,[.UFKS=!J]# ++MI]#H=)I=5J-7IM/J]5J]7K-;=HUF=>O9U]8J9IFYN;J;-S`T^MU%VD2V(EP$ ++M#"9B@I:`H/:CY\'TQ\N^DH#Z'T/7P^]\;W.0#M(\Z@B3^XNA[O_EW#['1P,P ++M_V`+Y6_8^(3`C$LLR$&9,!XC&,YE7/O09EF`;9^[_=]RH%^@4H_&P/P![!^X ++M\!V'AD>WS]+%7\SF#P/CQ=@?]4_3]G[6,Q/J=W8/*!(_HPG6$)M[XVM?R8=, ++M`&JF*Z6-(O@.!BBK12(=I>J$5Z@>K0Y!Z'K>&#@@@'%?0")R(?F3K4E0<)75 ++M`[84/LH/[,`>['/_]&0P\!D7_A][]#K+9ZZAYO,3=>X?U__[)#<!]#X7[:]_ ++M_3_QQD\G\?OZ/B&?5\BOR@54@Y80B0_?$"@H8(/Y^,0\OA$P.",9:'(:U$Z^ ++MM6PA(8:8TV0EA">I4'!]P*"@G#"[Z=`\D$B.`TAN!Y,5^?T_\W5YO1BG"Z$T ++M.LYG[1#="#Q@BS$>@R)`ED83[SV1,Q;PD;#D]6E#T040NWP.-Z)1F6WUM)#[ ++M$"Q9?F1:,JM:2D12U/_CJ*,@RPLI"BJ+L_S_'L_G_`=.W8/]N>+R]1Y?\4^, ++M."O"M:Y"':\D;`SGU">V=XD+H34&I'K5#IL:M'7)H%4ZWGQUAL/ZR\YV#HT7 ++MMZ=C$^#W3?+K]'PF>S+5#>Q*U2EC]:KC-_\;`0L;<F>08/3#>5,&L.:-$O(7 ++MDH"=07IP)D5ZX%-+Z6"EA=.I80%)2&!H(@G_(EXMH>=B(]G9@O*0I":`PJB( ++MLI]]9W(@B!5"H#Q--&$#^'MC^*-@8`8`7:#Y3229\B=&T:K-;2C'RT:75_.: ++M&B5$C`LC9"B9L2%U"-EK+"?0Y[!EA$I$J(2U--)A,@1`P);1/T"4"64)E^/& ++M,.0EJ5L=GFZ$41$VBV%Z\ZKGW&EWW$;3APV>YZWF^HXOC>BY?BMYUYPNJZCI ++MNJ)]]UIA=7TYU!SA@8?6G*=+SY1SO.9)U.5C]3U.7UV1'+T^@ZO(R,?H\CJL ++MF3J\KK.O,CJ^KZOKSKS$T^JR<F_R,#3ZK(R,C4WJFDJYE,6-E5<R.#]3J<NK ++MH<W+ZXR^O-79S,O66Q+T67H]+@X=;/9>LT]G07=5H\]G\31Z;6:C+PM+JLK+ ++MQ=-IM#J=;F:C0Z31:/3Z74:S6::C%T6DL3:#-T\V=E9[0:'5Z+27+Z[H=2:W ++M5:W+T.AU.CTN=G:K,TVMT6IU.BTVMU&ITFLTFFU.JU.IU>LUEG28N-G:W593 ++MKF'=MB1HB%W^`EGG=AK1(D#'40)!-4)\$1A*U433Q/0CJ/0<GFD<@Q<61;*G ++ML6:`C:T29L\LZ(JEH5(C#P/)]/_WX7_:/NJ?C]CL<C5JA]<(\`B_9-X601Y! ++MWP/4&L,-OM!W0<0>)0\L/XX2?,UB>YK$/2,`=GW>"'.7J\/H:UA:=1]]AA+O ++M$<A<?R7\YQ=H5/TWU;]K^J8Z=`YD3F3FTZ/H4.E/)SI8C:9!!S@1.?J(5551 ++M.5.4&$1$<H""<SS+`/E!49!$00N<1HW&9C<&)37<GOM]R.3J<LUUK+S>!HM% ++MKMUM-AR/&[WD>0GJ7]>K7J\COM]:BX?#W<NRXK9\9N^.X?"Q'7;?'Y[E-UR6 ++MZY'D^2X?)XV)>1`O[V'>X>JPXZF;:M:#-Q+6FOM!H,;E,70Y&AQ<W"R,K0Z; ++M*UFKT.KX&HS^LSM5J-/IM1IM9JM5JK=ZU'+?9V9'-JM7K-9?YU715]!;OLW3 ++M8&@R\[5Z'%SLO'TF/=TM[.OHM#JM/J]3H=/I-9D:K6:?4:S4:S6:K6:S1ZW/ ++M6*;PCSAHOHW(R4(T/[^?^F/M-A^D(P_,&38GNCX(/LM<I-Q^B79?US]Z/^,J ++M&CI(G.43G!A!DLGZC)"][OWO5\_YE572UJJK6TJC!+(C%CDC_"R&(B"G'\>P ++MG/\<<'C@XT.-X\3?\$X'!%03@@A1QO&,(\8;(7585I<'@:_$T^`0RH2;F3B) ++MZ$-3GJLF[U^7OMULMEL.!L=S=LW]VUM+_>8&STL>XW^QV7%;;B-EB\5K=?N] ++MWO=WNH\_M.,X&EWW&<5P-1J>,XOB^,RM7K:1%X""JI04>-03!P/JX8U?L?@P ++MUMF$'.,OEW=HRN697ZS-OF\ND?+0,48B)&"1&EIB$`Y#[XZD1?=_5?J_[&PO ++MUW"YR@>G>CV!";\;@+NCV"R,;@\*AH,,#`,0Y:L0!@TU'L?4-?;UZ;CKE5S, ++M,[`G[+_0:;G]AW!Y,B9$3OOZM,(A0['[B.L/1I4R%+D)8&QS7GT8U.:\^C_7 ++M90,L.>,8E\.=L8J!2+)IFABCP.@41$4;X*)!XA#H%;;N-M\0,B&E:T%,4YGL ++MD[=FV5[P^@;[@<0,#"8?F?B(X1S"(+ABB@;%4/?VYX.QM(0C8:-HWP"^A]Q3 ++M\OOZ*MB,9<N7,K,YT5NG:_Q_^$H\;^A_4G%/$+RBA+JZO,]'4/DKJ`JI!*A- ++MIK0D;L($''Y:N@UQ9-ZFN8Q>0($AR31IP_4?YQ,_`-_Q#][H71'7!]:'L=-S ++M^)`B=\#2]R>C%1%45R*,S*,"","B`[^3HJM?>:K2ZS7ZC;;38;',TE]MM)J= ++MAJL'>:_9;O$^U[7$1,4,04`LJ<JYA!/X"*`80@J!Y/BV#C^&AR9T'0<JG*<I ++MRAPTY01)P1,_J]#<TO'[W37M-+F\EPM?R&JX'%Z;/\+BN/L\AR-?1:/4W=/J ++M]1@8.!R.QUW"WNNV_#U/"X&[Y+<\EN.'H=QH^'N]OR?$[O?FKWNMND?YQ/J3 ++MDKY&19V--<K$OFV7%LK*M[%&$L9F(@?],$35Z""+$!B9<R=DB:F:JC08FIWL ++MW'=125+K92Y;M7#I#>\KF:I4)FEJP(&X3*AS>G,=2R74A(TAR>O.^=8]C#AY ++M'P.\N\%'_"A/)$-*8*`+A',R^-\D[\;-[EWDQC6\PZ!>TC1/F(60+.>3DTN= ++M6'2_MTAP$.")3>.SYO7N[>7W^W;?Q8IRE7_NC*)M*TE"]PQQ`.#"IJ#QC/X' ++MGLI#X_O^C[,=E#H,@@FL!1!*3<;;=#&X=MT3;B1H(A8P<*:C26\'3X6WGB1$ ++M/;'#E."P^\N+[HA'=&^_E,P.V%W24^W_<9J1VE%#["#VX/(/CP'\#\#$Y%>C ++MM^_/=[B\]L,\V"?>J&]J/9V]GEV]OLT]VWN^R3CVD39D][&D0JB@*&E&A4H* ++M2BDB@C%(B*5`4!8+!V-.2DUYRO';QAR.BA_?3[0QTMNQ9[H$/Q.>(N@D2PQ, ++ME'H,!`2`Y5H+T_?^<\Z<.YRK6WTV+5%NS:GV(FG$RA-$(^X(H)IU`-S88//` ++MEF<.[S6/"$&;0_;8![@B9?I_#]C/JS^F@'ZS[(\)4A2-(^D(;,"2'4+Z1D&& ++M4)<0!$@1$GC>Q8N2BC_#Q]7RY_=F89RR*J,*HBX_%8XYX**$&0Q<:^A4OZDE ++MVOT0X1<&B_$E`QV/R>*&"@DM&#&ZI[(A<``ZVSJS7%4F912,I@!`V?T62&!+ ++MH'Q_QOO['D'?\;Z>WR-G$GO&7P`'Q?_3I/?MTX"3"1\@^3\C9\)?)&PQB7*] ++M0W_+Y7VT=[G[G&T5G8.))2!V#LAY>I#MX.<!V0\$+)9\-[\8_$AQS_?Y5J87 ++MTHH.L,%@_6/4&R"Q9,0VXL28*>_^II1[OAX^XS;Q?JL=_']SOL*&SW\L_$&B ++M@05VG;9*B:10W(D05T'8BF7%;0MB/B0#"$USDXZ?/(M*/7@[^0\1_`N*F#HG ++M+#>*^9G?\S8*?H<KUC"/P6T@_42@GKL'T)U18',34HIB*H_H<D[/FFTL>4\T ++M18NZ;`!)`!RP,'Z*0CMFC0`4HB&P>?$#[&0.($#:%57<(4'2?ZO^3MH[CLSD ++M]V?('0Y$_]8>09O'<]__/I>20^G&@Q>04'*3`$5U#3[W1]5H]5@?MWDZ"<Y5 ++MJWL;29G!UG!ON1T/#XGB=/IMGL^'Q]P,S'&2XK*,MUF#'W8C/04<&F&,O3N> ++M@D,P3,=&$T&8=A]M[6_8?YMY?^;<]S?2H5[Z)9D^!ON%=&9^%P'*AI++CE^3 ++MX?(O"FAF5$*RC,QC;"#A%+BP9SA:04^-AZFXI^^U@#,C#M;\C"$@&'#PJ&CZ ++M!M;8D6Y[D9%$H'0+@(ZX.)-R,0GX?>3,Z&#Z$)(0-]:B)'[VQ8FP)=_H?1SF ++MYXSA.>-27AAD7!+5_]K4'=:J82?37N;154)F'OH+-H3;QM/R)"!+Z[6E5ZBW ++M['\6UEHAVCD$?!RS2/7[^O0%^JA>+L*S#KZT^[C3U!'Q;6D8>OX-E,&13MA/ ++MC#!TX'.022/'M#\;9.SMDP#X1OYP;&=4]74&.T8CT'KT)[%U7*>6%G.-0R\P ++M].G$<Z]"(Y@)FR9"9L]EZO5JL:!I4QS_U<0EOX<$AMI+E@H1!,!H5*A/GN3^ ++M7<,[5FS[[(7TO4$\.,Z<.B(P,?/\/36P,*@T#[@WU(/+.^NUFR/]$E6+CXM6 ++MM:6+5J";O%H3F2T,9:ZCNAVU_T@=>(<57XW0,T?`29)05I'_:BT+]1@">D$< ++ME"A348@J(Y40G4TJ!O1N>U?/,@.418&-BTMS1-`01[`GNJ$SM,T+^V@XO10< ++MJ*J5>03[G+'0'J@_.N#;^O\.`=)ZA(M'VH%&2,^:J4=`\Z,KWA/S+P-+XX+G ++M?IJJ"8]A\'#^H=W0I#V.'^]GXE!0G[NU`F+YW58P1_@T"QJ-0C]281$`-*I0 ++M?KU2C9P'%'SVA*_`APR$TSM['68IFN0<]'6[6R.OL951YSRX,0O)AF55CP$K ++M^=ZM(\;?%D]TNG.UOML53-$5=$]CL/BY`SW("O^#_?RJHJ"QA"1+JWX?WJ#= ++MFKN@6N%%>%72#^WB6LBP4F@<3.KAC#]XD<^$..8PY)<)GD&`?N>P@,(GZ4_' ++M_`'Y+62?R;A:6+_\.X2S>@94Q55;^K+<)K=P/RPYGVW<.)[_>9WT1%=P8$!2 ++M>%,I"&3^U]0S[[O=:/ZL@J69T%S[\PR&8*H=O=L.]RG[N;W>;$5]]KGL./QE ++M/[R.ALBM7/'/?P.>X8_??IO>]_='?G)TJ'(R":+\R%1$P'<H^-L'="B,'3'W ++MB6D.PAL9U"CKM8#^@!D5JWNU%-@THW+0GB3BY-.D/W2:VN<C!(GIVJ0I!$F/ ++MEA13N';B8C]7Z)[.P*)U=>&,=4I,E'23F$04$,G<'U:TK^%ZMYR,C)S,S,@\ ++M!Y=7=ARM6&;84@8/ZH?T9F8T'T!V[ETO=,DH0W/9P]`^263!V#N#T:,"D/7X ++M>1XXFR`'QZT*OJ18B3IBHM,"]J]O6K(]D146@%),:V\!ZADH"Y&8X,H'563` ++MM\GAOF%D'0/AEB\AXO=6GND66HHC.@<?C\<%X1]6W0Z$=,0W8;F]".H5*&@I ++M@:>Z2?N2_\=`S,ZE0KP/@2%Y9%1U#W4?'8*8'I?_7)>:H=*&C8)L#3#X*)N* ++M[`]?BO8O"/<D\N-T>W<<ZR.RU0'U>K%_5.W]G/W)F)^["#']VS_&G]]+EY<H ++MT`T.%^;FY+LT8?ZUYD-C"C)_8)EU(D8@?9N9WO[W'F_WCFDSJ!SK6ORS=J"O ++MV*/TS\[^8GTA],F`W36M:"WQP;"+/WF&$F&Z$O^Y3E8>I'X;/G31?]Z,7]S@ ++M\@IQ@?RWM8[^HG\!/P.1#)(?[!&2<.T$-:*JF#F456`7_R"BX(80GKZ!<3'@ ++MDB)$D1`4_A'^)GS!SS0\[-IWL%3\/^E1A"[DI&K)0@HG^7)U`J[-MK@:_D%" ++MXCF+N$-X5UF:T.-2%1#,L=,=N-,@4?^,/Z@*'Z9G_.AF!H_<]S.H2*+B'=F% ++M??5-:G\F$A,T4F&DB*H*`6,*@_UHS25"+/YM%_LR?<_L!\*_-:5_/^FW[F61 ++M[<[%U3X@M:U`L:SC`TD(D$U^$V5?ZI-F<UW?Z6;"IN9-SN%UHGN?'RF3Z3!^ ++MN36::8!`0GZ!D/IO*K<WL]F1_MKP.P.N*HJ0R`]R-A^"C".U!3(9-:F9:75@ ++MJG]DW870/E/VJ_Q_6?7L9L%V&#M6L:01!&"HHED=ZE+_2O8*>S]NM+3$55_` ++M_W5CP_TY*E.T,U:*/Y&=H`C$82QI1;^P_K?W>.W\&?_^:%`L]/G%%(GO7\O[ ++MR_K7QAA]0@%=VI"D*5OE8JLK6I'@CE1-B'[`DXE1(Y.)GC#%X4U"@\5P.S7A ++M,K)GL@)C%3@ZE<,62&[V!,P[&]2S*G$VH+>DZ#[V!])@ID15/O24:220?M85 ++M/X"9M<-$-,5`A;'^2*:(I_T@)@:39GUK8+OS$KQ9,KTI]D[S[75LTSO]N6GT ++MC@PE2@G.2]D5U5?'CK(:F*-H,VP,E990_;ZU8BZ+\J:S45$?Q,,2LR"XQRJ0 ++M\O#B$:?D&DR:-LP^->'H\;8YCZ33ES^I@:UDS(#GZ-*FV!)`.'I[L'R1QPI_ ++MAGZ(X=FY@=QW>Y^)T-C-\33@__X+.5>/,LFFBB(GZO_(F_/OP3U,UIV2T\YF ++MBO%\$R(@Y^[9UH8V=.114^ZR?^O!"Y2P_C:'/TAY/5KDUSL+M`*',L4.LQ#1 ++M[JQV)QE&8GQD`U`0A!%"AQ0>;.5<8FFO7W6.%,D`[)V.<?1N1Y.*/XU3=CS" ++M#;B\#22*N/_^,@\\S,_D_V2[.>#'IF:B:DO=PU26U^QLW,+TX>L&'B*)<7JT ++M>/J__$TDN83-II&#[:IVI/#!83*C7I50-J*F\$%%&!DWH9F>7#W2)B8\:!$B ++MDJ+AJ*IL,J446,?J7FN>S^@4II-'[1UGEYU7C7FP%5&5%9AD4QT%%]'<N(GQ ++M][K?X1Q2$U\S4,4#(,RKF44B*SXI$ZXRP6M<4^`N4T"D_VY/*]@O%S_(#D[D ++MZ/Q#"DU#%+R8'[@]S\?^:T=O;A,D5[F*3]E#7O")O^'"N5#T8)]]/3];TS-: ++M),W..9$?XJ,_]:ISG2.1,ZJ*^XB2^**27&U4P2?YHG\]A>,PS.9%!^#Z:),D ++MF6+6$Q_;XO[LQU\P>$'^AAZ7>N@AR\#*9.M9[4:I)H=1&8T4'R4^(GM#Y7#1 ++M]<+%BX%R)@U$SJ4^]]KL7P@@R6JBC."8I-WO.#US$#PD@@RP#_G%@.F\W7H^ ++M`;;:`BIG2O)ABT<)C_40_L_[(F:=O"05I$<%:]4TFIFL*+GXP&N71,%@HK@M ++M2V`CBT0?(^@_WAXC#YING.0YP\QID,M2::E^WM$3;&8[1EGL!:-)DP2GW4N\ ++M&H-C,F*&E@I:C"'(]D/1ANQ[,OH/5LU4+79&X<)X!<S',&_+%'2S"*$$S20R ++MY`/WW\>;4Q'DFX*L!3N?RPZ_>#\(7P&8S=K766O10L)>J(BD-W&7EL!+H-V, ++MO;LPUWM:HJB+/5MTH_"GEYSUXZ?\$ZGT;ATZ4=&U6+%+14Z#A:*.7%CG##1I ++M3D9XY5'*Y9"5$@HH?D&ZAFFA!8+BBJ:S][>GQX:_F7"]I2C*N?,4I>\HI!GP ++M+D#6:#_1<UFM9"ZYK2:290FRE3P>J'W?=L$B.@H<16W]38DX1#V/]%SC>]4/ ++MZ]%FT*EF4R\]=0P7"D51/^)U\CZ!X.A^/\AGCM1K-N:IJN"Q1&1L4/-O[V]8 ++M*:J3XB)_2_W'^+_/HRQFE)M4=FQ=8W@A3%C:EW,4W>CSK!L](N4I;8YVW?W^ ++M'(+J8KO'"4$?\EE[<.[AQR4AQ(KD+%"#$56"EEM:65%9T/">L]@^=Y))_V4F ++M:QPTXKBC0OV3_7?YDYPU`Y++#\J0KW4!AB6E%+BIM$RQN''-4/012T*MR"H* ++M0VVGG#444P[/)LFX0T!A:FG/#;41>%A]AO@<;&+)5_%?6Z^)@Q!-M*L,5@(Y ++MO_L,M>E*8NM4"+3Y'7U&'OC:FJ7A#1N1K:UC)-'EGANR<I@HB\X;MH*NZDB' ++M1S8OMNTQ+=G,;N-/"@BOT&6998Q!^TDQ!O>U6"J+64C-:#^L$GX-^-/%FC1H ++MJNLOX/\ML'C@)+C5"5%B(JF0D!123VIIS49FGW/M)IWN$7UQ_SQ__9!_G3%L ++M2;\M<;%F??A"1*(:,E<S^K5EVJ51,%D+$J'/_5E?8_>@3-#B,S8:%,K(M!0V ++MJ5+T],RH61O''M&CU0$\]'K!W)']7+C_3=3>;J\@GVD<U\^=,7_+ZJL%U5<] ++MY1G?%"'X@M+L$59%CV,..ZZ=>%!!5Z'^ACRZ>L5B(GM#3FH:*HCG`$(E)!$_ ++M"C[8'Z@.C]AP\:*:>=!`:+1>W;1HDV+%F_C8Z,]_+F?!._9CI<EZ18S!=".G ++M+,D';C4`E4\V;8:#E))PK'*A1FX0S1KZ.JHJ&K"4I8+ZX?Q#I5H7U#]O_C'_ ++MHI2%YL,9,MDLBK$8?UZT?/I3F5#)55Q)VHT0QBE$+U3C-D/G-X?Y)_3P#VN2 ++M]?7AG5D%T!G)]9OF^1FT14U"D@20KM3'-*FG`T+J>D/PF?CU=3>Y1<HUH-U9 ++MN2?]$@52\@UFR<OV'..;+JY2BZ8**NER"DF1(YJ(6Q1;+O?UFF:^#HG_#IG^ ++M=:9Y"4L*D17_@.0<<-*8C(3^M$ND/UD_M3'6V656AI@=J+-HC%+TQMFK"XIB ++M?S)N^>M71AT^;-;MO9E'XA5"78+F(2;VTE55&Q0G3_+#S%L<3\6=60&"-'$L ++M0"F*:$_S:J!M$J9;YVL+F6C8!&8#^M5!G",Z?%YXFF@)148_^'U_G>(ZNOQX ++MY'\CIB!Y9)A]OW.\]W.%[X/(-XB:13YM>.:I3%`3MXVFJ:57[.Q:\O%3+QHT ++MV0=X%\4"&H`_K^OZ/FY#V=%[-&$D<Q<%D#\MDK#6V#1E!$%H2D0[>_0<H//R ++MV"B#TG]]@P/)<I\)<JJJA_S_*B84\_CO57/6A-'1C%6#F%(62?R_<5;/I:[A ++M926N,JHS8CAP+%\%@G1XJ"JE7XGNJXR@KE-A#/L4`4BHOR)7P=?^`]CO*P9& ++ME&J2UFAES"&EB^_3BI.3_>U^[EOQ4W;,-A6,9\/P^_[1Y(1LREUF59$55$55 ++M4UIN>3+!7]VWJEA`C`03;:A-J-V4HL<_3W]:;PPP,W.)+#(\><+3$+NS8RJY ++M3,2?7?3L6S.>"?1Z5U]W_&MZGUN[XMU0HE9`*$JUV!5%5:[.1<+5^$[<Y!8B ++M0^!OH@G$47>MR)Z060ZH'[OJ/3SQ[KP_'I#;:%)M/MI9"3M_I6DZ,2?</\:P ++M::T5*!*1-%G!J\/Q8ALIF5H52JZ22DX(/T?&[?\'P_-=#9ANQA6\LI<`X1MP ++M7XALP!@^/4^-YTK?[-0GDD-I3IOI.*-#U2]4#M`=8DCJ3T?;UI]/`$-$.]%( ++M7H04AV9*TALX0LDFQ)#B(?3@-N9\&G5$%6_!D8IDQ(ZV?OEZ?,&<9,[!B"8* ++M)?(7DJ&0FA0J0'I`C,OUQ`/*7?Q@:S]1"G2$H1ZSAQR-2[D&V0Y&=S\1F$-L ++M^70,*)FL$G$K65>BXR79*>6V+OX+A2.$:OB\_TK%Y+$GTL(%F0T224@^I-"L ++M0IR0H0ZG/!$I$:`!3/1.-<(J9D<"H2P#B!VF'HD':V]CV%VY(;;C=NLC;/G9 ++MA!J8)?J*ABB_.V,=A]_**HPT/\H^4;+N,AMTKR\G4_[$@;TT^]A_-#0<)PX8 ++MFPP_'T1+J,BC;![!-`>?K'%-#"/7-RY#HH`^K"+^I@1_I2)UP.XT$,Q0-23" ++M$H=<)AR)>,@OH"1!])#^F/_5_9^OZ#P\#_"_N?J-`=0P(?BWKF(.;&P'T@&K ++MA#!S^O@0<55U(`:0/[O3GT1E5686_8A8%0:)IK;(EM3L%03PHSQEYQ7ABL?C ++M*<'^OX?)4/W;*L,S20LA`+$ASZ#]+B,:`B=U=LOIP,R^_'_WB=9YC"K_BY'[ ++M6*\37_VQN6R*;P)@>MWFEU/K_2^SY3UW2]/QW-6N)\[Z&]G]3TGIN5UOL]=$ ++M;=>ES9_$5Z^(OL>P8[_S#':^VO^\>G4YNM<VSW75>7Z'T/V_2^F]3Y/U/M-W ++MWG=^;ZGE\]YC9>W]VW@'G/4_0/W?!-]'WO]O;?M[#WWH_020YT]TIX/L3_[] ++MWE?0=1_'[_B^X]C\P]QK/9^_\[Q^>]U[7V7[N@]T>L]O[_Y?N?:>[_IM_X_B ++M][^O^E\B=4)Y=/D>+D?M^6?\/A'YS$/^'\CXB?1/Z']C_)K_T?0_U_SY)]PO ++M>I^7^W]_Y_'_YZC[/L?W>/^X_V5#^Q_<^$?W/YGMCY!^HH];^'_I_?V/^2K_ ++M,^X?R/@_`^G_3\OU/Y?#^]_G^'\/T?[/S'_#^)_KZ?_#]Y_D_6?Z/D?K_S]S ++M]7^3_I]G_O^K[\G^OY<I_+_G[OX_QT7Z3_9_7['\S^A_4_:?R/;'V/Z?S_G] ++MS^1TO]#^IA?V0_[_?XH']3ZO^O]_[_Q_T_\?^/^G_C_J_XG_%'^%_F'D:=(? ++M_P!!_U`2A_ZBC^Z5&@T*B*@*"N<JA[,%1Y[[ONVYC<^^F$D7U@'Q%4;^WZ?> ++M>#W//\?P-Q*A\Y3^W^?'SV7B1)?B(@N$HAT'-L?<Z?I>>Y3@V/82(GW/,^8Y ++M77QQ:)!!?V?"MYW>\E$B7D$Z+_'T5TY!/V_*^+Y!X:U0D_U=PG@'R?CZ].\[ ++M/J=HD>B_5M/E?&^)N-&[WO^K/?>8\I>H^;\+Q9+_L;F@N!K?KS?.NB>Q\#/@ ++MDOSKGM/9^OOHO]?L^I]'C)/11Q_,=5ON6V7"35K)]KZ7SN3FFY2:4A\QORZ; ++MZK_&V/FII(?)^-R/NKK^DA/S,)KVA$DB\2Y<C]1N]WI.!FPDX>SO3:;3.\U_ ++MDT&!K?43>GGO"9UKI<CL=A_G4?6]A/V>'A5GU<Y/X\3A6X^[P/B:Z_H[?7FX ++MA11%`T&RFCFDP:OK.IG_EQ&VVVQHY[5>O[?N\7_>?T4TWQ>PL5(0NV^PT_HK ++M>?TLNP?)?YO7V(^.^=M/AX61/_KDI8^)N;W$SWA]/5DK]0WL[GE=8"?CA?U< ++M"[[27L8XHHM)[2/6XIU5ZWB^!WOF>3?=CY3:]3LD/R;SJ$PD_/F\=+XEOOX? ++M1XW@^?[";>YB;WMNDYJME9,KFDM()@:?T>EDB@=AHN3T6ABXG!TF_S^L\G4X ++M7W>QH]MW2(C_NUN!5_IFX?<7.?[7=^Y2;&O__)]]VDM^^T&CD_G9(L&MU&M( ++M^>MZ5+^CEHO]>8^[17UG.\O@?^]3D:CS?8X\E;_F#R67=^5A>VP?P_+I]UXA ++ML_U:3[^@_5M7_@K^Z?Q+J<>S"]_2*+)CK?SM_1T>B#P$\^MOP\SB+-OC/V=S ++M?>4UMSE?9_*F]_+Y798'8]#[GCN4ZG37-]^"=VCY:YPV\#H/I5,7A_2H=JN^ ++M=6W'G.S]17AE77;S>;+2<#GN8CW?L.MY/B\7@[+$FZ_F>_QNGZ?028E?)Q-! ++MX>7/C[WF.!^/PYL[>5/*=Y_V!TW=YQKO6^;/+<KI>;.>XF+"LU)99;%%%<#F ++M?Z3S:RMU^K3?>PWO%ZC?<OA8^';X$?'`)@0U'H,;>6=-R]3^E]H<CO/M9_E- ++M++F>9CO<IP=&[W7'131G$OMZ6WQW?/GAN-%Q_GIZM$ON*=+'V/Y8\;VL=^>R ++M\UL?3-NG9>MRH>+1OOYYW<QR9GO<O.XKJ/+R8N@VIN>@\7+?:C]CX'D.=U'X ++MN8W<3_Q;+[O34^;M]7-QV5\S?]]S'S,_<V<VBJRPY7/10WZ)QAM+/7W_LT2G ++MYUJKI/4G9R\]"EW98<];>[+W7GMSH,B3=>SQ,'UW+0GV.#O>3^EX]]?Q\38Y ++M3B_1=7WEJ6KR&>T,+[A@ZC'X9\'C<D$Y*:WZ.K)5Y?NOW=Y\3Y6L]7UO1T]3 ++MZGKKQ5M<CA>'4N_?BV][^O$7-OU^QB]KLO,D4.#XDCCP^K/+?[Y&.+PN^YWT ++M3S"4L<7Z?W>\V'57/9^FAS4/D3>NV/2WS<7Y[T_0;78DWK^ZV$G+>1\:;\/9 ++M>4@;2G1ZG(\'7^<YCR,QF:GEY8M7Y7"YQ_3:EV+QTWW>]TN1\VG99<FSZ#,S ++M'M'_+2WVVIN1]S\GE/1[W6;;IK_L/(&WNU,.+\T=C"[F/(,3;?&PJL=2/6^= ++MY?!Y?F!'XDN/^QWDK[;[%CP_@:WEM`:BUW7LO):+:^EZ+K]=ZR./^&SZ9V4[ ++M%TVMVT>PYW$S_!Z?/YOPO+ZZ+MN1C\KCU)\SZM2;<^+X$.*3.IH23OM)A5*G ++M/7SME;]%NO'JZ36R\?-[CJ>>XGY?)/\_ZR+L"^V_;:.YVV'G6SJ/$Y?>>3BB ++MYG<?SX>QDU?GJWOJQ>XCX$U_J?U<QY+M89/0Z75ZM.?Y3ROEN8V'GO)'O(>V ++M\QZV@).-BQN,HKXOW^1^]\FSYS_V;Z26*_CXKX>'D;8_9T^AUO:9,^31H*+Z ++MJG:>FDU=@ZCBO&Q=!\+M^>J2.P]SZAN3JF:[]TOI9NNX7H-AO_662223AU(O ++MH:H/8RWJMN+5[GZ\+[QXM?QO2<9S.UYE^YU=]]79:)-%I=SM^4^U5[OR?1\1 ++MO/J;/73^XD=Q>_JQ?&J9T'NV'@>]>ZQTSO-G$\1L32;*B4W_G/+V/3PY@\X[ ++MIL?YNP]_AV>WM3YE'82ZV:]:EY+FN#P<&S/@V<;:=;1S?,228WMO:/=B?0U_ ++M10N>]]_@;#6>].FBZ'`S?G,W1=%LOK^4GUDDE>/<>XW/;HGU>RYC?\AX/P-% ++MS&_P]EE2R?_=0=1[^+@;+'IZF_LT[.+?]!\#D.WET$N^ZK0W;E]\3H^#[C=> ++MBQ(J_`W/KMQY'Z?4:7E]W]63T\5',_#RH=/>BK]'6MQ159<2+$L>G=N\3K-A ++M+B2O=_7X/9Z;XMST66_E9^2G_MT4ATT7@]8\Z*:7O-_N-'B>CX3W1\K/)-Q_ ++M91=ORM,5BIY:?9[/X=.9K+%7B]YV.CQJ\6CQ87M'V7([N7G,GI_7]-6]_T7M ++MI?E69.5$36V)]YG?-B\1511%45:)^MS.)$@>Q`5$C4$.$8HBLAN%4-A_S@3_ ++MSJA)(:(*3_Y+^?_M#L@?6@P`?Y2!?^R0H/X^8_%E>I13H*DG\?$_=?L1^=\H ++MY"G[R3_O12`KZ`[B(/ZNGNOTT']F.N/^C<P7]R>`*I2E8^F-&@5*!"(:!"") ++MH8H(K/"7^Z#_V@VW$0I5""$)J3ZNX>*[W?=`9@0*09$",!51_P?\WG\?!:K> ++M6LS#0@`L"!$JP'\S7_0,[#L,)0@D+$S8O9/'Y&.KKOV*@E_Y($XE_^[\O!/N ++M1A.7I\>E#`>Q(2`(UX>1CO_"4'*EHG2!<&,DG>3^Y!$@DDM]$"'__%BQC7I9 ++MM1_H_46Z=LNM\Y\B*I;X*.^*(E`/IVBAP^9A/,P<XC@W3X@C.6RS:GY?R4_# ++M"$5H8&+0S*X9O<I=<Y_9/>]18VP0B>"N1DT"_+7BE3-5!/0KBKSBB4H$RHV> ++MHZ>#D0?]M?>8+(100&T:H@:N#=\HDHOWXP:S2@C&C4WBITR^*IOU`0YBEO9, ++MR?/43,!%!/3=;#Y.SVGKT00?G7_TYD[OD&/A0[O_`GE8;B?6>+]R`F:*>4Y6 ++M/E>YA+]]A#U/5MF^G\IT'CT?9`]#ZJ7ZZ)[__4?3?.;\'52>N]=#_3Q!(M8` ++M,)V'IW!TET&DB#TZIRW>>JA\_G(@B[#[GD>R^Q%[^;?^3_UL-3'$*@=4LH>\ ++MO[Y=C2$?X*X@82?^Z,OT95?^J%#ZW;]>:`'V6%'7^"8`>$:Y()_S:4U`HH': ++MLF$M^1C^LU@#^KCA-8K^QL[;;1FN3A^X5.84B5ZHR[=T2Q"1/C5]4DT+I!%$ ++M3..S^'O'">&$$$C&M?0W5X!>4@^:']>I)!/AV;IW=_`AM`G@)R_X=^9N(;/M ++MC+RG!_FG^\*@Q`ZR:*DHH;^:&&`'[)/U,1(_U!^JZ0E0D8$4C:"P9'0R@GQP ++M4!`4W\'/0%$NI$*AW2QH0]^PGIC^?YO8^XC0#@>L`?_",()^#_X,/%(^,:!" ++M_0L/'\Z]1^A;<_RGP7#F(U9T@C,?_'<G!_&],<_)JG>W/_,RSK].HPZ\"HBH ++M,?R4$54%7J,GJ'ZQB,3MV\NOF'[)0\Q7B<CL/#PI>ZQ/"^+N<><3P,3(_7UV ++M>0`R.][_+S,4V5(FJ4RN)/_MYT.+H*DZ?5Q:FCT/W:VC\U_[9_E^?WG@^#QW ++M@[HR_!Z+P?!Q[_?XG@^#4\'0>#X/@^#X/@^#X.Q\'P?!UG@\WX/@^#X/.>#X ++M/@\EX/@^#X/@^#X/@[?P>K\'P?!]IX/@>!X'1]IT'@=[X'@>!X'@>!Z/P?!\ ++M'P?!\'P?!]#]3YWQ?B^Y_]\CMP\AT*(JI]?WWG.]^YB2'EW?9[S5P\_Z;[/H ++MN^]G$5Q3_[GV1`]2=H)U6YE1/^\/\A0_OSA0V2`_B?GX#^I_B?E:?$H$P"^Z ++MR'E]JECE3$@1H@+@>7[KM:D"W^]B0`.]KVN[""S"UF9555555555;?XM_\JW ++M;;^XZ_UOXC+$/XOY_G\N/7SU\+/E.P=YWMUE$O^WA3Z'L,]VD)$2KA9::/JW ++M]T_RWEL[H2;M</RWT!^%U9A453J[&&9/8^V'9F7HSSL[59!=,HD>FS>Q[&&! ++M"[VCS&5(K+"XOE\\SZ5FM8"6Q-1Y"-70[W873$OGNPAV5W?E+>P\E>Q\'#\L ++MZ>IW&0S7_G8)@^9T?>X7F?,ZS4>8;59&R))=CY9^MW5F$UU<NTLAYS010T,T ++MVAZS,OLN%6Y;Q"70:O29&N<ZQH2+TK9%]455BW?GH;S7&%OW[S%A#=7,;R"7 ++M,#S7%7=+H</4$?>8WES8\3K]ME:#9\#B2OD-*WI<C54P;`VE>IJXYAEBR!ES ++M(O#=%I;.EP.(P)*^C54TPCZNUL*3ZK*<[7NTNGM5+7)\"A'9NBI54PJ^I':- ++M[G&GVK>'\S1^'AIO<BF3*7664XEG.T8UMF&V,>H'XSHGOP=U%$\HTWG]Z\L& ++M_,CBFP-4[%-C6O.=O7XV$:\U7?U(M&_$39:NIKV;.V3UJ1Z+5:[(.!ML5SM; ++M8EJZ==3N3<:@V6VJVDF?:U^(L^YDUKM:[.TL-O%GH[%76)@;[=C]-<'9^XF6 ++M_,?F:LTJ4YNNP,>IN[.5D3-;VBMOUT9HM_W]725-62%]5<YM.E8KKI=C>,S/ ++MLJZU+[6"J\GV:E_1:.!7.#J=`ZHY=&-I<A,6_S][S1H.07'H,S3%U;.ENW;. ++MC*%70ZV715/:&HTR\69V5O-%F[.IEZ^6P;T[P2+=8G'P-V!!$X:*",((HBIV ++MWN/K=+]N`@(G4^E;]DA^K)4_5]WY?Q-A_0/\WV/R=D']=^E]FJJJJJJJJJJJ ++MJJ_=_!L>H?UQ_'!PYG</_<Z_H?:>U^E^;WE86]5-.<C_WKE^']=+'VO_*KO; ++M?]$L"?/*U:J9!T%7W-6L'H_-?7BAV[G=Y+9.$YBF5,S)-95-W=S,W:S,FJD3 ++M?_VN>4%B@]\D&X[X;1OC=&Z-S+>Q[%@7'Q\.T1O?<'`%PO\#!KI"G8&R\SDA ++M6KYV='`R5`[Y211!*I4GI^6"J6K6@+9V/5%XBBY__SR:Y<CCF.-(L`XZ^OJQ ++MY#7:_*T._[!E+&QY.]U*(A6+=O*+QC>OY#%7+E+]$#$MW,(@9)06L27U#.%E ++MED,/#T8FP$D`($PBFZ@5-"L\\E&.5289B<''^3["N)\3CXB0L6(WGI(KD@*U ++M2IY.,4D*'&Q*Q5))%5Q%$<&^E5F[_X=DNDGT9C;F"M2I&*PL"]*452]>E+^_ ++M^&:@II5192<I*)97%PG(B(C%QM`H9?+>97T'J,!^XWE>O=NVRW7*ZELQ!%+1 ++MHM%'(JX$@TDJM//`Y:]BT45##JCWU2@55%C>_!(C?UA))!:M7LMI7*::<ZDB ++M;%(R**N28)>O351!$B)B8O3SV$P:#:=RVRE*M6W;P_06J]PE&,`M$\]LOB.1 ++M5LB7Z5Y8*ONRAE5,$L6''Q1%**1:20I`)R$0PI[ET8KB:9X\P-LAJ$E)"NB( ++M1`E)1`<2EO+]9A8'\RO7EEHMBU2BDOKYXS/>60GGC*^6"+HD5;Q//=HI)2DS ++M0CCD($!2&1D63Q%%>_?@\3<TTOLNYW`^)DS+&_"JJJNNMK*/%^,;GMZ9Z*JK ++MX:9X#8_STZFFF>?CN8PJJN15<\Z:>/CXATY-S@RRP>!@Y.1570JEZ:F#--=: ++M.G3(_D>&FYNHJB.^^_!P>"?\O6C-*A-=55555BJJKY%5H8.O7.0_@_Y@[>!+ ++MIZW_Q']OTZOHU5')GD+/^=[O#P5555BJJJJK(6"64I<3G#DDD+-F(I*BA;F( ++MR[=_E$%!01E4CCXN.I48*DTPN/,6">=B@>*?,A"]6(B69:E32F:B)C8T48LT ++MI8*IBH`7*A`>3321H!:'OJU=K*92(D44OA8&!>*".-Q4)BJ5*D<<A?1D9"$A ++M7@1EZ]%'"1%)!2**>?.F+<8>ODDJS*L`G&+MY5%>0*:7%^I8N3$P\_B6G#QY ++M)*^M)$.*1!$4=Y^P5`CDEKUY)D!$G*"M.4N))(AY.1#&L+H3"")6J35)YR@S ++MXHQ06IGE(PYCCQ]Z^M`XBCA"I3$0`.B)B@DD8MN=7FFB(HHHR8<YP^!7KQ15 ++M"04FFRGDDDU\\H+`PPI%%7KBR7'""(Y8BBC,)9;%@C*2:;@/)7O<5",C'%(B ++M0!(%CGGN%C,T/@EC70+F7*:Z_9XX6+_T-MSPQA1\>3Q\?UL9#V,C4M=$41UT ++MTS.G3KJNNJJJK)(\F*?`H<4$<=DD)IE55IIH$@3WKTIE%0J$(1CRCA<8T-@^ ++MCGG<UU5555[FVVQXYWO1OP>W,HZ&^Z*JO2J515515551555_GM%>_MVZ=/+R ++MW+WO?KONJJJJJJJ\FAY(Q''7'BJ*I117BBDB+)*3$\Y`E@,1J?S%***9?1_N ++MJ$-EO^02\.%0(""%L?0P*A[W=!H8+%(I(7((!.332%:M(1$<Y0EJT224D9-< ++M68>/01$,86..I4C.*`J5)!Y=NU[4<=49HRJ6B65X\DD))($<=-,1$*1D44G% ++M3%!"%-!11"$M!0JJ"T$Q%%_>@G+--4>/)!UBQ--)C2%`I7KL2RSD100)2*)[ ++MU5(B(HTTH_8U"C,3(HHRR^X&7?P$T+>*&@P^1)L>.*,B\AA7??+KUQ"3]LFY ++MH6[&Y<SSL:90S$*A4%<Z0E&`M4TT45"(128GF)BDB0?"(B($"=V2>7EIISSJ ++M;FA#33Y#!N8A#;:QY`7DE[J-)(PA24/HA!!S8HEF646<9A:"<DDJQD"2BB.. ++MO7J4TJM).3QQQ1$&6@9RJJN(SR_Z+=S1YY\%$%>(\'(X\,9/C(1ZID'(!&14 ++M"")30JU:M<K^6:.Q&7+DLN`9YJJYAYG!>]PXWQC"C1F9&"7(28H#Y\40.&#` ++M[P'18H5`BJ))!!H6)``&[?',W%Y'7U^E#9%`ZS<Q##GSKVN?/CRR+2J4KZ(` ++M.0BW;V]I[`C[P>'<=G9L=)%^$1A0&4+/^O"H9^-^#_*-A_>_G&SI&W?RYX6" ++MP0$1.M4<H>ADCCD.[-C?]3S\_/K4I\Z(*%B<<I`!`3NZ/`Z(\*`EL0\M98C^ ++M'C-X'>5G1;I01RH**BQ9NZ[_\$!-RF,N,N"]"RJ)!1$O+>ONBV_$00XSP.BV ++M#[:@OLL+K'9:7RF#E=9Y7,SJ-!-E_P\,\G];./&\#P.QVW>^-YRMZ'T?H_2> ++M'ZOR')[/W<S>BKIU_M]53X<GK[_,U']75^-[<7I<3N'V?Z&S=\>:J)GE011% ++M1`S[#`"B(B),#-4>X!_&O]/^M_"V^VW^+CCD1(Q!%$TQ^_`X@*B*I2(2HFJ$ ++MHH2)B4HI:*8E(D*B*I2)"8B!B0F**$HH"(B4HH"(B$HH:HB2BEB(DHH"B)** ++M6(HIHH"@B&F@B&F@B6BAB$HHI**"(::"(::"(::"B@*"B@*"B@*"(8@HB6B@ ++MB&F@B&F@B&(H(EHH**`H(AIH(AIH**`H**`H(A*"):*"B@IH(AIH(A*"B@*" ++M):*"(::"(::"BDHH**2B@B&F@B0B")"((AI*(AIH(AIH(AIH(AIH/AZ:"AHC ++M2LB$#C&-T'$O=%M8)Z=XP>7DV5#YA.O(S7U(G`(G#5#Q?)'TU3[6E9#*ZR-$ ++MXI437^ZZ_VFRYZ($U,F7T;P-("@&N54!$OAG^V//#*OGV&9S,J[49E5[E]5Z ++M-[XH>#]SR/!XE4.NVFNF6[GH4M6&AYD"20]J3IW[;[W_E:_9Y/*X,_K>2X?) ++M'('0'ER0Y0Y<Y\YDBY_?V>:LS\[S>VU>TJVK_"X3<JNV1%,3%R@<EY[W%7?, ++M()D*82MHD&95U<VR=?I&^)F7U^'EWT1W0*@#B*7H#E&AU(Q"XW4H'YL>W)X* ++MX!*T8"DGQYG.55LD3"`.5-P==\@#WIM(XR->D<PXS0'=\[:=TWG#QJTMZTJM ++M:0"=F$6(JUSE)8_%(V7W%/T'-Z(\NY1Q%F9;O7&1IR661WB.2HKY$0]TN\<^ ++M"O51?LN6#D[+929N3=+KHR<2N5\[#P#`,F%B001)45<%T]5;T(B#,LHS9;N9 ++MOK\P3V$<BBZX`^\H.=@KDY+W!_6JI4XF$$/?""J"66`&3/*)[Z>]LHA]:K*& ++MI!2'[1'\_0_1^W_61QU_3Z?9\[[?"]LK`,SYNE`_,/#`47OD6(B1I!?UY_@9 ++M62I^']>?];7[V>4010^C[#-OVF(/BXQ^3;\OFZ`7=(%3A,\)-*">$I>76W\_ ++M<0#+05.K]>Q$H^J+SF!SE$Y6=(/^5L&V3=S_L//][G.VYF:-[46RH+1&5^E> ++MUXK'.EZ?#1&9&$;<\QB@_"JFVT&%'7/X<0RAT@-_Y>M(GN?@?X/XNP@]EUA% ++M'\^'QC))";1T"`ZR/>M>?!`\T?U(%7;?%R44@`N7T4+8$`D\_Y_XCU/O?[+Z ++M0]Q^_K)`2TJJ)/HF^FJ59[,,318<9VN=\_D^HE^?Z%_C<YGLZU^OCO2?>\6] ++M^NTB9HBC_"&7!\C@'Q@4I42]N,!68*1:7]F<=TL`AH8^.<-'Y*+'BCC1MH*X ++M<;56*9G2*;94"H*PJ&I4&5`54%5$%`'^)SOAN,2[BF-W+?W\G_&01!#EQ>/^ ++MY:<86%I8S=["(ZGJTZI1G(E8%(R(3UB_`E5M(S+@_^^8FT47XT<4(I9)%6JM ++M>I4"RK"%?I7+H&<*X5E=9J6!K'G#^I@W4,1)F0*:U!15@F%G+^;*N>/W;F52 ++M#OH8@RND\N[ATR2$9VDT=`KYIX=M^G8);1$`T^L[-M;K&91SF>KG,YRJA`1$ ++M[%+O&#"L.%7!6L=1^E1=@/(18O"-=!("W##&O"B<Z+B&.R\L,B(DCF64H,A8 ++M<\;",3L0-\QH%XR22)`,P;,%!2)KXOKY1=+?:GDVW,H2"@F?%291>V_VU8V. ++MC<E)T#0D\XNG5VD+)9578Y(VF(V%840<3'NX"(7R(1E;/QI#2(QYDBUR.)T0 ++M/;1CH#%XDK%9E9GY\CU1E-.6A1$U0Z/UFM&'8!?1B&)!8>>S;`Z%4<5["X)$ ++M3'1C)W$UO!$_ZAQ4+"?'\1\7X_(^+-S/:(2P!Z&Q'(#C.&03_9A#(#U5403& ++M[!<4GL;E;9;25:!4`28P5@71HF,@<B8D;$%\/G7:8LT#HD87%+1B8M]'%0(: ++M0:QETE++RD)%0Y0*H>W^_X*.#ZKGJ\0O&96_S./*V%C8RXCJP1XPPAZ]AD0[ ++MO4\&@?AFWZQ.\55*3SK.\Z//;,;1^I_Y4_]W'#N2:T9Z5/R_DC]]I`#]XDBA ++M]EI][?O.(4-TH@@),=9G1/$..0>H*C]V0*67JED$D$$1")RJ*R"(;]`4%44] ++MIRF_Y3VGI>MZ_=V;3^%S447)T8&;4J7]2B;3:6MV5>*O7DK]E+@3-?%)PH0P ++M</LL2:^LUL:W<[/E\#)JW;>/S&);B+]<B_P5&@]Q7MWT.GP,'<6;M_A>2Q+- ++MOMK[!P\7*PN9PL+%QL?*R<C+R<O+R,C(R,C(R,C(R,C(Q\?'Q\?'Q\?'Q\DL ++MY66X4AA7:LN'?=I+3FX+J+359<AV7<QL')CN7,M:MO-<_&K865+E$YA8&3BX ++MURM<KP?1D5LJ222F6YA4XEZI:IIFM6)9Y[$^;/AX:U!5+^_6A[PP79F9-'(L ++M9EK:J-6R;>;=JVLW,+M:.UDWU]"S9KUL6:::F^R\NO<M6<FQ8K8EZ*U'`M9= ++MNK5J7:M-,]2U2@RH1X^#6B%&6#EM.<L5R`/?>R7/6*Y<L46J\L=J>6KFW<:_ ++MQ+V'C6\3+S,/(S,3+R<;)QLO)R<O(R,C(R,K)R<G)R<G)R<G)R<G)R<G)):; ++M5BQE59,3/T23Q8=>?)N85C`J8][&OLS"R\/'PL;*QLK&R,S&R,O*R\W-S<S+ ++MR\O+R\O+R\O+R\O+R\O+A:A>J5&J1WHS$HL8&39R+-[%LUZ<NMA9%S`QKV#C ++M96'BY.)C9.)C9.5DY&1D9&1D9&3DY.3DY.3DY.3DY.3DY.;+!<S(ADU\B6.C ++M+J7)I,+`M8[URU&455416;,Q,3!S<#)PXXZ+$,&M%%9S!JCL1<S+'6UV][]: ++MSRZ_1VS]VE[H^#UTZ%L'UGXM2E>//ROOI6N34KY-:B]4O54,=<I\)[=K!C@J ++M5Y:'/5<!KRU\N9K]K18P<W(?+>HS:+%RK=O\*]C8%NY?8N-@Y&;DX^3CYN7F ++M8^9;MV[=O)MV[=NW;MV[=NW;MV[=N3-LY-C!GO\>SC4WV5A6\6WB9N5@Y5]C ++M7V%DX>/EX^9EY&7DY>7F5Z]>O7KUZ]>O6K5JU:M6=3?Y,]O%M8DMC`R*^!CV ++M+V+E7L;*O\3)O\/(S,7)R\?(R[=NW;MV[>3;MV[=NW;MV[=NW;MPS<7*P+52 ++M7'P[UFKDXV#>M5,C$R\C$P,R>K9OLK'Q,+&LW+ZQD8^-B9-_@X>+CY>7EXV/ ++MD9.7F6[=NW;MV[=NW;MV[=NW;MV[=NWENNVZ'8-W+FS<]@4XE4ST5%6H3X<D ++MCHL\XRG8C*R-GEBO7,J#[UW)Q"^Q%BNY=_BV<&W<GFNY=Y\+Y6MQLJLRJRX& ++M1798XUOW/45Q@=N;+=5K&=OG'7KMVSQK7?Z^OCKC3P^!\4QQN:]<?1;;PVJ+ ++M+BQ9\$K\UF.954EON*2(K*;_O3Z[TTEFI9[.7S6LW&@^GXWGOX_N_;^NW_K/ ++M?H_?R4^^_E@F"6Q,#3H#",*@JIBH"(#(C`,@MD0V!+@TJ>U#A]E@FT*GBJ1` ++MV@`/CP(4HY`@+!_2(#]GG_S:03M_M?7<!UG\E%[KT[Q,1:M+)OOD_?\AWZ?! ++M^@W*][[I\(/A)')K\*@OT467L1R`#A4[$?Z8<GU.!+])HH_K21.9SE(>'*B? ++M&^,;AQVJZK[7+\L\4&&0)S^W`X_=UB)$N8[((PJ5Q43Z*B):%K*B'9%QD/M9 ++M3()G5SWPY`[P5$#\2`*)YM=DI@!\MRJ_J2)[,_,S'K/G]M6O>+R3_N_.,_ED ++MKY8/B&3Y_NE?E*?\5*:BBX@YTJO96ANX)SRB(:=4[I:IBY9[)O[0`-**7A;_ ++M(9//_M5<WY97@"ERU;5Z5C*QG!1//[A;=3O+^1+^@:NHUW/_C6^+Z$D?(J@B ++M92@8V,WH%P50UHI?X%B'M<0B0_7;Q3%9?>P1+8I`4WB<)%]<N+O'AVZ*B'XA ++MPP@YWKR3.P6RI58=C+C-)IB&=C__*.XU40U2B(AM#L4UKAZ.1ND;D4ZKRT(U ++MV_':WTO:]1HOAR?%^S=EW/I_G_:_'^#^G^-W]#_7#ZW"L"B*B*(I$PPA[B"O ++MMX8(,H?[)9$4[%4RHJ?@4-(*'T.@Z/V7I/RZKX$AQOI/>?->B?IKFTP?9.V8 ++MQ[%S?.^S.J@J*=,O6GRV>M5D9%4QYI9IJ:9)%5#4B%2.2M#+/YN':##,8DD< ++M-6^3XW^3H1]1O*P^MK_&H^%-S$G[\^_X6U/1[6]YM[/5PKGN<=9:+PY"(`W: ++M:5UI<%CC!4^^[7P^J+]47;BF+\,S-.^KI%9O<>I=45$`JBB)_\*(AE'7,(&4 ++M*@ARM/J[7)<Z=9EF6@'V3VU(*3ZDDGP,P/@U7XOY=S[8F$T^[^*_W!\O?ZI% ++MV'Y\B?Q,E+!JS/FF(D#*7%%O]0OZ&P3U^=8LHLFL2H5"Y"(58CT[.L#,K0E6 ++MI&:PUYK2T4F+4%U)<>/):E5?UNQMO[`0Q?<EF(]G0=B4DT"3'UTL*(@RU_23 ++M8"9NV(4??K;C!&?4B:C1CL`TF*9E?<K8(1@&*9%%*J_*(#7=6,"E[U-C_BPP ++MA<,7'R,/*+_"6SKI"S0P-(E!0;XX5M$QY),"^P&=*3$0IK?HW=9P(R,$U2B2 ++MJB<AJ>00<&X\QAL.1$`3:=[[?VFTUW0NV$3N*Z.;U]6M[#80#P%>IQRN6TRT ++M^D]MQ=KS?M?$I\3U]>K[C`]SO/<^);2ES(5XFOZNR=5YC#OX['N(6ZFE[+W/ ++MD<V_JE_68OE1)/HHV5GL:OBKES6X5+V<)*^3%6LM%:*)]2A2ZXQG(A3"E[RE ++M3084]E^5)Y;[C[U>Q4^I4X6+Y?OO*8>X^5[#L>\V%O[U[\WTN2_A4Z[O/L>/ ++MUF_ZGB^%O_\[SW?[/N9W^_.=QV'[/P?YS]X/G*'V`4"@1(A`51'S/K\T)[/_ ++M)[G[G^KY_1$:'<*(?\7ZO9\T.1$\;KF0]/Y[;?;<<7(W&^NY:E?`55W[,+') ++M)')/-/*DJ+5\:H38GC?N%UGN?T\8L9W1R*;+O>?4'$7\>M/K^HA'\!_W*9>= ++MYHZ6]"A32?U:EU9`@J'Z?*POKWT2.[:]9;BM75X5R$(WCW>\<YT\:+/2ZE92 ++M"V(V_F0EH09:A15K]M[9S4U;455@*Z@6?YS\EZ/5\6#N:<?ZE>WC2Q2LLG&R ++MJK[;;7O;X3)\QEM,F(R"'FGKO-8_,Z0T!U!T1$3B(?T_@OT>Y,V8=Y3E+_W$ ++ML))8R9?.:*.;:?EL[.CN8YY?U5[=3P(6*G%6"WW-:-W->LKVH4K1'-6LU>7J ++M1W<\8)AH`711P<VPQUN3.-UHO7;DE\E:,]YT\O%G[AMZFXZ*Q^DQ@888PRM% ++MH:OM*Y!+NAVOP-^G5!7MPV&V7;ZZ^JOVVY@;[XK%_#9;FV82GKCI=69\>B)E ++M;+!5=LF[A4(FI`XA6D#4EHDAP%XG6*4`Y:=Z<!R/*$DOVW[QJ"/Z#48S)?13 ++M.*JR>=@ZB<'T$\B&QRFY2P/T&&_G><]U>^'W/WYUU^A*DC*3"Z"6K`.-@40: ++MG$JD;XJU$^5=B*C2QX1L"_+8"*.-P739[&OBSWUNLNSXHPN+7/-H'8VBI_@J ++M(9A3I&+YW76*D>>*9\6O1P:Q0V0_"$JXV-F966RR.(Q-<*46$"X9DM2"+39U ++M?$DA@S6DEQ>),F'P23-5<TN5K&!<FFJ6(TMN%H-41[LNQY.'&:#6Y&95B+!8 ++M&L)?9!E1\I31C^P=OBO1I<S*T-".?=-H8QC%!K^VO@2"F7G&@*?XKG*D%0#< ++M%9B*LYVP&><:BO0X0HHI%BFTVBBZ@^ZE@N&A$E/-]FL27Q@XF$8.8:"9,+`8 ++M>J:5=`HRC*.70*@FVQC@F*8'&E3"DGWI7U^R()GL*PVPLH5'2C?8VY(:#"R< ++ME6<YSL@ABBUKI?$#(`$O')\4:>ON#4.=;XI2LE8GI%%9:ALCA$VDCR"9D+Q4 ++M<3\@4#J!Y:-$>;O/%1X\IYVK:=-5<[2FFPRA*%7AET<5!PP/.4'EPFW&X,'! ++M^)?REII,?(55N<N6JI6,CN5R3F/R_&Q6C)##0&&,.QI!:;#ZW)FQV,IGC#*# ++M$S,Q5S!Y&8-53FBHZT6CRV?*2DYHAB8N>SU@R",P2_P*W#Y=RLUFHS1F'2?A ++MP2R:PW)@G&&$:'S*?D1.J!41?LJC(.1Z,B3$BBJ520R2[8X1=MKAF&+#5FE& ++MN$MS0:32+F.PM@5;2<;F#A3+,XR`3L%OE$#]0BH)\(Y@`9!->B@'01B,B(=] ++MP6\^K-5DY#)8%@W@NJ.D5\C/5(.ATRTHB(J""@A01.Y]=-Z+C+%CYG4]/Z+Y ++MOA5K?&:;"H\;G+7AZJWR^MUGU/I?);R.O\Q\3UZ_<Y'I=MWWM?K^;\/[7X?O ++MZ*\AHT%4014%$$]AXPB.30C.P"^WAB*Q$/\/Z_%UG\K1I;:-O]]GJ/5[*P,- ++MZY3/YB?;S(Q,/[3!!%"]O8:]XB!\A%F1$`^98=_;]7_<H_>P[=(FH.5[B5-1 ++MV$6J_IX)[<]+Y6P[Z"?-^3$]_:="2Q1PBBDEFE3MO<422^G,C@EH/4&5/QIH ++MV;W_O>.Y+2B<=.5JWHJJBG\NRAY?E?R$/@.WWB['`5SZ7-)(M0Z,@,)L-2W+ ++M>[-_QT9[K:E[<KC.F>]SWAJO?]<ZK$S"O5SWN,E1.<G8+XK#"8K#(B<Y0P:! ++M0TQ@D_O1X:*48/E>J.);X6,840>]%!">LP%\5V"\H-!@P51$*PH;T]]7'`>8 ++M!0,90I%#QQ0-\6<%P<LH5&8$=6&#U-A@]*G7LJH4%D9,/[4!U\>1H^'5OKXN ++MDA@*,8GJ30/$D\SRJBQ.F]61&CU".-,;1-01%\2RN`T&4:!^"O[(BO379F9P ++M0F:\^"JL\4O'D=P8*Y>*Y28Q9D->;;DYS[,-Y4:KD<1;CX$I2=*;R8+ZJ?VD ++MFQL>*Q;Q0S"_*$4PL-56I4K5C>OEK:#!%OZ3<&MUNG]2NH-=",0T6.4Z`>99 ++MC#!N3C"R9DF*JT1I@8.(S+.9*9XEEU^C-&RYG<RD"E#9&87<2C'9V'AK6*:" ++MK<XJH(:54#$4#.5`R501-HL:HGS5K9AD[C]4=OB.HR/0?=[?IU['N/->WP_+ ++M:_O-3S/\I_^G^/"]A[?YOL^N\W^/53><T_T?A>B\Y]WWWT_\>!];Y&E00T"( ++M@*@@B:D!11%WB(P*P"BJ*@JIWGT<KZ#T@B*(@(F^5/W]1[+V4<#IOL_/ROVP ++M$YO65/MO1$0OUZS9].JN_M_GR=4Z/M[*?_+A<+P:]B**$4DGAU(OKI,@AY!0 ++M1Z@86\]^=A]=VM\8RSG#?'R(DH*!J"=$_:?;>0%4'KP'.'**JJ*HJTQ.%J;K ++M"EDJ2HTC*=O9[GT`XS/5]9?R?*+[)-=F,(JA$J#*D^R9-/TGF3W!AB(?<=[0 ++M^GOG%?XF'9\CY9O".R9A1_C]VY-!]!SOF;%F9%5%9(YY2=GAB_-'1/UOM&67 ++MT,(X"C\&9GOL!?1&R&.&+,7GZI`S?-^'C:*<Y@^6GC_*^=L(S_Y7_Z%814JU ++M4_^-'+(5U:;_YES5=5>GWAU1SFC54NF9;&><][W^Q_TE5D(?`3?T/H>67\2R ++MI^F:WZ54?'/"?+K3R<%A>6=)V^EXYWWC>ES8(9$L)1GK&^:!*PPL844/Z6>[ ++M),!+,B>5A<]=0AL%O%H4J'B]+J!VP%*2VM9;=EU%+7MF\>J)MF8MJRI.B)N% ++M$?&2AJ5=2)2I2I]D0.1_]G]D^)H!-H!6E&E7D?])'Z?H/M7F/9'[/7`>'QO& ++M!/&FR.?3D+^_RFG".A>EF=>%%7C]3PK.VF,?_"BL.C@9SS$/EY`G"!]KYJB> ++M'S6/K)Z)\^*R^*MA-6SDWMKG=N.>2M_U?P5,.S"NAE["6KIL3>Y5_W:..NV5 ++MYE:$'###-\@7DW/)0DIB3M7,GW_-K(5%4E(%*TK6%QEWHI$J1(2,J+I"NSI6 ++MJZ!C[)0-?$ZSA(@.O@M60G'^O_F_S%)*Q69SE#P_/B?]<LT:^TZODSE4ZYX* ++MUO%+_\(62]==83"_5XERZJK.3']6VP\D,'NS4MQDI]W/R_UVIQ[?1N4^MBB\ ++MBL<9GL&O7-B:VS9+5U56MA<UYS"315<8OL'NIB_MG['5*M$ODBS\7*MB_#\2 ++M=/>)]9!Z';O9]2HNSQ*<;'6P;$GO[=WPQ^1YM64`51$%$SN!UKGJ@B)O>S&7 ++MMOG<QJH_<^A;C^AWNSY/<5:O$6^!6R-IR^@W'1]!1W:U\KL5TQW>NWW<GUK6 ++M>\#X7)^5_YW7X?8<5_/Z7K;FE1,D1+)J%&4/),A\9$%33J`>T6Q]1LY?%Z7$ ++M"_9G(VG2"'R>K$^"=UV2K#K%7S?QSJNH^D\ZP[?XL;U])X5;OO\1R221R7J* ++M:?WSF6+[SY;.V-Q5ILU=?<^KY.-5O_![\.!'XGSE%C/,6NC\RG7'_T0O%'UO ++ML7+?N#ZD@L;>D55/`7VJ^^4Y6_;CET=3TCL9?MK7\^V0O<KR*W5M+\=>U7[J ++M\FN&O+JEE?/KWJ_G7HUK:)JRU%>MA=$O=+?K>7`4Q5OU]8O-JR_L6A?\K77, ++MMM<6HOP5^"LZ^B6)=SQ5UPO5^EZT_YKQ`UJ*J*:4_)N<].+L$CJ'"RHA6/<* ++M0F#$(AO17!Q*+BB]C+*PK>79RQ.5I='R+H8>\"2GTY"!/G87'W7S]BU^:#_E ++MU42J_YYG[L(B1C_4J083^MD6@ZTTF)K^R['/@*Z#,RHP,/9AF&&:TFY[;,\E ++MY"A_XZ,22AG>DT8)`_\Y^_^G^S_M?_G?_/?V?K]N[N[N[N[N[N[N[N[N[NW= ++MW=[Z`1#Q@1"QQDAN,$73.P].`VQQAB,_'_EMD+JCAX68/&+'P?DLGPI\C1C\ ++MJJJ^MI555555555:N>UV^GZUOUD^+CXW]7Y?D^:_8`(;"$4`@BHR`E#^-(4! ++MD`M*K$*%"A^>R('("#$2&4&%@47AMAB(DK;,1%2'-F*-:)C@1MMMHH(M8"Y! ++MDB(FT8B&)YMLY3;!$0JBY:IA*4"@>3;EQ'D`&H(!B6FD"D*B(F5@HJFD1+-- ++M0U%8`+$K2C@L`F$FN[.P]CEM?)V,.SFO,(>9"62>+RXL10D!,B"2*H**$_9D ++M;\58?GA(7K^QJ^+U:E6PGY7.%"E$HLIQXB6+;D*BA!4W]Z^M/#=&$6T!*BB! ++M^S`00D%D4&B$HAHH*B250!/W\-%^>OS0X_/AE<T;)H2D2E-"&E:0.S,.J0H# ++MP+L`]C3C8:4I>D)1H<U*4.ERA!0!H'0!<(R%FL:5#21"<EX020%(M(E.@I#2 ++ME#<;:`Y(UI")Y"4D%$H')TJTKR#$`?SXW&L`4(=D-#2'!@H4.6A2B6&D+90W ++M&L+0I%&Q0S1#1R<2.D,,@TJ4%&C6@T(ZW-&LE"ADL0:$II7B1)`E"T:$I0H" ++MD:5Y!R'G&LAH():QS+R2@*6E-+@20*0W]C!R`I0I#D.2.R[&M833!*4F)'24 ++M!R"BD*1H-PM2A0#0FA'9K`:T)F:0,3R'DE`A0ND#2)<R)R>+S1K"%`4#I"E0 ++MK>OW8_?;[BU2!2\0&I=0!,1+1$."X0)B$.32)2%(E#H`TJ;5DDB1J$Y&XUA& ++M(730\E-*TJXY@Y*4M,%R#1XP#NM9&EI=-*T@%(Z1UV!Q!-3*04B7&LM#0&N1 ++MR>2IR:#,')0T4L550*8(Q"XA8V"FA$Y-L!R!<0P5`4H-L1K"4%)I"@I0-#I# ++MD.EFF1*5#2:XZP4.G0FFD*5=(:!H2**E:1I%-5$Z&J<0AI:`=(&A_AC)-<M; ++M*Z%I1;-9*"@#0!0[N5H-<)@@*!I0#1MHML4.E:T`&ADA:$Y%.A:$"D'A;:+; ++M`Z&V!-*2$M(M*TJQ#B4*VT6J8LE'YGY?,\\SVNCQ>K<_^5[M*2U<0.&9)3)% ++M6"I$I1H`I1H0--IMH:'0-#[V$@DK2%"&@6&*0H-*:0*0>3%B'!&A::&:A6@2 ++MA"G2B<D=%&G7,U@TA00SB0#0`4)2@<D>04-`<QJUHT4,$TH-*L2E"AH:!T&V ++M:0@F(=3(:6E2D6FA:`#0+I-+F(M!JAHW(U`<E&@"EI*0H+Y0.-55Q$T`=E>R ++MS1S*4')YMN:-9-(M+"FP+I:4-5$1)$+2AFBT#0FE+&M8-S(\E3DHTH4@:$#0 ++M3RP<@:Y/(&XV-:`2A&D*!TH&AF"D'<P:0.28(TQ"E+R#2H44G)%Q!!(ND?Y= ++MN3V%TW&V@=')'2#0O)=*4!)X?B/!0[`T!V4:8V=`-`>2M+S8Y#0@0NPAR&E* ++M!`R0I&D72P.2+2*?'\?I]/TO2?_Z=`$4?-T44.H:2FD:2JIJJ:$B*($*44AA ++M'2"';#B*PGNL&2I?VXI6>RJI**2E9H-+V:..73B&BF*E(B)B2):2J%[+JGU` ++MZGUA-/-J2EV=2TT)41I[!RH.0:$['8>2-"TG=E-.B)8AH(F@)@H:H*B729[A ++MU01%+I=%4!45,R48;8#)B5UJ)8BAF:';*5125211#2)04,2D6@H30E`$0N@T ++MF(331IU0Q(4$0TT.PX7_9+"0LI*3!4%1R`T),Q)3354D1,:#-$-!5"4C5+24 ++MT]@T%%-)03#2E14%#3$U$L0E4%S&JB(L-,BQ89DJ!05(G3M_J:=?G';4A-=0 ++MH7UML:1K;8VX,*'4^T:"0/**HI)*AHB(7"48SI0DD$#&<)4G/I`4"&@!U)0: ++MD43)J::##H2M(6RF@:%I5T@&E$T(XD-+$K31!W"AZH@#^237M(T#2.&Q^!.( ++MF2*"JJ4FIJ)JF:)JBFIJ*"BJH("D"J:%:&J#BVEB"FJBH4P\SSCM::*1-121 ++M1[0ET_]E'$*(.0L%%5(5F#%2]_'-6P?/AGQAJB:*(I:0Q%5,4U,)H':`TPLX ++M`XA0%'H]GQ>'9QA]+Q%S1-E^LZ"^M&QH/PEI#D'8HI2A(J2J**&BJ"AIII1H ++M2BD"D"J2@I*:8IF^[(8FF@:2AJDHH6@*"AI*"@II*1IHI$I%Y*GD!2&DKF5R ++M.C2M%&DWST.]'&L:S$=RK#)3R$TKH2A*3C"4<GUS*<@YBVJ'0]"$Y!H=%UK+ ++MR3D@T:PLFC2!H>2%"4\:DII6N5!0?K+R.12;K6+EOHP=2-!0;3U?1Z_T=DY3 ++MQ*Y+0>Q@I2@>0!2E*:"XVUH#DX)^-NR=CD:4HY"E'&C93E3Q@?X[D`\@ZU&J ++M*H;F*<-]MN2T]E-!7Y]'4%3=@.D&AY$D4TH*')="QS$:YP.`D%)^4Y8$H3L+ ++ML60DA[-S.GFL$SE@Y(#)%"0I/P>_V%ML%%QD:P^Z(>0\CDB4<20.2Z-')'A! ++MZE7D\M":Q&.M8.2FCD'(0PT'VP!H[`]DW!QR`Q(.D(EV,-.N-0:H-<D.2AH, ++MD)R!"@*%TA0#8L)R`P24%)MGFFYSD(<CD&M#@D-%.9BE.H*`-%T_;^WH#>>( ++M7B1I6YA.<XUQY!R"JML4H2_?+H#Z?&([U!Q#0N]2E*4`4:E34\DMHUDP$A#" ++ME".@H7$+0A?67D#R[`\.&MHVUR#C1+0TBZ`IY4FN$:30#H>1QD-219`0Z:P< ++MD'T>-#[WQ_'\"X!Z0_$+\D@:*TAR!H#2G)>6@DFKFC6330C_#9'LI0=AI#D, ++M0O*A>0+R`*&"H2ELU@TB\D-`<-DT!2:!CF!_;84[*'9DAY.(0HN-8.0)0CEE ++MK-:7PC8A#4*9`3,2=OB[]&PL-[L!H*QZ;:430%&('24AH5PP-`T(46;&EY"T ++MA2&DUI'AL\E'\+AW!W#F2Y)I0H3D:6X:VT@9(H'DIPG0!PN2+DYAT!$4AI#2 ++M"Z&D&U"4T`68%F$+#`4K;,_L_X>@_-OF`<"AUTC/XFZ+V9B$#L22PY5L6P1! ++MQDO%X(Q%-MW"_F'XN2W"B%:OI-M`727NV(S[AR7]/K]6GT!$1!!-0JJ*HJG\ ++M,JAH$$I%G6@HE2@"B4$%400$5"3PM^"(4*XJ\J+KW<^[C!75;S1/Y87F,]N8 ++MARORA>(@PKX.%;C>@55H@*_;N%U6BUY1Q&9L<O,U>!JJFS?M!T'Z7'UK7XG3 ++MMO*^UQ-#GZK:._OM77DCVMD][<K0EHCE,>.SB5182#UH=LYCA01\2.=94`(! ++M#%<B'Z>HP]*(`FP4$0I!B14JE`H8E5@210B&@:1B189W]=D0_:7H;CP="43` ++MVVF*(*H-(G\L4)3<L/.AD>R-*Q(-`<$XL&("R."W!"D($:BR@8N,H8$4B-#P ++MW"D.%$<X9..)#BFJ6DF%RP+`P4R%Q$J&0ER9/Y!]#]Y_T5J*=*/),.ORV)?1 ++M1*O2C%.^RM!A-P01`#7H@*B(JH)+*20)`D20B2,"2D`A!`D,J,D*D*`#`+-` ++MH22L0U*$$)#0P200)2P$D@04,I!($H0P$*A)#)(T$RRE%"Q$0,(BPRTBD$,M ++M`A)"$B@4JK"T-*,P@_0[CZ]ZOJUS_O#1]_X?)[_R81*OHO^JLM>HN18@2&!J ++M86**F\Q@1#&T6<"?UXI@Z(_G:K<)5:\5M35?L]HHNL)3SANU55BVX4<0/EXI ++M9G.9SN+SY/97FMC3GN1Y)Q4)L^2G($?5H[H11561A5X"HK-$JL<ZYZJZ.T?* ++M1'%4B*)1]<W]6N1CX1N-Z*;,Z?QG<\JQMQ8LG+M.JP;FE7(<[EE7'L'O^0QC ++ME"3XEOCR=']8-S`H[LNZ8ZP>FY5:<,<FC5>=-#HE?HE5=>J^3HP?)M^N_O_2 ++MKY>I?=:4FH%.C.UT#N,%TB)5;H%7KF57=9UFFTQMS;PL1R:U59&Z-5;6CL=5 ++M=KW&&#QC+%-:O"5>C95<=0,;)>859QN65<?'R&A#E%6MD_B`1_#5=GFCM@*Q ++MH])?:_3$1)4&V@N&;UL)5UHQ%VEAVJW;-VO,=;Q%[<$>^55WJK2!@;I+8FZ' ++MD6?%VOVQ'[X>CQ7*Y5CPG<V+#[_=NF57H((VR561L15X_`0-^I;\/E9?Y8G< ++M?$_5J/X'M<7<_,XWC\CZ7>XV7RN+R^G^/^K[7C_IDT'N=!QV^\?X.[_E^K^7 ++M.>0_.N'_[1(B!GE!.W]9ZGGKV=Y!_<<USJ\[P-YV>QZ3)_-^WV]SVUC\WIN- ++M^5_N&`=ENOX>'@7<_ZW6<#]7I]5_[VO\*QK14/W;_\^T_'S*%.7]N,_4PJJL ++M"$<;XCT"ISGL>G^.=YK*^+$CF]E&5?]'9?H]4GLT56_AX_R^WY;E[FA?,R$( ++MXW2*>'\FV)]>O#_9<UY[](?[VAS$R"&;@((6?):M#./G^0RZQVW=*+1H?QXV ++M;D21*Q9+@ZU=/@_DD[B>,P:,G/J_J+_X&-H^S<L;:U:CE:7Z3XY7Y!<+1;K= ++M@WI<;\9W)KZM?-?K/0E6DV^ICD-D?(8-7";ZY;\ME_456T)H="M]^\S%5</V ++MQ3)_"V/U'(?L6N2T6_.^5;KE92I7L*+6OQRN9F:6+%7Y(FQ&%_V<1G&7KZ)M ++MO^"KC7"YE+GIZE0=6MTUB>?TRYTRYQ"6G93+AX=`^*_,`61[.NZ$JUEO2?5T ++M.29++1@9Q_$U6)M0^_T\1IL3$Q%LEB^0S=CQ0&*\0>NOY3:9.RZ?8;'@<7M? ++M%XO<=/OOU6N.SOU<"^\+;[WS/%_SY'CONXO]N#N-^_X_?ZW,RLO+RLO+R\O+ ++MR\O*R\O*R[2"'9)T)^K"_1[";07.S^?\;>^M]UZ_XOO^V\+[WON-V_:<5/[+ ++MOOZ==_#I/<<;Y3*R1$^6"H&5OQ!OS*B;X1?GHK"1JB"H!G.T>LXGVV9M(O59 ++M?R7Y7Q_A=-YOS-OA^^_9-WY5XE>V\MU?J'ATZB',+=[SKNK55U@W)>U9^ZZ+ ++M]D_GT4[*262626>CUL_L:*NBK449_TW0'3?]47H-+.K>F,3QB'/T4N]R<<)R ++MJD/@6(X^=X?Y3\],D1K[Y:')E+LK!;'&`L)1IBI4=^CR&(P"7C%@(@?@*)ON ++ME,):SG<<;,D^H7OJZ&^A=N;Q9_J*5S*RE577U4KXQ1]DMY*:J42!ZQ)26Q:B ++MB*:BBS,,RLT-68$;HSG2B@HN&!)[1VCS,0GU7\=&863/%_+#'7$OJTO*X]_@ ++M+C7QD^;JTJ_`U2ZF[VQ6DQ))S-,"2C0KYY<]-$M07!OS%?87R$0F89EGFLO/ ++M8R1Z'"PWUL6+<E-)GV70F5F)7MF[$#*BQ\&W4#M<IA!005#HNP80(L7_6BUB ++MQR<?Y*20[W9\CP]'\_S_J_'X7ROD'?;_ZN]\3@_I_SIM%_]U?5Z'J\SJ^G]$ ++MOY/O^2ZS5?.^E\W:_HC]YT?\_VFJ`-8B`@H$J_U7SGB9F/XW0YOV?@_WY__7 ++MNECVM0B[#+XCDD$2)4$B]?Z$,XS-;LW75^_W>C^FHOZ(HHI9)8Y%_44*X5:9 ++M>SZ_B//\NW8==W/GN0]Q$Z_Y&)A[IL&BBB%%-6QR.!X<4%Y$;U5;WJ?$<>Y9 ++M_G^Q@8ON?/)Y9_ZF%^2Y)YCBE"W\ID1511D6*")/M5IK_[96Z6_X%!9.QMGI ++MCX<A0RT_2=+&P1D\4OV(0EC5PXB]CRGTX0^LQ]B5SO&6%>>.<98T2(B_@FF_ ++M\74PN'(CG'SU^"O])R%?]M]_KQ[>.^X>C.6?3$;.('%TF^_>YCIJ6]7'$LQR ++M*GDV/Z6;)1IE3OT.__+UR-6LZB&5"(%K;^7?KIG_]SH%4>:5"IG$T;-$/JL] ++M*U+%=LN0*()-48E5F)5<'0W(2#R155DD)*@^4UC7EC%(*18"UT;4TC^<MQ/I ++M496BC>LAG8OQE^*V?PO^%CP+!](AN.S_S6+89A.N,SWWV?[WI6M4:FM&F*/+ ++MZK9?;_$S_780_&Z?*^2I\-Z]S[I*3`H_RH#(?-`/K@.-GQ89]EY/W>;<#;V8 ++M,Q_2](GU'$V:\N`N;'-.:DRL_6APW#[G.J:3-XK!8NC?_G7O=CI1AAZ:UATJ ++M@^!"?*_)M1/]YX_WEC3!K;ZPFV*#[KU89_6T^_^9C0<T^6U&E!2BP\4_5;L6 ++MVOE;*.:3U9T![F&B%DB^MDIGP1M4>Y:Z&'_?D/[<'[?;%>Z?G3U5\K,@^7OG ++MM;#ASF'9]M/*1"X#WM6=&I$RBJ'N3M<^IG=:<1NAB\]UK7JUY)<5$08*J,C_ ++MA]G_#^V3_>:T?ESL[?-]R+)*:=<@:F;WE$!S.^6;?\*BW<++RS&T>88HIKUR ++M)3+7*TT]["OY[^NW>&?![?A?95AL--OC/^GD'#)^MU/IM^BOJ]OM17AFKSRZ ++MH^3:R^[/@?3.,/!KUIRLHJZ/(-$[1+CQ*YRJJ@[3\3].V62K_<OV]];!B]12 ++MF?H-,_Z9^E\C_@X[9=+4V_1WI?"NI&%9D98+VFAKR/3BF9;#(RJHM+,I*S7Q ++M]#P"5+KA?^C13/Q"4Z"4_:0W2[=\/US_E>/NQY?DUM_)VH=OR_\WG%\_5;W_ ++M'E;]M/?;/?VN%4V&_:I9A%N_=_%;/PP?5[0WUUQ-X-57\;^@-K#O2KZ?NU/< ++M?8/.V[.!$0/^D;>=_<6,<>C4BX8:V\K!2>2?J^6MG;[YG>[,SR\[<;GK)1Z6 ++M,"NZ9%59U;@WGOI7%<PJG**RV%2(VHE7<V>[U4'1\2]`I9(Y43SJCH:(5HSX ++M4-IVU[38XN<>[#/AZ0FY@=JDD(XE>ILJV:8:H+,,UXJ:I]U#1T2<?!4_//D_ ++MFZOA\>;KB-LU[?,]S^)C@S-PH331QQQPF=)%$Z*.*)[R665[WOCS.[=W>[N[ ++MN[=W,S-F9WN[MW=[N[N[MW>DSF95-KMU.^W=N:FT>[LSM[NX71MWUM#7PC:2 ++M6$L3,T44LDHM?,T-8*%R[YCD3/-%%269H3*A;_:?WV)ZO1D^IP5E)EJ/RW,N ++M[W:U7/C,JVROM:JS'(EV2-10I5(I[E+,S=+T%B^UYTG?;DG]KOFZ"U6SZJNE ++M9E55515T!D955-UT>.=#NZE^7D+WWW^%M*7>@K44*;T\5Y8>7_(9FA-"^[=J ++MU<+CM]H]*JZ6&@_O7,]G&?%RYN8*@U"U<<QN_EF?QQC\@7-&7N.QS';WUDU" ++M"?,S<J4L_F;]=2N+?'<*AS(H;U><J^>WF>?S<%D55@<^SE6-[WO%?(]A[U]@ ++M[D&EZ^*$3*L_SH?.I<Y:5H<HJM4?T<CZLY0E*TN!IHI=E%"(9\M,D]$48IZ- ++MI(RK3-4?`J<;4AZ;J:'(69]M'5JBVO(K)3-$1-+R4=>,FD)&AY&MGG1R1D@L ++MT+LT=F=G]K\YJ8CYRTK123DY=A`@+ENFWT52B2994A(][U:3"A[N]8GOJ.@Q ++M-,O#.>RWCS7;.VYGCJ=AL9U;EK/V.UMNMM,Q.<K*_WN57W_T,_7PH;<L?R,E ++MZ/`O*F2F9^"J!GV'\N@IX\44<3HA8JU>6>>67"G(%A\I'`JNF>^DH25EFHI> ++M0.RDDK6HXQ2M3'?84Y'&JRQ+'4&<.J%:K-7A++!?),^*!.+=DKF&U$A:D)&A ++M8FJ0B%(3$M22$0I+-%-)'6K14=I'8IBRS^.VWP=M.PF.F]K]EQU=;7''7I3> ++MCM;%Q--_F\OSN;_N/K[;U*OGX_%8#?V)BN'\Z_%BUN=LV#^?]-U6DW+Q6KY= ++M&^]\:XS\'QS=+WW$^O?QQQX=C0TQWP[8[.1T[?%^NJP8/,X?8L^J/O]?\+P/ ++MRPBF&O]?OG[T+!S_)3"-\L:K&XIIHJ29:UJ'N@V78RX2PJ%05SWK2K*^`MJH ++M,Y55\56]%"(4CBR[5:M)39R\E_J/#KJ[#KYNFX74Z!OF^-J/&^?P.Y[GIN;H ++M^UQE/3_"_OX7:?,_CN?4>)Y_Q/5<+\<?JO5=;;T:(AGEZD-2R;3?.<3?MYTQ ++M&?K5Z/KNV]?Z_^OL/7?]E_["N"'A#_8:3H#,YE[U6+W#.W'9</MB*.*.*.67 ++MW]29B2B5U)5^8G65'KH=C)-!/N'_A_U6]8_J*K/53YW[]J[YK,NP:GX%<HJ^ ++MC.EYC]IX\.**XQ^@I,JR,5SR]_B>?NDQZ;*1<7S,Y:YHIX1RQ-T=1B!E]SE8 ++MY!.V^XV:>GL(V&:!B#TLC6[B*U4QO5IFCC<'H))%59A65IB;/"W%IM'XS28I ++MC'O:B>:AQAFX]HRY92IB5%6YT*U"I325RT?<N%#C1X!J".';K^N,P<*:8]?< ++MV-TT^22RJJWKXU`>EUI=X-G5&'AK^%Y<%U:H@*H"G%,RJH*O$G>]U\([W@?[ ++MPO(]U1PNQ]IX'@_*^]YCVWN='U'QN-]E][7?1Z?7:?YGY,/W7.?[^]S7[-MK ++M<Y$$07W?T,5$^(D@4J+]*0!7^9_,OZ/Z_P_U-?[O];PS]I'\GNO9ZBIT$O97 ++M;7(ZS`U5/Z9/T5AM.5/(_$YODO9$#(/DYN'T_RG'#WS5*G1>\A%%"*626MN\ ++M]B81Z#/PL[OB+8KJR^"0^*<8_P(OGR^KML9_;M!7DW7ZQ\/S,RD4;1O^`KOA ++M+%\2ET/3,=IY]DC7C(OM*Y5B@YUK"#VQ[_TU8_Q&>T]][#UOKGSCF=E&4+"I ++MF,O?Y'-'A)V3,S>TZ_%/S>`HLY:**:ZM_D>:'!,=/>>^DZM^,9AQ$AC=4>,< ++MQ]`JS'P@8/"SC,<><0KIK/#/J%8B(?T6\:_0Z<7B+6XVN])R^4O'U<O+5YB% ++M48K"/@HO4:TQ$^5,1B:XN]/TU)\S%*HZ>K55G.<Z6!6.`X_@\J';68%;9G'N ++M/<2&+O'BF+SYRI_WS$A8,5BQP!CK[5FH;X^/33TZ_-[C_DF"FE*@8N/Q7+KA ++MF'#NOEC7YH>.,!QH(J^+C\B<7;,.TG(E_@+G&?%^5PB,<^WA58&2I1BZK4&G ++M9<@R#F;1)V6LT#T^A63(S%S&^M8-`7](F\$Y:D/3"/#-4Z]3AJ'Z!%$`<K@# ++M`Z`4P2'Y__7T(Z24?^7]U_C_\WY/"_QCDG]>-(PDH0_V)!P?N/L,'_;W+%3< ++MBFE_'ZOV'^)\[0_W_'<[_VOHK'_?>&78_A3Z:T)M-U^'[/P_Z>JY+R^3MO6> ++MK_MW_G+)[G?8?P^ZVVEZ+]WKOY7Y+JQ$UB]D)]9$_+Z7\C0$B6^/!(PVZ!*( ++MR()`!)>J9$0@)JQ$YWM$$->?-[B.(2)!4/=_S]=TWSNLZ7S^Q^;HI4T5Z[[6 ++M_[BS>07UOFL(B%$3NT+F[$Y>81X!\[0'J<K*_PHS?U9R^Y_65H0A"/>>HZ=& ++M"WV@)R*HGO0>I!"::I@=MGSR+,,1IIT0$]`@H()Z$034[L^)8]`+)C,KOL*( ++M*(HB#W]+D%0"Q99$",KH(1\L8G,<>9DZL]3V3-0_"6__W%K'QJ.:XKG*PW\6 ++M=\UGN_HS>L:W]>S4^U@"7K^@TW0HE@1)=W]Q)A/F9[[@3I7%$DTE5E;U*`E4 ++M?JC&CNBI^MAD-\9YB-:!7&@I^X\\YT%0E/@3$2K[,0@-ZLR1K0E8@>&?$(\L ++M^L27]!GZN"LYS49N*OXX@X_<)^^%DF-$5"T2HG8'4?7P3DYL[(R%%^)6-/NZ ++MW>Q57R4/9F9(R<B[5O=.+)X>Z-E_G:'@#XB!%V9Z><)IXQI,$[/BG"N*]A57 ++M"PM!H!UTC,\5].MBW4+9"P87..D6Y<X@B"[JO9SU@[KQ+R7UNDW!9LE+R8V& ++M.NP9;^_/<;LQJQ6%DE7RJ!I_.:3<ELP^1LFV**>)^?=$P5'*2[YO\/5?P^4^ ++M#'L^0E\+5\*^]C^'I^[/E.^+FXVRZKSO4!_MF/9K],Z+F3UWK?OXL9H?F?9_ ++MM^#NN9_U_W^/S.E^!N>[T@B'FB48_7OOCZ'L$ZX\SU_5\#+B^E]3TW0:7\A_ ++M#/?@R?;<EY[Y.&>>\]^7]+\/=>3_&=)QG)]UQ&(_KUO^Z=&FM_1QOX>4\4\K ++M_ECS/U_Z/A!\)9)9?I^9D_=7TW(6AS.T&%`D/NX/LL&$2M0X_F]N9U@YMAIE ++MT2\OEMU?HV-IW7A._%6G<0YSR;C]V$U<LG-J>+*>E.BP%%A6/L8::8&;QX8X ++MO?F!R#_.F7F9.]]=J>_PK28I5\RM8I.*YZ^2&P7$/0'X?`>99^ZV[&&:P+]H ++M.YU6HN92U2//C'IN_DT1%EIB((2S*+Z7V>WCTI^?[RU0TY`PYYU9D9&^=RT/ ++M5E3ZY[_&/=7\<R;4]GWYDE@R8T&/EGU!*[[9MRQB9'RB>-$7$N7,E<_R%<UQ ++MN31>S7",*KN_QREWW%G+RVQ[%E<HRQ8'`4RDWAQ'H*I')%^$!"3?&G\VZ+3F ++MAT*XI"HL?:G)<WL0.,SJ/AY64MPHOC;2HCD0W[(GO..(D\'F/0<E_O?^<][^ ++MDU'8A^GY_!\/[GS#G8?RV'\?DS1<#\MZLOV\C:^O^M[WY7VO$[?[7S.[\U>W ++M?Z=":!$43UGJ3U'-/=VBO7KE>&E4RETOK_KN(_8_5_A\;COB?FB_OD-,AJ+G ++MV#58W\OF2?W^8:7UFL]CK3S_R^/]=J?6_ETUK"O=)W'I][O_,87;]U-XZ%]< ++M5?B&B\IQ;.YQ>N\W-W$(0CDM]H31?+Y?>B>](_*B_[ZI5UYV1\#UQ1&;;^OI ++M?<[[P/G.T7EOI-[;]O73^YSUJU^_]_G8O7^<YW5Y'QOU\7A>WY?WV5ZWN/'W ++M&']_J>1_KV.?YWX75[/9ZS4S:G4_.^'X_JKE?(P_]][^G"TGENR\YAQ;_9KI ++M1MJ@X&[_3&G%Z=^X%^ZJ'_Q]MO[THI@F";H@GC81PW<E896V)L3%3&%ZT])' ++M;4X>]]D[C_;1[@W!\$D*^XW"KH2B&L+?3GZ/2!F2'C91N3B#B#PC=;I5R#2F ++MN/1W34G(:+7"ZTTVF476D9U6\WBKMBJ4Z,WAL]V?RTL6Q/?8[MN+A"A:M*+P ++M3^]_L#Z[=ORI+P.*XMF:+E!:4XPY4Y`X)QO!Q69LQ.ZG.5'3Z=;SG,YW+0%M ++M28YRQ$<7Q:\BRZ<SV_5?/G&G<G::DM&Y,S@BU4-J:+FSE^8%SW*'^MKT7*RB ++M[6A5D\[RQ9'<:;>:?+,P5^X.89=L<Z?5+4?4XF)N5=6PSF#]O+<GR@ND)*%N ++MG)D^W-N^X;,V\4IH=UT`XX[CQ>/,]QYD&*:0HTQL#9UU6ON2+0?TX)P3)REB ++MMZ"II(M>+;K;=;3+T7'#MRJT8AE;@S_0FW/YH`J(BB"H(J!L/$,;0\'7FHRE ++M7!R.B8%Y=AM"P=5Z%GZ?G]KO(^?CYY??J3*,J="JKZ3O>PTU/&=]P.:^K9N? ++MO[?FO&YF'R/Q]CLNS^'_[N]=F>CWOZ]!_WI_DZ7F_K<O\+<>FXSQ^J[[ZN^] ++M-I`0Z5=(NN7E.J];#I((![3M>U_;IO(])_V0$3]:H@`!@J-#M^0.F/M=NW-' ++M$8+.7N<O;0BA%"*22>V1Q_*^X5O:EKY<4<#>]TU3LCYC*[SW\%7PX^)_=ZGO ++M<?9\C7^]XONO@4];;XSDO\?'Z/&[?K\;#PL/\U_P/E_VYWEO-]WZ'"_CK>AU ++M'S]OSGN_O^T_AA?E[OG=CY',]I][-V<N__%GJ-I^O8>BV7$ZWJOK3;?>ZOX_ ++M(>'[7ZWI^MQM#YCZ7S]5V>![/Z_HN9Y7X.DY]I/<<[PMQN!:IE_A]ABBZ:15 ++M55]N-Y0U8QGCQ,]G"OP3\OVQ,T!`[A`$&V_=[TD-S7&$5556&WN]5=Z?>/IJ ++M05-4`@>*9R>79F;1F1JRT:HU17U1Q7%'%,NT_RJ"`=7NXZAL#",]@\8+TU\) ++MQFK%XG]GBJ+B&H%R=F-P1NIX/''$,N[T7%;07]!\78D"E-"<2=-Q/$BR'Z^) ++M,`4J&@X1PF7@%0SQR/(G"97I<QU7A'3G3G3GR>G.+^T];.V5>G.7UJKQW+<N ++MS-QYIM,HJLS,S>ZZ4PS='G#FN$J\AR(N'9.>\V;B@VYWNK,LTVZU1TQ9.*XO ++MGF9L`KG3#<:<$!.?H5;9RUOB]NS-_K;1'2G.'0F'O,(HX"KPS>:;?JIY[*L] ++M:N?X:Z,T@M;<&7GA=2<:<P<5@]&S-;MG`.!1ZM>+XP7C.,.D9<)W2,S=D7;R ++M\R<T;O=\L;#@<5TK,W4'+'8RJN3V/!5=X9_C56&GZH:U;VG+G,'9<F;0[(V> ++MO.H9>RXQ5X'']DS-L;BN.<.;...;-KM5ZX[*"K5+1SAK-8O")\`Z+C^0.R9< ++MA.05(E0`Z87K5$ZU55!WWV/&BZ+K'ZM1/A>UWM?L?B\GT'6>@7*P[KP^UM&Z ++M'C=)^G:2]MV&-T/U<[_'T6]9ZU?('Z?MG;XX)GE1$\58F0;0"*(A_O<;-R"' ++M/J`G(BB(`!R,R?F=[?ZW!U[8R?5_,S-\>?\FK?")FDE?+Y2CT:.-B:^\;PDC ++MQN'PO;S17KG%;[[=&I]S:]-6$.M0RF\,XACEA9A3V1[YDJ$HV=CM5.2!Z`GG ++MM?9'`'CJB<6S(`?\%NYZRA0<J'I(O=G'"9I7+DAT&<4.3>>9472:9<FPJZ;[ ++M$@Y;9534YR44*+U)Y6)[U9F;RYY?.)?R?_9XZ?3G)&ZX9I\06L><TAB;;U6D ++MUXK>.!A!ZL0800V)/T"T7V?Q.N.I].['MZ$MEN%W9&*9)6%R4RCYCGOPS+>] ++M;P8L"#+>B7`],"866:`STNWRQ9-)S!Y?]7R5_**"BJ*((&K]MII03P-^FOQG ++M_[_]Z3L)>,B[]==^?7<CVG[_0GU=_^>G>?[RLSRF>[ST;N4_H:GJ^(ZOINX. ++M*_2O.?IY#9=YT/\*OE4%7^Z]Q\WZ7WO%Z70`G3KG*VP9`8^-Z)WEK'J/;8'Q ++M/N1ZKW3&K5"QT'V+/PNE2'=,Q_)S.='%''UGBS2R_UZ=_IC!"NZ*/BW-^Y5[ ++M#?<6)S0"!)^^C;?`F]#8I1.=Y(T@ZMY-!3#\[Y%.)MUNS485SOX]>J]^_KW7 ++M/[,JD3B6*#WP>T(0CKHJ<N]>Z#EZKLS)ZMQE_^V'Z$?\\"/^D_E_X/_#^*)_ ++MR!<5!">JM!8C'F&>!"S@=H9GK?Q*+0>;J\R*GI'KU[L\)`1`*W`/C02(GG45 ++MQ\%?AU,UNO\/EE7[D5N0LK6.1Z]7!I"M"LS,VI/:J(C.7F;>IQ1?S![7?WB] ++MK-4\O3%]9N8V-ACI)#!Q)B8A<`0,&^,'!JGI<1J@N!@R7<(]9`@*YRW2\;FM ++M-LC^GF,Q&!&5$411`>&U%1'J)QB*=9(-N>0VGZ=M`[[^*!VOK_7=KINN[8XC ++M9=UWN^Z\^QU'A?8_Y_WOSC?2?ZY_Z'X/E>7ZO\_^-;T/G/KT];Z.]F!_5$4# ++M1*W^G./L*?[X/BWM;`Z;Z7UMKNO]?%K]YT7IO>_B^U-E+]RL+Z:HY$0!-#[M ++M?$5<+S#O9\[,^$'PCE\C+%NL9M\]NM]$I5/Y_84;ZG6\:KF6@WHN0<T]XI%] ++ME5;Q:A\%PIPQO'/76A/![1%AS9QLGX$[8_M]CG5^K!)9IT5N,6E;_$1B$4:J ++MS-UI0?MB[==9C=1+,M;%.92DET>>\<_SXJ7U@L8&']`DPAO+JXFQ,2/$,$KB ++M>WNWK>1D$4(*JM=[2O765(>0\QDN#0BACKOOG^^U%7,^?T7/=]\7N>Z\?I?7 ++M=SZ/N_)]#X^CXO7>8Q._]&?._%P/0>%X_KN'I.8\UO/3]-GT$S50.:P_\>I? ++M]?/AN]IQWR.U5.@\?W>9]?V&>X&/_6O\9OX]>G':GS'\G'CI_QF[IS.=%"+W ++MGB4QR-9@U^A\0^K''Y09HCGU07U'0@X55Z5^\>_S;'F#-8S.`+$./8Q'M_-F ++M+^T^&WB21^VU\:Q3\'TIA^^Q#$RD@4URNW._=46M_0?(BGXHHE%_;6+39,D5 ++M*QN<SG?9FLGO\H<L4:JOYI8-*6RCU-_@X&`8+ZQ:M&+/.6S-BL65OK[[Q;?" ++MY;?PJN$83+B@)#32#1]"=SS[P]7MSH`<<2NS'>3=VZ_,O_U4TKY#UG\M/O*G ++MK.>Z'V/RO"_%]K]OO>,Z#\'*_A]Y]KV'H-!^#W7L^=W'^/'^+X_G>D^MGP31 ++MJB:9!VU(4,5!40T%47[O\3*IP)15$XAH;7.S>?[7[,9AE;WQ%Y?GD;E/[.]) ++M[OIO^PBBA%(Z3F_NC%-2'SCW7%1/@)X%SG_-?=@E^*)@(L>E9)NM^#SBB^>/ ++MA]*'&W8\)O;XF*5:G('ERK547^Y"ND@T&@S,PJ]SZXW#?GQY/)W#X\[Z]B>? ++M/K101YH?R!#`XI:A4N?Z6]<)J:BV[EJ+/&B9;\B(A;)@B!/=BC*MFRM=WL@^ ++M6HHI-J)P^YFL&7\+9.Y!^L\]X3])ZSYVPX14_UW/"[KY6GV&QX/H?E:_<?%T ++M?'_EX[Y>5\OTGH/@Y"(ACYB`@WEU[TL\B(.7X>\=XK/_TI\?S>#/\7?/]*G3 ++M_Z<Y?M:E\(0?"6266M13+-V!75*U=RBK\!GC#/9O1D<:K<#^/&7VJZ^7EWD& ++M%9CD4?R8J6)ACQ142M<Y!,7%47ZL2<\2IUKG*D:1QJ+J#^V5%WJ^36YA--,3 ++M,K-Y?_/JU7)Q2"1$8M+Z#%/;E'B?\5;.8^T>FK5NM7E+.:7QTI;NB%FS7KE4 ++MJPL7VY+];ZB_]?:M6V<\TR8/YS%S<$.?7UB>H9()7;IOJX>R?U?NJ?A==GNZ ++M_GW?6<AZS,_9[/CZO6Y'1>L^^O:5.U]W\[\WO?"][YCA\/2>DZCO.-^M\.OH ++M,T-&BAF(?O78H".#K%54$TONMZ./3?WV'R_?P[3W>\Y,Y0@K:OF?:!:B[[K3 ++M3)Y&?'\PCO^-]&9SG0B_6^.X<VN+X*]`_?1^YVQSFR)X:T_/E7HUS&7[+EG_ ++M0CMLI:YY16TAOCC!!'6J0&1Y'&HOFFF2!8PS>.U-8OXT>LDZSN<SG*RJMH\: ++M+^N:MF4>9NH9*TUAQ#GQNE4LGT+!ZJK5JC<6DGF1$JS$V+:+1"F^3P559E+P ++MUN]>?O`$.Y+JJ4$<:Y!@GK.JNWZX4(5/KHF+C6[*&U%53)ZZ"(FV4.ZCYO/_ ++MHZKVON9"7K/G^MW'-?&WG:^=N>D\AV?P/:?7]/[7Q_:?(\US_8>U^_QFVZC] ++M?B?0]YH0O(J(9""*>2XS^&7WWS?L?SP.@_=L^Q]GUDW*\OH^6L<O]%,7Z]U> ++M[\V;UYV3MKV',JG`Q8Q`]N>^9$!#6?I3J.@APA1=IY%G9?DMI6P(Y(Y(Y)IL ++M6Y''[OWBF'T?G7]AB[WD5%'%^\6:=M(4CWODX&!Z!&:/+9146#.0^_CK0YZX ++M7PQTX^=WAK0O_%#I#\O7C.+GV#_ZX9MQ1>YSU<3VY\NT4%0!3'<?'=[D^*<" ++M!46HS,T2LJK$6Q]99M#UW]!]2Z7K_U$"O9+[R=QPXOZ/WY-LN"VR[3T;?QA$ ++M[#P_.D4E@PF6E[K[":X31D,"'[,5@Q%X"*)TISCS9>2GO*+V.E_)YCRE7>Y, ++MU=?%NZKQWZ)>B7SOE__?`^;D]][OD?1ATOP(PT7P/\?!_M[?Q?.\?[[0!H44 ++M+R*&?Q6<JKL6\JY!#,*C1\H?T7\)Z#HOK'&&C_N[HU^/7<YW/PB8?'JCQN1? ++M<]-R%I6D@\V9^N"[E@^U\!.G3"1`=\SY2B\V%6A'O47P?7#P_WT7O4T9VE@] ++MC'`)YU9F966,>2\,S+G.$=4]''.F3^:/$)JU:GZ:O?5".IPUQ_M+.218)_JS ++M96P7BFBZ_\".'"RRWZLUFRKW+AS7+]KDUQ;EQ:=&$M]A3!Z%0IOF?EYG#^U% ++M@]IXO\_@?JXGW^[[#B^I[OW_/?3L?0Z7`#[=^@ASBFNPM)TGS^;K?&UF^]G; ++MHW'O55OW?Z[WU/;\/.Z;P$WG*-W&P^&^$'PEDE_;-1YS9V488U5E:A48E9_[ ++M&8]HHB*+H5_X<F[[3]>+""B]VZVS4.917"NX)+K]L\<SG!!,^<1M!QB^M]/9 ++M=?XRG_8_*'\2<_HQ<6XS,PJJO^B-/]$#[I+1`L3D\N<5C'$*U;<+&U-)N*:U ++M<L"V)I5<]]);K2DE*M<4+*Q=K?8SP\JN]%_9]KR_E^@=E>@V7>;#V_]O$]-[ ++M;]'B;+S7)X?Y/91>^]^U\!W8D_Z(RJ#[,C@/^@/\P?Z`[#\L=QW&'!V!,S>" ++M1B0$"-1%^4H0$[<1CK/?R=(GXE2'4>M5>4Y9S.X72,_(YN>$4(H123OA+JTG ++MXQN)\FHC]2RR2+(T'"IJ_EJ***?"D>K.<>_'LO$F>,OM:(A%JM=XQ%F1P>0/ ++MMV?#**LG]OP&S\L/#E#U9NE0J?"*N$\FDL"J+8959NA`"7XQ\=OF$$K&?\M6 ++M3Y,?8VZE19(4TX:NP"F*_X]<`DA8P"4KUUHC5]I/@M;2Q8:"%_?EDP"XL<BJ ++MLMJTK6U]%IF#]3S'7.'AKE\AU_+='"?/^;U/T]KVFUM?>]-Y35>A-#YG7L7` ++M,^(J(75+7(;GWO'>SBY[[7]'<OQ6^SWIN"=*A];L/@XB;=<:I0][XXH_FS1+ ++M5BI3:(*L"$#?)4%*>P[#LM`.9W9'%RQ*J[ANR<S.M]-!ZM6:*NRBJYG,-Y`Z ++M'EU%P(H:QE_KUZ>S/CQ5SYY0[;'W?NGJ?,N(\W-Q[5I1<U]`%=+&JJ_N,HA, ++MLS,MES.<YSI40H)NZC'L7)ZY7H_,O+DDYQ0A-,7UZ]9585NBFA!6KEFTUIPX ++M5DL7RW[+:M*YZ_&I*GR4P<ZK?J');\1N<4+/!*V)RK,I`T*AE*@9"YYS#H," ++M;)3[;5?T)[]%.^GC)$X\$1E!501$C!@1N'_7/<[S_+N.AD3MO*\F[^^7\-1: ++M@C[F$YVL^,JK(K*'VNN9RG]?4TD\4<4<4<GP3]=`41T2\F;V&$NA\,$)3[QZ ++M\>1;J,BHG]QQB'^.+Z:2O)(Y.`*A-HM,KF5O,/4<,*F9Y@!P"`Y431Y/6:/E ++MO8Y&F_AZ>6.5999566267.[>WM[.W.SNCN.[U>Z=]U^[.7NZ^G>&[W<CI=.G ++M/E^7V=BI0C?:XH?I]'X_S"]KV-N!%/GN80!^?Q_'X_/Y_C^/X_CN[N[N[N[N ++M[N[N[N[N[N[N[N[N[N[N[N[N[N[N[N[N_R"/G_RP8@"(C_L/_-F#_U[]&(,# ++M_&?TA\?*QIM5;&*B*VTLU5HT5?_C^<>^]>0"&JH@G@[551%5E_*Z"[#H:JHB ++MHJJJHBE17RYS\=?'Q\NIH@5BMY_I540\14.#D7_F'?+51(,%4=PB(J**H(J_ ++MX"8N))3$,U533-[49>ORYJ:JJIHJFBBJJJIF&"/D$DPD+]O/,@:'95\)<,_8 ++M6!ACU@@X1PH**#!A%^=$1'[;-/^3$!$*+M1F9KH1EVS@X,@XK%DI0]V,?A+2 ++M((HI1@^"N_M]6O?GQ^?K5O*_R?(WO,7QXOMTSSK%BUX("D0(,0!5(S%QVA95 ++M")O;@9'$H:A?'L%U4E!]><.+[B3HF$M<`WA)D$:DRIR>B!/68`%!!`$P`#<\ ++M*JL==U&T$4V--NH8RJKJ=R&.U]P]4#PZAG^9X-S'G_W/Z_>9^"9]/M=6MZK* ++MJ44:);`8Z6W+X,<S:WD9[?\(%\'9P(>JT%_?6%1(UC%D7\-6J5:U9UBM$CJU ++MQ60@CQ$(@(VK`_A=(MWSX=`!B`T#`L?U`L,-!)!4<&>*OB.VJDN;_TGOX`T> ++M,1&`>`C8F`Y(OJ6F<ESC*YE;,,H>&)F93&9"?7\J,.$Z9NU;FQ7W0H(?3@18 ++MN?CR40A=@1)GB*#VT(B20#F4WO>\-$F'*2IEX37$W<(0F$&9"[%;9T<KB57G ++MR9\K9/HCD*"9*2!2A`<")<KLB;\'B$(>IYIK)(;M+\TMF,8>96DF0B"%-@,) ++M?!\#A1;L0(_:1V^(9V^JQ+%!3(,<[*6Y"0A"8XG6=7QHX7-YO9HF`1N5K[D& ++M.LB222"B$#H.1$B.$CHB!_9.YR&)Q'$1&3HEN&A`'59BP8%W#-B`-IB8D4&H ++M`$WB<P8`&/W\=E5FL>?#^DBP8CQC`:L0/G?PH]\$7$=PF-;O1/8-D:"?4#67 ++MV8`+2Z-[CZJ>>$;V@4G#AD$=3K,&Y=T)N9]*K.&C!$/8B+!$#_%X`4-$9<0P ++M!*W@&5-S0V9R!7D;UJ6*(],K,SG<:..57S_7KM@;G:35&U\OY;$OX`\P9E&K ++M[I,$A"(WOB\!UC)]X%P`"`1$>GKP:`KBMB#8(UAYH]NPHF<['60H@`4#4-X* ++MZM.-`1U/,DP(`OS&5Z=BY6"`-[#O\N$UFP@.!SOA0^3L&2T!4CXYO]AZ^],W ++MDV?>\*QTQD:/*@E,#^Z?#%`"J$-:M<)3H?%E@FA\Q;-4O`?4YDUQ\_25@QTV ++M`)`[!9W%H8$[BC5D-B];N$8]MU7)?7\O=E#TO![WF<,`AXBELT[G(^JF^[+V ++MA];EQ`FO\;WO49WX@3,<3DY61;<J?>>H\`X$F2.W@L"B($!$GK3UR)K3RJ`' ++M`BJX`-4%49(`C+RGEEP)*`W`!8>HS8GJ"KCLD8B%0LCD'T@0`S)WIFA@@7UV ++M)J=K;3%@9(U70L9%<4#&$!SN$=U5>6YUJR.DY6!WVWH"$(5ML&A?(4HPL$#! ++M5@L;VN#-L"N!G(T;UB9`="X8@,]6YA4A2\T[Q6C+O0:U4LS>@R%&0S0/"HQ: ++M$7+8Z3IF5ESPZ8&UVQ-P@+YCFJD!RWR&V*$R+'7K;N(P#8`V9$Z-.UEY@Q:A ++M*[+.,&(N^AF$!$`Q$6Q_K#_E@Y%UFGQ?RZ7JTV%2&72J76T7M6+[XJL.6LD) ++M!*F0!I@U"O(^+8LZZ)#,G2Q+.L+\!EM(F5MTSG%[.A@SO-`B$3:1T#%`0B.L ++MC]_8XH7"@!+W38Y"!_BC%=KX/F1I0KTQ``PRQ8\,Q01`"^G$T!0'=#$Z:PP2 ++M;`6(Y[&FE'KUAC0$D#:8-LY(!%?\O@S,\LJH$0IB.47<!#A,B$'`.3\F*%>R ++MC9$B`(%:^$!P8N1_);(S1%UD#<%5'3:0<IZ\&F@.G3/@)#_D7#7AQIN&+S$P ++M8URVP0"/Q5BQ_O@`(H9%1"W?DR!FB/PZF?D3;Q=_D((8X5&W'CWLB(@#H&1] ++M(#,&7$"Z8@%I"12[YPN8`O84`W+##R%^VQ0<!1G:.&K#D``3PMX'*^`W5)X] ++MRV853$=L8/^V,5$",8-`D/+OQ8CC:%MCR+;21X"8L&^9,::2`G%Q$!F1E"K$ ++M?9I4-$)"/H#IKK&2E6B.J>`"@2!,8AG\#^59U])%?+-Q$W`A&(`O^9#B[@"! ++MWR!HB$/JA>?6WB*PW$1&&`?0)$!L2/QUUHWA0KK0&[09WU"!TB!P$.^]$2*@ ++M9HV!GN"W.[G^_@Q9[?=*'O1'C_0A89X8#)@8)%M[#&>J%X**@7&C+L,&H1'# ++M7*B!.Y`U`#(P84)T]]2(P>.,QX<X%$^'LRLJE'!3@FZ&OZ'S8ZC9`\/"A5=( ++M4`_0T6/1T!;S4X]SXP'OG%940@8J.A]I(=I1%GNT'H<")N[`&_X_1QX1T1HE ++M?H50FHKWRK\O@#H9%Q2ZK@?`)>C_E>J!'SK^5(>6O@]>P74N:CUZ]*ZG>MR9 ++M:ZAJ;5TJ`\/-5T-<&F<@1E5">XXN@0!FJX[!FE3$A4P&(^_>N*J#?AY09LQ[ ++M;`8W1D>D=9W>LIR-@8.#P4.W0,&X*V[V`)G:S<=18GHB>$)]PC_UL<Q]9%>. ++MZUBCK#)$B1\D.1\\`/M>AF>\N0&M\-8J``8#&SB$+0T#``STL(:`(CIZ9^1. ++MGJ[VGAVW[]P.;$OMWVR52'7KVQWSK%2K68T*KU&?+V,1$?Y^JAV;X5$0!-<O ++M0/0!>@``B,QQ5'5HT$<`90$(Z@&+#%B*CIL0Y$=.`9QW)';^OUD]?>&_)N)B ++MG(6`CUP-&\(:X"Q`$<=1F8%[F#;/+34M,&CC.LD"]_"2>9:\FVGA]/KFO&=9 ++MZ<7=>.K+SOM<(9YY26SV`U$2!76.C\Z:C-Q5E5\$D1`$#]3]0?\U_UGT1'C> ++MQX>?U\O[?P"AHP-4?L!=8C)(MU(J!4#PN:[<#!A#8V)0`%V),RQE_M&`FI-7 ++M/+P455=Q$X/)?O]0/JOJ$1&=R!TWU`5O_S/V70D.FX1#??>;%&^4`"99XH#, ++M,;YPA-<__K.8\!R]`9V)G\#TB#=Y*^9O@Z8'Y>#)<#"<(!>B!HZ/O?8!U](, ++MS"C[^,?):&C1@#-/97#Q#;,M`F6Q+.IG8-[D/2WAMH;7>9#RS[5_T=L<[:PX ++MT\[NYW)SIVR9-Y8RN-\,;LZ[G:%N4/7X1;\`/L58C(H!NA0C(AU=#-ABQ8HA ++MS`%>R(41DPO@0`,&5<`4,L4-`:&6;D-M"K^WQTWT@3>;U8->^YD&..#/37,` ++MB8U),`?6H1V*Y#A0-X7$+,D9E5NS,7':,CA#$=L1#8<!UF]P/`*1`S];MX.\ ++MS0GT]Z']?9^A<#BA\`%@?)T1\]<"]TV`U8S?@@'>`'#H!@4.-<'^*C!^/``0 ++M*^>PV3@"KHCL&DVP8(3.@RDOO`)GF,AA`M@XZY:FIN;HR$"78%;[[XRK3*$H ++MR*#<P:WOK-,O>;8(!@TC)EGB.AQ`GNHR@'UN-+<)LS0"^82BJ$#Y>`>!QE&[ ++M4U&U>;.P(@?8_`_F=@:!D+OQT>F0(L%J`)$!2ZRQ,_0^MA[%N+.V(M1XLT'O ++MR[AF4!0KD>Q#>UC?>YSEH<EMS@?F?QS<!4X=V+$B1WHZ@*@$C>NHC\5-PA4" ++MTM+:R_SYUOOTV;'!P&K8-\&6-\PTZ:8"`??Q_/J9Z-/8/I<Y.B@:<0"5$5^3 ++M-BZABT.H3LQ#SWWPX8!$38V(J1\'A$.8Q30E!34Y@AL-`LU`L"?7:8UT/;D' ++M1^?0!41@$WFB)&X!;ZA``]N":$7G0%#',0!L.!@Y"UP$C_>?7OD=]C>^N^HW ++M!_3^<[`N-^_D>AV._`>#-J!7[9O"!H^AH<OP\,H7D@Y);\*PG"[WTWN\-%R* ++ME3,E6K<;$W,SP0:#J*#1C9&V#$Q(F)Z`9@F%(NOQ5Z"#[1/;H6"!@&0/39]] ++M@:.L(9N#$.Z(%/^*`OX0!0BKA'H%P*`->OA&BJ\A0CJ%]]X(^U.OZ_M7]GX' ++M#\?$']-B?0*^U^/IT-$!#\3V`5@,78`L3$B\$B3_(^K3`O1'J!OHB/O140[V ++M8@9_K_O8&=;@<%::R96U<I`/+'R:FI[3*UB%>7?/CBP;YVG&58OH.9;(H\=< ++M$)D;?$;[!OB0+9>%4!6+MP&T_(C:GX($&??[?W-_/@0([8!'!_(N/D@SG-J( ++MGNA3_'5W]=$91&P0>CTZ0GL2BC+O[;B(\_GK5<)""F<U2.A1Z?HP)(RXX"YD ++M,.8Z@.!@;4Y40-$_EX(D9X"]2DU6W/A+"OT+%2&C)"`[YW"QE```X]+9;+QK ++MG>VF3QQS?`0FL#4)Q<-`EI#*LK@3&N07`/7MK?>`0W]'?MK#>2W&.TCMAV`Q ++ME>&+7(#)543%L]]P`@=L%7@&A15&C!U8WVL!?0,GS$B``[&1$/$%6@&,J1?H ++MC@T%$A"\F(A(@%.'F%Y-P`/Z:XDQZLB?:*EQCD7,VM#6!MBK:%W$RRT,=,.L ++MD_S[`&#?)W:A0%_=<+37%K3@JA"\G&TTO!."TABV@8SAH7L7[C@_.`,3&P`- ++M6[?7F<0%8`N7$1X=%T#`N^;V3O#O.P$)M,#NZ<`WH\=#T2!;N>[KY6UUS,YM ++M.*ML20RYS+Y8"$O[<3G!<TR-!#+60N%7G38@#1J`F+XR//#:9%X3;4RJV6E7 ++M(0<0>O(>NL[>RBO#MX`_3A?4G-:V.\%_/P_Q+O\W4;%5_=_GGN=XY=51>?BA ++M/R7TH?GES?BMO@K)X]^9KTZ[]'_BN7;/>];X77FP\IEO??6Y:KOW]R,SY._7 ++M8'-?4N9)G\T/O_-Y7$_$GB)TA[]U.JO]*;/5[I^"?Q>_U<C]IUR?X/[L?R?O ++MW/[YK_8N][XZ^U0Q#Z_/SY(^?6!-RO(JPI?ZW^)O+CI'<:^_^%'11"Q)!)7P ++MQWPHW"Q5XZ5CGD:-]62.$(1QQ1V84/\LU3*EM+GOKY];]A_5&G^N1OX?[BR, ++MQ6?Q]?M\?UI-_MG])OY/2,K+?K1,T4;22NBG(H5".>=H[RM:A;>26+K1UU6# ++M55?(UB"_I?[/OVW?UUC?RA.?L&OP>>]^WX?4/?F:_&AYOW7:O#*^LP7;U?QE ++M_@2OJ4/HZFOQ/]3]@FOH_R]-#/*[_E5W5Y4K]?7>6=_/LW?QY;]9_YM2?N:/ ++MW]%_V%?RI>_"?I^V,A>63]_D>LF_S\_"G?^$0VM6_7??W\'UWW(GOG\OGI]] ++M/XOZFNI_Q]U7X??ZV;-_>_!]?QED_)N7^>Z?KM>?K?J?KS!_=;]WXT?`W/;\ ++M%./O->/BN0R5^'9/EW_1*3'X_],Q7X^7M+\I?2']?VS/Z_G]3G#Z2Q'3[:\1 ++M>GMN?WENV+G[I4/E*#]+BZBP712E?)_@"_NY:A8G_9KJWZ1\P3ZJK(K$<^I_ ++M8AD]]]W?T^?B>KXV^]GZ=3=A+R<_SZS**D(_CSC3^QH_C4'ZCD\ZDVZ_8_KO ++M[OWF[]G^JOQ=_$B/A5;*FH?X,S'[E>/X+_EOMK\OTT/U3?[R/WT>'XQ$3.8E ++MW-FR4B/SUT9XV;7PS-*?.['RA\.@=[RHKQORPYY+U->?VOGSZ]X_VP(^U_EW ++MZ^2A],SY_Y*9'UV:?]%"%N*,FQ*EJ=SY'7EJ+/;J3V6:F.-SR.5F>RM;61S% ++MMM!&V5<ZE2-=+N?O^B0N=M"R%(OYC7*Q-ZP7@XHFC0.%HT+IER;%)[^^/`OU ++MHG_9KI^?Q?U_-A]$*QCR1$U-:M3/.Z=9)92VTPT)*D*K43.DF51706>IWOX^ ++M]^JHS[WV\^/.VQG[[<QXAU:(9KG9`_N(HX8'ZU?7?Z/GWOS(L_G\(=]?/SC? ++M[&]?X<(B1=S7]D]KI\E^73YL;WK3IXM]JXRY2DSM3:N,ZX0]\F^.V7&1\_9/ ++MR^_L^T23=+\]4W1_%%,:?[[O;_)]GH/O=9,?6%7NA?O-G[&JHE'QQ+VVP9/X ++M<O^I19.Q_B.LGZ_[Q^OU]\]W9NJ?]%]NMR&#\06G\M$ZEYO7&*,'6][_#6;H ++MMX4M-=;A;7%3`J._6U[7I!L'OUM_#=@R)6?2HBZ7XSOHJLLA_3K?JKJA\_LJ ++MB:J@^H+R^F/7F;3*?Z^I)/W7C)"/F]E_)^>?WM9EKZ#&RII'3,_`K=;TU2Z= ++M/59%MDNG[\:R=_B]VRVOMYZ86FC#'OO;W^,$BZ6"S)%/PE2$]53^/F[QZ?QB ++M-I&W_?Z_#MOZGO$S6_V`![DFS]ZCHM*K^IK\?BKW7[\[UT*P?N;O;2^?4]^5 ++M3O?<*OZZZ)!G=?]B#^`GC3\YKM0N?ZG^7NH_K^W\9\\OK[F5]RW1''P-2*7X ++ME_FI:[WW/S-_CYWT,"7+Y]#5EOZW/?AT?T?O3O7OP+TGX']L,C\?*'M-(I?/ ++MQL^CZ^)_)^;2!Y:,^9\*^/\9WO/FAH7/NP5F_>5WWERMNR/7E_5?I#ODA^(U ++MCG-2&R%/6Q7%FT8]]N1?U^%=?BOL^/;OV?>^_GIV@L/:]_LFFKZ1B0^Q_*!\ ++M]-IH//UE[<)I%'[O*-%;*DV1B?PT_FC#OX=4#^;7K73+\6=']G[2`Q]&-!MY ++M\^C.>I5N_OAS5/T='(K6,VO2-O&NK*)5^J=(09W)3K)?[[6$R4,[SIG;"\9B ++M_GR>F=VG<W5X\M@5R.4CYYQ,T1N;9NWCP)T[]DV3>J?GXE3.YO5A_F>^MWY\ ++ML%T2#(6_XK1'OM`<'K^)ZONKJOPY+2_!"^C.C7IJ[%2L]MG;24S?X/'ZNIGP ++MKB[ENVA=3K?M\M^NJU0_JGWC?P2/63]T_S,D3M3?U_?_,;\'1OY_'Q?8?G\N ++MKS]F*'LJXGF.4R\IJG[V.^W=N<(O[*->5<9T+1^'Q+.7)NN\JQKOVV1,GQQQ ++M1_9R#\5<A\KIN2Z<JU5[GT7B)D_6SLM7FWIRDE-M$/"D;=_Q:H(S1W^<V")* ++M*)_DG^E]TL_ESF<OZ_OL/*P93^CH82I)M_G=LU!,"@B!I>4VA=_G+[";6M3O ++M[-5JK)K[,[_<AD_7\'<D$@V+F3,)H!#]4A\_&/]OYA"=MV21^@OECG\HW^2J ++MJGI_69=Y#FTY4>-0M=/,,]10%$)HT@G0?[VF1)=3:J97[;D@Q8Z<\X55S:.$ ++MB24&&@+D/#)E<;-5-JCR4C\^T3]/+VAY_?TGS^?W'Z<\ASQMJ7:VI-+[DFR? ++MW5V;AG[_$]UA^DE;NX9D^W%.OEDQOZ,=JUODK!!2\C+8IK3AJ5QM[^ROOYRJ ++M)R\C.?'"W"%3!N?SW\3]85\^<6[J;K]\GXJ^AN"Z^FI*%_EWKK\7\^?O[V#Z ++M?WM+>H_.S;[H?N(_N_R_/N1^.9_7OU.4+'Z2_#<?>HF:4FJ9_4KYZW*V[9JD ++MQ;%L26"/R</834)JC2+ORH&M[XZ-+KTS/M?I_V?Z2,]>/NX>.AZW!G%^%TV2 ++M_NY(]?\AG7-IORX5,4PY^2_S4^N]7W->V]'4NNN]FGM4_S7^B\Z_'<YY^?EY ++MB(,&KU)X%V$UQU:?H85:M2%2=ZJT241V(*9U;/9^TN@O:!^''))&^*.M.M2X ++MU>XYSVKJ0O5+#[UUV%,YT5UGTL^1IFFB'.ENW:CP8_Y@_6?FF?PX^Z^%_]FL ++M_%^*OO69F_N?%FWN"<5J5>UZF<_V+7ZGN_*WA^C^?^+(?PCOMO]S]B[L(DM> ++M:'6_K^6._RPO^CGS[\97Z'H^C7TOE^R<4_M\5(E/E<IFW815SA_^W/^^HL:5 ++M11`5?)"D6*06G^\>/GWRUTJACEM]_0^C+)17++3C7@SSLE)Z\&I"S)="F%50 ++M3IL4$GVF`>K_7\>MS1#Y&?;5^5);GPS_K<^SY]%GZ/ST%OGJ3R87ZE&FB4'* ++M+=,3_E7^QYXOU\:E75_SW<=YG^Q-OK[.UIZVCX?9CZQ@DFFEA.MFO.2U536R ++M\)[]>T'.4IJQQ#UD4B<%QWBO;&?O[U#,'SJL5S;.U7=KUT<95#=+)J-2FCWF ++MG[NZ\C`8,Q<\O[?\4'W>?MB+I);<O4-:\2UQ32>ZZFF?E,ZD#25Y9K4-)E5T ++M)]B?UZ<3>YE0B8V+C/:F%U,/Q.QCE<6%DH>Z?\1#9#`@I^'(M82JIBZ)V41, ++M_8L&.YXI'%U7E9$6:+E=P@.F'3)'<HKWV3FH9U8V$3X$B[AIA"!"6QC5ZD+X ++MI+#=H7)N%(PKJD)+J01T3!<DGC<O[#E*IQ(CFV>'-:FL<DRTN=ZCK^P\FM_G ++M<7I0F35CEZMJY""XDAJ3+J74*EU'\]UK1N:RM=:-9?76BCJ-MKB1W,A8DUW^ ++M?S6?=Y&,KT6)I+*1H^JRUVTEL^3]?B>3?1+UH30K*ZU=>'+HFR,VP=#GIJ+I ++MU96%KM+HD@E#[,?D@?5KZ/L@$%`G0M0RLZ;R"):+=PK34A8FI;)&21-4G7K= ++MN<^_>KT;I#421$HMQJ>76DF@;N$4K))I9-?F:T&LFME;//I>/-V\E4JUL5J, ++M5;&US6HO)[_==<Q&\W-:)0>72ZT]:T75(*76CFB<W5*0EY"^]Z^S?PG>NH<R ++MR,%2%,LS+"]_S1_M,[B^BM_WBGA0+!!$^E@S2+AD+[659O$).-!6K,-6Y-)V ++M42E..3/ZV]J+:O3:,J94TB$9$DMT5]N301JPRYXA`SMCXZ/?Q?8+61_M/I'^ ++M.O9QPC"O*O(5\;LT0_762G)_!L4OVJ]DT1/C\=7=;7RE8E!NRCI'\S_I(G,' ++MR0QYH5OW?S9>XI>?)D4/="#1/%&(XDH;"CCNQNFHO/2FFBF29T<:/A(XER9* ++MV517Z[X>,$;]TQ8_25X[_F9=G\M#/P@'_H0[]?'6TB]0^E(ZA\,_V+^1F*]V ++M?Y$%8\?`B;I_748_V%\VV57[57JFPS=JTA6UDH'+3(/XQ)XJ7[_*-NG>U]4X ++M3C/%6X=D?HQ;1PVSH^8?N^OMP=,#MK5OM?''[X,<*12S)K^[5@)LJE"))&_8 ++M45QNS/Z-U^CO_$H43L(D"31'\53'X;^%WE_BJ-`C,LMX[_I]Y_BG6A^!C'J] ++MS9(_&_6?\U-C?Y:[$Z?S\OVO9PYCE4"D,:5*2'9BZ(0,(>OSSL!NS#HA2$V2 ++M=76]0V8H+/BM1PAX.$"NE65A=#=,)#S0.[)HF;('1#WJR69MI>Q/BWVL29IJ ++MW;)I5+%(Z96+6H)2A>H,1,TI<P&M&OOV#I(4=DHY')-+>8]78.P^YP5IPT&S ++MA.S,)FJFJFXS*CM@SR\]!HGBR5LG9!?J2X/W65-O2P;MUB=4T260':J9RTJI ++M!31%E.[27$U99%1%/I])N]4#]5OV3Z(9QYN'8J<X?K\ND/:=O1J0[RU]4]*2 ++M/'.DXB=<H9'%",8F]P!F*@A&C1CIR<I8II?P1ITV0";FV(_XF*$T'(Z5@^$I ++M(\A,MB!!4CB@[9R0=^_BFM*1P9I&0HGA:_;+*X<8\+9/L873KH=+UKVRLZ>& ++M+71==[%[F3I$F+^JX2)7QCQ%`_.?X3^J&%:/V,,GZ^-LT''P_&/MP)KG%EVL ++M?Q.90)E8Q]D515W\FC\L*/+')XSODF4`00B%]+X2UBUMV_B;@D',#G?I]/]S ++MB\KP[+1`._ZP$0/N(<D'[MA@D(_A."CYS#4(`6OS\^MDWG4G1%_AJ1U2;5]_ ++M/6][]K<.^0KK=VZ26**TTT3?V0OY^V/=%PPOIST_+-)DE*OPA+E!-T9<)H.? ++M4Z*'[FKF%IF5:J0A]R&/6;;S)9DDIB_30PH:HPY)!",EQE*A*8?['X:HG^JJ ++M:RZD8PFYF2+H,&I#8%-ML1_F+9!&5,@D!+XFSC7=0()^OQ75AO77D*DN:F@0 ++MV_LLU<;_>AI$FT6KG%_#'9.8F?S\QQEX\7TYIS3G-YN$*C.<US-3>:=+3[)= ++MNOU&)=*M3-+\?F8_'P(6;3*/ZGS_O8^?)0K!IF_)?9TBM_#N9U3)`21_Y?\? ++MC/JK^?*8E>_4A?)I,(=0?W(VU*7O\)R8)YH##,B5^,2I&]1L)3)?V?K[D!_U ++MK/":+*"09^$+$*)DKR1X_,F;T.R#B$_UQ5(-]]-[<E[^ZV/\Y&X%(:'SJ=5P ++MD,_?SZO/B")_@@7]7LV2N^30I.I#FDC_/+G"2/^5+$W^/M`9^*G:9/W\?T1? ++MN7XUW]?4Z:*!BD%)74?KY^+NS]-EE<_RYH*0_GJD#]5=&4ZG"R?HW_$_RF7X ++M_G:=(%6?U\);BOO_/7W5[GXEPY9=<^MLY9;%@6:>BI1+3/!H\EI(HH,RRP?2 ++M/M/:=I'-0^HOMKY4>OS^ZNUXK/V^>G?]GP=?H_<_.VH_X.^'X,R4#5;--^_P ++MJ<WP_'J==<B>U?F6+^+\^QYZ/?TE?V6_E_/J7R?I_M_WN,__3-W\]\P#]_O: ++M^U]G.7]'=;?S=3S].1A]\37\G^TPKWZ65_!%PY^2W>?[53G]GXW\R/Q\^9(_ ++M;]?AXE^OL_7?7W*_.34?S-=/R?Q*?UU7GU(VS7A:_WXW:^\0^]%L"R6DN^O\ ++M1JC0^DN'U^K^K5+V0^^4BY5K]F!Y_=<^L4_7^+W!?\I"?P&CQ_L(^P?V(6(? ++M7TSZ8_!N4,^?AA#OKWWROM/^TY^O-E8_VK]I<K_IV?C/];YZBCWZF??;#%D! ++M3RC52%3^BT=9.[+#M3GE/Z^]P]](?KOL]VSG\_D\K^UZJ)WZ+CC\I9J_@R"/ ++M?Y_NW/X8OK-3]?G?E_F?UM>8[SNQN2ZXA0)*'Y!^7^;,G'D]-R^,V\^_ZY\^ ++MZ=?,:(^_>?S[FJ=!S]S0K/9\=?BY_CZS^W\_G/JE1^?$?X_-_3RZ\#IMG5Q+ ++MIKFX_&]MM+9CMTJW6\SO?>J[I]YZI?%73/KM;7U]K:I^9IK;IWJ??T*[]M.+ ++MS1<N;8K+;KCJG-X9'K9ORNW7OQ^LR%YV-)DAW3$UGA=/^GU]&?F\P_I;])?R ++MG+K#?4*^3]39_2%&Y1(_QQ_Q_\0_T;PD>&19P1QGQ+_=D;Z`&LBJR"+716>^ ++M]65SHIUKVY!WIHV%A5%@]V;&YXL23M).RSD[J)F**2<"$;"40?YLT(W#1`F$ ++M(80^Z(B,&,5_2NR\N6!IJJP5'*]3VC\WS`9$L4;V%!\=2Q+MM,@(X32:(F9" ++M""@@*J`F(Y`K:)92JV^K8&8^02NS9]U`17Y!<NO$7%?!XCJFS,QZ(_72,7UF ++M5TL[G#C0KGUECV&GPR0T=+'D6610G6O*OO0HRYRF:'Z6@`>4+!+ROO%MIC6? ++M?,C(FA<F\N7N:34P].7,T<WAY*:0W0Z`\B.%(65@&")6"F)B*?1*&,-D)2`B ++M2"6"(J2HK.(.:$"<CGQQTZ72)&T,VA,J=)JFVI-[M2IQYN(8YR^G,)TV-/:U ++MV4-<[T`<21P`LP`.@`$-Z>G&Q3-SXN6I0SU8&0-+)T=T.8G/J!P'7`PC(PQ# ++MO0]A[L>N(R!VP'M)@;NSHKMNJJ*&4-/;0(%1,=`L0.B!P,`Q&QT0.$=`X1PX ++M6!5@8W@S!@X<!H&CA4KDNT5&UMC!DB9RA47P$[&3H`B!\!@!B`1%[`J9/I82 ++M3Z$X@<$XK*2\5A)3B)I$#WXUSG#D4U'$XBR%L0M+20DV-+6`#:7OI>&3HD31 ++M"@/A@5LF&A$-(4*$0#E@1@1Y4EVFZ-RP([)&$0(,8!.S4O-UT)V+B[V,&CAW ++M`=VQPR,BW,1&D"!1B*@8-<XDTFD,I-9KIH:3[<VT0-F"EHR%:]I8P*(R%G0% ++MD@HVVP`-(1EQ(HYL4=GC(4*(S6E_@WRLT8\D1`D$=&2/$"44`+<]&%G([)Q\ ++M_BXDE]),Z_P6AX0GUDA^[X60--/4'Y<9PGH/?X]XJ@$TH?EZ6_SU*HO^?[_L ++MW5_G)JP3H`0!B+%$:-"PL4HU1]/+Q5U"=`1ZSGTJ(J%#$H)#%7`8MJ*2JJHV ++M,5HZ?$*!\L4T,35%+3%3%$'`#3`)HI22B)*1(58@4L)L!5+2A4UK2:(Q!5,1 ++M55:QM6C:+-K8Q&-LQ$;!J"J0]I1?,(G11A4#W%'VA05^=[&`I^`?6^'Q#Z9_ ++M;-CXGQ3TF[*$`+)"4H"#Z42'/NKU>>3R^KTQ&U&R`F^X(^D94'.A@FA1$]," ++M/`"!P<*.XO((=>F]G\PY<RAC@@<[EQ#HD<!#$P<Q<)J-"&6)+A0A9"9;25<M ++M(,;.'9Q9),,S'#F.$5&P<<<>1MSCRV>EUZ;'54,8:R]=%*H;B\#(CSAV/A87 ++MPJ8JB8H[EP20421/B1K*C:")RJ6FBH=M4Q$P;)`H)Q$$YA2#AN/3O$1>*H#S ++MG%0/ICN.7HGJCT!`P$0?4>>S!@SU1YZ8.G5\XWH7QX'G@X>*7DW-UP)GT+>@ ++M](=]=]/$DESX>(;R#JQP&,6)Y/&/'>!#STF=)U)2@A(I/5[YP:FZL!S,R1`) ++MO7=E=>#\,?)T<!U%4'":DN<@?`04QI!@U77,0*SM,V"][YMMB92<S8Q!Z5?Q ++M-!!,$P0%5A)$A5$]U`BI\P(('L]?'>&VSHVG;.V;&M.V;&M$EI:DD*RY-0B7 ++M5R.63&`I),D21F2S)2:AJZI&3%)$DA)"1QC%S26I)JELR1)(5ER28N20DDR) ++M(Y$C$D)+<ER:F73,YMLN>)K6KE5KA<FK<U-27)+("R0%B%Y)I)JT&V2Y'4H; ++M=V83>0D*V2I&QJ1%CD;9ANY-.J5LE8EC4VE:X*&@EJW+8N6V+EW,--QC,9J- ++M"RJ$W".+BX*:QFB7);&Y+)06R`L;DE;DMC<ELN33K4!UN4-.LL;+ECJA*Z@1 ++M6.1)<ELN6+E9M#3*-!A0$00"YJV2_R2N8>$9<,9Q@7;LR)2MD4$84H2F223R ++M\?4?)->S7`Z:`(F_A\4G74PC[<'R9N$J%'$)4,9!Z2@@5Q:\E-ZZLJH2@(2I ++M(&3>4U%5@FN-(5]+6PKKZMNMGZPU3%QS&:$ZH8,$1##'/B@.!UHD6?QC_R?Y ++M^#FK`;;D"9<[HJIH0VVI%555:$RCU.KM7-5.7=PKF%,SDW..W<Y=W=TA,JJW ++M!=VA54'55-"JJC8F7-6[%V[EY(HU*$B9=TJ%*I5D3,M38I.J%BJR[MV+JJG! ++M550P3,S<2HDLBJ2R;N[K,N[N)F9D9=55-MWAER1)``)@88'$`;&JS"(H@!W$ ++MY,ER99,U;K;=W(JJHV)E!SB=4ZJG5*C555U:#H31J<H555CJE54Z1IU4NZIY ++M>9F7EJ<HY-WE39JE#:9AEN=.XLBCCBB="#05`0Q\BQ?:N,K>@??V\;!;+GRB ++M<KX=I@%"XU6*;'ETV%/E8^2J(LE8MDD%N*05!JEY+U9YCO+%G`B<.%'8D`31 ++MHF!56R7#'%T-_$M?&I9J4JN%QG-CM$BCH%5T2V9RU4_YTGM*1=#&HO6P\01N ++M@J-5^]2/]/[A$0)*2R3TS0=,SG4T4PIP;\G&L%.Z1($U>6BA[/G5Q7U]SBEU ++M^9>3FTVGLS2:-WCW\BA(`[.4C]!>S:NMW.V1IC:%CWT)X^)SKVB18<T;]F"W ++M7OV^A$`"?7?U$CCUFND8+G?512W!Q8G?@MSE=)\;[]+TI?`<D7TCX/'9KRR] ++MI5E5794?5NKNQF_3"];.;E3"O4/@G=R6"'E/GDCI%KPRLRC'2:DRDML(F;<W ++M1F6P3MAX@KF0#'@($!`;ZD>JW[#B],SB"L2[XE55<X!6NOS_#?=555<]-5VQ ++MO:W!C.]995F7`N3\NP[49H2D-LZ)4RE2QGZHD73Q0-().*4J-T8M@+D,(1<X ++M4_Q'W$1`%6?F>\/AXV/!]V#YU_(@`=D<%\4?'A\:^*_$4WB&3ZF]5"ZU3)^= ++MM;9FB0\'3@<H<*DW;NT^C%DI!29(9<@E(@,:=%>@"(_@50U4Q?SI^*_;-ZG\ ++MKJOX>SV^AKPCUDDDV>RM[JL['B"FTPMZVJ4E,V.E#OS@'HB(B5-.^JE\GU7X ++MDDDW7SF.F>2S35SZ=B\B=RV,:RP_7>IURVQ3<>\/+BLUD3I?>*OUHRUB9V\I ++M0QF*I0=/:.7*?^K?D1`C]_G76]XOW#)O8S?FBE*[#;N\^C-*\=<\GE@MIW0< ++MRA>]VS/#\W=>^#A1?GXYT^$BSS#7PLD9;#(NL0ZZ[MKJ[P@")BY]JV6,>JZR ++M`(\_<<P],G@D!*;YW,]U/@EAW%(Y5,N)6R'*GF,SID68P_CY$`0O?#7IRGY/ ++MFGB5'Y+#KX$X&F<KN]&SF/Q8T<8)#VJ-!^J:*`UR+JLF137I1(JZ6>&CKYGH ++M;)5OBO4+V1Y0J'34^+?J]PKW=UJUF91%7-F0,%>$0(RZ.ZJR6%0\D.O:\+"] ++M3K#UX31]7[C^XDAL3X+Z7T4PO37/X1.#*;9_6+0N-LL&K?:C.VU:%55;&J14 ++M&()&*06(Q5)!D$D/M!`VQC/7:^C=E[F6N1;;32P9"T'#I\ADSHMSU&ENHBDZ ++M,P*IL&N+5+.*R<#65H97*,O#<(&4`G60\PK//DW^OI5=,%H+[^FOM!=G8*(0 ++M*9UJ3Q6A`TK!1#_;Z$1`G*"H7Z'OQ"?/M[I73/2-V_EM57O1HM#-5KWO%HLU ++M*W6=0MY/>L$S*96RZ(VLR0$HMC`0R/GH$`369OQ.3ZU'SUR]O?ESZ[[4"5[W ++MN?MV[010.^U2JR<[LA=)O3I))@D;E4ZVN?C69(G0R"22?9Z>*RA.@HV+T<:M ++M`+C9#PMTQ^2-E)#='OE"X5TRNK*-3]?0@0!1[Y]&4@&>:F2]G]XCU;2/K$U/ ++M6L#>#Z>SB-3(I+#]$(XKF15%VY4H7G`"!+N2+GP^>9.=D[;CQB(GQ'$5UJ3- ++M=[J.7@Z9A=Z3M[>=?=2-<93PQ,SRD9:OPF9G#[UUQ#\?-RNKE@(+BR%A""MB ++MYK@YLC2R"02%7"TK>:L&TI-`XT+.M.[9(-I-!F20PK2"IO<RDY&WC347LL&. ++MM?6_!``'N'C\+HSWO2_:,O5NW.W+=BRQ?:?DWA8XW,^@M4280C08\3528R0A ++MMJ<46Y9T>>D42/H#X(B`+].$ZWSKX[?RE;U2,?RX5_%N]5KV[//VG9W=K.V] ++MX44<KG5F>J;U870-ZVR%]?!`B&,"S"#E>:'5\WUHF1N:?C%/B<\/:;WIS&U2 ++M'3EI])-^;VM[>?=W=S[GN[W<^[N[GNUF4\Q]N]W/N[N]OM\_/WGS?G[GW/M? ++M:^;Y]S[IN9=<[Y]KYOL[GZ0L]8T3<S&OV;X8>@1`KW2*F[Q3UM:\GTV)5)<L ++M[$7\7$?(`$9WN]ZDOB"*^"[/#3HU2=(^OKZ^NK']>@)_4^`I_.42U]8I(PQ9 ++MNVO">B!$5R?I?202"3V=N5M<5Z<L\:/.B-2!(Y+>I<*PW>"0VT5FX9S)R?9< ++MWT[[WCYJYDY5]PN[6]A*G975PTX>:D\T2#,E'G+(LHE+ZCX(@0L]WL\773=9 ++M=(WZ<0M/944V)?S)KJFU+=R;[<'MDDDDUOP`1OM&C>&6+2-=,JJM<8:..5#7 ++M+.4X[O6JQ,I+.L`.S(;2$V@!O[NYY4?5]C,ZCY<\VZX[]BU\7$EHS4_PR[&6 ++ME_`MS^A$0"._@;?3W6;]?C0&=KS<5U5*NXC^7`0$+/SW`?N("'PGZ&4R@G/T ++MJ8XRS\?I&:ID?6!9R!F^UB[@U3>6\I$]F#.O?KZB!`6*0O'X-*TU1^,I!K/H ++M?7I[Z3]T`R_.>_?:(,8<^OI5ZC4*9T``9U3YQ8I[\J=[1Y/*K+J#WH]=E[=Z ++M'*9ZE<TZ5T)Q+#5D;384'*MX?95"JL>B(A)"J'#`Q@L>%"AHD#P$@>#]-^E; ++MWJVAQ*DSER/;9DBGV.QS=*69.DBTY3J2);FCA$@CP``93VL]7'WKFY'$TW[L ++M-%%DWZQ$=0&!3*L@>U&T#B9BB*Q72LN_=`$#>[4DB@B+GWA20]I^ASU6,GY/ ++M6A.E($^RI7C5"4%+Y*9-J)'2C)%%$29Y,V-IM:+G=K2,%"2!\G1X0($K1QFU ++M>V*D#-NL]O5=IXJ\GA6SC&2\NB8[$TKD&=ZL.4T/Q>?M]`"!WH^<6QZF'[Y( ++M0])OPW"T:K:ZC4W40N@0(41/]8B(``L54Q]RBNH2C'R5/Q(S/P.L?SXLUJ:Z ++M?!8'*)3"%'B'M=.$.5Q%ZK-9[T`"/:),^,CJ)F2*H][VEI;65Z2M>X26=):8 ++M5^%=J"T0B1`BN/.>F7WCB85(YFE[NRI)[&NIBN&J;9-;)G2<6J1,L24)3S>! ++M!$?RL?S4`6!`V@#P$#OWXZ=,^-=:OCF]W.UY0S)4LX'&3E5C:`@7.&Z6/=^S ++M(O\2;R[[BLU',[=MSZ4&D,'SWQRJ6Y?9V"ICY2@HB2"58X7K:OYZAE/9(S7K ++M7=D=6[RT,K.0#!575[N*K3$\@-Y1,H:8P(WS,]3;E$$%X&90)X@(PIQP"87& ++M4S63X`1$GC,XE7MBCW/TU1IC%/5`[P]ZSC?3:'>W9R_@@#T]2Z\0#"-KP[=N ++M3(.&D"%!RF,:8^"($,7HSX^E.QLX'CRP63W>Z9-OO4@KU@'MRIBF/>\R8SIQ ++M;(ZGL"!&=>[ON[V9G=-WW=-WW=F9W3=]R2[,SNF[[NS,[LJZJ4D\4+UBK>Y< ++M,'S-O,G;-5QD5)MC@U6,U:L7JP9ZM:DA$)(+2M.5)/2#*C+565%REZ!$0:ZS ++M87$C)\@NO!Y%Y)W5)O;(J:=;7O$W[W<L75Y.\]F@4D+X'7C->`$1?10?7(=T ++M/)"A0#Z7AP'R^!X.G>P(B3!(Z;J>,TD?4I.-$A7GRY51G0!`GP\_.RK0XJ<A ++M+WA)J/;?K<WMCM@29JE;P;9+8ZIK:8;>[.5.$[F]N;N:N047US."RHK%-U=& ++M@VI6U3U/;63F]E3Q"$D.T4",/@!$5X13Q).ILDUN^F8$]@/.<S0)YO<(USI) ++M))"^@Z*12!GZ^L^MJX*T./HS,H6E.=]```??4_5*^'MKWSOF;-]NR[WMS%@; ++M"V^$F9]!Y-.6O6G+&^E][1+=4*RK1XPJJT-VMXL[5-$<)33N\-^@"!<6XJO> ++M,M4Y]A-TFF*<SY;=A9ANYZID#CD=,"=WTBA59K3N#8ZA:ZA5YUPWY=:Y=FPH ++MX>_8!N20[3,+;;\%K<.W!>]K9Y)=1<[%6IXL;$`!^C)I($N^0TW9\I'M/GXC ++M2!=Z)"Z<KW+-S`TA6@(;Y"8Y4B9YDF6SDS-4A(X>`@11E>OKT4:<+I(<FQOF ++M/#Q))))))'N+UJUH?1=.NZ:0R@E&@'CM^!;4GQ&B6>!LG#;`0,<8$Z%X"`%+ ++MU9W%UX=E!CU^(7=NE`=@'LO!W#`S5GF+,29)G8$0#[0LU@]FU,4)ZV,;(.`F ++MO7FC6,6RIM>FN/N]+7>96`@=OB47@JS<W=)^_>,^?(%_&6#[?D@9GPLFS`ST ++M1`%?*'7[*VEFN*.!CD,Y"DWM=>UYCQ#T+NR<HI@ST]F;-WM4V,<#)!*VTM"1 ++M9BCI?**N^"!\`(#%$XD22205'GC'AU^KR#8!C-<C5$^O$W.NJY(T;!*[T1$+ ++MW3'MWTS+OVRG>*A*0I=6=7=0G#U9-K)[O8-=:`>+FND,H>4RLSLFEPE(JMJI ++ME4-N0Y#I4<+R-?L1I,PR&8Y+N%OJMC3)O9,H/T0`'%)6:U=ZA4GQOE(1756A ++MQI1QI/UYRLYV$6J[T"!%/#+]Z7E$,C?4#:\DNJ0;H#:54I75?9AH*ZUU55NV ++M*U390ZN9O.11-5+M1I%G>N"TFYEB<6M\,V4!IC4V1-;,<EC*@VESPQ$>$`1A ++M_0@/;^:F_BUQ<A%.2?@<S-*;G$7@OQW`Y^3OS]0.NQYH%*YWY+>\93SYU=LF ++M>%3M6+V6Z^8)]+&'HJ=;JII8223!!)!.C.WU25^9$?(B`/O=^,G9>>*YQ;@< ++MN,K<YEL7+)*M27W)"6M1?''Z\N<RO93OQXZG@<CQ:OI8PW=^E2A0I43''9G% ++M(Z96L&QMR'B#!%H(@T>,M6#1(,L0*]$`0<#GMJ'YN7/(3/FQCOR6<^SKT(AK ++MRA"=.3YWX4?$3Y85*D/5YR/$D4PAP@1%;YH*4R+(8MORP&I2"&<^_BV#:T\9 ++MS/0`(Q9WRRWMCG\#]:+]5SRO"Q7/W$^.\_X?C@VI=[[V3+$Z-7IO=K:*=&A> ++M([HJ94HWN20E,+,SL/:,[LV<LBE4N<ZK)AVWSRA-4N5&D*H?($`.CE;<]3UP ++MZ#Z7;D%"S[3P8S<'+M-FZI[@G)?`Y=X'D@TZTU8FIED3VL##X@:2*1/=QT+R ++MJO.?,DS-XM.=KV32FYHM(N6P0ZS5,E6+CP`@7G>$[^T"$_V`%5\^>P[$7.]D ++MSE1P&O8BZ!/11))@F/GP]*KZROKZI3D$WN(-$$I&TB00_KZ@1`^?,D!+`E\\ ++MA\PN^'QU\)P&M4JJWJ*JSW/1C[@)(K5*N78:W:D]7#/D"($\O8NDEYY/ZRF? ++MGS<^%/#=A0B);2?'YGP`0.D5*MI[FU;YS-`J50J[?NVZ[63PJIG3/<S[T]S\ ++MW?>JS(LE^[IGO=O5N<1&&@>V!Z5+NA5`A\ATH[]0?``1X+NQGY?S*Y48V32> ++MZ19TX-D^N1ND-?+Q;X5I%D>/I4&PJ.I5QWO5M#*_UG^^5U1!]((&5%`LXS9Y ++M;MG&<]7.DBA%E\%@SB7+B;53LXG+>#_3+FE_Q^V9/^O?I'V?O[UB;0^+SB2_ ++M\Z#=%PZ5FF+U59V+)26<M_?[7V^^J*6O7[O5\'P97M4S:*U_XYIP<YM)'BCP ++M_O`@#I(5]=T>4XE[JED(;;"V@PG8Z>H@DDFMGLF3?#)Y4*%%A^I$9UK986$: ++MWB2LP..$5%`WGH@")WRD@DDGI/KE9>X2223KJ9)()9A-:6>K?;O5ZYH*;4D% ++M"7GIX=[-R=I2K*K'*15VL"9PS$Y7:7BMKK,N-&WS&774RK.'\'X(B.GUXNOO ++MB!AS+B5\M*!A)\9.)5WI+#Q"B6L.2/.,+2U+H@0/#*0.;PKF)Y9R4[YA]IV^ ++MNJDVY6\#,YPD2>V[X912NK,?UF2YR;R9L7Z?`QZID$]5#&[Z*E34[\@`1[4Q ++MQ)[;W7Z>P>+1Z8D26NY]=Q<\*HO!]`?`!`F23!(T'"SRZK)/+S]OP:,2"I1) ++M:"A`^.Q$17NG9]VELUWG6<<ONR]F;NL;KIY]UZGTMXW.=S[54]E1Q`G<PCI% ++M,IDD.$ASW%3-,BB+Q2!Z!$;=#.UF:XTK6A2#F#WIRQ)02W*S"K?C/@9K%W7[ ++M!SZ5['(XC3&W.P!`DS[V^Q,(O9L+S5<U2]08[N7;EWR7;<V:'*:V\.7N7<T[ ++M6SA[6S2W,<3ZZ,::Y6\#+3.M3QX"`+Y5VA4<N2O7XTA67UN_)[VC;NG=WPGG ++M.],^_/[G]3]"UOU]S5.J^B?JU1.6Z5K)E4/JINZVT=FMRA]]PH=5PSAMW0U* ++MB'U]=(LBB7*>W:/+5310=E6-[,Q*NNT$F9D]>OH4E6E/7M=M1DY>)976=XW? ++M7B-.*LVUJA<SX*)F="3W=+G&^NR[/.,7<<7JW..*X;>)#>W*-BZSZ@"%U;/I ++M-^K7H1%#2!+D3B'@=E98QV165#)*):A3<S2CQ#D8/"(`4+UE[#SRW*E9[/=Z ++M=GM]N^F9IXQLUOK&'@M6+S'ZB(BI'OC%2/<"/`DP;1.$*;]\-S0^0``[C,K> ++M,JG[F1)JD1B2H4-#.3I9P94HJJ0:XR;^`""+]GS4<%D254,?&!T^)=OJ7S>@ ++M0!\`@=X;\]U/Y+-3Z_//G7B=7M%&WF_.JO/!+O4G9K9F9Y!^<[>E'=*O>%E9 ++M6F3%:?`"/9HH=:U]'E[;".(*:[27JR%E[=FA)=R;TXUPQ11RAKX77H@`')D3 ++M148Q[6&2]';>6?&X=%UO.YFFH0$G/+PK1$0SLY1%>\/.K([W.\M<),N=N9X@ ++ME7S3F9&W/^!T6:BLKY`$-:OERSGF>H5\P^&9SMDQ@XDDF4B<0WRP-'U,=@\C ++M=51\KF($<!`,0(F^KIG5)"/AG4%4OTWAOD)*JY)RF;2TX839O3RZS2%QZ(@: ++M)E;OLDB^H3B#]+Q[1:\G,UJJMZMVC[PCNWQ2]U/POFSLM2VV?OYWCFV2DO!F ++MIYEXJ.6PZKTNJ,HR<VW=S8G)&5Z5LR9K&9N:[!<C:[:[,T8^QBG/<=Q%4,5O ++M-[+I*I*9;$[TT*U_DCT0OH0/@GL.?'0@W$0/XR1U?+$?2(X$WTW]5:N:OYF' ++MR]V:L)[IH*\P)+JP7TGF]Z[I(@D##)`9#!XTN8LFNRJQC\@?`(&])X_!.KXR ++M/EV`O3CKY=]>77)<*(.9+?9.R=S31[90V>$G;78IH2/`0',\R>&8^<K/:7Y9 ++MUF:Q=>O:KE0PK3%]LR%6;(M8*RMF7DLT94;PE5Q,A=,HQZ`!_K9`'8L[X]L, ++M6_7\0>(S3W)MW(;RIO/FU1UXJF(=5V)V,(>3(V7<H$@F63SRNZWQX#Y$0!X# ++MQ'B9X^UFK$GR3PU"?"L2J\7KS-B^;[8RZ$AUE[G"\T%/GC'%;W*:)=G)LO"2 ++M>O&JVO`0-[").VY&;WIX2\.4.O)637&^K.-6IG=%RUIWK5OM&Y1$]U:$+![; ++MS,<[NK*"+/"D)N>CP`C55V.Q-3Q?M>SMS[<+N9SI$F,-]4ZIVQFU72,F-#FQ ++MX`16>\M6+JW.5^E:MM"<>:VYJWUC.3`P4GW7DG2>&E1KV9<FC+`-X$8ZTK5^ ++M``7>VKH9U3?A*]-;JG7I,]JP:EM<<6R]K>BA3[L2[EM%"TVS&R\05"J)L.A2 ++MJV#G8JU!BK]$1<X:N>W]?!E#*0OX-![XW9M7"@L:0"2218IH.85(\NQG"F,N ++M\D4*R\?*=ZJ6]-I+,R@=26S/^$0/U]P`/=X%?0]]'UDOXAC^,8M+$QM]$*OK ++MSVUKH^%&I(F>QI!R#GDIMM7Z!&U7O3WNN)M%GUFSBV_5MN5<\&DG-ZUVVUX= ++M=!OO9R0Z$7#P=@(>3`@&Y[S.<:/N=@4I$E2]]G"NS9NS>:IKIQ35SEI]OA`& ++M>D%+:P[HYAY(M.C[0Y>]VZ3G2Z0F*WCQ`N2W:58@^F>"+-=@FM\(`:O1A>@S ++MY^3!RBP^5V-JZJ7X:YYB585UFY=V:S3D]<Y'8LO$))L0/1$4_8CCU\O/Q.Y[ ++M:G@A1YCG)I=4:;SOR('R!'O'?B=K/.O/IHOGJ7K7IVE%74BJJJKBYW,YP/:2 ++M153#7XD/R`O6+ZA9GX(!MS\/OCZTINO8"U^TN<[A@J=$G.W7(E!'YI!O=J8G ++M(^0`?":W3),[U90Z7?OT';5?Z]"OATN2*J=:]C?RYOR2-4DQ4H70LOU#\B#] ++MB(Z[M,8?OYX5GS)_WL?8[\_0+C_`A`WGS.9]]4/LU]JV>J=,*JJJJJJJH*JJ ++MY6KY>#Z/D?)\G[7W?A[,]._5TW7M63M2!/&0^,C"3P2?*P`;$+Y1A-DD8(0? ++M5**.N?FXUDEY*M741D(ZC460BHV+71MNM,8R=V222223,UM(KA$%-I)`9/+6 ++MC<3X2'V,O%A\&'Y]]#@`8I20YK+RV\J:3DD"<@2#GO6!S!2(5`25$"01@)`, ++M6I<6_Q3$L1:S'9V"M.6^-+U`_"CQ"V(.PZQH%P@0A>FQA,'&0,HN1VL"_P,- ++MKS\$5YA8<>=2^H$?O\?4?V7?5#XQ\8PDCY/TZ[A4$K.VZKNF0<H'HM#:TM#Z ++M`AH[1\<8DRA([;D,M7<S::XY/I<]3-TZ&4Y9)))))@DDU-`3,Q$WEFJUJFJJ ++MJ*)),M!->$1>4,2!`@!@A\T+G*"L]:M]XXL%S=VW=]&D2",NYZL)'(-GP$// ++M4+*P.3-"B&<9ZV^R]PYN+5ZIOL?=;,P!Z!"OWJ[>?O;J[7V/NSNU]F=VOKMW ++M=N\SNU]C[L[KNGN\+GL-VN(`VL7;7)Z<.3@GXQ+G-[F^8UK)7O@`'H"?;>/: ++MFO2-V?,HW623O<-MY<O"+Y9'HASIKSO/-N?//*M>$E7M]0=\Q6XZMUV(\L'; ++MS@B!A9&3`1B+!-<D]KN*BP.#(+`G,-C%E,;Z3":@:;0@9FG%,VZWJX>0,>NC ++MJ03#"%<RJX]RN=P6<H>%76"C-EW4TM%,G:PKLVI%8OKY`W+1\_>\R4I;J97K ++M7KFJN;J[H?`K#J]T,IMRMT7:95,*7CS*DX0@K[!IXW0LUN':B]$UURDEVG=S ++MMQUPNL+&1IFEO%UNS89!W7F4XW,E2>&2'TS,UBJ:4UE"_@%J*G?5ZPU50>!> ++M=.MG#I2:&2/=S!(T4=$[;(Z9WDY[G-=55S^1$$/!.3I`DZ*M^K@W67XU2R20 ++M_X'O#PFY7>01!!#2:;1I*E3[O62](^@0H(9C]&0`1)'V($"D.]4A?%]7Y?#) ++M(J.B);^MS?(^6%W)NZBI2\,PG;V>ZIF6]Y"AVR:=<[G1>:,)QJIU=>[V75T: ++M[<-_X2)J58<H-^.T$Z892]U"G.X+K?D!<\3P_")RUI'CFX4HWH@5(\D!M*^\ ++M4/4"KK+\CQ*'HQL+0P*86Y/<YO-5>W:NX.6)*W;I#P>3C7F]HI2V)29-9[S\ ++M2;(I1%N>L]G7SQ.MT:^VEM/2;X3EC@N7@/0B_:#[RMKV>?LD&,WJFN[+ZEL^ ++MB)IH;H<S,O@S3I!MTSJ%X(K)2.K.SU/UX/4QV;6WMT,'H!TL%9GO7ZU<7-9T ++ML"?34#T9FB4B/6:[:]4G3N7Y)Y&(VM=TIX5O/%77)'+5PQ/#Q#H5M/+M*E?; ++MU7>E/-1-5UKK--WI7='QCHX:FFM$G=IPF(JB:*&4G`$[>)[.,N.>N^&=]B=N ++M.U;;5VUWV6K7LW=+:8O!)^)&]MDB=W*VYZEG5*R4E4JG0[4`F%J\(<YK!WV] ++MS6^&"[Z>NT*8JDJ';IG:RYY.5I%Q9%WX1=CN2(O$O!;PV0Y,YZM"QC>N9YB\ ++MQ;P\(!GV;*[.KPI14V76FU,Q6^1:?;?6),0:!VAWH%WF-$H=LZ=&6+*ZE.[4 ++MTMTN_3O5)MI$T+M7Q=$>$1D;=4FN]7JS#%"KD,4,NRSVB@.@`R2)JY5FAQ%; ++M(NLEO+>/',C.J9]Z(Z:WIRO=E^N=3M`;N"9FW)\G0ZTU@7@!('-#GR/35#B: ++M]XB\E7Z\6Y+N]08[/"*D<*M="&Q),U,FE=:.]O9G`5.C2CM\+J>E0\FYD@`' ++MJ52C!;J9,1':K,";MLQ`)@S,ZTF8FH9-:M0&S)JZNL"R8:NM:,'6I<@`RH"E ++M"+++';6B24A+J6W5G=P\%-*PC=I.6(`>4Z-$!4IV#'Y,>@>)!B"#&(LF6X$` ++M/5U[9[&?'-I?6W.P3/'.@.5C^!-%'%7WB]JJR,QV5,Z4U5YK$^U2ZM.<Q[W2 ++MMQR,(S:VJZ^X#PC4:'KY@Y0]S\Y>\,&9V:U9X$2ZIRUU7C:K"ML4==2;:F`C ++M.DJ],S,NP;G:>W>]J\(7MS/9-7S1[S[I>:V.1:O-TKC<OT"*[5HHC3%8ZZ>V ++M;J:]J%O,Z:<S6[DH7@1NYD&:*\`J.Z2E4E!B+59L=;9?=YCQ6)RX\M]-D6PA ++MQ;%"JL7)O-=B3/MM8<LZ[DG/`7.5R:T+R=][,N=7M[J55EE7M9.*CB)Y-T]F ++M&89&-/PCV`,C$18:-]0V>.[N>!SK,W0:.='A`4A\LEMX'ZOWOWQ*2<1V?A=S ++M9)NA-1<W?*YE=-+6?+JK+!R\SNRKY4`(^1!B($D>,Z=(6!*[:GQG.EWNV?:3 ++M#L3:O;ZJ1D+55]MUE9$1`'[P`?U]``?D?<::BJJJJFJ:JJ*HIJFJ"JJJIJJ8 ++MB)**IJJ0HJ2*II***JJ:JJ*2FJII)J*:H(BOG9JM:*HK%57DBJJS)%1555Q7 ++M8>QOVYZ)&;K']/!GUM_831J1P3HO:E!=-1^WP10ZEWAJ^/UB?@>,LTU6T'\; ++MQ9ECNE\MQ.43%BRBJJJJJL6*NP&VIE"L#GKY?*JJNV*J*HJJJK&*J*HJJJJJ ++MJJJJBD8BJH(556M%-55555553555%!-5%4Q4145Z;55154JJJOC)%55545\` ++M>-;-&R1Z[Y/42C=O)[5AP5=GPISF;2L$8WF@U)U]([169M7MTUEMDJ)F\7:/ ++M#O4<./.KJLL]/D^12%92E"K;;V:<]BG9S-=J5DK.ISK=YA=7@NL=3EO?`</> ++M',8<]XV>7LD8JQO=1D>B*XQG6\7MJKIOA15Y.K959:!R9#4@#A&/:H7H=CSY ++MNAF4K.S+]OSY%BB,%!(][P]\HN=O1D@E(OY>OIO'"PI#4.5Z<6=.SSR9H'C5 ++M#9/HK:PL-^7A.EN3ZS0P8"G:55U"1>W[I&UV$4M2&SF2IO<[5R,S85]-G5PH ++MV4';&23;Y_G?5XDP*CD@?5+M43!+*UN2B#&2Q-#!ZEHGT2P=9,BH=;P"<D(? ++M/5L7QQA+ZW+:M]KUE3?ZN3?VL1G[ZN9$[LOBS$)]?'%D\/`=&DS*/3U;Z0IE ++M5WCN[S0R[=5>E=PL7F\*P\-S:(NB$3=O!LY>)`W=$=ZXISRV55$J9;-36VEZ ++MKK$[%F<><Z6YK@1PB-]T^P/.BWPP2=I/#)&^G&)F<W8="Q84(]6)WG+LF162 ++MSPSL%WWHAS//%>=<S9KPD3?C82>C<UT$^VY$X>@]0.&;=7P5(U68*HI%@I(9 ++MUM)[;PL,$0)G5:;:%G;+:^2`E(6QAJ@\GY>RY&WLG/][_B!$0(B!$?N.X=WX ++M9.KXBPJ?P3']?NKZBVH_(7JZV;JHY*L_%?PO7K^N2*^/5DY)OX"*^/M6-K*6 ++MLX%+O)D\E!(8D)&MLW,B]>&WG*LNSAW5IDCI;#SM)DM+%9Y''PI5B(P2Q@D8 ++M*MSUCBL1H4$@7ZYR<\.MSM^=#RU(4&]$LJDJ,,BS)X\>QB;(1(8X$"[Y1_`` ++M<>C]ZC[$"`<D_7SZ>U\^L>Y:/TE,CIUD9UARKRS@Q5>07B]N,K'7F7ZKM=.2 ++MU-I!WU704Y.>HV.LFGM'=?KN!ADT)?OML6+M-V),L:G\/S/DDSTE2^FZ:P,Y ++M/'<Y]=U4\2[[C*J\$]NF6+)PS'RME9FXV:VNRC2;'U0QS2GNGJP3??,/9JR? ++MD#!8H>"12:R7GIW?4Z.=:ILW;@$F<9Y+B.(XX#@+AA),$&+8DQ`%@AM^"P8A ++M;R_`^,D6?7M2+Y)33]*J-/GR5V&ZY=DEZ9<GD">E(VFP+=S(,A@])LEH4[>I ++M#519[O#:H@KLL=X2PK,MWSW+%5A=9>7N^ZZ[.$HI:*ZW@JC,S7=5558KTJL& ++M35O:>V$'<S&\2<<\>;Q'#W917A(H<K<OV%!8#KC;7MI<VSJ[MD8,XZ<P#*`0 ++M0&@*(<:P!`4"/D1`XCT#MGXEZ:F?3/%'YJVJKZH";E@:8FKYJE=K5F-YTSV= ++MI'H[=6G>$^L:!H(QT>FT/5+MZ*=KL3%-^"[*-:\-5$,3G"I]$5U5IL'E=\W< ++MW@LP($]PB!R#Z[[P]M6[+@*O#"RTZ,R,-I9655/B1UJIN>RE)J9TYTK`-,"K ++MJRG.;5&R7>78IY-6%E4\8T@.3G70G2'X1&-O)>7F>H55AUEYGL\8/>A@)!<# ++MO<\&LE$$ACV>EVPTW=-KT;DA-D`G"0.($//?/G7?;F_&>7.WI$"2=3^^JG6: ++M*>N^M];$M+D[F0J-9S[.W>UR^G(L`/M#NT`-'9RQB^M=P[;U8[BSEVI'6J,< ++MWE8\WINW-[(VY-#.G`\FXT5@GMF;33W&\T$[TW.FJE#Y"':/94>O+V^ZA575 ++MYF9?O(`,^C?7^@)%`?#$&4"1\),8D2262YGY8&PX'PA[A<^O=G&!L<L<*S#@ ++M?#'9^,`B/E7Z?LB>424""QO?83$.6\U3.M*LUI>N=+/-<9B95K(>GD_*>?N\ ++MNF+Y?/X?%[O,QZL\BY?[G>0[2>O+GP15%BJ(P1B@B`J`S$,_M8ZV^6>[OS[? ++MTLY\/?[-OCG&G%]^D(P%PT0P;!B8ES$C@S-%&S6'0@D$@0B)!;C*Z5XYY(18 ++M)&':5$O2XTX#J6`\44M>$-R\*!2O1)Q3<K3U+%5J!3MN\/26I-M53G'2DJ\E ++MXK9M"S53,Y<H.1(3G:FA*@SG'*@2W,U:"I7(LXY)>QM"($?V'_*(@?L$AG"0 ++MWD`R`4!"!5[U83:T+6*E<8VOX"Q]5(:M:-)2%$_=>W/2-^RB>T[3FBC`^H!' ++MP$U862/:>%ADQE\/O8$0/H"`!.]RR?`9,N(LB(JEZRR!H&3=>F9"SM5F;V)R ++MG!AB1]$^#]2H4"CTZMGJ\:GIF`M]R$A2;EYY6+[S$X$3P:B3`0.8-8%!UG1> ++M;;GI=-2>Q^D$`UH-6Q8R32JY!%/9F)Q6EO7KQKP0@>9Y=OC^QE(<=JIARAUZ ++M+N=CHRV(RY$J2LAMB\MUC;3N3%S7#LIJ9C8:5C&)K$LFF5[&-(=M9(!<)+5( ++M33>I;P)5-5TB1,*1X,92!59/,CY^^2.D/Z?PFQ5AAD"XB!'UP@"%I"XBABBE ++M4#TQ5RQ\%DFG`&4OI>>.;7Q!X]2A\Y^FS9HR2?:AI6($C@8`H@&U1AE&0,/$ ++M)+.FE(ZVR"FGC[9>&Q)G>9#2R7HM`F3V72)N9>7AN(B!]?(@1`_9P/L12$VA ++M(>MA^^2&,IQ\&Z*2%EU"1))PS]7,_6DU"/OMN9P\W,B7YJ:N1;H9G*J5X$QQ ++MH:4*HA:1SW<O0<%U8.=F<+JLO?5WAWIZJX@&T(ZEZ]@6#$_?HB`&(=8A\/R@ ++M2UKJ_A&RI^./DL@D^7HY=>C+WR)I\+"D:K,0K.[>\>J1TWO)^@N`A-[(\&,\ ++M;K>&#U&J*'#":&57)3=@PR?1>X%#R!WJ;1]LYPZ5P`.NTK*=`T<`U%G5)ZLU ++M%URR;$D01ZG$56'Y\`@"OHB_KS!"\;%&OKXQ@,J*$#/J3<G;%4[?K.'-71RS ++M?C.>=AK`4$YH@G9B()UL`URUSXQEP4<-G!9%%511J0,K=9]/B9=?C\?D?9D$ ++MEJTR4#Y?C#F/"/N:U5=ZEBH,+<LRJ&56:+;T:U34G#?WC)&!3ENCJ#YKIPB5 ++MDF:O)'9>RL,ZV,%I$.DS<VKB6;(DTTB2S:FKF1-3_@M('$@\=,#V=DCM2/GD ++MG51PNI%F;T1`_7U`B*.0/<@'$,L`55[+#2]:F6N;CL2&/7ZSY./;ECX5FP?J ++M]JB`!^,!^>R'YPTNY@.0%`4.M"4!R#D'("EY#2Z`TAI=#I:`H"@*&AT!I2D- ++M#H=+0&@**=-)H=+0&CDN@*6AUH"@*`VRG(=(:Y`60%`4V0I`NR"D6&OM]_3Y ++M?G'I:?3G[6=[ZR/MB_6K^"_/M[>[Q;GN*%,3W3$],O<$)KH99T7S?=<[$M+; ++M[Y>JM:Q?>VKZ\$QH8JC_CMD55OI2`9Y_3EZR,'$:J$T:V_5,M3U`9/;L[*O' ++M/*9P)V5;?5=IO9G9W>R=[9&31NLJKXXGF.95?V^[8TC?)I,_XSN4_C3*#_'Z ++M07Y!(';IIRB"JUE9KC8<^MF8064=)B\Q(!]4^LRN>'190-CD'FJ\YG!HL?:] ++M[D\UUP[Q/H`L@1%Z2@+D%Q1P^%F+QA!2Q[NWD6W8V\WEYP\\V/5](B^E4!^_ ++M*P"<A`X(0F&V3KKJUPX<4FQG-\M+;;9)8#>O![ZWE\?R8B/FYZ['=\.W8^3\ ++M&>'E9+TYXY?7I&&`E93XD%ZC6Z>%VDN?/:JG,'KF;+(9=6N<RJ$R'5]*SEN6 ++MSPR3N#,>V$*JY2%9=57=CVL1=R.012<D7EUKL6+-7/-;ML3C1IO.D6G8FFYQ ++MC'D.L.*09F:Q.@423-7+H@NN#H3AV36KLT,(RW.H9)4D6>(/(JBJ$LY5,/,F ++MG(+,S0DP%*;N(@`;@^OD0!#WJ9?I^"=4?,>PQY1THC02`<#B,U3L(#O@95EC ++MEZ<;DT+(U!`M,C*I]7E650:=49V:J4^#=NIF1M@[SIDF#:HY-\*K#&"F%QKJ ++M5RTB-Z@Q)':A/#;F[7$F4!S&I:693;(=(9AEDS;878W6EE7572W=O,(8M#_# ++M!GW]VH>9($<]*WI555:P&.;[F_&KE5,L:)Q555$V4]M]!H\DYK=EYXYH13UG ++MBYGBQAGKG7T4+.K&^MWH79*<(A5>2-I"[#2P2;BK%U$RPXXW-BJN[%--TBM3 ++MLH@Y73+2I)I,((X$@3)$SMW)WLJ2D8/:F*;+DC,N_KX!`@!/6:^F/KC\J8D/ ++M'#WX!\6B4A76%]4<0GTKWKLS3\+Q'VWD7\0PBI78^YSV1KK><V9"\PB#`OS< ++M`F&W<+$A7"N5Q5(Q()%18D9"&C06U;6-;;;6UHG&U5,40B*J*KTV^%\W>MN1 ++MQ'-<A-WF]DVM+9**NI'3YTUJEIE(HT:/$S2T.:)OU=&]];-ML[V;:&4-9":` ++M0!`@&Y(0`N0#B8`RA-:&/F7Z1=><>LI#A/9=H]+S,K)&5W@AU>\L.T=$WV>X ++MU)[PEA4\P5?>QRKF^-"SV+;?250'FW%"K?!&A90]99)("3;*T]SF;.BK6V$A ++MCPA-.5[9H39)`1X<Y0^I'?`(``3B`,'F*7Q*>]WG/A\NJOSAP;8QD)VK:\'3 ++M7&PAW2*J[SWQ0-\//(&F&U1$BA$1$3Y^"5GTY97Q1R#LUJ6JABE7ID,3GSB_ ++M-J8$J`Z0E!1J&3>W'V*$@8.KOEGJ](*,_$DOA=+QS#3<U@D28&;+&)618+W4 ++MX)^SF+%\*8DD\NKIQT[N:N3UV0])!YBRG,600.@O.TL3H,@&ER2B2'($)09Z ++MZN^=[XQL/&IG5JTQQ4CO3&O`UJR?+3F5G+X0%\VO#^W]?RO`,5\.>*E$LV," ++M]<G-,Y,HQQQNJN6HFH);5\F!=5EKW[TH?WT+/]]0:2>6A(K^]"[6'%";0)QQ ++M`C!`T&X(;`;"I*^P@CYCV.I\IY2\GO=!>/*`_N]]BH204?EC]B9D?LS/W1?[ ++M)_M@@7>7V?M?N!(X"R#/8ANKH7L.8QBY^W$G-,@F<T=667:&BKW)]$HQ/F=# ++M`%0!$!1XXK4`2-I^YYZE)G>VL<RR;4X=5"L]DH5+N]U=DMG^5=[QUG#[L#?# ++M=I9-834I4;M>>9M]MCYE[3$H[+(HCS5DN<JH9DZ89#LT&,M>,^QV&HQLM7TW ++MU];?.+*;)>R')E!&)E'%&&`X-V2+8D94"/0!``F5M-2MN?9?[^9:)Y>O*'6X ++M^?.VD\^JP?1SOA^7+^L?OB6&?F@<PX'!B*,28C6R7!!`4>EBLICAFN>+&>>C ++M&^EC!:[2FF*S^_\/!)EFD-PW#9\AZ'/(:>O356L(MBR3BU%D(KD=;2[U$ZLD ++MDDDS-&Y,(XNT4%PVQUO;[7)U?C'I7W2!/PO/E/0GH$]]]M=$`#@,B/H0(`]4 ++M,Y."31SO3..+JY,VK6@\JG6WOK57D;)NZ=;/<ZL<JG":Z[GWN%)B@9$Y<A^P ++M*D5>GBK3-M19\NK42;O22SAC$1.X@.$0`-Q[,,(`.Z"N<I9S.Y("(FOL,7M_ ++M`)CES#&RQ-VKOY\L-[?S`XR.```W1/R(FN\KYDDF"4OG4%XRL'P<!ISN))@D ++MDSMKX)$TA@J('R(]-[X[ZO,PFNLI5NY4.MM.680\+&*!$"1M:'\6E3Z['E[) ++M"K=J?;5):-N>K!:?/DAV9FSP3'P"D)NK&<_@&U0+1_$U(H;'ULW7U,OY\O0Z ++M]U#QNUX@-]Y*?26)QT-];';DZ`3&=E3]]]"`(\@!';=?#2%GD/N!`J(?K&?$ ++MDD*[(!>X;XU29GZ9ZO6L^.<FLQ]@:NL!V2G=(2MVIRP,+.@L&<4RV\!%EM-R ++MDM2)=O"RITELF#,DG!$4(CY`$!.=I.>.A7/D,3GS]?5)39VQ,.M#HT#W763? ++M=MV^P>K""039S>GM[;SU;>[3GJM2B_"3X+B"03B[($7#I`T5:7A1FS[E1>!# ++MC+G"IXH@I!&:3,(RK8\:R@^<F9GT`"#H]7G(@!^5KS]CP?(7SL()MG5[6_E+ ++M:B].D;*GW?(`4[P]:3TJB]:W_%_J_V@2((_1<V6+.1XE")BSEJ:&(,)?-A$E ++M>O:M+4MN>]'NMQP@EV)1SN=O\Q`$?V:QQ7T+8$5?K&>SV$;6K:-'VBDX#[X" ++M1?=-&S01].2/&7IW=!-JMJ!$1JSR[U7=\O'5<DJ5Z=L7<XO;.:A@V::N\.6M ++ML/87JH=/7T[69$#<R9L$Y68WGLG>_$YX?-^3OS`4?;;D>P63A-?"2-0-`78Q ++M[2F4\-9<^N=0]`$`6O8$>TW$5XUU#'J60KWQWS68+3[VG/7UT:]@P5J\?:7[ ++MK]'9IGSFYY^X=ZO&A*0]/15BI=`EF%?>*F31!6LEG)!1Q1Q5CQ[$K9L##.J' ++MS82$[+!BNN93XG!=R[NND&>(S*;E"1.RA,E8KTJ^MS.[,D.;5SH-8G6.^5LT ++M'<VT<H.9?(3R&T)#V@:M4.1JX#%J,S6)N3,TI=,<7+165Q;N;XTZJ>(NS)H* ++M<.H3M=92AT6QCV5-K<DDHA.A35=N5(Q!W3IS-V&^.<Q3FL9)OETO`C-7(LBB ++MZ1O+E$6*23;N=F\M@;8)6%2X>%D.J1[JBR3-*W-2VP75T9NGB`DY2Z=U&6+X ++MDLZ2[F1T(HNGBZ9V]B=(<>(XCQ0OIG"9H,BYM6U-=S1F:-9,6K"L.9D&7I!3 ++MV0PX%%5@T3(6(U`]``CUZ,REMV_6-&XS;\4X-WMZLH3ZIP&;[AW6Z(P4`WW. ++M?:_5UIRUMV\VCZLZED[C]$OUMGN\*]`RQ+JO;K_7OFGSUA)*$;PH7(^-&R`0 ++MU&/VN0!;A2I:H*RIIX*O?@B(B#[C?Q'??0=JJJFJHJJJJJFA4SRXUI-\9W<[ ++M7MKM:VDSST%BJ+%%5148JQ558JJWX"K*;.VTOIQK28`,[YG$DDDDE,<#<ZOD ++MR?:X.TQ4@>O`9KUT45C;91,,9CUZDI;<AG"JDZ)4W_F<*?>ULC:7B(6!>('P ++M`1`'^A#OJ]#2,_,!KUD@DDDDSUL/\]F?`<F=F?(\P_>$Y7;<U880O$*5-VWF ++M3:[4%53="M5_1NMC+8]1!H&T@I!;5Z;GJ=]-29.QOH$1`'O4MO4D\YMCVBS( ++MIYFWC5UNG?+TKUYJGG?2Z:?3XKJSEZL`\X'O#:/1V<$_))TPB-66Y&U.U8)X ++M"``/9C5YF^69=<QOI2`ZJ.FBJ\K[=S![=$[[WXC+#W>V)/O'"&?=3`GXO:A) ++MFO2NHVHO>*`I<PZZN85`2[)ONU4/1`B!_L/VGE\.R7Z7US)PA=GMTFUNT@\0 ++M[D40;Q@3W!_.L>!.L$4"!8V7#JUCYY.(O`!0(QQ-MIM%V$5D>`B!"P%`9UOI ++M%,\3LS<T229,TJRVH!9*J.=O3U;<%OAX.3C3C;<M:V1JPIAD'KZ2'J]3X@GU ++M<>&F_%D4Z/&*E)DEL=&4V/58.9`#&:_?]3ZN&%5E54=X)(#W3E7?E1-_#*F_ ++M#Y0-X:#FITBZNM^6=0Y8NGR[QDQH2]*WTA9=\\#->E<AKH$Q>6WJU<YW5,]M ++MTY#((:!SP$0!//"[#W>!YY#:%^)U($M*]R9Q(F@E:")K&RZ3VVR;OD-6F3E' ++MT5M!76]9D>:]CO`/YB`"/:=_'SX_EACT1OU1+)^MN?JU;M[-<@96HRXTG4)^ ++MOU(C[@0(%WBF0L3D_1'7[1?SZV`;6GVUDT0#3Y[W52L$3QBTIUC->VC-VPNQ ++MR0+W,D8.QA'E"".I=4C-H&LV:.<[9FZ*IU*RI2&<J0(2-M$Q=DW<SJPRV)>5 ++MQFJ3,\W_95F>JPX)$@T$]K9REQ.Z7*FZ%8CMJ4'[<O;TXL(&S,I*WQRL3&US ++MWDJ33E"0"1AG>PY2(NE%U+(HA(CD,J48'P0`!4]N;[U.E:\9DT]5!$8$'NQ[ ++MT,<![M48:*/INY\#WNO:MD*/50?7L@M]H,R?;X9<VF^VYF;F\/7(?$ZJL2F$ ++M@622>K.6&55)<O3=:Q:K99%KYY]=X2$ZXZR/'/.3H;WWY-+TZ#5L9?U0'V@A ++M"+"UCB)(]<L7XD-%@U`\`/`0!`T(:KF*<RY0Q-VP)[-%%#(%#)3,'.\1@RER ++MDX11\:Z7X6:->`K,$FR8/*N="D52'!@D)FEB=$/L*NJE;>S5.]%3M6F6\:AO ++M"P2ME54YCQS"PA3ES@K,$PHRR')!_"^$32BRB$;5+UU6RS//1)EFB[JHEE`R ++M*;PH>,428Y4YI2#1>*17P`"!5O=K,]M$ZZ9\9V,\KMXSZM$U-FSK6:\<8S>W ++MZ;OUE/UYU,&[O775`%<TEA[.[./CU$7VNB97G?35SN9=85NJ&E9PQL&$+0TA ++M&"SZ<N5O:RK#Z;.$<3:DM8P3EQ2JZPP&PI()LIK129>(#'^,^`0`!*\[,B1$ ++M0+&;,"PPJ/;C#!*3G,E^W@G46FP[VA("-$_$.<O`:SVR*?M!4AR4N@>@`1'L ++M/6.F9GSZJETBC[".T','MW)?;.,B:\!PS2PO27F29-W-07+J9RN]4S=30/M7 ++M19ZT@0&8T%2@,$KP$``(H.I[><U@PJ\KMH@;XO1/\L_<?SO^[8^A-Q.N.C?P ++MOUN8W>M9E6>V!H>NV=6K*J;FNMH;D]F@TM)+.F$"&E`H/F>4RV$9*Q!-<=/8 ++MJM2J>G23)'&B2RC:1*Q28ER36!Z=SCYWT]'Q\$.W?MVZKT[5BYW:ROC`IVQC ++MNG8A(.N1B]-XQUVMJ855<ZVUJI'/`I8%EUQ%K,-5XVE;,75E&^;@GV:GXNEA ++MZ49S7DB6+[M)6(<5YO9+*-'>UX03P2<A(B]1DQ'1$0!VREFUT=LPZU)FL\C% ++M\8URUUQU-"KF^U&57P&!3<5545523Q1)))))))*[Y6H_-NQ@W@I-2@E;&NS6 ++M5A)B1IN>Z;,T5/9)OMSA)S)E$6'76KX3>BW;=PY>77V>AF&'-JJHJHJO@&*J ++MJJJ+UYOGTL\=^=SCWJ'H"3KVU/9WKQ*]2D]*PB7T]0X^DA.;+9%$^6]`@`>& ++M*YZ1[*8WU<_=E+D%QO3?##SJ<=W$XNVZ=T*]TUE7$[RY/:#N3QA5(\>?7,T[ ++MGA87$$X1GF)FV3NS)4ZQ.`J#=N\2.VSA$Z!Z(B(LO@MYK-Y^FMT2[[R>@35+ ++MM^GK*DL:8(;\ZX7\/IJ+:6T6B:03T/5)-$$^Q'?@``'W>D/=2\:^%&*O9'%4 ++M/ANE)$Y=XE@?Q*DQ,\Y4WM/'&*KD3M4MX&B:%LT7RLM$$SLZ?1@Z[C7/O7Z8 ++M"+()%FB)L.I`>%8I<I-YZI.*P#,W$IE&D3))$UYCBI9(73)V)=C:1&"@K^H^ ++M`1`%#-W1\IBBKI:YJUV7/Q5MVYMCY<[9PFCM+@^?CQ(OR<E>IWC;HA,CTN_4 ++M+#)X78F@MH,3=;U3$[6S1):DC7X0(`95];S*#\/#WO"90K`*+EOLSC&\]\A/ ++MO;8RY!D/I&*]FZF5+KQ>DJ2W#0PB3C)BO3TCDRD+5+>HI[=2=+F\EUW&66^F ++M@:#%3<@+:=VHTARV/"(@"2%3$WN>P5V.5U*22+R33]6DD<$)2%#(AB9&B:3' ++M9O5%>9VYK,0#(78Y>,`K)G=4.N@0!#EFCAO>K:/G[KF^YQN2+O2QHL;+RM;2 ++MUG+(^#SXW-M?B&0X-LC<H9&9N_`90R//J=">7E;GV\&G*<<W;73J6*O6*ZUE ++MC*]#X5=S[5IE0>R@I4I;=.X,Y3_1XCL?YB!`&'[B([YY6/D_.J2_GQ2PYVL] ++M,[LQ\[W+AF0655S54#T].W=$^)KMJKF>5K*4](U7HLA*JFB#%NA)!(HMDP[_ ++MU0!\B!`$N_E]Y/O3W?+J[L9>X[S)DI7.]OA:-SJ03G.KIRN/O+E1>C="][UG ++M>W$CVW6]>[L=?'*YBLS.IGM#?*MS:`OK!T]=,7.3Q-:U5J>X.K**U/+#FJ!- ++M`B3@FY#=419&ERD,(1'$8[/P1`^1$0`AT_)&E>XP3'9\NZ0;:))/R>B)[AU4 ++M[/<[RDI?&@Q)=)#^YCY\64C(,^0GJWY```8VLD?%5;CFJJMFFE(KDP.>U\HF ++M5-^%<9(EI"2)!O8T-&5I8,]?>=TZ>Y]^@0`-^"[!\A(EK$I&][=$Z2+*<UD+ ++M/DGK-=I>3ZZF_4YK'H[V'W41K><R)5M64=.-T^$UPB`!E'W;?=CH6:$]W?!* ++MSYY,M+?BW0,NO=/*C7O3PWVH?/4AL>H=ASW:M]IG791%`B[Q[2.+-3H]M=KN ++M17)F.X*;R3U0@T&*2=5="L4(Z;!"M$]3+4RT8TA\N@]HN^R/`1`\-))))))) ++M)))))())))-4TM5>&Z/7Y'I]-@F)>((DDSWGH$V>V[M'AMU)()!),I$I(F3" ++M,80C!).)07:RE1/%&3O*2)"6,+/!U/D$22:VZ^`)[4`Y\SY0[34X/AWY*38D ++M^,TK-&^.8)TBB'2RD&1`UJ-:#(O?/C5\[+,28$FL*$S3N9X2&Z0!%21DTI$Z ++M4SBT;,J[G2B+(O>>G&FD0V^:$H'9Z=_I\@1$56;?SW>S)FM*DE=W(W/?)L;0 ++MP79JXW7[D*I^E%M6695+)*.9*\I2GN08D)!%L7:EO*F1+-"8OT0(`:I#W/O. ++M2WZ_'9K;J^%>)))))))CPKMIDDDDDDFKR1B0689G%@EA>)E1X@TE..,4E%I9 ++M`B,@B.`@",#CAZO&W0[FJX8)M,W4T\%T.WCONH>T[>VO!;LYI>]V[:G,S96U ++MT6^>5D]V%M4@>'89DSNXO7L=ZU[/8KII,C;%(DYSV6&&*:M#;"H9178)U2") ++M$*,88P6UP#2X)CC])`$1GBRB9X5-0JJ.45;!0/?%'KS./LZ[?#G6R82@#R/( ++MJ9WTTM[+?=RR51['K^T6-YJ/;XB:2BYU+489N506S,O`,S!4L:HIF:21$0T] ++MMB")*6@8+PI09\5@(9*>6$W9JT"3"RV(S-EP-=]4$FT6^>INXK!24&)A&4R" ++M(,C,JJ*"HJ:#9-;^6K$0%8X9J8)FA*7D$1)$152E)!3,LT16OC&/;3O-PDVV ++MAQ!O.;AY#RI=NG-=\N\KM6C0ZTH',08L;FR\BC5!K;.BN\\.*!XI5)%,31-1 ++M5%-55(E$PD5`)L1$452:4"=%#$U0.@TT$Q51)W:HW.'".;,3,4T!2"C(:2I" ++MQ1F9JD4S23"N5/C]A^E:OPN++-A]R\3H(:8831<%K8HHIJ!-H-E6=*.#EEQS ++M3G\=>HQ;0UJBUM8BU;;$ZU._@A_P/U/_!H?XC_H1VU+_N!O<V>S>[>[N[=W= ++MJSV9F7=WW554VWNU555;W;N[LS,SN[O=W#N[N[N'=W=5$U4]W=N[O=W`M&6# ++M,R3*)S,R\R[N[02L$WG=NS,]NC;N[W<&9F"AW9F9@X=W=W#AP[K%W=V+XGN; ++M9!'#A(F:JN&#`,!!S`PV\S.[N[A,S,]W=W=W#1N[MB^&EO61N[O=P`Z.CAPM ++M==T+I5UCLUZ-!J1@=1T$1G2*#!<R*`H/APW%*!D&LJIDF9;;G;27;W=,S/=W ++M=N[O'N[N[NWN2)7=W55I7<S,SE55-MUE5556=V5EG&]J^;S,SN[N[=W=NR>P ++MG,S.XH[N[NU5"1.SG573>Y556]MW=[N[NYS>[NI"DGLWEW:2N[[N[5R[NZ\R ++MM6RENN&&+F9F9WKWAR+'):QV,=,M]EYN]W3TWW`6>S)RW67BY]TC#43-J5*: ++ME4MM[IW=222V])Z]ZGN[.]O=O`]W=-&E9;25W,S,WW=E8=DS.UM]E:MT3N]G ++M$.Z8=H;=OM4U9%;>;M=)'9BVZ[I&KKL2N['!HHDJIOK[2>N[ONZIFW<B;NIF ++MD%221KN[N[>/=W=W=O<D2N[NN[N[N9F9[NJJJJS3F=),]5=W=W=W5553;==5 ++M555W=N[N[N[W;VK9DE\359F9F9G=W=V[N[U555W3,S/=W4@=J(!(B&U$`,@( ++MMJ"(())!D1`3"Z\8ZXNEG%S?,-I+JTG,[<S,S,[>[N[N[NXDG=V9ZKF925I4 ++M[[E=5W=77>=W=V9F9,S,XDCO_+_Y?Z_N/E^.4WC?;<I@V204XP5-4B@89R&C ++MPA5#1"Y;C@ZW%"!QF<XF?J9TJZ!8B%"D5,HQ!]1=@1M5H86=J!:'#X$Q46<C ++M%>2Q4M">J1;$B!B.6,D?4H54S(X:Z2H1%$]#51][#RL3)R<G)BRH,V/))"1\ ++M%A"!)))$^-LIB6..-XRD3,-S'MPH<T6[,C15"^0@$A&R`.R;W#F1`@3*PN\J ++M7SPT'QF7/575/<NKNY]M[Q@==YEN[>9*GIZNW(9M$$T%15*%2$TW+54I:>H- ++M;FJMI,P!4`$0""(!MB1:27*[SIIQH[!L$1M:T-N<K@Q.B8C=JI"UNBANQMU" ++MY'.'1W#HT=O'N[N[NWN)!@]W=5$U3``88<7,RDINZJJJN[LW5A"8.R^#0MA7 ++M=7W`<([NS!D8,K#W4O\_^;Z)A151-)L]$_$5M\86T4W\1><EW98#8Y#'AE$> ++M?%1^J0RG)DE0Q78E-4!'1X"U9=!<GED%RQBA0WR*8*NA*CHBX^Z4'+B7\80( ++MUEB0'H/$Q00`0"[B6\!VK,+%Q>0QG+0(556H35,;"B0$(/KY;P</>9HRRR-C ++M$0YG0'9\)+Y^<.&3#26..$C4SP6%"D)49M"MPG)DG6:IES4R4RR+_TW]_S^/ ++MKZ@9J'X^5]_@/KCV5=+A^-[OQG8"$J9$R]X,G'DDD)ID<*M&,X"NJ!B@(&0B ++M3EK<%`FBK4PM;#)S(HDB)`$%1(Q124I&$B+!'KY(HGO'Q25XJBE!W,OT/"7G ++M#E(B$D)UU^5HY]NX>!/Q?B^;^V%."?<0FR!#0_.;<FW]B95@[/W"-Y"9Q`J% ++MDZ-Y4B(L$&&)77FT$=C',01LY=5G!?WU,:U!$5)AK1<A"`N@32X^BU#V-0RB ++MV4>$%U+1Z=SH1/TKW.&D=&T808D\#"VQ5:;U<^?!&0>'2\PL<REVRL!-7CUC ++M@:[JJ1(!4Z*`Z&&X`B-!`YCL&YQS0A%Y\#T'9XZ"+T#H]'2;G1Y\-'`33N[` ++M+J,H".`Z$,$"(H;$#+/#($!;5[`P;'0-CH@=`'1T1T&YEC8&[MT-%B]%Q<;@ ++MP9`P#-T9@S)'9MB$"+6Z,'+J%"J&;0D2G$Z21&,Q;F1`;H]4;VZ`+4Z[N('` ++MH7.`"*3L1">C7>H8P(N=Z(""PVH$A7H$)V>K@6MJQD=5:HR(F+ZX%<0*)41@ ++M!=2*?!\*G%43$B.L@M%`N+SRSB:Q4_/8#G2**J***&8EQ:Q%BW1<3-DO=BQ7 ++M30:OHX;ZZWH1I6*"@Z16+4F%ES"3J]#-C&DE25*@E.5!RF)G+N\>;5XU(D.= ++M%5%M!`@+)(C80D$<IBBE<B0<AE)5ML;""3(6YD&DR0$D1@RI4:0B&X<,*$08 ++M8(:A16RZ2VF:O%&2.'4066$0I"ZRHJ%&HL85KCN1;%U;"9J5-?8:S6<^K?PL ++M6HW0DST6IKT)Q^@P(+A@M0BO#ALUM"J0)B(LK<T)-,CB<8=BK$+$;+:DBPXP ++M6G<Y3($L;!HP5"7$:OGC-Q2&G<K.70Y41.3C75LT`/%0.0L%.J0!#228;\-: ++MM;!1``,^HE"4M`4)2%(4A2E(4)2%`4M`4A0E`4M`4A2%(4M+2%`T)2TM`4A2 ++M%-!04-+0%(4I2%`4A2%(4)0-+0E*4A2%`4A2TC0?%14`WW^T^WUR^?Y?=_0\ ++M_CCR^UO[&6XB->,$1B&786TN89MS#U@2I429PE(\JL0')J2NT9$;>_D+O$'C ++M@B&S*+Y26\,AHEU.#15'JF0;<CVM;!OU+[4)A*VNU&&YVN<B#R/5.DA'(Z** ++M.#I8$@A+`D)80@][ABE]V<-[<E4T[WLIG1M;BZA+.<\[G+H,X=I7KNQ=;T+) ++M%WKQSU4Z5]9.)8)N'C!UT<NT]3>/%?6;LZ<,)MUR%AD$*KFY/#6Z7<+K=MSI ++MVU3R-EC$NG`[*JBP\ZLG#*N<:BL>575)P4>8$UA$T-/!9TGC%57=V3O=C&&E ++MF/4\[!@>N5HZ1O;V2$4*QTU==-9A!L7=]F8*L;FA%*9=\*UNMRD;H.^0;NN& ++MCLGAUZP]FKLITF;>L'+D6APWMB3,M!=-CJYU36XEM)OIM,*]%!4<JT^E<+4O ++M$Y69RO2')V>RK4\&[$WM9:29V2)PJB9QXD5:0[,J29U54RNY]2[KS)3;8MSI ++M5AD74T.X5B"&I]=LW;MI7(IT$N$NPK/'AEWW;E!:B-ISJ/"CIL=G;VBVNJKV ++M9VY,TADS.&RU+5XY.HUPI`RJMH]5"J=#7E30ZC?5/7NV9=DJ4NT5+DRAI=N= ++MW6)H/;,V-$U/((W0EFD)<W6:;F[-418J9N<3>;77>-;==VX);N;E2NY35:Q5 ++M2\OJVYPVI%/7+F1>Y%;;1DR=GK>U.,=NZ*.86HNN.[6$/MHA"AVCD^JS&RYR ++ME8=/73FLJ1,I9TRH/%T;">59Z0\N=<Y./5,=7=T<EB[3PNC(JW53U'#0SKS- ++MXU-W9[*5;4[M#1W7(VGU6+JT-.3B20Q8HX9:-WQ(K<J1O8[Q=1H79I+7L$LS ++MT&E74.J<I,[V:%Q!"NZ#.LD&E@QI&F#ML=1J=X6QSV1-9LT@EV4,R3F=TDGD ++M7<V>4\5NY;#D.>Q*YB\(53O'AQZ<Q!J23L<"&!(-Y;JI=U9>,9FY,Y6E:XZ5 ++M(D=R0:1RZD9LR<%"UMHH32F16UN6+K5+"UU.W<BV.?)VC-BR=O,.L86#Q0Q" ++MZ8O')VI&OJ'/./5HE/IR23N[LCMK7DC>:[<S#V9UY45VH9>=;S*N]$LC'F8- ++M4V[R1EH%'G1<V4[-VZZS/%G*WNK$,S-RI%]C)UL:PT>K,*GB&NX%[AX3+6)F ++MSSX7STSIO=T&PMC*Q`K<JCV6AQ0E@G@L3!(.]O4A0UY6"M+>\1JNP=P&MZDQ ++M.=G%X<N26@RN:>B>JFJLTIQJ91;%X:[<6W.KB0A2*I9E\Q621HPZ`>F@7254 ++M,7'GG<:2KD=..W.:>S+&N4D^G#12U$U+ET)T[NY*O7!NKG;MXYQ%7-!9V+#7 ++M96Z57/0L<O3?'2<O*DG@'U5IWFQF;6B[F6=Y9W;FZ[L;5!3QQ4[&O'I76+%F ++MG74WNGME'L1V<[,R]E#J&=H[.R6)Q]5Z>R>.+C.8EF;!J]>596KB<:6)7)L' ++M#84Y)RJNSUG+U@QFUT#0ITS:"P\9XO%W#I7!<<T3=<<'5QT:6+.CNK*GAW4Q ++MU%Z+*VLZ0ILB0JWFEN99*8W9K!>R`R1M8NMG>5':`K+=9RRI.6]ZT,Z=!WGF ++M,40P^Q],JZLN[T<KFIV3I1+VKDTUR&6.G>N^$\A+8ML50P6N3G9/8R2+FJG6 ++M)LYQ6\+ZV:J^:=.EU5.=JAD`EFB;K;/8@\R1FFT7U:\W>6H[*D6+=RQ;TUV7 ++M=T=J]MBI[-XG%(O3=';4SUI4%5BW839*&FM?2;R>5)&[SDZ,&;J7+,6*T2*D ++MI;.<*+;D;QOM8-W8K->9/'@47W,Q8[>XTZVU,OK;X-NZU.6=M'@UF0E9H[FR ++M3:#G-&WUAM&7BT;FSG'.G:[D$P[/:^HA=>!R^"Z6\K7K9D;F-@;F7,ONQK!- ++M3,]F<$Q=#+%WE4^2%YSJ[O%T\3U3:YJMZ;2)1V9.76SW7M)L*[MM7ST7RV6J ++M4ZQB"S;FR'#JLO6=0RA4\.(P:FFS=(*<JMH8DQ2JS8H]9X\U3;&65>C1.,A3 ++MQ[CM82360LWG,ZT-XU%M*=Z4APFKO::+G;&;6SMOI.5HTZ)QQJRYS2LU;>C< ++MF[YKIQHT<ZF^$Y1&5I%GM-CI$].6=M(5UKC-9>:IRL[INL0T(J+7.^K)RIE= ++M64Y<W9IZUVY;V<+R0R.8I4SF;0.7W!GJJ]=9S6X$N!W7+O.:R>M=>O>%ZNA[ ++M:FCLXZXS6'6Z>.*9'=1ZIV3JM/@^5J[=U(M;L2GA3UBLS(K;IU>WF3FX.RUW ++M138.V:#I]*1L5:IUD[W:.'':U.^O:L<1M9+LSU!M"^Y<M;M5#$HE5)=!3A,@ ++MO=25A7$T[MF,'=0U$RNT]=;DW,]KI4;H<LWEE#M:RCG*LONOJF[0YWR[1V7+ ++M0;-5QJGJ)2Q;FSU-7/5JWK==-\1U*S3:C>T5>S:4J6,5V\W`<,V`^<]G"]%K ++M6Z@W./NQ*>;PG)N,G<[>X3-]FWF.SMK%FBSE=M&Z)<]M[<[BQG<[-E9F8:+8 ++MSF1-72L4-5=(D4KUK)<YM[>9.Y3KMNYY7".+I2W3QF>Z[$SE)[CKAI[<0Q[6 ++MT#"VGNI=1.Z5>/6-5.V+S9K12G;NITUQ<MC.D;G8A,(L[76KQ<V@5&`NAIVN ++MWA,[9[IP*W2$[,ZKRC,XU%RAAJ[N\F+[JR0=D.\J9)I3E&73N25=98X46]6' ++MGCX;'3?7>(6Q*%9TF1+?8U;64KW&*FLF9[=RH*=BE;NIO!,YF;LVNG"33[.@ ++M[LOK"I&RM<B>MNC@3-G*[EW)!I2U1ZJO4#R/467>=>I4-Z>Q#3QW,TSLH;HV ++MNW32&I38DBVDC-3./;[->VTV3CR;!HLUU';RLM:1UYES0?$P*S3JN7!O7TS* ++MZN-2WG5)J6^-RL0IZUES>2[G50M=QRZ(G.ZMGII`;.R<*M/)>O:,]G=HJK&4 ++M^WKW*=F:8/5=U-358+)"REC!HL:;TT+JU69-<]FS)M;MBEIXC)[D[6:GN3MT ++M=*JYH9EU0K)(Y2L&C9A\D;N)JN[K9-%TCO%7=+:3>]=#;S=VV1/('2R$>2H+ ++ML(6TQ=X)GABG.Z@N?8+:=SPS:%3$W4WG=@ZM[AJ-DIN:DT;E(8KY"\D353:Y ++MGGF3L5M,;?*0^ZN64JFY4UTI*ZRK[GS6938K-LRNFEO.::>%201.:]0=OKX. ++M1-]MY;PU@P=-II;-B\[A54NZ<S.R;DWV`R.5H.IH]>[+5SDG78GD,=EM%F>5 ++MH]M'+&6VY"YQ0-=@T55NZ)JKZPM["I4A&<S$)T34T-)TXE4]Q!*KC5;(?8;T ++M8-F]JR09.==:-(Y[,P*N=S$#6BSVB:'*6WFU1O!0FKTWI,NYT=J)NJ-M76*3 ++M>O*SJ!JM?9,G0+2@;=O#<[9K#*$BMFUEW>R\(7,YVUAP,&AO8LQ6+I[FNF-6 ++M:IYO$`G<TQ3,F1VU+O9[,.+NR1FH23UOMJZ0WC0,Y3VN;KI%PW-4NW!N:3%= ++M8X=3U/B]Z\%]9H@O!M+L4X7K!(G.NAM3ID$Y43>V:WA774[8I9=;-/%6.GA[ ++M&HIJ1JSLO*G9-Q>[;RH6OMJ]=4>ZC6);8K=7"UTB11WM5Z"+9VN[)=.F<!O- ++M#?5O2L%;4;5U(IZ:O652W<K+G,RBLYI3B,;-9FNS(UUQ4LI(3"L]B!6S=U+H ++M8ZMUH5ZZ$K-$@UU#DF[JK+EWJU3:T$2+N9FC.<7DQ1HU(N9RMO.>:U:5)3A: ++MW9@V1QRMC69;DSRUVI<X[--\#TW-6:.,C.DS/<:E9P+VMFVIHN[-$5E3?(6Y ++M&OL0<I6:L928:B)J1BOKVIU/C=S@O:XU*#/6UO8C3O<4H=JW->RKI[,U-8AC ++M-\)M3R3?#J6;5]VSDWDV,:@CFCV.:EY5G;;=BG>';-:5.W><@51-\+S,O"C7 ++M"1<3Q-3-$45LW5XI,HJY=F>L]1Z;6+G0X[QM7A64NXA-;NSU&QJO5NUV#%DS ++M63U554;//&+5QMW3FC?5F%"EV2MVI6MA#EI'96=:LE,U,B>.,)RYS>5Y?'K[ ++MHK>RJRYPY4N18Q-:<=298L)-&6S9VT`:7"JD7M`JU4:A6GJM8B3U=HTZLW'L ++MHT#G*]S3CN]80[3F*Z&2$.6!(8&YZNO7;)W-*20<L9F.JJIX'G-&4>SD3>&[ ++MMYDS(XJ51-N^K4[U:L5%W(I\;2L3"<JC.FP3,%@S.S>WAO&C+ZTE6%ZV)G1> ++M3VB^W+UG@8JW(RV[NDDME2MG4NV6JJ[UO=6X\OIUH+IV=.<,/=0I574JYACD ++M>FKH83RH7)P8Q6O!T0),1NB.$,#AH&C8CH[N&V]M-55'A)Z]%U4W@+J34[(( ++MW.=BE$T*_O.91\B%-C)D4XCE,YC5R[:\`*B-]&Z+`&0E`K::H:"\+95\E%[` ++ML`#H((JR19#S'O$66EG32<SN).7%6WHFD*+3EL9KLD$BQD]4ET!9>BC8I=*R ++MLJZE9HDR.:![9G"*EUW.=8..5O<APR]['M=)/3T[>[S`3,`=PV]31G-.5FIO ++MFGD1\,HWC>9M[,K)HTY%+@I3,UFG<=':ZI>:Z5(&L6]-5.<.JJL4C>9E-"F( ++MLC='6YZA)TNUJ-5)(,7M49I!/LFFQ2I<C;M<KG7$Z-4\`#3F\VYGIM]FZPC9 ++M<SDSG.:[<Z>U2[3=54@!!PP.@98W1PX=&`:1HC1D`:-!C0*.$`XCN6+I-<<G ++M6GNL/JDF82\,@-3*3.&L-=""JH%)55J"7@E$'HZ*[@.43.'@-[@+RR+S@8RH ++MF*&DD2-`T0]'"^@<2-.'N-]?.`HXW`V.(PK!9,9BZ^SC(8P$W@.G'N-(]=%7 ++MQR^U*+81Z-#Z-G1QY=#FLG+@W;X28N9H$[#`S<!MY:%2)UW1C;)5J9)76#RJ ++MJP2JG)DV1M%]A67765NS.VQH12JEI/-RSMN0R)+L7=5.E=-+!G!C=:9LZ&J5 ++MVLQ8JW+QT)%,;BM7V9G.QTR9G5V=2G3VJGG$K,VUO;*!WN697$:E/!IT;U<) ++M6S4NB176].SUX:JL5TN;I"<>;0L,B^8F8L[L-R<-2`YEG"*+':#9X(9@?!&* ++MF=A#`[0HN'71R$N]5R+YW>"^,MYT48S;64.@G*/75QVYRK*<9A''C=:[:EY& ++M#L>4[X;3WLHTG$DU2?;5L7IVUK>N<5Z#.\,)&Y:ZFB9THZ\Y#)7'CEV-VN8O ++M)&'KFJP-<</!N7N'J'27FCLP6';XF[VAM.<T\:9<SESCK.`=+ECFTR-W%I-T ++M]6LC#6U+W';-FNQ-2\$XLNMN,33/+*Z;ZN-U9RHS5M3LZ+=K"[&\:>P=(TB: ++M/=3GL[9/56Z=NYPV9/.Q=;0&:W-:#73VR+'/C+Z=8XU+*V51>4A(.<MQ*6>N ++MUU35153=WG+<*(5PNVU8SIG+Y.YV3PEZY[A?=M3USLXLP],O`WQZ67SN].*A ++MP?!'5/:%>U>7>3B[LR=R\<UJM6\IWE;4M3T]U[.2.!):6I!\V##6.$GTQ)`) ++M*+J0%\3EPG(*$<4=0(B@HB*(BIN9`TX>+,;"&F>&'B$-.T#U+V"BE*$*"GDG ++MOUWA'=B2@1%Q05>T(E[E'$TDQU(L8SOI)\MQ!WAU<ZF]X<KZT$,3)NJJ](>[ ++MF=NXN%8NVK#?9=:[9<WN+)R"V9&*<M3F(\^N01:JU$S=!#M&Y95AJ[1%&(`. ++MU77/4C96:>G+W&=:&--SLRW@O+R@=QXYWF-<(8R+3D7>-=H3;GI3DU;RX[I) ++MSLR4<Y7?=T]2,]:FF7FJY.MG-K=U;>(KJ4E3Q&I+:F=%38K0B*ZLFQ0R[Z^K ++M)F=U7RE9MK&+')O%9>8;IU.2\6WPQU19/=G9L\]SD=S*W.=]E83O)=V6UU[T ++MEJJT;>D.\F[4SEGLT5.IFR[Z;&&U3S+Y7N;(UZ0+`E5JL/1?=I)"=%36KMR9 ++M#&ZPMY1(0MN^K47LS-([=K`S0DVM..E-C=*JCM3.5=Z^FU75<[:=\6A1[J?/ ++MMLZ=."=[0;>7*R4"WF=HKD@A,YU-5M3CN:[*KJ3.3)4UNMST]DJ5R3WI![:$ ++MDK#O4\>:[M=N7QDXC:D;BLJG>*<MSO2&9G:.Z+3BUJO9&[E&;JJ8IHFM["<H ++M9-RW-15`V=)LW-FL>,]<[N.IK:3G<>!G;6S3M@YFU73,WVK)R:OETF]NZBGH ++M[,Z:L3,OJN=O9Q/.W"3B,NK["^529KG?(<4;*R\R>?4ZK+6N;JCP1Z:MYI#Z ++M0Q=*IPG#9E*5+TZIRN*KMTVA52*%99I,V&*OCL;*9SLE'J70>QWU,3*E2;-+ ++M>I+;Q2IO$-U3;HD.WLJQTW'=.3/.MM+.D]?+8N@SEWM+'V%4>K1U<UK67=T- ++MK2NF:3FVE1!J:M67FD;CV]<\>:1A51Y[3FJ29YO*BZ1KFRJF=LYCU6U-+)GK ++MV1B,&WE'G1=#NS%C85C()W2L;L.=PWV=K%.:[%A&$U5;D@[0O%W;)L9V;/3K ++MP<,OMM]PFN#G<[NHBNQ\,Q@W)?=NU,]RJCO7SQ-<G>)ZY(D3K(R.RZZ\5].T ++M]52[ITQTD3Q!#PRY-&9WLG*W5U)KII4NJB^TRU<7+T\EIR0Z>XM>:&1G&S7, ++MBF,V6K2R>:Z:NNF1N'#*;[N[I!(W+&.JU]F3@ZM>VQ=;NB=1H9>W2G>[D20B ++MUSMO2N-Z^OEE9PUZ*&(]HYUE57#M,32I*>?+-=<3KJ9%VQL]FV*(P8[I7>NJ ++MW<RD=L];GNF]HYN2^;ID<R$G/;TY:6*MHXMR[E7PZP0G,HB7IZLE)/C.<NUF ++M:LFE@O:UAL=AR\<R<;Y]QT6.&F9"W*W#&UNUFMW?;(%SVK0\<3&=HO,GM.VJ ++MIW1<T&33*MCKRJL[6/GV2IR91"XJKP6,+.+)U7:S=UUEEXWE5.7LR&\=C(X\ ++M[Z8F^'.=S4KT\>.+KFYV;F^%"MR>F.Q#ANUG/L[1NY-7)1I4;?+MR^.O9S&N ++M!$G:%M76STG;Q!UAZ5(IGF-EC0#1E5=]H.@97-9D$O#6]CUT+>"Z`FI:W:XO ++M`#)"6IEYM3HXQ`9FU%JK(Z6)5==\,"W().19+(1YK(VC:DD<4.04&6)(H]LN ++M1.[9X4WS?;A2=WAN6*:,;T<!(D8#>W80DW7.;5&>-\IT[.FY&D$$R*B!H)-P ++M0@8C>Q^!8GK%+/S/QS%8/1OCV\]^][9Y2\6VQB)"I#+&M5H<,=!S_2/^!_R? ++M^!_J^X$0/DRAC/0ON(N%Z"B(EL3-OPD>06_U;0%#1:IDIO1:P?0BIH;!D`%7 ++M0"2,4F49.3I-2Z\["SZLD3MDAJ&':P,"U:XO#YWBV3UPGT21^O@`PD->Z:-" ++M!]>0B&AW"HN`"`7\ZB+/?ACR(&3Z#+'::.8NX&>7,N!()%&*2%B$$AIFZKJE ++M%?FEIK(JVE,+`'DNPCC`R<G(,9=#<'7ID!,%4$"[QQ>NUX0"HD-;IBE-7AKQ ++M!/%$:8U,B1F=/(E(B8>&JK3O<%`%4%XO3;?6+6CR-?9LQMKKJQS4NDCL+>DP ++M$IRP6\;6"7!(RP$;9[CY=T1YU5F1*\^;%/K"%$48NQ,DX.NFT4SN?M:5@[3< ++ML&\TMB9YEAS,O/3&QY97O)8(QB$@D.)+E$?.KY^*=_L9S_DUZY&8B?AO]HYW ++MNQK-1MJ0$C9U22$^W9ECI@^6!6E>D%UTL'1)8E;,FK1==RL^#\.+9]L[9;)C ++M['?Q]7/XB'U*JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJOY ++M?U9_)=[!T0G/0<?#$DL3T2CT*#'&1I7MEV;'IY8,3*^!W+GE[=#V7K(V+/OJ ++M&EPFG5?S`(^JK;?C8T5>+*`)T6*AQHMN]%E-ZAM%4CGU2%#5\^OJO"N&VA^` ++MY_M_`5&,W[@C&%\D2S\A?C_4$IB,>\G.O[8H?\(L_D55]]_6',SY^G6BLCUJ ++MXW+^C!`/4$!V?FZ)(*(R1^;&(U*EDY]K[L4Z7VA_+?NA6[FC!]H1?U^OZ^XG ++M=CWP^CB)KV3!VA]S.$($8#3H]1=3A"^I8R#<A>#%7FV=$(6@]'[?VWGXX9)D ++M:MS5MM:"L'@X-..>N,@^/7Z;^@\G)J,1.P>K+0.V*G/4J62]J"P>JCIX9-/G ++MF9G'2:7JSZ7/+U5,E<):C,MZ&7KM0YW+6]=_*P=2L7[YZKR;ZD@L<80D<20* ++M[/5(GD&)#)HJ3D:#J&W[44SD%9GO>55-Q>2(JI&IQC20X"8Y9+1)DSM0M!NM ++M%/H"#4C3BJIZJ+VFCYU##!L53VN>-KSUH%&(7O15@#]B&*7X#I_Z0?FXV,EX ++M,8L?2]_CO@B+R8,488/^)#/L'SUZ#Q_D^%C^[[Z,N-Z?K_EO!B3^,>_/GQ_1 ++M_'8QD7(/X@@A</?@"I!#_4BOSD7[UV+ZP4T$%B!R'57]7]2+-@[^")^ZV7DY ++M/]X7Y/V1I%-"AH'U0MJO?<H'_+4BA*_`^C/S5(,`V+&2'.1(!P**7Q5I,?Y! ++M6[D4/V>N&5_B.&/VE6*-L[AI]6.Q=HR,JJ7GR^14.;YY7%1LO8Q>008/X$V; ++MJD*'9_IN''W^5_P)'L30]^AOU/T:PR?P/]9.U^!_:4,9'U,(5WV_WG^G\ZL: ++MQ2E9^,_+XU>#3FYRF9M*\^-RU]Y6YUM#9WSP94:+Q0[Y88HZ*2$;X$!T1.I4 ++M)@LD;#I@&LU]'A<KC:2)C'XF,CM8[<F;VX4FXJB8-DNEJ+%?`W=HV>K2Y/*F ++M7=!V@OT9(B?,(98C7JZ?*V^G:LZOYE&PWJ]W,<8W]MJ./EQ=,GZUM&/N51FC ++M_@8V@*^(_T']8]0_K5#\PC,+D'GUT_S]F/&9I1:Z6:\H^=AJ&*";"@8[AHII ++MJSRI8I5Q6E&K10*E$!A2HBI'11)20C*U:B8PXL>.#DL@J#B+(=32^E'WZD:$ ++MI9&<5D+L\'2Q6R-JUHH,Q(48$5>:"E=B:@*'PC^AO0=#C2,&,(N(UV-_08\8 ++MKXL[\-C@RH+"'=,T]$[1UYG?K?=-'JD=RK/8M*RUG[$0%/Q34H2++@"2/$"O ++M(!#YH9^A)P$NAHD*ET?&EL^?EEF;3S.V`M@W*R-+]C0^_TO)C!^!7S!Z^(^? ++MMY>/OV]^V_N?H#('.,T*%*ROOE>QP.2799]A:\MB6K'G6-MLRBWP?/;R_DSG ++MU"HYF%>VI3:@^?^*@Y/77LUJ:?H4>F90CN8:F9G^E?7\5;4+WQ)K;()8C%C$ ++MJ)8$D?7\V'$S;G&.=(<?7<=D%ST0F.4GIUK6NDR@@Y1'&/YD?!2H*`L(P'X: ++M(H&%JAP#^KSEV6/;\%SDR-(;Z;:A4OL5./9EK+GN]G&Q)="+EQV\+WX]677V ++MES<Z%B_;//0SQUMJ<S>JQ$9F92V)26X;3B:_7K'Y&#;6K:#_.2'5"X;X_@'V ++M=>?6^AQ[S0I<\6S%+ZU:7,]:#Y.;Y?!SGUQPN9Y[E;S/J!'W8_/QS_7^O!C? ++MW?S??L`L1'XPZOQWT+8D)+Q:H]4)5CHFAGR%")59-#4B=*Z^IOY&L5TELS6G ++MP*K/*].C\Q7]H?T/#^O]`CA&Z?V#=_-L3>?ZA'\Y&&^O^^=8R)$3P:<HC)7C ++MVL,ZJK18%@*7T323!6;%LO=<MH%0.B^&6Y<%!6QF%I-\I/:%K9<5^O]/;[WK ++MW->=J/-I3H;VG3V4%S?V:ER:;>&1>;WG>:U45>[6LS"$HES]!B6G0JJ#`0+I ++MAM;5"KHP5-R7(CG!T,9K430NII7%SV!YO9OC'8NR:#<W-7-XZ]+.))JT.4D2 ++MG)5-2!L$5LX)IH9=,C2)%7<JZ++99%@BBV6GIC&6,/D;Y8T,5F,IELS??I@^ ++M%U>@T,-DFPPN%,HL(F+%CVXRU$]>7):H9E39DD%,F2Y'MO>X>K,V9G;!CQ^# ++M3Q\#OXQ;9AA/(WQQGTO866.E333L&*O3>UJKI,VL,QELY_W7T0^`SI-.%K7: ++M_SFOIC+GZQ4L:H[%J'QV]CL&8E9Y'U*C]Q/Z_<?*^S/A=2A(W?A\<.6@DF1$ ++MCL]7[_V9WPCR3&*?O[<1\0%PXH?00</Z!BIK[&9/VL8E!SDTW,GB2L;SC%W( ++M9@G-_+W!J=>07'00WUHP;VW]O')I?3U=B10\D(>B2E2"P)]_G5"[J)FW>-BO ++M*M_ER.QF3,#7SQWO?*M7!JJ1?=(GB07T3=TO4UW!F9]]"6&[,/#K$CT,YX1/ ++M%9@MJ5:&(XWT9I<L6Y$T>YLA($5(I5,RZNM?5VS#$TO\9K<P'JIHI'3S-MU: ++MJ_ABKE-,%,/%RX9-P5MXC1;U&WIKKUSFQK7K94$P_IPR_?CO]Q7\Q8%-CY^+ ++MO#^+V5.4OA#=_#=SIK[-KUE>GBQX;UOHAHV;_`RB_:L/T:9%[EJ`LA'2`):H ++MD?W_IR"08/X45(\\X<Q\P4Q701\S2^QZ?+SUM]8?FDC<\DZIQS:;AJFB%4+I ++M4PS!H>5I.VM8;66BYIXMO,;YOB:6+7^^[;\=^<)=,2VC\A;%IRBF+:;WA:Z] ++M,?(,S]65S+4TO2<=L%YNCD4!@<K#B9%LC<ZG'ZIQ0FR&^,CA\4=!P"9_+<?N ++M?H)9*P8;YW4_3_*@C.D(7=-B/G.(Z4#$1\,*U$?N"R*4*".V9BR8'=#E)/,E ++M,B.*X>DF"'JY^.T9.W%:F*D[)40RW[6OQ732K[T8%8`I=IE[5+51\%\<ERW7 ++MITVMVXN49&ENO)?##),NB9S<N>"?Q;]\'0.F37'*WOX*U8;6JUOK6N,YHUQ0 ++M5_.;XACZC*UE12[2-CW#"R;50B-S8,`?&I_6IB]#BBC-U_1L$TN"N;KKJXF+ ++M(O1N*VVME<OH49H97R$M$3[?GKCR3DZ\=+1P+`J$E4AP5?*Q5=:,2M!9X+.X ++MKT$4#.C>0Q(#"DSJ_W-F4.'\S@_GI0-I,7_!$3\*_B?7$9_<@_Y(9MDW1WH\ ++M&78T4%(;MC%=:*#>_2OX]]LRBF.XZ9F@JJ(RI/10.JQPV0][IB=P\N1ZZ5]# ++MVC12Q8MSMC=%[M=/`P>&]O3B;Y&O7PKW;4,?A;'B])IM68B<T?6FE!UZ]'ZN ++MW<OF5K/I0Y<>+Y@CE6<X+0O^>,3@/WB%BG!DC_:^Q_U<6JWP[A=2/W^G?XE\ ++MFD*Y-;2O"BA#&OR=O%PIYF8L_H(?FO'6O5F;N5B^8LE_AL14NC)G/=*PRDAL ++MS2%$>DO)70)),/4R7S_OOQ^[KJ<XN-5:FZG?%N!E[5SG\>#,\\H3SB;[_.[E ++MW05(J>(TB<#0UR1I-543#367%6W+9R;\LRPG%>CTS1K!+IL7ALF9,KOL.R;[ ++MXXHS2W?&+8$^O\Q070LOU]2Q!>5/A/"BQIP5@JO7]?Y;_+;\[*UG]!5%1C5( ++MD1253$M414U3$#%2D250U0512I5(505$%4Q52$U4!$14B1%4L15`T%%50415 ++M0%55#5510T554E55#442U0Q%+142U10T4E5$%51$E45253%15#435"T+54,1 ++M5)$50Q-4,15+$HHK0K2@$2M%`%4%%-4E%!54E$2M4A$JU5*4B4%4E4U12,05 ++M30Q!5)$U0#40E4L5%4M$5+-10%5$E!%32U$`4TU$TE#5$2E4D20!6?K'6'EQ ++M2RJ1&*D52R6JV*:2_JSM.S+!UFS#7J1<&97/9JDEAT8UUKTS93\,BKRU9!@> ++MPRELE'):P9HA[E'#9M\/U[YFI;`8Q*1,93W9Z&6OS?'@1S!)$911'YIV26[B ++M+@P46-/#GL?(SU=-$3";6[>*=S'7,IXA0T=RR:5;B5?!:Q9!/?K:6N?ASS,: ++M^A[O>?F>[M5+\N>ATB^7%O$P//M/?@PIY964UJIV?$=W+/J<9XU!A^89RM9M ++MY6W#\)56,/LYP-B:=HKL17L4VFOA;;BR^O:(06-%M$0^5]R$[RIHU*Y1"L:^ ++MK_D"+J\D1:3-P8=@?Z\=DB??X&/1GZN1\_R!TGP)MCW?#Y\>67/OTM8%!$U/ ++M9:WAY5:AHZ7]O3GJSNA@%MZ5KERM4P"I8B'ST223KDE29:\9`V]-Y[UIC<MV ++M8R"HT\0MDDC:I"6ZV?,*]O]%<=+3**U?*+^E1T!5+`Z5;=V5T988:$\!P2WZ ++MC#XH2#H(ZPHR7T6A5H7^>M8%V[ED^+8BM5[E66$JWFFSJ]_J])6NU8K$=>23 ++M<,UB.L5"S<:Y:?E68C9&C77LXA\BO+\4R]_5O);V^>'!;&9\GJK[69A+YX+6 ++M7'V,X7*&L"RL&B'5%6B+'6DV*2E19,DO5GOEF!$&*:D]=RB6%^%RX+Y#=RS& ++MK62L/MQ1Z5^C]N_;0G'55SE9;"I0JY%AT43$@N47"8H:>*H1BFGS+ZZTB4:. ++M]LGNY]`]/'SZ3I?W#X'GUK2]96X/BMK35\6L65J62*1PXB>Z`\9=-BI($MIH ++M#S9BHE\L6CK(Q',2Z$C3O7OZ?@]YHX7L=8^%?PF][.&I-G&#?2'),I864<"B ++M#*X<10CE1^?A<T>CO<FQB.BKJC-'@(Y*N?DBKM)+)8*45IU6Q$U34$Z%VA+1 ++M@93-:TZU(J`B6L0+I5<YT\'7YIVF(H.<LPBA-(S/J,Q&\I8DN18&/.12#WZI ++MTAURRT[%&`F6"K.S._P:K@M5_BZ=>^66V>1Q2YWFMBK"6E@*JI\.QM6#ZLS7 ++M;4]WSSWB_H-(Q*G]LC@=_8$QWG=<,57+6XCPYK*<V1T.E"D*!&@2FD?AZ'LU ++MX?89UBY!40=5LV+F`UJR],"`T:@^TJX35"H^[GC<6"@7@:"7XOP7.@2&<N ++M9%'B:'\>K%C9S?554-Z'Q],L%,]0+:]IIZ/G8SQZK&ITV^\\YF7(+E4!2X,^ ++M:V%M]$52IJ7O>$M5)"A$G5%76;D=$JVI$M.'5GH5XB86Y1L9&^F4NP#Q90PN ++MP_(Z&,;51>TJO,O;2KB^31F)4M3Y)L8/BZ'73V\;W+G410D$E&A3LZ':8)[_ ++MQ-(H<A)4*5$IH6FB@2DIHH:::"@*`JF8B"($*6)*JAI2@JIB9JB(H`5H:$"E ++MH`I`I`I`#U(/VTP45%$%%(1$T24I04C2#2)S.OF?:7F]A7-1#%*JA/+%6@+E ++M*5!9$)83,_3F83:US1%!$U%(T!U$5HCO9=2"2ISVMNT0(-@X3W$R5(ATUL<Y ++M()Q"H9:F)MV59(J\@CL7!(4L/IBBMW:\LVR9J%P)7NTL]\.NQ5G,D%(U![(U ++M09($'D=2G2OQ"EJZRUYR2#)0J(L>URGH)44-21LA%68A/0X-0/9S,S-9%M6) ++M924HRB&F,>.26BI![F%N#R[9(HR"$D5%+J,.,:4P:TLTH313)2?1TC#XNOZ: ++M\$+^6+$W^&_K_*F;V`E#T6$)!'Y'3GKUKY>.9/TK0^^/D_`CT6TW'[LUX^)? ++M@ILUH/7D^R/\LNYY9E_XW8N-421Q(U15J3])`$L`J*V?Y@2*!82!!]9GY-(_ ++M11",B;\.H2"/!*.:VEG+U7R$[Z^%5:[4,VM\6L7HZ=.VE?J9S(5Z:FQKSU,C ++M(Q7';&=5Q@Z][VLW3?I?.W.XFY;4"T*U%#R\SRLS7>9)/6@H_R<'_O/L(?G. ++M8/^YIQMEF4>5MX;&'K8NV#G%0M5%,.PWYUR2IE]II`;THQ@NQ\P3Q7>JM_6R ++M9C/(1IY]\_P%7RSXU,PL5>PGF=-C*)Y^^Q-C>M,#11?;G)E0RR_!D5CJ,T2V ++M1MC3<Q"QEM>NA6!'LFY\)MN]5R*Q'7,]1'5J4<=MM8@9PE/)B1599QB^9GT* ++MY&%!ZQN6JO&V1;PAYH5Z9F1\&NE\_4Z4-ZH89_#:E_-9D=/(^+#(B=7K>5(4 ++M0L.=?0(.<4020NU(42DTTLT<N!GOX7^,9:)D82!WLG]_8Q.3O?C1][GP>_8\ ++M!)@[Z%C;1YL7N4\9AD7\<?4-N/USX,L82>J;G6U<XLF;P]!EY:4(CSY7Y\;8 ++MQXY6I+;=,O/*WEV.%-N7IQU,9]J^)+.9;+3H9.67V,MI<K>O5G]HD_>$W@)\ ++MIC+*M0/I,_NCDGM3#0CY-`F:4"B71K593:YUJ`B)Y`D+-"BE_<*]!@X-^Z,B ++M4?*:`4NLVD,^E5U2X*7IAVHI2!$4NK%<D)E(J\T(V13$F9\RXCHC`E_NEM;N ++M>=]I_&[F9-D.0P9&EPU3@RDZ&H0TAI=*PF,T]5C'1=;'SE%&N/<:'%M+.18< ++MGG`5E"WYN-<&;[*-;3/%RK/C=HN?131<MX^-YG=^[S?,;UCA*+N)3;#8W+W^ ++MIK'CH9T(;V-37AM.A(/:$A8-W-)HASJ]%F/;C`T)R1/W_B\'A7<VVGX?[10H ++M$4_3/S_F%_A_)?%;CX:KZ"JB>=^G7XC%^]=+*_5WFUC&$^"CPQ3^'M/@EKYO ++MP-$C^7SOBF/J;9T8'$?@R1+_/^CX;IH:-<9DZ+&,?/B@\F"ZJQ(F9_O4)TPT ++MJZDR*VI%'CP2%<J-V;OY?CKON/?$A&.;I/8U!<Y28<$&'$@MN*BA^$I+/-0X ++MJE-PED*RQW(ZLLXI8/\C_C,3[6NC/LZW0QL$<3[^H)_E-/`JNAA&%)86G*S7 ++MMDVHT^#9EB9[E)XA[ID*DM;&P56:O%6*Q?2.M6R]Q?36KY-9#'9O]HWMD9'; ++M@1M:\2KT3Z1O'?FKC=N?*:3CVS':[6VA>P9GP:&?KSR$1$NG1@[T5E3V<AZD ++M]M5_!G].N>70,TD)L8Q<U_FI5WQ,'U^OV#Q8,9)X#(=3[?V_EIL=7/[EBC+& ++M2WU+%BY>L]ZOR8.=#W6/4;XRNRP^3W,_68R/7Q=*A(9:I,*KE,G*<2P(4/<. ++MJY(P62$HY*TV`2O6*?7."YXWHQHZY74Q)X2P[U26$V!*%*RL20E@DM2U)Q!: ++MG">I&LI6%R888JQL1F&ZM8)*2*$<4\ONOUWSVT,6?"W6]QE\4;&>+M?P#4.B ++M9/.P8N-`_S]G]V8/]!%=OV%IC[2!*^8-'-_L,&-#S!8R1[ZJ428!3/+"U)'6 ++MV=8<^H2.E*2#PL[IX^J,VZ&FCD4K,,54KC4J8$\[]S![T*ZR/2BXPR/&)&=& ++M5G4X*7AK<R,]*ZUU+X+)Z7M;+T^+K;'@<6S=F8.+VX]5SAR/1#7.:-DHY.M7 ++MW2KIMK1KBNSQMK3^Q[L]=FY^OUYZN^OCE^_@T:_$_F?](_PR_?.`P;^]Y4G^ ++MH-2/[,X9^OR!_9ECHL+]L0_S:/V%4,V%_6MASB^Y0_@:_$3NH:+NE^?IS_H: ++M?7V&7^:0:\ZR4*!/G0F0Q)'\2A(DD_Y'/P?Q[$_#61X:E6#Y@_-!?`.,![UK ++M%DBEQZE\^F0IA6:N*XHH2%Q]#UFR^4H,^.13-=;&*31F,:DI2.!5KU":*PJC ++M[#V2)&<,*C1J/</4KM8+1,LM9W,'M<CUGLM[4QTROG?D3TXZXWV%7)F0-4MG ++MLYGD</EXX'>N09G)%7V@R..A>1-$@2SK%+EL-@,\A55K$P-"`@MBFHPN+C3O ++MGCHHFK4J.2@+)3(D:*1"HU326;+#0%*:4:C&="E%I+F6DO_9:Y5GFTXL=QG4 ++M\JOY=RCQ-AZ&V1?&8M4S7=S?\\<Y=!33,<Q71"V"^4TF\NC\P]/'!Y6H4Q#P ++M,X6N4+SC%FLR6G@X!.,!^?[9OWON&HA0S8M1'QM/3SRPBW,K3KI;HS&GXO"Q ++M=/>+6Q8Z%_(NJ6JYL4/A;,NJT8`;E!1=E[I4!$N6]Y-T10QMT-"K&0Z=];#Y ++M2L]YAFHC<N4YF:TX66J24R`JO,5XP1SVY9)&@X4<A8LO'`DL8T(K.%:)8G%D ++M<13Q2AAS1#GUKI43`I,R;5HQ(S&91J]7OD'Q"6+506E79--34L/K4PE<\2)E ++MK1$*U#1QQCS7F<XJ;-721P216*V-":LQY,L?%6MJ+-,,)U9W+U+]X6RN;WUX ++MK5D^;2VFGCYX^?YKZE99T4[5CU<_/IOE?3WXU7(RAD,/!%$PM*=%\M.M[M9] ++MS:^>=8ODVECP;6]G\!^7X<'+U^4]LE1^!"EV2R)"ZK+!C!J7UQ]Q9APT2Q$S ++M7S)<(YX43"OB2`L^@?)321#$M$0^>W,TL("I&21[`!EHOHBM!ZBI6J+OW$4T ++M!UAS/>3[1XNO#&=&05S36S"7"C@L=#3P;'U#,N:-3RRV#%'AQG8U[[6OT:%8 ++M_9*B?9OLWK%?=H]9WQBR:GPS2_30\<PHS[-9YIEX%>.6EFL9V+(6+VL%1*S* ++M^`98R3@N=_8E\!UFE>9C7`8+8LF#L5+[4'M:$4R]]5BOLIZ[:8-<7)C%H5XZ ++M\'&FN9?&+3!=!.74;Y>'K+2JW+89Q@QMXX+'P@?R-#^HD"[[YD??XR0:-3]A ++MDN0&IT8I4<T#%CH)`MJ4BW:C)32QA69Y]^J5*]=B529TB1WV,C,Z6@E%O*DY ++MG"LE"CASB(8?:?&Z%UM:T=8T-[`NT12W?1Z4D@7Y''&H%5\,M5A%7CTCY)2P ++M."4DGD+^NCYSFR#[.74(OWO-_"71UQA-['B1.)!<_#JT8KT32%4E:;X^W?W6 ++M+:FCO63C36WQ0O1-C/OW,]L[Y]2WX;&23Q&0\)/YK74YZS[C)QBDPC6M)TH0 ++ML%>RW8RO.E4.91:%CNHZ$?F\/"XY>G'=ZL_LGZ!J?+A]!0)!`H"M0_4BX,(Q ++M8L6/IR9?%@]XN^@C68TF2/0]5I=[W8N8%\SYL3[.),!;-JFIF,*:U"J88927 ++M'@88,<P/E?+W)X:/VF1RK2?^,$.G^X+B/G^HC749D1(.MPSZA:%1!^Z910K1 ++MIAYR6;QGR-K/*!=CADRUN]ZO^#V%K8?HE%^I>Q,'"8+>K8;/PZFZ6,M1+C+3 ++MUU1,Y4I`\D*SVP&^-<JQ;>Z-S-EU%D>!BVQHF)&.Y"Q1920DQ^T"/J92EGJ, ++MK?0WS.<7;/.Y>C?C<W,&G$L9Y0TMJYGW^A5@7WYQQ\L?YQ?C"J-FLE9@\*&= ++M_DU_6\)'OPA\^]K(I=CMSUY"*BK7@T"B#$TS[,I%&T9$1/@P7[0K*\A>S5LG ++MI:<9'71&=LNQ8\-R^1Q;RE]#/PT*?K^$ZF2TB*'"C7([(DM.H<?H[-6A.9%( ++M2*#L%9DG1O:5B3QTK$M6EZ3*K#;NN9FEC#QD[>]\=1RNIGFP5>E@#%*`G"D: ++M*=F4CE4@10>N*4P<$X;$E+T0TQ]K.0FB%+W-'T.F7DV9NYH9?W5?JG*4PJX3 ++M/]XD,?XX`^0Z0#$D2)`<@_-PWFC<M%\P;J^CLDCHGL%"3G\V=>YSHIEIT0:W ++MU-G]CUK<(AIRE)^4EZ@Z;9H6MX6MA+STOQ+O)DWY[E9.5+.[+@G:ZZ0=P"OP ++M6)^$.[<S0D?M_MY7AK(,I3_J""-@9T;R'Q2V1\7B;-LST<<?7CL*=J]GW_9> ++M2P4C^M"/(`*0_P.D,Z%5Q(R&QHD/X1.3'ULT&I!TH^(0I02CB:)7)'_3_MK\ ++M&^%N'7$M\AK+7GB&7Z!:=M#VH6JQWR]^MLCGMB9G&>GQ+0*ZQ(_C]./AG[*_ ++M>;^>F>L+E_5_YGI^$#!2D_7Z[DU]GI*>F,W)>NX>L,]_B#2\T>IUIVZI^>UK ++M_,C^A^P3^&$@N!<9VR%'S!0^!CN^C%'AH?]4YTNF#Q%364HK[%"3]R-))_E@ ++M_'Y'S0$)P((_9_*[JU6P<`'"NE2^0O:6X?]L[U)4S(A1]`Q6?UL#_#]IV1@X ++M)&?GVY$_&?XD8$/Y&WO#F4?J#L^*GR]++WQ^>J9M\VG!KAQ-ST_+(UA*^V0O ++MS3"FN0?"!=)'I,M!3@P@\:VCI8Z\#$=%'&P.)7$1<DC*-[=BM65GVTZ2S,-0 ++M[`J89FJ5I":F27"5ZRUW(ZPSA9$"VK#[2,5ECG+!49[WX+T1Q%Q2[F\^":8P ++M[KWWL086U<BB+,;.JDDL!H6Y&=%!Y,]1:Q(1D:1GBGG!Z^V4V3(O($[<X'Y' ++MT$OAY[3>C7U#?X'V'`((7U])7;87W:&D1\\10_S8[B_8!L?X`&1FRXZ:4<A% ++M+5KBUI(I94'N&%-&;`&'4*J[#*T@@HJ;N(HF"E4SX\MP+`I%6KX&`BO4%=>G ++M9K;:Z0ANF=>XSS#X:N>_3%Z]I:P\>\V66/LDX<[,+3X,<C6E'7<N:;CN6K!M ++M:3O;+3HEFV9P44_9^?>W&Q6R)BA2FU6M%5GU:(V8FS(RHM2-:LI8F(AU1P%A ++MQ!5&6*J:-IP]][FM97_#5&07.M%A1RZT<>A4F^E=:VT\,%\KX2/H5URJ:>A0 ++MB&AHT:_J?'W^-1$I^5\?'I\QT].S;.\,CA)<29UEG]C4/`UN>-&T\-\6R]6N ++M6FK4SFT=JN;,\"^`LQ\JE#QK)I:"8:$Q+,Z9;[Y^E^UH'W]@/0RJ2[9VM14Z ++M^V%QXD=YJ\8#$J,58R@6Y>O%YS5D*MJ1\Q+!K3J=(3DP/*;L3B<F2:J_#'16 ++M!K!"2%QP\@2;>P5"B!'2V"S6'D%I1ST<5B)SGUA]-]I="^,J+*E=\9@/T4U2 ++M*3")9:L4(JTPL<,JF&2343SA)4KV:DD5PL4Q#.=(14I-.T]6<B?*YB.*V7V! ++M4(BBM=+C(P+CP$NL]\2EY6I6H,*P3&JV^_L6N_(4Z>8F[<==0*,%O*WCBUBQ ++M15<>_&I[C+V!KS?::#L5#41RVU#+(J[9,5T,K2=-O':^1HZ2WUSGCV3&=Z,C ++M8YMGR8S!,G"8-[&*3?"F7:]K]MS_:7.(XQ9KOMJ96VOR98+.Y\U:\4+S8I3S ++MYQK><MZ*]"_P+;(9Q50E="I-DT'H.%3\Q#V$A"=O2O8G!/DTUHM<\-32-:6F ++MM*-29,,ATU[9GR[5$Y\<_+FW?/8T#&VE[SK:_.MRVO4^7/<ZES;*KSJX-3BA ++M5"J)7:Q:TZ<5N)SZ\EX[FI;-K0QTMTQL<#ARSQ?)S-3/N]W+!D6YGM/=5:Z9 ++M7.&W2O;[<CP[$#WY\IW.NPV;]DQ$Z%['B:?4?H:E4OCC70T:Z,\&S+WZ0MPB ++M8JC\:9MWJV<^2C'8N8L8V')^,F>[O/5G;=VQMLU1E8_,MRF`S]+>RQ?S[4;9 ++M<<=K&EMC/HZF4K5X+&>FM-*UT'3CY_'X=^?P?'H6L[=^F89"@G;*CEOC-JV7 ++MA<MC$Z^7<W,M18;[FEI+L_.K2P5\)Q:9<?6XS-/AK=T&3Z,_]]:X([[RRG2, ++MDX^,QBA%&1G,N<Z=\7GGE5XFM);!1DJ%GHEBC8?;<*'MB$1%?E;,U$9C&K5` ++M-4*XKB*)/K[K(ZP<:L2.*MS!KD6;%88:XN-*23$KG);&<]R@CKS$>-/0X>A) ++M$^]&:2JNXM[#:^/6/US/W;?=['OYY.6$-$.$)6EPIP[9*15:'A9,MA)'P:B< ++MP3`1P6UJJJUV&<HBB[AD:Y9)1JI&/KHTK-4D@$3*,^J;-)(/1*PY6CGEH6Q% ++M0-&!HE"54&U&N)TB%1;\6B?*&*A-6I'6(-#4[/*:/>#R$&[E$^GY-KJ?F^WD ++MU#U\E-'T&T/&7UZ-1GYR7@I+#K5K&764>SYI/Q&.\^MXXMG4%JII:`EN"HQ! ++M;%21P9)-6BBG6M'$N1H)7QS212I36J8P5_36M'^T@&/B'YS0I$_K^H_H^&'\ ++MZ1*AU,8]JR/\8K)'P<M,W.WU?,&N4&1^8`P@?WF3P(X"9L->E3+4MK8K3Z\" ++MT+^ZKJ,(X=@K%`B+\"JK?;'\KY?L\;<FG:URT^)V[7Q^K@J79Z]9:K9LMS5Y ++MTF>&%QL,!!]]^2V/;X>XT+'2L'OSHUKF(:<HR>Q)03=[)Y^P^GR.*=:.O!UK ++MAI7MT-'-/9J99F9[*RX?D,LW!?096L3BPX*MOQ7YD18Y0B&3.!CA27^P'E^_ ++MG$]H\*%C[^;-B:B$+CV2UY0:,A@8$H813@I+6\ALV+]N?M@O^__&*%TG=A_0 ++M)()-?99_@_#TPZ0D3:)1:^D(W]?=8J6R9*^G,'_<SVX#^V%Q^)EQXWMA,[49 ++M&*MG4,[ZY],'W5\*W$OS[.#;R,A-J-Z-/S"YUFWC;5#KN58L7VY,>./4G4WF ++MB6R3/J$Z@B=_(OW]?YBA0P7@_Q_B:L?)>>!"?[V_Q@T1(6<;5+]!-=KF=%9) ++MV[?5>7*TK2O`Q<VVJS[2[1;(U)6'BJ4OMRVH$MPU@H-++3$*\9;;"DB4SBP: ++M>57QLUJU%?QAB%ZX8N8#M/H2NT3+(9!6<PN`.2FMB^%8,")[O!#/>^?C76Y7 ++MILNV5:>JU>HR1SI,NU3283XGQ2#X0@Z-G-?"-/5#/5)F26"F*2UXYRP*^6>S ++MBPVQB(]1-GL.,3+9%,GL.3/D^DSOYQ=>J)]AI(!,5D1Q&7U\R#A9&&5IHAY4 ++M>,.%3%+>DO]3$7$&MCMIUL'4?'#<JF8L^SP/#<[MN_KXOC'0K8Y%@Y.6GRWM ++ME_YIG:^7)8>F^6BCZ&6A[+\>R]M]"@*N_O?TO?QM$[Q("!_J0VC^RAB?]EQ1 ++MN[C1*'!M<WL:=LO"U]Q.N?OMGA*WKBQ\#(59SJNDKITXOF:F7P"6',JA<^$J ++MTRISZU-88,`^TL9GKVH?(021JPKQ[LZ@(A22*V.,Z"5*D<35)V<M2,:HJ$A> ++M/S]KL6?S@\%F>N"1F?![S(/\(9[PYS%M5D,R[%RC;/?0SRH3HRPS%7HX2F7[ ++MV-#H=)B:+1TM.69WU]1^/\GJSS%U9QG6YB];<VP8?"Q47M?-PS7E[Y]L)F)6 ++M67'ASWVK6M/`UQ?RS.-]#4.([AX-K\]]5.?[7V.@E_7X/Q1]U^J_%?*T_;=] ++MD_:F/A0F4J%`QH?XB2WP_"BMY7D_ZWIJ1WT?WG[&?%J^,?=`P>8S(D>W[%BB ++M/S/X,H3!!EZ=/@8_L](F?P0/&.WZSWW8P?6A,$K$&<$PCW5=Q\]31RE8TCXE ++M8]^'\^RA]6E!78U'C=!A@K]G(O^/"<WZ^OR?P*^C3#[X!?WPX*?H?)L.#[\L ++MKX"UI*8>"LQ;*/PW0'Z'O??UGUUF(E(D?1@50HW^X]]_!M=/7WQL"10^Q]]^ ++M;8]^&/P>]/@Y^A]3?QO1E"R'EBN9^G#`T#MR01\VP9NQHL>?!TNP(BX85P*( ++MD3]9PGQCV<+86Q\O?@\<9&#H[VG0URMU><Z5:XX<-LBL<XO:R[:]-J`?TO"@ ++MAS&L(<PX?X:\KKWPQ\JM&]G"1Q"T4.KI&`S,@DP]F-@'\W;XC&_=ZP>0%GTH ++M-_1"]00H@OWGJ=1VNPJ@?B;,!3=>Y_[2$@_.A?CX!\GQ/:?N_ES5U';;%P1_ ++M980P[L0%X&!C"@<?+6&_Q$U^/H'X-8[XOU&#%ES0\]X3D[/XCA]C`.I4$<^Q ++M7A7OM[0(6AJ.^B@NWA^B,COQ_"]^.]\!^AS^OPN"0_+J;'W^1(9K`K_EEW:% ++MPPR21/L?TN_/S,([@V/QHKY\J+`0D>'V/P/MS:+^8$<T\/JPKR([-^L#\K!# ++M67[>6^O37G4.Y;&U<';MR6U\N"_>A*H1'@M7:_&CD(VZ3'?,RR,YMDYIC(9, ++MDX:6,R+T:;7PKUUMAW-,IK-,]3PZ=;G.V5/GSQ;KT+Y)W+&&/=L2'(?W*672 ++M'YC"-(6V18DJ#]'$%1I%?`8%BD-I1"OWV!5#\G=OZ^R/GW5"QA'VP]D3DY5? ++M;^VZ>1/2"%"(3*]/O"C+NYNC]34V&=0G^^V#\I?-V)!CX.8FZ&$?@\V_O^[5 ++M'+VILOV_>U<),P4PX[\7(7S.[J'5*[?5^W>/(PBJUY7M4(XRJK+=($*)B%R5 ++MQ2CRA\TKQZP($37)/ZTV-E_=_0[OP,%'[G8((_`DB9#"^#'%R1(IR*I=A4*M ++MH<@5A8J:L=61T4C#YB-B$8\@B1OJ_G\7=L#U70P6AYK:51Z[#$G!1#+_L'T/ ++MDH(17OG:/E9\#'R?KXE[@?DY)!)08(/SU^E?F:+:EO#0IUY=*L:\N"O5X]\N ++M$9CIG:^[.S+ES(6RR/2[$ZA96<SI(H,A2MB8@U>J^2PA6DKVY9R>#FDI?710 ++MCR9J)):H6EH616O&ECG"$HR+2]RV:##I(XB%6T]"'#W4)H.18R78_L_"E;TB ++M0"FF2?D_[P,GTG-C1P[P]"W.-=<^IICR\:HL:&O:*31GZ^YMQ<&=%)GH7UBP ++MY`J!2S1E+*UYX][W.OF'JZ(:=9GUZ;S,;FMX,&I?JF!1,6O<>+6QM13D_&AH ++MX.DP&10E6&@I0D&05!K^A'OXWAN?04DW+\)=_%7`V0^NU@YQ+Z<5:Y1T[:%L ++M>#G:IE1KEK_(R,=D^^-IE2>+F6Z6H1Z7X,\6S+WF7<SMC.K!O]KJ*H('F`KS ++MI(+$803@!(G[Q?I1.3*N98VKU]*R=(<M%G-'U52SP2<XJYT>;2UJ%+HU170L ++M6<'2^.-\>K3!HX`3*^FOCVN:,XW47P^HFQ7/`[K6W\J0'P_Y^9FS7QT:K/B0 ++M/\3\-S^WTX\9!Y9&+]O.R9E?3F*""PAQ]*&:,M?XK4X&HJ9VIT[;7/I-==#) ++MZ<8K>773$0QX,ERQ?B5*-;X+7Q;G%Q3'#1AETK(JXS7XY4.'*-DSET5TW.B= ++MTGO`9"#@G.6C9^2FS6DA20\RG2>^]=Z_0(8>B'S3\M^G/4'=$H^#/2?">@J9 ++M)-8\SM54?M?I>]+VOZ6\M(>/J]/9QXY5D=J/EH-L&Z*L,@JD%C%9\Z6:0M"_ ++M8GO8HAISS?V2:T=4BX-I2B(+)D@KMBI<Q]FF_'&?8=8'E-SKK67GVM\J:'#1 ++MG"JC9C9-](DA.6!6,ZX5,I5JM"NL)(7+$9:^"QEM[64>EO>FQJ9RLX5IH;V] ++MGVC4V]G?:9]9[2T[<6K&AQD%^U'6K6#;\)QO'N8MES5^-LR;$TI+]\UF:.`D ++MAUT%-)H?<:^,J?,GE.GG2#$LE=\)Y82N'O89T"HH^AB6-I-,JP'**LF%T+S' ++MQY>YQJ<[)IXWZ\'A1M1UUIUEL\CL</AQFV330TRL5IJ_S8O)M`U.?X"AE$3^ ++M;KK%(O9"QH5\N1ABOJ+E?F'4PAE.E8;7]I;'7>V5VP9-2YT`Q4VUR-%:>6U4 ++M0IED-$*!NF5_"]]>GCGXFGI1M;IJ'.G.2[UTT--,:6;E)][%[:-CSS*U[3I- ++MSDMIJ4F8[:&=Y?*5/$0RV!8=7'?DP'75T;B#']W\T&*H9<Q^)"<&[&3,4/P/ ++M:<)K;E+2+*H_J/J8\03^0/I9XJK'P.);[O\38X5PF\#\CMF?A-R9&AWK6AFL ++M[F+XVM1_N_#PMJ6M8JS3ATMBU"6'2C4^QC<<LI^IG/KD[<8]LWU.3E+92P;E ++M6(IJ5QS2$EV]"DG;-6*VTYGVJ:/`G=.5BO&/14*JD]2^TT*$+LOXM[R[^AP^ ++MXGPYO-^=3G3OWYTD7MF4MG8MR6#S^]B%^N+&V=K==2BRLP.N]R^LF5P^5$3, ++M)@@%AB4\-?R*C$/WT9DW_,BOTA\8O,@20)FG]A-PJ5BP/C9#_J@+WZ<7(0SL ++M7O?I>6WV,`^]O9S+5*9G3<[F)RZF5BO'C&,3!:GLSQ+2IZRCXK3FQFG`NM%U ++M;4];VC]85B.)]IH#X"K1I7DF?BG)"JI%-*T(EF'X.$5":_EG128>KUC+TQ(_ ++M!E(HPT1OR3`2?'DO42%9&ICBRZL[B_:HXZ''N9J]I\]&S3]OH0UW85WEJWWM ++M/KW?#WK8IGC<G8COKQ$[`,.@+A-)884:.DE@^.#LX2-SK++:9"(4M(6XQ\<' ++MDI3'8@U7)&*%*Q:D*76YIJLE)/+B1[=,YX9R'7<RB:>^V?<<]TR)F=]G:Q7R ++M^/3/8L:ZWOX7*YH<CXZ,[.-^7,Z;>KPSAER%RQ3DSC7%N@_M^R28&Q^O*?Y9 ++M/ZUNR"#.#]I_N%7]S#2^OX%5XX+!QTB/U^OOX/K/K(8\48$L*_M3W@_R)4'X ++M/B\G;?8;6*SG)QIB8M;,N9X]Q1:Q6Q;+=+Q.>QS1UMB6,&O"UGB3(]*EGJ]R ++MN#PL:37;?+/H3+64JZ2Y<L5IJ)(ZE17%LKRSX<4\R,1S79H5"Q,XKK'*T<PJ ++MI\9\6X^TZ.>'GQN_*<O?J.IZW#3WR&@N+4\:QX-.8FI^C'+VZ[EC:T-[V/D+ ++MB/R%>[I8_2$P<_`?(63HG^AT]^#W%NQ_+\SN_%G:IHY7>A^MXTL8JHF?7MUT ++M-WZ]_@\M,>./A$5HHL6^BY:>.'WVOIG5BW8'D;[X(I7*94$<X9(HA07)A(0P ++MU)83QSDS11$U3",.LN@TZY6KOK_4:FHY[BKA1S%1UV&6#*E9*IR2XT[$0]K" ++MI&$D':990@]P&T!!:^P%;-_N2'+*"#FY=E9R&`8EFBT5C&*Q()%R&Q-.RL:+ ++M.72'?\Z45JC#:096,RNS]D[_:^G&?X:VS+_9=_LR].UQ<RU-<6OC%OM%\JFZ ++M.UH6_\E!?"OQM^JG;V^N*NIQ?\;VW^_A8GD_`(CZ2GX+^A*!Y!_;7W="=]Y2 ++M"49GJ0VL(N6S^EAFOQ:_!D7\R+^OJ=_WQ%6#]<.0FNH_:G"OFY(J4=3_7Y76 ++MD29(+^MHKY_H^/E]>_ZY^R^'[)^RHB:>5A6:6B%=)B+14KJ8A))R*EHZV9`D ++M@]R4#1OM/EJ/B45T1IZLA"(A2SI%F5KD"$\XZ,6VQ8N1S3"QNZDYD>"%E2B# ++M7L'5K%]W<JOO)XJZO?_U>.CSL^L9D%C6+?&5\#/]PG==Y]#MRA-7S!5K:E.( ++MZH\HTB7;RSE"URW;7HY/+@H*>M8Z]?@^9?J?,=A$#*@8O7RN.,JC.9!L55`\ ++MY^;=R=JD2F@]UHN:36KJXN<59F:$(/CDD='75A8[G;*ZBL`@6^ZW/=*YG0E@ ++M:AG.11+/;I2#,I1""M]IU"?&/G;9^Q*FJ%S(*JF6;;=3^Z139'Q8CATQT"') ++M^G?FG&C&;FWU0(=)D1O%K5E%NCZ;E6L5K(2RJS,TR=^>_:<Z966"6-`[E(I) ++M!GRS*JV2`\O7O=KA\4MPA$`"/\D)#QRG^@=G;Y'90/>XP$`&D3MX.9F/3J\= ++M>KK(!;9%55555556JJJJJJKXEGY]E55GPXGTH/I7OS]B>A^)[IXB/5.05.XQ ++M9/7#_?]#Z7X>PT'\K6I]?-]_0]#G_M7OV8'MN8^8*:SXSG+XDOW810BA%'(^ ++M%67`;H2$.H1F>B06WKUV^1N#.BXQEZK7J+-$1(G"W?/\"95AQ0`F()93JN^- ++MZW2:7@4]1#A"B.'<5XLAV(I2LZS23RS'[DXKDC/^%&=,3JPYD=@7$Y(%1.U! ++M55014COB;V?I:0__T3Y/D1HDV20]QWE`?$^P^'317)C5SG,YTRIGC_I057?< ++M'[D\F`GR!/&$X(FI$A1\2L7'>8*+7\EMW_O%CC]CCLN/T_U,1M#(86&HMC#D ++MHH65T'V#`*Q9LKR%2@Q*)ELM"\I9^2R&O-2@R;%=F:S$.+'H(Y4A[*QE^'Y[ ++MV6JU7<3?/]KS78\Y^7Q_@UD@=4OKOZMWWU\9\(/A%)N.=BF^.-L%[`M&.BAM ++M13'/\K]-^,"OXGXORQ_:B'WHPK_D'@(?]N%?X,#GX=K#^F_11T70D5_>V%5M ++MA5D(C:4J-M+T$(^.`#8%)`_ER`_:&Q[WY7MZW.,/V:$R(H"A^<^)5JJ+7,4] ++MA^L\U%!8F5I_W"CSVS/@JK7M]1!UIGWF*E2MJ5KOA25<?'X/<6V6W#`E0A!6 ++MVUNY=FB6[4J"U;%A<;KYN'5NU:JV>QL41B9PJ&'(-RF^W'>)%Q\2"1J(D2E* ++M\_YCKZV3ZKWD.O_GZ.8$$0$K+JUZYEYSE-JGL4[=6V?./<]\(NI_6HL44QZ% ++MG*KBCJ^X-BYXI>-PBHJ^8/10Z.TT:LW;_/1,.Y^)/UG,\Z2:(W@:0?^`KRIR ++MQC2]PS"^N,C%Q55<(B0YCNC+\L@FA2.11:C#,K,F#*F`1["ZQ:A)*M7`-O!I ++M5=>O%PO8OH%K52J0?!;H4U:UD'63":D<XPFO%JTJ1NG:XH:T5#4F\D]=YU0^ ++M<AD1@DJA[#]>%WL$@?IZCC/=>3^CKON?[JXGBY6ZY7TT$Y[Y#GO<^*.-;$6P ++MY%3S.=Z5\47TF/!*'S/0$SQM$`0VKD3"^F5`3H;G7=GU_(G?'2=%+*T#TS*/ ++M554%%!S"GHEC(\VQ6U#+8$$$H5!`$6?!P&J%%17#8&"L9L1!!'ZXB_;\$]=$ ++MB%=43U?^%%\*4>""(8O$59*%EE47K1-L5CKU%M"*'\#][R2K*S,S3`9X^"<G ++M"):T459I^:6BS_[14TWE6]5O9-,42UXK";1(JU)6;ZI8E)18V%M8&A^:/1+R ++MQB@FZ6H(S!H_L>^Y+[/O=#V/3'L3BOZ_R7NE4>K0'*HSG/?%&\=%%4ASVG1Q ++MQFL18HXQFY#SH+Y60039^1U[NB3SZBX;/?534D!8AS,$#K!515^/\:,"O*O* ++MCI05-K.YO<G*DGT3FPXY,_O@N1&1XI(T6%AH]ND_[[4L&7PF68MSV>`406!6 ++MOAVF(&#Q1K$&/-J$DJR#,U'QCBJ#7O[[C(QWF:Y4"R_)MX3LY::5;B"]?%C` ++M6RUJVLAWPGO!S[<(I%GT*T_M(GO6Y(D>HK1H9*FJ5!?,8P>?]$>`1()@B1YF ++MA?D5!HO*>F':VI_+DGH@B"><UG<^>\E\GI!SMNGZ@5!F8E91>9T+E9SM'%[7 ++MHSW*^I9%>K/55)3;R=X?6PE:"!]M^2;D^9F]!MB]XGDSE2,;IBMF*5%G_A9< ++M@?1_T-^4L@0WDY@#<2N99\AK45@5SOG,B!HI2F^J-W`/L#NQ%+('+"!H`JO/ ++MH6FQ)2B@'E"D,$P66WH*(HS`9$!5/JV\W-W'*^6C`]NH;!37">X\GR<('WNV ++M8PN[;^`?S#,\A_Y4G5J8[O.I#@^>U8C#'E39("A)[TY_4RY,"A(T5SW^S-C4 ++MC*E/-:^(_PY+5JU7E9:X@$`_J,"4AL_VW^:4$L@%_J<-%--%--`'_&.<I$,$ ++M4U^JA<2/E0>*-$?:_F:-*@TB$0"?ZT"&7LR@4(G&L%`*6(@@_\^V")S8^I`. ++M2B0<R?V-D5.0&@`_T9"NIU()DJU[DZE3]:?X6*[^+'>1-29*.0#J`#V_/Z_[ ++MP)383B!/X$BA\<PHM")0A\2A_G9%/(0![+2+2K^SD%-I74()2/L_.Q!U"-`] ++M@4`_;F04^(=`*T2$S!$TK$`M(4E4I0$RM")2J5,H!],?M@A#$]JV20'>%$<5 ++M*E(B%50(E`*@4*E`H4@H%``T*A$*1(HE`@-"(^N`,D5"J4")17^TV52J$2"B ++M10>R":5!F`$DE47N"4`R4!B0&@IHI`F2E%6)C8U04"T"O^!()J@0B&A$4[`! ++MB5:$2D5H$B*"F)%1]R"+I4\V!4I*!1=L``%4JA2)0'NRJ?U(5=32HG$N2L0$ ++MLD$LL55Z?J8:&"04H">5@C2(M"`A0U2E*!2`/X;*)K,5#B7[W^)^-I[9)S@- ++M(J3#14RB-`A$(M%(E(K2HE`+04*%%(@T`@T`@!544`4@#0#0M(@T_S[(05*5 ++M!*#KZACO@V1V14H:!52H@JBE07E"+U'TX^<:%R2O/K1\^?XOG"DV/ZE538/C ++M8?>9_/_'_JGR7"?L_/1#1A*18B@*K"E<3K)'$2+_S:<]YGT/JN''_][Y/U+9 ++M.46D87I#6!ME'^SLM)]FANCY0-<T_D2F73^>A]Q\G<U9AMMEP7-.WDE]K046 ++M3;Q:72;2SMMIM<H+(`D]*\Z%G86G,*6>3&N[EQ":":F-UV!!_W_>O"=5=!PM ++M?![_9HQ+T-S98,F!@)?I@0P8XY,#`XDV3`F&<7#K_@JO:;9!$*E.)U6-C'`C ++M6(8RD\FB[E$$/<83I&9Z()FF(R(CE`3/PT'V'B":*,[I?.100$1E1!'*"(-M ++M*"A@^[IHD1!T94'"(%+JC@"7JV$""H(.XW3YKT0)'13ODIU0Y$03[UB4<")J ++MHM2Y$)U"TH(FI42W)4Z%X2J@3TVG/K-6>PE51!,,N7'(B7CN_XH#7M88H^*$ ++M,O4=YVFD0MGS:!3.#/HR.TGFCQ1\_G]9H#^/*_$/#$>PNZ4#CU>O082A('I_ ++M+O8!$A/8:=JMX,/$R[UK8_<?=E/T6'UM*`P*PLP)ZM*F$@?)]_ZO_(OK[/2U ++MF3S80I40*C#):4!+K+>8Q+<$1"*;&<"%A3P!0#U%\^T!S.M@]6/?:&)"]&R> ++MUM&$.N:#5#%`]36=0DMLM$/Z;=DD]C3\20/@U^.Q#KTX;$#"$ZZWE@AC[G]6 ++MT`Z:5];SSL$E]:D-Z*(%-#O2Z&`!>>TZ@B34,B(545`"%9A$;;W)7MKV1LC8 ++M"CRX9!?K&.6+3&PRX.65\0@DZFS4"P6*R.$1+SQBAZH]S6*NVV!ZI7IOM:4# ++MWY0Q@`N.W^M00M-\[0`SWQ:0/GK6U?7M:$,M/Z>O.)A":,DFVB_3\EY`L=2B ++M2)JE?@Y?AHL$,.49(/SU`-QKW5[KRCY?L7_(7\W\*?!GE4^)55`T;`'6'7AD ++M)YI5\7?Y]('ICPA3;?$='@4$A>_U[0AMH^JO9>!M@V+0)C4W?BN!Z7I5Y<CG ++M:$+EB-V8"_)E?BSW^'/H;"/5*.U#"$Y-@,ZHB7]U`G%>#QBX71%'@@45Y7() ++MZBO+RN`%L95564AX7ZV`#X`IH(6&!,V2%_Q5/)(&/OT$I(3*M;$-[?9QK;$` ++M^E@>>`/1(O;[V"\$@]6>+WM@>K;!3MY[Z4/@\_T^O3!^$\JIV/JTS]KM]5][ ++M7Q?W3.]9VM8[,Y-P@H-[>)2!GB+WWQYA[,;KM4E*NQ>J`>,L`_R($-2AO`.\ ++MK2IY95],.H1+6"V$HARL42.$2H7^"Y`)X2Z=*4AEBV45$2I;HQGCVP)K>P6Z ++MS%7H9[5V[#O`ZE?C9@*<_N5"6$DMBB2K40&U$@;&M39#'>@^>>W+0O$!G*-6 ++MA>(5.R1]?^)#OXL-DB^Z[,%>M\WOZ%.J3X)#B`>ST`&*NI/"$[X^3WX(>YA@ ++M';TQ`\</3W,7Y49"^S]+/E/T'!.:B)75`#'5!$UZF"J%^R7^+F9V<\?';4+* ++MB$N"R8:AG1RN2LH)A*C[/I;'$:"O-4T%,UE\]"8ZHDN.P68F1`Q8-24GICK/ ++MVYCY/<S@?:WWV4^LD]?=@IZ9]TD@2L(N&R!X2@Y;F'5^?DU'!M7@PA;9!+I@ ++M*IA/?!_R_]HLP?\JW$,-_[J&VJU,$6T3ALH_Y:FO97Y-:5?S).UME5ME;1J[ ++MO<>BMN\M[FX\VUDY<[NK'4[.V!65*G2-&QL;NU&[KW=W9%4%:="["K15[N7- ++M6Q<RSN+:H2JHK+J<J8/D@ZM16PK["@CSJ<IHE,&"!=D83*5`,F5LJ)DB%,@0 ++MLGN/S/K#J7.0K2W[231`^9*Z5.K^!+L-$),D5AZDS&?,*_P]<F=GTUS0T($I ++MK3$QY\@D`JH<0MLQ;S!)DL5(@LU,1QM\=M`N$HFA4VJ:/$Q"2%=1'^*\/0K[ ++MD@A-J9(>QIK]$+8BRIBUGR2&"19Z-MX,)77[V2,5EKK18I<M-1VB:+[2"%C# ++MU"IIF&)%C&V:S*V><[85*KDN;!60W,41:%44547!ABD\T11"YH+NU>M>V[:J ++MXT3>AX31"I9%+2+Y3\W3Y87&&=1VKFL<E\=O86M3[2K+)S_C_XQ;@@SR9)BJ ++MKGZM855O.#>&(Q@BHC(NC9&3"6)0T`I)C:._#QP$/C[3M:GYM6]]SX,I",(^ ++MH/]9/W[7&`/]ZDSB7`7!7*[.U$85T912N*@4*ES$$,_B[J_6U$MI616JS;31 ++M$8>/(K/\HA/7>7O\MSV;93LD^^PE$B3=4GZ_ZE;?'E[/5CW7H^M]R_36LK=< ++MY/P1GTI;^5BE1'("&U5!#/K-*V4Y@C5!503"PS4CD$TT6ELV\&*C*CM5-1ZQ ++MQ'QT3"(5[3""HZE2_Q\M8A$QP6\HR@:/;2.Q)V_^1`73K45$&5#9<0PFUUFE ++MVUQ);KJ'X%2_G-\J650#C5""HB%]<:WB3.0P%1,^J/403!N[K,WNQS(YU$21 ++M4+X]?Y3T#I[*L_RQ0[:_R_;4GK3A)]$2=(PZ_HMFQ/!@L)^P_N^-C7S^SA]M ++M:9_ESM]:WX-2YKE?-MBK9Y[5FMB8A2V)1@X[H((7BTR8A71D1%##:$II]=A8 ++M:IJFGO\C25^SY,*=Y/S)`PE1Y;^&O+#[<@GO2`^25/CQ0IR\^&>?/R?G8^S[ ++M?M>Y>YMNAW2?<P`X0AC3K?LNC;)EEF',M"NNF3CU4CI#C:2>>>=RR2J5(3.B ++MG_I@8P;OW36!B^"X?<+_+_C_'5`Q?@^^=]?*J6']3]]U=7=(Z0N*Z50Z^J^K ++MJ?=R_K_OU(D>9?R?D\T4<4TD<E!F*B)I%$JW%3`5;+WX3[KTR[Y^%F1Q`;E1 ++M$7Y4(=1*AMU?+VV/L(5#WP^P^OPT-(<I4[3P3RX?(ZL;=$#Y,('.^OCX>'NM ++MN-U\(0#ZXA#S0'PF_+47IZ_5XG-\^&PX8\>*H?%A/5XS?MV$'0/LPGS85U!! ++M)!5*;ZS6&CVN-MY:$#5]Z<("R!8ZWSP8TM02=HD+_50!FD,9;YW]G>BS]]_D ++M&GM?LWD#"0Y0`ZN.OPYZWSR7AI3L95W\'?2<2GP2_:R[G77V&I+(:]-=GCW^ ++ME_+20-_(*(&G@T94][W@'VF!"PJL(/5$LD=*0H9T<62H(:/5X$)ZMI<:1!#1 ++M3QP5X![A(^CW/<-+0\2G'+6D7AZI"FBB2F,6'Y]!D>&9DWY\<C3'I1`-NF96 ++M5R'YN=KX[*C\,`]QMC2H?!V]W-V`>V`^[@0R@3@U/P6-D)<204/!)U]ILV]; ++MXMV$\TA(:D]&40$9(;3MX^WPQ`D.FGPU]NY('W_BXV[^KMF0)J,AU.[VSN2' ++M3.H!FA%"'AO7T_P+0&W-_L8IL+JJ8;9269)Y9<V,^7Y/9>>A05"0Y_=H(<YU ++M=@!V9)\EA.]5ZKP#-]?OH"/?[6(OB[.6D'Q2@>PFQY+0`>6%;,0#4X6FQ="K ++MG/Q]3C2IGYD`#+EP6QE>(B(5([+F4LJU>SAO0!\YW7ETH\KXO3Y-[6S[DB\Y ++M1._X;?KC<C="%'7<UN2`8.+U[_%Q(!<[YGC:\))^N@30^`Z]`)Y>#1S/TOU_ ++M"+W32CWP+\KGSCNVS#.C)`Y^[4(%\8?.]($*2!;V5FD4`P//R[=_+<0/QK?Z ++M>*O,OKII7ZV`/?D\\H?!P<6D@?7K%WIB0+][6PDNP`3VI]'XOL6I#"Q#W+D0 ++MJ;^![&<>O<4Z\^9['IZLX$^5"AK;`'Y8_M:X?"K@?`DDFC"2WPY9-_+X_B_' ++MS,2$#7-_2O<(3P\/G^O<@<:4C)`[8STZ&-Y[K7ER89^PR'%X<?(UU\NEFD0] ++M9(/TO3]QU\&XO=(^UKF:1##&8`@H"6GPTCT0%V*F4LQ''JXP1#220AGX.4$# ++MX#V\1-[X^8`/B^+K2#<^-!O)\,*?2D2:!'79Y=R6`#+(FP8H^#7N1NV&*RJH ++MHJJJJJPJX>D==K]='K.`SGJUID<KL;1[70FF&V\=J3:1XT!]:3*6:K"*^V#I ++M-%R>3'"SJE*^>KY%VS',Z27`9&J+R^UK1[._;9W^+*];0JERHY]5LEJV#)"9 ++M[L;27-BJD:&&O*R4BL%W,((B"&7BD[2/0@BI;,1QM!YHU;/;R2-2[5C%DL.M ++M7*DE>7"N3BRJ*%J%[*ESTE%-V(B3(6E]2#WY4\T;9E,9&QR-9`2+%J)EZ2B^ ++MM-1*LM=GK*N/J\*Y6FFQHWOD:Q0^I:PL*J2Q`!@*+B6:MJFJ6I;DQ8IH,8]6 ++M+[%2K45+<1.NN>&-5RM`[*@4RLQ%(5D!,<Z717D-(YH("HE#*(HC:<T"UK.> ++M@Y[W)S`N`BOWJF!,\Y/Y-1U,PPEQ+Z^R9[Z*_RVKW&92GIK'J%?5A8<@>%W0 ++MP)U*BJ'9^0T_*\AZ/>?$ZWXTQVZZ[ZO:CCSW#30.ZIE=:4\YTO1=(])$[9!4 ++MAAVT";N>MB3!.D[H4=;.,8L.9B@;E#IE0$J#(QUZHAKA%@7(@C0E2/7+_(:? ++MRYZ]8'X^/GW'\\SOJY9:L03WPB\@XC'`(F@W1J:F@)U"L"@%*'QA?B'^HXZ: ++M_+$(L.UCU6U]0429.C+(%\96"6.]$+YFBAD*[/KR9HT\+`#CE9/YY\_SO7.> ++MB'X_ZN_12L-`KN'77^E5$P%_X-X3'AR_`B`!.Q_^M;>B'W?'\Z[MS$T+M3FM ++M!S/<SUAN#L&<N6-N,V&4_1G0"M.>@B[0^G`J4F<D0A\`,A_@B(S@,$2PGCVY ++M;/R/V0G[`_$,']M+T).7&:,,3#<=K:TK^VA/G^;KKW?S>7.[4.M$YWF5Z/FE ++M2(<,*"E,8"H3U?*J>\6`7Q[)@0F$H2%W%5/S*LGO;5F94W^I#^:A_Z0PGWD4 ++M`^W^+W.B4D@<U^Q.-RU5^?-_@&.X3H^8.LZ/(ZMY4G33^=\MG(\?6XVKV'0K ++M5J5P*[\XZHK5Q2TN?M])FL].<?UDC^J<PW7,2660BW%AG'5X3'L]80<U7L>0 ++M']=%#8T6XH+0O)N<X*:\KJ_51VWSQ&NLNYIO^OS_OC_J?L]WU#,;X-?B95VM ++M,G^$%J,_O/UGK9)34/H3&NBR)%'\M9GTP%^_.K-(.^G[];*O]:A.@K3('(I` ++MO9JOPIX@4<,4BRT6FT1KS#(DB39UI5;5M#4%6KY]+W-D')ZD)VDSQ?2$+FYN ++MOGW88S/^5IGA/9K1S%6LZ5=&]EL\8H0LYG%OTP7GX?D^7L^_%>L_P;_X'!A5 ++M&9L#F&5IC&MM54*1T]^C*AY6`,JK156BVD%+2R8I1V:%*K;7OKE_N>UO3>L? ++M)S5-FU;VWMY]/<^WY)#T39G<E4P+_FHLU07-96%09!D,.FM?*81%@/8D1%$D ++M0(11K%!,5,\19".2*82H4!+<A;+X6@4OR&(7Y&E9D'RE)AQUDS$A-6CPXQBI ++MA!B.)%(+8%45V8)5K"U+7.'>EF]%D-(\NP,H=?5%WTEFS++-E27&5SGI.\48 ++M\DV<17STLI:MRU.5M;V]A@XT/?S[_N&_AM_E[1+E%43H9OIKQD0H\+\%[5H8 ++MN'-A*/@S6+Z.O#.H:ZL"48A>FJ%J^A]TOC:6IKY?90ONKKS:_&V6O%V?<HR) ++MA"K\4<J1U(G)%*BX-D?FOKF4/DI8XO1,\6I@=_-FYL5F^MD4TS#%Q(V?.62Y ++MJ+A"H2T2X,S$XI9:>J1QO)ZD:P<\H=*EO`:>^DF>9NESC"A3%69A20FF@.?I ++MQ@B?I87B$I$\Q[BEE1VFBF<UL4DJR--"),6+`%KXI))5D+HJO&)B_*;-6"5( ++MAJLXTMYTKK*ENU/=E)BI3(6(46"_(WH++`<9Y4)*JM<*)Y2*2-&L)!(+?K7( ++M\\3HUXP&<3U*"W(ZK%:*B7V;7O+.L=FI4LOM3BA`HM321LJ"D[G.)L,#"*Y% ++M/+8MKP<4^-98#,M0Y,L;_#B[][4.SUVVM?._LTR<L)",H'2.+*QZ-'7!SUBN ++M%0=6,-<ZI:+]B(CKDRF!;BBK%'3X=*1]QF>/OUT\Y/4R<XRU,O8Z>JS8P>K! ++M6A2CR-7/%P6@#L45L:)AU)8N!#`Q(J)RO,JZ>V(DM>J^]]?+STN^Z)6W?2V^ ++MNOQDE'QFN7GIULYUUOVU3PJV/4HM?'H=)521L7"<_(RXQ]9H.E*53$+XPWV" ++MR11JLF$V2/T.FG&CSI\]C2>/JJSS5-SV6FKN[6R'9E!KVJ]SY,[Z)RR;YYV, ++MOJH\!DQ,<6K.QXE\?"ZVJJ>V>E_<:_#^)!Y2AS&>?[5_;:^#-GJ_H[<>'A@_ ++MR<,'[T-^?*3#;$R'XHL<BL:"EH4VBW3`N*5IT9;#5<$K1/JJOD),:>8B(X1N ++M&&?6M0'-"JKGDU1HT@K(,2#&;5H(%2:(S/9UM>V]NNA:RSUY5.>/&^TT,OM[ ++MV+W]=BLK]TL72Y[R;6+]ZLV]3=G1QGO,QN.MJ%%%^?'MSSQ?.FKF%,V(IA++ ++M+8S<"$6>N+;3H^#R.<,YWSP1$PA+=I;V%GU+43[2QLKXWQ.30@1&%"13&SS8 ++M$N.^37VKBZ-54@*.#/D'FGB("CB!$CQY%R1?*%T%`\9!Z8=;#J4DXBBA4]T> ++M3ELAZ49/Q*D4\T]$.75#;+GA#V_%NJ=K\^-^_4."J<%?8-WQS_\H(B((>B]+ ++M]=R`((!,I[K?]AZJ6&4((G&C'.,ZJ>/[Y_)J.K$:W@S^!&&'^TP?[Z)?MD?\ ++M:'/Z+],4Z*@';)0)_)`<W+XFX9&^OK[7W&X?9<&&88'VYA\?NY9I$#Z!#]"! ++M`#]/]'#)$4/O8:5%"A$/\6=,<_K\0H3[,[[!14ZI%/L?H_7Z43M)$4V@.R6@ ++M%#\*13B!'^%`"/$!V%XD/E)^D/L#Z[P5^Q2JJ!2!$)5/5]M5^$[(AU'[63]$ ++M-""`%EZX6&<(NHPG!G$D$XHXW&4??!A"%XF,AZH*+O"PEH*A2A(H2E).0$K\ ++M@.$XXM52+'1*`B$S_/0-]0L:34K.5)H,O8G@=2?V.1\%6#W'\[9R7^$FK&@! ++M+[%%*RJI62PA7*Z)5$NE@J%,0F$5WS$\SC/Y2BQP8I?3,]IP&HAMS8F$BPY/ ++M`J3[%2'*2'D,D#8]?0Z"^-5:W'F$_>#$[S'E7_/B'MD!3\8H:Q0TJ*GLU=Y3 ++MV_'=?I><ZGU5:]\3I\6H"<[Y[4KKE8UC.U4(10''`<BJB(E]Y_M7`B7E_MY_ ++MO^>RM_Y7_OSNQU&-J_4Z+28//\#C6;HG#@M](:NF35OI)[6RC'FJ&6*+71$8 ++ML)6%UZDJRR+'"=S]Q.DD2HJFS<4=?JMW>J]6L734SV+!%6)6ZG>\79P:;=$L ++M[UID=;HA(^*ES+)::(H5Q"-@=/L7S/DA-9;=WT<DZR1.I8)NHA5C'VJA/,_2 ++MPV\KS!6BG6/<,ZFQ&Z2)\BO=!N*@;V$=BO!;SICJ&_M5G]3!_GO6OOOUFFCV ++M2)SZR9P_#DU6B:#X0WS,*M.[L43;Z)T4=\L5+U:)Y0JJZ%M\5=AEKW)I*>M: ++MSQ5FI-"LL[TI>K+5*EJ])4C)%B,*#2JMF;8/HJ75CO2VHZ[VF?3"9E?%8J.G ++MBJ#Z+$131&4453*(L2%+^*HM/M%FBO5CF$>L3%MFIB!=4@EWD.GSR\4QGTT$ ++M3,T;M`=:+WIYA)=,L@K+&X6XE90JVKB/P?3\,7$OWZ*)[G&CDA@Y#DD4#$Q6 ++MJ1KFZ/'RG2QZ20D6KC[_KX[JC*12UR0D@Z5P+$.+$'PA=BD-!&6D&28/Z7X' ++MHHATPUN5!E'](X_'?N]V0^.%U),D3\!ZLD3U2R5CT[E99&99/*553/QPSE"V ++M.2#HI"-6_%E$_1)P3'PSM%]7C;^9?2[GGIELXS,M/LV\=/-FZ^1SRW^Z8Z%K ++MMZ33FO6NYZ_`Q/W>WZL_()QTWVJN+'1Z9<5U45!32(OC^AWQZ.V4[XK0>=O. ++M%[6M+O-Y>)WMBC;7R'*5]"HO7M".+$BNU[Z;X>]G?/HW578<\UME8?;CI+LN ++M]CHEJPGLWQ.2J^%HLRPN+%5G*SY7&(SDOU\.9GBJI*2.H);XC?B0UE(^:7!: ++M:/,<1$1<9S,3D<%51G>6BJ8;/6);T)70]<H.6VL\+%%0=A12$P]QA2M2\9H. ++MD>1EB:_E)=DL4LU#>]2].']2-NQ_*6?GWV</TASC^I_['TTE/,=_C`']?Y8L ++MF->GDG]4K*QEYT,K'B+U>S$-8N)$5;YC)NX+BO?RNEG+\8R--:DC)%OZKASY ++MF)B$"9ARN%>.G>U9=?EOHB8@32C@NXC9A9MK4?-W<SAPK,JR5VMY<E0LM'*/ ++M=*Y8[,KH8O?M6C\OV*:8%CJ'YOQ9K4%O?ZD)\2AHJ3\QSWP3'N4IA"KTTY_/ ++M9:GUX.O.E&;7M5;_Q`Q/6'8+OJ?^^D<"/#/Q>Z."JQ^>_T2,W_/\'J&*MKR_ ++M'))6FR91RS5+U9ZR,4W(XX0583SQR/AAQSN&E)6=,E#IYXRM&Y:-A*D<<F8M ++M[2M*83[UQ^+4K^DT%6=([F6XG)\TK()S"0@2)`'1#W#AE085D-1RFSRMCNNV ++MY[B8=A+0"&LINVZS9%QFA9PXF@NP0)(B.[")=-0)%'C+/$V(LSIT06&'!_CZ ++M#Z=FO2):K_?STB_\+_Q=7[',-(,'_3]+[^?;NBU>YGSR/E(\2PMB:"R1R2M4 ++MGEBS'D>B?+'"7B'3Q,U)G&:3R5%GD6HK*%##;J!![2SM/>WMK16D*L=2I179 ++MU$+<*'C%,2A4:7!9&E229;$)=)%,Z1TA1IK^O!IU2.,?/7)IO)P2Q7P(B,JO ++MGCF@Q9%**DI:CWKJ9F?5=225ENU8X$4<KBDIQ^7K]ZW&5YKMM[LLMM,[%OSO ++M$(?<3NHHA#YD"PC$!0"_UTS_ADOD)CPP+)$2E)-$"TE%NIDJ>3_L_5[WZ1[6 ++M>AH,KD_A0?MUM_CP)KA^PS>;.YW3?4J=ZT4T]0AF#$`DD1V+)X42&(V9GKEC ++M1CG&#$G!?UUP$`S=U==D051#D%)F,:YES;Y-3`39*-919,&08*`J'\%RKC>3 ++M3-N:X\(X4/@8'!AX&.'#<#4Q3!)FV$B)`A,>S%LZ18Z4'5)F04SP2TL&6QN0 ++MROOEAG/>X5SG'%H:D%0#*-!M(TU^'M^EYG;;63>`3NW6YW,7K#,3K[_DD`^O ++M]/YQ^`/H11`]Q&P>[5'[)F`L7[JK^C?;1/V?Z/J\YG7RWV=(;+-(]_SENNCK ++M5/V9)N<ZMLUK5<[S4JR`O4.Y3?)K]'\_V^/IGS,?8^#/-=?O?>0&2N!$L2P7 ++MOG8K]*BU6WD\R!]T+E5<\S"ZF44K@#J2=*I4,2E$>$0*:^K8LN#C5#!5$Y;5 ++M"WTGI^L]#V?[#L%F0#+I;D_58_9O.)7RS*S"F1@LFL%Q4`%-\>28[#G6EW#* ++M*KV<]DX`J9-"`;#189/2!$J\@9!/E$H#(2*LD2#$8=RJJBJJJJJCMMAMOVN; ++M8VHI4CLL&BSV\BW.YBTT&T.K<Z9=TSZY"3[QB?Q\?ROY%9ZYU,^7#@Q:A6J4 ++MI9^XE]J%%%%%%%%%%%%%%%%%%15%4>KF<@@&>W/L-S".,C949)RVT5B*Y<K6 ++MX]N"+Q_H]M:I;1V_J=C!5CQ8J@)QQQQYN[S^&Y'VF-K)'%OV"JMS(V.2N/9Z ++M^!GC!OUQXC7C86-<PL3`D'L-56C;`XCE(LQV0TM[)PLC"EA:?+5XB1K.I;#4 ++MRZ]2Y"I$AN2\$519,2+F%E4S=LZI6S,R."37*T]?$BS;L>),-51LC&D00`0" ++M01$`$BAB@4G29>1"J2M/8!SD59ULW:1U#LZC'BE*XF5/,4F(<6[$)FS`3'IE ++M!$'IB9F-=*X0M#8!A8-&)5O\J\7[\:D,$QLBSEV(DIG:U,U?,#($RWW]JVL= ++MHFINTU:`=CXF/:DCJJN,MU9:*.PGS%B,KB6Q%T6=7*KZV[LEXM9!;CPLQQ?6 ++M[V3D1OT!+5E.(L10,%15LJQ?2844"#V;0J_,Q\N+.!)4J.G30(_;^+!^63_L ++M7OA_;_MZ4/ISLY*&2)($**I@-*J"([^'*]#@W?R=_\F4!#;F7IM,\RWNN:]1 ++M6("X0YGE&7-4QC3EZ]?"]],W["%,AC6K7S^Q\)S#4%\&V#W8_L9I<+[SY>OZ ++M/\_[=AQP[#"$PB,R1)*\>!9L;9EM<GT;QF<096?;LDQ7=1KC67H[,5B,LPB5 ++M8G6WL4)4/0>:6JW?LYG/*I/.Z157I[`X9V\"@3)$42<1"(1)?37P[<>/CXY9 ++MYYYYYYXU_=W\0QIEM(32P7+H?]2]]?)^H=H</2A1'$40B")_G,Q'SF\E@<?! ++M@Y8NAD0P>)3VNC5BV1-D$5U:ZEUQ%P(L31ZNV!A)U*2AVCJ6&X`W+X"`(CK@ ++M#9.6N4&78H#J$PQP&9$]0E*Q;0H$AJ331DAK6&:0EF@,&693#,T<:A4->8&( ++M6IL1PU;,T1.Q4<!VF(E7LXAT!+0\?"X@`$,RI`W=*0X6P*3`N^AP.ONL:`4" ++MAKGI)+%[FN0&<,7Q)@A$M,C,$=DQFJJ/`.JZ)@!PZCL@!N--3M=(BNIC1Q(Q ++MP,*T6!$=G#00Q)S*B1-S`#3.F0*6,0!I@;H(P6#2H8)'],`_X,[\!2JEKL$= ++M@)5Z]/#I`-<<=6JV1'2'"\;]?5PIPG`;[[\CA0%.:2BO)80A8"23+4H@LDTN ++M7F>,$`_/K8(37732]PSD)Q:VZE'3Q+,%`@(PP?7`*$)UC"IE@!_T,H*Y5(!0 ++M7JD*JH?"(0G+U)[/;B?@YPX1:,6A$/DU1)+2"5RM,<1CD#`?29A#4FD6*UB+ ++MMTE5<7$C,##O/'5`@U]GZ>EL_DXI3'K6%8J\^BI%"7C&/"4Q21KYH"4V8*P; ++M/3.SZ<;N[\3NJJQD*]=%DD;>U%AG(]``CY-'-(^,LC.?,^<(C9.9\5#3FZJV ++M?F7>G<)=)$N3O$'UWZKT</1DO*].$Z)GWD*;YAWF^B!'P>^21ZLPS`@?"U7S ++MSG08OI=XN"L?`1OES'MI]CDFCO#JK+QJ#7U$9$30)F\@[Z[B5@$#.S/3V<DC ++ME=692I(HZ-.Q:+NOEQKT6U=>E-*U5CI4RZ`F>"E2.RKNLAF4H'``=CZAGM;] ++M>VO78TCN[-J.8SNO)O1;%[1*6-1W>Q75>3):R4-H7U)>J=\(T(Z3C'IP\DA[ ++M>[?>[S%S[M*LR-LE5XC%=D7K6U7"29=W1VZ\/7?@CSH")KU[JR>E"!*HI7,C ++M0\]IH[US=)#:]?`]GC36GE,C*TO6O>'6GZ>+`]5Y9C=\&B"B0424(^A6/4.8 ++MF>H_/F?)'P*2[?QBC>+<IO9T3%7YV21VGQ;J+ZM/LEN.]=I7:)&H&,YUQ@4$ ++M.<D;:70),`7LGLVX]X!R,RL%>2*>15>R0EF5?0%TIR6#$G6KRCB?:'<)\7PC ++MR'C[VIC3%FCZ;O1`QL8;Y9>[!%D-6W`U@>*`F)Z&'75/1.37G708$DA;'RGI ++MO(`6WFW\JF`*^8>2:Z,==7M;P4`.)/I]8Q[5Q)%:7#][?2_9=]DYJJ]T\/A& ++M@>^4/2>E5(EJ=*$X,^3F4')AD&"OB).T^NYD2+SX2]L9@EP%<HF:J`S!`[M8 ++M)!(GU<QJE<G>$]@?B@#Q\2<K&K4^;XSMWVU,R@-`TCY/;?PE_,`5&_B9%3[Y ++M=/OA+ACWK4CNNI"Q!V]VA<N'>\[H"!`4;5ADQ<0!4+"/4-'+*#>Y?BY5QC]T ++M\37A-3-^>=RW@!9B(@?)]N_'IY600?'WQU0WELR^OOH"_H#WRCL3BGD"/3*V ++MA\P;]2(GZEA_.KO?,OY3C.WY(%]07`SZ75%U#,T4Z0J+B(@"ZD>WL/2F:>.J ++MHR#)HR#IAVH(2`."[$Q!'Q][H@?4"H'I%_#Z4OJ37OH3Z!`C2SB6SQQK?$D- ++M%$8Y95"M+58N(&HS7$H(2(@,B&7B"Q1$"/&(%Y.YM5N1$0-@@`7UT/5,18A! ++M6L(I?1<#/CZ0/ALS!'RDQY$1'Q1)&++F`!$1&I<[WB?GP.Z]VSP`A,`D(<7I ++M=,&MW/:VULRU]<7E6N6"``,^5\D<.SUQ>]-^%"\E:>B(`&YS%%]F^OU^G8)$ ++M:\$^WPR*[VC,TW+.1$`0%U8M]O;/M84,HCC1J8",'CY]GIRU8".5X^NXKU$G ++M`.AKK4F5[Y!)B0,2$RA$-G&M&VQGK1D4('7\GXQ-7B]3]Z*'J6>IB(X08KU< ++MK5#3/LL^H`6+0?O@:(B*'S?GSD?%8(WV.($3<&OD^FJ?A0B)%SU\+LP(II?! ++M`'G0Y:8CL6"U$1GP')D1"0WUU\LK/B>X*K5DJVF1\1M$G,'PL>U9/H&8.8], ++ME=KQWFY_WV>($=\%3K-;)?R#G?,,WJ%FOE-VTI*!(&7.\E5D'K<!D"4\D!C9 ++MWPO3PB&<&1L1?GQ5OIR_+MR95MBB20?-,Z/`#Z">4V\Y;YW?R/@1Q.K(N1SS ++M3ORX,#FP93JYV[#,DG:T`>Q@U[>P`39%6K\5R6R/.:0?N?#O`,:S3#%9/7H. ++M`<-.YU/EX^6^ZK/8I)-2?)KT0)L.[NI$^/*J)29B?854R*-ZY][;NE:GI.JM ++M%@>4DUT%&O%&/,RYW74ZL55C7KJXF353T31R5V4>J9F?T(_X0<(L`BS:^PQ8 ++MJBCM4IWH==6S>]W[@K"F7%.IN1=B[A(LMDW,W=%V&5#J;E-4OBI3,U"3=XU5 ++M#)FY=4\H(R'4H4%2$AHHF,RCDU9HN2IIN:"J962:15==!H@YB&/:4W%S-T!% ++M4B;JJ5H,%(W=*?N0,9/V#HCY"CX`(["15/L@;M6QXFX$$)`!B[*RJ0GY_W`? ++M]B@7=X,]TN4/DRPOES]/K%WM9:O#N%3!L8#2YZ4)WIG-!1M9LC)R>&W1G#O7 ++M1+IX9L55BL"U/B^X+4YO%6.NI<K%-=R2Y8\&Z9DF3*%5FAV#)%.;5RB5RT86 ++MPY0K>HO3.SU#KG7-N=ZUF'#@2YG$\6X55%)F6M7%4@;,6Y7:AAZYGJ#8#QX8 ++M7*<TMKFMCM=FS5*PD)+CM<C:=SSL.JYFGLC)TU8UHB\MBW=.1>2G:(%3FZLI ++M<[W-$O;;[-3N^D563F9-ZD$:5<-VGO7QF97"[-T\8PZ+!RU1QD+F*N=FZ5M= ++M680EUCCPF=P8#.)EWET;Y"ZIY)G:JK$C,,<ZP9J:*PFE)QF7)TX+"M64+DW, ++ML7$6K;N>&T-:H;+TU*[<XZ,"ZK(='M>B.&C@+'#JC>'`I%(8IU#KEV3>Y>S- ++M1F9EZ-74'(4C*9[CR3/(R;*V01LXN$Y9-YK%GMV0Q78(@71.#989(/':!DDM ++M9PFVIYV,XLFFF+%8Q=R1J*RA0QC<=8KD4:RK&1HQUF82CDS"E3UT9[4,)Z\[ ++MF;-\^I<W&[MXLX]V)A=7:]HX1G4'@'84)H8UQV+JJ(!B],)#@OM4TL<VP[R2 ++M`&E&^YBZ98Y^;H=^AFKD'AO4Q'/.I)(&YH>7Z18XVD<%2.75"S`M!A-`3>=: ++M`Z<CT,^N)M4[&>:)@[&X)#OI?K^`C\)."5PBJK54M9?\+MI<]1`*!C+/OSW] ++M/VO]_#:F<QY5R)$B1(R`@W,P`JLOB\IE,F,EXWA_B=N9F9S`>HJ5)I=*E54Q ++MQ@<C+@O*OZ6F0_),:$Z";=&H2:N/>3^J1"?U"(3Z"8Z9R"_)P7JB'2J!;5*% ++MM:FH_!^/]?:;.:C6VD1$0L7]N)F>"(BO<]SG.<\;!6Z[1Z5C3.9SG5_=+>KO ++MLEO<F83^H1"5O[P/;T*>E%[548,!)3=IDM!@:(0*R#'R0O?MGCLVS<F:5D1= ++M'GTJ1<ZA/7I/:G2-RV&U=40*5DQ1-R@PIBIJ1.&E+D'G)X[=K=5B@3O-]3#H ++M@;*B"8`Q%"]5/*TWHB*R1L)8^?1HL;L*NISNZ%6M4:)8S,NI)F$E`@;')T0% ++M-%(4!2%<F"HSC7.=2*97H`LRU,)"LA126S+;$2Y[!8A-LEN:%RR`$/CO]KYO ++MA\^F#;.4:L1(Q$9"H(;P-ZDOCGKXS("O\3ZBE#BU2E#!04I6>E[22-RF/0ZE ++M'7&""32PESB]3"PVDV7&/NU<^P!.+]Y.5#,^>E_,`87X_7Q84,BA,YZ_'0T5 ++M6!V,\WD-Y9EC5L51IG-%$@*%\%I+("@L6`Q!2)*TMZ8<]"`<@P,W!<3>4U-M ++M#9416#"9WM=+BK%B*@H:\7M=4%`_?%WO.C1$54E%+T%+OS]-D^NF*)D[=<[K ++MOL].7262#K.O7+CCAVJHI*.L#,*((K`0L)(B(.B4><(@&I?:KDO"R9]OP;7V ++MXSU&[CBY=KPM5Z,"PEV0Z8JYBPGL;Q,EMBX,,(9V9:Z6*RJGOQUU->+=L(;\ ++ME[0PT,1]&HC!2U1"#`"N`S$.>R?UKF;%A&G7(U%DC#UU)K+0G1,TKLV<M3-N ++M<F>;-X+W$N>.[SMODI,1'8,C%1@=/8+/7$)VI.$!P*N+'1=!#G%4E#2]"=ZM ++MH=H**I:::^??SQ.PI;!JD_+[N\>LE4)3%,%1$P4ALFAB"@JDJJ:"@&8*2JH" ++M((36`J&*`[Z:XN0*W_!>\,V26M8`LBBB(44#42!2TE(4`?;X[T#LE"].S;6Q ++M1$4T%%+32E`%!5%%1616*#..U7Y,_34]&3Q>P:A5G$+:$KL[>_L=X.XVC&E" ++MMTLA33/&8`+E_=?AQ5PK'Z=X:H9<A'C7:]X\B&9&M&7/=QRG)QX^16XIO>9K ++MB@[2EX,K)H]?;ENCLN>RLOJH&4.L2^2RZ,RT..5)HL)U5`PY<N9D&5;EITI% ++MJ(PV<%@<.T-Y!JE:"BFJ>?/`-$%)0"BFE@H-6$Z].FV6(31D&1WTL6"!8M3R ++MBB(!"-:IHJ"4:_6-+10>MJB*$=+OO\YR@:&DB@B#$6`+SH9VMGEF;;>'?;IQ ++M)M:E(&[=A")@?+4J&;TPS)KTV^XR*^M-+WO4Z]N;Z$CLW>Y=G./%+&B^=#3M ++MH:1654T0DJ.<S=C.*&&2@FRJ=F=4I!*TV7:JMZ=Y<'H:F-FZYR55U-.NY"^Q ++MEX6UJ3)&A)$'-FJ1)%(J%.4Z.D9QR0DVFVTG1E:QI-FQ$Z\!G:8+G3!7,7,4 ++M-S%:4^+K+0%/LY;Z[BB:8B'W@TE1#6QHB&IB2@(G?7SQZ0%53=YCDJ4_A(:1 ++M"9]_A@$Y?6P4D352T$$41245\T#3>K@L5!BR)D7X,=-^,7&%Z3@*L"P@(`*% ++MBN[5426L>5NFX<;5:Q03HE#$O5,@L@B$XQ5B79Q5[$L9#?.^V4R52"V_STGF ++M6&.RG*[I"J4:?++RP!G.:&*HZIK.=9I<\ZZI:L"!+LV*(QH7*VRF@-(4!IW= ++M3F=H5YT9M@JE4PXNUT]V>IFY5(A+E0TQ69HA%)%`17)FN5RTN$4%4O$AG0\, ++MU0,"M034U-,0$BT10!+QST&BDI@?"#0Q0E1[R&V4,](^H.5(*:OQX^.NO3.> ++M+Q#23+,B!X5P$:@3Q(!'C>B_KJ/5@,R5S3LO9"HC;Z=%<,K#)IRP-V91ZEIY ++MV^>97"PM3K,I3NU58\QOGQ=5(BWAT!G75C`-"[%27*8Y1*1HJB@H+G?9HHBK ++MU&BFFE*6BG3N9\YF^<IH\\Z<`>R4)]H70/SWX_#H^;&@JHE3U89HA8_7C2Q` ++MX[\WN0ZIHQ118B+%B@L6(Q15!L]-+WK771QST"HI>Q0MDU2@H$0B2@8&&%#G ++M]3/OR+!R=,2?B>%CSH4=K6;3$M:]L:_5)(JNND=/97409>62MT-:7TQ4X4#T ++MOKI,=BF3DI)R!JVQS="Q0DV%-U-`BE(V\.K3O8[F+HE(J@.-=+FCKFEVA@L@ ++M4BVM*&(6&$6#([<:T0A$%)2PA2!2%`\<\G$F:BBBBJHBF0BKIYAG9A.=*@=> ++MU0#G3M?/IICATZ<A.<AO72@OHT&FXBM0L$88&F-,"),WE#2/I;%C44@RQ4G, ++MH7:PYKX[.2EMNN(ONJA3.4=YWF,8YVXT93K%ET#-F7EB^JIRU=;<\7:DV9=S ++M-S5L7<GK3@3C)DKEL5+N0L.8N%P)J2\C54W2DNTM=<@KS9%8N.\QVCKTO@I+ ++MRS5F;9FMN\!H%LOKH-V)US-K",;.*8!F59>PTXF6+R8JI(HS.;+D8[O)INP[ ++M6DS;BP`*`$40#>3(`R9RL1JJFJJJJIN+.$0B`"\S,N!;61`@&`\S+S,B`6&3 ++M////&>4ELW6R*WH*8"@*"#V^-=E;,-Y@XH+4B%UQH&M]GST8>["'*3KUHT`8 ++M$%$1CWWZ]+7`K+(EA(H"Q2`:ZF3GQE;'.^.H<N%F0+2&2M%*@0],5`M$;U+( ++M2TL0ZVUZ:T2R%GE`4!&0%A)GURY&M,]+UFM96[5F8,:VYV^75(N^E\J%A&SF ++MICEF<^B.E=N#*PTCU.Q)(Y31O58+JB@2]0D&-S@&,)P-3,Q,F41*7"(H<=8@ ++M=3!F=DZ9H:RRQKF9H;-.J(D)W09%#CE5@,#3)JR`?%^:C2>HY"=ETK\6OCGO ++MO0B:HJ(*BDB)IHBHHB2:KV?&[WD#9D.VA1A%%46:M,!8J,-HF(B)?G"IYY\\ ++M5:!\9\LE5"2H,5AUS.;VTOOS6A?;OO3;PMCKR8>&9U;+7$DDP23!,`>QA2W4 ++MJ\S4;0H?E)\]VK<VY$JM8J1-2':=*"H-9?7=*06-2$TE75-HH2%"9>].WN9< ++MNZMO4@1DH'5:3+HZADHY*8)>H,L;NE(4;JYNYD*4Z*#$JR3>W=WSPQS3VVEQ ++MPE[DJY:G+:RKQ(ULV^Q7UV2)')Y3I7SY5@(J[S:M[8U9<'$M[B;JB'/7@L*E ++MHZ<,G65-7A61:5XJVGEU:!Q\42E9.KF*I9NJLXAJKWEDMPKO%9QNY'8V#*/) ++M$:QE,U2"?-GJ'+`\5W.,TP[,/*+0`F^4BKVQ),FR="2JCM!;+:G<RKL8"A=W ++M4@DO3K$INHD`D!\)!(%'.=+"^T"Y34(H(6T,2B:UZBLC2-D"0`R@JK5O8HI6 ++MFF%SE@5SL/.-DX)(J"FPK6$("`+VPQ57BH\L*8054^HJQ;#BZ$\IBBDAM2&D ++MC3H3M1EA2N-Y44PS?(4!1K6Q2CF"5EPPM<3.H!'5VXY.$)7#"EK!<TICH`.9 ++M=J:>F2>2%$57;U4:I80<.\A1:#&5=@<@JF\I5(Y!2*I!D8U2+&73-$A#8=R1 ++MA`H$6Y<3%RQDG#4W(M*YNJ-W:4W3!09*=EWEFT*020PK.IVL):O,VKMU:38F ++M6Q6S/$20AG;-:#U]4T40538I3:M98ZU;*-$3UT#-C:ZQ9LSJ&LJ4#385.T@2 ++M*!!(H;==5$W+UBZSIKJ#P@8,;TE+9;%:I(ESDZ=9*'53RCK2-&;8O-Y7&<"3 ++MTC9"<@.J*A\T^Y!!RF&G)*F4DTR98:2GI;IU%@[$Q%@P"8!)5),AR#?-MW<E ++MI.;/O:FE#WNV.<2Z1(D!$A6W6Q+ITRYL34JB3"8W\+89#%,I@QBQ1&(BD2V? ++M&F6^1:_/+ZSWEO-RTCU^&HIG,<-*/MCH89!\5U2QY.D5>9XML!4>"@D8EFXH ++M2TM8JP'M;9]E[#D9&@%FO<Z'CP(O)ZD3YX.Q'`NM$"8!P2MQ"D,TL("("OCZ ++M_7[/;F='L^O+WGN]_2^WCGUG.+?\I:7\_A_/XJ?@O^GU]YP'?G[]^%^3\-Y] ++M7\?R]Q4]IYZ*BU)GQQU"$<4Y/3)6CA1)4JE:B6%1BFI2U62L^I*Q#95[[WZ_ ++M-_@?/6]?TF<[[?L_%UDKXO?J_S^J#0WZ(3OJ]$ZU'J(Q'PAI*F\VA65:0R*% ++M"`8T2%"TB15%488N/\)X&/T\Y[QI'UN1D)$X!I"';3UY\L\XRS(7IJP+X?EF ++M'AR_H>QG3^!_1/A=%)W'#=FY[E'7%0-GYFN-B7]KJ/_OC]O^OM^]_Q403/`A ++M?J@R(:%<Y]EW$_<XC9>ZZOX69Y;D1)@14-/6K:)O;&YU<'[6H0\RCS2*!OD! ++M!0UF6SW7[]:N\.^LAH%55%DA9KN;24#J'48E,5NJ4=,FYJZ1;/;J?5+$]8F3 ++MMM.TNR917+MQX^#W+%;M6I[5JY%'''''GG_'X"0ZVAEZLM\20-+;9WQ:V=R% ++MYA`]=JD0Q`)@"IL0%8S4_C^J!<#4<2,$8#W9"=R91<`:$\Y59MU`5'(`J])! ++M81G0<"(Z$%P4!B:>REL@#0,J+D5"@@SE0%5-<W8C!U:9XV<T<=$V0#C#3S=( ++M<W'B+`%A\%BH`&9"W@)<10N>`D/N%]$U(BNR0Y[9TQ6Q1$O(:S`+BK+KHB`" ++MS+5]E``YE]@%W,ZJL10$!'IK`>,<(5:,L$948MJ`0[=Q&1L4`ZB-"`U=QJ9% ++MS$4,X`8O,7,&@B7K%P@%947TDO"Y`UF-(MD3*V+BXF+N9MT!G"M*R;F)X18R ++M8$@3$37<!(<PM(&5(`>@2(<"8&0`J#B!1G":T8_5):P[%A.?UJM_<]#WG&`` ++M>@2@D#HD@5U.ACCK:LSYW76%^S#,UP8`N%M-<$,!`8:7[8P;WFT%Q,&),$P$ ++M,27DRX^5OGN?=(G0M*@]?-Y:5!M%P!U0@_0-CKXY90Z?J)D3\#<\ONZ$TY/P ++MSM6,H\R_P6,$T+JW-W9E+U`K)%FY;<YY4Y$S9X70M38VE:ZPLQE1O3+'.C:K ++M9(@0`4!!"RE6M:L2DAS-9VS=TC))&K6%F+%NS2K);QRC.K6B^N31L\A,X%DV ++M*MS0X4.4(5LS&65HNT*L=-O@7N[MSP,`"#1(M.9B]Z=G6FJ"MH:*=LC`Q-TE ++MG,2E7&KO5:)X,\Y%4ZDBIYB2]R3)K-#&5`2LD'$)J@V11+I$EI&Q<KK:>UG2 ++M:Q'A.\T#,)4K<@Y-C:?3*Q1T@4;*%7NRCU^]`PB"_'PU1H/":&5*5"1;IA"Y ++M.[)HT#N,SIOQM(3U)%AD(92S;B9]+6S4G:*;N\DY8.`ULF1)DND.-6#64J[= ++MV=E6-ONXU>;)YF=R<J@@6PKF)59HGV[DAJEF7LV_56@C>S"!-VE/&IY-L>(] ++MM7:1@JV*4NTW4B:<F59F?5(4J;)&S0J>W0<63/=M0*Y&1XA\4#:OMGS7C,Y4 ++MY152*.[-HI4JEFV/;CWAU<=][?8O'PK'+0KO2@C"/*2&S>S?9--4Y%<+XGU< ++M]E*<VKO%V]P/=*>.ZO0>[G76)6W4AO1,UF:+)USO2%(3[N-<3BRI(LJD-,YE ++M$.@6U7:!T`Q#P&YYMS=S(ER)9&&GV#$\S;73]_,][YWO@I=CSY\:3PWUUO%, ++M"1-KA;9D=.HF[%T9L*!55+%;9U"I.S&@ES>Z*S<+[$B)-VZ+76,$,""!-$4# ++M1Y2]9XX:)0(G9JE1=R34`0II3/38/!=?)9=@RN'7BKA6/.-O*8M=M]D:,&6A ++MMV1T]VS1J^8=(B72*Y]C[IT;N6<YN9>6\GIVKFJM>7BC[T['>>^T.R-\K:>M ++MV<%8*D8S,^B(%>U>X:.'J=NND2W<V[<6IO=Q.D+W:].K<FQ-YEISBR97<S@O ++M@<I,I9A%D35@VD"')""*O)X>+%>-I(N^XUTE`BW71,JNGVK.]?MNR6?/BL[- ++M,Z-QLVPLLF$'3U1D:5AR\:H*Z>JPSM*1EP($MZ[JUS0KL:V`T`L)J>N78(,! ++M&+EX9)E$<@J!0MXI-B*)),R'1&\AI!6B;5V\X2"GU$J;[JO$#.SMUF4"2#4! ++M36\MGE5Y$3VJ^LP]8P`=$1[*W?>U]+ZLV1ZM%WMJ1C,L$,()#DJ7$*D(N(N( ++M-HEU2Y9;F+ZKG5WF+W,G!WDC*(`90SVR!9"+&XU@1%^SQ]5BBIOO>K?764=& ++M&I&8T=P(&Q+%]M$)3)AM1).VQDNII#$IF):"IEH*4200G>2U8F[U7@,MW*%- ++M"KUW4:\B5(S=D[L[LVB1=E(@/21QY:P>HDBYY"C@K`%EIIX,&2-V[)HZ\6Y8 ++MJ4*UUE$D&!JP065'6A)%XJE5?4AB$R';H;C,D$$BBC/SY<_`>MSHVQR@E)*; ++M838,B?;E5\6XH>5(D$KRB(@57*I!&3H*D3':Y(?:HG)ELLF6V9:#"<R!)AP7 ++M*EJ)5"<\'?D6L-B@R@P4,D2#)KU'2.S$;6V*J38G@;L.Z>-#"K62*HB<Y5%X ++M,"G"%05(O6IX4XS!@#F\(*7=O)R+I(K7I8=\.C*I6<H%P26&]F&"NR=4[>W= ++M2)$URJ@@JR@H*D[?-*P4DUA1Z:),3(DX)4E<,NJ(+80`ADX'-W*02M3:DVJ8 ++M0J:D"N&J;Y6'RVZN\L`CB1;!*E1DXQIL2L=;.URZ4>P:Q,JE%E.J=R_Y`0`( ++M!VQ,:3!J%H$FH8)OMMO#&1BV#*QD:Z9$!@\L$3P'#4$PT"8EI]Y7]0(B``/Y ++M?4?7OF`],^4B>%U2,GX6D9IY=O*^IFK=4*ZE5IUQDO<PZHO+!49-:*NI"VJJ ++M&E/=9<P,J]-G-RE>*<FXK!MZ[WI#O073$W8S1@JK6V5(P:>X8)/;F3,\+F[- ++M4H:XU>T,G#(>.)+Q573TVQ3UUW'-DXQ0EK3-[AVV^:B09/<IO)*X2*XHRA>5 ++MN\)1G1U.ZC'H?7FLBG&"IO51.C4U6/<6N6[P7(&19%W<N:/3<S:)RZXA;6$5 ++MW)ASO;=9M/=@H8*2$]LVB#KQ\;ZYRNW,(/`AY+8HV^W>JP<6SN`X6ZG.=C+; ++M"W*R3RJ:SII'=><>TX"0U;:OH$WMEQ)H\U:N]>4GU5F<*GKW9VBJN>&&\W6S ++M5;$BNM]VY>(ES6*L0=[PX[>;N+:/8B0D+-DV)$QEO%M`NYR;","TZD6(ZY9, ++M0.P!$]:6;3JQ+F>RNX2$XBM"S(5V.&WU<\ZQ1BN@H5;8N:3&:@D-%GIZ<8:L ++M=%79DW1FKH;H0T9%B[VD:)6B4K(QQ=EYK>5<-8[W#5YA+>;6$@[*P4NT:.1J ++M79<WLMZ3P[;ES)0>[9ZEM@]U6ZF3=<YDZ53V;S*V8-B[EU&R&B,S+R4&\O>> ++M-;5ON8D+I2VKFN2,T*N^RCU@&QTA'7(8R:BNZHIA=RTB@;E0%V]K&IW%RO^> ++M'V/>_Y/X_YT?PNZ>I^-#G??77ZPY!BK;9X*1-B!\Y8R,J&(>I%%@(^O32RSP ++MG6^8:04.U^YJ,FGM]/3Z*M,0B69AD)Q[O9TXTXM8;,IDWMI+6UJ?\^L2"\0^ ++M(6A_/*BM2X&V(T:I4(^<'#*+<FXH<$0AR-BH9W]3G.X_DA:32'ZYSIW0)U/3 ++MI=&RTOYAK3U55JHF[U/'9?&\'CL"9)Q=0@%1[&>SHL2RK1*(CEPAF"@:/-TQ ++M1X;R/M<O.NY)(G,XTIR!Z]_09]1_A/32+H&:IT#9IQ?6B+M&J09+T0P?MAX9 ++M@4B2"9E[_6D?&GX(7#I_A.I\G.3QIY?PF:N^&*;F(H@`3TTG!F*.3.O644;W ++M>OJ3/:V7M9<E''Q&)7--IC9:L=M&V+9*#&\X[AZT>/&+@]J'M]F28U!DYK$R ++M6(<=?$@[O>_9:3/`#)6/)^_\FE4.I1A4,G<_8'ET:@/CM21AB1!<R']P]#3) ++M0$PL)!)(P4#0,?P_X.:JB(@B2`AI*(*DH3Y@H1AA$H`-,$)5,L)12%1!2-4D ++M2)!24-$$K!+13!24Q!404,$-(X@6E3Y>!@X*3!"E`A$*XBJHJB@HB4_W/&&@ ++M&!I9^##@*2*08$A214ZDQ*H988:DJ")(A&"JJE$JJ6)"@*`IBDD(F0\C1.N$ ++MJ-^C)$10N!3$CJ]>ZYUXF`2,I2$3),3(D1!%5$10D_MD0\"](>X<H!N0$317 ++MHP<1F6"**:AB")D_=&`GEDF:@"8:&@HJB@:>1(O+CE#I!=TD)B@H2*BIE"(* ++M8DH:&`*/QXSB,%!$4E$P5#I3L"R$(.BEI@A99&&8!EY28R>G?2"'OTR^2X(( ++MXH/":"9%AA)&0^<Y"9(BJ:&"I6DH&*J(D"H"?<.IE*>PIYI:JD8BAIIB(@I* ++M*%LJ/$EA2DOC+J0AI(AHA_AA&050,B2=R)41+``$^_KTM@X-:BL@)>+ZV(E2 ++MU"O_LF\D!2%IRO%`72Z0OY5A)+QYYMD2X/2-!YP[,$#RB00I"I)(,#UX"'4A ++MQLJ#I4'GOU<>WMOPC"2@YV<=G-N?X=C!`@P(';]YA,SP;7N5I.D:JP.@/;&; ++M0#,+PL&N1FQ(RN%`:!'&`(-[@0U;.U-J-GG!(C:D:UZ!`M!D6T7CM\1IF)$V ++M,7RIN=<1,.]4B?,Y)A=&OX/1I@`IJFS9DO,W/+2QEKF6-:!2["K7OZ6Y>D(Y ++MW1JUX!K1K6IZ]*KU"P@\H)I(:"&[IR"JH*"@IEB2F(4IH*0F"8AT@[<]"CTD ++M0W2I6HID-&E9D&DH*6(I)@@F&H*B$H":((23Q^3CEL(LHG`XHAP!#4A%(P2Q ++M0%"4GHL:(2FY8.1!$7ART"GM`/<F%3PJ`":*0B2!E)@H62B(B28`II2@E)*I ++M@D*"BN?+C2F\HKTN-$ERM*A0+Q:)*(EJIBDII#XM21"T)+5!$4,$7ARTKO`- ++M(]P&")1*4#-(104!0$,$#0LU^6$Q(7Z2ZJJBJJI"A/)?($A20"D'B,2U)044 ++M4HT%$%5(Q$0*P@0*PR0T$E13-+)`#2ES*GS/.Z^:DL*/""(H"BDB2:BF4I(A ++M*)FJB*0^OXT"&ZP*[!1$D\W,9BHF"I(B"2D(?NPF*("B@:)AH[+`*HAFH2J+ ++MG&!$Q+2>3NZ:1#;H.,$*.(33$1505020Q-,0++2)#3,3*J*K(J#`5%@LR[^' ++M+;C/;?<\>GYV5@\CJ\Z'?>/KY=GG<UPK@;0EW8,;>;3NO3%'SP\7C#=-$(^- ++M0E")6'I@IOHUL=WE[1\.-Q-U]"]`$=$#A@K^E]J4_3NOAG&S?QF]*-9[Y`,0 ++M-D9[96\R[=74_,%UXATC<RGEK:,T6OE7$BC4J>G&IL3U-B7-(*7U7J!,DP#B ++M]&.Z%3NR*<=.7HLWMD`ZQ4@7M[ZK.UH9,U6+A`4OIB!5^B>0G-;9JWZAWLBP ++MN.$8^>W3&;C@N6MO*4:BB-8J>(>=5'B8OOD"`$,V4#5LC"D15BP$ALW*H7<4 ++M1RVA5H6%*WU7(LX5QMAHG<$F[,X!6V,>WER%U;J':<"8G;L6E8NQ1!ZP@.RG ++M-ICNQT\OJ=3!T4Z*(LQF2614LET1)QSAT4.+/8&K="NQ;D=P9V@KQF=X`\;U ++M).1E2I=2Q`V)OX202`DA7S<CD$31I-+2&GYW!.5L89L(5#B5+(02(;F*?8)[ ++M9F.?.$#MCB1#N,7*!:$.YY#CGJT:*2(IH:Y`8JF`J"%(N6&D*1BJF%H2(*0. ++M)1-P`E$TC23%%,444$RDA$I(5!$%!!$')4X+(!P"DDHJ2(D@*4B"E)*)"(+K ++MVP`'LCP"0#Q8D*()AH!B)4B*)2IJ8FF*IHI:(21I>\XJR$1(!Q8HH8DH((F( ++M@@J&+]LZ86*"*BA/-OI4-TD!VIBB@>RQ)B98(#4Y)$/?F`45$-%,5>+C0*'0 ++MX3`4W`H"FH(HBKJD'PYEBJ(BJ")>=R`ROY(84T(;(7HL&)*29#S]FM-!2TEO ++M8T,01`>CS'@=NX#NLO%.3B*XK*H!M^+I34TQX9E0$R4?/C"HB(B2A*JBBBD, ++MP(Y:`3M'G$L)%60'P&A(::`HJ958+&2#(K%`1`3GC''EJ!X/L`T]>?/U;!V[ ++M8MS\^4Q+W&UB^;6.I$])I`]"$!W6(=<IP0J&@!*8"(F8VZ(5MCP5_1/QN@=_ ++MLF[VQI%,?5B:PH,%+)FC+YZY<D(>^0`0`8`]F4=[15]9O*.=MT:3^/9DM$], ++MET:(I?*YRZ8T+9L5DTO(YI9M$GPB3"H$5Y"RS%1`(>HXWXBZF9TJ13ZSB;-B ++MTY4>O-NAMR->>F2S>(DB6+K6+HTRV'=T)D:TQ2Y3JVAB=#LY@)=W3OP`9'5I ++MS)K'1^")"$@DGG%2#BV7,L3IP(5%5GS*LYDX&U&T[5-M,DE(:0A;^7*VM(HV ++M]S9RIHV<3P4"E2(0D2FGF.>01K*H[>'N[NN9OKIY6'>=T\''<Z[U-3^&88>> ++M^SI7%/"/FM(DL*XXZ<PP%\L!E-T8,5=ZHIIEFF2[,MK7@7E"&3842DH)D\P% ++M]Y[BC6\"&1,T0F$,`'S-$%"/FL6D("::D89(2JIBA5#O8B::&P"\2@B"$BBH ++M""AI(J4)D8D&:*"J02E0R'`QH`*%.-*T1#02$$014DA,),-5$53240?-H;D@ ++M13V(BB)JK*!H0X@0B_;&$@F"998*2B*(B**8BB*0H8(2A1X(R*X$DI"D:"86 ++M`I"(&A*2$#PXNI!>%23$+37N30,)4Q,,$$A!0(\19!,)$Q40T44!5$43*4S- ++M%!!143$,4$A0E!0O.174+*,`O%(:"AJ1HF&4(H"$DI"H9A(J6@@OW$J:E"YQ ++M2U+@F2#2+\^HW"`*(F@B*:0(I(@:9"&6):"A@J)D`X!V$JD<@G`B$J))`B$* ++M'V\#(JD;V\7*J'Q99>S.O@]D-/*_I[/$A@"%R*799EA9MZO*XH9SX>-G"*0B ++M$<L]7(T@AYWDIQYP#JYYPH&@)""((X@KL^S??S]+J$F_#@.IF3](4*!$Q="\ ++MJ+?CTU@4;7UDKR%,:(#V4<D!$>]=7?IFM5F?0+G/;VJ9O<V]PWEYM6%IJ;.8 ++MG.H2]-U=Y2,83:^:HD)4G0D:<J;T*G(N1(.)%EUD]E8LLJV[G!*D',,O+?L4 ++MY<@=_;$"%$;H$9`](^@H"A&;[9,3,:!T47QM%)W&R?6,$3S(U51%]7G<H=^, ++MGWK^6`3JPH>0FBBHF]J0R(:I*AHI(@/3`9"11(11%$E(]T`FX/WR8ESD1Z`1 ++M%5!$E(11,D14E`R10S$$4E%4P4#4Q)$4E';*)H`VBDH3`0V:"2F9(DHD;V<$ ++M,/#`,I)!#02R=_DX";TA5`Y%.U!3%5%)1,I*SL)BJ*(J&FAB"2")8*_'&*B) ++M"2`]0]@`D\)RC0/0""B:)IK\=I**@D*9I*I""B@(B"&`I5?UZ^2<`3H+)2D" ++M1!$PQ!0<2":&5=*%!!21#%2)1-2U34E+))0242S%53,$T,?7Z<%0['LR&][* ++M%`'IB`H&A"J6IB2("(J:`(O/@`:5(4=24T2WN3"Q-04A413,I0TA!0U,S%)% ++M!2'ZXTT2H'IIH\MM&#;)8*=)$&C34(/%I920D*::$HJIA*%A("(`_4R&@I8H ++M8HD:@<\[Y^OIQVX]WKAOUUQZZ@=DP,0%(M%Z@%6A$5:)4!3FB@C:_J*V/"\8 ++M)ES"D^_*85S,P0U"&?P&+(^)#"+"Q_P0L"%F.Q.W,J':;?"1.I%,>0J"AOQN ++MG3IVR3#LURD0S:"\11\>MPTX&]>+AA4PXAI"L0WQS=R.&%(.0GAFW`50CV^7 ++M`VY7=G@\3;F>'6I73M!&(*&=IU"8*+AI`[L%PU;>6W+=ZUF>(%<HC:5$##W! ++M11.J`P5Q41.\Z-D61>I-!%@:@C#((_H%.J$%:VT:5(0W4<Y-OCO7L]A]=,OU ++M'D<@B32:"\QU35XY47.D-)B>8:;REF^MQVVLEJUD+*VR&[T;QUT.O.&>'T0( ++MF''"YD'A9'N-($2_',<A(7]K^G^([2H<ZN`7*1*T%$A*1%#,#'6=FM4%!,4/ ++MGV[=*B<#*#O0,13%1`1!!1(4D-#20DEW`::H89H"*[W"!"D"%*F@J)*%I"(J ++MB(:(O/MH0._GL/VG(-`/I*^,&AI:"OPV"FJJ(":28":BI2@B)@J@H(G\H71, ++M!0%4LM$?ES`)Z!D0Z#,!$0%4I1$U4P4JTA(D4,21(0GF3%4%$IR$60)!-%15 ++M!"R4M,!%+!+(0$A!%)#(4D$E`4-`>>%=2M*NBDI*DFEEF6F((B!AI:B:6:"@ ++MB@BKWS*$_$4.%3H1(WUET!24`4P$@0<D6#!/9X`G`(6@JJ:4I*:"9*2(8J0H ++M(-L!%2P%11%110$41%*/T7>L!5%1$444,5%!1FT%-%:U%$8`/I=W"&F(9:2J ++M@E(F&1IB%@@@@*:&%[)I_#I;Q.^1C=R=#P\X:G/'F,\Q.^,]>,"@:/@A8)I` ++M61?\?D']P/A$';S/G+S_/U2)D?+MT^J5,VG6##:-J1AP$4)H=4S>8VT'B7.Y ++MD(JZ'[G=$XGHWX*NN.Q1'!]2W![`-(SQFC@;6;>FAZ(`PY5G`OAX<7@XL3AJ ++MJNP=8TF092"VUA"FP2NO9FDVXYG"Y="5*28)!F@%3;J6MQWF9C#:0RKE#;3G ++MGFD<K8,L+K@@VB`3P;;286>S#3!!JH.<N2<0Y88@X\72-=-<]@XF)7EPYKGA ++MV;5V0T4A24!24%-4T%-!04A0E!04A04%!3\4Z=P&]MZ##%!Y(P(?;<P?-*=L ++M;$%,0LL!`3$2%%40R2S5+,!Y*4`,)"E(N(DIB@)(:JF8B"F@H4DHI8[K""B: ++M*BDH@AHB2J28.0(_)M#]\KI:0R&70M*=0EB8$I4J@)FF*%'(LHF:*2:9JB": ++M:JA*"&I*$D@J!B`I`A**6Z7/[[G%[-14'D*^C0\'&*B91>`#QI****I"@B"D ++MJJ@DAI*1E(DET>S8A3L&"0`D&E>D1,22T!020TH1%"1`4T0KH[A,J\$EIIJ* ++MFDB6DF"DE@:4DBI2J*IA4RL-`.BB*HJ1JEJ@B*"BB@@(9&&2FFB_BP&AE.0] ++MPF4:5_B"ZM*0$D-55`S04,R0%#002535`53,TQ!#11$-^D(]$]P`&!#J')]W ++M):&2)FI"O,IA@@OUM&VBF6B"@F!JS<VK3/V]_(?+IWZ>SUAN^/AX>O3()=(" ++M'4H^5N.84>2%5/H>WS#B)H(`&'``P7A^B/?U.L;5(L!/]I.5]%$"GE94&7DU ++M9D)BM(X8-K3K4-3ID7`F6,-4*$W@JQN#9G,E#MJ?J6(E*`K-8_#9H>6G:QWJ ++MI,*AUWU.A+AXHXB>&.`S`9"?9,"<3QVEV9VC")SF%$`'6N-D4$\D.K<:M8J5 ++MM0XAJQ5SKN'-=$#1S#SWGE!$)CCB%!&8!TDR#68)QRV#L&YPB=EP*2#Y0[,Q ++M().W,2I)6I*8$HHJI$?#P#ZD.50H=2BE*BHAB2EFAH9("0F*JHI@IBH>O'"E ++M66$]K`?9\>PKQRAP0/*":6EI4(;9=4Q2#++-[C-#$L/($E($I`T"0%#`00DA ++M+`1$2A5*4A!!"41$$"F0@')-50U!^.RM(010PA"2$0Q`/`($-$%41#234)%! ++M`RU0TA"W<Z/?>`D2+1QHH2DH"D*0I&`I@F("B92`D._''@=A/G*:@2DX3ZL5 ++M--50$10U4U(4TDA0MW8:!CX_7(G/1*.4<2J9(":)IB$H*&BHF6D"BB@HHB4H ++M*"FJ\O32O1Z^+3)E5-"94]!5054051"0%(114P2$44M)#`054TA(%)U\.=M> ++M:[<;^%];]_*'&FG?R*EKRB:=K2T$C0K!LRU@:8\IAX^;$0*O`*N<>0P[D`CZ ++M_>:)GW"0_W^G$UCX1"O<#,&>D5JKMJ9"IB3<BLQ^4?P/8ZYC>^+HP=$:XC>Z ++M0BB<&[`CJ^?.LR=&YB/EW5J\:GNY"FCM9EF_&VN%(.[8[!.+0C+H5)Y,FY50 ++M6=#<Y5S=EN0;C.$DY*1R6&7(L2)ED5<T"KUW.X\&TZ"<A7M*S47&.$$(23(, ++MU9&W.^L`?/+YE/J:=G!B1OCC[ZJ8^]=@"?N2#TO%32\0AD"HB@(7F`RQ41*D ++M40%%`4@?4)V#[R\YMHB:<$N<">*LDT1!4L7Z8T4)521344LDD+(%0\<J0)"F ++MF0F@F:"D`F:J864_6,$%$U%)40E$`<%80R$RP4%,S2E`,I0U53*TT$$2$$T0 ++M54B^@@X^HK*)T2I*H"8B*:(*F(IH0BDI"I&$^TISBNA7*=K`G`$J`H"DB?QR ++M9HB*!DD2*JHHH:%?3XODH\@B"`>@$M5%25H-!12'VQHB%H(**)FB2A2@+G[F ++M;PG(C!(`H'<H(8BA6H8A*)2&I")?6$,$!5%14+Y.[C9'A%@#<98D:FB"8&)F ++M()&*EH1V32D1+#10S5%\8>]5-,KT8H"":2H"H(J"*ED*8B1@%4$HBP14`613 ++MKZ=>/2W33M;6N/?Z3?C?MMY>D:/3IF`6`SQ6;9EXR51*DF7H93$,2&/"!)>D ++MSF=+X/H5>PFRU5*XZV-KTV:^R"5B5)$E2^ZBQ;+<)(FWA3DLTD"-MT#8M1\J ++MWG%1AC3-H,LU2L\>,I092-$FU,R?7DZ'SZD!0=!TE1X&+[LE&X=L@DXKDMG, ++MLM)2(`6S<J<(Y%-%Y182F9DYBMXZ4EAZ6+`5[>39K*JE2QBSM!2&C>\24002 ++MES"B-&X"2P+\8A^9:4,A;Z\Z]/C8\A\CSK]PR@<4E\%2*F*@AH9*0YR9%%4, ++M!ZE.B/M#(]`@HF*&D*H)IJ6B!I2H(B(::I@%%%6&U$G)+E#,)'`%@+65%`TS ++M)"/G0-5++!(T,PG[H-2RTE+++!0TG)3Q/(:0#"'09J8B`JJ4H2J`DJHBIJF) ++MIBA"!@9=/$S11.0TAQ(JJ"B@HFGZVAJA))I(BB"8A(>N0Q::3??9?D3WAD]H ++M!'H78Y3$KPI*/-#OHRB:B@J@8&@(F&(CZ]8*"?083`LL0]&EJB2EII6D*5HH ++M*":I")$F+_&<R)/2$PG.N*IB`@)FJB8_#(UIJ@(*&F@'V^8@XL#HJ0PPIV-4 ++M$6DQ,8D:4VCI+PJI30!WTQ%%%6,NPY0V5ZOD;,CH,31;&9(K`9-]V'D%"15) ++M#0I$T!^Y@1D6>:FAUR2OMB4T(M55J;%,(4Y(%0+")Q*XBVDCOMK-AVKQ7_3` ++MSDD,_7<MZO8_#;QU]=H8]-/0K/UNELX!]?X?,?O'ZG_%[Z!]U?'/R?Q(`^?7 ++MXB!'&(6;E])[A#WYE?=P!^)KO[JW?G'O9\^OGY^NVEY#C^>^G^?>_OS]?I#J ++MNJ.>[V?GZ[\KWX[6`-_/U^/Q\Q?D^_/Y_1N;\!^LM.V?2NFO/1#'G[.`\(P6 ++M=*($J:WM""3`G36KGK%`-H5#C><(0YH@\B1'[0^T15B'G?Y[ENV(%NA@P%$Y ++M%BOQ7-XO._OD`D5,Z_,$9SUX`B@.>,1;/R7E]K9]1_BIZ/RERCZ&WTWB^4." ++M&`HL=K7BZ-KJZ)7[&<^2Q]*_I!2$7XF0*#<D^:L8VP2S]QDA^-.CF#:*B""2 ++M3(3;_H2:#$CJ*='$]5:I3IM/$ULZ:LB<<*7QLE\]@`(###@M4;6@K,U6K8%9 ++M:#1<,4JWGLSG.,SY_`[Z_HU=W=W^?O\]@_HKJ4V)W9Z3Z'_0-1&`/>+)*1"3 ++M]93,OP6B#L.YY'SJK.P=51/L[<`>1U]SQ/NK@3/7B7"!-@5IO$+W+V4W#B0& ++M"PM;+@6%42+$"T=P0,X8UA`T;PD2&4N6N6P0)F98!+8@PL.1$(#!#Y(0.0E3 ++M,#H@=<0M%96-X!"B&V=XP!(V,'$85O2Q<X(`=,0B(B+@#D@P,$5-<*'2@!P` ++M.0XXY04!!3HQ*W>6A0I1RCH`4&`-60!!FI"*@=.4.IF!C!`LC&*A5BH"HD8I ++M6"'D[;B%`,19K((J^@3QL:,BI"V<@78QK$H`T=T+'#W^^HDZ1;V'$#!R<0!" ++ML``P-J`!/>&,DSOKIAA6@8L30@:&5DUO1*@$_40/MB5.JVS,C1(.5`/W_=^) ++MFR=G88=3(C2$G-S;G;IE.86FEI8&PR,&2,`L901?<?+/>G?8]?P\/-[X?2(O ++M95`9!!`BO2(01$&`""%$1ELC<PUHK*U69"O%),=P-7=\*`!/V(A0+L9>98Z) ++MDD601F7L#%F1X5`0?$\&-W5N54]=T,),8-NZW&6$).]!,=OA0O/'TH@@0!A8 ++MR#SSV5=:2]EW+KP'$+R$:]I1(';O;E/WN#M1OI<N-<S.=5L=?*[FV\,9,405 ++MM<;H&].]-$,>$81$TUZ\S7R4+V"K?A`]@@#?<;P;5VT.R`9I%`7JFJ:;(.WC ++MN<0NM2=ZD9T>-YX1Z?9XZ?.J27"AB1'B$<(K'(1."T[J\%*B+$U=`DPK]L]0 ++M46=*XZ""07-2M8%^B%<6.V8O=;O+:'56$>.7=5MUB1'A`G9':W@'<U8D%U?4 ++M9E=`&2].:J&N]I`FS)/G,WP#S@@*",?W@`=7;\.3Y;Q0J2I4K/DRY537#*S% ++MTO'3WK5_!ZO*_#2;!8["_7Q?C+BI-3PWH%&+]W7F^ZA9@CS[%U[%`<UJR9+T ++MVN'7?A&8>0,GU"+&X>M<98)HP313'.5KLC$HLR5H@(!;U\52K)D->[V6K4$= ++MRZ&#S\6@2%@.'T@-DG#1AQN/$VB.CUC*0W+REYBC-5F*E$[DI39G:WT`9UX1 ++M36BLZ<]GF/$>4&YOA/=N2V[:'G1R:4\!/;E\9P3Z+]7B^O5Q&/JF]F7+;&/* ++MN!)FI\(%[>U8)XO37@LD[.0`-TU;6:#3S*6^X/A/@'>;;ISXUQM9TZWF*0#H ++M8#F2*S"*!PD*/6I""8:NO.ODEMR+D;([P('?Q?&"ZOSNNI5<](:RE-Y3",DF ++MA3B=!NKO:U_&:5\<25AJS$0J#['U2)F=F-3F)Q529$C$4#/3N[TBY#T&(BQ` ++M,"&4AF=KT\A5*;O::MVI&WG'=-K,[2JOAA$@0;L-,TZT%K,W!.]PZEVRV[J7 ++M-#G=ZY6+%9U8RSV(39`%"$4(LA)6N9G>1$1&S92YAM#<73LWWC0FG=X)RPYA ++MR]FRL[J&#CJ>XVJ34$;FZR<4TFR7EO;!ZRV63:J5)!?/LMN9GJ%*7/=$,UVS ++MFA91Z=WL)H54P`-QHO8XF>MYQF=VNLJZJE/`AJ[W)VI*YR.:#)!(X+`:H[/2 ++M.&X2:2G5\BA$"QX'--@Z8312!=[()%YF)+TI766%M68%^Z00Y$*2<5C;O*@J ++MFS()-_('.ZWM(JRLX@;)8V])FMMU!NBJ#(TH-+D$ZG)%V3H<"`%[&3X0U/BC ++M[BAQP1.^76=FJP233T.HB(`$/V>WLJY>*IEZRPS!U!<AB0#!$F@85NYI2VD% ++M)E$R9,LM^B*,145`JPKN2R]4DK@75E$,BB3R]Q5[8=%1B&N@<5)Q48NW(&R0 ++M!9($F-M+XHRNKG"!JYK>UK:`%(O'RE7L^NSX5ZQ/H$2[NPVS,^KK`,1,BKKV ++M)YR%7YW\`)`'83L',8GO(-]6(^KUY&WBFHS#X1*!0BN=;HY`H>,RI1,4PR*7 ++M"\JUA!I2+0*,M*-(V@RSBJ9;;9B4A:"#:%>:DEW3)-TL(%":-T5@OE>/K.B7 ++M@5^B.,""0,(`C3$>[N)!/E41[#)RB2,..74^H=NB[56E08VI)()#;NZ#X1"D ++MWU&"R=*H$(>[A[E28M'#QH,XPB=FY$G2$49N3B4CJE:JVT6L+JD58J3!R5@! ++MFU64P9-N$`0:2U)%&DB9>;(V[D;9MUB2*P#1L<%DIBFF;BO0/,DH68(GU7LY ++M@$!"CIA`'I`@>3B_)#76&=N9.-GC(RU>(FJILA%`EF2'1.+95E5Y.99EB7)0 ++M;*C6#6U?>`&Z:[@VE"E'&F>%.I]3F29*K.\,[C.:#!()\*(V0@"_'/3E#R&8 ++M=E^D51&:"N[>K#KC%I:X4YZR`B3:J(70V9#*QD+I:@QQ0QH41EET:H+WJX`" ++MJ[Y$`!+K]/?-NJJORA$`1$?\>[N3?.EWW)#OU0I+(HF\RS=Y*O%F9<T9$HHH ++MZ;S*&:GJ.9JV[N1>V:"2L@3;:,G<A$@Q/V9E3G+NI\<G:.QVV-I9<Y(<&U+4 ++MI\;M#D-@JAG6*`(@1%P\8"GHO+@"MB+F(@3,",DY$9UN8%\>4)6O.<.*HN>' ++MBJ+QFD1QC'%)"4E$EAIG;1N_W%S2[5T.<NJV,JSB\Z.VIKV\KT3V#CM4K#E6 ++MIIZ:FNWI;Y33J^T8YPS-,2*MY>B:XCA:Q#+Z7<W8[@,.=5/0K4.MDWNU(RJ< ++MA/*JU3T4AM.\G01V6IK1=N4)V71FQ.;N(MUFA;<Y+W-5\GBHD=N3M8S68+,2 ++MZZNY2CTOLTX$.QWF-FW>LFC?5J&7G*\[KZ]JDK&WNF15.R:VJA:L9V=FU-]" ++M",W=ZJ6&9G5<JET[G,6<O+2>8W=3LOL3=BR=T*JC>M8ST6I$LX.Z:Q;M\;J3 ++MUCFDP=75E0)HS(W763HRA4AB0>H.=G`]&=H3+=5<S="BB$FB1-OKLJ>G"-U7 ++MV23M;--IE&:6&TFT4<M&ZP\-21QCFMLTP<[`R,(O9UI#CWKJ^/$CTKM.)7C& ++M8A%%2:G$(22"H2"AIEAD":ILA-ZY$G.G>IDTA(,F97&&R@C0(ODFPP4`+`C: ++M..^1WB[NJJ\WK;,L/)!EA($C8%")[K*B.H5-\.,YF$(IFV>+5R+FKE6!AOED ++M@[=XA7!.V.%]JFWQDI[:Z65U4;PH5U95;>#,FSM+60*<VK&<S+XZ<EM4\$ZF ++M+F7BQAW57<S:+#I9-HYMWL%$$(ZA8678IHZ*5:YUNA+-7%"L)Q,33E4%M8&S ++M0-ZM9MH.5@K38W;V\0R3,;U7>K+J<-9805Y-!RA88G"*$C&A1-H48`HN+4$I ++MET,M*DT9G;&N-#%5A2V;,8ME.@(3X00[.8[OQS*P_'_#:V.]\6N)T.1*E$86 ++M8,1,@B:T]&25JN2U+(T$%%"$=6B2M.7Q?S3%VJC#(("?685=*'6@DYZ\UB_M ++M]"U\O5:7O*N7L634F/7W\P^)K931(]OXU<NYXZ<)K[8QR>XG@,CH#QH%Y;/* ++M&XBP_E6HL7J$]$N0]Q"BWGH.>455K]\(^98A82"6$8S/J?W['8-7J>.Q^#6R ++M-':+(9I7=D6\YPTJHEA3#5+Y5>]PN)*YP/8DIETGL,7FDA>Q/(I`DZZ.CE\> ++MDYW>,L9XSW)L8YOSJEFB=FJT7>%W40Q>JLH`L:<-=\USB&'1VT44<13KV2LO ++M!E4+W+(O%(EL-RE:W4+I!%K&G7N7]UB[01!LA,^SRE[=@8;GMVLTJ(`LQ#%D ++M#/^'];P!\D02%B)33`QE4,V342&'*]:7!>D#]\YQ_-Z9PH7BD,1N6'Q@.6WQ ++M]`[!%)2L1,YJHJ*]4)46"*!TH@.U$AMI>U(._?&%(4D4-4%)2)2E%%045%!" ++M#0Q-#$%#0)2,`A+P.DD2-,AA3BP(0H13$0PH\_P,X![8'HGS*:0(24(.;45$ ++M1,LI2![0AX"S2-PP@$3033`0$(;8C@=9*^$[T/)Q')W)%.R3F[[Z<-5)%%E_ ++M2!0Z=#L7)36"B@VVG6V$$/]KA^)4?<G7X%A,B')$/NE^+L4D?&*=(16SII#2 ++M&@Q);!11I"VII'2FD"J2V1Q%:+8I6HHBDHVU+05D.2A9D#('.4YR+U+X=._? ++MOS_D6\N7&/XWKX;]$SZ,Q*$DGJQ),8E[3&&41L5&]J;24)QE>%B>9OIWR@8T ++ML0DSOXF72-9>3Z0I(^`G3,/TIF_ICN*/-7&R[R?6[$Z7HIGO5N5FE*[#]-,5 ++M+VMMDEFE(R[F20.?"=696"*[S9V6B.T`Q';C8GI-9_*![/9E"![Q]%YNB7/S ++MGJLL3\9:K#>5/4G"2VJZ1TSAVB0PQ19BB$1\MB'N<)L`5YA#2A3I36V$MG.] ++MW56H9P7>A4:=V%.TJ>K)NT*P4T99=SXL+4&3-)HPN4W5-DT,M*:O>FTDNAET ++M"EA934TZ@]TIYV^<//)D07/'(1,-ZM%B/'RA4W"V8(/"Y%N8.R'!3[R$,/WG ++MK@PT,)HF0`/-:A*)J"@"GYE.L\\+!$1#!17&L"G#APB:"6BFIX;3J53[YX\( ++MJJ2(Q4.D@.]LL`G+P\FDWW`R`D`^\WQ=,*&Q&+SG`>R%/%QFUPF`<6DF*!1P ++M!?$0O7'5(F=.TTAD(H>!GOKBJ]EI=>[)68XT9++:CPM4R0+RU(`GC(1I!Z^X ++MW84T=$,5\>=F=^=,V.<=/&Z]:^I,1+!\WFKPULW;<=,[=-CH3:FT4#MVOI.E ++MA-_Q$16H"(^>V^DO6'R$_$'5.R*^*R!`P_$IF?@B`O<$R1>;-5Q2G(BMP8T+ ++M9C$9;>;LU[6UYR11PO5[=]*$4M,\PQG?308*(,&#HUK24U#7+IFM\Z8.C229 ++M,<<6H%-2,2O;,0($YDNNUQP"AA["0$P!A_:@)`GV-@0@``AE`#RZG%P`AX\1 ++M<524-B-@A0\LJ[>_)EX;CJ6320!XI:4<)3D;.%`IUP=\ZC8(,!AI`/-`=FL2 ++MXHL53OLDN)<B*:#K@$\8QS[L#CGD/*B0)J4D">=6S$(;[6\;VR[%H$M[^WH; ++M^?ES1:20']#\._4'.8.HGD9\,FQ1(LA&(`QL8E$\QAH\3NL"&X2B<CGS[^0T ++M?8/#'9>?7Z="15+&'\BX%GW#<VA,V1,U(Y.^S1<IFZG@'5:/7G4&*((I:!`& ++M`"`-9K0A/]SLU\MCY+G$OAGK\TR`!N1711[:@V:I:,44+[AT(1*A',JGQ"*\ ++MY!&+8^#>;A[^]W\<^I"O89B9+`Q(B?@'%Y5'-F:T3;(HTRB25[9A"5A]_QYX ++MJ>?IO2\C(]$(`A@&96>X??=#!UA88E8AD?OCT/0JH:=UE\F/9#H(8AD;I.(S ++M*GG@Y/*5P.C+-,@3`DTQ,3$_;`'UW1Y%1`X?&A"F5AE'K^[KY50E*3VP8F$\ ++M9)@"9A@9A2&1)IZ\#2'I5,5,!A79D12=61$C<PB1U"BU1=JT1Q2LA=2Z3W*M ++ML'`SF1SC+BB+).<4':H98HN=TS\SQP!(6J$UTUYMI?%?+_I]%`MX.$UU[5SC ++MTM2`\-6E2RA\?4NI=&G7BZZO=.NAY7).Y=9/>K1PZYXS[<GTNT1KU'=%5GA_ ++M8;8.^6%>HJ2B)]?.I%1UG-'1V>F*.*5Q052;?#>^>"Y3#-#"AK5[&@G,RA1A ++MY!A*0%`(5^9&D"(10HI$8`KL&"D1^T.Y3BQDT41#MBB(&-D,GP@VEX8=X*4B ++M:!H*2@I8BE7U(IH0I6)*$H!H*&DH:1/2RG7*';*IY)0RW>I;"*;8]\'DT4EP ++M4($D/PE6E,28JJ(TPO?(G>;X;A""=9QH08EJ:0DGDD`YMV'U9;>6=MI0$N@6 ++M\IF`37Q3*"?*&>_F&B$*ADRC-\F:-2#*H\2\N>>"!V(29XV@2JZF_6W'-8SK ++M%S/-1E\&%2^Y@2'8X5/UZK!\K],SZ=U'9JJU+1SX$@D3B&7ZR!^T":C$AK0P ++MYI]?0(@3KF#:7\YPT3==]6/KX[IU)NIVR)`\"39KP/(.K\_;XOGZ<33MM%M& ++MML&K;!0Y.=RF13.@P:53(7,FVUZL$Z0>H>E'Q3NY:D6II1?3X]:@Z6+YI$3O ++MDT-YX'U2J:@AXDRE%.)Q:A$[@%/)@NO#$'S!!H#!`P0,IY+@'PP">KU8`>;K ++MP%U>8])G1)15%Y:_$TB;27U$43114%(6!I7?//TD[==H4"D2D"A:"@H*1ITZ ++M@+""R!D:7\,>7AY.W-Z]N^?E[QAE+FZ$,('\?<<`Z6"(V$']V,+Q_C.!WIU3 ++M\W%'%-?;\>R/IK)YF7>K/2Z,\[;&W5B-V\_OE)#9HO$$#>TYOYDC01AB1;LN ++M=/=K4K&OZBZ#0]5_7P0#"G+R5?63MU!1#J1\H5>!'?Y<)'`PC9^AM`&99F5Z ++M:<RV)U@D5"XI'SWV>CN1<%7$SN$4=LQXVP1$8Y&"DUZ3`TLQFF#XEL5W+S-^ ++M`3SF&"I+6TJ&@%_.P4%[,AFT,L1=-=D*'PP;3%O83C4Q6,I0UJET8:D?<*<Y ++MO]PA_24U;1$4%#]+UN*!TO*"F\IB!`NE30`T@E*T@M`E"(T`0BPK0"I$`4@E ++M"D0)!"D$HR$(E`E*:4U0I30CH1Q(:*I`TCH=%"4!$BQ*Q*N'`:'P@0W@0-A) ++M0._/#+.8*0[<C"L4?"03T>G!VB&"K"*37O[O@N&)`30TRM".OJV]737?R[>[ ++MW<>'7W)K?:I4Z)3E4:E-F:VO8MUO`PA%A>JPZ*6SJ8=6'WCJF&&5^T<7$!1Y ++MWO?<>_R!IDSD(?IZ1E"\2_?-52-F5VTN3-LGZ6FE$11UJ4N>JW"FNDA25W3S ++MI.@O05-2!`@=4Z,W`G)DR1D+SNQ+.)I7XSN"[GWEY^)J$;Z%N(@EPMSV6;VR ++MPB$02BR8,B(S18WD'O3UL.D\0DA)`BD4EAHC6*M+7K9N2S(HN=[VXG7XOGQ@ ++M@G>)>>-0('GC$)\/9Q`T+'I@4WT)B4)(=Q@CP!';*FP$J7`N"G24%\ZVC$!B ++MH-E;\,8.$TU@O?";C/GVPEE]'9FN37JG,QPDJ+4R9QY]//JZ>=]:L'KURZ7] ++M<HO)!SKN;6#)99*2GP@-P+?#T\M@]+L+V2(<Y]-NL"3$WO>#4CP_);BPT_/! ++MP`/5<P`Y'V:Q7*@H,Y2M4-$K)4>?J>W,V.FM&F<[))KT9V,`85TDVDE(%=UT ++M0>-=+%O?=`J!!CRG`O%%U$I`C:TM>6">6&>-6E[I/EE&[,)'R0V4ZWXF#W)) ++M,1%7&+(*D-F4@][-`<\N/LCLGU.(^?,O"C=X')^Y-CLJH&%T)V!`>)P@?I<^ ++MFX?1#F;9R+,#&CBGB@1&F(1[`%'L<=!Q&!!"AH@P-VB@MKB7<;CMH(JJF@Q1 ++M59PQ6L#.4IS[>-;U%Q$DDS$Q14.443QRO[,2IA:B=LLL%6[>=C'5\SSVMJGB ++M&MPN;^%2Q9*I60*1#%$*$\2^7B>KK7AKIX:8WR6.1*^D)&:F?,5/5$YB8JJ4 ++MY-VYUC=73F.Y<R%54H9TXN(+:;,Z+Q]LJLPYO.WI8ZS9ADDI\IZS"V^'(==E ++M,WM2*Q8.3/"W%NB\P&S,]]>T3/DQE;R4S1=S-3G"6*GV;V0^VF\IA<]=M.^V ++MS<H"]NKZAW;W3=VY'2LEG=73F(YI=RA)V>JJ[BJX9.F[D.R]&:;JE9WEU$AF ++MLS%5:$;6Y)GG>LQUMFZN!J^,L6_L22`9S(18()LNOO[8-.V'.V]XU-Y/92C[ ++M=["<X%A`NETMDAR>VOD+%3,,E82COZ[PCZ5B)-5>G'(IR,>#Q1BB3W]EF@#B ++MU#S7V];IS,X8K#Z&S=#9T@O&68(3,<.K:1PDH8,%118`JDK,=O3&69EC]`T/ ++M?BJ2C]\/X`9\L]1SB'D,6"RD+'JX>?`K%F*W)@D0(E^^3"GNLQ21/CDD?))) ++M!J(J95=;6>BEQF))4CFJOG6J4SW:M:L]TU#JTDQ$4).U+ZM9]1\D]=:*C19% ++M2O-V[<]>VKCC>37=TXS]EK-ZY\-'C8XIDVSJW?)Z:]>&UY%DBCHJT("<86T. ++M'M6"LI>_9@'<<_1_.-$3BE06ED3'DWO)ZG3ZFJ96@71G7<0<'<\2NG_9Z*<V ++MDL(^9[KP<7/I?'R-#\1?&#UH?1=\J0Q51$EWCC8JJ[?@W,/*B>1,.;4Q'`VB ++M2$IJ0D%<BBB%*HRB)3;UQG0CCUNIAHY4)@'1QQZN5ZK6EUNLU44+)2B`G:"0 ++MG\"K$'^14D/EA_X,Z\<=BCAMJ:(8RQCGGJN666667Y,7_']/N-(>.F;:)T#A ++M9OB6Q`\DY)F5F8RE0D8ELF&,%PDQ!+B!*//G%P)=)!M:P0$0"VM22K5-9-!O ++MH%S,RQ2%!Q%Y9-S'H&:J+$LRW&QNP;K16B8"2R[\+GN>"LFK"WI<"=GK+R0; ++MH"S6"@8F!`=AN*$=0$6,YBHFPJ@"`(X*^$`0)J1P:XUD4,`M3`$!MC)$NA<0 ++M)D2,P8ZN`XLH"5>L7D$Q&9?9-G2`6QD7ET!:!O8F5(T,%R+`YGLC)4`1W1%: ++M'BT#=ZICJB.AJP`QET.$]`A@38@`*>N`:%9T`36=8R1P$W11B^O7<+>#C8D? ++M*G1&T(;FNVV;&[TQZ<.VZ<"``<NB0*'-50+ERDP90*TP`S(AI`-M9,](!G;, ++MJ%BLDA!-_U@TOAJK=;?%[\YOH*:0.>>,<7Q`F)3A^[7,3O#EP[*;AN;[[G&P ++M(;<$[)W]J<E=N(4">!4)1(5#KZ^OC9YY@ZQA02.!`",@A6("L&AO)2-WJPW" ++ME*CRK;S!BS;JKS;<X(L,$6)20*'BD1(+!DA`X]U6[MZ!3EF&[-21:MI@M7,I ++M*K0N4+6#N=/,S;'(C$07<X!D@5(4(9?%SMD=I?4*H`C#4XIIFD'+-Z\ERV9H ++M<F1)&M@OJX2:):1+2.X:T]T"FH0NQ,YB`6VBGE5?.9'=O<#8%!6)2H@A&9RE ++M35-V6Q1$D,'LIYS&2-I$%%2=04AMDC"@R+L3*VKKD+P32!R"($*GQYJW="35 ++M,@J4<21:#?:[GM?2*#"I;4Y8RX&V^[;JK%;UC,[@9!VW<G;;NL<LG%!9U$3) ++M",G")U!9(&#C,44N.I!\E2!+D,5UPG89@B4L6'B,K!FUV6C>5.L)A450><Y! ++MOLGM8(OC1+>[,V01>!2S#GG<7K'&XE:`@0QB$@R9-KB.ISJZQFWI,Y05;J&T ++MCRL77*\J;"%(=80EC%0LJE6(EF1+S.8%WI("G.TVJ*(*".++$]4@\IN55C+D ++M4+8RKHTVDB$1ETZ'8)I6>V<[K'!721!4(7ZH:)*1!1'A.7IZEDA!#LFZ'AIM ++M@I5D>+$\[G&C>9,MO.,M90V28(TWKW4G8=69>,IS,W(LT0?($C"2AM#VN%6> ++MJY][<HDU$ME$++6W*JB1[FB^F[I=;DT7P.=QSL1P@IT)NK*V0SCJ*FB'"<OC ++MTT+)Q4%LR%(9HX4@C01BMK#E'<>4%*!V,@9$.9[76"KG,R7O`R)[B#>'M(N[ ++M)M$]>41ADD[BP=;O*`P$!$'7F8PKDQ9(HG,[3@[+NXJL[03-3>O#?)TG=VQA ++MDR2"002=%7>"J$U=*<OI5N4SDFMH\+'"L53AI3@V5-"L.2$IHEH5W9))XCI' ++M%]5+<1RARB5F6&TQ>D.2E!J$\9.S.DW(08N;-]1-+IV:;+ZGO=2TB[.3>B7T ++M1`$$E5<A2,:[=)TB[G+6#32A(GLHMC%V+ASP<:M,JJZ9TQ=$$SB9")W+K4>$ ++MS-=NT$0GIEEYG)XJ>98D`'7C2BP>U\ME*R4=\R(G<S'+O&$'1]CLV:`P6[-G ++MSG7H&5-S"G)E^/+,8ZALD3UH=7`I5`%"PO<!`&\.T7L&6A2@6`(`*]-#*`DR ++M"`>D2&/8<'39=E3;LCMS:(;6U>9%7P=(1)Q@CF2.3!(E((I$$`;,,N,W'SV) ++M[=V(OK&,A%E107!J$@$,AE$$R6X,OJ0=9*,KDU([D+H;)>\ERY:',$XT+5RR ++MID2"P0086*1<T)BM:W;G<91;-3CK9BSB55I>ZA%+'#15&]J:RL$QLVQG(Z*C ++MC(XS9:UV43$T-JKIC9S)`L2!T0!9+Y6&+)*S)6S(O<B).;RNI.G%?;/<"3$G ++M`Y:!XN'3"`*4+ADC,RZ`Q6-<Y)>G"2IRG0EBJLK#S@W#FD)(<J:0W;G&Y)N[ ++MU-6QYJU*C;J8HL7%TIIHID668)V2AA<C$K(P=*S!@YP(`H[&U>8;B%B*EC+( ++ML@S,\FUE3>)LO;%)*Z"8A8TYA629"UJ\+ME)$WRN[M+LDFKH7,5(O@KD4*72 ++MC0-!:6#B6(66#-B11E5,M39D*I+TF$2*%U4@R[['9[IO*&QVMS,F\J+)F>$W ++M6R#+B=CI4&9$%E;(N^LB),7NX;D+9/"YD;)LA);`@=RR:W)N:A68F12:0H.4 ++M3<\DR4T,L4RLR3!F.)PL7)E"C9G,.6U-6670D.18E@LJA3DIZ*'L`'G=[Z>: ++MJ?2*HD++\R5=%T[&DF4CW&+JJE0K.;4RT-R6K>1(,3:8V\+[.`DQ$0C`R@<7 ++M5))10?/I4@PZ2Y9>R8A8"JPY>T:5Y/\?R_;T0(%6K@H_%]3,_/H-A"09(;=? ++M&*J\(*9$I4ZREE5,X#C,X51C",54YRQAJ3DY8JKMU..K..<F@29QA`S@PR*L ++M6Z(DT)F&<-Y.9F6CES3JS9,V<N[%W=3]2+8DWF-DFY!FT.I&2#HP4!,"1T!B ++MX&%P&ZS*K`N@,`Q!B5F59-3)(S[$"(_:0/DK'??&6?GJI"[Q5:N78=_&9'5T ++M2.:4J%7=-"Y)G>J\Y8H-5=6:NTT>B>E0[[7W,YCU4ZN7(?2'2D5PW*Q;TC;K ++M-WJ%76/*R53?/@-JJPWIK<Z;SDAQ(PZ\ES+MW9.9=3(7;;-]SL=>ZR\HBUAT ++MG>1[%1BBI&<3(H%&E4TKFHI2R=67QS$]O#3I/.T3>TV%+/`3NH9(<MU?=<WF ++MNGE4#:H7K@YDK7S%"75SUH$6GA*%[9)+(=.T]0[NP/0G3%[N(Y0W>N>Y00>' ++M.5I23ZDDGTS)0FSTM:<UKD`LSM;=N<W<Z;V9&SI:=V95/GB%V\-##K&Y-\+= ++M24AV.WAH;FM&R+&:JY\J9C;BC$761-EL`!"A$60!M=3N\63RG5%9TC(`RN@8 ++M'8.P<R.L;AZ.,9O>NND/&R8;DVGASI-*.:0BH1P@B31@,.Z'3L7>2",'!':7 ++M<879V14.@9#>B^ND(31AAAA+I"!3`S0###+)NZ".'LF8YY-'LM<\Z>:K7W2> ++M&H;734F1/5<Y.JLU[UCN+N\R+1IYBIMN.0DSU[-G,ALYDIV@ZXX;*BZY5E', ++MUC0@]2O#=WU&=E"<%HEEO$LDWR$S.PUSRL-0;GKMT573+&80*N=@;C;,K,Z$ ++M`8B1?*^Q@L[PR8U7;WUDA\1Y5FGBG2Y*GCYXU^QYHXM2*Y71F?PJ)[LU-AR8 ++MRU5BMHP"7PUI]F]='L.:#G05'LT[&Y7ID6W,48A4&G(Y]@WOE]J]^V#/5J5: ++M%?FD5(*LI$@HQWB.1X_<\#7:VG@5-?7S:,>Y6QV!$M01"7Q=S8BW,"G\<J*= ++M/X7DGWV*"/><$E$11'[BXJ1$"/Z1G^M[WEOA_><#C[^;8W,U#@("D:"-K(LV ++MWFJ<636!(7IU7=V5I;?6<9OJ-YA>W4]A62\Y5."<_UCIM:];Q+Z^'VV$1IH^ ++M745)-W(?Q%C/8%<(DI45BORXUO_4XZ)!.1+2*"28!($$BX&C'`^>)#$1D"N" ++M-L":='HR.BB@A-F0J+;*Y8U:`QT"AD_+I;!#H(A%")#HR)I5/O,P!3[[C6O" ++MQXDSC?$T&Q8-^23.];8X%S[V[7;B29N6YF:V:NU9G-S.W0"5N^MZM%5+(9BX ++M0;;8",0BHR93#QXZN^<",,8BXJXN875W([.J-L1<M#;<*MLZY-"5(4RF5125 ++MV^O)]WRU\?J^YY>7KYKUB4<P>B&1:62B&&2SWH0S#!0-'W"AOY_;[25^R6Z. ++M_1R;K+L28,68-K"E;4VR1\M2@J%8I+D2,#K2K5I8\&9,R_CO$56DRZI.2:4G ++M*0+%98F]4F,<L)AY((L*..D;*WL03G:S!5G07V9+%TIS0^KEL-TLPVTPAR=2 ++M'M;\K)H4A.1YS?K6$!%'J1>EF=)G;%6T,E#)KVU>JM1,D4TY!=KJ"X(&UD@K ++M8?&S-E6F=-,*MSIJA,IB1SP[54V\K&B459"!1?H$0&[JXVO3N*S62\::F\JI ++MFS=)`JC<H2#2R[@EJLY3_4`09@#Y[PYQ_L?'S]L1,-&QIJH@DMMK)5.C-$31 ++M*1]1FFF(DBI1%<<NCV#FP^W,PY]Q*"2!(Q%G5$<J'4'HX\MML<KB:'1.5F%R ++M<R.L/#JG6SCCU"`YJ12R+BN*J."*W/M\_<[[YATG;W0B2EHX+&X8;=[-IM<T ++MVVC(N8N3[?3J[ZPZ@-%%QD!12BL6("F*:J]B8UT.[A&@L!WG&;NX[VGC**"C ++M/3QPFZ[\<.1"QP308HDWG#QXKJ)\)1,?H?C_4$"M?3V>K+QZ?.>W>_M$H).> ++MZ%&=2YX5=1",:<):"514JIBQ4`Z>HOWA8N5`@0GLS\GKDC$JDL+OV<D*PO@G ++M,1K1=`FJ$.PG(FZL51R?H[K?%O3U=EXGHI4I,UJD+"`F9$W4$$&+JI$/;Y;G ++M<K[?G@"1&>O=3&K:[XV21Z.M;=C#?G4=2$D))-I"LD(D.!T5/+..9SPPY?$N ++MC[QF!F9WTJKV,DB[AX/)AF;"KYFX25(K@+@+X^Q]F/>,S%S&TZ**N0<YFJFB ++MK62*\ATGVD-W)?'#D43.C10255F:A[4HCWC3YU.]Y;J;&&BRP%%#^W]VOJRF ++M9I`30$@PT90BM)C?KF]/53[?>#AMG6(6'K=7G3@Z+%FS96J:&":S/7Z?8X=S ++MD\N3-I@N0"GF9[T=$5HP,4//M_/./'J>0&(IMM:"@Z@==WI@Q?N^WZ^CXGR* ++M"S91544M5)2H)74Y]N'TKKMMJA#V<U[!*A./54A2@ZI0#"(/J/;4._GTTM[. ++MF,;7VRR+JT%\T;AW<(*)2E8+LH?Q:A.M@5V[MZ[<S#FKE"J4UN;*H3RD[W2; ++M+O.=;C9TSW.5/NT,WIF$YYS_$6JYJ49$\K8*W)#T><]",9/%%R6W,B5K+H8G ++M'#O>>7/0BHHQC$A>L<YHC1H@TZF$I$VQ6C&V$QL6VUB3R?N^\/'@2>G?,LE- ++M2$]6)>X(G7:\R,8``H?5@$W=QV4WX\$/GPG#OO<%%&.3A=WGY\.W9..+T(LU ++M;8L(A%+,8X(55<(_;]+QX=+)H\HUBIQ1CAN0<&9)"GS^YO+WL*X(XB*5SF8J ++M"ECD:*:I$I&K'EXVF663#)DJJ!5(WXX[[[>OEYRU\/03BT1G%625V*DM5%F& ++MZ3``P&#"T84,/(M:2$[Y8\,7JK[7,6],K4Y:]=\L0;WI')9TVUD].D4AR=ZT ++MZ3;-&H[BQ;R8NZLRE=:!`T24EM9<X*+J:E:<I[3G#PG,5O<0[3+]L[JHG",9 ++M2=+R_D#M(CP&ZHK'CM(U5`9@!QPFJQT9""0H;\="^B6ML-".AG+R8A>&^;D` ++MC`114:(B*(O@QFTOQ-'":A@F3B404599VXGPX[9RO,KSAHTK$0JBB[R-)PN2 ++M-(%".)2("CGB?'7FVY-!$X=GE[.'9X.!T1C!.GO\H"CW>GI]R>E]P47`QHUI ++MI'3B`,_P^.93G,Y6*(JP]MY,J":<%(+F7&;T5JB(S[-Y-ZFPFI%K:7QY]]YK ++MKF$Z(./S^GQUFPXA)(G(EJQ58YELRB1,'&%M94L@BR*AXG7HGGX\\[UC\>8* ++M.$CVVKR&&!'7'%DZ46[8'B<O(9CN(B!?JK5;5:EQ_9E(I)9]I3D618VFY5\A ++MCIS,S)U*Y6YNGAMYS#L[R>XR<G@MFS=3>6V@KNP5+K"\JBU>S5X[?BO*22GK ++M$]Y,RE1DAI-R>B``_Y/,55):G&#'SXG87$FTKG+EBD"*;D@DJ:NB3[7)RV[2 ++ME3D=!W08(1[_)WTP"8)/((@F`00?:Q)%5-11\P@^?/>$W3.:A8*HJVQ8-V+< ++MTLVY9K,>`EO!0I9AZN8-TYT@KA&JE-T.!P"2?3U^WZ^9SKLF=EU(F5A+DDR: ++MUHJ(KK(:+=$U6E1R'N?5O+K:"1@'V?7S[.LV>,D!.\[A2R$0(..*LS(/K?9^ ++MIS6UZRSW&"W7G,44F#1S:YGMFAX2&JH(@["5I:&"#FS0\G0M%DH262@0M%_E ++M$]-O38S[VT\O/UQ.F.,A1-$OBNHR3"8H(4M.$EK8):2;%^I!('+K^'J:[O[+ ++M]N[/TZ9[)DNCI5RJ.S#,#JLN79GL0:%X<4PJ&54G#.SE9=5CK9Q]V8"M=T,& ++M5BY[.@T:R*8NNSLK;,<-!3OYU;E'VBE>AW-,RKJJ;NJ<E>R6IFMI50THJ8D2 ++M<-51>9N'+>YI9!N9<DTTT$KL6IN#-9=TE-X?.G9UW@(&6BD+(<@<`><ZWD>7 ++MOZ^)JB8K6BBB:&MC3-,6BFC:6P5"T5@J1<9":>@7)^]G*^\^-5!^LX)B*&CK ++MNG%T51V4U2%=7?6><.R510!R/G]_'Q]I8D43;!QD)PA$))@N((%<Y\W64X$X ++MKS$=$$I7!4LA!3"GK]OU?/>=]'2(KW$8*F"D=`FK4UAI`6)7,ZX(XGC'3G3O ++M31P.6FS`:TS+8XD1)%%!$J1$LR`>?'W/;K-Z9P*300BT0U[^&=3CGG77KIMU ++MF\F]%I`HF187K0!9%)THH"8!A3!B2<MBR'%^`(!`@56]?[\>?\4<S)^6L$UK ++MY<)OC058*TW#Z9DJ[L3R5G:F1Z,ME704W14L;:)7@GE)-\0BT,:]4V>/5VZ* ++ML2:9F:M*G9*>@Y@IT;R]W;"-.KW9=[E4P]=SO90P(3=EJJY=C1!*YXO6O#NU ++M:=QCWD&)%G5BE9A3R9E7FU=[4K7PI+109Q&'$AF<V1-41N=/#)0Y*PT2Q,H= ++M.[+)6:M"3I&JJUIXW#D*^2)2("!@D%J"KC['ZBBJ)BB^-J"2VQ-14EL[*WNM ++M)M(EQ!1B#+M;(9WO/%*G!CHJ,44N)+V"H][2YB\*'#5-+%E-*Q/5UREKX&01 ++MBA7-Y;-,+BJ806<8ERP7C1X7E[I$3GF\RQ(8BU:TJIHTTYJ3"UH41HW,RY`; ++M',6*9%$X\MMK-<+8Y%.)7/)3;FVY<K16S2%=?#MKW.Q;I[MM;\^@538N#P4$ ++M:MGVM=)O53*"%2]3="%DQG8,H!))UQ?3'3/6X?.6N&^+R%]'T.21A4;N[UO? ++M<V53TL,@DH-.4@2,B06425NXQ"`Q"<J>M#:$ZR05H*2G&.R:(NNE9IF^Z"KY ++M!"\OX(@"!3B;MS!A$@9U]68,5I73(SR1>!%!>2AA&D@PL>[U6+5ZLJC"$$\! ++MUZT/G5B%A"$R`HH*HN*H*HOF9!VYHO>O.]&"J.X1DAFV.#C2:^(7ZI[9\.<M ++MF">,B-5:%5Z>EY:Z4XC"DHY5F.55!MIT%:-+$EIR%$W\:S6MY2,P+ZW-;_>\ ++MKQBHY'6DWFLP-PVR`LP+F!KT\:SB<8Y)R4EE&-4$068>*>UV39BFJEW#_M[6 ++M'IX?-<Z)$C-VV2(20P]W(97`4CF'K]ERW0%AEXWZ9>-=7'>]\[>2C1K@J!$H ++MUWO>X%V68@TQH@!*D4VSRSP2'.=\MM%[ZW\Y/@@?FBM&7+-'F$0Z;$E5>O<& ++M8+(E2C3R:%6+%X#5D$DW<C+Z]2P\9HDB>9[-P7C;CKHB(@5PVM<K;-LD)Y+H ++MX802=8PS#V6/E3@V[%2A+6B654WQJIS.50TB/4Z1U"KUZ+4D"45QXN2WS142 ++MW8@=W?<-PYHU>6Q=O8C1D9&#UQRKK\'/0[$5Q1QR)'PY2P%1'Q+2E4H5M510 ++M8L956Q:2&M>/H'IB9L/#4I$IJB@I`JWCX>[!>0RF3!5%E2%M_=7DWR,EBO3W ++M6DL@(BBP%`-W'N<Y+8JK2,$16:;]?CF%T3,>4@+17)&`Q@BW[;Z;@YN9`,2* ++MC!0A,]`^O6E$N2#C.DLERPLH&*AEZN-+6KU:[?*;_,?#HM3N0;RY5@8RF9WG ++MW?0,Y]@Q20A"*-G9Z*_P;N0XRL&"XV55OI9%K2OBQL+!JU<`DBCGJU)F6:L^ ++M+$@5:L,.?$GFL0?&^H34TQ42QU([-0CJU:EF9U-#VCA4BGXUJT(1257RNF*E ++M:FE:Q/">BB:!'[?0^YL;>9]J\'X^N<_B^$?>Q](_-[VS?[3>*/V,="P-D+,2 ++M8+(7)["R&^5Z03%0[?#B%NLG+UGJ(<]80\G_#OB$[Y&W@LB>I$S63R6XM].8 ++M88;4=!P0[D^L_'X#_*/[F'!4)E1-?@,"9I:&XU55$=4OW?O_XTRS%'K<'7]% ++M3L]I"KIJZW$NH]PM[(,Q56#"`,JLU?C#BKZ*+*OMGC-F22S3;C#L655>+=NO ++M53Z+=/JMKE\\ZAQ7Z74#]DC!19\D$H0#!].`_NOP[\-X'@?\\?[<-5G+0?I, ++MHM\OQS^L<W[U;^_N6E&NM!)E<@]7W8[M_?D<<<442[.!8XR5Z(%T@3`$S ++M_BH3/FK$8_!@3LZ)@`3D4'%Q(T&F`YA`Q(YPXPQ"HZY^$^[C%TY5$,5<`^1M ++M8XKCV8.!&P'#+9X0#:$KEFM=L40KA6D`\0H6-R\D5:NUN3).BW$`#M@)]@BQ ++M/1L"P#D@#.,Q,C!8N9V=V($.B`,H;5@"A%SBZ$-LR)Z'AR1*(VXE%]C"%[48 ++M;-P!PV+N.?<(R)@4+"-C8&@1=0+OHVMK+"B(RM.H<,X;=QU8\D`P.B%@@$QL ++M"-NXZ('$8$'`HZ*$8!<";O7P$1\?@E]H&'RZ=]2'C!;70YY\^Q2LC1:0RF,$ ++M#(NQDR-%Y('"'8[+7,8YG0:NI!8:63D05`X6'`Y1``NQBDZ+I!GE-<9$@9MA ++M(!E@M^"#:]51Q_D?1O<9J3*T#?<X7'&+U1#?*Y^N7)3THL6FSI*F-;T:`?4* ++M,!0C$)0TR4NX!D(!<?$",8@P;2-9B-&*+\L.H+AWY/"3\G2G0X4@)K#7D49# ++M*S4V6,I)N\RI55M$;HZ;-YH!V1+>-H6E*JC0#![C)@@X(!6(M([H%G-EI#.& ++MZYT%410[1N5/=UE'5/0]@@D]G*Y9(Q6<JGRP:9%-*EE]S6C,(UN9VB2V+M`G ++M,-C!PX,;*>2<<YHZ\D;KJNNVS/#3W!&:B9#ZQQS!C?'#&[V.^F5>/.D'$+=W ++MO',WM[+F:L)8WNS*)D<0'4W(/!&C:NU"&4VN8.5%*L*T8+:&S=[6]6=H8;:% ++M6"^?6$L5UU;.6-2+LI6:[+LXJ4326A+0<L'8I<=WI5!E7F"9Y8QEX<HM=FE$ ++MGJEF%DEFL1MS>X[)!F1[P7&&0&<P=$X5->].3X)O2_/`2+%]V,:]O*EB]*R- ++M!\24<W//.[W#0JFB*J0XU[6Q-LT.S,S4P\8(Z6,/72W-M$@&^T;M\YVIG:'. ++M]$F[V*(66,M=0NPTI8FQ0$B<*<BA%0)Z1F$BBYVJJJJ]Y@>6>=\\#Y\6.T\@ ++MVO.KJN9873N9&U?$YHK<J.M7?<,HBAJ39J+HH$DESLI]NU::4:0<04[,SJO9 ++MH50%Z$K&*Z<G%:QJ96KFAH[BML839-M8FQD]9&WNK.?#7W=O;?=(N531=:KH ++MO)[9R0M&!YFK7:-SE=0?6'H<Q-36XA5A*3BVIT3M3V32-TJGKXX*24[>=UG4 ++MRJU':K@=0O%;J[LUF@98K9.7V;*'+)M@0")KLN1:QV>J:M#JS$Y7-TC:6:-D ++MZQ.-[-J<'7>&U.;&'+.0E16&P<F0`,XK9IGNR3ND,K6<.3:X.SVD7!)(,$DD ++M`P8@FMM5*5F`LYW67)3$B3I!);&9YW,DGAK])/5GM]@"6#'?9*1)N1;W*J20 ++MI!5T$*-&[KNMV5.CIK*J;67N]O;UW;W:FAEYF8\@D6>;9K)LZ[GEQK>EF50O ++M+P2>O+PU.[,W*0Q5LE">D4"@HP`U?.PC=2!UR&^*%2[F>IXFCBUSP5]3D2,G ++M6U+NWN[AK=EYCZ2:)+2!T&3$RNY\>*1RY&L2;M9V#I:!V<L*MRX=/I&N;"H] ++MC&S""(7:7+K:F*+E63&Y?=B[-N;[.)F^H0HW=G<Z3EU>8!H3&*^0W7+F1LWP ++MR0Y-*IL-G+WI9S!N;JR<R9S`H%#4[:%7W5FB9%"SNYM3W8)&S+8UO.;9W4BK ++M.WKGI&9ERP0$K2I"B*ODF#<0(:`L%)`D)*MVK[>#>2DA>O=MWNS)FMS;LX"' ++M4]>W1NG<T*U,A4XR:8W5,WLW4@S.7KM[AI3>"WB8.ECH@1&P.T"`ZW`(Z$+A ++MP#.[J;)D-@AH)3CVO``1$0/QOSKV7LKY\S*^4R*!RQNYER+&E+YP6#K[!P,M ++M94C:>R;)AG,)ESPJY=!YW7<X70W-K!9?;.7E+)4+`9&'G=NW9IX30ZZO<$R) ++M8<HU=[6%3*:1D*KJ0G([:E4J&8MO9S6@]GJYY!N;QIR)N*TJ,)5F\<\0Z$M1 ++M>6<W*$G*(Z@\WGFZJ*I].N+O*H[-LNJ7&55ND%)O5TXWIJZ1%*45&DT*W)LT ++M\VLLU-"Q(?3N,V$LGGM\9T;J1B;U34R0]A7FI;LR*C:TW2;ITCL7M(#+RK%Q ++M*1NB)2H;$UO'"-BE6;,5UR2")G!K>F])6]-+E-OK6<^E4@6P]+;(Z9D/:'1= ++MM!]NW>FLK%,VBK)V<H3*W<JL1$Z4NOLZT\WD[I8^TY=XQ?((U/*A(&S11=<M ++M=JIMZ6ZFY0("XL18U.;?4ZBS-H87;+$]+XX1-KEW#;GN5+M+5S%";@:!-1PN ++MQJX`[PJPP`6I>G2&I8.@SUR^.G+L:,T9B/;8RWO91RZY98PM<RE4[B4W:"RL ++M$XB:[,2$NMVT)NS0S-&4'0S.R@162NGC<M])Q:^DU6O6Y6;0F#4X#)K7+O.I ++MOAHEA3LH:W+;<]8N\OE@JZU*VV.9U.\R<B03*VL3N1B!LHXNNJ<T=17$)G./ ++M!SV7DZLF13,B<FYKAW*55UVU9-$S9OAEV*5%1*.E5:-<IX8I8(M(2L=@MW@8 ++MJM"$`2"-(488^4*]*R@$P,XRR?1]';//Q\?AIU/+F=M+!]*<IM$".?3S/'^) ++MG^+5.D%4P-T?]G$K^<PR!(;9D*`3]'^QSO+"L055WX[G^!ON!RE3BKEV?"G6 ++MH"UAQ%<MH6%54'K&J!3),EO:TK&#`8D^&*LMZKFE>EB[+M.=JU>I1B0IJ?(4 ++M0*'T@QR!!"5A@EETYZAVZ0XD',/#BS7)R36$[A2;H5':=]31=PI('A+J!%-, ++MQ?3`2.+KQ,H>=6NO.Z.HJ]4"$NRX0DP"(**IG.[E,WR9Y32]0(\>JP)TPU"8 ++MB"ED%.YD![2"B(B,F$+,B-F;$6/8Q%=@+`N3(8BE/A[)%@4K!"$R%*.S?,[' ++M=YPT6&D\H5S=F&M[ES:4*,-(:T:.RPZWF0X;U3>\R%LRX+C;"KH9IVN^MZ6W ++M'FNSP"("@D8*JAS!@D]YK?'GG7M%'+#$;8BJG&GG#=:A^X>_^QVU^R,@JD'3 ++M;7/'7;\W6^H/-5"^7MN#1$TAFN\XT-EW+A,L%T^3KU[%&'$X(+;4P%7][:.' ++MK&>;%).+55C:+`>NG9.[=.328MN5M[W0[:I[.BM+%H&Q8%DE8U!0B1%B9&#) ++M,8P4%@*`L"F60LEF(E(D7M6^6M$[[/W?V-<:<SPO8@HVJEB<%*$I%E%,HI"6 ++MH`8C\`1^:B&/Q_'UN`J-ZLG2.K0(=H?A)\74EX9'#S5CB)<R:5S-@U(*6Y<Y ++M:=#,#;XM[)O6=."0WP[;@*;V8D$$/F'-,9B%M#2`\LW(R<?)=WF/'"!9H^E& ++M3Z=?O-Y5(R"5Z.SU=A+#%+SJ@`3(I$DD*9(F9/4C3N4T8]-4(NB_3B->5R,K ++MB8P46T;MMIA59FP)$UD'4T<55(BK$50$S5%1%:#&SF)HF:;5)WYW9FJ:VU0Q ++MW.@@C\[R:=K5XX<)FA)[)=426UBT!R[.-5T\W-BP9OJ!/V?/*KR=`6VMK%=; ++MDG*D:7BA>^J\)(A[MHI5TTC01`9M`ZH:2)=)8RFM4A$!$!$#H'3;(.A:0I0T ++M`4-+24E(4@1*"D%%@HH7K]MO`NK`+H6OIXVRQ(J96:EIKI19BK$68:,_*]H7 ++M5!6-%5%`H!T\>O/EK?]?U:\?=$K?I4`G6KE]WA7*#B3!!AM8[[;#U[`F'G@0 ++M`,\W/GTQC,$R.J\%E'ID?TK%>3%Q<DKLF5>X,:%`G>V6^>'',@%]O;7$S3/. ++MU>6F\B+NT$$9WN9[-$VA5(3*"W*VN-DO$XQ&88FUNXQQHNNN=&R2HF=#BO`` ++M0!#5I230(<AF@(`D4)ZYAZQ1F.G9I((5:4<?$"12`-<Q672,B^'.K2K!))/( ++MD$B(D?)Z]'T=V`I(B)@IY9*:HG9/+M\^?/F[!YG$IZC&LFM&U9^.>^*A?O-^ ++MGH(GRQ<Y\\>R4I2]4^L^=,5K$%'6^Q9YK;1!51GT@HV.-.R:IL;Y^MV?<XJ7 ++M\>?IP.S57NP>OIUL-[>I,S')(4-I4LD2,<PQ1@Y`2$\R]HLNU096!2R65FT- ++M<>/&0U^3$VK2O!.MH0U0U\&]L8&X2PRQ11519)(!5H7O+R0#IVQ<X31,6Q9M ++MBK%<T:VRL:LS([]T&19%*WS8G54.<F7-Y3H$[*9!`(2WEE"=09'HP-B=2,WB ++MZ83NS,.@@B3#J;,QF4L,X1:0RD!S4,:4#%T6#5,/8!=N0,(G#(8!H@R;F`GJ ++MJT*BB:ZT7(YY,NJ$*0P4.NM4CAG=AAMP$G3%:)8!U"U88CDHC"+Q1J0LC3#+ ++MF.YR!DAS(BZM;54092]=08>(/`E.AG9T2*0#19-MW0L#JKW#>G0W9"8;<R"M ++M<U4,4)D&Y#,.D$W,A6G-"CV38)%(@[;<B9SHW&FDFR9RT=,YLB4TS-U+!FK0 ++M+9L4'/2`1QN(NO`P2"CSA$&B**IFH@B#GQM!]>9\:>[>9PV2LL/-B***M@.? ++M0H'PJHI5-#E.SIW,\X4EPL\6M;<W+@GV#]W#BGEMASYOFZ4U2W$_'QQPNFQM ++M.+6&8B>.^MWM,=ASC$1&D8+!J4415L@JC==?#]#K@\(14%$06+%58BF?:\F+ ++MW6RH5@IW-J7+HEY%(;[_M@YY'E&Q;`&!\L"_Y_K?Y::^+\OW[_K^-AABDX\D ++M!/U\N8@;:A?*KA"$=T*$T87L'69F1O5:Y6T8Z7ML:HV&3&$6+4757/L0G$!? ++M\($F"([4R,+>4I`XC7N50&-S,5CJ0:T/`B@@L8#FYD80*$_+D`YQKE)RZ!"/ ++M%FV\E@`&XEU;!$FNN^$V<Y,.MDB5`1W<52[IW4/,O@=%DO>\XJ[(7>.U%P4P ++M$5(@)FF@^H-1`4TT2P_/G//K0V1S3A$47`41%'EY>O,?J-_-,=6@@F3]?PY] ++M>;8,1LZN;Q.V(E[%,J2S!J@M9'/!YG$TYC@\<0A`CT/QZ=;T<<5QB.$\4@Y3 ++M7O"N/B3<8JU8*"BB*J/TZ=.$/8H*=/CTOC1M1P5;CA,04LJG?TW1U(+*+;&I ++M#1FF"+;[ON]AV[&M&+8<6(CN!4+4@JJ5PBN,2"+52F4-1E"5N=>_E@X[6R-T ++MOZ]]03:BIQ9Y9^LX3A(FVZ*"0=AQ<C3WN_/GZ^_T69>R5+_$_Q<V#%61V=2[ ++M,9SER1/$$(89S<?95=SS+M,C:#&].R:RYEQ$\6X'&09Q+=S;2-`Z#Y[LTLWU ++MW5H<<.RMEB:I;M3(Q"C+JO9FY>XS-@VYJ:()!@$/:&J2Y]?,'EH*9@HJ@:KY ++M@>2\F(*:8Y@,0%)$%0<PSQ)JE"TR$$`=,Q',Q<"P^J_,JN(G5E>6E$1%R8Q% ++M1Q2*?+XWO8HL@H*(I,3Q:+(C0<G6C&,62EB8C)M45,$&VLU&2,A[\]IK:S:1 ++MPF?+#J%'%Q=*DW+8H1%QD&U;;,R("BE5%!C"2$DQ:1:<22!K;MX[^'>QF=^_ ++MD)O)"!M6+2R$3[MB)(+\X5,4+,>2.3V>N\4!`_BC0/J*_:0<)^TT5/*A)8HC ++M"W.L:61)2&+-TX\CQ[MV5MSF5*O*0OE/&B*E($7QM]5/A$(8S6BR)D=X`0`& ++M[2DJWG:^NJ*.3(UFK./2*K40IC`C6_]6]`CX8(BYEI7$1`%`=V.?.Y%"4)\2 ++M_4H]A![7FT"AHQ8G01%"Q&,&9GD>IN!>0\6@-'R+%[%%,6#]W.=(QVQL!IBU ++M1G.+3BC25,5-$4%MHHA([^ZSR\\SR*@4&18I)A#%11<43U=&O0V:+!%E:@UD ++M<F*BY',@/7K\OIKOF1.L5,I\_SOT\ZQ]B]$!RC]_0Z]QDV(G:MHHTC\WZ>N^ ++M78TX@IT%%.PN0;!IQ=]77TL<]>:XK7GU?5QXQZ0@=GIS9$M+P@>E+3,S2!,P ++M!XD$C!^W>]\FO?N:%?Q"+JDD2E%!T*DG,S)-9D3-&Y$[^_-T*)ZE,[UPAN`* ++MJ>1H-WPFNF;VY1Z;7)N\9GSXRO5/<1>J):(>.>\QG8WF>"IF[A=MW5!?5N80 ++M1*JA\\ZBKY.4A\]>;T9Q`OCN1PIWSG?IWY.;G7E.<5S%1=0CBF##2/U"Z2+Y ++ML0E+7QYAX55R.\Q/<CHI2HJHB"Z>;K]WZ_J>_#$HN3,""4A`K()&3,5=@G/I ++MY^/4WRWU-A566A.NW!<N.%XIJE:+46J5=I*YBX$^N4<414;D?3Y=72,48[M* ++ML'*K&6962+$8Y"!"11C&'LFG3JHMD:1GM[W3I8*N2)HI4M2@2DIOOMMU[->6 ++MF\SE;/1.]ZKM4`PI![&!AAR'^F,_;ZO)3(M$R^?[49ETVZ,6";90?5ZU>D:5 ++M,I!XE>F38N]6LU;).7LZ1*U#\"NOLI2KN5<J9$P",IA.6'!.IF>#O>BC@D$W ++M<A?$R6,1?0DWFWL'F;\%1-)3110M144'.,JJJI::(@I2G6+U*>KGF<>9Q#05 ++M,,14S1J<;F8G'#YM!XV*I*/7X!\[D%44=G5&QD-4O(TKZ[N98HHV+ZDYR8JK ++M6\$XGQ^>+I%$%79`CBA3?3,II5=Y&`+!2Q-+@4DEV+`EPL3]Y._GGC/%+,U1 ++M(F6PN3,@WX/E[;PT(&Y,$X2%F+3"F%SFL8H5!%$2N_0[G6WIX<;>??GKE6^O ++MGYXRO[$Z]L8ZVEWPQ8D@6LR5(R!+MDE=6)_:YU8:$4$H5Y?W,A4)G$6"?LA; ++M-[B234MV(D@;DSH(WMO,F>V?5Z.5YZ<!0%>7"6%.@:+.AQ">SU"";WP1ZQX5 ++M=D(Y4WU].0`$0+0#G:F9TOQH1)"($6FVF"XG.[F&SMI+F';S,34F5%P%,.BD ++MSY3E/>8!EM$X^,SPBC`!(@`$P`"0`2(#:$`:J,Z]:*D\Q52PF/5,^KSW5Z/9 ++M>T23HWUQ=SL&T#30)(D40Y%"*FKY^VC%2AYOG.F4E"5^IABE7A)9@X9I7<'0 ++MQ8\8)H7E&"])$`)F*)Q3`\@.8B,T&<],R..,A"7"L6)=ZI\F?$>[S8@#1S'C ++M<3+5!^]ET*3K6+]EF('$`UQNDQF92:ZNLN2VN!%C%6*BJB@*W:HB8J7;-4%( ++M43$43$UZK6Q3E:BS(J("BBP6")C'I8/&XH;MR28HC6ECE1$2U@RV2'V>N^^9 ++MAF*-HD?#DZK8QIT%,/$5M44"*0BT>6QB\%%`OWV*M,T7!5Q01R<AZ7/L[YMU ++M:*XV1A"5"V7-V;A%V[I/9T7%%(:Z^7MZ?7UT=!(C(B04C`CV2(@XY820EE6S ++M)&&96&85&89D5164%+52.HUAU:Q+GR7$+Y/+\`.`#DO$1(ZX,/%ZX,1+-6Z7 ++M<*U>M6H6W2Q25(0BCN.E='+==M[6:]F*OSOM[-JO[N#;?KKTQS;/'#;1<NNN ++M?'&&[VFGYX?K][K1^5^GOSOU>/[S[][\+V+WW=?F_U[\?/SOJD_=Z'Q3Q#UB ++M(THCKQ-'4=5CI6I.5'12U=]<$+AG"B8:X#;A!#5O"+4LGD-A<U_1P.4CX_F) ++MMS$B(*HB&<B*(F%G[7OKO[?E6I,#X'I..[K+C\G>\IL^_44>/'EK5H9YM`J* ++MNLP!YQ2)G*,JJB[1D$MH&&^&==LZ+1:;1OG1-'(Z1=).JSD3IYXK$>K-S672 ++M2$")@221]_<^]X_8N[N[_W?L,1`^0`LTA[/"Y'#EF:,PT<QVFY`]\A"<$13# ++MI,E/%L50*70FR>"0RQBB.EF\DSS-KH&M;.,-(NYZ8@`$H961LCNO<98F-DGJ ++MGB+YCN>X!8MY?""(&7&QQH!*`"JB#S'8.5(9M!Y@4W`>OA.`'HG;$#,K1,N] ++M',58H2SHI"`6+F0].=CT1;B#'2P#`G@>S(&WC/3Q&9BATI#%](%B&7=5T\(@ ++M"`8T-HC+3TH7`@172*K0(:CNAP!@9EQ(%SO0)S.``@7H(V3=85>;`YFSUD*! ++MVY<5.84,MVA'1``P+@+%JA(UF)Z=8G!0C0+%6A+W!41.0*@Q33R7M9R`HZ!% ++M&+!B(KLZ.H+(BIO`!MT4'#RNC_AB=U%?7_%\/@B>[:^J^&!-9H$Q#QQZ*.@8 ++MX?U!D@2(A*AXGLRP_7SP4-`GGR>[WZT01W0,6RM]+P@K6$9"(K)C3U*1R&.6 ++M$E@=(]N^]5$\,VD7<R#O<%R]PCP#+SIX56[4::(5(+>TLB22$033.*3!)#(= ++MS)=(49*+&(3*&D*L8JDF@(&6F4#!6/C.CK,B2B$2")DB7F2QV#G#)H"0=J\K ++M"2#I99@@CK8J8)"AKB%JD@S5=P70G$[MMXZI'?7=VO)E3G";8YQGE0,8:2`9 ++M%*P"XA/7`FB4CI4&,*(K4R;MO;YV*LSB(-&[3(),J3/!4#>(,$<=9+#A%'#$ ++MXM("M`@ZDUQ#6\R9@D[J3"&=>5E\D&>C'Q04V:.`@]E'ON7![YJZ.H+3QJBH ++MJ/@A!5'N:=!FTC&BVQ)QJ+%J&=2)#8IH2,+XR1;4FN3(-DD($4JZ>!ZM:#I3 ++M)3+!!)/"^<3-3M13H=+D!:@A:%NJ6=>&2>,%1$B=\A>33FW4F'3M;,W8\AJ3 ++MC<5S>KUH%B*ZU2;AQQ'-H+9/"860X#Y]2XC&%8+:5-@LVR=Y+E5D)47<PV.5 ++M.V(O;!LA9.X<Y.>.5=0(@'37*1A5I4L*+Y80.E2EUMP&=`ZS7LJCFU'%YN4X ++MQ.I'4SI\[AYUN\%+Q4E$5Y0)-U28:6I&4$9E,P2!Q%8C??=SB=(MZA1R*]Y9 ++MR9Y57+K5KR1QMZ9]BJ8K$X,(CL4F"#'B^*-J@D36;ET&#=/*H/N7<ZHR<PI$ ++MI!08)W2A1U67!RZK+IQWPV];G>KA'M.E07JPX1I&'NUHX,"BS?;4B2+E`;MN ++M$;J6*&X],D<ZWA4">2Y!F+.D1E`0&QA<J)=N*Q32@@AZJU9KN8&':;W<N>M0 ++M":(4I4@,>M`F`1!-&!$0B`]7/ATA%$=N[,--R16*R).[3PBBC9A&`>MSR%02 ++M-45#R99XT0S`P@-I)1"J=4Q4<@B9QP3DL;80JE9DP2$U1>T>G"*U#"@D+ ++MI##I%+GA1;2Y%(6"-6,4=(B:*$M<1H,F*,R@R3IPAF.Y!]30(#9:MDU5F&03 ++MALX3J3QC&EN#9)"K"Q5($R0@;/%S;AD848((P\<(P\5B`PS@*&G2*,$XD)D) ++M)<69($EF!VKGJR8.IQV`U/47THR""EQ=)\AKMDX02C.IZ-=!,Z2;X-*A"SKQ ++M"7=PM>K=.!(YX--.>J1)C>:>F]*#Y88J@H1)"&HJJSK!21/(3J@X!``W3(&D ++M:;U`E<@CJ1,*,UB3N@HG2-,61$EDF-E1%.4R1)%V%)@80:0W',T<U1<M;0H! ++MF,(C":;E.]J3H(*4G"`SM-]:`VUA6*(NDP"#0]C7*@<0KF<8"!X<-(%G+X<P ++MUW#OF@-ZP-ZFE8@!X3IH.:DS<AJ%.`$8TP]@1`6B=V9+%(#(,$D[FL:\%70` ++MF5.ULP3H&''MZKD50"2R+D9=,#2CJ5TMH-T85H,!H#2S`W4*.Y?74!HTZM#* ++M18XX4#(O4+-T#<L3)8(=UHD6*3F78(EH`9=.I-2KJJ4.LR;EY-D2<*)U"TF8 ++M(,S4V(A[<FRS1KRL-!$6\>$!G3,[,X6LQ'M%R"$$+L"H#I)0D"':JJJG68!Y ++MWM-<9E'.EN4H<U,+.2HPT0=P/=;.E09MD&$2;TKG9(TRZSA(ZI$S>E$D&*-- ++M"C>)&-H3DN;NM5@VA?6.)T4+?.JI298FI3F10H,8M8$>_'8V"&W9R:<01Z<A ++MVA$+N02N^N4VR38AWRY13QJZ=#CJS*.3CR4)@QO54A3C9DSE[,M:",,($D81 ++MUISTIJTJ`F9Z>(H&$Y1&2&@L(F8!;%DF>I@32LH'9HJ:F@S1KI#HB@08+II, ++M,D&"0,:PC$$*L%`$@G./`]%E]ISN"!!M\P)V;Q"HLBR00U(SJV4B`CO+,"A= ++MB(NJ4HF<*JJ+0+2%&,M";2H[+JLMF=O&]=36LYI$M)((XW5*C(3K&'ATSQ,Z ++M33MPX,L'J4;((FN]W6I$PD<S>3C57C.J&]<5*C"Z&T&)HLFPB402.R^FD]FD ++M\N@XLJ-*EM\A-\I,DF99>'E4]KM&S0*I8<)RJ-4C-3,LU.@HO4W6Y-7;8X=I ++MHI48Q)G>G<ZYZI,C,>2-I<YZ+%$OC5S1+[-QC@HR[,W@@1&1F1E7D:,&55W, ++M40N[M<"^,U%)0E1Z\BV*5[U*C&W5-75&06)!1;HC9%56Y?TW$"2(%+07[8\C ++MPG51I.W,A(3DX\='=EN2W90GSQCE-8:RGF3UNN##&R\[E0ZEVU9H/5ANAKU- ++M)V9NK8R:S*O@AEY5W,S-3K*$Y#F04$I=#;Y5NV>QU/':4WPG-W.+U21V+<PW ++MQO;&S1RQJU*>/6E?8.!V=G,1TGCLJ=%FL*J6C*V:E57=FDSIQU,S<F9RBHXJ ++M2&S.K>F<IS91/;1#-O,M'9CLW!)Z665*LX=DE">O-!PC,U7KKC?6ANFM,<R; ++MKJB0AHK4K73NZBG=A.34Y8W)QR;JJRC-T'E2&^MBRBRZ=Q-NZ1O:W*!LXN4! ++MI!OG<WPQK-NJRNPYLT+Q<7ECCD49)NW7&ZU(Y8S%0=!CCHP\2SSQX"9F^66L ++M,[-9G+*PWP[D*G'D5W"5DX^"H\G#Z(NK[;R;K>V]3W`ZONN65723E-89MW5< ++MD#N5-X1CK9[*[$M$/$*V!%D&,,D,QAF5B',0(H"(!BS9&&NVV->0!BS;>N[, ++MS;>&(D7$"53L!#.&WT!;%QU2.RJ;K+ZU<@G"C`=D,M2[L6*@$3<W:*F[>9LW ++MIWI96BQU5M]/*T2[+XS<J;>9.#*BSU[R$TAA%7V[7*[GFD[#[>SMG%0.2[&C ++MK6:6-W5.G,R\6,'6&BGKG9GC6R^*IZS=ZY(59,CC3QSDS&SK-A=5\Y?3G`FJ ++M"*)3F1*3T<T-ZS@L.;$I;.0C4R4<:"68JNP:N9NY#HU:RN'#3J.C:W.LR%=! ++M:*HX[(XT0N'/,7$4*P#A$$",&6N2UNA\PKZH>_J:(D#/.V8E],9V]GC^;IH! ++MWK_%W\M\>#`,QX)&$-*+Z%B2$Q$#,%8FL2/4F5$Y(6P.%+#0M$G55BBHBL5% ++M5J@A6XW<7K&YW&YE2A+17J,5G,$&1*MJ>Y%)$*H,$@R(,,)#5-,6,2$O>^-" ++MO'&N6-<KKL[%$:GK<ZQV#J*4Y@?*YVZO%?A`H5*]9/"M=5[0)RQVL-3>=@C0 ++M(`L:@!(]6T#<].Y=NBSEC8@#@K67HR:['@7JG17BC)#!Z_1`CUX([-!RF%), ++MK(B)J4%QNYI27=FA=:Z6,A(L618\92'7$TYGG%HJ9(FJHIH(@J:F(IBBB"F) ++MB'F\XOON[YOGF[C)5%1%)$%%-//#%/+Z8,KS2.Q[%Z]6"F*&ZN!*HN>6%_"G ++M,UJY)CB@[DC<TS28H9,]VE`@AO\DH:R(I(YAR%*28JXHY##TZ@;U'HY9);9D ++MC2:T-:XI^!^&X>3YI@MBJUEX</.YS6$XPY,8PEA:"2V)2T48TP\<AL8+.336 ++MFC3H**'^ZY^G\I,_XH>..O'EKSQJ_MFF^TXM#F&E0S0D.S+S5J`_8_SM".-` ++MP(Q@AD,Z9S!6U0ZH55;O[]BF+5G9=2%SV[&KC+S3PC+\"^L5.P:49Z2;6'N% ++MWXJ\#WWFTS([D)HHJSN>B)HF@IA1Z1K'-#Q$O>4C8-S-&B1&$GT$15\/S1Y@ ++MS)5!36AT4136SJ"J*D:*9.(QZ;ZXZ9NU0Q%)"*B*#G6MMK3QTH\<>-D*50UL ++M7@7ER(BN&ES'Q_:'XGG?-E*#8Q28Q"TN[0EF+%%%B,1B,B7_>WOY9[-E>HAV ++MVQ,:V4+8I"R$+2D2!&200BC,;,EM&PQPS["4<"I$P^MYR)M#-X4@"QP&5V^U ++M@:11DC"CGIX?/X;3,T*JI24I460JIHV51B*-F*4+2530HMJ]/UZV/3MGY=.? ++MG2^<W)`Z0D4<2.QI'IZ,0X-MWT;:UJ4T",2(C/STQ>UDDLW^WMK&MG%.8ZSJ ++MKP>#FA0WA[?;G8*KP9N2QE"-QNW=K22!KP";-1?>8SD;KAN7+BA;<OT4AJ=F ++MP-%>7JP@B13PB0M4;O*MSF11NP@F!",DE_\C(PT%20T4U54M31+53]LXJ(F) ++M1H^;3Y*:2FCU;?%]O?GD]*"HQ(*BHHB(B,5O6ASG;'<45A2_DU\\8P*44DN- ++M62I4JQ"IP;5C$8R&[E5+MMT1QBH+&10OU?5-FQ$1Q)\YXLZFZA+C55V>(78Q ++M7)($M?%[YJ3I%JL-*^R-JY&(I@H6AGW,>3MKY^?.GF";@;D-:H(MFQ*H+6@, ++M\J"Q"%425`5\L%H!UC%3M>Q`0_GAS]5`8I[_%(@+S[%0:I3S=E_2TDZ9JW(" ++MYAG<D<)Q>.]6W*S<B?&@Q+[G72IV/1$`01;48?>SI'&,:BF4$J\3MQ7HV5$7 ++M04`^PX>8V=$Y$6I+C0@=],"`$8B5-JIYV(JP&6(B/<X+$@!J$0!`K5$>OKK- ++M,EO5,#9RAFL41B)!8*HBQ=VJF&J\QKS:[LY]2'$Y3$4%$Q4S49.`>@+L=8^3 ++M*JG`HI=!HUF*"9=L6RNJ:*FP455%%$^T8:Y3<U3"I1KF+01LEL[EA%!%\MN_ ++MEYY:AJZ(EJ6!8VKD=-WE:N#JTS8DH.'VZ]DJ((E*Z#\X3R>[(Z-?IC`')T"P ++M>$TSO>I08::HI((K!\WMQXV\]G3QU\/,$SVXKIYVF>*RRPVD`=,J@79=A+-, ++M4C+8J/R;&_?W>U'ZD"79OWRYNX?S>8!0Q+T(:&-NS,G`CWLJQL[N7[`*:4B\ ++MF>UC:5=JO@F<M$52F6RJ2%2`=01CLIH$,C0Y)?3K$YCAW6UO@+FJW?&N0O`. ++MV+S9@QMDCQD1<%1!1'?F%$46V9E:DQ73BF-&]>^]Z35',X6*9]=[^X/\CX^W ++M7RZS35$L9BD$+AK,NC3%5020W>0\@?TGO1KJ6B-JK6QN)^_H!=@*"PBJ!!;< ++MX"K%U:-CB]T$1PWAAAWSQ2.MLBK%204I#+#XIX+F]N+@JS4HQJ99!05-I,KF ++M,SVOU>FCQSO*QX1(@I%8(XBE@18HI1F>/)X;<'?Q!-MMCMXW,7P=2@VM,F$L ++M8)'&(`%EFM<90T`(?:.,$B:%JNK)EB;#GNYFP%OZ4DNPI+?C-:+.9/C@C,0[ ++M59]!GTN.6L)H@0`"<VAU*]]5;?H;W5F[Z,RKOB)U#0=#L`8\P#@"8((!)@5) ++MBKR$<%517%2PCGB\\,[O,"<)BFF(CD9&&=(>*2RW0&"GU!#7PK!(Q?#TM=+A ++M4E#VSQO<R3QJ$IF=$5+%E=!S>N;';;:J,8T$VRG/7G0:%%-C,W,^G9OYZ.*\ ++M()DD!9'-<GA`V[10S[GIHWURO%3&(N1"`.LPMS!UFL9$;F6@E9;W\4N8@FEF ++M[%QD621%D27+@+F,*K<L"-DR"1".0F(EM;`@_,[Y].&>N<ZC+/GW^!0C2(@/ ++M^PQ%?P:/D')F']SEO<9^9FU:D)6I(P_+2V<I5&(IX[MWHK+R[FULN55W+HO: ++M$U0DR.F\[#NV]67-#FF;4Y5812QW76N,6+!B++N:X=CXST%Q45$SDQ4U!$P1 ++M-\68F29B(*>ZE$K8))(26.;@JH-CJ:^=\*)A*8B)/1;":-.(PQ8PU$T:`F3% ++M$\C454311%4%S8@551$</;UZI\'.GH=1C(I/3=#284*=@4T*4JE`E`%#0`4( ++M4TBD._6]'&9*KNS,Q-4(R4]//MV=&QPZ1@I!CU"JXB#6)(;EAH%!P(]/[8/G ++M9]8_WZI_F0&!`?MS]3+6)-4R2_@@42Z4"043>L:SI;0VS=%/[I:EMPODJ6F$ ++M;H%6YJG0=V@Q>*77C-W\R0:Q,=LJEP2(63;$U=S@BA6A#=NJNF+R;XR+K=EZ ++MBM<Y6;E&I280K%E2B8"LX-DR9(PBC%CI<X%6ZJD3:$@]S:!N9<XE5O9-6"N- ++M`FL"]L[->.4:-@3K[!NDV#IRR0"""\Q!+;W*JJJJJJI)59(NUA;S,P&R$KN[ ++MN\T3)<2(&\/`D&"#?.U1<LA%5$44D4U-?.#W[VN665PV+!2Q%*90YM'G7'8N ++MV@N^>_?.1/1Z:`J?;B1-:M%%&+4T!1#GAOX<;<(G%$]J'9LNMAJP0II?/?KM ++MX\YYF[1JK(I%B*"I1#C76\P\95HR:X1S9<VVI,O[>OT^>^%151%,JE56;:FE ++ME6+%F,Z9]>.NE=NOC=ZYZ>430WX@;;GW;AI,1<W[0<^N\5N((=4SW@PZ$E1` ++M7&OU\TB1F4566[[&RYG/L(W<Y(H51Z;HC#=F0HX-"M=L4`R+L792>:G6Z1>" ++MY;VM,R*'&)8EM-D&CTXHC.H>$15!Z%A#3X*94\9.D2*%X;.(&,`56':$,[YU ++MJ#%455%40101'%%FTM5&U&S8EBBDV2KIK8I5%E_*;E^T:"(\6#ZC15ZU:*F( ++MBM;LN2I;;$EHT)9%2*P0DBQC$,\X<.$FM:P11<UES,VBD,J7=UZ/#?<-64,% ++M4+C3PY&C"+$B".8E]M>XT-.X)!4M+EE80LBELY_:Y[1@TA'E2%%&2-'FTJQB ++M29&XD%55569OY_3QKG.DCE9*$L0MUAMOMQT\;F/#&]_#QB>$SXZ=4&UAM1U2 ++M$"()-$0!^<_=[$))UY"^Y#[S/S0L-55+I"MYFID<+S9RMR;.JKBIK)R]WH0H ++MUW*7:WM9J^5X*,95">JBNMS3E:.G$KS#RC*LK6JD45:N:5&QG/"'DW5/L$QH ++MSL';42AN.F9K`EVSU+;)G*0#N*U[U7U)3/56AWSF\AMWD[H=J,IL(;NJ6;-J ++M\<L."6.$Z'ANY0/%+$YK4&*+3[J;IO"3DL3A,@Z-F\W31<OYW9?@FU+><]\/ ++M#GO9>]N6M<\5ES?:.?6;M`@U:&7&EP:>T'LO.S>"1/<:8XQN]DSNBQP'5BQ" ++M]5;*6]QGMLRNDTT#2$X,$&A.-]F4:&.LF\(-*)=UD$8]G+G%5V,DX,=2;5]5 ++MDV9P*R)NJW)-V*:>=9O.FQV63<L;CQSBZMFBK-7IR*Q=:G=V=9=%.Y@WUYU, ++MTUU75&QJG*O+*P,:=3OGDM2JVUD/##T;2!-;KYB36]F3B9X"W94O&YEZ04A5 ++M4^Z-.'`U:MNU0G$+4LYKR1LI34Z"SQW!PT[*F3,Z'&95XBJ$YM7="M2><6QM ++MJ:G2*V6Q,B^RAE2]*J3&E[Q,V,I"[PO#(["BY58LL<;<MM=G.]R;2HE))^TD ++MT41$5';%:=,TT7,&FOCRYZN=7CP,53,WQ)IH\G+^KG"$=!1%>'*0G%X60<7` ++MG>KEQ6&4+4"[P-$`4$54P4RC<P/;E]^3KJ5%;*TVJ3<WXK2\F2*@(@"`L,GO ++M;?&'$W?M]W>I41W9TDRD`_,A]N=YM(3-E-_4W$2.&Q3\6X:)HB0J-3-5=-19 ++M6M;AE.GR!S`F%Q&>"Z(ZPU68=7D<LKL$(8$5-:5UW`MNCO[5_;NR-))3$]FD ++M6$[I)955J*)8X0CL30=3(WUZ1B/S^QKV]4K\U<^_'O?@?)_"_/?@?-S*^?1D ++MY^/SDNJS4T+%&L<*83%-1B.6%26K.ZBK30Z9\MYJ9*RK!9ZLDZV[=AD."MQ[ ++M'3+J,1@]:J&!%4\DJO1"^*!C:"H)*X;RN]H=][U/3=M`3+)D*-4*JJ"J(**( ++M7]=S8N0KJ;L9B8$>#&]FE>LK\:WA\A@G%":(U@;\]Y05*:&;1JZ&@CSR<H,U ++MTF#=_;^?[_RN[N[O_;_G_0]7%`QAD;_;?K(R"+04`1^ZP.\PAR'DK]L>?1X> ++M#5*4E*T`D6N-R(`1$$D6RHSP,W>E("\L;M4[F6!<=>!2M$P%4PN$FX`R'L$3 ++MVC.R@KS)O1E/K6=-;R8[.(N(O=G*&U`I/<`B!RZP0[8<`BY86Q-8XNA(O!`4 ++M#A(OBKFZJ,5NI`00`V@]G#(8ZB.@#$,@!U$8H4S=0-L75$@0,T.QUP*'`'.L ++M,"IZ(&R!<6(GWA8P!73$('MNQ`$6Y-B!:@1A?.L34"DT;?)-F@ZLV9WQPAR& ++M<,B8$5M>M0'>:(G!&\P78N(%3:0D<`%J&?@]8]N?A]J<5$//%3@>\!@33@,[ ++M9FH!K,X2BVA)#0(30B8AVFFR\'MF4,@?(48'`'A\7K[,^OH70%FM_W(<00-[ ++M$A.+F>N^-9";UK+`0"Q#%@-Z&,12Q#60/?/.1I"`)%EG\'`)@_1^/3KMW8VY ++MOX[^8:WKX2*R5?9AUXY>3N4#>8BR*K"F[O)C)JMMF\JZ+F\BXJ(T&*!-]=+I ++MIBQ+1FW/*:%`O)55.37<3+VM>76:93V]I[A-1L'=Z<W($0'FLKGJJ[&.48PF ++MQV/N9:Z<9RZ6[EKJ8=R>!(K4S9Q3O.KE4%;JB=5\(FEL[PO.XW.LWR?/31!. ++M-S:1W<;[DS8W9S5KD'LIQ,C)!*ZAQ(F;><NW;?,SSR8YCE-R$^FU<NL&.B3< ++MT`<EN:PSA(P[U98S0CS*M#*I/@19RP[NNE)RIYGJ!@\\Y7O)4CNC:,IW>3DP ++M^7<\$Y<W<@.LO=&/AA6V29N-=C%MU,V55EFU.*IICNF185::Q\+N[G,E":ZZ ++MHJ.\WB9$E$;:,BVF]5#MNLN_3-O<OV8\L%U.VM74KGJFE5OS`))!K&1+]V&K ++MY&Z"*"F[4%K@_,K%3:4+$=JKWJ',4"S7471G7=TV[5\LW-7":Q3F=B6+;S<Z ++MWQSBAH!B`.B%$.^>C:H3,5>7F[75?7RP=5SJVQJG@I4O<T62ZK1H6EVKHL.E ++MV]*,T-KMY;/)2)D5&7%*P:31<];2LB15)YEJJW)E\<)1ON9X-;7=8+!F1G9R ++MRAMCIW>I[2WB;K9)+JM.:ZG-L*=?2^.YFBV>;JN%H]<U>8EHX*N66K"<O21A ++M,OBA34-IYF`\CM'!;>4:66[>K+R8--Q`TP3V3,\QV959NTIVMA$$$&"((!$$ ++M@D$@TCE1,,&G>&LVE*F;879+YMM[V[&V-NCW5-SB*4PT"(5H0)7.35VPE:AE ++ME[+:%96S!PS$["T)E=-=W1)H2B5IS;S1P;!NQL:K4R^XA]$Y(GM0$US&VU86 ++M4<"%6XQ@B],BY,YC"I$2*$@CAMVE9<4<,3DIA@M=CY32U3U.V`(`&<9&3@SI ++M*GGCX),H:+>JQTW$#*K$GMJAK)8=63>]U8!+`@=5+DQHNP'CZ9U*IQV+UT-9 ++M6G*2G7++:"T](5U$YEL;I]WNLJU=3U:K5T)D3WG8JJX<#TC=1L$*T@IQHD'! ++M;#W1>=7%F.U+:X-MKLRDCNX*U5*.5C4FWNW-U>GJ2-OELZ,UE*ZMGF'':)/9 ++M6GBW(NG=JYYS+.XYN2CLL@[*9UR$M0D3U)W69RR4LIVTE2H*EA!<S.2IT[@X ++M7-CC?5O=6+7NW5'12PCA84C=IV\=Z>E`2I5AAD%7PWF;1P8#I>9T,&5JQU98 ++MM5M]TC'TT1-BQ0L2P@4#1O10F:"(V^M].$WBMQS>WEJA6F\V%77*3OC21WC) ++MYNK=(S;M&RD+LF+*=%JY5R!85RG5Z[1!F)H6LO*MLXXL)FZI$R0LS#54;J52 ++M,R!((!`(`PF[E*D*K<=/!QRT>S(ZJ8(4NR;IAD4"[^ZX#-1/H+)0EBP#`'HY ++M68@68A\*&BQ0B0K<,Q[=W:X@6$A)DP*Y1#Z=)W`LH9(A!TX(RXS;RS(9HYKY ++MX2J9N5-U-*YN+G0\NMX8N7:LYV=Q6R$F4R;^%\I%2^ZK6]C)+VQN9I%^J]WK ++M5+K]GJKNQ7<VXZP;YS.9<NMNJ5X_2L8YS5-=);S+G"-(G#2RJ#MN;"L$B49/ ++M+J5)I.ZOMRCI&'KE]QZI8J9RER%AN:5.E>)3435\L2%=73-JM1V^F,.6CMV! ++MDNIUC%>%6PEW!3>D8))JI.BI$T1I8(XO+%3>+EN&<O!DN<(3FD'O=DCL0ZHT ++M83J9>D7@<JE@*Q19(I&J<]NY7$P#V,9-[-7.,(CG6,&-5,:G.NK(0J`$P\1, ++MP!>4IW#)L0GV4K;JLE;=8)HXQ5VW6*@[I\E8J'R?<YMFD2.Z^WE73UIK1,BG ++M"+E.3*<@F]L8)R:H*;+=8Y4DL2E%8K8B!<W1>[TQ'1J&$R,J@=(-/$&P!K0` ++M<Y0Z+O1!CC$`.,O!V]A![M5PKHS&29=LA!@@V5='1+Q36:H##-CAF1M4)T,9 ++M:X'=KILA:D.O,S#;=U<I#CD0!I$1!,"!Q$<UQ64N:F5;7''HN>ZEM\9-B9Q= ++MJK*MX<RE54>RJ0G>Y97=>SDLC1V&<."SVGGW)-4MI2%,]C6GLO%Q.[,G>#%S ++MCK0AM5=[=VZI.;1%O"Y"W)H3H2P(AMOL[0G/3W<15++F]%F>/&PCKS@JZIZR ++M"+I7JDS>&@<%,BCIOPEU(^TA$"(@1"(SZR[%?ZEC[^@[YP(!1B:'?G%20??C ++MMTOLTVLV+4R_#'.6=*(KQG&Q+#WDB2*C8<@@LLH3#A\^OU^CUM-NYKM?6,0C ++MN3O/`\?/;;?,MU#`II0KS9BL5`1(_OR,']\_;XC3,TX1LC^DS4@C^Y!"T*,7 ++M*BR)K1A-Q/Q7)NE-TY:-=,ZT%?9M`M!TJMJ]UA96L=BQ(;>VA(NU%FKF3LE= ++M=+"M5%HNM-#+;7P[>7-@^D*O*AX8`!F9ME-O.)Y,/KO(])\WUC21034R3$2W ++MF.>O7OKU/6"FBIJBI(JK)Z@W*.W&;ZSWV`5BIB'N_`97OW"5DH#RRKDGZ%6B ++M+9&JH[V\'(PC*I2&`_0R]>]>(=4A!SI)8_A^'FC;M(X**3',\7#1%-'`\MY& ++MA[)IV,4Q`0GGI=(EP1J#524789\^6NWG69IIJJ5&RI"0I;<(E<K9C&V9'(22 ++MLF9,-]_N]/T+]N=7X_7[$XCE1V\.A8&)'RVM+)(*2&2L8+JO;._ODYN8V)TC ++MZ$W0H\^X4!$O9.W9L\YW=F<(#=,"B3=W4A1/#13![NC,.-:^8Z:.]4X#C'`$ ++MZ@.:S=F8))N6)29EI1DJ;K4)RM8>53P4&&!S$SMS$7-\X.%^CU[01%,4011% ++M,3,S-555UW5TQV%FJ(EIH*J#7/C9]OB3)BEY1VJUA@BM!MWO:%VF2JH*<FBD ++MR53$M,$A=^WW=\\,%1$:#5#W9$I:N1F2_>IC2%P$4U*)7)]7KPWK8Y%4CBP1 ++M'W988N#U(XX*B@7.<M<W-VD@Q&YWR&,)A`I1"6"O1+*MB1#??/PS\*].?*)K ++M]'QC[MWJ?7SZ4.(L,P,245K)(@6OLV"T2C_""=?R34J:4MUW7AJOI[4R9E<H ++MH6;FI0FRS+XZK=5NR'5L*K*QG<:HN<3I4+QU-;.W+QMS=R92I&5-&XK+LDUE ++M`:*JW(S*"JPVW;E/)RYWBLL9>P'U7(E6@N=F3=\LC1AQAFZG8TZ\RN:?5JIK ++ME#5](S+N8<A9=:Y%8CB>)S=:T<95\\O,Y=([*N:ZW84W4N3-";ET)9UN,H-9 ++MAB;PFFW@D]6WU+3JKJQ)1/"HE`:]6BKPFLRE4MNSDX[0J<*.9++(DMY>D9(> ++M91P;(U;=/*%R2A5C;5P<A*R2-&9M]04A23NG.=Q?8+OJ.N4VYD)3,A*RKJR\ ++M;IF]2:SR<%6S(XBJB(A4$3$D2/.Y'WW)%%>_.-S143QE2=F#8J'&O:\+I@I1 ++MJADN7[WOBE8I5(;'LO=5B%[>&G-YE#)%6-0U\J+W!5-R4P^KS[\T[Y*J5I1( ++MQC&N,RP*(K5$,>OOWOUT*0SBQBC4UO1+Q.D8V*=LEC/VW?KMS6\-1%5;54P4 ++M"D6Q)9QEQQ;7>V_9\A-]CR+<6E^"^+B"7@*:.1W@F-&10`Q]=3\%O8R1^O?R ++M4[=-BA0NY&4/VPM4%*4Z]+$T+2$A_%!X505-U$\MF%5TZV;CD.QO2AG9$]36 ++MZPF\M9@<[H5O)9&V$9E55!5F.*H40')A1A!/$#3IDQE-P"VP#J@6<E`:0=4= ++ME,%*!IC,KK5"Q-%"KO`I@"N.*=-"UV3%39RAI5B@;F,"D4*E\^PGMFR$I`:F ++M9:$XD`BNI4!3KD-EV!MX*%GMW1(NPGI(D&A;$V`4S6+=%;<SED=-4>5#5@Z1 ++M\@3E2Z)7E+.UV4S&7,Y<CBYRC0R<K%9NYMT-]VD@]!(")2CD]*P9;.Z[0541 ++M1155015&*HL8JL=6J;B%6*66HE)%UV"WD/A@51@PZH(B*B*KRW(M@JT:((BJ ++MBI@@HIB:::[]NO7<<'!04\)@(8Q@HJ*C*_=ZU7;,FHV9`A544'""5)A]/0Y3 ++M6PAQ/7XXXH=E*:0QY+]WO=3S%M+@VQ@AOR76.":C$.YAV^=P1-H1!1&552H> ++M?&6MM=_#GK;'R'KT,O)*.7FDFE>.*MCC)]>';BCW)ZN0Q$K]I#!]\&/6PW1H ++ML41_*9_B5N*3C('6\G4A-Y,U2J218L5*S#(RK=R1Z29SL8I$2Q5H#,BXDW<0 ++MI,/D+S.0Z0W"2".I"LRIS*&396$CD7I?":$V]R=.4LM]6OAV;2HO!=YJHD7A ++MKC7%F6N0DOZZQN4J+%1@HXJD529*:"DI28*`IIJD**=+;2P7$%1@+$$4BBD1 ++M%5%=[&FJWUNL\RWEY4AJBBU3_)]O6QTS"4`>R&AI3V1M@=6(P'V_AN]H)BOM ++M,AQ'AQ")P>?F8>]QJD-!HI(D=!H"(*+%>8>!PQE-G61!1:%('>L@*W.?-^+L ++MVXDBPZA:P<9)AEM+]OVW>@VX%,(@?5Z>W,YN$<F6JU-%FK4V9:B6MTZE_9Z] ++MO9Q?K-9Z<!WVN599F!A'PYE'#UD$^??1"LS'<,XE[@0>,3(DW`(J<$"N60N] ++M:WLS"[D9W*_"$11<YNDIA$XDQP?I":MK@E@17&S(U(JH)U*BE<9(;AIWK/D= ++M8F:O,FJ"O>#-%7,]CD%1<QDJ+;/-J76(IB]=,+R]1NVF?>T5/D[S&J?4:^-I ++M@F->5<FB)**)BV=7O/8X5!1[V8@\V6*BFM'KUB@[VQ%[CMBJ9IO4-&X$<7J0 ++MS4Y<@GA(X:DR*(>QI[/N?5TF8?)\CEDDQ-\V'MKW)H/7QGE-O>$6N0IR/4<N ++MR]N>8TIH[/D]D[/DG>Y/(?.8^(XE$.GI"N9X8.;<B'4W1MH"(:;8;<B;2#GA ++MPG(IFW,VG$'6UH`HY94-)AW9XY#(G.Y>3GB'3@*9$SER"D]RO8/4Z3OGG"E; ++MF-)X0_%V'YAK0E*^X/".0)\P'9YTRL8PVC.(``D"I'%R$HAF!1`Z5%=;DW"8 ++M`N;3=M(4W:)ATF1,U"+@N9R-5["3%K%0?&PWNQ[ATQ%+S6[FZ=2F'&LQ)J=I ++MIQ<Q$KD$ZA%VX/(%.^6H,WF]9H<CDVD#>H9<U.[G5QZATX:3N9!<Q'M.TU=4 ++M1$5!=N%LP5<3Q:%$RZE628X\\7QJ<8"!&&(QC'Q:4489W86&R4DG%V\$"(NG ++M/8S(R(\^_61"TE(144)5$0LRE)1$E)$-.]E7''32=6;\6@"@B'XSF(B(N[#\ ++M'[]\D?H^36B!^"_7JZ`[\9X`<-)%$9-Q%RJ(1N&1@5146HV*&X:J)%9#]RY2 ++MBX*Q4B3!-KC8,8PMA21DR5B#`%^SY6NC:R1R+&$A""9*+-_/[GRUOICU95S% ++M,$$&0;M'((JI*7G(QRJ*G6F)<?J\>'AW]WD\W&_E>.O"4Z^M'`8HNF(X`6;> ++M/83\M_L]6FSIX&VF+=L4B'^2ZJ;1*(!%_>T]0*MO,\"TYAU?2W<:PSFB\U[; ++MN4.*V,X\9U`U;,K:5NNMW.S#>K$7!8G&\`FKFTG*!*93M(R6R%$S,B?8Q*,N ++MW9&RC=+I31#!HA)!)1"(@F$5B!RO=/E]R5;"^^8^ITE+4$!2Q(%)5%*TTT#2 ++M;ZW(`F`BZ45(+BSUNQ6,?9Y9ZX)A%=&JHGCN6ZMR8\LVUJPVARTQ6V8H*-&$ ++M9'GIC%\`H2HQKG,Z7Q4IA54`YZYV/+544U3I'R=PH6QK!C\OG@]@J@H._E)@ ++MY%)Z5XF.142;[NF18O@5(C&4WT\>+;V+;=.V5=U.QO#,12-]8#W9<SWW0`YJ ++M!W".8KJ;H:#,/08*_`!!@CKNR/.?%NM#C]`,'+'PXZG*S+G)%9;*-V%E!7.) ++MQ/P:>J:@I56UU[<9)X2>PZ:G&-"&[EYJ>O>)E#IW-H':;+[+-7N.,SKRP;.- ++MG"FD;K;D+M8:0LUG7???#OF[%"`XBJ+BBW-YUWY"N8DM!2%%50D252T450M) ++M$LU:^+M?7M/74B2A2ANF^W`/Q@Y:9J"A:?2<-WN>;%$P%4M!VQ1IS6K:.)A_ ++M'8Y6V*H",45%$#SYT70#BS-[O6^J\L*FM#RY!N]UT,XK%6*IVIC6D@QH:[^6 ++MSV(FU8F+NMSFDH($4%5&S`H?!QMMU],N#COUARQ$>_,(%*"!!.1DR?;VS\!+ ++MUES?P7KVK$O>KVQ@J5+/T-8)FQ\+J7SW7DO))Q.,.YB8J<4O=DEZK*ZG)O!M ++M5(QZ;M;QK7JLH'6X?!QF*H$I#&SIBRSN9,=2)(8(25O5K14T;=6"CJ2SPB(H ++MCT2>/$O6\V=7/N/DC0..[$)5`1*5%01,4U-11):+3C!$:U0521:<?)LOZ011 ++MMWZ_G]\F\U,E.K(TLC:Q:#?BTA94!8>/C4LB+(JJAG50XZ9];Y94K!*2=2:9 ++MY8Q)DRF"R4J*8B3#V$.72UF$7%15(C`A144Q$3//WY[#5'>N]'3=+13,A*8M ++MI7GKQMUTV:,^UO+7MM?.;P#9)-4##O>LJ&69#$%),@9.'TW[Y\==KX)9OG1^ ++MS7V"O4YO)I=/.]RD6]8N2HHF;>4*9O5,Z"]S>XNMF6K[)$C:CMV1,BJ&*J,Z ++MA9D$D(]KN!$#>L7F3<(T0)4U-R(C7*81%$B2Y:39:M55'/D5)O<3ESFW(NY5 ++M66ZM--*IK"9AMZ]-HJJ06;U0HK0E4),D45)SY]-*.R5524BJJ**+FD\]$#Y[ ++MZDQ$:'HVJ1JJ;GA?BV+1,*K-NN,8Q0QBHQJGK14Y6(C5^-DY.-BLLCXA:\CO ++M(PJA]>IMV",=T455186QHY-X>+H0T1!01)]'*AQ`(J"@?3S]7/:O&L2U,B?# ++M&SM">'H-?K`P#&+*%\PQ@XK&I"V^S(7EB7&M_W;?]/\J/]KQZ?CS*?GZ_S=_ ++MW;XGYF;+>?:^?W_Y8^NKXHJC*ZI2M2K+'4*KI9L2J^*K6>^2:-EB=1/!JL)& ++MIK(M-%-$4KVW]A!^W[^_SZ\^$?(,^^?<??UD]OSIS+GY^?Q]W[=CK0CEK1RT ++MX=J=F\FK+?JB<4IB+K=C[+R'T\*)`B5"^4$)E/6WWI[[TW3Y/U_0>@]U]G[V ++M-EK?F$XPL5MMCJ`JH*J.4!L-77I<ATLK\W.TFGFTE*5".G`:*9FS(JD*D52) ++MT?%\QS:LV,)M$^`EEF-.5)9]>;@EDFDNTP+,]6U7I="U%%%%%%%K(X[2!'&S ++M,SK^.Q`R[`+\Z@1IBZ!_HX'PT0)2A$4H[ML":9<"*D$`%3FN[=TD8B(,(MBN ++M@0!@@#:JXF=9#@+*53NM"QM/JR+#[:`SI.Q$"!FJAG`"*`%F#2BE&"5%4Q." ++M<RAM`FC*J@13J(J(A:,"$-ZS<Y%CA@WJ'5,Q%*(,:A%B)@B(B8&O@+YZ=9D@ ++MXAKL.5KY5.6Q(T"+"GL"P1)0%#'Q0941$'H/7V@@4.]B@6.[WK%"($^8DV`D ++M!.0'+`UQ%<,'7K@=@`$V,\%@61`&:QF@>78`P@XB:ZQTB$"4=$1&C7`P=72` ++M\98F<G3,;V=<0*`?2(%;@H9$14@,`Y$`"58(40!S!&4^F5608#K!/&0*`$3E ++MN!"$;PP3&*;R]L7M1$3?#,S;`E`=`"K_>C=27T-`B!X>PKGU!9L?"`H'R[&_ ++M[L4!(QX('VXTQJ9Z-MLM[5)I`(:%`&R!%!6)%(F*)3P6!9A`G8(9D@),'0$" ++M^6"A(04(D04D@I)!MAB#1HT:-%L:*-L&AI"FAH::&FAII"D*!H:P(WT<Q%$$ ++M$/+/'I+BGB]3D]$US6NNQAF:OYNC.,Y6$=BD<36=DXP0YNL-7,Y-546%>7;G ++M!?6^K,RIRGV]J<(86$1DH,C5=W.T$6YI5F%R<YC'(:;I2&G@N;8$AXK=4ZF) ++M0*.6Z6\K,FZ=BJ7;Q-B;N>=QQQ4)DP8*[N%3/8*G$=)U\9MS434Y1I32,W8* ++MKJRJG-%V*0)*T5O;.!]FSFE22#+Y:B]H.;9D5=%5V":F\Q`.LJTN3VML+.<\ ++M3(RPD)-S>&I.!M3VS=XHVAC0;IPY==ULVS,J!3VAP-BG1[;5,WS2O@MZLTU( ++M-FMQ]5[M2M,).'.4-%"J6R%AIO7(XH@<$*%KE178MV[O%(Q0NL[:N;WK#D7T ++M5(G-V:V6J5Y09XO,S1DUM%7>YMB52U/.Q36!O!DNCC10V[O<SL7$)5DJ9>8[ ++M1G363,2K%>Z0B363YHR41T;9<T!WMW&GDWM^N\@PCIL+5R11E1PT7YCIXO&@ ++M>IY[I#H^Y\,S<G+$C)Q6]J#1O+YW72.:KCN=MV!SG;T:1MB[4]3M,U=R1RYF ++MYJW6=<TVIABS<TJQ/;OJ53KJNB)`$8(<!@!#2QQ?9N3+JZJP^XW-Y6G$=>T@ ++M5U](Z[@F"=%35SJJ0\HJ\,\DQLR>6"1?;.P8OJ+T,,$\LQ#&#V1,67)S)RKR ++M\A'K'&@MEA;EO*D'+RQPH.MX]DFL0%YVF..Z'1RKN8U`<<RY?(9=Y>V%&[1F ++M=N]L+".*UQ9JJTCC:TN[8H=8Y:9[G$[8S4)'4<)+Q2-O'C'36[6.ENV=X6*G ++M;3&Y82IU(G0&^H-K&>J\M;TM<N=S;PW63,W1FEIMRW;LSG2>SK%U53(RU)!# ++M&9M3SQRZ=R=Z0;8XJ2)X5/.E2#MA$]5.T4M)5(W62Y[+H7G*ZR!/=!NW*S>5 ++M'JRWM7$\CW4EKT6+Z9KHM2Y&/*&8Q`$"=&SE\JQZ'$R9DY)M$V7N(4T0*-$4 ++MWG3ARGN"MFQITAMVG@_XI'6JL@ZT4F6%[N0DA3:TW9!]=K&"]J=&K*W"YFK; ++M%+3MN$"FI(5$[N(L3EM/5V8[!2KLRI@2.GMG#:"VMG=O*[LH[LKJ1;<9!R94 ++M8$T-8L'KU]HXS-G.HHD!ZJL5C&9,&U@2VJ<MYDXCE.AME(6-!T4-9WCO.N9S ++M1VGM/#LJ9G,SN[AQT9RPQ@6W-=LH:C/%3)#C-NYGNN;S"IK16J="J,X]-]VY ++MRO9IXZ5S5H9=WHLG*P)DUEB`-@(!3.K=E,U8MY1VNTUU/KZ:BU9%Y-(C42)) ++MJNK;32.56M:LUB:=JJ6MV"%M=:D;&F"TN)E(0ATX:2-3KUKME=9IV:S1?5>C ++MMW--1F2'1=)95"B-HH@W$T[JYD&;G;UFE8JAVVFZ*<]-_*WI]F$EV^RW?4/" ++M41/;8G#NFTQILEB]KLX<%X+G6IU8ZF42@L$Z#/6JU%`U*R5G-S1'3+5[H> ++MG9G'W17272"SJIWD]FV<K=3+U-473/4;D.:9$I6#<,619PF07B&8E;I9%2)G ++M%>WA>T[H`J4I(>*YIXYD](6LYO:T$)WJ,)S1[,-;H1O>-SE#EA5U3M"E,VBK ++M03H9..G4JN[-FC,SD0))(#X87A9J:J9P+L83F<$Y0H"1490H0V#4BS0&3F2' ++M.8\S#@1L,JJCMFLS)`FC-9EW0G"I`;6))&&IPW=&3<VZNKP5!3N15559(JJJ ++MB@<F=\-+5NF:[BYG0KAV]*J%<(YMS#"VZUAJ[WO<5W-V*N2&9B(:\1ILIS4> ++M1T\Y-$0BJJJJNG&QDU[=^-YOLZZC1<==1,Y>N:B!4^T'<P!Q2&'B8(&@HM\L ++M!*%];Z9!PSMBI^9U=UTYP7ZC5(&[",VJNJ\"[I8ZZ9I:*=[?>UJGN'#ZISW8 ++M]K<VM&=Z%9J;%8JZZ:"2+62N.*E8]-V*"TZ=G##>9,H\02LR^/,YN!TIG?"1 ++MHD8=;[B*D;C)(/MV_9G'<6NF0MK9W>F16;1-![E<]`,I&:JZV1<F3Q!E+5I% ++M;R<X9VNN`M0P9P!1<TT2.F9*.YG'=5B=6DG"VYMIPM*T(G;4L232YH55+3!% ++M6K:[7>5U98GBQ3?HVG++[)#[FZFWP(+\[GN=\>G0;-*1ML;LBR%,D(5I6-3* ++M!2LGFJD!\YTO:BY"'J5UESH,]C8?>MVJJ^#M=5<#)6RF,&SFY><UNPU0-E33 ++M/%N:W46!N6]Y*5JIC,V3="R[UQ5H9EK7HHXGN5K<Q).K*OI=;TEY!N]%QN/' ++MU:7:8O'/#=T5.WEX*&3.LS487;:%8BV3@FCKHF)P/+=`@;@$9%@8!?0+%WI. ++MY43S)%3URJ;'$2+%-$@GKC"*OL*;/"3D/*Z;D7*-5,SR%UC.FNP*A=5B2D]6 ++M3.]M;-%`C9QD,V)0Z;9GD)D4;QE:"DNV[J0JFJ#HY8YR1LMG:DS';+%3F2E. ++MF9QU35.7:P6MZ=,75SD)6<S'=T.>Y6(7F=>2A>]55R.![1(O<!4K<L9.-F<= ++M3U]2OM[$^H-2^"FJB]%@7JWWQ-T-OND.N[('OTYXU;"S+?4IO^GCPX*K!\)E ++MXD">F2*9].U=6VFVVM.VE1J2A;*EN=Z`CA%!145$$5^O>^C>$B6$XG!^FY>Y ++MHYG=^T^V%>V/>[;SK)PRP1G)K7IG%>S<P;1%K-5];1R=INZY31>MX1B.D31T ++M]*S$.,BBR:B`*J)RD<!)ED&&<QS)H\X4$SSAV=R5>.<.F-`+@Q0N-8A#/\>^ ++M2HJBR*+&I(BAIH*2?C>O67K$7J'5:SA]=P_%N"Q(?IKZ^>]')"/$*^-[N*CH ++M].=:VBIL#]C^I+KD)A'(*-W3*(@\^-<[WQ1Q''K/TNI3CL5P53&F';O1'+JQ ++M*7/7MOG@U1CFRB4RA$6DI-"JBQJFVQN7'<*4X4S$1RQ;&JBF,4I:E*BQB%4' ++MXO?M^/3JZ7-MYKLD^5C]9?V\\>)L&2`B(*4"`Y,`(@DP(0F9N"0('^.O>H_J ++M=^<>WX[-BM=]*Q5<U>TT4)R]C+5WR=(Y>GE6\J*.8:+E+.P2QU*N&!W6N)#= ++M3G*)S,W9V;@]-1=YA=MS<G3HLVQO:G(2U,.Z,LSDZ:N@;F\FJJ.K#(F[BYK8 ++M68L-3?59P;B`@2&5W#JRVALB=K,HO-*R@@P"P#-QGP&I(D:HJ^<ZH**JFHHA ++M)6=S*]^)DE"B)CB"N+MGB?(5%`7QQX9Z8R!16,:_O]0LQ872E8TI356K6-L: ++M#$L044-+$--)2553[LSR:K1C&G]N='K)4OKWZ\INP;,&JG.L&,O?N/G]>^H? ++M4L"5-`U13KU:J*JA#XN\Y9&UH`*B,54A0U$B"1KMI?/,Z^777+7Y.9IX7MC5 ++ML08P(P#EJ[*!')*DE_P(0NOX%_ASBU]-4VOK\U5T:N9W!/7BT5?:GIL[A,Y$ ++M!&>73@-$(D8;!Q[LY:J1G8,TX#MYT\[ZS..6<8)46_"/;E^&B8P$4*31Q-I$ ++MN010]6P39D41%4C%8BHJBQ2+!CF:VUOJA899*1F:*0OM'O\+SAY/76FK'W[I ++M%=C/;!S8IT-!B2("JITNBDXW*>8T:Y7X_I<\")EBZQM.I1C1@T1HU3+Y<"(( ++MYBSLV-:]_-#3M7%R9>$1%*FF4I)E<6L156+QGSX5UK">F4[:=MZ+][MB79(! ++M&00Q7T0@J.`8.'L<Y:3TYZ:DYV;=^^]R?:-:WNK:=7MT4W1%5M7LS:&`OAJ7 ++M/*L8)QND.P3V*JFSADM0=(,S-'!CB`$LUUVDQTH+FP[G3(DL&$8/*2):!N$* ++M*@^>?0.HHBJ&FDJ:J6J(CCCCEOK?()*FB:J)DA3NB%%3PW**Y;&C(@1(CJY! ++M0N9]FG4A$E)HL(**JEZ^F:JBE*8GH=GG)*I*$*/8<"][D5'2TU3:>UPS2G)- ++M46QF#]ONYVHBKP\6'!1)2[#%55!D1%51$8JHH*H#:^GIIUU[\^A>?S>*83+I ++M/$>C5PM()BBS:$O2,K#"!?BJOX;">.ES.^JLXR]I,AW=1O[T.`@9E-<:KD]I ++M)$(VDIHT,+RQG49-.1<LUO7KI!P-D;LWU;A==S<DC&,5)(]TZ.&?<Z[]'$P4 ++M-J.EI*0I:*2C[7VP9/HCI"3%4E1)$GKOEQ?9[WZ^_*"R&C8+9:-SN'H0\7.H ++MC]CW^OG3R(BP>>PN:7!5U0^R72.(+-))*V'LQ&>G/6B*IG<AR2J2A>-.#HC4 ++M://IVL7R8#%IJ!1?!MOY5VW^,ZSCF$-];4[O%TJUPJT,5:>%PJ$5)>H%`DGJ ++MC#3/<C]UOO3^_P?-`K;ZGINV`>N4I5;,V4<"TTYZA.3NOM(G355>3)%\R9ZH ++M@"C%G<."<M5OM#5F,KFU4:4&>T-?':$-]]DB,%$I@B&DHI/B`TA23)7;1IYP ++M*:Z\1X'28A$I,#54:VY:+@7[OZUU/?Z^:B"MFV*BJ#FBXU$BKUX^>^M\5>M% ++ML@KB0417&'U)*DU"B0&"B%#O1HUB*=_27C,10F9\;M>"K(15<5B[A<2R"*"E ++MN<,)^WG>TS`47<0>%4H<SFA(2+&6P(F%$C!",A,(J8I9(4HBQ`Z^O+5[7MI> ++MVP:$OHC'!1OC&`+J2JD8T$J,(!,8P!I7CIXXMHWQ:T(@61(DDK&PS%2I,F;, ++MAR6T4A/\9[;S&"*LJ5+$J(G<F]MH(#2C9%#N<\5)DBKR:H@"-68H=6]88()" ++M*)*,$'<NI+R0=3C4CTQ7.M1:UN;FA!>7=Q>]-,D11BD42@RL:;;"*"J*I$E* ++M0J)3NU/+U`9"Y$5&C0KCD8*CD\,Z<T^Q)R4H1`C))+[?'7R2JF\DHUH-&VC9 ++M',D1)'%R#OY_9S1L>,81(R1PGA+B*+27`Q0XHC:;#O7#BU$4-`4:V[>GBWX3 ++MB0RPB2*<F4JIB*$T(EK(U35"TTDMVX->_5]?;--,S:%20P]I`$\?2X%4<+)F ++M8(J$<R\U3A\\RUHGYU7^^:E=S4V#0*#\.X&,%0\7'<D\)IM:)=$LASG"I#MT ++M=Z=Q*VKIWI5%-Y-R9YL]=;."W9VS.4Q>BKUXU5D3.".>7.RN?(/9IWQQG*(H ++M1Q)!,5(]1L$&5*!HJDI2FFBF">6BEYL%7,:%I/J30E%+?@5Q-4T'P?GMQT'9 ++M2(0\/UW.;%3B,D*.L+2A)$9",;2`PA)(7#,),5'%2/JZ,^.N:>9"0W(UDMOU ++M0UBE%%H84Q9+U19"A,7WWZ=>=S7QQK;@#M.,=AG7.2O`43#!$4S!UV%2O>BO ++M\[^NT_ELY(OZ6T-'PP)E*5ID]52II5?5E*Q:H1`BFS*I;5/K)=R^)8#,@U>4 ++M@>.6L:9%[@J\5T33U7MBK&;UV.0T='+Y#&-DTS*SOI:7M%%4576:0S15""I2 ++M7UM!0E#2524GN??<MUPZ=%)?&32\YQ1^K\H(E\_2Y/"-C`8M#K044R::<;!H ++MDI*@J'\N<"JIY+LV:M:B+'U9X(N2,Q-=:KH&")%!B=@_5\]TW,C$3$1F%F%$ ++M2V_7X];S%#)5/=OTM=%-$A16VFO&1ITWWQSX;=L)P<=.._2H8A`R@H,"4`B! ++M@_(_*XKORS,W/#S%V/OY,'@>O`[ZKZ^>=<[+8W;U3H1%@J;520TNWM%Y69IN ++M>FIP7!'2S8N:H%T<RKV6*)RZF<12FN0XC:67LY(1N7$WV2RBL3("[,D16(:2 ++M1-"V)[@G71FFAAPC@=9%C3N5C%[:&R-<[C%J[VV*#4SE50+>Y-CE;>8]Z7D2 ++M;<Q<ZZI9F]K"&].8R06),QQ6C9V[V6N0OM[EU';-LGEQ>9QG3M2;N3ER<%*W ++MFXZ>3,M4@,SJOK1%7E8X1)*&,6S2CSXA-F"BP%%`50(HK4_:!TDQV^H3A`=E ++M,RT47?CG!T>HJ*BO+"CF*BH'I2%0'"H%2)UZ%6D+BQ@5;B]U5BC`KCMQ?&"B ++MBJ=!\_?QO>.**.;FX4+C"22-,6AJ';6UQ159OS62!=(L"R1:4$9:]2.F=UBO ++M8QJ,4;+3+!2\_Q&3H,O&L5EIOW.K/N7(J[FOK=V2W?3M+>O[\E:B>>.)RRU6 ++MH="JU,DX]U-$[I'NDGBD<KIBA6I4)*C%262_IGFDD$J30*KYIZM6>F$44=5X ++M^BET*LSECIA5HJ3M%'4JU1IZ8Z1)9)`=5H<]VP%K+",DH@U0DMUVYTZ9=7?K ++MSVX#;O6E[X;URAL&NUC[,&!1&X(>*118<HC`AS10&O@5M>BB-Y:K#$<DG\54 ++M"*P%E@^")/R_?YEMOX]`?Z6>?^K_A8!-86AMNJJ!:4<6&YOV'M;UR^P.4Y^W ++M,'&://KE6<G'M[.VJ(92H*HJH**;.Q@OA)K87^1E1/E,92SQOJ]'M*U:KFT- ++MG.L6F:%C/Z"$EZ$=2K4J^ZL]TFVIH6JL[G#-H;>T<YHQ^&8"515!7=O\OB_C ++M^G\KF[N[_I_D$A`LX'"_K&]'[7E](5C^M:/@]X20+00)\E#(F0_;(\IWV:(1 ++MR=9-!@8!6QVV!%8Y"ZJ`7#`'.8R,T[T#''#0(`S"O59F_!Q6W.UVNQ?F5G2W ++M&T`&+TAI`S9"QH28#.Q5R7Q((8O-XP+:)KT`3"%@CX^#!B`)ZCL1GHFX$`.J ++M#&BW3RE8:.@3`BK$2>VN((MR9S<$UE`QD`;Z,@#ANB/#8$#JCY\ST1P^<#4; ++M`NP!YO8&[T4*ZL'C%1WAA$%781$!0@4,P<+$MP(T&7"$+MO")`!0PM;4;7`5 ++MS$ASH,H3&@5L$+$#$\*#$#-QB!$Q0CE.Q9X7$0MCV20L][#A=BBPY""#'(`" ++M@!`&NM_NS?9:*-2QG(6LA"P;?AA09Y2TQ));7.C&T,3F]:YY\8,)"!#9A`AJ ++M25)M(R1,2E#24-$1"00K`+$P@20)0L$I0[*/::*(BBB"""**(@H@BB8B*)@@ ++MBB())B99B8F2:HAF)IEF)B9)IEF6(F688P&+&1B,2*Q:DSW==,%8OC2]L&RM ++M_8G-N;S9HR)&5MF`!20^,7,FC.92$[+1VQ-BLQ]U]VQ0L7G34RLHH[(K!(/1 ++M`VA2SF9O$>9DH6)&Z,J\P3IQSBLR*ESMS9G;N#!MT5IWLEVF)J^D\=OKT"QD ++M]O39I8)X%BQ6F9S:T1%:>[@ZL]KZ6;RZ)D4,MS53@`0%3VW10V.P(9$L[UUG ++M;1V]&-]LR-3UH+-D+%2SEDPUE5:.;R8,,2>X0*5]M;.6<3-YNX'/7O/+'+M. ++M2I+=,]1Y&ZF>CA0-SNX0%L[L](*;YVAE5U3;&,[L$;.\*O:>*$0WE3IW:T89 ++M-'!9NS6:%<\6C>=4W738FHFLH=;6G)EU5V;M#*&M<,(5R9UT97@B228F<@A) ++M>SAN3DXS=!DIYE2#+=4O;5:01LB($7-[MJY=E)4**XD&`)KWD;X^7"@_9M3+ ++M:<]TM9,02S?;6%#KNBT#A5RW:6YN[@JJWC`6\^>%+L6GIO=S,M9G92-2=NXR ++MS=G3==;UO?7<NS5X4BJ)F\T*JXZPS8%.+G;J9D;=90JGHVFA>N=E4YVIUCCP ++ML=+>\")6D7N5M"ZWAE5>53=*RKU*M/4GUYN*2+-U<[/&DEU8.5;"QA.=R<%S ++M=SM"ZT.3.YLS*13J9T8W?!*M[++W<N9=')(JQ2U9N7U*<[)5\NMTNX;@O#KV ++M9V[&SLU8U.G8N^S2-L(\'BK,FG0RCRG-5H7,7LJ]U;VY13:9M;VY&S?=V.LZ ++M073S*V[54$1?5BPW@+=#>OF[U@"Z:/*QDI[SS)U"G8GM%)-7Q5T9VI-*AI1( ++M.;(E#9H#2-FL12ZZ58JDT=<(K5EA]NX;W&BY?4T;VLDANWR&A.;X[-LP(`@& ++MI"96SVTIS$3(R`=36+<52)>[5;.<9W$BCBLRL4I[E(%BKL6@Y5"E=!R'-J.% ++M<I)ODGNS2R#V&T)YDB>59,Y(L1"@\>L\LK7R"PZNIJ6Y>TC40-$0.B+$!Q$J ++M<0HK2*=Q,LI$Q=3HPX6R:%6KN0@30B$;VSE$$I:6^<U2J8JKW;5\YN;O-UYN ++M<I2<$:29L52,V#(L%L\*TNK=TZRHJQ<,+)MG0'PNZS<BE2O::Z4&-&Z'A9!? ++M'10D51&O'M[4LC;UD,W*RCLYD4</1,M:G4]=*1P:(H9BIB>NKH4;:76K79FF ++M3JIT9/$'Q$CV9L#O=&:M6/QRZFZ4VPV+V\65QT<7=O3N<0;'3F[6MR];'$+G ++MH)JC?"ZN=>!]>\MK4$--<65*V90H@DU6[5C*S<P;(63;"7<*ONS)6RLF9ME4 ++M>X+N)([KV4T.2[JH:21TR$@:G)PT13JJ6@OLK-VQ>6\)1&*+=5.!].M'K%D; ++M+U3TJL7`=)N1HIUM$DY.`2!4[8X!Z%8R\@"7H%BR#6'HN["X<2"=S50I511B ++M*J@JJJM99QOAUQC/)DYE;;0>MG"BUJT9[PS-:,/M&UZ_7IRJGSY)U7N]VG8G ++M3[8<W73:6`[MDL[)3FML[=&G[N/8VV>VBI.YR=/L!RQA`>5M;9;MWP;!(W=R ++MLJS6*G>69L;4WM:$<6H[..'I$C7)4U@QUE&\OC,@=6N12F1)6RNQ:;J@2C<X ++M9I+3=<96U3NK3X4DDR+I#9O#(=4]Z17+BYGFCN],ZW04SD]G<2<"(VX*VIKE ++M5%'36=5DYUYSMD9(G-77AFKNJ2X+,J["5FI!E&BS,H*STJ]RHVZ>MGF,<UKP ++MJ\+.5:$[*%N#0OKW!6W6V"VF@:*U7)R>6;@2+8F<D;(>7IN<QH6J>]=,SF/L ++MIH*%H69LU=S*E9J>;0RK59F=V=U3DVUM2;K3)%-5<SU=.@]-@\AUW8?">M3M ++M7CUMPLO.-70%!+A+$P=!PUTTHNIRYS>%'-4X,=6;`2:0N!</=`8GH"71PVM' ++M!QW3FS6D)2AA5R)$JXGH(WM9.FI69TZW-L8<IG;>C,!M2.O9K14FZV<.9SW& ++M7(7.\UTYZ>5SM-K#+#3F=9Y82;W7P(T*%VSU;G.KX7G<#?7:YZGW:\`RZW7/ ++M6]S4NDR=,Z*15(60D$)7)[,T072MT*N<$X,G#K[N&LY3.:9&:QFF;:1:2GGL ++MQ0VIV^J;1D:=XZJ$O1IGG;;+X*+D6$;WH$\^STENV6U0AK?IKQ3UI+%6I ++M64:'%8T[:3J];&53+@+3G,_!L]G%L]IAQWTV0AFJA95!+IB0"Y:4LU&'W6@B ++M(Y&085(BK34\7GU^TQG55KIZ97MD-JB7I9M:V,M/8<?-82)V4ARYEMU=K($W ++M4YF\@KLS<XT</`YJG4+M]BKJU2HTG$$U$DVD411B:36/=[9ZTK`#V=,!%%$( ++MC@T&VXAVY8\NU0?1V#YD-4E)12!$4U0$5'O>^]-'"`*(JJF^54`?8>VW[#<C ++M[Z4:HHJHP%$E_`06?A.2QYWH(I_"6M8D"J\ZM5%5.AUQZ(8/)F70KMU.B*M5 ++M30?<N&F5\!D5IVJ6+BHR5/'&D"883-:F9F@,I7\_OK>XJ*L5H3,7<E"1A&$0 ++MDBZ0M%,&9JW+:ZYL6R)E/:>XJ_BZ'A2>'Y7OL.V#1HW=B3AL<G.L-<QJ"HV= ++M*D2$A(-M$JN3(6X9,HY`R0A%:+)HH;&<04:"VMG:Q6V:I:H8V"(MFJ-#0Q.C ++M(T4"(10$#/[J<^K?U:;96\:DGAS4(0U:HJWDPEX60;E!C*:\)SZ^+L.+VADW ++M\:H3N1T2*AB("=?KG',GR-\WXE[YXE1U#/ME_R%AAZ^4B=6JG8(TPRY6Y0/* ++MJ1YG3&#%U".NJ:=NG,UJ]:-SD*B$D-H;64E(R_AO;Z9>&F'CB;I<N&6ZRU,U ++M=Y6#;R7)T4;J?=9$T1I@V80-3SDE6V#72W(U"G/181/7MS)JYN9JFBQP0JK: ++M0F9%X!C[,G:4X'-2ZHMHL^E4*7((89(?"PQ=#7=2U=,.B72A*;1HG%1%V2*L ++MJA:=XL-[`8(5Y=#W;UXADXS((6^,SM9O7P5MX52!((0*"0-CH@^`!),!>W)@ ++M@N:DXA$&0(./+XY%W@=8\0BJ104-'71+D/!C+T%>EK68U14R=YKE5&VV9^;B ++M,7+8SK6)C;$33,%%&QL8UL_/K<>E%#^_UWG8(BB9I"BL?L;',4[1TCA#S)Z^ ++M.KR(*J**`HHB.PFJ0#BJ+*)151H[^QTWTY\:.MO4=<0XS1-/"O>/G[@\]&:6 ++M(:['.8(@(A69D$`I"?(WZ^+K6EDKQMBW3%KW&UARM-ZQC%0D`T9^%FA8FVFW ++M8<RKKYF:W.&+TJ"6P\W,!6#"L9*6%O&>H,D'2$1(N^:N[OC-\IS#57>YMG,M ++MJ,IA@O7$S+2OCTURL;6SI8K(%!:Z!DS834L2A;0)@G>SG-[]'>/J+VJ?0?4@ ++M4D35(EL:E0T1O:P%K4EI4BHP8S;;WW)X,4$E9E(A3\/1H(F>1B,8Q-%$200D ++M01-$A'Y?7#L5URX@8K1P!8L*[P58H97QC`JHDKQ241$1D("X<PIY^<-[4A\" ++M7CI!E(C8.R2XC9IJI!>NNW7C/M73OOU%S#<F"W&G-0PJ&5!2,2!@RV\\^KGI ++MUVZ:X1+C'X@$V0+$CZI#8T%!U-BJ</$=EA&;NG*RXEOFGMO,E):G-`*]<R)V ++MTJPR[I,,_20]U"_*-9)0*LAI$MACWG(:N;&79V+@IR*3"07@9OSG8FAB=)$` ++M^H,Q45!H?/'/2&FFB@/?JN#I/IN^V*JJ.(S/BW*21(.(0<8JTS%1BS1;8*I( ++MML116VT88J4<35%4&_Q?.144<U,".7Q*Z%P5!))"3/;TE%TJ*XD<`Y[_7]?Q ++M[[J3WK%HV36I*IEOWXA86-BBI54J\X[&^O'%[0GLBG:&K("IX=@<]>/+II=F ++M26)$+,$Z0:A(/X`-YJ)^?6_9OX%4UL((/'91-AS4-3EZK$B;J25LAQ2#)VY$ ++MQID&,:@CX@)($RH-@\)$@E,*Q!6KLWCO6==*[-+JNL#VZF]3FB[VK>K*O@:> ++M8T$P9QX[K,'5>Z;-YJ`K*9-%_%3MB@'44I"MBG-S,\[HW?7:RQ!3]?0?/MOJ ++MV,-%&--HC0?-R>46S@SLFB?C;ZL,GDFABP501%F"^>CC+'CG?JQ0615A28A* ++M5B^[X[U*#KHQO7L07XA0?7SYTKU"(11("(+(2,9"",8)IK+SASC1108Z?NX' ++M:6".KD>MI2JJI/'2UF)A2FFUNG7FV2`K%RA77U6RXQ#)@L$0%A%7OGBL>.U5 ++MQW\[Z9VY\=.NFPG2%6U&K%N>;79QXT!23$%9`60#/OL!@\TVM87'ZG![*.+= ++MI^)M!6)<L+BNEDYM=M<":W9E)T.&JR2-*X]HZ=V[MS5'<[#V<W)-MRC*DH'I ++M.`S+023`U8'@&8Q4$9&(,E\T*.EUSDS)"U"7?7&+F-1555<S*:9W2:Z[$IBP ++M8R"HYB*J''#GB-@=.T447%7%FNRFLSY&*@Q60Z;41$1A[TN*"MQT5HQL8BJ* ++M"/I^W>(43]!C=ID24(A7`]$T*5Q^4N.92$<5QDT96$]W`B25,?'SX_!5>;1Z ++MHVY4:=`;;6=%QQCG+3MDY,)24HA3%I:"A:8<99^>M_'KC+7MY:973+H;AQCK ++M138$5@*C'O0I4`L):Q(&20DSF<)?$\K!5KU;P\#:^6("7V[9WWU*:#X2[M=1 ++M"K,0NJACA00HB:*06"3U*J1>B9=R>S&.*V4V\*SA)XK<.Z*>!Y:-VY#[4W3I ++M[R%%E&`Q`NX1P;529PZUA#^1[*I8,;-3.41SO#DTZ#$NC*NT\!FI\SMN:2W/ ++M,J;0L\4;EH4I8;P]5.:42C;QKE)&5>`@X$4B0P&%4JBJH3/HU1317J72T%%+ ++M5#VT.VMKUYV:!5CD<1$I".%+W@<^KGU#TS%<5)GT:440<\?2YE?.Y4DR9@L` ++MYX\W#"H8JF)%4%*\=;6N415E>.5Y<A*::)@V'?0&H-,B<<]:BJ*[L8T8<U%$ ++M158T248^_G*25&W)C+QYOSX=^F^66E:>DTRYV2NAR!0^#`F597+@4TB,%!&0 ++M62)OGY>75\,.@U<U?4%P^-^>YLNU8KKQX@C2Z6JV*2BM#>;,UJ:+%L*ALD.L ++MF1V7,@[BBI!ER#05`C$*LCF%&-!X:H&A08M49SLG:;M;IA;KN#16=*[0<4]! ++M=U/*;%5/7=&\KGF9H*J[)O@14U0DZ3-LG@JDSAQT6\J[++MIII.XFV@ATV]K ++MG3.659GY.=S][:CV>>N"K[7O8T=1Q)?1FTU&10%44%C%$B@I!8YM[0RL4",1 ++M50+ZG#\'GC(\DBQ0!40)73M8LMZ1E2J**&<^?3$F!@HPQ4AV9:*B(L#3I@M> ++MBVSEQ[V.:(*2L<P<B8YU-4C#<T(JE)'%<];2ID2"J8D^QRM'%CDC!8I$(HOF ++M<WX[[.%OGKX^O,_-_7U-]SZG]8]]HW90E@5TCF0TJ$*'PR/MY[Z1H7:0.52= ++M0OH6%+<^K+ZKQOKK,QX%>"2\<JZHUDL*6R;RSEG<ZJ.B<O,.[:S:ZM>/<T]C ++M'.4E'8L.SF<.L\+#RV'U)0F^OA6Y8SEA(RLBR4.5O%ETQ116AHBD"I!HK5-" ++M2AL83P22'#;^DH^8"GW*:2A:JYPYYS#UDB1!10*<IJ/>V`ZBM'PZY[WP3*BF ++M)56H-1-54T?IC2'(K#8J339BF<CJ'L\?'#5"]G/S]-A-R(D:%S;T;7YYVXT- ++M9E04C2U114BFW%KB"@P4?MA!-Y(S(S,ZZ/G=B#O/I]/LNMA$(XK51:8M%L:9 ++M:>>_CMMN8YTRW]5N)UZ2<CRF$@?1`')124&#'\C`-AVA^PS2CJKJ_!SN-XI% ++M49[*MO*P8[(OKGDA6J;V^H7TQMJ:E5DH[BS<U#)FL2T!Y-3%O&Q3%KNYTW1W ++M52ZQ+1?.;0J9PV`7U9W-I*AD\:T':>V2'#[)(JC@2RF,""&(V^DRV]L-7H:O ++M9C;/KZ5]45(%(4A$E!RQE1=DU2%,BK,T*&%C;7SM?ME2*C5")$/L8!4Q5P%) ++MYM!$1?6ZUFIBK1:FJIU55H--7SYP[51U(R0&3KY:HX@IKZ2JN*^O@=Y=9)DT ++M93$Q]^UR:FBM#@BL!B?M^98EQBBP%A#J&CU\.=[:\[8JW?V_WWZD_-#SE_?8 ++MN%Y'2VU6FS:JV;5J***S+:FA!8VENQ0MR/FOVI:1[JTM*JHS^OY^[WWS[^?B ++M?ROS]YW]9F=P;^-E?5_67/9[:O?Q^/?FS]O[WZWZ_/Y^;^?FW^N];Y?G\U;_ ++M+]S^#TG[+[Z^_3OX^ZS[^?9G,JL4WGVL?OQ+'U\IV_K[G\_@?0O[*K\_6G\. ++M_Q5:K*]9$"T:O6H<8*Y14557J,9@-"I?ZCTEBOU\02*@1*`"_*]!S,FO\S\[ ++MTWU_L?9]?].K5^A-]AVI!-2:GRE_WK=7WS^JAUNBT&?S=%.3D4XXJIQ*$FD8 ++M$85-(V8K]"\=I-'4&T<TQ5K3SZ330KW]HXOJ?K.S^WZ_L1._51_S:$V3_P/O ++MMOY\D?BU=W=_B,-$FA`S$/X(#-7'YQE*J?XV8@1RD4(A9?KS%"?&;XZH"&!Y ++M%N.FYS0'.9I]S,1.'!8ZL'N[/7WD<R[4KJ\U`@9Q..+KHBD#L(5.D8(B`-<0 ++M&I2SA>%,0&U-1D!0Q>C7!K(X4]@B1N#1(A0=!D(Z)&"J,P(%@"(>.[V.L#@& ++M*J,B+R;F-S,%W$B`)@``0A![LD#)X;>ZV.``AU&=VY008?=,$"^Z@%>I1C![ ++M1'3PHUU4.%1L*[!VN.O0M8T,0'$<ZP!P',#D^B-Z`8("'#,J!8:QCNVI%"YW ++M8_X(J[!^#YOR)X3WRJ;X9:WK[Y"QH5F6SOG8+93B?IVU)#!#9TDHR)"GES!0 ++MUYAF'',"^G4AUW6FEJ09EWIV/?+Q';Z;G;U"AB[E@U7S[<N>EDR2(.-69:`) ++M"OM%T-P$<QI"RNM](DR-6#M3-)=!055-FB*CF730DXE:!;DC#F%,.W)CK$S= ++MC:#.$'4$;VPA,I4-#W7%96FMC)',3L2-8<*0@4-[9F>[)ZJN2,4S(Z5%]K)F ++MF-G0&HLETZF[JG$DI,K,"W1CFQ325W8>S.[I,4RYNAIA"P13!!LS==:%(@KB ++MZG=F)*NK$ZF1J5U&D956Y#JQ0(96OKN>J1;"HHW2.2:;Z+&J+#NT1@E(@$$U ++M4A`2:QBQM+CO`R;NLF472A9-<+JR&A28F0@;(9T8:D22VB"#;;G`Z(UTX*JY ++M"&;LO+,DI2S%F$4:"FY36AS5$G=H"CD2,:,XS#+U2Z%HW)*#=`LB@3E.B+I6 ++M3AH9(:.5/;9==@)#R4&$52"@$R4*NWFU11L(8E:"0Q(3:=!%U76=S*)%%SA= ++M"A0EJ339!3*3V2D[HRY/$DD,\B>(1RCNB<.JVLS*ET%J"&@+'%FYZ6A+&<^Q ++M\%N"I!N31T-Y=!'-O%.:.5G#HXXSD@#HVZB>PT9<$@DP3IYW,Y0VLJ<%EP3K ++M3).)4[<]>)R#BHMI"C.Q%*BIF0@3)TL$&"!6E.#*R]H228IUO(]NB]@($CKZ ++M0IFD-Z<ZMP@T)W>X;U!KF:,(W8LG)9,6ZITH%;BG6Y5B@2%.NS#1MBB.D.F\ ++M<SN8<0))$4Q670FK#!!;#9B0.3(J13S*Z;Q,JB$)-5>4-ZW5;QXCLZR;H6<. ++ME4B,IN55D+089O):J`,Y0'-%;2)[6;INSJPDL66)RY$SNT:WJ`0#(.<YZTKJ ++M[?'&A.).N,S45$M;FMH8+RK>,3CSDH^O4A%&,&SX,5R##\K]37MD6+63CC$& ++MT$AOFL.N:CL5A!XA))W5?4GFSLX7;UDS4T(,S/.TLG1U#%XK"1>KW)F]-1!, ++M#C$@6:.)$Y6+TZ4U$RS3,;HL<-Q\N0RK5'+M"N.G2>Z76FC9N]V[V16GID79 ++MGP]NG,S2)8N]:M>+U`I&4K1KO8?4\[:K>NY=V#ZLSPS9K'*LWTO,L"7O$B!2 ++M1JK]0.'W=>D$:EL)0NN71$$$!5S9,KF-;FE];&-;E[ZL%1!8H1=!E<%>$;=U ++MG3-]NR>/3UW$%XHP@':UJ1HIQ9$(N;[`DG1NJ*=*N1QDX3KDR[R5,K#O%3#[ ++M`,''>K;LT[DY3V;OAVU@5W*RJ6YBI9.)2+NKE'IOML5M55ALFFKUSDFW54J3 ++M.(8ZV<[9NM"/%7N6#5CG(PX16U\6OE6+9DD+WU-<F]];(+(H"K$20%4%D4(J ++ME\RU],&61>Q(Y4&N.SL,F;ODQ4[4ET)-(;6R;IR#U5*=(34S8O$I+JM5(&:W ++M#G5KO.D/&R^1%TZYB0\O;H3AP8KFIH<WEKJOC#6[W4Z?3-3IH]PSNYIKCSS* ++M-]TSA!&%SF3CXAC<OIMYF1)B"2`0++G03>RZV;ID3#3T25NZ9JN[=.HU,6.O ++M6\0K,HS8.[E36Q'*B06)"@I7ID=BB]P29*;9PQLW<@FREC11`6]`B`GU[($C ++M#K)H\IDP3D%"33*1<R-K:T)J9S9%#`8@@@$`B`=27<.[:P2M'=0?2=F-((M! ++M!YDQ3A]P>S*RQAY*R\3DXLL9TPN-3NVO"!-TJ\D.82020F<%"R+/I]J]5.Z0 ++MO7I>4:(IAM'6F92&8N3+AU4F8\SIAF!E3!4T2B/82WV'*]CR4+V!OAM3(($0 ++MC`!O';FE0D<JJYZ76;/;%%GG@M42X&4IQEBHHX\Y:W/'B.W;0MBV>*0Y#M5* ++M;DA:]":E5*F^IAJ^4V*(F9H(T16AIF@03)A"8I/)H1Z"0"^K"!XG$U>F>M3X ++MYMA7=$:FR5)Y.S$F4$R#F;EN5?,8]G*JJSLWN[NS,6E[-X<[=<9R`US-<*S+ ++M+I2T#4IG4J&9@H7F,$HJ91N9:I*IS'(.`LQ9ZD0<0*5RKK)Y;-[!21!`2"U3 ++M+F3!$/<$0G6]?5N<J,222)W)@559(HC<U\YF0M[`LH2X4I<$%6+1,U4.70%D ++M2B%)EBM<Q)-[3':L!K)(,H3!+.;,YB@N)!),2(`N,=#:[7FC%+!4AR=U`UFU ++M6%0#A%URS*:54KJR:AS%T@0R[<E2U+;/%+7<G,J*PDVDUSU\W:)TA]8*F1O$ ++M<Z"0RY*90R04%(9FPA1N0D4[FE-*;;IZ-K":IAF"+W'(9-*CVH&98-I&\F9- ++MK#TUVB=%BK'$K9$W.U+=0@2BL2B5@:IB</.B+QO"5):PT1527!I,MRB\E,22 ++MBBNE421(()H(K-JB<4ZZFIJX?7MR+L9PN'(2)F6"2"!!DC&(NTM>LCF!4A`@ ++MA[M(31#(X3PLF557)!IJ[1;31F]ZD76`S-O2C-H"2*NNJE-7/73TL@T:(;$8 ++MWA*EA`DP,TXF+L:<FYH/CIBP,DP!)BCIIV*D8'UBDAID$C+K,HU1[,-VD7UR ++M-(IE')3DXK.S1(,&BG:!#V99175LHHW>NL`6M49),S9G*TLSB1*=R2$-,J@< ++MU6+L(+2FD,""HZU%H*DC56YJYOMR^*.HF38*"F)$M(X[;55!<V'M'JLD[2@@ ++M&,QADDD"6X=O$T*5U>FE5'A0%8@YHV84B>0#LV:S+P-NIFZH<41-)A=0#V>@ ++MB3M@66#D8'TY2/#EIR6XO#6"`+%3EY1Z\U2EBPEX:-I"LW)%8"VY-W676K3> ++M*PF9DF91:&H*M7-E]J+FU4T)#Q!Q=UV6+-H!&S%DA1SHT020=Z<J,(LRREKF ++M2-=,;2&WHN3H5DKDR"31YA--H$/LLT\@W`O"A4E"IN9'HD(::K2]/-'*;M0U ++MG51*]6\J%G46V4D;O4I`G%72&22236#NDH)K<67>3"#UB<QC$<76\J[==IP= ++M:TEL<.[+@8"1A1:P,)2&RRGB&61!!`))PHC7FTKI,BZ"WDE0Q79#IV.E85:+ ++M5F1DYE5)1B6G<ADN2[8F6>VJYAT$)0+3@"<8PBPI$R9W2Z5\)VAS$1``_I`@ ++M>XLUIZGT@%NH9@4;JR#<AAFVK2$TR;*\2S=X;LR1.2SF9:PH38JE)`P8VC9M ++MU.*PL.>F6:UZ9-5M3XBM"W5N(G9\JHE4'"*P0P$.B`ZB150D.VJZ!%M`6S&P ++M&@C:-%OSAB2558EQF4V9E:4Y.X%JM7@W/E]B][/6R6:V[IU<*Q84R_7(3GU" ++MKM2L5BS4OG)U,$4;GM*,[<60J/C9[`MG)GIZW.!SE^W$,K32"6W96BIVZ,"[ ++MI>B31>#L4[.:'NC!6(5,O'0F<?3QFPN=Y6JGV(RL>3-\JT'M*>+95[-U8>S. ++M36@[FUU"W+[;T%SE<-MW,Z*VW(UNIT[15ZPFS8JAS81['MJ9=0M.I-GAJGJ6 ++M;N,W=T)E1.Y>UG1E`:S<NJ.X5?9V<%.CJ8H5=5$Y)Z9GJ&D:)-S74#P;Z:&3 ++M@5=7:.'I]RME6V/4.34ZTS;L@B[$RUU2_/:[:K7HY4ZUH73S'VVL=IXW2IVT ++MQSJ[TST\3G#90O$+8GMJ$\=LH,Y2!?)3:BA>9O-YHZFB\V:JD4Q>SCG7E3<A ++M8'*T*-QCKG<J>J$),3>9EHZG(KMNE@.[*5Z-<"Q&Q0`GHK@AI':%-<+)JZ4` ++M];&4HJ0H"$HHH<)DQDP--0\X.I0M3K4LRQ./3=6S62+>-R=G'9SHK;EOAC.* ++MC5UM22F0ZL&PI,G;SES/<<JB1=MWDV-D;BL@R,G-;1MO&+%5ESW+"[JY%"U5 ++MR^-5>6YGE,33SF+,@K>J<0ZKI3LK!K[79S%2;W,ZK&X9BW.B4P@I,X9KKWK, ++MZ6[S)4]3RD]"G1C'IKFK9H9Q-[WL!B@-B:WO%_#$0";B)4_K_GQ^0/T`<9<< ++M;2X6>IUS_Q>K8MG,]0:@:B",*"\#B.(V&YWVZIJ;JS5RX7W#?&I>+^)JQ8N, ++M7S#*@HJ"@"9+AD@12$`*`SO\_Z#2K8>QY4_$,>*\M+A(D8[U77-S,K-G%CL\ ++MIF72D&LH=<WW.ZY\#R.8ZQ69*.B<&Y1"D3(W@JP[HF;0+"Q&QN6[@LB9N#4[ ++MS#H(<;)DE1`\0W>[-:[UQX7#L>O)@57%#%,4#773*Y+C,"`4FN?\7/K=_YF> ++MOP"DB5U@8M+PBZKC$6>B?;IV"H[G=#^O]WCY3,$247AC!-%%!_)_C=TFJ.DY ++MB@YYWO9"9+?/F?MX>5$URT9VIK?H?T_1P[4^3I3%MAT:=MIVS0%,FX=M<>%_ ++MGE\<4R;]:UTJB7UL6J#32`TU$`@Q`$K^2HL)I_ROY5CPNL6*?6,D',$C%M,T ++M;9PX9%99]ARYUE5@;.=<YVZ=MU1?2UDRG20USU#--%<Y9%OCF9O8D]%2L31. ++M]-SVV]WDFQLR4)C22:0"[/"),5XZP:/GG.#2E*%.[G!QQ242F6=,]'W],=-5 ++M6JIJ0WZN:97P94%4M*7$DT5,5',:8*28HDB*:UN(;(<)*)FA,!S\>!VHJI41 ++M&9=^<\1#%4T4@R#5$.AV-JP!AH(FA\JM,9VC;+[Y@X348PHU0(U%<BUE@B+% ++M-.G'AKSWY_4[UCH\VXXZ&VU!=NE)`C`2+"[#P2[):Y4AM(/$`BXAS,//7)O3 ++MQSK6N/B[]W=$DIIP0I+:7JM(*9)-9F/HVIF>Z:FRBN``=I[3MX:OLJ7G+>E; ++MG=-!XUV"\DS:2-%3N.=3*'2DIV5EW-K7+"#FZTT`Y%Z<OL`IR]S,D<YQ&F2F ++M*>T@2<112(MC&O&-1!%]/J&@H*.[%--!5#>;R/+L^X304T)5)ZLAQH]/NX^7 ++M=\?%%$S99CU].S;>0H*B7=3'(L3EX8:=HIBJK#N\6_;QQ--!QKE5D6"7&(I* ++M-+6018@6\<;^.#)$>8Q(.121Q(.*JS.O7X[<WM#@B208,(@F"1`1A`;,#5.O ++MOOOC4UV'YK#@L[K5&W-C-"X%F`;^<K73G2K56RZXMC4EMTY/%&[O'-S=I9E9 ++M[;>.4]NB)*=SH-FFW+F[%&=+:QS-K;'\7F3S*WE*MMS&AW>5ERJGMIBIHG01 ++MDFQV7>MF]:9FN=2QIER<.NJWBZ:&6>,WSF2YFT[,U%V9M&0E(Y.C;K)RZ!Q5 ++MB=RV<'%Z-IS@<K6IL4IX)F3U6<HEZ+HL@B3MX9WEC\;,ZQ4]5$AJ0EO5@P.F ++MSUS<Z1.5)'0*>VJI:**8GYV/4Z#YQM?7F?J7R"\P:7WYLA^>.E^62VU;$?+Y ++M\Y>^7D;5IMMM@S.B@H8BDC8*A;-`O<BBBP%ESI5@B-J)QB]H*AVU1H*39/O_ ++M'':.V'8JJHM)!2212,B&.>.Y="(HI+:XJCKTW-.WG3;J^'2^?37,YL\)WHE` ++M"XM4EMM;%B3%S5%L;D2R@?T$NM*^%[9M.I)Q"XI-#+#V@EKFUH4HZ<I%;>VA ++M0T;&;?ZN2MZ<5C'VS7.5RZ@V+-2ZFDD2+.%VR5QG:UW*H8O>^13`TF8BW=#+ ++M5DVRB1!4?B%WUD\[=X+044K50>D_/!^0=#OXMS2.206+)BQ6`B"HJXD,14U8 ++M[]=.5W,[5;:*V,Q$R(AKX@4TBK'!17<K@JJ**,0G.VXTT$5@^/S.'6J8IOJ# ++M._'3C7&4*JE%II%%E28._.V3H<Z8[O8L8Z'?B0NAH\6*ZH4J"-F2B=4%STVR ++M+B,18+[!QT7Y&TRUNY)=&LK@\)F]:J\A"I8,O#UL,"`<TS:+>2,P&T&%3)&I ++M"3F@2SEV**0!('`@*T`-R;)ZCK"!G'TW-$1&&9ZLRK(1L@M2'UTY>S=5NA=* ++MI7!=&6--!B-),&0KKJJ_1`)`XP4BPF3412)I6R!85%4#)AMWKI@<A)"+&))D ++M)`B9Y]O3QO?"#@HB%C$KOMS4T/$H_'\.]*I[.KXM3%<3;!!.-HU,Z?Q_.^>^ ++M*WF-"4Z]>US$$P%SI5FZM*R*4(M513221#N?XSG/3T^4?7KP*'L@=CF5,,;N ++MV:IWJ00#`B`_O^(6#\3DJ>_4RNN49I"AB)>+W[KM04(];H:[V=`Z`1QN=QF2 ++M;MS1JI3W<6(W9ZL+3&\MES5UM[>B`I0`B<!@DRM[96L6*RK30;W0U@0UF*AL ++MAJDE]2*HL618*)KMIIB85@BI%,8;:>&)W1([#L8*#8LM#0/Z_;\N'E>$21;: ++M,'Q^G>]*VULF:FK%D*(@*2":(JH#1I**&BF*(BG6B"(B(J"*`Q.FBBIVS%12 ++M6LA^_['W\.^04V?P][G2',(L`A(0?M.I0TXL"8_/71=[PDBB01%(Y]G/6[=Q ++M15R'FE15OQKW?'LZ5SY'AQEX\^-^.WEX]LV21$R;6-BV4Q4BE7*"(P)G04@) ++M)!20F3KU>U9EK9MKWI42E%E$2']!-'B)SVG*DHT:,TLS$F*)U"KJZN@!%/QJ ++MXO<1=Y=2]-+1G9.F=W33WEEYD@F+>ZI!2!(K*"OK[17,I/`$71PM'IZ9@XYN ++M@&5UJ^MY);PD2<.[+=U>UA!210*X%/-V^K,%C0W=*X,0-E'D-B&*H`N*I6>> ++MFA#A#-(OA+I-:=IA'O%%/#.;>%\!J4I0515-5*=)@H(//?3L%-TSJ***K>_U ++M[U4<5=9=7`KH9",!^OVIK6,)%")';AJ*JH*R<DI()"E*$Z^WN\BW/E78^6NV ++M<G!L^%N;7X:"7J4(HPB@$_!0((9[\#!\D_?I*Y,BHIR?<E8PV1=A!_)8<C;< ++MC4AFH;0TEV?K!8/6,.&S1V;@#1-!"]0<J,L#2)Y"35;I=3HFZ[A0J[F8%<+( ++MB!<X`@00^8>%;;PR"%*!N3FMZF9QUO`LN//4"H81P%!<1!3)O,JJ#-DF&+(9 ++M5GZ_7Z=,04SKMT\,%T9AH%@'AUQT[YPS3,92B-"4!43)L610A`Y2(%%)(**2 ++M0157"";593OX=>#TQB)IH?W?N[TD"[L81$:JVQYVP((K#$B&B!86"Q@'EKZN ++M,M[^=>5]^OIEMZ2=#&=<EZ6J:D$C!-;E[BP&Y130R>J9'+('.9;+5\<7=\C) ++MRK:M'P5D,MY0K+:%\\&X]GJS1.S.\KZ,H/>F;J2KO+D/!/R@_<W>GC9F9;F) ++M]I]7)UE9DTH`(?K'EG!WSPV,S8XZ8B^-WA\J?KNE=U<2/<W.Q#.#<FDJ)JT/ ++M/:`EL7WN5;Y>]?BE5WCN;KADWE-W:W=IS-*10M:DY%;0AJI\%#*U29-RF;FL ++M0#&Z+CT#WG[W3/NJW4F^P5Z0R&M<OJEZTO0B+SIC#,$E!+T'TI2$6KMF=H<2 ++M-[.47N#:W>FWK;Z1]^,'Q\P4%!0GP0XAHH::T!K?&.W/-JQ@U,'EH-(Y(F&_ ++M7[/3YAP45Q.#X\_2<YMY(*0(;]IO1NB*KB+)&.$18@?9Z^UYO)R(Q&2!(=(\ ++M.O!WJ#>'5HEJJ:08LL`!VU--/#*9HS-**HIJ"4P(HI!0H@X2S9@U3506GTL$ ++MVMX?Q'CZNWAQ'7ANMT"EM,15G"V*%]*M$]JY'4NNJ7*\<+LD(6+42PA3+;-? ++MR^OBS\_-<KY\F?H2M^_7QJ?67]A5FKDN(NJ:87:DLE-%,Y4B%J0K$(5JE!5J ++M06*I5D:2.68J.</BJU99X@28:*-8ZTR-%6GE&41);`9>Y;>ZM@';?+]SNXHD ++M(*&>$4!%5$#UGFOL<5DTRQPHTG4\[_GRD:&I\JJ*W<9!E&89!C$E>_)3&'DL ++MGN^;P<S*A4]'CXT_II9_;5'*X]=&X=US>GT+=<2,3+?"93K6/^A4UUO_9^(> ++MO/JOY_4[>'>^I;/Q9]&?_-05[WZS4\$VC8>&DN[]$CL](OO247G?ZOMM\QV! ++MJM1SQL?6!O,8Z`3*R%HL5EJN`$8N,,]]JU!%78NA$"JJ*!SB@8JQ*@A<%0R< ++M?)R\R2G=0(#R!)F$D\QAD,I:%T-F&>'29:HB!$"H7!F5?%%&@,-+KFNQVR*B ++M#IWTTY_)P<87J5Q#)3GV9FC,2M6GLUZH_4N<I9?G\Z.%M9Y,!GZ#`?>(XY9! ++MATT[G"S37J,**O@3PBA*]6*UAQ33"M7@Z:#.6JK+)"#S$P\:U'4+_08B!E&? ++M-L"A`N"('.B"#!ZE=9QS$2NT.RUQ#KNH_$^23K1$"1QZK/P=Y#1^8Y/R^!JF ++MWV%K':/39%.F%\D07H8-V)M+2Y^-=#I79[1,K:%;<[W*;7S`1VX$4<.9>52, ++MAPF:Q4@^(UGHWOC4C5E#@O>X8TU16>1+/-!8WRK\*J]UU8W6E&)IX8(Y9+$" ++M:%64\\^EQ%%JW/6A:+$SJ37M+%',U$(W#66LWJKH6+"67$;J7*Z)ZOLJT0\I ++MPBZ80;G:CW.VK.Q%57;8Q=_71"?Q161%->%<FW"JJJJJXV)$`62]%$JO,45, ++MB88A#>C-YVK+Q=BK>7`9JJ*7]3"FRXL915>X:*.H,2!7BBQU?DPB=+E8Y+/< ++M6;(R:]1HXG9D):,I+,Y(D2"R1$KXW.*RULNH^.4D6JYSA)U<ZV4/?>R-<;0% ++M#T3I5H`26ON5OX(SGLX#53,GTM[9]I[K8>2%C/Z_$=._C?U_TZ;J3SKN,C-6 ++MNL9=)?@'3'$FOV`1\1KO!113N`H#BXE5H`9`H`2XNTB&<Z!`BZ40OE9=P(]` ++MD#/=M%YZ"J1"$8#)J!00('!%$F7JU/I8_KM'TGM<S1\5YC?YO'_'_I^7^->T ++M(HE=4^I^WE.G]QW3AZW\?\M9\GV#KI^Y\1&B("U10XT3;HB,2H:/PEW8S:@@ ++M&A74JRF:`?0%9454-(B9NB<$!2(1*_FD?@DI_B$<<8D2`?GF[@;&QP4#H<T3 ++M3JT9;84T:U#`/$WS7[X_C'XS^VBYW+W`X\YB..)./>Q(K*HH6)@37EH%"M67 ++M,%#F1RM53#5C$5/+8&RY?NL7VW-=_<]9[;3^QJ",J">BWWQ+#S!WK>^&T1U( ++MK^S0#*O2XJ1ITZ$;NEFXM69TC+"%56_0`U&6)E@Q7TFC'#"G-^1Y%8D<S*[I ++M5<<:2AZ(J)WJWIQ"@46(>H!HRV"CP!]=9RAG,YN0'/17J]SE3KU,#[[&C[O( ++MT,V3QWCPD%[B=T_M^2\TOT^17U9^&*3Q?U__+]#^;P<?I_AZGZC^%]-OUT_] ++M=#K&_/_1[B=]#WC[*R>UA"7]DSZD/0JOT'N6HW0X3W4J^K^USUD?4A(T<;_Q ++MU(GV7$E7Y?]:D;0GXWYZTR%:S?75HFJ1TWEA7<YT<2SQEJ%))[HH<*OR%@72 ++M*K'0L\Y+!F61TA&U6%#,T4Y$S#**HN(79/;EF._]72ZM,MDA11")U*UZI14F ++MLK):M67.:HZJ1X323.<[[#F)IX7ZU*F$K1S+0NJ[33=JC#&RUIGNU.;?\9Y! ++M>W9>[.6><4@H:KL^CFXKHXHE3B#=`HQNA<'[G<(.0X2R*1O.)0JB*)MR!:X^ ++M3KOV\!R)%)*JOZ%>]\)?L_07XWMO^-2ZCSN'X_U_V_,U>#L.>\7K,#B>8?9Y ++MMOI_S][P.7:`O[_:Q^;JWQ%\#0MTBY7&M\=?AJKUYCVDY1G,1ST2>0I]JZI^ ++MIK:RM[?[T<-<=+58CJ>E;WL3=OE-\*@;YW]_(=_\[&P*%3/S5L!M+UC;KG*N ++MHI(.]ED1PW-94]Y5A5EUE;PW5?A?X<U)5W\;J>$'S:<:'S[]L5[?/I^`.P;T ++M7TOHE*E.Q\+^&RCJPJ>[JP_$KL:*&B)U.<K=S_ZI'=JT^]7NBM_CST;NZH5, ++M]5J_8C^M6JS?RJ9"5\.5VOF5*F%?2[33;3WQ-#_+>8]9:BUH4T4Y,5'OY.)^ ++M]R_I-<%$^'\B^GUOZ]G]1\?+JDW&SVYSX%JU??0HC\HJ3S;;58^ZMYF?P8PZ ++M2;0XMCH)N"[6W@OK&+^6W+D\&_J!+AUM%3A\(DP`DK2X-ZK^LQM&%^22>-)) ++MO=Y+H`EEE^;++JLF7&#IY<37XDOT-'GT+V)5QL#7Z0UV(&=7KUYN:_CXOL[P ++M85["G^;F_(Z8V.M"6Q++MI9?N&GF"66W+Q-N7^99U@197"U.9B:+D?)!@9<N ++MPEEV>QJ;(,_6P_7W-?LS'LA)))R$DE!B7P1V=5D:+\76Z/2!6ER?;UJU:^M2 ++MA+F38.WU\U_J9<^&?R,+Z<\NG,R0))+G&7))#*XP+4LL>YULNK+$H2RRY'86 ++M)>(Z>S_\&DFFK[JOF:;<69@ZV7"W.@U&.2=4%]EXW0V:_*</'E"]7KXU>6]Q ++M,O3!H#OI=M+9WQ<D#$NUN0VF;@L:_IPDCJZ*K):U6TE"W9EV4LNLXW:=(&)6 ++MTNSUVGL:>S*&!8SM_G6,'2;/H@EL6-'8SI,O;RACU\/CL.^O&;T(85]+Y:^D ++MUQMY`DCSMQ>DD*.?"22K[[A28!=D"3!LZZSC9[+T?*AH;&%_B6O7))`JU;NV ++MRI,0S_&!5MS?HP)-/:$Z;+$[SO3O8/[YE%5S.8;N/(>9B&9YIG]E(*SA7LL? ++MSZX(YECW@@RH&L$BC57`&W-]39SP?RR0$)BK_DM?R^R7^,1_ZWZ,9=;&>0XC ++MZ&;C<E)&"\@U(Y`]/(7+SR-=)^[WWD^-OXO\_Z&]K]3J\9,:&78<U_NB>CI_ ++MQQ)))/Z?\F8?U;/Z;/]W!VQ11S3"?KSN*9Z`:BCX$OR/J^9T-G0==M22NO8< ++M[S/NLKI.7YJ]`51)FIU0JU@4&=+$MW[3O%7N,=U1DH.,5JS$>'B$U,0WX"(? ++M&1H@(8D**E\<V'OE`[NO3/4E@2X2F0^..646PX$5*Q5G%YB$Z**%3>UB?.R2 ++M`$[HY]=J+_^AXF5M'_.?BYUL(2`7]@FA54Y>2L*6O"5S.=.]2+<UG2V`L2B$ ++M+$F[RG*MU2X_KI%UAAJ%_D0B?=_5UPZ_P/?]9WX7;QNX1LGWV4(R+L',5`2- ++M2E(BB5F5S-/^YMMK#&PZQ>-G;^0IM*_>JG5ON%RB,&?T_ZVMRJ-S7KS)4&(X ++MB3CY<\FR%=JROVXPV0]RJJ*BJJN^(1//&'G%E4;EED2CMG(=/Y-D!-FO[?B> ++MG6+OU\G"+6U[%T<SG[CY"(`E\((@@@J`&>@&65I`I0"A!"&1$I$9J15:5%J9 ++M$"A2DI4`*4&A4B`8(5"A5&E!:5*14(E1I4$:05*1"84*`0B40H5*02(4:49D ++M14H$2D5"E2A1H0&2$)J1A(2E4&E!6@5&A6E"@I2D!1J840I1*F6:)!$64"`4 ++M@(`I**:&EI8E:4I6B@*:*2AH**`JA**5H:!H`H*$B"D(@8@:1I6E*:4HJ)"" ++M2BE***$H**0IJD*&DH`I"AI`I*$:&E*F0I5H`I6F(:&8:&AIB2E**!HJ)&JJ ++MA(J$JBJ0HH*")JAHH*2D*))5!*01&)JJF4D("8(9*$8@4B&(5"((F)`"E&4J ++M$*J(`:*@FI*@I&A*51&H(6E!I2:)(H@"(F@@6D$J24I1:$:12@42(4I1$:0: ++M4JI($:4`H!**I6D$H$`I1&!:8::5"&%1*$2D*)E4I4ID8%1:HA@5@BIH:2!I ++M1`I%`H`8E0*`H4"E`H*$)@`:0B1HH*10D*&EB6JE(I@*1:`#6C$%5V_O?5E= ++M6<RBJ]G*<G/NIL/PN(X,^=ZO=^KBGCGDWDL\Q,3%),2E)&4E1*R$HU9=ZRL; ++M`WRGU\3SM\_/PA!Z2R*V8+)@MJME/OM]Q&^4H551%)%WV4"@^FG>D5:'QD;; ++MCHC<KIG;OXZ#;82#D=1:I1"*:F00BG!`]@":V(*(728!`D=+Y?*'*NT9OQ", ++M,1(*K&V0$`'TP@0043!3[V/M5NM$1K&-2NIB&'CF$2`CA044:7&U,=>4`ZSQ ++MV0$-MT.B=LUY[Z?JO*^T^SS/VOT_`\UBE&WOVP572%;B\.%]I]&FK1$41!$T ++MH(J(BA`"_/!3E]3G[)]$P]]4^)`?D<O@4=`]Q`D!Q/[GASAH/)Q5)*4-$%5$ ++M1W_D9I)B9D""YX&$K`T,E3?J9Q@I:B%^\A_*]'7Z^R[4'7#MS-@)'\8W\(P> ++M.(T4-)B#?V<&@J.[^ML;&5=U6OV5N[R1$H+?*C"J(J@JBC6JO-6#(-$;T888 ++M888]BGN%47\*JAOSUSZ,X.("KAU:C&(.$`0!^MYL0`1E`,`5!N\.=&616YB: ++M5X*`;+"+Y%PP%(Q(=,Z)FEPS"_[`-=?AFV,S-T_:91#0=OK;L\T)@^F]?7+6 ++MZ7#H?UH0_KWO&K(F#/`5!PDC)!_J/JM-"D\4G[4)I2D_?&?QYH30Y!8D(+]< ++M#^4#+'3"$[6@9[&&9\(SX*JLD4-Y`UFLILZ#5:K#QX8PJ%0I!WK]<[(493A` ++M+P/P])WOHX=UUOE7<!3KO5UK_ZO>^G\W%*B(G]=.P)NC/:6IM14>"97.J-38 ++M_8G[!(`ES^UA^\?T=!STU5_?L_[2J&A6WZ8<BB@FQ49%478:DBL/U"1;U7<G ++MO+J%<X"I-HZA-I6FVFI?&JJJHG(]/WGN>0W@;P(^PWH@RK=6JR*&M&5VOVP& ++M:<]7Q&27"`DN7EGO)>5\13?I59H#T0F5F8`1I)?R)L]SZ\;#2A14HR-!N!GO ++M(6^G>B/0Z!H*XZSV`G%"0)>+X#I)&4*ZUWL2=FC7N`3NB5%4TS#7^\LHFK4^ ++MG[8_4?N/3N@@>CGZ7I*VLYKW&OEU/S^W3SC,^YJ^BX3APX</VIL^8.K>6,3H ++M^(Z'>K%TF-N]GM36YG)ZXUZ\QO-@;)PRB[E694VGE=]2\3F9M4KMPF"N$"XE ++M[7LJC:O)[-VV@V"RM6TUF\E;L?#$V&?BBBP\]9XE*51*43296E;B]ORWW/F? ++M-_/@AQH4XYFX!>!]US0`1P'ETN1C(D67Z(SE4OA&09V#/?8CIDPE(<'13/1` ++M0?((DP8:!3J`1#>:!)'V0TT\R?FV,^SZ>`9P@8?"X8TT#>:39!J(Y_<U2:$; ++MA[VM#D`0NL3U((I$R.(AT]+6](5$0*(B[$D50#CA*)EK%0-%8%M.=9'<6L"# ++MT=!!Q=F>75AOF\DJ;E$>@;"6.#4$PYT2.1:!42&I\NHI4MI+(!O33@<\X^W[ ++MC_CM!RVHZ[^G8>:P/^\IQ?L.CU'N<#R7FN?ON5Z*&W2[:\/Q[?FJ/^^-\N3_ ++M$GUNA\UE\(Y(TJ*"Z,$`$`L$!,IM.@IEBCUCXYG2,Y6%<SW<D!K$`0T_"%4? ++M&+JCB.;V4G':O6;L0_<;7@+[7\/Q7A]T,S\GOK]9IW+6B6\/VI:_E(EO*I^4 ++M<ACE^(,_V;X&,&J/YE%BQ/^/L20`G^VUEQ(H%[_T?CTT%]NUFQD:4T4%)8,? ++MZWY_T9P[>?7^V97C#U9PJ#A!]/L%!,OU_G?`]?R7R8S9>'TO0]5V6=S7,_S[ ++MY>A^9['_Z[_*+\]>QV_\/Q>B=YEE\R]VV]EZLXC@(3F;%MP-&HC^\]8XT/:^ ++MMAKO3>4:JX<1D9&3=T-Q=7;<7$:KK@3@*@)ZW/KYOOE<S]PHFP)=@B(B*47_ ++M)[?J/\?6\I&&_#CA$H1+2(`M%^8(W<@IMS3C@]^U/Y8Y(O)5Y4TN((IATND8 ++M)?\X_SG$UMA0^H]/:8@)'L_P?J_OC^\SJ7H(J@>24!`=RR&UHH6")B=KRZ9@ ++MET@4"V&&(D041418["`P]9H]ZIMP`%/,<3A8/@?YB.DT74>U_AH_;^TW'RMY ++M8W=/K>V^DW3-]3D==D;8W8NWXA=VR%/FTY?>IS:*K<G!(@6>FF/82=XA&>]$ ++M#0!,Z)E;07AMG[+P-SKY>ZW`1AO)T\UJFU=A"NJ*JJ'Z=?[4!183.55_\X1S ++M+Q_3N_I>7^F9?C%<_VY8M:[<!(1($E'R:_NA;$P<W^=`O_K%!41$0.G5$0-= ++MKOBY_^VK[3#R)>[^2K6QVXY->68>:46Z<HHY1YZS^=&CV_4H$!ZO9@"M\P%M ++ML0<^@9I%B/1=3P^R]M;T(:$-%QYY-0SD\B</U;5A_H;&FFA=$!`$C`T:BT/2 ++M-%$Y;EM10D(!HPJ!6H^UR=9>7UL(GNL*_U$E,0/4B9D);#[3YH,)RE9ZEBI% ++M7++^6!RI$Q:]'C$U=`KJ!5?>ILV)+=]0A$31+%.RI&%0I'+1K2JL$$R7"LK4 ++MM-%$G.<[U./,&%"Q$)_4FM1<QHIDT[8,S5$4W]F3G/]`O!?]PF6"ORF1986C ++M54VS8RY?8P3\)]LKC!`Q7B*,ES/T?]<H2I@'?6YW`?ZO\;^G^3M_=_C_&^YN ++M>A@:./S1]W2WUO1HA[?=84K,WM?.;/Q>3VG)/Y#;Q1<MU7#W-7B4*IFKRQ6K ++MND""**R<B"(<JU\+>W:IFWGS<W1_CK?;/=O\]XM0-Z%.]-PJ)4/HJ/0-.JH* ++M:^X],?`^SXF)VMN-#([`3#T?V>5T/R7B9P2XZKI%;+<[V^3HH^2YC3='I^VT ++M>7C5>BTT(=OAOM7XI3:,2)Z<2J//+>2%SYT8SE%892'A6-6S1G:?4X?[[ZV& ++MG"@XU4)J6Y903D5`<K4B"N@AJ%%5-DSL^`]@TB@F>$5#WV?]]]7VL-]\[Y6P ++MY/'U6WHE]Y^4R^E@T%T!JDYI1[Q+:@JC*<P-&IJA7GS2IVRGR?(6]_R?D,6J ++MY9MT)1FDSQ:%F2Y<P."YL?=W*&G>\^295L-#$$2J$U^U5_XLYE\?]I]GM=7H ++M*@=%SRT5;8ZA1!QQUCH*7CWO>\>]AFD[RJJ)S\PB?O;B7PFLSTJ+^=>]LFWN ++M@!>B1D_I6KT/[DXAK;&,@;I)\X=;)!9E6JE!C6#I,2))8YT`;BY49[U%%U2S ++M'$'6>LU\1BJJJJC-T<]2WASH\1@Y14]UT52'K?*?T^+L\W7_.^E_/VFK^_^; ++ME*_.?Z^)W79_FBOD1!$N\9Z/:/^;_;7GOF[78FM-Y$1,"(>U9THF>3B!=RZ1 ++ME9#1KN59=."09:3E33(""`ARR@!IS2L(XV+>A11?C"HT@X8DB[]5:=._!=?K ++M4192D5-[,J!:J@G<[Z;E?<;/W?B^%R]-=AN)%L(E\]P;AX;M3W@^(X[%%=W< ++M0.%GB55E<"!;59V:RF(H$PB);144D'.+IO^V:#Q6%83%C&+]6Y9.S)C^B45H ++M]<Y]ZW^I;Y-J>,2%M**Y"WJ9&1M9JGZ*+.;W>DC$/VJ(;'K,CI/F_9RMMKY: ++M>$N+O/K</I/Y^!%Z&*<GX[9&`.MP#"'/7"9>NZU[U7GH67#F<_%T>,M?1:0- ++M(SU1P"!$$8R$'#N?W?L-3Q,4FKH"8'*#(@JT`*,"(C4<RP(A7Z-7;`G]&TRM ++M;']GI)B0D`B'?*BC2;ERKI@-01UB/&YPPA%ZB,G<CZ/_/]W]+5^%]77/VZ4P ++M7V>VVC>S4&89D98#^EZLS/.4-4T#4#\"R6"H)'!DF,?W$[[W/UI#/Z1,^G^/ ++M\_OM8(]03>C_1V+'Z8<ZTG.>3F5&O_?+[#X2_6.8K$ND8/%=R:.!1494'LW6 ++M[AG*V&.'+@C,=0IHO/J)U6\!RF*&A<)$>H[WM-E:XWG3/"3J.*@"!G560(E5 ++ME1[<NG#=%&`P8>>258/`A^?OQLZ3:X$"B79$$:N<2'F:1!+/8&L6FGKP>\EI ++M2=:YJ$?(SHZP"!<GWDBB")8<2N?^/U//OEJ)_G22&,?$XH3%O^E8^+&)8IIJ ++MFGXZI!558MV."`@HY7JYF%@S"XQ*!XT3)^3O>FLYW)_,_U]SPNYS_Q.R\>JB ++M;'ZWKO]]?LXMI&N".UW"ZWKU%'#B35"""`F(J"(@!P&0RI54V,X[9*S*CV7P ++MCPA6#DXF9HG`C"XTQ/L*\42MF\'A!PNPSYR-H0%0FPUKG=[;>U3W_$A/7%0! ++M"@H;4;&V;D?;K%O;$K]HZ<04RWT`DDHY400$$/$F+RL11>O$J2+(@RDR2B.* ++MGG7,0PX$3P100)7?I_S&?EJJO^RS`S#W\F]#((2!,%EI&G_F`VP^#/WG/CD< ++M&441^^#[GZCH_4[AQ56EH45)"(Y_=@_M4,+^+^EX4U(OH6B'\,-6Q@L^?.6G ++M>1K&D:LCA24')@8NA:RLR7E4$CS[2_2])J'\>X?R3SHEN`2BA,:KU+C6KK>K ++MD-ACMFO;IA;*T8[?>+*(BB`RJH*GR<_R5_NH('I?*X+OM\]7K]7SFQBB;H^< ++M^QQ_7-UWV3ZWZ/Z:;R?Y7_@^)XJ_.]D64OL[XS8&DS=",YV)!.`>$@QE"Z>+ ++MDIGY$"!`="52)%ITG$JJO-2L%E&T%1%51=XM3YA\SWSMPYTG6@2DA&;<;6<H ++M+4.L5)(E5>00X^`2(]R=8*3UV%6L_91=<J$B`0Y<'[<Y[9$#!M+T%KXP<$P= ++M<!DPTZU/V]].IK>[K02%H7O;A`_+35"*BL,9&9P*BN%`NQGJ9"2W4('J@3<( ++M@11#V&D&'"N&4XX.F4XM#<(*<6@(A`DDD*YYYE'0>]SN6$!`#GBK?84B;<4X ++MU4""@RI_]V%UV$NE_YXW->/I(N?YWLYAF=?0O*R\Y\SA]+@GB')RU"\"(<P@ ++MB&L0$0$0H5X#<%,YF&9=?:31:+M)S(+J(/>ZO4==Z"*)E65C#*2IR(6K_;Q< ++M*YB;2^VM6HJV[2MK+8^X!;[R]&>=>U^9"RQ48$3\"[W>X)8YJ[I9%LZ5G.4> ++M.+,`$1!$1$->K\.:77IL+JH1[&R('13V@$0!()?)<EE:"0BI9!$&Z+I>J9F4 ++M>)Y@0)V0OATG5>7FR$$0P[2JLSZ@C8)NK"T"`_=7!`*CK=R>HIR4<99,/#K/ ++M>`>X@*0.XA,_BZ[[2GA_KVK%%%/V[+%558_2YOY/V;VF8Y.8M5(460587MM_ ++M1JFZ(H0P4M4M5^W7TNG^/GQ<Q\Q=U+Q76DJ5$6JW5J8_?"]U_O,B@7+=)899 ++M(C5=F<YF:9PP[?%@9)U`&$1$@;`1SL+-B2^2_Q[Y_OESZASRAB*A\KW*,!V7 ++MY^<3:/3,%OP1&QW:=AGO917*Y-"J5_G52GGXGJ)4K\\_,I7X*,Q/#%[,#/[= ++M_L[?&8@S$3AD;3KA"`/'/1[B#$DLU09AL*J@X':-"`U/>L0M?.&A(CTLVU]# ++M[>#NQ<53=J:SNIQ4$&GF%"R`@;Y`:.T`@-%(!&Z"H:`:0-OFSE/)5[4)8A8@ ++M'6!`Z]NL*V_O]3Q/3H;E4^?(LJ5$C(HC_:_,VT;*3%4E$40%&V*VRTUK&K&W ++M\=8YS9)BUFBU@Y+M'..DM%!BC&M:R!(D%6L+(J".",P%P9VL03!MHBIP%MM& ++MV/[;FYM!+_A!MS`-@\Y\/>O.V"V.;%/.99C3*JJI(Q\;4%H^?Y:I&?[^^/\Z ++M^'E_KN+@:BH$S(P#`I"@K^^YAH3YN8FV248IH%11]P!(#:PHO4)#^(O9$K3- ++M$:4&:#PQ%#<*86LXCXW-ZOW)&"ANTV[KKM,XXK!Q-/<&(S%,(BYO=\'U'J*> ++M+N*JM[[CZ&XYES;416X%G7VX=<BZ-$UBH@4<AQ^!-R'(&>38D\V8_=[X0XT\ ++MX_CW[EF5E)!`.":O3"J0.0HV@\)N=2\@B(UI8665$?7XCB$E0BVJJ/M`($^` ++M)V#,GZ-`:5\Q5Y$3%47H:8TT%)7K]F(5[LY&$#_I?E?V_XO\#=10_])01/]H ++MFBBD^C?Z$Y.0&OO-PI%/]O-\S3Q`GS8!__[^[^O_U/_3MQ%IN%K-K<U>ESU_ ++MKM7'!W4;6+>5(S&5%%%&UU5IV:-S,L3AGBT$&6"E&MJ)Z=\2HNF,QNK7.5R5 ++M4,]$G'\@FG&701ZESI'BHJI,J2NL$B.'3P2E/**@KN.6\*]H.3:86R9W5?H\ ++MSU_9-Z<U/OCQ<Z:<#X%5V\L"**"&<KLQG6MYQ1QNCT.SFQ2=J!%'IGE%I'`^ ++M2/A<2FZY%5%5R%;2:2SIZ:ZE1-#F-SJ!I+X!R55;=*&EYR1P:7@,;V2X%T(P ++M0-(HI$C*,*BJJC115K.V*2JI*FVT'Y<U'''Z4A@Y8P7"),8B)(R/\34_"Y][ ++M_9G*>C-(RN<"UG<F(GD2IAVXS4JA[G6S;]YBT:!QE^0`;+,8-ED)RBC$"&SS ++M''"SV?P^UTM#>:*8681IDDYE15G/<T&&>+6@YQC9VU-J&2CG$!DN`_,7KQ14 ++M494H4E7'*)2<VTR)0_3(J'K%)]MY#5]%YS-_[GOP3:WRGH.(W+G:&**Z3N?9 ++M&L1&_,^\Y_;*JQ&CGAI!FP.6J9.$#<NH=NIMS)S%S%&5)V95'*57DK;8^A^` ++M>4T,L""#)^@Q'0D_VJ?ZOU^?[?X(&.Q]FX=UHEXU&GU_S1*FM7';IF,EG3X* ++M\CA,AF(+00'ZI]5S.+"RUW9WV0?OOH!B^NI.$JH_2>8>VT_\R1^J`P(6?P?^ ++MU/_%3M<[!41\2W'\NI^I!ZXB(C)HB(8P,#C7OG&_>;F^OGCG.U)0>7.WD!>4 ++M'"B@/`>G.+B8BEQF'.C^KS_B.!I[<MZK!PS8@&BGM=%T0D/SPV?K!G".7^L` ++MV/^(S(=U,GIYIK4R6T%0U(=5Q3OR.'QAC,@6P-)[SN/3Z58C]'^/6MN-9FQ& ++M050XO.7;YKK;GLZSF.R)I^!`^(FP=E1[8_^`?9'KZP]<G[=@,*:_P\<*$H2A ++MH^9?DZ!QB2B`^+`90S!%$$,,)$E`04U1%41(G[3^=@:FAG]6$Y4!4U!$EL8, ++MJ@PR*G>\T<WS;>T]TKK/7Q[Z/JH04S=$.L5KL2UB"]AY!UT55TK:*18'26UG ++MW%X":A069IAO#<6ZK:C:%;WE99Z?+4\U?01'$<U\YQ"K@&JKJSPB*)5F9SKY ++MTCVMP$?1V>)DW;F+A>2F@L/6Q:[2LZG6[;MB&??'LUG7VC_/[WM_F^/EK ++MQEE]5$UF_KX,)BR^9Q/*SHB-7NGM`^[*RY$\KXW37+91+CO0Q(%F-VT6"D57 ++M&P+^WA5Y2Q&Y)'N1(MH)."*)4!+X$V3`XC[OE^(_'>QJD:"F(JE*$IJ@)@*" ++M)*`JF)B**F*(DH"@*`I**&BFBHB(@FJ2I(")B4J*8IB0I44505%5:8YF5;"I ++M=SUOIB$2WKC[Y)5R&[BN9Q8GP20Q9211^O;)PI8/9:)6RWL6\*QZ^\D*LN5/ ++M9JL12PEJ5M#,3KBJ6*YCRN<KA4^"LEW'P:J6XAD<N&ND+3&3;:U%(]'U\%US ++M0],\L/B]<7^'BC/)T[6MH\>RNV+E.FO'?V&,LZTS^37Q??$GPG)=F&OUJ468 ++M4TM-".%_BN9RXRX$5Q2!%9F?AK:CCL1&'=F==4BGIGJ4SN*(8/XZ)8NLP'C1 ++MX4Y@59+M%Z9!TK-)%>TIN7'Q_3Z<U>B3I]"IO7B7WQ9"Z22?H?UCW$DV"?+$ ++M[KS0(#!S2B<ZJ"!U'TA$">B70U<8,ZLVD4551T;TD$4$R41A!@%45$.I8]SY ++MOS,OJO5?)C^%PL#3M^_>Q;!-YQARJ"O/J'$JIHVWS^598N<77H(;QSHCC5[< ++MY!+`PSD\Z*=/_9Z\E6M+T]=.3M:I#_>_$#*H;0?VO[!;?C$P&)$P)4%GU)]/ ++MZ-ARVRF00W_HGL+.!4RL_<0I`H.^,E*B4,?\ZPT[76#:.HPW[;3D>,P[FU$, ++MC5]7L^Y[']C;#[GDO@ZG^G]O.R?ZZ3^%A,PY[@ZC400U&BC'!J.\11Z#H^L. ++MP\H:H@`]2=0.ASN>^YG5>X5(\]RR57:RYL>N[SRLUA0ZDE:\S+U`W>*Z#*YV ++MSO4Q#F<]`VI!L$<*KE;#)GP9O3NZ0Y43E3=`P=&$%#&U`)RW<G*G,;GACP'\ ++MKYKU#.CKG*]_-S?$U:]`W-%`)$1SKQO%**JJ**JJ**WJ1R"G"BBBBBBBBBBB ++MBBA11111111111111111111111111111111111111111111111111111110< ++M?-_0OZO]"][6O*A02]Y"TL`MNHDMB_F?Q=C><T2;TJHBZD%555+32:):!)K2 ++MNS-IEWO1>#K-877P.ZJS-6LPDW=$R9K2JJVVVK;;02"1,S,B9F7,2`)@"9F) ++MDP"()F6VR39S/:0>V4I&(_:^3V*S]@:]E*/&7J_8>NH<14#H"[G6X8'+$%/W ++M`=AHV-Q#]0'[@P\@T/E,&9_>F0:`F4#54#.!@2K,B@8$CP.[&SIV">P_9-$5 ++M$T43!31?70\]AZ][9V,<,*]CA)CJG\X%$[#"%CT]+&0'"8&0EC;C9UI*5/TB ++MV9"-.>&-&N%RU^-JXQ6#&T5JM:]J6(C;4P>A8(;$!_$B*P1S#U]O>G<*<A.K ++M#NYC?MO)E567W(1UCO-"%+0AP(=L;.WIWH8EC,P?*'>;AR.,J4JF9)BKU8&B ++M.9W'<<8%B0[E)?/!B,_;(.C!AR"EP3SON!D.ZYMD$`\EVFP[B+>;/G-?M5;E ++M>TZ)^/P-%EZC]GA-@[S;7=6YUXJKMV&%'<0&WDW;+NG;I54BXR)RN2R=`_?# ++MVYE6413?C,L;F<+XS#&^]9A]&(]`\'YWF.3OH3<36[VL-VPY[(_D(]54\KO= ++M:82>NTK32\)PKASF5@9.UZ_P?E_O^L<-MC\T_2<<?/1%-1Q]O51;.Q^)]V&) ++MQ#]\=QBGX<MV/3MV.HD0I:H*!:B`WV-][:#S94Z0!GPL=PY$/)#PD>OAAH1? ++M)72NH)`=/Q]90T3LDCD@4!DF]Q9TP^Q/GLUOQMS%-*3UZT6]L*[F>>%5=+EK ++MH=/VLKZX,BQFS4*XY!$$<1*"LBBG&\#K-7W6(O*]9@<Q*XO$3L>$K[/,1/C@ ++MT5`^6*'"JWSY*2FI4J.H[J8IK20<M98XG+'36D=6FFAA15+).T4Q-6J34RT$ ++M5$17DFJTTTU9XX++/SKHYZL&LNEFIK/D2I2U,CI2K%!Y11)7)HYYZE2F5T(H ++MZRP?IIYYYG6&::FHJQQQ/A]?C\WGYI[I_;WX^[?R:^OS[[^^Z??+^CTC]MKZ ++M]7VO5\?JMW[YM'6H@0O+?P1[_+^_U7YW]N7/[G?CG['YJOR?Y@<!3.,(8-R, ++MR)PV8,$NC05;"8*8B5''F2O4MV+=UUJU?NP(KQ?8$C5)%P\!TV"I"=U6Q5JQ ++MRRRQW770?//)B!JU%4V[\;V2CY'MG7M^&;F3+3'+)^#_AOD'-#A3A@FY;NQ$ ++MK_9S7>>[W/)NY".R?[T=U<^CN2(*9P3!RH:,C&2;\RZ4I,A2?P8,RT4B+AUM ++MN9A4S`K)/'VFOZ*:US?1W*.+6H.KM6`B%AA"FF20E104#)1+U_?X^-?83.:^ ++MB=BQY!')C8@ZO6LI7KBHBB(I-)1436WJ](4T1'E+"!C,.WP\6A3^,.^<0U1^ ++M5O_>R.,K%F8T+D)!YDH2@.#@7^@?Z(P/`-3<%^OP'@2S%9.R_GS1-5%R>/'. ++MC!`-4\-A@@CF1Y!EN%R`3O]^]1.%YX&UD!GQ&H&YID?W$HH.>)*3&+"6,1*M ++M)4**0(^!D#X]^SFQ1LX*])Z>UUZ@H(H@+S5)YRSN.E\*^NY5W*YM[E150UR* ++M,HJB6U1Q<LQMM(1"FA,;;<X<B>8=^.%+J@NB3!QLK2.7*7'D":_OTC'PS)N; ++MJ"&"@)I%!$51UPG*#E_3_%70#7$_Q,]"=LP',P240O<H%M-7^-V8(+^M[/^5 ++MZT]@E@P$`637YX`>![1#P^QX`<WJ"Q'76&Q<]AJ9%D4AEDK\Y2%I)?3U^K[7 ++ML/5[OOV?:F(3-@X+VDFKCYUD:*?%PI-%/)7$*)[)9!5"Z,",B*((D!%3ZOL0 ++M/F0I`_N\I5,F,F?(;.7D*K+'M#7!\EOE2QD3.(`E@L,STP!D0<S.]$VAA+"W ++MQT;W"$T6MR)=_M'P)W@B#_08B+^M'H(`26,DR$$*::BC*E6EU+A6!1'FR6_3 ++MR^,TZFL953DD\P3Y;>87AB6D^/+B@B+,I$,?9"&&5--:!3_3,0U''',/S0/Y ++MO0\D_S!T3+L9=M,4=V'G=0(EEL?GT+`M-I>J$1`-&%V2.53`>39$ZGZ/^'&O ++M=5@.2S766515D8-5!EBA,,4T8DZ5\0F0#Y3M'Y6VM"?@R)^+W$62.IT2:O%8 ++MG6&M&_O:.P7\_V?B!6ATI']$QXB/:9CZ`D5ZQ]>8FD?4-J10Z0Z`38TCC<"3 ++M"%@V8`<T^(WX@K0Z"M<BPO#SD;P`WNBD'(#D2M+."^8)X0?K<%;0F0!8!()@ ++M$`?)-"Z]=B1[?<K>1#Q1#"`2'\Y"35#8`%)E1'1$!#A!"4*)M=5KM6?,'(%. ++M`4V0'^@2J<G">C0-4L%A6P9AK5`<`!-3V=<Y,]\B!^[BNY]'/\V6]&#-!$ZC ++M)@/4G/,:Z$S<@YL_A>X/"B-M0L31$0LOVFL=$2V&/!Q[):W-6Y.G>>MD'Z)0 ++MX$KR`WX;\><TXI""=**2VVP6.+F.*@*N++>="8C^P_**N/'M90R-(E!!(=]] ++M(JO?O><,+4$/G.XUJ8>!7KD&)$?*>0`^H?`_$T:F\T0T;-MQ-B%DI(K96!24 ++M2E/D4"&X$31SV-ZWM-\T:FM<FSD8G4=2Y&0%20GF?04>45=A=D$B(8&&6J6( ++M(IE[!\0B'?LFR&R!S.Y[1$34">SA^U;1XPR"G589@(B2V7G*QHTOJ75-7".M ++MD+SYOF-*[()('8/M_2784/J'-YM/!NB&ZB'C13RCVSQR1#?94\2G`H*IO]U] ++MPWK.]EN0(-$PMP`J.*YECA!P4,<7!P"DI+4S!3MJ6("]N&\N%LS-!FLB4B;$ ++MO[F+[RG8ZPYSK`B*^AUIY#GX&E,S"UBE&HDB0(J"E$J0J&K`\W/++!>@X!N= ++MH_%+7FNL2RW.Q54V@+["0.N!#>VE&GV0@G)1#I[RZ?(0"D'I*F@:7R7W)_)+ ++MK=R!KA'(*-(?,/J9E`[!R`\CDTJGL@#(L>\BZ6NELIF$A6))_"R"AF3W&V1G ++M5%S/?7D\!#!L`C!&1&04&=B@"P?L,`\@]`793@-':NSX"O]#P7L$J(H+X>2Z ++M0`^`['36H4_07*!]*P7+VIE)6)08"6X#L#F\^8['QC=B`'<)3K2[&0BJ6HJ2 ++M"#NQ7*EB/8?Y#TOC[P&WR8N!+C#<5+:@7LH%@^8[AZB:D(<<"/\[%(&,:,%@ ++M8^3T#Q.R%%,+&"((T%GZ<BI9@34K8;0AY/,;SS<<450_#*X)@&Q,A719X"4: ++M8:'*I"S,$;F*"H5.%(".!]1#1&SMNF_=\F!*"@II6A/?#XH;`Z0>"DF%=NI3 ++MO\4%&Y=8H:P*8^5A[4GJ5[0(%EO0`X^VDIW+KMNN3J50YSY30ZAX,XVQ4VE" ++M8!IB$H\Q"Z:/9.($Z;WQ=(&@`[Z(Q$%)R5.]X)IGB1ZFJ;'LZX24P9*('-2A ++M!*-2LX8,2P8,R?:X#7/VN8$/(/5F'V.`TS5$!D810T8?8/L&?J(GRH*5`H2@ ++M4YBG;(?!,>U@9A9Z=QZNR\@1B2-,2'@>(/J,>S1-`SK!?,8S$1%#$W'&CYCZ ++M3('TGJ,$!F4RD1L)XV(4I]VEM8`L-A"*H>KS[;&X.^!*S57,.B![IX#K1X'S ++M23XT@80'CO9@E)I2*&@]KREI.LD`MC#FYA$2>[Z4/7ZS!I$]C1\6TNI'$D`[ ++M:,$=N<RWV,&E>$!X13H#O'P.PR\:*8H>B@IU2&1F!C30%$P_@494W+6JG6#\ ++MR-/(6V3R$XQPM3;&"E)JS&@B(G5IR>8PG0Z'?(.]_-2W^0'[_D?X>V=!5`1) ++M+G!B'0YA8<10^1)8`J>[GJ4RK":VA8,_UA"9FH0WS/*6Z`<*[[^83K(8E8@( ++M)"D]WV*WW8$(K?`46,8^2XA>+D=V]A404!$--/G5]UBA2UJA2)D7@="\8PN> ++MA&>J-MU#K.,>_T=B@R*AKLSKA-2!JB8F24"A@(#0&/Y.AP.$_)"X@!A/,X/4 ++MCIA&@/=D@>S1@(@3;2L%#`1$]QH6@BI0CW!E:$2HGJ2.D/D\,FVM:BR7N=/. ++M3_N$D"QXS??BBFBD*#2'>8ENB6L5\$I0+L/@E'P")O\%L/K*J8HT=B,-#`0% ++M!$BC21>,.1/J519))$P[@+!FV`*("(1$4<\AF)LN&%"G9*/KB>G,[H2^OGFS ++M'E%A`RIG>+U")L%\TEBZX6Z2US9RY0UP*9F=72*U"=E)SSUXWUCEY"S5F*R` ++M:P])")DZ+;,@S#T/F`9SLP1`4,$T;>R^(.MFS6;M$IK"O!X#.;W.!/)6Z&8# ++ML(';)0E"K0DL0ROO>P'5PAS#,S"'`2"`WZ?GZK,+=$S;/CD`/`>Z=<[W!N<W ++ME<D.\<IMX<S1G&.!L<?G'9X;G1&9R'"M3%)Q/.`JLHL3,B&E8),?@2MU!D0@ ++M0NS]7+KQLJ4AZ6":D:")D"6FTW:8D$Q?+Z"KB(LW39D-+FN]P+;T0J,W9@TK ++M(TH)=@;C,\BC5LRZ"*X9=D:M8"^>HA['<@C>;#<Q3MHDH3K#Y!+3FC/">?^8 ++MRI&0V,!Y"6+I\WJ\2=/(4Z0.)%+JZ_SWQ`>L?:1,0=NWNFJ622@/&^3^,V#` ++M!A)/[DN0I!#0!$-`FH,,W'="J2P378TFY\F"E-^%ZC(+6S'.=#R(P*GI`X&Z ++M)*R7XQH45:(B"$KHGE+;G%#P,P4%%(;`YEQP*=$R=:.BAAK'@A/.-,P::/C# ++MV]%2>$W)>/`X0ASE%CBXR+E0N3:9O)=N@Z<R``/,.%-\$F'OQQZZ>:98V::X ++M;5#O\3(Y""M)'/$QAB20G,U!IIC/@]_QQ]]\1?[V0#DE.294;GNGYKA-T[MG ++M'`42/;\/;K'Q"M3%PA=`(&J%3G!W-)?FDIC<C*KA$(U#D=[4U"UMY)OXFF5< ++MR*&>X$4)9FDU_`HY!<>F:22#WNGXJ#J'59VICCEGFEJR33LZ6K429U%,L**( ++MY):-^_B*FO=^>_'EGB'?XS\#[-3]^G\_/B^#+R_S?ORA/SZ8W>_.?&W5Y9F_ ++M8LO\??P_2^OSE\_C?ID_?S<N?GW=<_QOOFL=\O[S[F;_/F9\I'UE=[Z[3\_* ++M'\_S^OUZU4@M--%1T=+UCHIFJUGM&M2AZQU2>26K)-4K--'-/)(0IJ3D&?"# ++MGOBI-AHQ>$M4-MHR"6[=N=;5=6L5H5K+G1OO@)IJ.(*3[11-?JN&G;[4AL$# ++M,P",']$K]:Q15PG'O>"PM*PS;`T01)HR)!EWC<9$+@,CH33-@*W$Q(XB5*H7 ++M+V*8&'<P()%C7;SX/C@)#)-9?CR2QE)+)/9;%=C0IG:%;(BCH9TC*S,^<#;> ++MR]A\L1!)*EJY177+?8NY5B3-MPL<^6>;.?G]OV?80UGH?:%0P4'"H.>8+$+) ++M9A"F22H>[8[F73OY^??W97MWKP?+'CY=9VA';I0:4J):?``WTIH6E&[H3LT> ++M]\&(/8/WP`&JB2*E/1&)3`1H^F=4A0`;,=1K)DP=AW(*D)6@2Z7'(X"F]4EL ++M/MEA<.W<E4N)))(X+UQA#BRP54K)\A8\UD4_>Q@8?#Z[6@^LS/,^L7<1HHV@ ++M44%'I$PJ`?R)%:%7UD"D0"AA(A0"T*H>U!MO&NY#J)I:*H""J@3W,$&C%B"B ++M@&"@EFI!H(J%)HAB-8B&B"QA="%-`'V"B(X^U`,H:'4`E`4M)+L!S53CD\PB ++M,.%'XZG4/@02_:XR4%>&,L24T50?F&0#"(4@!&Q(?RAC[QT#\!_%YUCZ\A)] ++MO555555QBUKE4M0"&Q,MU0S]HXN&M3`)-E,RW=`+;0,-B%>L?U,`4`OF^3WC ++MSY>41$S![#H&M%&QTU,88P6TUV\Y'&+2$X+R#X@6"?R3H<$)<ED.P4S)F9(O ++M&?2.QVVZ!BC@H4`,7B%^SV0Z&XJ;@M`.$JZ4"^#/R6.#A,S05.L6S)**J3U* ++MHHG:O]`:I]Q$3;%+C?;/9O>GR=]C3VO%ZG,][U7HHO?GY(?A]&[Y'R&X`@GF ++MM>7Y;WW3]?VC8G7Z6/C2"IG*+([;PEBED8299NGT(@;Y`-6;G0;C7V$V^AS] ++MPW2G9Z%$J*I<'WL%R9*H*S=5!FS/W/J]K6Q?A^%=GX<=MF(/W,!H2!KZQ-G% ++M'Q_0'^/^X.VRZQVHT&)*83,2_Z<J>O^11+Y@50DK(J$#0L4#9*D)MMP=>O^W ++MIHM"9Y_DJ;V/U"P6G@-[98'P+W3Y*EPM!F1UM=K29A_&/U0IP_$>T_A'@7TG ++MGTUEPF3=@I)DVPVD=6I-#3$CZLI.LB?D2&9L)04SJ'Q#"'C]1KOT?!A[L\.) ++M*&T1$E-`>Q@\!^#CGJ_>^"Y+F5O+OPVMXYR&8L.A6!VHVW[:>\_>TD.J`0-H ++MG>Q"P6G)K]6U]..T'W7Z/?&QEEK1>NN'+30N"6WMC,QEDN>/#8)-/JUN7D=] ++MM^[SY@2%<;%@)"7RV+[<]=?'!=P]="'FR33'3:VVV,=N]+IXJ[Z8ECJ-///, ++MT<*ZT.A%)$YU6B`I2UH6>I*UBI-%3"LOOYM_D.?N<^GR'Y$[]:,?'KBN0_:/ ++MS?[3\1OJ3_,5#4,0J.KO?(Z$S59W4.G<SZ]6HKJS2UZSIGU)83X"!?D/PPSO ++M@_OLV]TX/0$MK'(*6J*N9D?RCF!@DD0.4!4$014*;D=BN];5RXMU;4T<L>-8 ++M4,4A/OV>?T>^'@'8R899C%9@AF85^K,!ST=JO:OX68#H(5Q@_`;$)4DAJ&1J ++MNU;W_/]!BX8D!A!22%5*)=L;P(NNUSTJ=PNE5J:?#$;2?&/<@<B\"@V$LJC/ ++M:<:_/?AR(G)2E%50%D"E@*H"GS$/Y9K&([^R::$8@JE4B)()@BIJ0_!(R*'L ++M-]U*45051!AE4@['P)L&Y!V`0??RI7NQ7U]')!\DV!UF0@K,B5)Z]3`*5P$A ++M08=3#KSQ5*2972VRU#$FL10MWPD0B'%J"*PS*,B7&$28$+%*84U2O)867*J: ++M:U%%8=;?$UFC`W]D^+"?*2]SOQ\\IJ#551"=)+6]2Q>>/AWN5I"YC$I;!R<= ++MZ/.=@P%@,=GA:XAW&+$&C3UX6?`)70>3XT%<(-`0<GA:TT4>$(;O>`'.X$.S ++MB1TB\G3I!CV=_#KKVKIXZ9>&ELS+XO',XDZ02*'8WT\"YM(P[U3(N;9L*6$M ++M:H3K[_<?U.?=)/3M_#<;E`A1WX"">1`IZW\SIP@MT0H?*G73AUAT0Y;+]8// ++MZP6S$XW=V'UVM.:B-**<P.M9AB)"F(CJ0,<FA(`X[=O1GI+I?E>*`EH1UB>2 ++M.*[G.FD<05,S$6U:DQFN@JY(8%Y41?2(:D/31#$^BR=C>B2*)FJ2?0/JZ$.> ++MN[TZ0=?,AW@&;UQX'"*XR/`5I,L!R\X:=&[NY!F1S,36LMT0(0R-HP-B7-#D ++MDRR8FX:M$@E1S9ET&M`F]0PU)FQ3[\O';8:-:T<;%P;;=?26%NDF808$IZ$, ++M<!<$<.H$?=<6'YTL8*W)%%U(M]4.@&>]KL&_%X7$#[2#).O;-$^D"\8>-?(J ++MAS\KTJY`R%*%41%0Q`TQ1,%?S;$5:P25-#!!1!%7,:!H)B(B:HF*&$BD*FS` ++M:I"LSIBHT)@#\Z@X@G7`!2HZ5&2@E""4QN%^($Z-AE?&#Y#O#W5!\FMM@S&P ++MRI&0$I149)K,CGFW:0V,'8GF%S11*3SG9[JZ'VCR&?*W1<1\`/`.=P1T@UD8 ++M[JV=?&=QW%=7/15LV:8($`"@%OV!PJ($:JJLB,@TXM)$$P4,0KI=-!14!$'< ++M)SAPCE$3%1_"$R.EQRL!E0E0*%$2?P,B9J`2@0I5:6&$FI"D8D`I1(X#][QY ++MZ,.(BT:2V74ATG?\$30'6=9YM"KA^<2&U7!R_-+;9/5VEW[6R>Z-DV>?YU[* ++MH^><`.@P@P3KX9!CU0]>QKB@9$)%2@`DB2%)(6E.8-UCK*B9GW<RHF=!R=!B ++M&.?<046CH<H())%5.##PX0U!_7@A`#;),/Y;;T8YG.FH3PQ2)1;&PEA*/S+0 ++M$7`9*!H:B9(:&&6DQ8F9(AHJ)]!'G-1255=%9-#DL7W'\?.#V-(*B+TJA8*F ++MA4?A9L?%;&(MR!51@(DQ=YN;;'<\D*B$BI;^E)@Z8RU551,A0%56BSFD^DQ` ++MX0)CB_E6B-)!YX'&3O[$[R#;:AI:B:&B_$QIF2)(FJ2F$D`O9YP>G<TXM024 ++M^$^N&/Z)X0T!@:JX0P,0F6(IIYZ#D2GD-`I]9'!P5[`'K$UAI,JTOH)I0OG; ++MO],YZ\K$)I1B"A`HH/HP:`YFTY`_E!YFAK@BPE%F`S!1%(APX<X.)*(@*[)B ++M9>QE*8G%H7!!$`<GA#2I#4E%+)3*`=?OR89!YYFE-)R$X(8."'']W[MR8([> ++MWT[%(I%PX;A)4$II5Y&FATKN1A1BS!,@4<@-PR&E.$Z4-.BJ5>'<IHH`X2A3 ++MH6D[*.DT<E&ZEQK)B)2`UDUFVRC[`\S`T)31S6S#0$$,TM`F@5J@4I$,0`AT ++M9XJ'!Q#2#PG#1;`A(!]TA-P,B3N28._).A`3PGOE6+N1,IGL`98.-Y&1,`_? ++MA='I..=W;-)$$2$9MMQ565QK6P:_FDCTJ(P6(@H=&J*6H@JI?B=5Q/@N,#U" ++MHJ9\3;CSL=UY3R<7%5MNBX&K8>EUE,\"(IDHX8<S+!FU)D;%Z"(,NM6QC1JX ++M94%5+.XW/%)O+HOZQLYV=_A9Y_.AEGT=0=4<E(XH/V29L>1;!S8H;9)YC(5R ++MJBQEI+;-%5R7,1%/+5:8HMUU$$<J:NY.-S=YSN'>LA2TE4"/J"J"9&@.0'8. ++M0\AY*TH&E2J*%/'O$_64?)TT-+2T-(&A2@4T*4"&,XTQY40VW&S,7"2:ZKE& ++MSD29<:.:Y.<`Q3&#EBQLOA:>D[P^#V=ZQ'J,5XW:8N:(0D(&Y,_M*!-=H%#6 ++MHJX=^&'A05&LM0:/7'/,%@R1KO)/%1V/5)D38YK!"(&-Y;>6AJ23M%R![.)H ++MH:/#Q5Y*<CKPX5$<,1'IYF!78->N]XO72:47FPBZ-FJ&C;FH$2ZNC<VY4#-X ++M;(L1T3"IH<^Q'<U`TT7>)H5+G1<M!2E@[8]P>IX?;)WB[L:YS#PGC.M;^E>[ ++MR-UP08'X]<0ZUTG!$>3MM)_6M"<+!"TDRX@-11`(@G@G+!5P#2%H17$=,<\$ ++MR"=;F-VY15HZ_A(:"H"(A@N:(PX7`*FDH^8H"84P1),5<U&#+62>'.1ZA$^" ++MX&9A(";.!(4U(8..$-2YI@IPYG"FP-Q047%$A"8.#MUC5L)R4:)P1,%B0Q$0 ++MS$11IS8=>HK=-`#K]U"F;2&YG!#((JJ(F==F[R[X=-9[EYWO&BJ8)I@B1B"8 ++MTA!''#9^=-FB)M(X5(XCSA:1J%Q>F-<)B0U`N(IYD%3G4YH#JF*;L8ND&"C6 ++MYAIQ,01LZ0@IBC</#F)I>\\VJ>%1:#>%H:0"(*0HZ3H*1.2FNP&HDEB/<"<+ ++MGAC!-!7JT<SH"GRQCM[XIV`UI)?=@J4H`B3;>8<^RQ^$<\QV$IF$]P=OU_.[ ++M#A\]#.W@!D)FRVD?0$SO\Z&>PX;MB<T73^V;<@XF`0Z1ZAG?6Z&R3!UK3U>R ++M^;!PM-"^3MM>,/F-X2$32^6/(R&GM1N<W$:0T:0.0.ET.EI"VVR:'DAIQ(ZY ++M]WZAZND)B%Q8\./.&?:0<IX6(MD4>#.%&<,H.&%$&L;?"MV",EDPE:/<4X;3 ++M:*>::+?GO%#^6N_COY]U=_'\^?9I7HSRD=_R+^Z=\?[?K_#_D;L_7?BO37OP ++M1/UX'Y^?=](?G[9.XJ7M_+LYOY/X_'OJOR/A_'X^Q?S]?![[S9.S^EMYUE5[ ++M+7W[\+]3\)_.2K%U8G*5:TD\E6E74UJ65HJ6GJ4RUIZ)*DL51JE#IR.I59:: ++MU66[OMC':^STTEN^YSITVTOS#Q9#T%/[CS+FD(4L?.>7$1Y;C%/?5<A[A]X? ++M9'C@/SSG!<\+!/;<,(E@.`L%68@P48H6"%B#A%$9`1044GN7UVQ'<A?.E(J7 ++MDCK]KL<=W2E5"L'M>G2`_4"7Z6`?6[IN@Y9!$GO)X/(__K8%@,*O$ZE46I5Q ++MI;*VRVQ%!]R%R1V/$RQW8/QF2OCX$L2QUMKIMG\UBUN1URQT/?E?KI7/IIIF ++MA9)^00%A*2'\9L,@H`C#7?+3KUZO%-=LNU\=7@D.)`E\_'3X=N?`YXO?G<)/ ++MTCX>P?LA>`=HJ(R09;#(.2D2L2C32@^5/>D,"Y8T5>)PBC*M*=7<!>:.[":: ++M:;F0Y0[G#2<AX0@4F&1S,9P\<A7#CJG$&((D*!UH34M`Y"Q.I:I2DN[P[>OQ ++M9KPV\]K2$U1@>6OO]\_:P4?@&ZI7R;JTT'I7.644*X/DD!AIE*`I::2*EH/N ++M,PG+W2:CMY#\+566D\RQ6"]-%641Q+L+PPF(%%JJ5>XOG[M=GV^!E>X?80_M ++MT/U%$A`,`OR@5-1@40(.C4"(42V89$/@<&'V^./ACAD0QOK`K<N<FT[?(=R6 ++M9`I41<"X!2&'&""KF*"M!QC\@_//;T?H^/>[V0KL2+Q/RRH3K\S-S.$<&87" ++MXE)!P#^XF\.)LT;2YTZ!_//#(8W[J=BI#>/BR2!5!X7HYJIOL8V+4M%02A5% ++M4(P\#$DFE>N/P?"/ROPVQ\#6/:XK.JQ\73R`O"<0XT!D9_N9?KUFUA,C(A,S ++M^W#Z_M^G^KMTM"0O5,(-`06#A4)'LB*&7>N^27B<S/[[$GL8>^QRPH9Q?5T9 ++M2<7!"*9*B"8*\2B=`UKRCU^P'W5BS]#7L;-G@7EC:."9;IPF[2YIQMI0(RV, ++MNEPPD7,^YN7$]4DR-YPJ3W0%=-%%57K#@*HHJ)***8NTT=4S!"R'!L#\$A2U ++MZ-@=M&'UO4"IF*)"<'$):P]-!+"CE3,[7.`FH"1=BWK^?]VT[[,!`E%,P%/D ++M.L[B#;9AI9`B"L)#O-&4_)PP9BNAG^ZX.G]Y'7F:Q^8".YQ_,X8[PR?##S/N ++M'SF9F;$OM"N=8'"&SDZV0('((IR`2A?.FYMJ/,G(?.U6/1[-F6&L(XN,(PTT ++M+J07QHNGF\S-:TTY(EPRJ"1[/"_:!^!]S%0>LFE3GU&DOO)8BGE&$I$V8_M# ++M-E=)OT(>*N\@8,=VC6S:E17KOY:0J#"[0"8O1?>]*W-PJ`^?JWTZUX52(B)X ++M%4Q8<3&'DV8$/T\GM/G/Q9)G&H3SK`E"_YZ#X7IO_>+I.!)FU.UNUH_;QVMM ++MV>\Y3L];>Y#R//\[#//F?-)-1-111F9O-V"TIC75(:8>SB!P+SGZMB+(XTDE ++MD(IE24$%-KA&&L44Y)$(NU(L,A$H*DZE2?4.GB?,Y\;Y.>%PDZ%3>OX['M<+ ++MH2J43UW%D4J%>ZS)7+%HNO[/BQ9Q_G`P'?%P!_W[+T7Y")(\"-L7UV4)KX$\ ++MPF?I"3\*29_K_T689/;DSL_2YW8NIMR9N*G%-?^)H(B<JK3-ER&3"!,_,]@\ ++M_-$[J(X9Z[O\T^_/GZ4C8%GZ3?X^3]*<EU]77M'L&UESOTVI^JD3BXR";_+V ++ME_PSLX],W+)3'7-?*0'D,'9/34-->K9473IQ&[I%8D$@_4RBFZ-LI2&_F>4C ++M9*;M`G&<0GZ56+X(YVYF%M`JBR"40"&5#^LJJ0F%01HZ33'RO6R-]69A&7M2 ++MD/'X-;D:7X9V5@ROQEFA>+GE%"Y'%J1?XF3EBAZ7\EOW1F6*HI_[OS(D'XD0 ++M0CU`7H%D40=ZM;KBM#PTFG6`:H$EU"10(JAI+[4!RT1#[A.3PEI+8'0E#RY! ++MRH:"FJ:UJF@"BDH&E(E2A**'0:>2&N;4A2%#K2`4EL&(:&A"@I?F^H\[CR'0 ++MT!0E%%L)R3DOALT%YG_11Z[F)[&@[4^2;F-(6P<VT\#\IT-BD6:D"J#FTLF1 ++M4J!]3MP^>X5Y976H1T0@<+V\-[RR"YL199",$Q!*X?B;=)I-$?O,F9EIXTX2 ++M!6(DIFB_VI_M:Q9512P()JB;J79`\;DH1.JSUH\DL+"L6M`RVJ82R"R[KA:7 ++MA!0/L-*D/J7LU<MVW-L=U?@@EG\&K[9_8B2&?#?AW:PO$!@L6E^/"B0*+:1C ++MX;ZG^UEM`69!'\A20)T\2T3'3?51()%[KL?>+2)!'V41\*(^7[^3V[:^O52/ ++MV^%K6Q7BZ^ZDEH)2@$?95>I5(W5LJW!18MA?CU-7Y>O\:?HZ;%#J)N^]:=^1 ++M[79\0>0JS=(R-^+"5)>PME":%A+;@FO6!F2M\:[U@M`_F($;\/U]",<T/L5K ++M8&D?@COGOKYX+_C7GYQ:K462219^G:+20\FQ0\#\V'R)F>KAMYUM;)G9F#8) ++M+=XY'(:RC>]3-G3%$4+]I#,4Q<,,-T6`6-M_$TF)I#0DW_L-C(WQG-P8`^NN ++M",Z?P?H4LQC^`(&_6_M]7^VBMW[B,&*%]?(\_L9+3E'[.(LA/X$"9!@-I42A ++M7"X;7<2LBNN>.+:=KAMY&AD$UG!,<)R-B98RW-3$OYFPEL[WSK"2L!.%B"YW ++MK7L-SI>QK1;+J8H;4;I5>)IF8Q4F]N'9G8RUYWJ=C(TTB%%-34=K&WB/&J0V ++M,C4\.9'B]M)MWQ92]NIR-BUN8/R)%1.*@_V&Z/H?*ZF$1]C]`H?0H>@_&(6, ++M)W)&8"]H02'T\]J![ZF?-^4]@E@1I/(\'4OFG>Z:#G3I`6Q2PDP\B*8WJ%R> ++M@UVVV\='?..),TFYN)4#B!BVE<A@#DUJ63/2W)K,3LA83J57/?!K?N]$G#+C ++MHKLVZG=+H^._GH^'('G(+8$R3V'HENL0]LCE].V.7''"Y'-HB*H,0>2@JBI3 ++MTW`Z=GFVU'@<%GJ3#7;FML''%;&34C8T-;T(.A7`T6$5KHD>2B+"&6N4P&>F ++MV=H5C!K6.J=MZ;588'0;6*@\FE6&]S:;R5C+7>^-#<_4:,"^YR:@F!`(+"X@ ++M,&0H6@T;Z?S>4J11$OGUYN6-:(8G1FS,8,LIJR2_38L=<ZLC(C)IJ-W,TW1F ++M;VMM?(,S,;&F`"C2YH<7ENN9KJ7-3';!F&V><.EQM1V.7?@N:@A[M`TDHFH_ ++M'\?).!!H=@_0OZ$Z#^`6K:@E]>B$A8DW3/.]N+:Z.U3JY27JHSO6UN>MYEV* ++MFN5;IPPMC7C$P]/#,N2"HENM8XMOVP9(B*2LM3DZ5B^A;@Q<Z9%A02)Q':V6 ++MDJ0Z6J!,F20-DD,\BYR-NVM@V[53@X*Z%&V+=2T.>G60RM9SN9U,@J)N9G7H ++M8IE'&72:96)P:T0I))=M$1C,\6)S>5KG6[ATPWA7!U+W<9"31K*J2;ITP8#> ++M9YY!S;MTYFDFR"SC3G38L-BY0WM73IMP\G2MC0VQBKFQDW-/.LB92D#!0IG1 ++M]_/DY/_.J_KZ_.A>'ZY1]XP3?8*\)S>_.76W);?&+3"?D+7[BW-]W=Q,& ++MZYE@6%H,G2YWAX)O@30FGC16EY-"^FE!W1>O2IWL9I89-DK%2VUX>5S*UJJ& ++M7AI8/K&I;GRXSQ"M>.+.CM?*\JQ5K\'A9\#4ZP?"_26L;L+#";[&E947EN<O ++M#;?*\&&PPU8'1NVL5)N,[O443+/3B[H4%SV]#%SHX0SY)O):1."I!!R9I@8N ++M$T1+P<ZI#.[)MR7.4L_MM;5(Q]/;^"OAC^!R_(TH\F8/[?F'^!8^C>7<#2&S ++M\`\1]!+16_8&1]=18G-$B'X7^R^ONYKBJ[<:TVW;T"E<]2&9C*G%BV6[.5%0 ++M2YD\;9PT-"H!Y9YSH%7AA+DO&$X0[;<:'%^8354>S("HP#<O12#8HE%FCE$= ++MAA6XZ[;9;F??CQVW,SPD[8ME:DQTTI,B_<ZFW;?:YSO$XVV#366,\_5R-K&_ ++M-9%N--9FV8-8.D^$J-(,.@F$6W@(AV.&_L7]7P(.C?K/#0XT,!VVS-],>)K, ++M;6L;7##&G!W3A-+&1C-J>-C:T,/%^G6'2V!9,N"ITMIQTTR"R8=]#K:)MMC+ ++M&K`PSDJQQUP`ES-LE9A1K)I5]L@ZNL9S6]JYJ!3`NS*VV??!DE+;$L<U5@S) ++M&Y:X0\GU7(GN.&AS#VG7@T=[@=FG-N79"&C(+(&O-K23*Y0.M!RG$SSL?C[4 ++MY]0061(88^@;8O,`\1[U@X!L-KZNJONI1I8E9E27&!A,B<(LRLF^EH:EC66F ++M!*9("8*306D2`F9Q@R.,S0R+GB!O1M^KWZ]QT#Z-\@W\J?"8T%Q$=]L1-(9= ++MCB7,4YF07-M2*+"VMX>5!"\-AD!8$4F[*1'/(JW%0%).FN#EN'B:%=*R&VI> ++MC4)#OE,%KP\F2NQG8VJCD=`:[>'ERIUU\=37O6-JH:+G<%3LPM-%G.GAMEE? ++MP+;0P>1KM:>`UBNB>'/3%Y5'2Q@\,JQ,\;-C6LQ+&E4%X?.$T,U0Q;:'?H"U ++M[P5!</W_<=%T3J^VNIW(XN6M8D:.\/CT8-%$5G[\)!^$>ABL^@G#D>E&!ZF$ ++MG%!?+6I$ATPQCICU?1]7?:]PGZ4^T7]^8L?N%<7$_>EAB8DBOV`&^+Z\=2VF ++MI=SVXUG1RP30QOQ:BT0<4%11?!;1D\/8?U0]5+][-+?W#'V1)`)U#]DP0T.( ++M;^3^``_K]71P!=]OL4_%'O*+*(SZ_2DCX[&_@7I'KMMS<*QGWW[R3N<ZPVZ& ++M#9)NR3HRS(YAS9'F0F.>!/@]?!S>M===!Q%$&%#-[E9VR-^F-#H'0SV-K6L/ ++M0N8+WYK1LJ8FE%/:T:(&QP\GB&>J>"2]1SIW$N_0?;5Z#LC(Z/A1,830_'UH ++M7E!2!0;#@P%:^A80^98?T&!,Q^P<7(^GBD7PCR2>`CA3TS!,#]*_N9N_3:R' ++MX>$F(_8P?PA^OK>^YY*:&>>.Q;!N<%BWKZ%SF`N!\,\[:8*OO;-+7F<O5=(# ++MWP@T'J*YRU6<Z(JF!B>8R"[6L%]:*M@H:-**]6$31/,Q^_\>_@99BZ^_K('] ++ME;NW\K(P>3O^7Y6<%\STA/6BTZ^N%=M+_Y)?KP8MJUR0[B06*"D6"@H+!ZG- ++M^U>LVY-=M&6>7>13P\/9OS/&4FOQ_08\/]@]WZ\.^+IES\;U_@[]`4PA)'_. ++M(8_M#M?3?S/SIBO7(A&T;6\4S-'XQ<J6OJ@R!I;*9:AHQ54U5,(VR[XQT3+( ++M5.0Y5?@&"X%$7\^Y$@74($3]Z'V`T.!$GOL7-S,\XQ#+\+'ZZAFKB%]"O,+U ++MR'RPQZ1D*?HT:"&XW91%&LD3]?,K1JE8Z^['T/?A_.GI+-A4"-!CS%A@?7V$ ++M(J[^@N$S\F/BC?O):X&_@>_0H,<"$<A4/H?22X7"\M]]C1E5R)O;2V>*YRL> ++M6DY+F9D75&;S0T#V6Z=.7FM>-=>&_H,3/+VO+Z9O=.J;JHR@KTS^(N0RO,(B ++MV=;ZPOMC8Y2M-6?"%L<!V9FBZG)SKIER[Z'3*++_##UN,^EPJ_KZ9KJ\?5[\ ++M%:3Y<_V88^RLH9&"HT$+OR;E3I5I$_BO6I!_,;T0*^^_%?>S]K*J?6*^QU#Z ++MJ1RDFSO4.%2NJ1_8#^/J%"0)L'"R47)5+8H`:D5609`'H4\%D3A*/;A,`$02 ++M(15AU_Q\E''NR73"<CFSSU>'PH3DL]2=#FF&55QRVB3UHZDK/IG9:')@T6)E ++MM#ZUB>Q1-1.(B()7*Y70BKS5Z6HK4Z"$3HB*K`?6FJT3Q%A7UIU>TTM#IY*D ++M)JC1TR1V'Q4(!`'[1^_"LS??1G$L]OM_'3^WXG.FJYJ3>?4O\SOU9G.]WVOG ++M?>Y]_:3OM-_?Z#^S7R_KU>^&O?R_/Y^?:8Z[]>EG@QESWR;'&F1SGUQIO6TG ++M;?MMEKMJ3N7ARF6K_)W\_;ZOQ/Z^_OWO<K[/S]B]OOU7U^.1_#_!KA7P_5=Y ++MQ')&LLLS2Q4QUAEPU)6P&=@-G[C8+X\A95A%(S8ZM?DF)/?Y@08@0%#L"G+] ++MRKZ^=8W,^U9$E#9\OA&[/=@M=)Z$]H5I^IGVZF^#8-]($A0(2%N<5ZD6/6'$ ++M5>&1-%/*T%@N79".0(B0:@F-"SI9:D:R4E;,80['F%CB,N/0#H4=1D#0P<CM ++MEH-46F0(3026#<T18/>J-3WGQ>SW>[V^[+IG\?Q5K>]KM[D?CH!D!F'X'R`\ ++MA.A)K"LPC,2)J(9L)0108C%B,1KW/U`;'\)A<A#Q^0P/+$2!$YAB8>F_ANE7 ++M-CV0F""&0AB$@Y',BA2D*$/X?T![9-@B$Q8P9#8OY0`_RY!UZ?G^EO5<UC3N ++M9ZH3]C[$+KOD2'^(:1V1[`_;$)OQ<S@B884>&\R#G"4G,B8.>P,21V>NPQ%P ++M\.(D="/$67%6:>62;$I$NH&"+9!3IBLP=TY5-1>>,I&"C[1CZ"W9JP6.AT<, ++MBU9PZTK%=3$:Z(%69J=,(2-"(2-`)C$0,.\@=.,(2HBH_!S30>X*(#*(8/:* ++MROOJ_$)&3`=CE["H>"77-(4)66O>,>(VDPJ4[C!X3AHDW<"\)(AP$O!$=NT! ++MQ-5W=EAF%I,*F5,_`YA.;$U0T%LNH@T);"%)5(L!9)K!#MH9VR+6A=+QL&E# ++M6<9,ZL9.XPT)O:<J3H(;E_K^Q:L'!-@]HGD(GN$TD5*OJ43D#T@))=4EY#S* ++M(!H4:?!)#C?,U]?U@S^BV7)]557U=J^.:.UZ*F_!2J'6]LL56)G=-MRZVR]^ ++M:8UFK[,\MFZ(;VUO197=+Y47^Q>VG?/]"[I:/2NEL5DK91/W<0%]*3/?I@$B ++M?+]&L;FOT/@<Q/P5E369,_VFE^])C]G6^7B/&B-(&%_-W6*'%`:OX6WQ[+?[ ++M*U6[Z[8Z5CAS,FDX</5ICX:]Z,C"=4E,UZUUO7@F-MM,]]&S19LRD?"]6VRJ ++MI#8!!_!0/\6*<]_,#YRLQ]^Y7=,5^V<KR11U]]#N';;<TQ?MTQ#&E=K6VURN ++M<MQNYPACME;'/&9TU-0S1MB2[\/3/\E^WU_5_P1^M\NGZ2)^C)%?Q]C*_6.Q ++MGY_*]1,AC-"_:QIP&1-A?G!KQ4&@(TP+I)NR2[#5%>;>%GFQIY>!LX-37/%B ++MP2'%$^[?L9>KFC2BAXKP<A-1&)T*RUHTL-!(_;\9'[6A6J!M?GZG\_MT]ES_ ++M03T[JT)A]^:S['Q_,/R6)\0_4/AK<$CY3^A\J/P/!T@0%CAKZHZT99PS!].A ++M:!9E),%9G3QHT8MTF7G4AU0P54T3`M_#3C&1CGN:$#5)PR9)%R\SMUZ[]\!O ++M@X+6+9&IC@Y-=FQQ?0SA;&F9>:)20SZ9<7*3-U349:YWU+IB^]5G.)8]NACR ++MN;#Z\'J+4&FH1&)J1P6!;+X%>S$.C@A/2U<A5H*X\O=OED=1YY,CG?/POBJG ++M8>V*AUT+(383*C.P?YPD,"G*\)$2=,6-7'#`9D@M08BRX?$"C4BQW!S\-]]# ++M[B!.+YJ!D'Q0_"P8827]<M.,S'@)V<\I7AZDH[BGC6H\6WL7.ENFP?)_3LQG ++M[#\G/"A?UU#0.O^;3^\[H;HFMPF?#-S&A^@6-T+SOP.S[10K1QT5*#/S9`%3 ++M%M<I@Y3^38KM][?W(X'-BW$]'TQX&S]'W\CD69UH:)"PW:B<0\^&`J1-X$Z! ++M/X"[?CBEH<RBT12E2I++)7$L*"J"&+6Q<?/96$Z*3.?'A12VJ*E=JK#)!8*^ ++MY<LQVB$5PNKB`B@.$"]+46O;@E6X67Y=D2`!-?&5)G8Q@EE,(02;*F"=$2.. ++MND2(D$1,X,CGPAYCT7)?5('F@Q)"A2J*%^`P@T%&C)F*6))@2(C[K"'(&P1@ ++M#)/9`TE(1*)2#_+^Z[?8U?#+N>C>6GOP22..+!S]%Z59L"J@B$L3WX-:),2_ ++M&I%M=7-W;OY@IN.-@CMV3C">0+_H*O$N3`GE1I<H9#*@3!:PAV\ML3S@?+`^ ++M:)!008G!-`D,1%4$D\7?UTAG,]W!'W6]L@.`%!`]$J!SZ_1['=Z7^60+>WPU ++M*^U2@:>SWUMKT%!0DB(&Y/B#]/X!2Y4T/LNP`?6P@M,-*?8[[D7H(RIH/3WH ++M.R=1\9,/5OGL#Z5.+\XA2F30SB(3'1&(?'>!H!P'"0S`AK`YH+T%7J&70AU" ++M_$(.I^#TX5Y3IV]$.ICVT]P^E\C"[AW5P4\0^"ML/0[/EG9$4R!\0VRKSSK! ++M0'61@9'%>!.3;@WC)[64R$3W>>$ZE?(40"'5U*>:?Y^@V(['H^;N.Z8S!,)R ++M$\1I//V@8?XP]`\9Y%ZP>`+`CG84F8^Q^3VOM`:L)7U9X_H"H^Q[)W>71KD[ ++MVJHC%)<K&*7#,)MBTEJJ?7C,KMRPO-1?'Z\GCFOP=3J:AQ$P.U^AA)@3("D- ++M8@C$21C%,ZVC3Y'.)M9UG$Q@HQ9QX=7T'QP_N43T>#XHQ(>F9`.`S#6"SRWJ ++M%A)39"PP%;4'@3,K@H*(B9K2TKY0J2PHZPKD@=W8G6(!]"41,.#S]!]OR=I\ ++MV0#O(.2Y9-1A.)#$0]`3CCL_QMS`/+<LSX:Q!_9P@F*'OH],!*!`73"$4&#. ++MU_:H;WI%V.,@BBB-)E2HX)"!,<4SFM^-)N8'@WXT:>P-ER$24,N[2(DPU2"( ++MY;<I)!A(#^*DRNFCF%0R.9$=U4N%MI7,*34N0ZE[6,)X#2[W+%_2IEP3L']H ++M<$Z$-YD<2!PA/G=A(E?Y5KC21$A:1X*3DM`GA/%K'W_!00H3]K$`GT^&D!_! ++M<O$BP%!T&0%`$BB>/#5928D:%LJ*-2,$@X<2"<OUCR+,0Z$3(`!,(+P5M_.A ++M@@=V*`]Q$$2JYV`,U!V#ZZ/2:0P8T53(?+>."(X.(#<X/@/>81:JG$\KU5P* ++MY3LK]%J/@9,:4&DM1J):HH,6\&28+(NTX%=#DG\*`,!@V"C\)F;>=RILY@>? ++M20UGFP?29`A#K'+ICGAR:>Q!'RYH$-#A+#+)F_18`543(HL"8$@9=I:T*&"D ++MI)CGI$RAH<#O,.CM!01.9<Z2)AUX]$R.!)%A3U&O<#ER(&%BYCUI/60DS9@] ++M9)E,F2]Q!D/:1L0=-AT^R<Q]!R]/O@71[3G->'<YV!W)\V5,1:4W'9,1#XQ* ++M'(?#WR'CIBX/PR(3",-HQ-'B`^<;_%YC$1+1XTW`YB"A)GE"'Q<DGM==8:@U ++MAA2E%Z@'W?.BFU>$AYYXUMJE_!G<A[]PK^C/O[Y-.^4_!T=;X(ZT:U&R!Y;; ++M\X+GGWVN[Q`H=(:0_"--`?P[G,]H3:00BI)$5R*)])/DOEK\/0>63EILVO12 ++M49[11Y=<BI%@(ZQ`AV.W4A)UOD,@9,DBZG$HYV#2QZ,-<:AU0N6&=5YKIUW+ ++M'?N5ICL6DBR3::CMQ@IP%W#PT0]*CNFGQ)CD2`4B$(>">/$RPS'6I56,H+G# ++MJ96W[/2;8,3DTWA<TQ4LRFZLM;*K`B2[AP)AD=][`9I,<T&X7^@L=("+SJ5* ++M.N6LXP5J;Y%F$G..4G00PP!MCY8:<P\P:9^T_)5<^Z/HZ;W-SM-44U%H3Q#X ++MT3D/A,C[IV>TP^C24@YM^'P<'O=[SJCZP>$GDWAAY*]H=B#(94PTQXXH1%6Z ++MCZPUFMV80O8G00#%ZNQ2E5\C&+"BBAV:&70R.O#S>[#)UM4ET+I9%77,R3%7 ++M*.^=I@3D5#OTVL;)U-J--W*V:8!$0&U&'")URL72A.L9-1"-VH!JF'HPX9&' ++MV;`?QJ`P"/&B`R"?!VQFJ2![V[,4Q+455$9T)*A9LZI.W%I8N<A4AV-9#`TB ++MAWC)04)2$DGB0Q%H8)4/Q)<!$`00]8&(@D*"BBA**(D))2FE"`AFAAD!HHL@ ++M3`)8[!8#7GF'1@`R(!4DJS%02%`L1(23"204#[(PI@HBC#,G<XXLNI>A5EQ! ++MNT6"Q#!M8`DRECL29$J'&8A/$8D(A"HA`B2J#A%W'GI>P^V<!,>IT9&FH*F0 ++M49&87GVKT!C]4[WDE@XERPIA@+#UI`$GJA4GL#O]%2W4N?UBX?!(^P!*8?S/ ++M71`_+X8+9#%#YSYY<M#YRBCYG#BQ%'JZNX/4^(\<!X2KZ8]U]JU>LX-SV\I8 ++MOO#VT&Z&;$2!AE)23!:LV[9E"!K:ELS&M346U[0NX87Q0635V0U9DC,\K)2+ ++MG4&I"CD2:@/9AU":(=76$!(!T0YG8Z(I*GV%?62.I982]$1"IE0(RI8EH9A8 ++M`#XQ-ODP=N:4=<!G+XM\Y8O9+^._T=\M<BE*#3CC5Q>L*28G)J]3):O4GJ1N ++M9SW3/JJU*RU'%$LRE>(=.P4CE7Z*]\^Q)=G#6KZ.<'#^GM+Y:R98W^)>`+VJ ++M.NSU=ZSK%Y\!'FI[_.>U)ZI-=R>GS3KWX5].",`_<D?HJQLY?/ZNR/']80;' ++MS@*+G^9[*'X_6S/S]G@D^(L$_8\/V%_P%^=ZF>&?3](4J/]S.K]OPNUO'R,Y ++MXEPKGFV.DZ=/+IQQI@\-)39V-<H8R+W";YO1]?-[]>;+':>X^SEZ(8Y">6Y# ++MGOX/DV>0*DL;R42:!&0J/A.`626(KV1Y+0S/:*(F4<<K^OQ&0_A\`H+&T@6& ++M1PP4$L_D?S[[O7]6$-^5HP(3'ZK[JOV1W]]_=M)C,^"K@?G]V_P!7X'4/!+\ ++M'7)JQ><&DJT>>BF/W(_)^IE@]F.>?9\I;\C]]R_#`FNY0QFV)H-";&$7DU%7 ++MM2D+=+H@"!$"A-.E7W?ROVW;"&B6*:&.OO&&%=K&W7:A]>^P869XGHN(B!X$ ++M"(!"%KFRH9T6KO]CY?>^ZQP$#M"`&9`/ZDEI]6YCL+YQ"#U(@]'$#<\9X[6" ++M21#3/D);4*-RI29&UPJXS)#)B8JB<9HY;6PQ.LXN?R=_=!T\35FQ1@#XP32! ++M@',.(M:)F(J"EW]#AIY1$@RP)$`X+Y\O-G=V<^7MZ3EF,C"'M=,[`E02PYZ5 ++MC%3V">P8'LDZZRP985+>`D#@@>1<,B\DFOCMXECG?J:RU%(Q[RF.;%)]Y=YB ++MEB).XP$U4B%#/%+'W:H$U,1Z0FA^7[FLM`8YG0$#FJG(%D76B.;YQS#=($-P ++M#E#PGL>L#=4?`5'<^L%DX/*R;/A%!C\`;F>6",,\9W'H/FD.PZ/FDB'JE:`V ++M1#M.<47"AZ3<4.[QAYNV`Y;^M;$'S+$,I,0G(A28(AX$KVU=@7/U:EVS6)[[ ++M,2#N#F2E%+T>:G1Z(UUG0ZS1BO0XV3Y."-2.8Z(1-$F,9H0/4/Q&@*+Z![#$ ++MYOD)3.U["*0B)2#H8AVO:%!21-"3`%55/L88_&D2FBAI&+V)?(?L]%OM200S ++M/1.G0=;$DRE!LG/#Y'R#-Y.PL@I*B:JFEI*8@T1B0OJ(`PHD+Y,8E-/'R^M. ++M:$40%!(P;;Q3$D(C!?VCM:K5_2+34_1+[4M511E!(L0"FBN@=/?#WY%\TBYW ++M8)K[`M*?%>$]$G]Q%?W$@>/^@Q_8&HQL.@0_]6O*&Z,S_G)VM)O&6LY[\!0G ++MDGUR(<[I-[U][6Z[4:3-!$0F`^1L8NZ_`L0B(;94Y2*#W?H:B_$UD6K7T]SV ++M$"@0!&ED)!20@?>^JK2K&#Y+_EKW:S_+F11E_E@6_7A-3F_+[=?+Q,+-5G/8 ++M,W/>QT/YT1$Q21B)H!-"&E%TIX2<@.0<AF1*$_.EP@W^:>/D6P[?:8:MI3,L ++M1_!G(C<^G^A'AKYZ_;B;9$TF("A(AP=,7+G";R-`:)3KGJ@=.^)REUIK.E^, ++MY+F!^)Y3C(5@HBB@$@@["AR.>;$#0->%\!2R\)2(X0!9RKZC2?$)GU@!VPND ++M")1U&P1)2ZQ"C0U21L&@H(9$P6J0]SSB5N0WO!G#!B(C+;7+W;@4AC^L=CP_ ++M7.`RZ>=4PFGA=TR0W:AVDI5(G5LA^%/XKXL43V($X&G@Y`X,;G`[@M)AQ'&: ++M3C8/8GJ0)$1I84Q4SSQ4N61\NFB@T3S'C8X,M*Q5:C$&<Z2:.*5J*)!\4=?' ++M5]=40)YT1;%,)J:E2JYS/KQB3*(\"=TDC.GCGKS45XIXH4R/FDIETOZ^9^W+ ++M[W]JOWY^S^/SGX^#CW7^;_/?@OV;^>/SZTUYZ]/X?U=_B3^/W]/UV?7OM>^? ++M`!^%\]WR(]@$`=Z2X$AHP+,("R:I=`A,(5KUJT)S?DSZ]+U(T2I/(T9.]T(1 ++M3N$)GS5*L52BAJ6BI6..6*>B=J2FHTG;U`\`'G.48'Z1]%**MY2^X+35/J/. ++M>3Q[%:UT\NE95Z7\]-<8W]PLB$9$%@.F^[:Z2!@D(AB9FJ*^XBJ3R?:X"FIV ++MB(JEF"HGJK+*J',*?1S]7G.[KOC5OQUO>_K5Q(JQ9_:!^<0Q;A`)JP`$H=0Z ++MP6*C0>@)%#`I1Y5=4JX%22*B)G3M1UHD)Z*DLD(X;\;G?MH-^6*^OUV+[9ZB ++M+`%X)1.^%4CG4"`ZT[][$['2@\?3U*P[YWWS\=))\:$FDD=QZXH(A`P9:D9< ++M"01!`M`):G<E:9M?79E9,Q,N&FE*_QY(9C;1),ND'"LG07H/,YC,EN"HFQX^ ++M-=WH[^-H#WBB1!689*]F-QY")$'*`!>"=D2U/?1/OKZJX"PZ[4Z;=GH`Y(/P ++MVCKP#"0'B`!.Y9>RW@.LC;5&(0>%Y.6R]P3M-(GQF4P>HP"9RIAJ'<3V\%$- ++M+(G5@>+IR.N(]+=P?A*I#^F4>L7NB]1OY>AB&A0H!^QLHH012&V$H0H7R6$. ++M_=XZE(AB7]TV!.VR#V0R8@+I^5[*'J$38%1.(Z=VLP\U=IH-F4#HDZV"F#&Y ++M9$;2F6=ZA?BL(,&&\,04J_&G>CPDP0.+B<S"E91I&H%]2M>T#R^(#SD8>2=\ ++MNGU*OF@PNC<\UOKS;FM\44R`*H$)Z;HQ%%:T<[70+K1*&CACJR=$;8J<FO(0 ++M[!R`()1H4I52#Y@<%5]VQAC2*22>B_;"IY"?\5$D,!;$JVWKU,0QTA4*3&YA ++MKG,JL7TH3J8Z39M.'O#T[S8;-$3C,HI!2B\<V9B59,(WA:%<VC#%S.]$"RAA ++MHSJ!NQN0[=YLA(T"FW,ZULO&&4>.C,"35DSW+@X8#">BH:5B8]B_H1`47C0? ++M8P('!7R"C[)[17MFRC[F#L!>0^D9(5!AHE,4`TC2?L]NW;ZO\G(,V0YA\0^Y ++MUD6?=;7Q^."*"1J+Y:,F$E/X&,Y4\X@<`#0Y@B#C1C)_:[)5'=@XK,E/BBW/ ++MN`?-MRX,#Y1PG7K=5`(A147K0^8?,,/.)T;@Q`BD"D:0*I`8D3ZL"H#VP`WP ++M7#@BAM<V/LF-SZ%0![YL8O*IYTZ?X$!_=M34$GPBL!R'25B-"$R#,HT--*3` ++M.E#0IS34@L9-I>5;:"4TZPD/<7.I[Z"U8N%K1CB7HYFX'=P$?.^"O<=4[L/A ++M'WT^`>/CCF.#['K[%TANI2E%%(]V5OO]T6Q)T&D/[D]_UO!VQK[#S#647`LL ++M0,\\+8KU2@Y#%T-<@P06(BJ*:ETQ>XHK1%7RX-S0KE*IU9B@5&^+D7:'@$>/ ++M;BP/O(47=AA;[3&T`_OA!$D4`Z7(3![7^.-(+'C8$JBU%3J%Y(%4;`E4-"H2 ++M4$IB7)*4'YGYF3HM^D4/BK(H4A,!,'AXYM@`JEB'9A0_#G[P(:I`V&(HL]P6 ++M^(%3NU3Z?\ZDK_/?8TKET^A<.!<A!%Y_H/)9."[C7CSEY(QX\A$\D(D3H![X ++M4;;6#21NZ#"R)T$`3)5!`Q5!&$5$]HA3VY%-H#\W-S2B>0ER5-X1R4^Q(43+ ++ME)O(`Z@*6BD4^="*ZZ0*.(52ET"Z`/"$>$:(H3Q7YG[/.A)O*G4$8$4=^8!0 ++MTM+M,D)D/T%AJ3HF#3'SR7$NPP?%5"'(/DS"!4_/:#`G5'@R\3[8T&X$*P&` ++MJ"Y7SC%BE@R+3:'E"_YB?B_&?DS\F>H>O/0\F4"*`?"T+2">Y)@E@%L(:2+1 ++MV0T<)$TFY8XC*FH<8\E.0%#R#%H5/(00_JFPOSK2)'/DL##04)0L'S<6((." ++M.*IGQA\P/)R&=H6P7(@2PB2DCVJADUN#!`08PA8`SG&;J6^A4Y-=)=L&/3[/ ++MOT4B2$I]F(@HI*%I(D@*H"AB1I:*6""AB%^!ZU%YR.E>#CK9/&;H/8'6I,I2 ++M\9*!XK!T@T'H#2_;O`<YI(HIFNXC#.L1.T81T>+.H>I6BF8JEKH'!FLP\WE3 ++MM`\8JG2!`7L?(O,`0["00(Z)U1H#EV;9Y^_[WZ[]_-1-=HTU`R*J*L$B4NH% ++M+W$$8Y09F9E40U2W.IPSWV4#?+T(!`'.\NR0H0PJ3XWJVASD:>6K.3[9B)AP ++M8*=FJT88<!L.PH>@)$&L%928'+49(:IA'*H5!%/E_DU;#P2X00$J=9E\GV8" ++M<#5QI#N90<NST&CT[D-5*D9H9FT#*V7J?;)1:$BJ(E!(4QVK$L10(1`?U:KD ++M:2H7`RHJB61%D(D0@HK6+BQ6QJ@J-.)*QYPW-#!W=XX*&/Z,YW>#PD\-B*`@ ++M@V<&\R:X,ITZ&X<@:5PZ`Q$11<R9DH_S'ES@78,$$0Q!--'D6<&\X<$.;!-) ++M021)I--<C5>2N`(XJ((J8@@UC""Y`D.G!W,XH=00T\FCDFX8N9QK8DV,$420 ++M\.8`XO,8AY1LN.1"J'QKGK-F<ZR8%%W(JXIT(B.R609`H3..U]PP*?B^Z`,8 ++M_F=[#1GVX_3'O'V![%3N>!.9GQ-&S=R">ZIC\/%@N0Q=WQL$U/00:0Y',-!M ++M$3\07=0\R)"I1)`:=JIAF-S1]D%N.VZ)"E*!!R`4/NG^_L!$I&A$VPL3,C,+ ++M,,2(!0@4D\$#H*'X$8V*A.^R```]-4HTC0(4%41$$RE*E`4!0I0$2L)&A'24 ++M#$E#54%`1%(!1$4T!15%(4H4M!$C,"14I2@44$P;8`I&E:5"AJF@":J%*:1B ++M2AB2(B&)I0I62$"9&""D6J0"B)"BD"(*`B$:*4I()(@I2B)%/)0#2M,42A2U ++M%0@4M($P%3)(0E*1`4#3$#543(4003`C0R244I12E(4#,(FA=)$B4$0L034` ++MA$BA0LR@R%C;Z8AZ"4H(!^7,L6U&6NA:%NQUN!=$HV=60Y<Y\*HGWP@1`I15 ++M"(,*2JTP2(T(3`@%+$K0=\4,5)MMV(!WCAJZ!&RJ>*#_%^2!_PJ%=1K:*,&) ++MQK14F,.I(2BHC5)I=@S8V)/RN045S,5;1">GX[TN@B^Y%Y[S[3@:34%053DA ++M]L>H.O2B`J)<&.A@X\BJEF+.)6D)DXGN6P</1DR'U\*4!D#V!"T#!-#21(1( ++MDRQ4M)T"Q@2@H")"(0H\?/#K-Q`#<-CT/RX:Z'TP01['O3Q'E25\F=)8H@PZ ++M1]IYE$,%-*Q30I0D40,5-$E$$301!133%1341$A%$45$4$140$2U$BQ!%1Y` ++MABI)A`PXX4ZB`Y'K>%`^41LIP8*=.>E.SJO=5!:P+J'NR;0T&`B0EPD2`^:\ ++MP.88S1JP@H"FS5^QT9)K9_`TJ<DY`C>C.XAD%.$Z]'8R!WG</B(<<5(*)9FG ++M&%!D5L(2CFE3#%.Y6E7*'8)MN;!G`?1I\?T7J>;_=SO^.A?ZOU>GIU*<5B*. ++MUOI;+#####'>CTB=T;M;N&<K"WJ]@]MK"K^0G\K^X/FV`/W6'VI`0$K]_'WJ ++M('+'0;-!-:^4#7YI+I4G7?;",D19D\@V@'@SE%8&91HF7G?R-G%B\J0R9`4F ++M=OSFQZTLOZ-"5D>[SP#<2)"F))S%O'VAM^(.K5K_(4#QC](A$".KTB:0#ROC ++M^@9&&861E%I`D`=5,1-Z>(^$1$4E3P\(.`%PZ*$(Q#'@8_GKIITHXD/[L_(' ++M<1$W%W,`)RWE'4_K0D,HR:6DL83!`!2#<<IH7\HB*J^DL;\!@HO[P^UY_8Z= ++M:T;6^!J6*:L,+WT#G18%01$508#B$^/K4"LE3[6>1[X@!?N@+F*^3H@=G6'X ++MP',.1T/LQ(<(I/'"81P9'^$10`Q4X2A@XF2TA#S+9`.M!Z@/J$T@3(S)L2@8 ++M$S)2MUAU[CXST1XPHJ':'&$UX88:[--![7MCON%+P&A18+X$7[%+44&(9D`Q ++M#;3]A)<\M:.AHG4]IVTFX3!Q$S)2IX0G4O&':JLV&R(I8)97*D5;AZOVIC,@ ++M(9%<)0$LPDC?@D9XS/&$LP3UB%BQ3>U(P3%L76^"E+M(QBRS3`53J'E+BIS# ++M^VG)^5/KE5V"%Y3<M:!8@L0%1A$3#I0,'L(<0!A?P#JW5(4])(I>(?`.TV&D ++M.[#`[K,Z:=3FQP0<,V9&<M%Q+JEX`2N]9`X;WE\X<_PBR>`7-`-(=I#]HN#G ++M[@PRQ>6L1&4BFT:C8ET['RX-P96-%#(0L2T$$4$E=9>KH=1L/A\KS9R4_<P- ++M*AUGZ$/RE2%,&=IHQ0E-`0K]X#Z!]I3UDJ\`0'C'8'N`C`QPBE-HQB&%J"8" ++MJ%B:5O;"T,1,48A,[&PD"F4$P!HY&:0VL,O9.\E(NFHZ0TM%*4@8@<4324`4 ++MJ;82)`B0:7(QCSA\P-B+O3U"$!(=I[O)W3IUD,'09)1L>9U\>QZ%Z&Y:]B][ ++MV.HE066[!\WQ`GK\H[;00$BP2(Q(4"D$/94Y4A*"*0',0_PBGS]4:9`PC85Y ++M2TH4WF#J"DJ)X3E*E`<>-4U,)30U@T&T$21#25T#XBY[HVD8)/)TS)3@!$VQ ++M-T4Z[3L0Y'OR!NLFTIDN60%))!10^2VEH%Q4D4BHP8=J"AF>#"41+PMLWR8' ++M^ES!24J>;><YQ!Y)H6F@CD9\A$TB-#H3I*/(`:B2G^E+I8B/#`]A>"U).MK= ++MJI+M8#YB4>XL2B<"'[AE?W_WPT20>U[(137@/O]5,1'0[>KTGI`J:&6HB*@J ++MBBBHJ:#6O1C]\"Z#":I^KAA15%3)$%?.,<KJ3L[DB4_24//"E?]A`C3Q-L># ++M-&X$MY1U[A/J>/0>3+%/BU52^J`#4EP9EP&P8FFN)C%(FB;^`SL41K&(R-B, ++M-,SZ3ZIIUXN#QCS-D3S$GN>'@L`*"V[7UZ55B>C"[2!K4UGL>OP5=;LH_=NT ++M?+_$?I?Z/M+_1,9(4TPCQF5]UCV+_`LZK80+DZ#%)K>K7>EM<5?VU]&ELLS< ++MR`S>64DBGAB';@PG8N1GB%?;F[R;J^/KE]6.JW.E/#@QM[+Y8W/L5L46YYM8 ++MQ,;%8X9S+U$G0L8BA_`3C;01$$8!]`<_ERXA8X'Y$T@Q/Y">A4NC8K/M>SP; ++M^.ECB_7GCMEF:\/.H<7[=<M],6*0\/@H3\B10]?RLBZWZ(T`@J%]V)?V+'\? ++MJ/Q?4<PRAP8R;:CC$H>::AFG67F`TQ#+L::2=0T4A/W*X'#)FH6H/4L24'\G ++M?RIW]8`B/OU_I"0^(^$!A)`MCAL4*(OXYE9G\-`VRDMX9=KU@IC3WT['!<#) ++MA#F'%^=>M[F4U%US$<Q^`LD1D$&.06E?N8^</!=K$-#@+(J8/3>"[%5`[],? ++MF)_<Q\\!18"4AE<T8%3`U830[\;=0^AN:X%`/GH3V-&_7Y:OE6Q3'NGUR^[W ++M"6.B&#ZZ'Z^?G]_H88[V>_4CYB].S71]=X1V?7#.WAX+WR_Q^POZ@$?.'T<_ ++M/X8KZ3319[:$R,EG(XG@F^<S,)8R*,%]Y4.N08_(?T+$T:A?PMOZN?VQ\*9" ++M@/YH\/F(?85XMYN@HIG+`KF@;W?.LJ5#ZE2.%2&[R8=;>KP;KE89]_9P`_") ++MF&S_"GDG?T<]A)&,&G<Q/,48LDOV&/H#7[U.T]DR3"F#,STGSSZ+[3[_M&YD ++M9-.`78Q45,3S8<1BS"1,D#$'3F@>[(%`[;#12U3$G1,,!\0]9\HM!MNB3@$1 ++M,Q%`_LOV6&P1M`0!*4+5!2%)2T/R8,):.V?8)\L*!A]:O">>,PS$:*B/C5:& ++M<R)?+*LL[O77YO%71J=9ET1UH$E@BB7)C;""01I82X\3B&OQG13SKI55IG,` ++MN%,\+;V1"YF8Q4/Z)TRS+V),!1F&JN1$7$A$9DB?WFW?!53DBBZ`5.')HHB` ++MB/8VB">"`G\6,G@)#T4XJ!YL=Z+2(=+S]7]X?=`>^8,"R5#1$\C#"@B-_G>C ++MMZ$/'K5[..L#W@/;YTE%*E`R0"%34*TL%1!)2%-"5044`%$0E(,0K2%4K)`$ ++M0,0K#)0E`))-(25`1*4E($0,2%!$E+0@4(44*50M)2E*I\R)H4H*2(%J)4HG ++M8=(@3"-!,Q)2D0+^,.D(FE9J1DD30N24\DW$B0FHB><MR]G=]^/;V.0G0%Q` ++M93X!3J>0O`!\('4_/@:'J=!\B"B(/![A/>!7YI!`YUGF>L\HBN0H&!!R<!@* ++M>2`<)*!IHE*AB2B2!@(F8@]V5R:6(*!@@@FJ&"E@A99F8H8@AHB088HB&*:( ++MI&"FD$I&.F0PD$R4P8A,G=E[S<1B2"4FJ8EB2:8"(7D#HHJBJ*6@B0D)HJ4B ++M"#IDPG0,FDS`9@LQ-0Z*AO-AZ$[D[R!\4J7B^,>G6><B]B]KV2Y;['J/(JBQ ++M81,0R#2'J@=.S@/`F)>\U/J9$9$0160#DS/>>,/<`7G8FT-(&&%230I!9#7( ++M[&X'1A(>HM<[=BSDOIAY],#I4=)7-]C0!TW<4Y3$U0>PZ8;IGA]971V?"#U` ++MWP'(XQ!U)%=1XJ?!\8_F7G('8-Y\,<:#;,98).8#$'%-],7R_(>"Q]?SM!-L ++MR10%H=Y#HB/R:D58D"@#R$OLBG]_@[J!(]0H/G3PJ8Z;^>H?%U(BS-:(2A#! ++M0'W?.3S#,[5`RMZN\N845M4O*Q8JYZCR+DS0R`S"=)O`ZPDU/5<+$VSUU/3; ++M::<A"^]X*F3<*G+NC(&27L=\;Z0DX9S)G(&T1APB,.F[ZPO>@CO#4)W&.I9V ++MY:>'B9Q%3)55I^4PTF!XRPHC<.B.@T+CHVX\.G3,O.YX6#?#AG011_)B/[8Q ++MQ]2!UP5$1!Q9'+94T1H)H0^66&C4C0WN9@*9H!&ZF5%C=EIJ!#1*8BDH.`0: ++M(FFBA2Q3,*JH**MA,S-35KK5-:H]$\RHA+S-_8_:D$$S>NO\GI\KW'4<SU'\ ++M^[]I_'R_F_E?+]MZ#[_#N'!5>%N^QX?)<EA+%S[<)M6XFG@#1CS>=-T?><=R ++M\='2+2Q$1$1$4U%S#OEU``HP.+5=F9BTK"J-12&>-LC(:89W,#(4:TB$=^4X ++M[2B03"((;Y4!5!!J9`I*0*&(H&EH*$*%28B"D2D`I$^_&%`3\`\/J?4H-2TI ++M)O&("5Q%1`6DE-@+85=(Q8[0\NKO4YS`O.FQ1VVQ%YV_'8=K;PB?".0.=&.K ++ML*JZ/2ORHF45RN<]R9)YIO+-Q\O[L$\AVM*1)2'W\^V?BN]\G<^0[7%RLDB8 ++MA'^KC_1W`"LO>4QM)`C@"20E$X@R*.!NS'J'!!$B9F4<TF!QK@;=DE.6#DZQ ++MPG%V,0W^XL>!>0^KW61B\+-[E[`8-;0('.#"BPA]<UV*QJ'\DT.WW./(Y-P1 ++MN0HO,M+^NH"JF*BIBF(BKZDR0$LRT,2D''[A\<B,0+5`B46,$(0"E,2I2!0O ++M9\=B#<WX,`.3OOOP/($"D*$,I,T@H="TQ69F+<1A#33W[.P%$@N".2+V!!Z( ++M78>\W('H0'.9!T`4(7O"^_<$4A52BH>H0TJK-\Y#[0%:#K&@8&JV*)9S9"8V ++M#)B@HQR"</BZ,`0/<<ZUG(L#%CX?5^F_Q^G"4G`,!_.02<,_TO^3^S9F0$ST ++M6.NK4VAA)%AUU>[%BV@U4`D'PYS`\@RC[DC,S:\7D-S_6>U6QH?=CWM9"TIV ++MU&2NIH?%.]T5Q!^>Q%$!0`\A:(\WG-T[TUC5)G]"*;W=S]1MSK^)3.8;!_#< ++MGBY;V(^-Y=E(+F#D<:*F+.18V+X=BKI:0@BX;&G2R02%)TX[AV-B[&XF&CZ% ++M7&Y'>9BF$JP$P8(INP5%*24E3%N:F[PE*J)F+@""H\S>6B%)`<X@L-Q9-Y&[ ++M+BF(*B1JB@H*(B(HHY!R7BPITA\(>2S`TC4T`4L0R1WNX\<9\YCSS/DG4P9% ++MX9?-54/X[9G&90&4+RNOS6EG&M26M(>D"ODW-AK=J.93""*YX(2J0F'NP51N ++M2<A/?^#/IFL`X40\S_GZ]_$-?S4?6Y3D:,#38.!N=SRFZ"'>BOC-B-L?B(!S ++M#<;HJ?E.G@.*`H=N:=$F*0JB',%Y"KN)N(Q&'[[C<B(/`V5X>"(D';+"%KZE ++M_$Q3>JB=+B2@:&2L@P@?DF28AIX,<Y!H#(>\YZKK=3ML3T9M/&C2[(#O0`5M ++M00A2<#A4QBH>??]BX!QU@N=CU)5*IIQE%2<3)42D8C"%IAA^2$:@V#+W)3'< ++ME),%$*((29Z3]<5+1E;%L6M397<#:&YZ":(9DKI`8[A,LA^PPFMH%B[N<V4S ++M$*FZ$L)B)$=$(40WEYK#6F8FF688<T?<N#(.S@]'0;,*09KHF$'CF:1'"",L ++MN5V2`B'I[[+T'.3`>]CN*%V)?%S?`AH7;PTTI84.0?7>\U'+%.N]\\.P?4X> ++MMG6LU!G.]PHZE0<9G][IS1I4%H0LVVDS$'Y9T:-LZ*.<W(/6%[HN5D6VV)^6 ++M0]O;/O9V=4,RPOI76YI\FFQ#^A*E3U>I6!A5#X`HW3D2';^VMV2&'`,2*Y)E ++MIKZ37&.(BCAV29HF'*>6B8.*Z[H0L*)),8PG]'FN=YOMG9ZI?;&P">!O-UB) ++MR3RL%5$O=#A!*,04$<&R#ZC\Q[Q.L[#]<0957+N"GEP"G?4;0O0-:T:6I*(@ ++MBI<LK$KA$,%,HJB(2843]=ZM#>J5D=$@D99J011,4PKJP,KF00L6IM4*&7Z; ++M?G[R6KIBJD+9F>QG,2;"1&$4""`A#5S&%%RQB^/Z61E42*!8T&#Z'SNQ(0[& ++MSB=[U!SP@B$@4[@J&TZ9B$W#]P_*?$'Q6MERHIJ-#!!08@#V[$&,@#G%()JF ++M!BI:=#V`';*,7<B'I`Q5B4`W.+9'S'38V\I&J=8S+3N'B3WDVE.:CG9(+S#[ ++M@V6E8Y<0"I7!>\]I1Q?1+9%U\M+PEQ8>5%04B@-H:M@52Q:HM,-`'OB]E/2T ++M8J`V*26!HHJ8\L8\>_!//R+0I++%!KO8+-Z&]Y>77(/1FYV+1#*E45W=`-^1 ++M&*IY0W\?)<,2$8G43B,21-'$^0QSZ#@4E0Q59K0`,`=V/@>;*>(*1#^&0."A ++MNX'2G[H:IUH9S&\N!-+_?%CLYM=W.1B%T$;:#TF31/9=).,'9N#VX$$!SAQY ++M,S(T@0EL.]8,5%X!/(>-%4QX=,$\5[*^2)V,,FV7PX1@>3P)Y-=SF*(BH\J. ++M7C/@3U6R:%I"B)6*O3VZ$3D;!D<G'29H0XFU[$!I01T<\4<5!I!G%P2&B3"0 ++M!R7R`;8`"D`Q"%,2*4CJAJ@*,1Z.Q7.4F!`['/-$TL6_[!,%_%L+,(T>)5CH ++M3^F(4-`G[#!](H^/@M`?H?MKJYCI(F10`X%F0UGC4@?#;;C0=NQ^V$/!X1)S ++M9V896$E"*B&0)IFBJ8AA^%<,$F608E*0PG"0*?S?9[UN?:[]?M!/'-T<C8(C ++M)WREM3;$-5UDP*9FS8:B7,`!`2$+@;23ITN2S=&"*H!9K8:`46_;&)B*H%Q( ++M'A`X8+'+FC53DIEF%28*A#AD%_8C'?W%(#'WK%:$8@4"'`Q&!2'8S,P:H9@" ++M9)@(@F2)TO`RCD3$?&XP`\0"PB]8'!\D]A1W7MPV,$X$A=S:)(1#[5B3Y^KB ++MM]#XS8Q\Z7R],\J_PV+@X9:C^2]-!HB!5!`:6Y"+"/^]MS,*G'JL'PVQC1K% ++MO74+MU<@E(LP\):"!JP*(-77X!H$9]#6I"!S1J3GQ&B:N0R04411$RK(,U,A ++M0'*#)EL14DJ5/V)IRE2<%0A;D<)!JR@H4`*IAD8;S(-06P92Q?B18HH52#2( ++M)B4$/JG#ET)^#?]N;J%)/QL@E'Z?=JT?8;_&[QP>?@SF)Q@D9,EG�]5&9B ++MA0:G\VV+7STF52)&,-@BC6_EFOE);6J?PQ.R-<M#3^0>P6QLWNQ8N./G*JP; ++MNQ<213F?4$3X2*E&Z^?/;NPM+M0I&76^MZZX5ZYGP`?.GVN$-ZHS[)=3%2L) ++MSYZ"@1X)OOD^%UG646-U6]1Q/ON0\;QNU_'[C^?0>#_+U>_O!P31BHJKB<0_ ++M,=OQ\80Q#T^_D,^[S#S#49T9+R.HI$G).,BC<S,=&-=V_>D6U(V^P$K^EGG@ ++MJUC^IBG\_?CQK\+32"(J,D"@5,))D'']*9BY^Q>&^"(H%">JBH.E<Y^\!`0- ++MOT.Y#DFV0804G=C@4D0UD_M`,:*.=IXPYNS9`A:3(7-W-#U,UF(XCIS31AM_ ++M=4TETH2%I,S[N--9D'ZYZ98.AD[A;/.#[8::$[WA#@1&(K$=4>Y4OF.9J ++MWUL=OVM\>Q%,'Z)VHVP6:SZBQ+6`4115%<<7$H0!2#BDD%%#H#Q].6\X(D\H ++MZ/6.H'S`[Z-`Y\XTB=9VD)7!8A"%4]J)>-"="PGZ0S[\</$:=DJ(^_6P"1W- ++M&:8IHO%SB2'A?$*?'S[]H2L<L?/SC.X<(C/#L9T?`!VJ"`0(]P%<@Y#,I13U ++M!#G8$@R%$A^/\0.3!;4&AA]^E8'^F!8P7D4ZES[^(0X,LCOH3"*!B23!P9?" ++MQ:ER@VAB3NQ!Q42?/SEB5::;F2C^&()Y=]*GF[&*"B0X,8)*@T#UHB6$TY,7 ++M<,"E&8,$FZ0HL'4OA!R@.%;.-48<D8C;APQQC1/,:0Y1M89MBB2QBS()24<= ++M!4NL*]W"!M!TA$@4JQS%ECCJ"SC8S68"@(BDQ+RY-Q><QZ#P2BB(""2BB&#; ++M!M)@I*M156H)W`,IG#*8&>/EOM6?GC![(.<]>N)ZZMX!T`8"E6E*4'8<$A*5 ++M2D,*4G>=0HX<WL-0XU'S?U8V*6BU@1$9#]@JI8B'/A1H%$YC,VG'.;V%F0W: ++MW(S'-*ZT$V*UWA\'7J04!R`F5^WWD]XTW3)D0AG($5$D(M%D115Z/CX]<!<, ++M[_>>9E`.<3T[R*T@1I`MD@B"-S@[G)!1367ST0'\>Q$\(A$L2&FJ^HH'`['% ++MU@ZP6X7@`IHO`'J\Q]B.8BCQQ]&Q@QB?/1-+MD6L>QKTR*MJ$.]4%]11,7"+ ++M<"%D:5B..O@_K#V#`P,#PAY?+P',/YM2&!.D+C(6!)#^2$^DEB$N!W#!N73I ++MU8)D:2BF9(D@A(8"DPIOFE85*2.YPT`*Z/NF#6!$$!2I8S`M:IA:O/;BBP'? ++M%2Q@P?J[@_T#YCP\$[Q7@D12Z&1I>TH(&)8D@HB%J(GR2(AD'!U5P]G!#&,K ++MF4Z1'ASHF$/Y#"'!]G\.?A\UC$?)+P:!F2F@CF=&V"@FJHBW#CQFBKA&MFC` ++M5"C3`-#GG!B8#KG@.I!9#XG`ABV">GICDL@\$-1)QF&F:[/4];B_Y1U8+J53 ++MPQ41`\D*J@#*(GHE+*G@^DY;2OUO,>WU<G1]'I]52-,JL)YI,U6)]@;W?Y`4 ++M\KZE546E%7V?Q,"`%)(0#!<J20#3,T,";;YGW,U#Y%-T?X3<:>%(OI]G=LYK ++M8/>V7'9W*LA[R([0TFG")A7T&-UO$2KHY<L"?CNKZ/+N*BII"A:2D>3L5D1Y ++M!@B_&(::JJ&@*"B)0HH9J***I*)DB8N5M;6SCD(J8O5RXNIH1K(F-D5)*U1% ++M$7-RV:0MD&$MH_U0GOCBXN"BBU";9$[[.S3ID@K8$5Q1>2(H=HX^$=%!7@*= ++M+F+1YS/AYST;OX+F;R?,97R$QI4"]RC=DL8NV-[E%R6MBX>3Y+'X%H9H*@[G ++M3$=/,!I^X32+KLWS2J!,=R%\;-AMZ>=9J1@YU@ZN:$MRPCA7*>Z:=`ZS4(:` ++M'?F5T<EJ283VT34--[2,_2U<QS#28IF3189M0)WDE$28.$"3`B".[Y#00XX& ++MB[M<$UK-:'3BY(46CD++`I<A164IN>V]79U2\)F[@FB=NDS-'("3,-XCK(9- ++M:NBE*7"9EY,N@[$C4.80YCHT7T)FTT9MWKK-`H:P1`QG+24GT?''B^_:<]!@ ++M=U*4_&3"<P%X;G\W!X<@G!W9X-ZAZ2E'>V&].G*(VDIV&L,-8:AH\N"]"$D$ ++MQ`A2`:>`BAXQ:3,8UE41]5304D5UV:=!L&7A0\-D)HD,KD-LTXR#`C"?T<Z' ++M-9J=0%#GR-E,U#>6%RS+D2=ZT*#U-#F\<@FLDIFDGC-E;NQI)E@ZA7,4Q<N( ++M=V$L&$*@N1)N5P%TJC@*J"9$#6-RVE3IVU+N#PMMV.ES\=PO'P\X)V4Q*=B* ++MJ0H*0BYC.8[<C<=RP<,/4D"BMDR(EA<<R8D3L4,ZX&G&=DMPD!)W2J',%.LR ++MN"2%)C;&)0L-]=9>!L7`XDR"B@I)F35+A@P'$N:"+36:H8N3B9@D4D73_%05 ++M2U0.*@,.G),VA@U@M(YXD4_3123#W$S)X)9+)5%**%21EGG8J'=-+%&2\'5C ++MAI/`%-\WL^M,";(29,-H1SYM3CG-S4D')B8*<<R#).6$]-W,J!W,[_3S>$@= ++M7WQ="^24H?4!Y')"(6D-YWN(+1<KY5S"'O_K6=G-:0LP.1"45\&#'`5@C8E& ++M.Z;LL'#7L8%%5*MQ8###QE55>/IF:3,HQ-M!@\2^PLLM,$79H-&](<X<T9,5 ++MFAXW.9V\'T`57X,?SO*YWQXI64:$7&*_HT%'Z0RXQ8W"J/ZY6>1^@2<<PZH# ++MT*:*03(1(:Z7-)@#O!`S+2&A8:`1J>U(%H6&`WE@)@7$E2-NAFL=!8%$N08! ++M(IFSB=F['9.D'2YS'(U*:><,\0*):($I0B$B"X1C3JS8&`AII"($P&TU'I1/ ++M^F"`(A0=S8MM&(AO-`Q^M`WG2\1H(%\!`I`%,+Z*HK6-S')%.5@93T$54[DR ++M0I$-"!0HE*G82@I&CL"!0:!.PO+6A,5"=D+M91[`4/)%Z2/&8H*8,2=N<PK$ ++M',&'D)UT`89NU!H.PIS8(@3D*4J=9%Z9,8Z<.]>!')>XP)HY';DI$G9.5%(! ++M!LO8![*'1,S$`QQ=(1S,RMUI)+9"FDMK*8-?1[7G'Q'/B\!2'1M@@D(X9?8$ ++MID$]G;G!U46G"$#P\`#B0''3T_HLN\P@>>6>$H`1(Z*.FX&8[U.Q2-S%L(4" ++M@G7O>S0;[=UTWG`R!%%%!4_5F"@A>!"F`B$DD.1HI*2@&@DHFB=&>F^N&(9\ ++M)T%"1>G&!B//[TWI+Q(VT;;\RX9<4EIT3S;)85(4A-RTNVFHD&[4L(9@<@1@ ++ME*;`W2=!\:>-4Q#<Q3!($L6(R`H[1\O]FW2A'$HM5%]BYL3$=2%5P'@:VA@` ++MJC\'X;V9ZT%/HJ@VO1;+P+A<@?[_VKCQNL#0[!.9*9U)1"F$-CT18J&\"4B@ ++M]>&+!1!$U,B$,J#0%"(#,"%*@T(I$A,$Q4$`M*501`E)2-"4@[7D533(&'IY ++M[:0],(.\J&PA."D(8[@>?GU[!Z`ZAC8V8&4]B:_>7LHU\[A?'1>4GP1HZZ.X ++M/.:QCI7=V3C$V/4F(/"%]`&!?@#M),0Y+W0A$J)N;@]8[[!2H02;!LQ9N0K\ ++M3O%?7.B`*H0G,S`T)9D018%`:,L7#`P0C8(9$$)08J^V=H'>C]J0)D!:/M@T ++M)+0J'4J%0B(H]3:TEE55%VA7!HQ)J'P-&>`VP`GVV"Z@=35)DU%,5$4)$`4E ++M"4`%"ID`80&64R?K0XV]PVUFM9[BIGB7T$)0..\AP;^X&P;#6444NI4W[^U/ ++M(=_)`Z8-3W^8P')`Y`U$@'D)JQCES%BM'(TH\A2/ZF3A('>84^Q(/6\8O6!] ++MP1<ZX#PE/+IW.!T.1S%LGH@?J4G2`H!![0Z0KB%#VY`=M*X@L<7GM!Z#@-_' ++M`41&$".H89!Z(<,\,%TP(F5V0H#(,D1()Q8C35801&PQ5$)%':E\J:&ATA40 ++M\G;!-=),$@;;:-N%P!I0`X.A)MDU8SAJO\,[AX]*))(P1S@J`.TAQ48I(S@B ++MC.Z8T0Q/D%X8<P'$HCDD3X<P:*>/-RJG3X088*\)QT@<1`&@R$%/D/(XE!L% ++M!0XVK'`LG-M)DX((#E<9`QL[G-$8TG],8'O!J"DJD8FEIZ"]4QI/!N\5\D-$ ++MU=(X'`!]DPP'@4,"BAWPC`'9I29'$@%"I2*&`@.H$`<2#9?`A,>(_THZ]/#F ++MSK!Y`#V%R\%(D`I1B)(24P4>CA7$.`AE;I(.J-)1&3#X08AE(FF*F!(:)Q+P ++MW4YU\^ZHYZ3QW<N(-)L&W/V#%>9U&(,,`'4$D@1,NA(=S@`3#VN=G%(1Q)]] ++M813X1D/9#ZCPP5&,<B2?FT^]G@]4<LE;U&GZ%[U"!$@=2H!A]3]7:OXU%V^U ++MVFQ<W%\;7W/&QZ?CN(W.SZBMQV[W^MWG'X]FFS39IL]=:JVKENQ1<N6JE:Y; ++MK6+ERM9J6**TU22BY/>BZW/J-(PK:]+^T4"V&&9I2/?LS-)36>.9SQYF#9OT ++MOF_9BJGS)H:4H2BFD*(J(FABB:IIB*IH:OF_?FM5AEHYR@S^_[T[AMVQFM$H ++MW^?-HQ877U#']MF"&W%&,1C%=L<K%$DG[M(^?N$S/1_>]E<)"F0SB$"PD"4: ++MG,+&;(7Q>Q.0!/A]W%4-*TG(.&Q6*A#0$0G(0B0T@?=!HIZR_?!PW.?ISB5` ++MR3)-$-+5)"ZBNX-M*&MFP&Y)[8.$TZ0^"YYEU]H?+E[<6#08=LLS1XD$ZUMI ++M/\OK,<:5-B02$\@YFG@;P/<D1ST!\6;OD\;V1,)L9<2F*+EQHY+5#`DF$"@0 ++M.$F20NF$Q>KN+[%B&1:@689D.S)+.@S`H"BH$!5"_:^"%7D4BE,%EVRS2>0\ ++MEZ2:`Y`;XP14&;_$?G1+YS!+[=RQW<&`H8B2'"2>7[)[O?ZK^^D;+G/<Y8DC ++MV2,J&P1D`J:^FBXECD8K,M<4@1M,I9J13P*Z'KO8O$T)K+%Y*@?U)P7EH445 ++M!I=&GJK[)XNS?IS-/L)LGLSU*_<7:TJ1/>!UA^]?U!Y.`.`$ZH8[=OP7Z>!^ ++M#&+1,E)/O8N>L1^68&FD@-H`B1H':!30$8*A"&`*>2AQ3_!DR)T%*2!3L(FE ++M&(92$\V1@(`F"+<>`*P,S#@!R0Z@ZU`.S?E)G[(V-C9B.SMY"),H>O2XH?$` ++M%"4!-S@EH*B.2B\+Y-U/NO:-TZ@Z@W!^(OM$\)[79V??>E=Y(J`?:JJ(#"H` ++M--*:T(E($5*Q(1#@AB2B8J65B`*2L8@JB*_"$?Y`!;(]!.X'8V$/Q1>.OV>^ ++MBE@)`FH0]?;XP]J,-7B1$94-MC6E:!%H!`ZP*Z`*!`:%6J%-9&")HH@@/N7O ++M["=Z6/YE)9AY!W)W.FL"0#H!6`]9_,@&C77LJ?.'^V44:!*0B54(D$HB6@9A ++M&B"&EI1I28%0F%&@H`:"E2AIH0'K.L!](+WD%*4"N!"F2#[_F0-I5:DM'>]H ++MP_S`DSB!)#@\89^98\"X8A"9?(V$'E3K%ZT[@([13RJQ\4`0GV/)6VB`W?02 ++M^<;*V>EPP*1#A#D`OJ*#"T_RJ"`2)\'MI/>`L&"B-(X)BLR@<:&(HKLL3V`C ++M`2&Z^9BQW][T#VMQ6)56J!B5H2A0I(@4Z29Z`>DBAU01%`ID(?`@7X?.3Z:+ ++MT<`R!#(=V`.;#%+`8@T)0:$TT!0K!"%",T3B$T$0J7JQ0%'":R!)PQ(DQ0^C ++M(8K32E*!\?Q!9$^2";W!X3[M"'7I@>1$!2Q#8Q_;GXJY`[('@6BAH:2)I`-X ++MI#6L<N)>NKWY#J7DX!ZB1[SF]!F##OB@B3\*B0H263T+P,E4IZX;SMZ0?DH< ++M-3+$!$H%<E19+.K(4'R%3!?&`+B&I[L;%?W@'7G6&$/O>*1()2AF*#J[$"2) ++M%]LD=AX>L$\1`(<0`ID!2+$(4+2!0@7C[`-^J:%'4*.$AO^Z]HI5!'H2JA0R ++M8*@#%B=X&$$!X"<%#`2CZG+\^?0'43;@C$#G%._-*'RR'@'Q9,/8$ZY#R'@/ ++ML?@XFQ!62:WSWI!VJ!':*4#<V%ZWR&R/$1$44A%`%*M3`GD:38`\'P/:#I2; ++MEBN30,P$V,&F&L!&G9<T3M27V,/]I/&N=3AS"GL_1?OE(J/V@38]S,D!%($# ++M(M!5)"0)04!$$21,0U01`;=8=CP#Q%R#GN\`9(^/C(?(+VK@=@:*J)6EJ@%1 ++M7(T@!Y489)E\VG/@UJ]J];+DO!('*,/7OL'#`]H*<+2"4OC6BF(3@T@7L;"3 ++M8NE$8,NBDSO1%@79FY'!$#6LN7MBU[2)<W">7-#AOFRL8L00>X=:)*?.GL\( ++M#QQ=VF/;N/`]4!,S-)2%441%54<"\3'<<?@Z.!+1PYU>:"F@)9>IWB45%7!4 ++M'71*H(HT_FITZ)"+YC$I'DZAOG'/`NH<8D^VPN)K3YLWS`G,S7@+'HDF="B1 ++MQ06$@FB#TG#B3W':8C[A_("#QQ5&'8'6O;UAK5/`;0<![`','K<69,DB4P*? ++MC@Y<R6`T1`1)`:B-_5:!09+`79L:;;*L//:2%F$BR$\391/K.I:9(#`48E]! ++M_W.M^1I\2@^HEO#$PCV3PY-Z(R3&'!@DJH.X#7G#YC[I]D'.V77=D-)1_,4S ++MH'UC]32'$<40;"^9Z$B-(#5*C0E(M-*E-(;O4<@W7R\'L;\CF',#4Y)!$O#% ++M!UL4GGW5]VT*')+OQ\)EF68@EF=TN":=+$\A)GGD52=\>;($*?WU![E>$`@< ++M&C&4#DT(4)I*]WQH=H&Q!"<!`N)^&'(Y8Z/.`>I#@">[*BDF6IEJFPAR,I13 ++M4T4DBBIX=3CQW#Y";B!B_**G`=QU)Y_BB__$$)$T*0P`4Q%5V*GI-^Q,"C(, ++M""&::9\#/`/*)Y4`X4T[:<T1IQMJ8#!)3B"VS&V--!2&@*)(VU;&<12:H-J\ ++M#^`'W[0$`;.2:HGUF8:'W32?*T-`!1$$2(41`A2E!2@4)$(*GD>4D!$$)>"" ++M=Y\9S)V"Q-ITED*Q19K[`ABQ>"(E8+6I%JM#D(`?!"$/HFAMIE)',+\27LXF ++M068AX)`=X]EHZ(8)S-&1%O\+^;KTNM:/(3UPZG%UKL_XO8/TV)C^1/S/S+V% ++M1(+EG)\O76T*0M:PRT`*E"K$0/#POA*9$P6&8R?*FBAR!&6<`8D(YU*A];XO ++M@ZGPI\A8*J#2"T?OO.5J#1_4WR=.EQIU8B9S%6,Q@V8QCR'DD0<<:M&/`HG7 ++MHQAI_M#&#W8M&@#WIF#>X!"@,RS(!P+<]\N6B>P,""7$0DE$,9\B-`<B.&!N ++M9=";+^7\K\T'W>Q9T2P2,X\XIQTK`;RIJ-5]/BHL[0;?;(_;/I96R]0U&P(T ++MUY'C/W+)$,?CV6YD?L8_85.=ZJJ-?S=]=2[$#R%^G*T#*'7P*`^-T^R54GW- ++MU[\%56-1VB",48@@Q&3!Q]C!"QD6M+&A123H9S2;I!4/:>O1[?FZSFTCG4R* ++M!H@:2XZ<H\][PCVQW1Y#_,7>.B?[C":7F(21XP'D8:$H&I"0A81(YWQF:R0R ++M8BDV\*L'!_L\KZ..Q*\9B47'CV.=O\3/;MKD9;/QS(L1/'W#8]#T/\'I:W;? ++M?,VCU08R(,N.(D0*D3+!2&9HN&V$K`O,8#ML?^'#`&8L&"!@R!]2=1U^MP6T ++MJ(BZ5_^A#_\H?8!#X330F%`%!E%;`&YIL6:"(HH76N#BY$#(SV07R\K>_O[( ++MEAO\7KDM[_=X98K'JJVVE$_R,NEM(&A(:"=0,'=T'LREB3<L^RPK`BJ#/8/X ++M([;$7H]T$P=))24DP6Z+]V=.LAU`7]%P>>HF)(@(@H_LYG"Z8("@@AJ(JGQ# ++M8S$O^1AS:YR(R"FR'M9*;\^^V^TA[]<?7#](GCX@M08@!!02.,Y*DIH*6DF/ ++MR1)Q(6V`GC""7#=+^5K%X9XMOS%U+""/0#DN=5Q!UFC.1CT0#]:0H!2TAQTB ++M4D(0H(@)AJ(9FJ/A?%VN^^[@6;;FX]B)MN?LQY.<MG$J(Z*N48^?)@N`X!^+ ++M(EI80-`G:$)#I"CM;<X%ODZ8WH/'T;]VX)/$SI8)UDHJ[TY;,;!P(=DH%%(` ++M3-%"]^PG4+`GR)#3+DB!1$KULCJ"*-A,Z+43&(P'"=.G6/J]0AX9RYW"%3B: ++M_C!!#8(L%I`][O\-0^%(N!]LGY;T.7``53VP/D6<-"T%DAQI2$R9:%+#]N9: ++MNI%T:-:U.'Y2:TJZY6\"RAV.!F;;J`?N;.G#`VYD0KF!4"8M1(TU`O4"DVS> ++M+\))LQTSLW9&C47P0'^'8DY[]:CA8V<3L9V,ZEE[@-:'5/S4;X[QW#[XZIT< ++M"R@4@4*4S*$$E)$'7&$$+"%4!R,<KNS%\J'C(#1H*B?<CS8X9%8,_5L8ZE/_ ++M++1Y>6%L!N!<NA['H:(@]19!!$!Z.9RK@>.";T@8.?)"68B#=>!XQ\\9X]M# ++MI)(@V+0G(\%%%'O\!Q>P?6^V#\@$G45?A:L)/BDDT:%P321$T5*NB0P!UX'/ ++MI*)ZC/4I1+'!`$'ZG`C"2&/SSX1Y*@:\;QE!,!1V(9A>HP?&>LT]>^YGY/EG ++MLO4Q6,9N:VQC:2@J!8B<22Q4%&!*P23!!(%-`U#]9:Q%5,TTEW&"&"!`GIS! ++M`I%B*8("(:"B24F0F&$(4*2)/B#!"%?B3B#]Y\(8.3T,:G,@(,&)FJ)P->UY ++MCP*KJO,Z"EAD'N$6X)J6R4;T0BIJ*##5ASF=/D=DX;43?FL?*_O/B7XP6DPP ++M=9?:A*B?TSX4B!3UZVV2`@AO352=B>/6B%51P"!)<@:G'ICDU-PDUJ@Z9C,N ++M=`#$\VVCYIM[<X01],,SSXG^)>YKU.@AI1>9RR/)[T!21D]5`I*@9=O.UT9' ++MO4!Q\IX\=^FHKHX8N5M[2[]E,NE0RII<O/PI-&(IV7_F3N.T[38/#4Y_AZT< ++MSG]WM3F<QPSF'R+E\L6*;15/[4_HU_$?.?D:6K<YK7V?=[.U%DX^&I<H0N-_ ++M8-`&Z[(8;?+3/E\C?XAQI`Q`GXRJ80X"01Q\C6^FDV%+C08(:_:$'"J@$*4( ++M2N'HBB?I_ST6/D?6_C[N645$5#F\OVOD.]T.FV.Y_E^7144\O>U^S,V`/MI7 ++M8^\C\NT`_3D4YX"?K1%<H0@H22OA:`D`OC[0.5E-K6LRTE_PG[ELJM8L_F&; ++MK-+100%A_/*)4D46?K$O:R#_-%_>;D`:'LB<AS6P9JH0*!*0*6N7)>0<FA>0 ++M%`4`7+&+^U;G.W-!P:8:A4Y`CN&D4P4)"`6BJV,@5!<VJ68UY%<VM/`X0KA? ++M3(DP@%RCG+&N8P2A412#06O.6<TT0$D$$T$7LSAZ/F4Y06"S4>BTTWHP9(>X ++MTA,\C!7X_A<`#I/6?*]XY%TVN;#/O&+R<32%&VY<DY/CM:,;88B(Z04<D*#B ++M=C3$1,1'C9F)D+'\W%=&IB!LN4:1P&"1,0EN5',;`K5C*.5H"0DPIE9E8BN) ++MD3'8,$0BQ)PSHJ2$HB:JF.3Y'%YL140PQ!`4=MR''(S`<M3!JDTT&P8@Y",0 ++M0,<,N.8"6!6CDX:)*9;!%Q4!#1,*9$M5RPI9B(1RCMV[-F['(Y:>R]X4&F/[ ++M]UZW((.F=&@#U!P@-.HH)2:A2<3B,;12PFLI08@(A8@-G&8#11MSB>KG0-2D ++M2M$>!8\C0%+";$)DA^-@_9?6^&G<FC@A'OU6,2A(14OH]&M#,2$2'7!&90!% ++M2^@VKAL+%$'VZ&T/)X3$Y@32NMN<>2(?B0F)H#E6@#L?Y:")[TP%)V:$H:=. ++MLY#?20/V9WD[#YRCOI.[%))VD2)O]V3+]!Z2X@>B%^Z-^V'X'H=3`\"#U`Z: ++M:*$E@0[W#/)A04F()^7!-!"/@_JQG-B"/8<_OCF[+U)"@>(\0/8<NL%.B\") ++MRH@Y#H1$X!/[\YL6():`2:^)_"9;AJ&#`M%%62GQ#0.)@DE!HP_0`>H0PX>4 ++M4W`=0@;)"!$`4`E=I(I]\&P'@]CC!0'+,1H(ECXR&HH(&)#XE)+4DO4Z-3E` ++MY4K!\8R0!.SBH*F4B0I))0H`J(*0)A"JB5#\OJ%Y*>!VB/QY$>4H]7&E.8=# ++M`_P_5#A",0ST(RBG4!X'#Z#G`,?PX!^\7;!(7@Y'%9LFDM&22T1`8O,Z&(B= ++M`XX[%$0-$54`\D];$<JA@T+H8B((YL'.=C2QR.U<)02IHP<FJBFJEX,;1<`@ ++MX9P:ND89A@@>]C<1:L3:>#P@UD#02U)R'3!L38%)Q=YS'!Q=A*B<3)/0BL7, ++M!MEH"G<-BSG6)VT3NEJ"D8X;I59BA4J*B&5HAEPL`E!,AEA;@B#,*4<"%R5D ++M*(F2$A`B1A"D*V8%3,J02Q%*."UQLN61LI@D(R!0;"5&QQ%2BVQ-3D9936K( ++MU&$YXRT#W];"2/ID,(K#+$CR'Y"OY1DRD0[[C^#[>.H+5'0/QA5_Q!1N![(% ++M[",57RGM2X>R"1C%#S&F%@01`KQ#,S$_$?">\;%V+$%"511ZP?51(FM&@T51 ++M42E"0F]_?_!RYOXM6-L$\R?XJY0<QHE):Y<M309I\)>]E5$V)OK#=!?.:=P\ ++M/7H-$U.%@0!32%#@P:/;V3BQ!3$G2`Q`2:-8S-1HT&V&(8A-)%[G'#!I*HH) ++MBD"(7R#0PP0RI/GVP&C+">/J_AWV3;7-((P*2VQ<E&&:F\(5"BI0H6Q4D+DF ++M+)!56F\"W%P76JCR1*#M50$8L554>N;XQEKKN9G<;QX$CIVK@Y""<UDR<((9 ++M9*:LL@B9#(W#H>!)$)$E^E4Y/,28"JJ@I*28*[P#,I+\3,88CJ?-V)VL%VNM ++M":EUCE1";$=8+R+H["ZYUVH8X%YA'B$8B)0*H6$0Z<;CF)G@3P33$3"3*]@R ++M"XEKC(=TA[2TJ"L&`Q%]I_-+6?400RF,/M7,>L-&C2/:;Z"(,>M\8=QS\,#1 ++MI43$[X5?QV0I$-*)X!OU:'81`W$&1ZT(]`@<N8O7!Y3GAY.[$WD'@N9=Y[CS ++M7S!XD1.-<8D2T&4H0"@+**1!%+E?'][+O:U<+<_(>,_E"(BS<)X>)9RWZRI. ++MENWB-%YX^6]PT,Z,C/25=A80,8K%++#"]B]F`"R&FL/?%8-*FR]`H[!-&,D' ++MO'Z@`_,@2%W'$-E`@.LY!@/6;'-$WWHZU#8/(0_D14035-)(P304=C`T(4`4 ++M#LX:0[?(/S8SW_'SY)F9DB<C2Y`E*Z%0H5(2)(8(F/,&:#T<^[R/&?"3)'*8 ++MP6(T&PX><!P\$H'G"(PG!)QMAV,`];H=06C!#NTS%VJ^,]1BB'40>0E((4() ++M.]HJ53)!I5H42@H2A5H!,W9=@>^0_'(XV/6*29AKP+V,>+&%$R).U'CL(@(Q ++MUD/<,#PA`F^$`>@DR'$/>)]8@;2UQQT*;3,V%T3%SD".&C.X/('E0F6#[PYJ ++M`^N!ZT5VMQ0D,`P)T0IO+$`AQ.F#H3H#A!B+C@H%TM*Q+5\K$PD2)*&(*F6) ++M2@HY&M!HB$*7I)N.&TXH(@H%U8QI*!,,&DVP7,:'2ZH9X6><Q86,!)H4S22R ++M#GC^8+$4`$0<0@8X=Q=,3&0QJR;%?]I@K%QBJ)38H<5K%#$$Q$&(&%8?ZGX\ ++M.4D'4WH(XIA,;B"2;&P$?U3AS&#AQVV8B"-/GY?/@^/>_J?@*(02H:-"5RL$ ++MA7V(P)&3PQ#YL.,FJ("+A`YB=C*=0S$ETMK*(@HC!QXH\I%**DN'$"`CCPH- ++M#N3R.%3BI7&Q:-$3<M#Q,1I.!8@VQPP6%W)V38!B"X'#ADXXDR;,T)GFN9QK ++M6X<,8G$U[+3#79K:<#3#`;8(BFKMF"&(8F8B8@K1JANS='IQ[_P\YB+FS^T, ++MZUOKHZ.%QR(RG3PT:!0/2]2D#7?1[*;SGT?/1SUVQ2TWH>OY+AW_;:1_A\SJ ++M=%4,'\/9_W^A^[\_U?2^EFQ;N/?:O!9#Q;BEP=L]%&S2;.!FXT6;5ES^*'-5 ++MYCB8<=1)"9HH,^>HT2QTQ]!/1QD6I&Z!U1G1&Q55GC6Q225GS)2T3ZKXX$=> ++M)G-"LZO-)0C:U&9;^82QP.=+=`,EE>`RS:R6O;%?7K,Q7?88M0VT;1D8U2*! ++M!Y!T;/580OXVE@M_HH%F+.'YGG!Q.[G_NG3<`D&LR52?R463HHH$&4UA\Z?P ++M_0+/W+;I0XXA.6-,[("\9]X/TC)M)C_$_[<'T:/<#^LHBI(C\D;_[RG$PR^M ++M$MG0)=Q8ETLBDWG0KITM9I-K6M(G]O\WZV*P^,8TDOOOHN9SIF",O_953"%) ++M#["5D3]RP2YEB)_>RX0.?NI.7?U+'',E?P'A`6J,E8ER0Q(:E!1!MAD@PL13 ++M#*)-EDAA:E$J;K\NZ12,EC^*ECU!MI@GI2!9(?1]!RN"XOFTI$2,\PI<TVNT ++M6BP2B@V@&J*:1^*9'\?JYI'B_F8Q=F:D@4=)&FY\?2;5-]8SYNM.CV$IIBA' ++M7K:^&?A+2N=,'C$>H:GS^O`##YIG.)I*@H(FIBJF@HCZS6B)^)UJ_KU1S@G) ++M:C:?<FBGD+H(J&)"A^(W;`]V=?WW=%/V^,<!%</L?3<^X+YA;.68DB>)+HB2 ++M$LBV$Q(UUJ+T^V[N?&^]ROV<A\W#F?AU\_;?>H7IW[>A4#!OR%MVT`A9)+L( ++M!0=M*#JAL"#QV<K9Z]Q#T$/5AG!R,`<E3D<'@<%4[[LH/D(Z6^^QV32ON$^V ++MXX,S&+'BG^K>O7=TQ.W0K:BV>Y<Y>O36UQO?G71)1O\$*4D#S:;,5!F4^5NJ ++ME(*90HA%':@B'@LRNCRRN.)W,H_7S5SP;F42?7\M?RM_@(C\T/QX6_K%/]6/ ++MO\U]1(A:PF/@K7)NT""H](_7V\;(*7[J;,6+2^"E,%1\7W<]_'7I%Q'VLF/J ++M&'`4#[S(JF"&/L?]'^A4CPU"9P17>ND+HFKV4T0E#N4]ME-GOK?6IP;E0S$Q ++MXLABGXA_!7PD+")HP/+:"&F"=,]=)G<-!MC(3CIX6G-DRMEJ%!Q)"_9*C8,R ++MA=SGL.HX-^6*%U(;@;3^S+^QDBB/[#\,#YJ`^U@H?FAOI%_&42SEB)$MB?Z( ++M>H?H"-)F8<0`-N8YQXP^1=Z)<DL>T^[XI<B&@\#A[/29SX'AYU#OESOT-TYN ++MW`B3T7X8_;_NI..K:&`KXEUQ=;<7B_DPAL")&SX5]#DAFSOZS66W&3*Q7@B[ ++M(-BH4._%2F\AU-;RD.-JJY,6MH8/"R>669KVU*@G;:H&O02_CE,(1EN"O3>V ++M-O#/>\QON&E^6&N^9Y&*L>"_<.2/@'</ZSY@'10^R/?5C-'7.D5\!<_7P?RO ++MQOMMKR6R$Z471.F4S,CALXN-#O?,\7&5^4*LN98*08L6?AX5.8?"P3$984K1 ++MH2B?A^ON0CWAF((?:0CR0OOY,?N`>'[K3A2UPV$.D$A]!"+P.$9-$0\?T)HQ ++M%G2%\C[X)H(VKK:\R.ZIJD[8ZV`XZ&6O.>+8F,B]%&\7QS"Q=EQM:BK&^II, ++M48F_?:U^K;(Z;][$.L'/7XWV;W1/24*?M')TPD9FBVQ,CD8+%$&=?94)8$EQ ++MJ(U1X1/#;OTS.Z),]$^$V;CFOE2%-ZI=;;VGT?!T?0IWT<8+7LUDIHUYT76C ++M&!Z$UKYD-Y9@FJ>!1/D1GOXB[>WX(:8'T^LQAB4JR&&/YP`1'!C&$=>*3M[F ++M6[(;Z5-:E&M<38-D\^_AQ/'R[3Y>QYO7W.[7-'L=7>NI1$/7WG8]\(5B)](7 ++M8%LC+M<L,/-U$S1RH@5UT+280X\A#+FBZYV*C!C,RBA.=:FKGO^U6-#&7C1H ++M,*!_E]8'XC^CU\:'\?R?X&&[^5""%./YVHN1_%O\UHT/`P+/5F$,'0UE6RFF ++M!:\/`M?OY:7U?`ZS\F-)^0D,FA(1!<_2IJQ4X)P^.?\S-"?Q2_(F/M_KX):K ++MWW'V`#,T@R[1B0O@U5HRQEU9E4$JQ;0N_E4\-C[4.']>F+!_L(5Z8^`";BAB ++M*`ABU]-0_HT,(?I=$2:X^5?KOGTA(7#>T5X%Z-^0]!H5>@]0F-4<<'L-[^JT ++M@_@;X=[D#[Y\X^I@@(*TSP24T`6?AH$40>K?G#7MT#><S`UG@T>.%B'P==NC ++MA]=SC6H='5OO17>\VV[.1-\6<%PF:=:J4U1E8.1DX5M[+;W.VV3-;A6XC5[\ ++M&)V,7F#5.N0=30]@O`0/,T$V0[_'OGT*5`?6,&=;D?V0XR$415G)7J,R,P]J ++M72*E_9CBKD;BM4L$Y*]+,Y-!]<ICJVP]<6':_I>LA_FSZ_ST^.&[OZ1'NP6D ++MY][GOU><7+$2SLPTD:83K%]/'?4I$Y7I-+$RR3$B-(PXD+(#QI5P(UEM!$5] ++MQ4J4UHI):&NQ0)P6H)48?4>BQ3D;LJ<3Q9+#7YC@_R59IPC\Z$-$KX8%&:.= ++M_>VUR2:JWIE=_Y&LLVR,ME*NZ7*CA+94:0QQ*9?@OM9]YBTVMVMW-N.6N^-S ++MP0J&#?2]L]W(_(MNF)XWHOJAPA+LA-1$YOO.K\B%(690JS!!H,(/1/Y&Q5V8 ++MTK]H.=@K-/P3U:'G[3PF?UPJC&,?8P=(W]]BK%8/]W@X@""02:P-"(9DTYQS ++MGOM)5S%6FB<Z<8IQ>V`R=;U*S4E:M7I"(DYOI_S]^OX'=/)0,,>_P_$T\#9[ ++M^>SB^L]ZCF=/OV@W<B:-=[-[.;?O]]`_&,7C5;,_@](1!'BV/\Y$C/LCOP:' ++MI.D<)$LD?%<Z[_$KI5VY$C\^4V8^_Q]1^3/TI?YC\_B22/6C"^VV/LL_24V9 ++MX?9[LT2,IR>E%,=`CN!(BL,C/%+Z8)U]_LO>^94_$5?H\GGQB@S[XM?C,R\* ++M.F.MB!-C/7#G@)#!G43AF>Z6-H$4[W0D%%E<^/_ZH59JV3[WO`DT5.[J20Q" ++MJ4B3!.OPF5];WL^]\_2_JST+:56WQ>6+[ZBDD(:1@O82AA":`(8A5-)J/W!U ++M:&.X[A%P$.A@O(7D`1#2%H&(`WOS05#)RJ(A@*3ZIUGS9/6)L#>3Y2F')-AI ++M9DB22!V_2[#U.Z;H?;DXRT**MA30@#YR496`-,3Q.LDAV?B#/W@-$&3P9I1S ++M;%=N1P4/%S>:I$:`.!H!()G$RTI4A_E7H0UATG`N-3(='6&M'2%ILH8TALX3 ++M4$AN3+WG.YQ<FQRJZ'?VV#JYL^C.]%D\A\CWZ!3SGL,GGQ@-#T@.F5U&-GI@ ++M,"Q,(R5[LB9O/M*`P)=\(H08XH@W3NX^.)Y%W'33['Y%B*B(@A2`LR@\,+"" ++MVB%-_*^=4ANV(%[U8CF,%`%:-&CD=GI$2=GO,-(1!0\"<$25204Q-$1)@EI* ++MEE045%8?&=`*9GQJ7#60ET.SGL5?ZW\GO34.TIP$.@T"4\_@#H=G;X!1:637 ++MJ26UU6IS`EK;E56N6<>FI;ADV@@B;)-*%-)K&Q-4;K=T"ZCX\(A^!#08?`'E ++M6"%O@L%`P%NP^LX*GML`L#SIP9O=)R*.`>2Z#0!4>A`[7QG?"=9*UYQ9ZU$\ ++M+2Q9M1:6*M5E+GTGWC;,(9R<<*(:E]2B@2U%ZB`Q21?V:GX;%F4XX9HJC]3& ++M'1[_M?9D_$#\F62`<'K)8]YK6A&R",8L;6HD#VB9!F&,+[[I[PG2'AOE-:!X ++M4TF@:TX.#0A%24P!`T)'6)ZGUV^O8()C5HFW#9.;DX.=P&2`OU^O:_&A3]CH ++M?'N]Q424+CF*/OCJ$J4AV:>[&&VQB8[;#UFR;,3',?3*>"\#V(P]G8%.!UP= ++M&4VV)21#^2Y^'K$@H#&CL?'90+.!]W6$.RHS%_LMXSU_%_,[="!ID""`HB"D ++M4.TFTI)J!IB2X"BE6^/C4Y$\H-P0\P!O,5%!4$Q4$5,AHR$4"TI32%0$>8#J ++M$V=)11YN1HTQZ<<CF64)*@L1`N&LRXDF,8U(,$,[-RA:A04)2N2E%/UXG^[] ++MWX9,1_=;1->G&9D\=BQ:(P3@KTL0E2`2FBN+!9LT+G`**5N57\Y.`?K-SYS! ++M<,SR.G%HO^Z(@=2>0U6@S!2%^V7$&(T6SGF2V>2IHH$J!B*8KB1M@=+%0O[0 ++MFC0Z`BO!PJ8:*:8IE&`\D\D+8>0&%#"F"*($>J$#X^AL%[@T:F(2)HG'GZ]3 ++M7V]:$?IRF5Y3.NB,T2;W7"N,@#M=:14R&76;&;-38CA;,-[NCFM;.,QPBA,8 ++ML<V<"Z);JV_!JFMDG<U>'6H:.&][1@$A,7'(#F[-9AK8[-C"AN87>.2[I=B' ++M;R2ZFB+A;2K#<-$)873K+O<HZ('#2#;HXJ2^W.3![S8XD!/C&$B"`4J#;RD@ ++M::6MC$CD8.1`%78&B$$^`[%WW`@IH!PS-E>QTNA*:"D/H8H^K0&0^:<E:%*2 ++M+K.L###1B56&&!U'>9[0J;&#_K!WC`OC.Y0Y'BFET'UBO(E0ZF/B3'2JB(/( ++M?W?.*7B^D]"QMAV`R;P,#(IB&7T=1".X^0&X#E\'^3-MLD_#@4H,S68_='Z_ ++M(N/KT9_7]KUKO2^]"Q\[%D;,LH4^>/SWI[S012G\)Y_[+*7^!TMI:;`E&&CX ++MJ6<E@O:T(>!"4A%0$440%-`=XD)553,CVNT%>%AY<0PWW*I#7D/(#Q$[)053 ++M5,0?48IAJJ****J*H`EI*4(J]W<G6JB8DB6EJJ:/:KP#G'"'STZ=)DF$*H*^ ++MOH.))P>&U28,\HFGK<<@AI[)K=U@$2Q%"4$*"J"@H"BHOIC5II<C1Z-UDS]E ++M<?(KWT&2PJ8Y$4!Y%(*R;+K.LA5AGT1;]42=35K$18SG%\I79AQ1$Z1F0%WT ++M8J&I%^>^%B@(FML\WGP`>6V9TSI`9R;<_'8O54.GPT:!\8A_V?V:7,Q!.M0T ++M-;VD$$VO18^7]3K>^5[6.;:XQI^MCJE_'6U9YXEG>UV2NVG=$423*BK;CZI0 ++M*2!,&BH)5+'SC^CMQK^G@]LS!E86?OR^S67B@@?87[D$K<<W/9D9-=7;ZCJI ++M[]>TV76]&@[W`#DA]B&1R@,[L'O%/LIIBJ(:I**J?NV+HM4I&Q^$OD]DH*+? ++MVS]'=DNS77'24J;4TH,1$PTL510B@IB.8*5B*C&"94"WNQJUR9Q+&[S\,].^ ++MQ`\D'R[(Z>2'"*"@J$<7.,<$3$=.V\D7$K'4@+F>R:3I.D([?2R7WFJZU*:] ++M/G3BO3#YVVOWMJR^,];G#C$A0Q+2H4K!R*LUZ&++<Z3*6Q-^M=+90NYF5FG2 ++MZ)9-P^L>4RP8*,L'S>Z!DUZ,EV8@8<-[-Z,M],AZOS3G`0('^0-CW@*]$?:A ++M"O+$E(0$?G8M,T+^AF&0*I"THF"*40Q&"A7[51+&0180FZK^33%P-'\\D51@ ++M*/@\$`HS1?`DR/C:V$,'+.BJ,]+.[H>%S4_7V-S6];SH6AF,BGFPOD<NQL(> ++MUUK?@(:F81P7#/1AZDR0.;3!$$ZIR*?V1&7."-16B#6\=T%!$=D7]FOD54B] ++M-2.<,4ZP48+PT&`#\WY$R:^-PC&A`_N_HB6%88C2$(\0OA\/*QX9F#I&@N0= ++M^1ZR.R6A0\I&PQW6Q?VN)`)CNX_*@+1-R)(!5Q,*HZ[%,2K`P.,^O?7OO8<Y ++M^2Y8XW`6/4;&U[<:V,R2`$J7YHYP:9<YZ\9YZG6-;XMJ&R*)G<IFLIYX,&+] ++M.MC/(.M!2L>&M,S+8=:@!V$(I%#+&)#+-ST0C\?E@*ZC@CFK1(7Y<(>*GN7U ++MG7_`;@A\!>H4'P/#D$*R(((&@?*XQP*0D)LZ%IX&)!@@I(17Z7ZZ:^+` ++MX%F3YH5"C:Y4F$639L<\;<]#0WTDFQIR7*],`HHL-]J"LSJ6E/&91H*&V8<E ++MC6V)F:<G-7U.FJ.%#A+L,$B4/S1^G&4KQ!$8A(_CZB@-,,'.SJF)9>:-E"I& ++MF_<DR!V1:>#\?IC)7PQ#'AYTK>`Q9%V6R>@5%R(<D,)!0HAL!P.GX#&7^XR) ++M!S+C2*J8"`)`V-#"@2I!IB9^I'RE$A7*@!TA\RS0G\_TV1P=G0D#IZ9G@\G7 ++M0YZ[E#:=]/3RBBL?O&#M%0R$0$+@?*[]N&C<=:'^-"P?%8P+J-R)H7]CA'01 ++M$"J[]_.?S!KZFJ@4(SYUF<I0R/X(L5^A<I!3:^XWY0T?5Q/\0$.O"JB)$'RW ++MJ)*36?4>)@5.KJDV0)L\OJPU,SIXT^D""^T":F9WWW>/21N<F%<CF=.J3#K6 ++MK@CV,[F['$WHAO>KF(YO!^>CJQ@;'ROM?7M'A\SX*QD.+L;OZT3TC^+R>1^U ++M$8)QZU#(H$5[[A"`-_/3&`D6<PRB?E6P;TON:SHW`=M.!P]-'B[EFX6R?!\M ++M[-&W+8BDI)!0T+=H[7->A>6.^E3([:F@[.DL4<NA@/#)MKCO8*M4&#%B!@0W ++MSV&K[XW;4YV+L,L-8WO?L^=:?.'>O4R_?S-;S,UH+<'8M;2K2VOAD8PXQWJV ++M8T'4H[>=7W'OTX#K>8F4[/9^5@'S1K)1_H=-$5\^U[]D!^@_?>B&1Z+5GFJL ++MOI&!A$#PJAPFAQ]_>@OY\_&/'\&!T'$_GQU!U#TB000,""2B.J"I89S$YJ2Y ++M^4@R3$#[V=!%CYL<CW"W>"@:%V$-+.F!NA`D20)G=F!WV+#\02!8:MRPLIQI ++MJ:L\154>JV,GJ%M[^[XWF9@!G[7^6/^?]>>`[)QMVP4&,2V*G9/5,>JB["]6 ++M;W]AB&A'72@-A(]*(N$3[;&J7NRR>%-3/!4,A*#(0\^HX/(QO[!)`782;&#F ++MGI[+QD'*ZTB9C9HUU225(YKK-#-;>?F+]WT/S&D:H:%B!B$:0'Y^L'XCBU)" ++M=8'V))UCJGX9RJ0B(B8BS"B"!R0A['VK$I1/NQIY\M]L.P+[8*<<:#@([R%1 ++M[(4H>EZ##(FD.L^C^L_&+@C[@.<OI.$]U(,R#2D2%!0A1!`O1\<M#M$D&D%E ++M(#N%.H[7K9B)CD080]<TXCP.`0^P]JX%_QGOVOOW3';W';EY`\C2OAM8R/4K ++MSQ,''Q&>:($NZ97$0AO)7`J15$J9-##NP1W43Z/,\>[(>IX0^IU):*ZDF-8- ++M4\+A.(T#C8<=WF#)I''4FAN.5@XFX-<BE(;*HIN(FY&L5AX4-=0]<;JZB8I# ++MFIR.$ZK'2NGQ\_N>IHFBT,[<S>IG'.79*4CD(,(ZNC1U13:/2Y,*Z+WO0;DX ++MDYKFLRFH)J`P^H[T''`..`)LFHV^%&AO;#BS!N,?$`H/7(%@@,6H`HN'E4:) ++MA!)%QJI,55"Y0U2+-WF6"*-VD-*MC!`VE@Z30*A"9027YY"T*K7690"HSKUA ++MJDH#FAH)!P^'ER.P%W%/8,58BM0\#,`B;CGMIF)>`'!D$K!H!UCO#NJ:(7J. ++MS7INK-L-Q4[)[X'PJ!4,V!?-<U$5I6TDF8R=T@330V-KAG!.!))ML%!C$*+, ++MAO9J6L)626&?://,'F<Q>.PAO>#'LP_('F4/5XGP9>P_7OY/.X^QE/?T,S)1 ++M5&!\D`^(T@_(R;YRK\%[]^<]S0Q#]5:P9,4@'Q"-'>.4]RTN@B+NM*Z@'K`# ++MFQCB;28$$.A[-"\&MA._OV;.]3J)W8F"4Y(2&\G%&L/(!^9.K'X;G`Q)0D0, ++M2'8#%$E%-Y9`HH)D")[#I:&(+$,]L'"?0/0GMA0I`J9120F$+E(2020PA?BM ++M"'N$]Q/87%GVB8-?#!\^W7F9YSL`Q+#E@&X2AU9589@8&>1![9/6=NJ!'5]K ++MOOI?S=TQ?-'*6C0=II,S%B?D2(--F7"S(IGG;,3@G22BRX/`R&)$,2,8R$/V ++M2S',>SCCJGWHO[;$`H2*E`I0HE(JR17Q.4%*0$2$:4!_OX$-4@E")2J&A%72 ++M4J%(.A=*"%`!H%T`-*!MK%61H44I06J$4H!I0"!61]J6!BD"(8D@84)DU=#H ++MA[_2@YV8%S=D[:DWG;4<V8FC>9>>'G'<V.;%.W(?/'*&M&D*U(Z10(GC`[,P ++M45>9<ZK9!V%*0&DD2%I%NPX'/,;%ZHM<S)`2*$HM(THT4*U$JLD3(00E,;*! ++MVG4"=#R\'I)"/YSHBH"L8[M7M&7`0U`<"2@G/*>#S<\H!EE-)F56J0"-F,XI ++M]HI`/SR1G2.LS)*!;+D_C"R%,R3,D!"H]R'"'\M"42U(D1Z.!Z(O)R8BCB`> ++MP]O2(--(RV9D&B")H&&4`=#Z?\GQXUSA"@>OK$Z&S:'4@5>68#=I8"-@&$T) ++M=7-%!HL..R7,6YPH^^_H<PBY,6_E(2=PUD/#4]_@7G-SQC0:H.580,*YD4D: ++M0R0Q@F%)%`T7%U<BI"9$A(-3,0!A."C9D#X%0.X,)/^C8B7X7T00>\YP/C:E ++MQM,222`:-%,#RQSAM'OOU]K';DNA*\C;9H)TYF<2&*BA"AHKS'J0^;SQT\PF ++M]8-1)-!#1'J'US1-,/K;;/NA@\3*AK1`VS`0<!10F[8:A='Y8.%TVH[&+R#7 ++M3=YWB])WQE\\4WSMR\N1Z;;.29BC.S:QHQ-7=NNU1)4/,YJFFV,DQ:QRQ5BP ++MSPVBHMS<E>YFL:X$?!X[-YK:R<D,:S#%!<4%%Q`J5-Q[WOL.Y.0F/)S.QNXQ ++MK3HWFP4%1QV2DB`H(*8"W3(<)(B#IM0Q3>3H,=.'$BI"*.9Q,>M1IN%JJ.V8 ++M*6IJ(8IK;$)\2Z^D]OR=`R'PBP'@?)%\8WA6>9P5R,1$$T$/&*F*)H>4_5.L ++M/[-FYV\$T32=K@H5P"9=)P=USY3S"(:=6%FL2@:7)EN1ME+K>LTC<9!<(+N4 ++MH1-.":#XWU\'I+F=&'`^\/T!%*01Z%"%9\@UX!#HIF&I(HBIH28JD(@*`2+L ++MX@I(L2B&A:1`H4[-(KB.2ODKU(4.U-(4J$2E(R2TK2I%0@5V4U-$K04$0T*2 ++M2&A="%%(!$`T4-&FT@7,GR%HDWX3VS.1X'</(HZ%A[@'8-C<2*(R+]50M8"D ++MQSG'7%WXOY2M4!24$%5105$051H/?A`,U$S21)$CP\0>ITD*M8#Y-@G0ET9$ ++MFIL"6;`H>I#ZD`OOH!N^Y!UH1[N6*X$A7,?7P9(M%3Q-K]0;&4^)GL35,WUH ++M2S+P,R5+$.&1P@2@T"Q,DC"0I4'\U5?I_09<94E[VM>T2*QF@G!F'NXIEVR^ ++M@/2=.?(-P'6N,+#T^@W!/040K2!QN\U=/(:0A5#7AN.`F,!XLL;6(Y;'B<(# ++MD-+#!G/V7ZCL>\?',BU8G5/KXWW\?M8IDYQP0ZA-2)2FH%O?LGKS2D4Q4DQ] ++M+9[B.1MKA=M`HWO8%*'?<"^D\-[R9D1!(YUU'<,];#."<2M'$VXR)HGGHT<$ ++MSC@$V0"9Z<N:!\FSK6=EJU>]&N:0@YD-P@XN;.%$UDUCF'JJ'&9=%.:(9J!" ++M&N$#@DPX"&9<R?((%ID3/?@!2,-&&8@%(A]-4UJ%<@XB40(!W-)1P/9VF+"F ++MVY0&$(;9-4X11<S$ATD+0,RT.LGF^_4*8#&S,E$%PU:8W#F;G-DQ[3TE\7D( ++M1`T1[0^5]CX/LP^OPA^`(B>?;<@[C$=VV0NX=):,4CX_?'Y0D0%!H="S*]53 ++MJ1>7LB.R(8;['"N(A>;0[GBSPDU9)3K\=BGD4O=A[+ZN33Y&J#1^/Q#H\`!& ++M2!A)TYX:9I/`C(;D:VXN]NN^*M,<]>*&+-#G!MC+;6ULBV0P*>R80M=45D@K ++MG,CG#G(,JBA)CD^<!3:8QETGFN'Q7UMWSO=[OVV]])O_9=O>V'RON]W^#L>: ++M]5\_]7^>60-;QP)RZ`O>*JJJJJKP,8QO/LRO&;S`PW((3=_L8$,\(&X5$00W ++MKGC^(@K],OA*FK-:;#ZT_S?\+84YGVS]VE<9DFC?6BC-)M"I@./*4I[')[/: ++M("BX9Z>!Q0^%*-B@-T"CZ'VIBO<@:8-M`'W3(&B`^25@>?D\K_H9'A*\QBK; ++M3IK!86L-:,@JCF;AW?F&A=0+5032TH-(IL76@%!$+O)^B?;+V!H.X$]&/<?C ++MP>J/'(E18HQTE./#O#O3`%-TQZ,B:.F-)+_8/Z[U$PP?5<3`"?`0=@BF>S7` ++M'4'[S3].4HB%=!*["F#'C8$Z,A["_>O4>5@G)BDJ@KR'G^HE`F$!MH:%/X(= ++MH22&"3R6`H9_[A-/::-J;]I[;EP,<'6::*C!3&#;5H;!E^],<:"E-&&O9A]0 ++M_B<D:6))D>0'+RHT0RP0G2P>1[`/<'A$N0,C("&0_EHK]Q(%!GE]P[%$@2(, ++M4P?T328S!_@D$?3#6O)Z&$2BA4((H&"$8A!7T@`1W)@.S[=Q-!]Q8256Q[I` ++MB@?Y*^G;>=\PB_@F.+_!)PN^3+UV1HU$GZ@A;]>%#P^R)U,!PX.#^BOL/;Z> ++M`LRW`OK`O`-)=$1HJ@[C,-[U<Y@\W9O7>R^!='QQD,P]V+O>AZ\YP;AOMP&: ++M4V]+V$&!O[I'!R3=>):1F(@I)Y\V6)#F0F0G''OO/</6<A"D"8$*ACL&!`+J ++MH)-[#G.`?C-LI[N+L54S$A9.2:DT9A=YMJBYQE[=@N0F$)T1$YH]YS'D;B'F ++MA>&`3A>HYIXCD(F)'`).Q@>M?=+X.#O[,X'8OY6,"%F7983V"E!4$M+7)3=( ++M##I)(8^<X?DF8!<:H)82AH),3BS#1,E`;.&P\YQ_G<5YRKI?4&AJ?,<)>2^$ ++M!BEIC$Q5]3\!TFA/`$/BF@-"%*5V@=JWNGC`/;]\998HF"*@)DB;F'^8X;'Y ++MYT.H(>G5X2]A/452%!3433\@L>$:I<9L:3&-\Q@XZUB>[C%,FV"J'A#H2%B- ++MC&P:(MLA##MB(H=4&#!2].?L878LR'6H(REL31K<0^A[GXL`O9UCR3,3D7,B ++MPL:<C-#N'4`0O!*0<T]0%P!Z/$6=!+R?"5.903B/*.$\^\37.;7IQR.U.P8Y ++M;9*)7FX5ST_[RQ==83J,):'_>F8Q6O@#^?*,64VS8AL49%%'*PHK,,S'*1:4 ++M.+9,ZD>B2ZS%$#)I7CK(&2."62B((0B"8,8*&55#2;^E6M^CKD;DGS_<F8:2 ++ME101!+28C&L)CZXW@<.G[,,#J.HPY*0J4GA:#1@@0J9(DV<_6,532E=@#W75 ++MC[VC'O[MDVMS$=R9$H:6A(BJ$XSHC9#6-LXQB`K-'.]YW66$ML14QTCDG)SS ++MNX#Y>!-',:/+V1U.XPZ"A:3OOS_+_\)YZCV7SKY,;@4/;5\@AR'JIT#9)/\M ++MG.D,5,%,,'V#W'(K1@.DAXW^5P88)@D)HS&3$`>U]0,$T!0E`D)@+L['8=IH ++M39@#I*=.L29?H]"?/CXFF((`]J?=M][6:XF<`<06`HC$9%&(AIPSFW6:UL6K ++M18YMG6ML*CS3B8_*/FO4<!S#@(X!!P@9PHZ\!VKQ'A"T9"CY-JRY#YC0%@B" ++M&Y"^I+E:$FTU!]AKZ5Z9U>%#P[D3T,\_=ML:@S)WF)9C$G_(_PD1BHIWVPL^ ++MQH?^7CNF_6_Y&DG)*.+\C:%T,/,P'/8CCB9.-071:?Y'SUKY_Y!P\QZ0T^Z8 ++MF4E*47>&.B=0-!,T?S;-,10D4E$*4)$"J@NH(JK'1Y;=]R4B29M#.500[7HE ++M5A/./.QT=4@*\##GTE^9^$;?#][F'XA45$E7GV^G3(S!!D8Q$U=/5^E!^'78 ++M.2&!`4D!(,22LOWD@_YOF`QMI_MTX[!V,3L')^B,`A`"%/Q*&D4IH8^\\DH' ++MZ5#G22!I8N]*""B>`<1#AP6!X'`,PXB$)O,B6R(4R!\&`.Z,J<GG3ITZ4_W6 ++M,D(D%`5$/80Q`3"LP4%%1`3-#RL@KVB/M>75HW%25.68J%`+'D?$>3M4`/&= ++MA'9S_-Z9Y5#$1Q:4`*4()B")3D':P*\Q!^>3OO$A$P2';#E*2I!(4!,T<P+H ++M9.;!JA`,>/K^QTNCR+B4$0F(H^UIX;1C02'@B9%1`J,I[I3=*JZ%03_V/^1Q ++MF7$PIDGUHVBT.AY:/=\30>0J[UTHJ%%%3K58<7!,3A#ZC]S$2$$0>MEZ#*)* ++M*8HKM=;[7,@0RSTHSJ]HS[.E@L)G(FR9'=-?[+OU9GAA2HJE)H'S\"*6@>CT ++M9EI&&B:B-)D!T1=1-"M/AY)J4@=_\RB\9"H1*:(&_2T#]_!1W/X28G[Q??@P ++M_!=A,.8<'<!DCO*1(O60B/AY`I#3K)-+.44$H&$H&RRH/!UV(`:D4B`(@(E= ++MT5Q@W+<[3H3:URCD/7?^)-CN-M].$:4[+Q-+_4[V+.U&G&%U#AK3(P<@NQMP ++MQ.'H'C*1PBC1>48:@/0:%F9C:"!-%(+4M4?&T)_0V;9HT&G^7M_>>=S:MVM^ ++M?#E1[_K<>^K'Z>.]QJLOS#J)Y:*"+Y-$>CN.D][FCL::H3H)H&@/Z!PLA`4$ ++M<K$8SI7"I4PB%262*&F`@=HH(JMT6BT^E&JX*M:J/$-)G3]'/5R.>*Q1>0HW ++M(LL;95DHVVL+6P&RK225]]3VKN4=:VRT)J*BXB'WPUKPP3>OS:79%Y$0*/H_ ++M+0=[G-[]PI4<T0CQT.<-C#<9,6PCB3EVFA#=_=<-^CS"PT^]/@NSL/<-^INX ++M&QSD*>.1%'HPU`<1*J("D8@R0366[T3<FD!ZZ+J30:=L49($A4&@GH];13$P ++M](DDC)3M2`9BEKMU?Y'^O8B!\T"P?Z_7`21X_K_@[DCN2&$?M(6O)-W-7R*I ++M[L-1,L86ZWI\,=[2EN!+[H1.^]Y1/&B=&#\W+O.BB&/1:(A5$;"X)V]"/F:K ++M\4Z`^C&O>SYE,P+`L%0T98-&FYK>TO-IBV4MN8R3'BAE>BKU.`[6+YFI,L9. ++M5NE4P9B12MA`-&92^Q\NI\CD.93<V.J(Y=FRNN@[Z3!.T-.-(.(]>O!N723- ++M#DRPX=Z+X.%`&"13'#-8O3DF%R;*MAIPJL3.D6?TLZI\I-O74>$'$5<DWE-9 ++M[PT;)#?GY#HV;AM*./'1A84D9)J29E/;QN73F*8NV$<1$76>M*ZDA.-^!&<N ++M_&L\9N$I:5D/:9:#/K8Y17$V?.X9F5S4$J'N:G9?%Y)GHV_+HH:P<YX]<-X= ++MIPX.WX=GF;JAYI],9J$[%RWCW0_"^VIQ(;8!8%A"O)HTAU[:T\]J>CI->P_9 ++M/?6GGF>WO(Q5IR$OD<C0;K@]XQYMBPQ1,U(5`F"CBB1(5A7=UK1K4A[+BI?. ++M\X>;:.?1@ZG=C\\[F&VCP2UO"M;BB)+PJW6]2]02]"T,3"7>=G;)05O6Q->[ ++M$U>']Q\-^CA)V`:HQC;)M7-!26O>^/7U_*?<V,'$[!LRA5=-8>TFQEO>LK]N ++MG:95*#SO:_80G1T*_,!Z^><V#EXLZS6%1K1K9PSK]:!YH58C@7$#Q*>PCUB! ++M2H3(]1R3[>`""*0'QOCP-'E[#@%Y$`4/BD?9.CT&7N'M%2?())X>"IH@?>)L ++M1(D_P-28Z9]`LT(>7?")VMO_[W_(BZ357O+U;V#5Y#]7(_EU-.GX7E;>B$$3 ++M<<1H]"AIB(+G?H>M$01Q*J\?L&P'X[MICZ--/7KR3J9XTTH@'("H`B,*@4(4 ++M(^X2&30)];]:&(/!FBC0O*JB[5!2RBJB*GX_E_D=\3;M]SD,`\YM6&&'CQY@ ++M8L:BKRK**YFLH78+R['NG@@IU74:2!R,\TTLQ,<3)%''(^,@20HB@@*6((EW ++M8'U4'0_GR'2'7^0.6"(#(B:BJ^KX.7(GA]5'Y"$(R/KYM_/TL*1*M8V'']ER ++M,?85CC:'YW?[Z\^J/B@K@0Z"M+4._;N%YK@RX/5'"+#<:I1Y$,2LY<1SUXME ++M[1U%P@S,O"H7UM!%*MN-RFAFE<^9G"V!R-S2VYL1U:([1)NONU8\BI]2;$^9 ++M1'>+-*UH0F3WH"V>8P*8\?-PJ;7*%:5%5`TF\V7INN[#J/4MMY=US_W?!Z+^ ++MK_Q],_4OEWO!W2BC%LX:$+B+Q*>=-^+\KBEXK"9APPQ&<([)HC3<E"H,YSJ8 ++MC_2FR%#EE$SVP9`$C0$2BXSF89F5J3E"N>@.^*KXX=B3%/6]E>]]<YOU];D^ ++M3[?&KUK5KE-)Y#VF2967E_!PL+F<W,YGL\ZU:M6LBW;MV[5JU:M6K5JU:M6H ++M6(K':V;)9+)0ZR8`(5(JD=2*Z6RV6QV1<,B*MD29$N1)?E^7YD.OS(AD17H7 ++MY?%XNF0_(AD19$=\7Q=,@NF073(,@P2^+Q=+ACF.)CF.7Q>,<O&.7C',<QS' ++MO7<?'O8]]&9%_&1D1D7<B]>R(%]D1#QB]D9%]D7SR^R,C`D(QX\NY&1=NY#S ++M(OHAXXN9&1=NY#R]D1#QB0PA44`,M3+G6=7N9156U4VL58]\U^+'].8UD/\` ++M()6GH)_;20O(_X9:WJUX7,^GW]A(*+NE(HID(WQR-*=CP^,WG.MP=:S$.E'< ++M#?R*L;N"7?0P>^^Y_>?W\LY;_%\>+R;YJ,TZ_H/<_KCL$_H?:X+'_0?K\>%' ++M_H%7;0_!.P;YC_'#'Y_?<][Z'5EKO)I3,PT4L)^UA%4D)%G5"#\6*5841=0\ ++M*D);41`CLL74$_!^3_C=5]2'X?_-F;?7Z71;;?!?#Y-Z-[)VIC8TL:Q"LK.6 ++M`K2C/T3SY'F?*.!/(J1^_X,FFYOSOMY7^XV,.?HN_%J.E0"PUM67E"Y@([U? ++ML5KI2-FUKVL)^5D_ST_@=C$J,2=(#(?Z"'_!+_*6`V866*7%EEMQ%T=V<OTI ++MS_!WP%6M>^E45]:GG^:))?;2M!EE&%IN2UOF&81E&G/K9.YJWJI+FJ4@J"@J ++M@$Z@,H`U1V=F1E93VKXUTN+K;6%64%0==]A]KG_T']0^"C=L**K*X9!4'#AZ ++M"=I?_PTV=<BDLHUM<$9D@S/,9RX./![F<*PK*ZT,>N_3T-^]*2VJ6E+8Y'CF ++M849@@H?8TGAZ;R+0#'W&Y_#^K21)=+RJ"K='92\YA,]="-T@\8?FITN*TCT! ++ME#[GS=,Z?H^9<E.4:AAQI55:J+)T7/="S!:@AKK.LE>J4#('3*@D:GR=/"[> ++MJUII#2###@9F9=))D887$4PU1F:$<BWKBN+"F'4YYT:O96TJG%F,R)A^D8T_ ++MA;YQ@@+.*H*QA7L!]\T0YL,W8[K=E^=!R(Y1.L453<@,(B,:[!XJ^SLY)/,< ++M#S*,C_,_#^!#UJ>S%\.KYK]'T'OLB)7SV>R^PT#[%[H>I[3(`-+2:YQJF.T> ++MCD4SZ^114SM62BJS<4YY,M9ED!P>,J:-4L*FH5($S!IO_,?)_BNJ44[Y]Q%* ++MJJBI6J+J/)O#9HEE@3Z75L)[CQF#)U-+F9SFPMQ4J0@*)W%Z!N545F>!SZG[ ++MA4/S"B'E<[&\IKH':7*^YX&FB`LVVZ<M,>/DT?Y/QHB)7]..IAJJO:3G^B_W ++M=C>(+!$/W^6^@X\+QM!8.0N4%O(ER*]UQ9F:K-!6&9AW6<:1CD@X48`\[OE8 ++M$?FLB>'[?\'\_W_>;WOW?/.FMV[S+?&SORV5XU5FB&V:%F*%Q#S:,@1"[05* ++MGD&^VJ(>24_)US(%-7>\IZG]VQZGFO]?,P\FE+:KN]UKC!<.(`:!$4UO.&MX ++M5O@PX[9.IU+R*!`@0($I*2DA&;*>MJF&6@9LO"J/',YP_I%3V2EI4SZIY'GO ++M/]QS'TO(9<A71<U*P5G6&7W*([48C$%B&KZF89G055%-GRK$:WE:_8""H%]M ++M&/=>%M?>/,OJ:VP5'#AAQ=`KQ;$5+EQBQ!F9K;E58[321#.=$_(83EA4*%"- ++M3F;5ST?R_+KK/E+K?"Y+^#O6']ZA?+:M*,<Z8`X=J<ME5V$RBJ]G*7^UP]WQ ++MEC7/BC="9TD<D8_&Z;!Y=E6F$0W!WST3RPBB*@B*EI1?W?4;XG<:3A?9^W][ ++MF/;\+2\G1S'1^7L`&`"F[Z%?*.B;1_KZ?]7ZKG.W/^^ZE]1[GGKWD-7M8Z^> ++MM9Y51=!K-KH=R/9SX;>342CF<KWAO`PY69M-!(UXA66/8[YR:]5(?GRW\2(J ++M'?*%GGFKQ/3R*_6J__=CZK1>ZB3DU_-[SY?M?@\MXGE?<_ZZ^W\-;V-EW_5> ++M0XNWU&>P\ORGF^D\;I>VQ:X@B>9^W:GIY-P:).5ZY564>JZ4;6("BH:Q1+[F ++M>QTNEPZ9NIE2842A2=1!E6'I>Z>>0_>2*'N.$II0B&D,RZ`Q9E,1I1Q*!%0H ++MZ0<2![5$%$EQV1*NQBGA%SN34Z:O%-46NLD\\13[MGNBV,'5/%1)=K8P.-L- ++M![WP]+&B5":_J,S#+-BN=8915>SU>BZG3UQO=Y/K_(0A5J+5];[_V$O6RD77 ++M>)I>(^E.5**\LSE!4?6>#0T5EZ30(>^]!#=3%$LGP7TE=]I(4VJE>Q/XNVH, ++ME2OQ%8JM/V>'/5DE46K,7U+[2M31+!HR.&Z<\K2R7\=Q[+!;DE6Q-(8%20CF ++MDILQ06#+$^5SQ9[#W?`^"Q)#!LN+]Y4>4WO$4]!W=J%O$*]FL?4JUH0O8%B$ ++M/J!*SU?@8G&OA,L=1\BV[]7WY")8Y.(2^;)S+$6358E(ZM-FG%PUJY.;6,UR ++MZAM14FGM5JUZ]@6""82R*Z25<JU#$CM4R8,C9Z[&ZNCKZ9Q/(N34P(2F'4D< ++M,/2BO-%@PEDDTXAZ[4*MJ%B9KV?GIW51I[K-).ZO88E<M:)[.IOY)\J/(6-\ ++ME3(FFR]R]/OX.!ZH]L:-74MH*M6**#A$)DX:H:K<:WR6W]Y%_GE_R^O]3W') ++M]-Y;_&^UIOCH-TE6'=JJU4'$:KPV+JFT;BM7Z/TOI==@*!*H*J%UF1'`K&&( ++MIT2[53GHM2ZKK=[D;'=6N-\).-',Z8NE\,"K@C*S1,HJN917+I=DYU5E>/T: ++MZ*\\?HX;13:1M!66&HC<K/U5[HO;*_[[_B_6\)\*'X&*3R/XH@I_/B5$H1"K ++MU5'M'.=`VOH_1[O<<[T^[D!"UE-505413)#5+RNRLZW6UG=_GGR0YV(B(B4E ++M'DI10M",@RKGJG(O1Y,QXE_]_W6NT42(3_,H^U%^2)+_WRXW[FR>.B'4!9== ++M9=6%L556T^"J:I\&%<B/5>O(/>]S**X5S-UCF53;^H]1[S^>DB`T:A^W[?/. ++M0Y<ZA=,EY-9,>2Z1+"2IZ4T>"HM_H;YFB,O`B<8'M9W*L?)8%G2002_4([?L ++M_3<QI.R\YR,RS-J<3D.P\J.9SXB.]><<HGD4-H0,-;<6Q:$(,^!VGI?/_/>B ++M6554UZX*DX"*?@Y]-&B&T_M@?&_C\'P,CO90$-"4FA7Q%ZDVV$Y<D9`Q]YJ_ ++M.[W<[C9]7JY@+`B`G^$0$80OU3X6TY/N?R;GP/A\3Z7Z=>A$0#G50WBH@FOQ ++M<7RVWA?:WK>E,D@<WJNN7;[/#.;Y#1;BKHJ#7%<X"LJLY/6+H-(P")65`\_N ++M_#Y_.Y?;\#WW(>%\KL_N_KYW;ZGMK/L/:>[XA$`O9QD[308O30R5:AC,Y+B7 ++MZ-VCBYGI*<K*GHS^ETM3*6@31**FC=6%Y,4A>;??S[;S[T1(E3I\.[JO`XOY ++MVF[_W',3Z;YTW#?_Z#5+E=S,]W.XRBD3A4(9N:/VB8?D>P[!9`9F-$++4&)< ++MN8%%55Q\B&:JLZ)PINKWH.:>F8J`JJIO%0WWX-)S=OLW_-_MV.S_^ZS]WY/E ++M^R_K/7Y#RK9@!U[,"X6YNXF+J]I+E<6[%RJ,J>C019#F://.Y)_(Q%8@/(R, ++MF(3$9,.LK1U[+HQG+H+CLU6NRTO/GWT^,_KE51,%407RNL]QP_0>D[SJ/B>A ++M^'PB7R=1$*5`]>L/T-E^3S44=ZQ<5<!E88$S$7:9(B!DF7D9T0SG2/7DQF3_ ++MMSI;ST0VZ^I]3I'2BGS%LN9F1JZE872K7&5;".>,,FA4.TWG.FU[V"'ENZ_= ++M]8>GB>T]ZX1*AIVUN%QV/SO':YUUX\>1D9&;9)5%#WA'7VMAIM^2]4:HVM_; ++MQ.G2O@:V,BPOU=Z%=O]!8\]K+G'\S/R?3=UZS]7/\]_.N6!44U?+`.1R*HI^ ++M_5^?[KWO8\OB2;?NN.<)F*E[&48UM8ZQ[V;4^IS='-%Z7?-*?NZ(!!DX:LHO ++MY?Q'8O_]'ZO;_U+X.GG]_R^ZMK#E2?N.,J1;6M0R8_95IZZL;8.?+RSD^UZ_ ++M\&FPODX.#'VDH!_KR6#ZC7^9BM^L8N"*F`(#'KA05/IJA*:8'T_K4+2'[!G_ ++M`_`9U:FY*T]0`F*F'/)K=A%#XO:1'A(B*BB"FP[CI>]YC$]QZO9Z/R].NU_H ++MNWZ+:_2_;GL]WULRKV.:I,8<FLV2M!F<*PK.84W8@9NASSX.96#\/KN%WKP# ++M*%0YCH6/G^T][WLG9:SY?\/H?Z4Z(3!I_$)SS=*BW]\S-$*."WL,5AR\1*K& ++M-%M9(YF5S.5?P(?NJ:C$FBNP9`S=MF]=\WIY/):/1RI,9UG@WK[L?/]EZCYG ++MR/@X&!QU_\CQM593&%1.<S=X,\4</3@B/,AUU=>]M@*KF<YG\5@X/79T09.B ++M1A-"J`R3HM*?VY7V4'_4C$=19J\+@V[22$@NGU%IS[\5D0]/9&`0ZQ03QA1! ++M$[I4/1&MVW#_'_/5:KUO]O5>+ZZC\?H?^<#@X&APME?EW!$3%895[:/CN;<Z ++MUOF,H?*/T?GOU?9M;KC@0W:=11L+;ZDM.4_,$#KEKB*;CHV.-UG>]#;Y3=?S ++M\UYC_[U7$:?M^W[;F=1^?Q/$_!][T/T_I_8\;N>W]]B\'/F?5169QJ5#,4U/ ++M+>=9AVB.I!D;5B_"-5Z;@Q#Q1142&JKN-;R->QOZ_JO@=Q_#`^I'ZCMO<:3M ++MM%ZCD/E^I^'_WD?Q?.JX`G%&;YGH<>#-NL7C'8V-&&2:)DYU-UQ+B..1T:J. ++M9SF>O^A?/]4HJM740[94.=YZ9RV^.T[6'P9GBH'0663D>A&$E(V$->H<D*)> ++M%0CH83UU(EU+I=5F9TCHJ9G;&7DXHXY?)3UV=8;R4"!(\6@H&H*!B*Q:%5Q6 ++M'*]6<4,,*RN^5T=O6/3(5$[O.5%3TI[WW'*Q45&9F3:&?S55<!'D!>_]*P!M ++M^R7LM\SPTRH7_J_[^Q_CV7(]7(FCR.?\3+U^<<$P3BS1F'L./]YT_(Y_568K ++M"BML413O%S;&DJBWC#Z1BQQCQ^DM5C[V=/W(#/ZCY))XO^J1G7U>[\S_KYWS ++M_6__?Y_3J_QW:B4U$$1P".%7@#;IRW'.9F[]0B[!@\87/`*"@@BL*(P*?._I ++MZ/S/O.CP=U(G-<.Q7X*D%5;?%YB9MUH#F<1,K*_2"P5S,QS2G&F@%T+#-IWH ++M']E!/*]8WA^'\=?&^DO[?A+A'9=E_[:?'\=%*EW1*RLO)>E5=I?Q(8W-JV'( ++MS,RBH#*@;[W@J,/4S5-_O^Q\?P.PZS^OQ\'GO8\SW]0PA%]AI[IR/19^=^?W ++M?[_<5MS]+9G9?!_7[RBSUNTS-IEC.=#.79J1;6`YRJO_K]&1@$%`V:H8W+_$ ++M^!JOTX?H/0=2O8GU9*#79O9X".'#A]OK&9;BZ!M^Y%9F;A"HX-^,RS(S+B#4 ++M'/CT!RFJ[OKG$W3_LUG1.^C]!>S/!\W9.27AE"(F_8J)HHK+E<R7+RBBBCQR ++MZ%AEP,OJWR=&QV2_+A_N3_S_[V'^9\OP-/.\5^ECK(F_,([)!.+]CZ!QWW9> ++M0J=OV6Q_5UOZ.\]+]_L>QY+J>Q]/;[FGW?L_8_A?G&-O>BVOE3I#7F(2&>-, ++M2G&G@&K-4<<>6-V;0UYQYW1KC7FP-Z;(O''&^-\=.8!RQ@&J,`V1@&,8!C&` ++M;$P#BC`,@P#(,@P#(,`R#`,@V>"9(V"9)@F28)@&08!D&`9!@&08!D&`9!@& ++M08)D&"9!@F08)D&`8)D&"9%;(PJ[25L#(KK@9!8P,BRN!D%K`R+:X.06\+(R ++M5Q,DN9.,MS)Q\&Z['R2[DY*W=A:VDX.,6O7OD<4H18\<<,5R"8*A]G3;_ONB ++M;VRQ%$^!?Y?IZ_D/L<I\S\VJ]3^KT':>^]7[/_?EON_WZ;AT])[K\/\7X>&/ ++MW_Q^X^]18OA^,4?B%LU1^J?K6/OOZQ@K]2,*5$"49!!D1-7HH;;9<IV^ZVDJ ++M3LLXZ,C8*FJU3M=&,NL8\LLJB'S?#]5\C^WR=/]S1<[]#\.B_/XUDK(GF/'] ++M=S?^_)\O]O\7X_)3AC:+>57KI!@K+YY1:*UPFOB\:T__@0G^XF*F'\0+XZ"" ++MB?T1-",JI`15#3\DO)'-\PKW.>:9"/U5?SN?GX7B?%^/N?O?@H.XY[$L[:UM ++MOV?(M_(]9/^G]W\78F!T5;?.SRBJ&(MN,7,%(NC3I689LX>>\5E$^4LPDS>R ++MUF@[M$ZI8?"VSD!TBR[Y4!5$9..'C(*M89@LJ;/4?V[_N(!6%]7D[;T'KO:? ++MH];??%P/N^T]]5J]OS>2VF[+GN9;/<UGG[WMM;E[N;=]MFNEJ315(0GD?)+/ ++M4KUZE:M8S57RB;33UY+2K&?TYY%:K>K6JPMJ;-9JZ7_M(%OZ*!#_;(!M`7:[ ++M_H^<_P>J_=NG2?:WE3=4=GZ;GOD9PG3B7Z*JJE%U`%+;E:`KA)_OR441B.+_ ++M:_X/\SYG[HJM^J^#+_'^1HOPG?X@=15Y/VKE#F_QZ?I^CZ+EJM;&@[535-FC ++MZDG^J)GNGK_`_)_%^O]I#3;JZ=:U636JRZ0@"%!X/!E<Y[%=`C`YSY'R.>W' ++M-\G^SOL&9;K("476PF5D0<H*N`*(>15+BB/1!%/1^ID=WNB_-W/5YZ+')-R: ++M@LG#*Q:+18,XYHR3B#=FA-N91F&>-P:(W1X1H#0F[-699HS"-,81S9AFH,0W ++MABFI-Z<R8IB&&81@F"8)@F"8)D&$9!AF08AD&*9!D&08AAF$8)@&`8!@&`8! ++MDY)A&289DF(9)BF29)DF*8AAF$8)6P3!,$P3!,@PC(,,R#$,@Q3(,@R#%,0P ++MS",$P3!,$P3!,@PC(,,R##,@Q#(,@R#$,,PC!,@P3!,$P3!,$B,$R#",@PS( ++MAB6,B/(CAD9.3C9.-DXV3C9.-DX^3DV\F_R<#)P86,G!LR8&3+:R<"W-DX%R ++M6W);BQLG)NW<FUE47,"Y:#J2(V"CGT^(V%JJZ=/C[EJL==*<OE,[>ZFI#X'Z ++MQ.DDQ5F:_VGZ^W]A[SS/0_6]MJ?J:KB?&K%=3@!8-VJ(B(75$!$!SRYI%QE5 ++MZ)(F9H)>!FNTBLV&QR-*1JB(&NF;)>\9^/JT-8F9J`$.G!T^/\/=]#L\9P?( ++M$'G")YZ**A3S0H`Y9)&$D2>=_BW$I*_BV-)H!#C"0F8`_*RA)(PY(F_QZWJ& ++M^F:Y3>`*[CNTCFW)9TY@3G)O60TS,:,XK9`;#;E<-R#4FV.8:2V9AM,4,1H$ ++M-=)'7N\/.\$TI2&V.\V47B<='3L*S4SIPS3BYCJ*ZDHIQVZ(WKG7-G4C)IJ8 ++M8*&%3,9>M:>-LF;K+C-[UEW"N]:W)H@D<R.&02:MDF!5<`'Z=W+-DMY;J]?N ++M-QT]IMY3J[;BM)<P.V1I$=`_7K\ZO\X6/N^=P55!6115;`!)!DD1'C*]61/R ++MPZ+R'X-YOOQ?WWOE)['J-[^:_8?C]GIX#:UPQ@K\A]/Q#C&+5\_Z8BHM_X60 ++M]_NH-]V+"9_*F`=2IB@N8E?-<R@1&46!Q?*A@"*BH(D&%5"6)VSNSYKT?1=T ++M&?W<5W!W*.S\XR5IAL)S"O<JK7HA!FXO1#/7$)!455K4VKI&B!A(`I77^*H& ++M7]KM4Z)%5YU(=F'S75U5%3C."C(7;[$NL1D%5<$&$ZA4+"BJ@>C5$^4IV''; ++M1'4@O'K/D:$0=LM!BYY".%H9&,:*/0")H8HF9@3?\LQJM7'F/,\T@.412<9L ++MYE9`OU/LH*?:\OFN$*,'M8_M>[SOU^\E0L5QJY@:M16Q/*Q8.%("<W[/IL]Y ++MCXGB7\?\?\-,B(>570)5SL]L>@-OSZBBBF:ENY+-/J[]N_[!MH+H%%-",F8* ++MGMNCX&N_3[_^_OMUXW>^?HVVX8MBZ5<$57,YS.5!PNBZQ-P$!Z=RIA8K!LUA ++M_/4=Q\GJ_$]3_W\'?_J_5GZ^E\/<[OT$+-K2C7P./)J:@4>*BI=OARI[001D ++M$TJFAUWL-[7^-YO1>W]O\FI163NBH9X[$Z'LMOS/&\;+R\_0ZG:5'\OFXM?> ++M<U7LYV]LV]=O;=W?=%;OM?H+5]O,]:O7R6;M>W5LT]]^OV>G!N_%58^X[F1. ++M^>3P*-A;4=],K'XPP=.MV5RH)ZY?F_<\?M?103_:*?#9$3V7I?6S>M]E$@AA ++MRU64:L-B#A+;L%P6U3KP4E$1`KHB`Q&"BF,K(28A-E>P^%X/\8I!,B/07W;\ ++M#K-,[A_T:PB%BA;"LJJM\RMK13/+I!8+GQ5%>Y@TEC1RZ+0:*6*6\L%D:1Q- ++MQ:*F,J(B&WP=TCB+=:;(GGA6LXMO3VXJ%4OII]<PPP_/(I$M`S!URFPNO<X< ++MYAR,*)YD1035_F8T?,U_R_1^1$?Y^%]6\;=3`%55K$:8`J=JO=@0_C^Z>E47 ++M^+UZ_LM5:Z57]G$P\#]FJ:I&P]"JPM$R(9]?F]#_?T?[/$^%R$A:!5GQJCZ@ ++MS(JVAF/V&`HJK=<%A4]-_Z-VD]_HW<:4Z4<G'KB+2L202^7I7M6^O.(_K50P ++M='L>M]!O?Y7U]@'M]S_1T^K\[\&RVW2I^/]ZMSFI)^._CL[%LM9[FK#<UZ-% ++M15%1<.`HH)X:@55/R&HYSX7P6_@T(PC2JMH6N.%KLS,CJPJ$3'GD<&<H;..3 ++M<Y7T?8<9R'@=UT_V_9\_5`XT7RNJ,D<VD160<MUE9>>8#W2"P4>+QVKMZ3W6 ++ME\KZ3V<A*(3*BJ"&U_5YCN5\[_9T7+5MCN.,1X\>/(%M3;BF\SE%SC1C*RJS ++M[`J?P14T2A\WBV!,9?5_FUNN>:H054.$PRI0O%C,6'S:W.A$*_&O0?J_)*JJ ++MR)Q?KF/X:G^-]T'L8BJO$#5Q\5^U*47_I/RWJ>>A7\.<1$J'RY'RJ4UE=_I^ ++MWB[-)J8R105.Q4^ES?.??B@)LU/L\[J7=9<M95J`3(+HV9F:]"$;P(T$%!0T ++M'25'G5<QU_N_.02HHDZD8J:&I5BQ(!C(IR=I8R:)8P9L6U#'+9BJTC,Z=_+_ ++M/<<@(IK51""JJ"JG<J@@RJJ"*H*(HQFR2\MJO*V>8T.RXOI^:[7XFXYKXOHL ++M8MIJAL5QB[51;[;8$&8R/+29,0AT*H'.>L]=^#E>\XF./WFAL:3$`JBI'"SF ++M1YKN1EBSY(7;N0C.77$S.H&8\`41E10550_(^[]O_9]?]+_HO]^YJ]""BEIH ++MI/J?$,U/JZO'[VWT9E02+:^>]3M/_1`1X"4RCT&-,(R#Q7T-VSXZ8AS.[HK> ++M)(2*GN5Q7#(B\)B=2-@9445E8&8;IU3F_9^T7`>'JB69B!CWAK5!4U'^J),, ++M/WU2O'#:T\'Y[586U(V]/L%H?J?J(_M_Y)^KF9&C]H9CD51#3"^5\!@]_P_W ++M^1[CZ?3:.'1?MX[[/4_5G_MBWV'QR*6;VV%9,?3&_,G;ZB,9SL8>2#AI%<(: ++M1=&O&*CRLP,IX6VZ&\\(*BBBJJBJ1-K*MG<^AK>AB+AT1I"\3FZ-$>F-$7YN ++M"+SQPSVI6-8<J:PQRZ<J<43Y!Q9RQV)V)B&S,^9\YPR#:&?,BYD7<B]D7V1S ++M.3@Y.%DX>3B8F3BY.-DX^3D9.3@9.!DX&3@9-]DWV3?9-]DYF:BHJK[Q'J/O ++MVO9X%&UFG4\//MYU0-6,CS=6DKN>M<@G&*4**+D?,W]'6\&7=^IE"9%$51%5 ++M$M96>R\:]DR:(DTL?^83Z=O9<JUO@OS55],2:>Y?A,YO^-R7(5'_[_M@(/>J ++MBHNM9T^1!A<L!!?5_`WK@@J"JJH&!S/S=IO/F[W\._ZS?3Z*EF-F.LO32*.1 ++M=-JE%T2/?GF5@(EU0JO9PJN9RC\G*HS\44&62)<HJ,[7)BDB>'7\VX/+`*`" ++MB/$!D%`!2@4#>*PH"J)[7N_\<U_CE_ZYLAI%L*VT3;&V444T6M12L:I)!ETH ++MPV*RLX<RXFKH>'^^C557SU1_[OGL:Y1#TJTK2H:Y2KFY_><"]Q.[D1)A1!45 ++M.6553N_CTZ^5'RY_3?-^LS`]LV.N_P/^P_=Z0_D#)^?'!4%1/;]+R^D^CI?; ++M_?]C*"3**H*JJB"BBHJ)_+G??<CQ<(A=H<BJ@MC]@O/?8H_!/X4K^K&?Q]/N ++M9W^V5>V+5O:J6S5_VCXG\LB;JLK=?`)/'=);?'ZGYV`&Q+4EV:JOSO.R9?MM ++M9GR/4(O^;34&KYYKYSG.>AQ5T:^.(B57*N`-#;[_]_]A1?HN'-3TA(^QT(L' ++MR2!C*E*11-#3,!!(5C!#K/P_]'_C^S_,_U/D_V(Y_*_I_M51;YV>SX#V^!4^ ++MPHVJK861_?!GS"(G^G?S%$^JH?.\6)PB*HB?U][\GO/V?(YB=B02405#AKP5 ++M$1RJ*8??>2\3>]YLS3F"<6891@G&G&&V./-P:@Z`W)LBZ=`:`\@:\V!R!HC8 ++MG-&S.7-,9)A&$81A&$8)MS#PS#-F89AG9F(8AJS$,0Q#$,0W9BF*8IBF*8N# ++M<Q,+$P\35XLC8N+%#<3D,2+)Q\7'QHL7'QHLF+&R,>+'R,B+6Q9+9$,CLX96 ++M3DQQ9>7E1>@CR=%FY:X[DJ9MC&9F<\=`S*[ZE5<N_=8N4NY?*ST66^](TA(, ++M2$Y.3DIA(4VD5,7#;:)94^.HHH+KN.UW7?-]_S'JO$^#\K_F!U/D.^^+[7M; ++MB<LJ7XJ(F:IT3`R(@J"B!Q7+^EYCYG,^FYK+P>0TU!I:C*NVKJ:W<:S.5_$. ++M?-')H9@GXDD-8K*K3:V9B72"GP^G7UR*T8PO[]1^'?>M]QL,]]3^'Q=MQ,7B ++M_:]D=/--[3<9<?UI\OY6!1KOVQ]SP_6QXR@HJJB%*AK%X?F61$SXJ"HS'DOQ ++M^]<A84G6,5$F[X%)69A5!6R[WV]]YOM.*[9WL_._KJ`G754:L(J)]!?#_DR( ++M>3004UIM+32:>',YW-*K7[X@5.8225%<D!-JHRSI*]SU7:&U%155CP#P<[]' ++M9\AQ/QO6_"UW?>E^_B^DN^W][]/]-N^%U:H)K?8MKE0#^>8R`JIL,IF81HQN ++M/Q7Y#V9NMX:2P,]5CS[Y!<\N>5L^%<')R<7Q_*<U]"_R,S['T>8ZKT'V=YG_ ++MP>U]GR'=?_<==0$O!U0P&D%1%<;=?5`(I_18]EV6J\6"(G_?KL@G`N-E&4R] ++M,K:\9ES[>50<,IH(:!PSG='O(D!-6*AM5)%]#P_.=IKT/2I%>4141S%DT/V/ ++M+ZJ'&*BKWA5#:@[8(*8`\9#W8O@6/T.0+!8`&1#QMOU''^H\?7Z30RB)X:^K ++MWO(W?\9Q%U./U;LW`;"C45SWVNM5C@*0TC':;J6`SG/:B5Q[L4)Q43OE3Z7C ++M:;<?*YSE.7YC[G4/\!:!+8B^@VG(="YSAPXY8B(E$45;X9B^5PILGLS,B<VH ++M?15.2I;2AZ*3F_0X<-@K*;M2E4V>9%*YZSLD2_*=X5AYZ+NM9V_F/V?RTG5> ++MN^!KO7^+I+!6/5+=2RFQSRW@OP51/C)[P+SN&`QG(PE.Q[WXO@L_AUR?PLPV ++MGL&`_3QSA.T*#W@Q@GLEVE$H(7^+KUER;C'?YI;6)+&TI'YLNUC8B2&V^_RA ++MU7]/EWX_KOI/8_9P'5,IU=(&.!B&I#7+FMX6P3%R,K(-8;X#:3(#*IVP=A!3 ++M!N9P<\!J%Z?I#I+AF0O-X;SR)KTAB'3J7GC^G!J\3)Z!U>M@A:J/"#`\&=AD ++M!YKH023-L7TKI<A?SHG$,N`R)?DGA74%\0G-X7M'QNX'D7OQ#?A\R'/;O[N$ ++M,5Z(>8.@G"H/*Y7(A`N@YTE'(1%\#Z?W']>T($Z.A"3FM%=6ZJ);P;#3P7+< ++M3J"1*@BJCQK+;BX]]Q"!8)F2(%13/(($;OT;S2?*^5!$]3H?4^O9&3R,`G%0 ++M+:UQPV0*PMM1#R7PF1.CXAN)5!0%5%S\V%B3CF=#?XG$YV)FXT=I=F*M+.%5 ++MS.50)P9]HCYJ1^]]ST`.^W+(\/@Z#N/E1H&!_B>G#IW>1J:7F_,_G]_^7P?< ++M;3:2)@;+@;/A:#C/V>'=T*HB(;#9,;]<_M=AHMMA;/.XK2<WI=OSN9'#;>ES ++M=/I]2TCK:$HPPI,@S*JZC4:A[WC$<AE0TBH'N_;=GXO$</K/@J<5*>AXEO)J ++M@>2_-I=+Z'NHK?[[V?W6+H,:")@Z`F&XC%2!J?[7^=O6C=X+P9SDX<_'E(OZ ++M'[/TU_#<]1]7^4AVB:?287?>XY2)",%`50-8!R;"#",J#**9NP^UMWQH")?W ++MM-KM=TG*]_@;#RNQII%,K7ZYZHH:\5656,U3;39F&)I$'K?UDF5^5&/.BF/_ ++M)_]O_K_'V3>*KN4AR$540_S[W]_Z=KTGL8R^05)5P!FT[EMBLXU:ZN)G.969 ++M6:PJ=63]QGY63]))<$,)#\G^MTZ?P_P:_G?.B6+'U&R5)Z`6!KQ3-N65UVN5 ++MQ%Q5W2QR:*^46BE=JRLRSC#+'Q2*7]5:A(FCV/][/[7^&?[/_=Y)OR;)(@H2 ++M`J1L(#)];L?(^]D.I$-/';%!\XA72Z;-69HKK?#P<OU?UJ_P;?/]?2J#IRK+ ++MN=JL+:FS7ZS/H5#\O7WR$"^!$'@AMEM*FZ3]2*K(4*B(*H`DIYKY?EMW\#V6 ++M+HKBBC$U3C&TRPTNBUF/-#=<3-A8N#/A;"+2Q1<'4R22:W^)2_90L4E)22%) ++M24E).3%)&6"P6"L6""52P52J3VBXAY%D.02.B]TB(IHH)[,_<_S/ZW]K9.!I ++M(Y*9+8I31$TE-#R'U^3$#S?8N;[9IR*(@P;%0R\OH^UU?U*WLN+W2?Q25&C1 ++MWCU41`]^MHJ%\N-A6;A'&*FK6^R^G47/Z[5+-H*!R3&JHH9F`PQ5`0542%<E ++M_J_I<TD(U5!4$G]#R?7=G^I_V/_;\',1\*[(B7PNEVQMBT:5696U18(]L8FI ++MH@*SB#*ST#[(Y#\B'^Z?4?P?AGQ^#**M4M:J;-6\2&`,@V4$6J`"AH8:&"J@ ++MDJJ2FD*B2AII^W\?_)]9L[B2%$PM+0PL+04,'P*%D5!30%4*1+112%!1$4T- ++M*%45#-#\2.A*7^SL4C'8S1045,243$1$10345'3`?;_H>?]9_V?_1P/WJ2@T ++M]+[(S%[3VC6J#M$C^&=Q\.D.0%$J!A1,X!41(O&YO$VFK_?YKCNP^E#Y^R:T ++M(B&Y4)_LW-Y9++,&7>T"KE:*?&EH59<ER1:32S1#.=*<BJD2M&!A"AQ2G%7O ++M/T\3L_DCF$!35YL,ADFEDII9F)R#)A8RL,CJ^X^X_OOMO_SYB'(7G-"M+2"1 ++M)$)40(4@U04-$PE-`1#1#4%%>6'"*]$&@/TAT41(?ODTE!54!04!0-(E([0= ++M\G$FU04%%)Z9U!V3VQO7.P:FJJH"D**0B"J"JB"FAF$^0_YK?Q<_H[`?T"X$ ++M7\/#).TQSW3,\/8_/`?:]RW\A!R$8.A(?>*I24#*IH7^6(B(CWM%4!0$%,C" ++MOT#^K]=CEF:1.9#N]I.8/Y.:OK["K[.'HA:A(81**%58A8@(F"8#V,PN9AS' ++M0Y_@9_QF?P$3^%ML0W2JY"(]+QD#]A[O09O6P$RM+V6-HL]5$M*)(@*>(H,H ++MB@_Z0P>'LK_:1V$-24U)#044M!6RC+'ZY@#0,\_7[&DYJA!M_V@/K!PG!XOB ++MVUO%W8:&]4L\"221T,]R5(A+HHXAG.>GQ!1-8H,BD&`*=N@U)V^=P?AZ;?:V ++M;)?.K!#Z9T*BL$/^-"$_BD=<_[\+D=(`_1C]8(?_6&;%&Y[R&L??,<7;_/;2 ++M:SZR4,\BQ_K?].QP[$,N3TS%*!21)C?&N`"2QNYA!(O3I72#B)C`9E_$#S3J ++M<<P2:(5\<H&0%[N6+[]H'89$-`JM*44"?X/.*<'G./,*AE:6?OK0H9IA;&0` ++MK7)(2#!BJ6D@PD&9:,)%D@EDI)+)(L8VVQDMJ2R*JPM&PD@R*++)56K"*S69 ++M59F5BH$OZL^N(][*\Z/#KOK#Z@^"<XUN`AI!1RRA&USFDRDL.'=@B1)")I_C ++MM$$Q:L6R13HTPFPAU!Z_TY,GW-A;89,55]SF)+[3$$4;0W__F*"LDRFLG8(8 ++M)8'$Q;_#_SX%"+W______________P``@`$`0``$,3S?/O<78`!J5K[W4**) ++M!@*D&C*`<NAO>S#Z^Z?>!Z!KKM:DFE@Q!5(NQ8`!DE(!0#P:C!SCG$(`,7/= ++MCM#Q]??;R^GNM2O36ME7W,]GNW6)"(-OK>\K<-U6$"==P8#8#/H?<-$"$``$ ++M*@-#Y.0`-#(`&C(`]<J#D```H!OCON\`.@```4``&AH``;YN@&)H`<I&=;R' ++MH.(`292:,@``:#0``*)'T/KH*?8WV?<:9F42H%*)%!0/K"!(^C(>3GVR9LCZ ++MUV-@]ST;F]&`.@-WQ!:)1"J"F@,``````````=``'T```!WH``"@T`R`H*5? ++M>-P"@``O4`````D``*`<:@?3EH`5]NZQRE4*7;NX;9NXDA2$N8/3HAUE.[.3 ++M?*'T*"@````````!H`!?6/O@'B%=/&VJ]L3J^F$(Z5365[AW6``!'8``#.ZB ++MEON=4*4JXM%%?=EUPW7T?.-;W'?6IV4:499$MW!Q=;GT;:\'(`&@#H`,=]/O ++M6K%]\VOH^?+.\'CWKO3Q[=G#MYG#&[V\UVIZ#1<3S+*P":C[@HY\,``"@&@# ++M:7N>@!]Y]2\@#[ZSZ^PV8W3[X9Y4>^LY7WP????`4;3'WP+W*1)]&U][XWW@ ++M%2JQR-U**"9SY[T-9/.\%WD5%7GGN>;-5<3H<]MF\"O578T:&@+[!>>X*?:9 ++MU0".OC@`=X]#9H]L^.WNO.J6]?'/`G<,:*GN=[UH\S`!<^^YY0`#V/KIGAAH ++M>^\?>/H>\#[E[WN@+T^#;[SFG4^V\/>9GM(EJ@```^[`?60`>G0`=X"^@I[R ++M^X;@;[V>)O&<JP+QVP`SDP=L`T`-R<'2T:B&\\;@O/O#AY=SSWHHOO`[T+SZ ++MO'T1Z8`````GL`!SO;5TWASON'O(:C!C'IU;J[J%AYN/>Z";CG4=.KV-2WJ8 ++M<KSWO+[?`^KT=K--<`!H`.S"A'U@`>X/%-[P`+RHJ'(>6M5NXQXXZ=]OO97P ++M[>^^Y\%D&,VO6%T86DF6E3&U1,-(=[A2>@90``*.CHZ%J]P`-\KWTX];[5N& ++M<+N`X((X[F^\'N8+AAO'<[T5O?7OO*^GD[WKK)%X]Q[YX'T*5(```-`````' ++M>Z>7GC2L@EOM6N/=WMA]\]]Y]>/=PX=US@V&!SW/O/..X=/&;$````>BAW.X ++M`'.>L%<\=?<;>PY:6D&&>SG9%PNV.N-[GW@]R?<SE7<'!#2<BI2&`]`"@``` ++M&[;3``WH'?&U3%$`WCRHAR>Y`M@'F\T\/````#Q]SW@`7K[>7GB`>Q54<//8 ++M,6C+CW@#./%N/&5@9;0RFU9LW;OG(JZT8/"JFV9<PT$@/)7KNPYXWL96C;:T ++M*H?/L[UI(E)I@)>VW,*][3Z=V@B%#FQ55;86VS6"@&(%Z]RQXO#ZWSN68`H4 ++M&V`&C7UGG37``LF-H6P%)81@&RW==@KIE.M*1#-\38''-JW6!ZRO;5[LZ\H& ++MTDXMB[M0![;1XN[:!1-M=,76?'W=?6J4)&V:UY533Z,(BJ]W<=C$75=S0^L" ++M@4IZU`4CU@'WQ[GJI#+=MS0C7S=)P&5VRJJ2JCR#K/H%-`:->QZ;L&)]M]9% ++M#WL->)L03/'V!HJWVNP7TZIS62#TW1E.0Z.E>[N]8FV/BE]*Y`TT!-$$($T` ++M$R"9`!,!&HT])HF1Z4VD]1ZFGJ-BFGD@&IX0*2D11JI^*>IZD-`,C`@81H`& ++MF@8@TT,31IH#3"321$!$`28`1,$Q-&IIII/03-2>(F]4]3-4]HT34V)#TGJ, ++M$GJE(2:FA*>B:FC0`:!H``&@````````(4A$(0F@3(3$U/(IZ8IIE-F41GJ> ++MD9-3!J9!HR::9``T"HH!*4$T4V4U,0U#0T&1H;*``#1H&@-````?]CY_\/_` ++M_<S_Y;.@`V*S]R'R_FV?P/X,M$5$27$T211S$ZD`)B;_K*)7<DTFD_U-$?\! ++MO`2E@+;94LF3`V!.W[D__)_\%]GLH?T''_K_[8:@I.O)ZTF:E1.5!__88+/_ ++M"?]__7I^-1_TO0)_,J)^S]>6_3^KUN?8X95]@;!I*]7ZWBWC]CW8Q`&6>Y*S ++M,KJ!$0UYO7^R8E$MMGRQ7%K%':65W&PB)4W$XP2K[3@*\NX%XVV?W;X`YZ2< ++M_^?K?[%BA]"5.TH)"'1G/CUUK?WL#[;WLV#_9(I2!2?80N2!2I2BA*``E``_ ++MCZU!('4O_$\?VK&WFP\^5H]>&UZ.9ST0*3_EZ%%=@"4!`-,@'I*<#7>WARO! ++M@B3V./_B>T97%#?*H,E)@-[KVP*@]2Q$9!"A5%@5G_U60D`HDX54($E.!!V& ++MMQ8%!MLD]XZ=`Z(1OEMYUOS.^Y4<2N%SBV(=KAAZ_7_7^?]P]\]4`/Q7_C_Q ++MB/&!^3[L?/[$]VY'P4'%J#\63?92?%1?:U4@D_\E^+[J%>2S1_W:&)@22ZS' ++MROT?:_]V5``/7W#MW-_:P8CZAVH[."7K_FV)5,",,U!0K_T]U/_6?T.S?0M< ++M6DHGEZBU"1'BY<^$*&/^65Q^G$G?S+#[,[(EZU(H$>&M=W,?B1"F.GUY[X'( ++MD!4'?UV'>X^U!*['CIO^;8#B4UN4^[R:1!'=(_$_>8!'QGA+]7@SEQ1-'VRO ++MT_3_U^RZ3!3_W*$^@.[(WU[M]`#^GM@-@C"$<5]OHGX8`P?=WJ`P*#<H$3_W ++MTT<^CG[KL849(_6JG<1[7_I*H@LC?"X/I,D.JBE5O2H67;_H[LDD!+TL_]U_ ++M+:CIV4(./;U]?'3\7&/>4GW7V>_KGJ^YZ>:!\^*'*"@>@_D^W_+2?2GA1_]6 ++M"_;GXEQ_`@"`P/K_FOU'RCUL%^I/I';V#;[^X>`(_\#G\G4?SNOHY]_C@_'^ ++M&>/7XS2?YQI;&C8TM8C:%9!8?T?8?G>[%"DX7^6LT476?<H_DEVE5@5"J1#* ++MC%0JE_-,GJWR`0?E_+VW[N.WYN_M=W=W=]>O>$/_M"'L\^H?0Q$1$1&>E/I_ ++M2?;L^D_67/;Z?S7[?X;_Z?D1"%*C,**XAF8!!E%HUI+98(-MD1DME0`(50:J ++M-1J_^&U=FML_T".JZS5*BT6H_TW6IRS48YED?Y"+)_<16_Y'\_V]HG_<D+$" ++M(+UUT?9[G%'U*XH68HF$D4F+(8*1^K_75EDP%@!N4"AQD3Q(:E*%#:0AD.*2 ++MC$ADTAA*FQ#$,0U`%`TJ8L)DF#O`74FG,$+`P5R2D,"%*589!A"0(E,LAB+$ ++M:1B8C.L)&D:P:H81*1@93(3`)5(A7):<"$<G`)$R!-RFQ@&'8A@#",J0@PCD ++MX*A"(;A*$"D=Q#4E0U2#5"U;)FA*E&*%*Z!)`(123(7<F:`3!&65)&4R`,A& ++M(#<Z@`*0I!=P+L@0-2%([@'(5I!ID5!4BZJ0Q1*+(E5(S8F%0U1A*C-B8F,2 ++M&2,XB2J'4NX#)-JRH;)=2IH`T8JP2#AB8:A<"`"+)0I<81\<F""*L$-RCPD5 ++MR4.2)$#D"XC*&D44.U-*)H%)"$#<-82@1"!3F(@B[5DZ^6!J/7U\Y4&H*,"1 ++M@HHQ%24;!K);,C!L82L8P0<N[KD8HHP283"65T+J*#:,AL8M@Q)#NN8*!-<Z ++M5N=FQ19EDT)E+0&QDTB&C9,[KIB-A*Q55#06MJP!FLTL&2.!(JY+VEZJZUY2 ++MDDI3+C9<C3+1P,#LH(,<S(685?^T$D1R%!E(2A"AI2(@ZDQ=P8$LWN[*2DRD ++M2FJ^-MMS63:4JM%6J[B)C8*:#$BF9HNMJDJI];96ZE-M;5*6)DS4FM9*V"M6 ++M+;:33):\74EHVQ*:DM%458JH16,"&$P*D<;<2HUXW,;%48U&*C4A5%8C&Q93 ++M1:-:,%C%%HL5&O6E:N?,2&S#4NTD3Y\,%=PO"%RR!(E*7)R:24".X.0=`SR$ ++MH7N'RFO$5&L:T%U4VCZ6O:P&Y10H2E2E'8QD#$A2`[A5R1"E6@$-"R!A,2V& ++M#J0-0)10_J@R':LHN2.!(LDN0%(TJ8C(9`.X'(4*%*4I06@1R!,D-"0(>%0! ++M2%8$$)1@!5%A&&4($A35B""D@&28B(@+"&Y=G:!R/$OZ42Z_/!*6A>H>2_HI ++MKZK]7^B0.[[T2"@"?2$.KQT'T?#-,@&D)!3T<;^S[__?IF^O@@0#5#E51$?O ++M,4R5<(R0:`?87$ZT`9LP0B*:AE;+!C-I4EP98L8A7^@WX__,81?(4#],%#,@ ++MBA"R"!0T,#`4,@0#2M(Y\OO\>^E_7GNB>>SD_?^PC'`Q?ULN'Y/\6="H'7]" ++M?X_PVH@?>PJI_G_J(^=>Y\9;JO]]!<RJ>%JUJJV6V5*#!K-X3]YY$/HS].'] ++M/($_%Y"PG_RP`((`2!Z!@?>-AXC[Q\!W`OADZE-\36M^_U^R7FNX[/XSLB:8 ++M;-H12,4$7VI5!%1!(/:AO/Y_C\>Y^\?S'^C5[)G^N&3!F94T'LG]6_\IN_1" ++M'\CW'38?\%[_;WC[OLH_2$^UI_<6D^GZW_#T3TUC-E_TI.%DKCC.9H<,XG\J ++M1=C:S&%F9?,K%'G*_LSH_I?.8!6G=]A!RWE/1;W'-R+R-;"N5$O'ZQ]0]GFW ++MGZPL.('R^D`3/T4)@)&%#O%+#8^"8FF!"V+#00)!0BB+,BT`"`.:WL7/L5*Z ++MO`X/]OG_M"/X[VB)7OWD&QR.G//X_/;/IY])*)T.@4F>G'<@1D!YZS'=W=R& ++M)NYEEG;6>ST/YY=F=[P]UE'^;^NC=6_@Q@JHO'<>0R2<\^<G>'$G7MYT:)K9 ++MAF\I@MSG"W^W&U?MI^AP/%67C7NX-:K5PTX,R3E+IA=)<87$XV9DFVV^8G*R ++M1%'SM=KVC^&SN3YSZ[[#M'U'!*-8CSJ`4*]7O!X;,@`1J`0SP]!]MW_AKW^_ ++M/9AZ_OOOL'U&B'N#G>9E8!'6\!KWHQ@]Y`7_Z:&5Z#)\#TN@/OO@M2C:CQVH ++MEY=>Y/51!->KEJ\EA"4`OWO"I8L4(?&J"\J&/UO+KVVJ?@.&<*[/>(FVP`-* ++MRE^84`CP-_#I5WQS)QTV:/B?,$9]42L39O:#=#$XEK<]8@VE`8JGERT)&=+` ++MC).IR+JYP!7K57_5^'^?JNPL,(?)GR3`("0==&/J\_Y8^7!`@BUY!+R]R]X> ++M:#?>8\(MM7?A%"]TA#W9LKB-[`T#=SG6=Q6N[`]F]FKU[RZG2/A,EZ=I8D-[ ++MUH07$^3C[-9%TP-%\/`X]J>-A!/*KV6\W,"/5LOD&U5^EYN=7L"Q`B;,.^%C ++M1V5HU361(=`\@O8_N/WG.'K,_#W\*OO`%(/$^F`>CVX?RR"LL?//'P01];_I ++M->]8.S-?ZZ8]YC:X?5BLZF^1GQK`;7KUK,#MDDM%(\"0+EW[P;\#MC<@$6:, ++MN`>&CP_LO>VWC:$],Z"`2HVC&``/#[@$"M!T"VX6@"`$3Y/W+G,GXFG=[;_3 ++MVL6')BSC7>:@=W%*.RUZ8");HB"*11E@GI&@PT`E+B4I8RY"()1X^`H^\%^P ++M"\O6N-"Q2G`7Y]H,&VACH8C`&90(COUC2(@8@D!#%YAQI)(4@A\25[P!SO>% ++M;[3!YH8"/O`A^]<P$4KH(B#`$N:B_W\'PF">8WY4U]P'IOV,<?`.M6W:VD7% ++MO5@RA`PR9CKOFMK`VHI`)!MU==@@H,)'GO>XP,!@I#@9IB,L@>EB2$B"U>J? ++M4*VI]^D]Y)#DDL`078?;Z#!+CJ@)?U"M)E"QGMT<0%HZ7O"]ZQ[!RT6VO:Z$ ++M,8\<>GJ,/,\[RO,3W?2?6):*OP5`_^%"@P5;>>]H$8WUD>%LN>]X1`@I;?>\ ++M";H?:(NV2ZQ^7G?I,]G@38%>(VZSNB^Z<9^Q,3Y[YN8ZDSF)=UI<;?4>B>4! ++M'7U),84#SV0"KS5&BD`S(")HH@!(0#Q[N'"1`,5S&`+R0-!\4]13@H2C._D! ++MIKTU9Q&$&*SKX\JST$3?9MS&^@`B5*'>41/7Q0<.H19<7`#0MC).9R'IH#LV ++M`.D)88`04R@)",N4&O#N4;6.'SNEA(XX08V&T0I.Y*`4%1P,(\Q!X3!M@4M# ++M\-O,5,`9O4M\`#8FC/*GX"7?@F"!WMWP9@@'NWV'/;Y("_=]>`^`$"X,:5[5 ++M-`\1(-F#\_]=>K^OO`>IZ$Q(B&A%49")ON"!L$%TXE\5(`1`YIZ`J51`T64H ++M4$ED0?"5AYFT!-I24PR@QC*1(B0$&]/@S6,((`PT20)@58<((RM8#<2.NPY/ ++M=,[4"+?7`U+AU;8<$0N%(J$#B*EA^%+S`K`#6`!!G')X=T1,80:"L"4&$=TR ++MK9A-L#"9,`O#I%>'J=AG/6?>^\_>OP-9VX+^O[:8Q88>C4"Y6,`9`8A;#D*& ++MM-68B\"0X;$3*:T]0%TV%O>@]PH^T8[W+`0F=@!_TL**)BWP($#%%G':LZSG ++M#-9:8`D"YM&J<Q`2,60&"&VP("&T\PRLZA9D%0@%>FY&8AT2N_?+WVU?MM^] ++M_%F#O"A[?$C+"8P.W=8!BG^V#*!JX0B](_F^]MC"!M?'@(V)-L12WX"Z[#/L ++M=W]Y/V40M][P`D]Z+W@![V?/A],K3:S.EZK`0"L;"P$(09`3%,*38(`/BJ0@ ++M[\>U:U=J>3HZ\(!R5%I+.C6PWC&I7ASU^A,H"&_"Z@5?8B?/[SF$>\-O_'P1 ++MF;[`_$E_#U<^P>'P#GK'OXN^QH(`+X#?:_#RNQI[S?AIW-H3:]E>`^\T`/"8 ++M!P"[-(P9R.U._CZ_CGA\^Z#Z]\4W"^O/LV^X72!!+R`JC:<671$&%242[,@! ++M-_#;X]WKCU+\7=/A_/T-65'J-GR];FWC/G6SP2.&][O>\LM:W+Q*^U\F^L)5 ++M*^2[*,J'=548X=F6^,,/ZUT.1[<=)7W<+L-]/^GF73;XV%=>8@1&>*F#K"P) ++M6V_X7K'RK%:2PY\&VC&ZUK2YQ,+S#E,\WCI&GAF(;<K)&MU$YVZ+?CWYT-:< ++MJY[]]^7W_XGNX6QSI0><F2NW1^4.W&-E_1G,>*TPM5X63\-.W"[L.*B[S@BH ++M7)>I.7%X_Q:&&FP[5`N<E*!4C)'8R,;M$AZ#@BBIV,\NK7A^,6%Z:@8S-,_> ++MKYS#RQPKB75C1:=2[8+,&C?$"W^VV?DB\Y92/'EZUUQMB><C2G;?5)G\B9U& ++MVS.VPQO2CY[004:UW;V/OI=F&MOU:7O52AK..N%Y9<[\,:ELLM'[#AQ0;3O< ++M"#_345$5_(A3TVWU0,7P7PV&<,NO)V(P,5C.!.TJQYE3J#;X:&44RX?O#KO; ++M;/;9(AMK#%Y%/C.JAH.PE1BIB#A1U:_\EH9&\1,5M%XUJHBOX5]E/MJYG:>, ++M-R\K;2)2V<=G^UK_B:AV?2?#\AKRKF7GTX+LSM@T:$+)<+Q^*U:Y<TL-#4WK ++M2GDBZX?&)>7<G1)%,6V&HQU2VO^*V`7K;#C2Z;;&(5UVW)/\*J7LQLC$CO91 ++M/]740W9>_\+%S*??K%TD!.0KD;MU_6?Z[S=&$CZ44X$`TD);<$N,,5%6L14\ ++MIGC`P?';%V0LYT[;E5N&>=+^I$<=&?5`6O5VW_I7UK%NIA$)'2&10:IJ,*/9 ++M55E42Y^(?^6\A)Y1VZ?\^D"/^%NWC4[3#T(#C4.(RT:J9=85:TKB"01C1><9 ++MSAGRQOP+7%NV5"Q75/';3Y;H[#"Z7P9ZV![^7Y5S/!R[YOFZRLF,*V\YW-2J ++MG3;2QN<4"':VXA;P"QEPP9:$9B(<GLJF7X7YZF3DA;[WN-X&6-=SRPU+OAX` ++M95B%**32MDS*[])A_^C6\]TNY5UY[^[I/0\GTD;!]EY<$J1_]R/$C=>(S$[= ++MJD0+7IEW/<L8+[K@QX7>VM9UB\%S5,JQF3$L<K%1EY&%4SFY5]86C"+3%K?H ++M^9ZUEG@7B9GO/1T@:\>B_YGD\993L*?W7VWF?[2L3VJCU9_:!NF5XCGMF,>! ++MI@NRVV;C,+.N*J79)]&,"X4UA>Y1$1&,*BB>K==0M/HJ4Z_U;@;SO1(5_0[C ++M-:WM7ONQ.!%4%8>'YVL87$9L!;B3(I66SC8SS*Y,M!4VJX;NFO`M(C6/\7=M ++MH9[408;O:WB3TA]EN@TC+<,[+PXPNQ,:Z*KQEW?3-BO<CRH]'S5#-"2KB$B? ++MG/_9XP["L<_`('=5+D`NH1.2`'=?J*?<1?DOP_TK^,DIHJ<?G_-^;3?G>'_1 ++MQ1G`_01#SZD]<>+06]9_!A^M0K6?>RT8;AD4AOO\Q[?/]E'?`&"0Y/U>KM[0 ++M/>].:8]+8.65OJ'?C1_XL^]X\6.REB(YCF&7])EL.JX5:E37_+IKC9.&8]GH ++M(ZW<!05!QHN]9#!<MYYPP5VU-O/;\SQP;]S1[M.EJNGA%ERBE;JF9_:S!<+1 ++M?79F+'VN#<E=NM:<O5U@OX;UK5X,MQQ$_7]9S!?\T(X$6XY_@$7ZJ-&-%OP6 ++MJ)ES0:P:4J,2KC&T5U2NF:U1QJ+K\Y1=?^C1$:RI#EIFS9%.V+OTN/B$8#_Q ++MGC")8.$.E3U^@D0<6"4,=X[=BXX22BRR*KS)HF4S"$B'^!IT13*<E%+%V3+A ++M\LH<S8+U\I])AE6UVF\,7V*C&`V?T>3X6N=H?C;(+%PK!3IVYV5@0#`*[E;4 ++M[,(?G\-1Q--\=[^K6!WG)&3CIRXO"E=,S%>G<L+#'-,O590VJ"ZV;;E1>,T] ++MS##:-O;[:K&!T*XV7;)II7]Q7H>A`N5L.W9[Z.K+T(48!"IPJ*Q=D"P.Y<DK ++MJ.2GW2/O=;L3HS$^49%'\<RFEY%)0ZDU+R3(*]I,B@4[-2>&3??1BQ>4HB\) ++M*"I#:-*%2*I?-\Y132+4K6>CPF9=);QFJW/-YU*`F<9*?Z+G%DKTXHOEA59R ++MRB$0S^>4H4OO^2O9^8<ES*]IH%GR']!9JTZOZ*3!Q>^EI&@^[_?3H63RU)'0 ++M0B3X,R48PX=2Q(;]$/4-NJD!Y5NNX^H!$=\KC=[!,7#-*D8ECL7Z&3!@P60H ++M222[##.#S,&Z\VXE:"PH%_P^;,3F=.+L5=E5MV#.FQ9BVS2CN).$L*"!! ++MT_Z,%J7+%(1-ML$%JJJO[NSXFX-/\E4(]49A"\R4V*/^3I[\%S[W?SY[,THN ++M,U`R`WJ+1K:@_U*[_B89I%[<E*#$5`20R?+4$&@(DX&1NPDI/U0K"SXVS<MI ++MIJS!?])5E=5"MAFV)6FGC*F<C;U:ONU:\6>DRLK5++#0AV7&B%7H[PBCVTH@ ++MCCG=J?9M/6W1?*77&Y?<QA<<U3Y_0IUC'8USJ!3KQ'6VWA[WQMEI0F(QBM84 ++MW+YQC613X.VZMG3!A>RY.:A:."F#"GG]_=Q<4&OI?.WYJPVZM9>LUEGSRQM> ++MDWJ<-)9@O7F9B!C"CI&[:V!7GB*Z;;8&]CEM]W.3NV!/YU4Q$=&Q#JT`ACU+ ++MD-FL8>U7;.;B,]68=EJ#,+!U-P7TU(8S[;;$!64M+8W7NXS@O5:7G2MC$O0T ++M[O$&V#,_FRYS+=-WF94:V[UW?WRV_&MTH"<;^&T?#*R<W^,Y\>L_4".RF^[# ++M].:<@;DE-8JW*JNY\@V+ZV]D"2&RN-IX\?=YCX5BBGMCF=O#?'KL_OZ!=>*U ++MZG)S_[8N'%E!(GN+2U6)=4LRIJB?7;^)S_4$/W'P/JH!P7V=/X^OXYZ87J=3 ++MV!^OYIPP^\8L`\:`/F)_2_A"P(^S;[`/A\O-'+_^P/[``.\"!(]'XT3L//K_ ++MK$>O=$'K_AY`/[_.=]_O_0)]X1*E!'X,%(XR?@?X_L_H4WXX/8"?M`.A!_5- ++M*E+2@0%$+5LBT6G]4D?N?SB2BA_A)/C(0)9^XL(?ZI^/U'])[_[H!^%/:`>P ++MGJ0#VJP:Q5`-KS:A][K8__O!3!"%&E1&%"`6!!"`@)0E"9E!R_A+^)Q;!!?Y ++M2%$$_F^S]VE!^?V<SWP0C!A'FG7U=@2.RL65RS]5"OVCXOP0R0,H`)],0`^K ++MP?<>T0_6?44AGT^O'<B!\H"H>Y`H3NI,_?@"&CP0*H[NCNN?O';P\5.N<\OB ++M&9F7SST]JQ":*>3:9C?66<2<TS%(AV2F^Q$1&'AS1SEEXSK"+DKJ_3H[CUC] ++MJ)OMJR-CL3L[,20RL.)*OP(>)"W>"#(Y`1"*R"ZG`(5^<S`U8G0AQ(8[C9)) ++M)?P!5DDDDE>V92KV=N1,D*V*Z_OMMVP>][WFV=Y%VA"84/BM)&@$/#A))=KG ++M]1/!JB.-!TQ5%V"PH>'A[SX/MP/C@0WONAYWIN7GG>/`22;';1"(L&9]]4WO ++MN^N?9Y#ZDD":A!^UK<(@LB(/1)B1$&(D06&%(2%&@5\P`/<`]P#J!^PS+/Q; ++MLV-CU#Y+]H'O8!"!X4>&A#!^^'3%*<N:AL$J>0`(U4`2S#6&$YGWT,L7J<>\ ++M:R@1/+8(,`@@@D<<;;C>=;;J\5"BZ9:@*'CAE/NDR=NSN&<O#:+>WJRY6[W$ ++M1*RQ#A>CQZ>`)WX%%$1$1-],Z/??;-<O$-2LK,*]G9\A-"A.NNJZK9#)!P\! ++MH8((((((;1[]%5/Z;:X=\V-J[Z^Q54)5YUVQKKN_?M^D&&52JE62;1&'!'-O ++M"J.@1[E0^5;8,P3#QA`G8#,':0UFKWUA-$U6>][K/KC?>?I!9)U$;=$9A(S( ++M/,,`>9@^OXX=&5,%WL3ZU7`6/M3@S*9^Q['S-=2/M0D?2)UP3,),HF60`!X; ++M"GM:>-#:VQMI8>K='V?=HR\[&*J]O!DK2G!]M/2:##V_O`>[;\![W#P\Q@(Q ++ME$*1EE()<ZQYFWN,<N=>SG524)ZKO*73<L;B:^VOO#PI#P\`0/"A8\@.:060 ++M-&E%'7GASKS=557-^-=T2226)V'Z*EM-`C?AV5LVJD2.-H?8OLH00DDKY56" ++M'E`0Q7J)(Q*%&*X5HB9SF$E@TVB1,92"D992"?D_T#^W!R^_5+FE`G\7^%.3 ++M?>`#?0>\`"`G1L4!T:A$D'V$38#M15WWJZ3`SV:=/HOD(9YFQMFA]'Q^)))) ++M)/B=XYWMXRSW)[[#VO;Q^\D_22-ORHBPGX@G`'M15V;)!E`/84XH^P`](O0` ++M+WWY\/MGCOG/.555555EU=>>KKF-?:W]LC7/Y5]6XC'>_KAM82R!^)'LH^@! ++MZ1?0`+T=2L()L`>E'I$P#@<D"*[]WV&\^Q;;;;;;:`,7KQ]?7Y\]?2^>'=P` ++M`')$D15]K=.ETWP'G4EC1Q[+86?;AJ75)#-^VFA=+'-KJ<,UC[P`(A][Q'@/ ++M#`"=D3\1,`^#Z0(X<J2R2&@<DG",20G(<1)(_.]QCWX[[[NL:_+C$+48D*XM ++M5Q-SEP6P@`VX3I\MJX"Z.207L#P_BE.3^9_5_UG1C^V?GF;L24:$,R\7/"5V ++M6\=AI#'R]<(SX>]*`PCWC[WO`<``,]Y]`F*@^4.D%4Z>B`D5VJ#T#D&092$G ++M"#@@<_+G'.W[W.3WV[&K#[,RAM+"]"J7?*L&=?VVJO,K-45Y=3FJ8IG?0:LK ++M9:4`EW$.(,T!%TQJ],SW.R_UYR[HC+95EXKK<@J+$*%8_AX>/N46))J2$\.P ++M9!E(2<(/A`XTJ60?`V0D^>@/$;!-(1'B#A'HDB;[[>+[\UG[[N/LA%5F73&# ++MD%)>15\!X/#]`CZCY%M57P7WA[R=#YA#XKMS[6*N1;\98H$]][PL@X#1 ++M"3SL!XC8)I"(_"#A'T21.M/1Q9*AL(VAJ$D-R1X2>0G((:D$/223J1TB-@V& ++M090'K[RW%MI)'VSM;[*+E8MJ3:VE1RQ5'6IE8XO\GW7GWVH2MQ3X?3:%`H!L ++M2<BF_;^\/"?;\^`6W?U!4L[(>IEFLSX;F?8(\^``>AB_/EDJ'`C:&H20W)'P ++MD^0G((:D$/I))U(Z1&P;#(,H#J:X>D[UB2DPB=DB.PDVDEI)(Z(>23I(](3T ++M@6R!M$BU)(\!Z#R21L-C(9@1`DBU+C#WAGY0"0`*G\0G%'5[,X&I=XB5W^&# ++M2]IU#/B#M6P2.D_G@/YX`/;WVGS/JAKM6YFG:JJJQ3KG?CLYK-G'<WDX5))) ++M))))E!QK.>)DF.BQJO,ST(`(*$]R#2#:\C%BWV86V``E(F:`A$K`5$("*(]J ++M)2B>!%XHC0J/:@4"/U23I(\1/20-B2/`>@\DD;#8R&8D3TF=.3I.Z8BC$1[4 ++MH`#M1>`%`"]TB/A7M4?!Z14E2U(C:+8)/`](]$"!1"`"`'`1P`@&*Q11FD-6 ++M*?M%7.^(BKYO]J_1>@^98IJA\UM"7(^'>;ID_.55\LM*]OJ-5`[KC<1)NSE; ++M.I92A,*@B]\``=M(V*RL??9LS,U[]<K<^&JK:6=L/!U<D882N\SYGY/[P][[ ++M26T/G:\G<ZFSQ#\DYYV?A.Z8BC$2>)#Z1)N`#M4?*O:H^`#PI"R*G`5?`!Z1 ++MZ(C#<&S1-20<\FN<=;1G1@P[32O:@]B)TB!V*/A?"J=B>(LE1)L@\'I/1$PA ++MN2;1`/>@\!Y9B.9\W!=O=Q[3U_3KL_6J@P7\"$#M]*`WGMWL]S(W9H[P\`A' ++M-V]ZX!VBB,[A!P`\[AW[;+Y%5STX_M^2#XSZ`'NZG/L?PKK/:#$>64X[!##< ++M:E@!GY.[\^;1G3"5-1D/D)\B.(+4'4B?2>DD=)XBBPDV0>#TGHB80W)-HT2: ++M@G/1KDX[.\D6[;K$.Q)Z%L,QV-CD2;).EJ2>@=CT2T.R>2*4&T'D>1Z),(V3 ++M:,(TDTD-ZWC\\>WG>+)JF2.Q0TWL"W'R8^VP\RUW=M:,L74)W+-BM7MCN51( ++MP$6E:EZ:[W@/Z^_0G[GE8RH,2H;.Z#(0)T&8&2<*+.Y8LNDAV8YC=P;`?XWM ++MG6N&S"?YX?P>'GE(D$@XDN1_67GG7GAM.;?8[?'2E<.1B'8KX$-)VMCD2;). ++MD/`['DD[)Y(I0;0>1Y'HDPC9-HPC2320YY+MV\1@[6NV)G&&-G.8FI.QX]@, ++M6C4<Z8)N=/!V+490X'9Y+8>'I%A86C<'I/1Z2V&(VE>"`$'A/#P+S]M_5WWQ ++M1O!6_7'63L%YGEYX)2']?``?:/UY\FUQ>>\!PPDDU,A1;C+!,:B<*D2:N!TM ++MFC]I.YOZES=*J#^P<5HN#L^-@`54MDTBL90T4PR*E1R&).)QJ-*W"Y3*+*,3 ++M,#::@4C$U?#ZB\AU6L^%]]S:JZ-9JO)55/JRK'S0YUR7U+I@;E#P'4:))))) ++M/B=BLDDFJJJO3&^/GQT=JW@;P>;@F!ZC?F29QAC9SF)J3Z/P]@,(U'.F";G3 ++MT'4M&4.!T]);)X>D5%0V'I/1Z#$;3<8&D:B.7/HF6^VT]LF&8][#C#F$:SB8 ++MW.]Q-1GQ3K,GHY#PX6G$.#@]:[TM.CL6SD>3SI@=CHZ6G2TS#@[/2T]/2V88 ++M&+9-EIZ/'BV,39OR\(/3P]73)RZ3'-9E5??Y]^[!NKOO>&O[,/[>;@AJJF<$ ++M=VQHM53W;RY;2,2))(`#'W[]=Y\````'Y"X]\NMT<\!Q=7VP#$\H:YR'&>^' ++M='VGW=>QDD%_?>`OA]O1?'[JHXM[,._;J(>\;65\1=[FW<-51XDDBP#;QKD1 ++MG!CNO.&WGEL+1*98B!#O*N#+P@EC^A^\/?I2JKR]WKT.W'=1O6$ES6H3#GO$ ++M.FPE,C\^PXPYA&LXF-SO<349\4ZS)Z.0\6G!Q#@X/'71T=1P\GG3`['2TZ.H ++MR.#L\/'DPP,(V/1Y/#$V;MQ&DU$YC#+T-)OL(`T4/#9"%=;,\5X-@"AD?G@& ++M`.B_&9]+,.I4].'K9PX.+7#S#QZ/'IY:VM>*>M>MGH\>,3EKFS)MIKFIHY;/ ++M'C*WJUUV/>MG,LF8Y-)&^L$A"A17IZ>\^->HDL_4)]PKXR,!3CH'A%9^OG$: ++M3@NK7O[K[<#QLDZJ%#N:[P'M]1D_;7-OSC9ZP3/R"3(?OFF2H1V0KX#WJ0W/ ++MLK)+ZK>?75+)?CK-V1WO>]\=^JS]<Z^/WUU$W+*WMO$.6OG0W^#W[P\.F"Q] ++MX"#W[XD@#A0\/G"5=;,\5X-@#;NLS+LZ9W<RS/E,.I4].'CD<MDX</,/'CT> ++MM>6MGBGCR>/'C$<<V9C>M<:FCAZ/+63IUT\]',LF3D>M\<,-ML34U)S#%LS/ ++M#3U81[10]>RB?+V"]A&^IA^\I!Y"M%(P>@SR@%JR)XB":%Y,F[PF>GK]888L ++MG-)T:-&DC2=TH$V+%B$W1*%JRV3HT4-)W"=).Z3I.Z3HT6-)U$[N83C)P8,& ++M$S2=&C?/2=TG1HH:3NF:3N!^S#0K1<LD$6,&DO2=T;OMR009ZM!L6"+N43`- ++M+N;>LM&$DX+)5C5HJ?KVNN_%WPM2=8MZ"$,"Z)H$'X>`I&OC1P.2%-1&$&)F ++M*-#E3HTPRK;B,3)+IE$-*00E(7I;$)2%^RM\-%6C=_.=+NJTH'%9X/5&N`'J ++MC[.+5*!)$CBR"T$I4LT00=3^J^9XSE]]Z]JYQ)#1.>'O8MS?KV',*U$A7UV; ++MJJ>ND[[J]G7?;S8FC*S&EGWT1WA;PCO>]FG[`SMRJ%'!?SNQCR9*TWO7\1\= ++M^)LMBV-^K3QG,Y,TV;:!A7M1PNI9DY0W>?``4Q?M`ST`$'OA@]PH>OZ5X+V" ++M]A&^IA^\I!Y"M%(P>@SRU%W693/E=9-NLS,V;S;EUUYYYYX\>56VVV6VYBV[ ++MN'GGFWGG3RO//////.//,'N../.NNNM/3UOO6Y>>>>>;>>>:>>ZRZZW-^YSB ++MJXT:&-`P9@EB0008*P"P18@@8&81=5NUG,TF(V[8\V<QYK9B.R:]HO/3DT/3 ++MP0J`D!6-%*VZ`KVDQV!@;U(4`:-4PF,NH*W#3RC83>WF;>G=.YF[NC-S=R9F ++M,C1=%P96UMX=U;F;N[NG3>[JW=W:W3NZ]S-FYMWFO9FZ;&',F29NFG;ELWCR ++MQHITC3V]%XGAIB;@F(<%?>[6_M)W.;.9R#J:DZ``[XZ.#\$0*VK'@'G>';.J ++M:@ZM\AO@`:HWOS<]*JG*KCQ)))*L4X555557MVEXZ;ZTS5.G8":..W;RT[Q( ++MOOAJ:\-K,S6YOVB9F3-[-[>.U*2(%K;Y/O\$=0IPD_O#WZ]C:2[M2<'Z9]^O ++M:!J56]59)N=QKCQ1J]3".M2C69*0JX,.?#[P>+?AGOE7508BG9=?7IRB*%WM ++ML^41*S631G.9>6+0JX/C=YJ,M8T(4.L)*D.(--$"=IC6@@%;"+N@&9'"*@@4 ++M4&A`$K\)1(7AGO38`;WU^@]/!"A`3Y6-%*VZ`H#1'?L\]!@H"O+$+&,8(+&! ++M6+H()YMIMYUIIIUUIIIQOKUUEUYYYMYIIYEUUYIQUQAUYIIUUUC3S#3E@@@8 ++ML8+$@P$78T9D@@((@@8L80QHLT]*K&`PA0"]=P6P+V!!:+HT_:/4;RK`3&C! ++M!Z>CP80+\WNXQ5;5>(J@*]<8;QDBO("M4J_4PQ1%AK=F:WF9LO'A)NK:R7>S ++M5,EYL4R]P5F+)=[H+R[S958M@DK16[+O6]JU,=Y9UTT;R]V969JE7JQ;+O,8 ++MO8TJRC4=)YMN#*VK.958E5MX+.W^H4D,O;VJR\=]UZZYVF?AX#KOXU?S<\3* ++MJGE7OQJT4=>>\!F&#K?-?#:XN5R%%:[P'Z?3N*^.H4[[P][Y[]7:W+\)=M+7 ++MQ(4JLE/S:QB=X`;]!VG?GRGU]PM?%C*^!*K7R=8!X?;EW,>[F7\[0UCBW6C< ++MXKCWJN<4*U(`#,H=[,1IG1F:#HE275IT_Y!R[WA7\O6=T("!"@%Z@QB`JX$% ++MH^]%[1Z"LJP$QHS:'J]4P:",`;S<8JMJO'T\)8;#>!^SR`O5*OV,,4#7M#$% ++M06,0EL6(&&(+&C1!8L8,!##%B#`G77''76CCFFN^SG#CSS;;SS++2NO....N ++MG7&V-,,7;.6N-M^88>9:$8HB#-P;:%Y11).VMND%NU>L5YC-A#\Z@TOV8-"C ++M##$L4QHHFQ=8<\H?:-OU>E$25GCJ)4(:F:,H6+J42*RQ9P8+@86T();&!`;8 ++M0@H7[2]/H+L6(&*F8JO*JLJ9F[E7F8JRI63+S,RKQ.:ZRZR\3IWE[F9*JJK+ ++MLYMWBR[O<P7EW>WF9FYFYN"\N[O#=[>5;V7LEVW,<=51N\LI:]N].;C-Y>WM ++MB[VZJ9=4<RB!O*OH@;7E@15CWA\JA5&\\_K^VVY\_AM:0DMUSQ<\/F3"^!+" ++M7RFCWKZ$DDJ_G"RB,0_QX>]WAFV/OLWIO[1[V)[^^=+HVW#GO>W[1F'=$J=' ++MS@N[K@`,8D"%?2M?BPX-WW@GQT/2I&6N;9YMS?$90)E[7`U*H&=M-"A<Y@%& ++M+]DFB6:VAH8>:,"MAABA5,:*(L70%C("=&V37J`?JWV@C`$,P;L%WMW8(N[% ++M^S!;#"VA!%[!A*VPPQ0L'6"87Z'3CC>>LO,.MMLLLL,,&&&\KAZN/,KUYQEE ++MAAAEEUEYEEYE6&#`P4-##&!C0PPPQE>888L8D$*#&-V-&90P6",&!A`A`X,& ++M#1CI[=51!)!IMF522TYM5A8-:-H809>LW>[>25LS2[P5M5EWLR]"W,.*P?:Z ++ML@F2MS!88RA>I!#-W<AJ\W,VS2NQ>VTLVZI#-)0NU%$V:1O:H*T:"H4*N,/' ++MN-TVR44KNJ1B2FZUJ;<>8VVRVFVWC>O0D4=IZ\UMMTWK>MZV@MW5KF9C=MTB ++M\O*PS'<)>.D@K*WUN.M;V<15RET.B8`+]7U<]``Q3[[@.[@`&)&V;O$:Q1?N ++M'=P54AHH#R[2'ZPG$^NLK$RT.%R8;)FW78(!I`,L+J[58R[J)&2%?(T4,Y"( ++M93(><T'Q374S)@9NVLXQ<K,2W$3X>]8N]*'WM,J?$7W7>WA3%>-1NVYBZ")D ++M`"YP!G.)"`L7E1.KS-"-9B92"REF&DI-HG:JFF[+Q>_`#\`+JL[A^,J8/5ZL ++M'Z@Q`01"C!\#E:1),B$#&#.(VPQ0T,;C@8J\O!0D$P06*0ET#`4,.CS@H1P: ++M*%@@C1EBP@X%D$%DX*&($;HT^L"M#VZ#TV2,C"M!76@6#X@@B"QIM5TVMNVZ ++MUYU557'&9EEE556W%55><5A7CRKIY7GE5YZ@V-&BQ8H6"""+]OHQ@L'V;NG9 ++M:N&W1,NW<*IRJ5Y+Q&S,O%AR;DEF.KUFV*W-.@F9F2U(WB%QS7K>;(W)>[>B ++MG#+F7E75&C$:MRS;.XK1>I04D->Q)FLNJS,;=U=S<S,.2V]FDS,.K7DDL[N3 ++M96WMRKQXMJ!N.TWI=;JL9X^.7+!E`B"A6Z"#5O#)`0<P$&M"Q'09IS0=TYNV ++MUN0'!@-V;]5@Z[V&\E-4ZH37A/ZY)R#,?.^^\!V$[IR$+6D2H'J0XOI8TYDO ++M*'W,C;!V^7P\U*"+))(L8#X8OE>^#OT0T+VNY\)Y>Z)130!?<LWZ3C?S^='[ ++M(GTIF]J2W3WC7;415#P'WAXCP"S'>IKS(&&Q,\!]`3"M^47PW8!U)\`'GUKX ++M7\MZG]R\#/AX?=M8MVN`DDKUV\R2\+J/XL4:VMW[X>^?WAFF/X[ORW*2OZZR ++M][>@/W@/O+?OIFH?8.TD:*OV`BW@0@J`5*%-C<&!"Q=W=YHH7!A*8P;@;P;0 ++MP98N[&C1@@P8*&L,:)!2\)Z$2F(,&"Q0-NA+&.LR>T:'HL6&-P,5!!!+]3&# ++M2102#T75C=<O,E`C1!OM&"6O((^`LRZT.^Z=,*='D\FVIJ-QEEF*\_/S]HP6 ++M`]K:NMO7KW11U[@+K24LO'@FO,S<$R\931J\4W,S$<O:RYBA"S*24E7L=N]J ++M[O1AS:S*S<RKR]IRI69+VK**P0ZXHGFPV+IFKD.X9=9*.W6[F;5.9B.[DN9# ++M3S=9;M$O=N]S:MR\>9CVIIR&TDLM`8'5`4-T8&T,`WV>S*%"PR6_6+)RA1(H ++M;,],*/#W0/"!68.8+JY]7V&9_76*W\/!"2+=K4^=BR3+DHY/UZ-_+>0C-ARI ++M@@AO2)VT/(>+"=KWRNUQP'=WA8:I[WX_;[?R9T+Y&3YI![!#H83Z"2NU80A( ++M3R)*\5DVD'H(38D&!"('NAW55583UF`Y9B!JL5^%E.ML-JAE*&0KKS"5*F4H ++M\@@"`((?9[CZ_CG]`>_WY\3TV'1#YY[.GR(#U/QW+W0$'D[>';NK"NRPJDL6 ++M5G+L5+PK/"D=YIAU40_G^Q5OX"]G,H_+-@A&E'Q))))))))))))(!)-YH$6< ++M=`\,0K5;7T[,VE/L]5K>>K:@>BTJZ7W4'@6X,3OZ6#,6<@Z31H5U;<Z/=/Q& ++M;+&HYU3=%"1#=M_>&76W:RZ^$DE6W\&/G][V7T^^V-59O7F9\&\C!SO7]H^& ++MY\:N#@&,"$"&#."%L9@P5HL9XC*&@DJ6+""%AB*:+P$60AGB+%:2*$&00 ++M0,98UC1!!#XUL61BL&BR]%X*I$[H;#8(N""$5@S4-H4%HP8,"P,`BQ;VA0P1 ++M$4]>AB^5IBZ4KK;K4XZQ?.E>.\:FV)ED4`K@#$$E>>Z7-F5DVZNW0JI@,E6Z ++MJYFF]V/8G3W,L$E[KS+V$6WKQ(I5,&,K=J)%49FZ#(]@.4ZM6RWBDR7BV10( ++MK+K;<K#E)M8]S5+M);+--AV75IS,>UJL5*AIYFYB@6WNO-O%J:&XH\B2FU>Q ++MDV\RIM7@5,&22"6-K*&:4BAF$Z*P6KM)&*P00J$$DRK#&Z)L&4O>(^1?74"" ++MV74#'==EP8ZX]0H<JOX#W"'UWS/VFQJRQ\"/</:I#[/E*@DZE]:[X7U]O"L8 ++M)+:QZ:9"RWL4%HWG9!FQ2>PE+63%/A==_QEDO-^VZ_*OR3>.J;75LFY:<.(+ ++M9>E82444*)_#P\"L!6=X_39\ZS[YO[Q4TJMI==<))*;&?6]ES2[5W\]&=LN8 ++M+J=5\^@ZN6$51N\E#?KPW@Y7&.(5.HHDU1AE`T5"&2E1%_3`OMS*&&F>\`Q' ++M"Z/Q>6JDY/Z,_.]O<%SJ"&2?#WPK8&;^Z'GG94H4PG,E,3/FW".;YX)EUR9J ++MYV_`"W*OYN+;G5TV?7Q[X7Y;5ZMNOA))2IY>11^9673&+MZ\>M=)\7*@RV=^ ++MB5/JMF;<,X?#ZKEBMI_4GM\GT/=JW@M!=%?#N$%C@Q@5#ZA!05ACZPQ@SX6+ ++M$"#!L1M5HT-^I"YHT)H(07>MC:<!(,T8+T-L,6#!!,$$$T6-&BPP18I#'?J! ++M&RPE=XA690W1HST&@BM&N.&W66O/.LN]>::<575],-L-/$(,P4[%"P@H&*SR ++M&T-&4$AH%BP\RW@(T(8$AF7>@6PP9EN\.[C#I"\JJ6/+>9MJX&HK#;"J;NU0 ++MS$\L)[DITZO(ZUW))8M56WBV36X\DE6I-O-I226*J&JRV+M;M^UJJT:U<VLW ++M<)VD9N2S2P3;UYDV6:6-;"M-6H\F.U&)68'5Y"VV[T/!>R[:T9F;4>9-2NY; ++MQK+S1M24$SWL<^,%6V/NV]Q5E:))*`T"WN;`UFGD@:$DR=$F0]G`/[["^=XJ ++MYB4Z/VJ$!VCE7OWWAI`W-YY[Y9*E&K+^JF/E2SZS5V<X%+8BQS<M[>H4J7P! ++MS5?V+KK1))27QV52FZ=?SWU9KSGFS)J$RI#6T=JL^]3JL^[4S<S/=3$?>5EW ++M7R#X2*?<E\]QIC.I\4*'P]B>(?;V_?<'.J#=E,*^%3:96N7M<#%%-_L4`QMY ++MQD]E\<MV+>-^S`@FLNS)>%NZLR>R\-70S$,O"THZS)!EMW=R"\R3,R09F29: ++M%#Y_06>F2#?%3$,SXNGG2`(`.\</58%4CC0D.%&6:A3:H3!^6H74$&A`9=W! ++M>WHS<&#!8M#`LU#,%B!!Z_,0,4+%#*H7H0P8+&@6,#L,-BLIY=C1N59##&;0 ++MP+!0%!AZ(&-$(T5!`O4*6,6$,&6+9$I'!@RKL(6QAYZ5IUCKKJL>P\MX\WCC ++M;*L7#HV2KMW>N[VKW,S:O+K,N27,V:I,N[UL;;MPFKQ3=>WEBKF-Z;RZE4*U ++MAV[NLJKS7NY5EX)E9)E2Y=[N6<IY;:N[JF]W;V6+EY=V=5..FZ=7EW!EU<JL ++MDJ\2QR&G;U7>U<F0FUE[Y#:"F#$MT9M9D+P)+*DJ\&33_"/O>/SK=W[%UU@D ++MDI.5N',L25\*5]N3H7UY3V:\F:&KD"&O;?/2:-=?STDTH]%NQ-EW]1.TG:4U ++MAZ%LN`?;,X;AAVL+J9+776"22NK1+M+)6OVM#+GHJM4/G1S3=X:TK";N3XJP ++M^JMK[O6UF/[[>S?H(-[K%+*L5WWJL@\N+.'D-2AB;A9+341B0D:3@C4D4DA: ++M93D<A29$<B31\Y1DI*DS$0R;2:]$6GY$VD1J0JCC<,8#:,AN-RHC$U))(XFR ++MRBH0R6TYAH)"@8?02.NL,"_6`O6PPPP8H[2D;1C@AQ252CB3,#*9A)B;DMO+ ++M-=J9-Y(`&D0.*)))))))%].``%BN<+\."!1XW`#1<X`!@`P"?&#&"31U_0_G ++M40B3H&*,PD1,?05-SYC=S\VF9-IJ-)R)N&QI-F'+69@P>H>SPSR]A9:L6+J" ++ME<NPO2[5EL+S**PJ45,P"@!!ZO#`%["TH6<B)+0:5$0T5"K@0@I4;B9)C;CJ ++M4_8/#`/4/#!Z`4%9+1809R",0U1*=1H4$(98*%4J.`7X7Y@6!80LMIXD92%! ++MC,JO3PKR%AY4;3+]0"%%E1T480*\JJG5(*C31I-")...H&=5HPHLE()H6#W= ++MK%RN^'/=NA,#JC=6))%]F_9782D?CT=Z??MZ\]<^/L``'F<``,^=>9X)YYYX ++M>=P#S+@!CLX`!``!/TT^/7M?;DD<AP8SANW`E@V?78^&WQ&CA`PPPPPKUH?# ++MX0?(:%H8@L7@:%B(;N6+$&N*VK2L.,Y999PQMIYAE6666&U,(-N!#;%$$2M% ++M"@P0LH(/UBV%HT,*(($(A8&'ZY0@1$&(7FA$:)H0P04+%@;XD0,@VQ8K!@(( ++MO<UMMLG(-W=8-1TV3,6762UN.2K>-NFWNX]R4Q>8&+5MMI)WJ2;;;%!4FV*= ++M9B%4Q>18*)MZ\:$>-M6<R1/87K;02UH4ACJ1MMO;>V]TTY4K4Z*JQH)9(F#: ++MH$[KU`G'!M7B3W<-QT:[:/O"N'=#E?"21'!<Y8H_LQ?#YG;/PTZ2?OGN54UN ++M4K,WY9\`*NU1M"\^OA6:Q^QM>7/\X#=42V5HIG$.Y.;KU(CH&`0$)L`C_D^% ++MZ+K`36,<&-L;V*W-%Q.<1/L=&J8MGH+&!>5P\D80L(PZX`')^ZZFZJ&,=5': ++M^$DBM&K-T=(1JW5EM0T-BH=L,@R13DQ4Y,NUY:*+8HO?K]H1`$")Z!JHSNF5 ++M.V9V@NLG>;J&*BQ@7%M#LYEC)_1["R<AQC=O=H7]AZM$DB:YLGEBJ8>0V>YC ++M%?$<^;SAS$AHU#5I.[O02WS@^!@@"`^@\QU\+O*JKX,$$$`V*I6'XJQF95:K ++M;:L,JL5^>UUW[>Y55:JU557'55G+?'9YWMZ[%(R2?-]0OE\ODDC>>A))?@XX ++M88>YV5I+L[U5=2S?6U56=V.\!E`@B7*()!!88+8)!UUNO/':E\"(B(HB].BB ++M.3#CA>>B)P<\\J*(BB/)RBKQLX$4S2Q%Z&N+QPW-9E$@T`8,]@6!$T8,<PD\ ++M'$\5U3MIT'F-P\(JOONH3/I>>^SJ^$XQ4,O-?8MR1R7>IQ&ZR`H9@[3MP?X# ++MK[V!678T>G>'O5^!`0)K]6CM=70_1+7'F83'\TYN-*U=V^P1-::3I=*[5>5T ++M[JY67TKTR7-O,";4'PK=1O<H5HE:[JXOJND7+(M_+:EBI5W8L``@`?>\,(@X ++M5-L8=F=-Z7%V;\7/K72Y\"YEH8>C"5'`[[=S:+64L.G!SI0<N';VE8S<22WU ++M3CVT(]4EU6;9[VGT'WO).^8.8N,'BC59?K7S6BXYW@K]\\>)K3S1T_)Q\G&7 ++MT.3&-CVWFG'G77F/1ASDG).:3+339'IE&8==C3TVZC/&66&SU'IQTXG)XYTW ++MS6_>&>O6U3T>R'9N9AW?$"Z'K'F1:'F9*`]O@QYCV$YX3PT"AOAA!BP1*QKW ++M:D-HHB*]7U^'UP=?7&7-2J[NM;&!$6+JH3<&@>_TSP<-X>^8?*OUW`3^SM)M ++M4US-3+5"M9@[K6H56J7N5PV^S\-W^,3\P57W?:[:<^",&7D5U7[<'Z/N[7^B ++MS'9BL=`A\#B0VZH9JA&]K3CLHATZ<\SB7B6:1\$DS11C4ETB927T4Q9=!4V: ++MQAO2C]OPF991>+SC'L'K&'*^5C=(I1^1:^RLQO5-64[>D`7ZA0'P81OW`70' ++M`;X;=;W&\IN9'9LVSIP:KF$U.1-QQ.)V=C4>-O98<.>>J];\F3LT:>QICP&@ ++M8&-&`:;=4@,%V!E^#A5`/S\=P#`*K<3?A0Q!4?3T]ZO7X6-)P">&^%#2[$N, ++M8=V:JAP8@8P7Q8`7O]@`XZMSZ_='LF`I:?%U'HB`_J\.FCOW]_9B>U>#^#$S ++MAQ1(P%9G"O+P^$GI32&6P:P*6KE#*O+K$AMN@:H%,E2X:9$5&"'1$3O`X%PP ++M4!!9(0()=2WAJ<PJ3E>@J(HXE0IBQL*R(V5R=8#9?%D*`@R@\-XV<^207U=\ ++MEFZL"NQV_5576CJ>:KS#F0=EP=U:4/;X,,#[R&C`,`P?""P-T:-3+VSB99QH ++MRR:;*7G6WHTQAX_;Z>]OM\+`S`(!OO4RA7M&!5HK?,6;]HKV^6:R-
H:= ++M@GH-%>O#ZZH.PV%=`@8LO0'Y>IS17L]8&C/8,&>GM\*:VP:5WQC#PR^ZX9KB ++M7!5:*Z>W!*JK)I$";>[O^^!CG..'SR>""R[LDH!,F0H8<%_4EM+P$S2ZRSC\ ++MJIT%8JG9#_;*!:)7UGH<U]V2+2(P:*5';?8D"O>`^\/>WP^0]=31K7+I#OU* ++M,A,52%NHPVR8A1":")*MY5136X)15GA+8LBZ4D?D74#A1A9Z-^A19))!HRD1 ++MVFT?3$*-(53:DB=H(@V4"22$:8I)FB&6:(1[,Q!5EE(R&:*`?K%>@P54]7D, ++M+@R-,-*1EE@TJ-4TBPS0H)[56HD1;IJ(DDHHE$R,:4HD&GP\!94ALL@Y;.M@ ++MN7%Y6=,$C3"2)HG`R1A0;BDD*A3>TI5)N%[POT]/<$+5998SAHOV#/6-%C`- ++M0T04!`O:!L]E8(<%L/`V!!@#"&`:O/S&Z)[?4!HWV#!GJKV@7<L"B$&+TL5@ ++MP;6>U%[0;&^W:TWFG,>MB;D+T:A!,VQ:N&UJP9F"JU&[DL(_ZA[W*]^`O9J^ ++MTGT"FKR,^07A0"$,E1"A3B@O!GA/>GAGE[`49%A")$5`BD2>/JM&!W89#:<2 ++M(E&54)]5&BHU"D26TS<3,3)-V&,CJ@PW<^=;:D\U'9,R-0Y(U$\C8VD'J\O: ++M#=V&+M;,39HD4J!J*&&BHV$(A"\RY+5G$(6%`@S2D@9I&I)2I1PMIM%^09IA ++M!QMFBC*D$$-+!GL]0]`*`7KS,RA@&>6`L6!?K`GH+0LLA1R0O#6U)09HA-(Q ++M-HQV&(::#E(@D%U$EE4,U)@A@0,:7`ZV,25`R1DC-Z0(CGK_7^<>91JB1WY/ ++MI7.A0I(^9BXL,U2\2OM<-W4I"TK<0)\?K/IB#GN(L"DK*2)1-+R,^>;/K-': ++M&3ZMIA%UN#,BQW=XIRR4>H6R5Y"@:I+.@$`P#/(8&B'Y>9F4XDZ4)$5%"4Z( ++M,I!N)03"T]!0*^]X3YZO8KAXPAJ-=D@A!!2PU9+I2JL?;?V#3)"]P5L.&)J0 ++M,HA&I0*D+3@,8E(.J2!AV=?U,3YBN^JJO7@$-WW>D/=E2S9F,<'\+`^%BQ@@ ++MQ`C`P15#ZH[#RL%!0KT$@L"A0JL&C102F[XA";5Z:W;A6895[,F+:O-CE ++M[F6;V\M4JNKW1EUMC,@S!ZOO@/$7NC!AQ%E.FTR'\OW[X;NL[@1-]^,RBO(D ++MU>W^3=']%N")U2:K;VW@[H4.@VG9O6W?1/LV.VPRZO*][P\/6/>`(]X#[P\$ ++M7+-Z/GC?)8O4321A0:98,!J1LR9]52ED&)5`X'($*"]#'=;PSHKRR'RKF7VB ++M#:&RW,@P4*$]06M1G:@H[MNJFU4H+=SA_8_STRXQ(P#O!(#&P[;J'*DB3#+I ++M541MOB*HX0CU,=>V51'=W3+P]P`'W@/70)"`PT<009#+)/WU7@X4"-$8^$%B ++MPV+P04."5BQAH@8P4,\D@8;JS,N\+E"Z$X6J-8PN%6<32L?'RQ(3Q\?;( ++M8^((ZGS_N'7IO7/,/OU[(`.QFD1K$#KW!U!>$B%LW,L,8PHQ%(Q*[WO?.XMK ++MR77=PS3GM#^-<@Y0J?;]V!<`=\!>35#2&;I'^X"QF4*_=559\;7TEU=V;``P ++M@D"^#&4Y#GZA)6(+6^`'A`/`(0((>@3V17R:-GKKV]<]HZWX,]551))))))) ++M/B93[>FWU55?DX\VSVR-95R4<'^X8%IZCAJ<Q;5$.!T;?HK88IU=W"+IP$6H ++M[:EBY4HIRI.OG/MC?%:?)48<(-4V<J,WUC*P)O&8Q*1:5R,5ZO2>^^9/?U>[ ++M\UKS\````"4K@B^(8FCK'+!@S,K,&#!@P8,P$UZ96)B:JJFJJ:JIJJ)(K"Y7 ++M&",,@O8#6KLBF0M1;B,T4U"Q.J>B1ETXJJ,_E1<R2A+<D5*LVA*!=;5>=U!+ ++M_&A^\!X819^7>Q07Y#3AM*+$(-;LW`E#?I;K[X,;->L,AP(J3!JN??>'O>J/ ++M9[/D*/$90A]1.VEA1][SU/.87R>AMC:WJ"7K6!!BX$XB"B>O0"!!FE&<G%07 ++ML4QMYU;-.$U@NZ'31=1/J5*].U09HP[J#G&Y<"MJ9]J00+#"######`);*;; ++M;;:2=K63SV&JT7GL+TJW73S:<\7$RO7I>?U>?(!!HV,Y@!@VZ@C+2*WVB(EY ++MEGMPJL,/=LT*S"2$VLY>HD("U->L@(B1C-9(5QBQJ"Q=6))4@DPJ2IQ+PQ/` ++M1,BP,ZDT-,^T3K0VJAPJMZB7C>$XDN@TB[)@L-&"(V`G;7V(0\LDB?E:U<21 ++MI,8]W".J%?J`1%)VPV"HG`,ZQ#4(TNW;I(<I5+@GOW]'Y&L?YNN_'++TXV@, ++MK\%RO$/4/+AI#L%4PB*`@KLR)]04^M=9Q%Z/41$1%%557K//K>X`#[Y`;X#P ++M@W]B''_6M#A1>QCY;^?-M_,Q;QM>[2Q5Q3Y-B@A]\]V;%"$H>Y!SX?>`S[#\ ++MAP9.#LHPP8NR\7I@AHB&YD#P3#-*(-'(0(`VFN<B8C&7;M(JY%8N(B;Z$:DK ++M/A/\+3V]IY`T5L?F"#%S:?]=K[26-I((2DQ0>PD+VFX1C%I"A>%M3R'2:"3: ++M&*GPAY%T'6D.A.JJO$=0D`:/(O?QT.)T=^4Q/0A[(KY,^%$SMBW`6H)!V"YS ++MK#O6GJ85XG0J#H[:1``N%3-K17+3,G-@YAX9[.D`PFG1$2Q2I*(F909_/>^/ ++M<VON\/>T_3?QVZE$+OR3^5<+>4>S\(N?U.9HGU;.8J':\DCR^']?>W]J`18S ++M41MA$"/6V=K8/(V#%WTPQ34,##,!#876!WZQ5;55>U3^="6)I20IM/J=1#CX ++M0*J0Q*YMXBC<I`[7O`?L]X#[WA[-OJ^M#J:-\A]M4LWHJ[G^>X1I.O,UMHJ5 ++M%+_7@_!`FBVJ801H6(&2X34RM:=GHEQ9)OW)Y>WNZ]5]P7W%>>HYZ;<1V#@3 ++M$OW=P0`=Q(0=TJN:S5(B"Y?9F_Z?HA-&&X#/S>%P2M(XF/$O=25E6WE,75Y( ++M;,3F%5B'&VP1$C2OL%2X7!F6BQ+7Q#-_?E\LL<3-MODQ-2T56CX7>DV/A>=B ++M)H,(%,,'(O@B+^Y*MQ!9_O[.-V[%/#`B705;]@QJ'=H2YM5N:9ZB4!JN+"#3 ++M]2-D*L$:E:KT?$%5DP$+L8+'4(J%"JS$0TD(,[NNLXFW/?$?2?0)):EAUXPD ++M*=L*F'7V*%,L57I!AS+/MV5!E7O;8(@T*U>7<V^%&4,B)TR4U",:B(G,54K! ++MA#%#B8?BAH-UFP8<.#*^0&V_WX>'@/\>GEN=$(`Q-#_&P]-BE;9"_&?S]]#= ++M1=GAB<MNZY52=;`!`/5SMHN,G0V52X'!U&FPG_*"E+;'+@/>\B8J\?[K@I/& ++MJRI7@/#B16%+?KZ-ZABW4]PL;W$UQ>VVW]>2S.64.7:-_L_;NJ?3IZBOF2)! ++M<_>``?[5M2M#!LFI&+!;(S&!B9B(FA0DT\6MF*S>!,W;W:HRK6:7#Y0`)669 ++M,0L'K[.`OE.>,G=@J[L4_[A851U[]X>&%N,J_Z1L%J]CL:\PO^M6/VM3338S ++M)HIN&V'Y:T>]X`&95J\/]_+Z9UR3MZX-LV-^`.C9T(?TP_$+X*M*%$Y##O`T ++M$`#$R@D6UWILDJ^L'&HN%#!SO0]QN09R7L$V&R222$4222<VZ\66<8)D8M5= ++MPNX:4UXSC_SE8%JZZP$E%=3%TZPNJ@()=2L%?2_AN#)G=1)A)MO4R.<J8[D- ++M3E8_>'@$U4)!)))!))))-28>/PKM&7U55@TVV[>V^J[S?N[LX*Z@$3<NMO,% ++M:R$"`;AG?5$6^X1,ZP75EK%A,!!((K;0=7^;S:JZ\_?O``#39E+:.U_/M9GV ++M8J[%]0^&]E%[>>M(AU\5+=<E\M&G.5YQ*SNPRU)*)A%EM5.67N7PT)07QW!8 ++MT'VSIGWO#P^'U+[=ZQ4^IM?$'AMA,;@H?3&NG.X_F=1IA`TQ2N?70JW`D(R] ++M2?=CSKAVEI7K":W*=)F?>][P,````?;C[^_+YY6NO2(\23YE6+NT+=1,7\=L ++MRIW(?9Y4,4$%B%9@KPNJ`1$W,E@FS&]MB,7L\L1`U"C97L+%Z1$08$9D5.(B ++M)B)5G-'!C#NR%>?/=Q(&00.H]M#?.W'"X$`V_.H&!.*X1`!',&+,X6'FA0S8 ++MS:OEL3`;&;!80F6@X#@UB)E:@QQ80#V6@OSS\1\8M_3];6A3BWGX=/ESQ8WO ++MRI+Z_A4S>S5MW/J%^4-C+6@G:F;L?54WLR4R^65E&"[MC52SX#P%C:&U])\X ++MGLO[+O/LMVQG+EIKK-*X;S18ABEA_>``6DCMW%\]RJZ[RN>#"&D@H2LEX;E\ ++MN?;$G+3NP1TPCM)S'OK!%(SYSLJ].%P66%HB`3I5B2NA34(UJ(B73%89<1)$ ++M/<R.F</)7&6AS#*1E$"#>)W=,U=OL#1+LZ[TFHAZ0@KJ^=41$0=W[KF$8[N> ++M.Q;>5+0J8V3:.9_)EX#DUKT[NRIG[P]XVJXU`MDO]7P^T1]$\&=-VOJ7U?6( ++M3]@:98;T$\(NU2]6\MXY>V^H$.KQV>%572JJJ\O':J.P_(71&![]O/,89"F6 ++M&Q6:'S4(_9'+(R4:I%30K=!?4T6"*]1&*B_I'^\/>UN]*)))-"KX:KEZ2222 ++M?0:*I6:JFI%,K73B=P,H@`QE1.1C$!YN(B7E*-1$>CS[NVVXK&Y.X;GI+R-A ++MQT%BP96)Y(F'#1T`""U!Y_(*BI[L^Z5]L!WWAX069\+-I:RSO9`>EN\>-MRO ++MY[PQYIM)DG5T=']^^?[N^I['\D"BH2K\ZQ.HE#8?W/)(JUD_RT#.S`0/A[P# ++M(J<@>*VI\?;0>=X[I]0I"JV<(@)604E`#V07@`ND'M7P*=CM>ETFQ](;7M./ ++M#9Z5=[V;Z,1"X$(`YX6!?H+(?F$'4DEA!5`PP?-!`GQ1,3+L"Q8JB**1%E/@ ++MW0$#=XDT%-<43"X[I;JQI=&7%K737&JK6KG%+E*QMEU2Y2O/,.9AK=U`U&&M ++M:AHTU<C)B9UJ&C37-0U&FJ@`@$$!?@&`@Y/02>A11HII%`%*K7,3G:AO3IJJ ++MUKMKC55K7=-92H-I=4N4HQM%<:XURB;&NE&DJ"A9%%,H&DBTCXIF)R3T<))E ++M(AH-H((M)J%0^A;2;9HH0IA2%&ZLQ9<XT5G/&HTUO0T:FMZAHTU:DG8-#4:: ++MW4-PW&S;3N3+/,QDQH)<P,F<Y##-8&&-!+EEM*@U!1!-!`@JQ4E(\(B!8883 ++M#T*JJ#9(@]^W5UK>&K5[HOO>'J$!^17U+Y/Z$1UI71CIKEK%QK%UQ7&JK6NF ++MN-56M=M<=8VE8VE8W,,RE0;2B-I1C:7++E*QM*QMEM+EERE9W=[[TQXYCVYC ++MQS'IS'CF/2L7&L5%K7&N-=-<:Z:Y;LNS&UVT/H1WSGVM/@01]:>&*K-\!X/* ++M/D1:[SC+JW7.]URUB[:CFY"&I"))#M!Z)&9`ZA'20?2#2'"9$'L\)X8!7J$D ++M$]!*;;2U^"\+`L"P+$J@/4`*`KU&>@$#$I(BVFT#I4))"4*3?BVG1##::*;8 ++M<2D;/BT(RDS<;B5N.C1IXR%,UA"822R3`.0W!LVUSP.!&Y(C<B'9"<B34'8; ++M-S6]H:1)HDF41J)-238W&VKL)9('"$G(20VB1,P#40;0:0Y#9MK?')(V(;2) ++MI(FX&@X-FVF81!N)Y(L1VJ=H`=@+V*Z5VO;M[>'-7GUSQA:#T?9XKX<S>!B" ++M(0*G"Y[[X`>[+M?4OOJ))U+DB22222203%CN_*]MDX=D(```"'J[N?/GX\\] ++M?C?BOGK]/'L^'"B11Y#>K;[.J7M3]NX:65@H\D:\A:!P_O>'B$"8;/D?,A'F ++MZGWX?BRNC3L^H?!WJA-@I)L7V*P5B"?#P\-P_3/'[UP%/*H]*ITB]*]+Q.&^ ++M<$3RHXB:B'B-0G)(R&B<DT.FV]4FR,)&Y&TV;FMWV<Y8U<UK5PN<>NJ)2<*@ ++M2<)3+*JBPF2BRBF74C-)&+C6*JQ:UCF7'6:;B/2U.+=JJ*\E3\FTZ=RDZ+<; ++M913+(->P9#1=SUJX72X!(<-XS<^4AIV4!OO>`./ZRS!"(X9(4S"C/A0E;>^` ++M]7A[U>]Z>]0$1R&S;5@?@)N"&I(&8DCB)-@U!R&XVUOP2@S$A'4(CL@AP21F ++M1)-$'$&H.C9N:]J1$'$C:,IDV;.O//'GG77&C+#;S#3RL,L,)YMPZIIYQ6&G ++M'FF'F6U*\KJNMJZZZPXXJE53C:)F).AZ)#I!J22<`R#0>1J3L;F];X1Q(W!N ++M1J3:-)R-FVKTR1$:DB)N*(&@1#I0'BJG8KL$3H532B-1$[$F@[#9MIO"H81N ++M-S;;5EWZYSC#%N,YX#88@U)-DTG#<WK>PT-&4:1J-S>VD:&HU--70,A@FR32 ++M32-IN;:WN!/20P$FH2(\A)J$.2$R0T2<B-2.C9MK?M"/$5#D["&8AL).PA/1 ++M(:A)Q$F9!J(]!!X9X5ZA"#1PR(NH,O3MACO(V(1J0JT<;3_1]$_5\_^:']0D ++M^QG5-A\?VGROTZI(.?@=HE/W`N=K"U^/X>A??_E'N[Y]2^OU'#XCOCSO&/-: ++M;O./5L'$ZKA7VWXOUW1Z=?'U]X1/4/4H<'\:H><?CZZ[NO7OZQML?N\>B=@8 ++M10I3@M)]:='4552B#V>S!L$>'XP.WU>7<!ZT$/<P^JTK+:#2RB%2JP*UJ5GV ++MK\OGC=X;RBJZWA6%2N*(IK6),D:I1U8&1#2+5U:AJW2`;0D58&XF2"X,E:() ++M2HEEW0H+%PW<,:UI#!%8/8S\]S'[<\@_S$_*SIZ_5U^\KF%RQ,[\<2ZTKS5W ++M=W=W$5589HB(B(B56<;9ONZN[GN[NUNZ*JJJJJJIM;M/.JS?=U7=MC&,8C&, ++M$W=W=W=W=VS,UW=W=W=Q`:J@1%507&,50N(@F:+N]4LWBJBJP3=W=W=W=W;# ++M&,8P%JKJHJL-C&,8C&,$W=W=W=W=V]W=D[B.7=UV[(M0.[MUNZ"#W=W=W=W= ++MP@[NX$$2QNK=W=[N[N%"EYC,]!GB("Q=AHJ7N[N[N[NJAV9ZJ:I<8Q5158N[ ++MN[N[N(K,UNJM*]W,C,6=V9W=W=59F7%CJKO9!255O9=WP[MW=W>[MN[N;MW> ++MW=W=V-[=W=WN[<S!TZJKM69F968-W=W=WN[<S!U&NNYN[N[=W=[N[NS:VMK* ++MW%VL6K,UW=XO"X4XQ=X9;:[N[Q=WB+,1#U%3$5=XQC%W=O-&F%54%35W<W=W ++M=O++<2:)"D&J69D%:()!IU:"02S5-W=W=W=5+LS,9EIN\8N[N[>[NY))77W< ++MMW<QM7>+>[=[N[NJLQ4VV<QY=XQ=W=VZF[NX$$$$,P69F(NK1,."204+!2`/ ++MA)S[N[M[N[I),S+ZQ>OMW=[NZ/C&&BXB+JEG*?P^0143S]'=XK_/YQ'^9//S ++M=\'V_8HT7&O8UM0Q^#3.X#?9]\8E,[G;'U]('`(]'D/+S;S\X\XAI9ID^KU8 ++MF8G`QZ[N[N[N[MA"W=W%T%JJJHJDN[N[N[N[ML8PQ.(N9F+H()!`07=O=W=Q ++M:VMK:U35=69FVN(B'N;Q=K:F[J[MW((0.[WW=W=W<[(MCL(9RDM52::W+N\N ++MLEV3A>6F*,S2R0S8F[J[N[MWO]#]/R';TCT=/L[+XOX1Z[Y([C^<;+N/$+L. ++M$0!1W>B_9,)7]L]_;ZIH4X##V`>E`0A)2?'TH$V>XIQ-GQNS/0IV^RZUHY-# ++MGN]N#`T/''\*\^G`N;TXS*UH8%":WK"JWZA/@"'!.?`,!O?3NZCEFX`0>IDZ ++MD@,JRM,JK>I4JPA%C631^0E$'O(`^A'H*)*?+0;/*B!L51!V*<B//L.[W$"1 ++MH=6]@`'QQX^W7>D?#XM\'B+]('X$?KZ#XPO1(Y\?9W#Q'L3X8;&@)\_M$L/U ++MCV?KY&0$$H%`_YG]O/(9&*=O'O[T140)VW[_HO6]`_(&?WCX>U^VNN?^:!`L ++M"QE0/;]R_:/N`0?$#O[Q\6^)"_4WGW01`DP7CZMZJL+5S,"F,[@UGGD67,$= ++M9G#-S.?7V)=FA=8(P&Z['G5N"5?<,5&WE;(+M#=FVMY[@/2FYS$Y]IZ<+O;& ++M$15CU#,?"O7MT>86:D8>V]OS4-E7*R3L9[U>[F]M*TS)WB6*=X<VEID-WMV6 ++M.@U;'NF&4["OJX.SUR\YC(UP6.S@8.C+Z][,?9E+3JI\.<ICK?0;378=H)<2 ++M7NV+-9=*[:.Y52NVJW!RK;-9O&YV`WA&[9Q6=O:JRBY'=6N.[,'1;6%TNPI6 ++M(]H0A6=K;;%OEQYS5*WIE:,JYC;I,3H;.6)5R4W0V^3ER3,RPEEW`G*YFD2^ ++MS,5Z-[35<*I-7TIY:!L2L6GKO+%,O>%C95VYL%/,G*M.;B)OM.UUUE&"+.EK ++MO/?3A5*&\AN#1-8Q=4)21/,[H?J*O8LE2]W"GTKKV<L\8\TNX=KL8E@I]T2J ++M(XZSJWN(+VC([)Y#A?9V7V:;$?#&TB&=JKVHXYP.U0U8[X1ZAE"*9D[,>RM, ++MBR=UOH>2E4ANFJ6Z:KL62]QY=GIC-E:>%V]0L.#:Q1EC#7H9;G94[NI]CF+I ++M6AXEJ/%Q"*TK--\\1I&\SM!XR[S+).]BJW6[V>UKLV@55N+*4K"AO05!F)4. ++MPG+3!EZ]QKW1R^!NK%+)?-C7(^FU,S3+<75CV\E;CSA>YM+":,Q6^62ZF$%= ++M@)UQ=DXZ=2&S:"+KF*FZGN5S2M]RY7../;I739G+>[M231@L[,*H07N/NW:> ++M4%<./-FTI8QU9?&7B+,ANP];W>R[8O-L],X+MWHEB.>LC+&S=''31:IEJA0G ++M4V^I&V2<;B[+%@U,AS"[B%<WC>8%>(X35T#AK8MJ:IV&SAL:[.WZ\5"\)J%U ++MEGT9IG+W:(M4*Q9DUXK%<)O1C&XVW,?2ZMC+2'`K.$O`5B=98?3:Z4Y=HS<P ++M:11O'!!0>2@3PF\N0HUM7J3<3N2QCNZNCDJ(US[JVCV/3G03!>)5F;JJYN57 ++M+G6IM)"F1A%=&^T9>8)VG>&;IS"I3,MYG(A&V@*J#+WLL8KG7DF'.6;3XW,! ++M)X\Z-$TQRJ5N]A)63D:Y#KPWRDZZZJ2E"M[95*K;[+M-7AR8LQ=G!WP+M-UC ++MV/>7+8S#@4L*RM,O.W.Z9FXMR^W.B34S,KN+LG<!ZUF(9NJM<KL60U+&WMB= ++MW([2SG:JI"1#W7L4AIE89F=+.9I%-4N$/5>@[CU2<,N[MX<O4Y=RY4MZ]B4K ++M4H-\Z>#C>5=-YEJ^K;YZ7NZ'(17L[<K3O3JEF#I7&;O2:VVL)R\N-WAC):VH ++M*!XW0W%MG14J(Z=W##K&54RWDS3U#&>2@DZ34:H<.O31ZKOC<+J\VC.TF9SE ++MZ+.6=>5R.Y6\\SE9/924U$)X86LM&;0W;&2U#D<G=656YE=4O!UHVUVR+I*X ++MY>5*2OIUE);A[A'+8-6*[L1/#2J5$A9=M#J(NZE;2J36KE"7;JL5'0*CZU87 ++M-[8&8[WB'V4-S>YY*':]SKG9N8YG-+#:I^TV.7;N&X'PJYDTG3G"MV3M4'/+ ++M%WS>[MV*=0*/MD<".HA2NOK2N_:<JQSHL'U#=OH*E]V*S8Z"J/%E'3M85BP7 ++M>+.YYE6A!PU\LKO==9=O-,5@A*]?:@;W.'4W=CEE[?/)W:SU0OAMU:E0G-?& ++MB=."KR/=SLOO.XXG=;,0-NK>9:5U5KNH4L%,MB..&4EKA.=C#UWF^O;7G:IZ ++M*1T662JU\@B^O.=^FX-&;W`N-8>2691V[''!MR\W<+>9H(X4V+P<,%>[A?K[ ++M/#!@%UZM#7#=PX9'AXJK:W`@*]72F-:8V5#%M@\\-%4'A[L.V=.[Z.(G""Z= ++M.BDSW9";I+&+@U(.V'G.M0*7JQ4>F7CIRN/4-YC3HHJ/5#NAO7/8XN<YU6L, ++M[PM#KL*UWQ(EF`JYQ+R*+:DW<>T[)&QUM[S.[0I8>%H/U;>S>H4!5W3NT"Y& ++MF3O*#MP,]>"_6;0&*YWM`K/9Y#%EW@@NQ7:"*K+]`O=%>X(<[LR:O9ON/%![ ++MHK!@RG*-,'A4R]O0->-\9<2[KK=RZW-FEJ5/33PS9F[5:S.E3&+=Q9%I3TM' ++M3V-N^?6=J:(6^6Z[[=NL8Y41TEZQ(5RLDYM,&FE4PP=BNL)-W:[$LJ:#1)[E ++M'(9ZM%O@21O;QS,M+'<T9FAZ<8I&Q9X=[AM6WG-6A0M>RX(\V#,LNHJHHVH! ++MV;#PVR4[]R9S6\DSGG*6=%7A,QGIJI9UGV'!8K;-FW5'JZL.S1C@MY18SM'4 ++M*W)@F@V03+CP;,=O2E,L2DCV:RUVL6O8V#VAGC:SNHKI9S5TZS0VUSVHLM%. ++MT2+S!T%7V>::U@@@D$$@DUCVVYBM%7VK;D(417OWPO9*0Q[*D85S'PSJJHPA ++MREW,,?75H>O==Y+O%K.88=[%*'$XNJXMNCSUS9>WI9*K50U*6KO#9B/9J>[& ++MJK.?$3A7&8_=FY1Y[:GG5Z+M9&]U`.ZR3J%9BG<*PU5R20K;&J]5CKTNR%:) ++MDK7HRHSIW+NI>/3+E8GG70OLFXNTWF+N['$KHWZ,;LL+K/+VBQIBJ]!O:L42 ++M\.]LP^X/LFVPA+U6G(O2,0[NKJ2]=U4H!U0Z^[N&-UI;/D^%*<GI5WLO%DU& ++M0\[%:>[',NC:XU%Y;.HT;)WJ(EZ#RK=R]Z*13MV\D2&1Q=O4X0:OG0,3-I3< ++MZCKV=`8RZ['ER)7HQ455HJMP*A!E0S+P$Q=&-%0\I'*)MDFJ=7E/JS=X*WUM ++M#%V-EDV'E31)PXZJNBKCD:5UMU;O.SD>FA5F/=HXS9ZT,++J9PQK=5Y2J>RA ++MQM0J526TEN08K<XW9D#=WH/:U0L5I[EF5+8K.8Q:#65-%R-R+>[9SP,WV)O> ++M%VQ-4.)\2+9#Z[V[RFT^U&2YRT&LW#VG":U76)YUR;=9>]TOC8S%,.8#!K'7 ++M=5F]6]F7!O.]>8>7.[K$'3J'+=JJK#W.JW(H,RLJZ=RAB1MFS<-&<Z9\Z"%< ++MH6-\RO$$DDQ#JGO!HCT#;+"\$/<P'Z"`BKJ;?O(C#F;II:`<SR7B0!3S>RR< ++M0&":$$AHKT`0(/IY'Q`3L`%A!@FR6=A=-/#&O#Q-A;IP5OA[_CP!!QP$'P'I ++M[(&'ERO!&Q`'S^7H\P$]::U\,`>\A/3]JI#$]ML`T6U(:83K"!TDI\/]-\=_ ++MP\8Z^P^I9'M14`35!6!`&Y3OG\_E]GKD1O\?JW\[`Q[+Z0OOA1\/<X7W>CW= ++MWHWNCV!_[=!Z@#Z5QTYPP?Q;Q\X"K-5,;H@H>GE0T(I^1W_O@-^3T>4[$$[( ++M0DA3TZ+UWRT\&L./O_!(X_!!XM/?W='R_!PK4G^H>"#/P^G]Q<%6O86"(^U% ++M5`R=>O_@[!QU\>>W89SSNP\FJ`'$')IPL8$P"[`V]AQ(+B`K3WLMK'?O^Z=: ++MG+FSL44'8QI6V:0XK=\OCR<:?7!2V6!&[W9C=G=Z'>PRYC(8;CI-S,AB;555 ++M@VRK&&@RM8JG6U:>&@=P<=ED>!YK3!:3[,E@V1#?144L>C,1N]MGFQWL'GPD ++M+V=@/M+G04&]9=P"XRJ4^Q9;E]4P93'+;9CPS%;3G@>$3>XYSQSSLT"5W6E9 ++MU/9=8#L'VP,/9O2S"G8\0-9EL$ZU@BUANNIKJJC8855]#<,L*K<+H1I)$<Q= ++M"1(E6->)&3^>UE>:R'&0I[NL;X48ADYX@=>F&JT"K6Y>W=6&#H5D)_@"<[>? ++MV>Y?FO3ZU^77=-T^'^?7]N?J'4>G'9@I&>K!8^V$9/K[V#(5'/(\AO'Y_5ZY ++M%<2IQ=ELT$CAQ\:R,',R38Z4&OOAO3E1O:CN"IHMW+PX]\=3QGHV\*@8@-Z\ ++ML*E=NBC<QA<87*(O)G,!+.(Y4,!,"A[&):C4OSQK8SK4S1D<:K?>)'2`O"^] ++M,V&@$>YLOMZ0?VXEL+[BJ`BAUH86F&[B']YZ9AEJF#.&''3Z,-[A11\C<JX+ ++ME!89YLT_AZ6\@(FZ3R@)Y=L:0#D9[^^S[WVNEK#;%-FAWAMPSC$O+;5$J9^* ++MYW]5C.-@:<;.*=H8[.`?0HAO.)N4=OW,Y`PJC'XPVNF&/L'BR@0HZ#S[$]1' ++M0Y#-V'&)Y,[5A:@C'(7OX`%RGUCPH-GIX9&ZSX!YC[?MN'/7VNP_U`\C.VR$ ++M3WAB2P2(94#D?]GQ(4C"+*/]BZNA0BL$.$DNL"(=U9B6"C9WZNQ=RD@W=[O\ ++M"-C>%4H2P8D@UZ'A`@HR-]E\8D64^W/X4.WAM0Y^DJ3I;DRWZ>A4D-T.O6_R ++MT.9#LO`V[<3UV4G@<J:;E[#`Y8:8J'I7#:(9D*WWAY5%^!$$3&52&\O2(SFA ++MNPPN/+9$0=Q1`)0<B3RRT89+:&3R+NH$VJ8Z_9[\_3U?#81/`ZX@9S;?,CN` ++M\2G3#A.H7OGN:!&WW:&_HB0R[\*/BS&$(("E4(<L;.5X@GX^,HY?/+E5#C?L ++MK#I&K&F)SZ\#!FJZ8;TD&F[VS27T5./92=#9VY*=SU^/^5V<'FG?HLHD$]4+ ++MYW7"-ASE9[J5%>B8G\$6<=[RGM9`4J\"C!![IY&[C!1QK)P'Y*!N`-!L0OK, ++M%U4RH4U*1O>*C?#,=LVY>#"N1]"G0CR-C^J\_WC=C[\CN!\8TO=S]M5`H0C] ++M#S$)'@M@D]`13*A.Y!3MD*W@0(R30ZA1O`[PR@[>`;8C<&N-V_H>2H"[G@GY ++M%N]B--MJ^7QWNH(_L.,5`IC3^`ZXH%!L5.Q]1:QX[=HC9F8[CQ;P@%8L@M08 ++M`8^[C/WQC+!A\H]KIL:2=\>_@<>7A",V,#R\U]`A0_WY;Q(Y0'`TGAO^@?GD ++MA)"(R2'ZCU]B>K]T[Z[?=3#.]'R<ZSI#[9#5(8MZ:`<\+,!^SI7;Y]_4?9VJ ++MMM-L3ZO/U.WA`9-CCN43/NUX0G@JX&;'8-X1AQU'@%]Q>C>7P5A6A2(\\0W= ++M#D:MVO[7;SZ]=^-R#UPJ'N&I\/APHZ\<4%?IWCL&P=H;'I6!UY;7+/MO+CD; ++MA1&\N'WO/I6,#[<>D.0%X&/L3G?=`@C*@60HZ7)=Q[5Z4[:4+/@I95+3H:/U ++M^S.=\TSXZP0Y)HM]\UPWU,UC\%=IIL0WF5(;6&(0%3S'L$3.^V'"CL2V]^E@ ++M<.U(4PW`KF!A]6X]4`EAG\`<G:@I_0OE`)'F$\Q(S^JE`5(!SZ$^_W?/I[X_ ++M9]'H?S>/'CU.D(?$_$P>R`3!Z%UW\!YF.QQV\&1-H&/<#F""NQ7T_\/K`.P\ ++MG^PLS0V3I]!UAU?+#DWHXGJ9[/.I&FSE)[9]7+G.BT_3O.OG_#R'MSQ")UV/ ++MW[0>2#1&K1119D6,8-1C$!$:*R%(1%K8VJ@L457:<(L?R;;^[V-,*D9%%`AS ++M/AZ]'ZY/9TRGY^V;)Q7Y><SSU_WG]E\O070=A^PI^PCW'IM03JN"<SUUS]GO ++MRF/1D=_E\X\^BBCM^#LGL+YZ+L>C#[.UTGL/L`([;;;#ZR?`=-RJ"<AO+`WD ++MO?W1MP"^-F'1Q/TJ->7SJAY&#P4X/2689].O-X\ATP&#E09T'V*<X"D4OGW\ ++M0Z=2'O.W$<X76%K"K`5%R/?(ZOB05#`'`9H&V(J#,Y9\UMEY]7E8+DWVW)E6 ++M!(/*S@;X?I^+:>3&S8TV\#STK?8O4OF@MPW8F7522#`\.=\=T)65E?!_SR-/ ++M,MVYOVCB$:.Y5VZ/0FDHO9"_?X-@OX=L6E&#:KXU-XFWX]6HS]Y)_N.(7\WU ++M'VZ_<]']3_0HHQB+\K=L`_/Y^'0^Q01S`A/76XQH'^SN"B_1L,&MO!8V"EH` ++MV_,KV+::P66"MCA=MA3#RH+DI!E?O"@AA^0/C*K((W>84L4@X$B_"!B54+*4 ++MHFF;B17R&8%?Q6_K48*>Q?CLKC>U8[`G<%1\C.J5A!=O]#+QD:=6&(HIJSW/ ++M#OA;7#8+Q4IU-/5?94MS\-F\#<CC<K]J^@=R_V4,;J"O(8?H(KYOV.V(D/ZK ++MF(@C#/3^"&U+TZER/J*."+[*Y=_NYO;?IK>,A:R`R"4?A^`C=(W@6B`##4/& ++MEZ5[/AP4((0>)"?5^&WZ2V>V5<:/>-,[D3+=NE/+*%(5?<1W/[&]/@M1[AI7 ++MW*;['$/(8L?E[,R[3S>(!#D:FG7^TR)&3O2BY].CR)6AH3\WSJ_UCAA_?IL6 ++M..T"NY7GV=7?<-1Z=.E#8=+C$,>M-!CGOWWG>IS%./5TB<91IMQU]SB7QX^B ++M]OCI1<\'LV/?<;#80+CB!@LI4*$W98V('9<,&-)"O>5WAI^0_W<BJG;?&]/K ++MQ#;_(?`'[N@==OS_?^?G@X5>6OJPZ`ODJQF&8Q(=1W1X=J]`[3*&E2#4!=C! ++M\RI`F/BGZPJ<B-J/LYB5$<!Z&2!@>CKQS?IU.!'^C84IH0=E@>U=VAD+G<M; ++M+#T^\>VW(;A],[W^Y\'P_EWD?O^,_S(FKI1!9%1!9G^27]UII4&.PHT&[_YL ++M]*`II,->I.(^5!$AAHA4PD.]&4=:4U3!4RE,+ERX:T9B[&;3X^(M8BQ7K2I$ ++ML)!E%(9$U$0X"C0L)^!(I(`OT?_/C7E@GK3(:M>MBPDH#"*@7J1!IAM$.H?6 ++M#9$$1JV$@'7F&&%18:"##IA0/Q##7D4(P0HU*8S3`C2B:P9"(?>U5XF>I)H' ++M48+GI5+P1,%4R'&2(2)((_(J0-AAV+2-4*#8-QA(3QA,/F0VPDX@@18-M["P ++MCF7ZXE5[0KU((BL2!W8&C#87EJ0R`O2"@_,5XIJ@1&(2"\AC#KR(A%>K!H1% ++MABY(#Z'S#"9@L0^H)"R`4-BT*.CKP22AH+0:2%/RD]0B$KT02]/5F.5>0A8$ ++M5FYX@6!6N@=69@(A`17BO:8@$$#'K0E`N@T((PWI"@H5'YH(R`IP*2"*"T4@ ++M:2-"F$H(0&_1EAL1)!(6+8<L7Z*!2*-GRB8GFYZ>C8:4"0<]&_-^8$E>D>MR ++M@]EVC`%<1!!(M/S0R/S(4*@H,45/-A`P0E$:4Z#H0D)SR@=H4&*-"1A#5HKT ++M#O&#)IP*EZB*'GX5!AIBFG24HQ^`81\&-/F*)%I01NU=M`48@"!0H*12&@7X ++MD1,FO.4"+-L`AAC13%JD<=A!F#TP^H"@T+2#8R,03Q+8(?@SEX"Q=V&"IYA@ ++MB"\8IB6B%[(J(#)KWD5[T`@E()MAXR&B&DL$J"Z=P.F_9Y4*"N,$J)ABG/6_ ++M.PO)^;!%T&'4N!T$3Y`8@L&7=4:2(H+T$0$:A#]#5048+MDAL4DU$*+;)!H` ++MD`G24'K\BG[7"8Q&JH^(:1J@:IDAP5Z)((0,/?.:-"8/BA%$(3X@Q(&"J"2% ++M,D1T?2JS;N6PV\@)9&^TD-^##88:&J.>#07G`QI!?E*"KQ4")=(E`@&2@E*1 ++M5$@RJS`76M/UGRL1"O`HV*8282:0:S)P<6;%YNM#=1-"9A2ZQ$P!QL7AEMPX ++MVO/`F<<&HFJ*+HNC4$=#6(^,N"5%X4H@P<(K&KB7C9?KQF_!AX2,$U57J8*T ++M2!-AZTE`9XRJ;%)B1E()BF_4&!-D)$7D4(?$P&R/.58;8<<5`HV$F0&P@#+H ++M(7Z>/BE!4#$\HPV*8W:R20RC0A5BB:T$2O6+"$\0[,<H("!H(`@[4@I"GL!P ++M0^D`(%SU^83"]"$Y[*]/$)50#0H&&-@L(AT!1\X`8(@D(O)J`QJ/TJ:9-UC< ++ML$+U`:-<`($(?F6SYU;:0/@),4(%0R%>9I($`*E7O*O"(T4!0##2JA*TV-2/ ++MH8\"#DE"G7I=AA@F955*5@@EQ(0((B%A,9$#($&VV?5$_(,1LB!!A(A^IL&E ++M'2&>SUAD"_!"@E5V+H$UZ!12(^KTLT+%6$"?(E*CB$HUZ@3XF`@J@9"A5)SQ ++MJA20"-(($DZ%OI'069&"0,=!P^@5OU4$(BKD@CE0(EBALTG&7(UT5IC!QE<Y ++MXE%U3G(F^"VH-O%Z6?70OQ#2`,\A'[$&)$&0B@4PA0<9!%;5C`AZ_8L1>">6 ++M(XRTP;-U2C6'R+""2H/`;H-P&!"F#3:%"O:*P'#-+1*)\&*9C]#>)G5A\2Z% ++M-W1::!;#1)3\+`HA5YH-E,&WYR)/R1S))-JKP.U$9XB&H\@:#&6'L$B%;B@J ++MAL8O<&S'M8*&B[)$(K0WE.H2-VG*FU4$V@B-".;-]""]1&DC2122$)`E^/G7 ++MEZF4@4%O5]7E5YK2M&Q%C&VNAXM>"DV'-KSK\2Z\>M7!9:0TE,EW:#,<!PTR ++M0*G&S(+`R38#C4Q*I,15<UBTV_#1M1;T9W7`BH%AP@NKPE<LQ33@9Q=3HP2: ++M#4V7=C-0V3#6+ME+L+F4=#76MKN76LK19T+1F[L1R\8#P;-&E+3@'.-@F1O` ++ML$UQMMP=LXUN9:V-ME:99BF65NM%LQL9IPRRMCOC2%,-F[A=0*9$W@%-&J7" ++M%,+:[R2FQNMY9%9FL,BFEUC&169<&7+-VN65H\14Q<9T4,UDTIEE:;LQ3+*X ++M9H&996FK,<;&87)6FJ8.H9J*1(R0V$&0VD$O(L4WXM)BH%0KU3S:IA^82"@2 ++M?D(PV(?-A(+!4`J)H*Q-W8)KF[T&S*9HA3"VNLDIHTTR:DNTBXQ)G$,F&V;C ++M+)J0IC=U'#QJRB[LPRUECQ:&C68"8T,EH)HR@S5E:99CC35+P)PY0YLG1CG2 ++MQ*C@YT-\%X+LT<;EU-*.XJ6RJ:"J6RM,LQ3+*X99EJ;PMF-C*90R995-65QL ++M9IPRRMC%PMB90M,R8IEE9K4Q2V5I;%2V535E4RRM+8J6RN&\FE$%F,JB&LQT ++M;<,S$REPN\,,,S-Y-V5I:,Z;#B#((`=$F95@R8DHQU2HPQ6%02:&!C,:@IF& ++M:NM[F.T,'HS(CELF>&DW&JE#%AFR8J'-XU)H8JE2;(,&#&5HUK"%NK+:3)#1 ++MB&6JQK&2L(Q4YFS8;!@AF*:&\X(4MBYS'JXFC&NW%V8;NF274@8B4\Q*<($# ++M`I42VB*\8_'P%$JPPP;DU3"FG9=VG2VF7!LM,S,04$O*J!8:8<<#@3?GZ!>A ++MHM)$!DZQ=MYG-[V5CC<REV1G59,FBJM0P,FL[;F:88:WMLZ,B8WMDV-!@V%4 ++M6R6Q&=YNV$S(WM%B20Q%%4J=71T'0&A.@)()B(H#D)G-<=H<9*"I&W@ZFBR; ++MIFQ1A-ML8PP;Y$SMR:3)-.`T/),HE<.!P#2\6"8B(0ZSG'8\9B"G,#<F\LU( ++M40N":-M3',0V3Q#.9A,K+948ZVFY&1382)$I244#N0+OEO:;6G41LD9!FP&: ++MF:BV$F&=L[3NP'8I<536`NNLE4C<&2RI+.X#&HBF:*5=R`]<NLZ>EZ%Z5#:L ++MH2U`5,,0$J/7+>'':Z)0@A8D,G)D-RID)J6*0TAH:.-MN:PS,1F&:G,\8-KQ ++M7AQ6("DH$ZZZ.DV)T$41%46Y#)-8:-CM=C,$54CS9B:I;+!@;-&=8D1!A&%E ++M[&@'.308:%@BIB$P#,.7.;DU)Q),`'D;=C@&Q@F:@#4)J"5Q7Z.IB8=K2A?M ++ME$@'Q)$000@"JW[1[4C4"W31H9S30LI:M6I/8RNPU)N#+2BCK*$WE)B"B24# ++M`V;-FYTAN2`H+#&2<W1DT92\ZS+;!=L,0W8(P1<M.'$-LPS5R"Z0X2L=E*ED ++M*U#>4RDFU`TF]28<TH"0(X@8A7F6"*%,,4S"R1%[RD#-*JTF$R9VVNF-YTUK ++M3,]AK.59Q@RE*=,S,-ZFC1LLRT,4ME<'(J6RN&[,4U9:,-.S-VB*:<&RTS,T ++MB,)P0A>$000,80#018GF_2"1GT-UWU9T='?>FX/@>0-S9P-O`B**%P,FL<TX ++M:K>L:MC#,WEPR#?,-S=UA&R-"&M\QG*Q@FQ,$W"6+(U<+%I552&>-&AL-P;D ++ME0E@J()*H$.5PX.E>#`00TT2NX;KCH.2TM1#"[A-25#"-FVYSAQ.DX0RRPF5 ++MELL,[RVF8&C<15D6QBL4FK!;W;Z3:T](FA$U&T80W`.!1(DPENP&*@0W(FM& ++MM+NQ7!&V*.@74@N2`N0"[N9:PS2\%VBX(G!6%H86H2*2&"&K:(;QG#N38W)M ++M22BI+8I4*R#"&0Y4"]0%UK".AVIU(PP-3#33*MHP`U`4LH&`-#2;8:Q$B#21 ++MM'DR:-G7GGCSSKKC1EAMYAIY6&6&$\VX=4T\XK#3CS3#S+:E>5U76U===8<< ++M52JISOM3.>I&F-[-(9L.(=Z-;YK-.UV`;E:!H4V[#:&E4R#QS..UP#E#%$Q$ ++M5`'?71LX-C@I2U94&`R;K=5S>)J53#9IWHXA9)<0IBJ+)Q=8:0:AM*QAI3CA ++MNQ29-IEFJ;Y0YV39#2([!#+4":@H*$3.\<I=B[$*$TH0+"0NL#`)@@J%,@I4 ++MC?6]`6L-0G`7B`F3D(F0T@<E-UAIX1N&$>;LEEBUF,$E"1!(AUT=/29TIQ0@ ++M8%LI)(%5>/#7K:\K3RJW,#2N2&H&HY:30)MU8M-44-$J;C,P'9"P.M9LEF"( ++MJJ'-:9A,=VR;%T%C<%L+4N,8D3?-X;'7*0Y$)P&H(8F8*4-QWRZ#-AN"4UT! ++ME;G*=V!-3#N5WF`[E*+(`H'>-`[`P-FV[O.MLFTW5L,1F:89:MTSEE[#4N=8 ++M8-CH*;WMEM;G&(NLY:66.ZPTJIBV;:;UO#1P*8WSCC5;JZPU:F&6&L;TU)FS ++M$W9F:9SK#9L<`0P3%6<7B<5#6X*"@%"II&&C;3FWFX-P,=:P:DT6V2M8F)5E ++M<V;="N<=B&`.DV*1*4E!2#J&ZM&1P"TKD@&Q*;@@8F+B"E)<8Q*JFK$C;!WB ++M<)N!DN(P,LL242"<S,.!M#0;E!-VS+!=T2Q)RRA#6<X[3<$30$*WKV]^5O>0 ++MU.W:\0.J63FYAI!8R&L#:(4V86AS!(0"2;L@ADN='=@:`X"/4J[A:ZNG0!TJ ++M:3I4B!H:U!D"X:WILU";2;0LEA2E5O&%H-[VR%46BVH;O<-QM&I$F9EBT334 ++M%-$68+SOK..^ABCJ(9@H@J-0/.8O)"#),@W#)EN-B*)*QADX-&;O1F4VS1SR ++M^^'Y@0\)[F4$>KTP&)A(5.Y4:>H_8P?VG#`CV%N]`[+Y?7D<@[X%23`^'7L3 ++MR/9/7>\DNBJ1)]AVZ1]OM"+%L`NDH(>\;[SC^25,G;?E^UK.J>L9V?5YLXWS ++MN_"1Y$6\.,['Y!^I<8"C\_*[CNQSTO>D4J-><CAET(,)EYTXZES)P<&9;N?7 ++M['K8>ILAB#GN7.X[M.5(Y8=)=J*_$?'$;3V^?]&3R+J-E;GDV<G<PKEE(T.[ ++MN8SVR0Q`5LOWC#@F>56E[5S'<S0D9O!XC")_FC14!K[T8OIK^=:GY/X?,3X8 ++M_[P/X;YF.X.G5G6\3T^U?TF?="TKSF`Q)@]SNKNHY51YNT]=NE+'8#8A1S_B ++M`O)09X(H!<!MA!0?7\1]9]:_6S?3Z_H&22JA2ZK3?1R8K$,#,1*L"V&:HPP! ++M;._5=]UY8<D<EQW2K0JA@X7RAG*AP3#E2+*%-7=I,BT1I4BN"E)?_!.\'_KD ++M*?[R%[X*%7V^@?VC/^A./J_/?L!##\K#L'_`$=/W]>M]\CO)HI\[B$D'XD:! ++M]!0>-(P;!IU+\-%S$XE75'A\](5EMF;8JC;NSW`PH=WS;]=]]JWU&=9*[0,, ++M0KN[4=@VY<D*SY'#AG,%58J)#+,KA)6ROX2FYL9S-XDO/EP6VYA<A8,9@=1> ++M7,MDVPP%:%<D>5$A>H$`=K8AF"OY_U:K%6($D/_8D(1$PV8X[H4:^"Q6X*M@ ++MA33DM1&6EE>&'H=F53+Q`P(4[X_06[DT&2=?6S=B?+P=_QJ+RHO0=?'S49C> ++M0QS8$Z51GS(,$=>X3<+F^YP_<%C!U`K\_2'UBE4D[Z9A!'!VPH.!BMP+M2P_ ++M&%C=!T2Y_N]GZQ[;P;ZX=%X\M#OW=J>U^OY==?7YCVY?#Z#C@P(<KRJ,#]W# ++M-ZB/1Z.`LX=XKKZ5F-A+J85@1AU56J5.Q8PX].CT38>'WT![:&P_/U]0_5CY ++M`3UZW("PI^G\5:SIL4.\L&&G[H^O]'BS^1:5^0Z"1YP.Y5!GN)*[[>>)]^T^ ++MG^&AGG?HC>;\R=AQ+<KT);<2J$&^@OJHHN3Y^(\CYGKWZ')V797/4?6)E]^O ++MK@!S]<J`6(4%7#*>_O40$'LOUAY%>EA_>0WDIOZ%B7+!LY<>CI(WWA=WSQ#4 ++MS=&MJA<>?A`S[+WU]F=FK%AU;;V_7GN!^GFH2B/1G<5LR[=:XJW\?.1`"N%L ++MCZJK=,4GI*I0DB;@+K`DZ&MK/CQH5&=A^+&8)W92?#>^I#C1$D#SV4!R]A1Z ++MU76RI0TJD#/>?-3EY[ET1LI"A!KU/'FHK!G^<W,;-EE?EQW*%)L^/H<E8"VM ++M^CV-J;[FJY]&>$@HP^H-U](YGI9._!5M.*"AX5%(V(9;RL/B//W+BPN*&F:Y ++M*G]+/SWKC[AQ-Q6'1[.-^P]L=_N/[?>H?/4Y3P/1@>XGJKP04-<NX#DH>9^? ++MP@49/W*FMAG</'I<H2//@DWO&FQ!;0+C]9_&B$;O^5CGQO:LLRE!ML'R?8?( ++M-L]:8>DA$88#SSX@;/6W<OFO`7^L].,+=W<E\B-@_`8?0H#RX/2.>,XGA@*J ++M"-RA@J!!4O]38P%7=6&4E6[?M%\R-B+X4=^#3\]ZSC4[_.=A"T.Q[F9ATY0: ++M(%8/=$DGOM@F'P-P"GY`26F3G"X?@Y!&`X`([=E#&E*@QL1??L(.L>%=2QRN ++M<9X^(H!X4,DJ!@^JO_)NK3W.+Z%6?P;I"B`=ZH%@[*!BW@$&=P)LN89^,5=X ++M^)V&G]&L]R9QI:]CC((V0C!7M>N7@Z\._>)*YJK)W[3%($"EPTLG@S6Z>$_9 ++MV?N/7Z9Z8$#/>E6SD]:ASD=9\%7/;MOASD!A)*KG'J;M.MM`VLZJGG+>GD+] ++M?*,`Q']JK9`[:?[*3KW5P%XI4X4.P(OFX]7R`5K5<*&ZEV7"MLW+H("?B78@ ++M-2^OF&JF'?#-Z1T5ZVV'KC?06:*^;CA-_GM7*SM],]B`U0RIU7AH*MAE*[]- ++M.@W(E";H*0TLM6"%SQ/+G3AQJQ0H6DQMG`D>Y>%7.)E7#+6=^3CW'>LZYV&E ++MECK9]/`+0V9F5M;4D2\6H<8,_"JZ[YG=>".B8.;')(/$=8DR7#\UKIL94&:E ++MN@.V+V?;48QH1FSC8.H-X;67.<5#+5*JB`9EL3`L%6$=?1#';%SS(U4E.';C ++M=&^NYDT,)5:2UB>K"AB`E2JM7!FE67ZY$D8(<C[;XR['"\[.V5XTZM&`_9=^ ++MP59&5'.7,]Y:'GAR&R'!VZT*XZL3R_.:N.%T8&.=+E-.>FPQC%+D0Q@:F^2G ++M3:\S1Q8D.QW7.%0@P1095UPL'2[<3X=-:U`V?GG2;E!SC!$Q".[67?98;71H ++M''MXV?%T7X?8F;._M?@C(@%,"74$[$`+EX<9RK<EO(<1$HL[8S7=4#.JQ.%3 ++MGC?>\U&[O0VU&76"N!4+*6<0(V.'8-ADJ6W;N;.EGJV[T4W.8=5;2D"W4MNG ++M;IS-3AMTX,%W!.!Y;L3TX_?7;,LLJQ&_\$_9GND*$'8#A%']A77O/D1^3N2R ++M))I8_L=CK\;()!JO)5\'HLY)63U=N5#@$L>(`E(*=I:Y"TA`^DR'Q#7Y^#R" ++M>O\QN'!%GA6&]<RD%AL5X6L.&!Y%\MZS1D%5"K-AQAPH)HB6/>:<</TD.39O ++M`5W1F+;L(9?\P53T4:;MNKBU/?F(T49E6%++OPL'`H4R*-U%NL:*R0%/R+%@ ++MI$!A%0P!(<Y7-#8?/U+X#O(]HV*@4"+Z!AY$<`H>OO4-'54^<*((!(-4\HW: ++M&_?\$QZMQ$UU!WK,O/00FZCR$EQG/Q^\#,#,?K;<\\;'N`?"ONC\A7#<\NP8 ++MTP5S'XIX<$5[O]OYH\Y[4=L;\-PW%9C`JE<1>_I5:M(,"R(Z4)/PG2'1Y8>6 ++MVXD7]IGC5<VVL-I5$WGB_1G(G''CM[M[V*^WXEGR-'A6510)%Y>#B%?N]3<S ++MK`-5F]P.]H<J:8)E6*9VW#[23UW'6_=&CE+U7<(SH9,)H#$PX\`V00Y<'IX\ ++MX<6*4TH_,X@IS(FX'WNQ*'L[,1LC#&1Y0)(@6PIG,O(="951P4B%E5`W[!:* ++M.#^*AKJ5'@>]AZ&PP!\+SN/>8IN_B?I&0(P,6O9F/U?T7O#_4-]8>6"@>HC8 ++M>3,/7[':Z7BEVL9D/U95;TT^3[P7@8'N%P/6OHJW^8CG;3#M^6FW8)IA)VE? ++M4!O\/X#E]]+L%(QJ//:O3TKQ%]",LY3D@>UH9U]BVZ3B1U7HS-&0RA<UZ=H2 ++M95'[VE'-GN*/T/HWK6P47]:X8KB!D],[-`7W-K(Z,&C@?/<,#8/CY<OD^CGR ++MQQ)D69]'GY^B*)XKL4(''8]\B>OYO1^6U]X5-!%4-@=M!F[B5A55&VY9_6OC ++MK`'1^HK(]VD%`1[!5A>ZXI?</GWBS/H`8_!_[3`!%0%3]!_,`_Z7G_(!T"CQ ++M&&_'^[_.O;U#X^FA^L?=W_E["")'V"4]/GH^KNKW2/>"!OZL3$*)$_]1QTZ2 ++MGX?W_^GAU^&.>X//LL4%B)(*'WVP_I/C@`!YK3_:U,J7KUJV_IO\KU_^7FJ( ++M;^`?3`"'^0['ZND3*?ZYJ?UX4!GY>_X?3_1[-Y7'I_V^_X?:'U7M1_3]7M]U ++M;BL:B.>A_O,[1O,-.F>FK,"LCX[\!=NV!_Y7W<<5H:>\SB#S_3QWCXKW'R@1 ++MWC[N.6V/CNW#^"L/K=?XEM@@-_DV4?HZ7ZO+N=\HB)W`_(IY$!B@!I/]GU83 ++M=D-6#_HO\'_2_UG]<_YG^AIW`EA!_UR#_8R82A2JT1(/RLE7W_J,!,90T0`3 ++M33J#$UH<1,81U!FDP4QET$H9IP$QA31&:<!,96D`TV0)0`9"E"M"B4`TJ@3( ++MM`L0BTH4H`T"Q!$*E"+$@G]<(@9(C2@M(@4A0*$2H%*@!$T*%*(T@%(T`E*" ++M4)OKK5!M:*VR:HUJBT;6-K5ZKJ[6HVVIIF,3%%DM;1M6(U"E025JREB4"E&E ++MI:$H&D&)58A2D4)L@%,@%B44H!&"1:!?O_;AH(!I0W)C`M*I0@%"%*+9@B9* ++MD0K0($K9+6+6BM;:*BK58JFD4H14H!(A5_E_9_J_V?\GQ_Z/[[\OL_-_#\OY ++M88HBDJHS6]Q]O`_EMO[Z.<_4`@L:S`HB4]G>B`8-?<(9^=C\I0[A;U_YOX_[ ++MO\>GZR%('@(1_A"']M[0&V1/\</B_W/Z<!/XP`;)3GZK`\I`\]33](@:(=/0 ++MH9V?V?S:Q"'^EJ2=?'KA)/3=D/V^ZPF)(;/'KGL0/IX*0]Z!]@.,D/5`/PW8 ++M!V9/Z^+/2$[V0\^4JSW,#"A+E$$D(GG[.?;]7U=O9CQ*(@ZZ4(-W4!I9@$X7 ++MNT/V0'V0%*!]C*GYYY-`&X5Y*?63Y<<8$.>UY&0\,(@BPW]OYM^GM^@YTAZ, ++M#YE]D+Y@3V?GBK[?7*(_S$-@G?@P?D2!SVL#V('A(>$.&3RA4ZI+NPJ'*/OA ++M@NI`ZSQI0R3[9"^7\/6P7P>L0?J?]C$/JBTC2I^L_/9)[5Q#G&<P6H^K-?V? ++M\=R3/G9)8R!S/J_3]7U?7]9]6<<<]('TL(?#P4$^<I^F#S*?*`.2_6!.H0W` ++MO>L!_&Y)P@.0&M8I2)]_?Z-)^9>2$ZEZA+\OW:0?7,*1]I_(G4AN=[^F@`]2 ++M'GZY_I0P@/I8<(/DH<O<_&%G5`1D.Z0J2"/HDA_#\@_6?7]8_E]([-G,^;)# ++MR">"G\F7K_K$]X<`<C]0V]WTZM[_]:JP@$,&'N'=WCXBB@=X:^/O]*'TI[XA ++M/Q3Z>F8*?@,)MD3WT#A'D`GZ$G"IV"KPC=&1Y9NBOW]N^'M>]J>GK.)A\(^C ++M?;[:WVBCL-G=-S;&[KT$X<]AP(8K6&5P<+C%.RM+U%16P[%`."GF0.I'YOM" ++M!4#&)]2^ET`\B/LV"_@:#"QZ7!/S*>G9$II/AE0GR.YK*\)/`D_^Y.O']Z&@ ++M[GYVRN_A:SJEXM]WC1X0V&S[K?TYA`_ZV'MYXP#\(D_&^/K^>K;]_'G^<_;9 ++M[#QXOM]W0A\P0/)/_0E^UA\")/I^CSCW3^?)H_GL@=T]'C[+(7H_KR!RS-V0 ++M]8*AM.4]4A]X)('S\_IZ9\Y\?3P/N\^P,D\%``Q1R/+UE5*#,J/$KB_<""_B ++M=`A/H1Y;;,#UY9.XJ.SN67N^C]G^N9VPM3$16/&#%U:P++91$\P4\`?#J?3X ++M>`@($$1\/0Z!$3\@]:R?64"`?#S9D[=.K(.]?$^!\9]#*07=_+T6DGH/O]GS ++MP)U9T0\(*3LA/H0AJ;T>#T\:-<>/:-"!]0DA>6P/DP#EAUO3MF9FH'[D4Y?1 ++M`G]=_N,D_I$#ZT"?D\I(_&DD]\@*25*Y7[L/VPIT2GR?R_#Z:^[\C?#G/M^[ ++M\SKG6GSV@'?Y,H(D/35_GMA#]8)/<99`_,S[4F<[S\Z`>P'\/I*B8>GGZ#ML ++MD\&F@7M7NU']>\4Z_9ZS70P)_I_384GUC^,I_4R)'THHL]QE1^?4[;=@+/P/ ++M>!F$"=/F6$/;SX?J;5#ZK"'J7SS\;K8H?80)HO'T^_2$..E`#R<Y,(3OXO[_ ++MX:#"?@)/X_IZ^_MN$[,E$(>_]/PRI#T?02`?L9`1@&>__'A('_>@3YC<#Y^E ++M/I]WUDLS.?A]*M`GB.#\/J<?=_@J(B20@^WS%QG_!"3^'1H&_L:0GZ.?&$#[ ++M1`#Z?R_;A/R03S"OOO^?0OW?W=:`>H3^;O?SVH_X)N8I_BDY_3O-(/O(OD@? ++MC]_/RUZXJ'MO%$_HUD<QD_:?(',)T/-`A4DF,`^7RH!\/X>W`(<]V`/TE#WW ++MBAW\OT_7_&>LZZ^F(?OO>0/]<J':C=?]^INI/*,>Q)/[4ARP?>[_R-20#'!7 ++MI]F/J^GM9W=U96?^'SZ?`>'7_'[:^\$?:26/^!'\Y_-R__H?R9SH\7/Y.NWO ++M>!/C%QV_K^G]1<;\%0`@'CZO:WI9-,B*A!!'\"/%POV3IA&H'".C_?@:\G;/ ++MZZ1)]S>[?[I]'$Z_3W_U>*1%_0H3L/0/YD1Y>K\/2.%._A\GV1$#T!W`>04_ ++MF[_PD_U)/K0-1@A_Y;_S9#\R0GU=+.O\J0]Z$Z_Z\6(3J4_=/]O_C_XA8.I? ++M\HH&.)R?;^P/_Z^/W&`/BDZ8)`_K9Z/I_7_['^X_N$-'I/M[!^_(?ZR`$<#\ ++MWX_N;X?4`/V?7^GZ%G#D#\7@/C]U_H/X'=5_'RJ>_JHF?[U'\S[O\9\"ZJ*^ ++MU0-7GY/C'[MQT__F*9849%^S*E]L+^74,.!8<E]&15+,I%"8K=H;`:"][8<. ++MN(_4SP.57]LY#!L;;BG$?L:CQ6E678]88B5@+WJX.?Q8GX^OV_F6+_9[/U_+ ++MX]P'PK^7K!?KT[0JKN%1G\5?T3[17]B(J=_I'P\`/)!\^[2+\DUSGP%=NGDT ++MT!&1_/7[_A<)*^D,WJ3.>#Z3Z1SZ+!]<CT^HYJRR^OX?RE\#R'CKTCRH5L/( ++MAQA/$=\^'3X='ZYC:O9X029..]T/\518SKZH`9R^PW:#3MI:IQ.&#/O'S<*[ ++M7+QQPN?3]`>X#VC";;^G`MN1/>.I&&^?7UX^6M^Y?EX/Y@Z\!U7';3-UU/PY ++MY[>6?+5YZZ;X]J:A[`1/<OOAVYZB/#X11FW-@\X'G[M8VGJOGZQ>Z<>7EGC? ++MU=<#@WN.Y@#S[F]<4Z\[W6NT\VK8&`_R'K\!3]=^@$D=N"AY%'JVCL>\./&7 ++M7GHW,*JKZG<->O'V7%^GCD/XQ/KZ[R8^IMNX=+YZ;7H:R1XVT6J^R>\>SO#> ++MF%X?#;\#JTF-MUW5L.@Q*@"96O4X:3Z[\KB19]6!69CFEXP/"O'P`O048YU< ++M=YVX"FK=PH]RM!@</_'"@>[V]-L^G/CM:D;=ZL1SGQKP.VPP0R^#7M'0%@PM ++M,M)'M"H._E&<?1D\!Y;<^0=`-_DJ-'O8"MQU/TXY1J?GS^!/Z09!]81`I_06 ++M$*&3X9]73ZOAKF3C^BD/X"&AD#^7?NNR&PX8>/0^'KH)/V'_#6>T/N5Z8$/G ++M[2]C/_C/SY8&GU_4?[X;/^)\C]4#Z6U5!0Q+B)C_&FM)#Z/\=3:?[6H`B?3V ++M#[1QV0L@^_ZPQOE/BAV"?:,;(B80IZ`,.//8H*I,`#A$Z)24&$*`V]#[?>%< ++M9X&$R21::"#;2)H?+5/I10(88^>!)#<AAD@?`9X&1D$DTG?Y?9???Y1N?N7F ++M701*>.,?E^Z>[/XF4[)GM;,*,%CE%OKGK*:QTQW^V^G:...[A]E[M.".+/#\ ++MF-+K9O3B*PW:5O98]KC'8RR_J.-GW9^2.W7JW3\JX?93GIBU#=(*GP/Y77?W ++M+5<[EF^]D7WO"#\Y5_^W+1XY+'_NV'\^?]S7"[JNS-B`8[E:!Y&W?%!S#88, ++M?'P4.0KJ*\>S.#,4\+IY&7*TV%Q&/^4>H*WT\OK]/2AK\@_T^#9/_;^W_33] ++M.[U__'A!)\OPV]31W>.0PQ[?#EX\_K_)'CO1^03UJG(([_2.0WL"GOX[_W^K ++M?]_PQM\R"?E/N^4?GWV$]1Y[?$_A#CU*%/VFI5OOYGQY]#-:X#'CMH%H]"O" ++MCQS=?[%JZW\E<?V87T+B!C[-X'8XERO[/6V?RY\;6%V^Q*7TNOHG:3O[6KT* ++M_I[0/3[!VX?3X7INOM^'5^(:[@N(8>]O_9A]5/VDU<?3BQQ$3Z9_A43#&.YH ++M&-JLXB#$8]+8?<I*L]O8.]+T__/V,][D>;AQ]KZ^7RE??23V_&S"=O'P;NQE ++M=L??^`/T&/+/@!2_B;H0%(A9EPY`4D@"3!UCJ/5]OFO?G](08^7'I/AW@YZK ++MUS,OAI-3\\NZ^I=W&RK^J5_E4/X<"0,[)EAQ3#O;[H&ASRQ*[_@W?WP(]96, ++M#XM;/K@K2%^/0X?R/6<Z>W]N?&^$[?$AU]?$R2?XQG^5D*0Q)EL#2)AM4Q/7 ++M@-ZI#_J/B>H\?Q_GS0Z_YA,F!)#^Z6:-G[%`.`(0)*O"5H<1A3"$68_X<3?+ ++M</4G5C90IU([9VTT!@:9'1W6P-[[)<;A%1R(KP]&HC4P8!AK)E$3MB$TTMNC ++M,A#.#"#$F#KN8&V,-')STR=-L'%FY33*YF>S.IDUF9F3$@DF3=L[SCP-SLQP ++M,.*;('&`W1X>!F(--3$DG)8F&C"35)$A.>R\QLK_*:=G<$Q+.N&&I:L@<,F4 ++MW;EX08=.*H"NR!T<#%P)T986(;CK4L-`.K:2RRRJ&3"I$,0C1HV-C1HQBLOG ++MNO7X;WK9Y@P[A@J]6>E1Z6:EAN/F&;!\63$U.S4U)(`C4J0JH0`(GM\.":?/ ++M#6D[-NPVG;/FY#Y.S3DVSPNG<XU.9V:6/BR3;LPDGHL0Y`[.@Q>/F<.$O.\4 ++M4'4`#N!CXLC+.V7FGCTYG?_"UCAJ>$C\6$@UI-6%7L8,?/C$]J><G4D(<-2, ++MYF>S\;AM8>I,3TQ.J^>W/,<[,'&,(A#$B)!KQB$1Q1?8>E![2:#<:)%T0.R% ++MR!&7;"D081;8GTP8BH6V5XL01),&IA$$&_2S2;*3.W,Q-ET[LX[6$1%(<D#; ++M@<YTO!XG%,Z(F$S.3$[-&L3>9O9N=[,ZFV:4\T8+FIBU5N%TR7!B;GH$DALA ++MG;HT@H9#S&%4VR*"&D%WO;WUK3G)$G--3TU$ZEAG++,;G%P+-N/G#6\PB@EC ++M&=.`+J8BG1%33@5"DA,15K6BO$M#)S-7!%U+,CF&S4E-*+H90$&9TU-:H498 ++MD93H9F4$!%PN;>.9HXX++`K`KACM\(BO>_6M2H(=&=F+V$HQHJM&8Q4\68=F ++MF9F-8GI<\:6XF*Y-/1T[>YYZ<[O$>`$?,&,C5-,@44&^/3MVTQ$140PRCD.2 ++M[(KR<!7"10VR@IV2@@1IWMR..,Y215DR4C%-OLLJMLW*P)!/@E#+F'=:4'(J ++M)()A:#1S"M+PE4PGAHQT/<N1D.$O+HLSAHVS0]=F+HT8F/8H(EG">W,##["9 ++M:U-S$IXW](A]*2)#N9V!G=<>G?*.."8P-K'QY<?#P4UIGWO#P\!K'O,._;L) ++MOV=XA@0V?;ZPO)ALMLZ+TWJ&MI05R(4"A:*X:7GG1UC=01U;.RN]2!,O"#<@ ++M"<8559V]&ZL>.&&\S9UXTZ82?-HN;KHZ+DPZAOKP2]5I37!F`,IQ+C+9AEG) ++MC"M-8Q9<I[.]-LK>'#9;?33`R"J*[SB69-$$,G)AVWV<@]@9FPY/<.ZP@=5> ++M0/M!=H;X^&_>SWK]P%+`&@'X4O:'/=7H!!@?JSUBO$/Q]E!!^GO=Z@Y[0F," ++M]?D,\_)@^!"HOS&`^%G*?L$`%@@>[SL7!Z(V!T'BA?G?I[O,,->@%NX&9)([ ++M+)!U8TIMS&52S)QQSG9G9IPCR]<>>'!X8"+$HPP@E5!'VYB>TIN*J-K-\<F+ ++MGT].ST&$B$86TY@,,U&4R%3.6E4C,%%%H42@0*MKS4\+9Q8DQ.,$D3ED,3-F ++M',&53Q9.S:(2&)2E+(XL:EGE&J=,#BQ,V5%F<##1@8LLEENFXS>?>MO&2D2D ++MIO`G5=<B`G6Z,MTR5M]9MK+I4UOPND@[9\LCH..><U0LD$*O"$50Q-I*9#,$ ++M;LSS..F"E[DR0\D)PA#3/G#'S"Y`52K9NO=TS:JHE6RLL2J8FCQ[)OO,'L@- ++MG;@"[I@Z,*Q4JF)F\W;;<B"202*]_B7:\H/>(B"%A>7EZ##`BH$/9Y>WT]PD ++M#%^7+/3D!$P?3?OSTUO:5'EG93\^GYYF=F#N?QB&IZ;>;^B$A'HSXK=?5.@* ++MHD"SS/TWO;EO9ZJ57&;IT$58(>60U!URL33`3X[>G8$Z,V=:89Q.0L,&:C9T ++MFYD8A>CF'!;-7DUMV'?&;(T\<73`=$,'6+TRQYAM7U\98>MQI9F3T^3$;MP> ++MF60:CG9T17;O&#CCWO%ZV8/<G3/@DW+.I3W<#SLT?:E7:STZQ>X^^FSC4:?3 ++M'5S/SC;-\R5N?2S\^S&83B@>ZO4,CKP7QOU'V5`_'PLL<.#\R`,(\-0\>W%N ++M!D=8Q=$Z\./`\YI4?)+,J"ASR[=.SP^-.]'3ID!73S3L[">@9C&^0?K'+VFP ++M]\[\_>GKGO0'PL'P4[<+#<O,\G'9QA\-H(ZU@=/B<>0=:9P.]NNMIX\/;PV[ ++M/#T';QT0:>E5-0L2HH>3IZZ>^W0(B!U#O9SU.U-/?DR9LL_'IMH9LL23SJK3 ++M&%A`0T%'3!C;9C089#IX;#3K?&*UY]/GI.=X9T^7R9L-N.8\UH58.X7(S-9B ++MN31F$R76,3Y@PC5B-3V"='9T^7:F2$2$;QSLP<-=Z#'R]N.HXXX='1KLGKCW ++MR.CM-&G0'4JZ9WP>G>@U/E@T;ZTYPQ?*[<X]]/1MZ(T4"#?CZ#022%/5XTQ& ++M$'Y>SU@;Z2[#]L`)]YC0('0/M?F%B]GL%^X3Q&>X2>6".G772>NN;>Q/3>O7 ++MDZ$7U"J@<<=AO+<WC+\KYELL]-?,\9?'M,X.^D@XL1B6)!N$JSRAA9JP8I5* ++M"FBIG2C''`0%-!JE9WY<#3PP3LXX+CI,=B9).;=&''0KJU)@RJ''`T0O(7HE ++M%$=/?C-/&#$I>/,L[>FVIHQ)IA]J,V-U'V8]G#Z=?<V^NWEG'#F&B\6Y?'3T ++MX>'9Y7CVZGCT]FNA%5=N'7&CFSB\V'/"C`$D3/:'ZAP"H$7=>KU"@0;4%V9M ++MU$7FG7H4WNVUG0>AFV,1C,VB\FO>F&>3FVAF5PY,LS5J1)Z42$PS97'SPU-3 ++MWSBW$YZ8AAESFBJ=F9EYJ?68E\VK#"UN69?>]YN-Q9/HIJ6,J2I1TDF*JDP] ++M<2/E1)]*@C,2T;FWIF2,I8CV,".+$R$JMY,00$Q$3A*(:.BL3;+G;G(#KRXI ++MX9.R7RR&9@.B'1+UX>:0YVX#A*<"!//6=L&>=OF:D]Q@\NK(]\P>7BGTW,S, ++MGBPQ0'P@(#\)X^\*\_;Z>=@G/9Z9[J+\+<&2Z91J<D1,#4Y.Y/.X??=FIJ<P ++MVN6^.AT]&&''GG3MX$V5Y#1H=!QTZ5Q++!,EEFSI-&3DH4-L/'\WUGV_N_E_ ++M\?O_=QO^R9_C_C_+?_F?MGUI]O[/;"_@6?G3]:'Y?HC#\H?L/I^Q!%_8!'UT ++M;X*NOYOP%"01N.18(@0$N2B`F%4,R??_`[GL/6?UZ#^)U_C_K0&3QBMR)G6' ++MPD/WSX_%_91H4_ZJ>?0F]]_)/2?/Q#`-@)W/''B`5@?29B%$6LJ#/VGK_8\A ++MP?_0_G/=^S]^>C]_M_U=80F&G_+K;"A0[)50,^[[CYG_5X_?^Q^O@!$4M``@ ++M01A/_,>L./B*%!D"!PHO0'P%\V+\1ZO<Q]YYG]))/E_*R0@?;GU?>RLT*<6? ++M3^^F&?7]W9Y[@_\!0G02@M84:<1D`*?TK(3*@F2H>F#24P)AJ9++)BOPK:L> ++M%?^QIG:+\,Z3S`\!Y`!I9`(=`QC<$X"#+7O>&A>P#P=<9[O>>V-[VB@3YHX$ ++M.EBGL80"N0Z*.#:\//!5"L0OGQ$]6K8/#LX>R=X`4$;'O:;Z[EKA6UP%HFWT ++MS<`K%64400HA0RJUX(][SPVCR\._/>>D##WS#M5].MWI815/R4&`8$E1`=0) ++MX-\]O1Z]^%OV_(V_Y5U<8.RL]UC0]C%[5D.R.E5QNZ:&H+-T4[V(34JW3R\/ ++M>JXN<4"*[%E8@M:S"]4.FIP6X.[+([+PO*F.+A4(W4[).9M/:XX90DM/S(FJ ++M,6R::"K,@EABYA!/L-FZ8[GI%4(K*7G006*IS&'U'U6O<CO6:]A[7"ME!38< ++MO<@)(*6"=0@.CW@IH'@UM:)3L$Z2?$';P@Y3)JS"BIC&YE4IF;3T$DZ,I5AN ++MP3>UH0Q=P55NC@0AJ.O:NX;(6\PI':01!VVO@`*8-('4CXH4:`\#U[GQT@_, ++MW`6W#7;)]\`H#[39%C"@8WZ+[H.></`?=1^6?=6_8/NQT+5:,(LH,T(\>5&* ++M+('PTKXR1"(B7-J^20<6*2A%B-8UE[8VB`9..J$J^$AL8].`S*_2E=^'O>]Z ++MPT``N^P9R1"2(X8![P'A^$V;\/O0Z._+12L6A/O>FM1W`QJ1"I,&=G<\58OH ++MC[V`"G<TGV<E=R"`_(&5OO`3WO+9>S[3=<?$Z44):[W@([!Y,C;D#2U4Z+5# ++M@C@6#]@8,W6)>7!\Z9!F&#/O2?04?7SUN,]>YE+`GG@=LD]XX#8S):J+`]^< ++M!JK=5?VLC,(WJ;X'KXRP;>%W5&J0S-J\2%[T=6S4!3);OE;*&'"[0RN3$SH+ ++MJKT5E97X=N?O)(=\X91B=^V:3NFM4+<Q=ZUFTDE3U$(I4#\@D@E]5',N\PFO ++M6`;)7L;K/>Q9EM!62L(;)0#/CGC=*5>7(BUT42<*_+NFI##F/EEU<Y\1>=TX ++M'1M5[HLIY4NEONH7W#,N^+S*<L:;OEH,EU>.\UP;5)G=48JS95TH9BQSIG/; ++M-TD(LSGYSD9$Q6\Q6;58LZZF9H=8(:9FF,:D&DAE*VZ=%PVA2-(4<]Q&JTB^ ++M4!W+LBHJ;N+*Z&_>SD3A[KQ82;WG7`5[L%7P[N%YVIU?1CCL[IMEW=7FY'1> ++M,75A6#B8]F-7H.%YHTA9@6A!5E0`Z=?$"9!V3`G(-Q%M3>V:G:1?<&'W/C=L ++MSAS3,Q-JTT`@V2PV1G"23*(`C!>G**"D"\BX_W`7C_ZJX!&WS`3.U\%='C?# ++M24D@=D%-5"`TRH&JVT-B4\E7XR%"2,E%51)>9A@E_MQ+\'1X>[YC\\7YD=L@ ++M9"<?$](HB!5>;UNJX*:`,C2#3-M2S-L'6/S?F8<(*$#)41PE1-LJ)Z9!/`R` ++M)N4"8/#K'Q,A&)8GBB/*2-4<J3\HG(W@5[U"W/3W<(/8,]P^`@SUAOWA?K"] ++M1`GJ?2H3RPC-AN;XR]+&=F#Z?D"NCER>(2((Z9L,:1C'/4<)V:P]ABRFL1J5 ++M5FI8G,OS*2`R]-GANX[X=)BBIO?64/6&')U&0NH^TH^A#&C$404B#?Y3[FS< ++MNC*J*HBGS>6ZW,T4?>L0.8HXXVREI;*1"1)Q:W$8O8D6#<80\%LOP)]X$@GA ++MJ34(&3/G#"T">%\>;XX=\[@[P1#<.,8Y0R2$AA^*&"**BC`4G^`K#[81-:"K ++MZ*+@(/NW/R=F95!=6=^AIE>`58K51$MC#_+CGA]LAO_Q_T1!!0!&(`R4((8I ++ML&8;PX7,_./7QAY'ZH_JD/,"/8GVC[%IHHH(158B/0PL/:J&S(62`&\2VRB6 ++MC1BJ=$*:39=1H894#4!PM0NT637ENN6)YQ<VC,6"#J396TWH%VDFM%8$0$PF ++M0&@B-:T,3D>P)*&R>$@\EX;0<(B@WO0;VZPX"6E!2VNY#O4F5=_C6WG.:_NV ++M>&K1B8&$8F#$8C$PM8,,,,,,,8Q%67[OKMUSV=ZUK@U_3+E;?B1\Q56@@3GT ++MOZAP**-5Z@];?P0PFR$=MN_K5>,]?K!+B66V-*I-,N)O.$CSCZ?E+9/6&+%K ++M8-MZ?2MS#"`F9Q3:J!:BXF1H,,',-!*8*$F:*'0:G7IT+A.B"3+*->IDR93+ ++MNT723=>.@MI0*)0N8ER<-PFK"9%@V`I94E)4)@QB1$R&%6#8X!EP4C9DE,3+ ++M)3-V.KMK(+).ATLQ"8Q>-Y@33%(*`Y:@(ALI0I3>&.F!T=B&J;,,R(KF6PIH ++MS)F,SJ$K[E-%A)31NC`!J&^'60:]3XH`L#W$`$/D]WA/08>XJ]C][WQ]P:\/ ++M>P^``GCX#[Z#801['Y,;\V,I.FF*^?S"JD006H^1^,2&;5):>62)&D:81MA. ++MG,5-;#-58H4%H=0:(4-4A<8B8621E4412$N&$@*3)4S!R-D0P,#,H,(A<A;B ++MK#7G,[WG$EZR[*!1J/4>8I#&4*P.8>.V]]!DJ$VDF/?IAH[4Q.^LX@*0.F&\ ++MF]]W!>^\=JW#:WKR8OPX$NB.L>KJ`:98^^VS.0)Y69]\7U8@CQ^$I!+?:9]! ++MC25);]OMI@M3Q`9!K""4S2Q+7*(.0O+T>T#?#2!Z7"_`4/0+PE`VL*XTPGH$ ++MQPMNG"J1C$$"-(9;*S*6&&`024@+;I((Y/&[-I;:X^IUY+E!2E"$0`B#:G(9 ++MTAM),)U";+5K"C>"3K#1"P]8M)J%D@2R?$$@ZJ(8^!^R#IE?6[HQ77><ICQ\ ++M?-!$%(ZKZ/"$5G/U2GY$":V(3)*#;V5;H$&H(2%R\\-##&3>W"21&E\"5K6^ ++M];#:^7F&":^3(,""(.^5"P5I&/%H]1JH4MT93A&WC5[0(0#A41`Q(Y+04%XQ ++MH',WNHHI*MLME4JJMNA(@P:_,D!NH&:9],[F4:I5E],#,,L2VU%10+KH[S03 ++M<42G$3;E9(:186889)4(XN3,$'=E30`AOF<Z#>(('Q!)]YL[SGT%(^#-+&6& ++M>,J&CA9E,?&L)A$!NW0Y()>)$S`DJQC;GV#BV4SOLLP?#4DY7NK[V]\$"0?7 ++MOK!+'S]`3\O84R7B@)HKZ.4_)-Q!QJ&6W85[SG.+AT8I(BS6\R1!T^8)"-)B ++MK9"UK;"9-(DA-F&(B0VU),J,2EL1DK-"X8,8)B-2IG"@1*2V`AR6!ACJ8MB< ++MLFA49()-%30;)H,AEUCJ,A]5F+-26UO%)1M<R7VUV47F)0HB'3C.C44>E#3# ++ML[O7KQVD,82ZI@"`CPO*M?'D*#""5][,]2]@SWWS8;@T>(3-L3WD?F%,/B06 ++M%B&O#]AH!`>%^+"LQM&9II,H#9-(^(!\"/*9@I@A`H_59V`;X@BU?!!K[6O` ++MY;/6@T)1,E4#/IS&DBI$AJ&Q)A(9:&V:)%!NP@:(IB-]O6WK7FM>NN=B;(5F ++MJ-HJ:EB*LLM%4U$J2T6W+=84M2O*6YJ/<R-+[,1RMU*X&[!:);+;84:U*ELM ++M%2DFB-F;#1L5BQF49*TJ98$6FIE&9J94)FC9M,%(1HF9)&::T6LI:Q++1;-E ++M5*30K%4J24)Z"0SUQ(@B'BHJ$)Z6V)?<W,KQ5VS?3LS-)E2SG,Z=BEI6E*[- ++M;I9-K;6VU-FJHUDRZZ.S+*JYT*(`!A%81!C&"FD[TY)4PLDXG#]M$FE7)SE> ++M"M9%&OBTEZR,5:IX$CRKKL,E7PP`FR:@[2).-4;A0EA)<^SJW=!2S/JJ7I.@ ++M'[!5W]UA]M#Y(<ZN_7//GR8H&B@JD,!,,6J"KPTE!2><+Q8:)).$.F6A3U:X ++MX9(F1DLA4+!F[DN3#$*)8V80QF949"V#D0Q7`<LI#JAT9)LO59H"'45[Z!>/ ++MC6-?"C[,L6(DK"%X:)"'$"J`HK<L3`+[O<(36WZO:"=QD6$5S196VN4NSL=3 ++M@T`(H+#GK3!%*Z.CHT=L!>%'IQT)P(.IRW9IS"/5L-T[\QIW!1BF;L*1K"*$ ++M"C78PAFBRZ*N*#(?&`1UIHB%@Q#*9)Q<)A"0\Y<,"BAWKJ?!I%(_."(F`_(, ++M*(L2F&S\J4@9$_+6-*\"ZB;G@+$$+]Y5%B@\F6Q[J=79\A8L$VAE61<%CY!) ++MT\0%C?&C#O#D:(+$@0KV(+4&RA9%K,G@_O5OTL^'P/Q;ONOU7XFJ,JK%BDK` ++M\.0@P\'8@(4882R`_*4#"ZMR[3LM@HL@H7Z`IE%EA((P@1KQ";\S"$"),IU" ++M#016G)"1:PX;KR#YA\EE<*&@:222?<"`WN:3Q+=&'/'J-(*XJ6P,<)%7N!5, ++M@=$1!1.8R2"!8XQ"@QO:A(4P!ZC,`P#KF274RX7EXBVF,!#F&6B,0"<`L1:& ++M],^KPIB'3>16+')"+7I]1X^?/T>A_Z^?I['@K,&I/`RB`]+G)X0/;[[Z!V") ++M(D2`B`G(3HR?>$,OM]N]>WQ/_FBYAV^%/^K\3TA"W'CTX"`+K/5*BBA4(B`\ ++MNF!@;19ADQ0Q0(I<+SN-8%1U";MJ9R[`=]GKX3<&^.L<5X6@".]SC\`!K@]O ++MC=`=>2KL!8-[AW!=CNK(7O>"KH*I.T'5=`58!SUP6O08!EB["%V%6>;SPMCQ ++MO!`P>?@!N""#!XB,1(:8U@@2&'P$J*WM##Z<R(+X@+:,B(,#;M#!(`Q;/HX( ++M=(@,4D2=0KA9<H?)N[I-S;]7Z/1:,I"#%V6Q@95V"+L02BJ-K+RIJL\XR9K& ++MP2NOT"`L`^@/O>"T^?2H:-">]X$>(`\!=#%C&05M6^NQQ4"6%'#GCOKOOO=P ++MX=G>N]9VO2HPPHW>C>K#SH>"C)(!WYZYWSS'CF\X]&`5-=R'O=SW%WJXOM8\ ++MGL=#,3/TY9#;</KOG<5>_=Y-<B7TXJ&VQN&-FINP\:FM<+7KG&6\YN&>PYH[ ++M$V99Z;&<?8T<._,&7E;=5AAOO2M2$&8K+M>I5US:J[`%-K?#A>!`,<"*&`A" ++MV!?M'J\P-"L#<.O6('#6%"%BVPU&6-N^Y5E&KH$>SU@8%?N\-"0X(9!0P$0; ++MZ@&!/5K$OV^I/IQ,E-WIYEZ)`W:N\`P""AS&^L$0,8*!'.YH8W!&)HLT)HN] ++M2DB6\D;\2UK$."PQH@8E>L":`QPP8-#%<%@Z7>4'6:(3P(WSWNY)-TM.4[C> ++MU(TQPR@P6+:L'1HL:./!!#!>L[>'LOLO+85G-S-ZBLW(@3I0.*[X8!X#:IA0 ++MK%'Y^[0Z+"]`*DB&T)?"GV-FWX@@U6ABA`,``(!#LCK>OO=U8\@G!G2+#&TA ++MC`(NQ5^0L`AH0,XA#1JNW<K7`;[NU!&M%F4F:$S#R#TFAU]S0T4K!T+JK<U] ++M74(D3C@3$&ABPZ'9&-#FA`C1EL[3F75]UR=O7%QHT.(V]=O;CS#<9RA?7E;1 ++MDJ^W=N_;FLZ,.;@P,$(#@_&L,KLKC=\AUS9/]'!]!N!_?4S7QN8DB_HSON`% ++M$>P>/O&R,XQ(JDPUOM6[T?;5\ZXVKYIM5/H.'7PG8W=SLSBYNW<757=2NJ'0 ++M$%WQJ3E9!VZH3_%KC\636P4$#T]5-#O<#+PF\^:V[MX'N=S1BOX>^&_(8=/T ++MP\%GV_06GQXP="+T;0H55!K8KKL&59!IR=L88JWC-8ZT6L[KXPGQI##X"L#T ++M2:0PAO;X;MY>D]4Z\+;SN$L7[5.$/0U?!#1DH,8.%L<,&9LNU=W(=VWE.4)V ++M]FD6/#B#@(\O`@DYR$$P<-%"JO')F9?.NNM8K2=FT,!*!T;S`L,,1F`C&."! ++M##(8891;+?P\_>7W;/$[Y'R'-^)!`E"T&#XH)$J]SA7\^JJ/[O!#/EXHL!-? ++M0CX$+Q1V@(2:5LIAA,U+BT5ZP0"2UKL:Z@OWL6?@QVAU8K"<]X!)($CCW9@. ++M5YM88-$85L5U$7Z$&&%$D$H)NRX*80J"J<%5(5&@5HQA48U@0%Y030)"5[*F ++M)V%`TPT'IC&U[&!X6\VJ$`MWLK7V]=@#C=9CE<\@L-$C;&$4JLM6T%3?I`R" ++M[K#TR8F@$?>]B<D$].N8F4&^9SE".)A8LA4`4(F`#(@9"CY1THXO6LUPUK,Y ++MC2R2.:1,`Q#/LYQB8L!=`P0<$ZR^5#0;LF)!+$3%002M"A8`+@+F`"XB9V== ++M;_'T=?KZA.`0#7H].OC9>RTS,7+E\)FJ6K<+:02?RJDE)`&?$QD<004424=K ++M+$`A\3&@:!3(33J#S]57!=I(E)$%>0))Z(`@0(DY2:7A$"8&HB>+4A2SZ#OK ++M#-!=JZ%4ZMDU-FO%1&C^.7?NF:.MW0&FYQL5737`T=:5U033<N.^F%UV75O9 ++M6(9KN,(S5T*ZMN\R[)[D2U:'>CM$6*Q&[5DI4S&Z@DHEBE3NV$9S-X>R35KC ++MO5'7DN,#P51>P%<BJRV=\J#CV;G-S'NO-/FY>ZJ@P=7;=5U,W6#<F&:UTPT* ++MI[`^!BU;1OBAG<'M(6)CX*L6B;+OK[&[!02L.AJVIC2RG=0V0&4XP,JYR>XR ++M=Y^K1O;ND[O'JJP5Q5`GJ@<Z6S%V7M[WO`61#6T-JO>\OK(__H%CP#(\OVON ++MUON8;*TI2A^'8VNTT*S`U2X+,@QC)@01+DKZ#%,$H`IB%TP,DLA+DYK69<Y2 ++M8AD@H2F8J!G-20L&($4JN`-+4(!GL)I73L(!@BQ)J$L0P2%61+(Q2-">:?BC ++M5ED*)+)#<I+450XF62BI`D"T"#`'79^@Z?'K+TG8@D:?KY82I@(&`0=:XW"P ++M4_^P$!6E%)(U@9+'_86!00N6;U$=+"8CH>O"6E#J'<8'<E91@@1%.WM[3MZ> ++M@[.C&8U('3`T#T2,2/V,'B3RP;\.,>.KM.#Q$`><?&KFMG#F+$('3*VS$<9$ ++M(WC]RJHET[<=P.&&(N1,2@<?)B/>\0ZCQ`:-N.$!MB>W))H@)B">\$Q@@F8* ++M8-8XBA!''`XR3%4$$$I,!LG9,R<>]$VF'49,O>&GK'<=0;G3CUG<P:Z"8V.\ ++M7HGH[ST'>+W*IX8/Y!>OTHH';6Y#P6<F$390#>72>G@UK=[ZT]^MSQR_K.+3 ++ML*75XL5[=Z&0PKA7>`'>G$,@%Z84KB?CX/$AA2Z.VH!)*:4(&LF*O\Y?0OU5 ++M+A`\)?_?+^IC80)2D$?Z#\].H+S-!?4$+\_M<VK0!RI$J*O6;7"D:5&:1$HJ ++MXCI@"BA.`9"&(98.3C\0&:15D@JEA4,!J23!(E^?EY)))"2222)^O7*E>==) ++M2"S4AM5\^M5/BO-K>I)))))))))))(22222220A!J*4`305$+^>C&AI`XCG' ++M&=20D&:J@$;5$DJI#_]8F%FK&+56K5JA]'#31S!HRLANKTJWDUHV*RVD;,#5 ++M"F3"&):;;O=-<FU;S*BHQHU!05F1%$28B&A=!KC<38J<92"=EA!5*((JL82; ++M#,-6%WF&R`B`:%6F@I"`3<O%PVZS"Q`PD%=B4A15%+W@WP`\$_$3:A]T>=J$ ++M@@$`E.V6''BST'5E,>4-'E$L'HHH<4Q/^Z(GBJ*\>XA#4A0H`5V!!I+9BS&Z ++M+)-/6TDF#.KVADWF:G_CRN?!`M<+V4*[J%^)M;Z0L('Y=55([<C4.918KQ-I ++M'#B-T:E"L5M&(63('_R0"/;_/P#(\-80>K!H(PL[+ZI\9]+3X>B$4E`!FC)P ++M/`3L$()`V2`K]C$13C&I91A0F2>6E5^*_&NMK\>^UJK)(H:Q6(VEB:3F*,<: ++M8F#@4(A0*CI`Y5VVK4]2VVJD"2$5$)`P1%!,(:3=#/IG@0>8.*`H=5$140;E ++MRG&PPS%)P@RL8#(*H`I%>@WOF8AF&T0D#8B&K26V*L4LLM:HL@;F%N4-,+J0 ++M941$55556E69;!2%EHPJ0JMC`LE22&3P932H*.TJTSDM%($$.3D%C!0X8YDP ++MI,/-!N8TB;:B)3;;8!X[))=+5S:+2;:+3+;Q:W0A&1*(-4HT1UK(:!H$V[.) ++MVX;444.1!!:)44:)?/XW\=7W^*^:WW\S*`J@G<]-.C:*(!Q!(ZRUJN<52N7` ++M5NJ%J9@ZJ%P)XA87E2-@Y*A%!I)ZJO(KTZ","7SVNXE7DZF*)-[,/$:K'`DT ++MVP3%V^+PF\<^!]H2"^2!6L9NSWR0J'YBV`115Z+!&43HYDU0P@?>^^F]6LH; ++MD?P-$8K\02;GE<:[72+V_5I1HXUS0BZ^,ZUO6:^OW&.7E\B'+$;UYD0FOC<8 ++MLP,19WRU7$VMO+FH7;,P"S:TY[6E$-D"HX^?H^>MG!!0)&`5K^`DFV)IELT- ++M%*FA*39H:KO-=;+SMK6MHD,S6DJ+%I9,Q!C4:KZOQVUXRS-%`6"PK6[\>[YM ++M>M:M;;W))&RR)E10HVKO$VU:NK3:K4\DA)))))"0L,EJC1IJ!,$10-1$%@@J ++MH:(I&U58LNDNQ%NXUC7)EN3JJY6NXLZM8LYVK$N749Q&(VG=JWFZ(RNUKR$D ++M%<E!9:6C9:DB@E&%DF;!8;C8F&#,J;`-0H*"12Z"7&I1BJ*6(4FCQA#G>IN` ++MH!UW11D8":&K1$M"V?J$LPMPS$,EZMY2O:UZ[=:WJ3)))))))"222;RNKEC4 ++MKIUDP8TEV:KIRU<U+LS/5H<A,SG2C8N""0$SD`=4!0`@[C>CQ61S$L;3GXRZ ++MN!2EP'>!\(\HC)0V]GGRA][_.+P0/AK#%W,X9[S&#'X-MV+"\'=2>%BA_E@- ++MNX-$`20HW7]3?!BQ)7W([MD=9W/FIZ55.Y="N"H12*-JSY[/I%2-@KV/LH,$ ++MT0Z!!+Y_AYW,&=!,T'GORXV+)&]FX'TK8=S,R[<UF4CCD=JT2ZC5YS=GH68B ++M+51AZ3`G'9`B,@3*.=]*04)"D)(1J;3Z\'9[?+G1V*@A1,2(9D#38M&W\5MK ++M6J2222$6_AG26NNNVN*EV=+<TE0;,<5`TZ"@/1B.D#=$1514GJSC7%RYFYC# ++MK2EFNG:,VW77+&<(17=U;>>5BV$`5#$65%%T9)[0:=9$4UA83A8KT\-IEE1$ ++MADR9":450=AM@,@A(AI&@S,5#;I)MVM7DDI&B\="KLLIV=I*=K>7D45U67ET ++MD,E$P4I..&8#.&`F.)&`(-B8`HM"H-(`Q..)0%@JBQBV2,(")FA)(M+96`)# ++M+&D1`*&;,&G!44',@\XADT.LR"8@:1B%#BX-I@Y#M0V#32'^3`3;H>.E7?Z\ ++MBV1$120DA`C6,$2L)MBHVDVEAB*A8+4:55554A)&1)!(2MK:PFD$8B@BH1F` ++MDON#P3>3K2D.M!U52B<;.R!`'@2\3L&XZ]DPXFIH8[2V2'TJSMJA0H-IVBJ( ++M_LQ`?P)`$7&-!,"ZG];?F""6:%A`5[#I7U5/8[]8VDE.T)+<WW\8JQ6[C4*' ++M>RV,(;2_U@":P"?`CQ)(S0<GEU:1Q;5.6KU\X3-Y#'(8RD'7O]=*((<)@MG0 ++MNG4M-!6*'\["$D($D)(D@0D!`D))`@21IY_#S7D&BL2\:NA35UYC+JKQ)"$F ++M1(D@D20$))"2!"$A"0))))))(0DD@&-B5,U"2!IEHQJAEKKS;K5WE=;&FDEB ++M-C08XRPF>Q&ZT*BIM$IH(HQ;7>:7;:\VA&DVH9#9*S$D1"4HY,Z7Y0J`FG4. ++M`J`[3(*EB1B)*%E'1I*/*,\M<M)JBI91L3*TR9"+KF&I'=`DA($KO4E!]^5X ++MU6MKUB$L0F2A6O6>;QG0)L0U@F'L%DR15-?0/77O$[L@W*9A.7RA4AV0E0]' ++MAY0-/'%0U32LP,1N8IG-NB*:,E@8.6A4FC!BWRFD\V@8G/%DM+,=D3HG(/:/ ++M`CUOB%:\)LDO5/Z%E([JJ$BZ$&=K3*S[5\(D##Y`T4"R4B#I2="S\@3Q,ZMV ++M<G5R<;WG$MG5J#!G6E[(8X@*+T:(JS3-Y07EZ95G5)41BS?)U,[(=+//%"-U ++ME0,U32`O!P?:>LZ4W!%$[DU2)$#,C\P:$B:22MWS&=6WE"T6E)1!1@&(8.N] ++M&!!M5VC04P%*4219JO/,G;:K:\P)(22!))%,RHU?T.VZ52QLE#1M#T8X6E#9 ++M$3$1$41$)))DD220#())"$"22222!))D22222!)))))&DF2`_^G6+I2'@.*G ++M,H"`F.FKS5O4DDDDA"222!"$`A"29)3)21)19,VKR]6=K;R!,1E%BC6-BV64 ++MHRJZO#+JKR``20BTT403)?+`Q4)D(D31N@YC#H`][DB")!04#%%$PM";E@7D ++M2??@!FBI&(H0]P<Y.`0.3/9YV3W(<`PTGNKXXY>F>MX,T6$9UI1?==:-!MH\ ++M58)SS'FATJN6.MK!I5#@=6WMAVV^8KW]??'5/$;?,8*"2&X$"1WODK@+!*[O ++MU1T6+,_FMQB_E>5@4HO7Z68K%M>NG-Y1M)7XQEU7]']V'(")N22OQ&[<MOX4 ++MM"-B4I,VH$H1`&#\EA,`=$R2T3+1*3&FJ-6O5O*C6]&)QHUY;>E-$T5$5I9H ++MH+440D56\J]%-=MOI>FBTU1@J+/^Y7)-MO6]FKM:U1DMJR2BJ2E&<I9A#*V% ++M:24J1&;7FO%9D7\?-JZ]1B%9F(32U!4PIBNXI1%`L1<511/H;="0E2PU!$!- ++MCUU*5&KW4\;(8HFQ)19);>7N,U;JUY4T%88BC$B]2I:/1/:&^PBQ/8GK3U]3 ++MS[-NW1I-[XUJ9KVX9F\+25A'680]$)R!=KZ:P30PPC!G3&FD83$PF69^^'CN ++M9[!Z#`_,!O$"\S,]`,""&]."Q"Q8M\))/J"%56!MLL->207MA=\*7.?4/J75 ++MMP+9U$KOK^"2^U?:2)5>2?K&H)*#XQY=L:.!8;(,H2*6EZC3J=<MP4#+%9J= ++M5<C!MT\I?4L-A<[!R0$V`K=EN;C=KD8QC$WZ?K8GK%?MG>C5`#E+U8JOWW]> ++MKI)4U(-+;QJ^0"AG6?38B"G&BBB*)I&F.0MMH/9@0<E`729(&"(IO"2$%"5+ ++M1*9,44J4F'G;4\HVMGWT\O&BKU"20D($@2$VV$;9"X35`T$)HYMT+NEI6C>& ++MWFN6TIE;=MO($)"V33"Z!-E2&X9#2TALI*:([PR5I:)76D-HV3308Z4G>44$ ++ME+0PD%!#IT\S&GA[&6.'G4243(C)HR]ZWS(2D12*%V0&([-+T5&)I#=%3:5* ++M(UHV1*,26_'W_.K[_'WT%D>]?(Z\47UUFH%0EUF_7C@.@G%**9F1O":%PYUT ++M=*E$P],S/929+P44'8^S.T6"BG(DXQE3R>W!HHT8$`@DK*8)6$(DNB[;9LK5 ++M?C;%#P^\.)(\K^].\YS0P_C!F20A8W98)#D,?Q6EU;FI%J:,5$LM=^U]#=Y: ++MDU>HT#8,,2FI:PT)%8KI`B8%F4SJVIM7,2=B][,*()0A(:J!(7:["9*G9E)- ++M*I5%LA3(-5$9*;EB\M+R[1L;#)J5%IMFV\\U6*HT9=5>"!HH*/?,+]$[\='I ++MU@S/1]G0]Z,15$J"A:B%KUUEK\S?&\U?R_CODD$#2++',%,`Q>%%\C#$=#N( ++MFTDM(E%B/-G\=[_-[U\OIX7S"?3[/E]G?7F^AH5#K>(.Y7D'F,S"UG-AA!)" ++M@0:?]3U!!!,$W/0:$$I89Z\O+&B22=W'V?#!]\VW-W.]7B".%7\("?J@H$%8 ++M:TRA12KP&7YH"`%,CJUH#P*)TCWX/.\7V-YG(P.$\%%4._L\^_N]`"*&_"KG ++MAL`^3"55-/WOSA:S_`TC5J55HHL3<^&4,H8DS!BKI9:H)B"B)"GUCLV1BFV@ ++M(8FE^F&#K8:(#-`:66HBA@(J(@(T_2=RWV[$XP)++`23!0FSYIS0[(J3ZPX1 ++M$-HHIC0O%O=77:*\:MJTQ:E=J\)-11FW6\0$D61%8L!'TI9;`IH#MO"$WL6L ++MC684,3],Q[VG:G4X.RHB(J)))M[%W4W8:YV52;?K_2[Z>?9#Y]_3\VS_^PX@ ++M3M[*VLK8/P`@9@947Y4P_-6@!60#D5^4J07EAYP+=9\/AY_B?HX]4^]WAT:] ++M=`5!21,M*TE!!+5^'K]_N[U/73VU_J4\^&!2>5>#4GAR7K'"=GARN0;[WI[P ++M/O=YU0`$I=0'L.9H(SV@L/<\KW+X$'P@[*'A0LP>)RKX1`1>R_#UV+B\$1`@ ++M!<\*?NA>69C\-X@#?`!@+KX7ZPMJ(J=7$/U">.4DQUO"/.>/$3W@-]OH-`[U ++M@YV>G=WAYSP[WA0"(\^`7\/)F2IZO?B^W0*"8HJGDHUOX4E^:*>Z`.&:P/9F ++MZZ$)&]GAF6+!(M2VVU6H]O7N9B1(/T?:S/NY[XVH=S+SX_6!@))!KP^J@P@< ++MHE_8;*$(^`G>MN?GYO3[&,;9_/#5?)%1S68)F)JA'WO&A>ZX![P=U!2IZOB5 ++M;][PJZQR'MYE$-YGLYPM6V[WK/<(DGPP\]O<B0X37-S71%%%G0#JF[NW"%A( ++M;VN^1'J(E3:O?G>[L`'B19IQ#YU+?JOWD/`'W>@-C.NMG:QU:8BLA\26*IPD ++M`D>`GN&@/P#\SK6K4AA'C5!^9\"0'T^`'Y28]^'49GX^U*-1J:>YE^>B?6#V ++M=T:/4>/V^!P;9&YY;6>!J]\0!@$\@7[0&/0!^%98F^Y^0FA1FRKT9OM`8]`& ++M!EV*!EN!L6()YBW!0@@L&U7K)MP,0%D4%F=*&,4%S2XEXUG.V:WFSMQV`R!` ++M.P;"Y@V+%`0,#7`*$$%@W8J$4'"W;$8MP5)9L_"VBB(%X^T`40/?*U@LVL"" ++MK;E>)YZV*H^WT!&A"[$"#%J6R`*]ALXE)F2I1K(K3#J,9@6G)<UW;&YOEO<J ++MFYZZBO,&&GCN[_AYMOR\+.>TB_&(*?L/R1^$66/P`^]]@^/@3])(S:\=>_K^ ++M%'P,L`Z108T'T&T-O=_#Y^=]Q0MK)](T3E:/W@./@`3Z:*,S\.%BMZI-AVFZ ++MKX8&!KX8"#!P@%SVBQHT,$/A3,ZKW-RQM9"8.@N#K[6(I(;PBM$^][K/QVS; ++M\S$JZF/J8*H7UWOV`'\(J$X<($_:%0^&#X;\>?WS)2OZ=/MGS@M7.]SW=9U= ++M<_)M[B_X4`_"P.I4B:V<0;(`C#-8G3:U>C%6#+R,!Q@0EB0V!@4",&!,7H0Z ++ME>U&\?;E==&',5<JUURFX-]6Z,T(E>%"#NZC6YU@(^!.X14@Q7.!W`<I;!Q\ ++MQ_+MCXBT&+!"\(>!0AS+Z:L;4P<FR*/%9XP$J-[BE?170O4^--#5Y(R]U8T% ++MXC+'!#1VA:/A7`_$8&+RH+YRL3D+FKK-V,F#EK7$P'6Y!:W@0M!5WKL[YXS1 ++M24M+0T%!0%)Q@R"K?KV5"@`H=[EKAV,`9-`0BD$5"M<M0H*]3GK;Q.MPZ$DE ++M$]8H4/A6BOI/8."N]H);,M5LRA:^X9U78-$\Y=$HO%=\Z!Z8L=]>";!(%IE# ++M@QM#1A`[1PQ+NG=N\&Q=MUW09B+>X;8E'@;BPYBJ6:N/MR8Q@L0<.?F$$A0O ++MA0U`%S<W=82Y.\KDN8Z\M92CW;R],+NH*L!0U;$%557GB)KKQJL@,JJC2T86 ++M8AHV\NCVA</PY4*%3ATEY:F.LQ_8E?(6UOB#X$^)!)H%`M(GQ0(HC&B@QNKY ++MV\;&A7:501%6&3:7>"9EYU=:8)M%T;'>;+79+QU2W,STY]=V*0Q8^ERB+Z7R ++MEXWNZXH]WX]L"'VA">11TJ$V4?$^6**J#IUZ\7C?D)(&$G1!\#N`@T"L6RY7 ++MU;>66-TV/((;]D:/7>\.9EUU;U1WVK/F*JCSW@T:.?@^0J.H`<:NB`Q=MI&2 ++MH`DX38T5XT=<Z,RYW[@(GL2.H$=]]&GEZ=>L#PL#`0022+`\#]6[KR_$ALMK ++M/>%NM_`#X?A7`BI8`!*XU7S@F<156LN-%J%Z$)$")D<!NDMJI(TG(@Z5,MD^ ++M)_;GPVKZ!X*%-.GAZUR^^<=7>9#:P&VB4-Z\^`\GZ^UKE*H.K`]<]ZOKRO30 ++M4X@3Y(?!H:``,6$;B1WN_"I^IV8X+_4;.A!U3?8/PB04&)B^:QUPRW^NNE[P ++M'L^^)S;S[O<!YVS'[+#*?JL!7>(P!W%Y.('N@NA$/2^@'T2@2=D.*+&$6:TF ++MI-GIPU+V(G8CP$Z![181@E1((19(11@@$((DB;7L`'3DZ:B*BCEW;KG+F^0D ++M.(2I+I-324/5[A.IV<18)4!8HDBF4;5^.OT;?JPTT?JZ\!V6"F2(9`F4DC*4 ++M+**4++(2FA&B:32)-3[Z^_4?[[D@\![16O]H'*-D%()-$=^()!MW=U0?F"*2 ++MJE5XZL@I84P\W^C!!:F;O!0H4HH[D=5E3.K;P_SL+S;PR"K-@XC#<RF=W;,O ++M>R(=J=G.X[BG.JLWCH8[)RFU2A<S5U4-Y+.MJ"P\@RDULFXO'?745Y,S75OC ++M3WBD19B2R];F.&I;O`NNPI;QQX.EB#,[VR5<=<1;NH3&JMSV<AIPP&BM+)!N ++M!W"7Y+V'(\Q^#(6!^?@@2,'#:/DZE!TG'P0%'.?#?=:2AUMP`-D,7*>^=AC8 ++MNWMZ/<Y:P695OW.'",I)"S:JI85"Q$=R"0Y2+K2ZR'+[>QV*JZ%ZEVZLR[FB ++M4]Z95G5'AOU>\$1XD%2%WQDWH"SA.V_'3[_QP\S5Y,`\SF06`FQ*1(Q!(Q,D ++M2PFR;(6PE1L:2:;`1BF06/MRQI+15.V[6$./I86C(#6&+2Z(,(@U$42B:BN7 ++M><[H"9*9(V$)EA(UBR4;MYU)O)9,4DS78VFN14Z\VE7C2[MKMO&33,19*BZB ++M7*BP2V%@B@C$5<S$3&=NF]FKF'&&Z.WKO'!Q:<16@'!,`&*DBHI(`.T[17N` ++M(808.Y1.JLJYZ][Y6NZ[<N#EI"$Z`Z485I1"8H`6A$(D$I%C@=41:4U`I$HR ++M:`U(8:5H:%$B$H070FR.SL]SH_5AIH^=<\"K(SJ:D,2"L4DPU;&LMC8LK+90 ++M!IH*5'4(LB;E5B(9`H*!F!"<T[!)PVKN!+SY^AOOUZ^1[>I]X,#@`$,5#$!2 ++MB)]86]\R,6TOKE2Q%:`R'C20P1HWV7F%PL#91*4HDH+ZLP3J0.`-A*A`B=18 ++MT)3+0<URAZR`$1$<HB`(!(%B<!X=TQ/YMS4WLV<E_;?YN<FC:>:\ZQ*<Y''/ ++M'7KPXG??DV^#PX/E[V=\/2H+`/<*_*DD.(SKIIB(=HAU&;0]('\/J`]W?XGM ++MZ^SVE`=U0*"-N(F2>9L\RKRIY55=8-4\E85B7]N7G@E8(KLY2=QA72'8@H#S ++M>>\ZG\E?+EOO=N^:;91M_)#`@D"0))DD(1(!"(BJB(:-'Z/YMFR80I:7J+#K ++MLC=7HA))#83:RHMH@I))TZI2F@/>L`-!LDB!%66IA9-&@VUZU>(I=X$92&%# ++M1C62P46H(,#5!4N)YVA8([`EC63(+(&L@L'Z,A`"%$RHTL*T"0L3$_3N<RCP ++M;3J@S2-,3%Q#%N$BP`^K\O>>S>R2#[1/9[S,T1FVA:%'N$*89/^ES'*D_TC" ++M_L!B(>?(?X+C#')6Q`0<0]G,43YF'9_>A-[-[!#?P;UR??>1&A"8(2<]P^$" ++M5O;]>?#;[-,-SX:!$/8CTPX;WO6]8:U6(GB%QZ#:GV2Z!1%.3!,'$R1/I4JN ++M%$_!D5G4R:!?Q^6[W`A`@$R))"0F`022$DDDD(2NE7J*@]UW>*ZM96\SS3;R ++MWI(```0``;:N7FWJFKSRKT9MKKUA<5LNC+JHVL-Q1M4H`:1A#.OC#<HDL-;D ++M1$,48>E`[A$/F<[#ECM<P(HL1'V]_%=^NGTIJX!X3C9F"GK"TH6TWF8=/.M3 ++M:J@D4`1RYPL$6"&"P72$(@**K+]*%"!ML2EMT`4DD-(H0$BPBP#8@8^P221` ++MD$_6?O2`0H:>UJN!)LT+"2OVKQJB?U#;T_:ONX6"%X?3/+Q`7B?!?#6*<.B, ++M$U/SD7IU!'31\R[)0T/PC3F5']8A#Z(4P13PH8F[2(\%-2%.:"1&`"5),74( ++M4+:PPA,)DP,)!"`@A<(T"-0P.R4`YKVXAL1V9$6\5,E')H6@$*05R2<HL073 ++M*"!"AIQB"!P>0([(D3YF"B[`TJ*$+*60H$](>KX?!(H)X>$Q,*"@H:6W8D>W ++M6ETP-RQ0B!,HV$'#$'`(V'K;)DD%('J"`@D[4P-)%`8KJ36BDML+2RS,XS19 ++M5LJ\SQR*:-SSC&5<UK;MQ=N"/ZTIE=]?IV>9!\0?'=W1][&V/ICU`$G=^^), ++MKWB?>\"?>!)'WP26-:AMH`ZWX,275US#8"0\@UYS920U"TA5&"C:-C%BWKUV ++M\E)3\3511!%,X!.CK0=\KFC-Z%>_7C>XA=I4B6OC=^?(!)(>JKNWYB)I+RA@ ++M$U0*L9<>D:)9%+0S2:TS3&I)D*L2IJ),VD9"DU146HBV2R204PK,I*KU?P_3 ++M&Y$$D^IVR8,IB?Q@$&-A+88DK^6`F$,T?JJX3]=[M6[H-8BV"XY(E,1)BI@N ++M2^[F#H<P1;`0L%]APT@!_A-JZE\$6.^VA`FUNKUJ6[>"2223(F1,B21)""22 ++M$)"0"!"$"20A(0(0(0)))$@AD2222$DDDA"22$A)`A"20DD(0DD))`A"22!) ++M"$A))(220DB22$F21F1(D24IE*4R)$DR03(220B20(!(BHBHB(B(D?9`OKA[ ++M2_8;]/OX"=O.R'L]NPUR;`-ZY\^K(H7BSH9:JJ=86E)92RRE+"TL*QZI8[-X ++M9E-B>L(^V&"B:&`)B(B!"O:JRM.1@$YG)O(8FS<%@<0<G3WW6?H,]J$)R6(< ++M=QK*KZ8(AFL!4=[ZT<C<!G7MN'M[NNXI+88H"&?9Z<1-(AL1&@6OH1$4,()) ++M)"0@9`220B2),S,D$3):&66&&22&&1D9"0@()992DB$D26666::9F1"`DA,B ++M"1,R(0B9,B0B0(212E2I99II2F00$DB1(3(F)$2$B)))`$2"$2$A(S+2TK*R ++MTM++*4D"2"21$()!)#)!))(B9$A)#2FFF2FE,F0B0)D2)))`,S33,D2$A,&9 ++M2DB)"228I3(B0"`DDDD)))DDB1!)))"$JJBDT3%N*)K$#4GAERTFH0)C`3&H ++MP@R$QA`.1$KHT,18Z(B*4,-)@(J^+@Z3:+@NG!UDY.,.&1$,H%B%&(A.2MM0 ++M0P+("4CMT?R_E^GYN)Y]<0+48I/>8/QIT:/B<7?P:%5.H$HM&J-45HK1JQJR ++M;57XXQ0"A!*$$I5#O,50I%>OEK2*TH%*!0AS,$*!OG8#0.XP+4M2V/,8BK'= ++M:(TU%4JE=C$WEDR888:@^TTTQ.9SS4TU,$M$4'P26[(PVWL`[^UY<,P0))C! ++MXCX0'\ULR`6`"'?@@*T<W3D\]0SP]X`P/_'O"WS`T6+2&_!B#G)(`(-!/\`\ ++M"_`>`PCW@*_AW[*]^KO+Q*GP"#<?D5R\\SO7>D`Y*`=$'OX#(J9FHBB-^/+A ++M!3>W-'C:[T'4^NA10\D]'SXJHJ&<,#$E8='WXH?CM?E-%-$TQ!0>HI#)W\R# ++M2.YJC=$3(Z04F5N0Q"LBJB3"1,YQ;44I0(8!%#>R(/EN@4H7E9Q>'#FG8NG[ ++M@N$5R4(1X-%4R?70B(OHM+X.9F8SJ<SJ`<=4%)3F4C**490YAC$&9@1,*?7W ++MFL[%5RYA0A0[@'GKF[OV>K[GC=Y+;J\6'#B%5QV0*0AE10+/"Y[+`40JQ$1= ++M#<SD&YT24)AP&THJK1^-V#$D/QS#NT?W#@=5C^T.)^7/?GP:23XH6?PL$N\& ++M>6:'Y+\@_Y$T3[7_((PDBTVO9$R,I`D`DG>_NOS;W^.^U%!$7C)KR4[=&D!1 ++M^J$Y4'N`9$5U:T^^8BRZQ55H!0?L[`,4``U!0M(SM0_@1AI)P?F0@'[^E>>2 ++M+,2!Z@G^ZYRR.H(XJ);!>*N)#`L&B!,214PA292E<A'(6180:5&,@UBW6$&E ++M36\^\%TG"DVK.2RF;%,-!5XQ/:$U&U>$1$1$1+A*.CLUDUHV10B>WW0C"5"# ++ML6+<L$`;MGN[.%[AQEG!:6$V2DDSG=J#0,TH"`A75-T*'6WUY*Y;L#&AMO&, ++MNK`8:\P00FQN!'&M>C^VNT>%9]HYMN7EL)^><*25T$17Q'2:U\`DA'@^23/X ++M`#*_+OM(22^5#O2V"8RO,2%>4@^"EFS2MJJ]0VH1*!1*#:8)*H)T5XL2H$#$ ++M)YAH$AD,0N1Q)$_54"I,-KSQR<:.RH,47KQABX6LV7<R0A("8?<$@8^Z-ER8 ++MKK6M@TFPE!1-`CK0:<FDM"K:76C4OS)4,-.@&9!=PT.:@*62Z+"T9<"UR$$W ++MAI%-S.9FJU!A9#^7W\LM_I\PC(1IW.Y*CC9XBYYF"4,&1"J[@UCF64B@U0HX ++MO:-J3,)L@<?>T@>RT;]=!D:0Q-N()AQ*,`XO#DFQ&4V4MXS.+SS>!*J$$X*< ++M$:35/W*AAI-8_,2!MO;IH>%@/#8=!?TW0'Q?@'!]00IO>@TT*)H[X>`&Y8T0 ++M1,MKKS&;G_'."OU>`[/K'-5X"R/#WX^\![C[WN(MO)X".5T""SH'XPFZKMNL ++M$00GA<R.K:]W@-W:>#'J*WQJ0EP$3UUE!ET6*4B238RAE2Z-"@@H<=.FH[Z9 ++M25E%I*%NJQLY1W/#T!]X8R9SPNS-$#$*(<=>22G52M*2VDUL]W$R'%BB[T@( ++M'9'K?/4/WZ40OF"(4]B84,+9EP8%*.#R:18FBH)BL'0R!HN@L4S!$9)@Y+I_ ++M.5YZ$DA)MN]5Y37,O/!`DD@20"$AD`220DD).O9G=.O4:NKO+<N:_;WZ($@0 ++M@0B1`@`!`@%"$ULXOOOA$1LB0V)(X:*B(B*1$15H>SR46<B0T2^O1?3L9Y]7 ++M-AHJ9G\ERUHRTP8QG3\VFUB\_-OMQYS`D(-,\,T.>BM(/^@P04`!-P8"<KS[ ++M`<@59Z_N`)L\JL'AX>08Q>''XDB4<JZZT=4>PSX\XXRI<SSU@9XO9">N<X;2 ++MP%1B!$_B`<$]N=NJBG67HT&H+/(".J1-`TLAO$F%%N/W54?3Z!G`^):3W938 ++MG1PB*B(B(B(GMW4D70-DEK=B9)L(H3#*3T5`U&!C0&Z3<Q4=$2>AA5F)8WR, ++M7@_/S%I#?B`43-QPMV$U:5@;+`R8NQ%(5F`<1^T[7K`Z3Z/NP\@<3]`3PQ3+ ++M18B2YT`=N$^DHG5N`Y``A`GW*B@^*$A.RJEE$/AX+\AID_)7E>!,GH/QW]F^ ++M'FK!>E<,T7>;5WM\;/NX+S@:#"3$(H1R601D!1O6AOIQ;UZ5F^%D(L7HKK/A ++MG2(((;K1O78E[U]3'D.H=I@X8(/>'AUD#P52^=>'@*?!BK&YX>O&R0:7J$&0 ++M-D!BF+!!X7L`56,T4%`/+L'D-X[5^@&>'L#]*`GO#/-=*$9R=9WK,]S7F)E* ++MF6Y7WF>2"3Y!T6B!$`5DB[JPEA*9!B4L"VP`$CO8'7E7U<HJ`)PB`<(@&4M# ++M"!8#<;KL,;VSXQ16&=QPZ#<H`RK.T`!N@9<%N1GPCZC/`;@.==`#<"\/>>9- ++MPV`/#V/@QX#P#Y11MX_>!M[-7-L@,]C;V,=J^Y)))S.>Z2#2HB^SS7,Y[\U[ ++MSJ(JHGN(WJ:@,2OGST="YXZWS7D[.$K!"UF\YUXYT!0]X^(`-;;13%]BC#KV ++M``@CQCKIC.=\L>QDELWSQJZSOHW)VLLN@4[O/G1>=]/=(=^+?D7?%VNP4Q2Q ++M)4<\7>X;]M3,JNRO>$[P/O>'BO`)#Q][W@[!RM%0Y2N]+G/5G3P%H>/O>\"O ++M>"7@#X>\[FEBQ@XH(97E8Y@/QX^\*7@"/>\7<\.S:RN\ZPX9P-,=6YT%07G? ++M"YI"\=]:[1\&UA;9LV)MVG:^4-+V;Y=GD'O>\6K;?/>3%UWH80P*1RA0X>&> ++MGA4GAD=:ZG9T;,ZFG3YXZ:['G&,W00[KJ`P4TDLP>SV@"P'/0:!HX#`-.GG? ++M)J;3:6Y::>>S/-:*ZU,OI\H<%PP#<IP$^/O'@\%[?O4;[.,W+P.>THWIRJNL ++M'G[![!XEB`0#A;&""`$8(&!HX5P7"VO">P>8!+$$&<^D"62#N2I=U%F6#'P. ++M>`L8(#6"ECKJW!K,EY5:\HWX/W>#`+&^P,6-&B#!@8(=0/VC/9`.#]ECFJ?L ++MKKY]%FL]6M@Z[MH.AG=5/;![.2P3V#@*GA@?KL6)00"&;8P00,U5RD,]0O`- ++M%>L,8%GL"I!3-7;5-]4&8&]M-:&AY'B4,3Z*\]0L0#H+#\;!%A8.%!@C18L5 ++MHV@@05A%:W6^MZP1UE#9)O2-;VZ3DZD<.8J?&3L57.NSZ7SQI:+YI]HLCA@5 ++M`6*"]F%^P4+&AAA1U7$;-%PAKN5["A+0>%HY*SHXZG312H9'3T77I1[3H'>J ++MNLAA=J%!BO3V4?0$(4,%NUES*"&._3U4?1*LOGM(26P:]08!][U`>'"#-P,^ ++M!%GC53C5*(N.*46+DX<GPJR%9L07->^7F`14$K;%;(3HDPCH+>7.674?!!BD ++M8DH+1/K@/5@5PYCK).>C3XFNOCZL(H4"2%5,3NMM95"_(908H<."3"S?6,%8 ++M,%#UC*,I4XZ@SM%[M@$XH,<5WAQW>>A>G7@S:=#*=39)("AW=!@.5@"'&##X ++MAZS<O<O2KJ&INZWK(.W1X^X2^S6-Q$>?WZ^_Q^//QYO<,1%8RQ).N["5(T!2 ++ME,1WC/$!L//C1V=<>C9![A8[@?<-S.HP=5:49TW>(5!'!>+.SKL$Q;6":%MZ ++M+SMG:.1QDX((0A@L/A!H2"%#*%,2C,ZW5ZY@HI*JV_YF7GW9N8D81G?"BQ"7 ++MAEH$3LKK#`@^?OI\154.^.7/C"%\B/BR`.!/CX(@'T'W"_:$-X5@"S9+VI;. ++M[=S,2AT7#9-*6YK$'AX83B1%H,T2=T$53'#=&C/4<.5E++XYZ791G&9U,T&/ ++M09*Q9*K"*B*A'MY`1KPA/B1P(P<,&"!BE3JHQ:\2D5,M30-+2TLZ[\=[V0'( ++MP):ZZPVE)533O<6&@IG1JYG5"A$*BD;C)(!/AK7BU0!(!/D@B;G*6C6D8&*# ++M&A^44<>CVG`TL"NV2^.H*E09#P9/<"!.J3'![T!/B9`-E8,(JLH-6MVW%.%+ ++MBR3<VJM'P@@/M67$:RN,AH[:W80U6`PD\*&$A#Q;A\T>.2ZRUAJB]KI3X3,L ++M8;"E]PZ#3QT70O!P)(>N='>8,SR8B<TDQW;F%SJ2(WV3<)&VML0R[OCL[`94 ++MWNTV6M5D;$,]X<SHHR&[2U:>2@NQ?MMR>*%C0;*R=9.ZFF?0^M]@0T%]=VQR ++MP,S-,RW7:2I5G>*TU>1,67J@>>%9?6R:\*K28<QWGN:V]K2Z^VZLUW'<9D-K ++M)5)5M`^;)0PB$@``GWO'NA#`@'@NN\X=FU8`#X6^H\,LC,C8\2/`D>/O'Q)6 ++MR(P(+R39T$3!&:PS[["3MTWM-=;CF*M;;#(.5\22NJCEW8L@GPRB38QO,OV5 ++M1.86R4&0?R\`",G*SD_;]V5MLH?6E>#+5]"+X]>5DRECQL)9;756NM[D*NA< ++MWGI(FW9IW7B:.=F6*4N^Z;9YS0I@S-CB5EFK@[K%9+N^8//LU8E6R9.(N<>G ++M#9.:MKKI<]9VY-WLG=JO@LPNE%*K*&`O-730V&]"@G96'./6.&^UN_60CI11 ++M'@SEK1H%=5<#1[%"&21X@P@:?`GS#&;LO2M&%9F4">[P\!Z<;L\7[D=K;J9U ++M$7A[LKMO;R^?7QRN69RPC8,2N6;5L:.NQ32HBN>8V!1@(9]H]!T@%`^],,66 ++MCU[G7L@;D*0I6)/8BH6;(:Z[C9FE)&W-21MUET.LT[=75&C)*$E&R4B1JHTM ++MTDUS(DEKB1DTN[,M24IJ:*6+-795U*,RV-DIMS7)EIJ)BECNJZ72[697772E ++M\FVY:*E2T53+34U$L)3Z'P;(C1$'#GS/6_?OUT1U^J3((@VQF:;E!"!]Z3#% ++M<J!`!Q/I;0Y*TB!$"#YP"(S"A2JNP$4&#SI\&A#TH@*P`:E'Y0F,+2H],B!C ++M`*`?![^V_`J"$\*9@NW_W8FOF"B)FR??R\7>_'GK;M]LR?D8XT!,7O.-ACCX ++M,,6?'CXQVIOO`PF.T['V5\HT5@,-^@A&!W`*3`7*$#*"U"W^A%&711&R?+QM ++M?8X_`>SY?)*J*?!SWWT!T2Q`>=&,6B#CA!C@^Q(/ZC^/X^AV=_($&Q.U*I'` ++M`\FGK>.UOG-Z)(E'TTZ+A1!NH_Z?JJ5ZZ\K%JC544Q77]FV.80I#F-1$"4$" ++M00#][R0<?*J%`B`@-$KV53K<WG79SJNM0.R%8H+7L2U9Z!1IDL$B"U)4322` ++MQ,-,3^$M85(C7YX`GQ[O7U3LX5$5KC!L8-FS$-P:V90FV=N@-R;#[&O)SG3W ++MOMG</;A!QZ8YA7RYRN#N.$6Y+>C##,@-L;2$U,;(FG<=NM\#:F1.-<D]G34\ ++MQ)`K!];)#LEL[4]EMU<R\)*A_?\A'^<W>6AB8SFK/==7/#;LL!D#!H8LSP@@ ++M88&R0*K,%^NA8?F^F9?K!!!]@(:SPUW91/9Y:@I:66JJ\;:F30[_"@2_$,J8 ++MCI^I8."20TC-QC$OJX7ND-(S8;!Y0=Z[E_>OFB0+)]*=5;=W7Q"-`4Z*DA$> ++M+^`>!EJFF@M(1*8C,1#RKJ14->-;V(NCV,4$3^0%V'5U<=$7"=CK==$OS?I- ++M?3J,=N&<;QS6I<L*N++^<)`^;80$WN>SLG&&B9$-H(3A"1#21+)M:(N8]>^? ++M+B$V#D#QMQJ<"68";%<=M+")WN$V[XA>(-.J5I2T`X*X$XC)M&)I*(:-FG"* ++M;:S@7C$,99!.(8_$PYSH&\.DNQ,HU>QQZ-9#R\:V:*$IE!0Z='&P.DQW^`"' ++MTP$\SX4HKXQ.@F453QOU[_M_'G\F/W]I@ZI^]><8U+,F6F<LZ9U*R%ZF'`A/ ++M1"@_,-P::%#^#Z"223T%#&&V?AA(KW6#2[X,)*ZP$WPO[WD(AWB?,6"`5=$0 ++MA5@L0(K6`LVP*]"O>OQ]/;N\X>KF=;\>>+N$44/HH@\]!I?@J8@F)Y84Q52= ++MX)@GL2*(O/MT%$\RC-1E8ET:]!]XZP?,[]0S5NS!$2I"[\[F:@(B+O<=..K& ++M:PV*FR+9YN.]ZI-<GI#F^1G0\2)NG>&W=R/!34`S1@5DG`@Q&4LRT7;)F(#) ++M'DF'&ACKKJUA]/I].N>!\F#@!`!]X`SO\'_!$+RMVT:55:CD]Y0+WA"2`/\# ++M^A;`88""0P=6X58KT4>D3`@O)5%!OES8J@XUD4\P055[F4$TE"QY#`2P^*.: ++M/X45S@P:(.#;>6]\.]82"VJP6"9(="7M6>OQ*@3%B[JA2L/XN8#I\\$RU*@< ++M@A.6@2*B56OWIX@D$`CLR)Y'.]Z*(HFA_?@"*#Z:#;.]6\_=UNR0(2`2#^'E ++M^=&?B%^^^=+X2$(29!#(DDD(20D@0=[VO5HTHB+@&][4#OP<*HJKQ-*;LILV ++M&]W3Q,F!V<JHB*JSC;HDWZPDDDA/F]_.]7RY-\/GK)"$DNZ^;SWKSUW=I>$D ++MDD)(22$!(DD(220D))($DA))(2222!"0`EVWHR]-\RKVI>X!)(9@$!)"$DR4 ++MIF29DD@9F9("$D"$D)(9``$D*1(D1"20@$)))))))((BJB/T#D\],R5AB3)& ++M&-9QZ>*CZ7GOTQ///.%1$3I3?&M%T:B>I0>,*8)*F&&,%U52C5V'J6,^HXD$ ++M`VV&[_HUN@60B!I^L,8E55]8P8$EU7H[.)RX@J8=,PU;K.SV[&&+$YMSL'=! ++M061>E*KPK3$*"15$T4.\0\:ODX0#E:2QJO/5KNDD))(0A"!).>;YG[4O?J20 ++M"22$DDDH1!(D$($)(2[Y>,=[_:YY\-XNM?/D"23(D29F9F225,`B[SHY1B!J ++MB@UKJ=2;S'@AN9DT&H94V*Z!X0.,+-JDVX!DXAX&]SUYS>HC,A$,B)$FFE*2 ++M"0F)!!()---FS33,RDD(29(D&2220DA"0D$))")DD2&2$A))"$D)))"2$A)) ++M$DB0"4DB)DDDI3,DTTV;-IDD)"4E)&1A(2`@(88S3*922"20`3))$@DB&`21 ++M(DD(2``!$R2022""1""20`D`0"09DB)F2&$2`22!("3,S++*4IID2!)*4PR3 ++M)2F93,R1(1,B0`)"!2(F0A$D@2DD1(D!))(2$$541('0YU>MT(R1>EDKW\O% ++M[8=#R"""2"02-/KN4X/Z!!%?<*&A7=W!=A@NR0]RPA`:D<-)O`VWOE2\;Y*+ ++MLS,V11XZZ(=)$D4"(DO4\#F7,N^W)HO4X*=LCF7.N[.4R9"#()(I`R6Q2MZT ++M<UWS:2J)`0C"L2B$P*Q(`$0HQ*TJ,0!2D,K$BI$HK/DP`,E(D1(B20*"8&($ ++M(E`G8G-GM>I,)HFWB4)WI<8FWG@[#Q"0RE.BLFV35E&E4:T8PL5%A@DE21*5 ++M$B0H06A`)@2`@)FA%>$J8RT`4TU8C6J+-_'RU^)36?M,#R(B(M/&,$S.SDU) ++M32I-1@5AY>MO+W.\O(5O;\J]^@2$!=6N>[]*[QZZ`20D"22$(20DA`DD`2"( ++MB(B(C&E$'HKCV5!PWP53H0DDD))))))5518J@#MUBNPH,WK0&59833@A98"A ++M9BHN98B#&8`ADHE*)F..,\TIJ%T2"9,TC9Z>:\H.5MO/`DDR$&9,D$""E*:4 ++MS,F24S,R(@2$D2$@D0@)`A`D`C/ZGO]\XZLE@(TH3N>//?:;`)X0"&O/IDDA ++M))BQ$@9W^;TB#I4/8,(6+#&(P+*52E<Q&%+O69E5_3$\HI<WXD7&'@3;%97] ++MCY"P6TZNQ-0I[5#[#]1:J@N&T,\PO5>=8(8)HYD^%=!:!'<H.Z7*%_8SX_9: ++M_A%FF!3A\TM+/FDHG708`2$!"'Y77K2DQR(B,5$D)(!(0F>,JVV*VJC5DWV_ ++M%^SKU9D@+W<(SM5MJWJBZZ\XD`)`($B)$B000A,@"$"1(DDD=;FO3O7273$* ++M-71N;F]-/M;G8*S/0PI@%>B/"-&3CEFV,K8!F,OAVY,C&F+GC>S6;1!/8,,8 ++MB1LQ0ZC/F;7=[<*P8<JYQIUEH6UC9720M4S!A7+N'Q)@8O;OM&]N`\N;)W4# ++MY*F*.=1P'Q!S/#?>@H$U=6(,=70)T7P!(/"@"1;M4T"0;#4Z=4?]$]0%FRO? ++MFW&FQPT:NI2K!K*LHU:C%WD#H"Z!_;-,.[-%BQ(W6?MZ=-..'3J\N7G`X%%8 ++MHBJ&^7LB,41B(5;2RFW@D/(;B>FR$\X\&["E,-09GB9K<$I-[,NH/Y$9H1$1 ++MB:NKL+,TQ%8J(BL:S1PF1UH6/>N8\S%<SQA)($D#"2$"&;%KQ(6O%;S*(QR^ ++MD3%48J+LG3<#("';FX1R6*#D*'0(B(G&^ML<)2!FAADBBXY5F:L"52M#\-?F ++MZ6^)23'CE<2#2RE,!*(Z"+T0X6O012(527>ZM&[8'<./P]X#:L8"4GI//K19 ++MPZZ^!1>$"YY#7@\E43>K`J+O'DZ:2J8NT%.B!!/?67]^KY;5F9J3#)IEHJ9F ++MW0+(B"(HB(EEE#F^K-"`5,Y\Y$_GWWY]Z?4O9DD!)(R()`DD"229$`@```22 ++M0A"2)$1$8BBJL>^9,+.XFS#SNK77&]][]$A)(28`D```DDDDS)!!`)`@```( ++M1)>>=ZWJPKCH]FY_AA3QUZ3D.@FS@Q3&50X89A88-8C>L):?OI)A^E_GYJ9* ++M)*_E7\C``_S*I%O_4VCNVB;ITK)1'X_Y*F61*O$("+JQ9!*C]9PF@P_["QM` ++M[="TI9L58;0,VJT,4$D%5]BL('%P0.Y3#6\2;W^R3U^X)W[2PY[I1M$\\8F# ++M'\IE>7A+-5,669\8MH;0&Q*98K;"05I`FTF?-WJT+]8!.$1J)!)$DD^((/CN ++ML,$A2WG>KU9)2=F[=17.RC"$<<5I9@H"H9%:99E:6BRF7=TS,DV9F*9)-4E= ++M-V;26DRS-,EF$K9+5=FZ5:F6F3%*-,H9C,E,TF:-RUV:VP1(IB"*,AC,R(?( ++MY\?;AU!OX<KT#TE/:PX#EZAG*\.2:-'31=C=!;ZMT&A:3'<>IF\&,"H;B&"* ++M,IO'=`K@AI171P$0(\([DH&O_?80"?5QZG]/=XBWUYPSZ]YC^0Z_FOQ'<GM' ++MK(%+>OCY^]^;?0B?D6P4,HFE`R4H'QP`$F"1$+#2D&W-8=1W$BTTP:#\K\_" ++MU3L3LM>\+8NK-V8/>J@.&WZ<!>#=@][)OO&>"&"#,N+5H8[D$!(8D>.;X^#G ++M(Z"0Q[O'AR\"/4/"QX5DBQG"S/DNO"1?IN1A=YC"P^>OW!8&'`,]".WI7#6] ++MKQ(*\.H!Y-7AM@=W@`/^)Z?Z?H-0`!\!E#[8&G97PI)IQ+U2)2_UX/#P2&6) ++MX>`$/AX>.6&/>\+UVP^;B'=.XS[&(AK%SFK$BPE@<W[O?T]]KV?L0EA*#ZR1 ++MB)*&<<W;=ZZ8Y)'(DH84,22P<PWW6'K>,@X+(&'$P'2ROCK?.1B<!T!*Z,QB ++M3)2=UOGL9W78Q)TI,KDHRBI]]K._M]N,\UAOA1U%3*ZFC!J%#).7-@UMAUF: ++M,0%`("``^&5Y4$!0#%`'Q,]UUG;6V_:-"'M`8H`BIZXA!O#<8KRT8")C!@V# ++M-M#%`;WV-#1HL,7@L$2V"(*\,]`H!FX)FX9G1+-@JH+()9E%[NV@_#O6%P&3 ++M0@+%@\&#;&>P6C/.$67C%U31;%[6JT-]KA($SL8,[%D$]G(\X1!UB"@Q8YV; ++MSNX6)J2R!@^,U=Q[L)[JN95^TCV70.S!PH:!GH&"*`@NQ8T$03A(+I=PRFEW ++M5GL$9H71O<)VJ"Z\4'-TM!O1U;2+'"@AS0R@@QHL/7UUA-\].W#4J^<ITQ0B ++MR=DCPZYE0=C:L'SK!L''AH.#1@-AC#K=D<((,'#AP@F!OS\ZD;VSUX-B9VM- ++MMV7UUW<\*I18(.][RRB-=/4&Y@H4."@H0$6SH[2L%RWCS93N]QR.GMSDUMY+ ++MW>ZMMYXD9F9E886?6;PK!H@80&&8*%BA8P$^L8($$#Y>YY:$-8=OI>3D1FT@ ++MB$SF6)[>FFU=<@3C/!G'>FKRX\O-S>S>WMY)%:";%7PT7@H:.MCA.K(>4MK. ++MOA?=;X41-=]ND*^T:P<VZY)Z?#W@W>`B^57%99$&@]Z"R'?`@AC=1K3I,6I: ++M]")XQ`RC>E:,FBQN#4#L5V[?=U9P/<9,[8Q0X<&$.IT\;JZ3A4BNJRN-TC:[ ++M;N;5=5@X:N]CW1@$#L'PD&8,&ABJ;6YO8T?++SN@:++Z5M53.RGZ#8-8;&CA ++MHV!^O-UU([-3_<;[NV(;K[UC4-#&?-H$8'8T4,P5BC:..;FYM$%O#:5>X`V- ++M%P6>%4+&BCPJM-:=J;M'6_>\#A"!)`-:@P0M#3%@J1.!\<,.KSTD'Q)F0U"9 ++MN/+T'Q(L[9J98-L=[`0002=&56\NK7=#JG#WL\`-8ZF)YJLW)*RKN$'+"SJ5 ++M\]GEP*#J0Z'2>O*V;HEA*L%B..&&X[Z;+P5B[:3S>%7U"_6<][Z$G4DDY[[4 ++M&D#L(@LWO-;OJVA>.Y).22(.N,NN,(LD1*2`QAN_D<]("\'-*6ERYA411RRL ++MMIMZ&002#T="J%$CR8AIHUZJ,$)!-1,&!=%$C3_('#_CWOJ@YY^=)=_+^REE ++M8U1@6E8]'[8^B"6HI/:,%%!"'<4A\<I#90?=SKJ79H;:'%RGUCN$OQAMMNZ6 ++M>S%=:W>=3&96+"-HNU,+?55H30I+KNLG:<O,VZWL6;UQ73X:@]6YINJJ<[9( ++M5;#BFV"AM(XZ'9V(9BN>.K=[1,JA49#RC*F[AL8[D]@A?992:UR7B@B+V3G0 ++MN%)]AR+R\.+\'61U1%3D.7;>GPAXQ=?7[>VM[,]%JH(2DD1U2B)5^?.5GNW, ++M`=#<EPCJ"J96RD1U-,2VA=JKLW@M&K/;FTKU2DH"\0$)SJGI=CM.YAZ;+[GF ++MVZ=7,0I:ZS*S$>JRB0>`:#SS`\=ZTC>CR3Q'U#`C)0P1*L41YG$P4#!18$E! ++MQ1$"R)8)!^-LOFV)*)"P4D4(*8P!DI_#D!]*`@NW"7NXRV=N4$I,(]-:9^TN ++MJ<#,PE<>;U^>M]JB?2`$]X'Z,$G:,Q1^_[X)XUYDTB$*?P=F#@!!!VRO"!T$ ++M+[2GIATDR3.8,!N63!1/EM&"IZ;F3,>=8$!]\D`?4?K]`'[?1;X'T`ORL<!W ++MG[;,?3GLS'=F)W79E]^T@(QZ63:HAT_,!/9]^3N3DY/Q^G39Q/I4CLLG:$3) ++M`%\D`+CUBA@5YG&IGT>`_0>/VYSVT3MAY.R"@>#R=/.]&XF9K`TG"<TH^=89 ++MVPS$%K*B\]+B5*BBBFF'+,110Y98Q17BYE\N<V&D%5$8Q--4$J:$XY+LQE3K ++MK,66=<&2`0T`5YL"V)BJ@O4A3"!2&ML-H4T,,I`3P_/Q\2^;^7A9&P**RP20 ++M447///T\CJ1PJ0!B666X8EQ+%AN[=&I2R6F6D9LS3,C`1"RRP+;++&%8Q@<^ ++MA@MM?87Y,UJGF7>3S!,9V0J104CNFYE])N4,TT6W<2QQ>0]);IE-;:8*`H+I ++M4,0QA4\6WQW])J<5[N&6&\/3TAOG@]A]X?,IWYP>^^:-PFH/CK$)Y#N.I[R% ++M*,?V8)9#$IOZ/VVKXB#0WTAKPB&CD$MWU@':3%-,D*DG[PT$ED4+!+TY'RUY ++MWM7P9CM@3O1%8+N.BH7'6/GSY[V+D%#4U)3'OZ2HFNLQZWT[B3=$>.P0#W\' ++M@NB:@F5$B%(A"):%A,80#H=?**Q>@S$[C=%8&LUH-0F65U/.C!5W-U<897(< ++MBS6D-6(KDAIA5R$0T&#U3IFUXA="2P7!;CQ=&%<9#T:S;K?G+-PNG`2&#*-- ++MS)F;E-P!\V0AYPH`BL0?(A($.W@]'S>NNN_3MS1=K^MLM92L[&#"%;I&6JI& ++ME1DGXH/;8L50:MA%,5V"JZ[NWF>8O<$EU5`=G>8:"J@(O9-RQ`2(T*)ZLLOV ++M<2055`O2?@/`>`B,\"NQG:\[`\-E5I%T@R=JH+8,<-E&478EB>`]YU!PH4/# ++MPT6?B2:B*9I(LN]&5YL9!.CH$7LPP1Y['Z?WW?D1:41?)\KV1VZ^:_,JY.I, ++M]8CN$T3`3*1OB?,WM5*$7;)("@38Q8&8M;:DF6EB;8XGL=\.N+)PD/49#J`< ++M\<1UP4-P4UES9<-ZT&(:0TU4%!U0KC`NY=K->R99*W9JDQ4J<YLQNTN#[[?7 ++M:.S"*+&R$@+Z'LA['1Z6CS2Z:)6B(B6Z\:/(D8FD:4,]#6$IK9R.'?6:H62; ++M!L!(+VP$OQNA_5C)2JJ<OP9$H?S6M[W<.9):F6)VY<RXX'9-HL0TC0&PO11@ ++MD>)\6.!-0411`@RV)*5GPZ?.XQF/>8AJ68+NS##N3DT,/8-9PWKQZYUT'(*/ ++M)'([F%O7O5%F!A$JQAVLIE6A&$R"2*_?&F,YR3"`B*3.6SV!5`W"H"2"&M;< ++M-3$-&.2:T!K-M7=&XXZ-C%)3**/TGA"+!)\+J,4"2/)B#R0@$7O/T+#5-1U0 ++MT&8R8W4<F5">C.T[,ZXU*-!!`][P/CZ;^,8;K\/X9_5D>$03MU*8I_R"?U7J ++M$";>;9V"6-#24][V"$_N/:_<&,3$4CK*H_&TEW9I#!!V;(>S/3%[[X0)*]'; ++M4#!)'O57'K;@/N\"<%?O>)\`1452/>R\Y;,@5F0*R^2YDSP!R-*9%L3?GK46 ++M[.ND]^<TV9QU+>3LV]D4#US<];.0<G9D4GB'<;,*S"@V0&(_'OUKKH)Z`U,Z ++ME,A<A?%H=$(NR4B;6(F%2G&1UO%3)-J"VK7EY=KQ7J((5S&\/5VO'J+-RF": ++M2323&J0/)KA.W;SS(:@`<77:F=3C&O+8^=8<L!D?O(D$$J9/6O(<6PM&"ZJO ++MKS)8L*PVWW]00@$C<\,]6L"TN]]=1BJ'-O57O>'NP?!MN?4B1ON/57NT$[E% ++M+J%^``P"I)/%1BSQG[#J2IGF[G5<2:1!*H2A*`0C`"T`LD@`C;W@*`&[SWZX ++M:FZH@*L#OT(23(H`45`2*,BLC*@T@RK("I!(`O7C:JB]9T\#W#/B?@\D15$4 ++MH"<D$0+F]@;36\<PJPE,W+FP-T!K1+0[;8&S9I-^GRN^BGA.LAI>9LV9(1UL ++MPV;`S8^\U8AO1L!+J:S*:F,676:H7,CTI"=-2QB0.EZX$*$4!DSOU\N<^$=^ ++M=WSG5[7O1U56/S%,15+G$95FXSAF<QA&&^`;;%*Z0;#!+;9(#1/](??+"'2& ++M"C%(#VEA^\*`7'2*9WP]ZM#1R_(+V#Y)+P`@H87Y,D_C,`@^\1\:)'<V1Q## ++M>'7-Z+>&<07)!$?*ZZP"FDHW.2E'<&$@T+P1%/EA\H^.8GL`S%C-.F18B:*5 ++ML2RQNI=686FM,$24L;PS<Z2G)S*-N!N2L1K>NS&&U)1W@&]:);J0:ZAI45`S ++M-'5,FPVL16%-M+0=%*AFA15&*!C,$B6V0N@A-!F&A&96YP7+3!8+47]+`Y4C ++M*'<8IP#$%D60.U*0[I!+8$4M\Y*X/4R[\;S<8C4X884MMAPX\9G#HEXT/^ND ++MD^C]>B#DA>81EGU,8&V&_>'\\$>>;XBY4+P=,`,RZU*`33).FUG741;9_6!U ++M&J^.KGQ%.;X(^$(&:%G@,X"CX4:BQHP7I=EDL;5U:M;$\ZGE#:(D&-/)W0"I ++M@L#05&0IF!6$R0-"Y8:,:&)4I7,&<D[;>(59J;S*/&2W;30.BRY*&"*$>%%W ++M*(N@!10`$3:I5R\!9\3_4O/D`6]^N2&@3K<4\\&O-F,,0>UAA@'C(<:_"Q]) ++M'`9.&"22/;L,6-;>JV-R\(L+\PSHGP^^5USEZ/5YX$"<9^OZ$'PO:+ST7?=` ++MQ3CISAT.#NBD6*'5*HQ51$6_/WY^5Z,243,'M=&C7QV=&<5%$TL_$75E\.8^ ++M!MT15"02)))))"220B(B?CGHJ=R=9SEFT=R*9/4)F$1LR]6;%*`.BNC'KEBO ++M)0I4TRA*7$\1,3AG1@8<'))]XF=`WEIB&)@F8-S>6"R)>9HJ9:-GFZPU,HV4 ++MO$*P%3T:!(PG*=Y@'?I9>'1AAUUDAMA+WH<,GCEY.,T$+S9Q.*%EOO?VJM#G ++MK2:&!?-VAH+JB@KH#PW)FD_9GMP<AM#<%^N[N[M8`!:OV,9:^/U>P_3I)#LB ++M7IV>7#Q,+UUH.\T=4+.UYV7G*=P@D<PK(_>'F/G9A!D+"\0P(AE4Q08^R[W8 ++MRYOFB--^_-3=VQ@S3>F#3:09Q@C*3661"9/T-6+%I;8OV:,%!Z<SCKFEW.Y] ++M];QM>0S,IRR:.QTQ``#\O?THB@=)U\>9LTFO+T-()QLCF,-(&7+QWO$T&S+, ++MB@4L#,PS<:R*C=S1I%FH=PC3K"JDJBQZ<P=94<M*`4HJH:$)D*!]X/M3X!YU ++MD>M**C\:A$XX/L$TG8*41>S0F>LT*>XA4G+:7?369"-WSQ;HMY1"[;8_7_HF ++M*9!7@.A7#O*LYH8/9U&7O>'7LT4-#8M3JD@6B>]9]GM`K<\``%R"M/WO.`&> ++M#(Z_;8TYZ[\!Z5K[/:.NEFX@:][W.Q@L8*=YOM!%6L!LT]]Z8![>L5/",2]` ++M2]T0"_LT_?>]\/H5BL)>)7S9)#@K*!JJQUXR,+[6&?K1*/]P+PA..Y[-"1AS ++M?NMQ!O>KAF(GW<ZKC<DC#-:D][P#]-0GI[W@(U[WO!_7=:"#F``#W2]8OC8D ++M,9EML6Y;U((R[K/-?.XF<=\0$Y(KQ`.O.&:RGKO#">=\[D5V"XL@Q()N\N^M ++M\L@T"7%0Q!#P7&\1VN5B^^[O7.^J&8(;#&:3,D#(]BV6F7>US3.LTF9(`X`S ++M%`LAD)((/3B\.GGIUR\7EF-O-5X\U`>%-(J0:U0X":$6$@SG-ZZM97,O6O3G ++MHI.`AQ`D2&)E84D9!4<PO.WVM4S>UFFNVZZQBQA(T"HRL98L=)F1J"Q6]<OK ++M,T-]7+6V4K#J.JN1V;3ADG8.E-B6-*?+-LY8-C2;A9S':Q?8WG%JS/VL\5NM ++M\?;/EGS.6#PTG45NC:&S.@6&F<!B;#B#E'5UE"I=/+<M,.LCJSK.C!JG8S6X ++MX5RIQ?6'PP,5PT:(%ZB-]`9R:(AGK)/B?"WZO/R&D8#1$(1^WZ[EL>^/H*T4 ++M&/AHX,(0C!`<!\-(OS._:'P[FH=VJ-$1*[*#()B06ZPFH>QNRB$^<(38M@^% ++M@CO,C!00X8+%C0D0-I71%#4D+I[0F;F9IU+=?H0KI^ANTRR`C[<R0.+SE/`@ ++M*!&0B<$.T8-#&P(!>VM?NR>HP0;`;OF-[K25P=2]J!\2S\DQ5/S*+38Q+Q)- ++M*!#2*U#X;/-BM"5B#0+#J!BQ\,%8-"T$"^[&IPMY#E>DS$LFBPZCOLK.6I"Q ++M"1Q0:98)`+*IIE:V#UMG2$?$EP,78>LOPD\1PT4"(,/^NK>A7LK;IO<S"$D; ++M=JS)Q^05E'EY$@<"&<E%44UU>F:1-EJHBNJ]=AJTX$YY(:`P!>H06-'(/Q?5 ++MS:CN5=6;PN7RI#@@]W>4!=FFR"1>HR/0O#W#Q\`2?"`@`(>N`GQ)H,^.U)Q[ ++MNN8=)(BX;&=/H#5H<%PX50"@?K!RH88UBF<AI6#!+1>&SO=[%X^SBF?95U?5 ++M>'WI%VKU`C2_6L#2BH7`0?$IT#ZCM*7YRJM)'4A0--)KPXP?#-%7H^]\>]@H ++M+Z@O?.U]GWU]]MGX\?AU8]Q>QKW2@Z)BAI"V\2""$!P18"`>1*\02U6/I)$E ++MT[Q'9HT4-'98X+D.$!(L+;WQ%R^N\Y7N0[)?24(NY!##91":#$*#+*#\JG/T ++M-XAGO<@*H2;;08F-)YWV:-W',Q7#,)9:5:Q4I++!8BM+5E);:5$M+2VA2J6% ++M*6E:K01T\EG4L>_$>8/RHC%G`<:%,(#`@Q@5!ABI?UBY])F7:&IF$TU0'>/O ++M$&VG$++O.(/O#:35;MR`A1LV5Z`'B_'Q!JFQ4"XB%*@-U!"P0$&=2Z4T#KOG ++M95I9;JET>J;$HPX>$VJ;>BIG7>=73PK1X<A]NA-C1I"%$(/+&BJ@P!B5CLG. ++M3<3>WE5U<-K*/O9R`LHBE5RR`./`]XBF2!J[:X4-=X$$$+'#N]@[H][BN?,W ++MPS'O<,@->'`>%!4,ZQI&AT*!2DI*"KN]<W$WMR:T=4U0U;(LZ!2E+151@64P ++MT=3C9G)N[WO#?.<A:4JV2RJMM8B,$J5#I,@%F4M:T5HEMMW7(#ES#=MV3NW7 ++M,1@E.EK.>5.,UPE*%%EBQ5FS>9JE0^!#W/+RN9[`P@PO)JW'>#$!:0D`KQ)\ ++M23@2""\O''Y,EL/IJ\["2M97B!=K=7M!%QK'!9%;;FGU3U!H4F20F0"R)CGL ++M`M(6@,)2=2B(*&RI"$Z8``NEATU`E,DOY^8#9%9J'O4++F6)%OB#X^)-SWQ$ ++M+)EELRP"DPA7VY[/&[!)-8@<@;(>OR-@KDCV-GR("]BM+A3%!+V!1_O-6L+\ ++MSI[%2YXU$DT$7PQDB4@@T-/QIB]"(@UX]8C[E@JO=@=$4=*HRZ5GUJFR.!0E ++MAHBA*GG:NW>,`D<K8:QBJ*TPT8*/[F9F+*:^Y/O?8,*-'#EJS3&,;L?&PJ;) ++M!U:P-57!]8XIOG$E'XC!YAA9*LM6X886L+B<BB[1J+E<U&7=75RBZC4;NI3, ++M&&[NIW7#F7+FHJ-1<KFHN];YWJ4BBBBO5RN6-1J*Y<U&7*******)4]>OQ]U ++M]>_B*,J&(KVCDE.L:H*,*2C,(L*%1)`-*@XHJ8K@&`&^^XW):UKJ,-[JX@O0 ++M)B!B!DK76%(TDB***&WSY+[\V]VKW\H#%5,5!P4%P56#HV:,/1LXA`@;%3$% ++MQ4,$4YK"B)4R,5)8"9$AA(8`8A#$0Q<.QQT-_XNCXYXZ4[B(UZ.(C:6Y177; ++MPA2"73+PW008-%557EV;)!2PMD(LG9!>@41H+K^?L9Q^^C>Q;IO,%!BZL/;A ++MP;\<>EW.I1VN845<W1<=;6"8#LIC3D6!FLR5[<+1*%[61"7+62J,X9CHFRN= ++MY=`YJ(WI0WK6ZD+?'+56Z)NO0.[M;4';!V=<5&SS%:3+R9V7#R)JE[<%MD%S ++MH.J8:KN-T3>!Y+KLY55<$55[M6E1)73HU)0LV6-593A[`LJV,]`4*Q^/<J4` ++M"`]X@WZV8'M"F>`ZANX[!T5PK(@;K,%K'M+M&\IN8ZW',EUL1%]CEJ^SW(G" ++M*@M@<I4WM-;+=RL@(K<S=[==USQNA+(W6Z"NT(4_'>E<31"!J2(R9TJ=0>W@ ++MX-FN(Q%8(6PJ`H(QCI;=F12BG7<DHT8K%2Z=U=G5TP&3N25G=RB%*"V5*41C ++M&E"EA11I:-.UVYT:Z9TKM=VDR9N[=(A2VBV%L;2UH,8L&QMEC"QHBRRE*TJ( ++M#.&85(5AA:MI1MH-+%:6*54I+;!E+;$6*,:74F=";NW9===`3$%!&E*4:Y@9 ++MBF87(XR,,(5BS+%>,[E=E.JY4E17=3JNVY)C,KL7=S=.F5<JY4W3124ZY4E1 ++M4KE)144E&=U<GG%)HE+&106BR&9#!FS%N*,2L8P6D9$I19$BS"6L82,$&$L3 ++M%K2B:TRTEI"M7-:6RMLU6(K<MJ[@YD[:QM72J6K.,E8[JBPVJZO"+G5U==&H ++M6)#&5U;RKJG"#`2(2EI1P8!D!L:S%,%,,!3%4*``P"1<%&&G-K-FYJ[($9C& ++MVM=4JD4)C!\TTP^:;MU@,!,48%I3(Q5=+4UE::NW,REF&$F2F01-!(8DA*`8 ++MP*6V<EFMUU5U5)*S5BVK)0Q"6B"2)IA7"194S(65G*NU26US5UI33,D2&%2U ++M)2-SFF.WK^&?W+2.&M_GOUUOQF;#F=,\W'^KG-GD]/CSWZP8C#U))$&`",AP ++M[<381%[LL8+DOO#Y#3BGB!<DB!4!.R$!,)5!53;C\/R%45#'D+W#O3YT=!>M ++M"@B9/PY,?/FLFL13IGW9M-,8CBF)<E>KJ:_'GIIHW,4L]+OQR9<YJ9::?AMW ++MAUS3.3]I8FI?O+/RL/3\SEEIF2&/$^`_$!>`^O;7WFRR.>L$$`IU"+9[0/!5 ++M]0O>6^\'$"S5WPI%FKYD`5>X*V!.:V?KI9*!((S`.O@222"0$0@2D5(B/+T3 ++M-7C"Q*VI8Q%BD7!\TXA-!HSSSU\YP:F&8B-0987,F(NY46FS2YD320O'&G<N ++MI,KJE<J-7$7,WMR=8;4;-.9*Y^H_E$[Z^'IR5)B)$]>U"O9[\^;<8I#(GIUS ++M*V,$=>MF1(QTA2EE+VR8="V[X[&S?0MNLF@T_,8F-O,NYQFWV5^[QIC&.#XL ++MB.C$*M-=.F^M:D*V2,"%$%P@@DD@($R4")W.W?O'#KBN^=&C)($%"4Y11148 ++MFDA`FA\7(*1?7WYKU[E%3Y^./IZ/'SL,AR*R*IY[&;DB5#FW:LBQ0HEW/.8T ++M2Z]`9B3;-8-BR!4$Y,,X@:9;9W+HW>)FS*.@TX]*;,YQSA;,0H$%$Y**J%V2 ++M;W5)!F4AX$/&O+HT0+OCTWWO.N_%>=#:[7G]K[;."!'X[07Q;"20LW%XD(0+ ++MQQ;%";'7]Y7GU8#^7[]@]FH%=X*]7ZXQIGX<.Z#AH4;\&Q^$"2]7U"_,D/U% ++MU5C"1E;3/*,+*U^`%$[EU!62*$'DE]K\]_5^;].MYQ^5=,1$1+(,^^*D%G9A ++M63??KA-;+6"HH\,H@YDC`UQK;>\HJ@XI,(Q!@)`"@H'A&8Q9249V99FVX2%W ++MR9)NB$WC$0;J#)9!4,34;VX;L"4JM]9T<-;XYHJ6Y@UXFIP3:PZ7B+@<`"%W ++MJW,R:2H8("0#SQX>WG=YL2#"<H2D8$MKP'V,/PNEX#\1[U33;G@+#LYCKP%D ++M>]5A`*XO1Q^:\!G]'Z@,L+V%`?+&)F980P8VT+L"G,I(?/:^;P6.8JD*JG5+ ++MAH>"O$[/O`#Q]HW.]`Q_/$@L!`A)NA\=T>]H1_,$>R72&#B%GO`Z"+8P4YE2 ++M(>&GKK'`!F!>A#K06"(JAMA6,6>'4FC5%.8&,<\:')3S+WX.R#X\`HB>ZLJ& ++MUZ+/C6M8KE9&.#T06K"8#H`?0,\SCC99'2MDTDJ>@N^29)LWIR:Y-5UN7'#Q ++M+<%EZ)>2+&=#-Z32P'G*S5.!,!,0*:%3,A9;%-'?M?#H--)&"1(GHNNYVO<X ++M]/&X;9`V@/-T@;0ZB6E%UE*K>G0YSL9Q:*!/4Q!HO!-H.CS#+KI='N6X3GDA ++M(/>\#<'\")2;(JUGC"*'P26@Z4!8UI)CW@[:J=00)\$??DWG0?A'D+L4O`#W ++MO>Q(CY\^8B:"JHF?4Z@\^K#B104W2@(=DJ_+082"AX<P)E#8GEL04\>:QU0; ++M#3X,U'C1O?/`3F<WUA%>\D@J\4`7GR(.YES`DB%2"8"RYF:L:T&P-N1P<DU; ++MK@6[TT*@@ASK(=$02VUIG2EB%!*B8#.X6MZ:79FF)@)B$.!"(]&%,+*6HE+; ++MK#;+H@.LIDXMGM7D)F=<]G;RD]F5'?BB<X$I%79J_6=M&#X#R[QPA`%<[8TC ++M[^633P8"0L](8#%2"76WUB[6%VDO*WXK\A+T6K23_?K.6#X]E!``1COA`:2! ++M(/CX1BHIQQ=\[Q54041RTX.R'G4+*K,I-Q0SX712>GX=:QS/`6&\-XDLJNH^ ++M=75AJ29N9)IC@NGB8ZJ89C3"R&L-;WP(L-F[%FZXX"R6YK0;F6+'9NX"D3C7 ++M/;6=MT,\M9%%)KI4_G[<KUGWN_JV`P0?"4V`@@@O!!"4()+K+1%"@PVW1%C\ ++MEGT@!(%)"`)(5!N4`;'#!QH2.&7-H9R"3N8.%@GTL00$_7YM#FO0=\DIY7S5 ++M$$&_U_=$&5@='3IG;AO4.I-;EC%@J(Q3I=9O.^%3QAD00ZSUKB"(OQ8]`L01 ++M-)`D`-^3%L4!3R6N885@N(+;58BBGB4T:-!EM9@-&1%&V3+'1.@=X>[&I+DC ++M`+M@=$D4$/)'<K2OC#8>W771')K,2XN:-8;FJ313K3K'E@79:6B35*(SR<[\ ++M&4(0K`A%!.*9AAAF9F>>-GA=&&PS<D&9?B`22+"]&V%F>#A'`E-U0]0H?!)= ++M_1EH<,!":9VOOKHVO@@DFCYJ@,E;YWR=TUNZSJ9F$F&P3EH+A4LJ#$)BDSOX ++MWH'A".,+$ROADZKXJL5BRG3L:\@ZW`N)<H+FQ;F2DB3186;8<)^F%"YQP9 ++MQ$V"240]+75U`4A>J"SKMWU$'(Y:4Z>7-@6K,)-PUP:<#$UN\9<LC;.;)3@L ++MA2>^8"O/C7MGR\:^`%0WXP0$]2`IZA7SF(M(%"$R'.:=`0P0PP'07KN`""!# ++MR5D,>2"\$K?O40-2`L/9!*$@@L:,DD<I!+^/[F]L-NI4`O4V-'TS[$$3]0/G ++M]\`KWX4=SU</A28(**!>^X0UKJWBWN7NYSQM[[-HG<IJ!UBJ)<<BJ'1OO1MJ ++M"(UPX1;^788J")S-G!,\VH"C6]+B^95MMPE.='5FTK<=+4=3JS133;W=/-3% ++MJ<X`=:S4+O1CFLAWC.,.6R;=1PH6TI"I-4P'1S,P=%`L-LK!*,B(4<+'R]77 ++M1M&22HR83JFT\],YUYQ6EYM7=A75EW=:YK.MZ!+>*H:D%=QW"@[B]8`ADBG6 ++M8*9WWI79F!X8ZG5KB$*QM<A/Y*9!'*Q=JA5B@V]<`))!'QIW5ENE892.E&A0 ++M"0/B+09K8Z!U#9H0G@D@()`V"OI01-"]02*^70$9^##;SA^Q"@,>$1M`FD03 ++M^H`/SI(7!.Q@M#1S+`469UZ+DG.SICG`:U@BLIC2F$86[I_5Y79,/E"?54"^ ++M614"K#:)*!LLR"SZ#%]:!\7?D.00_<WI"#QKD@[<44;958QF:XP-"L1%R!)P ++MB/G5)`(S7FT.]\S6CJTR:&#<&QP:H4M/(/$S0"F9,P9,$98[5P[H83`NB\R6 ++M71-$:SC4JDGNRSKWUZ^.9YT/$`@H!SLM0Z>(Z.0]]>&SQRS#!(0E#**L5BF, ++M\T\_,LF78Z]S?O>:RYBZ/>4['E`T6*>V\(4`PCP&AZ*&'/4WHO9ZP6E?>*W3 ++MOH%H#@M"3<H0/S\!R!3=^RUPMIW.]X;5^&4(!X:YQR@+!$'N$\%5!)J\&>T! ++MC!8K9[>&C;]81VT*8'KJ3P&YBBQ+C&\\GR.Z&^0EA+(`P*@*][A;``_H_/36 ++M.B6<*[B]IY6#2T,OQIOYB!\J)&9TT4$=K)P`'G6$",A.!*#'LWG,A-@H+)"> ++M^=]O%US&*#DD)9(2I"3F_;S[1NRNE0>A06!!801-\RZYXN@1)M"(XQ"2&)!# ++MW<ZW[MRU"2'9!#!A$B8$D9SG/.^]PXB1."2,3$`Q(DGWV_,]^SQOT]`,DDF& ++M(@P0;8YK%SK'W-X7*D&B#$P@P@[W'?O,Y^]/$-(-8,ONS*&X-8[R]A[/V9)= ++M8]O.^'7W)E#X-EX4*\,%^$\!8`=^=]F[G#4U[?#1GA0H>@`X`7Y>OL]GAP&^ ++M]8&@;I4K4H+%UOM.'8X>3V#WGGGGFGIAI769\U9)(^RO<P\0OPFCAHP<!!H0 ++M@(P9!K`3]?A3P;T'2V#:JENUL6]B0M7PH;O-;=BML=>[S?I?M\+?!"00,=P0 ++MP34%GL`H/)N]<>9)E/>9!(5.ZMZ*P<N63O=?K`H/@["`L:!8H4FH+P6++8F" ++M6@ZW<.ZVPJJZVCIV!65NO-(P413$=BAQ(P<+>K<J[5HVX[J:C,&X3KQ+O ++M*=-"11'.UPRJ&Z+]3M736"Q8P<,'#0018L<6L>\V]P7,6&@W=WG9VDMU>,W6 ++MZT;"SH(]H=(=1:.;R$$F^T%#`AB&C1K!&^L$8"'R='NW"[K:-,FFL6+KQ@]Q ++M.'3(G1OK!&4+`@"'EAV\E9M/,&@6@=X,611%8,3@[LJ[I]TOE`>.8*Q+H%U' ++M-6<N8[1*M(ZO>1E-D[G<ZH7EF+)2O&A&*&A27@=`80@[E:-#YK!V"[YU6WPN ++MB,U.:9@V=O65'[&NO=@I8GDQN"9U@-]6[>]VY=8I8S=0*'=Y(:!MYMLY-AFT ++M$LWQ6+M2UUNZ#7:-[1>9?O`>5AR*2V(LJ%5$QSN7SC#>G6=-"%KVC1@H:+QL ++MS5-5T_5NF8\T4\FEEYB74[O#W@ZRJ%`C1`1AT.0,<.%B@R<2>ZM?/JRWG73Q ++M[[,EN$^'O:N1%G7MP+-Q+UBHN[@W#XI)D6+&!:B^@L*&$"\K*'WWU:?EGQVI ++M]\ZI_5>N4#*MS`!!8X/`Q\1&$JQN\N7G/*2H*'ACTAG18#'"]%YF#5K&A:'N ++M;D#5;S$P0+P]GB/#V!/-'@[/&'.HZZWUUG.N"Y"DI"T#0`@^\%B`5W<`\*2" ++M(`L,L8,X555516G3'F?#6F?`DW@K=.CV25>UNB1X=Q0:UXBCXBR224TGEC)G ++M72IH<"`28/'V=?.;93K/M7OMM/F'GR/BBI8QB8A]="*0Y8P6D0?)&YV.=+W: ++M-W5E15Z)I=:%T+=.G=KBJ"9PUI3.)!I#'"<?MICI>U9N5NU>2CM/:JKA.SF- ++M"-<;=O5=M.L`S.V^6<;VA=D42\<H44Q8MZ-Y#XDBI):A4,T1C[YDS%+$@P%( ++MM(M"!2`1/CSS=AWX[\]WGP/62U(J29YKNHV6@M06&'1V=FC@G(2D6(22!H$H ++M5806`,/=OIG/-I:]C+2MS.N==Z8M4HI.J4@I24FVE2!!,N5=&U+M-M<`;/C2 ++M.+S(&$HCRWP5WNYA\2)J9)09_#\MI4<Q-51L+KNQ8PRJ'"P;3P[MVA;'RFBG ++MQ.G7O53Z\ZU::/3=M[WI,(KF%<I8<]+5MEJ5=FP@..3:O:1.IG-/*09<L757 ++M33:IA'+<=KI<5UMW;/%V;>I[Y-)Z[N>#U,7$-KJ!="CBL@J^<'GE;UY<9&:P ++M8F57&"ZBK3H59K6UK]3S`]O8-U/`3=98/05E4(<[A7;91P,^BZ1CKV6NX:!2 ++M[.-#:G33X#2/#-.)QNJJ+#N/;N72+0>Y>YI=TD4%T$WK5IJG)1.<"AG$&V-Z ++MO+7$+.F"Q>G+6`Q"S2/<>?.<CW]H\9O`$18_>7:B'M(JBE&)*-I:6E,5K)JH ++MUC5FLT6-:3&4M8V`I8FEEDDE@A&A`(1G6S0RC;-4I*HMJBU(+;(BIU^K3YEN ++M&["6*(JH*;=M%`!&FU3JZ.T*C7^*U#V!PEA(`P1P`P?LYAQ:LT$B%A^%8<-M ++MZGS]'Y^S7NNS,=>>@(G)^3HD(QSAB<3'IJQQ]NCSVG`XZ=.EI'H@PCCUX\*B ++MH=^NU[(F6-K8SY<Q&$GQ8$$J3)$P4$PYG/8YGQ[Y))/J0P+F3P@%>_F3)=3Z ++M#ZK9S]0TLCZ*;W'"+^3Y.LYZ.AQF@[[Y1-,05052=]:9?BX5;:5>S]:1XA$L ++M#^YNV)Z&H?P0?&]SUE90J6*7J^9HW,W#)-@8NI9G4IED`9"MCWK)M%U`F.#1 ++MX:YQ3'1J&M0@]WU9Z9Z.\T5236=CX.L\[UF^:S?/;K;R0?,JIPD5?$B!+AW( ++M2T3^5Q*3/<Y,]8F]ZTT8,8/D(!`?&WT`0/@2+ZKL6!24)\[LX"$.!#:+2$_( ++M$[./UCZQX'/;EH6TM^0^!-G3/IEQ"B;^%"B4/")>8ZB.)+=)4WB5-,1ND3^D ++MN@F3SNOMN*5#@3KJ#.1FSBJKJI5#O=8(HF&SR133535/JSOK6@@J*BYTJJOS ++M/`._A6<%[SR!D-#`4%4--0K*+`S+3&4#&'C>H9HMHBBV6J;MI+N9HS4%,MK4 ++MI!PL-S5)'(WIF\1C(,.[+!%&,)W>FGQ>P2$@%N_&;&Z=ZV:^.E0-$(F;WUSB ++MIF8@A=>_C:"SVMW*1'LO8]J)'M=7*1QOV48YO?=HJ&T(/0,;>U[\18ML%!)A ++M@8T"=+@*/I1$&YC]M>W91M^$"CJ`G@>-BZT$OU8V(\%])%*]>6QR%C@2;H:$ ++MATI%:-3!8:=`9%N7[=FL[[+E48<0H3&V[F2F2_WD+I(7]OU_8XC4E+A8=D4L ++MO,7B0;^<%9J@Q(;4_=E@B[NJZO?081Q4MGXI\@R(KH2[CCTR\#"%_#3XD@@( ++MHCWB5VE!3C73SVD"3:<7S+00O;R4TZE#RZCO>94%"FA;,$AM@'BTS<BW#,.# ++M@MMA-S:C-I6JPP&5"8E2QB^3+8.@M&0=:1MAI$6TAC`K#[FN<\\3-S<Z]#/3 ++M1B3+XS)Y:$&2`R%H`>'O?R3`\4+"?PA5/^TF*@-.W4H!728H&((FU+0@B1MH ++M=3>3'CJW5G+M"VQEF/+8K)E56+.:H*K;;-X$42:!]C#""22$O]#2Z!>I!)NS ++M#QG51KY5=98JJJ>7\Z.`V\+PI2N'K`X$^!`)U)T]NHQ0VAW]-=#I$.QDX0/( ++MS;#+6VV#%+Y2&M8(:%59JA6(DFL\S<QR7<J/D:*YHA@&8.-G$$LS!;F`+H@5 ++MR!%`C5UK84<><PLS;&II-2-EMZXZ-T2&,20&0<.?!WM-"SYS("0BGAY]\7W0 ++M:%'N!3><1&K$C%)G&#],L-:SJM,,8\]O;:T$T$N;\_Z%^8;;"X4V[O("&661 ++M@,"2K+/EQ>]GJP@G'75O\QCXQ)$]7N=BEV/+$/:#S'??K5>,-)I(H.GMA*I4 ++MP5BDI[Z_3U>O(C0:GN^7[:F2`!#@0V#Y:>*BR^.-B;NZF$8!),,.S1ZSF&&; ++MGBZ1!F!1)H$2WB93EWFRN.3`%REZ"%8&I;&^4Q-)QD+`FFB!D/'1*HM5HT9U ++M3;I4-#IAB3"YDJ"G(`.F>=5WHV`:FKB"26;N:F1(-[9U8T0C.6IWJVJ(:V3N ++M#2"GOAJZG..<0&=2UBC:-8!6E<PT3DF@\D8X:+"H:-"W%T-%D4,.7-#H%%!1 ++M:6Z?%*8J"CJRN'!TZYF79N+!$5T4V7"XYABL8=5I04$3@3EX<<2:2"Q9AP4Q ++M,RJ9'JR!4!8"SH>,PS.,)#K&0J$VPX*=AK<W&F?4^('4H'J/$ODY8(\>>"LT ++M!2O=\?.\OI>Y9[<EC0;%,-JOON7KMPI,5@_+;A/SU<WY:Y1HU&\<L6"_,N4A ++M73<GWZM>_FOK,141HVC&+Q<,,&`J)*E&>6SS#KXDS$:#-=4U,%3R<<6Z,%WL ++M@EF&:F!4-:Q9DM,:+3)N.D&'363$=F%IQ;H::A6Y'9893.^3HF"#ID[N$.^_ ++M$)`('E`$0-2@H6L``:5!I42ASQ\D$*04V3VI"TB:4=A)"G(44I)X-<_YJ#O^ ++M"Y/S^NN+[0N2-D0$T\TH3R%#XEY6#?8^'$M#6PRR7KAPC5ZH(3X@HQ&+*\_- ++M25%,D,@!T9=T-X6(PBB4W.FO`;0LIX)EI<R%:SQ$UJNJ"P;W)+FC!;9XR$$< ++MU/,P+0(*A8QB(H*:D0>KC5:M.]FQ"2-4(B76]87-F-!!H<DS;8J`+0(*@=/- ++MNS/L/<\'C.>K4KJ<8]@7W^,]]%T"JB=P#K6`MO`#7,0+>"O-8HKK6](H:E0- ++M6223U!,LM,@RH5#&\@-"$)":WH30DLFN9I9))ZQ+&)X<=9HPPMXX-&A&VBFK ++M#SK?+UVLN[0!(:QH.@@D@`*(=VVRN?I'1%E5+3N""7R02#5A18)JRZ%A0)>[ ++M1PV8:R"YZPV?&NDH'Z^)N/*5J0B(%84-E75]O+FL>UC>N:\\$D>[.Y(_,8DA ++M)&/=&F]\NNYKMYOSI"B$13QJ+%AVK:]<LR1@B&6`20AZ=Y?2,(Q%VWM+YSSA ++M@,V[`[Z,%)D:\,SSFQE[9D5Y=Y>>MY<I0C(--39MT77+Q6+6HNF\%N#K%V#B ++MN[(B::*:-R9:N`7%UOVV#FC%F6]Z9VZ^?&E%J9TUR$,8!"C))*@%\ZXT0QDF ++MHS+*CWYYU,8JS1R4M*(,03(_H?#:DBD!)1[@E+B\1_`K!;3[:P4"2228*'!- ++MO1'W(;XX13C%$.V\7@DUAE2]N<-":00\$[JK$41.W3-S5%58J@J@M./&@.0" ++M<!"^6T:CZO)2%^F\K]=Z#TPC>.+,;5HQC3<U?TUDTWQK@A,T.3')IP6K@`M# ++M:-F)8YG1\[5KB"9(UC&W-+2QH(W41'=SFL&]R2$D-)`@1NM1&648+.*%]+"J ++M&%LEO:UKH1^Q2*4BD0I*1!`P`##``,,J(S[X`HXP"A$`H1*JRH$JK*@0*%B% ++M(A8A9!*$ED$H2424!C`DP`LD+"%DA((0K(H0K(H0(D@N\!$Q!852$6%4A%D1 ++M)0)$24"1&1-XB.(DBR!KXTBY@H5%@J+"QG`Q%+-8,3]4$/[OZA0%!((^0;'K ++MP.U]7L'9TD7:=(WT%FVQQOFT$-23VR-"2QQO*!(V$@GMO]UBPVW?P'@O'3*? ++MB"5@D-G52\/P]2"?H[1!2:\<^KNGKK<#!158.U5#MT[]R,?0Y[4T[S%>Y*4F ++M!F5W)GLX:=X*\X8K2HDDDY#BE"".AZME24O,R)F=Y3<'#;5<I<V9J:((7L9, ++M@$(`A7I$Q`)5U52@,,$\-@Z8SRGL$"^1->*$N412;4<Q7B,-U'5FAE<2D1`4 ++M0N5$*HA)._0`>J$6`!M3R:VAD]X7[P\5X3?>+NZE_S4+!#JX/-W18;H#!X`+ ++MPT='AI>YC@&ZF,#U*_&Z->MS.NZ'O7WKOS4]J`]G#N\F$((1/&5[WH)X'UE> ++M!M19@#NQ<"*@\`M($V8+`LLCJSP\=`T0`^G96(=0#']V![U4(/$``KPTZ*E; ++M72?7GTS;92N,^'VGLEYP[8DDB+83W,9UV_-!K&>[^!67@'K!D5D`.2G5`"R6 ++M8;](D!N9#`(5R`(@V8J`W3U2EI?A8(\/,9FRR/>'M%6_#W@;L&VJM3,\!Y\M ++MVV]2/A[P&60^%H,+;\!X`;=B],`Z_>``%4\T2LU-=O<XW))-?(F`.=8[WO9F ++M]D38"0][R'@`J2>S;HY,V4P?71J[K?#WL'@!3?O>8\`'QH;KK#.F=$[X`#!X ++M`/S8#)&T=8=YW'6<8W[#4OATCR-(UH(!Z`"'.1EC*"&QXZEB$$>%Z!`/:`U$ ++MU]#`W#8W'N[S>7UF]N>G9W[WNL-LQ.<1@?#PW&2;;C!PX<CD-&F1G'V%T&T) ++MESKP#W#@$/,#`.`WT\!?B+%B/R$%BP?4@0[=61MBQU4*@;3>=?&Q0FGAL'A7 ++MB-'#&$(.&`@$4)7O4)$'+Y9=.YA15/:O5T*D+[/6^I$8JU/:K+P7E*NQ@^]@ ++M=(0:."%@CA0O!*&@CC=$619S=Y"N["P\F\*H&]--N#JZ1VK>-4"*HAC`11W# ++M["T"#!!MS=&3QRUHTC:49"MWMXCLNKO!A]MO8(&+EGTL'-Y[Q(Z[%BQ0P,#0 ++M1R%2UBMGNY%7=.ZR#N5X>CNY<Z"@14QFK1O.Y=J$%#D<6K0N%`'W#AWJ&C!H ++M8(L<_(YF[?+K?0ZTJ.:"Z"';0O<UQ)W9.'FQ773VJM&G7F,%+@QPA$'-2P1P ++MOA8H72OLN]ZZ%';N*M-7W9UG*3EY7">'>]Z#P@8]!A&W=]6[/=9\AH(>"AHL ++M&R1W4,"!(8T(Y#'I9]AVZUV;_PGDWGG-)0B+KK!D^@RI3RK#(GNF;.PBI$U" ++MWF/+>4=L(4*%![P(M@BQ!NAX(.%V@<OLT3N/,Y!MO.HVX+$.WPV;@6R'+TY' ++MOB!PP@^L"0^(GIZ+5(Z@WW6=EB(4*#'2@Q5$HW515791%6Z.X7?;HXGH.T^" ++M/@9/,/R#FX+'#!J`F8NOAJD4NK[.L5VQ"I>UM<KSBJ%'9->X;&'#)',RGMC> ++MS4!Q<C`R,41#AQD9$2+P!(4$9=LYG-7>&OLS*F7G8+1:2$L5E\I[@3FJMT@` ++M)"]O#7905/+L95UMA7=NSLZN,L;GNJT=\/8B'H@F81B0Z#21N;)>`]S<'&P3 ++MN9+I*8:"5JPA-JJ$T8$+':.8D!'86LE76)S:6:&H.B!!&@C"H]?AX7A7O4*$ ++M%T<P/1V[N[>G3PP'S50H+77O81E]<>;D&:@'[6$.'0-M.0U[VIOS-GA58K@3 ++M%HU=BQN._220]::RMUO:U^K43);NL>H*H$%M0)(SU:62@-/B=,TG0-#RT'Z: ++MS&#F2;>[TDDRP7@(VA6=V"ZVQ.(VP*EFL;%K&.;JN"E!UD`F,"A6NA=BNK8W ++MG+72B>&CJ="H8J")`=&UC(0>]U95TZ;!G+=/,ZDB%2L$AL)I!@5RJPIYAMTU ++M:/5>94Y/FM)Y4K./;%(O6.VG9O:E"G6Y=F:P,@W:=$,(-RA3Q+UQ/((F3/#) ++MI,T!A7A<C>`@WG,5UYM=-IA]1Y=3=L(:",,\-(1PW;=,L]U3CF+R6@NXV0I1 ++M[$*(WH,LJS,FU8N/30]W@&AX>'O#;JUXF8A57";MD8+R.JD,8'@035)XT/`> ++M\/:((,%@(5X>'O`3-FC:MBT$(V$XW+XR6RPU&&&PKB%535R[3;$$)&U1L7=I ++M72;=8O!0T?&")Y2\S1\R/8IF"A9HT0B2$T&?#WLI!RD_>8+($,(1!IC[ZYJ^ ++MYM:[O0UVY\K]U[%-ZMO!QY/H7NMWZEPC2)Q[8R4TJEB:AUKMXH9-<RCES%'> ++M"GEC"RN!.5E4NLN9VN41I+8.ESR"L%>1P95'A5%K*YE!8FQ4)BLW)U*_7YYM ++M0:51!]@JZPN*MUD]B[<63"-OGEH"=1O6K-=*=C,$-HN;67UBK!$JWMQ5SZ0X ++M@_(=KX8%?5@)H\D:H$G5G9G%R56=?KZW>8Q,%S+,6IFTMM:*#Z0"%'KS;8/< ++M"7K!'12V[PK=DJH^"YU2%"TG.K6N2\.9<CFL(<:[<>R[@0.1"01@,$!B.L7! ++M@55AA05]C#1Y.PPXB!$1`XK,."@R48@5`V,*`E:QC0D>#8.`X)Y9/$3,DJS" ++M>C,)(E/8(#W'9CPEXW#C@?$:VHJ)AC%X"$]F->A(C#!Z(2$>DX:-RBS:NUOQ ++MB;-L[:_9TU+^S4Q.L8G6W<S4UAN,)UHTX..;155TP;3/`&WO3Y]OEOJWS\\? ++MX#P(/B"!7&CF<F6:(VA?R,HO$*Z_*J;(K[D_!1,GRI@I/E02JE<3E&M@5*UM ++M&[EN92Y8HW?8ZH=7E,$RE1'=*C!ZC5='NF1HS/CK[/9`HR)NDL2EECU$HY0% ++MA3,Y,TFMTVM&0JZ*AR'O,5`R1%-H,"!"YG75)FLEQ%OA+KE6;:Y2NH-$0RE! ++MJHZ#1/3TP1#A9$4$*&&`=:[\YP\2)[R.LQ!/4J'RAGIQ25#C>83#BE5&6TNS ++MKSX`=&C8=`WQ^H4$.X83H5X!\$4#X?P,MC#9!/O@2;0YM*KDY#L\H_5/(P8* ++M)0^(_`:0C;LXY#ME[=('/B=$-""P150KNE,%[TK(D`)#L>(XN6X86@A47,/T ++MX:9IK73Y@XDWJAO2>9=3"KJ&&3+#+@PX$HZC:FFQF*M+&6(-&XABUC!C"*1( ++M^6QZSMT[O?SK%Z=^'KJ'^M>!'<$Y+6.""\E53`,2#YCCU[Y7)+]^#8I012)> ++M(M`>'C5_#<R[\ZS1!9+@;C"!QV-7!%[F&BAFN_7P<>#..F(CV*+J!'-8H^2% ++M<1WYU%53!$HT;,@DD;:UKU-5?5-9T+&6U7NJ6)3<S,@66UD[Y,2&];O.T=-M ++M%K0G==;/'C>32PP8):49A;"2SNS2ZL6:;9VS'"T=V$(V6*6N\-[`R8V=6)J( ++M41(B,!B0!.#D>]/&DIK5K&YA:X\]28?@'ZH*D_-`#^4+8\R/$4+\*%T/4*"\ ++M$*=>S+\+%BP_,?I,`KU`^/M>P0`D44"/X)DDG"LNYZ22/:]Z]4QMML"&\9YM ++M]7NP?6$?I,>;XRQZLYQ]R=C$H-^6L17Q`<9'D>BC9S=;M76.;+,=Y5QIVIAC ++MOK>#MTD))QA2$J1&9M3YKG?FORLEB&2:4HL>ZE7HE`8@];03HFN;<18J)]YG ++MB3#$1EU9JY`RA+&0M@6X&FL=3+F,TXER0T"HL%FA`RV)C67,@.4R7,@70:MC ++M<Z"N&6708J2H[A,NE$$C:5$H4/)?9L";[%"H!1"2$4HAHC5[M(C;:9<&%I&W ++MQQ2&'#VJ@8*"@_L*12'?K7(?%=`'Q%D'OG0"(WDD-<(0^'-IE'V3AE!)7[O; ++M5^=W3_>'TTE:-NW=,R4:(UKOW_%GE@TJ3]\%F8W'X?H%:TWF9:&M83%DU-:O ++MA<Q$\V2:!',2G!);'38+*)1C4HVBSB:=)F,I:&#J8:4%HFNR&SE/6M[-RP0U ++M1!">_MSXXZR>7HJOBU444455%>S1WQUT:T$A53NS!A*;85!MN^K#_$0OL7$= ++MS;K;T(6&RV11P?;@L`D+Y\</JH/Q%]K&`$;:&B]KU@F['>(ZEXD?O)`D#"?# ++MX>C4),),7+[/G5Z5L;P;F0?(Q]+TQA+$U$3!/9!\7K),;$YH=3-!ET)C$,6F ++M%)W9B.IT9A%,W:Y%+3,'+C(XZNF65KC'1C-:S58R8XJ@BHC$Q;3(%.FY-3#@ ++MT9LU?&:U+HL(!6!,ZO''?LX)GC(0_IT9!3^39"2^P'R'1CSI>2;\7[&,@@Q+ ++M0J2PQSP[+]T!#28;'>;F57J1'$KB:&R9$";S*T'\%3:P[GA@DNJ'78^#'-MF ++M30O7]YLD$$$DDV4.*!"2%J%^?.ZO5]+QZOO\>0(85^<1H"(D*6.\/&S,?$<T ++M%4QKLC&9-5^LXY=^KHJ-)+J=>='F)T2RW#KFA,@L!90:ZC)4%@(8H91M!FN> ++M_`2.PH@L0@F)>M[^#OOZC-M1?P_-RZCHLY=^F8,Q%^54BJQ07$+/K488)#88 ++M9(F>L?P'*!%"@WJ0D)/OOFQ_!22$_5@)6"A^^/50X`_(*/2(NFJ9:0TWF_>X ++M_!"[`EC!/<@R_P;T;<#=TPHXC#OZET^NB`\3(?M#NJP05_`C[8B,+ZZYO?=4 ++MFKWR7K:DK(R`H=ZKX"VRV#!+;SX76#.0AMDI6%J#8Y96-3<N9;*.B0,0IB9: ++M#@)!CF!:XJPQ*PQ*DMSHR]H!-DJ`P[6;8'CMQWN6CXR]-=.-]%4LS`"W^0O+ ++MJ!*Z,#$"_D=*Z$VD6BRN@4&`Y1CPBN"2[KIT+.WQ_#`3Z3[E`'?U7H)H5*SS ++MHX,`8X:PVZ5U]GJY<0P*.[!W3;KW*A*J5OE0O;RNM"#4*CXS3#8EO*NTT%!^ ++M3?J#8>1AY&2%$:2IHQP'T-$,!-8)!:-&TC8JFVVPEH]1USE==:UK71P/45,S ++M411'1R\M)11544+%OU@.I`Z4!P-*@^;"!C!5%B(D=;_7?]_\./W;?N8,\M%B ++MI>:[2LI-%HQ9-72N@PEP,+*6KJ.H%<FAC<2N@NAHME*G*CB%`*("04(*,-][ ++MMP7VG=;56X<44H8*!)9I7?>JB5"PZ#\YU55>/B6-87DD]VE5$$WXW!;2@(9W ++M:]G,$$Y8OPTC2-ZUUL/$;/">@*4*"J")IZDWO?DB0F2]I"@;B.)A>Y=FI&MZ ++M'4U8:$P9C"&H9+7'#+EQ*\M,FK<[X0P9JPUP8@JZ+*K<UFN2;IFZ46*MM*?' ++MO`)TWSQZ??_-P8:XZOS)B**+]+WQSU#(0K=2JJ`.T('`R)&6`VD!TYH(&J<$ ++M+2SP'K]UJGCHM@1=W@>:%^]-OP%0^]X5/8`2_>`65IP&5X5?N4>4F.T<`1%H ++MJZ6Z`!W9XO=DK.V:#E>$WP@Y`3PN>%L"_1S/2MDSWN/O8/=0WI[W:/E3%[]R ++ML;0@$Z\?=V7KQ]NS)%5[4.CW,]%[:]NL<!((R-A'\"W?UNP5RL40<K,L4!95 ++ML$=KAE8F0SV7EE6+!5U6"]./6&1APD;PH-$=N3(,$4(J1D'W+CG(QC5<".)& ++M@8DB,08@UMO/-\S<>PD1B#(8D0Q(P3YW>,=E=65:LU855O0*'2G0.*#BXBZX ++M==86S>]O0@]+P%SN1=":%M^;QSO1;[H'Q\/>X>%CWDSX`,>8\)KM^\AI2(3M ++MY]W/MU#L<1B9Y#T,PW&TN^36NLJLM=UWVMRK:U.\'!D>3R=RG.'#)PY/:[EA ++M[VM:UO65Y74[XV939OK\^!][*L8+"!$%"@?$8)Z6K.\@/>Q!)+3HI374\>!] ++MZ9HX6$"(*%`C@B('A\*J\W&:NT%H8*?@.AK.F"41H86P($9@KKR\=GP[NP2Q ++M0H,8N%.:?7?MV/>@G+=S+YOFH4"#6HF8?3/&F,'!CA0((X8$1V\4#Z0''W/I ++M2RR=4AY+F)E#0R29=AC#@$@/F-`H8+%#!G"LS,NW>],J-#,I"M#VZY8CM9DD ++M&YHJ"Q[K55<%D^@Q"Z%"(4+!%!"#*`@@JN6/;M7)'NPY:K<M#4[W!(^\QP;S ++M[>F=?4O4Y\,(-!L<,L6"Q0H:,\-H56,HU+NKW=.0U5%9H&I#*3J+8/!^%B#W ++MT\/Y]\*C0HO/J^"&!O[1@(^%W77HX,4*%"Q8G+9)?9BS,O3D.2NO*JKJC@T< ++MA'7*:V>/@2*]E((^]=X_09G.];5\#J&V(Q`?4,$'>V)BC5N;H,-T^06[1U9; ++M>19,REFYQ[3@UX].QU<D&8*U"A`J8(T6'80WU4,6$:?8"#VT6NQ6SLN6ND5W ++M%>+K0@)-D-,CL=.IX#P+G?5X>]]?5PT6/Q#!%@\"Z5VI%+CW$M-4\K[3?7N9 ++MW[BMS"*NL-@D<(AHP;ZX-:%"DA2O"I5HW,:E#&RY9.U@WZ[N:76P+NM"@MWA ++MB+N[<=2][JP8-@U'PT@:S0[S%270KC%,%V0@&J$KC!D%B!V-JA6U9[P>/F`! ++M[KNAB@@##VGDNQ%G@`@1[W-$^>U:?>D0;0]7JRQJ\N;#2";OQ(LG1[P"\! ++M0/Q%UQ'-?!D?`FFWJZ!ZE5PYY#=TOQT[R[P<L4U5**BAFKF-D5Z4IIYTHM*J ++MN,^1^\`8/5+EFB3!/]!?587N!!!)+/F)I@1>%"$+R6G`&/>G@%X.VCT%'<%" ++M_$DT0V]U&>\!7J25908=V[+K6!I@US-N"8TVYC98<V>`R<Y;AFV6?!-YB,H: ++M@M5)VK>&_3I<5(%FBXL;:(2!*B%P*#6Q4`..$F+UZX0#$4J-ELB?``J'%Y`( ++M\<Y6?*Q6F.E\`_OQ0GL(1.<O,Z8?OK?B7SP18WXD@+4W=^.M#&C@R"GE!VCT ++M;PB4JAVJ:D#%2+FMXP67',ZD32'V?9Q303+S+SS3;YMYH^;<=?*S$E+(200@ ++MP@<@^GNUFMG02TN9>]ND1S,);8A9!211''B""D$LCR\+%$I`L%40FJ(J\=V; ++M)!3>)2$,DF?V-S];=:H:2_CZ+X%`ZJJ#[*W?5AEU-DI/@YE9VW6N8:K")5T! ++MV]!'2TCFL=[E8B$'C.10,,G*&W2#)V%V#S==N2[5AYFI(S*%YAQH\LJN+=UK ++MI;<4TY=9<P4##6(![C=IXGF/&1<H6*IWCK'4.T4%AK0J7=<VS+S7=K7?.7EG ++MH%4Q;V*V:!4X/UC/8+7/-@S@'8Y"X*P!71$W&R4$N[V"BNMB^%&K13Z#.YW< ++MZ_<2;`[VU:&S-LVLT^-H`HH)Q6H3=J7#=$]N<CV[*P[SIJ6U(N/DS+9?AC%) ++MBG#L6F]_H@`<)02D!B42B@V>5\`5*$,(;A"%V`XF@6FE)0T()FR(6HE0H/Q\ ++MRTXTV_&WS1^-N.OE9"DB4L"V2I(2Q@("B*``B.Z@T*&1Z4Z<D`"[G&]QP>"D ++M%M!WF6L)N8_7(3?[S4^S/<S,_O$21MV98]S'<$]*H(>RHHFW>C>P[38:>W$[ ++M+MGOR!BT]2IBCO'9X\&B>.!TWMWBKR4\`@B0:9?$O@G@2]^404#"$*3P2&,@ ++M4"E/;(@8PA4S>7,8F?.$6$6_+CP"41]+L>F)B3V&!5M*59Y<*58[`%"Z$$4E ++M(C33!,'4@F3=]9]X$$6?(@@@^^P;?RWDKOW%G94!GH!X?Y'.OU@)B/MW[$1Z ++MAG),DDHDGR\=..1'E,Q[7N=%8C!2".DIS8<,Q4>YYT3#8V)/CU^?.S#7<\>> ++MGJ1&)D\%41:-$$JN+*5:O69AFBAC!=FF+9&F(2:H1;$A;`M@$R*6;&6(:,!0 ++M4,91(+-76[H4/3AL:#1:(E]^OV_?\_/GI?624T`@/$@,/_$_N#>WAG\L(V0W ++MY218'(*7H6V3'"/UBPDC:CNV3!#\/A\"BC+?Q(UBSB%'OA0U)<&]=<TU\*H# ++MYED]`1&ZX('>X/`EMU@8E;G?&G.'=,D[+PZ"X:N[\>U7X;1`1=\^_->N8C$& ++MN^;>SRSPQ7&$0)B`&!"<&CPE+X<:5E*Y4056(-;@6((8XL5"HUP[+<UJ,KBL ++M4N3#,*B+:.7)D4+<%,RA23&95CCVI?7X9Z=>D#A%!8#&0$$)W[/CR;S^XO$C ++MU/^^P>/]`A%%:TL@?230%4%F*ND/=VE70)574RP37"1@GU);0JOP%;XO7MU, ++MNN>>W5XD.X;%9$1$*A1%*S"2J\:*U,_*?:,[]1CJ#8E*A00\"0`P80(Y1MNI ++M2L<Z$Q92JHY2#D`QAD%$&V#:+`S,)4*B<4=6L`')1HR$"D01/&_3[^!L$GQ! ++M!`XKPWX7]6[8=6=64![P_-(IX@%WSQO:HT`.]\WM5*1=Y@K$K$+,O>!@$^L' ++M>^N/.!@YAOQ@;H>I@H`KC[;E`0((#7G%T*\$.8?FWYC"AR9T$03^!_.$2=4! ++M(^/S3B\22222`.L?)(G#M+?9P25($_=YBT$/A\`AP02??3`I\Z^6[ZO4Q\MP ++MDII?2((T#6Q>-2PTF[#NY-='%*R$.._P)!!)<:L@B::K!8JG':=M4Y!/&(O/ ++M,,,I8\9A2VSM+FM#,C`0!'$PADM&G:9,,Z6,P.&%&9)PHF$-ET;-V9O<V,V; ++M';9<9F1L1<HRH83"E+CK';:W6.\,#KQI?9\>??OE/6*9"TM#O?.U16D0]Y%/ ++M``>.:0=`"R10LD4*%@_3`8@I+)$(R1D0F[)0G-`I/&8!A+0L+0L+2SIAAA2V ++MEI0MW@5G%O#L>S4'#`A"&V&+#8_ADS(;H<?$P?`Z""#A%C!B2N;4:6C1AKPS ++MV]J^5`CD49Y^^]X]/GSG`ZJH"=]'?CR0:BIF:B*$[P.5U85`4752R@("CTT> ++MG.IV+&+)`!EX?(T\3$H)@7,FJR<C=M8&U#(U9.32T)D%*F0&3Q&43D.C>.SV ++M+>D+/;F:>CXK.FE.0#R1462$13EL@K&T;W&DT9C6]-W:QP;-4\:Z\AH[6`:\ ++M[[=O/4`\(#4BF\2,%(J,,$81IA(PC#"1A'YDS(S&M:-2-1DS,IF8[HQ-)ID9 ++M,F=KH:FHRRF9F9WMN3<VN(K'YC2ZBM+@OLZ9T5]6"L9F&2[!HTZTQ/'8O.FZ ++MU=FPI:6$0#IVIPE=]WNWX34"(0BC!&D<.(?,$B`G:]\.[[[VF'8]G]'UFU(M ++M3%,7=W<VE6D<"6)$)X2&1G>/A,/!O-P=@[-74T9FE64N]8PX-S<-/`RIH25U ++M=&,LJX&8QH(PPF&6&I=8NM99JY2['1F-D:C*T8R==:9FF6F`7QHNM#76TJ2H ++M3.N804%BBK$MBQ-?Z#W\&'^5/,((()!AE`$UP9?L&I$K*8&!!I*]S<&?B%B9 ++MMR$E?8/@3JH0?6&V^N+`1]G(6=]"+!+[HA[0`01Z81]ZSON-NSC['B&HGU94 ++M+5OB^3AL)DE;)JM^O$?./S?<>O*]4.=HSP),2*&YDS+:ZH&IJ&:MA6R;9B#- ++M.\&H;$610J5S4=30Q=C<@410H-HNB@A+8*`-HT-8P6#[2,2&V6*#Y/`[?`>] ++MJ7AZ%:PP!L7LM>K(Q:2PM4[)Q/J1=^Q()O#O6ZE.A!W(TJI-^0@2"#(IA)5= ++MP.7822#-4?4A1PK'4%TP^)WN#88_8(DL/OO)&OOE43,7Q@Y21JBRRL+694M2 ++M[=`PIF:&W=@OZE>#U)[)HO.8K3MUB.IN7L8HABJHE/-*09KS"J6^3@,)B%%A ++M:ZU-&3)%E!(7"UT0TVF%CJEP$+IT=UUKBV8$09E;0'BF6W,`HI3>\VNN>Y\< ++MV5*E`-!2._1R?B^``[S`)=XB#'Z;RB,T3%#-AQS$8<8$%#XMATLRQ?C[/5?? ++MTB$!=-AL(0F:2:H8*$%MEIUW/UC#L),DTQ'][-!-"JT=5LT>+7@]%9UXX;RS ++MO<BJ;-F(JO.(>QW%"4-J<2J;3MH4%Z.C&!"'.^>]8Q6,?%1_Q=,SLE1$D!7S ++M.HM,W+YS<69PF'9+.ETXI9"["F8.FPC[=F7C>KCM,]&]#26VV^-!D@LDCD6E ++M<,//'!I"II`4[6RZ,P3*'QUYZZKO7=KI`43,Q!1-FL%`7GOUDDDTLD1N@=UB ++M";?O[&0<WB0BU@`D#=-RS0$2']Y,I"@3LZH":N+A>K,]MV;W.'YJRA$EWV3: ++M`807DOKU?0$W8P:/DD7G>IG`2_J$$2%>UP2T+)A()NY4%AB`WZHD$(Y.I`U\ ++M72X8VH+""_`51=#G>:/CE[9P4=(Q)I:K#@8R<`+;UUJUZX5#-6036'?>`&H@ ++M(AL\8*$IXS.)Q+1RQ$&B-1&BFVO8UC&E*+E&T+*B"XF28EFB3,@V44R:EFLL ++M<LS"5*+J&3I?7N>_MY\!A]Y^D^9YW8%$_'W>?:/>A[@31[G1O5ST)/[^FD^Q ++MM^U4JJ[.?CH%H`92USK>33E87`3[*%^U'O>A#4>4#0`]X^]-GKW%[PS*(<&Y ++MYP967/5/&_>%^'O3!W;=7<5C#4`H`>]5Z&:[P'`@^HX"AS%#I8I[2[W*AY/: ++M>^/9;LO3SRLM^UW.M2X/G;/XH%CWW`$CAY90RKH#Y55'.P!$EJ/SHKVH#ZD* ++M"%JZJI)$):8=P'6YH`\"Q<4`K-NG-"2-9N>X9]VWB0D8SFY!$UTQ[N-;6KZX ++MOEQ[:$D4D5S,X\V`H<!20`)$94#PNS%5=(C**,J$B'GS@(AI4(!`H24)-R3C ++MZ]]N03@241%@)0&K<VY]W.M8F-B3,!+)"*)"PA?9[C'V?;:FNXO9(:$A9(&$ ++M%D4-&NNN_+T*]B"R*'8A"(Q"%A)CXSBYO/O9VQ[V,R'2(V@A(+@BPJF*#"+Y ++MUXS?*\@>?&==<[W`KX%4\*#"+@*R(F`BR#&><STPYW6;SF,^7>^YW(D]$1X@ ++M2@8(DB.`LB9WYUY\=]5D=Z/.KO6]J)VB.`LB=BND7$72)(%K>,U[[?MYUSG= ++M7R24DY$FHBP>C4&I)D-2*CN_:QO5YG.<LZOTGL2:#:3T')%1]LX.#@W#@L?; ++MYJN<YY)A3O.2X]D\/(ZCPZ+'')PYX7X78!`/J19=S#"$"7<OJ>RPPQZP(!F@ ++M$`^L"6(1?IZ`CAGL(Q#@@A,,R5=@A!))]ON0-LQC@[2*S,`W!"30@@(L8-!! ++M`X:$*]=+72TRJ6O+;8W4N8NO<<][8E5"JMT4KHT*)#/*Q45@52"$%@AAB"6, ++MX$+L`K`<\ZE;9%=<N87-SE:-:35D2Q@:62&GGH+G8!7`[YT,&`1`L2&D4*%A ++MH%BQ"NEB@1(N8-C!F)=]NI*@XB>Z^PXMS6"QUHT--7;#:U=!@@(H1W=L:,%# ++M1PZ]Y=;V:LDP4<)<H]>ZDLDCZ#@/!"WJ;::R;@WFZWKNKU@@FAJ`<(2X,<$# ++MF0'?5Z@LZS6IS3)59C,#&#;-"PJ=;E);!6Y>>X!,/%U.L+!M,MT.X/!3&LC+ ++M#!OPT^X$0$]6R+N8:7**^IAYQ%$*DK1L'0`,0@`'&ZK4;>7BSL3PC`J*`L(. ++MO8")0T`B@QP6@B:<)L.,;`N57P.3LX=1SJ5PI[9%+F<K,@T'79X$Y=76)#J9 ++M!W*N+(@J%:'!$`A@6&!?6;L6+`P"E"YH"&6U9^K[?M[[[X:1GV!C`365/65! ++MGTP-W\*KW6+F96S:DD@6"PQUD,0$T((+T/V#<W9MGJNESSLTU)U#<K@T#H[N ++MJ..Q$:C=*>][P6B#P]!:J-N'FQUV&/A=:@A/:1PL:!0FF9-2@VUV=$=[X\,& ++MB(R#YX;[6X/G@X4&MI:O4_7O5XCAA`(P06*]5VF89B=9A>4-YFA4UZW+5#'T ++M[E9+0YCS9-)TAPZQO#1PNQP[;%^NN[%-WK[JOLZKX.U>Z-K:&T4!0]R#(X5` ++M;!&`CAHT"'=%[B&UCFZ#%LP76[ZS6&$STL#P(%2L$9D$"8P6$.$]?'*E9BD% ++MWWNH88<NEL]X(<%M8Y>4Q4'"A@3%R[E55NLQC?!>]X,61KNVY*;#!(((A0*Q ++M,"7Y7JAJM@)C$>(LG#61#'9GHSSM90-@>!%A^'I6VJPJ\D*I!ME)'Q\ZZA1\ ++M3/)(*R7?FA3D]9M6Z"4B3--S0.!\354<7-57M:Q4PHLD3"U&0-*DB*()D@(+ ++MZG7@C@&BQ*)SQ#?>`L!UX;K&/EL4X;M0C1B,.G5;1HT*8NH[SG=+(7I@)5)A ++MA$D3Q-,!#:K2#7FL`HN[@*"N4Z@5!>LVJO*KU"!4+2I.Q)(ANT&0:U,;7!>` ++M3NO$A6E(]BEB>&F2D"PN6:E-3N`G"#*QY.&[ND4"RF/>PCVNJ\A;VPG@JX*= ++MAN(@F[-XH>M(8)%9(HJZI^HY`#BIBF%&'0%+5`_+<#"+*%^"9UV1!&5+:H6P ++MJ*(7B/>&T1Z3DB-.USO<V(["=0[$E`20(0E9!4(0E2`(!9EW@+P#Q,BQD@RA ++M1D1=.AURD(3@`'41Z$Q(9US4)I%@A8+((2!H(Z.'#H!Z57BPI#H!0TK),D1F ++M(H*E"Q*"HR2,Q$S"&9&69(,PDRC6I;K]6=!_Q/<GV`D:9('-020252B"Y1E$ ++M$JZ0202_9;RE5$Y4)5R06;F.B"?PS7!3\(3^JFKH:'J6E!*APHN'&%=T+,%, ++M/LP<\HQK88F=Q%7TRU%G=?.F;1*TW>)7VZ]AP:=NAA]S)6F-DKM5*F]4QVF: ++MM%,TJ.U2.2XJ:Y$YL?:$_<T#$Z0*>I<^K,O=%#G-75V+AB;L5>,CK5I7$\-O ++MLS*%QH8DC?#G$R75YKEUUAH<X7?KB"R&]J;D@`Q<3:KV)X+T5#UY6X#"@?$D ++M1-\&1>&JTT`X2[168Z<PPO>JMTSM%*;@IN6N=99R4+-#:R)Y4>Y)D5S3)JEO ++M!H,9ALA$B6)M+NZ4I0X>-X$Z)'EACX&$2M#0NB-!I>]E<D2!H%"VF:=:%PT: ++MJ,6)$@JI1([78JN:IJ(I2I29*")0U`%)":5(:!)8*%6D20A$I666@$(E$"2& ++ME`)<%,%<=EB`4I#I3:KJ3*DA<=2A*0+`10@4"E(D0@08`.*Y`M(M("S.E=<; ++MCA%6Q56R3@&RK9(KKR@V!J6RFIM*HC157BJ[8V*5+$@:$T5M<JIX-4:M34JF ++M5-0`AP=*2R@3!55`FD#1"%3"&9(+#*HHDS&L>:[_2'><U5XW\C+G8)Z8VX!C ++M,!/`R8\XJZ6(85BLRP6D%+B8DQ/,1B*D33BH"`+,K0^SK`TX^SAD^###P0\) ++M-,F2IDZE3J#9`[97;>YNF>\NS>8R=T578B&2YUHT21UU==T'9=N*VB&ZNUKK ++M-^+K70-L34FW4.&L%Q@:9,8=R`:2B29NA=Z'7R[>>779OI79D622`$AIYNXI ++MOF7*1$5,S;ZEPHK(99O&OK6HLRM;%U)VP8QX!ZTZ>B].@,85`,$04-AAJ$29 ++M1"D"(KILG##`1GR&`!@TQ0(%"B44KT1JT.YTZ#(1,L9!F'3.&F,HRPZ,=[<> ++MG,X!N9B"<)TP`>0GO6`<(QXXZ*DF4U#D),.M.+$`T&V#N0T[=Z7LEV0II@4, ++MHBNF#((BD\LADBBC.\YX<-*JNKI0[4,N8C%FWI](B9U,_Y/Q6[^YY:7A![T/ ++M@`@65[W@??C]E$?7FW^RL%-&TJ`)"/O0@3$/&^MWEXB"?40(0G;?$#3J5G?# ++MV6`!1!/O$_=G`TZ\2/?.@QUU[^.,G`,/B63XTI)]C)#3[CM3S&F,N$.:.A,E ++MF,<6PL*S(X+EBP$(W^$`#@C\SYJHA`1$@VRF"?3U5YZ-GG?;H";]#@]F;W=- ++MI2TLI;-M!G;I[`H?YQ!4$JZ!@\E0)L0-<[!/U`>`8C8Y,MJJ\&?:1QL$04ZD ++M(1%,0L!M<*!R,7X7V%/=>@FIQ-_P</@DNP"B""3W4Z<ZV=LRFZ%[UZH:8%56 ++M3.6W"S!E1!%@L[\80$EWO"2:/"CW?!EZ+A&DN,*%$H)E2N)J"G5=8(J+`W=[ ++M*D66S(Z"4+FB%24A<ETFQ#<X9I70)2MFLV0A*6MBNYV.26MZ=XR*&Y0<7<[P ++MW.<SOAE.J22H=$ZY9AX[@=11#(CQ=<O.[J'1\('03E.W/5,\$!.!B+9"<=<T ++MJ*&"/55UYU7>^J]>"#%)$22221I6N>`G#=HW?J%/22L&@D^8?VL(N\L49B() ++MWX:$('])!1(!((/WP^'W]>6\^_KZB,1BDC)$4441,Q111+W?([,]?C[_3R^H ++M_'U]>01B"5?9'<"(5`9$(#(Q1$R&1>Y=2,9(H(4"22D9(&>EP%-`[WUXH]>> ++M7J:O(??@%@)!\X:6P,)@R89K51GB+JBYFZ])1!$5$4%BK#+MQA=W!0A1O3D3 ++MSS[OH4:+;\+DA3N]+\?O]7XBDHJ6*QHPI*$HV9C$28*)H9I2$,J,E%%)%%)3 ++M!I&3$U)D9L;+$D60T%-,)1A*+%-))3&*0S#9F2202DV1E&)90E%/UWR^?M]V ++M5AR?J')B;WJ#8SG3-)H,VX3.35);,R,65K(9M3#+6C-)IK.%0IA`JPN0TEM- ++M`,U'&:&*:`UAHQB7CS=,GF')I\:UF>-G951$1$1$,,K*R"D@I(+US2),HAK" ++M(8A)825(*D%1'C!$Q!]8@XKLQ7!??6A=`0$,,LLN&+B2=X-@V(6(6+K-+/PK ++M^JNK\#?HGXL8/2I0$`5!#!H)C!)[)!\6_ZGKN/WWXHKE@=)#^"C29E^K)/?$ ++M?2/W?8"?H,]PUI+X1`5?FQ]G,&(6_C((0_BRPJ0?T^38@M!>9"(1!LA>'[W* ++M-`4/KN6^VOT^^_40RF0I22D6:4IDD322D))"E(F24DPI2&1)$DDTI)()DDR2 ++M"F-*2(E392D@R*0!D2229&9))))))))))),B9$R)D2D3(F1(TTS)$2TM-*2) ++M:5*4D34J4LR):5*4D2TM-*2)J5*4E)+2I2DB4I))))))(DDE(DB223,DI&22 ++M22222222222223(F1*1,B9$RDF1)))))))(24R222!D22$))(0))),)($,B2 ++M$)),B0(9)"02$D@$)))"2$R"0DE(F1$TI(F32DB:E2EF1+2I2DB;;+;-4JE2 ++MTTI(FU+4U+32E*2DFE)$LI(FE)$TLR)921-*2)I21$R)D2D3(F1,I)"9!))I ++M!)FE*1^F<&E\N%!KWA&6Q8"4#QB.'6.9-W<A=:R5B,C:<KLS26$M&AWRS"\9 ++M!Q"W"S&TA0<+,M%ERA*<<88;C9#.<['9O0"/SNLS3Y6-EEX(4I+JD&\FH9MW ++M>B(DRK4&$O?TVP$010)R"#+Q?05?Q#')(C2#MBQ4"2%`?4GI!-UC?C8WO,0- ++M)"`Q`U7'C7FWV=G1R0V>/=W%#1109O#RD5]WNK]KROSU=)(20DD)"2222222 ++M22222222222222222222222229),B9$R)D1,B9$I$R)D3*29$R)2)D3(F1,B ++M)D3(E(F1,B2))))))))))))))))))))))))))))))))))))))))))))))(&1 ++M))'M!^MMHVU&VDJ!0N`D"@=R.7NSN]ZGJ!+=G16%F4(;PMBW1CAA,`A;%L!R ++M3(4:$%I4%#>C`.M:=FR"#]+`8E/RC%DNL(Q*5BS9,R.98&>*!1.*<WN^/!TZ ++M'&;-/CP5B,U,-\5*%UWFS+0?<'H@,759(8()'X,8HYXG.]80DQ^[WB803SP- ++M(_:#XDWX[E,5.7J\\[R<O5-=^%5[,*YJR.6/Z/.**R$)""/EUT`"22222220 ++M;6EK3:S:RPPC`D"2!($"0)(,@R@$H!""0@DJA*H2*R*R@2@0A"$#`P$!##), ++MTTI3*2!)DD2!$DLTTTI2E*4D365E2I33(E,I2)$D22$))`DDR"20(20!))"0 ++M))"0D"9$2$"2!),D@$DB2:4D3:S:RVS6S;*I4J4IJ5*45:L"@H10BR1%2(LA ++M"!0E!A!D619`A"0@((9BB4(0A%E%@5E%A$E$D6!96%@(22"(HD2A*"@LD)9( ++M2D)*0605"05"$4811D`"0`L04@J"D*A4+"BE"(HF)4E2`0E0(4949(E2)8%! ++M0H444I5"(1$"41`D9`(4E&4965@("0`D`(!8!85A65E999F9F8BB-AD&?"FJ ++M85LML!$O:R&8-MH^!S"EL(U2PM+`W<85A<P&7!RB@JIDA6(,AA:"6P/&9D0[ ++MA0,V4MU@'71W=@B08]$O6A.W??'C/.LWXZ><S6Y,0#%3]CH^S70^!3(#]6XA ++M`@O?QMG$`C8J++X0G/A]ZS7WVB=][*"%@$T?#I6A#3X_AZ\B^VKY\KV(D4B) ++M?GZ18(LZO1[ZG3.R8P>/,PPMH$@0V89M-&7P%$,2H80!$QQ@810<LRI8TS`< ++MRDJ%06$[%T8#)1FF$<S%ED$,,EJ%MAFM:U4K(:`F<6$[)D8$4.^AUHSJCV3) ++M8%MDFTE\60)>5&#]2]1_>5B`@U*\/X@@D;KA6!MLV,(D!/I0.`HH[@UU4]NV ++MOWB+#)[!ODCBX*E4]UY$2/B4BK*6^X6!/Q/B"![G=F)T0HGKHY.9RP.#SSH" ++M0AF&**DDDDZ=))'<YVOVM<KR$S+*8*V&)*%0K2'!JR"D34J!4UF!4N-6BS,H ++MI!9ELA")CCD&5G@\&X9WO5T#`FGMCVX\]V!Y2!3ZJ7B!_".4'S#<9\DO=S$T ++M)(5MJ_$:A!)-"$27[=['N`VDJ5U";^1*SU@#AU+>QT=<]=G?NJ11$4)P]DY) ++MJQ8I*>'GP:]R*B"**D4@4E1E1E4E4D6%96%E@)((BB42$2491A&$8$@20)%( ++MI%A+"62+)%"A24S9LJ5*4D$K-I6E:6TMIM-I9933(@D))`D(2$)(0D($A"22 ++M2$)"29)))$A"2222222222222222$)))))(0D_&UK.@2220DA"$D"$D"$(0A ++M"0OA;W7+BU[U==K-&9[$[=@I2@-"@THH4.YC,9338`JL8.M"J$XZYH'9-'4S ++M5B84B:EG;*:J42Z"LPP\2S41X(NU%$WJ:,@#9R3AUQ=F!'+7$*]B:V'?MG?6 ++MEWKHZTUEV!4)6!?&'$H^NP*+#XK%@O^&YX@^S;,$'!)2Q="A?D$@I[[?UB!+ ++M[E!\M]]I-HGX?<%%J2X$$S]`!NHT?$CX?B=%;=PAI#"^0)1AFLNFEO&].5,[ ++M7)JC6L@!F%QA)('7$AWP]I2EH**]>-XNG<AOL5=;Y^MZ(222$"2$DDDDC)(( ++MEK-6:V:V;9;-E2E+2TU*E*2)H4%!*"6"%@A9(%D@6)(L21426$E!06"H6%18 ++MI56K!*$H*"Q094&%!84%A!$A!$E`0E`0@%2`5)16!5@04@J"H+!0HHI4LJTI ++M1$"11`A2%(2$AA@J4I2DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ++MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDJE$L26)*%"PL*04@I!2"R22R22@4"@ ++MH%4JEI:;-FFF1$UI6H4A20)`E)266$A(9)5*4JVK%*1"D0H$H`941E1&`4(! ++M0E5956!$($0E`90&`6`65"5"%85@1($2%4A5)$21$D1D1D618`D"0@(*DI)D ++MM2U+2TTTS)$C(B0AD2$-5*J0$`2!($K*P,###!),$-4JE2I2EI:6EIIID1-I ++M:5*FFF9(:J`H4*2DI)22I*DJ*BC#,Q%$BD"DB,B,J$J4)*$E@)8"42%$A2"P ++M@L@A((2@R@P(0(*V5LUIK3:;2I4I21$U:5:5I6E96669DFV%D@L0L0H24)*` ++MH`D$)!"10D4)!9!818190)0)$D20)`A(221F2)"2220P@][KNT6<`A,,J%JB ++MQ;.\N4"W##,&G<!DS,ZQ7<X:QG+9MV3O=F>76W1^LF(P9\QF3-JS%4+.'98U ++MD54!!+E@HY(3$#X.JXRG%:[CR6_C_O_R_'^TGW^Q3[7\/+//]()Q8Q_!O\FA ++M@3_&G#?^/ZN\E^88XK_-+M_3#55'+-CMVY_Y]5-U2G`F&!"K^WBZ=?N_P[:] ++M!/IX+.@@%?N(UX]/)]7?CX"$.1/:'^W>'1WRT?;W@D.1L84J%X[!RH5->NH= ++M^SKWKT-2'SC*R(>1WA`/C3_J.*YUQT8>'LIA_RCI_Z(TZ;:@[T^[O[%6#!4C ++M[W#_W8"CXZ"]^.BXC=17\C32N%,$-,MC`C*EUSK.=/MM=*9?X?/Z3V!Z__(O ++M_8D,_,=ND*FB3Q2G\R/V4K_0'8?^8\="_9IBW[_-@8B%^%[#QXF\X\JR*PP^ ++MI#G1L;>WG[GOV^K.`ZN_HH=/H^0I(?W?Q+C_<(?9:A&D?R@_[F4!_LO^_O$' ++M<9G^[O8O[/</H#_NGRB+AA])\0/TA^HY.3@G/[MC@8XH)(&4RGY0$#<K^T^[ ++MU>./Z<3908\I`+.Z)_+]ORS_R]'GX_FL[?P/X?V>L_]O^SW3\48:_WL]Q^^[ ++M?^V_Q/_`AKZ3+J"P"$/^0?\3_NSQNU_O]FOVFK^'R.<4=4&"'!91]:?]T")O ++M525M26IK\\`*0"$B2!^:I$I!DD0@E4"D$9H@0(I95D:BE$6E1D)!0H`4@I(1 ++M:(F!D1@E12E`8@!(:9!:%4:0022*I%4I42A4"!)1:`HHV+1M&HM&HC$48T4: ++M(J+8T6-DL:,:*C4%BBBQJ-:B@V39-!L6-C8J-8VC&U!0"B4`##"A2J+0*THK ++M-:T:JH-K6BVBK+$&E5*:1&A(D%:`0DIE45K0Q,EM%;:-5)2+)`LD*M(-4*I! ++M0E$*UD(('2O76/\G_(AX[\W_R/!O6>R@D&<==ZT1_LU5'/5+A0_/_H)`/^J$ ++M/9(&MDE,I5TDR22AF(*N=$$E$T03$E(X_H#6G08A,852OYSAK]"ORT9""!T@ ++MK_G^_@_H#_.'U?1V&!UHP?P]N2GML'O:S;&*@B^]O2U?P`3!V)IDG0DA]$*6 ++M(AE-GTF8GNG_A4/OD^T0D[#65T?6_:AH-U--4)_>/WV)(]?*_VD?F94A/C[@ ++MP9/#T]G<>`#_^OL"#ZAI`@^0&O)SY`1D=?1NP41YR_[6R&`ZV%%T4"@-_DJ` ++M0A)_B/^]#]P@6MI4HQOSPQ!4GZALI\/R._3N(5IUW`(0]-*F:#SK@RA4)41A ++M;*/[NJ_B&:C$$^@@A1DD9#FT).6"(4$&6DL8L14_FLQPMH1/#VTZ3\M?Q/S^ ++M3QHZ+Q(&D62`C0FK`2:PBDADR0(02S]`S_PO?+\?JS]O_?_]3]0=H&_"193\ ++M`??A9`8&EJ6*"B?=25^0NOD)CJE0=L9QG<U+!8;O[/V$@9]$(:/SLX(SZS]2 ++MG^%ES?^%^+R=4I]@:^LZ_I#2I:8@B(X,*;ZW1KYG\>I]/O*M+6LX)W_\1:'] ++MHDY'X%XX>H]WT,J?!\]G[`3VZ0#G]$_0\3)X_H0>@K^4#,DI!M'U'Y'&C0D? ++ML?U/33O#&?]K/[OCH,^$#[`T!(0^D]QP,/S@6<L#\UJJ(FD_4?L/:;U/;2D) ++M@T/TTOLJ6%M:_`?Q">OU[]/H/J/:?9`_0'MY_J@:IW/T000/4Q%7T1;!M\D` ++M^'_CO[7I[/QZ2`?K#_G/;(?OD"'2;@^;R^L^FFT%_-953\$#^X.EQV9O'INF ++MDU[3K^8]X:/<<$A08B)K[0O03_`=P7/D?0>@0K"#K:[P_M`DI'_LB/^"1J(G ++M^J_L?R?ZV,OE7&G^+2_2()$?ZA_E_UQ(C/J1^$9/P0+\^O3[X&=.CPQ3\VK= ++M2Q+^)<000%V46S\V7A*ZK2G!G!309JR@R_GPHX$_U1'S34U/Z/W9C[6$?L(8 ++MPEVW/\!/Z0,`@7#\^^(2+Y[9!12*JL0<:G.Z'3!&1BZ[+7=UUSG3J3',I/G< ++M8.$K65HK*(K/`0:'P`2D"PI*(/_.8NEN49TB?N_SFFU;G\^:_/U&X6$_K_?# ++MSE_?F/V8U&4]C%(K]UJ>VV99F`&\&V5C+6,8RH5J56M[E^L_:%/=N\7Z_P/O ++M=EOT;Y/D?@'&O0^DI.I%AW'1,+D#_7_M4,/_F9@18?ZK_TX9AM3*_JE7B_9= ++MS-`9P?\'`TZUFM//$^CO2:9M_B*_WK_'OZ7E\!Z[JBC4&BAI5,VC"%&)*BD* ++MDB2#ZMDPOZ-Z_SG\G^[_;ZOU?X_/]'YQ/?V$A??M^+GZ=G\Q[O1Y;?O*=O"& ++M#<^GSV7KV'GZ^W@UE,'ZE_M9?%>X]_ZE'BR)/"_ZQO,_YEKD.1U\/_'U^=>R ++MGQ@2/%J_B=ROU>AG@>.WG'X>L+XW9;M_7S&>OO[^Z?1[N3-U_P^J_9[NW^_W ++M^/]GPD/U08HC$8*24A-$Q#!4E--4A?\7S]_^GK^/[/N/Y?I2;.'Z=6_KRA+* ++MM`?JT,RX^H@?2%=/^?H;YCA8[+7DO:-O]M=;'IQX_C5R@OYM\?_+UD\#RP-J ++M<-LIIN>5CV/T]7K_9_3[OQKSZ`!U0`=O]114+C[/A/AE?&65`V0L^,,)R$0# ++M[#.T_/@'A/?_,#_2A_P<A^Q_,S0:7^>U?/UYG3@;/QR4!_0=\D,15&?]_^O^ ++M@^!R'S@?1_J_J^G\OR#0#_?_3^M?/^M^CVT,(`P>B%]G[CT1%^"#_%D#H%*N ++MQ#"!4E+'2X9HU/\XZ3%A33-AH7#,W1^]$_I/N_P_>?E]LB#T!\OK\\="/^V: ++M4Q3\HD4)L,]V?U_P'@UQQQ)I&^R(7VW7[#5A..OI:4GXY/BPPRREC:4;1YG; ++MM[M`=H<!OX)W-!T/![!/\W0DX.>^]>]'X>-)%%%DXJ#H#/>JMY(OVGZOP&`I ++M[P@0"H!0X1PGW8_=^7U?HWH(/@JI`_G@]I7V24^)71`NI6H0-L)1FV2>GI#^ ++MP+OH_;]5['-/;`DRQ^_^T3N/L*KT'[@[GE!B%"S_(.''Q^J>XNJ(I#\L>].@ ++M!LTY:PM/A2PR'Y=`.4UT2?>,YS.2:S#63KQ!ALK$<A3\`\:[W./H\K3,`@P6 ++M?*'%QD58]CN('(D/[;89]OR(?Z;85E/H@AU_1/[Q#KU'T%]BLHU"C"*P6,E) ++M:0._^XPFWW<PO];/O$O-F24*!OVEW-G@T/K(?:"18>J0&VJ(RV)WLXDL_RHD ++M&!$44D,!3^W_AUHME)Y).O_V?GV*KODS9HK#7HI0/M_`<)H/1(1]5+'Z[O)O ++M/F_>FQX?R_AF[^:[_U`F'T3_LF$DG7W[ZSR=#!PXXZ'">`^[#U!SZ`Z"L_*# ++M,)!AAKQ)/Y\ARF1B)E+A:8Q^PQ$O.E`VPR:Y/Q_PSZ(?)EAS`[6VUMMEA8+3 ++M))ZF?3?OI\U1?:9ZFSBEM;FRO/&#Q+&VLR%I2@U+W^QE&\[19'?\.#]JC8IL ++M?:R=[WE_MCZ/S(\OSGPT6+]Q9C(KP3&[SXF7?\!_I/1&Y(9'Y_='\=>_20E9 ++M)$)UW_)P8J(?!*SI:+Z(2LB*`D^6L_;U+QQ+#R##V,#G*%/(GHU6(A1JR"DH ++M+_3V8>3%JIA?K9'R[59"B)GJG7(5UVW=H*E0KES)#@B=%6F:A,C(HB"J7Z_= ++M7U`=IL'V@,FH/=^BI[\U#4/,\0DAW]@6,T(H-:):%H)_M#!A#V=_::4VA)[O ++M[W2A__.G>T7:K]@IO_8^GI`Y\(GS6[40<^WQO1&)+W!E85B*S!)6"M8E@9G, ++M?'ZN@0SG<Y/X;ZB>K"@`B,2<>]^UGGH0X,^\LYUV!&A0Y1BF2!R00X_=@AN! ++M#J_.2A.H7-XK*=G=:CG0)M'Q^C>^'H^<'9V2/Q(:_XH#ZO9M>OZ_9W%]0?@? ++ME/_?Y.@!O\?6>_,F?4GLW#7!WG2=.=!^!M9(5)4\0\%4%0%"L6<AGLZY#$Z: ++MO5!]G8.AY(OOJ"QMJ=F]LR4)H_=+W'EO)V+#ZC)"5RY@T1*KD4U"TUZ&H:V& ++M?(A^23[S`H3<8@'W=R>?,VGB!EGO)WDC!?4_Z-#[Z#Q=@GTP\2\#/>W.R5I* ++M6@KJ,D-1D-"_C'(`NUV:FH!D5$?6%"$+;=T0&01^+=#@3^0@F0$[AXS\])UX ++MB@KP0_<"/^N&D>![01`?N@_+,.CYWF`OT_,_M^8_GK%^HX5%?SOX(?>2OF#M ++M/AE(+%#WG[?Y_S[X&<`KT#L!\26_3[I^2'M0GTBD5G5"-"B*?$GR0'YRP/H9 ++MCB48?)J!C-+;X.D/0@4D^$P&V"L?0:!A8A4LA;9C,'5*C!&*CI;:X7]>SS#^ ++M,/9/M@.FHMLE"T"G;^.B>O?V;U`]I/IB*(*SZ.)"Y0]?.C,1=>.:;*6>OY>Y ++M.-AS[I4Z@"0`P21462$41!^9P-*.CDG)35!1,,-0114DUP@,2E6W'W!_R0)\ ++M_@GM0.V`_+\/R]NW[[QXCK'11S%S-Z,F(5U0H_\!F?06"*W-HDW^58&D16T_ ++M/G*H,T<#U5%^'V`G%#GL<R)TG=].!C\@Z83H'E"`R,/HUMZ,)HQOE[:R^.@> ++MC_-.*/-'!`(<O$A'>>0&4TT&R4X2O-C#X5%'*V*D&#F'."CQCYT8"8/%89!9 ++MR48C)0G(;Q`T*@JHW,%+'T(_U#Q1%`/?[_'JG;03E`@_X;H/K/J@4)[7N>%8 ++M^RU2^X_-)/YV2%9'#Q,/UISS#MR<3R'?.HI15?M`]XI!89,P'6@*HE-W0S2[ ++M2A$PH5#>&SVW@'9P<&!+IK(O]S,!#)$7[&G+14?Q9_LCW?Y_I\&<"O>B!P1^ ++MW[B"/YB/W?W#R%@9_D/,;@0I^ZA?<31`J;_I,1/S_N+#_+^XWAT]O4^';_K/ ++MC[I`+/_[_(2?@S4'_08Q"U(MEI,I\S@T$0%#@XN"$/^3ZZ'_CE39%%1`+.]J ++M_C)G-9HU&`@>3KDPGT>OZ@/[0Z;CT%UV;*U^C[C5'W!S&/9%/>1_UP,2KD(( ++M7CTM+!%4!D1.9BX038L:"W+IL5HT9UU?N;O2K@&A=0M,26PXH==O%W+CT`M? ++MMP3E4@$B%"T#!_,Y"&!G^,DG\['^[4,5:'A_N62/3\`[[^K#F8E9[;^H]8=1 ++M.U#V!D[A..K`35*2,!+V36M*D%(LSZPSZTPF<%_F3H/N1PJL/F0PE"3C\/;^ ++MCX''#\^I@D0/!,/]A]AJ;$((K(\\R'@9GH3:9G\O:OKDZ"<G!*7TZD/E/V]E ++MW>+3L4PR-U6<9##T&'QA^)0ZPD^S\?A_X^FMDUOOL^0#`TS$A)[6^T@>T_Q@ ++M?UY('E/]WGW0)/D'QXP2/VQM9!C\_;H'#_1(&-^LL9(BF`8:7]1F'TS;Y'!3 ++M>0#@W[9,T^-&IKPU#DT,_VAZZE*6(JFHHM&YZ#),S\`/<0ZH1/^C\)]<_%`: ++M4G8GGM\3[C[A#AG/JZJ76M(L)Y=)MWN7!89JAK5+0T99ZLQFK:)O(V["PT-S ++M,A%@2L!0P8<N0VV73A<.P3\RG2AO47^;?&M'</;&/MLMYRP-9&E$SH/`33'E ++M<R9?!Y_%[AU!0ZIC>NA05FC4R(L$%PM'<<R6W,E9-LT8H-B4:(7#,38@9ER[ ++MPX.\B]Q+&'>2U$YM5/1%O[,"JK,;^#.DOZ\[@\`DB_A/C3\Q^:2%-PV_>VNU ++MRW%F7]%PHBWBXR9EG(N4PYKKJM/+-N6Z5=*T+0&+&$$$K$F#MUJ)?DSK]4@> ++M</<NBK%2%AR<=_:!310Y^!0^/F_XMA*!XAW.BORY-AP0=3JT$Q"IC5$A%C!4 ++MMF3"L]1)40*9F"`2)2BA'6&0BTJT(1(M))@?FH8@\6:9`/'L/[["O&_]6M"Q ++MX[P`_))OEZZZ4("@`J2&&`HX-U**'O]9GZAFIQ&Q%6HT8@H5*(U]2,(H[,,2 ++M7<%6&)E]DII8:6*3"E8Q1V;,P34DI9"@U[?YL-;<"((*B^[,_#R8?@I#SF)$ ++MC1$R^W+[U-TDMOQN[4)1ELK+VV68:?VPS0A@PX,`VGT80-?"#PGPGU(I"\%M ++MP3D#NR!:B(FC)7\4DP4AUCC10)D%/FQW8F0Q-#0.13,4J[+`A`R-*8:75F.G ++M:C59-$D.H=$NHH2S"Y9*D#!U@4F,J"R&FL;3$-&CU=VB<[7/7G=B-W=)2(2V ++M$Q,,BA8T#2/3[!KM/"Z-/DUB'4ML%GMA!)"_T649:&`N)U3'+6=W2#!IE&8C ++MK^7SQYU<W3]8:X9-C:WJ6*=<\KKEV&@RJE&AI*_9S7<\,S(%R5*`+E7)U=[U ++MB@H(^E[JMYJ/VY_']%_#FG`'>K26):],&E=.)CU[4X=6R%IO,EKE,9%4%XU( ++M8F%VRP@Q`6##A#'3G!9#&"F#4-\!A80Q$0TRINDS%#!,]!FX85#L(<,,2#KB ++MX+!55]EJ.K1%8#JN89(C3$S-VNE^/*WB^;J6)>RYU=";WO)NS>")2T$=4VF2 ++M*:M59\$IB5.6*8XVE@H"(AB1XS!X&ZK:*+*S'$=H6B#:5A5;H+SO<R&RE0@K ++ME)6&)-(8!I*F[C)QHU;)C!B@"P%.*&C!:$&+:504<>!"8:XS`60=M632+`R) ++MT9K"PTS%5,9*S;*BA62N6P-'&?/RIN8@I[#C.*I)30<IC_V%Z[T'68$TN`F# ++MCKO$3\V']Y]YM2FF^#VX_Z^!]_\0.#_BE/Y2%?>R2DPA,)*2@H3R"NH,<?SG ++M0A8J9DFH2F8X5F(D86F(4P*E$*Q8*07&!<L!$)8'<Z_X,^T,HOL]F9&)(B(B ++MD/T(>Z;Z=_;<->,S-&&:U,;O7'_))(0D[,K<S#J)V_5W,8)CS;XI^K"X1"PV ++MRN/G/-FV0<//TZCJB9F3+235'#V:H^J&%Z`;1$%-WC(=HDR(L%?7?T_N+T;( ++MZP.?\`?RHGTX$\Q^G[3V=$0DRT\A.G('78;PS!0L$$$+U<J"H#Z?URP'GP`F ++MA[P4E/F3(I]:#M)#1)Z;4)TI,?JP77ZO(ZA5])7][_:G^BSM15BK%8^IZ=\D ++MT#`;_-3(B#A$L*'F$!\&CC)"8DBSS["X92`&86>B=NA3EA-^>,<UFR%L$G8X ++M:LJYPQ3F/F/\^0YI\!\KRO#![8Z.GQ]?K]V9F'GZK_>=`(?.5:!6E1J@$2D5 ++M"E:B40B4!*5`5I!"(0B!$IJMBJMB-5M&JJQJUBU6)-M(05MDS*+&*DHU9(R: ++MD*MJ-MK_96I%I0$7(*&EH`0`"A40(B(2B&#*R*_GC^0#-W95R[@G"@D=#G3? ++MB#?GVQ!PM'<6;4J"54<`[&_.3:\;D\PV2\1E;O.)J&!SR6A>+U6U<0,.M`C* ++MJ#"OF8!<!67^18H2*5=(22I()31"R,\5>*>&=-A-JMJ8D;[S06'S/BI/U""/ ++MS<0_AG^1^+P=R)$E_F49J)(M;@*MA4I3S4D086F8D%#/X!$"<I0%*^\_-/$( ++M4&&962-]F(F0LER@"P4BPBYTLF)B5%"M0]4#,I6%8+IKI/^AD*F*A6+(VP`0 ++M_*`A$$DT_,L_<+Z$M$U8IA,-JA#,D%2.A)5\*P$-A8<#WPLN,LY92[\1VVKN ++MP-I&Q$PJ4U,;7#3W(U+NJ40[CJU0=F,RP+/2VHUMLM`I"R'30:W[\W^DM5X$ ++M:FU_I.>.QOL\VOH.W)S[PG$3D1#3)W5FF/F@<ZZ=+H,\20\?O\_/D.KRS3B' ++MB1"H**;$#+Z*,AA4X#),X;A8WN<TC##AY@7E5F^31CHJPH@EU=<`N)\-N]V2 ++MLIH%CX.&8#7=C6J0G!T-!9.N[9<)TX6P1NT#'*KP1'+G.[-'!M%"A"4H.-XK ++M<+A6WINC<6`,FW2I[]IY*:`U;#P(??,.!SRO%*@)R0-#C$HY3-N!0<]1@D#! ++M)7"<W>';-P`^@91D)3AA@H`L6"B[OT!0JJ*%TD)LBQ+"]QJ4WH(PHJAJ*5^W ++M*AM`K`H%0.Y^(=`(WRW)04)EF"MT.H7`YIQ,)LP@\<W@$T,OT6L$[R@0,B9@ ++MATV=&(9,JQ#6J":+#HQPZN._=D-3EO=%@2>_/+LY[#V]<[C>SG>QP)240<@& ++M%52-`W>SN`>"O2W#"&8!RL3G;'"QI-MA9(&PW82/V!^M5GIN<NN=NRJ^W`<8 ++M?MNL""RJ@!!38=;:4-KL43;3A6>71\1F680&VG-:5-"R,E,Q)8#.)9-$#?HI ++M!%RHW(Y-=^V;/`=:=".S$W,@O#X36K4SOI<>JZ1]8??8'M-Z&977'=MK&V`I ++M9%5`>6<BW&`UE@`VE12;NMA0`3`*60+K=Y(65[==H:'W$CI2CMFP1VP(<G*G ++ML<:=E!MA,O'`UF*?ME0A.%N5<E+*KL[A>5RRHX.@:Z0"W8B#D@"55"1CE;*A ++M^-.Q#&@,J$:I9,Z5$0.40:E0,34R?]<D?H4V.+90C##%_ZDC[WC^M^\;5D3R ++M\=-9T2>,#/!T]-<!RDN=\%;8=6:0ZG%/0E`@[+(<CDZ!&GQV<LNCZ"D[KTZ: ++MW=!;2H[+RSGMU407),2_2.O;LK4'?M<LF0UT[`U)%=+Y.JPZLRN%W>UC$52+ ++M<##OD'"Z-:TTVL-PE+LNE09N23"J2(I\O<#M+.KJ"%D'A7V,+RUTHHC<T.3K ++M3Z0XVZ\[!D`Z`@@HN$V#5R[*J@Q&1T5G@,-=0L`RB]`TH,$"FAL;ZCE#`P09 ++MW#BY=BBZ4A\RH@D@FZL$[9G3-3K+#9QH'@+(Z2U;9+<!5>30B@)5.:?>%@_Z ++M.@2!HY()!()"%"@P1OE[3?:.]3UW(X[L4Y@P4ZKADC94V>@)!.RH552,`7J` ++MDD-"O&[V6$.4-FV0Z9O_573"04D+,;O77\5D\J3_;GAW%!>7FPP,'"X#*=&J ++M)N$UQ&7<:ZATC8.R;IH:BFBU.UE5P7:A&(L/,N@@\Z6`_$^P)I,\/7-2)MRH ++M9=EFNFJ;&W$#6%G+*=Y6S'.RD;T`YOC.:],UF^I#]Q^?]L%_MOTG0DJ0T)Y# ++MCZOK,$#]X(WI]F'GNW,^($]&&/(,`@\!0,>5NF`8,>/]?T_4_%&3&5D^GG&& ++M^-PC%B/TT\=P2%\B+51<B`RDZ-D986@2#.-X#C$TR"AF^D6)X^R'W0G,^D#B ++M%&I2HJ(TBQ"E&R@LDY10!>;8>,L(S#RH']_2NOL8^,<^B&&O>VWOE;0]+G-M ++M:_O"#;Z.<VB;_$9_VG\OIC\P/]$D>QX/V(?LSYK\E\I_VG\'Y%',3^D`E(8^ ++M"R?TC_G6%#$WT?ZD3ZE>G`=$6LY(TH4O<CDE&B>3GUQ3<O5N31"T&6$I4(<0 ++M>-E;YPPVS==\I9;0.3:&P/EO@S(PNSDI,AN1<E'AH.N]'T_W!/77J%]GJ/K' ++M=(CD%2L!M<EE405RK"54#O/U--44'?NO0%$<C11!DAM8I\/+MH.9PH@C@Z8+ ++M/K]D;0T:*CG=`!!`R5DHN-$#H$3J1T.2:Y^*YR"0;\FYL+VZ8'9T2.5WQ'+Q ++M1?&&<>)Z5W-!7JK<[\,P*R'K@H$T@0$7=FR-U5(#K+4-WH<OAFT.V:<Q#;/W ++M:[:<8TO''L;>Q)W'A0DG<B"-\KB>D@"K4=1KFZXQSJ-\HQNUD@=*6Z4&*S#\ ++M:%`II25XI,]7R-:@GH<,L9<=",G8F"SNB2-E.5%R&,,(&=]@ES`+C<A2`Y0? ++MO#`1X1'&;E'':(G:1QQ)%PP[9J=H;(N(%'#XJL8UC59,OA2!@X=7AAJ,2^0O ++M-89Q@.\C??.L1BFV<,AO2L&-7.A)<@*B!<!._CVY[@)D`%,D)T`3V!4&X(1J ++MJ$HF'],-AB1[X"9(?48/CW`%4;]$(9C.+(%ZC-N8)_LL,P9T/?`^B14:ML@B ++M*N'^SX"@\&3A/:/L(JB_LC!?ULGZG\/ZXPBJ^S#/49%>YX4V'?Y&?(?]^7=S ++M\D^?W:]>SP.T]P?`#Y)-"+`3R-\U('5*4(/2!I-@."8`]J8!1%ZJ`J:\!V;A ++M,C(1-=CA`B3(`Z%/^K!^18O0'!!/8A4T$/B+'=T&4(_EE-?@>?H@")X^O7H] ++MWGMT/>9P[$@L9"'9TBJ>X>MHM@E&V"5K>6Q7+A-KC_+F`R<1\=)$'ZXQF@\7 ++MB!TFNF\=:K3@G;H$_YV0`Y/AV^](>>L*6R@AP$ZSN@_90JLV?7S`R1%'26HM ++MY]]TS453BF.-MF4"Y1YNM3+CE6(:HMF98&TE2=WCV>[#UXL.IV\3Q*!VGV=+ ++M+"9.#>I??\#?R_MTB9^Q.+H3520)F>IAML,`AJ,L/4!Y($3KUC2=`5=Z"<C; ++M(#`I[*F@QUOV"B^W1ZIAJGZV!Z:*::>E-:X-ZR#^9,3L<;PT':AF=;E9U-49 ++MU2PZ#I,0TG9#:2B<HL#T0K/$WFX&S-FYP=7H);:'74AOA!183D*>IH_.3`^, ++M4/!^"$\2>9HL/I19(<'M#^OOSTX14#N:YGN$A[9)["0^EP'UI]GRJ>X0\9Y[ ++M4@=-EUMS1[WV,Z=JZ>@<X.YD.8P['@DA0Q@OCC20@SB5,K@^#IY6I*9(2>&# ++M("?AAD,APJ%@^CV6XNWOZ<<UH;0VPZ]-X1ZV]B5=,]'GK;X(U&!SVIB)Y2=/ ++M&G#R\IOQP86]N1221:VP"[J!9$D(F"2BE%+%+XECN\ZX[;Y:QL48V?7"B.=F ++M8C8BRY?94R5;A@YX0="$7J]EW=87U>7;.N<X9KC#$[VF(5D]-E`X)[!\24R1 ++M#]-X)\2:!U$PQ`57)RU!S7L8^13W(I")6*@8:J6J#Y^=^>Z*+G?2"<T<2\)_ ++MJ@*7J#B)S6ESO\<:/&OB_9X##OI;T9]TNY2^PL#J//_2?,^@^@+09"QG^A(5 ++M-AQZ3K\\-?19)\Q6`H;M*^RYE8<)4]]NF8GL]:8@*<,X>(]$4]J&)I#MYL"D ++MG8[WQU1.H(#`,!(*P&R&"((8>4ZKC@H2,+A)L<!Q'G$5&^4"5M@^3LP];*F5 ++M(/ZB1Z%8@ERS=$&Q("!\#1BH$9A=N6YT^)7I#<<Z9)V*?'0QGUBG).`N&Q+# ++ML9YB.M00A1E"]LSB4TLA=^S81(O<:R"NF&JE[57Z:#FHZV-B75^P\*7.N-XQ ++MU?I@M+:#(.(W#PP?.+,5%!54:(UT='V!E@O0*,W##;+PKP#J0[`@N@1$`"]Q ++MB-3(?B4I:XLR\VPL4R5D*N'$;2`@8HB#0<N4%8F9UU%"T#W!3V!/_#7\\'T1 ++MV_L53\W%][W<,'/G%K<%:%BCC,RQ;2I;(=Y#)*&RT13W60+)OVGL#5#W>,^3 ++MO91J9;#X=J\+[</E+X0^G'2G@]ON<22H+Z9_AG01$NK,`C=;0?Q^@]8Y2J0) ++M*`%$33#"=Z!H1@D>1@/Z0D_T<74]_/;^'^4_Q;O'Z?VFF)#$'TS)@0WZ>O/S ++MFZ2>HZ#8?DF\KX/R^=/VIQH/`3[;KT<_,L#S]/VPZ189SAF2_H9?TC)Z/R8? ++M8.CUZ]@AAH2(2"!M[UHD3!/[3]^L#J62Q$$4$]UBE5AR&B("&0P7A$_MS]'U ++M6WJX\2Q@J]/S!V3RA/RR!]7N)_3^8DA"3\8'4/`]\<;\_?:3_.*L:$A6!#_0 ++MSL['?VAVP6>?\5S;0+VH>[,+<.XPJ5DEG7SDAW2'1(H*8@<"3N![A.[=10'4 ++MI0F2+6\*H`JJ2I769%S$Y36F-T>F:-!SP9485%))0G`3^O]=G!0`;_M_C^_V ++M=//&>4_Q'<$0`:`>OL.GM-R*LBD/]+"'\6&"0]Y4:?RA#_KGLGP/@?Y.>8>Z ++M?<@%]80XS^#XC/SV4941C@L'Z3CY\/`V?>T'^C\O^7O\OU?C[I[PDWR]E#W# ++M\@VNZK:/QHD,7B#\CYZ')/Z#0'_E_MH>_@/8#(=1#ME*PDN?5^G7ZOHKQ4&1 ++M91T>,(G3"_KI3,*\J8N*Q&88Y65_IM4$2&OIHT:-@(B\3W3?&5%41)-[@B,6 ++MO]N?]O$C:"BEM3`M)0)2D]]ZJNP#]0?708CM0S@P/PG<_?Q-\D4%_<SKE4]_ ++MZ+[O.Y/JU(>U:D_S;S^#&$I12?KL*5@6MWM\T(/P_HO^/P#_3YVB=?V>79K\ ++M32:5+YDN2'<X"+%`PIY,*049(+!1$/%N?=(=DIX^_W*)/4@_HD!=$`<A'Q". ++MH4_:2HF2"-``>8!?Z_.!,/8#V>L<$Y04_69K`Z,ZC$X['M\Y.X71+.J8%Z@7 ++MR*JOW\3XJG_2?GV!Y[G64LKYM3*1110M]<R.`MJUAIA)#WY\&.NN_4P03,4P ++M?)^9W#3'1)(]KUWVG]F:7V+??LCX2!/4D4$R%!3%0'H[D'$X>BCXVKY\R00< ++M1_+3H6K]8<7VFJ*\J'Z(3[#M>X*#R<PU_2/R?PA!]K^O2#]*!ZEU<OWCO=_[ ++M#C^/U.(04C^?]^-'X8;?W8)UNXPC^<6!Y/*>?J_-]\/S9,R@M23B1<DK$15% ++MI+Q74R7C=E8DDAKR[K-4TT3(E)MXJ=R,L+EQ%N=W<TW0\1N%7EXKF)!LGREF ++MG6K:*)C*&:A)WN3W!D6W`#Q"AI#S;%AS)!9.*8B+/`:A_=4%+-:AO+_*7;:3 ++M8EKX_S4"FUC;%DT2&JC5#S6\M%:_?F]5\G^JMMK#1M,J!I(MHU8V,1&QHU)1 ++MHBQ1BV1*L;,VC1HV(LPJDBHJHMB-%&3:L6"C6R9-8QJ(J"8B2D&@I$H%-D(8 ++M:/2!]L]W1@_B5\/0@OM("2D@,2+0TJI\1%Z'X3O$=*%\*?YW%+",%%*^:5@J ++MQ3"X9B(Y1`4FDD)B&@JHL33@;"_)#-B@-TX8CK)>9/?GN]=KY;?.K`&+24G0 ++M9C%%10=Z`77?OU;/#V<XAB4_;?4VJ::H,EC,!#,R*H:&)`-]<#S!U]7I3[M@ ++M=:&3])U[G9WCU$G(PE@('NV!QH18CA_S9GZJ<D/UA&NSXU/V?K^]88Y_?'^1 ++MA#P4H_X_MD_8S_PA=G8X*?>_]R.!V^Y/\F;$";!(RTT^0?ZD'^3K[\5`OX?: ++M_D1;0<!'"(VZK91<V9M`@:;CA^+A4!$'^=_FS@`'$XXI%_48X"ZQ#4B4M`?T ++M7\4D%_OOTD/7'L:#2^_\V)^-\X[/S`6/_.WE'R)Z[#^A[Z\,5'RG'^[I%QH# ++M0/E'^!Z8.88Q,7GSPS[/NG?R^FD(@V9IA)`\_0D))%&RPB`!*(@=!(]XG<;0 ++M@P$W/E^S1[-8V4_!GG%HE(0#)2"V0:];='XZ-FRL4=T*@>F>Q[G\/$#P*$CH ++M]"'N0(^GQF>'8E)X=TJ-SQFIK2&O4A<.GXN[[G#,%Y_AV;"33DI2R778>$^W ++M[O:\P)UY!@G-(=H'N^</FPV'I-0H,O=-DQ*9AL5M\Z+%;M7[>835".DH7?>& ++MD_2OA!U)Y@B4I@L4@LDIGWRGQ#_1N=I/!X]T3N>/?F9WV:/C\/?[W0O\)5B] ++MYQ$E@5`@Z7^X^WS'.K#'<@'3KN$Y3`QBRU++%!.OTV4EHQ9@R092,8LF*C,H ++MM%L*QBF'BW)_/[:NFBBL5"R$J0E0QE.F$RW)];[@Y*&K#X3X^]1'W!^KU]#U ++MB+(OI[.__*2&5/WI1A.3U\PG_9(&_X9\RUW-]0-?=]R(@"`7V8O_-4I,3&RV ++M1:NAL6!?B5M:E;0I\3]]Y<!/GH#9$!(]/X<^`#>*#Y^9=++HZZ`^'J4'?Y5E ++M5FO8E'%2JQ&!+A/<0B,0A(4H/`B#15UR9KZIG.':^R*.?WU;XO=^B5UTDR>R ++M[.WSN<,3I.Z*5*/>[;D.44:;KK(S$2[,[-U:0S4_6:3506SR.C]!A)!V)1^9 ++M*LC[`M*N&X5I(@IH\0B@@@.M%N-V:I4)T?;(>5A9<`7EFP1SH2G7$(:/9L<4 ++M&;8<EH=2,!46$*RN(EG-F1"(.%'*D3UJ+2$(XV"OGMTZ0TGBATXWS468'+-Q ++M('._,#C"Y.[J-`HC@CF5&3/4JETH22)(`E]V%%>[&[X=FPYG!Y/Y\X/[)/[O ++M7DY!0?,AAMO7P'H_46-^C]Y]13ZD_ILO=$5!15(/A-2D8L1X#,7W3R?PT'!@ ++MY+16,8,@T-!,'^2<BOS]1$GR_FX\+!'T=R;AK=UFC#-`CS=EPQ'*-F<69K6% ++M#/V<9^C9OJFIUC0S"AP*5_E:=W@#<'TN`(EJ`D+%`++8FL-"U(MWFC<C]?\! ++M]8N/:7W`Z#]8=(?C%),&U%H3)6*+;^97*"HBT6+9FQJC7+<M4FU%C6C5)L6D ++M9J(QK1$/O!D4-([3VD_,T?MOU^>O!BA#^X/)R'Z_!^UAUP/>>0^LD/U((%]I ++MU3L>X"3`)>:HM"D4DE<W-BBDIK)M,DI?T5MWIRE-AX=KF2AHPS<MRQM(V*7K ++M=2B&DGR/$\I/<A^`>_[73[0T?S?$H>_?$Z3XR<<F.H@-:`?0%$DI/7T`#G`I ++MR"0%21CP.P&475=<^/B[_"1[S`/IX<7WO6\;>][5WO#S!RPG44ZGH>L]@?!# ++M-*@N6B"$H7Q.#L\?Y#$[?"?X)1I0"E/LA_)#^VPXI2=80E^1WL.3XHI)E]\] ++MYL0]_J-]%5YS#0BAFX>_H=CH8?%-JS;<[>?!]WO#@[?-[(QHG;*&+&YK,5!T ++M'YW/;2]87V^H<].<0T6)]?YS`G=D1.6#%('Z!`Q,LJ%;:3E`K,(T&*`(,GOG ++MP/A+/T6'C(4_B?R]F_V["!^B#""@L"?2A6$%8(`L6`H0L22!]OQ^/?G[VST& ++M'<^H]WFR'O]*LZF6:VEV[2:=.D(7+)6&Q74'%&?OI1&W@^F=@WRZW7FG1UJ@ ++M;V9DJHZ]^SK_;P3*I]QDHCS_C]BR*+!5)`6%FCT^L`6D(E"CVE'!!8$\ACP; ++M0=[(L,#AF\.MEF/"0F'&`]41BR8LD3BG/+)=XSDP?'51UR2>T+UC'+*];06T ++M-E\!K9@3]W-^>@A1@H?$8N0#T85"`HK*BK^<='XTW/>:^<R<[I'>7>J*X,DJ ++MH+SM=F6)>G:?BK3HRE>^.`X[<^.-J+Y37MO*8:;)&*E2T6A>^W%%CQWC=G[+ ++MNM%/2G&*61WQK1J.L<ZNEF6FBDFT9#5%!=\3W4<_D5P-_Z7'[>#'L':?`*L_ ++MB0:-C.?\^&V4;V5W]>76/Z_O9J\;(_?95R)0YF>J<7LEZ&^K)RAV36$3<$XB ++M$@/9ADHTCC![F8&]&]RMI#TSZH_'5PZSWVRS3%6*-A82@@<088Y%*5LWDN0M ++MB<,HYQ2E;.[*AH9RXQ<WFIF43632+!LD^E,K3*6"C_"AF4&V(6MK6A46/-AB ++M80E*V\Y<RF(?K?2?GYD^`>_V.S\6?/X&U'RSM>;<8^;[4TZ1&""1%K%/T:XZ ++MG^/8?=VH>C[((G\R#$9T#^![@>3X#$'[YB]N#HS%473IDH,17(330^<MQQQ* ++M50+E)1BF.9*N4OV3MZ#VF7>M9.4D&(4?X2P,'XT-IOPBGJ,C80[AI^'/A3^@ ++M_/V/7>&,#$P,@?E8R1'E3Z0+[@D>\.]+\\/!&CX?TOF>UY]A]F<"XN:/2M6U ++MVR$"!IO296BT%!0<HIZ'WWZ&;04^!?GRH70*6T]OD?:>^-39U]\=]I,OP?4/ ++M$H?8<3[3I9I6X/<[R4L@1@@']@P^6BJA%52?R^=S)Y=W#?R3B;8D/YF\8TFA ++M1G%A4$`02V39,"BBCJ@2HJ/!A26U8ZH9K<R&HPPM(6-!QYI/QT.*KU(]1(A0 ++ME$22CJ5*'E0T-K%#4)\#YS7S+07SS\0'I!/DNA(,'*A*DOH'D/+_E4ZXQ9;2 ++MR@*'ML"R",C!E$+((6_C'C^RQ7]^"ZPN,1MA@)9*CHU5)"H>T[6$J#,+4KIC ++M2005('S#<%#DAZP?I-%$03:1B@^Y`($^Y<`[O*N[5(+&#GD^OX?CL]X_/U%B ++M%D)$?Z:26L@<3>_X=/_S:BNB8%@'C:][FWVC&%0<3Q+PI@V6_^;5D$LBK"%H ++MP?\546-0LM*PC2AWZ/C_+F%^>FFF9$#.A<N3G98H=[;@4K[*H.%$FI76EH.H ++MI[5A&9O;F]]>CE:F]9AQAZ`?!/8^>F*#Q'1)3;M#<3\`(B]=;8WCEF.9E$11 ++MBMMWUT8JY=8\RY;ADL4M+8#;0K=FKOYK3YY<3"`B^.S.]W1&>^-_D@<]2(+& ++M`O1^^`AD2?/]33(2%SW8GW]WCUU@%4-^LQ\=K[HBLD_82:G'66?="&`63W%K ++M^L&P;O//6!U"'1%MD"0_Q0F2L=?58'^""R?4\$B"W3G6$11T+4LH66-M4HP: ++M,6ZFLTDY8;=36#;&M*I44BRA&C6E=]E5),\\[IS`WOIYU\N<^OT-FC1!@LD# ++MVM$!$C:80YGM/O#Z>QW/=ZYH^NF)Q;(49J%H8EP19;<.AHP8&).PEWJX".)4 ++M>LDV?=0[>T0809UYS$1&P;C`"!6@<$_J];,(-$^Z)TNTMNQ>D-L%]KY#VSMZ ++M#A'2]QS'24:4#B!='2FB`D*-G$E*93F!VH3(2/0LP`AGU")D6\@ZF?#)2G4_ ++M:=_[P\`2&GIHG4%&,5%5(+#=C$A302S5+1)1AI=YJ%/F%F'Z]]=UQ8T$NZZ2 ++M9W=F)SI#[/LTP2'YF.4=%'JZF1/R50%UVI(36DTHL(OV5>N:+V9]J&F5ACCM ++M^6S2CJZ&BM:6*J;MBK)MA4AZ5>EJZM?NMDR9-B-$(3E!<M'$HX@Q3&JKE/[; ++MWQ9!4I+KG?X1PJBH#)<U;S%$'I$WK.*:\^EQ(=GCG5Q&]MX!@[HM!$4NT`.= ++M,(FBXP*E4`8PD20BO1ACS]XVT9Z((H?PI@D!`3UY4A")ISSMB.GX9@W%7,NZ ++M%&&FLLXF4IERVFY,N%D4*K^00V*P`H@@D>_:W_/<'?D5/>/L4S'%Z88F#.6& ++MT-.APF.2<(1H-Z(K#*$,EDDQ`G"2O/Q6$(GS`56F(4YF5-Y3C1DYT5$0.'FY ++MK-"AI6(D65*S2+F89)B40%#!,:W=(O:\.5V[#@EHWF^W1L-XF:(='_?^$G#Y ++MCP=?NP8_@SKWNA&:3^&=^2PJ)."J-SIJ/12BAK=C<R'CBF:I1BJ!PQFMES63 ++M`_E8S1NR.2K9BDO]&3/B-&]!K&5.TW;]5/9OTXYF^F^_<FB7,,N,$N#FYQ#9 ++MWF3];"]T4^&I:?\P_1#IU@>%$[`GH3OMP6-&")X,E%S+3*%*-L-8Z9:D`RB$ ++MP@QQ.E0-FY!W+._Z$T?]IULTCBC2@.'0X8*8N'1J-5O>PTD40+2B6L7(PD<@ ++M'<"4KD(4KDE;S`"MX8AM4P:R7*$4(4U:CJZF75*"XRLQU&`Q@+C`H0="9ED* ++MF&FE-:N!VY+J0WN8$&!8@.4.1EQ+S6(HR<1P(P#1^/,2E694#<9NYI'<*52" ++M.];Q00!`,))(I_1F4+ME<>$Y!2[G)J*`U!D2`@P+^7J=]/M#$P)Z#R^X9W,L ++MY@'()$5CL+"[5TB\T-,>:,_E_GYZV>3RZ]IAD#B_GRH>I99^C_?\^/2`=9W> ++M\I4`['PH/*E*!5@JI$DGV(4,E5IE:TA*5;G-HC8VQ6W\H,48[_7.M!BB:81C ++M#4_;^DU'])Q6.+#VN'=PP6%-9<&@;9N!3[2,FIY%4=_">=(\@V!LL1_2?&,@ ++M?AF"]Q,0]]!W&^;"6=.$E4-@/S!^0Q4I'](F)\$*O[CY'GHW$$>&#&)^9+K6 ++M8QMR-!6C5&-3K6?SQ/HGYH2_3Y(6'#])2PJ*PAG4.WE^W5^0DFT`4]HR\%A" ++ML4K#.*0QDU:35L*@;9/]/-)@Z9#!&X&<!HM@?,C%383)M31D:K9B*8D!A-8C ++M!"Z64!3)%L)*(#DIRU!F)A*4&Q5(<DDB(J+4XZE*9D`A"F0`9'.]F+'5FTML ++MR,QHFTMH4&"E$HDC!1Q*!DLC3',9<@$(4E;!&S"4J$R2?8&!F[<IA@G;!NI! ++M$ZY8ALA74%H,"M*BYFY1C:9F=:Q#-2:-0M`TK,,\,Q-"X21O.6J&TLEHR9U_ ++M9F1-WW]9^YCNT\^8CXN1.SP"'SD/J_L^T/RGZQ]2?ZI0'4E4`4FC1BJ(Q7]H ++MXN_H>+MW<HUS]]*FOZMIF4]G]@KOLZ8<HJQ13CP%GA`F,GR9!>Z3,L#A"3HR ++MO>TN50BU)DIEHL]:_`?0\5ZJ#V[,Z\X^HX=M$[87;)4X&04Y>#>MV>'8;9TV ++M7@'T=Y>HGET\7MAP93P%W@3;63RSA`WO6]10_VH'+@('=\,`,8(UC$1#E#$% ++M`>G?.D[%'7/!I$?VEK4/5?'GR1P*%CT4^Q'19U[-DM*A$5$V8C!4,@(7R`3O ++M].3?#%.0.@1>\_[?VZ#00^1T/;^B>Z7]%OX!289+!?R(Q-!:Q,')&S$'5AF( ++MS(:C0)&D-8X0T@Q*'\SCS7D/2KO59F@3U"_?'LDB/1R>@`X;#^K2=G?W_AP^ ++MU%;[T2A3)`B`Q)AD"F0ET'8&O\;]W@I:I7W0_:7R$4A<"5`P@18)H;^MR@\) ++M'S_D",%/'C80`^D/:'S_K"<OD]'^))_6D)(DB!5(T4"4(^4#[@8)/JCA()&8 ++M>WF?[D0//T+!>?(.OVMY`^C?L5'GX_.O'8?:D?9,6>$^<`=24+^Q(G^Y$5D. ++MD]YF[L"*(H"]B?R-"[TF>\]$B?YB0:$"($H8E#NS[0!\$B_DI#GW&#,-(9.2 ++ME-`,AUM)"MPK:*-LNDBV`OW3T/>BS0'(>X*7J"B]_WD!H3CO$IH3A+$AT?KP ++MU)^,]'2?`?#'^P$TD$GY`P!=&R=I>*6/UT\./9)3BV+V_\L3KU"@?)^$#,TE ++M!SPI%"_RUL.CP*I\I:2E3[?EM]2+J5,C]/]L"HOAQ$1C%JP1&$RDP:Q-UO]/ ++MT5D=H_$'Z?+)?U2YXQ#_>(B(HI"2A`HK#W8>9Z''UR*$E2L*T2!9]/=04+Y* ++M?YOG@120$GGV]^U\>C?,D](G;X"01&"H@L5G'(![2_T:AY^#43J6'9*VB9U" ++M&@D4/F^\4UP#O502E.-!2345,LO/TF&TT.V]$XR-AT<M8+.FN-'/(TX$6(H1 ++M1!$=3-71R<MD<FR6%RIRU04QYR5_%A>*%!%/3C.AHYG!M>C54@Q&:9X*3T^M ++M$ZG5%;P?.'^5Y)E@L*R6$$*%L"L2QM#G3Q1VA\E^9%8(G_1_3^+[H^TGY>WS ++M@^@E1?'/;V2'%LGZ!K-^MX>!W/8`'1`)U.-VDL6?-G9-?>V2<3RP?H;,+ZY3 ++MW0`U*C^%]T*ZM7Q!YJ$(-\^J?>\GZF31$4LT1!LIJ]?/T_J0\_M5/^9)"(H& ++M2BI$BJG^0'[OE"2T_!GP?2M_0K7A*Y<NFDZ;<4BSN<7T.C\(DOQS0_F[P5_C ++M$T15+0(PQ!!0@!S[A'5/C]_DZ^I#5L_F];'!6[<\P@'YH2!^1U['-GC^BA[4 ++M]2_U<$R8B*^1$\YDPJ?PWHRC[:41)V^S3O)A94(A8&S8>$&@458*L%E;HT2< ++M-/N_P^C[/M$\RI1K+B9]P]-Z3(6THJRK2G&2LPK;MM'@-:QX9.#$H$T@3+9- ++MEAW--#"M$S2T<3&%_-S/U<G\?^-/D9^)[<)?WH'T)=\9(;9"_Q)_'I3!%'^[ ++MISSTI-D(B#_9'(6Q&*@"A\TV`4*/R`4%8RB)_!0;%Z%*1@I:N/-","_S@C0N ++MQ"*/]#AR4*0:(*='GZA&`07/8`,B9MQ?40"CLR?IC`'$`'6TI!A0X'R3'5!] ++M:A/Z!+`&`Q!)[D1/TUA>?T[O=\E)8I$TF3UKCDA9[;1407L#SP!?SP\C%1GF ++MU!1[0#B0[IY"/.]^K=3FYN>:C)S."Z.`/\J*_"Z&BB"Z765Y/*<_N3G#V]'/ ++M<.S.=2>0D#Q%#R9NP-H(RB6OB<9'`Z@>F-+^<@?!&0@52>2'41Z3R!HLB'!T ++M]WNAO:'3],\14G*Q*_^7^/[-@?XV?0\B&G/Z#"BL`/SJ$:6D=PYLWO84.29` ++M<L?@#,5@`J@@@B1^9/ZY71]6'L/E[8(BL,,,GO0^Q]]+L[\'MR%,E['@K^:0 ++M/GVO]K)]#,$"C$160&0SB<CT@L]+`1OCN/I(&>FRC%[QI\"P^@]AG<U]L]Q_ ++M#^C73B]SM?(%A2"@HQ!5*8K7\+KIF6S:T9*3;YUVLQ9630V4H5ZW=G\-U*11 ++M$0N?0>L)[A>A9MQ4]_0Z`_#CEANJ=IVG[)I%ZNA^!\0N/7XF^=&'KXG&SP-U ++M[X"?0`C_"O#<''RG\FX0$$@@#9HQZQNX4$>8&Y^C.=POPV_9`?="#`0S4R#Z ++M84G^?1/Q2'R&_VX`_&1-:!%PRUI%0G-,P4FC=SNV,5V4&BY%<_K%>*R;E>#7 ++ME:=VMC7@T\\ZX9<E.UH:E9(6%0"*"K#2EN-@I--J-'CDO'-2C-HYQW5TYPPR ++M\;I%Z:\>8,S16]=TT)SFD\.\\UT;5*$").ZZ265/+M=1;QTW3I9,2F%@6:UD ++MFD%"S16):68RF,C<9AC2I,5F("RTJHLM!$A<I(H%#`84B\6P%3$TQS;@E?:M ++MD)SF][8W@9)2E('F=0O)/ZQKB3:199+`K%+:AP?=H,-,>I=QJS18I84^JTP0 ++M_V$_TL/U[/C/^=(T[)'Z8D(_!_F=JJ5B&4)_&OY/N_+B/9^X/">-/]*AQE"A ++M]YI`_3OYWR8P9;XI=<;]<MN32D4+&2(BHI'Q_EX>P_X(1ZE.8/4OXGS3XD2- ++MV*)M'1HFP3[2,DHFR<"*=+Y7G5>NQIC;VKJ4.\`I7CM:5WA,!>1SS+QG;@JH ++M,&86C(-F0I*"1#+80:Q2H8F1,C<85!ML<+$1&[M12.KI%4Q@I*,&,RY@V9C" ++MIE,%4Q@5S*6X4P"N7,N5,S+:7,N94_UB89:5)P'B!_2@*,_I`]I#^D$F]B*R ++M)_-3DZ)[S-L^/Q/@;!$1*S1]`PX1&>\]P@92L5R9U[?U4OM:+&6MIT?ES>ZK ++M7G]'A\A?LY^43-!)^9F1$T,?A&+9)CF)DU2025]"<'<)]!P.>8O0'Q8#TA2' ++M=#TX*L//'LZ]ZD.#G%'M(:9S,@C/"[\*TO68'LEA.^_AZ?WXAA<V-/@Y?,'Y ++M%_F35BRD&0-YTH7SWHB+%%'9C?AH#\!F(Q_,!@8/._QUI8W!Z\]"GI4H7_#* ++MX(RH&(-VWV`'Q]4\=X?(]L#<CS\CI?H>V$@=H'`DE`Z?T&OR_9\E.8>GJ<`= ++M>\C?DS"^[;B!2\'\Z@37>>"OU?XU_XI7D;!H>\8=\.3IV]NO3RE11"I08;;% ++M`W@8F&&A^1+FU%EH(,\:A@L<<R*C$F8!<%HA1;*R'8R5G<T/8#[90/T0_0D@ ++ME8(/8B@`PE0%BA(4#"?P;\2$/98GH&$]/9P=#Y#/8$AY-IU-!]H'2?2<>YZ9 ++M>)"7+Y/:![HIS)`_.7RCLM@R8A_$E0UK$V$N%@0)CF.B0U--44C24F0:94QA ++M%BED1$<+`I4E6%0$]L#4(:("UIR399."1)$S2XC*6TP+D`<+*HRM5-6>SH`! ++MZC#Y_(VE20-^F'Y:69;CZ79)Z/)AB.0%&:,@Y"I<,<0M1MRY*5N&%DPF629C ++M4C@PMPS,2B;C4U;$"M!01$&(9A_OT>IJ>P3?/Y[/WY-:Y-[_.PCX+74B3%#\ ++M&^QHV&3!"%U\RN*Q<!AL,1'Q\'ME2;+-Z:.V^!`TH)05TXR[EY@?[74(C%$T ++M1W'$]R=8Y86>A]%O2EM]VS1IZCRJ[?3)4X3G&SIDZ-XN]XS)/<GHA=3T:[19 ++M:W18VWW-9S74,-WJTN&0.S_F;K1GCY>DDA\056+&1?5G/U)9#76W$*XE1$BP ++M,0ZL8J_&6TZW,!8I72V<6YC4WK&+K.C?ZY[_;;]>W^<#U0U9(B_FOYM0<ILT ++M:@25"&V!*FT*R'3V>??\;;X/'0$%X&^W-:Y#A8BK9[8/<,(-%Y#,6`9"P*J" ++M"P*278=T4.\[U2$"I4>.E1TVCJJ*2-URJL*P.E8VQ<\PUJ3A_V%,_Z_&W&+& ++M1L_W_6YJ$&^!B+.W7EY(@6`+**%!P53H1EG#*%7<5AH$8T`&(0.4"(%WF&*9 ++M67.&3O&]9D2TAU"N12N1AX9F[R-21AG([\*(54DDCE@EC9=9L(?`8`H%LJ@: ++M>,+M32F]=!78-R*H5+<&6Q>.Q<H8=@57`N.)&)?&$BC8+SMM&!P,7LJ@!]U' ++M`[U<['=EQA-Y5BQ'<4#:(V%'F!V&%$'/KAF`OT*;_3^+X=B(H$=//22#$"2& ++MPH8DA%4*EJ^RBME&"(D[,5FBNU]'K9(DR-X5&AHD;Y=))CAQ@=:7I.'=LPT! ++M54@E"X=CPE0.C.4]AW:IT$Z[WSK%:[1Z]\WNC"N1T+2J8;!#+>[/<49B!)QT ++M6W"WX6V-M!D9\LV2O9V#9PZLQ"\%M9CUD:!&4>"!G49+0+5<9.>`IS&A=["* ++M@2&(,DAN,:WI:WS=NJR2H"E2-'N+:>)`O:EBB[`/J1S4((F&",=`%$7"NRA9 ++ME]P1L&IDIIR^`^&19V:'+A@O??3>-;97A^$!W?3HX?EN.X#-MA7'^'1-N1WY ++M!Q\V`E(GQYZ%-CO14NHJE'7G8>[:.UP0U.IK.AW1&(DM.3?^P&VD)\RPK_T: ++M8E?Y2:B^)O70*_R*DCOF"Z[PYWBLTP'2E_20$1`!L$`(R<X5F5IY=MHTX]3< ++M87CZL='17\VG**2#H+P_W\IP?%^+VF\E!)[B[F86U#&0L&+(LY>GEL/9APBJ ++MWH?B'9ZY3,"J*;9QGGD-F\FBF^>F6GRNZ:X\B@(*F0U<*$0:,W-N3T=7L9;_ ++MGN!N,B6D+[Z&X->_YZ#N^A<@_ZOFHOV2#7Y)`GNNO]OO'ZJ^DW(>=Z#013I@ ++M;D=&CT$A1^[YPP,!&0L-F8?M9/0`TIUA#V<RS6KF!]64=##&!_T%WFR4E4\W ++MC-[B@N:IH1CIAE:O[X89UZI[$1EI[GLG=K)A;J4SB=-E-G/-XXO,ELWW.P*( ++MR(C24HEC*[AZ+-T*@<\4Q--QH*!P<"A$1!D`?@?E!N>O6N'8.[UKW4I-<TH2 ++M2GK`F^$4R8TE@6%@%-]V8X)9RX==B%>U\3[H?1WH/U?0$LVKDE"@=3R=2G1[ ++M^:+#N:+[OM.QR3F]CC7358:!?[12W]=.Y/#`XOQ-<%Q8(E9"=.-Z^GO,)@MM ++M=0NR8%F4E(L1$0.DGP^&QID#&OP9->G).8<FIHWW=33%&YC3)A=:R=CXA ++MI\OGS]GKUTT9LXP,2_Z4Q_1H?E\1'[.;\*8925%3X.+UISX4HZ-="'L.%$Q0 ++M14!21?)T8/X=Z/R(/!<ED(E4UUZ\T#.D%.>>2EED"PD$*66HS^1EP5@.RW"4 ++MO^QL_L,/VFX'55$4F8HQ?RMOX-O&=VYJ1-62,0,:),G%<')E#^?+%]:T0<WR ++M$8;AJYK'X2-R@[-S(9ZF8;,X,WQ,RXBP*%AUXDQ0*J"(5)PBRVD#=-`PSA+: ++M71P]_`QD#WB'],`<(DW#:0AR;=TD0&D\.)J*7_GPQ%SQK1A^E$Q_H?B%/CRK ++M\!^3U*_'HTQAU3')^=G%O.%B>4MM05^1J>H#LZ\AP5I">_F&L\-ZCQ@D3VA@ ++M4*)S[LUJ3VM?YF\?89#H.O\A\/&C&A-B`K$4%V9!48)Z^?<\3G#[/L']>MU$ ++MQ$T!+32;_+1H@JN(=DFI-:501101%T=:VF/>64T-5BP4A_E_&+QYI<1LZ93S ++M9`)#[.]))H>QZ89EYNL-1FVF_+^[+EUKFG.GIG\X*P%1Y0-=/!D6+M4SGNBG ++M-N87/'3,$0RBET_N86QT&%$;';2HQ`P0YH:"#_`DI.+EKB_?^MI7Z3]*<[[C ++M`#)(LQK+;;:EX"<.F*9>F0J"FVHI60IQK,8'A%"\V7U/TVOHZ?7TS)9!ZRRH ++M;[79:7<]AKRKALPO>>W\.FDWSS(%["T(:PI']6&0";XHVTAO6&0]<UK;@="H ++M+*&3!Q"+VM?74`-)3>ZL61#O@2PXFT@>[#'*>Y+.>EW::UU(;8=%?(G;I)#H ++MZUS<G]VS_7EOWMP<P:%UEQ,<H0#[8N.M+L/P7&QV8J'+UW=0:/+`[H1W];H> ++M^P(`C^KS,\`/#P0W%3=5P"T@BTLVO([^%Z<7O`]$@H<;NO;$IQ;T9G?#FFN^ ++M5X#:6\<T\]+3??"^&6O%\X:>$UD.J=!!['C/`AK.YD!())@@;\J),G)E=#AL ++M9[MA424QRQ71<+@QE_D"@Q:T+_#":]>R*,?RE8A)L^YTZ:S?/U@VQ<E#C$?! ++M_U03(A_F[]A1\,LF"^8$_JK_PH7!?."ATB]XV#!2_`!A`@='4<'%"T9(I;=` ++M4DJ023SB&3DR,*'-$.0"-VM@.7B2$!`;.+H0+M0_>ART!WIW0"<TRCM=/.U. ++M.BR,6A.E=N(<,`J@E`+Q3IR9>.-@H&)5'X&S;3S4;Z0#4H((UC*B0>DX1R^F ++M6NIWOOFC!YWX?KN'"2^#RB.X&FD,-R)78CH1AKWVM_TDTO?<J@#(#U9JGJ%' ++MH=2M"`CW8@*HEA@8;('1>0I!@PRUL<HKX<+J`0ARS;U-7V>)W]V9ZNZS@.A9 ++M/'HZLRP*B\V6"J3)^OQQY\P#WH';U6:OD#;#)/8YK\[_>\JTD2+[ITG[>PT9 ++M8$%AC@2?DAY8JO&ON\`_>J$FF`'U('@D^4^0_PC&"<),C(6@*2DB)P>LQ$4L ++M_6'X>+_+&%51C1R<*$/"<3CDYL*BGXFHTK;5BU*JHZ'IA.-T<U@/%-)C.&Q% ++M=TWA2VB.+&4U@33JPXDF=CHIH,%$.0YZWDZ;%<M]Z&T.+3#,P'S2NJ[S*^W- ++ML-Z@],ITW<.@P]J9R[SJ1YZ;D.#T9#8GGS9<Z)T[C3!G7!"7Z^#P!HC/F(WY ++M&N`AGKSO2/T\<>':XI$/C>*_2??IYZ-&WJ$]7;P:H'QY*;$ZF6%:F6R5.B3J ++M@9S9UY+TVJI9#H@'6-U97H/#B0VE&*&6PZ987*!\/63JY*K"TE#F>GI"9IA/ ++MI'(`B]0.3Z@]HU'4(\+4#[^\\SPRL19NF9/9D[L\I:B_BA^)FH>XU\GWX!*< ++M?0_A*.$G_1"'_3X,!/<D>&M9(MD7$GA_%,`61"U)_WJ,!0K5LU1K8J+:-HM8 ++MW]K`AD@A2K2A0C0K0+2B:M%C5C:Q53:D_2[I:5&$6&7Z^9TGN*%;2\H=D_M= ++M#4$W<<G9<MU)V!Y`V:ZM@[6AH9(#A]IMUF8&Q`E&@4FBF':GA.][B"^\<*,N ++M+9%-+Y]?3ZNO&NT1PS2'F"^>(94(51$$Q(+K!]C\T@B.M;BBP'L]PLYM.IWX ++MQ9>[[CX4^!.["7BQ++!RM+\Y`.)Y?H\TO-[]?&>);)AW#P:&`J"60RB"<0_N ++M48D220<D*0O&0P&DDXMZ%JHL@I:!:)**((+JASA8(K'*40=4*@LQHC>;M]7G ++M<S4O;MG8<R$7G;HE[FJTM#JU&)KBDF01RT6(<"6C9)\<,GIP'OKFO?78HY<= ++MW"*4;ZS5!.AH,$VG+BBN=/H/W!ZD/__$GW^TX['7V)V\R>;31JCJBLJLMNL, ++M,^S#9]F3[!U-5]55"Q6:*:$B&9H!JD<D<A6G)%R'4!Z)J\8VWIKFC9*C>2W* ++MQ0TM(3+10E*UM-IT?;M.<?W9]'[@?2!Y.TZ2*K:B/@]X@"D6_@)),#)-=3[3 ++MIV)R_Y!)/O`[]/IM4D4G&GY%L?E3A](Z)+[0VZ-$,B3#$E_/@=]\+Y?0Y]X< ++M!P^>(?6H2(:'D],$DB!L/#W^Q*;!2);1GO^?:]/J\<:<L#N>SILU@<UU-93F ++MF]62JUHE75QG+'5GS2NMY;F864>-7`^%:M8:+>=W!!/8@=4F(>VT=V30X5ZP ++M/!-'7/`#!EB.C+@.3>[S:F*<')S.(\/3F8"5[II(C+FXCY^]G[VJF&&"UJ(_ ++M'O[1%U!S1XD#\,)Z[]!N3UM#0U'7KS#I$.&L1.,Z^PDD*<?^__+[B&C7@/XQ ++M,2MQDAO#3J*6[AQ#XK5'VGW=AZ3Y2[YO\8'V$S/\C*W<:Z[B\_R/O7*H9C6B ++MU?IJPE_Y?M7X70P,&\SN#3KY;UL+:F3^&P_4/[B,63Z(.RJK./C_@-)_O0[3 ++M<?,@/$'Y)X/S/TA]\/XQA_?\E1/L?ND[_X([O#7^K`[>=Q"C6RUE0^B7`R_F ++MG)_M&;#W!Q$E]Q^8]'#T(&O4M?J9;WGW62"0%4@@_I"R?]HOL%?ME5/*,>^( ++M;ZFAHS])"22?[I_+4_YTG^MAX.DH(GK"#TADLM#W84G>EXS*@8W_-Q[?=3GZ ++M7G1M(I$15O;[^2']E@K^O]^8@Q'Q?/\C$_XLU&(T+,73#^#,U9%L<B0X-GM( ++M_I1M8;\Y.`BFP9GR/F:GO]2_/\;C,I<UFC(:[PAH/R^PK.2#UR5TPHDM$"I4 ++M^S8:,82VQ1?_>.1GB!QDF$-H7'L0['D^[[H@HJK#\O_U,/_D=#L&SH>$H**( ++MP5K5UV75]O-YRNNI_;M=+,(#D48H(Q%,#3<E?:Z+X-;G@^J7@V*C!IZ0$X2) ++MQ#W?".C7O)^P3G^S/J`T/M_AQ#8;]R(;^4I]�%A]>F%/X?W2\0&$RQQ(6` ++MHJ9N\7P^6^7VP8>L#"DV2*1K06VRMF-(P88DI5AF62[Y_N_SYN<]*GR:'7J` ++M+N!@(6*11W>UK_I@X05-0!?V><#4J]^/=YY@R<>CODIN&R4Z-3L=GMV+:]L@ ++M2=3^H/AUZFH"%!2"VBXA1@-0##U4B9`>PPVH4L9*LBE36>>_7?/*F:RM+T*W ++M9"8V$0H::1@-G9HYJ>OW?JZA#[DJKG^P`R'+(QA%ZV!9"TI_B6VB/IIAQHS> ++M)1%0G^S9$Q^J;@RR5:RVK,R!26&88%0JR#"#"VLHD_AE^EI$I#$(1*T']N.+ ++MWF/,0<I3Q(I_LO]8?9[(#]/)?V^?']AK[0-)L1A%IH`@@H>P^=2C_3Y%IIWX ++M(.H&8D200\I1)#CD+^6@S!![IB%<1<*6LNR"D^4^7\FZX^D.3^PS6E.FZ<1Z ++M<_[,G<X]CVG$G^*O]P2?AVSOV>I_IT64CA53T&#F1!(!I95^R4<@0T^`_3^@ ++M]GKG[?ON`_JOPSC$2IVPOTBFA!%WYLV!M#65FD^*&3:%52*H?M2LFW&?K=*B ++MZQON\20\\#W#J28?5YZ&C;+$-VW2PR7_8<:@#VI^Q2P?#^P@PSZR,\"12'S" ++M5O^8-?PPBF+,"(!][^_-M*B0<B"@0R)[E0B''YFX0R&U)!-IPR![E6")9SQ> ++M.NS."5L2JQ3KNZ=+ZH7"AVWI7TV0'S2"=^8G@0AY>`-</OU5Y%HS<HGGGF0( ++M=.BIXO2Z2TX2RAN*$@I>D$F84_;Q3ML-KAEX*98L[:+K5[V\WFW[>:N'4!AV ++M(T+G#A4L%2,`[3,"!`&@8+C*J@\3I=&ASFZU$5$0]7`88D=9D.4TBJ)K5R`L ++M4VU7I2FJV4;9O#.]<.4XZ2T00K!2JJ-$G9T;&T(CZ=@V@LE.WI''O]GLAP=% ++MKU$]/Z@GL$A!0]L*'L@=^Y(0%*A"0EZ[`_D87R:4?N^U/(OM/V*'S>I/^KX] ++M?P_0B?+^)8*I]"`/KB[HB@0C/R8*;D&:3E/\SGQYA_^='Y95/^OM,F%LG_NF ++M,$!D!_Z*4/]CGF$O]__'^__5TAN?^CGW_C]_Q_\_83_]F*"LDRFLS;?OC8%. ++MVK_____________________________________________Q$0(7B?7'V`\% ++M"E$)+V``&!0H&J`#`1`D5]&.J`]:=>?9]]W/(??<YT/H`!0I;--*HIZ:G;*D ++ME[4JJH#T`![PU(36]#3;WV/27-HE[G?>WH?=]V]]G?:^=OF]*CP`VH```(+8 ++M-7D```!D`````````4T```#=@``!H`$@*``?0W9Y<@````"@```"@````$0` ++M`*`$@````````H`"@`::`?2[=P7P&7D6[;D@^`QD$*]*![N[D:`-`!30W8`: ++M`ITU!%4T:0Y,,TF)1$4:;9$1C%$@"@````````````?0``!R)```4X+4#3$) ++M4B0```@`M?&S+*E/9@#7KYT][V`V%826O`T>G76@I3(.[`'1H!10#[AY]2V' ++M75+M0?8Z',/3BZDJZVMP/2I5*C3IPBHB%45154*C2S45)$42*0#>+U0N1)I= ++M*-W@[=HSBPM?!2%)M@"@1`5`J+,-:``#T*````"J`````>@`].<"NHJ%%)*Q ++MHU457V:[95][N]J<D[8;<92-E*6AUTM[N]UQS)0ME14T;NYUNN[NT=\`1Z]L ++M]'7.W3N;EFQ=W?3/9P2+6`-KM[=TEW.=?6D%=0`-)`>=RJ?1KZ-%<``TTV%8 ++M38``!D`6FE5Y,.W9N$^3KT\5F,`!5$0``%````;W%XZYVWE\FX;[#2^]KN[, ++M`#IV[:X!VG%L38S2NA]=];T[X``[WN``.][@](@``````````!3UW8V=;SMS ++MNWDY+F9[?(&D`!+WVP`!A`-S@INYH="63[W.[LI0R]L\X8][/6[9N\\X[.^: ++MM<#U4```F$<FKELDSL[C[<KM['GL>S/.YW=O,^<<O7J`<GV-@`-)O:O7@#SU ++M[:FD`WEJJK:V=/IJJ`]]N[+LV[K;9MW=V6[C>3P=;;8`#;[@.;FL"V]P'0+S ++M1GV8DQ3MFS.W3NWEX(!U``4!-=9(7+?6YFQ-F^QT"SMG;X]H`.H```0U78#$ ++M<QM&]W=S?>7:Z\NSLS=SOO;Z^[``%?*``%`(,/:MLTB/>=X&]@>@!X`SW=YW ++MJW7'@!US&`!1D`6LO>GK-ZX[A[G>]\#H!T``"E'0`:%```$K6H`%![;;*?8= ++M\P&['KZ5]\])PBINV@]"O=BZ8'1752A7W/E455/H'W86I[`R3>WJEJQ>ZG,I ++M=`U>;+YMA/8W(5Z;MJ/3:=1V!"*;GIRV`;Y\W$7HYQYVBI/0-]COF?>[@`/? ++M8/1KP^WTZ0OGS'IJ1I[8=3C[0VP-LW=['1UT<\/;!:YJO04]]O61G;Y*%>M. ++M;'V:Y]4[AT&^7=D&@``!0``+8```!6A]'0`.A0`````?0.@`!/HR/H$H00"` ++M`0!H`(T```30#0T``(-#30!H&@#0$P(PC3`)B9,F0P3$TPFC`C08F0Q,C`F* ++M>3"!B@E-&@E(B$B8I/)BAM0:GI#Q1C0`$,U,$:#1HT::8C`3$,```09,``!, ++MF083)DR#$P$T83`33)DR:`P``$IM)(4$(0`FAI31^J&GJ/4]3U'J;U1D`::` ++M``!H`````````````````````:`````)/52)")I-%/4VF2>IH:!H:``/4T`` ++M`&@`-````````````````````&@`````!"D1"`@0!&@#0"-!J>A/4S0%-E,Q ++M&AB3`%-E-I/U4_5'M3!3R:GJ:>*?JA^5,GZ::D_4::3Q3U!Z@:>FGJ)II[2: ++MF,GHFIZ@>FD]1ZFF>IE/,J:>IM3]4_5/)H%*00E*(II-,IIH])D&(9`:'J`# ++M0!D````````:```````-``````````````_7]B,\1,:6T)AP@3"2ND7R\$!$ ++M0'$/")!*T*T29"0'/1%>S0;F0)%<S3H$7#GH*AEZ.-L^22VM+*Y/OQ\(C)_? ++M-C"OW=EG+<(E'35F+:;Y_U^:B\G71W=*L8V5$4JF?:E=_R@+B/_<F/?T9">* ++M=^<7\IMNKN7GPJL40X-=08E6TG)#LE+ZGDM<+%L_QL,N8V9`C\;W.8G'\=75 ++M!$R3+/@XP!`$MIR7".1#Q_:=CW'C?%1*-/.<E>L(I?B]-(6LDIZK;T>B:3#/ ++MR7C9(74#?]GZS8ON#;'JPSA[I'ZPQV/^-U#XT\D['SC['D=D/M_F>]I7S8!_ ++MH"'U3P^6GQ^GYL)<1D344H]<3!/3K];"BJ*@.#(%!`>*(EOP*!D)V8EL!,-G ++M(YL^\5`+7ADCND)L^L@);L$R.4BD@B#"(X4"T6,IS&::QF:<PM8KDMPC_)Q[ ++M3S^R)3M1ESVQ)T;,J0+PE::#D)IG&=`L(.5!504:<8J$H*ZZFI<TOL332A?S ++MN.K7O?4!$5P1ALE)&HD]+7=-%R"26J1"WJERTD*QU#37DU7=5'E*%>U224S] ++M?T9_1&D?WP_!$!*@A,4VB(*BV-;RU6ZFLW&KQ(C4O%I)"N0)`F*B0F0G$$$) ++M$$#GJP(PCN0G*322*<^G0IT:7$YJ=.FV3/2E+8F2F#`EM<`6PP!?2*WPOAII ++MJIFIQTVDS$JY"9R<E-))]1-!-PG$3E)Q4Y:<=.>3F)O$Y],KF)T"="G1)T>2 ++MJ=(G2IS4Z9.G3E)U"<Y-#6T='6U=7FIK;;1XF)VV3:1FVZ.0@S(*]-_^EZ'1 ++M('3E'^M%&Z.J1!!DMJ)55%E-P^F<V+)K;;0;6VU!8%5>+0)70PLAP6IK&0.4 ++M(305I#G*#'-083@'#N7E58Z=;<>0/'^_T*;73GV*$J$5;B,DS,_AG[C1[3M# ++MC\;;/SWN0_N7U?C^S[S^]>]/%_NF?WKH`/WSXN(/U_+%/[A]!Z-'Y\_FI(H= ++M($(@0-)`&0T+\Y_IG^[^GL^]_+_)^)^?(?#&98@<$F<XF>4KK21)YB0X`?6^ ++MS]CXS[`J<+*"C"=X)*!\B$`/POS/T?,\'^N?_>P3A9<P:@""6+%CHH((EQ!4 ++M!`3?UJPZD#MJJ0N<><Z`^7A^EZ-BC]T8'_^/1[7YW>^D\#HGZJ11^34!F$9F ++M49]G1FB=>7N^T/M>U[2*'ESU!_KH4\%+VOJ8'H&$JD0/02H!]?]QB&>0?8TA ++MX?(Q44^:$1*@/4^M\7SNP?"?F?DYWG?W"BGT80"@KQ1P""&C-.#C<;Y@`UU0 ++M$VZ@@:%!;$_'$]Q^-[PZ/Z'.#W0@AQ/\J%['#T#ZGCUZJJAT90$^2I@/[OVA ++MQ/1Y/T_Q]A[)>O(]A'(%1+M=7UBM`+/0":DUI02"((F;8$ON,I0LB;+*DI\@ ++M>?F&@/'WQP>-'MCI/P_6/EI>LIZQV??#ZN0$`?.`%#Z$BJ]O6=IF]Y^^^1^V ++M'GHHO2^S(H*??RBHTB@:`_;%[WTP^2'2#T0SJ".XOL.N$H((A(@6D(,A0@\` ++M8.LC0#LT,>2@XIW`3`(@#C%MD&VRK@0C=FZ5*%(:8B`)J4(DX&5NL6?62":# ++MF1$."D+8X-C*Y*FC_;5UTB&D@ICI0W6QA5$`"R"((!%*P<QA)<\.Q0QH(`[0 ++M^2)]Q/A_`3[T^K!7(OZ:?M4S]-/U0[Q05#[,JKM#]0,!7]4/X7[D/J(>=^*_ ++M?9I_%ZGRQ&==&'CVUDB<+E;W;Y0O$,_;/>YS=;CXCI\?%=,L\SI^_*_J9YZ- ++M"6>5E2$ZT#SOSX.>T*FI[]%'/4Q3L1VT6E)F=VE72M^-Z//IT[R[=QK6[P)K ++M,QJAU#19C^'\D/D_)^26]M?YR9/[_G_3/\2-<7K-TL_P#WT\ONK_-STCW"*\ ++M\WVX67O@E`M_M$'P>F!"F1Z0@G7AJ/<5&^*`E3IT/`A!#9#P2'<H>#0HG[Z$ ++M_A>7BY[F[],0AR]H\+:\(F7T)S#F:GQ[5;PQ.B%`O?RYI['6:)WDB'B/$W?% ++M#\Q)$X_"O];U7BSG==U1IHAP$T<A=G><(1YP4[LYZ3QAXTO^./'G69E`0/(' ++M3Y;]3O(H'9;TZ'CFCU%4AY$[XW>8D\D.0ZD7R9`\H[RN>WEE\OMSS'2O$Z_O ++M>9)VLOE_,=Y,GF;S""/Y0GFN9H>)\WV_C$Z,7R_,[;R%;P'F..CO&]'G)3MN ++M_^,D\[X/Q2'GGB?L=[V?1>?6'H/0MZ+T?1`>D>!X1$\*(R(\0/#=DYR(B`J0 ++M&3_9W^WI_4>$L"D%%07]O]QR)ZG]WU6?ZORFY]9*>M]<WK]KNW>P]"Q['$AB ++M7]Y_LGED]G[3]_>GM?W?I'GZ!!/X/;^X_AJ/<[HV?=?Q?Q_R4^[[KWGO7^^] ++M_ZL\M_+[R*'P/@L@?"_F^'_/NH?$^+Y'X/QO'[K-]CMOC_T?(J$_J^2R(?*\ ++MS\OR'M_F=\/XSYO?OG61$^55_7>_LD]O!/G^T9#^W^[^_]O_#AT_0^C]+F4" ++M`?XJA]/SWF_J:O^7^<G^B_5^LWUU/];8R?8W-'V>S]'_G_I*!_NNXZD^TX3Z ++M_V_N=+]V'N/O??_X^=^#<_A_%]R<3_]^/Q0X/R9!_SDH`('I501#UW_%;\OY ++MOST?H_Z_[X3T_\;_W_[T8@`;]41$`V9$3].W01/T68>3``_5_]^O;HB84_7U ++MWZ,[_3N(_A/^6\'#M7?Y?[?/_7^O]=E.L2Q^;OW_EK_S^SM_E^RE_5^O?&F, ++M>]'&^R]9-)/_OBGW_N[-_/\1NO]OE)U?ZKB`5P04!%0411$%1$)U513WT,_V ++M$T/K2`.)%%?\H@`/J2"!\T==%=#WW)LQ3;("_]F1>2'^TA'(`4X(I#WB`YA? ++MP/X7O\;$"O$N5&\)1^4DX40%*^S_W_:Y/\WCULG:RR%\QT&6&$)ADJTBX`80 ++MC8K8B&8183"IF!3C$,`#WR(<J.G37VG.<ZOK6;D(0A"$DDE@G!$)5002A4`` ++MB(BB8B4*,A%4?Y/[GZGIX3CM@`!W1_P0J'M)`J/I814\(/3(*=8!I1*`:0A: ++M0:020_GR@\*RH'_:/.?2:4[I!/#PP4`R<(?N>?^=ZOZG3E0!/<502YDRXV>` ++MFV5`0##0R"<#^_\K@-PJ?IN(->960/82N$($2B&0X3&'I/?/@/B-:\CJ?$=. ++MM%SV3(=7M3?(QWT,.97D^9[/D;$-H0R3QY=[\W.WUKD>2!Z%A(!WDJJ)_I2" ++MJ&B]$AM2@(($J&4$H!Y"5Q41$V=Z?[YH71(/!.`2(#M@'^F9@!S*JO21#PW[ ++M>GQE>L6TTO[/&A%W(Y@_C#^W!;LIZ:M(;@R3W)4!3`2'NDP$@$7U4?WC-,TT ++M'^Q9'V(%/V%7^>Y?QB^DIXSXD`B:"`#Y/R?]S[T\7A/I=/F5&?>FP4TCYGM^ ++M^:W+`&2(8D!Y$+2OS/'\?2'I@'MZ2]OW=^LE\"7XC?G:57X"5SX<03\>4.\O ++M1*]B?O`^7@IQ`?!(_@DJGMD^H;U0^N#YI/G\O_9UUS$^J2_KR$_X"$[HH7E8 ++M4A"7OA#[[U)FB04V:3C,PU[\OOR)X^4>G_=V'R4CY8WTY5[X?J7JD`\H>L/' ++M_D,0?RJD__&0YCB7X(1\Y`W?'\S%?A(^1ZG(GY1'ND"GNV?&?>:?#[&"G!]' ++MRTI\<(>DO*#Y$_ZDO_E,Q11/LQ]`GXX[I$$/22+WR('?:,0^=I!>"?APP(VF ++M?KKS^7P:%$5F08$P(JB*`PJ;%NIG:"QTMYM_TTV9]O53G\C0U-'/WUL_+LY- ++M_7U.'8ROS;6GG[KFQ0U=&?!N>5O^-++P-J?E_P;;7X7%Z+PWYLBK?<'@\3?[ ++M6]2Z@*B"\I2Z@PR`HHX007'"C5DVM.O=W.+?9^?GYEK?8-]ASMK;[?;[C5W> ++M]U];>;W8W6ZW6WW>QL;W>;G<[S=;[C[_NM]O]_P-T:..7?;O=[O=[K=;K=;C ++M8UM31R\O*RL&]WN[W6XVMK:VVVVVVVVOJZN^WV^WV^WN\W>ZW6YW^^WN]WN_ ++MW_`-OLWKVV0X%2(DB`'!%W3#(('*09",`N-U\0843ZR!OT"8R]A!35WDJ#,P ++M,S(N5P4*P\>]AF8OJ<.C6L\$+6N][(>8/]NG5/!-H;)#[!R;.[7&)R!BSBG\ ++M%ZW_SI\[LH\`]`@T_A)F%H@QD1[DT&`J+A*/=*:NY(!/_DT^&X$YR*!B0PR( ++M.``O(*"9D[&7N^'I[KAZ.?J\/A3ZVXS:_&SW:^+8U-3;9>;L596XTMCD<B7D ++M26=265HQCCUMOO.)R=MN>3QN+Q>+Q>3QN3Q^/QN/R2YK8KV>AF4:6SK;[/O; ++M[>[K)VN3LY=[:MZ&/?Z6#:V,[=9^QN<S8S][K[;=;O9VV[VM_MM]O=[NMUNM ++M_OKN\W^^W^_PZ-6?8R<NFG=9-?1W>^S<65AO8-+3S];%O=C/T=K>:&\WNKH[ ++M;?[_7WV\W&VWNUO-SO=]O-]O]]O^`1W&XQY6-"(EE0#I14.6@N-!0"`7D/^T ++M&0Q(9$'`P*DN]!A/H,%B7@EX:.@:?B/US^"H[!1_`=,>S59&CEM/J=,85]1- ++M@G"H?:CZR2B/T(5$(;Z>JQ@EFPU;Z=[^%)H4V+156JKDZ`5W<#8VV1N9JVEP ++M-]M:V=7U>#>OV^'L;W>8=7<<'-X6AHX=SN-)M[N]QK[?;<+@\/?[?A[C?\'A ++M<+></@;_@8,%&KF2Y>^T]WG9&SK8-3<9VMN<O/W.?HZV3O-?4VV/?:VINM32 ++MW&IN=QN-WL[6\W&UOMSO-[OM_P#Z:9GZ\OP]F!0>PG`ZOL$,3UI!N1^47?^] ++MY"2A$*<]D'IV(B(,`<955`#B+CX2[IP2P9,,DPW=N`;,/4_(?@4^6GUOL?1^ ++M?_B_?JJVU56NE9F9C81RHJHJF]X,Y9@@Q4,EI1,O.@.%-OM.<*7X9>1F87W\ ++M,VFV_U9:*_$DEJX!70V,K+X>SP^#;OY^UP[V+;8^!ARN-D[S/TN+OLO,W^KK ++M:VEKZ6\U-3@['`O;;>;;;\7B<'B</>:/%WW&WW&X'`-RAK,<8!:(:`^FBA@X ++M3^)5?^Y:-99$5F9/C\O`U=,QP/>O#Y`'11A"48"`:&AB!'@?>!%\S\?]+0OR ++MN@X#]OO'Q(%T%,5_53']2XELTT:&F-)II-#@=X^1'A1>=C9L,J5UAT!2'^GU ++M_2S1_9_YO]I?>_T>69LPJPQL_/YJW-8TU,'*'`O`:4;N_&MQ9KO/^J8AQN]S ++MCC@.-ZWLHI>\'SLD\!L5[=+N#!B*+C?@B=<$I2F@[^^YWW\(>(G@IV/#9WZ< ++MM1A&$'N:\@JET8>0/DN6$0)AWSW1DF2.5!0T)PW4G#KFM%SV8GVLFRS"M=03 ++M@>6[N[KF59!A"R^)CEFBX\D/\[^>4>I_UT/]U]*)T*DCMW=\%3F9F9<P,FR2 ++M<Z7N36V4[XCE-[LLK"^.!EG!PX<FZHH31K06L.;(WS&:-[9S'G+S>W66&8UF ++MLUAK(7F.S1SIP,YC:^E/]!.#XS0.X3[3];C:*'A4+V"0#V:B*,16-#@K_2)1 ++M?L?5DC6K5YJH9^]GWO&=3317IN-56KO4KH2MHD%"`,"Q@]1WQ<9FZNQHYC>5 ++M9N-2BT#S*FI!TLW<`_",X>IW).U",7O<WS2V9IO*WEW>$+B%RYP+G<#>6 ++M9Q@<E+`=Q2"5$H,K+:HP4XLJK&IB1*9$7H[#0;`^2PWQ&`9)$&2Y&61D89BQ ++MF999.1604N0G2[AZ].[CNWO5VVMTKJ"V-4$:&=\N%&KQ3>'DCW$^PUD3,&L@ ++MS):S60+0;W(TL)A4IL--0G1&(^T-3<RDB;TQF\,F*D&K>LUWRG&]FBXL#4.H ++MU(5A+29!J'*J[N^NV9VLM9IU$DA/:TH12,2$D"R0<DFNRL80D@29[0&HPQ5A ++MLN25"0CE;'#C1F\SL/KGR34#Y)":/RF0XJ1_L!D%#HG;`3$@7\-)4Q)`$\NO ++M'=XYXY[?M>'M^WX>RSP[;]7MUU\?,ZJ)YIBRD/L'%]BL!SNE/2$J#WRH'VR# ++MLDIJ3(0IA35"-,UJO7XHDTLT(3444444E9!0G2PP(JH(JHB&QHUMH-1M$7P\ ++MO?N.-QVD6S"0RS),+"0DCB#&LHX%@R1)A9A9)5)++!EE)99A)$K3V[[C+QN` ++MX#M^\@<)HH]:0YYP`>-2)$I7<D!+`ANST^CCO[^O?Z/3Y?@)]Q/O4^-.T]:M ++M53/5556KEA!00^PJ`J(*2!/2C%3G2LPYAC3PIWG54]0D&@/&H'K!!('@DB20 ++MJGE!B2OEY=_=QX].WAW?[YI"-=NG;IY=.O?KO[_`\4[D,#Q[/TYF*=$,'"IY ++MJQR"CHB.9@N*A45[X0[T[L22#HL3\4__ZU1L]L/\#[0?TG3^O-,_J88>A+J2 ++M=$D/?,5.J;0X0X5,8Y_0+MFCH&C`/?3Q#Y<TP0ZX"@I87Z9*I_++T_-3#(#\ ++MI.YZ!H#MVEC'2OFF'C*-<Q@7C<!O%[665F>B:=8>6@X#_@24QZG3`LP(OWAL ++M-^Z(;'Q\8J(P=<!*L$JWXL8F,(V&"!0`4J!]`E!1-G;KEF#\]/:.'7Z2=7%[ ++MWY%X?^-V!U:(88>4/8F'_C/68)Y>7W$Z/'`^'R_H;X0[DY.I)Z&V\&+Y'?'S ++M=<#=#'R0^PAM\.?B^;W=N1\-9^,2FOF[\'8'H@,:?D)."*@G6Y25'3+Q"JXA ++M>E)!%$QO.>EP;0TFA].D[=OR"SA';`=9QB&//Z^"*G,_?$/#)ZK$)-S\O3B= ++M^(=DZAM$_*2-L,AYIU3[Q-_]EX<2>'*:3SZ&.V]348E#>]:F'^%\UFNW>3 ++MG_=<CSAC#(>"8+KF#;H20A0'^O2T?E)QUW9RZ7SQ#O33TCC!P_U4(X8#VXQ# ++MZ[Z$_>)M4Z]<']PK]YF]_EG]?^T.`[V9"!]O'`]JQ#WC_L&GV2]U]0>7PTF( ++M6[Z)IV:3Z)[^;0D4GGFK=AVU&I66&1YHG=VI[N(8B`ZW%B'P=N$TK^3W:0_" ++MWU.NW22'V<B[HIHS,IK+",#,,,R]6"3)ERU,C-]\?WW;LR/\:?_5G^1,,?Y+ ++M5O9I_I@<?68.:$X4+=*::45!4#!:$3ZDCT@"H"B("B8DA'4Z=GAX20D5^MC@ ++MR'*3@?L;!DGZXXAOK&&V&0N@_M_W'S#?WI\4?GK].7]K&868?RPR/3_+]@F[ ++M-X:4DZ'M[.+7`/X'X/BYF-F&9F9547@&Z]C>4#)_&3_IQ,VGYJ>A,1#W?0YY ++M^UB:0]&*!0HJIJJ=6S!,HA%%#(P"N0,L#,#,HIY`=:[@Y[E[X3LR2'7H/38F ++MWR,3W="<_J[$T\XN(=_^V.CN\ZL7A]7?H=(=>]#CA#DY%R1I&0\VZTY!E0'N ++MP86=#+BAVF[Z7J%P7TED0F95R'(>`L&#L.+']9HFL/Q3#RZ!]$^V9)L7_42$ ++M_&5)4%/;(**NP>R5#R7CNT'64#^UE$[0;ME:+$J2)+&/.NF.K,[_9WOJC_T& ++M-I)_6';KB-J:\L-)_Y5P#(#^J/X8_TC1LZX=#6(%/ZD?.'U?=H]=8^D_*-,; ++M_R]&:FF_<V0ZC#(PO4U_(RG2;7S<SP<J/9)G2.E8<Z"L55Z@`YX1Q=<'ED"P ++M):!X-FA^4ZZUO,L^V11Y@?!]N_A?*XUB<)8].MPA.8^-?>'WGEL/[@>B8"?5 ++M3[Z1\G[?V_:V+4&HKX37&^$NU=#4:^;4^0KY]OE_Q_>)X=Z0#(.^Z1111`?D ++M=^:[I1Q\G*.0T]'?FD$>UF&8GK]>)M(*_/'_^T,=)'I$'%?(R,\,]%T%14S1 ++M-+`1'C1(JJ.!J4IHKN9+58GR6,].[C?J#V?[.*>WKU9C2\=NQZ]+_$#^L.D0 ++M>8^V550;_P0-^Q84C1%W"3\*/@/@N]1SE_!+!%9..C"HYPX[IXC&_2RC2\GQ ++MTV>;P"D'""1%1/)JA7XS^N_\<.'C=_^`PSF1KF+,8=_P5O^]+!OXO/7H/8?U ++M$ZH=!\;QZ;+S0^8?=`P3ZL52284WB:<5.`:BN8IG3,$7_M*DWZ!YTY";*?]) ++M*12:XH3H9"F!`<]Q>0Y\[=!AT,YDR9T,U.*1.;%J!6)LE)4_LGJ!IX=/_M'7 ++MJ[^9X9[8[,#O2?L1J'YK1F75D9E905)1<H1@9R'9+!PPK,)VNMUIRX@&_10) ++M"7S27F(0^"`,&F`)`)(#MV,UFM<:URFU4*9C:2;A)+[?Q7SS/ECDL2.4QH"D ++MH<&9E3A+[I1GW:'/![=*/&^`D(CP8K,1BR*A`:!.%*@E9FWS,(BK8`7$&L/] ++M57ULSCVX#(:M8'9M#K#UGAX8^)]4,<WL]?)U.N*6860V-!BW'!Z`Y/%V!M.T ++M-<6*H>112Y)=\B9]6&LR"H+7S&95<C*2I:Y^BVY6>Y<<F0:;^9ED./`N9/F) ++M-#3</Y^X4N)9A/#F]:NW8%]RSX,P\+/]'T^%E=MG$%<WZR?\G^R_;OR[]SOP ++M\A(P$5C\;0D^(*0@0)/8^1/IS,/VMB>TP;FB2BT'_R']S\WCCC'EM9?I:<]O ++M%W'$VW'(/<9YWY^#XA5Z$PU%.A^27YMS]8@'UCSZ.N^'Y;[ZTFP2,05A)`%P ++MDI<P"QSCT[VMW<(TZ2[X\"#C9A(8"I^>MJN)]T[N%F%GWOHVY)^)`/MF?BF' ++M;C<D?/^-QTF[[PU^S/8;TP\8H&0&K6A04?RQ/J,:9-4/3\/=)N?14A,%0^T3 ++M'N>,?49FWP._0:*H@W%@.3#+ACGK@A,K\\&Y;]/+M>1F%_EQ_`W82$K`)!\9 ++M<-6>P)5!,UF&8.!E61R88D>^1B?.PPD]>)GHN#TXH(&Y4.+#K6*`91C8+6CQ ++M0\Q4T@O]I/A],QX3V\KV%E;3`Q).W=G(L./#ACI(Z)H#EDQE>>[%<>>@&@_J ++M#`GSI!*`3274LI"&J$DGIAD!*RA)F8*<H2"O^<L.DP<'_>\7$)%X3%*II2F9 ++M))))-?%<O+V_<YTEU'GR^<O]R2NG>1'_P__+__W^`!_?#3Z#`#!F8!)"`&8> ++M4A;_0^O^C_+WF?+TG_.SYYTZ@[Z_\S_=_C]`[)\:>B3^P_MD-@^^A/M(2A+* ++M$$>P,P`A4E/[6!<4_+^5_P?Z.OYW*?J$#_(.JF(?G9@D0OT6,9"_#/L_K?ZW ++MQO)]?T8?08_]?CVG1WG%G1#'$^GY)@&0GW_^S_CZ!Y*DI]*7\Y"33"G^V?Z? ++MRITH;3Z*AZ!0D@=0_X`8J'P($KM43:*03QZ@^:<(/^/*BC]CJ>%`8:4_Q.X$ ++M!B$(0*&C..UK:"E(B4,2(0JQ*0P4;/AOYTI^=#XLO_+$_W`PZ=5%26$)5H(( ++M_O3WORNI]L_Y6K1QY!TZHC!"@T$!"2"4$1'7\3XNA9K?$3"I$$,8IA1G7^/F ++M[:9D1B8Q_BE1!$?8D<\9!$"\PAOD%'X;S.@X<]\:NBB1(D>8@5]'3G)R<D(D ++M2)PQ$2B22@E/W8.5U0^B%4$52V@X8CW_TQZ3@>>Z8D!)%0RA640%96J5&43= ++M"-CB"]V.A'+&\-\Q`W*$:%(("]0KG2*C.VD'(@10_=0>?40C=-?S/#7F[$S] ++MA\[P39^IQ_T-?M(>UN$/%)AXC;K1&)CV8Q%1%S6?,\51U8%F@8`$=!X-A!ZT ++MDD^LB`X)\H?FLKG_='XTVLB@0%J%!,,L''22C^Q6%2,'$<)[MY\W^O^/ARB! ++M!"401.U$5!`/WMRY7(GH-'[#MV"HB=,@H*(@NFBM:-UF<R[MH"Q>T@CSV'IC ++MB6H0,_V&MN_3'7Q+ZFM[-B13V*\S*0*D!04V_FAD%_JR/'./:00^C"'?]`0! ++M#+^5[<_VK(CRPB*BB,?T>YVVKZRY$D%1$M5K0:0'ZB?FJ:5T$I^:P?.^*JJJ ++MK'N42@4AD&6`8^V1O83FV4^T?_69^W(UM:QE_>M98O\"::;Q_R\[IL=7]W&1 ++MHJ3_>]W_(_H</E*(^65_\7Z[6MN96?[<!Z"%3^)^GYC;.>::8^`,$_\_9>T^ ++MBM7)^C_C^%5;50RT/EG@?`+9$L7S'M("&?K/S_.']$_^?\$N[)SGZANU>:=/ ++M.<'==V1W9.'.0B\BZ'Z?I_V_59'<#>D-7>?1BZ5_VI2`I*_.6JFF20KZ__TD ++ML)5;Q8K25ZR6,9T?H>G[[E=/T>7VO.;I><?"ZWD]7U,TM(:JJJJJJJLS*BF[ ++MV-<DLU26;,]>%:Y6N6[DMI;D;M81+BKLJ"N`W&YS4@`17@\%SMW'XWRVTJ/L ++MBJ*LG,)F1105>*5S#F0@JJK9E4Q7]W_)_F<;XS,BBB.AF?<PPO7Z^\^[^/Z? ++MQ/\I0/CZJT!0*"UA6%NHB6HST6#M/-_URDT_1C,JTC,J*JY8H,H*+11<N/-Z ++M)T"#!P96I04.CBA9W*TTX3Y'CZLDDGY'1,M/&\/E\OASD/JX@,)]7S\J70N\ ++MXS355HS.,<[C/(T!FYRJJJKSS@```>5\'WO?8=>=XN^_2]U[KVOX?EY>E^[] ++MS:2227CX=^UP7!NX<<9B4+,^OIA?]<\?PCLV%:,RJ[&.&^^S1^7XV:J*(+N[ ++MOM>O@.*BZ>CP/L_O_S3E\SJ93VT>9L=Q0'CXZ$74054\V?J=#V&]QX%ES[/9 ++MI`-PCP8'([)<PJKI*-:EEJJHGI%E6_4330(E="!(/"E46BCXS9[O_II^1WG8 ++M[!S55$7>`V'>9D3-A@_WGLWJH]7EY:V-3$;^1FF"HJJ*JE%4E)&$2@<,^W=Z ++M"]ZLB1JJ<3BDTY>O?4+&6)($(22#^3D%-+ZJ&;-O9P8"M6K2A9468&*Y&,@X ++M@$$JJ#Q\>IR;7BJT<GO>"'R.>0B"T-F/2\KOOW.<`-+U^OUWU/OP````&``5 ++MYOB^<N.ON_S3Y4\KWWEY47O>7KA33;MO)%5!54F%)"$*UE(($F7*43%F)$%" ++M>>GPZ'3X_'KVJ(*F3N[N[>ZKO/Y'.]T,^PLX/56K26$-Q++-854<EB@UG`Q` ++M:*D-NP2%-+HJJJJJ2"L+*1+%A\$(#-78-G*%>Y5DDON?32Y"S57RR2`N=117 ++M)B5CE^8C&]/.*J*"BEL5E4)T0*]=[]+(!UJJ"IZV>)F55=C1K5%1;^+U'TSO ++M[^G09JJNG];6J]7S-:3L;]_6_`P,/0@'D9JO#P9!R*LQ=9RK$9I1F06!;MQ. ++MS60BA)L9\LM--!5-,$^4QA//*'L<]R]0FD,_W2H3V]OK7?S`LP^IZKU7TWNO ++M`$ZN[W7P]WX#U^UY]]@````>W\&Y7M>O\G/+OSO/EK;HEA/DYLZ?]'CV$G/? ++MX:U5555[/9U__K:"^)[.XZOA<5F9E?OWKKMW##&?_I_JF]_.O]<G^:5B,#HK ++MT5Z7S4FZVIP00G1!`44@&K=D*Q6(`IQQD0[RI*JO/RP-'!95507[;XCL>>\C ++MC/;U9)))#]JB22$^'M[72=B]_'N^_W9T4/R*DI@9#1=.I[7M</%557EX^.]D ++MP11<\]=[^?W'K-(+N/E.&SKUZ\J+QYX&5=_?]<Z]>!.:HNXS*\CP.[>X@J@N ++M!/`Y.3_K\@\I5P>'AHW11)7)T-/:-AT,RJC"RMG^E?=_S-#]/U^'Z?I?W]DV ++M;F67GSY5))!F<-P'4</'JJQC44O2$\\\($3<4&5EX:P\I"0E1E555550`8`` ++M`]GL\KOLP+Q>YO7AACQU_&KW?H]CGFN3,JJ2JJJKO[^[U>KF*JJUV9[Y7JMZ ++MVP1>1C7(08ZRFFO$)96*EF5:&2@]CR\UDYU_ZEY[>WPW<^\C`D/(X3YI(^HL ++MAFG-/ZN&G]_X\?S^=\LS&9F9F9>NM-G]=O5_)^!60"5)55$HH>#A*"U:H("( ++M$J1[.GD[F`$TU<HQ+!"=1YY73$33!'P5555FFLV;L8__(#`R)F*U]<_`]O6H ++M][`R])Z3_AV&'7.`FIKGDUJJJA"1^/PQ@TDA*+4H/_(XFDDOA)Y'O=X>J2"M ++MWDPYREV=@>1+5K4A*@H3E53GJJJOA)99B4O($DDOAF2.,,/KY\OR'_:_\%34 ++M'A2EQ,I(`````$+J<GIZ?1+K>5[SGD"\[W?+=``!WW>+OMKVG%%/;MF@HZ>7 ++MEHV2U7D9W';-P41%SS9O\JS!`D''SXSWOHYG)(2%4S,AQ\)<D)(32GM=DPAZ ++M^O9S<X$Z(_76BR$G@C">>4/RF&@R3X+AVLDDCZ>'YKSDR<.KKMVZ^7E^-YCU ++M>L7@9D=UTZ?O=/`570/`\^QPHL%@$#&\1ZS33UJSWV3<V5UIRL5#4BTWD$>Y ++MZJQ,>O_\SA!?/SZ)KN.A[BZW4S5>/Q=YT-G%7EF56SJ:TC=W=T-')Z?3Y[ZU ++M557GR:TM>[&=),R1\***!P/$U\\.&7::7B(F@("@`@*(+B\=\%^J[T@_Q98@ ++M:$5O]/^;K_#_?^D_:G<?P3G]+_J^7^IER*R*BBJJP+'E@["P""(?R6?B>;]1 ++MZ.(EV\>$7OJ_,6?T_1N>KU\VHY7*=,BVT[,\.,@OKF90S>\B>=/3&L1#&9!W ++M9H]%I%1\C0XU^B>)_,G[MT<0`+2`J(A\109``114VV6:5Z51?1_VG[7XOM/B ++MD6HPD:T;%:*-BJBJC5%8U145HU%;&U%1:BT:BQJ-BT;%HT:-&QC1HT:-&C1H ++MT:-&C1HT:-&C1HVC1HT;&-&C1HT:-&C1HT:-&C1I-&C1HT:-&C1HT:-&C1HT ++M:-&C1L8T:-C&C1HTFC1BDI+D_93^^_P<`^A?VS?W]C_X?/6@OWLG?"I\Z`-A ++M1/J_\?/^.\0\7XGS;-X+W]RC^$R>>]FM`\5#MA4$\8B`!^0:((K\?$]RNF9L ++MWJWO6[^9]JV=2/>./;ZU"_R-<;/<]7+7A^_$C]GTZ2F:[S+B(Y5B22D"5(C( ++M*3*DDLDLB*GI?,R0BR]!_+[\ZKY2UFZ"+GP/@_S>_^=R_,'>?<RX?]-'K&Z& ++M4_3"TU>NT;;K^"]@M?&O%.4U:S=A9RLFRZ2\2>]3=`_Y$1LBL[A?N_'+:_1V ++MK6*[[O*NK746HDRUS)MP"((!NJ=I=QFY6:VS855%4%U/X.=G['W_F_U,RK3; ++MXQIGT7'/("\NL&L;\?=6[1=OQ_Q963X7DJF^U,ZQ[M[H,1=0KGT0>[1-]6!$ ++MS)QK2KA96?Q'Y"+R]FS(?/_?O7Z&KCR?@C'`D7_7\9-]?TWCO1*YG<SD\;/_ ++M@.@G=BZ*@,7#Z0\A47_W;R]]RODO5OP;)WRZ\N3O#X>R.0!]MHF3PZE;!T'1 ++MP7TMI=L:-Z!KS1%L_Z<8X\L.NS-3H/^.(JMN:QT?%Z&\M/W>DZ?AF9V72%7" ++MR('R;_7.,S/LKXI^8]6W/F>/^,]WBBA@?I9#JQK?Z5E?T0<>>#,4JB"$-HN_ ++M@TXY'@>:@=C.3&]:I=0Q7MQLV/:\_+;XF4<9U%2@JHW2"TK*DB!WLFI[X\.Y ++M<_)/74;$N2;KE\'VX<#;?!KKKW,J7Y.?Z7[C*W%G7P>3\Z;O^I]"0;=R811W ++MFN32K?!,_)(>&.V_XP\?%X6P<+^>=>9SQ(YZM9^7T<FAKMT%,IS#@])XM5;D ++M>+IZ!<SMK:M^JZ7KL5;\5/(E>-]0]>_;C&IR.EV3AY_6Y'3_#HXJN=<Z<IW_ ++M?RUG\?CWN9S<&94O]]'*[CWZJTEU95TWG2%OIB&$7=KDS+[SBL<+J8+G'B^F ++M.="39,8W1/6JMC-5W7\'7[R)#L9UMZ)5#P.*14X)X3JOO%?G?S<,.IW/6F#P ++M-9=P8LOL]+FG32K?<;O7HA%FCW1UWQT[)_(?*K>B7P\OH5@_;2L</0MO=\?? ++MMDN7=^1SPZ'I\?2<U9<[B<KO^);1MEQH=)][J+;.9U-CG=SKS89:_66%Z,UE ++M,KD#X*X['%1Y9=I9&:-9SUD4VO'R5="G/'F?$]K^%5:GOG7+CU^S[[WW(MDR ++MF/=[M</-W.1NG]&=!X?=5*W_F7)TISI%=TO.N8C/<??Z7QW:'[&7)Q:W/6>@ ++M<K4ZHQF>+[C>LSN;V?;'?3K^89&987//`:!K1NND6TXZ^'\UQ>5N<GD5="2U ++MM;D0!_N*_9=/;<SI-8GXV_?]&9>[-W))AX<BLE?7KGSR`VR!_19$#_9_R=FG ++MZC`(\!BF#]O^__3_G?]SI\W^[Z_WD#_(^W_&UE_ZMEJ*`?SB/[>10?1"Q$0H ++M4@/P_XV*GP^Y^^Z[][ZW9-#0_]S\K/+^K@@>KG#?[#\SK_I\`IR$"AT3.DF@ ++M5]>U<&B$A]D`ZKW,%3_&F.=X8::"S)F%1$$("B`F*'@U#\SQ`)1RDL_^33>V ++MPOX470::01$&>?EU5^*OMN7'.7%X\N<R-?;X)A5>&(M*M*'T?G_R/+:(];H$ ++M4?]Z'S&22$[2M1)[40LE.0)Z8_XEZN#%08GBR(18#"$&T9]"T0`__3(K]#V? ++M^S]Z56_G/PGY(Z503TC/=/O'^)E_I8GM)+_AI+B0<G-CY`*^[`+C_@8@KA]P ++M484412!Z\9&9QR#XST=^C^I7)[)8+_$*C;PG<!*3D*'VO\(Q#*@0H*%@/]?_ ++MI>V>OS+J"(+^OS'NL[BP?DIC]CLL-W3(Q\G[KX.Z^;Y%%=+PJ6@_H&?]+!V_ ++MDQ3_+F:_PQ5V6YS_=[,;E;_!1UCKD4+!(T=MEFWMQDR).MC(EFQ_U]WL69_I ++MY7^Q7]M_TH<@D^MY:IN)59IH2DJ1=*OPU>?*_G,#IC^ID2>TM>L5E2$]BY<L ++M;BKQTNU1%<FS#X,_]>9R;*/9T;4^%7TCJ8E^%G*333-$+-9_T7.T'KOV<*VA ++M@QXQC)7+>CTLQ\W_/R_7LYRLTTDK*RJT_H/`UK/:_'LDMOH6&M.?>]+Y[_V6 ++MS8OVNML4!@_2O8\KT_^.LW1JS]]%W?(QKR5YOYO%QI?2YW:V;)EH(!T?2?TG ++M2,YPYS#,P(]$$XT>L1W&/JO7^A1M#LNGDW.E'D&]ST]P_//,GZ:_K.39DL]M ++M^1(?/Y<;<O+D$P]-=DIV#(_HAPDC1V'XW(FT?G&Y]8K:M6*/&#D@JN4X-G+@ ++MMDAOSZ7:.TO&DSN`I\N"HJ*=/T^.'9*G$+W7]5'I?&_I%P<X[;M#Z*]7['?V ++M#+$69!;#C6<JH8SLF1XO)(LOD3OKB`J6<6*\_HCY<7:?>[A/[N1`N4'Q7#MV ++MG/GC3J]MM\GIR\@?24S_]/,]S7^S$:PJ$W0]$]];P''VN3MOM2>%7-ZP;U:V ++M-0H.F</KKV>P<;'_MV)=_7R)DY'9%,'H!W)^EM@\2)U<ETWYEZ4.>_ZE]H+1 ++MD&)MBII.=S?IZ+H>O[[WT<3*ID1PL_G^\BXTQN%QG_Z??TMYV5\(F,ZC(Y!9 ++MB9L_,Z&<FW/#K=XR-W##'.Z)\)<LOUSZS_LJ5%IO$Z?6[_M;D?(*9L/6XM6% ++MA8[<-1Z(CSQZS+`6M(WE590SMV5H[WE=_T[LU]3I_C?PJRLWW7^3\&*V@2OF ++M4544Z>WXZ01"RYDWPOB\@8Z'J.HQX8S3RU^Z<Y?T-/N63K<^9PO/E;C:7+(I ++MO>/W_A^JH(W$1N+W6=#2%R%U-WF&8/.;^F;O/?/>]S]UTM1X::SR8"BBITWM ++M=[H:N9-,:C<?5UG?3',.5(B^35EZL8T]/L\9$SR._WZJO7\?&?^2A)8;I.^K ++MW_P6Z(<Y3QQ,,HI7)7(Y4%.")LLX0[DQ[?W??LB,BH%4ZJYR(F";G=3#I%#K ++MQ9$!5$#ELW1F88E`7A092"+TNDW5X-?PT@0_8@[[X\;GNQ&;CO#C<NA4513I ++M^'`=;&75B+VD.%VLE2;?FY4G[7L^\/%'83W?Y>O\8:-J*>,\6W+MG,[09XHO ++M&W_9NUH&;U6:$I+DZNG'IRB<WG1;JH7Y,<_"866,5%5%-.W)MVU+"YY#<C#) ++M@%\Z*A:S?(#OK&_V.G\G6^))FF:+G97GO%Q+@J7U#R2X"X#/XGVH0(&T,(>% ++MG4>(H?K)>M!&`\OD97_&_!/\'0H)_=_0S_%@PFCZMS_L9_-_AXB"'K?Q/]CL ++M\\"B_FIN"/YQ_>^LF$Y<B"((>SBZ"N<SE<K.BYY-ZQ;%V$:EK+7.0LL9[G5: ++M+\F.;?HX"^N^S+53V?IZV1#URSVZ9[E@]:O\EWP?#Q>$T:;>?D]YE^OMYN=' ++MUO[6;Z^[J8*:<CMK<M:.OU=KD:F'2V=K0QE6R&>Y;5>]=<V2K-%5D!$].(JJ ++MJHJBHN"[FZ%^G%I9QK3YKQ<&=JK!+97NV,.QEWI8&7=OR/N:%BFM7J,F6S7Q ++M4"Y&GF$;<DE,MQIXRN9-E8IMB&Q$NQS[+RT.R<FQ)29948WSZN;J.'V)FG-+ ++M!K38Z))\.CHNR-30T),5]U^75R=FWGUM:Y@2:M<N9YACIF<V;-);S6-72EP+ ++M:%B:DBK>RRNUJ9L=>FWBLZ.3@T\_%EYVGI8<G(T]?;9VEI:>GMLW7SM/3VVS ++MK;&QL:^SKZ^OKZ^OKZ^OKZ^OKTZ!-&PFP_&1=:S-?)U+65J8M*WD:5;0U\JW ++MD9^KE:F5BU-/7S]3'IZ6MH:FQH:&AH:&AH:&AH:&ACQX\>/'CQX\>CE6<MQ< ++M%G+EUI+4)LB7(EU570D<YI)=$@/ALLNEF3.R<NO7O:#G1L49=_0GR\4^=JT5 ++MM:U$7)N3&,HM+9OY,[F7!E,\N"X,V0SC+DH)\>?4N9%86L6?-5F2XRWHW+-> ++M>Q5D:&#-M4U\R&:Z;5,BZJKHZ!E&?@T=+4RLHU(XE5;JY[.KONWV70?`QVTI ++MU(0H68U'WW&"^K:EAFTU79DN6XY69,RNM"JRTWWKLV'6D5I11I6K2ZCM,B7+ ++M650^)/6=>CJX:ILF2]4+@=55GZUC1MR&$ADZ)5#&V-QLZ:LM\JIPHT---6YK ++M72K8LUK5C*HJS\J70SGZ&IE7J<=\SEQPTC5R(F9?N5\^;&2V-9^;:+4<ERKK ++M6Z<B-?`VOE3YF<9\^AG1*C'L9=;*KEM965<IV.;1=9)+KK46A2QDT95.EL1A ++M+3:LY.1EUZ<JC2U#-TL^J-6LS7LI)WZ&7L.,S#9'+9ER;.KCPDF8UHT,%+R[ ++M)D6L>9)))51FXLJ&//S+T+UDDL7"N5UA:U;MZ2MF9MK8KU\5NJ^6+!FZVBX7 ++M6,4\F-:5U:^F8,E*L^2&D:N4XRR&LXR<W*R,5,JKLN*]O9)ZV)<0K-'4)\U7 ++MQFRI&EBK1LR9,=:1ZJZ)-KT&"C6I&S)J',ZPY5U"DNR5H2Y9G-7EO.A$*+5R ++M#:^Q4]<_0U*$A=7$LD&+5:U3H9UW#3/7MXKV9BS<B[EZ<D2[EET:.19=I09< ++MIKES#<IN6JK$9L;QLB$T^I#8MW,>7?N6-:9;,JJJW7UWV-9ME:;&@]5B6*%& ++MD4L%)8L1(Y5=TTN@\7+RZ:\:78RF;(2FFA^LL4U[MZ&9J8LC':TK]G+N8K^5 ++MFY&9@V-'8R,>SHX]73R]73TL>ECQX\>/2T-#0T-#0T-#0T-#0T-#0T+\E[2K ++MVY*;^9L5.IM9<F#0P95RS6S\.=AV,O2S,_+S]')T<[0T\W0TM#1U]34T]+2T ++MM+2TM+2TM+2TM+2TM)V9I5TO8Y,_1HFC>E&DNZ,'K9U&S<&PS/KZ&>2*FC"A ++M*^%9'/S54U&T+^E"WFYEV79NR.UC8:-A55J45R$'ORX2FR^2Z*JPGOPE6_#8 ++MD:VK%+1(SU9E^6&&J:DQ-!-=LQ9#)T'5BC28L68&DEM]3V&94CI.PH]K]%G/ ++MA&)0A132BJ***JBJ+2E5FXJJL\RC/SWS2M9!J\ZRF;&I%9'0M/FD:M,JJ.=D ++M(M]'M!'OPNKR1U#':NW(5:4'/,M:<JSBM*N4S2T+D6U59[KXB-ENUM2.&+#1 ++M4L.NX+9.S#/1T=BMEUI*Z*XU:**V*LI)+0L]0HJ*+EJD,EME4C?@N:K3T6G4 ++MZ2E3J<A9:[X)=LN5'42,^NRBRM::PI0MJ1<*YSY21HN"M@>^@'Z^@^,F1&7+ ++MKPGAKZDD\4,!>5J80S4S&H>MG8>J40-&?!'*RUQ.5*+5C2A&116I2Y4_9JGO ++M0JK6HFA8H4@K[+!6TTL:,,B[GY]?*U[MK.KX]+8L:FGD9EW#KZ.?J9.5EZV? ++MJ:N/5NW;MV[HW;MV[=NW;MV[=NW;MV[3HSYJBK86%D%S';-[1CF6,K'6QV<G ++M2S<./#GZNEFX<G'BS=+.T-/-UM31U-+4U-.S9LV;-FS9LV;%BQ8L6+#G+AU+ ++MRPNKDNBFE>N/;15GI;PT49DE%B_5?6:FXDV1!^.LMM]E8134?;62&E6DMJJD ++MD,Z^IK.H19EQ9ZU\Z<HS[-FJ2[1')62BM;TM:QCU\_(ESM2K%>R*^ML:V;D8 ++M,[,S\[,SL>CCT-3.T]?9V-76V-C6V:::::::::::::9]AUC+S<G4L956''7Q ++M;&'/V,[5Q9^KG:>1GYVEKX];'IZVCK7;MV[=NW;MV[=NW;MV[=NW;MV[HZ.> ++MC779<ZBM62UI49)&+)*T4PRR38MFQ3J95K.*:J<RY>>N>LCE2]>KK5>QU\^9 ++MV:N!T,E6CE++/7AH)A@37<BQ5&+2ZN1<RHSV,>%]RT48FLJ8,5"1T4<3J\CJ ++MYE-N.A))HWZ5EV(/;,7(HDPQ>77N6]3FW\^*DU62]4%OH:KZUFX2$BTJJQ(O ++MLIL/'*2-3+)"6Y9R72P(TOO*]Y0U"R:9:@^8@I+H5I8O5;V1DZVOJZDUI ++MLU]*G3IIP&-<.G<NWUN,PJ84=@T$6UME'CJ5EC)FJJO476TU5=1\=+3SW[:M ++M<T\@J6*M0F?8D?+),SG)K[.H]C)I0CG333RP(ZM+GR+838F+$D-DL0I,FAL" ++MR2FK,T*\)!FF19#!!]^3+<^2LA;;5>SC/VZ(0PLS,S-!=1!D;O62=3E_*<.^ ++MO\3WOJ_@_ND1-W3,Y!5#189'`B(@R#(C((N801@1&)A?'*_Y?S[]MI/J\X*` ++M?,)$03`H"'9J(@(CPXZH'@A41/6G@6VQ\0/WOK\=MS+W'Y/#SHB()_R*?L<O ++MN?W&9N_.9U`KD_^&0Z8@-YORCDA&4B]>2$?Y69S(]=7<6(P&ZS:;N<-G_.?^ ++M_7OY/]F_^%?^QZM/V9ZBKQ!9PT#*JI9XS$LA/^U-]R>1,IDY+F%KV"1*BRZO ++M-3"#+)351+&Y=L16>>[UWD+@^_BR+A1\_U/.MGL\+_I2VJJ^23/EPBG]BN4R ++M?'_*47;/-)54ZCIV$,G2TU7+5SE9LEU-B=.V[KQV_\8][U5I9Z&5E9J)@/&; ++M^EP@5]6[N;K7EWYDDA+7O5K%B!^V>'/P$O5S>2GDGG_<^M2A_*6!>NT#Q^\: ++M`O2Y79]8N5Q*1YV:,IJ_\:GTC/X[NR^I6JRSVSM1^@E?N^WUMKOIR+N#+I*# ++M6,G_P78Y./=BO#PMLFZA\176WUK+.9SNAEZ$X3(3;*K..Y9@VYP1Z#PEU79Z ++MH9BB0,,U)!=<7V?_QDGZYI^UR,0S;A^:L*%5&1-:TQ\/G[N!YAV6,1>TY)*Q ++M%V&7H>Y>_S)R/7'9ZY.'O(C;4I#`*\0V,+Q4<&B(BH-C%3;=+I4?S23=U;K8 ++MIMQ)Y?#^(R:BMX9%S>I^%L';=5LW=A5@*PO&,LZTMF5!5[UQ*>UM.MM=Q/3; ++M!=?Q.?U[<T=F8ETQNLHN%]Z2+S.NMW<(K0\7W_,.?#?]7\3X98/EF`H3:SA6 ++M4]P_"KE5^VSLG!G/]V=%CE$DD9$$2HVQU':7K9YW0)7'%TG=Q`SMX_JE/L%V ++M_SSXVXNC*<2['J]B&J++JD[AV6EP7>1-STD42UK;G'9LQMO>^;GX?\_[';2[ ++M9F5MDH**&S#L#E?S\N&`4\%C&USA8C*S!=@C$8RN@PY>9R+LQF=PZ22'DWZE ++MM^7P_C.XVYDGR_P1O"IZ#\I+KX1=UDCI57EP)D(/RA6W#&&Y'/VJN'O#<=&\ ++MYV9@GJ,6;7AR:I/NY5K>M6R[QBPJLV?%JUG$+$?,#S[9GO(3B_64Y/W]QGFZ ++MEZK9/(=YP>JP6^EGRJ*[LG`N3#F=1O(2:QOQ?$;7!)]PV2JH[FHHF8Y5YY3^ ++M0W\#H:S+>VMM:XT8[$,+_PKV%9+`O1LRJCP_L&<+^>XQ#6ZC/\4??NU[DMVU ++MI7#2@GA!NRL#]VRKV]O>CWJO-YM?@/.5ZG2*=<S[3I1;_?KW/OUXG*9>#'![ ++M&2AS%]3!DR.+=W7K<<W.(Q"[TR<I5Z56%IY_VY.91ER"\!61>"_&NC>O2U]" ++MMWDF0[M>HZ5Q1XPS7"2+J#MR2CZ]@P0%R>K-J0P8%7".01`\P)WY&3CAK^\O ++M^6[#[7^Y_P_\S^KQT2?98D,D@=P`)$%4VHE2?]W5?<Z7=?H?\'TSJO3:^0Y; ++M^K?5/^?.]6YG?RN<YCTK)M=H\4D]U:F^#(-P)WQC_O$?22JE(YJ:1[(J0I*) ++M2BB>:"BM!FF5S3JKYQB+N;+-!\RM^P?MS_.5SG??5H._(52221,F2,BU2%-7 ++M_O^16LV[M:R7?@=J^S;6XUME+=9GE?\#IXY7JCQ.N(8KN0,PM_`SGWUP6_Y/ ++MB^(9E6$LJLRLTDMSS6@5O1<1Q_I_YV!;GK5K=>OZCS5)Z>C>*M------*^PH ++MV5#MG.\BYF5_P#)K#T>!K<+XJAP.`H>]_VRSSVZU/WOI'*\OO(X)MDMDF=>] ++MME>9WIW$?4;_<?5/:^S,G\]@.(>HSW(@?SJ@&]\6,`?\8<UR((7%$\Y[_]GH ++MN3G1`_+,P>BSF]9>\^Y!+BB&X%$.:J(FQ;16-PO9[M,CH"FQ'0_N7<.+ZFFO ++M)X0]W)FZ2K>W34T^D6T+T__)O<SW5QU;4/[;2%Z'X\$ECW63?G)R?C9!D8M3 ++M"?$+Y^,Z_4W7])6.<'KVS*#*,O/$V<XV3V1_63X^S]+M;6<,,W]!(>>ZX]J; ++M?F.NF,D_>/^7)[_;R_UG:"&UTN<U_5R*QH0^'P=O`P&Z"*[@_SG[]7B9F8JK ++MA,Q*2%N2U7XQB,L([@O?FQW+@UNM2N^L&X#\/9;K[7S3>G"SYBG`O.LEFVN* ++M&?N=[.+OS(XV7]HW4@G`.MO_'-OT>;\RTQ,+S`V=:8_0<HVVWAF;6=C.JWO] ++M7DBQ]T[#K77#F[XY!O\/:PZ;4=VK>8G40V+M7-6_P&D#I,)7Q]A`$#CIW8#( ++MF=\'N!P((AG<R'19+=K.]W;Q'2D[^"X\'%A50KR,$GS*G4KW*T+IJ3J)UPOC ++ME2QX-;DWB]_&:ZWDU2TJ'P_EM\Y3YL6/&3-\ON_DN)[/G[]Z:['QF3:^/7]) ++M=FK"6<EDS\Z/]?@8$*9G-)2V7`:$<+.<MS6>/6UE8?Z[N_JQ42?)DCF9-;3T ++M+%^R,M*Y#F3^GN\ZT\-ZNLIKJ&:J8U[%2?18K*92X<.PY#*T9K6A`-1<M0,[ ++M$R:V:R:`IGJDM?/NORE2TH,*4W)VQ(\HQW5V<>CE*^'G4%BZ,&P+!V<LU?%" ++M,TTCGTF6\V7(U\WRZ=(WAF?D1_BQ^P_[&*']X@@4*,0`(H'^:@P*+ZMA`//" ++MHGVU_O\VOP-G\T+XF;EL(9WF__>OT_,.<\49LSQKG]^M?UV/\S^'^/BW7_PK ++M7[3[+..ZL67TQK6<QVC]GZ5V:_<L2DUOLK4JI1^B8?;_5.GJH0P]?X1N>W3O ++MH%^[@PG=N^,)?/N$V1+J(A:Z)U,^3THYVH<SGCYWB:1`MYF08NG\LB\R_4?H ++MZGEN-S^(^S@QY)ZWS^Y^D>B4/<;4^XR.#1CVWY2_G''.?WFOT'<E%4W9F06' ++M/EC9/U5$?Y_UJ+6UIMX?[[%3Z3.^J=SMMG:/DY4Q7KH</\65GUJ8B5A2:N=X ++M>I_@+70P(Y7P2F<H.Z=]:Y*9?H!>BSB8E_(:\V+WOB#:JM.SNB7G9M'X*U2X ++M/GJBRF!"V<WC=?@C\_0OVM&UD>GL&#GA33V-EJUP$"J]D];LT;@W#.<YWO/S ++MV"Q@5C:HP55CD\(=F'$G^?04YN3#>\(VC>^[.CK9N^,D^$^_OMK/8OF[(XK7 ++M%D+-DX/A_SVY<,G4JBX>^E%_3-/E&WL&W_LN5K4]$`V_)+^RF::.09F#A+_9 ++MMM:WPRW<+U>DW.+%IV\XP<@FVK?"O=)85F+.?<DX6)+Q=*7<RL\S6W<W9V*Z ++M\.-JY^(Q&(6N3&V/#X0?T_[Y0\R8B)/X8F$1A#_,(3`B"/\PA\@Y_\CHZJ_U ++M&5.30?GBQH3^T&`.P-TAXAR(BBGEU#RO>.=Q?&,=MW^#G*/5T'P?5VRAW,KW ++M/[Y(^2F*5X204BFZ*9O(*<OO%/$07?V*=Q!F[VWX^%SGO(VI/*>5Z&WNC%Y5 ++M;O=6[5_%R+O0Y6+NY<WG9=WO<GQFEF^6XN/=:&?YCQWF-#4[VUWNS;P=[DQE ++M737)+6#0QXTE;9Q&;)-.2LTHXEI?.L21:(T2FDLCE85\65RODEC`BBR2)++J ++M3LF=)I:6E'2GNVJ\]?#):T-"]H:%W0SL>QEX]#,FO8\>.F;5TJ-FJ73U-C5V ++M-?5IUMC8R=`N;"9Z(B'C=R./!'NSA'H-_`_:-O\V7B)Q3BGF>(<:^E`GS37X ++MHX+H(HJ((H*B#!"$_L`$B`6"D^U^PQ:-&O?W_1-FW&]`CR![Q7,RO/0O$]^J ++M//5?HM^$ZN*?:\D']=N<_S]4O(]-YV/O70:"Q;X/_;/BD#_#YU8_'_\0^>]. ++M']!RVGU5HE5;[[O$_3+-NY33(A[M?\+5R`^-F^8"FS9K<3H>PT2;B*_BPV/O ++M]%G5L\'6OST!Z;U)T-N:YXO[@_X,.JCD^WI._82TANV]-9/=?6^_Y(SDXAV6 ++ME1F<:Q75S!3_+_1J=9)%=-SN^.9E0_+Y91;':<+A;O_;>?J[G#G2U!-WQD.S ++M\#NZ[PRE1/@J'J14K]I_7O/^`?!.9Q>8.2FK3[#4U-@D3E6]8..<]M1!.J43 ++MYO[C"&PJ3*@*H)F<X]8Y/=*F^\`'*.4\."J>F%3;]/Q7`;94\LJ*J05.0*D. ++M$R9LS(FJ=%OS?JKSR&RQCWE+OD!MO2X_4'K#W1).;G6YH/0X*_UD3H+QP"%G ++MMC<(=[XIN/KG!S_Z#J?:*NNO_I8WWP9>GNF$N?H^QO]GIX)J=WL4+L,S9)N. ++MTV<GL=P;JKR!TO97UTN67O!9S/Z5N%0=;US]_U4O@ZQS.^+OBT>KK1.U]I"& ++MSLG)?KUOU;-8R^7T.^XEDZ`R^4N_*CV^W*1ZA+A_)6SSMBY`7)_$F4J[;N=] ++MM[_27S>;R[@SMN9V1)(O74\CJ%.2RNV%Q!-HZ^1V&WM1Q&]SRM0B(>R#OR@? ++M543PXKT0%';#D!RZ"IEHJ('%2+"$+-J9T__?;_!/]!?J/ZTF0']L8P_S+&:& ++M+&_^?TTSMS]"L`@(>>5`00K9WGOB>8#_E.^2*>D_9MG@9H'5"H[&4K!X=)QO ++M[TW@YYTQ[08_+_C_[\!G.1F-AG?W6O^<__#V4997D7SR9*_N>3\M9+$M'>5W ++M0(&F`>.^<IQCZ(WZ_[F#L2/1UG#T%42:0]"PCGHRBDC"V1PT<N/^7A_57F.R ++MFH%7V+(F'RV7+?'D?L_>]G[?_#^#D__DCXZ@^39&5%$]<R*H-9FGIRXNN<N) ++M-<7$YRA"#'/Z7#_L'F[1!IWGT&YHO"]AYTXC"MXT^S,<0.9\8\.\K[6CUH// ++MDBEPQ<)`B\/M?B=H?R]SV#U[EXYF[H=*LB2?9_&^$SX=B^:8ZP^4_8IS,GZL ++MN[KWSWU_]F7D1ZOM_*4]Z;U?>5+9]EWDKUYW)2_O.)>-A[OO[?_W_D_F'Z?` ++M/?(C^"):Z.X..@K?BW+9"JBJ'`4:S^;<3'L'I`'&6X00M*EF_[^]].A]W$/M ++M7MV<`^[`<DB&2!2?C:K!=2>$#D?)_JXH:.##)4P_Y]@`1!J0%4-'J7CD$^8Q ++MZ*)5QN6PJAGKTQTB\!/QJNDA0<"@_P:O*L#*^6Z?AUHF3SW"]Z\)13<YS$9N ++M/ZZ2LNCNG2F#=WMHYGE9[>HA,.9?JN/!':;=QNCH*AP>IX+&WP]'$>5%S515 ++M!05[D#:4S2)>.0_-,6Z=N\MLI8*1706F8^=)H1HJ'3S5Q;-3(6*VNA,8()1. ++M1Z>M:I)(+F*Y2%<4;>TGR!S!DQB5!19\$TI*:BC!A)3^YPF\(#"E%AS)(-_= ++MPRQ(/2M$S-;V4"(N:5UPF#++@4CL-I5V#,S1]D41B[0ZM)9JKXI*]=6+$6F: ++MB6=RED@^>+C7@55QA.T8^VXS_#\AQZ(_CU.FZ965FW)W<Z!U\Q_TIP3EJ*P% ++M@Z-C_C;C&,4WGNW',>=%C>>U/30#HZS"',.B8OI9.[Q8E5:*/$KE91.;]3B6 ++M3GWZ$!*QQ6#%B>.)SEL(_D,0%-$.1P!P7^@KR#SHOH,.%+MY>?J@0,.*EQ>@ ++M,$"`K#A3@<;C"N'BGU4\DJ\S>_:_D/[PD"C28WN[8";#HZ(\@G^9Y5$&4$43 ++ML!QV!T\(('1*`!-]J'BB4@>E/+^EI0'HAT*>`<YR-W#@]<J!Y54#\2]5M^G] ++M*]/.>[_A;;P]%5XCS'=2'?^J^=WI\GY5B9`<W:J3@J^ZP?VXF+&[>?`^>OF8 ++M*0\OY#ZLY.2*8Y7"RSK1&A4=)"5[U.I^&Z2-;W,DXI]9UO\,]$T]$M:O9M5J ++M2U7F5'#U5F^+<#TRA_!)2M>JNX_;7QO>*RJD),KOVY\GL>^\+\.V>8Z+QB`O ++MGVF_+"%?=>/D.D]'/YK/2_74L,++,PO7N2O6W+F7R#$_+G9E%5?R-V[ZS#/B ++MKG0_^=!RK`BJO:,/+S=YR'^&G8`6UX@MW'>E<.4ZDM2+2\57R??=+%DE(2N= ++M(,,_D=3(_OD?3/<[RRNFA,D42_DJZ0B0O/5ZW8,.7UL[2^'EBM6%7&I/2B34 ++M41)!2[11;KPZ5$5);'EI[D"N1!D+EFDN/.H0BU*UK%7A:0K12BI4\O?=$@I; ++MB<%]Q8"F?&LDV1=<]7DBK(N7%M/]GY&K-(DJI]Q45<`][D=IU.T@7R5J4=+K ++M,3(I7EUL,F?Q9PF7.O,#A4*ZH(G<4N^?]?;22$6)E/W&9:B&>_IXLB%U2F5I ++M5(*.9B+,[)8:#W=*][DBH)+.T>,V[F8QVV$*L^QF5K&WK2Z"I'/:Q;F=76TL ++MM3`9T6"1050*PNFMGUK"9"E*J+\I4)LV?15YZI0(#A?/+IK>?D.&[#X7#Y_F ++M<SH.C_,;=//G_/33S^?215H5J&H<=/[MF/E"'9`O\7)L#NRWWQ_AQ[B@7Q'9 ++M/2P=^[9W^69^M(>[\7S+O<N9E=?9<NC2W/$-A^Y-V*>O7G;1TR[Z,B=)1$Y/ ++M.="WE;CPG=.;.=[*3`I^OLO9=']G;>*!4OJBBBBBBBJG6L</GS,\5<_:[Y,> ++M)R]Y[H/(NZ@\0?L2OX>]-+7@R(B((@"'P"1R(.!$1`%_,_5_5VAM2@%+^R/E ++M_UN[Z?<&^@@H"E_/_\&?J\HHK7U#4J1$93<J==X=D3J#R''=I\=A)OOC`]>* ++MKU0<HB7E$H[LA]`>GOP_V$CQWG^OF*-P_<=)2GL=6$@N8O?E1ZH@#U`3<R=, ++M?6YP0$%/MPUU]+`7Q+`3O-PKC&M61?[WBPSL.DAU/FJ6B_O<)S=4A';J,*;X ++MZF>]`X_^WAK]5\3K>.XJF(6BFL]&^DF7P\`9$G_3O\I0K\#(X#.<SG?CU#^4 ++MP:H?2$G.#9F.[V9RV>4ES%337B><\I^DIXI'E>!JLFZS+>,\BHLQDF2+\P^H ++M'"Y[F&QC.WN>(/35ZY7\5`AY?_66:J<)GGS43.7X6WAJ"*ECPS'&4^I^VJ+G ++M\I_BUMXQMO@;,S5ZS;]5#F;A5WSMKND&&VR90>D#B(*D/D^0]Y^X6;671*=] ++M#G^)O_O=CN-R<LFOARFZ+MMLX-4*S:HHAS)F-(Y.P[;KP('2N[,4!#>E._/4 ++M/Y?._YU$&<YR(>C^([ZK'Q>FBB'C5#PPHB'VU0/R*<^<U@\F;J<OL-]!7*YD ++MZW\'\_U*^8O_$!9":?QO_'^&]/.G169IO*^7-PHS;Q_NC_CR/(PGMLA`Q5OA ++MK7HP^DZ='O;\#]6=$&[WGYTP<0/?C$@\Q\]FS>(^41D7*/-B7;I`M^>#T4IT ++M>?E0O0ZV.9X:2\KV*65LCMO,GG=.;<FY5?`6NPZ7J\[B6#[6=K8LDEH/N:?H ++M_W.!P+A<5?$Z.T;>KU^\\R>1])^JJT0WF_.5ZWX#C@AP.!Z##]SGCO?;9/$7 ++M*9F_:-`*_(W9Q)?.'R,>:'VNR`XF&W[C9/\-%5F56^`KGF;R[7%XQN_LX\_^ ++M\_9LV.D[;!N9.%N3/S#A[G=;_@:VM)O.!KPX.^-\R\[*]7H&;N]33U&N;2'W ++M\@%5`WJ]#TG,]N_R^W^!_ES:O86^GO=)5[ZQ.^N[\)U%W3_T^1U/><SQF?S< ++M$^'WV3@KUJ_(?FYG8-VG>]GY'?X\%%&AEXNASZ<K,L]CT.EZ;%.^_\+3NY[] ++M3M)M+1FP;O+MY3J+.MHY,-C(RM>WF/UM;''7V-;-R[I:UM"F[DT965L&O:>B ++M(<K^2#D#TZ=NV8H#(@/0)/(:<`2W'SAN*^#6AAR6VJTE]9EFFD$O:>Q@PYL0 ++MO+8]MW?^;<=-?+8X/6,T'.<K;WOSW/RYLQB,CXR233]?[*B4;<=T333VS/]S ++M/\*-LBGFL4\)XF[>]_4ECL;EW5G5/UK[L]+\CGGX?C4_2Z'H2P=Y3BS\HT.\ ++MTPKH@A_09&&Q_'1')4]]<NN]-X3M/B@_KBMTM0/0]R9PFF(.V?^E\H7OBY)' ++M;\[V*LK-TOT'C^]_-BY\S&^$:\I*J[C<.'"[?;^@Y]9)V]6KGT97*TM0ZK_Q ++M=UHG*N]'(?-_ZS$20U30X.'%GT^DS#_H,TGG--E<']=KZNK2F=8^:?5BV_-^ ++M;>V)\Q2&E#_5A?N(H2_W'\4_H?I;,X.=Q]QT*BCAQUO[76]!^ME\+^MT8-"* ++MO%>_Z[0-KYBCWQC+-]'QTWQ_X^Y*Y/11^%7>]\3VV!>"?QM[7ZS)\J>FC^;% ++MD\TXML)99>Y[\NZ\<.:V(A7515145`^5D;':+XS!(5TR1>U<_1Q%.2@?JSW: ++M\EGNG.<YVX_JJ[E9167U]>A=DHD=@7"]G.9^IB]7_=G'L?)Y:GK+NWO>IFTM ++M?XGH-G[V"UJ?R?PU5O6S?;K\6U:T]WNQG+\7N>#X1F5O9<%P[4R.5N?%_%_7 ++MJS$RKXC@>/MEX/7DA(+Y;4/7S'7>\9N7M&T_,W/)W>=JIZ=5T_DR;;;2]!G[ ++M1?P:=6\PF%O>;F&F7)3["E=$3B\+B8N)T73\_&.6ODU=(_HGYT(4FRTDTD=C ++MR\7P:-&SZ'F>.EA7D]'0^O1)6;HW<UTSJ\M+0A"6TTGI(P?"-WTC[]9^"JY/ ++M3@HE"3Q5>F%>;SY*^$(-O+-A7/&BYT6FOMZ*S>])"'I*6\C4U+61U:LT)"F< ++M>O[47*N&61G>CLS9F56>^F@\GDW[MFI8S-8?-"U?GO3P]++;L3TO=@SI=>Q1 ++MU,LSYW]="$)1SJO3.K0ABMV"-):DN/F],^Q@I=&06_4UN66BS6F=<?GU$]53 ++MF=7R[+LA80NSTUW9E!+8%MK&L^[G2=+36[[6:!1IU=^JM5[\TTU"V'*S56K; ++MY)83>):W%]?5H=I0A1+&J"O\?35"-BJ=[X1F9GS-D2L_3EDV;.9DV*FS[>33 ++M19SI)8-DSS0MQLV,4SY<B1V*37GKK":#37X;."$'QL5J]$E9[W/CGR3.C&.Q ++M:GH@L%T'75A-%:(:\:U5IU:,U99X,KW-4_8V;%,\EZ9MB>A:'MHMH6,F_<:O ++MBV,%&/4Q6*<N->R5\%:Q-<C(N*8<Y5@YG-?;!H1D-BK*BC_4,"&D*D+1>>>; ++MVWL_C;7GH'J8#ACR[Y?]XPBVT^#X3QGG\+-T;%#:-`443\\OPH6U^JI&$D]N ++M2'T/O_^O]E\6?[/^U/_<GZMIB_]D]=^#CP;2%\GDED]R820MBP,SZ&Z_Z)?[ ++M/L'?I=&]\#W?O?/AX<W&:5NF\1[CZMWL/_T9LTU[>+R1H[W5*=OM*94B:Q]? ++M=N%&;\OY=M+NK,4^F&Z]L?7YMWTGNOI^[H-GHUVVEMS7V+M7>9^0"[7:&4\5 ++M<1(<=[Q5R2T,Y1<G4L\8NW5^#Q=8S3H+&WM'_8:.E8B)]940#BBH*ON]QE.0 ++M1!'J@@!\Y400`Z-!0$03)401!/!MY7_R<\E'*^-T'!<[M/S6G#QU+FN>BB[T ++MG$?!_>=,2TU?U/Z<BO.][+-_UPW6INH"Z0;P.#[8SWZ_TSP3@Z=1*:V=V_<& ++M9$\'CT+'7_?\?5"'T?]NY^G9\%U7B_Q>[=L^]H/1_\IS.A7)9<(K+[W*XZ"K ++MF^?<'B-2=67`4';^+\C"07\"A$@5YI(9!\GZ7R3L-[[C=DOJ3VG--(\W_%T^ ++MH3&B=MC_7T7/\;Q6H:(=Q>ZGA[@Z,/P&5^DRS\E:OEH;P\U`K/-&VN]-GZ1' ++MH\DE-$T57-*DY;WJSF<[WW,GRS(Z&OPZ#Z7,,_V_XN/)_?S>B-OM?\Y%OGSW ++MQVOFN_N_R5_#X/YCI3@]=^ZAHFB+G=28PZDZDNZB<_+-HON7%R]]O3=,O3[[ ++M\!^^)GX]L5)9]OC/OE_YJ?K?XGZ2;?]\D?_$,H'[T4^/J!0$P_Y'^+I1TRO\ ++MK$Q(27^7BN(,A[7^$6(Z(*&3LA^X&3^S'_8TF@#2?=4_@*=OW&D_Z#!VB=]# ++M#Y1!P'Z+F=[.'.]M$B>+?"-YG2J-(L8R-_\YN=_T_.?!XZ:6E\NHNX$ZHY:( ++MGOT91P%$]-'0P$Z3],8:2(B'<('LT81!&$"UW1C#=^"T?8.:L\3V:"@C=GX3 ++M^^:!4Q5O4+%Z];>(?[^'02M\,])ZF?S/:_,\C6[?QOZ/E=IF?\^SX?>_+_3\ ++M;S>1D_$S;A<+IFH<NU_"@J!ZGW*&:ASRENX+X8$.08X)>-#]]R5P7,&_CXYN ++MK?]CM%=Y[/M-.33/1"%;2,U/.GVO"J+R4-8DUS>V/M/X/K-Z[H3^"W]$L;H^ ++M/8EQ'1<A"G9]_OL&!56[+SEQ-$VVV5=<ZZ;EK0S-[3D&0.S.01<NJ:_!."?@ ++M/Z>D,9U2KH:`[!F[LS=!T.6;<S<1<NM\CGCA9Z\)EJULO=D(KE%R@XQ;)/R\ ++M)#9$.R%#3DU!PB;PWGM]X\_FVNFI+W?NUWW,YOLI.GGD^IX!5IZGA]J_[AT8 ++MJ+D?Q>OS8$$5/',P,K**W3^Y;UJ>T7\,G9QDD^?":FJF$Y02>LQ-/.W^:^SN ++MY=GG+`DP9RY8K+X#UVV^CXE5;V<NJK6J:?H:49%;U'!^YI?M_JL6.)]_[7%[ ++M_O_R]Y_?UOX-SN_^\GV^5+LY>G^][;IK'2_>\1M?(_AR?D<;?]SNK9QO;][X ++MS%+OODYQD',RY3H-)S-_^^322ZQQ?FUN#-Y#D8=+5-/35<KYW^?X-<^O5NA< ++M'78%%V3<7-$V=E5=T.[D57?9-S@/,W1.>7<C;C<JONI3,W2KOR]>55VN2;XX ++M&(6Q#@'`&VSCD&Y'#J"EF9OC=#NC6P=SQ)IEY1.F(Z$M^GVMP+T=7+YX6=,! ++MW70FL6_7[;;B]*AE[TVW^:ZV[P](;<Z0Y)O9IEDW(NUN!:M^9/J/T_Q^7/A! ++MO3(V*QNL\Z39VSOF`&8BH@G..-HJNUM+H'_>MPSE5S[\O^GY?OQE/["7]?H, ++M_UL3!_HM^I8_-][6F?U(0_E?S6.HYWB^TK4U=!U;A)OM6?2_&_&][Q58SW.Y ++M?PU[_,>DDDDFGD\)/,GU:.36%/"%%/W_0]=DP_$/.X_9_'^/MCYQ3-SC]\_> ++MX_K_;;/>_4^9_WX3_KOW4?Z6['C]Y_YXN]D?U?V>1^[WO_.7KYGN.H;)_-]_ ++MRFSJZ7[>UM\7Z/?_']AYKSW@^;UW&6S^7YG1V#C?ZZ?CGMS6$5M?">V_Q469 ++M#[:<0;4\S+DJNT;?I>B6L;W2&YV@3%[0.=S-X6=(WAN-X:Y?VV<93>LO&OKJ ++MNN5MZJZ9O2GI[!_^]=*AT&R:,J;1M]I5W_`5>`<G'P<2K/OCH"\G0#TZ`K'$ ++M/#F_+W%/+!XON.JZ4W_\T-S73FFP<>X<T^<=7UG,(24K*YSG.Z85.>-[U/.. ++M<>BY)56T3F%<S^&NGRCJ3UWQ!>8?+YQUO/EDZ$ZPKF><OGA?*;<YAAZLX!P# ++MS>+3R,@Z)_(RE7G&UQN1R1;R+Q!:C;/Y1P+58YIS24W0O2\HYIRS`=)RN:JR ++MS:/!YI;Y)&Z<<N\KD)SCW)Z'V!S5SF7/YIT/&.4?'3EGI^Z7W7VU/XGEG_4A ++M^I'_#\K`#_:@#I)_+D:!`']U"`I0*H4B*_[7_@O^]_H'\#7^=]G/B_B'7^3_ ++M1^/8XW<^2_R:!!E\;`?X'HG1BUM\'PA+TMX7CHTGE2667YOFO`.W!VNU^\?) ++M\)/)1WWI?-']YTO\G<=+/_;^[Y*3WOJ/,3-3X3_NU5XWX'BKWQ\S^CZO2?&^ ++MKU61^+R?]'IM;4TI+GA]*;]'?/-__=CZ_-\/Y0YO6XQ3/]=U_6;\Y)O#27I5 ++M\V>K.@%SSEY1E%<[T_PYR>N*F!MP<WGK-DD05=T._D-_P_@]/E==2S9P_*_? ++MH.N['CA(;)LG$XBKZ?XF;N#C'8G8JNMON099QSLNIQO&O!O1W)/5<H_/2<4Q ++M]<7YNH@<<YA>+RKS#E;DL'3G:'H,PY'0G4&QT1<Z(P'4[P]MSCG'J*QV'+,M ++M,5Y<3,VFX\#0=*=_WQC,OC&:;XZPWY5M_E=5V_N#G1.DX1U.]+A,<+SZY?6D ++M3;'&^/_=N7C[-DZ8YIUYSQM^8<PS^8=D<<Y\T#B&D;@Y7#&/_=SN=SSQQ:K9 ++MVG"%Z0WIL[)U;+PS=EOQ/,/I]J<(E.@,1MISC`AT?G601&43PO.&1$1$_'T' ++MRO:?5@(?V*A[)#I4!C;JB'6*`@)8%!`!`\)D=L>*.#V?.7345?O,[ZS/&<,S ++MF_<_K>[<.>^$)%N[7REF/"DD9?ZO)N?G]&GS]V?KNGM):)OPYQI[S_7^PE_T ++M]C\#W];7_'35_AYCY5K5]UI?9_%B_'H_$^Y1^[E><X6Y0S;AWGD444[OKMT2 ++M&]KC73MZ,@VN0./ZSOXD+Q]/<$?X/-Y'/\#+/;\M5R-,SC:/U*9:&$.H!3B< ++MI`X1HGKCBEOB7)K]_Q!SUS:/)H<4=Q#6W0Q_=H;L[VM6WA7_4>.NFC=Y!A/0 ++M";XVMTF=FTTJRLS#*N7:.'MS4."?!WLQ,+F')/TUM0_O#4_4R),<SF#>A5W& ++MX?HSCE?ALI9VS\A-ZXWYT)MS["FY+<]F?,-+:U#&\>RWCHAW1$GRL5"_&.D/ ++M\<U.(HDRIUIZG9D'B)W?R?G=L/.]ZS@?0?>!>I8&/S^D\YW_]AZ_]]?'W*O@ ++M187M5?_BYG30EFFN7%7KE7H^I-QE"K553X7P_X'12Z'G#JZ9HSW\:!Z;SGF_ ++M/R\S^TM^HT/(;FU8Y7-O=Y<\#Y&\AHV2L>9//8\>P9!6S!CH<#/&9SEJ95XK ++M&OL^L@2R:@KG99JJM)DG[7J@DJ6EO'8.!]NQ6.E._YA_WIFP@6<PF\/JG\=D ++MW]G7*M8@A8+"KIFA:#]C\G<?.,W;#LLHOTLRMLG^MPX^T/-73/;*NUM#J"@5 ++MC(G(%VDK&V)#(-Z:V].A]76KSXS),[V(AP!SER>(8M$XI'2$UQ4_M+[*IWJ> ++MS83LO;,G:%_T[@_>!511%3>_?ZWJ2``?D4`#?J`@6/WF$0N!WS]]D55I\(YV ++MM\91\./",DCS7EIC)Y/X&8_F"+#7;ZSL6/5Z!+R?U<2B_U#*XM/,?S[-^_#5 ++M'.N#?XGOMW6K<?I%9[G7/M8#Q7CU-H2R7<[UV6+X4S"&:N5JG[F>?9ZOY*JK ++M-NS&2.34,>`J,S\*YO3VUF2^A(=%8L05A5R<@K0(0%7!B9R]3^+IK5I:X<(4 ++M2^HA\/(&'X]+K5&74&4/.2;_]X5%^!_G!Q#/^7(L!7CD\@KOT?7Z>#X3+/1) ++M*;14%>299NFZ1G(]N)[7PC0(0X\U[`E>IER/4,*>'Y,JRWXY$\[U/)GLO@G^ ++M'UCM*M#.]'WP_W/N^#2:Q^K.,V<T['V/MRV2M*[WE>NHM=NQ5SG.<[_&J`XP ++M7S^:R:U@]K;Q9$I*^UM[=8KE+Z3\%LMBVD5I7>R,C`8&7ZU,E0>][+"GSMZ, ++M'<*0A2.$3G"(BA?\.WX3"P'$%1/5_NJI_RJJPHJ<EWM_`P^V\98HKCNOY6^I ++M#]ECZ".4A&+I):/>_4H_GX'AN)Q.%U\$=!G/@Y.[5W@%&\D_D/?,ZQ:LM]?I ++MU8=]\S)"1\,-'L3WV\DDDS4S2OW2]`/%5#XOH57\NV26UHR%S]OYYV89^\M' ++M>:7^)8_M*\2UK:N6/_+7^*S*T'4U'^]:L8)ZC\!?JJ55^L(?/M6KL(JJBK9% ++M9KA@Q&\9:Y+#H,!`^\>@51<M/@?,83L%1D5#X2B<74-U_$HNU#MFK_V=PN]\ ++M!Y7BQC%5_;>RO/T_8='Q1XM:!4MQDC(\DFIFI]Y1--)[SNFL=1;;ELKF<PTD ++M)69H('4;_LU#AI@/,'L3#Z2I#+^@JTW]>0\N\@?%C+LIU@;X<]<E='17.^@) ++M?_&9W1:.3</\H3?,PNMU5E96;#9CEO/[);,Q,+IGD%_,K9?YO^?0%S([$H[$ ++M0]]ASVLT5UKM]"XF*-NE__!_?GI_'P$]2X-/K.R_4^6!O7)*(H=OZ7VXG`!! ++MY,J">>_8TJC_7WQQ-1Q^5Y_*S.:A9V97QD@/^)-IV61E&84TG&RY5X`8O@<7 ++M"\FN^R^X\.C\,Q[2NQ*J5#31'ATHISPIX(4Q^S8KVZ]MX9?KF*;GHKKP^YZJ ++MWFYO/+D_>3(8IM>&C*JZ[JLB5EW9VN?\7*I/%6G3FCD33'2J+Z8L)KT6;R6+ ++M-,Y/JQ=0KW.<YTSYN?/H?QJO_;V9W9*Z4KG&/L"%DDC(SBO7*XM8>SG4?[@B ++M'_I853)O6#R9A#H^&,J\14\=Y#M_K\][>*2B*A^V+P-SL?9S]8=T=CR:KTM] ++M$]+UZFQ61/8^[80?"%!/^3*C^'#_2D3X/:OR<_F_O=7SMNN#,T9N_Q?^GOA" ++MS",(PC+N/D&)6^C5X^=1;\\[J/O4"]+]:23#^4XTH^:,\G2!R"O2LLLLK^/- ++M-TKUYK67LY7:1J"LY<TKU['\OHI#,+)7$_@,GXTTV3,?BRB^JY!5)*TOI#_O ++M_C.GF6=F:SL[9[UKV?>]_7G+V2LZ]$L55N+;:>=?'U5I9YRVRV+*JQ^5X<!* ++MS(G<(_Z+D@BB:.YG^[ROU^@]2=L>B-0_I3[J_7.L3Y/S%/$=^_$Q_"KU8F%] ++M5:]"/?,]T99I9?T0FWY^\=8O@H;?=M)CES%9[^.D1?&?*;WW-/&MC^#9_='Z ++M7*#(O\BC+Q8K&']@PA][`HK^L]Y^VG\!KC2$C,S.<.<E-;#>O&%]H^)):S@/ ++ML]*?ED*]>ND(7E9F5;N&C!UOK*"@6?[YZ!%,N?)RD\!F,ANU0/0BB<W=#>1_ ++M!#MX?F.=<^+$>0&W/]CGZ_9^-A&/@_?*2T4][5224;SDZW6[SS/?8^%?>[WS ++MG$N27I&M=^8Y7G.E=F8LCK4YXH_+#&D6YX[B3P'@NG>SG.\'++(^MY^@04V8 ++M%SZA6BM+:'=8'*LMAE>SG'_V*[AH*)!F6V?8.W/>Z'\V>/_)E*+_&;O0OW[F ++M]_9VMYX2FE57TYOS=UGO6#,T+U-4(+$M6B[>UC+$+R=!;GHH+U^_FHU<VYGU ++M_JGQ\O^I#^?+_22/\Q)4!A/OD_B)_13:>I((005!D'B'LT(H/!#JI-PAX%#O ++M?V_]/<\E5%/.;?,6,1SHL\9\>C_KDDL.>Y\))O`^31?'[P[WC?P2SST<$0ZU ++MT+15(Z2#G.=,_BG%GP*UTZ!SY&5D.4YW6.169Z8L/+1?CD?7'OD^%YKOA9EF ++M%7*LR2I@/ODTDJK09?X41,B>,9V56;\]#'K?4G:WKSNH5[[A;+/;W995_U[^ ++M7/[KTERY:P8!WU_Y[:?8O!P1R&BJ6Y,?X^#`3VJ"@?>\EF.)?Q:D^F+>4#RG ++M5\47M?FL/>S'P7=QJC=]7\3AR\]&$26:>;_*:0C[1'^-5W$RNLZ;RW(Z;KKE ++M5?RYX&=AO".A65<RUU*G0'@<H9EN^4?(JCY&9>8NPS0I9F>[ZIT7G8O_89?[ ++MR]_^34I3XI1,9OI/SJ+K)E:,4#(/0(5%)LCR'S98T2+0YSG.8;RH_;5?TK^H ++MM+V2M>@O@SI!"0P6KMA+?8$]52TNQV[=J?^BUA7$RV)246U=PZ0^69?(AZ9+ ++MH<E%2XJ%GG,<CNV`_.NDA\%!4/?B#D5`!1#F?2<(Y!1%2AM`@J:D+)[3N=GD ++M-_M\]G_T9U42;ML8IJH_/_LT\/[I^\M6_HF3/]`_5WOF_7X^OYJZ'VC^.YO0 ++M>DY131^N"+R_9R$(),5[$G1(?:XL>1*Y75J**SG.=!*Z6^6DH@\YN52;%4,& ++M"5$0/P(*B!90%1!$Y+_VJZ7@.B*9II;3@4?_?\^/X^OW.OZ'P?[QU$\'(`#_ ++MVY/14;/]'0V1\J.<(45TEA0E5A&045(*("2*$F&U/Y=<\_6]I5'?+0<CA4<Y ++ME'E8]=#YD&W1-X\.S*JV=Y<5JIP_I5;&9F'K<<BTP3[[H^X5T5R/G/V=*-FB ++M6>97^)2,K15I:T\\9"LYY'Z"0FF*9EA*T8Q?/%H2+7G;I)Z%X+YYX"M(][Z2 ++M"SNR(V&FJ*\T2:<HI)*[$7PI2D52!&$/)5[$MA51)EF%22!XZA5?3&FOKK(K ++MHWS,*HO:Q17J(1K$75K%B"$EA-*O3.M2"X(M:BM,[#V5$5977W/D8@LS_5P> ++M5YI;!9GI1="7#&8'0:LV_Z&K_:Q*X;"BN=6K*TUB!_-*0_Y](G*PR'VQ120V ++M%RLUGWZ_S'X.9_"GV"`%R/DJ^>ZEPT3C#I,A(9IFLW^&2!0=QZT\+G6MPB5B ++M[7?=OH&1]B4`V=U.B3@^:;-X&V0R+Q@L4;,++E'97`7<[+*CFO.5HOWOSZ_D ++MA[KWQCOWO/.^^9SMZC)QKUWMWBJ7K&PH=<S>['-[J>5EW<S'5^,R.=S5)=?\ ++M$4"%ZNIJ7&0N/N*:\;8+FSLM8M+9K+8=;EDHTTRW3$LY'8L+19:)PG1!A!HJ ++M]'N5R??[.(*9)T*0A(0G8B0@4^!--%F_`4L-L%J,LX+/JN,D=6LGU['KZQPF ++MSDT(;JR:EYI9*["R5V%DJ;+)=VEV[.6DDA.G>;&6+(]79=UMW2:[++&;&2NR ++MR2I=R;LTU:FKI+NRR:EM;G)C6S63JNJ+L1-"FQ.@X\6VCD<FKC<'P3RE>*NA ++MP>33S/?(O"MH\IXM7F=!U5JKHZ:NM]IU7*MIU:=SGH\34MT\'AJ\9K<7A)X@ ++M\$ZIRG9J\WX4>%7BCLG*>+3S/=J3E1/55>TCU)XIQ.S5ZS@6`V'%'A5Y578. ++MR<IU:O-]K,Y@!I@7`X"<FGGEO3R:V%D@P9*V%DU++DFP2QVNK6TS#K,,N9G@ ++M?'CO/>2N5').4\6KN=I0;4%D#(H&%AQQQP<<::8,*)+.)&<(DHDDCBS`T0,X ++MP1(S#ADG%.L,?,>L>NL>O7K3QXQAC&'CIMZ^/7'C;C[GM#L.QQ.S5\W3<VWG ++MW+G>1M-S5UG%DG*<6KF^%$P#"1J[:)2:E*>S`$!@2-91)6]!A3,0-!S26ZZ: ++M<KADS.`YI,M3#58F.&M#IU(FA-)AJW(FU-I,,K<B'!%$%D3%IB;@F&FX'%#* ++M"*,N64"X.6=7!*:G$-R[4A7+.0%'H%]4EZ*-U5>$CVA<%?*.R=+B[:?9M;M- ++MMTW-MS:8Y8DQ-1GDIKMMLA:4LV8D":XSD$@2HS=MV#K=39)=Y:@&0+V3V+U3 ++MM.5VT]<-'+FN<V#@>%X5PGBN#LU>9PJZ7D>JGA5=*1]`G(*\JJ;0.2E]4.0O ++M5'9.RY735]F]ZW]W7=YO;[7GRHAJ,4RF)B8F6EEEEE*4I2E*4I2DDDDDDDDD ++MDDDDDDDDDN^7)))))))))))))))))))))))))))))))))))))))))))))))) ++M))))))))0A"$((B"(BB*(HBB(EI2B(B(B(B(B(D$@B)B(F(CF8EI<S*(X&8) ++M\BEP,PHM16FF6-16FFDC3N7>.)&VFHK4YAMN*TTTH:9[K-<XTH:(F&"<I3#" ++MB.!B..!B(YF)6DS,HB&.;,W30RB.8DVCF41P37='#1'!-U-S<$1P1'!''$]! ++MN3*.()'("..(@XCB)!R"(.)ZY[!=PF:)PE*=KW+PX0G#1,39\URX\-I.G6NW ++M73:G;IIVBZZ2-,\UO,;XIY>&G:+KI(VK;KMMN5UT"UYRK3QY;;E>/`+8W7;Q ++MXXXH\>5):$\:\S9K*1E]>Y?8;-N.=#>$GPGH0LGD9))UFN#5?KC\XXHZ\J2T ++M)N8GCR>79L!'DY`4,1,JRRJFIWF%9O7<M8VWK>]YV8GC=>7'!+QX*-$V%B>/ ++M$\<<2KQY55HMYQH`<$Y.1-FS8BO)RJK@.A593SQ/'>NREXV2-+:JLIYXGCO7 ++M92\;)&EM$Q+S7E->=X[%/-T+5_9_1K]>(FDOM?J:_?<=BG[="U;4J9O)3LV\ ++M2UY_3SWR]$;V1:?N*5-<R4]FWR6OOO/O+T1O9%IN@&;LA>3=_3WZ4YJ;^]^V ++M.B((J&X@B"HB`-0XI#UJE4[52TZ>K<C5KX[/,P``7)@&>87.^NL,PU373IUZ ++M/54=.]J*:5`V(J-M8`?5N\]O@O.[G/N?>GTC;$Z3L=(B*@@',]BJFDME*31: ++M912M.VV-S+=4W+J9RC%:A*$J[K1!$01=Q"`(9%7WMX%YW<Y]S[T^D;8G2=CI ++M5N2=BDSM91>K=Y[7TIX[M>]<S[6_3Y+:,JZIU0ZHT7Q1L07G,WESJV9WP`X@ ++MHEI90>PZ??U?2GCNU]US/VM^GR6T96975.J'5&B^*.!&U/*`UX,*?3;YGNJ] ++ME/)VW7KIQGVF^>SXG(,9DO(>`>)-!/B9@K:-YAVJZ"]]T\S-:USN/G`;4[0& ++MN#"G)MXS[5>RGD[;KUTXS[3?/9\3D&!Y#P#Q)H)]*-HVN@[53W-*3`W2]4CP ++M+H-2ES..QND^'"S9PHY`<1`=!L%$7%P.%LTS2.(AP,'E/"KR+QBW*?4S)+D- ++MT>"\"\SW^FOS'5)@>4NJ1\%Z#4I<SCL;I/!PZ^UXV_8/E'T]FUV[.6>ZWQZO ++ME<A@\IX5>1>,6ZI]57(;C,CP7@7G@-1;J)BCE7I%Z+P-5#QW4[WQ.4GRNKTU ++M[K[7+YPWYXW'RCX]<G%[>G9CGWG.^-GT<C#VO(/">(R\DY0^!V7,P=)Z#T6O ++M=,Y_3W7-?OP-Q?5$Q1VKTB\%\&JAX[J=[XG*32(LC0G9]+CAA685`<1`<&C@ ++M9&QIV8Y]YSOC9]'(P]KR#PGB,O).0S(?`[+B=)Z#T6O`)T`TH)TI1#A%7$6E ++M7D#:#<D\+4+[T\W+R>5[3D3&'E.QZM/6M_;M&_F5OR\MQUWZ1];NG9V]=67W ++M6>.:[>.7T[,>'J]AZ7M/8>9A=3JZ<3=9B?0^NR[3`F"S8(L`T(DF"75+)-NI ++M6#B<O=FWF['=NVC-&'9#JLA(0M09H!AZ-43<HZJK15T<BN2>EJ%]Z>[EY/*W ++M3V)C#RG8]6GK6_MVC?S*WY>6XZ[](^MW3L[>NK+[K/'-=O'+Z=F/#U>P]+VG ++MHS!XKJ=73B;1]#[,ZKJY&CKV70]+3)7:5V+P'$\F9.H/:5Z#,2:9DJ^JO#R5 ++MXD>1:*THX^K7/=2\C<MQ[0QB\3H\/1WAO?.?-<K+A\Q;]'HTX<3IKZA]-GDX ++M[,>75E]XW>!H;'(7&0X.CLB=.CH$@Z(XC@,B+AV^?9E<CX=S'Q\?&8;'IF'N ++M?5XS'-/31F&C,-CW/=#T?69:;?R?.-Y^]XS7NLXJ_%7X7`?J?)U![2O:1H#Z ++MK,J\/)7D,P5Y%HK2CCZM<]U+R-RW'M#&+Q.CP]'>&]\Y\URLN'S%OT>C3AQ. ++MFOJ'TV>3CLQY=67WC=@-#8Y"XR'!T=@:='$'1'0=`="47.YGSY.#X=/CX^C9 ++MF'H]?6\/#6GII-#8]>X/#W#Y;::2?/45Z@O5%Y&EZE*<JAUI$.HB:!]F`\>* ++M/,P/E\<)M:S,D^4V=)N3R\6KOW=EYF5RKD^I.J*`V(8&AI!8PHUW%P^':MP" ++M)AL\<VN=W[.TTO)XKRT^%]&UY7(L,)%%QMR41UZ#@N"U"+8Y"PV&&G8'='0D ++M<'1,A(<')%EKN!B7"0SCDC@H2T2-PJ.#28DHD)2*2-6R&QL<D6-71:JRE$J& ++M?+\47F3:J82HKN]*=6Y52G54FI-1B&00<EI$1H1%JO9>J\B?2/DFJLP/D/'B ++MCQ'R^.$W6F2?*;.DW)Y>+5W[NY>#E7)]2YO;8]K@]/4L84:[BX?#M6X!$P4& ++M#HAW6P7$$EY/%>6GPOHW7BY=/&F7;WNFU]WT'!<%J$6QR%AL,,T[8FC@X.#H ++MF31\>'77WS,</CKY\?&SU=:?'EJTVT:6SOAX^/CKC1O(?9@^EZH4AR+R4CU4 ++MY1.HE"=1*4S,)\CM/,3R-CXS(?,'5>2XT3R3PO,TPOJ<MUF5N7SR?+;SG6X\ ++MF8<5Q?0XWO;W&F&CAZ&QW1Q4<;R@TPO@W8+XO!"P&0YACWICMSAEW?OT\3:] ++MGIF#UIY1\MSR<NGAIEU[G<MGW?;D[R\U/'K2D>1DQ&A@TC>PGCN2XXHJBCC# ++MCENFQNI(M+-2WC<C4F;%SQAG<8EABE28EG)([CBVVTU*:FI<V-"JI'*)5YN4 ++M[48IL0A9O%Q<##B<7)VKJT5<S5U=6UVY-6ZE/)G2G@[<Z[[CVYSG.'8>9FF= ++M&:'8G8MG?"JTJ\YP\I+;-)W(DPLFRKMT%Q):D4K5(YE*JO4TWM96SB-[*O&\ ++MTF5'7K')4:2-TX-@C8(<+Q.+MJ\S>V>3R/!V.1U:>,WY7DO*N*X/#5Y[KZ^K ++MVMCR/4Y3Z.SJY.FK[-]>0^3RG:A]"Y5/D6Z3B3V)R)[0[2[#F!S!/"9)N[3: ++M6V>/"3RLK%Z8G6I-9-8M21Y;)9-ZV[-1N[U>:::)L%3J1A,-7QQH]-"=%ER[ ++M>1<6,N3*96S4D[<\F<UR:\>FVVK=M=R3J,)Q/"&S9V4I9.^FPTAPNW&&DLE2 ++M91,H9><XX9<XN;H8KNVT34RJ2<U38FI)I*[N:&G<DU;XV60)$$D&`&$=5X'U ++M/%/E/B:4^1YXIX-CY3Y@ZKQ7-$\D\F8O&FB^IPVK<OGD^6WG.MQXG%<7T.%5 ++M1J)$$@PT-CNCBHX[B-,+X-V"^+P0L!D.88;8(N&P476]!A!24/5Z7K3VCY;G ++MLY=/33+IS+1[SRY!;CI@PTDB1Y&3$:&##3L.....**HHXXXXTW4M-$88:<&6 ++MD8EVI7/&%\<889,I28<:([CBQ$H#H#@.B='J?#Q/LR/IF35/H[/,7A.<F9/D ++M^S!@\'G5W-QN9D\LRO/C[,3P>'CQ:74\96G&8N5Y<]#X+&%N*(R`8##@2@SL ++M+++.1E!)R'&!8.)WHHX21QW0<::9T=P9&1;R18#PP)J+-,*)LD3)BZW>#1(C ++MEW,?3YF#ZU\9E?&STYWW1HT>VR06%[):L)B]C;B4;T8(D-*,"H*BLC)#3$G& ++M]AW=O9F;N[O7O;W;O/.Z7-,[M+W,O%V]>[U=O+7TKLWISNW-W,UW9;WKSSQ\ ++M\X=6[MBTCW=:Z,>MSD8)4@6)*5[VLTTG54RE)024M=5:L5.;M,I)RW+:D4TY ++MIN::W:8S8DTTN(PV"C/%].+Q;G!\KE/4[73EUK[-_=^PWELMO++.H\=G'2S: ++MTWCLSK/,[RG`X0X#@+`L&%D\I))YW*25-X%@PH,B2TDJFI-#",(N'%A)BULI ++MJ*FQ/*[LFW===NMNQG!+-W2[5)SGGA.]ZZSLT;NF[FR2Q[::[*LXC+'D:<;" ++M"V12S=MG(V;M8NR7.SPX'6:=CB?7S+J;R1K62663=2IG*XT-"R'!I$QJK#,& ++M,R8PJ**I)R,<C1-9F6[B8PK,R+!QD3BU#<NLR'!07$EIDDCG+==EV6MVW."< ++MEL[[.CAN<$ZVVRS3M-EXV7G%H\3DV&FCN[R6<Y9O)+!<O$;MNS6W7RNQY&O+ ++M-@KC)UV)Y%K^W>\+![7Q?A^3VS#Q/B_)HOATNDVVGQ?#!\/.KK:;3POCXO!T ++MZZM+J?,LRTY'*\N>A\%C"W%$9`.$@8<09V%EQ?(R@DY#C`L'$[P5PDCC2-,, ++M+V-T,C(QK!9!A@907IA1-DB9,76[T&Q#(LZ'U/K3Z9D^-GIQ[AX:GK;1GCK! ++MIA,/(RXE&=&"F#2C`J"HK(R0T,&7QV]QQ1111IAI119APB31FG''#&,PPXDL ++MLLHLOBBBRSCCCCC2<\CZS'LW/68ZO3R?3YF6E\=G68-;P^7QACYYCMW,NYAU ++M<.YAXJ#DCB.@Z#8W8DQ(,@Q+7A=(JH,"L%HSC<L2C+*C2&#CA*-W=,#`SEKJ ++M9<,P%!96-9$A)IT4NFYD6&D9:S(V-V,,,>2JF<BAF&!3+6QL3$ES"',6%;IQ ++MJ0,+2.CH.2DX2.2RF:E,T:5&CA@VE=!)AS@NA;+)-6EFN'D2M[CNHIP,<;%# ++M0D.'L;)P4;W9V;556YSK,FYK.F:URW>=L\W>\GET[Y4\[M[MKGU#^?Q+QN$% ++MD4%$>@T.@PCX'PB2.#JZFE\OC#'T\G+BXN'B\6Y]?$=!PD::;$A@81AI@PN8 ++M,@P>C.BV1;*C!(<##A(SLBPM*SEEU-EEG`H+*K#(D)G3H9R0A8:1AF8&F[&& ++M&-85,X5#C,@99L;%1+)A#)-"MTXTAP7'1Q'$G$<93C29HTJ-&DX<,N@JL.N! ++MT+99)JTLUP\B5O<=U%.!PS366*"RW&R<%11A0A",TXX9919K')1AIHQ#+-HL ++MXPXPHDP65<-+(LU+$L-%TKC$N2Z).20BRT@DY+DD(Z,ACAPS(R*.2Z..2[>1 ++MQ.I::EJ77ID88D8<:DQ%F['%*YE<4+KL7"G(S$VD/4G*+--.TQ(S#%A=&T8L ++ME9PMF3;MWA.J:KA-*-U$W1,SJ9HENFQNZLC#.+G4\JD:,N+6P[.,T95S:$IF ++M;2,VYGMAQ9QQPI.CLJ2S>3HHODG,3)Q?'&H[DN.55%5EYA@FK,YO9S*S)VE7 ++M"[;TLO04R89W%%5K<.DC=O,B49EFR=%%4JQS)F]N]E[N]:;>;>*:[-KKS-S2 ++M4F;*LDT54X<:E9@88:''!AQP2<(199$AQPA'1D,<-)F1B5'1R7'!NI:2888& ++M&WI@888'&C$6;J7%%S)Q0NLLX489#*-!C-C33MC#(S%A='49&&,63)EW9AVE ++M$\42DM!/1S.EFAN&QNZ9&&<7.CRJC1EEQI3+XV*)N7")0685L\:,N...B3CC ++M*D>G#HDL?71))V''0::::50I+XH=LJ;.?<;G8.=5&+MV&/04SF1TDFZ51121 ++MNWN$9ECDY+3"\&C!@AF'$DG%!QI1U%%EV\7/E=:M.W#,N]['=[:5XM[5W<N- ++MWC9JI*[C>XGN7=RW8DYBXDP<M/,3WEW%[JM9F*MW=+W3.JZZ5O5:JB9GN5Q, ++MTMOEJ6VB\OC+P[N-Q87G+1SW7IL[W+J=4FIK%.4[XY\9UO:KMFA*[SMG=S=O ++ML>9G=W<M[EO4*\6<]J\ZRMN;KGH[R+UY6X]7;&E-Y;:4MRX?91O;%SQSLWN) ++M[N[E=U=LS*16L>7JSFU-;IV(U+EV]C;;S,>7158=;[JQW73<\^K7G*:X;XF9 ++MP6'3-+=*JJZZI;VWW8HV<W!G)5';FVJU5+WIVJY*NVI.:OI6E&'$C+-.,N^O ++MKZRC2@HPPLPLTPXDTDPXP1A9QQ9IHS1&#&,LDTLS2SBSCBQFC.*%:LT8I))P ++M--+GIU:&%WIQ0SCB]+&5>C-.+RK+,G-Q%E&L3S3GT:3++LL+P[CNPMZ5%',9 ++M9QPC.A[4F:43;.OICC2AS:PR.M58RF;0BK)*0D=SCC#2SC1&V:7HRSNC).*I ++M5+%BUF#--6<C3I),LQE226<33,.WMO!<Z,+XXHX0L%@B2RR29SIHH;,@8RB^ ++M"HN=N+&86B1".$)FY56ZV\N]KD7F/M?;<[3R>MK.[7W;=[=UG&]NWR[NTW;O ++M,GMWNV^[<W;Z:G%?5-IN:,S+VB^F767M5K'/*JI;RV^VWW)7M/-W*JG7.\=R ++MY6=O7BFCG4Y7:YXO9;Z^S5EONOI;UWJOKS,ZIRN2NMG=<U8N+MZ^;MTYOE=U ++ML[*P=\MJ\RKRUUJW*5#G;JSJK>W9O<W,W<4]4Y./*N)JL6O;MW6YB>RIZKU\ ++M3+W:[-N[=Y3M;FY7;W=4SRN^W9*72I69536565,Y7*VW9FJ:F[YG30G<\LNU ++MNO<PE+A:^S5UCM-2FI5*52$M=!+IRGHYN95W5EWQA9Q9I9QQE<4<862(LPPP ++MLL------)+&<3A0S##HXX[CC=TS#B:%1MCF1&"?&37<]XDF3##G11IV,DTOC ++M1NSGME%%%LTW-U%F=A-G,KCF<2848=I6&EG'!NW=V.N)-0BL2P4G6:;Q,[A9 ++MQU&F&",B<*,='28(NS33AFLTV.*,6D[&23D<7.$EQ8A6;9PBRRAW9F$H[C)6 ++M5+X=TAF&DE(EY#+$;C..S%W&&7AAAATY#@W"1FQ4&Q89,NMON[75=S=776E= ++MYEV9NYF[6YNUU-WW<;V]V;FY*S*Y;DB[=Y.3!4];R[G:KMRUTU-9CYT]=M]> ++MNNO,O>-UM]79EYE.^O<W)K:SJS*W;YO,RII]NU=;3[C;R\O&[OI8FTBU,Y14 ++MF&<\=OIIWIO4VM63U56W<[F-NV]NZDV[SN>VB]WIE$FOE,\9,Y?/,-RIN9K, ++M9V\Y<U7=IHLRG2O<>754ZK;Z9U4]NZFZQ[:NV]IWN+->UDWV<=INEONSM[<T ++MZ<&ZD[ELTR2HN*Y&QT2$JJ2J^#G:=BY2U[F\:W9DDOE%A;4EMLJ$!;-Q7.%2 ++MU<DN.FXI2\ND[21J)6.U3J72;4JY=R2FKERYRG312MU)+II$U5&_OG8XY58Y ++MLU9AI4,J[,YVC11O%G!QPRT=AAAAQHC.),19Q/9G5L59<UHC1$WQ)ACD526* ++MJHYDEOJ$K%1S*LW,L8SKYLG>-,%F"1I>DB&.BL.,.***.8^XDK>$(H71AG&Z ++MQY)>"[33I*0YTL[#I<6;8QEHHPT-,$(JN5DE;<MCOAQ)>'9%+16<=N[)*DS& ++M447W#&:7%E-`\-*,-91B,JA$DCBXV)T[BS!G3&4.2>7%]MC!E&'!PC#A$F4Z ++M>%U-/-WNXWI%?8+N=]-/*64^W9Y8LSIQ]U=K77DJS+>]/2G3;-YK><S+K555 ++MU9:WLSL7=N;*G14*W-9@KS+V^W'+GN[MJ;S1=LNDZK6MSJFN<N^ZLN\SJ4Y5 ++M3>=.=7=77.8LZJ[KM4G56\KNKIJ]+;CGN2[W==OFNHW6/JZ][K7;V*JR7-XM ++MK+O-LL5K;S4<.5DJ^Y;O;-<I55O=SW*Z\,[,N,[;R^YTGEU=XV/*JJI*65IA ++M6\\[)+.ZH7.^YNU1E[;:;.U=L]/&O=Y4DKQ5,R4D=):=;:VY"PN)+6ME#J9$ ++MKO573:[&R\WG'B\VEW5TTX=^&LI.^)%>^]TWH1R61UE>7I$1YR3K4L.;'1%0 ++M&D,,"8Q<FW-$JJC0V-+AQ<3A68&06#,DQ:ZJU2<\[13JJJYR;6G\%28,PPFR ++MI>U*<TG-EGC1A8,N)-$I<N)>^-2'.#LNN)KO).'I+7&<W;LZO0V[65FVV;$2 ++M'(,R[>N<SR[-VDBS-:9*5Y69*FU-8,11<3%*INR<FG+0LNM4U,OE;XG>HT9P ++MXPTPS)DL$86,PLTLLLRJ&)LT6\:9A@S3C2BBJOHPE'<94OBS#2C(95*$7FQP ++MC=LD;D9993--X9N%%&E%%1F''&&HFVQ[O#*P,P6Z:.[.$3QW047EV<<4[18+ ++M2XO.PF3AFDWIFFYJRL.X11T:5<U8PX3..#(Q.331B'F#.,++WBV,L<,HTTNB ++MBB[HHX0BZH+"S)H0N=E=',TY6)*J.THJC32C2R6"K+<OK>=>;D[9LX[=6TJQ ++MY>W=Y-7V3U[FRYWGV[6U55N[O=G=FYM/M2ZN*J9V=F^O=7,VRZ9J)V])Y9J% ++MTSC3;J[EF]VWBK:JE?;V:IN[I5=ZMZ6]PWL[*SG>EF]6\AT\N=GJEXB;V2LI ++M9?9,\]F]E;>S.[5;3S>*YJMI5-%G3DYQQQM2ZYX\G)J7NK=S>S-N^[<5DWF8 ++M7UW-YLMJE6/&G'8=U4[F:E\]DOKZNVLF;Z^J;N\?7M:ZJ^6.W*.N4(25.IJ1 ++MS*Q:852ML0;$<1IG0:<;;V;>[;;9*\\4ZME$WG6N4Z)+$TV$PU2:I%7113&[ ++MQP[KGN6^NW<\D\6JT-<\W)Q*J*JC8X#H+@<&1.,V\O!Y3B<'DU>9]X\6UX>3 ++M5YLW;;9T[-+J[:=SGWUJMUT>1R/4ZKI<3JU>[\>'EUR\:>,\\\;>/+3S/O8Q ++M.)N1]*<"]E-RG%'JCDCZAT7:.4[-7V_.N3LX#C(+@+(863B24554CJFG<2ET ++MQ:K)XQO+US;+DG&W6V79&$;=VFT\SP.B+@8=$FU)VY49!<##8+B+@863JLNO ++M'/)G4NI(=V+7D82%=96%%8QDFQEDC-J7CN[+(=VK#6V[9-=U7CO-:ZE)*XZV ++M6'-A5ZEF\Y8[LUV[=M.M.;RO%F^%Y8<9;(2-[+FSLE)E(<XDI"E$:7G=AO)Q ++MU%3HCNO"[MM+!M=$HR]#9X="<#F)S0.9YAZ\>/IR>+=<7RY/9TZ<.M/LVW:I ++M/#7A2I'2G",X,Y,2')9=(3)X(<YI;"MY8S6W;G.A.;U.KKHDSHC(0B;=N2W1 ++M0,,"2U043%)HJ''1Q98RR<'"0JGE2T<MD\E*E(V:K6YEO'5YN%AD&@SHN+AA ++M83'*E*FB:?52O4YEP[,[,YG,TX/4V64<1FP9.VSC?.;*S6PG2ZR,.N*\'E>1 ++MXTDEXEXI-99PZF7=:O-G9'77FS+-W=4N2.HG8[S:7EYNRQXWFSN<E><NQNQK ++MO73K%>*LFTYNU*%?24)-3LE[M3-3>6I4IMM3:MTVZFF8BZE"$J)D2$L+I9CN ++MS5G-+>6EG*V2KO+SAWGF<,X&AP>U69C<828)IN:HJFK+"8LLG:9-33K+R/,\ ++M'E->-UMSO)AP-SO$ZEZG*PV;:UIRV<UAJ;.(F\VV[2[?"<)/"#!9FR4(I;-R ++ME;MJ;ADE*D26ZI.;8BK5PAS8I%([JRYM,>\%0.!AD$QE7;*+FT);+JZ')5,9 ++M;;JKACL<C$41'=W."7B:&X[+'BPDKCWV=E.=B=2O?/"N59(1X\LW9IPAN\6W ++MCG1MJ%@PF&)B'#B6J6=E9;Z[=SO3*9IIHX<;$F,H6N[:4.F=UT;;Z[=SQI9* ++M.=+&WW`PR(P.)S:H[MIZXZ+"P<6$QR)*,,C(L9,8(7";$MJ*':$)1AH487!T ++M,,"H&1P.-@L+AQ9)9?Y_?]\.6ZT4?#QE(]1HVRRR\/A99A))AE"$C"BCBMN3 ++MIDD8QC**.JS<*.DEFZ;-&:R2M+'B-+-ZB[*)-'5%%&,TNR[$(P9@RC2M*3R] ++M*-,**L913)TTPDDLI(X6OHUG/A\ILRR\TPXXMVS2BBC#,+OC@G#3@X>29MX) ++MG&1F#911(^:BGAF5HQEEC=445#C8PZ>XZBZHX*,-LV;$(6FG$E%Z7&K-O3#M ++M-%JEF9V9E9G5F==[M5NT]=5DE]>9AF;F9Q?;;SJF95MI-MYMW4YTRYVMVWFW ++M=L=Y>+-SAU<Z^?8ZKGEW=W,SKMM]MI)W=UNN95NJESDZ2LN:FA<ZV;WDKY72 ++ML["K6K,6;:OKOLS<S+O;N]O.FN$3W<,>1.+1EXK5YRN^[,=957R+?;KSJ=O+ ++MMVVV,PXU7W3;KAJ[,=DO3!7W3-5=;>HSJR3=Y=JU]8QQT4&W)(RBBBBBB2C1 ++MG4(P1IQ111103IU"-AYM"W'SOKM)#PA1*)V)X7*6EL$J6]B(B2'941#G?0HG ++M<.CLG9W"8D(':J:%[\\#RXL#LMRTI2TM*6E*."W.R]8XA<8T2G951/"=FGAL ++M$1$40\"EJ\%#3P[.RO6=TV$)G1UF]'E[MMMI2E'PYJVVVU6]/GE19)7N[Y;; ++M;;(SOSC9?'OO>=/4Z;==ZSGG?4Z5)'RJV]^6VVVVLJPK;VJR/:LYUWW;;=ZJ ++M]]VK(R<BLCH]^>'E9K9>U;;;;;;;;;;82WLI>%+;%J6V]VJGG?G-<VD8JGA; ++M>K3B2KRJOEG9I37<[$-=W+=$NK/Z#+P/4KYZQUC9A^SGF,8QC,8QC&/;\ZPA ++M"$%T:+CD7E4A)&<(Z4+N0E`@DDDD>+R,B*1N74DNKI(IZ>>\U>+GG,Y7GD22 ++M222:2F9CSWG)$PA+SWHDQC+,N.L,?/=W'7Q[-'GFV:;RUZD.$7<F8(2222%G ++M&[QPA"%TYB5XGF-I"ILWDA);PA0DA"$(7<)"`A)#SZ[DZNY(\_#S;R\^B*<O ++M,DD`9*2;RO."1)YDBX2$"=B2%VT67T;$F)9&'\B<'D3/[>M?H9#]7;Z75[X\ ++M<>LLGXO(O&##X\=XTV^N2\H[!Y)HU.?%##8T<7`H"A""*B*CH#8,,LS)SMU: ++MS#Y-J?89=/>\^WQ\ZGJO">J)"8'W-V<<6:+ZNK,Q4>5'H"@#T1L>@+*HPRC2 ++M,CB-@**),.A@P8XXQJ]/*XXG0Z>G;USCC%:-L:?>X(TL+BX-(.`S4=$;E7L5 ++M$F0/(X-@E[4G$L3,PD--B&G$6!IAMDMU410CVEEE<1:60B0*9[WHRT^NI<=& ++M6ZN[$4GH6IF:I76-]']V/[L>':]?W;+RZW.]/;Z;:=,/763;Q=NUX/3=Z\>U ++MV>--]T]<]CA`HP2C+7$3H9&8.,,#3DBA$EG2+LF!\N.$:'1R7%F<&9"FGU/N ++M_D?K_/?R(,C/<>B/A#']D,L/HG#(PR-C[`T%'3)(+8TBPJ-B0N!5%8:B2PXX ++M0CAY#N,DS##.2Y"(TY$R;RX,+.),A50NY5)?]6EZUF^P0>+/=&\:;IH;L='! ++M0=QQ(CN#32@N),BX<2"GCC,SMTSCB=%W*<N^M&7RW.>BP<X:2SZ/Q^*^OG57 ++MO`RB&>^HT"HLT^HZTXZC`R(JU8GRXT84A&1924>1BHL2*EN[APN"I?^I9JBI ++M6G844%^H_`6'Y-V-#8U,44(H6:+<6:+-3NJG#AMF=8AUE"Y$2"")1I*44A!; ++M%31F*T)+9C$2JFEDTD24VB67^3KM6\U59%7&/.=WN?UQ[OJ^4_9X/PO/OX>W ++M^JOEN((((**(B";T*/T'L>_>XGLX%VG/MZ2).]6K6)L#W5J9(OJO%@N7F+(X ++M@*@@J`B%Y`1(1#S06%`Z")P@RO0'HO1,3E.6"28A1Y1>!4#0BO1%'T($]J7) ++M'B6R<5]')[==YO>]]WNR^)5/)>2[6MDAYTC:^6S)K.NN^8#(+(X&%AQIQP<< ++M::8,*)+.)&?,:;::7SKP]8<?/&-./'SC3YMUACYCUCUUCUZ]:>/&,,8P\=-O ++M7SVX\1M#D/HY/;MWG>IRKE6QPX[QHT[MSO2<4Y#=.5Q=.G7/O?(ZH=`]*O(. ++M0]CLZYW8HX!=JE/JJN$CRE'JCDGBMJN1>DX7M=.N=UA,#AAS#F<-2=UGETEV ++M5NU=V3N,4FKJG0454[MA18R`8#@8[N"+B+BRT"N9Q3A!D&13RR+B[+0*Y)4* ++M4LFE2ZYNQ+LE%3*24J4U*J2T#>PV.V`X&.W`,&-5`4$E#<,;2<S:JIE0HQA8 ++MRQC&,:LL9U=A*AF'>&&>9$!H$4$:1<,."XM[516*5+J+@LFVI/*='9USS9;A ++M-*FZ'8=CIUS-%&%'0-@[#L=.W.]N]Y<T[O>MV;\U1R&U>2\'AUSNIE&H[73K ++MKF.ZUF,UJUYIK?GGEUW-MDU?;5)HG(,&UL0X!P4.[@L"PN+50%!)5ML>87=E ++MY,A!<$6!8,=U%495;%H'0['3KG>E7I:7)]4.2/`K8+@7@N%ZNW7,[U$N'2*G ++M#"[M3<]-889JHF'DS'*YHI0D'7MFQEC&,8RQEC'QEFUUV;2DI4XBD8MHE(2$ ++MLS9QE[)*Q*9?"&0=`8<*.%9PS"HZ49W86T@=+N][R$SE<EK8ML@&R2(JI]X6 ++M*T2C;W2:39@%*CEX.9ICR0X*I-)45WL2QD$(5DWJ%6V#^T0M#&:N'(7,=("I ++MNE3N,",B:,]38KWX$TFC%;NBQ,K[C23R$NS&/Z2#)+EK/Y&L\-_JPK9T6FUK ++M$+,FJNLO+,AJRT*:EF2Z_222'2%NRR!E2.%$MBH(-78P%P>M(U>^SWO(CS:W ++M2RJ[(O21ILX"6$M#YEDGD(PC3(K\9._HH>OP\,^'M?N?9<^,@=+T]U7SUZ8T ++MYCST]9%RR*!G*!O5NJA$G::LP]%1$*G7;A9RE"0`D*SNW/MH'$@8<MI"B:Y6 ++M+B8FOSEO26@@*A\N:9R.5*KG76*4O5\FJ:A<`L+^Z==GL=@KR25@T,]L[HAS ++MD2**3YK2*78#Y/O^KU/O</O2>?RL$U'EF*[S,D-RGU#N'W0=EKN+6*FLL+N% ++MHWP1@0B+A0<,A74(2XLA_#NSRYMFD4@C)CT.W>X>=1FV[%\GGJI<6W6X#R"T ++M+(\E(.%?0O/P^'=5G\NI3_@_/\-_/F>:^U]HE/Y/W]U@S?PYWRYCRA]%929S ++M0A4^8?5.]TA<C/"<B5%B,T:Y%'(J^KX7X+UZ<V>>G76L?DTI]2?'4A[<+?K+ ++M+/>_&T.IE*TX^-J)*6;$7ADK(E5$M#W@\H<.J5EI@-!8?K7WU]/?GMS\???7 ++MJ']JYMROUGWX'0_W<<_+RMRJ%JI*)XNE59Y%)6>ZS/7JE*969K[JSF:LU!)0 ++MD2%>$TD2,6<LEM2==F9EKQG)9QEM6:I9"6#DKOLV)'1E!FC2]S2ROG+`BG2# ++M+>U];'H-6-][F/#M[1289:G,I6O.:&A!'%]AA:BX4.Z/%`P4P)I%::*%+LV: ++M*RP@JR5IG4VH.OSM5,Q99*'675GF7#)K3NI>R%A0=BR2AY+(U5EBLL)F/HCO ++MU5^N#EM_K-99I_(I*M6U^OZ?I]W]?,VW\GJ%-ED:"$%L.K/GPKNY8NE;*5@6 ++M29D<*X5RGTZG.55492"H0EP.(01@SEGBSWLA,Y\9K>*:Z0A-*](2@4F_M_&4 ++M]^ZY_>VH]+^._HFCL=U];>&?7\6]OS6?*-<"=A<+$7/A+!+SMXYZI*S$NWHK ++M2Q7%;<Q!K)>+`^NLPYUDJDCM"QHDE9\DM8;.J":)L79!T]>:F[&Z_J/5,92G ++MZJ3G?>0^F,5A[QUGM!X\K[G7.MO#HNR2:\XRBGOULMLSD^7GE^Y/6>=K)&SK ++MZV[[>S]C34DVT+$"IRJLC1I6#MP*JC4++D/SIZ8O=/52^O0U>M(U9]YPM#BA ++MRM(KB%"N<]=!1\L!^'9'RTQ*7$C3W+J(%M0"(5RNS.8<IE+.J2RL36=3-TL6 ++MO.5'5VJ\\FG<0L3!:)+CI+\"93/G=%E9611ZN6A9FG@JY\!RNMXGJS/IL,Z_ ++M"\3LJS9,A(L:9),3A;:OKJE64R$DQ26Z]S@*_Q/'.\ZN2QY6>/&6DL#IK)]6 ++M&1'6?\FIY^IU'[*!(E+CK_)]T:A_/>?Y7XCX<_Y%VG,KI99(D*9HW)&BM,TK ++MU?!RE=2\LOTVK=`5W9DUI;M%.M"$"2#["O>C[C7!:ZQ<P4J*EF89UQ4@3R6& ++M?;4:BX.H4I%K5FZ5:ZL#4K4JYZCK;E)W43UG6Z)A=\LLLD"1TC[EB614I5EI ++M4GKM,S06<MNM05H5*+(,A+KTSS[,M#$IHP<$$>Z&953<M0'.EE,"W![%W8G= ++MF*7`EHN;PJQ*2%:#C4%>,3H$1XZLABB20E<KK]`/6TT8/<1KX[3WRR2O7!>S ++MWNRX#DF66NQ#)HO/2RS232E<LPE=9,YG2K*Z*S*SV5]][6GS+/*]TUQ]VQ8J ++MK5*+%1;+[A7IGIK6;!)T3[,BOKUIJF=3%Q44#55HO)IH&K""T42S(2&*+U?A ++M6GI]UY]5DQD%.S?\3XWOG:7Z6TF=YJ_0;T_`=<MEK"ROEO,PZB1`5U>9H#61 ++MUY5>,E:FM6>44,7YA7$VR+,M$@R[UM2`^E"JT^RBX)L_#L4EHUAC%659ZS/: ++MFU>RXRV;;A*82YJSD*7-@Z;1*2MU+WO"_*$J@^9Q!/TK]:(^Y+U!^RCRM7>' ++M[#C]>G?T\?3\B"+R/I+`B+3(SU6PS2^<FG'LQOU#,GE(*LL&,^?/R:(69C,= ++M:4>LNI4XI?,K9]:-"8A2K(GGSU6^5J58(X1UR4JBKYM:%-97TM=<0SXYKWWE ++MI6E2E:\6E5]PJ@.'JPM4P^>0:]9H>],2C\EJEI>TZT2C(SRM%XKW"Q'.A-/( ++M]5,-V*O'LK5Y%6+.%46J-1/+6TJT*ZSTNEH=5"_0SMT<I!P\ELREJ#V9546! ++M;L27'E=7M>EVHD[XQ=;KS915!UR--=TA&0D5Z75BKKEV,A(L%I:,)9)74S2- ++ML`\%O9.I&&V7;*HJBHJ/8`SI[$BX&%*8$$C&I2$CUMVI&5Q_"IPS]LU9-J?B ++M^?&5R*?\Q*OZ<_?B9Q'V_%RJ4068C&S""S#1)&(R.=5$DX,\"3HVFSVE47`N ++M0XJE9ZT"TEL<Y,E9%'+0[H'-6L%+V<^*I1*N0^ITL)FE=*KB2$6<EI9%D>TE ++MQ9*)E+Q89Y*L9F-E8XWTK3+"(_!-&%VCGOZ0_2LJW)_-J&(]^TM-_TG\^^OQ ++M^E<?C)=?GX1$$A6J?BUK"BJB6U#+X<VX5T]>=GT+9*&>1C7MQ=!S`N2XM/P. ++MU;;/R"EG5E*J5DBJQ7)R*TKW1KS2P4>I1&1[?P+$C.M4C31P4+!8DY#B/FGE ++MWE3CHJ'2S%EY&W7KO:D@^O7KR$Y*]UN#WK+5;HA1&#X.,55$99G1F>5LI\7R ++MW;].S.Q+"\V74^@HGEA5`E<JJ)2S00LTRN20@TT\+,(YYTH7"$E-4E-BFZ5L ++MS.TZ-OJ[>BVM:LZBXZP*^=6(P@Y8%QUZS#"0@L61ZQMC/7$K*D'I0.F@M+X, ++M/G(DBI(7:JU,LT)']+/%EPD%J:&2U4&%<HTM31D=4_)F1JSJ'/?+P'R/A:^= ++MJ^-%<KZ%7`PD5U]+W"ZYN.=0N9*L,(%#;(PH?G2#"S$@V;S\/F=4MI&N7\3- ++M)PE!H7$2\FEC,A"3*<;,A"0)LALW&95373;BEMV&T;I"G$6"IJER*Y3F-Y-> ++MGFYR6&<:RW)E%RUEAQ]AS3PX<AM>J\2Y+K?!.#:#8Q--(F@=#LX-;<ULVO=Z ++MWF7,;F6^O#@[%G73HZ'3@`B`I:%..'A-"<)),T2KBYD<K1QUXUMRZO$>=ZZ< ++MNF8S,P;9;QF,G,FZTZ\UMPZ/!><<N[#ABHI73Q!PG`19LUP[@S;FZHR[!S0D ++MPY4(&E'-X:9RC<DR;I3AF'>:XQCN-YDT<:WQVZNQW$QKIT9U'3B,P9BS!9G> ++M75M.K)AC&&!YWNQUAF6LM.Y1M.+;&^:WCDY'$<!S$L<9R;CE-)$-LZ[NMNY1 ++M$U>2Z:E7#KCQOG7B\IXIVJ<R&;:[<X:PX%N%7A3@5FB%B`IR<8%XJN[MNF;C ++MA-]33>#4PRRLQS4KO6L-[`)EH*2!+C`T2L";)M<.M]WNXN%PCG.-KC+,LAHU ++MKNKM;XZ[DUAG=%IRY.)R=3&2B9#4IQK,X=KFEX`F"8BH`*,,ZUPY,D@8F:05 ++M'*!S,PNPW"SDS&8S)YA;'#KC?F8SG-Z8RSW6R980F1<&',2.,TY;(<.^L;AP ++M`[[SWPZ\9DQF8YA;&CKS3F8[;K.*=Z[<7#JQEF2WBWAA:7'7>RH-*=3U;/#P ++M^?/GQ\^>O7CAMIU\TX^8TVTTOG7AZPX^>,:<>/G&GS;K#'S'K'KK'KUZT\>, ++M88P086%&G!HS"ASE<Y<,"P+1!$@4\WJ]2`4)DE1`@FVP)#3-HW)#$*2G,NKO ++M)H<,Y,D#$RD&4)S1`@G.!+GDE*<V%,Y6R8)2[N[')F&TY5PDP.)-)P\%@6S' ++M6L;:..Y<T='K<2&O+F4E8A!B)G`P@)321RX7<,$RA"MO1W#;CLF8UQ)#$X7< ++MMAL$1Z2PH0540R",1P)B4D<&D[.MT(3:+"IPHYYRF'R;1NH:Q36&8<Q)SS=O ++M-UU749B<).8AS"LSO>;&;XYB(%V)Q(PM+0P,+&HS6952255(FH<D#B4WQUV< ++M.CDYAA'GBR66+68P24)$$B&1MVF<*2AL&!@R,#,PB*K,5=7.HV\;7BM/%5XV ++M-BE2NEQ(&@29F"ZD-P/%<<;X3@$VZL6FJ*&B5-QF8#LA8'6LX)>&")J,&&$# ++M*9N:<>[;F),D40((BK@Y,K<F.)291%6>731!CDR&Q"QR8\(V1)FTM(1DZ.\X ++M90S0#(//'!IX*UA@\7!MPX")BW)F;-.V;,II;.'=\N:U[K?6:YXX>#H,,WHU ++M5!KAXR#7"4%`:S>@V34G$Z*P=77'7;M7@F3F%NYKPXNTXAN^UW36X=%W9F8+ ++M&<RFK!F"E7-I@!MEU9-%,H=>.-7(Z4Y5-!D(FQ)%()4B4BU+DEBIK(W]F<9L ++MUCI9RIK.PMBU@I5<@%HW`J1)UX7@72KDAQ5A,&4Q@S++>M"NM^/-G8\M7EJ\ ++MFU-J;22I4H49B%XZ9TUK3<-8NLRS&)F,9,QY&1%;E7+-:V%O@"H=2<004E4T ++M(2@E<6UXX>+JV\*D2550&0'!CB&R:*;C`P'CC-;:.L9AC)DM97=5W#*U..M- ++M:]^W.<-X$IX6O;))FR9,AT]LIS.EXR44L8IYK76%WN<NA"<-H2A9C7KOS'<3 ++MN\I(/"G.SJ2V0@29DD($F7<>*;)`F3F1G"^$EW.=WLM:;C<4VPFTM:%U[SM' ++M3ED.=2!>LI2CR4J)2\HZ7-F+C'R';V-XQA,\W'<TM83=HJE<V33N$\G9Z<+# ++M4HZHL<RE<9,USC-.2!2!$>YWP.,!V[:&T-=R65QR1@3:"Z780DZD[SM%-W=S ++M=[,R@0K5HM'6"JL*0RKS6PIDT35.SB:;X3O2#CF]'1<LE&D-<<T[V$6CZQ22 ++MD)+$KHJ+$\52NMM)H?3,2A&Y(@LS`4Z+"Y+9*FHGI$HO,M=T85/!S=I=Z<J* ++M+UBDE.W3A6\YWWWS>6G95%UH+H=*[K>9<62*F[JZV\J92N70<C-@.<F,+"'. ++M.$,YAS1&'"-V2FQ)046#4-%1*BA()"R[+JD[$1;+I2T,44H5T6@MR"B)@HPZ ++MEMZRE6YL'2ZV$Z*)LVFQG<SC,+-SDPIFVAR@0]F3"3MK$]J[H:I2B@)1#4$W ++MS0>B,V,V;9:V$KG%I&2VR,Q&+&O)<ET:!86`229LPL#86&:H#,DP82&PS=8N ++M%AL$"/=>U@\QW#6&9W.8;QF<S4:8<SF9CS>KF`E<'0ZA=+6&S,9DL<.3&,FY ++M,@P,M<FICQS1F2*A#4L&;`DDDQC)*XAW9QA25N<#<[BEW9&186<F!SF!H.:2 ++M8DC,\C:^')1I2/&.S-FL2Z4W)ND";+FU1NNG.KIU=(O**R<5II$EE6S29PRZ ++MB1]F9>O4UIE#42IPG6==5T)*&)S;I,114R*7#5"F*JNPUF!*"D5NZ4.U#3$D ++MQ%%$X#)0HR]GH9+RL<.645LR)BB4$E.:*-G.4EHY(WD.6:.^;D*7AP3CU."< ++M;5%TN#32WSSHTTZ3JG=W70M+DN-EX09,)KQ.79E;=.7G;WIT<"25@9,6D3%. ++M\D'TQJE#D&0[5JU)NBZD(0LPD(;VA.82$LSB3>#Y(.4SHEN%=E$JH44(NHD' ++MW4:J2H;2VQ=-V3-JAW$4)2(0-W*+*HE:RN'3<UFQ24PWJ)<5.(U[CK=M,**N ++MIBHHYR9P3LI2EN;MN.MF]D:3)S&SE(\X.PFLC?#>BSD*\*1RYKE6ZC+),=B7 ++M)DEHITO.6\*4+!.'*;FQ)P7"O@1>Y)HU5$HPHG=:PNQJ,B[NRU@3;35D.*0A ++MBJ9J[';+K)H2%0B9NRMNS+NGNW=V2A0KN46U"*LR&VA9=&1<$Q8R='.H0HNY ++MI47169.(PDF$/9PYR0T@QY-O1-%VIPU.4;IR<X6,0DA;-XZ=QU%,+$4IA%70 ++MJE(0IIN:J:IYG>@KYA9'(S.',SR!R%DHR',L*:NR[)EN$*9J68RJU\2KZQ.H ++MI,IL:)42,8YG):L3LFX5B&.BVW%53)4C3*FFMZSM=$DB)<QM;$Z-/S*YP>;> ++MG=\<YA=.BMQ++1[SB<UY1HM2)R,L<TA%LKL4*H2RX4Y*RA0L63CS'F<JO11. ++M&DR<WOAU.M;=\88YB%EH19M-S6U#>Y#2-HFZV8P8AJJL%+!.,,)"Y)<B-J63 ++M3D57.I+0I[C5(L1*1J1E4MK&]ME5*+MU)1J8E%98DWFQW>",W<2\G>E);CEE ++ME)=DV')+950Q\K*F%=6XE+<%1-4LO*66BN+`TYFHR<.<331<WAQ%O+0ZSI#R ++ME)J,R;0TD"Q2KLK0H=JF^J+:'TSC"$XD#3@:<3JG:60)S#R*\W<CVXHI+1-T ++M7=E2$R34*%I=HI#E);SK<?7;M=(PFI[IQX-C&(ZJMSRM*"4HNU8A%E;DNYS( ++M52.TBE:BRT`XBR*+,+PLNHG)5H*RY$*)42$E7EW,H5-9.<3<2B<DUWLLNYL' ++M2\;":439U1J)6WB$\HQ3E$7<%J5%I*2)45)"$6TNAI=W$YE><9>3B:G1.MZ@ ++MM\HR3R&')N##R#S>7+",9)8XK82N<6ZV34.H'*EALS<CHX#!@68R3D&W@=9X ++M)N("FN)U%'$/%QF)J-R!RI..$F$F8P&$E<.H),LV2=5S8!*AH2<I;FS,LR6. ++M'(17<A!B'6-[QI+G#1DT-SB5N:*2!K$[DBJB$H+0DB"2+%%;.9B036(=&$LL ++MN[L:EH*M%$E]5"A<Q%4AV-(DF;-9MTDI)O!"Y"G).9'=8\ASJFYB)S,H4-%% ++MI12,$<IQU<(*<2\46^!N%#APYWY7DR28T<EX:6FI,:7133RTK#DD;BG+NDA9 ++MILA;UR4>$Y;PUE.]39O2%M$ZVZ1%'=.+PI!B3:<IM(8DKJJM#&MBYS#)3G'- ++M.KO:R0(3)*3>#"E&2A>[WSHA3HKA)553$A54-TYG$5>6)M25QP^2<2+45.*0 ++M2+Q(*?5D&3-"4I[4%D;D%G(1F<&;G`N><Z*1Q6EFA!+GAH2G+$Y$$9S0>*$S ++M9INPKN3CG++CI2953-I@@4HY0JB67CIZ2Z+5N*&22@4PZZFVT\5EW=MVZCH< ++M:H2.%DRZN)5&8V5-$C=TT;KYK0JM1)(Z1@^9SDF5CG:-)6TG7,G4TW.$4*&C ++M.&YT]'#R$C"<.(I)"\L.5UVS4*R#EWJ\N:/14@V1+&4A>DFG&:.D[@C!B$.S ++M!MJ4Z,:96XTX=DR@3&Y#HY2%>,TFZ:<E+.2\TY:J<X<7PIUE='E'-Z>X\XN= ++M38G6G"9J+RY!YV7%T\T=9#.^])W4LR@VP@VPO'69<8.''-06$CLDRLQXH<9# ++M;"7#*JVI+AF*=-VG*2M6Z!2I*&.7&:MJG-[AN;W(=/)EC2/>E;ET0Y"W@M+R ++M<IR4?.NNC@VEYMZ+S'A"\(<O)5SEI22DLL><"SB,A-.*RSB;=-#MWS,F%<4F ++M26I&MDD>96"LN5A(E4.34]BDYP-TX\D"DILUYLXDF$E%E$=&L<IWQY>S><.A ++M[G<XY63D+XFO.<$FZ"[FTK'<.AJLV8E@X)*;3MLJR8-ZZ=O;M[&45E96.Z;M ++M.&+J(U4-Q+5W)T\J>OKMFQSB3;+M&9MN8F;LM*!C-5ZSNVI><BZ8X;"RT5)* ++MJJMW=LMB'I91PY@5&DVDG)*J0PT&)EP:N!ZH7.809'4XL+<,F-*!J$^)DJ:4 ++MDN:$$DQI/*+?3HTA)0E%I&)4I;AH5=*,2+2+F9&D)(HW&2<5&0<I24E!7.=" ++M3:TRAL%*5-&K-PFQ2;#C:Z7(Y>'5;PLM(:2F2YS5<Z=4ZNUN0TA&E;B\>+K3 ++MJJ\5..-"3$5736XDEZ2=(3<0ZAXIPC"9<#G@,SF>:W:TPQAECD\6Q;Q+6)F) ++MO/>O&UMO%)$4VL$MO`\":$U*;"$QE,P;RTQ&L7.:Q[ANN!Q6Y5#?-I>$-T)D ++M'`F8!B9FITYAA%2#5O9F8.@H39368-CE-&9CO!#<EUN`U10',94D45-K,((' ++M4G!FW0I5`M)J3-9BUQ;QO',&QK'<<R9NF\:KWSDQUMW6M%PRR3I1,5"XN'*F ++M$CHRD*AYC5P19!1&@PL--..#CC33!A1)9Q(SC&FVFE\Z\/6''SQC3CQ\XT^; ++M=88^8]8]=8]>O6GCQC#&,/'3;WSX^WIZ>1W)K.]NK;BS)C$:C<8/8NU481*Q ++MT4Q(2#+LHL2$@)"BI*E@LE5+NBX,B(RV%#22$@+<C1FL/,:RR<S&L;,Y>-M] ++M[UY;R\WX\.CP/':K6:Q'?,\O.8LCRL,L8B*%U9;<T.@-;7-QE$S$`&Q.]CII ++MT]M;TQ6D;J&LWA-X9AK$F_/+F;DZC,3M0YA<Q#<&I4S.#>`6:*%#8G$C"TM& ++M5ELN+G.<!IH#6N+>&J\%.#IHVZ.#B&$;=DLL43!)0D00H:326U-*I0TI2KJX ++MYCQ;=UIW5>-C8I4KI<2!HB3,P74A0.ZWO8[`XE-NK%IJBAHE3<;S`=D+`\ZS ++MDE6A(=SJ8.AHS85<C04AO>4[(LLIF\G-:N89FM+,F>9.&G77<[OG6SJ+0E`3 ++M!4,[#)$K.B6F.%+TH&INBNJ6(0IUMNA!3L+I@(4T:TN4,@)I=QB)=-W,$IUN ++M[L0AS>"YL<F5I"3K6:RCN607&)4I<=R\S;IUMVE`A<U*!#38E`@7(APW."XS ++M.IC(5QB0&07&4E(7HX>&:&)EQO0;7:":-.+I@JJA.N\3<5"")(<72PY5$DES ++M<PBDK!V"&U-L<SLF]W.:S&&FW.M7(SFKIT9V&&N!#4@82)O>+D[DI8'..,.- ++MCC+&6(T-G'&[DU3M'5&M:5K#7>M].C4:[&IDRQF]:9F([IV[.)U9,LLUK68# ++M0[@Y'5MU-19RFRRC%0S$QA-P0Y90Q))""W,-)('=T6))1%!0RU<S%.RP=D!( ++MRR&R9PX<WA2R,I7$G.9N(E.CG,)-X$.B=4X#"\W*0*:1H-;@4T5FW,1(\O"0 ++MO.:)MW'#F9EXEF0S4@8S,H4.S`H#`(;90,0DDB+E==G+LS#,S`T-G'7>_7:N ++MB9/L+=QKSS?NMG!Y#<1D=W[GEN=IY4\G:F,+,69O#6%<YYOQP\C:NIE9,,8S ++M&0M"V7%PZYNY,U$BN7=CE4Q]/=KA2+(K+VA08HFA#WR0UQB5RR%<93020LFY ++MKBDAHK%BBG%XW*)(3EDT;"!I0(4&J%,HP2-:#`*E"EES+L88.6`Q:BCHV-TY ++M^6K$N2KLM&OZE,![USN@,I]>:,BJ]&92LN76HJCK10F=NE#-)*,R1E*RE85* ++M5K2*D820FLQ+JS/@\GMKH#QQ(,5+06HUI("SVKMBI:(*^>%#K"R+%95E6,76 ++MGS[M\DI2HLUEIJ29RV5*SH.BYL\SY(4QL:.!Q=5["M6K+*LRTK!GJYELV2%G ++MR(4^?[ORTL_,SL_MOYN98_=OXO]TI?CN+8K^0Z(S/F=/"5A9YVG(M6D'3R,Z ++MJ=F<TC[FI/./W4E4CZ'I:<L',JWVA8IGBT+(3J-6YHV2J3U*+*-4]4,_0SA= ++M'0<_SG\RIE_S)=:3J)N#7,UO],3Q[&3E7,YW9,IY=;,8:Y;W#9KLP5#:NBQH ++M<O%R9;2I=U=VZY6JBK,6(+[)*^?B%]_<_NH_*/WG-3)8Y_D734L2MJ-5%U.6 ++MLPVVYRRY;S^1-9_0RF&`])QF;+P#CD$"K'MX9(HX8UAQ3Q:II+,;"K(I_2?7 ++M<8+^6OWQ?RT'[VQ17+7U3?YK,=\JN,B-?Z.4YG[4Q]_BV*[JS>&W[S_7\?CZ ++M_'TZ/GUY?>%VB6]I%T8UE>JC57D!FB]69RP<I7L.G2#4*VM%*\I//-+%70O6 ++M%=39F(N9H4OMDT\Q).^9P]H*ZPS%Z"J-9%.R>O9BDX3!SVY39N_U5O'>))*6 ++MREM]/Y/U?VLK$?"NM3R/;-N3ZJ5BRWX<Q^O?SZ?[C[')&?1J'OLEZXY\RRT% ++MS`XE?3(.EJ":2=S#KZK!2TY820::5PZRS[2SP([>O!\\LC,JK1<<Z"U80:NM ++M:>#B>6:9C7**R%E.-NR1ZPL2O1KM:W/4Z1\S:>G/?)&@Z5Y0L'+3%'"ZE#K; ++MRW;P-&5[X25[S1A21>T%<LJJTI+(Y65[IH%K6@F1`H-O6\&?IQ;N?>2W9X)9 ++M@R]3V[.U%K.B75F*&T]W?OX&E=7D<87V55:)\]^:^22B_48743425/G(,HM1 ++M>6"S&&Y=6_7MSE9;+4L];&D1B^JSDP!Z[R+`KE85GN9;UQB`$N$=`C?<=0HZ ++M\RRZ"N57JX=F3O,%BJI[53UGT2.L--"19<-UYD253:<T[I)1S:>O+;%P*B7Y ++M)X3+-&>%9S!@HGE^]_!]EQ_$NC,1C%\TOY[Z?;X_GKVTOE2E[ORAQ4L%+]#` ++M]7RC&)FH5(SL(M9HK*RL)3A?@4DH7C35IYX-)4]1:%LZ3U5K0TS36\ESHM=S ++MWY)/7JDJJ5G5/D8?!AE*%<UF=H/??S&DE&DB4.=**N]DM0DUJ9;,LHZ99*KF ++M1##DKP,MA\Y,ERLX6VJV6@D$6-9[P>JHM:.AF0)%BJD]TI':V(IPUE59G3N6 ++M=YOUB*40W!7NU21F9"BB"H+DT+,QA5!)(CZ:K@4/DHLM@:H;GHUZTK333315 ++M_R_M_DH_I:!?HQ?K^GY^;<Q?-'VH7Y4A:E.=TF?NCT78HFJDQ??L-^I/VVOO ++M]KWY?A,_/Z*?Q]P<H[E'Z7B2])&F_8C^H5EY[]K_6_@CPP$?Q_VDI>9AJ8S6 ++MJ2$FA&RKIEFC-6S)$?!G$6)5P=8TL+;@8J9*PS,YIU("T0@KAZR,X4H'LU,) ++M)+.9HSNN2U)+3.T<AY,*4(I*K69L->$*+MRJ$5GDDF5:K4L%D>.9%C*Y+D-. ++MR^TMB:+B6TD'$CZU>!-;L2SV+%4KY@=%5:3%9?/1.2++&+H58:Y#1KHX3CO: ++M90M:,4MOI&IE9*6'N+5:7#FDCE6+$UA7NEN+7<A`%H5(KAK/U%N.<[#89\E- ++M)BA34-&16POK%6?3)7:-..>TH.D@YBRU9T%9TKF5K$[DI6`=A*Q.:X_/S\W^ ++MFKZ;^O;IZ,O[^=_-EZJ%???Z+Z_E*F:M.*YI7,*S0I@L:5@Z:AA\L<V22Q3" ++MM164KA1+755^?K];Q8F/]-_7Z5R*\NOU7U^/5]?'N_"_&_2*Z5U:Y6)SC:D^ ++M?M_%=+YO9^F'WN*/T=?B?YSK,-/TSZ.F\_:M&&'S?S>5-?MI\,7*T?TSWY^. ++MDOT_%5Z?S\=%*]'^Z?O]TY1TI_OJF_K[:*\,7UAGW^:/QW[=7[3\5F?GT_#X ++M_TQKU4N/GM_*C]/KWS=[QA+^Y^=,(5K:J)^OQ7XK^-^GN]=?C\>CZ4&8KJ*I ++MZF_ESZ:/T_DUJ[Y8JZJB=8M-3EP28B*DA!7K0J(TSX/2LTU^J%(L/T_9R;\^ ++M9GU)^/KG7SS_0\^J6ITRYS\+[LO[7.BI7)(U36IZ)[M4I-"573H/574EJPZ, ++M9Z5&<K%=E6M1"Q7@YH,Y2QOI7JA6*R,;];<YN:R2J[>RN6YO7!,+));:T^18 ++M/5HK7>Y7(K.'CE2PTF<T@J:$)7RPLWKD'KQJ1R-7XFC[S\Y%T?5?BMYT+\GO ++MS_-.Q;),YX?,D4[AU].=TORZLGD\[=TME=7](?E3THG3/I?+WXNV+[S9U[=5 ++M(=S?([`^Y&49U3GORA)GIR-O"MLM*8B=6"(I)6=2I2*BULEGD%@BF?!T'LC* ++MM^2$$+$&STD9SZXL\)G0K/2=K<SZT^H3/W*TU536$A69U(^L,\J9XSM2O5!3 ++M%VCKKZ;5$E-3JG523PE))&?":F\S23`\*\"*Y$Z4*2SE!)H+"B:21F9E2"C- ++M/'&Z2$?GRVY)E?G]XF/WQGTIR8F.\WO2U]WY]BF4_U$RI&:=\\ZK6H*TV*%, ++MY-1EPGHF6@D=19GE>K[%NO+")%C\XWU/ET4^Z^H53VR]>'T^'4X>M+>7FDG% ++MPL0HLC/5'BZ4DUA6N+;=?E9%N3UC+5[6JV?*.C&NUEQF\EL!&>Q(Z#A@PJ4% ++MYSC(SGNFD:J1J)B>+[+F9V3(\RQSR0DAB:]&I^C"M0Q9V(NH<).ZE:8MA*LS ++MAUWU4-2RDM$+],F"Q)=)K"D[BNIDQ@Y[9#3/(RQKK9<L">>3#3!(Q9'M`=+: ++M<CZ]^,TXQ+H-%RM)`F6O->=!LIU$(+25X$)'XZ1PLJWK[IEIO1L06!(MZX\G ++MFK*EJNMB,:VM(2PDO5W*P]'3,Z^V&60I?7))C)G)$AADF:N_R4^48]L3+'+! ++MRNXZO%0Z#DA+N=['[P\&OS\C@]$W;G3<GA<EF5N</U/_($%6WTW_7JSOB\-6 ++M[Y_%4;;<K)(K6"HJ%K]3U8M!/",ELWO:'<M1W5WQ*=DBGGE;Q"FQC8#\:S9I ++M</Q?_H!K!X(.H^*V/V#]R\&X*^9KJ*YSXR2=3F^%]M)+[,^4ZKP]!XL5ERH2 ++MP!FMIW7=>B\,YF=8;_N(/.3T1S?&Y5JM?G\#1)(^'90SC.5<*3BN<K*S39]G ++MVM.=[<[8[=5;C*ZHBW]M:M6EE76JQ2$@OM_662Q:I3.N)M_+[3A/SJ!Y*45D ++M('['J/0<`#]A3R95-/_*Q_UV*[2V?@.)!\GSG[>9GPF),K]3H>Q\>^#X22TU ++M2_[IO;/7Z2BST3T1[S]M$X"CX4Y7)-51]$:-Q_.>(C&,9D)+)_ZC<7D/R9[I ++M=[C)H0\%SIG+,?;.?`0Z=/0?M27B'<]SS%K]_K^$B>'%"+W.8?W7_L9*!CG> ++M;[[2K_#.5VL&O:+X*HJD2'QZ__3WQ^D;O@_Y&'PW\R<F)'Z!"?QM8'!]@XT& ++M70<YSG>I<.%WECM338[+[0_RH(?.0^0A^^APD,/^)+/OM`V7>(N(IN<S^&X8 ++M<L7"_!AQ46;)@.)I$3&'<(J'0\@Q#A#<\SRZ)[A3P?^[N>764>HJGIOQNN?U ++M?AH7@QDDHC-1--^?XYTT9O0M?T=GQ.Z[YU?I.?]=)&,CI%FEFEFS0WO1UZV> ++M=">]>_C7%8](,([?YK,[Y]KT?HB#]WI^XVGO*[20>ROZ$H%_E$=\'RQO`G:- ++MY>L>M]/;-+4]2:DNSXQ`*BI5P_ADC)[,DC(S*RBBV>YNTU\LXURYFO'OI3F3 ++ME9][#>O\@M6Z+-%`O2]C09`FHH$V3_OFCP2KXIZUR(B""&F)=T!=9SW/W"P@ ++M[13[_C%53X:Y/R&&WGSX$/81BHS,/5'*Y_CGM-,JJL655S_F_C)9)7[PGIJ= ++M+:+\9IJ4#PMI=^K>H/B7FFIF:=F:0\><?SQ]K=\O'TC*YV4>>/QG39.`%P9> ++M/]K/>9KTA#_2*YLK5$+W_UVZK*S:BH9*IR>,J]NNLK._O6FX9>'5N:WH::5L ++MV:]HR:68R6OX%O6%6>=56Y<5APMFSB3:5$H4#\*]+^9(JFC3X!CCLO\7T]*) ++M8A%561GO/\M[_@[LP/&N>^RCYYJ:JEGK)9Q'<J+FJ*K53T.#_9SJGAU;XP9F ++M?2J$X(*;UD3(\H(.J\EACA/1'C9655&%/NWB!C,/\Q]]/-.]1NE%S[?MI])W ++M9#CM.:BDY/.JK'_%ME7LS4N<Y6,Z08\%ZBU:+3O04%@89,VFJCZ=R,?&V/RY ++M:)$G&`TU^B@O9'C__QT'K-/5]R=^]A_E]F\+^7^$>.'N9TCGL;CP+#G^ON2S ++M>%<KSY\I&26?@_=AVKP7?9ZRPEJ<YV_+DQD`@H<JJS9\*Z6/6X7O<YW#A1W7 ++MIKF5(/<Y\(5NW[XO#\`JNT3C?P[FO?6@QE)Z/#AOIE2XN_7ER2CW'&+`"N'B ++M_2[P85F^GDE^FK^@K:MVZO#*!M1BL5KZL*OCD%957S/M!G1VZI]PH]4JJMZO ++M_=%*WDLY/E*)LGC#QKA.*I_K_#YEV[0WVJN-MS_IZSQ*RH(`GW_BG<C_E\1Q ++MJN&%A`<D![.=XVT>PMTR3(T21?AO)UDN)/+(LS1+@;)8WRTTU-84+R_G[!SD ++MC,C-)X-\RM"$/PX,S7E2MRLG#YSP:?SF4]C]_T+$YD9G09%/=GR/3TO"SBNJ ++MW2^'\'9Y[NH./ZJ/G>?YN>/HD]BC_W>U]MER5B26B$*]A=)8TPJC!T:'/D=) ++M/`DG,RJL-3:E/?S6ZU:2@H?-/&6"U]QTVU6C_`UQ>GB0NZ->PZI;]9U=]YG' ++MIWM\I7=?N*V6J!Q=*-;Y%EC;7:V=E8'^%\P<HUAI;!(J!IH'F^`Y$/R*'GU0 ++MSA<"IHJC`KE0>*`?U65&$@HB)N=-A/Z,_M.::#ODFH\D9$04!VIOC8+UQQ?$ ++M''C?084!?#H$_@QW/W#A3G)U^@P^'T#G_)A1=SCCY[O*4L5YS49=5)?V"](4 ++MKB#N%0#RQG,)_F*7%KH>M_*XT?7^:E;P1XUQ[[S:GRA?_7.UGHHS*X9U=6?X ++MR,/>'\*]/&27_9G=F=7)R4#>=81FE9F_N']%-UG1Y7B3^G_XKV[U"KEY'?B( ++M@^?YF_*]@'ZOPN"OY?Y/Z!.@S_HFL&?3YYI(%14@K*-D,DM$Z*D/P=DT%G4R ++M%''P/BA_H@>?-V$4_+C_ODKZ8]`0"4#Z?R,-04J>OS_?'R/2?+]1<<7]93X% ++MI/HJ^P>055;*`U_:?'.8]`Z(4.&*B"JAJ,R"J*BHR@C6D&\7S-8W(;A1-.0_ ++M?U<Q[;^H#[*!_=_."JI3YTYC(,H]1RC?2`87P3J)B._X^"Q]OI/X_C<]ST'0 ++MO>'[+Q/P\FCQVU[#_&GWE@?8+!CNG42EXO%XD.Y3O_@O$J.5$959B[6P6H<S ++M"[:M7O"O6>>4G<#DS`Z90T<?\CW.USE?S9:&X$)C\>IK\ONN[.T\)D8+MV\Y ++M[WO96?Q)<P_<RNLR\XS!M&S#R-;PNU--.M4OP;%'C'D+KY;/2>,U5IAR3-2N ++M^_K:^2R2JAX&^XGA0^=Y638?]*4HP/=/U\,ULVKUV&M"?@W/)OA>^+R1^_NF ++M0<A1^++[S*+#+7OZ3^>+`;P5.62?N[CYNIN)2]OST8/?NX%*3JAY[W'?AR=, ++MJ)_%\5.$@(BP4\_]A5%%.)Q/R*SG.@G3O_L\;7=0F>&W#=#D.HTF#STGL/+( ++M'6G0OBE_G>)%+S_#=;V"#U3CJB6%*?$T,LQK%B2\@;,"*L\,K*X;D`S^+/F( ++MG3HH)\8M_%/^=$DZZ@(^Y8>J!5:8.:J!%1"56R<B6WZ-;GO7]DE@;>4EIX^N ++M!\@5$!-P<8R=)Z^'9WCF<S?T('NE^`QF,I>.U,**`O?M]4YYL4*++(]]BF\N ++M/NZ)-:V:?;6`69XOH#Y_[FQ3I*@J*D2SR!75KHW!X.D!TT&)W"B;"Y%!>/;B ++M@XH,OE(3#D]]9,ZZ?A:"#"A_W&SIT8Q>!#(I6DH9?XYT3?K_X*@)_Q\+,\-[ ++M95'L]7CQPYW7?E(/BY_PL8JFDJSRRXGGW'/=UH>#[_V[N;V('AIIE6U;%4TZ ++M=GM.>[)9Z!ZAVVV.C[:QW60&`E#ND+J1WE5>BMX%I!>^G@$E[_/D=7*^UE+) ++M&17-<]%XB+Y;8YTOA5KUGV*:*9'30[A]=5BLE=XOAF1H3X^Z@CGJ^FIT%<U# ++M1B\A(X<^J'B'C/GBY^#D9AA@2SWZB9T(+_)3AAE2SUFY-B>\5-&9FMOII8C9 ++MDHDHB[PM,CI#(4CEME0>ZL^S^\^*RN66M(8,N>B"W<,E"4^(N7:U."Q+4LU1 ++M:<BWLIV&$CVKU3246HUYF=*2C\[(BZQ37(+92JL2+-.^\]FIJ=5!F9LQ[QTD ++MUS)?BJ&MT4Y."F,,]K17EK5Z)9YYE+LSH3-E6\J7`]JK<CJJPT%?/2U+.D>A ++M)%A(K)A<.@N1=D?"=<4A1/&%:1JI2_>N%"QKS20FJ2-`][U?0_Q%QC*R;%$^ ++M">[3,RE-MG+-=C<6B@D4<UQTM%>+AQ,D[HKE,EOHSBZHS+W@@):33K&'Q&:_ ++M?:?-*$5$3XPD=_+_".\1W72GUY)-[ON@]UP/>B'4_Q5/D..B>G/7LB(@B"%= ++MLL$1&.5ZI`UO#>N5F9W*ADJ:'EF>=:W8PZ*#U'/9[X*XELUK"H>4?8[$%09_ ++M8QI7OK,YS/@^FBQHR(%^@%":R^(2.5WB5<LA_:,?T:1_DR;?O\F_?<<9?X[^ ++MW2?Z\Q^95_3^AX@\@NWVW2=*_C'%7HN"]/K+T)I\=%R1X=AI[I>50G3)%.,B ++M%8PQ+%CH)`G0'<FL8)9<T0E0GY9E3\OK)G5Y.-0E`A^"NEC<;EM']Y`T4^27 ++MHR*\#A>@8#SGPS.U%-1G>;C%RL"(G6'X^CZYRIG,/883:/V!D\@N6/.JGV>= ++MCUM;RYI+U+:\7H0BF?++;ZJ.O/><RTI/J3.<2+`<TZ--I3VXI1+8EUNNFL6H ++M5JURL^EK=#Q2M,M9]=84-12[;2PDE=:BTU+0SGDMI8N;LUEI?4Y]=2U9LNL= ++MDTKZ66>Q+,PZQ!66ZO8OJW+Y)*]2N=S,HRN(J<EZ\=C,7<$'MR)'BP>^##X# ++M^/2E'`NUUM(J%N!@'7QEZV6W[>?J[\E%915AB=M6)ROAGSUPSO55S5C!G:.A ++M&Y6SW.F:4JL4#GWF=!BY/+)[]I)I*KK^3*UYI9"6EY9D=!MSA=-K3:T[0:CV ++MX)(V%[7XTQ6K)=)?9^'1@8LHM5GT/EL5/^E8<YI)'J\J<?TZI/Z[E?K:Y_6G ++MTW[^'/[4[>J_UJ^^M\NN[OOX:Y_:)&=,Z86F-;X^O"J88BTV9F0;)BD;';N= ++M&?;V9%HC;K@S:3BA`5&4MM1%XBJJ@15Z^2UM;7]YU'2=-#;^,X7"X%VN(650 ++M=S]V$P3U0:D/Y6'%1J/ASD3];]B?>SP@X@_5%/KJ?6<$320FG)#\\T*Z(=6F ++M9S:-?YF:,+F,L<Q>8<,891AUAW_`>YFK9<L6GS2OO;2[C/+2YMIS-O=+;ZK3 ++M2_V>[;&\7EDM-WS8YIH<OQH<8U,7>7+;]BU<LM,O?&UO]13N2)^RA39PR^Z; ++M6Z:?/6[AA[-+7K`UQ^TVO<OFMK'UV>H\/!R;<'$%4V2HG2445,T<-WMRXW-- ++M+4=KMH\UJ=OIXW6+EK5$J"^<%`.%!L3A0/(UD.`N,F,AP]E)>.-4/K!`;Y=; ++M>6EO?KM(8#C-<4%PE%LZ,AA9'$ZXHAN*4,0X<.'&19I$W;&3L.--<9%$/B+= ++MPXDGI<.HDF*'%UZ+-*ADD8:0_0HWKB@9^K]WGS[NE^Y=L^LQ\:O<6K6*FK;1 ++M1,0L*F)(K-AE19(HZ*T4/DKF%4%GLGWG/+\R8O=+YE7GE^F>_YES7\>&'Q0T ++MROL0NX4K;KZ\?78]O#A9OC^,%'/X[;:7/GAQXMQ>,D*P_+CNR<L6\SPT:YQE ++MXN7'WJW7&'4B57U%G$4*H\%$8:.32I@<0#%$"&FWN,Y'YYI]??GW^H_GE[?K ++M;5N>6VKC)S+P)6'[21^Z:B).2><:<8GEY?QN,7'=F>3:2JKVR((-N'L63%1D ++M2:**PU5%<F5`Z,J-+.W=\NSN*EIW&D=OEJ51=NV3K'E9;>5SGSA[BTL7M]_+ ++M]Z[35D_788RHH2R)*`DZHQ4KBS/GPL(,&41<,@^:9QZ*.8:5N4A`E45.F"(F ++M(`(-L*L>+115WWW,_EQ\<=MM)*7S(E5J^EQB>&%7+V]V3?>UPP*)2R)*"XN2 ++M@!%=8-E"'&89KU/64%IB5<\:+?SKDTO-WMVT^+F.EM(4HF'22#5/'`\Z5=S/ ++M#U<-"ACK"M)(:C5C$&HBJJ8UA70NSU#A#3PZ,`$Z\NB6[NE*P683&=!,!6_5 ++M4@((A?-/$U\XF/%1*,>SWFM;#`T.C6BM]7`VS54A+.PR,PY#0Z3C'HQJ;L=M ++M)IF1`HHJ2>1UF@J'1='63)O#<:K0XF:35:7)K3+=XZX]O%]>^.KWN@WQIYF/ ++M(H=B!'1`C#(C"$HO1@1/<+C"K&128RIP?65XP>8H@8)T<-MI1BI-B8#@0O2! ++MH^?MHW>M*U9%'-MO'[L33URU;$Z\:;-F-)18:SBV=8E!LX_&Z2ENY>6ZBF61 ++M0FB4!0QZ=&[+P\+,Z*'H**@&;<_;?TT^?7[3^65[?:D?7&E>O5)7<`6)6=51 ++M1%<Z44P)44$XPM<N'9R@[UI1<Q9>M$M6,S%6XUN-%BQ8TF,1!D30B)2+!$5R ++M;=CL5W%$3$1$<9F."LSCT<>T*(+N-UT-7;?(+F:YN]M*(V<S+ELW=T$ML]RR ++M"JX;XL(KEQRBHJT:.0TRT)24E,0VT4ET7%6(A9'9Q<&'11&]^6F.L6K!F7MD ++MT\U)^_7MUQF1CR]-(ZJ*I[$""X[YXVBNV8ZO0>CL41;;B"IT854XT<Q:05X* ++MZU%76KPVD#^F?L4I><6H21XD0'3.<N]/<<O'5[-'6-/<&(<ECIM9LXXQVQ#K ++M7UZU>=?TX_7[*?/"='F#CE-I7''/01L/13(27UD\?.9SO<N9X'G:F5DF)(Z: ++MK@B(H"2BKH."&G?4TO1X*L#EV5JGGO3;NV9V;.6+M\TF]+5Y@_3(`L$(9X2J ++M%&>L:%&FGJB-M*HJB,C>B<5P4<833(8$"!O*7'9@2RXMP45A8)M"2J)B$R8J ++M-JH+1IY6Z$Z/#.C2\O;J[00-IR$M7..H>26#;G2I-15HQX8'&&-#HT([J*9, ++MFS-F:F:F699E*4TIII3*3&3%!LT(@G#$**S,IXYZ16Q0XH.>:Q0:9T=NW+MV ++M8<"L0E6FJUDQ$)583);D4D=9M:N.7CFKA%UCE%1%QQ&:41S=[RUZXYS'=M:U ++MU^O!YRA,LB5F9GF/D*@(Z@HHBIWT*[/(3M$.(+>GGO*ZJ\&]->5U72(B(B"" ++MX</5U=1EF6TU+*EEII:6:6669E)$CN\7C=5=V2R:TEM)M)62Q9,R4QC&9S]Q ++MF<BXP8PQAF,[IK6M:TT5AACI[<)H7B*HBGDP0-<=DT*&GRB:TB:^G`:HT)BX ++MH""1'T8>CZBXU9<1-"6[N1L"@U08YB/&."CB8R*F(%#C#2H'4DBA;&PX;#@1 ++MM1,8=4%12)LUZQF;%N81VP?976-YHLKKUE\;4CW%)&_+YMF;O->3O,WF?TM) ++M2N'RIB`$NCM)$J@@XL2]%>/%1<&^]9GEJ^QOAKAELS+BVM5FT#69B#AA*>OS ++M,_%MAXTS-5/+E((`]"(@(@)W,M\M]$D(D[;&&EB3B@/11,4O!5IB<8=!487Q ++MRXL2[T60*B]A'MX?HRX>P34(]!(2"A1T,H*3/`XN8=7'EN-AG)@=0S&-/"SP ++M8J<[<V5G5H&^8_6];=-UEXU4M9)49KSM[.:_FES^&CENT-?6KVW\\U=T\O(9 ++M9V.AOOX,>'>/!HQV[#6G:BJZLH/W]&>;I$-KQW)!SC=VY>7\D1[D$TXTDJYY ++M[_,SE:O7';W^'>TB(B)(CMK>SJ\FU&L.7'F4GV;/>]O+=AO5MJT6+6:/EAIF ++M,S.?'3;C5HQF8<?NL9C8]82WC,*>"N7IH76LB,PS,S9%=6`1W!"A.:S8Z!Q@ ++M+5L(H2-F2IF:ACC$-R9<9IZ$&Z=UMG0&AF06F='9T*:@VRIC'1Z=32)LZFM" ++M(:BJ:5$XQN-\)PH)R2CS(O+`)15%3J7C2@94[>O78[2((B@HB**\[EPKSW-Y ++M=7**,002]#QO8NR(J(H)XQP004+3LT*Z&FI&C',S)/&!LU%JFKVWO7X8)D16 ++M]F@U$4&L>'65%;-O9=J;J;170=*<4]<')C-&D-SJ!,GC&L';5Y9ZRE=OFJ-O ++M+2:7Y9NAUN6N1SS1XEV],M>$(@15%<[@8=33229E%))"24[2DDN;>1U>MX'H ++M^'8XV"@G6>ACWAWO<]Z`;RU<R#^-7LE'-?<Y"*6/6IICV,+9Y0`.XN)%8H)Z ++M)T:@)-L2J+4,9',P)%<[SD'=A"3O/0$#;'-SN@%.*\,I,M>+<+HJ'A<%9#AC ++M@TZ`B$#G1G/.(NV$1.SQ@BB.G&:Z+&$;KAY;2BZBK;X8:54WC@&R,(7JXFHY ++MX<5#3PXH<%=7AT`-.^.)^=>W&8;:>:U/Y87C'E_&[TX:6\2\>VJ&WGCQPUK5 ++M\U.[F>.;KO+RR3!*[&9%Q))L&;Y+1F1L0EB7H92A)*_$Q@HEDDLZR&B(V,@G ++M#P65"!>-FT6WC/6U#K7EUR#V_3:E><99]?KGBJ.Y2'Z[:B1M^?K9M\1/8TMZ ++M!I45"-^EI[Y[Y'R.KQ9#[8B"`GC3413V/;"LXT5K6DUC,C["U<?:OY<KN1OQ ++M[;#,HC+)LW7;'V9=_/'K,U777Y^L3NW/;N6IIEEO]-O>NF[6M9>79K;)IENP ++M<;Y;D,CT$E14M$(T+2N'!"TGP@]&PXH+`-K(]-.(NF4>S";>1P$IUUT=O;H] ++MSAB>\;MKNM/9K3,UI<]\KMDQ].GFYQL_;K=]YHWDZS5UHVL/K9LT]@X>NEW0 ++M1J,BJ'+'G$RK0X:MUIK'+ZW(;O=%>?FHYEM\W-LN1L`JI(5GALDQP3'G.,>A ++MVP-KW[.=+$;,._>C4`;9'*I!S#$`7N$TZ4$<"%T0(HG=INQFC!=F-W\R\\[; ++MO;K=LUT_EY?5I_1](NV$IUUCIXZ<O"=7JX**#T(%5$QCEWRV\MM.GS9IQ>:T ++MW9<>9:9R[:4.?C13[QVPI1[D%]94)/WM^WS1=\<(D9)I")%%G$B++9#(!Z9> ++M9?FM+O%Q^>^LUJ3;%57EA!K,^/+:E/F$@<YRV-66[(UE^FUQN.&DC>V[L^L: ++MXX\_&M6^7AN)T%MT[>P*]86"01$Y##BQY?/*;,YDR22.<N%"VYN4<-SK&FXY ++MP$DK')4#F((<(J,@J":+!0X>@S(O'XQV\.YNS>>-;WEY8M6[15:[Z[PQWJ_> ++MS.ZE.O'=L9Y:CUIF?IM.=RQ0(BX<%!,@R1QT<G*@II9#EIC-*/&0C5U:JA<> ++M7?&-^:U(,`0.(O8W(AVA9#CP[C30J-"5Z0P<N)":6\>PAR<;S@7#.3AJ*W.T ++MHC(R82\94:#C(P+.C(M*HZ.BHB86/#G&9I4'3(XPCIWB@!ICAL>+GRX;<=PV ++MJ4/C)KO7G!'+*:9WCF=C)N2L.AV0DFT+R=<.J)T*R$K(<5%*IF!)S781D8., ++M,(H*VX*@"[+?68<[=_-5NV\>LUF&MZQ^6;9-WT6*3G!WHDC>DJ$&$Z0H(J2I ++M2CE!3"8G()@LXEPA1*6"$JCV%Q7HN*B&S!1;)2V,J@3CPIU@%"B\C2HAH%"C ++M`T*CP[-T1%%6;;#3Y?2_D?<??9'_G=_C]0V$[#SP)T6RG_D"LFZ4Q*&;O$4, ++MM#>E:NHNT0VI%FJ5GM>[F2*U:$RP@CMUN2JJJJP5TXD@<CP:@*B1"VB$\ZYC ++M,+Y2:<3'/ODI2W_/4#PG#C'JOG`QXM$#'P=W<7SID'O#>H=DJ"??]7OCA/\R ++MR\CIZR]]=N5=8R.H=XW/0#E'<5JTK<M[.<SSS5"(7#GI'*B*J)YKD70>=QK] ++M9R]'OGHI^K$+^MIXT9/L[JOB\`(+Q>!)N+N_W\HAX9-^E*KJ_/$Y)_@)W=_! ++ML4FDEU!4/="_AYH,(G38W(CD1%$$]*H@:_?L[5T9>4J,H2%3)R>O8<.U=BUM ++M5K"[PR3>.&9;*M!E>7U;T++80]`@J'ED%$%$%0%L=>5D8KW+9)<4N#V['UO# ++M[O5"RA%#+H%%\-6J^$U9K)JG]C_\><=8KNW:[L/W?M)\*0GP)S@GZB>WT2;? ++M>?N6!=DFTBGY@`*+)HE(I(T2$,:9^8L[54H0$WF(@I,PS,`"0X[+DT(R!<7) ++M?>W7-PH_9=N.^KQT2.(X/D\N"ZML#J!=0%!K6K:T_9MO'+!O*2>HY;VWO3F+ ++MY@88%#F5W+<N>AEMUQ,JW+ERA##ES-SB$:DR73T$1<E5`.,=A)D\.LX)L'&@ ++MQGAM,ZLG>G2F>C?=BS_TG\SYZMOT>JG,M#*&44444,_FR#^9`B#`).N/93B% ++M69`Q6>O3C7]$@WSQVY7-[XZH-"G42`74K@S0@Q"I,*/0A`R$.\X3#1*F5(%* ++MZ[[ZS6U.-A']2C),E&282R#K%%Q!S!0P4S$0P4S$3,PY:9A<PMN87,ME#*8T ++MA3+C90H*(TI2TMMI"=>F[Z(BOOT<//2VOH[B31+E[Q9<S/F?$L/@E`Y$,F9H ++M\E\'LAHA2/+%,.O,2@G,),E3,YQ1\YINR/65=Q_,JXRNB:33`0X`50AA5>^4 ++M0NFC2B&M8(F8\;7:B;V[T*:TFMBNP3>TP3,#9H&F&T'!<3%S2%RI<)0J4*/C ++M;&511555A%E=55,19]'BMEN7$07\7:X"`K#B9GYIR6=,SHXR-"X@X@XE1,$P ++MP1$P3#%>A"DLBN*:8$IK`_6)/G%M?P+,"S`9@,P,P,Q1C%&,*L8*TJM(`4@% ++M*M(D0I$HBI")*H8,APVP9#B28XHMC&,L;;<PQB7R\)1?R:7CV3,UU:87XTN[ ++MN\/W[RS,^=?/-[WV_B\7\1WJE".*R5%%0Y.B*BK2'$(4.B0H3>B:-**`8&'8 ++MPE3"%<E,E2)'"%,@0[*L)AHT*Z$D`JVTAH8C#3-(PR,O>.-\&9H@C:%(32TM ++M.K:;2G:[I#:BS468)?$QQ2<S20HTT2KCE[*>&&S,FCH.!G,$P1&D5`(,&*9I ++MALQDR26Y:M;=RIJE322"2$)22$AE($"1@!@8804[)V`7=08D!U(';*])Q1!Q ++MH45!`01JB-)$E%"<XD_90E\F3ID1`'%E3-B\EX0M/3SEOK&)4$B-&FJBT::H ++MI-&FE$]\`1=#"*%"*RRB%,EH!-0@[*CJ'6!8$I1I%H`*0M2MU2UQ:-M&HJ-2 ++M5&M%4;446Q:)4U9LRHM2A4I2*8:BVBT-D6%DJ]2N%D;-*E)12I%$P:214:** ++M::@J)@,==77'7#6M9J@.8=-$F)(RTT0Q,4T0D1QON[&M:UOBFIE,:HVHJBFI ++M134FQ5*ELHTR@FDK(5&RBC#3-"8F4J)M)BDEJF*@)@[%SG=K7!G)TYWO?'5L ++M>V?SS3?\:UKE?P^,GII:,&8K�!2%`-)",D*2C2@2M<IM<52FT5)6QMJ+22 ++M4FTTE8MI##*;(E6)5-9:39+-DLTQ,3,R6:44)*163:9HIBV+2RQ4J2F92R95 ++M,R)ED2M%:25--J38VC4QLK*FS8R9I(J0HQ1A2:,B9@Q*,FRDIB2:%84LF+&& ++MC1J9)F*QDF(\>PL,!0B"5$%A2%#D7JRZ4D>6M5:F"[EF33E'N#7G\:U:8\=; ++MW57DQE51LFG$RZ-TJYGP219H>$0"B8$0B25(!D"!<>07<NY0Y,I#LT]##`#O ++MT<%<?+<L)8QESD)2J3X3\Q-LS(T\WZSHGX8)='RX%(:>BG7K;;;;;=BP5MMM ++MM]56&$A"54>`"A24#%#:F$CD%=L#^9+3/<N9-M-H(YA1F`K&`K&0)ED"99!6 ++M,@"S*JDRJI,(`1"`$2*,$BC!*@0RH$,@,C(61BC^:&E&M#4FK0U)K$!PQ$'# ++M$0<Q$',1!!$<&28RJ\QCAE513/CL;**JJHLDF=J[OUS9\ZRM;\+?E55=UOS; ++M^?#PE/P1)Q8A$1U90.[N!<E-D@^[YT;@[N-.A]*:223YAZI9@<3R?+QP\3Q- ++M=YY'@>9SF1SSX[[QO/>;\U]^/[WC,,P8P9]-W^4O[I96,A07M_]<_*_9^V'Y ++M,G,A\<#_#"$DZ^)Z)?J`A(UO#!]J1#/)VTD7^HHUH1<SE<PV5>P("Y#`#(4" ++M&2D*))`$)*,/N@/I/2>AAUU+S*1HD8+`L,!DT"KB*.)I'WR<+$)A02D5(R,1 ++M4P%##$4P%"12!0QR4U*/0M*-`:"THU56A:J-`VV+=1L&H+134-K:%LIM&I)J ++M%G^56XXV2<A9QP9HJV']W@M;X9=FZ5P.X+7'5C0-U<[WGG:->WKMGAC01`<Q ++M3$)(0;4P1,74IF-5AV#RKWG.=[1KQZZS=.SJ:K^3(1QQM]N1!;]=>Z^[KH`U ++M@2"!&BM8FL4UA9@UX6SQ-+]JGSKSOON$%%&$EC)(N)@F)VH^"#(,Y3O379`Y ++M+EW4W(7$A(=(<*#(,.1.=-'80Y,%$[AHS#T45X9BC(\+TDF^[SNC8PO4MM3) ++M/<&##30HH\/$8>A(6=O+!E>%:.**1\I<9W"%PVSY>J_A=%5Y3N?+-/?)]Y^\ ++MZU+N17F4(>'C33BCX,\,=$\?))^(LER(?CV17Q:/W6/)]U[YSY_,,SYF5)ZY ++MGXM^:\E&7\TK5NWZ;5X`R3PR=.GQZ>&(L9W&JCVFE`CKZ'Y'NF<RY]5[[)S+ ++MRO:L>3G-JM]W-9,WBOM6>F=\CRCW&C%[X;9I)IA@[V\&?*\",0?/'CHDU&YM ++M>6_.OY.YCLV\?J^?"=Y;?MR';WSU+@UJNRP329+$AB3&'8Z'3H=%19J&>+HH ++MTXCBE#?4.LY%NYRT^RL=:</?56*Z+-$2B%,RB()`40,@D4,22#4XD83$.C0X ++MF@AQC"Q(9AR&HB),E#"!<@PS&ID$*22)$2:<63:LMH<<&^XDG8\+N]O)Z_5. ++M[2R_7-\/KRJHOUW<E`A%%>-,9I[N&,\8=0SQ.7%%8,Z]]ZQ+WDKO$W[NZW[O ++M-KIO'AGMW;[O5)XTTT]/H\:;&Q933;W>HX[N.+?&F"HD1X;EY3][X]WHDQ9@ ++MBQ(XPDXPLHL8S2Z*/A';9L\C-F[I\RJNN#YT;1\*&.**BW3;NE42AZYIRP>9 ++MPTX;RO#M!.BTEKV<Q!1.LFX(+CF>1S$S`PTS/S9]3UU\P\AY@S*AFB1J+(E` ++MAF%1F0*4(2`;!P`<*Y0[)Z_;NNP.%3D!H"1A"EPQ3,A&6*,&59?A<?/S#O"" ++MX&*AD"LJ$`T`3@"Y"8H:/*9@RQ,8&+&-,C,))IHD*C0CB"8`4:&!,M8+@9@X ++M$0FH'"2FEH2D,64RIEQD*3;F63E*CDLB(20ET9(2(9!+.08+HDS4F*:9<;"P ++M(9(4Q@,(`PD<E"J*UF!$6$Z3`!<E`H,K=NSQ7CKQEX3N0:J,PJQ$,09@@%*5 ++M(8$<8!RN4B^>"LZ$&*7P@LQ-P\G1$<JJ>/@/454?GMQUI2O:9SC3H,""+PPP ++M)Z%C%$\6,-F82Y@8,%&28D``K,E!#XQA#<X8$,H<+AAXLJX$@T`\P";9&UDO ++M+#^Y>&C*JR.X'K"M0S">8`@ATQ-$+[,[G1T=&)P]V=T!SB('`/I`E=P<L)HM ++M)/#IR=0XW,Z3A-\9O9RR/#:(>X)7I+OH8:Q&[YKQD^QEDO+`=Q$-V+,`:C_M ++M_L'].#MS[Z.+_!Z=ZKY'I>&8()B;,DIDDR2F3*9,IDN#2]?^_S^Q<^(O)[U; ++MV>J[DDR222F92F9&4I2E*24Q,R=6U;;G)2(0(3"$A#,A"0@2$)ZKK;G4DDB2 ++M1)+*2)"(9$R2))DD23)(F22$0R))))"$D@2220DA"$D"1""0)`D$@D$B20@2 ++M0F1,B0D222)DD2D3*29$I$2VS6RUIM:6TK2TK++,B4FI::E32S#&,@P&!,"9 ++M2L*L59;95*I4V:4D1+6596RMEJ6IM*RRS(FJE50K"LK"P$!!),$1`RE;-9ME ++M4M-I921$U*EI::RV;3:5-E-,I)&ED6$F43$&(,$R)B2%)2$DAF*)%"10@5E% ++MA0D0D2%)2!A@B**)42%$E025!(56%5E$)1"$242%($A(22&8)C(6!8#`8&!B ++MC%&`K`K*K(`2`2K(D*2E6669$JI;9JI:I:EJ:E2E)$29D3(DF21),DB29)$R ++M29$3))(F1)(VTMIM9D965@("""(JB%85E0A0D2%)2!AAF**44`E4&*8IB8F+ ++M%AAAAA@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ++MDDDDDDDDDDDDDDDDDDDDDDDDDDD@;5+5-4M34J6EII9E)-I::4D1*1+2I:6F ++MEF4DV6:TMIM*RRS(FE)-2I2DB`R222229:5*E2E)$3)(FM*TMELJ5*:9DD(9 ++M)$MELV64TS),)IDB)99E)-EF1-:5I:6FE)$2VEM-I::6922-FS6;2TK++,B9 ++M$LTR(EE,R4DK*RRS(FI4TLR(EE)22$TID0R2)D1-*5K4K6I55@`#*B,J(P"A ++M`*$JK*JP(A`B$H#*`P"P"PI+:FM-:5E999F2)LLRDDFTM-*2(FRS(F3*29$2 ++MD03")&21$I22D2D1,I)2)D020R)"9"$0#59595E6:TUIJS5EM+:;3:;+,I(F ++ME*4R"&JE5*I5*RLK96RM*TMELJ:FFF1-6E6H$@2!@889F%2%2!5@JL*,*,!6 ++M`K($R`D@"R`+*JDJJ0@!"`$BC(HRH$J!(#(#"A"TUIK36:S9LIID1,@*(B*D ++MBBL/<Q10#$)$0'4H*S*@1``GTH]O;["="*'`RFMJDDDUM4DDAJU2B(B$5H%" ++M+[[S=AI`=DB$0D5LEM'-;ERM($5JYK9##%0]O0N*Z(0SMCW#](4]8GB>0>ND ++M^`J0^,E/K_65W.&XC\=T^O08=%CW,/FO!3Y6V^O.8GQ@0^4[#,#<[+\Q`PA" ++M$=1S))$#!05A`0R8B(B[]">!K<JHL16A&1%`Q)B)LDF2223(A)DS)!(2\[=: ++MW.J9)))))))*UMJ2222223)(22222220R.5.$V@F,:DT:DJFH?K^;!4V_NCJ ++M'FAY[Z'84\A#LTTE)04%-CF,R3)Q%$47X,]U[X2)U\!8^N4SG?CK7/[I]KF] ++MN=/XQGY[^7K]1=8I']FFB6,07Z[Q_.(1K*O3^YN_@92D6*1A1%3SN_0"H&M% ++M1&(&7`A)"2$P@)`@2$D@5:M6!)"YN7(0DDR0D$B)`AD2)`0A(0D"0B(B(J;G ++M2&M*("-18\2FM&CZIM^N$!P<$545,Z0]`^)X'@=_CADIF9%]RW^MS,B_7]/U ++M\_SXL;;&QT=\-HNYN[KCYQA556=XF)F2QB%8H+*$(0A/K.GCI4%8`%%\B(NR ++MFC-$1<].G***+QQ1$5$8(R((K"&91J&:L:'F304JQ0@;:8Q^=H/D:MF$16D9 ++M`55CS#E3._#,,5?D0]:6[N_+/>9/D4[!4Z.$)\M/D*^@UU.M'!VX0`0[*BDD ++M@43,D"%(DS`4*$0QZNAKN'J1XCXE22$D@Y;<N23,DF1)))),DF1$DA(DDDDA ++MD<LY2+5M:I+A(#'#-L@(KK1%FG6J()B(M5.-M;:J.5KE<R!)))"$(/H?`/F* ++M>I@!Z?$]+EJ*K!FU$33A;;WT4]XQE*=+O?33.NSV()\!LMUV#IPZT:T;<-$1 ++M$7;KGU_"[+W-),P04DP7>2N,**A03!002B4#,!$1OQ".R.8Q%1'EH$UTR$@9 ++M)))))))`DD'+M;VN[N#:M:V0A`(0DFEU.2/?=7HUWW*9``)(2!`R20D29FFE ++M*2")"0(0@20D(23)`@9A))"YKVI:ZZ4@A"22"1*2E-FRRRRRE)DB0D"0AD2$ ++M@9D)((S))(9)`4IE(3((DDF1"$)```"```:9)`"(DS))$C1)&1D9&1D820AA ++MF"8D3(:::FI4J:EIJ6@P1!$12RR,C*RL+"P3933(D9FS9LV5*FIJ6EIM-IJ: ++MFFEEFE*:9$3)LV6EI:6FTVEK!&12120&0&5252$&$&4242$2$2020202024" ++M4"491D"0)"$D@B4F1$@D2``2222$)))+F]WM=74DDDDDDD@2222!)(2!!)$D ++MDR0A()*:9$3))(3*1DD`!F9DD)"0`@R"$DDD)))(20),D@DDD@2$"F$(92D7 ++M6Y<@2$B4B$DA(DDDE(B24H,R20!$B21#(D)$DB20A)"`$)$@)``FMM:L!)`T ++MC(DD))!D229)DI3)(B0$DD@)"212D@A"4@@B&21)""$`3"`D`229DADI3,DS ++M))`TTTU####))`0$+"RDI"0C94IIE)!`$`D),@D$""2&1`B2$B3,S,R2E++- ++M34J5*E2E*4D02(!))#)I2E*4I3*3$2""2E++++,S,I21$B$`2$(0A))DD)(0 ++MF"21$B2221.>DJYT9D-,F0B83(D)(D2$QDDF1$)(2`2$R0)((1)(D)))(!DD ++MDI3,DDD$D(22(2))))$2(2)*4I2RS2RRS(D2$DDB923)`B1)(2)``!E,R2#, ++MI3,R")@!(S--*4S)$$R"20D`DD)!F22(0$DDF9)(@!`)D(`1`B0(2)))$220 ++M@!(0,DB9!(20A),DB9`0DDA(2%+E>[KV[SNK7E[ER$5414]J6B/PM/:34]NN ++M<Z*=3=VG'^AM55?K@O&NJ="7R/D<1(7$0A"$1"$]V_;Z=(E68$"E"`0$D*/H ++M'I>POH]!@&83&+W9A?^'!V:541,`ZD6M$D9I3K`B(.)#\P-XG0CQT=O4'X(B ++M/T^3^M(^G-254.J_9C_8=PZ_<V9A'X42]SW6L=?/[&][?V/5^U_9_0<6&453 ++MZMA$=M225_=-M%9@+36J/VM57K+EN50>[C^PZ_BH>X,PQB0R'HN>_=+BB?!& ++MIQ(0D?#HG4?;JNM>]M<Y]:UII?+VVM0%;A#.Q`F,=_?@+0GMP:-`BJXI2IT9 ++M/![A%1[T`"`660CP8B>[C6CQVV?=515?BB9EB%ZJ?"2GG8C(VW=RK'M!XXS- ++M=SFG]F]YOG7<SU_;F>:OS&:*("14.0`5)`$^9Y)Y,1$1$4DDA))W[+:N=2$N ++M>VMM<ZDDD<VK<W,<VKER0(YJW</09'8;$%%P"Z[-(J;-])U]+/:^PF4B@&G0 ++M?D"_U6]/Q8A-I543+9BNE])T9VT@J([J\W;BJ"KWN;U5:.U_7RMUDS=72O'Z ++MPHGH>^'F)*::TCZ5R:\'5VHV\:T;U'T*Z.0E>Y)\O0>V:UB\3N55^:?BX']3 ++M\=.A[YY7=U\=>/UO3]9^KY[/K6\RDJ)@@]6+E$DDLFR:2$0QHV-@?XR2,R0; ++M"Q!O<U$TG6/[QX_QCK_&M..'^7/7Y[#]B?M9EHF9&-BC4FF\TEF$Z)TG:JFY ++M.._P(:UFC-9HS6,QHS`UK,T.9@+A`9E@&.!111@9A0U5""&7BJXN;L"3"3<W ++M<0%*&P)EF3@YQJ/YO:.]['>]HW+;;:&JKO<[+;KL&@<4G%:N<AH7%)Q6KG(: ++M%RHG%:G.1H'*B<5J<Y&@<55RG66UWL=SH`Z'3H%4,13*J]%,)V/3HG1L/"CL ++M>6M3:\/+0\R.JCL>6M3:\/#2>,'CRD\FC5J-W[G0>.CPG2#7!154E40*=$P, ++M<0J->D7I8#HB"A816B*@HBXT>ARSJ\KBZ\$S1YYQ8(CEE<ERG&<8F:@0TLD( ++M,HZ74%)08&K<W2-&QDC&DHYFN*5KPS:W\QN;7A\Y\?9\TZTQSU-JSV4<"*"1 ++ML+.,Z.%V_'F[GM];LBE*B?@=SV'2[XDTZ`QA+4E!@1`$S9K&K6#,8GM6;-WQ ++MC9ISA\_//KYGG\=>-L?II?+&M'Q^LMVG''7CSZ\L]?5J7B)(\0B9@\6**B6, ++MLPSH\N#!Q,;%1L,KQF9%^$492')4>Y7FB/$X6EUE!A1HRO&F87'A11DT3#)& ++M'1>"/$HL?7AW)>=.SQ.6;U52>S<ESMF<MY>I2FYVVAZ8:<>$,\Z+-/%$LWV3 ++M>%F8;[I:/2YZ]GRVTZO7[;]>^]E^4[RIWO79[VS:K9T"X46,\>.+Y%=1XY&' ++MCW>E_*+,-I5)1)GPM\\S.5^4_*[?=7.O6O.<>?+^?/;MK7R'=5J\A($H2($@ ++M25%>^'M-.;)HP\\HGX,T\^X,<Z631Q\*,*+&2(O/GLSO-BZA[\S<=?+[-^9F ++M3Z_(O%/LE]E8W=RK2!(E!*$($D@(N53BW*,XHHHC!$40@4>/:7Q6LPU>*)U& ++MFHL]Q+6YY^?O/FMQ%=,[.[,V>[*Y;,U)L)(1)"B588&776:8Q1M+BA(I`,2& ++M&J#1<MTVY=(HL;%BQQKBLPQF9C!F1IC^/X=7#KJQAC`(F8PU&.JHFG1IS,#' ++M4-F.5CC<6(QQ7!&*ZZJXI74",3!R*$P9PAP@R:2,=3HT@JI*%(4HB8.C,+"P ++MLU"*-G2CTC&;1=E.S#U86H?;=9-O:YN7=]EK*9F[6%W-(J3X<6:.R1X<8^/' ++MK##I&()\E?G[VYM3G;>Y[O8;I+17,-ME\^+]AA.(\>--DW?%511WLNV]OV9= ++MW9DS[UN>[U565I5][QXPXX\S#"HPSU>]F]WO<[R@D*FADC95#&U5?+I^QO*R ++M39*"3QX^(Q)X8969&:5)<EGP'#*;&9"$)PP[:::>O&99Z]N8S&&+,9CW^&#$ ++M1;X[D%Z)V7N>B@\B/(=7M%,+C'KU\\?QIQP_/7Y'ME68IABADV;)&U;K[]-2 ++M:UH-BRF5E*VIJLJMFW*Z!4;`41I":/&OJ7O?/QO!3&DE*I*0S(UC4>5;6O.J ++MFVKAI353:<8_/S^.OZ-..']'KYZ)^[$X!0(E.D0H12$PD7:<!12W=MM=*BMF ++MUW>&)DB8FE<FUQJ38BI38Q))F:*8)$I42)1<TV$T8,XQ8916K")`,`AV6*)` ++M&AW(8FHT:"A))(EK#,66:,8SOC'CR=.VM9EIYFC>6K,WJU(QK=-KBDKJYM"8 ++MH1FQN*XC;E-R8IE'-%TVY31I;IBB2ISFY,A&(N5&46!.6M8&LB$=+"$C0`2! ++M)#I=28FF3`U`4!5.2N38PPTYTQVMG!W+,&966:-L:C4TZ#35.#JIR"(<FDLP ++M,(*"UI#1J3$DK)L;,`E@DPAI;PWN9O6;WMJMY,S3,]]>O7D\LO%TIB8;J*!U ++M>J=>H,(4BTRO0(.CH.!(@8C33C#Q(QAXT\&J"(4`1(%*I2!&:E`A58%A(6"` ++MB""I$'2)J0GLR#$#@,!-"`T`L$H3)",`$P+0($8]F$HH"EAFC7*P29J4'2,C ++M4+R\61G+L9F/BYPA:H+O;6[*/R%O`!=12X$GMA`%[AQJXY]K8\C(?A'8P'W" ++M5._9I?6GJ5]@E?7>-/Y//-WYUY-L6\,!.8(S#3EP-YG''NF6B>M!)F9(9:UT ++MP_Q'MJCPSYE_3+^E^7VS33W]OCN`=">\D`-R"S%/1QZ=,V3='`QLF/J)F!W; ++MCX>.R-@`(R,/0E)ZBBK12:+N2=DFQG:%`1*<-C`<DZM$$1C@81DS/X?XA^OG ++M[\/5\P]'3O$55?G/63\$^@3KYR<OU.$#>$(0VX6S""`MZU==!(0"`9!($DD( ++M2$A)(!,`)D1))))"$DDA,B2220!XZM75=9))+OK;STKOM(+:U;$DA)(2232Y ++MMSA($!!2E-,DB)3)$B1`D),()"1"`D"0"0#),TR3(DD)(!`Y5Z375U)*9))) ++M)"20R0B0))(1F;-FIJ664I33(A`)"09E*9DF9E,B212FFE*0D(A"223$D(0D ++MD@&EV5`$X1XT_E7B_9*B?WJK][Z5_=I:Q_O55>H]<SK;W>M>WOIGS]K6L?WK ++M,]3^"8J6,E`C`/1A11/'J(>6&*.)A11%(2`DDDF3))))2E*29DR21,F9(,C) ++M(0(D9DB`D#)(2!$@9)D22222!)($@YK6N7"$`AB23)`YXFU<ZR0`@2$A`DA" ++M3,DB3,R(D)"!"0@21Z=6NKJ!G-LM;6MQ)($"0DD,N;7.,0A(DB01*2E-FRRR ++MRRE)$2"0$A(D2$@9,)"!(S)))DD!2F0220D3)(A"$@$```DDDDDDDH0A?@OQ ++M\-#[#D>DDN9^8V78SWO+PWREML[.0G(_`\#P?@>D=-:YZZ::U\]>GS^97&,8 ++ML8X43^O]C,S,P1`",B02,RI4TTTTTTR))DS*E3:;2TVE39I9D1,EEEE*6::9 ++M$,F9,DTIII999IF2(D9FS9LV5*B$A(2$)"0L+`P,)*0K,B9*4S),R29)!)), ++MR2(F39LM+2TL2DI",(R*2*0`P`R*2*2*2*0H0H0H0H2(2(2@2@0#`,H2A*0D ++MD-D2)----*4S---34LLI21"1,D""0`))))($DDDF223(B22$)))(&1($R9E* ++M6;--*4S(2`#,TTTTI33399II2DB"D$)))(222$DDDDDDA))))[6O9+<Z)`D" ++M0R0DA"&$PA))"0R2(0DF02!`9D2))$*1!)"222$)($"$8$DP(`0@A!2$&$D) ++M)(0I#,*9F92F$RDE*1E(@)$DA"2&9)(D0AF2))2*!,B&222E,R12DI3,DS)) ++M`TTTTLLV;++++----*4I2E)D(FD21D32,S"22D1S2Y$2E)))(93,*92"2)F2 ++M$@2`%,R,(20I3,I!$I$A"9#)2E-*9(B4DS(D29F9F22222(D@(22$*7+R;77 ++M4,B2220AB0@20B024III2DF9F9E-*:9B(21"(0)$F9II9999F92229$,93)! ++M,()))#)A(3)DC)))"2($D9D!D3)&1#))!)($`DA(A%F$DA(20)(2,B1))(B& ++M$@$3("$A)`"!)`"$DD20@<KESESDA"!S;NZUU$)`A($``DDF!)$A"$(20(&D ++M!)")))-,`D`DDF1"(1(!,)`29F9992E*2")`&9),D@!`A#)2F29(DS#(`222 ++M4I))(2!FF::4IF9D@)))D$F$$`B$2$"$DB$)$@*1)=6KG$B$D@)DDDDDF!)* ++M9)(B9)($$FD9"F2"29&8B`13!2FFFFE---,B022"$"2`S,B)F0(4S,S$I3,I ++M$ADDD3)2F00!(,B"4222$DB)`I)(0D-(R"$"3(B1)))E(12E*4TRDF23,R") ++M`````F1(DDDS,S,D!I`$)(`0!(```,B&1`),BE*4V;*4D0@``,S,I2E,I2F1 ++M(DDDS,R0%)),F1E(F9@"0))))))),S,I2E--++*4S--*4RF0F)C`1!;@\3E> ++M\J((6*)`+3&DRJ2DLFR-AIM-,TF2U)4EH2J+*]GER922)H4%'Q>G6%D",9A: ++MJI^9=3$8*$MC&R]J]CKI8HJBVDVI#&49DQB6,CS;&9MF.:-:YM^G1Y(?%Z'+ ++M,LP14!0$5!0LMJ9:&3-L6F"E39I314:4JP;9C2I*3&J38*K)MDTS;9314F3* ++M/ZO%)4ZJ1C"I-1!?T!$-0'3QWH$>&1'M/,(=&7^/`]`Z&"@/XGF=!?)`B0\. ++M-&@T12^%LL7Z*F?5RRS\3^*GN24'Y,/3U5LHQ'JFE7H\.S5U9["J`>?40Q#2 ++M@1(@J^+*DRI0^R1"?S^OT#3"7],R'N.`8I,C@&#F"=/MZ[NE/>UL>)86MG6! ++MPO5,`[.C4MK@!AUV>Q6WW)K&74VHT),$?1XVF)MS!,5$499"A,=K9XQ58R06 ++M,@_K]N_;>$@CW`DP*%",P@@1("E"]%U"""!Z)(^>8HO/E)V!\8HHK-\+<1/6 ++MFFF[IN:4I2E*4I2VW/?\LDF=D_!,Q/YXWCCUW=W^62<555KOX;8KGJ:.CLWR ++M=&"&9B$"8*&$*LIE*-,TMJ2QK)EC-:VDMM%;;,M)I,IE%*6%8(!5#R$$0Z@( ++M*NI!_$A0./2\&K[>("_3A11UZ/$T/@$01$(0GQ<1<5$45))"3XD)/F^7S?+1 ++M7?F^1T+U3HZ%>$)R>7>CU.D7ON$XJGK+.XY$P[2J`CV`1%U*J"'F>)@I*J+` ++M[#Q[A0ZD@G:&>T&+F!$2!AC!/:T+,,,L"3)">RBJJ+GJSLK29;JLN8B-*/Q, ++MSC(B"S;JJD("#N-JJT:^^XF;IQZ#I-(F(*$1$0A0BB1(.^_A<>RFH5TR-*>" ++M0&0,>'"BH^!*`AW0(45=>7OZ;WLU;;;2T];;S(=G12WWEV>&',]R$A(AF&=# ++MJOIX="IT>8GHGP2!(>J4D2DS3LQD4IC*)688PA=\H[9R`H&B1!4R5`?$`5(5 ++M7M`@!+@?OTV!)+9.@<;9^%@0WBA+^?Q?F'IPE1"\*@G[US=3%DRLK7W^V;;[ ++M;MM]#=:<^ZRO%M!N[>!OQ1`7^&VTVN7S>V87C^1O7WNO=/+V_G/TR\&A]&8_ ++M1_%Q<]/H=$HFV4/102)ZCDOU[\)QZ//\3['ROW'M>K=]DS,@LR9H(@7`I660 ++M@A*1*5KYP^L^P1&B)=DA0C2M!<%]D4B!4$B44:%3(')`<AR2E%PPQ0=$BYAB ++M++"A]D!-.B`ET*;$TFA+1-RXS?$P2X31,$5P'6A-"*Z!Q3$4<'%,11P<$<04 ++MQUH1T@IIZ:130"&V]RFQ&V]PMU+=0[US+NH7:EVH;W5-J/XG)'3AF8=U5.J. ++MIV1R%Q%RERK@5WS+R%XB\I>*\"N0<I.2<JX"[YCR#RD\D\#RJG^<=AU)VKHZ ++M%[[SWV'J3=7H]"[%VH[$[KNHPZ+WU[%Y4>Q/=>ZC#T723DJ[$[_A/W/;DQ[% ++M\]9C%^8[^HGI5V)O]^Y^N3'Y+4KU!RJO:&[WWGHY9ZI^_7)7Y!Y`_4-W[]S\ ++M.7XF)/1.0>TMWM[SV>]8GY^L8;I/T3RJ_4MWZ_<_3]UK1:4]4Y)V7L./6S9K ++MHG3G6M!,=4[$\#%,22Q14I*5+)2.%@4D3P"=A3H*=2N0X_-N-_IW3\;8TGM. ++MTT\KHR`HT995P.+*[O*M[M+T)(2@$A)+1&*,45BBT6C8#698>LSTOR?%I\OA ++MZF_SCKLW=WT191(41D$D2PR"XBL8RX4>^;@M,2VOE`R/$21<'B,(LUC+A'O; ++M@M+/&'"#CLCT5'&1T3&PSN9Q[NT^$K"O=6B][ISRU>%XK3X4>-CQ(:,]4;\W ++M</A(C#BOE;"]I8MSWQV;\)D^#]\]9ZOGO7WKU3)9>7);ZNA>/7N>*,/$G@TP ++ML]FXNGJ$9"6`CV]V[ESSR?56;[KK9F<7,1HEN*?2V4"$"\9)A\&269AFE%'S ++MY)\&,69O',9-39[V77SXW<^VJZK?SY/,N_DT7ZO>J\]=R.V\NFA"1:@4(CTE ++MGBA2.7IZ&#V++/'"V-)*BY[.M5DY>XB[],I>OWLR_>>2:RO&DLD-+@E)0H$H ++M$A"0(4HE1"B"42H0()999X;T7<,?%&FY7C+-\9M%E%HVRKSW2[NW[-]?JUY7 ++MM]KK>[:]O%7E:YL2Z?0-5`E"A1"2$FV*4TS*I&B0B;1B62EF<EQI2I499LD1 ++MH0;DN&5-BS(LTJ)-))LDT9L(2:]7'C>?IW<*$>PF22N)*TFQ$C1WEQQUF%!P ++ME+?C%N:L],SY^I^G'-52G=7>]GMDY\KKCAEX8;AAGCAE&HTTP.]O+W7[WLS/ ++M<ZU:;AWMNLILXKPR_'<:::;119I)9IQXP\<:;'@]'>-),K9W=ONW=VJO9N][ ++MV^]QQQXX\O=<6666'@9QI[CK...*WD<B3CC<XPT..*1O<^Y3QW?*BQG=XXTT ++MT^=V=T\8''A_&TVSE"A"/-0QK36GRS6+&;P]T63&IMCB_CK$<$6R5I8X)<E? ++M1[7>'M>/"KR`3%`LPO</<=Q$:(@VR#2SW$K2*YEJ$FRKF4;<I5QL6YFY2XFC ++M-E12*%FRRF);+&2L:2V+);)6BR4X)E)+G,2DS:5$,F;)<RW,AL25+,V$R0R4 ++M&&`XT,PRQ,A,$,DV9EI32D;)B6:6:E(M,K!924BS"N:YM<8;:9DPRU,ZNN,8 ++MVQQI9E,1`H2"T(0?>W]EUG.3H0M6+O'W^?Y?YK^*9G\35O/E'W/E?;@.[OO1 ++M/C[_.U$]4FXQB]C.!"#[:HJ4*B`YBAL@`W(:9#Y45_@L$!JFV&9<::,9_??M ++M.O15%QY)QGH-N7:H(E*(B$+W3[$NS(]>W&EZ$+T9!>2%PS$,D8G"49)`05TG ++M/,Z401#AA>>#M:E8(V61+!`LR808RLJ&:,RN3:Y(DC-JT1%!G<N#ID*=&!U9 ++MT-!,H)0)$#*J$$Z&`$8E<Q0P4`1QD0IBB5!()`?D]=NQ#824'$&-HP-Z<IFI ++MGH8'>Z,O;MMN:5O+FMKB1IHB2#*55C))(9-,L69:M%IB5`2)!$!.A*".,H:8 ++M$?R_UUHB`XRL?V8\R8RAYAY8^P\91.V+7:U:9<JDA@,--*/X/M]X(*+I!`&? ++M9Z$%1]XD5!7DA>T'!/`].IU.PJO9E(J(NF9FKMM7;NF]TMM]2D2>E2^_GE;2 ++M'DZ\[[+N(C!_L3,S:7Z&;(H\:3,Y\@(CT$01)IHJ---*JQ(R*:::J+UGTR0R ++M_D?VLC^F(\P_I@G7YK1EQ)R@($AX6T$!CP\-*+F$6(8O5&V^TW27TVZZ>VF, ++M]IE*<MK3#`X='WQA=W[,,H\,2GP/[DF=^'B5*^)'$S/!UT"(CC(BK;[O!VKA ++MZ3R.1`[KE(4[COPX\5'RV`=S$T447.'EK1K,,)F?KX?='555A^!"I856%55+ ++MZ5U9PEXT\<.M:T;\AZH@BO5>S0=RCW'@HZ.673>D/(P0U"KU.[`/M]#A7PDM ++M\FC6C11)),'YW\5'Y))+543VGX6%254>2\O3ZO<=C,SD\GL:,+.SW#I>1T'> ++M-M1W`^"`#X8KHJ`:!9EUF+I%$Y`"5"%(4X,,5`)5602$`)7O1"5R4"`AE$D2 ++MDQAQ((0"3`R3,!/?G+7H14813VIWOMSOSOMI5Y2J3KW;-V!GD,"<$>7O3#9@ ++MLL`2*2A)*3`2P$1!9*BM125%&:;J]EY<N-ZY0G+YZG91I+;3US42<#"YZ"8` ++MS,R,@1``1"L@D#+("1`H22A$DHRK$`#-:A`,D6`9BF1@83*6%MIJD,@S*)F` ++MQ3`LC`9&51;:EK&-DJFII:TJBJ6)*5%MBL:T;):#16RI5+:FTTU-+2S:9--, ++MU&MHHT9%E+9N7-3A*-(@1$H,,D*D0E"C!`T`R)`(06#M.TA!+,)294'1M,)2 ++MFYP+JR&2)Q*$3""`CRN8"*^24W5'R/&T5J]=B-+&R^GKO.-.R3G2J;GE1]9Z ++M^AX+W;DQ._4>H`HK^N\/(N'O>*@,P!4"Q3!!8<(I?`T*:#0GA.A%3490L`0T ++MTS):I$3*,L9":TFA"B'"*!X]R``]S'@V,81A98R(JR$)Q=:4KW&D?-Q),\[T ++MIV6U54>+.*JJC39)6B^Q$J5IJ7X@^0'@.PB'8E%&*D0:I7N&'6NAH7K,(3"! ++M`X;EPH4I3U(:;MIJ-$L+6D*:7+1+"E<X2U*02';>ML<PDM[=]9B4TJI;-9A\ ++M]I\N[N_<='P0EKW'C-9ILUAF,[/&&,BL8//];PO2R:W4D;:RI9:9IE,E)$D; ++M7DYJBBC20K7GN9`QH$\4\30.J4B*'ADZD:"4-O]O@YXX`";)5%%H5B:`>JQ' ++MY4#)F"2B"B@I_=D%EA98X'#AM@X<46,<,;8Q_GS?Y5W98XF92=_5C!PZK4S+ ++M0OP7?POYE9F5;-/'%W=W=WQ\'6]_>/G6M<?Q[=\UAF._S,[J%57]UY>9D#:R ++MAD(1%"414ASVP0#4J$0T(;*E1,A8EH58D6&-5Y36XD+5%28VWLK5F$&5%%15 ++M03--I%//7.W(J7B7AU;WR&_F314#Q2@5TP(R8([K>JVH'E7[W>8X`0H8,)>N ++MH@,,UVJOEJNZAL*OU37K3O`B&*K[+8RF)]7$/L?J>OV70.B?XX"GLTW!-!5+ ++MZC*RWR7=5J_(484B6E0IR]80NVVU$/I"HK*J`?./>-'OGPF*JP,*'&MKL:-& ++MBQ8V+%C3-F@)(22%^IB]M*ZTNN-J;-KOI@<<,ZW7>Z.576)TW+IUI[&YU#QB ++M>'9</&G@V<NP>65I=1[V>N<].NO'6(>V5I>0[V>N=Z]/'CL=1D;>S6S%YC*N ++M?X;R?.G7SS3NB]84^9$UXF(P:W-;,7<8'/O)\Z=?'FG7(]C$Y\:W9.D@A]@= ++M87M=#KO>WI+%`07!@"`1#39K=BZS*<?O)^Z=]?CY^?G7DX9!4%084,1&,D41 ++MU1AZH/&!G;M3WFWSQ88N7#QMQB[QK!]N\?MS\\F>-%BC2R8H91ITEQF^*C-E ++M!48SJJO&E0C86SO1((LD*&%&AZ2XS3Q1FR@FC"25Z,&(P-+,)11.X4>HK(]- ++MF;RYI;Q-J=%B+]0ZDJJDPI+#KR10C1G&&'B1Q>&FL1DZC(LV?6QT(1XG#:$6 ++M,77ZGU>O+OW>>Z5/5[T_RIXKX+6L]5=\W,5=7RE/G2MZ'C31GB:/&>U%R5P2 ++M7FF!?!F:.33C=)-\(2N[]-8MKO7R35.E3J\VO+?';YS2[V[*NNG.B;]K+&87 ++M19)8C3!DT'>OQPQZ77CSZM,WPSV9L\L.IE,7CQG;UWW:Y\=$1P(7BSC31T79 ++MQ/&&:%HJHP*H\SE<WV6ZM$[/&9I:JCN&VUZ"(@X1T(`D1$1(H)>&#+*H]AC* ++M/>*+.H\:9Z-?K*G;K6U[O=K<[FTO>]7=V>MZ=N>]4(HXS=/:4.B[/#&:3?K. ++M.+/;X*N*-VC'V\KWVMWZ[W/7?IOU^]?M\5939=GAEB$>,ZWYY<]VWJ79OLL] ++M>F*8N,PT9H:7'H]""\5<<^+-X6G!ZHH1T<24>ECO6C3:'#C%=EEC+^<R8SAL ++M8QXN"29/9\@4;YAAC'Z_AC#D]<B^E:-GCUMUUJC`+(4Z?OL9_EGN79!=@('4 ++MV:.IU,45AD3A6`7%E0F4'!)`DA5PE4R,)%8@Q6-*Z%#`T'!P:.#@Q&5$91&` ++M2`Z9W]#G]O]^O=[W[0,?/[SJ""=Q"M`.6"L8/[6#6!C!?UL#5@7F#/ZR4-#C ++M!_9@_M8+?C0[64-Y36$?VV3=B<9<L#:Q7A@NEI:S(FVF%*9AE%&ULFJ:S6R6 ++MHDID2NI!J8K#&?W)D:8O%4DXV6[VLM[/S>@VT%J5C3!\P^:M"F5=SDF`"_Q[ ++MF)/D/P'<>6NFCUO:BHC;%-8F,9BM>[K:^T:.S<V;P(""'P(3)-7F>?8?(!#M ++M*SY=M!H)%7W4GZ'PNHMTQ'RXL;;'L0X9^!E56O,B*A(NOPX(1I),S$$<=Z9' ++MXL<.JH[>NQS7+%=@T]GF;D$`E7H>)4Q!_7+6*,8S/[-_;/L.XC5_7^K'\?U& ++ML80D?%]Y5&>MO[JRR;;;;9E^JBV_E?-OY\),S,>/*RA;-Z6,HF9^%I>D0A*P ++MSPL\ORPW?QIIIIHS,L:::<^47L"Q^']7]=/ZYF)^L(\P+F5XQ?R81]_4$!)T ++MDDG??F[F<^J7W86;ZRJE5.V'PQ*0Q^/4?&^N^V"JF9T\:=5534DGP1FK-1T3 ++MH1=F#`4SGL*J(&T45.O>B!@E)X)AO0O2%\!%4IHBI#:9M"3)(DBWL5N4PX/J ++M#S#[%1]T23)I]S>Y@UA)91HZ:?W?%GSWFVV_3=1@A5TB3O(TDR*.;9OEO\_C ++M6M+\]8Q^GER7MK5:S>-L><W;(T``,H5($BI$,B&W8*Q(+!`I`H2<,QL&@:0$ ++MH`2A4I5*4"A`I`PS!!!<!!0$'PH4+2AT!H;H:7*NI8+HP[TZX.'.'-U=PS*( ++MBP$%W!05%4$T"BJBQC&SUNQ%V7Z[NZNR2SV=I9BS)SMUFGR;&2,9-WW??C1W ++M&:JOXVW_'G.<YSJK=,3,H2"((2A"-HD]555GD+TV(72<?/"-#6:+1)H<&04[ ++M-2@,B$R*&,!A(Q+`5@,R9EDIE6FFI*U4M9MBU%M6**6:`0F065@4EBVHJ)W( ++M*,@*!"+,BA,H*#"T%V<1S$P'&14()$';T?!\#;PA,('N9@8![YTX9B/N>U&P ++MMQL+<2^^TFCOL)SCR<K2G6[N[<$F2O1T(/7&S"/HE3*@`C#PE[?'V832HIQ1 ++MIA,SV(KNV\J@(G#W#P]$999"&`F$,R<%Q)D[BN\0<$[O`T=R@<$(]T32D0PR ++M3'8$C%P$PA9JEI6F#&IH:88R8R\UHUII]<P_JZ+LD&B5BI'W41K$G0'QS2K. ++MH@)BU(!%%.9XL7W/%)4>2[R$)0*(,(%B15B!\%#D.[I@:=#B0]L!/;E!UKHX ++M^)XGB<@IK6S2`0&:*O#P-\5E7?@R(3G6U-Y8FZ[DDDDD))))>W>JWE6DK2FM ++MADL7]DT-+1H:6FC2TT:M::I).J&VW#HJ@JI"4)"9\5M_'=EEE55?;++F9^+! ++M&FE5521^.+/M*?AX)VJ./%<V,]8Y'NXZH*H!J/`\"8[E.E"==1(0D$B22220 ++ML8QC&,8QC&PJV8"JR/64.2I,/9Q,3[WHN:!L;`2.[#`.O8*!,P#)F0]XXI#V ++M441^"U]>[>;`DR4]*=^6VG"J^:9T8E$8\.ST8SEIK,?OV,,QK.W>V'Q2,,+& ++M%@Q2'=6.T/`,PC&`XS%00BJ$BH(@@AM]H%2JO)6.<;K!'GNO.'EG[F%$Q>@9 ++M)<;8W;=PB)<10R\XZ'6R"9+RL=8R!*(J&F@U",)B_(^_^E\7RCYCXA\[#&8` ++MJJHH&:,G,%,<Q#&`(S!#',5QE8S%,<P4QD2,P4QS$1QA",4BB<!1QH?$31/S ++M(TX0W,'#C@.+A@Y""@(P3,F..&.*(PR(8(N&#DP9S,<DIIK"<@T"(:40,-0& ++M-)$8L1I(FYM<E%F<@4-``NE4#'5.&'S].97S036[%F]DUIYM3<MM[4W+9O<- ++MH)H-:0-(":36E-*II-:4TJGSP'S.[PZ[6Z'`=9W>'7:VAP)TQVWCMU>IR&N5 ++M[;9X$],<N8]O%ZG$:X.TKRN&MUKC5Y9H\F[D;Y'2KRN&MUKC5VS5XMG!^YU/ ++M"/5TT^Y&M]6-WJSCA]<=/KEY/;TCY>&F^1K?5C=ZLXX?..GSEX>2.#Y8:?<6 ++MK?5AN],<<=?=\?=>O.,SR9IF9BS,TL:F9IK,:DA%?2L*0PF+@(IF.5,QRPPR ++MX9A0S,2PDR8B,9BJXDB8BPF,S&9GRC0_+#3?BU;],-WXQQQUZ\?N/'E'!\;: ++M-O;9JWT^T<-!#AWUOV^WN'"1PB9)F$*$@22DF,@<!I))A"E,;B",0@R22`HP ++MCB"1B0F22*(.*20B,88XH@HBCD"(LP@A(**.*C(FFM--)[1H?CQHVY;-6_5^ ++MU.&@APM))%$##T'#M.)OAA,/H*[S"@HV<"<FK4D$AXCT/$XN/%02%;!7><4% ++M&S@2668=<%'H?19QPHPT'X<4/8HWVECADJN>DYFJ\P*/!PRSA%F`_#*'Q4>Q ++ME'2NHTTX\8;TYFS>!>7PGV3ICI6SC%5KVW7I)GT]ZI]7L-.PXHLVIXDGK,6T ++M.S<$91*[W7#&2>D17CCQ9IFS>UGJWI][$*D]Y7YWETZ\MZL?35>O58W.;CJ^ ++MM=[-KH\RC3"CWC+*$>Y)'C3QXLEDGA'8,[D(DO1;[7OJ7L-W,O:]BR6W7M'? ++MKGLI^E/;WDISO;-PU4Q,&1)>ET(9<]KCQQKRXOUYZ\WNMN]J?3*VZQ;VS?)I ++M\9RQL))4(2$B$E)DQ80&!!PD%8A!(1%<7)(29B;$>,_A--9\M?+)**/`\,M< ++M31\Q'SJ.,*<.C;N>?R[]V>KYRP]U-_!W>=JEU/=P]#TOIU2::]]RQ!<'$5QA ++M`158X13!Q3'!3$7,!R$%$9F'9A;`U93-LQF,8M35O0UO&&M:PD"A"R'+FZYM ++M<NB1ADP@A!F1!2.9,9(1P5<80%$F!!RYQ-$ESER@F#F(J*BXL@@B0D(HF*,D ++MD),L<RRS$QBRFF,+(J,,,2P)Q%M+1Q$MRE<Q*X.5R2"7*`EX3>B/=XL1H:4( ++MDLVAT/CA"/#B0EF=M]T][/;+\>>S67ZF8ZJCQHD;NE%;ZY-ZBI5'&GNV/(WR ++ML[URRE/O9[3WITTTT/,9V''!2]INGCPV6KWWO-/>PH6F+Q999QQQIW'':666 ++M6(19T9'1X.#CC=---S.,U>OS65C]OO''CCQWN]N/#)PPX\>\=[V]O7F>QM51 ++MAZQP55U"CCJV\-9JIT4(>\'117H1ZRRKLF?$Q905YE#,WQP4%15'F,I'$Q), ++MFOV,PPPPQEC,F3&?R;BGX1]4T[F6S\TXT_CCN<HM94F4+56W*JXO%<.:+%&X ++MUQ.**S-1F6M&89LIL-MYI29@3,1:S,`JLDR&@0G1@@.5&E\M[_KK=Q)149J1 ++M)&9DP:9B,9:UH9D,8S*TUHF,UC655BM21;ERHTF*;FUN*NGKC;3UQUCDM,S! ++MW,:TIC,P:P:,C33,:&<3&&8,TT:8'(<B(*+5AB@8B&0H%*-%8F*UHT,889 ++MF):RID82P0WEO*QF8--&FM&88Q98K$%R`#)#1@0P,3A@J8H(8LHX",C",!`Q ++M#443,)DJ!)*"2(..DJQP,F#,3((F(9RG&S*"JP,Q,,*G,"LM9HUBDP4ADF:< ++M0R2;,IHG,<B86DR2APF1R5)4R5-%C8N83&9B38F65CA-$144F8P688UA4$1- ++MCK$@P<@NLDR%T757.I<HBXY<R%<9,4'%'$F2#"1R$(D201Q6`3)A`@*(+DR0 ++M<2`D50F.,4D0QHYRY:<BXYN8S,9ADF$Q,8MA&..4586%6+D#DW&YQI<C#EPN ++M0CKK<(;H!DD5%)AK%#3-:PT:)PS,H0*2.-RM<6C*VN34KHIHB+,G'6(:715A ++M8%$Q%F82S%+E<W.M=;<9NJ4R1$Y3`,<LU#J)M9C1!B86)$01-+DYG'!*7.<D ++M#)G+C,KEQQ(H.+DD%&(B1@Y'(#)!&.3$9A-4-A8895F.1A3F0P5+7(R$+1J# ++M4&9+DP9EQP&Y*PF9HZY<LDTV-;!C8*D7*H7#26@X-&S#@V<3M4*!7#*,PPF" ++M1B2A28(FH$R5V;T,8LP8UEC2UBQ@S!K32D@&H,I8S'&*5R%ER$%B12@U!D!$ ++M@T:4#)5R2$$<(#E0@I0-"9G/1I&'M+7N[F+TDO#6\\&?98[+QXX_/^EW.O2H ++MJ)A@S,KZ&')"("B)F"8.XG)?7CZA%"/8<&`1,1E!`RRG6&K'!MJ;PUA@JH>R ++M$05QB=/@8<0J":V3+TW>\-992'2:P@AEUJ)"T(*A-IP=3:@FUCAIC)F;3L=& ++ML&WQNYSF6RAAHFK+=EO%8$)J,@8J@G'#1@XFIS1D:QG!TR:DFPS#%4#1!&$] ++M4C?7RTO#M@0+#`#F4I7>C-L&%3.08+&P%?9CL=V.S1@:(!,854Q)<D2=-8!C ++MB9((2.B,A5F0)NH0B]%@'@W@\!K-='QX7WM;E\%7PD.DKH4).!_"3R5`!\I% ++M:*&9@2'P?66B41%Q(>C[S7+;?7A/9^%/E`B`.:N@(()^N)F<+%L[$PV:23F2 ++M(*'D;T+'3)\(8]HSO9#Q(.Z#G^GVY(E_,7'K3<='&M&F6/[--8SW$1*6VT23 ++M/AP4ZO?#HZ+;:0\%?#QJ>'I=#NKL@O8B(!"(Y$`DJA51>KK`#6C`X'LC$+$L ++M=<'!$$7!/!Q7&$F3M:DGKGKZH]V^&XRJFO3%GM-KS??!*A'@F9/AQ'H)B2/A ++M!$I$'"J*+I1D#`.\COA%R#EE"Y%16)$$SN*.AF:0!U:K<PPI2C@GEN41%<M1 ++M3TMJT^?18RAJFG:=1\71`$%GTL+KS-',VEO\?<99C]?Q_#&1$8RA5C#&``'< ++MNP<DR7DJ!#N25!T3V9JKK)&^1_$8VT^\VYC]S7&;S>;ZT+Y-4+T^;*]?B[NR ++MSBA_&VW/Q)5O3L?$=V=U6G$`'E4'R48!3BKF`$XD+^F)3A]*&F&,,QC&9?EJ ++M,JB*@4*$(2^.BB29W7#2\Z%-T(^!]?)*6)N<]5JQEW=WO?*F4IGDAF$W5!0' ++M=(*JO0/7WJ"9+UD$#I"`*GTJ;)C"8Q-+6DTLF6&&RE*6TI(>WK<83D=/4]3S ++MO=W;O,3P5T^);&1]2'JJBK%A\*K6]#Y$D.(`B!P2)V1`Y95.Z$3LRIW0)TX( ++MX1>Y!YB9K4ZV?=[U==.[MMM[-MMT5522I]E?.RLPTR$HNQ&V?#KN]S*+A(3/ ++MES/S4>/'PF9P<"7B.WT:(0HA",Y_!('DR*4]#,QA7[`NR%'I`](0)3N($WQC ++MF2W30Z76L3$'*9<PH7/6F%"ET-#-PT3'$M$8QE15%%%45#'MW9=EW99A=W=W ++MD)&].S2;(\:+XB5-!IA\HJ*JVT0/I-\FW3\A[7G<B7PBR,(V!1"0H!"B(@EE ++MXZB(H\"!2*=CEQ$.)1Z,!<J362^=+X>*7$_P5"*@5):1J5`:V&AG]'G=OUC8 ++MW#B)$B+HTFB"BH&&\U;HB2L=,@NMCTL;E<YS:AR#3:FZ9GX7,?!Z4^G\X4?H ++M@!"I(,J2H)"0H0K*P![1]$^B?0-''"HA*`Q#!8F!@RH9#_%7FJUK,C0UJ,Q0 ++MS%#,`_P]&M`:1^WLJW#>]E6T;WN#:M[W!N6_N9R'^(79?I[/?/<]AZO5>G8O ++M'FL/(\O!IX.B\>:PXGCRM/!T%&#QH)@K+"C`V#0`9A>M!(5I8V]7A-YUOGGZ ++M[JMN^O6_;X/S*,PDEI"@(2&02$:!.H)P70O#O1<Q%%^-*TP(*F)BPEAX-CBS ++M*#N_M\?OWG[KBG[&*RF+*8R#&#)*6@2E#D$V?-L>SG1Y>CW'!SH.#1)QX90[ ++M(-+B#O>FPPQ%=$6,.)S!477?'\JZO"#BX@]%0QJ,B/%1:-*LRBRAN"S2+P9* ++MC"T/8+O<BE%E5A<OL*LS`9P7HR5&%HKH'I9B%$EX7+,*&89;L3TVW-*GUS<] ++M1DK8?6^GRD8]R6]=E,H8C@HGY>OY9@CQT9M$B-**M?"_DWF5L\.?E9GL?S97 ++MP=UZ)SLI845BZT(D\]^/33:RY^&9@RQ!F_`[1N-)K%4^Z[SGGKY5MS[YN;>( ++MU^\>JO7)T^O).2O(B%"S<V&(VS7)I7I)X$9U9E48<9:--,HNR<[,KM+68[[, ++MMNNJCA'NSTWW%5V9F3W#UF9D^`CD0H4`(41!W@X19L=0:3%+BS.I6)&>*/>C ++M5F])YQZ2EW??WO[N>YGG=FC%9AF3&*9&!B0@8)&)))1(81F2"61JTFJQ5HC1 ++M8R:4WCT\_'E9Z],LTT1=!O5IOK<6(Z]MY-^?;M^2JCN][WM69QJ60N[T%C"4 ++M7W#L;)B\)%PST31C'\+'Z?%KO%UG4_-_+]O9DUD]TK</$US:^9E^\SQX[<"R ++MT5&^[+SL[>TW51GR2X99V<=[QW<=QQQQ111WN]*GO<=[W>[W>[W>FIHDG;HG ++MBSBW>3YNKW9/$DGCB0],39<V^HRB0TQEG67=W?'G/#ESG..&&_OUADRO$G*O ++M8V6G7CK;L=PS*S(,PF8C"K+*:T;5%5++8U+4K3*JH!@H4[GZ-R_EVU$X`H$: ++M!(0@(8:`6D2"10F4B$%IDIC`PL&4\?./FW.XJ668B,HRM#+(4S"T"4K"L:E- ++ML::S-+"S-IFK%14MLE%8MHVQ2C9LU*REMDLE)L4;1;;,LIC:3:ILMBPF$VS4 ++MTF):BQK,S;,REK84UIFTFRRK9A;458U0E4E!,1),.S;LJ1)#:;$PX.NMNT[B ++MQB,R3(P&6!DK*:5153*THFT)&K2E%$!\T(+!J&HE&@0K82E+KZR.IS%<A05% ++M8D+")L#8RZ'9D*DADB$YB`X2D3YC@9`2(TI$C,&R!#(PD:'&!4B##R,$3!X" ++M!Q)9:0D4)I(EB`9@&@.9,)68%HHH@(B0F>5416'EC4CPX8FY-*!;"9>!S$B% ++M"6'7!CHJ90C3(9&;=(8[3`<VXK3W2*VLAB8L8&45&.@*++QIZ<J/EPIA(<P* ++M<L<D@;9T7!*J&0S!*B0344(T@(1).S>$63P$B&D1!873"X*2`@1*"HEF.,%! ++M,L.01&,'+83)2RW?V3H((A\G9T)S'A%!.61[A91#3("*+MY`@\F?95HS+FNM ++MVM/G>.]_N9YYYX>.G17SZN+**H**JC']Z:MEB^RS#X7=]F94,\>&554P(@9I ++M\B9^>9X^",]-*JDVC.[6NSTL#I%V32HH)FWA$-0<3`T1+("(`L6R22=$%0VV ++M$.&V,AC&-D,9,2OE?*&F/*:;F)7Q39+,T?E=W=_,F<KX>/75%>6_#&;=W=V7 ++MUD^F??*A)+U\QGCK[7[?9K\9EGP]':OK*JS!.L0_L]_`LPS#+&6,&8C,D],< ++M(<`<%`<)A[#B8B:7+;2T]+++NR[LN&.J/IN_FEFQ554:>$KDZR<$BL2OX(9, ++MS1J.)%,QJHO2%1]"2P1.952/<E`=S,+K`UK-5#C;26F3&3+#IJT:-#4TT-33 ++M5-5K5-+3W:;FWKG*<G'''`8-L<0P;'$.!C&R&0QE14550445052J-DJC6V[( ++M9))XLZ[N[UX4?/%;WOCCNLUCS[S7K2U.MX;[!2?W[^Q_;/Z@YEY,IYF94?U9 ++M%O*A^\]_H"/>&3V$%'%,0<3$'$Q$01$%<P9@GCC"YT+I2HNS29ZB<I?>[\-N ++M[W)/5.2U:<-+<M;*<U\O-\?8/3W%K^>S5?7]?Z)_)F'&/=:'\Q#F3LRLQ/7# ++M``.R&$*X(H(HO*6W+;2E*%RVA<F0A,H*.*+Z5$\7VYUV,._6&L,,S'.U;RZO ++M;:[[;8!-%2CZM4`]20GAE896+#%A^U27##+<RC@YC0+A<RB""X@B.+CBB)"2 ++M,D8=)Z%I;2)S;L=W,5UP=Q99>"=]=QV*Z!V(KMMVZ$05[?9R5K(>8OZ8NSRT ++M.=V]*8P8R,1D8C(Q,C$Q,F)D^TL<4S'*4H92E*&4I<N86ERY@HF(B8XD'.;3 ++M2&F[=FFH(B+I2@F>HV:&*E-URW<,'8KN[^?`0A:69F/.X_CK;?.<Y/PR(;_' ++M\19R/C('21%#N`!!>T"(4H#)*+)@K)<:%:EII1J6C2C4M&I-2U:DU+5HM)IH ++MM1IHQ,<3$QQQQQQ!Q'$$1P\+:%***@JJ5%5'LP8R?E5AAB/%3KE\*>K?[^9F ++M<[AF.ZS.K[^2AH]OTI1OYH2BBJB,H$HS"IF:FDBN+"[LKUI=E?2'.;[7V\A? ++M!4HANU!-%<L0R56S9ST5<2HC*MUBWID9)D)D-L:9$P8\NA_AF/[]_<?Y8:?Y ++M6YD`9&%1C*0J22J*00H@^<"(4"(4H#2@-`+\0*9@"X"F8*&(CK6A0TB.8B8J ++M&@UI$TJ&M:%T`Z=:%T`X*:+0KH'XDWL4BV*[!V.E7;;0=CM0TJ[;:#L=B&D< ++MLX3ER..(RSA.7$W5[VU=+IVN+E7=6KI=.KT'*N'G^#>N7*]/3Z.WP/*O#[YU ++MRY7Q\?#Y5UX3\:&_-'L_,_/7)LX=OS\=O*^5::)^-#?FCZ?,_/7)LX=?K\=? ++M59ZKA/QN/+K'VS%\S\^<FW'3Y^=\+R2RKY6]*Z3\;3VZQYLQ?,_/G)MQT^?G ++M7PST<3TQ'H<!>B%="(X7@X]8.\WI]N[!RA!HP=39B]=3OMC[7G&3=C\?/W9P ++MLPTL08'H,A0_<1AHNG7"BHR?1XHN!WFVH,@\&"#W!9JZ<<**.GT>*N!EGBD( ++MZ,BBT9[#,<^1TG8(HN;\:U4X%YZDK#(HL1GC`NO"TZNR$47-^-&(6%4*67MG ++MJ1M^TRA.=JJ\Z[M%-NK>>[$(ZC'%&%%&F&X,F*)D[!F8:65>"TW3CUV_57;T ++M]?3U:87M:_8[M;['F]=9QV5[<)R(\2(P[Q(AZ:==G2(]0NS"B>#R7/-I;GNJ ++M[D]2YM+UT^R]]V5AN76P;HC!31<^),&S":W!&GM8I+C1EEJWE5FXY.KO5EWZ ++MK;KT[+[Q9>Y3TG>K>9`<=XDMB]9PC#2[GQQ7\=E=\##3BC&#G.]M7\79B]U' ++M3E[3]/K^57OAW=WJ[S?VG.>#F,5,9B9,&8&,8?-+,'\X,)"S3PF6<65$SQW9 ++M[IYFM^FZ/77LPH]1QIC/(N6=9=AAIG%5UNFL;>=V<MRO;N[II[/.J-,SQXOQ ++M9QQNF#?A%DR38SD23A[LN[]>]M]F'.=VY]73,Z/RHN=/0Q4/1OL+NZORQSNU ++MKO;=S0*3C!C'D<%EEVL<MX87L2<>HJE6EL,BBJ**KW=`K&3)-&A@G,^CR,8. ++M>MR:G:ER^8VZZ:=2<PJL5_+)>,<>/#3Q*EPE@K(D(`*)$89)*0EES9L!')R1 ++MRZQMUTTZD.%GO\_GWC;N?QFWOB\3.+]JPVLHK-J"&CHS2S`R*"4(H%*I4BH/ ++MPL8<RQBF(_N:H?W;(#;^Y=;;DF95"M"*K,@JLBF,[A-C)J/21C);PP:0(AZL ++MO7J(+K"RQ%62?3'KV(2U>HRPRNC;&ECXUJ[IKN6AFUINLMV36IZG5X.#?*@J ++MG+B\2#PZZ.C4IR,X&&&.VU.CW/6&,(6\H!%$['1Q$*.'!50.Z%"A0ED0ED0U ++MB.*!F(XH&8K@#F*X`Y@N*:TK5'4V;&Z?<3ARN)QR<N`X&P8.!D445%115%'A ++MMZ7=EC'54QQ,UZ[+^;%,9O[V89F&91@A*=R9VT>/V_.<T\LQ]Q_1F>^A$?P/ ++M].P<S-VI.XJ![2I2*)I$`=D`(=%=VQLFR5-*FFIIJ:6E)()2929"20DDD))" ++M&+4J:6EDP]W);-G]%HTTM33A45%5111]57QL8QC&VV.BB2S&[NY/,9PW]7=\ ++M!$AKJ`@@F/"%AY%D\?"NW<5B]GQ^/`X(1%(D%`(A`>L'"/3'%0Z*H=Q(KV4B ++M!`"@+)@J6&*4YI%J&LC']&PB(*(*H94&ML8-_8X9A=V6%Q9=W98['-R,9+9+ ++M<MT64.JM)PV"+DF9U0`,P^]QMNP"(..$?*)I54<"1WC^-:UU?R[9X/X6,828 ++MP0LK#&*>SD^ZNY)YE+^Q_7P>3##)A)$E)$%)WR4D=#O,Z;<-FS#0BJ^%?+FR ++MR\PO1YDYF8AAI,D_*XXG[JJJ3@DVJ*K3[LTUMIOBR0VM;/ALS,GKUK6F?V?T ++M\'F43W">Q.5DP8FW`3!3!#%P0Q0<!$<!$]=T!C;8#$QN@\@NYNY@M!;'%0Q0 ++MTQDCA#$W+%]7)\LDN$-?+N:W"<HDF5.*$UX3X^BW:N_F82FB2IFSHPF2?"1; ++M>QL)B.Y=]W<]@Z!PB)5()IGH:B`-4)'%55%5,S),T56//9F7=M.6-O&-L;;L ++M6]19I=*[J[L]71Q58[5_)A(IB[JTPV)F0I+C!)!L;`0%74S\/D!%H@Y`!0Q0 ++M1'DD>^45,UU5C=-#;J7+QEB*4ITKLDF8YV?/EW=E67F&E")75.PHA1.;:Z#8 ++M$%><"$(0E`A#LT-PJ<1J$.4E#I(Z973(FWJ)L(0),R$R$)`Z-1%6$H[KNK<G ++ME;W'=D]//"^I;:^G2BOA$5383KU.:UK;SP_&,::E]=W/U5*TU2H)'A.5D.)# ++M<,0@.I7(-PO,(>AF4@0F(N(H@H@N.(XB.(H.(YU2TM&E85M2>LB.2.(C:JA% ++ME3\\VZC.YL;?&',]F9F&'?+7=X[/.8]B)HTABH=R)M@.;N)0X?D>ZF3YBFO? ++MPY5U$/(>28"I+",@+(=#_Y,$%.6*(A'&)A4515%WV=6)%M;B2S>SR-(VSF`U ++M>96ZWK$%-/HQT\\BLY\"M>GK\7C-KER,E?CKP)IIF:\Y=._?T]3,S\M%140# ++M3,P8]>N.OSK_%N'^+=>/7\8V]#%3#\2)*3"$YDTAF),F+CB2PRR^_;K==<YR ++MN5Q^!WMT=76F=!WMP=76F=#KYY.QXO&D=)KP-/'D['B\:1TFO"T>//LKR/9Z ++MTGWLMM+XMGSW[*]CZ?-)\]EMVF2OBMKYSXQ>I]/;4^]GN#CRF*OBMKCGQB]3 ++MZ>VIX>,&W594>D[Q=._?+2ZKX^M73OKW#O*]EI1\3WJ\.^>K2ZKX^M73KU<> ++M59)^D\?E8[?KS[Y:.E^./S6VW1[^^:>]1B8A\&E.J>ORL>7MY[\M'2_''YMI ++MU>O6/4\IK]0:>`Z8IQPN.QA)D0>#Y8?*=88NY,6WK43M-%S\GK^1YJWR]SY] ++MNQVG@^<$EAW'SB$1-0<CY!RHMA5AJ^'11:G2/$W'SY#W1=\C@1%$>$?(.5%! ++M.!HOAP46B3"/1-Q\\8,/D='0CY&(HH=?#-B?5%:;(54?!39\^&7<?#@H1\,* ++M+9?PHTF8DLN0D^)GR/GBSAFD^-Z?$KXSO7H\]SEGJJBLR<1YGEV\?/A6!=\3 ++M3/''P^#/2:/Q)9XDHZ^%5C$:YL7B3M/$CB;]3WW3Y#ZN77XG+FNN>GJRUUSB ++M[V.MISSH]T_"C3CQ@)GOAX^:;Q5`_AU_,+*D?JWYXR5ZMWY['UYZG-URON9[ ++MEWSUK'/EDMN`+&>+&99GR>S2SQA4FN^L8Q?!?!:=.%L9QU_.EOO8MGXN-[/; ++M4N>LKS;7Q'+=ZN[M7=O;!!8HB"L\6<:2/E)1ZO297(DPT\>LHHT'M*ZS?4VN ++MY2W=OT[[K\G7=.=[NN_4AU*",(%$00A0`1ZFF>J31BF&'6228<'KDK8]Q9)4 ++M4+RDKV+RU2-YQZ]J[,ZYZ>/'CP^,+-.*1>'O5,[OC,][,SS1F^/>QAXW#*]G ++M:8889))[QWCQX\<>.C8WB>X+]GO%>[NS,R9==[O>SWO>\<=Z?>M6<<<6<<=A ++MI7>]?O9[US7E6#AAEN*+SLS3=AA@>'(;`R3'=L7"">.&QIN$(XN*&][OX]?G ++MEHTTT]]_+&+^-899C&,QKRE.I&U#MV_C&TJ\/'\:<>..OG7\</SKQZ_,;@/1 ++MA8C^,0]?QIUZX\?QU_'#^.O'K^,;>UH3`5<464@4P,Q1B*!6$A+331)F-\YK ++M.+C,/#S+,WI:D:<0RD#'$20E*60>0X.:+5"EX>/S3CQQU^=?G#\Z\>OS&V66 ++M*@"!(@HBB`XD=%\70="@R[P=4F"[E9C+L;ZPE>CU>G<[].]"#H,(]0>K#EAV ++M^F`<"X90*#1"G"4H*[(%%V.EXLAWCC"F#`F.%E@SAB01&;-N/K$41X#D45`- ++M6'+`VG%P4V0*CQIP1-88\$F0DR!"*:979(AD@"@S(Q'!B>LS#2XSVER73.,* ++MTH.2.,J%)A.,H$8L8LPU:-63)K`#+++3Q&$6V,'BUJLLB>9"-9+IEJPU"&5] ++M23"94L&*C"8J@S`J@2:@5.9QTDF,R/;,3B4P@V321"!,IV0\3K7D1G<>P4TR ++M`@=H4$7OD&8X>$Z4PA"0DNC:^J"JI%%24J$DDOC*!CL\LS#,NA'U,H\+)^\O ++MB9G</HD\5-)5TF1F--F97QZKWYZ]6\0>CMO^-RQW1K_$<?T/:K&`RP66"R8# ++M)@,6!BP,5D8&#!AE8$D0Q-!$T=6FK4=^;T=_!P:S,^&"5?/;M557/U(>*$YX ++M^A*,$H\E#0O!M>H]W<&C,#%5I)E`[$JI@<.8!+`22A$"0Y(((8JLJ),H$R`J ++MIW(HBXC`PL#E=C2TM#2S5AJS1AHS3&FFFA6"03F-EE(1\I2EMM[VDG(>$)7M ++M=*2X-F2E99)1K;;P2^0\(H^%"T[(=PRQJ>*GI)M@E$@[L!<23(P9K0ZWF/\P ++M^VRJYC&/LM9IEXTG="W+IIIINZ;OK6R%<5/;VM]CPMM/2/7L;;?"]JW*>LN. ++M#F=&9@GF9P0@00"T`S`J":(444R/.>:=[N]6U>692R62BBDHB]J)B9)GC6V\ ++MJ*$4B599)15>?U>\E[R9,SU^/&Q5ML0XT\?4<55%5"H2(PA"R]6KSAO6K=M5 ++M>+U^H****-DS)D!]"Y0I2E+:4],13;E/7>^<.<++955>W/RY/"CJFD5X21Q8 ++MDRJ+,BRVE[3HF24O2]^5=+F=!G)SUZ,$"8.H`*50-/=W=0>!2A2E'@ZFM*92 ++MEN9EI;F9:6@7"ER@7"ERA<-MVS<;;MMC9]P^NNCIWIUWL=.].]ZG3O3KO8Z[ ++MV[Q..<-K=:%"Y:'.'#ASF<YP.9IW2EI2E+;Q[)T]\Y7NR),^&$R_CJS1DS/- ++M;%,SYE;WOYIF;N7\^4JKZ=*DG6!&9._CQZV%MK]F8S&8S&8QC&I6K1@KCABH ++M8Y@H8X8B89H30IHF!22$4B.F8@U"XF?DPA"6,H>U;;O*,^'FW\OXOA0^(CBL ++M/@JJ:TL2-^#F9DY?EJT9EESRQC!'B5?--2AIII(<LJR:2:E+;314>^_SW\>& ++M1Z2AW2*\RB"G0[`*@/2$),"$`AJ8)2W,*4<$<M,N7+<HJ*D*%11):'LW<V76 ++M+FZ:3L544:)^NW\PX1ZSY\OYF9E#X^555XVHFZJ"LHQ_&M>;\KM_&9?R>I]_ ++M"[A&,DL9F0D!54IRM9%"M5.6O$=9Y_7NA@7<*B`7P1V86:&0>H:,PWG'.49\ ++M/TO/S]LO;L+PQ814?;"/>-''7]KN5)9%-K=N"MPNBHUXE6O$K7%:*NT1$YRX ++MBS&-::8S&8\$UIH36FB:::(B(8EI0RB)B4I3*(XB.(B*F&M&A4T88"KAA@*N ++M&'OAI%-MMFY1MMLD;0K=MLD;0K=ML"V0F[;8%LA-VVZDMD5LXXY4EPBN&VQ1 ++MM!;.===%'4%TVW55L@_PO)XZ[55T@[V<<)')2S#G%WKI([*68=ZN<H7*ADQ< ++MO\*_>'TGS[ZA?5#)B^OGWQ\IH>^BO862R-^FWMM[?D?4\?G1^^%?H62R-]-O ++MUM^OP?D\<3ZA^^4?JC)8.;[</QIQ^GX?ASVZGY#7RC]49+!S?;A^-./T_)^3 ++MG)?H?5])^%DMZ'+G6=ORV<?C]/TYZNJ_(U7TGX62WH<N=9V_5LX_'X_'.4_1 ++M]+XOU6)MHX<.W[5XU-W+]?G'YUCUS"#B$9932\B:532B5LM*=@-4^+]5D;:. ++M'#Z_:O&IYQV^/G7YV&`:060,@XCT`B&2&Y%AL6:-FQ067V1Z)MIKNW"HLTBH ++M@4*"+%`(J+U/4V7R_1BXT?>79^.O7./;9V.N/$C"CBR0X&D'$='B%#)-,BXV ++M+C8;-*A>C,1[89.<G-]4&D6%$='B$#BJ-PHTN-BC287B[1XV'%8")<.++2V- ++M/1>25&&YU^+ZRZ.]#/$B/9&8:.'GE/AX8&AAX\>+4$EFWZST7MEE'O%W'HI' ++MB=TTTO1F5-V:5:RM]63#OO9KQ\JYCO*DOUX7AX:/$]W'7KPJ2RS2S"3B=HWS ++MDNLTHLYC&,T.-\>WQI4^WF\K<VO3WGZ7)=8=69Z[MWB["O>Y>O>:"A$F[XX? ++M4<>-+CPB>"C!!7O68:/%67ON+FO;ZNR.]-RV55J\N6XW<]N\TN48*&6<4>)9 ++MT4.,?$B549&F"Z1N/275X\G;I)^)++?I[:JKNSGJF6RRB!'=Q;$&CMQXPO"S ++MTCD\5(]'Z/(DD91):CP[P\RSWIN?82FNOR[KW,EY7J=%W?CRGU6YC&[SV76Q ++M%*41,((\;$4`1N1F+,...7)P<:T-88QK+,9D#&4%10],**TTP[#VGCUELL;, ++M[#S;L9II/](+XKQOC9FU?+?GR\Y;[UMVWG7GKN_;>]/S/5[YB-/'CY[=**Z> ++M*\>,+]#TO2JK#<]U;LW?MWV;5>3[?;G=W<>[NSE+ZCCN$(]GGECPLVZS-F?5 ++MW7N74S>F>+1VT5Z!#FFZ$;/&$E>C@PX82%AQT"ZWUI\;AVE'37&HHQE#\['# ++M##!W.Y[>>:S#ND6V6C2?!@7F6LPJ=1ONS>V]O9SQ?7Z8RVW,_.MUM1X)=D=G ++M/33QMX\>.S$Q83%D9#=26Q1N3:AE1A*V)LFY&U<K]C05-A955Z8]<>O7CM#$ ++ML9*S!661,DFM$*4IH@8'52"1*@$(&U-A+@.L,4#%D-;D)=1&J@*4I1D`IW.M ++MEL="3*NP-DN*Q$0ZE265WM9#2)J`*`FJ34;=;JYUH8DQ;NN<JC,F8N.-;,-U ++MQF:ZU.N&,7=2:55Q<6FJ1$V4IDRJKECN++PQX\>/'/)9DS*LL#,66*$&A"6P ++M-*0$K"P+4A+&MKC:N5E991)`VJN5;88@P60R,LLF"LPF)&IL,PQ;C;$C,E8N ++M+NN[YHSC.N?OP\'COB#H2]SRN=GA,>`@G81E<R+G&E#C%&I^7N\QMRS3]I>W ++MMWIIQGF)-9%RP4\E##9E8P<DJG56#4(`G21PEZR!P2BFT$"I2%$0G(.D`.$K ++MP.)CL-8;81,)5T3PRY.YQG:836!,8-<>7;<V\SK=JUIK-6+&K#TRJ_I"JKNG ++MR[H\T>[VV:OH:-?YODI_<_MKOK6866',$_8`Z_G&2$('J\EPCCGQI<*6TW=V ++M4HTD;*^G*KL,,NJ*^G?S3B9^:V>*B;JC[B@9IS&-MV8+99\$H^'PTJJ*N2;@ ++M/@100O=`#UE7N(1![HXZ.%5%14!11*-2(B(BC$1$10J32&I$V48,)B7)R9$D ++MY7FGI<N;JW<3N[N]SG-UVF3$H0D8C"4$0PHB4D*9&=W?>YRY7?:*,8Q$441& ++M=;K(V8DF8N/@VS"RRXNQJR;LNVK="%*G.;\QUMW5S-MM<<8RRS#,,O#^;N,= ++M7EWU=SP(C$,F111%,&1!>/*\KG2ZZYZ=\7C"0$RA(,DHB"(BB#!-*,268A)* ++M$,H@QDHB#`0(E))1)C263",Q!DO2]+J5Z.SU5G)/3SPD]3P\5IC"80D)DR29 ++MBAD11"0R5I264IB%%)19*2FBR4HI**FADTS",F98DDC#,S,:)*-,HR3,24:$ ++MHQHI4&1)C,I,S&(,D43*2%#)!(RF13,;)BC9%+&E*(2D,PP8HH33,4I!4RI* ++M)312RDS*$Q2&F9LN[JKH5.8%.S`/B>951$1$1$,,K*R"D@I(+(+"(0B$@L@L ++M*!"@0B0B2#(,K*P,#++)))))),$$DS$S,1,R@R@R+(L*$*$`C((PBL(K(HR* ++M,@I(*0"$`A*C*CQB(6(A8(V"-@)8"6"YD+8A8A8F9)WHN.G$7'3@B8Z,43'1 ++M@HGMM#"ETI@E)LH9"P3(^XTRE'$49+XT]MW=?.<O`IP?26]>W9S&VD.%3=9] ++M&^HJJ^Y$)&\?"Y)D]@>C0*U=]?8$B02$(2$A`(B*BJBHKP3#,S###.]4.C*G ++M\9%[B?*U8?T<VV;;W&X^Q<<.)L<Q<<.1M.9.<-<&)S%S@<%0-R0A@R*(;DA. ++M"1PH;)A.)80-T2:&E-UK=-$J:FF[+ZWEXB%F54KY,N>J]^^;?6=5'I&Y;RL) ++MR90RZ+;>SH]U]+WAW)V>80YZ9[^[)B".8OOF%#F#S$_9+^F(J&9$OX#^F`%` ++M"1`"1*+0*T*P'ALT5;&]MANINVV&Q;MMC<MOYR*<0B(8W%#@40W#BF"(M%EA ++M98XM1=EV,AL;<-C9=%%57T\&(=$TL3:P^RZ.3M78[4AD=))T%7(H$HR.O>*C ++MJ]7?;N[[ZQ:^O>W[8`#4VEI:664I2E*22222222222222222222222222222 ++M222222222222222222222222222222222222222222220,R2U-J6J:J:IJFI ++MJ::93(AM+3;+9ME4J5*4D$TI(A%2)`D*0I($@2DI++664RE)$C4U+:I;5(&` ++M85859!D&0R&1B9,,8S&3#"1A(P"P`&5$941@%"`4)5655@1"!$)0&4!@%@%A ++M0A0D21(6%A6%9!D&!(M*RLV;*4D1,EJ6I:6FFF9(PDDDA"22$`R2229$@32D ++MB))I21-J52I::4D2V6S99E)$I$D2-I::69$399D21*1,B9$D2220)))),B22 ++M222220A2)2)(FI::4D2TJ4I(EI4I24DI2220DD222223)))))))(DDDDDDA2 ++M*0*2(R(RH2H0#`,65EEF92E*9$23(DDB2;*2(EM+:;2TJ6FE)$UE9JM*K2VT ++MVIE#$,AB,C!AAC&8R484849*,`RJL!@,U2U-2I2S(E(DDF01#()6EJ:I:ELU ++MFLME392DB66;4M34M-EE*3)$@2)$I$R)!F2)DD$0DDR64D1*E34M-*2)92I4 ++MI9D2TJ4I(DF1,@2(FM*TUFLJ5*4D0R"54JI5E653`8&!D8,,,8S&1,$@2!(& ++M!AAF8B5`E0)$R1@5@5@+*J8%@6*RK*RLLLRDB29*1$@))$!"2"]>U>MF4/F0 ++MP/T68+,*_&M%:-:8">UI@4MN87`L+"AD`L+3$*(\V10,55$GV,D;)&,D:&FY ++M&F(W1.:[K[\[2[:6RB7LW=WX<PWA'E^&)ZB*=O@>0[[/15&>N>H51,]\/?.S ++M$4`46PC8@'AUP>"3O.\["J=H5K,R$,R$`7$!001'!%SJW)0813&RBB0DF3Y8 ++MXLF2=N2^QMY5UK?WQHE]B.F9BO%55&_"/@:/X1T1"$(4":`@2EHH:$&([]`" ++MIX.%`)))>KER223TVNU;M9*3AE"D[^\\'@HH*"EI>5,P<44Q,Q3'#%,<S%!` ++M%!,%(YA$3''JA0I4HN5:>]+D+PVFD]^'"Y2V^TWA45.L<A63HTAV1CUI#HF2 ++M>0DK,V-JJ*8?:C(#H/$5]?:0A"%)))))))))))))))"2222222$(220DDDD" ++M2$/2M6YR22222/9M=RMDVWAE\8/Y']!]IH:TTFM-)K34M6FC,<1S!!PQS!!Q ++M`<]KC"YCEN)0F6XW"#CG5I0MW33=TW2E.K;>'NLG<$KMFT8VVX(F-CZA.J-D ++MZ9G[PL,C%Z*@H=W3P3P(@F*((HB.&RJ89F1$ICU6W3&WI<N5L8$`F403;9.4 ++MBN=6G\_:%S6.$H'L414PFQD]GI&'RZVEDHM^6\_Y[0\<J]MJLNL_,SI\'9P5 ++M99B7R#M\Z#A5\'(\=VO77E5]>#EED\!%[N/*Z2219W.EGGD[X]E(-DIW_+-/ ++M6W/"(Y66JS45UIN,]56MF<O#>//.DOK+)35;T5X[6^7QKJLSN!=)S@)@(:?A ++M$#=[HRD4+PB(>+1`+`.7F)QT00L>!W%C/4%NM9<YVAH]JN9EX,>AFN-QM2./ ++MN0U_0(Z-#J9![Y'U/?M,T%@K*=N\?XB48_\7Z)_I7?K/7^)-_B6UD]*M%9E= ++MQ?R4Y^.M:_:?X*:"J/;4RKZZ;+HI;"TJZ!.]!E'A4QX-TTC/-?T%[033143] ++M?RI00[/B4H;JUW-U/!=OXJ&Y7*YV0_MX$"!"0D(&T,_?;=#+H113MRN+&RLA ++M%`L;_!`5G/<F%%$9-%4`?*B7E&.^;EG(5VNR&4B>+.MTA6KS2JLB(,H(=.J` ++M?@47Z[`GF=(WYV9P!7.V+`<`XTDD4DYZ#A54GQ9"6;(B8/$Z&WS,U9)8R1RL ++MJ:AY-.J=(S*H,IT*`2DO(I1BI5\#F["2.&%''.@9U`S*U2EOPW7ZE_]K+8O! ++M:14(G83(=WV<?1?U*'\C_4?._B^9\+Z/^_RE7]7_#V=[)T/N4_VJJJOX%=5^ ++M!:JSH.7^:'UZWV'5_YN?^[XYVOZ?GOQ\+G__=:K_AZU1_5O][?2JN-\5K6M7 ++MIK4+5ISXK2+-9GO;5C%JZP+GKLJRAWAT7>;6VWZ32*V\5A69)E7SF^B=EW.X ++M-LBG'ES,WBH9/6\$_7($T55&X2%I!F0NV4/'U^Y[8\.?_'S#UAPC2/6'N#,\ ++M5]GOW\3N1Y;\KMW^UY7_V#>_CYA?&O\+]SM/!6H6O"M_!\RZ[]&)K(OX/9-Z ++M%U;]#?DLV.P4ET[7'EM=+Y;*?V'M&[3-;]^KP#^7]'4^Y+H9F?=2;U-[]S^5 ++M]WU7P7?IP-W<Y^V[POW?J<GYMWYMBYI<QBHNW?3.NX&N[5F]5DK[:3TD??79 ++M_*?[S6SS:U6Z>QIS-_;=;W.^O[Z#;ZQY-?B?:\S])]WSJD^5=XT;ERYO7U+; ++MM;R6VO>Q]K^3SO3<6[R%,RY<Y571W9LW[USHI/?Q[Y)[EWW9K?Z)OW;B9UNW ++M8[[\VW-8T;%SC-CXJ\63OO?/RWOY(7O:*9MZ]:U[F[^'_;1>O7(_O+B7[&KX ++MG[K[G:J9USKLSXW\>\_5LY?M:KGZ9,3_J?.]KE==_:G!N:$V/KK7&]=MF]]U ++MFIT2;RJKM^)L^Y_J^?VS>L_SEF3=T-T5.M[/PEZXWP,>+M$JJJW_@\OW?ZN# ++MV#=7;2==U=M'?<Q(V853^"__.2-J+OK'%^$D:_Z8\@[>TD:]^SXC\-GE))L2 ++M5O_"/P$B^%>>3S&-)(7J<B_;^(DEC>5]W?JK))>K7O'D-XD<J-&UX".-)(1S ++M+A#)2-;K,/Y/1^UEQ)+9QW<!D;Q(ULZUIZ?5!&/E;?6<R_KI):_/)]/[<=ND ++MEV36B0"&;FSVS%_DD;=$:Q&*1KQK529/0I)1XRGZ9<BD8QGZ,CZ9(QC-$Q12 ++M,8QG+/2)'*W=K=&&*1PYN]B6/+)&Y'*WI&*1R(SS&UWB1C=IN%R*1O1O=68O ++M))&C7IW);BD8_YS_W%?MTC<CEQ^C7D22222,DG9I);S*=$C%(\36EWW!R>J2 ++M2&93N<^](DF13H?',GG)')JEHT+$B29,F18IV>?22F37Y7P_))_FJ>GXR'8? ++M&\]\*,',Y7,-W1(>=@9D<YQJ/YI_U*CH?\\%_13J8+VM_T..>[)S`\RB*]L> ++M&QN/9P3Q&?_KT#RV<^*B'WRV'Q/E,]S?%?_3_:]O'M"5D)U]@]I\3+_%X?RB ++M7%%0X69-6_JS:H9OL\YSDSDLEH^8VSSZ)Y$>>']8.'!^>0Z]G7^=K6L_S=." ++M>6Q?TCY"X0!]!0C%155Z^F&Z]3//V,_KGHB%^<QBLKK^/)LO2OG;3OD,U$65 ++M[.W*%0C#FE4S*R9B0RT#*$$/[_O=M"MB%4I9D9%15#UF[[9"*(`8!:R]+?P8 ++M<*R+<R;X1'Y<[_1B_*X,VLJO<^&]OV=_2/C/F7RCX^^!2(4S$&R-F@*JBB!* ++M3W*,5RJ,J(2JJ!KHB,?VWKXS,S-[L<.&&&&&&/[_[PW[*JAB<9!/:323=(B" ++M9A_=N$TS4ZXN7$P*@LC,J(85Y`+*KQ4:NU"8/.#QE3$@*?Q'^E\ON#3!.#[- ++M1F63)RE&M9C0<SGL_@H&N3Y?M%5WWN^_<_:]S_EHH:*5M%`Y\-8TGJGH!-(V ++MC&:JL<)((@@O2&V)LG5)=^BI,BF9G2&_[AD#\,<\:??"N37NLAZ=3?'`A';, ++MZ?*B$"F19YF6B:=SY&7H38X+XPZU#61-#A;#:OM/L?^_'^?\/`FPF(Z1`K(G ++M3E]$-0/0Q0'@B#DV[+K")GO$XI`,Z0F4TU&<Z?1RD#=Q/EYG"THS=*;9F&9X ++M\$,X5'-,YS.5S#5.9?1'=XEZG]GN<J"*DJ)OM,*+X*I688%5`%7V?\G0#D+T ++MWMV8[#U7N9_J7CJM]-OG'P\LR^#/-+O>"K,]S.G7%3_^]9Y;[O]^_D3Y3^R7 ++MX$/B@'T01#2T4FB#^N\TP_9`J(J`]$&R>(@FGF'JA3M.^\XZ7).N4[,L]O_( ++M\)?`=>XWT_;5=MX.>7!P4T>;2)V*=EF;)LLKI2)K:$^1W2!!LEE8S.^=-K=E ++MT$OWN-^[^>NFV3XH;&FHEA#6_-\1V6HB3%#JPB6U$1,*BT<%#<#5"*HB':<; ++M>_8]]S.CJZVRE]._'HT2HWXJ:*/1SE\$WLSXK6U&O]/ZV*:"::B:/SK(^U.Y ++M31\D^L>CR_+^2D,O<.2^L5(OW&WW'@?E^0-\3G(.&1.X/`%@XYTO+T>13"O@ ++MXI=XU\B69+&5?97.R%EF6[D,K4?"P=_JX'2<5[MSU_[7)LIM)^+402R9G0L= ++M`;PN)?U-!C`S*/D7H#((1C`15^O0DI)I]A[,]2Q<,VJK]C?>Y]!Z;WGUW_4H ++M3*3^.9/"F6<%2]?]ZPEL10,27%R%RU>O;'B$8'#>%13M5%7%.L165SQ8*,C* ++M?([3;>2[#J<KLN,[:W66G2]L!D'2[`RJPS*JM9/*HEQ$MB#E'(BX+XO:]\!] ++M%`B&=/"1$$$RNDW7(T,WN-\P=X-+I:%"VVLB'-.;X+$X<VK@.O!,@0S<>[\) ++MS]'>=_[7<F8@@F=<#R*HF-`5%ZSPT'(G3$#G##$WT>4X$C:]EDO`GT`,@4<J ++M*N:9K#,N<3G4>)C[?*J]KXB.[W(FY1!#MS1.0/K$.J<'>`]`WR[U7G/^3SWH ++MG8F2R@JY"<!F0#`B@BB#"]09'=N@O:YFVP<*=1X\>1F<TJLKI(YSE<YW:^(3 ++M0>WLW;6\=U_/G#O9R=4<I/(^`#RY*&;*QY1$$)7'T!2Z*AH,V)$/P]9\K<=] ++M[?[GI:?)E'@>DS>JT3.4!7+HN%<Y+3+IH7`TG/5NH0;L3N:/5STB^#:16H&G ++M8H6IRLYRQ95X?=B'2/80&.1M==WES#[#7]?9/+?>WE<](6!.PSA#.\:<Q.[W ++MDH@A`3(6541N2K#E&4RLRHR[];YO_[[7OLG'ZKNVR#Q^O9\M9@:Y)+)ON7$2 ++M3;L(8!=CI,[]GV/A?"\_F[S-\>9W\(GN`-#CL11$]_N&`//]-Y?/XG4I5281 ++M65A.&<T:C(9<Z22YXCB9M]%845&5[:/4]7(L(R2/:IEJ\:@:>5UGD?(^LZCA ++M$HB*$^X2=<-!]KX0@\1RD0L#E!R:R&"`JADX^PZMPS.A#:WE?,>T*MS%SMX@ ++MIBQW0GS.)F25IL_/C3V6J7N/=OW[.6O:]QWPE03]4_?BOB7R/X^W0O#\Y'P! ++M:%_,OF>\>\8%W'UKOVO#-?NM_TM&ZB.AN-!J&=$?@#[7=[?O<XKXR>-4^^HF ++M@B&BNYUGNL,KV>KT%\>-J6DY!DCRAG[]O/G#Y`*4?$?K)X(<"_._9G3V_^0G ++MAZ_@Q**2(92,R9(R,2$2-<9)$-!,/;\_,H/[4C!^1)PW_W8Y]SZO/[U-#*C3 ++MN\[=+XA/)I<#+S(<;;-:0.R=]WQ4R";C6!$.W3+Z>LA07$]D'E]][R*O_-IJ ++M0@3_)@_CRF@/[Z,D015\VS*HKF1!,I4*-]L[G!QN1QK?'4AG*L]&=*^]O819 ++MI7L]S/%8^WQ''I?WN]R:9#).I;[)WV<UDD11"]6>K*BV68NK0L8,]Z192VXU ++M_*(;(442,PY`O44S3*[!`(39"MT.1N>0@7P2/8>1\?R#:/&$:TJJ*HJ*@JH* ++MH*N+QOEAR/5""<E/M@'@[[P\D@;E'91V:Y:,KL6&5'BO,K*V'JL',X5V3QL< ++M)LN)T%P5C-6]54]G.=):2L9W)<%GXZZUJ0JH=U4]SD5\$J8E<Y;IK-D0JP#3 ++MWWKYB3QF3`2`9")`5R!:4WJ!ND*!"W?E_Y0W,L3`.%LO57N9PKI&7,82A!W^ ++M"(XYB`H(AD5^Y]I(_HX:1:CEQK&7P2TO#56ZF!E(5J+DVI&TX8:<;B:JBBHJ ++M^ED(S+,T\HSG;XK93I8N0/;?4541%5#ZC?3<,B^L9O"_/]QH=R(>>215\@:R ++M-2*@L_Q7GC2TF\\?A'0O7,(G9;#$G/EE#^M"PA!,BXAX<05#T@A$040E/N]/ ++M]KX$'8GXZ?OQ$D_BD_=(%_5)7^Q/YXB(9Q:K);3[P76R&VU^^NHYCC!P6X\_ ++MC8@][#U294>TZR2/@"AX2N!GJ/VC=JO/[Q=+?#FZ+?6+MSB2OMJ;ZT,RJYMK ++ML?EJ>*7UOO(/!ZK_*S=3[Z6GM\-KD-<LP>YT*B6@F%V7I?'(428_/&7!$)%/ ++M<_=U!#,0PXDH+/4*^MP;0<!4M9Z#N<XDERJ4)5)R%T%:IE5A1ADSV=6Z2#B6 ++MOGRX]55]:=%36X<+Z>OC1MP^,WOW=><);['ZC/H5Z\X/[.?K1^`'ZO_I?A_B ++ME^$=Y]I/A^^;5&$.0YC&&9E&3AJ<.WX'9=C,<GU`")`/="HB&X-TB,A:454U ++M05AG4"OPR/N[^_0#K].]U$QA-SSOS#@7$-\]2X!XYSPKKQ#0\/5Z7_BXA]]0 ++M/B^!^E97R_W6OF;915>]SWG;:V=,NA7E9["T0EFH9F>YY#(N#G/C+Y69((1< ++MQPRVPA"18BLK2J!JP(R+O+6PI3*B9PLNN,Q/]U[#M#_#XP4]\JI'[4'P0OD$ ++MO25T0".4$55%$(*(D%!-K:+^Z'772SK/8895PV`K>%JYUR6`\[JR]S,MIF5! ++MF/1,R.0TX";#Y%@@RJJ-)D>[O(?W#*?/1W!_T.7]Q_I_^::M8U/?]".].Z+X ++M(P@:DIC,Q#YI@;OK<X_F3^@,=G1'>?H0>$A53F)I?L@0#U7C^5<56\,,[J,7 ++MWL#2'@!>HU>!Z"([#B;F^#TYQ<QIZ&C1H_>;Z![<9W%ZGDJ?]9DS7H%QB?C) ++MT2EA/W>R>:8;>_G,ZO%8JK@E`]8H401^IT%?Q[_H_V;RE,TR9J]^GN;\[]_B ++M1?)T]5&R=$+]JK753\7TMPB/9]0?K'\"`_8^@V((+/P[(I/3&3XY@M`20YGA ++MI[&CP@XB/$BJ(@H"F^ISA`GG/!W$].G7MYZ*\,W;N(V<YQQSU1])XN">$IW> ++M2!@9WIU0'Q$T3A_Q71DG'X)AHGLXA_C<.OA`-B^)OT>OT:S6!#YV9#D&I,@J ++MR;!RX[XY5(GSY]R.0>"4/>D%P]&(#TO:DH#B1R$XK8>'MYKXNPGA)WCY<&@Z ++MYY+W(<WTS?N"?+#3NI]DH^#($S),/!]?+A:A^_GH/;^XS-SQM6CO\FB<]S_! ++M,9C>9FW9&\?VYZCWCSQ>C,I\"=[J[)/<#Z0G_!AUZ0NMY3J4II**ZV0ZC(:4 ++M]D<2.J9,'CMTWK;OX]_/MIZ#YFDW'F">SSFE,A1P^A0,J<O@*5*I7$()2J(5 ++ME*L[(@/""V0ZG@!Z1WBXUYB>F/3>]9)Z)-1OHAVD4FO<HY5QO6W*)D@Z.<XZ ++MO?Q\]/:?;6W9%21_:@&!W?0X<A]L/2>UWJ:G4&&R/#X33OR:4BF`J(CW.\T` ++MZNV^&6NBB9I&A@-,>%<U"$>E`[E\._MV;#W=EFK6O@V:=1EOCB]_DG%RDQ[4 ++M5_(=N+/XD(_FM`II1):/H8HL(#[$/J]<PRG40X531!-9'OU:?[6\K!9-V:77 ++MWWPZ>N8S,9AONV'($[^R?#>WK[WSF3BT)CK)')+XC).L@4W3C*@#*@LJ-FK` ++ME@02PF=F'KOSDF?:C\V#-P4IT\FG()A*(,#E.'S/09T..+#'$$D^M$U'\?^P ++M_:,^WF!^'('"W(O5=8_0XN^XN#?[.=+Q:I)(QYWAXV.#T3,`JH"B\A2O,6ZV ++M9S6GFKA*SM_L\4DY1"C:S0L;0$UDZ/G>>\IG^$.^^`R\_40O".MWW/N&)^9[ ++M_3IZ>O\OUO5:%/RLP:0*I#G,%AD?E^.(]+[*G$6"_CF9MS"]_\HU1XL]R+_= ++M2H!Y=:>LL0%#24$0!W!L0@,#=6WEL3'82J?:4]:"?!*D#Q:HAOTE$`DL"D45 ++M:[;\I)5)F2ITXD1#E/8$"A4!)ULJHJ)4"02\J*(P)VITK=+DY1IQCS6X$=2> ++M663R='D)I-[PBGQ,-O=3'M6(;52S[A\(%X-91>6@J8=-Y420'P.OW?T]O!`D ++M0WI[O:[C6L7O)^(N?S/EUY:CR@BC#2H:?*F57LI!D=!X/+"AI!LL$-R"SH'C ++M^:'EZOWWA]5KN3@^1(GT^,$/K29#MJ4_-.0-PT4U%6CO+O3I+'UO2GUR+,#H ++M^OR^F!].<C(#TY9[NE3WEF:N3.+P0DQH(*1"49(3%VJ*/W>X;%_/[7YCY-M2 ++M"[@FDCJ6$OMAT>YA@B(BYG)>LTLF1R(H5S9F-:OIF>DS/0(<GV/@/U$,JH(Z ++M`P/NOISV`DAW),T%%!(76QJ"/DL)0H2P.V#N?;5O+RRJDP.#CMY.&S#T1Z>_ ++MR73WIW'IUNT](R5*9*LPTZ\;5)FL-(0(D<8#D(TC$"Z/9FCG'<@]_^;!QO]M ++MI[T'VNNDM>B%>\]S=?2F[D@FQO=KT6Z8)\Y1V;PVA)7HE/3<D>I9->O%3I'( ++M$`="1-$Y]\YJ`WB;C!37I]*F$\*:E*?8D!DB4O-@0:DB*2@R*9E7%V:TZ=AE ++M!&X=$CK,,6XW%HMU=]9IKG=<1B-()$-&!D$:6A/0OBZZ)=27/X">[]Q"?%:9 ++MJ+O=)O`:T-0"VA4J+M]PIR2!5M2''5)149A&#,0A^!U]?AI"&<#(<A*,VMGV ++M>V].`O+1-:-0U3:3#-SBLRT$\3J,XQ>(*-1QR;-:B#<Y$F93[NC::,G]A'$& ++MI=]-:2*/?S*WF$5+F&$44DR$)DQ!\H#.G)D.B^DI#D+S-I(+R;M<J#?$N47F ++MKPZXN28J2H683NTG4-J2$F,LR\BP),QDCN.[B:1P"%<9E@#F6##7,Y2J84H2 ++MD*)T9X^%FI>G&4.HH#1'=&%J=R4]8,G).KLW^+MSX#]AQKV='W\3U)^,GVT^ ++MV=>\7U]V1BX.'EXX!?6(7TZ_H:#[`>L1Z$_6FEZ"H&I^>@9AJ'#1FIU+&HT: ++M2G(IHU`9K&AQY?C)[_IX(^J.G/'@89KR;NY-_8Z:F#N9ZFH2Q4L+V\,S!-:I ++MGS,#H@0454(19#=(J(.W<E`KV!_,!R49V(G>'EWGGE$>7:@UW>WZD.P)SST" ++M7IG`%UW;\3H@>OVW]LV@?7!X]L1OL;TZ8([T;R+O(4,S'SV8=9U>,*!XNMQ3 ++M]WL=0\KJB1&0BBD$[-#7]-HB(2+X)/AHR(G.KZ.1J!X)>_KE8S>LV>S]/N!! ++M]Z5%*001&(1%1:6C%6Q6MDBVVHK:QK`@K2K$`"(4((T*(4%!5:B-JQMM%;%2 ++M:M5A&@8@5B14I5H5"AH0D5456Q:C%6T:R;46BV*Q6J2T5C6J-BMJB$$5F12E ++M*5H1H2A`JT6Q634:C$:K%JK&UC:K%H*-8V2UH@U&BM1K8J2,:LFQ18VTE58U ++MMC9-54&VU%I*!6D!2EHH`I56@%*!VC&H*,)L%MJ^/5K;;C9DS`#,B!F4S"0C ++M,B(@B*J((B*H`*JR0)0Y?`5;^GNUU<.\5I9>>-0LW[76#G:%QGJ]XJVF%4RE ++MN77<,<J)R*98+*TBNOS,XUV?X+CC1"!H/I-"41E:JB?J`*'4Q\5(-!$J$DC4 ++M&OR*BP"5)\HM=^?37YF5#<SFB*\AR*?/O<DD]`KNM>,XHLRT42(JRK10,49- ++M+5'Z+W+\5??K,_E7^C7W+_"XDDBZOZ)4[/U]9$:M>6)H4JDXNTK4R3/"M7I< ++M$BI.1>2R.)[,2I55I2J2:O?&?0[*@_2C5$3QA/Z'YLD^6?42Y]]GU99$PA75 ++MR_V_2:^*;-D/W/\-Q'E^5!8UOV?J_K)9E6X^J/POT_7W"6GS]5O"(]2/Q'VX ++MI%"B-%!%4C(T]M@<2*TZH"#.(4DPTU:=\M#UJGJ(D1*P*YF4?8O>P;!*?P2? ++MBJC])O/O?S+^'U]'1^)O]Z$):]>8>Z6>RKYZ8$MRS&",J!`ILS/B*J)1-.,Z ++M#JU^_2U]Y\^E'T>^3#\ICVW1]*/S^8D_&2?A*G]?*LI"81[T>"K!:5'O=0RO ++ML+..GE?50MF-!-!J*UN:K$I)F%^E&UA6JB*],I;GPPB#5'VB._%1^%\/WOVE ++MU7X+/UR3]W<(_=Q;2]*_<I7X%U3:A_@[>K]'LF23SC<[9[;K\7*3X=?,7Z(; ++M/2`<7)#[_2>4C_%2I6!Z0SY,?/J0@:(^ND[E*7[L;H%+/*J4CJBC]EJ(A?64 ++M0LG.LF*/PO+R(^[C[]^;B'/11Y"2J8C]EOS</W*RD?HOLT>_M:4'Q?I]^J#9 ++MN?V_:6OV^IQ-7C^_VRS[W\_GY[*L7&_M[\WDS]5+)_#^[Z]V)]=5\7I^EGU\ ++MK$Y_)D_4_<P>OBYE*]=<_VNFT*K7YG\7<_I^&8OPL/T^OKY'UZ//O\@/1%&= ++M'PUYU;[>CCG@P\KDKSS:=)S>=_F,D):)(.%G99YHM!15JF"9\]EQ1(4QH6LT ++M<-N+.M2Y[\_?]2^ZN?KTS^GD9^W[^/-PS9_/JY4-J?M[B*NEGXOGJ22,4\I^ ++M3B7IN:_>W8/WU'U\>>*%RSZS$N9]?B_?OS]?#WU=9Z5]<IG\)UI?7X>9\4_C ++MV;^%-3TY^?GN_/VSZV<]4_U#*^[_/W*_&AFWX^)A'^%7&NO0/G@^5Q>E=6C9 ++M+5*5Y*RA8(S>-622/P'CP(VVFH87RY(\?G+KB^"+'`R+#$#F0B!Y,[W]SR(7 ++MWV&&KH,Z=ZN)@9%\"*CSK1[A$S4>G#$J`D^$^'H=YYAZ'Q.I-YB*D@\]08/- ++M_=26.^?WZIJ4XA,DH\R>T9YXKFS!;,R5S^NGIZ]ZT;]>SG68_O?2[8AF5.]H ++MR.Z-$FA,]LB^N"FTX4GL9):F)Y!*)Z7O?!7697/*\6<N&LZJAF*8%,H))+%9 ++M%*6:#VH=)2^2J5FGKSNC!FN6)W06E9*2B@SHD56PI%:*[2QKQ"29K!16FJDK ++M4/JF)96BI7BTTK+"2FT1A7I0I)FD2RU$JV5*);%F9:%6"N>\(T-66>(Y8.A/ ++M52A,^+RIF'JG2#@A7A"M/-%'4CGU.F+-9\TTDTMJB,RPG6265[2*TPU>5G%) ++M-55/1&>:>^)WAM>>3V>]U]@;>#WB0/*B6B)0NN`'DSVO&=XAGH)WHUK(Y\GV ++M\J`PJK7\;S%5%8(5-93Q(K(A:10M<11*5">(CH7?`5`Y873BJ/+:(09`K@F6 ++MM9Z6"#)A*Y6+D`G,D!JUVS4G9>[@=)R9W]NK'(WM')Y=_1OM>?=K.N41[Y&5 ++M+W3Z@C"S$C+(RLS"+QY@9VAW\,P_N:TS/,C1O^_UO>=7E2\C>/VM6-<>DQ)) ++M#4986F-26DL7(5)'+4A"](R#?/O=`Y7OCOE]*'=)=.A[NL\_Y*>:GX[[%.1] ++M?/19,1*@WZF$=)^^5.P+]:G3;IQ['6OGYK([&\)[1G4G4><NIPCI%#Z9Q1]Q ++M=6!+&9J\D'G$%XA"@\4?R1G[H2CO$[N_1@>R*4/,VA\)"ZYJ'L=5#T$!X_#C ++MGABOJM]NQY.^EQAC[.<IZ2>]W:TES-Q1,*A?.E327OVO!1JBU!W74"_FI*1] ++MK.F?LPC"9G?HV$S.WUI[=)SUZJ^G8PAY]1"^['E!'*-42@]_&RE^'44N12/B ++M:>S'E-3&+[DX^E'WGM.3J'EZI8>JE7/8`F9N>IA\<)IBCQW@>4:!T$-%)1Q& ++M<7>8]4\"!BI":DJG.>*"U\L1TY_`ZM'6.CPG/?H-#OIB=8#V>.!UZ>K\<E?V ++M,NCCO3OZ5#'Z$?A+68;!GT$^5>2P^/P2S,D.YUTUQ15+"CZ64":BPCBH%<2# ++M`EL2$@R$9Y*:7?Q7D%I#_@^U?KMKOE?GX]R?JZ_FO3?Q'N_A+KX3I31C)76T ++M]]>,HJ\>B,LB5-%K-ETHD)JBB=:&HD=-(SYQRK\^^DO3^Q^[9]\_#_6?TQ5^ ++M:^%0_HIT?GW#QY,R?%\J.K/N7HK*E4OV7K_7[G[];RK/?9\Z(C0@P''Q0Q]A ++M#XQ=:PQHC,R;,"QZ(:-FC'OP)(<7CL=_;@[]X1/OSM#W]Z'MS"5FT'`PJ3K* ++M&]WA62`/13`@Q8'6AD0PJMVJA+\A7PO9$&1)$8*;A$"E7!GK!9P;+2<3O\$> ++M$#MLP#.[(\G'CW)[SP["N?D&*'N/0@)QU"G+S+ZJCQ"-U!+8F7=W^B=DJ6Q0 ++M,UA!.#O#F^&CSF::PS-!SB4Z:DM\SL$B70KH%P*1;KE<K96>,(,H'^$2T+GP ++M=-"><"9+L@#B1.+50)\9F&.P0"3!CM22YU`I=/0YW62?>`Z/\7T[\`3\O[&` ++M^)4?94^7W?<V^"G(4I"3YFW;L%T>*<'$DZ4V"_$>Z(\#]YP)T0GE`ZGS=.2? ++M'H/JQZ>%.A!VE?3[OAI3F5]3/(PA0-%@==*OZ;`!^#*FHX6#XTTC'NXZ'XYX ++MO"[^[%_9U4@/J0\U.A?O+VT^'$/O>A[4@;E0^#W%W+R>/Z?T?>^9DIVG2-$1 ++M0-._X$[_VVR[;=DKO#(5$_-;`4**A?5$!&4`^A`KDJ)0`_F]V?PX]Z`[H$^1 ++M[R8=8UYV1<DZV$@Y!32"LAK/QJ=ML:P3)0LPH%*H@M3;8;,UF9K#_%:O\P[_ ++M*?W']T.X]:,3SSSYW\>,'TS#,LR?8?=S^O$^3@Q7^8FEZS5%=$^?!Y\B]#>' ++MH3V:1#K`!O!D8:@T"?DD*\XB2"QLL!`@K,E2*$SN,)H"@FPP7V#"'@K67G'0 ++M\&OGM)%\),Y^?JMH3:&R<`I5?)).5K##>&8687KR^Q[2'L3VH_)8H]W9CIAH ++MB(M*\7.::F48DEDV$98=JW(2N-<N'7"N+=72XBISY@43SQBIL@KEE:CM%?'2 ++M0#V_Y?RY2%*%*%E#`@])D,Q[U#U;3Y1H$,0U^"&*G*#^5*$24(;6-7-M?%[F ++MOK[!:C;%@@T1LE$:,8VA-:-F5&BC09FHBBK18DMM&@C5C):,;!:S(04"4T(4 ++MB'5^/A?HO<HGZT`,I)0I0T`/?%T>].<$VK^W\"-%4SV6$D@4;;)*D,DS,!YD ++M!TDPCTZNCFNL=]=*\5>+@19#JYQ"*\NK6NUXN[JF*\+8,FB2$,F,:-)5>76^ ++M"KT[J^,ZWIU0^OTT&R>6765-YF8:`^$$UW.CN.W?&>CWX<!LE0-DU#8SC0Q^ ++M$["S!#+GTUU&9SF?MT(B;Q!0Z#:$X2I60:!P5%B;//3U:C6^)S^NZ5<+E=9F ++M4YE-:@8`F%K!#0TT_C`?)Z?=Q0ON8*_*^,C!91,K8[W%<;UM2!JXSZ(X?HGX ++MNN!`XX!_-D2AI/R/UP?&:URT_?Z/'Y0B=OS0>B].`_'..GZ2DX,O(G)]\=,, ++M(HZ;+U>;$>K.VO8ZW;:1P\""(0"&WH')/BD2TZ=D4:AJ$14&'5F9VX><\!E< ++M8Y!X^K?>?'WJZ/%4\/9CW#W%%G=FGK^R>M_WQ8TP\M89YUY/[__#?V9Y+S_/ ++M)CW0=SZ/:3VH.`]1MK$H((F$+F1P/'%<H#?31[X=5[$)0E-+0O/W6]9I)T*+ ++M-)/1:9IX$*+:;I$&1$)U84'G-A9218"5HEY.:BOCKU<RL?`YJN*C&T%)9@Y' ++MKD#"2BD:%H!R5,@@LBF$+:6BYO:J2I419^Y0!0J5`A,!W]41V.=SGY*9ZA`0 ++M10_6J1/5'NU)ANP,/5&(O"9`E03#U-&`'!=6Q?PN%@7AE42%?-?2H]1IG332 ++MO?!7NS(1<["^U&0HD&YU?)BCZ&4C7%8=0L%<BP4*7#(/8:LSG"9,\@ZLSW(D ++M\TCDJK#X)ES1%,=-F)R^XI[)\J\@>7TE.LP^*?)AW\_?/#A#Y>P^M:NZU!92 ++MQ53!\BO*S54%3B@66P\=*J(])60LNG<2JA,,,BY<R)UDLJ$%0)I+(82H4O[P ++MQ,G'6=5%50HB0>4)>>_KHTDT"_KX/:ZQ'S_F&R23WG#Y`I.9#N1&$!XY:CGW ++M>G],T]+GAEVY_.N^Y4\[E0`E_;]`S0H7`&8BY@/H^:;#XD-/Q![ON(44!2^U ++M`9)2UHUF:-3317%K<6H2HJ*%HI#PG(H#?<Q[FM`<)\HY^%^EWHO>>N^(K?+4 ++MKW/-5&TR,DFT44F:R;,DI\!:YZG&4L.CFN(IC";C7&C4(PEO?>N^KJB9A7RE ++MLCM&Z,6="4N!436A[I4!]Y$?HVE&(1E5`/#V.#YVJSPT+K>)[\)R5X'B>;ZX ++MUZ*H)-/?ST-@$L<C]&0&D/*/="-@0\HIGK)X0Z^KS3NJK7GH<Y>.AGD^DR=Q ++MGJSY/I=^SJ<=,#5%JU-\S;YQOS<].GQZ<Y!YF'U8.Z.$/G40UI+6#S(:+4H9 ++MF'Y/]-/GOXTJ?CWX)0\'[''\:#8R)A)_Q+68GZ/_*_1B%%''(R,M-J:DR7YO ++ME/]3+WKT1#:4!,Q094`50!51&14$`TY8"B3H")U]/A.?Y1LG074/V^X5D9F, ++MF;K69V!E>SND.:U&'E"<#5KC]51L2@RLJ(#*"/55<@KA2+#"B].TAT6Y34C/ ++M"+B>='.`DGVK$I^;MWB05),)%[?F=&J2`LS0G<0KWQ2/R4YWO8TF@XC#AEPW ++M@/,J\A!J'4`Z\<.5XLCZ&LKHORPX.FKK:"LQA.\UY/!0>"@,`X$5!%%06Z<4 ++MY>4+>>1,F/4LI+N-I<R5[-U3\OU>7W^W\0OJFCY)]5Q^'C$LN-8:,1RIK6!C ++M,E%Q@8S$&RR*RL<XS$"CC-<IA0C:5-1H7?-PD\XV82[3<FV6PS&7\P'V=SV# ++M!^\8)U3/M![&='V<#-PK"N%#KVY*_?VYAOO>U]][F'6%]ES>=]>-9#,&K+\U ++MIS;F<3^R]S5$`8,3:-%)A)^@0HN>DL-@,R1V^^6XD-N9J8/XB))7)BQ8Q82' ++M43$='W=>![W+^VTGI]'G1=.[)KY5JU1,063^+T^OHV+T#Q+_CX)AH.H=#TN! ++MTV<SJJHP^G+&$LC4&66YUGY#RUPV.`R8^3Z9EGS3]-?W@]?X_NBO\'B_5^&M ++M/YIW'Y_E#QH^;>,`*"*'=)304685^W^C@Z=X%/<=CQX-H=?0^)Y&TB\#L$82 ++M*>5JCP+"5BH,FM1HG]UB9!(P68F!%%%K!#(JG)/21HS$P*31A#"CJ(4I(FR& ++MD],EK$=1Y#UUXV!>.>^(<"N,D0$-Y/3]!3>4U`>DD)+KR^Z>S&UA2;UBC,/* ++M[SR\<'`V;U8CY#N#(?3@^B*J+0$>^J0!]+,<],"AYZ'T?8C[.'V+;P^AT?OG ++M>UPY9U+7]@S!*+R5F?Q3:H5EI.6MJ=7XK%)CF=3<BS]IK9D^+]Y??I]Z='.O ++M[FKJK);]RJ5*/Q_2U`IR4)1&$#;]<FB;S3309F=&(R)D3FN]_<G(%EHF7KFB ++M]G*ZL(<3K=P^2EJ7[^,A-SRQ=FV,NZEMST4<P*R**LD/PBLEG/KTLDE=L^WC ++M5MQR113(JY&/F=^@_S+BBJH.F&/&O/H<%=S^9[%?JB<8)^U\T?;0D/C(3T'I ++M9\73N1^L3M.Q)V73Z(#XB_'";GE'0'OR)SZ`8']H$_0?',/(L$2"*(DB3)'A ++MMV8=0.;FN11QA($B6IFYD\F<0O#>7Y?`0,/C#,Y\3US\Y#[OH65<Q(4%F-QR ++MS@B0=2<D:C4<KN#N\&.G&.K$L=<)[LX5_G0Z;MEVU?VOV==G5O2TM_Y*?R8F ++M$A,`UT3"#[T3Y*:-717H0IUGP5&#@+TT=YT0'CNY(BHD)_)9<-KFR<XTWK,> ++MUR-159F,%^)W'4D/1_QX'DD$3NQ54$/%K3P^+W[3Z'3U]/M>F-?9V2%9:PH6 ++MV+BAA>5S\ARTEC>4E515015W[*J#LALA74-3Q)0(1@SERV0I"0V9DKC)9?+F ++MT(Z+,8YREPN$_9*S348_CRF0-.N^M(;3I.H$T>2,N2863.BHQKIBG)P^ZC.N ++MB0DF'M/RF>'A*V0C)<U26U2*%'D!2HN"E,1B(%(=5FJ[:;,1J2LHD)B5`B7< ++MT-2JU:#(XT:-%-)NXS7.S<&ZF@IR%)-',LP8!)E)8QAR=F<.3O-.&;MWT-;= ++MX&)G_L?2D\G@\RZ'=]YHF_#GN\,V1&X]7YV^9\NN&O+#)B#<+D:Y_R]&IW!X ++MFC^A_GG';9GETM%!>S6M^<'WG<4?E?5>7N>XP]MZ]K151];2I%"I9##')B3% ++MPZ,,W,"P(OY.MFD,1'@8D3B$*!"FLS$R2H@;A"BX69A)AA35F7%J(268PW(! ++M,@$4"ZRI]ERE"8<($N)9<-)-LQ-B)O+>G<I2"YL0$$4(E2"@H??G)FG<&21/ ++MZO[,S1_1G/[6G[>GDLWIYH.4XLQGFNV_`P#\B3\#^W]/9>>G5'R/1BG`P,D* ++M(3`(33*U2M+Y*U(/!@X9^8=_GL/-#SPLH,.=83TNY##Y#!M\(5-^"=M#Q.TE ++M]WQ')'ABVYQB&X,7P0.Z`$/Q(?9S8TCY5)5"%"4T#^&_;`ZH:0]J*A>AWG=+ ++MD68@9%&2N+A[*##/GF9W`8%<YE#&0VWYG,,07(Y5S-;N3;DFR:C0PFWCCHS6 ++MC$&6RRJ.(WF&F:#<XR5D9*168V\R'4E6):1TC[C:A-F(<L\5`@'/%B[D-0M( ++MFX#3N#?;FZLIO%9AG6-AMWN]YD8BJCBNJ$X#Q(D!GH@9RF2(@:6QQ=0Z!.7O ++M]IMEE=X`)99]TK.X5-(K.HW$!IYI8R9`9BIKJ;%D8$&43!(5^-!DAQ('-E1\ ++MK6"VL<D,M%GO:_7O9X1YJ>;CMCVCBXL[:-<29*<Q^RN>.**"E&LFLG4?^&B[ ++MZL$?!W0!]*U$/';2K[@UYNJ;>TMKC)Q))7DKI%4D\SEC`<JB]`,RM:Q8%Q-? ++M>SE<+$+2XZ:*-6E(\9+;1'FD?*0_-\>[C\G_;Z>0]XE>3^A@O[SM]'ZH1,,D ++M"4`Q"E>#(K]\W(=A#+EZ.Q'`E_?$*</`![-/Y70>GK]K?J50+UT+DC408D!+ ++MH[)G[)]/48D/`3ZI*@/P-0=#R4P^8X.'?W\(@>Z^U^BGAX?GJJ?QI5*4HI6D ++M#H'J$B%]#F=O&>OB7A\M\CK\]5WW=O0QYV<CYS0GP)7]B7<\P11%#VPP#ICA ++MN4_:0%*D2M`>8#YTP/MQDHT'.8(9K'4M,,M?(?`]$4Z#<%7NA@Y!2="3U6D[ ++M'<??XTD%[3#;>U3?!AW:SM#E5V_R%-77N'JIZV6N'[4#]*MG/5$?*&@I3Q[; ++M$"C^"<AB.IZDGK'R\`'+RZ![S[_!T#W(.RGY]#]L_L\_9CL;X7]?\^Y/[G]= ++M8QZU/L:WIC"$D*X[^&4Y#>+]2=4B?/5"3/I[UV<.$*8I2;3KIFSH&.QP-4<Q ++MC1&\YTF<8&)>C@YXRH9H\3A_@I[OF6#V<Y??3F$C,7#&,#-NT'8>1XM%8B=5 ++M/D]#P(\(KKX)N3XH._6=GP5'K[2;:'%)-=\89^_UX@IZ&\X$RZ5`STWYO@<3 ++M4061)KRWO]>7P:_/HU(AM@?$5Y'>%V/4!YVI<H)LS,V>@/3Y![7_%PB$"B)$ ++M#U'4H\3VH^9XX7=&=R/Q?)Z]L/Q(\Z\(J[%';6G61]>'1TDO0&@.TIK0D?VG ++MTOP?L?9G7MLH*B228J=7&46<8=&Z=3#CDQ7<#3=6#DRRX-X:Q.3ZH/W_YWYY ++M]'N/N=IO$-L*<+C</C*K.<ZGC<+:K.*NZ111W&M+*R==!8RS<:;/('/B<3=L ++M#E**_"D+\697"H9SMR]GCX,.!4%%'Z:@T2%R>[SFK(B<UA9:YIHI#)%G:0K' ++MA'B06*BIF;=T@I]Q$QAY+O<ZW$2M3,86J@E<-HW@X/""F$0X\&X&5<0'X1'% ++M1/]#'\V(^IB-(\'Q?0+7M%?3"V]`_/D3$\8R^`['ST\$7F=''(>**=X>!K!S ++M+,F/ZNZ?U+^PPWZ&#^K(O\/C]@:-O6-'7_UOA36W]DG%%_>_D?,VA[U])OUQ ++MA58K[]0#0T@6C6@]N')3BUX+BJ>I,35BZ5Q4'#AUE0MYHT$(3#38$23FLB*` ++M*EY2H"`X.2`[RZ]XF!U+TDW.?(?(_#_$V>B]`R@>!*(82![//R\SO77OKMSJ ++M<$@^8$%@E8+:@C)'EPB4)8WQ2<.("BH;K0U%(;R^JJ.5(3;=PMASZ8$527;L ++MO?S:S>FG-TV[9<8^EA9MW52Y'.:R'99&[EMSAZ-V(RT16&11.J8O*@*'4,B, ++M(6%I&P5[&&XX<IYB),FV4!LH1@5DH5$D,A!V<A!(HH5$E.-(&)D!\VLS5C,$ ++MVK(DV49:.G#G-R<7$RB+Y$UVZQ,BT3$:X<[ZKD6LH220DA%$DL!"0RQ)BX98 ++M4H@.;MPV!)B:S(J68E@#8-<RS`LYF$4SDN:Q2EP-$=-/E^!Y?#\C^%X_*]G] ++MGT[GPO5F!7X05.>>!DE"4^].I7]"]5J'B&QD]HG_K?SZXU/;[&`'>:'`DF&] ++MR,9?XW/&T\/X_R.X?UU5/\@=ZW4_NN_<?YL[_NDC)^,IP0TG?%"?7Z!X5$'& ++M8]Q`Y!)5)$R$2'9%Q,D_!Z]Z-NV`X."&?*,F*.9"$5S*D%T;"(IB3HS("Q@@ ++M@@S"BLT8FFT38#!1HA";"P)N.;,LPD,29(6I2LQE2DDA9F,)1:VJHL92PZ(' ++MY:]X']>1I#[Z.>3QT'E^B:8C)]>T//RDFL.G6*)\<RX]6:KIR>GBB?7A@13' ++MYMA$F8F&8!D%%>%@;@/#2?6>CG[0SUJ/V1WP?SRC^F6-:UEGGD7Z8\'K\1R\ ++MH[N@G/2#J%^:NX83.O<^!I"WC]Z2&;]>M$&EY6D9/^_8H?B`IP9Z!:KJHE5Z ++M"#A0+")R7;GEW4BE$`J)6NJC+9>C(@00>-_VC>W^M?Z2G^JAW7(Q?M//\#^O ++M],<RPUIC`]P2>&AQ`-#3='`M643)%89!Z=&1KJ/IA#VI0\R!_:PJX'O@D^7@ ++M:#D.'O0?,'DT_(#WS!;CL>`>+Y*OFNM)@8HTZ"0R`IIJJ1I:;`LP"P"3(LJD ++M&&?#89C`EH:9$DNF8T9H#1%95/AR`/@08"?BP/0A*=YG9V8Q&,Q81:W$9$'" ++MIF6Q@2D!:6V"0W(@;$),@17.-QT6@B$@E:*&Z)$,6WVN,]#F\;?RHM;P_3CW ++MK@A==R&<^N46=LR5G)N1.\84EWI5Q($R#;[A>=9976#J*^66+&]</W+5M!2* ++MPD.8[?K&$)-2$HF<S6UE<,H.6.\W=2K,2Q))#XUUT4BEY7=505"D4R)4C%/X ++M>G]"OF="#N'Q@GQ\F20]O(DYG?.=+U2D(PC/M9/FKHLJ97W];[UGUQU^7W+1 ++M1L&J9%BG\+JB?HWJ9OX@E$4H"/NW\%=*)/YT>]+J9O%'U3F?YU'S5U1B*F8: ++M2/Q4<?)TN&*=F#Y]9-RX^MO])^BQY\4]?Z*E"UT*9]UV?I=;M(O%PF6JU#0J ++MDE6:EU1::A:8M(3P:LKEL*CDI(JXL18>M4UA\WN7-C[,]#S6&RO4D)62%HV2 ++M!"?$75:/I$B5+CZ:KRW]<BOIGYZ2[T^_9#_2C2U^+RIYTR9E"4,<Q!B,7X%& ++M"-?U4FW2[U-"4H_*NY)U3/OJGUXLNS%OYGZ?OV]???T5#^3?Q3^SHK:F5\_* ++M^OC*/A)34=\>JK[>_\#\TOF??N^R]O"D+$BOS]?A7^/;W*25*/B)]3T.^;-Z ++MG0/YA^=N+RZ@I?!$]+1C^T?N.VC*SXY1[(JLRP=;DL4Y9#-S>>"BJM:;,YP@ ++MLCPC76=9+5EPWTH\^E.5=ZLH],1+OUUUX_1)UW>#]0;OU>=)S]6U^M[\VC\? ++M402>79-*??BZ^K^,_GJ_'/^":S;SD&+\)M9<_4U@A^1_8%')'S>J9/X9N1_G ++MX\^2RV#(=U&K-MZ21R'=U"(A2MU!1#HW)5,DB!6>Y!)&=GX.^Z4^7[`Q63G# ++M]E#Y"^^ML]7+WN]YI:-^Q`D:["&D*2$^*-WJ8E/CVAND&L\>9YG?=>:T_2[E ++M?V]'G-[KC^W!?Y3_?&NPW>E)F"?:/W9VN\`WW)X/7.M''A:-9Y6^@?(C\%*" ++M/3.I>>D]H-%U[:?VE?9.AX3QP>AMJ=..VZQM,@>70=WE+M=/G5)+:,&IF<36 ++M72RVW$SD$MBI<5)Q8*!!P5.1IT!I5*(B@J@*8N_N4[M)S[.AI=P;ZC=$HXV( ++M1'JS`#_M^/.TW]S/XJ1V@?*#+)'#28I@LOBF)@!2]/I:>=[(P]&8;+]%X/=C ++MG1N6]$YPFMV8JDXO"%]0#\9"'J:A'>DP.$P3Z<"^,G=_;('?T'VAW"R_CF9A ++MI>:?UP_P;=_4_KX>63IG^)]PVWD$$12^-^%[V!P7N?8/@].S5@'!#4Q05@'= ++MK/+R#X-`]H=^_AR=8-!I#U$[J.YC4H?>_MN#X7]I]?3I^6LIWS]-YN/>PS43 ++M)4I:?G+E$IM63@2D;1><.<U#/</14K*R!!454H>T69H)N7DBPJN1D)I%TA'. ++M-.@</0F)$+\CB"6U;U><?VOG0.8^WF/\/I.)^MI5)^^B3VVJ&^@+4'Z"^T?- ++MYO=+^XGP]RA.[S'M4@?XK:F>Q?)+TX1.SD/3+SSUP>R87XS-)['WB>0C)G>L ++M.^9RV0C^4H!(,N7^@B1+RC?JMDWVK-Z7KM/AXI[)U[P1^#9R&T/2'9`GNU(J ++M.=H.!551*:[$%@I6GH*G3T$'$:T6F5[,1H+^4)F-?F?*,ZTCZJ<M8O5=6NAQ ++M8KHOCRF4%Y,TLSL4J#+'LA]5?YDFB_JF:=YR!LNY_`%$B*1EG14.YUPC%*22 ++M_'KH_"PZ1K4-`B>D^W:@4?CYWMOD5_">^$UML#/FKLOZNC\SF'!\IU^+9022 ++M!\[7'ZK'?X^QDEBP^HI=3&M)"J>`/4GD7<G>V*P^S+.CU?4Y)G#.;UEV;0L" ++MSY+\O@NN<)A;)PN?*<F=ZXG&<*J1>RO9&67J!J;J3W7.MD#STU+MFFM4@%9+ ++M,M""4WS;XNBT$2O<GL#Z.=B`I.H7"S(!HD-'UV,'I)0-`4E,3P![4#GAGIGN ++M3W4@.F!^;4UCDC!DFO=PYQ+6]!<X&115K,)R)I=4<#V<TQS._).\GLL^98?: ++M3+0C#KEZ('RG77E<R@Y'=%O1UZ8]XZ(3/D\G8=I>V1:[7MH>7&[R_!J-,&\C ++M^N?9_5S5?WG]6G<>L&MZ%\X3KQG)S48!S"]63BU`Q#F8C\/</-IRIS`P.3Q\ ++M4-FUW=83)\(/">(0XO2=[)TP[O+$[_C]C@'5#?>G1(LD#"_]21ZPZ)=XIK6$ ++M#D/*(G\&`?HP"'TH5$R0$H1H$?<D'7O]/+KG,/YG^F9QFL,=TUCF7,/EYKN; ++M)Q_<VWF0]T`FP.KTT!H9>WO'CY\(I>`=82J$*HHB.[W>[1QB\GL;G8/L'GP7 ++MM(%7PAQM_"M^'U4961!E.BDD+42D"2A-$<)0\N7&0G.7)1BB2<[YYVZ"X:S& ++M(K>'!!G&;);B,RQ(B23)-3:,"$A,DU9)'VIIV/#D.X:=8_8^]/!/J3[O'<=U ++M\LLBK51F1!V/0]`W8B^-;BDLD:TEM16QM>\57&-L4:31N*XJ,RQ9)5`4C6T] ++M_$^9XOJ+T^'"Q7@H7RH#U:'O^+LGY4#\2=D3K\S6/LWZW6)]24#C1D,>6)Y5 ++M+$-!X$1(CM]%\G8F%'F(Y/L^-E^HGOJ#)D9-;,^S,DS8'U8;T=<KMHXDW6Y\ ++M[&1@:+L<P]Y@P/BN%CH?(K:_?(4(E)*K2>7'0M,#EYR)"J3QX,Q)V/8AUTNT ++M?E\>6_&TOK@U&ZWRAKWS1NH;!U)=YRJY#;#U54<S*+)XK9<"D(#B$(0?!7)+ ++MQF&<Q*3*ROD&&@RQD=,.5[DQ`B'!2W:Z3)TA''X1>YF9MHMGN8?(^3WA\KH/ ++M8)<J?M9E:_@\H&5"O80J@_@R_R[F#;KPWK;L"U\]^G9)2B:*D27I("#D<J!; ++M")H:):5+BC'5T`!7LJDAS'7(\BLJG)]FC-:/:>\_?$1!R<OF06>QNX3VWJ_/ ++M4/L0?:+R1'T+$F(2`L!^A)]B3LK;";PQW'Y21&$8G?X<GL]FDW%<\]N@>@A+ ++MS]6D</L$'4B2/$ER'(E!(X"*HEXB]!XKK'4TD,G*9'*.8==!S(/>'O1]:#(: ++M<E+]BF!W;P=SUUAT>G>?![]4KXGX6OCO2NK>=,]ERY3ZJXLP`XN&@B;MO->O ++M9=_NFC*+QYZ3ZB^)^I_TF0^D_2#QC*PWJ>.X/$MM**9"/E5CA(SE[*+^H<S. ++M.!P](//W4>EKX8@^9'S8"@^@,)V@>>E+>Y866$]+!@@U!A@:UAOX#X=!O@3E ++M9)G]WLQDA!_XY`B/Z[YD1D_A$*[MD:Y1G'R96?UH_;=9!<?=76G2M"K/HTDR ++M.,[2=F3\?T2_CP@_B,"=<90PX[CAUWC3#'B4E.^Y8624KLJH#(HJJ*BPU2T% ++M.NAU_3^[KYG[GH!_"_3^#1[9^!]9?EC5H1_-GX@UBB>,J=$TN!GI+%)G)4B# ++M[D)^#"$2-/YTNH3I`)\"?AG4%^:?Y#O^0_N321W^N0_TG^U,S,<\8A_3(=>- ++M<-F%6=1&%17H%.)4P@!D;;L&7KG]CI=(Y1SG;S&F4W/M"K4:XLJ$^R6!]K;% ++MQ2LB[V:11EZ9Z2,10*Z)XP$?L\#2.$AR&/!FD'X81,.\\O`>O]8#Z@GX7B6J ++MYI[XS*[N1=C+4RZR(BMAH<BLW(FG!>.V@ZIRBIU_5OZ*=Q1M!BT$JD_2IG*_ ++MBTZOXM5T8G*A!_*A55I"UR2R35/7!MVBUM12MHI%5+>^:V5ZNPKSCZ:<PDTW ++M&RJ2>>G+L^DTD?+L]7JM12K)<"DB8!7\^G]%E)RJYZO5N6!Y/#>B7R7B^3N2 ++MQ.I8N7S<M']'Z3<:4_)PFI#XR7]72S9_GME,<A%!\.O63'"E&B^LR[L%\)M, ++M]V2W`D"J8+12$DHU8!135<X8<988;GP^IQKCBT]JM_.,"Z@Y[CDZQEU/*F60 ++M7H"H4K(R6!)4!"6NFRHDK@"Y9G$F$2N"6SHD-N@J"H3^`3V69DY@@B>FSF3- ++M40XNV]%V&_.8;@B<CRW9<BO6[GKN5SUDUPMFY<7IE,C18CN#EIPJ['BP2>11 ++M\061[*^S9O<6-BFQ;'<!"05`1+"B)RQ+'Q\^/Y1/T/]$YZUZJZ^N'MJ<D(2! ++M`QW/JZ,R1K&%P?V+!$N7,Z576QI\5?T'?)H3*`5T+-1B<RJ=E71R.&;%*I*. ++M`NJ15!3(R%@*RP=%?!ZOA_7>AEQUN+,@(EC"SV:QHY'1VP>B!!;BWIEU6@]G ++M*[),EDYK]1))TM/7$WH?2=_[[*A*F>LG'07-Q4WK&=:804%#+LDLBZD!6<Z= ++M1<]E4/`9L(/0,@M,=P(FUF9%:L^MY;P'5=E+1%[7IZ)Y]M13*+Z/27L/5T>? ++M5Q>WE\W*V5S\C2:&`A@/H)'\6A1:U--;4A8L6J-J3;-9I4DN:Y5<X.'&K<DA ++M10A,TFH0D`TF4FDDDXV%83U]W\[1%Q2_0?P_/GYO77<D^;N>@1B??SBMEDL) ++M-,GB]8*Q.RP!IUVRMQ4A806G=7IZMBM(U"#&5_K_Z'0[_F?!WGK:5H0[)CQW ++M*H0JAYIGNT15$$22:F8TG#BGT<N<3A+T]YZU.P=B<YK<%C`7@F-5NH9B248G ++MX)E<Z$+%PE<HYG-MWLYS/A2Y$WBVHY<JBLVWR2>2NRRX5_=/)JG?+=>99@8; ++M(:4S]&B0@I>+HY$'(A[OZ6)RY')E>%91*6=3%FP.72R5\:BLQMN3RUX-!-X$ ++MO7(06FP)?B929^'+N2G_0=U_4B?L'FM[O41+2(B)W[O/*9=5[0(V+#YB\(], ++MW<;[)6F9S;3IIYV9F_XW391DS7*"XEMM0ZS,^,D&?'[9]O]"WX'?PZG_]Z'_ ++M[>3J)'%+#4<Z6,')!<A7*`^2LXXT6S\1N]W6&:'-P?.L`558>0\2B!?8G2A; ++M)ZDPQ+IEEP=<?M]L55\W!X2Y9Z;'>S]+;V;%NW@RMSNL6]UN7N\G)WFGF:6V ++MXERY<N9]V[=NW;MV[=NW;MV[=NW;<;<EO>7"X7!J;@^J%3ZKA<+A<'8[I#'8 ++MDQRXY,>$PF`;'@'XX8WX\)@+Y>'8WXX8XX\)@+QC+QC+QC,9DF`OEXNF>9YG ++MF>8"^9Y?,\OF>9YGE_/S\&?@P9\3'BE)"!>QX\&/"\QXHD!Q@QX\./"\PX\> ++M1*2#QY?QX[^/`\P8XD!B]CQW[^-YCPQ'CC10K2P5VAK9N)E9SH146Y((Y=-F ++MN"DAIH3BD9C,A):S,G#GU[$T@N5U-^IZU*L(.?!6+!;M.NIHJ=#)"%2#-55! ++MRN<ZX!0J)+QM26]/D89ATS,JQ+*BB@JE36X/JDD9K'2/W4&"T%J1ZKIH-8*' ++MP_FK@^,!3]ES>Y_]8"QE3Y;KEB[9LY=J!Z54I5!1+0C(A0BVE?F#5K66X<SL ++MO^1B21)$JM`@O^J(2NJ:`RCE$I5-T3PSHNH6I@99$<O`O#`F:A&S<>,SJGJI ++M3#W7/TI\B5NDKA-.S/9KKLAFR',]S-OIG+;;BW;XAT'L_VTBHB@),<,*$!$W ++M]C%BW,#6'-75$GX5JTKQ66?)E-AJ839:M-AFXWXA3_;KM-W8$$8&C1OL5RL5 ++M`B)P=W+?<[^@?O)+6K-=K/>YSGA`SN*CA-ON>+-PLFFG4]'*;KX&;W=D2O<G ++MHC3MGSPHLS6%))(S-0RK<B(JHFMJ/U=76JY->UR^7SU%K-Y5@);5A7%PNA<? ++MMU@.4P&6SV:EVZ9LMS/<S4T3SN(PQ/<149F<XDD5JA\1!\ABJI-_+D<]%[WY ++M4F5N.#SV5'5W>=ER+@M"4\5,W37&Q2E-_R5>MEU8KV5F]O^-@'E$V;,/F56: ++M?.MM=':`^_GQBJH4HH"BF`5J65S7;+]1WUKM=E^K^.R_&8!E#!C.SJ3Z^>_W ++MT^8O2RF1_QN]Y_+6V\\VVKV!4?&U4`/MWS5'.CZI!]$&:2+*]G;U67OO[/EW ++MC]);R[W*H-A,^WG*^#9T/_1U*65[ZE.TP_?S*Y[Q8[;=2WG,ZI@ACIQ92;-Y ++M%E(QL95>XV2.JJBT6P/I!PV6M?7K589/GNY5XF_"(**`3PKE"ED4WAE1(].Z ++M&]7A<!57?&X57UEKXJV+*R\O(W9/8+=X$$^T()T"L000#R*HG-5$2R2*9](P ++M]S+U-&+-ER-19IL>?;QLK.=>2M?56C2ZP\OX'+A_N\UQ+`@GJ5LEV[69O1K9 ++M+\8922^,=_:[.Z&^2Z"FA=1C%Q7)VZ:G,6,5I9EGY69<)V<UVUN)AF<QU"T% ++M,2%^BETVYNR39S+L(-.H^SH$Y6C!RR:.A[T]Z00/)R(Q,E-+6%<*RL^^-SSB ++MN5I9G=]::=H%[?T#"DXH0L"[W2O42"T-TJ2XDQ%^U8?+SX'M^#\$I$F5"R6E ++M4*\RL*R\A!]U'1UVBYEEE:LRW)CH&:3.0%-@!7"K+06S!0(;E".-%=5JL39' ++M"<YF_1Y_\I<V1$0UY9*5!5M.4S':VGMK3XQ59)'0DDAOEQM%TSV>3O=E:B%Y ++M\M,CU9SL1(X[;G<AU&I9ICU;+)58%JGB.4K`]]#+RKA(^$C:("$Q+-&Q+:.G ++MS.HHC54K+,]A69SBBA6].WY0%VB%>111B<FCDKDLSY&5[M2DX&6HKWH$EQS, ++MRC!SER_CH+\1"YLG@>W=6Y\XQ4G-KPT7UK#G3(4L0]X)\OCI'B!:C.LH:^!1 ++M6=A%UA5<K)[W=(WY*<^YZA]+XI8-1^YQ++S\N9O7(R=$AAAT_A#:/V'Z57'3 ++MMW<^DOP?\+^!T_%Z(#^YE!_)@\O1%!$"J1JH'P8>I2IK\/H,1(0)69EF0E+, ++M]&(SAM%[/GV1>+0SW,ZE3GOY??YB!&RDTZJTM"SV<JRYSG.G9Z+J"T25Q?OB ++MD1D-!?J1$I(HRHW5,U02U7%DI%8CPI7;!(TG,"W,^PZV^:Y*Z17O:"K'^5*L ++MX\^I%$E058P8$*%*JS'70B49=3,UN0FHL*UA\]F+W.<Z`T!F62F38)H;YD>C ++MEE+HSFS;,`YE9"1>@^M/?5$H\@QJ*GF)DAI;^K!TA$<<7F.V,S,,MSFI+TPS ++M+1BONPVF720%]KA0?XM$@0S)*HTCWV80@T7<;&K.S++,THHNN_]CN?(EY)%0 ++M&#Q31EAJ*ARK&\P,SG/D7<:B7=>W`<YPL67PJPRA7&6F'"JMBP58N+Z+PF_K ++M'?JQ:#`/PJ/S!9WF).FN+<Z>VS`K8";!4Q$F=6_KKR%1*Z^@X<4"F5&=7"LK ++M<E;"T2T@S,X&H9RE<W\$%.H0]\"(6O(_MN[BB4KT+*]E5>LH=3>L8+N'2M<; ++MKKM6\RNJU'OU.9'@2;V-J%J&_H*"0H*"4H)2@H*"V6RV6RV6RV6R&+%A9M?8 ++M&>N.G=$ES)_)Y7Z?C9Z*2^O$><.D6T#I%!K6'8<^U8<C,VLVE`\E[GA_,_/Z ++MC)0FX!92<?7');+"["$4?GG<?KZ;L=Y,?("7!H[C-U#9-4V20G)2T3'&-$H. ++M`:1P#KC>&^.T-0U#?&L;XSS?&V-T;XR#?&0;\R#7,@U3(-R9!JF0;\R#&9!C ++M,9D&,R#&9!C-?)-`;)-`R30,DR#&9!C,@QF08S(,9D&,R#&9)C,DQF28S),9 ++MD&28S),=C)QV5EL8\FRV1C+61C+>/)6YD8R[DX[JY6/07,T"]H9UYL[0R5OY ++M^@7\>A?6<RZVQ2A8LL#ZYFRYTD,BVHL\T9`6?2FF>Z>&?GP)/0?\=[WGJ.>^ ++MW5HY]9G6C-;4<@K,KG,K@R%=@=(/]MDW>B[")-(8E#!)@K8I8RK9TC?-D&;E ++MQHJ_H\U\;^GU??J+!+6Z?;;5_)5TD(0C*6M-O`VYF8OJB4R,Q<V7N54D>X<V ++MM!ASX.D7;-*N3C9[F<L8;W?*+-6(HG4'QT2K+I])ZCD?.1"1$ZO>Z^1MN/PW ++M,]T+R=/;OY?"T'7<AA<3(3;:5P,S&#`0ZMVW/:^7_#/8IF#,TN"HJBJGC149 ++M42+Z'%%X%&&$'QZ-=(H[7I.?I0F)^21SIF9OU\?Y?^_V_E^.[J?]CW;%>I5L ++M*7W9[M(T6S4D1HVQ,?1(92:*23\7KNS7;\?M=-5_&?37WJS=?2>-_)X'I]TY ++MZ\_`)V[.\YY?T?VO8GM:ZF]9$)?`8$!VV$I0PB.KH`KH6%XCBXKE>]G/8WO1 ++MOFF)X.;[%_N^"X25$2MG)..4"EI5.N<K(V)DIB$HIOC:S696B2:"&8Y21$EE ++M9:2Y*\9SGPT5:+3LK/N_.]EW_U__?H_4H9E;C\G%>S.2]S/?"#X0A""PA!E@ ++MY\`[;9CIVZ=WKG>?X2/\$_U-_>I_A6&V)C"44F4@ID7QC0$RN6[4]UAWO-^Z ++MM(@5C/W>M17S^V<A<T&38NTJIL9<ANUH9F<:LPS*+899GM,,ZO]KU\E(@2W4 ++M$0E3%DT;_IBW%27MN`CSGZD;G+=14JE8D.N_S"MBXWF?]_U3?@KI*507MHIO ++MQ%D'W$X_O[?]C^K][^)[=:WOL!W_B6"LNBXS\*Y(RZ#,S\C[G>_V_<\MU?T] ++MYZ'3^3BJ,7F59`75CK<3B[4B92@;K-FQ;O%E4Y[Z=;*FHJV=K>8[ZZ%^=S7% ++M%(-H#E'PW;F<SG$&5H'[J#H^)O2M&1Y8!I%O-UX=QE4'Y4"!MK-[,CF=7:S+ ++M6ELC&\QM661<A^=>Y6=5%6C&$B)-D#9F;F<F:2-2KM%M<UF:QAOR6>3X_^?[ ++M'1=K7.7JMT7F6#P&36SZ^3GSD+WG&V!<S1[]G%%?K9&7;3-FY2JY[GFUI[FF ++MU=H$]YG?LN^,*4(GHZ-%PF%:_1B$Y"HA-M#0-CK83D`/`=T1N4,IN-EO).LO ++M>3!E*+0P9"%0Z0>[G,JA^RAT?'@\0DK6^!.^&"W&Q%]A,ZB/IF`3UE[@:F@O ++M7]*/<\4@.-M9*#ELJW4+F2K6=6V/LLRLR$Q;R-227;XJD\N?[_Z!NJQ`+_(8 ++M/D62QQI+.:SI&<SW#&=I:?)55Z!+8ET_>P^WH0A8?D5.;)45FTVK0-N]B86/ ++MQ$-?ZM$<^V<%FV\\&:VHPI7EOQ>N!E;"*_0H46E"[/;"<QH7IZA7S/_C`#P$ ++MA"'F;9"&PO7VX2_5MM^B2[?RJ>KE0`_2J`"H`:#2+[5:OP5JK(J5U<O`Z/3N ++M)J,PK9V0BBFQCP7\'!K<H6NN:*]V3%6%9:<ZG:HFQ`TKH2T$*H"`=0BNEK0M ++MWJ:]..P^"S6Y#D'=:-3PE4%6O4-B4=6^`B-YQ4_"MN(FI2K5[P]HU>]&CK=F ++MF@\F+71H@AEH962LY&3M)^-GC]OIM?FV+*/U:'S9UD`GO]I_)Z=F79'O<\9G ++MQ<\>J/9EQIW2I:\.60\M-GV]LBIY1]0;?CMS*_J[WY)+GW#F<8'7$**GNCM" ++M;B,UTE=DMDK82Y*L&<^"L=EEYS,TI8RQF5J%#$K3R-I*SF<\;3&[I/8BBKM@ ++M[H\X21M]#UN=<5G/WV;AMW=-L'1NN8C#PL4TN7DV^DW$]E[33555Z9H0>^FF ++M<H6S8KV:\;*WV%=E9>V+@YT#'D';.F5)AYD!BN09;4;4K.M<!UI_`CM=#"SA ++MO68K/)A3(EIEHG=8C.J4Q:`S.<L&EDDHC[@<LGF$2"-L;%2LTA84*#+3),G` ++M]F;V_V:98&?F7NRC%;(RWHW;5J9BLSEO(=;J+WV:HV^FMC,[^]X\M$!1Q7:3 ++M;#65!*E0`K6UQHZ16%"WJ9&LS.<KPB?GO,XL,3W(%^H?IK*K28D,B#F:6O%K ++M5$P)*B@J&0GBZ<S!;X>STK-9V<&++_'T.&Y=P6[27>FRA3!L2S8B8FR+-]FH ++M<O='[*).F5+8%%"*J+GE?&AN]!19B),M?TA:'IMN>X=::.83H6#"P@7RJ3`] ++MT906IPKU46^-?C)3(U0DHLQ*DLKG%M$TE;$YPYG3N6$6%9J<BBL+?;>N2,DP ++M*H&'<:CD%SVC8CFJJW(%T6/ZJQ8>,RZ?HX)[?Z$[N5+;2=#V%QA"L_;"N5SF ++M5U9Q!V@S^B/;PC:9>'<T-`S(M&=59[OXNMWVE3G[:55LTEE0-@5,T6OD*PK* ++MTZ^Q6PKJ'A\GP;ZCC&W-(J)S*,!8+I;,1&P<DX9G&4;8X)F&>9YLE&2=:;@V ++MYPC.-N;DX!NS=G#.88[V._CP8\./B:&3H96AEZ&9F:&;H9VAGZ&/0T,C0R-# ++M(T,C0PZ&'0PZ&'0U<.BR5*N2!8GTG+G"U.5GUY[CV5S.DGHRX@Z1ZML0<B#E ++M;Q9=T:KI5721?Q`.KU/%9UE]+-FHMC5,=FV/K7)=FQ76Z@*5UKGQDU!$0=5D ++M@B$+-.Y80X&I>QCY%+PNXZ5@TTU=5:I=:+9#F97O&LLN03]C_L$1%<`T15$V ++MZI9=A5;U2*/2^D8X!OY%'2E[OVK^;T/<?&ENXS=Y>Z448PZ,;;AV[<CN5`A; ++MM0C"#GOGGU=:M=]'Y-U0AG)MS&-FO'(;7!1[,,TFND&S19%<YE=9NP%=6:NH ++MK-J_,=,1W^@S8'J&!J18",Z.&B9ZR6S2$/W)WR,M<%D5[++1N#RT/B$9A1>' ++M)-UM=J7L.A!SX*PNXM*YV$WMNVS8)7M=K%=55S)N@\9Y%W&,DH-Z:)/6+);* ++MYG%LWQPS&9)B,XU#BF><,XQPS*.`:IOC8,XRC*,HRC*,DQF7EF6<@RS+-DS# ++M,-HS#,,PS#,-V9IFF:9IFF;DWLS*S,O,T\V5LW-C#4H(9D=#/S<_.CFY^='0 ++MCG8\^.?CQQUHZ#8X8^1#1T-"2.EI:,>YDT+AA%%%$L,678M156?0A77$D97? ++M9'3:K_\'Z!!67655Q1H<)K6=5M)E=/&2=3_-`1-^XM5-29BC]1>YF^#9/,5G ++MDJ$[D8*ZBJ1@F:6RN;$<A2?;)>SZ6F'.7[GX^JK6!9P[NR/LUD(*.415HKS, ++M8Y<S5=DBL_C+N<S_/O5)/\?U^\%^H4I9-G!"B22,G'JS/'"'B042JK9*RZC` ++MY2FIBRZI!PS,][U9[JS$!65T>B[8\%W7P]QZ[Y^3Y[-H1+`EFO8X#BY;UMMN ++M,&7E\'4S]2-/?]7>8LTL"79*&ISEN(11,`I@H4]O8;E_E]W]L?*9-9;%FR1( ++MG"D_RVR9)<0DDF7-I5A67AY?-A[CXA4DBSH0<MG,9!5"@R,ZN[#&`]SK/,R< ++MS/K%(5"C,UO0=58O#.?"$%DL*V:<*=[-\/RGH<SYVZW_?>BH!!!"<01+5A1: ++M[VXC/($',MKC3D.STX9E\X^#7/*>U[3-!H[=;CML]'Y6;X[VC(54_GV^Y\U[ ++M3R7_7Y_S]-\?SOPOBUST2@6C)V=N@X=VAD'"ZC[.SZCQTZ_V.U_&=K'J>[+& ++M[U2Q4K#+KP</9SFWC,K]2-T-F+E9C6X**$A!5Q1C8(.F\1\__'Z.7_=O<@O% ++M?Q_:\_D>!M<WH>#)"ZS7(N=-":6;N'SLU.12YS#(<7"1X#\D5!-4\43'R>Q^ ++MT[4]4U%-FBQHU[MKE:,W5S#8&-*A1JRZG&=65G#W:PL'9%=1<0X5!;?;I>R$ ++M$540H"Q0A(@(C5N.:G0WSEXE5<$LLQ%G;E/.H=4G^+/K8L-#VRV%*,50F4.R ++MG3Y`U!T+Y:&=!G/9RX&1/S5#])Z(F6*KJLWN-Y8Z=1;=RF6B=PU!8%9](WL0 ++M<G[2N%4)B+3/8.SO"L=T3ETI)ZJWA8XY6\,Z>I7MQ!7+0*]U`?$I3V!&`F5: ++M8.U%#*7]Q$-\@X/X2,JSHH,""`/4D'#[CX/XR'8MV;(L3`FAD7J:&::E1X'I ++M!30>,B"K.H@<2,C+<<^OQ#*,18,@FDE&LN7;-DUZ[1%9P_;*WRX_`/@/WFCC ++MN"BN5SAA7*U<2^(4(@!.(:ZI?T]_896<YY'^G\DX.B`A7B9HHD%)@FDBMU7. ++ME=%]"#(T9",)")A&<K8#"RX>$]TLM$N3G96^SYZJ]59*5*:51F86RR^[^+<3 ++MT_N5@?`0R&2XJ!&DRC>LCZXR(8=%8V;RE]/X>WP^T=VD%\97Y3,S$TU5($RD ++M"?_M\BH_S[&TB;Y,7'N#,Q/Y)K4$55XLXIIK41;5:1-I*0D1<&'":`Q(23_Z ++MC%%3_1&Z(?P_L_.]7O>]QO9LV;.#H_V2G9`_SY*")*HI::T@Y.#[,%TAYF7R ++M\$\14ONA&O;/?Y,97V*41JPYIT4A:61G4BH2&GHO9F>=F*9BV_`H#)_X*GR5 ++MZ14I\,?10';@7"@8AD/8HO#%E1$7W5],KBGP2`>"$>!/4]K#\,8\<0_ZQ_/# ++M:(',!\J;!P?H)`!DB`E"1"?M?SM`:2MH*F8`8#`H?PH/K2(;?P@^F?%[%='W ++MG`',PQ^?U)5K$IBUI-,WK;#4PQQ,#E]YQ<84F:FJ0H"I+,7(C,1Q78#MI@^A ++M#C0R0%=_KT&O=-E7,.&-3LG_SF*"LDRFLD9JR*X`70W_________________ ++M____________________]___]O__P*SL/GL```-WGW)?-BK%:`G%L:!W#$;* ++M=%``XW,::LOLI57-Z\=OMQ#[V``7U@`#M\Z^8OGO-44#LR@``;ON-"GVO7M] ++M[TWSO7G=]]P\:>M\^X?=J^]ONSWLZ#7*[5'VGEM[<'0`-77K)7N]Y[K+TYVT ++M\"/(+>.SU;51TYSOCP*H*+@U10!0#WF-[!Z`]0JV7QP&G5.M*`"FG7;:B2*J ++M=@T!A!0?0Z]]]MG>$\E="EV=4H=:`Z^P:B"``:!-H`&31@-3`FH-5/TADU3W ++MI*>3:IO3`35/9%/4>IC&FB>BGM4::`VIZAD#Q0]3U/2:::-&GE-`'J:`:``` ++M`T`T``:!H1-,@T)@(R``B`"F#1Z1IH:4]4]3]#*&U&I^1J-JGI/)I-I/4],I ++MM1DT_5#RFF@`#U-#0``T:'I&U#U`TT:``PC&H>IZC0R&GJ/0:8B!%!-!,)J> ++M5-I/-2>C*,90?JCU&F@]0:`#0-&AIM33333T0T::&CT@-!H-`!H&0]0TT&@` ++M`Q`#0R,@R--``-`!)I2(C$"!HFC(U/1J:>IH393::-&FIZ&FH\29--,$T&(, ++MFADS1/2:`-#30R&C0!H&CT0-!H#(:!HT::&@T9--#0`-``$42(@3)ZIY3#1/ ++M3)DC2;-31J;1Z:F)M*?J3:FTGE&:FU/!1Y(/2/*,GJ,1IIID-J::&1Z3U--! ++MH::-J!H!B/4VD,C1DR&1D`&FAH`--!H$B1-"::`@T`F1DTT:`0:,F4PF4\F3 ++M0TVJGZGIDTI^AJ:9E3VE#VIA-#!-$VB;4,&D8C0/4!Z@&30/2-J&F0R&@:!I ++MHQ#0>B:`:K4*!\IBR#8H7*B7'`P$"!.#4-L+))7S-6M:Y/I,&C5PC6W%N26) ++M<E24$2IWJ0Z4J9IF=U*4NQ++<5)4U,D"@YH]`#4=W-CPZ=\DUK2--Q30D<-2 ++M"<"RQ,^*Y0U;5B&7AZ*FJD(+08MFC96#ELBU:Y7-V`)`\>U'$O)/HFPV4"H( ++ML&V$`\P-&"=3][6>)0`_L*EXS(?_M8L]P&;RL:\&U4.0,((+TI(+1-(`_CA> ++M"2MJ#5!LT%KQN6E&L36(9<C05Z1L-"4K&*HH#<\9E,KBS*A260R3>:8E&$D9 ++M2`9CP75D"\@$U5-X-@2S`,`E)8*#00):[K;6N8+!@C&*<H\5CH\.>BYB]RY5 ++MK.6W>\"Y),62!))()2*(DN5-\4&07C&,8OH'.9.0&40DD29:EV"83D%2F,YS ++M:UL7PDYQC&+3,S>+'!O@)5C"2P[X!L1<F][WOC69E8S%FCG.<8N""3B%B][X ++MM2-C=7O?%IF9;;P;>7RWK:SSG-\"M6M:U7&'>=LYSE)7E9O<F,:.C1.M8G-U ++M?,M29X,8QD8%JJMK/.;.UFV\[;72VUG.<UM555#:SUL-:H6G6F&3FP;U(3%K ++M5JUZJJUMMC(ULIO6U54H.Q0)3VVVSMMC&<'99SF9F;6H%`D984,G!*V2F:QC ++M&:Q@&^4]KMO8U,DO;;;&V<VV.9049(VI,BD=I,D$V028VV89;VO50;763.2H ++M-&M!S<RU0:L688.Y9-[,73+A)F&0;%$))`FV-R+;[D$$D[U5:WWP,#`P,#`H ++M4*%!AAAAMNIF9FL8QMOK6M:UK6L8QAMO$R3*1!""2G$S*2EMI))-MMMMMNJJ ++MJIMNJJJJJJJIAMU,RDI;;;;;:2;;;;;;;;;;;;;;;;;;;;<S,S-8M:UFVVVD ++MFVVVTDVVVV*K`2"QRXB`)@"HO=8S6<DMD$7O>]5>Z22:O>]ZILED@BJES%C9 ++M"^<8QA,MXQB\S!,"2;WO54228JJJ:)<.'#B'TSJG<G=G>'7.^-,]<>`>$;AE ++MRY<F6<YSG.<YRDI$12E*4I2E$L4"D5"H6BT7C0.J.`Q'6&@=<;1V!V08:P\' ++MQ`'A"'Q$(Q&-@D&Z-X;XX!M'M!PCC#MAVXTC2(0N/=O=@#RI?\Y""6#BW'#B ++M$7N'LH<BB3D%'7U3X*WDS0.;U*)Z),I,03N[?CP];ZJP*/_>4R*`(4[25$JI ++MHX$#,5:;2:H=C(&,;>.!5]U2`V3M"A@"0TD+!@IT]1(591*T:2,-(J+2J2.F ++M,%0YT+@3:\5_@\LP)!;%A2W"%;>YE0#67DA8(!1:S64**B"TL2J&142(H?GK ++M*%%!:[5\%1P@BN7A`"A2D%#RJR0555$U2I%5505%14`=LE`N6JKQI<,-Y.TY ++M,VB`0#9W'/P0($\NP`AI#Q/C*R$'M!AVBJKWP<H$D>]$D-E#QC.&(<B_!6I1 ++M>2R*\U&$JD!K=1?M,M8L`*#2`#:6,Q#\+D=?FY8:[=56B*I5*42E>22K&K+4 ++M82((!"=Q*$V-FJ7F#S'YOG/RN7?AZ/NO$^JO.+D\8=J#WGJ=W[[/3R0QGIL2 ++M/AX)>@^E?[7<+Y]4,`;:Y$*0`#Q+UUM#HUJAMAMZ[>K]$.7V<UD`I=XFJ"VV ++M!110S:B!1""U$[T!05GNNEV[.#LWM.26$!@,30,W83HR,DNI15,6$M$(C2T, ++MU4E59R\C2(=B)-.@"ATAT;)J3J$J,1%))-H)+41J*$#0!GQNB6_"&<@0TZ2T ++M)(B6P`FV(0@5@$%D"$)AD!0%4@58F%+8XHD$0UI5*HMY>2&MJE`6\2>9&0@> ++M23+R]E0-[@Q@60U6@H0U6BS+2F64I2F"J8-^@XS][$AC9YYK6SGAA-AA8@(! ++M6R"A`621A"0"\8H98*6V20K(."U%4A)$H4DA46I6C*5H+%`DC0*7&`,89)#' ++M)H<ERRO#&8Q?'IC`K8$4"`10'2648+"!1)>T\C@W00),LS08*,FA,L#5![:Y ++MB\=KD%*=^/%W+(ZH0#`QB898DXN+A)!>!H@Q70AY8U<G`:(@)&:1``56H#<, ++M^GC)[3K:\(B$D+Q=K-EGTO3($D>WG&1H\+BA=TTA`C.TD.\,DA0AUL,K09B8 ++M0CH%P/`/(0EVUR.VI\=J8GBYUI-7O.3O+]%3#G[GMNET=DG$9KO-#.ZMT;RP ++M/>6&@&#[C&:!/#::!F[:C7&SF9S-,=+'W1C9C9S9W6&.1I,9F+N&W7M[6]!! ++M!K<9SX<%BHXXNOHLI,B`"$A)@*`*I2;HD$H>6`B(%UQB8R@,-,81^63*CL`J ++M5%PU_V/XQHJ%-$,SPA2&T8+"$A6$-L9/)B!\H1#?.8B#P0504#@!8]>N")[7 ++M4WXEI'S&MR.--[^[NQQP0+11;V]O;N\UO7E0>OM&@;0UL?S<">&SM&[NVE&G ++M\^ZSF:8V[3&RFS&S.KK[5C&8X-K3CVTST$#YFV,V"##9JN.+KZ+5=D0D)VN. ++M#FP5`4QW`."8S&,[T8`S,8NAOZ`+A)9ZM$:Q6!4@[T8@D0!JK36QTSC<6M5] ++MUMN&#"QA9BN87G7;FO6M##!EAA4V!0;`O!JR+W]@A:2S,[,L2^)C5L,Z[A<Q ++M.86UEMF=QQ;9!J9-L;=>><A@+KUN,OP+9<MRP8S;:Z=N@,Q1/A!PJ@`HA!0) ++M"@`60B0;WMB$!Q"`F,`$*4I04A+.Y+EH/G'L76WCIKVMMMVE#KMJNM-,)PP' ++M,0//&,[BUZX88(6H=@V#8&GW\.R"EL3AT)L9]D#=M=?<T9,FR^LMDCV9E=FA ++MC2KFQKP:7C9L&`SNY7=;<998U7;CXAV`I0"P$0@.1@B'-AC*).,*8\"FE#&1 ++M"@6>*+!%"2>$`1A$0>ZG0>I]=X;,#0.W%C!Q86T-MVY1-(#KA,F2#=`"43=# ++MW/HT1=L#/4;1NZAA`6`H3!2IM$$Q2$CFE13BGVAX.DS$`\`:#`$[ZPFLWB@' ++M'M$(H$(3SB`HS+9+FIA9@^4NA,6FZ)NC@JR1IGT-Z1^M=W7'KN]%*Q[R[%^# ++M?W6-W@TK;^^=OQ8^#-4M;.#8ZZ->]O/*:LW!O\$]B,4&Y]6K>QX[FBFPJVNM ++M@RJJFT+M:;U[2MG79449&6$9BD)G*"`A-1RA2E",2I1525,DF&Y4+)).SID) ++MF)"3$`G7,!SL"Q%@**!>RQB2*.T!I'2A&Z<54(8<*PEQCP)J`U"`:I/B6(AH ++MK$C9(&"%`X<A62%0<[B7^)QV-E])CXN/@UE(MD;5MMB_"9"5<M6;;<YNHRFO ++M8TIO/8+KT%_9EOXL$66/9LFNY]D%^../58O17E&,J23J[)S,3CHBB-@S8(X- ++MDP@$Y2((H3UU\DW%B;SN)>8.6X>[Q"(#&QY'AA@6BHJ%Y"M\0J(`YV@^Y+7O ++MN)/M1/Z[&N(S+V#!=B?4B?OT6VVVYDK3IR3S6ZU:[IS/ZM3^Y3ROIY5HLBF# ++M/F,I#%`JRAHB78A;8PQ-W,6%;$E+-3=6;==E.]YW76YW>=YPT[N==>]L\JW* ++M=8$*]@AL0&""0+$,$@"$J@H("$)0!2@I"`E*>TPN]DQ8UJNE7*;/?8:@U7F6 ++MX;K:@@$`IC'3T'9,A^7.]DK)GPXJE2I#"9@SJUR^QJ-"^HE@J5,<.5I1C5J7 ++MA3;>AP45[[,(MFH9,="%TV&HWKT2];L,+L.AE'6A*7FB$=T5])M=*PHDLH,1 ++M6)(M&"8Q"4R"`[KF8KV74_.,LQ77Q5#:,ZSF70VHYJU,1<\*@1Q[A4<B".>W ++M9RK11ZS,:X6HW;*>2@QHEMMB>H?&(ZS#[[%>"./<CGP,ZHYNM6_KG//ZX8#0 ++MI0PV88;MVQ"8SCC;;D`1`BF$*4H!X`%X$*$``"%!#X@4`@`(].!P4M'OT6'F ++MI[SM!IUYK(;,KGW#KF3.OC8R88M3NEW5IK,L0UW&L5*)=@:(7J;<&%*<:#<S ++MX,%VZ_AM)X\:;ZS^6'.ZPK$JM%`[K==?S/3TU'M.O/9?@@9TV,%]PPAX00A2 ++M"`IX@!1(4$)F!01`$L/S1F"#@FG$EI*UL4Y2;!:QSQIO8<5XT>ES%?M68+5? ++M1<5T3+)FH&E(GS/LLYXF=$$<;<<4<9G6KZ^&.'3#4KK9HDXUKN2^KN)XF\:C ++M&?&U#C,[D<7,J:!=K5`W#C6K8X=*S3@E"$.E/`(+0*`<0#N"DE).-O2X=R)2 ++M#+$[64N6MRS@=PJII9-;&-]/0I>9:U*,KN/:8FRLMF=>UNZ[;33\!LU]C+CL ++ML-3K$^+<88;AR:,V')?-@7=Q&-K5SZ6-,,6G4^RV\9[&Y!!1Q4H!#<(`7?)( ++M`#@$``0I!X:2=2)Q#29F`0)QRR0H@GGQ)"P\Y2Q/"D(B0B)U0@2B0B)"(D(B ++M0B(?"I(42$1(1$A$0D(0,LUL<PZZ(\4K()-N`%A(%TB0A2)(@0G79T*BI+,A ++MER`2B@(&D(!DLDH@2`VQ*BH$EBI:4`;!(29R9$8%3"AD13/52&`FD22]_$[( ++M<'8($UF.B8)-B$R,@IX,$"4A)-6NX*@2I":RPI!"01$GAQ`O4%,PQ2*0-HH: ++M<KZL,R$UGLR:,W54&TZ"$]AP([]@'\B2-B1G8"EBQ1(ZNT","2(H$2"/B:!+ ++M()",`F89U07`\;M\`3$SSP0P3JI0"SH#Y2X.4%1(##`CG]!$8^NK,"P(W92` ++MD1E!0;K<MN"$Q`$A%(B$.<4,LLC8@3M=O1T#D"4K$=3(*2,$`F/+I0+!(Y@Z ++ML.`9HJ4A6#8"8'B#1`C48!J<C/GHJA"ZL*!"T1V&:/%J$+Y,SN)"%I`4`GZ3 ++M%AP^5_XF$SZD7OV/+G0B$XB"S";2-)A>HV)!4GPR\N^C]T&R"^V0&_"`H&1Y ++M,][&M/OO(^7>U68[7N>\]($21N"%#0_X=A[<((CN/.YPF'#*AI!^`&F##U@) ++MA1UQ'5^3"#I)7L;;02:^W_#@1,!G4G1%ML?(#@-+48]&CP,!APX<.'WAZNK] ++MJ=;HV'GN!DQK5>,!`B&^L&!YTGQRBJV#X>S\]WUKV?:CG]#H?%W?W<6%_0]D ++M2+O@8L4Y'QL'-GFKK')1'ZT@.$8,&M<8CV0R0P`)##*'4"RQ_4^:%#C#GA8' ++MT`8/-`:`H`"P&=(#K)L"X!;44!('[\":J$EL'.>V;>_$-XW,<FYT205V0E^H ++M#/<&MY]10>"UL;D;,_TI3_X7`K@6XYXUICQO;.?.5XF990/;U-C$TEZP;\YS ++M-(T@G.S6!4)S@$C`SIRFW3'43G[:0I-#R8"9-I#>P8$1`#8,\M/%``1`H`B- ++M$@99M^A0X'B[DA8%.>=@8,$4W"R7(H'SK(41@B"00&!@.A0A)@_9EAD(VVQC ++MD0'IL6VYS^&CWP#`,+,>3[?V?V&M_;W/6[&/XWW5KY?7O6G4ASNIH]SV>SXO ++MD>-V?=>0_Y*SG9Z7G7W_,ZO6@^AX>O=:\[G^5X_8['E>3XT;17S#X\',/^;, ++MH?(^R\ZAV0P!`#/FD"A(8,8DW'D-O`>O2HXJB3`Y$`9^,BXKD*')D(4*R?8A ++M`\)"U&<<D"A#,.C*!VG9!+6B5HP71F:@$+F`!<`"$K42[-8DB(1"+`@"XLA# ++M4P)@0B@,@_#L`)0DG6C1(8#TJ*G*)!(_/TT@J4EV1P3B!QP@,-+,9K"B(=WN ++MU14>#P9_.\[SO-<YSG.<YSCH)X>`EH0*400S0WV%%8Q$$8KLW,DW7":`..3_ ++MZR<5,-3<I+X08AG:)9('4X1*%9[LPO#J2S`5DS`WK%DH08ZJ27K]^;\5&(DY ++M9BA3^]/'AK*]I`(NMC^'FL-H/'D0.'=9JGMJS6ZZ:]9GN3U=1:;#RWM]Q?"H ++M?`T3?FU/*8VS@#VQ240,X03IDL@@@DE;-,9TIZ0R*;4$*`GK?@XDD^E833Z+ ++MMN:JJG9>L-PXH23WLGHSU'OSM7&YJFO=]W[WW)D`'!HJJJJJJJ(J(JHBJO!0 ++M-/Q@&V3++,DP8\C<<W!N)Y@$G!`Q@DDE]9,&J#%!`!3[$YA5,JF,F$Y$B9,( ++M2'(;@B&#:'HJP8#+-6`*Y6JM2H+;`DH;9:G8AVYSZ9D-&<T`J)$2+!5%!51( ++MB18(B)+:J[>Z98#($N<Q`PQQ:@""JK&*(U"@"/>4JJXRF,+BUCQTKC?QB1S: ++MN^:-&1D14155559(6V\?&-&6,7WV>4R5555\33DZ*9"H%MC)RNEF[,LE5(&> ++MHS"`9R$F><55<S<QA53VN6`PJL`6&LIC$"2JJJK)(B)`51%51;956VK;4M"J ++ML559;5@Q555555M(8Q1QC!@PENU+C%`-'X(7)8,8L%1(L%RL6KXO&,+2UD%+ ++MPX#!`1416,1BHBHB(JJJJJK`#%L1OM,8Q0J,+Q*8F&0*.8;]PF389%PRH<IW ++MB!+"?<\$-C8D)?KT\;ZSJ]T+3L2$._+/`$ZM0.!_,AJ4D?$\3J[>K&CU?L/U ++M_"]7XGIRI7I>EZGPOHZOU'IROG/?0>QRMSSZ?$]_/>Y+@Y(,`:0AH#R=KM&/ ++M4;8(:3;!"J2"JJB*B,!")(@)`0$%A%55$560?DE51*HJHP:JJ)142"JJD!55 ++M18`JR055A!5)!(A!JJ-1$9!JB554D5560%58055""JHL@*JJ0&JHV0%5559( ++MJJL@*JJJR15554D51%5`%`BJJB*BR"JL(*JK("JJR`JJL@*JP@JJL@*JK("J ++MJR`JJL@*JJ0%519`5560%55D!559`554@-51*(PBJHB*J)!559`5560%50@U ++M5$J@"JJR`JK""JJR`JJL@*J@&B'FD"=D]P.D3T<A)V8&4]/Z6B/OXEIEE@_Z ++M]UX/UOW/Z/^G.^U_2'H[*G_)Z?QHL-<?%O-=[;TW[:JYYT0$O^BUWKX:!\'M ++MM?P)[)M=_M7.H^9*H#/#+W+!N'PNW7$?\*W@/0H2$W+-6N,D'_O_/L>L[!Z_ ++MF+1._]T=7[/O0GWPE:L-M`$!D`5?$#ZSI00;DY'&?/N`1@GY1KYNA_4Z3&9C ++M/,$T1]1/HB?^4QXUY;QSU]6;Z._5_<ZS@QMO!ZG&.5T:]$W-(CN7/&$XX^#V ++MH/&/$'9<@O.J9#,5GX/UD"C3^*%8?R^97X1T@]=X^O4<\\7US`(QK,3PIST" ++MB[/XTJ.;+#.Q@=20@M(5U$.[I)/A2"4(4-/,HJV#3\R4J"`B"*I.<@[L2HVH ++MVI3-@3(0)-(H$C((G9B3WZ`>,$)("9T[/L2G1&40P20$$`)E240J<KT%/9=S ++MRQ1<&@T9&49@YF.YF#?Y4D;8@`ZF!S4(D1390B<$I!%G@]CV%GE?<VYWW9@% ++M*44O@=:=6H_*_N^M"'Q+'QFI?8[14:,R;/$KP_>#Z_[;T?C_"\^A.M^@?^.A ++M5KIQ?\S^6671/JX?6"`%><#QZ*D9QQR4Z>H5Z4CGO%G40):8/_?F!6((EL8( ++M%VB(RI:3`./H--0!O8^=CE=TI8/E!^A97K]`4".`0.LL_R_Q`>MD&[Q)?P?J ++M#4BOQ@#$%[Q:/*LZTO#0*KK8/WTOVVH/;ZY48!!XJE!/%&G/J:229%KO$'OQ ++M855P2?^C2E?&`%]<7WA2$I4TY^)&I=!"U0*U4?65!48L'7R"?:B'<D22W7M` ++M_9$D,N7TFU366C]4B$EQ#V6'2+5?%]HWK@T4QH'C=D[UQ=Z:3Q_)>^@S*#FA ++ME(E4`F\(G_YGTRUO0!^)+X8_-<CK%*=4!/RJ!@K<6K!:I8E1B#7`4<41J'T& ++MPCV0L"'LB![/!XWWR4/B`_`%$YNJ`T!&5=E,WD[#-G3C]`:#H>!JK.7$%\]6 ++MND&82C(PA#+-Z'<Z[;?9!I[F&EBP!0)8/ZP^7I!<*0<_5/PO"8IWC][J`6#[ ++M7VS<#-2F\#IE5SMVQA%<;^64A_I,`G1!F.X"VIM'U>"F4IR'CC;HL4ZV.."V ++M?YX%UG:V=<*Z8O^]NY&IS)I.INA^:/IPZH5XY,JP!<'_(FF[U\SA1%6<*^>. ++M;Q?X(KC-R3NP(WR>^'F"`#P,]'[Q9`<!(1;1TH<IS?GE]GL<Z(D8BRL&2_1W ++MI)7_\!K^;`?EA_T8_*.>@3J,^&SM,IX<-&$?3!I")+,1CYG"VW!(<XWA(R`Q ++M>)1";O(\L<3]:]7,#VF<@>!S?67>BAIT_=RM$M(R:[5*/#OWZE(I3@1T`'UL ++MPF\-E8"^D,>581&72`;>CT<3-+>J-8&DXR^FN>#JR=LXA;X"`]@>P"LJ"ESM ++M<Q.ZQ*P4=9/,T4`W$`);5\Q,S)3@=ZG3P<=#U(.L<CX_V]2?)[/VO+\(MGWJ ++M5KOO9^#FJ3)EVA[D[[[DT:/S_6]8Q?1ZY]RY<\'Q.EZVBIFOYJ:2H'MRE44P ++M5+@N"S<22RS-S/@233">`9L4L2Z+XLMP'+ELGY%RLTQ\^E0W2*&8M8WP95+6 ++MI;H=JT*6GAA@O:S:8'*C7)=`-,LM6G3ITR75:--EMMMO'/AGOYMN.O/LYM>_ ++MFV;./'DIH44444444444444444125FD5/"0J4T9Z"20K"5*%,8,$ZR+(JEIQ ++M4I2DG#8..??O33FO8QC!`QE<KLA,Y3Y:<42ZY1<N"%@8H?QXR2#3=0[5D,2\ ++M1FR1:9K4CU132YM&9T>BF'E6,TKK."E*5BV?5?7/9GA%AXF0P/9RX*?FW5WU ++MI?#HEV4V%QKLB.2J,2<,$P=#(MAL8QC-ELHXU;,CX-_"WCHT\!IINC5HU/V; ++M]4,.K9QW2X<*ML5YB8^'),>-"BU8\)=:8W\50,8IC&:I%DW)4,4I#],T].F# ++M79="L#.#U&"EE=)RQ9L/B&9AFTE"(=(VX#>,]\^A6"]?&G7GP,9PI+7'+IDW ++M<.5M-36M8UC6MVQ[:983X"K+0H!=(M30*4M%28D>)'41M#TH'"22-U4R99QN ++M,:IIHHH)>.Y>>UCQKVJI6*JAD44,1PLF.`*-(2K3(,A[GKT%!*J$`]`&M+P( ++M-V;9`8Y:,BT&70HQ(QFVYB#DN6Z!0$AQX+1IKXM6Y->.#H"/`W//8<\(@;GF ++M5HTFE,RE0--(515:$C=O/`.@4:4$;"-A&&3FR(-3@I(SH@CHWPQLB,8N<^'D ++MM9A&F2UWKC(U9#3AI-&4G4HRW/U34\,V[/77MU9;,+>6JZJW-OY;L^WAPY<- ++MNW?QW\.'*>>>>>>>>>>>>>>>>?&;*CH>.F4TT2FG`CVD>TCTD#TD=KFZ!CBU ++MO">B7""7=F,9SU-<SANO5CL-D(GVO5)RADG5KDXM=(N8MQJ"I0,D*D&6!6<, ++M.4.-M+#$_)VB](>(2P'0]!Q9R5R4)@9\!/**D>."3#@DXXHXCR$<Q&H:\.:8 ++M3YTAM&E,^W8W?!P?U!'UH`0Z8($#`5`3`S`0/!"!+4`)3^4!O""L_UAZ6I%< ++M2_U^:]TU3@VY\&CU<GTX&W!"@</\KOC+N?\Y2;^_JA1^`6V64FZ-P%A)3:_J ++MK;>\U7.UE`#N3[$?3]'&&E0Z?*XPQVOAB1YU/'\:"`R/X*Y[&J=2`T#6(U'$ ++M+*<E+K*)$#@7S>+G?.*3R_Y*E*58'"4Q4*WJ`LFH:3@9AL0D`:&N)!:Z,\H@ ++MD#!)=#(]S`.1D0+\<$8A=2*9(EH;,]XAA@C8*%"GU6GI!34-O:#%G-71Q)N6 ++M@,8*+[_G$1B#%MZ^K3*WA`C#0$`KKAJI`K<)Q$*I@UXF6%1R2@HSG`=D%*@1 ++MRSO(@0:@:!+,@-\,0#J8#C5(BZ!F<Z2-*U"H%306N%]B&$F;`&@0A\(.2R-I ++M3@H:H[+#HA813E(#!F<D$DBF+SQ1?0R1&<=H$UXD$A11223)'&9':`T0.^[: ++MH4UML6?1.>5IL,[P)(UZKIRO+2O*8@JQV.PL&)*VUR%^QAA,&9@9VJ$8%0K$ ++M=(MH;`QF9%+C%1F9M!2.JF("0"LQ+D$DME#P9BJ=`48D$VN$-CD=]ZL-5'$` ++M`/:G@?I,=$1$1)U4D!&`(1!`HP[X8=O>_@IC;F>Z9[:7ES)3)SEQ=;R!Q5![ ++M_^++"D@%B_SH!`ST=:BQQ`#T[(0V=A8$#<W:@#5"K=PHZJ!0_K"'TR`>=L$@ ++M'V(&YC/T"V>U#[.D-2:_64G)-?M,0Y'$6DY">N34S:=KW&CQ_?N^K#^".P!( ++M&_G]"NA3<;L<`;@?)=[G8'W+5H```.]@2F5RU%1<"%$M1Z#$Y:CGX#78D[+1 ++M2:^$XZ%VG@G,]#H']+P.=[9/J]!#F6.;.(+A?FR@@Y]GP<\WJ^!+`'5+T*_' ++MK5L?*I^UZN#D,1;=AEN;/)]'TJCW;U^55Z1$2B(FY2D?J?VH`XD`)C(2("A# ++MR/Z^W&^^PC<+@_R^ISQX7Y/=70/SFC1_C$#;Y6$5QNX;L'4*V?CWRM`27/&J ++MZ_N*>-^UPUF>R`%]_HT_79;,W^;MC82D2/L`PAS\>.W#B!!^2-(2.YUC:!Y! ++M-*MB.///10!Y_+/RGRD9SDD4;;4>*.%>%YN%[&O'O1)H6;>_X71W,.SY&W3C ++M;T:M6OMX]%W=\CHHCX:XXVU]W++RASYLV6'!6"\,*<(JZ\N6:OA3>W+<NV#; ++M10O?EY<I3X<-.SE+!!Q=MW;N7!G+B*``/]:"B@(@(@)WV0$2"03J>^8.BDR[ ++M3&.JA5[5#Q-_W<E)I8!-$0#5C19(+%FUE"LDT<F6@]\GBDAW23V";R0_%$\, ++M"2'?^O$D`H!F@LF1DI%^IX/*CX]=FE'W===H)`?2:1@0-C!):@,8P8Q(2\UI ++M)!^-YO2UW^+\!,;?T#Z+S=/Z'9I283\/G0=G*$^\'S@UOC]][V"6H1G.%&@G ++MCC:%0!?]J+Q?W,40).-&%5.&_7()\F(CWGDZZ#QL*/9]S)C..&3XWX-4P"VT ++M"V/:A_:)E;`1`;_"*^W^[;)\'`X"#XLA<0[;@^1DGRRG%]0?)')][ZOI^+Q( ++MSCOTYGWGLT#OSYB/ZEN]SOE(D_++DE?Q?76;%.78+Z_O_A][YE<<MO<B6?)8 ++M01JHNZ(,(X`/Z'SB(._GV!K!\TYS<M%.^YD:AA2:9!\L?V6QD/LX.?KFXWPH ++M434FEYPK\3@R'TUGFZW2V>GT_GQ99?W><5>A'3.U*L.-VS1#[8X&J.W;G(%S ++M0U&8,P#%4>=\3YH=/U.:),[1N=4[\9T-;J9\5R-B_Y559L.V!30)O_1@SEPD ++M9&!P9R@Q\JK;_U<L[@FI.#OLU?-J">O`!4(27@L;[UI)?E?G-@S[WZCZYZOZ ++M5)U2.KD\?X>;T[JITJ83I$J1@R?GQC!D_7A[`:;,P/+@\[W^;!^GIY6I?8GY ++MO\S5T6PXLO^RYLKKD``=A/J'].;RN-@H6Y?F<OL^#UNSV4NGVE>QYW/ZGFJ* ++M=-CM=KK]I?M7-C/E***-JJ\/#P\/+X>'AX>'AT@"C#[08!U`-XA'I3_]D?UH ++M)$!(E+Y:B?TR(_`B!].(LL*1]\TBSDV,B109EYWP[\`RHL0NB"'YL`7*A")? ++M8=P8.`;Y#_FFB-T4GC!G?POB80V4P:?PK,:L(FD5X'8Q_<W3'2?V=*USN=DE ++MS<O-YNG2I+TZ<>F]IDDDR229)&Y,<DDDDCLDDER1N11121555555155557O? ++M&(3DLU\9YF]]/[L5$YWNGX&+C`W&OV5X4T;-HZ]]1SL]>O,TX9UZLDD@'(&! ++M"$F8=\NH*DY6.7^>];OR"0TP0A^G\>*DII_6)=VD0?;Q5N'6A\=L,N8BG]6R ++MBM/A$ZRNC/C&8@\>`^7(7(%_A*"8AC&#!B8AB&1)"TVA:L$(@[X.8>?!V!G# ++M7L=#:QYJJL'5EQ<$ZK;;=K+(ZAYA[X][]:V#)_H=C^7"JG.;JJ?>"^R*_V-: ++M+P#L#`-(#JAURK7'5G:YH:YL!ZILG8"7F#^X@+R@!?%&96"#R-_YN7:'`P0( ++M,PQ3\"=PL>'#O/=%]?^_KUY\.PZ/IJ$G_?<(/L&**VE?VN[$<8]GBX]NWEN& ++M_VG^/[%RP?P;<6,+<5_W=UH\\%M"LJ9WV+L9OC)$(XL,][^/KS8)ZI*'C_/4 ++M(>(?O_L$$4\)]NW[XZ68:9&7=GO(#C*J<9N/DC.\(APKV[Y?YNDL7S_FV6>3 ++M?F_'PVN/F!!\`I8M6>_MYN`/?P(^4A!1<:!$/U=UVWD?6GJIH1,0,%/TO^Y# ++MERV/^4K`KI)>%]#N+#Y7;^*)_7Z_@N+Y?C'%Z"=U5T;M9GK]#[OQ,8!TF"`\ ++MQB%!P0)"0'J_^O\K&,H_=^7ZH.///]UWWF%1^F+/]V=4+/VT@_(=0--]\!Z' ++ML)2Q$&`4$&4H+GH&WO#P,K^U/"ZS*]EEK8T7:V^PSE[7$YRNK^AIP]#8L<_> ++M=+P,YJDV37:#=UO3/UB:$H'Z?;3&/MGG.4>BH_%]2.[YK]:TF8%[+&QW7>/_ ++M8EFYK:^G_#P_QL->#JH\OY?Y^K:WL?(NN/&^;V9'V#`7%3B@P!&$$9^]V?3= ++MTGNF-LLI\6?>F,K[ZX]PEU?2%NOQ&SOYH=ECS?'XJ.2]$<8^9]/L.9Q<3%AZ ++M7?Y[ZWFS[T#Z8%N@QO/=K6_=4/LP:!?R'XQZ`,?U,OZ<$OMB3G+_1Z^-0+*W ++M]G,_^_RKM[KVQP.3&.(6-LYR+B*KNQ;:2R>;6!FR?BN>H]=9RFQW].VN#\T" ++M.A`A['D]]V,VQ@\]U?3>KVSUIN((8BE(/G?I#<ZA[5K?ZTI_EF")-YCXI@N. ++M2N`J/]OW,4[2VC7@1E:1#`APVT'R\E^?+C-+QZOER)_Z?R*K,=#(>*/QVD+_ ++M)_[0?<'ZGZI)P./R'L_$@+"/--<#7"6`MP?&MA_A'Q]5$OM/-MQ&<+_=2#K3 ++M`@0IY#U/X3&F_=?Q(^?`Y$JOUX\K6YUHX<SOL/%>L$$),8"L+L-XXE'O$CY% ++MJ27&T"(C^_B^X2W9####!![?V<@I_4E4![N,<PY%6)FTSS*9\[3"["5E<B#[ ++MS\NQ-H%]5_)&QCVO;,R_-FR>,='U]XAP;F@Q6Y'E,YGKXG'CPC<V`+(5^#N; ++MV]LCMGP/SIHP.CB!)Y!W.\\E^5]M1J@C4_LG998MOCK<QANP-(TS2T1XOC6! ++M.;;T5A@,)>?'BSTZO]OBXR_ZWVN7Z-/TJP]N)]8)`B(G+.K,'N!#FB9F8E," ++M9"0:`L%8'PJ\P=4;[N750=WWA!!$;W:5^5WA75-*RKS(=+R\EB.#@:Z;"\RF ++MTJAX9F'%BG!Y7ZI5]^(KI7^'_U6,]WH"4+HA!NPU_E@^]\^R3',E"&A0IP]5 ++M).^+)2KI_V32;ANZN<<:+371)CY&Q>2CB04Q8'.1$S"DFJY"@#N.OBB]% ++M4,Z-Y*#J/W_;#K/%X!,$D23^GO^_B2NEF_YO,N:CIHI'-4DZ"Q)JXN/%#;A[ ++MZEUUYX)SI47[:O;VVJOQWL`9(T?F9RHW6\O^%.XI?7`-,FKG,]<Y`6U35T^H ++MM[FZ[!O/D%S5M%=:LPIGI"C_*I:3?F>U)GR/1]K%9+#Z)7WC_(3_VQ9(A,J? ++M];)1'LHE+N(%)#=V4EAI!Y3(:%L^VTD*2^%D-/+JR/I7_1LGEZ0L*&\TB!NG ++ML(I8W'OTR(VRQ@-F*K6-'X,<\YLI$N\R,C:K(^.M0K7HVP#2D'S(C0]=*-@2 ++M`TTT,C-*%K#GI2?#TN>Y+>+5;I?E(#L!GJV7JMDQL6[CG2YI>RYQ,GP%M2.` ++M\'!AB;(;+3B2^J@W1<'"N14I*[#(1#-E5=9U4V*70X@5(=9)_M>BK#QL=/*Q ++ME^]:^((R]T8T6-E6]LK/IEFYR$*1E:T(3,(?*T%^K1%$<N,\EP@5Z,<C=>CA ++MX(M*XNT71.W0\#>)Y^[=VJ,P3'5,?%?5^R,:Y8.GI/*GG1[=@J=C9+:%8EH* ++M"[1U&K_D-WAYHR>U%?(Q='P"!*7-Z*T8>"';-*DV?4V?GHKX^7&Y4E>1*#(R ++M"@W5$0=W(E0<A4/^?X9#5;+,E]:C5TAU672(*`\!93^-TJX!E(&/C!=JB2N@ ++M:2KG-:QH%3"@'5$L44Q*[>7J"EB2*9+W,\[0"6/"/631FI7G!S@Y.:/=:W*Z ++M-5..@5&8-5M6V"*A+/']EMST!,,`54F'1'BJOV_A`4?)%M1=F4;!F"9JTYCC ++MH\DP,MOD5%\&UPS6AZ@$$98[+QA)T;]421(AI92O68KM<EREP&AMGFY"B+/I ++M(]T*'<]6:(MOX#<51M![(6"W+H@?6*Y)LP@-2'@P4CN)"P2'#4F(?7^;H[.> ++M/33?'SYXLSWYQ'ET,QS5S.@<=21::*]^R>Z9F2&AK>=$R0SAXIL2RI:^08:2 ++MO/,K36FX+6#6EP<-9\,)WHLKMJU,.DX7`15:YU8(-\&+=NWH,:V@2<T+R5BN ++M%D++A&1HXS@./7N:\.;AD&!G@.[CIWJ%%&S>T0@X8H8076'G`,\T>[&2O:9P ++M:0#S1(9\.D+\-G*#Q!]]VJFBM#&[1V^;M7`49'&EBD04&.G3'%TC4%A$@A>8 ++MF,'O2Y1IEYD";D6()S3I0:UQK&22AP;F.7#M#?#D'03FRU9"AMZ1DLF.(T51 ++M#U$B<+JALK%9S0PE'4MZ@J[8J.:,*Y**(B_*/F4)(K3&9],A!4/AD">`I3@; ++MQV@(7;>R?9WKU<RKQ:=\0I#G"`WWIK!G"&Y#6&=,*I4T>4<LIP91J,S.%IWQ ++M_/6P0B[0&=B^/89%K!NT2H3K>T>2@QN\]LU)W9$IH$Y;BCVB"<CH(I["R*2Z ++M'A#@AE!X4N7.!IO<:,1OCC*]-XB9I:B;.GC"\Q5''I!+D]R.JL<]ZX9:]E73 ++MR"TX#%&5S(K&PKK"E=SKH&MN`SF#'5VVF$C?0E#"JO,R9SKLE2`F2MZ?_J\6 ++MWJ6:EKZ!%S&70S6*#';+N\;!THF9JY9JW^07C&QY=9F[9WK=JQBJB56X+BXB ++M>.9AX1]?8*%#2.UUS6\5<Z1(_Z^P]@_,(/$:![?\1X>]WW4;U@B9F3Q3H.Z^ ++M#;6T4JJ*[-1553<AS!X^UR:SQ`>4\;&9U:=MP#ALAD$+*9<W2B4LK^C;\Z1I ++MDC#32Q'*2$XK?JO,3V<M*-5/YOP!]Y7/*EO:VZ=A\_<9+J.\#'Z!TFAS.``W ++M>5Y@Y>APVB);516EJ#>$K>2KP,)F9@.$#_8;YJG[0K*&#""7@=1-L?I_3[W9 ++M<IS)SEV_SH6UI-&N]1D,PPX\8$2ND?7BV!B/MP#S2"$#>WNFZ95-U2I92Y@! ++M\LP#SK`-,8`:>"">#Z%T4K,SC)(/C,7TF(0%X?]_JGA_%+"8+!+7HB_%L%/U ++M"1)+YL=@#$1`T[Y'8ZAT).GKI84:C=[.GVJ5/F*Y(BD3W0GICP8[TF^\#I,; ++M-8O;Z#I/V_W'?C@]^$^XD3Q7H'Q]14O]])C_NG/.D1T&*'(*_A^<A8@#Y/V_ ++MM,/@F<P.(1)S)S9C!<-*C?C9[+6:`)OR48'3H'J;SN<-N>Z0/#"$XQ]R=J=8 ++M;.[\VHB?[S^*Z"N4O-:P(*%*>AH,"ZHT@5.;=99,BTW?8$"6T,1<?[E`?(C) ++M?B,4I,E"AS^GCOB:K%54T]%$D1'-\INMUI2\6@=Y=B(Q,/>R/0R54V_F6%=5 ++M)'3:7[EB+AB/G,_W^RZH\_[$6)Y#^!Q_*8Q<:^MOYJ<.VFQ)Y-)5?,^D\<;# ++M<W;"=83JAA`QCD)6J\';4*\S@LU.STM/1.C4?A)88JJD1'Q3,?ZVD<3&,&-+ ++M:&@F#[+@#V_D^?\@"V$PPDU]L/FU*:?\:7+`2)L,^;&O&>T>'+[CY^K'S,V4 ++MP#'ETQO)=LU2G.54O(9I&6VKW4BLZ[%H:0O_A^;W,(\UIR_U$AM6-=ASG`<9 ++MI,R<V4N>ZYKC&"5?M+JNX[@IMK!S4TM%[P33%``M;0NYRK:.TTN[T^P"X]F6 ++M_`?JH>I*S$A5]EBN?U0)@7HYPA$UN';EW"`HY`X:\-G)K2CE7#_5HY`)P\K. ++MOVH'3PS`Z[T/L<3J.$/5*^$6AWY[(^[D'2*?2>,N8OT3O#TC;!,])9"108P# ++M4P@:'"VW.<OZ7:\9B+Q&W3E<WCX3J]#3K;Y0OT-/#U^9K;S3&D;!K_>?>HEZ ++MQV@VC],:!:IB6;/+I=)]-CB*M33@+^?[#1OU:OCQGB+7K\?F$ELU?/_#LI65 ++MX76ZBIMMDB4-V?=>3^]]M`PA4:J'5US50[P#]2,S0S(C:/QU`/G(,8QE3ZZP ++M&,I]R9G5G%=)Y17=+7;DK"T""+*QH@]165N3-7FLR)"_TV)D]\EQCY5$E<&1 ++M4AP7-^4<)C1TE2/SYX8"BK?'-@S17#A$$F),6`DC&=(Q$G3F`4HC,3U2!3E: ++MHL6-D:.8X#\8#!K%E?IS1@+>$K%M<=[ZM&05+S6#-CDTT9"EC2F)*#LHR&N@ ++M0Q512)?-`N0S%!L:WWFG2;!G.\]6D2*EF%(G77UM55%6.%<[,.*4C48WC<&> ++MG8I453B.2Y[FSMTW@_$7VGMN><']N!(W!@TT/0Q0Q+H($N5/;W\4HX#WWB]< ++M_,ETY];1+O<_X3ZG)U(SA*O2/;#/8C!@S2LW7#2O:]1@H:"3*N:"5$`Z4EA^ ++MYJ3$GG(`#OQ\7`K$BB,=*:(Y*QR9&T@;Z4.#5+'"5`N8`D`B\=N@!G(*2(): ++M4!B.N'7-QNWNLG(RRFWH,A)2!C;T55G(+#4)FH5EA6:"T88AALFES^'J='BO ++MLZ6=$K\V7/GG02VP]085U.94.8T@@^;T2U:IY`7&,51866B@JL>BVF$ID&,9 ++MX.J,%!:56Y;)9(G#ENZ/PMW;2%R6NJ,&>%NE>,8<HD?.19AI0P/A*0N$C.2I ++M%<JR<N$8Z?6&;[$"UK6X`:BD[R200PP%`&P/8TC($!`S`47>G^./#X\>.GAN ++MX[8I!(E"L`8L%B*!^(1K"DU[QE(8)T$J2L#:5PD46`L%`6"@L58H+%!06`I! ++M04%@*"@H+.$RL%G/:"]86$[V=[F9.ANG,B[HA;YR8.<UD:6)P]QH%SF<R?%P ++M(Q"D8#EN$*:"CM+@N%O<`E)@K?P4IREJ!)>@$7%)D*QD;::3'4=PX<.&_=7O ++MKW;P>-8E"%4/#&.-QF3#&"!&QSK&8P-9;`8=`&>"IO#1P"U]YO;?<[S8U7@J ++M9R!QK/0P7()>01`*;7L,&V@`?0:@%A]8&6[=NV;MV[':[<E*@8JG!3@EJ(M` ++MCQ,`C8!&NH7"R5T)0$PC#(7C1+K/8%\MH%JLQ@,-H8>TWIDPVRZ6'=WB<I2X ++M5GRH?1Z2@-FS9HV=O5LV[=FV8B!IE5/TE%JVGD($QE2UB&`0*6BB+D+1H&4` ++MP(2NX/*:V%Q06NT-C9MA]]M&="R6Y9E1.BL34M96*,`64H,->&9>.&+9(\3R ++M*0?(>RM8!BAM5O%&G=1E+(TB**)DR;V]<:,"5+C^^-`OA[5U+?CE&RRB``^= ++M%*0(>#9E`@0`5N-6../A9;,^?'/CC-.I4-8M$XW-"%SH)%%8P\1G!YX1;&0( ++MEN0)<9A.QU_??$V9Y].1:WVZ,^%V&C&3.\L2VD>A3P=$*"\@2=B!>0(,HQ!B ++M=4SZ3GH2=\`E2*`H1$D%!X[#AG)UO3MOMMONOGKHHC"R>0(UR(!2*0A?Y@T` ++MB'PZ<Z?56K`YS`ZN^8'.0+D$R`%1==19FOO;>_K9Y#T+\PUEK+86Q-(7."&C ++M6US4516C$M&MKDJP3!)"Y<[@I>L&FS:3$1GS!2[IK@F-=IXU%&;MO"#`5=0+ ++M=.S4C&Q<^<7TV3,,.)Q\N\Q#ZH'GE\QSH0%P[$:8$W*HH/MDE<_I[1X.#.[+ ++M1E:_4`]3_S"2!M$)B2,S_<2A2,%`)E:3(_SLDD;9$9)F)`XAIAQ)MHG#H#OO ++M7E"(2Y8I@H0)='#6E]O]$FK>Y6_S_;Q?=I?V>7W?P/R$DTDI7PZ7A?%=[5+V ++M.E2+9]+EB0=1+E8N+X^WN[]A*3BY'YW.[KY/^LK&*P`+J^+FLCQ<P<F%*]-\ ++MWVC_+]/E,#FSBEP3N,B6=7XWK]YS^RH*`$_=H4![!34/@[Z`F@#RHH^?;^)V ++M75AQ-+;Z&8+"QW5=:ZZYPG`NB!Q;#/4=<7>I_W*I$0*%RN$GHJ^.W[(U^_04 ++M%'+J._C*GFK\+O;/J*'OF^,8C*8Z:O@69()<E7&:W^:@^6P(+)G]&-![&-F] ++M:CV(/A0_`/ZO@/#GYZ/L-N$\3K\N71F/[?1Z0GFTX?J_!V]F_9Z;_8$@CN][ ++M!T>/T2=>05SAH$C,TLJ7\I]VW++R3X'C!I=V;-CSS[=!T+L^GJUWBGVHD)\H ++M3UT%$S9\E'F7?6[4ZX>`P]<QOE@9+Y>:H\*]H:0E.7]?+KOK>^7QG_N.IW!- ++MPF.52K9*/I\OQJH_"]P+()MI/4VJ/>TKG-+E]P*H&2@4L^A/KTU;"ZNY>:@# ++M@70^:;Q9O2[?8\7;O\\0@K)#,S>)5__*?HA@$\/V3G7YN/G1\.D.9@"%*8M3 ++M3SEM9ENYH^;D[<OFX/H"_(+?%8A*EX[ACBXI?#[\32/36SU]UVWHS]S1V-?] ++M3./D>Z#P)9^^KJYN_1)0^?G,>Z>&`0RND[TM=9N_4\WH;$S^W%H%DV,W\A=] ++M)U3[L>S5=,(2LF!OD2?JZ=.C0DUP\_>'`1R]MYG;MGAKIL[%?)XZ@#Z7J,WZ ++M$E=S9ONV>EWQ8!.^EX,/T/]IS=_#RWO$H&IYF])90>-E#H/K?6$8&R0SCD/0 ++MO+Z7:]QZ'L^C*)`)#,_M4KEDK]5/<:Z>IY(W@5O!V/3+F3Z[T_/T^USRAP%> ++MB4OEVI,1<O*KSRUF>F*(&FC!:!<%-$&X_C'8NC0&("@W1QE+01!Z</7R]V7T ++MA)&[XU/JV]W^!S2_:9Y1*"EE'JX1_?]SU7BX"^,'&<9@_IO#Z,>/MXPT"*., ++MS,1UWZ/$\UDFCWP[99Y9:KYC*?+#YJKGYSE$@^#'V).O;Q=[P]GO=8G`R/KK ++M;@P:I?!R[3T_/O#"ECEAD[52H):!S98T1\SX`F$$\I>]H17<E'CZK?3.NT1+ ++M`2GHTNF@C5X%WZ-GN[O)_;'&M:O+3:[C!C<>XJ]W[GQ^KZQZ)Z9[P._^4,/A ++M2G&><$3D@4LQ0CY?^[U4A=]PW^>V_:_5V>1V_:<5GG^U[,P,N89FQ65/9@Y` ++M^C]$@D1W<"(8\PXY;TI!\IVW"]R^B&N!J%/D_*NE$FQRE7[]\Z7G7>UJ#*"R ++M/IH6J'*JAQ\+S^UY63=G.>#2WMNOD\G<Y+$9#>?)()87]9$9%K1[=#:>^A+Y ++MYRDGC];5WFY/JPD%N"O4Q!$40UJLGGZP&@>.8'69ZGV#IL^KU/JI=FS9;+`" ++M/+/0.W`-B;!M+Q-;?Y?+(5F`WT*-MY1J4MSS(H>HAEU>0',";`-O/M9C;ITS ++MT0:=0%O<(AV:V:!KB35=,L$,IL[)!+>TX5KX_@!'@!?)"5=;?LULZOL]@]CV ++MTMX6]O%KM^K.2&?;,_/;_C[G/-X\PZE$3";1OX-U4=8/UYRMKE5\JF,1VEOK ++M?-\F+O-%W8$EHWA):)A,JO&-,VVJU8G=.OH,&(:"7E%QMO;>#,7=N>^^26OW ++M@'N0A`9;\H,(HZ^]&FQPF0]U:"?/%OU2:4G^.:J*VW7VLSZO-<HQ<&2,I!B2 ++MOV%]4=T3P?R<GG=[_*CDAI:(J9CGX<E\3P;9'!T1-UZCC4P&H9M32/6(D.O. ++MG9A/#I:8!G7Y6%)JTD>GTZE>')#,72ORAF8<.+&,S6(NJV)^HCLHN2,#28IM ++MP$>&>%V/0[>+&,TL'*?4V<Z@!F_J3M/!XUJ5I6`>A@$B[U<\:51IG69RO@0> ++M/3DCD)L]`W/&D&]2BWM,)YP.@F/L#40,I8U6P\5&R'=;4S:W-S:$EL@<PHQM ++M-HR6&(P..'P;)]U'1Z(W#&QL;-;W?!/4#'GSG`'`A+/J")95D16\W(OO#&*] ++M$,=93L)ZO0/&GWP)=`V>41B\_I&$E$F-[^I]SA@&&/74@'.?78@[.6-068[D ++MCI%\+5\'%X.SSK8)F_BU/+8>1OC([BK@HA+J"E5Y`#@R1Q](/K3+O9.1I18] ++M2FGR#XOQ>"J@>8BB!0:[)QW$1*"')J/#/#\/RHC#^5B,/()2Y'6'Y'L1):D& ++MIM-MNA[0-P/C,V?)9MMO7,RP>*AA@Q:E%HGN;$C815#;V=SN/:=;K(`V=K:> ++M5"U[>$X)=80ZGR^=QQ$,EQ/L"2M%;*;Q@&5"30HVMSWO6Q<T/'[)RRTJ6QY$ ++MN1N\S\RAKZN^)[/'MNFPDEQX1)7L7[?3RG-*O'+39"HF,:ZL!%)2U947\L9C ++M#F?M^SWGMLQP)*O4U(.+F".8]>(<,TLXV2-M"7&3`NJ<(B[&(B%((@0S.OBR ++M9K>R;7H,$M7I$EWJ'%P>7=('BNW^NYV\]@Z&IUOHIU?=*+B',AQ>H7OO8=GL ++MQK55:U7F=66TMI;2FX'#K.P9/!29;V_\0'C>%.,](;V`>-CD77OKC&F0UB?- ++MT]0KQG[+X._YWD]?F7Y?%^KS9<S(:;;(SP5\.E45!8'E'IG*,.@:>Z1::+2T ++M^K"$K*/WW><SQO)U*])7J_3#U`FB-3%^-YQ]\=<L/L`9XX3!@PN+&O$H&4,I ++MQ^K18U<"\3S\HO%]"JRCGL7`<+D;7=\0!25]J')%9(J('ASP/6T<P8SB('4S ++MR'3&)PXG^_F\6?BU-4*-*'>N8'-\[H?%E6=/U])9#%[>$I7@RYO/^VU6>K76 ++M"I]8AK<M(\(]\$R#K0$&])>L$^PWVM;=GFE5*ST;9RN:#JE$+Y-1Y?5]GY?@ ++M?7\7N?&^3W\!>@YS0-CUL3G%?VVG4#[(9X@?5)E=:(*7H>FYI?!J/K.W,#W. ++MP(\'2G6L]3\\"<]JU"\QEXK,1`5>'@U7-CMAT)7^D4I02JM]P!(A]*"041F( ++MQ;<RTQ*9"`A<$%$$TQ+K%KW`2C]X&-4)L7O$KL(VJ-&O7.#(['`1#:,E*S*5 ++MCQLC/Y81)8!/-LQ2L=UYJ,14B5ENP.LUF(:R-XK4$ZA/FG0#O>+Q%L"709S_ ++MG8>@:L#]F]4-PAMY"*JG&[GZ0;W]H2%577BES))+5I28N14^--2I7RF'.GT" ++M2YMIAV#9-8ZNG&YME'40YRA12HWN1!`,NQ0]B>4/C(UD^YW*K0W\`B,\_'GI ++MU<@HI;;ULE1EKFXE4>XS8;H8C9K%Z2O:$%CP(LND%A0[B>S8=SM\CN;L.:U! ++M*1!?B+Z;VS`.7%ACEY4Z#.J3#`4.+-9L#6))-23<C-"D!("2!E503!:=EZ=L ++M[1*$O=@ZE4U$NZ.,;+<*Z@\4'4FF;\W2XM58FP;@I8AR1F3"8\;0Q!,MU#.I ++MED:1SB9,669L,8D*-BP9D&EHD*))1MEI9*LHT1M@C1,8*A@HD/#]'9U'/TR: ++MV;9M`^,S'DG@&.@9RM<[?`Q8:*K6L21>!KR-*A9K+'!5ZRR"X,4F!*A,"!J: ++MD7=FNPR)M[4`OKE?"/V:Z>LQDMO-M=2R!MSE&%#@J)-+?OQ]E\''APJJOX]# ++MU@4RD#J6&F`+C(`S(C-\2!@%-$`5B9HFG3T$B(VT0$8VBZ'%;5147%JNK9KV ++MKS+41$>86LYTYB';^?]#\=UW8_(9=AGC/0F2W-RC7Y8UG/-M&7`]H8]X'B$* ++ME`[X0)'VH<<DTD$S(`G4MS^5=85DB4DDB5T&P2PD.3N+[1&PH]=\%GXDC(L! ++MQ*]@#K'&";I#$JU"^RM6Y"Q;?OL4'8+1>7[@YHVW40KZY4J^SL6+JXE=3LN& ++M:Y<<(QQG@Z_NA.K64&/2^OY6=%+A$/X/7;3MG.F?%+'4?9"^`7!*HA5#E`H: ++M!AJ,,_,C#70DBFI+G3K97;JZLQ5,&P1*QO"&!83'DM#%%J"X,31T_%(69AB$ ++M)><T99[D6"D$P)`1LB7K#LPVUC=>)F6K(&(!>P"=MFS73D8BWQ5K-$LS)R%) ++M:A=MZFNQ8P=]^B2.EW9B%FTP,+,P-0BA*XUII%`M%J9)R0%$K[D].7)VC7B6 ++M$"`N,H5SWZ%MHEB)5@X"O"&=KI6QQ\]!4#%M3)I*'F2'3D+4#%:`6$*D.!T% ++M4-2FD`EI-KQM3*\TC&6"6(#`7WK-KT1%4[R@X&--L&)790@353&P@\,INVF+ ++M-R4;&``K4QH&(SY*0$5@H1'9X9'&-'-8;[#A39O*'&>(U>2A5RD2J&<:QB0Z ++M!K+HG0@)6ZLI)[B%$I!14#`Q)2BRA9/`6DP)!$(=SVG%Z/@2T*;8/63T#DFV ++MTBPE)WX`%3+F'8Q(Z]4"1G$CDU/BRNZ:+P>J:X+'H*5+7#?BMH>5R&(2+2#R ++M`PYP(D"2283'3`L#'(`#$>V5JJP'B"<LR8V-K1FV4(IS<FP;2A6#$3+>XD3G ++M0IBA5,Y4S-7799O'[;:J0Z@WK-\@S43=VQ!:'94R=?$A162F^Q3L\CLUW6\& ++MW)&#$C6;Q(3C&R<FXD@9(,9+`#>[K^C!"T=KX.T$F'IC`AGKV7FMO<F*7KN> ++MARN-88-SD%<0PR6VJG<&,!MS(3*G`00(M#!%(R-RW>/5T,;UH+3PCWIZAM5Y ++M2Y##%D6`8>Z8V)M(J-\*I5TH/G342C/CHX)-`-:2)UNZYE`A.,ZT'M3NRKGY ++M&:FKU,.8UV0WF@9!6*Q)9NI$(SSOEUD5]0[T*!UDVP8VT)B:6L.RE^A.]7E! ++M*O#U50:0#&`3:/7J^M&N7?#./`!3FD=V7!48[YHD:^+<5C$LNHC):N[ET7)L ++M!B]%)G:)`KT.?2M%,&BU+(36%Q)K1UU5DJJ@(%BN.]TIUU&KDG$PL3%)7PX3 ++M1H$MC#DK26C$,G<XPZMR4:,]^`U;M)"\/")+AS(4+"-I%O9K7#YC0<WGAT)= ++M(?M/9="JC=(@=S.?1ODBW,N:T,'(W<)<R6>O56[-IC%RCCR>N[71B/9TL&MO ++M"L!'23B:?3Z,)T@Q3E#'GUY3C0LI45%)E3'/RR)R\$$@KP2G6<M@[.>+ALV\ ++M18QHQM(Z\D#`G<5V)1A=3-S%ORC8<^G!X*O.$9:6F"RM9@5R(PK5U&"PTN-Y ++MN1RXWU;D0+(*4`E`'DIC:#R&*()MAS1!.V#=70RU7P8`OO,!)-#38@PF3$P, ++M(X-.,V6L(KP*96T6ZA7K!^9RBXQY.5R@WRR3P!76M`8J*^(JJRG@C?)"MT@* ++M(`P#%5$;+008$9!F/,(9C(W":-AE-7Q*\P7I@J5!))2@%*>*NEL4]V8A@@AO ++M'HP\F:]:(S:X+.K+,8@<#;:HPMH\JIS(.]7;\+O*8*@_LFE&89V$N`S@0PQ2 ++M%0$Q,H`)T(:JV9%:E'2A6R2HPK70JE4.;TF!T.?SJ!,M%9S-[J[J37DEEY1H ++MYNU*)J[6%#),-6AK&&"-S4$.:]>%0@G)S5)SG-ILD8$T##::I)F0PO@RTW,P ++M4Y%H8MTJP.U#*0FIAMD2=>#@,YUAUET,-D-!L7<)&0S5%@>(+08DI:2EE("" ++MC-LCGA9N.),K0T9K7M<<E''N<[D2E#AQ/62.,&C69509"V]_N.\1^P:6JCHY ++MA>R*$5:FZ3#2V55RT.5:%TF"LSAA*8'=KD@9S_'!F;869D-C'X8AS;NY11`H ++MZ>H?FX.#L^E(1(J2,!"*;Q.O@3B[HZM?+EDS.!@L"JM33HR"(7KEAF#GW+U6 ++MVI7\E6`>Q[\M3PV&"2F9`K2M/8EU0>$@+"O#>;=$',2QVU64=Y)'>V+8V=1+ ++M;`V2S<PY,($PSC,1B1"A@783E^3F%RUU:6'3(*,0WK#HXXHAS'/.3?PI8P1! ++MU,VN7LZ>G<*&.'T-&R3<R$-WRJ-`;"":0^SA*FX&WO1U.R&B84SV$TD-'!G- ++MBQ$B>`;$!@.NUKV($7$T?$A:%,M#&%,#7)>V2AL?0PR;MU\.2)'58#J)ZL\$ ++M>M[7CF9HCKW&2PAP#$ZXIWXV,.+C3B2\V&E4SXP9):Z2XJRZ>*Y$F!I4'9LO ++MM`"W!([R`G<"]=7\'DR-9B,Q&4!([\@M6."@EY:D1(@%8Z]`&<C$P(!1:I)5 ++MPFPJE`2CEHYM]A45VJX6#<XI.9.R^QH\-(Z&!3$JJQG.>0)EV3`$^2DIVE.7 ++MP3BD!BKMDE+@L#DKHI5(5+%4BN\6TR-*I!5*8Y(P*S(J@7%AN&Z94E(*L(T% ++MP=@KS"D$F`=IZ/E&.LG#6/:G@#+5H*Y((BVV<*1E:W$WM[G$\5Z;4<&G>'H, ++MYIV+8F7*^L,=\!LL)H6!#FX1T9\_2S;G1;K)7VRH#/A6[3Q51=672->V^N+Z ++M.4KV0T%MO<2`Z'C]^&]F+<ENNG::[1(17OI#Y6LLDJE:&LIC$.("<`B<Q;DH ++M29KSZ+.4,+VDV*Q#+4EIB+4I7'GD#'6--D^)HSN_*8":A6M(QE+%;A]K5>%4 ++M[H%,+`)R1M,E[`;&&:11(*:@I1*+.Q7+"MJ"Z?&G)@RUEE4"DFV@5M1!)IOD ++M+7QYEH.KCNZ'-8Z/0CB*K7;J!>Z7:=R8ZY@3@]/`3V3C;2Y==.\7L=S<$+*` ++MZXH5#HBT"".=>2)@3V)V.PE"J0P:BA<#([.A&X8V8L8N<UAP5H!BCB`!0A"1 ++M4B\A@&SK>U`>(\K]+YSZ`&7-1U_W/;7N(/$8$'2\N]!R)D2<P&VC,@H(S4&A ++M-&DRUUA7`,FEI5DJISG(J"+(;;@@ZSV5T6K*2>Z&)0P#EL39RL+*5TM##+#0 ++MX_`YUE>;J9Y2P2=4KYYYFW)"Q5V$*>**#A)T`:60:L50Q3,%0$C3!D/)N"?. ++M)K.S$R;*,472Q,5K#"A.F%%0[ZH%6R$&!C,".<,$PSC$\;QQRG%<>MT8)C`W ++MH;U;!;*7#P>;Q^DVVVW\([LJ?%ZO/]7W_1.-ZK7N'UMG5]<;`@D0M@9O$N?M ++MA/"D;%%KR;WY@%O(R*[VDI'4J"$KDM_?&TEYE<(A@LJX#`I6`9;W:2))9]^4 ++MPN$%PSO=F.#Q'J<:+6&$2I&B<(Y>ZC$V4Y)"!5<S0[D@MYO.">S@S2R!6BUK ++M(3PI*!#5XEZ5I3BK1(+FJD9^$J"@L8M_2U?5V%AS,M<(;#G>CQ<C4]%>V[;W ++MQ.;S)U'UVEOE.5FV<$TBZ$M,?`661;64!E"JV)+M5S-=F,Q=K)P>RP/%E9:0 ++MP,#))H3>6"#&<8TQKD)#($,M2!9AU%''6%/;,&1G[/*X6'EZ3\$6$(X(Q8:1 ++MK9)5F]6%0W+@N==?,Z#LN1<NZ,(*V]F.M.BI!EH#:<>E-DW)$57?,C6[_>]A ++MVZI-R9,V%66;)`QF#OC+N!JZVXXBJS='<6&HBS8"&.(^QZR#P]Z+6GJP0=-? ++MK'-^A3VWN+I1.)A\6ML5AJ-#2G66$J2^AG8/([^7WZ*,L2_FIV[/V(UATV>< ++M\CT:7#.0Y/0X;*!Z*!;\N@"B-=&WX@VCA7>$>Z@=+I%>TD^0>N04DCXC1^AT ++M+9/*NR.367.DP>,*).Z=,654[!ZQ<H_!9.U_PHLOVDC(QDD.:""(OD@`\G1( ++MS';FH5N;38!&.]V][R2HD$HWM1\\ATT0!W.6Y4;.NJG'!':#[5>84LL^Z'5P ++M4#C&%X?L4U9OPN<NRJTHKI\(\<,01U.!P,CMN/AT*/;*LXH<!.(-LL>\0QP\ ++MF+ZUN,U>RSI-+20BEM5WC54K*W@:)XNYI:ZL-/&F&*JW2H5%>>#<VQ]?>][Y ++M1,8ASE4Z>(,9Y(\X55221B22*18$4@*2,$909&)1$P3TGFO+>D^*W=`Z*9)F ++M_/)W#Y-,.AVD-OQMW0[9#?4=\WSSYYLR111B"B@B**))I$`RHR21@DE49B1! ++M.`],\DEBF!@`DQOJZ-3-H]SJV!9:VVQ/&A@Q9U-SF3@F9X@8QGVOHT!(^),M ++M\O%-5"!&R,I#]I\1&KYM"P3C`/]+]F%0>Y$[`["1GVT;!(-57NY]EBOB;>C; ++MHIK!FK(I$W>310![T'"9D%8&CE_?R0`6L@,H3#X>+VYJ%`_?*F%A(40V-_B7 ++M(^#RCT2L,^H>CSY@H8KA7&"'HF?,.]*@D?DTBN:TV$;&Q0HA`3G@**6"(D2$ ++MS4/84A0D"R(SK;.6&YD.\00=IC-XBW*CE2/:DG,ME3BA4\:>2>RUX\_3OVJM ++MSU([EH#.%FAC<&J03D:_.E@R_`I$1($DTEX;$,.D$311B22O6Q$`4:MU+-(H ++M)(/ZB2":`^0PMP/>@DD@:,*<R<1A.XR5*54!1J"N'&,E)(YG3U=V?X-=DO[S ++M#\CU+RK)B<;G:D'T6HG0W>ND74J=31:U(FVS6>QLZ>[:%5@R03L=<<0!?]P< ++M?VY<&T8S#W[P(%QE66L=2-9&4M:P#V0%Q`D]3@%TA-Q0#`;10^=""!P@/")[ ++MTUBX87?#/!X\(J[3$\72*@1-S+)."&AQAAY)FQSRLX6IM3Y\%HIL8<)J<?[7 ++M\U(_GT+'9`8E&-29`)9+'9JF"9H!,AMAEF%[-W4U%`58DH=2U4V<9O!T_6^+ ++MQI,SNSB)Q\LA7<2[MEZJ<_`;ZY$0:]#9E8J+N=3+KPY2YO%I]S8L3/&F&AC8 ++M/EWF(^N7W5B#+5&!9FHSKP2G.VK"@_0<<YU</,YM%;JVV3XG@'W>"+1J%)$C ++MKD2H4`(B&B)NY^?A`0(.,5"L*TSNGEG<@#R&<OI\BDZGKF;1B>J7"0;-?_R6 ++MO=>7.'*X4@B'*,S`?F(]]D\4+EJ&^QKCF)YH8TB:F2$"V$CH'QS!>!<*)@)2 ++M()`R;>IF.5QS0J4;,;ACT[_$0?HI"*R5**MJ*A(1]!(1$@=&VFD(_).YV,L1 ++MI4OKC"=\B"12H:!#K8-UN#AXW45!`FB*L1U`Q\7L,I?_H_"35;3$*7B>DU'] ++M:`@L;LET)PP[]E;5DX).&?G;GL:&MEI+7<<OI.,`/&V^0Q0NZLN?,P!W?6@# ++M`BTU(E+N<]453JPL,?Z=5`=5&]I8K`#.4"J@IBDT@6_O3Y.#M4`L(<`V">N0 ++M'3*J5:VIQX9E?,M"6(TW$H42A0^;OCHW'A$9J_5P(0Y"5SO4/?F"PC@OEH^B ++M<!P!?BB!H2,.1&.ON.IK]`P!?DMB$QWA$VW$[T>1,?-F5UU`(:43XVW4:;.S ++M)&)SE-#%B!%(TE'XM<M'BY.(5W91%!]2A(3PEYXL30U.<*)1"<+'HL[4RI%) ++MMO@1J5Y>MCZ6QJ:IKY=V\R,DPQG/8)((F^?&ZS-.%RWA=57'(VWIO:MBIK/V ++M9ZL^^UIF1B>(TQI))*9\?CY-H6]YN<?WWB=`NQME2=\_^](6`JVAHRL=MZ(^ ++M\-+$I3-^?'+H2[C2G3!P<OG;I3&4>2(7^'EGZ%Q.KB9#KSR"#/#GJ(-81UY@ ++MD!>54AE8TX5#8G%$(/IM'Y'Z_XO_":,!@';`V2OZR:A(,@*H*2<0^CS.GK\5 ++MIUJU^C3HX"P88+C3JY&?MF0-C'SW9V!RSO+EF62$B9%\K@L$>U1)'TJ]4_O* ++M0BNI.#%C*1`QU%3*TB9B9(SHB:01.Y@V^4&<[&U8_\WG7;R+/4]=K4+8/&(! ++MRY"(SI>1M&#&2A(5$)DDXQ,Y3$"$J2J9##)%`<@P@G'J,PG_XNY(IPH2`]QB ++"VR`` ++` ++end +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/general-test.c gcc-4.0.2/gcc/bounds/tests/general-test.c +--- gcc-4.0.2.org/gcc/bounds/tests/general-test.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/general-test.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,563 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * tests/general-test.c ++ * Summary: ++ * General test of validity of GCC with bounds checking. ++ * Other notes: ++ * This is experimental at the moment. I'm not sure if this is an ++ * effective way of testing this. ++ * Author Date Notes ++ * RWMJ June,July 95 ++ *----------------------------------------------------------------------*/ ++ ++#include <sys/types.h> ++#include <stdio.h> ++#include <stdlib.h> ++#include <stddef.h> ++#include <string.h> ++#include <stdarg.h> ++#include <assert.h> ++#include <malloc.h> ++ ++#ifndef __BOUNDS_CHECKING_ON ++#error "Compile this file with bounds checking" ++#endif ++ ++char *progname; ++char *results_dir = "."; ++ ++void perform_test (int i); ++void call_test (int i); ++void testg0 (void); ++void testg1 (void); ++void testg2 (void); ++void testg3 (void); ++void testg4 (void); ++void testg5 (void); ++void testg6 (void); ++void testa0 (void); ++void testm0 (void); ++void testm1 (void); ++void testm2 (void); ++void testf0 (void); ++void testf1 (void); ++void testf2 (void); ++void testf3 (void); ++void testf4 (void); ++void testf5 (void); ++void testf6 (void); ++ ++typedef void (*function_ptr) (void); ++function_ptr test_fn[] = { ++ testg0, testg1, testg2, testg3, testg4, testg5, testg6, ++ testa0, ++ testm0, testm1, testm2, ++ testf0, testf1, testf2, testf3, testf4, testf5, testf6 ++}; ++ ++/* This should be the same as the number of tests in the `test_fn' table ++ * above. Notice that this line is read automatically by a script in the ++ * Makefile, so don't do anything fancy here: ++ */ ++#define NR_TESTS 18 ++ ++int ++main (int argc, char *argv[]) ++{ ++ int i; ++ int test; ++ ++ progname = argv[0]; ++ ++ if (argc >= 3 && strcmp (argv[1], "-$") == 0) ++ { ++ /* Program called automatically here. Process the automatic ++ * arguments. ++ */ ++ for (i = 2; i < argc; ++i) ++ { ++ if (i < argc - 1) ++ { ++ if (strcmp (argv[i], "-test") == 0) ++ { ++ i++; ++ test = atoi (argv[i]); ++ continue; ++ } ++ else ++ { ++ fprintf (stderr, "%s: Wrong arguments.\n", progname); ++ exit (1); ++ } ++ } ++ fprintf (stderr, "%s: Wrong arguments.\n", progname); ++ exit (1); ++ } ++ perform_test (test); ++ exit (0); ++ } ++ ++ /* Program called by user. Perform the automatic tests. ++ */ ++ if (argc == 3 && strcmp (argv[1], "-dir") == 0) ++ results_dir = argv[2]; ++ else if (argc >= 2) ++ { ++ fprintf (stderr, "%s [-dir <directory>]\n", progname); ++ exit (1); ++ } ++ ++ printf ("Bounds checking GENERAL-TEST. Date: " __DATE__ ".\n"); ++ ++ for (i = 0; i < NR_TESTS; ++i) ++ call_test (i); ++ ++ return 0; ++} ++ ++void ++call_test (int i) ++{ ++ int line; ++ char command[strlen (progname) + 128]; ++ char inputfile[256]; ++ char buffer1[256], buffer2[256], *b1, *b2; ++ FILE *pp, *fp; ++ ++ printf ("Test %d\r", i); ++ fflush (stdout); ++ sprintf (command, "%s -$ -test %d 2>&1", progname, i); ++ sprintf (inputfile, "%s/test-%d.res", results_dir, i); ++ pp = popen (command, "r"); ++ if (pp == NULL) ++ { ++ perror ("popen (command)"); ++ exit (1); ++ } ++ fp = fopen (inputfile, "r"); ++ if (fp == NULL) ++ { ++ perror ("fopen (result file)"); ++ exit (1); ++ } ++ line = 0; ++ for (;;) ++ { ++ int j; ++ ++ b1 = fgets (buffer1, 256, fp); ++ b2 = fgets (buffer2, 256, pp); ++ ++ if (!b1 || !b2) ++ break; ++ ++ /* Compare the actual result (in buffer2) with the correct ++ * result (in buffer1). ++ */ ++ ++ line++; ++ for (j = 0; j < strlen (buffer1); ++j) ++ { ++ if (buffer1[j] == '*') ++ /* means ignore to the end of the line */ ++ break; ++ else if (buffer1[j] != '.' ++ /* means ignore this single character */ ++ && buffer1[j] != buffer2[j]) ++ { ++ fprintf (stderr, ++ "Difference at line %d:\n" ++ " From command: %s" ++ " Expected result: %s", line, buffer2, buffer1); ++ exit (1); ++ } ++ } ++ } ++ ++ if (b1 != NULL) ++ { ++ fprintf (stderr, "Command generated too few lines of output.\n"); ++ exit (1); ++ } ++ else if (b2 != NULL) ++ { ++ fprintf (stderr, "Command generated too many lines of output.\n"); ++ exit (1); ++ } ++ printf ("Test %d: OK\n", i); ++} ++ ++void ++perform_test (int i) ++{ ++ if (0 <= i && i < NR_TESTS) ++ (test_fn[i]) (); ++ else ++ { ++ fprintf (stderr, "Test number must be 0 <= i < %d\n", NR_TESTS); ++ exit (1); ++ } ++} ++ ++/*----------------------------------------------------------------------*/ ++/* Replace `printf' so `%p' is replaced by something more informative. */ ++ ++int ++my_printf (const char *fs, ...) ++{ ++ va_list args; ++ char new_fs[1024], replace[64]; ++ int i = 0, r; ++ ++ if (sizeof (void *) == 2) ++ strcpy (replace, "ptr16-0x%04x"); ++ else if (sizeof (void *) == 4) ++ strcpy (replace, "ptr32-0x%08x"); ++ else if (sizeof (void *) == 8) ++ strcpy (replace, "ptr64-0x%016x"); ++ else ++ abort (); ++ ++ /* Replace `%p' in the format string. */ ++ while (*fs) ++ { ++ if (*fs == '%' && *(fs + 1) == 'p') ++ { ++ strcpy (new_fs + i, replace); ++ while (new_fs[i]) ++ ++i; ++ fs += 2; ++ } ++ else if (*fs == '%' && *(fs + 1) == '%') ++ { ++ new_fs[i++] = *fs++; ++ new_fs[i++] = *fs++; ++ } ++ else ++ new_fs[i++] = *fs++; ++ } ++ new_fs[i] = 0; ++ ++ va_start (args, fs); ++ r = vprintf (new_fs, args); ++ va_end (args); ++ ++ fflush (stdout); ++ ++ return r; ++} ++ ++#define printf my_printf ++ ++/*----------------------------------------------------------------------*/ ++/* Tests follow ... */ ++ ++/* ARRAY REFERENCE */ ++ ++void ++testg0 (void) ++{ ++ char a[10]; ++ int i; ++ ++ for (i = 0; i < 100; ++i) ++ a[i] = 0; ++} ++ ++void ++testg1 (void) ++{ ++ char a[10]; ++ int i; ++ ++ for (i = 0; i < 10; ++i) ++ printf ("&a[%d] = %p\n", i, &a[i]); ++} ++ ++void ++testg2 (void) ++{ ++ char a[10]; ++ int i; ++ ++ for (i = 0; i <= 10; ++i) ++ printf ("&a[%d] = %p\n", i, &a[i]); /* This is OK */ ++} ++ ++void ++testg3 (void) ++{ ++ char a[10]; ++ int i; ++ ++ for (i = 0; i <= 11; ++i) ++ printf ("&a[%d] = %p\n", i, &a[i]); /* This is _not_ OK */ ++} ++ ++/* POINTER DIFFERENCE */ ++ ++void ++testg4 (void) ++{ ++ int p[10], q[10]; ++ ptrdiff_t n; ++ ++ n = &p[5] - &p[2]; /* OK */ ++ n = &q[2] - &q[5]; /* OK */ ++ n = q - p; /* bad */ ++} ++ ++/* POINTER + INT */ ++ ++void ++testg5 (void) ++{ ++ int i, a[10], *p; ++ ++ for (i = 0; i <= 10; ++i) ++ { ++ printf ("a+i = %p\n", (p = a + i)); ++ printf ("*(a+i) = 0\n"); ++ *p = 0; ++ } ++} ++ ++/* COMPONENT REF */ ++ ++void ++testg6 (void) ++{ ++ struct ++ { ++ int a, b, c, d; ++ } *p1, *p2, *p3, *p4; ++ ++ p1 = calloc (sizeof (int), 1); ++ p2 = calloc (sizeof (int), 2); ++ p3 = calloc (sizeof (int), 3); ++ p4 = calloc (sizeof (int), 4); ++ ++ printf ("&p1->a = %p\n", &p1->a); ++ printf ("&p2->b = %p\n", &p2->b); ++ printf ("&p3->c = %p\n", &p3->c); ++ printf ("&p4->d = %p\n", &p4->d); ++ printf ("&p2->a = %p\n", &p2->a); ++ printf ("&p3->a = %p\n", &p3->a); ++ printf ("&p4->a = %p\n", &p4->a); ++ printf ("p1->a = %d\n", p1->a); ++ printf ("p2->b = %d\n", p2->b); ++ printf ("p3->c = %d\n", p3->c); ++ printf ("p4->d = %d\n", p4->d); ++ printf ("p2->a = %d\n", p2->a); ++ printf ("p3->a = %d\n", p3->a); ++ printf ("p4->a = %d\n", p4->a); ++ ++ printf ("p3->d = %d\n", p3->d); /* error */ ++} ++ ++/* INTENSIVE ARRAY-REF TESTS */ ++ ++struct art0 ++{ ++ int datum1, datum2, datum3; ++ char text[1]; ++} __attribute__ ((packed)); ++ ++void ++testa0 (void) ++{ ++ int len, i; ++ struct art0 *p; ++ int base_size = sizeof (struct art0) - 1; ++ ++ /* This should run without error, but in fact fails because of HtB's ++ * array ref. patch. ++ */ ++ for (len = 0; len < 20; len++) ++ { ++ p = malloc (base_size + len); ++ printf ("allocated structure at address %p, size %d\n", ++ p, base_size + len); ++ p->datum1 = 1; ++ p->datum2 = 2; ++ p->datum3 = 3; ++ for (i = 0; i < len; ++i) ++ p->text[i] = 'a'; ++ p->datum3 = 4; ++ p->datum2 = 5; ++ p->datum1 = 6; ++ free (p); ++ } ++ printf ("OK\n"); ++} ++ ++/* FREE TWICE */ ++ ++void ++testm0 (void) ++{ ++ void *p = malloc (10); ++ ++ free (p); ++ free (p); ++} ++ ++/* FREE NON-HEAP MEM */ ++ ++void ++testm1 (void) ++{ ++ int a[10]; ++ ++ free (a); ++} ++ ++/* REALLOC NON-HEAP MEM */ ++ ++void ++testm2 (void) ++{ ++ int a[10]; ++ ++ realloc (a, 10); ++} ++ ++/* FUNCTION ARGUMENT */ ++ ++void ++testf0proc (i) ++ int i; ++{ ++ int *p; ++ p = &i; ++ p[0] = 1; ++ printf ("OK\n"); ++ p[1] = 2; ++ printf ("bad, but passes through for now\n"); ++} ++ ++void ++testf0 (void) ++{ ++ testf0proc (0); ++} ++ ++/* ARRAY ARGUMENTS */ ++ ++void ++testf1proc (p) ++ char *p; ++{ ++ p[0] = 'a'; ++ printf ("OK\n"); ++ p[1] = 'b'; ++ printf ("bad\n"); ++} ++ ++void ++testf1 (void) ++{ ++ char a[1]; ++ testf1proc (a); ++} ++ ++/* MEMCPY */ ++ ++void ++testf2 (void) ++{ ++ char buf[3]; ++ memcpy (&buf[1], "ab", 2); ++ printf ("OK\n"); ++ memcpy (&buf[1], "abc", 3); ++ printf ("bad\n"); ++} ++ ++/* STRCPY */ ++ ++void ++testf3 (void) ++{ ++ char buf[3]; ++ strcpy (buf, "ab"); ++ printf ("OK\n"); ++ strcpy (buf, "abc"); ++ printf ("bad\n"); ++} ++ ++/* STDARG */ ++ ++#include <stdarg.h> ++ ++void ++testf4proc (int nargs, ...) ++{ ++ va_list p; ++ char *str; ++ ++ va_start (p, nargs); ++ ++ str = va_arg (p, char *); ++ str[0] = '0'; ++ printf ("OK\n"); ++ ++ str = va_arg (p, char *); ++ str[0] = '0'; ++ printf ("OK\n"); ++ ++ str[1] = '1'; ++ printf ("bad\n"); ++} ++ ++void ++testf4 (void) ++{ ++ char a1[1], a2[1]; ++ testf4proc (2, a1, a2); ++} ++ ++/* COMPARE DIFFERENT OBJECTS */ ++ ++void ++testf5 (void) ++{ ++ char a1[2], a2[2]; ++ int i; ++ ++ i = &a1[0] < &a1[1]; ++ printf ("OK\n"); ++ ++ i = &a1[0] < &a2[1]; ++ printf ("bad\n"); ++} ++ ++/* CHECK GLOBAL VARIABLES */ ++ ++char testf6a[2]; ++ ++void ++testf6 (void) ++{ ++ strncpy (testf6a, "xx", 2); ++ printf ("OK\n"); ++ ++ strncpy (testf6a, "xxx", 3); ++ printf ("bad\n"); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/Makefile gcc-4.0.2/gcc/bounds/tests/Makefile +--- gcc-4.0.2.org/gcc/bounds/tests/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/Makefile 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,156 @@ ++# Automatic tests for the bounds checking library. ++# By Richard W.M. Jones. June - July, '95. ++ ++# You can use the following make targets: ++# make all ++# - Compile test program and do all the tests ++# make clean ++# - Clean up object files and program ++# make distclean ++# - Same as `make clean'. ++# make veryclean ++# - Clean up `*.res' files too (** NOT recommended **). ++# make results ++# - Remake all `*.res' files (** NOT recommended **). ++# make TESTS="0 1 2" results ++# - Remake result files for tests 0, 1, 2. Only use this if you ++# know what you're doing: eg. if you've just added another test ++# to the program. Check the result file `test-xyz.res' by hand ++# before you use it. ++ ++#---------------------------------------------------------------------- ++ ++# The directory where you compiled GCC. `../..' should be OK if these tests ++# are left in `bounds/tests' subdirectory. ++ ++GCCDIR = ../.. ++ ++#---------------------------------------------------------------------- ++ ++# Command used to run the compiler with bounds checking. ++ ++CC = $(GCCDIR)/xgcc -B$(GCCDIR)/ ++BCOPTS = -fbounds-checking -fno-builtin ++ ++# Other flags here. `-O' or `-O2' is recommended to check there are no ++# problems with optimizing bounds checked code. ++ ++CCOPTS = -O2 -Wall -g ++ ++# Include files, if necessary. ++ ++INCOPTS = ++ ++# The complete list of flags. ++ ++CFLAGS = $(BCOPTS) $(CCOPTS) $(INCOPTS) ++ ++# Object files making up program. ++ ++OBJS = general-test.o ++ ++# Program name. ++ ++PROG = general-test ++ ++# Libraries. ++ ++LIBS = ++ ++#---------------------------------------------------------------------- ++ ++SHELL = /bin/sh ++ ++all: tests ++ ++distclean: clean ++ ++clean: ++ rm -f $(OBJS) $(PROG) core *~ *.bak *.BAK *.old ++ ++# Don't use the following rule unless you know what you're doing ... ++veryclean: clean ++ rm -f *.res *.res.old ++ ++tests: $(PROG) ++ @echo "Performing tests ..."; \ ++ GCC_BOUNDS_OPTS="-no-message -no-warn-unchecked-statics \ ++ -no-warn-unchecked-stack -no-warn-free-null \ ++ -warn-compare-objects \ ++ -no-warn-misc-strings -no-statistics"; export GCC_BOUNDS_OPTS;\ ++ if ./$(PROG); then \ ++ echo "Tests OK."; \ ++ else \ ++ echo "*** Error during tests."; \ ++ fi ++ ++$(PROG): $(OBJS) ++ $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $(PROG) ++ ++.c.o: ++ $(CC) $(CFLAGS) -c $< -o $@ ++ ++#---------------------------------------------------------------------- ++ ++# Remake the results files. This assumes that the program is currently ++# working. Normally you should never need to do this. Use the following ++# make command: ++# make TESTS="3 4 5" results ++# (remakes results of tests 3, 4 and 5) or: ++# make TESTS=all results ++# make results ++# (both remake all tests). ++# ++# Commentary (you will probably never need to know this): ++# The rule for remaking the results files is a single `sh' command which ++# automatically runs `general-test -$ -test N' for each test number `N' ++# and processes the output with `sed'. In particular, we delete specific ++# pointer values, since these will vary from machine to machine and day ++# to day. The important thing is that we recognize pointers as NULL (0), ++# ILLEGAL (-1) or ``other''. Notice that `general-test' writes pointers ++# in the form `ptrnn-0xpppp' where `nn' is the pointer size (16, 32 or ++# 64 bits) and `pppp' is the actual pointer value. This is so we can safely ++# parse these pointers here. Also we convert 0xffff -> ILLEGAL -> 0xffff ++# in the `sed' script. This is so it doesn't get mangled into `0x....' by ++# the intervening lines in the script. ++# ++# The automatic processing done by `sed' here isn't foolproof, so you'll ++# need to examine the results by hand if you add your own tests. ++ ++results: $(PROG) ++ @GCC_BOUNDS_OPTS="-no-message -no-warn-unchecked-statics \ ++ -no-warn-unchecked-stack -no-warn-free-null \ ++ -warn-compare-objects \ ++ -no-warn-misc-strings -no-statistics"; export GCC_BOUNDS_OPTS;\ ++ if [ "x$(TESTS)" = xall -o "x$(TESTS)" = "x" ]; then \ ++ tests=`grep 'define.*NR_TESTS' general-test.c | \ ++ head -1 | \ ++ awk '{for (i = 0; i < $$3; ++i) print i;}'`; \ ++ else \ ++ tests="$(TESTS)"; \ ++ fi; \ ++ for test in $$tests; do \ ++ echo Making file test-$$test.res; \ ++ if [ -f test-$$test.res ]; then \ ++ mv test-$$test.res test-$$test.res.old; \ ++ fi; \ ++ ./$(PROG) -$$ -test $$test 2>&1 | \ ++ sed -e 's/ointer value: 0x.*/ointer value: */g' \ ++ -e 's/ddress in memory: 0x.*/ddress in memory: */g' \ ++ -e 's/ptr16-0xffff/ptr16-ILLEGAL/g' \ ++ -e 's/ptr32-0xffffffff/ptr32-ILLEGAL/g' \ ++ -e 's/ptr64-0xffffffffffffffff/ptr64-ILLEGAL/g' \ ++ -e 's/ptr16-0xffff/ptr16-NULL/g' \ ++ -e 's/ptr32-0x00000000/ptr32-NULL/g' \ ++ -e 's/ptr64-0x0000000000000000/ptr64-NULL/g' \ ++ -e 's/ptr16-0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]/ptr16-0x..../g' \ ++ -e 's/ptr32-0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]/ptr32-0x......../g' \ ++ -e 's/ptr64-0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]/ptr64-0x................/g' \ ++ -e 's/ptr16-ILLEGAL/ptr16-0xffff/g' \ ++ -e 's/ptr32-ILLEGAL/ptr32-0xffffffff/g' \ ++ -e 's/ptr64-ILLEGAL/ptr64-0xffffffffffffffff/g' \ ++ -e 's/ptr16-NULL/ptr16-0x0000/g' \ ++ -e 's/ptr32-NULL/ptr32-0x00000000/g' \ ++ -e 's/ptr64-NULL/ptr64-0x0000000000000000/g' \ ++ -e '/IOT trap\/Abort/d' > test-$$test.res; \ ++ done +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/README gcc-4.0.2/gcc/bounds/tests/README +--- gcc-4.0.2.org/gcc/bounds/tests/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,5 @@ ++ ++This directory contains an experimental test suite for Bounds Checking GCC. ++It is rather incomplete at the moment & may depend too much on the ++machine architecture (ie. on having 32 bit ints). ++ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-0.res gcc-4.0.2/gcc/bounds/tests/test-0.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-0.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-0.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,9 @@ ++general-test.c:281:Bounds error: array reference (10) outside bounds of the array. ++general-test.c:281: Pointer value: * ++general-test.c:281: Object `a': ++general-test.c:281: Address in memory: * ++general-test.c:281: Size: 10 bytes ++general-test.c:281: Element size: 1 bytes ++general-test.c:281: Number of elements: 10 ++general-test.c:281: Created at: general-test.c, line 277 ++general-test.c:281: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-10.res gcc-4.0.2/gcc/bounds/tests/test-10.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-10.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-10.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,2 @@ ++general-test.c:439:Bounds error: invalid pointer passed to `realloc'. ++general-test.c:439: Pointer value: * +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-11.res gcc-4.0.2/gcc/bounds/tests/test-11.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-11.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-11.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,2 @@ ++OK ++bad, but passes through for now +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-12.res gcc-4.0.2/gcc/bounds/tests/test-12.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-12.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-12.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++OK ++general-test.c:470:Bounds error: attempt to reference memory overrunning the end of an object. ++general-test.c:470: Pointer value: * ++general-test.c:470: Object `a': ++general-test.c:470: Address in memory: * ++general-test.c:470: Size: 1 bytes ++general-test.c:470: Element size: 1 bytes ++general-test.c:470: Number of elements: 1 ++general-test.c:470: Created at: general-test.c, line 477 ++general-test.c:470: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-13.res gcc-4.0.2/gcc/bounds/tests/test-13.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-13.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-13.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++OK ++general-test.c:489:Bounds error: memcpy with this destination pointer and size 3 would overrun the end of the object's allocated memory. ++general-test.c:489: Pointer value: * ++general-test.c:489: Object `buf': ++general-test.c:489: Address in memory: * ++general-test.c:489: Size: 3 bytes ++general-test.c:489: Element size: 1 bytes ++general-test.c:489: Number of elements: 3 ++general-test.c:489: Created at: general-test.c, line 486 ++general-test.c:489: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-14.res gcc-4.0.2/gcc/bounds/tests/test-14.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-14.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-14.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++OK ++general-test.c:501:Bounds error: strcpy with this destination string and size 4 would overrun the end of the object's allocated memory. ++general-test.c:501: Pointer value: * ++general-test.c:501: Object `buf': ++general-test.c:501: Address in memory: * ++general-test.c:501: Size: 3 bytes ++general-test.c:501: Element size: 1 bytes ++general-test.c:501: Number of elements: 3 ++general-test.c:501: Created at: general-test.c, line 498 ++general-test.c:501: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-15.res gcc-4.0.2/gcc/bounds/tests/test-15.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-15.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-15.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,11 @@ ++OK ++OK ++general-test.c:525:Bounds error: attempt to reference memory overrunning the end of an object. ++general-test.c:525: Pointer value: * ++general-test.c:525: Object `a2': ++general-test.c:525: Address in memory: * ++general-test.c:525: Size: 1 bytes ++general-test.c:525: Element size: 1 bytes ++general-test.c:525: Number of elements: 1 ++general-test.c:525: Created at: general-test.c, line 532 ++general-test.c:525: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-16.res gcc-4.0.2/gcc/bounds/tests/test-16.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-16.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-16.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,18 @@ ++OK ++general-test.c:547:Bounds error: in <, >, <= or >= of pointers, pointers point to different objects. ++general-test.c:547: Left pointer value: * ++general-test.c:547: Object `a1': ++general-test.c:547: Address in memory: * ++general-test.c:547: Size: 2 bytes ++general-test.c:547: Element size: 1 bytes ++general-test.c:547: Number of elements: 2 ++general-test.c:547: Created at: general-test.c, line 541 ++general-test.c:547: Storage class: stack ++general-test.c:547: Right pointer value: * ++general-test.c:547: Object `a2': ++general-test.c:547: Address in memory: * ++general-test.c:547: Size: 2 bytes ++general-test.c:547: Element size: 1 bytes ++general-test.c:547: Number of elements: 2 ++general-test.c:547: Created at: general-test.c, line 541 ++general-test.c:547: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-17.res gcc-4.0.2/gcc/bounds/tests/test-17.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-17.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-17.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++OK ++general-test.c:561:Bounds error: strncpy with this destination string and size 3 would overrun the end of the object's allocated memory. ++general-test.c:561: Pointer value: * ++general-test.c:561: Object `testf6a': ++general-test.c:561: Address in memory: * ++general-test.c:561: Size: 2 bytes ++general-test.c:561: Element size: 1 bytes ++general-test.c:561: Number of elements: 2 ++general-test.c:561: Created at: general-test.c, line 553 ++general-test.c:561: Storage class: static +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-1.res gcc-4.0.2/gcc/bounds/tests/test-1.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-1.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-1.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,10 @@ ++&a[0] = ptr32-0x........ ++&a[1] = ptr32-0x........ ++&a[2] = ptr32-0x........ ++&a[3] = ptr32-0x........ ++&a[4] = ptr32-0x........ ++&a[5] = ptr32-0x........ ++&a[6] = ptr32-0x........ ++&a[7] = ptr32-0x........ ++&a[8] = ptr32-0x........ ++&a[9] = ptr32-0x........ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-2.res gcc-4.0.2/gcc/bounds/tests/test-2.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-2.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-2.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,11 @@ ++&a[0] = ptr32-0x........ ++&a[1] = ptr32-0x........ ++&a[2] = ptr32-0x........ ++&a[3] = ptr32-0x........ ++&a[4] = ptr32-0x........ ++&a[5] = ptr32-0x........ ++&a[6] = ptr32-0x........ ++&a[7] = ptr32-0x........ ++&a[8] = ptr32-0x........ ++&a[9] = ptr32-0x........ ++&a[10] = ptr32-0x........ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-3.res gcc-4.0.2/gcc/bounds/tests/test-3.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-3.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-3.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,12 @@ ++&a[0] = ptr32-0x........ ++&a[1] = ptr32-0x........ ++&a[2] = ptr32-0x........ ++&a[3] = ptr32-0x........ ++&a[4] = ptr32-0x........ ++&a[5] = ptr32-0x........ ++&a[6] = ptr32-0x........ ++&a[7] = ptr32-0x........ ++&a[8] = ptr32-0x........ ++&a[9] = ptr32-0x........ ++&a[10] = ptr32-0x........ ++&a[11] = ptr32-0x........ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-4.res gcc-4.0.2/gcc/bounds/tests/test-4.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-4.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-4.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,17 @@ ++general-test.c:324:Bounds error: in pointer difference, pointers point to different objects. ++general-test.c:324: Left pointer value: * ++general-test.c:324: Object `q': ++general-test.c:324: Address in memory: * ++general-test.c:324: Size: 40 bytes ++general-test.c:324: Element size: 4 bytes ++general-test.c:324: Number of elements: 10 ++general-test.c:324: Created at: general-test.c, line 319 ++general-test.c:324: Storage class: stack ++general-test.c:324: Right pointer value: * ++general-test.c:324: Object `p': ++general-test.c:324: Address in memory: * ++general-test.c:324: Size: 40 bytes ++general-test.c:324: Element size: 4 bytes ++general-test.c:324: Number of elements: 10 ++general-test.c:324: Created at: general-test.c, line 319 ++general-test.c:324: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-5.res gcc-4.0.2/gcc/bounds/tests/test-5.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-5.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-5.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,31 @@ ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++a+i = ptr32-0x........ ++*(a+i) = 0 ++general-test.c:338:Bounds error: attempt to reference memory overrunning the end of an object. ++general-test.c:338: Pointer value: * ++general-test.c:338: Object `a': ++general-test.c:338: Address in memory: * ++general-test.c:338: Size: 40 bytes ++general-test.c:338: Element size: 4 bytes ++general-test.c:338: Number of elements: 10 ++general-test.c:338: Created at: general-test.c, line 332 ++general-test.c:338: Storage class: stack +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-6.res gcc-4.0.2/gcc/bounds/tests/test-6.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-6.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-6.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,23 @@ ++&p1->a = ptr32-0x........ ++&p2->b = ptr32-0x........ ++&p3->c = ptr32-0x........ ++&p4->d = ptr32-0x........ ++&p2->a = ptr32-0x........ ++&p3->a = ptr32-0x........ ++&p4->a = ptr32-0x........ ++p1->a = 0 ++p2->b = 0 ++p3->c = 0 ++p4->d = 0 ++p2->a = 0 ++p3->a = 0 ++p4->a = 0 ++general-test.c:372:Bounds error: pointer arithmetic would overrun the end of the object. ++general-test.c:372: Pointer value: * ++general-test.c:372: Object `calloc': ++general-test.c:372: Address in memory: * ++general-test.c:372: Size: 12 bytes ++general-test.c:372: Element size: 1 bytes ++general-test.c:372: Number of elements: 12 ++general-test.c:372: Created at: general-test.c, line 354 ++general-test.c:372: Storage class: heap +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-7.res gcc-4.0.2/gcc/bounds/tests/test-7.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-7.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-7.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,21 @@ ++allocated structure at address ptr32-0x........, size 12 ++allocated structure at address ptr32-0x........, size 13 ++allocated structure at address ptr32-0x........, size 14 ++allocated structure at address ptr32-0x........, size 15 ++allocated structure at address ptr32-0x........, size 16 ++allocated structure at address ptr32-0x........, size 17 ++allocated structure at address ptr32-0x........, size 18 ++allocated structure at address ptr32-0x........, size 19 ++allocated structure at address ptr32-0x........, size 20 ++allocated structure at address ptr32-0x........, size 21 ++allocated structure at address ptr32-0x........, size 22 ++allocated structure at address ptr32-0x........, size 23 ++allocated structure at address ptr32-0x........, size 24 ++allocated structure at address ptr32-0x........, size 25 ++allocated structure at address ptr32-0x........, size 26 ++allocated structure at address ptr32-0x........, size 27 ++allocated structure at address ptr32-0x........, size 28 ++allocated structure at address ptr32-0x........, size 29 ++allocated structure at address ptr32-0x........, size 30 ++allocated structure at address ptr32-0x........, size 31 ++OK +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-8.res gcc-4.0.2/gcc/bounds/tests/test-8.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-8.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-8.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,2 @@ ++general-test.c:419:Bounds error: invalid pointer passed to `free'. ++general-test.c:419: Pointer value: * +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tests/test-9.res gcc-4.0.2/gcc/bounds/tests/test-9.res +--- gcc-4.0.2.org/gcc/bounds/tests/test-9.res 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tests/test-9.res 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,2 @@ ++general-test.c:429:Bounds error: invalid pointer passed to `free'. ++general-test.c:429: Pointer value: * +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/thread/pthread_init.c gcc-4.0.2/gcc/bounds/thread/pthread_init.c +--- gcc-4.0.2.org/gcc/bounds/thread/pthread_init.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/thread/pthread_init.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,97 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * thread/pthread_init.c ++ * Summary: ++ * Init bounds checking for pthread library or signal handlers. ++ * Other notes: ++ * Signal handlers are not turned on by default because it takes ++ * a lot of cpu cycles. Most of the time this extra overhead is ++ * not needed because the user code does not have signal handlers ++ * or the user signal handlers do not call bounds_checking functions. ++ * Author Date Notes ++ * HtB 2/6/99 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#ifdef __BOUNDS_CHECKING_ON ++ ++/* If signal handlers are used set this define to '1' instead of '0'. */ ++ ++#define USE_SIGNAL 0 ++ ++/* If pthread is used set this define to '1' instead of '0'. */ ++ ++#define USE_PTHREAD 1 ++ ++#include <stdio.h> /* NULL */ ++#include <sys/types.h> ++#if USE_PTHREAD ++#include <pthread.h> ++#endif ++ ++#if USE_SIGNAL ++extern int __bounds_mutex_signal; ++#endif ++ ++#if USE_PTHREAD ++static void bounds_mutex_start (void); ++static void bounds_mutex_end (void); ++ ++extern pthread_t (*__bounds_function_thread) (void); ++static pthread_mutex_t bounds_mutex_object; ++#endif ++ ++extern void (*__bounds_mutex_start) (void); ++extern void (*__bounds_mutex_end) (void); ++ ++/* These routine are called to protect static data in the bounds_checking ++ library. */ ++ ++static void ++bounds_mutex_start (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_lock (&bounds_mutex_object); ++#endif ++} ++ ++static void ++bounds_mutex_end (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_unlock (&bounds_mutex_object); ++#endif ++} ++ ++/* Init routine to set up bounds_checking for the pthread library. */ ++ ++void ++bounds_pthread_init (void) ++{ ++#if USE_PTHREAD ++ pthread_mutex_init (&bounds_mutex_object, NULL); ++ __bounds_function_thread = pthread_self; ++#endif ++#if USE_SIGNAL ++ __bounds_mutex_signal = 1; ++#endif ++ __bounds_mutex_start = bounds_mutex_start; ++ __bounds_mutex_end = bounds_mutex_end; ++} ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/find-objects.c gcc-4.0.2/gcc/bounds/tools/find-objects.c +--- gcc-4.0.2.org/gcc/bounds/tools/find-objects.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/find-objects.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,661 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * tools/find-objects.c ++ * Summary: ++ * Look for static data in libraries and other object files. Write ++ * a C program that will add these objects to the tree at run time ++ * automatically. ++ * Other notes: ++ * You will need GNU's `BFD' library, which can be found in the GDB ++ * package. ++ * Author Date Notes ++ * RWMJ 27/8/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <malloc.h> ++#include <errno.h> ++#include <ansidecl.h> ++ ++#ifndef PARAMS ++#ifdef __STDC__ ++#define PARAMS(args) args ++#else ++#define PARAMS(args) ++#endif ++#endif ++ ++#include "bfd.h" ++ ++void process_file PARAMS ((CONST char *)); ++void process_archive_or_object PARAMS ((bfd *, CONST char *)); ++void process_object_file PARAMS ((bfd *, CONST char *)); ++int compare_symbols PARAMS ((asymbol **, asymbol **)); ++int miscellaneous_deletable_symbol PARAMS ((CONST char *)); ++int excluded_symbol PARAMS ((CONST char *)); ++int add_excluded_symbols PARAMS ((CONST char **)); ++void open_output_file PARAMS ((CONST char *, CONST char *)); ++void write_symbol ++PARAMS ((CONST char *, CONST char *, CONST char *, CONST char *, long, ++ size_t)); ++void write_table PARAMS ((void)); ++void close_output_file PARAMS ((CONST char *)); ++void do_bfd_error PARAMS ((CONST char *)); ++void do_error PARAMS ((CONST char *)); ++void usage PARAMS ((void)); ++ ++int quiet = 0; ++FILE *output_file; ++ ++int ++main (argc, argv) ++ int argc; ++ char *argv[]; ++{ ++ char *input_filename = NULL, *output_filename = NULL; ++ int count = 0, i; ++ ++ /* Initialize the BFD library. ++ */ ++ bfd_init (); ++ ++ /* Process the command line arguments here. ++ */ ++ for (i = 1; i < argc; ++i) ++ { ++ if (argv[i][0] == '-' && argv[i][1] == '-') ++ { ++ if (strcmp (argv[i], "--quiet") == 0) ++ quiet = 1; ++ else if (strcmp (argv[i], "--exclude") == 0 && i < argc - 1) ++ i += add_excluded_symbols ((CONST char **) &argv[i + 1]); ++ else if (strcmp (argv[i], "--") == 0) ++ ; ++ else ++ usage (); ++ } ++ else ++ { ++ if (count == 0) ++ input_filename = argv[i]; ++ else if (count == 1) ++ output_filename = argv[i]; ++ else ++ usage (); ++ count++; ++ } ++ } ++ if (count != 2) ++ usage (); ++ ++ open_output_file (output_filename, input_filename); ++ process_file (input_filename); ++ close_output_file (input_filename); ++ ++ exit (0); ++} ++ ++void ++process_file (filename) ++ CONST char *filename; ++{ ++ bfd *input_bfd; ++ ++ input_bfd = bfd_openr (filename, NULL); ++ if (input_bfd == NULL) ++ do_bfd_error ("bfd_openr"); ++ ++ if (!quiet) ++ printf ("File %s:\n", filename); ++ process_archive_or_object (input_bfd, filename); ++ ++ bfd_close (input_bfd); ++} ++ ++void ++process_archive_or_object (abfd, filename) ++ bfd *abfd; ++ CONST char *filename; ++{ ++ /* Autodetect if this is a library (`archive') or object file. Other types ++ * of file will be rejected here. ++ */ ++ if (bfd_check_format (abfd, bfd_archive)) ++ { ++ /* It's a library. Go through each object file in the library in turn. ++ */ ++ bfd *subbfd = NULL; ++ ++/* if (!quiet) printf ("This is a library.\n"); */ ++ ++ while ((subbfd = bfd_openr_next_archived_file (abfd, subbfd)) != NULL) ++ process_archive_or_object (subbfd, subbfd->filename); ++ } ++ else if (bfd_check_format (abfd, bfd_object)) ++ { ++ process_object_file (abfd, filename); ++ } ++ else ++ { ++ /* Unrecognized format, or miscellaneous error reading the input file. ++ */ ++ do_bfd_error ("file type"); ++ } ++} ++ ++void ++process_object_file (abfd, filename) ++ bfd *abfd; ++ CONST char *filename; ++{ ++ long storage_needed, number_of_symbols, number_deleted, i; ++ asymbol **symbol_table; ++ int symbols_written = 0; ++ ++ if (!quiet) ++ { ++ printf (" Object file %s: ", filename); ++ fflush (stdout); ++ } ++ ++ /* Read the symbol table from the object file. This code is copied almost ++ * directly from the BFD info pages. ++ */ ++ storage_needed = bfd_get_symtab_upper_bound (abfd); ++ if (storage_needed < 0) ++ do_bfd_error ("bfd_get_symtab_upper_bound"); ++ if (storage_needed == 0) ++ { ++ printf ("Warning: object file contains no symbols.\n"); ++ return; ++ } ++ symbol_table = (asymbol **) malloc (storage_needed); ++ if (symbol_table == NULL) ++ do_error ("malloc"); ++ ++ /* This actually reads the symbol table into memory. ++ */ ++ number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table); ++ if (number_of_symbols < 0) ++ do_bfd_error ("bfd_canonicalize_symtab"); ++ if (number_of_symbols == 0) ++ goto end; ++ ++ /* Now we have the symbol table in memory, delete undefined references ++ * and sort the remaining symbols into ascending order, so we can easily ++ * find the location and size of each one. If several symbols map to ++ * a single location, we ensure that globally named symbols appear first. ++ */ ++ number_deleted = 0; ++ for (i = 0; i < number_of_symbols; ++i) ++ { ++ if (symbol_table[i]->flags == 0 ++ || (symbol_table[i]->flags & BSF_DEBUGGING) ++ || (symbol_table[i]->flags & BSF_SECTION_SYM) ++ || (symbol_table[i]->flags & BSF_WARNING) ++ || (symbol_table[i]->flags & BSF_INDIRECT) ++ || (symbol_table[i]->flags & BSF_FILE) ++ || (symbol_table[i]->flags & BSF_DYNAMIC) ++ || miscellaneous_deletable_symbol (symbol_table[i]->name) ++ || excluded_symbol (symbol_table[i]->name)) ++ { ++ symbol_table[i] = 0; /* Mark symbol for deletion. */ ++ number_deleted++; ++ } ++ } ++ qsort (symbol_table, number_of_symbols, sizeof (asymbol *), ++ compare_symbols); ++ ++#if 0 ++ for (i = 0; i < number_of_symbols; ++i) ++ if (symbol_table[i]) ++ printf (" Symbol: %s. Value 0x%08X (%s) Section %s\n", ++ symbol_table[i]->name, ++ symbol_table[i]->value, ++ symbol_table[i]->flags & BSF_GLOBAL ? "global" : "local", ++ symbol_table[i]->section->name); ++ else ++ printf (" <Deleted symbol>\n"); ++#endif ++ ++ number_of_symbols -= number_deleted; ++ if (number_of_symbols == 0) ++ goto end; ++ ++ /* From this list of symbols, derive a list of objects. This is not as ++ * easy as it may seem. For a start, we can't generate pointers to ++ * static declarations in object files, because these symbols aren't ++ * exported. In that case, we use offsets to global symbols in the ++ * same segment. Also, symbols don't have explicit sizes, we have to ++ * guess the size from the position of the next object, or the size ++ * of the section. ++ */ ++ { ++ long next_i, global_symbol_in_this_section = -1; ++ size_t size; ++ ++ for (i = 0; i < number_of_symbols; i = next_i) ++ { ++ /* Set `next_i' to point to the next distinct symbol after the ++ * current one, skipping symbols which point to the same address. ++ */ ++ next_i = i + 1; ++ while (next_i < number_of_symbols ++ && symbol_table[next_i]->value == symbol_table[i]->value ++ && symbol_table[next_i]->section == symbol_table[i]->section) ++ next_i++; ++ ++ /* Try to compute the size of this symbol. If the next symbol is ++ * in the same section, then the size is simply the difference ++ * between the two symbols. If the next symbol is not in the same ++ * section, we must look at the size of the section itself. ++ */ ++ if (next_i < number_of_symbols ++ && symbol_table[next_i]->section == symbol_table[i]->section) ++ size = symbol_table[next_i]->value - symbol_table[i]->value; ++ else ++ { ++ long section_size ++ = bfd_get_section_size_before_reloc (symbol_table[i]->section); ++ if (section_size > symbol_table[i]->value) ++ size = section_size - symbol_table[i]->value; ++ else ++ size = 1; ++ } ++ ++ /* If any of the symbols pointing to this address are global, then ++ * they should have been sorted to the beginning, so `i' should ++ * point to a global symbol if there is one. ++ */ ++ if (symbol_table[i]->flags & BSF_GLOBAL) ++ { ++ /* There is a global symbol: Generate a pointer to this ++ * object directly. ++ */ ++ write_symbol (filename, symbol_table[i]->name, ++ symbol_table[i]->section->name, ++ symbol_table[i]->name, 0, size); ++ symbols_written++; ++ global_symbol_in_this_section = i; ++ } ++ else ++ { ++ /* There is no global symbol for this object: We can still attempt ++ * to get a pointer to a global in the same section and use ++ * an offset from that symbol. If there are no globals at all in ++ * this section, print a warning and continue. ++ */ ++ if (global_symbol_in_this_section >= 0 ++ && (symbol_table[global_symbol_in_this_section]->section ++ == symbol_table[i]->section)) ++ { ++ write_symbol (filename, symbol_table[i]->name, ++ symbol_table[i]->section->name, ++ symbol_table[global_symbol_in_this_section]-> ++ name, ++ symbol_table[i]->value - ++ symbol_table[global_symbol_in_this_section]-> ++ value, size); ++ symbols_written++; ++ } ++ else ++ { ++ long j; ++ ++ global_symbol_in_this_section = -1; ++ for (j = next_i; j < number_of_symbols; ++j) ++ if (symbol_table[j]->section == symbol_table[i]->section) ++ { ++ if (symbol_table[j]->flags & BSF_GLOBAL) ++ { ++ global_symbol_in_this_section = j; ++ break; ++ } ++ } ++ else ++ break; ++ if (global_symbol_in_this_section >= 0) ++ { ++ write_symbol (filename, symbol_table[i]->name, ++ symbol_table[i]->section->name, ++ symbol_table ++ [global_symbol_in_this_section]->name, ++ symbol_table[i]->value - ++ symbol_table ++ [global_symbol_in_this_section]->value, ++ size); ++ symbols_written++; ++ } ++ else ++ { ++ if (!quiet) ++ fputc ('\n', stdout); ++ printf ++ ("Warning: Cannot generate a ref. to local symbol `%s' in file `%s'.\n", ++ symbol_table[i]->name, filename); ++ } ++ } ++ } ++ } ++ } ++ ++end: ++ if (!quiet) ++ printf ("%d objects found.\n", symbols_written); ++} ++ ++int ++compare_symbols (sym1_ptr, sym2_ptr) ++ asymbol **sym1_ptr, **sym2_ptr; ++{ ++ asymbol *sym1 = *sym1_ptr; ++ asymbol *sym2 = *sym2_ptr; ++ ++ if (sym1 != 0 && sym2 != 0) ++ { ++ /* Order symbols according to their section, then according to their ++ * value. If they have the same section and value, we favour placing ++ * global references before local ones. ++ * Notice that we simple use the section pointers to order the ++ * sections: it doesn't actually matter if `.data' comes before ++ * or after `.text', etc. ++ */ ++ if (sym1->section != sym2->section) ++ return sym1->section - sym2->section; ++ else if (sym1->value != sym2->value) ++ return sym1->value - sym2->value; ++ else if (sym1->flags & BSF_GLOBAL) ++ return -1; ++ else ++ return 1; ++ } ++ else if (sym1 != 0) /* Deleted symbols migrate to the end. */ ++ return -1; ++ else ++ return 1; ++} ++ ++int ++miscellaneous_deletable_symbol (name) ++ CONST char *name; ++{ ++ /* Delete certain symbols which may cause problems because they are ++ * built into GCC or they don't really exist. ++ */ ++ if (strncmp (name, "__builtin_", 10) == 0 ++ || strcmp (name, "sccsid") == 0 ++ || strcmp (name, "rcsid") == 0 ++ || ((strncmp (name, "__CTOR_", 7) == 0 ++ || strncmp (name, "__DTOR_", 7) == 0) ++ && ++ (strcmp (name + 7, "LIST__") == 0 ++ || strcmp (name + 7, "END__") == 0))) ++ return 1; ++ else ++ return 0; ++} ++ ++/*----------------------------------------------------------------------*/ ++ ++/* A primitive hash table that lists symbols which the user wants excluded ++ * from the output. We hash on the first letter of the symbol. ++ */ ++static struct ++{ ++ int nr_symbols; ++ CONST char **symbols; ++} hash_table[256]; ++ ++static int some_excluded_symbols = 0; ++ ++int ++add_excluded_symbols (argv) ++ CONST char *argv[]; ++{ ++ int i; ++ ++ if (!some_excluded_symbols) ++ { ++ memset (hash_table, 0, sizeof hash_table); ++ some_excluded_symbols = 1; ++ } ++ for (i = 0; argv[i] != NULL && (argv[i][0] != '-' || argv[i][1] != '-'); ++ ++i) ++ { ++ /* Append this symbol to the end of the current hash table list. ++ */ ++ int c = argv[i][0], new_size; ++ ++ hash_table[c].nr_symbols++; ++ new_size = hash_table[c].nr_symbols * sizeof (char *); ++ if (hash_table[c].symbols != NULL) ++ hash_table[c].symbols = realloc (hash_table[c].symbols, new_size); ++ else ++ hash_table[c].symbols = malloc (new_size); ++ if (hash_table[c].symbols == NULL) ++ { ++ perror ("malloc"); ++ exit (1); ++ } ++ hash_table[c].symbols[hash_table[c].nr_symbols - 1] = argv[i]; ++ } ++ ++ if (i == 0) /* no symbols defined */ ++ usage (); ++ ++ return i; ++} ++ ++/* Test to see if `name' is in the list of excluded symbols provided by ++ * the user. ++ */ ++ ++int ++excluded_symbol (name) ++ CONST char *name; ++{ ++ int c, i; ++ ++ if (!some_excluded_symbols) ++ return 0; ++ c = name[0]; ++ for (i = 0; i < hash_table[c].nr_symbols; ++i) ++ if (strcmp (hash_table[c].symbols[i], name) == 0) ++ return 1; ++ return 0; ++} ++ ++/*----------------------------------------------------------------------*/ ++ ++char *prologue = "\ ++/* CAUTION: Automatically generated file. Edits will be lost!\n\ ++ *--\n\ ++ * Initialization code for objects in the file `%s'.\n\ ++ * Link this file with programs that use this library or object file so\n\ ++ * that they can check objects declared in this file correctly.\n\ ++ */\n\ ++\n\ ++typedef unsigned long size_t; /* FIXME - can't include `stdio.h' */\n\ ++\n\ ++/* The following table format is shared with `lib/bounds-lib.h' too.\n\ ++ */\n\ ++typedef struct {\n\ ++ void *address; /* Object address */\n\ ++ size_t size; /* Size (bytes) */\n\ ++ size_t align; /* Alignment */\n\ ++ char *filename; /* Filename where found */\n\ ++ int line; /* Line where found */\n\ ++ char *name; /* Name of object */\n\ ++} external_statics_table;\n\ ++\n\ ++void __bounds_add_static_objects_table (external_statics_table *);\n\ ++\n\ ++/* Ensure that `init' gets called automatically at run time.\n\ ++ */\n\ ++static void init (void) __attribute__((constructor));\n\ ++\n\ ++"; ++ ++char *epilogue = "\ ++/* Constructor function that stuffs the above table into the checking\n\ ++ * library's splay tree.\n\ ++ */\n\ ++static void\n\ ++init (void)\n\ ++{\n\ ++ __bounds_add_static_objects_table (table);\n\ ++}\n\ ++\n\ ++/* EOF */\n\ ++"; ++ ++void ++open_output_file (filename, title) ++ CONST char *filename, *title; ++{ ++ output_file = fopen (filename, "w"); ++ if (output_file == NULL) ++ do_error ("fopen"); ++ ++ fprintf (output_file, prologue, title); ++} ++ ++void ++close_output_file (title) ++ CONST char *title; ++{ ++ write_table (); ++ fprintf (output_file, epilogue, title); ++ fclose (output_file); ++} ++ ++static struct _table ++{ ++ struct _table *next; ++ CONST char *filename, *real_name, *section_name, *address_name; ++ long address_offset; ++ size_t size; ++} *hd_table = NULL, *end_table = NULL; ++ ++void ++write_symbol (filename, real_name, section_name, address_name, address_offset, ++ size) ++ CONST char *filename; /* Object file where this was found. */ ++ CONST char *real_name; /* Name of this symbol (may be static). */ ++ CONST char *section_name; /* Name of section where symbol found. */ ++ CONST char *address_name; /* Name of symbol used to get address. */ ++ long address_offset; /* Optional offset to `address_name'. */ ++ size_t size; /* Size of the symbol. */ ++{ ++ struct _table *p = malloc (sizeof (struct _table)); ++ if (p == NULL) ++ do_error ("malloc"); ++ ++ if (hd_table == NULL) ++ hd_table = end_table = p; ++ else ++ { ++ end_table->next = p; ++ end_table = p; ++ } ++ ++ p->next = NULL; ++ p->filename = filename; ++ p->real_name = real_name; ++ p->section_name = section_name; ++ p->address_name = address_name; ++ p->address_offset = address_offset; ++ p->size = size; ++ ++ fprintf (output_file, "extern char %s;\n", address_name); ++} ++ ++void ++write_table () ++{ ++ struct _table *p; ++ ++ fprintf (output_file, "\n" "static external_statics_table table[] = {\n"); ++ ++ for (p = hd_table; p != NULL; p = p->next) ++ { ++ fprintf (output_file, " { "); ++ if (p->address_offset == 0) ++ fprintf (output_file, "&%s, ", p->address_name); ++ else ++ fprintf (output_file, "(void *)((unsigned)&%s %c %ld), ", ++ p->address_name, ++ p->address_offset >= 0 ? '+' : '-', ++ p->address_offset >= 0 ++ ? p->address_offset : -(p->address_offset)); ++ fprintf (output_file, ++ "%u, 1, \"%s\", 0, \"%s\" },\n", ++ p->size, p->filename, p->real_name); ++ } ++ fprintf (output_file, " { 0 }\n};\n\n"); ++} ++ ++void ++do_bfd_error (msg) ++ CONST char *msg; ++{ ++ perror (msg); ++ exit (1); ++} ++ ++void ++do_error (msg) ++ CONST char *msg; ++{ ++ perror (msg); ++ exit (1); ++} ++ ++void ++usage () ++{ ++ fprintf (stderr, ++ "find-objects: Find position and sizes of the objects in a library or `.o' file\n" ++ "Usage: find-objects [--flags] <input-file> <c-output-file>\n" ++ "Flags:\n" ++ " --quiet Run quietly.\n" ++ " --exclude symbol [symbol [...]] Don't list symbols.\n"); ++ exit (1); ++} ++ ++#if defined(linux) ++ ++/* Dummies for `libbfd' on this machine. ++ */ ++void ++hex_init (void) ++{ ++ printf ("hex_init called\n"); ++} ++ ++void ++_hex_value (void) ++{ ++ printf ("hex_value called\n"); ++} ++ ++#endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/grab-statics.in gcc-4.0.2/gcc/bounds/tools/grab-statics.in +--- gcc-4.0.2.org/gcc/bounds/tools/grab-statics.in 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/grab-statics.in 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,72 @@ ++#!/bin/sh - ++ ++# @w@ ++# ++# Grab the statics in a library or object file. Write them to ++# a object file with a standard name, that you can then link ++# with your programs to ensure more reliable checking of ++# such objects. ++# ++# Written by Richard W.M. Jones. ++# ++# Usage: grab-statics libfile [libfile ...] ++# ++# Examples: ++# grab-statics /lib/libc.a /lib/libm.a ++# grab-statics unchecked1.o ++# grab-statics libstuff.a ++ ++tools_dir=@tools_dir@ ++lib_dir=@lib_dir@ ++output_dir=@output_dir@ ++gcc=@gcc@ ++gcc_flags='@gcc_flags@' ++ ++# If you want `find-objects' to run quietly, then swap the following comments. ++#quietflag='--quiet' ++quietflag= ++ ++#---------------------------------------------------------------------- ++# Check arguments. ++ ++if [ $# -lt 1 ]; then ++ echo 'Usage: grab-statics libfile [libfile ...]' ++ echo ' where "libfile" is a library archive or object file' ++ exit ++fi ++ ++#---------------------------------------------------------------------- ++# Exclude symbols in libcheck.a and libgcc.a. ++# The reason is that these may take precedence over symbols in the C ++# library. We would end up with a pointer to a symbol in libcheck.a, but ++# with the size of the symbol in the C library. ++# We need a cleaner way to do this. Perhaps reading the final non- ++# stripped executable is a better approach. ++ ++excludelist=` ++(for f in $lib_dir/libcheck.a $lib_dir/libgcc.a; do ++ nm $f | egrep -v '^$|\.o:$|^[ \t]*U ' | awk '{print $3}' ++done) | sort -u` ++ ++#---------------------------------------------------------------------- ++# ++ ++for f in $*; do ++ echo "$f:" ++ tempfile=/tmp/statics-temp-`basename $f`.c ++ outputfile=$output_dir/statics-`basename $f`.o ++ $tools_dir/find-objects \ ++ --exclude $excludelist $quietflag -- \ ++ $f $tempfile ++ if [ $? -eq 0 ]; then ++ $gcc $gcc_flags -c $tempfile -o $outputfile ++ if [ $? -eq 0 ]; then ++ echo "Created $outputfile" ++ else ++ echo "grab-statics [$outputfile]: *** error ***" ++ fi ++ else ++ echo "grab-statics [$tempfile]: *** error ***" ++ fi ++ rm -f $tempfile ++done +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/Makefile gcc-4.0.2/gcc/bounds/tools/Makefile +--- gcc-4.0.2.org/gcc/bounds/tools/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/Makefile 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,62 @@ ++# *----------------------------------------------------------------------* ++# * Bounds Checking for GCC. * ++# * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++# *----------------------------------------------------------------------* ++# * This program is free software; you can redistribute it and/or modify * ++# * it under the terms of the GNU General Public License as published by * ++# * the Free Software Foundation; either version 2 of the License, or * ++# * (at your option) any later version. * ++# * * ++# * This program is distributed in the hope that it will be useful, * ++# * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++# * GNU General Public License for more details. * ++# * * ++# * You should have received a copy of the GNU General Public License * ++# * along with this program; if not, write to the Free Software * ++# * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++# *----------------------------------------------------------------------* ++# * File: ++# * tools/Makefile ++# * Summary: ++# * See README file. ++# * Other notes: ++# * ++# * Author Date Notes ++# * ++# *----------------------------------------------------------------------* ++ ++CC = ../../xgcc ++CFLAGS = -Wall -O -B../../ ++ ++SHELL = /bin/sh ++ ++# You will need the `BFD' library which is commonly distributed with Gnu ++# GDB, or you may have it installed already. Place the line needed to link ++# it here: ++BFD_LIB = -lbfd -liberty ++ ++all: grab-statics ++ ++distclean: clean ++ ++clean: ++ rm -f find-objects string-subst grab-statics *.o *~ *.bak *.BAK core \ ++ statics-*.o ++ ++grab-statics: grab-statics.in string-subst find-objects ++ cat grab-statics.in | \ ++ ./string-subst @w@ 'Caution! This file is automatically generated. Edits will be lost!' | \ ++ ./string-subst @tools_dir@ `pwd` | \ ++ ./string-subst @output_dir@ `pwd` | \ ++ ./string-subst @lib_dir@ `cd ../..; pwd` | \ ++ ./string-subst @gcc@ `cd ../..; pwd`/xgcc | \ ++ ./string-subst @gcc_flags@ "-B`cd ../..; pwd`/ -fno-builtin -g" \ ++ > grab-statics ++ chmod 0755 grab-statics ++ ++string-subst: string-subst.o ++ $(CC) $(CFLAGS) $< -o $@ ++ ++find-objects: find-objects.o ++ $(CC) $(CFLAGS) $< $(BFD_LIB) -o $@ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/pack-up gcc-4.0.2/gcc/bounds/tools/pack-up +--- gcc-4.0.2.org/gcc/bounds/tools/pack-up 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/pack-up 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,126 @@ ++#!/bin/sh - ++ ++# Create a tar file containing the extra files required by ++# bounds checking & the diffs to the main sources. ++# By Richard W.M. Jones. ++ ++# GCC directories. ++# Assume: ++# GCC in $HOME/$GCC ++# original GCC in $HOME/GCC_ORIG ++ ++GCC=gcc-2.7.2 ++GCC_ORIG=gcc-2.7.2-orig ++ ++# Place to put the packed file. ++ ++INST_DIR=$HOME ++ ++# Final tar file name. Contains the GCC and BC version numbers. ++ ++TARFILE=bounds-checking-2.7.2-1.02.tgz ++ ++# Files and directories that are not in the GCC distribution go here. ++ ++EXTRA_FILES="c-bounds.c c-bounds.h cp/bounds.c bounds" ++ ++# Files that have been changed in bounds checking GCC. ++ ++CHANGED_FILES="\ ++ c-common.c\ ++ c-decl.c\ ++ c-lang.c\ ++ c-parse.in\ ++ c-tree.h\ ++ c-typeck.c\ ++ calls.c\ ++ extend.texi\ ++ flags.h\ ++ fold-const.c\ ++ function.c\ ++ gcc.1\ ++ gcc.c\ ++ ginclude/stdarg.h\ ++ ginclude/va-alpha.h\ ++ ginclude/va-clipper.h\ ++ ginclude/va-h8300.h\ ++ ginclude/va-i860.h\ ++ ginclude/va-i960.h\ ++ ginclude/va-m88k.h\ ++ ginclude/va-mips.h\ ++ ginclude/va-pa.h\ ++ ginclude/va-ppc.h\ ++ ginclude/va-pyr.h\ ++ ginclude/va-sparc.h\ ++ ginclude/va-spur.h\ ++ ginclude/varargs.h\ ++ invoke.texi\ ++ libgcc2.c\ ++ optabs.c\ ++ print-tree.c\ ++ stmt.c\ ++ toplev.c\ ++ varasm.c\ ++ Makefile.in\ ++ cp/Makefile.in" ++ ++#----- ++ ++# Some programs you may like to change. ++ ++TAR="tar" ++GZIP="gzip" ++DIFF="diff" ++ECHO="echo" ++MAKE="make" ++RM="rm -f" ++LS="ls -l" ++ ++#----- ++ ++cd $HOME/$GCC ++ ++# We need to make GCC (so we can make the test results files). ++ ++$MAKE ++ ++# Pack up the diffs into one file ... ++ ++cd $HOME ++ ++$RM $GCC/bounds-checking.diff ++$ECHO -n "Packing up diffs:" ++for f in $CHANGED_FILES; do ++ $ECHO -n " $f" ++ $DIFF -c $GCC_ORIG/$f $GCC/$f >> $GCC/bounds-checking.diff ++done ++ ++cd $HOME/$GCC ++ ++$ECHO; $LS bounds-checking.diff ++ ++$ECHO "---------- Making bounds/lib clean. ----------" ++(cd bounds/lib; $MAKE srcdir=$HOME/$GCC distclean) ++ ++$ECHO "---------- Making bounds/tests clean and creating results files. ----------" ++(cd bounds/tests; $MAKE results; $MAKE distclean) ++ ++$ECHO "---------- Making bounds/tools clean. ----------" ++(cd bounds/tools; $MAKE distclean) ++ ++$ECHO "---------- Cleaning up bounds/ and subdirectories. ----------" ++for d in `find bounds -type d -print`; do ++ (cd $d; $RM *~ *.BAK *.bak core *.o *.orig *.rej *.old) ++done ++ ++$ECHO "---------- Packing up tar file. ----------" ++tarfiles="$GCC/bounds-checking.diff" ++for f in $EXTRA_FILES; do ++ tarfiles="$tarfiles $GCC/$f" ++done ++cd $HOME ++$TAR cf - $tarfiles | $GZIP > $INST_DIR/$TARFILE ++cd $HOME/$GCC ++ ++$ECHO "---------- Result file: ----------" ++$LS $INST_DIR/$TARFILE +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/pack-up-bin gcc-4.0.2/gcc/bounds/tools/pack-up-bin +--- gcc-4.0.2.org/gcc/bounds/tools/pack-up-bin 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/pack-up-bin 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,87 @@ ++#!/bin/sh - ++ ++# Create a tar file containing the binaries for bounds checking GCC. ++# By Richard W.M. Jones. ++ ++# GCC directories. ++# Assume GCC is in $HOME. ++ ++GCC=gcc-2.7.2 ++cd $HOME/$GCC ++ ++# Place to put the packed file. ++ ++INST_DIR=$HOME ++ ++# Final tar file name. This must contain the GCC and BC version numbers, and ++# the target name. ++ ++TARFILE=bounds-checking-2.7.2-1.02-binary-i486-unknown-linux.tgz ++ ++# The list of files that we need to pack up (excluding gcc.info* files). ++# The `crt*.o' files are needed by Solaris, but not, apparently, by other ++# machines, so ignore warnings from tar for these. ++ ++FILES="bounds cc1 cpp crt1.o crtbegin.o crtend.o crti.o crtn.o \ ++ include libgcc.a libcheck.a specs xgcc README.gcc-bin" ++ ++# Use `gtar' on systems where tar is broken. Use `gmake' if necessary on ++# your system. ++ ++TAR="tar" ++MAKE="make" ++GZIP="gzip" ++CAT="cat" ++ECHO="echo" ++RM="rm -f" ++LS="ls -l" ++ ++#----- ++ ++$MAKE; $MAKE doc ++ ++# Make the README file ++ ++$CAT > README.gcc-bin << __END__ ++ ++This is the binary distribution ++ $TARFILE ++ ++Please consult the README file (in bounds/ subdir.) for details about how ++to run this GCC. ++ ++RWMJ - 17/10/95. ++ ++__END__ ++ ++#$ECHO "---------- Making bounds/lib clean. ----------" ++#(cd bounds/lib; $MAKE distclean) ++ ++$ECHO "---------- Making results files in bounds/tests. ----------" ++(cd bounds/tests; $MAKE results) ++ ++#$ECHO "---------- Making bounds/tools clean. ----------" ++#(cd bounds/tools; $MAKE distclean) ++ ++$ECHO "---------- Cleaning up bounds/ and subdirectories. ----------" ++for d in `find bounds -type d -print`; do ++ (cd $d; $RM *~ *.BAK *.bak core *.orig *.rej *.old) ++done ++ ++$ECHO "---------- Packing up tar file. ----------" ++tarfiles="" ++for f in gcc.info*; do ++ tarfiles="$tarfiles $GCC/$f" ++done ++for f in $FILES; do ++ if [ -f $f -o -d $f ]; then ++ tarfiles="$tarfiles $GCC/$f" ++ fi ++done ++cd $HOME ++$TAR chf - $tarfiles | $GZIP > $INST_DIR/$TARFILE ++cd $HOME/$GCC ++$RM README.gcc-bin ++ ++$ECHO "---------- Result file: ----------" ++$LS $INST_DIR/$TARFILE +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/README gcc-4.0.2/gcc/bounds/tools/README +--- gcc-4.0.2.org/gcc/bounds/tools/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,93 @@ ++ TOOLS subdirectory ++ ------------------ ++ ++`grab-statics' ++-------------- ++ ++If you wish to use unchecked source files and libraries, you can still check ++variables declared in those files using the `grab-statics' script. This looks ++through the unchecked files and extracts the variables into another file ++in a form that the bounds checking library can read at run time. ++ ++To use, simply give `grab-statics' a list of object files and library ++archives, and it will make an object (.o) file that you can link with ++your program. ++ ++Examples: ++ ++ % grab-statics /lib/libc.a ++ ++ - Create a list of statics in `statics-libc.a.o' ++ ++ % grab-statics /usr/X11R6/lib/libX11.a unchecked.o ++ ++ - Create two lists in `statics-libX11.a.o' and `statics-unchecked.o.o' ++ ++Assuming your program uses libc, libX11 and unchecked.o, you could link your ++program with the following line at run-time: ++ ++ % gcc -fbounds-checking check1.o check2.o unchecked.o \ ++ statics-libX11.a.o statics-unchecked.o.o statics-libc.a.o \ ++ -L/usr/X11R6/lib -lX11 -o prog ++ ++Run the program with unchecked warnings turned on, eg. ++ ++sh % GCC_BOUNDS_OPTS='-warn-unchecked-statics' prog ++csh % setenv GCC_BOUNDS_OPTS '-warn-unchecked-statics'; prog ++ ++Installing `grab-statics' ++------------------------- ++ ++`grab-statics' is a shell script that uses the program `find-objects.c' to ++do the hard work. This in turn uses Gnu's BFD library to read object files ++and library archives. BFD is not supplied with these patches, you will need ++to download it separately. It is usually distributed with GDB, so one place ++you could get it is: ++ ++ ftp://sunsite.doc.ic.ac.uk/gnu/gdb-4.14.tar.gz ++ ++Some systems, such as Linux, may come with it preinstalled. Look for ++`libbfd*' in /usr/lib. ++ ++To make the program, do: ++ ++ % cd bounds/tools ++ % make grab-statics ++ ++I usually run the program in-place, so there is no `make install' as such. ++Look at the beginning of the `grab-statics' script if you want to install ++it somewhere intelligent. There are some directories hardwired there that ++you may need to change. If anyone has ideas about where this ought to be ++installed, mail me. ++ ++Bugs & limitations with `grab-statics' ++-------------------------------------- ++ ++You have to link your binaries statically if you want to use `grab-statics'. ++If someone can approach me with a coherent explanation of how DLL jumptables ++and indirections work, I can probably make it work with dynamic linking too. ++ ++You can, in theory, do: ++ grab-statics /lib/libc.so.5 ++but in practice this doesn't seem to work (on Linux). I don't know enough about ++how DLLs work so we can do this. Use static linking for now. ++ ++It doesn't deal with multiple symbols in different libraries with the same ++name very intelligently. So suppose you have `ctime' in your C library, and ++you've redefined it in your own code. Then you will get `ctime' marked as ++an unchecked object with a pointer to your own `ctime', but with the size ++of the `ctime' in the C lib. To get round this at the moment, you need to ++hack `grab-statics.in' to include `ctime' in the list of excluded symbols. ++ ++Only tested under Linux/ELF at the moment. Your mileage may (will) vary. ++ ++No `make install' rule yet. ++ ++You need Gnu BFD. ++ ++`pack-up' and `pack-up-bin' ++--------------------------- ++ ++These are tools that I use to make the final source & binary distributions. ++You don't need to touch these, unless you want to be really kind & send ++me a binary that works on your machine. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/tools/string-subst.c gcc-4.0.2/gcc/bounds/tools/string-subst.c +--- gcc-4.0.2.org/gcc/bounds/tools/string-subst.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/tools/string-subst.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Substitute one string with another in input. ++ * Public domain. ++ */ ++ ++#include <stdio.h> ++ ++int ++main (argc, argv) ++ int argc; ++ char *argv[]; ++{ ++ int i, c, posn = 0, in_string = 0; ++ char *find; ++ char *replace; ++ ++ if (argc != 3) ++ { ++ fprintf (stderr, "string-subst <find> <replace>\n"); ++ exit (1); ++ } ++ find = argv[1]; ++ replace = argv[2]; ++ while ((c = getchar ()) != EOF) ++ { ++ again: ++ if (in_string == 0) ++ { ++ if (c == find[0]) ++ { ++ in_string = 1; ++ posn = 1; ++ } ++ else ++ fputc (c, stdout); ++ } ++ else /* in_string == 1 */ ++ { ++ if (find[posn] == 0) ++ { ++ in_string = 0; ++ fputs (replace, stdout); ++ goto again; ++ } ++ else if (c != find[posn]) ++ { ++ in_string = 0; ++ for (i = 0; i < posn; ++i) ++ fputc (find[i], stdout); ++ goto again; ++ } ++ else ++ posn++; ++ } ++ } ++ exit (0); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/Makefile gcc-4.0.2/gcc/bounds/treestats/Makefile +--- gcc-4.0.2.org/gcc/bounds/treestats/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/Makefile 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,43 @@ ++# Makefile for: ++# ------------------------------------------------------------ ++# Various programs to process splay tree statistics files. ++# By Richard W.M. Jones. ++# ------------------------------------------------------------ ++ ++SHELL = /bin/sh ++ ++CC = gcc ++CFLAGS = -g -O -Wall -I. -I../lib ++HEADERS = readfile.h misc.h ../ext-tree.h ../objects.h ++ ++LIBOBJS = readfile.o misc.o ++ST_A_OBJS = st-analyze.o ++ST_L_OBJS = st-locality.o ++ST_G_OBJS = st-graph.o ++MT_G_OBJS = mount-graphs.o ++OBJS = $(ST_A_OBJS) $(ST_L_OBJS) $(ST_G_OBJS) $(MT_G_OBJS) $(LIBOBJS) ++PROGS = st-analyze st-locality st-graph mount-graphs ++ ++LIBS = -lm ++ ++all: lib $(PROGS) ++ ++clean: ++ rm -f $(PROGS) $(OBJS) ++ ++lib: $(LIBOBJS) ++ ++st-analyze: $(ST_A_OBJS) $(LIBOBJS) ++ $(CC) $(CFLAGS) $(ST_A_OBJS) $(LIBOBJS) $(LIBS) -o $@ ++ ++st-locality: $(ST_L_OBJS) $(LIBOBJS) ++ $(CC) $(CFLAGS) $(ST_L_OBJS) $(LIBOBJS) $(LIBS) -o $@ ++ ++st-graph: $(ST_G_OBJS) $(LIBOBJS) ++ $(CC) $(CFLAGS) $(ST_G_OBJS) $(LIBOBJS) $(LIBS) -o $@ ++ ++mount-graphs: $(MT_G_OBJS) $(LIBOBJS) ++ $(CC) $(CFLAGS) $(MT_G_OBJS) $(LIBOBJS) $(LIBS) -o $@ ++ ++.c.o: $(HEADERS) ++ $(CC) $(CFLAGS) -c $< -o $@ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/misc.c gcc-4.0.2/gcc/bounds/treestats/misc.c +--- gcc-4.0.2.org/gcc/bounds/treestats/misc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/misc.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,130 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/misc.c ++ * Summary: ++ * Miscellaneous functions to deal with the splay tree in memory. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#include "misc.h" ++ ++/* Delete a tree recursively. */ ++ ++void ++deltree (tree * t) ++{ ++ object *n; ++ ++ n = t->root; ++ delsubtree (n); ++ free (t); ++} ++ ++/* Delete a subtree recursively. */ ++ ++void ++delsubtree (object * n) ++{ ++ if (n == NULL) ++ return; ++ if (n->left) ++ delsubtree (n->left); ++ if (n->right) ++ delsubtree (n->right); ++ free (n); ++} ++ ++/* Count number of nodes in a tree. */ ++ ++int ++counttree (tree * t) ++{ ++ return countsubtree (t->root); ++} ++ ++/* Count number of nodes in a subtree. */ ++ ++int ++countsubtree (object * n) ++{ ++ if (n == NULL) ++ return 0; ++ else ++ return countsubtree (n->left) + countsubtree (n->right) + 1; ++} ++ ++/* Count the number of hits received by the whole tree. */ ++ ++int ++counttreehits (tree * t) ++{ ++ return countsubtreehits (t->root); ++} ++ ++/* Count the number of hits received by a particular subtree. */ ++ ++int ++countsubtreehits (object * n) ++{ ++ if (n == NULL) ++ return 0; ++ else ++ return countsubtreehits (n->left) + countsubtreehits (n->right) + n->hits; ++} ++ ++/* Calculate a measure of balance on the tree. The argument is a percentage ++ * and we search the tree breadthfirst until we pass more than this percent ++ * of the nodes. ++ */ ++ ++static int atdepth (object *, int); ++ ++int ++calcbalance (tree * t, int pc) ++{ ++ int count = pc * counttree (t) / 100; ++ int sum = 0; ++ int depth; ++ ++ for (depth = 0; sum < count; depth++) ++ sum += atdepth (t->root, depth); ++ ++ return depth; ++} ++ ++static int ++atdepth (object * n, int d) ++{ ++ /* Return # of nodes that are at depth `d' in subtree `n'. The root node ++ * is at depth 0. ++ */ ++ if (n == NULL && d > 0) ++ return 0; ++ else if (d == 0) ++ return n != NULL; ++ else ++ return atdepth (n->left, d - 1) + atdepth (n->right, d - 1); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/misc.h gcc-4.0.2/gcc/bounds/treestats/misc.h +--- gcc-4.0.2.org/gcc/bounds/treestats/misc.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/misc.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,28 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Written by Richard W.M. Jones. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/misc.h ++ * Summary: ++ * Header file for miscellaneous functions. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#ifndef _MISC_H_ ++#define _MISC_H_ ++ ++#include "objects.h" ++ ++void deltree (tree *); ++void delsubtree (object *); ++int counttree (tree *); ++int countsubtree (object *); ++int calcbalance (tree *, int pc); ++int counttreehits (tree *); ++int countsubtreehits (object *); ++ ++#endif /* _MISC_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/mount-graphs.c gcc-4.0.2/gcc/bounds/treestats/mount-graphs.c +--- gcc-4.0.2.org/gcc/bounds/treestats/mount-graphs.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/mount-graphs.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,148 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/mount-graphs.c ++ * Summary: ++ * Mount tree images generated by st-graph.c into a single image. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <sys/time.h> ++#include <unistd.h> ++#include <string.h> ++ ++static int verbose = 0, N = 0; ++ ++static void usage (void) __attribute__ ((noreturn)); ++static void do_command (char *); ++ ++int ++main (int argc, char *argv[]) ++{ ++ int i, Nx, Ny; ++ double x = 72, y = 72, ++ width = 8 * 72 - 144, height = 11 * 72 - 144, x_inc, y_inc, x_orig; ++ char *graphs[argc]; ++ char command[2048]; ++ char *outputfile = NULL; ++ ++ if (argc < 3) ++ usage (); ++ ++ Nx = atoi (argv[1]); ++ ++ for (i = 2; i < argc; ++i) ++ { ++ if (argv[i][0] == '-') ++ { ++ switch (argv[i][1]) ++ { ++ case 'v': ++ verbose = 1; ++ break; ++ case 'p': ++ if (i >= argc - 4) ++ usage (); ++ x = atoi (argv[++i]); ++ y = atoi (argv[++i]); ++ width = atoi (argv[++i]); ++ height = atoi (argv[++i]); ++ if (x < 0 || x >= width || ++ y < 0 || y >= height || width <= 0 || height <= 0) ++ usage (); ++ break; ++ case 'o': ++ if (outputfile || i >= argc - 1) ++ usage (); ++ outputfile = argv[++i]; ++ break; ++ default: ++ usage (); ++ } ++ } ++ else ++ graphs[N++] = argv[i]; ++ } ++ ++ if (N == 0 || Nx <= 0) ++ usage (); ++ if (!outputfile) ++ outputfile = "output.ps"; ++ ++ unlink (outputfile); ++ ++ Ny = N / Nx; ++ if (N % Nx > 0) ++ Ny++; ++ ++ x_inc = width / Nx; ++ y_inc = height / Ny; ++ x_orig = x; ++ y += (Ny - 1) * y_inc; ++ ++ for (i = 0; i < N; ++i) ++ { ++ sprintf (command, "st-graph -a -b -o %s -p %d %d %d %d %s", ++ outputfile, ++ (int) x, (int) y, (int) (x_inc * 0.9), (int) (y_inc * 0.9), ++ graphs[i]); ++ do_command (command); ++ if (i % Nx < Nx - 1) ++ x += x_inc; ++ else ++ { ++ x = x_orig; ++ y -= y_inc; ++ } ++ } ++ ++ exit (0); ++} ++ ++static void ++do_command (char *cmd) ++{ ++ int r; ++ ++ if (verbose) ++ puts (cmd); ++ r = system (cmd); ++ if (r != 0) ++ exit (r); ++} ++ ++static void ++usage (void) ++{ ++ fprintf (stderr, ++ "mount-graphs: Mount trees from st-graph into a single image.\n" ++ "Usage:\n" ++ " mount-graphs wide [-options] [-o outputfile] dumpfile [dumpfile [...]]\n" ++ " where `wide' is number of images across page\n" ++ "Options:\n" ++ " -o outputfile Name file for resulting image (default: output.ps)\n" ++ " -p x y width height Specify size of resulting image\n" ++ " -v Echo commands before executing them\n"); ++ exit (1); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/readfile.c gcc-4.0.2/gcc/bounds/treestats/readfile.c +--- gcc-4.0.2.org/gcc/bounds/treestats/readfile.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/readfile.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,180 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/readfile.c ++ * Summary: ++ * Read a particular splay tree dump file into memory. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <fcntl.h> ++#include <string.h> ++ ++#include "ext-tree.h" ++#include "objects.h" ++#include "readfile.h" ++ ++static int getsubtree (FILE *, object **); ++static int compressed; ++static void close_file (FILE *); ++static FILE *open_file (char *); ++ ++int ++readfile (char *filename, tree ** t_return, struct ext_tree **et_return) ++{ ++ FILE *fp; ++ struct ext_tree *et = malloc (sizeof (struct ext_tree)); ++ tree *t = malloc (sizeof (tree)); ++ object *root; ++ ++ fp = open_file (filename); ++ if (fp == NULL) ++ { ++ fprintf (stderr, "readfile: error opening `%s'.\n", filename); ++ return -1; ++ } ++ if (fread (et, sizeof (struct ext_tree), 1, fp) != 1) ++ { ++ fprintf (stderr, "readfile: error reading header.\n"); ++ close_file (fp); ++ return -1; ++ } ++ if (strcmp (et->magic, EXT_TREE_MAGIC) != 0) ++ { ++ fprintf (stderr, "readfile: dump file has incorrect magic number.\n"); ++ close_file (fp); ++ return -1; ++ } ++ ++ if (t_return != NULL) ++ { ++ if (getsubtree (fp, &root) != 0) ++ { ++ close_file (fp); ++ return -1; ++ } ++ ++ t->root = root; ++ if (t_return) ++ *t_return = t; ++ } ++ ++ if (et_return) ++ *et_return = et; ++ ++ close_file (fp); ++ return 0; ++} ++ ++static int ++getsubtree (FILE * fp, object ** obj_return) ++{ ++ int present; ++ ++ if (fread (&present, sizeof (int), 1, fp) != 1) ++ { ++ fprintf (stderr, "readfile: error reading `present' flag.\n"); ++ return -1; ++ } ++ ++ /* First word is a flag indicating whether this node is NULL or not. ++ */ ++ if (present) ++ { ++ object *obj = malloc (sizeof (object)); ++ ++ if (fread (obj, sizeof (object), 1, fp) != 1) ++ { ++ fprintf (stderr, "readfile: error reading tree node.\n"); ++ return -1; ++ } ++ if (getsubtree (fp, &(obj->left)) != 0 ++ || getsubtree (fp, &(obj->right)) != 0) ++ return -1; ++ ++ /* Zero out entries that aren't actually present in the file. ++ */ ++ obj->filename = obj->name = obj->alloca_function = 0; ++ obj->line = 0; ++ ++ /* Connect up parent properly. ++ */ ++ if (obj->left) ++ { ++ obj->left->parent = obj; ++ obj->left->left_of_parent = 1; ++ } ++ if (obj->right) ++ { ++ obj->right->parent = obj; ++ obj->right->left_of_parent = 0; ++ } ++ ++ /* Return object with current parent unset. */ ++ obj->parent = 0; ++ ++ if (obj_return) ++ *obj_return = obj; ++ } ++ else ++ { ++ if (obj_return) ++ *obj_return = NULL; ++ } ++ ++ return 0; ++} ++ ++/* Open and close a file, even if it is compressed. ++ */ ++static FILE * ++open_file (char *filename) ++{ ++ char *t = strrchr (filename, '.'); ++ char cmd[strlen (filename) + 64]; ++ ++ if (t != NULL && ++ (strcmp (t, ".gz") == 0 || ++ strcmp (t, ".Z") == 0 || strcmp (t, ".z") == 0)) ++ { ++ compressed = 1; ++ sprintf (cmd, "zcat %s", filename); ++ return popen (cmd, "r"); ++ } ++ else ++ { ++ compressed = 0; ++ return fopen (filename, "r"); ++ } ++} ++ ++static void ++close_file (FILE * fp) ++{ ++ if (compressed) ++ pclose (fp); ++ else ++ fclose (fp); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/readfile.h gcc-4.0.2/gcc/bounds/treestats/readfile.h +--- gcc-4.0.2.org/gcc/bounds/treestats/readfile.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/readfile.h 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,24 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Written by Richard W.M. Jones. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/readfile.h ++ * Summary: ++ * Header for `readfile' subroutine. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#ifndef _READFILE_H_ ++#define _READFILE_H_ ++ ++#include "ext-tree.h" ++#include "objects.h" ++ ++/* Returns 0 on success, -1 on failure. */ ++int readfile (char *filename, tree ** t_return, struct ext_tree **et_return); ++ ++#endif /* _READFILE_H_ */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/README gcc-4.0.2/gcc/bounds/treestats/README +--- gcc-4.0.2.org/gcc/bounds/treestats/README 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/README 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,2 @@ ++Various programs in this directory process the tree statistics produced ++when you set SPLAY_COUNT_OPERATIONS to 1 in `objects.c'. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/st-analyze.c gcc-4.0.2/gcc/bounds/treestats/st-analyze.c +--- gcc-4.0.2.org/gcc/bounds/treestats/st-analyze.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/st-analyze.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,88 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/st-analyze.c ++ * Summary: ++ * Do simple analysis on a list of splay tree dump files. ++ * Other notes: ++ * Command line usage is `st-analyze [list of files ...]' ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <assert.h> ++ ++#include "readfile.h" ++#include "misc.h" ++ ++#define print_div(a,b) do {\ ++ if ((b) != 0) printf ("%2.2g\t", (double)(a)/(b)); else printf ("*\t");\ ++ } while (0) ++ ++int ++main (int argc, char *argv[]) ++{ ++ int i; ++ ++ if (argc < 2) ++ { ++ fprintf (stderr, "st-analyze dumpfile [dumpfile [...]]\n"); ++ exit (1); ++ } ++ printf ++ ("INDEX\tLOOKUPS\tNLOOKUP\tADDS\tDELS\tSPLAYS\tCOUNT\tHITS\tALD\tANLD\tASD\tALSD\tAASD\tADSD\tDEP5\tDEP10\tDEP50\n"); ++ for (i = 1; i < argc; ++i) ++ { ++ tree *t; ++ struct ext_tree *et; ++ int count, hits; ++ int depth50, depth10, depth5; ++ ++ /* Read the file from disk. */ ++ if (readfile (argv[i], &t, &et) == -1) ++ continue; ++ ++ /* Print some simple data about this splay tree. */ ++ count = counttree (t); ++ hits = counttreehits (t); ++ depth5 = calcbalance (t, 5); ++ depth10 = calcbalance (t, 10); ++ depth50 = calcbalance (t, 50); ++ printf ("%u\t%u\t%u\t%u\t%u\t%u\t%d\t%d\t", ++ et->index, ++ et->look_up_operations, ++ et->nlook_up_operations, ++ et->add_operations, ++ et->del_operations, et->splay_operations, count, hits); ++ print_div (et->look_up_steps, et->look_up_operations); ++ print_div (et->nlook_up_steps, et->nlook_up_operations); ++ print_div (et->splay_steps, et->splay_operations); ++ print_div (et->splay_look_up_steps, et->splay_look_up_operations); ++ print_div (et->splay_add_steps, et->splay_add_operations); ++ print_div (et->splay_del_steps, et->splay_del_operations); ++ printf ("%d\t%d\t%d\t\n", depth5, depth10, depth50); ++ ++ /* Clean up. */ ++ deltree (t); ++ } ++ ++ exit (0); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/st-graph.c gcc-4.0.2/gcc/bounds/treestats/st-graph.c +--- gcc-4.0.2.org/gcc/bounds/treestats/st-graph.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/st-graph.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,294 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/st-graph.c ++ * Summary: ++ * Draw the splay tree graphically with # hits marked at each node. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++ ++#include "misc.h" ++#include "readfile.h" ++ ++static void usage (void) __attribute__ ((noreturn)); ++static void get_max_hits (object * n); ++static void draw (void); ++static void prologue (void); ++static void epilogue (void); ++static void draw_rect (double, double, double, double); ++ ++static FILE *outfp; ++static tree *t; ++static struct ext_tree *et; ++static unsigned max_hits, max_radius; ++static int xpos = 0, ypos = 0, width = 0, height = 0; ++ ++int ++main (int argc, char *argv[]) ++{ ++ int i; ++ char *inputfile = NULL, *outputfile = NULL; ++ int psize_set = 0, box = 0, append_mode = 0; ++ ++ if (argc < 2) ++ usage (); ++ ++ for (i = 1; i < argc; ++i) ++ { ++ if (argv[i][0] == '-') ++ { ++ switch (argv[i][1]) ++ { ++ case 'o': ++ if (outputfile || i == argc - 1) ++ usage (); ++ outputfile = argv[++i]; ++ break; ++ case 'p': ++ if (psize_set || i >= argc - 4) ++ usage (); ++ psize_set = 1; ++ xpos = atoi (argv[++i]); ++ ypos = atoi (argv[++i]); ++ width = atoi (argv[++i]); ++ height = atoi (argv[++i]); ++ break; ++ case 'b': ++ box = 1; ++ break; ++ case 'a': ++ append_mode = 1; ++ break; ++ default: ++ usage (); ++ } ++ } ++ else ++ { ++ if (inputfile) ++ usage (); ++ inputfile = argv[i]; ++ } ++ } ++ ++ if (outputfile == NULL) ++ outputfile = "output.ps"; ++ if (inputfile == NULL) ++ usage (); ++ if (!psize_set) ++ { ++ /* Set paper to 8x11" default. */ ++ xpos = 72; ++ ypos = 72; ++ width = 8 * 72 - 144; ++ height = 11 * 72 - 144; ++ } ++ ++ max_radius = width / 17; ++ ++ if (readfile (inputfile, &t, &et) == -1) ++ exit (1); ++ ++ max_hits = 0; ++ get_max_hits (t->root); ++ ++ if (!append_mode) ++ outfp = fopen (outputfile, "w"); ++ else ++ outfp = fopen (outputfile, "a"); ++ if (outfp == NULL) ++ { ++ perror ("st-graph: fopen"); ++ exit (1); ++ } ++ prologue (); ++ if (box) ++ { ++ draw_rect (xpos, ypos, width, height); ++ xpos += width / 20; /* Reduce size by 10% */ ++ ypos += height / 20; ++ width -= width / 10; ++ height -= height / 10; ++ } ++ draw (); ++ epilogue (); ++ fclose (outfp); ++ ++ exit (0); ++} ++ ++static void ++usage (void) ++{ ++ fprintf (stderr, ++ "st-graph: Draw a splay tree from a dump file.\n" ++ "Usage:\n" ++ " st-graph [options] [-o outputfile] inputfile\n" ++ "Options:\n" ++ " -o outputfile Output file name (default: output.ps)\n" ++ " -p x y width height Specify position on page (default: 8x11\")\n" ++ " -b Draw a box around the graph\n" ++ " -a Append to output file\n"); ++ exit (1); ++} ++ ++static void ++prologue (void) ++{ ++ /* Write the standard PostScript prologue for the file. ++ */ ++ char prologue[] = ++ "gsave\n" ++ "/line { newpath moveto lineto stroke } def\n" ++ "/node { newpath 0 360 arc fill } def\n"; ++ fputs (prologue, outfp); ++} ++ ++static void ++epilogue (void) ++{ ++ /* Write the standard PostScript epilogue for the file. ++ */ ++ char epilogue[] = "grestore\n"; ++ fputs (epilogue, outfp); ++} ++ ++static void draw_tree (object *, double, double, double, double, ++ double *, double *); ++static void draw_line (double, double, double, double); ++static void draw_node (double, double, unsigned); ++ ++#define SCALE 0.1 ++ ++static void ++draw (void) ++{ ++ if (t->root) ++ draw_tree (t->root, xpos, ypos, width, height, NULL, NULL); ++ else ++ { ++ /* ... draw NULL root ... */ ++ } ++} ++ ++/* Draw the tree recursively here. We are allowed to use all the paper we ++ * want between coordinates (x,y) and (x+dx,y+dy). `n' is not NULL. Return ++ * the coordinates of the root of our subtree. ++ */ ++static void ++draw_tree (object * n, ++ double x, double y, ++ double dx, double dy, double *nx_rtn, double *ny_rtn) ++{ ++ double nx, ny; ++ ++ /* Decide where to put the root node of this subtree. */ ++ nx = x + dx / 2; ++ ny = y + (1 - SCALE / 2) * dy; ++ ++ /* Return the root node, if required. */ ++ if (nx_rtn) ++ *nx_rtn = nx; ++ if (ny_rtn) ++ *ny_rtn = ny; ++ ++ /* If the left subtree exists, draw it first. */ ++ if (n->left) ++ { ++ double nx_left, ny_left; ++ ++ draw_tree (n->left, x, y, dx / 2, (1 - SCALE) * dy, &nx_left, &ny_left); ++ ++ /* Join left node to current node. */ ++ draw_line (nx, ny, nx_left, ny_left); ++ } ++ else ++ { ++ /* Draw NULL left node. */ ++ /* ... */ ++ } ++ ++ /* Same for right subtree. */ ++ if (n->right) ++ { ++ double nx_right, ny_right; ++ ++ draw_tree (n->right, x + dx / 2, y, dx / 2, (1 - SCALE) * dy, ++ &nx_right, &ny_right); ++ ++ /* Join right node to current node. */ ++ draw_line (nx, ny, nx_right, ny_right); ++ } ++ else ++ { ++ /* Draw NULL right node. */ ++ /* ... */ ++ } ++ ++ /* Draw current node. */ ++ draw_node (nx, ny, n->hits); ++} ++ ++static void ++draw_line (double x1, double y1, double x2, double y2) ++{ ++ /* Draw a line between (x1,y1) and (x2,y2). */ ++ fprintf (outfp, "%g %g %g %g line\n", x1, y1, x2, y2); ++} ++ ++static void ++draw_node (double x, double y, unsigned hits) ++{ ++ /* Draw a node at (x,y), weighted by `hits'. */ ++ double rad; ++ ++ if (hits == 0) ++ return; /* Don't draw it if it's unused. */ ++ rad = max_radius * (double) hits / max_hits; ++ if (rad < 0.1) ++ return; /* Too small to draw. */ ++ fprintf (outfp, "%g %g %g node\n", x, y, rad); ++} ++ ++static void ++draw_rect (double x, double y, double width, double height) ++{ ++ fprintf (outfp, "%g %g %g %g rectstroke\n", x, y, width, height); ++} ++ ++static void ++get_max_hits (object * n) ++{ ++ /* Search the tree for the node with the maximum number of hits, and ++ * record this number. ++ */ ++ if (n == NULL) ++ return; ++ if (n->hits > max_hits) ++ max_hits = n->hits; ++ get_max_hits (n->left); ++ get_max_hits (n->right); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/st-locality.c gcc-4.0.2/gcc/bounds/treestats/st-locality.c +--- gcc-4.0.2.org/gcc/bounds/treestats/st-locality.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/st-locality.c 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,181 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * treestats/locality.c ++ * Summary: ++ * Study the locality of objects in the tree. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 28/5/95 Initial implementation. ++ *----------------------------------------------------------------------*/ ++ ++#include <stdio.h> ++#include <stdlib.h> ++ ++#include "misc.h" ++#include "readfile.h" ++ ++static void examine_locality (tree *, struct ext_tree *); ++ ++static int percentage[] = { 50, 70, 90, 95, 99, 0 }; ++ ++int ++main (int argc, char *argv[]) ++{ ++ int i; ++ ++ if (argc < 2) ++ { ++ fprintf (stderr, "st-locality dumpfile [dumpfile [...]]\n"); ++ exit (1); ++ } ++ ++ printf ("INDEX\tCOUNT"); ++ for (i = 0; percentage[i] != 0; ++i) ++ { ++ printf ("\tWS%d", percentage[i]); ++ printf ("\tMU%d", percentage[i]); ++ } ++ putchar ('\n'); ++ ++ for (i = 1; i < argc; ++i) ++ { ++ tree *t; ++ struct ext_tree *et; ++ ++ if (readfile (argv[i], &t, &et) != 0) ++ continue; ++ ++ printf ("%u\t%d", et->index, counttree (t)); ++ examine_locality (t, et); ++ ++ deltree (t); ++ } ++ ++ exit (0); ++} ++ ++struct loc ++{ ++ object *n; ++ int depth; ++}; ++ ++static int compare_loc (struct loc *, struct loc *); ++static struct loc *flatten (object *, struct loc *, int); ++static int mu_ws_size (struct loc *, int count, int pc, unsigned tot_hits); ++static double mu_avg_depth (struct loc *, int ws_size); ++ ++static void ++examine_locality (tree * t, struct ext_tree *et) ++{ ++ int count = counttree (t), i; ++ struct loc nodes[count]; ++ double mu; ++ int ws; ++ unsigned tot_hits = 0; ++ ++ /* Flatten the nodes into our array, recording the depth of each node ++ * too. ++ */ ++ (void) flatten (t->root, nodes, 0); ++ ++ /* Sort the nodes in the tree into descending order of # of hits. (Node[0] ++ * will be most frequently used node). ++ */ ++ qsort (nodes, count, sizeof (struct loc), (__compar_fn_t) compare_loc); ++ ++#if 0 ++ /* Print nodes here. */ ++ for (i = 0; i < count; ++i) ++ printf ("node %d, hits %d, depth %d\n", ++ i, nodes[i].n->hits, nodes[i].depth); ++#endif ++ ++ /* Count total number of hits received. ++ */ ++ for (i = 0; i < count; ++i) ++ tot_hits += nodes[i].n->hits; ++ ++ /* Calculate average depth of each percentage of objects of interest. ++ */ ++ for (i = 0; percentage[i] != 0; ++i) ++ { ++ ws = mu_ws_size (nodes, count, percentage[i], tot_hits); ++ mu = mu_avg_depth (nodes, ws); ++ printf ("\t%d\t%2.2g", ws, mu); ++ } ++ putchar ('\n'); ++} ++ ++static struct loc * ++flatten (object * n, struct loc *nodes, int depth) ++{ ++ if (n == NULL) ++ return nodes; ++ ++ nodes->n = n; ++ nodes->depth = depth; ++ ++ nodes++; ++ ++ nodes = flatten (n->left, nodes, depth + 1); ++ nodes = flatten (n->right, nodes, depth + 1); ++ ++ return nodes; ++} ++ ++static int ++compare_loc (struct loc *l1, struct loc *l2) ++{ ++ return l2->n->hits - l1->n->hits; ++} ++ ++static int ++mu_ws_size (struct loc *nodes, int count, int pc, unsigned tot_hits) ++{ ++ /* Work out the size of the working set that received pc% of the ++ * hits. ++ */ ++ int i; ++ unsigned pc_hits = pc * tot_hits / 100, sum_hits = 0; ++ ++ for (i = 0; i < count && sum_hits < pc_hits; ++i) ++ sum_hits += nodes[i].n->hits; ++ ++ return i; ++} ++ ++static double ++mu_avg_depth (struct loc *nodes, int ws_size) ++{ ++ /* Work out the average depth of the first ws_size nodes. ++ */ ++ int i; ++ double sum = 0; ++ ++ if (ws_size == 0) ++ return 0; ++ ++ for (i = 0; i < ws_size; ++i) ++ sum += nodes[i].depth; ++ ++ return sum / ws_size; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/treestats/st-split-analysis gcc-4.0.2/gcc/bounds/treestats/st-split-analysis +--- gcc-4.0.2.org/gcc/bounds/treestats/st-split-analysis 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/treestats/st-split-analysis 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,18 @@ ++#!/bin/sh - ++ ++# Split up the output of 'st-analyze' into separate files. ++ ++if [ x$1 = "x" ]; then ++ echo "$0 inputfile" ++ exit ++fi ++ ++files=`head -1 $1` ++col=1 ++ ++for f in $files ++do ++ echo $col: $f ++ awk \{print\ \$$col\} < $1 > $f ++ col=$[col+1] ++done +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/unsetall.sh gcc-4.0.2/gcc/bounds/unsetall.sh +--- gcc-4.0.2.org/gcc/bounds/unsetall.sh 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/unsetall.sh 2005-09-29 17:50:02.000000000 +0200 +@@ -0,0 +1,141 @@ ++: ++# unsetall.sh -- unset all extra environment variables ++# ++# 02Jun00 wb initial version ++# 10Sep01 wb handle shell functions ++# 23Apr02 wb replace PS1 $ with - ++ ++# set -x ++ ++# echo -n "Continue > " ; read line ; unset line ++ ++unset unset_oldifs unset_newpath unset_part unset_opts x ++unset did_usr_local_bin did_usr_local_sbin did_usr_bin_x11 did_u_local_bin ++unset did_home_bin ++ ++unset_opts="$@" ++ ++# echo Initial environment: `printenv | wc -lc` ++ ++# Change the prompt ++ ++PS1="`echo \"$PS1\" | sed -e 's/@/-/' -e 's/\\\\\\$/-/'`" ++ ++# Clear enough entries so the eval works ++ ++unset CDPATH DEF_INC DEF_LIB EDITOR OLDPATH SA_EDITOR SPICE_LIBS VISUAL X_LIB ++ ++# Clear out most of the environment as reported by printenv ++ ++unset printenv ++printenv=printenv ++if [ -x /usr/bin/env ] ; then printenv=/usr/bin/env ++elif [ -x /bin/printenv ] ; then printenv=/bin/printenv ++elif [ -x /usr/ucb/printenv ] ; then printenv=/usr/ucb/printenv ++fi ++ ++# echo "printenv is $printenv" ++ ++# export -p > junk1.tmp ++ ++eval ` ++ $printenv | \ ++ grep '^[A-Za-z0-9_]*=' | \ ++ egrep -v \ ++'^LOGNAME=|^TERM=|^PATH=|^HOME=|^DISPLAY=|^SHELL=|^HZ=|^TZ=|^_=|^PS1=|^LD_|^INCDIR=|^LIBPATH=|^TMP|^LINES=|^COLUMNS=' | \ ++ cut -f 1 -d= | \ ++ sed -e '1,$s/^/unset /' ; \ ++ ` ++ ++# export -p > junk4.tmp ++ ++case "$LINES" in ++24|25) unset LINES ;; ++esac ++ ++case "$COLUMNS" in ++80) unset COLUMNS ;; ++esac ++ ++# Clean the PATH ++ ++unset_oldifs="$IFS" ++IFS=":$IFS" ++did_usr_local_bin=no ++did_usr_local_sbin=no ++did_usr_bin_x11=no ++did_u_local_bin=no ++did_home_bin=no ++unset_newpath= ++ ++for unset_part in $PATH ++do ++ if [ -z "$DISPLAY" ] ++ then ++ case "X$unset_part" in ++ */X11*|*/openwin*) unset_part= ;; ++ esac ++ fi ++ case "X$unset_part" in ++ *layout*|*/pl*|*scs*|*dbin|*/comp*|*/cpag*) ;; ++ *) ++ if [ ! -d "$unset_part" ] ++ then ++ x=x ++ elif [ "$unset_part" = /usr/local/bin ] ++ then ++ if [ "$did_usr_local_bin" = no ] ++ then ++ unset_newpath="$unset_newpath:$unset_part" ++ did_usr_local_bin=yes ++ fi ++ elif [ "$unset_part" = /usr/local/sbin ] ++ then ++ if [ "$did_usr_local_sbin" = no ] ++ then ++ unset_newpath="$unset_newpath:$unset_part" ++ did_usr_local_sbin=yes ++ fi ++ elif [ "$unset_part" = /usr/bin/X11 ] ++ then ++ if [ "$did_usr_bin_x11" = no ] ++ then ++ unset_newpath="$unset_newpath:$unset_part" ++ did_usr_bin_x11=yes ++ fi ++ elif [ "$unset_part" = /u/local/bin ] ++ then ++ if [ "$did_u_local_bin" = no ] ++ then ++ unset_newpath="$unset_newpath:$unset_part" ++ did_u_local_bin=yes ++ fi ++ elif [ "$unset_part" = "$HOME/bin" ] ++ then ++ if [ "$did_home_bin" = no ] ++ then ++ unset_newpath="$unset_newpath:$unset_part" ++ did_home_bin=yes ++ fi ++ elif [ "$unset_part" = "" -o "$unset_part" = "." ] ++ then ++ x=x ++ else ++ unset_newpath="$unset_newpath:$unset_part" ++ fi ++ ;; ++ esac ++done ++PATH="$unset_newpath" ++export PATH ++IFS="$unset_oldifs" ++set -- $unset_opts ++ ++unset unset_oldifs unset_newpath unset_part unset_opts x ++unset did_usr_local_bin did_usr_local_sbin did_usr_bin_x11 did_u_local_bin ++unset did_home_bin ++ ++# echo "$0: PATH $PATH" ++echo "$0: Remaining environment:" `$printenv | wc -lc` ++ ++unset printenv +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/bounds/VERSION gcc-4.0.2/gcc/bounds/VERSION +--- gcc-4.0.2.org/gcc/bounds/VERSION 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/bounds/VERSION 2005-09-29 17:51:34.000000000 +0200 +@@ -0,0 +1,6 @@ ++/* GCC with bounds checking, by Richard W.M. Jones. ++ * Maybe this file should be called `patchlevel.h'? ++ */ ++ ++#define VERSION_GCC "gcc-4.0.2" ++#define VERSION_LIBRARY "3.2" +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/builtins.c gcc-4.0.2/gcc/builtins.c +--- gcc-4.0.2.org/gcc/builtins.c 2005-08-28 13:08:55.000000000 +0200 ++++ gcc-4.0.2/gcc/builtins.c 2005-09-29 17:50:03.000000000 +0200 +@@ -47,6 +47,7 @@ Software Foundation, 59 Temple Place - S + #include "langhooks.h" + #include "basic-block.h" + #include "tree-mudflap.h" ++#include "c-bounds.h" + + #define CALLED_AS_BUILT_IN(NODE) \ + (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10)) +@@ -2506,7 +2507,8 @@ static rtx + expand_builtin_strlen (tree arglist, rtx target, + enum machine_mode target_mode) + { +- if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -2613,7 +2615,8 @@ expand_builtin_strlen (tree arglist, rtx + static rtx + expand_builtin_strstr (tree arglist, tree type, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strstr (arglist, type); + if (result) +@@ -2629,7 +2632,8 @@ expand_builtin_strstr (tree arglist, tre + static rtx + expand_builtin_strchr (tree arglist, tree type, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strchr (arglist, type); + if (result) +@@ -2647,7 +2651,8 @@ expand_builtin_strchr (tree arglist, tre + static rtx + expand_builtin_strrchr (tree arglist, tree type, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strrchr (arglist, type); + if (result) +@@ -2663,7 +2668,8 @@ expand_builtin_strrchr (tree arglist, tr + static rtx + expand_builtin_strpbrk (tree arglist, tree type, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strpbrk (arglist, type); + if (result) +@@ -2697,8 +2703,10 @@ static rtx + expand_builtin_memcpy (tree exp, rtx target, enum machine_mode mode) + { + tree arglist = TREE_OPERAND (exp, 1); +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + else + { +@@ -2775,8 +2783,10 @@ static rtx + expand_builtin_mempcpy (tree arglist, tree type, rtx target, enum machine_mode mode, + int endp) + { +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + /* If return value is ignored, transform mempcpy into memcpy. */ + else if (target == const0_rtx) +@@ -2861,8 +2871,10 @@ static rtx + expand_builtin_memmove (tree arglist, tree type, rtx target, + enum machine_mode mode, tree orig_exp) + { +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + else + { +@@ -2925,8 +2937,10 @@ expand_builtin_bcopy (tree exp) + tree type = TREE_TYPE (exp); + tree src, dest, size, newarglist; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return NULL_RTX; + + src = TREE_VALUE (arglist); +@@ -3021,7 +3035,8 @@ static rtx + expand_builtin_strcpy (tree exp, rtx target, enum machine_mode mode) + { + tree arglist = TREE_OPERAND (exp, 1); +- if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strcpy (exp, 0); + if (result) +@@ -3043,6 +3058,10 @@ static rtx + expand_builtin_stpcpy (tree exp, rtx target, enum machine_mode mode) + { + tree arglist = TREE_OPERAND (exp, 1); ++ ++ if (bounds_checking_enabled) ++ return 0; ++ + /* If return value is ignored, transform stpcpy into strcpy. */ + if (target == const0_rtx) + { +@@ -3141,8 +3160,9 @@ static rtx + expand_builtin_strncpy (tree exp, rtx target, enum machine_mode mode) + { + tree arglist = TREE_OPERAND (exp, 1); +- if (validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + { + tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1); + tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); +@@ -3237,8 +3257,9 @@ static rtx + expand_builtin_memset (tree arglist, rtx target, enum machine_mode mode, + tree orig_exp) + { +- if (!validate_arglist (arglist, +- POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + else + { +@@ -3344,7 +3365,8 @@ expand_builtin_bzero (tree exp) + tree arglist = TREE_OPERAND (exp, 1); + tree dest, size, newarglist; + +- if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + return NULL_RTX; + + dest = TREE_VALUE (arglist); +@@ -3371,8 +3393,9 @@ static rtx + expand_builtin_memcmp (tree exp ATTRIBUTE_UNUSED, tree arglist, rtx target, + enum machine_mode mode) + { +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + else + { +@@ -3481,7 +3504,8 @@ expand_builtin_strcmp (tree exp, rtx tar + { + tree arglist = TREE_OPERAND (exp, 1); + +- if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -3600,8 +3624,9 @@ expand_builtin_strncmp (tree exp, rtx ta + { + tree arglist = TREE_OPERAND (exp, 1); + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + else + { +@@ -3728,7 +3753,8 @@ expand_builtin_strncmp (tree exp, rtx ta + static rtx + expand_builtin_strcat (tree arglist, tree type, rtx target, enum machine_mode mode) + { +- if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -3794,8 +3820,9 @@ expand_builtin_strcat (tree arglist, tre + static rtx + expand_builtin_strncat (tree arglist, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + { + tree result = fold_builtin_strncat (arglist); + if (result) +@@ -3811,7 +3838,8 @@ expand_builtin_strncat (tree arglist, rt + static rtx + expand_builtin_strspn (tree arglist, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strspn (arglist); + if (result) +@@ -3827,7 +3855,8 @@ expand_builtin_strspn (tree arglist, rtx + static rtx + expand_builtin_strcspn (tree arglist, rtx target, enum machine_mode mode) + { +- if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + { + tree result = fold_builtin_strcspn (arglist); + if (result) +@@ -4347,7 +4376,7 @@ expand_builtin_alloca (tree arglist, rtx + /* In -fmudflap-instrumented code, alloca() and __builtin_alloca() + should always expand to function calls. These can be intercepted + in libmudflap. */ +- if (flag_mudflap) ++ if (bounds_checking_enabled || flag_mudflap) + return 0; + + if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE)) +@@ -5909,8 +5938,8 @@ builtin_mathfn_code (tree t) + static tree + fold_builtin_constant_p (tree arglist) + { +- if (arglist == 0) +- return 0; ++ if (bounds_checking_enabled || arglist == 0) ++ return integer_zero_node; + + arglist = TREE_VALUE (arglist); + +@@ -6005,7 +6034,8 @@ fold_builtin_classify_type (tree arglist + static tree + fold_builtin_strlen (tree arglist) + { +- if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) + return NULL_TREE; + else + { +@@ -6052,7 +6082,8 @@ fold_builtin_nan (tree arglist, tree typ + REAL_VALUE_TYPE real; + const char *str; + +- if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) + return 0; + str = c_getstr (TREE_VALUE (arglist)); + if (!str) +@@ -7195,8 +7226,9 @@ fold_builtin_memcpy (tree exp) + tree arglist = TREE_OPERAND (exp, 1); + tree dest, src, len; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + + dest = TREE_VALUE (arglist); +@@ -7220,8 +7252,9 @@ fold_builtin_memcpy (tree exp) + static tree + fold_builtin_mempcpy (tree arglist, tree type, int endp) + { +- if (validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled == 0 ++ && validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + { + tree dest = TREE_VALUE (arglist); + tree src = TREE_VALUE (TREE_CHAIN (arglist)); +@@ -7257,8 +7290,9 @@ fold_builtin_memmove (tree arglist, tree + { + tree dest, src, len; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + + dest = TREE_VALUE (arglist); +@@ -7286,8 +7320,8 @@ fold_builtin_strcpy (tree exp, tree len) + tree arglist = TREE_OPERAND (exp, 1); + tree dest, src, fn; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + + dest = TREE_VALUE (arglist); +@@ -7329,8 +7363,9 @@ fold_builtin_strncpy (tree exp, tree sle + tree arglist = TREE_OPERAND (exp, 1); + tree dest, src, len, fn; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + + dest = TREE_VALUE (arglist); +@@ -7378,8 +7413,9 @@ fold_builtin_memcmp (tree arglist) + tree arg1, arg2, len; + const char *p1, *p2; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + + arg1 = TREE_VALUE (arglist); +@@ -7443,7 +7479,8 @@ fold_builtin_strcmp (tree arglist) + tree arg1, arg2; + const char *p1, *p2; + +- if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + + arg1 = TREE_VALUE (arglist); +@@ -7502,8 +7539,9 @@ fold_builtin_strncmp (tree arglist) + tree arg1, arg2, len; + const char *p1, *p2; + +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, ++ VOID_TYPE)) + return 0; + + arg1 = TREE_VALUE (arglist); +@@ -8365,6 +8403,9 @@ build_function_call_expr (tree fn, tree + { + tree call_expr; + ++ if (bounds_checking_enabled) ++ bounds_convert_funcname (&fn, &arglist); ++ + call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); + call_expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), + call_expr, arglist, NULL_TREE); +@@ -8550,7 +8591,8 @@ fold_builtin_strstr (tree arglist, tree + static tree + fold_builtin_strchr (tree arglist, tree type) + { +- if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -8772,8 +8814,9 @@ fold_builtin_strcat (tree arglist) + static tree + fold_builtin_strncat (tree arglist) + { +- if (!validate_arglist (arglist, +- POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, ++ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -8827,7 +8870,8 @@ fold_builtin_strncat (tree arglist) + static tree + fold_builtin_strspn (tree arglist) + { +- if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + else + { +@@ -8871,7 +8915,8 @@ fold_builtin_strspn (tree arglist) + static tree + fold_builtin_strcspn (tree arglist) + { +- if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) ++ if (bounds_checking_enabled ++ || !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) + return 0; + else + { +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-bounds.c gcc-4.0.2/gcc/c-bounds.c +--- gcc-4.0.2.org/gcc/c-bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/c-bounds.c 2005-09-29 21:50:50.000000000 +0200 +@@ -0,0 +1,3691 @@ ++/* Miscellaneous functions for bounds checking. ++ Written by Richard W.M. Jones <rjones@orchestream.com>. ++ Copyright (C) 1995 Richard W.M. Jones. ++ ++This file is part of the bounds checking patches for GNU CC. The main ++body of code used at run time can be found in the `bounds/' subdirectory. ++ ++GNU CC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GNU CC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GNU CC; see the file COPYING. If not, write to ++the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#include "config.h" ++#include "system.h" ++#include <stdio.h> ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "tree-flow.h" ++#include "tree-iterator.h" ++#include "flags.h" ++#include "expr.h" ++#include "c-tree.h" ++#include "c-bounds.h" ++#include "output.h" ++#include "toplev.h" ++#include "except.h" ++#include "function.h" ++#include "ggc.h" ++#include "c-tree.h" ++#include "target.h" ++#include "langhooks.h" ++#include "cpplib.h" ++#include "c-pragma.h" ++ ++/* List of static pointers initialised with pointer arithemetic expressions. ++ This list is used to generate extra instructions to ensure this ++ initialisation is bounds checked at runtime. */ ++ ++static tree build_current_lineno (void); ++static tree build_current_filename (void); ++static tree build_decl_lineno (tree); ++static tree build_decl_filename (tree); ++static tree bounds_build_function_call (const char *, tree, tree *, int); ++static tree bounds_build_string (const char *); ++static tree bounds_pointer_from_array (tree); ++static tree bounds_pointer_from_array_type (tree); ++static tree bounds_pointer_from_array_ref (tree); ++static tree bounds_lookup_field (tree, tree); ++static tree declare_function_number_var (void); ++static void declare_object_var (tree); ++static tree generate_assignment (tree, tree, tree); ++static tree find_object (tree); ++static tree maybe_find_object (tree); ++static int check_fname_decl (tree); ++static void add_object (tree, enum tree_code); ++static int locate_var_in_tree (tree, const char *); ++static int is_deletable (int, tree); ++static int bounds_remove_calls (tree *, int, int *); ++static unsigned int bounds_hash (register const char *, ++ register unsigned int); ++static unsigned int bounds_func_hash (register const char *, ++ register unsigned int); ++static tree check_static_pointer_initialization (tree); ++ ++int bounds_in_addr_expr = 0; ++ ++static GTY (()) varray_type static_ptr_init_list; ++static GTY (()) varray_type deferred_global_decls; ++static GTY (()) tree bounds_memcpy; ++static GTY (()) tree bounds_mempcpy; ++static GTY (()) tree bounds_memset; ++static GTY (()) tree bounds_find_object; ++static GTY (()) tree bounds_maybe_find_object; ++static GTY (()) tree bounds_check_ptr_plus_int; ++static GTY (()) tree bounds_check_ptr_minus_int; ++static GTY (()) tree bounds_check_ptr_plus_int_obj; ++static GTY (()) tree bounds_check_ptr_minus_int_obj; ++static GTY (()) tree bounds_check_array_reference; ++static GTY (()) tree bounds_check_array_reference_obj; ++static GTY (()) tree bounds_check_component_reference; ++static GTY (()) tree bounds_check_component_reference_obj; ++static GTY (()) tree bounds_check_ptr_diff; ++static GTY (()) tree bounds_check_ptr_diff_obj; ++static GTY (()) tree bounds_check_reference; ++static GTY (()) tree bounds_check_reference_obj; ++static GTY (()) tree bounds_check_ptr_lt_ptr; ++static GTY (()) tree bounds_check_ptr_lt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_le_ptr; ++static GTY (()) tree bounds_check_ptr_le_ptr_obj; ++static GTY (()) tree bounds_check_ptr_gt_ptr; ++static GTY (()) tree bounds_check_ptr_gt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_ge_ptr; ++static GTY (()) tree bounds_check_ptr_ge_ptr_obj; ++static GTY (()) tree bounds_check_ptr_eq_ptr; ++static GTY (()) tree bounds_check_ptr_ne_ptr; ++static GTY (()) tree bounds_check_ptr_postinc; ++static GTY (()) tree bounds_check_ptr_preinc; ++static GTY (()) tree bounds_check_ptr_postdec; ++static GTY (()) tree bounds_check_ptr_predec; ++static GTY (()) tree bounds_check_ptr_postinc_obj; ++static GTY (()) tree bounds_check_ptr_preinc_obj; ++static GTY (()) tree bounds_check_ptr_postdec_obj; ++static GTY (()) tree bounds_check_ptr_predec_obj; ++static GTY (()) tree bounds_check_ptr_postinc_ref; ++static GTY (()) tree bounds_check_ptr_preinc_ref; ++static GTY (()) tree bounds_check_ptr_postdec_ref; ++static GTY (()) tree bounds_check_ptr_predec_ref; ++static GTY (()) tree bounds_check_ptr_postinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_preinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_postdec_ref_obj; ++static GTY (()) tree bounds_check_ptr_predec_ref_obj; ++static GTY (()) tree bounds_check_ptr_true; ++static GTY (()) tree bounds_check_ptr_false; ++static GTY (()) tree bounds_note_constructed_object; ++static GTY (()) tree bounds_note_constructed_private_table; ++static GTY (()) tree bounds_push_function; ++static GTY (()) tree bounds_pop_function; ++static GTY (()) tree bounds_add_param_object; ++static GTY (()) tree bounds_add_stack_object; ++static GTY (()) tree bounds_delete_stack_object; ++static GTY (()) tree bounds_initialize_library; ++static GTY (()) tree bounds_check_free; ++static GTY (()) tree bounds_check_malloc; ++static GTY (()) tree bounds_check_realloc; ++static GTY (()) tree bounds_check_memalign; ++static GTY (()) tree bounds_check_calloc; ++static GTY (()) tree bounds_check_valloc; ++static GTY (()) tree bounds_check_alloca; ++static GTY (()) tree bounds_check___alloca; ++static GTY (()) tree bounds_check___builtin_alloca; ++static GTY (()) tree bounds_check_mmap; ++static GTY (()) tree bounds_check_munmap; ++static GTY (()) tree bounds_check_memcpy; ++static GTY (()) tree bounds_check_mempcpy; ++static GTY (()) tree bounds_check_memmove; ++static GTY (()) tree bounds_check_bcopy; ++static GTY (()) tree bounds_check_memset; ++static GTY (()) tree bounds_check_bzero; ++static GTY (()) tree bounds_check_memcmp; ++static GTY (()) tree bounds_check_bcmp; ++static GTY (()) tree bounds_check_strcpy; ++static GTY (()) tree bounds_check_strncpy; ++static GTY (()) tree bounds_check_strlen; ++static GTY (()) tree bounds_check_strcmp; ++static GTY (()) tree bounds_check_strncmp; ++static GTY (()) tree bounds_check_strcat; ++static GTY (()) tree bounds_check_strncat; ++static GTY (()) tree bounds_check_strpbrk; ++static GTY (()) tree bounds_check_strrchr; ++static GTY (()) tree bounds_check_rindex; ++static GTY (()) tree bounds_check_strspn; ++static GTY (()) tree bounds_check_strcspn; ++static GTY (()) tree bounds_check_strstr; ++static GTY (()) tree bounds_check_strtok; ++static GTY (()) tree bounds_check_strtok_r; ++static GTY (()) tree bounds_check_strdup; ++static GTY (()) tree bounds_check_strchr; ++static GTY (()) tree bounds_check_index; ++static GTY (()) tree bounds_check_strcoll; ++static GTY (()) tree bounds_check_strxfrm; ++static GTY (()) tree bounds_check_strcasecmp; ++static GTY (()) tree bounds_check_strncasecmp; ++static GTY (()) tree bounds_check_memchr; ++static GTY (()) tree bounds_check_memccpy; ++static GTY (()) tree bounds_private_statics; ++ ++#include "gt-c-bounds.h" ++ ++void ++bounds_init (void) ++{ ++ /* Create a prototype for the functions __bounds_check... */ ++ tree bounds_end = tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, void_list_node)); ++ tree bounds_ptr = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, bounds_end))); ++ tree bounds_arr = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, sizetype, bounds_end)))); ++ tree bounds_ref = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, bounds_end)); ++ tree bounds_cc = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, bounds_end)))); ++ tree bounds_cco = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, bounds_end)); ++ tree bounds_eq = tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, bounds_end)); ++ tree bounds_inc = tree_cons (NULL_TREE, build_pointer_type (ptr_type_node), ++ tree_cons (NULL_TREE, integer_type_node, bounds_end)); ++ tree bounds_incr = tree_cons (NULL_TREE, build_pointer_type (ptr_type_node), ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, bounds_end))); ++ ++ bounds_memcpy = ++ builtin_function ("__bounds_memcpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_mempcpy = ++ builtin_function ("__bounds_mempcpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ ++ builtin_function ("mempcpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_memset = ++ builtin_function ("__bounds_memset", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_find_object = ++ builtin_function ("__bounds_find_object", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ++ ptr_type_node, ++ void_list_node)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_maybe_find_object = ++ builtin_function ("__bounds_maybe_find_object", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ++ ptr_type_node, ++ void_list_node))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_plus_int = ++ builtin_function ("__bounds_check_ptr_plus_int", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_ptr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_minus_int = ++ builtin_function ("__bounds_check_ptr_minus_int", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_ptr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_plus_int_obj = ++ builtin_function ("__bounds_check_ptr_plus_int_obj", ++ build_function_type (ptr_type_node, bounds_ptr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_minus_int_obj = ++ builtin_function ("__bounds_check_ptr_minus_int_obj", ++ build_function_type (ptr_type_node, bounds_ptr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_array_reference = ++ builtin_function ("__bounds_check_array_reference", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_arr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_array_reference_obj = ++ builtin_function ("__bounds_check_array_reference_obj", ++ build_function_type (integer_type_node, bounds_arr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_component_reference = ++ builtin_function ("__bounds_check_component_reference", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_ptr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_component_reference_obj = ++ builtin_function ("__bounds_check_component_reference_obj", ++ build_function_type (ptr_type_node, bounds_ptr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_diff = ++ builtin_function ("__bounds_check_ptr_diff", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ bounds_end)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_diff_obj = ++ builtin_function ("__bounds_check_ptr_diff_obj", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ bounds_end)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_reference = ++ builtin_function ("__bounds_check_reference", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_ref)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_reference_obj = ++ builtin_function ("__bounds_check_reference_obj", ++ build_function_type (ptr_type_node, bounds_ref), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_lt_ptr = ++ builtin_function ("__bounds_check_ptr_lt_ptr", ++ build_function_type (integer_type_node, bounds_cc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_lt_ptr_obj = ++ builtin_function ("__bounds_check_ptr_lt_ptr_obj", ++ build_function_type (integer_type_node, bounds_cco), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_le_ptr = ++ builtin_function ("__bounds_check_ptr_le_ptr", ++ build_function_type (integer_type_node, bounds_cc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_le_ptr_obj = ++ builtin_function ("__bounds_check_ptr_le_ptr_obj", ++ build_function_type (integer_type_node, bounds_cco), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_gt_ptr = ++ builtin_function ("__bounds_check_ptr_gt_ptr", ++ build_function_type (integer_type_node, bounds_cc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_gt_ptr_obj = ++ builtin_function ("__bounds_check_ptr_gt_ptr_obj", ++ build_function_type (integer_type_node, bounds_cco), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_ge_ptr = ++ builtin_function ("__bounds_check_ptr_ge_ptr", ++ build_function_type (integer_type_node, bounds_cc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_ge_ptr_obj = ++ builtin_function ("__bounds_check_ptr_ge_ptr_obj", ++ build_function_type (integer_type_node, bounds_cco), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_eq_ptr = ++ builtin_function ("__bounds_check_ptr_eq_ptr", ++ build_function_type (integer_type_node, bounds_eq), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_ne_ptr = ++ builtin_function ("__bounds_check_ptr_ne_ptr", ++ build_function_type (integer_type_node, bounds_eq), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postinc = ++ builtin_function ("__bounds_check_ptr_postinc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_inc)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_preinc = ++ builtin_function ("__bounds_check_ptr_preinc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_inc)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postdec = ++ builtin_function ("__bounds_check_ptr_postdec", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_inc)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_predec = ++ builtin_function ("__bounds_check_ptr_predec", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_inc)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postinc_obj = ++ builtin_function ("__bounds_check_ptr_postinc_obj", ++ build_function_type (ptr_type_node, bounds_inc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_preinc_obj = ++ builtin_function ("__bounds_check_ptr_preinc_obj", ++ build_function_type (ptr_type_node, bounds_inc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postdec_obj = ++ builtin_function ("__bounds_check_ptr_postdec_obj", ++ build_function_type (ptr_type_node, bounds_inc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_predec_obj = ++ builtin_function ("__bounds_check_ptr_predec_obj", ++ build_function_type (ptr_type_node, bounds_inc), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postinc_ref = ++ builtin_function ("__bounds_check_ptr_postinc_ref", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_incr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_preinc_ref = ++ builtin_function ("__bounds_check_ptr_preinc_ref", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_incr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postdec_ref = ++ builtin_function ("__bounds_check_ptr_postdec_ref", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_incr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_predec_ref = ++ builtin_function ("__bounds_check_ptr_predec_ref", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_incr)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postinc_ref_obj = ++ builtin_function ("__bounds_check_ptr_postinc_ref_obj", ++ build_function_type (ptr_type_node, bounds_incr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_preinc_ref_obj = ++ builtin_function ("__bounds_check_ptr_preinc_ref_obj", ++ build_function_type (ptr_type_node, bounds_incr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_postdec_ref_obj = ++ builtin_function ("__bounds_check_ptr_postdec_ref_obj", ++ build_function_type (ptr_type_node, bounds_incr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_predec_ref_obj = ++ builtin_function ("__bounds_check_ptr_predec_ref_obj", ++ build_function_type (ptr_type_node, bounds_incr), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_true = ++ builtin_function ("__bounds_check_ptr_true", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_end)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_ptr_false = ++ builtin_function ("__bounds_check_ptr_false", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ bounds_end)), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_note_constructed_object = ++ builtin_function ("__bounds_note_constructed_object", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_note_constructed_private_table = ++ builtin_function ("__bounds_note_constructed_private_table", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_push_function = ++ builtin_function ("__bounds_push_function", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_pop_function = ++ builtin_function ("__bounds_pop_function", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, void_list_node))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_add_param_object = ++ builtin_function ("__bounds_add_param_object", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_add_stack_object = ++ builtin_function ("__bounds_add_stack_object", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_delete_stack_object = ++ builtin_function ("__bounds_delete_stack_object", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_initialize_library = ++ builtin_function ("__bounds_initialize_library", ++ build_function_type (ptr_type_node, void_list_node), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_free = ++ builtin_function ("__bounds_check_free", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_malloc = ++ builtin_function ("__bounds_check_malloc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_realloc = ++ builtin_function ("__bounds_check_realloc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memalign = ++ builtin_function ("__bounds_check_memalign", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_calloc = ++ builtin_function ("__bounds_check_calloc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_valloc = ++ builtin_function ("__bounds_check_valloc", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_alloca = ++ builtin_function ("__bounds_check_alloca", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check___alloca = ++ builtin_function ("__bounds_check___alloca", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check___builtin_alloca = ++ builtin_function ("__bounds_check___builtin_alloca", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_mmap = ++ builtin_function ("__bounds_check_mmap", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ /* Should be off_t */ ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_munmap = ++ builtin_function ("__bounds_check_munmap", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memcpy = ++ builtin_function ("__bounds_check_memcpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_mempcpy = ++ builtin_function ("__bounds_check_mempcpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memmove = ++ builtin_function ("__bounds_check_memmove", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_bcopy = ++ builtin_function ("__bounds_check_bcopy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memset = ++ builtin_function ("__bounds_check_memset", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_bzero = ++ builtin_function ("__bounds_check_bzero", ++ build_function_type (void_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memcmp = ++ builtin_function ("__bounds_check_memcmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_bcmp = ++ builtin_function ("__bounds_check_bcmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcpy = ++ builtin_function ("__bounds_check_strcpy", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strncpy = ++ builtin_function ("__bounds_check_strncpy", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strlen = ++ builtin_function ("__bounds_check_strlen", ++ build_function_type (sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcmp = ++ builtin_function ("__bounds_check_strcmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strncmp = ++ builtin_function ("__bounds_check_strncmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcat = ++ builtin_function ("__bounds_check_strcat", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strncat = ++ builtin_function ("__bounds_check_strncat", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strpbrk = ++ builtin_function ("__bounds_check_strpbrk", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strrchr = ++ builtin_function ("__bounds_check_strrchr", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_rindex = ++ builtin_function ("__bounds_check_rindex", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strspn = ++ builtin_function ("__bounds_check_strspn", ++ build_function_type (sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcspn = ++ builtin_function ("__bounds_check_strcspn", ++ build_function_type (sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strstr = ++ builtin_function ("__bounds_check_strstr", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strtok = ++ builtin_function ("__bounds_check_strtok", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strtok_r = ++ builtin_function ("__bounds_check_strtok_r", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, ++ build_pointer_type (string_type_node), ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strdup = ++ builtin_function ("__bounds_check_strdup", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node)))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strchr = ++ builtin_function ("__bounds_check_strchr", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_index = ++ builtin_function ("__bounds_check_index", ++ build_function_type (string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcoll = ++ builtin_function ("__bounds_check_strcoll", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strxfrm = ++ builtin_function ("__bounds_check_strxfrm", ++ build_function_type (sizetype, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strcasecmp = ++ builtin_function ("__bounds_check_strcasecmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ void_list_node))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_strncasecmp = ++ builtin_function ("__bounds_check_strncasecmp", ++ build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memchr = ++ builtin_function ("__bounds_check_memchr", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node)))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ bounds_check_memccpy = ++ builtin_function ("__bounds_check_memccpy", ++ build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, const_string_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, const_ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, sizetype, ++ void_list_node))))))), ++ 0, NOT_BUILT_IN, NULL, NULL); ++ ++ bounds_private_statics = ++ build_decl (VAR_DECL, get_identifier ("__bounds_private_statics"), ++ build_array_type (char_type_node, ++ build_index_type (integer_zero_node))); ++ TREE_STATIC (bounds_private_statics) = 1; ++ TREE_READONLY (bounds_private_statics) = 1; ++ TREE_ASM_WRITTEN (bounds_private_statics) = 1; /* fake. */ ++ DECL_IN_SYSTEM_HEADER (bounds_private_statics) = 1; ++ DECL_IGNORED_P (bounds_private_statics) = 1; ++ DECL_INITIAL (bounds_private_statics) = NULL_TREE; ++ finish_decl (pushdecl (bounds_private_statics), NULL_TREE, NULL_TREE); ++ ++} ++ ++void ++bounds_register_decl (tree decl) ++{ ++ if (!deferred_global_decls) ++ VARRAY_TREE_INIT (deferred_global_decls, 10, "deferred global list"); ++ ++ VARRAY_PUSH_TREE (deferred_global_decls, decl); ++} ++ ++/* Build a file-scope function that gets called before main (). This function ++ calls the bounds checking library for all global variables in this file. ++ The function will look like this: ++ __GLOBAL$I$main () ++ { ++ __bounds_initialize_library (); ++ __bounds_note_constructed_object (&p, 4, 4, ...); ++ ... ++ } ++ */ ++void ++bounds_build_static_constructors (void) ++{ ++ tree decl, function_call, params[3]; ++ int i, len = 0; ++ tree *vec = NULL; ++ tree ctor_statements = NULL_TREE; ++ ++ bounds_checking_enabled = 0; ++ ++ /* Get list of top-level named static declarations. The two other type of ++ static data, namely static variables in functions and unnamed static ++ data, are found and dealt with in `varasm.c'. */ ++ if (deferred_global_decls) ++ { ++ len = VARRAY_ACTIVE_SIZE (deferred_global_decls); ++ vec = (tree *) xmalloc (sizeof (tree) * len); ++ for (i = 0; i < len; i++) ++ vec[i] = VARRAY_TREE (deferred_global_decls, i); ++ ++ bounds_external_declaration (vec, len); ++ } ++ ++ /* Build the table of private static data. This code is in `varasm.c'. This ++ table is declared: ++ static unsigned *__bounds_private_statics; ++ */ ++ bounds_assemble_private_statics_table (); ++ ++ /* Build a call to initialize the library. This initialization function may ++ be called multiple times as a result. This doesn't matter. */ ++ function_call = ++ bounds_build_function_call ("__bounds_initialize_library", ++ bounds_initialize_library, params, 0); ++ append_to_statement_list (function_call, &ctor_statements); ++ ++ /* Build a call to '__bounds_note_constructed_private_table'. */ ++ params[0] = build_c_cast (ptr_type_node, ++ default_conversion (bounds_private_statics)); ++ params[1] = build_current_filename (); ++ params[2] = build_current_lineno (); ++ function_call = ++ bounds_build_function_call ("__bounds_note_constructed_private_table", ++ bounds_note_constructed_private_table, ++ params, 3); ++ append_to_statement_list (function_call, &ctor_statements); ++ ++ /* For each top-level declaration, build a constructor call if that is ++ what is required. */ ++ for (i = 0; i < len; ++i) ++ { ++ decl = vec[i]; ++ if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl) ++ /* Don't generate calls for __FUNCTION__ and __PRETTY_FUNCTION__. */ ++ && !DECL_IN_SYSTEM_HEADER (decl) ++ && !check_fname_decl (decl)) ++ { ++ tree obj, type, ptr, size_exp, params[6], function_call, decl_name, ++ alignment; ++ ++ /* Obtain a pointer to the object, its size and its alignment. For ++ arrays, the alignment is the size of each element, and the size ++ is the size of the whole array. For structs, unions, the alignment ++ is always 1. Other data types in C are not aggregates, so the ++ alignment is the same as the size. */ ++ type = TREE_TYPE (decl); ++ /* Just ignore static variables if the size hasn't been ++ decided yet. Declarations like `char buff[];' at the top level ++ cause this to happen. */ ++ if (TREE_CODE (type) != ERROR_MARK && DECL_SIZE (decl) != 0) ++ size_exp = size_binop (CEIL_DIV_EXPR, ++ DECL_SIZE (decl), bitsize_unit_node); ++ else ++ { ++ warning ("variable with no size will not be bounds checked"); ++ continue; ++ } ++ size_exp = build_c_cast (integer_type_node, size_exp); ++ switch (TREE_CODE (type)) ++ { ++ case ARRAY_TYPE: ++ { ++ enum tree_code code; ++ ptr = bounds_pointer_from_array (decl); ++ code = TREE_CODE (TREE_TYPE (TREE_TYPE (ptr))); ++ if (code != RECORD_TYPE ++ && code != UNION_TYPE && code != QUAL_UNION_TYPE) ++ alignment = c_size_in_bytes (TREE_TYPE (TREE_TYPE (ptr))); ++ else ++ alignment = integer_one_node; ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ break; ++ } ++ case RECORD_TYPE: ++ case UNION_TYPE: ++ case QUAL_UNION_TYPE: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ alignment = integer_one_node; ++ break; ++ default: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ alignment = size_exp; ++ break; ++ } ++ ++ decl_name = ++ bounds_build_string (IDENTIFIER_POINTER (DECL_NAME (decl))); ++ ++ if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE) ++ obj = NULL_TREE; ++ else ++ obj = find_object (decl); ++ ++ params[0] = build_c_cast (ptr_type_node, ptr); ++ params[1] = size_exp; ++ params[2] = alignment; ++ params[3] = build_decl_filename (decl); ++ params[4] = build_decl_lineno (decl); ++ params[5] = decl_name; ++ ++ if (obj) ++ function_call = ++ build_modify_expr (obj, NOP_EXPR, ++ bounds_build_function_call ("__bounds_note_constructed_object", ++ bounds_note_constructed_object, ++ params, 6)); ++ else ++ function_call = ++ bounds_build_function_call ("__bounds_note_constructed_object", ++ bounds_note_constructed_object, ++ params, 6); ++ ++ /* Generate the code for this function call within this function. */ ++ append_to_statement_list (function_call, &ctor_statements); ++ ++ if (POINTER_TYPE_P (TREE_TYPE (decl)) && DECL_INITIAL (decl)) ++ bounds_mark_for_runtime_check (decl); ++ } ++ } ++ ++ if (static_ptr_init_list) ++ ctor_statements = check_static_pointer_initialization (ctor_statements); ++ ++ cgraph_build_static_cdtor ('I', ctor_statements, ++ MAX_RESERVED_INIT_PRIORITY - 1); ++ ++ bounds_checking_enabled = 1; ++ ++ if (deferred_global_decls) ++ { ++ free (vec); ++ VARRAY_CLEAR (deferred_global_decls); ++ } ++} ++ ++/* Generate code to check static pointer initialisation involving pointer ++ arithmetic. */ ++ ++static tree ++check_static_pointer_initialization (tree ctor_statements) ++{ ++ int i, len; ++ tree decl, size_exp, binary_exp; ++ tree result_type; ++ unsigned HOST_WIDE_INT int_cst, offset, size; ++ tree init_exp; ++ int temp = bounds_checking_enabled; ++ ++ len = VARRAY_ACTIVE_SIZE (static_ptr_init_list); ++ for (i = 0; i < len; i++) ++ { ++ decl = VARRAY_TREE (static_ptr_init_list, i); ++ init_exp = DECL_INITIAL (decl); ++ result_type = TREE_TYPE (TREE_OPERAND (init_exp, 0)); ++ size_exp = c_size_in_bytes (TREE_TYPE (result_type)); ++ size = TREE_INT_CST_LOW (size_exp); ++ int_cst = TREE_INT_CST_LOW (TREE_OPERAND (init_exp, 1)); ++ offset = int_cst / size; ++ bounds_checking_enabled = 1; ++ ++ binary_exp = build_binary_op (TREE_CODE (init_exp), ++ TREE_OPERAND (init_exp, 0), ++ build_int_cst (NULL_TREE, offset), 1); ++ ++ bounds_checking_enabled = temp; ++ append_to_statement_list (binary_exp, &ctor_statements); ++ } ++ VARRAY_CLEAR (static_ptr_init_list); ++ return ctor_statements; ++} ++ ++/* Declare `int __bounds_function_number_var;' */ ++static tree ++declare_function_number_var (void) ++{ ++ tree decl; ++ ++ bounds_checking_enabled = 0; ++ decl = ++ create_tmp_var_raw (integer_type_node, "__bounds_function_number_var"); ++ pushdecl (decl); ++ finish_decl (decl, NULL_TREE, NULL_TREE); ++ bounds_checking_enabled = 1; ++ ++ return decl; ++} ++ ++/* Declare `void * (name_of_decl)_bounds_object;' */ ++static void ++declare_object_var (tree decl) ++{ ++ tree new_decl; ++ tree init; ++ tree lookup_decl; ++ const char *name = IDENTIFIER_POINTER (DECL_NAME (decl)); ++ char *newname; ++ ++ newname = xmalloc (strlen ("_bounds_object") + strlen (name) + 1); ++ strcpy (newname, name); ++ strcat (newname, "_bounds_object"); ++ /* This can happen when a global decl was defined external and later ++ static. */ ++ lookup_decl = maybe_get_identifier (newname); ++ if (lookup_decl && global_bindings_p ()) ++ { ++ free (newname); ++ return; ++ } ++ bounds_checking_enabled = 0; ++ new_decl = build_decl (VAR_DECL, get_identifier (newname), ptr_type_node); ++ TREE_STATIC (new_decl) = global_bindings_p () ? 1 : 0; ++ TREE_USED (new_decl) = 1; ++ DECL_ARTIFICIAL (new_decl) = 1; ++ DECL_IGNORED_P (new_decl) = 1; ++ DECL_IN_SYSTEM_HEADER (new_decl) = 1; ++ init = build_c_cast (ptr_type_node, integer_zero_node); ++ DECL_INITIAL (new_decl) = init; ++ pushdecl (new_decl); ++ finish_decl (new_decl, init, NULL_TREE); ++ bounds_checking_enabled = 1; ++ free (newname); ++} ++ ++static tree ++find_object (tree ptr) ++{ ++ tree decl; ++ tree lookup_decl; ++ const char *name; ++ int newlen; ++ static char *newname = NULL; ++ static int len = 0; ++ ++ if (TREE_CODE (ptr) != VAR_DECL ++ && TREE_CODE (ptr) != PARM_DECL ++ && (TREE_CODE (ptr) != ADDR_EXPR ++ || (TREE_CODE (TREE_OPERAND (ptr, 0)) != VAR_DECL ++ && TREE_CODE (TREE_OPERAND (ptr, 0)) != PARM_DECL) ++ || TREE_CODE (TREE_TYPE (TREE_OPERAND (ptr, 0))) != ARRAY_TYPE)) ++ return NULL_TREE; ++ if (TREE_CODE (ptr) == ADDR_EXPR) ++ name = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (ptr, 0))); ++ else ++ name = IDENTIFIER_POINTER (DECL_NAME (ptr)); ++ newlen = strlen ("_bounds_object") + strlen (name) + 1; ++ if (newlen > len) ++ { ++ if (newname == NULL) ++ newname = xmalloc (newlen); ++ else ++ newname = xrealloc (newname, newlen); ++ len = newlen; ++ } ++ strcpy (newname, name); ++ strcat (newname, "_bounds_object"); ++ lookup_decl = maybe_get_identifier (newname); ++ if (lookup_decl == NULL_TREE) ++ decl = NULL_TREE; ++ else ++ { ++ decl = lookup_name (lookup_decl); ++ } ++ return decl; ++} ++ ++static tree ++maybe_find_object (tree ptr) ++{ ++ tree params[2]; ++ tree result; ++ tree obj = find_object (ptr); ++ ++ if (obj == NULL_TREE) ++ return build_c_cast (ptr_type_node, integer_zero_node); ++ bounds_checking_enabled = 0; ++#if 0 ++ /* This generates less code but has allways a function call overhead. */ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, ptr); ++ result = build_modify_expr (obj, NOP_EXPR, ++ bounds_build_function_call ++ ("__bounds_maybe_find_object", ++ bounds_maybe_find_object, params, 2)); ++#else ++ /* This generates more code and has only sometimes a function call overhead. ++ We use this now because the compiler can optimize the conditional ++ expression. */ ++ params[0] = build_c_cast (ptr_type_node, ptr); ++ result = build_conditional_expr (build_binary_op (NE_EXPR, obj, ++ build_c_cast ( ++ ptr_type_node, ++ integer_zero_node), 1), ++ obj, ++ build_modify_expr (obj, NOP_EXPR, ++ bounds_build_function_call ++ ("__bounds_find_object", ++ bounds_find_object, ++ params, 1))); ++#endif ++ bounds_checking_enabled = 1; ++ return result; ++} ++ ++static int ++check_fname_decl (tree decl) ++{ ++ const char *name; ++ ++ if (TREE_CODE (decl) == VAR_DECL && DECL_NAME (decl)) ++ { ++ name = IDENTIFIER_POINTER (DECL_NAME (decl)); ++ if (name ++ && (strcmp (name, "__FUNCTION__") == 0 ++ || strcmp (name, "__PRETTY_FUNCTION__") == 0 ++ || strcmp (name, "__func__") == 0)) ++ return 1; ++ } ++ return 0; ++} ++ ++static void ++add_object (tree decl, enum tree_code type) ++{ ++ /* For every pointer, array, record or union variable create a shadow: ++ (name_of_decl)_bounds_object variable. ++ Don't check __FUNCTION__ and __PRETTY_FUNCTION__. */ ++ if (optimize > 2 /* Only do this for -O3 and higher. */ ++ && TREE_CODE (decl) == type && !DECL_IN_SYSTEM_HEADER (decl) ++ && !check_fname_decl (decl) ++ /* Allowing pointer in global_bindings_p could cause problems ++ when the pointer is used in more then one file. The variable ++ '(name_of_decl)_bounds_object' is declated not public in both files ++ and can now point to different objects. ++ This also gives problems when one file is compiled with ++ bounds checking and other files not. */ ++ && ((TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE ++ && (!global_bindings_p () || !TREE_PUBLIC (decl))) ++ || TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE ++ || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE ++ || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)) ++ declare_object_var (decl); ++} ++ ++/* Store all static pointer decls initialised using pointer arithmetic. ++ static_ptr_init_list is the list of these decls ++ This is because the pointer arithmetic cannot be checked ++ during compile time since the initial value of a static variable ++ has to be constant. We generate the relevant checking codes later in ++ bounds_build_static_constructors after initialising the checking library. */ ++ ++void ++bounds_mark_for_runtime_check (tree decl) ++{ ++ tree init_exp = DECL_INITIAL (decl); ++ int temp = bounds_checking_enabled; ++ ++ bounds_checking_enabled = 1; ++ if (init_exp ++ && (TREE_CODE (init_exp) == PLUS_EXPR ++ || TREE_CODE (init_exp) == MINUS_EXPR)) ++ { ++ if (!static_ptr_init_list) ++ VARRAY_TREE_INIT (static_ptr_init_list, 10, "static pointer init list"); ++ ++ VARRAY_PUSH_TREE (static_ptr_init_list, decl); ++ } ++ ++ bounds_checking_enabled = temp; ++} ++ ++/* DECL is either a static or automatic local variable. Build a constructor ++ function for it so that when it comes into scope, it is added to our ++ list of valid objects. The constructor takes the form of a variable ++ initializer, and there may already be an initializer for this variable, ++ so we must alter the old initializer, if present, so it has the side ++ effect of calling the constructor. So, ++ if there is an initializer already, form the expression: ++ __bounds_add_stack_object (...), old_initializer ++ else if there isn't, for the expression: ++ __bounds_add_stack_object (...), 0 ++ This has the unfortunate side effect of initializing non-initialized ++ variables to zero, but I can't see how to avoid that. */ ++void ++bounds_frig_decl_initial (tree decl) ++{ ++ tree type, decl_name, size_exp, ptr, alignment, params[7], fn_call; ++ tree cleanup_expr; ++ enum tree_code code; ++ int addressable = TREE_ADDRESSABLE (decl); ++ ++ add_object (decl, VAR_DECL); ++ ++ if (global_bindings_p () ++ || TREE_CODE (decl) != VAR_DECL || DECL_EXTERNAL (decl)) ++ return; ++ ++ /* Do not add empty declarations. */ ++ if (DECL_SIZE (decl) ++ && TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST ++ && TREE_INT_CST_LOW (DECL_SIZE (decl)) == 0 ++ && TREE_INT_CST_HIGH (DECL_SIZE (decl)) == 0) ++ return; ++ ++ /* A static variable declared in a function can't have its DECL_INITIAL ++ modified with a non-constant function call. We catch such variables ++ in varasm.c:make_decl_rtl instead, so forget about them for now. */ ++ if (TREE_STATIC (decl) ++ || (DECL_INITIAL (decl) ++ && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR)) ++ return; ++ ++ type = TREE_TYPE (decl); ++ code = TREE_CODE (type); ++ ++ /* Form the parameters for the call to __bounds_add_stack_object (). */ ++ decl_name = bounds_build_string (IDENTIFIER_POINTER (DECL_NAME (decl))); ++ size_exp = c_size_in_bytes (type); ++ switch (TREE_CODE (type)) ++ { ++ case ARRAY_TYPE: ++ { ++ enum tree_code type_code; ++ ptr = bounds_pointer_from_array (decl); ++ type_code = TREE_CODE (TREE_TYPE (TREE_TYPE (ptr))); ++ if (type_code != RECORD_TYPE ++ && type_code != UNION_TYPE && type_code != QUAL_UNION_TYPE) ++ alignment = c_size_in_bytes (TREE_TYPE (TREE_TYPE (ptr))); ++ else ++ alignment = integer_one_node; ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ break; ++ } ++ case RECORD_TYPE: ++ case UNION_TYPE: ++ case QUAL_UNION_TYPE: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ alignment = integer_one_node; ++ break; ++ default: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), decl); ++ alignment = size_exp; ++ break; ++ } ++ ++ params[0] = build_c_cast (ptr_type_node, ptr); ++ params[1] = size_exp; ++ params[2] = alignment; ++ params[3] = build_decl_filename (decl); ++ params[4] = build_decl_lineno (decl); ++ params[5] = decl_name; ++ params[6] = current_function_bounds_nr; ++ ++ fn_call = bounds_build_function_call ("__bounds_add_stack_object", ++ bounds_add_stack_object, params, 7); ++ ++ if (!AGGREGATE_TYPE_P (type) ++ && DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node) ++ { ++ tree old_init_expr = DECL_INITIAL (decl); ++ tree new_init_expr = build_compound_expr (fn_call, old_init_expr); ++ ++ DECL_INITIAL (decl) = bounds_check_assignment (new_init_expr, ++ decl, old_init_expr); ++ } ++ else ++ { ++ add_stmt (fn_call); ++ if (AGGREGATE_TYPE_P (type)) ++ addressable = 1; ++ } ++ TREE_ADDRESSABLE (decl) = addressable; ++ ++ /* Normally disable this because it requires the code to be C++ compatible. ++ Enable this only for types with have not an integer size. ++ For example: ++ int n = 10; ++ int s[n]; ++ variable s has not an integer size here. */ ++ ++ if (type != error_mark_node && COMPLETE_TYPE_P (TREE_TYPE (decl)) ++ && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST ++ || C_DECL_VARIABLE_SIZE (decl))) ++ { ++ params[0] = build_c_cast (ptr_type_node, ptr); ++ params[1] = maybe_find_object (ptr); ++ params[2] = current_function_bounds_nr; ++ cleanup_expr = ++ bounds_build_function_call ("__bounds_delete_stack_object", ++ bounds_delete_stack_object, params, 3); ++ push_cleanup (decl, cleanup_expr, false); ++ TREE_ADDRESSABLE (decl) = addressable; ++ } ++} ++ ++#ifdef __GNUC__ ++__inline ++#endif ++const char *bounds_func_lookup (const char *str, unsigned int len); ++ ++static int ++locate_var_in_tree (tree node, const char *name) ++{ ++ int i; ++ int len; ++ tree save; ++ ++ if (node) ++ switch (TREE_CODE_CLASS (TREE_CODE (node))) ++ { ++ case tcc_declaration: ++ if (TREE_CODE (node) == FUNCTION_DECL) ++ return 1; ++ if (DECL_NAME (node) ++ && strcmp (IDENTIFIER_POINTER (DECL_NAME (node)), name) == 0) ++ return 1; ++ if (locate_var_in_tree (DECL_ARGUMENTS (node), name) ++ || locate_var_in_tree (DECL_RESULT_FLD (node), name)) ++ return 1; ++ save = DECL_INITIAL (node); ++ DECL_INITIAL (node) = NULL_TREE; ++ i = locate_var_in_tree (save, name); ++ DECL_INITIAL (node) = save; ++ return i; ++ case tcc_type: ++ break; ++ case tcc_expression: ++ case tcc_comparison: ++ case tcc_unary: ++ case tcc_binary: ++ case tcc_reference: ++ case tcc_statement: ++ if (TREE_CODE (node) == CALL_EXPR) ++ { ++ if (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR ++ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (node, 0), 0)) ++ == FUNCTION_DECL) ++ { ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND ++ (TREE_OPERAND (node, 0), 0))); ++ if (!bounds_func_lookup (fn_name, strlen (fn_name))) ++ return 1; ++ } ++ else ++ return 1; ++ } ++ len = TREE_CODE_LENGTH (TREE_CODE (node)); ++ for (i = 0; i < len; i++) ++ if (locate_var_in_tree (TREE_OPERAND (node, i), name)) ++ return 1; ++ break; ++ case tcc_constant: ++ break; ++ case tcc_exceptional: ++ switch (TREE_CODE (node)) ++ { ++ case TREE_LIST: ++ return locate_var_in_tree (TREE_PURPOSE (node), name) ++ || locate_var_in_tree (TREE_VALUE (node), name) ++ || locate_var_in_tree (TREE_CHAIN (node), name); ++ case TREE_VEC: ++ len = TREE_VEC_LENGTH (node); ++ for (i = 0; i < len; i++) ++ if (TREE_VEC_ELT (node, i) ++ && locate_var_in_tree (TREE_VEC_ELT (node, i), name)) ++ return 1; ++ break; ++ case BLOCK: ++ return locate_var_in_tree (BLOCK_VARS (node), name) ++ || locate_var_in_tree (BLOCK_SUBBLOCKS (node), name) ++ || locate_var_in_tree (BLOCK_ABSTRACT_ORIGIN (node), name); ++ case STATEMENT_LIST: ++ { ++ tree_stmt_iterator i; ++ for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i)) ++ if (locate_var_in_tree (*tsi_stmt_ptr (i), name)) ++ return 1; ++ } ++ break; ++ default: ++ break; ++ } ++ break; ++ } ++ return 0; ++} ++ ++static int ++is_deletable (int type, tree op) ++{ ++ int fntype; ++ const char *fn_name; ++ ++ fn_name = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND ( ++ TREE_OPERAND (op, 0), 0))); ++ if (type == 2) ++ { ++ if (strcmp (fn_name, "__bounds_push_function") == 0 || ++ strcmp (fn_name, "__bounds_pop_function") == 0) ++ return 1; ++ return -1; ++ } ++ if (strcmp (fn_name, "__bounds_add_param_object") == 0) ++ fntype = 1; ++ else if (strcmp (fn_name, "__bounds_add_stack_object") == 0) ++ fntype = 2; ++ else if (strcmp (fn_name, "__bounds_delete_stack_object") == 0) ++ fntype = 2; ++ else ++ return -1; ++ ++ op = TREE_VALUE ( TREE_OPERAND (op, 1)); ++ STRIP_NOPS (op); ++ if (TREE_CODE (op) == ADDR_EXPR) ++ { ++ op = TREE_OPERAND (op, 0); ++ if (TREE_ADDRESSABLE (op) == 0 ++ && ((fntype == 1 && TREE_CODE (op) == PARM_DECL) ++ || (fntype == 2 && TREE_CODE (op) == VAR_DECL))) ++ return 1; ++ } ++ return 0; ++} ++ ++static int ++bounds_remove_calls (tree *node, int type, int *pdelete) ++{ ++ int i; ++ int len; ++ int count = 0; ++ int delete = 0; ++ tree save; ++ ++again: ++ if (*node) ++ switch (TREE_CODE_CLASS (TREE_CODE (*node))) ++ { ++ case tcc_declaration: ++ if (TREE_CODE (*node) == FUNCTION_DECL) ++ break; ++ count += bounds_remove_calls (&DECL_ARGUMENTS (*node), type, &delete); ++ save = DECL_INITIAL (*node); ++ DECL_INITIAL (*node) = NULL_TREE; ++ count += bounds_remove_calls (&save, type, &delete); ++ DECL_INITIAL (*node) = save; ++ count += bounds_remove_calls (&DECL_RESULT_FLD (*node), type, &delete); ++ break; ++ case tcc_type: ++ break; ++ case tcc_expression: ++ case tcc_comparison: ++ case tcc_unary: ++ case tcc_binary: ++ case tcc_reference: ++ case tcc_statement: ++ if (TREE_CODE (*node) == CALL_EXPR) ++ { ++ if (TREE_CODE (TREE_OPERAND (*node, 0)) == ADDR_EXPR ++ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (*node, 0), 0)) ++ == FUNCTION_DECL) ++ { ++ switch (is_deletable (type, *node)) { ++ case 0: ++ count++; ++ break; ++ case 1: ++ *pdelete = 1; ++ break; ++ default: ++ break; ++ } ++ } ++ break; ++ } ++ len = TREE_CODE_LENGTH (TREE_CODE (*node)); ++ for (i = 0; i < len; i++) ++ { ++ count += bounds_remove_calls (&TREE_OPERAND (*node, i), type, ++ &delete); ++ if (delete) ++ { ++ delete = 0; ++ /* __bounds_delete_stack_object ++ __bounds_pop_function */ ++ if (TREE_CODE (*node) == TRY_FINALLY_EXPR) ++ { ++ *node = TREE_OPERAND (*node, 0); ++ goto again; ++ } ++ /* __bounds_push_function */ ++ else if (TREE_CODE (*node) == MODIFY_EXPR) ++ { ++ *pdelete = 1; ++ break; ++ } ++ /* __bounds_add_stack_object */ ++ else if (TREE_CODE (*node) == COMPOUND_EXPR) ++ { ++ *node = TREE_OPERAND (*node, 1); ++ goto again; ++ } ++ else ++ abort (); ++ } ++ } ++ break; ++ case tcc_constant: ++ break; ++ case tcc_exceptional: ++ switch (TREE_CODE (*node)) ++ { ++ case TREE_LIST: ++ count += bounds_remove_calls (&TREE_PURPOSE (*node), type, &delete); ++ count += bounds_remove_calls (&TREE_VALUE (*node), type, &delete); ++ count += bounds_remove_calls (&TREE_CHAIN (*node), type, &delete); ++ break; ++ case TREE_VEC: ++ len = TREE_VEC_LENGTH (*node); ++ for (i = 0; i < len; i++) ++ if (TREE_VEC_ELT (*node, i)) ++ count += bounds_remove_calls (&TREE_VEC_ELT (*node, i), type, ++ &delete); ++ break; ++ case BLOCK: ++ count += bounds_remove_calls (&BLOCK_VARS (*node), type, &delete); ++ count += bounds_remove_calls (&BLOCK_SUBBLOCKS (*node), type, ++ &delete); ++ count += bounds_remove_calls (&BLOCK_ABSTRACT_ORIGIN (*node), type, ++ &delete); ++ break; ++ case STATEMENT_LIST: ++ { ++ tree_stmt_iterator i; ++ ++ for (i = tsi_start (*node); !tsi_end_p (i); ) ++ { ++ count += bounds_remove_calls (tsi_stmt_ptr (i), type, ++ &delete); ++ if (delete) ++ { ++ /* __bounds_push_function ++ __bounds_add_param_object ++ __bounds_add_stack_object */ ++ delete = 0; ++ tsi_delink (&i); ++ } ++ else ++ tsi_next (&i); ++ } ++ } ++ break; ++ default: ++ break; ++ } ++ break; ++ } ++ return count; ++} ++ ++/* This is the section where we attempt to optimize calls to ++ __bounds_push_function ++ __bounds_pop_function ++ __bounds_add_param_object ++ __bounds_add_stack_object ++ __bounds_delete_stack_object ++ We cannily observe that if the address of a local variable or local ++ parameter is not taken (with '&') then there is no need recording ++ it in the tree. But we can't determine this until the whole function has ++ been parsed, so we have to delete these calls later on to optimize them. ++ In the first pass, we delete calls to `__bounds_add_stack_object', ++ `__bounds_delete_stack_object' and `__bounds_add_param_object' if they ++ are redundant (if the VAR_DECL is not addressed). ++ In the second pass, we delete calls to `__bounds_push_function' and ++ `__bounds_pop_function' is no calls to add parameters remain in the ++ function. */ ++ ++void ++bounds_delete_redundant_calls (tree fndecl) ++{ ++ int delete = 0; ++ ++ if (bounds_remove_calls (&DECL_SAVED_TREE (fndecl), 1, &delete) == 0 ++ && !current_function_calls_setjmp ++ && !current_function_has_nonlocal_label ++ && !current_function_has_nonlocal_goto ++ && !current_function_calls_alloca) ++ bounds_remove_calls (&DECL_SAVED_TREE (fndecl), 2, &delete); ++} ++ ++static tree ++generate_assignment (tree result, tree lobj, tree robj) ++{ ++ tree tmpvar, tmp, new; ++ ++ bounds_checking_enabled = 0; ++ if (robj == NULL_TREE) ++ new = build_modify_expr (lobj, NOP_EXPR, build_c_cast (ptr_type_node, ++ integer_zero_node)); ++ else ++ new = build_modify_expr (lobj, NOP_EXPR, robj); ++ /* If the object is allready used in the tree. We must use a temporary ++ variable and use the construct: ++ tmpvar = result, lobj = robj, tmpvar ++ If the object is not used we can use the simpler construct: ++ lobj = robj, result. */ ++ if (locate_var_in_tree (result, IDENTIFIER_POINTER (DECL_NAME (lobj)))) ++ { ++ tmpvar = create_tmp_var_raw (TREE_TYPE (result), "__bounds_tmp"); ++ TREE_READONLY (TREE_TYPE (tmpvar)) = 0; ++ TREE_READONLY (tmpvar) = 0; ++ pushdecl (tmpvar); ++ finish_decl (tmpvar, NULL_TREE, NULL_TREE); ++ /* Build expression : "tmpvar = result, lobj = robj, tmpvar" */ ++ tmp = build_modify_expr (tmpvar, NOP_EXPR, result); ++ result = build_compound_expr (build_compound_expr (tmp, new), tmpvar); ++ } ++ else ++ { ++ /* Build expression : "lobj = robj, result" */ ++ result = build_compound_expr (new, result); ++ } ++ bounds_checking_enabled = 1; ++ return result; ++} ++ ++/* When building a unary '&' operator, we normally perform the identities ++ &x[y] == x + y and so on. We cannot do this with bounds checking, since ++ we may already have expanded the array reference into a call to the ++ bounds checking library. So we need to extend the patterns recognized ++ here. ++ ++ # FORM PATTERN RETURN ++ 1 &*p *(type *)__bounds_check_reference (p, ...) p ++ 2 &x[y] x[__bounds_check_array_ref (x, y, ...)] x+y ++ 3 &p->e (*(type *)__bounds_check_comp_ref (p, ...)).e p+offset (e) ++ */ ++tree ++bounds_cancel_address_expr (tree exp) ++{ ++ tree obj = NULL_TREE; ++ ++ if (exp) ++ obj = find_object (exp); ++ ++ if (exp ++ && TREE_CODE (exp) == INDIRECT_REF ++ && (TREE_CODE (TREE_OPERAND (exp, 0)) == CONVERT_EXPR ++ || TREE_CODE (TREE_OPERAND (exp, 0)) == NOP_EXPR) ++ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) == CALL_EXPR) ++ { ++ /* Could be pattern #1. Find the name of the function being ++ called here. */ ++ tree call_expr = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ const char *newname = NULL; ++ const char *newname_obj = NULL; ++ tree tnewname = NULL; ++ tree tnewname_obj = NULL; ++ ++ if (fn_name[0] == '_' && fn_name[1] == '_' ++ && fn_name[2] == 'b' && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_reference") == 0) ++ { ++ tree arg1 = ++ TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ ++ /* This is pattern #1. */ ++ if (obj) ++ arg1 = generate_assignment (arg1, obj, NULL_TREE); ++ return build_c_cast (TREE_TYPE (TREE_OPERAND (exp, 0)), arg1); ++ } ++ else if (strcmp (fn_name, "__bounds_check_reference_obj") == 0) ++ { ++ tree arg0 = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ ++ /* This is pattern #1. */ ++ if (obj) ++ arg0 = generate_assignment (arg0, obj, NULL_TREE); ++ return build_c_cast (TREE_TYPE (TREE_OPERAND (exp, 0)), arg0); ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postinc_ref") == 0) ++ { ++ newname = "__bounds_check_ptr_postinc"; ++ tnewname = bounds_check_ptr_postinc; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postinc_ref_obj") == ++ 0) ++ { ++ newname_obj = "__bounds_check_ptr_postinc_obj"; ++ tnewname_obj = bounds_check_ptr_postinc_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_preinc_ref") == 0) ++ { ++ newname = "__bounds_check_ptr_preinc"; ++ tnewname = bounds_check_ptr_preinc; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_preinc_ref_obj") == 0) ++ { ++ newname_obj = "__bounds_check_ptr_preinc_obj"; ++ tnewname_obj = bounds_check_ptr_preinc_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postdec_ref") == 0) ++ { ++ newname = "__bounds_check_ptr_postdec"; ++ tnewname = bounds_check_ptr_postdec; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postdec_ref_obj") == ++ 0) ++ { ++ newname_obj = "__bounds_check_ptr_postdec_obj"; ++ tnewname_obj = bounds_check_ptr_postdec_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_predec_ref") == 0) ++ { ++ newname = "__bounds_check_ptr_predec"; ++ tnewname = bounds_check_ptr_predec; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_predec_ref_obj") == 0) ++ { ++ newname_obj = "__bounds_check_ptr_predec_obj"; ++ tnewname_obj = bounds_check_ptr_predec_obj; ++ } ++ if (newname || newname_obj) ++ { ++ tree arg0 = TREE_OPERAND (call_expr, 1); ++ tree arg1 = TREE_CHAIN (arg0); ++ tree arg2 = TREE_CHAIN (arg1); ++ tree arg3 = TREE_CHAIN (arg2); ++ tree arg4 = newname ? TREE_CHAIN (arg3) : NULL_TREE; ++ tree r_expr, params[5]; ++ ++ params[0] = TREE_VALUE (arg0); ++ params[1] = TREE_VALUE (arg1); ++ params[2] = TREE_VALUE (arg2); ++ params[3] = TREE_VALUE (arg3); ++ params[4] = newname ? TREE_VALUE (arg4) : NULL_TREE; ++ if (newname) ++ r_expr = bounds_build_function_call (newname, tnewname, ++ params, 5); ++ else ++ r_expr = bounds_build_function_call (newname_obj, tnewname_obj, ++ params, 4); ++ ++ if (obj) ++ r_expr = generate_assignment (r_expr, obj, NULL_TREE); ++ return build_c_cast (TREE_TYPE (TREE_OPERAND (exp, 0)), r_expr); ++ } ++ } ++ } ++ else if (exp ++ && TREE_CODE (exp) == ARRAY_REF ++ && TREE_CODE (TREE_OPERAND (exp, 1)) == CALL_EXPR) ++ { ++ /* Could be pattern #2. Find the name of the function being ++ called here. */ ++ tree call_expr = TREE_OPERAND (exp, 1); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ if (fn_name[0] == '_' && fn_name[1] == '_' && fn_name[2] == 'b' ++ && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_array_reference") == 0) ++ { ++ /* This is pattern #2. Return expression for `arg1 + arg2'. We ++ still want this to be checked ... */ ++ tree arg1 = ++ TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ tree arg2 = ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1)))); ++ tree atype = bounds_pointer_from_array_ref (exp); ++ tree r_expr = build_binary_op (PLUS_EXPR, ++ build_c_cast (atype, arg1), ++ arg2, 1); ++ ++ if (obj) ++ r_expr = generate_assignment (r_expr, obj, NULL_TREE); ++ return r_expr; ++ } ++ else if (strcmp (fn_name, "__bounds_check_array_reference_obj") == ++ 0) ++ { ++ /* This is pattern #2. Return expression for `arg0 + arg1'. We ++ still want this to be checked ... */ ++ tree arg0 = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ tree arg1 = ++ TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ tree atype = bounds_pointer_from_array_ref (exp); ++ tree r_expr = build_binary_op (PLUS_EXPR, ++ build_c_cast (atype, arg0), ++ arg1, 1); ++ ++ if (obj) ++ r_expr = generate_assignment (r_expr, obj, NULL_TREE); ++ return r_expr; ++ } ++ } ++ } ++ else if (exp ++ && TREE_CODE (exp) == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (exp, 0)) == INDIRECT_REF ++ && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) ++ == CONVERT_EXPR ++ || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) ++ == NOP_EXPR) ++ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND ++ (exp, 0), 0), 0)) ++ == CALL_EXPR) ++ { ++ /* This is pattern #3. Return expression for `arg1 + offset (field)'. ++ Note that `arg0' is a pointer and `field' is a FIELD_DECL. ++ FIXME: This ought to be checked ... */ ++ tree call_expr = TREE_OPERAND (TREE_OPERAND (TREE_OPERAND ++ (exp, 0), 0), 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ tree field = TREE_OPERAND (exp, 1); ++ tree field_name = DECL_NAME (field); ++ tree r_expr; ++ ++ if (fn_name[0] == '_' && fn_name[1] == '_' ++ && fn_name[2] == 'b' && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_component_reference") == 0) ++ { ++ tree arg1 = ++ TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ ++ arg1 = ++ build_c_cast (TREE_TYPE ++ (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)), ++ arg1); ++ bounds_checking_enabled = 0; ++ r_expr = build_unary_op (ADDR_EXPR, ++ build_component_ref (build_indirect_ref ++ (arg1, "->"), ++ field_name), 0); ++ bounds_checking_enabled = 1; ++ if (obj) ++ r_expr = generate_assignment (r_expr, obj, NULL_TREE); ++ return r_expr; ++ } ++ else if (strcmp (fn_name, "__bounds_check_component_reference_obj") ++ == 0) ++ { ++ tree arg0 = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ ++ arg0 = ++ build_c_cast (TREE_TYPE ++ (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)), ++ arg0); ++ bounds_checking_enabled = 0; ++ r_expr = build_unary_op (ADDR_EXPR, ++ build_component_ref (build_indirect_ref ++ (arg0, "->"), ++ field_name), 0); ++ bounds_checking_enabled = 1; ++ if (obj) ++ r_expr = generate_assignment (r_expr, obj, NULL_TREE); ++ return r_expr; ++ } ++ } ++ } ++ else if (exp && obj) ++ { ++ tree r_exp; ++ bounds_checking_enabled = 0; ++ r_exp = build_unary_op (ADDR_EXPR, exp, 0); ++ bounds_checking_enabled = 1; ++ return generate_assignment (r_exp, obj, NULL_TREE); ++ } ++ ++ /* No matching pattern. Return 0. */ ++ return NULL_TREE; ++} ++ ++tree ++bounds_check_assignment (tree result, tree lhs, tree rhs) ++{ ++ tree lobj = find_object (lhs); ++ ++ if (lobj == NULL_TREE) ++ return result; ++ return generate_assignment (result, lobj, find_object (rhs)); ++} ++ ++tree ++bounds_build_reference (tree ptr) ++{ ++ tree pointer = default_conversion (ptr); ++ tree type = TREE_TYPE (pointer), type_of_type = TREE_TYPE (type); ++ tree params[6], function_call; ++ enum tree_code code = TREE_CODE (TREE_TYPE (type)); ++ tree size_exp = (code == FUNCTION_TYPE || ++ code == VOID_TYPE || ++ code == ERROR_MARK || TYPE_SIZE (TREE_TYPE (type)) != 0) ++ ? c_size_in_bytes (TREE_TYPE (type)) : size_int (0); ++ tree obj = maybe_find_object (ptr); ++ tree ptrptr = NULL_TREE, inc = 0; ++ const char *new = NULL; ++ const char *new_obj = NULL; ++ tree tnew = NULL; ++ tree tnew_obj = NULL; ++ ++ if (TREE_CODE (type_of_type) != ARRAY_TYPE) ++ type_of_type = TYPE_MAIN_VARIANT (type_of_type); ++ ++ if (ptr && (TREE_CODE (ptr) == CONVERT_EXPR || TREE_CODE (ptr) == NOP_EXPR) ++ && TREE_CODE (TREE_OPERAND (ptr, 0)) == CALL_EXPR) ++ { ++ tree call_expr = TREE_OPERAND (ptr, 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ ++ if (fn_name[0] == '_' && fn_name[1] == '_' ++ && fn_name[2] == 'b' && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_ptr_postinc") == 0) ++ { ++ new = "__bounds_check_ptr_postinc_ref"; ++ tnew = bounds_check_ptr_postinc_ref; ++ new_obj = "__bounds_check_ptr_postinc_ref_obj"; ++ tnew_obj = bounds_check_ptr_postinc_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_preinc") == 0) ++ { ++ new = "__bounds_check_ptr_preinc_ref"; ++ tnew = bounds_check_ptr_preinc_ref; ++ new_obj = "__bounds_check_ptr_preinc_ref_obj"; ++ tnew_obj = bounds_check_ptr_preinc_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postdec") == 0) ++ { ++ new = "__bounds_check_ptr_postdec_ref"; ++ tnew = bounds_check_ptr_postdec_ref; ++ new_obj = "__bounds_check_ptr_postdec_ref_obj"; ++ tnew_obj = bounds_check_ptr_postdec_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_predec") == 0) ++ { ++ new = "__bounds_check_ptr_predec_ref"; ++ tnew = bounds_check_ptr_predec_ref; ++ new_obj = "__bounds_check_ptr_predec_ref_obj"; ++ tnew_obj = bounds_check_ptr_predec_ref_obj; ++ } ++ if (new) ++ { ++ obj = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ ptrptr = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ inc = ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1)))); ++ } ++ else ++ { ++ if (strcmp (fn_name, "__bounds_check_ptr_postinc_obj") == 0) ++ { ++ new_obj = "__bounds_check_ptr_postinc_ref_obj"; ++ tnew_obj = bounds_check_ptr_postinc_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_preinc_obj") == 0) ++ { ++ new_obj = "__bounds_check_ptr_preinc_ref_obj"; ++ tnew_obj = bounds_check_ptr_preinc_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_postdec_obj") == ++ 0) ++ { ++ new_obj = "__bounds_check_ptr_postdec_ref_obj"; ++ tnew_obj = bounds_check_ptr_postdec_ref_obj; ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_predec_obj") == 0) ++ { ++ new_obj = "__bounds_check_ptr_predec_ref_obj"; ++ tnew_obj = bounds_check_ptr_predec_ref_obj; ++ } ++ if (new_obj) ++ { ++ ptrptr = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ inc = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ } ++ } ++ } ++ } ++ ++ /* Build cast to correct pointer type, and reference it. */ ++ if (new_obj) ++ { ++ /* Build a call to new or new_obj. This returns the ++ pointer passed, which we then reference. */ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, ptrptr); ++ params[2] = inc; ++ params[3] = size_exp; ++ params[4] = build_current_filename (); ++ params[5] = build_current_lineno (); ++ ++ if (new && TREE_CODE (obj) != INTEGER_CST) ++ function_call = bounds_build_function_call (new, tnew, params, 6); ++ else ++ function_call = bounds_build_function_call (new_obj, tnew_obj, ++ ¶ms[1], 5); ++ ++ return build1 (INDIRECT_REF, type_of_type, ++ build_c_cast (type, function_call)); ++ } ++ else ++ { ++ /* Build a call to __bounds_check_reference. This returns the ++ pointer passed, which we then reference. */ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, ptr); ++ params[2] = size_exp; ++ params[3] = build_current_filename (); ++ params[4] = build_current_lineno (); ++ ++ if (TREE_CODE (obj) == INTEGER_CST) ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_reference_obj", ++ bounds_check_reference_obj, ++ ¶ms[1], 4); ++ return build1 (INDIRECT_REF, type_of_type, ++ build_c_cast (type, function_call)); ++ } ++ else ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_reference", ++ bounds_check_reference, params, 5); ++ ++ return build1 (INDIRECT_REF, type_of_type, ++ build_c_cast (type, function_call)); ++ } ++ } ++} ++ ++static tree ++bounds_lookup_field (tree decl, tree component) ++{ ++ tree type = TREE_TYPE (decl); ++ tree field; ++ ++ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) ++ { ++ if (DECL_NAME (field) == NULL_TREE ++ && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE ++ || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)) ++ { ++ tree anon = bounds_lookup_field (field, component); ++ ++ if (anon) ++ return field; ++ } ++ ++ if (DECL_NAME (field) == component) ++ break; ++ } ++ ++ if (field == NULL_TREE) ++ return NULL_TREE; ++ ++ return field; ++} ++ ++/* This functions reduces the size in a __bounds_check_component_reference ++ or __bounds_check_component_reference_obj call. This can be done if ++ a expression like "p->d.a" is present. The size of the call we be ++ reduced from the size of p->d into the size of p->d.a. This is needed ++ if not the complete p->d structure is malloced. Which happens often ++ when the last element of a structure is an array. */ ++ ++tree ++bounds_build_component_ref (tree datum, tree component) ++{ ++ tree type = TREE_TYPE (datum); ++ enum tree_code code = TREE_CODE (type); ++ tree field; ++ ++ if (TREE_CODE (datum) != COMPOUND_EXPR ++ && (code == RECORD_TYPE || code == UNION_TYPE) ++ && COMPLETE_TYPE_P (type) ++ && (field = bounds_lookup_field (datum, component)) ++ && TREE_CODE (datum) == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (datum, 0)) == INDIRECT_REF ++ && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (datum, 0), 0)) == ++ CONVERT_EXPR ++ || TREE_CODE (TREE_OPERAND (TREE_OPERAND (datum, 0), 0)) == ++ NOP_EXPR) ++ && ++ TREE_CODE (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (datum, 0), 0), 0)) ++ == CALL_EXPR) ++ { ++ tree call_expr = TREE_OPERAND (TREE_OPERAND (TREE_OPERAND ++ (datum, 0), 0), 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ tree size_exp = c_size_in_bytes (TREE_TYPE (field)); ++ ++ if (fn_name[0] == '_' && fn_name[1] == '_' ++ && fn_name[2] == 'b' && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_component_reference") == 0) ++ { ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1))))) = ++ size_exp; ++ } ++ else if (strcmp (fn_name, "__bounds_check_component_reference_obj") ++ == 0) ++ { ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1)))) = ++ size_exp; ++ } ++ } ++ } ++ return build_component_ref (datum, component); ++} ++ ++tree ++bounds_build_component_indirect_ref (tree pointer, tree component) ++{ ++ /* Generate correct code for 'p->component' expressions. The expression ++ built looks like this: ++ *(type *) ++ (__bounds_check_component_reference (p, offsetof (component), ...)) ++ . component ++ */ ++ tree params[6], function_call, obj; ++ tree type, type_of_type; ++ tree ref_exp, offset_exp, size_exp; ++ ++ /* Find the size and offset of the FIELD_DECL for component. Note that ++ ref_exp p->e ++ size_exp sizeof (p->e) ++ ++ #define Offset(p_type,field) ((int)&(((p_type)NULL)->field)) ++ offset_exp = Offset(type(ref_exp),component) ++ */ ++ bounds_checking_enabled = 0; ++ ref_exp = build_component_ref (build_indirect_ref (pointer, "->"), ++ component); ++ if (ref_exp == error_mark_node) ++ { ++ bounds_checking_enabled = 1; ++ return error_mark_node; ++ } ++ ++ /* We cannot check bit field components. */ ++ if (TREE_CODE (ref_exp) == COMPONENT_REF ++ && DECL_BIT_FIELD (TREE_OPERAND (ref_exp, 1))) ++ { ++ bounds_checking_enabled = 1; ++ return ref_exp; ++ } ++ ++ /* Don't check array references because some users have the following ++ code: ++ ++ struct { int a[10]; } *q; ++ ++ q = malloc (5 * sizeof(int)); ++ q->a[4] = 0; ++ ++ __bounds_check_array_reference will check the array reference ++ correctly. */ ++ if (TREE_CODE (ref_exp) == COMPONENT_REF ++ && TREE_CODE (TREE_TYPE (ref_exp)) == ARRAY_TYPE) ++ { ++ bounds_checking_enabled = 1; ++ return ref_exp; ++ } ++ ++ /* Handle a struct / union of arrays such as used in varray.h. If all ++ elemants are arrays then we let __bounds_check_array_reference do ++ the check. */ ++ if (TREE_CODE (ref_exp) == COMPONENT_REF ++ && (TREE_CODE (TREE_TYPE (ref_exp)) == RECORD_TYPE ++ || TREE_CODE (TREE_TYPE (ref_exp)) == UNION_TYPE)) ++ { ++ tree x = TREE_TYPE (ref_exp); ++ for (x = TYPE_FIELDS (x); x != NULL_TREE; x = TREE_CHAIN (x)) ++ if (TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE) ++ break; ++ if (x == NULL_TREE) ++ { ++ bounds_checking_enabled = 1; ++ return ref_exp; ++ } ++ } ++ ++ /* Handle size_of (bitfields) special because the function ++ c_size_in_bytes can not handle them. */ ++ if (TREE_CODE (ref_exp) == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (ref_exp, 1)) == FIELD_DECL) ++ { ++ if (DECL_C_BIT_FIELD (TREE_OPERAND (ref_exp, 1)) == 0) ++ size_exp = c_size_in_bytes (TREE_TYPE (ref_exp)); ++ else ++ { ++ size_exp = DECL_SIZE (TREE_OPERAND (ref_exp, 1)); ++ size_exp = size_binop (CEIL_DIV_EXPR, size_exp, bitsize_unit_node); ++ force_fit_type (size_exp, 0, false, false); ++ } ++ } ++ else ++ size_exp = c_size_in_bytes (TREE_TYPE (ref_exp)); ++ ++ /* If `type' points to an array, turn it into a pointer to the ++ first element. */ ++ type = default_conversion (TREE_TYPE (pointer)); ++ ++ if (TREE_CODE (type) == ARRAY_TYPE) ++ type = bounds_pointer_from_array_type (type); ++ ++ bounds_disable_field_check = 1; ++ offset_exp = build_c_cast (integer_type_node, ++ build_unary_op (ADDR_EXPR, ++ build_component_ref ++ (build_indirect_ref ++ (build_c_cast ++ (type, ++ integer_zero_node), "->"), ++ component), 0)); ++ bounds_disable_field_check = 0; ++ bounds_checking_enabled = 1; ++ ++ obj = maybe_find_object (pointer); ++ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, pointer); ++ params[2] = offset_exp; ++ params[3] = size_exp; ++ params[4] = build_current_filename (); ++ params[5] = build_current_lineno (); ++ ++ type_of_type = TREE_TYPE (type); ++ if (TREE_CODE (type_of_type) != ARRAY_TYPE) ++ type_of_type = TYPE_MAIN_VARIANT (type_of_type); ++ if (TREE_CODE (obj) == INTEGER_CST) ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_component_reference_obj", ++ bounds_check_component_reference_obj, ++ ¶ms[1], 5); ++ return ++ build_component_ref (build1 ++ (INDIRECT_REF, type_of_type, ++ build_c_cast (type, function_call)), component); ++ } ++ else ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_component_reference", ++ bounds_check_component_reference, ++ params, 6); ++ return ++ build_component_ref (build1 ++ (INDIRECT_REF, type_of_type, ++ build_c_cast (type, function_call)), component); ++ } ++} ++ ++tree ++bounds_build_array_reference (tree array, tree index) ++{ ++ /* In bounds checking modes, generate a call to __bounds_check_ ++ array_reference and an indirect ref. to that. */ ++ tree params[7], function_call; ++ tree array_type = TREE_TYPE (array); ++ tree array_element_type = TREE_TYPE (array_type); ++ tree size_exp = c_size_in_bytes (array_element_type); ++ tree size_array = TYPE_SIZE (array_type) == 0 ? integer_zero_node ++ : c_size_in_bytes (array_type); ++ tree ptr; ++ tree arr = array; ++ tree obj; ++ ++ if (TREE_CODE (array_element_type) != ARRAY_TYPE) ++ array_element_type = TYPE_MAIN_VARIANT (array_element_type); ++ ++ if (TREE_CODE (arr) == CONST_DECL) ++ arr = DECL_INITIAL (arr); ++ ++ while (TREE_CODE (arr) == NON_LVALUE_EXPR ++ || (TREE_CODE (arr) == NOP_EXPR ++ && TREE_TYPE (TREE_OPERAND (arr, 0)) == TREE_TYPE (arr))) ++ arr = TREE_OPERAND (arr, 0); ++ ++ if (TREE_CODE (arr) != INDIRECT_REF ++ && TREE_CODE (arr) != COMPOUND_EXPR && !lvalue_p (arr) ++ && !(TREE_CODE (arr) == CONSTRUCTOR && TREE_STATIC (arr))) ++ { ++ return build4 (ARRAY_REF, array_element_type, ++ array, index, NULL_TREE, NULL_TREE); ++ } ++ array = stabilize_reference (array); ++ bounds_checking_enabled = 0; ++ ptr = default_conversion (array); ++ bounds_checking_enabled = 1; ++ while (TREE_CODE (arr) == ARRAY_REF) ++ arr = TREE_OPERAND (arr, 0); ++ obj = maybe_find_object (arr); ++ ++ /* If we are referencing an array object within a structure use ++ that object. */ ++ if (TREE_CODE (obj) == INTEGER_CST ++ && TREE_CODE (arr) == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (arr, 0)) == INDIRECT_REF ++ && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (arr, 0), 0)) ++ == CONVERT_EXPR ++ || TREE_CODE (TREE_OPERAND (TREE_OPERAND (arr, 0), 0)) ++ == NOP_EXPR) ++ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (arr, 0), 0), 0)) ++ == CALL_EXPR) ++ { ++ tree call_expr = TREE_OPERAND (TREE_OPERAND (TREE_OPERAND ++ (arr, 0), 0), 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ if (strcmp (fn_name, "__bounds_check_component_reference") == 0) ++ obj = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ } ++ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, ptr); ++ params[2] = index; ++ params[3] = size_exp; ++ params[4] = size_array; ++ params[5] = build_current_filename (); ++ params[6] = build_current_lineno (); ++ ++ if (TREE_CODE (obj) == INTEGER_CST) ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_array_reference_obj", ++ bounds_check_array_reference_obj, ++ ¶ms[1], 6); ++ return build4 (ARRAY_REF, array_element_type, array, ++ function_call, NULL_TREE, NULL_TREE); ++ } ++ else ++ { ++ function_call = ++ bounds_build_function_call ("__bounds_check_array_reference", ++ bounds_check_array_reference, params, 7); ++ return build4 (ARRAY_REF, array_element_type, array, ++ function_call, NULL_TREE, NULL_TREE); ++ } ++} ++ ++int ++bounds_can_test_array_reference_now (tree array, tree index) ++{ ++ /* This is called before 'bounds_build_array_reference' to see if we can ++ test the array reference right now. If so, and it is outside bounds, ++ we give an error. We return 1 if we could do the test, 0 if the test ++ has to be done at run time. */ ++ tree min, max, min_is_ok, max_is_ok; ++ ++ if (!TREE_CONSTANT (index) ++ /* Make sure this is an array type, with known domain. */ ++ || TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE ++ || !TYPE_DOMAIN (TREE_TYPE (array)) ++ || !TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (array))) ++ || !TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (array)))) ++ return 0; ++ ++ /* See if we can get the array bounds now. */ ++ min = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (array))); ++ max = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (array))); ++ ++ /* See if we can evaluate the test now. ++ MIN_IS_OK := 'index' >= 'min' ++ MAX_IS_OK := 'index' <= 'max+1' ++ The +1 is added to allow 'int a[10]; int b=&a[10];'. */ ++ if (bounds_in_addr_expr) ++ max = build_binary_op (PLUS_EXPR, max, integer_one_node, 0); ++ min_is_ok = build_binary_op (GE_EXPR, index, min, 0); ++ max_is_ok = build_binary_op (LE_EXPR, index, max, 0); ++ ++ /* If we could do the comparison, and both expressions folded to constant ++ non-zero, then we have done the test, and we return 1. If either ++ expression was zero, there was a mistake. If the things couldn't be ++ folded, we return 0. */ ++ if (!min_is_ok || !max_is_ok ++ || TREE_CODE (min_is_ok) != INTEGER_CST ++ || TREE_CODE (max_is_ok) != INTEGER_CST) ++ return 0; ++ if (integer_zerop (min_is_ok) || integer_zerop (max_is_ok)) ++ error ("array expression is out of bounds"); ++ return 1; ++} ++ ++tree ++bounds_build_ptr_plus_int (enum tree_code resultcode, tree ptrop, tree intop, ++ tree size_exp) ++{ ++ tree result_type = TREE_TYPE (ptrop); ++ tree params[6]; ++ enum tree_code plus = PLUS_EXPR; ++ tree obj = maybe_find_object (ptrop); ++ tree new_obj = NULL_TREE, ptr = NULL_TREE; ++ tree intval = NULL_TREE, sizeval = NULL_TREE; ++ const char *name; ++ const char *name_obj; ++ tree tname; ++ tree tname_obj; ++ ++ if (resultcode == PLUS_EXPR) ++ { ++ name = "__bounds_check_ptr_plus_int"; ++ tname = bounds_check_ptr_plus_int; ++ name_obj = "__bounds_check_ptr_plus_int_obj"; ++ tname_obj = bounds_check_ptr_plus_int_obj; ++ } ++ else ++ { ++ name = "__bounds_check_ptr_minus_int"; ++ tname = bounds_check_ptr_minus_int; ++ name_obj = "__bounds_check_ptr_minus_int_obj"; ++ tname_obj = bounds_check_ptr_minus_int_obj; ++ } ++ ++ if (ptrop ++ && (TREE_CODE (ptrop) == CONVERT_EXPR || TREE_CODE (ptrop) == NOP_EXPR) ++ && TREE_CODE (TREE_OPERAND (ptrop, 0)) == CALL_EXPR) ++ { ++ tree call_expr = TREE_OPERAND (ptrop, 0); ++ const char *fn_name = ++ IDENTIFIER_POINTER (DECL_NAME ++ (TREE_OPERAND (TREE_OPERAND (call_expr, 0), 0))); ++ ++ if (fn_name[0] == '_' && fn_name[1] == '_' ++ && fn_name[2] == 'b' && fn_name[3] == 'o') ++ { ++ if (strcmp (fn_name, "__bounds_check_ptr_plus_int_obj") == 0 ++ || strcmp (fn_name, "__bounds_check_ptr_minus_int_obj") == 0) ++ { ++ plus = strcmp (fn_name, "__bounds_check_ptr_plus_int_obj") == 0 ++ ? PLUS_EXPR : MINUS_EXPR; ++ ptr = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ intval = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ sizeval = ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1)))); ++ } ++ else if (strcmp (fn_name, "__bounds_check_ptr_plus_int") == 0 ++ || strcmp (fn_name, "__bounds_check_ptr_minus_int") == 0) ++ { ++ plus = strcmp (fn_name, "__bounds_check_ptr_plus_int") == 0 ++ ? PLUS_EXPR : MINUS_EXPR; ++ new_obj = TREE_VALUE (TREE_OPERAND (call_expr, 1)); ++ ptr = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (call_expr, 1))); ++ intval = ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1)))); ++ sizeval = ++ TREE_VALUE (TREE_CHAIN ++ (TREE_CHAIN ++ (TREE_CHAIN (TREE_OPERAND (call_expr, 1))))); ++ } ++ } ++ } ++ ++ if (ptr ++ && TREE_CODE (size_exp) == INTEGER_CST ++ && TREE_CODE (sizeval) == INTEGER_CST ++ && TREE_INT_CST_HIGH (size_exp) == TREE_INT_CST_HIGH (sizeval) ++ && TREE_INT_CST_LOW (size_exp) == TREE_INT_CST_LOW (sizeval)) ++ { ++ intop = build_binary_op (plus == resultcode ? PLUS_EXPR : MINUS_EXPR, ++ intop, intval, 1); ++ ptrop = ptr; ++ if (new_obj) ++ obj = new_obj; ++ } ++ ++ params[0] = obj; ++ params[1] = build_c_cast (ptr_type_node, ptrop); ++ params[2] = build_c_cast (integer_type_node, intop); ++ params[3] = size_exp; ++ params[4] = build_current_filename (); ++ params[5] = build_current_lineno (); ++ ++ if (TREE_CODE (params[0]) != INTEGER_CST) ++ return build_c_cast (result_type, ++ bounds_build_function_call (name, tname, params, 6)); ++ else ++ return build_c_cast (result_type, ++ bounds_build_function_call (name_obj, tname_obj, ++ ¶ms[1], 5)); ++} ++ ++tree ++bounds_build_ptr_diff (tree op0, tree op1, tree target_type) ++{ ++ tree size_exp = c_size_in_bytes (target_type); ++ tree params[7]; ++ ++ op0 = save_expr (op0); ++ op1 = save_expr (op1); ++ params[0] = maybe_find_object (op0); ++ params[1] = maybe_find_object (op1); ++ params[2] = build_c_cast (ptr_type_node, op0); ++ params[3] = build_c_cast (ptr_type_node, op1); ++ params[4] = size_exp; ++ params[5] = build_current_filename (); ++ params[6] = build_current_lineno (); ++ ++ if (TREE_CODE (params[0]) != INTEGER_CST ++ || TREE_CODE (params[1]) != INTEGER_CST) ++ return bounds_build_function_call ("__bounds_check_ptr_diff", ++ bounds_check_ptr_diff, params, 7); ++ else ++ return bounds_build_function_call ("__bounds_check_ptr_diff_obj", ++ bounds_check_ptr_diff_obj, ++ ¶ms[2], 5); ++} ++ ++/* Build a pointer comparison operation. CODE will be one of LT_EXPR, ++ LE_EXPR, GE_EXPR, GT_EXPR, EQ_EXPR or NE_EXPR. RESULT_TYPE is the ++ type of the resulting expression. OP0 and OP1 are guaranteed to have ++ been promoted to pointers by this stage. */ ++tree ++bounds_build_comparison (enum tree_code code, tree result_type, ++ tree op0, tree op1) ++{ ++ tree params[6]; ++ const char *name; ++ const char *name_obj; ++ tree tname; ++ tree tname_obj; ++ ++ /* RESULT_TYPE must always be integer_type_node. */ ++ if (result_type != integer_type_node) ++ abort (); ++ ++ /* Decide which function we'll be calling here. */ ++ switch (code) ++ { ++ case LT_EXPR: ++ name = "__bounds_check_ptr_lt_ptr"; ++ tname = bounds_check_ptr_lt_ptr; ++ name_obj = "__bounds_check_ptr_lt_ptr_obj"; ++ tname_obj = bounds_check_ptr_lt_ptr_obj; ++ break; ++ case LE_EXPR: ++ name = "__bounds_check_ptr_le_ptr"; ++ tname = bounds_check_ptr_le_ptr; ++ name_obj = "__bounds_check_ptr_le_ptr_obj"; ++ tname_obj = bounds_check_ptr_le_ptr_obj; ++ break; ++ case GE_EXPR: ++ name = "__bounds_check_ptr_ge_ptr"; ++ tname = bounds_check_ptr_ge_ptr; ++ name_obj = "__bounds_check_ptr_ge_ptr_obj"; ++ tname_obj = bounds_check_ptr_ge_ptr_obj; ++ break; ++ case GT_EXPR: ++ name = "__bounds_check_ptr_gt_ptr"; ++ tname = bounds_check_ptr_gt_ptr; ++ name_obj = "__bounds_check_ptr_gt_ptr_obj"; ++ tname_obj = bounds_check_ptr_gt_ptr_obj; ++ break; ++ case EQ_EXPR: ++ name = "__bounds_check_ptr_eq_ptr"; ++ tname = bounds_check_ptr_eq_ptr; ++ name_obj = NULL; ++ tname_obj = NULL_TREE; ++ break; ++ case NE_EXPR: ++ name = "__bounds_check_ptr_ne_ptr"; ++ tname = bounds_check_ptr_ne_ptr; ++ name_obj = NULL; ++ tname_obj = NULL_TREE; ++ break; ++ default: ++ abort (); ++ } ++ ++ if (code == EQ_EXPR || code == NE_EXPR) ++ { ++ op0 = save_expr (op0); ++ op1 = save_expr (op1); ++ params[0] = build_c_cast (ptr_type_node, op0); ++ params[1] = build_c_cast (ptr_type_node, op1); ++ params[2] = build_current_filename (); ++ params[3] = build_current_lineno (); ++ ++ return bounds_build_function_call (name, tname, params, 4); ++ } ++ else ++ { ++ op0 = save_expr (op0); ++ op1 = save_expr (op1); ++ params[0] = maybe_find_object (op0); ++ params[1] = maybe_find_object (op1); ++ params[2] = build_c_cast (ptr_type_node, op0); ++ params[3] = build_c_cast (ptr_type_node, op1); ++ params[4] = build_current_filename (); ++ params[5] = build_current_lineno (); ++ ++ if (TREE_CODE (params[0]) != INTEGER_CST ++ || TREE_CODE (params[1]) != INTEGER_CST) ++ return bounds_build_function_call (name, tname, params, 6); ++ else ++ return bounds_build_function_call (name_obj, tname_obj, ++ ¶ms[2], 4); ++ } ++} ++ ++/* Build a pre- or post-, inc- or decrement expression. TYPE is the pointer ++ type. ARG is the pointer itself. INC is the actual increment amount. ++ For 'p++' we build: ++ (type*) __bounds_check_ptr_postinc (&p, inc, ...); ++ (type*) __bounds_check_ptr_preinc (&p, inc, ...); ++ */ ++tree ++bounds_build_inc_or_dec (enum tree_code code, tree type, tree arg, tree inc) ++{ ++ tree params[5]; ++ const char *name; ++ const char *name_obj; ++ tree tname; ++ tree tname_obj; ++ ++ if (DECL_P (arg)) ++ DECL_REGISTER (arg) = 0; ++ c_mark_addressable (arg); ++ ++ switch (code) ++ { ++ case POSTINCREMENT_EXPR: ++ name = "__bounds_check_ptr_postinc"; ++ tname = bounds_check_ptr_postinc; ++ name_obj = "__bounds_check_ptr_postinc_obj"; ++ tname_obj = bounds_check_ptr_postinc_obj; ++ break; ++ case PREINCREMENT_EXPR: ++ name = "__bounds_check_ptr_preinc"; ++ tname = bounds_check_ptr_preinc; ++ name_obj = "__bounds_check_ptr_preinc_obj"; ++ tname_obj = bounds_check_ptr_preinc_obj; ++ break; ++ case POSTDECREMENT_EXPR: ++ name = "__bounds_check_ptr_postdec"; ++ tname = bounds_check_ptr_postdec; ++ name_obj = "__bounds_check_ptr_postdec_obj"; ++ tname_obj = bounds_check_ptr_postdec_obj; ++ break; ++ case PREDECREMENT_EXPR: ++ name = "__bounds_check_ptr_predec"; ++ tname = bounds_check_ptr_predec; ++ name_obj = "__bounds_check_ptr_predec_obj"; ++ tname_obj = bounds_check_ptr_predec_obj; ++ break; ++ default: ++ abort (); ++ } ++ ++ params[0] = maybe_find_object (arg); ++ params[1] = build_c_cast (build_pointer_type (ptr_type_node), ++ build1 (ADDR_EXPR, ++ build_pointer_type (TREE_TYPE (arg)), ++ build_c_cast (ptr_type_node, arg))); ++ params[2] = build_c_cast (integer_type_node, inc); ++ params[3] = build_current_filename (); ++ params[4] = build_current_lineno (); ++ ++ if (TREE_CODE (params[0]) != INTEGER_CST) ++ return build_c_cast (type, bounds_build_function_call (name, tname, ++ params, 5)); ++ else ++ return build_c_cast (type, ++ bounds_build_function_call (name_obj, tname_obj, ++ ¶ms[1], 4)); ++} ++ ++/* Build the truthvalue of a pointer expression, eg. `if (ptr)'. We build ++ a call to __bounds_check_ptr_true (ptr, filename, line); The return type ++ is int. */ ++tree ++bounds_build_truthvalue_conversion (tree arg) ++{ ++ tree params[3]; ++ ++ arg = save_expr (arg); ++ params[0] = build_c_cast (ptr_type_node, default_conversion (arg)); ++ params[1] = build_current_filename (); ++ params[2] = build_current_lineno (); ++ ++ return bounds_build_function_call ("__bounds_check_ptr_true", ++ bounds_check_ptr_true, params, 3); ++} ++ ++/* Build the invert truthvalue of a pointer expression, ie. `!ptr'. We build ++ a call to __bounds_check_ptr_false (ptr, filename, line); The return type ++ is int. */ ++tree ++bounds_build_invert_truthvalue (tree arg) ++{ ++ tree params[3]; ++ ++ arg = save_expr (arg); ++ params[0] = build_c_cast (ptr_type_node, default_conversion (arg)); ++ params[1] = build_current_filename (); ++ params[2] = build_current_lineno (); ++ ++ return bounds_build_function_call ("__bounds_check_ptr_false", ++ bounds_check_ptr_false, params, 3); ++} ++ ++/* This function is called just after the function's arguments have been ++ processed. We here build extra code at the start and end of the function ++ to find the function's arguments, and if the function is main, to find ++ the program's argument list. A side effect of this call is that an ++ extra block level will be built around the function. As an example: ++ f (int a, char b) { ... } ++ becomes: ++ f (int a, char b) ++ { ++ __bounds_push_function ("f", 0, ...); ++ __bounds_add_param_object (&a, 4, 4, file, line, "a"); ++ __bounds_add_param_object (&b, 1, 1, file, line, "b"); ++ { ++ previous function code here ... ++ } ++ __bounds_pop_function ("f"); ++ } ++ */ ++ ++void ++bounds_build_args (void) ++{ ++ tree params[7], function_call, arg, cleanup_expr, cleanup_params[2]; ++ ++ /* This is the current function declaration. */ ++ tree fndecl = current_function_decl; ++ ++ /* This is the list of arguments of the current function. */ ++ tree args = DECL_ARGUMENTS (fndecl); ++ ++ /* This is the name of the function. */ ++ const char *function_name; ++ ++ /* True if this is main (). */ ++ int in_main; ++ ++ /* Some checks here ... */ ++ if (!DECL_NAME (fndecl)) ++ { ++ error ("can't have unnamed functions in bounds checked code"); ++ return; ++ } ++ ++ /* Get the function name. Determine if it's `main'. */ ++ in_main = DECL_NAME (fndecl) ++ && MAIN_NAME_P (DECL_NAME (fndecl)) && DECL_FILE_SCOPE_P (fndecl); ++ ++ current_function_bounds_nr = declare_function_number_var (); ++ ++ /* Make sure that '__bounds_pop_function' gets called if we leave this ++ function early. */ ++ ++ function_name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl)); ++ cleanup_params[0] = bounds_build_string (function_name); ++ cleanup_params[1] = current_function_bounds_nr; ++ cleanup_expr = bounds_build_function_call ("__bounds_pop_function", ++ bounds_pop_function, ++ cleanup_params, 2); ++ push_cleanup (NULL_TREE, cleanup_expr, false); ++ ++ /* Build a call to __bounds_push_function with the function name and the ++ source file/line it appears at. The matching '__bounds_pop_function' will ++ delete all unmatched stack objects when the function exits. */ ++ params[0] = bounds_build_string (function_name); ++ params[1] = build_int_cst (NULL_TREE, in_main); ++ params[2] = build_current_filename (); ++ params[3] = build_current_lineno (); ++ function_call = build_modify_expr (current_function_bounds_nr, NOP_EXPR, ++ bounds_build_function_call ++ ("__bounds_push_function", ++ bounds_push_function, params, 4)); ++ add_stmt (function_call); ++ ++ /* Note the locations of the function parameters now. */ ++ for (arg = args; arg; arg = TREE_CHAIN (arg)) ++ { ++ tree size_exp, ptr, alignment, type; ++ enum tree_code code; ++ int addressable = TREE_ADDRESSABLE (arg); ++ ++ /* Make sure that the parameter gets a stack slot and doesn't stay in ++ a register. Setting DECL_REGISTER to 0 avoids warning messages if ++ the parameter is actually declared `register'. */ ++ ++ /* Build a call to __bounds_add_param_object (...) which is just a ++ wrapper around __bounds_add_stack_object and takes the same args. */ ++ type = TREE_TYPE (arg); ++ code = TREE_CODE (type); ++ ++ /* If this is `main' and this is a PARM_DECL associated with a call ++ to a `__bounds_add_param_object' then mark it addressable so it ++ doesn't get deleted. */ ++ if (in_main) ++ { ++ DECL_REGISTER (arg) = 0; ++ c_mark_addressable (arg); ++ addressable = 1; ++ } ++ ++ size_exp = c_size_in_bytes (type); ++ switch (code) ++ { ++ case ARRAY_TYPE: ++ { ++ enum tree_code type_code; ++ ptr = bounds_pointer_from_array (arg); ++ type_code = TREE_CODE (TREE_TYPE (TREE_TYPE (ptr))); ++ if (type_code != RECORD_TYPE && type_code != UNION_TYPE && ++ type_code != QUAL_UNION_TYPE) ++ alignment = c_size_in_bytes (TREE_TYPE (TREE_TYPE (ptr))); ++ else ++ alignment = integer_one_node; ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), arg); ++ break; ++ } ++ case RECORD_TYPE: ++ case UNION_TYPE: ++ case QUAL_UNION_TYPE: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), arg); ++ alignment = integer_one_node; ++ break; ++ default: ++ ptr = build1 (ADDR_EXPR, build_pointer_type (type), arg); ++ alignment = size_exp; ++ break; ++ } ++ ++ add_object (arg, PARM_DECL); ++ ++ params[0] = build_c_cast (ptr_type_node, ptr); ++ params[1] = size_exp; ++ params[2] = alignment; ++ params[3] = build_decl_filename (arg); ++ params[4] = build_decl_lineno (arg); ++ params[5] = bounds_build_string (IDENTIFIER_POINTER (DECL_NAME (arg))); ++ params[6] = current_function_bounds_nr; ++ ++ function_call = bounds_build_function_call ("__bounds_add_param_object", ++ bounds_add_param_object, ++ params, 7); ++ TREE_ADDRESSABLE (arg) = addressable; ++ ++ add_stmt (function_call); ++ } ++} ++ ++ ++/* Build a node containing the current line number and current input file- ++ name. */ ++static tree ++build_current_lineno (void) ++{ ++ return build_int_cst (NULL_TREE, input_line); ++} ++ ++static tree ++build_current_filename (void) ++{ ++ return bounds_build_string (input_filename); ++} ++ ++/* `build_string' wrapper that sets TREE_TYPE and other things correctly. We ++ can build strings like the input_filename over and over again, and GCC will ++ optimize them to a single instance in the output file. */ ++static tree ++bounds_build_string (const char *str) ++{ ++ int len; ++ tree t; ++ ++ len = strlen (str); ++ t = build_string (len + 1, str); ++ TREE_TYPE (t) = build_array_type (char_type_node, ++ build_index_type (build_int_cst ++ (NULL_TREE, len))); ++ TREE_CONSTANT (t) = 1; /* put it in the text segment */ ++ TREE_READONLY (t) = 1; ++ TREE_INVARIANT (t) = 1; ++ TREE_STATIC (t) = 1; /* don't share it */ ++ ++ return default_conversion (t); ++} ++ ++/* Build a node containing the decl's line number and source file. */ ++static tree ++build_decl_lineno (tree decl) ++{ ++ return build_int_cst (NULL_TREE, DECL_SOURCE_LINE (decl)); ++} ++ ++static tree ++build_decl_filename (tree decl) ++{ ++ return bounds_build_string (DECL_SOURCE_FILE (decl)); ++} ++ ++/* Build function call with parameters. n >= 0. */ ++static tree ++bounds_build_function_call (const char *name, tree decl, ++ tree * params, int n) ++{ ++ tree paramlist, function_name, function_decl; ++ int i; ++ ++ if (n > 0) ++ { ++ /* Chain the parameters together in reverse order. */ ++ paramlist = build_tree_list (NULL_TREE, params[n - 1]); ++ for (i = n - 2; i >= 0; --i) ++ paramlist = ++ chainon (build_tree_list (NULL_TREE, params[i]), paramlist); ++ } ++ else ++ paramlist = NULL_TREE; ++ ++ /* Look up function name and get the declaration of it. */ ++ function_name = get_identifier (name); ++ if (function_name == NULL_TREE) ++ function_decl = NULL_TREE; ++ else ++ function_decl = lookup_name (function_name); ++ ++ if (function_decl == NULL_TREE) ++ function_decl = decl; ++ ++ /* Return function_call (...); */ ++ return build_function_call (function_decl, paramlist); ++} ++ ++/* From a decl which has type array, get a pointer to the first element that ++ has type the primary array element type. ++ eg. int a[10][5]; would return a pointer to an int. ++ For 1D arrays, this is identical to `default_conversion'. */ ++static tree ++bounds_pointer_from_array (tree decl) ++{ ++ tree ptr, type; ++ ++ if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE) ++ abort (); ++ ++ /* Get the correct pointer, but we will change its type in a minute. */ ++ ptr = default_conversion (decl); ++ ++ type = TREE_TYPE (decl); ++ while (TREE_CODE (type) == ARRAY_TYPE) ++ type = TREE_TYPE (type); ++ ++ /* Type should now be the type of the fundamental elements (eg. int). Build ++ a pointer to that. */ ++ TREE_TYPE (ptr) = build_pointer_type (type); ++ ++ return ptr; ++} ++ ++/* Similar to the above function, but build the pointer type from the array ++ type directly. */ ++static tree ++bounds_pointer_from_array_type (tree type) ++{ ++ if (TREE_CODE (type) != ARRAY_TYPE) ++ abort (); ++ ++ while (TREE_CODE (type) == ARRAY_TYPE) ++ type = TREE_TYPE (type); ++ ++ /* Type should now be the type of the fundamental elements (eg. int). Build ++ a pointer to that. */ ++ return build_pointer_type (type); ++} ++ ++/* Returns a pointer to the element type of this array type. ++ Note this is different from the two functions above as it doesnt recurse ++ down to the basic types. Therefore given int a[4][4][4] it will return ++ pointer to int[][]. */ ++ ++static tree ++bounds_pointer_from_array_ref (tree type) ++{ ++ if (TREE_CODE (TREE_TYPE (TREE_OPERAND (type, 0))) != ARRAY_TYPE) ++ abort (); ++ ++ type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (type, 0))); ++ ++ return build_pointer_type (type); ++} ++ ++#ifdef __GNUC__ ++__inline ++#endif ++const char *bounds_lookup ++PARAMS ((register const char *, register unsigned int)); ++ ++/* Change malloc and friends into __bounds_check functions */ ++void ++bounds_convert_funcname (tree * function, tree * params) ++{ ++ if (function && params && *function ++ && TREE_CODE (*function) == FUNCTION_DECL) ++ { ++ tree name, function_name, function_decl, paramlist; ++ const char *fn_name; ++ char new_name[100]; ++ ++ name = DECL_NAME (*function); ++ fn_name = IDENTIFIER_POINTER (name); ++ ++ if (bounds_lookup (fn_name, strlen (fn_name))) ++ { ++ if (!strcmp (fn_name, "alloca") ++ || !strcmp (fn_name, "__alloca") ++ || !strcmp (fn_name, "__builtin_alloca")) ++ current_function_calls_alloca = 1; ++ strcpy (new_name, "__bounds_check_"); ++ strcat (new_name, fn_name); ++ function_name = get_identifier (new_name); ++ function_decl = lookup_name (function_name); ++ *function = function_decl; ++ if (*params == NULL_TREE) ++ paramlist = build_tree_list (NULL_TREE, build_current_lineno ()); ++ else ++ paramlist = chainon (build_tree_list (NULL_TREE, ++ build_current_lineno ()), ++ *params); ++ paramlist = chainon (build_tree_list (NULL_TREE, ++ build_current_filename ()), ++ paramlist); ++ *params = paramlist; ++ } ++ } ++} ++ ++/* In the future generate seprate files for these two functions. */ ++ ++/* Input for gperf ++malloc ++free ++realloc ++memalign ++calloc ++valloc ++alloca ++__builtin_alloca ++__alloca ++mmap ++munmap ++memcpy ++mempcpy ++memmove ++bcopy ++memset ++bzero ++memcmp ++bcmp ++strcpy ++strncpy ++strlen ++strcmp ++strncmp ++strcat ++strncat ++strpbrk ++strrchr ++rindex ++strspn ++strcspn ++strstr ++strtok ++strtok_r ++strchr ++strdup ++index ++strcoll ++strxfrm ++memchr ++memccpy ++strcasecmp ++strncasecmp ++*/ ++ ++/* C code produced by gperf version 3.0.1 */ ++/* Command-line: gperf -k'1,4,$' -H bounds_hash -N bounds_lookup names.gperf */ ++ ++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ ++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ ++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ ++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ ++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ ++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ ++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ ++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ ++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ ++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ ++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ ++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ ++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ ++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ ++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ ++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ ++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ ++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ ++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ ++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ ++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ ++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ ++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) ++/* The character set is not based on ISO-646. */ ++error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." ++#endif ++ ++ ++#define TOTAL_KEYWORDS 43 ++#define MIN_WORD_LENGTH 4 ++#define MAX_WORD_LENGTH 16 ++#define MIN_HASH_VALUE 6 ++#define MAX_HASH_VALUE 107 ++/* maximum key range = 102, duplicates = 0 */ ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static unsigned int ++bounds_hash (const char *str, unsigned int len) ++{ ++ static unsigned char asso_values[] = ++ { ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 0, 108, 0, 10, 15, ++ 36, 35, 0, 108, 108, 0, 108, 10, 55, 5, ++ 0, 25, 0, 108, 30, 0, 55, 21, 10, 108, ++ 0, 20, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, ++ 108, 108, 108, 108, 108, 108 ++ }; ++ return len + asso_values[(unsigned char)str[3]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]]; ++} ++ ++#ifdef __GNUC__ ++__inline ++#endif ++const char * ++bounds_lookup (const char *str, unsigned int len) ++{ ++ static const char * wordlist[] = ++ { ++ "", "", "", "", "", "", ++ "strspn", ++ "strncmp", ++ "", ++ "mmap", ++ "", ++ "strncasecmp", ++ "strxfrm", ++ "memalign", ++ "bcmp", ++ "", ++ "munmap", ++ "strpbrk", ++ "", "", "", ++ "strcmp", ++ "strcspn", ++ "", "", ++ "strcasecmp", ++ "memcmp", ++ "strncpy", ++ "", "", "", ++ "alloca", ++ "mempcpy", ++ "", "", ++ "bcopy", ++ "strstr", ++ "__builtin_alloca", ++ "", "", ++ "index", ++ "strcpy", ++ "strdup", ++ "", "", "", ++ "memcpy", ++ "memccpy", ++ "", "", "", ++ "strchr", ++ "memmove", ++ "", "", "", ++ "memchr", ++ "", "", "", "", ++ "strlen", ++ "strncat", ++ "__alloca", ++ "", "", ++ "memset", ++ "strrchr", ++ "", "", ++ "bzero", ++ "strtok", ++ "rindex", ++ "", ++ "free", ++ "", ++ "strcat", ++ "strcoll", ++ "", "", "", ++ "malloc", ++ "", "", "", "", ++ "valloc", ++ "", "", "", "", ++ "calloc", ++ "", ++ "strtok_r", ++ "", "", "", "", "", "", "", "", "", ++ "", "", "", "", ++ "realloc" ++ }; ++ ++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) ++ { ++ register int key = bounds_hash (str, len); ++ ++ if (key <= MAX_HASH_VALUE && key >= 0) ++ { ++ register const char *s = wordlist[key]; ++ ++ if (*str == *s && !strcmp (str + 1, s + 1)) ++ return s; ++ } ++ } ++ return 0; ++} ++ ++#undef TOTAL_KEYWORDS ++#undef MIN_WORD_LENGTH ++#undef MAX_WORD_LENGTH ++#undef MIN_HASH_VALUE ++#undef MAX_HASH_VALUE ++ ++/* Input for gperf ++__bounds_check_array_reference ++__bounds_check_array_reference_obj ++__bounds_check_component_reference ++__bounds_check_component_reference_obj ++__bounds_check_ptr_diff ++__bounds_check_ptr_diff_obj ++__bounds_check_ptr_eq_ptr ++__bounds_check_ptr_false ++__bounds_check_ptr_false_obj ++__bounds_check_ptr_ge_ptr ++__bounds_check_ptr_ge_ptr_obj ++__bounds_check_ptr_gt_ptr ++__bounds_check_ptr_gt_ptr_obj ++__bounds_check_ptr_le_ptr ++__bounds_check_ptr_le_ptr_obj ++__bounds_check_ptr_lt_ptr ++__bounds_check_ptr_lt_ptr_obj ++__bounds_check_ptr_minus_int ++__bounds_check_ptr_minus_int_obj ++__bounds_check_ptr_ne_ptr ++__bounds_check_ptr_plus_int ++__bounds_check_ptr_plus_int_obj ++__bounds_check_ptr_postdec ++__bounds_check_ptr_postdec_obj ++__bounds_check_ptr_postdec_ref ++__bounds_check_ptr_postdec_ref_obj ++__bounds_check_ptr_postinc ++__bounds_check_ptr_postinc_obj ++__bounds_check_ptr_postinc_ref ++__bounds_check_ptr_postinc_ref_obj ++__bounds_check_ptr_predec ++__bounds_check_ptr_predec_obj ++__bounds_check_ptr_predec_ref ++__bounds_check_ptr_predec_ref_obj ++__bounds_check_ptr_preinc ++__bounds_check_ptr_preinc_obj ++__bounds_check_ptr_preinc_ref ++__bounds_check_ptr_preinc_ref_obj ++__bounds_check_ptr_true ++__bounds_check_ptr_true_obj ++__bounds_check_reference ++__bounds_check_reference_obj ++*/ ++ ++/* C code produced by gperf version 3.0.1 */ ++/* Command-line: gperf -k'20,21,24,$' -H bounds_func_hash -N bounds_func_lookup names.gperf */ ++ ++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ ++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ ++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ ++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ ++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ ++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ ++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ ++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ ++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ ++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ ++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ ++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ ++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ ++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ ++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ ++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ ++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ ++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ ++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ ++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ ++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ ++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ ++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) ++/* The character set is not based on ISO-646. */ ++error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." ++#endif ++ ++ ++#define TOTAL_KEYWORDS 42 ++#define MIN_WORD_LENGTH 23 ++#define MAX_WORD_LENGTH 38 ++#define MIN_HASH_VALUE 27 ++#define MAX_HASH_VALUE 110 ++/* maximum key range = 84, duplicates = 0 */ ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static unsigned int ++bounds_func_hash (const char *str, unsigned int len) ++{ ++ static unsigned char asso_values[] = ++ { ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 0, 111, 0, 111, 5, ++ 15, 5, 30, 6, 111, 0, 0, 111, 60, 5, ++ 0, 20, 15, 25, 0, 0, 0, 111, 111, 111, ++ 111, 35, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, ++ 111, 111, 111, 111, 111, 111 ++ }; ++ register int hval = len; ++ ++ switch (hval) ++ { ++ default: ++ hval += asso_values[(unsigned char)str[23]]; ++ /*FALLTHROUGH*/ ++ case 23: ++ case 22: ++ case 21: ++ hval += asso_values[(unsigned char)str[20]]; ++ /*FALLTHROUGH*/ ++ case 20: ++ hval += asso_values[(unsigned char)str[19]]; ++ break; ++ } ++ return hval + asso_values[(unsigned char)str[len - 1]]; ++} ++ ++#ifdef __GNUC__ ++__inline ++#endif ++const char * ++bounds_func_lookup (const char *str, unsigned int len) ++{ ++ static const char * wordlist[] = ++ { ++ "", "", "", "", "", "", "", "", "", ++ "", "", "", "", "", "", "", "", "", ++ "", "", "", "", "", "", "", "", "", ++ "__bounds_check_ptr_true_obj", ++ "__bounds_check_ptr_true", ++ "", ++ "__bounds_check_ptr_ne_ptr", ++ "__bounds_check_ptr_gt_ptr", ++ "", ++ "__bounds_check_ptr_minus_int", ++ "", ++ "__bounds_check_ptr_gt_ptr_obj", ++ "__bounds_check_ptr_ge_ptr", ++ "__bounds_check_ptr_minus_int_obj", ++ "__bounds_check_reference_obj", ++ "__bounds_check_reference", ++ "__bounds_check_ptr_ge_ptr_obj", ++ "", ++ "__bounds_check_ptr_diff_obj", ++ "", ++ "__bounds_check_ptr_preinc_obj", ++ "__bounds_check_ptr_preinc", ++ "", "", ++ "__bounds_check_ptr_preinc_ref_obj", ++ "__bounds_check_ptr_predec_obj", ++ "__bounds_check_ptr_predec", ++ "", "", ++ "__bounds_check_ptr_predec_ref_obj", ++ "", ++ "__bounds_check_ptr_eq_ptr", ++ "", "", ++ "__bounds_check_component_reference_obj", ++ "__bounds_check_component_reference", ++ "", "", "", ++ "__bounds_check_ptr_false_obj", ++ "__bounds_check_ptr_false", ++ "__bounds_check_ptr_postinc_obj", ++ "__bounds_check_ptr_postinc", ++ "", ++ "__bounds_check_ptr_diff", ++ "__bounds_check_ptr_postinc_ref_obj", ++ "", "", "", "", ++ "__bounds_check_ptr_preinc_ref", ++ "", "", "", "", ++ "__bounds_check_ptr_predec_ref", ++ "__bounds_check_ptr_postdec_obj", ++ "__bounds_check_ptr_postdec", ++ "", "", ++ "__bounds_check_ptr_postdec_ref_obj", ++ "__bounds_check_ptr_lt_ptr", ++ "", "", "", ++ "__bounds_check_ptr_lt_ptr_obj", ++ "__bounds_check_ptr_le_ptr", ++ "", "", "", ++ "__bounds_check_ptr_le_ptr_obj", ++ "__bounds_check_ptr_postinc_ref", ++ "", "", "", ++ "__bounds_check_array_reference_obj", ++ "__bounds_check_array_reference", ++ "", ++ "__bounds_check_ptr_plus_int", ++ "", "", "", ++ "__bounds_check_ptr_plus_int_obj", ++ "", "", "", ++ "__bounds_check_ptr_postdec_ref" ++ }; ++ ++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) ++ { ++ register int key = bounds_func_hash (str, len); ++ ++ if (key <= MAX_HASH_VALUE && key >= 0) ++ { ++ register const char *s = wordlist[key]; ++ ++ if (*str == *s && !strcmp (str + 1, s + 1)) ++ return s; ++ } ++ } ++ return 0; ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-bounds.h gcc-4.0.2/gcc/c-bounds.h +--- gcc-4.0.2.org/gcc/c-bounds.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/c-bounds.h 2005-09-29 17:50:03.000000000 +0200 +@@ -0,0 +1,59 @@ ++/* Miscellaneous functions for bounds checking. ++ Written by Richard W.M. Jones <rjones@orchestream.com>. ++ Copyright (C) 1995 Richard W.M. Jones. ++ ++This file is part of the bounds checking patches for GNU CC. The main ++body of code used at run time can be found in the `bounds/' subdirectory. ++ ++GNU CC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GNU CC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GNU CC; see the file COPYING. If not, write to ++the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#ifndef _C_BOUNDS_H ++#define _C_BOUNDS_H ++ ++void bounds_init (void); ++tree bounds_check_assignment (tree, tree, tree); ++void bounds_external_declaration (tree *, int); ++void bounds_build_static_constructors (void); ++void bounds_frig_decl_initial (tree); ++void bounds_delete_redundant_calls (tree); ++tree bounds_cancel_address_expr (tree); ++tree bounds_build_reference (tree); ++tree bounds_build_array_reference (tree, tree); ++int bounds_can_test_array_reference_now (tree, tree); ++tree bounds_build_ptr_plus_int (enum tree_code, tree, tree, tree); ++tree bounds_build_ptr_diff (tree, tree, tree); ++tree bounds_build_comparison (enum tree_code, tree, tree, tree); ++tree bounds_build_inc_or_dec (enum tree_code, tree, tree, tree); ++tree bounds_build_invert_truthvalue (tree); ++tree bounds_build_truthvalue_conversion (tree); ++tree bounds_build_component_ref (tree, tree); ++tree bounds_build_component_indirect_ref (tree, tree); ++void bounds_build_args (void); ++void bounds_convert_funcname (tree * function, tree * params); ++void bounds_assemble_private_statics_table (void); ++void bounds_mark_for_runtime_check (tree); ++void bounds_reorder_expr (tree); ++void bounds_register_decl(tree); ++ ++extern int bounds_checking_enabled_initial; ++extern int bounds_checking_enabled; ++extern int bounds_strings_only_enabled; ++extern int bounds_disable_field_check; ++extern int bounds_in_static_decl; ++extern int bounds_reentrant_defined; ++extern int bounds_in_addr_expr; ++extern char *bounds_constructor_name; ++ ++#endif /* _C_BOUNDS_H */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-common.c gcc-4.0.2/gcc/c-common.c +--- gcc-4.0.2.org/gcc/c-common.c 2005-09-01 18:46:46.000000000 +0200 ++++ gcc-4.0.2/gcc/c-common.c 2005-09-29 17:50:03.000000000 +0200 +@@ -47,6 +47,7 @@ Software Foundation, 59 Temple Place - S + #include "tree-mudflap.h" + #include "opts.h" + #include "real.h" ++#include "c-bounds.h" + + cpp_reader *parse_in; /* Declared in c-pragma.h. */ + +@@ -1131,6 +1132,12 @@ warn_for_collisions_1 (tree written, tre + { + struct tlist *tmp; + ++ /* In bounds checking we may generate two calls to bounds_find_object ++ in the same statement for the same value. The return will be the ++ same so ignore this warning. */ ++ if (bounds_checking_enabled && optimize > 2) ++ return; ++ + /* Avoid duplicate warnings. */ + for (tmp = warned_ids; tmp; tmp = tmp->next) + if (tmp->expr == written) +@@ -2260,6 +2267,18 @@ pointer_int_sum (enum tree_code resultco + else + size_exp = size_in_bytes (TREE_TYPE (result_type)); + ++ /* For bounds checked code, we have all the information necessary to ++ generate the function call here. We generate the call ++ __bounds_check_ptr_plus_int (void *pointer, int offset, size_t size, ++ int is_plus, char *filename, int line); ++ where pointer is the pointer value, offset is the int operand, size ++ is the size_exp, is_plus is resultcode == PLUS_EXPR, etc. */ ++ if (bounds_checking_enabled ++ && !bounds_in_static_decl ++ && (!bounds_strings_only_enabled || ++ TYPE_NAME (char_type_node) == TYPE_NAME (TREE_TYPE (result_type)))) ++ return bounds_build_ptr_plus_int (resultcode, ptrop, intop, size_exp); ++ + /* If what we are about to multiply by the size of the elements + contains a constant term, apply distributive law + and multiply that constant term separately. +@@ -2492,6 +2511,20 @@ c_common_truthvalue_conversion (tree exp + 0)); + } + ++ /* In bounds checking mode, if we evaluate the truthvalue of a pointer we ++ want to check the pointer is not ILLEGAL or otherwise invalid. We build ++ the necessary code here. */ ++ if (bounds_checking_enabled) ++ { ++ enum tree_code code = TREE_CODE (TREE_TYPE (expr)); ++ if (((code == POINTER_TYPE || code == ARRAY_TYPE) ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (char_type_node) == ++ TYPE_NAME (TREE_TYPE (TREE_TYPE (expr))))) ++ || code == FUNCTION_TYPE) ++ return bounds_build_truthvalue_conversion (expr); ++ } ++ + return build_binary_op (NE_EXPR, expr, integer_zero_node, 1); + } + +@@ -3275,6 +3308,9 @@ c_common_nodes_and_builtins (void) + if (flag_mudflap) + mudflap_init (); + ++ if (bounds_checking_enabled) ++ bounds_init (); ++ + main_identifier_node = get_identifier ("main"); + + /* Create the built-in __null node. It is important that this is +@@ -5725,7 +5761,8 @@ fold_offsetof_1 (tree expr) + return base; + + t = TREE_OPERAND (expr, 1); +- if (DECL_C_BIT_FIELD (t)) ++ if (bounds_disable_field_check ? DECL_BIT_FIELD (t) ++ : DECL_C_BIT_FIELD (t)) + { + error ("attempt to take address of bit-field structure " + "member %qs", IDENTIFIER_POINTER (DECL_NAME (t))); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-common.h gcc-4.0.2/gcc/c-common.h +--- gcc-4.0.2.org/gcc/c-common.h 2005-07-11 16:28:39.000000000 +0200 ++++ gcc-4.0.2/gcc/c-common.h 2005-09-29 17:50:03.000000000 +0200 +@@ -828,6 +828,8 @@ extern tree default_conversion (tree); + + extern tree common_type (tree, tree); + ++extern tree c_size_in_bytes (tree); ++ + extern tree decl_constant_value (tree); + + /* Handle increment and decrement of boolean types. */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-decl.c gcc-4.0.2/gcc/c-decl.c +--- gcc-4.0.2.org/gcc/c-decl.c 2005-09-09 02:51:44.000000000 +0200 ++++ gcc-4.0.2/gcc/c-decl.c 2005-09-29 17:50:04.000000000 +0200 +@@ -60,6 +60,7 @@ Software Foundation, 59 Temple Place - S + #include "libfuncs.h" + #include "except.h" + #include "langhooks-def.h" ++#include "c-bounds.h" + + /* In grokdeclarator, distinguish syntactic contexts of declarators. */ + enum decl_context +@@ -3540,6 +3541,13 @@ finish_decl (tree decl, tree init, tree + push_cleanup (decl, cleanup, false); + } + } ++ ++ /* In bounds checking mode, if this is a local variable declaration, then ++ we create or alter the initializer so that it has the side effect of ++ calling __bounds_add_stack_object. */ ++ if (bounds_checking_enabled) ++ bounds_frig_decl_initial (decl); ++ + } + + /* Given a parsed parameter declaration, decode it into a PARM_DECL. */ +@@ -6566,6 +6574,17 @@ finish_function (void) + { + if (!decl_function_context (fndecl)) + { ++ /* We now have the function. In bounds checking mode we want to ++ delete redundant calls to: ++ __bounds_push_function ++ __bounds_pop_function ++ __bounds_add_param_object ++ __bounds_add_stack_object ++ __bounds_delete_stack_object ++ if it turns out that these are unnecessary in this function. */ ++ if (bounds_checking_enabled) ++ bounds_delete_redundant_calls (fndecl); ++ + c_genericize (fndecl); + c_warn_unused_result_recursively (fndecl); + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/cfgexpand.c gcc-4.0.2/gcc/cfgexpand.c +--- gcc-4.0.2.org/gcc/cfgexpand.c 2005-08-18 11:50:51.000000000 +0200 ++++ gcc-4.0.2/gcc/cfgexpand.c 2005-09-29 17:50:04.000000000 +0200 +@@ -37,6 +37,7 @@ Boston, MA 02111-1307, USA. */ + #include "flags.h" + #include "diagnostic.h" + #include "toplev.h" ++#include "c-bounds.h" + + /* Verify that there is exactly single jump instruction since last and attach + REG_BR_PROB note specifying probability. +@@ -173,6 +174,9 @@ alloc_stack_frame_space (HOST_WIDE_INT s + { + HOST_WIDE_INT offset, new_frame_offset; + ++ if (bounds_checking_enabled) ++ size += align; ++ + new_frame_offset = frame_offset; + if (FRAME_GROWS_DOWNWARD) + { +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-gimplify.c gcc-4.0.2/gcc/c-gimplify.c +--- gcc-4.0.2.org/gcc/c-gimplify.c 2005-01-27 19:22:19.000000000 +0100 ++++ gcc-4.0.2/gcc/c-gimplify.c 2005-09-29 17:50:04.000000000 +0200 +@@ -482,7 +482,7 @@ gimplify_compound_literal_expr (tree *ex + /* This decl isn't mentioned in the enclosing block, so add it to the + list of temps. FIXME it seems a bit of a kludge to say that + anonymous artificial vars aren't pushed, but everything else is. */ +- if (DECL_NAME (decl) == NULL_TREE) ++ if (DECL_SEEN_IN_BIND_EXPR_P (decl) == 0 && DECL_NAME (decl) == NULL_TREE) + gimple_add_tmp_var (decl); + + gimplify_and_add (decl_s, pre_p); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-lang.c gcc-4.0.2/gcc/c-lang.c +--- gcc-4.0.2.org/gcc/c-lang.c 2005-01-18 12:35:59.000000000 +0100 ++++ gcc-4.0.2/gcc/c-lang.c 2005-09-29 17:50:04.000000000 +0200 +@@ -35,6 +35,7 @@ Software Foundation, 59 Temple Place - S + #include "c-pretty-print.h" + #include "c-objc-common.h" + #include "c-pragma.h" ++#include "c-bounds.h" + + enum c_language_kind c_language = clk_c; + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c.opt gcc-4.0.2/gcc/c.opt +--- gcc-4.0.2.org/gcc/c.opt 2005-05-01 03:11:57.000000000 +0200 ++++ gcc-4.0.2/gcc/c.opt 2005-09-29 17:50:04.000000000 +0200 +@@ -461,6 +461,14 @@ fasm + C ObjC C++ ObjC++ + Recognize the \"asm\" keyword + ++fbounds-checking ++C ++Generate code to check bounds before indexing arrays ++ ++fbc-strings-only ++C ++Restrict bounds checking to strings only ++ + fbuiltin + C ObjC C++ ObjC++ + Recognize built-in functions +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-opts.c gcc-4.0.2/gcc/c-opts.c +--- gcc-4.0.2.org/gcc/c-opts.c 2005-05-01 03:11:56.000000000 +0200 ++++ gcc-4.0.2/gcc/c-opts.c 2005-09-29 17:50:04.000000000 +0200 +@@ -38,6 +38,7 @@ Software Foundation, 59 Temple Place - S + #include "opts.h" + #include "options.h" + #include "mkdeps.h" ++#include "c-bounds.h" + + #ifndef DOLLARS_IN_IDENTIFIERS + # define DOLLARS_IN_IDENTIFIERS true +@@ -552,6 +553,27 @@ c_common_handle_option (size_t scode, co + flag_no_asm = !value; + break; + ++ case OPT_fbounds_checking: ++ bounds_checking_enabled_initial = value; ++ bounds_checking_enabled = value; ++ if (bounds_checking_enabled) ++ { ++ flag_strict_aliasing = 0; ++ flag_no_builtin = value; /* So we can check mem* functions too. */ ++ } ++ break; ++ ++ case OPT_fbc_strings_only: ++ bounds_checking_enabled_initial = value; ++ bounds_strings_only_enabled = value; ++ bounds_checking_enabled = value; ++ if (bounds_checking_enabled) ++ { ++ flag_strict_aliasing = 0; ++ flag_no_builtin = value; /* So we can check mem* functions too. */ ++ } ++ break; ++ + case OPT_fbuiltin: + flag_no_builtin = !value; + break; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/cp/bounds.c gcc-4.0.2/gcc/cp/bounds.c +--- gcc-4.0.2.org/gcc/cp/bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/cp/bounds.c 2005-09-29 17:50:04.000000000 +0200 +@@ -0,0 +1,187 @@ ++/* This file is a dummy, for when C++ gets bounds checking like C. In the ++ mean time, there are some empty function definitions here, since `calls.c' ++ references these (but never calls them). */ ++ ++#include "config.h" ++#include "system.h" ++#include <stdio.h> ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "varray.h" ++#include "ggc.h" ++#include "cpplib.h" ++#include "c-pragma.h" ++ ++static GTY (()) varray_type static_ptr_init_list; ++static GTY (()) varray_type deferred_global_decls; ++static GTY (()) tree bounds_memcpy; ++static GTY (()) tree bounds_mempcpy; ++static GTY (()) tree bounds_memset; ++static GTY (()) tree bounds_find_object; ++static GTY (()) tree bounds_maybe_find_object; ++static GTY (()) tree bounds_check_ptr_plus_int; ++static GTY (()) tree bounds_check_ptr_minus_int; ++static GTY (()) tree bounds_check_ptr_plus_int_obj; ++static GTY (()) tree bounds_check_ptr_minus_int_obj; ++static GTY (()) tree bounds_check_array_reference; ++static GTY (()) tree bounds_check_array_reference_obj; ++static GTY (()) tree bounds_check_component_reference; ++static GTY (()) tree bounds_check_component_reference_obj; ++static GTY (()) tree bounds_check_ptr_diff; ++static GTY (()) tree bounds_check_ptr_diff_obj; ++static GTY (()) tree bounds_check_reference; ++static GTY (()) tree bounds_check_reference_obj; ++static GTY (()) tree bounds_check_ptr_lt_ptr; ++static GTY (()) tree bounds_check_ptr_lt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_le_ptr; ++static GTY (()) tree bounds_check_ptr_le_ptr_obj; ++static GTY (()) tree bounds_check_ptr_gt_ptr; ++static GTY (()) tree bounds_check_ptr_gt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_ge_ptr; ++static GTY (()) tree bounds_check_ptr_ge_ptr_obj; ++static GTY (()) tree bounds_check_ptr_eq_ptr; ++static GTY (()) tree bounds_check_ptr_ne_ptr; ++static GTY (()) tree bounds_check_ptr_postinc; ++static GTY (()) tree bounds_check_ptr_preinc; ++static GTY (()) tree bounds_check_ptr_postdec; ++static GTY (()) tree bounds_check_ptr_predec; ++static GTY (()) tree bounds_check_ptr_postinc_obj; ++static GTY (()) tree bounds_check_ptr_preinc_obj; ++static GTY (()) tree bounds_check_ptr_postdec_obj; ++static GTY (()) tree bounds_check_ptr_predec_obj; ++static GTY (()) tree bounds_check_ptr_postinc_ref; ++static GTY (()) tree bounds_check_ptr_preinc_ref; ++static GTY (()) tree bounds_check_ptr_postdec_ref; ++static GTY (()) tree bounds_check_ptr_predec_ref; ++static GTY (()) tree bounds_check_ptr_postinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_preinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_postdec_ref_obj; ++static GTY (()) tree bounds_check_ptr_predec_ref_obj; ++static GTY (()) tree bounds_check_ptr_true; ++static GTY (()) tree bounds_check_ptr_false; ++static GTY (()) tree bounds_note_constructed_object; ++static GTY (()) tree bounds_note_constructed_private_table; ++static GTY (()) tree bounds_push_function; ++static GTY (()) tree bounds_pop_function; ++static GTY (()) tree bounds_add_param_object; ++static GTY (()) tree bounds_add_stack_object; ++static GTY (()) tree bounds_delete_stack_object; ++static GTY (()) tree bounds_initialize_library; ++static GTY (()) tree bounds_check_free; ++static GTY (()) tree bounds_check_malloc; ++static GTY (()) tree bounds_check_realloc; ++static GTY (()) tree bounds_check_memalign; ++static GTY (()) tree bounds_check_calloc; ++static GTY (()) tree bounds_check_valloc; ++static GTY (()) tree bounds_check_alloca; ++static GTY (()) tree bounds_check___alloca; ++static GTY (()) tree bounds_check___builtin_alloca; ++static GTY (()) tree bounds_check_mmap; ++static GTY (()) tree bounds_check_munmap; ++static GTY (()) tree bounds_check_memcpy; ++static GTY (()) tree bounds_check_mempcpy; ++static GTY (()) tree bounds_check_memmove; ++static GTY (()) tree bounds_check_bcopy; ++static GTY (()) tree bounds_check_memset; ++static GTY (()) tree bounds_check_bzero; ++static GTY (()) tree bounds_check_memcmp; ++static GTY (()) tree bounds_check_bcmp; ++static GTY (()) tree bounds_check_strcpy; ++static GTY (()) tree bounds_check_strncpy; ++static GTY (()) tree bounds_check_strlen; ++static GTY (()) tree bounds_check_strcmp; ++static GTY (()) tree bounds_check_strncmp; ++static GTY (()) tree bounds_check_strcat; ++static GTY (()) tree bounds_check_strncat; ++static GTY (()) tree bounds_check_strpbrk; ++static GTY (()) tree bounds_check_strrchr; ++static GTY (()) tree bounds_check_rindex; ++static GTY (()) tree bounds_check_strspn; ++static GTY (()) tree bounds_check_strcspn; ++static GTY (()) tree bounds_check_strstr; ++static GTY (()) tree bounds_check_strtok; ++static GTY (()) tree bounds_check_strtok_r; ++static GTY (()) tree bounds_check_strdup; ++static GTY (()) tree bounds_check_strchr; ++static GTY (()) tree bounds_check_index; ++static GTY (()) tree bounds_check_strcoll; ++static GTY (()) tree bounds_check_strxfrm; ++static GTY (()) tree bounds_check_strcasecmp; ++static GTY (()) tree bounds_check_strncasecmp; ++static GTY (()) tree bounds_check_memchr; ++static GTY (()) tree bounds_check_memccpy; ++static GTY (()) tree bounds_private_statics; ++ ++#include "gt-c-bounds.h" ++ ++int bounds_in_static_decl = 0; ++int bounds_disable_field_check = 0; ++ ++void ++bounds_init (void) ++{ ++ abort (); ++} ++ ++void ++bounds_convert_funcname (tree * function ATTRIBUTE_UNUSED, ++ tree * params ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_build_static_constructors (void) ++{ ++ abort (); ++} ++ ++void ++bounds_register_decl (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++int ++bounds_is_deletable_fn_p (char *name ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_note_call_for_deletion (rtx first_insn ATTRIBUTE_UNUSED, ++ rtx last_insn ATTRIBUTE_UNUSED, ++ char *fnname ATTRIBUTE_UNUSED, ++ tree callexpr ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++tree ++bounds_build_truthvalue_conversion (tree arg ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_delete_redundant_calls (void) ++{ ++ abort (); ++} ++ ++tree ++bounds_build_ptr_plus_int (enum tree_code resultcode ATTRIBUTE_UNUSED, ++ tree ptrop ATTRIBUTE_UNUSED, ++ tree intop ATTRIBUTE_UNUSED, ++ tree size_exp ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_mark_for_runtime_check (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/cp/Make-lang.in gcc-4.0.2/gcc/cp/Make-lang.in +--- gcc-4.0.2.org/gcc/cp/Make-lang.in 2005-06-02 19:30:57.000000000 +0200 ++++ gcc-4.0.2/gcc/cp/Make-lang.in 2005-09-29 17:50:04.000000000 +0200 +@@ -83,7 +83,7 @@ CXX_AND_OBJCXX_OBJS = cp/call.o cp/decl. + cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \ + cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o \ + cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o \ +- cp/cp-gimplify.o tree-mudflap.o $(CXX_C_OBJS) ++ cp/cp-gimplify.o cp/bounds.o tree-mudflap.o $(CXX_C_OBJS) + + # Language-specific object files for C++. + CXX_OBJS = cp/cp-lang.o stub-objc.o $(CXX_AND_OBJCXX_OBJS) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-parse.in gcc-4.0.2/gcc/c-parse.in +--- gcc-4.0.2.org/gcc/c-parse.in 2005-01-05 18:08:35.000000000 +0100 ++++ gcc-4.0.2/gcc/c-parse.in 2005-09-29 17:50:04.000000000 +0200 +@@ -214,6 +214,7 @@ do { \ + %type <ttype> maybe_attribute attributes attribute attribute_list attrib + %type <ttype> any_word + ++%type <ttype> bounds_compstmt_start bounds_compstmt + %type <ttype> compstmt compstmt_start compstmt_primary_start + %type <ttype> stmt label stmt_nocomp start_break start_continue + +@@ -331,6 +332,15 @@ static tree offsetof_base; + flag_iso = (val >> 3) & 1; \ + } while (0) + ++/* When including c-bounds.h we must also include rtl.h. This ++ does not work because we have some values in rtl.def that ++ match codes in this file. */ ++extern int bounds_checking_enabled, bounds_in_static_decl, bounds_in_addr_expr, ++ bounds_strings_only_enabled; ++tree bounds_build_component_ref PARAMS((tree, tree)); ++tree bounds_build_component_indirect_ref PARAMS((tree, tree)); ++void bounds_build_args PARAMS((void)); ++ + @@ifobjc + /* Objective-C specific parser/lexer information */ + +@@ -473,7 +483,9 @@ identifier: + ; + + unop: '&' +- { $$ = ADDR_EXPR; } ++ { if (bounds_checking_enabled) ++ bounds_in_addr_expr++; ++ $$ = ADDR_EXPR; } + | '-' + { $$ = NEGATE_EXPR; } + | '+' +@@ -757,12 +769,26 @@ primary: + { $$.value = build_array_ref ($1.value, $3.value); + $$.original_code = ERROR_MARK; } + | primary '.' identifier +- { $$.value = build_component_ref ($1.value, $3); ++ { ++ if (bounds_checking_enabled ++ && !bounds_strings_only_enabled ++ && !(bounds_in_static_decl || global_bindings_p ())) ++ $$.value = bounds_build_component_ref ($1.value, $3); ++ else ++ $$.value = build_component_ref ($1.value, $3); + $$.original_code = ERROR_MARK; } + | primary POINTSAT identifier + { +- tree expr = build_indirect_ref ($1.value, "->"); +- $$.value = build_component_ref (expr, $3); ++ if (bounds_checking_enabled ++ && !bounds_strings_only_enabled ++ && !(bounds_in_static_decl || global_bindings_p ())) ++ $$.value = bounds_build_component_indirect_ref ($1.value, ++ $3); ++ else ++ { ++ tree expr = build_indirect_ref ($1.value, "->"); ++ $$.value = build_component_ref (expr, $3); ++ } + $$.original_code = ERROR_MARK; + } + | primary PLUSPLUS +@@ -1518,7 +1544,7 @@ nested_function: + an error which then was handled by compstmt_or_error. There + followed a repeated execution of that same rule, which called + YYERROR1 again, and so on. */ +- compstmt ++ bounds_compstmt + { tree decl = current_function_decl; + add_stmt ($6); + finish_function (); +@@ -1548,7 +1574,7 @@ notype_nested_function: + an error which then was handled by compstmt_or_error. There + followed a repeated execution of that same rule, which called + YYERROR1 again, and so on. */ +- compstmt ++ bounds_compstmt + { tree decl = current_function_decl; + add_stmt ($6); + finish_function (); +@@ -2018,9 +2044,36 @@ label_decl: + /* This is the body of a function definition. + It causes syntax errors to ignore to the next openbrace. */ + compstmt_or_error: +- compstmt ++ bounds_compstmt + { add_stmt ($1); } +- | error compstmt ++ | error bounds_compstmt ++ ; ++ ++bounds_compstmt_start: /* empty */ ++ { if (bounds_checking_enabled) ++ { ++ $$ = c_begin_compound_stmt (true); ++ /* In bounds checking mode, emit various function calls here ++ so we can find the function's arguments. ++ Enter a new function context. This is the 'outer block' of ++ this function. */ ++ bounds_build_args (); ++ } ++ else ++ $$ = NULL_TREE; } ++ ; ++ ++bounds_compstmt: ++ bounds_compstmt_start compstmt ++ { if (bounds_checking_enabled) ++ { ++ /* In bounds checking mode, we may have introduced an extra ++ binding contour in. We pop it here. */ ++ add_stmt ($2); ++ $$ = c_end_compound_stmt ($1, true); ++ } ++ else ++ $$ = $2; } + ; + + compstmt_start: '{' { $$ = c_begin_compound_stmt (true); } +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-pragma.c gcc-4.0.2/gcc/c-pragma.c +--- gcc-4.0.2.org/gcc/c-pragma.c 2005-06-06 21:20:21.000000000 +0200 ++++ gcc-4.0.2/gcc/c-pragma.c 2005-09-29 17:50:04.000000000 +0200 +@@ -40,6 +40,9 @@ Software Foundation, 59 Temple Place - S + #define GCC_BAD2(gmsgid, arg) \ + do { warning (gmsgid, arg); return; } while (0) + ++extern int bounds_checking_enabled_initial; ++static void bounds_handle_pragma_checking (cpp_reader *); ++ + typedef struct align_stack GTY(()) + { + int alignment; +@@ -416,7 +419,8 @@ handle_pragma_redefine_extname (cpp_read + if (t != CPP_EOF) + warning ("junk at end of #pragma redefine_extname"); + +- if (!flag_mudflap && !targetm.handle_pragma_redefine_extname) ++ if (!bounds_checking_enabled_initial ++ && !flag_mudflap && !targetm.handle_pragma_redefine_extname) + { + if (warn_unknown_pragmas > in_system_header) + warning ("#pragma redefine_extname not supported on this target"); +@@ -660,6 +664,32 @@ handle_pragma_visibility (cpp_reader *du + + #endif + ++static void ++bounds_handle_pragma_checking (cpp_reader * ARG_UNUSED (dummy)) ++{ ++ int error = 0; ++ tree x; ++ enum cpp_ttype token; ++ ++ token = c_lex (&x); ++ if (token == CPP_NAME) ++ { ++ const char *op = IDENTIFIER_POINTER (x); ++ if (!strcmp (op, "on")) ++ bounds_checking_enabled = bounds_checking_enabled_initial; ++ else if (!strcmp (op, "off")) ++ bounds_checking_enabled = 0; ++ else ++ error = 1; ++ } ++ else ++ error = 1; ++ if (error) ++ warning ("#pragma bounds_checking must be followed by on or off"); ++ else if (c_lex (&x) != CPP_EOF) ++ warning ("junk at end of #pragma bounds_checking"); ++} ++ + /* Front-end wrappers for pragma registration to avoid dragging + cpplib.h in almost everywhere. */ + void +@@ -697,6 +727,8 @@ init_pragma (void) + c_register_pragma (0, "redefine_extname", handle_pragma_redefine_extname); + c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix); + ++ c_register_pragma (0, "bounds_checking", bounds_handle_pragma_checking); ++ + c_register_pragma ("GCC", "pch_preprocess", c_common_pch_pragma); + + #ifdef REGISTER_TARGET_PRAGMAS +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-tree.h gcc-4.0.2/gcc/c-tree.h +--- gcc-4.0.2.org/gcc/c-tree.h 2005-07-08 15:07:35.000000000 +0200 ++++ gcc-4.0.2/gcc/c-tree.h 2005-09-29 17:50:04.000000000 +0200 +@@ -601,6 +601,14 @@ extern bool c_override_global_bindings_t + /* True means we've initialized exception handling. */ + extern bool c_eh_initialized_p; + ++/* Flag for bounds checking. */ ++ ++extern int bounds_checking_enabled; ++ ++/* Flag for string only bounds checking. */ ++ ++extern int bounds_strings_only_enabled; ++ + /* In c-decl.c */ + extern void c_finish_incomplete_decl (tree); + extern void c_write_global_declarations (void); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/c-typeck.c gcc-4.0.2/gcc/c-typeck.c +--- gcc-4.0.2.org/gcc/c-typeck.c 2005-09-06 22:10:50.000000000 +0200 ++++ gcc-4.0.2/gcc/c-typeck.c 2005-09-29 17:50:04.000000000 +0200 +@@ -44,6 +44,7 @@ Software Foundation, 59 Temple Place - S + #include "tree-iterator.h" + #include "tree-gimple.h" + #include "tree-flow.h" ++#include "c-bounds.h" + + /* Possible cases of implicit bad conversions. Used to select + diagnostic messages in convert_for_assignment. */ +@@ -71,6 +72,13 @@ struct c_label_context_vm *label_context + message within this initializer. */ + static int missing_braces_mentioned; + ++/* Bounds checking is turned off temporarily inside static initializers by ++ c-typeck.c:start_init using the following flag. */ ++int bounds_in_static_decl; ++ ++/* Nonzero in bounds checking mode when a bit field is tested */ ++int bounds_disable_field_check = 0; ++ + static int require_constant_value; + static int require_constant_elements; + +@@ -1195,7 +1203,7 @@ type_lists_compatible_p (tree args1, tre + + /* Compute the size to increment a pointer by. */ + +-static tree ++tree + c_size_in_bytes (tree type) + { + enum tree_code code = TREE_CODE (type); +@@ -1612,7 +1620,14 @@ build_component_ref (tree datum, tree co + + /* Given an expression PTR for a pointer, return an expression + for the value pointed to. +- ERRORSTRING is the name of the operator to appear in error messages. */ ++ ERRORSTRING is the name of the operator to appear in error messages. ++ ++ For bounds checked code, we generate a call to: ++ void* __bounds_check_reference (void *pointer, size_t size, ++ char *filename, int line); ++ This function checks that the reference will be successful (else ++ aborts with an error message). We then make the reference ourselves ++ as usual. */ + + tree + build_indirect_ref (tree ptr, const char *errorstring) +@@ -1632,9 +1647,16 @@ build_indirect_ref (tree ptr, const char + tree mvt = t; + tree ref; + +- if (TREE_CODE (mvt) != ARRAY_TYPE) +- mvt = TYPE_MAIN_VARIANT (mvt); +- ref = build1 (INDIRECT_REF, mvt, pointer); ++ if (bounds_checking_enabled && !bounds_in_static_decl ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (t) == TYPE_NAME (char_type_node))) ++ ref = bounds_build_reference (ptr); ++ else ++ { ++ if (TREE_CODE (mvt) != ARRAY_TYPE) ++ mvt = TYPE_MAIN_VARIANT (mvt); ++ ref = build1 (INDIRECT_REF, mvt, pointer); ++ } + + if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE) + { +@@ -1670,7 +1692,14 @@ build_indirect_ref (tree ptr, const char + If A is a variable or a member, we generate a primitive ARRAY_REF. + This avoids forcing the array out of registers, and can work on + arrays that are not lvalues (for example, members of structures returned +- by functions). */ ++ by functions). ++ ++ In bounds checked mode, we generate a call to the function: ++ __bounds_check_array_reference ++ which checks the offset. It returns the address of the object which we ++ then directly reference. ++ In some cases, generates `ptr_plus_int, ref' even in the case ++ &p[i] where the ref is unnecessary. */ + + tree + build_array_ref (tree array, tree index) +@@ -1762,10 +1791,34 @@ build_array_ref (tree array, tree index) + pedwarn ("ISO C90 forbids subscripting non-lvalue array"); + } + +- type = TREE_TYPE (TREE_TYPE (array)); +- if (TREE_CODE (type) != ARRAY_TYPE) +- type = TYPE_MAIN_VARIANT (type); +- rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE); ++ if (bounds_checking_enabled ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (TREE_TYPE (TREE_TYPE (array))) == ++ TYPE_NAME (char_type_node))) ++ { ++ /* In bounds checking modes, generate a call to __bounds_check_ ++ array_reference and an indirect ref. to that. */ ++ if (bounds_in_static_decl) ++ { ++ if (!bounds_can_test_array_reference_now (array, index)) ++ warning ("cannot check this array reference"); ++ type = TREE_TYPE (TREE_TYPE (array)); ++ if (TREE_CODE (type) != ARRAY_TYPE) ++ type = TYPE_MAIN_VARIANT (type); ++ rval = build4 (ARRAY_REF, type, array, index, ++ NULL_TREE, NULL_TREE); ++ } ++ else ++ rval = bounds_build_array_reference (array, index); ++ } ++ else ++ { ++ type = TREE_TYPE (TREE_TYPE (array)); ++ if (TREE_CODE (type) != ARRAY_TYPE) ++ type = TYPE_MAIN_VARIANT (type); ++ rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE); ++ } ++ + /* Array ref is const/volatile if the array elements are + or if the array is. */ + TREE_READONLY (rval) +@@ -1968,6 +2021,9 @@ build_function_call (tree function, tree + tree name = NULL_TREE, result; + tree tem; + ++ if (bounds_checking_enabled) ++ bounds_convert_funcname (&function, ¶ms); ++ + /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ + STRIP_TYPE_NOPS (function); + +@@ -2393,7 +2449,9 @@ parser_build_binary_op (enum tree_code c + } + + /* Return a tree for the difference of pointers OP0 and OP1. +- The resulting tree has type int. */ ++ The resulting tree has type int. ++ If bounds-checking is switched on, generate a call to ++ __bounds_check_ptr_plus_int to check the operation. */ + + static tree + pointer_diff (tree op0, tree op1) +@@ -2403,6 +2461,8 @@ pointer_diff (tree op0, tree op1) + tree target_type = TREE_TYPE (TREE_TYPE (op0)); + tree con0, con1, lit0, lit1; + tree orig_op1 = op1; ++ bool char_ptrs_diff = TYPE_NAME (char_type_node) == ++ TYPE_NAME (TREE_TYPE (TREE_TYPE (op0))); + + if (pedantic || warn_pointer_arith) + { +@@ -2446,6 +2506,13 @@ pointer_diff (tree op0, tree op1) + } + + ++ if (bounds_checking_enabled && !bounds_in_static_decl ++ && (!bounds_strings_only_enabled || char_ptrs_diff)) ++ /* Build a call to the following function here instead: ++ int __bounds_check_ptr_diff (void *ptr1, void *ptr2, size_t size, ++ char *filename, int line); */ ++ return bounds_build_ptr_diff (op0, op1, target_type); ++ + /* First do the subtraction as integers; + then drop through to build the divide operator. + Do not do default conversions on the minus operator +@@ -2571,8 +2638,22 @@ build_unary_op (enum tree_code code, tre + error ("wrong type argument to unary exclamation mark"); + return error_mark_node; + } +- arg = lang_hooks.truthvalue_conversion (arg); +- return invert_truthvalue (arg); ++ ++ /* In bounds checking mode, if we are inverting a pointer (ie. `!ptr') ++ we want to check that the pointer is not ILLEGAL and not pointing ++ to invalid memory. */ ++ if (bounds_checking_enabled ++ && (((typecode == POINTER_TYPE || typecode == ARRAY_TYPE) ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (char_type_node) == ++ TYPE_NAME (TREE_TYPE (TREE_TYPE (arg))))) ++ || typecode == FUNCTION_TYPE)) ++ return bounds_build_invert_truthvalue (arg); ++ else ++ { ++ arg = lang_hooks.truthvalue_conversion (arg); ++ return invert_truthvalue (arg); ++ } + + case NOP_EXPR: + break; +@@ -2681,6 +2762,14 @@ build_unary_op (enum tree_code code, tre + + if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE) + val = boolean_increment (code, arg); ++ else if (bounds_checking_enabled && !bounds_in_static_decl ++ && TREE_CODE (TREE_TYPE (arg)) == POINTER_TYPE ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (char_type_node) == ++ TYPE_NAME (TREE_TYPE (TREE_TYPE (arg))))) ++ /* If bounds checking, generate a function call to ensure the ++ inc/decrement will be correct. */ ++ val = bounds_build_inc_or_dec (code, TREE_TYPE (arg), arg, inc); + else + val = build2 (code, TREE_TYPE (arg), arg, inc); + TREE_SIDE_EFFECTS (val) = 1; +@@ -2693,29 +2782,50 @@ build_unary_op (enum tree_code code, tre + case ADDR_EXPR: + /* Note that this operation never does default_conversion. */ + +- /* Let &* cancel out to simplify resulting code. */ +- if (TREE_CODE (arg) == INDIRECT_REF) +- { +- /* Don't let this be an lvalue. */ +- if (lvalue_p (TREE_OPERAND (arg, 0))) +- return non_lvalue (TREE_OPERAND (arg, 0)); +- return TREE_OPERAND (arg, 0); +- } ++ if (bounds_in_addr_expr) ++ bounds_in_addr_expr--; + +- /* For &x[y], return x+y */ +- if (TREE_CODE (arg) == ARRAY_REF) +- { +- if (!c_mark_addressable (TREE_OPERAND (arg, 0))) ++ if (!(bounds_checking_enabled && !bounds_in_static_decl ++ && (!bounds_strings_only_enabled ++ || TYPE_NAME (char_type_node) == TYPE_NAME (TREE_TYPE (arg))))) ++ { ++ /* Let &* cancel out to simplify resulting code. */ ++ if (TREE_CODE (arg) == INDIRECT_REF) ++ { ++ /* Don't let this be an lvalue. */ ++ if (lvalue_p (TREE_OPERAND (arg, 0))) ++ return non_lvalue (TREE_OPERAND (arg, 0)); ++ return TREE_OPERAND (arg, 0); ++ } ++ ++ /* For &x[y], return x+y */ ++ if (TREE_CODE (arg) == ARRAY_REF) ++ { ++ if (!c_mark_addressable (TREE_OPERAND (arg, 0))) ++ return error_mark_node; ++ return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0), ++ TREE_OPERAND (arg, 1), 1); ++ } ++ ++ /* Anything not already handled and not a true memory reference ++ or a non-lvalue array is an error. */ ++ else if (typecode != FUNCTION_TYPE && !flag ++ && !lvalue_or_else (arg, lv_addressof)) + return error_mark_node; +- return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0), +- TREE_OPERAND (arg, 1), 1); +- } ++ } ++ else ++ { ++ /* In bounds checking code, the patterns for '&*' and '&x[y]' are ++ more complicated because we have already expanded the '*' or the ++ 'x[y]' expression. We sort this out in 'c-bounds.c'. */ ++ if (noconvert == 0) ++ { ++ tree cancelled_expr = bounds_cancel_address_expr (arg); + +- /* Anything not already handled and not a true memory reference +- or a non-lvalue array is an error. */ +- else if (typecode != FUNCTION_TYPE && !flag +- && !lvalue_or_else (arg, lv_addressof)) +- return error_mark_node; ++ if (cancelled_expr != NULL_TREE) ++ return cancelled_expr; ++ } ++ } + + /* Ordinary case; arg is a COMPONENT_REF or a decl. */ + argtype = TREE_TYPE (arg); +@@ -2734,7 +2844,9 @@ build_unary_op (enum tree_code code, tre + return error_mark_node; + + gcc_assert (TREE_CODE (arg) != COMPONENT_REF +- || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1))); ++ || (bounds_disable_field_check ++ ? !DECL_BIT_FIELD (TREE_OPERAND (arg, 1)) ++ : !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))); + + argtype = build_pointer_type (argtype); + +@@ -2791,6 +2903,15 @@ lvalue_p (tree ref) + case BIND_EXPR: + return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE; + ++ case SAVE_EXPR: ++ return bounds_checking_enabled ++ && lvalue_p (TREE_OPERAND (ref, 0)); ++ ++ case COND_EXPR: ++ return bounds_checking_enabled ++ && lvalue_p (TREE_OPERAND (ref, 1)) ++ && lvalue_p (TREE_OPERAND (ref, 2)); ++ + default: + return 0; + } +@@ -2842,7 +2963,8 @@ c_mark_addressable (tree exp) + switch (TREE_CODE (x)) + { + case COMPONENT_REF: +- if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1))) ++ if (bounds_disable_field_check ? DECL_BIT_FIELD (TREE_OPERAND (x, 1)) ++ : DECL_C_BIT_FIELD (TREE_OPERAND (x, 1))) + { + error + ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1)); +@@ -2867,7 +2989,8 @@ c_mark_addressable (tree exp) + case CONST_DECL: + case PARM_DECL: + case RESULT_DECL: +- if (C_DECL_REGISTER (x) ++ if (bounds_checking_enabled == 0 ++ && C_DECL_REGISTER (x) + && DECL_NONLOCAL (x)) + { + if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x)) +@@ -2878,7 +3001,7 @@ c_mark_addressable (tree exp) + } + pedwarn ("register variable %qD used in nested function", x); + } +- else if (C_DECL_REGISTER (x)) ++ else if (bounds_checking_enabled == 0 && C_DECL_REGISTER (x)) + { + if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x)) + error ("address of global register variable %qD requested", x); +@@ -3434,9 +3557,17 @@ build_modify_expr (tree lhs, enum tree_c + as the LHS argument. */ + + if (olhstype == TREE_TYPE (result)) +- return result; ++ { ++ if (bounds_checking_enabled) ++ result = bounds_check_assignment (result, lhs, newrhs); ++ return result; ++ } ++ if (bounds_checking_enabled) ++ return bounds_check_assignment ( ++ convert_for_assignment (olhstype, result, ic_assign, ++ NULL_TREE, NULL_TREE, 0), lhs, newrhs); + return convert_for_assignment (olhstype, result, ic_assign, +- NULL_TREE, NULL_TREE, 0); ++ NULL_TREE, NULL_TREE, 0); + } + + /* Convert value RHS to type TYPE as preparation for an assignment +@@ -3928,6 +4059,9 @@ store_init_value (tree decl, tree init) + if (TREE_CODE (type) == ERROR_MARK) + return; + ++ if (bounds_checking_enabled && decl != 0) ++ bounds_in_static_decl = TREE_STATIC (decl); ++ + /* Digest the specified initializer into an expression. */ + + value = digest_init (type, init, true, TREE_STATIC (decl)); +@@ -3970,6 +4104,9 @@ store_init_value (tree decl, tree init) + } + } + } ++ ++ if (bounds_checking_enabled) ++ bounds_in_static_decl = 0; + } + + /* Methods for storing and printing names for error messages. */ +@@ -4568,6 +4705,10 @@ start_init (tree decl, tree asmspec_tree + const char *locus; + struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack)); + ++ /* In a static initializer, temporarily turn off bounds checking. */ ++ if (bounds_checking_enabled && decl != 0) ++ bounds_in_static_decl = TREE_STATIC (decl); ++ + p->decl = constructor_decl; + p->require_constant_value = require_constant_value; + p->require_constant_elements = require_constant_elements; +@@ -4648,6 +4789,11 @@ finish_init (void) + constructor_top_level = p->top_level; + initializer_stack = p->next; + free (p); ++ ++ /* If bounds checking was temporarily suspended in a static decl, turn it ++ back on. */ ++ if (bounds_checking_enabled) ++ bounds_in_static_decl = 0; + } + + /* Call here when we see the initializer is surrounded by braces. +@@ -7413,6 +7559,10 @@ build_binary_op (enum tree_code code, tr + /* Nonzero means set RESULT_TYPE to the common type of the args. */ + int common = 0; + ++ /* Nonzero means we may build bounds checking code for a comparison ++ operation (<, >, <=, >=, ==, !=) here. */ ++ int bounds_checked_comparison = 0; ++ + if (convert_p) + { + op0 = default_conversion (orig_op0); +@@ -7652,22 +7802,31 @@ build_binary_op (enum tree_code code, tr + + if (result_type == NULL_TREE) + result_type = ptr_type_node; ++ bounds_checked_comparison = 1; + } + else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST + && integer_zerop (op1)) +- result_type = type0; ++ { ++ result_type = type0; ++ bounds_checked_comparison = 1; ++ } + else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST + && integer_zerop (op0)) +- result_type = type1; ++ { ++ result_type = type1; ++ bounds_checked_comparison = 1; ++ } + else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) + { + result_type = type0; + pedwarn ("comparison between pointer and integer"); ++ bounds_checked_comparison = 1; + } + else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) + { + result_type = type1; + pedwarn ("comparison between pointer and integer"); ++ bounds_checked_comparison = 1; + } + break; + +@@ -7696,6 +7855,8 @@ build_binary_op (enum tree_code code, tr + result_type = ptr_type_node; + pedwarn ("comparison of distinct pointer types lacks a cast"); + } ++ bounds_checked_comparison = 1; ++ bounds_checked_comparison = 1; + } + else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST + && integer_zerop (op1)) +@@ -7703,6 +7864,7 @@ build_binary_op (enum tree_code code, tr + result_type = type0; + if (pedantic || extra_warnings) + pedwarn ("ordered comparison of pointer with integer zero"); ++ bounds_checked_comparison = 1; + } + else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST + && integer_zerop (op0)) +@@ -7710,16 +7872,19 @@ build_binary_op (enum tree_code code, tr + result_type = type1; + if (pedantic) + pedwarn ("ordered comparison of pointer with integer zero"); ++ bounds_checked_comparison = 1; + } + else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) + { + result_type = type0; + pedwarn ("comparison between pointer and integer"); ++ bounds_checked_comparison = 1; + } + else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) + { + result_type = type1; + pedwarn ("comparison between pointer and integer"); ++ bounds_checked_comparison = 1; + } + break; + +@@ -8028,12 +8193,29 @@ build_binary_op (enum tree_code code, tr + build_type = result_type; + + { +- tree result = build2 (resultcode, build_type, op0, op1); ++ tree result; ++ ++ if (! bounds_checking_enabled ++ || bounds_in_static_decl ++ || ! bounds_checked_comparison) ++ result = build2 (resultcode, build_type, op0, op1); ++ else ++ { ++ /* If strings only and either ops not a char. ++ Note that bounds_checked_comparison => code0 or code1 is a ++ pointer type. */ ++ tree temp = TYPE_NAME (char_type_node); ++ tree name0 = TREE_TYPE (type0) ? TYPE_NAME (TREE_TYPE (type0)) : NULL; ++ tree name1 = TREE_TYPE (type1) ? TYPE_NAME (TREE_TYPE (type1)) : NULL; ++ if (bounds_strings_only_enabled && (temp != name0) && (temp != name1)) ++ result = build2 (resultcode, build_type, op0, op1); ++ else ++ result = bounds_build_comparison (resultcode, build_type, op0, op1); ++ } + + /* Treat expressions in initializers specially as they can't trap. */ + result = require_constant_value ? fold_initializer (result) +- : fold (result); +- ++ : fold (result); + if (final_type != 0) + result = convert (final_type, result); + return result; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/doc/extend.texi gcc-4.0.2/gcc/doc/extend.texi +--- gcc-4.0.2.org/gcc/doc/extend.texi 2005-07-20 12:36:23.000000000 +0200 ++++ gcc-4.0.2/gcc/doc/extend.texi 2005-09-29 17:50:04.000000000 +0200 +@@ -67,6 +67,8 @@ extensions, accepted by GCC in C89 mode + * Incomplete Enums:: @code{enum foo;}, with details to follow. + * Function Names:: Printable strings which are the name of the current + function. ++* Bounds Checking:: Add full, fine-grained array & pointer checking to ++ C programs. + * Return Address:: Getting the return or frame address of a function. + * Vector Extensions:: Using vector instructions through built-in functions. + * Offsetof:: Special syntax for implementing @code{offsetof}. +@@ -4385,6 +4387,670 @@ literals. GCC 3.4 and later treat them + @code{__func__}. In C++, @code{__FUNCTION__} and + @code{__PRETTY_FUNCTION__} have always been variables. + ++@node Bounds Checking ++@section Bounds Checking ++@cindex Bounds Checking ++ ++The C part of the GNU compiler now supports full fine-grained pointer checking ++at runtime. This work was originally done by @w{Richard W.M. Jones} ++`rjones@@orchestream.com', ++and has been extended by the work of many other kind ++contributors.@footnote{See the file @file{bounds/CONTRIBUTORS} for a full ++list of the people who gave their effort for free to make all this possible.} ++ ++The runtime checking library, test kit and various tools can be found in ++the @file{bounds/} subdirectory. ++ ++The brief manual here is a distillation of the original paper that appeared ++at the same time as the original patches to GCC. The paper contains more ++details about the inner workings of bounds checking GCC. The paper can be ++found in PostScript format in @file{bounds/report/bcrep2.ps.gz}. ++ ++@menu ++* Compiling with checks:: How to compile your programs with bounds ++ checks on at runtime. ++* Incompatibilities with checking:: You can't use setjmp/longjmp, and threads ++ and signal handlers need special attention. ++* Unchecked code and libraries:: You can freely mix unchecked source files and ++ libraries with your checked program. ++* Debugging with GDB:: You may debug bounds checked programs with ++ GDB and there are special breakpoints for this ++ purpose. ++* Environment at runtime:: Customizing the runtime environment by passing ++ options in @code{GCC_BOUNDS_OPTS}. ++* Managing the heap:: How bounds checking uses the heap at runtime. ++* Unchecked objects:: How unchecked objects work. ++* Miscellaneous features:: Other features that might be of interest. ++* Checking 2D array indices:: Notes about 2D array indices. ++* What errors are caught:: What errors are caught and what errors are ++ missed? ++* Performance:: How fast (or slow) can you expect bounds ++ checked programs to go? ++* Stubborn bugs:: Special ``features'' you may need to know ++ about. ++* Using G77 with bounds checking:: A small patch you have to make to get a ++ smooth compile with G77. ++@end menu ++ ++@ignore ++ ++NOT YET DOCUMENTED!!! --- ++ ++bounds/tools subdirectory ++bounds/misc subdirectory ++bounds/report subdirectory ++bounds/tests subdirectory ++bounds/treestats subdirectory ++ ++tidy up this menu - need to make it more hierarchical ++ ++@end ignore ++ ++@node Compiling with checks ++@subsection Compiling with checks ++ ++To compile all or part of your program with bounds checking, simply add the ++@code{-fbounds-checking} flag when compiling and linking. In the simplest ++instance, you might do: ++ ++@example ++gcc -fbounds-checking program.c -o program ++@end example ++ ++@noindent ++Or, linking several checked files together: ++ ++@example ++gcc -fbounds-checking -c file1.c -o file1.o ++gcc -fbounds-checking -c file2.c -o file2.o ++gcc -fbounds-checking -c file3.c -o file3.o ++gcc -fbounds-checking file1.o file2.o file3.o -o program ++@end example ++ ++If your program uses a Makefile, you will probably only need to add the ++@code{-fbounds-checking} flag to @code{CFLAGS}, and remake the program ++from scratch. ++ ++@node Incompatibilities with checking ++@subsection Incompatibilities with checking ++ ++@itemize @bullet ++@item Programs that use setjmp and longjmp. ++ ++Bounds checking is unfortunately incompatible with setjmp/longjmp. This is ++regrettable, but the problem is quite fundamental and it is unlikely that ++these functions will ever be permissable. ++ ++@item Using signal handlers. ++ ++If possible, move signal handlers to a separate source file and set checking ++off in that file. If this is not possible, then you will need to edit ++@file{bounds/lib/mutex.h} which provides mutual exclusion to vital ++internal structures in the checking library. Normally this mutual exclusion ++is turned off, for reasons of efficiency. ++ ++@item Using threads. ++ ++You may use threads with bounds checking. If more than one thread could ++ever run with bounds checking, you will need to provide mutual exclusion ++as with signal handlers above. Edit the file @file{bounds/lib/mutex.h} and ++add whatever code is necessary to give mutual exclusion. ++ ++@item Checking C++ programs. ++ ++Every so often, someone mails me to ask why their C++ program isn't checked ++when they do @code{g++ -fbounds-checking}. At the moment, the bounds checking ++changes are specific to the C front end, so you can't use them with the other ++GCC front ends (eg. C++, FORTRAN, Modula-2). There is no reason why bounds ++checking couldn't be added to the C++ front end. It would take perhaps one or ++two months to do. It is highly unlikely that I will ever do this, but if a ++keen beta-tester wants it enough, I may be willing to help them. In the ++meantime, it is possible to translate C++ programs to C and check them, but ++line number and other debugging information may get scrambled in the process. ++@end itemize ++ ++ ++@node Unchecked code and libraries ++@subsection Unchecked code and libraries ++ ++You can normally freely mix unchecked and checked code. This is why you don't ++need to make any changes to your C or X11 libraries when you install GCC ++with bounds checking. The checking library will detect code compiled with ++and without checking automagically, and let the two run together. You ++can mix unchecked object files with checked ones for the same reason. Always ++pass the @code{-fbounds-checking} flag to the link stage. ++ ++@example ++gcc -fbounds-checking -c file1.c -o file1.o ++gcc -c unchecked.c -o unchecked.o ++gcc -fbounds-checking file1.o unchecked.o -o program ++@end example ++ ++The checking library will usually only know about variables that are ++declared in checked code, and about memory allocated with @code{malloc}. So ++if a variable is declared in @file{unchecked.c} above, then references ++to it will @emph{not} be checked, even when these references occur in ++checked code. ++ ++Say that file @file{unchecked.c} contains the following code: ++ ++@example ++int a[10]; ++ ++int *get_ptr_to_a () @{ return a; @} ++@end example ++ ++and file @file{file1.c} contains: ++ ++@example ++extern int *get_ptr_to_a (); ++ ++main () ++@{ ++ int *ptr_to_a = get_ptr_to_a (); ++ int i; ++ ++ for (i = 0; i < 20; ++i) ptr_to_a[i] = 0; ++@} ++@end example ++ ++The references to @code{ptr_to_a} will not be checked. You can resolve ++this by adding @code{a}, either by hand, or semi-automatically. ++@xref{Unchecked objects}. ++ ++If you place @code{extern int a[10];} anywhere in @file{file1.c}, bounds ++checking GCC will also be able to find and check the array references ++properly. ++ ++If you include @file{bounds/run-includes/unchecked.h}, you get facilities ++to turn bounds checking on and off over short stretches of code and ++within single expressions and statements. Even when bounds checking is ++switched off, you may still use these features. The macros are silently ++ignored if bounds checking is off, or if the compiler is not GCC. ++ ++@itemize @bullet ++@item @code{BOUNDS_CHECKING_OFF} @dots{} @code{BOUNDS_CHECKING_ON} ++ ++Turn off bounds checking over a section of code. For instance: ++@example ++/* This code is checked ... */ ++BOUNDS_CHECKING_OFF; ++/* This code is unchecked ... */ ++BOUNDS_CHECKING_ON; ++/* This code is checked again ... */ ++@end example ++The unchecked code should not try to return from a function, or jump over ++the @code{BOUNDS_CHECKING_ON} statement with @code{goto}, else checking ++will be switched off for the rest of the program! ++ ++@item @code{BOUNDS_CHECKING_OFF_DURING} ++ ++Switch off checking in a single statement. For instance: ++@example ++BOUNDS_CHECKING_OFF_DURING (p += 5); ++@end example ++The statement should not (obviously) be goto, return, @dots{} ++ ++@item @code{BOUNDS_CHECKING_OFF_IN_EXPR} ++ ++Switch off checking while a single expression is being evaluated. For instance: ++@example ++p = BOUNDS_CHECKING_OFF_IN_EXPR (a + 5); ++@end example ++ ++@end itemize ++ ++@node Debugging with GDB ++@subsection Debugging with GDB ++ ++If you have GDB (or another debugger) on your system, you will be able to ++debug bounds checked programs easily and efficiently. To help you catch ++bounds errors before the program aborts (which sometimes causes the ++program's stack to disappear), place a breakpoint at ++@code{__bounds_breakpoint}. The checking library always calls this ++breakpoint before aborting. If the @code{-never-fatal} flag has been supplied ++@xref{Environment at runtime}, you will need to place this ++breakpoint, since the program does not abort when it hits a bounds error. ++ ++@node Environment at runtime ++@subsection Environment at runtime ++ ++You can customize the way a bounds-checked program runs by passing options ++to it in the environment variable `GCC_BOUNDS_OPTS'. For instance, suppose ++you don't want the banner message that appears when bounds checked programs ++start up. With sh or ksh, you might type: ++ ++@example ++% GCC_BOUNDS_OPTS='-no-message' program ++@end example ++ ++With csh: ++ ++@example ++% setenv GCC_BOUNDS_OPTS '-no-message'; program ++@end example ++ ++You can put any combination of the following flags in GCC_BOUNDS_OPTS. Place ++spaces or tabs between each flag. ++ ++@table @samp ++@item -no-message ++Don't print the introductory message. ++@item -no-statistics ++Don't print library call statistics with the program quits. ++@item -?, -help ++Print this list of options, then quit the program before it starts. ++@item -reuse-heap (*) ++@item -reuse-age=<age> ++@item -no-reuse-heap ++See the discussion of heap memory, @xref{Managing the heap}. ++@item -warn-unchecked-statics ++@item -no-warn-unchecked-statics (*) ++@item -warn-unchecked-stack ++@item -no-warn-unchecked-stack (*) ++See the discussion of unchecked objects, @xref{Unchecked objects}. ++@item -warn-free-null (*) ++@item -no-warn-free-null ++Give a warning if free (0) is called. Note that this may be correct in ++ANSI C, and some libraries, notably X11, do it quite often. ++@item -warn-misc-strings (*) ++@item -no-warn-misc-strings ++Miscellaneous warnings with str* and mem* functions, such as trying to call ++@code{memcpy} with size = 0. ++@item -warn-illegal ++@item -no-warn-illegal (*) ++Warn when ILLEGAL pointers are generated. These patches, provided by ++@w{Don Lewis} <gdonl@@gv.ssi1.com>, help to track down ILLEGAL pointer ++errors when they happen. ++@item -warn-unaligned (*) ++@item -no-warn-unaligned ++Warn when a pointer is used in an unaligned manner, for instance reading ++integer data as chars. This warning is turned on by default, but may be ++disabled, since some programs do this quite harmlessly. These patches were ++suggested by @w{Stuart Kemp} and @w{Eberhard Mattes}. ++@item -warn-all ++Turn on all of the warnings above. ++@item -array-index-check (*) ++@item -no-array-index-check ++Check 2D array indices correctly. This is turned on by default. This will ++only check arrays with size > 1. This is done to avoid problems with ++structure hack definintions. ++@xref{Checking 2D array indices}. ++@item -never-fatal ++Normally the library will call abort() after it detects the first bounds ++error. If this flag is given, the library attempts to proceed. The first ++error may generate more errors itself afterwards, so only the first error ++is guaranteed to be correct. ++@item -print-calls ++@item -no-print-calls (*) ++Print calls to the checking library. This option is only useful if you ++want to debug bounds checking GCC itself. ++@item -print-heap ++@item -print-heap-long ++@item -no-print-heap (*) ++Print the contents of the heap at program end. This is useful to find ++memory leaks in your program. ++@code{-print-heap} shows the total leaked memory for each @code{malloc} call, ++while @code{-print-heap-long} shows each leaked allocation in detail. ++@end table ++ ++Items marked with a `(*)' are the default. ++ ++@node Managing the heap ++@subsection Managing the heap ++ ++The bounds checking library includes a customized version of the GNU ++@code{malloc} library. Calls to @code{malloc}, @code{free}, @code{realloc}, ++@code{calloc}, @code{cfree}, @code{valloc} and @code{memalign} are ++checked. You will get a bounds error if you try to: ++ ++@itemize @bullet ++@item ++Free a pointer that has not been allocated in the proper way, or free a pointer ++twice. ++ ++@item ++Reallocate a pointer that has not been allocated, or has been freed. ++ ++@item ++Use a pointer to freed memory, or to memory that has been moved by ++@code{realloc}. ++ ++@item ++Free or reallocate static memory. ++ ++@end itemize ++ ++There are several strategies for tracking stale memory pointers. Ideally, ++we would like to never reuse VM after the programmer has freed it, so that ++we will always be able to detect a stale pointer, no matter how long the ++program runs before using it. If you wish this behaviour, then pass ++the @code{-no-reuse-heap} option in `GCC_BOUNDS_OPTS' ++@xref{Environment at runtime}.@footnote{In a future version of bounds ++checking GCC, we will be able to unmap this memory. Thus the operating ++system will be able to reuse physical memory, whilest virtual memory ++addresses remain unused.} ++ ++In practice, we found this technique to be wasteful, so the default is to ++reuse heap memory immediately. However, in order to provide some ++protection against stale pointers, you may pass the @code{-reuse-age=<age>} ++option to the library. This will add freed blocks to a queue of pending ++blocks. You must call @code{free} @code{<age>} times before the block ++is actually reused. ++ ++Notice that the most common error is: ++ ++@example ++free_list (list *p) ++@{ ++ for (; p != NULL; p = p->next) ++ free (p); ++@} ++@end example ++ ++The default flags, @code{-reuse-heap -reuse-age=0}, will catch this error. ++ ++@node Unchecked objects ++@subsection Unchecked objects ++ ++Variables declared in files that are not compiled with @code{-fbounds-checking} ++are not normally known about by the checking library. Pointers that ++point to these variables are not checked, even where the operations ++on these pointers happen within checked code. To be sure that your ++program is running without any errors, you should turn on warnings about ++unchecked operations by giving the @code{-warn-unchecked-statics} and/or ++@code{-warn-unchecked-stack} flags at runtime. @xref{Environment at ++runtime}. ++ ++To avoid these warnings, and check all operations, you should take steps ++to add these objects to the tree used by the checking library. There are ++three approaches: ++ ++@itemize @bullet ++@item ++Declare the object as @code{extern} somewhere in checked code. Make sure that ++the size of the object appears in the expression, ie. @code{extern int a[10];}, ++not @code{extern int a[];}. ++ ++@item ++Add the object by hand by calling @code{__bounds_note_constructed_object}. ++This function is declared: ++@example ++void __bounds_note_constructed_object (ptr, size, align, filename, line, name); ++ void *ptr; /* Pointer to the object. */ ++ size_t size; /* Size of the object (bytes). */ ++ size_t align; /* Pass 1 here. */ ++ char *filename; /* Filename where declared (for debugging). */ ++ int line; /* Line number. */ ++ char *name; /* Name of the object. */ ++@end example ++ ++@item ++Add all the objects from a single object file, or a library automagically, ++using the @code{grab-statics} tool in @file{bounds/tools}. There is a README ++file in that directory that will tell you more. ++ ++@end itemize ++ ++@node Miscellaneous features ++@subsection Miscellaneous features ++ ++@itemize @bullet ++@item Detecting when a source file is being compiled with bounds checking. ++ ++When GCC compiles a file with the @code{-fbounds-checking} flag, it ++defines @code{__BOUNDS_CHECKING_ON} in the preprocessor. In addition, the ++variable @code{__bounds_checking_on} is set to 1 when bounds checking is ++on in the program as a whole, and set to 0 when it is not. The variable ++is actually located in @code{libgcc.a}, so it is always present (unless ++you aren't using GCC). ++ ++Notice the subtle difference between these two methods. Say a program ++consists of source files @file{file1.c} and @file{file2.c}. If the ++program is compiled with ++ ++@example ++gcc -fbounds-checking -c file1.c ++gcc -c file2.c ++gcc -fbounds-checking file1.o file2.o -o program ++@end example ++ ++@noindent ++then @file{file1.c} will be compiled with @code{__BOUNDS_CHECKING_ON} ++defined. In @file{file2.c} this will not be defined. Both files will ++be able to declare @code{extern int __bounds_checking_on;} and the ++variable will be read as @code{1} by both. ++ ++If the same files are compiled without bounds checking, then ++@code{__BOUNDS_CHECKING_ON} will not be defined. Both files will be ++able to declare @code{extern int __bounds_checking_on;} and will read ++the variable as @code{0}. ++ ++If the same files are compiled with another C compiler, then variable ++@code{__bounds_checking_on} will not exist. So all references to this ++variable should be defended by @code{#ifdef __GNUC__} @dots{} ++@code{#endif}. ++ ++@end itemize ++ ++@node Checking 2D array indices ++@subsection Checking 2D array indices ++ ++2D arrays (and, indeed, n-D arrays with n >= 2) are checked as you might ++expect. We consider such arrays to be flattened before checking. For instance ++a mathematical 3x3-matrix @code{A} might be defined as: ++ ++@example ++double A[3][3]; ++@end example ++ ++When @code{-no-array-index-check} is active we consider such a array as ++flattened. ++Bounds checking will then consider this to be a flat array with 9 elements. ++So, it is perfectly sound to write @code{A[1][4]}, since @code{1*3+4} @equiv{} ++@code{7}, and 0 <= 7 < 9. Similarly, @code{A[0][8]} and @code{A[2][-1]} ++will not generate bounds errors. (Interestingly, though, errors in the ++first index @emph{will} be caught --- this is to do with a subtlety in the ++way bounds checking works). ++ ++When @code{-array-index-check} is present every dimension of the array is ++checked separatly. This is the default. ++This flag is only used for arrays with size > 1. For arrays with size of 1 ++or 0 the flattened model is used. This allows the following code to work ++correctly. ++ ++@example ++struct _string_t ++@{ ++ int len; ++ char str[1]; ++@}; ++@end example ++ ++@node What errors are caught ++@subsection What errors are caught ++ ++A lot of people tell me that they have Purify, and bounds checking GCC seems ++unnecessary, since it seems to duplicate Purify but more slowly. Well, ++there are important reasons why bounds checking GCC is better than Purify, ++and if you rely on Purify alone, you will certainly miss bugs in your ++program. ++ ++@noindent ++This is what bounds checking GCC will find, which Purify won't: ++ ++@itemize @bullet ++@item Bounds of stack and static variables ++ ++Try compiling: ++@example ++main () ++@{ ++ int a[10], b[100], i; ++ ++ for (i = 0; i < 100; ++i) ++ a[i] = 0; ++@} ++@end example ++Purify will only detect these sorts of errors reliably if @code{a} is allocated ++with @code{malloc}. ++ ++@item Large offsets from memory allocated with @code{malloc} ++ ++Bugs such as the following one will not be found reliably by Purify, since ++it only puts a certain amount of blank padding between @code{malloc}'d ++memory. ++@example ++struct large_type @{ ++ int data[5000]; ++@}; ++ ++main () ++@{ ++ char *m1; ++ struct large_type *m2; ++ int i; ++ ++ m1 = (char *) malloc (20000); ++ m2 = (struct large_type *) malloc (sizeof (struct large_type) * 5); ++ ++ for (i = 4; i >= -2; --i) /* note: error when i == -1 */ ++ m2[i].data[0] = 0; ++@} ++@end example ++ ++@end itemize ++ ++@noindent ++This is what Purify will find, which bounds checking GCC won't: ++ ++@itemize @bullet ++@item Using a variable or memory before it is initialized ++ ++Bounds checking GCC can't currently check this, but it may well be added ++in a future version. GCC itself will pick up simple instances of this ++if you pass the @code{-Winitialized} flag (without @code{-fbounds-checking}), ++but cannot check use of @code{malloc}'d memory. ++ ++@end itemize ++ ++There is a freeware program which emulates Purify available from Tristan ++Gingold <gingold@@amoco.saclay.cea.fr>. It only runs under Linux. Purify ++only works on Sun SPARCstations and HP-PA machines, and, of course, costs ++lots of cash. ++ ++@node Performance ++@subsection Performance ++ ++This page is under construction. ++ ++@node Stubborn bugs ++@subsection Stubborn bugs ++ ++The very latest list of bugs can be found in @file{bounds/BUGS}. This is a ++list of some of the most stubborn bugs, some of which have been around since ++the first version. Please send bug reports and (even better) bug fixes to ++`rjones@@orchestream.com' or `Haj.Ten.Brugge@@net.HCC.nl'. ++ ++@itemize @bullet ++@ignore ++@item Incorrect initialization of arrays and structures. ++ ++Bounds checking relies on being able to rewrite initializers for stack ++variables with side effect calls, so we can detect when a variable comes ++into scope. For instance, the code: ++ ++@example ++f () ++@{ ++ @{ ++ int a; ++ /* ... */ ++ @} ++ @{ ++ int b; ++ /* ... */ ++ @} ++@} ++@end example ++ ++@noindent ++may be rewritten as: ++ ++@example ++f () ++@{ ++ @{ ++ int a = (__bounds_add_stack_object (&a, 4, 1, ...), 0); ++ /* ... */ ++ @} ++ @{ ++ int b = (__bounds_add_stack_object (&b, 4, 1, ...), 0); ++ /* ... */ ++ @} ++@} ++@end example ++ ++The code that rewrites variable initializers is ++@w{@code{c-bounds.c:bounds_frig_decl_initial}}. The function works for ++simple things like basic types, strings, arrays of strings; but it chokes ++on some more complicated types. It usually throws the error ++ ++@example ++empty initializer cannot be bounds checked ++@end example ++ ++@noindent ++when it meets one of these usages. The following uses are known to throw ++up this error (all occurring as auto variables inside functions): ++ ++@example ++char nodes[][20] = @{"foo", "bar"@}; ++--- reported by Stuart Kemp <skemp@@bmc.com> ++ ++struct @{ unsigned char c[6]; @} e = @{ 1, 2, 3, 4, 5, 6 @}; ++ ++struct @{ int foo, bar; @} var = *othervar; ++--- reported by Frank Cringle <fdc@@cliwe.ping.de> ++@end example ++ ++I don't fully understand the TREE generated by GCC for constructors. Can ++someone else solve this? ++@end ignore ++ ++@item Padding missed out between aggregates and 32-bit objects on the stack. ++ ++Bounds checking GCC usually inserts bytes of padding between adjacent ++stack objects. This dead area between objects helps the checking library ++to detect the difference between a pointer to the last byte + 1 of one ++object and a pointer to the first byte of the next object. For some ++reason, this padding is omitted occasionally when a 32-bit object (eg. int, ++pointer) follows an aggregate (eg. array). But not always. ++ ++The bug used to happen under Linux, but at some point in the past it seems ++to have fixed itself. The bug still appears under Solaris. You can demonstrate ++the bug by compiling Tcl/Tk on Solaris. The checking library will report ++at run time that a reference has been made to the byte following the end ++of the first object. When you look at the code, you will see that it is in fact ++referring to the next object (ie. the 32-bit integer). ++ ++Update (16/10/95): I fixed some stuff in @w{assign_stack_local} and ++@w{assign_outer_stack_local} (thanks to @w{Don Lewis} @w{<gdonl@@gv.ssi1.com>}) ++but I haven't been able to verify that this bug has gone for sure. ++ ++@end itemize ++ ++@node Using G77 with bounds checking ++@subsection Using G77 with bounds checking ++ ++Bounds checking patches break the current G77 patches. You can get round this ++very easily. Copy @code{cp/bounds.c} into the @code{f/} subdirectory. Alter ++@code{f/Makefile.in} so that it compiles @code{bounds.c} along with ++the other G77 object files. ++ ++Notice that this doesn't add bounds checking to FORTRAN @w{(:-<)}. Just lets ++you compile it. ++ + @node Return Address + @section Getting the Return or Frame Address of a Function + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/expr.c gcc-4.0.2/gcc/expr.c +--- gcc-4.0.2.org/gcc/expr.c 2005-09-10 03:03:28.000000000 +0200 ++++ gcc-4.0.2/gcc/expr.c 2005-09-29 17:50:05.000000000 +0200 +@@ -52,6 +52,7 @@ Software Foundation, 59 Temple Place - S + #include "tree-flow.h" + #include "target.h" + #include "timevar.h" ++#include "c-bounds.h" + + /* Decide whether a function's arguments should be processed + from first to last or from last to first. +@@ -1341,6 +1342,9 @@ emit_block_move_via_libcall (rtx dst, rt + arg_list = tree_cons (NULL_TREE, src_tree, arg_list); + arg_list = tree_cons (NULL_TREE, dst_tree, arg_list); + ++ if (bounds_checking_enabled) ++ bounds_convert_funcname (&fn, &arg_list); ++ + /* Now we have to build up the CALL_EXPR itself. */ + call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); + call_expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), +@@ -1365,7 +1369,10 @@ init_block_move_fn (const char *asmspec) + { + tree args, fn; + +- fn = get_identifier ("memcpy"); ++ if (bounds_checking_enabled) ++ fn = get_identifier ("__bounds_memcpy"); ++ else ++ fn = get_identifier ("memcpy"); + args = build_function_type_list (ptr_type_node, ptr_type_node, + const_ptr_type_node, sizetype, + NULL_TREE); +@@ -2544,6 +2551,9 @@ clear_storage_via_libcall (rtx object, r + arg_list = tree_cons (NULL_TREE, integer_zero_node, arg_list); + arg_list = tree_cons (NULL_TREE, object_tree, arg_list); + ++ if (bounds_checking_enabled) ++ bounds_convert_funcname (&fn, &arg_list); ++ + /* Now we have to build up the CALL_EXPR itself. */ + call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); + call_expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), +@@ -2568,7 +2578,10 @@ init_block_clear_fn (const char *asmspec + { + tree fn, args; + +- fn = get_identifier ("memset"); ++ if (bounds_checking_enabled) ++ fn = get_identifier ("__bounds_memset"); ++ else ++ fn = get_identifier ("memset"); + args = build_function_type_list (ptr_type_node, ptr_type_node, + integer_type_node, sizetype, + NULL_TREE); +@@ -5229,6 +5242,7 @@ store_field (rtx target, HOST_WIDE_INT b + RHS isn't the same size as the bitfield, we must use bitfield + operations. */ + || (bitsize >= 0 ++ && TREE_TYPE (exp) != error_mark_node + && TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) == INTEGER_CST + && compare_tree_int (TYPE_SIZE (TREE_TYPE (exp)), bitsize) != 0)) + { +@@ -6057,7 +6071,13 @@ expand_var (tree var) + else if (TREE_CODE (var) == VAR_DECL && !TREE_STATIC (var)) + expand_decl (var); + else if (TREE_CODE (var) == VAR_DECL && TREE_STATIC (var)) +- rest_of_decl_compilation (var, 0, 0); ++ { ++ rest_of_decl_compilation (var, 0, 0); ++ /* Generate extra runtime expression for decl if needed. */ ++ if (bounds_checking_enabled && POINTER_TYPE_P (TREE_TYPE (var))) ++ bounds_mark_for_runtime_check (var); ++ ++ } + else + /* No expansion needed. */ + gcc_assert (TREE_CODE (var) == TYPE_DECL +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/flags.h gcc-4.0.2/gcc/flags.h +--- gcc-4.0.2.org/gcc/flags.h 2005-02-13 20:05:03.000000000 +0100 ++++ gcc-4.0.2/gcc/flags.h 2005-09-29 17:50:05.000000000 +0200 +@@ -201,6 +201,14 @@ extern int flag_renumber_insns; + + extern int frame_pointer_needed; + ++/* Flag indicating bounds checking in the C front-end. */ ++ ++extern int bounds_checking_enabled; ++ ++/* Flag for string only bounds checking. */ ++ ++extern int bounds_strings_only_enabled; ++ + /* Nonzero if subexpressions must be evaluated from left-to-right. */ + extern int flag_evaluation_order; + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/fold-const.c gcc-4.0.2/gcc/fold-const.c +--- gcc-4.0.2.org/gcc/fold-const.c 2005-09-09 11:25:02.000000000 +0200 ++++ gcc-4.0.2/gcc/fold-const.c 2005-09-29 17:50:05.000000000 +0200 +@@ -3021,6 +3021,15 @@ invert_truthvalue (tree arg) + return build1 (CLEANUP_POINT_EXPR, type, + invert_truthvalue (TREE_OPERAND (arg, 0))); + ++ /* Bounds checking often builds call expressions returning an integer ++ in place of equality and inequality operations, so we must catch ++ this case specially here. Otherwise, we abort after this switch ++ statement, since the return type cannot be `BOOLEAN' in C. */ ++ case CALL_EXPR: ++ if (bounds_checking_enabled && TREE_CODE (type) == INTEGER_TYPE) ++ return build1 (TRUTH_NOT_EXPR, type, arg); ++ break; ++ + default: + break; + } +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/fortran/bounds.c gcc-4.0.2/gcc/fortran/bounds.c +--- gcc-4.0.2.org/gcc/fortran/bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/fortran/bounds.c 2005-09-29 17:50:05.000000000 +0200 +@@ -0,0 +1,166 @@ ++/* This file is a dummy, for when C++ gets bounds checking like C. In the ++ mean time, there are some empty function definitions here, since `calls.c' ++ references these (but never calls them). */ ++ ++#include "config.h" ++#include "system.h" ++#include <stdio.h> ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "varray.h" ++#include "ggc.h" ++ ++static GTY (()) varray_type static_ptr_init_list; ++static GTY (()) varray_type deferred_global_decls; ++static GTY (()) tree bounds_memcpy; ++static GTY (()) tree bounds_mempcpy; ++static GTY (()) tree bounds_memset; ++static GTY (()) tree bounds_find_object; ++static GTY (()) tree bounds_maybe_find_object; ++static GTY (()) tree bounds_check_ptr_plus_int; ++static GTY (()) tree bounds_check_ptr_minus_int; ++static GTY (()) tree bounds_check_ptr_plus_int_obj; ++static GTY (()) tree bounds_check_ptr_minus_int_obj; ++static GTY (()) tree bounds_check_array_reference; ++static GTY (()) tree bounds_check_array_reference_obj; ++static GTY (()) tree bounds_check_component_reference; ++static GTY (()) tree bounds_check_component_reference_obj; ++static GTY (()) tree bounds_check_ptr_diff; ++static GTY (()) tree bounds_check_ptr_diff_obj; ++static GTY (()) tree bounds_check_reference; ++static GTY (()) tree bounds_check_reference_obj; ++static GTY (()) tree bounds_check_ptr_lt_ptr; ++static GTY (()) tree bounds_check_ptr_lt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_le_ptr; ++static GTY (()) tree bounds_check_ptr_le_ptr_obj; ++static GTY (()) tree bounds_check_ptr_gt_ptr; ++static GTY (()) tree bounds_check_ptr_gt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_ge_ptr; ++static GTY (()) tree bounds_check_ptr_ge_ptr_obj; ++static GTY (()) tree bounds_check_ptr_eq_ptr; ++static GTY (()) tree bounds_check_ptr_ne_ptr; ++static GTY (()) tree bounds_check_ptr_postinc; ++static GTY (()) tree bounds_check_ptr_preinc; ++static GTY (()) tree bounds_check_ptr_postdec; ++static GTY (()) tree bounds_check_ptr_predec; ++static GTY (()) tree bounds_check_ptr_postinc_obj; ++static GTY (()) tree bounds_check_ptr_preinc_obj; ++static GTY (()) tree bounds_check_ptr_postdec_obj; ++static GTY (()) tree bounds_check_ptr_predec_obj; ++static GTY (()) tree bounds_check_ptr_postinc_ref; ++static GTY (()) tree bounds_check_ptr_preinc_ref; ++static GTY (()) tree bounds_check_ptr_postdec_ref; ++static GTY (()) tree bounds_check_ptr_predec_ref; ++static GTY (()) tree bounds_check_ptr_postinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_preinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_postdec_ref_obj; ++static GTY (()) tree bounds_check_ptr_predec_ref_obj; ++static GTY (()) tree bounds_check_ptr_true; ++static GTY (()) tree bounds_check_ptr_false; ++static GTY (()) tree bounds_note_constructed_object; ++static GTY (()) tree bounds_note_constructed_private_table; ++static GTY (()) tree bounds_push_function; ++static GTY (()) tree bounds_pop_function; ++static GTY (()) tree bounds_add_param_object; ++static GTY (()) tree bounds_add_stack_object; ++static GTY (()) tree bounds_delete_stack_object; ++static GTY (()) tree bounds_initialize_library; ++static GTY (()) tree bounds_check_free; ++static GTY (()) tree bounds_check_malloc; ++static GTY (()) tree bounds_check_realloc; ++static GTY (()) tree bounds_check_memalign; ++static GTY (()) tree bounds_check_calloc; ++static GTY (()) tree bounds_check_valloc; ++static GTY (()) tree bounds_check_alloca; ++static GTY (()) tree bounds_check___alloca; ++static GTY (()) tree bounds_check___builtin_alloca; ++static GTY (()) tree bounds_check_mmap; ++static GTY (()) tree bounds_check_munmap; ++static GTY (()) tree bounds_check_memcpy; ++static GTY (()) tree bounds_check_mempcpy; ++static GTY (()) tree bounds_check_memmove; ++static GTY (()) tree bounds_check_bcopy; ++static GTY (()) tree bounds_check_memset; ++static GTY (()) tree bounds_check_bzero; ++static GTY (()) tree bounds_check_memcmp; ++static GTY (()) tree bounds_check_bcmp; ++static GTY (()) tree bounds_check_strcpy; ++static GTY (()) tree bounds_check_strncpy; ++static GTY (()) tree bounds_check_strlen; ++static GTY (()) tree bounds_check_strcmp; ++static GTY (()) tree bounds_check_strncmp; ++static GTY (()) tree bounds_check_strcat; ++static GTY (()) tree bounds_check_strncat; ++static GTY (()) tree bounds_check_strpbrk; ++static GTY (()) tree bounds_check_strrchr; ++static GTY (()) tree bounds_check_rindex; ++static GTY (()) tree bounds_check_strspn; ++static GTY (()) tree bounds_check_strcspn; ++static GTY (()) tree bounds_check_strstr; ++static GTY (()) tree bounds_check_strtok; ++static GTY (()) tree bounds_check_strtok_r; ++static GTY (()) tree bounds_check_strdup; ++static GTY (()) tree bounds_check_strchr; ++static GTY (()) tree bounds_check_index; ++static GTY (()) tree bounds_check_strcoll; ++static GTY (()) tree bounds_check_strxfrm; ++static GTY (()) tree bounds_check_strcasecmp; ++static GTY (()) tree bounds_check_strncasecmp; ++static GTY (()) tree bounds_check_memchr; ++static GTY (()) tree bounds_check_memccpy; ++static GTY (()) tree bounds_private_statics; ++ ++#include "gt-c-bounds.h" ++ ++void ++bounds_convert_funcname (tree * function ATTRIBUTE_UNUSED, ++ tree * params ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_mark_for_runtime_check (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_build_static_constructors (void) ++{ ++ abort (); ++} ++ ++void ++bounds_register_decl (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++int ++bounds_is_deletable_fn_p (char *name ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_note_call_for_deletion (rtx first_insn ATTRIBUTE_UNUSED, ++ rtx last_insn ATTRIBUTE_UNUSED, ++ char *fnname ATTRIBUTE_UNUSED, ++ tree callexpr ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++tree ++bounds_build_truthvalue_conversion (tree arg ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_delete_redundant_calls (void) ++{ ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/fortran/Make-lang.in gcc-4.0.2/gcc/fortran/Make-lang.in +--- gcc-4.0.2.org/gcc/fortran/Make-lang.in 2004-11-13 08:35:54.000000000 +0100 ++++ gcc-4.0.2/gcc/fortran/Make-lang.in 2005-09-29 17:50:05.000000000 +0200 +@@ -74,7 +74,7 @@ F95_OBJS = $(F95_PARSER_OBJS) \ + fortran/trans.o fortran/trans-array.o fortran/trans-common.o \ + fortran/trans-const.o fortran/trans-decl.o fortran/trans-expr.o \ + fortran/trans-intrinsic.o fortran/trans-io.o fortran/trans-stmt.o \ +- fortran/trans-types.o ++ fortran/trans-types.o fortran/bounds.o + + # GFORTRAN uses GMP for its internal arithmetics. + F95_LIBS = $(GMPLIBS) $(LIBS) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/function.c gcc-4.0.2/gcc/function.c +--- gcc-4.0.2.org/gcc/function.c 2005-03-10 16:11:04.000000000 +0100 ++++ gcc-4.0.2/gcc/function.c 2005-09-29 17:50:06.000000000 +0200 +@@ -61,6 +61,7 @@ Software Foundation, 59 Temple Place - S + #include "target.h" + #include "cfglayout.h" + #include "tree-gimple.h" ++#include "c-bounds.h" + + #ifndef LOCAL_ALIGNMENT + #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT +@@ -421,6 +422,9 @@ assign_stack_local_1 (enum machine_mode + else + alignment = align / BITS_PER_UNIT; + ++ if (bounds_checking_enabled) ++ size += BIGGEST_ALIGNMENT / BITS_PER_UNIT; ++ + #ifdef FRAME_GROWS_DOWNWARD + function->x_frame_offset -= size; + #endif +@@ -465,7 +469,11 @@ assign_stack_local_1 (enum machine_mode + /* On a big-endian machine, if we are allocating more space than we will use, + use the least significant bytes of those that are allocated. */ + if (BYTES_BIG_ENDIAN && mode != BLKmode) +- bigend_correction = size - GET_MODE_SIZE (mode); ++ { ++ bigend_correction = size - GET_MODE_SIZE (mode); ++ if (bounds_checking_enabled) ++ bigend_correction -= BIGGEST_ALIGNMENT / BITS_PER_UNIT; ++ } + + /* If we have already instantiated virtual registers, return the actual + address relative to the frame pointer. */ +@@ -607,6 +615,10 @@ assign_stack_temp_for_type (enum machine + /* These are now unused. */ + gcc_assert (keep <= 1); + ++ /* Add a byte of padding between bounds checked variables. */ ++ if (bounds_checking_enabled) ++ size += BIGGEST_ALIGNMENT / BITS_PER_UNIT; ++ + if (mode == BLKmode) + align = BIGGEST_ALIGNMENT; + else +@@ -4088,6 +4100,9 @@ expand_main_function (void) + #ifndef HAS_INIT_SECTION + emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode, 0); + #endif ++ if (bounds_checking_enabled && bounds_reentrant_defined) ++ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bounds_pthread_init"), ++ LCT_NORMAL, VOIDmode, 0); + } + + /* Start the RTL for a new function, and set variables used for +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/function.h gcc-4.0.2/gcc/function.h +--- gcc-4.0.2.org/gcc/function.h 2005-02-20 12:09:16.000000000 +0100 ++++ gcc-4.0.2/gcc/function.h 2005-09-29 17:50:06.000000000 +0200 +@@ -349,6 +349,10 @@ struct function GTY(()) + /* The variables unexpanded so far. */ + tree unexpanded_var_list; + ++ /* Contains the variable that holds the current bounds-checking function ++ number. */ ++ tree bounds_function_nr; ++ + /* Collected bit flags. */ + + /* Nonzero if function being compiled needs to be given an address +@@ -471,6 +475,7 @@ extern int trampolines_created; + #define current_function_epilogue_delay_list (cfun->epilogue_delay_list) + #define current_function_has_nonlocal_label (cfun->has_nonlocal_label) + #define current_function_has_nonlocal_goto (cfun->has_nonlocal_goto) ++#define current_function_bounds_nr (cfun->bounds_function_nr) + + #define return_label (cfun->x_return_label) + #define naked_return_label (cfun->x_naked_return_label) +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/gcc.c gcc-4.0.2/gcc/gcc.c +--- gcc-4.0.2.org/gcc/gcc.c 2005-06-06 21:20:29.000000000 +0200 ++++ gcc-4.0.2/gcc/gcc.c 2005-09-29 17:50:06.000000000 +0200 +@@ -577,6 +577,12 @@ proper position among the other output f + #ifndef CPP_SPEC + #define CPP_SPEC "" + #endif ++#ifndef BOUNDS_CPP_SPEC ++#define BOUNDS_CPP_SPEC " %{fbounds-checking:-D__BOUNDS_CHECKING_ON}" \ ++ " %{fbc-strings-only:-D__BC_STRINGS_ONLY_ON}" \ ++ " %{fbounds-checking|fbc-strings-only: " \ ++ "-include unchecked.h} " ++#endif + + /* config.h can define CC1_SPEC to provide extra args to cc1 and cc1plus + or extra switch-translations. */ +@@ -701,6 +707,8 @@ proper position among the other output f + %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\ + %{static:} %{L*} %(mfwrap) %(link_libgcc) %o %(mflib)\ + %{fprofile-arcs|fprofile-generate:-lgcov}\ ++ %{!symbolic:%{!shared:%{fbounds-checking:libboundscheck.a%s}}}\ ++ %{!symbolic:%{!shared:%{fbc-strings-only:libboundscheck.a%s}}}\ + %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}\ + %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}" + #endif +@@ -723,7 +731,7 @@ proper position among the other output f + #endif + + static const char *asm_debug; +-static const char *cpp_spec = CPP_SPEC; ++static const char *cpp_spec = CPP_SPEC BOUNDS_CPP_SPEC; + static const char *cc1_spec = CC1_SPEC; + static const char *cc1plus_spec = CC1PLUS_SPEC; + static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/genconditions.c gcc-4.0.2/gcc/genconditions.c +--- gcc-4.0.2.org/gcc/genconditions.c 2005-01-24 13:08:06.000000000 +0100 ++++ gcc-4.0.2/gcc/genconditions.c 2005-09-29 17:50:06.000000000 +0200 +@@ -128,7 +128,11 @@ extern rtx operands[];\n"); + array initializers, fall back (by using dummy-conditions.c above)\n\ + to assuming that all conditions potentially vary at run time. It\n\ + works in 3.0.1 and later; 3.0 only when not optimizing. */\n\ +-#define MAYBE_EVAL(expr) (__builtin_constant_p(expr) ? (int) (expr) : -1)\n"); ++#ifndef __BOUNDS_CHECKING_ON\n\ ++# define MAYBE_EVAL(expr) (__builtin_constant_p(expr) ? (int) (expr) : -1)\n\ ++#else\n\ ++# define MAYBE_EVAL(expr) -1\n\ ++#endif\n"); + } + + /* Write out one entry in the conditions table, using the data pointed +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/gimplify.c gcc-4.0.2/gcc/gimplify.c +--- gcc-4.0.2.org/gcc/gimplify.c 2005-09-02 17:34:38.000000000 +0200 ++++ gcc-4.0.2/gcc/gimplify.c 2005-09-29 17:50:06.000000000 +0200 +@@ -334,7 +334,7 @@ create_tmp_var_raw (tree type, const cha + TYPE_ATTRIBUTES (new_type) = TYPE_ATTRIBUTES (type); + + tmp_var = build_decl (VAR_DECL, prefix ? create_tmp_var_name (prefix) : NULL, +- type); ++ new_type); + + /* The variable was declared by the compiler. */ + DECL_ARTIFICIAL (tmp_var) = 1; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/ginclude/stdarg.h gcc-4.0.2/gcc/ginclude/stdarg.h +--- gcc-4.0.2.org/gcc/ginclude/stdarg.h 2003-03-13 03:58:40.000000000 +0100 ++++ gcc-4.0.2/gcc/ginclude/stdarg.h 2005-09-29 17:50:07.000000000 +0200 +@@ -49,7 +49,22 @@ typedef __builtin_va_list __gnuc_va_list + + #define va_start(v,l) __builtin_va_start(v,l) + #define va_end(v) __builtin_va_end(v) ++ ++/* Define va_arg in terms of __builtin_va_arg as appropriate for bounds ++ checking. */ ++#ifndef __BOUNDS_CHECKING_ON ++ + #define va_arg(v,l) __builtin_va_arg(v,l) ++ ++#else /* __BOUNDS_CHECKING_ON */ ++ ++#define va_arg(AP,TYPE) \ ++_Pragma("bounds_checking off") \ ++ __builtin_va_arg(AP,TYPE) \ ++_Pragma("bounds_checking on") ++ ++#endif /* __BOUNDS_CHECKING_ON */ ++ + #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L + #define va_copy(d,s) __builtin_va_copy(d,s) + #endif +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/ginclude/unchecked.h gcc-4.0.2/gcc/ginclude/unchecked.h +--- gcc-4.0.2.org/gcc/ginclude/unchecked.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/ginclude/unchecked.h 2005-09-29 17:50:07.000000000 +0200 +@@ -0,0 +1,1752 @@ ++/*----------------------------------------------------------------------* ++ * Bounds Checking for GCC. * ++ * Copyright (C) 1995 Richard W.M. Jones <rjones@orchestream.com>. * ++ *----------------------------------------------------------------------* ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the Free Software * ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ++ *----------------------------------------------------------------------* ++ * File: ++ * run-includes/unchecked.h ++ * Summary: ++ * Macros to allow per-pointer and per-use unchecked pointers. ++ * Other notes: ++ * ++ * Author Date Notes ++ * RWMJ 23/1/95 Initial implementation. ++ * RWMJ 17/6/95 Added miscellaneous features. ++ *----------------------------------------------------------------------*/ ++ ++#ifndef _bounds_unchecked_h ++#define _bounds_unchecked_h ++ ++#if defined(__GNUC__) && defined(__BOUNDS_CHECKING_ON) ++ ++/* Make pointer operations unchecked on each use. */ ++#define UNCHECKED_PTR_DIFF(p,q) BOUNDS_CHECKING_OFF_IN_EXPR((p) - (q)) ++#define UNCHECKED_PTR_PLUS_INT(p,i) BOUNDS_CHECKING_OFF_IN_EXPR((p) + (i)) ++#define UNCHECKED_PTR_MINUS_INT(p,i) BOUNDS_CHECKING_OFF_IN_EXPR((p) - (i)) ++ ++/* How to switch checking off over a region of the program. You will need ++ * 'DEBUG_FEATURES' set in the library. You do: ++ * .. ++ * BOUNDS_CHECKING_OFF; ++ * .. strange pointer operations here .. ++ * BOUNDS_CHECKING_ON; ++ */ ++#define BOUNDS_CHECKING_OFF \ ++_Pragma("bounds_checking off") ++ ++#define BOUNDS_CHECKING_ON \ ++_Pragma("bounds_checking on") ++ ++/* Switch bounds checking off in a single statement. You do: ++ * BOUNDS_CHECKING_OFF_DURING (stmt); ++ * This works for most 'ordinary' statements, ie. not returns, or gotos, etc. ++ * For expressions, use: ++ * BOUNDS_CHECKING_OFF_IN_EXPR (expr) ++ */ ++#define BOUNDS_CHECKING_OFF_DURING(stmt) \ ++ BOUNDS_CHECKING_OFF \ ++ do { stmt; } while (0) \ ++ BOUNDS_CHECKING_ON ++ ++#define BOUNDS_CHECKING_OFF_IN_EXPR(expr) \ ++ BOUNDS_CHECKING_OFF \ ++ (expr) \ ++ BOUNDS_CHECKING_ON ++ ++ ++#if defined(__OPTIMIZE__) && defined(__BOUNDS_INLINE__) ++ ++#ifndef __BOUNDS_DEBUG_FEATURES ++#define __BOUNDS_DEBUG_FEATURES 0 ++#endif ++#ifndef __BOUNDS_COLLECT_STATS ++#define __BOUNDS_COLLECT_STATS 0 ++#endif ++ ++#if __BOUNDS_DEBUG_FEATURES ++extern int __bounds_debug_print_calls; ++#endif ++ ++#if __BOUNDS_COLLECT_STATS ++extern unsigned __bounds_stats_ptr_plus_int; ++extern unsigned __bounds_stats_array_reference; ++extern unsigned __bounds_stats_ptr_diff; ++extern unsigned __bounds_stats_reference; ++extern unsigned __bounds_stats_component_reference; ++extern unsigned __bounds_stats_ptr_le_ptr; ++extern unsigned __bounds_stats_ptr_lt_ptr; ++extern unsigned __bounds_stats_ptr_ge_ptr; ++extern unsigned __bounds_stats_ptr_gt_ptr; ++extern unsigned __bounds_stats_ptr_ne_ptr; ++extern unsigned __bounds_stats_ptr_eq_ptr; ++extern unsigned __bounds_stats_ptr_postinc; ++extern unsigned __bounds_stats_ptr_preinc; ++extern unsigned __bounds_stats_ptr_postdec; ++extern unsigned __bounds_stats_ptr_predec; ++extern unsigned __bounds_stats_ptr_true; ++extern unsigned __bounds_stats_ptr_false; ++#endif ++ ++#pragma bounds_checking off ++ ++#define __BOUNDS_NULL (void *)0 ++#define __BOUNDS_ILLEGAL (void *)-2 ++ ++typedef __SIZE_TYPE__ __bounds_size_t; ++ ++typedef struct ++{ ++ void *__bounds_base; /* Points to base of the object. */ ++ void *__bounds_extent; /* Points to last byte in object+1. */ ++ __bounds_size_t __bounds_size; /* Size of the object. */ ++} __bounds_object; ++ ++typedef union ++{ ++ void *__bounds_void_pointer; ++ char *__bounds_char_pointer; ++} __bounds_union_type; ++ ++extern __bounds_object *__bounds_find_object (void *__bounds_pointer); ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_plus_int \ ++ __bounds_check_ptr_plus_int ++ ++extern void *__dummy_bounds_check_ptr_plus_int (__bounds_object * ++ __bounds_obj, ++ void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_plus_int (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_plus_int (__bounds_obj, __bounds_pointer, ++ __bounds_offset, __bounds_size, ++ __bounds_filename, __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_ptr_plus_int; ++#endif ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_plus_int_obj (void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pointer); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_plus_int (__bounds_obj, __bounds_pointer, ++ __bounds_offset, __bounds_size, ++ __bounds_filename, __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_ptr_plus_int; ++#endif ++ return __bounds_pnew; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_minus_int \ ++ __bounds_check_ptr_minus_int ++ ++extern void *__dummy_bounds_check_ptr_minus_int (__bounds_object * ++ __bounds_obj, ++ void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t ++ __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_minus_int (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer -= ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_minus_int (__bounds_obj, __bounds_pointer, ++ __bounds_offset, __bounds_size, ++ __bounds_filename, __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_ptr_plus_int; ++#endif ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_minus_int_obj (void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pointer); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer -= ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_minus_int (__bounds_obj, __bounds_pointer, ++ __bounds_offset, __bounds_size, ++ __bounds_filename, __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_ptr_plus_int; ++#endif ++ return __bounds_pnew; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_array_reference \ ++ __bounds_check_array_reference ++ ++extern int ++__dummy_bounds_check_array_reference (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ __bounds_size_t __bounds_array_size, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_array_reference (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ __bounds_size_t __bounds_array_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ (__bounds_array_size > __bounds_size ++ && (__bounds_offset < 0 ++ || ((int) __bounds_size * __bounds_offset) >= ++ (int) __bounds_array_size)) || __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_offset = __dummy_bounds_check_array_reference (__bounds_obj, ++ __bounds_pointer, ++ __bounds_offset, ++ __bounds_size, ++ __bounds_array_size, ++ __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_array_reference; ++#endif ++ return __bounds_offset; ++} ++ ++extern __inline__ int ++__bounds_check_array_reference_obj (void *__bounds_pointer, ++ int __bounds_offset, ++ __bounds_size_t __bounds_size, ++ __bounds_size_t __bounds_array_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pointer); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += ++ (int) __bounds_size *__bounds_offset; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ (__bounds_array_size > __bounds_size ++ && (__bounds_offset < 0 ++ || ((int) __bounds_size * __bounds_offset) >= ++ (int) __bounds_array_size)) || __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_offset = __dummy_bounds_check_array_reference (__bounds_obj, ++ __bounds_pointer, ++ __bounds_offset, ++ __bounds_size, ++ __bounds_array_size, ++ __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_array_reference; ++#endif ++ return __bounds_offset; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_diff \ ++ __bounds_check_ptr_diff ++ ++extern int ++__dummy_bounds_check_ptr_diff (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_diff (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, void *__bounds_pointer2, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_diff (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_size, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_diff; ++#endif ++ __bounds_result = (int) ((char *) __bounds_pointer1 - ++ (char *) __bounds_pointer2) / ++ (int) __bounds_size; ++ } ++ return __bounds_result; ++} ++ ++extern __inline__ int ++__bounds_check_ptr_diff_obj (void *__bounds_pointer1, void *__bounds_pointer2, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ __bounds_object *__bounds_obj1 = __bounds_find_object (__bounds_pointer1); ++ __bounds_object *__bounds_obj2 = __bounds_find_object (__bounds_pointer2); ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_diff (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_size, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_diff; ++#endif ++ __bounds_result = (int) ((char *) __bounds_pointer1 - ++ (char *) __bounds_pointer2) / ++ (int) __bounds_size; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_component_reference \ ++ __bounds_check_component_reference ++ ++extern void *__dummy_bounds_check_component_reference (__bounds_object * ++ __bounds_obj, ++ void *__bounds_pointer, ++ int __bounds_offset, ++ int __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_component_reference (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, ++ int __bounds_offset, int __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_plow; ++ void *__bounds_phigh; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_offset; ++ __bounds_plow = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_phigh = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_plow < __bounds_obj->__bounds_base ++ || __bounds_phigh > __bounds_obj->__bounds_extent) ++ __bounds_pointer = ++ __dummy_bounds_check_component_reference (__bounds_obj, ++ __bounds_pointer, ++ __bounds_offset, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_component_reference; ++#endif ++ return __bounds_pointer; ++} ++ ++extern __inline__ void * ++__bounds_check_component_reference_obj (void *__bounds_pointer, ++ int __bounds_offset, ++ int __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_plow; ++ void *__bounds_phigh; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pointer); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_offset; ++ __bounds_plow = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_phigh = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_plow < __bounds_obj->__bounds_base ++ || __bounds_phigh > __bounds_obj->__bounds_extent) ++ __bounds_pointer = ++ __dummy_bounds_check_component_reference (__bounds_obj, ++ __bounds_pointer, ++ __bounds_offset, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_component_reference; ++#endif ++ return __bounds_pointer; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_reference \ ++ __bounds_check_reference ++ ++extern void *__dummy_bounds_check_reference (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_reference (__bounds_object * __bounds_obj, ++ void *__bounds_pointer, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pointer < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pointer = ++ __dummy_bounds_check_reference (__bounds_obj, __bounds_pointer, ++ __bounds_size, __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_reference; ++#endif ++ return __bounds_pointer; ++} ++ ++extern __inline__ void * ++__bounds_check_reference_obj (void *__bounds_pointer, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pointer); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pointer < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pointer = ++ __dummy_bounds_check_reference (__bounds_obj, __bounds_pointer, ++ __bounds_size, __bounds_filename, ++ __bounds_line); ++#if __BOUNDS_COLLECT_STATS ++ else ++ ++__bounds_stats_reference; ++#endif ++ return __bounds_pointer; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_true \ ++ __bounds_check_ptr_true ++ ++extern int ++__dummy_bounds_check_ptr_true (void *__bounds_pointer, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_true (void *__bounds_pointer, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_pointer == __BOUNDS_ILLEGAL) ++ __bounds_result = ++ __dummy_bounds_check_ptr_true (__bounds_pointer, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_true; ++#endif ++ __bounds_result = __bounds_pointer != __BOUNDS_NULL; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_false \ ++ __bounds_check_ptr_false ++ ++extern int ++__dummy_bounds_check_ptr_false (void *__bounds_pointer, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_false (void *__bounds_pointer, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_pointer == __BOUNDS_ILLEGAL) ++ __bounds_result = __dummy_bounds_check_ptr_false (__bounds_pointer, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_false; ++#endif ++ __bounds_result = __bounds_pointer == __BOUNDS_NULL; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_le_ptr \ ++ __bounds_check_ptr_le_ptr ++ ++extern int ++__dummy_bounds_check_ptr_le_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_le_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_le_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_le_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 <= __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++extern __inline__ int ++__bounds_check_ptr_le_ptr_obj (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ int __bounds_result; ++ __bounds_object *__bounds_obj1 = __bounds_find_object (__bounds_pointer1); ++ __bounds_object *__bounds_obj2 = __bounds_find_object (__bounds_pointer2); ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_le_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_le_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 <= __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_lt_ptr \ ++ __bounds_check_ptr_lt_ptr ++ ++extern int ++__dummy_bounds_check_ptr_lt_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_lt_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_lt_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_lt_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 < __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++extern __inline__ int ++__bounds_check_ptr_lt_ptr_obj (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ int __bounds_result; ++ __bounds_object *__bounds_obj1 = __bounds_find_object (__bounds_pointer1); ++ __bounds_object *__bounds_obj2 = __bounds_find_object (__bounds_pointer2); ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_lt_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_lt_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 < __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_ge_ptr \ ++ __bounds_check_ptr_ge_ptr ++ ++extern int ++__dummy_bounds_check_ptr_ge_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_ge_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_ge_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_ge_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 >= __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++extern __inline__ int ++__bounds_check_ptr_ge_ptr_obj (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ int __bounds_result; ++ __bounds_object *__bounds_obj1 = __bounds_find_object (__bounds_pointer1); ++ __bounds_object *__bounds_obj2 = __bounds_find_object (__bounds_pointer2); ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_ge_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_ge_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 >= __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_gt_ptr \ ++ __bounds_check_ptr_gt_ptr ++ ++extern int ++__dummy_bounds_check_ptr_gt_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_gt_ptr (__bounds_object * __bounds_obj1, ++ __bounds_object * __bounds_obj2, ++ void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_gt_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_gt_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 > __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++extern __inline__ int ++__bounds_check_ptr_gt_ptr_obj (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ int __bounds_result; ++ __bounds_object *__bounds_obj1 = __bounds_find_object (__bounds_pointer1); ++ __bounds_object *__bounds_obj2 = __bounds_find_object (__bounds_pointer2); ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj1 == __BOUNDS_NULL || __bounds_obj1 != __bounds_obj2) ++ __bounds_result = ++ __dummy_bounds_check_ptr_gt_ptr (__bounds_obj1, __bounds_obj2, ++ __bounds_pointer1, __bounds_pointer2, ++ __bounds_filename, __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_gt_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 > __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_ne_ptr \ ++ __bounds_check_ptr_ne_ptr ++ ++extern int ++__dummy_bounds_check_ptr_ne_ptr (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_ne_ptr (void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_pointer1 == __BOUNDS_ILLEGAL ++ || __bounds_pointer2 == __BOUNDS_ILLEGAL) ++ __bounds_result = __dummy_bounds_check_ptr_ne_ptr (__bounds_pointer1, ++ __bounds_pointer2, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_ne_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 != __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_eq_ptr \ ++ __bounds_check_ptr_eq_ptr ++ ++extern int ++__dummy_bounds_check_ptr_eq_ptr (void *__bounds_pointer1, ++ void *__bounds_pointer2, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ int ++__bounds_check_ptr_eq_ptr (void *__bounds_pointer1, void *__bounds_pointer2, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ int __bounds_result; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_pointer1 == __BOUNDS_ILLEGAL ++ || __bounds_pointer2 == __BOUNDS_ILLEGAL) ++ __bounds_result = __dummy_bounds_check_ptr_eq_ptr (__bounds_pointer1, ++ __bounds_pointer2, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_eq_ptr; ++#endif ++ __bounds_result = __bounds_pointer1 == __bounds_pointer2; ++ } ++ return __bounds_result; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_postinc \ ++ __bounds_check_ptr_postinc ++ ++extern void *__dummy_bounds_check_ptr_postinc (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_postinc (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postinc (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_postinc_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postinc (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_preinc \ ++ __bounds_check_ptr_preinc ++ ++extern void *__dummy_bounds_check_ptr_preinc (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_preinc (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_preinc (__bounds_obj, __bounds_ptr_to_ptr, ++ __bounds_inc, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_preinc_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_preinc (__bounds_obj, __bounds_ptr_to_ptr, ++ __bounds_inc, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_postdec \ ++ __bounds_check_ptr_postdec ++ ++extern void *__dummy_bounds_check_ptr_postdec (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_postdec (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postdec (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_postdec_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postdec (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_predec \ ++ __bounds_check_ptr_predec ++ ++extern void *__dummy_bounds_check_ptr_predec (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_predec (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ const char *__bounds_filename, int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_predec (__bounds_obj, __bounds_ptr_to_ptr, ++ __bounds_inc, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_predec_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent) ++ __bounds_pnew = ++ __dummy_bounds_check_ptr_predec (__bounds_obj, __bounds_ptr_to_ptr, ++ __bounds_inc, __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_postinc_ref \ ++ __bounds_check_ptr_postinc_ref ++ ++extern void *__dummy_bounds_check_ptr_postinc_ref (__bounds_object * ++ __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t ++ __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_postinc_ref (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_pold < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postinc_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_postinc_ref_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_pold < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postinc_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_preinc_ref \ ++ __bounds_check_ptr_preinc_ref ++ ++extern void *__dummy_bounds_check_ptr_preinc_ref (__bounds_object * ++ __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t ++ __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_preinc_ref (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pnew = __dummy_bounds_check_ptr_preinc_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_preinc_ref_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer += __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pnew = __dummy_bounds_check_ptr_preinc_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_preinc; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_postdec_ref \ ++ __bounds_check_ptr_postdec_ref ++ ++extern void *__dummy_bounds_check_ptr_postdec_ref (__bounds_object * ++ __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t ++ __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_postdec_ref (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_pold < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postdec_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_postdec_ref_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_pold < __bounds_obj->__bounds_base ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pold = __dummy_bounds_check_ptr_postdec_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_postdec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pold; ++} ++ ++#pragma redefine_extname __dummy_bounds_check_ptr_predec_ref \ ++ __bounds_check_ptr_predec_ref ++ ++extern void *__dummy_bounds_check_ptr_predec_ref (__bounds_object * ++ __bounds_obj, ++ void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t ++ __bounds_size, ++ const char ++ *__bounds_filename, ++ int __bounds_line); ++ ++extern __inline__ void * ++__bounds_check_ptr_predec_ref (__bounds_object * __bounds_obj, ++ void **__bounds_ptr_to_ptr, int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pnew = __dummy_bounds_check_ptr_predec_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++extern __inline__ void * ++__bounds_check_ptr_predec_ref_obj (void **__bounds_ptr_to_ptr, ++ int __bounds_inc, ++ __bounds_size_t __bounds_size, ++ const char *__bounds_filename, ++ int __bounds_line) ++{ ++ __bounds_union_type __bounds_union; ++ void *__bounds_pold = *__bounds_ptr_to_ptr;; ++ void *__bounds_pnew; ++ void *__bounds_ptop; ++ __bounds_object *__bounds_obj = __bounds_find_object (__bounds_pold); ++ ++ __bounds_union.__bounds_void_pointer = __bounds_pold; ++ __bounds_union.__bounds_char_pointer -= __bounds_inc; ++ __bounds_pnew = __bounds_union.__bounds_void_pointer; ++ __bounds_union.__bounds_char_pointer += __bounds_size; ++ __bounds_ptop = __bounds_union.__bounds_void_pointer; ++ ++ if ( ++#if __BOUNDS_DEBUG_FEATURES ++ __bounds_debug_print_calls || ++#endif ++ __bounds_obj == __BOUNDS_NULL ++ || __bounds_pnew < __bounds_obj->__bounds_base ++ || __bounds_pnew > __bounds_obj->__bounds_extent ++ || __bounds_ptop > __bounds_obj->__bounds_extent) ++ __bounds_pnew = __dummy_bounds_check_ptr_predec_ref (__bounds_obj, ++ __bounds_ptr_to_ptr, ++ __bounds_inc, ++ __bounds_size, ++ __bounds_filename, ++ __bounds_line); ++ else ++ { ++#if __BOUNDS_COLLECT_STATS ++ ++__bounds_stats_ptr_predec; ++#endif ++ *__bounds_ptr_to_ptr = __bounds_pnew; ++ } ++ return __bounds_pnew; ++} ++ ++#pragma bounds_checking on ++ ++#endif ++ ++#else /* not __GNUC__ or not __BOUNDS_CHECKING_ON */ ++ ++#define UNCHECKED_PTR_DIFF(p,q) ((p) - (q)) ++#define UNCHECKED_PTR_PLUS_INT(p,i) ((p) + (i)) ++#define UNCHECKED_PTR_MINUS_INT(p,i) ((p) - (i)) ++ ++#define BOUNDS_CHECKING_OFF ++#define BOUNDS_CHECKING_ON ++ ++#define BOUNDS_CHECKING_OFF_DURING(stmt) do { stmt; } while (0) ++#define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) ++ ++#endif /* __GNUC__, __BOUNDS_CHECKING_ON */ ++#endif /* _bounds_unchecked_h */ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/java/bounds.c gcc-4.0.2/gcc/java/bounds.c +--- gcc-4.0.2.org/gcc/java/bounds.c 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-4.0.2/gcc/java/bounds.c 2005-09-29 17:50:07.000000000 +0200 +@@ -0,0 +1,166 @@ ++/* This file is a dummy, for when C++ gets bounds checking like C. In the ++ mean time, there are some empty function definitions here, since `calls.c' ++ references these (but never calls them). */ ++ ++#include "config.h" ++#include "system.h" ++#include <stdio.h> ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "varray.h" ++#include "ggc.h" ++ ++static GTY (()) varray_type static_ptr_init_list; ++static GTY (()) varray_type deferred_global_decls; ++static GTY (()) tree bounds_memcpy; ++static GTY (()) tree bounds_mempcpy; ++static GTY (()) tree bounds_memset; ++static GTY (()) tree bounds_find_object; ++static GTY (()) tree bounds_maybe_find_object; ++static GTY (()) tree bounds_check_ptr_plus_int; ++static GTY (()) tree bounds_check_ptr_minus_int; ++static GTY (()) tree bounds_check_ptr_plus_int_obj; ++static GTY (()) tree bounds_check_ptr_minus_int_obj; ++static GTY (()) tree bounds_check_array_reference; ++static GTY (()) tree bounds_check_array_reference_obj; ++static GTY (()) tree bounds_check_component_reference; ++static GTY (()) tree bounds_check_component_reference_obj; ++static GTY (()) tree bounds_check_ptr_diff; ++static GTY (()) tree bounds_check_ptr_diff_obj; ++static GTY (()) tree bounds_check_reference; ++static GTY (()) tree bounds_check_reference_obj; ++static GTY (()) tree bounds_check_ptr_lt_ptr; ++static GTY (()) tree bounds_check_ptr_lt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_le_ptr; ++static GTY (()) tree bounds_check_ptr_le_ptr_obj; ++static GTY (()) tree bounds_check_ptr_gt_ptr; ++static GTY (()) tree bounds_check_ptr_gt_ptr_obj; ++static GTY (()) tree bounds_check_ptr_ge_ptr; ++static GTY (()) tree bounds_check_ptr_ge_ptr_obj; ++static GTY (()) tree bounds_check_ptr_eq_ptr; ++static GTY (()) tree bounds_check_ptr_ne_ptr; ++static GTY (()) tree bounds_check_ptr_postinc; ++static GTY (()) tree bounds_check_ptr_preinc; ++static GTY (()) tree bounds_check_ptr_postdec; ++static GTY (()) tree bounds_check_ptr_predec; ++static GTY (()) tree bounds_check_ptr_postinc_obj; ++static GTY (()) tree bounds_check_ptr_preinc_obj; ++static GTY (()) tree bounds_check_ptr_postdec_obj; ++static GTY (()) tree bounds_check_ptr_predec_obj; ++static GTY (()) tree bounds_check_ptr_postinc_ref; ++static GTY (()) tree bounds_check_ptr_preinc_ref; ++static GTY (()) tree bounds_check_ptr_postdec_ref; ++static GTY (()) tree bounds_check_ptr_predec_ref; ++static GTY (()) tree bounds_check_ptr_postinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_preinc_ref_obj; ++static GTY (()) tree bounds_check_ptr_postdec_ref_obj; ++static GTY (()) tree bounds_check_ptr_predec_ref_obj; ++static GTY (()) tree bounds_check_ptr_true; ++static GTY (()) tree bounds_check_ptr_false; ++static GTY (()) tree bounds_note_constructed_object; ++static GTY (()) tree bounds_note_constructed_private_table; ++static GTY (()) tree bounds_push_function; ++static GTY (()) tree bounds_pop_function; ++static GTY (()) tree bounds_add_param_object; ++static GTY (()) tree bounds_add_stack_object; ++static GTY (()) tree bounds_delete_stack_object; ++static GTY (()) tree bounds_initialize_library; ++static GTY (()) tree bounds_check_free; ++static GTY (()) tree bounds_check_malloc; ++static GTY (()) tree bounds_check_realloc; ++static GTY (()) tree bounds_check_memalign; ++static GTY (()) tree bounds_check_calloc; ++static GTY (()) tree bounds_check_valloc; ++static GTY (()) tree bounds_check_alloca; ++static GTY (()) tree bounds_check___alloca; ++static GTY (()) tree bounds_check___builtin_alloca; ++static GTY (()) tree bounds_check_mmap; ++static GTY (()) tree bounds_check_munmap; ++static GTY (()) tree bounds_check_memcpy; ++static GTY (()) tree bounds_check_mempcpy; ++static GTY (()) tree bounds_check_memmove; ++static GTY (()) tree bounds_check_bcopy; ++static GTY (()) tree bounds_check_memset; ++static GTY (()) tree bounds_check_bzero; ++static GTY (()) tree bounds_check_memcmp; ++static GTY (()) tree bounds_check_bcmp; ++static GTY (()) tree bounds_check_strcpy; ++static GTY (()) tree bounds_check_strncpy; ++static GTY (()) tree bounds_check_strlen; ++static GTY (()) tree bounds_check_strcmp; ++static GTY (()) tree bounds_check_strncmp; ++static GTY (()) tree bounds_check_strcat; ++static GTY (()) tree bounds_check_strncat; ++static GTY (()) tree bounds_check_strpbrk; ++static GTY (()) tree bounds_check_strrchr; ++static GTY (()) tree bounds_check_rindex; ++static GTY (()) tree bounds_check_strspn; ++static GTY (()) tree bounds_check_strcspn; ++static GTY (()) tree bounds_check_strstr; ++static GTY (()) tree bounds_check_strtok; ++static GTY (()) tree bounds_check_strtok_r; ++static GTY (()) tree bounds_check_strdup; ++static GTY (()) tree bounds_check_strchr; ++static GTY (()) tree bounds_check_index; ++static GTY (()) tree bounds_check_strcoll; ++static GTY (()) tree bounds_check_strxfrm; ++static GTY (()) tree bounds_check_strcasecmp; ++static GTY (()) tree bounds_check_strncasecmp; ++static GTY (()) tree bounds_check_memchr; ++static GTY (()) tree bounds_check_memccpy; ++static GTY (()) tree bounds_private_statics; ++ ++#include "gt-c-bounds.h" ++ ++void ++bounds_convert_funcname (tree * function ATTRIBUTE_UNUSED, ++ tree * params ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_mark_for_runtime_check (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_build_static_constructors (void) ++{ ++ abort (); ++} ++ ++void ++bounds_register_decl (tree decl ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++int ++bounds_is_deletable_fn_p (char *name ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_note_call_for_deletion (rtx first_insn ATTRIBUTE_UNUSED, ++ rtx last_insn ATTRIBUTE_UNUSED, ++ char *fnname ATTRIBUTE_UNUSED, ++ tree callexpr ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++tree ++bounds_build_truthvalue_conversion (tree arg ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++bounds_delete_redundant_calls (void) ++{ ++} +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/java/Make-lang.in gcc-4.0.2/gcc/java/Make-lang.in +--- gcc-4.0.2.org/gcc/java/Make-lang.in 2005-05-07 00:53:36.000000000 +0200 ++++ gcc-4.0.2/gcc/java/Make-lang.in 2005-09-29 17:50:07.000000000 +0200 +@@ -107,7 +107,8 @@ JAVA_OBJS = java/parse.o java/class.o ja + java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o java/mangle.o \ + java/mangle_name.o java/builtins.o java/resource.o \ + java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ +- java/jcf-path.o java/xref.o java/boehm.o java/java-gimplify.o ++ java/jcf-path.o java/xref.o java/boehm.o java/java-gimplify.o \ ++ java/bounds.o + + GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ + java/win32-host.o java/zextract.o version.o errors.o ggc-none.o \ +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/libgcc2.c gcc-4.0.2/gcc/libgcc2.c +--- gcc-4.0.2.org/gcc/libgcc2.c 2005-03-21 08:24:36.000000000 +0100 ++++ gcc-4.0.2/gcc/libgcc2.c 2005-09-29 17:50:10.000000000 +0200 +@@ -1899,6 +1899,12 @@ TRANSFER_FROM_TRAMPOLINE + #endif + #endif /* L_trampoline */ + ++#ifdef L__main ++/* If there are any bounds-checked modules in this program at all, then ++ __bounds_initialize_library will be called, which sets the following flag. */ ++int __bounds_checking_on = 0; ++#endif ++ + #ifndef __CYGWIN__ + #ifdef L__main + +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/Makefile.in gcc-4.0.2/gcc/Makefile.in +--- gcc-4.0.2.org/gcc/Makefile.in 2005-09-09 23:05:39.000000000 +0200 ++++ gcc-4.0.2/gcc/Makefile.in 2005-09-29 17:50:10.000000000 +0200 +@@ -308,6 +308,7 @@ USER_H = $(srcdir)/ginclude/float.h \ + $(srcdir)/ginclude/stddef.h \ + $(srcdir)/ginclude/varargs.h \ + $(srcdir)/unwind.h \ ++ $(srcdir)/ginclude/unchecked.h \ + $(EXTRA_HEADERS) + + # The GCC to use for compiling libgcc.a and crt*.o. +@@ -607,13 +608,16 @@ OTHER_FIXINCLUDES_DIRS= + # A list of all the language-specific executables. + COMPILERS = cc1$(exeext) @all_compilers@ + ++# Specify a rule for making the bounds checking library. ++LIBBOUNDSCHECK = stmp_libboundscheck ++ + # List of things which should already be built whenever we try to use xgcc + # to compile anything (without linking). + GCC_PASSES=xgcc$(exeext) cc1$(exeext) specs $(EXTRA_PASSES) + + # List of things which should already be built whenever we try to use xgcc + # to link anything. +-GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS) ++GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(LIBBOUNDSCHECK) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS) + + # Directory to link to, when using the target `maketest'. + DIR = ../gcc +@@ -886,7 +890,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@ + C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \ + c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \ + c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \ +- c-objc-common.o c-dump.o c-pch.o $(C_TARGET_OBJS) \ ++ c-objc-common.o c-dump.o c-pch.o c-bounds.o $(C_TARGET_OBJS) \ + c-gimplify.o tree-mudflap.o c-pretty-print.o + + # Language-specific object files for C. +@@ -1126,12 +1130,12 @@ config.status: $(srcdir)/configure $(src + all.internal: start.encap rest.encap doc + # This is what to compile if making a cross-compiler. + all.cross: native gcc-cross cpp$(exeext) specs \ +- $(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra ++ $(LIBGCC) $(LIBBOUNDSCHECK) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra + # This is what must be made before installing GCC and converting libraries. + start.encap: native xgcc$(exeext) cpp$(exeext) specs \ + xlimits.h lang.start.encap @GENINSRC@ srcextra + # These can't be made until after GCC can run. +-rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap ++rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(LIBBOUNDSCHECK) $(EXTRA_PARTS) lang.rest.encap + # This is what is made with the host's compiler + # whether making a cross compiler or not. + native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \ +@@ -1146,7 +1150,7 @@ PROTO: proto + + # On the target machine, finish building a cross compiler. + # This does the things that can't be done on the host machine. +-rest.cross: $(LIBGCC) specs ++rest.cross: $(LIBGCC) $(LIBBOUNDSCHECK) specs + + # Recompile all the language-independent object files. + # This is used only if the user explicitly asks for it. +@@ -2438,6 +2442,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/co + $(srcdir)/tree-chrec.h $(srcdir)/tree-complex.c \ + $(srcdir)/tree-ssa-operands.h $(srcdir)/tree-ssa-operands.c \ + $(srcdir)/tree-profile.c $(srcdir)/rtl-profile.c $(srcdir)/tree-nested.c \ ++ $(srcdir)/c-bounds.c \ + $(out_file) \ + @all_gtfiles@ + +@@ -2459,6 +2464,7 @@ gt-tree-eh.h \ + gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \ + gt-tree-phinodes.h gt-tree-cfg.h gt-tree-nested.h \ + gt-tree-ssa-operands.h gt-tree-ssa-propagate.h \ ++gt-c-bounds.h \ + gt-stringpool.h : s-gtype ; @true + + gtyp-gen.h: s-gtyp-gen ; @true +@@ -3100,6 +3106,14 @@ mostlyclean: lang.mostlyclean + -rm -f $(STAGECOPYSTUFF) $(STAGEMOVESTUFF) + -rm -f *$(coverageexts) + -rm -rf libgcc ++# Clean up libboundscheck and bounds/ subdirectory. ++ -rm -f $(LIBBOUNDSCHECK) ++ if [ -d bounds/lib ]; then \ ++ srcdir1=`cd $(srcdir); pwd`; \ ++ cd bounds/lib; \ ++ $(MAKE) -f $$srcdir1/bounds/lib/Makefile srcdir=$$srcdir1 mostlyclean; \ ++ else true; \ ++ fi + # Delete build programs + -rm -f build/* + -rm -f mddeps.mk +@@ -3200,7 +3214,7 @@ maintainer-clean: + # Install the driver last so that the window when things are + # broken is small. + install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \ +- install-cpp install-man install-info install-@POSUB@ \ ++ install-cpp install-libboundscheck install-man install-info install-@POSUB@ \ + lang.install-normal install-driver + + # Handle cpp installation. +@@ -3353,6 +3367,27 @@ install-libgcc: libgcc.mk libgcc.a libgc + mkinstalldirs='$(mkinstalldirs)' \ + -f libgcc.mk install + ++# Install the checking library. ++install-libboundscheck: stmp_libboundscheck installdirs ++ thisdir1=`pwd`; \ ++ srcdir1=`cd $(srcdir); pwd`; \ ++ for i in `$$thisdir1/xgcc -B$$thisdir1/ --print-multi-lib 2>/dev/null`; do \ ++ dir=`echo $$i | sed -e 's/;.*$$//'`; \ ++ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ ++ (cd bounds/lib/$$dir; \ ++ $(MAKE) -f $$srcdir1/bounds/lib/Makefile install \ ++ srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ++ GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \ ++ GCC_CFLAGS="$(GCC_CFLAGS)" \ ++ MULTI_FLAGS="$$flags" \ ++ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ ++ INSTALL_DATA="$(INSTALL_DATA)" \ ++ DESTDIR="$(DESTDIR)" \ ++ libsubdir="$(libsubdir)/$$dir" \ ++ LIBBOUNDSCHECKDIR="$$thisdir1/$$dir" \ ++ ); \ ++ done ++ + # Install multiple versions of libgcc.a, libgcov.a. + install-multilib: stmp-multilib installdirs + $(MAKE) \ +@@ -4153,6 +4188,54 @@ stagefeedback-start: + fi; done + stagefeedback: force stagefeedback-start lang.stagefeedback + ++# Build the bounds checking library for GCC. ++$(LIBBOUNDSCHECK): force ++ if [ -d bounds ]; then true; else mkdir bounds; fi; \ ++ if [ -d bounds/lib ]; then true; else mkdir bounds/lib; fi; \ ++ thisdir1=`pwd`; \ ++ srcdir1=`cd $(srcdir); pwd`; \ ++ for i in `$$thisdir1/xgcc -B$$thisdir1/ --print-multi-lib 2>/dev/null`; do \ ++ dir=`echo $$i | sed -e 's/;.*$$//'`; \ ++ if [ -d bounds/lib/$$dir ]; then true; else mkdir bounds/lib/$$dir; fi; \ ++ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ ++ (cd bounds/lib/$$dir; \ ++ $(MAKE) -f $$srcdir1/bounds/lib/Makefile libboundscheck.a \ ++ srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ++ GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \ ++ GCC_CFLAGS="$(GCC_CFLAGS)" \ ++ MULTI_FLAGS="$$flags" \ ++ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ ++ INSTALL_DATA="$(INSTALL_DATA)" \ ++ DESTDIR="$(DESTDIR)" \ ++ libsubdir="$(libsubdir)/$$dir" \ ++ LIBBOUNDSCHECKDIR="$$thisdir1/$$dir" \ ++ ); \ ++ done; \ ++ touch stmp_libboundscheck ++ ++# This is used by bounds/lib/Makefile if the user runs that directly. ++sublibboundscheck: force ++ thisdir1=`pwd`; \ ++ srcdir1=`cd $(srcdir); pwd`; \ ++ for i in `$$thisdir1/xgcc -B$$thisdir1/ --print-multi-lib 2>/dev/null`; do \ ++ dir=`echo $$i | sed -e 's/;.*$$//'`; \ ++ if [ -d bounds/lib/$$dir ]; then true; else mkdir bounds/lib/$$dir; fi; \ ++ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ ++ (cd bounds/lib/$$dir; \ ++ $(MAKE) -f $$srcdir1/bounds/lib/Makefile libboundscheck.a \ ++ srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ++ GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \ ++ GCC_CFLAGS="$(GCC_CFLAGS)" \ ++ MULTI_FLAGS="$$flags" \ ++ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ ++ INSTALL_DATA="$(INSTALL_DATA)" \ ++ DESTDIR="$(DESTDIR)" \ ++ libsubdir="$(libsubdir)/$$dir" \ ++ LIBBOUNDSCHECKDIR="$$thisdir1/$$dir" \ ++ ); \ ++ done; \ ++ touch stmp_libboundscheck ++ + # Copy just the executable files from a particular stage into a subdirectory, + # and delete the object files. Use this if you're just verifying a version + # that is pretty sure to work, and you are short of disk space. +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/optabs.c gcc-4.0.2/gcc/optabs.c +--- gcc-4.0.2.org/gcc/optabs.c 2005-02-12 12:34:21.000000000 +0100 ++++ gcc-4.0.2/gcc/optabs.c 2005-09-29 17:50:10.000000000 +0200 +@@ -5163,12 +5163,26 @@ init_optabs (void) + = init_one_libfunc ("ffs"); + + abort_libfunc = init_one_libfunc ("abort"); +- memcpy_libfunc = init_one_libfunc ("memcpy"); +- memmove_libfunc = init_one_libfunc ("memmove"); +- memcmp_libfunc = init_one_libfunc ("memcmp"); +- memset_libfunc = init_one_libfunc ("memset"); + setbits_libfunc = init_one_libfunc ("__setbits"); + ++ /* In bounds checking mode, we need to call the unchecked versions of some ++ of these functions. The '__bounds_...' functions are supplied by ++ libboundscheck. */ ++ if (!bounds_checking_enabled) ++ { ++ memcpy_libfunc = init_one_libfunc ("memcpy"); ++ memmove_libfunc = init_one_libfunc ("memmove"); ++ memcmp_libfunc = init_one_libfunc ("memcmp"); ++ memset_libfunc = init_one_libfunc ("memset"); ++ } ++ else ++ { ++ memcpy_libfunc = init_one_libfunc ("__bounds_memcpy"); ++ memmove_libfunc = init_one_libfunc ("__bounds_memmove"); ++ memcmp_libfunc = init_one_libfunc ("__bounds_memcmp"); ++ memset_libfunc = init_one_libfunc ("__bounds_memset"); ++ } ++ + unwind_resume_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS + ? "_Unwind_SjLj_Resume" + : "_Unwind_Resume"); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/opts.c gcc-4.0.2/gcc/opts.c +--- gcc-4.0.2.org/gcc/opts.c 2005-02-24 10:24:13.000000000 +0100 ++++ gcc-4.0.2/gcc/opts.c 2005-09-29 17:50:10.000000000 +0200 +@@ -39,6 +39,9 @@ Software Foundation, 59 Temple Place - S + #include "insn-attr.h" /* For INSN_SCHEDULING. */ + #include "target.h" + ++/* Flag set if -D_REENTRANT is given. */ ++int bounds_reentrant_defined = 0; ++ + /* Value of the -G xx switch, and whether it was passed or not. */ + unsigned HOST_WIDE_INT g_switch_value; + bool g_switch_set; +@@ -444,6 +447,9 @@ decode_options (unsigned int argc, const + determine the default value of many flags. */ + for (i = 1; i < argc; i++) + { ++ if (! strcmp (argv[i], "-D_REENTRANT")) ++ bounds_reentrant_defined = 1; ++ + if (!strcmp (argv[i], "-O")) + { + optimize = 1; +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/passes.c gcc-4.0.2/gcc/passes.c +--- gcc-4.0.2.org/gcc/passes.c 2005-08-23 09:39:45.000000000 +0200 ++++ gcc-4.0.2/gcc/passes.c 2005-09-29 17:50:10.000000000 +0200 +@@ -81,6 +81,7 @@ Software Foundation, 59 Temple Place - S + #include "alloc-pool.h" + #include "tree-pass.h" + #include "tree-dump.h" ++#include "c-bounds.h" + + #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) + #include "dwarf2out.h" +@@ -108,6 +109,10 @@ Software Foundation, 59 Temple Place - S + #define DUMPFILE_FORMAT ".%02d." + #endif + ++/* Name of the constructor used for for bounds checking. */ ++ ++char *bounds_constructor_name = NULL; ++ + static int initializing_dump = 0; + + /* Routine to open a dump file. Return true if the dump file is enabled. */ +@@ -1507,6 +1512,15 @@ rest_of_clean_state (void) + static void + rest_of_compilation (void) + { ++ int save_optimize = optimize; ++ ++ if (current_function_decl && bounds_constructor_name ++ && DECL_NAME (current_function_decl) ++ && IDENTIFIER_POINTER (DECL_NAME (current_function_decl)) ++ && strcmp(IDENTIFIER_POINTER (DECL_NAME (current_function_decl)), ++ bounds_constructor_name) == 0) ++ optimize = 0; ++ + /* If we're emitting a nested function, make sure its parent gets + emitted as well. Doing otherwise confuses debug info. */ + { +@@ -1761,6 +1775,8 @@ rest_of_compilation (void) + exit_rest_of_compilation: + + rest_of_clean_state (); ++ ++ optimize = save_optimize; + } + + void +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/stmt.c gcc-4.0.2/gcc/stmt.c +--- gcc-4.0.2.org/gcc/stmt.c 2005-03-10 01:17:58.000000000 +0100 ++++ gcc-4.0.2/gcc/stmt.c 2005-09-29 17:50:10.000000000 +0200 +@@ -1823,8 +1823,13 @@ expand_nl_goto_receiver (void) + } + + /* Generate RTL for the automatic variable declaration DECL. +- (Other kinds of declarations are simply ignored if seen here.) */ ++ (Other kinds of declarations are simply ignored if seen here.) + ++ In bounds checking mode (for C only at present) we insert an extra byte ++ after automatic variables. This lets us validly generate pointers to ++ the end of the object + 1. Notice that in bounds checking mode, no ++ real automatic variables make it into registers. */ ++ + void + expand_decl (tree decl) + { +@@ -1875,7 +1880,9 @@ expand_decl (tree decl) + } + else if (use_register_for_decl (decl)) + { +- /* Automatic variable that can go in a register. */ ++ /* Automatic variable that can go in a register. ++ In bounds checking mode, no automatic variables make it into regs, ++ since we take the address of all of them. */ + int unsignedp = TYPE_UNSIGNED (type); + enum machine_mode reg_mode + = promote_mode (type, DECL_MODE (decl), &unsignedp, 0); +@@ -1947,7 +1954,17 @@ expand_decl (tree decl) + + /* Compute the variable's size, in bytes. This will expand any + needed SAVE_EXPRs for the first time. */ +- size = expand_expr (DECL_SIZE_UNIT (decl), NULL_RTX, VOIDmode, 0); ++ if (!bounds_checking_enabled) ++ size = expand_expr (DECL_SIZE_UNIT (decl), NULL_RTX, VOIDmode, 0); ++ else ++ /* In bounds checking mode, make the size one byte larger. */ ++ size = expand_expr ( ++ size_binop (PLUS_EXPR, DECL_SIZE (decl), ++ size_binop (CEIL_DIV_EXPR, ++ convert (bitsizetype, size_int (BIGGEST_ALIGNMENT)), ++ convert (bitsizetype, size_int (BITS_PER_UNIT)))), ++ NULL_RTX, VOIDmode, 0); ++ + free_temp_slots (); + + /* Allocate space on the stack for the variable. Note that +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/toplev.c gcc-4.0.2/gcc/toplev.c +--- gcc-4.0.2.org/gcc/toplev.c 2005-09-09 02:51:44.000000000 +0200 ++++ gcc-4.0.2/gcc/toplev.c 2005-09-29 17:50:10.000000000 +0200 +@@ -374,6 +374,18 @@ static const param_info lang_independent + { NULL, 0, 0, 0, NULL } + }; + ++/* Flag indicating that bounds checking has been enabled in the C ++ front end. There are some changes in `varasm.c' that depend upon ++ the state of this flag. */ ++ ++int bounds_checking_enabled_initial = 0; ++int bounds_checking_enabled = 0; ++ ++/* Flag indicating bounds checking is restricted to strings only ++ This flag is only useful if bounds-checking is enabled. */ ++ ++int bounds_strings_only_enabled = 0; ++ + /* Here is a table, controlled by the tm.h file, listing each -m switch + and which bits in `target_switches' it should set or clear. + If VALUE is positive, it is bits to set. +@@ -1029,6 +1041,10 @@ compile_file (void) + functions in this compilation unit were deferred. */ + coverage_finish (); + ++ /* Build bounds-checking constructors for this file. */ ++ if (bounds_checking_enabled) ++ bounds_build_static_constructors (); ++ + /* Likewise for mudflap static object registrations. */ + if (flag_mudflap) + mudflap_finish_file (); +diff -rupN -x tags -x 'c-parse.[cy]' -x 'objc-parse.[cy]' -x 'parse.[ch]' -x '*.info*' gcc-4.0.2.org/gcc/varasm.c gcc-4.0.2/gcc/varasm.c +--- gcc-4.0.2.org/gcc/varasm.c 2005-07-22 21:32:58.000000000 +0200 ++++ gcc-4.0.2/gcc/varasm.c 2005-09-29 17:50:10.000000000 +0200 +@@ -52,6 +52,7 @@ Software Foundation, 59 Temple Place - S + #include "tree-mudflap.h" + #include "cgraph.h" + #include "cfglayout.h" ++#include "c-bounds.h" + + #ifdef XCOFF_DEBUGGING_INFO + #include "xcoffout.h" /* Needed for external data +@@ -179,6 +180,17 @@ enum in_section { no_section, in_text, i + }; + static GTY(()) enum in_section in_section = no_section; + ++/* In bounds checking mode, we build a list of private statics allocated ++ in the output file. At the end, we build the list into an array, so we ++ can find all these strings and things. */ ++static struct private_statics_elem { ++ struct private_statics_elem *next; ++ char *name; /* Name for this object. */ ++ int name_label; /* (Private: label for this name). */ ++ char *label; /* Assembler label. */ ++ int size; /* Size of the declaration. */ ++} *private_statics_list = NULL; ++ + /* Return a nonzero value if DECL has a section attribute. */ + #ifndef IN_NAMED_SECTION + #define IN_NAMED_SECTION(DECL) \ +@@ -1000,6 +1012,11 @@ make_decl_rtl (tree decl) + will have to know how to strip this information. */ + targetm.encode_section_info (decl, DECL_RTL (decl), true); + ++ /* In bounds checked mode, we want to remember this assembler ++ label till the end of the file. */ ++ if (bounds_checking_enabled && TREE_CODE (decl) == VAR_DECL) ++ bounds_register_decl (decl); ++ + /* Make this function static known to the mudflap runtime. */ + if (flag_mudflap && TREE_CODE (decl) == VAR_DECL) + mudflap_enqueue_decl (decl); +@@ -1663,6 +1680,13 @@ assemble_variable (tree decl, int top_le + if (size == 0) + rounded = 1; + ++ /* In bounds checking mode, pad with 1 byte afterwards. */ ++ if (bounds_checking_enabled) { ++ /* We will fix this in a moment ... */ ++ size += BIGGEST_ALIGNMENT / BITS_PER_UNIT; ++ rounded += BIGGEST_ALIGNMENT; ++ } ++ + /* Round size up to multiple of BIGGEST_ALIGNMENT bits + so that each uninitialized object starts on such a boundary. */ + rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; +@@ -1710,10 +1734,51 @@ assemble_variable (tree decl, int top_le + if (align > BITS_PER_UNIT) + ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DECL_ALIGN_UNIT (decl))); + ++ if (bounds_checking_enabled) ++ { ++#if 0 /* Not all targets may support this trick. */ ++#ifdef ASM_DECLARE_OBJECT_NAME ++ if (TREE_TYPE(decl) != error_mark_node ++ && TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl)))) ++ { ++ static int decl_cnt = 0; ++ char bounds_name[100]; ++ ++ tree save_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))); ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE(decl))) = ++ size_binop (PLUS_EXPR, ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))), ++ convert (sizetype, ++ bitsize_int(2 * BIGGEST_ALIGNMENT / BITS_PER_UNIT))); ++ ASM_GENERATE_INTERNAL_LABEL (bounds_name, "__BOUNDS_", decl_cnt); ++ decl_cnt++; ++ ASM_DECLARE_OBJECT_NAME (asm_out_file, bounds_name, decl); ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))) = save_size; ++ } ++#endif ++#endif ++ assemble_integer (constm1_rtx, BIGGEST_ALIGNMENT / BITS_PER_UNIT, ++ BITS_PER_UNIT, 1); ++ } ++ + /* Do any machine/system dependent processing of the object. */ + #ifdef ASM_DECLARE_OBJECT_NAME + last_assemble_variable_decl = decl; +- ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl); ++ if (bounds_checking_enabled ++ && TREE_TYPE(decl) != error_mark_node ++ && TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl)))) ++ { ++ tree save_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))); ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE(decl))) = ++ size_binop (PLUS_EXPR, ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))), ++ convert (sizetype, ++ bitsize_int(BIGGEST_ALIGNMENT / BITS_PER_UNIT))); ++ ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl); ++ TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (TREE_TYPE (decl))) = save_size; ++ } ++ else ++ ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl); + #else + /* Standard thing is just output label for the object. */ + ASM_OUTPUT_LABEL (asm_out_file, name); +@@ -1731,6 +1796,12 @@ assemble_variable (tree decl, int top_le + else + /* Leave space for it. */ + assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1)); ++ ++ /* In bounds checking mode, add a single byte of padding after the ++ variable. */ ++ if (bounds_checking_enabled) ++ assemble_integer (constm1_rtx, BIGGEST_ALIGNMENT / BITS_PER_UNIT, ++ BITS_PER_UNIT, 1); + } + } + +@@ -2149,6 +2220,91 @@ assemble_integer (rtx x, unsigned int si + + return false; + } ++ ++/* In bounds checking mode, build a table at the end of the file containing ++ pointers and sizes of all private static data in the file. */ ++ ++void ++bounds_assemble_private_statics_table (void) ++{ ++ struct private_statics_elem *p, *p_next; ++ rtx ptr_rtx, size_rtx, name_rtx; ++ int align, this_label_no = 0; ++ char label[256]; ++ ++ /* This table used to go in readonly_data_section, but unfortunately ++ this broke AIX on RS/6000 machines. The error message was `data adcons ++ in readonly sections' where (I presume) an `adcon' is an addressable ++ constant. Anyway, I've put this in the ordinary data section for ++ now. A correct solution probably involves looking at the `SELECT_ ++ SECTION' macro. */ ++/* readonly_data_section (); */ ++ data_section (); ++ ++ /* Align it to the default alignment for integers. Take care not to align ++ bigger than the maximum the object file format will allow. Increase ++ alignment on machines that can benefit. */ ++ align = BIGGEST_ALIGNMENT; ++#ifdef DATA_ALIGNMENT ++ align = DATA_ALIGNMENT (integer_type_node, align); ++#endif ++ if (align > BITS_PER_UNIT) ++ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); ++ ++ /* Write out the label for this object. */ ++ ASM_OUTPUT_LABEL (asm_out_file, "__bounds_private_statics"); ++ ++ /* Write out the elements in the array, ie. a list of (label_pointer, ++ size, name_pointer). */ ++ for (p = private_statics_list; p; p = p->next) ++ { ++ /* Write a pointer to the object. */ ++ ptr_rtx = gen_rtx_SYMBOL_REF (Pmode, p->label); ++ assemble_integer ( ptr_rtx, POINTER_SIZE/BITS_PER_UNIT, POINTER_SIZE, 0); ++ ++ /* Write the size of the object. */ ++ size_rtx = GEN_INT (p->size); ++ assemble_integer ( size_rtx, POINTER_SIZE/BITS_PER_UNIT, POINTER_SIZE, 0); ++ ++ /* Write out a pointer to the object's name. We write the names out ++ afterwards. */ ++ if (p->name != NULL) ++ { ++ p->name_label = this_label_no ++; ++ ASM_GENERATE_INTERNAL_LABEL (label, "LPS", p->name_label); ++ name_rtx = gen_rtx_SYMBOL_REF (Pmode, label); ++ assemble_integer ( name_rtx, POINTER_SIZE/BITS_PER_UNIT, ++ POINTER_SIZE, 0); ++ } ++ else ++ { ++ assemble_integer ( const0_rtx, POINTER_SIZE/BITS_PER_UNIT, ++ POINTER_SIZE, 0); ++ } ++ } ++ ++ /* NULL-terminate the array. */ ++ assemble_integer ( const0_rtx, POINTER_SIZE/BITS_PER_UNIT, POINTER_SIZE, 0); ++ assemble_integer ( const0_rtx, POINTER_SIZE/BITS_PER_UNIT, POINTER_SIZE, 0); ++ assemble_integer ( const0_rtx, POINTER_SIZE/BITS_PER_UNIT, POINTER_SIZE, 0); ++ ++ /* Write out the object names that we referred to in the above table. */ ++ for (p = private_statics_list; p; p = p->next) ++ if (p->name != NULL) ++ { ++ ASM_GENERATE_INTERNAL_LABEL (label, "LPS", p->name_label); ++ ASM_OUTPUT_LABEL (asm_out_file, label); ++ assemble_string (p->name, strlen (p->name) + 1); ++ } ++ ++ /* For completeness, free up this list. */ ++ for (p = private_statics_list; p; p = p_next) ++ { ++ p_next = p->next; ++ free (p); ++ } ++ private_statics_list = NULL; ++} + + void + assemble_real (REAL_VALUE_TYPE d, enum machine_mode mode, unsigned int align) +@@ -2747,6 +2903,28 @@ output_constant_def_contents (rtx symbol + if (TREE_CODE (exp) == STRING_CST) + size = MAX (TREE_STRING_LENGTH (exp), size); + ++ if (bounds_checking_enabled) ++ { ++#if 0 /* Not all targets may support this trick. */ ++#ifdef ASM_DECLARE_OBJECT_NAME ++ static int str_cnt = 0; ++ char bounds_name[100]; ++ int new_size = size + 2 * BIGGEST_ALIGNMENT / BITS_PER_UNIT; ++ tree decl, type; ++ ++ type = build_array_type (char_type_node, ++ build_index_type (size_int (new_size))); ++ decl = build_decl (VAR_DECL, NULL_TREE, type); ++ ++ ASM_GENERATE_INTERNAL_LABEL (bounds_name, "__BOUNDS_STR_", str_cnt); ++ str_cnt++; ++ ASM_DECLARE_OBJECT_NAME (asm_out_file, bounds_name, decl); ++#endif ++#endif ++ assemble_integer (constm1_rtx, BIGGEST_ALIGNMENT / BITS_PER_UNIT, ++ BITS_PER_UNIT, 1); ++ } ++ + /* Do any machine/system dependent processing of the constant. */ + #ifdef ASM_DECLARE_CONSTANT_NAME + ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size); +@@ -2759,6 +2937,67 @@ output_constant_def_contents (rtx symbol + output_constant (exp, size, align); + if (flag_mudflap) + mudflap_enqueue_constant (exp); ++ ++ /* In bounds checked mode, put a byte of padding after addressed ++ constants. Then add the assembler label and the (real) byte size to ++ a list. We will output this list as a private array at the end, so ++ we can pick up these static constants for checking. */ ++ if (bounds_checking_enabled) ++ { ++ struct private_statics_elem *private_static; ++ ++ assemble_integer (constm1_rtx, BIGGEST_ALIGNMENT / BITS_PER_UNIT, ++ BITS_PER_UNIT, 1); ++ if (size != 0) ++ { ++ private_static ++ = (struct private_statics_elem *) ++ xmalloc (sizeof (struct private_statics_elem)); ++ private_static->name = NULL; /* Object has no name. */ ++ private_static->label = xstrdup (label); ++ private_static->size = size; ++ private_static->next = private_statics_list; ++ private_statics_list = private_static; ++ } ++ else ++ warning ("cannot generate bounds checking code for zero sized static object"); ++ } ++} ++ ++/* Add external data definitions to the private_static list. Use a ++ negative size to flag this is an external data definition. */ ++void ++bounds_external_declaration ( tree * vec, int len ) ++{ ++ int i; ++ tree decl; ++ ++ for (i = 0 ; i < len ; i++) { ++ ++ decl = vec[i]; ++ ++ if (TREE_CODE(decl) == VAR_DECL ++ && DECL_EXTERNAL (decl) ++ && TREE_USED(decl)) ++ { ++ int size = int_size_in_bytes (TREE_TYPE (decl)); ++ ++ if (size > 0) { ++ struct private_statics_elem *private_static; ++ const char *label = IDENTIFIER_POINTER (DECL_NAME (decl)) ; ++ char *new_label; ++ ++ new_label = xstrdup (label); ++ private_static = (struct private_statics_elem *) ++ xmalloc (sizeof (struct private_statics_elem)); ++ private_static->name = new_label; ++ private_static->label = new_label; ++ private_static->size = -size; ++ private_static->next = private_statics_list; ++ private_statics_list = private_static; ++ } ++ } ++ } + } + + /* Look up EXP in the table of constant descriptors. Return the rtl diff --git a/4.0.3/pie/def/00_all_gcc-3.4.3-v8.7.6.7-incompat-default.patch b/4.0.3/pie/def/00_all_gcc-3.4.3-v8.7.6.7-incompat-default.patch new file mode 100644 index 0000000..9ac5239 --- /dev/null +++ b/4.0.3/pie/def/00_all_gcc-3.4.3-v8.7.6.7-incompat-default.patch @@ -0,0 +1,11 @@ +--- gcc-3.4.3/gcc/gcc.c.def~ Mon Nov 22 17:56:44 2004 ++++ gcc-3.4.3/gcc/gcc.c Mon Nov 22 21:18:06 2004 +@@ -768,7 +768,7 @@ + /* NB: This is shared amongst all front-ends. */ + static const char *cc1_options = + "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ +- %{shared:%{static|pie|fPIE|fpie|fno-PIC|fno-pic:%e-shared and -static|pie|fPIE|fpie|fno-PIC|fno-pic are incompatible}}\ ++ %{shared:%{static|pie|fPIE|fpie|fno-PIC|fno-pic|nopie:%e-shared and -static|pie|fPIE|fpie|fno-PIC|fno-pic|nopie are incompatible}}\ + %{pie:%{static|pg|p|profile:%e-pie and -static|pg|p|profile are incompatible}}\ + %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\ + %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}}\ diff --git a/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-no.patch b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-no.patch new file mode 100644 index 0000000..c54a3a0 --- /dev/null +++ b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-no.patch @@ -0,0 +1,14 @@ +--- gcc/gcc/gcc.c.piedef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/gcc.c 2005-03-01 17:19:59 +0100 +@@ -724,7 +733,11 @@ + + static const char *asm_debug; + static const char *cpp_spec = CPP_SPEC; ++#ifdef HARDENED_CC1_SPEC_SUFFIX ++static const char *cc1_spec = CC1_SPEC " " HARDENED_CC1_SPEC_SUFFIX; ++#else + static const char *cc1_spec = CC1_SPEC; ++#endif + static const char *cc1plus_spec = CC1PLUS_SPEC; + static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; + static const char *asm_spec = ASM_SPEC; diff --git a/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-yes.patch b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-yes.patch new file mode 100644 index 0000000..02fb874 --- /dev/null +++ b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default-boundschecking-yes.patch @@ -0,0 +1,14 @@ +--- gcc/gcc/gcc.c.piedef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/gcc.c 2005-03-01 17:19:59 +0100 +@@ -724,7 +733,11 @@ + + static const char *asm_debug; + static const char *cpp_spec = CPP_SPEC BOUNDS_CPP_SPEC; ++#ifdef HARDENED_CC1_SPEC_SUFFIX ++static const char *cc1_spec = CC1_SPEC " " HARDENED_CC1_SPEC_SUFFIX; ++#else + static const char *cc1_spec = CC1_SPEC; ++#endif + static const char *cc1plus_spec = CC1PLUS_SPEC; + static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; + static const char *asm_spec = ASM_SPEC; diff --git a/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default.patch b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default.patch new file mode 100644 index 0000000..931b621 --- /dev/null +++ b/4.0.3/pie/def/01_all_gcc-4.0-v8.7.8-pie-generic-default.patch @@ -0,0 +1,360 @@ +--- gcc/gcc/config/linux.h.piedef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/config/linux.h 2005-03-01 17:21:52 +0100 +@@ -38,8 +38,12 @@ + provides part of the support for getting C++ file-scope static + object constructed before entering `main'. */ + ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC +-#if defined HAVE_LD_PIE ++#ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}} \ ++ crti.o%s %{static:crtbeginT.o%s;nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ + crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" +@@ -55,8 +59,11 @@ + object constructed before entering `main', followed by a normal + GNU/Linux "finalizer" file, `crtn.o'. */ + ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s" + #define ENDFILE_SPEC \ + "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" + #else +--- gcc/gcc/gcc.c.piedef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/gcc.c 2005-03-01 17:19:59 +0100 +@@ -86,6 +86,15 @@ + #include "gcc.h" + #include "flags.h" + ++#include "pie-ssp-setup.h" ++#include "pie-ssp-modus.h" ++#include "pie-ssp-chain.h" ++ ++#if !( defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ) ++#undef HARDENED_STARTFILE_SPEC ++#undef HARDENED_ENDFILE_SPEC ++#endif ++ + #ifdef HAVE_SYS_RESOURCE_H + #include <sys/resource.h> + #endif +@@ -734,8 +747,16 @@ + static const char *mfwrap_spec = MFWRAP_SPEC; + static const char *mflib_spec = MFLIB_SPEC; + static const char *libgcc_spec = LIBGCC_SPEC; ++#ifdef HARDENED_ENDFILE_SPEC ++static const char *endfile_spec = HARDENED_ENDFILE_SPEC; ++#else + static const char *endfile_spec = ENDFILE_SPEC; ++#endif ++#ifdef HARDENED_STARTFILE_SPEC ++static const char *startfile_spec = HARDENED_STARTFILE_SPEC; ++#else + static const char *startfile_spec = STARTFILE_SPEC; ++#endif + static const char *switches_need_spaces = SWITCHES_NEED_SPACES; + static const char *linker_name_spec = LINKER_NAME; + static const char *link_command_spec = LINK_COMMAND_SPEC; +--- gcc/gcc/pie-ssp-chain.h.piedef~ 2005-03-01 17:19:59 +0100 ++++ gcc/gcc/pie-ssp-chain.h 2005-03-01 17:19:59 +0100 +@@ -0,0 +1,77 @@ ++#ifndef LINUX_PIE_SSP_CHAIN_H ++#define LINUX_PIE_SSP_CHAIN_H ++ ++/* ++ * cc1: ++ **************************************************************************** ++ * C compiler generating code - for nonintel arches fpic/fPIC is not the same ++ * Thu Feb 5 22:32:02 CET 2004 -fpie is causing TEXT relocations in binaries ++ * ++ * -fPIE/-fpie may not be used, it produces unusable objects for shared libs ++ * if it becomes usable, then -fPIE should be used instead of -fpie (arch dep) ++ * ++ * we take care now not using -fPIE on shared libs, by checking for -fPIC/fpic ++ **************************************************************************** ++ */ ++ ++#define CC1_PIE "%{!fPIC:%{!fpic:-fPIE}}" ++ ++#define CC1_SSP "-fstack-protector" ++#define CC1_SSP_ALL "%{!fno-stack-protector-all:-fstack-protector-all}" ++#define CC1_SSP_DUMMY "%{fstack-protector:} %{fno-stack-protector:} %{fstack-protector-all:} %{fno-stack-protector-all:}" ++ ++#if ! ( defined ( __hppa__ ) || defined ( USE_HTB ) ) ++#define HARDENED_SSP_SPEC_SUFFIX SSP_CHAIN_EXCLUDE( STD_SSP_TRIGGER( CC1_SSP " " SSP_LIBC_EXCLUDE(CC1_SSP_ALL) ) ) ++#else ++#define HARDENED_SSP_SPEC_SUFFIX CC1_SSP_DUMMY ++#endif ++ ++#define HARDENED_CC1_SPEC_SUFFIX STD_CHAIN_EXCLUDE( CC1_CHAIN_EXCLUDE( STD_PIE_TRIGGER(CC1_PIE) ) " " HARDENED_SSP_SPEC_SUFFIX ) ++ ++/* ++ * startfile: ++ * we have 4 types of archs: ++ * default: x86[_64]/mips/parisc ++ * not using profile: alpha/rs6000/sparc[64] ++ * not using crtbeginT.o for static: arm/ia64 ++ * having some addon: rs6000(mnewlib) ++ */ ++ ++/* ++ * endfile: ++ * we have 3 types of archs: ++ * default: x86[_64]/mips/parisc ++ * fastmath addon: alpha/ia64/sparc[64] ++ * having some other addon: rs6000(mnewlib) ++ */ ++ ++/* special cases: rs6000 uses STARTFILE_LINUX_SPEC/ENDFILE_LINUX_SPEC */ ++ ++/* the above variety explains why the startfile/endfile sections are moved directly to gcc */ ++ ++/* ++ * link: ++ ***************************************************************************** ++ * building of position independent executables is enabled by binutils:ld -pie ++ * use the x86 Redhat branch update provided support for LINK_PIE_SPEC section ++ ***************************************************************************** ++ */ ++ ++#define LINKSEC_PIE_LNK "-pie" ++ ++#define LINKSEC_RELRO_LNK "-z relro" ++ ++#define LINKSEC_NOW_LNK "-z now" ++ ++/* disable default */ ++#ifdef LINK_PIE_SPEC ++#undef LINK_PIE_SPEC ++#endif ++ ++#ifdef HAVE_LD_PIE ++#define LINK_PIE_SPEC STD_PIE_TRIGGER( LNK_CHAIN_EXCLUDE( PIE_CHAIN_EXCLUDE(LINKSEC_PIE_LNK) ) ) " " OPP_PIE_TRIGGER() " " STD_RELRO_TRIGGER(LINKSEC_RELRO_LNK) " " OPP_RELRO_TRIGGER() " " STD_NOW_TRIGGER(LINKSEC_NOW_LNK) " " OPP_NOW_TRIGGER() ++#else ++#error we need ld w/ -pie support ++#endif ++ ++#endif /* LINUX_PIE_SSP_CHAIN_H */ +--- gcc/gcc/pie-ssp-modus.h.piedef~ 2005-03-01 17:19:59 +0100 ++++ gcc/gcc/pie-ssp-modus.h 2005-03-01 17:19:59 +0100 +@@ -0,0 +1,127 @@ ++#ifndef LINUX_PIE_SSP_MODUS_H ++#define LINUX_PIE_SSP_MODUS_H ++ ++/* ++ * The enabler and inverse is used for the proper inclusion of the ++ * startfile and endfile chaining of the crt1, crtbegin and crtend ++ * to use caution not issuing zero or double occurrences of object ++ * in the respective sections of the currently utilized definition ++ */ ++ ++/* ++ **************************************************************** ++ * set up the trigger logic for stack smashing protector with CC1 ++ **************************************************************** ++ */ ++ ++#if defined ( EFAULT_SSP ) || defined ( EFAULT_PIE_SSP ) ++ ++#define STD_SSP_TRIGGER(flag) \ ++ NSPEC("fno-stack-protector", \ ++ flag \ ++ ) ++ ++#else /* defined ( EFAULT_SSP ) || defined ( EFAULT_PIE_SSP ) */ ++ ++#define STD_SSP_TRIGGER(flag) \ ++ PSPEC("fstack-protector", \ ++ flag \ ++ ) ++ ++#endif /* defined ( EFAULT_SSP ) || defined ( EFAULT_PIE_SSP ) */ ++ ++/* ++ **************************************************************** ++ * define the trigger logic for setting up position independence ++ **************************************************************** ++ */ ++ ++#if defined ( EFAULT_PIE ) || defined ( EFAULT_PIE_SSP ) ++ ++#define STD_PIE_TRIGGER(flag) \ ++ NSPEC("nopie", \ ++ flag \ ++ ) ++ ++#define INV_PIE_TRIGGER(flag) \ ++ PSPEC("nopie", \ ++ flag \ ++ ) ++ ++#define OPP_PIE_TRIGGER(flag) \ ++ PSPEC("pie", \ ++ flag \ ++ ) ++ ++#else /* defined ( DEFAULT_PIE ) || defined ( EFAULT_PIE_SSP) */ ++ ++#define STD_PIE_TRIGGER(flag) \ ++ PSPEC("pie", \ ++ flag \ ++ ) ++ ++#define INV_PIE_TRIGGER(flag) \ ++ NSPEC("pie", \ ++ flag \ ++ ) ++ ++#define OPP_PIE_TRIGGER(flag) \ ++ PSPEC("nopie", \ ++ flag \ ++ ) ++ ++#endif /* defined ( EFAULT_PIE ) || defined ( EFAULT_PIE_SSP ) */ ++ ++#if defined ( EFAULT_RELRO ) ++ ++#define STD_RELRO_TRIGGER(flag) \ ++ NSPEC("norelro", \ ++ flag \ ++ ) ++ ++#define OPP_RELRO_TRIGGER(flag) \ ++ PSPEC("relro", \ ++ flag \ ++ ) ++ ++#else /* defined ( EFAULT_RELRO ) */ ++ ++#define STD_RELRO_TRIGGER(flag) \ ++ PSPEC("relro", \ ++ flag \ ++ ) ++ ++#define OPP_RELRO_TRIGGER(flag) \ ++ PSPEC("norelro", \ ++ flag \ ++ ) ++ ++#endif /* defined ( EFAULT_RELRO ) */ ++ ++#if defined ( EFAULT_BIND_NOW ) ++ ++#define STD_NOW_TRIGGER(flag) \ ++ NSPEC("nonow", \ ++ flag \ ++ ) ++ ++#define OPP_NOW_TRIGGER(flag) \ ++ PSPEC("now", \ ++ flag \ ++ ) ++ ++#else /* EFAULT_BIND_NOW */ ++ ++#define STD_NOW_TRIGGER(flag) \ ++ PSPEC("now", \ ++ flag \ ++ ) ++ ++#define OPP_NOW_TRIGGER(flag) \ ++ PSPEC("nonow", \ ++ flag \ ++ ) ++ ++#endif /* EFAULT_BIND_NOW */ ++ ++#endif /* LINUX_PIE_SSP_MODUS_H */ +--- gcc/gcc/pie-ssp-setup.h.piedef~ 2005-03-01 17:19:59 +0100 ++++ gcc/gcc/pie-ssp-setup.h 2005-03-01 17:19:59 +0100 +@@ -0,0 +1,84 @@ ++#ifndef LINUX_PIE_SSP_SETUP_H ++#define LINUX_PIE_SSP_SETUP_H ++ ++/* ********************************************************************************** */ ++/* definition of macros and functions needed for constructing the specs file sections */ ++/* ********************************************************************************** */ ++ ++#define PSPEC(a,b) "%{"a": "b"} " ++ ++#define NSPEC(a,b) "%{!"a": "b"} " ++ ++/* ++ * standard exclusion ++ * disables -fPIE ++ * disables SSP ++ * applies to cc1 ++ */ ++#define STD_CHAIN_EXCLUDE(flag) \ ++ NSPEC("D__KERNEL__", \ ++ flag \ ++ ) ++ ++/* ++ * link section exclusion ++ * disables -fPIE ++ * ibcs not added (yet) ++ * applies to cc1 and link_command ++ */ ++#define PIE_LNK_CHAIN_EXCLUDE(flag) \ ++ NSPEC("static", \ ++ flag \ ++ ) ++ ++/* pic exclusion, applies to cc1 */ ++#define PIC_CHAIN_EXCLUDE(flag) \ ++ NSPEC("fno-PIC", \ ++ NSPEC("fno-pic", \ ++ flag \ ++ )) ++ ++/* ++ * pie exclusion ++ * disables -fPIE and -pie ++ * applies to cc1 and link_command ++ */ ++#define PIE_CHAIN_EXCLUDE(flag) \ ++ NSPEC("shared", \ ++ NSPEC("nostdlib", \ ++ NSPEC("nostartfiles", \ ++ NSPEC("fno-PIE", \ ++ NSPEC("fno-pie", \ ++ flag \ ++ ))))) ++ ++/* ++ * pie exclusion ++ * disables -pie ++ * applies to link_command ++ */ ++#define LNK_GEN_CHAIN_EXCLUDE(flag) \ ++ NSPEC("A", \ ++ flag \ ++ ) ++ ++#define CC1_CHAIN_EXCLUDE(flag) PIE_LNK_CHAIN_EXCLUDE( PIC_CHAIN_EXCLUDE( PIE_CHAIN_EXCLUDE(flag) ) ) ++#define LNK_CHAIN_EXCLUDE(flag) PIE_LNK_CHAIN_EXCLUDE( LNK_GEN_CHAIN_EXCLUDE(flag) ) ++ ++/* ++ * ssp exclusion ++ * disables SSP ++ * applies to cc1 ++ */ ++#define SSP_CHAIN_EXCLUDE(flag) \ ++ NSPEC("nostdlib", \ ++ flag \ ++ ) ++ ++#define SSP_LIBC_EXCLUDE(flag) \ ++ NSPEC("D_LIBC", \ ++ NSPEC("D_LIBC_REENTRANT", \ ++ flag \ ++ )) ++ ++#endif /* LINUX_PIE_SSP_SETUP_H */ diff --git a/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-alpha-default.patch b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-alpha-default.patch new file mode 100644 index 0000000..3240e5b --- /dev/null +++ b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-alpha-default.patch @@ -0,0 +1,28 @@ +--- gcc-3.4.3/gcc/config/alpha/elf.h.def~ Mon Nov 22 17:56:44 2004 ++++ gcc-3.4.3/gcc/config/alpha/elf.h Mon Nov 22 17:59:09 2004 +@@ -391,8 +391,12 @@ + support for getting C++ file-scope static object constructed + before entering `main'. */ + ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared: %{pg|p:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}}\ ++ crti.o%s %{static:crtbeginT.o%s;nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ + crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" +@@ -407,8 +411,12 @@ + getting C++ file-scope static object constructed before entering + `main', followed by a normal ELF "finalizer" file, `crtn.o'. */ + ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s" + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" diff --git a/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-arm-default.patch b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-arm-default.patch new file mode 100644 index 0000000..4245517 --- /dev/null +++ b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-arm-default.patch @@ -0,0 +1,27 @@ +--- gcc-3.4.3/gcc/config/arm/linux-elf.h.def~ Mon Nov 22 17:56:44 2004 ++++ gcc-3.4.3/gcc/config/arm/linux-elf.h Mon Nov 22 18:01:11 2004 +@@ -93,8 +93,12 @@ + provides part of the support for getting C++ file-scope static + object constructed before entering `main'. */ + ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}} \ ++ crti.o%s %{static|nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ + crti.o%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" +@@ -110,8 +114,11 @@ + object constructed before entering `main', followed by a normal + GNU/Linux "finalizer" file, `crtn.o'. */ + ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s" + #define ENDFILE_SPEC \ + "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" + #else diff --git a/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-ia64-default.patch b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-ia64-default.patch new file mode 100644 index 0000000..fa66483 --- /dev/null +++ b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-ia64-default.patch @@ -0,0 +1,28 @@ +--- gcc-3.4.3/gcc/config/ia64/linux.h.def~ Mon Nov 22 17:56:44 2004 ++++ gcc-3.4.3/gcc/config/ia64/linux.h Mon Nov 22 18:04:33 2004 +@@ -17,8 +17,12 @@ + } while (0) + + /* Need to override linux.h STARTFILE_SPEC, since it has crtbeginT.o in. */ ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}}\ ++ crti.o%s %{static|nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ + crti.o%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" +@@ -29,8 +33,12 @@ + #endif + + /* Similar to standard Linux, but adding -ffast-math support. */ ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s" + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" diff --git a/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-rs6000-default.patch b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-rs6000-default.patch new file mode 100644 index 0000000..cea8453 --- /dev/null +++ b/4.0.3/pie/def/02_all_gcc-3.4.3-v8.7.6.7-pie-rs6000-default.patch @@ -0,0 +1,99 @@ +--- gcc-3.4.3/gcc/config/rs6000/sysv4.h.def~ Mon Nov 22 18:42:04 2004 ++++ gcc-3.4.3/gcc/config/rs6000/sysv4.h Mon Nov 22 21:11:22 2004 +@@ -824,6 +824,28 @@ + mcall-gnu :-mbig; \ + mcall-i960-old :-mlittle}" + ++#ifdef HAVE_LD_PIE ++#if defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ++#define HARDENED_ASM_SPEC "%(asm_cpu) \ ++%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ ++%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ ++%{mrelocatable} %{mrelocatable-lib} \ ++%{!D__KERNEL__: %{!fno-PIC:%{!fno-pic:%{!fno-PIE:%{!fno-pie: %{!nopie:-K PIC} }}}} } \ ++%{memb|msdata|msdata=eabi: -memb} \ ++%{mlittle|mlittle-endian:-mlittle; \ ++ mbig|mbig-endian :-mbig; \ ++ mcall-aixdesc | \ ++ mcall-freebsd | \ ++ mcall-netbsd | \ ++ mcall-openbsd | \ ++ mcall-linux | \ ++ mcall-gnu :-mbig; \ ++ mcall-i960-old :-mlittle}" ++#undef ASM_SPEC ++#define ASM_SPEC HARDENED_ASM_SPEC ++#endif ++#endif ++ + #define CC1_ENDIAN_BIG_SPEC "" + + #define CC1_ENDIAN_LITTLE_SPEC "\ +@@ -1104,7 +1126,12 @@ + %{!mnewlib: %{pthread:-lpthread} %{shared:-lc} \ + %{!shared: %{profile:-lc_p} %{!profile:-lc}}}" + ++#undef HARDENED_STARTFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_LINUX_SPEC "\ ++%{!shared: %{pg|p:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}} \ ++%{mnewlib:ecrti.o%s;:crti.o%s} \ ++%{static:crtbeginT.o%s;nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_LINUX_SPEC "\ + %{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ + %{mnewlib:ecrti.o%s;:crti.o%s} \ +@@ -1116,7 +1143,11 @@ + %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + ++#undef HARDENED_ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_LINUX_SPEC "\ ++%{static|nopie:crtend.o%s;:crtendS.o%s} \ ++%{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" + #define ENDFILE_LINUX_SPEC "\ + %{shared|pie:crtendS.o%s;:crtend.o%s} \ + %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" +@@ -1126,6 +1157,15 @@ + %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" + #endif + ++#ifdef HAVE_LD_PIE ++#if defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ++#undef STARTFILE_LINUX_SPEC ++#define STARTFILE_LINUX_SPEC HARDENED_STARTFILE_LINUX_SPEC ++#undef ENDFILE_LINUX_SPEC ++#define ENDFILE_LINUX_SPEC HARDENED_ENDFILE_LINUX_SPEC ++#endif ++#endif ++ + #define LINK_START_LINUX_SPEC "" + + #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ +--- gcc-3.4.3/gcc/config/rs6000/linux64.h.def~ Mon Nov 22 18:42:18 2004 ++++ gcc-3.4.3/gcc/config/rs6000/linux64.h Mon Nov 22 21:12:01 2004 +@@ -149,6 +149,24 @@ + %{mcall-netbsd: -mbig} \ + }}}}" + ++#ifdef HAVE_LD_PIE ++#if defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ++#define HARDENED_ASM_SPEC32 "-a32 %{n} %{T} %{Ym,*} %{Yd,*} \ ++%{mrelocatable} %{mrelocatable-lib} \ ++%{!D__KERNEL__: %{!fno-PIC:%{!fno-pic:%{!fno-PIE:%{!fno-pie: %{!nopie:-K PIC} }}}} } \ ++%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ ++%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ ++ %{mcall-freebsd: -mbig} \ ++ %{mcall-i960-old: -mlittle} \ ++ %{mcall-linux: -mbig} \ ++ %{mcall-gnu: -mbig} \ ++ %{mcall-netbsd: -mbig} \ ++}}}}" ++#undef ASM_SPEC32 ++#define ASM_SPEC32 HARDENED_ASM_SPEC32 ++#endif ++#endif ++ + #define ASM_SPEC64 "-a64" + + #define ASM_SPEC_COMMON "%(asm_cpu) \ diff --git a/4.0.3/pie/def/02_all_gcc-4.0-v8.7.6.7-pie-sparc-default.patch b/4.0.3/pie/def/02_all_gcc-4.0-v8.7.6.7-pie-sparc-default.patch new file mode 100644 index 0000000..5e32c02 --- /dev/null +++ b/4.0.3/pie/def/02_all_gcc-4.0-v8.7.6.7-pie-sparc-default.patch @@ -0,0 +1,100 @@ +--- gcc/gcc/config/sparc/linux.h.piesparcdef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/config/sparc/linux.h 2005-03-01 17:25:51 +0100 +@@ -48,8 +48,12 @@ + provides part of the support for getting C++ file-scope static + object constructed before entering `main'. */ + ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared: %{pg|p:gcrt1.o%s;nopie:crt1.o%s;:Scrt1.o%s}}\ ++ crti.o%s %{static:crtbeginT.o%s;nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ + crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" +@@ -65,8 +69,12 @@ + object constructed before entering `main', followed by a normal + GNU/Linux "finalizer" file, `crtn.o'. */ + ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s" + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" +@@ -153,6 +161,17 @@ + "%{V} %{v:%{!V:-V}} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s \ + %{fpic|fPIC|fpie|fPIE|pie:-K PIC} %(asm_cpu) %(asm_relax)" + ++#ifdef HAVE_LD_PIE ++#if defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ++#define HARDENED_ASM_SPEC \ ++ "%{V} %{v:%{!V:-V}} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s \ ++ %{!D__KERNEL__: %{!fno-PIC:%{!fno-pic:%{!fno-PIE:%{!fno-pie: %{!nopie:-K PIC} }}}} } \ ++ %(asm_cpu) %(asm_relax)" ++#undef ASM_SPEC ++#define ASM_SPEC HARDENED_ASM_SPEC ++#endif ++#endif ++ + /* Same as sparc.h */ + #undef DBX_REGISTER_NUMBER + #define DBX_REGISTER_NUMBER(REGNO) (REGNO) +--- gcc/gcc/config/sparc/linux64.h.piesparcdef~ 2005-03-01 17:18:15 +0100 ++++ gcc/gcc/config/sparc/linux64.h 2005-03-01 17:24:45 +0100 +@@ -71,9 +71,13 @@ + provides part of the support for getting C++ file-scope static + object constructed before entering `main'. */ + ++#undef HARDENED_STARTFILE_SPEC + #undef STARTFILE_SPEC + + #ifdef HAVE_LD_PIE ++#define HARDENED_STARTFILE_SPEC \ ++ "%{!shared:%{pg|p:gcrt1.o%s;static|nopie:crt1.o%s;:Scrt1.o%s}}\ ++ crti.o%s %{static:crtbeginT.o%s;nopie:crtbegin.o%s;:crtbeginS.o%s}" + #define STARTFILE_SPEC \ + "%{!shared:%{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ + crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbeginS.o%s}" +@@ -89,8 +93,12 @@ + object constructed before entering `main', followed by a normal + GNU/Linux "finalizer" file, `crtn.o'. */ + ++#undef HARDENED_ENDFILE_SPEC + #undef ENDFILE_SPEC + #ifdef HAVE_LD_PIE ++#define HARDENED_ENDFILE_SPEC \ ++ "%{static|nopie:crtend.o%s;:crtendS.o%s} crtn.o%s\ ++ %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" + #define ENDFILE_SPEC \ + "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\ + %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" +@@ -290,6 +298,24 @@ + %{mlittle-endian:-EL} \ + %(asm_cpu) %(asm_arch) %(asm_relax)" + ++#ifdef HAVE_LD_PIE ++#if defined(EFAULT_PIE) || defined(EFAULT_PIE_SSP) ++#define HARDENED_ASM_SPEC "\ ++%{V} \ ++%{v:%{!V:-V}} \ ++%{!Qn:-Qy} \ ++%{n} \ ++%{T} \ ++%{Ym,*} \ ++%{Wa,*:%*} \ ++-s %{!D__KERNEL__: %{!fno-PIC:%{!fno-pic:%{!fno-PIE:%{!fno-pie: %{!nopie:-K PIC} }}}} } \ ++%{mlittle-endian:-EL} \ ++%(asm_cpu) %(asm_arch) %(asm_relax)" ++#undef ASM_SPEC ++#define ASM_SPEC HARDENED_ASM_SPEC ++#endif ++#endif ++ + /* Same as sparc.h */ + #undef DBX_REGISTER_NUMBER + #define DBX_REGISTER_NUMBER(REGNO) (REGNO) diff --git a/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.1-pie-rs6000-nondefault.patch b/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.1-pie-rs6000-nondefault.patch new file mode 100644 index 0000000..725f81d --- /dev/null +++ b/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.1-pie-rs6000-nondefault.patch @@ -0,0 +1,22 @@ +--- gcc-3.4.0/gcc/config/rs6000/sysv4.h.nondef Tue May 11 12:12:34 2004 ++++ gcc-3.4.0/gcc/config/rs6000/sysv4.h Tue May 11 12:41:19 2004 +@@ -817,7 +817,7 @@ + #define ASM_SPEC "%(asm_cpu) \ + %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ + %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ +-%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ ++%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE|pie:-K PIC} \ + %{memb|msdata|msdata=eabi: -memb} \ + %{mlittle|mlittle-endian:-mlittle; \ + mbig|mbig-endian :-mbig; \ +--- gcc-3.4.0/gcc/config/rs6000/linux64.h.nondef Thu Mar 11 04:25:06 2004 ++++ gcc-3.4.0/gcc/config/rs6000/linux64.h Tue May 11 12:44:26 2004 +@@ -134,7 +134,7 @@ + #endif + + #define ASM_SPEC32 "-a32 %{n} %{T} %{Ym,*} %{Yd,*} \ +-%{mrelocatable} %{mrelocatable-lib} %{fpic|fPIC|fpie|fPIE:-K PIC} \ ++%{mrelocatable} %{mrelocatable-lib} %{fpic|fPIC|fpie|fPIE|pie:-K PIC} \ + %{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ + %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ + %{mcall-freebsd: -mbig} \ diff --git a/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.6.7-pie-sparc-nondefault.patch b/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.6.7-pie-sparc-nondefault.patch new file mode 100644 index 0000000..60cee67 --- /dev/null +++ b/4.0.3/pie/nondef/02_all_gcc-3.4.3-v8.7.6.7-pie-sparc-nondefault.patch @@ -0,0 +1,22 @@ +--- gcc-3.4.3/gcc/config/sparc/linux.h.mps Mon Nov 22 15:28:32 2004 ++++ gcc-3.4.3/gcc/config/sparc/linux.h Mon Nov 22 15:28:51 2004 +@@ -177,7 +177,7 @@ + #undef ASM_SPEC + #define ASM_SPEC \ + "%{V} %{v:%{!V:-V}} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s \ +- %{fpic|fPIC|fpie|fPIE:-K PIC} %(asm_cpu) %(asm_relax)" ++ %{fpic|fPIC|fpie|fPIE|pie:-K PIC} %(asm_cpu) %(asm_relax)" + + /* Same as sparc.h */ + #undef DBX_REGISTER_NUMBER +--- gcc-3.4.3/gcc/config/sparc/linux64.h.mps Mon Nov 22 15:28:40 2004 ++++ gcc-3.4.3/gcc/config/sparc/linux64.h Mon Nov 22 15:29:09 2004 +@@ -281,7 +281,7 @@ + %{T} \ + %{Ym,*} \ + %{Wa,*:%*} \ +--s %{fpic|fPIC|fpie|fPIE:-K PIC} \ ++-s %{fpic|fPIC|fpie|fPIE|pie:-K PIC} \ + %{mlittle-endian:-EL} \ + %(asm_cpu) %(asm_arch) %(asm_relax)" + diff --git a/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-incompat.patch b/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-incompat.patch new file mode 100644 index 0000000..e5bc302 --- /dev/null +++ b/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-incompat.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.old/gcc/gcc.c.mps Sun Nov 14 21:10:35 2004 ++++ gcc-4.0/gcc/gcc.c Sun Nov 14 21:43:17 2004 +@@ -794,6 +794,8 @@ + /* NB: This is shared amongst all front-ends. */ + static const char *cc1_options = + "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ ++ %{shared:%{static|pie|fPIE|fpie|fno-PIC|fno-pic:%e-shared and -static|pie|fPIE|fpie|fno-PIC|fno-pic are incompatible}}\ ++ %{pie:%{static|pg|p|profile:%e-pie and -static|pg|p|profile are incompatible}}\ + %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\ + %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}}\ + %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi}\ diff --git a/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-start_endfile.patch b/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-start_endfile.patch new file mode 100644 index 0000000..1fdc434 --- /dev/null +++ b/4.0.3/pie/upstream/00_all_gcc-4.0-cvs-start_endfile.patch @@ -0,0 +1,210 @@ +--- gcc/gcc/config/alpha/elf.h.startend~ 2003-12-25 16:17:34 +0100 ++++ gcc/gcc/config/alpha/elf.h 2005-03-01 17:06:40 +0100 +@@ -399,7 +399,7 @@ + #else + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}}\ +- crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + + /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the +@@ -408,9 +408,15 @@ + `main', followed by a normal ELF "finalizer" file, `crtn.o'. */ + + #undef ENDFILE_SPEC ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#else ++#define ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{shared:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#endif + + /* We support #pragma. */ + #define HANDLE_SYSV_PRAGMA 1 +--- gcc/gcc/config/arm/linux-elf.h.startend~ 2005-03-01 17:02:02 +0100 ++++ gcc/gcc/config/arm/linux-elf.h 2005-03-01 17:06:40 +0100 +@@ -63,12 +63,15 @@ + object constructed before entering `main'. */ + + #undef STARTFILE_SPEC ++#ifdef HAVE_LD_PIE + #define STARTFILE_SPEC \ +- "%{!shared: \ +- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ +- %{!p:%{profile:gcrt1.o%s} \ +- %{!profile:crt1.o%s}}}} \ +- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ ++ crti.o%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++#else ++#define STARTFILE_SPEC \ ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ ++ crti.o%s %{shared:crtbeginS.o%s;:crtbegin.o%s}" ++#endif + + /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which +@@ -77,8 +80,13 @@ + GNU/Linux "finalizer" file, `crtn.o'. */ + + #undef ENDFILE_SPEC ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ +- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" ++ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#else ++#define ENDFILE_SPEC \ ++ "%{shared:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#endif + + #undef LINK_SPEC + #ifdef USE_UCLIBC +--- gcc/gcc/config/ia64/linux.h.startend~ 2004-09-08 02:17:14 +0200 ++++ gcc/gcc/config/ia64/linux.h 2005-03-01 17:06:40 +0100 +@@ -25,14 +25,20 @@ + #else + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}}\ +- crti.o%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ crti.o%s %{shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + + /* Similar to standard Linux, but adding -ffast-math support. */ + #undef ENDFILE_SPEC ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#else ++#define ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{shared:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#endif + + /* Define this for shared library support because it isn't in the main + linux.h file. */ +--- gcc/gcc/config/rs6000/linux64.h.startend~ 2004-12-02 03:21:28 +0100 ++++ gcc/gcc/config/rs6000/linux64.h 2005-03-01 17:06:40 +0100 +@@ -152,7 +152,7 @@ + #endif + + #define ASM_SPEC32 "-a32 %{n} %{T} %{Ym,*} %{Yd,*} \ +-%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ ++%{mrelocatable} %{mrelocatable-lib} %{fpic|fPIC|fpie|fPIE:-K PIC} \ + %{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ + %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ + %{mcall-freebsd: -mbig} \ +--- gcc/gcc/config/rs6000/sysv4.h.startend~ 2005-03-01 17:02:02 +0100 ++++ gcc/gcc/config/rs6000/sysv4.h 2005-03-01 17:09:23 +0100 +@@ -1122,12 +1122,18 @@ + #define STARTFILE_LINUX_SPEC "\ + %{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ + %{mnewlib:ecrti.o%s;:crti.o%s} \ +-%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++%{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + ++#ifdef HAVE_LD_PIE + #define ENDFILE_LINUX_SPEC "\ + %{shared|pie:crtendS.o%s;:crtend.o%s} \ + %{mnewlib:ecrtn.o%s;:crtn.o%s}" ++#else ++#define ENDFILE_LINUX_SPEC "\ ++%{shared:crtendS.o%s;:crtend.o%s} \ ++%{mnewlib:ecrtn.o%s;:crtn.o%s}" ++#endif + + #define LINK_START_LINUX_SPEC "" + +--- gcc/gcc/config/sparc/linux.h.startend~ 2005-01-20 21:39:42 +0100 ++++ gcc/gcc/config/sparc/linux.h 2005-03-01 17:06:40 +0100 +@@ -49,14 +49,14 @@ + object constructed before entering `main'. */ + + #undef STARTFILE_SPEC +-#if defined HAVE_LD_PIE ++#ifdef HAVE_LD_PIE + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ + crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" + #else + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}}\ +- crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + + /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on +@@ -66,9 +66,15 @@ + GNU/Linux "finalizer" file, `crtn.o'. */ + + #undef ENDFILE_SPEC ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#else ++#define ENDFILE_SPEC \ ++ "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ++ %{shared:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#endif + + /* This is for -profile to use -lc_p instead of -lc. */ + #undef CC1_SPEC +--- gcc/gcc/config/sparc/linux64.h.startend~ 2005-01-21 11:15:56 +0100 ++++ gcc/gcc/config/sparc/linux64.h 2005-03-01 17:06:40 +0100 +@@ -80,7 +80,7 @@ + #else + #define STARTFILE_SPEC \ + "%{!shared:%{pg|p:gcrt1.o%s;:crt1.o%s}}\ +- crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbeginS.o%s}" ++ crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbeginS.o%s}" + #endif + + /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on +@@ -90,10 +90,15 @@ + GNU/Linux "finalizer" file, `crtn.o'. */ + + #undef ENDFILE_SPEC +- ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ + "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\ + %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" ++#else ++#define ENDFILE_SPEC \ ++ "%{shared:crtendS.o%s;:crtend.o%s} crtn.o%s\ ++ %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" ++#endif + + /* The GNU C++ standard library requires that these macros be defined. */ + #undef CPLUSPLUS_CPP_SPEC +--- gcc/gcc/config/linux.h.startend~ 2004-08-05 11:12:11 +0200 ++++ gcc/gcc/config/linux.h 2005-03-01 17:06:40 +0100 +@@ -46,7 +46,7 @@ + #else + #define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ +- crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + #endif + + /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on +@@ -56,8 +56,13 @@ + GNU/Linux "finalizer" file, `crtn.o'. */ + + #undef ENDFILE_SPEC ++#ifdef HAVE_LD_PIE + #define ENDFILE_SPEC \ + "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#else ++#define ENDFILE_SPEC \ ++ "%{shared:crtendS.o%s;:crtend.o%s} crtn.o%s" ++#endif + + /* This is for -profile to use -lc_p instead of -lc. */ + #ifndef CC1_SPEC diff --git a/4.0.3/pie/upstream/03_all_gcc-3.4.0-v8.7.6.1-pie-arm.patch b/4.0.3/pie/upstream/03_all_gcc-3.4.0-v8.7.6.1-pie-arm.patch new file mode 100644 index 0000000..b97a772 --- /dev/null +++ b/4.0.3/pie/upstream/03_all_gcc-3.4.0-v8.7.6.1-pie-arm.patch @@ -0,0 +1,16 @@ +--- gcc-3.4.0/gcc/config/arm/linux-elf.h.mps Thu May 20 09:11:17 2004 ++++ gcc-3.4.0/gcc/config/arm/linux-elf.h Thu May 20 09:12:28 2004 +@@ -91,10 +91,11 @@ + #define LINK_SPEC "%{h*} %{version:-v} \ + %{b} %{Wl,*:%*} \ +- %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ ++ %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ ++ %{static:-Bstatic}} \ + -X \ + %{mbig-endian:-EB}" \ + SUBTARGET_EXTRA_LINK_SPEC diff --git a/4.0.3/uclibc/90_all_100-uclibc-conf.patch b/4.0.3/uclibc/90_all_100-uclibc-conf.patch new file mode 100644 index 0000000..acc2111 --- /dev/null +++ b/4.0.3/uclibc/90_all_100-uclibc-conf.patch @@ -0,0 +1,518 @@ +--- gcc-4.0.2/gcc/config/t-linux-uclibc ++++ gcc-4.0.2/gcc/config/t-linux-uclibc +@@ -0,0 +1,5 @@ ++# Remove glibc specific files added in t-linux ++SHLIB_MAPFILES := $(filter-out $(srcdir)/config/libgcc-glibc.ver, $(SHLIB_MAPFILES)) ++ ++# Use unwind-dw2-fde instead of unwind-dw2-fde-glibc ++LIB2ADDEH := $(subst unwind-dw2-fde-glibc.c,unwind-dw2-fde.c,$(LIB2ADDEH)) +--- gcc-4.0.2/gcc/config.gcc ++++ gcc-4.0.2/gcc/config.gcc +@@ -1778,7 +1778,7 @@ + ;; + sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \ + sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ +- sh-*-linux* | sh[346lbe]*-*-linux* | \ ++ sh*-*-linux* | sh[346lbe]*-*-linux* | \ + sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \ + sh64-*-netbsd* | sh64l*-*-netbsd*) + tmake_file="${tmake_file} sh/t-sh sh/t-elf" +@@ -2234,10 +2234,16 @@ + *) + echo "*** Configuration ${target} not supported" 1>&2 + exit 1 + ;; + esac ++ ++# Rather than hook into each target, just do it after all the linux ++# targets have been processed ++case ${target} in ++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC" ; tmake_file="${tmake_file} t-linux-uclibc" ++esac + + case ${target} in + i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1) + tmake_file="${tmake_file} i386/t-gmm_malloc" + ;; +--- gcc-4.0.2/gcc/config/alpha/linux-elf.h ++++ gcc-4.0.2/gcc/config/alpha/linux-elf.h +@@ -27,7 +27,11 @@ + #define SUBTARGET_EXTRA_SPECS \ + { "elf_dynamic_linker", ELF_DYNAMIC_LINKER }, + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else + #define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#endif + + #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ +--- gcc-4.0.2/gcc/config/arm/linux-elf.h ++++ gcc-4.0.2/gcc/config/arm/linux-elf.h +@@ -81,14 +81,19 @@ + #define ENDFILE_SPEC \ + "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "%{h*} %{version:-v} \ + %{b} %{Wl,*:%*} \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "} \ + -X \ + %{mbig-endian:-EB}" \ + SUBTARGET_EXTRA_LINK_SPEC +--- gcc-4.0.2/gcc/config/cris/linux.h ++++ gcc-4.0.2/gcc/config/cris/linux.h +@@ -79,6 +79,25 @@ + #undef CRIS_DEFAULT_CPU_VERSION + #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG + ++#ifdef USE_UCLIBC ++ ++#undef CRIS_SUBTARGET_VERSION ++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc" ++ ++#undef CRIS_LINK_SUBTARGET_SPEC ++#define CRIS_LINK_SUBTARGET_SPEC \ ++ "-mcrislinux\ ++ -rpath-link include/asm/../..%s\ ++ %{shared} %{static}\ ++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\ ++ %{!shared: \ ++ %{!static: \ ++ %{rdynamic:-export-dynamic} \ ++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \ ++ %{!r:%{O2|O3: --gc-sections}}" ++ ++#else /* USE_UCLIBC */ ++ + #undef CRIS_SUBTARGET_VERSION + #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu" + +@@ -93,6 +112,8 @@ + %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\ + %{!r:%{O2|O3: --gc-sections}}" + ++#endif /* USE_UCLIBC */ ++ + + /* Node: Run-time Target */ + +--- gcc-4.0.2/gcc/config/i386/linux.h ++++ gcc-4.0.2/gcc/config/i386/linux.h +@@ -107,6 +107,11 @@ + #define LINK_EMULATION "elf_i386" + #define DYNAMIC_LINKER "/lib/ld-linux.so.2" + ++#ifdef USE_UCLIBC ++#undef DYNAMIC_LINKER ++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#endif ++ + #undef SUBTARGET_EXTRA_SPECS + #define SUBTARGET_EXTRA_SPECS \ + { "link_emulation", LINK_EMULATION },\ +--- gcc-4.0.2/gcc/config/i386/linux64.h ++++ gcc-4.0.2/gcc/config/i386/linux64.h +@@ -54,14 +54,21 @@ + When the -shared link option is used a final link is not being + done. */ + ++#ifdef USE_UCLIBC ++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0" ++#else ++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ +- %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \ ++ %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \ ++ %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \ + %{static:-static}}" + + #define MULTILIB_DEFAULTS { "m64" } +--- gcc-4.0.2/gcc/config/ia64/linux.h ++++ gcc-4.0.2/gcc/config/ia64/linux.h +@@ -37,13 +37,18 @@ + /* Define this for shared library support because it isn't in the main + linux.h file. */ + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "\ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}}" + + +--- gcc-4.0.2/gcc/config/m68k/linux.h ++++ gcc-4.0.2/gcc/config/m68k/linux.h +@@ -127,12 +127,17 @@ + + /* If ELF is the default format, we should not use /lib/elf. */ + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "-m m68kelf %{shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \ ++ %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static}}" + + /* For compatibility with linux/a.out */ +--- gcc-4.0.2/gcc/config/mips/linux.h ++++ gcc-4.0.2/gcc/config/mips/linux.h +@@ -108,14 +108,19 @@ + + /* Borrowed from sparc/linux.h */ + #undef LINK_SPEC ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1" ++#endif + #define LINK_SPEC \ + "%(endian_spec) \ + %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}}}" + + #undef SUBTARGET_ASM_SPEC +--- gcc-4.0.2/gcc/config/pa/pa-linux.h ++++ gcc-4.0.2/gcc/config/pa/pa-linux.h +@@ -82,13 +82,18 @@ + /* Define this for shared library support because it isn't in the main + linux.h file. */ + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "\ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}}" + + /* glibc's profiling functions don't need gcc to allocate counters. */ +--- gcc-4.0.2/gcc/config/rs6000/linux.h ++++ gcc-4.0.2/gcc/config/rs6000/linux.h +@@ -69,7 +69,11 @@ + #define LINK_START_DEFAULT_SPEC "%(link_start_linux)" + + #undef LINK_OS_DEFAULT_SPEC ++#ifdef USE_UCLIBC ++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)" ++#else + #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" ++#endif + + #define LINK_GCC_C_SEQUENCE_SPEC \ + "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" +--- gcc-4.0.2/gcc/config/rs6000/sysv4.h ++++ gcc-4.0.2/gcc/config/rs6000/sysv4.h +@@ -949,6 +949,7 @@ + mcall-linux : %(link_os_linux) ; \ + mcall-gnu : %(link_os_gnu) ; \ + mcall-netbsd : %(link_os_netbsd) ; \ ++ mcall-linux-uclibc : %(link_os_linux_uclibc); \ + mcall-openbsd: %(link_os_openbsd) ; \ + : %(link_os_default) }" + +@@ -1127,6 +1128,10 @@ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" + ++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \ ++ %{rdynamic:-export-dynamic} \ ++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}" ++ + #if defined(HAVE_LD_EH_FRAME_HDR) + # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif +@@ -1293,6 +1298,7 @@ + { "link_os_sim", LINK_OS_SIM_SPEC }, \ + { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \ + { "link_os_linux", LINK_OS_LINUX_SPEC }, \ ++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \ + { "link_os_gnu", LINK_OS_GNU_SPEC }, \ + { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ + { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ +--- gcc-4.0.2/gcc/config/s390/linux.h ++++ gcc-4.0.2/gcc/config/s390/linux.h +@@ -77,6 +77,13 @@ + #define MULTILIB_DEFAULTS { "m31" } + #endif + ++#ifdef USE_UCLIBC ++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0" ++#else ++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1" ++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1" ++#endif + #undef LINK_SPEC + #define LINK_SPEC \ + "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ +@@ -86,8 +93,8 @@ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker: \ +- %{m31:-dynamic-linker /lib/ld.so.1} \ +- %{m64:-dynamic-linker /lib/ld64.so.1}}}}" ++ %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \ ++ %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}" + + + #define TARGET_ASM_FILE_END file_end_indicate_exec_stack +--- gcc-4.0.2/gcc/config/sh/linux.h ++++ gcc-4.0.2/gcc/config/sh/linux.h +@@ -67,11 +67,16 @@ + #undef SUBTARGET_LINK_EMUL_SUFFIX + #define SUBTARGET_LINK_EMUL_SUFFIX "_linux" + #undef SUBTARGET_LINK_SPEC ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#endif + #define SUBTARGET_LINK_SPEC \ + "%{shared:-shared} \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}" + + #undef LIB_SPEC +--- gcc-4.0.2/gcc/config/sparc/linux.h ++++ gcc-4.0.2/gcc/config/sparc/linux.h +@@ -130,14 +130,19 @@ + + /* If ELF is the default format, we should not use /lib/elf. */ + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#endif + #undef LINK_SPEC + #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \ + %{!mno-relax:%{!r:-relax}} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}}}" + + /* The sun bundled assembler doesn't accept -Yd, (and neither does gas). +--- gcc-4.0.2/gcc/config/sparc/linux64.h ++++ gcc-4.0.2/gcc/config/sparc/linux64.h +@@ -167,12 +166,17 @@ + { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \ + { "link_arch", LINK_ARCH_SPEC }, + ++#ifdef USE_UCLIBC ++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#else ++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#endif + #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ ++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \ + %{static:-static}}} \ + " + +--- gcc-4.0.2/libtool.m4 ++++ gcc-4.0.2/libtool.m4 +@@ -682,6 +682,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'] +--- gcc-4.0.2/ltconfig ++++ gcc-4.0.2/ltconfig +@@ -603,6 +603,7 @@ + + # Transform linux* to *-*-linux-gnu*, to support old configure scripts. + case $host_os in ++linux-uclibc*) ;; + linux-gnu*) ;; + linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` + esac +@@ -1274,6 +1275,23 @@ + dynamic_linker='GNU/Linux ld.so' + ;; + ++linux-uclibc*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' ++ soname_spec='${libname}${release}.so$major' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ # This implies no fast_install, which is unacceptable. ++ # Some rework will be needed to allow for fast_install ++ # before this can be enabled. ++ hardcode_into_libs=yes ++ # Assume using the uClibc dynamic linker. ++ dynamic_linker="uClibc ld.so" ++ ;; ++ + netbsd*) + need_lib_prefix=no + need_version=no +--- gcc-4.0.2/libffi/configure ++++ gcc-4.0.2/libffi/configure +@@ -3457,6 +3457,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/libgfortran/configure ++++ gcc-4.0.2/libgfortran/configure +@@ -3681,6 +3681,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/libjava/configure ++++ gcc-4.0.2/libjava/configure +@@ -4351,6 +4351,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/libmudflap/configure ++++ gcc-4.0.2/libmudflap/configure +@@ -5380,6 +5380,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/libobjc/configure ++++ gcc-4.0.2/libobjc/configure +@@ -3283,6 +3283,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/boehm-gc/configure ++++ gcc-4.0.2/boehm-gc/configure +@@ -4320,6 +4320,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +--- gcc-4.0.2/zlib/configure ++++ gcc-4.0.2/zlib/configure +@@ -3426,6 +3426,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' diff --git a/4.0.3/uclibc/91_all_200-uclibc-locale.patch b/4.0.3/uclibc/91_all_200-uclibc-locale.patch new file mode 100644 index 0000000..ac4cf97 --- /dev/null +++ b/4.0.3/uclibc/91_all_200-uclibc-locale.patch @@ -0,0 +1,3237 @@ +diff -urN gcc-4.0.0-100/libstdc++-v3/acinclude.m4 gcc-4.0.0/libstdc++-v3/acinclude.m4 +--- gcc-4.0.0-100/libstdc++-v3/acinclude.m4 2005-04-30 13:06:53.000000000 -0500 ++++ gcc-4.0.0/libstdc++-v3/acinclude.m4 2005-04-28 20:19:01.000000000 -0500 +@@ -1104,7 +1104,7 @@ + AC_MSG_CHECKING([for C locale to use]) + GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@], + [use MODEL for target locale package], +- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto]) ++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto]) + + # If they didn't use this option switch, or if they specified --enable + # with no specific model, we'll have to look for one. If they +@@ -1120,6 +1120,9 @@ + # Default to "generic". + if test $enable_clocale_flag = auto; then + case ${target_os} in ++ *-uclibc*) ++ enable_clocale_flag=uclibc ++ ;; + linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) + AC_EGREP_CPP([_GLIBCXX_ok], [ + #include <features.h> +@@ -1263,6 +1266,40 @@ + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; ++ uclibc) ++ AC_MSG_RESULT(uclibc) ++ ++ # Declare intention to use gettext, and add support for specific ++ # languages. ++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT ++ ALL_LINGUAS="de fr" ++ ++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc. ++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no) ++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then ++ USE_NLS=yes ++ fi ++ # Export the build objects. ++ for ling in $ALL_LINGUAS; do \ ++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \ ++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \ ++ done ++ AC_SUBST(glibcxx_MOFILES) ++ AC_SUBST(glibcxx_POFILES) ++ ++ CLOCALE_H=config/locale/uclibc/c_locale.h ++ CLOCALE_CC=config/locale/uclibc/c_locale.cc ++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc ++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc ++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc ++ CMESSAGES_H=config/locale/uclibc/messages_members.h ++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc ++ CMONEY_CC=config/locale/uclibc/monetary_members.cc ++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc ++ CTIME_H=config/locale/uclibc/time_members.h ++ CTIME_CC=config/locale/uclibc/time_members.cc ++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h ++ ;; + esac + + # This is where the testsuite looks for locale catalogs, using the +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,59 @@ ++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*- ++ ++// Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// Written by Jakub Jelinek <jakub@redhat.com> ++ ++#include <clocale> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning clean this up ++#endif ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ ++extern "C" __typeof(iswctype_l) __iswctype_l; ++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l; ++extern "C" __typeof(strcoll_l) __strcoll_l; ++extern "C" __typeof(strftime_l) __strftime_l; ++extern "C" __typeof(strtod_l) __strtod_l; ++extern "C" __typeof(strtof_l) __strtof_l; ++extern "C" __typeof(strtold_l) __strtold_l; ++extern "C" __typeof(strxfrm_l) __strxfrm_l; ++extern "C" __typeof(towlower_l) __towlower_l; ++extern "C" __typeof(towupper_l) __towupper_l; ++extern "C" __typeof(wcscoll_l) __wcscoll_l; ++extern "C" __typeof(wcsftime_l) __wcsftime_l; ++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l; ++extern "C" __typeof(wctype_l) __wctype_l; ++extern "C" __typeof(newlocale) __newlocale; ++extern "C" __typeof(freelocale) __freelocale; ++extern "C" __typeof(duplocale) __duplocale; ++extern "C" __typeof(uselocale) __uselocale; ++ ++#endif // GLIBC 2.3 and later +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,160 @@ ++// Wrapper for underlying C-language localization -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.8 Standard locale categories. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <cerrno> // For errno ++#include <locale> ++#include <stdexcept> ++#include <langinfo.h> ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __strtol_l(S, E, B, L) strtol((S), (E), (B)) ++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B)) ++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B)) ++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B)) ++#define __strtof_l(S, E, L) strtof((S), (E)) ++#define __strtod_l(S, E, L) strtod((S), (E)) ++#define __strtold_l(S, E, L) strtold((S), (E)) ++#warning should dummy __newlocale check for C|POSIX ? ++#define __newlocale(a, b, c) NULL ++#define __freelocale(a) ((void)0) ++#define __duplocale(a) __c_locale() ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ float __f = __strtof_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __f; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ double __d = __strtod_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __d; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ long double __ld = __strtold_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __ld; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ void ++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, ++ __c_locale __old) ++ { ++ __cloc = __newlocale(1 << LC_ALL, __s, __old); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ if (!__cloc) ++ { ++ // This named locale is not supported by the underlying OS. ++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale " ++ "name not valid")); ++ } ++#endif ++ } ++ ++ void ++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc) ++ { ++ if (_S_get_c_locale() != __cloc) ++ __freelocale(__cloc); ++ } ++ ++ __c_locale ++ locale::facet::_S_clone_c_locale(__c_locale& __cloc) ++ { return __duplocale(__cloc); } ++} // namespace std ++ ++namespace __gnu_cxx ++{ ++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] = ++ { ++ "LC_CTYPE", ++ "LC_NUMERIC", ++ "LC_TIME", ++ "LC_COLLATE", ++ "LC_MONETARY", ++ "LC_MESSAGES", ++#if _GLIBCXX_NUM_CATEGORIES != 0 ++ "LC_PAPER", ++ "LC_NAME", ++ "LC_ADDRESS", ++ "LC_TELEPHONE", ++ "LC_MEASUREMENT", ++ "LC_IDENTIFICATION" ++#endif ++ }; ++} ++ ++namespace std ++{ ++ const char* const* const locale::_S_categories = __gnu_cxx::category_names; ++} // namespace std +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,115 @@ ++// Wrapper for underlying C-language localization -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.8 Standard locale categories. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#ifndef _C_LOCALE_H ++#define _C_LOCALE_H 1 ++ ++#pragma GCC system_header ++ ++#include <cstring> // get std::strlen ++#include <cstdio> // get std::snprintf or std::sprintf ++#include <clocale> ++#include <langinfo.h> // For codecvt ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this ++#endif ++#ifdef __UCLIBC_HAS_LOCALE__ ++#include <iconv.h> // For codecvt using iconv, iconv_t ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++#include <libintl.h> // For messages ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning what is _GLIBCXX_C_LOCALE_GNU for ++#endif ++#define _GLIBCXX_C_LOCALE_GNU 1 ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix categories ++#endif ++// #define _GLIBCXX_NUM_CATEGORIES 6 ++#define _GLIBCXX_NUM_CATEGORIES 0 ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++namespace __gnu_cxx ++{ ++ extern "C" __typeof(uselocale) __uselocale; ++} ++#endif ++ ++namespace std ++{ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ typedef __locale_t __c_locale; ++#else ++ typedef int* __c_locale; ++#endif ++ ++ // Convert numeric value of type _Tv to string and return length of ++ // string. If snprintf is available use it, otherwise fall back to ++ // the unsafe sprintf which, in general, can be dangerous and should ++ // be avoided. ++ template<typename _Tv> ++ int ++ __convert_from_v(char* __out, const int __size, const char* __fmt, ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ _Tv __v, const __c_locale& __cloc, int __prec) ++ { ++ __c_locale __old = __gnu_cxx::__uselocale(__cloc); ++#else ++ _Tv __v, const __c_locale&, int __prec) ++ { ++# ifdef __UCLIBC_HAS_LOCALE__ ++ char* __old = std::setlocale(LC_ALL, NULL); ++ char* __sav = new char[std::strlen(__old) + 1]; ++ std::strcpy(__sav, __old); ++ std::setlocale(LC_ALL, "C"); ++# endif ++#endif ++ ++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __gnu_cxx::__uselocale(__old); ++#elif defined __UCLIBC_HAS_LOCALE__ ++ std::setlocale(LC_ALL, __sav); ++ delete [] __sav; ++#endif ++ return __ret; ++ } ++} ++ ++#endif +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,306 @@ ++// std::codecvt implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2002, 2003 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.1.5 - Template class codecvt ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++namespace std ++{ ++ // Specializations. ++#ifdef _GLIBCXX_USE_WCHAR_T ++ codecvt_base::result ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_out(state_type& __state, const intern_type* __from, ++ const intern_type* __from_end, const intern_type*& __from_next, ++ extern_type* __to, extern_type* __to_end, ++ extern_type*& __to_next) const ++ { ++ result __ret = ok; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // wcsnrtombs is *very* fast but stops if encounters NUL characters: ++ // in case we fall back to wcrtomb and then continue, in a loop. ++ // NB: wcsnrtombs is a GNU extension ++ for (__from_next = __from, __to_next = __to; ++ __from_next < __from_end && __to_next < __to_end ++ && __ret == ok;) ++ { ++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0', ++ __from_end - __from_next); ++ if (!__from_chunk_end) ++ __from_chunk_end = __from_end; ++ ++ __from = __from_next; ++ const size_t __conv = wcsnrtombs(__to_next, &__from_next, ++ __from_chunk_end - __from_next, ++ __to_end - __to_next, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // wcrtomb. ++ for (; __from < __from_next; ++__from) ++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state); ++ __state = __tmp_state; ++ __ret = error; ++ } ++ else if (__from_next && __from_next < __from_chunk_end) ++ { ++ __to_next += __conv; ++ __ret = partial; ++ } ++ else ++ { ++ __from_next = __from_chunk_end; ++ __to_next += __conv; ++ } ++ ++ if (__from_next < __from_end && __ret == ok) ++ { ++ extern_type __buf[MB_LEN_MAX]; ++ __tmp_state = __state; ++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state); ++ if (__conv > static_cast<size_t>(__to_end - __to_next)) ++ __ret = partial; ++ else ++ { ++ memcpy(__to_next, __buf, __conv); ++ __state = __tmp_state; ++ __to_next += __conv; ++ ++__from_next; ++ } ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++ ++ codecvt_base::result ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_in(state_type& __state, const extern_type* __from, ++ const extern_type* __from_end, const extern_type*& __from_next, ++ intern_type* __to, intern_type* __to_end, ++ intern_type*& __to_next) const ++ { ++ result __ret = ok; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters: ++ // in case we store a L'\0' and then continue, in a loop. ++ // NB: mbsnrtowcs is a GNU extension ++ for (__from_next = __from, __to_next = __to; ++ __from_next < __from_end && __to_next < __to_end ++ && __ret == ok;) ++ { ++ const extern_type* __from_chunk_end; ++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0', ++ __from_end ++ - __from_next)); ++ if (!__from_chunk_end) ++ __from_chunk_end = __from_end; ++ ++ __from = __from_next; ++ size_t __conv = mbsnrtowcs(__to_next, &__from_next, ++ __from_chunk_end - __from_next, ++ __to_end - __to_next, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // mbrtowc. ++ for (;; ++__to_next, __from += __conv) ++ { ++ __conv = mbrtowc(__to_next, __from, __from_end - __from, ++ &__tmp_state); ++ if (__conv == static_cast<size_t>(-1) ++ || __conv == static_cast<size_t>(-2)) ++ break; ++ } ++ __from_next = __from; ++ __state = __tmp_state; ++ __ret = error; ++ } ++ else if (__from_next && __from_next < __from_chunk_end) ++ { ++ // It is unclear what to return in this case (see DR 382). ++ __to_next += __conv; ++ __ret = partial; ++ } ++ else ++ { ++ __from_next = __from_chunk_end; ++ __to_next += __conv; ++ } ++ ++ if (__from_next < __from_end && __ret == ok) ++ { ++ if (__to_next < __to_end) ++ { ++ // XXX Probably wrong for stateful encodings ++ __tmp_state = __state; ++ ++__from_next; ++ *__to_next++ = L'\0'; ++ } ++ else ++ __ret = partial; ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_encoding() const throw() ++ { ++ // XXX This implementation assumes that the encoding is ++ // stateless and is either single-byte or variable-width. ++ int __ret = 0; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ if (MB_CUR_MAX == 1) ++ __ret = 1; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_max_length() const throw() ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ // XXX Probably wrong for stateful encodings. ++ int __ret = MB_CUR_MAX; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_length(state_type& __state, const extern_type* __from, ++ const extern_type* __end, size_t __max) const ++ { ++ int __ret = 0; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters: ++ // in case we advance past it and then continue, in a loop. ++ // NB: mbsnrtowcs is a GNU extension ++ ++ // A dummy internal buffer is needed in order for mbsnrtocws to consider ++ // its fourth parameter (it wouldn't with NULL as first parameter). ++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) ++ * __max)); ++ while (__from < __end && __max) ++ { ++ const extern_type* __from_chunk_end; ++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0', ++ __end ++ - __from)); ++ if (!__from_chunk_end) ++ __from_chunk_end = __end; ++ ++ const extern_type* __tmp_from = __from; ++ size_t __conv = mbsnrtowcs(__to, &__from, ++ __from_chunk_end - __from, ++ __max, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // mbrtowc. ++ for (__from = __tmp_from;; __from += __conv) ++ { ++ __conv = mbrtowc(NULL, __from, __end - __from, ++ &__tmp_state); ++ if (__conv == static_cast<size_t>(-1) ++ || __conv == static_cast<size_t>(-2)) ++ break; ++ } ++ __state = __tmp_state; ++ __ret += __from - __tmp_from; ++ break; ++ } ++ if (!__from) ++ __from = __from_chunk_end; ++ ++ __ret += __from - __tmp_from; ++ __max -= __conv; ++ ++ if (__from < __end && __max) ++ { ++ // XXX Probably wrong for stateful encodings ++ __tmp_state = __state; ++ ++__from; ++ ++__ret; ++ --__max; ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++#endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,80 @@ ++// std::collate implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2)) ++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N)) ++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2)) ++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N)) ++#endif ++ ++namespace std ++{ ++ // These are basically extensions to char_traits, and perhaps should ++ // be put there instead of here. ++ template<> ++ int ++ collate<char>::_M_compare(const char* __one, const char* __two) const ++ { ++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate); ++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0); ++ } ++ ++ template<> ++ size_t ++ collate<char>::_M_transform(char* __to, const char* __from, ++ size_t __n) const ++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ int ++ collate<wchar_t>::_M_compare(const wchar_t* __one, ++ const wchar_t* __two) const ++ { ++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate); ++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0); ++ } ++ ++ template<> ++ size_t ++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from, ++ size_t __n) const ++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); } ++#endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,300 @@ ++// std::ctype implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __wctype_l(S, L) wctype((S)) ++#define __towupper_l(C, L) towupper((C)) ++#define __towlower_l(C, L) towlower((C)) ++#define __iswctype_l(C, M, L) iswctype((C), (M)) ++#endif ++ ++namespace std ++{ ++ // NB: The other ctype<char> specializations are in src/locale.cc and ++ // various /config/os/* files. ++ template<> ++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs) ++ : ctype<char>(0, false, __refs) ++ { ++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) ++ { ++ this->_S_destroy_c_locale(this->_M_c_locale_ctype); ++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper; ++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower; ++ this->_M_table = this->_M_c_locale_ctype->__ctype_b; ++#endif ++ } ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ ctype<wchar_t>::__wmask_type ++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const ++ { ++ __wmask_type __ret; ++ switch (__m) ++ { ++ case space: ++ __ret = __wctype_l("space", _M_c_locale_ctype); ++ break; ++ case print: ++ __ret = __wctype_l("print", _M_c_locale_ctype); ++ break; ++ case cntrl: ++ __ret = __wctype_l("cntrl", _M_c_locale_ctype); ++ break; ++ case upper: ++ __ret = __wctype_l("upper", _M_c_locale_ctype); ++ break; ++ case lower: ++ __ret = __wctype_l("lower", _M_c_locale_ctype); ++ break; ++ case alpha: ++ __ret = __wctype_l("alpha", _M_c_locale_ctype); ++ break; ++ case digit: ++ __ret = __wctype_l("digit", _M_c_locale_ctype); ++ break; ++ case punct: ++ __ret = __wctype_l("punct", _M_c_locale_ctype); ++ break; ++ case xdigit: ++ __ret = __wctype_l("xdigit", _M_c_locale_ctype); ++ break; ++ case alnum: ++ __ret = __wctype_l("alnum", _M_c_locale_ctype); ++ break; ++ case graph: ++ __ret = __wctype_l("graph", _M_c_locale_ctype); ++ break; ++ default: ++ __ret = __wmask_type(); ++ } ++ return __ret; ++ } ++ ++ wchar_t ++ ctype<wchar_t>::do_toupper(wchar_t __c) const ++ { return __towupper_l(__c, _M_c_locale_ctype); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ wchar_t ++ ctype<wchar_t>::do_tolower(wchar_t __c) const ++ { return __towlower_l(__c, _M_c_locale_ctype); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ bool ++ ctype<wchar_t>:: ++ do_is(mask __m, wchar_t __c) const ++ { ++ // Highest bitmask in ctype_base == 10, but extra in "C" ++ // library for blank. ++ bool __ret = false; ++ const size_t __bitmasksize = 11; ++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) ++ if (__m & _M_bit[__bitcur] ++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) ++ { ++ __ret = true; ++ break; ++ } ++ return __ret; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const ++ { ++ for (; __lo < __hi; ++__vec, ++__lo) ++ { ++ // Highest bitmask in ctype_base == 10, but extra in "C" ++ // library for blank. ++ const size_t __bitmasksize = 11; ++ mask __m = 0; ++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) ++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype)) ++ __m |= _M_bit[__bitcur]; ++ *__vec = __m; ++ } ++ return __hi; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi && !this->do_is(__m, *__lo)) ++ ++__lo; ++ return __lo; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const ++ { ++ while (__lo < __hi && this->do_is(__m, *__lo) != 0) ++ ++__lo; ++ return __lo; ++ } ++ ++ wchar_t ++ ctype<wchar_t>:: ++ do_widen(char __c) const ++ { return _M_widen[static_cast<unsigned char>(__c)]; } ++ ++ const char* ++ ctype<wchar_t>:: ++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const ++ { ++ while (__lo < __hi) ++ { ++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)]; ++ ++__lo; ++ ++__dest; ++ } ++ return __hi; ++ } ++ ++ char ++ ctype<wchar_t>:: ++ do_narrow(wchar_t __wc, char __dfault) const ++ { ++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok) ++ return _M_narrow[__wc]; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ const int __c = wctob(__wc); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, ++ char* __dest) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ if (_M_narrow_ok) ++ while (__lo < __hi) ++ { ++ if (*__lo >= 0 && *__lo < 128) ++ *__dest = _M_narrow[*__lo]; ++ else ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++__lo; ++ ++__dest; ++ } ++ else ++ while (__lo < __hi) ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ ++__lo; ++ ++__dest; ++ } ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __hi; ++ } ++ ++ void ++ ctype<wchar_t>::_M_initialize_ctype() ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ wint_t __i; ++ for (__i = 0; __i < 128; ++__i) ++ { ++ const int __c = wctob(__i); ++ if (__c == EOF) ++ break; ++ else ++ _M_narrow[__i] = static_cast<char>(__c); ++ } ++ if (__i == 128) ++ _M_narrow_ok = true; ++ else ++ _M_narrow_ok = false; ++ for (size_t __j = 0; ++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j) ++ _M_widen[__j] = btowc(__j); ++ ++ for (size_t __k = 0; __k <= 11; ++__k) ++ { ++ _M_bit[__k] = static_cast<mask>(_ISbit(__k)); ++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]); ++ } ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ } ++#endif // _GLIBCXX_USE_WCHAR_T ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,100 @@ ++// std::messages implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix gettext stuff ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++extern "C" char *__dcgettext(const char *domainname, ++ const char *msgid, int category); ++#undef gettext ++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES) ++#else ++#undef gettext ++#define gettext(msgid) (msgid) ++#endif ++ ++namespace std ++{ ++ // Specializations. ++ template<> ++ string ++ messages<char>::do_get(catalog, int, int, const string& __dfault) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_messages); ++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str())); ++ __uselocale(__old); ++ return string(__msg); ++#elif defined __UCLIBC_HAS_LOCALE__ ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_messages); ++ const char* __msg = gettext(__dfault.c_str()); ++ setlocale(LC_ALL, __old); ++ free(__old); ++ return string(__msg); ++#else ++ const char* __msg = gettext(__dfault.c_str()); ++ return string(__msg); ++#endif ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ wstring ++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const ++ { ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_messages); ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ __uselocale(__old); ++ return _M_convert_from_char(__msg); ++# elif defined __UCLIBC_HAS_LOCALE__ ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_messages); ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ setlocale(LC_ALL, __old); ++ free(__old); ++ return _M_convert_from_char(__msg); ++# else ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ return _M_convert_from_char(__msg); ++# endif ++ } ++#endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,118 @@ ++// std::messages implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.7.1.2 messages functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix prototypes for *textdomain funcs ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++extern "C" char *__textdomain(const char *domainname); ++extern "C" char *__bindtextdomain(const char *domainname, ++ const char *dirname); ++#else ++#undef __textdomain ++#undef __bindtextdomain ++#define __textdomain(D) ((void)0) ++#define __bindtextdomain(D,P) ((void)0) ++#endif ++ ++ // Non-virtual member functions. ++ template<typename _CharT> ++ messages<_CharT>::messages(size_t __refs) ++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), ++ _M_name_messages(_S_get_c_name()) ++ { } ++ ++ template<typename _CharT> ++ messages<_CharT>::messages(__c_locale __cloc, const char* __s, ++ size_t __refs) ++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)), ++ _M_name_messages(__s) ++ { ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ _M_name_messages = __tmp; ++ } ++ ++ template<typename _CharT> ++ typename messages<_CharT>::catalog ++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, ++ const char* __dir) const ++ { ++ __bindtextdomain(__s.c_str(), __dir); ++ return this->do_open(__s, __loc); ++ } ++ ++ // Virtual member functions. ++ template<typename _CharT> ++ messages<_CharT>::~messages() ++ { ++ if (_M_name_messages != _S_get_c_name()) ++ delete [] _M_name_messages; ++ _S_destroy_c_locale(_M_c_locale_messages); ++ } ++ ++ template<typename _CharT> ++ typename messages<_CharT>::catalog ++ messages<_CharT>::do_open(const basic_string<char>& __s, ++ const locale&) const ++ { ++ // No error checking is done, assume the catalog exists and can ++ // be used. ++ __textdomain(__s.c_str()); ++ return 0; ++ } ++ ++ template<typename _CharT> ++ void ++ messages<_CharT>::do_close(catalog) const ++ { } ++ ++ // messages_byname ++ template<typename _CharT> ++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) ++ : messages<_CharT>(__refs) ++ { ++ if (this->_M_name_messages != locale::facet::_S_get_c_name()) ++ delete [] this->_M_name_messages; ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ this->_M_name_messages = __tmp; ++ ++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) ++ { ++ this->_S_destroy_c_locale(this->_M_c_locale_messages); ++ this->_S_create_c_locale(this->_M_c_locale_messages, __s); ++ } ++ } +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2005-04-28 01:23:02.000000000 -0500 +@@ -0,0 +1,692 @@ ++// std::moneypunct implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning optimize this for uclibc ++#warning tailor for stub locale support ++#endif ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ // Construct and return valid pattern consisting of some combination of: ++ // space none symbol sign value ++ money_base::pattern ++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn) ++ { ++ pattern __ret; ++ ++ // This insanely complicated routine attempts to construct a valid ++ // pattern for use with monyepunct. A couple of invariants: ++ ++ // if (__precedes) symbol -> value ++ // else value -> symbol ++ ++ // if (__space) space ++ // else none ++ ++ // none == never first ++ // space never first or last ++ ++ // Any elegant implementations of this are welcome. ++ switch (__posn) ++ { ++ case 0: ++ case 1: ++ // 1 The sign precedes the value and symbol. ++ __ret.field[0] = sign; ++ if (__space) ++ { ++ // Pattern starts with sign. ++ if (__precedes) ++ { ++ __ret.field[1] = symbol; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[1] = value; ++ __ret.field[3] = symbol; ++ } ++ __ret.field[2] = space; ++ } ++ else ++ { ++ // Pattern starts with sign and ends with none. ++ if (__precedes) ++ { ++ __ret.field[1] = symbol; ++ __ret.field[2] = value; ++ } ++ else ++ { ++ __ret.field[1] = value; ++ __ret.field[2] = symbol; ++ } ++ __ret.field[3] = none; ++ } ++ break; ++ case 2: ++ // 2 The sign follows the value and symbol. ++ if (__space) ++ { ++ // Pattern either ends with sign. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[2] = value; ++ } ++ else ++ { ++ __ret.field[0] = value; ++ __ret.field[2] = symbol; ++ } ++ __ret.field[1] = space; ++ __ret.field[3] = sign; ++ } ++ else ++ { ++ // Pattern ends with sign then none. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[1] = value; ++ } ++ else ++ { ++ __ret.field[0] = value; ++ __ret.field[1] = symbol; ++ } ++ __ret.field[2] = sign; ++ __ret.field[3] = none; ++ } ++ break; ++ case 3: ++ // 3 The sign immediately precedes the symbol. ++ if (__precedes) ++ { ++ __ret.field[0] = sign; ++ __ret.field[1] = symbol; ++ if (__space) ++ { ++ __ret.field[2] = space; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[2] = value; ++ __ret.field[3] = none; ++ } ++ } ++ else ++ { ++ __ret.field[0] = value; ++ if (__space) ++ { ++ __ret.field[1] = space; ++ __ret.field[2] = sign; ++ __ret.field[3] = symbol; ++ } ++ else ++ { ++ __ret.field[1] = sign; ++ __ret.field[2] = symbol; ++ __ret.field[3] = none; ++ } ++ } ++ break; ++ case 4: ++ // 4 The sign immediately follows the symbol. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[1] = sign; ++ if (__space) ++ { ++ __ret.field[2] = space; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[2] = value; ++ __ret.field[3] = none; ++ } ++ } ++ else ++ { ++ __ret.field[0] = value; ++ if (__space) ++ { ++ __ret.field[1] = space; ++ __ret.field[2] = symbol; ++ __ret.field[3] = sign; ++ } ++ else ++ { ++ __ret.field[1] = symbol; ++ __ret.field[2] = sign; ++ __ret.field[3] = none; ++ } ++ } ++ break; ++ default: ++ __ret = pattern(); ++ } ++ return __ret; ++ } ++ ++ template<> ++ void ++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, ++ const char*) ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<char, true>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = ""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = ""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = ""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, ++ __cloc)); ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign); ++ ++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); ++ if (!__nposn) ++ _M_data->_M_negative_sign = "()"; ++ else ++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, ++ __cloc); ++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign); ++ ++ // _Intl == true ++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); ++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol); ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, ++ __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ } ++ } ++ ++ template<> ++ void ++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, ++ const char*) ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<char, false>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = ""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = ""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = ""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, ++ __cloc)); ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign); ++ ++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); ++ if (!__nposn) ++ _M_data->_M_negative_sign = "()"; ++ else ++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, ++ __cloc); ++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign); ++ ++ // _Intl == false ++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); ++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol); ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ } ++ } ++ ++ template<> ++ moneypunct<char, true>::~moneypunct() ++ { delete _M_data; } ++ ++ template<> ++ moneypunct<char, false>::~moneypunct() ++ { delete _M_data; } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const char*) ++#else ++ const char* __name) ++#endif ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<wchar_t, true>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = ++ static_cast<wchar_t>(money_base::_S_atoms[__i]); ++ } ++ else ++ { ++ // Named locale. ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(__cloc); ++#else ++ // Switch to named locale so that mbsrtowcs will work. ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, __name); ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this... should be monetary ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# else ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++#endif ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ ++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); ++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); ++ ++ wchar_t* __wcs_ps = 0; ++ wchar_t* __wcs_ns = 0; ++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); ++ try ++ { ++ mbstate_t __state; ++ size_t __len = strlen(__cpossign); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ps = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state); ++ _M_data->_M_positive_sign = __wcs_ps; ++ } ++ else ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign); ++ ++ __len = strlen(__cnegsign); ++ if (!__nposn) ++ _M_data->_M_negative_sign = L"()"; ++ else if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ns = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state); ++ _M_data->_M_negative_sign = __wcs_ns; ++ } ++ else ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign); ++ ++ // _Intl == true. ++ __len = strlen(__ccurr); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ wchar_t* __wcs = new wchar_t[__len]; ++ mbsrtowcs(__wcs, &__ccurr, __len, &__state); ++ _M_data->_M_curr_symbol = __wcs; ++ } ++ else ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol); ++ } ++ catch (...) ++ { ++ delete _M_data; ++ _M_data = 0; ++ delete __wcs_ps; ++ delete __wcs_ns; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ __throw_exception_again; ++ } ++ ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, ++ __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ } ++ } ++ ++ template<> ++ void ++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc, ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const char*) ++#else ++ const char* __name) ++#endif ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<wchar_t, false>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = ++ static_cast<wchar_t>(money_base::_S_atoms[__i]); ++ } ++ else ++ { ++ // Named locale. ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(__cloc); ++#else ++ // Switch to named locale so that mbsrtowcs will work. ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, __name); ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this... should be monetary ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# else ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++#endif ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ ++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); ++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); ++ ++ wchar_t* __wcs_ps = 0; ++ wchar_t* __wcs_ns = 0; ++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); ++ try ++ { ++ mbstate_t __state; ++ size_t __len; ++ __len = strlen(__cpossign); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ps = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state); ++ _M_data->_M_positive_sign = __wcs_ps; ++ } ++ else ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign); ++ ++ __len = strlen(__cnegsign); ++ if (!__nposn) ++ _M_data->_M_negative_sign = L"()"; ++ else if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ns = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state); ++ _M_data->_M_negative_sign = __wcs_ns; ++ } ++ else ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign); ++ ++ // _Intl == true. ++ __len = strlen(__ccurr); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ wchar_t* __wcs = new wchar_t[__len]; ++ mbsrtowcs(__wcs, &__ccurr, __len, &__state); ++ _M_data->_M_curr_symbol = __wcs; ++ } ++ else ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol); ++ } ++ catch (...) ++ { ++ delete _M_data; ++ _M_data = 0; ++ delete __wcs_ps; ++ delete __wcs_ns; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ __throw_exception_again; ++ } ++ ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ } ++ } ++ ++ template<> ++ moneypunct<wchar_t, true>::~moneypunct() ++ { ++ if (_M_data->_M_positive_sign_size) ++ delete [] _M_data->_M_positive_sign; ++ if (_M_data->_M_negative_sign_size ++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0) ++ delete [] _M_data->_M_negative_sign; ++ if (_M_data->_M_curr_symbol_size) ++ delete [] _M_data->_M_curr_symbol; ++ delete _M_data; ++ } ++ ++ template<> ++ moneypunct<wchar_t, false>::~moneypunct() ++ { ++ if (_M_data->_M_positive_sign_size) ++ delete [] _M_data->_M_positive_sign; ++ if (_M_data->_M_negative_sign_size ++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0) ++ delete [] _M_data->_M_negative_sign; ++ if (_M_data->_M_curr_symbol_size) ++ delete [] _M_data->_M_curr_symbol; ++ delete _M_data; ++ } ++#endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2005-04-28 01:20:20.000000000 -0500 +@@ -0,0 +1,173 @@ ++// std::numpunct implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning tailor for stub locale support ++#endif ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __numpunct_cache<char>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_use_grouping = false; ++ ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ ++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) ++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i]; ++ ++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j) ++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, ++ __cloc)); ++ ++ // Check for NULL, which implies no grouping. ++ if (_M_data->_M_thousands_sep == '\0') ++ _M_data->_M_grouping = ""; ++ else ++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ } ++ ++ // NB: There is no way to extact this info from posix locales. ++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc); ++ _M_data->_M_truename = "true"; ++ _M_data->_M_truename_size = 4; ++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); ++ _M_data->_M_falsename = "false"; ++ _M_data->_M_falsename_size = 5; ++ } ++ ++ template<> ++ numpunct<char>::~numpunct() ++ { delete _M_data; } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __numpunct_cache<wchar_t>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_use_grouping = false; ++ ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) ++ _M_data->_M_atoms_out[__i] = ++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]); ++ ++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j) ++ _M_data->_M_atoms_in[__j] = ++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]); ++ } ++ else ++ { ++ // Named locale. ++ // NB: In the GNU model wchar_t is always 32 bit wide. ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# else ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++#endif ++ ++ if (_M_data->_M_thousands_sep == L'\0') ++ _M_data->_M_grouping = ""; ++ else ++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ } ++ ++ // NB: There is no way to extact this info from posix locales. ++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc); ++ _M_data->_M_truename = L"true"; ++ _M_data->_M_truename_size = 4; ++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); ++ _M_data->_M_falsename = L"false"; ++ _M_data->_M_falsename_size = 5; ++ } ++ ++ template<> ++ numpunct<wchar_t>::~numpunct() ++ { delete _M_data; } ++ #endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc 2005-04-28 01:13:15.000000000 -0500 +@@ -0,0 +1,406 @@ ++// std::time_get, std::time_put implementation, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions ++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning tailor for stub locale support ++#endif ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ __timepunct<char>:: ++ _M_put(char* __s, size_t __maxlen, const char* __format, ++ const tm* __tm) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm, ++ _M_c_locale_timepunct); ++#else ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_timepunct); ++ const size_t __len = strftime(__s, __maxlen, __format, __tm); ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ // Make sure __s is null terminated. ++ if (__len == 0) ++ __s[0] = '\0'; ++ } ++ ++ template<> ++ void ++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __timepunct_cache<char>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_c_locale_timepunct = _S_get_c_locale(); ++ ++ _M_data->_M_date_format = "%m/%d/%y"; ++ _M_data->_M_date_era_format = "%m/%d/%y"; ++ _M_data->_M_time_format = "%H:%M:%S"; ++ _M_data->_M_time_era_format = "%H:%M:%S"; ++ _M_data->_M_date_time_format = ""; ++ _M_data->_M_date_time_era_format = ""; ++ _M_data->_M_am = "AM"; ++ _M_data->_M_pm = "PM"; ++ _M_data->_M_am_pm_format = ""; ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = "Sunday"; ++ _M_data->_M_day2 = "Monday"; ++ _M_data->_M_day3 = "Tuesday"; ++ _M_data->_M_day4 = "Wednesday"; ++ _M_data->_M_day5 = "Thursday"; ++ _M_data->_M_day6 = "Friday"; ++ _M_data->_M_day7 = "Saturday"; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = "Sun"; ++ _M_data->_M_aday2 = "Mon"; ++ _M_data->_M_aday3 = "Tue"; ++ _M_data->_M_aday4 = "Wed"; ++ _M_data->_M_aday5 = "Thu"; ++ _M_data->_M_aday6 = "Fri"; ++ _M_data->_M_aday7 = "Sat"; ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = "January"; ++ _M_data->_M_month02 = "February"; ++ _M_data->_M_month03 = "March"; ++ _M_data->_M_month04 = "April"; ++ _M_data->_M_month05 = "May"; ++ _M_data->_M_month06 = "June"; ++ _M_data->_M_month07 = "July"; ++ _M_data->_M_month08 = "August"; ++ _M_data->_M_month09 = "September"; ++ _M_data->_M_month10 = "October"; ++ _M_data->_M_month11 = "November"; ++ _M_data->_M_month12 = "December"; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = "Jan"; ++ _M_data->_M_amonth02 = "Feb"; ++ _M_data->_M_amonth03 = "Mar"; ++ _M_data->_M_amonth04 = "Apr"; ++ _M_data->_M_amonth05 = "May"; ++ _M_data->_M_amonth06 = "Jun"; ++ _M_data->_M_amonth07 = "Jul"; ++ _M_data->_M_amonth08 = "Aug"; ++ _M_data->_M_amonth09 = "Sep"; ++ _M_data->_M_amonth10 = "Oct"; ++ _M_data->_M_amonth11 = "Nov"; ++ _M_data->_M_amonth12 = "Dec"; ++ } ++ else ++ { ++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc); ++ ++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc); ++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc); ++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc); ++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc); ++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc); ++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, ++ __cloc); ++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc); ++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc); ++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc); ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc); ++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc); ++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc); ++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc); ++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc); ++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc); ++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc); ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc); ++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc); ++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc); ++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc); ++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc); ++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc); ++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc); ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc); ++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc); ++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc); ++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc); ++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc); ++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc); ++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc); ++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc); ++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc); ++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc); ++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc); ++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc); ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc); ++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc); ++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc); ++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc); ++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc); ++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc); ++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc); ++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc); ++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc); ++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc); ++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc); ++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc); ++ } ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ __timepunct<wchar_t>:: ++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, ++ const tm* __tm) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct); ++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm, ++ _M_c_locale_timepunct); ++#else ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_timepunct); ++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm); ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ // Make sure __s is null terminated. ++ if (__len == 0) ++ __s[0] = L'\0'; ++ } ++ ++ template<> ++ void ++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __timepunct_cache<wchar_t>; ++ ++#warning wide time stuff ++// if (!__cloc) ++ { ++ // "C" locale ++ _M_c_locale_timepunct = _S_get_c_locale(); ++ ++ _M_data->_M_date_format = L"%m/%d/%y"; ++ _M_data->_M_date_era_format = L"%m/%d/%y"; ++ _M_data->_M_time_format = L"%H:%M:%S"; ++ _M_data->_M_time_era_format = L"%H:%M:%S"; ++ _M_data->_M_date_time_format = L""; ++ _M_data->_M_date_time_era_format = L""; ++ _M_data->_M_am = L"AM"; ++ _M_data->_M_pm = L"PM"; ++ _M_data->_M_am_pm_format = L""; ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = L"Sunday"; ++ _M_data->_M_day2 = L"Monday"; ++ _M_data->_M_day3 = L"Tuesday"; ++ _M_data->_M_day4 = L"Wednesday"; ++ _M_data->_M_day5 = L"Thursday"; ++ _M_data->_M_day6 = L"Friday"; ++ _M_data->_M_day7 = L"Saturday"; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = L"Sun"; ++ _M_data->_M_aday2 = L"Mon"; ++ _M_data->_M_aday3 = L"Tue"; ++ _M_data->_M_aday4 = L"Wed"; ++ _M_data->_M_aday5 = L"Thu"; ++ _M_data->_M_aday6 = L"Fri"; ++ _M_data->_M_aday7 = L"Sat"; ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = L"January"; ++ _M_data->_M_month02 = L"February"; ++ _M_data->_M_month03 = L"March"; ++ _M_data->_M_month04 = L"April"; ++ _M_data->_M_month05 = L"May"; ++ _M_data->_M_month06 = L"June"; ++ _M_data->_M_month07 = L"July"; ++ _M_data->_M_month08 = L"August"; ++ _M_data->_M_month09 = L"September"; ++ _M_data->_M_month10 = L"October"; ++ _M_data->_M_month11 = L"November"; ++ _M_data->_M_month12 = L"December"; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = L"Jan"; ++ _M_data->_M_amonth02 = L"Feb"; ++ _M_data->_M_amonth03 = L"Mar"; ++ _M_data->_M_amonth04 = L"Apr"; ++ _M_data->_M_amonth05 = L"May"; ++ _M_data->_M_amonth06 = L"Jun"; ++ _M_data->_M_amonth07 = L"Jul"; ++ _M_data->_M_amonth08 = L"Aug"; ++ _M_data->_M_amonth09 = L"Sep"; ++ _M_data->_M_amonth10 = L"Oct"; ++ _M_data->_M_amonth11 = L"Nov"; ++ _M_data->_M_amonth12 = L"Dec"; ++ } ++#if 0 ++ else ++ { ++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc); ++ ++ union { char *__s; wchar_t *__w; } __u; ++ ++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc); ++ _M_data->_M_date_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc); ++ _M_data->_M_date_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc); ++ _M_data->_M_time_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc); ++ _M_data->_M_time_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc); ++ _M_data->_M_date_time_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc); ++ _M_data->_M_date_time_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc); ++ _M_data->_M_am = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc); ++ _M_data->_M_pm = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc); ++ _M_data->_M_am_pm_format = __u.__w; ++ ++ // Day names, starting with "C"'s Sunday. ++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc); ++ _M_data->_M_day1 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc); ++ _M_data->_M_day2 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc); ++ _M_data->_M_day3 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc); ++ _M_data->_M_day4 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc); ++ _M_data->_M_day5 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc); ++ _M_data->_M_day6 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc); ++ _M_data->_M_day7 = __u.__w; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc); ++ _M_data->_M_aday1 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc); ++ _M_data->_M_aday2 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc); ++ _M_data->_M_aday3 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc); ++ _M_data->_M_aday4 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc); ++ _M_data->_M_aday5 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc); ++ _M_data->_M_aday6 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc); ++ _M_data->_M_aday7 = __u.__w; ++ ++ // Month names, starting with "C"'s January. ++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc); ++ _M_data->_M_month01 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc); ++ _M_data->_M_month02 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc); ++ _M_data->_M_month03 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc); ++ _M_data->_M_month04 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc); ++ _M_data->_M_month05 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc); ++ _M_data->_M_month06 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc); ++ _M_data->_M_month07 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc); ++ _M_data->_M_month08 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc); ++ _M_data->_M_month09 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc); ++ _M_data->_M_month10 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc); ++ _M_data->_M_month11 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc); ++ _M_data->_M_month12 = __u.__w; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc); ++ _M_data->_M_amonth01 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc); ++ _M_data->_M_amonth02 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc); ++ _M_data->_M_amonth03 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc); ++ _M_data->_M_amonth04 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc); ++ _M_data->_M_amonth05 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc); ++ _M_data->_M_amonth06 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc); ++ _M_data->_M_amonth07 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc); ++ _M_data->_M_amonth08 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc); ++ _M_data->_M_amonth09 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc); ++ _M_data->_M_amonth10 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc); ++ _M_data->_M_amonth11 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc); ++ _M_data->_M_amonth12 = __u.__w; ++ } ++#endif // 0 ++ } ++#endif ++} +diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h +--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h 2004-05-22 18:46:31.000000000 -0500 +@@ -0,0 +1,68 @@ ++// std::time_get, std::time_put implementation, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.5.1.2 - time_get functions ++// ISO C++ 14882: 22.2.5.3.2 - time_put functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(size_t __refs) ++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(_S_get_c_name()) ++ { _M_initialize_timepunct(); } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) ++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(_S_get_c_name()) ++ { _M_initialize_timepunct(); } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, ++ size_t __refs) ++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(__s) ++ { ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ _M_name_timepunct = __tmp; ++ _M_initialize_timepunct(__cloc); ++ } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::~__timepunct() ++ { ++ if (_M_name_timepunct != _S_get_c_name()) ++ delete [] _M_name_timepunct; ++ delete _M_data; ++ _S_destroy_c_locale(_M_c_locale_timepunct); ++ } +diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h +--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h 2005-04-28 01:10:27.000000000 -0500 +@@ -0,0 +1,64 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004 ++// Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++/** @file ctype_base.h ++ * This is an internal header file, included by other library headers. ++ * You should not attempt to use it directly. ++ */ ++ ++// Information as gleaned from /usr/include/ctype.h ++ ++ /// @brief Base class for ctype. ++ struct ctype_base ++ { ++ // Note: In uClibc, the following two types depend on configuration. ++ ++ // Non-standard typedefs. ++ typedef const __ctype_touplow_t* __to_type; ++ ++ // NB: Offsets into ctype<char>::_M_table force a particular size ++ // on the mask type. Because of this, we don't use an enum. ++ typedef __ctype_mask_t mask; ++ static const mask upper = _ISupper; ++ static const mask lower = _ISlower; ++ static const mask alpha = _ISalpha; ++ static const mask digit = _ISdigit; ++ static const mask xdigit = _ISxdigit; ++ static const mask space = _ISspace; ++ static const mask print = _ISprint; ++ static const mask graph = _ISalpha | _ISdigit | _ISpunct; ++ static const mask cntrl = _IScntrl; ++ static const mask punct = _ISpunct; ++ static const mask alnum = _ISalpha | _ISdigit; ++ }; +diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h +--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h 2002-06-24 00:49:19.000000000 -0500 +@@ -0,0 +1,69 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2000, 2002 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) ++// functions go in ctype.cc ++ ++ bool ++ ctype<char>:: ++ is(mask __m, char __c) const ++ { return _M_table[static_cast<unsigned char>(__c)] & __m; } ++ ++ const char* ++ ctype<char>:: ++ is(const char* __low, const char* __high, mask* __vec) const ++ { ++ while (__low < __high) ++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; ++ return __high; ++ } ++ ++ const char* ++ ctype<char>:: ++ scan_is(mask __m, const char* __low, const char* __high) const ++ { ++ while (__low < __high ++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) ++ ++__low; ++ return __low; ++ } ++ ++ const char* ++ ctype<char>:: ++ scan_not(mask __m, const char* __low, const char* __high) const ++ { ++ while (__low < __high ++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) ++ ++__low; ++ return __low; ++ } +diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h +--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2005-04-28 01:10:27.000000000 -0500 +@@ -0,0 +1,92 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004 ++// Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// Information as gleaned from /usr/include/ctype.h ++ ++ const ctype_base::mask* ++ ctype<char>::classic_table() throw() ++ { return __C_ctype_b; } ++ ++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del, ++ size_t __refs) ++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), ++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0) ++ { ++ _M_toupper = __C_ctype_toupper; ++ _M_tolower = __C_ctype_tolower; ++ _M_table = __table ? __table : __C_ctype_b; ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ } ++ ++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) ++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), ++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0) ++ { ++ _M_toupper = __C_ctype_toupper; ++ _M_tolower = __C_ctype_tolower; ++ _M_table = __table ? __table : __C_ctype_b; ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ } ++ ++ char ++ ctype<char>::do_toupper(char __c) const ++ { return _M_toupper[static_cast<unsigned char>(__c)]; } ++ ++ const char* ++ ctype<char>::do_toupper(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = _M_toupper[static_cast<unsigned char>(*__low)]; ++ ++__low; ++ } ++ return __high; ++ } ++ ++ char ++ ctype<char>::do_tolower(char __c) const ++ { return _M_tolower[static_cast<unsigned char>(__c)]; } ++ ++ const char* ++ ctype<char>::do_tolower(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = _M_tolower[static_cast<unsigned char>(*__low)]; ++ ++__low; ++ } ++ return __high; ++ } +diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h +--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600 ++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h 2005-04-28 01:10:27.000000000 -0500 +@@ -0,0 +1,44 @@ ++// Specific definitions for GNU/Linux -*- C++ -*- ++ ++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 2, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++#ifndef _GLIBCXX_OS_DEFINES ++#define _GLIBCXX_OS_DEFINES 1 ++ ++// System-specific #define, typedefs, corrections, etc, go here. This ++// file will come before all others. ++ ++// This keeps isanum, et al from being propagated as macros. ++#define __NO_CTYPE 1 ++ ++#include <features.h> ++ ++// We must not see the optimized string functions GNU libc defines. ++#define __NO_STRING_INLINES ++ ++#endif +diff -urN gcc-4.0.0-100/libstdc++-v3/configure gcc-4.0.0/libstdc++-v3/configure +--- gcc-4.0.0-100/libstdc++-v3/configure 2005-04-30 13:06:53.683055232 -0500 ++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 12:24:24.000000000 -0500 +@@ -3998,6 +3998,11 @@ + lt_cv_deplibs_check_method=pass_all + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +@@ -5672,7 +5677,7 @@ + enableval="$enable_clocale" + + case "$enableval" in +- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;; ++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;; + *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5 + echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;} + { (exit 1); exit 1; }; } ;; +@@ -5697,6 +5702,9 @@ + # Default to "generic". + if test $enable_clocale_flag = auto; then + case ${target_os} in ++ linux-uclibc*) ++ enable_clocale_flag=uclibc ++ ;; + linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5927,6 +5935,76 @@ + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; ++ uclibc) ++ echo "$as_me:$LINENO: result: uclibc" >&5 ++echo "${ECHO_T}uclibc" >&6 ++ ++ # Declare intention to use gettext, and add support for specific ++ # languages. ++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT ++ ALL_LINGUAS="de fr" ++ ++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc. ++ # Extract the first word of "msgfmt", so it can be a program name with args. ++set dummy msgfmt; ac_word=$2 ++echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++if test "${ac_cv_prog_check_msgfmt+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if test -n "$check_msgfmt"; then ++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_prog_check_msgfmt="yes" ++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++done ++ ++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no" ++fi ++fi ++check_msgfmt=$ac_cv_prog_check_msgfmt ++if test -n "$check_msgfmt"; then ++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5 ++echo "${ECHO_T}$check_msgfmt" >&6 ++else ++ echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6 ++fi ++ ++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then ++ USE_NLS=yes ++ fi ++ # Export the build objects. ++ for ling in $ALL_LINGUAS; do \ ++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \ ++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \ ++ done ++ ++ ++ ++ CLOCALE_H=config/locale/uclibc/c_locale.h ++ CLOCALE_CC=config/locale/uclibc/c_locale.cc ++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc ++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc ++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc ++ CMESSAGES_H=config/locale/uclibc/messages_members.h ++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc ++ CMONEY_CC=config/locale/uclibc/monetary_members.cc ++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc ++ CTIME_H=config/locale/uclibc/time_members.h ++ CTIME_CC=config/locale/uclibc/time_members.cc ++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h ++ ;; + esac + + # This is where the testsuite looks for locale catalogs, using the +diff -urN gcc-4.0.0-100/libstdc++-v3/configure.host gcc-4.0.0/libstdc++-v3/configure.host +--- gcc-4.0.0-100/libstdc++-v3/configure.host 2005-04-30 13:06:53.688054472 -0500 ++++ gcc-4.0.0/libstdc++-v3/configure.host 2005-04-28 20:20:32.000000000 -0500 +@@ -249,6 +249,12 @@ + ;; + esac + ++# Override for uClibc since linux-uclibc gets mishandled above. ++case "${host_os}" in ++ *-uclibc*) ++ os_include_dir="os/uclibc" ++ ;; ++esac + + # Set any OS-dependent and CPU-dependent bits. + # THIS TABLE IS SORTED. KEEP IT THAT WAY. +diff -urN gcc-4.0.0-100/libstdc++-v3/crossconfig.m4 gcc-4.0.0/libstdc++-v3/crossconfig.m4 +--- gcc-4.0.0-100/libstdc++-v3/crossconfig.m4 2005-04-30 13:06:53.689054320 -0500 ++++ gcc-4.0.0/libstdc++-v3/crossconfig.m4 2005-04-28 20:27:15.000000000 -0500 +@@ -142,6 +142,98 @@ + ;; + esac + ;; ++ *-uclibc*) ++# Temporary hack until we implement the float versions of the libm funcs ++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \ ++ machine/endian.h machine/param.h sys/machine.h sys/types.h \ ++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h]) ++ SECTION_FLAGS='-ffunction-sections -fdata-sections' ++ AC_SUBST(SECTION_FLAGS) ++ GLIBCXX_CHECK_LINKER_FEATURES ++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT ++ GLIBCXX_CHECK_WCHAR_T_SUPPORT ++ ++ # For LFS. ++ AC_DEFINE(HAVE_INT64_T) ++ case "$target" in ++ *-uclinux*) ++ # Don't enable LFS with uClinux ++ ;; ++ *) ++ AC_DEFINE(_GLIBCXX_USE_LFS) ++ esac ++ ++ # For showmanyc_helper(). ++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h) ++ GLIBCXX_CHECK_POLL ++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG ++ ++ # For xsputn_2(). ++ AC_CHECK_HEADERS(sys/uio.h) ++ GLIBCXX_CHECK_WRITEV ++ ++# AC_DEFINE(HAVE_ACOSF) ++# AC_DEFINE(HAVE_ASINF) ++# AC_DEFINE(HAVE_ATANF) ++# AC_DEFINE(HAVE_ATAN2F) ++ AC_DEFINE(HAVE_CEILF) ++ AC_DEFINE(HAVE_COPYSIGN) ++# AC_DEFINE(HAVE_COPYSIGNF) ++# AC_DEFINE(HAVE_COSF) ++# AC_DEFINE(HAVE_COSHF) ++# AC_DEFINE(HAVE_EXPF) ++# AC_DEFINE(HAVE_FABSF) ++ AC_DEFINE(HAVE_FINITE) ++ AC_DEFINE(HAVE_FINITEF) ++ AC_DEFINE(HAVE_FLOORF) ++# AC_DEFINE(HAVE_FMODF) ++# AC_DEFINE(HAVE_FREXPF) ++ AC_DEFINE(HAVE_HYPOT) ++# AC_DEFINE(HAVE_HYPOTF) ++ AC_DEFINE(HAVE_ISINF) ++ AC_DEFINE(HAVE_ISINFF) ++ AC_DEFINE(HAVE_ISNAN) ++ AC_DEFINE(HAVE_ISNANF) ++# AC_DEFINE(HAVE_LOGF) ++# AC_DEFINE(HAVE_LOG10F) ++# AC_DEFINE(HAVE_MODFF) ++# AC_DEFINE(HAVE_SINF) ++# AC_DEFINE(HAVE_SINHF) ++# AC_DEFINE(HAVE_SINCOS) ++# AC_DEFINE(HAVE_SINCOSF) ++ AC_DEFINE(HAVE_SQRTF) ++# AC_DEFINE(HAVE_TANF) ++# AC_DEFINE(HAVE_TANHF) ++ if test x"long_double_math_on_this_cpu" = x"yes"; then ++# AC_DEFINE(HAVE_ACOSL) ++# AC_DEFINE(HAVE_ASINL) ++# AC_DEFINE(HAVE_ATANL) ++# AC_DEFINE(HAVE_ATAN2L) ++# AC_DEFINE(HAVE_CEILL) ++# AC_DEFINE(HAVE_COPYSIGNL) ++# AC_DEFINE(HAVE_COSL) ++# AC_DEFINE(HAVE_COSHL) ++# AC_DEFINE(HAVE_EXPL) ++# AC_DEFINE(HAVE_FABSL) ++# AC_DEFINE(HAVE_FINITEL) ++# AC_DEFINE(HAVE_FLOORL) ++# AC_DEFINE(HAVE_FMODL) ++# AC_DEFINE(HAVE_FREXPL) ++# AC_DEFINE(HAVE_HYPOTL) ++# AC_DEFINE(HAVE_ISINFL) ++# AC_DEFINE(HAVE_ISNANL) ++# AC_DEFINE(HAVE_LOGL) ++# AC_DEFINE(HAVE_LOG10L) ++# AC_DEFINE(HAVE_MODFL) ++# AC_DEFINE(HAVE_POWL) ++# AC_DEFINE(HAVE_SINL) ++# AC_DEFINE(HAVE_SINHL) ++# AC_DEFINE(HAVE_SINCOSL) ++# AC_DEFINE(HAVE_SQRTL) ++# AC_DEFINE(HAVE_TANL) ++# AC_DEFINE(HAVE_TANHL) ++ fi ++ ;; + *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu) + AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \ + machine/endian.h machine/param.h sys/machine.h sys/types.h \ +@@ -156,7 +248,7 @@ + AC_DEFINE(HAVE_INT64_T) + case "$target" in + *-uclinux*) +- # Don't enable LFS with uClibc ++ # Don't enable LFS with uClinux + ;; + *) + AC_DEFINE(_GLIBCXX_USE_LFS) +diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h +--- gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-30 13:06:53.690054168 -0500 ++++ gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-28 20:15:56.000000000 -0500 +@@ -101,7 +101,9 @@ + using std::wmemcpy; + using std::wmemmove; + using std::wmemset; ++#if _GLIBCXX_HAVE_WCSFTIME + using std::wcsftime; ++#endif + + #if _GLIBCXX_USE_C99 + using std::wcstold; +diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h +--- gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-30 13:06:53.691054016 -0500 ++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-28 20:15:56.000000000 -0500 +@@ -179,7 +179,9 @@ + using ::wcscoll; + using ::wcscpy; + using ::wcscspn; ++#if _GLIBCXX_HAVE_WCSFTIME + using ::wcsftime; ++#endif + using ::wcslen; + using ::wcsncat; + using ::wcsncmp; diff --git a/4.0.3/uclibc/92_all_301-missing-execinfo_h.patch b/4.0.3/uclibc/92_all_301-missing-execinfo_h.patch new file mode 100644 index 0000000..0e2092f --- /dev/null +++ b/4.0.3/uclibc/92_all_301-missing-execinfo_h.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500 ++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500 +@@ -500,7 +500,7 @@ + #ifdef __linux__ + # include <features.h> + # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \ +- && !defined(__ia64__) ++ && !defined(__ia64__) && !defined(__UCLIBC__) + # ifndef GC_HAVE_BUILTIN_BACKTRACE + # define GC_HAVE_BUILTIN_BACKTRACE + # endif diff --git a/4.0.3/uclibc/92_all_302-c99-snprintf.patch b/4.0.3/uclibc/92_all_302-c99-snprintf.patch new file mode 100644 index 0000000..dfb22d6 --- /dev/null +++ b/4.0.3/uclibc/92_all_302-c99-snprintf.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500 ++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500 +@@ -142,7 +142,7 @@ + using ::vsprintf; + } + +-#if _GLIBCXX_USE_C99 ++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__) + + #undef snprintf + #undef vfscanf diff --git a/4.0.3/uclibc/92_all_303-c99-complex-ugly-hack.patch b/4.0.3/uclibc/92_all_303-c99-complex-ugly-hack.patch new file mode 100644 index 0000000..2ccc80d --- /dev/null +++ b/4.0.3/uclibc/92_all_303-c99-complex-ugly-hack.patch @@ -0,0 +1,12 @@ +--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500 ++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500 +@@ -7194,6 +7194,9 @@ + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <complex.h> ++#ifdef __UCLIBC__ ++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs ++#endif + int + main () + { |